diff --git a/composer.json b/composer.json index 4294d6b..d20de14 100644 --- a/composer.json +++ b/composer.json @@ -11,5 +11,8 @@ "twig/twig": "^2.0", "jadu/twig-attribute-parser": "^1.0", "jadu/twig-helper-options-modifier": "^1.0" + }, + "require-dev": { + "jadu/pulsar": "^14.0" } } diff --git a/composer.lock b/composer.lock index a7227ad..c9b8d17 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "ed14bb10e98ca03e1e340b070ed27d1b", + "content-hash": "e82aa8ed908a013bace1260178a2b408", "packages": [ { "name": "jadu/twig-array-extension", @@ -352,16 +352,16 @@ }, { "name": "twig/twig", - "version": "v2.15.5", + "version": "v2.15.6", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "fc02a6af3eeb97c4bf5650debc76c2eda85ac22e" + "reference": "ad637405a828601a56f32ccab9a85541c4b66c9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/fc02a6af3eeb97c4bf5650debc76c2eda85ac22e", - "reference": "fc02a6af3eeb97c4bf5650debc76c2eda85ac22e", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/ad637405a828601a56f32ccab9a85541c4b66c9d", + "reference": "ad637405a828601a56f32ccab9a85541c4b66c9d", "shasum": "" }, "require": { @@ -372,7 +372,7 @@ }, "require-dev": { "psr/container": "^1.0", - "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" + "symfony/phpunit-bridge": "^5.4.9|^6.3" }, "type": "library", "extra": { @@ -416,7 +416,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v2.15.5" + "source": "https://github.com/twigphp/Twig/tree/v2.15.6" }, "funding": [ { @@ -428,10 +428,48 @@ "type": "tidelift" } ], - "time": "2023-05-03T17:49:41+00:00" + "time": "2023-11-21T17:34:48+00:00" + } + ], + "packages-dev": [ + { + "name": "jadu/pulsar", + "version": "14.0.1", + "source": { + "type": "git", + "url": "https://github.com/jadu/pulsar.git", + "reference": "72970dccd2f93fa2b1104ff6a66a3113fc02add2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jadu/pulsar/zipball/72970dccd2f93fa2b1104ff6a66a3113fc02add2", + "reference": "72970dccd2f93fa2b1104ff6a66a3113fc02add2", + "shasum": "" + }, + "require": { + "twig/twig": "^2.0" + }, + "require-dev": { + "symfony/yaml": "*" + }, + "type": "library", + "autoload": { + "psr-0": { + "Jadu\\Pulsar": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The User Experience and Interface framework for the Jadu Continuum Platform", + "support": { + "issues": "https://github.com/jadu/pulsar/issues", + "source": "https://github.com/jadu/pulsar/tree/14.0.1" + }, + "time": "2023-11-02T11:37:16+00:00" } ], - "packages-dev": [], "aliases": [], "minimum-stability": "stable", "stability-flags": [], diff --git a/dist/js/bundle.js b/dist/js/bundle.js index deca5a8..c295b99 100644 --- a/dist/js/bundle.js +++ b/dist/js/bundle.js @@ -26760,10 +26760,6 @@ require('./plugin.js'); },{}],20:[function(require,module,exports){ -var css = ".tox {\n box-shadow: none;\n box-sizing: content-box;\n color: #222f3e;\n cursor: auto;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n font-size: 16px;\n font-style: normal;\n font-weight: normal;\n line-height: normal;\n -webkit-tap-highlight-color: transparent;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n vertical-align: initial;\n white-space: normal;\n}\n.tox *:not(svg):not(rect) {\n box-sizing: inherit;\n color: inherit;\n cursor: inherit;\n direction: inherit;\n font-family: inherit;\n font-size: inherit;\n font-style: inherit;\n font-weight: inherit;\n line-height: inherit;\n -webkit-tap-highlight-color: inherit;\n text-align: inherit;\n text-decoration: inherit;\n text-shadow: inherit;\n text-transform: inherit;\n vertical-align: inherit;\n white-space: inherit;\n}\n.tox *:not(svg):not(rect) {\n /* stylelint-disable-line no-duplicate-selectors */\n background: transparent;\n border: 0;\n box-shadow: none;\n float: none;\n height: auto;\n margin: 0;\n max-width: none;\n outline: 0;\n padding: 0;\n position: static;\n width: auto;\n}\n.tox:not([dir=rtl]) {\n direction: ltr;\n text-align: left;\n}\n.tox[dir=rtl] {\n direction: rtl;\n text-align: right;\n}\n.tox-tinymce {\n border: 2px solid #eeeeee;\n border-radius: 10px;\n box-shadow: none;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n overflow: hidden;\n position: relative;\n visibility: inherit !important;\n}\n.tox.tox-tinymce-inline {\n border: none;\n box-shadow: none;\n overflow: initial;\n}\n.tox.tox-tinymce-inline .tox-editor-container {\n overflow: initial;\n}\n.tox.tox-tinymce-inline .tox-editor-header {\n background-color: #fff;\n border: 2px solid #eeeeee;\n border-radius: 10px;\n box-shadow: none;\n overflow: hidden;\n}\n.tox-tinymce-aux {\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n z-index: 1300;\n}\n.tox-tinymce *:focus,\n.tox-tinymce-aux *:focus {\n outline: none;\n}\nbutton::-moz-focus-inner {\n border: 0;\n}\n.tox[dir=rtl] .tox-icon--flip svg {\n transform: rotateY(180deg);\n}\n.tox .accessibility-issue__header {\n align-items: center;\n display: flex;\n margin-bottom: 4px;\n}\n.tox .accessibility-issue__description {\n align-items: stretch;\n border-radius: 6px;\n display: flex;\n justify-content: space-between;\n}\n.tox .accessibility-issue__description > div {\n padding-bottom: 4px;\n}\n.tox .accessibility-issue__description > div > div {\n align-items: center;\n display: flex;\n margin-bottom: 4px;\n}\n.tox .accessibility-issue__description > div > div .tox-icon svg {\n display: block;\n}\n.tox .accessibility-issue__repair {\n margin-top: 16px;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description {\n background-color: rgba(0, 101, 216, 0.1);\n color: #222f3e;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2 {\n color: #006ce7;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon svg {\n fill: #006ce7;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon {\n background-color: #006ce7;\n color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:hover,\n.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:focus {\n background-color: #0060ce;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:active {\n background-color: #0054b4;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn {\n /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description {\n background-color: rgba(255, 165, 0, 0.08);\n color: #222f3e;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2 {\n color: #8f5d00;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon svg {\n fill: #8f5d00;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon {\n background-color: #FFE89D;\n color: #222f3e;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:hover,\n.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:focus {\n background-color: #F2D574;\n color: #222f3e;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:active {\n background-color: #E8C657;\n color: #222f3e;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error {\n /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description {\n background-color: rgba(204, 0, 0, 0.1);\n color: #222f3e;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2 {\n color: #c00;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon svg {\n fill: #c00;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon {\n background-color: #F2BFBF;\n color: #222f3e;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:hover,\n.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:focus {\n background-color: #E9A4A4;\n color: #222f3e;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:active {\n background-color: #EE9494;\n color: #222f3e;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description {\n background-color: rgba(120, 171, 70, 0.1);\n color: #222f3e;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description > *:last-child {\n display: none;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2 {\n color: #527530;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon svg {\n fill: #527530;\n}\n.tox .tox-dialog__body-content .accessibility-issue__header .tox-form__group h1,\n.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2 {\n font-size: 14px;\n margin-top: 0;\n}\n.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button {\n margin-left: 4px;\n}\n.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) {\n margin-left: auto;\n}\n.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description {\n padding: 4px 4px 4px 8px;\n}\n.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button {\n margin-right: 4px;\n}\n.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) {\n margin-right: auto;\n}\n.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description {\n padding: 4px 8px 4px 4px;\n}\n.tox .tox-advtemplate .tox-form__grid {\n flex: 1;\n}\n.tox .tox-advtemplate .tox-form__grid > div:first-child {\n display: flex;\n flex-direction: column;\n width: 30%;\n}\n.tox .tox-advtemplate .tox-form__grid > div:first-child > div:nth-child(2) {\n flex-basis: 0;\n flex-grow: 1;\n overflow: auto;\n}\n@media only screen and (max-width: 767px ) {\n body:not(.tox-force-desktop) .tox .tox-advtemplate .tox-form__grid > div:first-child {\n width: 100%;\n }\n}\n.tox .tox-advtemplate iframe {\n border-color: #eeeeee;\n border-radius: 10px;\n border-style: solid;\n border-width: 1px;\n margin: 0 10px;\n}\n.tox .tox-anchorbar {\n display: flex;\n flex: 0 0 auto;\n}\n.tox .tox-bottom-anchorbar {\n display: flex;\n flex: 0 0 auto;\n}\n.tox .tox-bar {\n display: flex;\n flex: 0 0 auto;\n}\n.tox .tox-button {\n background-color: #006ce7;\n background-image: none;\n background-position: 0 0;\n background-repeat: repeat;\n border-color: #006ce7;\n border-radius: 6px;\n border-style: solid;\n border-width: 1px;\n box-shadow: none;\n box-sizing: border-box;\n color: #fff;\n cursor: pointer;\n display: inline-block;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n font-style: normal;\n font-weight: bold;\n letter-spacing: normal;\n line-height: 24px;\n margin: 0;\n outline: none;\n padding: 4px 16px;\n position: relative;\n text-align: center;\n text-decoration: none;\n text-transform: none;\n white-space: nowrap;\n}\n.tox .tox-button::before {\n border-radius: 6px;\n bottom: -1px;\n box-shadow: inset 0 0 0 2px #fff, 0 0 0 1px #006ce7, 0 0 0 3px rgba(0, 108, 231, 0.25);\n content: '';\n left: -1px;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n right: -1px;\n top: -1px;\n}\n.tox .tox-button[disabled] {\n background-color: #006ce7;\n background-image: none;\n border-color: #006ce7;\n box-shadow: none;\n color: rgba(255, 255, 255, 0.5);\n cursor: not-allowed;\n}\n.tox .tox-button:focus:not(:disabled) {\n background-color: #0060ce;\n background-image: none;\n border-color: #0060ce;\n box-shadow: none;\n color: #fff;\n}\n.tox .tox-button:focus-visible:not(:disabled)::before {\n opacity: 1;\n}\n.tox .tox-button:hover:not(:disabled) {\n background-color: #0060ce;\n background-image: none;\n border-color: #0060ce;\n box-shadow: none;\n color: #fff;\n}\n.tox .tox-button:active:not(:disabled) {\n background-color: #0054b4;\n background-image: none;\n border-color: #0054b4;\n box-shadow: none;\n color: #fff;\n}\n.tox .tox-button.tox-button--enabled {\n background-color: #0054b4;\n background-image: none;\n border-color: #0054b4;\n box-shadow: none;\n color: #fff;\n}\n.tox .tox-button.tox-button--enabled[disabled] {\n background-color: #0054b4;\n background-image: none;\n border-color: #0054b4;\n box-shadow: none;\n color: rgba(255, 255, 255, 0.5);\n cursor: not-allowed;\n}\n.tox .tox-button.tox-button--enabled:focus:not(:disabled) {\n background-color: #00489b;\n background-image: none;\n border-color: #00489b;\n box-shadow: none;\n color: #fff;\n}\n.tox .tox-button.tox-button--enabled:hover:not(:disabled) {\n background-color: #00489b;\n background-image: none;\n border-color: #00489b;\n box-shadow: none;\n color: #fff;\n}\n.tox .tox-button.tox-button--enabled:active:not(:disabled) {\n background-color: #003c81;\n background-image: none;\n border-color: #003c81;\n box-shadow: none;\n color: #fff;\n}\n.tox .tox-button--icon-and-text,\n.tox .tox-button.tox-button--icon-and-text,\n.tox .tox-button.tox-button--secondary.tox-button--icon-and-text {\n display: flex;\n padding: 5px 4px;\n}\n.tox .tox-button--icon-and-text .tox-icon svg,\n.tox .tox-button.tox-button--icon-and-text .tox-icon svg,\n.tox .tox-button.tox-button--secondary.tox-button--icon-and-text .tox-icon svg {\n display: block;\n fill: currentColor;\n}\n.tox .tox-button--secondary {\n background-color: #f0f0f0;\n background-image: none;\n background-position: 0 0;\n background-repeat: repeat;\n border-color: #f0f0f0;\n border-radius: 6px;\n border-style: solid;\n border-width: 1px;\n box-shadow: none;\n color: #222f3e;\n font-size: 14px;\n font-style: normal;\n font-weight: bold;\n letter-spacing: normal;\n outline: none;\n padding: 4px 16px;\n text-decoration: none;\n text-transform: none;\n}\n.tox .tox-button--secondary[disabled] {\n background-color: #f0f0f0;\n background-image: none;\n border-color: #f0f0f0;\n box-shadow: none;\n color: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-button--secondary:focus:not(:disabled) {\n background-color: #e3e3e3;\n background-image: none;\n border-color: #e3e3e3;\n box-shadow: none;\n color: #222f3e;\n}\n.tox .tox-button--secondary:hover:not(:disabled) {\n background-color: #e3e3e3;\n background-image: none;\n border-color: #e3e3e3;\n box-shadow: none;\n color: #222f3e;\n}\n.tox .tox-button--secondary:active:not(:disabled) {\n background-color: #d6d6d6;\n background-image: none;\n border-color: #d6d6d6;\n box-shadow: none;\n color: #222f3e;\n}\n.tox .tox-button--secondary.tox-button--enabled {\n background-color: #a8c8ed;\n background-image: none;\n border-color: #a8c8ed;\n box-shadow: none;\n color: #222f3e;\n}\n.tox .tox-button--secondary.tox-button--enabled[disabled] {\n background-color: #a8c8ed;\n background-image: none;\n border-color: #a8c8ed;\n box-shadow: none;\n color: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-button--secondary.tox-button--enabled:focus:not(:disabled) {\n background-color: #93bbe9;\n background-image: none;\n border-color: #93bbe9;\n box-shadow: none;\n color: #222f3e;\n}\n.tox .tox-button--secondary.tox-button--enabled:hover:not(:disabled) {\n background-color: #93bbe9;\n background-image: none;\n border-color: #93bbe9;\n box-shadow: none;\n color: #222f3e;\n}\n.tox .tox-button--secondary.tox-button--enabled:active:not(:disabled) {\n background-color: #7daee4;\n background-image: none;\n border-color: #7daee4;\n box-shadow: none;\n color: #222f3e;\n}\n.tox .tox-button--icon,\n.tox .tox-button.tox-button--icon,\n.tox .tox-button.tox-button--secondary.tox-button--icon {\n padding: 4px;\n}\n.tox .tox-button--icon .tox-icon svg,\n.tox .tox-button.tox-button--icon .tox-icon svg,\n.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg {\n display: block;\n fill: currentColor;\n}\n.tox .tox-button-link {\n background: 0;\n border: none;\n box-sizing: border-box;\n cursor: pointer;\n display: inline-block;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n font-size: 16px;\n font-weight: normal;\n line-height: 1.3;\n margin: 0;\n padding: 0;\n white-space: nowrap;\n}\n.tox .tox-button-link--sm {\n font-size: 14px;\n}\n.tox .tox-button--naked {\n background-color: transparent;\n border-color: transparent;\n box-shadow: unset;\n color: #222f3e;\n}\n.tox .tox-button--naked[disabled] {\n background-color: rgba(34, 47, 62, 0.12);\n border-color: transparent;\n box-shadow: unset;\n color: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-button--naked:hover:not(:disabled) {\n background-color: rgba(34, 47, 62, 0.12);\n border-color: transparent;\n box-shadow: unset;\n color: #222f3e;\n}\n.tox .tox-button--naked:focus:not(:disabled) {\n background-color: rgba(34, 47, 62, 0.12);\n border-color: transparent;\n box-shadow: unset;\n color: #222f3e;\n}\n.tox .tox-button--naked:active:not(:disabled) {\n background-color: rgba(34, 47, 62, 0.18);\n border-color: transparent;\n box-shadow: unset;\n color: #222f3e;\n}\n.tox .tox-button--naked .tox-icon svg {\n fill: currentColor;\n}\n.tox .tox-button--naked.tox-button--icon:hover:not(:disabled) {\n color: #222f3e;\n}\n.tox .tox-checkbox {\n align-items: center;\n border-radius: 6px;\n cursor: pointer;\n display: flex;\n height: 36px;\n min-width: 36px;\n}\n.tox .tox-checkbox__input {\n /* Hide from view but visible to screen readers */\n height: 1px;\n overflow: hidden;\n position: absolute;\n top: auto;\n width: 1px;\n}\n.tox .tox-checkbox__icons {\n align-items: center;\n border-radius: 6px;\n box-shadow: 0 0 0 2px transparent;\n box-sizing: content-box;\n display: flex;\n height: 24px;\n justify-content: center;\n padding: calc(4px - 1px);\n width: 24px;\n}\n.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n display: block;\n fill: rgba(34, 47, 62, 0.3);\n}\n.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {\n display: none;\n fill: #006ce7;\n}\n.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg {\n display: none;\n fill: #006ce7;\n}\n.tox .tox-checkbox--disabled {\n color: rgba(34, 47, 62, 0.5);\n cursor: not-allowed;\n}\n.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg {\n fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {\n fill: rgba(34, 47, 62, 0.5);\n}\n.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n display: none;\n}\n.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__checked svg {\n display: block;\n}\n.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n display: none;\n}\n.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {\n display: block;\n}\n.tox input.tox-checkbox__input:focus + .tox-checkbox__icons {\n border-radius: 6px;\n box-shadow: inset 0 0 0 1px #006ce7;\n padding: calc(4px - 1px);\n}\n.tox:not([dir=rtl]) .tox-checkbox__label {\n margin-left: 4px;\n}\n.tox:not([dir=rtl]) .tox-checkbox__input {\n left: -10000px;\n}\n.tox:not([dir=rtl]) .tox-bar .tox-checkbox {\n margin-left: 4px;\n}\n.tox[dir=rtl] .tox-checkbox__label {\n margin-right: 4px;\n}\n.tox[dir=rtl] .tox-checkbox__input {\n right: -10000px;\n}\n.tox[dir=rtl] .tox-bar .tox-checkbox {\n margin-right: 4px;\n}\n.tox {\n /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox .tox-collection--toolbar .tox-collection__group {\n display: flex;\n padding: 0;\n}\n.tox .tox-collection--grid .tox-collection__group {\n display: flex;\n flex-wrap: wrap;\n max-height: 208px;\n overflow-x: hidden;\n overflow-y: auto;\n padding: 0;\n}\n.tox .tox-collection--list .tox-collection__group {\n border-bottom-width: 0;\n border-color: #e3e3e3;\n border-left-width: 0;\n border-right-width: 0;\n border-style: solid;\n border-top-width: 1px;\n padding: 4px 0;\n}\n.tox .tox-collection--list .tox-collection__group:first-child {\n border-top-width: 0;\n}\n.tox .tox-collection__group-heading {\n background-color: #fcfcfc;\n color: rgba(34, 47, 62, 0.7);\n cursor: default;\n font-size: 12px;\n font-style: normal;\n font-weight: normal;\n margin-bottom: 4px;\n margin-top: -4px;\n padding: 4px 8px;\n text-transform: none;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.tox .tox-collection__item {\n align-items: center;\n border-radius: 3px;\n color: #222f3e;\n display: flex;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.tox .tox-collection--list .tox-collection__item {\n padding: 4px 8px;\n}\n.tox .tox-collection--toolbar .tox-collection__item {\n border-radius: 3px;\n padding: 4px;\n}\n.tox .tox-collection--grid .tox-collection__item {\n border-radius: 3px;\n padding: 4px;\n}\n.tox .tox-collection--list .tox-collection__item--enabled {\n background-color: #fff;\n color: #222f3e;\n}\n.tox .tox-collection--list .tox-collection__item--active {\n background-color: #cce2fa;\n}\n.tox .tox-collection--toolbar .tox-collection__item--enabled {\n background-color: #a6ccf7;\n color: #222f3e;\n}\n.tox .tox-collection--toolbar .tox-collection__item--active {\n background-color: #cce2fa;\n}\n.tox .tox-collection--grid .tox-collection__item--enabled {\n background-color: #a6ccf7;\n color: #222f3e;\n}\n.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled) {\n background-color: #cce2fa;\n color: #222f3e;\n}\n.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled) {\n color: #222f3e;\n}\n.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled) {\n color: #222f3e;\n}\n.tox .tox-collection__item-icon,\n.tox .tox-collection__item-checkmark {\n align-items: center;\n display: flex;\n height: 24px;\n justify-content: center;\n width: 24px;\n}\n.tox .tox-collection__item-icon svg,\n.tox .tox-collection__item-checkmark svg {\n fill: currentColor;\n}\n.tox .tox-collection--toolbar-lg .tox-collection__item-icon {\n height: 48px;\n width: 48px;\n}\n.tox .tox-collection__item-label {\n color: currentColor;\n display: inline-block;\n flex: 1;\n font-size: 14px;\n font-style: normal;\n font-weight: normal;\n line-height: 24px;\n max-width: 100%;\n text-transform: none;\n word-break: break-all;\n}\n.tox .tox-collection__item-accessory {\n color: rgba(34, 47, 62, 0.7);\n display: inline-block;\n font-size: 14px;\n height: 24px;\n line-height: 24px;\n text-transform: none;\n}\n.tox .tox-collection__item-caret {\n align-items: center;\n display: flex;\n min-height: 24px;\n}\n.tox .tox-collection__item-caret::after {\n content: '';\n font-size: 0;\n min-height: inherit;\n}\n.tox .tox-collection__item-caret svg {\n fill: #222f3e;\n}\n.tox .tox-collection__item--state-disabled {\n background-color: transparent;\n color: rgba(34, 47, 62, 0.5);\n cursor: not-allowed;\n}\n.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg {\n fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg {\n display: none;\n}\n.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory + .tox-collection__item-checkmark {\n display: none;\n}\n.tox .tox-collection--horizontal {\n background-color: #fff;\n border: 1px solid #e3e3e3;\n border-radius: 6px;\n box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15);\n display: flex;\n flex: 0 0 auto;\n flex-shrink: 0;\n flex-wrap: nowrap;\n margin-bottom: 0;\n overflow-x: auto;\n padding: 0;\n}\n.tox .tox-collection--horizontal .tox-collection__group {\n align-items: center;\n display: flex;\n flex-wrap: nowrap;\n margin: 0;\n padding: 0 4px;\n}\n.tox .tox-collection--horizontal .tox-collection__item {\n height: 28px;\n margin: 6px 1px 5px 0;\n padding: 0 4px;\n}\n.tox .tox-collection--horizontal .tox-collection__item-label {\n white-space: nowrap;\n}\n.tox .tox-collection--horizontal .tox-collection__item-caret {\n margin-left: 4px;\n}\n.tox .tox-collection__item-container {\n display: flex;\n}\n.tox .tox-collection__item-container--row {\n align-items: center;\n flex: 1 1 auto;\n flex-direction: row;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--align-left {\n margin-right: auto;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--align-right {\n justify-content: flex-end;\n margin-left: auto;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top {\n align-items: flex-start;\n margin-bottom: auto;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle {\n align-items: center;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom {\n align-items: flex-end;\n margin-top: auto;\n}\n.tox .tox-collection__item-container--column {\n align-self: center;\n flex: 1 1 auto;\n flex-direction: column;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--align-left {\n align-items: flex-start;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--align-right {\n align-items: flex-end;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top {\n align-self: flex-start;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle {\n align-self: center;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom {\n align-self: flex-end;\n}\n.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type) {\n border-right: 1px solid transparent;\n}\n.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > *:not(:first-child) {\n margin-left: 8px;\n}\n.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child {\n margin-left: 4px;\n}\n.tox:not([dir=rtl]) .tox-collection__item-accessory {\n margin-left: 16px;\n text-align: right;\n}\n.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret {\n margin-left: 16px;\n}\n.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type) {\n border-left: 1px solid transparent;\n}\n.tox[dir=rtl] .tox-collection--list .tox-collection__item > *:not(:first-child) {\n margin-right: 8px;\n}\n.tox[dir=rtl] .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child {\n margin-right: 4px;\n}\n.tox[dir=rtl] .tox-collection__item-accessory {\n margin-right: 16px;\n text-align: left;\n}\n.tox[dir=rtl] .tox-collection .tox-collection__item-caret {\n margin-right: 16px;\n transform: rotateY(180deg);\n}\n.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret {\n margin-right: 4px;\n}\n.tox .tox-color-picker-container {\n display: flex;\n flex-direction: row;\n height: 225px;\n margin: 0;\n}\n.tox .tox-sv-palette {\n box-sizing: border-box;\n display: flex;\n height: 100%;\n}\n.tox .tox-sv-palette-spectrum {\n height: 100%;\n}\n.tox .tox-sv-palette,\n.tox .tox-sv-palette-spectrum {\n width: 225px;\n}\n.tox .tox-sv-palette-thumb {\n background: none;\n border: 1px solid black;\n border-radius: 50%;\n box-sizing: content-box;\n height: 12px;\n position: absolute;\n width: 12px;\n}\n.tox .tox-sv-palette-inner-thumb {\n border: 1px solid white;\n border-radius: 50%;\n height: 10px;\n position: absolute;\n width: 10px;\n}\n.tox .tox-hue-slider {\n box-sizing: border-box;\n height: 100%;\n width: 25px;\n}\n.tox .tox-hue-slider-spectrum {\n background: linear-gradient(to bottom, #f00, #ff0080, #f0f, #8000ff, #00f, #0080ff, #0ff, #00ff80, #0f0, #80ff00, #ff0, #ff8000, #f00);\n height: 100%;\n width: 100%;\n}\n.tox .tox-hue-slider,\n.tox .tox-hue-slider-spectrum {\n width: 20px;\n}\n.tox .tox-hue-slider-thumb {\n background: white;\n border: 1px solid black;\n box-sizing: content-box;\n height: 4px;\n width: 100%;\n}\n.tox .tox-rgb-form {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n}\n.tox .tox-rgb-form div {\n align-items: center;\n display: flex;\n justify-content: space-between;\n margin-bottom: 5px;\n width: inherit;\n}\n.tox .tox-rgb-form input {\n width: 6em;\n}\n.tox .tox-rgb-form input.tox-invalid {\n /* Need !important to override Chrome's focus styling unfortunately */\n border: 1px solid red !important;\n}\n.tox .tox-rgb-form .tox-rgba-preview {\n border: 1px solid black;\n flex-grow: 2;\n margin-bottom: 0;\n}\n.tox:not([dir=rtl]) .tox-sv-palette {\n margin-right: 15px;\n}\n.tox:not([dir=rtl]) .tox-hue-slider {\n margin-right: 15px;\n}\n.tox:not([dir=rtl]) .tox-hue-slider-thumb {\n margin-left: -1px;\n}\n.tox:not([dir=rtl]) .tox-rgb-form label {\n margin-right: 0.5em;\n}\n.tox[dir=rtl] .tox-sv-palette {\n margin-left: 15px;\n}\n.tox[dir=rtl] .tox-hue-slider {\n margin-left: 15px;\n}\n.tox[dir=rtl] .tox-hue-slider-thumb {\n margin-right: -1px;\n}\n.tox[dir=rtl] .tox-rgb-form label {\n margin-left: 0.5em;\n}\n.tox .tox-toolbar .tox-swatches,\n.tox .tox-toolbar__primary .tox-swatches,\n.tox .tox-toolbar__overflow .tox-swatches {\n margin: 5px 0 6px 11px;\n}\n.tox .tox-collection--list .tox-collection__group .tox-swatches-menu {\n border: 0;\n margin: -4px -4px;\n}\n.tox .tox-swatches__row {\n display: flex;\n}\n.tox .tox-swatch {\n height: 30px;\n transition: transform 0.15s, box-shadow 0.15s;\n width: 30px;\n}\n.tox .tox-swatch:hover,\n.tox .tox-swatch:focus {\n box-shadow: 0 0 0 1px rgba(127, 127, 127, 0.3) inset;\n transform: scale(0.8);\n}\n.tox .tox-swatch--remove {\n align-items: center;\n display: flex;\n justify-content: center;\n}\n.tox .tox-swatch--remove svg path {\n stroke: #e74c3c;\n}\n.tox .tox-swatches__picker-btn {\n align-items: center;\n background-color: transparent;\n border: 0;\n cursor: pointer;\n display: flex;\n height: 30px;\n justify-content: center;\n outline: none;\n padding: 0;\n width: 30px;\n}\n.tox .tox-swatches__picker-btn svg {\n fill: #222f3e;\n height: 24px;\n width: 24px;\n}\n.tox .tox-swatches__picker-btn:hover {\n background: #cce2fa;\n}\n.tox div.tox-swatch:not(.tox-swatch--remove) svg {\n display: none;\n fill: #222f3e;\n height: 24px;\n margin: calc((30px - 24px) / 2) calc((30px - 24px) / 2);\n width: 24px;\n}\n.tox div.tox-swatch:not(.tox-swatch--remove) svg path {\n fill: #fff;\n paint-order: stroke;\n stroke: #222f3e;\n stroke-width: 2px;\n}\n.tox div.tox-swatch:not(.tox-swatch--remove).tox-collection__item--enabled svg {\n display: block;\n}\n.tox:not([dir=rtl]) .tox-swatches__picker-btn {\n margin-left: auto;\n}\n.tox[dir=rtl] .tox-swatches__picker-btn {\n margin-right: auto;\n}\n.tox .tox-comment-thread {\n background: #fff;\n position: relative;\n}\n.tox .tox-comment-thread > *:not(:first-child) {\n margin-top: 8px;\n}\n.tox .tox-comment {\n background: #fff;\n border: 1px solid #eeeeee;\n border-radius: 6px;\n box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1);\n padding: 8px 8px 16px 8px;\n position: relative;\n}\n.tox .tox-comment__header {\n align-items: center;\n color: #222f3e;\n display: flex;\n justify-content: space-between;\n}\n.tox .tox-comment__date {\n color: #222f3e;\n font-size: 12px;\n line-height: 18px;\n}\n.tox .tox-comment__body {\n color: #222f3e;\n font-size: 14px;\n font-style: normal;\n font-weight: normal;\n line-height: 1.3;\n margin-top: 8px;\n position: relative;\n text-transform: initial;\n}\n.tox .tox-comment__body textarea {\n resize: none;\n white-space: normal;\n width: 100%;\n}\n.tox .tox-comment__expander {\n padding-top: 8px;\n}\n.tox .tox-comment__expander p {\n color: rgba(34, 47, 62, 0.7);\n font-size: 14px;\n font-style: normal;\n}\n.tox .tox-comment__body p {\n margin: 0;\n}\n.tox .tox-comment__buttonspacing {\n padding-top: 16px;\n text-align: center;\n}\n.tox .tox-comment-thread__overlay::after {\n background: #fff;\n bottom: 0;\n content: \"\";\n display: flex;\n left: 0;\n opacity: 0.9;\n position: absolute;\n right: 0;\n top: 0;\n z-index: 5;\n}\n.tox .tox-comment__reply {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n justify-content: flex-end;\n margin-top: 8px;\n}\n.tox .tox-comment__reply > *:first-child {\n margin-bottom: 8px;\n width: 100%;\n}\n.tox .tox-comment__edit {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n margin-top: 16px;\n}\n.tox .tox-comment__gradient::after {\n background: linear-gradient(rgba(255, 255, 255, 0), #fff);\n bottom: 0;\n content: \"\";\n display: block;\n height: 5em;\n margin-top: -40px;\n position: absolute;\n width: 100%;\n}\n.tox .tox-comment__overlay {\n background: #fff;\n bottom: 0;\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n left: 0;\n opacity: 0.9;\n position: absolute;\n right: 0;\n text-align: center;\n top: 0;\n z-index: 5;\n}\n.tox .tox-comment__loading-text {\n align-items: center;\n color: #222f3e;\n display: flex;\n flex-direction: column;\n position: relative;\n}\n.tox .tox-comment__loading-text > div {\n padding-bottom: 16px;\n}\n.tox .tox-comment__overlaytext {\n bottom: 0;\n flex-direction: column;\n font-size: 14px;\n left: 0;\n padding: 1em;\n position: absolute;\n right: 0;\n top: 0;\n z-index: 10;\n}\n.tox .tox-comment__overlaytext p {\n background-color: #fff;\n box-shadow: 0 0 8px 8px #fff;\n color: #222f3e;\n text-align: center;\n}\n.tox .tox-comment__overlaytext div:nth-of-type(2) {\n font-size: 0.8em;\n}\n.tox .tox-comment__busy-spinner {\n align-items: center;\n background-color: #fff;\n bottom: 0;\n display: flex;\n justify-content: center;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n z-index: 20;\n}\n.tox .tox-comment__scroll {\n display: flex;\n flex-direction: column;\n flex-shrink: 1;\n overflow: auto;\n}\n.tox .tox-conversations {\n margin: 8px;\n}\n.tox:not([dir=rtl]) .tox-comment__edit {\n margin-left: 8px;\n}\n.tox:not([dir=rtl]) .tox-comment__buttonspacing > *:last-child,\n.tox:not([dir=rtl]) .tox-comment__edit > *:last-child,\n.tox:not([dir=rtl]) .tox-comment__reply > *:last-child {\n margin-left: 8px;\n}\n.tox[dir=rtl] .tox-comment__edit {\n margin-right: 8px;\n}\n.tox[dir=rtl] .tox-comment__buttonspacing > *:last-child,\n.tox[dir=rtl] .tox-comment__edit > *:last-child,\n.tox[dir=rtl] .tox-comment__reply > *:last-child {\n margin-right: 8px;\n}\n.tox .tox-user {\n align-items: center;\n display: flex;\n}\n.tox .tox-user__avatar svg {\n fill: rgba(34, 47, 62, 0.7);\n}\n.tox .tox-user__avatar img {\n border-radius: 50%;\n height: 36px;\n object-fit: cover;\n vertical-align: middle;\n width: 36px;\n}\n.tox .tox-user__name {\n color: #222f3e;\n font-size: 14px;\n font-style: normal;\n font-weight: bold;\n line-height: 18px;\n text-transform: none;\n}\n.tox:not([dir=rtl]) .tox-user__avatar svg,\n.tox:not([dir=rtl]) .tox-user__avatar img {\n margin-right: 8px;\n}\n.tox:not([dir=rtl]) .tox-user__avatar + .tox-user__name {\n margin-left: 8px;\n}\n.tox[dir=rtl] .tox-user__avatar svg,\n.tox[dir=rtl] .tox-user__avatar img {\n margin-left: 8px;\n}\n.tox[dir=rtl] .tox-user__avatar + .tox-user__name {\n margin-right: 8px;\n}\n.tox .tox-dialog-wrap {\n align-items: center;\n bottom: 0;\n display: flex;\n justify-content: center;\n left: 0;\n position: fixed;\n right: 0;\n top: 0;\n z-index: 1100;\n}\n.tox .tox-dialog-wrap__backdrop {\n background-color: rgba(255, 255, 255, 0.75);\n bottom: 0;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n z-index: 1;\n}\n.tox .tox-dialog-wrap__backdrop--opaque {\n background-color: #fff;\n}\n.tox .tox-dialog {\n background-color: #fff;\n border-color: #eeeeee;\n border-radius: 10px;\n border-style: solid;\n border-width: 0px;\n box-shadow: 0 16px 16px -10px rgba(34, 47, 62, 0.15), 0 0 40px 1px rgba(34, 47, 62, 0.15);\n display: flex;\n flex-direction: column;\n max-height: 100%;\n max-width: 480px;\n overflow: hidden;\n position: relative;\n width: 95vw;\n z-index: 2;\n}\n@media only screen and (max-width: 767px ) {\n body:not(.tox-force-desktop) .tox .tox-dialog {\n align-self: flex-start;\n margin: 8px auto;\n max-height: calc(100vh - 8px * 2);\n width: calc(100vw - 16px);\n }\n}\n.tox .tox-dialog-inline {\n z-index: 1100;\n}\n.tox .tox-dialog__header {\n align-items: center;\n background-color: #fff;\n border-bottom: none;\n color: #222f3e;\n display: flex;\n font-size: 16px;\n justify-content: space-between;\n padding: 8px 16px 0 16px;\n position: relative;\n}\n.tox .tox-dialog__header .tox-button {\n z-index: 1;\n}\n.tox .tox-dialog__draghandle {\n cursor: grab;\n height: 100%;\n left: 0;\n position: absolute;\n top: 0;\n width: 100%;\n}\n.tox .tox-dialog__draghandle:active {\n cursor: grabbing;\n}\n.tox .tox-dialog__dismiss {\n margin-left: auto;\n}\n.tox .tox-dialog__title {\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n font-size: 20px;\n font-style: normal;\n font-weight: normal;\n line-height: 1.3;\n margin: 0;\n text-transform: none;\n}\n.tox .tox-dialog__body {\n color: #222f3e;\n display: flex;\n flex: 1;\n font-size: 16px;\n font-style: normal;\n font-weight: normal;\n line-height: 1.3;\n min-width: 0;\n text-align: left;\n text-transform: none;\n}\n@media only screen and (max-width: 767px ) {\n body:not(.tox-force-desktop) .tox .tox-dialog__body {\n flex-direction: column;\n }\n}\n.tox .tox-dialog__body-nav {\n align-items: flex-start;\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n padding: 16px 16px;\n}\n@media only screen and (min-width: 768px ) {\n .tox .tox-dialog__body-nav {\n max-width: 11em;\n }\n}\n@media only screen and (max-width: 767px ) {\n body:not(.tox-force-desktop) .tox .tox-dialog__body-nav {\n flex-direction: row;\n -webkit-overflow-scrolling: touch;\n overflow-x: auto;\n padding-bottom: 0;\n }\n}\n.tox .tox-dialog__body-nav-item {\n border-bottom: 2px solid transparent;\n color: rgba(34, 47, 62, 0.7);\n display: inline-block;\n flex-shrink: 0;\n font-size: 14px;\n line-height: 1.3;\n margin-bottom: 8px;\n max-width: 13em;\n text-decoration: none;\n}\n.tox .tox-dialog__body-nav-item:focus {\n background-color: rgba(0, 108, 231, 0.1);\n}\n.tox .tox-dialog__body-nav-item--active {\n border-bottom: 2px solid #006ce7;\n color: #006ce7;\n}\n.tox .tox-dialog__body-content {\n box-sizing: border-box;\n display: flex;\n flex: 1;\n flex-direction: column;\n max-height: min(650px, calc(100vh - 110px));\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n padding: 16px 16px;\n}\n.tox .tox-dialog__body-content > * {\n margin-bottom: 0;\n margin-top: 16px;\n}\n.tox .tox-dialog__body-content > *:first-child {\n margin-top: 0;\n}\n.tox .tox-dialog__body-content > *:last-child {\n margin-bottom: 0;\n}\n.tox .tox-dialog__body-content > *:only-child {\n margin-bottom: 0;\n margin-top: 0;\n}\n.tox .tox-dialog__body-content a {\n color: #006ce7;\n cursor: pointer;\n text-decoration: underline;\n}\n.tox .tox-dialog__body-content a:hover,\n.tox .tox-dialog__body-content a:focus {\n color: #003c81;\n text-decoration: underline;\n}\n.tox .tox-dialog__body-content a:focus-visible {\n border-radius: 1px;\n outline: 2px solid #006ce7;\n outline-offset: 2px;\n}\n.tox .tox-dialog__body-content a:active {\n color: #00244e;\n text-decoration: underline;\n}\n.tox .tox-dialog__body-content svg {\n fill: #222f3e;\n}\n.tox .tox-dialog__body-content strong {\n font-weight: bold;\n}\n.tox .tox-dialog__body-content ul {\n list-style-type: disc;\n}\n.tox .tox-dialog__body-content ul,\n.tox .tox-dialog__body-content ol,\n.tox .tox-dialog__body-content dd {\n padding-inline-start: 2.5rem;\n}\n.tox .tox-dialog__body-content ul,\n.tox .tox-dialog__body-content ol,\n.tox .tox-dialog__body-content dl {\n margin-bottom: 16px;\n}\n.tox .tox-dialog__body-content ul,\n.tox .tox-dialog__body-content ol,\n.tox .tox-dialog__body-content dl,\n.tox .tox-dialog__body-content dd,\n.tox .tox-dialog__body-content dt {\n display: block;\n margin-inline-end: 0;\n margin-inline-start: 0;\n}\n.tox .tox-dialog__body-content .tox-form__group h1 {\n color: #222f3e;\n font-size: 20px;\n font-style: normal;\n font-weight: bold;\n letter-spacing: normal;\n margin-bottom: 16px;\n margin-top: 2rem;\n text-transform: none;\n}\n.tox .tox-dialog__body-content .tox-form__group h2 {\n color: #222f3e;\n font-size: 16px;\n font-style: normal;\n font-weight: bold;\n letter-spacing: normal;\n margin-bottom: 16px;\n margin-top: 2rem;\n text-transform: none;\n}\n.tox .tox-dialog__body-content .tox-form__group p {\n margin-bottom: 16px;\n}\n.tox .tox-dialog__body-content .tox-form__group h1:first-child,\n.tox .tox-dialog__body-content .tox-form__group h2:first-child,\n.tox .tox-dialog__body-content .tox-form__group p:first-child {\n margin-top: 0;\n}\n.tox .tox-dialog__body-content .tox-form__group h1:last-child,\n.tox .tox-dialog__body-content .tox-form__group h2:last-child,\n.tox .tox-dialog__body-content .tox-form__group p:last-child {\n margin-bottom: 0;\n}\n.tox .tox-dialog__body-content .tox-form__group h1:only-child,\n.tox .tox-dialog__body-content .tox-form__group h2:only-child,\n.tox .tox-dialog__body-content .tox-form__group p:only-child {\n margin-bottom: 0;\n margin-top: 0;\n}\n.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--center {\n text-align: center;\n}\n.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--end {\n text-align: end;\n}\n.tox .tox-dialog--width-lg {\n height: 650px;\n max-width: 1200px;\n}\n.tox .tox-dialog--fullscreen {\n height: 100%;\n max-width: 100%;\n}\n.tox .tox-dialog--fullscreen .tox-dialog__body-content {\n max-height: 100%;\n}\n.tox .tox-dialog--width-md {\n max-width: 800px;\n}\n.tox .tox-dialog--width-md .tox-dialog__body-content {\n overflow: auto;\n}\n.tox .tox-dialog__body-content--centered {\n text-align: center;\n}\n.tox .tox-dialog__footer {\n align-items: center;\n background-color: #fff;\n border-top: none;\n display: flex;\n justify-content: space-between;\n padding: 8px 16px;\n}\n.tox .tox-dialog__footer-start,\n.tox .tox-dialog__footer-end {\n display: flex;\n}\n.tox .tox-dialog__busy-spinner {\n align-items: center;\n background-color: rgba(255, 255, 255, 0.75);\n bottom: 0;\n display: flex;\n justify-content: center;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n z-index: 3;\n}\n.tox .tox-dialog__table {\n border-collapse: collapse;\n width: 100%;\n}\n.tox .tox-dialog__table thead th {\n font-weight: bold;\n padding-bottom: 8px;\n}\n.tox .tox-dialog__table thead th:first-child {\n padding-right: 8px;\n}\n.tox .tox-dialog__table tbody tr {\n border-bottom: 1px solid #626262;\n}\n.tox .tox-dialog__table tbody tr:last-child {\n border-bottom: none;\n}\n.tox .tox-dialog__table td {\n padding-bottom: 8px;\n padding-top: 8px;\n}\n.tox .tox-dialog__table td:first-child {\n padding-right: 8px;\n}\n.tox .tox-dialog__iframe {\n min-height: 200px;\n}\n.tox .tox-dialog__iframe.tox-dialog__iframe--opaque {\n background: #fff;\n}\n.tox .tox-navobj-bordered {\n position: relative;\n}\n.tox .tox-navobj-bordered::before {\n border: 1px solid #eeeeee;\n border-radius: 6px;\n content: '';\n inset: 0;\n opacity: 1;\n pointer-events: none;\n position: absolute;\n z-index: 1;\n}\n.tox .tox-navobj-bordered-focus.tox-navobj-bordered::before {\n border-color: #006ce7;\n box-shadow: 0 0 0 2px rgba(0, 108, 231, 0.25);\n outline: none;\n}\n.tox .tox-dialog__popups {\n position: absolute;\n width: 100%;\n z-index: 1100;\n}\n.tox .tox-dialog__body-iframe {\n display: flex;\n flex: 1;\n flex-direction: column;\n}\n.tox .tox-dialog__body-iframe .tox-navobj {\n display: flex;\n flex: 1;\n}\n.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2) {\n flex: 1;\n height: 100%;\n}\n.tox .tox-dialog-dock-fadeout {\n opacity: 0;\n visibility: hidden;\n}\n.tox .tox-dialog-dock-fadein {\n opacity: 1;\n visibility: visible;\n}\n.tox .tox-dialog-dock-transition {\n transition: visibility 0s linear 0.3s, opacity 0.3s ease;\n}\n.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein {\n transition-delay: 0s;\n}\n@media only screen and (max-width: 767px ) {\n body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav {\n margin-right: 0;\n }\n}\n@media only screen and (max-width: 767px ) {\n body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child) {\n margin-left: 8px;\n }\n}\n.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start > *,\n.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end > * {\n margin-left: 8px;\n}\n.tox[dir=rtl] .tox-dialog__body {\n text-align: right;\n}\n@media only screen and (max-width: 767px ) {\n body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav {\n margin-left: 0;\n }\n}\n@media only screen and (max-width: 767px ) {\n body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child) {\n margin-right: 8px;\n }\n}\n.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start > *,\n.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end > * {\n margin-right: 8px;\n}\nbody.tox-dialog__disable-scroll {\n overflow: hidden;\n}\n.tox .tox-dropzone-container {\n display: flex;\n flex: 1;\n}\n.tox .tox-dropzone {\n align-items: center;\n background: #fff;\n border: 2px dashed #eeeeee;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n justify-content: center;\n min-height: 100px;\n padding: 10px;\n}\n.tox .tox-dropzone p {\n color: rgba(34, 47, 62, 0.7);\n margin: 0 0 16px 0;\n}\n.tox .tox-edit-area {\n display: flex;\n flex: 1;\n overflow: hidden;\n position: relative;\n}\n.tox .tox-edit-area::before {\n border: 2px solid #2D6ADF;\n border-radius: 4px;\n content: '';\n inset: 0;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n transition: opacity 0.15s;\n z-index: 1;\n}\n.tox .tox-edit-area__iframe {\n background-color: #fff;\n border: 0;\n box-sizing: border-box;\n flex: 1;\n height: 100%;\n position: absolute;\n width: 100%;\n}\n.tox.tox-edit-focus .tox-edit-area::before {\n opacity: 1;\n}\n.tox.tox-inline-edit-area {\n border: 1px dotted #eeeeee;\n}\n.tox .tox-editor-container {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n overflow: hidden;\n}\n.tox .tox-editor-header {\n display: grid;\n grid-template-columns: 1fr min-content;\n z-index: 2;\n}\n.tox:not(.tox-tinymce-inline) .tox-editor-header {\n background-color: #fff;\n border-bottom: none;\n box-shadow: 0 2px 2px -2px rgba(34, 47, 62, 0.1), 0 8px 8px -4px rgba(34, 47, 62, 0.07);\n padding: 4px 0;\n}\n.tox:not(.tox-tinymce-inline) .tox-editor-header:not(.tox-editor-dock-transition) {\n transition: box-shadow 0.5s;\n}\n.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header {\n border-top: 1px solid #e3e3e3;\n box-shadow: none;\n}\n.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header {\n background-color: #fff;\n box-shadow: 0 2px 2px -2px rgba(34, 47, 62, 0.2), 0 8px 8px -4px rgba(34, 47, 62, 0.15);\n padding: 4px 0;\n}\n.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header {\n box-shadow: 0 2px 2px -2px rgba(34, 47, 62, 0.2), 0 8px 8px -4px rgba(34, 47, 62, 0.15);\n}\n.tox.tox:not(.tox-tinymce-inline) .tox-editor-header.tox-editor-header--empty {\n background: none;\n border: none;\n box-shadow: none;\n padding: 0;\n}\n.tox-editor-dock-fadeout {\n opacity: 0;\n visibility: hidden;\n}\n.tox-editor-dock-fadein {\n opacity: 1;\n visibility: visible;\n}\n.tox-editor-dock-transition {\n transition: visibility 0s linear 0.25s, opacity 0.25s ease;\n}\n.tox-editor-dock-transition.tox-editor-dock-fadein {\n transition-delay: 0s;\n}\n.tox .tox-control-wrap {\n flex: 1;\n position: relative;\n}\n.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,\n.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,\n.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid {\n display: none;\n}\n.tox .tox-control-wrap svg {\n display: block;\n}\n.tox .tox-control-wrap__status-icon-wrap {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n}\n.tox .tox-control-wrap__status-icon-invalid svg {\n fill: #c00;\n}\n.tox .tox-control-wrap__status-icon-unknown svg {\n fill: orange;\n}\n.tox .tox-control-wrap__status-icon-valid svg {\n fill: green;\n}\n.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,\n.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,\n.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield {\n padding-right: 32px;\n}\n.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap {\n right: 4px;\n}\n.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,\n.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,\n.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield {\n padding-left: 32px;\n}\n.tox[dir=rtl] .tox-control-wrap__status-icon-wrap {\n left: 4px;\n}\n.tox .tox-autocompleter {\n max-width: 25em;\n}\n.tox .tox-autocompleter .tox-menu {\n box-sizing: border-box;\n max-width: 25em;\n}\n.tox .tox-autocompleter .tox-autocompleter-highlight {\n font-weight: bold;\n}\n.tox .tox-color-input {\n display: flex;\n position: relative;\n z-index: 1;\n}\n.tox .tox-color-input .tox-textfield {\n z-index: -1;\n}\n.tox .tox-color-input span {\n border-color: rgba(34, 47, 62, 0.2);\n border-radius: 6px;\n border-style: solid;\n border-width: 1px;\n box-shadow: none;\n box-sizing: border-box;\n height: 24px;\n position: absolute;\n top: 6px;\n width: 24px;\n}\n.tox .tox-color-input span:hover:not([aria-disabled=true]),\n.tox .tox-color-input span:focus:not([aria-disabled=true]) {\n border-color: #006ce7;\n cursor: pointer;\n}\n.tox .tox-color-input span::before {\n background-image: linear-gradient(45deg, rgba(0, 0, 0, 0.25) 25%, transparent 25%), linear-gradient(-45deg, rgba(0, 0, 0, 0.25) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, rgba(0, 0, 0, 0.25) 75%), linear-gradient(-45deg, transparent 75%, rgba(0, 0, 0, 0.25) 75%);\n background-position: 0 0, 0 6px, 6px -6px, -6px 0;\n background-size: 12px 12px;\n border: 1px solid #fff;\n border-radius: 6px;\n box-sizing: border-box;\n content: '';\n height: 24px;\n left: -1px;\n position: absolute;\n top: -1px;\n width: 24px;\n z-index: -1;\n}\n.tox .tox-color-input span[aria-disabled=true] {\n cursor: not-allowed;\n}\n.tox:not([dir=rtl]) .tox-color-input {\n /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox:not([dir=rtl]) .tox-color-input .tox-textfield {\n padding-left: 36px;\n}\n.tox:not([dir=rtl]) .tox-color-input span {\n left: 6px;\n}\n.tox[dir=\"rtl\"] .tox-color-input {\n /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox[dir=\"rtl\"] .tox-color-input .tox-textfield {\n padding-right: 36px;\n}\n.tox[dir=\"rtl\"] .tox-color-input span {\n right: 6px;\n}\n.tox .tox-label,\n.tox .tox-toolbar-label {\n color: rgba(34, 47, 62, 0.7);\n display: block;\n font-size: 14px;\n font-style: normal;\n font-weight: normal;\n line-height: 1.3;\n padding: 0 8px 0 0;\n text-transform: none;\n white-space: nowrap;\n}\n.tox .tox-toolbar-label {\n padding: 0 8px;\n}\n.tox[dir=rtl] .tox-label {\n padding: 0 0 0 8px;\n}\n.tox .tox-form {\n display: flex;\n flex: 1;\n flex-direction: column;\n}\n.tox .tox-form__group {\n box-sizing: border-box;\n margin-bottom: 4px;\n}\n.tox .tox-form-group--maximize {\n flex: 1;\n}\n.tox .tox-form__group--error {\n color: #c00;\n}\n.tox .tox-form__group--collection {\n display: flex;\n}\n.tox .tox-form__grid {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: space-between;\n}\n.tox .tox-form__grid--2col > .tox-form__group {\n width: calc(50% - (8px / 2));\n}\n.tox .tox-form__grid--3col > .tox-form__group {\n width: calc(100% / 3 - (8px / 2));\n}\n.tox .tox-form__grid--4col > .tox-form__group {\n width: calc(25% - (8px / 2));\n}\n.tox .tox-form__controls-h-stack {\n align-items: center;\n display: flex;\n}\n.tox .tox-form__group--inline {\n align-items: center;\n display: flex;\n}\n.tox .tox-form__group--stretched {\n display: flex;\n flex: 1;\n flex-direction: column;\n}\n.tox .tox-form__group--stretched .tox-textarea {\n flex: 1;\n}\n.tox .tox-form__group--stretched .tox-navobj {\n display: flex;\n flex: 1;\n}\n.tox .tox-form__group--stretched .tox-navobj :nth-child(2) {\n flex: 1;\n height: 100%;\n}\n.tox:not([dir=rtl]) .tox-form__controls-h-stack > *:not(:first-child) {\n margin-left: 4px;\n}\n.tox[dir=rtl] .tox-form__controls-h-stack > *:not(:first-child) {\n margin-right: 4px;\n}\n.tox .tox-lock.tox-locked .tox-lock-icon__unlock,\n.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock {\n display: none;\n}\n.tox .tox-textfield,\n.tox .tox-toolbar-textfield,\n.tox .tox-listboxfield .tox-listbox--select,\n.tox .tox-textarea,\n.tox .tox-textarea-wrap .tox-textarea:focus {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: #fff;\n border-color: #eeeeee;\n border-radius: 6px;\n border-style: solid;\n border-width: 1px;\n box-shadow: none;\n box-sizing: border-box;\n color: #222f3e;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n font-size: 16px;\n line-height: 24px;\n margin: 0;\n min-height: 34px;\n outline: none;\n padding: 5px 5.5px;\n resize: none;\n width: 100%;\n}\n.tox .tox-textfield[disabled],\n.tox .tox-textarea[disabled] {\n background-color: #f2f2f2;\n color: rgba(34, 47, 62, 0.85);\n cursor: not-allowed;\n}\n.tox .tox-textfield:focus,\n.tox .tox-listboxfield .tox-listbox--select:focus,\n.tox .tox-textarea-wrap:focus-within,\n.tox .tox-textarea:focus,\n.tox .tox-custom-editor:focus-within {\n background-color: #fff;\n border-color: #006ce7;\n box-shadow: 0 0 0 2px rgba(0, 108, 231, 0.25);\n outline: none;\n}\n.tox .tox-toolbar-textfield {\n border-width: 0;\n margin-bottom: 3px;\n margin-top: 2px;\n max-width: 250px;\n}\n.tox .tox-naked-btn {\n background-color: transparent;\n border: 0;\n border-color: transparent;\n box-shadow: unset;\n color: #006ce7;\n cursor: pointer;\n display: block;\n margin: 0;\n padding: 0;\n}\n.tox .tox-naked-btn svg {\n display: block;\n fill: #222f3e;\n}\n.tox:not([dir=rtl]) .tox-toolbar-textfield + * {\n margin-left: 4px;\n}\n.tox[dir=rtl] .tox-toolbar-textfield + * {\n margin-right: 4px;\n}\n.tox .tox-listboxfield {\n cursor: pointer;\n position: relative;\n}\n.tox .tox-listboxfield .tox-listbox--select[disabled] {\n background-color: #f2f2f2;\n color: rgba(34, 47, 62, 0.85);\n cursor: not-allowed;\n}\n.tox .tox-listbox__select-label {\n cursor: default;\n flex: 1;\n margin: 0 4px;\n}\n.tox .tox-listbox__select-chevron {\n align-items: center;\n display: flex;\n justify-content: center;\n width: 16px;\n}\n.tox .tox-listbox__select-chevron svg {\n fill: #222f3e;\n}\n.tox .tox-listboxfield .tox-listbox--select {\n align-items: center;\n display: flex;\n}\n.tox:not([dir=rtl]) .tox-listboxfield svg {\n right: 8px;\n}\n.tox[dir=rtl] .tox-listboxfield svg {\n left: 8px;\n}\n.tox .tox-selectfield {\n cursor: pointer;\n position: relative;\n}\n.tox .tox-selectfield select {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: #fff;\n border-color: #eeeeee;\n border-radius: 6px;\n border-style: solid;\n border-width: 1px;\n box-shadow: none;\n box-sizing: border-box;\n color: #222f3e;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n font-size: 16px;\n line-height: 24px;\n margin: 0;\n min-height: 34px;\n outline: none;\n padding: 5px 5.5px;\n resize: none;\n width: 100%;\n}\n.tox .tox-selectfield select[disabled] {\n background-color: #f2f2f2;\n color: rgba(34, 47, 62, 0.85);\n cursor: not-allowed;\n}\n.tox .tox-selectfield select::-ms-expand {\n display: none;\n}\n.tox .tox-selectfield select:focus {\n background-color: #fff;\n border-color: #006ce7;\n box-shadow: 0 0 0 2px rgba(0, 108, 231, 0.25);\n outline: none;\n}\n.tox .tox-selectfield svg {\n pointer-events: none;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n}\n.tox:not([dir=rtl]) .tox-selectfield select[size=\"0\"],\n.tox:not([dir=rtl]) .tox-selectfield select[size=\"1\"] {\n padding-right: 24px;\n}\n.tox:not([dir=rtl]) .tox-selectfield svg {\n right: 8px;\n}\n.tox[dir=rtl] .tox-selectfield select[size=\"0\"],\n.tox[dir=rtl] .tox-selectfield select[size=\"1\"] {\n padding-left: 24px;\n}\n.tox[dir=rtl] .tox-selectfield svg {\n left: 8px;\n}\n.tox .tox-textarea-wrap {\n border-color: #eeeeee;\n border-radius: 6px;\n border-style: solid;\n border-width: 1px;\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n.tox .tox-textarea {\n -webkit-appearance: textarea;\n -moz-appearance: textarea;\n appearance: textarea;\n white-space: pre-wrap;\n}\n.tox .tox-textarea-wrap .tox-textarea {\n border: none;\n}\n.tox .tox-textarea-wrap .tox-textarea:focus {\n border: none;\n}\n.tox-fullscreen {\n border: 0;\n height: 100%;\n margin: 0;\n overflow: hidden;\n overscroll-behavior: none;\n padding: 0;\n touch-action: pinch-zoom;\n width: 100%;\n}\n.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {\n display: none;\n}\n.tox.tox-tinymce.tox-fullscreen,\n.tox-shadowhost.tox-fullscreen {\n left: 0;\n position: fixed;\n top: 0;\n z-index: 1200;\n}\n.tox.tox-tinymce.tox-fullscreen {\n background-color: transparent;\n}\n.tox-fullscreen .tox.tox-tinymce-aux,\n.tox-fullscreen ~ .tox.tox-tinymce-aux {\n z-index: 1201;\n}\n.tox .tox-help__more-link {\n list-style: none;\n margin-top: 1em;\n}\n.tox .tox-imagepreview {\n background-color: #666;\n height: 380px;\n overflow: hidden;\n position: relative;\n width: 100%;\n}\n.tox .tox-imagepreview.tox-imagepreview__loaded {\n overflow: auto;\n}\n.tox .tox-imagepreview__container {\n display: flex;\n left: 100vw;\n position: absolute;\n top: 100vw;\n}\n.tox .tox-imagepreview__image {\n background: url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==);\n}\n.tox .tox-image-tools .tox-spacer {\n flex: 1;\n}\n.tox .tox-image-tools .tox-bar {\n align-items: center;\n display: flex;\n height: 60px;\n justify-content: center;\n}\n.tox .tox-image-tools .tox-imagepreview,\n.tox .tox-image-tools .tox-imagepreview + .tox-bar {\n margin-top: 8px;\n}\n.tox .tox-image-tools .tox-croprect-block {\n background: black;\n filter: alpha(opacity=50);\n opacity: 0.5;\n position: absolute;\n zoom: 1;\n}\n.tox .tox-image-tools .tox-croprect-handle {\n border: 2px solid white;\n height: 20px;\n left: 0;\n position: absolute;\n top: 0;\n width: 20px;\n}\n.tox .tox-image-tools .tox-croprect-handle-move {\n border: 0;\n cursor: move;\n position: absolute;\n}\n.tox .tox-image-tools .tox-croprect-handle-nw {\n border-width: 2px 0 0 2px;\n cursor: nw-resize;\n left: 100px;\n margin: -2px 0 0 -2px;\n top: 100px;\n}\n.tox .tox-image-tools .tox-croprect-handle-ne {\n border-width: 2px 2px 0 0;\n cursor: ne-resize;\n left: 200px;\n margin: -2px 0 0 -20px;\n top: 100px;\n}\n.tox .tox-image-tools .tox-croprect-handle-sw {\n border-width: 0 0 2px 2px;\n cursor: sw-resize;\n left: 100px;\n margin: -20px 2px 0 -2px;\n top: 200px;\n}\n.tox .tox-image-tools .tox-croprect-handle-se {\n border-width: 0 2px 2px 0;\n cursor: se-resize;\n left: 200px;\n margin: -20px 0 0 -20px;\n top: 200px;\n}\n.tox .tox-insert-table-picker {\n display: flex;\n flex-wrap: wrap;\n width: 170px;\n}\n.tox .tox-insert-table-picker > div {\n border-color: #eeeeee;\n border-style: solid;\n border-width: 0 1px 1px 0;\n box-sizing: border-box;\n height: 17px;\n width: 17px;\n}\n.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker {\n margin: -4px -4px;\n}\n.tox .tox-insert-table-picker .tox-insert-table-picker__selected {\n background-color: rgba(0, 108, 231, 0.5);\n border-color: rgba(0, 108, 231, 0.5);\n}\n.tox .tox-insert-table-picker__label {\n color: rgba(34, 47, 62, 0.7);\n display: block;\n font-size: 14px;\n padding: 4px;\n text-align: center;\n width: 100%;\n}\n.tox:not([dir=rtl]) {\n /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox:not([dir=rtl]) .tox-insert-table-picker > div:nth-child(10n) {\n border-right: 0;\n}\n.tox[dir=rtl] {\n /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox[dir=rtl] .tox-insert-table-picker > div:nth-child(10n+1) {\n border-right: 0;\n}\n.tox {\n /* stylelint-disable */\n /* stylelint-enable */\n}\n.tox .tox-menu {\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 6px;\n box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15);\n display: inline-block;\n overflow: hidden;\n vertical-align: top;\n z-index: 1150;\n}\n.tox .tox-menu.tox-collection.tox-collection--list {\n padding: 0 4px;\n}\n.tox .tox-menu.tox-collection.tox-collection--toolbar {\n padding: 8px;\n}\n.tox .tox-menu.tox-collection.tox-collection--grid {\n padding: 8px;\n}\n@media only screen and (min-width: 768px ) {\n .tox .tox-menu .tox-collection__item-label {\n overflow-wrap: break-word;\n word-break: normal;\n }\n\n .tox .tox-dialog__popups .tox-menu .tox-collection__item-label {\n word-break: break-all;\n }\n}\n.tox .tox-menu__label h1,\n.tox .tox-menu__label h2,\n.tox .tox-menu__label h3,\n.tox .tox-menu__label h4,\n.tox .tox-menu__label h5,\n.tox .tox-menu__label h6,\n.tox .tox-menu__label p,\n.tox .tox-menu__label blockquote,\n.tox .tox-menu__label code {\n margin: 0;\n}\n.tox .tox-menubar {\n background: repeating-linear-gradient(transparent 0px 1px, transparent 1px 39px) center top 39px / 100% calc(100% - 39px) no-repeat;\n background-color: #fff;\n display: flex;\n flex: 0 0 auto;\n flex-shrink: 0;\n flex-wrap: wrap;\n grid-column: 1 / -1;\n grid-row: 1;\n padding: 0 11px 0 12px;\n}\n.tox .tox-promotion + .tox-menubar {\n grid-column: 1;\n}\n.tox .tox-promotion {\n background: repeating-linear-gradient(transparent 0px 1px, transparent 1px 39px) center top 39px / 100% calc(100% - 39px) no-repeat;\n background-color: #fff;\n grid-column: 2;\n grid-row: 1;\n padding-inline-end: 8px;\n padding-inline-start: 4px;\n padding-top: 5px;\n}\n.tox .tox-promotion-link {\n align-items: unsafe center;\n background-color: #E8F1F8;\n border-radius: 5px;\n color: #086BE6;\n cursor: pointer;\n display: flex;\n font-size: 14px;\n height: 26.6px;\n padding: 4px 8px;\n white-space: nowrap;\n}\n.tox .tox-promotion-link:hover {\n background-color: #B4D7FF;\n}\n.tox .tox-promotion-link:focus {\n background-color: #D9EDF7;\n}\n/* Deprecated. Remove in next major release */\n.tox .tox-mbtn {\n align-items: center;\n background: transparent;\n border: 0;\n border-radius: 3px;\n box-shadow: none;\n color: #222f3e;\n display: flex;\n flex: 0 0 auto;\n font-size: 14px;\n font-style: normal;\n font-weight: normal;\n height: 28px;\n justify-content: center;\n margin: 5px 1px 6px 0;\n outline: none;\n overflow: hidden;\n padding: 0 4px;\n text-transform: none;\n width: auto;\n}\n.tox .tox-mbtn[disabled] {\n background-color: transparent;\n border: 0;\n box-shadow: none;\n color: rgba(34, 47, 62, 0.5);\n cursor: not-allowed;\n}\n.tox .tox-mbtn:focus:not(:disabled) {\n background: #cce2fa;\n border: 0;\n box-shadow: none;\n color: #222f3e;\n}\n.tox .tox-mbtn--active {\n background: #a6ccf7;\n border: 0;\n box-shadow: none;\n color: #222f3e;\n}\n.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active) {\n background: #cce2fa;\n border: 0;\n box-shadow: none;\n color: #222f3e;\n}\n.tox .tox-mbtn__select-label {\n cursor: default;\n font-weight: normal;\n margin: 0 4px;\n}\n.tox .tox-mbtn[disabled] .tox-mbtn__select-label {\n cursor: not-allowed;\n}\n.tox .tox-mbtn__select-chevron {\n align-items: center;\n display: flex;\n justify-content: center;\n width: 16px;\n display: none;\n}\n.tox .tox-notification {\n border-radius: 6px;\n border-style: solid;\n border-width: 1px;\n box-shadow: none;\n box-sizing: border-box;\n display: grid;\n font-size: 14px;\n font-weight: normal;\n grid-template-columns: minmax(40px, 1fr) auto minmax(40px, 1fr);\n margin-top: 4px;\n opacity: 0;\n padding: 4px;\n transition: transform 100ms ease-in, opacity 150ms ease-in;\n}\n.tox .tox-notification p {\n font-size: 14px;\n font-weight: normal;\n}\n.tox .tox-notification a {\n cursor: pointer;\n text-decoration: underline;\n}\n.tox .tox-notification--in {\n opacity: 1;\n}\n.tox .tox-notification--success {\n background-color: #e4eeda;\n border-color: #d7e6c8;\n color: #222f3e;\n}\n.tox .tox-notification--success p {\n color: #222f3e;\n}\n.tox .tox-notification--success a {\n color: #517342;\n}\n.tox .tox-notification--success svg {\n fill: #222f3e;\n}\n.tox .tox-notification--error {\n background-color: #f5cccc;\n border-color: #f0b3b3;\n color: #222f3e;\n}\n.tox .tox-notification--error p {\n color: #222f3e;\n}\n.tox .tox-notification--error a {\n color: #77181f;\n}\n.tox .tox-notification--error svg {\n fill: #222f3e;\n}\n.tox .tox-notification--warn,\n.tox .tox-notification--warning {\n background-color: #fff5cc;\n border-color: #fff0b3;\n color: #222f3e;\n}\n.tox .tox-notification--warn p,\n.tox .tox-notification--warning p {\n color: #222f3e;\n}\n.tox .tox-notification--warn a,\n.tox .tox-notification--warning a {\n color: #7a6e25;\n}\n.tox .tox-notification--warn svg,\n.tox .tox-notification--warning svg {\n fill: #222f3e;\n}\n.tox .tox-notification--info {\n background-color: #d6e7fb;\n border-color: #c1dbf9;\n color: #222f3e;\n}\n.tox .tox-notification--info p {\n color: #222f3e;\n}\n.tox .tox-notification--info a {\n color: #2a64a6;\n}\n.tox .tox-notification--info svg {\n fill: #222f3e;\n}\n.tox .tox-notification__body {\n align-self: center;\n color: #222f3e;\n font-size: 14px;\n grid-column-end: 3;\n grid-column-start: 2;\n grid-row-end: 2;\n grid-row-start: 1;\n text-align: center;\n white-space: normal;\n word-break: break-all;\n word-break: break-word;\n}\n.tox .tox-notification__body > * {\n margin: 0;\n}\n.tox .tox-notification__body > * + * {\n margin-top: 1rem;\n}\n.tox .tox-notification__icon {\n align-self: center;\n grid-column-end: 2;\n grid-column-start: 1;\n grid-row-end: 2;\n grid-row-start: 1;\n justify-self: end;\n}\n.tox .tox-notification__icon svg {\n display: block;\n}\n.tox .tox-notification__dismiss {\n align-self: start;\n grid-column-end: 4;\n grid-column-start: 3;\n grid-row-end: 2;\n grid-row-start: 1;\n justify-self: end;\n}\n.tox .tox-notification .tox-progress-bar {\n grid-column-end: 4;\n grid-column-start: 1;\n grid-row-end: 3;\n grid-row-start: 2;\n justify-self: center;\n}\n.tox .tox-pop {\n display: inline-block;\n position: relative;\n}\n.tox .tox-pop--resizing {\n transition: width 0.1s ease;\n}\n.tox .tox-pop--resizing .tox-toolbar,\n.tox .tox-pop--resizing .tox-toolbar__group {\n flex-wrap: nowrap;\n}\n.tox .tox-pop--transition {\n transition: 0.15s ease;\n transition-property: left, right, top, bottom;\n}\n.tox .tox-pop--transition::before,\n.tox .tox-pop--transition::after {\n transition: all 0.15s, visibility 0s, opacity 0.075s ease 0.075s;\n}\n.tox .tox-pop__dialog {\n background-color: #fff;\n border: 1px solid #eeeeee;\n border-radius: 6px;\n box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15);\n min-width: 0;\n overflow: hidden;\n}\n.tox .tox-pop__dialog > *:not(.tox-toolbar) {\n margin: 4px 4px 4px 8px;\n}\n.tox .tox-pop__dialog .tox-toolbar {\n background-color: transparent;\n margin-bottom: -1px;\n}\n.tox .tox-pop::before,\n.tox .tox-pop::after {\n border-style: solid;\n content: '';\n display: block;\n height: 0;\n opacity: 1;\n position: absolute;\n width: 0;\n}\n.tox .tox-pop.tox-pop--inset::before,\n.tox .tox-pop.tox-pop--inset::after {\n opacity: 0;\n transition: all 0s 0.15s, visibility 0s, opacity 0.075s ease;\n}\n.tox .tox-pop.tox-pop--bottom::before,\n.tox .tox-pop.tox-pop--bottom::after {\n left: 50%;\n top: 100%;\n}\n.tox .tox-pop.tox-pop--bottom::after {\n border-color: #fff transparent transparent transparent;\n border-width: 8px;\n margin-left: -8px;\n margin-top: -1px;\n}\n.tox .tox-pop.tox-pop--bottom::before {\n border-color: #eeeeee transparent transparent transparent;\n border-width: 9px;\n margin-left: -9px;\n}\n.tox .tox-pop.tox-pop--top::before,\n.tox .tox-pop.tox-pop--top::after {\n left: 50%;\n top: 0;\n transform: translateY(-100%);\n}\n.tox .tox-pop.tox-pop--top::after {\n border-color: transparent transparent #fff transparent;\n border-width: 8px;\n margin-left: -8px;\n margin-top: 1px;\n}\n.tox .tox-pop.tox-pop--top::before {\n border-color: transparent transparent #eeeeee transparent;\n border-width: 9px;\n margin-left: -9px;\n}\n.tox .tox-pop.tox-pop--left::before,\n.tox .tox-pop.tox-pop--left::after {\n left: 0;\n top: calc(50% - 1px);\n transform: translateY(-50%);\n}\n.tox .tox-pop.tox-pop--left::after {\n border-color: transparent #fff transparent transparent;\n border-width: 8px;\n margin-left: -15px;\n}\n.tox .tox-pop.tox-pop--left::before {\n border-color: transparent #eeeeee transparent transparent;\n border-width: 10px;\n margin-left: -19px;\n}\n.tox .tox-pop.tox-pop--right::before,\n.tox .tox-pop.tox-pop--right::after {\n left: 100%;\n top: calc(50% + 1px);\n transform: translateY(-50%);\n}\n.tox .tox-pop.tox-pop--right::after {\n border-color: transparent transparent transparent #fff;\n border-width: 8px;\n margin-left: -1px;\n}\n.tox .tox-pop.tox-pop--right::before {\n border-color: transparent transparent transparent #eeeeee;\n border-width: 10px;\n margin-left: -1px;\n}\n.tox .tox-pop.tox-pop--align-left::before,\n.tox .tox-pop.tox-pop--align-left::after {\n left: 20px;\n}\n.tox .tox-pop.tox-pop--align-right::before,\n.tox .tox-pop.tox-pop--align-right::after {\n left: calc(100% - 20px);\n}\n.tox .tox-sidebar-wrap {\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n min-height: 0;\n}\n.tox .tox-sidebar {\n background-color: #fff;\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n}\n.tox .tox-sidebar__slider {\n display: flex;\n overflow: hidden;\n}\n.tox .tox-sidebar__pane-container {\n display: flex;\n}\n.tox .tox-sidebar__pane {\n display: flex;\n}\n.tox .tox-sidebar--sliding-closed {\n opacity: 0;\n}\n.tox .tox-sidebar--sliding-open {\n opacity: 1;\n}\n.tox .tox-sidebar--sliding-growing,\n.tox .tox-sidebar--sliding-shrinking {\n transition: width 0.5s ease, opacity 0.5s ease;\n}\n.tox .tox-selector {\n background-color: #4099ff;\n border-color: #4099ff;\n border-style: solid;\n border-width: 1px;\n box-sizing: border-box;\n display: inline-block;\n height: 10px;\n position: absolute;\n width: 10px;\n}\n.tox.tox-platform-touch .tox-selector {\n height: 12px;\n width: 12px;\n}\n.tox .tox-slider {\n align-items: center;\n display: flex;\n flex: 1;\n height: 24px;\n justify-content: center;\n position: relative;\n}\n.tox .tox-slider__rail {\n background-color: transparent;\n border: 1px solid #eeeeee;\n border-radius: 6px;\n height: 10px;\n min-width: 120px;\n width: 100%;\n}\n.tox .tox-slider__handle {\n background-color: #006ce7;\n border: 2px solid #0054b4;\n border-radius: 6px;\n box-shadow: none;\n height: 24px;\n left: 50%;\n position: absolute;\n top: 50%;\n transform: translateX(-50%) translateY(-50%);\n width: 14px;\n}\n.tox .tox-form__controls-h-stack > .tox-slider:not(:first-of-type) {\n margin-inline-start: 8px;\n}\n.tox .tox-form__controls-h-stack > .tox-form__group + .tox-slider {\n margin-inline-start: 32px;\n}\n.tox .tox-form__controls-h-stack > .tox-slider + .tox-form__group {\n margin-inline-start: 32px;\n}\n.tox .tox-source-code {\n overflow: auto;\n}\n.tox .tox-spinner {\n display: flex;\n}\n.tox .tox-spinner > div {\n animation: tam-bouncing-dots 1.5s ease-in-out 0s infinite both;\n background-color: rgba(34, 47, 62, 0.7);\n border-radius: 100%;\n height: 8px;\n width: 8px;\n}\n.tox .tox-spinner > div:nth-child(1) {\n animation-delay: -0.32s;\n}\n.tox .tox-spinner > div:nth-child(2) {\n animation-delay: -0.16s;\n}\n@keyframes tam-bouncing-dots {\n 0%, 80%, 100% {\n transform: scale(0);\n }\n\n 40% {\n transform: scale(1);\n }\n}\n.tox:not([dir=rtl]) .tox-spinner > div:not(:first-child) {\n margin-left: 4px;\n}\n.tox[dir=rtl] .tox-spinner > div:not(:first-child) {\n margin-right: 4px;\n}\n.tox .tox-statusbar {\n align-items: center;\n background-color: #fff;\n border-top: 1px solid #e3e3e3;\n color: rgba(34, 47, 62, 0.7);\n display: flex;\n flex: 0 0 auto;\n font-size: 14px;\n font-weight: normal;\n height: 25px;\n overflow: hidden;\n padding: 0 8px;\n position: relative;\n text-transform: none;\n}\n.tox .tox-statusbar__path {\n display: flex;\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.tox .tox-statusbar__right-container {\n display: flex;\n justify-content: flex-end;\n white-space: nowrap;\n}\n.tox .tox-statusbar__help-text {\n text-align: center;\n}\n.tox .tox-statusbar__text-container {\n display: flex;\n flex: 1 1 auto;\n justify-content: space-between;\n overflow: hidden;\n}\n@media only screen and (min-width: 768px ) {\n .tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols > .tox-statusbar__help-text,\n .tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols > .tox-statusbar__right-container,\n .tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols > .tox-statusbar__path {\n flex: 0 0 calc(100% / 3);\n }\n}\n.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-end {\n justify-content: flex-end;\n}\n.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-start {\n justify-content: flex-start;\n}\n.tox .tox-statusbar__text-container.tox-statusbar__text-container--space-around {\n justify-content: space-around;\n}\n.tox .tox-statusbar__path > * {\n display: inline;\n white-space: nowrap;\n}\n.tox .tox-statusbar__wordcount {\n flex: 0 0 auto;\n margin-left: 1ch;\n}\n@media only screen and (max-width: 767px ) {\n .tox .tox-statusbar__text-container .tox-statusbar__help-text {\n display: none;\n }\n\n .tox .tox-statusbar__text-container .tox-statusbar__help-text:only-child {\n display: block;\n }\n}\n.tox .tox-statusbar a,\n.tox .tox-statusbar__path-item,\n.tox .tox-statusbar__wordcount {\n color: rgba(34, 47, 62, 0.7);\n text-decoration: none;\n}\n.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]) {\n color: #222f3e;\n cursor: pointer;\n}\n.tox .tox-statusbar__branding svg {\n fill: rgba(34, 47, 62, 0.8);\n height: 1.14em;\n vertical-align: -0.28em;\n width: 3.6em;\n}\n.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg,\n.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg {\n fill: #222f3e;\n}\n.tox .tox-statusbar__resize-handle {\n align-items: flex-end;\n align-self: stretch;\n cursor: nwse-resize;\n display: flex;\n flex: 0 0 auto;\n justify-content: flex-end;\n margin-left: auto;\n margin-right: -8px;\n padding-bottom: 3px;\n padding-left: 1ch;\n padding-right: 3px;\n}\n.tox .tox-statusbar__resize-handle svg {\n display: block;\n fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-statusbar__resize-handle:focus svg {\n background-color: #dee0e2;\n border-radius: 1px 1px 5px 1px;\n box-shadow: 0 0 0 2px #dee0e2;\n}\n.tox:not([dir=rtl]) .tox-statusbar__path > * {\n margin-right: 4px;\n}\n.tox:not([dir=rtl]) .tox-statusbar__branding {\n margin-left: 2ch;\n}\n.tox[dir=rtl] .tox-statusbar {\n flex-direction: row-reverse;\n}\n.tox[dir=rtl] .tox-statusbar__path > * {\n margin-left: 4px;\n}\n.tox .tox-throbber {\n z-index: 1299;\n}\n.tox .tox-throbber__busy-spinner {\n align-items: center;\n background-color: rgba(255, 255, 255, 0.6);\n bottom: 0;\n display: flex;\n justify-content: center;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n}\n.tox .tox-tbtn {\n align-items: center;\n background: transparent;\n border: 0;\n border-radius: 3px;\n box-shadow: none;\n color: #222f3e;\n display: flex;\n flex: 0 0 auto;\n font-size: 14px;\n font-style: normal;\n font-weight: normal;\n height: 28px;\n justify-content: center;\n margin: 6px 1px 5px 0;\n outline: none;\n overflow: hidden;\n padding: 0;\n text-transform: none;\n width: 34px;\n}\n.tox .tox-tbtn svg {\n display: block;\n fill: #222f3e;\n}\n.tox .tox-tbtn.tox-tbtn-more {\n padding-left: 5px;\n padding-right: 5px;\n width: inherit;\n}\n.tox .tox-tbtn:focus {\n background: #cce2fa;\n border: 0;\n box-shadow: none;\n}\n.tox .tox-tbtn:hover {\n background: #cce2fa;\n border: 0;\n box-shadow: none;\n color: #222f3e;\n}\n.tox .tox-tbtn:hover svg {\n fill: #222f3e;\n}\n.tox .tox-tbtn:active {\n background: #a6ccf7;\n border: 0;\n box-shadow: none;\n color: #222f3e;\n}\n.tox .tox-tbtn:active svg {\n fill: #222f3e;\n}\n.tox .tox-tbtn--disabled .tox-tbtn--enabled svg {\n fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-tbtn--disabled,\n.tox .tox-tbtn--disabled:hover,\n.tox .tox-tbtn:disabled,\n.tox .tox-tbtn:disabled:hover {\n background: transparent;\n border: 0;\n box-shadow: none;\n color: rgba(34, 47, 62, 0.5);\n cursor: not-allowed;\n}\n.tox .tox-tbtn--disabled svg,\n.tox .tox-tbtn--disabled:hover svg,\n.tox .tox-tbtn:disabled svg,\n.tox .tox-tbtn:disabled:hover svg {\n /* stylelint-disable-line no-descending-specificity */\n fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-tbtn--enabled,\n.tox .tox-tbtn--enabled:hover {\n background: #a6ccf7;\n border: 0;\n box-shadow: none;\n color: #222f3e;\n}\n.tox .tox-tbtn--enabled > *,\n.tox .tox-tbtn--enabled:hover > * {\n transform: none;\n}\n.tox .tox-tbtn--enabled svg,\n.tox .tox-tbtn--enabled:hover svg {\n /* stylelint-disable-line no-descending-specificity */\n fill: #222f3e;\n}\n.tox .tox-tbtn--enabled.tox-tbtn--disabled svg,\n.tox .tox-tbtn--enabled:hover.tox-tbtn--disabled svg {\n fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) {\n color: #222f3e;\n}\n.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg {\n fill: #222f3e;\n}\n.tox .tox-tbtn:active > * {\n transform: none;\n}\n.tox .tox-tbtn--md {\n height: 42px;\n width: 51px;\n}\n.tox .tox-tbtn--lg {\n flex-direction: column;\n height: 56px;\n width: 68px;\n}\n.tox .tox-tbtn--return {\n align-self: stretch;\n height: unset;\n width: 16px;\n}\n.tox .tox-tbtn--labeled {\n padding: 0 4px;\n width: unset;\n}\n.tox .tox-tbtn__vlabel {\n display: block;\n font-size: 10px;\n font-weight: normal;\n letter-spacing: -0.025em;\n margin-bottom: 4px;\n white-space: nowrap;\n}\n.tox .tox-number-input {\n border-radius: 3px;\n display: flex;\n margin: 6px 1px 5px 0;\n padding: 0 4px;\n width: auto;\n}\n.tox .tox-number-input .tox-input-wrapper {\n background: #f7f7f7;\n display: flex;\n pointer-events: none;\n text-align: center;\n}\n.tox .tox-number-input .tox-input-wrapper:focus {\n background: #cce2fa;\n}\n.tox .tox-number-input input {\n border-radius: 3px;\n color: #222f3e;\n font-size: 14px;\n margin: 2px 0;\n pointer-events: all;\n width: 60px;\n}\n.tox .tox-number-input input:hover {\n background: #cce2fa;\n color: #222f3e;\n}\n.tox .tox-number-input input:focus {\n background: #fff;\n color: #222f3e;\n}\n.tox .tox-number-input input:disabled {\n background: transparent;\n border: 0;\n box-shadow: none;\n color: rgba(34, 47, 62, 0.5);\n cursor: not-allowed;\n}\n.tox .tox-number-input button {\n background: #f7f7f7;\n color: #222f3e;\n height: 28px;\n text-align: center;\n width: 24px;\n}\n.tox .tox-number-input button svg {\n display: block;\n fill: #222f3e;\n margin: 0 auto;\n transform: scale(0.67);\n}\n.tox .tox-number-input button:focus {\n background: #cce2fa;\n}\n.tox .tox-number-input button:hover {\n background: #cce2fa;\n border: 0;\n box-shadow: none;\n color: #222f3e;\n}\n.tox .tox-number-input button:hover svg {\n fill: #222f3e;\n}\n.tox .tox-number-input button:active {\n background: #a6ccf7;\n border: 0;\n box-shadow: none;\n color: #222f3e;\n}\n.tox .tox-number-input button:active svg {\n fill: #222f3e;\n}\n.tox .tox-number-input button:disabled {\n background: transparent;\n border: 0;\n box-shadow: none;\n color: rgba(34, 47, 62, 0.5);\n cursor: not-allowed;\n}\n.tox .tox-number-input button:disabled svg {\n fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-number-input button.minus {\n border-radius: 3px 0 0 3px;\n}\n.tox .tox-number-input button.plus {\n border-radius: 0 3px 3px 0;\n}\n.tox .tox-number-input:focus:not(:active) > button,\n.tox .tox-number-input:focus:not(:active) > .tox-input-wrapper {\n background: #cce2fa;\n}\n.tox .tox-tbtn--select {\n margin: 6px 1px 5px 0;\n padding: 0 4px;\n width: auto;\n}\n.tox .tox-tbtn__select-label {\n cursor: default;\n font-weight: normal;\n height: initial;\n margin: 0 4px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.tox .tox-tbtn__select-chevron {\n align-items: center;\n display: flex;\n justify-content: center;\n width: 16px;\n}\n.tox .tox-tbtn__select-chevron svg {\n fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-tbtn--bespoke {\n background: #f7f7f7;\n}\n.tox .tox-tbtn--bespoke + .tox-tbtn--bespoke {\n margin-inline-start: 4px;\n}\n.tox .tox-tbtn--bespoke .tox-tbtn__select-label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 7em;\n}\n.tox .tox-tbtn--disabled .tox-tbtn__select-label,\n.tox .tox-tbtn--select:disabled .tox-tbtn__select-label {\n cursor: not-allowed;\n}\n.tox .tox-split-button {\n border: 0;\n border-radius: 3px;\n box-sizing: border-box;\n display: flex;\n margin: 6px 1px 5px 0;\n overflow: hidden;\n}\n.tox .tox-split-button:hover {\n box-shadow: 0 0 0 1px #cce2fa inset;\n}\n.tox .tox-split-button:focus {\n background: #cce2fa;\n box-shadow: none;\n color: #222f3e;\n}\n.tox .tox-split-button > * {\n border-radius: 0;\n}\n.tox .tox-split-button__chevron {\n width: 16px;\n}\n.tox .tox-split-button__chevron svg {\n fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-split-button .tox-tbtn {\n margin: 0;\n}\n.tox .tox-split-button.tox-tbtn--disabled:hover,\n.tox .tox-split-button.tox-tbtn--disabled:focus,\n.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,\n.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus {\n background: transparent;\n box-shadow: none;\n color: rgba(34, 47, 62, 0.5);\n}\n.tox.tox-platform-touch .tox-split-button .tox-tbtn--select {\n padding: 0 0px;\n}\n.tox.tox-platform-touch .tox-split-button .tox-tbtn:not(.tox-tbtn--select):first-child {\n width: 30px;\n}\n.tox.tox-platform-touch .tox-split-button__chevron {\n width: 20px;\n}\n.tox .tox-split-button.tox-tbtn--disabled svg #tox-icon-text-color__color,\n.tox .tox-split-button.tox-tbtn--disabled svg #tox-icon-highlight-bg-color__color {\n opacity: 0.6;\n}\n.tox .tox-toolbar-overlord {\n background-color: #fff;\n}\n.tox .tox-toolbar,\n.tox .tox-toolbar__primary,\n.tox .tox-toolbar__overflow {\n background-attachment: local;\n background-color: #fff;\n background-image: repeating-linear-gradient(#e3e3e3 0px 1px, transparent 1px 39px);\n background-position: center top 40px;\n background-repeat: no-repeat;\n background-size: calc(100% - 11px * 2) calc(100% - 41px);\n display: flex;\n flex: 0 0 auto;\n flex-shrink: 0;\n flex-wrap: wrap;\n padding: 0 0px;\n transform: perspective(1px);\n}\n.tox .tox-toolbar-overlord > .tox-toolbar,\n.tox .tox-toolbar-overlord > .tox-toolbar__primary,\n.tox .tox-toolbar-overlord > .tox-toolbar__overflow {\n background-position: center top 0px;\n background-size: calc(100% - 11px * 2) calc(100% - 0px);\n}\n.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed {\n height: 0;\n opacity: 0;\n padding-bottom: 0;\n padding-top: 0;\n visibility: hidden;\n}\n.tox .tox-toolbar__overflow--growing {\n transition: height 0.3s ease, opacity 0.2s linear 0.1s;\n}\n.tox .tox-toolbar__overflow--shrinking {\n transition: opacity 0.3s ease, height 0.2s linear 0.1s, visibility 0s linear 0.3s;\n}\n.tox .tox-toolbar-overlord,\n.tox .tox-anchorbar {\n grid-column: 1 / -1;\n}\n.tox .tox-menubar + .tox-toolbar,\n.tox .tox-menubar + .tox-toolbar-overlord {\n border-top: 1px solid transparent;\n margin-top: -1px;\n padding-bottom: 1px;\n padding-top: 1px;\n}\n.tox .tox-toolbar--scrolling {\n flex-wrap: nowrap;\n overflow-x: auto;\n}\n.tox .tox-pop .tox-toolbar {\n border-width: 0;\n}\n.tox .tox-toolbar--no-divider {\n background-image: none;\n}\n.tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child,\n.tox .tox-toolbar-overlord .tox-toolbar__primary {\n background-position: center top 39px;\n}\n.tox .tox-editor-header > .tox-toolbar--scrolling,\n.tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child {\n background-image: none;\n}\n.tox.tox-tinymce-aux .tox-toolbar__overflow {\n background-color: #fff;\n background-position: center top 43px;\n background-size: calc(100% - 8px * 2) calc(100% - 51px);\n border: none;\n border-radius: 6px;\n box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15);\n overscroll-behavior: none;\n padding: 4px 0;\n}\n.tox-pop .tox-pop__dialog {\n /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox-pop .tox-pop__dialog .tox-toolbar {\n background-position: center top 43px;\n background-size: calc(100% - 11px * 2) calc(100% - 51px);\n padding: 4px 0;\n}\n.tox .tox-toolbar__group {\n align-items: center;\n display: flex;\n flex-wrap: wrap;\n margin: 0 0;\n padding: 0 11px 0 12px;\n}\n.tox .tox-toolbar__group--pull-right {\n margin-left: auto;\n}\n.tox .tox-toolbar--scrolling .tox-toolbar__group {\n flex-shrink: 0;\n flex-wrap: nowrap;\n}\n.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type) {\n border-right: 1px solid transparent;\n}\n.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type) {\n border-left: 1px solid transparent;\n}\n.tox .tox-tooltip {\n display: inline-block;\n padding: 8px;\n position: relative;\n}\n.tox .tox-tooltip__body {\n background-color: #222f3e;\n border-radius: 6px;\n box-shadow: 0 2px 4px rgba(34, 47, 62, 0.3);\n color: rgba(255, 255, 255, 0.75);\n font-size: 14px;\n font-style: normal;\n font-weight: normal;\n padding: 4px 8px;\n text-transform: none;\n}\n.tox .tox-tooltip__arrow {\n position: absolute;\n}\n.tox .tox-tooltip--down .tox-tooltip__arrow {\n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n border-top: 8px solid #222f3e;\n bottom: 0;\n left: 50%;\n position: absolute;\n transform: translateX(-50%);\n}\n.tox .tox-tooltip--up .tox-tooltip__arrow {\n border-bottom: 8px solid #222f3e;\n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n left: 50%;\n position: absolute;\n top: 0;\n transform: translateX(-50%);\n}\n.tox .tox-tooltip--right .tox-tooltip__arrow {\n border-bottom: 8px solid transparent;\n border-left: 8px solid #222f3e;\n border-top: 8px solid transparent;\n position: absolute;\n right: 0;\n top: 50%;\n transform: translateY(-50%);\n}\n.tox .tox-tooltip--left .tox-tooltip__arrow {\n border-bottom: 8px solid transparent;\n border-right: 8px solid #222f3e;\n border-top: 8px solid transparent;\n left: 0;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n}\n.tox .tox-tree {\n display: flex;\n flex-direction: column;\n}\n.tox .tox-tree .tox-trbtn {\n align-items: center;\n background: transparent;\n border: 0;\n border-radius: 4px;\n box-shadow: none;\n color: #222f3e;\n display: flex;\n flex: 0 0 auto;\n font-size: 14px;\n font-style: normal;\n font-weight: normal;\n height: 28px;\n margin-bottom: 4px;\n margin-top: 4px;\n outline: none;\n overflow: hidden;\n padding: 0;\n padding-left: 8px;\n text-transform: none;\n}\n.tox .tox-tree .tox-trbtn .tox-tree__label {\n cursor: default;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.tox .tox-tree .tox-trbtn svg {\n display: block;\n fill: #222f3e;\n}\n.tox .tox-tree .tox-trbtn:focus {\n background: #cce2fa;\n border: 0;\n box-shadow: none;\n}\n.tox .tox-tree .tox-trbtn:hover {\n background: #cce2fa;\n border: 0;\n box-shadow: none;\n color: #222f3e;\n}\n.tox .tox-tree .tox-trbtn:hover svg {\n fill: #222f3e;\n}\n.tox .tox-tree .tox-trbtn:active {\n background: #a6ccf7;\n border: 0;\n box-shadow: none;\n color: #222f3e;\n}\n.tox .tox-tree .tox-trbtn:active svg {\n fill: #222f3e;\n}\n.tox .tox-tree .tox-trbtn--disabled,\n.tox .tox-tree .tox-trbtn--disabled:hover,\n.tox .tox-tree .tox-trbtn:disabled,\n.tox .tox-tree .tox-trbtn:disabled:hover {\n background: transparent;\n border: 0;\n box-shadow: none;\n color: rgba(34, 47, 62, 0.5);\n cursor: not-allowed;\n}\n.tox .tox-tree .tox-trbtn--disabled svg,\n.tox .tox-tree .tox-trbtn--disabled:hover svg,\n.tox .tox-tree .tox-trbtn:disabled svg,\n.tox .tox-tree .tox-trbtn:disabled:hover svg {\n /* stylelint-disable-line no-descending-specificity */\n fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-tree .tox-trbtn--enabled,\n.tox .tox-tree .tox-trbtn--enabled:hover {\n background: #a6ccf7;\n border: 0;\n box-shadow: none;\n color: #222f3e;\n}\n.tox .tox-tree .tox-trbtn--enabled > *,\n.tox .tox-tree .tox-trbtn--enabled:hover > * {\n transform: none;\n}\n.tox .tox-tree .tox-trbtn--enabled svg,\n.tox .tox-tree .tox-trbtn--enabled:hover svg {\n /* stylelint-disable-line no-descending-specificity */\n fill: #222f3e;\n}\n.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) {\n color: #222f3e;\n}\n.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) svg {\n fill: #222f3e;\n}\n.tox .tox-tree .tox-trbtn:active > * {\n transform: none;\n}\n.tox .tox-tree .tox-trbtn--return {\n align-self: stretch;\n height: unset;\n width: 16px;\n}\n.tox .tox-tree .tox-trbtn--labeled {\n padding: 0 4px;\n width: unset;\n}\n.tox .tox-tree .tox-trbtn__vlabel {\n display: block;\n font-size: 10px;\n font-weight: normal;\n letter-spacing: -0.025em;\n margin-bottom: 4px;\n white-space: nowrap;\n}\n.tox .tox-tree .tox-tree--directory {\n display: flex;\n flex-direction: column;\n /* stylelint-disable no-descending-specificity */\n}\n.tox .tox-tree .tox-tree--directory .tox-tree--directory__label {\n font-weight: bold;\n}\n.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn {\n margin-left: auto;\n}\n.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn svg {\n fill: transparent;\n}\n.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn.tox-mbtn--active svg,\n.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn:focus svg {\n fill: #222f3e;\n}\n.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover .tox-mbtn svg,\n.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:focus .tox-mbtn svg {\n fill: #222f3e;\n}\n.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) {\n background-color: transparent;\n color: #222f3e;\n}\n.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) .tox-chevron svg {\n fill: #222f3e;\n}\n.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-chevron {\n margin-right: 6px;\n}\n.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron,\n.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--shrinking) .tox-chevron {\n transition: transform 0.5s ease-in-out;\n}\n.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron,\n.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--open) .tox-chevron {\n transform: rotate(90deg);\n}\n.tox .tox-tree .tox-tree--leaf__label {\n font-weight: normal;\n}\n.tox .tox-tree .tox-tree--leaf__label .tox-mbtn {\n margin-left: auto;\n}\n.tox .tox-tree .tox-tree--leaf__label .tox-mbtn svg {\n fill: transparent;\n}\n.tox .tox-tree .tox-tree--leaf__label .tox-mbtn.tox-mbtn--active svg,\n.tox .tox-tree .tox-tree--leaf__label .tox-mbtn:focus svg {\n fill: #222f3e;\n}\n.tox .tox-tree .tox-tree--leaf__label:hover .tox-mbtn svg {\n fill: #222f3e;\n}\n.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) {\n background-color: transparent;\n color: #222f3e;\n}\n.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) .tox-chevron svg {\n fill: #222f3e;\n}\n.tox .tox-tree .tox-tree--directory__children {\n overflow: hidden;\n padding-left: 16px;\n}\n.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--growing,\n.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--shrinking {\n transition: height 0.5s ease-in-out;\n}\n.tox .tox-tree .tox-trbtn.tox-tree--leaf__label {\n display: flex;\n justify-content: space-between;\n}\n.tox .tox-view-wrap,\n.tox .tox-view-wrap__slot-container {\n background-color: #fff;\n display: flex;\n flex: 1;\n flex-direction: column;\n}\n.tox .tox-view {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n overflow: hidden;\n}\n.tox .tox-view__header {\n align-items: center;\n display: flex;\n font-size: 16px;\n justify-content: space-between;\n padding: 8px 8px 0 8px;\n position: relative;\n}\n.tox .tox-view--mobile.tox-view__header,\n.tox .tox-view--mobile.tox-view__toolbar {\n padding: 8px;\n}\n.tox .tox-view--scrolling {\n flex-wrap: nowrap;\n overflow-x: auto;\n}\n.tox .tox-view__toolbar {\n display: flex;\n flex-direction: row;\n gap: 8px;\n justify-content: space-between;\n padding: 8px 8px 0 8px;\n}\n.tox .tox-view__toolbar__group {\n display: flex;\n flex-direction: row;\n gap: 12px;\n}\n.tox .tox-view__header-start,\n.tox .tox-view__header-end {\n display: flex;\n}\n.tox .tox-view__pane {\n height: 100%;\n padding: 8px;\n width: 100%;\n}\n.tox .tox-view__pane_panel {\n border: 1px solid #eeeeee;\n border-radius: 6px;\n}\n.tox:not([dir=rtl]) .tox-view__header .tox-view__header-start > *,\n.tox:not([dir=rtl]) .tox-view__header .tox-view__header-end > * {\n margin-left: 8px;\n}\n.tox[dir=rtl] .tox-view__header .tox-view__header-start > *,\n.tox[dir=rtl] .tox-view__header .tox-view__header-end > * {\n margin-right: 8px;\n}\n.tox .tox-well {\n border: 1px solid #eeeeee;\n border-radius: 6px;\n padding: 8px;\n width: 100%;\n}\n.tox .tox-well > *:first-child {\n margin-top: 0;\n}\n.tox .tox-well > *:last-child {\n margin-bottom: 0;\n}\n.tox .tox-well > *:only-child {\n margin: 0;\n}\n.tox .tox-custom-editor {\n border: 1px solid #eeeeee;\n border-radius: 6px;\n display: flex;\n flex: 1;\n overflow: hidden;\n position: relative;\n}\n/* stylelint-disable */\n.tox {\n /* stylelint-enable */\n}\n.tox .tox-dialog-loading::before {\n background-color: rgba(0, 0, 0, 0.5);\n content: \"\";\n height: 100%;\n position: absolute;\n width: 100%;\n z-index: 1000;\n}\n.tox .tox-tab {\n cursor: pointer;\n}\n.tox .tox-dialog__content-js {\n display: flex;\n flex: 1;\n}\n.tox .tox-dialog__body-content .tox-collection {\n display: flex;\n flex: 1;\n}\n"; (require("browserify-css").createStyle(css, { "href": "node_modules/tinymce/skins/ui/oxide/skin.css" }, { "insertAt": "bottom" })); module.exports = css; - - -},{"browserify-css":1}],21:[function(require,module,exports){ // Exports the "silver" theme for usage with module loaders // Usage: // CommonJS: @@ -26771,7 +26767,7 @@ var css = ".tox {\n box-shadow: none;\n box-sizing: content-box;\n color: #22 // ES2015: // import 'tinymce/themes/silver' require('./theme.js'); -},{"./theme.js":22}],22:[function(require,module,exports){ +},{"./theme.js":21}],21:[function(require,module,exports){ /** * TinyMCE version 6.7.0 (2023-08-30) */ @@ -57311,7 +57307,7 @@ require('./theme.js'); })(); -},{}],23:[function(require,module,exports){ +},{}],22:[function(require,module,exports){ /** * TinyMCE version 6.7.0 (2023-08-30) */ @@ -88839,7 +88835,11 @@ require('./theme.js'); })(); -},{}],24:[function(require,module,exports){ +},{}],23:[function(require,module,exports){ +var css = "/**\n* Copyright (c) Tiny Technologies, Inc. All rights reserved.\n* Licensed under the LGPL or a commercial license.\n* For LGPL see License.txt in the project root for license information.\n* For commercial licenses see https://www.tiny.cloud/\n*/\n.tox {\n box-shadow: none;\n box-sizing: content-box;\n color: #000;\n cursor: auto;\n font-family: \"proxima_novalight\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n font-size: 16px;\n font-style: normal;\n font-weight: normal;\n line-height: normal;\n -webkit-tap-highlight-color: transparent;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n vertical-align: initial;\n white-space: normal;\n}\n.tox *:not(svg):not(rect) {\n box-sizing: inherit;\n color: inherit;\n cursor: inherit;\n direction: inherit;\n font-size: inherit;\n font-style: inherit;\n font-weight: inherit;\n line-height: inherit;\n -webkit-tap-highlight-color: inherit;\n text-align: inherit;\n text-decoration: inherit;\n text-shadow: inherit;\n text-transform: inherit;\n vertical-align: inherit;\n white-space: inherit;\n}\n.tox *:not(svg):not(rect) {\n /* stylelint-disable-line no-duplicate-selectors */\n background: transparent;\n border: 0;\n box-shadow: none;\n float: none;\n height: auto;\n margin: 0;\n max-width: none;\n outline: 0;\n padding: 0;\n position: static;\n width: auto;\n}\n.tox:not([dir=rtl]) {\n direction: ltr;\n text-align: left;\n}\n.tox[dir=rtl] {\n direction: rtl;\n text-align: right;\n}\n.tox-tinymce {\n border: 1px solid #7e7e7e;\n border-radius: 0px;\n box-shadow: none;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n visibility: inherit !important;\n}\n.tox-tinymce-inline {\n border: none;\n box-shadow: none;\n}\n.tox-tinymce-inline .tox-editor-header {\n background-color: transparent;\n border: 1px solid #7e7e7e;\n border-radius: 0px;\n box-shadow: none;\n}\n.tox-tinymce-aux {\n z-index: 1300;\n}\n.tox-tinymce *:focus,\n.tox-tinymce-aux *:focus {\n outline: none;\n}\nbutton::-moz-focus-inner {\n border: 0;\n}\n.tox[dir=rtl] .tox-icon--flip svg {\n transform: rotateY(180deg);\n}\n.tox .accessibility-issue__header {\n align-items: center;\n display: flex;\n margin-bottom: 4px;\n}\n.tox .accessibility-issue__description {\n align-items: stretch;\n border: 1px solid #7e7e7e;\n border-radius: 0px;\n display: flex;\n justify-content: space-between;\n}\n.tox .accessibility-issue__description > div {\n padding-bottom: 4px;\n}\n.tox .accessibility-issue__description > div > div {\n align-items: center;\n display: flex;\n margin-bottom: 4px;\n}\n.tox .accessibility-issue__description > *:last-child:not(:only-child) {\n border-color: #7e7e7e;\n border-style: solid;\n}\n.tox .accessibility-issue__repair {\n margin-top: 16px;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description {\n background-color: rgba(62, 73, 148, 0.1);\n border-color: rgba(62, 73, 148, 0.4);\n color: #000;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description > *:last-child {\n border-color: rgba(62, 73, 148, 0.4);\n}\n.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2 {\n color: #3e4994;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon svg {\n fill: #3e4994;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info a .tox-icon {\n color: #3e4994;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description {\n background-color: rgba(255, 165, 0, 0.1);\n border-color: rgba(255, 165, 0, 0.5);\n color: #000;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description > *:last-child {\n border-color: rgba(255, 165, 0, 0.5);\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2 {\n color: #cc8500;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon svg {\n fill: #cc8500;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn a .tox-icon {\n color: #cc8500;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description {\n background-color: rgba(182, 65, 53, 0.1);\n border-color: rgba(182, 65, 53, 0.4);\n color: #000;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description > *:last-child {\n border-color: rgba(182, 65, 53, 0.4);\n}\n.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2 {\n color: #b64135;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon svg {\n fill: #b64135;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error a .tox-icon {\n color: #b64135;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description {\n background-color: rgba(41, 124, 70, 0.1);\n border-color: rgba(41, 124, 70, 0.4);\n color: #000;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description > *:last-child {\n border-color: rgba(41, 124, 70, 0.4);\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2 {\n color: #297c46;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon svg {\n fill: #297c46;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success a .tox-icon {\n color: #297c46;\n}\n.tox .tox-dialog__body-content .accessibility-issue__header h1,\n.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2 {\n margin-top: 0;\n}\n.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button {\n margin-left: 4px;\n}\n.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) {\n margin-left: auto;\n}\n.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description {\n padding: 4px 4px 4px 8px;\n}\n.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description > *:last-child {\n border-left-width: 1px;\n padding-left: 4px;\n}\n.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button {\n margin-right: 4px;\n}\n.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) {\n margin-right: auto;\n}\n.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description {\n padding: 4px 8px 4px 4px;\n}\n.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description > *:last-child {\n border-right-width: 1px;\n padding-right: 4px;\n}\n.tox .tox-anchorbar {\n display: flex;\n flex: 0 0 auto;\n}\n.tox .tox-bar {\n display: flex;\n flex: 0 0 auto;\n}\n.tox .tox-button {\n background-color: #3e4994;\n background-image: none;\n background-position: 0 0;\n background-repeat: repeat;\n border-color: #3e4994;\n border-radius: 0px;\n border-style: solid;\n border-width: 1px;\n box-shadow: none;\n box-sizing: border-box;\n color: #fff;\n cursor: pointer;\n display: inline-block;\n font-style: normal;\n letter-spacing: normal;\n line-height: 24px;\n margin: 0;\n outline: none;\n padding: 4px 16px;\n text-align: center;\n text-decoration: none;\n text-transform: none;\n white-space: nowrap;\n}\n.tox .tox-button[disabled] {\n background-color: #3e4994;\n background-image: none;\n border-color: #3e4994;\n box-shadow: none;\n color: rgba(255, 255, 255, 0.5);\n cursor: not-allowed;\n}\n.tox .tox-button:hover:not(:disabled) {\n background-color: #364082;\n background-image: none;\n border-color: #364082;\n box-shadow: none;\n color: #fff;\n}\n.tox .tox-button:active:not(:disabled),\n.tox .tox-button:focus:not(:disabled) {\n background-color: #fd0 !important;\n box-shadow: 0 0 0 2px #1e1e1e !important;\n color: #1e1e1e !important;\n}\n.tox .tox-button--secondary {\n background-color: #fff;\n background-image: none;\n background-position: 0 0;\n background-repeat: repeat;\n border: 0;\n box-shadow: none;\n color: #000;\n font-style: normal;\n letter-spacing: normal;\n outline: none;\n padding: 4px 16px;\n text-decoration: none;\n text-transform: none;\n}\n.tox .tox-button--secondary[disabled] {\n background-color: #ebebeb;\n color: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-button--secondary:hover:not(:disabled) {\n background-color: #fff;\n background-image: none;\n box-shadow: none;\n color: #000;\n}\n.tox .tox-button--icon,\n.tox .tox-button.tox-button--icon,\n.tox .tox-button.tox-button--secondary.tox-button--icon {\n padding: 4px;\n}\n.tox .tox-button--icon .tox-icon svg,\n.tox .tox-button.tox-button--icon .tox-icon svg,\n.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg {\n display: block;\n fill: currentColor;\n}\n.tox .tox-button-link {\n background: 0;\n border: none;\n box-sizing: border-box;\n cursor: pointer;\n display: inline-block;\n font-size: 16px;\n font-weight: normal;\n line-height: 1.3;\n margin: 0;\n padding: 0;\n white-space: nowrap;\n}\n\n.tox .tox-button--naked {\n background-color: transparent;\n border-color: transparent;\n box-shadow: unset;\n color: #000;\n}\n.tox .tox-button--naked[disabled] {\n background-color: #ebebeb;\n border-color: #ebebeb;\n box-shadow: none;\n color: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-button--naked:hover:not(:disabled) {\n background-color: #dedede;\n border-color: #dedede;\n box-shadow: none;\n color: #000;\n}\n.tox .tox-button--naked:focus:not(:disabled) {\n background-color: #dedede;\n border-color: #dedede;\n box-shadow: none;\n color: #000;\n}\n.tox .tox-button--naked:active:not(:disabled) {\n background-color: #d1d1d1;\n border-color: #d1d1d1;\n box-shadow: none;\n color: #000;\n}\n.tox .tox-button--naked .tox-icon svg {\n fill: currentColor;\n}\n.tox .tox-button--naked.tox-button--icon:hover:not(:disabled) {\n color: #000;\n}\n.tox .tox-checkbox {\n align-items: center;\n border-radius: 0px;\n cursor: pointer;\n display: flex;\n height: 36px;\n min-width: 36px;\n}\n.tox .tox-checkbox__input {\n /* Hide from view but visible to screen readers */\n height: 1px;\n overflow: hidden;\n position: absolute;\n top: auto;\n width: 1px;\n}\n.tox .tox-checkbox__icons {\n align-items: center;\n border-radius: 0px;\n box-shadow: 0 0 0 2px transparent;\n box-sizing: content-box;\n display: flex;\n height: 24px;\n justify-content: center;\n padding: calc(4px - 1px);\n width: 24px;\n}\n.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n display: block;\n fill: rgba(34, 47, 62, 0.3);\n}\n.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {\n display: none;\n fill: #3e4994;\n}\n.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg {\n display: none;\n fill: #3e4994;\n}\n.tox .tox-checkbox--disabled {\n color: rgba(34, 47, 62, 0.5);\n cursor: not-allowed;\n}\n.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg {\n fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {\n fill: rgba(34, 47, 62, 0.5);\n}\n.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n display: none;\n}\n.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__checked svg {\n display: block;\n}\n.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n display: none;\n}\n.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {\n display: block;\n}\n.tox input.tox-checkbox__input:focus + .tox-checkbox__icons {\n border-radius: 0px;\n box-shadow: inset 0 0 0 1px #3e4994;\n padding: calc(4px - 1px);\n}\n.tox:not([dir=rtl]) .tox-checkbox__label {\n margin-left: 4px;\n}\n.tox:not([dir=rtl]) .tox-checkbox__input {\n left: -10000px;\n}\n.tox:not([dir=rtl]) .tox-bar .tox-checkbox {\n margin-left: 4px;\n}\n.tox[dir=rtl] .tox-checkbox__label {\n margin-right: 4px;\n}\n.tox[dir=rtl] .tox-checkbox__input {\n right: -10000px;\n}\n.tox[dir=rtl] .tox-bar .tox-checkbox {\n margin-right: 4px;\n}\n.tox {\n /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox .tox-collection--toolbar .tox-collection__group {\n display: flex;\n padding: 0;\n}\n.tox .tox-collection--grid .tox-collection__group {\n display: flex;\n flex-wrap: wrap;\n max-height: 208px;\n overflow-x: hidden;\n overflow-y: auto;\n padding: 0;\n}\n.tox .tox-collection--list .tox-collection__group {\n border-bottom-width: 0;\n border-color: #7e7e7e;\n border-left-width: 0;\n border-right-width: 0;\n border-style: solid;\n border-top-width: 1px;\n padding: 4px 0;\n}\n.tox .tox-collection--list .tox-collection__group:first-child {\n border-top-width: 0;\n}\n.tox .tox-collection__group-heading {\n background-color: #989898;\n color: #fff;\n cursor: default;\n font-size: 12px;\n font-style: normal;\n font-weight: normal;\n margin-bottom: 4px;\n margin-top: -4px;\n padding: 4px 8px;\n text-transform: none;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.tox .tox-collection__item {\n align-items: center;\n color: #000;\n cursor: pointer;\n display: flex;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.tox .tox-collection--list .tox-collection__item {\n padding: 4px 8px;\n}\n.tox .tox-collection--toolbar .tox-collection__item {\n border-radius: 3px;\n padding: 4px;\n}\n.tox .tox-collection--grid .tox-collection__item {\n border-radius: 3px;\n padding: 4px;\n}\n.tox .tox-collection--list .tox-collection__item--enabled {\n background-color: #fafafa;\n color: #000;\n}\n.tox .tox-collection--list .tox-collection__item--active {\n background-color: #dee0e2;\n}\n.tox .tox-collection--toolbar .tox-collection__item--enabled {\n background-color: #dee0e2;\n color: #000;\n}\n.tox .tox-collection--toolbar .tox-collection__item--active {\n background-color: #dee0e2;\n}\n.tox .tox-collection--grid .tox-collection__item--enabled {\n background-color: #dee0e2;\n color: #000;\n}\n.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled) {\n background-color: #dee0e2;\n color: #000;\n}\n.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled) {\n color: #000;\n}\n.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled) {\n color: #000;\n}\n.tox .tox-collection__item-icon,\n.tox .tox-collection__item-checkmark {\n align-items: center;\n display: flex;\n height: 24px;\n justify-content: center;\n width: 24px;\n}\n.tox .tox-collection__item-icon svg,\n.tox .tox-collection__item-checkmark svg {\n fill: currentColor;\n}\n.tox .tox-collection--toolbar-lg .tox-collection__item-icon {\n height: 48px;\n width: 48px;\n}\n.tox .tox-collection__item-label {\n color: currentColor;\n display: inline-block;\n flex: 1;\n -ms-flex-preferred-size: auto;\n font-style: normal;\n font-weight: normal;\n line-height: 24px;\n text-transform: none;\n word-break: break-all;\n}\n.tox .tox-collection__item-accessory {\n color: ;\n display: inline-block;\n height: 24px;\n line-height: 24px;\n text-transform: none;\n}\n.tox .tox-collection__item-caret {\n align-items: center;\n display: flex;\n min-height: 24px;\n}\n.tox .tox-collection__item-caret::after {\n content: '';\n font-size: 0;\n min-height: inherit;\n}\n.tox .tox-collection__item-caret svg {\n fill: #000;\n}\n.tox .tox-collection__item--state-disabled {\n background-color: transparent;\n color: rgba(34, 47, 62, 0.5);\n cursor: not-allowed;\n}\n.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg {\n fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg {\n display: none;\n}\n.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory + .tox-collection__item-checkmark {\n display: none;\n}\n.tox .tox-collection--horizontal {\n background-color: #fafafa;\n border: 1px solid #7e7e7e;\n border-radius: 0px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n display: flex;\n flex: 0 0 auto;\n flex-shrink: 0;\n flex-wrap: nowrap;\n margin-bottom: 0;\n overflow-x: auto;\n padding: 0;\n}\n.tox .tox-collection--horizontal .tox-collection__group {\n align-items: center;\n display: flex;\n flex-wrap: nowrap;\n margin: 0;\n padding: 0 4px;\n}\n.tox .tox-collection--horizontal .tox-collection__item {\n height: 34px;\n margin: 2px 0 3px 0;\n padding: 0 4px;\n}\n.tox .tox-collection--horizontal .tox-collection__item-label {\n white-space: nowrap;\n}\n.tox .tox-collection--horizontal .tox-collection__item-caret {\n margin-left: 4px;\n}\n.tox .tox-collection__item-container {\n display: flex;\n}\n.tox .tox-collection__item-container--row {\n align-items: center;\n flex: 1 1 auto;\n flex-direction: row;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--align-left {\n margin-right: auto;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--align-right {\n justify-content: flex-end;\n margin-left: auto;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top {\n align-items: flex-start;\n margin-bottom: auto;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle {\n align-items: center;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom {\n align-items: flex-end;\n margin-top: auto;\n}\n.tox .tox-collection__item-container--column {\n -ms-grid-row-align: center;\n align-self: center;\n flex: 1 1 auto;\n flex-direction: column;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--align-left {\n align-items: flex-start;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--align-right {\n align-items: flex-end;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top {\n align-self: flex-start;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle {\n -ms-grid-row-align: center;\n align-self: center;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom {\n align-self: flex-end;\n}\n.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type) {\n border-right: 1px solid #7e7e7e;\n}\n.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > *:not(:first-child) {\n margin-left: 8px;\n}\n.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child {\n margin-left: 4px;\n}\n.tox:not([dir=rtl]) .tox-collection__item-accessory {\n margin-left: 16px;\n text-align: right;\n}\n.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret {\n margin-left: 16px;\n}\n.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type) {\n border-left: 1px solid #7e7e7e;\n}\n.tox[dir=rtl] .tox-collection--list .tox-collection__item > *:not(:first-child) {\n margin-right: 8px;\n}\n.tox[dir=rtl] .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child {\n margin-right: 4px;\n}\n.tox[dir=rtl] .tox-collection__item-accessory {\n margin-right: 16px;\n text-align: left;\n}\n.tox[dir=rtl] .tox-collection .tox-collection__item-caret {\n margin-right: 16px;\n transform: rotateY(180deg);\n}\n.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret {\n margin-right: 4px;\n}\n.tox .tox-color-picker-container {\n display: flex;\n flex-direction: row;\n height: 225px;\n margin: 0;\n}\n.tox .tox-sv-palette {\n box-sizing: border-box;\n display: flex;\n height: 100%;\n}\n.tox .tox-sv-palette-spectrum {\n height: 100%;\n}\n.tox .tox-sv-palette,\n.tox .tox-sv-palette-spectrum {\n width: 225px;\n}\n.tox .tox-sv-palette-thumb {\n background: none;\n border: 1px solid black;\n border-radius: 50%;\n box-sizing: content-box;\n height: 12px;\n position: absolute;\n width: 12px;\n}\n.tox .tox-sv-palette-inner-thumb {\n border: 1px solid white;\n border-radius: 50%;\n height: 10px;\n position: absolute;\n width: 10px;\n}\n.tox .tox-hue-slider {\n box-sizing: border-box;\n height: 100%;\n width: 25px;\n}\n.tox .tox-hue-slider-spectrum {\n background: linear-gradient(to bottom, #f00, #ff0080, #f0f, #8000ff, #00f, #0080ff, #0ff, #00ff80, #0f0, #80ff00, #ff0, #ff8000, #f00);\n height: 100%;\n width: 100%;\n}\n.tox .tox-hue-slider,\n.tox .tox-hue-slider-spectrum {\n width: 20px;\n}\n.tox .tox-hue-slider-thumb {\n background: white;\n border: 1px solid black;\n box-sizing: content-box;\n height: 4px;\n width: 100%;\n}\n.tox .tox-rgb-form {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n}\n.tox .tox-rgb-form div {\n align-items: center;\n display: flex;\n justify-content: space-between;\n margin-bottom: 5px;\n width: inherit;\n}\n.tox .tox-rgb-form input {\n width: 6em;\n}\n.tox .tox-rgb-form input.tox-invalid {\n /* Need !important to override Chrome's focus styling unfortunately */\n border: 1px solid red !important;\n}\n.tox .tox-rgb-form .tox-rgba-preview {\n border: 1px solid black;\n flex-grow: 2;\n margin-bottom: 0;\n}\n.tox:not([dir=rtl]) .tox-sv-palette {\n margin-right: 15px;\n}\n.tox:not([dir=rtl]) .tox-hue-slider {\n margin-right: 15px;\n}\n.tox:not([dir=rtl]) .tox-hue-slider-thumb {\n margin-left: -1px;\n}\n.tox:not([dir=rtl]) .tox-rgb-form label {\n margin-right: 0.5em;\n}\n.tox[dir=rtl] .tox-sv-palette {\n margin-left: 15px;\n}\n.tox[dir=rtl] .tox-hue-slider {\n margin-left: 15px;\n}\n.tox[dir=rtl] .tox-hue-slider-thumb {\n margin-right: -1px;\n}\n.tox[dir=rtl] .tox-rgb-form label {\n margin-left: 0.5em;\n}\n.tox .tox-toolbar .tox-swatches,\n.tox .tox-toolbar__primary .tox-swatches,\n.tox .tox-toolbar__overflow .tox-swatches {\n margin: 2px 0 3px 4px;\n}\n.tox .tox-collection--list .tox-collection__group .tox-swatches-menu {\n border: 0;\n margin: -4px 0;\n}\n.tox .tox-swatches__row {\n display: flex;\n}\n.tox .tox-swatch {\n height: 30px;\n transition: transform 0.15s, box-shadow 0.15s;\n width: 30px;\n}\n.tox .tox-swatch:hover,\n.tox .tox-swatch:focus {\n box-shadow: 0 0 0 1px rgba(127, 127, 127, 0.3) inset;\n transform: scale(0.8);\n}\n.tox .tox-swatch--remove {\n align-items: center;\n display: flex;\n justify-content: center;\n}\n.tox .tox-swatch--remove svg path {\n stroke: #e74c3c;\n}\n.tox .tox-swatches__picker-btn {\n align-items: center;\n background-color: transparent;\n border: 0;\n cursor: pointer;\n display: flex;\n height: 30px;\n justify-content: center;\n outline: none;\n padding: 0;\n width: 30px;\n}\n.tox .tox-swatches__picker-btn svg {\n height: 24px;\n width: 24px;\n}\n.tox .tox-swatches__picker-btn:hover {\n background: #dee0e2;\n}\n.tox:not([dir=rtl]) .tox-swatches__picker-btn {\n margin-left: auto;\n}\n.tox[dir=rtl] .tox-swatches__picker-btn {\n margin-right: auto;\n}\n.tox .tox-comment-thread {\n background: #fafafa;\n position: relative;\n}\n.tox .tox-comment-thread > *:not(:first-child) {\n margin-top: 8px;\n}\n.tox .tox-comment {\n background: #fafafa;\n border: 1px solid #7e7e7e;\n border-radius: 0px;\n box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1);\n padding: 8px 8px 16px 8px;\n position: relative;\n}\n.tox .tox-comment__header {\n align-items: center;\n color: #000;\n display: flex;\n justify-content: space-between;\n}\n.tox .tox-comment__date {\n color: ;\n font-size: 12px;\n}\n.tox .tox-comment__body {\n color: #000;\n font-style: normal;\n font-weight: normal;\n line-height: 1.3;\n margin-top: 8px;\n position: relative;\n text-transform: initial;\n}\n.tox .tox-comment__body textarea {\n resize: none;\n white-space: normal;\n width: 100%;\n}\n.tox .tox-comment__expander {\n padding-top: 8px;\n}\n.tox .tox-comment__expander p {\n color: ;\n font-style: normal;\n}\n.tox .tox-comment__body p {\n margin: 0;\n}\n.tox .tox-comment__buttonspacing {\n padding-top: 16px;\n text-align: center;\n}\n.tox .tox-comment-thread__overlay::after {\n background: #fafafa;\n bottom: 0;\n content: \"\";\n display: flex;\n left: 0;\n opacity: 0.9;\n position: absolute;\n right: 0;\n top: 0;\n z-index: 5;\n}\n.tox .tox-comment__reply {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n justify-content: flex-end;\n margin-top: 8px;\n}\n.tox .tox-comment__reply > *:first-child {\n margin-bottom: 8px;\n width: 100%;\n}\n.tox .tox-comment__edit {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n margin-top: 16px;\n}\n.tox .tox-comment__gradient::after {\n background: linear-gradient(rgba(250, 250, 250, 0), #fafafa);\n bottom: 0;\n content: \"\";\n display: block;\n height: 5em;\n margin-top: -40px;\n position: absolute;\n width: 100%;\n}\n.tox .tox-comment__overlay {\n background: #fafafa;\n bottom: 0;\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n left: 0;\n opacity: 0.9;\n position: absolute;\n right: 0;\n text-align: center;\n top: 0;\n z-index: 5;\n}\n.tox .tox-comment__loading-text {\n align-items: center;\n color: #000;\n display: flex;\n flex-direction: column;\n position: relative;\n}\n.tox .tox-comment__loading-text > div {\n padding-bottom: 16px;\n}\n.tox .tox-comment__overlaytext {\n bottom: 0;\n flex-direction: column;\n left: 0;\n padding: 1em;\n position: absolute;\n right: 0;\n top: 0;\n z-index: 10;\n}\n.tox .tox-comment__overlaytext p {\n background-color: #fafafa;\n box-shadow: 0 0 8px 8px #fafafa;\n color: #000;\n text-align: center;\n}\n.tox .tox-comment__overlaytext div:nth-of-type(2) {\n font-size: 0.8em;\n}\n.tox .tox-comment__busy-spinner {\n align-items: center;\n background-color: #fafafa;\n bottom: 0;\n display: flex;\n justify-content: center;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n z-index: 20;\n}\n.tox .tox-comment__scroll {\n display: flex;\n flex-direction: column;\n flex-shrink: 1;\n overflow: auto;\n}\n.tox .tox-conversations {\n margin: 8px;\n}\n.tox:not([dir=rtl]) .tox-comment__edit {\n margin-left: 8px;\n}\n.tox:not([dir=rtl]) .tox-comment__buttonspacing > *:last-child,\n.tox:not([dir=rtl]) .tox-comment__edit > *:last-child,\n.tox:not([dir=rtl]) .tox-comment__reply > *:last-child {\n margin-left: 8px;\n}\n.tox[dir=rtl] .tox-comment__edit {\n margin-right: 8px;\n}\n.tox[dir=rtl] .tox-comment__buttonspacing > *:last-child,\n.tox[dir=rtl] .tox-comment__edit > *:last-child,\n.tox[dir=rtl] .tox-comment__reply > *:last-child {\n margin-right: 8px;\n}\n.tox .tox-user {\n align-items: center;\n display: flex;\n}\n.tox .tox-user__avatar svg {\n fill: ;\n}\n.tox .tox-user__name {\n color: ;\n font-size: 12px;\n font-style: normal;\n font-weight: bold;\n text-transform: uppercase;\n}\n.tox:not([dir=rtl]) .tox-user__avatar svg {\n margin-right: 8px;\n}\n.tox:not([dir=rtl]) .tox-user__avatar + .tox-user__name {\n margin-left: 8px;\n}\n.tox[dir=rtl] .tox-user__avatar svg {\n margin-left: 8px;\n}\n.tox[dir=rtl] .tox-user__avatar + .tox-user__name {\n margin-right: 8px;\n}\n.tox .tox-dialog-wrap {\n align-items: center;\n bottom: 0;\n display: flex;\n justify-content: center;\n left: 0;\n position: fixed;\n right: 0;\n top: 0;\n z-index: 1100;\n}\n.tox .tox-dialog-wrap__backdrop {\n background-color: rgba(62, 73, 148, 0.3);\n bottom: 0;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n z-index: 1;\n}\n.tox .tox-dialog-wrap__backdrop--opaque {\n background-color: #fafafa;\n}\n.tox .tox-dialog {\n background-color: #fff;\n border-color: #7e7e7e;\n border-radius: 0px;\n box-shadow: 0 0 0 12px rgba(62, 73, 148, 0.3);\n display: flex;\n flex-direction: column;\n max-height: 100%;\n max-width: 480px;\n overflow: hidden;\n position: relative;\n width: 95vw;\n z-index: 2;\n}\n@media only screen and (max-width:767px) {\n body:not(.tox-force-desktop) .tox .tox-dialog {\n align-self: flex-start;\n margin: 8px auto;\n width: calc(100vw - 16px);\n }\n}\n.tox .tox-dialog-inline {\n z-index: 1100;\n}\n.tox .tox-dialog__header {\n align-items: center;\n border-bottom: 1px solid #e5e5e5;\n color: #000;\n display: flex;\n font-family: \"code_pro_bold\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n font-size: 24px;\n justify-content: space-between;\n padding: 15px;\n position: relative;\n}\n.tox .tox-dialog__header .tox-button {\n z-index: 1;\n}\n.tox .tox-dialog__draghandle {\n cursor: grab;\n height: 100%;\n left: 0;\n position: absolute;\n top: 0;\n width: 100%;\n}\n.tox .tox-dialog__draghandle:active {\n cursor: grabbing;\n}\n.tox .tox-dialog__dismiss {\n margin-left: auto;\n}\n.tox .tox-dialog__title {\n font-family: \"code_pro_bold\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n font-size: 24px;\n line-height: 24px;\n margin: 0;\n text-transform: none;\n}\n.tox .tox-dialog__body {\n color: #000;\n display: flex;\n flex: 1;\n -ms-flex-preferred-size: auto;\n font-size: 16px;\n font-style: normal;\n font-weight: normal;\n line-height: 1.3;\n min-width: 0;\n text-align: left;\n text-transform: none;\n}\n@media only screen and (max-width:767px) {\n body:not(.tox-force-desktop) .tox .tox-dialog__body {\n flex-direction: column;\n }\n}\n.tox .tox-dialog__body-nav {\n align-items: flex-start;\n display: flex;\n flex-direction: column;\n padding: 20px;\n}\n@media only screen and (max-width:767px) {\n body:not(.tox-force-desktop) .tox .tox-dialog__body-nav {\n flex-direction: row;\n -webkit-overflow-scrolling: touch;\n overflow-x: auto;\n padding-bottom: 0;\n }\n}\n.tox .tox-dialog__body-nav-item {\n border-bottom: 2px solid transparent;\n color: #000;\n display: inline-block;\n line-height: 1.3;\n margin-bottom: 8px;\n text-decoration: none;\n white-space: nowrap;\n}\n.tox .tox-dialog__body-nav-item:focus {\n background-color: rgba(62, 73, 148, 0.1);\n}\n.tox .tox-dialog__body-nav-item--active {\n border-bottom: 2px solid #3e4994;\n color: #3e4994;\n}\n.tox .tox-dialog__body-content {\n box-sizing: border-box;\n display: flex;\n flex: 1;\n flex-direction: column;\n -ms-flex-preferred-size: auto;\n max-height: 650px;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n padding: 20px;\n}\n.tox .tox-dialog__body-content > * {\n margin-bottom: 0;\n margin-top: 16px;\n}\n.tox .tox-dialog__body-content > *:first-child {\n margin-top: 0;\n}\n.tox .tox-dialog__body-content > *:last-child {\n margin-bottom: 0;\n}\n.tox .tox-dialog__body-content > *:only-child {\n margin-bottom: 0;\n margin-top: 0;\n}\n.tox .tox-dialog__body-content a {\n color: #3e4994;\n cursor: pointer;\n text-decoration: none;\n}\n.tox .tox-dialog__body-content a:hover,\n.tox .tox-dialog__body-content a:focus {\n color: #2f3770;\n text-decoration: none;\n}\n.tox .tox-dialog__body-content a:active {\n color: #2f3770;\n text-decoration: none;\n}\n.tox .tox-dialog__body-content svg {\n fill: #000;\n}\n.tox .tox-dialog__body-content ul {\n display: block;\n list-style-type: disc;\n margin-bottom: 16px;\n -webkit-margin-end: 0;\n margin-inline-end: 0;\n -webkit-margin-start: 0;\n margin-inline-start: 0;\n -webkit-padding-start: 2.5rem;\n padding-inline-start: 2.5rem;\n}\n.tox .tox-dialog__body-content .tox-form__group h1 {\n color: #000;\n font-size: 20px;\n font-style: normal;\n font-weight: bold;\n letter-spacing: normal;\n margin-bottom: 16px;\n margin-top: 2rem;\n text-transform: none;\n}\n.tox .tox-dialog__body-content .tox-form__group h2 {\n color: #000;\n font-size: 16px;\n font-style: normal;\n font-weight: bold;\n letter-spacing: normal;\n margin-bottom: 16px;\n margin-top: 2rem;\n text-transform: none;\n}\n.tox .tox-dialog__body-content .tox-form__group p {\n margin-bottom: 16px;\n}\n.tox .tox-dialog__body-content .tox-form__group h1:first-child,\n.tox .tox-dialog__body-content .tox-form__group h2:first-child,\n.tox .tox-dialog__body-content .tox-form__group p:first-child {\n margin-top: 0;\n}\n.tox .tox-dialog__body-content .tox-form__group h1:last-child,\n.tox .tox-dialog__body-content .tox-form__group h2:last-child,\n.tox .tox-dialog__body-content .tox-form__group p:last-child {\n margin-bottom: 0;\n}\n.tox .tox-dialog__body-content .tox-form__group h1:only-child,\n.tox .tox-dialog__body-content .tox-form__group h2:only-child,\n.tox .tox-dialog__body-content .tox-form__group p:only-child {\n margin-bottom: 0;\n margin-top: 0;\n}\n.tox .tox-dialog--width-lg {\n height: 650px;\n max-width: 1200px;\n}\n.tox .tox-dialog--width-md {\n max-width: 800px;\n}\n.tox .tox-dialog--width-md .tox-dialog__body-content {\n overflow: auto;\n}\n.tox .tox-dialog__body-content--centered {\n text-align: center;\n}\n.tox .tox-dialog__footer {\n align-items: center;\n border-top: 1px solid #e5e5e5;\n display: flex;\n justify-content: space-between;\n padding: 20px;\n}\n.tox .tox-dialog__footer-start,\n.tox .tox-dialog__footer-end {\n display: flex;\n}\n.tox .tox-dialog__busy-spinner {\n align-items: center;\n background-color: rgba(250, 250, 250, 0.75);\n bottom: 0;\n display: flex;\n justify-content: center;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n z-index: 3;\n}\n.tox .tox-dialog__table {\n border-collapse: collapse;\n width: 100%;\n}\n.tox .tox-dialog__table thead th {\n font-weight: bold;\n padding-bottom: 8px;\n}\n.tox .tox-dialog__table tbody tr {\n border-bottom: 1px solid #7e7e7e;\n}\n.tox .tox-dialog__table tbody tr:last-child {\n border-bottom: none;\n}\n.tox .tox-dialog__table td {\n padding-bottom: 8px;\n padding-top: 8px;\n}\n.tox .tox-dialog__popups {\n position: absolute;\n width: 100%;\n z-index: 1100;\n}\n.tox .tox-dialog__body-iframe {\n display: flex;\n flex: 1;\n flex-direction: column;\n -ms-flex-preferred-size: auto;\n}\n.tox .tox-dialog__body-iframe .tox-navobj {\n display: flex;\n flex: 1;\n -ms-flex-preferred-size: auto;\n}\n.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2) {\n flex: 1;\n -ms-flex-preferred-size: auto;\n height: 100%;\n}\n.tox .tox-dialog-dock-fadeout {\n opacity: 0;\n visibility: hidden;\n}\n.tox .tox-dialog-dock-fadein {\n opacity: 1;\n visibility: visible;\n}\n.tox .tox-dialog-dock-transition {\n transition: visibility 0s linear 0.3s, opacity 0.3s ease;\n}\n.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein {\n transition-delay: 0s;\n}\n.tox.tox-platform-ie {\n /* IE11 CSS styles go here */\n}\n.tox.tox-platform-ie .tox-dialog-wrap {\n position: -ms-device-fixed;\n}\n@media only screen and (max-width:767px) {\n body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav {\n margin-right: 0;\n }\n}\n@media only screen and (max-width:767px) {\n body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child) {\n margin-left: 8px;\n }\n}\n.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start > *,\n.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end > * {\n margin-left: 8px;\n}\n.tox[dir=rtl] .tox-dialog__body {\n text-align: right;\n}\n@media only screen and (max-width:767px) {\n body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav {\n margin-left: 0;\n }\n}\n@media only screen and (max-width:767px) {\n body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child) {\n margin-right: 8px;\n }\n}\n.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start > *,\n.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end > * {\n margin-right: 8px;\n}\nbody.tox-dialog__disable-scroll {\n overflow: hidden;\n}\n.tox .tox-dropzone-container {\n display: flex;\n flex: 1;\n -ms-flex-preferred-size: auto;\n}\n.tox .tox-dropzone {\n align-items: center;\n background: #fff;\n border: 2px dashed #7e7e7e;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n justify-content: center;\n min-height: 100px;\n padding: 10px;\n}\n.tox .tox-dropzone p {\n color: ;\n margin: 0 0 16px 0;\n}\n.tox .tox-edit-area {\n display: flex;\n flex: 1;\n -ms-flex-preferred-size: auto;\n overflow: hidden;\n position: relative;\n}\n.tox .tox-edit-area__iframe {\n background-color: #fff;\n border: 0;\n box-sizing: border-box;\n flex: 1;\n -ms-flex-preferred-size: auto;\n height: 100%;\n position: absolute;\n width: 100%;\n}\n.tox.tox-inline-edit-area {\n border: 1px dotted #7e7e7e;\n}\n.tox .tox-editor-container {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n overflow: hidden;\n}\n.tox .tox-editor-header {\n border-bottom: 1px solid #7e7e7e;\n z-index: 1;\n}\n.tox:not(.tox-tinymce-inline) .tox-editor-header {\n box-shadow: none;\n transition: box-shadow 0.5s;\n}\n.tox.tox-tinymce--toolbar-bottom .tox-editor-header,\n.tox.tox-tinymce-inline .tox-editor-header {\n margin-bottom: -1px;\n}\n.tox.tox-tinymce--toolbar-sticky-on .tox-editor-header {\n background-color: transparent;\n box-shadow: 0 4px 4px -3px rgba(0, 0, 0, 0.25);\n}\n.tox-editor-dock-fadeout {\n opacity: 0;\n visibility: hidden;\n}\n.tox-editor-dock-fadein {\n opacity: 1;\n visibility: visible;\n}\n.tox-editor-dock-transition {\n transition: visibility 0s linear 0.25s, opacity 0.25s ease;\n}\n.tox-editor-dock-transition.tox-editor-dock-fadein {\n transition-delay: 0s;\n}\n.tox .tox-control-wrap {\n flex: 1;\n position: relative;\n}\n.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,\n.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,\n.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid {\n display: none;\n}\n.tox .tox-control-wrap svg {\n display: block;\n}\n.tox .tox-control-wrap__status-icon-wrap {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n}\n.tox .tox-control-wrap__status-icon-invalid svg {\n fill: #b64135;\n}\n.tox .tox-control-wrap__status-icon-unknown svg {\n fill: orange;\n}\n.tox .tox-control-wrap__status-icon-valid svg {\n fill: green;\n}\n.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,\n.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,\n.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield {\n padding-right: 32px;\n}\n.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap {\n right: 4px;\n}\n.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,\n.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,\n.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield {\n padding-left: 32px;\n}\n.tox[dir=rtl] .tox-control-wrap__status-icon-wrap {\n left: 4px;\n}\n.tox .tox-autocompleter {\n max-width: 25em;\n}\n.tox .tox-autocompleter .tox-menu {\n max-width: 25em;\n}\n.tox .tox-autocompleter .tox-autocompleter-highlight {\n font-weight: bold;\n}\n.tox .tox-color-input {\n display: flex;\n position: relative;\n z-index: 1;\n}\n.tox .tox-color-input .tox-textfield {\n z-index: -1;\n}\n.tox .tox-color-input span {\n border-color: rgba(34, 47, 62, 0.2);\n border-radius: 0px;\n border-style: solid;\n border-width: 1px;\n box-shadow: none;\n box-sizing: border-box;\n height: 24px;\n position: absolute;\n top: 6px;\n width: 24px;\n}\n.tox .tox-color-input span:hover:not([aria-disabled=true]),\n.tox .tox-color-input span:focus:not([aria-disabled=true]) {\n border-color: #3e4994;\n cursor: pointer;\n}\n.tox .tox-color-input span::before {\n background-image: linear-gradient(45deg, rgba(0, 0, 0, 0.25) 25%, transparent 25%), linear-gradient(-45deg, rgba(0, 0, 0, 0.25) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, rgba(0, 0, 0, 0.25) 75%), linear-gradient(-45deg, transparent 75%, rgba(0, 0, 0, 0.25) 75%);\n background-position: 0 0, 0 6px, 6px -6px, -6px 0;\n background-size: 12px 12px;\n border: 1px solid #fafafa;\n border-radius: 0px;\n box-sizing: border-box;\n content: '';\n height: 24px;\n left: -1px;\n position: absolute;\n top: -1px;\n width: 24px;\n z-index: -1;\n}\n.tox .tox-color-input span[aria-disabled=true] {\n cursor: not-allowed;\n}\n.tox:not([dir=rtl]) .tox-color-input {\n /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox:not([dir=rtl]) .tox-color-input .tox-textfield {\n padding-left: 36px;\n}\n.tox:not([dir=rtl]) .tox-color-input span {\n left: 6px;\n}\n.tox[dir=\"rtl\"] .tox-color-input {\n /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox[dir=\"rtl\"] .tox-color-input .tox-textfield {\n padding-right: 36px;\n}\n.tox[dir=\"rtl\"] .tox-color-input span {\n right: 6px;\n}\n.tox .tox-label,\n.tox .tox-toolbar-label {\n color: ;\n display: block;\n font-style: normal;\n font-weight: normal;\n line-height: 1.6;\n padding: 0 8px 0 0;\n text-transform: none;\n white-space: nowrap;\n}\n.tox .tox-toolbar-label {\n padding: 0 8px;\n}\n.tox[dir=rtl] .tox-label {\n padding: 0 0 0 8px;\n}\n.tox .tox-form {\n display: flex;\n flex: 1;\n flex-direction: column;\n -ms-flex-preferred-size: auto;\n}\n.tox .tox-form__group {\n box-sizing: border-box;\n margin-bottom: 24px;\n}\n.tox .tox-form-group--maximize {\n flex: 1;\n}\n.tox .tox-form__group--error {\n color: #b64135;\n}\n.tox .tox-form__group--collection {\n display: flex;\n}\n.tox .tox-form__grid {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: space-between;\n}\n.tox .tox-form__grid--2col > .tox-form__group {\n width: calc(50% - (8px / 2));\n}\n.tox .tox-form__grid--3col > .tox-form__group {\n width: calc(100% / 3 - (8px / 2));\n}\n.tox .tox-form__grid--4col > .tox-form__group {\n width: calc(25% - (8px / 2));\n}\n.tox .tox-form__controls-h-stack {\n align-items: center;\n display: flex;\n}\n.tox .tox-form__group--inline {\n align-items: center;\n display: flex;\n}\n.tox .tox-form__group--stretched {\n display: flex;\n flex: 1;\n flex-direction: column;\n -ms-flex-preferred-size: auto;\n}\n.tox .tox-form__group--stretched .tox-textarea {\n flex: 1;\n -ms-flex-preferred-size: auto;\n}\n.tox .tox-form__group--stretched .tox-navobj {\n display: flex;\n flex: 1;\n -ms-flex-preferred-size: auto;\n}\n.tox .tox-form__group--stretched .tox-navobj :nth-child(2) {\n flex: 1;\n -ms-flex-preferred-size: auto;\n height: 100%;\n}\n.tox:not([dir=rtl]) .tox-form__controls-h-stack > *:not(:first-child) {\n margin-left: 4px;\n}\n.tox[dir=rtl] .tox-form__controls-h-stack > *:not(:first-child) {\n margin-right: 4px;\n}\n.tox .tox-lock.tox-locked .tox-lock-icon__unlock,\n.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock {\n display: none;\n}\n.tox .tox-textfield,\n.tox .tox-toolbar-textfield,\n.tox .tox-listboxfield .tox-listbox--select,\n.tox .tox-textarea {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: #fafafa;\n border-color: #7e7e7e;\n border-radius: 0px;\n border-style: solid;\n border-width: 1px;\n box-shadow: none;\n box-sizing: border-box;\n color: #000;\n font-size: 16px;\n line-height: 24px;\n margin: 0;\n min-height: 48px;\n outline: none;\n padding: 0 0 0 12px;\n resize: none;\n width: 100%;\n}\n.tox .tox-textfield[disabled],\n.tox .tox-textarea[disabled] {\n background-color: #ededed;\n color: rgba(34, 47, 62, 0.85);\n cursor: not-allowed;\n}\n.tox .tox-textfield:focus,\n.tox .tox-listboxfield .tox-listbox--select:focus,\n.tox .tox-textarea:focus {\n border-color: #1e1e1e;\n border-radius: 0;\n box-shadow: inset 0 0 0 2px #1e1e1e;\n outline: 3px solid #fd0;\n outline-offset: 0;\n}\n.tox .tox-toolbar-textfield {\n border-width: 0;\n margin-bottom: 3px;\n margin-top: 2px;\n max-width: 250px;\n}\n.tox .tox-naked-btn {\n background-color: transparent;\n border: 0;\n border-color: transparent;\n box-shadow: unset;\n color: #3e4994;\n cursor: pointer;\n display: block;\n margin: 0;\n padding: 0;\n}\n.tox .tox-naked-btn svg {\n display: block;\n fill: #000;\n}\n.tox:not([dir=rtl]) .tox-toolbar-textfield + * {\n margin-left: 4px;\n}\n.tox[dir=rtl] .tox-toolbar-textfield + * {\n margin-right: 4px;\n}\n.tox .tox-listboxfield {\n cursor: pointer;\n position: relative;\n}\n.tox .tox-listboxfield .tox-listbox--select[disabled] {\n background-color: #ededed;\n color: rgba(34, 47, 62, 0.85);\n cursor: not-allowed;\n}\n.tox .tox-listbox__select-label {\n cursor: default;\n flex: 1;\n margin: 0 4px;\n}\n.tox .tox-listbox__select-chevron {\n align-items: center;\n display: flex;\n justify-content: center;\n width: 16px;\n}\n.tox .tox-listbox__select-chevron svg {\n fill: #000;\n}\n.tox .tox-listboxfield .tox-listbox--select {\n align-items: center;\n display: flex;\n}\n.tox:not([dir=rtl]) .tox-listboxfield svg {\n right: 8px;\n}\n.tox[dir=rtl] .tox-listboxfield svg {\n left: 8px;\n}\n.tox .tox-selectfield {\n cursor: pointer;\n position: relative;\n}\n.tox .tox-selectfield select {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: #fafafa;\n border-color: #7e7e7e;\n border-radius: 0px;\n border-style: solid;\n border-width: 1px;\n box-shadow: none;\n box-sizing: border-box;\n color: #000;\n font-size: 16px;\n line-height: 24px;\n margin: 0;\n min-height: 34px;\n outline: none;\n padding: 5px 4px;\n resize: none;\n width: 100%;\n}\n.tox .tox-selectfield select[disabled] {\n background-color: #ededed;\n color: rgba(34, 47, 62, 0.85);\n cursor: not-allowed;\n}\n.tox .tox-selectfield select::-ms-expand {\n display: none;\n}\n.tox .tox-selectfield select:focus {\n background-color: #fafafa;\n border-color: #3e4994;\n box-shadow: none;\n outline: none;\n}\n.tox .tox-selectfield svg {\n pointer-events: none;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n}\n.tox:not([dir=rtl]) .tox-selectfield select[size=\"0\"],\n.tox:not([dir=rtl]) .tox-selectfield select[size=\"1\"] {\n padding-right: 24px;\n}\n.tox:not([dir=rtl]) .tox-selectfield svg {\n right: 8px;\n}\n.tox[dir=rtl] .tox-selectfield select[size=\"0\"],\n.tox[dir=rtl] .tox-selectfield select[size=\"1\"] {\n padding-left: 24px;\n}\n.tox[dir=rtl] .tox-selectfield svg {\n left: 8px;\n}\n.tox .tox-textarea {\n -webkit-appearance: textarea;\n -moz-appearance: textarea;\n appearance: textarea;\n white-space: pre-wrap;\n}\n.tox-fullscreen {\n border: 0;\n height: 100%;\n margin: 0;\n overflow: hidden;\n -ms-scroll-chaining: none;\n overscroll-behavior: none;\n padding: 0;\n touch-action: pinch-zoom;\n width: 100%;\n}\n.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {\n display: none;\n}\n.tox.tox-tinymce.tox-fullscreen,\n.tox-shadowhost.tox-fullscreen {\n left: 0;\n position: fixed;\n top: 0;\n z-index: 1200;\n}\n.tox.tox-tinymce.tox-fullscreen {\n background-color: transparent;\n}\n.tox-fullscreen .tox.tox-tinymce-aux,\n.tox-fullscreen ~ .tox.tox-tinymce-aux {\n z-index: 1201;\n}\n.tox .tox-help__more-link {\n list-style: none;\n margin-top: 1em;\n}\n.tox .tox-image-tools {\n width: 100%;\n}\n.tox .tox-image-tools__toolbar {\n align-items: center;\n display: flex;\n justify-content: center;\n}\n.tox .tox-image-tools__image {\n background-color: #666;\n height: 380px;\n overflow: auto;\n position: relative;\n width: 100%;\n}\n.tox .tox-image-tools__image,\n.tox .tox-image-tools__image + .tox-image-tools__toolbar {\n margin-top: 8px;\n}\n.tox .tox-image-tools__image-bg {\n background: url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==);\n}\n.tox .tox-image-tools__toolbar > .tox-spacer {\n flex: 1;\n -ms-flex-preferred-size: auto;\n}\n.tox .tox-croprect-block {\n background: black;\n filter: alpha(opacity=50);\n opacity: 0.5;\n position: absolute;\n zoom: 1;\n}\n.tox .tox-croprect-handle {\n border: 2px solid white;\n height: 20px;\n left: 0;\n position: absolute;\n top: 0;\n width: 20px;\n}\n.tox .tox-croprect-handle-move {\n border: 0;\n cursor: move;\n position: absolute;\n}\n.tox .tox-croprect-handle-nw {\n border-width: 2px 0 0 2px;\n cursor: nw-resize;\n left: 100px;\n margin: -2px 0 0 -2px;\n top: 100px;\n}\n.tox .tox-croprect-handle-ne {\n border-width: 2px 2px 0 0;\n cursor: ne-resize;\n left: 200px;\n margin: -2px 0 0 -20px;\n top: 100px;\n}\n.tox .tox-croprect-handle-sw {\n border-width: 0 0 2px 2px;\n cursor: sw-resize;\n left: 100px;\n margin: -20px 2px 0 -2px;\n top: 200px;\n}\n.tox .tox-croprect-handle-se {\n border-width: 0 2px 2px 0;\n cursor: se-resize;\n left: 200px;\n margin: -20px 0 0 -20px;\n top: 200px;\n}\n.tox:not([dir=rtl]) .tox-image-tools__toolbar > .tox-slider:not(:first-of-type) {\n margin-left: 8px;\n}\n.tox:not([dir=rtl]) .tox-image-tools__toolbar > .tox-button + .tox-slider {\n margin-left: 32px;\n}\n.tox:not([dir=rtl]) .tox-image-tools__toolbar > .tox-slider + .tox-button {\n margin-left: 32px;\n}\n.tox[dir=rtl] .tox-image-tools__toolbar > .tox-slider:not(:first-of-type) {\n margin-right: 8px;\n}\n.tox[dir=rtl] .tox-image-tools__toolbar > .tox-button + .tox-slider {\n margin-right: 32px;\n}\n.tox[dir=rtl] .tox-image-tools__toolbar > .tox-slider + .tox-button {\n margin-right: 32px;\n}\n.tox .tox-insert-table-picker {\n display: flex;\n flex-wrap: wrap;\n width: 170px;\n}\n.tox .tox-insert-table-picker > div {\n border-color: #7e7e7e;\n border-style: solid;\n border-width: 0 1px 1px 0;\n box-sizing: border-box;\n height: 17px;\n width: 17px;\n}\n.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker {\n margin: -4px 0;\n}\n.tox .tox-insert-table-picker .tox-insert-table-picker__selected {\n background-color: rgba(62, 73, 148, 0.5);\n border-color: rgba(62, 73, 148, 0.5);\n}\n.tox .tox-insert-table-picker__label {\n color: ;\n display: block;\n padding: 4px;\n text-align: center;\n width: 100%;\n}\n.tox:not([dir=rtl]) {\n /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox:not([dir=rtl]) .tox-insert-table-picker > div:nth-child(10n) {\n border-right: 0;\n}\n.tox[dir=rtl] {\n /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox[dir=rtl] .tox-insert-table-picker > div:nth-child(10n+1) {\n border-right: 0;\n}\n.tox {\n /* stylelint-disable */\n /* stylelint-enable */\n}\n.tox .tox-menu {\n background-color: #fafafa;\n border-radius: 0px;\n box-shadow: 0 0 0 6px rgba(62, 73, 148, 0.3);\n display: inline-block;\n overflow: hidden;\n vertical-align: top;\n z-index: 1150;\n}\n.tox .tox-menu.tox-collection.tox-collection--list {\n padding: 0;\n}\n.tox .tox-menu.tox-collection.tox-collection--toolbar {\n padding: 4px;\n}\n.tox .tox-menu.tox-collection.tox-collection--grid {\n padding: 4px;\n}\n.tox .tox-menu__label h1,\n.tox .tox-menu__label h2,\n.tox .tox-menu__label h3,\n.tox .tox-menu__label h4,\n.tox .tox-menu__label h5,\n.tox .tox-menu__label h6,\n.tox .tox-menu__label p,\n.tox .tox-menu__label blockquote,\n.tox .tox-menu__label code {\n margin: 0;\n}\n.tox .tox-menubar {\n /* background: url(\"data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%237e7e7e'/%3E%3C/svg%3E\") left 0 top 0 #fafafa; */\n background-color: #fafafa;\n display: flex;\n flex: 0 0 auto;\n flex-shrink: 0;\n flex-wrap: wrap;\n padding: 0 4px 0 4px;\n}\n.tox.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-menubar {\n border-top: 1px solid #7e7e7e;\n}\n/* Deprecated. Remove in next major release */\n.tox .tox-mbtn {\n align-items: center;\n background: transparent;\n border: 0;\n box-shadow: none;\n color: #000;\n display: flex;\n flex: 0 0 auto;\n font-style: normal;\n font-weight: normal;\n height: 34px;\n justify-content: center;\n margin: 2px 0 3px 0;\n outline: none;\n overflow: hidden;\n padding: 0 4px;\n text-transform: none;\n width: auto;\n}\n.tox .tox-mbtn[disabled] {\n background-color: transparent;\n border: 0;\n box-shadow: none;\n color: rgba(34, 47, 62, 0.5);\n cursor: not-allowed;\n}\n.tox .tox-mbtn:focus:not(:disabled) {\n background: #dee0e2;\n border: 0;\n box-shadow: none;\n color: #000;\n}\n.tox .tox-mbtn--active {\n background: #dee0e2;\n border: 0;\n box-shadow: none;\n color: #000;\n}\n.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active) {\n background: #dee0e2;\n border: 0;\n box-shadow: none;\n color: #000;\n}\n.tox .tox-mbtn__select-label {\n cursor: default;\n font-weight: normal;\n margin: 0 4px;\n}\n.tox .tox-mbtn[disabled] .tox-mbtn__select-label {\n cursor: not-allowed;\n}\n.tox .tox-mbtn__select-chevron {\n align-items: center;\n display: flex;\n justify-content: center;\n width: 16px;\n display: none;\n}\n.tox .tox-notification {\n border-radius: 0px;\n border-style: solid;\n border-width: 1px;\n box-shadow: none;\n box-sizing: border-box;\n display: -ms-grid;\n display: grid;\n font-weight: normal;\n -ms-grid-columns: minmax(40px, 1fr) auto minmax(40px, 1fr);\n grid-template-columns: minmax(40px, 1fr) auto minmax(40px, 1fr);\n margin-top: 4px;\n opacity: 0;\n padding: 4px;\n transition: transform 100ms ease-in, opacity 150ms ease-in;\n}\n.tox .tox-notification p {\n font-weight: normal;\n}\n.tox .tox-notification a {\n cursor: pointer;\n text-decoration: underline;\n}\n.tox .tox-notification--in {\n opacity: 1;\n}\n.tox .tox-notification--success {\n background-color: #d4e5da;\n border-color: #bfd8c8;\n color: #000;\n}\n.tox .tox-notification--success p {\n color: #000;\n}\n.tox .tox-notification--success a {\n color: #1d5731;\n}\n.tox .tox-notification--success svg {\n fill: #000;\n}\n.tox .tox-notification--error {\n background-color: #f6e6e5;\n border-color: #edd0cd;\n color: #000;\n}\n.tox .tox-notification--error p {\n color: #000;\n}\n.tox .tox-notification--error a {\n color: #b64135;\n}\n.tox .tox-notification--error svg {\n fill: #000;\n}\n.tox .tox-notification--warn,\n.tox .tox-notification--warning {\n background-color: #fffaea;\n border-color: #ffe89d;\n color: #000;\n}\n.tox .tox-notification--warn p,\n.tox .tox-notification--warning p {\n color: #000;\n}\n.tox .tox-notification--warn a,\n.tox .tox-notification--warning a {\n color: #000;\n}\n.tox .tox-notification--warn svg,\n.tox .tox-notification--warning svg {\n fill: #000;\n}\n.tox .tox-notification--info {\n background-color: #d9edf7;\n border-color: #779ecb;\n color: #000;\n}\n.tox .tox-notification--info p {\n color: #000;\n}\n.tox .tox-notification--info a {\n color: #000;\n}\n.tox .tox-notification--info svg {\n fill: #000;\n}\n.tox .tox-notification__body {\n -ms-grid-row-align: center;\n align-self: center;\n color: #000;\n -ms-grid-column-span: 1;\n grid-column-end: 3;\n -ms-grid-column: 2;\n grid-column-start: 2;\n -ms-grid-row-span: 1;\n grid-row-end: 2;\n -ms-grid-row: 1;\n grid-row-start: 1;\n text-align: center;\n white-space: normal;\n word-break: break-all;\n word-break: break-word;\n}\n.tox .tox-notification__body > * {\n margin: 0;\n}\n.tox .tox-notification__body > * + * {\n margin-top: 1rem;\n}\n.tox .tox-notification__icon {\n -ms-grid-row-align: center;\n align-self: center;\n -ms-grid-column-span: 1;\n grid-column-end: 2;\n -ms-grid-column: 1;\n grid-column-start: 1;\n -ms-grid-row-span: 1;\n grid-row-end: 2;\n -ms-grid-row: 1;\n grid-row-start: 1;\n -ms-grid-column-align: end;\n justify-self: end;\n}\n.tox .tox-notification__icon svg {\n display: block;\n}\n.tox .tox-notification__dismiss {\n -ms-grid-row-align: start;\n align-self: start;\n -ms-grid-column-span: 1;\n grid-column-end: 4;\n -ms-grid-column: 3;\n grid-column-start: 3;\n -ms-grid-row-span: 1;\n grid-row-end: 2;\n -ms-grid-row: 1;\n grid-row-start: 1;\n -ms-grid-column-align: end;\n justify-self: end;\n}\n.tox .tox-notification .tox-progress-bar {\n -ms-grid-column-span: 3;\n grid-column-end: 4;\n -ms-grid-column: 1;\n grid-column-start: 1;\n -ms-grid-row-span: 1;\n grid-row-end: 3;\n -ms-grid-row: 2;\n grid-row-start: 2;\n -ms-grid-column-align: center;\n justify-self: center;\n}\n.tox .tox-pop {\n display: inline-block;\n position: relative;\n}\n.tox .tox-pop--resizing {\n transition: width 0.1s ease;\n}\n.tox .tox-pop--resizing .tox-toolbar,\n.tox .tox-pop--resizing .tox-toolbar__group {\n flex-wrap: nowrap;\n}\n.tox .tox-pop--transition {\n transition: 0.15s ease;\n transition-property: left, right, top, bottom;\n}\n.tox .tox-pop--transition::before,\n.tox .tox-pop--transition::after {\n transition: all 0.15s, visibility 0s, opacity 0.075s ease 0.075s;\n}\n.tox .tox-pop__dialog {\n background-color: #fafafa;\n border: 1px solid #7e7e7e;\n border-radius: 0px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n min-width: 0;\n overflow: hidden;\n}\n.tox .tox-pop__dialog > *:not(.tox-toolbar) {\n margin: 4px 4px 4px 8px;\n}\n.tox .tox-pop__dialog .tox-toolbar {\n background-color: transparent;\n margin-bottom: -1px;\n}\n.tox .tox-pop::before,\n.tox .tox-pop::after {\n border-style: solid;\n content: '';\n display: block;\n height: 0;\n opacity: 1;\n position: absolute;\n width: 0;\n}\n.tox .tox-pop.tox-pop--inset::before,\n.tox .tox-pop.tox-pop--inset::after {\n opacity: 0;\n transition: all 0s 0.15s, visibility 0s, opacity 0.075s ease;\n}\n.tox .tox-pop.tox-pop--bottom::before,\n.tox .tox-pop.tox-pop--bottom::after {\n left: 50%;\n top: 100%;\n}\n.tox .tox-pop.tox-pop--bottom::after {\n border-color: #fafafa transparent transparent transparent;\n border-width: 8px;\n margin-left: -8px;\n margin-top: -1px;\n}\n.tox .tox-pop.tox-pop--bottom::before {\n border-color: #7e7e7e transparent transparent transparent;\n border-width: 9px;\n margin-left: -9px;\n}\n.tox .tox-pop.tox-pop--top::before,\n.tox .tox-pop.tox-pop--top::after {\n left: 50%;\n top: 0;\n transform: translateY(-100%);\n}\n.tox .tox-pop.tox-pop--top::after {\n border-color: transparent transparent #fafafa transparent;\n border-width: 8px;\n margin-left: -8px;\n margin-top: 1px;\n}\n.tox .tox-pop.tox-pop--top::before {\n border-color: transparent transparent #7e7e7e transparent;\n border-width: 9px;\n margin-left: -9px;\n}\n.tox .tox-pop.tox-pop--left::before,\n.tox .tox-pop.tox-pop--left::after {\n left: 0;\n top: calc(50% - 1px);\n transform: translateY(-50%);\n}\n.tox .tox-pop.tox-pop--left::after {\n border-color: transparent #fafafa transparent transparent;\n border-width: 8px;\n margin-left: -15px;\n}\n.tox .tox-pop.tox-pop--left::before {\n border-color: transparent #7e7e7e transparent transparent;\n border-width: 10px;\n margin-left: -19px;\n}\n.tox .tox-pop.tox-pop--right::before,\n.tox .tox-pop.tox-pop--right::after {\n left: 100%;\n top: calc(50% + 1px);\n transform: translateY(-50%);\n}\n.tox .tox-pop.tox-pop--right::after {\n border-color: transparent transparent transparent #fafafa;\n border-width: 8px;\n margin-left: -1px;\n}\n.tox .tox-pop.tox-pop--right::before {\n border-color: transparent transparent transparent #7e7e7e;\n border-width: 10px;\n margin-left: -1px;\n}\n.tox .tox-pop.tox-pop--align-left::before,\n.tox .tox-pop.tox-pop--align-left::after {\n left: 20px;\n}\n.tox .tox-pop.tox-pop--align-right::before,\n.tox .tox-pop.tox-pop--align-right::after {\n left: calc(100% - 20px);\n}\n.tox .tox-sidebar-wrap {\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n -ms-flex-preferred-size: 0;\n min-height: 0;\n}\n.tox .tox-sidebar {\n background-color: #fafafa;\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n}\n.tox .tox-sidebar__slider {\n display: flex;\n overflow: hidden;\n}\n.tox .tox-sidebar__pane-container {\n display: flex;\n}\n.tox .tox-sidebar__pane {\n display: flex;\n}\n.tox .tox-sidebar--sliding-closed {\n opacity: 0;\n}\n.tox .tox-sidebar--sliding-open {\n opacity: 1;\n}\n.tox .tox-sidebar--sliding-growing,\n.tox .tox-sidebar--sliding-shrinking {\n transition: width 0.5s ease, opacity 0.5s ease;\n}\n.tox .tox-selector {\n background-color: #4099ff;\n border-color: #4099ff;\n border-style: solid;\n border-width: 1px;\n box-sizing: border-box;\n display: inline-block;\n height: 10px;\n position: absolute;\n width: 10px;\n}\n.tox.tox-platform-touch .tox-selector {\n height: 12px;\n width: 12px;\n}\n.tox .tox-slider {\n align-items: center;\n display: flex;\n flex: 1;\n -ms-flex-preferred-size: auto;\n height: 24px;\n justify-content: center;\n position: relative;\n}\n.tox .tox-slider__rail {\n background-color: transparent;\n border: 1px solid #7e7e7e;\n border-radius: 0px;\n height: 10px;\n min-width: 120px;\n width: 100%;\n}\n.tox .tox-slider__handle {\n background-color: #3e4994;\n border: 2px solid #2f3770;\n border-radius: 0px;\n box-shadow: none;\n height: 24px;\n left: 50%;\n position: absolute;\n top: 50%;\n transform: translateX(-50%) translateY(-50%);\n width: 14px;\n}\n.tox .tox-source-code {\n overflow: auto;\n}\n.tox .tox-spinner {\n display: flex;\n}\n.tox .tox-spinner > div {\n animation: tam-bouncing-dots 1.5s ease-in-out 0s infinite both;\n background-color: ;\n border-radius: 100%;\n height: 8px;\n width: 8px;\n}\n.tox .tox-spinner > div:nth-child(1) {\n animation-delay: -0.32s;\n}\n.tox .tox-spinner > div:nth-child(2) {\n animation-delay: -0.16s;\n}\n@keyframes tam-bouncing-dots {\n 0%, 80%, 100% {\n transform: scale(0);\n }\n\n 40% {\n transform: scale(1);\n }\n}\n.tox:not([dir=rtl]) .tox-spinner > div:not(:first-child) {\n margin-left: 4px;\n}\n.tox[dir=rtl] .tox-spinner > div:not(:first-child) {\n margin-right: 4px;\n}\n.tox .tox-statusbar {\n align-items: center;\n background-color: #fafafa;\n border-top: 1px solid #7e7e7e;\n color: ;\n display: flex;\n flex: 0 0 auto;\n font-size: 12px;\n font-weight: normal;\n height: 2.5em;\n overflow: hidden;\n padding: 0 8px;\n position: relative;\n text-transform: uppercase;\n}\n.tox .tox-statusbar__text-container {\n display: flex;\n flex: 1 1 auto;\n justify-content: flex-end;\n overflow: hidden;\n}\n.tox .tox-statusbar__right-container {\n height: 16px;\n}\n.tox .tox-statusbar__path {\n display: flex;\n flex: 1 1 auto;\n margin-right: auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.tox .tox-statusbar__path > * {\n display: inline;\n white-space: nowrap;\n}\n.tox .tox-statusbar__wordcount {\n flex: 0 0 auto;\n margin-left: 1ch;\n}\n.tox .tox-statusbar a,\n.tox .tox-statusbar__path-item,\n.tox .tox-statusbar__wordcount {\n color: ;\n text-decoration: none;\n}\n.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]) {\n cursor: pointer;\n text-decoration: underline;\n}\n.tox .tox-statusbar__resize-handle {\n align-items: flex-end;\n align-self: stretch;\n cursor: nwse-resize;\n display: flex;\n flex: 0 0 auto;\n justify-content: flex-end;\n margin-left: auto;\n margin-right: -8px;\n padding-left: 1ch;\n}\n.tox .tox-statusbar__resize-handle svg {\n display: block;\n fill: ;\n}\n.tox .tox-statusbar__resize-handle:focus svg {\n background-color: #dee0e2;\n border-radius: 1px;\n box-shadow: 0 0 0 2px #dee0e2;\n}\n.tox:not([dir=rtl]) .tox-statusbar__path > * {\n margin-right: 4px;\n}\n.tox:not([dir=rtl]) .tox-statusbar__branding {\n margin-left: 1ch;\n}\n.tox[dir=rtl] .tox-statusbar {\n flex-direction: row-reverse;\n}\n.tox[dir=rtl] .tox-statusbar__path > * {\n margin-left: 4px;\n}\n.tox .tox-throbber {\n z-index: 1299;\n}\n.tox .tox-throbber__busy-spinner {\n align-items: center;\n background-color: rgba(250, 250, 250, 0.6);\n bottom: 0;\n display: flex;\n justify-content: center;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n}\n.tox .tox-tbtn {\n align-items: center;\n background: transparent;\n border: 0;\n box-shadow: none;\n color: #000;\n display: flex;\n flex: 0 0 auto;\n font-style: normal;\n font-weight: normal;\n height: 34px;\n justify-content: center;\n margin: 2px 0 3px 0;\n outline: none;\n overflow: hidden;\n padding: 0;\n text-transform: none;\n width: 34px;\n}\n.tox .tox-tbtn svg {\n display: block;\n fill: #000;\n}\n.tox .tox-tbtn.tox-tbtn-more {\n padding-left: 5px;\n padding-right: 5px;\n width: inherit;\n}\n.tox .tox-tbtn:focus {\n background: #dee0e2;\n border: 0;\n box-shadow: none;\n}\n.tox .tox-tbtn:hover {\n background: #dee0e2;\n border: 0;\n box-shadow: none;\n color: #000;\n}\n.tox .tox-tbtn:hover svg {\n fill: #000;\n}\n.tox .tox-tbtn:active {\n background: #dee0e2;\n border: 0;\n box-shadow: none;\n color: #000;\n}\n.tox .tox-tbtn:active svg {\n fill: #000;\n}\n.tox .tox-tbtn--disabled,\n.tox .tox-tbtn--disabled:hover,\n.tox .tox-tbtn:disabled,\n.tox .tox-tbtn:disabled:hover {\n background: transparent;\n border: 0;\n box-shadow: none;\n color: rgba(34, 47, 62, 0.5);\n cursor: not-allowed;\n}\n.tox .tox-tbtn--disabled svg,\n.tox .tox-tbtn--disabled:hover svg,\n.tox .tox-tbtn:disabled svg,\n.tox .tox-tbtn:disabled:hover svg {\n /* stylelint-disable-line no-descending-specificity */\n fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-tbtn--enabled,\n.tox .tox-tbtn--enabled:hover {\n background: #dee0e2;\n border: 0;\n box-shadow: none;\n color: #000;\n}\n.tox .tox-tbtn--enabled > *,\n.tox .tox-tbtn--enabled:hover > * {\n transform: none;\n}\n.tox .tox-tbtn--enabled svg,\n.tox .tox-tbtn--enabled:hover svg {\n /* stylelint-disable-line no-descending-specificity */\n fill: #000;\n}\n.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) {\n color: #000;\n}\n.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg {\n fill: #000;\n}\n.tox .tox-tbtn:active > * {\n transform: none;\n}\n.tox .tox-tbtn--md {\n height: 51px;\n width: 51px;\n}\n.tox .tox-tbtn--lg {\n flex-direction: column;\n height: 68px;\n width: 68px;\n}\n.tox .tox-tbtn--return {\n -ms-grid-row-align: stretch;\n align-self: stretch;\n height: unset;\n width: 16px;\n}\n.tox .tox-tbtn--labeled {\n padding: 0 4px;\n width: unset;\n}\n.tox .tox-tbtn__vlabel {\n display: block;\n font-size: 10px;\n font-weight: normal;\n letter-spacing: -0.025em;\n margin-bottom: 4px;\n white-space: nowrap;\n}\n.tox .tox-tbtn--select {\n margin: 2px 0 3px 0;\n padding: 0 4px;\n width: auto;\n}\n.tox .tox-tbtn__select-label {\n cursor: default;\n font-weight: normal;\n margin: 0 4px;\n}\n.tox .tox-tbtn__select-chevron {\n align-items: center;\n display: flex;\n justify-content: center;\n width: 16px;\n}\n.tox .tox-tbtn__select-chevron svg {\n fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-tbtn--bespoke .tox-tbtn__select-label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 7em;\n}\n.tox .tox-split-button {\n border: 0;\n border-radius: 3px;\n box-sizing: border-box;\n display: flex;\n margin: 2px 0 3px 0;\n overflow: hidden;\n}\n.tox .tox-split-button:hover {\n box-shadow: 0 0 0 1px #dee0e2 inset;\n}\n.tox .tox-split-button:focus {\n background: #dee0e2;\n box-shadow: none;\n color: #000;\n}\n.tox .tox-split-button > * {\n border-radius: 0;\n}\n.tox .tox-split-button__chevron {\n width: 16px;\n}\n.tox .tox-split-button__chevron svg {\n fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-split-button .tox-tbtn {\n margin: 0;\n}\n.tox.tox-platform-touch .tox-split-button .tox-tbtn:first-child {\n width: 30px;\n}\n.tox.tox-platform-touch .tox-split-button__chevron {\n width: 20px;\n}\n.tox .tox-split-button.tox-tbtn--disabled:hover,\n.tox .tox-split-button.tox-tbtn--disabled:focus,\n.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,\n.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus {\n background: transparent;\n box-shadow: none;\n color: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-toolbar-overlord {\n background-color: #fafafa;\n}\n.tox .tox-toolbar,\n.tox .tox-toolbar__primary,\n.tox .tox-toolbar__overflow {\n border-top: 1px solid #ddd;\n background-color: #fafafa;\n display: flex;\n flex: 0 0 auto;\n flex-shrink: 0;\n flex-wrap: wrap;\n padding: 0 0;\n}\n.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed {\n height: 0;\n opacity: 0;\n padding-bottom: 0;\n padding-top: 0;\n visibility: hidden;\n}\n.tox .tox-toolbar__overflow--growing {\n transition: height 0.3s ease, opacity 0.2s linear 0.1s;\n}\n.tox .tox-toolbar__overflow--shrinking {\n transition: opacity 0.3s ease, height 0.2s linear 0.1s, visibility 0s linear 0.3s;\n}\n.tox .tox-menubar + .tox-toolbar,\n.tox .tox-menubar + .tox-toolbar-overlord .tox-toolbar__primary {\n /* border-top: 1px solid #7e7e7e; */\n margin-top: -1px;\n}\n.tox .tox-toolbar--scrolling {\n flex-wrap: nowrap;\n overflow-x: auto;\n}\n.tox .tox-pop .tox-toolbar {\n border-width: 0;\n}\n.tox .tox-toolbar--no-divider {\n background-image: none;\n}\n.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar:first-child,\n.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar-overlord:first-child .tox-toolbar__primary {\n border-top: 1px solid #7e7e7e;\n}\n.tox.tox-tinymce-aux .tox-toolbar__overflow {\n background-color: #fafafa;\n border: 1px solid #7e7e7e;\n border-radius: 0px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n}\n.tox .tox-toolbar__group {\n align-items: center;\n display: flex;\n flex-wrap: wrap;\n margin: 0 0;\n padding: 0 4px 0 4px;\n}\n.tox .tox-toolbar__group--pull-right {\n margin-left: auto;\n}\n.tox .tox-toolbar--scrolling .tox-toolbar__group {\n flex-shrink: 0;\n flex-wrap: nowrap;\n}\n.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type) {\n border-right: 1px solid #ddd;\n}\n.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type) {\n border-left: 1px solid #ddd;\n}\n.tox .tox-tooltip {\n display: inline-block;\n padding: 8px;\n position: relative;\n}\n.tox .tox-tooltip__body {\n background-color: #000;\n border-radius: 0px;\n box-shadow: 0 2px 4px rgba(34, 47, 62, 0.3);\n color: rgba(255, 255, 255, 0.75);\n font-style: normal;\n font-weight: normal;\n padding: 4px 8px;\n text-transform: none;\n}\n.tox .tox-tooltip__arrow {\n position: absolute;\n}\n.tox .tox-tooltip--down .tox-tooltip__arrow {\n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n border-top: 8px solid #000;\n bottom: 0;\n left: 50%;\n position: absolute;\n transform: translateX(-50%);\n}\n.tox .tox-tooltip--up .tox-tooltip__arrow {\n border-bottom: 8px solid #000;\n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n left: 50%;\n position: absolute;\n top: 0;\n transform: translateX(-50%);\n}\n.tox .tox-tooltip--right .tox-tooltip__arrow {\n border-bottom: 8px solid transparent;\n border-left: 8px solid #000;\n border-top: 8px solid transparent;\n position: absolute;\n right: 0;\n top: 50%;\n transform: translateY(-50%);\n}\n.tox .tox-tooltip--left .tox-tooltip__arrow {\n border-bottom: 8px solid transparent;\n border-right: 8px solid #000;\n border-top: 8px solid transparent;\n left: 0;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n}\n.tox .tox-well {\n border: 1px solid #7e7e7e;\n border-radius: 0px;\n padding: 8px;\n width: 100%;\n}\n.tox .tox-well > *:first-child {\n margin-top: 0;\n}\n.tox .tox-well > *:last-child {\n margin-bottom: 0;\n}\n.tox .tox-well > *:only-child {\n margin: 0;\n}\n.tox .tox-custom-editor {\n border: 1px solid #7e7e7e;\n border-radius: 0px;\n display: flex;\n flex: 1;\n position: relative;\n}\n/* stylelint-disable */\n.tox {\n /* stylelint-enable */\n}\n.tox .tox-dialog-loading::before {\n background-color: rgba(0, 0, 0, 0.5);\n content: \"\";\n height: 100%;\n position: absolute;\n width: 100%;\n z-index: 1000;\n}\n.tox .tox-tab {\n cursor: pointer;\n}\n.tox .tox-dialog__content-js {\n display: flex;\n flex: 1;\n -ms-flex-preferred-size: auto;\n}\n.tox .tox-dialog__body-content .tox-collection {\n display: flex;\n flex: 1;\n -ms-flex-preferred-size: auto;\n}\n.tox .tox-image-tools-edit-panel {\n height: 60px;\n}\n.tox .tox-image-tools__sidebar {\n height: 60px;\n}\n.tox-promotion {\n display: none;\n}\n"; (require("browserify-css").createStyle(css, { "href": "skins/ui/pulsar/skin.css" }, { "insertAt": "bottom" })); module.exports = css; + + +},{"browserify-css":1}],24:[function(require,module,exports){ 'use strict'; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); @@ -88862,7 +88862,7 @@ var PulsarTinymceComponent = function () { require('tinymce/models/dom'); /* Import a skin (can be a custom skin instead of the default) */ - require('tinymce/skins/ui/oxide/skin.css'); + require('../skins/ui/pulsar/skin.css'); /* Import plugins - include the relevant plugin in the 'plugins' option. */ require('tinymce/plugins/advlist'); @@ -88906,7 +88906,7 @@ var PulsarTinymceComponent = function () { module.exports = PulsarTinymceComponent; -},{"tinymce/icons/default":4,"tinymce/models/dom":5,"tinymce/plugins/advlist":7,"tinymce/plugins/code":9,"tinymce/plugins/emoticons":11,"tinymce/plugins/emoticons/js/emojis":12,"tinymce/plugins/link":14,"tinymce/plugins/lists":16,"tinymce/plugins/table":18,"tinymce/skins/ui/oxide/skin.css":20,"tinymce/themes/silver":21,"tinymce/tinymce":23}],25:[function(require,module,exports){ +},{"../skins/ui/pulsar/skin.css":23,"tinymce/icons/default":4,"tinymce/models/dom":5,"tinymce/plugins/advlist":7,"tinymce/plugins/code":9,"tinymce/plugins/emoticons":11,"tinymce/plugins/emoticons/js/emojis":12,"tinymce/plugins/link":14,"tinymce/plugins/lists":16,"tinymce/plugins/table":18,"tinymce/themes/silver":20,"tinymce/tinymce":22}],25:[function(require,module,exports){ 'use strict'; window.jQuery = window.$ = require('jquery'); @@ -88920,4 +88920,4 @@ module.exports = { },{"./PulsarTinymceComponent":24,"jquery":2}]},{},[25])(25) }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1jc3MvYnJvd3Nlci5qcyIsIi9Vc2Vycy9wYXVsc3RhbnRvbi9Mb2NhbGhvc3QvcHVsc2FyLXBvbHlyZXBvL2NvbXBvbmVudHMvcHVsc2FyLXRpbnltY2Uvbm9kZV9tb2R1bGVzL2pxdWVyeS9kaXN0L2pxdWVyeS5qcyIsIi9Vc2Vycy9wYXVsc3RhbnRvbi9Mb2NhbGhvc3QvcHVsc2FyLXBvbHlyZXBvL2NvbXBvbmVudHMvcHVsc2FyLXRpbnltY2Uvbm9kZV9tb2R1bGVzL3RpbnltY2UvaWNvbnMvZGVmYXVsdC9pY29ucy5qcyIsIm5vZGVfbW9kdWxlcy90aW55bWNlL2ljb25zL2RlZmF1bHQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvdGlueW1jZS9tb2RlbHMvZG9tL2luZGV4LmpzIiwiL1VzZXJzL3BhdWxzdGFudG9uL0xvY2FsaG9zdC9wdWxzYXItcG9seXJlcG8vY29tcG9uZW50cy9wdWxzYXItdGlueW1jZS9ub2RlX21vZHVsZXMvdGlueW1jZS9tb2RlbHMvZG9tL21vZGVsLmpzIiwibm9kZV9tb2R1bGVzL3RpbnltY2UvcGx1Z2lucy9hZHZsaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3RpbnltY2UvcGx1Z2lucy9hZHZsaXN0L3BsdWdpbi5qcyIsIm5vZGVfbW9kdWxlcy90aW55bWNlL3BsdWdpbnMvY29kZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy90aW55bWNlL3BsdWdpbnMvY29kZS9wbHVnaW4uanMiLCJub2RlX21vZHVsZXMvdGlueW1jZS9wbHVnaW5zL2Vtb3RpY29ucy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy90aW55bWNlL3BsdWdpbnMvZW1vdGljb25zL2pzL2Vtb2ppcy5qcyIsIm5vZGVfbW9kdWxlcy90aW55bWNlL3BsdWdpbnMvZW1vdGljb25zL3BsdWdpbi5qcyIsIm5vZGVfbW9kdWxlcy90aW55bWNlL3BsdWdpbnMvbGluay9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy90aW55bWNlL3BsdWdpbnMvbGluay9wbHVnaW4uanMiLCJub2RlX21vZHVsZXMvdGlueW1jZS9wbHVnaW5zL2xpc3RzL2luZGV4LmpzIiwiL1VzZXJzL3BhdWxzdGFudG9uL0xvY2FsaG9zdC9wdWxzYXItcG9seXJlcG8vY29tcG9uZW50cy9wdWxzYXItdGlueW1jZS9ub2RlX21vZHVsZXMvdGlueW1jZS9wbHVnaW5zL2xpc3RzL3BsdWdpbi5qcyIsIm5vZGVfbW9kdWxlcy90aW55bWNlL3BsdWdpbnMvdGFibGUvaW5kZXguanMiLCIvVXNlcnMvcGF1bHN0YW50b24vTG9jYWxob3N0L3B1bHNhci1wb2x5cmVwby9jb21wb25lbnRzL3B1bHNhci10aW55bWNlL25vZGVfbW9kdWxlcy90aW55bWNlL3BsdWdpbnMvdGFibGUvcGx1Z2luLmpzIiwiL1VzZXJzL3BhdWxzdGFudG9uL0xvY2FsaG9zdC9wdWxzYXItcG9seXJlcG8vY29tcG9uZW50cy9wdWxzYXItdGlueW1jZS9ub2RlX21vZHVsZXMvdGlueW1jZS9za2lucy91aS9veGlkZS9za2luLmNzcyIsIm5vZGVfbW9kdWxlcy90aW55bWNlL3RoZW1lcy9zaWx2ZXIvaW5kZXguanMiLCIvVXNlcnMvcGF1bHN0YW50b24vTG9jYWxob3N0L3B1bHNhci1wb2x5cmVwby9jb21wb25lbnRzL3B1bHNhci10aW55bWNlL25vZGVfbW9kdWxlcy90aW55bWNlL3RoZW1lcy9zaWx2ZXIvdGhlbWUuanMiLCIvVXNlcnMvcGF1bHN0YW50b24vTG9jYWxob3N0L3B1bHNhci1wb2x5cmVwby9jb21wb25lbnRzL3B1bHNhci10aW55bWNlL25vZGVfbW9kdWxlcy90aW55bWNlL3RpbnltY2UuanMiLCJzcmMvUHVsc2FyVGlueW1jZUNvbXBvbmVudC5qcyIsInNyYy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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LElBQUksQ0FBQztHQUNwQjtFQUNELE9BQU8sSUFBSSxLQUFLLEVBQUUsV0FBVztHQUM1QixJQUFJLEtBQUs7SUFDUixPQUFPLFFBQVEsSUFBSSxFQUFFLElBQUksRUFBRTtJQUMzQixRQUFRLElBQUksRUFBRSxJQUFJLEdBQUcsT0FBTyxFQUFFO0lBQzlCLFFBQVEsSUFBSSxFQUFFLElBQUksR0FBRyxZQUFZLEVBQUU7SUFDbkMsU0FBUyxNQUFNLE9BQU87SUFDdEIsU0FBUyxLQUFLLEdBQUcsS0FBSyxPQUFPLEdBQUcsQ0FBQyxDQUFDOzs7R0FHbkMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDOzs7R0FHbkIsTUFBTSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQzs7R0FFL0IsS0FBSyxLQUFLLElBQUksS0FBSyxLQUFLLEdBQUc7SUFDMUIsS0FBSyxLQUFLLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDOUI7OztHQUdELE1BQU0sUUFBUSxNQUFNLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSTtJQUN2QyxLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxLQUFLLElBQUksSUFBSSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sS0FBSyxJQUFJLEdBQUc7S0FDdEUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztLQUNsQyxNQUFNLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7S0FDMUI7SUFDRDs7O0dBR0QsTUFBTSxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUcsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHO0lBQzFDLEtBQUssS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxHQUFHO0tBQzlDLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7S0FDbkM7SUFDRDs7O0dBR0QsT0FBTyxJQUFJLE9BQU8s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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25RQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25sQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUMsRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUMzQyxJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUU7UUFDckIsSUFBSSxNQUFNLENBQUM7UUFDWCxPQUFPLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztPQUNqQztNQUNELE1BQU0sSUFBSSxDQUFDLEtBQUssTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDOUQsSUFBSSxDQUFDLEtBQUssTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDNUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUM7TUFDL0IsSUFBSSxNQUFNLENBQUM7TUFDWCxPQUFPLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDM0UsQ0FBQzs7SUFFRixNQUFNLFdBQVcsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUMsTUFBTSxXQUFXLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sV0FBVyxTQUFTLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU07TUFDNUcs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QXFDLENBQUMsSUFBQSxNQUFBLE9BQTFDLEVBQTZEO2dCQUN6RCxNQUFNLElBQUksS0FBSixDQUFVLGdEQUFWLENBQU4sQ0FBQTthQUNIOzs7WUFHRCxPQUFBLEtBQUEsQ0FBYTtnQkFDVCxVQUFVLHFCQUREOztnQkFHVCxTQUFTLHlDQUhBO2dCQUlULFNBQVMsZ0RBSkE7Z0JBS1QsTUFBTSxLQUxHO2dCQU1ULGFBQWEsS0FOSjtnQkFPVCxlQUFlLElBQUEsaUJBQUEsU0FBQSxFQUFBLEdBQW1DLElBQW5DLEdBQTBDLElBQUEsV0FBQSxTQUFBLEVBQUE7YUFQN0QsQ0FBQSxDQUFBO1NBU0g7Ozs7OztBQUlMLE1BQUEsUUFBQSxHQUFpQixzQkFBakIsQ0FBQTs7Ozs7O0FDdkRBLE9BQU8sTUFBUCxHQUFnQixPQUFPLENBQVAsR0FBVyxRQUFRLFFBQVIsQ0FBM0I7O0FBRUEsSUFBSSx5QkFBeUIsUUFBUSwwQkFBUixDQUE3Qjs7QUFFQSxPQUFPLE9BQVAsR0FBaUI7QUFDYjtBQURhLENBQWpCIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiJ3VzZSBzdHJpY3QnO1xuLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYnJvd3NlciBmaWVsZCwgY2hlY2sgb3V0IHRoZSBicm93c2VyIGZpZWxkIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icm93c2VyaWZ5LWhhbmRib29rI2Jyb3dzZXItZmllbGQuXG5cbnZhciBzdHlsZUVsZW1lbnRzSW5zZXJ0ZWRBdFRvcCA9IFtdO1xuXG52YXIgaW5zZXJ0U3R5bGVFbGVtZW50ID0gZnVuY3Rpb24oc3R5bGVFbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gICAgdmFyIGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wID0gc3R5bGVFbGVtZW50c0luc2VydGVkQXRUb3Bbc3R5bGVFbGVtZW50c0luc2VydGVkQXRUb3AubGVuZ3RoIC0gMV07XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBvcHRpb25zLmluc2VydEF0ID0gb3B0aW9ucy5pbnNlcnRBdCB8fCAnYm90dG9tJztcblxuICAgIGlmIChvcHRpb25zLmluc2VydEF0ID09PSAndG9wJykge1xuICAgICAgICBpZiAoIWxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wKSB7XG4gICAgICAgICAgICBoZWFkLmluc2VydEJlZm9yZShzdHlsZUVsZW1lbnQsIGhlYWQuZmlyc3RDaGlsZCk7XG4gICAgICAgIH0gZWxzZSBpZiAobGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKHN0eWxlRWxlbWVudCwgbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AubmV4dFNpYmxpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHN0eWxlRWxlbWVudHNJbnNlcnRlZEF0VG9wLnB1c2goc3R5bGVFbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaW5zZXJ0QXQgPT09ICdib3R0b20nKSB7XG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciBcXCdpbnNlcnRBdFxcJy4gTXVzdCBiZSBcXCd0b3BcXCcgb3IgXFwnYm90dG9tXFwnLicpO1xuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8vIENyZWF0ZSBhIDxsaW5rPiB0YWcgd2l0aCBvcHRpb25hbCBkYXRhIGF0dHJpYnV0ZXNcbiAgICBjcmVhdGVMaW5rOiBmdW5jdGlvbihocmVmLCBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIHZhciBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICAgICAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcblxuICAgICAgICBsaW5rLmhyZWYgPSBocmVmO1xuICAgICAgICBsaW5rLnJlbCA9ICdzdHlsZXNoZWV0JztcblxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gYXR0cmlidXRlcykge1xuICAgICAgICAgICAgaWYgKCAhIGF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHZhbHVlID0gYXR0cmlidXRlc1trZXldO1xuICAgICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2RhdGEtJyArIGtleSwgdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICB9LFxuICAgIC8vIENyZWF0ZSBhIDxzdHlsZT4gdGFnIHdpdGggb3B0aW9uYWwgZGF0YSBhdHRyaWJ1dGVzXG4gICAgY3JlYXRlU3R5bGU6IGZ1bmN0aW9uKGNzc1RleHQsIGF0dHJpYnV0ZXMsIGV4dHJhT3B0aW9ucykge1xuICAgICAgICBleHRyYU9wdGlvbnMgPSBleHRyYU9wdGlvbnMgfHwge307XG5cbiAgICAgICAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIGlmICggISBhdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNba2V5XTtcbiAgICAgICAgICAgIHN0eWxlLnNldEF0dHJpYnV0ZSgnZGF0YS0nICsga2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuc2hlZXQpIHsgLy8gZm9yIGpzZG9tIGFuZCBJRTkrXG4gICAgICAgICAgICBzdHlsZS5pbm5lckhUTUwgPSBjc3NUZXh0O1xuICAgICAgICAgICAgc3R5bGUuc2hlZXQuY3NzVGV4dCA9IGNzc1RleHQ7XG4gICAgICAgICAgICBpbnNlcnRTdHlsZUVsZW1lbnQoc3R5bGUsIHsgaW5zZXJ0QXQ6IGV4dHJhT3B0aW9ucy5pbnNlcnRBdCB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7IC8vIGZvciBJRTggYW5kIGJlbG93XG4gICAgICAgICAgICBpbnNlcnRTdHlsZUVsZW1lbnQoc3R5bGUsIHsgaW5zZXJ0QXQ6IGV4dHJhT3B0aW9ucy5pbnNlcnRBdCB9KTtcbiAgICAgICAgICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzc1RleHQ7XG4gICAgICAgIH0gZWxzZSB7IC8vIGZvciBDaHJvbWUsIEZpcmVmb3gsIGFuZCBTYWZhcmlcbiAgICAgICAgICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzc1RleHQpKTtcbiAgICAgICAgICAgIGluc2VydFN0eWxlRWxlbWVudChzdHlsZSwgeyBpbnNlcnRBdDogZXh0cmFPcHRpb25zLmluc2VydEF0IH0pO1xuICAgICAgICB9XG4gICAgfVxufTtcbiIsIi8qIVxuICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2My43LjFcbiAqIGh0dHBzOi8vanF1ZXJ5LmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IDIwMjMtMDgtMjhUMTM6MzdaXG4gKi9cbiggZnVuY3Rpb24oIGdsb2JhbCwgZmFjdG9yeSApIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRpZiAoIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gRm9yIENvbW1vbkpTIGFuZCBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB3aGVyZSBhIHByb3BlciBgd2luZG93YFxuXHRcdC8vIGlzIHByZXNlbnQsIGV4ZWN1dGUgdGhlIGZhY3RvcnkgYW5kIGdldCBqUXVlcnkuXG5cdFx0Ly8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEgYHdpbmRvd2Agd2l0aCBhIGBkb2N1bWVudGBcblx0XHQvLyAoc3VjaCBhcyBOb2RlLmpzKSwgZXhwb3NlIGEgZmFjdG9yeSBhcyBtb2R1bGUuZXhwb3J0cy5cblx0XHQvLyBUaGlzIGFjY2VudHVhdGVzIHRoZSBuZWVkIGZvciB0aGUgY3JlYXRpb24gb2YgYSByZWFsIGB3aW5kb3dgLlxuXHRcdC8vIGUuZy4gdmFyIGpRdWVyeSA9IHJlcXVpcmUoXCJqcXVlcnlcIikod2luZG93KTtcblx0XHQvLyBTZWUgdGlja2V0IHRyYWMtMTQ1NDkgZm9yIG1vcmUgaW5mby5cblx0XHRtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/XG5cdFx0XHRmYWN0b3J5KCBnbG9iYWwsIHRydWUgKSA6XG5cdFx0XHRmdW5jdGlvbiggdyApIHtcblx0XHRcdFx0aWYgKCAhdy5kb2N1bWVudCApIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoIFwialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkoIHcgKTtcblx0XHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0ZmFjdG9yeSggZ2xvYmFsICk7XG5cdH1cblxuLy8gUGFzcyB0aGlzIGlmIHdpbmRvdyBpcyBub3QgZGVmaW5lZCB5ZXRcbn0gKSggdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uKCB3aW5kb3csIG5vR2xvYmFsICkge1xuXG4vLyBFZGdlIDw9IDEyIC0gMTMrLCBGaXJlZm94IDw9MTggLSA0NSssIElFIDEwIC0gMTEsIFNhZmFyaSA1LjEgLSA5KywgaU9TIDYgLSA5LjFcbi8vIHRocm93IGV4Y2VwdGlvbnMgd2hlbiBub24tc3RyaWN0IGNvZGUgKGUuZy4sIEFTUC5ORVQgNC41KSBhY2Nlc3NlcyBzdHJpY3QgbW9kZVxuLy8gYXJndW1lbnRzLmNhbGxlZS5jYWxsZXIgKHRyYWMtMTMzMzUpLiBCdXQgYXMgb2YgalF1ZXJ5IDMuMCAoMjAxNiksIHN0cmljdCBtb2RlIHNob3VsZCBiZSBjb21tb25cbi8vIGVub3VnaCB0aGF0IGFsbCBzdWNoIGF0dGVtcHRzIGFyZSBndWFyZGVkIGluIGEgdHJ5IGJsb2NrLlxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBhcnIgPSBbXTtcblxudmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuXG52YXIgc2xpY2UgPSBhcnIuc2xpY2U7XG5cbnZhciBmbGF0ID0gYXJyLmZsYXQgPyBmdW5jdGlvbiggYXJyYXkgKSB7XG5cdHJldHVybiBhcnIuZmxhdC5jYWxsKCBhcnJheSApO1xufSA6IGZ1bmN0aW9uKCBhcnJheSApIHtcblx0cmV0dXJuIGFyci5jb25jYXQuYXBwbHkoIFtdLCBhcnJheSApO1xufTtcblxuXG52YXIgcHVzaCA9IGFyci5wdXNoO1xuXG52YXIgaW5kZXhPZiA9IGFyci5pbmRleE9mO1xuXG52YXIgY2xhc3MydHlwZSA9IHt9O1xuXG52YXIgdG9TdHJpbmcgPSBjbGFzczJ0eXBlLnRvU3RyaW5nO1xuXG52YXIgaGFzT3duID0gY2xhc3MydHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGZuVG9TdHJpbmcgPSBoYXNPd24udG9TdHJpbmc7XG5cbnZhciBPYmplY3RGdW5jdGlvblN0cmluZyA9IGZuVG9TdHJpbmcuY2FsbCggT2JqZWN0ICk7XG5cbnZhciBzdXBwb3J0ID0ge307XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gaXNGdW5jdGlvbiggb2JqICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NTcsIEZpcmVmb3ggPD01MlxuXHRcdC8vIEluIHNvbWUgYnJvd3NlcnMsIHR5cGVvZiByZXR1cm5zIFwiZnVuY3Rpb25cIiBmb3IgSFRNTCA8b2JqZWN0PiBlbGVtZW50c1xuXHRcdC8vIChpLmUuLCBgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib2JqZWN0XCIgKSA9PT0gXCJmdW5jdGlvblwiYCkuXG5cdFx0Ly8gV2UgZG9uJ3Qgd2FudCB0byBjbGFzc2lmeSAqYW55KiBET00gbm9kZSBhcyBhIGZ1bmN0aW9uLlxuXHRcdC8vIFN1cHBvcnQ6IFF0V2ViIDw9My44LjUsIFdlYktpdCA8PTUzNC4zNCwgd2todG1sdG9wZGYgdG9vbCA8PTAuMTIuNVxuXHRcdC8vIFBsdXMgZm9yIG9sZCBXZWJLaXQsIHR5cGVvZiByZXR1cm5zIFwiZnVuY3Rpb25cIiBmb3IgSFRNTCBjb2xsZWN0aW9uc1xuXHRcdC8vIChlLmcuLCBgdHlwZW9mIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZGl2XCIpID09PSBcImZ1bmN0aW9uXCJgKS4gKGdoLTQ3NTYpXG5cdFx0cmV0dXJuIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2Ygb2JqLm5vZGVUeXBlICE9PSBcIm51bWJlclwiICYmXG5cdFx0XHR0eXBlb2Ygb2JqLml0ZW0gIT09IFwiZnVuY3Rpb25cIjtcblx0fTtcblxuXG52YXIgaXNXaW5kb3cgPSBmdW5jdGlvbiBpc1dpbmRvdyggb2JqICkge1xuXHRcdHJldHVybiBvYmogIT0gbnVsbCAmJiBvYmogPT09IG9iai53aW5kb3c7XG5cdH07XG5cblxudmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuXG5cblxuXHR2YXIgcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyA9IHtcblx0XHR0eXBlOiB0cnVlLFxuXHRcdHNyYzogdHJ1ZSxcblx0XHRub25jZTogdHJ1ZSxcblx0XHRub01vZHVsZTogdHJ1ZVxuXHR9O1xuXG5cdGZ1bmN0aW9uIERPTUV2YWwoIGNvZGUsIG5vZGUsIGRvYyApIHtcblx0XHRkb2MgPSBkb2MgfHwgZG9jdW1lbnQ7XG5cblx0XHR2YXIgaSwgdmFsLFxuXHRcdFx0c2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoIFwic2NyaXB0XCIgKTtcblxuXHRcdHNjcmlwdC50ZXh0ID0gY29kZTtcblx0XHRpZiAoIG5vZGUgKSB7XG5cdFx0XHRmb3IgKCBpIGluIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA2NCssIEVkZ2UgMTgrXG5cdFx0XHRcdC8vIFNvbWUgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCB0aGUgXCJub25jZVwiIHByb3BlcnR5IG9uIHNjcmlwdHMuXG5cdFx0XHRcdC8vIE9uIHRoZSBvdGhlciBoYW5kLCBqdXN0IHVzaW5nIGBnZXRBdHRyaWJ1dGVgIGlzIG5vdCBlbm91Z2ggYXNcblx0XHRcdFx0Ly8gdGhlIGBub25jZWAgYXR0cmlidXRlIGlzIHJlc2V0IHRvIGFuIGVtcHR5IHN0cmluZyB3aGVuZXZlciBpdFxuXHRcdFx0XHQvLyBiZWNvbWVzIGJyb3dzaW5nLWNvbnRleHQgY29ubmVjdGVkLlxuXHRcdFx0XHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9odG1sL2lzc3Vlcy8yMzY5XG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNub25jZS1hdHRyaWJ1dGVzXG5cdFx0XHRcdC8vIFRoZSBgbm9kZS5nZXRBdHRyaWJ1dGVgIGNoZWNrIHdhcyBhZGRlZCBmb3IgdGhlIHNha2Ugb2Zcblx0XHRcdFx0Ly8gYGpRdWVyeS5nbG9iYWxFdmFsYCBzbyB0aGF0IGl0IGNhbiBmYWtlIGEgbm9uY2UtY29udGFpbmluZyBub2RlXG5cdFx0XHRcdC8vIHZpYSBhbiBvYmplY3QuXG5cdFx0XHRcdHZhbCA9IG5vZGVbIGkgXSB8fCBub2RlLmdldEF0dHJpYnV0ZSAmJiBub2RlLmdldEF0dHJpYnV0ZSggaSApO1xuXHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRzY3JpcHQuc2V0QXR0cmlidXRlKCBpLCB2YWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRkb2MuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0ICkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggc2NyaXB0ICk7XG5cdH1cblxuXG5mdW5jdGlvbiB0b1R5cGUoIG9iaiApIHtcblx0aWYgKCBvYmogPT0gbnVsbCApIHtcblx0XHRyZXR1cm4gb2JqICsgXCJcIjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seSAoZnVuY3Rpb25pc2ggUmVnRXhwKVxuXHRyZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgP1xuXHRcdGNsYXNzMnR5cGVbIHRvU3RyaW5nLmNhbGwoIG9iaiApIF0gfHwgXCJvYmplY3RcIiA6XG5cdFx0dHlwZW9mIG9iajtcbn1cbi8qIGdsb2JhbCBTeW1ib2wgKi9cbi8vIERlZmluaW5nIHRoaXMgZ2xvYmFsIGluIC5lc2xpbnRyYy5qc29uIHdvdWxkIGNyZWF0ZSBhIGRhbmdlciBvZiB1c2luZyB0aGUgZ2xvYmFsXG4vLyB1bmd1YXJkZWQgaW4gYW5vdGhlciBwbGFjZSwgaXQgc2VlbXMgc2FmZXIgdG8gZGVmaW5lIGdsb2JhbCBvbmx5IGZvciB0aGlzIG1vZHVsZVxuXG5cblxudmFyIHZlcnNpb24gPSBcIjMuNy4xXCIsXG5cblx0cmh0bWxTdWZmaXggPSAvSFRNTCQvaSxcblxuXHQvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeVxuXHRqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cblx0XHQvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCdcblx0XHQvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKVxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XG5cdH07XG5cbmpRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7XG5cblx0Ly8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZFxuXHRqcXVlcnk6IHZlcnNpb24sXG5cblx0Y29uc3RydWN0b3I6IGpRdWVyeSxcblxuXHQvLyBUaGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDBcblx0bGVuZ3RoOiAwLFxuXG5cdHRvQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdH0sXG5cblx0Ly8gR2V0IHRoZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldCBPUlxuXHQvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheVxuXHRnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7XG5cblx0XHQvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBpbiBhIGNsZWFuIGFycmF5XG5cdFx0aWYgKCBudW0gPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIGp1c3QgdGhlIG9uZSBlbGVtZW50IGZyb20gdGhlIHNldFxuXHRcdHJldHVybiBudW0gPCAwID8gdGhpc1sgbnVtICsgdGhpcy5sZW5ndGggXSA6IHRoaXNbIG51bSBdO1xuXHR9LFxuXG5cdC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2tcblx0Ly8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpXG5cdHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zICkge1xuXG5cdFx0Ly8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXRcblx0XHR2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7XG5cblx0XHQvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKVxuXHRcdHJldC5wcmV2T2JqZWN0ID0gdGhpcztcblxuXHRcdC8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0XG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHQvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LlxuXHRlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjayApO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCggdGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdHNsaWNlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSApO1xuXHR9LFxuXG5cdGZpcnN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggMCApO1xuXHR9LFxuXG5cdGxhc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAtMSApO1xuXHR9LFxuXG5cdGV2ZW46IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5LmdyZXAoIHRoaXMsIGZ1bmN0aW9uKCBfZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAoIGkgKyAxICkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdG9kZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkuZ3JlcCggdGhpcywgZnVuY3Rpb24oIF9lbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdGVxOiBmdW5jdGlvbiggaSApIHtcblx0XHR2YXIgbGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApO1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBbIHRoaXNbIGogXSBdIDogW10gKTtcblx0fSxcblxuXHRlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpO1xuXHR9LFxuXG5cdC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS5cblx0Ly8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuXG5cdHB1c2g6IHB1c2gsXG5cdHNvcnQ6IGFyci5zb3J0LFxuXHRzcGxpY2U6IGFyci5zcGxpY2Vcbn07XG5cbmpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7XG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSxcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIDAgXSB8fCB7fSxcblx0XHRpID0gMSxcblx0XHRsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuXHRcdGRlZXAgPSBmYWxzZTtcblxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXG5cdGlmICggdHlwZW9mIHRhcmdldCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0ZGVlcCA9IHRhcmdldDtcblxuXHRcdC8vIFNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIGkgXSB8fCB7fTtcblx0XHRpKys7XG5cdH1cblxuXHQvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSlcblx0aWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSBcIm9iamVjdFwiICYmICFpc0Z1bmN0aW9uKCB0YXJnZXQgKSApIHtcblx0XHR0YXJnZXQgPSB7fTtcblx0fVxuXG5cdC8vIEV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZFxuXHRpZiAoIGkgPT09IGxlbmd0aCApIHtcblx0XHR0YXJnZXQgPSB0aGlzO1xuXHRcdGktLTtcblx0fVxuXG5cdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXG5cdFx0Ly8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlc1xuXHRcdGlmICggKCBvcHRpb25zID0gYXJndW1lbnRzWyBpIF0gKSAhPSBudWxsICkge1xuXG5cdFx0XHQvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0XG5cdFx0XHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRcdGNvcHkgPSBvcHRpb25zWyBuYW1lIF07XG5cblx0XHRcdFx0Ly8gUHJldmVudCBPYmplY3QucHJvdG90eXBlIHBvbGx1dGlvblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICggbmFtZSA9PT0gXCJfX3Byb3RvX19cIiB8fCB0YXJnZXQgPT09IGNvcHkgKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXNcblx0XHRcdFx0aWYgKCBkZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29weSApIHx8XG5cdFx0XHRcdFx0KCBjb3B5SXNBcnJheSA9IEFycmF5LmlzQXJyYXkoIGNvcHkgKSApICkgKSB7XG5cdFx0XHRcdFx0c3JjID0gdGFyZ2V0WyBuYW1lIF07XG5cblx0XHRcdFx0XHQvLyBFbnN1cmUgcHJvcGVyIHR5cGUgZm9yIHRoZSBzb3VyY2UgdmFsdWVcblx0XHRcdFx0XHRpZiAoIGNvcHlJc0FycmF5ICYmICFBcnJheS5pc0FycmF5KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0gW107XG5cdFx0XHRcdFx0fSBlbHNlIGlmICggIWNvcHlJc0FycmF5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggc3JjICkgKSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHt9O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcblxuXHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTtcblxuXHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGNvcHk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZVxuXHRleHBhbmRvOiBcImpRdWVyeVwiICsgKCB2ZXJzaW9uICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cXEQvZywgXCJcIiApLFxuXG5cdC8vIEFzc3VtZSBqUXVlcnkgaXMgcmVhZHkgd2l0aG91dCB0aGUgcmVhZHkgbW9kdWxlXG5cdGlzUmVhZHk6IHRydWUsXG5cblx0ZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCBtc2cgKTtcblx0fSxcblxuXHRub29wOiBmdW5jdGlvbigpIHt9LFxuXG5cdGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIHByb3RvLCBDdG9yO1xuXG5cdFx0Ly8gRGV0ZWN0IG9idmlvdXMgbmVnYXRpdmVzXG5cdFx0Ly8gVXNlIHRvU3RyaW5nIGluc3RlYWQgb2YgalF1ZXJ5LnR5cGUgdG8gY2F0Y2ggaG9zdCBvYmplY3RzXG5cdFx0aWYgKCAhb2JqIHx8IHRvU3RyaW5nLmNhbGwoIG9iaiApICE9PSBcIltvYmplY3QgT2JqZWN0XVwiICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHByb3RvID0gZ2V0UHJvdG8oIG9iaiApO1xuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIG5vIHByb3RvdHlwZSAoZS5nLiwgYE9iamVjdC5jcmVhdGUoIG51bGwgKWApIGFyZSBwbGFpblxuXHRcdGlmICggIXByb3RvICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIHByb3RvdHlwZSBhcmUgcGxhaW4gaWZmIHRoZXkgd2VyZSBjb25zdHJ1Y3RlZCBieSBhIGdsb2JhbCBPYmplY3QgZnVuY3Rpb25cblx0XHRDdG9yID0gaGFzT3duLmNhbGwoIHByb3RvLCBcImNvbnN0cnVjdG9yXCIgKSAmJiBwcm90by5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBmblRvU3RyaW5nLmNhbGwoIEN0b3IgKSA9PT0gT2JqZWN0RnVuY3Rpb25TdHJpbmc7XG5cdH0sXG5cblx0aXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgbmFtZTtcblxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvLyBFdmFsdWF0ZXMgYSBzY3JpcHQgaW4gYSBwcm92aWRlZCBjb250ZXh0OyBmYWxscyBiYWNrIHRvIHRoZSBnbG9iYWwgb25lXG5cdC8vIGlmIG5vdCBzcGVjaWZpZWQuXG5cdGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBjb2RlLCBvcHRpb25zLCBkb2MgKSB7XG5cdFx0RE9NRXZhbCggY29kZSwgeyBub25jZTogb3B0aW9ucyAmJiBvcHRpb25zLm5vbmNlIH0sIGRvYyApO1xuXHR9LFxuXG5cdGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkge1xuXHRcdHZhciBsZW5ndGgsIGkgPSAwO1xuXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggb2JqICkgKSB7XG5cdFx0XHRsZW5ndGggPSBvYmoubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gb2JqICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblxuXHQvLyBSZXRyaWV2ZSB0aGUgdGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXNcblx0dGV4dDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5vZGUsXG5cdFx0XHRyZXQgPSBcIlwiLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRub2RlVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHRpZiAoICFub2RlVHlwZSApIHtcblxuXHRcdFx0Ly8gSWYgbm8gbm9kZVR5cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXlcblx0XHRcdHdoaWxlICggKCBub2RlID0gZWxlbVsgaSsrIF0gKSApIHtcblxuXHRcdFx0XHQvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2Rlc1xuXHRcdFx0XHRyZXQgKz0galF1ZXJ5LnRleHQoIG5vZGUgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCBub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlwZSA9PT0gMTEgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS50ZXh0Q29udGVudDtcblx0XHR9XG5cdFx0aWYgKCBub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudDtcblx0XHR9XG5cdFx0aWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcblx0XHRcdHJldHVybiBlbGVtLm5vZGVWYWx1ZTtcblx0XHR9XG5cblx0XHQvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gbm9kZXNcblxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0Ly8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnIsIHJlc3VsdHMgKSB7XG5cdFx0dmFyIHJldCA9IHJlc3VsdHMgfHwgW107XG5cblx0XHRpZiAoIGFyciAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBpc0FycmF5TGlrZSggT2JqZWN0KCBhcnIgKSApICkge1xuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHJldCxcblx0XHRcdFx0XHR0eXBlb2YgYXJyID09PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRcdFsgYXJyIF0gOiBhcnJcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guY2FsbCggcmV0LCBhcnIgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdGluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnIsIGkgKSB7XG5cdFx0cmV0dXJuIGFyciA9PSBudWxsID8gLTEgOiBpbmRleE9mLmNhbGwoIGFyciwgZWxlbSwgaSApO1xuXHR9LFxuXG5cdGlzWE1MRG9jOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZXNwYWNlID0gZWxlbSAmJiBlbGVtLm5hbWVzcGFjZVVSSSxcblx0XHRcdGRvY0VsZW0gPSBlbGVtICYmICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHQvLyBBc3N1bWUgSFRNTCB3aGVuIGRvY3VtZW50RWxlbWVudCBkb2Vzbid0IHlldCBleGlzdCwgc3VjaCBhcyBpbnNpZGVcblx0XHQvLyBkb2N1bWVudCBmcmFnbWVudHMuXG5cdFx0cmV0dXJuICFyaHRtbFN1ZmZpeC50ZXN0KCBuYW1lc3BhY2UgfHwgZG9jRWxlbSAmJiBkb2NFbGVtLm5vZGVOYW1lIHx8IFwiSFRNTFwiICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0bWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkge1xuXHRcdHZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCxcblx0XHRcdGogPSAwLFxuXHRcdFx0aSA9IGZpcnN0Lmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0Zmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqIF07XG5cdFx0fVxuXG5cdFx0Zmlyc3QubGVuZ3RoID0gaTtcblxuXHRcdHJldHVybiBmaXJzdDtcblx0fSxcblxuXHRncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQgKSB7XG5cdFx0dmFyIGNhbGxiYWNrSW52ZXJzZSxcblx0XHRcdG1hdGNoZXMgPSBbXSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoLFxuXHRcdFx0Y2FsbGJhY2tFeHBlY3QgPSAhaW52ZXJ0O1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtc1xuXHRcdC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG5cdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRjYWxsYmFja0ludmVyc2UgPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTtcblx0XHRcdGlmICggY2FsbGJhY2tJbnZlcnNlICE9PSBjYWxsYmFja0V4cGVjdCApIHtcblx0XHRcdFx0bWF0Y2hlcy5wdXNoKCBlbGVtc1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hdGNoZXM7XG5cdH0sXG5cblx0Ly8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkge1xuXHRcdHZhciBsZW5ndGgsIHZhbHVlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRyZXQgPSBbXTtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpciBuZXcgdmFsdWVzXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggZWxlbXMgKSApIHtcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsXG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gZWxlbXMgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0XHRyZXR1cm4gZmxhdCggcmV0ICk7XG5cdH0sXG5cblx0Ly8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzXG5cdGd1aWQ6IDEsXG5cblx0Ly8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyXG5cdC8vIHByb3BlcnRpZXMgdG8gaXQgc28gaXQgbmVlZHMgdG8gZXhpc3QuXG5cdHN1cHBvcnQ6IHN1cHBvcnRcbn0gKTtcblxuaWYgKCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cdGpRdWVyeS5mblsgU3ltYm9sLml0ZXJhdG9yIF0gPSBhcnJbIFN5bWJvbC5pdGVyYXRvciBdO1xufVxuXG4vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXBcbmpRdWVyeS5lYWNoKCBcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoIFwiIFwiICksXG5cdGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0XHRjbGFzczJ0eXBlWyBcIltvYmplY3QgXCIgKyBuYW1lICsgXCJdXCIgXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0fSApO1xuXG5mdW5jdGlvbiBpc0FycmF5TGlrZSggb2JqICkge1xuXG5cdC8vIFN1cHBvcnQ6IHJlYWwgaU9TIDguMiBvbmx5IChub3QgcmVwcm9kdWNpYmxlIGluIHNpbXVsYXRvcilcblx0Ly8gYGluYCBjaGVjayB1c2VkIHRvIHByZXZlbnQgSklUIGVycm9yIChnaC0yMTQ1KVxuXHQvLyBoYXNPd24gaXNuJ3QgdXNlZCBoZXJlIGR1ZSB0byBmYWxzZSBuZWdhdGl2ZXNcblx0Ly8gcmVnYXJkaW5nIE5vZGVsaXN0IGxlbmd0aCBpbiBJRVxuXHR2YXIgbGVuZ3RoID0gISFvYmogJiYgXCJsZW5ndGhcIiBpbiBvYmogJiYgb2JqLmxlbmd0aCxcblx0XHR0eXBlID0gdG9UeXBlKCBvYmogKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIG9iaiApIHx8IGlzV2luZG93KCBvYmogKSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHlwZSA9PT0gXCJhcnJheVwiIHx8IGxlbmd0aCA9PT0gMCB8fFxuXHRcdHR5cGVvZiBsZW5ndGggPT09IFwibnVtYmVyXCIgJiYgbGVuZ3RoID4gMCAmJiAoIGxlbmd0aCAtIDEgKSBpbiBvYmo7XG59XG5cblxuZnVuY3Rpb24gbm9kZU5hbWUoIGVsZW0sIG5hbWUgKSB7XG5cblx0cmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbn1cbnZhciBwb3AgPSBhcnIucG9wO1xuXG5cbnZhciBzb3J0ID0gYXJyLnNvcnQ7XG5cblxudmFyIHNwbGljZSA9IGFyci5zcGxpY2U7XG5cblxudmFyIHdoaXRlc3BhY2UgPSBcIltcXFxceDIwXFxcXHRcXFxcclxcXFxuXFxcXGZdXCI7XG5cblxudmFyIHJ0cmltQ1NTID0gbmV3IFJlZ0V4cChcblx0XCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIrfCgoPzpefFteXFxcXFxcXFxdKSg/OlxcXFxcXFxcLikqKVwiICsgd2hpdGVzcGFjZSArIFwiKyRcIixcblx0XCJnXCJcbik7XG5cblxuXG5cbi8vIE5vdGU6IGFuIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBpdHNlbGZcbmpRdWVyeS5jb250YWlucyA9IGZ1bmN0aW9uKCBhLCBiICkge1xuXHR2YXIgYnVwID0gYiAmJiBiLnBhcmVudE5vZGU7XG5cblx0cmV0dXJuIGEgPT09IGJ1cCB8fCAhISggYnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErXG5cdFx0Ly8gSUUgZG9lc24ndCBoYXZlIGBjb250YWluc2Agb24gU1ZHLlxuXHRcdGEuY29udGFpbnMgP1xuXHRcdFx0YS5jb250YWlucyggYnVwICkgOlxuXHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBidXAgKSAmIDE2XG5cdCkgKTtcbn07XG5cblxuXG5cbi8vIENTUyBzdHJpbmcvaWRlbnRpZmllciBzZXJpYWxpemF0aW9uXG4vLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI2NvbW1vbi1zZXJpYWxpemluZy1pZGlvbXNcbnZhciByY3NzZXNjYXBlID0gLyhbXFwwLVxceDFmXFx4N2ZdfF4tP1xcZCl8Xi0kfFteXFx4ODAtXFx1RkZGRlxcdy1dL2c7XG5cbmZ1bmN0aW9uIGZjc3Nlc2NhcGUoIGNoLCBhc0NvZGVQb2ludCApIHtcblx0aWYgKCBhc0NvZGVQb2ludCApIHtcblxuXHRcdC8vIFUrMDAwMCBOVUxMIGJlY29tZXMgVStGRkZEIFJFUExBQ0VNRU5UIENIQVJBQ1RFUlxuXHRcdGlmICggY2ggPT09IFwiXFwwXCIgKSB7XG5cdFx0XHRyZXR1cm4gXCJcXHVGRkZEXCI7XG5cdFx0fVxuXG5cdFx0Ly8gQ29udHJvbCBjaGFyYWN0ZXJzIGFuZCAoZGVwZW5kZW50IHVwb24gcG9zaXRpb24pIG51bWJlcnMgZ2V0IGVzY2FwZWQgYXMgY29kZSBwb2ludHNcblx0XHRyZXR1cm4gY2guc2xpY2UoIDAsIC0xICkgKyBcIlxcXFxcIiArIGNoLmNoYXJDb2RlQXQoIGNoLmxlbmd0aCAtIDEgKS50b1N0cmluZyggMTYgKSArIFwiIFwiO1xuXHR9XG5cblx0Ly8gT3RoZXIgcG90ZW50aWFsbHktc3BlY2lhbCBBU0NJSSBjaGFyYWN0ZXJzIGdldCBiYWNrc2xhc2gtZXNjYXBlZFxuXHRyZXR1cm4gXCJcXFxcXCIgKyBjaDtcbn1cblxualF1ZXJ5LmVzY2FwZVNlbGVjdG9yID0gZnVuY3Rpb24oIHNlbCApIHtcblx0cmV0dXJuICggc2VsICsgXCJcIiApLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTtcbn07XG5cblxuXG5cbnZhciBwcmVmZXJyZWREb2MgPSBkb2N1bWVudCxcblx0cHVzaE5hdGl2ZSA9IHB1c2g7XG5cbiggZnVuY3Rpb24oKSB7XG5cbnZhciBpLFxuXHRFeHByLFxuXHRvdXRlcm1vc3RDb250ZXh0LFxuXHRzb3J0SW5wdXQsXG5cdGhhc0R1cGxpY2F0ZSxcblx0cHVzaCA9IHB1c2hOYXRpdmUsXG5cblx0Ly8gTG9jYWwgZG9jdW1lbnQgdmFyc1xuXHRkb2N1bWVudCxcblx0ZG9jdW1lbnRFbGVtZW50LFxuXHRkb2N1bWVudElzSFRNTCxcblx0cmJ1Z2d5UVNBLFxuXHRtYXRjaGVzLFxuXG5cdC8vIEluc3RhbmNlLXNwZWNpZmljIGRhdGFcblx0ZXhwYW5kbyA9IGpRdWVyeS5leHBhbmRvLFxuXHRkaXJydW5zID0gMCxcblx0ZG9uZSA9IDAsXG5cdGNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHR0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0Y29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHtcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gMDtcblx0fSxcblxuXHRib29sZWFucyA9IFwiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfFwiICtcblx0XHRcImxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWRcIixcblxuXHQvLyBSZWd1bGFyIGV4cHJlc3Npb25zXG5cblx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1zeW50YXgtMy8jaWRlbnQtdG9rZW4tZGlhZ3JhbVxuXHRpZGVudGlmaWVyID0gXCIoPzpcXFxcXFxcXFtcXFxcZGEtZkEtRl17MSw2fVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XCI/fFxcXFxcXFxcW15cXFxcclxcXFxuXFxcXGZdfFtcXFxcdy1dfFteXFwwLVxcXFx4N2ZdKStcIixcblxuXHQvLyBBdHRyaWJ1dGUgc2VsZWN0b3JzOiBodHRwczovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0b3JzXG5cdGF0dHJpYnV0ZXMgPSBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFwiICsgaWRlbnRpZmllciArIFwiKSg/OlwiICsgd2hpdGVzcGFjZSArXG5cblx0XHQvLyBPcGVyYXRvciAoY2FwdHVyZSAyKVxuXHRcdFwiKihbKl4kfCF+XT89KVwiICsgd2hpdGVzcGFjZSArXG5cblx0XHQvLyBcIkF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBDU1MgaWRlbnRpZmllcnMgW2NhcHR1cmUgNV0gb3Igc3RyaW5ncyBbY2FwdHVyZSAzIG9yIGNhcHR1cmUgNF1cIlxuXHRcdFwiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIgKyBpZGVudGlmaWVyICsgXCIpKXwpXCIgK1xuXHRcdHdoaXRlc3BhY2UgKyBcIipcXFxcXVwiLFxuXG5cdHBzZXVkb3MgPSBcIjooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XFxcXCgoXCIgK1xuXG5cdFx0Ly8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUgaW4gdGhlIHByZUZpbHRlciwgcHJlZmVyIGFyZ3VtZW50czpcblx0XHQvLyAxLiBxdW90ZWQgKGNhcHR1cmUgMzsgY2FwdHVyZSA0IG9yIGNhcHR1cmUgNSlcblx0XHRcIignKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCIpfFwiICtcblxuXHRcdC8vIDIuIHNpbXBsZSAoY2FwdHVyZSA2KVxuXHRcdFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKClbXFxcXF1dfFwiICsgYXR0cmlidXRlcyArIFwiKSopfFwiICtcblxuXHRcdC8vIDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMilcblx0XHRcIi4qXCIgK1xuXHRcdFwiKVxcXFwpfClcIixcblxuXHQvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyXG5cdHJ3aGl0ZXNwYWNlID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwiK1wiLCBcImdcIiApLFxuXG5cdHJjb21tYSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKixcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXHRybGVhZGluZ0NvbWJpbmF0b3IgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiooWz4rfl18XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgK1xuXHRcdHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXHRyZGVzY2VuZCA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcInw+XCIgKSxcblxuXHRycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLFxuXHRyaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoIFwiXlwiICsgaWRlbnRpZmllciArIFwiJFwiICksXG5cblx0bWF0Y2hFeHByID0ge1xuXHRcdElEOiBuZXcgUmVnRXhwKCBcIl4jKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0Q0xBU1M6IG5ldyBSZWdFeHAoIFwiXlxcXFwuKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0VEFHOiBuZXcgUmVnRXhwKCBcIl4oXCIgKyBpZGVudGlmaWVyICsgXCJ8WypdKVwiICksXG5cdFx0QVRUUjogbmV3IFJlZ0V4cCggXCJeXCIgKyBhdHRyaWJ1dGVzICksXG5cdFx0UFNFVURPOiBuZXcgUmVnRXhwKCBcIl5cIiArIHBzZXVkb3MgKSxcblx0XHRDSElMRDogbmV3IFJlZ0V4cChcblx0XHRcdFwiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFxcXChcIiArXG5cdFx0XHRcdHdoaXRlc3BhY2UgKyBcIiooZXZlbnxvZGR8KChbKy1dfCkoXFxcXGQqKW58KVwiICsgd2hpdGVzcGFjZSArIFwiKig/OihbKy1dfClcIiArXG5cdFx0XHRcdHdoaXRlc3BhY2UgKyBcIiooXFxcXGQrKXwpKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfClcIiwgXCJpXCIgKSxcblx0XHRib29sOiBuZXcgUmVnRXhwKCBcIl4oPzpcIiArIGJvb2xlYW5zICsgXCIpJFwiLCBcImlcIiApLFxuXG5cdFx0Ly8gRm9yIHVzZSBpbiBsaWJyYXJpZXMgaW1wbGVtZW50aW5nIC5pcygpXG5cdFx0Ly8gV2UgdXNlIHRoaXMgZm9yIFBPUyBtYXRjaGluZyBpbiBgc2VsZWN0YFxuXHRcdG5lZWRzQ29udGV4dDogbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFxcXChcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqKCg/Oi1cXFxcZCk/XFxcXGQqKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfCkoPz1bXi1dfCQpXCIsIFwiaVwiIClcblx0fSxcblxuXHRyaW5wdXRzID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmhlYWRlciA9IC9eaFxcZCQvaSxcblxuXHQvLyBFYXNpbHktcGFyc2VhYmxlL3JldHJpZXZhYmxlIElEIG9yIFRBRyBvciBDTEFTUyBzZWxlY3RvcnNcblx0cnF1aWNrRXhwciA9IC9eKD86IyhbXFx3LV0rKXwoXFx3Kyl8XFwuKFtcXHctXSspKSQvLFxuXG5cdHJzaWJsaW5nID0gL1srfl0vLFxuXG5cdC8vIENTUyBlc2NhcGVzXG5cdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjZXNjYXBlZC1jaGFyYWN0ZXJzXG5cdHJ1bmVzY2FwZSA9IG5ldyBSZWdFeHAoIFwiXFxcXFxcXFxbXFxcXGRhLWZBLUZdezEsNn1cIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiP3xcXFxcXFxcXChbXlxcXFxyXFxcXG5cXFxcZl0pXCIsIFwiZ1wiICksXG5cdGZ1bmVzY2FwZSA9IGZ1bmN0aW9uKCBlc2NhcGUsIG5vbkhleCApIHtcblx0XHR2YXIgaGlnaCA9IFwiMHhcIiArIGVzY2FwZS5zbGljZSggMSApIC0gMHgxMDAwMDtcblxuXHRcdGlmICggbm9uSGV4ICkge1xuXG5cdFx0XHQvLyBTdHJpcCB0aGUgYmFja3NsYXNoIHByZWZpeCBmcm9tIGEgbm9uLWhleCBlc2NhcGUgc2VxdWVuY2Vcblx0XHRcdHJldHVybiBub25IZXg7XG5cdFx0fVxuXG5cdFx0Ly8gUmVwbGFjZSBhIGhleGFkZWNpbWFsIGVzY2FwZSBzZXF1ZW5jZSB3aXRoIHRoZSBlbmNvZGVkIFVuaWNvZGUgY29kZSBwb2ludFxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTErXG5cdFx0Ly8gRm9yIHZhbHVlcyBvdXRzaWRlIHRoZSBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUgKEJNUCksIG1hbnVhbGx5IGNvbnN0cnVjdCBhXG5cdFx0Ly8gc3Vycm9nYXRlIHBhaXJcblx0XHRyZXR1cm4gaGlnaCA8IDAgP1xuXHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCArIDB4MTAwMDAgKSA6XG5cdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoID4+IDEwIHwgMHhEODAwLCBoaWdoICYgMHgzRkYgfCAweERDMDAgKTtcblx0fSxcblxuXHQvLyBVc2VkIGZvciBpZnJhbWVzOyBzZWUgYHNldERvY3VtZW50YC5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4K1xuXHQvLyBSZW1vdmluZyB0aGUgZnVuY3Rpb24gd3JhcHBlciBjYXVzZXMgYSBcIlBlcm1pc3Npb24gRGVuaWVkXCJcblx0Ly8gZXJyb3IgaW4gSUUvRWRnZS5cblx0dW5sb2FkSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuXHRcdHNldERvY3VtZW50KCk7XG5cdH0sXG5cblx0aW5EaXNhYmxlZEZpZWxkc2V0ID0gYWRkQ29tYmluYXRvcihcblx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlICYmIG5vZGVOYW1lKCBlbGVtLCBcImZpZWxkc2V0XCIgKTtcblx0XHR9LFxuXHRcdHsgZGlyOiBcInBhcmVudE5vZGVcIiwgbmV4dDogXCJsZWdlbmRcIiB9XG5cdCk7XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG4vLyBBY2Nlc3NpbmcgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBjYW4gdGhyb3cgdW5leHBlY3RlZGx5XG4vLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzOTNcbmZ1bmN0aW9uIHNhZmVBY3RpdmVFbGVtZW50KCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXHR9IGNhdGNoICggZXJyICkgeyB9XG59XG5cbi8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApXG50cnkge1xuXHRwdXNoLmFwcGx5KFxuXHRcdCggYXJyID0gc2xpY2UuY2FsbCggcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMgKSApLFxuXHRcdHByZWZlcnJlZERvYy5jaGlsZE5vZGVzXG5cdCk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMFxuXHQvLyBEZXRlY3Qgc2lsZW50bHkgZmFpbGluZyBwdXNoLmFwcGx5XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0YXJyWyBwcmVmZXJyZWREb2MuY2hpbGROb2Rlcy5sZW5ndGggXS5ub2RlVHlwZTtcbn0gY2F0Y2ggKCBlICkge1xuXHRwdXNoID0ge1xuXHRcdGFwcGx5OiBmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHRwdXNoTmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoIGVscyApICk7XG5cdFx0fSxcblx0XHRjYWxsOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdFx0cHVzaE5hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDEgKSApO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gZmluZCggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBtLCBpLCBlbGVtLCBuaWQsIG1hdGNoLCBncm91cHMsIG5ld1NlbGVjdG9yLFxuXHRcdG5ld0NvbnRleHQgPSBjb250ZXh0ICYmIGNvbnRleHQub3duZXJEb2N1bWVudCxcblxuXHRcdC8vIG5vZGVUeXBlIGRlZmF1bHRzIHRvIDksIHNpbmNlIGNvbnRleHQgZGVmYXVsdHMgdG8gZG9jdW1lbnRcblx0XHRub2RlVHlwZSA9IGNvbnRleHQgPyBjb250ZXh0Lm5vZGVUeXBlIDogOTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBSZXR1cm4gZWFybHkgZnJvbSBjYWxscyB3aXRoIGludmFsaWQgc2VsZWN0b3Igb3IgY29udGV4dFxuXHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiB8fCAhc2VsZWN0b3IgfHxcblx0XHRub2RlVHlwZSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSAmJiBub2RlVHlwZSAhPT0gMTEgKSB7XG5cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fVxuXG5cdC8vIFRyeSB0byBzaG9ydGN1dCBmaW5kIG9wZXJhdGlvbnMgKGFzIG9wcG9zZWQgdG8gZmlsdGVycykgaW4gSFRNTCBkb2N1bWVudHNcblx0aWYgKCAhc2VlZCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHRcdGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xuXG5cdFx0aWYgKCBkb2N1bWVudElzSFRNTCApIHtcblxuXHRcdFx0Ly8gSWYgdGhlIHNlbGVjdG9yIGlzIHN1ZmZpY2llbnRseSBzaW1wbGUsIHRyeSB1c2luZyBhIFwiZ2V0KkJ5KlwiIERPTSBtZXRob2Rcblx0XHRcdC8vIChleGNlcHRpbmcgRG9jdW1lbnRGcmFnbWVudCBjb250ZXh0LCB3aGVyZSB0aGUgbWV0aG9kcyBkb24ndCBleGlzdClcblx0XHRcdGlmICggbm9kZVR5cGUgIT09IDExICYmICggbWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHQvLyBJRCBzZWxlY3RvclxuXHRcdFx0XHRpZiAoICggbSA9IG1hdGNoWyAxIF0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvY3VtZW50IGNvbnRleHRcblx0XHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0XHRpZiAoIGVsZW0uaWQgPT09IG0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHVzaC5jYWxsKCByZXN1bHRzLCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRWxlbWVudCBjb250ZXh0XG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgJiYgKCBlbGVtID0gbmV3Q29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApICkgJiZcblx0XHRcdFx0XHRcdFx0ZmluZC5jb250YWlucyggY29udGV4dCwgZWxlbSApICYmXG5cdFx0XHRcdFx0XHRcdGVsZW0uaWQgPT09IG0gKSB7XG5cblx0XHRcdFx0XHRcdFx0cHVzaC5jYWxsKCByZXN1bHRzLCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUeXBlIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWyAyIF0gKSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHRcdC8vIENsYXNzIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggbSA9IG1hdGNoWyAzIF0gKSAmJiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBtICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUYWtlIGFkdmFudGFnZSBvZiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHRpZiAoICFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF0gJiZcblx0XHRcdFx0KCAhcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggc2VsZWN0b3IgKSApICkge1xuXG5cdFx0XHRcdG5ld1NlbGVjdG9yID0gc2VsZWN0b3I7XG5cdFx0XHRcdG5ld0NvbnRleHQgPSBjb250ZXh0O1xuXG5cdFx0XHRcdC8vIHFTQSBjb25zaWRlcnMgZWxlbWVudHMgb3V0c2lkZSBhIHNjb3Bpbmcgcm9vdCB3aGVuIGV2YWx1YXRpbmcgY2hpbGQgb3Jcblx0XHRcdFx0Ly8gZGVzY2VuZGFudCBjb21iaW5hdG9ycywgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudC5cblx0XHRcdFx0Ly8gSW4gc3VjaCBjYXNlcywgd2Ugd29yayBhcm91bmQgdGhlIGJlaGF2aW9yIGJ5IHByZWZpeGluZyBldmVyeSBzZWxlY3RvciBpbiB0aGVcblx0XHRcdFx0Ly8gbGlzdCB3aXRoIGFuIElEIHNlbGVjdG9yIHJlZmVyZW5jaW5nIHRoZSBzY29wZSBjb250ZXh0LlxuXHRcdFx0XHQvLyBUaGUgdGVjaG5pcXVlIGhhcyB0byBiZSB1c2VkIGFzIHdlbGwgd2hlbiBhIGxlYWRpbmcgY29tYmluYXRvciBpcyB1c2VkXG5cdFx0XHRcdC8vIGFzIHN1Y2ggc2VsZWN0b3JzIGFyZSBub3QgcmVjb2duaXplZCBieSBxdWVyeVNlbGVjdG9yQWxsLlxuXHRcdFx0XHQvLyBUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhpcyB0ZWNobmlxdWUuXG5cdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHQoIHJkZXNjZW5kLnRlc3QoIHNlbGVjdG9yICkgfHwgcmxlYWRpbmdDb21iaW5hdG9yLnRlc3QoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHRcdC8vIEV4cGFuZCBjb250ZXh0IGZvciBzaWJsaW5nIHNlbGVjdG9yc1xuXHRcdFx0XHRcdG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fFxuXHRcdFx0XHRcdFx0Y29udGV4dDtcblxuXHRcdFx0XHRcdC8vIFdlIGNhbiB1c2UgOnNjb3BlIGluc3RlYWQgb2YgdGhlIElEIGhhY2sgaWYgdGhlIGJyb3dzZXJcblx0XHRcdFx0XHQvLyBzdXBwb3J0cyBpdCAmIGlmIHdlJ3JlIG5vdCBjaGFuZ2luZyB0aGUgY29udGV4dC5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuXG5cdFx0XHRcdFx0Ly8gc3RyaWN0LWNvbXBhcmluZyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0XHRcdGlmICggbmV3Q29udGV4dCAhPSBjb250ZXh0IHx8ICFzdXBwb3J0LnNjb3BlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBDYXB0dXJlIHRoZSBjb250ZXh0IElELCBzZXR0aW5nIGl0IGZpcnN0IGlmIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdFx0aWYgKCAoIG5pZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCBcImlkXCIgKSApICkge1xuXHRcdFx0XHRcdFx0XHRuaWQgPSBqUXVlcnkuZXNjYXBlU2VsZWN0b3IoIG5pZCApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dC5zZXRBdHRyaWJ1dGUoIFwiaWRcIiwgKCBuaWQgPSBleHBhbmRvICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmVmaXggZXZlcnkgc2VsZWN0b3IgaW4gdGhlIGxpc3Rcblx0XHRcdFx0XHRncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHRcdFx0XHRpID0gZ3JvdXBzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGdyb3Vwc1sgaSBdID0gKCBuaWQgPyBcIiNcIiArIG5pZCA6IFwiOnNjb3BlXCIgKSArIFwiIFwiICtcblx0XHRcdFx0XHRcdFx0dG9TZWxlY3RvciggZ3JvdXBzWyBpIF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bmV3U2VsZWN0b3IgPSBncm91cHMuam9pbiggXCIsXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cyxcblx0XHRcdFx0XHRcdG5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCggbmV3U2VsZWN0b3IgKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH0gY2F0Y2ggKCBxc2FFcnJvciApIHtcblx0XHRcdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdGlmICggbmlkID09PSBleHBhbmRvICkge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFsbCBvdGhlcnNcblx0cmV0dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW1DU1MsIFwiJDFcIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oc3RyaW5nLCBvYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2VsZiB3aXRoXG4gKlx0cHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1ZmZpeGVkKSBzdHJpbmcgYW5kIChpZiB0aGUgY2FjaGUgaXMgbGFyZ2VyIHRoYW4gRXhwci5jYWNoZUxlbmd0aClcbiAqXHRkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkge1xuXHR2YXIga2V5cyA9IFtdO1xuXG5cdGZ1bmN0aW9uIGNhY2hlKCBrZXksIHZhbHVlICkge1xuXG5cdFx0Ly8gVXNlIChrZXkgKyBcIiBcIikgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggbmF0aXZlIHByb3RvdHlwZSBwcm9wZXJ0aWVzXG5cdFx0Ly8gKHNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9pc3N1ZXMvMTU3KVxuXHRcdGlmICgga2V5cy5wdXNoKCBrZXkgKyBcIiBcIiApID4gRXhwci5jYWNoZUxlbmd0aCApIHtcblxuXHRcdFx0Ly8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzXG5cdFx0XHRkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdO1xuXHRcdH1cblx0XHRyZXR1cm4gKCBjYWNoZVsga2V5ICsgXCIgXCIgXSA9IHZhbHVlICk7XG5cdH1cblx0cmV0dXJuIGNhY2hlO1xufVxuXG4vKipcbiAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgalF1ZXJ5IHNlbGVjdG9yIG1vZHVsZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmtcbiAqL1xuZnVuY3Rpb24gbWFya0Z1bmN0aW9uKCBmbiApIHtcblx0Zm5bIGV4cGFuZG8gXSA9IHRydWU7XG5cdHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBTdXBwb3J0IHRlc3RpbmcgdXNpbmcgYW4gZWxlbWVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGVsZW1lbnQgYW5kIHJldHVybnMgYSBib29sZWFuIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc3NlcnQoIGZuICkge1xuXHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImZpZWxkc2V0XCIgKTtcblxuXHR0cnkge1xuXHRcdHJldHVybiAhIWZuKCBlbCApO1xuXHR9IGNhdGNoICggZSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZmluYWxseSB7XG5cblx0XHQvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHRcblx0XHRpZiAoIGVsLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbCApO1xuXHRcdH1cblxuXHRcdC8vIHJlbGVhc2UgbWVtb3J5IGluIElFXG5cdFx0ZWwgPSBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gbm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiAoIG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSB8fCBub2RlTmFtZSggZWxlbSwgXCJidXR0b25cIiApICkgJiZcblx0XHRcdGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIDplbmFibGVkLzpkaXNhYmxlZFxuICogQHBhcmFtIHtCb29sZWFufSBkaXNhYmxlZCB0cnVlIGZvciA6ZGlzYWJsZWQ7IGZhbHNlIGZvciA6ZW5hYmxlZFxuICovXG5mdW5jdGlvbiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZGlzYWJsZWQgKSB7XG5cblx0Ly8gS25vd24gOmRpc2FibGVkIGZhbHNlIHBvc2l0aXZlczogZmllbGRzZXRbZGlzYWJsZWRdID4gbGVnZW5kOm50aC1vZi10eXBlKG4rMikgOmNhbi1kaXNhYmxlXG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE9ubHkgY2VydGFpbiBlbGVtZW50cyBjYW4gbWF0Y2ggOmVuYWJsZWQgb3IgOmRpc2FibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZW5hYmxlZFxuXHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWRpc2FibGVkXG5cdFx0aWYgKCBcImZvcm1cIiBpbiBlbGVtICkge1xuXG5cdFx0XHQvLyBDaGVjayBmb3IgaW5oZXJpdGVkIGRpc2FibGVkbmVzcyBvbiByZWxldmFudCBub24tZGlzYWJsZWQgZWxlbWVudHM6XG5cdFx0XHQvLyAqIGxpc3RlZCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBmaWVsZHNldFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NhdGVnb3J5LWxpc3RlZFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtZmUtZGlzYWJsZWRcblx0XHRcdC8vICogb3B0aW9uIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXBcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LW9wdGlvbi1kaXNhYmxlZFxuXHRcdFx0Ly8gQWxsIHN1Y2ggZWxlbWVudHMgaGF2ZSBhIFwiZm9ybVwiIHByb3BlcnR5LlxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgJiYgZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0Ly8gT3B0aW9uIGVsZW1lbnRzIGRlZmVyIHRvIGEgcGFyZW50IG9wdGdyb3VwIGlmIHByZXNlbnRcblx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5wYXJlbnROb2RlLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDYgLSAxMStcblx0XHRcdFx0Ly8gVXNlIHRoZSBpc0Rpc2FibGVkIHNob3J0Y3V0IHByb3BlcnR5IHRvIGNoZWNrIGZvciBkaXNhYmxlZCBmaWVsZHNldCBhbmNlc3RvcnNcblx0XHRcdFx0cmV0dXJuIGVsZW0uaXNEaXNhYmxlZCA9PT0gZGlzYWJsZWQgfHxcblxuXHRcdFx0XHRcdC8vIFdoZXJlIHRoZXJlIGlzIG5vIGlzRGlzYWJsZWQsIGNoZWNrIG1hbnVhbGx5XG5cdFx0XHRcdFx0ZWxlbS5pc0Rpc2FibGVkICE9PSAhZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdGluRGlzYWJsZWRGaWVsZHNldCggZWxlbSApID09PSBkaXNhYmxlZDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXG5cdFx0Ly8gVHJ5IHRvIHdpbm5vdyBvdXQgZWxlbWVudHMgdGhhdCBjYW4ndCBiZSBkaXNhYmxlZCBiZWZvcmUgdHJ1c3RpbmcgdGhlIGRpc2FibGVkIHByb3BlcnR5LlxuXHRcdC8vIFNvbWUgdmljdGltcyBnZXQgY2F1Z2h0IGluIG91ciBuZXQgKGxhYmVsLCBsZWdlbmQsIG1lbnUsIHRyYWNrKSwgYnV0IGl0IHNob3VsZG4ndFxuXHRcdC8vIGV2ZW4gZXhpc3Qgb24gdGhlbSwgbGV0IGFsb25lIGhhdmUgYSBib29sZWFuIHZhbHVlLlxuXHRcdH0gZWxzZSBpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdH1cblxuXHRcdC8vIFJlbWFpbmluZyBlbGVtZW50cyBhcmUgbmVpdGhlciA6ZW5hYmxlZCBub3IgOmRpc2FibGVkXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgcG9zaXRpb25hbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkge1xuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggYXJndW1lbnQgKSB7XG5cdFx0YXJndW1lbnQgPSArYXJndW1lbnQ7XG5cdFx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHR2YXIgaixcblx0XHRcdFx0bWF0Y2hJbmRleGVzID0gZm4oIFtdLCBzZWVkLmxlbmd0aCwgYXJndW1lbnQgKSxcblx0XHRcdFx0aSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7XG5cblx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlc1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggc2VlZFsgKCBqID0gbWF0Y2hJbmRleGVzWyBpIF0gKSBdICkge1xuXHRcdFx0XHRcdHNlZWRbIGogXSA9ICEoIG1hdGNoZXNbIGogXSA9IHNlZWRbIGogXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9ICk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBqUXVlcnkgc2VsZWN0b3IgY29udGV4dFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHRcbiAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZVxuICovXG5mdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHtcblx0cmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29udGV4dDtcbn1cblxuLyoqXG4gKiBTZXRzIGRvY3VtZW50LXJlbGF0ZWQgdmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IFtub2RlXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVudFxuICovXG5mdW5jdGlvbiBzZXREb2N1bWVudCggbm9kZSApIHtcblx0dmFyIHN1YldpbmRvdyxcblx0XHRkb2MgPSBub2RlID8gbm9kZS5vd25lckRvY3VtZW50IHx8IG5vZGUgOiBwcmVmZXJyZWREb2M7XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGlmIGRvYyBpcyBpbnZhbGlkIG9yIGFscmVhZHkgc2VsZWN0ZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCBkb2MgPT0gZG9jdW1lbnQgfHwgZG9jLm5vZGVUeXBlICE9PSA5IHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50ICkge1xuXHRcdHJldHVybiBkb2N1bWVudDtcblx0fVxuXG5cdC8vIFVwZGF0ZSBnbG9iYWwgdmFyaWFibGVzXG5cdGRvY3VtZW50ID0gZG9jO1xuXHRkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdGRvY3VtZW50SXNIVE1MID0gIWpRdWVyeS5pc1hNTERvYyggZG9jdW1lbnQgKTtcblxuXHQvLyBTdXBwb3J0OiBpT1MgNyBvbmx5LCBJRSA5IC0gMTErXG5cdC8vIE9sZGVyIGJyb3dzZXJzIGRpZG4ndCBzdXBwb3J0IHVucHJlZml4ZWQgYG1hdGNoZXNgLlxuXHRtYXRjaGVzID0gZG9jdW1lbnRFbGVtZW50Lm1hdGNoZXMgfHxcblx0XHRkb2N1bWVudEVsZW1lbnQud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jdW1lbnRFbGVtZW50Lm1zTWF0Y2hlc1NlbGVjdG9yO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCtcblx0Ly8gQWNjZXNzaW5nIGlmcmFtZSBkb2N1bWVudHMgYWZ0ZXIgdW5sb2FkIHRocm93cyBcInBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3JzXG5cdC8vIChzZWUgdHJhYy0xMzkzNikuXG5cdC8vIExpbWl0IHRoZSBmaXggdG8gSUUgJiBFZGdlIExlZ2FjeTsgZGVzcGl0ZSBFZGdlIDE1KyBpbXBsZW1lbnRpbmcgYG1hdGNoZXNgLFxuXHQvLyBhbGwgSUUgOSsgYW5kIEVkZ2UgTGVnYWN5IHZlcnNpb25zIGltcGxlbWVudCBgbXNNYXRjaGVzU2VsZWN0b3JgIGFzIHdlbGwuXG5cdGlmICggZG9jdW1lbnRFbGVtZW50Lm1zTWF0Y2hlc1NlbGVjdG9yICYmXG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdHByZWZlcnJlZERvYyAhPSBkb2N1bWVudCAmJlxuXHRcdCggc3ViV2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcgKSAmJiBzdWJXaW5kb3cudG9wICE9PSBzdWJXaW5kb3cgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrXG5cdFx0c3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwidW5sb2FkXCIsIHVubG9hZEhhbmRsZXIgKTtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDwxMFxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWVcblx0Ly8gVGhlIGJyb2tlbiBnZXRFbGVtZW50QnlJZCBtZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbW1hdGljYWxseS1zZXQgbmFtZXMsXG5cdC8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxlbWVudHNCeU5hbWUgdGVzdFxuXHRzdXBwb3J0LmdldEJ5SWQgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGVsICkuaWQgPSBqUXVlcnkuZXhwYW5kbztcblx0XHRyZXR1cm4gIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lIHx8XG5cdFx0XHQhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGpRdWVyeS5leHBhbmRvICkubGVuZ3RoO1xuXHR9ICk7XG5cblx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdC8vIENoZWNrIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3RvclxuXHQvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlLlxuXHRzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXMuY2FsbCggZWwsIFwiKlwiICk7XG5cdH0gKTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrXG5cdC8vIElFL0VkZ2UgZG9uJ3Qgc3VwcG9ydCB0aGUgOnNjb3BlIHBzZXVkby1jbGFzcy5cblx0c3VwcG9ydC5zY29wZSA9IGFzc2VydCggZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOnNjb3BlXCIgKTtcblx0fSApO1xuXG5cdC8vIFN1cHBvcnQ6IENocm9tZSAxMDUgLSAxMTEgb25seSwgU2FmYXJpIDE1LjQgLSAxNi4zIG9ubHlcblx0Ly8gTWFrZSBzdXJlIHRoZSBgOmhhcygpYCBhcmd1bWVudCBpcyBwYXJzZWQgdW5mb3JnaXZpbmdseS5cblx0Ly8gV2UgaW5jbHVkZSBgKmAgaW4gdGhlIHRlc3QgdG8gZGV0ZWN0IGJ1Z2d5IGltcGxlbWVudGF0aW9ucyB0aGF0IGFyZVxuXHQvLyBfc2VsZWN0aXZlbHlfIGZvcmdpdmluZyAoc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGxpc3QgaW5jbHVkZXMgYXQgbGVhc3Rcblx0Ly8gb25lIHZhbGlkIHNlbGVjdG9yKS5cblx0Ly8gTm90ZSB0aGF0IHdlIHRyZWF0IGNvbXBsZXRlIGxhY2sgb2Ygc3VwcG9ydCBmb3IgYDpoYXMoKWAgYXMgaWYgaXQgd2VyZVxuXHQvLyBzcGVjLWNvbXBsaWFudCBzdXBwb3J0LCB3aGljaCBpcyBmaW5lIGJlY2F1c2UgdXNlIG9mIGA6aGFzKClgIGluIHN1Y2hcblx0Ly8gZW52aXJvbm1lbnRzIHdpbGwgZmFpbCBpbiB0aGUgcVNBIHBhdGggYW5kIGZhbGwgYmFjayB0byBqUXVlcnkgdHJhdmVyc2FsXG5cdC8vIGFueXdheS5cblx0c3VwcG9ydC5jc3NIYXMgPSBhc3NlcnQoIGZ1bmN0aW9uKCkge1xuXHRcdHRyeSB7XG5cdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCBcIjpoYXMoKiw6anFmYWtlKVwiICk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH0gKTtcblxuXHQvLyBJRCBmaWx0ZXIgYW5kIGZpbmRcblx0aWYgKCBzdXBwb3J0LmdldEJ5SWQgKSB7XG5cdFx0RXhwci5maWx0ZXIuSUQgPSBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBcImlkXCIgKSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXHRcdEV4cHIuZmluZC5JRCA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblx0XHRcdFx0cmV0dXJuIGVsZW0gPyBbIGVsZW0gXSA6IFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0RXhwci5maWx0ZXIuSUQgPSAgZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdHJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDYgLSA3IG9ubHlcblx0XHQvLyBnZXRFbGVtZW50QnlJZCBpcyBub3QgcmVsaWFibGUgYXMgYSBmaW5kIHNob3J0Y3V0XG5cdFx0RXhwci5maW5kLklEID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIG5vZGUsIGksIGVsZW1zLFxuXHRcdFx0XHRcdGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXG5cdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdC8vIFZlcmlmeSB0aGUgaWQgYXR0cmlidXRlXG5cdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEZhbGwgYmFjayBvbiBnZXRFbGVtZW50c0J5TmFtZVxuXHRcdFx0XHRcdGVsZW1zID0gY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSggaWQgKTtcblx0XHRcdFx0XHRpID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1zWyBpKysgXSApICkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8vIFRhZ1xuXHRFeHByLmZpbmQuVEFHID0gZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0Ly8gRG9jdW1lbnRGcmFnbWVudCBub2RlcyBkb24ndCBoYXZlIGdFQlROXG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyApO1xuXHRcdH1cblx0fTtcblxuXHQvLyBDbGFzc1xuXHRFeHByLmZpbmQuQ0xBU1MgPSBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkge1xuXHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0XG5cblx0cmJ1Z2d5UVNBID0gW107XG5cblx0Ly8gQnVpbGQgUVNBIHJlZ2V4XG5cdC8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmlcblx0YXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cblx0XHR2YXIgaW5wdXQ7XG5cblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGVsICkuaW5uZXJIVE1MID1cblx0XHRcdFwiPGEgaWQ9J1wiICsgZXhwYW5kbyArIFwiJyBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPlwiICtcblx0XHRcdFwiPHNlbGVjdCBpZD0nXCIgKyBleHBhbmRvICsgXCItXFxyXFxcXCcgZGlzYWJsZWQ9J2Rpc2FibGVkJz5cIiArXG5cdFx0XHRcIjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCI7XG5cblx0XHQvLyBTdXBwb3J0OiBpT1MgPD03IC0gOCBvbmx5XG5cdFx0Ly8gQm9vbGVhbiBhdHRyaWJ1dGVzIGFuZCBcInZhbHVlXCIgYXJlIG5vdCB0cmVhdGVkIGNvcnJlY3RseSBpbiBzb21lIFhNTCBkb2N1bWVudHNcblx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltzZWxlY3RlZF1cIiApLmxlbmd0aCApIHtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86dmFsdWV8XCIgKyBib29sZWFucyArIFwiKVwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogaU9TIDw9NyAtIDggb25seVxuXHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW2lkfj1cIiArIGV4cGFuZG8gKyBcIi1dXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJ+PVwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogaU9TIDggb25seVxuXHRcdC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4NTFcblx0XHQvLyBJbi1wYWdlIGBzZWxlY3RvciNpZCBzaWJsaW5nLWNvbWJpbmF0b3Igc2VsZWN0b3JgIGZhaWxzXG5cdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJhI1wiICsgZXhwYW5kbyArIFwiKypcIiApLmxlbmd0aCApIHtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIi4jLitbK35dXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0xMDUrLCBGaXJlZm94IDw9MTA0KywgU2FmYXJpIDw9MTUuNCtcblx0XHQvLyBJbiBzb21lIG9mIHRoZSBkb2N1bWVudCBraW5kcywgdGhlc2Ugc2VsZWN0b3JzIHdvdWxkbid0IHdvcmsgbmF0aXZlbHkuXG5cdFx0Ly8gVGhpcyBpcyBwcm9iYWJseSBPSyBidXQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdlIHdhbnQgdG8gbWFpbnRhaW5cblx0XHQvLyBoYW5kbGluZyB0aGVtIHRocm91Z2ggalF1ZXJ5IHRyYXZlcnNhbCBpbiBqUXVlcnkgMy54LlxuXHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOmNoZWNrZWRcIiApLmxlbmd0aCApIHtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjpjaGVja2VkXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBXaW5kb3dzIDggTmF0aXZlIEFwcHNcblx0XHQvLyBUaGUgdHlwZSBhbmQgbmFtZSBhdHRyaWJ1dGVzIGFyZSByZXN0cmljdGVkIGR1cmluZyAuaW5uZXJIVE1MIGFzc2lnbm1lbnRcblx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRcdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwiaGlkZGVuXCIgKTtcblx0XHRlbC5hcHBlbmRDaGlsZCggaW5wdXQgKS5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcIkRcIiApO1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExK1xuXHRcdC8vIElFJ3MgOmRpc2FibGVkIHNlbGVjdG9yIGRvZXMgbm90IHBpY2sgdXAgdGhlIGNoaWxkcmVuIG9mIGRpc2FibGVkIGZpZWxkc2V0c1xuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTEwNSssIEZpcmVmb3ggPD0xMDQrLCBTYWZhcmkgPD0xNS40K1xuXHRcdC8vIEluIHNvbWUgb2YgdGhlIGRvY3VtZW50IGtpbmRzLCB0aGVzZSBzZWxlY3RvcnMgd291bGRuJ3Qgd29yayBuYXRpdmVseS5cblx0XHQvLyBUaGlzIGlzIHByb2JhYmx5IE9LIGJ1dCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2Ugd2FudCB0byBtYWludGFpblxuXHRcdC8vIGhhbmRsaW5nIHRoZW0gdGhyb3VnaCBqUXVlcnkgdHJhdmVyc2FsIGluIGpRdWVyeSAzLnguXG5cdFx0ZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBlbCApLmRpc2FibGVkID0gdHJ1ZTtcblx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOmRpc2FibGVkXCIgKS5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0Ly8gSUUgMTEvRWRnZSBkb24ndCBmaW5kIGVsZW1lbnRzIG9uIGEgYFtuYW1lPScnXWAgcXVlcnkgaW4gc29tZSBjYXNlcy5cblx0XHQvLyBBZGRpbmcgYSB0ZW1wb3JhcnkgYXR0cmlidXRlIHRvIHRoZSBkb2N1bWVudCBiZWZvcmUgdGhlIHNlbGVjdGlvbiB3b3Jrc1xuXHRcdC8vIGFyb3VuZCB0aGUgaXNzdWUuXG5cdFx0Ly8gSW50ZXJlc3RpbmdseSwgSUUgMTAgJiBvbGRlciBkb24ndCBzZWVtIHRvIGhhdmUgdGhlIGlzc3VlLlxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJcIiApO1xuXHRcdGVsLmFwcGVuZENoaWxkKCBpbnB1dCApO1xuXHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW25hbWU9JyddXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKm5hbWVcIiArIHdoaXRlc3BhY2UgKyBcIio9XCIgK1xuXHRcdFx0XHR3aGl0ZXNwYWNlICsgXCIqKD86Jyd8XFxcIlxcXCIpXCIgKTtcblx0XHR9XG5cdH0gKTtcblxuXHRpZiAoICFzdXBwb3J0LmNzc0hhcyApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSAxMDUgLSAxMTArLCBTYWZhcmkgMTUuNCAtIDE2LjMrXG5cdFx0Ly8gT3VyIHJlZ3VsYXIgYHRyeS1jYXRjaGAgbWVjaGFuaXNtIGZhaWxzIHRvIGRldGVjdCBuYXRpdmVseS11bnN1cHBvcnRlZFxuXHRcdC8vIHBzZXVkby1jbGFzc2VzIGluc2lkZSBgOmhhcygpYCAoc3VjaCBhcyBgOmhhcyg6Y29udGFpbnMoXCJGb29cIikpYClcblx0XHQvLyBpbiBicm93c2VycyB0aGF0IHBhcnNlIHRoZSBgOmhhcygpYCBhcmd1bWVudCBhcyBhIGZvcmdpdmluZyBzZWxlY3RvciBsaXN0LlxuXHRcdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9zZWxlY3RvcnMvI3JlbGF0aW9uYWwgbm93IHJlcXVpcmVzIHRoZSBhcmd1bWVudFxuXHRcdC8vIHRvIGJlIHBhcnNlZCB1bmZvcmdpdmluZ2x5LCBidXQgYnJvd3NlcnMgaGF2ZSBub3QgeWV0IGZ1bGx5IGFkanVzdGVkLlxuXHRcdHJidWdneVFTQS5wdXNoKCBcIjpoYXNcIiApO1xuXHR9XG5cblx0cmJ1Z2d5UVNBID0gcmJ1Z2d5UVNBLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lRU0Euam9pbiggXCJ8XCIgKSApO1xuXG5cdC8qIFNvcnRpbmdcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIERvY3VtZW50IG9yZGVyIHNvcnRpbmdcblx0c29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7XG5cblx0XHQvLyBGbGFnIGZvciBkdXBsaWNhdGUgcmVtb3ZhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHQvLyBTb3J0IG9uIG1ldGhvZCBleGlzdGVuY2UgaWYgb25seSBvbmUgaW5wdXQgaGFzIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uXG5cdFx0dmFyIGNvbXBhcmUgPSAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO1xuXHRcdGlmICggY29tcGFyZSApIHtcblx0XHRcdHJldHVybiBjb21wYXJlO1xuXHRcdH1cblxuXHRcdC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBpZiBib3RoIGlucHV0cyBiZWxvbmcgdG8gdGhlIHNhbWUgZG9jdW1lbnRcblx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdGNvbXBhcmUgPSAoIGEub3duZXJEb2N1bWVudCB8fCBhICkgPT0gKCBiLm93bmVyRG9jdW1lbnQgfHwgYiApID9cblx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGIgKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSB3ZSBrbm93IHRoZXkgYXJlIGRpc2Nvbm5lY3RlZFxuXHRcdFx0MTtcblxuXHRcdC8vIERpc2Nvbm5lY3RlZCBub2Rlc1xuXHRcdGlmICggY29tcGFyZSAmIDEgfHxcblx0XHRcdCggIXN1cHBvcnQuc29ydERldGFjaGVkICYmIGIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGEgKSA9PT0gY29tcGFyZSApICkge1xuXG5cdFx0XHQvLyBDaG9vc2UgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyByZWxhdGVkIHRvIG91ciBwcmVmZXJyZWQgZG9jdW1lbnRcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRpZiAoIGEgPT09IGRvY3VtZW50IHx8IGEub3duZXJEb2N1bWVudCA9PSBwcmVmZXJyZWREb2MgJiZcblx0XHRcdFx0ZmluZC5jb250YWlucyggcHJlZmVycmVkRG9jLCBhICkgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdGlmICggYiA9PT0gZG9jdW1lbnQgfHwgYi5vd25lckRvY3VtZW50ID09IHByZWZlcnJlZERvYyAmJlxuXHRcdFx0XHRmaW5kLmNvbnRhaW5zKCBwcmVmZXJyZWREb2MsIGIgKSApIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1haW50YWluIG9yaWdpbmFsIG9yZGVyXG5cdFx0XHRyZXR1cm4gc29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mLmNhbGwoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZi5jYWxsKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGFyZSAmIDQgPyAtMSA6IDE7XG5cdH07XG5cblx0cmV0dXJuIGRvY3VtZW50O1xufVxuXG5maW5kLm1hdGNoZXMgPSBmdW5jdGlvbiggZXhwciwgZWxlbWVudHMgKSB7XG5cdHJldHVybiBmaW5kKCBleHByLCBudWxsLCBudWxsLCBlbGVtZW50cyApO1xufTtcblxuZmluZC5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHtcblx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblxuXHRpZiAoIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIGV4cHIgKyBcIiBcIiBdICYmXG5cdFx0KCAhcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggZXhwciApICkgKSB7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFyIHJldCA9IG1hdGNoZXMuY2FsbCggZWxlbSwgZXhwciApO1xuXG5cdFx0XHQvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24gZGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0XHRpZiAoIHJldCB8fCBzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoIHx8XG5cblx0XHRcdFx0XHQvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudFxuXHRcdFx0XHRcdC8vIGZyYWdtZW50IGluIElFIDlcblx0XHRcdFx0XHRlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSggZXhwciwgdHJ1ZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmaW5kKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwO1xufTtcblxuZmluZC5jb250YWlucyA9IGZ1bmN0aW9uKCBjb250ZXh0LCBlbGVtICkge1xuXG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHR9XG5cdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTtcbn07XG5cblxuZmluZC5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdH1cblxuXHR2YXIgZm4gPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUudG9Mb3dlckNhc2UoKSBdLFxuXG5cdFx0Ly8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKHNlZSB0cmFjLTEzODA3KVxuXHRcdHZhbCA9IGZuICYmIGhhc093bi5jYWxsKCBFeHByLmF0dHJIYW5kbGUsIG5hbWUudG9Mb3dlckNhc2UoKSApID9cblx0XHRcdGZuKCBlbGVtLCBuYW1lLCAhZG9jdW1lbnRJc0hUTUwgKSA6XG5cdFx0XHR1bmRlZmluZWQ7XG5cblx0aWYgKCB2YWwgIT09IHVuZGVmaW5lZCApIHtcblx0XHRyZXR1cm4gdmFsO1xuXHR9XG5cblx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG59O1xuXG5maW5kLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHtcblx0dGhyb3cgbmV3IEVycm9yKCBcIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246IFwiICsgbXNnICk7XG59O1xuXG4vKipcbiAqIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAqIEBwYXJhbSB7QXJyYXlMaWtlfSByZXN1bHRzXG4gKi9cbmpRdWVyeS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7XG5cdHZhciBlbGVtLFxuXHRcdGR1cGxpY2F0ZXMgPSBbXSxcblx0XHRqID0gMCxcblx0XHRpID0gMDtcblxuXHQvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlXG5cdC8vXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjArXG5cdC8vIFRlc3RpbmcgZm9yIGRldGVjdGluZyBkdXBsaWNhdGVzIGlzIHVucHJlZGljdGFibGUgc28gaW5zdGVhZCBhc3N1bWUgd2UgY2FuJ3Rcblx0Ly8gZGVwZW5kIG9uIGR1cGxpY2F0ZSBkZXRlY3Rpb24gaW4gYWxsIGJyb3dzZXJzIHdpdGhvdXQgYSBzdGFibGUgc29ydC5cblx0aGFzRHVwbGljYXRlID0gIXN1cHBvcnQuc29ydFN0YWJsZTtcblx0c29ydElucHV0ID0gIXN1cHBvcnQuc29ydFN0YWJsZSAmJiBzbGljZS5jYWxsKCByZXN1bHRzLCAwICk7XG5cdHNvcnQuY2FsbCggcmVzdWx0cywgc29ydE9yZGVyICk7XG5cblx0aWYgKCBoYXNEdXBsaWNhdGUgKSB7XG5cdFx0d2hpbGUgKCAoIGVsZW0gPSByZXN1bHRzWyBpKysgXSApICkge1xuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRzcGxpY2UuY2FsbCggcmVzdWx0cywgZHVwbGljYXRlc1sgaiBdLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XG5cdHNvcnRJbnB1dCA9IG51bGw7XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG5qUXVlcnkuZm4udW5pcXVlU29ydCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS51bmlxdWVTb3J0KCBzbGljZS5hcHBseSggdGhpcyApICkgKTtcbn07XG5cbkV4cHIgPSBqUXVlcnkuZXhwciA9IHtcblxuXHQvLyBDYW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVzZXJcblx0Y2FjaGVMZW5ndGg6IDUwLFxuXG5cdGNyZWF0ZVBzZXVkbzogbWFya0Z1bmN0aW9uLFxuXG5cdG1hdGNoOiBtYXRjaEV4cHIsXG5cblx0YXR0ckhhbmRsZToge30sXG5cblx0ZmluZDoge30sXG5cblx0cmVsYXRpdmU6IHtcblx0XHRcIj5cIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiIFwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIgfSxcblx0XHRcIitcIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCJ+XCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiIH1cblx0fSxcblxuXHRwcmVGaWx0ZXI6IHtcblx0XHRBVFRSOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaFsgMSBdID0gbWF0Y2hbIDEgXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHQvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBvciB1bnF1b3RlZFxuXHRcdFx0bWF0Y2hbIDMgXSA9ICggbWF0Y2hbIDMgXSB8fCBtYXRjaFsgNCBdIHx8IG1hdGNoWyA1IF0gfHwgXCJcIiApXG5cdFx0XHRcdC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHRpZiAoIG1hdGNoWyAyIF0gPT09IFwifj1cIiApIHtcblx0XHRcdFx0bWF0Y2hbIDMgXSA9IFwiIFwiICsgbWF0Y2hbIDMgXSArIFwiIFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDQgKTtcblx0XHR9LFxuXG5cdFx0Q0hJTEQ6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblxuXHRcdFx0LyogbWF0Y2hlcyBmcm9tIG1hdGNoRXhwcltcIkNISUxEXCJdXG5cdFx0XHRcdDEgdHlwZSAob25seXxudGh8Li4uKVxuXHRcdFx0XHQyIHdoYXQgKGNoaWxkfG9mLXR5cGUpXG5cdFx0XHRcdDMgYXJndW1lbnQgKGV2ZW58b2RkfFxcZCp8XFxkKm4oWystXVxcZCspP3wuLi4pXG5cdFx0XHRcdDQgeG4tY29tcG9uZW50IG9mIHhuK3kgYXJndW1lbnQgKFsrLV0/XFxkKm58KVxuXHRcdFx0XHQ1IHNpZ24gb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDYgeCBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NyBzaWduIG9mIHktY29tcG9uZW50XG5cdFx0XHRcdDggeSBvZiB5LWNvbXBvbmVudFxuXHRcdFx0Ki9cblx0XHRcdG1hdGNoWyAxIF0gPSBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdGlmICggbWF0Y2hbIDEgXS5zbGljZSggMCwgMyApID09PSBcIm50aFwiICkge1xuXG5cdFx0XHRcdC8vIG50aC0qIHJlcXVpcmVzIGFyZ3VtZW50XG5cdFx0XHRcdGlmICggIW1hdGNoWyAzIF0gKSB7XG5cdFx0XHRcdFx0ZmluZC5lcnJvciggbWF0Y2hbIDAgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxEXG5cdFx0XHRcdC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzFcblx0XHRcdFx0bWF0Y2hbIDQgXSA9ICsoIG1hdGNoWyA0IF0gP1xuXHRcdFx0XHRcdG1hdGNoWyA1IF0gKyAoIG1hdGNoWyA2IF0gfHwgMSApIDpcblx0XHRcdFx0XHQyICogKCBtYXRjaFsgMyBdID09PSBcImV2ZW5cIiB8fCBtYXRjaFsgMyBdID09PSBcIm9kZFwiIClcblx0XHRcdFx0KTtcblx0XHRcdFx0bWF0Y2hbIDUgXSA9ICsoICggbWF0Y2hbIDcgXSArIG1hdGNoWyA4IF0gKSB8fCBtYXRjaFsgMyBdID09PSBcIm9kZFwiICk7XG5cblx0XHRcdC8vIG90aGVyIHR5cGVzIHByb2hpYml0IGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0ZmluZC5lcnJvciggbWF0Y2hbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0fSxcblxuXHRcdFBTRVVETzogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0dmFyIGV4Y2Vzcyxcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbIDYgXSAmJiBtYXRjaFsgMiBdO1xuXG5cdFx0XHRpZiAoIG1hdGNoRXhwci5DSElMRC50ZXN0KCBtYXRjaFsgMCBdICkgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBY2NlcHQgcXVvdGVkIGFyZ3VtZW50cyBhcy1pc1xuXHRcdFx0aWYgKCBtYXRjaFsgMyBdICkge1xuXHRcdFx0XHRtYXRjaFsgMiBdID0gbWF0Y2hbIDQgXSB8fCBtYXRjaFsgNSBdIHx8IFwiXCI7XG5cblx0XHRcdC8vIFN0cmlwIGV4Y2VzcyBjaGFyYWN0ZXJzIGZyb20gdW5xdW90ZWQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVvdGVkICkgJiZcblxuXHRcdFx0XHQvLyBHZXQgZXhjZXNzIGZyb20gdG9rZW5pemUgKHJlY3Vyc2l2ZWx5KVxuXHRcdFx0XHQoIGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApICkgJiZcblxuXHRcdFx0XHQvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXNcblx0XHRcdFx0KCBleGNlc3MgPSB1bnF1b3RlZC5pbmRleE9mKCBcIilcIiwgdW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzICkgLSB1bnF1b3RlZC5sZW5ndGggKSApIHtcblxuXHRcdFx0XHQvLyBleGNlc3MgaXMgYSBuZWdhdGl2ZSBpbmRleFxuXHRcdFx0XHRtYXRjaFsgMCBdID0gbWF0Y2hbIDAgXS5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHRcdG1hdGNoWyAyIF0gPSB1bnF1b3RlZC5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldHVybiBvbmx5IGNhcHR1cmVzIG5lZWRlZCBieSB0aGUgcHNldWRvIGZpbHRlciBtZXRob2QgKHR5cGUgYW5kIGFyZ3VtZW50KVxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCAzICk7XG5cdFx0fVxuXHR9LFxuXG5cdGZpbHRlcjoge1xuXG5cdFx0VEFHOiBmdW5jdGlvbiggbm9kZU5hbWVTZWxlY3RvciApIHtcblx0XHRcdHZhciBleHBlY3RlZE5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiBub2RlTmFtZSggZWxlbSwgZXhwZWN0ZWROb2RlTmFtZSApO1xuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRDTEFTUzogZnVuY3Rpb24oIGNsYXNzTmFtZSApIHtcblx0XHRcdHZhciBwYXR0ZXJuID0gY2xhc3NDYWNoZVsgY2xhc3NOYW1lICsgXCIgXCIgXTtcblxuXHRcdFx0cmV0dXJuIHBhdHRlcm4gfHxcblx0XHRcdFx0KCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIGNsYXNzTmFtZSArXG5cdFx0XHRcdFx0XCIoXCIgKyB3aGl0ZXNwYWNlICsgXCJ8JClcIiApICkgJiZcblx0XHRcdFx0Y2xhc3NDYWNoZSggY2xhc3NOYW1lLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGF0dGVybi50ZXN0KFxuXHRcdFx0XHRcdFx0dHlwZW9mIGVsZW0uY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsZW0uY2xhc3NOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBcImNsYXNzXCIgKSB8fFxuXHRcdFx0XHRcdFx0XHRcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSApO1xuXHRcdH0sXG5cblx0XHRBVFRSOiBmdW5jdGlvbiggbmFtZSwgb3BlcmF0b3IsIGNoZWNrICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gZmluZC5hdHRyKCBlbGVtLCBuYW1lICk7XG5cblx0XHRcdFx0aWYgKCByZXN1bHQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiIT1cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoICFvcGVyYXRvciApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJlc3VsdCArPSBcIlwiO1xuXG5cdFx0XHRcdGlmICggb3BlcmF0b3IgPT09IFwiPVwiICkge1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHQgPT09IGNoZWNrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggb3BlcmF0b3IgPT09IFwiIT1cIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0ICE9PSBjaGVjaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcIl49XCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID09PSAwO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggb3BlcmF0b3IgPT09IFwiKj1cIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPiAtMTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcIiQ9XCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNoZWNrICYmIHJlc3VsdC5zbGljZSggLWNoZWNrLmxlbmd0aCApID09PSBjaGVjaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcIn49XCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuICggXCIgXCIgKyByZXN1bHQucmVwbGFjZSggcndoaXRlc3BhY2UsIFwiIFwiICkgKyBcIiBcIiApXG5cdFx0XHRcdFx0XHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggb3BlcmF0b3IgPT09IFwifD1cIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyBcIi1cIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdENISUxEOiBmdW5jdGlvbiggdHlwZSwgd2hhdCwgX2FyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHtcblx0XHRcdHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09IFwibnRoXCIsXG5cdFx0XHRcdGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSBcImxhc3RcIixcblx0XHRcdFx0b2ZUeXBlID0gd2hhdCA9PT0gXCJvZi10eXBlXCI7XG5cblx0XHRcdHJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID9cblxuXHRcdFx0XHQvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdFx0fSA6XG5cblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0LFxuXHRcdFx0XHRcdFx0ZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gXCJuZXh0U2libGluZ1wiIDogXCJwcmV2aW91c1NpYmxpbmdcIixcblx0XHRcdFx0XHRcdHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSxcblx0XHRcdFx0XHRcdG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0dXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsXG5cdFx0XHRcdFx0XHRkaWZmID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHRcdFx0aWYgKCBzaW1wbGUgKSB7XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggZGlyICkge1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gbm9kZVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZU5hbWUoIG5vZGUsIG5hbWUgKSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdC8vIFJldmVyc2UgZGlyZWN0aW9uIGZvciA6b25seS0qIChpZiB3ZSBoYXZlbid0IHlldCBkb25lIHNvKVxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0ID0gZGlyID0gdHlwZSA9PT0gXCJvbmx5XCIgJiYgIXN0YXJ0ICYmIFwibmV4dFNpYmxpbmdcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0c3RhcnQgPSBbIGZvcndhcmQgPyBwYXJlbnQuZmlyc3RDaGlsZCA6IHBhcmVudC5sYXN0Q2hpbGQgXTtcblxuXHRcdFx0XHRcdFx0Ly8gbm9uLXhtbCA6bnRoLWNoaWxkKC4uLikgc3RvcmVzIGNhY2hlIGRhdGEgb24gYHBhcmVudGBcblx0XHRcdFx0XHRcdGlmICggZm9yd2FyZCAmJiB1c2VDYWNoZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTZWVrIGBlbGVtYCBmcm9tIGEgcHJldmlvdXNseS1jYWNoZWQgaW5kZXhcblx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IHBhcmVudFsgZXhwYW5kbyBdIHx8ICggcGFyZW50WyBleHBhbmRvIF0gPSB7fSApO1xuXHRcdFx0XHRcdFx0XHRjYWNoZSA9IG91dGVyQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4ICYmIGNhY2hlWyAyIF07XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBub2RlSW5kZXggJiYgcGFyZW50LmNoaWxkTm9kZXNbIG5vZGVJbmRleCBdO1xuXG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHQoIGRpZmYgPSBub2RlSW5kZXggPSAwICkgfHwgc3RhcnQucG9wKCkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4ZXMgb24gYHBhcmVudGAgYW5kIGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlLm5vZGVUeXBlID09PSAxICYmICsrZGlmZiAmJiBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFVzZSBwcmV2aW91c2x5LWNhY2hlZCBlbGVtZW50IGluZGV4IGlmIGF2YWlsYWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBlbGVtWyBleHBhbmRvIF0gfHwgKCBlbGVtWyBleHBhbmRvIF0gPSB7fSApO1xuXHRcdFx0XHRcdFx0XHRcdGNhY2hlID0gb3V0ZXJDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4O1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8geG1sIDpudGgtY2hpbGQoLi4uKVxuXHRcdFx0XHRcdFx0XHQvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pXG5cdFx0XHRcdFx0XHRcdGlmICggZGlmZiA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBVc2UgdGhlIHNhbWUgbG9vcCBhcyBhYm92ZSB0byBzZWVrIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KCBkaWZmID0gbm9kZUluZGV4ID0gMCApIHx8IHN0YXJ0LnBvcCgpICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmICggKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlTmFtZSggbm9kZSwgbmFtZSApIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCsrZGlmZiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBDYWNoZSB0aGUgaW5kZXggb2YgZWFjaCBlbmNvdW50ZXJlZCBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KCBub2RlWyBleHBhbmRvIF0gPSB7fSApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplXG5cdFx0XHRcdFx0XHRkaWZmIC09IGxhc3Q7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFBTRVVETzogZnVuY3Rpb24oIHBzZXVkbywgYXJndW1lbnQgKSB7XG5cblx0XHRcdC8vIHBzZXVkby1jbGFzcyBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXNcblx0XHRcdC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXG5cdFx0XHR2YXIgYXJncyxcblx0XHRcdFx0Zm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHRcdGZpbmQuZXJyb3IoIFwidW5zdXBwb3J0ZWQgcHNldWRvOiBcIiArIHBzZXVkbyApO1xuXG5cdFx0XHQvLyBUaGUgdXNlciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBpbmRpY2F0ZSB0aGF0XG5cdFx0XHQvLyBhcmd1bWVudHMgYXJlIG5lZWRlZCB0byBjcmVhdGUgdGhlIGZpbHRlciBmdW5jdGlvblxuXHRcdFx0Ly8ganVzdCBhcyBqUXVlcnkgZG9lc1xuXHRcdFx0aWYgKCBmblsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRyZXR1cm4gZm4oIGFyZ3VtZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEJ1dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlc1xuXHRcdFx0aWYgKCBmbi5sZW5ndGggPiAxICkge1xuXHRcdFx0XHRhcmdzID0gWyBwc2V1ZG8sIHBzZXVkbywgXCJcIiwgYXJndW1lbnQgXTtcblx0XHRcdFx0cmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRcdFx0bWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdFx0XHRcdHZhciBpZHgsXG5cdFx0XHRcdFx0XHRcdG1hdGNoZWQgPSBmbiggc2VlZCwgYXJndW1lbnQgKSxcblx0XHRcdFx0XHRcdFx0aSA9IG1hdGNoZWQubGVuZ3RoO1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlkeCA9IGluZGV4T2YuY2FsbCggc2VlZCwgbWF0Y2hlZFsgaSBdICk7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkWyBpIF0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZuO1xuXHRcdH1cblx0fSxcblxuXHRwc2V1ZG9zOiB7XG5cblx0XHQvLyBQb3RlbnRpYWxseSBjb21wbGV4IHBzZXVkb3Ncblx0XHRub3Q6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXG5cdFx0XHQvLyBUcmltIHRoZSBzZWxlY3RvciBwYXNzZWQgdG8gY29tcGlsZVxuXHRcdFx0Ly8gdG8gYXZvaWQgdHJlYXRpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmdcblx0XHRcdC8vIHNwYWNlcyBhcyBjb21iaW5hdG9yc1xuXHRcdFx0dmFyIGlucHV0ID0gW10sXG5cdFx0XHRcdHJlc3VsdHMgPSBbXSxcblx0XHRcdFx0bWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltQ1NTLCBcIiQxXCIgKSApO1xuXG5cdFx0XHRyZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBdID9cblx0XHRcdFx0bWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcywgX2NvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0XHRcdHVubWF0Y2hlZCA9IG1hdGNoZXIoIHNlZWQsIG51bGwsIHhtbCwgW10gKSxcblx0XHRcdFx0XHRcdGkgPSBzZWVkLmxlbmd0aDtcblxuXHRcdFx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hlZCBieSBgbWF0Y2hlcmBcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKCBlbGVtID0gdW5tYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0c2VlZFsgaSBdID0gISggbWF0Y2hlc1sgaSBdID0gZWxlbSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApIDpcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0aW5wdXRbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0bWF0Y2hlciggaW5wdXQsIG51bGwsIHhtbCwgcmVzdWx0cyApO1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3Qga2VlcCB0aGUgZWxlbWVudFxuXHRcdFx0XHRcdC8vIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvaXNzdWVzLzI5OSlcblx0XHRcdFx0XHRpbnB1dFsgMCBdID0gbnVsbDtcblx0XHRcdFx0XHRyZXR1cm4gIXJlc3VsdHMucG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0aGFzOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGZpbmQoIHNlbGVjdG9yLCBlbGVtICkubGVuZ3RoID4gMDtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0Y29udGFpbnM6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGpRdWVyeS50ZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0Ly8gXCJXaGV0aGVyIGFuIGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQgYnkgYSA6bGFuZygpIHNlbGVjdG9yXG5cdFx0Ly8gaXMgYmFzZWQgc29sZWx5IG9uIHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWVcblx0XHQvLyBiZWluZyBlcXVhbCB0byB0aGUgaWRlbnRpZmllciBDLFxuXHRcdC8vIG9yIGJlZ2lubmluZyB3aXRoIHRoZSBpZGVudGlmaWVyIEMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgXCItXCIuXG5cdFx0Ly8gVGhlIG1hdGNoaW5nIG9mIEMgYWdhaW5zdCB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlIGlzIHBlcmZvcm1lZCBjYXNlLWluc2Vuc2l0aXZlbHkuXG5cdFx0Ly8gVGhlIGlkZW50aWZpZXIgQyBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgdmFsaWQgbGFuZ3VhZ2UgbmFtZS5cIlxuXHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvXG5cdFx0bGFuZzogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggbGFuZyApIHtcblxuXHRcdFx0Ly8gbGFuZyB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclxuXHRcdFx0aWYgKCAhcmlkZW50aWZpZXIudGVzdCggbGFuZyB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdGZpbmQuZXJyb3IoIFwidW5zdXBwb3J0ZWQgbGFuZzogXCIgKyBsYW5nICk7XG5cdFx0XHR9XG5cdFx0XHRsYW5nID0gbGFuZy5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBlbGVtTGFuZztcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtTGFuZyA9IGRvY3VtZW50SXNIVE1MID9cblx0XHRcdFx0XHRcdGVsZW0ubGFuZyA6XG5cdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggXCJ4bWw6bGFuZ1wiICkgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoIFwibGFuZ1wiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0ZWxlbUxhbmcgPSBlbGVtTGFuZy50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1MYW5nID09PSBsYW5nIHx8IGVsZW1MYW5nLmluZGV4T2YoIGxhbmcgKyBcIi1cIiApID09PSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSB3aGlsZSAoICggZWxlbSA9IGVsZW0ucGFyZW50Tm9kZSApICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHQvLyBNaXNjZWxsYW5lb3VzXG5cdFx0dGFyZ2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRcdFx0cmV0dXJuIGhhc2ggJiYgaGFzaC5zbGljZSggMSApID09PSBlbGVtLmlkO1xuXHRcdH0sXG5cblx0XHRyb290OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2N1bWVudEVsZW1lbnQ7XG5cdFx0fSxcblxuXHRcdGZvY3VzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBzYWZlQWN0aXZlRWxlbWVudCgpICYmXG5cdFx0XHRcdGRvY3VtZW50Lmhhc0ZvY3VzKCkgJiZcblx0XHRcdFx0ISEoIGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXggKTtcblx0XHR9LFxuXG5cdFx0Ly8gQm9vbGVhbiBwcm9wZXJ0aWVzXG5cdFx0ZW5hYmxlZDogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGZhbHNlICksXG5cdFx0ZGlzYWJsZWQ6IGNyZWF0ZURpc2FibGVkUHNldWRvKCB0cnVlICksXG5cblx0XHRjaGVja2VkOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdHJldHVybiAoIG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSAmJiAhIWVsZW0uY2hlY2tlZCApIHx8XG5cdFx0XHRcdCggbm9kZU5hbWUoIGVsZW0sIFwib3B0aW9uXCIgKSAmJiAhIWVsZW0uc2VsZWN0ZWQgKTtcblx0XHR9LFxuXG5cdFx0c2VsZWN0ZWQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTExK1xuXHRcdFx0Ly8gQWNjZXNzaW5nIHRoZSBzZWxlY3RlZEluZGV4IHByb3BlcnR5XG5cdFx0XHQvLyBmb3JjZXMgdGhlIGJyb3dzZXIgdG8gdHJlYXQgdGhlIGRlZmF1bHQgb3B0aW9uIGFzXG5cdFx0XHQvLyBzZWxlY3RlZCB3aGVuIGluIGFuIG9wdGdyb3VwLlxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0XHRcdFx0ZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlO1xuXHRcdH0sXG5cblx0XHQvLyBDb250ZW50c1xuXHRcdGVtcHR5OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvXG5cdFx0XHQvLyA6ZW1wdHkgaXMgbmVnYXRlZCBieSBlbGVtZW50ICgxKSBvciBjb250ZW50IG5vZGVzICh0ZXh0OiAzOyBjZGF0YTogNDsgZW50aXR5IHJlZjogNSksXG5cdFx0XHQvLyAgIGJ1dCBub3QgYnkgb3RoZXJzIChjb21tZW50OiA4OyBwcm9jZXNzaW5nIGluc3RydWN0aW9uOiA3OyBldGMuKVxuXHRcdFx0Ly8gbm9kZVR5cGUgPCA2IHdvcmtzIGJlY2F1c2UgYXR0cmlidXRlcyAoMikgZG8gbm90IGFwcGVhciBhcyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA8IDYgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0cGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAhRXhwci5wc2V1ZG9zLmVtcHR5KCBlbGVtICk7XG5cdFx0fSxcblxuXHRcdC8vIEVsZW1lbnQvaW5wdXQgdHlwZXNcblx0XHRoZWFkZXI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRpbnB1dDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gcmlucHV0cy50ZXN0KCBlbGVtLm5vZGVOYW1lICk7XG5cdFx0fSxcblxuXHRcdGJ1dHRvbjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICYmIGVsZW0udHlwZSA9PT0gXCJidXR0b25cIiB8fFxuXHRcdFx0XHRub2RlTmFtZSggZWxlbSwgXCJidXR0b25cIiApO1xuXHRcdH0sXG5cblx0XHR0ZXh0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBhdHRyO1xuXHRcdFx0cmV0dXJuIG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSAmJiBlbGVtLnR5cGUgPT09IFwidGV4dFwiICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDEwIG9ubHlcblx0XHRcdFx0Ly8gTmV3IEhUTUw1IGF0dHJpYnV0ZSB2YWx1ZXMgKGUuZy4sIFwic2VhcmNoXCIpIGFwcGVhclxuXHRcdFx0XHQvLyB3aXRoIGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCJcblx0XHRcdFx0KCAoIGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSApID09IG51bGwgfHxcblx0XHRcdFx0XHRhdHRyLnRvTG93ZXJDYXNlKCkgPT09IFwidGV4dFwiICk7XG5cdFx0fSxcblxuXHRcdC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb25cblx0XHRmaXJzdDogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gWyAwIF07XG5cdFx0fSApLFxuXG5cdFx0bGFzdDogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIF9tYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHJldHVybiBbIGxlbmd0aCAtIDEgXTtcblx0XHR9ICksXG5cblx0XHRlcTogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIF9tYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHRyZXR1cm4gWyBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50IF07XG5cdFx0fSApLFxuXG5cdFx0ZXZlbjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdG9kZDogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAxO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdGx0OiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGk7XG5cblx0XHRcdGlmICggYXJndW1lbnQgPCAwICkge1xuXHRcdFx0XHRpID0gYXJndW1lbnQgKyBsZW5ndGg7XG5cdFx0XHR9IGVsc2UgaWYgKCBhcmd1bWVudCA+IGxlbmd0aCApIHtcblx0XHRcdFx0aSA9IGxlbmd0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGkgPSBhcmd1bWVudDtcblx0XHRcdH1cblxuXHRcdFx0Zm9yICggOyAtLWkgPj0gMDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdGd0OiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50O1xuXHRcdFx0Zm9yICggOyArK2kgPCBsZW5ndGg7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9IClcblx0fVxufTtcblxuRXhwci5wc2V1ZG9zLm50aCA9IEV4cHIucHNldWRvcy5lcTtcblxuLy8gQWRkIGJ1dHRvbi9pbnB1dCB0eXBlIHBzZXVkb3NcbmZvciAoIGkgaW4geyByYWRpbzogdHJ1ZSwgY2hlY2tib3g6IHRydWUsIGZpbGU6IHRydWUsIHBhc3N3b3JkOiB0cnVlLCBpbWFnZTogdHJ1ZSB9ICkge1xuXHRFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUlucHV0UHNldWRvKCBpICk7XG59XG5mb3IgKCBpIGluIHsgc3VibWl0OiB0cnVlLCByZXNldDogdHJ1ZSB9ICkge1xuXHRFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUJ1dHRvblBzZXVkbyggaSApO1xufVxuXG4vLyBFYXN5IEFQSSBmb3IgY3JlYXRpbmcgbmV3IHNldEZpbHRlcnNcbmZ1bmN0aW9uIHNldEZpbHRlcnMoKSB7fVxuc2V0RmlsdGVycy5wcm90b3R5cGUgPSBFeHByLmZpbHRlcnMgPSBFeHByLnBzZXVkb3M7XG5FeHByLnNldEZpbHRlcnMgPSBuZXcgc2V0RmlsdGVycygpO1xuXG5mdW5jdGlvbiB0b2tlbml6ZSggc2VsZWN0b3IsIHBhcnNlT25seSApIHtcblx0dmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsXG5cdFx0c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycyxcblx0XHRjYWNoZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCBjYWNoZWQgKSB7XG5cdFx0cmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTtcblx0fVxuXG5cdHNvRmFyID0gc2VsZWN0b3I7XG5cdGdyb3VwcyA9IFtdO1xuXHRwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7XG5cblx0d2hpbGUgKCBzb0ZhciApIHtcblxuXHRcdC8vIENvbW1hIGFuZCBmaXJzdCBydW5cblx0XHRpZiAoICFtYXRjaGVkIHx8ICggbWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSApICkge1xuXHRcdFx0aWYgKCBtYXRjaCApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjb25zdW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZFxuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFsgMCBdLmxlbmd0aCApIHx8IHNvRmFyO1xuXHRcdFx0fVxuXHRcdFx0Z3JvdXBzLnB1c2goICggdG9rZW5zID0gW10gKSApO1xuXHRcdH1cblxuXHRcdG1hdGNoZWQgPSBmYWxzZTtcblxuXHRcdC8vIENvbWJpbmF0b3JzXG5cdFx0aWYgKCAoIG1hdGNoID0gcmxlYWRpbmdDb21iaW5hdG9yLmV4ZWMoIHNvRmFyICkgKSApIHtcblx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cblx0XHRcdFx0Ly8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlXG5cdFx0XHRcdHR5cGU6IG1hdGNoWyAwIF0ucmVwbGFjZSggcnRyaW1DU1MsIFwiIFwiIClcblx0XHRcdH0gKTtcblx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmlsdGVyc1xuXHRcdGZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7XG5cdFx0XHRpZiAoICggbWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApICkgJiYgKCAhcHJlRmlsdGVyc1sgdHlwZSBdIHx8XG5cdFx0XHRcdCggbWF0Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkgKSApICkge1xuXHRcdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblx0XHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRcdG1hdGNoZXM6IG1hdGNoXG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICFtYXRjaGVkICkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzXG5cdC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZ1xuXHQvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnNcblx0aWYgKCBwYXJzZU9ubHkgKSB7XG5cdFx0cmV0dXJuIHNvRmFyLmxlbmd0aDtcblx0fVxuXG5cdHJldHVybiBzb0ZhciA/XG5cdFx0ZmluZC5lcnJvciggc2VsZWN0b3IgKSA6XG5cblx0XHQvLyBDYWNoZSB0aGUgdG9rZW5zXG5cdFx0dG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7XG59XG5cbmZ1bmN0aW9uIHRvU2VsZWN0b3IoIHRva2VucyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0c2VsZWN0b3IgPSBcIlwiO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRzZWxlY3RvciArPSB0b2tlbnNbIGkgXS52YWx1ZTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7XG5cdHZhciBkaXIgPSBjb21iaW5hdG9yLmRpcixcblx0XHRza2lwID0gY29tYmluYXRvci5uZXh0LFxuXHRcdGtleSA9IHNraXAgfHwgZGlyLFxuXHRcdGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGtleSA9PT0gXCJwYXJlbnROb2RlXCIsXG5cdFx0ZG9uZU5hbWUgPSBkb25lKys7XG5cblx0cmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgP1xuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSA6XG5cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudHNcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIG9sZENhY2hlLCBvdXRlckNhY2hlLFxuXHRcdFx0XHRuZXdDYWNoZSA9IFsgZGlycnVucywgZG9uZU5hbWUgXTtcblxuXHRcdFx0Ly8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywgc28gdGhleSBkb24ndCBiZW5lZml0IGZyb20gY29tYmluYXRvciBjYWNoaW5nXG5cdFx0XHRpZiAoIHhtbCApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gZWxlbVsgZXhwYW5kbyBdIHx8ICggZWxlbVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0aWYgKCBza2lwICYmIG5vZGVOYW1lKCBlbGVtLCBza2lwICkgKSB7XG5cdFx0XHRcdFx0XHRcdGVsZW0gPSBlbGVtWyBkaXIgXSB8fCBlbGVtO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICggKCBvbGRDYWNoZSA9IG91dGVyQ2FjaGVbIGtleSBdICkgJiZcblx0XHRcdFx0XHRcdFx0b2xkQ2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBvbGRDYWNoZVsgMSBdID09PSBkb25lTmFtZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBc3NpZ24gdG8gbmV3Q2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKCBuZXdDYWNoZVsgMiBdID0gb2xkQ2FjaGVbIDIgXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBSZXVzZSBuZXdjYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGVbIGtleSBdID0gbmV3Q2FjaGU7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQSBtYXRjaCBtZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2UgaGF2ZSB0byBrZWVwIGNoZWNraW5nXG5cdFx0XHRcdFx0XHRcdGlmICggKCBuZXdDYWNoZVsgMiBdID0gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHtcblx0cmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgP1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1sgaSBdKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gOlxuXHRcdG1hdGNoZXJzWyAwIF07XG59XG5cbmZ1bmN0aW9uIG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0ZmluZCggc2VsZWN0b3IsIGNvbnRleHRzWyBpIF0sIHJlc3VsdHMgKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gY29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHtcblx0dmFyIGVsZW0sXG5cdFx0bmV3VW5tYXRjaGVkID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bGVuID0gdW5tYXRjaGVkLmxlbmd0aCxcblx0XHRtYXBwZWQgPSBtYXAgIT0gbnVsbDtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoICggZWxlbSA9IHVubWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRpZiAoICFmaWx0ZXIgfHwgZmlsdGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0bmV3VW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0aWYgKCBtYXBwZWQgKSB7XG5cdFx0XHRcdFx0bWFwLnB1c2goIGkgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBuZXdVbm1hdGNoZWQ7XG59XG5cbmZ1bmN0aW9uIHNldE1hdGNoZXIoIHByZUZpbHRlciwgc2VsZWN0b3IsIG1hdGNoZXIsIHBvc3RGaWx0ZXIsIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApIHtcblx0aWYgKCBwb3N0RmlsdGVyICYmICFwb3N0RmlsdGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbHRlciA9IHNldE1hdGNoZXIoIHBvc3RGaWx0ZXIgKTtcblx0fVxuXHRpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmluZGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICk7XG5cdH1cblx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHtcblx0XHR2YXIgdGVtcCwgaSwgZWxlbSwgbWF0Y2hlck91dCxcblx0XHRcdHByZU1hcCA9IFtdLFxuXHRcdFx0cG9zdE1hcCA9IFtdLFxuXHRcdFx0cHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHRcblx0XHRcdGVsZW1zID0gc2VlZCB8fFxuXHRcdFx0XHRtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciB8fCBcIipcIixcblx0XHRcdFx0XHRjb250ZXh0Lm5vZGVUeXBlID8gWyBjb250ZXh0IF0gOiBjb250ZXh0LCBbXSApLFxuXG5cdFx0XHQvLyBQcmVmaWx0ZXIgdG8gZ2V0IG1hdGNoZXIgaW5wdXQsIHByZXNlcnZpbmcgYSBtYXAgZm9yIHNlZWQtcmVzdWx0cyBzeW5jaHJvbml6YXRpb25cblx0XHRcdG1hdGNoZXJJbiA9IHByZUZpbHRlciAmJiAoIHNlZWQgfHwgIXNlbGVjdG9yICkgP1xuXHRcdFx0XHRjb25kZW5zZSggZWxlbXMsIHByZU1hcCwgcHJlRmlsdGVyLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdGVsZW1zO1xuXG5cdFx0aWYgKCBtYXRjaGVyICkge1xuXG5cdFx0XHQvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlclxuXHRcdFx0Ly8gb3IgcHJlZXhpc3RpbmcgcmVzdWx0cyxcblx0XHRcdG1hdGNoZXJPdXQgPSBwb3N0RmluZGVyIHx8ICggc2VlZCA/IHByZUZpbHRlciA6IHByZWV4aXN0aW5nIHx8IHBvc3RGaWx0ZXIgKSA/XG5cblx0XHRcdFx0Ly8gLi4uaW50ZXJtZWRpYXRlIHByb2Nlc3NpbmcgaXMgbmVjZXNzYXJ5XG5cdFx0XHRcdFtdIDpcblxuXHRcdFx0XHQvLyAuLi5vdGhlcndpc2UgdXNlIHJlc3VsdHMgZGlyZWN0bHlcblx0XHRcdFx0cmVzdWx0cztcblxuXHRcdFx0Ly8gRmluZCBwcmltYXJ5IG1hdGNoZXNcblx0XHRcdG1hdGNoZXIoIG1hdGNoZXJJbiwgbWF0Y2hlck91dCwgY29udGV4dCwgeG1sICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXJPdXQgPSBtYXRjaGVySW47XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcG9zdEZpbHRlclxuXHRcdGlmICggcG9zdEZpbHRlciApIHtcblx0XHRcdHRlbXAgPSBjb25kZW5zZSggbWF0Y2hlck91dCwgcG9zdE1hcCApO1xuXHRcdFx0cG9zdEZpbHRlciggdGVtcCwgW10sIGNvbnRleHQsIHhtbCApO1xuXG5cdFx0XHQvLyBVbi1tYXRjaCBmYWlsaW5nIGVsZW1lbnRzIGJ5IG1vdmluZyB0aGVtIGJhY2sgdG8gbWF0Y2hlckluXG5cdFx0XHRpID0gdGVtcC5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAoIGVsZW0gPSB0ZW1wWyBpIF0gKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyT3V0WyBwb3N0TWFwWyBpIF0gXSA9ICEoIG1hdGNoZXJJblsgcG9zdE1hcFsgaSBdIF0gPSBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkge1xuXHRcdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cblx0XHRcdFx0XHQvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHNcblx0XHRcdFx0XHR0ZW1wID0gW107XG5cdFx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBtYXRjaGVyT3V0WyBpIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBSZXN0b3JlIG1hdGNoZXJJbiBzaW5jZSBlbGVtIGlzIG5vdCB5ZXQgYSBmaW5hbCBtYXRjaFxuXHRcdFx0XHRcdFx0XHR0ZW1wLnB1c2goICggbWF0Y2hlckluWyBpIF0gPSBlbGVtICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKCBtYXRjaGVyT3V0ID0gW10gKSwgdGVtcCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNb3ZlIG1hdGNoZWQgZWxlbWVudHMgZnJvbSBzZWVkIHRvIHJlc3VsdHMgdG8ga2VlcCB0aGVtIHN5bmNocm9uaXplZFxuXHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtID0gbWF0Y2hlck91dFsgaSBdICkgJiZcblx0XHRcdFx0XHRcdCggdGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mLmNhbGwoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFsgaSBdICkgPiAtMSApIHtcblxuXHRcdFx0XHRcdFx0c2VlZFsgdGVtcCBdID0gISggcmVzdWx0c1sgdGVtcCBdID0gZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXJPdXQgPSBjb25kZW5zZShcblx0XHRcdFx0bWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/XG5cdFx0XHRcdFx0bWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDpcblx0XHRcdFx0XHRtYXRjaGVyT3V0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Ub2tlbnMoIHRva2VucyApIHtcblx0dmFyIGNoZWNrQ29udGV4dCwgbWF0Y2hlciwgaixcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdGxlYWRpbmdSZWxhdGl2ZSA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgMCBdLnR5cGUgXSxcblx0XHRpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbIFwiIFwiIF0sXG5cdFx0aSA9IGxlYWRpbmdSZWxhdGl2ZSA/IDEgOiAwLFxuXG5cdFx0Ly8gVGhlIGZvdW5kYXRpb25hbCBtYXRjaGVyIGVuc3VyZXMgdGhhdCBlbGVtZW50cyBhcmUgcmVhY2hhYmxlIGZyb20gdG9wLWxldmVsIGNvbnRleHQocylcblx0XHRtYXRjaENvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBjaGVja0NvbnRleHQ7XG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxuXHRcdG1hdGNoQW55Q29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggY2hlY2tDb250ZXh0LCBlbGVtICkgPiAtMTtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHR2YXIgcmV0ID0gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8IGNvbnRleHQgIT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxuXHRcdFx0XHQoIGNoZWNrQ29udGV4dCA9IGNvbnRleHQgKS5ub2RlVHlwZSA/XG5cdFx0XHRcdFx0bWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdFx0bWF0Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApO1xuXG5cdFx0XHQvLyBBdm9pZCBoYW5naW5nIG9udG8gZWxlbWVudFxuXHRcdFx0Ly8gKHNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9pc3N1ZXMvMjk5KVxuXHRcdFx0Y2hlY2tDb250ZXh0ID0gbnVsbDtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fSBdO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKCBtYXRjaGVyID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyBpIF0udHlwZSBdICkgKSB7XG5cdFx0XHRtYXRjaGVycyA9IFsgYWRkQ29tYmluYXRvciggZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksIG1hdGNoZXIgKSBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1sgaSBdLnR5cGUgXS5hcHBseSggbnVsbCwgdG9rZW5zWyBpIF0ubWF0Y2hlcyApO1xuXG5cdFx0XHQvLyBSZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0Y2hlclxuXHRcdFx0aWYgKCBtYXRjaGVyWyBleHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0Ly8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nXG5cdFx0XHRcdGogPSArK2k7XG5cdFx0XHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyBqIF0udHlwZSBdICkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzZXRNYXRjaGVyKFxuXHRcdFx0XHRcdGkgPiAxICYmIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLFxuXHRcdFx0XHRcdGkgPiAxICYmIHRvU2VsZWN0b3IoXG5cblx0XHRcdFx0XHRcdC8vIElmIHRoZSBwcmVjZWRpbmcgdG9rZW4gd2FzIGEgZGVzY2VuZGFudCBjb21iaW5hdG9yLCBpbnNlcnQgYW4gaW1wbGljaXQgYW55LWVsZW1lbnQgYCpgXG5cdFx0XHRcdFx0XHR0b2tlbnMuc2xpY2UoIDAsIGkgLSAxIClcblx0XHRcdFx0XHRcdFx0LmNvbmNhdCggeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09IFwiIFwiID8gXCIqXCIgOiBcIlwiIH0gKVxuXHRcdFx0XHRcdCkucmVwbGFjZSggcnRyaW1DU1MsIFwiJDFcIiApLFxuXHRcdFx0XHRcdG1hdGNoZXIsXG5cdFx0XHRcdFx0aSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKCB0b2tlbnMgPSB0b2tlbnMuc2xpY2UoIGogKSApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkge1xuXHR2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHtcblx0XHRcdHZhciBlbGVtLCBqLCBtYXRjaGVyLFxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxuXHRcdFx0XHRpID0gXCIwXCIsXG5cdFx0XHRcdHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcblx0XHRcdFx0Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsXG5cblx0XHRcdFx0Ly8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50cyBvciBvdXRlcm1vc3QgY29udGV4dFxuXHRcdFx0XHRlbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmluZC5UQUcoIFwiKlwiLCBvdXRlcm1vc3QgKSxcblxuXHRcdFx0XHQvLyBVc2UgaW50ZWdlciBkaXJydW5zIGlmZiB0aGlzIGlzIHRoZSBvdXRlcm1vc3QgbWF0Y2hlclxuXHRcdFx0XHRkaXJydW5zVW5pcXVlID0gKCBkaXJydW5zICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IDAuMSApLFxuXHRcdFx0XHRsZW4gPSBlbGVtcy5sZW5ndGg7XG5cblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ID09IGRvY3VtZW50IHx8IGNvbnRleHQgfHwgb3V0ZXJtb3N0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgZWxlbWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hlcnMgZGlyZWN0bHkgdG8gcmVzdWx0c1xuXHRcdFx0Ly8gU3VwcG9ydDogaU9TIDw9NyAtIDkgb25seVxuXHRcdFx0Ly8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6IFwibGVuZ3RoXCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nXG5cdFx0XHQvLyBlbGVtZW50cyBieSBpZC4gKHNlZSB0cmFjLTE0MTQyKVxuXHRcdFx0Zm9yICggOyBpICE9PSBsZW4gJiYgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBieUVsZW1lbnQgJiYgZWxlbSApIHtcblx0XHRcdFx0XHRqID0gMDtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRcdFx0aWYgKCAhY29udGV4dCAmJiBlbGVtLm93bmVyRG9jdW1lbnQgIT0gZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHRcdFx0XHRcdFx0eG1sID0gIWRvY3VtZW50SXNIVE1MO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCB8fCBkb2N1bWVudCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHB1c2guY2FsbCggcmVzdWx0cywgZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUcmFjayB1bm1hdGNoZWQgZWxlbWVudHMgZm9yIHNldCBmaWx0ZXJzXG5cdFx0XHRcdGlmICggYnlTZXQgKSB7XG5cblx0XHRcdFx0XHQvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzXG5cdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSAhbWF0Y2hlciAmJiBlbGVtICkgKSB7XG5cdFx0XHRcdFx0XHRtYXRjaGVkQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90XG5cdFx0XHRcdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0XHRcdFx0dW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gYGlgIGlzIG5vdyB0aGUgY291bnQgb2YgZWxlbWVudHMgdmlzaXRlZCBhYm92ZSwgYW5kIGFkZGluZyBpdCB0byBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gbWFrZXMgdGhlIGxhdHRlciBub25uZWdhdGl2ZS5cblx0XHRcdG1hdGNoZWRDb3VudCArPSBpO1xuXG5cdFx0XHQvLyBBcHBseSBzZXQgZmlsdGVycyB0byB1bm1hdGNoZWQgZWxlbWVudHNcblx0XHRcdC8vIE5PVEU6IFRoaXMgY2FuIGJlIHNraXBwZWQgaWYgdGhlcmUgYXJlIG5vIHVubWF0Y2hlZCBlbGVtZW50cyAoaS5lLiwgYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIGVxdWFscyBgaWApLCB1bmxlc3Mgd2UgZGlkbid0IHZpc2l0IF9hbnlfIGVsZW1lbnRzIGluIHRoZSBhYm92ZSBsb29wIGJlY2F1c2Ugd2UgaGF2ZVxuXHRcdFx0Ly8gbm8gZWxlbWVudCBtYXRjaGVycyBhbmQgbm8gc2VlZC5cblx0XHRcdC8vIEluY3JlbWVudGluZyBhbiBpbml0aWFsbHktc3RyaW5nIFwiMFwiIGBpYCBhbGxvd3MgYGlgIHRvIHJlbWFpbiBhIHN0cmluZyBvbmx5IGluIHRoYXRcblx0XHRcdC8vIGNhc2UsIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgXCIwMFwiIGBtYXRjaGVkQ291bnRgIHRoYXQgZGlmZmVycyBmcm9tIGBpYCBidXQgaXMgYWxzb1xuXHRcdFx0Ly8gbnVtZXJpY2FsbHkgemVyby5cblx0XHRcdGlmICggYnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkge1xuXHRcdFx0XHRqID0gMDtcblx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoZXIgPSBzZXRNYXRjaGVyc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyKCB1bm1hdGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBzZWVkICkge1xuXG5cdFx0XHRcdFx0Ly8gUmVpbnRlZ3JhdGUgZWxlbWVudCBtYXRjaGVzIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3Igc29ydGluZ1xuXHRcdFx0XHRcdGlmICggbWF0Y2hlZENvdW50ID4gMCApIHtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoICEoIHVubWF0Y2hlZFsgaSBdIHx8IHNldE1hdGNoZWRbIGkgXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHNldE1hdGNoZWRbIGkgXSA9IHBvcC5jYWxsKCByZXN1bHRzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBEaXNjYXJkIGluZGV4IHBsYWNlaG9sZGVyIHZhbHVlcyB0byBnZXQgb25seSBhY3R1YWwgbWF0Y2hlc1xuXHRcdFx0XHRcdHNldE1hdGNoZWQgPSBjb25kZW5zZSggc2V0TWF0Y2hlZCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQWRkIG1hdGNoZXMgdG8gcmVzdWx0c1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7XG5cblx0XHRcdFx0Ly8gU2VlZGxlc3Mgc2V0IG1hdGNoZXMgc3VjY2VlZGluZyBtdWx0aXBsZSBzdWNjZXNzZnVsIG1hdGNoZXJzIHN0aXB1bGF0ZSBzb3J0aW5nXG5cdFx0XHRcdGlmICggb3V0ZXJtb3N0ICYmICFzZWVkICYmIHNldE1hdGNoZWQubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdCggbWF0Y2hlZENvdW50ICsgc2V0TWF0Y2hlcnMubGVuZ3RoICkgPiAxICkge1xuXG5cdFx0XHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdmVycmlkZSBtYW5pcHVsYXRpb24gb2YgZ2xvYmFscyBieSBuZXN0ZWQgbWF0Y2hlcnNcblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB1bm1hdGNoZWQ7XG5cdFx0fTtcblxuXHRyZXR1cm4gYnlTZXQgP1xuXHRcdG1hcmtGdW5jdGlvbiggc3VwZXJNYXRjaGVyICkgOlxuXHRcdHN1cGVyTWF0Y2hlcjtcbn1cblxuZnVuY3Rpb24gY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHR2YXIgaSxcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxuXHRcdGVsZW1lbnRNYXRjaGVycyA9IFtdLFxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoICFjYWNoZWQgKSB7XG5cblx0XHQvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnRcblx0XHRpZiAoICFtYXRjaCApIHtcblx0XHRcdG1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0fVxuXHRcdGkgPSBtYXRjaC5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRjYWNoZWQgPSBtYXRjaGVyRnJvbVRva2VucyggbWF0Y2hbIGkgXSApO1xuXHRcdFx0aWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0c2V0TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZSggc2VsZWN0b3IsXG5cdFx0XHRtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSApO1xuXG5cdFx0Ly8gU2F2ZSBzZWxlY3RvciBhbmQgdG9rZW5pemF0aW9uXG5cdFx0Y2FjaGVkLnNlbGVjdG9yID0gc2VsZWN0b3I7XG5cdH1cblx0cmV0dXJuIGNhY2hlZDtcbn1cblxuLyoqXG4gKiBBIGxvdy1sZXZlbCBzZWxlY3Rpb24gZnVuY3Rpb24gdGhhdCB3b3JrcyB3aXRoIGpRdWVyeSdzIGNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb25zXG4gKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gc2VsZWN0b3IgQSBzZWxlY3RvciBvciBhIHByZS1jb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uIGJ1aWx0IHdpdGggalF1ZXJ5IHNlbGVjdG9yIGNvbXBpbGVcbiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGV4dFxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdHNdXG4gKiBAcGFyYW0ge0FycmF5fSBbc2VlZF0gQSBzZXQgb2YgZWxlbWVudHMgdG8gbWF0Y2ggYWdhaW5zdFxuICovXG5mdW5jdGlvbiBzZWxlY3QoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCxcblx0XHRjb21waWxlZCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICYmIHNlbGVjdG9yLFxuXHRcdG1hdGNoID0gIXNlZWQgJiYgdG9rZW5pemUoICggc2VsZWN0b3IgPSBjb21waWxlZC5zZWxlY3RvciB8fCBzZWxlY3RvciApICk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgb25seSBvbmUgc2VsZWN0b3IgaW4gdGhlIGxpc3QgYW5kIG5vIHNlZWRcblx0Ly8gKHRoZSBsYXR0ZXIgb2Ygd2hpY2ggZ3VhcmFudGVlcyB1cyBjb250ZXh0KVxuXHRpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHtcblxuXHRcdC8vIFJlZHVjZSBjb250ZXh0IGlmIHRoZSBsZWFkaW5nIGNvbXBvdW5kIHNlbGVjdG9yIGlzIGFuIElEXG5cdFx0dG9rZW5zID0gbWF0Y2hbIDAgXSA9IG1hdGNoWyAwIF0uc2xpY2UoIDAgKTtcblx0XHRpZiAoIHRva2Vucy5sZW5ndGggPiAyICYmICggdG9rZW4gPSB0b2tlbnNbIDAgXSApLnR5cGUgPT09IFwiSURcIiAmJlxuXHRcdFx0XHRjb250ZXh0Lm5vZGVUeXBlID09PSA5ICYmIGRvY3VtZW50SXNIVE1MICYmIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgMSBdLnR5cGUgXSApIHtcblxuXHRcdFx0Y29udGV4dCA9ICggRXhwci5maW5kLklEKFxuXHRcdFx0XHR0b2tlbi5tYXRjaGVzWyAwIF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSxcblx0XHRcdFx0Y29udGV4dFxuXHRcdFx0KSB8fCBbXSApWyAwIF07XG5cdFx0XHRpZiAoICFjb250ZXh0ICkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0Ly8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbFxuXHRcdFx0fSBlbHNlIGlmICggY29tcGlsZWQgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmdcblx0XHRpID0gbWF0Y2hFeHByLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID8gMCA6IHRva2Vucy5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0b2tlbiA9IHRva2Vuc1sgaSBdO1xuXG5cdFx0XHQvLyBBYm9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yXG5cdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbICggdHlwZSA9IHRva2VuLnR5cGUgKSBdICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggKCBmaW5kID0gRXhwci5maW5kWyB0eXBlIF0gKSApIHtcblxuXHRcdFx0XHQvLyBTZWFyY2gsIGV4cGFuZGluZyBjb250ZXh0IGZvciBsZWFkaW5nIHNpYmxpbmcgY29tYmluYXRvcnNcblx0XHRcdFx0aWYgKCAoIHNlZWQgPSBmaW5kKFxuXHRcdFx0XHRcdHRva2VuLm1hdGNoZXNbIDAgXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLFxuXHRcdFx0XHRcdHJzaWJsaW5nLnRlc3QoIHRva2Vuc1sgMCBdLnR5cGUgKSAmJlxuXHRcdFx0XHRcdFx0dGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0XHRcdFx0KSApICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgc2VlZCBpcyBlbXB0eSBvciBubyB0b2tlbnMgcmVtYWluLCB3ZSBjYW4gcmV0dXJuIGVhcmx5XG5cdFx0XHRcdFx0dG9rZW5zLnNwbGljZSggaSwgMSApO1xuXHRcdFx0XHRcdHNlbGVjdG9yID0gc2VlZC5sZW5ndGggJiYgdG9TZWxlY3RvciggdG9rZW5zICk7XG5cdFx0XHRcdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZWVkICk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENvbXBpbGUgYW5kIGV4ZWN1dGUgYSBmaWx0ZXJpbmcgZnVuY3Rpb24gaWYgb25lIGlzIG5vdCBwcm92aWRlZFxuXHQvLyBQcm92aWRlIGBtYXRjaGAgdG8gYXZvaWQgcmV0b2tlbml6YXRpb24gaWYgd2UgbW9kaWZpZWQgdGhlIHNlbGVjdG9yIGFib3ZlXG5cdCggY29tcGlsZWQgfHwgY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoICkgKShcblx0XHRzZWVkLFxuXHRcdGNvbnRleHQsXG5cdFx0IWRvY3VtZW50SXNIVE1MLFxuXHRcdHJlc3VsdHMsXG5cdFx0IWNvbnRleHQgfHwgcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4dFxuXHQpO1xuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuLy8gT25lLXRpbWUgYXNzaWdubWVudHNcblxuLy8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCAtIDQuMStcbi8vIFNvcnQgc3RhYmlsaXR5XG5zdXBwb3J0LnNvcnRTdGFibGUgPSBleHBhbmRvLnNwbGl0KCBcIlwiICkuc29ydCggc29ydE9yZGVyICkuam9pbiggXCJcIiApID09PSBleHBhbmRvO1xuXG4vLyBJbml0aWFsaXplIGFnYWluc3QgdGhlIGRlZmF1bHQgZG9jdW1lbnRcbnNldERvY3VtZW50KCk7XG5cbi8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgLSA0LjErXG4vLyBEZXRhY2hlZCBub2RlcyBjb25mb3VuZGluZ2x5IGZvbGxvdyAqZWFjaCBvdGhlcipcbnN1cHBvcnQuc29ydERldGFjaGVkID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cblx0Ly8gU2hvdWxkIHJldHVybiAxLCBidXQgcmV0dXJucyA0IChmb2xsb3dpbmcpXG5cdHJldHVybiBlbC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJmaWVsZHNldFwiICkgKSAmIDE7XG59ICk7XG5cbmpRdWVyeS5maW5kID0gZmluZDtcblxuLy8gRGVwcmVjYXRlZFxualF1ZXJ5LmV4cHJbIFwiOlwiIF0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zO1xualF1ZXJ5LnVuaXF1ZSA9IGpRdWVyeS51bmlxdWVTb3J0O1xuXG4vLyBUaGVzZSBoYXZlIGFsd2F5cyBiZWVuIHByaXZhdGUsIGJ1dCB0aGV5IHVzZWQgdG8gYmUgZG9jdW1lbnRlZCBhcyBwYXJ0IG9mXG4vLyBTaXp6bGUgc28gbGV0J3MgbWFpbnRhaW4gdGhlbSBmb3Igbm93IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBwdXJwb3Nlcy5cbmZpbmQuY29tcGlsZSA9IGNvbXBpbGU7XG5maW5kLnNlbGVjdCA9IHNlbGVjdDtcbmZpbmQuc2V0RG9jdW1lbnQgPSBzZXREb2N1bWVudDtcbmZpbmQudG9rZW5pemUgPSB0b2tlbml6ZTtcblxuZmluZC5lc2NhcGUgPSBqUXVlcnkuZXNjYXBlU2VsZWN0b3I7XG5maW5kLmdldFRleHQgPSBqUXVlcnkudGV4dDtcbmZpbmQuaXNYTUwgPSBqUXVlcnkuaXNYTUxEb2M7XG5maW5kLnNlbGVjdG9ycyA9IGpRdWVyeS5leHByO1xuZmluZC5zdXBwb3J0ID0galF1ZXJ5LnN1cHBvcnQ7XG5maW5kLnVuaXF1ZVNvcnQgPSBqUXVlcnkudW5pcXVlU29ydDtcblxuXHQvKiBlc2xpbnQtZW5hYmxlICovXG5cbn0gKSgpO1xuXG5cbnZhciBkaXIgPSBmdW5jdGlvbiggZWxlbSwgZGlyLCB1bnRpbCApIHtcblx0dmFyIG1hdGNoZWQgPSBbXSxcblx0XHR0cnVuY2F0ZSA9IHVudGlsICE9PSB1bmRlZmluZWQ7XG5cblx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICYmIGVsZW0ubm9kZVR5cGUgIT09IDkgKSB7XG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0aWYgKCB0cnVuY2F0ZSAmJiBqUXVlcnkoIGVsZW0gKS5pcyggdW50aWwgKSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRtYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBzaWJsaW5ncyA9IGZ1bmN0aW9uKCBuLCBlbGVtICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdO1xuXG5cdGZvciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7XG5cdFx0aWYgKCBuLm5vZGVUeXBlID09PSAxICYmIG4gIT09IGVsZW0gKSB7XG5cdFx0XHRtYXRjaGVkLnB1c2goIG4gKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHJuZWVkc0NvbnRleHQgPSBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7XG5cbnZhciByc2luZ2xlVGFnID0gKCAvXjwoW2Etel1bXlxcL1xcMD46XFx4MjBcXHRcXHJcXG5cXGZdKilbXFx4MjBcXHRcXHJcXG5cXGZdKlxcLz8+KD86PFxcL1xcMT58KSQvaSApO1xuXG5cblxuLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVyIGFuZCBub3RcbmZ1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwgbm90ICkge1xuXHRpZiAoIGlzRnVuY3Rpb24oIHF1YWxpZmllciApICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuICEhcXVhbGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIFNpbmdsZSBlbGVtZW50XG5cdGlmICggcXVhbGlmaWVyLm5vZGVUeXBlICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggZWxlbSA9PT0gcXVhbGlmaWVyICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBBcnJheWxpa2Ugb2YgZWxlbWVudHMgKGpRdWVyeSwgYXJndW1lbnRzLCBBcnJheSlcblx0aWYgKCB0eXBlb2YgcXVhbGlmaWVyICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggaW5kZXhPZi5jYWxsKCBxdWFsaWZpZXIsIGVsZW0gKSA+IC0xICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBGaWx0ZXJlZCBkaXJlY3RseSBmb3IgYm90aCBzaW1wbGUgYW5kIGNvbXBsZXggc2VsZWN0b3JzXG5cdHJldHVybiBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzLCBub3QgKTtcbn1cblxualF1ZXJ5LmZpbHRlciA9IGZ1bmN0aW9uKCBleHByLCBlbGVtcywgbm90ICkge1xuXHR2YXIgZWxlbSA9IGVsZW1zWyAwIF07XG5cblx0aWYgKCBub3QgKSB7XG5cdFx0ZXhwciA9IFwiOm5vdChcIiArIGV4cHIgKyBcIilcIjtcblx0fVxuXG5cdGlmICggZWxlbXMubGVuZ3RoID09PSAxICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZWxlbSwgZXhwciApID8gWyBlbGVtIF0gOiBbXTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzKCBleHByLCBqUXVlcnkuZ3JlcCggZWxlbXMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxO1xuXHR9ICkgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmluZDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBpLCByZXQsXG5cdFx0XHRsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdHNlbGYgPSB0aGlzO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCBzZWxmWyBpIF0sIHRoaXMgKSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApICk7XG5cdFx0fVxuXG5cdFx0cmV0ID0gdGhpcy5wdXNoU3RhY2soIFtdICk7XG5cblx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQoIHNlbGVjdG9yLCBzZWxmWyBpIF0sIHJldCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsZW4gPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIHJldCApIDogcmV0O1xuXHR9LFxuXHRmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIGZhbHNlICkgKTtcblx0fSxcblx0bm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCB0cnVlICkgKTtcblx0fSxcblx0aXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gISF3aW5ub3coXG5cdFx0XHR0aGlzLFxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgcG9zaXRpb25hbC9yZWxhdGl2ZSBzZWxlY3RvciwgY2hlY2sgbWVtYmVyc2hpcCBpbiB0aGUgcmV0dXJuZWQgc2V0XG5cdFx0XHQvLyBzbyAkKFwicDpmaXJzdFwiKS5pcyhcInA6bGFzdFwiKSB3b24ndCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0d28gXCJwXCIuXG5cdFx0XHR0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgJiYgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID9cblx0XHRcdFx0alF1ZXJ5KCBzZWxlY3RvciApIDpcblx0XHRcdFx0c2VsZWN0b3IgfHwgW10sXG5cdFx0XHRmYWxzZVxuXHRcdCkubGVuZ3RoO1xuXHR9XG59ICk7XG5cblxuLy8gSW5pdGlhbGl6ZSBhIGpRdWVyeSBvYmplY3RcblxuXG4vLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudClcbnZhciByb290alF1ZXJ5LFxuXG5cdC8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzXG5cdC8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNTIHZpYSBsb2NhdGlvbi5oYXNoICh0cmFjLTk1MjEpXG5cdC8vIFN0cmljdCBIVE1MIHJlY29nbml0aW9uICh0cmFjLTExMjkwOiBtdXN0IHN0YXJ0IHdpdGggPClcblx0Ly8gU2hvcnRjdXQgc2ltcGxlICNpZCBjYXNlIGZvciBzcGVlZFxuXHRycXVpY2tFeHByID0gL14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKykpJC8sXG5cblx0aW5pdCA9IGpRdWVyeS5mbi5pbml0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290ICkge1xuXHRcdHZhciBtYXRjaCwgZWxlbTtcblxuXHRcdC8vIEhBTkRMRTogJChcIlwiKSwgJChudWxsKSwgJCh1bmRlZmluZWQpLCAkKGZhbHNlKVxuXHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Ly8gTWV0aG9kIGluaXQoKSBhY2NlcHRzIGFuIGFsdGVybmF0ZSByb290alF1ZXJ5XG5cdFx0Ly8gc28gbWlncmF0ZSBjYW4gc3VwcG9ydCBqUXVlcnkuc3ViIChnaC0yMTAxKVxuXHRcdHJvb3QgPSByb290IHx8IHJvb3RqUXVlcnk7XG5cblx0XHQvLyBIYW5kbGUgSFRNTCBzdHJpbmdzXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRpZiAoIHNlbGVjdG9yWyAwIF0gPT09IFwiPFwiICYmXG5cdFx0XHRcdHNlbGVjdG9yWyBzZWxlY3Rvci5sZW5ndGggLSAxIF0gPT09IFwiPlwiICYmXG5cdFx0XHRcdHNlbGVjdG9yLmxlbmd0aCA+PSAzICkge1xuXG5cdFx0XHRcdC8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrXG5cdFx0XHRcdG1hdGNoID0gWyBudWxsLCBzZWxlY3RvciwgbnVsbCBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8gY29udGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZFxuXHRcdFx0aWYgKCBtYXRjaCAmJiAoIG1hdGNoWyAxIF0gfHwgIWNvbnRleHQgKSApIHtcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCkgLT4gJChhcnJheSlcblx0XHRcdFx0aWYgKCBtYXRjaFsgMSBdICkge1xuXHRcdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFsgMCBdIDogY29udGV4dDtcblxuXHRcdFx0XHRcdC8vIE9wdGlvbiB0byBydW4gc2NyaXB0cyBpcyB0cnVlIGZvciBiYWNrLWNvbXBhdFxuXHRcdFx0XHRcdC8vIEludGVudGlvbmFsbHkgbGV0IHRoZSBlcnJvciBiZSB0aHJvd24gaWYgcGFyc2VIVE1MIGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLCBqUXVlcnkucGFyc2VIVE1MKFxuXHRcdFx0XHRcdFx0bWF0Y2hbIDEgXSxcblx0XHRcdFx0XHRcdGNvbnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogZG9jdW1lbnQsXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KSApO1xuXG5cdFx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwsIHByb3BzKVxuXHRcdFx0XHRcdGlmICggcnNpbmdsZVRhZy50ZXN0KCBtYXRjaFsgMSBdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRleHQgKSApIHtcblx0XHRcdFx0XHRcdGZvciAoIG1hdGNoIGluIGNvbnRleHQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUHJvcGVydGllcyBvZiBjb250ZXh0IGFyZSBjYWxsZWQgYXMgbWV0aG9kcyBpZiBwb3NzaWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHRoaXNbIG1hdGNoIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzWyBtYXRjaCBdKCBjb250ZXh0WyBtYXRjaCBdICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIG90aGVyd2lzZSBzZXQgYXMgYXR0cmlidXRlc1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYXR0ciggbWF0Y2gsIGNvbnRleHRbIG1hdGNoIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJCgjaWQpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsgMiBdICk7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIEluamVjdCB0aGUgZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0XG5cdFx0XHRcdFx0XHR0aGlzWyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKVxuXHRcdFx0fSBlbHNlIGlmICggIWNvbnRleHQgfHwgY29udGV4dC5qcXVlcnkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGNvbnRleHQgfHwgcm9vdCApLmZpbmQoIHNlbGVjdG9yICk7XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KVxuXHRcdFx0Ly8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvciggY29udGV4dCApLmZpbmQoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHQvLyBIQU5ETEU6ICQoRE9NRWxlbWVudClcblx0XHR9IGVsc2UgaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHtcblx0XHRcdHRoaXNbIDAgXSA9IHNlbGVjdG9yO1xuXHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHQvLyBIQU5ETEU6ICQoZnVuY3Rpb24pXG5cdFx0Ly8gU2hvcnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5XG5cdFx0fSBlbHNlIGlmICggaXNGdW5jdGlvbiggc2VsZWN0b3IgKSApIHtcblx0XHRcdHJldHVybiByb290LnJlYWR5ICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRyb290LnJlYWR5KCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBFeGVjdXRlIGltbWVkaWF0ZWx5IGlmIHJlYWR5IGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdHNlbGVjdG9yKCBqUXVlcnkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IsIHRoaXMgKTtcblx0fTtcblxuLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvblxuaW5pdC5wcm90b3R5cGUgPSBqUXVlcnkuZm47XG5cbi8vIEluaXRpYWxpemUgY2VudHJhbCByZWZlcmVuY2VcbnJvb3RqUXVlcnkgPSBqUXVlcnkoIGRvY3VtZW50ICk7XG5cblxudmFyIHJwYXJlbnRzcHJldiA9IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLFxuXG5cdC8vIE1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0XG5cdGd1YXJhbnRlZWRVbmlxdWUgPSB7XG5cdFx0Y2hpbGRyZW46IHRydWUsXG5cdFx0Y29udGVudHM6IHRydWUsXG5cdFx0bmV4dDogdHJ1ZSxcblx0XHRwcmV2OiB0cnVlXG5cdH07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0aGFzOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdHZhciB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSxcblx0XHRcdGwgPSB0YXJnZXRzLmxlbmd0aDtcblxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzWyBpIF0gKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRjbG9zZXN0OiBmdW5jdGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkge1xuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGwgPSB0aGlzLmxlbmd0aCxcblx0XHRcdG1hdGNoZWQgPSBbXSxcblx0XHRcdHRhcmdldHMgPSB0eXBlb2Ygc2VsZWN0b3JzICE9PSBcInN0cmluZ1wiICYmIGpRdWVyeSggc2VsZWN0b3JzICk7XG5cblx0XHQvLyBQb3NpdGlvbmFsIHNlbGVjdG9ycyBuZXZlciBtYXRjaCwgc2luY2UgdGhlcmUncyBubyBfc2VsZWN0aW9uXyBjb250ZXh0XG5cdFx0aWYgKCAhcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSApIHtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zm9yICggY3VyID0gdGhpc1sgaSBdOyBjdXIgJiYgY3VyICE9PSBjb250ZXh0OyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblxuXHRcdFx0XHRcdC8vIEFsd2F5cyBza2lwIGRvY3VtZW50IGZyYWdtZW50c1xuXHRcdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlIDwgMTEgJiYgKCB0YXJnZXRzID9cblx0XHRcdFx0XHRcdHRhcmdldHMuaW5kZXgoIGN1ciApID4gLTEgOlxuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBwYXNzIG5vbi1lbGVtZW50cyB0byBqUXVlcnkjZmluZFxuXHRcdFx0XHRcdFx0Y3VyLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggY3VyLCBzZWxlY3RvcnMgKSApICkge1xuXG5cdFx0XHRcdFx0XHRtYXRjaGVkLnB1c2goIGN1ciApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApIDogbWF0Y2hlZCApO1xuXHR9LFxuXG5cdC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4gdGhlIHNldFxuXHRpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudFxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCB0aGlzWyAwIF0gJiYgdGhpc1sgMCBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTE7XG5cdFx0fVxuXG5cdFx0Ly8gSW5kZXggaW4gc2VsZWN0b3Jcblx0XHRpZiAoIHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggalF1ZXJ5KCBlbGVtICksIHRoaXNbIDAgXSApO1xuXHRcdH1cblxuXHRcdC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudFxuXHRcdHJldHVybiBpbmRleE9mLmNhbGwoIHRoaXMsXG5cblx0XHRcdC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZFxuXHRcdFx0ZWxlbS5qcXVlcnkgPyBlbGVtWyAwIF0gOiBlbGVtXG5cdFx0KTtcblx0fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soXG5cdFx0XHRqUXVlcnkudW5pcXVlU29ydChcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkQmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/XG5cdFx0XHR0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApXG5cdFx0KTtcblx0fVxufSApO1xuXG5mdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHtcblx0d2hpbGUgKCAoIGN1ciA9IGN1clsgZGlyIF0gKSAmJiBjdXIubm9kZVR5cGUgIT09IDEgKSB7fVxuXHRyZXR1cm4gY3VyO1xufVxuXG5qUXVlcnkuZWFjaCgge1xuXHRwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0cmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDtcblx0fSxcblx0cGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIgKTtcblx0fSxcblx0cGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiLCB1bnRpbCApO1xuXHR9LFxuXHRuZXh0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXY6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHByZXZVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTtcblx0fSxcblx0Y2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggZWxlbS5maXJzdENoaWxkICk7XG5cdH0sXG5cdGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRpZiAoIGVsZW0uY29udGVudERvY3VtZW50ICE9IG51bGwgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErXG5cdFx0XHQvLyA8b2JqZWN0PiBlbGVtZW50cyB3aXRoIG5vIGBkYXRhYCBhdHRyaWJ1dGUgaGFzIGFuIG9iamVjdFxuXHRcdFx0Ly8gYGNvbnRlbnREb2N1bWVudGAgd2l0aCBhIGBudWxsYCBwcm90b3R5cGUuXG5cdFx0XHRnZXRQcm90byggZWxlbS5jb250ZW50RG9jdW1lbnQgKSApIHtcblxuXHRcdFx0cmV0dXJuIGVsZW0uY29udGVudERvY3VtZW50O1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5LCBpT1MgNyBvbmx5LCBBbmRyb2lkIEJyb3dzZXIgPD00LjMgb25seVxuXHRcdC8vIFRyZWF0IHRoZSB0ZW1wbGF0ZSBlbGVtZW50IGFzIGEgcmVndWxhciBvbmUgaW4gYnJvd3NlcnMgdGhhdFxuXHRcdC8vIGRvbid0IHN1cHBvcnQgaXQuXG5cdFx0aWYgKCBub2RlTmFtZSggZWxlbSwgXCJ0ZW1wbGF0ZVwiICkgKSB7XG5cdFx0XHRlbGVtID0gZWxlbS5jb250ZW50IHx8IGVsZW07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIGVsZW0uY2hpbGROb2RlcyApO1xuXHR9XG59LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHVudGlsLCBzZWxlY3RvciApIHtcblx0XHR2YXIgbWF0Y2hlZCA9IGpRdWVyeS5tYXAoIHRoaXMsIGZuLCB1bnRpbCApO1xuXG5cdFx0aWYgKCBuYW1lLnNsaWNlKCAtNSApICE9PSBcIlVudGlsXCIgKSB7XG5cdFx0XHRzZWxlY3RvciA9IHVudGlsO1xuXHRcdH1cblxuXHRcdGlmICggc2VsZWN0b3IgJiYgdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0bWF0Y2hlZCA9IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBtYXRjaGVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmxlbmd0aCA+IDEgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBkdXBsaWNhdGVzXG5cdFx0XHRpZiAoICFndWFyYW50ZWVkVW5pcXVlWyBuYW1lIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldmVyc2Ugb3JkZXIgZm9yIHBhcmVudHMqIGFuZCBwcmV2LWRlcml2YXRpdmVzXG5cdFx0XHRpZiAoIHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7XG5cdFx0XHRcdG1hdGNoZWQucmV2ZXJzZSgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZCApO1xuXHR9O1xufSApO1xudmFyIHJub3RodG1sd2hpdGUgPSAoIC9bXlxceDIwXFx0XFxyXFxuXFxmXSsvZyApO1xuXG5cblxuLy8gQ29udmVydCBTdHJpbmctZm9ybWF0dGVkIG9wdGlvbnMgaW50byBPYmplY3QtZm9ybWF0dGVkIG9uZXNcbmZ1bmN0aW9uIGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSB7XG5cdHZhciBvYmplY3QgPSB7fTtcblx0alF1ZXJ5LmVhY2goIG9wdGlvbnMubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSwgZnVuY3Rpb24oIF8sIGZsYWcgKSB7XG5cdFx0b2JqZWN0WyBmbGFnIF0gPSB0cnVlO1xuXHR9ICk7XG5cdHJldHVybiBvYmplY3Q7XG59XG5cbi8qXG4gKiBDcmVhdGUgYSBjYWxsYmFjayBsaXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczpcbiAqXG4gKlx0b3B0aW9uczogYW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0aW9ucyB0aGF0IHdpbGwgY2hhbmdlIGhvd1xuICpcdFx0XHR0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVzIG9yIGEgbW9yZSB0cmFkaXRpb25hbCBvcHRpb24gb2JqZWN0XG4gKlxuICogQnkgZGVmYXVsdCBhIGNhbGxiYWNrIGxpc3Qgd2lsbCBhY3QgbGlrZSBhbiBldmVudCBjYWxsYmFjayBsaXN0IGFuZCBjYW4gYmVcbiAqIFwiZmlyZWRcIiBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBQb3NzaWJsZSBvcHRpb25zOlxuICpcbiAqXHRvbmNlOlx0XHRcdHdpbGwgZW5zdXJlIHRoZSBjYWxsYmFjayBsaXN0IGNhbiBvbmx5IGJlIGZpcmVkIG9uY2UgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0bWVtb3J5Olx0XHRcdHdpbGwga2VlcCB0cmFjayBvZiBwcmV2aW91cyB2YWx1ZXMgYW5kIHdpbGwgY2FsbCBhbnkgY2FsbGJhY2sgYWRkZWRcbiAqXHRcdFx0XHRcdGFmdGVyIHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0IFwibWVtb3JpemVkXCJcbiAqXHRcdFx0XHRcdHZhbHVlcyAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHR1bmlxdWU6XHRcdFx0d2lsbCBlbnN1cmUgYSBjYWxsYmFjayBjYW4gb25seSBiZSBhZGRlZCBvbmNlIChubyBkdXBsaWNhdGUgaW4gdGhlIGxpc3QpXG4gKlxuICpcdHN0b3BPbkZhbHNlOlx0aW50ZXJydXB0IGNhbGxpbmdzIHdoZW4gYSBjYWxsYmFjayByZXR1cm5zIGZhbHNlXG4gKlxuICovXG5qUXVlcnkuQ2FsbGJhY2tzID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0Ly8gQ29udmVydCBvcHRpb25zIGZyb20gU3RyaW5nLWZvcm1hdHRlZCB0byBPYmplY3QtZm9ybWF0dGVkIGlmIG5lZWRlZFxuXHQvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3QpXG5cdG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0Y3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIDpcblx0XHRqUXVlcnkuZXh0ZW5kKCB7fSwgb3B0aW9ucyApO1xuXG5cdHZhciAvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCBpcyBjdXJyZW50bHkgZmlyaW5nXG5cdFx0ZmlyaW5nLFxuXG5cdFx0Ly8gTGFzdCBmaXJlIHZhbHVlIGZvciBub24tZm9yZ2V0dGFibGUgbGlzdHNcblx0XHRtZW1vcnksXG5cblx0XHQvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCB3YXMgYWxyZWFkeSBmaXJlZFxuXHRcdGZpcmVkLFxuXG5cdFx0Ly8gRmxhZyB0byBwcmV2ZW50IGZpcmluZ1xuXHRcdGxvY2tlZCxcblxuXHRcdC8vIEFjdHVhbCBjYWxsYmFjayBsaXN0XG5cdFx0bGlzdCA9IFtdLFxuXG5cdFx0Ly8gUXVldWUgb2YgZXhlY3V0aW9uIGRhdGEgZm9yIHJlcGVhdGFibGUgbGlzdHNcblx0XHRxdWV1ZSA9IFtdLFxuXG5cdFx0Ly8gSW5kZXggb2YgY3VycmVudGx5IGZpcmluZyBjYWxsYmFjayAobW9kaWZpZWQgYnkgYWRkL3JlbW92ZSBhcyBuZWVkZWQpXG5cdFx0ZmlyaW5nSW5kZXggPSAtMSxcblxuXHRcdC8vIEZpcmUgY2FsbGJhY2tzXG5cdFx0ZmlyZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbmZvcmNlIHNpbmdsZS1maXJpbmdcblx0XHRcdGxvY2tlZCA9IGxvY2tlZCB8fCBvcHRpb25zLm9uY2U7XG5cblx0XHRcdC8vIEV4ZWN1dGUgY2FsbGJhY2tzIGZvciBhbGwgcGVuZGluZyBleGVjdXRpb25zLFxuXHRcdFx0Ly8gcmVzcGVjdGluZyBmaXJpbmdJbmRleCBvdmVycmlkZXMgYW5kIHJ1bnRpbWUgY2hhbmdlc1xuXHRcdFx0ZmlyZWQgPSBmaXJpbmcgPSB0cnVlO1xuXHRcdFx0Zm9yICggOyBxdWV1ZS5sZW5ndGg7IGZpcmluZ0luZGV4ID0gLTEgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRcdHdoaWxlICggKytmaXJpbmdJbmRleCA8IGxpc3QubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gUnVuIGNhbGxiYWNrIGFuZCBjaGVjayBmb3IgZWFybHkgdGVybWluYXRpb25cblx0XHRcdFx0XHRpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIG1lbW9yeVsgMCBdLCBtZW1vcnlbIDEgXSApID09PSBmYWxzZSAmJlxuXHRcdFx0XHRcdFx0b3B0aW9ucy5zdG9wT25GYWxzZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSnVtcCB0byBlbmQgYW5kIGZvcmdldCB0aGUgZGF0YSBzbyAuYWRkIGRvZXNuJ3QgcmUtZmlyZVxuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aDtcblx0XHRcdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3JnZXQgdGhlIGRhdGEgaWYgd2UncmUgZG9uZSB3aXRoIGl0XG5cdFx0XHRpZiAoICFvcHRpb25zLm1lbW9yeSApIHtcblx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGZpcmluZyA9IGZhbHNlO1xuXG5cdFx0XHQvLyBDbGVhbiB1cCBpZiB3ZSdyZSBkb25lIGZpcmluZyBmb3IgZ29vZFxuXHRcdFx0aWYgKCBsb2NrZWQgKSB7XG5cblx0XHRcdFx0Ly8gS2VlcCBhbiBlbXB0eSBsaXN0IGlmIHdlIGhhdmUgZGF0YSBmb3IgZnV0dXJlIGFkZCBjYWxsc1xuXHRcdFx0XHRpZiAoIG1lbW9yeSApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCB0aGlzIG9iamVjdCBpcyBzcGVudFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxpc3QgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0XG5cdFx0c2VsZiA9IHtcblxuXHRcdFx0Ly8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxiYWNrcyB0byB0aGUgbGlzdFxuXHRcdFx0YWRkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBtZW1vcnkgZnJvbSBhIHBhc3QgcnVuLCB3ZSBzaG91bGQgZmlyZSBhZnRlciBhZGRpbmdcblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aCAtIDE7XG5cdFx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBtZW1vcnkgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQoIGZ1bmN0aW9uIGFkZCggYXJncyApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggIW9wdGlvbnMudW5pcXVlIHx8ICFzZWxmLmhhcyggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsaXN0LnB1c2goIGFyZyApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggYXJnICYmIGFyZy5sZW5ndGggJiYgdG9UeXBlKCBhcmcgKSAhPT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEluc3BlY3QgcmVjdXJzaXZlbHlcblx0XHRcdFx0XHRcdFx0XHRhZGQoIGFyZyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0fSApKCBhcmd1bWVudHMgKTtcblxuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlzdFxuXHRcdFx0cmVtb3ZlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHR2YXIgaW5kZXg7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGluZGV4ID0galF1ZXJ5LmluQXJyYXkoIGFyZywgbGlzdCwgaW5kZXggKSApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRsaXN0LnNwbGljZSggaW5kZXgsIDEgKTtcblxuXHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGZpcmluZyBpbmRleGVzXG5cdFx0XHRcdFx0XHRpZiAoIGluZGV4IDw9IGZpcmluZ0luZGV4ICkge1xuXHRcdFx0XHRcdFx0XHRmaXJpbmdJbmRleC0tO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENoZWNrIGlmIGEgZ2l2ZW4gY2FsbGJhY2sgaXMgaW4gdGhlIGxpc3QuXG5cdFx0XHQvLyBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgcmV0dXJuIHdoZXRoZXIgb3Igbm90IGxpc3QgaGFzIGNhbGxiYWNrcyBhdHRhY2hlZC5cblx0XHRcdGhhczogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRyZXR1cm4gZm4gP1xuXHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBmbiwgbGlzdCApID4gLTEgOlxuXHRcdFx0XHRcdGxpc3QubGVuZ3RoID4gMDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3Rcblx0XHRcdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmUgYW5kIC5hZGRcblx0XHRcdC8vIEFib3J0IGFueSBjdXJyZW50L3BlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0Ly8gQ2xlYXIgYWxsIGNhbGxiYWNrcyBhbmQgdmFsdWVzXG5cdFx0XHRkaXNhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGRpc2FibGVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICFsaXN0O1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZVxuXHRcdFx0Ly8gQWxzbyBkaXNhYmxlIC5hZGQgdW5sZXNzIHdlIGhhdmUgbWVtb3J5IChzaW5jZSBpdCB3b3VsZCBoYXZlIG5vIGVmZmVjdClcblx0XHRcdC8vIEFib3J0IGFueSBwZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdGxvY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRpZiAoICFtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRsb2NrZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFsb2NrZWQ7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzXG5cdFx0XHRmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7XG5cdFx0XHRcdGlmICggIWxvY2tlZCApIHtcblx0XHRcdFx0XHRhcmdzID0gYXJncyB8fCBbXTtcblx0XHRcdFx0XHRhcmdzID0gWyBjb250ZXh0LCBhcmdzLnNsaWNlID8gYXJncy5zbGljZSgpIDogYXJncyBdO1xuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGFyZ3MgKTtcblx0XHRcdFx0XHRpZiAoICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHNcblx0XHRcdGZpcmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRzZWxmLmZpcmVXaXRoKCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIHRoZSBjYWxsYmFja3MgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2Vcblx0XHRcdGZpcmVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhZmlyZWQ7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRyZXR1cm4gc2VsZjtcbn07XG5cblxuZnVuY3Rpb24gSWRlbnRpdHkoIHYgKSB7XG5cdHJldHVybiB2O1xufVxuZnVuY3Rpb24gVGhyb3dlciggZXggKSB7XG5cdHRocm93IGV4O1xufVxuXG5mdW5jdGlvbiBhZG9wdFZhbHVlKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0LCBub1ZhbHVlICkge1xuXHR2YXIgbWV0aG9kO1xuXG5cdHRyeSB7XG5cblx0XHQvLyBDaGVjayBmb3IgcHJvbWlzZSBhc3BlY3QgZmlyc3QgdG8gcHJpdmlsZWdlIHN5bmNocm9ub3VzIGJlaGF2aW9yXG5cdFx0aWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnByb21pc2UgKSApICkge1xuXHRcdFx0bWV0aG9kLmNhbGwoIHZhbHVlICkuZG9uZSggcmVzb2x2ZSApLmZhaWwoIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgdGhlbmFibGVzXG5cdFx0fSBlbHNlIGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS50aGVuICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0ICk7XG5cblx0XHQvLyBPdGhlciBub24tdGhlbmFibGVzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQ29udHJvbCBgcmVzb2x2ZWAgYXJndW1lbnRzIGJ5IGxldHRpbmcgQXJyYXkjc2xpY2UgY2FzdCBib29sZWFuIGBub1ZhbHVlYCB0byBpbnRlZ2VyOlxuXHRcdFx0Ly8gKiBmYWxzZTogWyB2YWx1ZSBdLnNsaWNlKCAwICkgPT4gcmVzb2x2ZSggdmFsdWUgKVxuXHRcdFx0Ly8gKiB0cnVlOiBbIHZhbHVlIF0uc2xpY2UoIDEgKSA9PiByZXNvbHZlKClcblx0XHRcdHJlc29sdmUuYXBwbHkoIHVuZGVmaW5lZCwgWyB2YWx1ZSBdLnNsaWNlKCBub1ZhbHVlICkgKTtcblx0XHR9XG5cblx0Ly8gRm9yIFByb21pc2VzL0ErLCBjb252ZXJ0IGV4Y2VwdGlvbnMgaW50byByZWplY3Rpb25zXG5cdC8vIFNpbmNlIGpRdWVyeS53aGVuIGRvZXNuJ3QgdW53cmFwIHRoZW5hYmxlcywgd2UgY2FuIHNraXAgdGhlIGV4dHJhIGNoZWNrcyBhcHBlYXJpbmcgaW5cblx0Ly8gRGVmZXJyZWQjdGhlbiB0byBjb25kaXRpb25hbGx5IHN1cHByZXNzIHJlamVjdGlvbi5cblx0fSBjYXRjaCAoIHZhbHVlICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgb25seVxuXHRcdC8vIFN0cmljdCBtb2RlIGZ1bmN0aW9ucyBpbnZva2VkIHdpdGhvdXQgLmNhbGwvLmFwcGx5IGdldCBnbG9iYWwtb2JqZWN0IGNvbnRleHRcblx0XHRyZWplY3QuYXBwbHkoIHVuZGVmaW5lZCwgWyB2YWx1ZSBdICk7XG5cdH1cbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdERlZmVycmVkOiBmdW5jdGlvbiggZnVuYyApIHtcblx0XHR2YXIgdHVwbGVzID0gW1xuXG5cdFx0XHRcdC8vIGFjdGlvbiwgYWRkIGxpc3RlbmVyLCBjYWxsYmFja3MsXG5cdFx0XHRcdC8vIC4uLiAudGhlbiBoYW5kbGVycywgYXJndW1lbnQgaW5kZXgsIFtmaW5hbCBzdGF0ZV1cblx0XHRcdFx0WyBcIm5vdGlmeVwiLCBcInByb2dyZXNzXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksIDIgXSxcblx0XHRcdFx0WyBcInJlc29sdmVcIiwgXCJkb25lXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAwLCBcInJlc29sdmVkXCIgXSxcblx0XHRcdFx0WyBcInJlamVjdFwiLCBcImZhaWxcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDEsIFwicmVqZWN0ZWRcIiBdXG5cdFx0XHRdLFxuXHRcdFx0c3RhdGUgPSBcInBlbmRpbmdcIixcblx0XHRcdHByb21pc2UgPSB7XG5cdFx0XHRcdHN0YXRlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3RhdGU7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFsd2F5czogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQuZG9uZSggYXJndW1lbnRzICkuZmFpbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwiY2F0Y2hcIjogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRcdHJldHVybiBwcm9taXNlLnRoZW4oIG51bGwsIGZuICk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gS2VlcCBwaXBlIGZvciBiYWNrLWNvbXBhdFxuXHRcdFx0XHRwaXBlOiBmdW5jdGlvbiggLyogZm5Eb25lLCBmbkZhaWwsIGZuUHJvZ3Jlc3MgKi8gKSB7XG5cdFx0XHRcdFx0dmFyIGZucyA9IGFyZ3VtZW50cztcblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBfaSwgdHVwbGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTWFwIHR1cGxlcyAocHJvZ3Jlc3MsIGRvbmUsIGZhaWwpIHRvIGFyZ3VtZW50cyAoZG9uZSwgZmFpbCwgcHJvZ3Jlc3MpXG5cdFx0XHRcdFx0XHRcdHZhciBmbiA9IGlzRnVuY3Rpb24oIGZuc1sgdHVwbGVbIDQgXSBdICkgJiYgZm5zWyB0dXBsZVsgNCBdIF07XG5cblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQucHJvZ3Jlc3MoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIubm90aWZ5IH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmRvbmUoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVzb2x2ZSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5mYWlsKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlamVjdCB9KVxuXHRcdFx0XHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDEgXSBdKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCAmJiBpc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC5wcm9taXNlKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXJbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50c1xuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdGZucyA9IG51bGw7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhlbjogZnVuY3Rpb24oIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBvblByb2dyZXNzICkge1xuXHRcdFx0XHRcdHZhciBtYXhEZXB0aCA9IDA7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gcmVzb2x2ZSggZGVwdGgsIGRlZmVycmVkLCBoYW5kbGVyLCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdGhhdCA9IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0YXJncyA9IGFyZ3VtZW50cyxcblx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQsIHRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4zXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01OVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIGRvdWJsZS1yZXNvbHV0aW9uIGF0dGVtcHRzXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoIDwgbWF4RGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQgPSBoYW5kbGVyLmFwcGx5KCB0aGF0LCBhcmdzICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjFcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTQ4XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkID09PSBkZWZlcnJlZC5wcm9taXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoIFwiVGhlbmFibGUgc2VsZi1yZXNvbHV0aW9uXCIgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbnMgMi4zLjMuMSwgMy41XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01NFxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNzVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFJldHJpZXZlIGB0aGVuYCBvbmx5IG9uY2Vcblx0XHRcdFx0XHRcdFx0XHRcdHRoZW4gPSByZXR1cm5lZCAmJlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBjaGVjayBvYmplY3RzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZW5hYmlsaXR5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggdHlwZW9mIHJldHVybmVkID09PSBcIm9iamVjdFwiIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHJldHVybmVkID09PSBcImZ1bmN0aW9uXCIgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC50aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYSByZXR1cm5lZCB0aGVuYWJsZVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGVuICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBwcm9jZXNzb3JzIChub3RpZnkpIGp1c3Qgd2FpdCBmb3IgcmVzb2x1dGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gTm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGFsc28gaG9vayBpbnRvIHByb2dyZXNzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgZGlzcmVnYXJkIG9sZGVyIHJlc29sdXRpb24gdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4RGVwdGgrKztcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhbGwgb3RoZXIgcmV0dXJuZWQgdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gSWRlbnRpdHkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyByZXR1cm5lZCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUHJvY2VzcyB0aGUgdmFsdWUocylcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmYXVsdCBwcm9jZXNzIGlzIHJlc29sdmVcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCBzcGVjaWFsIHx8IGRlZmVycmVkLnJlc29sdmVXaXRoICkoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBub3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgY2F0Y2ggYW5kIHJlamVjdCBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcyA9IHNwZWNpYWwgP1xuXHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKCBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLmVycm9yICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjQuMVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTYxXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIHBvc3QtcmVzb2x1dGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCArIDEgPj0gbWF4RGVwdGggKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBUaHJvd2VyICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGF0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyBlIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjFcblx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTdcblx0XHRcdFx0XHRcdFx0Ly8gUmUtcmVzb2x2ZSBwcm9taXNlcyBpbW1lZGlhdGVseSB0byBkb2RnZSBmYWxzZSByZWplY3Rpb24gZnJvbVxuXHRcdFx0XHRcdFx0XHQvLyBzdWJzZXF1ZW50IGVycm9yc1xuXHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENhbGwgYW4gb3B0aW9uYWwgaG9vayB0byByZWNvcmQgdGhlIGVycm9yLCBpbiBjYXNlIG9mIGV4Y2VwdGlvblxuXHRcdFx0XHRcdFx0XHRcdC8vIHNpbmNlIGl0J3Mgb3RoZXJ3aXNlIGxvc3Qgd2hlbiBleGVjdXRpb24gZ29lcyBhc3luY1xuXHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmdldEVycm9ySG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MuZXJyb3IgPSBqUXVlcnkuRGVmZXJyZWQuZ2V0RXJyb3JIb29rKCk7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBUaGUgZGVwcmVjYXRlZCBhbGlhcyBvZiB0aGUgYWJvdmUuIFdoaWxlIHRoZSBuYW1lIHN1Z2dlc3RzXG5cdFx0XHRcdFx0XHRcdFx0Ly8gcmV0dXJuaW5nIHRoZSBzdGFjaywgbm90IGFuIGVycm9yIGluc3RhbmNlLCBqUXVlcnkganVzdCBwYXNzZXNcblx0XHRcdFx0XHRcdFx0XHQvLyBpdCBkaXJlY3RseSB0byBgY29uc29sZS53YXJuYCBzbyBib3RoIHdpbGwgd29yazsgYW4gaW5zdGFuY2Vcblx0XHRcdFx0XHRcdFx0XHQvLyBqdXN0IGJldHRlciBjb29wZXJhdGVzIHdpdGggc291cmNlIG1hcHMuXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggalF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MuZXJyb3IgPSBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBwcm9jZXNzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXG5cdFx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUHJvZ3Jlc3MgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblByb2dyZXNzIDpcblx0XHRcdFx0XHRcdFx0XHRcdElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLm5vdGlmeVdpdGhcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMSBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25GdWxmaWxsZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkZ1bGZpbGxlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eVxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDIgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUmVqZWN0ZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblJlamVjdGVkIDpcblx0XHRcdFx0XHRcdFx0XHRcdFRocm93ZXJcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9ICkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWRcblx0XHRcdFx0Ly8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9iamVjdFxuXHRcdFx0XHRwcm9taXNlOiBmdW5jdGlvbiggb2JqICkge1xuXHRcdFx0XHRcdHJldHVybiBvYmogIT0gbnVsbCA/IGpRdWVyeS5leHRlbmQoIG9iaiwgcHJvbWlzZSApIDogcHJvbWlzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlZmVycmVkID0ge307XG5cblx0XHQvLyBBZGQgbGlzdC1zcGVjaWZpYyBtZXRob2RzXG5cdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkge1xuXHRcdFx0dmFyIGxpc3QgPSB0dXBsZVsgMiBdLFxuXHRcdFx0XHRzdGF0ZVN0cmluZyA9IHR1cGxlWyA1IF07XG5cblx0XHRcdC8vIHByb21pc2UucHJvZ3Jlc3MgPSBsaXN0LmFkZFxuXHRcdFx0Ly8gcHJvbWlzZS5kb25lID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZmFpbCA9IGxpc3QuYWRkXG5cdFx0XHRwcm9taXNlWyB0dXBsZVsgMSBdIF0gPSBsaXN0LmFkZDtcblxuXHRcdFx0Ly8gSGFuZGxlIHN0YXRlXG5cdFx0XHRpZiAoIHN0YXRlU3RyaW5nICkge1xuXHRcdFx0XHRsaXN0LmFkZChcblx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlc29sdmVkXCIgKGkuZS4sIGZ1bGZpbGxlZClcblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZWplY3RlZFwiXG5cdFx0XHRcdFx0XHRzdGF0ZSA9IHN0YXRlU3RyaW5nO1xuXHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdHR1cGxlc1sgMyAtIGkgXVsgMiBdLmRpc2FibGUsXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDMgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfY2FsbGJhY2tzLmxvY2tcblx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMiBdLmxvY2ssXG5cblx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5sb2NrXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmZpcmVcblx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5maXJlXG5cdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5maXJlXG5cdFx0XHRsaXN0LmFkZCggdHVwbGVbIDMgXS5maXJlICk7XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5ub3RpZnlXaXRoKC4uLikgfVxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZXNvbHZlV2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdCA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZWplY3RXaXRoKC4uLikgfVxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gdW5kZWZpbmVkIDogdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fTtcblxuXHRcdFx0Ly8gZGVmZXJyZWQubm90aWZ5V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmVXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSA9IGxpc3QuZmlyZVdpdGg7XG5cdFx0fSApO1xuXG5cdFx0Ly8gTWFrZSB0aGUgZGVmZXJyZWQgYSBwcm9taXNlXG5cdFx0cHJvbWlzZS5wcm9taXNlKCBkZWZlcnJlZCApO1xuXG5cdFx0Ly8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFueVxuXHRcdGlmICggZnVuYyApIHtcblx0XHRcdGZ1bmMuY2FsbCggZGVmZXJyZWQsIGRlZmVycmVkICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsIGRvbmUhXG5cdFx0cmV0dXJuIGRlZmVycmVkO1xuXHR9LFxuXG5cdC8vIERlZmVycmVkIGhlbHBlclxuXHR3aGVuOiBmdW5jdGlvbiggc2luZ2xlVmFsdWUgKSB7XG5cdFx0dmFyXG5cblx0XHRcdC8vIGNvdW50IG9mIHVuY29tcGxldGVkIHN1Ym9yZGluYXRlc1xuXHRcdFx0cmVtYWluaW5nID0gYXJndW1lbnRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gY291bnQgb2YgdW5wcm9jZXNzZWQgYXJndW1lbnRzXG5cdFx0XHRpID0gcmVtYWluaW5nLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBmdWxmaWxsbWVudCBkYXRhXG5cdFx0XHRyZXNvbHZlQ29udGV4dHMgPSBBcnJheSggaSApLFxuXHRcdFx0cmVzb2x2ZVZhbHVlcyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApLFxuXG5cdFx0XHQvLyB0aGUgcHJpbWFyeSBEZWZlcnJlZFxuXHRcdFx0cHJpbWFyeSA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBjYWxsYmFjayBmYWN0b3J5XG5cdFx0XHR1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZUNvbnRleHRzWyBpIF0gPSB0aGlzO1xuXHRcdFx0XHRcdHJlc29sdmVWYWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTtcblx0XHRcdFx0XHRpZiAoICEoIC0tcmVtYWluaW5nICkgKSB7XG5cdFx0XHRcdFx0XHRwcmltYXJ5LnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9O1xuXG5cdFx0Ly8gU2luZ2xlLSBhbmQgZW1wdHkgYXJndW1lbnRzIGFyZSBhZG9wdGVkIGxpa2UgUHJvbWlzZS5yZXNvbHZlXG5cdFx0aWYgKCByZW1haW5pbmcgPD0gMSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHNpbmdsZVZhbHVlLCBwcmltYXJ5LmRvbmUoIHVwZGF0ZUZ1bmMoIGkgKSApLnJlc29sdmUsIHByaW1hcnkucmVqZWN0LFxuXHRcdFx0XHQhcmVtYWluaW5nICk7XG5cblx0XHRcdC8vIFVzZSAudGhlbigpIHRvIHVud3JhcCBzZWNvbmRhcnkgdGhlbmFibGVzIChjZi4gZ2gtMzAwMClcblx0XHRcdGlmICggcHJpbWFyeS5zdGF0ZSgpID09PSBcInBlbmRpbmdcIiB8fFxuXHRcdFx0XHRpc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0gJiYgcmVzb2x2ZVZhbHVlc1sgaSBdLnRoZW4gKSApIHtcblxuXHRcdFx0XHRyZXR1cm4gcHJpbWFyeS50aGVuKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgYXJndW1lbnRzIGFyZSBhZ2dyZWdhdGVkIGxpa2UgUHJvbWlzZS5hbGwgYXJyYXkgZWxlbWVudHNcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHJlc29sdmVWYWx1ZXNbIGkgXSwgdXBkYXRlRnVuYyggaSApLCBwcmltYXJ5LnJlamVjdCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcmltYXJ5LnByb21pc2UoKTtcblx0fVxufSApO1xuXG5cbi8vIFRoZXNlIHVzdWFsbHkgaW5kaWNhdGUgYSBwcm9ncmFtbWVyIG1pc3Rha2UgZHVyaW5nIGRldmVsb3BtZW50LFxuLy8gd2FybiBhYm91dCB0aGVtIEFTQVAgcmF0aGVyIHRoYW4gc3dhbGxvd2luZyB0aGVtIGJ5IGRlZmF1bHQuXG52YXIgcmVycm9yTmFtZXMgPSAvXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztcblxuLy8gSWYgYGpRdWVyeS5EZWZlcnJlZC5nZXRFcnJvckhvb2tgIGlzIGRlZmluZWQsIGBhc3luY0Vycm9yYCBpcyBhbiBlcnJvclxuLy8gY2FwdHVyZWQgYmVmb3JlIHRoZSBhc3luYyBiYXJyaWVyIHRvIGdldCB0aGUgb3JpZ2luYWwgZXJyb3IgY2F1c2Vcbi8vIHdoaWNoIG1heSBvdGhlcndpc2UgYmUgaGlkZGVuLlxualF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgPSBmdW5jdGlvbiggZXJyb3IsIGFzeW5jRXJyb3IgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgOCAtIDkgb25seVxuXHQvLyBDb25zb2xlIGV4aXN0cyB3aGVuIGRldiB0b29scyBhcmUgb3Blbiwgd2hpY2ggY2FuIGhhcHBlbiBhdCBhbnkgdGltZVxuXHRpZiAoIHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLndhcm4gJiYgZXJyb3IgJiYgcmVycm9yTmFtZXMudGVzdCggZXJyb3IubmFtZSApICkge1xuXHRcdHdpbmRvdy5jb25zb2xlLndhcm4oIFwialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogXCIgKyBlcnJvci5tZXNzYWdlLFxuXHRcdFx0ZXJyb3Iuc3RhY2ssIGFzeW5jRXJyb3IgKTtcblx0fVxufTtcblxuXG5cblxualF1ZXJ5LnJlYWR5RXhjZXB0aW9uID0gZnVuY3Rpb24oIGVycm9yICkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0dGhyb3cgZXJyb3I7XG5cdH0gKTtcbn07XG5cblxuXG5cbi8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeVxudmFyIHJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgpO1xuXG5qUXVlcnkuZm4ucmVhZHkgPSBmdW5jdGlvbiggZm4gKSB7XG5cblx0cmVhZHlMaXN0XG5cdFx0LnRoZW4oIGZuIClcblxuXHRcdC8vIFdyYXAgalF1ZXJ5LnJlYWR5RXhjZXB0aW9uIGluIGEgZnVuY3Rpb24gc28gdGhhdCB0aGUgbG9va3VwXG5cdFx0Ly8gaGFwcGVucyBhdCB0aGUgdGltZSBvZiBlcnJvciBoYW5kbGluZyBpbnN0ZWFkIG9mIGNhbGxiYWNrXG5cdFx0Ly8gcmVnaXN0cmF0aW9uLlxuXHRcdC5jYXRjaCggZnVuY3Rpb24oIGVycm9yICkge1xuXHRcdFx0alF1ZXJ5LnJlYWR5RXhjZXB0aW9uKCBlcnJvciApO1xuXHRcdH0gKTtcblxuXHRyZXR1cm4gdGhpcztcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLlxuXHRpc1JlYWR5OiBmYWxzZSxcblxuXHQvLyBBIGNvdW50ZXIgdG8gdHJhY2sgaG93IG1hbnkgaXRlbXMgdG8gd2FpdCBmb3IgYmVmb3JlXG5cdC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlIHRyYWMtNjc4MVxuXHRyZWFkeVdhaXQ6IDEsXG5cblx0Ly8gSGFuZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeVxuXHRyZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7XG5cblx0XHQvLyBBYm9ydCBpZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdyZSBhbHJlYWR5IHJlYWR5XG5cdFx0aWYgKCB3YWl0ID09PSB0cnVlID8gLS1qUXVlcnkucmVhZHlXYWl0IDogalF1ZXJ5LmlzUmVhZHkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmVtZW1iZXIgdGhhdCB0aGUgRE9NIGlzIHJlYWR5XG5cdFx0alF1ZXJ5LmlzUmVhZHkgPSB0cnVlO1xuXG5cdFx0Ly8gSWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1lbnQsIGFuZCB3YWl0IGlmIG5lZWQgYmVcblx0XHRpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlXG5cdFx0cmVhZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5yZWFkeS50aGVuID0gcmVhZHlMaXN0LnRoZW47XG5cbi8vIFRoZSByZWFkeSBldmVudCBoYW5kbGVyIGFuZCBzZWxmIGNsZWFudXAgbWV0aG9kXG5mdW5jdGlvbiBjb21wbGV0ZWQoKSB7XG5cdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcblx0alF1ZXJ5LnJlYWR5KCk7XG59XG5cbi8vIENhdGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2FsbGVkXG4vLyBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBvY2N1cnJlZC5cbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDEwIG9ubHlcbi8vIE9sZGVyIElFIHNvbWV0aW1lcyBzaWduYWxzIFwiaW50ZXJhY3RpdmVcIiB0b28gc29vblxuaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIgfHxcblx0KCBkb2N1bWVudC5yZWFkeVN0YXRlICE9PSBcImxvYWRpbmdcIiAmJiAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsICkgKSB7XG5cblx0Ly8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93IHNjcmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBqUXVlcnkucmVhZHkgKTtcblxufSBlbHNlIHtcblxuXHQvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxiYWNrXG5cdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblxuXHQvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29ya1xuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xufVxuXG5cblxuXG4vLyBNdWx0aWZ1bmN0aW9uYWwgbWV0aG9kIHRvIGdldCBhbmQgc2V0IHZhbHVlcyBvZiBhIGNvbGxlY3Rpb25cbi8vIFRoZSB2YWx1ZS9zIGNhbiBvcHRpb25hbGx5IGJlIGV4ZWN1dGVkIGlmIGl0J3MgYSBmdW5jdGlvblxudmFyIGFjY2VzcyA9IGZ1bmN0aW9uKCBlbGVtcywgZm4sIGtleSwgdmFsdWUsIGNoYWluYWJsZSwgZW1wdHlHZXQsIHJhdyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGVsZW1zLmxlbmd0aCxcblx0XHRidWxrID0ga2V5ID09IG51bGw7XG5cblx0Ly8gU2V0cyBtYW55IHZhbHVlc1xuXHRpZiAoIHRvVHlwZSgga2V5ICkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblx0XHRmb3IgKCBpIGluIGtleSApIHtcblx0XHRcdGFjY2VzcyggZWxlbXMsIGZuLCBpLCBrZXlbIGkgXSwgdHJ1ZSwgZW1wdHlHZXQsIHJhdyApO1xuXHRcdH1cblxuXHQvLyBTZXRzIG9uZSB2YWx1ZVxuXHR9IGVsc2UgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cblx0XHRpZiAoICFpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmF3ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGJ1bGsgKSB7XG5cblx0XHRcdC8vIEJ1bGsgb3BlcmF0aW9ucyBydW4gYWdhaW5zdCB0aGUgZW50aXJlIHNldFxuXHRcdFx0aWYgKCByYXcgKSB7XG5cdFx0XHRcdGZuLmNhbGwoIGVsZW1zLCB2YWx1ZSApO1xuXHRcdFx0XHRmbiA9IG51bGw7XG5cblx0XHRcdC8vIC4uLmV4Y2VwdCB3aGVuIGV4ZWN1dGluZyBmdW5jdGlvbiB2YWx1ZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ1bGsgPSBmbjtcblx0XHRcdFx0Zm4gPSBmdW5jdGlvbiggZWxlbSwgX2tleSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRmbihcblx0XHRcdFx0XHRlbGVtc1sgaSBdLCBrZXksIHJhdyA/XG5cdFx0XHRcdFx0XHR2YWx1ZSA6XG5cdFx0XHRcdFx0XHR2YWx1ZS5jYWxsKCBlbGVtc1sgaSBdLCBpLCBmbiggZWxlbXNbIGkgXSwga2V5ICkgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICggY2hhaW5hYmxlICkge1xuXHRcdHJldHVybiBlbGVtcztcblx0fVxuXG5cdC8vIEdldHNcblx0aWYgKCBidWxrICkge1xuXHRcdHJldHVybiBmbi5jYWxsKCBlbGVtcyApO1xuXHR9XG5cblx0cmV0dXJuIGxlbiA/IGZuKCBlbGVtc1sgMCBdLCBrZXkgKSA6IGVtcHR5R2V0O1xufTtcblxuXG4vLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmdcbnZhciBybXNQcmVmaXggPSAvXi1tcy0vLFxuXHRyZGFzaEFscGhhID0gLy0oW2Etel0pL2c7XG5cbi8vIFVzZWQgYnkgY2FtZWxDYXNlIGFzIGNhbGxiYWNrIHRvIHJlcGxhY2UoKVxuZnVuY3Rpb24gZmNhbWVsQ2FzZSggX2FsbCwgbGV0dGVyICkge1xuXHRyZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7XG59XG5cbi8vIENvbnZlcnQgZGFzaGVkIHRvIGNhbWVsQ2FzZTsgdXNlZCBieSB0aGUgY3NzIGFuZCBkYXRhIG1vZHVsZXNcbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTVcbi8vIE1pY3Jvc29mdCBmb3Jnb3QgdG8gaHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICh0cmFjLTk1NzIpXG5mdW5jdGlvbiBjYW1lbENhc2UoIHN0cmluZyApIHtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsIFwibXMtXCIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7XG59XG52YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHQvLyBBY2NlcHRzIG9ubHk6XG5cdC8vICAtIE5vZGVcblx0Ly8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERVxuXHQvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERVxuXHQvLyAgLSBPYmplY3Rcblx0Ly8gICAgLSBBbnlcblx0cmV0dXJuIG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBlID09PSA5IHx8ICEoICtvd25lci5ub2RlVHlwZSApO1xufTtcblxuXG5cblxuZnVuY3Rpb24gRGF0YSgpIHtcblx0dGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrO1xufVxuXG5EYXRhLnVpZCA9IDE7XG5cbkRhdGEucHJvdG90eXBlID0ge1xuXG5cdGNhY2hlOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGVcblx0XHR2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcblx0XHRpZiAoICF2YWx1ZSApIHtcblx0XHRcdHZhbHVlID0ge307XG5cblx0XHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxuXHRcdFx0Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSB0cmFjLTgzMzUuXG5cdFx0XHQvLyBBbHdheXMgcmV0dXJuIGFuIGVtcHR5IG9iamVjdC5cblx0XHRcdGlmICggYWNjZXB0RGF0YSggb3duZXIgKSApIHtcblxuXHRcdFx0XHQvLyBJZiBpdCBpcyBhIG5vZGUgdW5saWtlbHkgdG8gYmUgc3RyaW5naWZ5LWVkIG9yIGxvb3BlZCBvdmVyXG5cdFx0XHRcdC8vIHVzZSBwbGFpbiBhc3NpZ25tZW50XG5cdFx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdmFsdWU7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHNlY3VyZSBpdCBpbiBhIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5XG5cdFx0XHRcdC8vIGNvbmZpZ3VyYWJsZSBtdXN0IGJlIHRydWUgdG8gYWxsb3cgdGhlIHByb3BlcnR5IHRvIGJlXG5cdFx0XHRcdC8vIGRlbGV0ZWQgd2hlbiBkYXRhIGlzIHJlbW92ZWRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIG93bmVyLCB0aGlzLmV4cGFuZG8sIHtcblx0XHRcdFx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB2YWx1ZTtcblx0fSxcblx0c2V0OiBmdW5jdGlvbiggb3duZXIsIGRhdGEsIHZhbHVlICkge1xuXHRcdHZhciBwcm9wLFxuXHRcdFx0Y2FjaGUgPSB0aGlzLmNhY2hlKCBvd25lciApO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCBrZXksIHZhbHVlIF0gYXJnc1xuXHRcdC8vIEFsd2F5cyB1c2UgY2FtZWxDYXNlIGtleSAoZ2gtMjI1Nylcblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Y2FjaGVbIGNhbWVsQ2FzZSggZGF0YSApIF0gPSB2YWx1ZTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwgeyBwcm9wZXJ0aWVzIH0gXSBhcmdzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQ29weSB0aGUgcHJvcGVydGllcyBvbmUtYnktb25lIHRvIHRoZSBjYWNoZSBvYmplY3Rcblx0XHRcdGZvciAoIHByb3AgaW4gZGF0YSApIHtcblx0XHRcdFx0Y2FjaGVbIGNhbWVsQ2FzZSggcHJvcCApIF0gPSBkYXRhWyBwcm9wIF07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBjYWNoZTtcblx0fSxcblx0Z2V0OiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcblx0XHRyZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgP1xuXHRcdFx0dGhpcy5jYWNoZSggb3duZXIgKSA6XG5cblx0XHRcdC8vIEFsd2F5cyB1c2UgY2FtZWxDYXNlIGtleSAoZ2gtMjI1Nylcblx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSAmJiBvd25lclsgdGhpcy5leHBhbmRvIF1bIGNhbWVsQ2FzZSgga2V5ICkgXTtcblx0fSxcblx0YWNjZXNzOiBmdW5jdGlvbiggb3duZXIsIGtleSwgdmFsdWUgKSB7XG5cblx0XHQvLyBJbiBjYXNlcyB3aGVyZSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIE5vIGtleSB3YXMgc3BlY2lmaWVkXG5cdFx0Ly8gICAyLiBBIHN0cmluZyBrZXkgd2FzIHNwZWNpZmllZCwgYnV0IG5vIHZhbHVlIHByb3ZpZGVkXG5cdFx0Ly9cblx0XHQvLyBUYWtlIHRoZSBcInJlYWRcIiBwYXRoIGFuZCBhbGxvdyB0aGUgZ2V0IG1ldGhvZCB0byBkZXRlcm1pbmVcblx0XHQvLyB3aGljaCB2YWx1ZSB0byByZXR1cm4sIHJlc3BlY3RpdmVseSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIFRoZSBlbnRpcmUgY2FjaGUgb2JqZWN0XG5cdFx0Ly8gICAyLiBUaGUgZGF0YSBzdG9yZWQgYXQgdGhlIGtleVxuXHRcdC8vXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHQoICgga2V5ICYmIHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIgKSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgKSB7XG5cblx0XHRcdHJldHVybiB0aGlzLmdldCggb3duZXIsIGtleSApO1xuXHRcdH1cblxuXHRcdC8vIFdoZW4gdGhlIGtleSBpcyBub3QgYSBzdHJpbmcsIG9yIGJvdGggYSBrZXkgYW5kIHZhbHVlXG5cdFx0Ly8gYXJlIHNwZWNpZmllZCwgc2V0IG9yIGV4dGVuZCAoZXhpc3Rpbmcgb2JqZWN0cykgd2l0aCBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIEFuIG9iamVjdCBvZiBwcm9wZXJ0aWVzXG5cdFx0Ly8gICAyLiBBIGtleSBhbmQgdmFsdWVcblx0XHQvL1xuXHRcdHRoaXMuc2V0KCBvd25lciwga2V5LCB2YWx1ZSApO1xuXG5cdFx0Ly8gU2luY2UgdGhlIFwic2V0XCIgcGF0aCBjYW4gaGF2ZSB0d28gcG9zc2libGUgZW50cnkgcG9pbnRzXG5cdFx0Ly8gcmV0dXJuIHRoZSBleHBlY3RlZCBkYXRhIGJhc2VkIG9uIHdoaWNoIHBhdGggd2FzIHRha2VuWypdXG5cdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IGtleTtcblx0fSxcblx0cmVtb3ZlOiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcblx0XHR2YXIgaSxcblx0XHRcdGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0aWYgKCBjYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICgga2V5ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQgYXJyYXkgb3Igc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyBvZiBrZXlzXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIGtleSApICkge1xuXG5cdFx0XHRcdC8vIElmIGtleSBpcyBhbiBhcnJheSBvZiBrZXlzLi4uXG5cdFx0XHRcdC8vIFdlIGFsd2F5cyBzZXQgY2FtZWxDYXNlIGtleXMsIHNvIHJlbW92ZSB0aGF0LlxuXHRcdFx0XHRrZXkgPSBrZXkubWFwKCBjYW1lbENhc2UgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGtleSA9IGNhbWVsQ2FzZSgga2V5ICk7XG5cblx0XHRcdFx0Ly8gSWYgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cywgdXNlIGl0LlxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIGNyZWF0ZSBhbiBhcnJheSBieSBtYXRjaGluZyBub24td2hpdGVzcGFjZVxuXHRcdFx0XHRrZXkgPSBrZXkgaW4gY2FjaGUgP1xuXHRcdFx0XHRcdFsga2V5IF0gOlxuXHRcdFx0XHRcdCgga2V5Lm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10gKTtcblx0XHRcdH1cblxuXHRcdFx0aSA9IGtleS5sZW5ndGg7XG5cblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRkZWxldGUgY2FjaGVbIGtleVsgaSBdIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIHRoZSBleHBhbmRvIGlmIHRoZXJlJ3Mgbm8gbW9yZSBkYXRhXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fCBqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKSApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NVxuXHRcdFx0Ly8gV2Via2l0ICYgQmxpbmsgcGVyZm9ybWFuY2Ugc3VmZmVycyB3aGVuIGRlbGV0aW5nIHByb3BlcnRpZXNcblx0XHRcdC8vIGZyb20gRE9NIG5vZGVzLCBzbyBzZXQgdG8gdW5kZWZpbmVkIGluc3RlYWRcblx0XHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM3ODYwNyAoYnVnIHJlc3RyaWN0ZWQpXG5cdFx0XHRpZiAoIG93bmVyLm5vZGVUeXBlICkge1xuXHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWxldGUgb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0aGFzRGF0YTogZnVuY3Rpb24oIG93bmVyICkge1xuXHRcdHZhciBjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0XHRyZXR1cm4gY2FjaGUgIT09IHVuZGVmaW5lZCAmJiAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICk7XG5cdH1cbn07XG52YXIgZGF0YVByaXYgPSBuZXcgRGF0YSgpO1xuXG52YXIgZGF0YVVzZXIgPSBuZXcgRGF0YSgpO1xuXG5cblxuLy9cdEltcGxlbWVudGF0aW9uIFN1bW1hcnlcbi8vXG4vL1x0MS4gRW5mb3JjZSBBUEkgc3VyZmFjZSBhbmQgc2VtYW50aWMgY29tcGF0aWJpbGl0eSB3aXRoIDEuOS54IGJyYW5jaFxuLy9cdDIuIEltcHJvdmUgdGhlIG1vZHVsZSdzIG1haW50YWluYWJpbGl0eSBieSByZWR1Y2luZyB0aGUgc3RvcmFnZVxuLy9cdFx0cGF0aHMgdG8gYSBzaW5nbGUgbWVjaGFuaXNtLlxuLy9cdDMuIFVzZSB0aGUgc2FtZSBzaW5nbGUgbWVjaGFuaXNtIHRvIHN1cHBvcnQgXCJwcml2YXRlXCIgYW5kIFwidXNlclwiIGRhdGEuXG4vL1x0NC4gX05ldmVyXyBleHBvc2UgXCJwcml2YXRlXCIgZGF0YSB0byB1c2VyIGNvZGUgKFRPRE86IERyb3AgX2RhdGEsIF9yZW1vdmVEYXRhKVxuLy9cdDUuIEF2b2lkIGV4cG9zaW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb24gdXNlciBvYmplY3RzIChlZy4gZXhwYW5kbyBwcm9wZXJ0aWVzKVxuLy9cdDYuIFByb3ZpZGUgYSBjbGVhciBwYXRoIGZvciBpbXBsZW1lbnRhdGlvbiB1cGdyYWRlIHRvIFdlYWtNYXAgaW4gMjAxNFxuXG52YXIgcmJyYWNlID0gL14oPzpcXHtbXFx3XFxXXSpcXH18XFxbW1xcd1xcV10qXFxdKSQvLFxuXHRybXVsdGlEYXNoID0gL1tBLVpdL2c7XG5cbmZ1bmN0aW9uIGdldERhdGEoIGRhdGEgKSB7XG5cdGlmICggZGF0YSA9PT0gXCJ0cnVlXCIgKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRpZiAoIGRhdGEgPT09IFwiZmFsc2VcIiApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpZiAoIGRhdGEgPT09IFwibnVsbFwiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gT25seSBjb252ZXJ0IHRvIGEgbnVtYmVyIGlmIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBzdHJpbmdcblx0aWYgKCBkYXRhID09PSArZGF0YSArIFwiXCIgKSB7XG5cdFx0cmV0dXJuICtkYXRhO1xuXHR9XG5cblx0aWYgKCByYnJhY2UudGVzdCggZGF0YSApICkge1xuXHRcdHJldHVybiBKU09OLnBhcnNlKCBkYXRhICk7XG5cdH1cblxuXHRyZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gZGF0YUF0dHIoIGVsZW0sIGtleSwgZGF0YSApIHtcblx0dmFyIG5hbWU7XG5cblx0Ly8gSWYgbm90aGluZyB3YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5IHRvIGZldGNoIGFueVxuXHQvLyBkYXRhIGZyb20gdGhlIEhUTUw1IGRhdGEtKiBhdHRyaWJ1dGVcblx0aWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRuYW1lID0gXCJkYXRhLVwiICsga2V5LnJlcGxhY2UoIHJtdWx0aURhc2gsIFwiLSQmXCIgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdGRhdGEgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApO1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGRhdGEgPSBnZXREYXRhKCBkYXRhICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHt9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGRhdGEgc28gaXQgaXNuJ3QgY2hhbmdlZCBsYXRlclxuXHRcdFx0ZGF0YVVzZXIuc2V0KCBlbGVtLCBrZXksIGRhdGEgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGRhdGE7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0aGFzRGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRhdGFVc2VyLmhhc0RhdGEoIGVsZW0gKSB8fCBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICk7XG5cdH0sXG5cblx0ZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFVc2VyLmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFVc2VyLnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9LFxuXG5cdC8vIFRPRE86IE5vdyB0aGF0IGFsbCBjYWxscyB0byBfZGF0YSBhbmQgX3JlbW92ZURhdGEgaGF2ZSBiZWVuIHJlcGxhY2VkXG5cdC8vIHdpdGggZGlyZWN0IGNhbGxzIHRvIGRhdGFQcml2IG1ldGhvZHMsIHRoZXNlIGNhbiBiZSBkZXByZWNhdGVkLlxuXHRfZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApO1xuXHR9LFxuXG5cdF9yZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdHZhciBpLCBuYW1lLCBkYXRhLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdGF0dHJzID0gZWxlbSAmJiBlbGVtLmF0dHJpYnV0ZXM7XG5cblx0XHQvLyBHZXRzIGFsbCB2YWx1ZXNcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB0aGlzLmxlbmd0aCApIHtcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSApO1xuXG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhZGF0YVByaXYuZ2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiICkgKSB7XG5cdFx0XHRcdFx0aSA9IGF0dHJzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0XHRcdFx0Ly8gVGhlIGF0dHJzIGVsZW1lbnRzIGNhbiBiZSBudWxsICh0cmFjLTE0ODk0KVxuXHRcdFx0XHRcdFx0aWYgKCBhdHRyc1sgaSBdICkge1xuXHRcdFx0XHRcdFx0XHRuYW1lID0gYXR0cnNbIGkgXS5uYW1lO1xuXHRcdFx0XHRcdFx0XHRpZiAoIG5hbWUuaW5kZXhPZiggXCJkYXRhLVwiICkgPT09IDAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZSA9IGNhbWVsQ2FzZSggbmFtZS5zbGljZSggNSApICk7XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUF0dHIoIGVsZW0sIG5hbWUsIGRhdGFbIG5hbWUgXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH1cblxuXHRcdC8vIFNldHMgbXVsdGlwbGUgdmFsdWVzXG5cdFx0aWYgKCB0eXBlb2Yga2V5ID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5ICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGRhdGE7XG5cblx0XHRcdC8vIFRoZSBjYWxsaW5nIGpRdWVyeSBvYmplY3QgKGVsZW1lbnQgbWF0Y2hlcykgaXMgbm90IGVtcHR5XG5cdFx0XHQvLyAoYW5kIHRoZXJlZm9yZSBoYXMgYW4gZWxlbWVudCBhcHBlYXJzIGF0IHRoaXNbIDAgXSkgYW5kIHRoZVxuXHRcdFx0Ly8gYHZhbHVlYCBwYXJhbWV0ZXIgd2FzIG5vdCB1bmRlZmluZWQuIEFuIGVtcHR5IGpRdWVyeSBvYmplY3Rcblx0XHRcdC8vIHdpbGwgcmVzdWx0IGluIGB1bmRlZmluZWRgIGZvciBlbGVtID0gdGhpc1sgMCBdIHdoaWNoIHdpbGxcblx0XHRcdC8vIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhbiBhdHRlbXB0IHRvIHJlYWQgYSBkYXRhIGNhY2hlIGlzIG1hZGUuXG5cdFx0XHRpZiAoIGVsZW0gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIGdldCBkYXRhIGZyb20gdGhlIGNhY2hlXG5cdFx0XHRcdC8vIFRoZSBrZXkgd2lsbCBhbHdheXMgYmUgY2FtZWxDYXNlZCBpbiBEYXRhXG5cdFx0XHRcdGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0sIGtleSApO1xuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gXCJkaXNjb3ZlclwiIHRoZSBkYXRhIGluXG5cdFx0XHRcdC8vIEhUTUw1IGN1c3RvbSBkYXRhLSogYXR0cnNcblx0XHRcdFx0ZGF0YSA9IGRhdGFBdHRyKCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBXZSB0cmllZCByZWFsbHkgaGFyZCwgYnV0IHRoZSBkYXRhIGRvZXNuJ3QgZXhpc3QuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IHRoZSBkYXRhLi4uXG5cdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIFdlIGFsd2F5cyBzdG9yZSB0aGUgY2FtZWxDYXNlZCBrZXlcblx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXksIHZhbHVlICk7XG5cdFx0XHR9ICk7XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxLCBudWxsLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGtleSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRhdGFVc2VyLnJlbW92ZSggdGhpcywga2V5ICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIHF1ZXVlO1xuXG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0dHlwZSA9ICggdHlwZSB8fCBcImZ4XCIgKSArIFwicXVldWVcIjtcblx0XHRcdHF1ZXVlID0gZGF0YVByaXYuZ2V0KCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdC8vIFNwZWVkIHVwIGRlcXVldWUgYnkgZ2V0dGluZyBvdXQgcXVpY2tseSBpZiB0aGlzIGlzIGp1c3QgYSBsb29rdXBcblx0XHRcdGlmICggZGF0YSApIHtcblx0XHRcdFx0aWYgKCAhcXVldWUgfHwgQXJyYXkuaXNBcnJheSggZGF0YSApICkge1xuXHRcdFx0XHRcdHF1ZXVlID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KCBkYXRhICkgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBkYXRhICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBxdWV1ZSB8fCBbXTtcblx0XHR9XG5cdH0sXG5cblx0ZGVxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCBlbGVtLCB0eXBlICksXG5cdFx0XHRzdGFydExlbmd0aCA9IHF1ZXVlLmxlbmd0aCxcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKSxcblx0XHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCB0eXBlICksXG5cdFx0XHRuZXh0ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7XG5cdFx0XHR9O1xuXG5cdFx0Ly8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRlcXVldWVkLCBhbHdheXMgcmVtb3ZlIHRoZSBwcm9ncmVzcyBzZW50aW5lbFxuXHRcdGlmICggZm4gPT09IFwiaW5wcm9ncmVzc1wiICkge1xuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0c3RhcnRMZW5ndGgtLTtcblx0XHR9XG5cblx0XHRpZiAoIGZuICkge1xuXG5cdFx0XHQvLyBBZGQgYSBwcm9ncmVzcyBzZW50aW5lbCB0byBwcmV2ZW50IHRoZSBmeCBxdWV1ZSBmcm9tIGJlaW5nXG5cdFx0XHQvLyBhdXRvbWF0aWNhbGx5IGRlcXVldWVkXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwiZnhcIiApIHtcblx0XHRcdFx0cXVldWUudW5zaGlmdCggXCJpbnByb2dyZXNzXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2xlYXIgdXAgdGhlIGxhc3QgcXVldWUgc3RvcCBmdW5jdGlvblxuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XG5cdFx0XHRmbi5jYWxsKCBlbGVtLCBuZXh0LCBob29rcyApO1xuXHRcdH1cblxuXHRcdGlmICggIXN0YXJ0TGVuZ3RoICYmIGhvb2tzICkge1xuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdH1cblx0fSxcblxuXHQvLyBOb3QgcHVibGljIC0gZ2VuZXJhdGUgYSBxdWV1ZUhvb2tzIG9iamVjdCwgb3IgcmV0dXJuIHRoZSBjdXJyZW50IG9uZVxuXHRfcXVldWVIb29rczogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7XG5cdFx0dmFyIGtleSA9IHR5cGUgKyBcInF1ZXVlSG9va3NcIjtcblx0XHRyZXR1cm4gZGF0YVByaXYuZ2V0KCBlbGVtLCBrZXkgKSB8fCBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIGtleSwge1xuXHRcdFx0ZW1wdHk6IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLmFkZCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgWyB0eXBlICsgXCJxdWV1ZVwiLCBrZXkgXSApO1xuXHRcdFx0fSApXG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBzZXR0ZXIgPSAyO1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGRhdGEgPSB0eXBlO1xuXHRcdFx0dHlwZSA9IFwiZnhcIjtcblx0XHRcdHNldHRlci0tO1xuXHRcdH1cblxuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCA8IHNldHRlciApIHtcblx0XHRcdHJldHVybiBqUXVlcnkucXVldWUoIHRoaXNbIDAgXSwgdHlwZSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgP1xuXHRcdFx0dGhpcyA6XG5cdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIGRhdGEgKTtcblxuXHRcdFx0XHQvLyBFbnN1cmUgYSBob29rcyBmb3IgdGhpcyBxdWV1ZVxuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiZnhcIiAmJiBxdWV1ZVsgMCBdICE9PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdH0sXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHR9ICk7XG5cdH0sXG5cdGNsZWFyUXVldWU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0fSxcblxuXHQvLyBHZXQgYSBwcm9taXNlIHJlc29sdmVkIHdoZW4gcXVldWVzIG9mIGEgY2VydGFpbiB0eXBlXG5cdC8vIGFyZSBlbXB0aWVkIChmeCBpcyB0aGUgdHlwZSBieSBkZWZhdWx0KVxuXHRwcm9taXNlOiBmdW5jdGlvbiggdHlwZSwgb2JqICkge1xuXHRcdHZhciB0bXAsXG5cdFx0XHRjb3VudCA9IDEsXG5cdFx0XHRkZWZlciA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0ZWxlbWVudHMgPSB0aGlzLFxuXHRcdFx0aSA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0cmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICEoIC0tY291bnQgKSApIHtcblx0XHRcdFx0XHRkZWZlci5yZXNvbHZlV2l0aCggZWxlbWVudHMsIFsgZWxlbWVudHMgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG9iaiA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRtcCA9IGRhdGFQcml2LmdldCggZWxlbWVudHNbIGkgXSwgdHlwZSArIFwicXVldWVIb29rc1wiICk7XG5cdFx0XHRpZiAoIHRtcCAmJiB0bXAuZW1wdHkgKSB7XG5cdFx0XHRcdGNvdW50Kys7XG5cdFx0XHRcdHRtcC5lbXB0eS5hZGQoIHJlc29sdmUgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmVzb2x2ZSgpO1xuXHRcdHJldHVybiBkZWZlci5wcm9taXNlKCBvYmogKTtcblx0fVxufSApO1xudmFyIHBudW0gPSAoIC9bKy1dPyg/OlxcZCpcXC58KVxcZCsoPzpbZUVdWystXT9cXGQrfCkvICkuc291cmNlO1xuXG52YXIgcmNzc051bSA9IG5ldyBSZWdFeHAoIFwiXig/OihbKy1dKT18KShcIiArIHBudW0gKyBcIikoW2EteiVdKikkXCIsIFwiaVwiICk7XG5cblxudmFyIGNzc0V4cGFuZCA9IFsgXCJUb3BcIiwgXCJSaWdodFwiLCBcIkJvdHRvbVwiLCBcIkxlZnRcIiBdO1xuXG52YXIgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG5cblxuXHR2YXIgaXNBdHRhY2hlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7XG5cdFx0fSxcblx0XHRjb21wb3NlZCA9IHsgY29tcG9zZWQ6IHRydWUgfTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrLCBpT1MgMTAuMCAtIDEwLjIgb25seVxuXHQvLyBDaGVjayBhdHRhY2htZW50IGFjcm9zcyBzaGFkb3cgRE9NIGJvdW5kYXJpZXMgd2hlbiBwb3NzaWJsZSAoZ2gtMzUwNClcblx0Ly8gU3VwcG9ydDogaU9TIDEwLjAtMTAuMiBvbmx5XG5cdC8vIEVhcmx5IGlPUyAxMCB2ZXJzaW9ucyBzdXBwb3J0IGBhdHRhY2hTaGFkb3dgIGJ1dCBub3QgYGdldFJvb3ROb2RlYCxcblx0Ly8gbGVhZGluZyB0byBlcnJvcnMuIFdlIG5lZWQgdG8gY2hlY2sgZm9yIGBnZXRSb290Tm9kZWAuXG5cdGlmICggZG9jdW1lbnRFbGVtZW50LmdldFJvb3ROb2RlICkge1xuXHRcdGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Um9vdE5vZGUoIGNvbXBvc2VkICkgPT09IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHR9O1xuXHR9XG52YXIgaXNIaWRkZW5XaXRoaW5UcmVlID0gZnVuY3Rpb24oIGVsZW0sIGVsICkge1xuXG5cdFx0Ly8gaXNIaWRkZW5XaXRoaW5UcmVlIG1pZ2h0IGJlIGNhbGxlZCBmcm9tIGpRdWVyeSNmaWx0ZXIgZnVuY3Rpb247XG5cdFx0Ly8gaW4gdGhhdCBjYXNlLCBlbGVtZW50IHdpbGwgYmUgc2Vjb25kIGFyZ3VtZW50XG5cdFx0ZWxlbSA9IGVsIHx8IGVsZW07XG5cblx0XHQvLyBJbmxpbmUgc3R5bGUgdHJ1bXBzIGFsbFxuXHRcdHJldHVybiBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwibm9uZVwiIHx8XG5cdFx0XHRlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiZcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlLCBjaGVjayBjb21wdXRlZCBzdHlsZVxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTQzIC0gNDVcblx0XHRcdC8vIERpc2Nvbm5lY3RlZCBlbGVtZW50cyBjYW4gaGF2ZSBjb21wdXRlZCBkaXNwbGF5OiBub25lLCBzbyBmaXJzdCBjb25maXJtIHRoYXQgZWxlbSBpc1xuXHRcdFx0Ly8gaW4gdGhlIGRvY3VtZW50LlxuXHRcdFx0aXNBdHRhY2hlZCggZWxlbSApICYmXG5cblx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgPT09IFwibm9uZVwiO1xuXHR9O1xuXG5cblxuZnVuY3Rpb24gYWRqdXN0Q1NTKCBlbGVtLCBwcm9wLCB2YWx1ZVBhcnRzLCB0d2VlbiApIHtcblx0dmFyIGFkanVzdGVkLCBzY2FsZSxcblx0XHRtYXhJdGVyYXRpb25zID0gMjAsXG5cdFx0Y3VycmVudFZhbHVlID0gdHdlZW4gP1xuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5jdXIoKTtcblx0XHRcdH0gOlxuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wLCBcIlwiICk7XG5cdFx0XHR9LFxuXHRcdGluaXRpYWwgPSBjdXJyZW50VmFsdWUoKSxcblx0XHR1bml0ID0gdmFsdWVQYXJ0cyAmJiB2YWx1ZVBhcnRzWyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICksXG5cblx0XHQvLyBTdGFydGluZyB2YWx1ZSBjb21wdXRhdGlvbiBpcyByZXF1aXJlZCBmb3IgcG90ZW50aWFsIHVuaXQgbWlzbWF0Y2hlc1xuXHRcdGluaXRpYWxJblVuaXQgPSBlbGVtLm5vZGVUeXBlICYmXG5cdFx0XHQoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSB8fCB1bml0ICE9PSBcInB4XCIgJiYgK2luaXRpYWwgKSAmJlxuXHRcdFx0cmNzc051bS5leGVjKCBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wICkgKTtcblxuXHRpZiAoIGluaXRpYWxJblVuaXQgJiYgaW5pdGlhbEluVW5pdFsgMyBdICE9PSB1bml0ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XG5cdFx0Ly8gSGFsdmUgdGhlIGl0ZXJhdGlvbiB0YXJnZXQgdmFsdWUgdG8gcHJldmVudCBpbnRlcmZlcmVuY2UgZnJvbSBDU1MgdXBwZXIgYm91bmRzIChnaC0yMTQ0KVxuXHRcdGluaXRpYWwgPSBpbml0aWFsIC8gMjtcblxuXHRcdC8vIFRydXN0IHVuaXRzIHJlcG9ydGVkIGJ5IGpRdWVyeS5jc3Ncblx0XHR1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5Vbml0WyAzIF07XG5cblx0XHQvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludFxuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbCB8fCAxO1xuXG5cdFx0d2hpbGUgKCBtYXhJdGVyYXRpb25zLS0gKSB7XG5cblx0XHRcdC8vIEV2YWx1YXRlIGFuZCB1cGRhdGUgb3VyIGJlc3QgZ3Vlc3MgKGRvdWJsaW5nIGd1ZXNzZXMgdGhhdCB6ZXJvIG91dCkuXG5cdFx0XHQvLyBGaW5pc2ggaWYgdGhlIHNjYWxlIGVxdWFscyBvciBjcm9zc2VzIDEgKG1ha2luZyB0aGUgb2xkKm5ldyBwcm9kdWN0IG5vbi1wb3NpdGl2ZSkuXG5cdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cdFx0XHRpZiAoICggMSAtIHNjYWxlICkgKiAoIDEgLSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFsIHx8IDAuNSApICkgPD0gMCApIHtcblx0XHRcdFx0bWF4SXRlcmF0aW9ucyA9IDA7XG5cdFx0XHR9XG5cdFx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAvIHNjYWxlO1xuXG5cdFx0fVxuXG5cdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgKiAyO1xuXHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB3ZSB1cGRhdGUgdGhlIHR3ZWVuIHByb3BlcnRpZXMgbGF0ZXIgb25cblx0XHR2YWx1ZVBhcnRzID0gdmFsdWVQYXJ0cyB8fCBbXTtcblx0fVxuXG5cdGlmICggdmFsdWVQYXJ0cyApIHtcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWxJblVuaXQgfHwgK2luaXRpYWwgfHwgMDtcblxuXHRcdC8vIEFwcGx5IHJlbGF0aXZlIG9mZnNldCAoKz0vLT0pIGlmIHNwZWNpZmllZFxuXHRcdGFkanVzdGVkID0gdmFsdWVQYXJ0c1sgMSBdID9cblx0XHRcdGluaXRpYWxJblVuaXQgKyAoIHZhbHVlUGFydHNbIDEgXSArIDEgKSAqIHZhbHVlUGFydHNbIDIgXSA6XG5cdFx0XHQrdmFsdWVQYXJ0c1sgMiBdO1xuXHRcdGlmICggdHdlZW4gKSB7XG5cdFx0XHR0d2Vlbi51bml0ID0gdW5pdDtcblx0XHRcdHR3ZWVuLnN0YXJ0ID0gaW5pdGlhbEluVW5pdDtcblx0XHRcdHR3ZWVuLmVuZCA9IGFkanVzdGVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYWRqdXN0ZWQ7XG59XG5cblxudmFyIGRlZmF1bHREaXNwbGF5TWFwID0ge307XG5cbmZ1bmN0aW9uIGdldERlZmF1bHREaXNwbGF5KCBlbGVtICkge1xuXHR2YXIgdGVtcCxcblx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQsXG5cdFx0bm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLFxuXHRcdGRpc3BsYXkgPSBkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXTtcblxuXHRpZiAoIGRpc3BsYXkgKSB7XG5cdFx0cmV0dXJuIGRpc3BsYXk7XG5cdH1cblxuXHR0ZW1wID0gZG9jLmJvZHkuYXBwZW5kQ2hpbGQoIGRvYy5jcmVhdGVFbGVtZW50KCBub2RlTmFtZSApICk7XG5cdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCB0ZW1wLCBcImRpc3BsYXlcIiApO1xuXG5cdHRlbXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdGVtcCApO1xuXG5cdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0ZGlzcGxheSA9IFwiYmxvY2tcIjtcblx0fVxuXHRkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7XG5cblx0cmV0dXJuIGRpc3BsYXk7XG59XG5cbmZ1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHtcblx0dmFyIGRpc3BsYXksIGVsZW0sXG5cdFx0dmFsdWVzID0gW10sXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuXHQvLyBEZXRlcm1pbmUgbmV3IGRpc3BsYXkgdmFsdWUgZm9yIGVsZW1lbnRzIHRoYXQgbmVlZCB0byBjaGFuZ2Vcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRlbGVtID0gZWxlbWVudHNbIGluZGV4IF07XG5cdFx0aWYgKCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7XG5cdFx0aWYgKCBzaG93ICkge1xuXG5cdFx0XHQvLyBTaW5jZSB3ZSBmb3JjZSB2aXNpYmlsaXR5IHVwb24gY2FzY2FkZS1oaWRkZW4gZWxlbWVudHMsIGFuIGltbWVkaWF0ZSAoYW5kIHNsb3cpXG5cdFx0XHQvLyBjaGVjayBpcyByZXF1aXJlZCBpbiB0aGlzIGZpcnN0IGxvb3AgdW5sZXNzIHdlIGhhdmUgYSBub25lbXB0eSBkaXNwbGF5IHZhbHVlIChlaXRoZXJcblx0XHRcdC8vIGlubGluZSBvciBhYm91dC10by1iZS1yZXN0b3JlZClcblx0XHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKSB8fCBudWxsO1xuXHRcdFx0XHRpZiAoICF2YWx1ZXNbIGluZGV4IF0gKSB7XG5cdFx0XHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICkgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGdldERlZmF1bHREaXNwbGF5KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggZGlzcGxheSAhPT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IFwibm9uZVwiO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHdoYXQgd2UncmUgb3ZlcndyaXRpbmdcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImRpc3BsYXlcIiwgZGlzcGxheSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFNldCB0aGUgZGlzcGxheSBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcCB0byBhdm9pZCBjb25zdGFudCByZWZsb3dcblx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoIHZhbHVlc1sgaW5kZXggXSAhPSBudWxsICkge1xuXHRcdFx0ZWxlbWVudHNbIGluZGV4IF0uc3R5bGUuZGlzcGxheSA9IHZhbHVlc1sgaW5kZXggXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudHM7XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2hvdzogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzLCB0cnVlICk7XG5cdH0sXG5cdGhpZGU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcyApO1xuXHR9LFxuXHR0b2dnbGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHtcblx0XHRpZiAoIHR5cGVvZiBzdGF0ZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGUgPyB0aGlzLnNob3coKSA6IHRoaXMuaGlkZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBpc0hpZGRlbldpdGhpblRyZWUoIHRoaXMgKSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuc2hvdygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xudmFyIHJjaGVja2FibGVUeXBlID0gKCAvXig/OmNoZWNrYm94fHJhZGlvKSQvaSApO1xuXG52YXIgcnRhZ05hbWUgPSAoIC88KFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKikvaSApO1xuXG52YXIgcnNjcmlwdFR5cGUgPSAoIC9eJHxebW9kdWxlJHxcXC8oPzpqYXZhfGVjbWEpc2NyaXB0L2kgKTtcblxuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRkaXYgPSBmcmFnbWVudC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICksXG5cdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5XG5cdC8vIENoZWNrIHN0YXRlIGxvc3QgaWYgdGhlIG5hbWUgaXMgc2V0ICh0cmFjLTExMjE3KVxuXHQvLyBTdXBwb3J0OiBXaW5kb3dzIFdlYiBBcHBzIChXV0EpXG5cdC8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAodHJhYy0xNDkwMSlcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJyYWRpb1wiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJjaGVja2VkXCIsIFwiY2hlY2tlZFwiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwidFwiICk7XG5cblx0ZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgb25seVxuXHQvLyBPbGRlciBXZWJLaXQgZG9lc24ndCBjbG9uZSBjaGVja2VkIHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVudHNcblx0c3VwcG9ydC5jaGVja0Nsb25lID0gZGl2LmNsb25lTm9kZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5jaGVja2VkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNYWtlIHN1cmUgdGV4dGFyZWEgKGFuZCBjaGVja2JveCkgZGVmYXVsdFZhbHVlIGlzIHByb3Blcmx5IGNsb25lZFxuXHRkaXYuaW5uZXJIVE1MID0gXCI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+XCI7XG5cdHN1cHBvcnQubm9DbG9uZUNoZWNrZWQgPSAhIWRpdi5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdC8vIElFIDw9OSByZXBsYWNlcyA8b3B0aW9uPiB0YWdzIHdpdGggdGhlaXIgY29udGVudHMgd2hlbiBpbnNlcnRlZCBvdXRzaWRlIG9mXG5cdC8vIHRoZSBzZWxlY3QgZWxlbWVudC5cblx0ZGl2LmlubmVySFRNTCA9IFwiPG9wdGlvbj48L29wdGlvbj5cIjtcblx0c3VwcG9ydC5vcHRpb24gPSAhIWRpdi5sYXN0Q2hpbGQ7XG59ICkoKTtcblxuXG4vLyBXZSBoYXZlIHRvIGNsb3NlIHRoZXNlIHRhZ3MgdG8gc3VwcG9ydCBYSFRNTCAodHJhYy0xMzIwMClcbnZhciB3cmFwTWFwID0ge1xuXG5cdC8vIFhIVE1MIHBhcnNlcnMgZG8gbm90IG1hZ2ljYWxseSBpbnNlcnQgZWxlbWVudHMgaW4gdGhlXG5cdC8vIHNhbWUgd2F5IHRoYXQgdGFnIHNvdXAgcGFyc2VycyBkby4gU28gd2UgY2Fubm90IHNob3J0ZW5cblx0Ly8gdGhpcyBieSBvbWl0dGluZyA8dGJvZHk+IG9yIG90aGVyIHJlcXVpcmVkIGVsZW1lbnRzLlxuXHR0aGVhZDogWyAxLCBcIjx0YWJsZT5cIiwgXCI8L3RhYmxlPlwiIF0sXG5cdGNvbDogWyAyLCBcIjx0YWJsZT48Y29sZ3JvdXA+XCIsIFwiPC9jb2xncm91cD48L3RhYmxlPlwiIF0sXG5cdHRyOiBbIDIsIFwiPHRhYmxlPjx0Ym9keT5cIiwgXCI8L3Rib2R5PjwvdGFibGU+XCIgXSxcblx0dGQ6IFsgMywgXCI8dGFibGU+PHRib2R5Pjx0cj5cIiwgXCI8L3RyPjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXG5cdF9kZWZhdWx0OiBbIDAsIFwiXCIsIFwiXCIgXVxufTtcblxud3JhcE1hcC50Ym9keSA9IHdyYXBNYXAudGZvb3QgPSB3cmFwTWFwLmNvbGdyb3VwID0gd3JhcE1hcC5jYXB0aW9uID0gd3JhcE1hcC50aGVhZDtcbndyYXBNYXAudGggPSB3cmFwTWFwLnRkO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuaWYgKCAhc3VwcG9ydC5vcHRpb24gKSB7XG5cdHdyYXBNYXAub3B0Z3JvdXAgPSB3cmFwTWFwLm9wdGlvbiA9IFsgMSwgXCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+XCIsIFwiPC9zZWxlY3Q+XCIgXTtcbn1cblxuXG5mdW5jdGlvbiBnZXRBbGwoIGNvbnRleHQsIHRhZyApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFVzZSB0eXBlb2YgdG8gYXZvaWQgemVyby1hcmd1bWVudCBtZXRob2QgaW52b2NhdGlvbiBvbiBob3N0IG9iamVjdHMgKHRyYWMtMTUxNTEpXG5cdHZhciByZXQ7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2UgaWYgKCB0eXBlb2YgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIHtcblx0XHRyZXQgPSBbXTtcblx0fVxuXG5cdGlmICggdGFnID09PSB1bmRlZmluZWQgfHwgdGFnICYmIG5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgcmV0ICk7XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufVxuXG5cbi8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZFxuZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZGF0YVByaXYuc2V0KFxuXHRcdFx0ZWxlbXNbIGkgXSxcblx0XHRcdFwiZ2xvYmFsRXZhbFwiLFxuXHRcdFx0IXJlZkVsZW1lbnRzIHx8IGRhdGFQcml2LmdldCggcmVmRWxlbWVudHNbIGkgXSwgXCJnbG9iYWxFdmFsXCIgKVxuXHRcdCk7XG5cdH1cbn1cblxuXG52YXIgcmh0bWwgPSAvPHwmIz9cXHcrOy87XG5cbmZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24sIGlnbm9yZWQgKSB7XG5cdHZhciBlbGVtLCB0bXAsIHRhZywgd3JhcCwgYXR0YWNoZWQsIGosXG5cdFx0ZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRub2RlcyA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGVsZW0gPSBlbGVtc1sgaSBdO1xuXG5cdFx0aWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7XG5cblx0XHRcdC8vIEFkZCBub2RlcyBkaXJlY3RseVxuXHRcdFx0aWYgKCB0b1R5cGUoIGVsZW0gKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCBlbGVtLm5vZGVUeXBlID8gWyBlbGVtIF0gOiBlbGVtICk7XG5cblx0XHRcdC8vIENvbnZlcnQgbm9uLWh0bWwgaW50byBhIHRleHQgbm9kZVxuXHRcdFx0fSBlbHNlIGlmICggIXJodG1sLnRlc3QoIGVsZW0gKSApIHtcblx0XHRcdFx0bm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7XG5cblx0XHRcdC8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2Rlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dG1wID0gdG1wIHx8IGZyYWdtZW50LmFwcGVuZENoaWxkKCBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApO1xuXG5cdFx0XHRcdC8vIERlc2VyaWFsaXplIGEgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25cblx0XHRcdFx0dGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0O1xuXHRcdFx0XHR0bXAuaW5uZXJIVE1MID0gd3JhcFsgMSBdICsgalF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIGVsZW0gKSArIHdyYXBbIDIgXTtcblxuXHRcdFx0XHQvLyBEZXNjZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnRcblx0XHRcdFx0aiA9IHdyYXBbIDAgXTtcblx0XHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdFx0dG1wID0gdG1wLmxhc3RDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIHRtcC5jaGlsZE5vZGVzICk7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgdGhlIHRvcC1sZXZlbCBjb250YWluZXJcblx0XHRcdFx0dG1wID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdFx0XHQvLyBFbnN1cmUgdGhlIGNyZWF0ZWQgbm9kZXMgYXJlIG9ycGhhbmVkICh0cmFjLTEyMzkyKVxuXHRcdFx0XHR0bXAudGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJlbW92ZSB3cmFwcGVyIGZyb20gZnJhZ21lbnRcblx0ZnJhZ21lbnQudGV4dENvbnRlbnQgPSBcIlwiO1xuXG5cdGkgPSAwO1xuXHR3aGlsZSAoICggZWxlbSA9IG5vZGVzWyBpKysgXSApICkge1xuXG5cdFx0Ly8gU2tpcCBlbGVtZW50cyBhbHJlYWR5IGluIHRoZSBjb250ZXh0IGNvbGxlY3Rpb24gKHRyYWMtNDA4Nylcblx0XHRpZiAoIHNlbGVjdGlvbiAmJiBqUXVlcnkuaW5BcnJheSggZWxlbSwgc2VsZWN0aW9uICkgPiAtMSApIHtcblx0XHRcdGlmICggaWdub3JlZCApIHtcblx0XHRcdFx0aWdub3JlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRhdHRhY2hlZCA9IGlzQXR0YWNoZWQoIGVsZW0gKTtcblxuXHRcdC8vIEFwcGVuZCB0byBmcmFnbWVudFxuXHRcdHRtcCA9IGdldEFsbCggZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGVsZW0gKSwgXCJzY3JpcHRcIiApO1xuXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxuXHRcdGlmICggYXR0YWNoZWQgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCB0bXAgKTtcblx0XHR9XG5cblx0XHQvLyBDYXB0dXJlIGV4ZWN1dGFibGVzXG5cdFx0aWYgKCBzY3JpcHRzICkge1xuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRtcFsgaisrIF0gKSApIHtcblx0XHRcdFx0aWYgKCByc2NyaXB0VHlwZS50ZXN0KCBlbGVtLnR5cGUgfHwgXCJcIiApICkge1xuXHRcdFx0XHRcdHNjcmlwdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGZyYWdtZW50O1xufVxuXG5cbnZhciBydHlwZW5hbWVzcGFjZSA9IC9eKFteLl0qKSg/OlxcLiguKyl8KS87XG5cbmZ1bmN0aW9uIHJldHVyblRydWUoKSB7XG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZXR1cm5GYWxzZSgpIHtcblx0cmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBvbiggZWxlbSwgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgb25lICkge1xuXHR2YXIgb3JpZ0ZuLCB0eXBlO1xuXG5cdC8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVyc1xuXHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtT2JqZWN0LCBkYXRhIClcblx0XHRcdGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRvbiggZWxlbSwgdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwgKSB7XG5cblx0XHQvLyAoIHR5cGVzLCBmbiApXG5cdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vICggdHlwZXMsIGRhdGEsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHR9IGVsc2UgaWYgKCAhZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIG9uZSA9PT0gMSApIHtcblx0XHRvcmlnRm4gPSBmbjtcblx0XHRmbiA9IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0Ly8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvXG5cdFx0XHRqUXVlcnkoKS5vZmYoIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9O1xuXG5cdFx0Ly8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm5cblx0XHRmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlkKysgKTtcblx0fVxuXHRyZXR1cm4gZWxlbS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7XG5cdH0gKTtcbn1cblxuLypcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS5cbiAqIFByb3BzIHRvIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeSBmb3IgbWFueSBvZiB0aGUgaWRlYXMuXG4gKi9cbmpRdWVyeS5ldmVudCA9IHtcblxuXHRnbG9iYWw6IHt9LFxuXG5cdGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHtcblxuXHRcdHZhciBoYW5kbGVPYmpJbiwgZXZlbnRIYW5kbGUsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdC8vIE9ubHkgYXR0YWNoIGV2ZW50cyB0byBvYmplY3RzIHRoYXQgYWNjZXB0IGRhdGFcblx0XHRpZiAoICFhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIG9iamVjdCBvZiBjdXN0b20gZGF0YSBpbiBsaWV1IG9mIHRoZSBoYW5kbGVyXG5cdFx0aWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7XG5cdFx0XHRoYW5kbGVPYmpJbiA9IGhhbmRsZXI7XG5cdFx0XHRoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjtcblx0XHRcdHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7XG5cdFx0fVxuXG5cdFx0Ly8gRW5zdXJlIHRoYXQgaW52YWxpZCBzZWxlY3RvcnMgdGhyb3cgZXhjZXB0aW9ucyBhdCBhdHRhY2ggdGltZVxuXHRcdC8vIEV2YWx1YXRlIGFnYWluc3QgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgZWxlbSBpcyBhIG5vbi1lbGVtZW50IG5vZGUgKGUuZy4sIGRvY3VtZW50KVxuXHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGRvY3VtZW50RWxlbWVudCwgc2VsZWN0b3IgKTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXJcblx0XHRpZiAoICFoYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrO1xuXHRcdH1cblxuXHRcdC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3Rcblx0XHRpZiAoICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0ZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0gT2JqZWN0LmNyZWF0ZSggbnVsbCApO1xuXHRcdH1cblx0XHRpZiAoICEoIGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlICkgKSB7XG5cdFx0XHRldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSA9IGZ1bmN0aW9uKCBlICkge1xuXG5cdFx0XHRcdC8vIERpc2NhcmQgdGhlIHNlY29uZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kXG5cdFx0XHRcdC8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWRcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiBqUXVlcnkgIT09IFwidW5kZWZpbmVkXCIgJiYgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlID9cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBwbHkoIGVsZW0sIGFyZ3VtZW50cyApIDogdW5kZWZpbmVkO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFRoZXJlICptdXN0KiBiZSBhIHR5cGUsIG5vIGF0dGFjaGluZyBuYW1lc3BhY2Utb25seSBoYW5kbGVyc1xuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBzcGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZVxuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXG5cdFx0XHQvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSByZXNldCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnNcblx0XHRcdGhhbmRsZU9iaiA9IGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0b3JpZ1R5cGU6IG9yaWdUeXBlLFxuXHRcdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0XHRoYW5kbGVyOiBoYW5kbGVyLFxuXHRcdFx0XHRndWlkOiBoYW5kbGVyLmd1aWQsXG5cdFx0XHRcdHNlbGVjdG9yOiBzZWxlY3Rvcixcblx0XHRcdFx0bmVlZHNDb250ZXh0OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSxcblx0XHRcdFx0bmFtZXNwYWNlOiBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiIClcblx0XHRcdH0sIGhhbmRsZU9iakluICk7XG5cblx0XHRcdC8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0XG5cdFx0XHRpZiAoICEoIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gKSApIHtcblx0XHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdO1xuXHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50ID0gMDtcblxuXHRcdFx0XHQvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyIGlmIHRoZSBzcGVjaWFsIGV2ZW50cyBoYW5kbGVyIHJldHVybnMgZmFsc2Vcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC5zZXR1cCB8fFxuXHRcdFx0XHRcdHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdFx0XHRcdGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBzcGVjaWFsLmFkZCApIHtcblx0XHRcdFx0c3BlY2lhbC5hZGQuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cblx0XHRcdFx0aWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHtcblx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5ndWlkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250XG5cdFx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQrKywgMCwgaGFuZGxlT2JqICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRoYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gS2VlcCB0cmFjayBvZiB3aGljaCBldmVudHMgaGF2ZSBldmVyIGJlZW4gdXNlZCwgZm9yIGV2ZW50IG9wdGltaXphdGlvblxuXHRcdFx0alF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTtcblx0XHR9XG5cblx0fSxcblxuXHQvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnRcblx0cmVtb3ZlOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHNlbGVjdG9yLCBtYXBwZWRUeXBlcyApIHtcblxuXHRcdHZhciBqLCBvcmlnQ291bnQsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICkgJiYgZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHRpZiAoICFlbGVtRGF0YSB8fCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1heSBiZSBvbWl0dGVkXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFVuYmluZCBhbGwgZXZlbnRzIChvbiB0aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQpIGZvciB0aGUgZWxlbWVudFxuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSB8fCBbXTtcblx0XHRcdHRtcCA9IHRtcFsgMiBdICYmXG5cdFx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApO1xuXG5cdFx0XHQvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzXG5cdFx0XHRvcmlnQ291bnQgPSBqID0gaGFuZGxlcnMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBqIF07XG5cblx0XHRcdFx0aWYgKCAoIG1hcHBlZFR5cGVzIHx8IG9yaWdUeXBlID09PSBoYW5kbGVPYmoub3JpZ1R5cGUgKSAmJlxuXHRcdFx0XHRcdCggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5kbGVPYmouZ3VpZCApICYmXG5cdFx0XHRcdFx0KCAhdG1wIHx8IHRtcC50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSAmJlxuXHRcdFx0XHRcdCggIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBoYW5kbGVPYmouc2VsZWN0b3IgfHxcblx0XHRcdFx0XHRcdHNlbGVjdG9yID09PSBcIioqXCIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7XG5cdFx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBqLCAxICk7XG5cblx0XHRcdFx0XHRpZiAoIGhhbmRsZU9iai5zZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBzcGVjaWFsLnJlbW92ZSApIHtcblx0XHRcdFx0XHRcdHNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0XG5cdFx0XHQvLyAoYXZvaWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJlbW92YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5kbGVycylcblx0XHRcdGlmICggb3JpZ0NvdW50ICYmICFoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdGlmICggIXNwZWNpYWwudGVhcmRvd24gfHxcblx0XHRcdFx0XHRzcGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMsIGVsZW1EYXRhLmhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZWxlbURhdGEuaGFuZGxlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkZWxldGUgZXZlbnRzWyB0eXBlIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIGRhdGEgYW5kIHRoZSBleHBhbmRvIGlmIGl0J3Mgbm8gbG9uZ2VyIHVzZWRcblx0XHRpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHtcblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJoYW5kbGUgZXZlbnRzXCIgKTtcblx0XHR9XG5cdH0sXG5cblx0ZGlzcGF0Y2g6IGZ1bmN0aW9uKCBuYXRpdmVFdmVudCApIHtcblxuXHRcdHZhciBpLCBqLCByZXQsIG1hdGNoZWQsIGhhbmRsZU9iaiwgaGFuZGxlclF1ZXVlLFxuXHRcdFx0YXJncyA9IG5ldyBBcnJheSggYXJndW1lbnRzLmxlbmd0aCApLFxuXG5cdFx0XHQvLyBNYWtlIGEgd3JpdGFibGUgalF1ZXJ5LkV2ZW50IGZyb20gdGhlIG5hdGl2ZSBldmVudCBvYmplY3Rcblx0XHRcdGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKSxcblxuXHRcdFx0aGFuZGxlcnMgPSAoXG5cdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJldmVudHNcIiApIHx8IE9iamVjdC5jcmVhdGUoIG51bGwgKVxuXHRcdFx0KVsgZXZlbnQudHlwZSBdIHx8IFtdLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVudC50eXBlIF0gfHwge307XG5cblx0XHQvLyBVc2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVudFxuXHRcdGFyZ3NbIDAgXSA9IGV2ZW50O1xuXG5cdFx0Zm9yICggaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRhcmdzWyBpIF0gPSBhcmd1bWVudHNbIGkgXTtcblx0XHR9XG5cblx0XHRldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRoaXM7XG5cblx0XHQvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkXG5cdFx0aWYgKCBzcGVjaWFsLnByZURpc3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGhhbmRsZXJzXG5cdFx0aGFuZGxlclF1ZXVlID0galF1ZXJ5LmV2ZW50LmhhbmRsZXJzLmNhbGwoIHRoaXMsIGV2ZW50LCBoYW5kbGVycyApO1xuXG5cdFx0Ly8gUnVuIGRlbGVnYXRlcyBmaXJzdDsgdGhleSBtYXkgd2FudCB0byBzdG9wIHByb3BhZ2F0aW9uIGJlbmVhdGggdXNcblx0XHRpID0gMDtcblx0XHR3aGlsZSAoICggbWF0Y2hlZCA9IGhhbmRsZXJRdWV1ZVsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07XG5cblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGhhbmRsZU9iaiA9IG1hdGNoZWQuaGFuZGxlcnNbIGorKyBdICkgJiZcblx0XHRcdFx0IWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGV2ZW50IGlzIG5hbWVzcGFjZWQsIHRoZW4gZWFjaCBoYW5kbGVyIGlzIG9ubHkgaW52b2tlZCBpZiBpdCBpc1xuXHRcdFx0XHQvLyBzcGVjaWFsbHkgdW5pdmVyc2FsIG9yIGl0cyBuYW1lc3BhY2VzIGFyZSBhIHN1cGVyc2V0IG9mIHRoZSBldmVudCdzLlxuXHRcdFx0XHRpZiAoICFldmVudC5ybmFtZXNwYWNlIHx8IGhhbmRsZU9iai5uYW1lc3BhY2UgPT09IGZhbHNlIHx8XG5cdFx0XHRcdFx0ZXZlbnQucm5hbWVzcGFjZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7XG5cblx0XHRcdFx0XHRldmVudC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7XG5cdFx0XHRcdFx0ZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhO1xuXG5cdFx0XHRcdFx0cmV0ID0gKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBoYW5kbGVPYmoub3JpZ1R5cGUgXSB8fCB7fSApLmhhbmRsZSB8fFxuXHRcdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIgKS5hcHBseSggbWF0Y2hlZC5lbGVtLCBhcmdzICk7XG5cblx0XHRcdFx0XHRpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGV2ZW50LnJlc3VsdCA9IHJldCApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbCB0aGUgcG9zdERpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZVxuXHRcdGlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7XG5cdFx0XHRzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0aGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwgaGFuZGxlcnMgKSB7XG5cdFx0dmFyIGksIGhhbmRsZU9iaiwgc2VsLCBtYXRjaGVkSGFuZGxlcnMsIG1hdGNoZWRTZWxlY3RvcnMsXG5cdFx0XHRoYW5kbGVyUXVldWUgPSBbXSxcblx0XHRcdGRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LFxuXHRcdFx0Y3VyID0gZXZlbnQudGFyZ2V0O1xuXG5cdFx0Ly8gRmluZCBkZWxlZ2F0ZSBoYW5kbGVyc1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTlcblx0XHRcdC8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3RhbmNlIHRyZWVzICh0cmFjLTEzMTgwKVxuXHRcdFx0Y3VyLm5vZGVUeXBlICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MlxuXHRcdFx0Ly8gU3VwcHJlc3Mgc3BlYy12aW9sYXRpbmcgY2xpY2tzIGluZGljYXRpbmcgYSBub24tcHJpbWFyeSBwb2ludGVyIGJ1dHRvbiAodHJhYy0zODYxKVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnQtdHlwZS1jbGlja1xuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0Ly8gLi4uYnV0IG5vdCBhcnJvdyBrZXkgXCJjbGlja3NcIiBvZiByYWRpbyBpbnB1dHMsIHdoaWNoIGNhbiBoYXZlIGBidXR0b25gIC0xIChnaC0yMzQzKVxuXHRcdFx0ISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGV2ZW50LmJ1dHRvbiA+PSAxICkgKSB7XG5cblx0XHRcdGZvciAoIDsgY3VyICE9PSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlzICkge1xuXG5cdFx0XHRcdC8vIERvbid0IGNoZWNrIG5vbi1lbGVtZW50cyAodHJhYy0xMzIwOClcblx0XHRcdFx0Ly8gRG9uJ3QgcHJvY2VzcyBjbGlja3Mgb24gZGlzYWJsZWQgZWxlbWVudHMgKHRyYWMtNjkxMSwgdHJhYy04MTY1LCB0cmFjLTExMzgyLCB0cmFjLTExNzY0KVxuXHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiAhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgY3VyLmRpc2FibGVkID09PSB0cnVlICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzID0gW107XG5cdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9ycyA9IHt9O1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGkgXTtcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgY29uZmxpY3Qgd2l0aCBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKHRyYWMtMTMyMDMpXG5cdFx0XHRcdFx0XHRzZWwgPSBoYW5kbGVPYmouc2VsZWN0b3IgKyBcIiBcIjtcblxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQgP1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID4gLTEgOlxuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggbWF0Y2hlZEhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IG1hdGNoZWRIYW5kbGVycyB9ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5kKSBoYW5kbGVyc1xuXHRcdGN1ciA9IHRoaXM7XG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50IDwgaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogaGFuZGxlcnMuc2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGhhbmRsZXJRdWV1ZTtcblx0fSxcblxuXHRhZGRQcm9wOiBmdW5jdGlvbiggbmFtZSwgaG9vayApIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGpRdWVyeS5FdmVudC5wcm90b3R5cGUsIG5hbWUsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cblx0XHRcdGdldDogaXNGdW5jdGlvbiggaG9vayApID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gaG9vayggdGhpcy5vcmlnaW5hbEV2ZW50ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IDpcblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50WyBuYW1lIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCB0aGlzLCBuYW1lLCB7XG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Zml4OiBmdW5jdGlvbiggb3JpZ2luYWxFdmVudCApIHtcblx0XHRyZXR1cm4gb3JpZ2luYWxFdmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRvcmlnaW5hbEV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTtcblx0fSxcblxuXHRzcGVjaWFsOiB7XG5cdFx0bG9hZDoge1xuXG5cdFx0XHQvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkXG5cdFx0XHRub0J1YmJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0Y2xpY2s6IHtcblxuXHRcdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgdG8gZW5zdXJlIGNvcnJlY3Qgc3RhdGUgZm9yIGNoZWNrYWJsZSBpbnB1dHNcblx0XHRcdHNldHVwOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHRcdGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWwudHlwZSApICYmXG5cdFx0XHRcdFx0ZWwuY2xpY2sgJiYgbm9kZU5hbWUoIGVsLCBcImlucHV0XCIgKSApIHtcblxuXHRcdFx0XHRcdC8vIGRhdGFQcml2LnNldCggZWwsIFwiY2xpY2tcIiwgLi4uIClcblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSxcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxuXHRcdFx0XHQvLyBgfHwgZGF0YWAgaXMgZGVhZCBjb2RlIG1lYW50IG9ubHkgdG8gcHJlc2VydmUgdGhlIHZhcmlhYmxlIHRocm91Z2ggbWluaWZpY2F0aW9uLlxuXHRcdFx0XHR2YXIgZWwgPSB0aGlzIHx8IGRhdGE7XG5cblx0XHRcdFx0Ly8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXJpbmcgYSBjbGlja1xuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0sXG5cblx0XHRcdC8vIEZvciBjcm9zcy1icm93c2VyIGNvbnNpc3RlbmN5LCBzdXBwcmVzcyBuYXRpdmUgLmNsaWNrKCkgb24gbGlua3Ncblx0XHRcdC8vIEFsc28gcHJldmVudCBpdCBpZiB3ZSdyZSBjdXJyZW50bHkgaW5zaWRlIGEgbGV2ZXJhZ2VkIG5hdGl2ZS1ldmVudCBzdGFja1xuXHRcdFx0X2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0XHRcdFx0cmV0dXJuIHJjaGVja2FibGVUeXBlLnRlc3QoIHRhcmdldC50eXBlICkgJiZcblx0XHRcdFx0XHR0YXJnZXQuY2xpY2sgJiYgbm9kZU5hbWUoIHRhcmdldCwgXCJpbnB1dFwiICkgJiZcblx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRhcmdldCwgXCJjbGlja1wiICkgfHxcblx0XHRcdFx0XHRub2RlTmFtZSggdGFyZ2V0LCBcImFcIiApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRiZWZvcmV1bmxvYWQ6IHtcblx0XHRcdHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggMjArXG5cdFx0XHRcdC8vIEZpcmVmb3ggZG9lc24ndCBhbGVydCBpZiB0aGUgcmV0dXJuVmFsdWUgZmllbGQgaXMgbm90IHNldC5cblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdGV2ZW50Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBldmVudC5yZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIEVuc3VyZSB0aGUgcHJlc2VuY2Ugb2YgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBoYW5kbGVzIG1hbnVhbGx5LXRyaWdnZXJlZFxuLy8gc3ludGhldGljIGV2ZW50cyBieSBpbnRlcnJ1cHRpbmcgcHJvZ3Jlc3MgdW50aWwgcmVpbnZva2VkIGluIHJlc3BvbnNlIHRvXG4vLyAqbmF0aXZlKiBldmVudHMgdGhhdCBpdCBmaXJlcyBkaXJlY3RseSwgZW5zdXJpbmcgdGhhdCBzdGF0ZSBjaGFuZ2VzIGhhdmVcbi8vIGFscmVhZHkgb2NjdXJyZWQgYmVmb3JlIG90aGVyIGxpc3RlbmVycyBhcmUgaW52b2tlZC5cbmZ1bmN0aW9uIGxldmVyYWdlTmF0aXZlKCBlbCwgdHlwZSwgaXNTZXR1cCApIHtcblxuXHQvLyBNaXNzaW5nIGBpc1NldHVwYCBpbmRpY2F0ZXMgYSB0cmlnZ2VyIGNhbGwsIHdoaWNoIG11c3QgZm9yY2Ugc2V0dXAgdGhyb3VnaCBqUXVlcnkuZXZlbnQuYWRkXG5cdGlmICggIWlzU2V0dXAgKSB7XG5cdFx0aWYgKCBkYXRhUHJpdi5nZXQoIGVsLCB0eXBlICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCByZXR1cm5UcnVlICk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlZ2lzdGVyIHRoZSBjb250cm9sbGVyIGFzIGEgc3BlY2lhbCB1bml2ZXJzYWwgaGFuZGxlciBmb3IgYWxsIGV2ZW50IG5hbWVzcGFjZXNcblx0ZGF0YVByaXYuc2V0KCBlbCwgdHlwZSwgZmFsc2UgKTtcblx0alF1ZXJ5LmV2ZW50LmFkZCggZWwsIHR5cGUsIHtcblx0XHRuYW1lc3BhY2U6IGZhbHNlLFxuXHRcdGhhbmRsZXI6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciByZXN1bHQsXG5cdFx0XHRcdHNhdmVkID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdGlmICggKCBldmVudC5pc1RyaWdnZXIgJiAxICkgJiYgdGhpc1sgdHlwZSBdICkge1xuXG5cdFx0XHRcdC8vIEludGVycnVwdCBwcm9jZXNzaW5nIG9mIHRoZSBvdXRlciBzeW50aGV0aWMgLnRyaWdnZXIoKWVkIGV2ZW50XG5cdFx0XHRcdGlmICggIXNhdmVkICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgYXJndW1lbnRzIGZvciB1c2Ugd2hlbiBoYW5kbGluZyB0aGUgaW5uZXIgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdFx0Ly8gVGhlcmUgd2lsbCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IChhbiBldmVudCBvYmplY3QpLCBzbyB0aGlzIGFycmF5XG5cdFx0XHRcdFx0Ly8gd2lsbCBub3QgYmUgY29uZnVzZWQgd2l0aCBhIGxlZnRvdmVyIGNhcHR1cmUgb2JqZWN0LlxuXHRcdFx0XHRcdHNhdmVkID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBzYXZlZCApO1xuXG5cdFx0XHRcdFx0Ly8gVHJpZ2dlciB0aGUgbmF0aXZlIGV2ZW50IGFuZCBjYXB0dXJlIGl0cyByZXN1bHRcblx0XHRcdFx0XHR0aGlzWyB0eXBlIF0oKTtcblx0XHRcdFx0XHRyZXN1bHQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIGZhbHNlICk7XG5cblx0XHRcdFx0XHRpZiAoIHNhdmVkICE9PSByZXN1bHQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIENhbmNlbCB0aGUgb3V0ZXIgc3ludGhldGljIGV2ZW50XG5cdFx0XHRcdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoaXMgaXMgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IGZvciBhbiBldmVudCB3aXRoIGEgYnViYmxpbmcgc3Vycm9nYXRlXG5cdFx0XHRcdC8vIChmb2N1cyBvciBibHVyKSwgYXNzdW1lIHRoYXQgdGhlIHN1cnJvZ2F0ZSBhbHJlYWR5IHByb3BhZ2F0ZWQgZnJvbSB0cmlnZ2VyaW5nXG5cdFx0XHRcdC8vIHRoZSBuYXRpdmUgZXZlbnQgYW5kIHByZXZlbnQgdGhhdCBmcm9tIGhhcHBlbmluZyBhZ2FpbiBoZXJlLlxuXHRcdFx0XHQvLyBUaGlzIHRlY2huaWNhbGx5IGdldHMgdGhlIG9yZGVyaW5nIHdyb25nIHcuci50LiB0byBgLnRyaWdnZXIoKWAgKGluIHdoaWNoIHRoZVxuXHRcdFx0XHQvLyBidWJibGluZyBzdXJyb2dhdGUgcHJvcGFnYXRlcyAqYWZ0ZXIqIHRoZSBub24tYnViYmxpbmcgYmFzZSksIGJ1dCB0aGF0IHNlZW1zXG5cdFx0XHRcdC8vIGxlc3MgYmFkIHRoYW4gZHVwbGljYXRpb24uXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fSApLmRlbGVnYXRlVHlwZSApIHtcblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgbmF0aXZlIGV2ZW50IHRyaWdnZXJlZCBhYm92ZSwgZXZlcnl0aGluZyBpcyBub3cgaW4gb3JkZXJcblx0XHRcdC8vIEZpcmUgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IHdpdGggdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggc2F2ZWQgKSB7XG5cblx0XHRcdFx0Ly8gLi4uYW5kIGNhcHR1cmUgdGhlIHJlc3VsdFxuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIGpRdWVyeS5ldmVudC50cmlnZ2VyKFxuXHRcdFx0XHRcdHNhdmVkWyAwIF0sXG5cdFx0XHRcdFx0c2F2ZWQuc2xpY2UoIDEgKSxcblx0XHRcdFx0XHR0aGlzXG5cdFx0XHRcdCkgKTtcblxuXHRcdFx0XHQvLyBBYm9ydCBoYW5kbGluZyBvZiB0aGUgbmF0aXZlIGV2ZW50IGJ5IGFsbCBqUXVlcnkgaGFuZGxlcnMgd2hpbGUgYWxsb3dpbmdcblx0XHRcdFx0Ly8gbmF0aXZlIGhhbmRsZXJzIG9uIHRoZSBzYW1lIGVsZW1lbnQgdG8gcnVuLiBPbiB0YXJnZXQsIHRoaXMgaXMgYWNoaWV2ZWRcblx0XHRcdFx0Ly8gYnkgc3RvcHBpbmcgaW1tZWRpYXRlIHByb3BhZ2F0aW9uIGp1c3Qgb24gdGhlIGpRdWVyeSBldmVudC4gSG93ZXZlcixcblx0XHRcdFx0Ly8gdGhlIG5hdGl2ZSBldmVudCBpcyByZS13cmFwcGVkIGJ5IGEgalF1ZXJ5IG9uZSBvbiBlYWNoIGxldmVsIG9mIHRoZVxuXHRcdFx0XHQvLyBwcm9wYWdhdGlvbiBzbyB0aGUgb25seSB3YXkgdG8gc3RvcCBpdCBmb3IgalF1ZXJ5IGlzIHRvIHN0b3AgaXQgZm9yXG5cdFx0XHRcdC8vIGV2ZXJ5b25lIHZpYSBuYXRpdmUgYHN0b3BQcm9wYWdhdGlvbigpYC4gVGhpcyBpcyBub3QgYSBwcm9ibGVtIGZvclxuXHRcdFx0XHQvLyBmb2N1cy9ibHVyIHdoaWNoIGRvbid0IGJ1YmJsZSwgYnV0IGl0IGRvZXMgYWxzbyBzdG9wIGNsaWNrIG9uIGNoZWNrYm94ZXNcblx0XHRcdFx0Ly8gYW5kIHJhZGlvcy4gV2UgYWNjZXB0IHRoaXMgbGltaXRhdGlvbi5cblx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdGV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH0gKTtcbn1cblxualF1ZXJ5LnJlbW92ZUV2ZW50ID0gZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHtcblxuXHQvLyBUaGlzIFwiaWZcIiBpcyBuZWVkZWQgZm9yIHBsYWluIG9iamVjdHNcblx0aWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0ZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUgKTtcblx0fVxufTtcblxualF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJvcHMgKSB7XG5cblx0Ly8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3JkXG5cdGlmICggISggdGhpcyBpbnN0YW5jZW9mIGpRdWVyeS5FdmVudCApICkge1xuXHRcdHJldHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBFdmVudCBvYmplY3Rcblx0aWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7XG5cdFx0dGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjO1xuXHRcdHRoaXMudHlwZSA9IHNyYy50eXBlO1xuXG5cdFx0Ly8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWRcblx0XHQvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHNyYy5kZWZhdWx0UHJldmVudGVkIHx8XG5cdFx0XHRcdHNyYy5kZWZhdWx0UHJldmVudGVkID09PSB1bmRlZmluZWQgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHlcblx0XHRcdFx0c3JjLnJldHVyblZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRyZXR1cm5UcnVlIDpcblx0XHRcdHJldHVybkZhbHNlO1xuXG5cdFx0Ly8gQ3JlYXRlIHRhcmdldCBwcm9wZXJ0aWVzXG5cdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDw9NiAtIDcgb25seVxuXHRcdC8vIFRhcmdldCBzaG91bGQgbm90IGJlIGEgdGV4dCBub2RlICh0cmFjLTUwNCwgdHJhYy0xMzE0Mylcblx0XHR0aGlzLnRhcmdldCA9ICggc3JjLnRhcmdldCAmJiBzcmMudGFyZ2V0Lm5vZGVUeXBlID09PSAzICkgP1xuXHRcdFx0c3JjLnRhcmdldC5wYXJlbnROb2RlIDpcblx0XHRcdHNyYy50YXJnZXQ7XG5cblx0XHR0aGlzLmN1cnJlbnRUYXJnZXQgPSBzcmMuY3VycmVudFRhcmdldDtcblx0XHR0aGlzLnJlbGF0ZWRUYXJnZXQgPSBzcmMucmVsYXRlZFRhcmdldDtcblxuXHQvLyBFdmVudCB0eXBlXG5cdH0gZWxzZSB7XG5cdFx0dGhpcy50eXBlID0gc3JjO1xuXHR9XG5cblx0Ly8gUHV0IGV4cGxpY2l0bHkgcHJvdmlkZWQgcHJvcGVydGllcyBvbnRvIHRoZSBldmVudCBvYmplY3Rcblx0aWYgKCBwcm9wcyApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gQ3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmVcblx0dGhpcy50aW1lU3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpO1xuXG5cdC8vIE1hcmsgaXQgYXMgZml4ZWRcblx0dGhpc1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRydWU7XG59O1xuXG4vLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmdcbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDAzMDMzMS9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWxcbmpRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBqUXVlcnkuRXZlbnQsXG5cdGlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsXG5cdGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc1NpbXVsYXRlZDogZmFsc2UsXG5cblx0cHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0fSxcblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdG9wUHJvcGFnYXRpb24oKTtcblx0fVxufTtcblxuLy8gSW5jbHVkZXMgYWxsIGNvbW1vbiBldmVudCBwcm9wcyBpbmNsdWRpbmcgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnQgc3BlY2lmaWMgcHJvcHNcbmpRdWVyeS5lYWNoKCB7XG5cdGFsdEtleTogdHJ1ZSxcblx0YnViYmxlczogdHJ1ZSxcblx0Y2FuY2VsYWJsZTogdHJ1ZSxcblx0Y2hhbmdlZFRvdWNoZXM6IHRydWUsXG5cdGN0cmxLZXk6IHRydWUsXG5cdGRldGFpbDogdHJ1ZSxcblx0ZXZlbnRQaGFzZTogdHJ1ZSxcblx0bWV0YUtleTogdHJ1ZSxcblx0cGFnZVg6IHRydWUsXG5cdHBhZ2VZOiB0cnVlLFxuXHRzaGlmdEtleTogdHJ1ZSxcblx0dmlldzogdHJ1ZSxcblx0XCJjaGFyXCI6IHRydWUsXG5cdGNvZGU6IHRydWUsXG5cdGNoYXJDb2RlOiB0cnVlLFxuXHRrZXk6IHRydWUsXG5cdGtleUNvZGU6IHRydWUsXG5cdGJ1dHRvbjogdHJ1ZSxcblx0YnV0dG9uczogdHJ1ZSxcblx0Y2xpZW50WDogdHJ1ZSxcblx0Y2xpZW50WTogdHJ1ZSxcblx0b2Zmc2V0WDogdHJ1ZSxcblx0b2Zmc2V0WTogdHJ1ZSxcblx0cG9pbnRlcklkOiB0cnVlLFxuXHRwb2ludGVyVHlwZTogdHJ1ZSxcblx0c2NyZWVuWDogdHJ1ZSxcblx0c2NyZWVuWTogdHJ1ZSxcblx0dGFyZ2V0VG91Y2hlczogdHJ1ZSxcblx0dG9FbGVtZW50OiB0cnVlLFxuXHR0b3VjaGVzOiB0cnVlLFxuXHR3aGljaDogdHJ1ZVxufSwgalF1ZXJ5LmV2ZW50LmFkZFByb3AgKTtcblxualF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIHR5cGUsIGRlbGVnYXRlVHlwZSApIHtcblxuXHRmdW5jdGlvbiBmb2N1c01hcHBlZEhhbmRsZXIoIG5hdGl2ZUV2ZW50ICkge1xuXHRcdGlmICggZG9jdW1lbnQuZG9jdW1lbnRNb2RlICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMStcblx0XHRcdC8vIEF0dGFjaCBhIHNpbmdsZSBmb2N1c2luL2ZvY3Vzb3V0IGhhbmRsZXIgb24gdGhlIGRvY3VtZW50IHdoaWxlIHNvbWVvbmUgd2FudHNcblx0XHRcdC8vIGZvY3VzL2JsdXIuIFRoaXMgaXMgYmVjYXVzZSB0aGUgZm9ybWVyIGFyZSBzeW5jaHJvbm91cyBpbiBJRSB3aGlsZSB0aGUgbGF0dGVyXG5cdFx0XHQvLyBhcmUgYXN5bmMuIEluIG90aGVyIGJyb3dzZXJzLCBhbGwgdGhvc2UgaGFuZGxlcnMgYXJlIGludm9rZWQgc3luY2hyb25vdXNseS5cblxuXHRcdFx0Ly8gYGhhbmRsZWAgZnJvbSBwcml2YXRlIGRhdGEgd291bGQgYWxyZWFkeSB3cmFwIHRoZSBldmVudCwgYnV0IHdlIG5lZWRcblx0XHRcdC8vIHRvIGNoYW5nZSB0aGUgYHR5cGVgIGhlcmUuXG5cdFx0XHR2YXIgaGFuZGxlID0gZGF0YVByaXYuZ2V0KCB0aGlzLCBcImhhbmRsZVwiICksXG5cdFx0XHRcdGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKTtcblx0XHRcdGV2ZW50LnR5cGUgPSBuYXRpdmVFdmVudC50eXBlID09PSBcImZvY3VzaW5cIiA/IFwiZm9jdXNcIiA6IFwiYmx1clwiO1xuXHRcdFx0ZXZlbnQuaXNTaW11bGF0ZWQgPSB0cnVlO1xuXG5cdFx0XHQvLyBGaXJzdCwgaGFuZGxlIGZvY3VzaW4vZm9jdXNvdXRcblx0XHRcdGhhbmRsZSggbmF0aXZlRXZlbnQgKTtcblxuXHRcdFx0Ly8gLi4udGhlbiwgaGFuZGxlIGZvY3VzL2JsdXJcblx0XHRcdC8vXG5cdFx0XHQvLyBmb2N1cy9ibHVyIGRvbid0IGJ1YmJsZSB3aGlsZSBmb2N1c2luL2ZvY3Vzb3V0IGRvOyBzaW11bGF0ZSB0aGUgZm9ybWVyIGJ5IG9ubHlcblx0XHRcdC8vIGludm9raW5nIHRoZSBoYW5kbGVyIGF0IHRoZSBsb3dlciBsZXZlbC5cblx0XHRcdGlmICggZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICkge1xuXG5cdFx0XHRcdC8vIFRoZSBzZXR1cCBwYXJ0IGNhbGxzIGBsZXZlcmFnZU5hdGl2ZWAsIHdoaWNoLCBpbiB0dXJuLCBjYWxsc1xuXHRcdFx0XHQvLyBgalF1ZXJ5LmV2ZW50LmFkZGAsIHNvIGV2ZW50IGhhbmRsZSB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIHNldFxuXHRcdFx0XHQvLyBieSB0aGlzIHBvaW50LlxuXHRcdFx0XHRoYW5kbGUoIGV2ZW50ICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gRm9yIG5vbi1JRSBicm93c2VycywgYXR0YWNoIGEgc2luZ2xlIGNhcHR1cmluZyBoYW5kbGVyIG9uIHRoZSBkb2N1bWVudFxuXHRcdFx0Ly8gd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0LlxuXHRcdFx0alF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBkZWxlZ2F0ZVR5cGUsIG5hdGl2ZUV2ZW50LnRhcmdldCxcblx0XHRcdFx0alF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKSApO1xuXHRcdH1cblx0fVxuXG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gPSB7XG5cblx0XHQvLyBVdGlsaXplIG5hdGl2ZSBldmVudCBpZiBwb3NzaWJsZSBzbyBibHVyL2ZvY3VzIHNlcXVlbmNlIGlzIGNvcnJlY3Rcblx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdHZhciBhdHRhY2hlcztcblxuXHRcdFx0Ly8gQ2xhaW0gdGhlIGZpcnN0IGhhbmRsZXJcblx0XHRcdC8vIGRhdGFQcml2LnNldCggdGhpcywgXCJmb2N1c1wiLCAuLi4gKVxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImJsdXJcIiwgLi4uIClcblx0XHRcdGxldmVyYWdlTmF0aXZlKCB0aGlzLCB0eXBlLCB0cnVlICk7XG5cblx0XHRcdGlmICggZG9jdW1lbnQuZG9jdW1lbnRNb2RlICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMStcblx0XHRcdFx0Ly8gV2UgdXNlIHRoZSBzYW1lIG5hdGl2ZSBoYW5kbGVyIGZvciBmb2N1c2luICYgZm9jdXMgKGFuZCBmb2N1c291dCAmIGJsdXIpXG5cdFx0XHRcdC8vIHNvIHdlIG5lZWQgdG8gY29vcmRpbmF0ZSBzZXR1cCAmIHRlYXJkb3duIHBhcnRzIGJldHdlZW4gdGhvc2UgZXZlbnRzLlxuXHRcdFx0XHQvLyBVc2UgYGRlbGVnYXRlVHlwZWAgYXMgdGhlIGtleSBhcyBgdHlwZWAgaXMgYWxyZWFkeSB1c2VkIGJ5IGBsZXZlcmFnZU5hdGl2ZWAuXG5cdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuZ2V0KCB0aGlzLCBkZWxlZ2F0ZVR5cGUgKTtcblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKCBkZWxlZ2F0ZVR5cGUsIGZvY3VzTWFwcGVkSGFuZGxlciApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgZGVsZWdhdGVUeXBlLCAoIGF0dGFjaGVzIHx8IDAgKSArIDEgKTtcblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0dHJpZ2dlcjogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEZvcmNlIHNldHVwIGJlZm9yZSB0cmlnZ2VyXG5cdFx0XHRsZXZlcmFnZU5hdGl2ZSggdGhpcywgdHlwZSApO1xuXG5cdFx0XHQvLyBSZXR1cm4gbm9uLWZhbHNlIHRvIGFsbG93IG5vcm1hbCBldmVudC1wYXRoIHByb3BhZ2F0aW9uXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0dGVhcmRvd246IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGF0dGFjaGVzO1xuXG5cdFx0XHRpZiAoIGRvY3VtZW50LmRvY3VtZW50TW9kZSApIHtcblx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIGRlbGVnYXRlVHlwZSApIC0gMTtcblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCBkZWxlZ2F0ZVR5cGUsIGZvY3VzTWFwcGVkSGFuZGxlciApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggdGhpcywgZGVsZWdhdGVUeXBlICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCBkZWxlZ2F0ZVR5cGUsIGF0dGFjaGVzICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGluZGljYXRlIHN0YW5kYXJkIHRlYXJkb3duIHNob3VsZCBiZSBhcHBsaWVkXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gU3VwcHJlc3MgbmF0aXZlIGZvY3VzIG9yIGJsdXIgaWYgd2UncmUgY3VycmVudGx5IGluc2lkZVxuXHRcdC8vIGEgbGV2ZXJhZ2VkIG5hdGl2ZS1ldmVudCBzdGFja1xuXHRcdF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRyZXR1cm4gZGF0YVByaXYuZ2V0KCBldmVudC50YXJnZXQsIHR5cGUgKTtcblx0XHR9LFxuXG5cdFx0ZGVsZWdhdGVUeXBlOiBkZWxlZ2F0ZVR5cGVcblx0fTtcblxuXHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDRcblx0Ly8gRmlyZWZveCBkb2Vzbid0IGhhdmUgZm9jdXMoaW4gfCBvdXQpIGV2ZW50c1xuXHQvLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc4N1xuXHQvL1xuXHQvLyBTdXBwb3J0OiBDaHJvbWUgPD00OCAtIDQ5LCBTYWZhcmkgPD05LjAgLSA5LjFcblx0Ly8gZm9jdXMoaW4gfCBvdXQpIGV2ZW50cyBmaXJlIGFmdGVyIGZvY3VzICYgYmx1ciBldmVudHMsXG5cdC8vIHdoaWNoIGlzIHNwZWMgdmlvbGF0aW9uIC0gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtZm9jdXNldmVudC1ldmVudC1vcmRlclxuXHQvLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ0OTg1N1xuXHQvL1xuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErXG5cdC8vIFRvIHByZXNlcnZlIHJlbGF0aXZlIGZvY3VzaW4vZm9jdXMgJiBmb2N1c291dC9ibHVyIGV2ZW50IG9yZGVyIGd1YXJhbnRlZWQgb24gdGhlIDMueCBicmFuY2gsXG5cdC8vIGF0dGFjaCBhIHNpbmdsZSBoYW5kbGVyIGZvciBib3RoIGV2ZW50cyBpbiBJRS5cblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGRlbGVnYXRlVHlwZSBdID0ge1xuXHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gSGFuZGxlOiByZWd1bGFyIG5vZGVzICh2aWEgYHRoaXMub3duZXJEb2N1bWVudGApLCB3aW5kb3dcblx0XHRcdC8vICh2aWEgYHRoaXMuZG9jdW1lbnRgKSAmIGRvY3VtZW50ICh2aWEgYHRoaXNgKS5cblx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcy5kb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRkYXRhSG9sZGVyID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlID8gdGhpcyA6IGRvYyxcblx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5nZXQoIGRhdGFIb2xkZXIsIGRlbGVnYXRlVHlwZSApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErXG5cdFx0XHQvLyBXZSB1c2UgdGhlIHNhbWUgbmF0aXZlIGhhbmRsZXIgZm9yIGZvY3VzaW4gJiBmb2N1cyAoYW5kIGZvY3Vzb3V0ICYgYmx1cilcblx0XHRcdC8vIHNvIHdlIG5lZWQgdG8gY29vcmRpbmF0ZSBzZXR1cCAmIHRlYXJkb3duIHBhcnRzIGJldHdlZW4gdGhvc2UgZXZlbnRzLlxuXHRcdFx0Ly8gVXNlIGBkZWxlZ2F0ZVR5cGVgIGFzIHRoZSBrZXkgYXMgYHR5cGVgIGlzIGFscmVhZHkgdXNlZCBieSBgbGV2ZXJhZ2VOYXRpdmVgLlxuXHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdGlmICggZG9jdW1lbnQuZG9jdW1lbnRNb2RlICkge1xuXHRcdFx0XHRcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lciggZGVsZWdhdGVUeXBlLCBmb2N1c01hcHBlZEhhbmRsZXIgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkb2MuYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZm9jdXNNYXBwZWRIYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRhdGFQcml2LnNldCggZGF0YUhvbGRlciwgZGVsZWdhdGVUeXBlLCAoIGF0dGFjaGVzIHx8IDAgKSArIDEgKTtcblx0XHR9LFxuXHRcdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcy5kb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRkYXRhSG9sZGVyID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlID8gdGhpcyA6IGRvYyxcblx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5nZXQoIGRhdGFIb2xkZXIsIGRlbGVnYXRlVHlwZSApIC0gMTtcblxuXHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdGlmICggZG9jdW1lbnQuZG9jdW1lbnRNb2RlICkge1xuXHRcdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lciggZGVsZWdhdGVUeXBlLCBmb2N1c01hcHBlZEhhbmRsZXIgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgZm9jdXNNYXBwZWRIYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkYXRhSG9sZGVyLCBkZWxlZ2F0ZVR5cGUgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRhdGFQcml2LnNldCggZGF0YUhvbGRlciwgZGVsZWdhdGVUeXBlLCBhdHRhY2hlcyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn0gKTtcblxuLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzXG4vLyBzbyB0aGF0IGV2ZW50IGRlbGVnYXRpb24gd29ya3MgaW4galF1ZXJ5LlxuLy8gRG8gdGhlIHNhbWUgZm9yIHBvaW50ZXJlbnRlci9wb2ludGVybGVhdmUgYW5kIHBvaW50ZXJvdmVyL3BvaW50ZXJvdXRcbi8vXG4vLyBTdXBwb3J0OiBTYWZhcmkgNyBvbmx5XG4vLyBTYWZhcmkgc2VuZHMgbW91c2VlbnRlciB0b28gb2Z0ZW47IHNlZTpcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ3MDI1OFxuLy8gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYnVnIChpdCBleGlzdGVkIGluIG9sZGVyIENocm9tZSB2ZXJzaW9ucyBhcyB3ZWxsKS5cbmpRdWVyeS5lYWNoKCB7XG5cdG1vdXNlZW50ZXI6IFwibW91c2VvdmVyXCIsXG5cdG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIixcblx0cG9pbnRlcmVudGVyOiBcInBvaW50ZXJvdmVyXCIsXG5cdHBvaW50ZXJsZWF2ZTogXCJwb2ludGVyb3V0XCJcbn0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7XG5cdFx0ZGVsZWdhdGVUeXBlOiBmaXgsXG5cdFx0YmluZFR5cGU6IGZpeCxcblxuXHRcdGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIHJldCxcblx0XHRcdFx0dGFyZ2V0ID0gdGhpcyxcblx0XHRcdFx0cmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsXG5cdFx0XHRcdGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iajtcblxuXHRcdFx0Ly8gRm9yIG1vdXNlZW50ZXIvbGVhdmUgY2FsbCB0aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC5cblx0XHRcdC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBtb3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJyb3dzZXIgd2luZG93XG5cdFx0XHRpZiAoICFyZWxhdGVkIHx8ICggcmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCApICkgKSB7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7XG5cdFx0XHRcdHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGZpeDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0b246IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHRvbmU6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApO1xuXHR9LFxuXHRvZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGZuICkge1xuXHRcdHZhciBoYW5kbGVPYmosIHR5cGU7XG5cdFx0aWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7XG5cblx0XHRcdC8vICggZXZlbnQgKSAgZGlzcGF0Y2hlZCBqUXVlcnkuRXZlbnRcblx0XHRcdGhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9iajtcblx0XHRcdGpRdWVyeSggdHlwZXMuZGVsZWdhdGVUYXJnZXQgKS5vZmYoXG5cdFx0XHRcdGhhbmRsZU9iai5uYW1lc3BhY2UgP1xuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSArIFwiLlwiICsgaGFuZGxlT2JqLm5hbWVzcGFjZSA6XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlLFxuXHRcdFx0XHRoYW5kbGVPYmouc2VsZWN0b3IsXG5cdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLW9iamVjdCBbLCBzZWxlY3Rvcl0gKVxuXHRcdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcblx0XHRcdFx0dGhpcy5vZmYoIHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMgWywgZm5dIClcblx0XHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIHR5cGVzLCBmbiwgc2VsZWN0b3IgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG52YXJcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTEwIC0gMTEsIEVkZ2UgMTIgLSAxMyBvbmx5XG5cdC8vIEluIElFL0VkZ2UgdXNpbmcgcmVnZXggZ3JvdXBzIGhlcmUgY2F1c2VzIHNldmVyZSBzbG93ZG93bnMuXG5cdC8vIFNlZSBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzE3MzY1MTIvXG5cdHJub0lubmVyaHRtbCA9IC88c2NyaXB0fDxzdHlsZXw8bGluay9pLFxuXG5cdC8vIGNoZWNrZWQ9XCJjaGVja2VkXCIgb3IgY2hlY2tlZFxuXHRyY2hlY2tlZCA9IC9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2ksXG5cblx0cmNsZWFuU2NyaXB0ID0gL15cXHMqPCFcXFtDREFUQVxcW3xcXF1cXF0+XFxzKiQvZztcblxuLy8gUHJlZmVyIGEgdGJvZHkgb3ZlciBpdHMgcGFyZW50IHRhYmxlIGZvciBjb250YWluaW5nIG5ldyByb3dzXG5mdW5jdGlvbiBtYW5pcHVsYXRpb25UYXJnZXQoIGVsZW0sIGNvbnRlbnQgKSB7XG5cdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGFibGVcIiApICYmXG5cdFx0bm9kZU5hbWUoIGNvbnRlbnQubm9kZVR5cGUgIT09IDExID8gY29udGVudCA6IGNvbnRlbnQuZmlyc3RDaGlsZCwgXCJ0clwiICkgKSB7XG5cblx0XHRyZXR1cm4galF1ZXJ5KCBlbGVtICkuY2hpbGRyZW4oIFwidGJvZHlcIiApWyAwIF0gfHwgZWxlbTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG4vLyBSZXBsYWNlL3Jlc3RvcmUgdGhlIHR5cGUgYXR0cmlidXRlIG9mIHNjcmlwdCBlbGVtZW50cyBmb3Igc2FmZSBET00gbWFuaXB1bGF0aW9uXG5mdW5jdGlvbiBkaXNhYmxlU2NyaXB0KCBlbGVtICkge1xuXHRlbGVtLnR5cGUgPSAoIGVsZW0uZ2V0QXR0cmlidXRlKCBcInR5cGVcIiApICE9PSBudWxsICkgKyBcIi9cIiArIGVsZW0udHlwZTtcblx0cmV0dXJuIGVsZW07XG59XG5mdW5jdGlvbiByZXN0b3JlU2NyaXB0KCBlbGVtICkge1xuXHRpZiAoICggZWxlbS50eXBlIHx8IFwiXCIgKS5zbGljZSggMCwgNSApID09PSBcInRydWUvXCIgKSB7XG5cdFx0ZWxlbS50eXBlID0gZWxlbS50eXBlLnNsaWNlKCA1ICk7XG5cdH0gZWxzZSB7XG5cdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIFwidHlwZVwiICk7XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHtcblx0dmFyIGksIGwsIHR5cGUsIHBkYXRhT2xkLCB1ZGF0YU9sZCwgdWRhdGFDdXIsIGV2ZW50cztcblxuXHRpZiAoIGRlc3Qubm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gMS4gQ29weSBwcml2YXRlIGRhdGE6IGV2ZW50cywgaGFuZGxlcnMsIGV0Yy5cblx0aWYgKCBkYXRhUHJpdi5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHRwZGF0YU9sZCA9IGRhdGFQcml2LmdldCggc3JjICk7XG5cdFx0ZXZlbnRzID0gcGRhdGFPbGQuZXZlbnRzO1xuXG5cdFx0aWYgKCBldmVudHMgKSB7XG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGRlc3QsIFwiaGFuZGxlIGV2ZW50c1wiICk7XG5cblx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBkZXN0LCB0eXBlLCBldmVudHNbIHR5cGUgXVsgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyAyLiBDb3B5IHVzZXIgZGF0YVxuXHRpZiAoIGRhdGFVc2VyLmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHVkYXRhT2xkID0gZGF0YVVzZXIuYWNjZXNzKCBzcmMgKTtcblx0XHR1ZGF0YUN1ciA9IGpRdWVyeS5leHRlbmQoIHt9LCB1ZGF0YU9sZCApO1xuXG5cdFx0ZGF0YVVzZXIuc2V0KCBkZXN0LCB1ZGF0YUN1ciApO1xuXHR9XG59XG5cbi8vIEZpeCBJRSBidWdzLCBzZWUgc3VwcG9ydCB0ZXN0c1xuZnVuY3Rpb24gZml4SW5wdXQoIHNyYywgZGVzdCApIHtcblx0dmFyIG5vZGVOYW1lID0gZGVzdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG5cdC8vIEZhaWxzIHRvIHBlcnNpc3QgdGhlIGNoZWNrZWQgc3RhdGUgb2YgYSBjbG9uZWQgY2hlY2tib3ggb3IgcmFkaW8gYnV0dG9uLlxuXHRpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgcmNoZWNrYWJsZVR5cGUudGVzdCggc3JjLnR5cGUgKSApIHtcblx0XHRkZXN0LmNoZWNrZWQgPSBzcmMuY2hlY2tlZDtcblxuXHQvLyBGYWlscyB0byByZXR1cm4gdGhlIHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZGVmYXVsdCBzZWxlY3RlZCBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0aW9uc1xuXHR9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5vZGVOYW1lID09PSBcInRleHRhcmVhXCIgKSB7XG5cdFx0ZGVzdC5kZWZhdWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGRvbU1hbmlwKCBjb2xsZWN0aW9uLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApIHtcblxuXHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdGFyZ3MgPSBmbGF0KCBhcmdzICk7XG5cblx0dmFyIGZyYWdtZW50LCBmaXJzdCwgc2NyaXB0cywgaGFzU2NyaXB0cywgbm9kZSwgZG9jLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBjb2xsZWN0aW9uLmxlbmd0aCxcblx0XHRpTm9DbG9uZSA9IGwgLSAxLFxuXHRcdHZhbHVlID0gYXJnc1sgMCBdLFxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0Ly8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNvbnRhaW4gY2hlY2tlZCwgaW4gV2ViS2l0XG5cdGlmICggdmFsdWVJc0Z1bmN0aW9uIHx8XG5cdFx0XHQoIGwgPiAxICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc3VwcG9ydC5jaGVja0Nsb25lICYmIHJjaGVja2VkLnRlc3QoIHZhbHVlICkgKSApIHtcblx0XHRyZXR1cm4gY29sbGVjdGlvbi5lYWNoKCBmdW5jdGlvbiggaW5kZXggKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGNvbGxlY3Rpb24uZXEoIGluZGV4ICk7XG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0YXJnc1sgMCBdID0gdmFsdWUuY2FsbCggdGhpcywgaW5kZXgsIHNlbGYuaHRtbCgpICk7XG5cdFx0XHR9XG5cdFx0XHRkb21NYW5pcCggc2VsZiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRpZiAoIGwgKSB7XG5cdFx0ZnJhZ21lbnQgPSBidWlsZEZyYWdtZW50KCBhcmdzLCBjb2xsZWN0aW9uWyAwIF0ub3duZXJEb2N1bWVudCwgZmFsc2UsIGNvbGxlY3Rpb24sIGlnbm9yZWQgKTtcblx0XHRmaXJzdCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cblx0XHRpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICkge1xuXHRcdFx0ZnJhZ21lbnQgPSBmaXJzdDtcblx0XHR9XG5cblx0XHQvLyBSZXF1aXJlIGVpdGhlciBuZXcgY29udGVudCBvciBhbiBpbnRlcmVzdCBpbiBpZ25vcmVkIGVsZW1lbnRzIHRvIGludm9rZSB0aGUgY2FsbGJhY2tcblx0XHRpZiAoIGZpcnN0IHx8IGlnbm9yZWQgKSB7XG5cdFx0XHRzY3JpcHRzID0galF1ZXJ5Lm1hcCggZ2V0QWxsKCBmcmFnbWVudCwgXCJzY3JpcHRcIiApLCBkaXNhYmxlU2NyaXB0ICk7XG5cdFx0XHRoYXNTY3JpcHRzID0gc2NyaXB0cy5sZW5ndGg7XG5cblx0XHRcdC8vIFVzZSB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgZm9yIHRoZSBsYXN0IGl0ZW1cblx0XHRcdC8vIGluc3RlYWQgb2YgdGhlIGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cFxuXHRcdFx0Ly8gYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKHRyYWMtODA3MCkuXG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdG5vZGUgPSBmcmFnbWVudDtcblxuXHRcdFx0XHRpZiAoIGkgIT09IGlOb0Nsb25lICkge1xuXHRcdFx0XHRcdG5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTtcblxuXHRcdFx0XHRcdC8vIEtlZXAgcmVmZXJlbmNlcyB0byBjbG9uZWQgc2NyaXB0cyBmb3IgbGF0ZXIgcmVzdG9yYXRpb25cblx0XHRcdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBzY3JpcHRzLCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwoIGNvbGxlY3Rpb25bIGkgXSwgbm9kZSwgaSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cdFx0XHRcdGRvYyA9IHNjcmlwdHNbIHNjcmlwdHMubGVuZ3RoIC0gMSBdLm93bmVyRG9jdW1lbnQ7XG5cblx0XHRcdFx0Ly8gUmUtZW5hYmxlIHNjcmlwdHNcblx0XHRcdFx0alF1ZXJ5Lm1hcCggc2NyaXB0cywgcmVzdG9yZVNjcmlwdCApO1xuXG5cdFx0XHRcdC8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb25cblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IHNjcmlwdHNbIGkgXTtcblx0XHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCBcIlwiICkgJiZcblx0XHRcdFx0XHRcdCFkYXRhUHJpdi5hY2Nlc3MoIG5vZGUsIFwiZ2xvYmFsRXZhbFwiICkgJiZcblx0XHRcdFx0XHRcdGpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7XG5cblx0XHRcdFx0XHRcdGlmICggbm9kZS5zcmMgJiYgKCBub2RlLnR5cGUgfHwgXCJcIiApLnRvTG93ZXJDYXNlKCkgICE9PSBcIm1vZHVsZVwiICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE9wdGlvbmFsIEFKQVggZGVwZW5kZW5jeSwgYnV0IHdvbid0IHJ1biBzY3JpcHRzIGlmIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5Ll9ldmFsVXJsICYmICFub2RlLm5vTW9kdWxlICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5fZXZhbFVybCggbm9kZS5zcmMsIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5vbmNlOiBub2RlLm5vbmNlIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCBcIm5vbmNlXCIgKVxuXHRcdFx0XHRcdFx0XHRcdH0sIGRvYyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFVud3JhcCBhIENEQVRBIHNlY3Rpb24gY29udGFpbmluZyBzY3JpcHQgY29udGVudHMuIFRoaXMgc2hvdWxkbid0IGJlXG5cdFx0XHRcdFx0XHRcdC8vIG5lZWRlZCBhcyBpbiBYTUwgZG9jdW1lbnRzIHRoZXkncmUgYWxyZWFkeSBub3QgdmlzaWJsZSB3aGVuXG5cdFx0XHRcdFx0XHRcdC8vIGluc3BlY3RpbmcgZWxlbWVudCBjb250ZW50cyBhbmQgaW4gSFRNTCBkb2N1bWVudHMgdGhleSBoYXZlIG5vXG5cdFx0XHRcdFx0XHRcdC8vIG1lYW5pbmcgYnV0IHdlJ3JlIHByZXNlcnZpbmcgdGhhdCBsb2dpYyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5cdFx0XHRcdFx0XHRcdC8vIFRoaXMgd2lsbCBiZSByZW1vdmVkIGNvbXBsZXRlbHkgaW4gNC4wLiBTZWUgZ2gtNDkwNC5cblx0XHRcdFx0XHRcdFx0RE9NRXZhbCggbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKCByY2xlYW5TY3JpcHQsIFwiXCIgKSwgbm9kZSwgZG9jICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNvbGxlY3Rpb247XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSggZWxlbSwgc2VsZWN0b3IsIGtlZXBEYXRhICkge1xuXHR2YXIgbm9kZSxcblx0XHRub2RlcyA9IHNlbGVjdG9yID8galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIGVsZW0gKSA6IGVsZW0sXG5cdFx0aSA9IDA7XG5cblx0Zm9yICggOyAoIG5vZGUgPSBub2Rlc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdGlmICggIWtlZXBEYXRhICYmIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIG5vZGUgKSApO1xuXHRcdH1cblxuXHRcdGlmICggbm9kZS5wYXJlbnROb2RlICkge1xuXHRcdFx0aWYgKCBrZWVwRGF0YSAmJiBpc0F0dGFjaGVkKCBub2RlICkgKSB7XG5cdFx0XHRcdHNldEdsb2JhbEV2YWwoIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XG5cdFx0XHR9XG5cdFx0XHRub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5vZGUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRodG1sUHJlZmlsdGVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRyZXR1cm4gaHRtbDtcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGVsZW0sIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdHZhciBpLCBsLCBzcmNFbGVtZW50cywgZGVzdEVsZW1lbnRzLFxuXHRcdFx0Y2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSApLFxuXHRcdFx0aW5QYWdlID0gaXNBdHRhY2hlZCggZWxlbSApO1xuXG5cdFx0Ly8gRml4IElFIGNsb25pbmcgaXNzdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCAmJiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMTEgKSAmJlxuXHRcdFx0XHQhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIFdlIGVzY2hldyBqUXVlcnkjZmluZCBoZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOlxuXHRcdFx0Ly8gaHR0cHM6Ly9qc3BlcmYuY29tL2dldGFsbC12cy1zaXp6bGUvMlxuXHRcdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApO1xuXHRcdFx0c3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTtcblxuXHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZpeElucHV0KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmVcblx0XHRpZiAoIGRhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0XHRzcmNFbGVtZW50cyA9IHNyY0VsZW1lbnRzIHx8IGdldEFsbCggZWxlbSApO1xuXHRcdFx0XHRkZXN0RWxlbWVudHMgPSBkZXN0RWxlbWVudHMgfHwgZ2V0QWxsKCBjbG9uZSApO1xuXG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGNsb25lQ29weUV2ZW50KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbG9uZUNvcHlFdmVudCggZWxlbSwgY2xvbmUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSwgXCJzY3JpcHRcIiApO1xuXHRcdGlmICggZGVzdEVsZW1lbnRzLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCBkZXN0RWxlbWVudHMsICFpblBhZ2UgJiYgZ2V0QWxsKCBlbGVtLCBcInNjcmlwdFwiICkgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXRcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH0sXG5cblx0Y2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cdFx0dmFyIGRhdGEsIGVsZW0sIHR5cGUsXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9PSB1bmRlZmluZWQ7IGkrKyApIHtcblx0XHRcdGlmICggYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0XHRpZiAoICggZGF0YSA9IGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSApICkge1xuXHRcdFx0XHRcdGlmICggZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZFxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkZXRhY2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yICk7XG5cdH0sXG5cblx0dGV4dDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnRleHQoIHRoaXMgKSA6XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0LmFwcGVuZENoaWxkKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHByZXBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoIGVsZW0sIHRhcmdldC5maXJzdENoaWxkICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGJlZm9yZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YWZ0ZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLm5leHRTaWJsaW5nICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSB0aGlzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gUHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXNcblx0XHRcdFx0ZWxlbS50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzO1xuXHRcdGRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50cztcblxuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApO1xuXHRcdH0gKTtcblx0fSxcblxuXHRodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF0gfHwge30sXG5cdFx0XHRcdGkgPSAwLFxuXHRcdFx0XHRsID0gdGhpcy5sZW5ndGg7XG5cblx0XHRcdGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5pbm5lckhUTUw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUxcblx0XHRcdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJlxuXHRcdFx0XHQhd3JhcE1hcFsgKCBydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpIF0gKSB7XG5cblx0XHRcdFx0dmFsdWUgPSBqUXVlcnkuaHRtbFByZWZpbHRlciggdmFsdWUgKTtcblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRcdGVsZW0gPSB0aGlzWyBpIF0gfHwge307XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblx0XHRcdFx0XHRcdFx0ZWxlbS5pbm5lckhUTUwgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtID0gMDtcblxuXHRcdFx0XHQvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2Rcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7XG5cdFx0XHR9XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRyZXBsYWNlV2l0aDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGlnbm9yZWQgPSBbXTtcblxuXHRcdC8vIE1ha2UgdGhlIGNoYW5nZXMsIHJlcGxhY2luZyBlYWNoIG5vbi1pZ25vcmVkIGNvbnRleHQgZWxlbWVudCB3aXRoIHRoZSBuZXcgY29udGVudFxuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG5cblx0XHRcdGlmICggalF1ZXJ5LmluQXJyYXkoIHRoaXMsIGlnbm9yZWQgKSA8IDAgKSB7XG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggdGhpcyApICk7XG5cdFx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRcdHBhcmVudC5yZXBsYWNlQ2hpbGQoIGVsZW0sIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gRm9yY2UgY2FsbGJhY2sgaW52b2NhdGlvblxuXHRcdH0sIGlnbm9yZWQgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCgge1xuXHRhcHBlbmRUbzogXCJhcHBlbmRcIixcblx0cHJlcGVuZFRvOiBcInByZXBlbmRcIixcblx0aW5zZXJ0QmVmb3JlOiBcImJlZm9yZVwiLFxuXHRpbnNlcnRBZnRlcjogXCJhZnRlclwiLFxuXHRyZXBsYWNlQWxsOiBcInJlcGxhY2VXaXRoXCJcbn0sIGZ1bmN0aW9uKCBuYW1lLCBvcmlnaW5hbCApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGVsZW1zLFxuXHRcdFx0cmV0ID0gW10sXG5cdFx0XHRpbnNlcnQgPSBqUXVlcnkoIHNlbGVjdG9yICksXG5cdFx0XHRsYXN0ID0gaW5zZXJ0Lmxlbmd0aCAtIDEsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgaSA8PSBsYXN0OyBpKysgKSB7XG5cdFx0XHRlbGVtcyA9IGkgPT09IGxhc3QgPyB0aGlzIDogdGhpcy5jbG9uZSggdHJ1ZSApO1xuXHRcdFx0alF1ZXJ5KCBpbnNlcnRbIGkgXSApWyBvcmlnaW5hbCBdKCBlbGVtcyApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdC8vIC5nZXQoKSBiZWNhdXNlIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdHB1c2guYXBwbHkoIHJldCwgZWxlbXMuZ2V0KCkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCApO1xuXHR9O1xufSApO1xudmFyIHJudW1ub25weCA9IG5ldyBSZWdFeHAoIFwiXihcIiArIHBudW0gKyBcIikoPyFweClbYS16JV0rJFwiLCBcImlcIiApO1xuXG52YXIgcmN1c3RvbVByb3AgPSAvXi0tLztcblxuXG52YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHksIEZpcmVmb3ggPD0zMCAodHJhYy0xNTA5OCwgdHJhYy0xNDE1MClcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcblx0XHQvLyBGRiBtZWFud2hpbGUgdGhyb3dzIG9uIGZyYW1lIGVsZW1lbnRzIHRocm91Z2ggXCJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlXCJcblx0XHR2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcblxuXHRcdGlmICggIXZpZXcgfHwgIXZpZXcub3BlbmVyICkge1xuXHRcdFx0dmlldyA9IHdpbmRvdztcblx0XHR9XG5cblx0XHRyZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7XG5cdH07XG5cbnZhciBzd2FwID0gZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrICkge1xuXHR2YXIgcmV0LCBuYW1lLFxuXHRcdG9sZCA9IHt9O1xuXG5cdC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0b2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdO1xuXHR9XG5cblx0cmV0ID0gY2FsbGJhY2suY2FsbCggZWxlbSApO1xuXG5cdC8vIFJldmVydCB0aGUgb2xkIHZhbHVlc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufTtcblxuXG52YXIgcmJveFN0eWxlID0gbmV3IFJlZ0V4cCggY3NzRXhwYW5kLmpvaW4oIFwifFwiICksIFwiaVwiICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXG5cdC8vIEV4ZWN1dGluZyBib3RoIHBpeGVsUG9zaXRpb24gJiBib3hTaXppbmdSZWxpYWJsZSB0ZXN0cyByZXF1aXJlIG9ubHkgb25lIGxheW91dFxuXHQvLyBzbyB0aGV5J3JlIGV4ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSB0aGUgc2Vjb25kIGNvbXB1dGF0aW9uLlxuXHRmdW5jdGlvbiBjb21wdXRlU3R5bGVUZXN0cygpIHtcblxuXHRcdC8vIFRoaXMgaXMgYSBzaW5nbGV0b24sIHdlIG5lZWQgdG8gZXhlY3V0ZSBpdCBvbmx5IG9uY2Vcblx0XHRpZiAoICFkaXYgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDtcIiArXG5cdFx0XHRcIm1hcmdpbi10b3A6MXB4O3BhZGRpbmc6MDtib3JkZXI6MFwiO1xuXHRcdGRpdi5zdHlsZS5jc3NUZXh0ID1cblx0XHRcdFwicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO1wiICtcblx0XHRcdFwibWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDtcIiArXG5cdFx0XHRcIndpZHRoOjYwJTt0b3A6MSVcIjtcblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApLmFwcGVuZENoaWxkKCBkaXYgKTtcblxuXHRcdHZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYgKTtcblx0XHRwaXhlbFBvc2l0aW9uVmFsID0gZGl2U3R5bGUudG9wICE9PSBcIjElXCI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBGaXJlZm94IDw9MyAtIDQ0XG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5tYXJnaW5MZWZ0ICkgPT09IDEyO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgU2FmYXJpIDw9OS4xIC0gMTAuMSwgaU9TIDw9Ny4wIC0gOS4zXG5cdFx0Ly8gU29tZSBzdHlsZXMgY29tZSBiYWNrIHdpdGggcGVyY2VudGFnZSB2YWx1ZXMsIGV2ZW4gdGhvdWdoIHRoZXkgc2hvdWxkbid0XG5cdFx0ZGl2LnN0eWxlLnJpZ2h0ID0gXCI2MCVcIjtcblx0XHRwaXhlbEJveFN0eWxlc1ZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUucmlnaHQgKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHRcdC8vIERldGVjdCBtaXNyZXBvcnRpbmcgb2YgY29udGVudCBkaW1lbnNpb25zIGZvciBib3gtc2l6aW5nOmJvcmRlci1ib3ggZWxlbWVudHNcblx0XHRib3hTaXppbmdSZWxpYWJsZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUud2lkdGggKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHQvLyBEZXRlY3Qgb3ZlcmZsb3c6c2Nyb2xsIHNjcmV3aW5lc3MgKGdoLTM2OTkpXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NjRcblx0XHQvLyBEb24ndCBnZXQgdHJpY2tlZCB3aGVuIHpvb20gYWZmZWN0cyBvZmZzZXRXaWR0aCAoZ2gtNDAyOSlcblx0XHRkaXYuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdFx0c2Nyb2xsYm94U2l6ZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2Lm9mZnNldFdpZHRoIC8gMyApID09PSAxMjtcblxuXHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7XG5cblx0XHQvLyBOdWxsaWZ5IHRoZSBkaXYgc28gaXQgd291bGRuJ3QgYmUgc3RvcmVkIGluIHRoZSBtZW1vcnkgYW5kXG5cdFx0Ly8gaXQgd2lsbCBhbHNvIGJlIGEgc2lnbiB0aGF0IGNoZWNrcyBhbHJlYWR5IHBlcmZvcm1lZFxuXHRcdGRpdiA9IG51bGw7XG5cdH1cblxuXHRmdW5jdGlvbiByb3VuZFBpeGVsTWVhc3VyZXMoIG1lYXN1cmUgKSB7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQoIHBhcnNlRmxvYXQoIG1lYXN1cmUgKSApO1xuXHR9XG5cblx0dmFyIHBpeGVsUG9zaXRpb25WYWwsIGJveFNpemluZ1JlbGlhYmxlVmFsLCBzY3JvbGxib3hTaXplVmFsLCBwaXhlbEJveFN0eWxlc1ZhbCxcblx0XHRyZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCwgcmVsaWFibGVNYXJnaW5MZWZ0VmFsLFxuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSxcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0Ly8gRmluaXNoIGVhcmx5IGluIGxpbWl0ZWQgKG5vbi1icm93c2VyKSBlbnZpcm9ubWVudHNcblx0aWYgKCAhZGl2LnN0eWxlICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0Ly8gU3R5bGUgb2YgY2xvbmVkIGVsZW1lbnQgYWZmZWN0cyBzb3VyY2UgZWxlbWVudCBjbG9uZWQgKHRyYWMtODkwOClcblx0ZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJjb250ZW50LWJveFwiO1xuXHRkaXYuY2xvbmVOb2RlKCB0cnVlICkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcIlwiO1xuXHRzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gXCJjb250ZW50LWJveFwiO1xuXG5cdGpRdWVyeS5leHRlbmQoIHN1cHBvcnQsIHtcblx0XHRib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIGJveFNpemluZ1JlbGlhYmxlVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxCb3hTdHlsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbEJveFN0eWxlc1ZhbDtcblx0XHR9LFxuXHRcdHBpeGVsUG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbFBvc2l0aW9uVmFsO1xuXHRcdH0sXG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0OiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVNYXJnaW5MZWZ0VmFsO1xuXHRcdH0sXG5cdFx0c2Nyb2xsYm94U2l6ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHNjcm9sbGJveFNpemVWYWw7XG5cdFx0fSxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTUgLSAxOCtcblx0XHQvLyBJRS9FZGdlIG1pc3JlcG9ydCBgZ2V0Q29tcHV0ZWRTdHlsZWAgb2YgdGFibGUgcm93cyB3aXRoIHdpZHRoL2hlaWdodFxuXHRcdC8vIHNldCBpbiBDU1Mgd2hpbGUgYG9mZnNldCpgIHByb3BlcnRpZXMgcmVwb3J0IGNvcnJlY3QgdmFsdWVzLlxuXHRcdC8vIEJlaGF2aW9yIGluIElFIDkgaXMgbW9yZSBzdWJ0bGUgdGhhbiBpbiBuZXdlciB2ZXJzaW9ucyAmIGl0IHBhc3Nlc1xuXHRcdC8vIHNvbWUgdmVyc2lvbnMgb2YgdGhpcyB0ZXN0OyBtYWtlIHN1cmUgbm90IHRvIG1ha2UgaXQgcGFzcyB0aGVyZSFcblx0XHQvL1xuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNzArXG5cdFx0Ly8gT25seSBGaXJlZm94IGluY2x1ZGVzIGJvcmRlciB3aWR0aHNcblx0XHQvLyBpbiBjb21wdXRlZCBkaW1lbnNpb25zLiAoZ2gtNDUyOSlcblx0XHRyZWxpYWJsZVRyRGltZW5zaW9uczogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdGFibGUsIHRyLCB0ckNoaWxkLCB0clN0eWxlO1xuXHRcdFx0aWYgKCByZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwidGFibGVcIiApO1xuXHRcdFx0XHR0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwidHJcIiApO1xuXHRcdFx0XHR0ckNoaWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuXG5cdFx0XHRcdHRhYmxlLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlXCI7XG5cdFx0XHRcdHRyLnN0eWxlLmNzc1RleHQgPSBcImJveC1zaXppbmc6Y29udGVudC1ib3g7Ym9yZGVyOjFweCBzb2xpZFwiO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA4Nitcblx0XHRcdFx0Ly8gSGVpZ2h0IHNldCB0aHJvdWdoIGNzc1RleHQgZG9lcyBub3QgZ2V0IGFwcGxpZWQuXG5cdFx0XHRcdC8vIENvbXB1dGVkIGhlaWdodCB0aGVuIGNvbWVzIGJhY2sgYXMgMC5cblx0XHRcdFx0dHIuc3R5bGUuaGVpZ2h0ID0gXCIxcHhcIjtcblx0XHRcdFx0dHJDaGlsZC5zdHlsZS5oZWlnaHQgPSBcIjlweFwiO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgOCBDaHJvbWUgODYrXG5cdFx0XHRcdC8vIEluIG91ciBib2R5QmFja2dyb3VuZC5odG1sIGlmcmFtZSxcblx0XHRcdFx0Ly8gZGlzcGxheSBmb3IgYWxsIGRpdiBlbGVtZW50cyBpcyBzZXQgdG8gXCJpbmxpbmVcIixcblx0XHRcdFx0Ly8gd2hpY2ggY2F1c2VzIGEgcHJvYmxlbSBvbmx5IGluIEFuZHJvaWQgOCBDaHJvbWUgODYuXG5cdFx0XHRcdC8vIEVuc3VyaW5nIHRoZSBkaXYgaXMgYGRpc3BsYXk6IGJsb2NrYFxuXHRcdFx0XHQvLyBnZXRzIGFyb3VuZCB0aGlzIGlzc3VlLlxuXHRcdFx0XHR0ckNoaWxkLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cblx0XHRcdFx0ZG9jdW1lbnRFbGVtZW50XG5cdFx0XHRcdFx0LmFwcGVuZENoaWxkKCB0YWJsZSApXG5cdFx0XHRcdFx0LmFwcGVuZENoaWxkKCB0ciApXG5cdFx0XHRcdFx0LmFwcGVuZENoaWxkKCB0ckNoaWxkICk7XG5cblx0XHRcdFx0dHJTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCB0ciApO1xuXHRcdFx0XHRyZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCA9ICggcGFyc2VJbnQoIHRyU3R5bGUuaGVpZ2h0LCAxMCApICtcblx0XHRcdFx0XHRwYXJzZUludCggdHJTdHlsZS5ib3JkZXJUb3BXaWR0aCwgMTAgKSArXG5cdFx0XHRcdFx0cGFyc2VJbnQoIHRyU3R5bGUuYm9yZGVyQm90dG9tV2lkdGgsIDEwICkgKSA9PT0gdHIub2Zmc2V0SGVpZ2h0O1xuXG5cdFx0XHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggdGFibGUgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZWxpYWJsZVRyRGltZW5zaW9uc1ZhbDtcblx0XHR9XG5cdH0gKTtcbn0gKSgpO1xuXG5cbmZ1bmN0aW9uIGN1ckNTUyggZWxlbSwgbmFtZSwgY29tcHV0ZWQgKSB7XG5cdHZhciB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLCByZXQsXG5cdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApLFxuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA1MStcblx0XHQvLyBSZXRyaWV2aW5nIHN0eWxlIGJlZm9yZSBjb21wdXRlZCBzb21laG93XG5cdFx0Ly8gZml4ZXMgYW4gaXNzdWUgd2l0aCBnZXR0aW5nIHdyb25nIHZhbHVlc1xuXHRcdC8vIG9uIGRldGFjaGVkIGVsZW1lbnRzXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7XG5cblx0Ly8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBuZWVkZWQgZm9yOlxuXHQvLyAgIC5jc3MoJ2ZpbHRlcicpIChJRSA5IG9ubHksIHRyYWMtMTI1MzcpXG5cdC8vICAgLmNzcygnLS1jdXN0b21Qcm9wZXJ0eSkgKGdoLTMxNDQpXG5cdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHQvLyBJRSBvbmx5IHN1cHBvcnRzIGBcImZsb2F0XCJgIGluIGBnZXRQcm9wZXJ0eVZhbHVlYDsgaW4gY29tcHV0ZWQgc3R5bGVzXG5cdFx0Ly8gaXQncyBvbmx5IGF2YWlsYWJsZSBhcyBgXCJjc3NGbG9hdFwiYC4gV2Ugbm8gbG9uZ2VyIG1vZGlmeSBwcm9wZXJ0aWVzXG5cdFx0Ly8gc2VudCB0byBgLmNzcygpYCBhcGFydCBmcm9tIGNhbWVsQ2FzaW5nLCBzbyB3ZSBuZWVkIHRvIGNoZWNrIGJvdGguXG5cdFx0Ly8gTm9ybWFsbHksIHRoaXMgd291bGQgY3JlYXRlIGRpZmZlcmVuY2UgaW4gYmVoYXZpb3I6IGlmXG5cdFx0Ly8gYGdldFByb3BlcnR5VmFsdWVgIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLCB0aGUgdmFsdWUgcmV0dXJuZWRcblx0XHQvLyBieSBgLmNzcygpYCB3b3VsZCBiZSBgdW5kZWZpbmVkYC4gVGhpcyBpcyB1c3VhbGx5IHRoZSBjYXNlIGZvclxuXHRcdC8vIGRpc2Nvbm5lY3RlZCBlbGVtZW50cy4gSG93ZXZlciwgaW4gSUUgZXZlbiBkaXNjb25uZWN0ZWQgZWxlbWVudHNcblx0XHQvLyB3aXRoIG5vIHN0eWxlcyByZXR1cm4gYFwibm9uZVwiYCBmb3IgYGdldFByb3BlcnR5VmFsdWUoIFwiZmxvYXRcIiApYFxuXHRcdHJldCA9IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKSB8fCBjb21wdXRlZFsgbmFtZSBdO1xuXG5cdFx0aWYgKCBpc0N1c3RvbVByb3AgJiYgcmV0ICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDEwNSssIENocm9tZSA8PTEwNStcblx0XHRcdC8vIFNwZWMgcmVxdWlyZXMgdHJpbW1pbmcgd2hpdGVzcGFjZSBmb3IgY3VzdG9tIHByb3BlcnRpZXMgKGdoLTQ5MjYpLlxuXHRcdFx0Ly8gRmlyZWZveCBvbmx5IHRyaW1zIGxlYWRpbmcgd2hpdGVzcGFjZS4gQ2hyb21lIGp1c3QgY29sbGFwc2VzXG5cdFx0XHQvLyBib3RoIGxlYWRpbmcgJiB0cmFpbGluZyB3aGl0ZXNwYWNlIHRvIGEgc2luZ2xlIHNwYWNlLlxuXHRcdFx0Ly9cblx0XHRcdC8vIEZhbGwgYmFjayB0byBgdW5kZWZpbmVkYCBpZiBlbXB0eSBzdHJpbmcgcmV0dXJuZWQuXG5cdFx0XHQvLyBUaGlzIGNvbGxhcHNlcyBhIG1pc3NpbmcgZGVmaW5pdGlvbiB3aXRoIHByb3BlcnR5IGRlZmluZWRcblx0XHRcdC8vIGFuZCBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIGJ1dCB0aGVyZSdzIG5vIHN0YW5kYXJkIEFQSVxuXHRcdFx0Ly8gYWxsb3dpbmcgdXMgdG8gZGlmZmVyZW50aWF0ZSB0aGVtIHdpdGhvdXQgYSBwZXJmb3JtYW5jZSBwZW5hbHR5XG5cdFx0XHQvLyBhbmQgcmV0dXJuaW5nIGB1bmRlZmluZWRgIGFsaWducyB3aXRoIG9sZGVyIGpRdWVyeS5cblx0XHRcdC8vXG5cdFx0XHQvLyBydHJpbUNTUyB0cmVhdHMgVSswMDBEIENBUlJJQUdFIFJFVFVSTiBhbmQgVSswMDBDIEZPUk0gRkVFRFxuXHRcdFx0Ly8gYXMgd2hpdGVzcGFjZSB3aGlsZSBDU1MgZG9lcyBub3QsIGJ1dCB0aGlzIGlzIG5vdCBhIHByb2JsZW1cblx0XHRcdC8vIGJlY2F1c2UgQ1NTIHByZXByb2Nlc3NpbmcgcmVwbGFjZXMgdGhlbSB3aXRoIFUrMDAwQSBMSU5FIEZFRURcblx0XHRcdC8vICh3aGljaCAqaXMqIENTUyB3aGl0ZXNwYWNlKVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1zeW50YXgtMy8jaW5wdXQtcHJlcHJvY2Vzc2luZ1xuXHRcdFx0cmV0ID0gcmV0LnJlcGxhY2UoIHJ0cmltQ1NTLCBcIiQxXCIgKSB8fCB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKCByZXQgPT09IFwiXCIgJiYgIWlzQXR0YWNoZWQoIGVsZW0gKSApIHtcblx0XHRcdHJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEEgdHJpYnV0ZSB0byB0aGUgXCJhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzXCJcblx0XHQvLyBBbmRyb2lkIEJyb3dzZXIgcmV0dXJucyBwZXJjZW50YWdlIGZvciBzb21lIHZhbHVlcyxcblx0XHQvLyBidXQgd2lkdGggc2VlbXMgdG8gYmUgcmVsaWFibHkgcGl4ZWxzLlxuXHRcdC8vIFRoaXMgaXMgYWdhaW5zdCB0aGUgQ1NTT00gZHJhZnQgc3BlYzpcblx0XHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI3Jlc29sdmVkLXZhbHVlc1xuXHRcdGlmICggIXN1cHBvcnQucGl4ZWxCb3hTdHlsZXMoKSAmJiBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYgcmJveFN0eWxlLnRlc3QoIG5hbWUgKSApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlc1xuXHRcdFx0d2lkdGggPSBzdHlsZS53aWR0aDtcblx0XHRcdG1pbldpZHRoID0gc3R5bGUubWluV2lkdGg7XG5cdFx0XHRtYXhXaWR0aCA9IHN0eWxlLm1heFdpZHRoO1xuXG5cdFx0XHQvLyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGggPSByZXQ7XG5cdFx0XHRyZXQgPSBjb21wdXRlZC53aWR0aDtcblxuXHRcdFx0Ly8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlc1xuXHRcdFx0c3R5bGUud2lkdGggPSB3aWR0aDtcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gbWluV2lkdGg7XG5cdFx0XHRzdHlsZS5tYXhXaWR0aCA9IG1heFdpZHRoO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXQgIT09IHVuZGVmaW5lZCA/XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0Ly8gSUUgcmV0dXJucyB6SW5kZXggdmFsdWUgYXMgYW4gaW50ZWdlci5cblx0XHRyZXQgKyBcIlwiIDpcblx0XHRyZXQ7XG59XG5cblxuZnVuY3Rpb24gYWRkR2V0SG9va0lmKCBjb25kaXRpb25GbiwgaG9va0ZuICkge1xuXG5cdC8vIERlZmluZSB0aGUgaG9vaywgd2UnbGwgY2hlY2sgb24gdGhlIGZpcnN0IHJ1biBpZiBpdCdzIHJlYWxseSBuZWVkZWQuXG5cdHJldHVybiB7XG5cdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggY29uZGl0aW9uRm4oKSApIHtcblxuXHRcdFx0XHQvLyBIb29rIG5vdCBuZWVkZWQgKG9yIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBpdCBkdWVcblx0XHRcdFx0Ly8gdG8gbWlzc2luZyBkZXBlbmRlbmN5KSwgcmVtb3ZlIGl0LlxuXHRcdFx0XHRkZWxldGUgdGhpcy5nZXQ7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSG9vayBuZWVkZWQ7IHJlZGVmaW5lIGl0IHNvIHRoYXQgdGhlIHN1cHBvcnQgdGVzdCBpcyBub3QgZXhlY3V0ZWQgYWdhaW4uXG5cdFx0XHRyZXR1cm4gKCB0aGlzLmdldCA9IGhvb2tGbiApLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9XG5cdH07XG59XG5cblxudmFyIGNzc1ByZWZpeGVzID0gWyBcIldlYmtpdFwiLCBcIk1velwiLCBcIm1zXCIgXSxcblx0ZW1wdHlTdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKS5zdHlsZSxcblx0dmVuZG9yUHJvcHMgPSB7fTtcblxuLy8gUmV0dXJuIGEgdmVuZG9yLXByZWZpeGVkIHByb3BlcnR5IG9yIHVuZGVmaW5lZFxuZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB7XG5cblx0Ly8gQ2hlY2sgZm9yIHZlbmRvciBwcmVmaXhlZCBuYW1lc1xuXHR2YXIgY2FwTmFtZSA9IG5hbWVbIDAgXS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSggMSApLFxuXHRcdGkgPSBjc3NQcmVmaXhlcy5sZW5ndGg7XG5cblx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0bmFtZSA9IGNzc1ByZWZpeGVzWyBpIF0gKyBjYXBOYW1lO1xuXHRcdGlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkge1xuXHRcdFx0cmV0dXJuIG5hbWU7XG5cdFx0fVxuXHR9XG59XG5cbi8vIFJldHVybiBhIHBvdGVudGlhbGx5LW1hcHBlZCBqUXVlcnkuY3NzUHJvcHMgb3IgdmVuZG9yIHByZWZpeGVkIHByb3BlcnR5XG5mdW5jdGlvbiBmaW5hbFByb3BOYW1lKCBuYW1lICkge1xuXHR2YXIgZmluYWwgPSBqUXVlcnkuY3NzUHJvcHNbIG5hbWUgXSB8fCB2ZW5kb3JQcm9wc1sgbmFtZSBdO1xuXG5cdGlmICggZmluYWwgKSB7XG5cdFx0cmV0dXJuIGZpbmFsO1xuXHR9XG5cdGlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkge1xuXHRcdHJldHVybiBuYW1lO1xuXHR9XG5cdHJldHVybiB2ZW5kb3JQcm9wc1sgbmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB8fCBuYW1lO1xufVxuXG5cbnZhclxuXG5cdC8vIFN3YXBwYWJsZSBpZiBkaXNwbGF5IGlzIG5vbmUgb3Igc3RhcnRzIHdpdGggdGFibGVcblx0Ly8gZXhjZXB0IFwidGFibGVcIiwgXCJ0YWJsZS1jZWxsXCIsIG9yIFwidGFibGUtY2FwdGlvblwiXG5cdC8vIFNlZSBoZXJlIGZvciBkaXNwbGF5IHZhbHVlczogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MvZGlzcGxheVxuXHRyZGlzcGxheXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sXG5cdGNzc1Nob3cgPSB7IHBvc2l0aW9uOiBcImFic29sdXRlXCIsIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsIGRpc3BsYXk6IFwiYmxvY2tcIiB9LFxuXHRjc3NOb3JtYWxUcmFuc2Zvcm0gPSB7XG5cdFx0bGV0dGVyU3BhY2luZzogXCIwXCIsXG5cdFx0Zm9udFdlaWdodDogXCI0MDBcIlxuXHR9O1xuXG5mdW5jdGlvbiBzZXRQb3NpdGl2ZU51bWJlciggX2VsZW0sIHZhbHVlLCBzdWJ0cmFjdCApIHtcblxuXHQvLyBBbnkgcmVsYXRpdmUgKCsvLSkgdmFsdWVzIGhhdmUgYWxyZWFkeSBiZWVuXG5cdC8vIG5vcm1hbGl6ZWQgYXQgdGhpcyBwb2ludFxuXHR2YXIgbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKTtcblx0cmV0dXJuIG1hdGNoZXMgP1xuXG5cdFx0Ly8gR3VhcmQgYWdhaW5zdCB1bmRlZmluZWQgXCJzdWJ0cmFjdFwiLCBlLmcuLCB3aGVuIHVzZWQgYXMgaW4gY3NzSG9va3Ncblx0XHRNYXRoLm1heCggMCwgbWF0Y2hlc1sgMiBdIC0gKCBzdWJ0cmFjdCB8fCAwICkgKSArICggbWF0Y2hlc1sgMyBdIHx8IFwicHhcIiApIDpcblx0XHR2YWx1ZTtcbn1cblxuZnVuY3Rpb24gYm94TW9kZWxBZGp1c3RtZW50KCBlbGVtLCBkaW1lbnNpb24sIGJveCwgaXNCb3JkZXJCb3gsIHN0eWxlcywgY29tcHV0ZWRWYWwgKSB7XG5cdHZhciBpID0gZGltZW5zaW9uID09PSBcIndpZHRoXCIgPyAxIDogMCxcblx0XHRleHRyYSA9IDAsXG5cdFx0ZGVsdGEgPSAwLFxuXHRcdG1hcmdpbkRlbHRhID0gMDtcblxuXHQvLyBBZGp1c3RtZW50IG1heSBub3QgYmUgbmVjZXNzYXJ5XG5cdGlmICggYm94ID09PSAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICkgKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7XG5cblx0XHQvLyBCb3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW5cblx0XHQvLyBDb3VudCBtYXJnaW4gZGVsdGEgc2VwYXJhdGVseSB0byBvbmx5IGFkZCBpdCBhZnRlciBzY3JvbGwgZ3V0dGVyIGFkanVzdG1lbnQuXG5cdFx0Ly8gVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBuZWdhdGl2ZSBtYXJnaW5zIHdvcmsgd2l0aCBgb3V0ZXJIZWlnaHQoIHRydWUgKWAgKGdoLTM5ODIpLlxuXHRcdGlmICggYm94ID09PSBcIm1hcmdpblwiICkge1xuXHRcdFx0bWFyZ2luRGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgYm94ICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIElmIHdlIGdldCBoZXJlIHdpdGggYSBjb250ZW50LWJveCwgd2UncmUgc2Vla2luZyBcInBhZGRpbmdcIiBvciBcImJvcmRlclwiIG9yIFwibWFyZ2luXCJcblx0XHRpZiAoICFpc0JvcmRlckJveCApIHtcblxuXHRcdFx0Ly8gQWRkIHBhZGRpbmdcblx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBGb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiLCBhZGQgYm9yZGVyXG5cdFx0XHRpZiAoIGJveCAhPT0gXCJwYWRkaW5nXCIgKSB7XG5cdFx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEJ1dCBzdGlsbCBrZWVwIHRyYWNrIG9mIGl0IG90aGVyd2lzZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZXh0cmEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdC8vIElmIHdlIGdldCBoZXJlIHdpdGggYSBib3JkZXItYm94IChjb250ZW50ICsgcGFkZGluZyArIGJvcmRlciksIHdlJ3JlIHNlZWtpbmcgXCJjb250ZW50XCIgb3Jcblx0XHQvLyBcInBhZGRpbmdcIiBvciBcIm1hcmdpblwiXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiLCBzdWJ0cmFjdCBwYWRkaW5nXG5cdFx0XHRpZiAoIGJveCA9PT0gXCJjb250ZW50XCIgKSB7XG5cdFx0XHRcdGRlbHRhIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3IgXCJjb250ZW50XCIgb3IgXCJwYWRkaW5nXCIsIHN1YnRyYWN0IGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRcdGRlbHRhIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWNjb3VudCBmb3IgcG9zaXRpdmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlciB3aGVuIHJlcXVlc3RlZCBieSBwcm92aWRpbmcgY29tcHV0ZWRWYWxcblx0aWYgKCAhaXNCb3JkZXJCb3ggJiYgY29tcHV0ZWRWYWwgPj0gMCApIHtcblxuXHRcdC8vIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBpcyBhIHJvdW5kZWQgc3VtIG9mIGNvbnRlbnQsIHBhZGRpbmcsIHNjcm9sbCBndXR0ZXIsIGFuZCBib3JkZXJcblx0XHQvLyBBc3N1bWluZyBpbnRlZ2VyIHNjcm9sbCBndXR0ZXIsIHN1YnRyYWN0IHRoZSByZXN0IGFuZCByb3VuZCBkb3duXG5cdFx0ZGVsdGEgKz0gTWF0aC5tYXgoIDAsIE1hdGguY2VpbChcblx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRjb21wdXRlZFZhbCAtXG5cdFx0XHRkZWx0YSAtXG5cdFx0XHRleHRyYSAtXG5cdFx0XHQwLjVcblxuXHRcdC8vIElmIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBpcyB1bmtub3duLCB0aGVuIHdlIGNhbid0IGRldGVybWluZSBjb250ZW50LWJveCBzY3JvbGwgZ3V0dGVyXG5cdFx0Ly8gVXNlIGFuIGV4cGxpY2l0IHplcm8gdG8gYXZvaWQgTmFOIChnaC0zOTY0KVxuXHRcdCkgKSB8fCAwO1xuXHR9XG5cblx0cmV0dXJuIGRlbHRhICsgbWFyZ2luRGVsdGE7XG59XG5cbmZ1bmN0aW9uIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKSB7XG5cblx0Ly8gU3RhcnQgd2l0aCBjb21wdXRlZCBzdHlsZVxuXHR2YXIgc3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC00MzIyKS5cblx0XHQvLyBGYWtlIGNvbnRlbnQtYm94IHVudGlsIHdlIGtub3cgaXQncyBuZWVkZWQgdG8ga25vdyB0aGUgdHJ1ZSB2YWx1ZS5cblx0XHRib3hTaXppbmdOZWVkZWQgPSAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpIHx8IGV4dHJhLFxuXHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCxcblxuXHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgZGltZW5zaW9uLCBzdHlsZXMgKSxcblx0XHRvZmZzZXRQcm9wID0gXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKTtcblxuXHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NTRcblx0Ly8gUmV0dXJuIGEgY29uZm91bmRpbmcgbm9uLXBpeGVsIHZhbHVlIG9yIGZlaWduIGlnbm9yYW5jZSwgYXMgYXBwcm9wcmlhdGUuXG5cdGlmICggcm51bW5vbnB4LnRlc3QoIHZhbCApICkge1xuXHRcdGlmICggIWV4dHJhICkge1xuXHRcdFx0cmV0dXJuIHZhbDtcblx0XHR9XG5cdFx0dmFsID0gXCJhdXRvXCI7XG5cdH1cblxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIFVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIHdoZW4gYm94IHNpemluZyBpcyB1bnJlbGlhYmxlLlxuXHQvLyBJbiB0aG9zZSBjYXNlcywgdGhlIGNvbXB1dGVkIHZhbHVlIGNhbiBiZSB0cnVzdGVkIHRvIGJlIGJvcmRlci1ib3guXG5cdGlmICggKCAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpICYmIGlzQm9yZGVyQm94IHx8XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMCAtIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdC8vIElFL0VkZ2UgbWlzcmVwb3J0IGBnZXRDb21wdXRlZFN0eWxlYCBvZiB0YWJsZSByb3dzIHdpdGggd2lkdGgvaGVpZ2h0XG5cdFx0Ly8gc2V0IGluIENTUyB3aGlsZSBgb2Zmc2V0KmAgcHJvcGVydGllcyByZXBvcnQgY29ycmVjdCB2YWx1ZXMuXG5cdFx0Ly8gSW50ZXJlc3RpbmdseSwgaW4gc29tZSBjYXNlcyBJRSA5IGRvZXNuJ3Qgc3VmZmVyIGZyb20gdGhpcyBpc3N1ZS5cblx0XHQhc3VwcG9ydC5yZWxpYWJsZVRyRGltZW5zaW9ucygpICYmIG5vZGVOYW1lKCBlbGVtLCBcInRyXCIgKSB8fFxuXG5cdFx0Ly8gRmFsbCBiYWNrIHRvIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCB3aGVuIHZhbHVlIGlzIFwiYXV0b1wiXG5cdFx0Ly8gVGhpcyBoYXBwZW5zIGZvciBpbmxpbmUgZWxlbWVudHMgd2l0aCBubyBleHBsaWNpdCBzZXR0aW5nIChnaC0zNTcxKVxuXHRcdHZhbCA9PT0gXCJhdXRvXCIgfHxcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgLSA0LjMgb25seVxuXHRcdC8vIEFsc28gdXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3IgbWlzcmVwb3J0ZWQgaW5saW5lIGRpbWVuc2lvbnMgKGdoLTM2MDIpXG5cdFx0IXBhcnNlRmxvYXQoIHZhbCApICYmIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiaW5saW5lXCIgKSAmJlxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIHZpc2libGUgJiBjb25uZWN0ZWRcblx0XHRlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkge1xuXG5cdFx0aXNCb3JkZXJCb3ggPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiO1xuXG5cdFx0Ly8gV2hlcmUgYXZhaWxhYmxlLCBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgYXBwcm94aW1hdGUgYm9yZGVyIGJveCBkaW1lbnNpb25zLlxuXHRcdC8vIFdoZXJlIG5vdCBhdmFpbGFibGUgKGUuZy4sIFNWRyksIGFzc3VtZSB1bnJlbGlhYmxlIGJveC1zaXppbmcgYW5kIGludGVycHJldCB0aGVcblx0XHQvLyByZXRyaWV2ZWQgdmFsdWUgYXMgYSBjb250ZW50IGJveCBkaW1lbnNpb24uXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IG9mZnNldFByb3AgaW4gZWxlbTtcblx0XHRpZiAoIHZhbHVlSXNCb3JkZXJCb3ggKSB7XG5cdFx0XHR2YWwgPSBlbGVtWyBvZmZzZXRQcm9wIF07XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIFwiXCIgYW5kIGF1dG9cblx0dmFsID0gcGFyc2VGbG9hdCggdmFsICkgfHwgMDtcblxuXHQvLyBBZGp1c3QgZm9yIHRoZSBlbGVtZW50J3MgYm94IG1vZGVsXG5cdHJldHVybiAoIHZhbCArXG5cdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0ZWxlbSxcblx0XHRcdGRpbWVuc2lvbixcblx0XHRcdGV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSxcblx0XHRcdHZhbHVlSXNCb3JkZXJCb3gsXG5cdFx0XHRzdHlsZXMsXG5cblx0XHRcdC8vIFByb3ZpZGUgdGhlIGN1cnJlbnQgY29tcHV0ZWQgc2l6ZSB0byByZXF1ZXN0IHNjcm9sbCBndXR0ZXIgY2FsY3VsYXRpb24gKGdoLTM1ODkpXG5cdFx0XHR2YWxcblx0XHQpXG5cdCkgKyBcInB4XCI7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHRcblx0Ly8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5XG5cdGNzc0hvb2tzOiB7XG5cdFx0b3BhY2l0eToge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eVxuXHRcdFx0XHRcdHZhciByZXQgPSBjdXJDU1MoIGVsZW0sIFwib3BhY2l0eVwiICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJldCA9PT0gXCJcIiA/IFwiMVwiIDogcmV0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8vIERvbid0IGF1dG9tYXRpY2FsbHkgYWRkIFwicHhcIiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVzcyBwcm9wZXJ0aWVzXG5cdGNzc051bWJlcjoge1xuXHRcdGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiB0cnVlLFxuXHRcdGFzcGVjdFJhdGlvOiB0cnVlLFxuXHRcdGJvcmRlckltYWdlU2xpY2U6IHRydWUsXG5cdFx0Y29sdW1uQ291bnQ6IHRydWUsXG5cdFx0ZmxleEdyb3c6IHRydWUsXG5cdFx0ZmxleFNocmluazogdHJ1ZSxcblx0XHRmb250V2VpZ2h0OiB0cnVlLFxuXHRcdGdyaWRBcmVhOiB0cnVlLFxuXHRcdGdyaWRDb2x1bW46IHRydWUsXG5cdFx0Z3JpZENvbHVtbkVuZDogdHJ1ZSxcblx0XHRncmlkQ29sdW1uU3RhcnQ6IHRydWUsXG5cdFx0Z3JpZFJvdzogdHJ1ZSxcblx0XHRncmlkUm93RW5kOiB0cnVlLFxuXHRcdGdyaWRSb3dTdGFydDogdHJ1ZSxcblx0XHRsaW5lSGVpZ2h0OiB0cnVlLFxuXHRcdG9wYWNpdHk6IHRydWUsXG5cdFx0b3JkZXI6IHRydWUsXG5cdFx0b3JwaGFuczogdHJ1ZSxcblx0XHRzY2FsZTogdHJ1ZSxcblx0XHR3aWRvd3M6IHRydWUsXG5cdFx0ekluZGV4OiB0cnVlLFxuXHRcdHpvb206IHRydWUsXG5cblx0XHQvLyBTVkctcmVsYXRlZFxuXHRcdGZpbGxPcGFjaXR5OiB0cnVlLFxuXHRcdGZsb29kT3BhY2l0eTogdHJ1ZSxcblx0XHRzdG9wT3BhY2l0eTogdHJ1ZSxcblx0XHRzdHJva2VNaXRlcmxpbWl0OiB0cnVlLFxuXHRcdHN0cm9rZU9wYWNpdHk6IHRydWVcblx0fSxcblxuXHQvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlXG5cdC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWVcblx0Y3NzUHJvcHM6IHt9LFxuXG5cdC8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlXG5cdHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkge1xuXG5cdFx0Ly8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lXG5cdFx0dmFyIHJldCwgdHlwZSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApLFxuXHRcdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gcXVlcnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBHZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uLCB0aGVuIHVucHJlZml4ZWQgdmVyc2lvblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRcdFx0Ly8gQ29udmVydCBcIis9XCIgb3IgXCItPVwiIHRvIHJlbGF0aXZlIG51bWJlcnMgKHRyYWMtNzM0NSlcblx0XHRcdGlmICggdHlwZSA9PT0gXCJzdHJpbmdcIiAmJiAoIHJldCA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmIHJldFsgMSBdICkge1xuXHRcdFx0XHR2YWx1ZSA9IGFkanVzdENTUyggZWxlbSwgbmFtZSwgcmV0ICk7XG5cblx0XHRcdFx0Ly8gRml4ZXMgYnVnIHRyYWMtOTIzN1xuXHRcdFx0XHR0eXBlID0gXCJudW1iZXJcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICh0cmFjLTcxMTYpXG5cdFx0XHRpZiAoIHZhbHVlID09IG51bGwgfHwgdmFsdWUgIT09IHZhbHVlICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCB0aGUgdW5pdCAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKVxuXHRcdFx0Ly8gVGhlIGlzQ3VzdG9tUHJvcCBjaGVjayBjYW4gYmUgcmVtb3ZlZCBpbiBqUXVlcnkgNC4wIHdoZW4gd2Ugb25seSBhdXRvLWFwcGVuZFxuXHRcdFx0Ly8gXCJweFwiIHRvIGEgZmV3IGhhcmRjb2RlZCB2YWx1ZXMuXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwibnVtYmVyXCIgJiYgIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0dmFsdWUgKz0gcmV0ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gYmFja2dyb3VuZC0qIHByb3BzIGFmZmVjdCBvcmlnaW5hbCBjbG9uZSdzIHZhbHVlc1xuXHRcdFx0aWYgKCAhc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgJiYgdmFsdWUgPT09IFwiXCIgJiYgbmFtZS5pbmRleE9mKCBcImJhY2tncm91bmRcIiApID09PSAwICkge1xuXHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gXCJpbmhlcml0XCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZVxuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8XG5cdFx0XHRcdCggdmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRpZiAoIGlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0XHRzdHlsZS5zZXRQcm9wZXJ0eSggbmFtZSwgdmFsdWUgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3Rcblx0XHRcdHJldHVybiBzdHlsZVsgbmFtZSBdO1xuXHRcdH1cblx0fSxcblxuXHRjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSwgc3R5bGVzICkge1xuXHRcdHZhciB2YWwsIG51bSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gbW9kaWZ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gVHJ5IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgbmFtZVxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXRcblx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IFwibm9ybWFsXCIgdG8gY29tcHV0ZWQgdmFsdWVcblx0XHRpZiAoIHZhbCA9PT0gXCJub3JtYWxcIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHtcblx0XHRcdHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdO1xuXHRcdH1cblxuXHRcdC8vIE1ha2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpY1xuXHRcdGlmICggZXh0cmEgPT09IFwiXCIgfHwgZXh0cmEgKSB7XG5cdFx0XHRudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTtcblx0XHRcdHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiaGVpZ2h0XCIsIFwid2lkdGhcIiBdLCBmdW5jdGlvbiggX2ksIGRpbWVuc2lvbiApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBkaW1lbnNpb24gXSA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdC8vIENlcnRhaW4gZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbVxuXHRcdFx0XHQvLyBidXQgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdFxuXHRcdFx0XHRyZXR1cm4gcmRpc3BsYXlzd2FwLnRlc3QoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgKSAmJlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrXG5cdFx0XHRcdFx0Ly8gVGFibGUgY29sdW1ucyBpbiBTYWZhcmkgaGF2ZSBub24temVybyBvZmZzZXRXaWR0aCAmIHplcm9cblx0XHRcdFx0XHQvLyBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB1bmxlc3MgZGlzcGxheSBpcyBjaGFuZ2VkLlxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHRcdFx0XHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGEgZGlzY29ubmVjdGVkIG5vZGVcblx0XHRcdFx0XHQvLyBpbiBJRSB0aHJvd3MgYW4gZXJyb3IuXG5cdFx0XHRcdFx0KCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCB8fCAhZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCApID9cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHtcblx0XHRcdHZhciBtYXRjaGVzLFxuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdFx0XHQvLyBPbmx5IHJlYWQgc3R5bGVzLnBvc2l0aW9uIGlmIHRoZSB0ZXN0IGhhcyBhIGNoYW5jZSB0byBmYWlsXG5cdFx0XHRcdC8vIHRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3cuXG5cdFx0XHRcdHNjcm9sbGJveFNpemVCdWdneSA9ICFzdXBwb3J0LnNjcm9sbGJveFNpemUoKSAmJlxuXHRcdFx0XHRcdHN0eWxlcy5wb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiLFxuXG5cdFx0XHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTM5OTEpXG5cdFx0XHRcdGJveFNpemluZ05lZWRlZCA9IHNjcm9sbGJveFNpemVCdWdneSB8fCBleHRyYSxcblx0XHRcdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdFx0XHRzdWJ0cmFjdCA9IGV4dHJhID9cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRcdFx0XHRlbGVtLFxuXHRcdFx0XHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0XHRcdFx0ZXh0cmEsXG5cdFx0XHRcdFx0XHRpc0JvcmRlckJveCxcblx0XHRcdFx0XHRcdHN0eWxlc1xuXHRcdFx0XHRcdCkgOlxuXHRcdFx0XHRcdDA7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHVucmVsaWFibGUgYm9yZGVyLWJveCBkaW1lbnNpb25zIGJ5IGNvbXBhcmluZyBvZmZzZXQqIHRvIGNvbXB1dGVkIGFuZFxuXHRcdFx0Ly8gZmFraW5nIGEgY29udGVudC1ib3ggdG8gZ2V0IGJvcmRlciBhbmQgcGFkZGluZyAoZ2gtMzY5OSlcblx0XHRcdGlmICggaXNCb3JkZXJCb3ggJiYgc2Nyb2xsYm94U2l6ZUJ1Z2d5ICkge1xuXHRcdFx0XHRzdWJ0cmFjdCAtPSBNYXRoLmNlaWwoXG5cdFx0XHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdFx0XHRwYXJzZUZsb2F0KCBzdHlsZXNbIGRpbWVuc2lvbiBdICkgLVxuXHRcdFx0XHRcdGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBcImJvcmRlclwiLCBmYWxzZSwgc3R5bGVzICkgLVxuXHRcdFx0XHRcdDAuNVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IHRvIHBpeGVscyBpZiB2YWx1ZSBhZGp1c3RtZW50IGlzIG5lZWRlZFxuXHRcdFx0aWYgKCBzdWJ0cmFjdCAmJiAoIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJlxuXHRcdFx0XHQoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSAhPT0gXCJweFwiICkge1xuXG5cdFx0XHRcdGVsZW0uc3R5bGVbIGRpbWVuc2lvbiBdID0gdmFsdWU7XG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5LmNzcyggZWxlbSwgZGltZW5zaW9uICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICk7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuY3NzSG9va3MubWFyZ2luTGVmdCA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5yZWxpYWJsZU1hcmdpbkxlZnQsXG5cdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0cmV0dXJuICggcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiApICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC1cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCB7IG1hcmdpbkxlZnQ6IDAgfSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXHRcdFx0XHRcdH0gKVxuXHRcdFx0KSArIFwicHhcIjtcblx0XHR9XG5cdH1cbik7XG5cbi8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXNcbmpRdWVyeS5lYWNoKCB7XG5cdG1hcmdpbjogXCJcIixcblx0cGFkZGluZzogXCJcIixcblx0Ym9yZGVyOiBcIldpZHRoXCJcbn0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcblx0XHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBpID0gMCxcblx0XHRcdFx0ZXhwYW5kZWQgPSB7fSxcblxuXHRcdFx0XHQvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmdcblx0XHRcdFx0cGFydHMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5zcGxpdCggXCIgXCIgKSA6IFsgdmFsdWUgXTtcblxuXHRcdFx0Zm9yICggOyBpIDwgNDsgaSsrICkge1xuXHRcdFx0XHRleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9XG5cdFx0XHRcdFx0cGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXhwYW5kZWQ7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICggcHJlZml4ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgc3R5bGVzLCBsZW4sXG5cdFx0XHRcdG1hcCA9IHt9LFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBuYW1lICkgKSB7XG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApO1xuXHRcdFx0XHRsZW4gPSBuYW1lLmxlbmd0aDtcblxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRtYXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwgc3R5bGVzICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbWFwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6XG5cdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcblx0XHR9LCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fVxufSApO1xuXG5cbmZ1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHtcblx0cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTtcbn1cbmpRdWVyeS5Ud2VlbiA9IFR3ZWVuO1xuXG5Ud2Vlbi5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBUd2Vlbixcblx0aW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkge1xuXHRcdHRoaXMuZWxlbSA9IGVsZW07XG5cdFx0dGhpcy5wcm9wID0gcHJvcDtcblx0XHR0aGlzLmVhc2luZyA9IGVhc2luZyB8fCBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0O1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblx0XHR0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApO1xuXHR9LFxuXHRjdXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRyZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID9cblx0XHRcdGhvb2tzLmdldCggdGhpcyApIDpcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcblx0fSxcblx0cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHtcblx0XHR2YXIgZWFzZWQsXG5cdFx0XHRob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKFxuXHRcdFx0XHRwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50O1xuXHRcdH1cblx0XHR0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkge1xuXHRcdFx0aG9va3Muc2V0KCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cblR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTtcblxuVHdlZW4ucHJvcEhvb2tzID0ge1xuXHRfZGVmYXVsdDoge1xuXHRcdGdldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdFx0dmFyIHJlc3VsdDtcblxuXHRcdFx0Ly8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCxcblx0XHRcdC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuXG5cdFx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHxcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseVxuXHRcdFx0Ly8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy5cblx0XHRcdC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyBcIjEwcHhcIiBhcmUgcGFyc2VkIHRvIEZsb2F0O1xuXHRcdFx0Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyBcInJvdGF0ZSgxcmFkKVwiIGFyZSByZXR1cm5lZCBhcy1pcy5cblx0XHRcdHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIFwiXCIgKTtcblxuXHRcdFx0Ly8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCBcImF1dG9cIiBhcmUgY29udmVydGVkIHRvIDAuXG5cdFx0XHRyZXR1cm4gIXJlc3VsdCB8fCByZXN1bHQgPT09IFwiYXV0b1wiID8gMCA6IHJlc3VsdDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXG5cdFx0XHQvLyBVc2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdC5cblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cblx0XHRcdC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuXG5cdFx0XHRpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XG5cdFx0XHR9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0alF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gfHxcblx0XHRcdFx0XHR0d2Vlbi5lbGVtLnN0eWxlWyBmaW5hbFByb3BOYW1lKCB0d2Vlbi5wcm9wICkgXSAhPSBudWxsICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgdHdlZW4ubm93ICsgdHdlZW4udW5pdCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIFBhbmljIGJhc2VkIGFwcHJvYWNoIHRvIHNldHRpbmcgdGhpbmdzIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmVhc2luZyA9IHtcblx0bGluZWFyOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gcDtcblx0fSxcblx0c3dpbmc6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiAwLjUgLSBNYXRoLmNvcyggcCAqIE1hdGguUEkgKSAvIDI7XG5cdH0sXG5cdF9kZWZhdWx0OiBcInN3aW5nXCJcbn07XG5cbmpRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0O1xuXG4vLyBCYWNrIGNvbXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludFxualF1ZXJ5LmZ4LnN0ZXAgPSB7fTtcblxuXG5cblxudmFyXG5cdGZ4Tm93LCBpblByb2dyZXNzLFxuXHRyZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxcblx0cnJ1biA9IC9xdWV1ZUhvb2tzJC87XG5cbmZ1bmN0aW9uIHNjaGVkdWxlKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0aWYgKCBkb2N1bWVudC5oaWRkZW4gPT09IGZhbHNlICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKSB7XG5cdFx0XHR3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBzY2hlZHVsZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3aW5kb3cuc2V0VGltZW91dCggc2NoZWR1bGUsIGpRdWVyeS5meC5pbnRlcnZhbCApO1xuXHRcdH1cblxuXHRcdGpRdWVyeS5meC50aWNrKCk7XG5cdH1cbn1cblxuLy8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseVxuZnVuY3Rpb24gY3JlYXRlRnhOb3coKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRmeE5vdyA9IHVuZGVmaW5lZDtcblx0fSApO1xuXHRyZXR1cm4gKCBmeE5vdyA9IERhdGUubm93KCkgKTtcbn1cblxuLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb25cbmZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGggKSB7XG5cdHZhciB3aGljaCxcblx0XHRpID0gMCxcblx0XHRhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH07XG5cblx0Ly8gSWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLFxuXHQvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodFxuXHRpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGggPyAxIDogMDtcblx0Zm9yICggOyBpIDwgNDsgaSArPSAyIC0gaW5jbHVkZVdpZHRoICkge1xuXHRcdHdoaWNoID0gY3NzRXhwYW5kWyBpIF07XG5cdFx0YXR0cnNbIFwibWFyZ2luXCIgKyB3aGljaCBdID0gYXR0cnNbIFwicGFkZGluZ1wiICsgd2hpY2ggXSA9IHR5cGU7XG5cdH1cblxuXHRpZiAoIGluY2x1ZGVXaWR0aCApIHtcblx0XHRhdHRycy5vcGFjaXR5ID0gYXR0cnMud2lkdGggPSB0eXBlO1xuXHR9XG5cblx0cmV0dXJuIGF0dHJzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUd2VlbiggdmFsdWUsIHByb3AsIGFuaW1hdGlvbiApIHtcblx0dmFyIHR3ZWVuLFxuXHRcdGNvbGxlY3Rpb24gPSAoIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCBBbmltYXRpb24udHdlZW5lcnNbIFwiKlwiIF0gKSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCAoIHR3ZWVuID0gY29sbGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHByb3AsIHZhbHVlICkgKSApIHtcblxuXHRcdFx0Ly8gV2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVydHlcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7XG5cdHZhciBwcm9wLCB2YWx1ZSwgdG9nZ2xlLCBob29rcywgb2xkZmlyZSwgcHJvcFR3ZWVuLCByZXN0b3JlRGlzcGxheSwgZGlzcGxheSxcblx0XHRpc0JveCA9IFwid2lkdGhcIiBpbiBwcm9wcyB8fCBcImhlaWdodFwiIGluIHByb3BzLFxuXHRcdGFuaW0gPSB0aGlzLFxuXHRcdG9yaWcgPSB7fSxcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGUsXG5cdFx0aGlkZGVuID0gZWxlbS5ub2RlVHlwZSAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSxcblx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJmeHNob3dcIiApO1xuXG5cdC8vIFF1ZXVlLXNraXBwaW5nIGFuaW1hdGlvbnMgaGlqYWNrIHRoZSBmeCBob29rc1xuXHRpZiAoICFvcHRzLnF1ZXVlICkge1xuXHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCBcImZ4XCIgKTtcblx0XHRpZiAoIGhvb2tzLnVucXVldWVkID09IG51bGwgKSB7XG5cdFx0XHRob29rcy51bnF1ZXVlZCA9IDA7XG5cdFx0XHRvbGRmaXJlID0gaG9va3MuZW1wdHkuZmlyZTtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7XG5cdFx0XHRcdFx0b2xkZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRob29rcy51bnF1ZXVlZCsrO1xuXG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbnN1cmUgdGhlIGNvbXBsZXRlIGhhbmRsZXIgaXMgY2FsbGVkIGJlZm9yZSB0aGlzIGNvbXBsZXRlc1xuXHRcdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRob29rcy51bnF1ZXVlZC0tO1xuXHRcdFx0XHRpZiAoICFqUXVlcnkucXVldWUoIGVsZW0sIFwiZnhcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBEZXRlY3Qgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0Zm9yICggcHJvcCBpbiBwcm9wcyApIHtcblx0XHR2YWx1ZSA9IHByb3BzWyBwcm9wIF07XG5cdFx0aWYgKCByZnh0eXBlcy50ZXN0KCB2YWx1ZSApICkge1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBwcm9wIF07XG5cdFx0XHR0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUgPT09IFwidG9nZ2xlXCI7XG5cdFx0XHRpZiAoIHZhbHVlID09PSAoIGhpZGRlbiA/IFwiaGlkZVwiIDogXCJzaG93XCIgKSApIHtcblxuXHRcdFx0XHQvLyBQcmV0ZW5kIHRvIGJlIGhpZGRlbiBpZiB0aGlzIGlzIGEgXCJzaG93XCIgYW5kXG5cdFx0XHRcdC8vIHRoZXJlIGlzIHN0aWxsIGRhdGEgZnJvbSBhIHN0b3BwZWQgc2hvdy9oaWRlXG5cdFx0XHRcdGlmICggdmFsdWUgPT09IFwic2hvd1wiICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSB0cnVlO1xuXG5cdFx0XHRcdC8vIElnbm9yZSBhbGwgb3RoZXIgbm8tb3Agc2hvdy9oaWRlIGRhdGFcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0b3JpZ1sgcHJvcCBdID0gZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSB8fCBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBCYWlsIG91dCBpZiB0aGlzIGlzIGEgbm8tb3AgbGlrZSAuaGlkZSgpLmhpZGUoKVxuXHRwcm9wVHdlZW4gPSAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3BzICk7XG5cdGlmICggIXByb3BUd2VlbiAmJiBqUXVlcnkuaXNFbXB0eU9iamVjdCggb3JpZyApICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlc3RyaWN0IFwib3ZlcmZsb3dcIiBhbmQgXCJkaXNwbGF5XCIgc3R5bGVzIGR1cmluZyBib3ggYW5pbWF0aW9uc1xuXHRpZiAoIGlzQm94ICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0Ly8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRSBkb2VzIG5vdCBpbmZlciB0aGUgc2hvcnRoYW5kXG5cdFx0Ly8gZnJvbSBpZGVudGljYWxseS12YWx1ZWQgb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1kgYW5kIEVkZ2UganVzdCBtaXJyb3JzXG5cdFx0Ly8gdGhlIG92ZXJmbG93WCB2YWx1ZSB0aGVyZS5cblx0XHRvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5vdmVyZmxvdywgc3R5bGUub3ZlcmZsb3dYLCBzdHlsZS5vdmVyZmxvd1kgXTtcblxuXHRcdC8vIElkZW50aWZ5IGEgZGlzcGxheSB0eXBlLCBwcmVmZXJyaW5nIG9sZCBzaG93L2hpZGUgZGF0YSBvdmVyIHRoZSBDU1MgY2FzY2FkZVxuXHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVNob3cgJiYgZGF0YVNob3cuZGlzcGxheTtcblx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHR9XG5cdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgKSB7XG5cdFx0XHRcdGRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gR2V0IG5vbmVtcHR5IHZhbHVlKHMpIGJ5IHRlbXBvcmFyaWx5IGZvcmNpbmcgdmlzaWJpbGl0eVxuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXkgfHwgcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBbmltYXRlIGlubGluZSBlbGVtZW50cyBhcyBpbmxpbmUtYmxvY2tcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwiaW5saW5lXCIgfHwgZGlzcGxheSA9PT0gXCJpbmxpbmUtYmxvY2tcIiAmJiByZXN0b3JlRGlzcGxheSAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcImZsb2F0XCIgKSA9PT0gXCJub25lXCIgKSB7XG5cblx0XHRcdFx0Ly8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgZGlzcGxheSB2YWx1ZSBhdCB0aGUgZW5kIG9mIHB1cmUgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0XHRcdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdGRpc3BsYXkgPSBzdHlsZS5kaXNwbGF5O1xuXHRcdFx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkaXNwbGF5ID09PSBcIm5vbmVcIiA/IFwiXCIgOiBkaXNwbGF5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIG9wdHMub3ZlcmZsb3cgKSB7XG5cdFx0c3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdHN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dYID0gb3B0cy5vdmVyZmxvd1sgMSBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEltcGxlbWVudCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRwcm9wVHdlZW4gPSBmYWxzZTtcblx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXG5cdFx0Ly8gR2VuZXJhbCBzaG93L2hpZGUgc2V0dXAgZm9yIHRoaXMgZWxlbWVudCBhbmltYXRpb25cblx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRpZiAoIGRhdGFTaG93ICkge1xuXHRcdFx0XHRpZiAoIFwiaGlkZGVuXCIgaW4gZGF0YVNob3cgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gZGF0YVNob3cuaGlkZGVuO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgXCJmeHNob3dcIiwgeyBkaXNwbGF5OiByZXN0b3JlRGlzcGxheSB9ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0b3JlIGhpZGRlbi92aXNpYmxlIGZvciB0b2dnbGUgc28gYC5zdG9wKCkudG9nZ2xlKClgIFwicmV2ZXJzZXNcIlxuXHRcdFx0aWYgKCB0b2dnbGUgKSB7XG5cdFx0XHRcdGRhdGFTaG93LmhpZGRlbiA9ICFoaWRkZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNob3cgZWxlbWVudHMgYmVmb3JlIGFuaW1hdGluZyB0aGVtXG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdFx0Ly8gVGhlIGZpbmFsIHN0ZXAgb2YgYSBcImhpZGVcIiBhbmltYXRpb24gaXMgYWN0dWFsbHkgaGlkaW5nIHRoZSBlbGVtZW50XG5cdFx0XHRcdGlmICggIWhpZGRlbiApIHtcblx0XHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiZnhzaG93XCIgKTtcblx0XHRcdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvLyBQZXItcHJvcGVydHkgc2V0dXBcblx0XHRwcm9wVHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTtcblx0XHRpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHtcblx0XHRcdGRhdGFTaG93WyBwcm9wIF0gPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0cHJvcFR3ZWVuLmVuZCA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdFx0cHJvcFR3ZWVuLnN0YXJ0ID0gMDtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7XG5cdHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7XG5cblx0Ly8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzXG5cdGZvciAoIGluZGV4IGluIHByb3BzICkge1xuXHRcdG5hbWUgPSBjYW1lbENhc2UoIGluZGV4ICk7XG5cdFx0ZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdO1xuXHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF07XG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0ZWFzaW5nID0gdmFsdWVbIDEgXTtcblx0XHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdO1xuXHRcdH1cblxuXHRcdGlmICggaW5kZXggIT09IG5hbWUgKSB7XG5cdFx0XHRwcm9wc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRkZWxldGUgcHJvcHNbIGluZGV4IF07XG5cdFx0fVxuXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTtcblx0XHRpZiAoIGhvb2tzICYmIFwiZXhwYW5kXCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgbmFtZSBdO1xuXG5cdFx0XHQvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuXG5cdFx0XHQvLyBSZXVzaW5nICdpbmRleCcgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IFwibmFtZVwiXG5cdFx0XHRmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkge1xuXHRcdFx0XHRcdHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07XG5cdFx0XHRcdFx0c3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHtcblx0dmFyIHJlc3VsdCxcblx0XHRzdG9wcGVkLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsXG5cdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBEb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3Jcblx0XHRcdGRlbGV0ZSB0aWNrLmVsZW07XG5cdFx0fSApLFxuXHRcdHRpY2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdFx0cmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLFxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zIG9ubHlcblx0XHRcdFx0Ly8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAodHJhYy0xMjQ5Nylcblx0XHRcdFx0dGVtcCA9IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5kdXJhdGlvbiB8fCAwLFxuXHRcdFx0XHRwZXJjZW50ID0gMSAtIHRlbXAsXG5cdFx0XHRcdGluZGV4ID0gMCxcblx0XHRcdFx0bGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7XG5cblx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCBwZXJjZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50LCByZW1haW5pbmcgXSApO1xuXG5cdFx0XHQvLyBJZiB0aGVyZSdzIG1vcmUgdG8gZG8sIHlpZWxkXG5cdFx0XHRpZiAoIHBlcmNlbnQgPCAxICYmIGxlbmd0aCApIHtcblx0XHRcdFx0cmV0dXJuIHJlbWFpbmluZztcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyB3YXMgYW4gZW1wdHkgYW5pbWF0aW9uLCBzeW50aGVzaXplIGEgZmluYWwgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uXG5cdFx0XHRpZiAoICFsZW5ndGggKSB7XG5cdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVzb2x2ZSB0aGUgYW5pbWF0aW9uIGFuZCByZXBvcnQgaXRzIGNvbmNsdXNpb25cblx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiBdICk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHRhbmltYXRpb24gPSBkZWZlcnJlZC5wcm9taXNlKCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0cHJvcHM6IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksXG5cdFx0XHRvcHRzOiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7XG5cdFx0XHRcdHNwZWNpYWxFYXNpbmc6IHt9LFxuXHRcdFx0XHRlYXNpbmc6IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHRcblx0XHRcdH0sIG9wdGlvbnMgKSxcblx0XHRcdG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcyxcblx0XHRcdG9yaWdpbmFsT3B0aW9uczogb3B0aW9ucyxcblx0XHRcdHN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLFxuXHRcdFx0dHdlZW5zOiBbXSxcblx0XHRcdGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkge1xuXHRcdFx0XHR2YXIgdHdlZW4gPSBqUXVlcnkuVHdlZW4oIGVsZW0sIGFuaW1hdGlvbi5vcHRzLCBwcm9wLCBlbmQsXG5cdFx0XHRcdFx0YW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApO1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7XG5cdFx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHRcdH0sXG5cdFx0XHRzdG9wOiBmdW5jdGlvbiggZ290b0VuZCApIHtcblx0XHRcdFx0dmFyIGluZGV4ID0gMCxcblxuXHRcdFx0XHRcdC8vIElmIHdlIGFyZSBnb2luZyB0byB0aGUgZW5kLCB3ZSB3YW50IHRvIHJ1biBhbGwgdGhlIHR3ZWVuc1xuXHRcdFx0XHRcdC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydFxuXHRcdFx0XHRcdGxlbmd0aCA9IGdvdG9FbmQgPyBhbmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7XG5cdFx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0XHRzdG9wcGVkID0gdHJ1ZTtcblx0XHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZTsgb3RoZXJ3aXNlLCByZWplY3Rcblx0XHRcdFx0aWYgKCBnb3RvRW5kICkge1xuXHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9ICksXG5cdFx0cHJvcHMgPSBhbmltYXRpb24ucHJvcHM7XG5cblx0cHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmcgKTtcblxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdHJlc3VsdCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgZWxlbSwgcHJvcHMsIGFuaW1hdGlvbi5vcHRzICk7XG5cdFx0aWYgKCByZXN1bHQgKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHJlc3VsdC5zdG9wICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggYW5pbWF0aW9uLmVsZW0sIGFuaW1hdGlvbi5vcHRzLnF1ZXVlICkuc3RvcCA9XG5cdFx0XHRcdFx0cmVzdWx0LnN0b3AuYmluZCggcmVzdWx0ICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fVxuXG5cdGpRdWVyeS5tYXAoIHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7XG5cblx0aWYgKCBpc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkge1xuXHRcdGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApO1xuXHR9XG5cblx0Ly8gQXR0YWNoIGNhbGxiYWNrcyBmcm9tIG9wdGlvbnNcblx0YW5pbWF0aW9uXG5cdFx0LnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9ncmVzcyApXG5cdFx0LmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlIClcblx0XHQuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApXG5cdFx0LmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7XG5cblx0alF1ZXJ5LmZ4LnRpbWVyKFxuXHRcdGpRdWVyeS5leHRlbmQoIHRpY2ssIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRhbmltOiBhbmltYXRpb24sXG5cdFx0XHRxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWVcblx0XHR9IClcblx0KTtcblxuXHRyZXR1cm4gYW5pbWF0aW9uO1xufVxuXG5qUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7XG5cblx0dHdlZW5lcnM6IHtcblx0XHRcIipcIjogWyBmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgdHdlZW4gPSB0aGlzLmNyZWF0ZVR3ZWVuKCBwcm9wLCB2YWx1ZSApO1xuXHRcdFx0YWRqdXN0Q1NTKCB0d2Vlbi5lbGVtLCBwcm9wLCByY3NzTnVtLmV4ZWMoIHZhbHVlICksIHR3ZWVuICk7XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fSBdXG5cdH0sXG5cblx0dHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIHByb3BzICkgKSB7XG5cdFx0XHRjYWxsYmFjayA9IHByb3BzO1xuXHRcdFx0cHJvcHMgPSBbIFwiKlwiIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb3BzID0gcHJvcHMubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblx0XHR9XG5cblx0XHR2YXIgcHJvcCxcblx0XHRcdGluZGV4ID0gMCxcblx0XHRcdGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRwcm9wID0gcHJvcHNbIGluZGV4IF07XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSA9IEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0udW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH0sXG5cblx0cHJlZmlsdGVyczogWyBkZWZhdWx0UHJlZmlsdGVyIF0sXG5cblx0cHJlZmlsdGVyOiBmdW5jdGlvbiggY2FsbGJhY2ssIHByZXBlbmQgKSB7XG5cdFx0aWYgKCBwcmVwZW5kICkge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMudW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMucHVzaCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LnNwZWVkID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkge1xuXHR2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSBcIm9iamVjdFwiID8galF1ZXJ5LmV4dGVuZCgge30sIHNwZWVkICkgOiB7XG5cdFx0Y29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHxcblx0XHRcdGlzRnVuY3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsXG5cdFx0ZHVyYXRpb246IHNwZWVkLFxuXHRcdGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nXG5cdH07XG5cblx0Ly8gR28gdG8gdGhlIGVuZCBzdGF0ZSBpZiBmeCBhcmUgb2ZmXG5cdGlmICggalF1ZXJ5LmZ4Lm9mZiApIHtcblx0XHRvcHQuZHVyYXRpb24gPSAwO1xuXG5cdH0gZWxzZSB7XG5cdFx0aWYgKCB0eXBlb2Ygb3B0LmR1cmF0aW9uICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0aWYgKCBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyApIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gXCJmeFwiXG5cdGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkge1xuXHRcdG9wdC5xdWV1ZSA9IFwiZnhcIjtcblx0fVxuXG5cdC8vIFF1ZXVlaW5nXG5cdG9wdC5vbGQgPSBvcHQuY29tcGxldGU7XG5cblx0b3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7XG5cdFx0XHRvcHQub2xkLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdC5xdWV1ZSApIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCBvcHQucXVldWUgKTtcblx0XHR9XG5cdH07XG5cblx0cmV0dXJuIG9wdDtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXG5cdFx0Ly8gU2hvdyBhbnkgaGlkZGVuIGVsZW1lbnRzIGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0byAwXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbldpdGhpblRyZWUgKS5jc3MoIFwib3BhY2l0eVwiLCAwICkuc2hvdygpXG5cblx0XHRcdC8vIEFuaW1hdGUgdG8gdGhlIHZhbHVlIHNwZWNpZmllZFxuXHRcdFx0LmVuZCgpLmFuaW1hdGUoIHsgb3BhY2l0eTogdG8gfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fSxcblx0YW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHZhciBlbXB0eSA9IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICksXG5cdFx0XHRvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksXG5cdFx0XHRkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0XG5cdFx0XHRcdHZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlzLCBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcCApLCBvcHRhbGwgKTtcblxuXHRcdFx0XHQvLyBFbXB0eSBhbmltYXRpb25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHlcblx0XHRcdFx0aWYgKCBlbXB0eSB8fCBkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZmluaXNoXCIgKSApIHtcblx0XHRcdFx0XHRhbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGRvQW5pbWF0aW9uLmZpbmlzaCA9IGRvQW5pbWF0aW9uO1xuXG5cdFx0cmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0dGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDpcblx0XHRcdHRoaXMucXVldWUoIG9wdGFsbC5xdWV1ZSwgZG9BbmltYXRpb24gKTtcblx0fSxcblx0c3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7XG5cdFx0dmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHtcblx0XHRcdHZhciBzdG9wID0gaG9va3Muc3RvcDtcblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0c3RvcCggZ290b0VuZCApO1xuXHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Z290b0VuZCA9IGNsZWFyUXVldWU7XG5cdFx0XHRjbGVhclF1ZXVlID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggY2xlYXJRdWV1ZSApIHtcblx0XHRcdHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGRlcXVldWUgPSB0cnVlLFxuXHRcdFx0XHRpbmRleCA9IHR5cGUgIT0gbnVsbCAmJiB0eXBlICsgXCJxdWV1ZUhvb2tzXCIsXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKTtcblxuXHRcdFx0aWYgKCBpbmRleCApIHtcblx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHtcblx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yICggaW5kZXggaW4gZGF0YSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHtcblx0XHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmXG5cdFx0XHRcdFx0KCB0eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkgKSB7XG5cblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7XG5cdFx0XHRcdFx0ZGVxdWV1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZC5cblx0XHRcdC8vIFRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywgd2hpY2hcblx0XHRcdC8vIHdpbGwgZGVxdWV1ZSBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZC5cblx0XHRcdGlmICggZGVxdWV1ZSB8fCAhZ290b0VuZCApIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cdGZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0aWYgKCB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaW5kZXgsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKSxcblx0XHRcdFx0cXVldWUgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZVwiIF0sXG5cdFx0XHRcdGhvb2tzID0gZGF0YVsgdHlwZSArIFwicXVldWVIb29rc1wiIF0sXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGxlbmd0aCA9IHF1ZXVlID8gcXVldWUubGVuZ3RoIDogMDtcblxuXHRcdFx0Ly8gRW5hYmxlIGZpbmlzaGluZyBmbGFnIG9uIHByaXZhdGUgZGF0YVxuXHRcdFx0ZGF0YS5maW5pc2ggPSB0cnVlO1xuXG5cdFx0XHQvLyBFbXB0eSB0aGUgcXVldWUgZmlyc3Rcblx0XHRcdGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgW10gKTtcblxuXHRcdFx0aWYgKCBob29rcyAmJiBob29rcy5zdG9wICkge1xuXHRcdFx0XHRob29rcy5zdG9wLmNhbGwoIHRoaXMsIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFjdGl2ZSBhbmltYXRpb25zLCBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkge1xuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRpZiAoIHF1ZXVlWyBpbmRleCBdICYmIHF1ZXVlWyBpbmRleCBdLmZpbmlzaCApIHtcblx0XHRcdFx0XHRxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFR1cm4gb2ZmIGZpbmlzaGluZyBmbGFnXG5cdFx0XHRkZWxldGUgZGF0YS5maW5pc2g7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwidG9nZ2xlXCIsIFwic2hvd1wiLCBcImhpZGVcIiBdLCBmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdHZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFtZSBdO1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09IFwiYm9vbGVhblwiID9cblx0XHRcdGNzc0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSA6XG5cdFx0XHR0aGlzLmFuaW1hdGUoIGdlbkZ4KCBuYW1lLCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbi8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnNcbmpRdWVyeS5lYWNoKCB7XG5cdHNsaWRlRG93bjogZ2VuRngoIFwic2hvd1wiICksXG5cdHNsaWRlVXA6IGdlbkZ4KCBcImhpZGVcIiApLFxuXHRzbGlkZVRvZ2dsZTogZ2VuRngoIFwidG9nZ2xlXCIgKSxcblx0ZmFkZUluOiB7IG9wYWNpdHk6IFwic2hvd1wiIH0sXG5cdGZhZGVPdXQ6IHsgb3BhY2l0eTogXCJoaWRlXCIgfSxcblx0ZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiBcInRvZ2dsZVwiIH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS50aW1lcnMgPSBbXTtcbmpRdWVyeS5meC50aWNrID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lcixcblx0XHRpID0gMCxcblx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzO1xuXG5cdGZ4Tm93ID0gRGF0ZS5ub3coKTtcblxuXHRmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7XG5cdFx0dGltZXIgPSB0aW1lcnNbIGkgXTtcblxuXHRcdC8vIFJ1biB0aGUgdGltZXIgYW5kIHNhZmVseSByZW1vdmUgaXQgd2hlbiBkb25lIChhbGxvd2luZyBmb3IgZXh0ZXJuYWwgcmVtb3ZhbClcblx0XHRpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1lciApIHtcblx0XHRcdHRpbWVycy5zcGxpY2UoIGktLSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdGlmICggIXRpbWVycy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5LmZ4LnN0b3AoKTtcblx0fVxuXHRmeE5vdyA9IHVuZGVmaW5lZDtcbn07XG5cbmpRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHtcblx0alF1ZXJ5LnRpbWVycy5wdXNoKCB0aW1lciApO1xuXHRqUXVlcnkuZnguc3RhcnQoKTtcbn07XG5cbmpRdWVyeS5meC5pbnRlcnZhbCA9IDEzO1xualF1ZXJ5LmZ4LnN0YXJ0ID0gZnVuY3Rpb24oKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpblByb2dyZXNzID0gdHJ1ZTtcblx0c2NoZWR1bGUoKTtcbn07XG5cbmpRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdGluUHJvZ3Jlc3MgPSBudWxsO1xufTtcblxualF1ZXJ5LmZ4LnNwZWVkcyA9IHtcblx0c2xvdzogNjAwLFxuXHRmYXN0OiAyMDAsXG5cblx0Ly8gRGVmYXVsdCBzcGVlZFxuXHRfZGVmYXVsdDogNDAwXG59O1xuXG5cbi8vIEJhc2VkIG9mZiBvZiB0aGUgcGx1Z2luIGJ5IENsaW50IEhlbGZlcnMsIHdpdGggcGVybWlzc2lvbi5cbmpRdWVyeS5mbi5kZWxheSA9IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkge1xuXHR0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lO1xuXHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHtcblx0XHR2YXIgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7XG5cdFx0aG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdH07XG5cdH0gKTtcbn07XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICksXG5cdFx0c2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJzZWxlY3RcIiApLFxuXHRcdG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvcHRpb25cIiApICk7XG5cblx0aW5wdXQudHlwZSA9IFwiY2hlY2tib3hcIjtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4zIG9ubHlcblx0Ly8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUgXCJvblwiXG5cdHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSBcIlwiO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdFxuXHRzdXBwb3J0Lm9wdFNlbGVjdGVkID0gb3B0LnNlbGVjdGVkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBBbiBpbnB1dCBsb3NlcyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRpb1xuXHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRpbnB1dC52YWx1ZSA9IFwidFwiO1xuXHRpbnB1dC50eXBlID0gXCJyYWRpb1wiO1xuXHRzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gXCJ0XCI7XG59ICkoKTtcblxuXG52YXIgYm9vbEhvb2ssXG5cdGF0dHJIYW5kbGUgPSBqUXVlcnkuZXhwci5hdHRySGFuZGxlO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXR0cmlidXRlIGhvb2tzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlcmNhc2UgdmVyc2lvblxuXHRcdC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWRcblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblx0XHRcdGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0KCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogdW5kZWZpbmVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyBcIlwiICk7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0Ly8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1bmRlZmluZWRcblx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7XG5cdH0sXG5cblx0YXR0ckhvb2tzOiB7XG5cdFx0dHlwZToge1xuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gXCJyYWRpb1wiICYmXG5cdFx0XHRcdFx0bm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHZhciB2YWwgPSBlbGVtLnZhbHVlO1xuXHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgdmFsdWUgKTtcblx0XHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRcdGVsZW0udmFsdWUgPSB2YWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0dmFyIG5hbWUsXG5cdFx0XHRpID0gMCxcblxuXHRcdFx0Ly8gQXR0cmlidXRlIG5hbWVzIGNhbiBjb250YWluIG5vbi1IVE1MIHdoaXRlc3BhY2UgY2hhcmFjdGVyc1xuXHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjYXR0cmlidXRlcy0yXG5cdFx0XHRhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXG5cdFx0aWYgKCBhdHRyTmFtZXMgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdHdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBpKysgXSApICkge1xuXHRcdFx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzXG5ib29sSG9vayA9IHtcblx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2Vcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lO1xuXHR9XG59O1xuXG5qUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cXHcrL2cgKSwgZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHR2YXIgZ2V0dGVyID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5kLmF0dHI7XG5cblx0YXR0ckhhbmRsZVsgbmFtZSBdID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciByZXQsIGhhbmRsZSxcblx0XHRcdGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRpZiAoICFpc1hNTCApIHtcblxuXHRcdFx0Ly8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBieSB0ZW1wb3JhcmlseSByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGdldHRlclxuXHRcdFx0aGFuZGxlID0gYXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gcmV0O1xuXHRcdFx0cmV0ID0gZ2V0dGVyKCBlbGVtLCBuYW1lLCBpc1hNTCApICE9IG51bGwgP1xuXHRcdFx0XHRsb3dlcmNhc2VOYW1lIDpcblx0XHRcdFx0bnVsbDtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IGhhbmRsZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcbn0gKTtcblxuXG5cblxudmFyIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyY2xpY2thYmxlID0gL14oPzphfGFyZWEpJC9pO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkZWxldGUgdGhpc1sgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lIF07XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3Ncblx0XHRcdG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldHVybiBlbGVtWyBuYW1lIF07XG5cdH0sXG5cblx0cHJvcEhvb2tzOiB7XG5cdFx0dGFiSW5kZXg6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdFx0XHQvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGVcblx0XHRcdFx0Ly8gY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0XG5cdFx0XHRcdC8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZhbCAodHJhYy0xMjA3Milcblx0XHRcdFx0dmFyIHRhYmluZGV4ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ0YWJpbmRleFwiICk7XG5cblx0XHRcdFx0aWYgKCB0YWJpbmRleCApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoIHRhYmluZGV4LCAxMCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHJmb2N1c2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApIHx8XG5cdFx0XHRcdFx0cmNsaWNrYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiZcblx0XHRcdFx0XHRlbGVtLmhyZWZcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHByb3BGaXg6IHtcblx0XHRcImZvclwiOiBcImh0bWxGb3JcIixcblx0XHRcImNsYXNzXCI6IFwiY2xhc3NOYW1lXCJcblx0fVxufSApO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcbi8vIEFjY2Vzc2luZyB0aGUgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eVxuLy8gZm9yY2VzIHRoZSBicm93c2VyIHRvIHJlc3BlY3Qgc2V0dGluZyBzZWxlY3RlZFxuLy8gb24gdGhlIG9wdGlvblxuLy8gVGhlIGdldHRlciBlbnN1cmVzIGEgZGVmYXVsdCBvcHRpb24gaXMgc2VsZWN0ZWRcbi8vIHdoZW4gaW4gYW4gb3B0Z3JvdXBcbi8vIGVzbGludCBydWxlIFwibm8tdW51c2VkLWV4cHJlc3Npb25zXCIgaXMgZGlzYWJsZWQgZm9yIHRoaXMgY29kZVxuLy8gc2luY2UgaXQgY29uc2lkZXJzIHN1Y2ggYWNjZXNzaW9ucyBub29wXG5pZiAoICFzdXBwb3J0Lm9wdFNlbGVjdGVkICkge1xuXHRqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICYmIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0cGFyZW50LnNlbGVjdGVkSW5kZXg7XG5cblx0XHRcdFx0aWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5qUXVlcnkuZWFjaCggW1xuXHRcInRhYkluZGV4XCIsXG5cdFwicmVhZE9ubHlcIixcblx0XCJtYXhMZW5ndGhcIixcblx0XCJjZWxsU3BhY2luZ1wiLFxuXHRcImNlbGxQYWRkaW5nXCIsXG5cdFwicm93U3BhblwiLFxuXHRcImNvbFNwYW5cIixcblx0XCJ1c2VNYXBcIixcblx0XCJmcmFtZUJvcmRlclwiLFxuXHRcImNvbnRlbnRFZGl0YWJsZVwiXG5dLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnByb3BGaXhbIHRoaXMudG9Mb3dlckNhc2UoKSBdID0gdGhpcztcbn0gKTtcblxuXG5cblxuXHQvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZSBhY2NvcmRpbmcgdG8gSFRNTCBzcGVjXG5cdC8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2UtYXNjaWktd2hpdGVzcGFjZVxuXHRmdW5jdGlvbiBzdHJpcEFuZENvbGxhcHNlKCB2YWx1ZSApIHtcblx0XHR2YXIgdG9rZW5zID0gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblx0XHRyZXR1cm4gdG9rZW5zLmpvaW4oIFwiIFwiICk7XG5cdH1cblxuXG5mdW5jdGlvbiBnZXRDbGFzcyggZWxlbSApIHtcblx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlICYmIGVsZW0uZ2V0QXR0cmlidXRlKCBcImNsYXNzXCIgKSB8fCBcIlwiO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VzVG9BcnJheSggdmFsdWUgKSB7XG5cdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdH1cblx0cmV0dXJuIFtdO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGFkZENsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZXMsIGN1ciwgY3VyVmFsdWUsIGNsYXNzTmFtZSwgaSwgZmluYWxWYWx1ZTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NOYW1lcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBjbGFzc05hbWVzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCB0aGlzICk7XG5cdFx0XHRcdGN1ciA9IHRoaXMubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkgXTtcblx0XHRcdFx0XHRcdGlmICggY3VyLmluZGV4T2YoIFwiIFwiICsgY2xhc3NOYW1lICsgXCIgXCIgKSA8IDAgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciArPSBjbGFzc05hbWUgKyBcIiBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZXMsIGN1ciwgY3VyVmFsdWUsIGNsYXNzTmFtZSwgaSwgZmluYWxWYWx1ZTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmF0dHIoIFwiY2xhc3NcIiwgXCJcIiApO1xuXHRcdH1cblxuXHRcdGNsYXNzTmFtZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3NOYW1lcy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXG5cdFx0XHRcdC8vIFRoaXMgZXhwcmVzc2lvbiBpcyBoZXJlIGZvciBiZXR0ZXIgY29tcHJlc3NpYmlsaXR5IChzZWUgYWRkQ2xhc3MpXG5cdFx0XHRcdGN1ciA9IHRoaXMubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkgXTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlICphbGwqIGluc3RhbmNlc1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGFzc05hbWUgKyBcIiBcIiApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciA9IGN1ci5yZXBsYWNlKCBcIiBcIiArIGNsYXNzTmFtZSArIFwiIFwiLCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZXMsIGNsYXNzTmFtZSwgaSwgc2VsZixcblx0XHRcdHR5cGUgPSB0eXBlb2YgdmFsdWUsXG5cdFx0XHRpc1ZhbGlkVmFsdWUgPSB0eXBlID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkudG9nZ2xlQ2xhc3MoXG5cdFx0XHRcdFx0dmFsdWUuY2FsbCggdGhpcywgaSwgZ2V0Q2xhc3MoIHRoaXMgKSwgc3RhdGVWYWwgKSxcblx0XHRcdFx0XHRzdGF0ZVZhbFxuXHRcdFx0XHQpO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZW9mIHN0YXRlVmFsID09PSBcImJvb2xlYW5cIiAmJiBpc1ZhbGlkVmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGVWYWwgPyB0aGlzLmFkZENsYXNzKCB2YWx1ZSApIDogdGhpcy5yZW1vdmVDbGFzcyggdmFsdWUgKTtcblx0XHR9XG5cblx0XHRjbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNWYWxpZFZhbHVlICkge1xuXG5cdFx0XHRcdC8vIFRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzXG5cdFx0XHRcdHNlbGYgPSBqUXVlcnkoIHRoaXMgKTtcblxuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGNsYXNzTmFtZXMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdFx0Y2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gQ2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0XG5cdFx0XHRcdFx0aWYgKCBzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKSApIHtcblx0XHRcdFx0XHRcdHNlbGYucmVtb3ZlQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzZWxmLmFkZENsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gVG9nZ2xlIHdob2xlIGNsYXNzIG5hbWVcblx0XHRcdH0gZWxzZSBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRcdGNsYXNzTmFtZSA9IGdldENsYXNzKCB0aGlzICk7XG5cdFx0XHRcdGlmICggY2xhc3NOYW1lICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgY2xhc3NOYW1lIGlmIHNldFxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIsIGNsYXNzTmFtZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGVsZW1lbnQgaGFzIGEgY2xhc3MgbmFtZSBvciBpZiB3ZSdyZSBwYXNzZWQgYGZhbHNlYCxcblx0XHRcdFx0Ly8gdGhlbiByZW1vdmUgdGhlIHdob2xlIGNsYXNzbmFtZSAoaWYgdGhlcmUgd2FzIG9uZSwgdGhlIGFib3ZlIHNhdmVkIGl0KS5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGJyaW5nIGJhY2sgd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgc2F2ZWQgKGlmIGFueXRoaW5nKSxcblx0XHRcdFx0Ly8gZmFsbGluZyBiYWNrIHRvIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm90aGluZyB3YXMgc3RvcmVkLlxuXHRcdFx0XHRpZiAoIHRoaXMuc2V0QXR0cmlidXRlICkge1xuXHRcdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgfHwgdmFsdWUgPT09IGZhbHNlID9cblx0XHRcdFx0XHRcdFx0XCJcIiA6XG5cdFx0XHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIgKSB8fCBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBjbGFzc05hbWUsIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIjtcblx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0KCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGdldENsYXNzKCBlbGVtICkgKSArIFwiIFwiICkuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBycmV0dXJuID0gL1xcci9nO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHZhbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBob29rcywgcmV0LCB2YWx1ZUlzRnVuY3Rpb24sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8XG5cdFx0XHRcdFx0alF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0XHRpZiAoIGhvb2tzICYmXG5cdFx0XHRcdFx0XCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBcInZhbHVlXCIgKSApICE9PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldCA9IGVsZW0udmFsdWU7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNlc1xuXHRcdFx0XHRpZiAoIHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldC5yZXBsYWNlKCBycmV0dXJuLCBcIlwiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXJcblx0XHRcdFx0cmV0dXJuIHJldCA9PSBudWxsID8gXCJcIiA6IHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdHZhciB2YWw7XG5cblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0dmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgalF1ZXJ5KCB0aGlzICkudmFsKCkgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyBcIlwiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5nXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR2YWwgPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHR2YWwgKz0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHZhbCA9IGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIjtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0Ly8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmdcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgXCJ2YWx1ZVwiICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbDtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHR2YWxIb29rczoge1xuXHRcdG9wdGlvbjoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHR2YXIgdmFsID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ2YWx1ZVwiICk7XG5cdFx0XHRcdHJldHVybiB2YWwgIT0gbnVsbCA/XG5cdFx0XHRcdFx0dmFsIDpcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSBvbmx5XG5cdFx0XHRcdFx0Ly8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlvbnMgKHRyYWMtMTQ2ODYsIHRyYWMtMTQ4NTgpXG5cdFx0XHRcdFx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2Vcblx0XHRcdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZVxuXHRcdFx0XHRcdHN0cmlwQW5kQ29sbGFwc2UoIGpRdWVyeS50ZXh0KCBlbGVtICkgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlbGVjdDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHZhbHVlLCBvcHRpb24sIGksXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHRpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCxcblx0XHRcdFx0XHRvbmUgPSBlbGVtLnR5cGUgPT09IFwic2VsZWN0LW9uZVwiLFxuXHRcdFx0XHRcdHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSxcblx0XHRcdFx0XHRtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHRpZiAoIGluZGV4IDwgMCApIHtcblx0XHRcdFx0XHRpID0gbWF4O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aSA9IG9uZSA/IGluZGV4IDogMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnNcblx0XHRcdFx0Zm9yICggOyBpIDwgbWF4OyBpKysgKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHQvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICh0cmFjLTI1NTEpXG5cdFx0XHRcdFx0aWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmXG5cblx0XHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJsZWQgb3IgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0XHRcdFx0XHQhb3B0aW9uLmRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRcdCggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8XG5cdFx0XHRcdFx0XHRcdFx0IW5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgXCJvcHRncm91cFwiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvblxuXHRcdFx0XHRcdFx0dmFsdWUgPSBqUXVlcnkoIG9wdGlvbiApLnZhbCgpO1xuXG5cdFx0XHRcdFx0XHQvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0c1xuXHRcdFx0XHRcdFx0aWYgKCBvbmUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXlcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIG9wdGlvblNldCwgb3B0aW9uLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0dmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKSxcblx0XHRcdFx0XHRpID0gb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tY29uZC1hc3NpZ24gKi9cblxuXHRcdFx0XHRcdGlmICggb3B0aW9uLnNlbGVjdGVkID1cblx0XHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBqUXVlcnkudmFsSG9va3Mub3B0aW9uLmdldCggb3B0aW9uICksIHZhbHVlcyApID4gLTFcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG9wdGlvblNldCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRm9yY2UgYnJvd3NlcnMgdG8gYmVoYXZlIGNvbnNpc3RlbnRseSB3aGVuIG5vbi1tYXRjaGluZyB2YWx1ZSBpcyBzZXRcblx0XHRcdFx0aWYgKCAhb3B0aW9uU2V0ICkge1xuXHRcdFx0XHRcdGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyXG5qUXVlcnkuZWFjaCggWyBcInJhZGlvXCIsIFwiY2hlY2tib3hcIiBdLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7XG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoIGVsZW0gKS52YWwoKSwgdmFsdWUgKSA+IC0xICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoICFzdXBwb3J0LmNoZWNrT24gKSB7XG5cdFx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0uZ2V0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBudWxsID8gXCJvblwiIDogZWxlbS52YWx1ZTtcblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFJldHVybiBqUXVlcnkgZm9yIGF0dHJpYnV0ZXMtb25seSBpbmNsdXNpb25cbnZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcblxudmFyIG5vbmNlID0geyBndWlkOiBEYXRlLm5vdygpIH07XG5cbnZhciBycXVlcnkgPSAoIC9cXD8vICk7XG5cblxuXG4vLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nXG5qUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHtcblx0dmFyIHhtbCwgcGFyc2VyRXJyb3JFbGVtO1xuXHRpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gSUUgdGhyb3dzIG9uIHBhcnNlRnJvbVN0cmluZyB3aXRoIGludmFsaWQgaW5wdXQuXG5cdHRyeSB7XG5cdFx0eG1sID0gKCBuZXcgd2luZG93LkRPTVBhcnNlcigpICkucGFyc2VGcm9tU3RyaW5nKCBkYXRhLCBcInRleHQveG1sXCIgKTtcblx0fSBjYXRjaCAoIGUgKSB7fVxuXG5cdHBhcnNlckVycm9yRWxlbSA9IHhtbCAmJiB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwicGFyc2VyZXJyb3JcIiApWyAwIF07XG5cdGlmICggIXhtbCB8fCBwYXJzZXJFcnJvckVsZW0gKSB7XG5cdFx0alF1ZXJ5LmVycm9yKCBcIkludmFsaWQgWE1MOiBcIiArIChcblx0XHRcdHBhcnNlckVycm9yRWxlbSA/XG5cdFx0XHRcdGpRdWVyeS5tYXAoIHBhcnNlckVycm9yRWxlbS5jaGlsZE5vZGVzLCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsLnRleHRDb250ZW50O1xuXHRcdFx0XHR9ICkuam9pbiggXCJcXG5cIiApIDpcblx0XHRcdFx0ZGF0YVxuXHRcdCkgKTtcblx0fVxuXHRyZXR1cm4geG1sO1xufTtcblxuXG52YXIgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sXG5cdHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24oIGUgKSB7XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0fTtcblxualF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmV2ZW50LCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7XG5cblx0XHR2YXIgaSwgY3VyLCB0bXAsIGJ1YmJsZVR5cGUsIG9udHlwZSwgaGFuZGxlLCBzcGVjaWFsLCBsYXN0RWxlbWVudCxcblx0XHRcdGV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLFxuXHRcdFx0dHlwZSA9IGhhc093bi5jYWxsKCBldmVudCwgXCJ0eXBlXCIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCxcblx0XHRcdG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwibmFtZXNwYWNlXCIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxpdCggXCIuXCIgKSA6IFtdO1xuXG5cdFx0Y3VyID0gbGFzdEVsZW1lbnQgPSB0bXAgPSBlbGVtID0gZWxlbSB8fCBkb2N1bWVudDtcblxuXHRcdC8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gZm9jdXMvYmx1ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmlnaHQgbm93XG5cdFx0aWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZS5pbmRleE9mKCBcIi5cIiApID4gLTEgKSB7XG5cblx0XHRcdC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKClcblx0XHRcdG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCBcIi5cIiApO1xuXHRcdFx0dHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTtcblx0XHRcdG5hbWVzcGFjZXMuc29ydCgpO1xuXHRcdH1cblx0XHRvbnR5cGUgPSB0eXBlLmluZGV4T2YoIFwiOlwiICkgPCAwICYmIFwib25cIiArIHR5cGU7XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmdcblx0XHRldmVudCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdGV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIHR5cGVvZiBldmVudCA9PT0gXCJvYmplY3RcIiAmJiBldmVudCApO1xuXG5cdFx0Ly8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKVxuXHRcdGV2ZW50LmlzVHJpZ2dlciA9IG9ubHlIYW5kbGVycyA/IDIgOiAzO1xuXHRcdGV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKTtcblx0XHRldmVudC5ybmFtZXNwYWNlID0gZXZlbnQubmFtZXNwYWNlID9cblx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApIDpcblx0XHRcdG51bGw7XG5cblx0XHQvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWRcblx0XHRldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7XG5cdFx0aWYgKCAhZXZlbnQudGFyZ2V0ICkge1xuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZWxlbTtcblx0XHR9XG5cblx0XHQvLyBDbG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5kbGVyIGFyZyBsaXN0XG5cdFx0ZGF0YSA9IGRhdGEgPT0gbnVsbCA/XG5cdFx0XHRbIGV2ZW50IF0gOlxuXHRcdFx0alF1ZXJ5Lm1ha2VBcnJheSggZGF0YSwgWyBldmVudCBdICk7XG5cblx0XHQvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzXG5cdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmIHNwZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGV2ZW50IHByb3BhZ2F0aW9uIHBhdGggaW4gYWR2YW5jZSwgcGVyIFczQyBldmVudHMgc3BlYyAodHJhYy05OTUxKVxuXHRcdC8vIEJ1YmJsZSB1cCB0byBkb2N1bWVudCwgdGhlbiB0byB3aW5kb3c7IHdhdGNoIGZvciBhIGdsb2JhbCBvd25lckRvY3VtZW50IHZhciAodHJhYy05NzI0KVxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XG5cdFx0XHRpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkge1xuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xuXHRcdFx0XHR0bXAgPSBjdXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxuXHRcdFx0aWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGxhc3RFbGVtZW50ID0gY3VyO1xuXHRcdFx0ZXZlbnQudHlwZSA9IGkgPiAxID9cblx0XHRcdFx0YnViYmxlVHlwZSA6XG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcblxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9ICggZGF0YVByaXYuZ2V0KCBjdXIsIFwiZXZlbnRzXCIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsICkgKVsgZXZlbnQudHlwZSBdICYmXG5cdFx0XHRcdGRhdGFQcml2LmdldCggY3VyLCBcImhhbmRsZVwiICk7XG5cdFx0XHRpZiAoIGhhbmRsZSApIHtcblx0XHRcdFx0aGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTmF0aXZlIGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9IG9udHlwZSAmJiBjdXJbIG9udHlwZSBdO1xuXHRcdFx0aWYgKCBoYW5kbGUgJiYgaGFuZGxlLmFwcGx5ICYmIGFjY2VwdERhdGEoIGN1ciApICkge1xuXHRcdFx0XHRldmVudC5yZXN1bHQgPSBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRldmVudC50eXBlID0gdHlwZTtcblxuXHRcdC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3dcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkge1xuXG5cdFx0XHRpZiAoICggIXNwZWNpYWwuX2RlZmF1bHQgfHxcblx0XHRcdFx0c3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBvcCgpLCBkYXRhICkgPT09IGZhbHNlICkgJiZcblx0XHRcdFx0YWNjZXB0RGF0YSggZWxlbSApICkge1xuXG5cdFx0XHRcdC8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZXZlbnQuXG5cdFx0XHRcdC8vIERvbid0IGRvIGRlZmF1bHQgYWN0aW9ucyBvbiB3aW5kb3csIHRoYXQncyB3aGVyZSBnbG9iYWwgdmFyaWFibGVzIGJlICh0cmFjLTYxNzApXG5cdFx0XHRcdGlmICggb250eXBlICYmIGlzRnVuY3Rpb24oIGVsZW1bIHR5cGUgXSApICYmICFpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3QgcmUtdHJpZ2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRzIEZPTygpIG1ldGhvZFxuXHRcdFx0XHRcdHRtcCA9IGVsZW1bIG9udHlwZSBdO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IG51bGw7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJldmVudCByZS10cmlnZ2VyaW5nIG9mIHRoZSBzYW1lIGV2ZW50LCBzaW5jZSB3ZSBhbHJlYWR5IGJ1YmJsZWQgaXQgYWJvdmVcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdHlwZTtcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbVsgdHlwZSBdKCk7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gdG1wO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0Ly8gUGlnZ3liYWNrIG9uIGEgZG9ub3IgZXZlbnQgdG8gc2ltdWxhdGUgYSBkaWZmZXJlbnQgb25lXG5cdC8vIFVzZWQgb25seSBmb3IgYGZvY3VzKGluIHwgb3V0KWAgZXZlbnRzXG5cdHNpbXVsYXRlOiBmdW5jdGlvbiggdHlwZSwgZWxlbSwgZXZlbnQgKSB7XG5cdFx0dmFyIGUgPSBqUXVlcnkuZXh0ZW5kKFxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCgpLFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdGlzU2ltdWxhdGVkOiB0cnVlXG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBlLCBudWxsLCBlbGVtICk7XG5cdH1cblxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpcyApO1xuXHRcdH0gKTtcblx0fSxcblx0dHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBlbGVtID0gdGhpc1sgMCBdO1xuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgZWxlbSwgdHJ1ZSApO1xuXHRcdH1cblx0fVxufSApO1xuXG5cbnZhclxuXHRyYnJhY2tldCA9IC9cXFtcXF0kLyxcblx0ckNSTEYgPSAvXFxyP1xcbi9nLFxuXHRyc3VibWl0dGVyVHlwZXMgPSAvXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksXG5cdHJzdWJtaXR0YWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtcblxuZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkge1xuXHR2YXIgbmFtZTtcblxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIG9iaiApICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIGFycmF5IGl0ZW0uXG5cdFx0alF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7XG5cdFx0XHRpZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkge1xuXG5cdFx0XHRcdC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci5cblx0XHRcdFx0YWRkKCBwcmVmaXgsIHYgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBJdGVtIGlzIG5vbi1zY2FsYXIgKGFycmF5IG9yIG9iamVjdCksIGVuY29kZSBpdHMgbnVtZXJpYyBpbmRleC5cblx0XHRcdFx0YnVpbGRQYXJhbXMoXG5cdFx0XHRcdFx0cHJlZml4ICsgXCJbXCIgKyAoIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT0gbnVsbCA/IGkgOiBcIlwiICkgKyBcIl1cIixcblx0XHRcdFx0XHR2LFxuXHRcdFx0XHRcdHRyYWRpdGlvbmFsLFxuXHRcdFx0XHRcdGFkZFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHR9IGVsc2UgaWYgKCAhdHJhZGl0aW9uYWwgJiYgdG9UeXBlKCBvYmogKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBvYmplY3QgaXRlbS5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXggKyBcIltcIiArIG5hbWUgKyBcIl1cIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS5cblx0XHRhZGQoIHByZWZpeCwgb2JqICk7XG5cdH1cbn1cblxuLy8gU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2Zcbi8vIGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5IHN0cmluZ1xualF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24oIGEsIHRyYWRpdGlvbmFsICkge1xuXHR2YXIgcHJlZml4LFxuXHRcdHMgPSBbXSxcblx0XHRhZGQgPSBmdW5jdGlvbigga2V5LCB2YWx1ZU9yRnVuY3Rpb24gKSB7XG5cblx0XHRcdC8vIElmIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCBhbmQgdXNlIGl0cyByZXR1cm4gdmFsdWVcblx0XHRcdHZhciB2YWx1ZSA9IGlzRnVuY3Rpb24oIHZhbHVlT3JGdW5jdGlvbiApID9cblx0XHRcdFx0dmFsdWVPckZ1bmN0aW9uKCkgOlxuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb247XG5cblx0XHRcdHNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgXCI9XCIgK1xuXHRcdFx0XHRlbmNvZGVVUklDb21wb25lbnQoIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKTtcblx0XHR9O1xuXG5cdGlmICggYSA9PSBudWxsICkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0Ly8gSWYgYW4gYXJyYXkgd2FzIHBhc3NlZCBpbiwgYXNzdW1lIHRoYXQgaXQgaXMgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cy5cblx0aWYgKCBBcnJheS5pc0FycmF5KCBhICkgfHwgKCBhLmpxdWVyeSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGEgKSApICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHRoZSBmb3JtIGVsZW1lbnRzXG5cdFx0alF1ZXJ5LmVhY2goIGEsIGZ1bmN0aW9uKCkge1xuXHRcdFx0YWRkKCB0aGlzLm5hbWUsIHRoaXMudmFsdWUgKTtcblx0XHR9ICk7XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIElmIHRyYWRpdGlvbmFsLCBlbmNvZGUgdGhlIFwib2xkXCIgd2F5ICh0aGUgd2F5IDEuMy4yIG9yIG9sZGVyXG5cdFx0Ly8gZGlkIGl0KSwgb3RoZXJ3aXNlIGVuY29kZSBwYXJhbXMgcmVjdXJzaXZlbHkuXG5cdFx0Zm9yICggcHJlZml4IGluIGEgKSB7XG5cdFx0XHRidWlsZFBhcmFtcyggcHJlZml4LCBhWyBwcmVmaXggXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6YXRpb25cblx0cmV0dXJuIHMuam9pbiggXCImXCIgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2VyaWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4galF1ZXJ5LnBhcmFtKCB0aGlzLnNlcmlhbGl6ZUFycmF5KCkgKTtcblx0fSxcblx0c2VyaWFsaXplQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIENhbiBhZGQgcHJvcEhvb2sgZm9yIFwiZWxlbWVudHNcIiB0byBmaWx0ZXIgb3IgYWRkIGZvcm0gZWxlbWVudHNcblx0XHRcdHZhciBlbGVtZW50cyA9IGpRdWVyeS5wcm9wKCB0aGlzLCBcImVsZW1lbnRzXCIgKTtcblx0XHRcdHJldHVybiBlbGVtZW50cyA/IGpRdWVyeS5tYWtlQXJyYXkoIGVsZW1lbnRzICkgOiB0aGlzO1xuXHRcdH0gKS5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cblx0XHRcdC8vIFVzZSAuaXMoIFwiOmRpc2FibGVkXCIgKSBzbyB0aGF0IGZpZWxkc2V0W2Rpc2FibGVkXSB3b3Jrc1xuXHRcdFx0cmV0dXJuIHRoaXMubmFtZSAmJiAhalF1ZXJ5KCB0aGlzICkuaXMoIFwiOmRpc2FibGVkXCIgKSAmJlxuXHRcdFx0XHRyc3VibWl0dGFibGUudGVzdCggdGhpcy5ub2RlTmFtZSApICYmICFyc3VibWl0dGVyVHlwZXMudGVzdCggdHlwZSApICYmXG5cdFx0XHRcdCggdGhpcy5jaGVja2VkIHx8ICFyY2hlY2thYmxlVHlwZS50ZXN0KCB0eXBlICkgKTtcblx0XHR9ICkubWFwKCBmdW5jdGlvbiggX2ksIGVsZW0gKSB7XG5cdFx0XHR2YXIgdmFsID0galF1ZXJ5KCB0aGlzICkudmFsKCk7XG5cblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbCApICkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsICkge1xuXHRcdFx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHR9ICkuZ2V0KCk7XG5cdH1cbn0gKTtcblxuXG52YXJcblx0cjIwID0gLyUyMC9nLFxuXHRyaGFzaCA9IC8jLiokLyxcblx0cmFudGlDYWNoZSA9IC8oWz8mXSlfPVteJl0qLyxcblx0cmhlYWRlcnMgPSAvXiguKj8pOlsgXFx0XSooW15cXHJcXG5dKikkL21nLFxuXG5cdC8vIHRyYWMtNzY1MywgdHJhYy04MTI1LCB0cmFjLTgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvblxuXHRybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLFxuXHRybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLyxcblx0cnByb3RvY29sID0gL15cXC9cXC8vLFxuXG5cdC8qIFByZWZpbHRlcnNcblx0ICogMSkgVGhleSBhcmUgdXNlZnVsIHRvIGludHJvZHVjZSBjdXN0b20gZGF0YVR5cGVzIChzZWUgYWpheC9qc29ucC5qcyBmb3IgYW4gZXhhbXBsZSlcblx0ICogMikgVGhlc2UgYXJlIGNhbGxlZDpcblx0ICogICAgLSBCRUZPUkUgYXNraW5nIGZvciBhIHRyYW5zcG9ydFxuXHQgKiAgICAtIEFGVEVSIHBhcmFtIHNlcmlhbGl6YXRpb24gKHMuZGF0YSBpcyBhIHN0cmluZyBpZiBzLnByb2Nlc3NEYXRhIGlzIHRydWUpXG5cdCAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogNCkgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiA1KSBleGVjdXRpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBjb250aW51ZSBkb3duIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0cHJlZmlsdGVycyA9IHt9LFxuXG5cdC8qIFRyYW5zcG9ydHMgYmluZGluZ3Ncblx0ICogMSkga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDMpIHNlbGVjdGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGdvIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0dHJhbnNwb3J0cyA9IHt9LFxuXG5cdC8vIEF2b2lkIGNvbW1lbnQtcHJvbG9nIGNoYXIgc2VxdWVuY2UgKHRyYWMtMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb25cblx0YWxsVHlwZXMgPSBcIiovXCIuY29uY2F0KCBcIipcIiApLFxuXG5cdC8vIEFuY2hvciB0YWcgZm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IG9yaWdpblxuXHRvcmlnaW5BbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXG5vcmlnaW5BbmNob3IuaHJlZiA9IGxvY2F0aW9uLmhyZWY7XG5cbi8vIEJhc2UgXCJjb25zdHJ1Y3RvclwiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnRcbmZ1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkge1xuXG5cdC8vIGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gXCIqXCJcblx0cmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uO1xuXHRcdFx0ZGF0YVR5cGVFeHByZXNzaW9uID0gXCIqXCI7XG5cdFx0fVxuXG5cdFx0dmFyIGRhdGFUeXBlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBmdW5jICkgKSB7XG5cblx0XHRcdC8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb25cblx0XHRcdHdoaWxlICggKCBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHQvLyBQcmVwZW5kIGlmIHJlcXVlc3RlZFxuXHRcdFx0XHRpZiAoIGRhdGFUeXBlWyAwIF0gPT09IFwiK1wiICkge1xuXHRcdFx0XHRcdGRhdGFUeXBlID0gZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCBcIipcIjtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnVuc2hpZnQoIGZ1bmMgKTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYXBwZW5kXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS5wdXNoKCBmdW5jICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0c1xuZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApIHtcblxuXHR2YXIgaW5zcGVjdGVkID0ge30sXG5cdFx0c2Vla2luZ1RyYW5zcG9ydCA9ICggc3RydWN0dXJlID09PSB0cmFuc3BvcnRzICk7XG5cblx0ZnVuY3Rpb24gaW5zcGVjdCggZGF0YVR5cGUgKSB7XG5cdFx0dmFyIHNlbGVjdGVkO1xuXHRcdGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7XG5cdFx0alF1ZXJ5LmVhY2goIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSwgZnVuY3Rpb24oIF8sIHByZWZpbHRlck9yRmFjdG9yeSApIHtcblx0XHRcdHZhciBkYXRhVHlwZU9yVHJhbnNwb3J0ID0gcHJlZmlsdGVyT3JGYWN0b3J5KCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICk7XG5cdFx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZU9yVHJhbnNwb3J0ID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzZWVraW5nVHJhbnNwb3J0ICYmICFpbnNwZWN0ZWRbIGRhdGFUeXBlT3JUcmFuc3BvcnQgXSApIHtcblxuXHRcdFx0XHRvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdGluc3BlY3QoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmICggc2Vla2luZ1RyYW5zcG9ydCApIHtcblx0XHRcdFx0cmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRyZXR1cm4gc2VsZWN0ZWQ7XG5cdH1cblxuXHRyZXR1cm4gaW5zcGVjdCggb3B0aW9ucy5kYXRhVHlwZXNbIDAgXSApIHx8ICFpbnNwZWN0ZWRbIFwiKlwiIF0gJiYgaW5zcGVjdCggXCIqXCIgKTtcbn1cblxuLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zXG4vLyB0aGF0IHRha2VzIFwiZmxhdFwiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKVxuLy8gRml4ZXMgdHJhYy05ODg3XG5mdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHtcblx0dmFyIGtleSwgZGVlcCxcblx0XHRmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307XG5cblx0Zm9yICgga2V5IGluIHNyYyApIHtcblx0XHRpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdCggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8ICggZGVlcCA9IHt9ICkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07XG5cdFx0fVxuXHR9XG5cdGlmICggZGVlcCApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTtcblx0fVxuXG5cdHJldHVybiB0YXJnZXQ7XG59XG5cbi8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDpcbiAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpXG4gKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHtcblxuXHR2YXIgY3QsIHR5cGUsIGZpbmFsRGF0YVR5cGUsIGZpcnN0RGF0YVR5cGUsXG5cdFx0Y29udGVudHMgPSBzLmNvbnRlbnRzLFxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzO1xuXG5cdC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzXG5cdHdoaWxlICggZGF0YVR5cGVzWyAwIF0gPT09IFwiKlwiICkge1xuXHRcdGRhdGFUeXBlcy5zaGlmdCgpO1xuXHRcdGlmICggY3QgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJDb250ZW50LVR5cGVcIiApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZVxuXHRpZiAoIGN0ICkge1xuXHRcdGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7XG5cdFx0XHRpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkge1xuXHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGVcblx0aWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7XG5cdFx0ZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdO1xuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFUeXBlc1xuXHRcdGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkge1xuXHRcdFx0aWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgXCIgXCIgKyBkYXRhVHlwZXNbIDAgXSBdICkge1xuXHRcdFx0XHRmaW5hbERhdGFUeXBlID0gdHlwZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICFmaXJzdERhdGFUeXBlICkge1xuXHRcdFx0XHRmaXJzdERhdGFUeXBlID0gdHlwZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmVcblx0XHRmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBlO1xuXHR9XG5cblx0Ly8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZVxuXHQvLyBXZSBhZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZFxuXHQvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG5cdGlmICggZmluYWxEYXRhVHlwZSApIHtcblx0XHRpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkge1xuXHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdO1xuXHR9XG59XG5cbi8qIENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVzcG9uc2VcbiAqIEFsc28gc2V0cyB0aGUgcmVzcG9uc2VYWFggZmllbGRzIG9uIHRoZSBqcVhIUiBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKSB7XG5cdHZhciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLCBwcmV2LFxuXHRcdGNvbnZlcnRlcnMgPSB7fSxcblxuXHRcdC8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgZGF0YVR5cGVzIGluIGNhc2Ugd2UgbmVlZCB0byBtb2RpZnkgaXQgZm9yIGNvbnZlcnNpb25cblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcy5zbGljZSgpO1xuXG5cdC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxvd2VyY2FzZWQga2V5c1xuXHRpZiAoIGRhdGFUeXBlc1sgMSBdICkge1xuXHRcdGZvciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkge1xuXHRcdFx0Y29udmVydGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTtcblx0XHR9XG5cdH1cblxuXHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0Ly8gQ29udmVydCB0byBlYWNoIHNlcXVlbnRpYWwgZGF0YVR5cGVcblx0d2hpbGUgKCBjdXJyZW50ICkge1xuXG5cdFx0aWYgKCBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gKSB7XG5cdFx0XHRqcVhIUlsgcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdIF0gPSByZXNwb25zZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZFxuXHRcdGlmICggIXByZXYgJiYgaXNTdWNjZXNzICYmIHMuZGF0YUZpbHRlciApIHtcblx0XHRcdHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApO1xuXHRcdH1cblxuXHRcdHByZXYgPSBjdXJyZW50O1xuXHRcdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHRcdGlmICggY3VycmVudCApIHtcblxuXHRcdFx0Ly8gVGhlcmUncyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVudCBkYXRhVHlwZSBpcyBub24tYXV0b1xuXHRcdFx0aWYgKCBjdXJyZW50ID09PSBcIipcIiApIHtcblxuXHRcdFx0XHRjdXJyZW50ID0gcHJldjtcblxuXHRcdFx0Ly8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudFxuXHRcdFx0fSBlbHNlIGlmICggcHJldiAhPT0gXCIqXCIgJiYgcHJldiAhPT0gY3VycmVudCApIHtcblxuXHRcdFx0XHQvLyBTZWVrIGEgZGlyZWN0IGNvbnZlcnRlclxuXHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgY3VycmVudCBdIHx8IGNvbnZlcnRlcnNbIFwiKiBcIiArIGN1cnJlbnQgXTtcblxuXHRcdFx0XHQvLyBJZiBub25lIGZvdW5kLCBzZWVrIGEgcGFpclxuXHRcdFx0XHRpZiAoICFjb252ICkge1xuXHRcdFx0XHRcdGZvciAoIGNvbnYyIGluIGNvbnZlcnRlcnMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIElmIGNvbnYyIG91dHB1dHMgY3VycmVudFxuXHRcdFx0XHRcdFx0dG1wID0gY29udjIuc3BsaXQoIFwiIFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIHRtcFsgMSBdID09PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIElmIHByZXYgY2FuIGJlIGNvbnZlcnRlZCB0byBhY2NlcHRlZCBpbnB1dFxuXHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgdG1wWyAwIF0gXSB8fFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlcnNbIFwiKiBcIiArIHRtcFsgMCBdIF07XG5cdFx0XHRcdFx0XHRcdGlmICggY29udiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgPT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgY29udjIgXTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE90aGVyd2lzZSwgaW5zZXJ0IHRoZSBpbnRlcm1lZGlhdGUgZGF0YVR5cGVcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudCA9IHRtcFsgMCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHRtcFsgMSBdICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpXG5cdFx0XHRcdGlmICggY29udiAhPT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdC8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW1cblx0XHRcdFx0XHRpZiAoIGNvbnYgJiYgcy50aHJvd3MgKSB7XG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlOiBcInBhcnNlcmVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGNvbnYgPyBlIDogXCJObyBjb252ZXJzaW9uIGZyb20gXCIgKyBwcmV2ICsgXCIgdG8gXCIgKyBjdXJyZW50XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgc3RhdGU6IFwic3VjY2Vzc1wiLCBkYXRhOiByZXNwb25zZSB9O1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzXG5cdGFjdGl2ZTogMCxcblxuXHQvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0XG5cdGxhc3RNb2RpZmllZDoge30sXG5cdGV0YWc6IHt9LFxuXG5cdGFqYXhTZXR0aW5nczoge1xuXHRcdHVybDogbG9jYXRpb24uaHJlZixcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGlzTG9jYWw6IHJsb2NhbFByb3RvY29sLnRlc3QoIGxvY2F0aW9uLnByb3RvY29sICksXG5cdFx0Z2xvYmFsOiB0cnVlLFxuXHRcdHByb2Nlc3NEYXRhOiB0cnVlLFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLFxuXG5cdFx0Lypcblx0XHR0aW1lb3V0OiAwLFxuXHRcdGRhdGE6IG51bGwsXG5cdFx0ZGF0YVR5cGU6IG51bGwsXG5cdFx0dXNlcm5hbWU6IG51bGwsXG5cdFx0cGFzc3dvcmQ6IG51bGwsXG5cdFx0Y2FjaGU6IG51bGwsXG5cdFx0dGhyb3dzOiBmYWxzZSxcblx0XHR0cmFkaXRpb25hbDogZmFsc2UsXG5cdFx0aGVhZGVyczoge30sXG5cdFx0Ki9cblxuXHRcdGFjY2VwdHM6IHtcblx0XHRcdFwiKlwiOiBhbGxUeXBlcyxcblx0XHRcdHRleHQ6IFwidGV4dC9wbGFpblwiLFxuXHRcdFx0aHRtbDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdHhtbDogXCJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sXCIsXG5cdFx0XHRqc29uOiBcImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdFwiXG5cdFx0fSxcblxuXHRcdGNvbnRlbnRzOiB7XG5cdFx0XHR4bWw6IC9cXGJ4bWxcXGIvLFxuXHRcdFx0aHRtbDogL1xcYmh0bWwvLFxuXHRcdFx0anNvbjogL1xcYmpzb25cXGIvXG5cdFx0fSxcblxuXHRcdHJlc3BvbnNlRmllbGRzOiB7XG5cdFx0XHR4bWw6IFwicmVzcG9uc2VYTUxcIixcblx0XHRcdHRleHQ6IFwicmVzcG9uc2VUZXh0XCIsXG5cdFx0XHRqc29uOiBcInJlc3BvbnNlSlNPTlwiXG5cdFx0fSxcblxuXHRcdC8vIERhdGEgY29udmVydGVyc1xuXHRcdC8vIEtleXMgc2VwYXJhdGUgc291cmNlIChvciBjYXRjaGFsbCBcIipcIikgYW5kIGRlc3RpbmF0aW9uIHR5cGVzIHdpdGggYSBzaW5nbGUgc3BhY2Vcblx0XHRjb252ZXJ0ZXJzOiB7XG5cblx0XHRcdC8vIENvbnZlcnQgYW55dGhpbmcgdG8gdGV4dFxuXHRcdFx0XCIqIHRleHRcIjogU3RyaW5nLFxuXG5cdFx0XHQvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbilcblx0XHRcdFwidGV4dCBodG1sXCI6IHRydWUsXG5cblx0XHRcdC8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4cHJlc3Npb25cblx0XHRcdFwidGV4dCBqc29uXCI6IEpTT04ucGFyc2UsXG5cblx0XHRcdC8vIFBhcnNlIHRleHQgYXMgeG1sXG5cdFx0XHRcInRleHQgeG1sXCI6IGpRdWVyeS5wYXJzZVhNTFxuXHRcdH0sXG5cblx0XHQvLyBGb3Igb3B0aW9ucyB0aGF0IHNob3VsZG4ndCBiZSBkZWVwIGV4dGVuZGVkOlxuXHRcdC8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWZcblx0XHQvLyBhbmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZVxuXHRcdC8vIGRlZXAgZXh0ZW5kZWQgKHNlZSBhamF4RXh0ZW5kKVxuXHRcdGZsYXRPcHRpb25zOiB7XG5cdFx0XHR1cmw6IHRydWUsXG5cdFx0XHRjb250ZXh0OiB0cnVlXG5cdFx0fVxuXHR9LFxuXG5cdC8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGludG8gdGFyZ2V0XG5cdC8vIHdpdGggYm90aCBhamF4U2V0dGluZ3MgYW5kIHNldHRpbmdzIGZpZWxkcy5cblx0Ly8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy5cblx0YWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHtcblx0XHRyZXR1cm4gc2V0dGluZ3MgP1xuXG5cdFx0XHQvLyBCdWlsZGluZyBhIHNldHRpbmdzIG9iamVjdFxuXHRcdFx0YWpheEV4dGVuZCggYWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICksIHNldHRpbmdzICkgOlxuXG5cdFx0XHQvLyBFeHRlbmRpbmcgYWpheFNldHRpbmdzXG5cdFx0XHRhamF4RXh0ZW5kKCBqUXVlcnkuYWpheFNldHRpbmdzLCB0YXJnZXQgKTtcblx0fSxcblxuXHRhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSxcblx0YWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksXG5cblx0Ly8gTWFpbiBtZXRob2Rcblx0YWpheDogZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHtcblxuXHRcdC8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNpbXVsYXRlIHByZS0xLjUgc2lnbmF0dXJlXG5cdFx0aWYgKCB0eXBlb2YgdXJsID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0b3B0aW9ucyA9IHVybDtcblx0XHRcdHVybCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBGb3JjZSBvcHRpb25zIHRvIGJlIGFuIG9iamVjdFxuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdFx0dmFyIHRyYW5zcG9ydCxcblxuXHRcdFx0Ly8gVVJMIHdpdGhvdXQgYW50aS1jYWNoZSBwYXJhbVxuXHRcdFx0Y2FjaGVVUkwsXG5cblx0XHRcdC8vIFJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyxcblx0XHRcdHJlc3BvbnNlSGVhZGVycyxcblxuXHRcdFx0Ly8gdGltZW91dCBoYW5kbGVcblx0XHRcdHRpbWVvdXRUaW1lcixcblxuXHRcdFx0Ly8gVXJsIGNsZWFudXAgdmFyXG5cdFx0XHR1cmxBbmNob3IsXG5cblx0XHRcdC8vIFJlcXVlc3Qgc3RhdGUgKGJlY29tZXMgZmFsc2UgdXBvbiBzZW5kIGFuZCB0cnVlIHVwb24gY29tcGxldGlvbilcblx0XHRcdGNvbXBsZXRlZCxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkXG5cdFx0XHRmaXJlR2xvYmFscyxcblxuXHRcdFx0Ly8gTG9vcCB2YXJpYWJsZVxuXHRcdFx0aSxcblxuXHRcdFx0Ly8gdW5jYWNoZWQgcGFydCBvZiB0aGUgdXJsXG5cdFx0XHR1bmNhY2hlZCxcblxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdFxuXHRcdFx0cyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksXG5cblx0XHRcdC8vIENhbGxiYWNrcyBjb250ZXh0XG5cdFx0XHRjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcyxcblxuXHRcdFx0Ly8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cyBpcyBjYWxsYmFja0NvbnRleHQgaWYgaXQgaXMgYSBET00gbm9kZSBvciBqUXVlcnkgY29sbGVjdGlvblxuXHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0ID0gcy5jb250ZXh0ICYmXG5cdFx0XHRcdCggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dC5qcXVlcnkgKSA/XG5cdFx0XHRcdGpRdWVyeSggY2FsbGJhY2tDb250ZXh0ICkgOlxuXHRcdFx0XHRqUXVlcnkuZXZlbnQsXG5cblx0XHRcdC8vIERlZmVycmVkc1xuXHRcdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQgPSBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30sXG5cblx0XHRcdC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpXG5cdFx0XHRyZXF1ZXN0SGVhZGVycyA9IHt9LFxuXHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LFxuXG5cdFx0XHQvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2Vcblx0XHRcdHN0ckFib3J0ID0gXCJjYW5jZWxlZFwiLFxuXG5cdFx0XHQvLyBGYWtlIHhoclxuXHRcdFx0anFYSFIgPSB7XG5cdFx0XHRcdHJlYWR5U3RhdGU6IDAsXG5cblx0XHRcdFx0Ly8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZFxuXHRcdFx0XHRnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oIGtleSApIHtcblx0XHRcdFx0XHR2YXIgbWF0Y2g7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICFyZXNwb25zZUhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVycyA9IHt9O1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2ggPSByaGVhZGVycy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJpbmcgKSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSA9XG5cdFx0XHRcdFx0XHRcdFx0XHQoIHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSB8fCBbXSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5jb25jYXQoIG1hdGNoWyAyIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoID09IG51bGwgPyBudWxsIDogbWF0Y2guam9pbiggXCIsIFwiICk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gUmF3IHN0cmluZ1xuXHRcdFx0XHRnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBjb21wbGV0ZWQgPyByZXNwb25zZUhlYWRlcnNTdHJpbmcgOiBudWxsO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhY2hlcyB0aGUgaGVhZGVyXG5cdFx0XHRcdHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0bmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdID1cblx0XHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHwgbmFtZTtcblx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFkZXJcblx0XHRcdFx0b3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdHMubWltZVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0XHRzdGF0dXNDb2RlOiBmdW5jdGlvbiggbWFwICkge1xuXHRcdFx0XHRcdHZhciBjb2RlO1xuXHRcdFx0XHRcdGlmICggbWFwICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSB0aGUgYXBwcm9wcmlhdGUgY2FsbGJhY2tzXG5cdFx0XHRcdFx0XHRcdGpxWEhSLmFsd2F5cyggbWFwWyBqcVhIUi5zdGF0dXMgXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBMYXp5LWFkZCB0aGUgbmV3IGNhbGxiYWNrcyBpbiBhIHdheSB0aGF0IHByZXNlcnZlcyBvbGQgb25lc1xuXHRcdFx0XHRcdFx0XHRmb3IgKCBjb2RlIGluIG1hcCApIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0dXNDb2RlWyBjb2RlIF0gPSBbIHN0YXR1c0NvZGVbIGNvZGUgXSwgbWFwWyBjb2RlIF0gXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYW5jZWwgdGhlIHJlcXVlc3Rcblx0XHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHZhciBmaW5hbFRleHQgPSBzdGF0dXNUZXh0IHx8IHN0ckFib3J0O1xuXHRcdFx0XHRcdGlmICggdHJhbnNwb3J0ICkge1xuXHRcdFx0XHRcdFx0dHJhbnNwb3J0LmFib3J0KCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZG9uZSggMCwgZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHQvLyBBdHRhY2ggZGVmZXJyZWRzXG5cdFx0ZGVmZXJyZWQucHJvbWlzZSgganFYSFIgKTtcblxuXHRcdC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKHByZWZpbHRlcnMgbWlnaHQgZXhwZWN0IGl0KVxuXHRcdC8vIEhhbmRsZSBmYWxzeSB1cmwgaW4gdGhlIHNldHRpbmdzIG9iamVjdCAodHJhYy0xMDA5MzogY29uc2lzdGVuY3kgd2l0aCBvbGQgc2lnbmF0dXJlKVxuXHRcdC8vIFdlIGFsc28gdXNlIHRoZSB1cmwgcGFyYW1ldGVyIGlmIGF2YWlsYWJsZVxuXHRcdHMudXJsID0gKCAoIHVybCB8fCBzLnVybCB8fCBsb2NhdGlvbi5ocmVmICkgKyBcIlwiIClcblx0XHRcdC5yZXBsYWNlKCBycHJvdG9jb2wsIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICk7XG5cblx0XHQvLyBBbGlhcyBtZXRob2Qgb3B0aW9uIHRvIHR5cGUgYXMgcGVyIHRpY2tldCB0cmFjLTEyMDA0XG5cdFx0cy50eXBlID0gb3B0aW9ucy5tZXRob2QgfHwgb3B0aW9ucy50eXBlIHx8IHMubWV0aG9kIHx8IHMudHlwZTtcblxuXHRcdC8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3Rcblx0XHRzLmRhdGFUeXBlcyA9ICggcy5kYXRhVHlwZSB8fCBcIipcIiApLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblxuXHRcdC8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMgaW4gb3JkZXIgd2hlbiB0aGUgb3JpZ2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgb3JpZ2luLlxuXHRcdGlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkge1xuXHRcdFx0dXJsQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdFx0Ly8gSUUgdGhyb3dzIGV4Y2VwdGlvbiBvbiBhY2Nlc3NpbmcgdGhlIGhyZWYgcHJvcGVydHkgaWYgdXJsIGlzIG1hbGZvcm1lZCxcblx0XHRcdC8vIGUuZy4gaHR0cDovL2V4YW1wbGUuY29tOjgweC9cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gcy51cmw7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEgb25seVxuXHRcdFx0XHQvLyBBbmNob3IncyBob3N0IHByb3BlcnR5IGlzbid0IGNvcnJlY3RseSBzZXQgd2hlbiBzLnVybCBpcyByZWxhdGl2ZVxuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHVybEFuY2hvci5ocmVmO1xuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gb3JpZ2luQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgb3JpZ2luQW5jaG9yLmhvc3QgIT09XG5cdFx0XHRcdFx0dXJsQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgdXJsQW5jaG9yLmhvc3Q7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhbiBlcnJvciBwYXJzaW5nIHRoZSBVUkwsIGFzc3VtZSBpdCBpcyBjcm9zc0RvbWFpbixcblx0XHRcdFx0Ly8gaXQgY2FuIGJlIHJlamVjdGVkIGJ5IHRoZSB0cmFuc3BvcnQgaWYgaXQgaXMgaW52YWxpZFxuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJpbmdcblx0XHRpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHByZWZpbHRlcnNcblx0XHRpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGEgcHJlZmlsdGVyLCBzdG9wIHRoZXJlXG5cdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0fVxuXG5cdFx0Ly8gV2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNrZWQgdG9cblx0XHQvLyBEb24ndCBmaXJlIGV2ZW50cyBpZiBqUXVlcnkuZXZlbnQgaXMgdW5kZWZpbmVkIGluIGFuIEFNRC11c2FnZSBzY2VuYXJpbyAodHJhYy0xNTExOClcblx0XHRmaXJlR2xvYmFscyA9IGpRdWVyeS5ldmVudCAmJiBzLmdsb2JhbDtcblxuXHRcdC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHNcblx0XHRpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdGFydFwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gVXBwZXJjYXNlIHRoZSB0eXBlXG5cdFx0cy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNlKCk7XG5cblx0XHQvLyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudFxuXHRcdHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSApO1xuXG5cdFx0Ly8gU2F2ZSB0aGUgVVJMIGluIGNhc2Ugd2UncmUgdG95aW5nIHdpdGggdGhlIElmLU1vZGlmaWVkLVNpbmNlXG5cdFx0Ly8gYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyIGxhdGVyIG9uXG5cdFx0Ly8gUmVtb3ZlIGhhc2ggdG8gc2ltcGxpZnkgdXJsIG1hbmlwdWxhdGlvblxuXHRcdGNhY2hlVVJMID0gcy51cmwucmVwbGFjZSggcmhhc2gsIFwiXCIgKTtcblxuXHRcdC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250ZW50XG5cdFx0aWYgKCAhcy5oYXNDb250ZW50ICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgaGFzaCBzbyB3ZSBjYW4gcHV0IGl0IGJhY2tcblx0XHRcdHVuY2FjaGVkID0gcy51cmwuc2xpY2UoIGNhY2hlVVJMLmxlbmd0aCApO1xuXG5cdFx0XHQvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCwgYXBwZW5kIGRhdGEgdG8gdXJsXG5cdFx0XHRpZiAoIHMuZGF0YSAmJiAoIHMucHJvY2Vzc0RhdGEgfHwgdHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiApICkge1xuXHRcdFx0XHRjYWNoZVVSTCArPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgcy5kYXRhO1xuXG5cdFx0XHRcdC8vIHRyYWMtOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5XG5cdFx0XHRcdGRlbGV0ZSBzLmRhdGE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBvciB1cGRhdGUgYW50aS1jYWNoZSBwYXJhbSBpZiBuZWVkZWRcblx0XHRcdGlmICggcy5jYWNoZSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdGNhY2hlVVJMID0gY2FjaGVVUkwucmVwbGFjZSggcmFudGlDYWNoZSwgXCIkMVwiICk7XG5cdFx0XHRcdHVuY2FjaGVkID0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIFwiXz1cIiArICggbm9uY2UuZ3VpZCsrICkgK1xuXHRcdFx0XHRcdHVuY2FjaGVkO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQdXQgaGFzaCBhbmQgYW50aS1jYWNoZSBvbiB0aGUgVVJMIHRoYXQgd2lsbCBiZSByZXF1ZXN0ZWQgKGdoLTE3MzIpXG5cdFx0XHRzLnVybCA9IGNhY2hlVVJMICsgdW5jYWNoZWQ7XG5cblx0XHQvLyBDaGFuZ2UgJyUyMCcgdG8gJysnIGlmIHRoaXMgaXMgZW5jb2RlZCBmb3JtIGJvZHkgY29udGVudCAoZ2gtMjY1OClcblx0XHR9IGVsc2UgaWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJlxuXHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKS5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgKSB7XG5cdFx0XHRzLmRhdGEgPSBzLmRhdGEucmVwbGFjZSggcjIwLCBcIitcIiApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTW9kaWZpZWQtU2luY2VcIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Ob25lLU1hdGNoXCIsIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50XG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiLCBzLmNvbnRlbnRUeXBlICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZVxuXHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoXG5cdFx0XHRcIkFjY2VwdFwiLFxuXHRcdFx0cy5kYXRhVHlwZXNbIDAgXSAmJiBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSA/XG5cdFx0XHRcdHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdICtcblx0XHRcdFx0XHQoIHMuZGF0YVR5cGVzWyAwIF0gIT09IFwiKlwiID8gXCIsIFwiICsgYWxsVHlwZXMgKyBcIjsgcT0wLjAxXCIgOiBcIlwiICkgOlxuXHRcdFx0XHRzLmFjY2VwdHNbIFwiKlwiIF1cblx0XHQpO1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGhlYWRlcnMgb3B0aW9uXG5cdFx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApO1xuXHRcdH1cblxuXHRcdC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJvcnRcblx0XHRpZiAoIHMuYmVmb3JlU2VuZCAmJlxuXHRcdFx0KCBzLmJlZm9yZVNlbmQuY2FsbCggY2FsbGJhY2tDb250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxzZSB8fCBjb21wbGV0ZWQgKSApIHtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgcmV0dXJuXG5cdFx0XHRyZXR1cm4ganFYSFIuYWJvcnQoKTtcblx0XHR9XG5cblx0XHQvLyBBYm9ydGluZyBpcyBubyBsb25nZXIgYSBjYW5jZWxsYXRpb25cblx0XHRzdHJBYm9ydCA9IFwiYWJvcnRcIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tzIG9uIGRlZmVycmVkc1xuXHRcdGNvbXBsZXRlRGVmZXJyZWQuYWRkKCBzLmNvbXBsZXRlICk7XG5cdFx0anFYSFIuZG9uZSggcy5zdWNjZXNzICk7XG5cdFx0anFYSFIuZmFpbCggcy5lcnJvciApO1xuXG5cdFx0Ly8gR2V0IHRyYW5zcG9ydFxuXHRcdHRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0XG5cdFx0aWYgKCAhdHJhbnNwb3J0ICkge1xuXHRcdFx0ZG9uZSggLTEsIFwiTm8gVHJhbnNwb3J0XCIgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IDE7XG5cblx0XHRcdC8vIFNlbmQgZ2xvYmFsIGV2ZW50XG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4U2VuZFwiLCBbIGpxWEhSLCBzIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYWpheFNlbmQsIHN0b3AgdGhlcmVcblx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRpbWVvdXRcblx0XHRcdGlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkge1xuXHRcdFx0XHR0aW1lb3V0VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0anFYSFIuYWJvcnQoIFwidGltZW91dFwiICk7XG5cdFx0XHRcdH0sIHMudGltZW91dCApO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb21wbGV0ZWQgPSBmYWxzZTtcblx0XHRcdFx0dHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25lICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBSZXRocm93IHBvc3QtY29tcGxldGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBQcm9wYWdhdGUgb3RoZXJzIGFzIHJlc3VsdHNcblx0XHRcdFx0ZG9uZSggLTEsIGUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsYmFjayBmb3Igd2hlbiBldmVyeXRoaW5nIGlzIGRvbmVcblx0XHRmdW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHtcblx0XHRcdHZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwgbW9kaWZpZWQsXG5cdFx0XHRcdHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0O1xuXG5cdFx0XHQvLyBJZ25vcmUgcmVwZWF0IGludm9jYXRpb25zXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb21wbGV0ZWQgPSB0cnVlO1xuXG5cdFx0XHQvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0c1xuXHRcdFx0aWYgKCB0aW1lb3V0VGltZXIgKSB7XG5cdFx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvblxuXHRcdFx0Ly8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwgYmUgdXNlZClcblx0XHRcdHRyYW5zcG9ydCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0Ly8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTZXQgcmVhZHlTdGF0ZVxuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDtcblxuXHRcdFx0Ly8gRGV0ZXJtaW5lIGlmIHN1Y2Nlc3NmdWxcblx0XHRcdGlzU3VjY2VzcyA9IHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0O1xuXG5cdFx0XHQvLyBHZXQgcmVzcG9uc2UgZGF0YVxuXHRcdFx0aWYgKCByZXNwb25zZXMgKSB7XG5cdFx0XHRcdHJlc3BvbnNlID0gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBVc2UgYSBub29wIGNvbnZlcnRlciBmb3IgbWlzc2luZyBzY3JpcHQgYnV0IG5vdCBpZiBqc29ucFxuXHRcdFx0aWYgKCAhaXNTdWNjZXNzICYmXG5cdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBcInNjcmlwdFwiLCBzLmRhdGFUeXBlcyApID4gLTEgJiZcblx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIFwianNvblwiLCBzLmRhdGFUeXBlcyApIDwgMCApIHtcblx0XHRcdFx0cy5jb252ZXJ0ZXJzWyBcInRleHQgc2NyaXB0XCIgXSA9IGZ1bmN0aW9uKCkge307XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnZlcnQgbm8gbWF0dGVyIHdoYXQgKHRoYXQgd2F5IHJlc3BvbnNlWFhYIGZpZWxkcyBhcmUgYWx3YXlzIHNldClcblx0XHRcdHJlc3BvbnNlID0gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICk7XG5cblx0XHRcdC8vIElmIHN1Y2Nlc3NmdWwsIGhhbmRsZSB0eXBlIGNoYWluaW5nXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblxuXHRcdFx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdFx0XHRpZiAoIHMuaWZNb2RpZmllZCApIHtcblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkxhc3QtTW9kaWZpZWRcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiZXRhZ1wiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gaWYgbm8gY29udGVudFxuXHRcdFx0XHRpZiAoIHN0YXR1cyA9PT0gMjA0IHx8IHMudHlwZSA9PT0gXCJIRUFEXCIgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm9jb250ZW50XCI7XG5cblx0XHRcdFx0Ly8gaWYgbm90IG1vZGlmaWVkXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHN0YXR1cyA9PT0gMzA0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vdG1vZGlmaWVkXCI7XG5cblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBkYXRhLCBsZXQncyBjb252ZXJ0IGl0XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IHJlc3BvbnNlLnN0YXRlO1xuXHRcdFx0XHRcdHN1Y2Nlc3MgPSByZXNwb25zZS5kYXRhO1xuXHRcdFx0XHRcdGVycm9yID0gcmVzcG9uc2UuZXJyb3I7XG5cdFx0XHRcdFx0aXNTdWNjZXNzID0gIWVycm9yO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEV4dHJhY3QgZXJyb3IgZnJvbSBzdGF0dXNUZXh0IGFuZCBub3JtYWxpemUgZm9yIG5vbi1hYm9ydHNcblx0XHRcdFx0ZXJyb3IgPSBzdGF0dXNUZXh0O1xuXHRcdFx0XHRpZiAoIHN0YXR1cyB8fCAhc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJlcnJvclwiO1xuXHRcdFx0XHRcdGlmICggc3RhdHVzIDwgMCApIHtcblx0XHRcdFx0XHRcdHN0YXR1cyA9IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCBkYXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0XG5cdFx0XHRqcVhIUi5zdGF0dXMgPSBzdGF0dXM7XG5cdFx0XHRqcVhIUi5zdGF0dXNUZXh0ID0gKCBuYXRpdmVTdGF0dXNUZXh0IHx8IHN0YXR1c1RleHQgKSArIFwiXCI7XG5cblx0XHRcdC8vIFN1Y2Nlc3MvRXJyb3Jcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpxWEhSIF0gKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwgZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0anFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSApO1xuXHRcdFx0c3RhdHVzQ29kZSA9IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIGlzU3VjY2VzcyA/IFwiYWpheFN1Y2Nlc3NcIiA6IFwiYWpheEVycm9yXCIsXG5cdFx0XHRcdFx0WyBqcVhIUiwgcywgaXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29tcGxldGVcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQuZmlyZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCBdICk7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhDb21wbGV0ZVwiLCBbIGpxWEhSLCBzIF0gKTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXJcblx0XHRcdFx0aWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RvcFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ganFYSFI7XG5cdH0sXG5cblx0Z2V0SlNPTjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgZGF0YSwgY2FsbGJhY2ssIFwianNvblwiICk7XG5cdH0sXG5cblx0Z2V0U2NyaXB0OiBmdW5jdGlvbiggdXJsLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCB1bmRlZmluZWQsIGNhbGxiYWNrLCBcInNjcmlwdFwiICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJnZXRcIiwgXCJwb3N0XCIgXSwgZnVuY3Rpb24oIF9pLCBtZXRob2QgKSB7XG5cdGpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHtcblxuXHRcdC8vIFNoaWZ0IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBkYXRhICkgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBjYWxsYmFjaztcblx0XHRcdGNhbGxiYWNrID0gZGF0YTtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlIHVybCBjYW4gYmUgYW4gb3B0aW9ucyBvYmplY3QgKHdoaWNoIHRoZW4gbXVzdCBoYXZlIC51cmwpXG5cdFx0cmV0dXJuIGpRdWVyeS5hamF4KCBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHR1cmw6IHVybCxcblx0XHRcdHR5cGU6IG1ldGhvZCxcblx0XHRcdGRhdGFUeXBlOiB0eXBlLFxuXHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdHN1Y2Nlc3M6IGNhbGxiYWNrXG5cdFx0fSwgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHVybCApICYmIHVybCApICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHtcblx0dmFyIGk7XG5cdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdGlmICggaS50b0xvd2VyQ2FzZSgpID09PSBcImNvbnRlbnQtdHlwZVwiICkge1xuXHRcdFx0cy5jb250ZW50VHlwZSA9IHMuaGVhZGVyc1sgaSBdIHx8IFwiXCI7XG5cdFx0fVxuXHR9XG59ICk7XG5cblxualF1ZXJ5Ll9ldmFsVXJsID0gZnVuY3Rpb24oIHVybCwgb3B0aW9ucywgZG9jICkge1xuXHRyZXR1cm4galF1ZXJ5LmFqYXgoIHtcblx0XHR1cmw6IHVybCxcblxuXHRcdC8vIE1ha2UgdGhpcyBleHBsaWNpdCwgc2luY2UgdXNlciBjYW4gb3ZlcnJpZGUgdGhpcyB0aHJvdWdoIGFqYXhTZXR1cCAodHJhYy0xMTI2NClcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGRhdGFUeXBlOiBcInNjcmlwdFwiLFxuXHRcdGNhY2hlOiB0cnVlLFxuXHRcdGFzeW5jOiBmYWxzZSxcblx0XHRnbG9iYWw6IGZhbHNlLFxuXG5cdFx0Ly8gT25seSBldmFsdWF0ZSB0aGUgcmVzcG9uc2UgaWYgaXQgaXMgc3VjY2Vzc2Z1bCAoZ2gtNDEyNilcblx0XHQvLyBkYXRhRmlsdGVyIGlzIG5vdCBpbnZva2VkIGZvciBmYWlsdXJlIHJlc3BvbnNlcywgc28gdXNpbmcgaXQgaW5zdGVhZFxuXHRcdC8vIG9mIHRoZSBkZWZhdWx0IGNvbnZlcnRlciBpcyBrbHVkZ3kgYnV0IGl0IHdvcmtzLlxuXHRcdGNvbnZlcnRlcnM6IHtcblx0XHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oKSB7fVxuXHRcdH0sXG5cdFx0ZGF0YUZpbHRlcjogZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHJlc3BvbnNlLCBvcHRpb25zLCBkb2MgKTtcblx0XHR9XG5cdH0gKTtcbn07XG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHR3cmFwQWxsOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgd3JhcDtcblxuXHRcdGlmICggdGhpc1sgMCBdICkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRcdGh0bWwgPSBodG1sLmNhbGwoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUgdGFyZ2V0IGFyb3VuZFxuXHRcdFx0d3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1sgMCBdLm93bmVyRG9jdW1lbnQgKS5lcSggMCApLmNsb25lKCB0cnVlICk7XG5cblx0XHRcdGlmICggdGhpc1sgMCBdLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0d3JhcC5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IHRoaXM7XG5cblx0XHRcdFx0d2hpbGUgKCBlbGVtLmZpcnN0RWxlbWVudENoaWxkICkge1xuXHRcdFx0XHRcdGVsZW0gPSBlbGVtLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVsZW07XG5cdFx0XHR9ICkuYXBwZW5kKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0d3JhcElubmVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwSW5uZXIoIGh0bWwuY2FsbCggdGhpcywgaSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLFxuXHRcdFx0XHRjb250ZW50cyA9IHNlbGYuY29udGVudHMoKTtcblxuXHRcdFx0aWYgKCBjb250ZW50cy5sZW5ndGggKSB7XG5cdFx0XHRcdGNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZi5hcHBlbmQoIGh0bWwgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0d3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIGh0bWxJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggaHRtbCApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBodG1sSXNGdW5jdGlvbiA/IGh0bWwuY2FsbCggdGhpcywgaSApIDogaHRtbCApO1xuXHRcdH0gKTtcblx0fSxcblxuXHR1bndyYXA6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR0aGlzLnBhcmVudCggc2VsZWN0b3IgKS5ub3QoIFwiYm9keVwiICkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS5yZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7XG5cdFx0fSApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4cHIucHNldWRvcy5oaWRkZW4gPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICFqUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUoIGVsZW0gKTtcbn07XG5qUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICEhKCBlbGVtLm9mZnNldFdpZHRoIHx8IGVsZW0ub2Zmc2V0SGVpZ2h0IHx8IGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKTtcbn07XG5cblxuXG5cbmpRdWVyeS5hamF4U2V0dGluZ3MueGhyID0gZnVuY3Rpb24oKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblx0fSBjYXRjaCAoIGUgKSB7fVxufTtcblxudmFyIHhoclN1Y2Nlc3NTdGF0dXMgPSB7XG5cblx0XHQvLyBGaWxlIHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIGNvZGUgMCwgYXNzdW1lIDIwMFxuXHRcdDA6IDIwMCxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0Ly8gdHJhYy0xNDUwOiBzb21ldGltZXMgSUUgcmV0dXJucyAxMjIzIHdoZW4gaXQgc2hvdWxkIGJlIDIwNFxuXHRcdDEyMjM6IDIwNFxuXHR9LFxuXHR4aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRpbmdzLnhocigpO1xuXG5zdXBwb3J0LmNvcnMgPSAhIXhoclN1cHBvcnRlZCAmJiAoIFwid2l0aENyZWRlbnRpYWxzXCIgaW4geGhyU3VwcG9ydGVkICk7XG5zdXBwb3J0LmFqYXggPSB4aHJTdXBwb3J0ZWQgPSAhIXhoclN1cHBvcnRlZDtcblxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHR2YXIgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2s7XG5cblx0Ly8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdFxuXHRpZiAoIHN1cHBvcnQuY29ycyB8fCB4aHJTdXBwb3J0ZWQgJiYgIW9wdGlvbnMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0dmFyIGksXG5cdFx0XHRcdFx0eGhyID0gb3B0aW9ucy54aHIoKTtcblxuXHRcdFx0XHR4aHIub3Blbihcblx0XHRcdFx0XHRvcHRpb25zLnR5cGUsXG5cdFx0XHRcdFx0b3B0aW9ucy51cmwsXG5cdFx0XHRcdFx0b3B0aW9ucy5hc3luYyxcblx0XHRcdFx0XHRvcHRpb25zLnVzZXJuYW1lLFxuXHRcdFx0XHRcdG9wdGlvbnMucGFzc3dvcmRcblx0XHRcdFx0KTtcblxuXHRcdFx0XHQvLyBBcHBseSBjdXN0b20gZmllbGRzIGlmIHByb3ZpZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0Zm9yICggaSBpbiBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRcdHhoclsgaSBdID0gb3B0aW9ucy54aHJGaWVsZHNbIGkgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHtcblx0XHRcdFx0XHR4aHIub3ZlcnJpZGVNaW1lVHlwZSggb3B0aW9ucy5taW1lVHlwZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gWC1SZXF1ZXN0ZWQtV2l0aCBoZWFkZXJcblx0XHRcdFx0Ly8gRm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cywgc2VlaW5nIGFzIGNvbmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZVxuXHRcdFx0XHQvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLlxuXHRcdFx0XHQvLyAoaXQgY2FuIGFsd2F5cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhTZXR1cClcblx0XHRcdFx0Ly8gRm9yIHNhbWUtZG9tYWluIHJlcXVlc3RzLCB3b24ndCBjaGFuZ2UgaGVhZGVyIGlmIGFscmVhZHkgcHJvdmlkZWQuXG5cdFx0XHRcdGlmICggIW9wdGlvbnMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gKSB7XG5cdFx0XHRcdFx0aGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSA9IFwiWE1MSHR0cFJlcXVlc3RcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNldCBoZWFkZXJzXG5cdFx0XHRcdGZvciAoIGkgaW4gaGVhZGVycyApIHtcblx0XHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrID0gZXJyb3JDYWxsYmFjayA9IHhoci5vbmxvYWQgPVxuXHRcdFx0XHRcdFx0XHRcdHhoci5vbmVycm9yID0geGhyLm9uYWJvcnQgPSB4aHIub250aW1lb3V0ID1cblx0XHRcdFx0XHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuXG5cdFx0XHRcdFx0XHRcdGlmICggdHlwZSA9PT0gXCJhYm9ydFwiICkge1xuXHRcdFx0XHRcdFx0XHRcdHhoci5hYm9ydCgpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSBcImVycm9yXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIE9uIGEgbWFudWFsIG5hdGl2ZSBhYm9ydCwgSUU5IHRocm93c1xuXHRcdFx0XHRcdFx0XHRcdC8vIGVycm9ycyBvbiBhbnkgcHJvcGVydHkgYWNjZXNzIHRoYXQgaXMgbm90IHJlYWR5U3RhdGVcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHR5cGVvZiB4aHIuc3RhdHVzICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIDAsIFwiZXJyb3JcIiApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGaWxlOiBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyAwOyBzZWUgdHJhYy04NjA1LCB0cmFjLTE0MjA3XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblx0XHRcdFx0XHRcdFx0XHRcdHhoclN1Y2Nlc3NTdGF0dXNbIHhoci5zdGF0dXMgXSB8fCB4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHQsXG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJRTkgaGFzIG5vIFhIUjIgYnV0IHRocm93cyBvbiBiaW5hcnkgKHRyYWMtMTE0MjYpXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBGb3IgWEhSMiBub24tdGV4dCwgbGV0IHRoZSBjYWxsZXIgaGFuZGxlIGl0IChnaC0yNDk4KVxuXHRcdFx0XHRcdFx0XHRcdFx0KCB4aHIucmVzcG9uc2VUeXBlIHx8IFwidGV4dFwiICkgIT09IFwidGV4dFwiICB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHhoci5yZXNwb25zZVRleHQgIT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IGJpbmFyeTogeGhyLnJlc3BvbnNlIH0gOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IHRleHQ6IHhoci5yZXNwb25zZVRleHQgfSxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vIExpc3RlbiB0byBldmVudHNcblx0XHRcdFx0eGhyLm9ubG9hZCA9IGNhbGxiYWNrKCk7XG5cdFx0XHRcdGVycm9yQ2FsbGJhY2sgPSB4aHIub25lcnJvciA9IHhoci5vbnRpbWVvdXQgPSBjYWxsYmFjayggXCJlcnJvclwiICk7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0XHRcdC8vIFVzZSBvbnJlYWR5c3RhdGVjaGFuZ2UgdG8gcmVwbGFjZSBvbmFib3J0XG5cdFx0XHRcdC8vIHRvIGhhbmRsZSB1bmNhdWdodCBhYm9ydHNcblx0XHRcdFx0aWYgKCB4aHIub25hYm9ydCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHhoci5vbmFib3J0ID0gZXJyb3JDYWxsYmFjaztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIENoZWNrIHJlYWR5U3RhdGUgYmVmb3JlIHRpbWVvdXQgYXMgaXQgY2hhbmdlc1xuXHRcdFx0XHRcdFx0aWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBbGxvdyBvbmVycm9yIHRvIGJlIGNhbGxlZCBmaXJzdCxcblx0XHRcdFx0XHRcdFx0Ly8gYnV0IHRoYXQgd2lsbCBub3QgaGFuZGxlIGEgbmF0aXZlIGFib3J0XG5cdFx0XHRcdFx0XHRcdC8vIEFsc28sIHNhdmUgZXJyb3JDYWxsYmFjayB0byBhIHZhcmlhYmxlXG5cdFx0XHRcdFx0XHRcdC8vIGFzIHhoci5vbmVycm9yIGNhbm5vdCBiZSBhY2Nlc3NlZFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSBhYm9ydCBjYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGNhbGxiYWNrKCBcImFib3J0XCIgKTtcblxuXHRcdFx0XHR0cnkge1xuXG5cdFx0XHRcdFx0Ly8gRG8gc2VuZCB0aGUgcmVxdWVzdCAodGhpcyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uKVxuXHRcdFx0XHRcdHhoci5zZW5kKCBvcHRpb25zLmhhc0NvbnRlbnQgJiYgb3B0aW9ucy5kYXRhIHx8IG51bGwgKTtcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHQvLyB0cmFjLTE0NjgzOiBPbmx5IHJldGhyb3cgaWYgdGhpcyBoYXNuJ3QgYmVlbiBub3RpZmllZCBhcyBhbiBlcnJvciB5ZXRcblx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG4vLyBQcmV2ZW50IGF1dG8tZXhlY3V0aW9uIG9mIHNjcmlwdHMgd2hlbiBubyBleHBsaWNpdCBkYXRhVHlwZSB3YXMgcHJvdmlkZWQgKFNlZSBnaC0yNDMyKVxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy5jb250ZW50cy5zY3JpcHQgPSBmYWxzZTtcblx0fVxufSApO1xuXG4vLyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZVxualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRhY2NlcHRzOiB7XG5cdFx0c2NyaXB0OiBcInRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgXCIgK1xuXHRcdFx0XCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHRcIlxuXHR9LFxuXHRjb250ZW50czoge1xuXHRcdHNjcmlwdDogL1xcYig/OmphdmF8ZWNtYSlzY3JpcHRcXGIvXG5cdH0sXG5cdGNvbnZlcnRlcnM6IHtcblx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHRleHQgKTtcblx0XHRcdHJldHVybiB0ZXh0O1xuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIYW5kbGUgY2FjaGUncyBzcGVjaWFsIGNhc2UgYW5kIGNyb3NzRG9tYWluXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdHMuY2FjaGUgPSBmYWxzZTtcblx0fVxuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy50eXBlID0gXCJHRVRcIjtcblx0fVxufSApO1xuXG4vLyBCaW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnRcbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblxuXHQvLyBUaGlzIHRyYW5zcG9ydCBvbmx5IGRlYWxzIHdpdGggY3Jvc3MgZG9tYWluIG9yIGZvcmNlZC1ieS1hdHRycyByZXF1ZXN0c1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gfHwgcy5zY3JpcHRBdHRycyApIHtcblx0XHR2YXIgc2NyaXB0LCBjYWxsYmFjaztcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIF8sIGNvbXBsZXRlICkge1xuXHRcdFx0XHRzY3JpcHQgPSBqUXVlcnkoIFwiPHNjcmlwdD5cIiApXG5cdFx0XHRcdFx0LmF0dHIoIHMuc2NyaXB0QXR0cnMgfHwge30gKVxuXHRcdFx0XHRcdC5wcm9wKCB7IGNoYXJzZXQ6IHMuc2NyaXB0Q2hhcnNldCwgc3JjOiBzLnVybCB9IClcblx0XHRcdFx0XHQub24oIFwibG9hZCBlcnJvclwiLCBjYWxsYmFjayA9IGZ1bmN0aW9uKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRzY3JpcHQucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRjYWxsYmFjayA9IG51bGw7XG5cdFx0XHRcdFx0XHRpZiAoIGV2dCApIHtcblx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIGV2dC50eXBlID09PSBcImVycm9yXCIgPyA0MDQgOiAyMDAsIGV2dC50eXBlICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdC8vIFVzZSBuYXRpdmUgRE9NIG1hbmlwdWxhdGlvbiB0byBhdm9pZCBvdXIgZG9tTWFuaXAgQUpBWCB0cmlja2VyeVxuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHRbIDAgXSApO1xuXHRcdFx0fSxcblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgb2xkQ2FsbGJhY2tzID0gW10sXG5cdHJqc29ucCA9IC8oPSlcXD8oPz0mfCQpfFxcP1xcPy87XG5cbi8vIERlZmF1bHQganNvbnAgc2V0dGluZ3NcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0anNvbnA6IFwiY2FsbGJhY2tcIixcblx0anNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNhbGxiYWNrID0gb2xkQ2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyBcIl9cIiArICggbm9uY2UuZ3VpZCsrICkgKTtcblx0XHR0aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTtcblx0XHRyZXR1cm4gY2FsbGJhY2s7XG5cdH1cbn0gKTtcblxuLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJqc29uIGpzb25wXCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHtcblxuXHR2YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsXG5cdFx0anNvblByb3AgPSBzLmpzb25wICE9PSBmYWxzZSAmJiAoIHJqc29ucC50ZXN0KCBzLnVybCApID9cblx0XHRcdFwidXJsXCIgOlxuXHRcdFx0dHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApXG5cdFx0XHRcdFx0LmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCAmJlxuXHRcdFx0XHRyanNvbnAudGVzdCggcy5kYXRhICkgJiYgXCJkYXRhXCJcblx0XHQpO1xuXG5cdC8vIEhhbmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyBcImpzb25wXCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXRcblx0aWYgKCBqc29uUHJvcCB8fCBzLmRhdGFUeXBlc1sgMCBdID09PSBcImpzb25wXCIgKSB7XG5cblx0XHQvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVtZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0XG5cdFx0Y2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0gaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgP1xuXHRcdFx0cy5qc29ucENhbGxiYWNrKCkgOlxuXHRcdFx0cy5qc29ucENhbGxiYWNrO1xuXG5cdFx0Ly8gSW5zZXJ0IGNhbGxiYWNrIGludG8gdXJsIG9yIGZvcm0gZGF0YVxuXHRcdGlmICgganNvblByb3AgKSB7XG5cdFx0XHRzWyBqc29uUHJvcCBdID0gc1sganNvblByb3AgXS5yZXBsYWNlKCByanNvbnAsIFwiJDFcIiArIGNhbGxiYWNrTmFtZSApO1xuXHRcdH0gZWxzZSBpZiAoIHMuanNvbnAgIT09IGZhbHNlICkge1xuXHRcdFx0cy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuanNvbnAgKyBcIj1cIiArIGNhbGxiYWNrTmFtZTtcblx0XHR9XG5cblx0XHQvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uXG5cdFx0cy5jb252ZXJ0ZXJzWyBcInNjcmlwdCBqc29uXCIgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7XG5cdFx0XHRcdGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgXCIgd2FzIG5vdCBjYWxsZWRcIiApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07XG5cdFx0fTtcblxuXHRcdC8vIEZvcmNlIGpzb24gZGF0YVR5cGVcblx0XHRzLmRhdGFUeXBlc1sgMCBdID0gXCJqc29uXCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrXG5cdFx0b3ZlcndyaXR0ZW4gPSB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdO1xuXHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzO1xuXHRcdH07XG5cblx0XHQvLyBDbGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycylcblx0XHRqcVhIUi5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXRcblx0XHRcdGlmICggb3ZlcndyaXR0ZW4gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0alF1ZXJ5KCB3aW5kb3cgKS5yZW1vdmVQcm9wKCBjYWxsYmFja05hbWUgKTtcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWVcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2F2ZSBiYWNrIGFzIGZyZWVcblx0XHRcdGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7XG5cblx0XHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kXG5cdFx0XHRcdHMuanNvbnBDYWxsYmFjayA9IG9yaWdpbmFsU2V0dGluZ3MuanNvbnBDYWxsYmFjaztcblxuXHRcdFx0XHQvLyBTYXZlIHRoZSBjYWxsYmFjayBuYW1lIGZvciBmdXR1cmUgdXNlXG5cdFx0XHRcdG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlXG5cdFx0XHRpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7XG5cdFx0XHRcdG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7XG5cdFx0fSApO1xuXG5cdFx0Ly8gRGVsZWdhdGUgdG8gc2NyaXB0XG5cdFx0cmV0dXJuIFwic2NyaXB0XCI7XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gU3VwcG9ydDogU2FmYXJpIDggb25seVxuLy8gSW4gU2FmYXJpIDggZG9jdW1lbnRzIGNyZWF0ZWQgdmlhIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudFxuLy8gY29sbGFwc2Ugc2libGluZyBmb3JtczogdGhlIHNlY29uZCBvbmUgYmVjb21lcyBhIGNoaWxkIG9mIHRoZSBmaXJzdCBvbmUuXG4vLyBCZWNhdXNlIG9mIHRoYXQsIHRoaXMgc2VjdXJpdHkgbWVhc3VyZSBoYXMgdG8gYmUgZGlzYWJsZWQgaW4gU2FmYXJpIDguXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzM3XG5zdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCA9ICggZnVuY3Rpb24oKSB7XG5cdHZhciBib2R5ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICkuYm9keTtcblx0Ym9keS5pbm5lckhUTUwgPSBcIjxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+XCI7XG5cdHJldHVybiBib2R5LmNoaWxkTm9kZXMubGVuZ3RoID09PSAyO1xufSApKCk7XG5cblxuLy8gQXJndW1lbnQgXCJkYXRhXCIgc2hvdWxkIGJlIHN0cmluZyBvZiBodG1sXG4vLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsXG4vLyBkZWZhdWx0cyB0byBkb2N1bWVudFxuLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFsKTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZ1xualF1ZXJ5LnBhcnNlSFRNTCA9IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0cyApIHtcblx0aWYgKCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0a2VlcFNjcmlwdHMgPSBjb250ZXh0O1xuXHRcdGNvbnRleHQgPSBmYWxzZTtcblx0fVxuXG5cdHZhciBiYXNlLCBwYXJzZWQsIHNjcmlwdHM7XG5cblx0aWYgKCAhY29udGV4dCApIHtcblxuXHRcdC8vIFN0b3Agc2NyaXB0cyBvciBpbmxpbmUgZXZlbnQgaGFuZGxlcnMgZnJvbSBiZWluZyBleGVjdXRlZCBpbW1lZGlhdGVseVxuXHRcdC8vIGJ5IHVzaW5nIGRvY3VtZW50LmltcGxlbWVudGF0aW9uXG5cdFx0aWYgKCBzdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCApIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKTtcblxuXHRcdFx0Ly8gU2V0IHRoZSBiYXNlIGhyZWYgZm9yIHRoZSBjcmVhdGVkIGRvY3VtZW50XG5cdFx0XHQvLyBzbyBhbnkgcGFyc2VkIGVsZW1lbnRzIHdpdGggVVJMc1xuXHRcdFx0Ly8gYXJlIGJhc2VkIG9uIHRoZSBkb2N1bWVudCdzIFVSTCAoZ2gtMjk2NSlcblx0XHRcdGJhc2UgPSBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiYmFzZVwiICk7XG5cdFx0XHRiYXNlLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0Y29udGV4dC5oZWFkLmFwcGVuZENoaWxkKCBiYXNlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudDtcblx0XHR9XG5cdH1cblxuXHRwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKTtcblx0c2NyaXB0cyA9ICFrZWVwU2NyaXB0cyAmJiBbXTtcblxuXHQvLyBTaW5nbGUgdGFnXG5cdGlmICggcGFyc2VkICkge1xuXHRcdHJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWyAxIF0gKSBdO1xuXHR9XG5cblx0cGFyc2VkID0gYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTtcblxuXHRpZiAoIHNjcmlwdHMgJiYgc2NyaXB0cy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTtcbn07XG5cblxuLyoqXG4gKiBMb2FkIGEgdXJsIGludG8gYSBwYWdlXG4gKi9cbmpRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHtcblx0dmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSxcblx0XHRzZWxmID0gdGhpcyxcblx0XHRvZmYgPSB1cmwuaW5kZXhPZiggXCIgXCIgKTtcblxuXHRpZiAoIG9mZiA+IC0xICkge1xuXHRcdHNlbGVjdG9yID0gc3RyaXBBbmRDb2xsYXBzZSggdXJsLnNsaWNlKCBvZmYgKSApO1xuXHRcdHVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7XG5cdH1cblxuXHQvLyBJZiBpdCdzIGEgZnVuY3Rpb25cblx0aWYgKCBpc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHtcblxuXHRcdC8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrXG5cdFx0Y2FsbGJhY2sgPSBwYXJhbXM7XG5cdFx0cGFyYW1zID0gdW5kZWZpbmVkO1xuXG5cdC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmdcblx0fSBlbHNlIGlmICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0dHlwZSA9IFwiUE9TVFwiO1xuXHR9XG5cblx0Ly8gSWYgd2UgaGF2ZSBlbGVtZW50cyB0byBtb2RpZnksIG1ha2UgdGhlIHJlcXVlc3Rcblx0aWYgKCBzZWxmLmxlbmd0aCA+IDAgKSB7XG5cdFx0alF1ZXJ5LmFqYXgoIHtcblx0XHRcdHVybDogdXJsLFxuXG5cdFx0XHQvLyBJZiBcInR5cGVcIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4gXCJHRVRcIiBtZXRob2Qgd2lsbCBiZSB1c2VkLlxuXHRcdFx0Ly8gTWFrZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGV4cGxpY2l0IHNpbmNlXG5cdFx0XHQvLyB1c2VyIGNhbiBvdmVycmlkZSBpdCB0aHJvdWdoIGFqYXhTZXR1cCBtZXRob2Rcblx0XHRcdHR5cGU6IHR5cGUgfHwgXCJHRVRcIixcblx0XHRcdGRhdGFUeXBlOiBcImh0bWxcIixcblx0XHRcdGRhdGE6IHBhcmFtc1xuXHRcdH0gKS5kb25lKCBmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkge1xuXG5cdFx0XHQvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUgY2FsbGJhY2tcblx0XHRcdHJlc3BvbnNlID0gYXJndW1lbnRzO1xuXG5cdFx0XHRzZWxmLmh0bWwoIHNlbGVjdG9yID9cblxuXHRcdFx0XHQvLyBJZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBkaXZcblx0XHRcdFx0Ly8gRXhjbHVkZSBzY3JpcHRzIHRvIGF2b2lkIElFICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzXG5cdFx0XHRcdGpRdWVyeSggXCI8ZGl2PlwiICkuYXBwZW5kKCBqUXVlcnkucGFyc2VIVE1MKCByZXNwb25zZVRleHQgKSApLmZpbmQoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSB1c2UgdGhlIGZ1bGwgcmVzdWx0XG5cdFx0XHRcdHJlc3BvbnNlVGV4dCApO1xuXG5cdFx0Ly8gSWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImRhdGFcIiwgXCJzdGF0dXNcIiwgXCJqcVhIUlwiXG5cdFx0Ly8gYnV0IHRoZXkgYXJlIGlnbm9yZWQgYmVjYXVzZSByZXNwb25zZSB3YXMgc2V0IGFib3ZlLlxuXHRcdC8vIElmIGl0IGZhaWxzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJqcVhIUlwiLCBcInN0YXR1c1wiLCBcImVycm9yXCJcblx0XHR9ICkuYWx3YXlzKCBjYWxsYmFjayAmJiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHtcblx0XHRcdHNlbGYuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNhbGxiYWNrLmFwcGx5KCB0aGlzLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5cblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiBqUXVlcnkuZ3JlcCggalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiBlbGVtID09PSBmbi5lbGVtO1xuXHR9ICkubGVuZ3RoO1xufTtcblxuXG5cblxualF1ZXJ5Lm9mZnNldCA9IHtcblx0c2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSApIHtcblx0XHR2YXIgY3VyUG9zaXRpb24sIGN1ckxlZnQsIGN1ckNTU1RvcCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1ckNTU0xlZnQsIGNhbGN1bGF0ZVBvc2l0aW9uLFxuXHRcdFx0cG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSxcblx0XHRcdGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSxcblx0XHRcdHByb3BzID0ge307XG5cblx0XHQvLyBTZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xlZnQgYXJlIHNldCBldmVuIG9uIHN0YXRpYyBlbGVtXG5cdFx0aWYgKCBwb3NpdGlvbiA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdGVsZW0uc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG5cdFx0fVxuXG5cdFx0Y3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKTtcblx0XHRjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCBcInRvcFwiICk7XG5cdFx0Y3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwibGVmdFwiICk7XG5cdFx0Y2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSBcImFic29sdXRlXCIgfHwgcG9zaXRpb24gPT09IFwiZml4ZWRcIiApICYmXG5cdFx0XHQoIGN1ckNTU1RvcCArIGN1ckNTU0xlZnQgKS5pbmRleE9mKCBcImF1dG9cIiApID4gLTE7XG5cblx0XHQvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlclxuXHRcdC8vIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZFxuXHRcdGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7XG5cdFx0XHRjdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTtcblx0XHRcdGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDtcblx0XHRcdGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0O1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1clRvcCA9IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7XG5cdFx0XHRjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7XG5cblx0XHRcdC8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4KVxuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNldCApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDtcblx0XHR9XG5cdFx0aWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLmxlZnQgPSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0O1xuXHRcdH1cblxuXHRcdGlmICggXCJ1c2luZ1wiIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3BzICk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyRWxlbS5jc3MoIHByb3BzICk7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0Ly8gb2Zmc2V0KCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgYm9yZGVyIGJveCB0byB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9mZnNldDogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBQcmVzZXJ2ZSBjaGFpbmluZyBmb3Igc2V0dGVyXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHRoaXMgOlxuXHRcdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRcdGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7XG5cdFx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHR2YXIgcmVjdCwgd2luLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXTtcblxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHplcm9zIGZvciBkaXNjb25uZWN0ZWQgYW5kIGhpZGRlbiAoZGlzcGxheTogbm9uZSkgZWxlbWVudHMgKGdoLTIzMTApXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYVxuXHRcdC8vIGRpc2Nvbm5lY3RlZCBub2RlIGluIElFIHRocm93cyBhbiBlcnJvclxuXHRcdGlmICggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblx0XHR9XG5cblx0XHQvLyBHZXQgZG9jdW1lbnQtcmVsYXRpdmUgcG9zaXRpb24gYnkgYWRkaW5nIHZpZXdwb3J0IHNjcm9sbCB0byB2aWV3cG9ydC1yZWxhdGl2ZSBnQkNSXG5cdFx0cmVjdCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0d2luID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IHJlY3QudG9wICsgd2luLnBhZ2VZT2Zmc2V0LFxuXHRcdFx0bGVmdDogcmVjdC5sZWZ0ICsgd2luLnBhZ2VYT2Zmc2V0XG5cdFx0fTtcblx0fSxcblxuXHQvLyBwb3NpdGlvbigpIHJlbGF0ZXMgYW4gZWxlbWVudCdzIG1hcmdpbiBib3ggdG8gaXRzIG9mZnNldCBwYXJlbnQncyBwYWRkaW5nIGJveFxuXHQvLyBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBiZWhhdmlvciBvZiBDU1MgYWJzb2x1dGUgcG9zaXRpb25pbmdcblx0cG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggIXRoaXNbIDAgXSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgb2Zmc2V0UGFyZW50LCBvZmZzZXQsIGRvYyxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRwYXJlbnRPZmZzZXQgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuXG5cdFx0Ly8gcG9zaXRpb246Zml4ZWQgZWxlbWVudHMgYXJlIG9mZnNldCBmcm9tIHRoZSB2aWV3cG9ydCwgd2hpY2ggaXRzZWxmIGFsd2F5cyBoYXMgemVybyBvZmZzZXRcblx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApID09PSBcImZpeGVkXCIgKSB7XG5cblx0XHRcdC8vIEFzc3VtZSBwb3NpdGlvbjpmaXhlZCBpbXBsaWVzIGF2YWlsYWJpbGl0eSBvZiBnZXRCb3VuZGluZ0NsaWVudFJlY3Rcblx0XHRcdG9mZnNldCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0b2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTtcblxuXHRcdFx0Ly8gQWNjb3VudCBmb3IgdGhlICpyZWFsKiBvZmZzZXQgcGFyZW50LCB3aGljaCBjYW4gYmUgdGhlIGRvY3VtZW50IG9yIGl0cyByb290IGVsZW1lbnRcblx0XHRcdC8vIHdoZW4gYSBzdGF0aWNhbGx5IHBvc2l0aW9uZWQgZWxlbWVudCBpcyBpZGVudGlmaWVkXG5cdFx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0XHRvZmZzZXRQYXJlbnQgPSBlbGVtLm9mZnNldFBhcmVudCB8fCBkb2MuZG9jdW1lbnRFbGVtZW50O1xuXHRcdFx0d2hpbGUgKCBvZmZzZXRQYXJlbnQgJiZcblx0XHRcdFx0KCBvZmZzZXRQYXJlbnQgPT09IGRvYy5ib2R5IHx8IG9mZnNldFBhcmVudCA9PT0gZG9jLmRvY3VtZW50RWxlbWVudCApICYmXG5cdFx0XHRcdGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cblx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQgIT09IGVsZW0gJiYgb2Zmc2V0UGFyZW50Lm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIEluY29ycG9yYXRlIGJvcmRlcnMgaW50byBpdHMgb2Zmc2V0LCBzaW5jZSB0aGV5IGFyZSBvdXRzaWRlIGl0cyBjb250ZW50IG9yaWdpblxuXHRcdFx0XHRwYXJlbnRPZmZzZXQgPSBqUXVlcnkoIG9mZnNldFBhcmVudCApLm9mZnNldCgpO1xuXHRcdFx0XHRwYXJlbnRPZmZzZXQudG9wICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJUb3BXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC5sZWZ0ICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJMZWZ0V2lkdGhcIiwgdHJ1ZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBlbGVtZW50IG1hcmdpbnNcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiBvZmZzZXQudG9wIC0gcGFyZW50T2Zmc2V0LnRvcCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luVG9wXCIsIHRydWUgKSxcblx0XHRcdGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiwgdHJ1ZSApXG5cdFx0fTtcblx0fSxcblxuXHQvLyBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBkb2N1bWVudEVsZW1lbnQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcblx0Ly8gMSkgRm9yIHRoZSBlbGVtZW50IGluc2lkZSB0aGUgaWZyYW1lIHdpdGhvdXQgb2Zmc2V0UGFyZW50LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVyblxuXHQvLyAgICBkb2N1bWVudEVsZW1lbnQgb2YgdGhlIHBhcmVudCB3aW5kb3dcblx0Ly8gMikgRm9yIHRoZSBoaWRkZW4gb3IgZGV0YWNoZWQgZWxlbWVudFxuXHQvLyAzKSBGb3IgYm9keSBvciBodG1sIGVsZW1lbnQsIGkuZS4gaW4gY2FzZSBvZiB0aGUgaHRtbCBub2RlIC0gaXQgd2lsbCByZXR1cm4gaXRzZWxmXG5cdC8vXG5cdC8vIGJ1dCB0aG9zZSBleGNlcHRpb25zIHdlcmUgbmV2ZXIgcHJlc2VudGVkIGFzIGEgcmVhbCBsaWZlIHVzZS1jYXNlc1xuXHQvLyBhbmQgbWlnaHQgYmUgY29uc2lkZXJlZCBhcyBtb3JlIHByZWZlcmFibGUgcmVzdWx0cy5cblx0Ly9cblx0Ly8gVGhpcyBsb2dpYywgaG93ZXZlciwgaXMgbm90IGd1YXJhbnRlZWQgYW5kIGNhbiBjaGFuZ2UgYXQgYW55IHBvaW50IGluIHRoZSBmdXR1cmVcblx0b2Zmc2V0UGFyZW50OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50O1xuXG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJiBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50RWxlbWVudDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBzY3JvbGxMZWZ0OiBcInBhZ2VYT2Zmc2V0XCIsIHNjcm9sbFRvcDogXCJwYWdlWU9mZnNldFwiIH0sIGZ1bmN0aW9uKCBtZXRob2QsIHByb3AgKSB7XG5cdHZhciB0b3AgPSBcInBhZ2VZT2Zmc2V0XCIgPT09IHByb3A7XG5cblx0alF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG1ldGhvZCwgdmFsICkge1xuXG5cdFx0XHQvLyBDb2FsZXNjZSBkb2N1bWVudHMgYW5kIHdpbmRvd3Ncblx0XHRcdHZhciB3aW47XG5cdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW07XG5cdFx0XHR9IGVsc2UgaWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR3aW4gPSBlbGVtLmRlZmF1bHRWaWV3O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gd2luID8gd2luWyBwcm9wIF0gOiBlbGVtWyBtZXRob2QgXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB3aW4gKSB7XG5cdFx0XHRcdHdpbi5zY3JvbGxUbyhcblx0XHRcdFx0XHQhdG9wID8gdmFsIDogd2luLnBhZ2VYT2Zmc2V0LFxuXHRcdFx0XHRcdHRvcCA/IHZhbCA6IHdpbi5wYWdlWU9mZnNldFxuXHRcdFx0XHQpO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtWyBtZXRob2QgXSA9IHZhbDtcblx0XHRcdH1cblx0XHR9LCBtZXRob2QsIHZhbCwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9O1xufSApO1xuXG4vLyBTdXBwb3J0OiBTYWZhcmkgPD03IC0gOS4xLCBDaHJvbWUgPD0zNyAtIDQ5XG4vLyBBZGQgdGhlIHRvcC9sZWZ0IGNzc0hvb2tzIHVzaW5nIGpRdWVyeS5mbi5wb3NpdGlvblxuLy8gV2Via2l0IGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MDg0XG4vLyBCbGluayBidWc6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTU4OTM0N1xuLy8gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHBlcmNlbnQgd2hlbiBzcGVjaWZpZWQgZm9yIHRvcC9sZWZ0L2JvdHRvbS9yaWdodDtcbi8vIHJhdGhlciB0aGFuIG1ha2UgdGhlIGNzcyBtb2R1bGUgZGVwZW5kIG9uIHRoZSBvZmZzZXQgbW9kdWxlLCBqdXN0IGNoZWNrIGZvciBpdCBoZXJlXG5qUXVlcnkuZWFjaCggWyBcInRvcFwiLCBcImxlZnRcIiBdLCBmdW5jdGlvbiggX2ksIHByb3AgKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJvcCBdID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnBpeGVsUG9zaXRpb24sXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdFx0Y29tcHV0ZWQgPSBjdXJDU1MoIGVsZW0sIHByb3AgKTtcblxuXHRcdFx0XHQvLyBJZiBjdXJDU1MgcmV0dXJucyBwZXJjZW50YWdlLCBmYWxsYmFjayB0byBvZmZzZXRcblx0XHRcdFx0cmV0dXJuIHJudW1ub25weC50ZXN0KCBjb21wdXRlZCApID9cblx0XHRcdFx0XHRqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9wIF0gKyBcInB4XCIgOlxuXHRcdFx0XHRcdGNvbXB1dGVkO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn0gKTtcblxuXG4vLyBDcmVhdGUgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGgsIGhlaWdodCwgd2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IEhlaWdodDogXCJoZWlnaHRcIiwgV2lkdGg6IFwid2lkdGhcIiB9LCBmdW5jdGlvbiggbmFtZSwgdHlwZSApIHtcblx0alF1ZXJ5LmVhY2goIHtcblx0XHRwYWRkaW5nOiBcImlubmVyXCIgKyBuYW1lLFxuXHRcdGNvbnRlbnQ6IHR5cGUsXG5cdFx0XCJcIjogXCJvdXRlclwiICsgbmFtZVxuXHR9LCBmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHtcblxuXHRcdC8vIE1hcmdpbiBpcyBvbmx5IGZvciBvdXRlckhlaWdodCwgb3V0ZXJXaWR0aFxuXHRcdGpRdWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkge1xuXHRcdFx0dmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gXCJib29sZWFuXCIgKSxcblx0XHRcdFx0ZXh0cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUgPyBcIm1hcmdpblwiIDogXCJib3JkZXJcIiApO1xuXG5cdFx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgdHlwZSwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBkb2M7XG5cblx0XHRcdFx0aWYgKCBpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gJCggd2luZG93ICkub3V0ZXJXaWR0aC9IZWlnaHQgcmV0dXJuIHcvaCBpbmNsdWRpbmcgc2Nyb2xsYmFycyAoZ2gtMTcyOSlcblx0XHRcdFx0XHRyZXR1cm4gZnVuY05hbWUuaW5kZXhPZiggXCJvdXRlclwiICkgPT09IDAgP1xuXHRcdFx0XHRcdFx0ZWxlbVsgXCJpbm5lclwiICsgbmFtZSBdIDpcblx0XHRcdFx0XHRcdGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyBcImNsaWVudFwiICsgbmFtZSBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodFxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0ZG9jID0gZWxlbS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHRcdFx0XHQvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sXG5cdFx0XHRcdFx0Ly8gd2hpY2hldmVyIGlzIGdyZWF0ZXN0XG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcInNjcm9sbFwiICsgbmFtZSBdLCBkb2NbIFwic2Nyb2xsXCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwib2Zmc2V0XCIgKyBuYW1lIF0sIGRvY1sgXCJvZmZzZXRcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGRvY1sgXCJjbGllbnRcIiArIG5hbWUgXVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cblx0XHRcdFx0XHQvLyBHZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50LCByZXF1ZXN0aW5nIGJ1dCBub3QgZm9yY2luZyBwYXJzZUZsb2F0XG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6XG5cblx0XHRcdFx0XHQvLyBTZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCB0eXBlLCB2YWx1ZSwgZXh0cmEgKTtcblx0XHRcdH0sIHR5cGUsIGNoYWluYWJsZSA/IG1hcmdpbiA6IHVuZGVmaW5lZCwgY2hhaW5hYmxlICk7XG5cdFx0fTtcblx0fSApO1xufSApO1xuXG5cbmpRdWVyeS5lYWNoKCBbXG5cdFwiYWpheFN0YXJ0XCIsXG5cdFwiYWpheFN0b3BcIixcblx0XCJhamF4Q29tcGxldGVcIixcblx0XCJhamF4RXJyb3JcIixcblx0XCJhamF4U3VjY2Vzc1wiLFxuXHRcImFqYXhTZW5kXCJcbl0sIGZ1bmN0aW9uKCBfaSwgdHlwZSApIHtcblx0alF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGUsIGZuICk7XG5cdH07XG59ICk7XG5cblxuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRiaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgbnVsbCwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9mZiggdHlwZXMsIG51bGwsIGZuICk7XG5cdH0sXG5cblx0ZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGZuICkge1xuXG5cdFx0Ly8gKCBuYW1lc3BhY2UgKSBvciAoIHNlbGVjdG9yLCB0eXBlcyBbLCBmbl0gKVxuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID9cblx0XHRcdHRoaXMub2ZmKCBzZWxlY3RvciwgXCIqKlwiICkgOlxuXHRcdFx0dGhpcy5vZmYoIHR5cGVzLCBzZWxlY3RvciB8fCBcIioqXCIsIGZuICk7XG5cdH0sXG5cblx0aG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkge1xuXHRcdHJldHVybiB0aGlzXG5cdFx0XHQub24oIFwibW91c2VlbnRlclwiLCBmbk92ZXIgKVxuXHRcdFx0Lm9uKCBcIm1vdXNlbGVhdmVcIiwgZm5PdXQgfHwgZm5PdmVyICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goXG5cdCggXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBcIiArXG5cdFwibW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgXCIgK1xuXHRcImNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgY29udGV4dG1lbnVcIiApLnNwbGl0KCBcIiBcIiApLFxuXHRmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cblx0XHQvLyBIYW5kbGUgZXZlbnQgYmluZGluZ1xuXHRcdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkge1xuXHRcdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID9cblx0XHRcdFx0dGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6XG5cdFx0XHRcdHRoaXMudHJpZ2dlciggbmFtZSApO1xuXHRcdH07XG5cdH1cbik7XG5cblxuXG5cbi8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seVxuLy8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQXG4vLyBSZXF1aXJlIHRoYXQgdGhlIFwid2hpdGVzcGFjZSBydW5cIiBzdGFydHMgZnJvbSBhIG5vbi13aGl0ZXNwYWNlXG4vLyB0byBhdm9pZCBPKE5eMikgYmVoYXZpb3Igd2hlbiB0aGUgZW5naW5lIHdvdWxkIHRyeSBtYXRjaGluZyBcIlxccyskXCIgYXQgZWFjaCBzcGFjZSBwb3NpdGlvbi5cbnZhciBydHJpbSA9IC9eW1xcc1xcdUZFRkZcXHhBMF0rfChbXlxcc1xcdUZFRkZcXHhBMF0pW1xcc1xcdUZFRkZcXHhBMF0rJC9nO1xuXG4vLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnlcbi8vIGFyZ3VtZW50cy5cbi8vIGpRdWVyeS5wcm94eSBpcyBkZXByZWNhdGVkIHRvIHByb21vdGUgc3RhbmRhcmRzIChzcGVjaWZpY2FsbHkgRnVuY3Rpb24jYmluZClcbi8vIEhvd2V2ZXIsIGl0IGlzIG5vdCBzbGF0ZWQgZm9yIHJlbW92YWwgYW55IHRpbWUgc29vblxualF1ZXJ5LnByb3h5ID0gZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkge1xuXHR2YXIgdG1wLCBhcmdzLCBwcm94eTtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcInN0cmluZ1wiICkge1xuXHRcdHRtcCA9IGZuWyBjb250ZXh0IF07XG5cdFx0Y29udGV4dCA9IGZuO1xuXHRcdGZuID0gdG1wO1xuXHR9XG5cblx0Ly8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWNcblx0Ly8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC5cblx0aWYgKCAhaXNGdW5jdGlvbiggZm4gKSApIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gU2ltdWxhdGVkIGJpbmRcblx0YXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApO1xuXHRwcm94eSA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBmbi5hcHBseSggY29udGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdCggc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApO1xuXHR9O1xuXG5cdC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZFxuXHRwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKztcblxuXHRyZXR1cm4gcHJveHk7XG59O1xuXG5qUXVlcnkuaG9sZFJlYWR5ID0gZnVuY3Rpb24oIGhvbGQgKSB7XG5cdGlmICggaG9sZCApIHtcblx0XHRqUXVlcnkucmVhZHlXYWl0Kys7XG5cdH0gZWxzZSB7XG5cdFx0alF1ZXJ5LnJlYWR5KCB0cnVlICk7XG5cdH1cbn07XG5qUXVlcnkuaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5qUXVlcnkucGFyc2VKU09OID0gSlNPTi5wYXJzZTtcbmpRdWVyeS5ub2RlTmFtZSA9IG5vZGVOYW1lO1xualF1ZXJ5LmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xualF1ZXJ5LmlzV2luZG93ID0gaXNXaW5kb3c7XG5qUXVlcnkuY2FtZWxDYXNlID0gY2FtZWxDYXNlO1xualF1ZXJ5LnR5cGUgPSB0b1R5cGU7XG5cbmpRdWVyeS5ub3cgPSBEYXRlLm5vdztcblxualF1ZXJ5LmlzTnVtZXJpYyA9IGZ1bmN0aW9uKCBvYmogKSB7XG5cblx0Ly8gQXMgb2YgalF1ZXJ5IDMuMCwgaXNOdW1lcmljIGlzIGxpbWl0ZWQgdG9cblx0Ly8gc3RyaW5ncyBhbmQgbnVtYmVycyAocHJpbWl0aXZlcyBvciBvYmplY3RzKVxuXHQvLyB0aGF0IGNhbiBiZSBjb2VyY2VkIHRvIGZpbml0ZSBudW1iZXJzIChnaC0yNjYyKVxuXHR2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTtcblx0cmV0dXJuICggdHlwZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlID09PSBcInN0cmluZ1wiICkgJiZcblxuXHRcdC8vIHBhcnNlRmxvYXQgTmFOcyBudW1lcmljLWNhc3QgZmFsc2UgcG9zaXRpdmVzIChcIlwiKVxuXHRcdC8vIC4uLmJ1dCBtaXNpbnRlcnByZXRzIGxlYWRpbmctbnVtYmVyIHN0cmluZ3MsIHBhcnRpY3VsYXJseSBoZXggbGl0ZXJhbHMgKFwiMHguLi5cIilcblx0XHQvLyBzdWJ0cmFjdGlvbiBmb3JjZXMgaW5maW5pdGllcyB0byBOYU5cblx0XHQhaXNOYU4oIG9iaiAtIHBhcnNlRmxvYXQoIG9iaiApICk7XG59O1xuXG5qUXVlcnkudHJpbSA9IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRyZXR1cm4gdGV4dCA9PSBudWxsID9cblx0XHRcIlwiIDpcblx0XHQoIHRleHQgKyBcIlwiICkucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApO1xufTtcblxuXG5cbi8vIFJlZ2lzdGVyIGFzIGEgbmFtZWQgQU1EIG1vZHVsZSwgc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlclxuLy8gZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwgYnV0IG5vdCB2aWEgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdFxuLy8gdW5kZXJzdGFuZHMgYW5vbnltb3VzIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0XG4vLyB3YXkgdG8gcmVnaXN0ZXIuIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlXG4vLyBkZXJpdmVkIGZyb20gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2Vcbi8vIGZpbGUgbmFtZS4gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50c1xuLy8gdG8gY2FsbCBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLlxuXG4vLyBOb3RlIHRoYXQgZm9yIG1heGltdW0gcG9ydGFiaWxpdHksIGxpYnJhcmllcyB0aGF0IGFyZSBub3QgalF1ZXJ5IHNob3VsZFxuLy8gZGVjbGFyZSB0aGVtc2VsdmVzIGFzIGFub255bW91cyBtb2R1bGVzLCBhbmQgYXZvaWQgc2V0dGluZyBhIGdsb2JhbCBpZiBhblxuLy8gQU1EIGxvYWRlciBpcyBwcmVzZW50LiBqUXVlcnkgaXMgYSBzcGVjaWFsIGNhc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3JlcXVpcmVqcy93aWtpL1VwZGF0aW5nLWV4aXN0aW5nLWxpYnJhcmllcyN3aWtpLWFub25cblxuaWYgKCB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCApIHtcblx0ZGVmaW5lKCBcImpxdWVyeVwiLCBbXSwgZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeTtcblx0fSApO1xufVxuXG5cblxuXG52YXJcblxuXHQvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0X2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksXG5cblx0Ly8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0XyQgPSB3aW5kb3cuJDtcblxualF1ZXJ5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiggZGVlcCApIHtcblx0aWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy4kID0gXyQ7XG5cdH1cblxuXHRpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5O1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeTtcbn07XG5cbi8vIEV4cG9zZSBqUXVlcnkgYW5kICQgaWRlbnRpZmllcnMsIGV2ZW4gaW4gQU1EXG4vLyAodHJhYy03MTAyI2NvbW1lbnQ6MTAsIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNTU3KVxuLy8gYW5kIENvbW1vbkpTIGZvciBicm93c2VyIGVtdWxhdG9ycyAodHJhYy0xMzU2NilcbmlmICggdHlwZW9mIG5vR2xvYmFsID09PSBcInVuZGVmaW5lZFwiICkge1xuXHR3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7XG59XG5cblxuXG5cbnJldHVybiBqUXVlcnk7XG59ICk7XG4iLCJ0aW55bWNlLkljb25NYW5hZ2VyLmFkZCgnZGVmYXVsdCcsIHtcbiAgaWNvbnM6IHtcbiAgICAnYWNjZXNzaWJpbGl0eS1jaGVjayc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTIgMmEyIDIgMCAwIDEgMiAyIDIgMiAwIDAgMS0yIDIgMiAyIDAgMCAxLTItMmMwLTEuMS45LTIgMi0yWm04IDdoLTV2MTJjMCAuNi0uNCAxLTEgMWExIDEgMCAwIDEtMS0xdi01YzAtLjYtLjQtMS0xLTFhMSAxIDAgMCAwLTEgMXY1YzAgLjYtLjQgMS0xIDFhMSAxIDAgMCAxLTEtMVY5SDRhMSAxIDAgMSAxIDAtMmgxNmMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMVpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ2FjY29yZGlvbi10b2dnbGUnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTIgMTVjMC0uNi40LTEgMS0xaDZjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFoLTZhMSAxIDAgMCAxLTEtMVpcIi8+PHBhdGggb3BhY2l0eT1cIi4yXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTQgMTVjMC0uNi40LTEgMS0xaDZjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFINWExIDEgMCAwIDEtMS0xWlwiLz48cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTIgMTljMC0uNi40LTEgMS0xaDZjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFoLTZhMSAxIDAgMCAxLTEtMVpcIi8+PHBhdGggb3BhY2l0eT1cIi4yXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTQgMTljMC0uNi40LTEgMS0xaDZjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFINWExIDEgMCAwIDEtMS0xWlwiLz48cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTIuMyA3LjNhMSAxIDAgMCAxIDEuNCAwTDE2IDkuNmwyLjMtMi4zYTEgMSAwIDEgMSAxLjQgMS40TDE2IDEyLjRsLTMuNy0zLjdhMSAxIDAgMCAxIDAtMS40Wk00LjMgMTEuN2ExIDEgMCAwIDEgMC0xLjRMNi42IDggNC4zIDUuN2ExIDEgMCAwIDEgMS40LTEuNEw5LjQgOGwtMy43IDMuN2ExIDEgMCAwIDEtMS40IDBaXCIvPjwvc3ZnPicsXG4gICAgJ2FjY29yZGlvbic6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxyZWN0IHg9XCIxMlwiIHk9XCI3XCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjJcIiByeD1cIjFcIi8+PHJlY3QgeD1cIjEyXCIgeT1cIjExXCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjJcIiByeD1cIjFcIi8+PHJlY3QgeD1cIjEyXCIgeT1cIjE1XCIgd2lkdGg9XCI2XCIgaGVpZ2h0PVwiMlwiIHJ4PVwiMVwiLz48cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMi4zIDcuM2ExIDEgMCAwIDEgMS40IDBMNiA5LjZsMi4zLTIuM2ExIDEgMCAwIDEgMS40IDEuNEw2IDEyLjQgMi4zIDguN2ExIDEgMCAwIDEgMC0xLjRaXCIvPjwvc3ZnPicsXG4gICAgJ2FjdGlvbi1uZXh0JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZmlsbC1ydWxlPVwibm9uemVyb1wiIGQ9XCJNNS43IDcuM2ExIDEgMCAwIDAtMS40IDEuNGw3LjcgNy43IDcuNy03LjdhMSAxIDAgMSAwLTEuNC0xLjRMMTIgMTMuNiA1LjcgNy4zWlwiLz48L3N2Zz4nLFxuICAgICdhY3Rpb24tcHJldic6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGZpbGwtcnVsZT1cIm5vbnplcm9cIiBkPVwiTTE4LjMgMTUuN2ExIDEgMCAwIDAgMS40LTEuNEwxMiA2LjZsLTcuNyA3LjdhMSAxIDAgMCAwIDEuNCAxLjRMMTIgOS40bDYuMyA2LjNaXCIvPjwvc3ZnPicsXG4gICAgJ2FkZHRhZyc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xNSA1YTIgMiAwIDAgMSAxLjYuOEwyMSAxMmwtNC40IDYuMmEyIDIgMCAwIDEtMS42LjhoLTN2LTJoM2wzLjUtNUwxNSA3SDV2M0gzVjdjMC0xLjEuOS0yIDItMmgxMFpcIi8+PHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTYgMTJhMSAxIDAgMCAwLTEgMXYySDNhMSAxIDAgMSAwIDAgMmgydjJhMSAxIDAgMSAwIDIgMHYtMmgyYTEgMSAwIDEgMCAwLTJIN3YtMmMwLS42LS40LTEtMS0xWlwiLz48L3N2Zz4nLFxuICAgICdhaS1wcm9tcHQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48ZyBjbGlwLXBhdGg9XCJ1cmwoI2EpXCI+PHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTE1IDYuN2ExIDEgMCAwIDAtMS40IDBsLTkuOSAxMGExIDEgMCAwIDAgMCAxLjNsMi4xIDIuMWMuNC40IDEgLjQgMS40IDBsMTAtOS45Yy4zLS4zLjMtMSAwLTEuNGwtMi4yLTJabTEuNCAyLjgtMi0yLTMgMi43IDIuMiAyLjIgMi44LTIuOVpcIi8+PHBhdGggZD1cIm0xOC41IDcuMy0uNy0xLjUtMS41LS44IDEuNS0uNy43LTEuNS43IDEuNSAxLjUuNy0xLjUuOC0uNyAxLjVaTTE4LjUgMTYuNWwtLjctMS42LTEuNS0uNyAxLjUtLjcuNy0xLjYuNyAxLjYgMS41LjctMS41LjctLjcgMS42Wk05LjcgNy4zIDkgNS44IDcuNSA1IDkgNC4zbC43LTEuNS43IDEuNUwxMiA1bC0xLjUuOC0uNyAxLjVaXCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9XCJhXCI+PHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIi8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+JyxcbiAgICAnYWknOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNNSAzYTMgMyAwIDAgMC0zIDN2MTJhMyAzIDAgMCAwIDMgM2gxNGEzIDMgMCAwIDAgMy0zVjZhMyAzIDAgMCAwLTMtM0g1Wm02LjggMTEuNS41IDEuMmE2OC4zIDY4LjMgMCAwIDAgLjcgMS4xbC40LjFjLjMgMCAuNSAwIC43LS4zLjItLjEuMy0uMy4zLS42bC0uMy0xLTIuNi02LjJhMjAuNCAyMC40IDAgMCAwLS41LTEuM2wtLjUtLjQtLjctLjJjLS4yIDAtLjUgMC0uNi4yLS4yIDAtLjQuMi0uNS40bC0uMy42LS4zLjdMNS43IDE1bC0uMi42LS4xLjRjMCAuMyAwIC41LjMuN2wuNi4yYy4zIDAgLjUgMCAuNy0uMmwuNC0xIC41LTEuMmgzLjlaTTkuOCA5bDEuNSA0aC0zbDEuNS00Wm01LjYtLjl2Ny42YzAgLjQgMCAuNy4yIDFsLjcuMmMuMyAwIC42IDAgLjgtLjNsLjItLjlWOC4xYzAtLjQgMC0uNy0uMi0uOWExIDEgMCAwIDAtLjgtLjNjLS4yIDAtLjUuMS0uNy4zbC0uMiAxWlwiLz48L3N2Zz4nLFxuICAgICdhbGlnbi1jZW50ZXInOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTUgNWgxNGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMUg1YTEgMSAwIDEgMSAwLTJabTMgNGg4Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxSDhhMSAxIDAgMSAxIDAtMlptMCA4aDhjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFIOGExIDEgMCAwIDEgMC0yWm0tMy00aDE0Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxSDVhMSAxIDAgMCAxIDAtMlpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ2FsaWduLWp1c3RpZnknOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTUgNWgxNGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMUg1YTEgMSAwIDEgMSAwLTJabTAgNGgxNGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMUg1YTEgMSAwIDEgMSAwLTJabTAgNGgxNGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMUg1YTEgMSAwIDAgMSAwLTJabTAgNGgxNGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMUg1YTEgMSAwIDAgMSAwLTJaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdhbGlnbi1sZWZ0JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk01IDVoMTRjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFINWExIDEgMCAxIDEgMC0yWm0wIDRoOGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMUg1YTEgMSAwIDEgMSAwLTJabTAgOGg4Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxSDVhMSAxIDAgMCAxIDAtMlptMC00aDE0Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxSDVhMSAxIDAgMCAxIDAtMlpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ2FsaWduLW5vbmUnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE0LjIgNSAxMyA3SDVhMSAxIDAgMSAxIDAtMmg5LjJabTQgMGguOGExIDEgMCAwIDEgMCAyaC0ybDEuMi0yWm0tNi40IDQtMS4yIDJINWExIDEgMCAwIDEgMC0yaDYuOFptNCAwSDE5YTEgMSAwIDAgMSAwIDJoLTQuNGwxLjItMlptLTYuNCA0LTEuMiAySDVhMSAxIDAgMCAxIDAtMmg0LjRabTQgMEgxOWExIDEgMCAwIDEgMCAyaC02LjhsMS4yLTJaTTcgMTdsLTEuMiAySDVhMSAxIDAgMCAxIDAtMmgyWm00IDBoOGExIDEgMCAwIDEgMCAySDkuOGwxLjItMlptNS4yLTEzLjUgMS4zLjctOS43IDE2LjMtMS4zLS43IDkuNy0xNi4zWlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnYWxpZ24tcmlnaHQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTUgNWgxNGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMUg1YTEgMSAwIDEgMSAwLTJabTYgNGg4Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxaC04YTEgMSAwIDAgMSAwLTJabTAgOGg4Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxaC04YTEgMSAwIDAgMSAwLTJabS02LTRoMTRjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFINWExIDEgMCAwIDEgMC0yWlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnYXJyb3ctbGVmdCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJtNS42IDEzIDEyIDZhMSAxIDAgMCAwIDEuNC0xVjZhMSAxIDAgMCAwLTEuNC0uOWwtMTIgNmExIDEgMCAwIDAgMCAxLjhaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdhcnJvdy1yaWdodCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJtMTguNSAxMy0xMiA2QTEgMSAwIDAgMSA1IDE4VjZhMSAxIDAgMCAxIDEuNC0uOWwxMiA2YTEgMSAwIDAgMSAwIDEuOFpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ2JvbGQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTcuOCAxOWMtLjMgMC0uNSAwLS42LS4ybC0uMi0uNVY1LjdjMC0uMiAwLS40LjItLjVsLjYtLjJoNWMxLjUgMCAyLjcuMyAzLjUgMSAuNy42IDEuMSAxLjQgMS4xIDIuNWEzIDMgMCAwIDEtLjYgMS45Yy0uNC42LTEgMS0xLjYgMS4yLjQuMS45LjMgMS4zLjZzLjguNyAxIDEuMmMuNC40LjUgMSAuNSAxLjYgMCAxLjMtLjQgMi4zLTEuMyAzLS44LjctMi4xIDEtMy44IDFINy44Wm01LTguM2MuNiAwIDEuMi0uMSAxLjYtLjUuNC0uMy42LS43LjYtMS4zIDAtMS4xLS44LTEuNy0yLjMtMS43SDkuM3YzLjVoMy40Wm0uNSA2Yy43IDAgMS4zLS4xIDEuNy0uNC40LS40LjYtLjkuNi0xLjVzLS4yLTEtLjctMS40Yy0uNC0uMy0xLS40LTItLjRIOS40djMuOGg0WlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnYm9va21hcmsnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTYgNHYxN2w2LTQgNiA0VjRjMC0uNi0uNC0xLTEtMUg3YTEgMSAwIDAgMC0xIDFaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdib3JkZXItc3R5bGUnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHJlY3Qgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjJcIiB4PVwiM1wiIHk9XCI2XCIgcng9XCIxXCIvPjxyZWN0IHdpZHRoPVwiMi44XCIgaGVpZ2h0PVwiMlwiIHg9XCIzXCIgeT1cIjE2XCIgcng9XCIxXCIvPjxyZWN0IHdpZHRoPVwiMi44XCIgaGVpZ2h0PVwiMlwiIHg9XCI2LjhcIiB5PVwiMTZcIiByeD1cIjFcIi8+PHJlY3Qgd2lkdGg9XCIyLjhcIiBoZWlnaHQ9XCIyXCIgeD1cIjEwLjZcIiB5PVwiMTZcIiByeD1cIjFcIi8+PHJlY3Qgd2lkdGg9XCIyLjhcIiBoZWlnaHQ9XCIyXCIgeD1cIjE0LjRcIiB5PVwiMTZcIiByeD1cIjFcIi8+PHJlY3Qgd2lkdGg9XCIyLjhcIiBoZWlnaHQ9XCIyXCIgeD1cIjE4LjJcIiB5PVwiMTZcIiByeD1cIjFcIi8+PHJlY3Qgd2lkdGg9XCI4XCIgaGVpZ2h0PVwiMlwiIHg9XCIzXCIgeT1cIjExXCIgcng9XCIxXCIvPjxyZWN0IHdpZHRoPVwiOFwiIGhlaWdodD1cIjJcIiB4PVwiMTNcIiB5PVwiMTFcIiByeD1cIjFcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ2JvcmRlci13aWR0aCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxnIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cmVjdCB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiNVwiIHg9XCIzXCIgeT1cIjVcIiByeD1cIjFcIi8+PHJlY3Qgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjMuNVwiIHg9XCIzXCIgeT1cIjExLjVcIiByeD1cIjFcIi8+PHJlY3Qgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjJcIiB4PVwiM1wiIHk9XCIxN1wiIHJ4PVwiMVwiLz48L2c+PC9zdmc+JyxcbiAgICAnYnJpZ2h0bmVzcyc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTIgMTdjLjMgMCAuNS4xLjcuMy4yLjIuMy40LjMuN3YxYzAgLjMtLjEuNS0uMy43YTEgMSAwIDAgMS0uNy4zIDEgMSAwIDAgMS0uNy0uMyAxIDEgMCAwIDEtLjMtLjd2LTFjMC0uMy4xLS41LjMtLjcuMi0uMi40LS4zLjctLjNabTAtMTBhMSAxIDAgMCAxLS43LS4zQTEgMSAwIDAgMSAxMSA2VjVjMC0uMy4xLS41LjMtLjcuMi0uMi40LS4zLjctLjMuMyAwIC41LjEuNy4zLjIuMi4zLjQuMy43djFjMCAuMy0uMS41LS4zLjdhMSAxIDAgMCAxLS43LjNabTcgNGMuMyAwIC41LjEuNy4zLjIuMi4zLjQuMy43IDAgLjMtLjEuNS0uMy43YTEgMSAwIDAgMS0uNy4zaC0xYTEgMSAwIDAgMS0uNy0uMyAxIDEgMCAwIDEtLjMtLjdjMC0uMy4xLS41LjMtLjcuMi0uMi40LS4zLjctLjNoMVpNNyAxMmMwIC4zLS4xLjUtLjMuN2ExIDEgMCAwIDEtLjcuM0g1YTEgMSAwIDAgMS0uNy0uM0ExIDEgMCAwIDEgNCAxMmMwLS4zLjEtLjUuMy0uNy4yLS4yLjQtLjMuNy0uM2gxYy4zIDAgLjUuMS43LjMuMi4yLjMuNC4zLjdabTEwIDMuNS43LjhjLjIuMS4zLjQuMy42IDAgLjMtLjEuNi0uMy44YTEgMSAwIDAgMS0uOC4zIDEgMSAwIDAgMS0uNi0uM2wtLjgtLjdhMSAxIDAgMCAxLS4zLS44YzAtLjIuMS0uNS4zLS43YTEgMSAwIDAgMSAxLjQgMFptLTEwLTctLjctLjhhMSAxIDAgMCAxLS4zLS42YzAtLjMuMS0uNi4zLS44LjItLjIuNS0uMy44LS4zLjIgMCAuNS4xLjcuM2wuNy43Yy4yLjIuMy41LjMuOCAwIC4yLS4xLjUtLjMuN2ExIDEgMCAwIDEtLjcuMyAxIDEgMCAwIDEtLjgtLjNabTEwIDBhMSAxIDAgMCAxLS44LjMgMSAxIDAgMCAxLS43LS4zIDEgMSAwIDAgMS0uMy0uN2MwLS4zLjEtLjYuMy0uOGwuOC0uN2MuMS0uMi40LS4zLjYtLjMuMyAwIC42LjEuOC4zLjIuMi4zLjUuMy44IDAgLjItLjEuNS0uMy43bC0uNy43Wm0tMTAgN2MuMi0uMi41LS4zLjgtLjMuMiAwIC41LjEuNy4zYTEgMSAwIDAgMSAwIDEuNGwtLjguOGExIDEgMCAwIDEtLjYuMyAxIDEgMCAwIDEtLjgtLjMgMSAxIDAgMCAxLS4zLS44YzAtLjIuMS0uNS4zLS42bC43LS44Wk0xMiA4YTQgNCAwIDAgMSAzLjcgMi40IDQgNCAwIDAgMSAwIDMuMkE0IDQgMCAwIDEgMTIgMTZhNCA0IDAgMCAxLTMuNy0yLjQgNCA0IDAgMCAxIDAtMy4yQTQgNCAwIDAgMSAxMiA4Wm0wIDYuNWMuNyAwIDEuMy0uMiAxLjgtLjcuNS0uNS43LTEuMS43LTEuOHMtLjItMS4zLS43LTEuOGMtLjUtLjUtMS4xLS43LTEuOC0uN3MtMS4zLjItMS44LjdjLS41LjUtLjcgMS4xLS43IDEuOHMuMiAxLjMuNyAxLjhjLjUuNSAxLjEuNyAxLjguN1pcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ2Jyb3dzZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTkgNGEyIDIgMCAwIDEgMiAydjEyYTIgMiAwIDAgMS0yIDJoLTR2LTJoNFY4SDV2MTBoNHYySDVhMiAyIDAgMCAxLTItMlY2YzAtMS4xLjktMiAyLTJoMTRabS04IDkuNC0yLjMgMi4zYTEgMSAwIDEgMS0xLjQtMS40bDQtNGExIDEgMCAwIDEgMS40IDBsNCA0YTEgMSAwIDAgMS0xLjQgMS40TDEzIDEzLjRWMjBhMSAxIDAgMCAxLTIgMHYtNi42WlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnY2FuY2VsJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xMiA0LjZhNy40IDcuNCAwIDEgMSAwIDE0LjggNy40IDcuNCAwIDAgMSAwLTE0LjhaTTEyIDNhOSA5IDAgMSAwIDAgMTggOSA5IDAgMCAwIDAtMThabTAgOEwxNC44IDhsMSAxLjEtMi43IDIuOCAyLjcgMi43LTEuMSAxLjEtMi43LTIuNy0yLjcgMi43LTEtMS4xIDIuNi0yLjctMi43LTIuNyAxLTEuMSAyLjggMi43WlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnY2VsbC1iYWNrZ3JvdW5kLWNvbG9yJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIm0xNS43IDIgMS42IDEuNi0yLjcgMi42IDUuOSA1LjhjLjcuNy43IDEuNyAwIDIuNGwtNi4zIDYuMWExLjcgMS43IDAgMCAxLTIuNCAwbC02LjMtNi4xYy0uNy0uNy0uNy0xLjcgMC0yLjRMMTUuNyAyWk0xOCAxMmwtNC41LTRMOSAxMmg5Wk00IDE2czIgMi40IDIgMy44QzYgMjEgNS4xIDIyIDQgMjJzLTItMS0yLTIuMkMyIDE4LjQgNCAxNiA0IDE2WlwiLz48L3N2Zz4nLFxuICAgICdjZWxsLWJvcmRlci1jb2xvcic6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxnIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIk01IDEzdjVoMnYySDVhMiAyIDAgMCAxLTItMnYtNWgyem04LTdWNGg2YTIgMiAwIDAgMSAyIDJoLTh6XCIgb3BhY2l0eT1cIi4yXCIvPjxwYXRoIGZpbGwtcnVsZT1cIm5vbnplcm9cIiBkPVwiTTEzIDR2Mkg1djdIM1Y2YzAtMS4xLjktMiAyLTJoOHptLTIuNiAxNC4xLjEtLjEuMS4xLjIuMy4yLjIuMi4yYy40LjYuOCAxLjIuOCAxLjcgMCAuOC0uNyAxLjUtMS41IDEuNVM5IDIxLjMgOSAyMC41YzAtLjUuNC0xLjEuOC0xLjdsLjItLjIuMi0uMi4yLS4zelwiLz48cGF0aCBkPVwibTEzIDExLTIgMkg1di0yaDZWNmgyelwiLz48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIm0xOC40IDggMSAxLTEuOCAxLjkgNCA0Yy41LjQuNSAxLjEgMCAxLjZsLTQuMyA0LjJhMS4yIDEuMiAwIDAgMS0xLjYgMGwtNC40LTQuMmMtLjQtLjUtLjQtMS4yIDAtMS43bDctNi44Wm0xLjYgNy0zLTMtMyAzaDZaXCIvPjwvZz48L3N2Zz4nLFxuICAgICdjaGFuZ2UtY2FzZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTguNCAxOC4ydi0uNmMtLjUuOC0xLjMgMS4yLTIuNCAxLjItMi4yIDAtMy4zLTEuNi0zLjMtNC44IDAtMy4xIDEtNC43IDMuMy00LjcgMS4xIDAgMS44LjMgMi40IDEuMXYtLjZjMC0uNS40LS44LjgtLjhzLjguMy44Ljh2OC40YzAgLjUtLjQuOC0uOC44YS44LjggMCAwIDEtLjgtLjh6bS0yLTcuNGMtMS4zIDAtMS44LjktMS44IDMuMiAwIDIuNC41IDMuMyAxLjcgMy4zIDEuMyAwIDEuOC0uOSAxLjgtMy4yIDAtMi40LS41LTMuMy0xLjctMy4zek0xMCAxNS43SDUuNWwtLjggMi42YTEgMSAwIDAgMS0xIC43aC0uMmEuNy43IDAgMCAxLS43LTFsNC0xMmExIDEgMCAwIDEgMiAwbDQgMTJhLjcuNyAwIDAgMS0uOCAxaC0uMmExIDEgMCAwIDEtMS0uN2wtLjgtMi42em0tLjMtMS41LTItNi41LTEuOSA2LjVoMy45elwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnY2hhcmFjdGVyLWNvdW50JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk00IDExLjVoMTZ2MUg0di0xWm00LjgtNi44VjEwSDcuN1Y1LjhoLTF2LTFoMlpNMTEgOC4zVjloMnYxaC0zVjcuN2wyLTF2LS45aC0ydi0xaDN2Mi40bC0yIDFabTYuMy0zLjRWMTBoLTMuMVY5aDIuMVY4aC0yLjFWNi44aDIuMXYtMWgtMi4xdi0xaDMuMVpNNS44IDE2LjRjMC0uNS4yLS44LjUtMSAuMi0uMi42LS4zIDEuMi0uM2wuOC4xYy4yIDAgLjQuMi41LjNsLjQuNHYyLjhsLjIuM0g4LjJWMTguN2wtLjYuM0g3Yy0uNCAwLS43IDAtMS0uMmExIDEgMCAwIDEtLjMtLjljMC0uMyAwLS42LjMtLjguMy0uMi43LS40IDEuMi0uNGwuNi0uMmguM3YtLjJsLS4xLS4yYS44LjggMCAwIDAtLjUtLjEgMSAxIDAgMCAwLS40IDBsLS4zLjRoLTFabTIuMy44aC0uMmwtLjIuMS0uNC4xYTEgMSAwIDAgMC0uNC4ybC0uMi4yLjEuMy41LjFoLjRsLjQtLjR2LS42Wm0yLTMuNGgxLjJ2MS43bC41LS4zaC41Yy41IDAgLjkuMSAxLjIuNS4zLjQuNS44LjUgMS40IDAgLjYtLjIgMS4xLS41IDEuNS0uMy40LS43LjYtMS4zLjZsLS42LS4xLS40LS40di40aC0xLjF2LTUuNFptMS4xIDMuM2MwIC4zIDAgLjYuMi44YS43LjcgMCAwIDAgMS4yIDBsLjItLjhjMC0uNCAwLS42LS4yLS44YS43LjcgMCAwIDAtLjYtLjNsLS42LjMtLjIuOFptNi4xLS41YzAtLjIgMC0uMy0uMi0uNGEuOC44IDAgMCAwLS41LS4yYy0uMyAwLS41LjEtLjYuM2wtLjIuOWMwIC4zIDAgLjYuMi44LjEuMi4zLjMuNi4zLjIgMCAuNCAwIC41LS4ybC4yLS40aDEuMWMwIC41LS4zLjgtLjYgMS4xYTIgMiAwIDAgMS0xLjMuNGMtLjUgMC0xLS4yLTEuMy0uNmEyIDIgMCAwIDEtLjUtMS40YzAtLjYuMS0xLjEuNS0xLjUuMy0uNC44LS41IDEuNC0uNS41IDAgMSAwIDEuMi4zLjQuMy41LjcuNSAxLjJoLTF2LS4xWlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnY2hlY2tsaXN0LXJ0bCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNNSAxN2g4Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxSDVhMSAxIDAgMCAxIDAtMnptMC02aDhjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFINWExIDEgMCAwIDEgMC0yem0wLTZoOGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMUg1YTEgMSAwIDEgMSAwLTJ6bTE0LjIgMTFjLjItLjQuNi0uNS45LS4zLjMuMi40LjYuMiAxTDE4IDIwYy0uMi4zLS43LjQtMSAwbC0xLjMtMS4zYS43LjcgMCAwIDEgMC0xYy4zLS4yLjctLjIgMSAwbC43LjkgMS43LTIuOHptMC02Yy4yLS40LjYtLjUuOS0uMy4zLjIuNC42LjIgMUwxOCAxNGMtLjIuMy0uNy40LTEgMGwtMS4zLTEuM2EuNy43IDAgMCAxIDAtMWMuMy0uMi43LS4yIDEgMGwuNy45IDEuNy0yLjh6bTAtNmMuMi0uNC42LS41LjktLjMuMy4yLjQuNi4yIDFMMTggOGMtLjIuMy0uNy40LTEgMGwtMS4zLTEuM2EuNy43IDAgMCAxIDAtMWMuMy0uMi43LS4yIDEgMGwuNy45IDEuNy0yLjh6XCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdjaGVja2xpc3QnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTExIDE3aDhjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFoLThhMSAxIDAgMCAxIDAtMlptMC02aDhjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFoLThhMSAxIDAgMCAxIDAtMlptMC02aDhhMSAxIDAgMCAxIDAgMmgtOGExIDEgMCAwIDEgMC0yWk03LjIgMTZjLjItLjQuNi0uNS45LS4zLjMuMi40LjYuMiAxTDYgMjBjLS4yLjMtLjcuNC0xIDBsLTEuMy0xLjNhLjcuNyAwIDAgMSAwLTFjLjMtLjIuNy0uMiAxIDBsLjcuOSAxLjctMi44Wm0wLTZjLjItLjQuNi0uNS45LS4zLjMuMi40LjYuMiAxTDYgMTRjLS4yLjMtLjcuNC0xIDBsLTEuMy0xLjNhLjcuNyAwIDAgMSAwLTFjLjMtLjIuNy0uMiAxIDBsLjcuOSAxLjctMi44Wm0wLTZjLjItLjQuNi0uNS45LS4zLjMuMi40LjYuMiAxTDYgOGMtLjIuMy0uNy40LTEgMEwzLjggNi45YS43LjcgMCAwIDEgMC0xYy4zLS4yLjctLjIgMSAwbC43LjkgMS43LTIuOFpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ2NoZWNrbWFyayc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTguMiA1LjRhMSAxIDAgMCAxIDEuNiAxLjJsLTggMTJhMSAxIDAgMCAxLTEuNS4xbC01LTVhMSAxIDAgMSAxIDEuNC0xLjRsNC4xIDQuMSA3LjQtMTFaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdjaGV2cm9uLWRvd24nOiAnPHN2ZyB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIj48cGF0aCBkPVwiTTguNyAyLjJjLjMtLjMuOC0uMyAxIDAgLjQuNC40LjkgMCAxLjJMNS43IDcuOGMtLjMuMy0uOS4zLTEuMiAwTC4yIDMuNGEuOC44IDAgMCAxIDAtMS4yYy4zLS4zLjgtLjMgMS4xIDBMNSA2bDMuNy0zLjhaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdjaGV2cm9uLWxlZnQnOiAnPHN2ZyB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIj48cGF0aCBkPVwiTTcuOCAxLjMgNCA1bDMuOCAzLjdjLjMuMy4zLjggMCAxLS40LjQtLjkuNC0xLjIgMEwyLjIgNS43YS44LjggMCAwIDEgMC0xLjJMNi42LjJDNyAwIDcuNCAwIDcuOC4yYy4zLjMuMy44IDAgMS4xWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnY2hldnJvbi1yaWdodCc6ICc8c3ZnIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMFwiPjxwYXRoIGQ9XCJNMi4yIDEuM2EuOC44IDAgMCAxIDAtMWMuNC0uNC45LS40IDEuMiAwbDQuNCA0LjFjLjMuNC4zLjkgMCAxLjJMMy40IDkuOGMtLjMuMy0uOC4zLTEuMiAwYS44LjggMCAwIDEgMC0xLjFMNiA1IDIuMiAxLjNaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdjaGV2cm9uLXVwJzogJzxzdmcgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCI+PHBhdGggZD1cIk04LjcgNy44IDUgNCAxLjMgNy44Yy0uMy4zLS44LjMtMSAwYS44LjggMCAwIDEgMC0xLjJsNC4xLTQuNGMuMy0uMy45LS4zIDEuMiAwbDQuMiA0LjRjLjMuMy4zLjkgMCAxLjItLjMuMy0uOC4zLTEuMSAwWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnY2xvc2UnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE3LjMgOC4yIDEzLjQgMTJsMy45IDMuOGExIDEgMCAwIDEtMS41IDEuNUwxMiAxMy40bC0zLjggMy45YTEgMSAwIDAgMS0xLjUtMS41bDMuOS0zLjgtMy45LTMuOGExIDEgMCAwIDEgMS41LTEuNWwzLjggMy45IDMuOC0zLjlhMSAxIDAgMCAxIDEuNSAxLjVaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdjb2RlLXNhbXBsZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNlwiPjxwYXRoIGQ9XCJNNy4xIDExYTIuOCAyLjggMCAwIDEtLjggMiAyLjggMi44IDAgMCAxIC44IDJ2MS43YzAgLjMuMS42LjQuOC4yLjMuNS40LjguNC4zIDAgLjQuMi40LjR2LjhjMCAuMi0uMS40LS40LjQtLjcgMC0xLjQtLjMtMi0uOC0uNS0uNi0uOC0xLjMtLjgtMlYxNWMwLS4zLS4xLS42LS40LS44LS4yLS4zLS41LS40LS44LS40YS40LjQgMCAwIDEtLjQtLjR2LS44YzAtLjIuMi0uNC40LS40LjMgMCAuNi0uMS44LS40LjMtLjIuNC0uNS40LS44VjkuM2MwLS43LjMtMS40LjgtMiAuNi0uNSAxLjMtLjggMi0uOC4zIDAgLjQuMi40LjR2LjhjMCAuMi0uMS40LS40LjQtLjMgMC0uNi4xLS44LjQtLjMuMi0uNC41LS40LjhWMTFabTkuOCAwVjkuM2MwLS4zLS4xLS42LS40LS44LS4yLS4zLS41LS40LS44LS40YS40LjQgMCAwIDEtLjQtLjRWN2MwLS4yLjEtLjQuNC0uNC43IDAgMS40LjMgMiAuOC41LjYuOCAxLjMuOCAyVjExYzAgLjMuMS42LjQuOC4yLjMuNS40LjguNC4yIDAgLjQuMi40LjR2LjhjMCAuMi0uMi40LS40LjQtLjMgMC0uNi4xLS44LjQtLjMuMi0uNC41LS40Ljh2MS43YzAgLjctLjMgMS40LS44IDItLjYuNS0xLjMuOC0yIC44YS40LjQgMCAwIDEtLjQtLjR2LS44YzAtLjIuMS0uNC40LS40LjMgMCAuNi0uMS44LS40LjMtLjIuNC0uNS40LS44VjE1YTIuOCAyLjggMCAwIDEgLjgtMiAyLjggMi44IDAgMCAxLS44LTJabS0zLjMtLjRjMCAuNC0uMS44LS41IDEuMS0uMy4zLS43LjUtMS4xLjUtLjQgMC0uOC0uMi0xLjEtLjUtLjQtLjMtLjUtLjctLjUtMS4xIDAtLjUuMS0uOS41LTEuMi4zLS4zLjctLjQgMS4xLS40LjQgMCAuOC4xIDEuMS40LjQuMy41LjcuNSAxLjJaTTEyIDEzYy40IDAgLjguMSAxLjEuNS40LjMuNS43LjUgMS4xIDAgMS0uMSAxLjYtLjUgMmEzIDMgMCAwIDEtMS4xIDFjLS40LjMtLjguNC0xLjEuNGEuNS41IDAgMCAxLS41LS41VjE3YTMgMyAwIDAgMCAxLS4ybC42LS42Yy0uNiAwLTEtLjItMS4zLS41LS4yLS4zLS4zLS43LS4zLTEgMC0uNS4xLTEgLjUtMS4yLjMtLjQuNy0uNSAxLjEtLjVaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdjb2xvci1sZXZlbHMnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE3LjUgMTEuNEE5IDkgMCAwIDEgMTggMTRjMCAuNSAwIDEtLjIgMS40IDAgLjQtLjMuOS0uNSAxLjNhNi4yIDYuMiAwIDAgMS0zLjcgMyA1LjcgNS43IDAgMCAxLTMuMiAwQTUuOSA1LjkgMCAwIDEgNy42IDE4YTYuMiA2LjIgMCAwIDEtMS40LTIuNiA2LjcgNi43IDAgMCAxIDAtMi44YzAtLjQuMS0uOS4zLTEuM2ExMy42IDEzLjYgMCAwIDEgMi4zLTRBMjAgMjAgMCAwIDEgMTIgNGEyNi40IDI2LjQgMCAwIDEgMy4yIDMuNCAxOC4yIDE4LjIgMCAwIDEgMi4zIDRabS0yIDQuNWMuNC0uNy41LTEuNC41LTJhNy4zIDcuMyAwIDAgMC0xLTMuMmMuMi42LjIgMS4yLjIgMS45YTQuNSA0LjUgMCAwIDEtMS4zIDMgNS4zIDUuMyAwIDAgMS0yLjMgMS41IDQuOSA0LjkgMCAwIDEtMiAuMSA0LjMgNC4zIDAgMCAwIDIuNC44IDQgNCAwIDAgMCAyLS42IDQgNCAwIDAgMCAxLjUtMS41WlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnY29sb3ItcGlja2VyJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xMiAzYTkgOSAwIDAgMCAwIDE4IDEuNSAxLjUgMCAwIDAgMS4xLTIuNWMtLjItLjMtLjQtLjYtLjQtMSAwLS44LjctMS41IDEuNS0xLjVIMTZhNSA1IDAgMCAwIDUtNWMwLTQuNC00LTgtOS04Wm0tNS41IDlhMS41IDEuNSAwIDEgMSAwLTMgMS41IDEuNSAwIDAgMSAwIDNabTMtNGExLjUgMS41IDAgMSAxIDAtMyAxLjUgMS41IDAgMCAxIDAgM1ptNSAwYTEuNSAxLjUgMCAxIDEgMC0zIDEuNSAxLjUgMCAwIDEgMCAzWm0zIDRhMS41IDEuNSAwIDEgMSAwLTMgMS41IDEuNSAwIDAgMSAwIDNaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdjb2xvci1zd2F0Y2gtcmVtb3ZlLWNvbG9yJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjJcIiBkPVwiTTIxIDMgMyAyMVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnY29sb3Itc3dhdGNoJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHJlY3QgeD1cIjNcIiB5PVwiM1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHJ4PVwiMVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnY29tbWVudC1hZGQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48ZyBmaWxsLXJ1bGU9XCJub256ZXJvXCI+PHBhdGggZD1cIm05IDE5IDMtMmg3Yy42IDAgMS0uNCAxLTFWNmMwLS42LS40LTEtMS0xSDVhMSAxIDAgMCAwLTEgMXYxMGMwIC42LjQgMSAxIDFoNHYyWm0tMiA0di00SDVhMyAzIDAgMCAxLTMtM1Y2YTMgMyAwIDAgMSAzLTNoMTRhMyAzIDAgMCAxIDMgM3YxMGEzIDMgMCAwIDEtMyAzaC02LjRMNyAyM1pcIi8+PHBhdGggZD1cIk0xMyAxMGgyYTEgMSAwIDAgMSAwIDJoLTJ2MmExIDEgMCAwIDEtMiAwdi0ySDlhMSAxIDAgMCAxIDAtMmgyVjhhMSAxIDAgMCAxIDIgMHYyWlwiLz48L2c+PC9zdmc+JyxcbiAgICAnY29tbWVudCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGZpbGwtcnVsZT1cIm5vbnplcm9cIiBkPVwibTkgMTkgMy0yaDdjLjYgMCAxLS40IDEtMVY2YzAtLjYtLjQtMS0xLTFINWExIDEgMCAwIDAtMSAxdjEwYzAgLjYuNCAxIDEgMWg0djJabS0yIDR2LTRINWEzIDMgMCAwIDEtMy0zVjZhMyAzIDAgMCAxIDMtM2gxNGEzIDMgMCAwIDEgMyAzdjEwYTMgMyAwIDAgMS0zIDNoLTYuNEw3IDIzWlwiLz48L3N2Zz4nLFxuICAgICdjb250cmFzdCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTIgNGE3LjggNy44IDAgMCAxIDUuNyAyLjNBOCA4IDAgMSAxIDEyIDRabS02IDhhNiA2IDAgMCAwIDYgNlY2YTYgNiAwIDAgMC02IDZaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdjb3B5JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xNiAzSDZhMiAyIDAgMCAwLTIgMnYxMWgyVjVoMTBWM1ptMSA0YTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMmgtN2EyIDIgMCAwIDEtMi0yVjljMC0xLjIuOS0yIDItMmg3Wm0wIDEyVjloLTd2MTBoN1pcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ2Nyb3AnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE3IDh2N2gyYy42IDAgMSAuNCAxIDFzLS40IDEtMSAxaC0ydjJjMCAuNi0uNCAxLTEgMWExIDEgMCAwIDEtMS0xdi0ySDdWOUg1YTEgMSAwIDEgMSAwLTJoMlY1YzAtLjYuNC0xIDEtMXMxIC40IDEgMXYyaDdsMy0zIDEgMS0zIDNaTTkgOXY1bDUtNUg5Wm0xIDZoNXYtNWwtNSA1WlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnY3V0LWNvbHVtbic6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTcuMiA0LjVjLjkgMCAxLjYuNCAyLjIgMUEzLjcgMy43IDAgMCAxIDEwLjUgOHYuNWwxIDEgNC00IDEtLjVhMy4zIDMuMyAwIDAgMSAyIDBjLjQgMCAuNy4zIDEgLjVMMTcgOGg0djEzaC02VjEwbC0xLjUgMS41LjUuNXY0bC0yLjUtMi41LTEgMXYuNWMwIC40IDAgLjgtLjMgMS4yLS4yLjUtLjQuOS0uOCAxLjItLjYuNy0xLjMgMS0yLjIgMS0uOC4yLTEuNSAwLTItLjZsLS41LS44LS4yLTFjMC0uNCAwLS44LjMtMS4yQTMuOSAzLjkgMCAwIDEgNyAxMi43Yy41LS4yIDEtLjMgMS41LS4ybDEtMS0xLTFjLS41IDAtMSAwLTEuNS0uMi0uNS0uMS0xLS40LTEuNC0uOS0uNC0uMy0uNi0uNy0uOC0xLjJMNC41IDdjMC0uNCAwLS43LjItMSAwLS4zLjMtLjYuNS0uOC41LS41IDEuMi0uOCAyLS43Wm0xMi4zIDVoLTN2MTBoM3YtMTBaTTggMTMuOGgtLjNsLS40LjJhMi44IDIuOCAwIDAgMC0uNy40di4xYTIuOCAyLjggMCAwIDAtLjYuOGwtLjEuNHYuN2wuMi41LjUuMmguN2EyLjYgMi42IDAgMCAwIC44LS4zIDIuNCAyLjQgMCAwIDAgLjctLjcgMi41IDIuNSAwIDAgMCAuMy0uOCAxLjUgMS41IDAgMCAwIDAtLjggMSAxIDAgMCAwLS4yLS40IDEgMSAwIDAgMC0uNS0uMkg4Wm0zLjUtMy43Yy0uNCAwLS43LjEtMSAuNC0uMy4zLS40LjYtLjQgMXMuMS43LjQgMWMuMy4zLjYuNCAxIC40cy43LS4xIDEtLjRjLjMtLjMuNC0uNi40LTFzLS4xLS43LS40LTFjLS4zLS4zLS42LS40LTEtLjRaTTcgNS44aC0uNGExIDEgMCAwIDAtLjUuMyAxIDEgMCAwIDAtLjIuNXYuN2EyLjUgMi41IDAgMCAwIC4zLjhsLjIuM2guMWwuNC40LjQuMi40LjFoLjdMOSA5bC4yLS40YTEuNiAxLjYgMCAwIDAgMC0uOCAyLjYgMi42IDAgMCAwLS4zLS44QTIuNSAyLjUgMCAwIDAgNy43IDZsLS40LS4xSDdaXCIvPjwvc3ZnPicsXG4gICAgJ2N1dC1yb3cnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0yMiAzdjVIOWwzIDMgMi0yaDRsLTQgNCAxIDFoLjVjLjQgMCAuOCAwIDEuMi4zLjUuMi45LjQgMS4yLjguNy42IDEgMS4zIDEgMi4yLjIuOCAwIDEuNS0uNiAybC0uOC41LTEgLjJjLS40IDAtLjggMC0xLjItLjNhMy45IDMuOSAwIDAgMS0yLjEtMi4yYy0uMi0uNS0uMy0xLS4yLTEuNWwtMS0xLTEgMWMwIC41IDAgMS0uMiAxLjUtLjEuNS0uNCAxLS45IDEuNC0uMy40LS43LjYtMS4yLjhsLTEuMi4zYy0uNCAwLS43IDAtMS0uMi0uMyAwLS42LS4zLS44LS41LS41LS41LS44LTEuMi0uNy0yIDAtLjkuNC0xLjYgMS0yLjJBMy43IDMuNyAwIDAgMSA4LjYgMTRIOWwxLTEtNC00LS41LTFhMy4zIDMuMyAwIDAgMSAwLTJjMC0uNC4zLS43LjUtMWwyIDJWM2gxNFpNOC41IDE1LjNoLS4zYTIuNiAyLjYgMCAwIDAtLjguNCAyLjUgMi41IDAgMCAwLS45IDEuMWwtLjEuNHYuN2wuMi41LjUuMmguN2EyLjUgMi41IDAgMCAwIC44LS4zTDkgMThWMThsLjQtLjQuMi0uNC4xLS40di0uN2ExIDEgMCAwIDAtLjItLjUgMSAxIDAgMCAwLS40LS4yaC0uNVptNyAwSDE1YTEgMSAwIDAgMC0uNC4zIDEgMSAwIDAgMC0uMi41IDEuNSAxLjUgMCAwIDAgMCAuN3YuNGEyLjggMi44IDAgMCAwIC41LjdoLjFhMi44IDIuOCAwIDAgMCAuOC42bC40LjFoLjdsLjUtLjIuMi0uNXYtLjdhMi42IDIuNiAwIDAgMC0uMy0uOCAyLjQgMi40IDAgMCAwLS43LS43IDIuNSAyLjUgMCAwIDAtLjgtLjNoLS4zWk0xMiAxMS42Yy0uNCAwLS43LjEtMSAuNC0uMy4zLS40LjYtLjQgMXMuMS43LjQgMWMuMy4zLjYuNCAxIC40cy43LS4xIDEtLjRjLjMtLjMuNC0uNi40LTFzLS4xLS43LS40LTFjLS4zLS4zLS42LS40LTEtLjRabTguNS03LjFoLTExdjJoMTF2LTJaXCIvPjwvc3ZnPicsXG4gICAgJ2N1dCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTggMTVjLjYuNyAxIDEuNCAxIDIuMyAwIC44LS4yIDEuNS0uNyAybC0uOC41LTEgLjJjLS40IDAtLjggMC0xLjItLjNhMy45IDMuOSAwIDAgMS0yLjEtMi4yYy0uMi0uNS0uMy0xLS4yLTEuNWwtMS0xLTEgMWMwIC41IDAgMS0uMiAxLjUtLjEuNS0uNCAxLS45IDEuNC0uMy40LS43LjYtMS4yLjhsLTEuMi4zYy0uNCAwLS43IDAtMS0uMi0uMyAwLS42LS4zLS44LS41LS41LS41LS44LTEuMi0uNy0yIDAtLjkuNC0xLjYgMS0yLjJBMy43IDMuNyAwIDAgMSA4LjYgMTRIOWwxLTEtNC00LS41LTFhMy4zIDMuMyAwIDAgMSAwLTJjMC0uNC4zLS43LjUtMWw2IDYgNi02IC41IDFhMy4zIDMuMyAwIDAgMSAwIDJjMCAuNC0uMy43LS41IDFsLTQgNCAxIDFoLjVjLjQgMCAuOCAwIDEuMi4zLjUuMi45LjQgMS4yLjhabS04LjUgMi4yLjEtLjR2LS43YTEgMSAwIDAgMC0uMi0uNSAxIDEgMCAwIDAtLjQtLjIgMS42IDEuNiAwIDAgMC0uOCAwIDIuNiAyLjYgMCAwIDAtLjguMyAyLjUgMi41IDAgMCAwLS45IDEuMWwtLjEuNHYuN2wuMi41LjUuMmguN2EyLjUgMi41IDAgMCAwIC44LS4zIDIuOCAyLjggMCAwIDAgMS0xWm0yLjUtMi44Yy40IDAgLjctLjEgMS0uNC4zLS4zLjQtLjYuNC0xcy0uMS0uNy0uNC0xYy0uMy0uMy0uNi0uNC0xLS40cy0uNy4xLTEgLjRjLS4zLjMtLjQuNi0uNCAxcy4xLjcuNCAxYy4zLjMuNi40IDEgLjRabTUuNCA0IC4yLS41di0uN2EyLjYgMi42IDAgMCAwLS4zLS44IDIuNCAyLjQgMCAwIDAtLjctLjcgMi41IDIuNSAwIDAgMC0uOC0uMyAxLjUgMS41IDAgMCAwLS44IDAgMSAxIDAgMCAwLS40LjIgMSAxIDAgMCAwLS4yLjUgMS41IDEuNSAwIDAgMCAwIC43di40bC4zLjQuMy40YTIuOCAyLjggMCAwIDAgLjguNWwuNC4xaC43bC41LS4yWlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnZG9jdW1lbnQtcHJvcGVydGllcyc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTQuNCAzSDdhMiAyIDAgMCAwLTIgMnYxNGMwIDEuMS45IDIgMiAyaDEwYTIgMiAwIDAgMCAyLTJWNy42TDE0LjQgM1pNMTcgMTlIN1Y1aDZ2NGg0djEwWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnZHJhZyc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTMgNWgydjJoLTJWNVptMCA0aDJ2MmgtMlY5Wk05IDloMnYySDlWOVptNCA0aDJ2MmgtMnYtMlptLTQgMGgydjJIOXYtMlptMCA0aDJ2Mkg5di0yWm00IDBoMnYyaC0ydi0yWk05IDVoMnYySDlWNVpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ2R1cGxpY2F0ZS1jb2x1bW4nOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE3IDZ2MTZoLTdWNmg3Wm0tMiAyaC0zdjEyaDNWOFptLTItNnYySDh2MTVINlYyaDdaXCIvPjwvc3ZnPicsXG4gICAgJ2R1cGxpY2F0ZS1yb3cnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTIyIDExdjdINnYtN2gxNlptLTIgMkg4djNoMTJ2LTNabS0xLTZ2Mkg0djVIMlY3aDE3WlwiLz48L3N2Zz4nLFxuICAgICdkdXBsaWNhdGUnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48ZyBmaWxsLXJ1bGU9XCJub256ZXJvXCI+PHBhdGggZD1cIk0xNiAzdjJINnYxMUg0VjVjMC0xLjEuOS0yIDItMmgxMFptMyA4aC0yVjloLTd2MTBoOWEyIDIgMCAwIDEtMiAyaC03YTIgMiAwIDAgMS0yLTJWOWMwLTEuMi45LTIgMi0yaDdhMiAyIDAgMCAxIDIgMnYyWlwiLz48cGF0aCBkPVwiTTE3IDE0aDFhMSAxIDAgMCAxIDAgMmgtMXYxYTEgMSAwIDAgMS0yIDB2LTFoLTFhMSAxIDAgMCAxIDAtMmgxdi0xYTEgMSAwIDAgMSAyIDB2MVpcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ2VkaXQtYmxvY2snOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIm0xOS44IDguOC05LjQgOS40Yy0uMi4yLS41LjQtLjkuNGwtNS40IDEuMiAxLjItNS40LjUtLjggOS40LTkuNGMuNy0uNyAxLjgtLjcgMi41IDBsMi4xIDIuMWMuNy43LjcgMS44IDAgMi41Wm0tMi0uMiAxLS45di0uM2wtMi4yLTIuMmEuMy4zIDAgMCAwLS4zIDBsLTEgMUwxOCA4LjVabS0xIDEtMi41LTIuNC02IDYgMi41IDIuNSA2LTZabS03IDcuMS0yLjYtMi40LS4zLjMtLjEuMi0uNyAzIDMuMS0uNmguMWwuNC0uNVpcIi8+PC9zdmc+JyxcbiAgICAnZWRpdC1pbWFnZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTggMTZoMlY3YTIgMiAwIDAgMC0yLTJIN3YyaDExdjlaTTYgMTdoMTVhMSAxIDAgMCAxIDAgMmgtMXYxYTEgMSAwIDAgMS0yIDB2LTFINmEyIDIgMCAwIDEtMi0yVjdIM2ExIDEgMCAxIDEgMC0yaDFWNGExIDEgMCAxIDEgMiAwdjEzWm0zLTUuMyAxLjMgMiAzLTQuNyAzLjcgNkg3bDItMy4zWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnZW1iZWQtcGFnZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTkgNlY1SDV2MTRoMkExMyAxMyAwIDAgMSAxOSA2Wm0wIDEuNGMtLjguOC0xLjYgMi40LTIuMiA0LjZIMTlWNy40Wm0wIDUuNmgtMi40Yy0uNCAxLjgtLjYgMy44LS42IDZoM3YtNlptLTQgNmMwLTIuMi4yLTQuMi42LTZIMTNjLS43IDEuOC0xLjEgMy44LTEuMSA2aDNabS00IDBjMC0yLjIuNC00LjIgMS02SDkuNkExMiAxMiAwIDAgMCA4IDE5aDNaTTQgM2gxNmMuNiAwIDEgLjQgMSAxdjE2YzAgLjYtLjQgMS0xIDFINGExIDEgMCAwIDEtMS0xVjRjMC0uNi40LTEgMS0xWm0xMS44IDljLjQtMS45IDEtMy40IDEuOC00LjVhOS4yIDkuMiAwIDAgMC00IDQuNWgyLjJabS0zLjQgMGExMiAxMiAwIDAgMSAyLjgtNCAxMiAxMiAwIDAgMC01IDRoMi4yWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnZW1iZWQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTQgM2gxNmMuNiAwIDEgLjQgMSAxdjE2YzAgLjYtLjQgMS0xIDFINGExIDEgMCAwIDEtMS0xVjRjMC0uNi40LTEgMS0xWm0xIDJ2MTRoMTRWNUg1Wm00LjggMi42IDUuNiA0YS41LjUgMCAwIDEgMCAuOGwtNS42IDRBLjUuNSAwIDAgMSA5IDE2VjhhLjUuNSAwIDAgMSAuOC0uNFpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ2Vtb2ppJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk05IDExYy42IDAgMS0uNCAxLTFzLS40LTEtMS0xYTEgMSAwIDAgMC0xIDFjMCAuNi40IDEgMSAxWm02IDBjLjYgMCAxLS40IDEtMXMtLjQtMS0xLTFhMSAxIDAgMCAwLTEgMWMwIC42LjQgMSAxIDFabS0zIDUuNWMyLjEgMCA0LTEuNSA0LjQtMy41SDcuNmMuNSAyIDIuMyAzLjUgNC40IDMuNVpNMTIgNGE4IDggMCAxIDAgMCAxNiA4IDggMCAwIDAgMC0xNlptMCAxNC41YTYuNSA2LjUgMCAxIDEgMC0xMyA2LjUgNi41IDAgMCAxIDAgMTNaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdleHBvcnQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48ZyBmaWxsLXJ1bGU9XCJub256ZXJvXCI+PHBhdGggZD1cIk0xNC40IDMgMTggN3YxaC01VjVIN3YxNGg5YTEgMSAwIDAgMSAyIDBjMCAxLS44IDItMS45IDJIN2MtMSAwLTItLjgtMi0xLjlWNWMwLTEgLjgtMiAxLjktMmg3LjVaXCIvPjxwYXRoIGQ9XCJNMTguMSAxMmMuNSAwIC45LjQuOSAxIDAgLjUtLjMgMS0uOCAxaC03LjNjLS41IDAtLjktLjQtLjktMSAwLS41LjMtMSAuOC0xaDcuM1pcIi8+PHBhdGggZD1cIk0xNi40IDkuMmExIDEgMCAwIDEgMS40LjJsMi40IDMuNi0yLjQgMy42YTEgMSAwIDAgMS0xLjctMXYtLjJsMS43LTIuNC0xLjYtMi40YTEgMSAwIDAgMSAuMi0xLjRaXCIvPjwvZz48L3N2Zz4nLFxuICAgICdmaWxsJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI2XCI+PHBhdGggZD1cIm0xNi42IDEyLTktOS0xLjQgMS40IDIuNCAyLjQtNS4yIDUuMWMtLjUuNi0uNSAxLjYgMCAyLjJMOSAxOS42YTEuNSAxLjUgMCAwIDAgMi4yIDBsNS41LTUuNWMuNS0uNi41LTEuNiAwLTIuMlpNNS4yIDEzIDEwIDguMmw0LjggNC44SDUuMlpNMTkgMTQuNXMtMiAyLjItMiAzLjVjMCAxLjEuOSAyIDIgMmEyIDIgMCAwIDAgMi0yYzAtMS4zLTItMy41LTItMy41WlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnZmxpcC1ob3Jpem9udGFsbHknOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE0IDE5aDJ2LTJoLTJ2MlptNC04aDJWOWgtMnYyWk00IDd2MTBjMCAxLjEuOSAyIDIgMmgzdi0ySDZWN2gzVjVINmEyIDIgMCAwIDAtMiAyWm0xNC0ydjJoMmEyIDIgMCAwIDAtMi0yWm0tNyAxNmgyVjNoLTJ2MThabTctNmgydi0yaC0ydjJabS00LThoMlY1aC0ydjJabTQgMTJhMiAyIDAgMCAwIDItMmgtMnYyWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnZmxpcC12ZXJ0aWNhbGx5JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk01IDE0djJoMnYtMkg1Wm04IDR2Mmgydi0yaC0yWm00LTE0SDdhMiAyIDAgMCAwLTIgMnYzaDJWNmgxMHYzaDJWNmEyIDIgMCAwIDAtMi0yWm0yIDE0aC0ydjJhMiAyIDAgMCAwIDItMlpNMyAxMXYyaDE4di0ySDNabTYgN3YyaDJ2LTJIOVptOC00djJoMnYtMmgtMlpNNSAxOGMwIDEuMS45IDIgMiAydi0ySDVaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdmb290bm90ZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTkgMTNjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFINWExIDEgMCAxIDEgMC0yaDE0WlwiLz48cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTkgNHY2aC0xVjVoLTEuNVY0aDIuNlpcIi8+PHBhdGggZD1cIk0xMiAxOGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMUg1YTEgMSAwIDEgMSAwLTJoN1pNMTQgOGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMUg1YTEgMSAwIDAgMSAwLTJoOVpcIi8+PC9zdmc+JyxcbiAgICAnZm9ybWF0LXBhaW50ZXInOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE4IDVWNGMwLS41LS40LTEtMS0xSDVhMSAxIDAgMCAwLTEgMXY0YzAgLjYuNSAxIDEgMWgxMmMuNiAwIDEtLjQgMS0xVjdoMXY0SDl2OWMwIC42LjQgMSAxIDFoMmMuNiAwIDEtLjQgMS0xdi03aDhWNWgtM1pcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ2Zvcm1hdCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTE3IDVhMSAxIDAgMCAxIDAgMmgtNHYxMWExIDEgMCAwIDEtMiAwVjdIN2ExIDEgMCAxIDEgMC0yaDEwWlwiLz48L3N2Zz4nLFxuICAgICdmdWxsc2NyZWVuJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIm0xNS4zIDEwLTEuMi0xLjMgMi45LTNoLTIuM2EuOS45IDAgMSAxIDAtMS43SDE5Yy41IDAgLjkuNC45Ljl2NC40YS45LjkgMCAxIDEtMS44IDBWN2wtMi45IDNabTAgNCAzIDN2LTIuM2EuOS45IDAgMSAxIDEuNyAwVjE5YzAgLjUtLjQuOS0uOS45aC00LjRhLjkuOSAwIDEgMSAwLTEuOEgxN2wtMy0yLjkgMS4zLTEuMlpNMTAgMTUuNGwtMi45IDNoMi4zYS45LjkgMCAxIDEgMCAxLjdINWEuOS45IDAgMCAxLS45LS45di00LjRhLjkuOSAwIDEgMSAxLjggMFYxN2wyLjktMyAxLjIgMS4zWk04LjcgMTAgNS43IDd2Mi4zYS45LjkgMCAwIDEtMS43IDBWNWMwLS41LjQtLjkuOS0uOWg0LjRhLjkuOSAwIDAgMSAwIDEuOEg3bDMgMi45LTEuMyAxLjJaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdnYWxsZXJ5JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZmlsbC1ydWxlPVwibm9uemVyb1wiIGQ9XCJtNSAxNS43IDIuMy0yLjJjLjMtLjMuNy0uMyAxIDBMMTEgMTZsNS4xLTVjLjMtLjQuOC0uNCAxIDBsMiAxLjlWOEg1djcuN1pNNSAxOFYxOWgzbDEuOC0xLjktMi0yTDUgMTcuOVptMTQtMy0yLjUtMi40LTYuNCA2LjVIMTl2LTRaTTQgNmgxNmMuNiAwIDEgLjQgMSAxdjEzYzAgLjYtLjQgMS0xIDFINGExIDEgMCAwIDEtMS0xVjdjMC0uNi40LTEgMS0xWm02IDdhMiAyIDAgMSAxIDAtNCAyIDIgMCAwIDEgMCA0Wk00LjUgNGgxNWEuNS41IDAgMSAxIDAgMWgtMTVhLjUuNSAwIDAgMSAwLTFabTItMmgxMWEuNS41IDAgMSAxIDAgMWgtMTFhLjUuNSAwIDAgMSAwLTFaXCIvPjwvc3ZnPicsXG4gICAgJ2dhbW1hJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk00IDNoMTZjLjYgMCAxIC40IDEgMXYxNmMwIC42LS40IDEtMSAxSDRhMSAxIDAgMCAxLTEtMVY0YzAtLjYuNC0xIDEtMVptMSAydjE0aDE0VjVINVptNi41IDExLjhWMTRMOS4yIDguN2E1LjEgNS4xIDAgMCAwLS40LS44bC0uMS0uMkg4di0xbC4zLS4xLjMtLjFoLjdhMSAxIDAgMCAxIC42LjVsLjEuM2E4LjUgOC41IDAgMCAxIC4zLjZsMS45IDQuNiAyLTUuMmExIDEgMCAwIDEgMS0uNi41LjUgMCAwIDEgLjUuNkwxMyAxNHYyLjhhLjcuNyAwIDAgMS0xLjQgMFpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ2hlbHAnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHBhdGggZD1cIk0xMiA1LjVhNi41IDYuNSAwIDAgMC02IDkgNi4zIDYuMyAwIDAgMCAxLjQgMmwxIDFhNi4zIDYuMyAwIDAgMCAzLjYgMSA2LjUgNi41IDAgMCAwIDYtOSA2LjMgNi4zIDAgMCAwLTEuNC0ybC0xLTFhNi4zIDYuMyAwIDAgMC0zLjYtMVpNMTIgNGE3LjggNy44IDAgMCAxIDUuNyAyLjNBOCA4IDAgMSAxIDEyIDRaXCIvPjxwYXRoIGQ9XCJNOS42IDkuN2EuNy43IDAgMCAxLS43LS44YzAtMS4xIDEuNS0xLjggMy4yLTEuOCAxLjggMCAzLjIuOCAzLjIgMi40IDAgMS40LS40IDIuMS0xLjUgMi44LS4yIDAtLjMuMS0uMy4yYTIgMiAwIDAgMC0uOC44LjguOCAwIDAgMS0xLjQtLjZjLjMtLjcuOC0xIDEuMy0xLjVsLjQtLjJjLjctLjQuOC0uNi44LTEuNSAwLS41LS42LS45LTEuNy0uOS0uNSAwLTEgLjEtMS40LjMtLjIgMC0uMy4xLS4zLjJ2LS4yYzAgLjQtLjQuOC0uOC44WlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxNlwiIHI9XCIxXCIvPjwvZz48L3N2Zz4nLFxuICAgICdoaWdobGlnaHQtYmctY29sb3InOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHBhdGggY2xhc3M9XCJ0b3gtaWNvbi1oaWdobGlnaHQtYmctY29sb3JfX2NvbG9yXCIgZD1cIk0zIDE4aDE4djNIM3pcIi8+PHBhdGggZmlsbC1ydWxlPVwibm9uemVyb1wiIGQ9XCJNNy43IDE2LjdIM2wzLjMtMy4zLS43LS44TDEwLjIgOGw0IDQuMS00IDQuMmMtLjIuMi0uNi4yLS44IDBsLS42LS43LTEuMSAxLjF6bTUtNy41TDExIDcuNGwzLTIuOWEyIDIgMCAwIDEgMi42IDBMMTggNmMuNy43LjcgMiAwIDIuN2wtMi45IDIuOS0xLjgtMS44LS41LS42XCIvPjwvZz48L3N2Zz4nLFxuICAgICdob21lJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZmlsbC1ydWxlPVwibm9uemVyb1wiIGQ9XCJNMTAgMjB2LTZoNHY2aDV2LThoM0wxMiAzIDIgMTJoM3Y4elwiLz48L3N2Zz4nLFxuICAgICdob3Jpem9udGFsLXJ1bGUnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTQgMTFoMTZ2Mkg0elwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnaW1hZ2Utb3B0aW9ucyc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNNiAxMGEyIDIgMCAwIDAtMiAyYzAgMS4xLjkgMiAyIDJhMiAyIDAgMCAwIDItMiAyIDIgMCAwIDAtMi0yWm0xMiAwYTIgMiAwIDAgMC0yIDJjMCAxLjEuOSAyIDIgMmEyIDIgMCAwIDAgMi0yIDIgMiAwIDAgMC0yLTJabS02IDBhMiAyIDAgMCAwLTIgMmMwIDEuMS45IDIgMiAyYTIgMiAwIDAgMCAyLTIgMiAyIDAgMCAwLTItMlpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ2ltYWdlJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIm01IDE1LjcgMy4zLTMuMmMuMy0uMy43LS4zIDEgMEwxMiAxNWw0LjEtNGMuMy0uNC44LS40IDEgMGwyIDEuOVY1SDV2MTAuN1pNNSAxOFYxOWgzbDIuOC0yLjktMi0yTDUgMTcuOVptMTQtMy0yLjUtMi40LTYuNCA2LjVIMTl2LTRaTTQgM2gxNmMuNiAwIDEgLjQgMSAxdjE2YzAgLjYtLjQgMS0xIDFINGExIDEgMCAwIDEtMS0xVjRjMC0uNi40LTEgMS0xWm02IDhhMiAyIDAgMSAwIDAtNCAyIDIgMCAwIDAgMCA0WlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnaW5kZW50JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk03IDVoMTJjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFIN2ExIDEgMCAxIDEgMC0yWm01IDRoN2MuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMWgtN2ExIDEgMCAwIDEgMC0yWm0wIDRoN2MuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMWgtN2ExIDEgMCAwIDEgMC0yWm0tNSA0aDEyYTEgMSAwIDAgMSAwIDJIN2ExIDEgMCAwIDEgMC0yWm0tMi42LTMuOEw2LjIgMTJsLTEuOC0xLjJhMSAxIDAgMCAxIDEuMi0xLjZsMyAyYTEgMSAwIDAgMSAwIDEuNmwtMyAyYTEgMSAwIDEgMS0xLjItMS42WlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnaW5mbyc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTIgNGE3LjggNy44IDAgMCAxIDUuNyAyLjNBOCA4IDAgMSAxIDEyIDRabS0xIDN2MmgyVjdoLTJabTMgMTB2LTFoLTF2LTVoLTN2MWgxdjRoLTF2MWg0WlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnaW5zZXJ0LWNoYXJhY3Rlcic6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTUgMThoNGwxLTJ2NGgtNnYtMy4zbDEuNC0xYTYgNiAwIDAgMCAxLjgtMi45IDYuMyA2LjMgMCAwIDAtLjEtNC4xIDUuOCA1LjggMCAwIDAtMy0zLjJjLS42LS4zLTEuMy0uNS0yLjEtLjVhNS4xIDUuMSAwIDAgMC0zLjkgMS44IDYuMyA2LjMgMCAwIDAtMS4zIDYgNi4yIDYuMiAwIDAgMCAxLjggM2wxLjQuOVYyMEg0di00bDEgMmg0di0uNWwtMi0xTDUuNCAxNUE2LjUgNi41IDAgMCAxIDQgMTFjMC0xIC4yLTEuOS42LTIuN0E3IDcgMCAwIDEgNi4zIDZDNy4xIDUuNCA4IDUgOSA0LjVjMS0uMyAyLS41IDMuMS0uNWE4LjggOC44IDAgMCAxIDUuNyAyIDcgNyAwIDAgMSAxLjcgMi4zIDYgNiAwIDAgMSAuMiA0LjhjLS4yLjctLjYgMS4zLTEgMS45YTcuNiA3LjYgMCAwIDEtMy42IDIuNXYuNVpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ2luc2VydC10aW1lJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PGcgZmlsbC1ydWxlPVwibm9uemVyb1wiPjxwYXRoIGQ9XCJNMTIgMTlhNyA3IDAgMSAwIDAtMTQgNyA3IDAgMCAwIDAgMTRabTAgMmE5IDkgMCAxIDEgMC0xOCA5IDkgMCAwIDEgMCAxOFpcIi8+PHBhdGggZD1cIk0xNiAxMmgtM1Y3YzAtLjYtLjQtMS0xLTFhMSAxIDAgMCAwLTEgMXY3aDVjLjYgMCAxLS40IDEtMXMtLjQtMS0xLTFaXCIvPjwvZz48L3N2Zz4nLFxuICAgICdpbnZlcnQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE4IDE5LjMgMTYuNSAxOGE1LjggNS44IDAgMCAxLTMuMSAxLjkgNi4xIDYuMSAwIDAgMS01LjUtMS42QTUuOCA1LjggMCAwIDEgNiAxNHYtLjNsLjEtMS4yQTEzLjkgMTMuOSAwIDAgMSA3LjcgOWwtMy0zIC43LS44IDIuOCAyLjkgOSA4LjkgMS41IDEuNi0uNy42Wm0wLTUuNXYuM2wtLjEgMS4xLS40IDEtMS4yLTEuMmE0LjMgNC4zIDAgMCAwIC4yLTF2LS4yYzAtLjQgMC0uOC0uMi0xLjNsLS41LTEuNGExNC44IDE0LjggMCAwIDAtMy00LjJMMTIgNmEyNi4xIDI2LjEgMCAwIDAtMi4yIDIuNWwtMS0xYTIwLjkgMjAuOSAwIDAgMSAyLjktMy4zTDEyIDRsMSAuOGEyMi4yIDIyLjIgMCAwIDEgNCA1LjRjLjYgMS4yIDEgMi40IDEgMy42WlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnaXRhbGljJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIm0xNi43IDQuNy0uMS45aC0uM2MtLjYgMC0xIDAtMS40LjMtLjMuMy0uNC42LS41IDEuMWwtMi4xIDkuOHYuNmMwIC41LjQuOCAxLjQuOGguMmwtLjIuOEg4bC4yLS44aC4yYzEuMSAwIDEuOC0uNSAyLTEuNWwyLTkuOC4xLS41YzAtLjYtLjQtLjgtMS40LS44aC0uM2wuMi0uOWg1LjhaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdsYW5ndWFnZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTIgM2E5IDkgMCAxIDEgMCAxOCA5IDkgMCAwIDEgMC0xOFptNC4zIDEzLjNjLS41IDEtMS4yIDItMiAyLjlhNy41IDcuNSAwIDAgMCAzLjItMi4xbC0uMi0uMmE2IDYgMCAwIDAtMS0uNlptLTguNiAwYy0uNS4yLS45LjUtMS4yLjguOSAxIDIgMS43IDMuMiAyYTEwIDEwIDAgMCAxLTItMi44Wm0zLjYtLjhjLS44IDAtMS42LjEtMi4yLjMuNSAxIDEuMiAxLjkgMi4xIDIuN1ptMS41IDB2M2MuOS0uOCAxLjYtMS43IDIuMS0yLjctLjYtLjItMS40LS4zLTIuMS0uM1ptLTYtMi43SDQuNWMuMiAxIC41IDIuMSAxIDNoLjNsMS4zLTFhMTAgMTAgMCAwIDEtLjMtMlptMTIuNyAwaC0yLjNjMCAuNy0uMSAxLjQtLjMgMmwxLjYgMS4xYy41LTEgLjktMiAxLTMuMVptLTMuOCAwaC0zVjE0YzEgMCAyIC4xIDIuNy40LjItLjUuMy0xIC4zLTEuNlptLTQuNCAwaC0zbC4zIDEuNmMuOC0uMyAxLjctLjQgMi43LS40di0xLjNabS01LjUtNWMtLjcgMS0xLjEgMi4yLTEuMyAzLjVoMi4zYzAtMSAuMi0xLjguNS0yLjZsLTEuNS0xWm0yLjkgMS40di4xYy0uMi42LS40IDEuMy0uNCAyaDNWOS40Yy0xIDAtMS44LS4xLTIuNi0uM1ptNi42IDBoLS4xbC0yLjQuM3YxLjhoM2wtLjUtMi4xWm0zLTEuNC0uMy4xLTEuMy44Yy4zLjguNSAxLjYuNSAyLjZoMi4zYTcuNSA3LjUgMCAwIDAtMS4zLTMuNVptLTkgMCAyIC4yVjUuNWE5IDkgMCAwIDAtMiAyLjJabTMuNS0yLjNWOGMuNiAwIDEuMyAwIDEuOS0uMmE5IDkgMCAwIDAtMi0yLjNabS0zLS43aC0uMWMtMS4xLjQtMi4xIDEtMyAxLjhsMS4yLjdhMTAgMTAgMCAwIDEgMS45LTIuNVptNC40IDAgLjEuMWExMCAxMCAwIDAgMSAxLjggMi40bDEuMS0uN2E3LjUgNy41IDAgMCAwLTMtMS44WlwiLz48L3N2Zz4nLFxuICAgICdsaW5lLWhlaWdodCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMjEgNWExIDEgMCAwIDEgLjEgMkgxM2ExIDEgMCAwIDEtLjEtMkgyMXptMCA0YTEgMSAwIDAgMSAuMSAySDEzYTEgMSAwIDAgMS0uMS0ySDIxem0wIDRhMSAxIDAgMCAxIC4xIDJIMTNhMSAxIDAgMCAxLS4xLTJIMjF6bTAgNGExIDEgMCAwIDEgLjEgMkgxM2ExIDEgMCAwIDEtLjEtMkgyMXpNNyAzLjZsMy43IDMuN2ExIDEgMCAwIDEtMS4zIDEuNWgtLjFMOCA3LjN2OS4ybDEuMy0xLjNhMSAxIDAgMCAxIDEuMyAwaC4xYy40LjQuNCAxIDAgMS4zdi4xTDcgMjAuNGwtMy43LTMuN2ExIDEgMCAwIDEgMS4zLTEuNWguMUw2IDE2LjdWNy40TDQuNyA4LjdhMSAxIDAgMCAxLTEuMyAwaC0uMWExIDEgMCAwIDEgMC0xLjN2LS4xTDcgMy42elwiLz48L3N2Zz4nLFxuICAgICdsaW5lJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIm0xNSA5LTggOEg0di0zbDgtOCAzIDNabTEtMS0zLTMgMS0xaDFjLS4yIDAgMCAwIDAgMGwyIDJzMCAuMiAwIDB2MWwtMSAxWk00IDE4aDE2djJINHYtMlpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ2xpbmsnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTYuMiAxMi4zYTEgMSAwIDAgMSAxLjQgMS40bC0yIDJhMiAyIDAgMSAwIDIuNiAyLjhsNC44LTQuOGExIDEgMCAwIDAgMC0xLjQgMSAxIDAgMSAxIDEuNC0xLjMgMi45IDIuOSAwIDAgMSAwIDRMOS42IDIwYTMuOSAzLjkgMCAwIDEtNS41LTUuNWwyLTJabTExLjYtLjZhMSAxIDAgMCAxLTEuNC0xLjRsMi0yYTIgMiAwIDEgMC0yLjYtMi44TDExIDEwLjNhMSAxIDAgMCAwIDAgMS40QTEgMSAwIDEgMSA5LjYgMTNhMi45IDIuOSAwIDAgMSAwLTRMMTQuNCA0YTMuOSAzLjkgMCAwIDEgNS41IDUuNWwtMiAyWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnbGlzdC1idWxsLWNpcmNsZSc6ICc8c3ZnIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiPjxnIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBkPVwiTTExIDE2YTIgMiAwIDEgMCAwLTQgMiAyIDAgMCAwIDAgNFptMCAxYTMgMyAwIDEgMSAwLTYgMyAzIDAgMCAxIDAgNlpNMTEgMjZhMiAyIDAgMSAwIDAtNCAyIDIgMCAwIDAgMCA0Wm0wIDFhMyAzIDAgMSAxIDAtNiAzIDMgMCAwIDEgMCA2Wk0xMSAzNmEyIDIgMCAxIDAgMC00IDIgMiAwIDAgMCAwIDRabTAgMWEzIDMgMCAxIDEgMC02IDMgMyAwIDAgMSAwIDZaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48cGF0aCBvcGFjaXR5PVwiLjJcIiBkPVwiTTE4IDEyaDIydjRIMTh6TTE4IDIyaDIydjRIMTh6TTE4IDMyaDIydjRIMTh6XCIvPjwvZz48L3N2Zz4nLFxuICAgICdsaXN0LWJ1bGwtZGVmYXVsdCc6ICc8c3ZnIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiPjxnIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48Y2lyY2xlIGN4PVwiMTFcIiBjeT1cIjE0XCIgcj1cIjNcIi8+PGNpcmNsZSBjeD1cIjExXCIgY3k9XCIyNFwiIHI9XCIzXCIvPjxjaXJjbGUgY3g9XCIxMVwiIGN5PVwiMzRcIiByPVwiM1wiLz48cGF0aCBvcGFjaXR5PVwiLjJcIiBkPVwiTTE4IDEyaDIydjRIMTh6TTE4IDIyaDIydjRIMTh6TTE4IDMyaDIydjRIMTh6XCIvPjwvZz48L3N2Zz4nLFxuICAgICdsaXN0LWJ1bGwtc3F1YXJlJzogJzxzdmcgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCI+PGcgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPjxwYXRoIGQ9XCJNOCAxMWg2djZIOHpNOCAyMWg2djZIOHpNOCAzMWg2djZIOHpcIi8+PHBhdGggb3BhY2l0eT1cIi4yXCIgZD1cIk0xOCAxMmgyMnY0SDE4ek0xOCAyMmgyMnY0SDE4ek0xOCAzMmgyMnY0SDE4elwiLz48L2c+PC9zdmc+JyxcbiAgICAnbGlzdC1udW0tZGVmYXVsdC1ydGwnOiAnPHN2ZyB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHBhdGggb3BhY2l0eT1cIi4yXCIgZD1cIk04IDEyaDIydjRIOHpNOCAyMmgyMnY0SDh6TTggMzJoMjJ2NEg4elwiLz48cGF0aCBkPVwiTTM3LjQgMTd2LTQuOGgtLjFsLTEuNSAxdi0xLjFsMS42LTEuMWgxLjJ2NnpNMzMuMyAxNy4xYy0uNSAwLS44LS4zLS44LS43IDAtLjQuMy0uNy44LS43LjQgMCAuNy4zLjcuNyAwIC40LS4zLjctLjcuN3ptMS43IDUuN2MwLTEuMiAxLTIgMi4yLTIgMS4zIDAgMi4xLjggMi4xIDEuOCAwIC43LS4zIDEuMi0xLjMgMi4ybC0xLjIgMXYuMmgyLjZ2MWgtNC4zdi0uOWwyLTEuOWMuOC0uOCAxLTEuMSAxLTEuNSAwLS41LS40LS44LTEtLjgtLjUgMC0uOS4zLS45LjlIMzV6bS0xLjcgNC4zYy0uNSAwLS44LS4zLS44LS43IDAtLjQuMy0uNy44LS43LjQgMCAuNy4zLjcuNyAwIC40LS4zLjctLjcuN3ptMy4yIDcuM3YtMWguN2MuNiAwIDEtLjMgMS0uOCAwLS40LS40LS43LTEtLjdzLTEgLjMtMSAuOEgzNWMwLTEuMSAxLTEuOCAyLjItMS44IDEuMiAwIDIuMS42IDIuMSAxLjYgMCAuNy0uNCAxLjItMSAxLjN2LjFjLjcuMSAxLjMuNyAxLjMgMS40IDAgMS0xIDEuOS0yLjQgMS45LTEuMyAwLTIuMi0uOC0yLjMtMmgxLjJjMCAuNi41IDEgMS4xIDEgLjYgMCAxLS40IDEtMSAwLS41LS4zLS44LTEtLjhoLS43em0tMy4zIDIuN2MtLjQgMC0uNy0uMy0uNy0uNyAwLS40LjMtLjcuNy0uNy41IDAgLjguMy44LjcgMCAuNC0uMy43LS44Ljd6XCIvPjwvZz48L3N2Zz4nLFxuICAgICdsaXN0LW51bS1kZWZhdWx0JzogJzxzdmcgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCI+PGcgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPjxwYXRoIG9wYWNpdHk9XCIuMlwiIGQ9XCJNMTggMTJoMjJ2NEgxOHpNMTggMjJoMjJ2NEgxOHpNMTggMzJoMjJ2NEgxOHpcIi8+PHBhdGggZD1cIk0xMCAxN3YtNC44bC0xLjUgMXYtMS4xbDEuNi0xaDEuMlYxN2gtMS4yWm0zLjYuMWMtLjQgMC0uNy0uMy0uNy0uNyAwLS40LjMtLjcuNy0uNy41IDAgLjcuMy43LjcgMCAuNC0uMi43LS43LjdabS01IDUuN2MwLTEuMi44LTIgMi4xLTJzMi4xLjggMi4xIDEuOGMwIC43LS4zIDEuMi0xLjQgMi4ybC0xLjEgMXYuMmgyLjZ2MUg4LjZ2LS45bDItMS45Yy44LS44IDEtMS4xIDEtMS41IDAtLjUtLjQtLjgtMS0uOC0uNSAwLS45LjMtLjkuOUg4LjVabTYuMyA0LjNjLS41IDAtLjctLjMtLjctLjcgMC0uNC4yLS43LjctLjcuNCAwIC43LjMuNy43IDAgLjQtLjMuNy0uNy43Wk0xMCAzNC40di0xaC43Yy42IDAgMS0uMyAxLS44IDAtLjQtLjQtLjctMS0uN3MtMSAuMy0xIC44SDguNmMwLTEuMSAxLTEuOCAyLjItMS44IDEuMyAwIDIuMS42IDIuMSAxLjYgMCAuNy0uNCAxLjItMSAxLjN2LjFjLjguMSAxLjMuNyAxLjMgMS40IDAgMS0xIDEuOS0yLjQgMS45LTEuMyAwLTIuMi0uOC0yLjMtMmgxLjJjMCAuNi41IDEgMS4xIDEgLjcgMCAxLS40IDEtMSAwLS41LS4zLS44LTEtLjhoLS43Wm00LjcgMi43Yy0uNCAwLS43LS4zLS43LS43IDAtLjQuMy0uNy43LS43LjUgMCAuOC4zLjguNyAwIC40LS4zLjctLjguN1pcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ2xpc3QtbnVtLWxvd2VyLWFscGhhLXJ0bCc6ICc8c3ZnIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiPjxnIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBvcGFjaXR5PVwiLjJcIiBkPVwiTTggMTJoMjJ2NEg4ek04IDIyaDIydjRIOHpNOCAzMmgyMnY0SDh6XCIvPjxwYXRoIGQ9XCJNMzYuNSAxNmMtLjkgMC0xLjUtLjUtMS41LTEuM3MuNi0xLjMgMS44LTEuNGgxdi0uNGMwLS40LS4yLS42LS43LS42LS40IDAtLjcuMS0uOC40aC0xLjFjMC0uOC44LTEuNCAyLTEuNFMzOSAxMiAzOSAxM1YxNmgtMS4ydi0uNmMtLjMuNC0uOC43LTEuNC43Wm0uNC0uOGMuNiAwIDEtLjQgMS0uOVYxNGgtMWMtLjUuMS0uNy4zLS43LjYgMCAuNC4zLjYuNy42Wk0zMy4xIDE2LjFjLS40IDAtLjctLjMtLjctLjcgMC0uNC4zLS43LjctLjcuNSAwIC44LjMuOC43IDAgLjQtLjMuNy0uOC43Wk0zNy43IDI2Yy0uNyAwLTEuMi0uMi0xLjUtLjd2LjdIMzV2LTYuM2gxLjJ2Mi41Yy4zLS41LjgtLjkgMS41LS45IDEuMSAwIDEuOCAxIDEuOCAyLjQgMCAxLjUtLjcgMi40LTEuOCAyLjRabS0uNS0zLjZjLS42IDAtMSAuNS0xIDEuM3MuNCAxLjQgMSAxLjRjLjcgMCAxLS42IDEtMS40IDAtLjgtLjMtMS4zLTEtMS4zWk0zMy4yIDI2LjFjLS40IDAtLjctLjMtLjctLjcgMC0uNC4zLS43LjctLjcuNSAwIC44LjMuOC43IDAgLjQtLjMuNy0uOC43em02IDdoLTFjLS4xLS41LS40LS44LTEtLjhzLTEgLjUtMSAxLjRjMCAxIC40IDEuNCAxIDEuNC41IDAgLjktLjIgMS0uN2gxYzAgMS0uOCAxLjctMiAxLjctMS40IDAtMi4yLS45LTIuMi0yLjRzLjgtMi40IDIuMi0yLjRjMS4yIDAgMiAuNyAyIDEuN3ptLTYuMSAzYy0uNSAwLS43LS4zLS43LS43IDAtLjQuMi0uNy43LS43LjQgMCAuNy4zLjcuNyAwIC40LS4zLjctLjcuN3pcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ2xpc3QtbnVtLWxvd2VyLWFscGhhJzogJzxzdmcgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCI+PGcgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPjxwYXRoIG9wYWNpdHk9XCIuMlwiIGQ9XCJNMTggMTJoMjJ2NEgxOHpNMTggMjJoMjJ2NEgxOHpNMTggMzJoMjJ2NEgxOHpcIi8+PHBhdGggZD1cIk0xMC4zIDE1LjJjLjUgMCAxLS40IDEtLjlWMTRoLTFjLS41LjEtLjguMy0uOC42IDAgLjQuMy42LjguNlptLS40LjljLTEgMC0xLjUtLjYtMS41LTEuNCAwLS44LjYtMS4zIDEuNy0xLjRoMS4xdi0uNGMwLS40LS4yLS42LS43LS42LS41IDAtLjguMS0uOS40aC0xYzAtLjguOC0xLjQgMi0xLjQgMS4xIDAgMS44LjYgMS44IDEuNlYxNmgtMS4xdi0uNmgtLjFjLS4yLjQtLjcuNy0xLjMuN1ptNC42IDBjLS41IDAtLjctLjMtLjctLjcgMC0uNC4yLS43LjctLjcuNCAwIC43LjMuNy43IDAgLjQtLjMuNy0uNy43Wm0tMy4yIDEwYy0uNiAwLTEuMi0uMy0xLjQtLjh2LjdIOC41di02LjNIMTB2Mi41Yy4zLS41LjgtLjkgMS40LS45IDEuMiAwIDEuOSAxIDEuOSAyLjQgMCAxLjUtLjcgMi40LTEuOSAyLjRabS0uNC0zLjdjLS43IDAtMSAuNS0xIDEuM3MuMyAxLjQgMSAxLjRjLjYgMCAxLS42IDEtMS40IDAtLjgtLjQtMS4zLTEtMS4zWm00IDMuN2MtLjUgMC0uNy0uMy0uNy0uNyAwLS40LjItLjcuNy0uNy40IDAgLjcuMy43LjcgMCAuNC0uMy43LS43LjdabS0yLjIgN2gtMS4yYzAtLjUtLjQtLjgtLjktLjgtLjYgMC0xIC41LTEgMS40IDAgMSAuNCAxLjQgMSAxLjQuNSAwIC44LS4yIDEtLjdoMWMwIDEtLjggMS43LTIgMS43LTEuNCAwLTIuMi0uOS0yLjItMi40cy44LTIuNCAyLjItMi40YzEuMiAwIDIgLjcgMiAxLjdabTEuOCAzYy0uNSAwLS44LS4zLS44LS43IDAtLjQuMy0uNy44LS43LjQgMCAuNy4zLjcuNyAwIC40LS4zLjctLjcuN1pcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ2xpc3QtbnVtLWxvd2VyLWdyZWVrLXJ0bCc6ICc8c3ZnIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiPjxnIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBvcGFjaXR5PVwiLjJcIiBkPVwiTTggMTJoMjJ2NEg4ek04IDIyaDIydjRIOHpNOCAzMmgyMnY0SDh6XCIvPjxwYXRoIGQ9XCJNMzcuNCAxNmMtMS4yIDAtMi0uOC0yLTIuMyAwLTEuNS44LTIuNCAyLTIuNC42IDAgMSAuNCAxLjMgMXYtLjlINDB2My4yYzAgLjQuMS41LjQuNWguMnYuOWgtLjZjLS42IDAtMS0uMi0xLS43aC0uMmMtLjIuNC0uNy44LTEuMy44Wm0uMy0xYy42IDAgMS0uNSAxLTEuM3MtLjQtMS4zLTEtMS4zLTEgLjUtMSAxLjMuNCAxLjQgMSAxLjRaTTMzLjMgMTYuMWMtLjUgMC0uOC0uMy0uOC0uNyAwLS40LjMtLjcuOC0uNy40IDAgLjcuMy43LjcgMCAuNC0uMy43LS43LjdaTTM2IDIxLjljMC0xLjUuOC0yLjMgMi4xLTIuMyAxLjIgMCAyIC42IDIgMS42IDAgLjYtLjMgMS0uOSAxLjMuOS4zIDEuMy44IDEuMyAxLjcgMCAxLjItLjcgMS45LTEuOCAxLjktLjYgMC0xLjEtLjMtMS40LS44djIuMkgzNlYyMlptMS44IDEuMnYtMWguM2MuNSAwIC45LS4yLjktLjcgMC0uNS0uMy0uOC0uOS0uOC0uNSAwLS44LjMtLjggMXYyLjJjMCAuOC40IDEuMyAxIDEuM3MxLS40IDEtMS0uNC0xLTEuMi0xaC0uM1pNMzMuMyAyNi4xYy0uNSAwLS44LS4zLS44LS43IDAtLjQuMy0uNy44LS43LjQgMCAuNy4zLjcuNyAwIC40LS4zLjctLjcuN1pNMzcuMSAzNC42IDM0LjggMzBoMS40bDEuNyAzLjUgMS43LTMuNWgxLjFsLTIuMiA0LjZ2LjFjLjUuOC43IDEuNC43IDEuOCAwIC40LS4yLjgtLjQgMS0uMi4yLS42LjMtMSAuMy0uOSAwLTEuMy0uNC0xLjMtMS4yIDAtLjUuMi0xIC41LTEuN2wuMS0uMlptLjcgMWEyIDIgMCAwIDAtLjQuOWMwIC4zLjEuNC40LjQuMyAwIC40LS4xLjQtLjQgMC0uMi0uMS0uNi0uNC0xWk0zMy4zIDM2LjFjLS41IDAtLjgtLjMtLjgtLjcgMC0uNC4zLS43LjgtLjcuNCAwIC43LjMuNy43IDAgLjQtLjMuNy0uNy43WlwiLz48L2c+PC9zdmc+JyxcbiAgICAnbGlzdC1udW0tbG93ZXItZ3JlZWsnOiAnPHN2ZyB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHBhdGggb3BhY2l0eT1cIi4yXCIgZD1cIk0xOCAxMmgyMnY0SDE4ek0xOCAyMmgyMnY0SDE4ek0xOCAzMmgyMnY0SDE4elwiLz48cGF0aCBkPVwiTTEwLjUgMTVjLjcgMCAxLS41IDEtMS4zcy0uMy0xLjMtMS0xLjNjLS41IDAtLjkuNS0uOSAxLjNzLjQgMS40IDEgMS40Wm0tLjMgMWMtMS4xIDAtMS44LS44LTEuOC0yLjMgMC0xLjUuNy0yLjQgMS44LTIuNC43IDAgMS4xLjQgMS4zIDFoLjF2LS45aDEuMnYzLjJjMCAuNC4xLjUuNC41aC4ydi45aC0uNmMtLjYgMC0xLS4yLTEuMS0uN2gtLjFjLS4yLjQtLjcuOC0xLjQuOFptNSAuMWMtLjUgMC0uOC0uMy0uOC0uNyAwLS40LjMtLjcuNy0uNy41IDAgLjguMy44LjcgMCAuNC0uMy43LS44LjdabS00LjkgN3YtMWguM2MuNiAwIDEtLjIgMS0uNyAwLS41LS40LS44LTEtLjgtLjUgMC0uOC4zLS44IDF2Mi4yYzAgLjguNCAxLjMgMS4xIDEuMy42IDAgMS0uNCAxLTFzLS41LTEtMS4zLTFoLS4zWk04LjYgMjJjMC0xLjUuNy0yLjMgMi0yLjMgMS4yIDAgMiAuNiAyIDEuNiAwIC42LS4zIDEtLjggMS4zLjguMyAxLjMuOCAxLjMgMS43IDAgMS4yLS44IDEuOS0xLjkgMS45LS42IDAtMS4xLS4zLTEuMy0uOHYyLjJIOC41VjIyWm02LjIgNC4yYy0uNCAwLS43LS4zLS43LS43IDAtLjQuMy0uNy43LS43LjUgMCAuNy4zLjcuNyAwIC40LS4yLjctLjcuN1ptLTQuNSA4LjVMOCAzMGgxLjRsMS43IDMuNSAxLjctMy41aDEuMWwtMi4yIDQuNnYuMWMuNS44LjcgMS40LjcgMS44IDAgLjQtLjEuOC0uNCAxLS4yLjItLjYuMy0xIC4zLS45IDAtMS4zLS40LTEuMy0xLjIgMC0uNS4yLTEgLjUtMS43bC4xLS4yWm0uNyAxYTIgMiAwIDAgMC0uNC45YzAgLjMuMS40LjQuNC4zIDAgLjQtLjEuNC0uNCAwLS4yLS4xLS42LS40LTFabTQuNS41Yy0uNSAwLS44LS4zLS44LS43IDAtLjQuMy0uNy44LS43LjQgMCAuNy4zLjcuNyAwIC40LS4zLjctLjcuN1pcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ2xpc3QtbnVtLWxvd2VyLXJvbWFuLXJ0bCc6ICc8c3ZnIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiPjxnIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBvcGFjaXR5PVwiLjJcIiBkPVwiTTggMTJoMjJ2NEg4ek04IDIyaDIydjRIOHpNOCAzMmgyMnY0SDh6XCIvPjxwYXRoIGQ9XCJNMzIuOSAxNnYtMS4yaC0xLjNWMTZIMzNabTAgMTB2LTEuMmgtMS4zVjI2SDMzWm0wIDEwdi0xLjJoLTEuM1YzNkgzM1pcIi8+PHBhdGggZmlsbC1ydWxlPVwibm9uemVyb1wiIGQ9XCJNMzYgMjFoLTEuNXY1SDM2ek0zNiAzMWgtMS41djVIMzZ6TTM5IDIxaC0xLjV2NUgzOXpNMzkgMzFoLTEuNXY1SDM5ek00MiAzMWgtMS41djVINDJ6TTM2IDExaC0xLjV2NUgzNnpNMzYgMTloLTEuNXYxSDM2ek0zNiAyOWgtMS41djFIMzZ6TTM5IDE5aC0xLjV2MUgzOXpNMzkgMjloLTEuNXYxSDM5ek00MiAyOWgtMS41djFINDJ6TTM2IDloLTEuNXYxSDM2elwiLz48L2c+PC9zdmc+JyxcbiAgICAnbGlzdC1udW0tbG93ZXItcm9tYW4nOiAnPHN2ZyB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHBhdGggb3BhY2l0eT1cIi4yXCIgZD1cIk0xOCAxMmgyMnY0SDE4ek0xOCAyMmgyMnY0SDE4ek0xOCAzMmgyMnY0SDE4elwiLz48cGF0aCBkPVwiTTE1LjEgMTZ2LTEuMmgxLjNWMTZIMTVabTAgMTB2LTEuMmgxLjNWMjZIMTVabTAgMTB2LTEuMmgxLjNWMzZIMTVaXCIvPjxwYXRoIGZpbGwtcnVsZT1cIm5vbnplcm9cIiBkPVwiTTEyIDIxaDEuNXY1SDEyek0xMiAzMWgxLjV2NUgxMnpNOSAyMWgxLjV2NUg5ek05IDMxaDEuNXY1SDl6TTYgMzFoMS41djVINnpNMTIgMTFoMS41djVIMTJ6TTEyIDE5aDEuNXYxSDEyek0xMiAyOWgxLjV2MUgxMnpNOSAxOWgxLjV2MUg5ek05IDI5aDEuNXYxSDl6TTYgMjloMS41djFINnpNMTIgOWgxLjV2MUgxMnpcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ2xpc3QtbnVtLXVwcGVyLWFscGhhLXJ0bCc6ICc8c3ZnIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiPjxnIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBvcGFjaXR5PVwiLjJcIiBkPVwiTTggMTJoMjJ2NEg4ek04IDIyaDIydjRIOHpNOCAzMmgyMnY0SDh6XCIvPjxwYXRoIGQ9XCJtMzkuMyAxNy0uNS0xLjRoLTJsLS41IDEuNEgzNWwyLTZoMS42bDIgNmgtMS4zWm0tMS42LTQuNy0uNyAyLjNoMS42bC0uOC0yLjNaTTMzLjQgMTdjLS40IDAtLjctLjMtLjctLjcgMC0uNC4zLS43LjctLjcuNSAwIC43LjMuNy43IDAgLjQtLjIuNy0uNy43Wm00LjcgOS45aC0yLjd2LTZIMzhjMS4yIDAgMS45LjYgMS45IDEuNSAwIC42LS41IDEuMi0xIDEuMy43LjEgMS4zLjcgMS4zIDEuNSAwIDEtLjggMS43LTIgMS43Wm0tMS40LTV2MS41aDFjLjYgMCAxLS4zIDEtLjggMC0uNC0uNC0uNy0xLS43aC0xWm0wIDRoMS4xYy43IDAgMS4xLS4zIDEuMS0uOCAwLS42LS40LS45LTEuMS0uOWgtMS4xVjI2Wk0zMyAyNy4xYy0uNSAwLS44LS4zLS44LS43IDAtLjQuMy0uNy44LS43LjQgMCAuNy4zLjcuNyAwIC40LS4zLjctLjcuN1ptNC45IDEwYy0xLjggMC0yLjgtMS4xLTIuOC0zLjFzMS0zLjEgMi44LTMuMWMxLjQgMCAyLjUuOSAyLjYgMi4yaC0xLjNjMC0uNy0uNi0xLjEtMS4zLTEuMS0xIDAtMS42LjctMS42IDJzLjYgMiAxLjYgMmMuNyAwIDEuMi0uNCAxLjQtMWgxLjJjLS4xIDEuMy0xLjIgMi4yLTIuNiAyLjJabS00LjUgMGMtLjUgMC0uOC0uMy0uOC0uNyAwLS40LjMtLjcuOC0uNy40IDAgLjcuMy43LjcgMCAuNC0uMy43LS43LjdaXCIvPjwvZz48L3N2Zz4nLFxuICAgICdsaXN0LW51bS11cHBlci1hbHBoYSc6ICc8c3ZnIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiPjxnIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBvcGFjaXR5PVwiLjJcIiBkPVwiTTE4IDEyaDIydjRIMTh6TTE4IDIyaDIydjRIMTh6TTE4IDMyaDIydjRIMTh6XCIvPjxwYXRoIGQ9XCJtMTIuNiAxNy0uNS0xLjRoLTJMOS41IDE3SDguM2wyLTZIMTJsMiA2aC0xLjNaTTExIDEyLjNsLS43IDIuM2gxLjZsLS44LTIuM1ptNC43IDQuOGMtLjQgMC0uNy0uMy0uNy0uNyAwLS40LjMtLjcuNy0uNy41IDAgLjcuMy43LjcgMCAuNC0uMi43LS43LjdaTTExLjQgMjdIOC43di02aDIuNmMxLjIgMCAxLjkuNiAxLjkgMS41IDAgLjYtLjUgMS4yLTEgMS4zLjcuMSAxLjMuNyAxLjMgMS41IDAgMS0uOCAxLjctMiAxLjdaTTEwIDIydjEuNWgxYy42IDAgMS0uMyAxLS44IDAtLjQtLjQtLjctMS0uN2gtMVptMCA0SDExYy43IDAgMS4xLS4zIDEuMS0uOCAwLS42LS40LS45LTEuMS0uOUgxMFYyNlptNS40IDEuMWMtLjUgMC0uOC0uMy0uOC0uNyAwLS40LjMtLjcuOC0uNy40IDAgLjcuMy43LjcgMCAuNC0uMy43LS43LjdabS00LjEgMTBjLTEuOCAwLTIuOC0xLjEtMi44LTMuMXMxLTMuMSAyLjgtMy4xYzEuNCAwIDIuNS45IDIuNiAyLjJoLTEuM2MwLS43LS42LTEuMS0xLjMtMS4xLTEgMC0xLjYuNy0xLjYgMnMuNiAyIDEuNiAyYy43IDAgMS4yLS40IDEuNC0xaDEuMmMtLjEgMS4zLTEuMiAyLjItMi42IDIuMlptNC41IDBjLS41IDAtLjgtLjMtLjgtLjcgMC0uNC4zLS43LjgtLjcuNCAwIC43LjMuNy43IDAgLjQtLjMuNy0uNy43WlwiLz48L2c+PC9zdmc+JyxcbiAgICAnbGlzdC1udW0tdXBwZXItcm9tYW4tcnRsJzogJzxzdmcgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCI+PGcgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPjxwYXRoIG9wYWNpdHk9XCIuMlwiIGQ9XCJNOCAxMmgyMnY0SDh6TTggMjJoMjJ2NEg4ek04IDMyaDIydjRIOHpcIi8+PHBhdGggZD1cIk0zMS42IDE3di0xLjJIMzNWMTdoLTEuM1ptMCAxMHYtMS4ySDMzVjI3aC0xLjNabTAgMTB2LTEuMkgzM1YzN2gtMS4zWlwiLz48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIk0zNC41IDIwSDM2djdoLTEuNXpNMzQuNSAzMEgzNnY3aC0xLjV6TTM3LjUgMjBIMzl2N2gtMS41ek0zNy41IDMwSDM5djdoLTEuNXpNNDAuNSAzMEg0MnY3aC0xLjV6TTM0LjUgMTBIMzZ2N2gtMS41elwiLz48L2c+PC9zdmc+JyxcbiAgICAnbGlzdC1udW0tdXBwZXItcm9tYW4nOiAnPHN2ZyB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHBhdGggb3BhY2l0eT1cIi4yXCIgZD1cIk0xOCAxMmgyMnY0SDE4ek0xOCAyMmgyMnY0SDE4ek0xOCAzMmgyMnY0SDE4elwiLz48cGF0aCBkPVwiTTE1LjEgMTd2LTEuMmgxLjNWMTdIMTVabTAgMTB2LTEuMmgxLjNWMjdIMTVabTAgMTB2LTEuMmgxLjNWMzdIMTVaXCIvPjxwYXRoIGZpbGwtcnVsZT1cIm5vbnplcm9cIiBkPVwiTTEyIDIwaDEuNXY3SDEyek0xMiAzMGgxLjV2N0gxMnpNOSAyMGgxLjV2N0g5ek05IDMwaDEuNXY3SDl6TTYgMzBoMS41djdINnpNMTIgMTBoMS41djdIMTJ6XCIvPjwvZz48L3N2Zz4nLFxuICAgICdsb2NrJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xNi4zIDExYy4yIDAgLjMgMCAuNS4ybC4yLjZ2Ny40YzAgLjMgMCAuNC0uMi42bC0uNi4ySDcuOGMtLjMgMC0uNCAwLS42LS4yYS43LjcgMCAwIDEtLjItLjZ2LTcuNGMwLS4zIDAtLjQuMi0uNmwuNS0uMkg4VjhjMC0uOC4zLTEuNS45LTIuMS42LS42IDEuMy0uOSAyLjEtLjloMmMuOCAwIDEuNS4zIDIuMS45LjYuNi45IDEuMy45IDIuMXYzaC4zWk0xMCA4djNoNFY4YTEgMSAwIDAgMC0uMy0uN0ExIDEgMCAwIDAgMTMgN2gtMmExIDEgMCAwIDAtLjcuMyAxIDEgMCAwIDAtLjMuN1pcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ2x0cic6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTEgNWg3YTEgMSAwIDAgMSAwIDJoLTF2MTFhMSAxIDAgMCAxLTIgMFY3aC0ydjExYTEgMSAwIDAgMS0yIDB2LTZjLS41IDAtMSAwLTEuNC0uM0EzLjQgMy40IDAgMCAxIDcuOCAxMGEzLjMgMy4zIDAgMCAxIDAtMi44IDMuNCAzLjQgMCAwIDEgMS44LTEuOEwxMSA1Wk00LjQgMTYuMiA2LjIgMTVsLTEuOC0xLjJhMSAxIDAgMCAxIDEuMi0xLjZsMyAyYTEgMSAwIDAgMSAwIDEuNmwtMyAyYTEgMSAwIDEgMS0xLjItMS42WlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnbWludXMnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE5IDExYTEgMSAwIDAgMSAuMSAySDVhMSAxIDAgMCAxLS4xLTJIMTlaXCIvPjwvc3ZnPicsXG4gICAgJ21vcmUtZHJhd2VyJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk02IDEwYTIgMiAwIDAgMC0yIDJjMCAxLjEuOSAyIDIgMmEyIDIgMCAwIDAgMi0yIDIgMiAwIDAgMC0yLTJabTEyIDBhMiAyIDAgMCAwLTIgMmMwIDEuMS45IDIgMiAyYTIgMiAwIDAgMCAyLTIgMiAyIDAgMCAwLTItMlptLTYgMGEyIDIgMCAwIDAtMiAyYzAgMS4xLjkgMiAyIDJhMiAyIDAgMCAwIDItMiAyIDIgMCAwIDAtMi0yWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnbmV3LWRvY3VtZW50JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xNC40IDNIN2EyIDIgMCAwIDAtMiAydjE0YzAgMS4xLjkgMiAyIDJoMTBhMiAyIDAgMCAwIDItMlY3LjZMMTQuNCAzWk0xNyAxOUg3VjVoNnY0aDR2MTBaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICduZXctdGFiJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIm0xNSAxMyAyLTJ2OEg1VjdoOGwtMiAySDd2OGg4di00Wm00LTh2NS41bC0yLTItNS42IDUuNUgxMHYtMS40TDE1LjUgN2wtMi0ySDE5WlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnbm9uLWJyZWFraW5nJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xMSAxMUg4YTEgMSAwIDEgMSAwLTJoM1Y2YzAtLjYuNC0xIDEtMXMxIC40IDEgMXYzaDNjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFoLTN2M2MwIC42LS40IDEtMSAxYTEgMSAwIDAgMS0xLTF2LTNabTEwIDR2NUgzdi01YzAtLjYuNC0xIDEtMXMxIC40IDEgMXYzaDE0di0zYzAtLjYuNC0xIDEtMXMxIC40IDEgMVpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ25vdGljZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTUuNSA0IDIwIDguNXY3TDE1LjUgMjBoLTdMNCAxNS41di03TDguNSA0aDdaTTEzIDE3di0yaC0ydjJoMlptMC00VjdoLTJ2NmgyWlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ29yZGVyZWQtbGlzdC1ydGwnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTYgMTdoOGExIDEgMCAwIDEgMCAySDZhMSAxIDAgMCAxIDAtMlptMC02aDhhMSAxIDAgMCAxIDAgMkg2YTEgMSAwIDAgMSAwLTJabTAtNmg4YTEgMSAwIDAgMSAwIDJINmExIDEgMCAxIDEgMC0yWm0xMy0xdjMuNWEuNS41IDAgMSAxLTEgMFY1aC0uNWEuNS41IDAgMSAxIDAtMUgxOVptLTEgOC44LjIuMmgxLjNhLjUuNSAwIDEgMSAwIDFoLTEuNmExIDEgMCAwIDEtLjktMVYxM2MwLS40LjMtLjguNi0xbDEuMi0uNC4yLS4zYS4yLjIgMCAwIDAtLjItLjJoLTEuM2EuNS41IDAgMCAxLS41LS41YzAtLjMuMi0uNS41LS41aDEuNmMuNSAwIC45LjQuOSAxdi4xYzAgLjQtLjMuOC0uNiAxbC0xLjIuNC0uMi4zWm0yIDQuMnYyYzAgLjYtLjQgMS0xIDFoLTEuNWEuNS41IDAgMCAxIDAtMWgxLjJhLjMuMyAwIDEgMCAwLS42aC0xLjNhLjQuNCAwIDEgMSAwLS44aDEuM2EuMy4zIDAgMCAwIDAtLjZoLTEuMmEuNS41IDAgMSAxIDAtMUgxOWMuNiAwIDEgLjQgMSAxWlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnb3JkZXJlZC1saXN0JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xMCAxN2g4Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxaC04YTEgMSAwIDAgMSAwLTJabTAtNmg4Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxaC04YTEgMSAwIDAgMSAwLTJabTAtNmg4Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxaC04YTEgMSAwIDEgMSAwLTJaTTYgNHYzLjVjMCAuMy0uMi41LS41LjVhLjUuNSAwIDAgMS0uNS0uNVY1aC0uNWEuNS41IDAgMCAxIDAtMUg2Wm0tMSA4LjguMi4yaDEuM2MuMyAwIC41LjIuNS41cy0uMi41LS41LjVINC45YTEgMSAwIDAgMS0uOS0xVjEzYzAtLjQuMy0uOC42LTFsMS4yLS40LjItLjNhLjIuMiAwIDAgMC0uMi0uMkg0LjVhLjUuNSAwIDAgMS0uNS0uNWMwLS4zLjItLjUuNS0uNWgxLjZjLjUgMCAuOS40LjkgMXYuMWMwIC40LS4zLjgtLjYgMWwtMS4yLjQtLjIuM1pNNyAxN3YyYzAgLjYtLjQgMS0xIDFINC41YS41LjUgMCAwIDEgMC0xaDEuMmMuMiAwIC4zLS4xLjMtLjMgMC0uMi0uMS0uMy0uMy0uM0g0LjRhLjQuNCAwIDEgMSAwLS44aDEuM2MuMiAwIC4zLS4xLjMtLjMgMC0uMi0uMS0uMy0uMy0uM0g0LjVhLjUuNSAwIDEgMSAwLTFINmMuNiAwIDEgLjQgMSAxWlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnb3JpZW50YXRpb24nOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTcuMyA2LjQgMSAxM2w2LjQgNi41IDYuNS02LjUtNi41LTYuNVpNMy43IDEzbDMuNi0zLjdMMTEgMTNsLTMuNyAzLjctMy42LTMuN1pNMTIgNmwyLjggMi43Yy4zLjMuMy44IDAgMS0uMy40LS45LjQtMS4yIDBMOS4yIDUuN2EuOC44IDAgMCAxIDAtMS4yTDEzLjYuMmMuMy0uMy45LS4zIDEuMiAwIC4zLjMuMy44IDAgMS4xTDEyIDRoMWE5IDkgMCAxIDEtNC4zIDE2LjlsMS41LTEuNUE3IDcgMCAxIDAgMTMgNmgtMVpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ291dGRlbnQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTcgNWgxMmMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMUg3YTEgMSAwIDEgMSAwLTJabTUgNGg3Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxaC03YTEgMSAwIDAgMSAwLTJabTAgNGg3Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxaC03YTEgMSAwIDAgMSAwLTJabS01IDRoMTJhMSAxIDAgMCAxIDAgMkg3YTEgMSAwIDAgMSAwLTJabTEuNi0zLjhhMSAxIDAgMCAxLTEuMiAxLjZsLTMtMmExIDEgMCAwIDEgMC0xLjZsMy0yYTEgMSAwIDAgMSAxLjIgMS42TDYuOCAxMmwxLjggMS4yWlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAncGFnZS1icmVhayc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxnIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBkPVwiTTUgMTFjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFhMSAxIDAgMCAxIDAtMlptMyAwaDFjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFIOGExIDEgMCAwIDEgMC0yWm00IDBjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFhMSAxIDAgMCAxIDAtMlptMyAwaDFjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFoLTFhMSAxIDAgMCAxIDAtMlptNCAwYy42IDAgMSAuNCAxIDFzLS40IDEtMSAxYTEgMSAwIDAgMSAwLTJaTTcgM3Y1aDEwVjNjMC0uNi40LTEgMS0xczEgLjQgMSAxdjdINVYzYzAtLjYuNC0xIDEtMXMxIC40IDEgMVpNNiAyMmExIDEgMCAwIDEtMS0xdi03aDE0djdjMCAuNi0uNCAxLTEgMWExIDEgMCAwIDEtMS0xdi01SDd2NWMwIC42LS40IDEtMSAxWlwiLz48L2c+PC9zdmc+JyxcbiAgICAncGFyYWdyYXBoJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTAgNWg3YTEgMSAwIDAgMSAwIDJoLTF2MTFhMSAxIDAgMCAxLTIgMFY3aC0ydjExYTEgMSAwIDAgMS0yIDB2LTZjLS41IDAtMSAwLTEuNC0uM0EzLjQgMy40IDAgMCAxIDYuOCAxMGEzLjMgMy4zIDAgMCAxIDAtMi44IDMuNCAzLjQgMCAwIDEgMS44LTEuOEwxMCA1WlwiLz48L3N2Zz4nLFxuICAgICdwYXN0ZS1jb2x1bW4tYWZ0ZXInOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xMiAxYTMgMyAwIDAgMSAyLjggMkgxOGMxIDAgMiAuOCAyIDEuOVY3aC0yVjVoLTJ2MWMwIC42LS40IDEtMSAxSDlhMSAxIDAgMCAxLTEtMVY1SDZ2MTNoN3YySDZjLTEgMC0yLS44LTItMS45VjVjMC0xIC44LTIgMS45LTJIOS4yQTMgMyAwIDAgMSAxMiAxWm04IDd2MTJoLTZWOGg2Wm0tMS41IDEuNWgtM3Y5aDN2LTlaTTEyIDNhMSAxIDAgMSAwIDAgMiAxIDEgMCAwIDAgMC0yWlwiLz48L3N2Zz4nLFxuICAgICdwYXN0ZS1jb2x1bW4tYmVmb3JlJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTIgMWEzIDMgMCAwIDEgMi44IDJIMThjMSAwIDIgLjggMiAxLjlWMThjMCAxLS44IDItMS45IDJIMTF2LTJoN1Y1aC0ydjFjMCAuNi0uNCAxLTEgMUg5YTEgMSAwIDAgMS0xLTFWNUg2djJINFY1YzAtMSAuOC0yIDEuOS0ySDkuMkEzIDMgMCAwIDEgMTIgMVptLTIgN3YxMkg0VjhoNlpNOC41IDkuNWgtM3Y5aDN2LTlaTTEyIDNhMSAxIDAgMSAwIDAgMiAxIDEgMCAwIDAgMC0yWlwiLz48L3N2Zz4nLFxuICAgICdwYXN0ZS1yb3ctYWZ0ZXInOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xMiAxYTMgMyAwIDAgMSAyLjggMkgxOGMxIDAgMiAuOCAyIDEuOVYxMWgtMlY1aC0ydjFjMCAuNi0uNCAxLTEgMUg5YTEgMSAwIDAgMS0xLTFWNUg2djEzaDE0YzAgMS0uOCAyLTEuOSAySDZjLTEgMC0yLS44LTItMS45VjVjMC0xIC44LTIgMS45LTJIOS4yQTMgMyAwIDAgMSAxMiAxWm0xMCAxMXY1SDh2LTVoMTRabS0xLjUgMS41aC0xMXYyaDExdi0yWk0xMiAzYTEgMSAwIDEgMCAwIDIgMSAxIDAgMCAwIDAtMlpcIi8+PC9zdmc+JyxcbiAgICAncGFzdGUtcm93LWJlZm9yZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTEyIDFhMyAzIDAgMCAxIDIuOCAySDE4YzEgMCAyIC44IDIgMS45VjdoLTJWNWgtMnYxYzAgLjYtLjQgMS0xIDFIOWExIDEgMCAwIDEtMS0xVjVINnYxM2gxMnYtNGgydjRjMCAxLS44IDItMS45IDJINmMtMSAwLTItLjgtMi0xLjlWNWMwLTEgLjgtMiAxLjktMkg5LjJBMyAzIDAgMCAxIDEyIDFabTEwIDd2NUg4VjhoMTRabS0xLjUgMS41aC0xMXYyaDExdi0yWk0xMiAzYTEgMSAwIDEgMCAwIDIgMSAxIDAgMCAwIDAtMlpcIi8+PC9zdmc+JyxcbiAgICAncGFzdGUtdGV4dCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTggOVY1aC0ydjFjMCAuNi0uNCAxLTEgMUg5YTEgMSAwIDAgMS0xLTFWNUg2djEzaDNWOWg5Wk05IDIwSDZhMiAyIDAgMCAxLTItMlY1YzAtMS4xLjktMiAyLTJoMy4yQTMgMyAwIDAgMSAxMiAxYTMgMyAwIDAgMSAyLjggMkgxOGEyIDIgMCAwIDEgMiAydjRoMXYxMkg5di0xWm0xLjUtOS41djloOXYtOWgtOVpNMTIgM2ExIDEgMCAwIDAtMSAxYzAgLjUuNCAxIDEgMXMxLS41IDEtMS0uNC0xLTEtMVptMCA5aDZ2MmgtLjVsLS41LTFoLTF2NGguOHYxaC0zLjZ2LTFoLjh2LTRoLTFsLS41IDFIMTJ2LTJaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdwYXN0ZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTggOVY1aC0ydjFjMCAuNi0uNCAxLTEgMUg5YTEgMSAwIDAgMS0xLTFWNUg2djEzaDNWOWg5Wk05IDIwSDZhMiAyIDAgMCAxLTItMlY1YzAtMS4xLjktMiAyLTJoMy4yQTMgMyAwIDAgMSAxMiAxYTMgMyAwIDAgMSAyLjggMkgxOGEyIDIgMCAwIDEgMiAydjRoMXYxMkg5di0xWm0xLjUtOS41djloOXYtOWgtOVpNMTIgM2ExIDEgMCAwIDAtMSAxYzAgLjUuNCAxIDEgMXMxLS41IDEtMS0uNC0xLTEtMVpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ3Blcm1hbmVudC1wZW4nOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTEwLjUgMTcuNSA4IDIwSDN2LTNsMy41LTMuNWEyIDIgMCAwIDEgMC0zTDE0IDNsMSAxLTcuMyA3LjNhMSAxIDAgMCAwIDAgMS40bDMuNiAzLjZjLjQuNCAxIC40IDEuNCAwTDIwIDlsMSAxLTcuNiA3LjZhMiAyIDAgMCAxLTIuOCAwbC0uMS0uMVpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ3BsdXMnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTEyIDRjLjUgMCAxIC40IDEgLjlWMTFoNmExIDEgMCAwIDEgLjEgMkgxM3Y2YTEgMSAwIDAgMS0yIC4xVjEzSDVhMSAxIDAgMCAxLS4xLTJIMTFWNWMwLS42LjQtMSAxLTFaXCIvPjwvc3ZnPicsXG4gICAgJ3ByZWZlcmVuY2VzJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIm0yMC4xIDEzLjUtMS45LjJhNS44IDUuOCAwIDAgMS0uNiAxLjVsMS4yIDEuNWMuNC40LjMgMSAwIDEuNGwtLjcuN2ExIDEgMCAwIDEtMS40IDBsLTEuNS0xLjJhNi4yIDYuMiAwIDAgMS0xLjUuNmwtLjIgMS45YzAgLjUtLjUuOS0xIC45aC0xYTEgMSAwIDAgMS0xLS45bC0uMi0xLjlhNS44IDUuOCAwIDAgMS0xLjUtLjZsLTEuNSAxLjJhMSAxIDAgMCAxLTEuNCAwbC0uNy0uN2ExIDEgMCAwIDEgMC0xLjRsMS4yLTEuNWE2LjIgNi4yIDAgMCAxLS42LTEuNWwtMS45LS4yYTEgMSAwIDAgMS0uOS0xdi0xYzAtLjUuNC0xIC45LTFsMS45LS4yYTUuOCA1LjggMCAwIDEgLjYtMS41TDUuMiA3LjNhMSAxIDAgMCAxIDAtMS40bC43LS43YTEgMSAwIDAgMSAxLjQgMGwxLjUgMS4yYTYuMiA2LjIgMCAwIDEgMS41LS42bC4yLTEuOWMwLS41LjUtLjkgMS0uOWgxYy41IDAgMSAuNCAxIC45bC4yIDEuOWE1LjggNS44IDAgMCAxIDEuNS42bDEuNS0xLjJhMSAxIDAgMCAxIDEuNCAwbC43LjdjLjMuNC40IDEgMCAxLjRsLTEuMiAxLjVhNi4yIDYuMiAwIDAgMSAuNiAxLjVsMS45LjJjLjUgMCAuOS41LjkgMXYxYzAgLjUtLjQgMS0uOSAxWk0xMiAxNWEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdwcmV2aWV3JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0zLjUgMTIuNWMuNS44IDEuMSAxLjYgMS44IDIuMyAyIDIgNC4yIDMuMiA2LjcgMy4yczQuNy0xLjIgNi43LTMuMmExNi4yIDE2LjIgMCAwIDAgMi4xLTIuOCAxNS43IDE1LjcgMCAwIDAtMi4xLTIuOGMtMi0yLTQuMi0zLjItNi43LTMuMmE5LjMgOS4zIDAgMCAwLTYuNyAzLjJBMTYuMiAxNi4yIDAgMCAwIDMuMiAxMmMwIC4yLjIuMy4zLjVabS0yLjQtMSAuNy0xLjJMNCA3LjhDNi4yIDUuNCA4LjkgNCAxMiA0YzMgMCA1LjggMS40IDguMSAzLjhhMTguMiAxOC4yIDAgMCAxIDIuOCAzLjd2MWwtLjcgMS4yLTIuMSAyLjVjLTIuMyAyLjQtNSAzLjgtOC4xIDMuOC0zIDAtNS44LTEuNC04LjEtMy44YTE4LjIgMTguMiAwIDAgMS0yLjgtMy43IDEgMSAwIDAgMSAwLTFabTEyLTMuM2EyIDIgMCAxIDAgMi43IDIuNiA0IDQgMCAxIDEtMi42LTIuNlpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ3ByaW50JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xOCA4SDZhMyAzIDAgMCAwLTMgM3Y2aDJ2M2gxNHYtM2gydi02YTMgMyAwIDAgMC0zLTNabS0xIDEwSDd2LTRoMTB2NFptLjUtNWMtLjggMC0xLjUtLjctMS41LTEuNXMuNy0xLjUgMS41LTEuNSAxLjUuNyAxLjUgMS41LS43IDEuNS0xLjUgMS41Wm0uNS04SDZ2MmgxMlY1WlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAncXVvdGUnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTcuNSAxN2guOWMuNCAwIC43LS4yLjktLjZMMTEgMTNWOGMwLS42LS40LTEtMS0xSDZhMSAxIDAgMCAwLTEgMXY0YzAgLjYuNCAxIDEgMWgybC0xLjMgMi43YTEgMSAwIDAgMCAuOCAxLjNabTggMGguOWMuNCAwIC43LS4yLjktLjZMMTkgMTNWOGMwLS42LS40LTEtMS0xaC00YTEgMSAwIDAgMC0xIDF2NGMwIC42LjQgMSAxIDFoMmwtMS4zIDIuN2ExIDEgMCAwIDAgLjggMS4zWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAncmVkbyc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTcuNiAxMEgxMmMtMi44IDAtNC40IDEuNC00LjkgMy41LS40IDIgLjMgNCAxLjQgNC42YTEgMSAwIDEgMS0xIDEuOGMtMi0xLjItMi45LTQuMS0yLjMtNi44LjYtMyAzLTUuMSA2LjgtNS4xaDUuNmwtMy4zLTMuM2ExIDEgMCAxIDEgMS40LTEuNGw1IDVhMSAxIDAgMCAxIDAgMS40bC01IDVhMSAxIDAgMCAxLTEuNC0xLjRsMy4zLTMuM1pcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ3JlbG9hZCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxnIGZpbGwtcnVsZT1cIm5vbnplcm9cIj48cGF0aCBkPVwibTUgMjIuMS0xLjItNC43di0uMmExIDEgMCAwIDEgMS0xbDUgLjRhMSAxIDAgMSAxLS4yIDJsLTIuMi0uMmE3LjggNy44IDAgMCAwIDguNC4yIDcuNSA3LjUgMCAwIDAgMy41LTYuNCAxIDEgMCAxIDEgMiAwIDkuNSA5LjUgMCAwIDEtNC41IDggOS45IDkuOSAwIDAgMS0xMC4yIDBsLjQgMS40YTEgMSAwIDEgMS0yIC41Wk0xMy42IDcuNGMwLS41LjUtMSAxLS45bDIuOC4yYTggOCAwIDAgMC05LjUtMSA3LjUgNy41IDAgMCAwLTMuNiA3IDEgMSAwIDAgMS0yIDAgOS41IDkuNSAwIDAgMSA0LjUtOC42IDEwIDEwIDAgMCAxIDEwLjkuM2wtLjMtMWExIDEgMCAwIDEgMi0uNWwxLjEgNC44YTEgMSAwIDAgMS0xIDEuMmwtNS0uNGExIDEgMCAwIDEtLjktMVpcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ3JlbW92ZS1mb3JtYXR0aW5nJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xMy4yIDZhMSAxIDAgMCAxIDAgLjJsLTIuNiAxMGExIDEgMCAwIDEtMSAuOGgtLjJhLjguOCAwIDAgMS0uOC0xbDIuNi0xMEg4YTEgMSAwIDEgMSAwLTJoOWExIDEgMCAwIDEgMCAyaC0zLjhaTTUgMThoN2ExIDEgMCAwIDEgMCAySDVhMSAxIDAgMCAxIDAtMlptMTMgMS41TDE2LjUgMTggMTUgMTkuNWEuNy43IDAgMCAxLTEtMWwxLjUtMS41LTEuNS0xLjVhLjcuNyAwIDAgMSAxLTFsMS41IDEuNSAxLjUtMS41YS43LjcgMCAwIDEgMSAxTDE3LjUgMTdsMS41IDEuNWEuNy43IDAgMCAxLTEgMVpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ3JlbW92ZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTYgN2gzYTEgMSAwIDAgMSAwIDJoLTF2OWEzIDMgMCAwIDEtMyAzSDlhMyAzIDAgMCAxLTMtM1Y5SDVhMSAxIDAgMSAxIDAtMmgzVjZhMyAzIDAgMCAxIDMtM2gyYTMgMyAwIDAgMSAzIDN2MVptLTIgMFY2YzAtLjYtLjQtMS0xLTFoLTJhMSAxIDAgMCAwLTEgMXYxaDRabTIgMkg4djljMCAuNi40IDEgMSAxaDZjLjYgMCAxLS40IDEtMVY5Wm0tNyAzYTEgMSAwIDAgMSAyIDB2NGExIDEgMCAwIDEtMiAwdi00Wm00IDBhMSAxIDAgMCAxIDIgMHY0YTEgMSAwIDAgMS0yIDB2LTRaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdyZXNpemUtaGFuZGxlJzogJzxzdmcgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCI+PGcgZmlsbC1ydWxlPVwibm9uemVyb1wiPjxwYXRoIGQ9XCJNOC4xIDEuMUEuNS41IDAgMSAxIDkgMmwtNyA3QS41LjUgMCAxIDEgMSA4bDctN1pNOC4xIDUuMUEuNS41IDAgMSAxIDkgNmwtMyAzQS41LjUgMCAxIDEgNSA4bDMtM1pcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ3Jlc2l6ZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNNCA1YzAtLjMuMS0uNS4zLS43LjItLjIuNC0uMy43LS4zaDZjLjMgMCAuNS4xLjcuMy4yLjIuMy40LjMuNyAwIC4zLS4xLjUtLjMuN2ExIDEgMCAwIDEtLjcuM0g3LjRMMTggMTYuNlYxM2MwLS4zLjEtLjUuMy0uNy4yLS4yLjQtLjMuNy0uMy4zIDAgLjUuMS43LjMuMi4yLjMuNC4zLjd2NmMwIC4zLS4xLjUtLjMuN2ExIDEgMCAwIDEtLjcuM2gtNmExIDEgMCAwIDEtLjctLjMgMSAxIDAgMCAxLS4zLS43YzAtLjMuMS0uNS4zLS43LjItLjIuNC0uMy43LS4zaDMuNkw2IDcuNFYxMWMwIC4zLS4xLjUtLjMuN2ExIDEgMCAwIDEtLjcuMyAxIDEgMCAwIDEtLjctLjNBMSAxIDAgMCAxIDQgMTFWNVpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ3Jlc3RvcmUtZHJhZnQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHBhdGggZD1cIk0xNyAxM2MwIC42LS40IDEtMSAxaC00VjhjMC0uNi40LTEgMS0xczEgLjQgMSAxdjRoMmMuNiAwIDEgLjQgMSAxWlwiLz48cGF0aCBkPVwiTTQuNyAxMEg5YTEgMSAwIDAgMSAwIDJIM2ExIDEgMCAwIDEtMS0xVjVhMSAxIDAgMSAxIDIgMHYzbDIuNS0yLjRhOS4yIDkuMiAwIDAgMSAxMC44LTEuNUE5IDkgMCAwIDEgMTMuNCAyMWMtMi40LjEtNC43LS43LTYuNS0yLjJhMSAxIDAgMSAxIDEuMy0xLjUgNy4yIDcuMiAwIDAgMCAxMS42LTMuNyA3IDcgMCAwIDAtMy41LTcuN0E3LjIgNy4yIDAgMCAwIDggN0w0LjcgMTBaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L2c+PC9zdmc+JyxcbiAgICAncm90YXRlLWxlZnQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTQuNyAxMEg5YTEgMSAwIDAgMSAwIDJIM2ExIDEgMCAwIDEtMS0xVjVhMSAxIDAgMSAxIDIgMHYzbDIuNS0yLjRhOS4yIDkuMiAwIDAgMSAxMC44LTEuNUE5IDkgMCAwIDEgMTMuNCAyMWMtMi40LjEtNC43LS43LTYuNS0yLjJhMSAxIDAgMSAxIDEuMy0xLjUgNy4yIDcuMiAwIDAgMCAxMS42LTMuNyA3IDcgMCAwIDAtMy41LTcuN0E3LjIgNy4yIDAgMCAwIDggN0w0LjcgMTBaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdyb3RhdGUtcmlnaHQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTIwIDhWNWExIDEgMCAwIDEgMiAwdjZjMCAuNi0uNCAxLTEgMWgtNmExIDEgMCAwIDEgMC0yaDQuM0wxNiA3QTcuMiA3LjIgMCAwIDAgNy43IDZhNyA3IDAgMCAwIDMgMTMuMWMxLjkuMSAzLjctLjUgNS0xLjdhMSAxIDAgMCAxIDEuNCAxLjVBOS4yIDkuMiAwIDAgMSAyLjIgMTRjLS45LTMuOSAxLTggNC41LTkuOSAzLjUtMS45IDgtMS4zIDEwLjggMS41TDIwIDhaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdydGwnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTggNWg4djJoLTJ2MTJoLTJWN2gtMnYxMkg4di03Yy0uNSAwLTEgMC0xLjQtLjNBMy40IDMuNCAwIDAgMSA0LjggMTBhMy4zIDMuMyAwIDAgMSAwLTIuOCAzLjQgMy40IDAgMCAxIDEuOC0xLjhMOCA1Wm0xMiAxMS4yYTEgMSAwIDEgMS0xIDEuNmwtMy0yYTEgMSAwIDAgMSAwLTEuNmwzLTJhMSAxIDAgMSAxIDEgMS42TDE4LjQgMTVsMS44IDEuMlpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ3NhdmUnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTUgMTZoMTRhMiAyIDAgMCAxIDIgMnYyYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi0yYzAtMS4xLjktMiAyLTJabTAgMnYyaDE0di0ySDVabTEwIDBoMnYyaC0ydi0yWm0tNC02LjRMOC43IDkuM2ExIDEgMCAxIDAtMS40IDEuNGw0IDRjLjQuNCAxIC40IDEuNCAwbDQtNGExIDEgMCAxIDAtMS40LTEuNEwxMyAxMS42VjRhMSAxIDAgMCAwLTIgMHY3LjZaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdzZWFyY2gnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE2IDE3LjNhOCA4IDAgMSAxIDEuNC0xLjRsNC4zIDQuNGExIDEgMCAwIDEtMS40IDEuNGwtNC40LTQuM1ptLTUtLjNhNiA2IDAgMSAwIDAtMTIgNiA2IDAgMCAwIDAgMTJaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdzZWxlY3QtYWxsJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0zIDVoMlYzYTIgMiAwIDAgMC0yIDJabTAgOGgydi0ySDN2MlptNCA4aDJ2LTJIN3YyWk0zIDloMlY3SDN2MlptMTAtNmgtMnYyaDJWM1ptNiAwdjJoMmEyIDIgMCAwIDAtMi0yWk01IDIxdi0ySDNjMCAxLjEuOSAyIDIgMlptLTItNGgydi0ySDN2MlpNOSAzSDd2MmgyVjNabTIgMThoMnYtMmgtMnYyWm04LThoMnYtMmgtMnYyWm0wIDhhMiAyIDAgMCAwIDItMmgtMnYyWm0wLTEyaDJWN2gtMnYyWm0wIDhoMnYtMmgtMnYyWm0tNCA0aDJ2LTJoLTJ2MlptMC0xNmgyVjNoLTJ2MlpNNyAxN2gxMFY3SDd2MTBabTItOGg2djZIOVY5WlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnc2VsZWN0ZWQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIk02IDRoMTJhMiAyIDAgMCAxIDIgMnYxMmEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YzAtMS4xLjktMiAyLTJabTMuNiAxMC45TDcgMTIuM2EuNy43IDAgMCAwLTEgMUw5LjYgMTcgMTggOC42YS43LjcgMCAwIDAgMC0xIC43LjcgMCAwIDAtMSAwbC03LjQgNy4zWlwiLz48L3N2Zz4nLFxuICAgICdzZW5kJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwibTEzLjMgMjIgNy0xOC4zLTE4LjMgN0w5IDE1bDQuMyA3Wk0xOCA2LjhsLS43LS43TDkuNCAxNGwuNy43TDE4IDYuOFpcIi8+PC9zdmc+JyxcbiAgICAnc2V0dGluZ3MnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTExIDZoOGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMWgtOHYuM2MwIC4yIDAgLjMtLjIuNWwtLjYuMkg3LjhjLS4zIDAtLjQgMC0uNi0uMmEuNy43IDAgMCAxLS4yLS42VjhINWExIDEgMCAxIDEgMC0yaDJ2LS4zYzAtLjIgMC0uMy4yLS41bC41LS4yaDIuNWMuMyAwIC40IDAgLjYuMmwuMi41VjZaTTggOGgyVjZIOHYyWm05IDIuOHYuMmgyYy42IDAgMSAuNCAxIDFzLS40IDEtMSAxaC0ydi4zYzAgLjIgMCAuMy0uMi41bC0uNi4yaC0yLjRjLS4zIDAtLjQgMC0uNi0uMmEuNy43IDAgMCAxLS4yLS42VjEzSDVhMSAxIDAgMCAxIDAtMmg4di0uM2MwLS4yIDAtLjMuMi0uNWwuNi0uMmgyLjRjLjMgMCAuNCAwIC42LjJsLjIuNlpNMTQgMTNoMnYtMmgtMnYyWm0tMyAyLjh2LjJoOGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMWgtOHYuM2MwIC4yIDAgLjMtLjIuNWwtLjYuMkg3LjhjLS4zIDAtLjQgMC0uNi0uMmEuNy43IDAgMCAxLS4yLS42VjE4SDVhMSAxIDAgMCAxIDAtMmgydi0uM2MwLS4yIDAtLjMuMi0uNWwuNS0uMmgyLjVjLjMgMCAuNCAwIC42LjJsLjIuNlpNOCAxOGgydi0ySDh2MlpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ3NoYXJwZW4nOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwibTE2IDYgNCA0LTggOS04LTkgNC00aDhabS00IDEwLjIgNS41LTYuMi0uMS0uMUgxMnYtLjNoNS4xbC0uMi0uMkgxMlY5aDQuNmwtLjItLjJIMTJ2LS4zaDQuMWwtLjItLjJIMTJWOGgzLjZsLS4yLS4ySDguN0w2LjUgMTBsLjEuMUgxMnYuM0g2LjlsLjIuMkgxMnYuM0g3LjNsLjIuMkgxMnYuM0g3LjdsLjMuMmg0di4zSDguMmwuMi4ySDEydi4zSDguNmwuMy4ySDEydi4zSDlsLjMuMkgxMnYuM0g5LjVsLjIuMkgxMnYuM2gtMmwuMi4ySDEydi4zaC0xLjZsLjIuMkgxMnYuM2gtMS4xbC4yLjJoLjl2LjNoLS43bC4yLjJoLjV2LjNoLS4zbC4zLjJaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdzb3VyY2Vjb2RlJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PGcgZmlsbC1ydWxlPVwibm9uemVyb1wiPjxwYXRoIGQ9XCJNOS44IDE1LjdjLjMuMy4zLjggMCAxLS4zLjQtLjkuNC0xLjIgMGwtNC40LTQuMWEuOC44IDAgMCAxIDAtMS4ybDQuNC00LjJjLjMtLjMuOS0uMyAxLjIgMCAuMy4zLjMuOCAwIDEuMUw2IDEybDMuOCAzLjdaTTE0LjIgMTUuN2MtLjMuMy0uMy44IDAgMSAuNC40LjkuNCAxLjIgMGw0LjQtNC4xYy4zLS4zLjMtLjkgMC0xLjJsLTQuNC00LjJhLjguOCAwIDAgMC0xLjIgMGMtLjMuMy0uMy44IDAgMS4xTDE4IDEybC0zLjggMy43WlwiLz48L2c+PC9zdmc+JyxcbiAgICAnc3BlbGwtY2hlY2snOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTYgOHYzSDVWNWMwLS4zLjEtLjUuMy0uNy4yLS4yLjQtLjMuNy0uM2gyYy4zIDAgLjUuMS43LjMuMi4yLjMuNC4zLjd2Nkg4VjhINlptMC0zdjJoMlY1SDZabTEzIDBoLTN2NWgzdjFoLTNhMSAxIDAgMCAxLS43LS4zIDEgMSAwIDAgMS0uMy0uN1Y1YzAtLjMuMS0uNS4zLS43LjItLjIuNC0uMy43LS4zaDN2MVptLTUgMS41LS4xLjdjLS4xLjItLjMuMy0uNi4zLjMgMCAuNS4xLjYuM2wuMS43VjEwYzAgLjMtLjEuNS0uMy43YTEgMSAwIDAgMS0uNy4zaC0zVjRoM2MuMyAwIC41LjEuNy4zLjIuMi4zLjQuMy43djEuNVpNMTMgMTBWOGgtMnYyaDJabTAtM1Y1aC0ydjJoMlptMyA1IDEgMS02LjUgN0w3IDE1LjVsMS4zLTEgMi4yIDIuMkwxNiAxMlpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ3N0cmlrZS10aHJvdWdoJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PGcgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPjxwYXRoIGQ9XCJNMTUuNiA4LjVjLS41LS43LTEtMS4xLTEuMy0xLjMtLjYtLjQtMS4zLS42LTItLjYtMi43IDAtMi44IDEuNy0yLjggMi4xIDAgMS42IDEuOCAyIDMuMiAyLjMgNC40LjkgNC42IDIuOCA0LjYgMy45IDAgMS40LS43IDQuMS01IDQuMUE2LjIgNi4yIDAgMCAxIDcgMTYuNGwxLjUtMS4xYy40LjYgMS42IDIgMy43IDIgMS42IDAgMi41LS40IDMtMS4yLjQtLjguMy0yLS44LTIuNi0uNy0uNC0xLjYtLjctMi45LTEtMS0uMi0zLjktLjgtMy45LTMuNkM3LjYgNiAxMC4zIDUgMTIuNCA1YzIuOSAwIDQuMiAxLjYgNC43IDIuNGwtMS41IDEuMVpcIi8+PHBhdGggZD1cIk01IDExaDE0YTEgMSAwIDAgMSAwIDJINWExIDEgMCAwIDEgMC0yWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9nPjwvc3ZnPicsXG4gICAgJ3N1YnNjcmlwdCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJtMTAuNCAxMCA0LjYgNC42LTEuNCAxLjRMOSAxMS40IDQuNCAxNiAzIDE0LjYgNy42IDEwIDMgNS40IDQuNCA0IDkgOC42IDEzLjYgNCAxNSA1LjQgMTAuNCAxMFpNMjEgMTloLTV2LTFsMS0uOCAxLjctMS42Yy4zLS40LjUtLjguNS0xLjIgMC0uMyAwLS42LS4yLS43LS4yLS4yLS41LS4zLS45LS4zYTIgMiAwIDAgMC0uOC4ybC0uNy4zLS40LTEuMSAxLS42IDEuMi0uMmMuOCAwIDEuNC4zIDEuOC43LjQuNC42LjkuNiAxLjVzLS4yIDEuMS0uNSAxLjZhOCA4IDAgMCAxLTEuMyAxLjNsLS42LjZoMi42VjE5WlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnc3VwZXJzY3JpcHQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE1IDkuNCAxMC40IDE0bDQuNiA0LjYtMS40IDEuNEw5IDE1LjQgNC40IDIwIDMgMTguNiA3LjYgMTQgMyA5LjQgNC40IDggOSAxMi42IDEzLjYgOCAxNSA5LjRabTUuOSAxLjZoLTV2LTFsMS0uOCAxLjctMS42Yy4zLS41LjUtLjkuNS0xLjMgMC0uMyAwLS41LS4yLS43LS4yLS4yLS41LS4zLS45LS4zbC0uOC4yLS43LjQtLjQtMS4yYy4yLS4yLjUtLjQgMS0uNS4zLS4yLjgtLjIgMS4yLS4yLjggMCAxLjQuMiAxLjguNi40LjQuNiAxIC42IDEuNiAwIC41LS4yIDEtLjUgMS41bC0xLjMgMS40LS42LjVoMi42VjExWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAndGFibGUtY2FwdGlvbic6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxnIGZpbGwtcnVsZT1cIm5vbnplcm9cIj48cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMlwiIHg9XCIzXCIgeT1cIjRcIiByeD1cIjFcIi8+PHBhdGggZD1cIk0xOSA4YTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtOGMwLTEuMS45LTIgMi0yaDE0Wk01IDE1djNoNnYtM0g1Wm0xNCAwaC02djNoNnYtM1ptMC01aC02djNoNnYtM1pNNSAxM2g2di0zSDV2M1pcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ3RhYmxlLWNlbGwtY2xhc3Nlcyc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxnIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIk0xMyA0djlIM1Y2YzAtMS4xLjktMiAyLTJoOFptLTIgMkg1djVoNlY2WlwiLz48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIk0xMyA0aDZhMiAyIDAgMCAxIDIgMnY3aC04di0yaDZWNmgtNlY0WlwiIG9wYWNpdHk9XCIuMlwiLz48cGF0aCBkPVwibTE4IDIwLTIuNiAxLjYuNy0zLTIuNC0yIDMuMS0uMiAxLjItMi45IDEuMiAyLjkgMy4xLjItMi40IDIgLjcgM3pcIi8+PHBhdGggZmlsbC1ydWxlPVwibm9uemVyb1wiIGQ9XCJNMyAxM3Y1YzAgMS4xLjkgMiAyIDJoOHYtN2gtMnY1SDV2LTVIM1pcIiBvcGFjaXR5PVwiLjJcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ3RhYmxlLWNlbGwtcHJvcGVydGllcyc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGZpbGwtcnVsZT1cIm5vbnplcm9cIiBkPVwiTTE5IDRhMiAyIDAgMCAxIDIgMnYxMmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY2YzAtMS4xLjktMiAyLTJoMTRabS04IDlINXY1aDZ2LTVabTggMGgtNnY1aDZ2LTVabS04LTdINXY1aDZWNlpcIi8+PC9zdmc+JyxcbiAgICAndGFibGUtY2VsbC1zZWxlY3QtYWxsJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PGcgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPjxwYXRoIGZpbGwtcnVsZT1cIm5vbnplcm9cIiBkPVwiTTE5IDRhMiAyIDAgMCAxIDIgMnYxMmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY2YzAtMS4xLjktMiAyLTJoMTRabTAgMkg1djEyaDE0VjZaXCIvPjxwYXRoIGQ9XCJNMTMgNnY1aDZ2MmgtNnY1aC0ydi01SDV2LTJoNlY2aDJaXCIgb3BhY2l0eT1cIi4yXCIvPjwvZz48L3N2Zz4nLFxuICAgICd0YWJsZS1jZWxsLXNlbGVjdC1pbm5lcic6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxnIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIk0xOSA0YTIgMiAwIDAgMSAyIDJ2MTJhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNmMwLTEuMS45LTIgMi0yaDE0Wm0wIDJINXYxMmgxNFY2WlwiIG9wYWNpdHk9XCIuMlwiLz48cGF0aCBkPVwiTTEzIDZ2NWg2djJoLTZ2NWgtMnYtNUg1di0yaDZWNmgyWlwiLz48L2c+PC9zdmc+JyxcbiAgICAndGFibGUtY2xhc3Nlcyc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxnIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIk0xOSA0YTIgMiAwIDAgMSAyIDJ2N2gtOHY3SDVhMiAyIDAgMCAxLTItMlY2YzAtMS4xLjktMiAyLTJoMTRabS04IDlINXY1aDZ2LTVabTgtN2gtNnY1aDZWNlptLTggMEg1djVoNlY2WlwiLz48cGF0aCBkPVwibTE4IDIwLTIuNiAxLjYuNy0zLTIuNC0yIDMuMS0uMiAxLjItMi45IDEuMiAyLjkgMy4xLjItMi40IDIgLjcgM3pcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ3RhYmxlLWRlbGV0ZS1jb2x1bW4nOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIk0xOSA0YTIgMiAwIDAgMSAyIDJ2MTJhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNmMwLTEuMS45LTIgMi0yaDE0Wm0tNCA0aC0yVjZoLTJ2Mkg5VjZINXYxMmg0di0yaDJ2Mmgydi0yaDJ2Mmg0VjZoLTR2MlptLjMuNSAxIDEuMi0zIDIuMyAzIDIuMy0xIDEuMkwxMiAxM2wtMy4zIDIuNi0xLTEuMiAzLTIuMy0zLTIuMyAxLTEuMkwxMiAxMWwzLjMtMi41WlwiLz48L3N2Zz4nLFxuICAgICd0YWJsZS1kZWxldGUtcm93JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZmlsbC1ydWxlPVwibm9uemVyb1wiIGQ9XCJNMTkgNGEyIDIgMCAwIDEgMiAydjEyYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjZjMC0xLjEuOS0yIDItMmgxNFptMCAySDV2M2gyLjV2Mkg1djJoMi41djJINXYzaDE0di0zaC0yLjV2LTJIMTl2LTJoLTIuNVY5SDE5VjZabS00LjcgMS44IDEuMiAxTDEzIDEybDIuNiAzLjMtMS4yIDEtMi4zLTMtMi4zIDMtMS4yLTFMMTEgMTIgOC41IDguN2wxLjItMSAyLjMgMyAyLjMtM1pcIi8+PC9zdmc+JyxcbiAgICAndGFibGUtZGVsZXRlLXRhYmxlJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PGcgZmlsbC1ydWxlPVwibm9uemVyb1wiPjxwYXRoIGQ9XCJNMTkgNGEyIDIgMCAwIDEgMiAydjEyYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjZjMC0xLjEuOS0yIDItMmgxNFpNNSA2djEyaDE0VjZINVpcIi8+PHBhdGggZD1cIm0xNC40IDguNiAxLjEgMS0yLjQgMi40IDIuNCAyLjQtMS4xIDEuMS0yLjQtMi40LTIuNCAyLjQtMS0xLjEgMi4zLTIuNC0yLjMtMi40IDEtMSAyLjQgMi4zelwiLz48L2c+PC9zdmc+JyxcbiAgICAndGFibGUtaW5zZXJ0LWNvbHVtbi1hZnRlcic6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGZpbGwtcnVsZT1cIm5vbnplcm9cIiBkPVwiTTIwIDRjLjYgMCAxIC40IDEgMXYyYTEgMSAwIDAgMS0yIDBWNmgtOHYxMmg4di0xYTEgMSAwIDAgMSAyIDB2MmMwIC41LS40IDEtLjkgMUg1YTIgMiAwIDAgMS0yLTJWNmMwLTEuMS45LTIgMi0yaDE1Wk05IDEzSDV2NWg0di01Wm03LTVjLjUgMCAxIC40IDEgLjlWMTFoMmExIDEgMCAwIDEgLjEgMkgxN3YyYTEgMSAwIDAgMS0yIC4xVjEzaC0yYTEgMSAwIDAgMS0uMS0ySDE1VjljMC0uNi40LTEgMS0xWk05IDZINXY1aDRWNlpcIi8+PC9zdmc+JyxcbiAgICAndGFibGUtaW5zZXJ0LWNvbHVtbi1iZWZvcmUnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIk0xOSA0YTIgMiAwIDAgMSAyIDJ2MTJhMiAyIDAgMCAxLTIgMkg0YTEgMSAwIDAgMS0xLTF2LTJhMSAxIDAgMCAxIDIgMHYxaDhWNkg1djFhMSAxIDAgMSAxLTIgMFY1YzAtLjYuNC0xIDEtMWgxNVptMCA5aC00djVoNHYtNVpNOCA4Yy41IDAgMSAuNCAxIC45VjExaDJhMSAxIDAgMCAxIC4xIDJIOXYyYTEgMSAwIDAgMS0yIC4xVjEzSDVhMSAxIDAgMCAxLS4xLTJIN1Y5YzAtLjYuNC0xIDEtMVptMTEtMmgtNHY1aDRWNlpcIi8+PC9zdmc+JyxcbiAgICAndGFibGUtaW5zZXJ0LXJvdy1hYm92ZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGZpbGwtcnVsZT1cIm5vbnplcm9cIiBkPVwiTTYgNGExIDEgMCAxIDEgMCAySDV2NmgxNFY2aC0xYTEgMSAwIDAgMSAwLTJoMmMuNiAwIDEgLjQgMSAxdjEzYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVjMC0uNi40LTEgMS0xaDJabTUgMTBINXY0aDZ2LTRabTggMGgtNnY0aDZ2LTRaTTEyIDNjLjUgMCAxIC40IDEgLjlWNmgyYTEgMSAwIDAgMSAwIDJoLTJ2MmExIDEgMCAwIDEtMiAuMVY4SDlhMSAxIDAgMCAxIDAtMmgyVjRjMC0uNi40LTEgMS0xWlwiLz48L3N2Zz4nLFxuICAgICd0YWJsZS1pbnNlcnQtcm93LWFmdGVyJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZmlsbC1ydWxlPVwibm9uemVyb1wiIGQ9XCJNMTIgMTNjLjUgMCAxIC40IDEgLjlWMTZoMmExIDEgMCAwIDEgLjEgMkgxM3YyYTEgMSAwIDAgMS0yIC4xVjE4SDlhMSAxIDAgMCAxLS4xLTJIMTF2LTJjMC0uNi40LTEgMS0xWm02IDdhMSAxIDAgMCAxIDAtMmgxdi02SDV2NmgxYTEgMSAwIDAgMSAwIDJINGExIDEgMCAwIDEtMS0xVjZjMC0xLjEuOS0yIDItMmgxNGEyIDIgMCAwIDEgMiAydjEzYzAgLjUtLjQgMS0uOSAxSDE4Wk0xMSA2SDV2NGg2VjZabTggMGgtNnY0aDZWNlpcIi8+PC9zdmc+JyxcbiAgICAndGFibGUtbGVmdC1oZWFkZXInOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE5IDRhMiAyIDAgMCAxIDIgMnYxMmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY2YzAtMS4xLjktMiAyLTJoMTRabTAgOWgtNHY1aDR2LTVabS02IDBIOXY1aDR2LTVabTAtN0g5djVoNFY2Wm02IDBoLTR2NWg0VjZaXCIvPjwvc3ZnPicsXG4gICAgJ3RhYmxlLW1lcmdlLWNlbGxzJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZmlsbC1ydWxlPVwibm9uemVyb1wiIGQ9XCJNMTkgNGEyIDIgMCAwIDEgMiAydjEyYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjZjMC0xLjEuOS0yIDItMmgxNFpNNSAxNS41VjE4aDN2LTIuNUg1Wm0xNC01aC05VjE4aDl2LTcuNVpNMTkgNmgtNHYyLjVoNFY2Wk04IDZINXYyLjVoM1Y2Wm01IDBoLTN2Mi41aDNWNlptLTggNy41aDN2LTNINXYzWlwiLz48L3N2Zz4nLFxuICAgICd0YWJsZS1yb3ctbnVtYmVyaW5nLXJ0bCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNNiA0YTIgMiAwIDAgMC0yIDJ2MTNjMCAxLjEuOSAyIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjZhMiAyIDAgMCAwLTItMkg2Wm0wIDEyaDh2M0g2di0zWm0xMSAwYy42IDAgMSAuNCAxIDF2MWExIDEgMCAwIDEtMiAwdi0xYzAtLjYuNC0xIDEtMVpNNiAxMWg4djNINnYtM1ptMTEgMGMuNiAwIDEgLjQgMSAxdjFhMSAxIDAgMCAxLTIgMHYtMWMwLS42LjQtMSAxLTFaTTYgNmg4djNINlY2Wm0xMSAwYy42IDAgMSAuNCAxIDF2MWExIDEgMCAxIDEtMiAwVjdjMC0uNi40LTEgMS0xWlwiLz48L3N2Zz4nLFxuICAgICd0YWJsZS1yb3ctbnVtYmVyaW5nJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xOCA0YTIgMiAwIDAgMSAyIDJ2MTNhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNmMwLTEuMS45LTIgMi0yaDEyWm0wIDEyaC04djNoOHYtM1pNNyAxNmExIDEgMCAwIDAtMSAxdjFhMSAxIDAgMCAwIDIgMHYtMWMwLS42LS40LTEtMS0xWm0xMS01aC04djNoOHYtM1pNNyAxMWExIDEgMCAwIDAtMSAxdjFhMSAxIDAgMCAwIDIgMHYtMWMwLS42LS40LTEtMS0xWm0xMS01aC04djNoOFY2Wk03IDZhMSAxIDAgMCAwLTEgMXYxYTEgMSAwIDEgMCAyIDBWN2MwLS42LS40LTEtMS0xWlwiLz48L3N2Zz4nLFxuICAgICd0YWJsZS1yb3ctcHJvcGVydGllcyc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGZpbGwtcnVsZT1cIm5vbnplcm9cIiBkPVwiTTE5IDRhMiAyIDAgMCAxIDIgMnYxMmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY2YzAtMS4xLjktMiAyLTJoMTRaTTUgMTV2M2g2di0zSDVabTE0IDBoLTZ2M2g2di0zWm0wLTloLTZ2M2g2VjZaTTUgOWg2VjZINXYzWlwiLz48L3N2Zz4nLFxuICAgICd0YWJsZS1zcGxpdC1jZWxscyc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGZpbGwtcnVsZT1cIm5vbnplcm9cIiBkPVwiTTE5IDRhMiAyIDAgMCAxIDIgMnYxMmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY2YzAtMS4xLjktMiAyLTJoMTRaTTggMTUuNUg1VjE4aDN2LTIuNVptMTEtNWgtOVYxOGg5di03LjVabS0yLjUgMSAxIDEtMiAyIDIgMi0xIDEtMi0yLTIgMi0xLTEgMi0yLTItMiAxLTEgMiAyIDItMlptLTguNS0xSDV2M2gzdi0zWk0xOSA2aC00djIuNWg0VjZaTTggNkg1djIuNWgzVjZabTUgMGgtM3YyLjVoM1Y2WlwiLz48L3N2Zz4nLFxuICAgICd0YWJsZS10b3AtaGVhZGVyJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xOSA0YTIgMiAwIDAgMSAyIDJ2MTJhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNmMwLTEuMS45LTIgMi0yaDE0Wm0tOCAxMUg1djNoNnYtM1ptOCAwaC02djNoNnYtM1ptMC01aC02djNoNnYtM1pNNSAxM2g2di0zSDV2M1pcIi8+PC9zdmc+JyxcbiAgICAndGFibGUnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIk0xOSA0YTIgMiAwIDAgMSAyIDJ2MTJhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNmMwLTEuMS45LTIgMi0yaDE0Wk01IDE0djRoNnYtNEg1Wm0xNCAwaC02djRoNnYtNFptMC02aC02djRoNlY4Wk01IDEyaDZWOEg1djRaXCIvPjwvc3ZnPicsXG4gICAgJ3RlbXBsYXRlLWFkZCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk05IDEydjRINWEyIDIgMCAwIDAtMiAydjNoOS4zYTYgNiAwIDAgMS0uMy0ySDV2LTFoN2E2IDYgMCAwIDEgLjgtMkgxMXYtNWwtLjgtLjZhMyAzIDAgMSAxIDMuNiAwbC0uOC42djQuN2E2IDYgMCAwIDEgMi0xLjlWMTJhNSA1IDAgMSAwLTYgMFpcIi8+PHBhdGggZD1cIk0xOCAxNWMuNSAwIDEgLjQgMSAuOVYxOGgyYTEgMSAwIDAgMSAuMSAySDE5djJhMSAxIDAgMCAxLTIgLjFWMjBoLTJhMSAxIDAgMCAxLS4xLTJIMTd2LTJjMC0uNi40LTEgMS0xWlwiLz48L3N2Zz4nLFxuICAgICd0ZW1wbGF0ZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTkgMTl2LTFINXYxaDE0Wk05IDE2di00YTUgNSAwIDEgMSA2IDB2NGg0YTIgMiAwIDAgMSAyIDJ2M0gzdi0zYzAtMS4xLjktMiAyLTJoNFptNCAwdi01bC44LS42YTMgMyAwIDEgMC0zLjYgMGwuOC42djVoMlpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ3RlbXBvcmFyeS1wbGFjZWhvbGRlcic6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxnIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBkPVwiTTkgNy42VjZoMi41VjQuNWEuNS41IDAgMSAxIDEgMFY2SDE1djEuNmE4IDggMCAxIDEtNiAwWm0tMi42IDUuM2EuNS41IDAgMCAwIC4zLjZjLjMgMCAuNiAwIC42LS4zbC4xLS4yYTUgNSAwIDAgMSAzLjMtMi44Yy4zLS4xLjQtLjQuNC0uNi0uMS0uMy0uNC0uNS0uNi0uNGE2IDYgMCAwIDAtNC4xIDMuN1pcIi8+PGNpcmNsZSBjeD1cIjE0XCIgY3k9XCI0XCIgcj1cIjFcIi8+PGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIyXCIgcj1cIjFcIi8+PGNpcmNsZSBjeD1cIjEwXCIgY3k9XCI0XCIgcj1cIjFcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ3RleHQtY29sb3InOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHBhdGggY2xhc3M9XCJ0b3gtaWNvbi10ZXh0LWNvbG9yX19jb2xvclwiIGQ9XCJNMyAxOGgxOHYzSDN6XCIvPjxwYXRoIGQ9XCJNOC43IDE2aC0uOGEuNS41IDAgMCAxLS41LS42bDIuNy05Yy4xLS4zLjMtLjQuNS0uNGgyLjhjLjIgMCAuNC4xLjUuNGwyLjcgOWEuNS41IDAgMCAxLS41LjZoLS44YS41LjUgMCAwIDEtLjQtLjRsLS43LTIuMmMwLS4zLS4zLS40LS41LS40aC0zLjRjLS4yIDAtLjQuMS0uNS40bC0uNyAyLjJjMCAuMy0uMi40LS40LjRabTIuNi03LjYtLjYgMmEuNS41IDAgMCAwIC41LjZoMS42YS41LjUgMCAwIDAgLjUtLjZsLS42LTJjMC0uMy0uMy0uNC0uNS0uNGgtLjRjLS4yIDAtLjQuMS0uNS40WlwiLz48L2c+PC9zdmc+JyxcbiAgICAndGV4dC1zaXplLWRlY3JlYXNlJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTE0IDVhMSAxIDAgMSAxIDAgMmgtNHYxMWExIDEgMCAxIDEtMiAwVjdINGExIDEgMCAwIDEgMC0yaDEwWk0xNCAxMmExIDEgMCAxIDAgMCAyaDZhMSAxIDAgMSAwIDAtMmgtNlpcIi8+PC9zdmc+JyxcbiAgICAndGV4dC1zaXplLWluY3JlYXNlJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTE0IDVhMSAxIDAgMSAxIDAgMmgtNHYxMWExIDEgMCAxIDEtMiAwVjdINGExIDEgMCAwIDEgMC0yaDEwWk0xNyA5YTEgMSAwIDAgMC0xIDF2MmgtMmExIDEgMCAxIDAgMCAyaDJ2MmExIDEgMCAxIDAgMiAwdi0yaDJhMSAxIDAgMSAwIDAtMmgtMnYtMmMwLS42LS40LTEtMS0xWlwiLz48L3N2Zz4nLFxuICAgICd0b2MnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTUgNWMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMWExIDEgMCAxIDEgMC0yWm0zIDBoMTFjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFIOGExIDEgMCAxIDEgMC0yWm0tMyA4Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxYTEgMSAwIDAgMSAwLTJabTMgMGgxMWMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMUg4YTEgMSAwIDAgMSAwLTJabTAtNGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMWExIDEgMCAxIDEgMC0yWm0zIDBoOGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMWgtOGExIDEgMCAwIDEgMC0yWm0tMyA4Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxYTEgMSAwIDAgMSAwLTJabTMgMGg4Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxaC04YTEgMSAwIDAgMSAwLTJaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICd0cmFuc2xhdGUnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwibTEyLjcgMTQuMy0uMy43LS40LjctMi4yLTIuMi0zLjEgM2MtLjMuNC0uOC40LTEgMGEuNy43IDAgMCAxIDAtMWwzLjEtM0ExMi40IDEyLjQgMCAwIDEgNi43IDlIOGExMC4xIDEwLjEgMCAwIDAgMS43IDIuNGMuNS0uNSAxLTEuMSAxLjQtMS44bC45LTJINC43YS43LjcgMCAxIDEgMC0xLjVoNC40di0uN2MwLS40LjMtLjguNy0uOC40IDAgLjcuNC43Ljh2LjdIMTVjLjQgMCAuOC4zLjguNyAwIC40LS40LjgtLjguOGgtMS40YTEyLjMgMTIuMyAwIDAgMS0xIDIuNCAxMy41IDEzLjUgMCAwIDEtMS43IDIuM2wxLjkgMS44Wm00LjMtMyAyLjcgNy4zYS41LjUgMCAwIDEtLjQuNyAxIDEgMCAwIDEtMS0uN2wtLjYtMS41aC0zLjRsLS42IDEuNWExIDEgMCAwIDEtMSAuNy41LjUgMCAwIDEtLjQtLjdsMi43LTcuNGExIDEgMCAwIDEgMiAwWm0tMi4yIDQuNGgyLjRMMTYgMTIuNWwtMS4yIDMuMlpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ3R5cG9ncmFwaHknOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTcgNWExIDEgMCAxIDEgMCAyaC00djExYTEgMSAwIDEgMS0yIDBWN0g3YTEgMSAwIDAgMSAwLTJoMTBaXCIvPjxwYXRoIGQ9XCJtMTcuNSAxNCAuOC0xLjcgMS43LS44LTEuNy0uOC0uOC0xLjctLjggMS43LTEuNy44IDEuNy44LjggMS43Wk03IDE0bDEgMiAyIDEtMiAxLTEgMi0xLTItMi0xIDItMSAxLTJaXCIvPjwvc3ZnPicsXG4gICAgJ3VuZGVybGluZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTYgNWMuNiAwIDEgLjQgMSAxdjUuNWE0IDQgMCAwIDEtLjQgMS44bC0xIDEuNGE1LjMgNS4zIDAgMCAxLTUuNSAxIDUgNSAwIDAgMS0xLjYtMWMtLjUtLjQtLjgtLjktMS4xLTEuNGE0IDQgMCAwIDEtLjQtMS44VjZjMC0uNi40LTEgMS0xczEgLjQgMSAxdjUuNWMwIC4zIDAgLjYuMiAxbC42LjdhMy4zIDMuMyAwIDAgMCAyLjIuOCAzLjQgMy40IDAgMCAwIDIuMi0uOGMuMy0uMi40LS41LjYtLjhsLjItLjlWNmMwLS42LjQtMSAxLTFaTTggMTdoOGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMUg4YTEgMSAwIDAgMSAwLTJaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICd1bmRvJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk02LjQgOEgxMmMzLjcgMCA2LjIgMiA2LjggNS4xLjYgMi43LS40IDUuNi0yLjMgNi44YTEgMSAwIDAgMS0xLTEuOGMxLjEtLjYgMS44LTIuNyAxLjQtNC42LS41LTIuMS0yLjEtMy41LTQuOS0zLjVINi40bDMuMyAzLjNhMSAxIDAgMSAxLTEuNCAxLjRsLTUtNWExIDEgMCAwIDEgMC0xLjRsNS01YTEgMSAwIDAgMSAxLjQgMS40TDYuNCA4WlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAndW5saW5rJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk02LjIgMTIuM2ExIDEgMCAwIDEgMS40IDEuNGwtMiAyYTIgMiAwIDEgMCAyLjYgMi44bDQuOC00LjhhMSAxIDAgMCAwIDAtMS40IDEgMSAwIDEgMSAxLjQtMS4zIDIuOSAyLjkgMCAwIDEgMCA0TDkuNiAyMGEzLjkgMy45IDAgMCAxLTUuNS01LjVsMi0yWm0xMS42LS42YTEgMSAwIDAgMS0xLjQtMS40bDIuMS0yYTIgMiAwIDEgMC0yLjctMi44TDExIDEwLjNhMSAxIDAgMCAwIDAgMS40QTEgMSAwIDEgMSA5LjYgMTNhMi45IDIuOSAwIDAgMSAwLTRMMTQuNCA0YTMuOSAzLjkgMCAwIDEgNS41IDUuNWwtMiAyWk03LjYgNi4zYS44LjggMCAwIDEtMSAxLjFMMy4zIDQuMmEuNy43IDAgMSAxIDEtMWwzLjIgMy4xWk01LjEgOC42YS44LjggMCAwIDEgMCAxLjVIM2EuOC44IDAgMCAxIDAtMS41SDVabTUtMy41YS44LjggMCAwIDEtMS41IDBWM2EuOC44IDAgMCAxIDEuNSAwVjVabTYgMTEuOGEuOC44IDAgMCAxIDEtMWwzLjIgMy4yYS44LjggMCAwIDEtMSAxTDE2IDE3Wm0tMi4yIDJhLjguOCAwIDAgMSAxLjUgMFYyMWEuOC44IDAgMCAxLTEuNSAwVjE5Wm01LTMuNWEuNy43IDAgMSAxIDAtMS41SDIxYS44LjggMCAwIDEgMCAxLjVIMTlaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICd1bmxvY2snOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE2IDVjLjggMCAxLjUuMyAyLjEuOS42LjYuOSAxLjMuOSAyLjF2M2gtMlY4YTEgMSAwIDAgMC0uMy0uN0ExIDEgMCAwIDAgMTYgN2gtMmExIDEgMCAwIDAtLjcuMyAxIDEgMCAwIDAtLjMuN3YzaC4zYy4yIDAgLjMgMCAuNS4ybC4yLjZ2Ny40YzAgLjMgMCAuNC0uMi42bC0uNi4ySDQuOGMtLjMgMC0uNCAwLS42LS4yYS43LjcgMCAwIDEtLjItLjZ2LTcuNGMwLS4zIDAtLjQuMi0uNmwuNS0uMkgxMVY4YzAtLjguMy0xLjUuOS0yLjEuNi0uNiAxLjMtLjkgMi4xLS45aDJaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICd1bm9yZGVyZWQtbGlzdCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTEgNWg4Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxaC04YTEgMSAwIDAgMSAwLTJabTAgNmg4Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxaC04YTEgMSAwIDAgMSAwLTJabTAgNmg4Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxaC04YTEgMSAwIDAgMSAwLTJaTTQuNSA2YzAtLjQuMS0uOC40LTEgLjMtLjQuNy0uNSAxLjEtLjUuNCAwIC44LjEgMSAuNC40LjMuNS43LjUgMS4xIDAgLjQtLjEuOC0uNCAxLS4zLjQtLjcuNS0xLjEuNS0uNCAwLS44LS4xLTEtLjQtLjQtLjMtLjUtLjctLjUtMS4xWm0wIDZjMC0uNC4xLS44LjQtMSAuMy0uNC43LS41IDEuMS0uNS40IDAgLjguMSAxIC40LjQuMy41LjcuNSAxLjEgMCAuNC0uMS44LS40IDEtLjMuNC0uNy41LTEuMS41LS40IDAtLjgtLjEtMS0uNC0uNC0uMy0uNS0uNy0uNS0xLjFabTAgNmMwLS40LjEtLjguNC0xIC4zLS40LjctLjUgMS4xLS41LjQgMCAuOC4xIDEgLjQuNC4zLjUuNy41IDEuMSAwIC40LS4xLjgtLjQgMS0uMy40LS43LjUtMS4xLjUtLjQgMC0uOC0uMS0xLS40LS40LS4zLS41LS43LS41LTEuMVpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ3Vuc2VsZWN0ZWQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIk02IDRoMTJhMiAyIDAgMCAxIDIgMnYxMmEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YzAtMS4xLjktMiAyLTJabTAgMWExIDEgMCAwIDAtMSAxdjEyYzAgLjYuNCAxIDEgMWgxMmMuNiAwIDEtLjQgMS0xVjZjMC0uNi0uNC0xLTEtMUg2WlwiLz48L3N2Zz4nLFxuICAgICd1cGxvYWQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE4IDE5di0yYTEgMSAwIDAgMSAyIDB2M2MwIC42LS40IDEtMSAxSDVhMSAxIDAgMCAxLTEtMXYtM2ExIDEgMCAwIDEgMiAwdjJoMTJaTTExIDYuNCA4LjcgOC43YTEgMSAwIDAgMS0xLjQtMS40bDQtNGExIDEgMCAwIDEgMS40IDBsNCA0YTEgMSAwIDEgMS0xLjQgMS40TDEzIDYuNFYxNmExIDEgMCAwIDEtMiAwVjYuNFpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ3VzZXInOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTEyIDI0YTEyIDEyIDAgMSAxIDAtMjQgMTIgMTIgMCAwIDEgMCAyNFptLTguNy01LjNhMTEgMTEgMCAwIDAgMTcuNCAwQzE5LjQgMTYuMyAxNC42IDE1IDEyIDE1Yy0yLjYgMC03LjQgMS4zLTguNyAzLjdaTTEyIDEzYzIuMiAwIDQtMiA0LTQuNVMxNC4yIDQgMTIgNCA4IDYgOCA4LjUgOS44IDEzIDEyIDEzWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAndmVydGljYWwtYWxpZ24nOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48ZyBmaWxsLXJ1bGU9XCJub256ZXJvXCI+PHJlY3Qgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjJcIiB4PVwiM1wiIHk9XCIxMVwiIHJ4PVwiMVwiLz48cGF0aCBkPVwiTTEyIDJjLjYgMCAxIC40IDEgMXY0bDItMS4zYTEgMSAwIDAgMSAxLjIgMS41bC0uMS4xLTQuMSAzLTQtM2ExIDEgMCAwIDEgMS0xLjdsMiAxLjVWM2MwLS42LjQtMSAxLTF6bTAgMTEuOCA0IDIuOWExIDEgMCAwIDEtMSAxLjdsLTItMS41VjIxYzAgLjUtLjQgMS0uOSAxSDEyYTEgMSAwIDAgMS0xLTF2LTRsLTIgMS4zYTEgMSAwIDAgMS0xLjItLjFsLS4xLS4xYTEgMSAwIDAgMSAuMS0xLjNsLjEtLjEgNC4xLTN6XCIvPjwvZz48L3N2Zz4nLFxuICAgICd2aXN1YWxibG9ja3MnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTkgMTl2Mkg3di0yaDJabS00IDB2MmEyIDIgMCAwIDEtMi0yaDJabTggMHYyaC0ydi0yaDJabTggMGEyIDIgMCAwIDEtMiAydi0yaDJabS00IDB2MmgtMnYtMmgyWk0xNSA3YTEgMSAwIDAgMSAwIDJ2N2ExIDEgMCAwIDEtMiAwVjloLTF2N2ExIDEgMCAwIDEtMiAwdi00YTIuNSAyLjUgMCAwIDEtLjItNUgxNVpNNSAxNXYySDN2LTJoMlptMTYgMHYyaC0ydi0yaDJaTTUgMTF2Mkgzdi0yaDJabTE2IDB2MmgtMnYtMmgyWk01IDd2MkgzVjdoMlptMTYgMHYyaC0yVjdoMlpNNSAzdjJIM2MwLTEuMS45LTIgMi0yWm04IDB2MmgtMlYzaDJabTYgMGEyIDIgMCAwIDEgMiAyaC0yVjNaTTkgM3YySDdWM2gyWm04IDB2MmgtMlYzaDJaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICd2aXN1YWxjaGFycyc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTAgNWg3YTEgMSAwIDAgMSAwIDJoLTF2MTFhMSAxIDAgMCAxLTIgMFY3aC0ydjExYTEgMSAwIDAgMS0yIDB2LTZjLS41IDAtMSAwLTEuNC0uM0EzLjQgMy40IDAgMCAxIDYuOCAxMGEzLjMgMy4zIDAgMCAxIDAtMi44IDMuNCAzLjQgMCAwIDEgMS44LTEuOEwxMCA1WlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnd2FybmluZyc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTkuOCAxOC4zYy4yLjUuMy45IDAgMS4yLS4xLjMtLjUuNS0xIC41SDUuMmMtLjUgMC0uOS0uMi0xLS41LS4zLS4zLS4yLS43IDAtMS4yTDExIDQuN2wuNS0uNS41LS4yYy4yIDAgLjMgMCAuNS4yLjIgMCAuMy4zLjUuNWw2LjggMTMuNlpNMTIgMThjLjMgMCAuNS0uMS43LS4zLjItLjIuMy0uNC4zLS43YTEgMSAwIDAgMC0uMy0uNyAxIDEgMCAwIDAtLjctLjMgMSAxIDAgMCAwLS43LjMgMSAxIDAgMCAwLS4zLjdjMCAuMy4xLjUuMy43LjIuMi40LjMuNy4zWm0uNy0zIC4zLTRhMSAxIDAgMCAwLS4zLS43IDEgMSAwIDAgMC0uNy0uMyAxIDEgMCAwIDAtLjcuMyAxIDEgMCAwIDAtLjMuN2wuMyA0aDEuNFpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ3pvb20taW4nOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE2IDE3LjNhOCA4IDAgMSAxIDEuNC0xLjRsNC4zIDQuNGExIDEgMCAwIDEtMS40IDEuNGwtNC40LTQuM1ptLTUtLjNhNiA2IDAgMSAwIDAtMTIgNiA2IDAgMCAwIDAgMTJabS0xLTlhMSAxIDAgMCAxIDIgMHY2YTEgMSAwIDAgMS0yIDBWOFptLTIgNGExIDEgMCAwIDEgMC0yaDZhMSAxIDAgMCAxIDAgMkg4WlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnem9vbS1vdXQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE2IDE3LjNhOCA4IDAgMSAxIDEuNC0xLjRsNC4zIDQuNGExIDEgMCAwIDEtMS40IDEuNGwtNC40LTQuM1ptLTUtLjNhNiA2IDAgMSAwIDAtMTIgNiA2IDAgMCAwIDAgMTJabS0zLTVhMSAxIDAgMCAxIDAtMmg2YTEgMSAwIDAgMSAwIDJIOFpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gIH1cbn0pOyIsIi8vIEV4cG9ydHMgdGhlIFwiZGVmYXVsdFwiIGljb25zIGZvciB1c2FnZSB3aXRoIG1vZHVsZSBsb2FkZXJzXG4vLyBVc2FnZTpcbi8vICAgQ29tbW9uSlM6XG4vLyAgICAgcmVxdWlyZSgndGlueW1jZS9pY29ucy9kZWZhdWx0Jylcbi8vICAgRVMyMDE1OlxuLy8gICAgIGltcG9ydCAndGlueW1jZS9pY29ucy9kZWZhdWx0J1xucmVxdWlyZSgnLi9pY29ucy5qcycpOyIsIi8vIEV4cG9ydHMgdGhlIFwiZG9tXCIgbW9kZWwgZm9yIHVzYWdlIHdpdGggbW9kdWxlIGxvYWRlcnNcbi8vIFVzYWdlOlxuLy8gICBDb21tb25KUzpcbi8vICAgICByZXF1aXJlKCd0aW55bWNlL21vZGVscy9kb20nKVxuLy8gICBFUzIwMTU6XG4vLyAgICAgaW1wb3J0ICd0aW55bWNlL21vZGVscy9kb20nXG5yZXF1aXJlKCcuL21vZGVsLmpzJyk7IiwiLyoqXG4gKiBUaW55TUNFIHZlcnNpb24gNi43LjAgKDIwMjMtMDgtMzApXG4gKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgZ2xvYmFsJDEgPSB0aW55bWNlLnV0aWwuVG9vbHMucmVzb2x2ZSgndGlueW1jZS5Nb2RlbE1hbmFnZXInKTtcblxuICAgIGNvbnN0IGhhc1Byb3RvID0gKHYsIGNvbnN0cnVjdG9yLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGlmIChwcmVkaWNhdGUodiwgY29uc3RydWN0b3IucHJvdG90eXBlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoKF9hID0gdi5jb25zdHJ1Y3RvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5hbWUpID09PSBjb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdHlwZU9mID0geCA9PiB7XG4gICAgICBjb25zdCB0ID0gdHlwZW9mIHg7XG4gICAgICBpZiAoeCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgICAgfSBlbHNlIGlmICh0ID09PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgICAgIHJldHVybiAnYXJyYXknO1xuICAgICAgfSBlbHNlIGlmICh0ID09PSAnb2JqZWN0JyAmJiBoYXNQcm90byh4LCBTdHJpbmcsIChvLCBwcm90bykgPT4gcHJvdG8uaXNQcm90b3R5cGVPZihvKSkpIHtcbiAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc1R5cGUkMSA9IHR5cGUgPT4gdmFsdWUgPT4gdHlwZU9mKHZhbHVlKSA9PT0gdHlwZTtcbiAgICBjb25zdCBpc1NpbXBsZVR5cGUgPSB0eXBlID0+IHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gdHlwZTtcbiAgICBjb25zdCBlcSQyID0gdCA9PiBhID0+IHQgPT09IGE7XG4gICAgY29uc3QgaXNTdHJpbmcgPSBpc1R5cGUkMSgnc3RyaW5nJyk7XG4gICAgY29uc3QgaXNPYmplY3QgPSBpc1R5cGUkMSgnb2JqZWN0Jyk7XG4gICAgY29uc3QgaXNBcnJheSA9IGlzVHlwZSQxKCdhcnJheScpO1xuICAgIGNvbnN0IGlzTnVsbCA9IGVxJDIobnVsbCk7XG4gICAgY29uc3QgaXNCb29sZWFuID0gaXNTaW1wbGVUeXBlKCdib29sZWFuJyk7XG4gICAgY29uc3QgaXNVbmRlZmluZWQgPSBlcSQyKHVuZGVmaW5lZCk7XG4gICAgY29uc3QgaXNOdWxsYWJsZSA9IGEgPT4gYSA9PT0gbnVsbCB8fCBhID09PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgaXNOb25OdWxsYWJsZSA9IGEgPT4gIWlzTnVsbGFibGUoYSk7XG4gICAgY29uc3QgaXNGdW5jdGlvbiA9IGlzU2ltcGxlVHlwZSgnZnVuY3Rpb24nKTtcbiAgICBjb25zdCBpc051bWJlciA9IGlzU2ltcGxlVHlwZSgnbnVtYmVyJyk7XG5cbiAgICBjb25zdCBub29wID0gKCkgPT4ge1xuICAgIH07XG4gICAgY29uc3QgY29tcG9zZSA9IChmYSwgZmIpID0+IHtcbiAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICByZXR1cm4gZmEoZmIuYXBwbHkobnVsbCwgYXJncykpO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbXBvc2UxID0gKGZiYywgZmFiKSA9PiBhID0+IGZiYyhmYWIoYSkpO1xuICAgIGNvbnN0IGNvbnN0YW50ID0gdmFsdWUgPT4ge1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGlkZW50aXR5ID0geCA9PiB7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICAgIGNvbnN0IHRyaXBsZUVxdWFscyA9IChhLCBiKSA9PiB7XG4gICAgICByZXR1cm4gYSA9PT0gYjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGN1cnJ5KGZuLCAuLi5pbml0aWFsQXJncykge1xuICAgICAgcmV0dXJuICguLi5yZXN0QXJncykgPT4ge1xuICAgICAgICBjb25zdCBhbGwgPSBpbml0aWFsQXJncy5jb25jYXQocmVzdEFyZ3MpO1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgYWxsKTtcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IG5vdCA9IGYgPT4gdCA9PiAhZih0KTtcbiAgICBjb25zdCBkaWUgPSBtc2cgPT4ge1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgYXBwbHkgPSBmID0+IHtcbiAgICAgIHJldHVybiBmKCk7XG4gICAgfTtcbiAgICBjb25zdCBuZXZlciA9IGNvbnN0YW50KGZhbHNlKTtcbiAgICBjb25zdCBhbHdheXMgPSBjb25zdGFudCh0cnVlKTtcblxuICAgIGNsYXNzIE9wdGlvbmFsIHtcbiAgICAgIGNvbnN0cnVjdG9yKHRhZywgdmFsdWUpIHtcbiAgICAgICAgdGhpcy50YWcgPSB0YWc7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHN0YXRpYyBzb21lKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBuZXcgT3B0aW9uYWwodHJ1ZSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgc3RhdGljIG5vbmUoKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zaW5nbGV0b25Ob25lO1xuICAgICAgfVxuICAgICAgZm9sZChvbk5vbmUsIG9uU29tZSkge1xuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICByZXR1cm4gb25Tb21lKHRoaXMudmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBvbk5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaXNTb21lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWc7XG4gICAgICB9XG4gICAgICBpc05vbmUoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy50YWc7XG4gICAgICB9XG4gICAgICBtYXAobWFwcGVyKSB7XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKG1hcHBlcih0aGlzLnZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYmluZChiaW5kZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgcmV0dXJuIGJpbmRlcih0aGlzLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBleGlzdHMocHJlZGljYXRlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyAmJiBwcmVkaWNhdGUodGhpcy52YWx1ZSk7XG4gICAgICB9XG4gICAgICBmb3JhbGwocHJlZGljYXRlKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy50YWcgfHwgcHJlZGljYXRlKHRoaXMudmFsdWUpO1xuICAgICAgfVxuICAgICAgZmlsdGVyKHByZWRpY2F0ZSkge1xuICAgICAgICBpZiAoIXRoaXMudGFnIHx8IHByZWRpY2F0ZSh0aGlzLnZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGdldE9yKHJlcGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMudmFsdWUgOiByZXBsYWNlbWVudDtcbiAgICAgIH1cbiAgICAgIG9yKHJlcGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMgOiByZXBsYWNlbWVudDtcbiAgICAgIH1cbiAgICAgIGdldE9yVGh1bmsodGh1bmspIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gdGhpcy52YWx1ZSA6IHRodW5rKCk7XG4gICAgICB9XG4gICAgICBvclRodW5rKHRodW5rKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMgOiB0aHVuaygpO1xuICAgICAgfVxuICAgICAgZ2V0T3JEaWUobWVzc2FnZSkge1xuICAgICAgICBpZiAoIXRoaXMudGFnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgIT09IG51bGwgJiYgbWVzc2FnZSAhPT0gdm9pZCAwID8gbWVzc2FnZSA6ICdDYWxsZWQgZ2V0T3JEaWUgb24gTm9uZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdGF0aWMgZnJvbSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gaXNOb25OdWxsYWJsZSh2YWx1ZSkgPyBPcHRpb25hbC5zb21lKHZhbHVlKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICAgIGdldE9yTnVsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gdGhpcy52YWx1ZSA6IG51bGw7XG4gICAgICB9XG4gICAgICBnZXRPclVuZGVmaW5lZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICB9XG4gICAgICBlYWNoKHdvcmtlcikge1xuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICB3b3JrZXIodGhpcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRvQXJyYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IFt0aGlzLnZhbHVlXSA6IFtdO1xuICAgICAgfVxuICAgICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IGBzb21lKCR7IHRoaXMudmFsdWUgfSlgIDogJ25vbmUoKSc7XG4gICAgICB9XG4gICAgfVxuICAgIE9wdGlvbmFsLnNpbmdsZXRvbk5vbmUgPSBuZXcgT3B0aW9uYWwoZmFsc2UpO1xuXG4gICAgY29uc3QgbmF0aXZlU2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG4gICAgY29uc3QgbmF0aXZlSW5kZXhPZiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mO1xuICAgIGNvbnN0IG5hdGl2ZVB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaDtcbiAgICBjb25zdCByYXdJbmRleE9mID0gKHRzLCB0KSA9PiBuYXRpdmVJbmRleE9mLmNhbGwodHMsIHQpO1xuICAgIGNvbnN0IGNvbnRhaW5zJDIgPSAoeHMsIHgpID0+IHJhd0luZGV4T2YoeHMsIHgpID4gLTE7XG4gICAgY29uc3QgZXhpc3RzID0gKHhzLCBwcmVkKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0geHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgeCA9IHhzW2ldO1xuICAgICAgICBpZiAocHJlZCh4LCBpKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBjb25zdCByYW5nZSQxID0gKG51bSwgZikgPT4ge1xuICAgICAgY29uc3QgciA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW07IGkrKykge1xuICAgICAgICByLnB1c2goZihpKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IG1hcCQxID0gKHhzLCBmKSA9PiB7XG4gICAgICBjb25zdCBsZW4gPSB4cy5sZW5ndGg7XG4gICAgICBjb25zdCByID0gbmV3IEFycmF5KGxlbik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgcltpXSA9IGYoeCwgaSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IGVhY2gkMiA9ICh4cywgZikgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgZih4LCBpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGVhY2hyID0gKHhzLCBmKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0geHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgeCA9IHhzW2ldO1xuICAgICAgICBmKHgsIGkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcGFydGl0aW9uID0gKHhzLCBwcmVkKSA9PiB7XG4gICAgICBjb25zdCBwYXNzID0gW107XG4gICAgICBjb25zdCBmYWlsID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0geHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgeCA9IHhzW2ldO1xuICAgICAgICBjb25zdCBhcnIgPSBwcmVkKHgsIGkpID8gcGFzcyA6IGZhaWw7XG4gICAgICAgIGFyci5wdXNoKHgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFzcyxcbiAgICAgICAgZmFpbFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbHRlciQyID0gKHhzLCBwcmVkKSA9PiB7XG4gICAgICBjb25zdCByID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0geHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgeCA9IHhzW2ldO1xuICAgICAgICBpZiAocHJlZCh4LCBpKSkge1xuICAgICAgICAgIHIucHVzaCh4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBmb2xkciA9ICh4cywgZiwgYWNjKSA9PiB7XG4gICAgICBlYWNocih4cywgKHgsIGkpID0+IHtcbiAgICAgICAgYWNjID0gZihhY2MsIHgsIGkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH07XG4gICAgY29uc3QgZm9sZGwgPSAoeHMsIGYsIGFjYykgPT4ge1xuICAgICAgZWFjaCQyKHhzLCAoeCwgaSkgPT4ge1xuICAgICAgICBhY2MgPSBmKGFjYywgeCwgaSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kVW50aWwgPSAoeHMsIHByZWQsIHVudGlsKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0geHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgeCA9IHhzW2ldO1xuICAgICAgICBpZiAocHJlZCh4LCBpKSkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHgpO1xuICAgICAgICB9IGVsc2UgaWYgKHVudGlsKHgsIGkpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kJDEgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIHJldHVybiBmaW5kVW50aWwoeHMsIHByZWQsIG5ldmVyKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRJbmRleCA9ICh4cywgcHJlZCkgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgaWYgKHByZWQoeCwgaSkpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGZsYXR0ZW4gPSB4cyA9PiB7XG4gICAgICBjb25zdCByID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0geHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgaWYgKCFpc0FycmF5KHhzW2ldKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXJyLmZsYXR0ZW4gaXRlbSAnICsgaSArICcgd2FzIG5vdCBhbiBhcnJheSwgaW5wdXQ6ICcgKyB4cyk7XG4gICAgICAgIH1cbiAgICAgICAgbmF0aXZlUHVzaC5hcHBseShyLCB4c1tpXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IGJpbmQkMiA9ICh4cywgZikgPT4gZmxhdHRlbihtYXAkMSh4cywgZikpO1xuICAgIGNvbnN0IGZvcmFsbCA9ICh4cywgcHJlZCkgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgaWYgKHByZWQoeCwgaSkgIT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgY29uc3QgcmV2ZXJzZSA9IHhzID0+IHtcbiAgICAgIGNvbnN0IHIgPSBuYXRpdmVTbGljZS5jYWxsKHhzLCAwKTtcbiAgICAgIHIucmV2ZXJzZSgpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBtYXBUb09iamVjdCA9ICh4cywgZikgPT4ge1xuICAgICAgY29uc3QgciA9IHt9O1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgcltTdHJpbmcoeCldID0gZih4LCBpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3Qgc29ydCQxID0gKHhzLCBjb21wYXJhdG9yKSA9PiB7XG4gICAgICBjb25zdCBjb3B5ID0gbmF0aXZlU2xpY2UuY2FsbCh4cywgMCk7XG4gICAgICBjb3B5LnNvcnQoY29tcGFyYXRvcik7XG4gICAgICByZXR1cm4gY29weTtcbiAgICB9O1xuICAgIGNvbnN0IGdldCRkID0gKHhzLCBpKSA9PiBpID49IDAgJiYgaSA8IHhzLmxlbmd0aCA/IE9wdGlvbmFsLnNvbWUoeHNbaV0pIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIGNvbnN0IGhlYWQgPSB4cyA9PiBnZXQkZCh4cywgMCk7XG4gICAgY29uc3QgbGFzdCQyID0geHMgPT4gZ2V0JGQoeHMsIHhzLmxlbmd0aCAtIDEpO1xuICAgIGNvbnN0IGZpbmRNYXAgPSAoYXJyLCBmKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByID0gZihhcnJbaV0sIGkpO1xuICAgICAgICBpZiAoci5pc1NvbWUoKSkge1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG5cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgY29uc3QgaGFzT3duUHJvcGVydHkgPSBPYmplY3QuaGFzT3duUHJvcGVydHk7XG4gICAgY29uc3QgZWFjaCQxID0gKG9iaiwgZikgPT4ge1xuICAgICAgY29uc3QgcHJvcHMgPSBrZXlzKG9iaik7XG4gICAgICBmb3IgKGxldCBrID0gMCwgbGVuID0gcHJvcHMubGVuZ3RoOyBrIDwgbGVuOyBrKyspIHtcbiAgICAgICAgY29uc3QgaSA9IHByb3BzW2tdO1xuICAgICAgICBjb25zdCB4ID0gb2JqW2ldO1xuICAgICAgICBmKHgsIGkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbWFwID0gKG9iaiwgZikgPT4ge1xuICAgICAgcmV0dXJuIHR1cGxlTWFwKG9iaiwgKHgsIGkpID0+ICh7XG4gICAgICAgIGs6IGksXG4gICAgICAgIHY6IGYoeCwgaSlcbiAgICAgIH0pKTtcbiAgICB9O1xuICAgIGNvbnN0IHR1cGxlTWFwID0gKG9iaiwgZikgPT4ge1xuICAgICAgY29uc3QgciA9IHt9O1xuICAgICAgZWFjaCQxKG9iaiwgKHgsIGkpID0+IHtcbiAgICAgICAgY29uc3QgdHVwbGUgPSBmKHgsIGkpO1xuICAgICAgICByW3R1cGxlLmtdID0gdHVwbGUudjtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBvYmpBY2MgPSByID0+ICh4LCBpKSA9PiB7XG4gICAgICByW2ldID0geDtcbiAgICB9O1xuICAgIGNvbnN0IGludGVybmFsRmlsdGVyID0gKG9iaiwgcHJlZCwgb25UcnVlLCBvbkZhbHNlKSA9PiB7XG4gICAgICBlYWNoJDEob2JqLCAoeCwgaSkgPT4ge1xuICAgICAgICAocHJlZCh4LCBpKSA/IG9uVHJ1ZSA6IG9uRmFsc2UpKHgsIGkpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXIkMSA9IChvYmosIHByZWQpID0+IHtcbiAgICAgIGNvbnN0IHQgPSB7fTtcbiAgICAgIGludGVybmFsRmlsdGVyKG9iaiwgcHJlZCwgb2JqQWNjKHQpLCBub29wKTtcbiAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgY29uc3QgbWFwVG9BcnJheSA9IChvYmosIGYpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgIGVhY2gkMShvYmosICh2YWx1ZSwgbmFtZSkgPT4ge1xuICAgICAgICByLnB1c2goZih2YWx1ZSwgbmFtZSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IHZhbHVlcyA9IG9iaiA9PiB7XG4gICAgICByZXR1cm4gbWFwVG9BcnJheShvYmosIGlkZW50aXR5KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldCRjID0gKG9iaiwga2V5KSA9PiB7XG4gICAgICByZXR1cm4gaGFzJDEob2JqLCBrZXkpID8gT3B0aW9uYWwuZnJvbShvYmpba2V5XSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBoYXMkMSA9IChvYmosIGtleSkgPT4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG4gICAgY29uc3QgaGFzTm9uTnVsbGFibGVLZXkgPSAob2JqLCBrZXkpID0+IGhhcyQxKG9iaiwga2V5KSAmJiBvYmpba2V5XSAhPT0gdW5kZWZpbmVkICYmIG9ialtrZXldICE9PSBudWxsO1xuICAgIGNvbnN0IGlzRW1wdHkgPSByID0+IHtcbiAgICAgIGZvciAoY29uc3QgeCBpbiByKSB7XG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIHgpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgY29uc3QgR2xvYmFsID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBGdW5jdGlvbigncmV0dXJuIHRoaXM7JykoKTtcblxuICAgIGNvbnN0IHBhdGggPSAocGFydHMsIHNjb3BlKSA9PiB7XG4gICAgICBsZXQgbyA9IHNjb3BlICE9PSB1bmRlZmluZWQgJiYgc2NvcGUgIT09IG51bGwgPyBzY29wZSA6IEdsb2JhbDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoICYmIG8gIT09IHVuZGVmaW5lZCAmJiBvICE9PSBudWxsOyArK2kpIHtcbiAgICAgICAgbyA9IG9bcGFydHNbaV1dO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICBjb25zdCByZXNvbHZlJDIgPSAocCwgc2NvcGUpID0+IHtcbiAgICAgIGNvbnN0IHBhcnRzID0gcC5zcGxpdCgnLicpO1xuICAgICAgcmV0dXJuIHBhdGgocGFydHMsIHNjb3BlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgdW5zYWZlID0gKG5hbWUsIHNjb3BlKSA9PiB7XG4gICAgICByZXR1cm4gcmVzb2x2ZSQyKG5hbWUsIHNjb3BlKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldE9yRGllID0gKG5hbWUsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBhY3R1YWwgPSB1bnNhZmUobmFtZSwgc2NvcGUpO1xuICAgICAgaWYgKGFjdHVhbCA9PT0gdW5kZWZpbmVkIHx8IGFjdHVhbCA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobmFtZSArICcgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGJyb3dzZXInKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY3R1YWw7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuICAgIGNvbnN0IHNhbmRIVE1MRWxlbWVudCA9IHNjb3BlID0+IHtcbiAgICAgIHJldHVybiBnZXRPckRpZSgnSFRNTEVsZW1lbnQnLCBzY29wZSk7XG4gICAgfTtcbiAgICBjb25zdCBpc1Byb3RvdHlwZU9mID0geCA9PiB7XG4gICAgICBjb25zdCBzY29wZSA9IHJlc29sdmUkMignb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldycsIHgpO1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KHgpICYmIChzYW5kSFRNTEVsZW1lbnQoc2NvcGUpLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHgpIHx8IC9eSFRNTFxcdypFbGVtZW50JC8udGVzdChnZXRQcm90b3R5cGVPZih4KS5jb25zdHJ1Y3Rvci5uYW1lKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IENPTU1FTlQgPSA4O1xuICAgIGNvbnN0IERPQ1VNRU5UID0gOTtcbiAgICBjb25zdCBET0NVTUVOVF9GUkFHTUVOVCA9IDExO1xuICAgIGNvbnN0IEVMRU1FTlQgPSAxO1xuICAgIGNvbnN0IFRFWFQgPSAzO1xuXG4gICAgY29uc3QgbmFtZSA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgciA9IGVsZW1lbnQuZG9tLm5vZGVOYW1lO1xuICAgICAgcmV0dXJuIHIudG9Mb3dlckNhc2UoKTtcbiAgICB9O1xuICAgIGNvbnN0IHR5cGUgPSBlbGVtZW50ID0+IGVsZW1lbnQuZG9tLm5vZGVUeXBlO1xuICAgIGNvbnN0IGlzVHlwZSA9IHQgPT4gZWxlbWVudCA9PiB0eXBlKGVsZW1lbnQpID09PSB0O1xuICAgIGNvbnN0IGlzQ29tbWVudCA9IGVsZW1lbnQgPT4gdHlwZShlbGVtZW50KSA9PT0gQ09NTUVOVCB8fCBuYW1lKGVsZW1lbnQpID09PSAnI2NvbW1lbnQnO1xuICAgIGNvbnN0IGlzSFRNTEVsZW1lbnQgPSBlbGVtZW50ID0+IGlzRWxlbWVudChlbGVtZW50KSAmJiBpc1Byb3RvdHlwZU9mKGVsZW1lbnQuZG9tKTtcbiAgICBjb25zdCBpc0VsZW1lbnQgPSBpc1R5cGUoRUxFTUVOVCk7XG4gICAgY29uc3QgaXNUZXh0ID0gaXNUeXBlKFRFWFQpO1xuICAgIGNvbnN0IGlzRG9jdW1lbnQgPSBpc1R5cGUoRE9DVU1FTlQpO1xuICAgIGNvbnN0IGlzRG9jdW1lbnRGcmFnbWVudCA9IGlzVHlwZShET0NVTUVOVF9GUkFHTUVOVCk7XG4gICAgY29uc3QgaXNUYWcgPSB0YWcgPT4gZSA9PiBpc0VsZW1lbnQoZSkgJiYgbmFtZShlKSA9PT0gdGFnO1xuXG4gICAgY29uc3QgcmF3U2V0ID0gKGRvbSwga2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSB8fCBpc0Jvb2xlYW4odmFsdWUpIHx8IGlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICBkb20uc2V0QXR0cmlidXRlKGtleSwgdmFsdWUgKyAnJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIGNhbGwgdG8gQXR0cmlidXRlLnNldC4gS2V5ICcsIGtleSwgJzo6IFZhbHVlICcsIHZhbHVlLCAnOjogRWxlbWVudCAnLCBkb20pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dHJpYnV0ZSB2YWx1ZSB3YXMgbm90IHNpbXBsZScpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2V0JDIgPSAoZWxlbWVudCwga2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgcmF3U2V0KGVsZW1lbnQuZG9tLCBrZXksIHZhbHVlKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldEFsbCQxID0gKGVsZW1lbnQsIGF0dHJzKSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGVhY2gkMShhdHRycywgKHYsIGspID0+IHtcbiAgICAgICAgcmF3U2V0KGRvbSwgaywgdik7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHNldE9wdGlvbnMgPSAoZWxlbWVudCwgYXR0cnMpID0+IHtcbiAgICAgIGVhY2gkMShhdHRycywgKHYsIGspID0+IHtcbiAgICAgICAgdi5mb2xkKCgpID0+IHtcbiAgICAgICAgICByZW1vdmUkNyhlbGVtZW50LCBrKTtcbiAgICAgICAgfSwgdmFsdWUgPT4ge1xuICAgICAgICAgIHJhd1NldChlbGVtZW50LmRvbSwgaywgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0JGIgPSAoZWxlbWVudCwga2V5KSA9PiB7XG4gICAgICBjb25zdCB2ID0gZWxlbWVudC5kb20uZ2V0QXR0cmlidXRlKGtleSk7XG4gICAgICByZXR1cm4gdiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHY7XG4gICAgfTtcbiAgICBjb25zdCBnZXRPcHQgPSAoZWxlbWVudCwga2V5KSA9PiBPcHRpb25hbC5mcm9tKGdldCRiKGVsZW1lbnQsIGtleSkpO1xuICAgIGNvbnN0IHJlbW92ZSQ3ID0gKGVsZW1lbnQsIGtleSkgPT4ge1xuICAgICAgZWxlbWVudC5kb20ucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgfTtcbiAgICBjb25zdCBjbG9uZSQyID0gZWxlbWVudCA9PiBmb2xkbChlbGVtZW50LmRvbS5hdHRyaWJ1dGVzLCAoYWNjLCBhdHRyKSA9PiB7XG4gICAgICBhY2NbYXR0ci5uYW1lXSA9IGF0dHIudmFsdWU7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICAgIGNvbnN0IGZyb21IdG1sJDEgPSAoaHRtbCwgc2NvcGUpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IHNjb3BlIHx8IGRvY3VtZW50O1xuICAgICAgY29uc3QgZGl2ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZGl2LmlubmVySFRNTCA9IGh0bWw7XG4gICAgICBpZiAoIWRpdi5oYXNDaGlsZE5vZGVzKCkgfHwgZGl2LmNoaWxkTm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gJ0hUTUwgZG9lcyBub3QgaGF2ZSBhIHNpbmdsZSByb290IG5vZGUnO1xuICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UsIGh0bWwpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnJvbURvbSQxKGRpdi5jaGlsZE5vZGVzWzBdKTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21UYWcgPSAodGFnLCBzY29wZSkgPT4ge1xuICAgICAgY29uc3QgZG9jID0gc2NvcGUgfHwgZG9jdW1lbnQ7XG4gICAgICBjb25zdCBub2RlID0gZG9jLmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgICAgIHJldHVybiBmcm9tRG9tJDEobm9kZSk7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tVGV4dCA9ICh0ZXh0LCBzY29wZSkgPT4ge1xuICAgICAgY29uc3QgZG9jID0gc2NvcGUgfHwgZG9jdW1lbnQ7XG4gICAgICBjb25zdCBub2RlID0gZG9jLmNyZWF0ZVRleHROb2RlKHRleHQpO1xuICAgICAgcmV0dXJuIGZyb21Eb20kMShub2RlKTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21Eb20kMSA9IG5vZGUgPT4ge1xuICAgICAgaWYgKG5vZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm9kZSBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGRvbTogbm9kZSB9O1xuICAgIH07XG4gICAgY29uc3QgZnJvbVBvaW50JDEgPSAoZG9jRWxtLCB4LCB5KSA9PiBPcHRpb25hbC5mcm9tKGRvY0VsbS5kb20uZWxlbWVudEZyb21Qb2ludCh4LCB5KSkubWFwKGZyb21Eb20kMSk7XG4gICAgY29uc3QgU3VnYXJFbGVtZW50ID0ge1xuICAgICAgZnJvbUh0bWw6IGZyb21IdG1sJDEsXG4gICAgICBmcm9tVGFnLFxuICAgICAgZnJvbVRleHQsXG4gICAgICBmcm9tRG9tOiBmcm9tRG9tJDEsXG4gICAgICBmcm9tUG9pbnQ6IGZyb21Qb2ludCQxXG4gICAgfTtcblxuICAgIGNvbnN0IGlzJDIgPSAoZWxlbWVudCwgc2VsZWN0b3IpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgaWYgKGRvbS5ub2RlVHlwZSAhPT0gRUxFTUVOVCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlbGVtID0gZG9tO1xuICAgICAgICBpZiAoZWxlbS5tYXRjaGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbS5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtLm1zTWF0Y2hlc1NlbGVjdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbS5tc01hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBlbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBlbGVtLm1vek1hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdCcm93c2VyIGxhY2tzIG5hdGl2ZSBzZWxlY3RvcnMnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYnlwYXNzU2VsZWN0b3IgPSBkb20gPT4gZG9tLm5vZGVUeXBlICE9PSBFTEVNRU5UICYmIGRvbS5ub2RlVHlwZSAhPT0gRE9DVU1FTlQgJiYgZG9tLm5vZGVUeXBlICE9PSBET0NVTUVOVF9GUkFHTUVOVCB8fCBkb20uY2hpbGRFbGVtZW50Q291bnQgPT09IDA7XG4gICAgY29uc3QgYWxsJDEgPSAoc2VsZWN0b3IsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBiYXNlID0gc2NvcGUgPT09IHVuZGVmaW5lZCA/IGRvY3VtZW50IDogc2NvcGUuZG9tO1xuICAgICAgcmV0dXJuIGJ5cGFzc1NlbGVjdG9yKGJhc2UpID8gW10gOiBtYXAkMShiYXNlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpLCBTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgfTtcbiAgICBjb25zdCBvbmUgPSAoc2VsZWN0b3IsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBiYXNlID0gc2NvcGUgPT09IHVuZGVmaW5lZCA/IGRvY3VtZW50IDogc2NvcGUuZG9tO1xuICAgICAgcmV0dXJuIGJ5cGFzc1NlbGVjdG9yKGJhc2UpID8gT3B0aW9uYWwubm9uZSgpIDogT3B0aW9uYWwuZnJvbShiYXNlLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpKS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIH07XG5cbiAgICBjb25zdCBlcSQxID0gKGUxLCBlMikgPT4gZTEuZG9tID09PSBlMi5kb207XG4gICAgY29uc3QgY29udGFpbnMkMSA9IChlMSwgZTIpID0+IHtcbiAgICAgIGNvbnN0IGQxID0gZTEuZG9tO1xuICAgICAgY29uc3QgZDIgPSBlMi5kb207XG4gICAgICByZXR1cm4gZDEgPT09IGQyID8gZmFsc2UgOiBkMS5jb250YWlucyhkMik7XG4gICAgfTtcbiAgICBjb25zdCBpcyQxID0gaXMkMjtcblxuICAgIGNvbnN0IG93bmVyID0gZWxlbWVudCA9PiBTdWdhckVsZW1lbnQuZnJvbURvbShlbGVtZW50LmRvbS5vd25lckRvY3VtZW50KTtcbiAgICBjb25zdCBkb2N1bWVudE9yT3duZXIgPSBkb3MgPT4gaXNEb2N1bWVudChkb3MpID8gZG9zIDogb3duZXIoZG9zKTtcbiAgICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBlbGVtZW50ID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGRvY3VtZW50T3JPd25lcihlbGVtZW50KS5kb20uZG9jdW1lbnRFbGVtZW50KTtcbiAgICBjb25zdCBkZWZhdWx0VmlldyA9IGVsZW1lbnQgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20oZG9jdW1lbnRPck93bmVyKGVsZW1lbnQpLmRvbS5kZWZhdWx0Vmlldyk7XG4gICAgY29uc3QgcGFyZW50ID0gZWxlbWVudCA9PiBPcHRpb25hbC5mcm9tKGVsZW1lbnQuZG9tLnBhcmVudE5vZGUpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgY29uc3QgcGFyZW50RWxlbWVudCA9IGVsZW1lbnQgPT4gT3B0aW9uYWwuZnJvbShlbGVtZW50LmRvbS5wYXJlbnRFbGVtZW50KS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIGNvbnN0IHBhcmVudHMgPSAoZWxlbWVudCwgaXNSb290KSA9PiB7XG4gICAgICBjb25zdCBzdG9wID0gaXNGdW5jdGlvbihpc1Jvb3QpID8gaXNSb290IDogbmV2ZXI7XG4gICAgICBsZXQgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBjb25zdCByZXQgPSBbXTtcbiAgICAgIHdoaWxlIChkb20ucGFyZW50Tm9kZSAhPT0gbnVsbCAmJiBkb20ucGFyZW50Tm9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHJhd1BhcmVudCA9IGRvbS5wYXJlbnROb2RlO1xuICAgICAgICBjb25zdCBwID0gU3VnYXJFbGVtZW50LmZyb21Eb20ocmF3UGFyZW50KTtcbiAgICAgICAgcmV0LnB1c2gocCk7XG4gICAgICAgIGlmIChzdG9wKHApID09PSB0cnVlKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9tID0gcmF3UGFyZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH07XG4gICAgY29uc3QgcHJldlNpYmxpbmcgPSBlbGVtZW50ID0+IE9wdGlvbmFsLmZyb20oZWxlbWVudC5kb20ucHJldmlvdXNTaWJsaW5nKS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIGNvbnN0IG5leHRTaWJsaW5nID0gZWxlbWVudCA9PiBPcHRpb25hbC5mcm9tKGVsZW1lbnQuZG9tLm5leHRTaWJsaW5nKS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIGNvbnN0IGNoaWxkcmVuJDIgPSBlbGVtZW50ID0+IG1hcCQxKGVsZW1lbnQuZG9tLmNoaWxkTm9kZXMsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBjaGlsZCQyID0gKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBjcyA9IGVsZW1lbnQuZG9tLmNoaWxkTm9kZXM7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShjc1tpbmRleF0pLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJzdENoaWxkID0gZWxlbWVudCA9PiBjaGlsZCQyKGVsZW1lbnQsIDApO1xuXG4gICAgY29uc3QgYmVmb3JlJDMgPSAobWFya2VyLCBlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQkMSA9IHBhcmVudChtYXJrZXIpO1xuICAgICAgcGFyZW50JDEuZWFjaCh2ID0+IHtcbiAgICAgICAgdi5kb20uaW5zZXJ0QmVmb3JlKGVsZW1lbnQuZG9tLCBtYXJrZXIuZG9tKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYWZ0ZXIkNSA9IChtYXJrZXIsIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHNpYmxpbmcgPSBuZXh0U2libGluZyhtYXJrZXIpO1xuICAgICAgc2libGluZy5mb2xkKCgpID0+IHtcbiAgICAgICAgY29uc3QgcGFyZW50JDEgPSBwYXJlbnQobWFya2VyKTtcbiAgICAgICAgcGFyZW50JDEuZWFjaCh2ID0+IHtcbiAgICAgICAgICBhcHBlbmQkMSh2LCBlbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9LCB2ID0+IHtcbiAgICAgICAgYmVmb3JlJDModiwgZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHByZXBlbmQgPSAocGFyZW50LCBlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBmaXJzdENoaWxkJDEgPSBmaXJzdENoaWxkKHBhcmVudCk7XG4gICAgICBmaXJzdENoaWxkJDEuZm9sZCgoKSA9PiB7XG4gICAgICAgIGFwcGVuZCQxKHBhcmVudCwgZWxlbWVudCk7XG4gICAgICB9LCB2ID0+IHtcbiAgICAgICAgcGFyZW50LmRvbS5pbnNlcnRCZWZvcmUoZWxlbWVudC5kb20sIHYuZG9tKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYXBwZW5kJDEgPSAocGFyZW50LCBlbGVtZW50KSA9PiB7XG4gICAgICBwYXJlbnQuZG9tLmFwcGVuZENoaWxkKGVsZW1lbnQuZG9tKTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGVuZEF0ID0gKHBhcmVudCwgZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGNoaWxkJDIocGFyZW50LCBpbmRleCkuZm9sZCgoKSA9PiB7XG4gICAgICAgIGFwcGVuZCQxKHBhcmVudCwgZWxlbWVudCk7XG4gICAgICB9LCB2ID0+IHtcbiAgICAgICAgYmVmb3JlJDModiwgZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHdyYXAgPSAoZWxlbWVudCwgd3JhcHBlcikgPT4ge1xuICAgICAgYmVmb3JlJDMoZWxlbWVudCwgd3JhcHBlcik7XG4gICAgICBhcHBlbmQkMSh3cmFwcGVyLCBlbGVtZW50KTtcbiAgICB9O1xuXG4gICAgY29uc3QgYWZ0ZXIkNCA9IChtYXJrZXIsIGVsZW1lbnRzKSA9PiB7XG4gICAgICBlYWNoJDIoZWxlbWVudHMsICh4LCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGUgPSBpID09PSAwID8gbWFya2VyIDogZWxlbWVudHNbaSAtIDFdO1xuICAgICAgICBhZnRlciQ1KGUsIHgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBhcHBlbmQgPSAocGFyZW50LCBlbGVtZW50cykgPT4ge1xuICAgICAgZWFjaCQyKGVsZW1lbnRzLCB4ID0+IHtcbiAgICAgICAgYXBwZW5kJDEocGFyZW50LCB4KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBlbXB0eSA9IGVsZW1lbnQgPT4ge1xuICAgICAgZWxlbWVudC5kb20udGV4dENvbnRlbnQgPSAnJztcbiAgICAgIGVhY2gkMihjaGlsZHJlbiQyKGVsZW1lbnQpLCByb2d1ZSA9PiB7XG4gICAgICAgIHJlbW92ZSQ2KHJvZ3VlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlJDYgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgaWYgKGRvbS5wYXJlbnROb2RlICE9PSBudWxsKSB7XG4gICAgICAgIGRvbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRvbSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB1bndyYXAgPSB3cmFwcGVyID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gY2hpbGRyZW4kMih3cmFwcGVyKTtcbiAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFmdGVyJDQod3JhcHBlciwgY2hpbGRyZW4pO1xuICAgICAgfVxuICAgICAgcmVtb3ZlJDYod3JhcHBlcik7XG4gICAgfTtcblxuICAgIGNvbnN0IGNsb25lJDEgPSAob3JpZ2luYWwsIGlzRGVlcCkgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20ob3JpZ2luYWwuZG9tLmNsb25lTm9kZShpc0RlZXApKTtcbiAgICBjb25zdCBzaGFsbG93ID0gb3JpZ2luYWwgPT4gY2xvbmUkMShvcmlnaW5hbCwgZmFsc2UpO1xuICAgIGNvbnN0IGRlZXAgPSBvcmlnaW5hbCA9PiBjbG9uZSQxKG9yaWdpbmFsLCB0cnVlKTtcbiAgICBjb25zdCBzaGFsbG93QXMgPSAob3JpZ2luYWwsIHRhZykgPT4ge1xuICAgICAgY29uc3QgbnUgPSBTdWdhckVsZW1lbnQuZnJvbVRhZyh0YWcpO1xuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGNsb25lJDIob3JpZ2luYWwpO1xuICAgICAgc2V0QWxsJDEobnUsIGF0dHJpYnV0ZXMpO1xuICAgICAgcmV0dXJuIG51O1xuICAgIH07XG4gICAgY29uc3QgY29weSQyID0gKG9yaWdpbmFsLCB0YWcpID0+IHtcbiAgICAgIGNvbnN0IG51ID0gc2hhbGxvd0FzKG9yaWdpbmFsLCB0YWcpO1xuICAgICAgY29uc3QgY2xvbmVDaGlsZHJlbiA9IGNoaWxkcmVuJDIoZGVlcChvcmlnaW5hbCkpO1xuICAgICAgYXBwZW5kKG51LCBjbG9uZUNoaWxkcmVuKTtcbiAgICAgIHJldHVybiBudTtcbiAgICB9O1xuICAgIGNvbnN0IG11dGF0ZSQxID0gKG9yaWdpbmFsLCB0YWcpID0+IHtcbiAgICAgIGNvbnN0IG51ID0gc2hhbGxvd0FzKG9yaWdpbmFsLCB0YWcpO1xuICAgICAgYWZ0ZXIkNShvcmlnaW5hbCwgbnUpO1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBjaGlsZHJlbiQyKG9yaWdpbmFsKTtcbiAgICAgIGFwcGVuZChudSwgY2hpbGRyZW4pO1xuICAgICAgcmVtb3ZlJDYob3JpZ2luYWwpO1xuICAgICAgcmV0dXJuIG51O1xuICAgIH07XG5cbiAgICBjb25zdCB2YWxpZFNlY3Rpb25MaXN0ID0gW1xuICAgICAgJ3Rmb290JyxcbiAgICAgICd0aGVhZCcsXG4gICAgICAndGJvZHknLFxuICAgICAgJ2NvbGdyb3VwJ1xuICAgIF07XG4gICAgY29uc3QgaXNWYWxpZFNlY3Rpb24gPSBwYXJlbnROYW1lID0+IGNvbnRhaW5zJDIodmFsaWRTZWN0aW9uTGlzdCwgcGFyZW50TmFtZSk7XG4gICAgY29uc3QgZ3JpZCA9IChyb3dzLCBjb2x1bW5zKSA9PiAoe1xuICAgICAgcm93cyxcbiAgICAgIGNvbHVtbnNcbiAgICB9KTtcbiAgICBjb25zdCBhZGRyZXNzID0gKHJvdywgY29sdW1uKSA9PiAoe1xuICAgICAgcm93LFxuICAgICAgY29sdW1uXG4gICAgfSk7XG4gICAgY29uc3QgZGV0YWlsID0gKGVsZW1lbnQsIHJvd3NwYW4sIGNvbHNwYW4pID0+ICh7XG4gICAgICBlbGVtZW50LFxuICAgICAgcm93c3BhbixcbiAgICAgIGNvbHNwYW5cbiAgICB9KTtcbiAgICBjb25zdCBkZXRhaWxuZXcgPSAoZWxlbWVudCwgcm93c3BhbiwgY29sc3BhbiwgaXNOZXcpID0+ICh7XG4gICAgICBlbGVtZW50LFxuICAgICAgcm93c3BhbixcbiAgICAgIGNvbHNwYW4sXG4gICAgICBpc05ld1xuICAgIH0pO1xuICAgIGNvbnN0IGV4dGVuZGVkID0gKGVsZW1lbnQsIHJvd3NwYW4sIGNvbHNwYW4sIHJvdywgY29sdW1uLCBpc0xvY2tlZCkgPT4gKHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICByb3dzcGFuLFxuICAgICAgY29sc3BhbixcbiAgICAgIHJvdyxcbiAgICAgIGNvbHVtbixcbiAgICAgIGlzTG9ja2VkXG4gICAgfSk7XG4gICAgY29uc3Qgcm93ZGV0YWlsID0gKGVsZW1lbnQsIGNlbGxzLCBzZWN0aW9uKSA9PiAoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIGNlbGxzLFxuICAgICAgc2VjdGlvblxuICAgIH0pO1xuICAgIGNvbnN0IHJvd2RldGFpbG5ldyA9IChlbGVtZW50LCBjZWxscywgc2VjdGlvbiwgaXNOZXcpID0+ICh7XG4gICAgICBlbGVtZW50LFxuICAgICAgY2VsbHMsXG4gICAgICBzZWN0aW9uLFxuICAgICAgaXNOZXdcbiAgICB9KTtcbiAgICBjb25zdCBlbGVtZW50bmV3ID0gKGVsZW1lbnQsIGlzTmV3LCBpc0xvY2tlZCkgPT4gKHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBpc05ldyxcbiAgICAgIGlzTG9ja2VkXG4gICAgfSk7XG4gICAgY29uc3Qgcm93Y2VsbHMgPSAoZWxlbWVudCwgY2VsbHMsIHNlY3Rpb24sIGlzTmV3KSA9PiAoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIGNlbGxzLFxuICAgICAgc2VjdGlvbixcbiAgICAgIGlzTmV3XG4gICAgfSk7XG4gICAgY29uc3QgYm91bmRzID0gKHN0YXJ0Um93LCBzdGFydENvbCwgZmluaXNoUm93LCBmaW5pc2hDb2wpID0+ICh7XG4gICAgICBzdGFydFJvdyxcbiAgICAgIHN0YXJ0Q29sLFxuICAgICAgZmluaXNoUm93LFxuICAgICAgZmluaXNoQ29sXG4gICAgfSk7XG4gICAgY29uc3QgY29sdW1uZXh0ID0gKGVsZW1lbnQsIGNvbHNwYW4sIGNvbHVtbikgPT4gKHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBjb2xzcGFuLFxuICAgICAgY29sdW1uXG4gICAgfSk7XG4gICAgY29uc3QgY29sZ3JvdXAgPSAoZWxlbWVudCwgY29sdW1ucykgPT4gKHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBjb2x1bW5zXG4gICAgfSk7XG5cbiAgICBjb25zdCBpc1NoYWRvd1Jvb3QgPSBkb3MgPT4gaXNEb2N1bWVudEZyYWdtZW50KGRvcykgJiYgaXNOb25OdWxsYWJsZShkb3MuZG9tLmhvc3QpO1xuICAgIGNvbnN0IHN1cHBvcnRlZCA9IGlzRnVuY3Rpb24oRWxlbWVudC5wcm90b3R5cGUuYXR0YWNoU2hhZG93KSAmJiBpc0Z1bmN0aW9uKE5vZGUucHJvdG90eXBlLmdldFJvb3ROb2RlKTtcbiAgICBjb25zdCBpc1N1cHBvcnRlZCQxID0gY29uc3RhbnQoc3VwcG9ydGVkKTtcbiAgICBjb25zdCBnZXRSb290Tm9kZSA9IHN1cHBvcnRlZCA/IGUgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20oZS5kb20uZ2V0Um9vdE5vZGUoKSkgOiBkb2N1bWVudE9yT3duZXI7XG4gICAgY29uc3QgZ2V0U2hhZG93Um9vdCA9IGUgPT4ge1xuICAgICAgY29uc3QgciA9IGdldFJvb3ROb2RlKGUpO1xuICAgICAgcmV0dXJuIGlzU2hhZG93Um9vdChyKSA/IE9wdGlvbmFsLnNvbWUocikgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRTaGFkb3dIb3N0ID0gZSA9PiBTdWdhckVsZW1lbnQuZnJvbURvbShlLmRvbS5ob3N0KTtcbiAgICBjb25zdCBnZXRPcmlnaW5hbEV2ZW50VGFyZ2V0ID0gZXZlbnQgPT4ge1xuICAgICAgaWYgKGlzU3VwcG9ydGVkJDEoKSAmJiBpc05vbk51bGxhYmxlKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgY29uc3QgZWwgPSBTdWdhckVsZW1lbnQuZnJvbURvbShldmVudC50YXJnZXQpO1xuICAgICAgICBpZiAoaXNFbGVtZW50KGVsKSAmJiBpc09wZW5TaGFkb3dIb3N0KGVsKSkge1xuICAgICAgICAgIGlmIChldmVudC5jb21wb3NlZCAmJiBldmVudC5jb21wb3NlZFBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvc2VkUGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuICAgICAgICAgICAgaWYgKGNvbXBvc2VkUGF0aCkge1xuICAgICAgICAgICAgICByZXR1cm4gaGVhZChjb21wb3NlZFBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oZXZlbnQudGFyZ2V0KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzT3BlblNoYWRvd0hvc3QgPSBlbGVtZW50ID0+IGlzTm9uTnVsbGFibGUoZWxlbWVudC5kb20uc2hhZG93Um9vdCk7XG5cbiAgICBjb25zdCBpbkJvZHkgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGlzVGV4dChlbGVtZW50KSA/IGVsZW1lbnQuZG9tLnBhcmVudE5vZGUgOiBlbGVtZW50LmRvbTtcbiAgICAgIGlmIChkb20gPT09IHVuZGVmaW5lZCB8fCBkb20gPT09IG51bGwgfHwgZG9tLm93bmVyRG9jdW1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgZG9jID0gZG9tLm93bmVyRG9jdW1lbnQ7XG4gICAgICByZXR1cm4gZ2V0U2hhZG93Um9vdChTdWdhckVsZW1lbnQuZnJvbURvbShkb20pKS5mb2xkKCgpID0+IGRvYy5ib2R5LmNvbnRhaW5zKGRvbSksIGNvbXBvc2UxKGluQm9keSwgZ2V0U2hhZG93SG9zdCkpO1xuICAgIH07XG4gICAgY29uc3QgYm9keSQxID0gKCkgPT4gZ2V0Qm9keSQxKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGRvY3VtZW50KSk7XG4gICAgY29uc3QgZ2V0Qm9keSQxID0gZG9jID0+IHtcbiAgICAgIGNvbnN0IGIgPSBkb2MuZG9tLmJvZHk7XG4gICAgICBpZiAoYiA9PT0gbnVsbCB8fCBiID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdCb2R5IGlzIG5vdCBhdmFpbGFibGUgeWV0Jyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gU3VnYXJFbGVtZW50LmZyb21Eb20oYik7XG4gICAgfTtcblxuICAgIGNvbnN0IGFuY2VzdG9ycyQ0ID0gKHNjb3BlLCBwcmVkaWNhdGUsIGlzUm9vdCkgPT4gZmlsdGVyJDIocGFyZW50cyhzY29wZSwgaXNSb290KSwgcHJlZGljYXRlKTtcbiAgICBjb25zdCBjaGlsZHJlbiQxID0gKHNjb3BlLCBwcmVkaWNhdGUpID0+IGZpbHRlciQyKGNoaWxkcmVuJDIoc2NvcGUpLCBwcmVkaWNhdGUpO1xuICAgIGNvbnN0IGRlc2NlbmRhbnRzJDEgPSAoc2NvcGUsIHByZWRpY2F0ZSkgPT4ge1xuICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgZWFjaCQyKGNoaWxkcmVuJDIoc2NvcGUpLCB4ID0+IHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZSh4KSkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoW3hdKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGRlc2NlbmRhbnRzJDEoeCwgcHJlZGljYXRlKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIGNvbnN0IGFuY2VzdG9ycyQzID0gKHNjb3BlLCBzZWxlY3RvciwgaXNSb290KSA9PiBhbmNlc3RvcnMkNChzY29wZSwgZSA9PiBpcyQyKGUsIHNlbGVjdG9yKSwgaXNSb290KTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IChzY29wZSwgc2VsZWN0b3IpID0+IGNoaWxkcmVuJDEoc2NvcGUsIGUgPT4gaXMkMihlLCBzZWxlY3RvcikpO1xuICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gKHNjb3BlLCBzZWxlY3RvcikgPT4gYWxsJDEoc2VsZWN0b3IsIHNjb3BlKTtcblxuICAgIHZhciBDbG9zZXN0T3JBbmNlc3RvciA9IChpcywgYW5jZXN0b3IsIHNjb3BlLCBhLCBpc1Jvb3QpID0+IHtcbiAgICAgIGlmIChpcyhzY29wZSwgYSkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoc2NvcGUpO1xuICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKGlzUm9vdCkgJiYgaXNSb290KHNjb3BlKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9yKHNjb3BlLCBhLCBpc1Jvb3QpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBhbmNlc3RvciQyID0gKHNjb3BlLCBwcmVkaWNhdGUsIGlzUm9vdCkgPT4ge1xuICAgICAgbGV0IGVsZW1lbnQgPSBzY29wZS5kb207XG4gICAgICBjb25zdCBzdG9wID0gaXNGdW5jdGlvbihpc1Jvb3QpID8gaXNSb290IDogbmV2ZXI7XG4gICAgICB3aGlsZSAoZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gICAgICAgIGNvbnN0IGVsID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWxlbWVudCk7XG4gICAgICAgIGlmIChwcmVkaWNhdGUoZWwpKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoZWwpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0b3AoZWwpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBjbG9zZXN0JDIgPSAoc2NvcGUsIHByZWRpY2F0ZSwgaXNSb290KSA9PiB7XG4gICAgICBjb25zdCBpcyA9IChzLCB0ZXN0KSA9PiB0ZXN0KHMpO1xuICAgICAgcmV0dXJuIENsb3Nlc3RPckFuY2VzdG9yKGlzLCBhbmNlc3RvciQyLCBzY29wZSwgcHJlZGljYXRlLCBpc1Jvb3QpO1xuICAgIH07XG4gICAgY29uc3QgY2hpbGQkMSA9IChzY29wZSwgcHJlZGljYXRlKSA9PiB7XG4gICAgICBjb25zdCBwcmVkID0gbm9kZSA9PiBwcmVkaWNhdGUoU3VnYXJFbGVtZW50LmZyb21Eb20obm9kZSkpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmluZCQxKHNjb3BlLmRvbS5jaGlsZE5vZGVzLCBwcmVkKTtcbiAgICAgIHJldHVybiByZXN1bHQubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICB9O1xuICAgIGNvbnN0IGRlc2NlbmRhbnQkMSA9IChzY29wZSwgcHJlZGljYXRlKSA9PiB7XG4gICAgICBjb25zdCBkZXNjZW5kID0gbm9kZSA9PiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGQgPSBTdWdhckVsZW1lbnQuZnJvbURvbShub2RlLmNoaWxkTm9kZXNbaV0pO1xuICAgICAgICAgIGlmIChwcmVkaWNhdGUoY2hpbGQpKSB7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShjaGlsZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlcyA9IGRlc2NlbmQobm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgICAgICAgICBpZiAocmVzLmlzU29tZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBkZXNjZW5kKHNjb3BlLmRvbSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFuY2VzdG9yJDEgPSAoc2NvcGUsIHNlbGVjdG9yLCBpc1Jvb3QpID0+IGFuY2VzdG9yJDIoc2NvcGUsIGUgPT4gaXMkMihlLCBzZWxlY3RvciksIGlzUm9vdCk7XG4gICAgY29uc3QgY2hpbGQgPSAoc2NvcGUsIHNlbGVjdG9yKSA9PiBjaGlsZCQxKHNjb3BlLCBlID0+IGlzJDIoZSwgc2VsZWN0b3IpKTtcbiAgICBjb25zdCBkZXNjZW5kYW50ID0gKHNjb3BlLCBzZWxlY3RvcikgPT4gb25lKHNlbGVjdG9yLCBzY29wZSk7XG4gICAgY29uc3QgY2xvc2VzdCQxID0gKHNjb3BlLCBzZWxlY3RvciwgaXNSb290KSA9PiB7XG4gICAgICBjb25zdCBpcyA9IChlbGVtZW50LCBzZWxlY3RvcikgPT4gaXMkMihlbGVtZW50LCBzZWxlY3Rvcik7XG4gICAgICByZXR1cm4gQ2xvc2VzdE9yQW5jZXN0b3IoaXMsIGFuY2VzdG9yJDEsIHNjb3BlLCBzZWxlY3RvciwgaXNSb290KTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXMgPSAobGhzLCByaHMsIGNvbXBhcmF0b3IgPSB0cmlwbGVFcXVhbHMpID0+IGxocy5leGlzdHMobGVmdCA9PiBjb21wYXJhdG9yKGxlZnQsIHJocykpO1xuICAgIGNvbnN0IGNhdCA9IGFyciA9PiB7XG4gICAgICBjb25zdCByID0gW107XG4gICAgICBjb25zdCBwdXNoID0geCA9PiB7XG4gICAgICAgIHIucHVzaCh4KTtcbiAgICAgIH07XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICBhcnJbaV0uZWFjaChwdXNoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3QgYmluZEZyb20gPSAoYSwgZikgPT4gYSAhPT0gdW5kZWZpbmVkICYmIGEgIT09IG51bGwgPyBmKGEpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIGNvbnN0IHNvbWVJZiA9IChiLCBhKSA9PiBiID8gT3B0aW9uYWwuc29tZShhKSA6IE9wdGlvbmFsLm5vbmUoKTtcblxuICAgIGNvbnN0IGNoZWNrUmFuZ2UgPSAoc3RyLCBzdWJzdHIsIHN0YXJ0KSA9PiBzdWJzdHIgPT09ICcnIHx8IHN0ci5sZW5ndGggPj0gc3Vic3RyLmxlbmd0aCAmJiBzdHIuc3Vic3RyKHN0YXJ0LCBzdGFydCArIHN1YnN0ci5sZW5ndGgpID09PSBzdWJzdHI7XG4gICAgY29uc3QgY29udGFpbnMgPSAoc3RyLCBzdWJzdHIsIHN0YXJ0ID0gMCwgZW5kKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBzdHIuaW5kZXhPZihzdWJzdHIsIHN0YXJ0KTtcbiAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgIHJldHVybiBpc1VuZGVmaW5lZChlbmQpID8gdHJ1ZSA6IGlkeCArIHN1YnN0ci5sZW5ndGggPD0gZW5kO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc3RhcnRzV2l0aCA9IChzdHIsIHByZWZpeCkgPT4ge1xuICAgICAgcmV0dXJuIGNoZWNrUmFuZ2Uoc3RyLCBwcmVmaXgsIDApO1xuICAgIH07XG4gICAgY29uc3QgZW5kc1dpdGggPSAoc3RyLCBzdWZmaXgpID0+IHtcbiAgICAgIHJldHVybiBjaGVja1JhbmdlKHN0ciwgc3VmZml4LCBzdHIubGVuZ3RoIC0gc3VmZml4Lmxlbmd0aCk7XG4gICAgfTtcbiAgICBjb25zdCBibGFuayA9IHIgPT4gcyA9PiBzLnJlcGxhY2UociwgJycpO1xuICAgIGNvbnN0IHRyaW0gPSBibGFuaygvXlxccyt8XFxzKyQvZyk7XG4gICAgY29uc3QgaXNOb3RFbXB0eSA9IHMgPT4gcy5sZW5ndGggPiAwO1xuICAgIGNvbnN0IHRvRmxvYXQgPSB2YWx1ZSA9PiB7XG4gICAgICBjb25zdCBudW0gPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgIHJldHVybiBpc05hTihudW0pID8gT3B0aW9uYWwubm9uZSgpIDogT3B0aW9uYWwuc29tZShudW0pO1xuICAgIH07XG5cbiAgICBjb25zdCBpc1N1cHBvcnRlZCA9IGRvbSA9PiBkb20uc3R5bGUgIT09IHVuZGVmaW5lZCAmJiBpc0Z1bmN0aW9uKGRvbS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKTtcblxuICAgIGNvbnN0IGludGVybmFsU2V0ID0gKGRvbSwgcHJvcGVydHksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIGNhbGwgdG8gQ1NTLnNldC4gUHJvcGVydHkgJywgcHJvcGVydHksICc6OiBWYWx1ZSAnLCB2YWx1ZSwgJzo6IEVsZW1lbnQgJywgZG9tKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDU1MgdmFsdWUgbXVzdCBiZSBhIHN0cmluZzogJyArIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1N1cHBvcnRlZChkb20pKSB7XG4gICAgICAgIGRvbS5zdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaW50ZXJuYWxSZW1vdmUgPSAoZG9tLCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgaWYgKGlzU3VwcG9ydGVkKGRvbSkpIHtcbiAgICAgICAgZG9tLnN0eWxlLnJlbW92ZVByb3BlcnR5KHByb3BlcnR5KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldCQxID0gKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBpbnRlcm5hbFNldChkb20sIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRBbGwgPSAoZWxlbWVudCwgY3NzKSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGVhY2gkMShjc3MsICh2LCBrKSA9PiB7XG4gICAgICAgIGludGVybmFsU2V0KGRvbSwgaywgdik7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldCRhID0gKGVsZW1lbnQsIHByb3BlcnR5KSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGNvbnN0IHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvbSk7XG4gICAgICBjb25zdCByID0gc3R5bGVzLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpO1xuICAgICAgcmV0dXJuIHIgPT09ICcnICYmICFpbkJvZHkoZWxlbWVudCkgPyBnZXRVbnNhZmVQcm9wZXJ0eShkb20sIHByb3BlcnR5KSA6IHI7XG4gICAgfTtcbiAgICBjb25zdCBnZXRVbnNhZmVQcm9wZXJ0eSA9IChkb20sIHByb3BlcnR5KSA9PiBpc1N1cHBvcnRlZChkb20pID8gZG9tLnN0eWxlLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpIDogJyc7XG4gICAgY29uc3QgZ2V0UmF3JDIgPSAoZWxlbWVudCwgcHJvcGVydHkpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgY29uc3QgcmF3ID0gZ2V0VW5zYWZlUHJvcGVydHkoZG9tLCBwcm9wZXJ0eSk7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShyYXcpLmZpbHRlcihyID0+IHIubGVuZ3RoID4gMCk7XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmUkNSA9IChlbGVtZW50LCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBpbnRlcm5hbFJlbW92ZShkb20sIHByb3BlcnR5KTtcbiAgICAgIGlmIChpcyhnZXRPcHQoZWxlbWVudCwgJ3N0eWxlJykubWFwKHRyaW0pLCAnJykpIHtcbiAgICAgICAgcmVtb3ZlJDcoZWxlbWVudCwgJ3N0eWxlJyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjb3B5JDEgPSAoc291cmNlLCB0YXJnZXQpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZURvbSA9IHNvdXJjZS5kb207XG4gICAgICBjb25zdCB0YXJnZXREb20gPSB0YXJnZXQuZG9tO1xuICAgICAgaWYgKGlzU3VwcG9ydGVkKHNvdXJjZURvbSkgJiYgaXNTdXBwb3J0ZWQodGFyZ2V0RG9tKSkge1xuICAgICAgICB0YXJnZXREb20uc3R5bGUuY3NzVGV4dCA9IHNvdXJjZURvbS5zdHlsZS5jc3NUZXh0O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBnZXRBdHRyVmFsdWUgPSAoY2VsbCwgbmFtZSwgZmFsbGJhY2sgPSAwKSA9PiBnZXRPcHQoY2VsbCwgbmFtZSkubWFwKHZhbHVlID0+IHBhcnNlSW50KHZhbHVlLCAxMCkpLmdldE9yKGZhbGxiYWNrKTtcbiAgICBjb25zdCBnZXRTcGFuID0gKGNlbGwsIHR5cGUpID0+IGdldEF0dHJWYWx1ZShjZWxsLCB0eXBlLCAxKTtcbiAgICBjb25zdCBoYXNDb2xzcGFuID0gY2VsbE9yQ29sID0+IHtcbiAgICAgIGlmIChpc1RhZygnY29sJykoY2VsbE9yQ29sKSkge1xuICAgICAgICByZXR1cm4gZ2V0QXR0clZhbHVlKGNlbGxPckNvbCwgJ3NwYW4nLCAxKSA+IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZ2V0U3BhbihjZWxsT3JDb2wsICdjb2xzcGFuJykgPiAxO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaGFzUm93c3BhbiA9IGNlbGwgPT4gZ2V0U3BhbihjZWxsLCAncm93c3BhbicpID4gMTtcbiAgICBjb25zdCBnZXRDc3NWYWx1ZSA9IChlbGVtZW50LCBwcm9wZXJ0eSkgPT4gcGFyc2VJbnQoZ2V0JGEoZWxlbWVudCwgcHJvcGVydHkpLCAxMCk7XG4gICAgY29uc3QgbWluV2lkdGggPSBjb25zdGFudCgxMCk7XG4gICAgY29uc3QgbWluSGVpZ2h0ID0gY29uc3RhbnQoMTApO1xuXG4gICAgY29uc3QgZmlyc3RMYXllciA9IChzY29wZSwgc2VsZWN0b3IpID0+IHtcbiAgICAgIHJldHVybiBmaWx0ZXJGaXJzdExheWVyKHNjb3BlLCBzZWxlY3RvciwgYWx3YXlzKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbHRlckZpcnN0TGF5ZXIgPSAoc2NvcGUsIHNlbGVjdG9yLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIHJldHVybiBiaW5kJDIoY2hpbGRyZW4kMihzY29wZSksIHggPT4ge1xuICAgICAgICBpZiAoaXMkMih4LCBzZWxlY3RvcikpIHtcbiAgICAgICAgICByZXR1cm4gcHJlZGljYXRlKHgpID8gW3hdIDogW107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZpbHRlckZpcnN0TGF5ZXIoeCwgc2VsZWN0b3IsIHByZWRpY2F0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBsb29rdXAgPSAodGFncywgZWxlbWVudCwgaXNSb290ID0gbmV2ZXIpID0+IHtcbiAgICAgIGlmIChpc1Jvb3QoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChjb250YWlucyQyKHRhZ3MsIG5hbWUoZWxlbWVudCkpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGVsZW1lbnQpO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNSb290T3JVcHBlclRhYmxlID0gZWxtID0+IGlzJDIoZWxtLCAndGFibGUnKSB8fCBpc1Jvb3QoZWxtKTtcbiAgICAgIHJldHVybiBhbmNlc3RvciQxKGVsZW1lbnQsIHRhZ3Muam9pbignLCcpLCBpc1Jvb3RPclVwcGVyVGFibGUpO1xuICAgIH07XG4gICAgY29uc3QgY2VsbCA9IChlbGVtZW50LCBpc1Jvb3QpID0+IGxvb2t1cChbXG4gICAgICAndGQnLFxuICAgICAgJ3RoJ1xuICAgIF0sIGVsZW1lbnQsIGlzUm9vdCk7XG4gICAgY29uc3QgY2VsbHMkMSA9IGFuY2VzdG9yID0+IGZpcnN0TGF5ZXIoYW5jZXN0b3IsICd0aCx0ZCcpO1xuICAgIGNvbnN0IGNvbHVtbnMkMSA9IGFuY2VzdG9yID0+IHtcbiAgICAgIGlmIChpcyQyKGFuY2VzdG9yLCAnY29sZ3JvdXAnKSkge1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4oYW5jZXN0b3IsICdjb2wnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBiaW5kJDIoY29sdW1uR3JvdXBzKGFuY2VzdG9yKSwgY29sdW1uR3JvdXAgPT4gY2hpbGRyZW4oY29sdW1uR3JvdXAsICdjb2wnKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB0YWJsZSA9IChlbGVtZW50LCBpc1Jvb3QpID0+IGNsb3Nlc3QkMShlbGVtZW50LCAndGFibGUnLCBpc1Jvb3QpO1xuICAgIGNvbnN0IHJvd3MkMSA9IGFuY2VzdG9yID0+IGZpcnN0TGF5ZXIoYW5jZXN0b3IsICd0cicpO1xuICAgIGNvbnN0IGNvbHVtbkdyb3VwcyA9IGFuY2VzdG9yID0+IHRhYmxlKGFuY2VzdG9yKS5mb2xkKGNvbnN0YW50KFtdKSwgdGFibGUgPT4gY2hpbGRyZW4odGFibGUsICdjb2xncm91cCcpKTtcblxuICAgIGNvbnN0IGZyb21Sb3dzT3JDb2xHcm91cHMgPSAoZWxlbXMsIGdldFNlY3Rpb24pID0+IG1hcCQxKGVsZW1zLCByb3cgPT4ge1xuICAgICAgaWYgKG5hbWUocm93KSA9PT0gJ2NvbGdyb3VwJykge1xuICAgICAgICBjb25zdCBjZWxscyA9IG1hcCQxKGNvbHVtbnMkMShyb3cpLCBjb2x1bW4gPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbHNwYW4gPSBnZXRBdHRyVmFsdWUoY29sdW1uLCAnc3BhbicsIDEpO1xuICAgICAgICAgIHJldHVybiBkZXRhaWwoY29sdW1uLCAxLCBjb2xzcGFuKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByb3dkZXRhaWwocm93LCBjZWxscywgJ2NvbGdyb3VwJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjZWxscyA9IG1hcCQxKGNlbGxzJDEocm93KSwgY2VsbCA9PiB7XG4gICAgICAgICAgY29uc3Qgcm93c3BhbiA9IGdldEF0dHJWYWx1ZShjZWxsLCAncm93c3BhbicsIDEpO1xuICAgICAgICAgIGNvbnN0IGNvbHNwYW4gPSBnZXRBdHRyVmFsdWUoY2VsbCwgJ2NvbHNwYW4nLCAxKTtcbiAgICAgICAgICByZXR1cm4gZGV0YWlsKGNlbGwsIHJvd3NwYW4sIGNvbHNwYW4pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJvd2RldGFpbChyb3csIGNlbGxzLCBnZXRTZWN0aW9uKHJvdykpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGdldFBhcmVudFNlY3Rpb24gPSBncm91cCA9PiBwYXJlbnQoZ3JvdXApLm1hcChwYXJlbnQgPT4ge1xuICAgICAgY29uc3QgcGFyZW50TmFtZSA9IG5hbWUocGFyZW50KTtcbiAgICAgIHJldHVybiBpc1ZhbGlkU2VjdGlvbihwYXJlbnROYW1lKSA/IHBhcmVudE5hbWUgOiAndGJvZHknO1xuICAgIH0pLmdldE9yKCd0Ym9keScpO1xuICAgIGNvbnN0IGZyb21UYWJsZSQxID0gdGFibGUgPT4ge1xuICAgICAgY29uc3Qgcm93cyA9IHJvd3MkMSh0YWJsZSk7XG4gICAgICBjb25zdCBjb2x1bW5Hcm91cHMkMSA9IGNvbHVtbkdyb3Vwcyh0YWJsZSk7XG4gICAgICBjb25zdCBlbGVtcyA9IFtcbiAgICAgICAgLi4uY29sdW1uR3JvdXBzJDEsXG4gICAgICAgIC4uLnJvd3NcbiAgICAgIF07XG4gICAgICByZXR1cm4gZnJvbVJvd3NPckNvbEdyb3VwcyhlbGVtcywgZ2V0UGFyZW50U2VjdGlvbik7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tUGFzdGVkUm93cyA9IChlbGVtcywgc2VjdGlvbikgPT4gZnJvbVJvd3NPckNvbEdyb3VwcyhlbGVtcywgKCkgPT4gc2VjdGlvbik7XG5cbiAgICBjb25zdCBjYWNoZWQgPSBmID0+IHtcbiAgICAgIGxldCBjYWxsZWQgPSBmYWxzZTtcbiAgICAgIGxldCByO1xuICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICByID0gZi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IERldmljZVR5cGUgPSAob3MsIGJyb3dzZXIsIHVzZXJBZ2VudCwgbWVkaWFNYXRjaCkgPT4ge1xuICAgICAgY29uc3QgaXNpUGFkID0gb3MuaXNpT1MoKSAmJiAvaXBhZC9pLnRlc3QodXNlckFnZW50KSA9PT0gdHJ1ZTtcbiAgICAgIGNvbnN0IGlzaVBob25lID0gb3MuaXNpT1MoKSAmJiAhaXNpUGFkO1xuICAgICAgY29uc3QgaXNNb2JpbGUgPSBvcy5pc2lPUygpIHx8IG9zLmlzQW5kcm9pZCgpO1xuICAgICAgY29uc3QgaXNUb3VjaCA9IGlzTW9iaWxlIHx8IG1lZGlhTWF0Y2goJyhwb2ludGVyOmNvYXJzZSknKTtcbiAgICAgIGNvbnN0IGlzVGFibGV0ID0gaXNpUGFkIHx8ICFpc2lQaG9uZSAmJiBpc01vYmlsZSAmJiBtZWRpYU1hdGNoKCcobWluLWRldmljZS13aWR0aDo3NjhweCknKTtcbiAgICAgIGNvbnN0IGlzUGhvbmUgPSBpc2lQaG9uZSB8fCBpc01vYmlsZSAmJiAhaXNUYWJsZXQ7XG4gICAgICBjb25zdCBpT1N3ZWJ2aWV3ID0gYnJvd3Nlci5pc1NhZmFyaSgpICYmIG9zLmlzaU9TKCkgJiYgL3NhZmFyaS9pLnRlc3QodXNlckFnZW50KSA9PT0gZmFsc2U7XG4gICAgICBjb25zdCBpc0Rlc2t0b3AgPSAhaXNQaG9uZSAmJiAhaXNUYWJsZXQgJiYgIWlPU3dlYnZpZXc7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc2lQYWQ6IGNvbnN0YW50KGlzaVBhZCksXG4gICAgICAgIGlzaVBob25lOiBjb25zdGFudChpc2lQaG9uZSksXG4gICAgICAgIGlzVGFibGV0OiBjb25zdGFudChpc1RhYmxldCksXG4gICAgICAgIGlzUGhvbmU6IGNvbnN0YW50KGlzUGhvbmUpLFxuICAgICAgICBpc1RvdWNoOiBjb25zdGFudChpc1RvdWNoKSxcbiAgICAgICAgaXNBbmRyb2lkOiBvcy5pc0FuZHJvaWQsXG4gICAgICAgIGlzaU9TOiBvcy5pc2lPUyxcbiAgICAgICAgaXNXZWJWaWV3OiBjb25zdGFudChpT1N3ZWJ2aWV3KSxcbiAgICAgICAgaXNEZXNrdG9wOiBjb25zdGFudChpc0Rlc2t0b3ApXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBmaXJzdE1hdGNoID0gKHJlZ2V4ZXMsIHMpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVnZXhlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB4ID0gcmVnZXhlc1tpXTtcbiAgICAgICAgaWYgKHgudGVzdChzKSkge1xuICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgY29uc3QgZmluZCA9IChyZWdleGVzLCBhZ2VudCkgPT4ge1xuICAgICAgY29uc3QgciA9IGZpcnN0TWF0Y2gocmVnZXhlcywgYWdlbnQpO1xuICAgICAgaWYgKCFyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWFqb3I6IDAsXG4gICAgICAgICAgbWlub3I6IDBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGdyb3VwID0gaSA9PiB7XG4gICAgICAgIHJldHVybiBOdW1iZXIoYWdlbnQucmVwbGFjZShyLCAnJCcgKyBpKSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIG51JDIoZ3JvdXAoMSksIGdyb3VwKDIpKTtcbiAgICB9O1xuICAgIGNvbnN0IGRldGVjdCQ1ID0gKHZlcnNpb25SZWdleGVzLCBhZ2VudCkgPT4ge1xuICAgICAgY29uc3QgY2xlYW5lZEFnZW50ID0gU3RyaW5nKGFnZW50KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHZlcnNpb25SZWdleGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdW5rbm93biQyKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmluZCh2ZXJzaW9uUmVnZXhlcywgY2xlYW5lZEFnZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IHVua25vd24kMiA9ICgpID0+IHtcbiAgICAgIHJldHVybiBudSQyKDAsIDApO1xuICAgIH07XG4gICAgY29uc3QgbnUkMiA9IChtYWpvciwgbWlub3IpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1ham9yLFxuICAgICAgICBtaW5vclxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IFZlcnNpb24gPSB7XG4gICAgICBudTogbnUkMixcbiAgICAgIGRldGVjdDogZGV0ZWN0JDUsXG4gICAgICB1bmtub3duOiB1bmtub3duJDJcbiAgICB9O1xuXG4gICAgY29uc3QgZGV0ZWN0QnJvd3NlciQxID0gKGJyb3dzZXJzLCB1c2VyQWdlbnREYXRhKSA9PiB7XG4gICAgICByZXR1cm4gZmluZE1hcCh1c2VyQWdlbnREYXRhLmJyYW5kcywgdWFCcmFuZCA9PiB7XG4gICAgICAgIGNvbnN0IGxjQnJhbmQgPSB1YUJyYW5kLmJyYW5kLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBmaW5kJDEoYnJvd3NlcnMsIGJyb3dzZXIgPT4ge1xuICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICByZXR1cm4gbGNCcmFuZCA9PT0gKChfYSA9IGJyb3dzZXIuYnJhbmQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSkubWFwKGluZm8gPT4gKHtcbiAgICAgICAgICBjdXJyZW50OiBpbmZvLm5hbWUsXG4gICAgICAgICAgdmVyc2lvbjogVmVyc2lvbi5udShwYXJzZUludCh1YUJyYW5kLnZlcnNpb24sIDEwKSwgMClcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGRldGVjdCQ0ID0gKGNhbmRpZGF0ZXMsIHVzZXJBZ2VudCkgPT4ge1xuICAgICAgY29uc3QgYWdlbnQgPSBTdHJpbmcodXNlckFnZW50KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIGZpbmQkMShjYW5kaWRhdGVzLCBjYW5kaWRhdGUgPT4ge1xuICAgICAgICByZXR1cm4gY2FuZGlkYXRlLnNlYXJjaChhZ2VudCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGRldGVjdEJyb3dzZXIgPSAoYnJvd3NlcnMsIHVzZXJBZ2VudCkgPT4ge1xuICAgICAgcmV0dXJuIGRldGVjdCQ0KGJyb3dzZXJzLCB1c2VyQWdlbnQpLm1hcChicm93c2VyID0+IHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IFZlcnNpb24uZGV0ZWN0KGJyb3dzZXIudmVyc2lvblJlZ2V4ZXMsIHVzZXJBZ2VudCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY3VycmVudDogYnJvd3Nlci5uYW1lLFxuICAgICAgICAgIHZlcnNpb25cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZGV0ZWN0T3MgPSAob3NlcywgdXNlckFnZW50KSA9PiB7XG4gICAgICByZXR1cm4gZGV0ZWN0JDQob3NlcywgdXNlckFnZW50KS5tYXAob3MgPT4ge1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gVmVyc2lvbi5kZXRlY3Qob3MudmVyc2lvblJlZ2V4ZXMsIHVzZXJBZ2VudCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY3VycmVudDogb3MubmFtZSxcbiAgICAgICAgICB2ZXJzaW9uXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgbm9ybWFsVmVyc2lvblJlZ2V4ID0gLy4qP3ZlcnNpb25cXC9cXCA/KFswLTldKylcXC4oWzAtOV0rKS4qLztcbiAgICBjb25zdCBjaGVja0NvbnRhaW5zID0gdGFyZ2V0ID0+IHtcbiAgICAgIHJldHVybiB1YXN0cmluZyA9PiB7XG4gICAgICAgIHJldHVybiBjb250YWlucyh1YXN0cmluZywgdGFyZ2V0KTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBicm93c2VycyA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0VkZ2UnLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogWy8uKj9lZGdlXFwvID8oWzAtOV0rKVxcLihbMC05XSspJC9dLFxuICAgICAgICBzZWFyY2g6IHVhc3RyaW5nID0+IHtcbiAgICAgICAgICByZXR1cm4gY29udGFpbnModWFzdHJpbmcsICdlZGdlLycpICYmIGNvbnRhaW5zKHVhc3RyaW5nLCAnY2hyb21lJykgJiYgY29udGFpbnModWFzdHJpbmcsICdzYWZhcmknKSAmJiBjb250YWlucyh1YXN0cmluZywgJ2FwcGxld2Via2l0Jyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdDaHJvbWl1bScsXG4gICAgICAgIGJyYW5kOiAnQ2hyb21pdW0nLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogW1xuICAgICAgICAgIC8uKj9jaHJvbWVcXC8oWzAtOV0rKVxcLihbMC05XSspLiovLFxuICAgICAgICAgIG5vcm1hbFZlcnNpb25SZWdleFxuICAgICAgICBdLFxuICAgICAgICBzZWFyY2g6IHVhc3RyaW5nID0+IHtcbiAgICAgICAgICByZXR1cm4gY29udGFpbnModWFzdHJpbmcsICdjaHJvbWUnKSAmJiAhY29udGFpbnModWFzdHJpbmcsICdjaHJvbWVmcmFtZScpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnSUUnLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogW1xuICAgICAgICAgIC8uKj9tc2llXFwgPyhbMC05XSspXFwuKFswLTldKykuKi8sXG4gICAgICAgICAgLy4qP3J2OihbMC05XSspXFwuKFswLTldKykuKi9cbiAgICAgICAgXSxcbiAgICAgICAgc2VhcmNoOiB1YXN0cmluZyA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRhaW5zKHVhc3RyaW5nLCAnbXNpZScpIHx8IGNvbnRhaW5zKHVhc3RyaW5nLCAndHJpZGVudCcpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnT3BlcmEnLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogW1xuICAgICAgICAgIG5vcm1hbFZlcnNpb25SZWdleCxcbiAgICAgICAgICAvLio/b3BlcmFcXC8oWzAtOV0rKVxcLihbMC05XSspLiovXG4gICAgICAgIF0sXG4gICAgICAgIHNlYXJjaDogY2hlY2tDb250YWlucygnb3BlcmEnKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0ZpcmVmb3gnLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogWy8uKj9maXJlZm94XFwvXFwgPyhbMC05XSspXFwuKFswLTldKykuKi9dLFxuICAgICAgICBzZWFyY2g6IGNoZWNrQ29udGFpbnMoJ2ZpcmVmb3gnKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1NhZmFyaScsXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbXG4gICAgICAgICAgbm9ybWFsVmVyc2lvblJlZ2V4LFxuICAgICAgICAgIC8uKj9jcHUgb3MgKFswLTldKylfKFswLTldKykuKi9cbiAgICAgICAgXSxcbiAgICAgICAgc2VhcmNoOiB1YXN0cmluZyA9PiB7XG4gICAgICAgICAgcmV0dXJuIChjb250YWlucyh1YXN0cmluZywgJ3NhZmFyaScpIHx8IGNvbnRhaW5zKHVhc3RyaW5nLCAnbW9iaWxlLycpKSAmJiBjb250YWlucyh1YXN0cmluZywgJ2FwcGxld2Via2l0Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdO1xuICAgIGNvbnN0IG9zZXMgPSBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdXaW5kb3dzJyxcbiAgICAgICAgc2VhcmNoOiBjaGVja0NvbnRhaW5zKCd3aW4nKSxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFsvLio/d2luZG93c1xcIG50XFwgPyhbMC05XSspXFwuKFswLTldKykuKi9dXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnaU9TJyxcbiAgICAgICAgc2VhcmNoOiB1YXN0cmluZyA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRhaW5zKHVhc3RyaW5nLCAnaXBob25lJykgfHwgY29udGFpbnModWFzdHJpbmcsICdpcGFkJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbXG4gICAgICAgICAgLy4qP3ZlcnNpb25cXC9cXCA/KFswLTldKylcXC4oWzAtOV0rKS4qLyxcbiAgICAgICAgICAvLipjcHUgb3MgKFswLTldKylfKFswLTldKykuKi8sXG4gICAgICAgICAgLy4qY3B1IGlwaG9uZSBvcyAoWzAtOV0rKV8oWzAtOV0rKS4qL1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnQW5kcm9pZCcsXG4gICAgICAgIHNlYXJjaDogY2hlY2tDb250YWlucygnYW5kcm9pZCcpLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogWy8uKj9hbmRyb2lkXFwgPyhbMC05XSspXFwuKFswLTldKykuKi9dXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnbWFjT1MnLFxuICAgICAgICBzZWFyY2g6IGNoZWNrQ29udGFpbnMoJ21hYyBvcyB4JyksXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbLy4qP21hY1xcIG9zXFwgeFxcID8oWzAtOV0rKV8oWzAtOV0rKS4qL11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdMaW51eCcsXG4gICAgICAgIHNlYXJjaDogY2hlY2tDb250YWlucygnbGludXgnKSxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFtdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnU29sYXJpcycsXG4gICAgICAgIHNlYXJjaDogY2hlY2tDb250YWlucygnc3Vub3MnKSxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFtdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnRnJlZUJTRCcsXG4gICAgICAgIHNlYXJjaDogY2hlY2tDb250YWlucygnZnJlZWJzZCcpLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogW11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdDaHJvbWVPUycsXG4gICAgICAgIHNlYXJjaDogY2hlY2tDb250YWlucygnY3JvcycpLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogWy8uKj9jaHJvbWVcXC8oWzAtOV0rKVxcLihbMC05XSspLiovXVxuICAgICAgfVxuICAgIF07XG4gICAgY29uc3QgUGxhdGZvcm1JbmZvID0ge1xuICAgICAgYnJvd3NlcnM6IGNvbnN0YW50KGJyb3dzZXJzKSxcbiAgICAgIG9zZXM6IGNvbnN0YW50KG9zZXMpXG4gICAgfTtcblxuICAgIGNvbnN0IGVkZ2UgPSAnRWRnZSc7XG4gICAgY29uc3QgY2hyb21pdW0gPSAnQ2hyb21pdW0nO1xuICAgIGNvbnN0IGllID0gJ0lFJztcbiAgICBjb25zdCBvcGVyYSA9ICdPcGVyYSc7XG4gICAgY29uc3QgZmlyZWZveCA9ICdGaXJlZm94JztcbiAgICBjb25zdCBzYWZhcmkgPSAnU2FmYXJpJztcbiAgICBjb25zdCB1bmtub3duJDEgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gbnUkMSh7XG4gICAgICAgIGN1cnJlbnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgdmVyc2lvbjogVmVyc2lvbi51bmtub3duKClcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbnUkMSA9IGluZm8gPT4ge1xuICAgICAgY29uc3QgY3VycmVudCA9IGluZm8uY3VycmVudDtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSBpbmZvLnZlcnNpb247XG4gICAgICBjb25zdCBpc0Jyb3dzZXIgPSBuYW1lID0+ICgpID0+IGN1cnJlbnQgPT09IG5hbWU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50LFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICBpc0VkZ2U6IGlzQnJvd3NlcihlZGdlKSxcbiAgICAgICAgaXNDaHJvbWl1bTogaXNCcm93c2VyKGNocm9taXVtKSxcbiAgICAgICAgaXNJRTogaXNCcm93c2VyKGllKSxcbiAgICAgICAgaXNPcGVyYTogaXNCcm93c2VyKG9wZXJhKSxcbiAgICAgICAgaXNGaXJlZm94OiBpc0Jyb3dzZXIoZmlyZWZveCksXG4gICAgICAgIGlzU2FmYXJpOiBpc0Jyb3dzZXIoc2FmYXJpKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IEJyb3dzZXIgPSB7XG4gICAgICB1bmtub3duOiB1bmtub3duJDEsXG4gICAgICBudTogbnUkMSxcbiAgICAgIGVkZ2U6IGNvbnN0YW50KGVkZ2UpLFxuICAgICAgY2hyb21pdW06IGNvbnN0YW50KGNocm9taXVtKSxcbiAgICAgIGllOiBjb25zdGFudChpZSksXG4gICAgICBvcGVyYTogY29uc3RhbnQob3BlcmEpLFxuICAgICAgZmlyZWZveDogY29uc3RhbnQoZmlyZWZveCksXG4gICAgICBzYWZhcmk6IGNvbnN0YW50KHNhZmFyaSlcbiAgICB9O1xuXG4gICAgY29uc3Qgd2luZG93cyA9ICdXaW5kb3dzJztcbiAgICBjb25zdCBpb3MgPSAnaU9TJztcbiAgICBjb25zdCBhbmRyb2lkID0gJ0FuZHJvaWQnO1xuICAgIGNvbnN0IGxpbnV4ID0gJ0xpbnV4JztcbiAgICBjb25zdCBtYWNvcyA9ICdtYWNPUyc7XG4gICAgY29uc3Qgc29sYXJpcyA9ICdTb2xhcmlzJztcbiAgICBjb25zdCBmcmVlYnNkID0gJ0ZyZWVCU0QnO1xuICAgIGNvbnN0IGNocm9tZW9zID0gJ0Nocm9tZU9TJztcbiAgICBjb25zdCB1bmtub3duID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIG51KHtcbiAgICAgICAgY3VycmVudDogdW5kZWZpbmVkLFxuICAgICAgICB2ZXJzaW9uOiBWZXJzaW9uLnVua25vd24oKVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBudSA9IGluZm8gPT4ge1xuICAgICAgY29uc3QgY3VycmVudCA9IGluZm8uY3VycmVudDtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSBpbmZvLnZlcnNpb247XG4gICAgICBjb25zdCBpc09TID0gbmFtZSA9PiAoKSA9PiBjdXJyZW50ID09PSBuYW1lO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgaXNXaW5kb3dzOiBpc09TKHdpbmRvd3MpLFxuICAgICAgICBpc2lPUzogaXNPUyhpb3MpLFxuICAgICAgICBpc0FuZHJvaWQ6IGlzT1MoYW5kcm9pZCksXG4gICAgICAgIGlzTWFjT1M6IGlzT1MobWFjb3MpLFxuICAgICAgICBpc0xpbnV4OiBpc09TKGxpbnV4KSxcbiAgICAgICAgaXNTb2xhcmlzOiBpc09TKHNvbGFyaXMpLFxuICAgICAgICBpc0ZyZWVCU0Q6IGlzT1MoZnJlZWJzZCksXG4gICAgICAgIGlzQ2hyb21lT1M6IGlzT1MoY2hyb21lb3MpXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgT3BlcmF0aW5nU3lzdGVtID0ge1xuICAgICAgdW5rbm93bixcbiAgICAgIG51LFxuICAgICAgd2luZG93czogY29uc3RhbnQod2luZG93cyksXG4gICAgICBpb3M6IGNvbnN0YW50KGlvcyksXG4gICAgICBhbmRyb2lkOiBjb25zdGFudChhbmRyb2lkKSxcbiAgICAgIGxpbnV4OiBjb25zdGFudChsaW51eCksXG4gICAgICBtYWNvczogY29uc3RhbnQobWFjb3MpLFxuICAgICAgc29sYXJpczogY29uc3RhbnQoc29sYXJpcyksXG4gICAgICBmcmVlYnNkOiBjb25zdGFudChmcmVlYnNkKSxcbiAgICAgIGNocm9tZW9zOiBjb25zdGFudChjaHJvbWVvcylcbiAgICB9O1xuXG4gICAgY29uc3QgZGV0ZWN0JDMgPSAodXNlckFnZW50LCB1c2VyQWdlbnREYXRhT3B0LCBtZWRpYU1hdGNoKSA9PiB7XG4gICAgICBjb25zdCBicm93c2VycyA9IFBsYXRmb3JtSW5mby5icm93c2VycygpO1xuICAgICAgY29uc3Qgb3NlcyA9IFBsYXRmb3JtSW5mby5vc2VzKCk7XG4gICAgICBjb25zdCBicm93c2VyID0gdXNlckFnZW50RGF0YU9wdC5iaW5kKHVzZXJBZ2VudERhdGEgPT4gZGV0ZWN0QnJvd3NlciQxKGJyb3dzZXJzLCB1c2VyQWdlbnREYXRhKSkub3JUaHVuaygoKSA9PiBkZXRlY3RCcm93c2VyKGJyb3dzZXJzLCB1c2VyQWdlbnQpKS5mb2xkKEJyb3dzZXIudW5rbm93biwgQnJvd3Nlci5udSk7XG4gICAgICBjb25zdCBvcyA9IGRldGVjdE9zKG9zZXMsIHVzZXJBZ2VudCkuZm9sZChPcGVyYXRpbmdTeXN0ZW0udW5rbm93biwgT3BlcmF0aW5nU3lzdGVtLm51KTtcbiAgICAgIGNvbnN0IGRldmljZVR5cGUgPSBEZXZpY2VUeXBlKG9zLCBicm93c2VyLCB1c2VyQWdlbnQsIG1lZGlhTWF0Y2gpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYnJvd3NlcixcbiAgICAgICAgb3MsXG4gICAgICAgIGRldmljZVR5cGVcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBQbGF0Zm9ybURldGVjdGlvbiA9IHsgZGV0ZWN0OiBkZXRlY3QkMyB9O1xuXG4gICAgY29uc3QgbWVkaWFNYXRjaCA9IHF1ZXJ5ID0+IHdpbmRvdy5tYXRjaE1lZGlhKHF1ZXJ5KS5tYXRjaGVzO1xuICAgIGxldCBwbGF0Zm9ybSA9IGNhY2hlZCgoKSA9PiBQbGF0Zm9ybURldGVjdGlvbi5kZXRlY3QobmF2aWdhdG9yLnVzZXJBZ2VudCwgT3B0aW9uYWwuZnJvbShuYXZpZ2F0b3IudXNlckFnZW50RGF0YSksIG1lZGlhTWF0Y2gpKTtcbiAgICBjb25zdCBkZXRlY3QkMiA9ICgpID0+IHBsYXRmb3JtKCk7XG5cbiAgICBjb25zdCBEaW1lbnNpb24gPSAobmFtZSwgZ2V0T2Zmc2V0KSA9PiB7XG4gICAgICBjb25zdCBzZXQgPSAoZWxlbWVudCwgaCkgPT4ge1xuICAgICAgICBpZiAoIWlzTnVtYmVyKGgpICYmICFoLm1hdGNoKC9eWzAtOV0rJC8pKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG5hbWUgKyAnLnNldCBhY2NlcHRzIG9ubHkgcG9zaXRpdmUgaW50ZWdlciB2YWx1ZXMuIFZhbHVlIHdhcyAnICsgaCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICAgIGlmIChpc1N1cHBvcnRlZChkb20pKSB7XG4gICAgICAgICAgZG9tLnN0eWxlW25hbWVdID0gaCArICdweCc7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBnZXQgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgY29uc3QgciA9IGdldE9mZnNldChlbGVtZW50KTtcbiAgICAgICAgaWYgKHIgPD0gMCB8fCByID09PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgY3NzID0gZ2V0JGEoZWxlbWVudCwgbmFtZSk7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoY3NzKSB8fCAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldE91dGVyID0gZ2V0O1xuICAgICAgY29uc3QgYWdncmVnYXRlID0gKGVsZW1lbnQsIHByb3BlcnRpZXMpID0+IGZvbGRsKHByb3BlcnRpZXMsIChhY2MsIHByb3BlcnR5KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IGdldCRhKGVsZW1lbnQsIHByb3BlcnR5KTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB2YWwgPT09IHVuZGVmaW5lZCA/IDAgOiBwYXJzZUludCh2YWwsIDEwKTtcbiAgICAgICAgcmV0dXJuIGlzTmFOKHZhbHVlKSA/IGFjYyA6IGFjYyArIHZhbHVlO1xuICAgICAgfSwgMCk7XG4gICAgICBjb25zdCBtYXggPSAoZWxlbWVudCwgdmFsdWUsIHByb3BlcnRpZXMpID0+IHtcbiAgICAgICAgY29uc3QgY3VtdWxhdGl2ZUluY2x1c2lvbnMgPSBhZ2dyZWdhdGUoZWxlbWVudCwgcHJvcGVydGllcyk7XG4gICAgICAgIGNvbnN0IGFic29sdXRlTWF4ID0gdmFsdWUgPiBjdW11bGF0aXZlSW5jbHVzaW9ucyA/IHZhbHVlIC0gY3VtdWxhdGl2ZUluY2x1c2lvbnMgOiAwO1xuICAgICAgICByZXR1cm4gYWJzb2x1dGVNYXg7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0LFxuICAgICAgICBnZXQsXG4gICAgICAgIGdldE91dGVyLFxuICAgICAgICBhZ2dyZWdhdGUsXG4gICAgICAgIG1heFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgdG9OdW1iZXIgPSAocHgsIGZhbGxiYWNrKSA9PiB0b0Zsb2F0KHB4KS5nZXRPcihmYWxsYmFjayk7XG4gICAgY29uc3QgZ2V0UHJvcCA9IChlbGVtZW50LCBuYW1lLCBmYWxsYmFjaykgPT4gdG9OdW1iZXIoZ2V0JGEoZWxlbWVudCwgbmFtZSksIGZhbGxiYWNrKTtcbiAgICBjb25zdCBjYWxjQ29udGVudEJveFNpemUgPSAoZWxlbWVudCwgc2l6ZSwgdXBwZXIsIGxvd2VyKSA9PiB7XG4gICAgICBjb25zdCBwYWRkaW5nVXBwZXIgPSBnZXRQcm9wKGVsZW1lbnQsIGBwYWRkaW5nLSR7IHVwcGVyIH1gLCAwKTtcbiAgICAgIGNvbnN0IHBhZGRpbmdMb3dlciA9IGdldFByb3AoZWxlbWVudCwgYHBhZGRpbmctJHsgbG93ZXIgfWAsIDApO1xuICAgICAgY29uc3QgYm9yZGVyVXBwZXIgPSBnZXRQcm9wKGVsZW1lbnQsIGBib3JkZXItJHsgdXBwZXIgfS13aWR0aGAsIDApO1xuICAgICAgY29uc3QgYm9yZGVyTG93ZXIgPSBnZXRQcm9wKGVsZW1lbnQsIGBib3JkZXItJHsgbG93ZXIgfS13aWR0aGAsIDApO1xuICAgICAgcmV0dXJuIHNpemUgLSBwYWRkaW5nVXBwZXIgLSBwYWRkaW5nTG93ZXIgLSBib3JkZXJVcHBlciAtIGJvcmRlckxvd2VyO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Q2FsY3VsYXRlZFdpZHRoID0gKGVsZW1lbnQsIGJveFNpemluZykgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBjb25zdCB3aWR0aCA9IGRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB8fCBkb20ub2Zmc2V0V2lkdGg7XG4gICAgICByZXR1cm4gYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCcgPyB3aWR0aCA6IGNhbGNDb250ZW50Qm94U2l6ZShlbGVtZW50LCB3aWR0aCwgJ2xlZnQnLCAncmlnaHQnKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEhlaWdodCQxID0gZWxlbWVudCA9PiBnZXRQcm9wKGVsZW1lbnQsICdoZWlnaHQnLCBlbGVtZW50LmRvbS5vZmZzZXRIZWlnaHQpO1xuICAgIGNvbnN0IGdldFdpZHRoID0gZWxlbWVudCA9PiBnZXRQcm9wKGVsZW1lbnQsICd3aWR0aCcsIGVsZW1lbnQuZG9tLm9mZnNldFdpZHRoKTtcbiAgICBjb25zdCBnZXRJbm5lcldpZHRoID0gZWxlbWVudCA9PiBnZXRDYWxjdWxhdGVkV2lkdGgoZWxlbWVudCwgJ2NvbnRlbnQtYm94Jyk7XG5cbiAgICBjb25zdCBhcGkkMiA9IERpbWVuc2lvbignd2lkdGgnLCBlbGVtZW50ID0+IGVsZW1lbnQuZG9tLm9mZnNldFdpZHRoKTtcbiAgICBjb25zdCBnZXQkOSA9IGVsZW1lbnQgPT4gYXBpJDIuZ2V0KGVsZW1lbnQpO1xuICAgIGNvbnN0IGdldE91dGVyJDIgPSBlbGVtZW50ID0+IGFwaSQyLmdldE91dGVyKGVsZW1lbnQpO1xuICAgIGNvbnN0IGdldElubmVyID0gZ2V0SW5uZXJXaWR0aDtcbiAgICBjb25zdCBnZXRSdW50aW1lJDEgPSBnZXRXaWR0aDtcblxuICAgIGNvbnN0IGFkZENlbGxzID0gKGdyaWRSb3csIGluZGV4LCBjZWxscykgPT4ge1xuICAgICAgY29uc3QgZXhpc3RpbmdDZWxscyA9IGdyaWRSb3cuY2VsbHM7XG4gICAgICBjb25zdCBiZWZvcmUgPSBleGlzdGluZ0NlbGxzLnNsaWNlKDAsIGluZGV4KTtcbiAgICAgIGNvbnN0IGFmdGVyID0gZXhpc3RpbmdDZWxscy5zbGljZShpbmRleCk7XG4gICAgICBjb25zdCBuZXdDZWxscyA9IGJlZm9yZS5jb25jYXQoY2VsbHMpLmNvbmNhdChhZnRlcik7XG4gICAgICByZXR1cm4gc2V0Q2VsbHMoZ3JpZFJvdywgbmV3Q2VsbHMpO1xuICAgIH07XG4gICAgY29uc3QgYWRkQ2VsbCA9IChncmlkUm93LCBpbmRleCwgY2VsbCkgPT4gYWRkQ2VsbHMoZ3JpZFJvdywgaW5kZXgsIFtjZWxsXSk7XG4gICAgY29uc3QgbXV0YXRlQ2VsbCA9IChncmlkUm93LCBpbmRleCwgY2VsbCkgPT4ge1xuICAgICAgY29uc3QgY2VsbHMgPSBncmlkUm93LmNlbGxzO1xuICAgICAgY2VsbHNbaW5kZXhdID0gY2VsbDtcbiAgICB9O1xuICAgIGNvbnN0IHNldENlbGxzID0gKGdyaWRSb3csIGNlbGxzKSA9PiByb3djZWxscyhncmlkUm93LmVsZW1lbnQsIGNlbGxzLCBncmlkUm93LnNlY3Rpb24sIGdyaWRSb3cuaXNOZXcpO1xuICAgIGNvbnN0IG1hcENlbGxzID0gKGdyaWRSb3csIGYpID0+IHtcbiAgICAgIGNvbnN0IGNlbGxzID0gZ3JpZFJvdy5jZWxscztcbiAgICAgIGNvbnN0IHIgPSBtYXAkMShjZWxscywgZik7XG4gICAgICByZXR1cm4gcm93Y2VsbHMoZ3JpZFJvdy5lbGVtZW50LCByLCBncmlkUm93LnNlY3Rpb24sIGdyaWRSb3cuaXNOZXcpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Q2VsbCA9IChncmlkUm93LCBpbmRleCkgPT4gZ3JpZFJvdy5jZWxsc1tpbmRleF07XG4gICAgY29uc3QgZ2V0Q2VsbEVsZW1lbnQgPSAoZ3JpZFJvdywgaW5kZXgpID0+IGdldENlbGwoZ3JpZFJvdywgaW5kZXgpLmVsZW1lbnQ7XG4gICAgY29uc3QgY2VsbExlbmd0aCA9IGdyaWRSb3cgPT4gZ3JpZFJvdy5jZWxscy5sZW5ndGg7XG4gICAgY29uc3QgZXh0cmFjdEdyaWREZXRhaWxzID0gZ3JpZCA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBwYXJ0aXRpb24oZ3JpZCwgcm93ID0+IHJvdy5zZWN0aW9uID09PSAnY29sZ3JvdXAnKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJvd3M6IHJlc3VsdC5mYWlsLFxuICAgICAgICBjb2xzOiByZXN1bHQucGFzc1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNsb25lID0gKGdyaWRSb3csIGNsb25lUm93LCBjbG9uZUNlbGwpID0+IHtcbiAgICAgIGNvbnN0IG5ld0NlbGxzID0gbWFwJDEoZ3JpZFJvdy5jZWxscywgY2xvbmVDZWxsKTtcbiAgICAgIHJldHVybiByb3djZWxscyhjbG9uZVJvdyhncmlkUm93LmVsZW1lbnQpLCBuZXdDZWxscywgZ3JpZFJvdy5zZWN0aW9uLCB0cnVlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgTE9DS0VEX0NPTF9BVFRSID0gJ2RhdGEtc25vb2tlci1sb2NrZWQtY29scyc7XG4gICAgY29uc3QgZ2V0TG9ja2VkQ29sdW1uc0Zyb21UYWJsZSA9IHRhYmxlID0+IGdldE9wdCh0YWJsZSwgTE9DS0VEX0NPTF9BVFRSKS5iaW5kKGxvY2tlZENvbFN0ciA9PiBPcHRpb25hbC5mcm9tKGxvY2tlZENvbFN0ci5tYXRjaCgvXFxkKy9nKSkpLm1hcChsb2NrZWRDb2xzID0+IG1hcFRvT2JqZWN0KGxvY2tlZENvbHMsIGFsd2F5cykpO1xuICAgIGNvbnN0IGdldExvY2tlZENvbHVtbnNGcm9tR3JpZCA9IGdyaWQgPT4ge1xuICAgICAgY29uc3QgbG9ja2VkID0gZm9sZGwoZXh0cmFjdEdyaWREZXRhaWxzKGdyaWQpLnJvd3MsIChhY2MsIHJvdykgPT4ge1xuICAgICAgICBlYWNoJDIocm93LmNlbGxzLCAoY2VsbCwgaWR4KSA9PiB7XG4gICAgICAgICAgaWYgKGNlbGwuaXNMb2NrZWQpIHtcbiAgICAgICAgICAgIGFjY1tpZHhdID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pO1xuICAgICAgY29uc3QgbG9ja2VkQXJyID0gbWFwVG9BcnJheShsb2NrZWQsIChfdmFsLCBrZXkpID0+IHBhcnNlSW50KGtleSwgMTApKTtcbiAgICAgIHJldHVybiBzb3J0JDEobG9ja2VkQXJyKTtcbiAgICB9O1xuXG4gICAgY29uc3Qga2V5ID0gKHJvdywgY29sdW1uKSA9PiB7XG4gICAgICByZXR1cm4gcm93ICsgJywnICsgY29sdW1uO1xuICAgIH07XG4gICAgY29uc3QgZ2V0QXQgPSAod2FyZWhvdXNlLCByb3csIGNvbHVtbikgPT4gT3B0aW9uYWwuZnJvbSh3YXJlaG91c2UuYWNjZXNzW2tleShyb3csIGNvbHVtbildKTtcbiAgICBjb25zdCBmaW5kSXRlbSA9ICh3YXJlaG91c2UsIGl0ZW0sIGNvbXBhcmF0b3IpID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0gZmlsdGVySXRlbXMod2FyZWhvdXNlLCBkZXRhaWwgPT4ge1xuICAgICAgICByZXR1cm4gY29tcGFyYXRvcihpdGVtLCBkZXRhaWwuZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmaWx0ZXJlZC5sZW5ndGggPiAwID8gT3B0aW9uYWwuc29tZShmaWx0ZXJlZFswXSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXJJdGVtcyA9ICh3YXJlaG91c2UsIHByZWRpY2F0ZSkgPT4ge1xuICAgICAgY29uc3QgYWxsID0gYmluZCQyKHdhcmVob3VzZS5hbGwsIHIgPT4ge1xuICAgICAgICByZXR1cm4gci5jZWxscztcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZpbHRlciQyKGFsbCwgcHJlZGljYXRlKTtcbiAgICB9O1xuICAgIGNvbnN0IGdlbmVyYXRlQ29sdW1ucyA9IHJvd0RhdGEgPT4ge1xuICAgICAgY29uc3QgY29sdW1uc0dyb3VwID0ge307XG4gICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgZWFjaCQyKHJvd0RhdGEuY2VsbHMsIGNvbHVtbiA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHNwYW4gPSBjb2x1bW4uY29sc3BhbjtcbiAgICAgICAgcmFuZ2UkMShjb2xzcGFuLCBjb2x1bW5JbmRleCA9PiB7XG4gICAgICAgICAgY29uc3QgY29sSW5kZXggPSBpbmRleCArIGNvbHVtbkluZGV4O1xuICAgICAgICAgIGNvbHVtbnNHcm91cFtjb2xJbmRleF0gPSBjb2x1bW5leHQoY29sdW1uLmVsZW1lbnQsIGNvbHNwYW4sIGNvbEluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGluZGV4ICs9IGNvbHNwYW47XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb2x1bW5zR3JvdXA7XG4gICAgfTtcbiAgICBjb25zdCBnZW5lcmF0ZSQxID0gbGlzdCA9PiB7XG4gICAgICBjb25zdCBhY2Nlc3MgPSB7fTtcbiAgICAgIGNvbnN0IGNlbGxzID0gW107XG4gICAgICBjb25zdCB0YWJsZU9wdCA9IGhlYWQobGlzdCkubWFwKHJvd0RhdGEgPT4gcm93RGF0YS5lbGVtZW50KS5iaW5kKHRhYmxlKTtcbiAgICAgIGNvbnN0IGxvY2tlZENvbHVtbnMgPSB0YWJsZU9wdC5iaW5kKGdldExvY2tlZENvbHVtbnNGcm9tVGFibGUpLmdldE9yKHt9KTtcbiAgICAgIGxldCBtYXhSb3dzID0gMDtcbiAgICAgIGxldCBtYXhDb2x1bW5zID0gMDtcbiAgICAgIGxldCByb3dDb3VudCA9IDA7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBhc3M6IGNvbGdyb3VwUm93cyxcbiAgICAgICAgZmFpbDogcm93c1xuICAgICAgfSA9IHBhcnRpdGlvbihsaXN0LCByb3dEYXRhID0+IHJvd0RhdGEuc2VjdGlvbiA9PT0gJ2NvbGdyb3VwJyk7XG4gICAgICBlYWNoJDIocm93cywgcm93RGF0YSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSb3cgPSBbXTtcbiAgICAgICAgZWFjaCQyKHJvd0RhdGEuY2VsbHMsIHJvd0NlbGwgPT4ge1xuICAgICAgICAgIGxldCBzdGFydCA9IDA7XG4gICAgICAgICAgd2hpbGUgKGFjY2Vzc1trZXkocm93Q291bnQsIHN0YXJ0KV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3RhcnQrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaXNMb2NrZWQgPSBoYXNOb25OdWxsYWJsZUtleShsb2NrZWRDb2x1bW5zLCBzdGFydC50b1N0cmluZygpKTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50ID0gZXh0ZW5kZWQocm93Q2VsbC5lbGVtZW50LCByb3dDZWxsLnJvd3NwYW4sIHJvd0NlbGwuY29sc3Bhbiwgcm93Q291bnQsIHN0YXJ0LCBpc0xvY2tlZCk7XG4gICAgICAgICAgZm9yIChsZXQgb2NjdXBpZWRDb2x1bW5Qb3NpdGlvbiA9IDA7IG9jY3VwaWVkQ29sdW1uUG9zaXRpb24gPCByb3dDZWxsLmNvbHNwYW47IG9jY3VwaWVkQ29sdW1uUG9zaXRpb24rKykge1xuICAgICAgICAgICAgZm9yIChsZXQgb2NjdXBpZWRSb3dQb3NpdGlvbiA9IDA7IG9jY3VwaWVkUm93UG9zaXRpb24gPCByb3dDZWxsLnJvd3NwYW47IG9jY3VwaWVkUm93UG9zaXRpb24rKykge1xuICAgICAgICAgICAgICBjb25zdCByb3dQb3NpdGlvbiA9IHJvd0NvdW50ICsgb2NjdXBpZWRSb3dQb3NpdGlvbjtcbiAgICAgICAgICAgICAgY29uc3QgY29sdW1uUG9zaXRpb24gPSBzdGFydCArIG9jY3VwaWVkQ29sdW1uUG9zaXRpb247XG4gICAgICAgICAgICAgIGNvbnN0IG5ld3BvcyA9IGtleShyb3dQb3NpdGlvbiwgY29sdW1uUG9zaXRpb24pO1xuICAgICAgICAgICAgICBhY2Nlc3NbbmV3cG9zXSA9IGN1cnJlbnQ7XG4gICAgICAgICAgICAgIG1heENvbHVtbnMgPSBNYXRoLm1heChtYXhDb2x1bW5zLCBjb2x1bW5Qb3NpdGlvbiArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50Um93LnB1c2goY3VycmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICBtYXhSb3dzKys7XG4gICAgICAgIGNlbGxzLnB1c2gocm93ZGV0YWlsKHJvd0RhdGEuZWxlbWVudCwgY3VycmVudFJvdywgcm93RGF0YS5zZWN0aW9uKSk7XG4gICAgICAgIHJvd0NvdW50Kys7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHtjb2x1bW5zLCBjb2xncm91cHN9ID0gbGFzdCQyKGNvbGdyb3VwUm93cykubWFwKHJvd0RhdGEgPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gZ2VuZXJhdGVDb2x1bW5zKHJvd0RhdGEpO1xuICAgICAgICBjb25zdCBjb2xncm91cCQxID0gY29sZ3JvdXAocm93RGF0YS5lbGVtZW50LCB2YWx1ZXMoY29sdW1ucykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbGdyb3VwczogW2NvbGdyb3VwJDFdLFxuICAgICAgICAgIGNvbHVtbnNcbiAgICAgICAgfTtcbiAgICAgIH0pLmdldE9yVGh1bmsoKCkgPT4gKHtcbiAgICAgICAgY29sZ3JvdXBzOiBbXSxcbiAgICAgICAgY29sdW1uczoge31cbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IGdyaWQkMSA9IGdyaWQobWF4Um93cywgbWF4Q29sdW1ucyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBncmlkOiBncmlkJDEsXG4gICAgICAgIGFjY2VzcyxcbiAgICAgICAgYWxsOiBjZWxscyxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgY29sZ3JvdXBzXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZnJvbVRhYmxlID0gdGFibGUgPT4ge1xuICAgICAgY29uc3QgbGlzdCA9IGZyb21UYWJsZSQxKHRhYmxlKTtcbiAgICAgIHJldHVybiBnZW5lcmF0ZSQxKGxpc3QpO1xuICAgIH07XG4gICAgY29uc3QganVzdENlbGxzID0gd2FyZWhvdXNlID0+IGJpbmQkMih3YXJlaG91c2UuYWxsLCB3ID0+IHcuY2VsbHMpO1xuICAgIGNvbnN0IGp1c3RDb2x1bW5zID0gd2FyZWhvdXNlID0+IHZhbHVlcyh3YXJlaG91c2UuY29sdW1ucyk7XG4gICAgY29uc3QgaGFzQ29sdW1ucyA9IHdhcmVob3VzZSA9PiBrZXlzKHdhcmVob3VzZS5jb2x1bW5zKS5sZW5ndGggPiAwO1xuICAgIGNvbnN0IGdldENvbHVtbkF0ID0gKHdhcmVob3VzZSwgY29sdW1uSW5kZXgpID0+IE9wdGlvbmFsLmZyb20od2FyZWhvdXNlLmNvbHVtbnNbY29sdW1uSW5kZXhdKTtcbiAgICBjb25zdCBXYXJlaG91c2UgPSB7XG4gICAgICBmcm9tVGFibGUsXG4gICAgICBnZW5lcmF0ZTogZ2VuZXJhdGUkMSxcbiAgICAgIGdldEF0LFxuICAgICAgZmluZEl0ZW0sXG4gICAgICBmaWx0ZXJJdGVtcyxcbiAgICAgIGp1c3RDZWxscyxcbiAgICAgIGp1c3RDb2x1bW5zLFxuICAgICAgaGFzQ29sdW1ucyxcbiAgICAgIGdldENvbHVtbkF0XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbHVtbnMgPSAod2FyZWhvdXNlLCBpc1ZhbGlkQ2VsbCA9IGFsd2F5cykgPT4ge1xuICAgICAgY29uc3QgZ3JpZCA9IHdhcmVob3VzZS5ncmlkO1xuICAgICAgY29uc3QgY29scyA9IHJhbmdlJDEoZ3JpZC5jb2x1bW5zLCBpZGVudGl0eSk7XG4gICAgICBjb25zdCByb3dzQXJyID0gcmFuZ2UkMShncmlkLnJvd3MsIGlkZW50aXR5KTtcbiAgICAgIHJldHVybiBtYXAkMShjb2xzLCBjb2wgPT4ge1xuICAgICAgICBjb25zdCBnZXRCbG9jayA9ICgpID0+IGJpbmQkMihyb3dzQXJyLCByID0+IFdhcmVob3VzZS5nZXRBdCh3YXJlaG91c2UsIHIsIGNvbCkuZmlsdGVyKGRldGFpbCA9PiBkZXRhaWwuY29sdW1uID09PSBjb2wpLnRvQXJyYXkoKSk7XG4gICAgICAgIGNvbnN0IGlzVmFsaWQgPSBkZXRhaWwgPT4gZGV0YWlsLmNvbHNwYW4gPT09IDEgJiYgaXNWYWxpZENlbGwoZGV0YWlsLmVsZW1lbnQpO1xuICAgICAgICBjb25zdCBnZXRGYWxsYmFjayA9ICgpID0+IFdhcmVob3VzZS5nZXRBdCh3YXJlaG91c2UsIDAsIGNvbCk7XG4gICAgICAgIHJldHVybiBkZWNpZGUoZ2V0QmxvY2ssIGlzVmFsaWQsIGdldEZhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZGVjaWRlID0gKGdldEJsb2NrLCBpc1ZhbGlkLCBnZXRGYWxsYmFjaykgPT4ge1xuICAgICAgY29uc3QgaW5CbG9jayA9IGdldEJsb2NrKCk7XG4gICAgICBjb25zdCB2YWxpZEluQmxvY2sgPSBmaW5kJDEoaW5CbG9jaywgaXNWYWxpZCk7XG4gICAgICBjb25zdCBkZXRhaWxPcHRpb24gPSB2YWxpZEluQmxvY2sub3JUaHVuaygoKSA9PiBPcHRpb25hbC5mcm9tKGluQmxvY2tbMF0pLm9yVGh1bmsoZ2V0RmFsbGJhY2spKTtcbiAgICAgIHJldHVybiBkZXRhaWxPcHRpb24ubWFwKGRldGFpbCA9PiBkZXRhaWwuZWxlbWVudCk7XG4gICAgfTtcbiAgICBjb25zdCByb3dzID0gd2FyZWhvdXNlID0+IHtcbiAgICAgIGNvbnN0IGdyaWQgPSB3YXJlaG91c2UuZ3JpZDtcbiAgICAgIGNvbnN0IHJvd3NBcnIgPSByYW5nZSQxKGdyaWQucm93cywgaWRlbnRpdHkpO1xuICAgICAgY29uc3QgY29scyA9IHJhbmdlJDEoZ3JpZC5jb2x1bW5zLCBpZGVudGl0eSk7XG4gICAgICByZXR1cm4gbWFwJDEocm93c0Fyciwgcm93ID0+IHtcbiAgICAgICAgY29uc3QgZ2V0QmxvY2sgPSAoKSA9PiBiaW5kJDIoY29scywgYyA9PiBXYXJlaG91c2UuZ2V0QXQod2FyZWhvdXNlLCByb3csIGMpLmZpbHRlcihkZXRhaWwgPT4gZGV0YWlsLnJvdyA9PT0gcm93KS5mb2xkKGNvbnN0YW50KFtdKSwgZGV0YWlsID0+IFtkZXRhaWxdKSk7XG4gICAgICAgIGNvbnN0IGlzU2luZ2xlID0gZGV0YWlsID0+IGRldGFpbC5yb3dzcGFuID09PSAxO1xuICAgICAgICBjb25zdCBnZXRGYWxsYmFjayA9ICgpID0+IFdhcmVob3VzZS5nZXRBdCh3YXJlaG91c2UsIHJvdywgMCk7XG4gICAgICAgIHJldHVybiBkZWNpZGUoZ2V0QmxvY2ssIGlzU2luZ2xlLCBnZXRGYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGVkdWNlID0gKHhzLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB4cy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50ID0geHNbaW5kZXhdLmZvbGQoKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN0ID0gcmV2ZXJzZSh4cy5zbGljZSgwLCBpbmRleCkpO1xuICAgICAgICByZXR1cm4gZmluZE1hcChyZXN0LCAoYSwgaSkgPT4gYS5tYXAoYWEgPT4gKHtcbiAgICAgICAgICB2YWx1ZTogYWEsXG4gICAgICAgICAgZGVsdGE6IGkgKyAxXG4gICAgICAgIH0pKSk7XG4gICAgICB9LCBjID0+IE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICB2YWx1ZTogYyxcbiAgICAgICAgZGVsdGE6IDBcbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IG5leHQgPSB4c1tpbmRleCArIDFdLmZvbGQoKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN0ID0geHMuc2xpY2UoaW5kZXggKyAxKTtcbiAgICAgICAgcmV0dXJuIGZpbmRNYXAocmVzdCwgKGEsIGkpID0+IGEubWFwKGFhID0+ICh7XG4gICAgICAgICAgdmFsdWU6IGFhLFxuICAgICAgICAgIGRlbHRhOiBpICsgMVxuICAgICAgICB9KSkpO1xuICAgICAgfSwgbiA9PiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgdmFsdWU6IG4sXG4gICAgICAgIGRlbHRhOiAxXG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gY3VycmVudC5iaW5kKGMgPT4gbmV4dC5tYXAobiA9PiB7XG4gICAgICAgIGNvbnN0IGV4dHJhcyA9IG4uZGVsdGEgKyBjLmRlbHRhO1xuICAgICAgICByZXR1cm4gTWF0aC5hYnMobi52YWx1ZSAtIGMudmFsdWUpIC8gZXh0cmFzO1xuICAgICAgfSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBvbkRpcmVjdGlvbiA9IChpc0x0ciwgaXNSdGwpID0+IGVsZW1lbnQgPT4gZ2V0RGlyZWN0aW9uKGVsZW1lbnQpID09PSAncnRsJyA/IGlzUnRsIDogaXNMdHI7XG4gICAgY29uc3QgZ2V0RGlyZWN0aW9uID0gZWxlbWVudCA9PiBnZXQkYShlbGVtZW50LCAnZGlyZWN0aW9uJykgPT09ICdydGwnID8gJ3J0bCcgOiAnbHRyJztcblxuICAgIGNvbnN0IGFwaSQxID0gRGltZW5zaW9uKCdoZWlnaHQnLCBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgcmV0dXJuIGluQm9keShlbGVtZW50KSA/IGRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgOiBkb20ub2Zmc2V0SGVpZ2h0O1xuICAgIH0pO1xuICAgIGNvbnN0IGdldCQ4ID0gZWxlbWVudCA9PiBhcGkkMS5nZXQoZWxlbWVudCk7XG4gICAgY29uc3QgZ2V0T3V0ZXIkMSA9IGVsZW1lbnQgPT4gYXBpJDEuZ2V0T3V0ZXIoZWxlbWVudCk7XG4gICAgY29uc3QgZ2V0UnVudGltZSA9IGdldEhlaWdodCQxO1xuXG4gICAgY29uc3QgciA9IChsZWZ0LCB0b3ApID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zbGF0ZSA9ICh4LCB5KSA9PiByKGxlZnQgKyB4LCB0b3AgKyB5KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQsXG4gICAgICAgIHRvcCxcbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgU3VnYXJQb3NpdGlvbiA9IHI7XG5cbiAgICBjb25zdCBib3hQb3NpdGlvbiA9IGRvbSA9PiB7XG4gICAgICBjb25zdCBib3ggPSBkb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICByZXR1cm4gU3VnYXJQb3NpdGlvbihib3gubGVmdCwgYm94LnRvcCk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJzdERlZmluZWRPclplcm8gPSAoYSwgYikgPT4ge1xuICAgICAgaWYgKGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBiICE9PSB1bmRlZmluZWQgPyBiIDogMDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFic29sdXRlID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBlbGVtZW50LmRvbS5vd25lckRvY3VtZW50O1xuICAgICAgY29uc3QgYm9keSA9IGRvYy5ib2R5O1xuICAgICAgY29uc3Qgd2luID0gZG9jLmRlZmF1bHRWaWV3O1xuICAgICAgY29uc3QgaHRtbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICBpZiAoYm9keSA9PT0gZWxlbWVudC5kb20pIHtcbiAgICAgICAgcmV0dXJuIFN1Z2FyUG9zaXRpb24oYm9keS5vZmZzZXRMZWZ0LCBib2R5Lm9mZnNldFRvcCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzY3JvbGxUb3AgPSBmaXJzdERlZmluZWRPclplcm8od2luID09PSBudWxsIHx8IHdpbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2luLnBhZ2VZT2Zmc2V0LCBodG1sLnNjcm9sbFRvcCk7XG4gICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gZmlyc3REZWZpbmVkT3JaZXJvKHdpbiA9PT0gbnVsbCB8fCB3aW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpbi5wYWdlWE9mZnNldCwgaHRtbC5zY3JvbGxMZWZ0KTtcbiAgICAgIGNvbnN0IGNsaWVudFRvcCA9IGZpcnN0RGVmaW5lZE9yWmVybyhodG1sLmNsaWVudFRvcCwgYm9keS5jbGllbnRUb3ApO1xuICAgICAgY29uc3QgY2xpZW50TGVmdCA9IGZpcnN0RGVmaW5lZE9yWmVybyhodG1sLmNsaWVudExlZnQsIGJvZHkuY2xpZW50TGVmdCk7XG4gICAgICByZXR1cm4gdmlld3BvcnQoZWxlbWVudCkudHJhbnNsYXRlKHNjcm9sbExlZnQgLSBjbGllbnRMZWZ0LCBzY3JvbGxUb3AgLSBjbGllbnRUb3ApO1xuICAgIH07XG4gICAgY29uc3Qgdmlld3BvcnQgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgY29uc3QgZG9jID0gZG9tLm93bmVyRG9jdW1lbnQ7XG4gICAgICBjb25zdCBib2R5ID0gZG9jLmJvZHk7XG4gICAgICBpZiAoYm9keSA9PT0gZG9tKSB7XG4gICAgICAgIHJldHVybiBTdWdhclBvc2l0aW9uKGJvZHkub2Zmc2V0TGVmdCwgYm9keS5vZmZzZXRUb3ApO1xuICAgICAgfVxuICAgICAgaWYgKCFpbkJvZHkoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIFN1Z2FyUG9zaXRpb24oMCwgMCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYm94UG9zaXRpb24oZG9tKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgcm93SW5mbyA9IChyb3csIHkpID0+ICh7XG4gICAgICByb3csXG4gICAgICB5XG4gICAgfSk7XG4gICAgY29uc3QgY29sSW5mbyA9IChjb2wsIHgpID0+ICh7XG4gICAgICBjb2wsXG4gICAgICB4XG4gICAgfSk7XG4gICAgY29uc3QgcnRsRWRnZSA9IGNlbGwgPT4ge1xuICAgICAgY29uc3QgcG9zID0gYWJzb2x1dGUoY2VsbCk7XG4gICAgICByZXR1cm4gcG9zLmxlZnQgKyBnZXRPdXRlciQyKGNlbGwpO1xuICAgIH07XG4gICAgY29uc3QgbHRyRWRnZSA9IGNlbGwgPT4ge1xuICAgICAgcmV0dXJuIGFic29sdXRlKGNlbGwpLmxlZnQ7XG4gICAgfTtcbiAgICBjb25zdCBnZXRMZWZ0RWRnZSA9IChpbmRleCwgY2VsbCkgPT4ge1xuICAgICAgcmV0dXJuIGNvbEluZm8oaW5kZXgsIGx0ckVkZ2UoY2VsbCkpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0UmlnaHRFZGdlID0gKGluZGV4LCBjZWxsKSA9PiB7XG4gICAgICByZXR1cm4gY29sSW5mbyhpbmRleCwgcnRsRWRnZShjZWxsKSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRUb3AkMSA9IGNlbGwgPT4ge1xuICAgICAgcmV0dXJuIGFic29sdXRlKGNlbGwpLnRvcDtcbiAgICB9O1xuICAgIGNvbnN0IGdldFRvcEVkZ2UgPSAoaW5kZXgsIGNlbGwpID0+IHtcbiAgICAgIHJldHVybiByb3dJbmZvKGluZGV4LCBnZXRUb3AkMShjZWxsKSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRCb3R0b21FZGdlID0gKGluZGV4LCBjZWxsKSA9PiB7XG4gICAgICByZXR1cm4gcm93SW5mbyhpbmRleCwgZ2V0VG9wJDEoY2VsbCkgKyBnZXRPdXRlciQxKGNlbGwpKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRQb3NpdGlvbnMgPSAoZ2V0SW5uZXJFZGdlLCBnZXRPdXRlckVkZ2UsIGFycmF5KSA9PiB7XG4gICAgICBpZiAoYXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxpbmVzID0gbWFwJDEoYXJyYXkuc2xpY2UoMSksIChjZWxsT3B0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgICByZXR1cm4gY2VsbE9wdGlvbi5tYXAoY2VsbCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGdldElubmVyRWRnZShpbmRleCwgY2VsbCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBsYXN0TGluZSA9IGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdLm1hcChjZWxsID0+IHtcbiAgICAgICAgcmV0dXJuIGdldE91dGVyRWRnZShhcnJheS5sZW5ndGggLSAxLCBjZWxsKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGxpbmVzLmNvbmNhdChbbGFzdExpbmVdKTtcbiAgICB9O1xuICAgIGNvbnN0IG5lZ2F0ZSA9IHN0ZXAgPT4ge1xuICAgICAgcmV0dXJuIC1zdGVwO1xuICAgIH07XG4gICAgY29uc3QgaGVpZ2h0ID0ge1xuICAgICAgZGVsdGE6IGlkZW50aXR5LFxuICAgICAgcG9zaXRpb25zOiBvcHRFbGVtZW50cyA9PiBmaW5kUG9zaXRpb25zKGdldFRvcEVkZ2UsIGdldEJvdHRvbUVkZ2UsIG9wdEVsZW1lbnRzKSxcbiAgICAgIGVkZ2U6IGdldFRvcCQxXG4gICAgfTtcbiAgICBjb25zdCBsdHIkMSA9IHtcbiAgICAgIGRlbHRhOiBpZGVudGl0eSxcbiAgICAgIGVkZ2U6IGx0ckVkZ2UsXG4gICAgICBwb3NpdGlvbnM6IG9wdEVsZW1lbnRzID0+IGZpbmRQb3NpdGlvbnMoZ2V0TGVmdEVkZ2UsIGdldFJpZ2h0RWRnZSwgb3B0RWxlbWVudHMpXG4gICAgfTtcbiAgICBjb25zdCBydGwkMSA9IHtcbiAgICAgIGRlbHRhOiBuZWdhdGUsXG4gICAgICBlZGdlOiBydGxFZGdlLFxuICAgICAgcG9zaXRpb25zOiBvcHRFbGVtZW50cyA9PiBmaW5kUG9zaXRpb25zKGdldFJpZ2h0RWRnZSwgZ2V0TGVmdEVkZ2UsIG9wdEVsZW1lbnRzKVxuICAgIH07XG4gICAgY29uc3QgZGV0ZWN0JDEgPSBvbkRpcmVjdGlvbihsdHIkMSwgcnRsJDEpO1xuICAgIGNvbnN0IHdpZHRoID0ge1xuICAgICAgZGVsdGE6IChhbW91bnQsIHRhYmxlKSA9PiBkZXRlY3QkMSh0YWJsZSkuZGVsdGEoYW1vdW50LCB0YWJsZSksXG4gICAgICBwb3NpdGlvbnM6IChjb2xzLCB0YWJsZSkgPT4gZGV0ZWN0JDEodGFibGUpLnBvc2l0aW9ucyhjb2xzLCB0YWJsZSksXG4gICAgICBlZGdlOiBjZWxsID0+IGRldGVjdCQxKGNlbGwpLmVkZ2UoY2VsbClcbiAgICB9O1xuXG4gICAgY29uc3QgdW5pdHMgPSB7XG4gICAgICB1bnN1cHBvcnRlZExlbmd0aDogW1xuICAgICAgICAnZW0nLFxuICAgICAgICAnZXgnLFxuICAgICAgICAnY2FwJyxcbiAgICAgICAgJ2NoJyxcbiAgICAgICAgJ2ljJyxcbiAgICAgICAgJ3JlbScsXG4gICAgICAgICdsaCcsXG4gICAgICAgICdybGgnLFxuICAgICAgICAndncnLFxuICAgICAgICAndmgnLFxuICAgICAgICAndmknLFxuICAgICAgICAndmInLFxuICAgICAgICAndm1pbicsXG4gICAgICAgICd2bWF4JyxcbiAgICAgICAgJ2NtJyxcbiAgICAgICAgJ21tJyxcbiAgICAgICAgJ1EnLFxuICAgICAgICAnaW4nLFxuICAgICAgICAncGMnLFxuICAgICAgICAncHQnLFxuICAgICAgICAncHgnXG4gICAgICBdLFxuICAgICAgZml4ZWQ6IFtcbiAgICAgICAgJ3B4JyxcbiAgICAgICAgJ3B0J1xuICAgICAgXSxcbiAgICAgIHJlbGF0aXZlOiBbJyUnXSxcbiAgICAgIGVtcHR5OiBbJyddXG4gICAgfTtcbiAgICBjb25zdCBwYXR0ZXJuID0gKCgpID0+IHtcbiAgICAgIGNvbnN0IGRlY2ltYWxEaWdpdHMgPSAnWzAtOV0rJztcbiAgICAgIGNvbnN0IHNpZ25lZEludGVnZXIgPSAnWystXT8nICsgZGVjaW1hbERpZ2l0cztcbiAgICAgIGNvbnN0IGV4cG9uZW50UGFydCA9ICdbZUVdJyArIHNpZ25lZEludGVnZXI7XG4gICAgICBjb25zdCBkb3QgPSAnXFxcXC4nO1xuICAgICAgY29uc3Qgb3B0ID0gaW5wdXQgPT4gYCg/OiR7IGlucHV0IH0pP2A7XG4gICAgICBjb25zdCB1bnNpZ25lZERlY2ltYWxMaXRlcmFsID0gW1xuICAgICAgICAnSW5maW5pdHknLFxuICAgICAgICBkZWNpbWFsRGlnaXRzICsgZG90ICsgb3B0KGRlY2ltYWxEaWdpdHMpICsgb3B0KGV4cG9uZW50UGFydCksXG4gICAgICAgIGRvdCArIGRlY2ltYWxEaWdpdHMgKyBvcHQoZXhwb25lbnRQYXJ0KSxcbiAgICAgICAgZGVjaW1hbERpZ2l0cyArIG9wdChleHBvbmVudFBhcnQpXG4gICAgICBdLmpvaW4oJ3wnKTtcbiAgICAgIGNvbnN0IGZsb2F0ID0gYFsrLV0/KD86JHsgdW5zaWduZWREZWNpbWFsTGl0ZXJhbCB9KWA7XG4gICAgICByZXR1cm4gbmV3IFJlZ0V4cChgXigkeyBmbG9hdCB9KSguKikkYCk7XG4gICAgfSkoKTtcbiAgICBjb25zdCBpc1VuaXQgPSAodW5pdCwgYWNjZXB0ZWQpID0+IGV4aXN0cyhhY2NlcHRlZCwgYWNjID0+IGV4aXN0cyh1bml0c1thY2NdLCBjaGVjayA9PiB1bml0ID09PSBjaGVjaykpO1xuICAgIGNvbnN0IHBhcnNlID0gKGlucHV0LCBhY2NlcHRlZCkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2ggPSBPcHRpb25hbC5mcm9tKHBhdHRlcm4uZXhlYyhpbnB1dCkpO1xuICAgICAgcmV0dXJuIG1hdGNoLmJpbmQoYXJyYXkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IE51bWJlcihhcnJheVsxXSk7XG4gICAgICAgIGNvbnN0IHVuaXRSYXcgPSBhcnJheVsyXTtcbiAgICAgICAgaWYgKGlzVW5pdCh1bml0UmF3LCBhY2NlcHRlZCkpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHVuaXQ6IHVuaXRSYXdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgclBlcmNlbnRhZ2VCYXNlZFNpemVSZWdleCA9IC8oXFxkKyhcXC5cXGQrKT8pJS87XG4gICAgY29uc3QgclBpeGVsQmFzZWRTaXplUmVnZXggPSAvKFxcZCsoXFwuXFxkKyk/KXB4fGVtLztcbiAgICBjb25zdCBpc0NvbCQyID0gaXNUYWcoJ2NvbCcpO1xuICAgIGNvbnN0IGdldFBlcmNlbnRTaXplID0gKGVsbSwgb3V0ZXJHZXR0ZXIsIGlubmVyR2V0dGVyKSA9PiB7XG4gICAgICBjb25zdCByZWxhdGl2ZVBhcmVudCA9IHBhcmVudEVsZW1lbnQoZWxtKS5nZXRPclRodW5rKCgpID0+IGdldEJvZHkkMShvd25lcihlbG0pKSk7XG4gICAgICByZXR1cm4gb3V0ZXJHZXR0ZXIoZWxtKSAvIGlubmVyR2V0dGVyKHJlbGF0aXZlUGFyZW50KSAqIDEwMDtcbiAgICB9O1xuICAgIGNvbnN0IHNldFBpeGVsV2lkdGggPSAoY2VsbCwgYW1vdW50KSA9PiB7XG4gICAgICBzZXQkMShjZWxsLCAnd2lkdGgnLCBhbW91bnQgKyAncHgnKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldFBlcmNlbnRhZ2VXaWR0aCA9IChjZWxsLCBhbW91bnQpID0+IHtcbiAgICAgIHNldCQxKGNlbGwsICd3aWR0aCcsIGFtb3VudCArICclJyk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRIZWlnaHQgPSAoY2VsbCwgYW1vdW50KSA9PiB7XG4gICAgICBzZXQkMShjZWxsLCAnaGVpZ2h0JywgYW1vdW50ICsgJ3B4Jyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRIZWlnaHRWYWx1ZSA9IGNlbGwgPT4gZ2V0UnVudGltZShjZWxsKSArICdweCc7XG4gICAgY29uc3QgY29udmVydCA9IChjZWxsLCBudW1iZXIsIGdldHRlciwgc2V0dGVyKSA9PiB7XG4gICAgICBjb25zdCBuZXdTaXplID0gdGFibGUoY2VsbCkubWFwKHRhYmxlID0+IHtcbiAgICAgICAgY29uc3QgdG90YWwgPSBnZXR0ZXIodGFibGUpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIgLyAxMDAgKiB0b3RhbCk7XG4gICAgICB9KS5nZXRPcihudW1iZXIpO1xuICAgICAgc2V0dGVyKGNlbGwsIG5ld1NpemUpO1xuICAgICAgcmV0dXJuIG5ld1NpemU7XG4gICAgfTtcbiAgICBjb25zdCBub3JtYWxpemVQaXhlbFNpemUgPSAodmFsdWUsIGNlbGwsIGdldHRlciwgc2V0dGVyKSA9PiB7XG4gICAgICBjb25zdCBudW1iZXIgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgIHJldHVybiBlbmRzV2l0aCh2YWx1ZSwgJyUnKSAmJiBuYW1lKGNlbGwpICE9PSAndGFibGUnID8gY29udmVydChjZWxsLCBudW1iZXIsIGdldHRlciwgc2V0dGVyKSA6IG51bWJlcjtcbiAgICB9O1xuICAgIGNvbnN0IGdldFRvdGFsSGVpZ2h0ID0gY2VsbCA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGdldEhlaWdodFZhbHVlKGNlbGwpO1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZ2V0JDgoY2VsbCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbm9ybWFsaXplUGl4ZWxTaXplKHZhbHVlLCBjZWxsLCBnZXQkOCwgc2V0SGVpZ2h0KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldCQ3ID0gKGNlbGwsIHR5cGUsIGYpID0+IHtcbiAgICAgIGNvbnN0IHYgPSBmKGNlbGwpO1xuICAgICAgY29uc3Qgc3BhbiA9IGdldFNwYW4oY2VsbCwgdHlwZSk7XG4gICAgICByZXR1cm4gdiAvIHNwYW47XG4gICAgfTtcbiAgICBjb25zdCBnZXRSYXckMSA9IChlbGVtZW50LCBwcm9wKSA9PiB7XG4gICAgICByZXR1cm4gZ2V0UmF3JDIoZWxlbWVudCwgcHJvcCkub3JUaHVuaygoKSA9PiB7XG4gICAgICAgIHJldHVybiBnZXRPcHQoZWxlbWVudCwgcHJvcCkubWFwKHZhbCA9PiB2YWwgKyAncHgnKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0UmF3V2lkdGgkMSA9IGVsZW1lbnQgPT4gZ2V0UmF3JDEoZWxlbWVudCwgJ3dpZHRoJyk7XG4gICAgY29uc3QgZ2V0UmF3SGVpZ2h0ID0gZWxlbWVudCA9PiBnZXRSYXckMShlbGVtZW50LCAnaGVpZ2h0Jyk7XG4gICAgY29uc3QgZ2V0UGVyY2VudGFnZVdpZHRoID0gY2VsbCA9PiBnZXRQZXJjZW50U2l6ZShjZWxsLCBnZXQkOSwgZ2V0SW5uZXIpO1xuICAgIGNvbnN0IGdldFBpeGVsV2lkdGgkMSA9IGNlbGwgPT4gaXNDb2wkMihjZWxsKSA/IGdldCQ5KGNlbGwpIDogZ2V0UnVudGltZSQxKGNlbGwpO1xuICAgIGNvbnN0IGdldEhlaWdodCA9IGNlbGwgPT4ge1xuICAgICAgcmV0dXJuIGdldCQ3KGNlbGwsICdyb3dzcGFuJywgZ2V0VG90YWxIZWlnaHQpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0R2VuZXJpY1dpZHRoID0gY2VsbCA9PiB7XG4gICAgICBjb25zdCB3aWR0aCA9IGdldFJhd1dpZHRoJDEoY2VsbCk7XG4gICAgICByZXR1cm4gd2lkdGguYmluZCh3ID0+IHBhcnNlKHcsIFtcbiAgICAgICAgJ2ZpeGVkJyxcbiAgICAgICAgJ3JlbGF0aXZlJyxcbiAgICAgICAgJ2VtcHR5J1xuICAgICAgXSkpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0R2VuZXJpY1dpZHRoID0gKGNlbGwsIGFtb3VudCwgdW5pdCkgPT4ge1xuICAgICAgc2V0JDEoY2VsbCwgJ3dpZHRoJywgYW1vdW50ICsgdW5pdCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRQaXhlbFRhYmxlV2lkdGggPSB0YWJsZSA9PiBnZXQkOSh0YWJsZSkgKyAncHgnO1xuICAgIGNvbnN0IGdldFBlcmNlbnRUYWJsZVdpZHRoID0gdGFibGUgPT4gZ2V0UGVyY2VudFNpemUodGFibGUsIGdldCQ5LCBnZXRJbm5lcikgKyAnJSc7XG4gICAgY29uc3QgaXNQZXJjZW50U2l6aW5nJDEgPSB0YWJsZSA9PiBnZXRSYXdXaWR0aCQxKHRhYmxlKS5leGlzdHMoc2l6ZSA9PiByUGVyY2VudGFnZUJhc2VkU2l6ZVJlZ2V4LnRlc3Qoc2l6ZSkpO1xuICAgIGNvbnN0IGlzUGl4ZWxTaXppbmckMSA9IHRhYmxlID0+IGdldFJhd1dpZHRoJDEodGFibGUpLmV4aXN0cyhzaXplID0+IHJQaXhlbEJhc2VkU2l6ZVJlZ2V4LnRlc3Qoc2l6ZSkpO1xuICAgIGNvbnN0IGlzTm9uZVNpemluZyQxID0gdGFibGUgPT4gZ2V0UmF3V2lkdGgkMSh0YWJsZSkuaXNOb25lKCk7XG4gICAgY29uc3QgcGVyY2VudGFnZUJhc2VkU2l6ZVJlZ2V4ID0gY29uc3RhbnQoclBlcmNlbnRhZ2VCYXNlZFNpemVSZWdleCk7XG5cbiAgICBjb25zdCBpc0NvbCQxID0gaXNUYWcoJ2NvbCcpO1xuICAgIGNvbnN0IGdldFJhd1cgPSBjZWxsID0+IHtcbiAgICAgIHJldHVybiBnZXRSYXdXaWR0aCQxKGNlbGwpLmdldE9yVGh1bmsoKCkgPT4gZ2V0UGl4ZWxXaWR0aCQxKGNlbGwpICsgJ3B4Jyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRSYXdIID0gY2VsbCA9PiB7XG4gICAgICByZXR1cm4gZ2V0UmF3SGVpZ2h0KGNlbGwpLmdldE9yVGh1bmsoKCkgPT4gZ2V0SGVpZ2h0KGNlbGwpICsgJ3B4Jyk7XG4gICAgfTtcbiAgICBjb25zdCBqdXN0Q29scyA9IHdhcmVob3VzZSA9PiBtYXAkMShXYXJlaG91c2UuanVzdENvbHVtbnMod2FyZWhvdXNlKSwgY29sdW1uID0+IE9wdGlvbmFsLmZyb20oY29sdW1uLmVsZW1lbnQpKTtcbiAgICBjb25zdCBpc1ZhbGlkQ29sdW1uID0gY2VsbCA9PiB7XG4gICAgICBjb25zdCBicm93c2VyID0gZGV0ZWN0JDIoKS5icm93c2VyO1xuICAgICAgY29uc3Qgc3VwcG9ydHNDb2xXaWR0aHMgPSBicm93c2VyLmlzQ2hyb21pdW0oKSB8fCBicm93c2VyLmlzRmlyZWZveCgpO1xuICAgICAgcmV0dXJuIGlzQ29sJDEoY2VsbCkgPyBzdXBwb3J0c0NvbFdpZHRocyA6IHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBnZXREaW1lbnNpb24gPSAoY2VsbE9wdCwgaW5kZXgsIGJhY2t1cHMsIGZpbHRlciwgZ2V0dGVyLCBmYWxsYmFjaykgPT4gY2VsbE9wdC5maWx0ZXIoZmlsdGVyKS5mb2xkKCgpID0+IGZhbGxiYWNrKGRlZHVjZShiYWNrdXBzLCBpbmRleCkpLCBjZWxsID0+IGdldHRlcihjZWxsKSk7XG4gICAgY29uc3QgZ2V0V2lkdGhGcm9tID0gKHdhcmVob3VzZSwgdGFibGUsIGdldFdpZHRoLCBmYWxsYmFjaykgPT4ge1xuICAgICAgY29uc3QgY29sdW1uQ2VsbHMgPSBjb2x1bW5zKHdhcmVob3VzZSk7XG4gICAgICBjb25zdCBjb2x1bW5zJDEgPSBXYXJlaG91c2UuaGFzQ29sdW1ucyh3YXJlaG91c2UpID8ganVzdENvbHMod2FyZWhvdXNlKSA6IGNvbHVtbkNlbGxzO1xuICAgICAgY29uc3QgYmFja3VwcyA9IFtPcHRpb25hbC5zb21lKHdpZHRoLmVkZ2UodGFibGUpKV0uY29uY2F0KG1hcCQxKHdpZHRoLnBvc2l0aW9ucyhjb2x1bW5DZWxscywgdGFibGUpLCBwb3MgPT4gcG9zLm1hcChwID0+IHAueCkpKTtcbiAgICAgIGNvbnN0IGNvbEZpbHRlciA9IG5vdChoYXNDb2xzcGFuKTtcbiAgICAgIHJldHVybiBtYXAkMShjb2x1bW5zJDEsIChjZWxsT3B0aW9uLCBjKSA9PiB7XG4gICAgICAgIHJldHVybiBnZXREaW1lbnNpb24oY2VsbE9wdGlvbiwgYywgYmFja3VwcywgY29sRmlsdGVyLCBjb2x1bW4gPT4ge1xuICAgICAgICAgIGlmIChpc1ZhbGlkQ29sdW1uKGNvbHVtbikpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRXaWR0aChjb2x1bW4pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gYmluZEZyb20oY29sdW1uQ2VsbHNbY10sIGlkZW50aXR5KTtcbiAgICAgICAgICAgIHJldHVybiBnZXREaW1lbnNpb24oY2VsbCwgYywgYmFja3VwcywgY29sRmlsdGVyLCBjZWxsID0+IGZhbGxiYWNrKE9wdGlvbmFsLnNvbWUoZ2V0JDkoY2VsbCkpKSwgZmFsbGJhY2spO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgZmFsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXREZWR1Y2VkID0gZGVkdWNlZCA9PiB7XG4gICAgICByZXR1cm4gZGVkdWNlZC5tYXAoZCA9PiB7XG4gICAgICAgIHJldHVybiBkICsgJ3B4JztcbiAgICAgIH0pLmdldE9yKCcnKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFJhd1dpZHRocyA9ICh3YXJlaG91c2UsIHRhYmxlKSA9PiB7XG4gICAgICByZXR1cm4gZ2V0V2lkdGhGcm9tKHdhcmVob3VzZSwgdGFibGUsIGdldFJhd1csIGdldERlZHVjZWQpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0UGVyY2VudGFnZVdpZHRocyA9ICh3YXJlaG91c2UsIHRhYmxlLCB0YWJsZVNpemUpID0+IHtcbiAgICAgIHJldHVybiBnZXRXaWR0aEZyb20od2FyZWhvdXNlLCB0YWJsZSwgZ2V0UGVyY2VudGFnZVdpZHRoLCBkZWR1Y2VkID0+IHtcbiAgICAgICAgcmV0dXJuIGRlZHVjZWQuZm9sZCgoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRhYmxlU2l6ZS5taW5DZWxsV2lkdGgoKTtcbiAgICAgICAgfSwgY2VsbFdpZHRoID0+IHtcbiAgICAgICAgICByZXR1cm4gY2VsbFdpZHRoIC8gdGFibGVTaXplLnBpeGVsV2lkdGgoKSAqIDEwMDtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFBpeGVsV2lkdGhzID0gKHdhcmVob3VzZSwgdGFibGUsIHRhYmxlU2l6ZSkgPT4ge1xuICAgICAgcmV0dXJuIGdldFdpZHRoRnJvbSh3YXJlaG91c2UsIHRhYmxlLCBnZXRQaXhlbFdpZHRoJDEsIGRlZHVjZWQgPT4ge1xuICAgICAgICByZXR1cm4gZGVkdWNlZC5nZXRPclRodW5rKHRhYmxlU2l6ZS5taW5DZWxsV2lkdGgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRIZWlnaHRGcm9tID0gKHdhcmVob3VzZSwgdGFibGUsIGRpcmVjdGlvbiwgZ2V0SGVpZ2h0LCBmYWxsYmFjaykgPT4ge1xuICAgICAgY29uc3Qgcm93cyQxID0gcm93cyh3YXJlaG91c2UpO1xuICAgICAgY29uc3QgYmFja3VwcyA9IFtPcHRpb25hbC5zb21lKGRpcmVjdGlvbi5lZGdlKHRhYmxlKSldLmNvbmNhdChtYXAkMShkaXJlY3Rpb24ucG9zaXRpb25zKHJvd3MkMSwgdGFibGUpLCBwb3MgPT4gcG9zLm1hcChwID0+IHAueSkpKTtcbiAgICAgIHJldHVybiBtYXAkMShyb3dzJDEsIChjZWxsT3B0aW9uLCBjKSA9PiB7XG4gICAgICAgIHJldHVybiBnZXREaW1lbnNpb24oY2VsbE9wdGlvbiwgYywgYmFja3Vwcywgbm90KGhhc1Jvd3NwYW4pLCBnZXRIZWlnaHQsIGZhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0UGl4ZWxIZWlnaHRzID0gKHdhcmVob3VzZSwgdGFibGUsIGRpcmVjdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIGdldEhlaWdodEZyb20od2FyZWhvdXNlLCB0YWJsZSwgZGlyZWN0aW9uLCBnZXRIZWlnaHQsIGRlZHVjZWQgPT4ge1xuICAgICAgICByZXR1cm4gZGVkdWNlZC5nZXRPclRodW5rKG1pbkhlaWdodCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFJhd0hlaWdodHMgPSAod2FyZWhvdXNlLCB0YWJsZSwgZGlyZWN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gZ2V0SGVpZ2h0RnJvbSh3YXJlaG91c2UsIHRhYmxlLCBkaXJlY3Rpb24sIGdldFJhd0gsIGdldERlZHVjZWQpO1xuICAgIH07XG5cbiAgICBjb25zdCB3aWR0aExvb2t1cCA9ICh0YWJsZSwgZ2V0dGVyKSA9PiAoKSA9PiB7XG4gICAgICBpZiAoaW5Cb2R5KHRhYmxlKSkge1xuICAgICAgICByZXR1cm4gZ2V0dGVyKHRhYmxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KGdldFJhdyQyKHRhYmxlLCAnd2lkdGgnKS5nZXRPcignMCcpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG5vbmVTaXplID0gdGFibGUgPT4ge1xuICAgICAgY29uc3QgZ2V0V2lkdGggPSB3aWR0aExvb2t1cCh0YWJsZSwgZ2V0JDkpO1xuICAgICAgY29uc3QgemVybyA9IGNvbnN0YW50KDApO1xuICAgICAgY29uc3QgZ2V0V2lkdGhzID0gKHdhcmVob3VzZSwgdGFibGVTaXplKSA9PiBnZXRQaXhlbFdpZHRocyh3YXJlaG91c2UsIHRhYmxlLCB0YWJsZVNpemUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IGdldFdpZHRoLFxuICAgICAgICBwaXhlbFdpZHRoOiBnZXRXaWR0aCxcbiAgICAgICAgZ2V0V2lkdGhzLFxuICAgICAgICBnZXRDZWxsRGVsdGE6IHplcm8sXG4gICAgICAgIHNpbmdsZUNvbHVtbldpZHRoOiBjb25zdGFudChbMF0pLFxuICAgICAgICBtaW5DZWxsV2lkdGg6IHplcm8sXG4gICAgICAgIHNldEVsZW1lbnRXaWR0aDogbm9vcCxcbiAgICAgICAgYWRqdXN0VGFibGVXaWR0aDogbm9vcCxcbiAgICAgICAgaXNSZWxhdGl2ZTogdHJ1ZSxcbiAgICAgICAgbGFiZWw6ICdub25lJ1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHBlcmNlbnRhZ2VTaXplID0gdGFibGUgPT4ge1xuICAgICAgY29uc3QgZ2V0RmxvYXRXaWR0aCA9IHdpZHRoTG9va3VwKHRhYmxlLCBlbGVtID0+IHBhcnNlRmxvYXQoZ2V0UGVyY2VudFRhYmxlV2lkdGgoZWxlbSkpKTtcbiAgICAgIGNvbnN0IGdldFdpZHRoID0gd2lkdGhMb29rdXAodGFibGUsIGdldCQ5KTtcbiAgICAgIGNvbnN0IGdldENlbGxEZWx0YSA9IGRlbHRhID0+IGRlbHRhIC8gZ2V0V2lkdGgoKSAqIDEwMDtcbiAgICAgIGNvbnN0IHNpbmdsZUNvbHVtbldpZHRoID0gKHcsIF9kZWx0YSkgPT4gWzEwMCAtIHddO1xuICAgICAgY29uc3QgbWluQ2VsbFdpZHRoID0gKCkgPT4gbWluV2lkdGgoKSAvIGdldFdpZHRoKCkgKiAxMDA7XG4gICAgICBjb25zdCBhZGp1c3RUYWJsZVdpZHRoID0gZGVsdGEgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50V2lkdGggPSBnZXRGbG9hdFdpZHRoKCk7XG4gICAgICAgIGNvbnN0IGNoYW5nZSA9IGRlbHRhIC8gMTAwICogY3VycmVudFdpZHRoO1xuICAgICAgICBjb25zdCBuZXdXaWR0aCA9IGN1cnJlbnRXaWR0aCArIGNoYW5nZTtcbiAgICAgICAgc2V0UGVyY2VudGFnZVdpZHRoKHRhYmxlLCBuZXdXaWR0aCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0V2lkdGhzID0gKHdhcmVob3VzZSwgdGFibGVTaXplKSA9PiBnZXRQZXJjZW50YWdlV2lkdGhzKHdhcmVob3VzZSwgdGFibGUsIHRhYmxlU2l6ZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogZ2V0RmxvYXRXaWR0aCxcbiAgICAgICAgcGl4ZWxXaWR0aDogZ2V0V2lkdGgsXG4gICAgICAgIGdldFdpZHRocyxcbiAgICAgICAgZ2V0Q2VsbERlbHRhLFxuICAgICAgICBzaW5nbGVDb2x1bW5XaWR0aCxcbiAgICAgICAgbWluQ2VsbFdpZHRoLFxuICAgICAgICBzZXRFbGVtZW50V2lkdGg6IHNldFBlcmNlbnRhZ2VXaWR0aCxcbiAgICAgICAgYWRqdXN0VGFibGVXaWR0aCxcbiAgICAgICAgaXNSZWxhdGl2ZTogdHJ1ZSxcbiAgICAgICAgbGFiZWw6ICdwZXJjZW50J1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHBpeGVsU2l6ZSA9IHRhYmxlID0+IHtcbiAgICAgIGNvbnN0IGdldFdpZHRoID0gd2lkdGhMb29rdXAodGFibGUsIGdldCQ5KTtcbiAgICAgIGNvbnN0IGdldENlbGxEZWx0YSA9IGlkZW50aXR5O1xuICAgICAgY29uc3Qgc2luZ2xlQ29sdW1uV2lkdGggPSAodywgZGVsdGEpID0+IHtcbiAgICAgICAgY29uc3QgbmV3TmV4dCA9IE1hdGgubWF4KG1pbldpZHRoKCksIHcgKyBkZWx0YSk7XG4gICAgICAgIHJldHVybiBbbmV3TmV4dCAtIHddO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkanVzdFRhYmxlV2lkdGggPSBkZWx0YSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1dpZHRoID0gZ2V0V2lkdGgoKSArIGRlbHRhO1xuICAgICAgICBzZXRQaXhlbFdpZHRoKHRhYmxlLCBuZXdXaWR0aCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0V2lkdGhzID0gKHdhcmVob3VzZSwgdGFibGVTaXplKSA9PiBnZXRQaXhlbFdpZHRocyh3YXJlaG91c2UsIHRhYmxlLCB0YWJsZVNpemUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IGdldFdpZHRoLFxuICAgICAgICBwaXhlbFdpZHRoOiBnZXRXaWR0aCxcbiAgICAgICAgZ2V0V2lkdGhzLFxuICAgICAgICBnZXRDZWxsRGVsdGEsXG4gICAgICAgIHNpbmdsZUNvbHVtbldpZHRoLFxuICAgICAgICBtaW5DZWxsV2lkdGg6IG1pbldpZHRoLFxuICAgICAgICBzZXRFbGVtZW50V2lkdGg6IHNldFBpeGVsV2lkdGgsXG4gICAgICAgIGFkanVzdFRhYmxlV2lkdGgsXG4gICAgICAgIGlzUmVsYXRpdmU6IGZhbHNlLFxuICAgICAgICBsYWJlbDogJ3BpeGVsJ1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNob29zZVNpemUgPSAoZWxlbWVudCwgd2lkdGgpID0+IHtcbiAgICAgIGNvbnN0IHBlcmNlbnRNYXRjaCA9IHBlcmNlbnRhZ2VCYXNlZFNpemVSZWdleCgpLmV4ZWMod2lkdGgpO1xuICAgICAgaWYgKHBlcmNlbnRNYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcGVyY2VudGFnZVNpemUoZWxlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGl4ZWxTaXplKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ2V0VGFibGVTaXplID0gdGFibGUgPT4ge1xuICAgICAgY29uc3Qgd2lkdGggPSBnZXRSYXdXaWR0aCQxKHRhYmxlKTtcbiAgICAgIHJldHVybiB3aWR0aC5mb2xkKCgpID0+IG5vbmVTaXplKHRhYmxlKSwgdyA9PiBjaG9vc2VTaXplKHRhYmxlLCB3KSk7XG4gICAgfTtcbiAgICBjb25zdCBUYWJsZVNpemUgPSB7XG4gICAgICBnZXRUYWJsZVNpemUsXG4gICAgICBwaXhlbFNpemUsXG4gICAgICBwZXJjZW50YWdlU2l6ZSxcbiAgICAgIG5vbmVTaXplXG4gICAgfTtcblxuICAgIGNvbnN0IHN0YXRzU3RydWN0ID0gKG1pblJvdywgbWluQ29sLCBtYXhSb3csIG1heENvbCwgYWxsQ2VsbHMsIHNlbGVjdGVkQ2VsbHMpID0+ICh7XG4gICAgICBtaW5Sb3csXG4gICAgICBtaW5Db2wsXG4gICAgICBtYXhSb3csXG4gICAgICBtYXhDb2wsXG4gICAgICBhbGxDZWxscyxcbiAgICAgIHNlbGVjdGVkQ2VsbHNcbiAgICB9KTtcbiAgICBjb25zdCBmaW5kU2VsZWN0ZWRTdGF0cyA9IChob3VzZSwgaXNTZWxlY3RlZCkgPT4ge1xuICAgICAgY29uc3QgdG90YWxDb2x1bW5zID0gaG91c2UuZ3JpZC5jb2x1bW5zO1xuICAgICAgY29uc3QgdG90YWxSb3dzID0gaG91c2UuZ3JpZC5yb3dzO1xuICAgICAgbGV0IG1pblJvdyA9IHRvdGFsUm93cztcbiAgICAgIGxldCBtaW5Db2wgPSB0b3RhbENvbHVtbnM7XG4gICAgICBsZXQgbWF4Um93ID0gMDtcbiAgICAgIGxldCBtYXhDb2wgPSAwO1xuICAgICAgY29uc3QgYWxsQ2VsbHMgPSBbXTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbHMgPSBbXTtcbiAgICAgIGVhY2gkMShob3VzZS5hY2Nlc3MsIGRldGFpbCA9PiB7XG4gICAgICAgIGFsbENlbGxzLnB1c2goZGV0YWlsKTtcbiAgICAgICAgaWYgKGlzU2VsZWN0ZWQoZGV0YWlsKSkge1xuICAgICAgICAgIHNlbGVjdGVkQ2VsbHMucHVzaChkZXRhaWwpO1xuICAgICAgICAgIGNvbnN0IHN0YXJ0Um93ID0gZGV0YWlsLnJvdztcbiAgICAgICAgICBjb25zdCBlbmRSb3cgPSBzdGFydFJvdyArIGRldGFpbC5yb3dzcGFuIC0gMTtcbiAgICAgICAgICBjb25zdCBzdGFydENvbCA9IGRldGFpbC5jb2x1bW47XG4gICAgICAgICAgY29uc3QgZW5kQ29sID0gc3RhcnRDb2wgKyBkZXRhaWwuY29sc3BhbiAtIDE7XG4gICAgICAgICAgaWYgKHN0YXJ0Um93IDwgbWluUm93KSB7XG4gICAgICAgICAgICBtaW5Sb3cgPSBzdGFydFJvdztcbiAgICAgICAgICB9IGVsc2UgaWYgKGVuZFJvdyA+IG1heFJvdykge1xuICAgICAgICAgICAgbWF4Um93ID0gZW5kUm93O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3RhcnRDb2wgPCBtaW5Db2wpIHtcbiAgICAgICAgICAgIG1pbkNvbCA9IHN0YXJ0Q29sO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZW5kQ29sID4gbWF4Q29sKSB7XG4gICAgICAgICAgICBtYXhDb2wgPSBlbmRDb2w7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBzdGF0c1N0cnVjdChtaW5Sb3csIG1pbkNvbCwgbWF4Um93LCBtYXhDb2wsIGFsbENlbGxzLCBzZWxlY3RlZENlbGxzKTtcbiAgICB9O1xuICAgIGNvbnN0IG1ha2VDZWxsID0gKGxpc3QsIHNlZW5TZWxlY3RlZCwgcm93SW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHJvdyA9IGxpc3Rbcm93SW5kZXhdLmVsZW1lbnQ7XG4gICAgICBjb25zdCB0ZCA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCd0ZCcpO1xuICAgICAgYXBwZW5kJDEodGQsIFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdicicpKTtcbiAgICAgIGNvbnN0IGYgPSBzZWVuU2VsZWN0ZWQgPyBhcHBlbmQkMSA6IHByZXBlbmQ7XG4gICAgICBmKHJvdywgdGQpO1xuICAgIH07XG4gICAgY29uc3QgZmlsbEluR2FwcyA9IChsaXN0LCBob3VzZSwgc3RhdHMsIGlzU2VsZWN0ZWQpID0+IHtcbiAgICAgIGNvbnN0IHJvd3MgPSBmaWx0ZXIkMihsaXN0LCByb3cgPT4gcm93LnNlY3Rpb24gIT09ICdjb2xncm91cCcpO1xuICAgICAgY29uc3QgdG90YWxDb2x1bW5zID0gaG91c2UuZ3JpZC5jb2x1bW5zO1xuICAgICAgY29uc3QgdG90YWxSb3dzID0gaG91c2UuZ3JpZC5yb3dzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b3RhbFJvd3M7IGkrKykge1xuICAgICAgICBsZXQgc2VlblNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdG90YWxDb2x1bW5zOyBqKyspIHtcbiAgICAgICAgICBpZiAoIShpIDwgc3RhdHMubWluUm93IHx8IGkgPiBzdGF0cy5tYXhSb3cgfHwgaiA8IHN0YXRzLm1pbkNvbCB8fCBqID4gc3RhdHMubWF4Q29sKSkge1xuICAgICAgICAgICAgY29uc3QgbmVlZENlbGwgPSBXYXJlaG91c2UuZ2V0QXQoaG91c2UsIGksIGopLmZpbHRlcihpc1NlbGVjdGVkKS5pc05vbmUoKTtcbiAgICAgICAgICAgIGlmIChuZWVkQ2VsbCkge1xuICAgICAgICAgICAgICBtYWtlQ2VsbChyb3dzLCBzZWVuU2VsZWN0ZWQsIGkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VlblNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNsZWFuID0gKHJlcGxpY2EsIHN0YXRzLCBob3VzZSwgd2lkdGhEZWx0YSkgPT4ge1xuICAgICAgZWFjaCQxKGhvdXNlLmNvbHVtbnMsIGNvbCA9PiB7XG4gICAgICAgIGlmIChjb2wuY29sdW1uIDwgc3RhdHMubWluQ29sIHx8IGNvbC5jb2x1bW4gPiBzdGF0cy5tYXhDb2wpIHtcbiAgICAgICAgICByZW1vdmUkNihjb2wuZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW1wdHlSb3dzID0gZmlsdGVyJDIoZmlyc3RMYXllcihyZXBsaWNhLCAndHInKSwgcm93ID0+IHJvdy5kb20uY2hpbGRFbGVtZW50Q291bnQgPT09IDApO1xuICAgICAgZWFjaCQyKGVtcHR5Um93cywgcmVtb3ZlJDYpO1xuICAgICAgaWYgKHN0YXRzLm1pbkNvbCA9PT0gc3RhdHMubWF4Q29sIHx8IHN0YXRzLm1pblJvdyA9PT0gc3RhdHMubWF4Um93KSB7XG4gICAgICAgIGVhY2gkMihmaXJzdExheWVyKHJlcGxpY2EsICd0aCx0ZCcpLCBjZWxsID0+IHtcbiAgICAgICAgICByZW1vdmUkNyhjZWxsLCAncm93c3BhbicpO1xuICAgICAgICAgIHJlbW92ZSQ3KGNlbGwsICdjb2xzcGFuJyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmVtb3ZlJDcocmVwbGljYSwgTE9DS0VEX0NPTF9BVFRSKTtcbiAgICAgIHJlbW92ZSQ3KHJlcGxpY2EsICdkYXRhLXNub29rZXItY29sLXNlcmllcycpO1xuICAgICAgY29uc3QgdGFibGVTaXplID0gVGFibGVTaXplLmdldFRhYmxlU2l6ZShyZXBsaWNhKTtcbiAgICAgIHRhYmxlU2l6ZS5hZGp1c3RUYWJsZVdpZHRoKHdpZHRoRGVsdGEpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0VGFibGVXaWR0aERlbHRhID0gKHRhYmxlLCB3YXJlaG91c2UsIHRhYmxlU2l6ZSwgc3RhdHMpID0+IHtcbiAgICAgIGlmIChzdGF0cy5taW5Db2wgPT09IDAgJiYgd2FyZWhvdXNlLmdyaWQuY29sdW1ucyA9PT0gc3RhdHMubWF4Q29sICsgMSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbFdpZHRocyA9IGdldFBpeGVsV2lkdGhzKHdhcmVob3VzZSwgdGFibGUsIHRhYmxlU2l6ZSk7XG4gICAgICBjb25zdCBhbGxDb2xzV2lkdGggPSBmb2xkbChjb2xXaWR0aHMsIChhY2MsIHdpZHRoKSA9PiBhY2MgKyB3aWR0aCwgMCk7XG4gICAgICBjb25zdCBzZWxlY3RlZENvbHNXaWR0aCA9IGZvbGRsKGNvbFdpZHRocy5zbGljZShzdGF0cy5taW5Db2wsIHN0YXRzLm1heENvbCArIDEpLCAoYWNjLCB3aWR0aCkgPT4gYWNjICsgd2lkdGgsIDApO1xuICAgICAgY29uc3QgbmV3V2lkdGggPSBzZWxlY3RlZENvbHNXaWR0aCAvIGFsbENvbHNXaWR0aCAqIHRhYmxlU2l6ZS5waXhlbFdpZHRoKCk7XG4gICAgICBjb25zdCBkZWx0YSA9IG5ld1dpZHRoIC0gdGFibGVTaXplLnBpeGVsV2lkdGgoKTtcbiAgICAgIHJldHVybiB0YWJsZVNpemUuZ2V0Q2VsbERlbHRhKGRlbHRhKTtcbiAgICB9O1xuICAgIGNvbnN0IGV4dHJhY3QkMSA9ICh0YWJsZSwgc2VsZWN0ZWRTZWxlY3RvcikgPT4ge1xuICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IGRldGFpbCA9PiBpcyQyKGRldGFpbC5lbGVtZW50LCBzZWxlY3RlZFNlbGVjdG9yKTtcbiAgICAgIGNvbnN0IHJlcGxpY2EgPSBkZWVwKHRhYmxlKTtcbiAgICAgIGNvbnN0IGxpc3QgPSBmcm9tVGFibGUkMShyZXBsaWNhKTtcbiAgICAgIGNvbnN0IHRhYmxlU2l6ZSA9IFRhYmxlU2l6ZS5nZXRUYWJsZVNpemUodGFibGUpO1xuICAgICAgY29uc3QgcmVwbGljYUhvdXNlID0gV2FyZWhvdXNlLmdlbmVyYXRlKGxpc3QpO1xuICAgICAgY29uc3QgcmVwbGljYVN0YXRzID0gZmluZFNlbGVjdGVkU3RhdHMocmVwbGljYUhvdXNlLCBpc1NlbGVjdGVkKTtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gJ3RoOm5vdCgnICsgc2VsZWN0ZWRTZWxlY3RvciArICcpJyArICcsdGQ6bm90KCcgKyBzZWxlY3RlZFNlbGVjdG9yICsgJyknO1xuICAgICAgY29uc3QgdW5zZWxlY3RlZENlbGxzID0gZmlsdGVyRmlyc3RMYXllcihyZXBsaWNhLCAndGgsdGQnLCBjZWxsID0+IGlzJDIoY2VsbCwgc2VsZWN0b3IpKTtcbiAgICAgIGVhY2gkMih1bnNlbGVjdGVkQ2VsbHMsIHJlbW92ZSQ2KTtcbiAgICAgIGZpbGxJbkdhcHMobGlzdCwgcmVwbGljYUhvdXNlLCByZXBsaWNhU3RhdHMsIGlzU2VsZWN0ZWQpO1xuICAgICAgY29uc3QgaG91c2UgPSBXYXJlaG91c2UuZnJvbVRhYmxlKHRhYmxlKTtcbiAgICAgIGNvbnN0IHdpZHRoRGVsdGEgPSBnZXRUYWJsZVdpZHRoRGVsdGEodGFibGUsIGhvdXNlLCB0YWJsZVNpemUsIHJlcGxpY2FTdGF0cyk7XG4gICAgICBjbGVhbihyZXBsaWNhLCByZXBsaWNhU3RhdHMsIHJlcGxpY2FIb3VzZSwgd2lkdGhEZWx0YSk7XG4gICAgICByZXR1cm4gcmVwbGljYTtcbiAgICB9O1xuXG4gICAgY29uc3QgbmJzcCA9ICdcXHhBMCc7XG5cbiAgICBjb25zdCBOb2RlVmFsdWUgPSAoaXMsIG5hbWUpID0+IHtcbiAgICAgIGNvbnN0IGdldCA9IGVsZW1lbnQgPT4ge1xuICAgICAgICBpZiAoIWlzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBnZXQgJyArIG5hbWUgKyAnIHZhbHVlIG9mIGEgJyArIG5hbWUgKyAnIG5vZGUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0T3B0aW9uKGVsZW1lbnQpLmdldE9yKCcnKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRPcHRpb24gPSBlbGVtZW50ID0+IGlzKGVsZW1lbnQpID8gT3B0aW9uYWwuZnJvbShlbGVtZW50LmRvbS5ub2RlVmFsdWUpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgY29uc3Qgc2V0ID0gKGVsZW1lbnQsIHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICghaXMoZWxlbWVudCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBvbmx5IHNldCByYXcgJyArIG5hbWUgKyAnIHZhbHVlIG9mIGEgJyArIG5hbWUgKyAnIG5vZGUnKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50LmRvbS5ub2RlVmFsdWUgPSB2YWx1ZTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBnZXQsXG4gICAgICAgIGdldE9wdGlvbixcbiAgICAgICAgc2V0XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBhcGkgPSBOb2RlVmFsdWUoaXNUZXh0LCAndGV4dCcpO1xuICAgIGNvbnN0IGdldCQ2ID0gZWxlbWVudCA9PiBhcGkuZ2V0KGVsZW1lbnQpO1xuICAgIGNvbnN0IGdldE9wdGlvbiA9IGVsZW1lbnQgPT4gYXBpLmdldE9wdGlvbihlbGVtZW50KTtcbiAgICBjb25zdCBzZXQgPSAoZWxlbWVudCwgdmFsdWUpID0+IGFwaS5zZXQoZWxlbWVudCwgdmFsdWUpO1xuXG4gICAgY29uc3QgZ2V0RW5kID0gZWxlbWVudCA9PiBuYW1lKGVsZW1lbnQpID09PSAnaW1nJyA/IDEgOiBnZXRPcHRpb24oZWxlbWVudCkuZm9sZCgoKSA9PiBjaGlsZHJlbiQyKGVsZW1lbnQpLmxlbmd0aCwgdiA9PiB2Lmxlbmd0aCk7XG4gICAgY29uc3QgaXNUZXh0Tm9kZVdpdGhDdXJzb3JQb3NpdGlvbiA9IGVsID0+IGdldE9wdGlvbihlbCkuZmlsdGVyKHRleHQgPT4gdGV4dC50cmltKCkubGVuZ3RoICE9PSAwIHx8IHRleHQuaW5kZXhPZihuYnNwKSA+IC0xKS5pc1NvbWUoKTtcbiAgICBjb25zdCBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlID0gZWxlbSA9PiBpc0hUTUxFbGVtZW50KGVsZW0pICYmIGdldCRiKGVsZW0sICdjb250ZW50ZWRpdGFibGUnKSA9PT0gJ2ZhbHNlJztcbiAgICBjb25zdCBlbGVtZW50c1dpdGhDdXJzb3JQb3NpdGlvbiA9IFtcbiAgICAgICdpbWcnLFxuICAgICAgJ2JyJ1xuICAgIF07XG4gICAgY29uc3QgaXNDdXJzb3JQb3NpdGlvbiA9IGVsZW0gPT4ge1xuICAgICAgY29uc3QgaGFzQ3Vyc29yUG9zaXRpb24gPSBpc1RleHROb2RlV2l0aEN1cnNvclBvc2l0aW9uKGVsZW0pO1xuICAgICAgcmV0dXJuIGhhc0N1cnNvclBvc2l0aW9uIHx8IGNvbnRhaW5zJDIoZWxlbWVudHNXaXRoQ3Vyc29yUG9zaXRpb24sIG5hbWUoZWxlbSkpIHx8IGlzQ29udGVudEVkaXRhYmxlRmFsc2UoZWxlbSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZpcnN0ID0gZWxlbWVudCA9PiBkZXNjZW5kYW50JDEoZWxlbWVudCwgaXNDdXJzb3JQb3NpdGlvbik7XG4gICAgY29uc3QgbGFzdCQxID0gZWxlbWVudCA9PiBkZXNjZW5kYW50UnRsKGVsZW1lbnQsIGlzQ3Vyc29yUG9zaXRpb24pO1xuICAgIGNvbnN0IGRlc2NlbmRhbnRSdGwgPSAoc2NvcGUsIHByZWRpY2F0ZSkgPT4ge1xuICAgICAgY29uc3QgZGVzY2VuZCA9IGVsZW1lbnQgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGNoaWxkcmVuJDIoZWxlbWVudCk7XG4gICAgICAgIGZvciAobGV0IGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICAgICAgaWYgKHByZWRpY2F0ZShjaGlsZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGNoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVzID0gZGVzY2VuZChjaGlsZCk7XG4gICAgICAgICAgaWYgKHJlcy5pc1NvbWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gZGVzY2VuZChzY29wZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHRyYW5zZmVyYWJsZUF0dHJpYnV0ZXMgPSB7XG4gICAgICBzY29wZTogW1xuICAgICAgICAncm93JyxcbiAgICAgICAgJ2NvbCdcbiAgICAgIF1cbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUNlbGwgPSBkb2MgPT4gKCkgPT4ge1xuICAgICAgY29uc3QgdGQgPSBTdWdhckVsZW1lbnQuZnJvbVRhZygndGQnLCBkb2MuZG9tKTtcbiAgICAgIGFwcGVuZCQxKHRkLCBTdWdhckVsZW1lbnQuZnJvbVRhZygnYnInLCBkb2MuZG9tKSk7XG4gICAgICByZXR1cm4gdGQ7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVDb2wgPSBkb2MgPT4gKCkgPT4ge1xuICAgICAgcmV0dXJuIFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdjb2wnLCBkb2MuZG9tKTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUNvbGdyb3VwID0gZG9jID0+ICgpID0+IHtcbiAgICAgIHJldHVybiBTdWdhckVsZW1lbnQuZnJvbVRhZygnY29sZ3JvdXAnLCBkb2MuZG9tKTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZVJvdyQxID0gZG9jID0+ICgpID0+IHtcbiAgICAgIHJldHVybiBTdWdhckVsZW1lbnQuZnJvbVRhZygndHInLCBkb2MuZG9tKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlcGxhY2UkMSA9IChjZWxsLCB0YWcsIGF0dHJzKSA9PiB7XG4gICAgICBjb25zdCByZXBsaWNhID0gY29weSQyKGNlbGwsIHRhZyk7XG4gICAgICBlYWNoJDEoYXR0cnMsICh2LCBrKSA9PiB7XG4gICAgICAgIGlmICh2ID09PSBudWxsKSB7XG4gICAgICAgICAgcmVtb3ZlJDcocmVwbGljYSwgayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0JDIocmVwbGljYSwgaywgdik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlcGxpY2E7XG4gICAgfTtcbiAgICBjb25zdCBwYXN0ZVJlcGxhY2UgPSBjZWxsID0+IHtcbiAgICAgIHJldHVybiBjZWxsO1xuICAgIH07XG4gICAgY29uc3QgY2xvbmVGb3JtYXRzID0gKG9sZENlbGwsIG5ld0NlbGwsIGZvcm1hdHMpID0+IHtcbiAgICAgIGNvbnN0IGZpcnN0JDEgPSBmaXJzdChvbGRDZWxsKTtcbiAgICAgIHJldHVybiBmaXJzdCQxLm1hcChmaXJzdFRleHQgPT4ge1xuICAgICAgICBjb25zdCBmb3JtYXRTZWxlY3RvciA9IGZvcm1hdHMuam9pbignLCcpO1xuICAgICAgICBjb25zdCBwYXJlbnRzID0gYW5jZXN0b3JzJDMoZmlyc3RUZXh0LCBmb3JtYXRTZWxlY3RvciwgZWxlbWVudCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVxJDEoZWxlbWVudCwgb2xkQ2VsbCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZm9sZHIocGFyZW50cywgKGxhc3QsIHBhcmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNsb25lZEZvcm1hdCA9IHNoYWxsb3cocGFyZW50KTtcbiAgICAgICAgICBhcHBlbmQkMShsYXN0LCBjbG9uZWRGb3JtYXQpO1xuICAgICAgICAgIHJldHVybiBjbG9uZWRGb3JtYXQ7XG4gICAgICAgIH0sIG5ld0NlbGwpO1xuICAgICAgfSkuZ2V0T3IobmV3Q2VsbCk7XG4gICAgfTtcbiAgICBjb25zdCBjbG9uZUFwcHJvcHJpYXRlQXR0cmlidXRlcyA9IChvcmlnaW5hbCwgY2xvbmUpID0+IHtcbiAgICAgIGVhY2gkMSh0cmFuc2ZlcmFibGVBdHRyaWJ1dGVzLCAodmFsaWRBdHRyaWJ1dGVzLCBhdHRyaWJ1dGVOYW1lKSA9PiBnZXRPcHQob3JpZ2luYWwsIGF0dHJpYnV0ZU5hbWUpLmZpbHRlcihhdHRyaWJ1dGUgPT4gY29udGFpbnMkMih2YWxpZEF0dHJpYnV0ZXMsIGF0dHJpYnV0ZSkpLmVhY2goYXR0cmlidXRlID0+IHNldCQyKGNsb25lLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGUpKSk7XG4gICAgfTtcbiAgICBjb25zdCBjZWxsT3BlcmF0aW9ucyA9IChtdXRhdGUsIGRvYywgZm9ybWF0c1RvQ2xvbmUpID0+IHtcbiAgICAgIGNvbnN0IGNsb25lQ3NzID0gKHByZXYsIGNsb25lKSA9PiB7XG4gICAgICAgIGNvcHkkMShwcmV2LmVsZW1lbnQsIGNsb25lKTtcbiAgICAgICAgcmVtb3ZlJDUoY2xvbmUsICdoZWlnaHQnKTtcbiAgICAgICAgaWYgKHByZXYuY29sc3BhbiAhPT0gMSkge1xuICAgICAgICAgIHJlbW92ZSQ1KGNsb25lLCAnd2lkdGgnKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG5ld0NlbGwgPSBwcmV2ID0+IHtcbiAgICAgICAgY29uc3QgdGQgPSBTdWdhckVsZW1lbnQuZnJvbVRhZyhuYW1lKHByZXYuZWxlbWVudCksIGRvYy5kb20pO1xuICAgICAgICBjb25zdCBmb3JtYXRzID0gZm9ybWF0c1RvQ2xvbmUuZ2V0T3IoW1xuICAgICAgICAgICdzdHJvbmcnLFxuICAgICAgICAgICdlbScsXG4gICAgICAgICAgJ2InLFxuICAgICAgICAgICdpJyxcbiAgICAgICAgICAnc3BhbicsXG4gICAgICAgICAgJ2ZvbnQnLFxuICAgICAgICAgICdoMScsXG4gICAgICAgICAgJ2gyJyxcbiAgICAgICAgICAnaDMnLFxuICAgICAgICAgICdoNCcsXG4gICAgICAgICAgJ2g1JyxcbiAgICAgICAgICAnaDYnLFxuICAgICAgICAgICdwJyxcbiAgICAgICAgICAnZGl2J1xuICAgICAgICBdKTtcbiAgICAgICAgY29uc3QgbGFzdE5vZGUgPSBmb3JtYXRzLmxlbmd0aCA+IDAgPyBjbG9uZUZvcm1hdHMocHJldi5lbGVtZW50LCB0ZCwgZm9ybWF0cykgOiB0ZDtcbiAgICAgICAgYXBwZW5kJDEobGFzdE5vZGUsIFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdicicpKTtcbiAgICAgICAgY2xvbmVDc3MocHJldiwgdGQpO1xuICAgICAgICBjbG9uZUFwcHJvcHJpYXRlQXR0cmlidXRlcyhwcmV2LmVsZW1lbnQsIHRkKTtcbiAgICAgICAgbXV0YXRlKHByZXYuZWxlbWVudCwgdGQpO1xuICAgICAgICByZXR1cm4gdGQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgbmV3Q29sID0gcHJldiA9PiB7XG4gICAgICAgIGNvbnN0IGNvbCA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKG5hbWUocHJldi5lbGVtZW50KSwgZG9jLmRvbSk7XG4gICAgICAgIGNsb25lQ3NzKHByZXYsIGNvbCk7XG4gICAgICAgIG11dGF0ZShwcmV2LmVsZW1lbnQsIGNvbCk7XG4gICAgICAgIHJldHVybiBjb2w7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sOiBuZXdDb2wsXG4gICAgICAgIGNvbGdyb3VwOiBjcmVhdGVDb2xncm91cChkb2MpLFxuICAgICAgICByb3c6IGNyZWF0ZVJvdyQxKGRvYyksXG4gICAgICAgIGNlbGw6IG5ld0NlbGwsXG4gICAgICAgIHJlcGxhY2U6IHJlcGxhY2UkMSxcbiAgICAgICAgY29sR2FwOiBjcmVhdGVDb2woZG9jKSxcbiAgICAgICAgZ2FwOiBjcmVhdGVDZWxsKGRvYylcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBwYXN0ZSQxID0gZG9jID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbDogY3JlYXRlQ29sKGRvYyksXG4gICAgICAgIGNvbGdyb3VwOiBjcmVhdGVDb2xncm91cChkb2MpLFxuICAgICAgICByb3c6IGNyZWF0ZVJvdyQxKGRvYyksXG4gICAgICAgIGNlbGw6IGNyZWF0ZUNlbGwoZG9jKSxcbiAgICAgICAgcmVwbGFjZTogcGFzdGVSZXBsYWNlLFxuICAgICAgICBjb2xHYXA6IGNyZWF0ZUNvbChkb2MpLFxuICAgICAgICBnYXA6IGNyZWF0ZUNlbGwoZG9jKVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZnJvbUh0bWwgPSAoaHRtbCwgc2NvcGUpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IHNjb3BlIHx8IGRvY3VtZW50O1xuICAgICAgY29uc3QgZGl2ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZGl2LmlubmVySFRNTCA9IGh0bWw7XG4gICAgICByZXR1cm4gY2hpbGRyZW4kMihTdWdhckVsZW1lbnQuZnJvbURvbShkaXYpKTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21Eb20gPSBub2RlcyA9PiBtYXAkMShub2RlcywgU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuXG4gICAgY29uc3Qgb3B0aW9uID0gbmFtZSA9PiBlZGl0b3IgPT4gZWRpdG9yLm9wdGlvbnMuZ2V0KG5hbWUpO1xuICAgIGNvbnN0IGRlZmF1bHRXaWR0aCA9ICcxMDAlJztcbiAgICBjb25zdCBnZXRQaXhlbEZvcmNlZFdpZHRoID0gZWRpdG9yID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBwYXJlbnRCbG9jayA9IChfYSA9IGRvbS5nZXRQYXJlbnQoZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCgpLCBkb20uaXNCbG9jaykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGVkaXRvci5nZXRCb2R5KCk7XG4gICAgICByZXR1cm4gZ2V0SW5uZXIoU3VnYXJFbGVtZW50LmZyb21Eb20ocGFyZW50QmxvY2spKSArICdweCc7XG4gICAgfTtcbiAgICBjb25zdCBkZXRlcm1pbmVEZWZhdWx0VGFibGVTdHlsZXMgPSAoZWRpdG9yLCBkZWZhdWx0U3R5bGVzKSA9PiB7XG4gICAgICBpZiAoaXNUYWJsZVJlc3BvbnNpdmVGb3JjZWQoZWRpdG9yKSB8fCAhc2hvdWxkU3R5bGVXaXRoQ3NzKGVkaXRvcikpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRTdHlsZXM7XG4gICAgICB9IGVsc2UgaWYgKGlzVGFibGVQaXhlbHNGb3JjZWQoZWRpdG9yKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmRlZmF1bHRTdHlsZXMsXG4gICAgICAgICAgd2lkdGg6IGdldFBpeGVsRm9yY2VkV2lkdGgoZWRpdG9yKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5kZWZhdWx0U3R5bGVzLFxuICAgICAgICAgIHdpZHRoOiBkZWZhdWx0V2lkdGhcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGRldGVybWluZURlZmF1bHRUYWJsZUF0dHJpYnV0ZXMgPSAoZWRpdG9yLCBkZWZhdWx0QXR0cmlidXRlcykgPT4ge1xuICAgICAgaWYgKGlzVGFibGVSZXNwb25zaXZlRm9yY2VkKGVkaXRvcikgfHwgc2hvdWxkU3R5bGVXaXRoQ3NzKGVkaXRvcikpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRBdHRyaWJ1dGVzO1xuICAgICAgfSBlbHNlIGlmIChpc1RhYmxlUGl4ZWxzRm9yY2VkKGVkaXRvcikpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5kZWZhdWx0QXR0cmlidXRlcyxcbiAgICAgICAgICB3aWR0aDogZ2V0UGl4ZWxGb3JjZWRXaWR0aChlZGl0b3IpXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmRlZmF1bHRBdHRyaWJ1dGVzLFxuICAgICAgICAgIHdpZHRoOiBkZWZhdWx0V2lkdGhcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyT3B0aW9uID0gZWRpdG9yLm9wdGlvbnMucmVnaXN0ZXI7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGFibGVfY2xvbmVfZWxlbWVudHMnLCB7IHByb2Nlc3NvcjogJ3N0cmluZ1tdJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd0YWJsZV91c2VfY29sZ3JvdXBzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGFibGVfaGVhZGVyX3R5cGUnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogdmFsdWUgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbGlkID0gY29udGFpbnMkMihbXG4gICAgICAgICAgICAnc2VjdGlvbicsXG4gICAgICAgICAgICAnY2VsbHMnLFxuICAgICAgICAgICAgJ3NlY3Rpb25DZWxscycsXG4gICAgICAgICAgICAnYXV0bydcbiAgICAgICAgICBdLCB2YWx1ZSk7XG4gICAgICAgICAgcmV0dXJuIHZhbGlkID8ge1xuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB2YWxpZFxuICAgICAgICAgIH0gOiB7XG4gICAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiAnTXVzdCBiZSBvbmUgb2Y6IHNlY3Rpb24sIGNlbGxzLCBzZWN0aW9uQ2VsbHMgb3IgYXV0by4nXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDogJ3NlY3Rpb24nXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd0YWJsZV9zaXppbmdfbW9kZScsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJ2F1dG8nXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd0YWJsZV9kZWZhdWx0X2F0dHJpYnV0ZXMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ29iamVjdCcsXG4gICAgICAgIGRlZmF1bHQ6IHsgYm9yZGVyOiAnMScgfVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGFibGVfZGVmYXVsdF9zdHlsZXMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ29iamVjdCcsXG4gICAgICAgIGRlZmF1bHQ6IHsgJ2JvcmRlci1jb2xsYXBzZSc6ICdjb2xsYXBzZScgfVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGFibGVfY29sdW1uX3Jlc2l6aW5nJywge1xuICAgICAgICBwcm9jZXNzb3I6IHZhbHVlID0+IHtcbiAgICAgICAgICBjb25zdCB2YWxpZCA9IGNvbnRhaW5zJDIoW1xuICAgICAgICAgICAgJ3ByZXNlcnZldGFibGUnLFxuICAgICAgICAgICAgJ3Jlc2l6ZXRhYmxlJ1xuICAgICAgICAgIF0sIHZhbHVlKTtcbiAgICAgICAgICByZXR1cm4gdmFsaWQgPyB7XG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHZhbGlkXG4gICAgICAgICAgfSA6IHtcbiAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdNdXN0IGJlIHByZXNlcnZldGFibGUsIG9yIHJlc2l6ZXRhYmxlLidcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiAncHJlc2VydmV0YWJsZSdcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3RhYmxlX3Jlc2l6ZV9iYXJzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGFibGVfc3R5bGVfYnlfY3NzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGFibGVfbWVyZ2VfY29udGVudF9vbl9wYXN0ZScsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0VGFibGVDbG9uZUVsZW1lbnRzID0gZWRpdG9yID0+IHtcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKGVkaXRvci5vcHRpb25zLmdldCgndGFibGVfY2xvbmVfZWxlbWVudHMnKSk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNUYWJsZU9iamVjdFJlc2l6aW5nID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IG9iamVjdFJlc2l6aW5nID0gZWRpdG9yLm9wdGlvbnMuZ2V0KCdvYmplY3RfcmVzaXppbmcnKTtcbiAgICAgIHJldHVybiBjb250YWlucyQyKG9iamVjdFJlc2l6aW5nLnNwbGl0KCcsJyksICd0YWJsZScpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0VGFibGVIZWFkZXJUeXBlID0gb3B0aW9uKCd0YWJsZV9oZWFkZXJfdHlwZScpO1xuICAgIGNvbnN0IGdldFRhYmxlQ29sdW1uUmVzaXppbmdCZWhhdmlvdXIgPSBvcHRpb24oJ3RhYmxlX2NvbHVtbl9yZXNpemluZycpO1xuICAgIGNvbnN0IGlzUHJlc2VydmVUYWJsZUNvbHVtblJlc2l6aW5nID0gZWRpdG9yID0+IGdldFRhYmxlQ29sdW1uUmVzaXppbmdCZWhhdmlvdXIoZWRpdG9yKSA9PT0gJ3ByZXNlcnZldGFibGUnO1xuICAgIGNvbnN0IGlzUmVzaXplVGFibGVDb2x1bW5SZXNpemluZyA9IGVkaXRvciA9PiBnZXRUYWJsZUNvbHVtblJlc2l6aW5nQmVoYXZpb3VyKGVkaXRvcikgPT09ICdyZXNpemV0YWJsZSc7XG4gICAgY29uc3QgZ2V0VGFibGVTaXppbmdNb2RlID0gb3B0aW9uKCd0YWJsZV9zaXppbmdfbW9kZScpO1xuICAgIGNvbnN0IGlzVGFibGVQZXJjZW50YWdlc0ZvcmNlZCA9IGVkaXRvciA9PiBnZXRUYWJsZVNpemluZ01vZGUoZWRpdG9yKSA9PT0gJ3JlbGF0aXZlJztcbiAgICBjb25zdCBpc1RhYmxlUGl4ZWxzRm9yY2VkID0gZWRpdG9yID0+IGdldFRhYmxlU2l6aW5nTW9kZShlZGl0b3IpID09PSAnZml4ZWQnO1xuICAgIGNvbnN0IGlzVGFibGVSZXNwb25zaXZlRm9yY2VkID0gZWRpdG9yID0+IGdldFRhYmxlU2l6aW5nTW9kZShlZGl0b3IpID09PSAncmVzcG9uc2l2ZSc7XG4gICAgY29uc3QgaGFzVGFibGVSZXNpemVCYXJzID0gb3B0aW9uKCd0YWJsZV9yZXNpemVfYmFycycpO1xuICAgIGNvbnN0IHNob3VsZFN0eWxlV2l0aENzcyA9IG9wdGlvbigndGFibGVfc3R5bGVfYnlfY3NzJyk7XG4gICAgY29uc3Qgc2hvdWxkTWVyZ2VDb250ZW50T25QYXN0ZSA9IG9wdGlvbigndGFibGVfbWVyZ2VfY29udGVudF9vbl9wYXN0ZScpO1xuICAgIGNvbnN0IGdldFRhYmxlRGVmYXVsdEF0dHJpYnV0ZXMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IGVkaXRvci5vcHRpb25zO1xuICAgICAgY29uc3QgZGVmYXVsdEF0dHJpYnV0ZXMgPSBvcHRpb25zLmdldCgndGFibGVfZGVmYXVsdF9hdHRyaWJ1dGVzJyk7XG4gICAgICByZXR1cm4gb3B0aW9ucy5pc1NldCgndGFibGVfZGVmYXVsdF9hdHRyaWJ1dGVzJykgPyBkZWZhdWx0QXR0cmlidXRlcyA6IGRldGVybWluZURlZmF1bHRUYWJsZUF0dHJpYnV0ZXMoZWRpdG9yLCBkZWZhdWx0QXR0cmlidXRlcyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRUYWJsZURlZmF1bHRTdHlsZXMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IGVkaXRvci5vcHRpb25zO1xuICAgICAgY29uc3QgZGVmYXVsdFN0eWxlcyA9IG9wdGlvbnMuZ2V0KCd0YWJsZV9kZWZhdWx0X3N0eWxlcycpO1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaXNTZXQoJ3RhYmxlX2RlZmF1bHRfc3R5bGVzJykgPyBkZWZhdWx0U3R5bGVzIDogZGV0ZXJtaW5lRGVmYXVsdFRhYmxlU3R5bGVzKGVkaXRvciwgZGVmYXVsdFN0eWxlcyk7XG4gICAgfTtcbiAgICBjb25zdCB0YWJsZVVzZUNvbHVtbkdyb3VwID0gb3B0aW9uKCd0YWJsZV91c2VfY29sZ3JvdXBzJyk7XG5cbiAgICBjb25zdCBjbG9zZXN0ID0gdGFyZ2V0ID0+IGNsb3Nlc3QkMSh0YXJnZXQsICdbY29udGVudGVkaXRhYmxlXScpO1xuICAgIGNvbnN0IGlzRWRpdGFibGUkMSA9IChlbGVtZW50LCBhc3N1bWVFZGl0YWJsZSA9IGZhbHNlKSA9PiB7XG4gICAgICBpZiAoaW5Cb2R5KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmRvbS5pc0NvbnRlbnRFZGl0YWJsZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjbG9zZXN0KGVsZW1lbnQpLmZvbGQoY29uc3RhbnQoYXNzdW1lRWRpdGFibGUpLCBlZGl0YWJsZSA9PiBnZXRSYXcoZWRpdGFibGUpID09PSAndHJ1ZScpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ2V0UmF3ID0gZWxlbWVudCA9PiBlbGVtZW50LmRvbS5jb250ZW50RWRpdGFibGU7XG5cbiAgICBjb25zdCBnZXRCb2R5ID0gZWRpdG9yID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpO1xuICAgIGNvbnN0IGdldElzUm9vdCA9IGVkaXRvciA9PiBlbGVtZW50ID0+IGVxJDEoZWxlbWVudCwgZ2V0Qm9keShlZGl0b3IpKTtcbiAgICBjb25zdCByZW1vdmVEYXRhU3R5bGUgPSB0YWJsZSA9PiB7XG4gICAgICByZW1vdmUkNyh0YWJsZSwgJ2RhdGEtbWNlLXN0eWxlJyk7XG4gICAgICBjb25zdCByZW1vdmVTdHlsZUF0dHJpYnV0ZSA9IGVsZW1lbnQgPT4gcmVtb3ZlJDcoZWxlbWVudCwgJ2RhdGEtbWNlLXN0eWxlJyk7XG4gICAgICBlYWNoJDIoY2VsbHMkMSh0YWJsZSksIHJlbW92ZVN0eWxlQXR0cmlidXRlKTtcbiAgICAgIGVhY2gkMihjb2x1bW5zJDEodGFibGUpLCByZW1vdmVTdHlsZUF0dHJpYnV0ZSk7XG4gICAgICBlYWNoJDIocm93cyQxKHRhYmxlKSwgcmVtb3ZlU3R5bGVBdHRyaWJ1dGUpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0U2VsZWN0aW9uU3RhcnQgPSBlZGl0b3IgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCgpKTtcbiAgICBjb25zdCBnZXRQaXhlbFdpZHRoID0gZWxtID0+IGVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICBjb25zdCBnZXRQaXhlbEhlaWdodCA9IGVsbSA9PiBlbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgIGNvbnN0IGdldFJhd1dpZHRoID0gKGVkaXRvciwgZWxtKSA9PiB7XG4gICAgICBjb25zdCByYXcgPSBlZGl0b3IuZG9tLmdldFN0eWxlKGVsbSwgJ3dpZHRoJykgfHwgZWRpdG9yLmRvbS5nZXRBdHRyaWIoZWxtLCAnd2lkdGgnKTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKHJhdykuZmlsdGVyKGlzTm90RW1wdHkpO1xuICAgIH07XG4gICAgY29uc3QgaXNQZXJjZW50YWdlJDEgPSB2YWx1ZSA9PiAvXihcXGQrKFxcLlxcZCspPyklJC8udGVzdCh2YWx1ZSk7XG4gICAgY29uc3QgaXNQaXhlbCA9IHZhbHVlID0+IC9eKFxcZCsoXFwuXFxkKyk/KXB4JC8udGVzdCh2YWx1ZSk7XG4gICAgY29uc3QgaXNJbkVkaXRhYmxlQ29udGV4dCQxID0gY2VsbCA9PiBjbG9zZXN0JDIoY2VsbCwgaXNUYWcoJ3RhYmxlJykpLmV4aXN0cyhpc0VkaXRhYmxlJDEpO1xuXG4gICAgY29uc3QgaW5TZWxlY3Rpb24gPSAoYm91bmRzLCBkZXRhaWwpID0+IHtcbiAgICAgIGNvbnN0IGxlZnRFZGdlID0gZGV0YWlsLmNvbHVtbjtcbiAgICAgIGNvbnN0IHJpZ2h0RWRnZSA9IGRldGFpbC5jb2x1bW4gKyBkZXRhaWwuY29sc3BhbiAtIDE7XG4gICAgICBjb25zdCB0b3BFZGdlID0gZGV0YWlsLnJvdztcbiAgICAgIGNvbnN0IGJvdHRvbUVkZ2UgPSBkZXRhaWwucm93ICsgZGV0YWlsLnJvd3NwYW4gLSAxO1xuICAgICAgcmV0dXJuIGxlZnRFZGdlIDw9IGJvdW5kcy5maW5pc2hDb2wgJiYgcmlnaHRFZGdlID49IGJvdW5kcy5zdGFydENvbCAmJiAodG9wRWRnZSA8PSBib3VuZHMuZmluaXNoUm93ICYmIGJvdHRvbUVkZ2UgPj0gYm91bmRzLnN0YXJ0Um93KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzV2l0aGluID0gKGJvdW5kcywgZGV0YWlsKSA9PiB7XG4gICAgICByZXR1cm4gZGV0YWlsLmNvbHVtbiA+PSBib3VuZHMuc3RhcnRDb2wgJiYgZGV0YWlsLmNvbHVtbiArIGRldGFpbC5jb2xzcGFuIC0gMSA8PSBib3VuZHMuZmluaXNoQ29sICYmIGRldGFpbC5yb3cgPj0gYm91bmRzLnN0YXJ0Um93ICYmIGRldGFpbC5yb3cgKyBkZXRhaWwucm93c3BhbiAtIDEgPD0gYm91bmRzLmZpbmlzaFJvdztcbiAgICB9O1xuICAgIGNvbnN0IGlzUmVjdGFuZ3VsYXIgPSAod2FyZWhvdXNlLCBib3VuZHMpID0+IHtcbiAgICAgIGxldCBpc1JlY3QgPSB0cnVlO1xuICAgICAgY29uc3QgZGV0YWlsSXNXaXRoaW4gPSBjdXJyeShpc1dpdGhpbiwgYm91bmRzKTtcbiAgICAgIGZvciAobGV0IGkgPSBib3VuZHMuc3RhcnRSb3c7IGkgPD0gYm91bmRzLmZpbmlzaFJvdzsgaSsrKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBib3VuZHMuc3RhcnRDb2w7IGogPD0gYm91bmRzLmZpbmlzaENvbDsgaisrKSB7XG4gICAgICAgICAgaXNSZWN0ID0gaXNSZWN0ICYmIFdhcmVob3VzZS5nZXRBdCh3YXJlaG91c2UsIGksIGopLmV4aXN0cyhkZXRhaWxJc1dpdGhpbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1JlY3QgPyBPcHRpb25hbC5zb21lKGJvdW5kcykgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldEJvdW5kcyA9IChkZXRhaWxBLCBkZXRhaWxCKSA9PiB7XG4gICAgICByZXR1cm4gYm91bmRzKE1hdGgubWluKGRldGFpbEEucm93LCBkZXRhaWxCLnJvdyksIE1hdGgubWluKGRldGFpbEEuY29sdW1uLCBkZXRhaWxCLmNvbHVtbiksIE1hdGgubWF4KGRldGFpbEEucm93ICsgZGV0YWlsQS5yb3dzcGFuIC0gMSwgZGV0YWlsQi5yb3cgKyBkZXRhaWxCLnJvd3NwYW4gLSAxKSwgTWF0aC5tYXgoZGV0YWlsQS5jb2x1bW4gKyBkZXRhaWxBLmNvbHNwYW4gLSAxLCBkZXRhaWxCLmNvbHVtbiArIGRldGFpbEIuY29sc3BhbiAtIDEpKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEFueUJveCA9ICh3YXJlaG91c2UsIHN0YXJ0Q2VsbCwgZmluaXNoQ2VsbCkgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRDb29yZHMgPSBXYXJlaG91c2UuZmluZEl0ZW0od2FyZWhvdXNlLCBzdGFydENlbGwsIGVxJDEpO1xuICAgICAgY29uc3QgZmluaXNoQ29vcmRzID0gV2FyZWhvdXNlLmZpbmRJdGVtKHdhcmVob3VzZSwgZmluaXNoQ2VsbCwgZXEkMSk7XG4gICAgICByZXR1cm4gc3RhcnRDb29yZHMuYmluZChzYyA9PiB7XG4gICAgICAgIHJldHVybiBmaW5pc2hDb29yZHMubWFwKGZjID0+IHtcbiAgICAgICAgICByZXR1cm4gZ2V0Qm91bmRzKHNjLCBmYyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRCb3gkMSA9ICh3YXJlaG91c2UsIHN0YXJ0Q2VsbCwgZmluaXNoQ2VsbCkgPT4ge1xuICAgICAgcmV0dXJuIGdldEFueUJveCh3YXJlaG91c2UsIHN0YXJ0Q2VsbCwgZmluaXNoQ2VsbCkuYmluZChib3VuZHMgPT4ge1xuICAgICAgICByZXR1cm4gaXNSZWN0YW5ndWxhcih3YXJlaG91c2UsIGJvdW5kcyk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbW92ZUJ5JDEgPSAod2FyZWhvdXNlLCBjZWxsLCByb3csIGNvbHVtbikgPT4ge1xuICAgICAgcmV0dXJuIFdhcmVob3VzZS5maW5kSXRlbSh3YXJlaG91c2UsIGNlbGwsIGVxJDEpLmJpbmQoZGV0YWlsID0+IHtcbiAgICAgICAgY29uc3Qgc3RhcnRSb3cgPSByb3cgPiAwID8gZGV0YWlsLnJvdyArIGRldGFpbC5yb3dzcGFuIC0gMSA6IGRldGFpbC5yb3c7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q29sID0gY29sdW1uID4gMCA/IGRldGFpbC5jb2x1bW4gKyBkZXRhaWwuY29sc3BhbiAtIDEgOiBkZXRhaWwuY29sdW1uO1xuICAgICAgICBjb25zdCBkZXN0ID0gV2FyZWhvdXNlLmdldEF0KHdhcmVob3VzZSwgc3RhcnRSb3cgKyByb3csIHN0YXJ0Q29sICsgY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGRlc3QubWFwKGQgPT4ge1xuICAgICAgICAgIHJldHVybiBkLmVsZW1lbnQ7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBpbnRlcmNlcHRzJDEgPSAod2FyZWhvdXNlLCBzdGFydCwgZmluaXNoKSA9PiB7XG4gICAgICByZXR1cm4gZ2V0QW55Qm94KHdhcmVob3VzZSwgc3RhcnQsIGZpbmlzaCkubWFwKGJvdW5kcyA9PiB7XG4gICAgICAgIGNvbnN0IGluc2lkZSA9IFdhcmVob3VzZS5maWx0ZXJJdGVtcyh3YXJlaG91c2UsIGN1cnJ5KGluU2VsZWN0aW9uLCBib3VuZHMpKTtcbiAgICAgICAgcmV0dXJuIG1hcCQxKGluc2lkZSwgZGV0YWlsID0+IHtcbiAgICAgICAgICByZXR1cm4gZGV0YWlsLmVsZW1lbnQ7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBwYXJlbnRDZWxsID0gKHdhcmVob3VzZSwgaW5uZXJDZWxsKSA9PiB7XG4gICAgICBjb25zdCBpc0NvbnRhaW5lZEJ5ID0gKGMxLCBjMikgPT4ge1xuICAgICAgICByZXR1cm4gY29udGFpbnMkMShjMiwgYzEpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBXYXJlaG91c2UuZmluZEl0ZW0od2FyZWhvdXNlLCBpbm5lckNlbGwsIGlzQ29udGFpbmVkQnkpLm1hcChkZXRhaWwgPT4ge1xuICAgICAgICByZXR1cm4gZGV0YWlsLmVsZW1lbnQ7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbW92ZUJ5ID0gKGNlbGwsIGRlbHRhUm93LCBkZWx0YUNvbHVtbikgPT4ge1xuICAgICAgcmV0dXJuIHRhYmxlKGNlbGwpLmJpbmQodGFibGUgPT4ge1xuICAgICAgICBjb25zdCB3YXJlaG91c2UgPSBnZXRXYXJlaG91c2UodGFibGUpO1xuICAgICAgICByZXR1cm4gbW92ZUJ5JDEod2FyZWhvdXNlLCBjZWxsLCBkZWx0YVJvdywgZGVsdGFDb2x1bW4pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBpbnRlcmNlcHRzID0gKHRhYmxlLCBmaXJzdCwgbGFzdCkgPT4ge1xuICAgICAgY29uc3Qgd2FyZWhvdXNlID0gZ2V0V2FyZWhvdXNlKHRhYmxlKTtcbiAgICAgIHJldHVybiBpbnRlcmNlcHRzJDEod2FyZWhvdXNlLCBmaXJzdCwgbGFzdCk7XG4gICAgfTtcbiAgICBjb25zdCBuZXN0ZWRJbnRlcmNlcHRzID0gKHRhYmxlLCBmaXJzdCwgZmlyc3RUYWJsZSwgbGFzdCwgbGFzdFRhYmxlKSA9PiB7XG4gICAgICBjb25zdCB3YXJlaG91c2UgPSBnZXRXYXJlaG91c2UodGFibGUpO1xuICAgICAgY29uc3Qgb3B0U3RhcnRDZWxsID0gZXEkMSh0YWJsZSwgZmlyc3RUYWJsZSkgPyBPcHRpb25hbC5zb21lKGZpcnN0KSA6IHBhcmVudENlbGwod2FyZWhvdXNlLCBmaXJzdCk7XG4gICAgICBjb25zdCBvcHRMYXN0Q2VsbCA9IGVxJDEodGFibGUsIGxhc3RUYWJsZSkgPyBPcHRpb25hbC5zb21lKGxhc3QpIDogcGFyZW50Q2VsbCh3YXJlaG91c2UsIGxhc3QpO1xuICAgICAgcmV0dXJuIG9wdFN0YXJ0Q2VsbC5iaW5kKHN0YXJ0Q2VsbCA9PiBvcHRMYXN0Q2VsbC5iaW5kKGxhc3RDZWxsID0+IGludGVyY2VwdHMkMSh3YXJlaG91c2UsIHN0YXJ0Q2VsbCwgbGFzdENlbGwpKSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRCb3ggPSAodGFibGUsIGZpcnN0LCBsYXN0KSA9PiB7XG4gICAgICBjb25zdCB3YXJlaG91c2UgPSBnZXRXYXJlaG91c2UodGFibGUpO1xuICAgICAgcmV0dXJuIGdldEJveCQxKHdhcmVob3VzZSwgZmlyc3QsIGxhc3QpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0V2FyZWhvdXNlID0gV2FyZWhvdXNlLmZyb21UYWJsZTtcblxuICAgIHZhciBUYWdCb3VuZGFyaWVzID0gW1xuICAgICAgJ2JvZHknLFxuICAgICAgJ3AnLFxuICAgICAgJ2RpdicsXG4gICAgICAnYXJ0aWNsZScsXG4gICAgICAnYXNpZGUnLFxuICAgICAgJ2ZpZ2NhcHRpb24nLFxuICAgICAgJ2ZpZ3VyZScsXG4gICAgICAnZm9vdGVyJyxcbiAgICAgICdoZWFkZXInLFxuICAgICAgJ25hdicsXG4gICAgICAnc2VjdGlvbicsXG4gICAgICAnb2wnLFxuICAgICAgJ3VsJyxcbiAgICAgICdsaScsXG4gICAgICAndGFibGUnLFxuICAgICAgJ3RoZWFkJyxcbiAgICAgICd0Ym9keScsXG4gICAgICAndGZvb3QnLFxuICAgICAgJ2NhcHRpb24nLFxuICAgICAgJ3RyJyxcbiAgICAgICd0ZCcsXG4gICAgICAndGgnLFxuICAgICAgJ2gxJyxcbiAgICAgICdoMicsXG4gICAgICAnaDMnLFxuICAgICAgJ2g0JyxcbiAgICAgICdoNScsXG4gICAgICAnaDYnLFxuICAgICAgJ2Jsb2NrcXVvdGUnLFxuICAgICAgJ3ByZScsXG4gICAgICAnYWRkcmVzcydcbiAgICBdO1xuXG4gICAgdmFyIERvbVVuaXZlcnNlID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2xvbmUgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgcmV0dXJuIFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsZW1lbnQuZG9tLmNsb25lTm9kZShmYWxzZSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRvY3VtZW50ID0gZWxlbWVudCA9PiBkb2N1bWVudE9yT3duZXIoZWxlbWVudCkuZG9tO1xuICAgICAgY29uc3QgaXNCb3VuZGFyeSA9IGVsZW1lbnQgPT4ge1xuICAgICAgICBpZiAoIWlzRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZShlbGVtZW50KSA9PT0gJ2JvZHknKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRhaW5zJDIoVGFnQm91bmRhcmllcywgbmFtZShlbGVtZW50KSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNFbXB0eVRhZyA9IGVsZW1lbnQgPT4ge1xuICAgICAgICBpZiAoIWlzRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGFpbnMkMihbXG4gICAgICAgICAgJ2JyJyxcbiAgICAgICAgICAnaW1nJyxcbiAgICAgICAgICAnaHInLFxuICAgICAgICAgICdpbnB1dCdcbiAgICAgICAgXSwgbmFtZShlbGVtZW50KSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNOb25FZGl0YWJsZSA9IGVsZW1lbnQgPT4gaXNFbGVtZW50KGVsZW1lbnQpICYmIGdldCRiKGVsZW1lbnQsICdjb250ZW50ZWRpdGFibGUnKSA9PT0gJ2ZhbHNlJztcbiAgICAgIGNvbnN0IGNvbXBhcmVQb3NpdGlvbiA9IChlbGVtZW50LCBvdGhlcikgPT4ge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5kb20uY29tcGFyZURvY3VtZW50UG9zaXRpb24ob3RoZXIuZG9tKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjb3B5QXR0cmlidXRlc1RvID0gKHNvdXJjZSwgZGVzdGluYXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgYXMgPSBjbG9uZSQyKHNvdXJjZSk7XG4gICAgICAgIHNldEFsbCQxKGRlc3RpbmF0aW9uLCBhcyk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNTcGVjaWFsID0gZWxlbWVudCA9PiB7XG4gICAgICAgIGNvbnN0IHRhZyA9IG5hbWUoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBjb250YWlucyQyKFtcbiAgICAgICAgICAnc2NyaXB0JyxcbiAgICAgICAgICAnbm9zY3JpcHQnLFxuICAgICAgICAgICdpZnJhbWUnLFxuICAgICAgICAgICdub2ZyYW1lcycsXG4gICAgICAgICAgJ25vZW1iZWQnLFxuICAgICAgICAgICd0aXRsZScsXG4gICAgICAgICAgJ3N0eWxlJyxcbiAgICAgICAgICAndGV4dGFyZWEnLFxuICAgICAgICAgICd4bXAnXG4gICAgICAgIF0sIHRhZyk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0TGFuZ3VhZ2UgPSBlbGVtZW50ID0+IGlzRWxlbWVudChlbGVtZW50KSA/IGdldE9wdChlbGVtZW50LCAnbGFuZycpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdXA6IGNvbnN0YW50KHtcbiAgICAgICAgICBzZWxlY3RvcjogYW5jZXN0b3IkMSxcbiAgICAgICAgICBjbG9zZXN0OiBjbG9zZXN0JDEsXG4gICAgICAgICAgcHJlZGljYXRlOiBhbmNlc3RvciQyLFxuICAgICAgICAgIGFsbDogcGFyZW50c1xuICAgICAgICB9KSxcbiAgICAgICAgZG93bjogY29uc3RhbnQoe1xuICAgICAgICAgIHNlbGVjdG9yOiBkZXNjZW5kYW50cyxcbiAgICAgICAgICBwcmVkaWNhdGU6IGRlc2NlbmRhbnRzJDFcbiAgICAgICAgfSksXG4gICAgICAgIHN0eWxlczogY29uc3RhbnQoe1xuICAgICAgICAgIGdldDogZ2V0JGEsXG4gICAgICAgICAgZ2V0UmF3OiBnZXRSYXckMixcbiAgICAgICAgICBzZXQ6IHNldCQxLFxuICAgICAgICAgIHJlbW92ZTogcmVtb3ZlJDVcbiAgICAgICAgfSksXG4gICAgICAgIGF0dHJzOiBjb25zdGFudCh7XG4gICAgICAgICAgZ2V0OiBnZXQkYixcbiAgICAgICAgICBzZXQ6IHNldCQyLFxuICAgICAgICAgIHJlbW92ZTogcmVtb3ZlJDcsXG4gICAgICAgICAgY29weVRvOiBjb3B5QXR0cmlidXRlc1RvXG4gICAgICAgIH0pLFxuICAgICAgICBpbnNlcnQ6IGNvbnN0YW50KHtcbiAgICAgICAgICBiZWZvcmU6IGJlZm9yZSQzLFxuICAgICAgICAgIGFmdGVyOiBhZnRlciQ1LFxuICAgICAgICAgIGFmdGVyQWxsOiBhZnRlciQ0LFxuICAgICAgICAgIGFwcGVuZDogYXBwZW5kJDEsXG4gICAgICAgICAgYXBwZW5kQWxsOiBhcHBlbmQsXG4gICAgICAgICAgcHJlcGVuZDogcHJlcGVuZCxcbiAgICAgICAgICB3cmFwOiB3cmFwXG4gICAgICAgIH0pLFxuICAgICAgICByZW1vdmU6IGNvbnN0YW50KHtcbiAgICAgICAgICB1bndyYXA6IHVud3JhcCxcbiAgICAgICAgICByZW1vdmU6IHJlbW92ZSQ2XG4gICAgICAgIH0pLFxuICAgICAgICBjcmVhdGU6IGNvbnN0YW50KHtcbiAgICAgICAgICBudTogU3VnYXJFbGVtZW50LmZyb21UYWcsXG4gICAgICAgICAgY2xvbmUsXG4gICAgICAgICAgdGV4dDogU3VnYXJFbGVtZW50LmZyb21UZXh0XG4gICAgICAgIH0pLFxuICAgICAgICBxdWVyeTogY29uc3RhbnQoe1xuICAgICAgICAgIGNvbXBhcmVQb3NpdGlvbixcbiAgICAgICAgICBwcmV2U2libGluZzogcHJldlNpYmxpbmcsXG4gICAgICAgICAgbmV4dFNpYmxpbmc6IG5leHRTaWJsaW5nXG4gICAgICAgIH0pLFxuICAgICAgICBwcm9wZXJ0eTogY29uc3RhbnQoe1xuICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbiQyLFxuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgcGFyZW50OiBwYXJlbnQsXG4gICAgICAgICAgZG9jdW1lbnQsXG4gICAgICAgICAgaXNUZXh0OiBpc1RleHQsXG4gICAgICAgICAgaXNDb21tZW50OiBpc0NvbW1lbnQsXG4gICAgICAgICAgaXNFbGVtZW50OiBpc0VsZW1lbnQsXG4gICAgICAgICAgaXNTcGVjaWFsLFxuICAgICAgICAgIGdldExhbmd1YWdlLFxuICAgICAgICAgIGdldFRleHQ6IGdldCQ2LFxuICAgICAgICAgIHNldFRleHQ6IHNldCxcbiAgICAgICAgICBpc0JvdW5kYXJ5LFxuICAgICAgICAgIGlzRW1wdHlUYWcsXG4gICAgICAgICAgaXNOb25FZGl0YWJsZVxuICAgICAgICB9KSxcbiAgICAgICAgZXE6IGVxJDEsXG4gICAgICAgIGlzOiBpcyQxXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBhbGwgPSAodW5pdmVyc2UsIGxvb2ssIGVsZW1lbnRzLCBmKSA9PiB7XG4gICAgICBjb25zdCBoZWFkID0gZWxlbWVudHNbMF07XG4gICAgICBjb25zdCB0YWlsID0gZWxlbWVudHMuc2xpY2UoMSk7XG4gICAgICByZXR1cm4gZih1bml2ZXJzZSwgbG9vaywgaGVhZCwgdGFpbCk7XG4gICAgfTtcbiAgICBjb25zdCBvbmVBbGwgPSAodW5pdmVyc2UsIGxvb2ssIGVsZW1lbnRzKSA9PiB7XG4gICAgICByZXR1cm4gZWxlbWVudHMubGVuZ3RoID4gMCA/IGFsbCh1bml2ZXJzZSwgbG9vaywgZWxlbWVudHMsIHVuc2FmZU9uZSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCB1bnNhZmVPbmUgPSAodW5pdmVyc2UsIGxvb2ssIGhlYWQsIHRhaWwpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gbG9vayh1bml2ZXJzZSwgaGVhZCk7XG4gICAgICByZXR1cm4gZm9sZHIodGFpbCwgKGIsIGEpID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGxvb2sodW5pdmVyc2UsIGEpO1xuICAgICAgICByZXR1cm4gY29tbW9uRWxlbWVudCh1bml2ZXJzZSwgYiwgY3VycmVudCk7XG4gICAgICB9LCBzdGFydCk7XG4gICAgfTtcbiAgICBjb25zdCBjb21tb25FbGVtZW50ID0gKHVuaXZlcnNlLCBzdGFydCwgZW5kKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnQuYmluZChzID0+IHtcbiAgICAgICAgcmV0dXJuIGVuZC5maWx0ZXIoY3VycnkodW5pdmVyc2UuZXEsIHMpKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBlcSA9ICh1bml2ZXJzZSwgaXRlbSkgPT4ge1xuICAgICAgcmV0dXJuIGN1cnJ5KHVuaXZlcnNlLmVxLCBpdGVtKTtcbiAgICB9O1xuICAgIGNvbnN0IGFuY2VzdG9ycyQyID0gKHVuaXZlcnNlLCBzdGFydCwgZW5kLCBpc1Jvb3QgPSBuZXZlcikgPT4ge1xuICAgICAgY29uc3QgcHMxID0gW3N0YXJ0XS5jb25jYXQodW5pdmVyc2UudXAoKS5hbGwoc3RhcnQpKTtcbiAgICAgIGNvbnN0IHBzMiA9IFtlbmRdLmNvbmNhdCh1bml2ZXJzZS51cCgpLmFsbChlbmQpKTtcbiAgICAgIGNvbnN0IHBydW5lID0gcGF0aCA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZmluZEluZGV4KHBhdGgsIGlzUm9vdCk7XG4gICAgICAgIHJldHVybiBpbmRleC5mb2xkKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgfSwgaW5kID0+IHtcbiAgICAgICAgICByZXR1cm4gcGF0aC5zbGljZSgwLCBpbmQgKyAxKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcHJ1bmVkMSA9IHBydW5lKHBzMSk7XG4gICAgICBjb25zdCBwcnVuZWQyID0gcHJ1bmUocHMyKTtcbiAgICAgIGNvbnN0IHNoYXJlZCA9IGZpbmQkMShwcnVuZWQxLCB4ID0+IHtcbiAgICAgICAgcmV0dXJuIGV4aXN0cyhwcnVuZWQyLCBlcSh1bml2ZXJzZSwgeCkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaXJzdHBhdGg6IHBydW5lZDEsXG4gICAgICAgIHNlY29uZHBhdGg6IHBydW5lZDIsXG4gICAgICAgIHNoYXJlZFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2hhcmVkT25lJDEgPSBvbmVBbGw7XG4gICAgY29uc3QgYW5jZXN0b3JzJDEgPSBhbmNlc3RvcnMkMjtcblxuICAgIGNvbnN0IHVuaXZlcnNlJDMgPSBEb21Vbml2ZXJzZSgpO1xuICAgIGNvbnN0IHNoYXJlZE9uZSA9IChsb29rLCBlbGVtZW50cykgPT4ge1xuICAgICAgcmV0dXJuIHNoYXJlZE9uZSQxKHVuaXZlcnNlJDMsIChfdW5pdmVyc2UsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIGxvb2soZWxlbWVudCk7XG4gICAgICB9LCBlbGVtZW50cyk7XG4gICAgfTtcbiAgICBjb25zdCBhbmNlc3RvcnMgPSAoc3RhcnQsIGZpbmlzaCwgaXNSb290KSA9PiB7XG4gICAgICByZXR1cm4gYW5jZXN0b3JzJDEodW5pdmVyc2UkMywgc3RhcnQsIGZpbmlzaCwgaXNSb290KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbG9va3VwVGFibGUgPSBjb250YWluZXIgPT4ge1xuICAgICAgcmV0dXJuIGFuY2VzdG9yJDEoY29udGFpbmVyLCAndGFibGUnKTtcbiAgICB9O1xuICAgIGNvbnN0IGlkZW50aWZ5ID0gKHN0YXJ0LCBmaW5pc2gsIGlzUm9vdCkgPT4ge1xuICAgICAgY29uc3QgZ2V0SXNSb290ID0gcm9vdFRhYmxlID0+IHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQgPT4ge1xuICAgICAgICAgIHJldHVybiBpc1Jvb3QgIT09IHVuZGVmaW5lZCAmJiBpc1Jvb3QoZWxlbWVudCkgfHwgZXEkMShlbGVtZW50LCByb290VGFibGUpO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIGlmIChlcSQxKHN0YXJ0LCBmaW5pc2gpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICBib3hlczogT3B0aW9uYWwuc29tZShbc3RhcnRdKSxcbiAgICAgICAgICBzdGFydCxcbiAgICAgICAgICBmaW5pc2hcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbG9va3VwVGFibGUoc3RhcnQpLmJpbmQoc3RhcnRUYWJsZSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGxvb2t1cFRhYmxlKGZpbmlzaCkuYmluZChmaW5pc2hUYWJsZSA9PiB7XG4gICAgICAgICAgICBpZiAoZXEkMShzdGFydFRhYmxlLCBmaW5pc2hUYWJsZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgICAgICAgIGJveGVzOiBpbnRlcmNlcHRzKHN0YXJ0VGFibGUsIHN0YXJ0LCBmaW5pc2gpLFxuICAgICAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgICAgIGZpbmlzaFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGFpbnMkMShzdGFydFRhYmxlLCBmaW5pc2hUYWJsZSkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYW5jZXN0b3JDZWxscyA9IGFuY2VzdG9ycyQzKGZpbmlzaCwgJ3RkLHRoJywgZ2V0SXNSb290KHN0YXJ0VGFibGUpKTtcbiAgICAgICAgICAgICAgY29uc3QgZmluaXNoQ2VsbCA9IGFuY2VzdG9yQ2VsbHMubGVuZ3RoID4gMCA/IGFuY2VzdG9yQ2VsbHNbYW5jZXN0b3JDZWxscy5sZW5ndGggLSAxXSA6IGZpbmlzaDtcbiAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgICAgICAgIGJveGVzOiBuZXN0ZWRJbnRlcmNlcHRzKHN0YXJ0VGFibGUsIHN0YXJ0LCBzdGFydFRhYmxlLCBmaW5pc2gsIGZpbmlzaFRhYmxlKSxcbiAgICAgICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgICAgICBmaW5pc2g6IGZpbmlzaENlbGxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRhaW5zJDEoZmluaXNoVGFibGUsIHN0YXJ0VGFibGUpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFuY2VzdG9yQ2VsbHMgPSBhbmNlc3RvcnMkMyhzdGFydCwgJ3RkLHRoJywgZ2V0SXNSb290KGZpbmlzaFRhYmxlKSk7XG4gICAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IGFuY2VzdG9yQ2VsbHMubGVuZ3RoID4gMCA/IGFuY2VzdG9yQ2VsbHNbYW5jZXN0b3JDZWxscy5sZW5ndGggLSAxXSA6IHN0YXJ0O1xuICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgICAgICAgYm94ZXM6IG5lc3RlZEludGVyY2VwdHMoZmluaXNoVGFibGUsIHN0YXJ0LCBzdGFydFRhYmxlLCBmaW5pc2gsIGZpbmlzaFRhYmxlKSxcbiAgICAgICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgICAgICBmaW5pc2g6IHN0YXJ0Q2VsbFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBhbmNlc3RvcnMoc3RhcnQsIGZpbmlzaCkuc2hhcmVkLmJpbmQobGNhID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvc2VzdCQxKGxjYSwgJ3RhYmxlJywgaXNSb290KS5iaW5kKGxjYVRhYmxlID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmlzaEFuY2VzdG9yQ2VsbHMgPSBhbmNlc3RvcnMkMyhmaW5pc2gsICd0ZCx0aCcsIGdldElzUm9vdChsY2FUYWJsZSkpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgZmluaXNoQ2VsbCA9IGZpbmlzaEFuY2VzdG9yQ2VsbHMubGVuZ3RoID4gMCA/IGZpbmlzaEFuY2VzdG9yQ2VsbHNbZmluaXNoQW5jZXN0b3JDZWxscy5sZW5ndGggLSAxXSA6IGZpbmlzaDtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0QW5jZXN0b3JDZWxscyA9IGFuY2VzdG9ycyQzKHN0YXJ0LCAndGQsdGgnLCBnZXRJc1Jvb3QobGNhVGFibGUpKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IHN0YXJ0QW5jZXN0b3JDZWxscy5sZW5ndGggPiAwID8gc3RhcnRBbmNlc3RvckNlbGxzW3N0YXJ0QW5jZXN0b3JDZWxscy5sZW5ndGggLSAxXSA6IHN0YXJ0O1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgICAgICAgICAgICBib3hlczogbmVzdGVkSW50ZXJjZXB0cyhsY2FUYWJsZSwgc3RhcnQsIHN0YXJ0VGFibGUsIGZpbmlzaCwgZmluaXNoVGFibGUpLFxuICAgICAgICAgICAgICAgICAgICBzdGFydDogc3RhcnRDZWxsLFxuICAgICAgICAgICAgICAgICAgICBmaW5pc2g6IGZpbmlzaENlbGxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZXRyaWV2ZSQxID0gKGNvbnRhaW5lciwgc2VsZWN0b3IpID0+IHtcbiAgICAgIGNvbnN0IHNlbHMgPSBkZXNjZW5kYW50cyhjb250YWluZXIsIHNlbGVjdG9yKTtcbiAgICAgIHJldHVybiBzZWxzLmxlbmd0aCA+IDAgPyBPcHRpb25hbC5zb21lKHNlbHMpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0TGFzdCA9IChib3hlcywgbGFzdFNlbGVjdGVkU2VsZWN0b3IpID0+IHtcbiAgICAgIHJldHVybiBmaW5kJDEoYm94ZXMsIGJveCA9PiB7XG4gICAgICAgIHJldHVybiBpcyQyKGJveCwgbGFzdFNlbGVjdGVkU2VsZWN0b3IpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRFZGdlcyA9IChjb250YWluZXIsIGZpcnN0U2VsZWN0ZWRTZWxlY3RvciwgbGFzdFNlbGVjdGVkU2VsZWN0b3IpID0+IHtcbiAgICAgIHJldHVybiBkZXNjZW5kYW50KGNvbnRhaW5lciwgZmlyc3RTZWxlY3RlZFNlbGVjdG9yKS5iaW5kKGZpcnN0ID0+IHtcbiAgICAgICAgcmV0dXJuIGRlc2NlbmRhbnQoY29udGFpbmVyLCBsYXN0U2VsZWN0ZWRTZWxlY3RvcikuYmluZChsYXN0ID0+IHtcbiAgICAgICAgICByZXR1cm4gc2hhcmVkT25lKGxvb2t1cFRhYmxlLCBbXG4gICAgICAgICAgICBmaXJzdCxcbiAgICAgICAgICAgIGxhc3RcbiAgICAgICAgICBdKS5tYXAodGFibGUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZmlyc3QsXG4gICAgICAgICAgICAgIGxhc3QsXG4gICAgICAgICAgICAgIHRhYmxlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZXhwYW5kVG8gPSAoZmluaXNoLCBmaXJzdFNlbGVjdGVkU2VsZWN0b3IpID0+IHtcbiAgICAgIHJldHVybiBhbmNlc3RvciQxKGZpbmlzaCwgJ3RhYmxlJykuYmluZCh0YWJsZSA9PiB7XG4gICAgICAgIHJldHVybiBkZXNjZW5kYW50KHRhYmxlLCBmaXJzdFNlbGVjdGVkU2VsZWN0b3IpLmJpbmQoc3RhcnQgPT4ge1xuICAgICAgICAgIHJldHVybiBpZGVudGlmeShzdGFydCwgZmluaXNoKS5iaW5kKGlkZW50aWZpZWQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZWQuYm94ZXMubWFwKGJveGVzID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBib3hlcyxcbiAgICAgICAgICAgICAgICBzdGFydDogaWRlbnRpZmllZC5zdGFydCxcbiAgICAgICAgICAgICAgICBmaW5pc2g6IGlkZW50aWZpZWQuZmluaXNoXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHNoaWZ0U2VsZWN0aW9uID0gKGJveGVzLCBkZWx0YVJvdywgZGVsdGFDb2x1bW4sIGZpcnN0U2VsZWN0ZWRTZWxlY3RvciwgbGFzdFNlbGVjdGVkU2VsZWN0b3IpID0+IHtcbiAgICAgIHJldHVybiBnZXRMYXN0KGJveGVzLCBsYXN0U2VsZWN0ZWRTZWxlY3RvcikuYmluZChsYXN0ID0+IHtcbiAgICAgICAgcmV0dXJuIG1vdmVCeShsYXN0LCBkZWx0YVJvdywgZGVsdGFDb2x1bW4pLmJpbmQoZmluaXNoID0+IHtcbiAgICAgICAgICByZXR1cm4gZXhwYW5kVG8oZmluaXNoLCBmaXJzdFNlbGVjdGVkU2VsZWN0b3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZXRyaWV2ZSA9IChjb250YWluZXIsIHNlbGVjdG9yKSA9PiB7XG4gICAgICByZXR1cm4gcmV0cmlldmUkMShjb250YWluZXIsIHNlbGVjdG9yKTtcbiAgICB9O1xuICAgIGNvbnN0IHJldHJpZXZlQm94ID0gKGNvbnRhaW5lciwgZmlyc3RTZWxlY3RlZFNlbGVjdG9yLCBsYXN0U2VsZWN0ZWRTZWxlY3RvcikgPT4ge1xuICAgICAgcmV0dXJuIGdldEVkZ2VzKGNvbnRhaW5lciwgZmlyc3RTZWxlY3RlZFNlbGVjdG9yLCBsYXN0U2VsZWN0ZWRTZWxlY3RvcikuYmluZChlZGdlcyA9PiB7XG4gICAgICAgIGNvbnN0IGlzUm9vdCA9IGFuY2VzdG9yID0+IHtcbiAgICAgICAgICByZXR1cm4gZXEkMShjb250YWluZXIsIGFuY2VzdG9yKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2VjdGlvblNlbGVjdG9yID0gJ3RoZWFkLHRmb290LHRib2R5LHRhYmxlJztcbiAgICAgICAgY29uc3QgZmlyc3RBbmNlc3RvciA9IGFuY2VzdG9yJDEoZWRnZXMuZmlyc3QsIHNlY3Rpb25TZWxlY3RvciwgaXNSb290KTtcbiAgICAgICAgY29uc3QgbGFzdEFuY2VzdG9yID0gYW5jZXN0b3IkMShlZGdlcy5sYXN0LCBzZWN0aW9uU2VsZWN0b3IsIGlzUm9vdCk7XG4gICAgICAgIHJldHVybiBmaXJzdEFuY2VzdG9yLmJpbmQoZkEgPT4ge1xuICAgICAgICAgIHJldHVybiBsYXN0QW5jZXN0b3IuYmluZChsQSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZXEkMShmQSwgbEEpID8gZ2V0Qm94KGVkZ2VzLnRhYmxlLCBlZGdlcy5maXJzdCwgZWRnZXMubGFzdCkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IGlkZW50aXR5O1xuICAgIGNvbnN0IHVubWVyZ2FibGUgPSBzZWxlY3RlZENlbGxzID0+IHtcbiAgICAgIGNvbnN0IGhhc1NwYW4gPSAoZWxlbSwgdHlwZSkgPT4gZ2V0T3B0KGVsZW0sIHR5cGUpLmV4aXN0cyhzcGFuID0+IHBhcnNlSW50KHNwYW4sIDEwKSA+IDEpO1xuICAgICAgY29uc3QgaGFzUm93T3JDb2xTcGFuID0gZWxlbSA9PiBoYXNTcGFuKGVsZW0sICdyb3dzcGFuJykgfHwgaGFzU3BhbihlbGVtLCAnY29sc3BhbicpO1xuICAgICAgcmV0dXJuIHNlbGVjdGVkQ2VsbHMubGVuZ3RoID4gMCAmJiBmb3JhbGwoc2VsZWN0ZWRDZWxscywgaGFzUm93T3JDb2xTcGFuKSA/IE9wdGlvbmFsLnNvbWUoc2VsZWN0ZWRDZWxscykgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBtZXJnYWJsZSA9ICh0YWJsZSwgc2VsZWN0ZWRDZWxscywgZXBoZW1lcmEpID0+IHtcbiAgICAgIGlmIChzZWxlY3RlZENlbGxzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmV0cmlldmVCb3godGFibGUsIGVwaGVtZXJhLmZpcnN0U2VsZWN0ZWRTZWxlY3RvciwgZXBoZW1lcmEubGFzdFNlbGVjdGVkU2VsZWN0b3IpLm1hcChib3VuZHMgPT4gKHtcbiAgICAgICAgICBib3VuZHMsXG4gICAgICAgICAgY2VsbHM6IHNlbGVjdGVkQ2VsbHNcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBzdHJTZWxlY3RlZCA9ICdkYXRhLW1jZS1zZWxlY3RlZCc7XG4gICAgY29uc3Qgc3RyU2VsZWN0ZWRTZWxlY3RvciA9ICd0ZFsnICsgc3RyU2VsZWN0ZWQgKyAnXSx0aFsnICsgc3RyU2VsZWN0ZWQgKyAnXSc7XG4gICAgY29uc3Qgc3RyQXR0cmlidXRlU2VsZWN0b3IgPSAnWycgKyBzdHJTZWxlY3RlZCArICddJztcbiAgICBjb25zdCBzdHJGaXJzdFNlbGVjdGVkID0gJ2RhdGEtbWNlLWZpcnN0LXNlbGVjdGVkJztcbiAgICBjb25zdCBzdHJGaXJzdFNlbGVjdGVkU2VsZWN0b3IgPSAndGRbJyArIHN0ckZpcnN0U2VsZWN0ZWQgKyAnXSx0aFsnICsgc3RyRmlyc3RTZWxlY3RlZCArICddJztcbiAgICBjb25zdCBzdHJMYXN0U2VsZWN0ZWQgPSAnZGF0YS1tY2UtbGFzdC1zZWxlY3RlZCc7XG4gICAgY29uc3Qgc3RyTGFzdFNlbGVjdGVkU2VsZWN0b3IgPSAndGRbJyArIHN0ckxhc3RTZWxlY3RlZCArICddLHRoWycgKyBzdHJMYXN0U2VsZWN0ZWQgKyAnXSc7XG4gICAgY29uc3QgYXR0cmlidXRlU2VsZWN0b3IgPSBzdHJBdHRyaWJ1dGVTZWxlY3RvcjtcbiAgICBjb25zdCBlcGhlbWVyYSA9IHtcbiAgICAgIHNlbGVjdGVkOiBzdHJTZWxlY3RlZCxcbiAgICAgIHNlbGVjdGVkU2VsZWN0b3I6IHN0clNlbGVjdGVkU2VsZWN0b3IsXG4gICAgICBmaXJzdFNlbGVjdGVkOiBzdHJGaXJzdFNlbGVjdGVkLFxuICAgICAgZmlyc3RTZWxlY3RlZFNlbGVjdG9yOiBzdHJGaXJzdFNlbGVjdGVkU2VsZWN0b3IsXG4gICAgICBsYXN0U2VsZWN0ZWQ6IHN0ckxhc3RTZWxlY3RlZCxcbiAgICAgIGxhc3RTZWxlY3RlZFNlbGVjdG9yOiBzdHJMYXN0U2VsZWN0ZWRTZWxlY3RvclxuICAgIH07XG5cbiAgICBjb25zdCBmb3JNZW51ID0gKHNlbGVjdGVkQ2VsbHMsIHRhYmxlLCBjZWxsKSA9PiAoe1xuICAgICAgZWxlbWVudDogY2VsbCxcbiAgICAgIG1lcmdhYmxlOiBtZXJnYWJsZSh0YWJsZSwgc2VsZWN0ZWRDZWxscywgZXBoZW1lcmEpLFxuICAgICAgdW5tZXJnYWJsZTogdW5tZXJnYWJsZShzZWxlY3RlZENlbGxzKSxcbiAgICAgIHNlbGVjdGlvbjogc2VsZWN0aW9uKHNlbGVjdGVkQ2VsbHMpXG4gICAgfSk7XG4gICAgY29uc3QgcGFzdGUgPSAoZWxlbWVudCwgY2xpcGJvYXJkLCBnZW5lcmF0b3JzKSA9PiAoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIGNsaXBib2FyZCxcbiAgICAgIGdlbmVyYXRvcnNcbiAgICB9KTtcbiAgICBjb25zdCBwYXN0ZVJvd3MgPSAoc2VsZWN0ZWRDZWxscywgX2NlbGwsIGNsaXBib2FyZCwgZ2VuZXJhdG9ycykgPT4gKHtcbiAgICAgIHNlbGVjdGlvbjogc2VsZWN0aW9uKHNlbGVjdGVkQ2VsbHMpLFxuICAgICAgY2xpcGJvYXJkLFxuICAgICAgZ2VuZXJhdG9yc1xuICAgIH0pO1xuXG4gICAgY29uc3QgZ2V0U2VsZWN0aW9uQ2VsbEZhbGxiYWNrID0gZWxlbWVudCA9PiB0YWJsZShlbGVtZW50KS5iaW5kKHRhYmxlID0+IHJldHJpZXZlKHRhYmxlLCBlcGhlbWVyYS5maXJzdFNlbGVjdGVkU2VsZWN0b3IpKS5mb2xkKGNvbnN0YW50KGVsZW1lbnQpLCBjZWxscyA9PiBjZWxsc1swXSk7XG4gICAgY29uc3QgZ2V0U2VsZWN0aW9uRnJvbVNlbGVjdG9yID0gc2VsZWN0b3IgPT4gKGluaXRDZWxsLCBpc1Jvb3QpID0+IHtcbiAgICAgIGNvbnN0IGNlbGxOYW1lID0gbmFtZShpbml0Q2VsbCk7XG4gICAgICBjb25zdCBjZWxsID0gY2VsbE5hbWUgPT09ICdjb2wnIHx8IGNlbGxOYW1lID09PSAnY29sZ3JvdXAnID8gZ2V0U2VsZWN0aW9uQ2VsbEZhbGxiYWNrKGluaXRDZWxsKSA6IGluaXRDZWxsO1xuICAgICAgcmV0dXJuIGNsb3Nlc3QkMShjZWxsLCBzZWxlY3RvciwgaXNSb290KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNlbGVjdGlvbkNlbGxPckNhcHRpb24gPSBnZXRTZWxlY3Rpb25Gcm9tU2VsZWN0b3IoJ3RoLHRkLGNhcHRpb24nKTtcbiAgICBjb25zdCBnZXRTZWxlY3Rpb25DZWxsID0gZ2V0U2VsZWN0aW9uRnJvbVNlbGVjdG9yKCd0aCx0ZCcpO1xuICAgIGNvbnN0IGdldENlbGxzRnJvbVNlbGVjdGlvbiA9IGVkaXRvciA9PiBmcm9tRG9tKGVkaXRvci5tb2RlbC50YWJsZS5nZXRTZWxlY3RlZENlbGxzKCkpO1xuICAgIGNvbnN0IGdldENlbGxzRnJvbUZha2VTZWxlY3Rpb24gPSBlZGl0b3IgPT4gZmlsdGVyJDIoZ2V0Q2VsbHNGcm9tU2VsZWN0aW9uKGVkaXRvciksIGNlbGwgPT4gaXMkMihjZWxsLCBlcGhlbWVyYS5zZWxlY3RlZFNlbGVjdG9yKSk7XG5cbiAgICBjb25zdCBleHRyYWN0U2VsZWN0ZWQgPSBjZWxscyA9PiB7XG4gICAgICByZXR1cm4gdGFibGUoY2VsbHNbMF0pLm1hcCh0YWJsZSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcGxpY2EgPSBleHRyYWN0JDEodGFibGUsIGF0dHJpYnV0ZVNlbGVjdG9yKTtcbiAgICAgICAgcmVtb3ZlRGF0YVN0eWxlKHJlcGxpY2EpO1xuICAgICAgICByZXR1cm4gW3JlcGxpY2FdO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXJpYWxpemVFbGVtZW50cyA9IChlZGl0b3IsIGVsZW1lbnRzKSA9PiBtYXAkMShlbGVtZW50cywgZWxtID0+IGVkaXRvci5zZWxlY3Rpb24uc2VyaWFsaXplci5zZXJpYWxpemUoZWxtLmRvbSwge30pKS5qb2luKCcnKTtcbiAgICBjb25zdCBnZXRUZXh0Q29udGVudCA9IGVsZW1lbnRzID0+IG1hcCQxKGVsZW1lbnRzLCBlbGVtZW50ID0+IGVsZW1lbnQuZG9tLmlubmVyVGV4dCkuam9pbignJyk7XG4gICAgY29uc3QgcmVnaXN0ZXJFdmVudHMgPSAoZWRpdG9yLCBhY3Rpb25zKSA9PiB7XG4gICAgICBlZGl0b3Iub24oJ0JlZm9yZUdldENvbnRlbnQnLCBlID0+IHtcbiAgICAgICAgY29uc3QgbXVsdGlDZWxsQ29udGV4dCA9IGNlbGxzID0+IHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXh0cmFjdFNlbGVjdGVkKGNlbGxzKS5lYWNoKGVsZW1lbnRzID0+IHtcbiAgICAgICAgICAgIGUuY29udGVudCA9IGUuZm9ybWF0ID09PSAndGV4dCcgPyBnZXRUZXh0Q29udGVudChlbGVtZW50cykgOiBzZXJpYWxpemVFbGVtZW50cyhlZGl0b3IsIGVsZW1lbnRzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGUuc2VsZWN0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgY29uc3QgY2VsbHMgPSBnZXRDZWxsc0Zyb21GYWtlU2VsZWN0aW9uKGVkaXRvcik7XG4gICAgICAgICAgaWYgKGNlbGxzLmxlbmd0aCA+PSAxKSB7XG4gICAgICAgICAgICBtdWx0aUNlbGxDb250ZXh0KGNlbGxzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdCZWZvcmVTZXRDb250ZW50JywgZSA9PiB7XG4gICAgICAgIGlmIChlLnNlbGVjdGlvbiA9PT0gdHJ1ZSAmJiBlLnBhc3RlID09PSB0cnVlKSB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxscyA9IGdldENlbGxzRnJvbVNlbGVjdGlvbihlZGl0b3IpO1xuICAgICAgICAgIGhlYWQoc2VsZWN0ZWRDZWxscykuZWFjaChjZWxsID0+IHtcbiAgICAgICAgICAgIHRhYmxlKGNlbGwpLmVhY2godGFibGUgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGZpbHRlciQyKGZyb21IdG1sKGUuY29udGVudCksIGNvbnRlbnQgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lKGNvbnRlbnQpICE9PSAnbWV0YSc7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjb25zdCBpc1RhYmxlID0gaXNUYWcoJ3RhYmxlJyk7XG4gICAgICAgICAgICAgIGlmIChzaG91bGRNZXJnZUNvbnRlbnRPblBhc3RlKGVkaXRvcikgJiYgZWxlbWVudHMubGVuZ3RoID09PSAxICYmIGlzVGFibGUoZWxlbWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvYyA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXREb2MoKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2VuZXJhdG9ycyA9IHBhc3RlJDEoZG9jKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRzID0gcGFzdGUoY2VsbCwgZWxlbWVudHNbMF0sIGdlbmVyYXRvcnMpO1xuICAgICAgICAgICAgICAgIGFjdGlvbnMucGFzdGVDZWxscyh0YWJsZSwgdGFyZ2V0cykuZWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBwb2ludCA9IChlbGVtZW50LCBvZmZzZXQpID0+ICh7XG4gICAgICBlbGVtZW50LFxuICAgICAgb2Zmc2V0XG4gICAgfSk7XG5cbiAgICBjb25zdCBzY2FuJDEgPSAodW5pdmVyc2UsIGVsZW1lbnQsIGRpcmVjdGlvbikgPT4ge1xuICAgICAgaWYgKHVuaXZlcnNlLnByb3BlcnR5KCkuaXNUZXh0KGVsZW1lbnQpICYmIHVuaXZlcnNlLnByb3BlcnR5KCkuZ2V0VGV4dChlbGVtZW50KS50cmltKCkubGVuZ3RoID09PSAwIHx8IHVuaXZlcnNlLnByb3BlcnR5KCkuaXNDb21tZW50KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBkaXJlY3Rpb24oZWxlbWVudCkuYmluZChlbGVtID0+IHtcbiAgICAgICAgICByZXR1cm4gc2NhbiQxKHVuaXZlcnNlLCBlbGVtLCBkaXJlY3Rpb24pLm9yVGh1bmsoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoZWxlbSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHRvRW5kID0gKHVuaXZlcnNlLCBlbGVtZW50KSA9PiB7XG4gICAgICBpZiAodW5pdmVyc2UucHJvcGVydHkoKS5pc1RleHQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHVuaXZlcnNlLnByb3BlcnR5KCkuZ2V0VGV4dChlbGVtZW50KS5sZW5ndGg7XG4gICAgICB9XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHVuaXZlcnNlLnByb3BlcnR5KCkuY2hpbGRyZW4oZWxlbWVudCk7XG4gICAgICByZXR1cm4gY2hpbGRyZW4ubGVuZ3RoO1xuICAgIH07XG4gICAgY29uc3QgZnJlZWZhbGxSdGwkMiA9ICh1bml2ZXJzZSwgZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgY2FuZGlkYXRlID0gc2NhbiQxKHVuaXZlcnNlLCBlbGVtZW50LCB1bml2ZXJzZS5xdWVyeSgpLnByZXZTaWJsaW5nKS5nZXRPcihlbGVtZW50KTtcbiAgICAgIGlmICh1bml2ZXJzZS5wcm9wZXJ0eSgpLmlzVGV4dChjYW5kaWRhdGUpKSB7XG4gICAgICAgIHJldHVybiBwb2ludChjYW5kaWRhdGUsIHRvRW5kKHVuaXZlcnNlLCBjYW5kaWRhdGUpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gdW5pdmVyc2UucHJvcGVydHkoKS5jaGlsZHJlbihjYW5kaWRhdGUpO1xuICAgICAgcmV0dXJuIGNoaWxkcmVuLmxlbmd0aCA+IDAgPyBmcmVlZmFsbFJ0bCQyKHVuaXZlcnNlLCBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXSkgOiBwb2ludChjYW5kaWRhdGUsIHRvRW5kKHVuaXZlcnNlLCBjYW5kaWRhdGUpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZnJlZWZhbGxSdGwkMSA9IGZyZWVmYWxsUnRsJDI7XG5cbiAgICBjb25zdCB1bml2ZXJzZSQyID0gRG9tVW5pdmVyc2UoKTtcbiAgICBjb25zdCBmcmVlZmFsbFJ0bCA9IGVsZW1lbnQgPT4ge1xuICAgICAgcmV0dXJuIGZyZWVmYWxsUnRsJDEodW5pdmVyc2UkMiwgZWxlbWVudCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbHZlID0gKG1haW4sIG90aGVyKSA9PiB7XG4gICAgICBpZiAoIWhhc0NvbHNwYW4obWFpbikpIHtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBnZXRHZW5lcmljV2lkdGgobWFpbik7XG4gICAgICAgIHdpZHRoLmVhY2godyA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3V2lkdGggPSB3LnZhbHVlIC8gMjtcbiAgICAgICAgICBzZXRHZW5lcmljV2lkdGgobWFpbiwgbmV3V2lkdGgsIHcudW5pdCk7XG4gICAgICAgICAgc2V0R2VuZXJpY1dpZHRoKG90aGVyLCBuZXdXaWR0aCwgdy51bml0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHplcm8gPSBhcnJheSA9PiBtYXAkMShhcnJheSwgY29uc3RhbnQoMCkpO1xuICAgIGNvbnN0IHN1cnJvdW5kID0gKHNpemVzLCBzdGFydEluZGV4LCBlbmRJbmRleCwgcmVzdWx0cywgZikgPT4gZihzaXplcy5zbGljZSgwLCBzdGFydEluZGV4KSkuY29uY2F0KHJlc3VsdHMpLmNvbmNhdChmKHNpemVzLnNsaWNlKGVuZEluZGV4KSkpO1xuICAgIGNvbnN0IGNsYW1wRGVsdGFIZWxwZXIgPSBwcmVkaWNhdGUgPT4gKHNpemVzLCBpbmRleCwgZGVsdGEsIG1pbkNlbGxTaXplKSA9PiB7XG4gICAgICBpZiAoIXByZWRpY2F0ZShkZWx0YSkpIHtcbiAgICAgICAgcmV0dXJuIGRlbHRhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3U2l6ZSA9IE1hdGgubWF4KG1pbkNlbGxTaXplLCBzaXplc1tpbmRleF0gLSBNYXRoLmFicyhkZWx0YSkpO1xuICAgICAgICBjb25zdCBkaWZmID0gTWF0aC5hYnMobmV3U2l6ZSAtIHNpemVzW2luZGV4XSk7XG4gICAgICAgIHJldHVybiBkZWx0YSA+PSAwID8gZGlmZiA6IC1kaWZmO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY2xhbXBOZWdhdGl2ZURlbHRhID0gY2xhbXBEZWx0YUhlbHBlcihkZWx0YSA9PiBkZWx0YSA8IDApO1xuICAgIGNvbnN0IGNsYW1wRGVsdGEgPSBjbGFtcERlbHRhSGVscGVyKGFsd2F5cyk7XG4gICAgY29uc3QgcmVzaXplVGFibGUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjYWxjRml4ZWREZWx0YXMgPSAoc2l6ZXMsIGluZGV4LCBuZXh0LCBkZWx0YSwgbWluQ2VsbFNpemUpID0+IHtcbiAgICAgICAgY29uc3QgY2xhbXBlZERlbHRhID0gY2xhbXBOZWdhdGl2ZURlbHRhKHNpemVzLCBpbmRleCwgZGVsdGEsIG1pbkNlbGxTaXplKTtcbiAgICAgICAgcmV0dXJuIHN1cnJvdW5kKHNpemVzLCBpbmRleCwgbmV4dCArIDEsIFtcbiAgICAgICAgICBjbGFtcGVkRGVsdGEsXG4gICAgICAgICAgMFxuICAgICAgICBdLCB6ZXJvKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjYWxjUmVsYXRpdmVEZWx0YXMgPSAoc2l6ZXMsIGluZGV4LCBkZWx0YSwgbWluQ2VsbFNpemUpID0+IHtcbiAgICAgICAgY29uc3QgcmF0aW8gPSAoMTAwICsgZGVsdGEpIC8gMTAwO1xuICAgICAgICBjb25zdCBuZXdUaGlzID0gTWF0aC5tYXgobWluQ2VsbFNpemUsIChzaXplc1tpbmRleF0gKyBkZWx0YSkgLyByYXRpbyk7XG4gICAgICAgIHJldHVybiBtYXAkMShzaXplcywgKHNpemUsIGlkeCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld1NpemUgPSBpZHggPT09IGluZGV4ID8gbmV3VGhpcyA6IHNpemUgLyByYXRpbztcbiAgICAgICAgICByZXR1cm4gbmV3U2l6ZSAtIHNpemU7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNhbGNMZWZ0RWRnZURlbHRhcyA9IChzaXplcywgaW5kZXgsIG5leHQsIGRlbHRhLCBtaW5DZWxsU2l6ZSwgaXNSZWxhdGl2ZSkgPT4ge1xuICAgICAgICBpZiAoaXNSZWxhdGl2ZSkge1xuICAgICAgICAgIHJldHVybiBjYWxjUmVsYXRpdmVEZWx0YXMoc2l6ZXMsIGluZGV4LCBkZWx0YSwgbWluQ2VsbFNpemUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBjYWxjRml4ZWREZWx0YXMoc2l6ZXMsIGluZGV4LCBuZXh0LCBkZWx0YSwgbWluQ2VsbFNpemUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgY2FsY01pZGRsZURlbHRhcyA9IChzaXplcywgX3ByZXYsIGluZGV4LCBuZXh0LCBkZWx0YSwgbWluQ2VsbFNpemUsIGlzUmVsYXRpdmUpID0+IGNhbGNMZWZ0RWRnZURlbHRhcyhzaXplcywgaW5kZXgsIG5leHQsIGRlbHRhLCBtaW5DZWxsU2l6ZSwgaXNSZWxhdGl2ZSk7XG4gICAgICBjb25zdCByZXNpemVUYWJsZSA9IChyZXNpemVyLCBkZWx0YSkgPT4gcmVzaXplcihkZWx0YSk7XG4gICAgICBjb25zdCBjYWxjUmlnaHRFZGdlRGVsdGFzID0gKHNpemVzLCBfcHJldiwgaW5kZXgsIGRlbHRhLCBtaW5DZWxsU2l6ZSwgaXNSZWxhdGl2ZSkgPT4ge1xuICAgICAgICBpZiAoaXNSZWxhdGl2ZSkge1xuICAgICAgICAgIHJldHVybiBjYWxjUmVsYXRpdmVEZWx0YXMoc2l6ZXMsIGluZGV4LCBkZWx0YSwgbWluQ2VsbFNpemUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNsYW1wZWREZWx0YSA9IGNsYW1wTmVnYXRpdmVEZWx0YShzaXplcywgaW5kZXgsIGRlbHRhLCBtaW5DZWxsU2l6ZSk7XG4gICAgICAgICAgcmV0dXJuIHplcm8oc2l6ZXMuc2xpY2UoMCwgaW5kZXgpKS5jb25jYXQoW2NsYW1wZWREZWx0YV0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgY2FsY1JlZGVzdHJpYnV0ZWRXaWR0aHMgPSAoc2l6ZXMsIHRvdGFsV2lkdGgsIHBpeGVsRGVsdGEsIGlzUmVsYXRpdmUpID0+IHtcbiAgICAgICAgaWYgKGlzUmVsYXRpdmUpIHtcbiAgICAgICAgICBjb25zdCB0YWJsZVdpZHRoID0gdG90YWxXaWR0aCArIHBpeGVsRGVsdGE7XG4gICAgICAgICAgY29uc3QgcmF0aW8gPSB0YWJsZVdpZHRoIC8gdG90YWxXaWR0aDtcbiAgICAgICAgICBjb25zdCBuZXdTaXplcyA9IG1hcCQxKHNpemVzLCBzaXplID0+IHNpemUgLyByYXRpbyk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlbHRhOiByYXRpbyAqIDEwMCAtIDEwMCxcbiAgICAgICAgICAgIG5ld1NpemVzXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVsdGE6IHBpeGVsRGVsdGEsXG4gICAgICAgICAgICBuZXdTaXplczogc2l6ZXNcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzaXplVGFibGUsXG4gICAgICAgIGNsYW1wVGFibGVEZWx0YTogY2xhbXBOZWdhdGl2ZURlbHRhLFxuICAgICAgICBjYWxjTGVmdEVkZ2VEZWx0YXMsXG4gICAgICAgIGNhbGNNaWRkbGVEZWx0YXMsXG4gICAgICAgIGNhbGNSaWdodEVkZ2VEZWx0YXMsXG4gICAgICAgIGNhbGNSZWRlc3RyaWJ1dGVkV2lkdGhzXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgcHJlc2VydmVUYWJsZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGNMZWZ0RWRnZURlbHRhcyA9IChzaXplcywgaW5kZXgsIG5leHQsIGRlbHRhLCBtaW5DZWxsU2l6ZSkgPT4ge1xuICAgICAgICBjb25zdCBpZHggPSBkZWx0YSA+PSAwID8gbmV4dCA6IGluZGV4O1xuICAgICAgICBjb25zdCBjbGFtcGVkRGVsdGEgPSBjbGFtcERlbHRhKHNpemVzLCBpZHgsIGRlbHRhLCBtaW5DZWxsU2l6ZSk7XG4gICAgICAgIHJldHVybiBzdXJyb3VuZChzaXplcywgaW5kZXgsIG5leHQgKyAxLCBbXG4gICAgICAgICAgY2xhbXBlZERlbHRhLFxuICAgICAgICAgIC1jbGFtcGVkRGVsdGFcbiAgICAgICAgXSwgemVybyk7XG4gICAgICB9O1xuICAgICAgY29uc3QgY2FsY01pZGRsZURlbHRhcyA9IChzaXplcywgX3ByZXYsIGluZGV4LCBuZXh0LCBkZWx0YSwgbWluQ2VsbFNpemUpID0+IGNhbGNMZWZ0RWRnZURlbHRhcyhzaXplcywgaW5kZXgsIG5leHQsIGRlbHRhLCBtaW5DZWxsU2l6ZSk7XG4gICAgICBjb25zdCByZXNpemVUYWJsZSA9IChyZXNpemVyLCBkZWx0YSwgaXNMYXN0Q29sdW1uKSA9PiB7XG4gICAgICAgIGlmIChpc0xhc3RDb2x1bW4pIHtcbiAgICAgICAgICByZXNpemVyKGRlbHRhKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNhbGNSaWdodEVkZ2VEZWx0YXMgPSAoc2l6ZXMsIF9wcmV2LCBfaW5kZXgsIGRlbHRhLCBfbWluQ2VsbFNpemUsIGlzUmVsYXRpdmUpID0+IHtcbiAgICAgICAgaWYgKGlzUmVsYXRpdmUpIHtcbiAgICAgICAgICByZXR1cm4gemVybyhzaXplcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZGlmZiA9IGRlbHRhIC8gc2l6ZXMubGVuZ3RoO1xuICAgICAgICAgIHJldHVybiBtYXAkMShzaXplcywgY29uc3RhbnQoZGlmZikpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgY2xhbXBUYWJsZURlbHRhID0gKHNpemVzLCBpbmRleCwgZGVsdGEsIG1pbkNlbGxTaXplLCBpc0xhc3RDb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKGlzTGFzdENvbHVtbikge1xuICAgICAgICAgIGlmIChkZWx0YSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVsdGE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG1heERlbHRhID0gZm9sZGwoc2l6ZXMsIChhLCBiKSA9PiBhICsgYiAtIG1pbkNlbGxTaXplLCAwKTtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCgtbWF4RGVsdGEsIGRlbHRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGNsYW1wTmVnYXRpdmVEZWx0YShzaXplcywgaW5kZXgsIGRlbHRhLCBtaW5DZWxsU2l6ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBjYWxjUmVkZXN0cmlidXRlZFdpZHRocyA9IChzaXplcywgX3RvdGFsV2lkdGgsIF9waXhlbERlbHRhLCBfaXNSZWxhdGl2ZSkgPT4gKHtcbiAgICAgICAgZGVsdGE6IDAsXG4gICAgICAgIG5ld1NpemVzOiBzaXplc1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXNpemVUYWJsZSxcbiAgICAgICAgY2xhbXBUYWJsZURlbHRhLFxuICAgICAgICBjYWxjTGVmdEVkZ2VEZWx0YXMsXG4gICAgICAgIGNhbGNNaWRkbGVEZWx0YXMsXG4gICAgICAgIGNhbGNSaWdodEVkZ2VEZWx0YXMsXG4gICAgICAgIGNhbGNSZWRlc3RyaWJ1dGVkV2lkdGhzXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRHcmlkU2l6ZSA9IHRhYmxlID0+IHtcbiAgICAgIGNvbnN0IHdhcmVob3VzZSA9IFdhcmVob3VzZS5mcm9tVGFibGUodGFibGUpO1xuICAgICAgcmV0dXJuIHdhcmVob3VzZS5ncmlkO1xuICAgIH07XG5cbiAgICBjb25zdCBpc0hlYWRlckNlbGwgPSBpc1RhZygndGgnKTtcbiAgICBjb25zdCBpc0hlYWRlckNlbGxzID0gY2VsbHMgPT4gZm9yYWxsKGNlbGxzLCBjZWxsID0+IGlzSGVhZGVyQ2VsbChjZWxsLmVsZW1lbnQpKTtcbiAgICBjb25zdCBnZXRSb3dIZWFkZXJUeXBlID0gKGlzSGVhZGVyUm93LCBpc0hlYWRlckNlbGxzKSA9PiB7XG4gICAgICBpZiAoaXNIZWFkZXJSb3cgJiYgaXNIZWFkZXJDZWxscykge1xuICAgICAgICByZXR1cm4gJ3NlY3Rpb25DZWxscyc7XG4gICAgICB9IGVsc2UgaWYgKGlzSGVhZGVyUm93KSB7XG4gICAgICAgIHJldHVybiAnc2VjdGlvbic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJ2NlbGxzJztcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdldFJvd1R5cGUgPSByb3cgPT4ge1xuICAgICAgY29uc3QgaXNIZWFkZXJSb3cgPSByb3cuc2VjdGlvbiA9PT0gJ3RoZWFkJztcbiAgICAgIGNvbnN0IGlzSGVhZGVyQ2VsbHMgPSBpcyhmaW5kQ29tbW9uQ2VsbFR5cGUocm93LmNlbGxzKSwgJ3RoJyk7XG4gICAgICBpZiAocm93LnNlY3Rpb24gPT09ICd0Zm9vdCcpIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogJ2Zvb3RlcicgfTtcbiAgICAgIH0gZWxzZSBpZiAoaXNIZWFkZXJSb3cgfHwgaXNIZWFkZXJDZWxscykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6ICdoZWFkZXInLFxuICAgICAgICAgIHN1YlR5cGU6IGdldFJvd0hlYWRlclR5cGUoaXNIZWFkZXJSb3csIGlzSGVhZGVyQ2VsbHMpXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4geyB0eXBlOiAnYm9keScgfTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRDb21tb25DZWxsVHlwZSA9IGNlbGxzID0+IHtcbiAgICAgIGNvbnN0IGhlYWRlckNlbGxzID0gZmlsdGVyJDIoY2VsbHMsIGNlbGwgPT4gaXNIZWFkZXJDZWxsKGNlbGwuZWxlbWVudCkpO1xuICAgICAgaWYgKGhlYWRlckNlbGxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSgndGQnKTtcbiAgICAgIH0gZWxzZSBpZiAoaGVhZGVyQ2VsbHMubGVuZ3RoID09PSBjZWxscy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoJ3RoJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZmluZENvbW1vblJvd1R5cGUgPSByb3dzID0+IHtcbiAgICAgIGNvbnN0IHJvd1R5cGVzID0gbWFwJDEocm93cywgcm93ID0+IGdldFJvd1R5cGUocm93KS50eXBlKTtcbiAgICAgIGNvbnN0IGhhc0hlYWRlciA9IGNvbnRhaW5zJDIocm93VHlwZXMsICdoZWFkZXInKTtcbiAgICAgIGNvbnN0IGhhc0Zvb3RlciA9IGNvbnRhaW5zJDIocm93VHlwZXMsICdmb290ZXInKTtcbiAgICAgIGlmICghaGFzSGVhZGVyICYmICFoYXNGb290ZXIpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoJ2JvZHknKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGhhc0JvZHkgPSBjb250YWlucyQyKHJvd1R5cGVzLCAnYm9keScpO1xuICAgICAgICBpZiAoaGFzSGVhZGVyICYmICFoYXNCb2R5ICYmICFoYXNGb290ZXIpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSgnaGVhZGVyJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWhhc0hlYWRlciAmJiAhaGFzQm9keSAmJiBoYXNGb290ZXIpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSgnZm9vdGVyJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZmluZFRhYmxlUm93SGVhZGVyVHlwZSA9IHdhcmVob3VzZSA9PiBmaW5kTWFwKHdhcmVob3VzZS5hbGwsIHJvdyA9PiB7XG4gICAgICBjb25zdCByb3dUeXBlID0gZ2V0Um93VHlwZShyb3cpO1xuICAgICAgcmV0dXJuIHJvd1R5cGUudHlwZSA9PT0gJ2hlYWRlcicgPyBPcHRpb25hbC5mcm9tKHJvd1R5cGUuc3ViVHlwZSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1DZWxsID0gKGNlbGwsIGNvbXBhcmF0b3IsIHN1YnN0aXR1dGlvbikgPT4gZWxlbWVudG5ldyhzdWJzdGl0dXRpb24oY2VsbC5lbGVtZW50LCBjb21wYXJhdG9yKSwgdHJ1ZSwgY2VsbC5pc0xvY2tlZCk7XG4gICAgY29uc3QgdHJhbnNmb3JtUm93ID0gKHJvdywgc2VjdGlvbikgPT4gcm93LnNlY3Rpb24gIT09IHNlY3Rpb24gPyByb3djZWxscyhyb3cuZWxlbWVudCwgcm93LmNlbGxzLCBzZWN0aW9uLCByb3cuaXNOZXcpIDogcm93O1xuICAgIGNvbnN0IHNlY3Rpb24gPSAoKSA9PiAoe1xuICAgICAgdHJhbnNmb3JtUm93LFxuICAgICAgdHJhbnNmb3JtQ2VsbDogKGNlbGwsIGNvbXBhcmF0b3IsIHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgICBjb25zdCBuZXdDZWxsID0gc3Vic3RpdHV0aW9uKGNlbGwuZWxlbWVudCwgY29tcGFyYXRvcik7XG4gICAgICAgIGNvbnN0IGZpeGVkQ2VsbCA9IG5hbWUobmV3Q2VsbCkgIT09ICd0ZCcgPyBtdXRhdGUkMShuZXdDZWxsLCAndGQnKSA6IG5ld0NlbGw7XG4gICAgICAgIHJldHVybiBlbGVtZW50bmV3KGZpeGVkQ2VsbCwgY2VsbC5pc05ldywgY2VsbC5pc0xvY2tlZCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3Qgc2VjdGlvbkNlbGxzID0gKCkgPT4gKHtcbiAgICAgIHRyYW5zZm9ybVJvdyxcbiAgICAgIHRyYW5zZm9ybUNlbGxcbiAgICB9KTtcbiAgICBjb25zdCBjZWxscyA9ICgpID0+ICh7XG4gICAgICB0cmFuc2Zvcm1Sb3c6IChyb3csIHNlY3Rpb24pID0+IHtcbiAgICAgICAgY29uc3QgbmV3U2VjdGlvbiA9IHNlY3Rpb24gPT09ICd0aGVhZCcgPyAndGJvZHknIDogc2VjdGlvbjtcbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybVJvdyhyb3csIG5ld1NlY3Rpb24pO1xuICAgICAgfSxcbiAgICAgIHRyYW5zZm9ybUNlbGxcbiAgICB9KTtcbiAgICBjb25zdCBmYWxsYmFjayA9ICgpID0+ICh7XG4gICAgICB0cmFuc2Zvcm1Sb3c6IGlkZW50aXR5LFxuICAgICAgdHJhbnNmb3JtQ2VsbFxuICAgIH0pO1xuICAgIGNvbnN0IGdldFRhYmxlU2VjdGlvblR5cGUgPSAodGFibGUsIGZhbGxiYWNrKSA9PiB7XG4gICAgICBjb25zdCB3YXJlaG91c2UgPSBXYXJlaG91c2UuZnJvbVRhYmxlKHRhYmxlKTtcbiAgICAgIGNvbnN0IHR5cGUgPSBmaW5kVGFibGVSb3dIZWFkZXJUeXBlKHdhcmVob3VzZSkuZ2V0T3IoZmFsbGJhY2spO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdzZWN0aW9uJzpcbiAgICAgICAgcmV0dXJuIHNlY3Rpb24oKTtcbiAgICAgIGNhc2UgJ3NlY3Rpb25DZWxscyc6XG4gICAgICAgIHJldHVybiBzZWN0aW9uQ2VsbHMoKTtcbiAgICAgIGNhc2UgJ2NlbGxzJzpcbiAgICAgICAgcmV0dXJuIGNlbGxzKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBUYWJsZVNlY3Rpb24gPSB7XG4gICAgICBnZXRUYWJsZVNlY3Rpb25UeXBlLFxuICAgICAgc2VjdGlvbixcbiAgICAgIHNlY3Rpb25DZWxscyxcbiAgICAgIGNlbGxzLFxuICAgICAgZmFsbGJhY2tcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0SWZOb3QgPSAoZWxlbWVudCwgcHJvcGVydHksIHZhbHVlLCBpZ25vcmUpID0+IHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gaWdub3JlKSB7XG4gICAgICAgIHJlbW92ZSQ3KGVsZW1lbnQsIHByb3BlcnR5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldCQyKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnQkMSA9ICh0YWJsZSwgc2VsZWN0b3IsIGVsZW1lbnQpID0+IHtcbiAgICAgIGxhc3QkMihjaGlsZHJlbih0YWJsZSwgc2VsZWN0b3IpKS5mb2xkKCgpID0+IHByZXBlbmQodGFibGUsIGVsZW1lbnQpLCBjaGlsZCA9PiBhZnRlciQ1KGNoaWxkLCBlbGVtZW50KSk7XG4gICAgfTtcbiAgICBjb25zdCBnZW5lcmF0ZVNlY3Rpb24gPSAodGFibGUsIHNlY3Rpb25OYW1lKSA9PiB7XG4gICAgICBjb25zdCBzZWN0aW9uID0gY2hpbGQodGFibGUsIHNlY3Rpb25OYW1lKS5nZXRPclRodW5rKCgpID0+IHtcbiAgICAgICAgY29uc3QgbmV3U2VjdGlvbiA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKHNlY3Rpb25OYW1lLCBvd25lcih0YWJsZSkuZG9tKTtcbiAgICAgICAgaWYgKHNlY3Rpb25OYW1lID09PSAndGhlYWQnKSB7XG4gICAgICAgICAgaW5zZXJ0JDEodGFibGUsICdjYXB0aW9uLGNvbGdyb3VwJywgbmV3U2VjdGlvbik7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VjdGlvbk5hbWUgPT09ICdjb2xncm91cCcpIHtcbiAgICAgICAgICBpbnNlcnQkMSh0YWJsZSwgJ2NhcHRpb24nLCBuZXdTZWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcHBlbmQkMSh0YWJsZSwgbmV3U2VjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld1NlY3Rpb247XG4gICAgICB9KTtcbiAgICAgIGVtcHR5KHNlY3Rpb24pO1xuICAgICAgcmV0dXJuIHNlY3Rpb247XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXIkMSA9ICh0YWJsZSwgZ3JpZCkgPT4ge1xuICAgICAgY29uc3QgbmV3Um93cyA9IFtdO1xuICAgICAgY29uc3QgbmV3Q2VsbHMgPSBbXTtcbiAgICAgIGNvbnN0IHN5bmNSb3dzID0gZ3JpZFNlY3Rpb24gPT4gbWFwJDEoZ3JpZFNlY3Rpb24sIHJvdyA9PiB7XG4gICAgICAgIGlmIChyb3cuaXNOZXcpIHtcbiAgICAgICAgICBuZXdSb3dzLnB1c2gocm93LmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRyID0gcm93LmVsZW1lbnQ7XG4gICAgICAgIGVtcHR5KHRyKTtcbiAgICAgICAgZWFjaCQyKHJvdy5jZWxscywgY2VsbCA9PiB7XG4gICAgICAgICAgaWYgKGNlbGwuaXNOZXcpIHtcbiAgICAgICAgICAgIG5ld0NlbGxzLnB1c2goY2VsbC5lbGVtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0SWZOb3QoY2VsbC5lbGVtZW50LCAnY29sc3BhbicsIGNlbGwuY29sc3BhbiwgMSk7XG4gICAgICAgICAgc2V0SWZOb3QoY2VsbC5lbGVtZW50LCAncm93c3BhbicsIGNlbGwucm93c3BhbiwgMSk7XG4gICAgICAgICAgYXBwZW5kJDEodHIsIGNlbGwuZWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHI7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN5bmNDb2xHcm91cCA9IGdyaWRTZWN0aW9uID0+IGJpbmQkMihncmlkU2VjdGlvbiwgY29sR3JvdXAgPT4gbWFwJDEoY29sR3JvdXAuY2VsbHMsIGNvbCA9PiB7XG4gICAgICAgIHNldElmTm90KGNvbC5lbGVtZW50LCAnc3BhbicsIGNvbC5jb2xzcGFuLCAxKTtcbiAgICAgICAgcmV0dXJuIGNvbC5lbGVtZW50O1xuICAgICAgfSkpO1xuICAgICAgY29uc3QgcmVuZGVyU2VjdGlvbiA9IChncmlkU2VjdGlvbiwgc2VjdGlvbk5hbWUpID0+IHtcbiAgICAgICAgY29uc3Qgc2VjdGlvbiA9IGdlbmVyYXRlU2VjdGlvbih0YWJsZSwgc2VjdGlvbk5hbWUpO1xuICAgICAgICBjb25zdCBzeW5jID0gc2VjdGlvbk5hbWUgPT09ICdjb2xncm91cCcgPyBzeW5jQ29sR3JvdXAgOiBzeW5jUm93cztcbiAgICAgICAgY29uc3Qgc2VjdGlvbkVsZW1zID0gc3luYyhncmlkU2VjdGlvbik7XG4gICAgICAgIGFwcGVuZChzZWN0aW9uLCBzZWN0aW9uRWxlbXMpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlbW92ZVNlY3Rpb24gPSBzZWN0aW9uTmFtZSA9PiB7XG4gICAgICAgIGNoaWxkKHRhYmxlLCBzZWN0aW9uTmFtZSkuZWFjaChyZW1vdmUkNik7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVuZGVyT3JSZW1vdmVTZWN0aW9uID0gKGdyaWRTZWN0aW9uLCBzZWN0aW9uTmFtZSkgPT4ge1xuICAgICAgICBpZiAoZ3JpZFNlY3Rpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlbmRlclNlY3Rpb24oZ3JpZFNlY3Rpb24sIHNlY3Rpb25OYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZW1vdmVTZWN0aW9uKHNlY3Rpb25OYW1lKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGhlYWRTZWN0aW9uID0gW107XG4gICAgICBjb25zdCBib2R5U2VjdGlvbiA9IFtdO1xuICAgICAgY29uc3QgZm9vdFNlY3Rpb24gPSBbXTtcbiAgICAgIGNvbnN0IGNvbHVtbkdyb3Vwc1NlY3Rpb24gPSBbXTtcbiAgICAgIGVhY2gkMihncmlkLCByb3cgPT4ge1xuICAgICAgICBzd2l0Y2ggKHJvdy5zZWN0aW9uKSB7XG4gICAgICAgIGNhc2UgJ3RoZWFkJzpcbiAgICAgICAgICBoZWFkU2VjdGlvbi5wdXNoKHJvdyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Rib2R5JzpcbiAgICAgICAgICBib2R5U2VjdGlvbi5wdXNoKHJvdyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Rmb290JzpcbiAgICAgICAgICBmb290U2VjdGlvbi5wdXNoKHJvdyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NvbGdyb3VwJzpcbiAgICAgICAgICBjb2x1bW5Hcm91cHNTZWN0aW9uLnB1c2gocm93KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZW5kZXJPclJlbW92ZVNlY3Rpb24oY29sdW1uR3JvdXBzU2VjdGlvbiwgJ2NvbGdyb3VwJyk7XG4gICAgICByZW5kZXJPclJlbW92ZVNlY3Rpb24oaGVhZFNlY3Rpb24sICd0aGVhZCcpO1xuICAgICAgcmVuZGVyT3JSZW1vdmVTZWN0aW9uKGJvZHlTZWN0aW9uLCAndGJvZHknKTtcbiAgICAgIHJlbmRlck9yUmVtb3ZlU2VjdGlvbihmb290U2VjdGlvbiwgJ3Rmb290Jyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXdSb3dzLFxuICAgICAgICBuZXdDZWxsc1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNvcHkgPSBncmlkID0+IG1hcCQxKGdyaWQsIHJvdyA9PiB7XG4gICAgICBjb25zdCB0ciA9IHNoYWxsb3cocm93LmVsZW1lbnQpO1xuICAgICAgZWFjaCQyKHJvdy5jZWxscywgY2VsbCA9PiB7XG4gICAgICAgIGNvbnN0IGNsb25lZENlbGwgPSBkZWVwKGNlbGwuZWxlbWVudCk7XG4gICAgICAgIHNldElmTm90KGNsb25lZENlbGwsICdjb2xzcGFuJywgY2VsbC5jb2xzcGFuLCAxKTtcbiAgICAgICAgc2V0SWZOb3QoY2xvbmVkQ2VsbCwgJ3Jvd3NwYW4nLCBjZWxsLnJvd3NwYW4sIDEpO1xuICAgICAgICBhcHBlbmQkMSh0ciwgY2xvbmVkQ2VsbCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cjtcbiAgICB9KTtcblxuICAgIGNvbnN0IGdldENvbHVtbiA9IChncmlkLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIG1hcCQxKGdyaWQsIHJvdyA9PiB7XG4gICAgICAgIHJldHVybiBnZXRDZWxsKHJvdywgaW5kZXgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRSb3cgPSAoZ3JpZCwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBncmlkW2luZGV4XTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmREaWZmID0gKHhzLCBjb21wKSA9PiB7XG4gICAgICBpZiAoeHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgICAgY29uc3QgZmlyc3QgPSB4c1swXTtcbiAgICAgIGNvbnN0IGluZGV4ID0gZmluZEluZGV4KHhzLCB4ID0+IHtcbiAgICAgICAgcmV0dXJuICFjb21wKGZpcnN0LmVsZW1lbnQsIHguZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBpbmRleC5nZXRPcih4cy5sZW5ndGgpO1xuICAgIH07XG4gICAgY29uc3Qgc3ViZ3JpZCA9IChncmlkLCByb3csIGNvbHVtbiwgY29tcGFyYXRvcikgPT4ge1xuICAgICAgY29uc3QgZ3JpZFJvdyA9IGdldFJvdyhncmlkLCByb3cpO1xuICAgICAgY29uc3QgaXNDb2xSb3cgPSBncmlkUm93LnNlY3Rpb24gPT09ICdjb2xncm91cCc7XG4gICAgICBjb25zdCBjb2xzcGFuID0gZmluZERpZmYoZ3JpZFJvdy5jZWxscy5zbGljZShjb2x1bW4pLCBjb21wYXJhdG9yKTtcbiAgICAgIGNvbnN0IHJvd3NwYW4gPSBpc0NvbFJvdyA/IDEgOiBmaW5kRGlmZihnZXRDb2x1bW4oZ3JpZC5zbGljZShyb3cpLCBjb2x1bW4pLCBjb21wYXJhdG9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbHNwYW4sXG4gICAgICAgIHJvd3NwYW5cbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHRvRGV0YWlscyA9IChncmlkLCBjb21wYXJhdG9yKSA9PiB7XG4gICAgICBjb25zdCBzZWVuID0gbWFwJDEoZ3JpZCwgcm93ID0+IG1hcCQxKHJvdy5jZWxscywgbmV2ZXIpKTtcbiAgICAgIGNvbnN0IHVwZGF0ZVNlZW4gPSAocm93SW5kZXgsIGNvbHVtbkluZGV4LCByb3dzcGFuLCBjb2xzcGFuKSA9PiB7XG4gICAgICAgIGZvciAobGV0IHJvdyA9IHJvd0luZGV4OyByb3cgPCByb3dJbmRleCArIHJvd3NwYW47IHJvdysrKSB7XG4gICAgICAgICAgZm9yIChsZXQgY29sdW1uID0gY29sdW1uSW5kZXg7IGNvbHVtbiA8IGNvbHVtbkluZGV4ICsgY29sc3BhbjsgY29sdW1uKyspIHtcbiAgICAgICAgICAgIHNlZW5bcm93XVtjb2x1bW5dID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gbWFwJDEoZ3JpZCwgKHJvdywgcm93SW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgZGV0YWlscyA9IGJpbmQkMihyb3cuY2VsbHMsIChjZWxsLCBjb2x1bW5JbmRleCkgPT4ge1xuICAgICAgICAgIGlmIChzZWVuW3Jvd0luZGV4XVtjb2x1bW5JbmRleF0gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBzdWJncmlkKGdyaWQsIHJvd0luZGV4LCBjb2x1bW5JbmRleCwgY29tcGFyYXRvcik7XG4gICAgICAgICAgICB1cGRhdGVTZWVuKHJvd0luZGV4LCBjb2x1bW5JbmRleCwgcmVzdWx0LnJvd3NwYW4sIHJlc3VsdC5jb2xzcGFuKTtcbiAgICAgICAgICAgIHJldHVybiBbZGV0YWlsbmV3KGNlbGwuZWxlbWVudCwgcmVzdWx0LnJvd3NwYW4sIHJlc3VsdC5jb2xzcGFuLCBjZWxsLmlzTmV3KV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcm93ZGV0YWlsbmV3KHJvdy5lbGVtZW50LCBkZXRhaWxzLCByb3cuc2VjdGlvbiwgcm93LmlzTmV3KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgdG9HcmlkID0gKHdhcmVob3VzZSwgZ2VuZXJhdG9ycywgaXNOZXcpID0+IHtcbiAgICAgIGNvbnN0IGdyaWQgPSBbXTtcbiAgICAgIGVhY2gkMih3YXJlaG91c2UuY29sZ3JvdXBzLCBjb2xncm91cCA9PiB7XG4gICAgICAgIGNvbnN0IGNvbGdyb3VwQ29scyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBjb2x1bW5JbmRleCA9IDA7IGNvbHVtbkluZGV4IDwgd2FyZWhvdXNlLmdyaWQuY29sdW1uczsgY29sdW1uSW5kZXgrKykge1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBXYXJlaG91c2UuZ2V0Q29sdW1uQXQod2FyZWhvdXNlLCBjb2x1bW5JbmRleCkubWFwKGNvbHVtbiA9PiBlbGVtZW50bmV3KGNvbHVtbi5lbGVtZW50LCBpc05ldywgZmFsc2UpKS5nZXRPclRodW5rKCgpID0+IGVsZW1lbnRuZXcoZ2VuZXJhdG9ycy5jb2xHYXAoKSwgdHJ1ZSwgZmFsc2UpKTtcbiAgICAgICAgICBjb2xncm91cENvbHMucHVzaChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBncmlkLnB1c2gocm93Y2VsbHMoY29sZ3JvdXAuZWxlbWVudCwgY29sZ3JvdXBDb2xzLCAnY29sZ3JvdXAnLCBpc05ldykpO1xuICAgICAgfSk7XG4gICAgICBmb3IgKGxldCByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwgd2FyZWhvdXNlLmdyaWQucm93czsgcm93SW5kZXgrKykge1xuICAgICAgICBjb25zdCByb3dDZWxscyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBjb2x1bW5JbmRleCA9IDA7IGNvbHVtbkluZGV4IDwgd2FyZWhvdXNlLmdyaWQuY29sdW1uczsgY29sdW1uSW5kZXgrKykge1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBXYXJlaG91c2UuZ2V0QXQod2FyZWhvdXNlLCByb3dJbmRleCwgY29sdW1uSW5kZXgpLm1hcChpdGVtID0+IGVsZW1lbnRuZXcoaXRlbS5lbGVtZW50LCBpc05ldywgaXRlbS5pc0xvY2tlZCkpLmdldE9yVGh1bmsoKCkgPT4gZWxlbWVudG5ldyhnZW5lcmF0b3JzLmdhcCgpLCB0cnVlLCBmYWxzZSkpO1xuICAgICAgICAgIHJvd0NlbGxzLnB1c2goZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm93RGV0YWlsID0gd2FyZWhvdXNlLmFsbFtyb3dJbmRleF07XG4gICAgICAgIGNvbnN0IHJvdyA9IHJvd2NlbGxzKHJvd0RldGFpbC5lbGVtZW50LCByb3dDZWxscywgcm93RGV0YWlsLnNlY3Rpb24sIGlzTmV3KTtcbiAgICAgICAgZ3JpZC5wdXNoKHJvdyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ3JpZDtcbiAgICB9O1xuXG4gICAgY29uc3QgZnJvbVdhcmVob3VzZSA9ICh3YXJlaG91c2UsIGdlbmVyYXRvcnMpID0+IHRvR3JpZCh3YXJlaG91c2UsIGdlbmVyYXRvcnMsIGZhbHNlKTtcbiAgICBjb25zdCB0b0RldGFpbExpc3QgPSBncmlkID0+IHRvRGV0YWlscyhncmlkLCBlcSQxKTtcbiAgICBjb25zdCBmaW5kSW5XYXJlaG91c2UgPSAod2FyZWhvdXNlLCBlbGVtZW50KSA9PiBmaW5kTWFwKHdhcmVob3VzZS5hbGwsIHIgPT4gZmluZCQxKHIuY2VsbHMsIGUgPT4gZXEkMShlbGVtZW50LCBlLmVsZW1lbnQpKSk7XG4gICAgY29uc3QgZXh0cmFjdENlbGxzID0gKHdhcmVob3VzZSwgdGFyZ2V0LCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGNvbnN0IGRldGFpbHMgPSBtYXAkMSh0YXJnZXQuc2VsZWN0aW9uLCBjZWxsJDEgPT4ge1xuICAgICAgICByZXR1cm4gY2VsbChjZWxsJDEpLmJpbmQobGMgPT4gZmluZEluV2FyZWhvdXNlKHdhcmVob3VzZSwgbGMpKS5maWx0ZXIocHJlZGljYXRlKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2VsbHMgPSBjYXQoZGV0YWlscyk7XG4gICAgICByZXR1cm4gc29tZUlmKGNlbGxzLmxlbmd0aCA+IDAsIGNlbGxzKTtcbiAgICB9O1xuICAgIGNvbnN0IHJ1biA9IChvcGVyYXRpb24sIGV4dHJhY3QsIGFkanVzdG1lbnQsIHBvc3RBY3Rpb24sIGdlbldyYXBwZXJzKSA9PiAodGFibGUsIHRhcmdldCwgZ2VuZXJhdG9ycywgYmVoYXZpb3VycykgPT4ge1xuICAgICAgY29uc3Qgd2FyZWhvdXNlID0gV2FyZWhvdXNlLmZyb21UYWJsZSh0YWJsZSk7XG4gICAgICBjb25zdCB0YWJsZVNlY3Rpb24gPSBPcHRpb25hbC5mcm9tKGJlaGF2aW91cnMgPT09IG51bGwgfHwgYmVoYXZpb3VycyA9PT0gdm9pZCAwID8gdm9pZCAwIDogYmVoYXZpb3Vycy5zZWN0aW9uKS5nZXRPclRodW5rKFRhYmxlU2VjdGlvbi5mYWxsYmFjayk7XG4gICAgICBjb25zdCBvdXRwdXQgPSBleHRyYWN0KHdhcmVob3VzZSwgdGFyZ2V0KS5tYXAoaW5mbyA9PiB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gZnJvbVdhcmVob3VzZSh3YXJlaG91c2UsIGdlbmVyYXRvcnMpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBvcGVyYXRpb24obW9kZWwsIGluZm8sIGVxJDEsIGdlbldyYXBwZXJzKGdlbmVyYXRvcnMpLCB0YWJsZVNlY3Rpb24pO1xuICAgICAgICBjb25zdCBsb2NrZWRDb2x1bW5zID0gZ2V0TG9ja2VkQ29sdW1uc0Zyb21HcmlkKHJlc3VsdC5ncmlkKTtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRvRGV0YWlsTGlzdChyZXN1bHQuZ3JpZCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaW5mbyxcbiAgICAgICAgICBncmlkLFxuICAgICAgICAgIGN1cnNvcjogcmVzdWx0LmN1cnNvcixcbiAgICAgICAgICBsb2NrZWRDb2x1bW5zXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvdXRwdXQuYmluZChvdXQgPT4ge1xuICAgICAgICBjb25zdCBuZXdFbGVtZW50cyA9IHJlbmRlciQxKHRhYmxlLCBvdXQuZ3JpZCk7XG4gICAgICAgIGNvbnN0IHRhYmxlU2l6aW5nID0gT3B0aW9uYWwuZnJvbShiZWhhdmlvdXJzID09PSBudWxsIHx8IGJlaGF2aW91cnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJlaGF2aW91cnMuc2l6aW5nKS5nZXRPclRodW5rKCgpID0+IFRhYmxlU2l6ZS5nZXRUYWJsZVNpemUodGFibGUpKTtcbiAgICAgICAgY29uc3QgcmVzaXppbmcgPSBPcHRpb25hbC5mcm9tKGJlaGF2aW91cnMgPT09IG51bGwgfHwgYmVoYXZpb3VycyA9PT0gdm9pZCAwID8gdm9pZCAwIDogYmVoYXZpb3Vycy5yZXNpemUpLmdldE9yVGh1bmsocHJlc2VydmVUYWJsZSk7XG4gICAgICAgIGFkanVzdG1lbnQodGFibGUsIG91dC5ncmlkLCBvdXQuaW5mbywge1xuICAgICAgICAgIHNpemluZzogdGFibGVTaXppbmcsXG4gICAgICAgICAgcmVzaXplOiByZXNpemluZyxcbiAgICAgICAgICBzZWN0aW9uOiB0YWJsZVNlY3Rpb25cbiAgICAgICAgfSk7XG4gICAgICAgIHBvc3RBY3Rpb24odGFibGUpO1xuICAgICAgICByZW1vdmUkNyh0YWJsZSwgTE9DS0VEX0NPTF9BVFRSKTtcbiAgICAgICAgaWYgKG91dC5sb2NrZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzZXQkMih0YWJsZSwgTE9DS0VEX0NPTF9BVFRSLCBvdXQubG9ja2VkQ29sdW1ucy5qb2luKCcsJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICBjdXJzb3I6IG91dC5jdXJzb3IsXG4gICAgICAgICAgbmV3Um93czogbmV3RWxlbWVudHMubmV3Um93cyxcbiAgICAgICAgICBuZXdDZWxsczogbmV3RWxlbWVudHMubmV3Q2VsbHNcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG9uUGFzdGUgPSAod2FyZWhvdXNlLCB0YXJnZXQpID0+IGNlbGwodGFyZ2V0LmVsZW1lbnQpLmJpbmQoY2VsbCA9PiBmaW5kSW5XYXJlaG91c2Uod2FyZWhvdXNlLCBjZWxsKS5tYXAoZGV0YWlscyA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHtcbiAgICAgICAgLi4uZGV0YWlscyxcbiAgICAgICAgZ2VuZXJhdG9yczogdGFyZ2V0LmdlbmVyYXRvcnMsXG4gICAgICAgIGNsaXBib2FyZDogdGFyZ2V0LmNsaXBib2FyZFxuICAgICAgfTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KSk7XG4gICAgY29uc3Qgb25QYXN0ZUJ5RWRpdG9yID0gKHdhcmVob3VzZSwgdGFyZ2V0KSA9PiBleHRyYWN0Q2VsbHMod2FyZWhvdXNlLCB0YXJnZXQsIGFsd2F5cykubWFwKGNlbGxzID0+ICh7XG4gICAgICBjZWxscyxcbiAgICAgIGdlbmVyYXRvcnM6IHRhcmdldC5nZW5lcmF0b3JzLFxuICAgICAgY2xpcGJvYXJkOiB0YXJnZXQuY2xpcGJvYXJkXG4gICAgfSkpO1xuICAgIGNvbnN0IG9uTWVyZ2FibGUgPSAoX3dhcmVob3VzZSwgdGFyZ2V0KSA9PiB0YXJnZXQubWVyZ2FibGU7XG4gICAgY29uc3Qgb25Vbm1lcmdhYmxlID0gKF93YXJlaG91c2UsIHRhcmdldCkgPT4gdGFyZ2V0LnVubWVyZ2FibGU7XG4gICAgY29uc3Qgb25DZWxscyA9ICh3YXJlaG91c2UsIHRhcmdldCkgPT4gZXh0cmFjdENlbGxzKHdhcmVob3VzZSwgdGFyZ2V0LCBhbHdheXMpO1xuICAgIGNvbnN0IG9uVW5sb2NrZWRDZWxscyA9ICh3YXJlaG91c2UsIHRhcmdldCkgPT4gZXh0cmFjdENlbGxzKHdhcmVob3VzZSwgdGFyZ2V0LCBkZXRhaWwgPT4gIWRldGFpbC5pc0xvY2tlZCk7XG4gICAgY29uc3QgaXNVbmxvY2tlZFRhYmxlQ2VsbCA9ICh3YXJlaG91c2UsIGNlbGwpID0+IGZpbmRJbldhcmVob3VzZSh3YXJlaG91c2UsIGNlbGwpLmV4aXN0cyhkZXRhaWwgPT4gIWRldGFpbC5pc0xvY2tlZCk7XG4gICAgY29uc3QgYWxsVW5sb2NrZWQgPSAod2FyZWhvdXNlLCBjZWxscykgPT4gZm9yYWxsKGNlbGxzLCBjZWxsID0+IGlzVW5sb2NrZWRUYWJsZUNlbGwod2FyZWhvdXNlLCBjZWxsKSk7XG4gICAgY29uc3Qgb25VbmxvY2tlZE1lcmdhYmxlID0gKHdhcmVob3VzZSwgdGFyZ2V0KSA9PiBvbk1lcmdhYmxlKHdhcmVob3VzZSwgdGFyZ2V0KS5maWx0ZXIobWVyZ2VhYmxlID0+IGFsbFVubG9ja2VkKHdhcmVob3VzZSwgbWVyZ2VhYmxlLmNlbGxzKSk7XG4gICAgY29uc3Qgb25VbmxvY2tlZFVubWVyZ2FibGUgPSAod2FyZWhvdXNlLCB0YXJnZXQpID0+IG9uVW5tZXJnYWJsZSh3YXJlaG91c2UsIHRhcmdldCkuZmlsdGVyKGNlbGxzID0+IGFsbFVubG9ja2VkKHdhcmVob3VzZSwgY2VsbHMpKTtcblxuICAgIGNvbnN0IG1lcmdlJDIgPSAoZ3JpZCwgYm91bmRzLCBjb21wYXJhdG9yLCBzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHJvd3MgPSBleHRyYWN0R3JpZERldGFpbHMoZ3JpZCkucm93cztcbiAgICAgIGlmIChyb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZ3JpZDtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSBib3VuZHMuc3RhcnRSb3c7IGkgPD0gYm91bmRzLmZpbmlzaFJvdzsgaSsrKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBib3VuZHMuc3RhcnRDb2w7IGogPD0gYm91bmRzLmZpbmlzaENvbDsgaisrKSB7XG4gICAgICAgICAgY29uc3Qgcm93ID0gcm93c1tpXTtcbiAgICAgICAgICBjb25zdCBpc0xvY2tlZCA9IGdldENlbGwocm93LCBqKS5pc0xvY2tlZDtcbiAgICAgICAgICBtdXRhdGVDZWxsKHJvdywgaiwgZWxlbWVudG5ldyhzdWJzdGl0dXRpb24oKSwgZmFsc2UsIGlzTG9ja2VkKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBncmlkO1xuICAgIH07XG4gICAgY29uc3QgdW5tZXJnZSA9IChncmlkLCB0YXJnZXQsIGNvbXBhcmF0b3IsIHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3Qgcm93cyA9IGV4dHJhY3RHcmlkRGV0YWlscyhncmlkKS5yb3dzO1xuICAgICAgbGV0IGZpcnN0ID0gdHJ1ZTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNlbGxMZW5ndGgocm93c1swXSk7IGorKykge1xuICAgICAgICAgIGNvbnN0IHJvdyA9IHJvd3NbaV07XG4gICAgICAgICAgY29uc3QgY3VycmVudENlbGwgPSBnZXRDZWxsKHJvdywgaik7XG4gICAgICAgICAgY29uc3QgY3VycmVudENlbGxFbG0gPSBjdXJyZW50Q2VsbC5lbGVtZW50O1xuICAgICAgICAgIGNvbnN0IGlzVG9SZXBsYWNlID0gY29tcGFyYXRvcihjdXJyZW50Q2VsbEVsbSwgdGFyZ2V0KTtcbiAgICAgICAgICBpZiAoaXNUb1JlcGxhY2UgJiYgIWZpcnN0KSB7XG4gICAgICAgICAgICBtdXRhdGVDZWxsKHJvdywgaiwgZWxlbWVudG5ldyhzdWJzdGl0dXRpb24oKSwgdHJ1ZSwgY3VycmVudENlbGwuaXNMb2NrZWQpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzVG9SZXBsYWNlKSB7XG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGdyaWQ7XG4gICAgfTtcbiAgICBjb25zdCB1bmlxdWVDZWxscyA9IChyb3csIGNvbXBhcmF0b3IpID0+IHtcbiAgICAgIHJldHVybiBmb2xkbChyb3csIChyZXN0LCBjZWxsKSA9PiB7XG4gICAgICAgIHJldHVybiBleGlzdHMocmVzdCwgY3VycmVudENlbGwgPT4ge1xuICAgICAgICAgIHJldHVybiBjb21wYXJhdG9yKGN1cnJlbnRDZWxsLmVsZW1lbnQsIGNlbGwuZWxlbWVudCk7XG4gICAgICAgIH0pID8gcmVzdCA6IHJlc3QuY29uY2F0KFtjZWxsXSk7XG4gICAgICB9LCBbXSk7XG4gICAgfTtcbiAgICBjb25zdCBzcGxpdENvbHMgPSAoZ3JpZCwgaW5kZXgsIGNvbXBhcmF0b3IsIHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgaWYgKGluZGV4ID4gMCAmJiBpbmRleCA8IGdyaWRbMF0uY2VsbHMubGVuZ3RoKSB7XG4gICAgICAgIGVhY2gkMihncmlkLCByb3cgPT4ge1xuICAgICAgICAgIGNvbnN0IHByZXZDZWxsID0gcm93LmNlbGxzW2luZGV4IC0gMV07XG4gICAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgICAgY29uc3Qgc3Vic3RpdHV0ZSA9IHN1YnN0aXR1dGlvbigpO1xuICAgICAgICAgIHdoaWxlIChyb3cuY2VsbHMubGVuZ3RoID4gaW5kZXggKyBvZmZzZXQgJiYgY29tcGFyYXRvcihwcmV2Q2VsbC5lbGVtZW50LCByb3cuY2VsbHNbaW5kZXggKyBvZmZzZXRdLmVsZW1lbnQpKSB7XG4gICAgICAgICAgICBtdXRhdGVDZWxsKHJvdywgaW5kZXggKyBvZmZzZXQsIGVsZW1lbnRuZXcoc3Vic3RpdHV0ZSwgdHJ1ZSwgcm93LmNlbGxzW2luZGV4ICsgb2Zmc2V0XS5pc0xvY2tlZCkpO1xuICAgICAgICAgICAgb2Zmc2V0Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBncmlkO1xuICAgIH07XG4gICAgY29uc3Qgc3BsaXRSb3dzID0gKGdyaWQsIGluZGV4LCBjb21wYXJhdG9yLCBzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHJvd3MgPSBleHRyYWN0R3JpZERldGFpbHMoZ3JpZCkucm93cztcbiAgICAgIGlmIChpbmRleCA+IDAgJiYgaW5kZXggPCByb3dzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCByb3dQcmV2Q2VsbHMgPSByb3dzW2luZGV4IC0gMV0uY2VsbHM7XG4gICAgICAgIGNvbnN0IGNlbGxzID0gdW5pcXVlQ2VsbHMocm93UHJldkNlbGxzLCBjb21wYXJhdG9yKTtcbiAgICAgICAgZWFjaCQyKGNlbGxzLCBjZWxsID0+IHtcbiAgICAgICAgICBsZXQgcmVwbGFjZW1lbnQgPSBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4OyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjZWxsTGVuZ3RoKHJvd3NbMF0pOyBqKyspIHtcbiAgICAgICAgICAgICAgY29uc3Qgcm93ID0gcm93c1tpXTtcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IGdldENlbGwocm93LCBqKTtcbiAgICAgICAgICAgICAgY29uc3QgaXNUb1JlcGxhY2UgPSBjb21wYXJhdG9yKGN1cnJlbnQuZWxlbWVudCwgY2VsbC5lbGVtZW50KTtcbiAgICAgICAgICAgICAgaWYgKGlzVG9SZXBsYWNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50LmlzTm9uZSgpKSB7XG4gICAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IE9wdGlvbmFsLnNvbWUoc3Vic3RpdHV0aW9uKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5lYWNoKHN1YiA9PiB7XG4gICAgICAgICAgICAgICAgICBtdXRhdGVDZWxsKHJvdywgaiwgZWxlbWVudG5ldyhzdWIsIHRydWUsIGN1cnJlbnQuaXNMb2NrZWQpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ3JpZDtcbiAgICB9O1xuXG4gICAgY29uc3QgdmFsdWUkMSA9IHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IGFwcGx5SGVscGVyID0gZm4gPT4gZm4odmFsdWUpO1xuICAgICAgY29uc3QgY29uc3RIZWxwZXIgPSBjb25zdGFudCh2YWx1ZSk7XG4gICAgICBjb25zdCBvdXRwdXRIZWxwZXIgPSAoKSA9PiBvdXRwdXQ7XG4gICAgICBjb25zdCBvdXRwdXQgPSB7XG4gICAgICAgIHRhZzogdHJ1ZSxcbiAgICAgICAgaW5uZXI6IHZhbHVlLFxuICAgICAgICBmb2xkOiAoX29uRXJyb3IsIG9uVmFsdWUpID0+IG9uVmFsdWUodmFsdWUpLFxuICAgICAgICBpc1ZhbHVlOiBhbHdheXMsXG4gICAgICAgIGlzRXJyb3I6IG5ldmVyLFxuICAgICAgICBtYXA6IG1hcHBlciA9PiBSZXN1bHQudmFsdWUobWFwcGVyKHZhbHVlKSksXG4gICAgICAgIG1hcEVycm9yOiBvdXRwdXRIZWxwZXIsXG4gICAgICAgIGJpbmQ6IGFwcGx5SGVscGVyLFxuICAgICAgICBleGlzdHM6IGFwcGx5SGVscGVyLFxuICAgICAgICBmb3JhbGw6IGFwcGx5SGVscGVyLFxuICAgICAgICBnZXRPcjogY29uc3RIZWxwZXIsXG4gICAgICAgIG9yOiBvdXRwdXRIZWxwZXIsXG4gICAgICAgIGdldE9yVGh1bms6IGNvbnN0SGVscGVyLFxuICAgICAgICBvclRodW5rOiBvdXRwdXRIZWxwZXIsXG4gICAgICAgIGdldE9yRGllOiBjb25zdEhlbHBlcixcbiAgICAgICAgZWFjaDogZm4gPT4ge1xuICAgICAgICAgIGZuKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgdG9PcHRpb25hbDogKCkgPT4gT3B0aW9uYWwuc29tZSh2YWx1ZSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH07XG4gICAgY29uc3QgZXJyb3IgPSBlcnJvciA9PiB7XG4gICAgICBjb25zdCBvdXRwdXRIZWxwZXIgPSAoKSA9PiBvdXRwdXQ7XG4gICAgICBjb25zdCBvdXRwdXQgPSB7XG4gICAgICAgIHRhZzogZmFsc2UsXG4gICAgICAgIGlubmVyOiBlcnJvcixcbiAgICAgICAgZm9sZDogKG9uRXJyb3IsIF9vblZhbHVlKSA9PiBvbkVycm9yKGVycm9yKSxcbiAgICAgICAgaXNWYWx1ZTogbmV2ZXIsXG4gICAgICAgIGlzRXJyb3I6IGFsd2F5cyxcbiAgICAgICAgbWFwOiBvdXRwdXRIZWxwZXIsXG4gICAgICAgIG1hcEVycm9yOiBtYXBwZXIgPT4gUmVzdWx0LmVycm9yKG1hcHBlcihlcnJvcikpLFxuICAgICAgICBiaW5kOiBvdXRwdXRIZWxwZXIsXG4gICAgICAgIGV4aXN0czogbmV2ZXIsXG4gICAgICAgIGZvcmFsbDogYWx3YXlzLFxuICAgICAgICBnZXRPcjogaWRlbnRpdHksXG4gICAgICAgIG9yOiBpZGVudGl0eSxcbiAgICAgICAgZ2V0T3JUaHVuazogYXBwbHksXG4gICAgICAgIG9yVGh1bms6IGFwcGx5LFxuICAgICAgICBnZXRPckRpZTogZGllKFN0cmluZyhlcnJvcikpLFxuICAgICAgICBlYWNoOiBub29wLFxuICAgICAgICB0b09wdGlvbmFsOiBPcHRpb25hbC5ub25lXG4gICAgICB9O1xuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21PcHRpb24gPSAob3B0aW9uYWwsIGVycikgPT4gb3B0aW9uYWwuZm9sZCgoKSA9PiBlcnJvcihlcnIpLCB2YWx1ZSQxKTtcbiAgICBjb25zdCBSZXN1bHQgPSB7XG4gICAgICB2YWx1ZTogdmFsdWUkMSxcbiAgICAgIGVycm9yLFxuICAgICAgZnJvbU9wdGlvblxuICAgIH07XG5cbiAgICBjb25zdCBtZWFzdXJlID0gKHN0YXJ0QWRkcmVzcywgZ3JpZEEsIGdyaWRCKSA9PiB7XG4gICAgICBpZiAoc3RhcnRBZGRyZXNzLnJvdyA+PSBncmlkQS5sZW5ndGggfHwgc3RhcnRBZGRyZXNzLmNvbHVtbiA+IGNlbGxMZW5ndGgoZ3JpZEFbMF0pKSB7XG4gICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3IoJ2ludmFsaWQgc3RhcnQgYWRkcmVzcyBvdXQgb2YgdGFibGUgYm91bmRzLCByb3c6ICcgKyBzdGFydEFkZHJlc3Mucm93ICsgJywgY29sdW1uOiAnICsgc3RhcnRBZGRyZXNzLmNvbHVtbik7XG4gICAgICB9XG4gICAgICBjb25zdCByb3dSZW1haW5kZXIgPSBncmlkQS5zbGljZShzdGFydEFkZHJlc3Mucm93KTtcbiAgICAgIGNvbnN0IGNvbFJlbWFpbmRlciA9IHJvd1JlbWFpbmRlclswXS5jZWxscy5zbGljZShzdGFydEFkZHJlc3MuY29sdW1uKTtcbiAgICAgIGNvbnN0IGNvbFJlcXVpcmVkID0gY2VsbExlbmd0aChncmlkQlswXSk7XG4gICAgICBjb25zdCByb3dSZXF1aXJlZCA9IGdyaWRCLmxlbmd0aDtcbiAgICAgIHJldHVybiBSZXN1bHQudmFsdWUoe1xuICAgICAgICByb3dEZWx0YTogcm93UmVtYWluZGVyLmxlbmd0aCAtIHJvd1JlcXVpcmVkLFxuICAgICAgICBjb2xEZWx0YTogY29sUmVtYWluZGVyLmxlbmd0aCAtIGNvbFJlcXVpcmVkXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG1lYXN1cmVXaWR0aCA9IChncmlkQSwgZ3JpZEIpID0+IHtcbiAgICAgIGNvbnN0IGNvbExlbmd0aEEgPSBjZWxsTGVuZ3RoKGdyaWRBWzBdKTtcbiAgICAgIGNvbnN0IGNvbExlbmd0aEIgPSBjZWxsTGVuZ3RoKGdyaWRCWzBdKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJvd0RlbHRhOiAwLFxuICAgICAgICBjb2xEZWx0YTogY29sTGVuZ3RoQSAtIGNvbExlbmd0aEJcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBtZWFzdXJlSGVpZ2h0ID0gKGdyaWRBLCBncmlkQikgPT4ge1xuICAgICAgY29uc3Qgcm93TGVuZ3RoQSA9IGdyaWRBLmxlbmd0aDtcbiAgICAgIGNvbnN0IHJvd0xlbmd0aEIgPSBncmlkQi5sZW5ndGg7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByb3dEZWx0YTogcm93TGVuZ3RoQSAtIHJvd0xlbmd0aEIsXG4gICAgICAgIGNvbERlbHRhOiAwXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZ2VuZXJhdGVFbGVtZW50cyA9IChhbW91bnQsIHJvdywgZ2VuZXJhdG9ycywgaXNMb2NrZWQpID0+IHtcbiAgICAgIGNvbnN0IGdlbmVyYXRvciA9IHJvdy5zZWN0aW9uID09PSAnY29sZ3JvdXAnID8gZ2VuZXJhdG9ycy5jb2wgOiBnZW5lcmF0b3JzLmNlbGw7XG4gICAgICByZXR1cm4gcmFuZ2UkMShhbW91bnQsIGlkeCA9PiBlbGVtZW50bmV3KGdlbmVyYXRvcigpLCB0cnVlLCBpc0xvY2tlZChpZHgpKSk7XG4gICAgfTtcbiAgICBjb25zdCByb3dGaWxsID0gKGdyaWQsIGFtb3VudCwgZ2VuZXJhdG9ycywgbG9ja2VkQ29sdW1ucykgPT4ge1xuICAgICAgY29uc3QgZXhhbXBsZVJvdyA9IGdyaWRbZ3JpZC5sZW5ndGggLSAxXTtcbiAgICAgIHJldHVybiBncmlkLmNvbmNhdChyYW5nZSQxKGFtb3VudCwgKCkgPT4ge1xuICAgICAgICBjb25zdCBnZW5lcmF0b3IgPSBleGFtcGxlUm93LnNlY3Rpb24gPT09ICdjb2xncm91cCcgPyBnZW5lcmF0b3JzLmNvbGdyb3VwIDogZ2VuZXJhdG9ycy5yb3c7XG4gICAgICAgIGNvbnN0IHJvdyA9IGNsb25lKGV4YW1wbGVSb3csIGdlbmVyYXRvciwgaWRlbnRpdHkpO1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IGdlbmVyYXRlRWxlbWVudHMocm93LmNlbGxzLmxlbmd0aCwgcm93LCBnZW5lcmF0b3JzLCBpZHggPT4gaGFzJDEobG9ja2VkQ29sdW1ucywgaWR4LnRvU3RyaW5nKCkpKTtcbiAgICAgICAgcmV0dXJuIHNldENlbGxzKHJvdywgZWxlbWVudHMpO1xuICAgICAgfSkpO1xuICAgIH07XG4gICAgY29uc3QgY29sRmlsbCA9IChncmlkLCBhbW91bnQsIGdlbmVyYXRvcnMsIHN0YXJ0SW5kZXgpID0+IG1hcCQxKGdyaWQsIHJvdyA9PiB7XG4gICAgICBjb25zdCBuZXdDaGlsZHJlbiA9IGdlbmVyYXRlRWxlbWVudHMoYW1vdW50LCByb3csIGdlbmVyYXRvcnMsIG5ldmVyKTtcbiAgICAgIHJldHVybiBhZGRDZWxscyhyb3csIHN0YXJ0SW5kZXgsIG5ld0NoaWxkcmVuKTtcbiAgICB9KTtcbiAgICBjb25zdCBsb2NrZWRDb2xGaWxsID0gKGdyaWQsIGdlbmVyYXRvcnMsIGxvY2tlZENvbHVtbnMpID0+IG1hcCQxKGdyaWQsIHJvdyA9PiB7XG4gICAgICByZXR1cm4gZm9sZGwobG9ja2VkQ29sdW1ucywgKGFjYywgY29sTnVtKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0NoaWxkID0gZ2VuZXJhdGVFbGVtZW50cygxLCByb3csIGdlbmVyYXRvcnMsIGFsd2F5cylbMF07XG4gICAgICAgIHJldHVybiBhZGRDZWxsKGFjYywgY29sTnVtLCBuZXdDaGlsZCk7XG4gICAgICB9LCByb3cpO1xuICAgIH0pO1xuICAgIGNvbnN0IHRhaWxvciA9IChncmlkQSwgZGVsdGEsIGdlbmVyYXRvcnMpID0+IHtcbiAgICAgIGNvbnN0IGZpbGxDb2xzID0gZGVsdGEuY29sRGVsdGEgPCAwID8gY29sRmlsbCA6IGlkZW50aXR5O1xuICAgICAgY29uc3QgZmlsbFJvd3MgPSBkZWx0YS5yb3dEZWx0YSA8IDAgPyByb3dGaWxsIDogaWRlbnRpdHk7XG4gICAgICBjb25zdCBsb2NrZWRDb2x1bW5zID0gZ2V0TG9ja2VkQ29sdW1uc0Zyb21HcmlkKGdyaWRBKTtcbiAgICAgIGNvbnN0IGdyaWRXaWR0aCA9IGNlbGxMZW5ndGgoZ3JpZEFbMF0pO1xuICAgICAgY29uc3QgaXNMYXN0Q29sTG9ja2VkID0gZXhpc3RzKGxvY2tlZENvbHVtbnMsIGxvY2tlZCA9PiBsb2NrZWQgPT09IGdyaWRXaWR0aCAtIDEpO1xuICAgICAgY29uc3QgbW9kaWZpZWRDb2xzID0gZmlsbENvbHMoZ3JpZEEsIE1hdGguYWJzKGRlbHRhLmNvbERlbHRhKSwgZ2VuZXJhdG9ycywgaXNMYXN0Q29sTG9ja2VkID8gZ3JpZFdpZHRoIC0gMSA6IGdyaWRXaWR0aCk7XG4gICAgICBjb25zdCBuZXdMb2NrZWRDb2x1bW5zID0gZ2V0TG9ja2VkQ29sdW1uc0Zyb21HcmlkKG1vZGlmaWVkQ29scyk7XG4gICAgICByZXR1cm4gZmlsbFJvd3MobW9kaWZpZWRDb2xzLCBNYXRoLmFicyhkZWx0YS5yb3dEZWx0YSksIGdlbmVyYXRvcnMsIG1hcFRvT2JqZWN0KG5ld0xvY2tlZENvbHVtbnMsIGFsd2F5cykpO1xuICAgIH07XG5cbiAgICBjb25zdCBpc1NwYW5uaW5nID0gKGdyaWQsIHJvdywgY29sLCBjb21wYXJhdG9yKSA9PiB7XG4gICAgICBjb25zdCBjYW5kaWRhdGUgPSBnZXRDZWxsKGdyaWRbcm93XSwgY29sKTtcbiAgICAgIGNvbnN0IG1hdGNoaW5nID0gY3VycnkoY29tcGFyYXRvciwgY2FuZGlkYXRlLmVsZW1lbnQpO1xuICAgICAgY29uc3QgY3VycmVudFJvdyA9IGdyaWRbcm93XTtcbiAgICAgIHJldHVybiBncmlkLmxlbmd0aCA+IDEgJiYgY2VsbExlbmd0aChjdXJyZW50Um93KSA+IDEgJiYgKGNvbCA+IDAgJiYgbWF0Y2hpbmcoZ2V0Q2VsbEVsZW1lbnQoY3VycmVudFJvdywgY29sIC0gMSkpIHx8IGNvbCA8IGN1cnJlbnRSb3cuY2VsbHMubGVuZ3RoIC0gMSAmJiBtYXRjaGluZyhnZXRDZWxsRWxlbWVudChjdXJyZW50Um93LCBjb2wgKyAxKSkgfHwgcm93ID4gMCAmJiBtYXRjaGluZyhnZXRDZWxsRWxlbWVudChncmlkW3JvdyAtIDFdLCBjb2wpKSB8fCByb3cgPCBncmlkLmxlbmd0aCAtIDEgJiYgbWF0Y2hpbmcoZ2V0Q2VsbEVsZW1lbnQoZ3JpZFtyb3cgKyAxXSwgY29sKSkpO1xuICAgIH07XG4gICAgY29uc3QgbWVyZ2VUYWJsZXMgPSAoc3RhcnRBZGRyZXNzLCBncmlkQSwgZ3JpZEJSb3dzLCBnZW5lcmF0b3IsIGNvbXBhcmF0b3IsIGxvY2tlZENvbHVtbnMpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0Um93ID0gc3RhcnRBZGRyZXNzLnJvdztcbiAgICAgIGNvbnN0IHN0YXJ0Q29sID0gc3RhcnRBZGRyZXNzLmNvbHVtbjtcbiAgICAgIGNvbnN0IG1lcmdlSGVpZ2h0ID0gZ3JpZEJSb3dzLmxlbmd0aDtcbiAgICAgIGNvbnN0IG1lcmdlV2lkdGggPSBjZWxsTGVuZ3RoKGdyaWRCUm93c1swXSk7XG4gICAgICBjb25zdCBlbmRSb3cgPSBzdGFydFJvdyArIG1lcmdlSGVpZ2h0O1xuICAgICAgY29uc3QgZW5kQ29sID0gc3RhcnRDb2wgKyBtZXJnZVdpZHRoICsgbG9ja2VkQ29sdW1ucy5sZW5ndGg7XG4gICAgICBjb25zdCBsb2NrZWRDb2x1bW5PYmogPSBtYXBUb09iamVjdChsb2NrZWRDb2x1bW5zLCBhbHdheXMpO1xuICAgICAgZm9yIChsZXQgciA9IHN0YXJ0Um93OyByIDwgZW5kUm93OyByKyspIHtcbiAgICAgICAgbGV0IHNraXBwZWRDb2wgPSAwO1xuICAgICAgICBmb3IgKGxldCBjID0gc3RhcnRDb2w7IGMgPCBlbmRDb2w7IGMrKykge1xuICAgICAgICAgIGlmIChsb2NrZWRDb2x1bW5PYmpbY10pIHtcbiAgICAgICAgICAgIHNraXBwZWRDb2wrKztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNTcGFubmluZyhncmlkQSwgciwgYywgY29tcGFyYXRvcikpIHtcbiAgICAgICAgICAgIHVubWVyZ2UoZ3JpZEEsIGdldENlbGxFbGVtZW50KGdyaWRBW3JdLCBjKSwgY29tcGFyYXRvciwgZ2VuZXJhdG9yLmNlbGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBncmlkQkNvbEluZGV4ID0gYyAtIHN0YXJ0Q29sIC0gc2tpcHBlZENvbDtcbiAgICAgICAgICBjb25zdCBuZXdDZWxsID0gZ2V0Q2VsbChncmlkQlJvd3NbciAtIHN0YXJ0Um93XSwgZ3JpZEJDb2xJbmRleCk7XG4gICAgICAgICAgY29uc3QgbmV3Q2VsbEVsbSA9IG5ld0NlbGwuZWxlbWVudDtcbiAgICAgICAgICBjb25zdCByZXBsYWNlbWVudCA9IGdlbmVyYXRvci5yZXBsYWNlKG5ld0NlbGxFbG0pO1xuICAgICAgICAgIG11dGF0ZUNlbGwoZ3JpZEFbcl0sIGMsIGVsZW1lbnRuZXcocmVwbGFjZW1lbnQsIHRydWUsIG5ld0NlbGwuaXNMb2NrZWQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGdyaWRBO1xuICAgIH07XG4gICAgY29uc3QgZ2V0VmFsaWRTdGFydEFkZHJlc3MgPSAoY3VycmVudFN0YXJ0QWRkcmVzcywgZ3JpZCwgbG9ja2VkQ29sdW1ucykgPT4ge1xuICAgICAgY29uc3QgZ3JpZENvbExlbmd0aCA9IGNlbGxMZW5ndGgoZ3JpZFswXSk7XG4gICAgICBjb25zdCBhZGp1c3RlZFJvd0FkZHJlc3MgPSBleHRyYWN0R3JpZERldGFpbHMoZ3JpZCkuY29scy5sZW5ndGggKyBjdXJyZW50U3RhcnRBZGRyZXNzLnJvdztcbiAgICAgIGNvbnN0IHBvc3NpYmxlQ29sQWRkcmVzc2VzID0gcmFuZ2UkMShncmlkQ29sTGVuZ3RoIC0gY3VycmVudFN0YXJ0QWRkcmVzcy5jb2x1bW4sIG51bSA9PiBudW0gKyBjdXJyZW50U3RhcnRBZGRyZXNzLmNvbHVtbik7XG4gICAgICBjb25zdCB2YWxpZENvbEFkZHJlc3MgPSBmaW5kJDEocG9zc2libGVDb2xBZGRyZXNzZXMsIG51bSA9PiBmb3JhbGwobG9ja2VkQ29sdW1ucywgY29sID0+IGNvbCAhPT0gbnVtKSkuZ2V0T3IoZ3JpZENvbExlbmd0aCAtIDEpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcm93OiBhZGp1c3RlZFJvd0FkZHJlc3MsXG4gICAgICAgIGNvbHVtbjogdmFsaWRDb2xBZGRyZXNzXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZ2V0TG9ja2VkQ29sdW1uc1dpdGhpbkJvdW5kcyA9IChzdGFydEFkZHJlc3MsIHJvd3MsIGxvY2tlZENvbHVtbnMpID0+IGZpbHRlciQyKGxvY2tlZENvbHVtbnMsIGNvbE51bSA9PiBjb2xOdW0gPj0gc3RhcnRBZGRyZXNzLmNvbHVtbiAmJiBjb2xOdW0gPD0gY2VsbExlbmd0aChyb3dzWzBdKSArIHN0YXJ0QWRkcmVzcy5jb2x1bW4pO1xuICAgIGNvbnN0IG1lcmdlJDEgPSAoc3RhcnRBZGRyZXNzLCBncmlkQSwgZ3JpZEIsIGdlbmVyYXRvciwgY29tcGFyYXRvcikgPT4ge1xuICAgICAgY29uc3QgbG9ja2VkQ29sdW1ucyA9IGdldExvY2tlZENvbHVtbnNGcm9tR3JpZChncmlkQSk7XG4gICAgICBjb25zdCB2YWxpZFN0YXJ0QWRkcmVzcyA9IGdldFZhbGlkU3RhcnRBZGRyZXNzKHN0YXJ0QWRkcmVzcywgZ3JpZEEsIGxvY2tlZENvbHVtbnMpO1xuICAgICAgY29uc3QgZ3JpZEJSb3dzID0gZXh0cmFjdEdyaWREZXRhaWxzKGdyaWRCKS5yb3dzO1xuICAgICAgY29uc3QgbG9ja2VkQ29sdW1uc1dpdGhpbkJvdW5kcyA9IGdldExvY2tlZENvbHVtbnNXaXRoaW5Cb3VuZHModmFsaWRTdGFydEFkZHJlc3MsIGdyaWRCUm93cywgbG9ja2VkQ29sdW1ucyk7XG4gICAgICBjb25zdCByZXN1bHQgPSBtZWFzdXJlKHZhbGlkU3RhcnRBZGRyZXNzLCBncmlkQSwgZ3JpZEJSb3dzKTtcbiAgICAgIHJldHVybiByZXN1bHQubWFwKGRpZmYgPT4ge1xuICAgICAgICBjb25zdCBkZWx0YSA9IHtcbiAgICAgICAgICAuLi5kaWZmLFxuICAgICAgICAgIGNvbERlbHRhOiBkaWZmLmNvbERlbHRhIC0gbG9ja2VkQ29sdW1uc1dpdGhpbkJvdW5kcy5sZW5ndGhcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZml0dGVkR3JpZCA9IHRhaWxvcihncmlkQSwgZGVsdGEsIGdlbmVyYXRvcik7XG4gICAgICAgIGNvbnN0IG5ld0xvY2tlZENvbHVtbnMgPSBnZXRMb2NrZWRDb2x1bW5zRnJvbUdyaWQoZml0dGVkR3JpZCk7XG4gICAgICAgIGNvbnN0IG5ld0xvY2tlZENvbHVtbnNXaXRoaW5Cb3VuZHMgPSBnZXRMb2NrZWRDb2x1bW5zV2l0aGluQm91bmRzKHZhbGlkU3RhcnRBZGRyZXNzLCBncmlkQlJvd3MsIG5ld0xvY2tlZENvbHVtbnMpO1xuICAgICAgICByZXR1cm4gbWVyZ2VUYWJsZXModmFsaWRTdGFydEFkZHJlc3MsIGZpdHRlZEdyaWQsIGdyaWRCUm93cywgZ2VuZXJhdG9yLCBjb21wYXJhdG9yLCBuZXdMb2NrZWRDb2x1bW5zV2l0aGluQm91bmRzKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0Q29scyA9IChpbmRleCwgZ3JpZEEsIGdyaWRCLCBnZW5lcmF0b3IsIGNvbXBhcmF0b3IpID0+IHtcbiAgICAgIHNwbGl0Q29scyhncmlkQSwgaW5kZXgsIGNvbXBhcmF0b3IsIGdlbmVyYXRvci5jZWxsKTtcbiAgICAgIGNvbnN0IGRlbHRhID0gbWVhc3VyZUhlaWdodChncmlkQiwgZ3JpZEEpO1xuICAgICAgY29uc3QgZml0dGVkTmV3R3JpZCA9IHRhaWxvcihncmlkQiwgZGVsdGEsIGdlbmVyYXRvcik7XG4gICAgICBjb25zdCBzZWNvbmREZWx0YSA9IG1lYXN1cmVIZWlnaHQoZ3JpZEEsIGZpdHRlZE5ld0dyaWQpO1xuICAgICAgY29uc3QgZml0dGVkT2xkR3JpZCA9IHRhaWxvcihncmlkQSwgc2Vjb25kRGVsdGEsIGdlbmVyYXRvcik7XG4gICAgICByZXR1cm4gbWFwJDEoZml0dGVkT2xkR3JpZCwgKGdyaWRSb3csIGkpID0+IHtcbiAgICAgICAgcmV0dXJuIGFkZENlbGxzKGdyaWRSb3csIGluZGV4LCBmaXR0ZWROZXdHcmlkW2ldLmNlbGxzKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0Um93cyA9IChpbmRleCwgZ3JpZEEsIGdyaWRCLCBnZW5lcmF0b3IsIGNvbXBhcmF0b3IpID0+IHtcbiAgICAgIHNwbGl0Um93cyhncmlkQSwgaW5kZXgsIGNvbXBhcmF0b3IsIGdlbmVyYXRvci5jZWxsKTtcbiAgICAgIGNvbnN0IGxvY2tlZCA9IGdldExvY2tlZENvbHVtbnNGcm9tR3JpZChncmlkQSk7XG4gICAgICBjb25zdCBkaWZmID0gbWVhc3VyZVdpZHRoKGdyaWRBLCBncmlkQik7XG4gICAgICBjb25zdCBkZWx0YSA9IHtcbiAgICAgICAgLi4uZGlmZixcbiAgICAgICAgY29sRGVsdGE6IGRpZmYuY29sRGVsdGEgLSBsb2NrZWQubGVuZ3RoXG4gICAgICB9O1xuICAgICAgY29uc3QgZml0dGVkT2xkR3JpZCA9IHRhaWxvcihncmlkQSwgZGVsdGEsIGdlbmVyYXRvcik7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbHM6IG9sZENvbHMsXG4gICAgICAgIHJvd3M6IG9sZFJvd3NcbiAgICAgIH0gPSBleHRyYWN0R3JpZERldGFpbHMoZml0dGVkT2xkR3JpZCk7XG4gICAgICBjb25zdCBuZXdMb2NrZWQgPSBnZXRMb2NrZWRDb2x1bW5zRnJvbUdyaWQoZml0dGVkT2xkR3JpZCk7XG4gICAgICBjb25zdCBzZWNvbmREaWZmID0gbWVhc3VyZVdpZHRoKGdyaWRCLCBncmlkQSk7XG4gICAgICBjb25zdCBzZWNvbmREZWx0YSA9IHtcbiAgICAgICAgLi4uc2Vjb25kRGlmZixcbiAgICAgICAgY29sRGVsdGE6IHNlY29uZERpZmYuY29sRGVsdGEgKyBuZXdMb2NrZWQubGVuZ3RoXG4gICAgICB9O1xuICAgICAgY29uc3QgZml0dGVkR3JpZEIgPSBsb2NrZWRDb2xGaWxsKGdyaWRCLCBnZW5lcmF0b3IsIG5ld0xvY2tlZCk7XG4gICAgICBjb25zdCBmaXR0ZWROZXdHcmlkID0gdGFpbG9yKGZpdHRlZEdyaWRCLCBzZWNvbmREZWx0YSwgZ2VuZXJhdG9yKTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC4uLm9sZENvbHMsXG4gICAgICAgIC4uLm9sZFJvd3Muc2xpY2UoMCwgaW5kZXgpLFxuICAgICAgICAuLi5maXR0ZWROZXdHcmlkLFxuICAgICAgICAuLi5vbGRSb3dzLnNsaWNlKGluZGV4LCBvbGRSb3dzLmxlbmd0aClcbiAgICAgIF07XG4gICAgfTtcblxuICAgIGNvbnN0IGNsb25lUm93ID0gKHJvdywgY2xvbmVDZWxsLCBjb21wYXJhdG9yLCBzdWJzdGl0dXRpb24pID0+IGNsb25lKHJvdywgZWxlbSA9PiBzdWJzdGl0dXRpb24oZWxlbSwgY29tcGFyYXRvciksIGNsb25lQ2VsbCk7XG4gICAgY29uc3QgaW5zZXJ0Um93QXQgPSAoZ3JpZCwgaW5kZXgsIGV4YW1wbGUsIGNvbXBhcmF0b3IsIHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3Qge3Jvd3MsIGNvbHN9ID0gZXh0cmFjdEdyaWREZXRhaWxzKGdyaWQpO1xuICAgICAgY29uc3QgYmVmb3JlID0gcm93cy5zbGljZSgwLCBpbmRleCk7XG4gICAgICBjb25zdCBhZnRlciA9IHJvd3Muc2xpY2UoaW5kZXgpO1xuICAgICAgY29uc3QgbmV3Um93ID0gY2xvbmVSb3cocm93c1tleGFtcGxlXSwgKGV4LCBjKSA9PiB7XG4gICAgICAgIGNvbnN0IHdpdGhpblNwYW4gPSBpbmRleCA+IDAgJiYgaW5kZXggPCByb3dzLmxlbmd0aCAmJiBjb21wYXJhdG9yKGdldENlbGxFbGVtZW50KHJvd3NbaW5kZXggLSAxXSwgYyksIGdldENlbGxFbGVtZW50KHJvd3NbaW5kZXhdLCBjKSk7XG4gICAgICAgIGNvbnN0IHJldCA9IHdpdGhpblNwYW4gPyBnZXRDZWxsKHJvd3NbaW5kZXhdLCBjKSA6IGVsZW1lbnRuZXcoc3Vic3RpdHV0aW9uKGV4LmVsZW1lbnQsIGNvbXBhcmF0b3IpLCB0cnVlLCBleC5pc0xvY2tlZCk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9LCBjb21wYXJhdG9yLCBzdWJzdGl0dXRpb24pO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4uY29scyxcbiAgICAgICAgLi4uYmVmb3JlLFxuICAgICAgICBuZXdSb3csXG4gICAgICAgIC4uLmFmdGVyXG4gICAgICBdO1xuICAgIH07XG4gICAgY29uc3QgZ2V0RWxlbWVudEZvciA9IChyb3csIGNvbHVtbiwgc2VjdGlvbiwgd2l0aGluU3BhbiwgZXhhbXBsZSwgY29tcGFyYXRvciwgc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBpZiAoc2VjdGlvbiA9PT0gJ2NvbGdyb3VwJyB8fCAhd2l0aGluU3Bhbikge1xuICAgICAgICBjb25zdCBjZWxsID0gZ2V0Q2VsbChyb3csIGV4YW1wbGUpO1xuICAgICAgICByZXR1cm4gZWxlbWVudG5ldyhzdWJzdGl0dXRpb24oY2VsbC5lbGVtZW50LCBjb21wYXJhdG9yKSwgdHJ1ZSwgZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGdldENlbGwocm93LCBjb2x1bW4pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0Q29sdW1uQXQgPSAoZ3JpZCwgaW5kZXgsIGV4YW1wbGUsIGNvbXBhcmF0b3IsIHN1YnN0aXR1dGlvbikgPT4gbWFwJDEoZ3JpZCwgcm93ID0+IHtcbiAgICAgIGNvbnN0IHdpdGhpblNwYW4gPSBpbmRleCA+IDAgJiYgaW5kZXggPCBjZWxsTGVuZ3RoKHJvdykgJiYgY29tcGFyYXRvcihnZXRDZWxsRWxlbWVudChyb3csIGluZGV4IC0gMSksIGdldENlbGxFbGVtZW50KHJvdywgaW5kZXgpKTtcbiAgICAgIGNvbnN0IHN1YiA9IGdldEVsZW1lbnRGb3Iocm93LCBpbmRleCwgcm93LnNlY3Rpb24sIHdpdGhpblNwYW4sIGV4YW1wbGUsIGNvbXBhcmF0b3IsIHN1YnN0aXR1dGlvbik7XG4gICAgICByZXR1cm4gYWRkQ2VsbChyb3csIGluZGV4LCBzdWIpO1xuICAgIH0pO1xuICAgIGNvbnN0IGRlbGV0ZUNvbHVtbnNBdCA9IChncmlkLCBjb2x1bW5zKSA9PiBiaW5kJDIoZ3JpZCwgcm93ID0+IHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nQ2VsbHMgPSByb3cuY2VsbHM7XG4gICAgICBjb25zdCBjZWxscyA9IGZvbGRyKGNvbHVtbnMsIChhY2MsIGNvbHVtbikgPT4gY29sdW1uID49IDAgJiYgY29sdW1uIDwgYWNjLmxlbmd0aCA/IGFjYy5zbGljZSgwLCBjb2x1bW4pLmNvbmNhdChhY2Muc2xpY2UoY29sdW1uICsgMSkpIDogYWNjLCBleGlzdGluZ0NlbGxzKTtcbiAgICAgIHJldHVybiBjZWxscy5sZW5ndGggPiAwID8gW3Jvd2NlbGxzKHJvdy5lbGVtZW50LCBjZWxscywgcm93LnNlY3Rpb24sIHJvdy5pc05ldyldIDogW107XG4gICAgfSk7XG4gICAgY29uc3QgZGVsZXRlUm93c0F0ID0gKGdyaWQsIHN0YXJ0LCBmaW5pc2gpID0+IHtcbiAgICAgIGNvbnN0IHtyb3dzLCBjb2xzfSA9IGV4dHJhY3RHcmlkRGV0YWlscyhncmlkKTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC4uLmNvbHMsXG4gICAgICAgIC4uLnJvd3Muc2xpY2UoMCwgc3RhcnQpLFxuICAgICAgICAuLi5yb3dzLnNsaWNlKGZpbmlzaCArIDEpXG4gICAgICBdO1xuICAgIH07XG5cbiAgICBjb25zdCBub3RJblN0YXJ0Um93ID0gKGdyaWQsIHJvd0luZGV4LCBjb2xJbmRleCwgY29tcGFyYXRvcikgPT4gZ2V0Q2VsbEVsZW1lbnQoZ3JpZFtyb3dJbmRleF0sIGNvbEluZGV4KSAhPT0gdW5kZWZpbmVkICYmIChyb3dJbmRleCA+IDAgJiYgY29tcGFyYXRvcihnZXRDZWxsRWxlbWVudChncmlkW3Jvd0luZGV4IC0gMV0sIGNvbEluZGV4KSwgZ2V0Q2VsbEVsZW1lbnQoZ3JpZFtyb3dJbmRleF0sIGNvbEluZGV4KSkpO1xuICAgIGNvbnN0IG5vdEluU3RhcnRDb2x1bW4gPSAocm93LCBpbmRleCwgY29tcGFyYXRvcikgPT4gaW5kZXggPiAwICYmIGNvbXBhcmF0b3IoZ2V0Q2VsbEVsZW1lbnQocm93LCBpbmRleCAtIDEpLCBnZXRDZWxsRWxlbWVudChyb3csIGluZGV4KSk7XG4gICAgY29uc3QgaXNEdXBsaWNhdGVkQ2VsbCA9IChncmlkLCByb3dJbmRleCwgY29sSW5kZXgsIGNvbXBhcmF0b3IpID0+IG5vdEluU3RhcnRSb3coZ3JpZCwgcm93SW5kZXgsIGNvbEluZGV4LCBjb21wYXJhdG9yKSB8fCBub3RJblN0YXJ0Q29sdW1uKGdyaWRbcm93SW5kZXhdLCBjb2xJbmRleCwgY29tcGFyYXRvcik7XG4gICAgY29uc3Qgcm93UmVwbGFjZXJQcmVkaWNhdGUgPSAodGFyZ2V0Um93LCBjb2x1bW5IZWFkZXJzKSA9PiB7XG4gICAgICBjb25zdCBlbnRpcmVUYWJsZUlzSGVhZGVyID0gZm9yYWxsKGNvbHVtbkhlYWRlcnMsIGlkZW50aXR5KSAmJiBpc0hlYWRlckNlbGxzKHRhcmdldFJvdy5jZWxscyk7XG4gICAgICByZXR1cm4gZW50aXJlVGFibGVJc0hlYWRlciA/IGFsd2F5cyA6IChjZWxsLCBfcm93SW5kZXgsIGNvbEluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBuYW1lKGNlbGwuZWxlbWVudCk7XG4gICAgICAgIHJldHVybiAhKHR5cGUgPT09ICd0aCcgJiYgY29sdW1uSGVhZGVyc1tjb2xJbmRleF0pO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbHVtblJlcGxhY2VQcmVkaWNhdGUgPSAodGFyZ2V0Q29sdW1uLCByb3dIZWFkZXJzKSA9PiB7XG4gICAgICBjb25zdCBlbnRpcmVUYWJsZUlzSGVhZGVyID0gZm9yYWxsKHJvd0hlYWRlcnMsIGlkZW50aXR5KSAmJiBpc0hlYWRlckNlbGxzKHRhcmdldENvbHVtbik7XG4gICAgICByZXR1cm4gZW50aXJlVGFibGVJc0hlYWRlciA/IGFsd2F5cyA6IChjZWxsLCByb3dJbmRleCwgX2NvbEluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBuYW1lKGNlbGwuZWxlbWVudCk7XG4gICAgICAgIHJldHVybiAhKHR5cGUgPT09ICd0aCcgJiYgcm93SGVhZGVyc1tyb3dJbmRleF0pO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGRldGVybWluZVNjb3BlID0gKGFwcGx5U2NvcGUsIGNlbGwsIG5ld1Njb3BlLCBpc0luSGVhZGVyKSA9PiB7XG4gICAgICBjb25zdCBoYXNTcGFuID0gc2NvcGUgPT4gc2NvcGUgPT09ICdyb3cnID8gaGFzUm93c3BhbihjZWxsKSA6IGhhc0NvbHNwYW4oY2VsbCk7XG4gICAgICBjb25zdCBnZXRTY29wZSA9IHNjb3BlID0+IGhhc1NwYW4oc2NvcGUpID8gYCR7IHNjb3BlIH1ncm91cGAgOiBzY29wZTtcbiAgICAgIGlmIChhcHBseVNjb3BlKSB7XG4gICAgICAgIHJldHVybiBpc0hlYWRlckNlbGwoY2VsbCkgPyBnZXRTY29wZShuZXdTY29wZSkgOiBudWxsO1xuICAgICAgfSBlbHNlIGlmIChpc0luSGVhZGVyICYmIGlzSGVhZGVyQ2VsbChjZWxsKSkge1xuICAgICAgICBjb25zdCBvcHBvc2l0ZVNjb3BlID0gbmV3U2NvcGUgPT09ICdyb3cnID8gJ2NvbCcgOiAncm93JztcbiAgICAgICAgcmV0dXJuIGdldFNjb3BlKG9wcG9zaXRlU2NvcGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByb3dTY29wZUdlbmVyYXRvciA9IChhcHBseVNjb3BlLCBjb2x1bW5IZWFkZXJzKSA9PiAoY2VsbCwgcm93SW5kZXgsIGNvbHVtbkluZGV4KSA9PiBPcHRpb25hbC5zb21lKGRldGVybWluZVNjb3BlKGFwcGx5U2NvcGUsIGNlbGwuZWxlbWVudCwgJ2NvbCcsIGNvbHVtbkhlYWRlcnNbY29sdW1uSW5kZXhdKSk7XG4gICAgY29uc3QgY29sdW1uU2NvcGVHZW5lcmF0b3IgPSAoYXBwbHlTY29wZSwgcm93SGVhZGVycykgPT4gKGNlbGwsIHJvd0luZGV4KSA9PiBPcHRpb25hbC5zb21lKGRldGVybWluZVNjb3BlKGFwcGx5U2NvcGUsIGNlbGwuZWxlbWVudCwgJ3JvdycsIHJvd0hlYWRlcnNbcm93SW5kZXhdKSk7XG4gICAgY29uc3QgcmVwbGFjZSA9IChjZWxsLCBjb21wYXJhdG9yLCBzdWJzdGl0dXRlKSA9PiBlbGVtZW50bmV3KHN1YnN0aXR1dGUoY2VsbC5lbGVtZW50LCBjb21wYXJhdG9yKSwgdHJ1ZSwgY2VsbC5pc0xvY2tlZCk7XG4gICAgY29uc3QgcmVwbGFjZUluID0gKGdyaWQsIHRhcmdldHMsIGNvbXBhcmF0b3IsIHN1YnN0aXR1dGUsIHJlcGxhY2VyLCBnZW5TY29wZSwgc2hvdWxkUmVwbGFjZSkgPT4ge1xuICAgICAgY29uc3QgaXNUYXJnZXQgPSBjZWxsID0+IHtcbiAgICAgICAgcmV0dXJuIGV4aXN0cyh0YXJnZXRzLCB0YXJnZXQgPT4ge1xuICAgICAgICAgIHJldHVybiBjb21wYXJhdG9yKGNlbGwuZWxlbWVudCwgdGFyZ2V0LmVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gbWFwJDEoZ3JpZCwgKHJvdywgcm93SW5kZXgpID0+IHtcbiAgICAgICAgcmV0dXJuIG1hcENlbGxzKHJvdywgKGNlbGwsIGNvbEluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKGlzVGFyZ2V0KGNlbGwpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdDZWxsID0gc2hvdWxkUmVwbGFjZShjZWxsLCByb3dJbmRleCwgY29sSW5kZXgpID8gcmVwbGFjZXIoY2VsbCwgY29tcGFyYXRvciwgc3Vic3RpdHV0ZSkgOiBjZWxsO1xuICAgICAgICAgICAgZ2VuU2NvcGUobmV3Q2VsbCwgcm93SW5kZXgsIGNvbEluZGV4KS5lYWNoKHNjb3BlID0+IHtcbiAgICAgICAgICAgICAgc2V0T3B0aW9ucyhuZXdDZWxsLmVsZW1lbnQsIHsgc2NvcGU6IE9wdGlvbmFsLmZyb20oc2NvcGUpIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3Q2VsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNlbGw7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Q29sdW1uQ2VsbHMgPSAocm93cywgY29sdW1uSW5kZXgsIGNvbXBhcmF0b3IpID0+IGJpbmQkMihyb3dzLCAocm93LCBpKSA9PiB7XG4gICAgICByZXR1cm4gaXNEdXBsaWNhdGVkQ2VsbChyb3dzLCBpLCBjb2x1bW5JbmRleCwgY29tcGFyYXRvcikgPyBbXSA6IFtnZXRDZWxsKHJvdywgY29sdW1uSW5kZXgpXTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRSb3dDZWxscyA9IChyb3dzLCByb3dJbmRleCwgY29tcGFyYXRvcikgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0Um93ID0gcm93c1tyb3dJbmRleF07XG4gICAgICByZXR1cm4gYmluZCQyKHRhcmdldFJvdy5jZWxscywgKGl0ZW0sIGkpID0+IHtcbiAgICAgICAgcmV0dXJuIGlzRHVwbGljYXRlZENlbGwocm93cywgcm93SW5kZXgsIGksIGNvbXBhcmF0b3IpID8gW10gOiBbaXRlbV07XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlcGxhY2VDb2x1bW5zID0gKGdyaWQsIGluZGV4ZXMsIGFwcGx5U2NvcGUsIGNvbXBhcmF0b3IsIHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3Qgcm93cyA9IGV4dHJhY3RHcmlkRGV0YWlscyhncmlkKS5yb3dzO1xuICAgICAgY29uc3QgdGFyZ2V0cyA9IGJpbmQkMihpbmRleGVzLCBpbmRleCA9PiBnZXRDb2x1bW5DZWxscyhyb3dzLCBpbmRleCwgY29tcGFyYXRvcikpO1xuICAgICAgY29uc3Qgcm93SGVhZGVycyA9IG1hcCQxKHJvd3MsIHJvdyA9PiBpc0hlYWRlckNlbGxzKHJvdy5jZWxscykpO1xuICAgICAgY29uc3Qgc2hvdWxkUmVwbGFjZUNlbGwgPSBjb2x1bW5SZXBsYWNlUHJlZGljYXRlKHRhcmdldHMsIHJvd0hlYWRlcnMpO1xuICAgICAgY29uc3Qgc2NvcGVHZW5lcmF0b3IgPSBjb2x1bW5TY29wZUdlbmVyYXRvcihhcHBseVNjb3BlLCByb3dIZWFkZXJzKTtcbiAgICAgIHJldHVybiByZXBsYWNlSW4oZ3JpZCwgdGFyZ2V0cywgY29tcGFyYXRvciwgc3Vic3RpdHV0aW9uLCByZXBsYWNlLCBzY29wZUdlbmVyYXRvciwgc2hvdWxkUmVwbGFjZUNlbGwpO1xuICAgIH07XG4gICAgY29uc3QgcmVwbGFjZVJvd3MgPSAoZ3JpZCwgaW5kZXhlcywgc2VjdGlvbiwgYXBwbHlTY29wZSwgY29tcGFyYXRvciwgc3Vic3RpdHV0aW9uLCB0YWJsZVNlY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHtjb2xzLCByb3dzfSA9IGV4dHJhY3RHcmlkRGV0YWlscyhncmlkKTtcbiAgICAgIGNvbnN0IHRhcmdldFJvdyA9IHJvd3NbaW5kZXhlc1swXV07XG4gICAgICBjb25zdCB0YXJnZXRzID0gYmluZCQyKGluZGV4ZXMsIGluZGV4ID0+IGdldFJvd0NlbGxzKHJvd3MsIGluZGV4LCBjb21wYXJhdG9yKSk7XG4gICAgICBjb25zdCBjb2x1bW5IZWFkZXJzID0gbWFwJDEodGFyZ2V0Um93LmNlbGxzLCAoX2NlbGwsIGluZGV4KSA9PiBpc0hlYWRlckNlbGxzKGdldENvbHVtbkNlbGxzKHJvd3MsIGluZGV4LCBjb21wYXJhdG9yKSkpO1xuICAgICAgY29uc3QgbmV3Um93cyA9IFsuLi5yb3dzXTtcbiAgICAgIGVhY2gkMihpbmRleGVzLCBpbmRleCA9PiB7XG4gICAgICAgIG5ld1Jvd3NbaW5kZXhdID0gdGFibGVTZWN0aW9uLnRyYW5zZm9ybVJvdyhyb3dzW2luZGV4XSwgc2VjdGlvbik7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5ld0dyaWQgPSBbXG4gICAgICAgIC4uLmNvbHMsXG4gICAgICAgIC4uLm5ld1Jvd3NcbiAgICAgIF07XG4gICAgICBjb25zdCBzaG91bGRSZXBsYWNlQ2VsbCA9IHJvd1JlcGxhY2VyUHJlZGljYXRlKHRhcmdldFJvdywgY29sdW1uSGVhZGVycyk7XG4gICAgICBjb25zdCBzY29wZUdlbmVyYXRvciA9IHJvd1Njb3BlR2VuZXJhdG9yKGFwcGx5U2NvcGUsIGNvbHVtbkhlYWRlcnMpO1xuICAgICAgcmV0dXJuIHJlcGxhY2VJbihuZXdHcmlkLCB0YXJnZXRzLCBjb21wYXJhdG9yLCBzdWJzdGl0dXRpb24sIHRhYmxlU2VjdGlvbi50cmFuc2Zvcm1DZWxsLCBzY29wZUdlbmVyYXRvciwgc2hvdWxkUmVwbGFjZUNlbGwpO1xuICAgIH07XG4gICAgY29uc3QgcmVwbGFjZUNlbGxzID0gKGdyaWQsIGRldGFpbHMsIGNvbXBhcmF0b3IsIHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3Qgcm93cyA9IGV4dHJhY3RHcmlkRGV0YWlscyhncmlkKS5yb3dzO1xuICAgICAgY29uc3QgdGFyZ2V0Q2VsbHMgPSBtYXAkMShkZXRhaWxzLCBkZXRhaWwgPT4gZ2V0Q2VsbChyb3dzW2RldGFpbC5yb3ddLCBkZXRhaWwuY29sdW1uKSk7XG4gICAgICByZXR1cm4gcmVwbGFjZUluKGdyaWQsIHRhcmdldENlbGxzLCBjb21wYXJhdG9yLCBzdWJzdGl0dXRpb24sIHJlcGxhY2UsIE9wdGlvbmFsLm5vbmUsIGFsd2F5cyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdlbmVyYXRlID0gY2FzZXMgPT4ge1xuICAgICAgaWYgKCFpc0FycmF5KGNhc2VzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhc2VzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgIH1cbiAgICAgIGlmIChjYXNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBjYXNlJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBbXTtcbiAgICAgIGNvbnN0IGFkdCA9IHt9O1xuICAgICAgZWFjaCQyKGNhc2VzLCAoYWNhc2UsIGNvdW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGtleXMkMSA9IGtleXMoYWNhc2UpO1xuICAgICAgICBpZiAoa2V5cyQxLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignb25lIGFuZCBvbmx5IG9uZSBuYW1lIHBlciBjYXNlJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5ID0ga2V5cyQxWzBdO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGFjYXNlW2tleV07XG4gICAgICAgIGlmIChhZHRba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkdXBsaWNhdGUga2V5IGRldGVjdGVkOicgKyBrZXkpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2NhdGEnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgaGF2ZSBhIGNhc2UgbmFtZWQgY2F0YSAoc29ycnkpJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYXNlIGFyZ3VtZW50cyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RydWN0b3JzLnB1c2goa2V5KTtcbiAgICAgICAgYWR0W2tleV0gPSAoLi4uYXJncykgPT4ge1xuICAgICAgICAgIGNvbnN0IGFyZ0xlbmd0aCA9IGFyZ3MubGVuZ3RoO1xuICAgICAgICAgIGlmIChhcmdMZW5ndGggIT09IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIHRvIGNhc2UgJyArIGtleSArICcuIEV4cGVjdGVkICcgKyB2YWx1ZS5sZW5ndGggKyAnICgnICsgdmFsdWUgKyAnKSwgZ290ICcgKyBhcmdMZW5ndGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBtYXRjaCA9IGJyYW5jaGVzID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJyYW5jaEtleXMgPSBrZXlzKGJyYW5jaGVzKTtcbiAgICAgICAgICAgIGlmIChjb25zdHJ1Y3RvcnMubGVuZ3RoICE9PSBicmFuY2hLZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dyb25nIG51bWJlciBvZiBhcmd1bWVudHMgdG8gbWF0Y2guIEV4cGVjdGVkOiAnICsgY29uc3RydWN0b3JzLmpvaW4oJywnKSArICdcXG5BY3R1YWw6ICcgKyBicmFuY2hLZXlzLmpvaW4oJywnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhbGxSZXFkID0gZm9yYWxsKGNvbnN0cnVjdG9ycywgcmVxS2V5ID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5zJDIoYnJhbmNoS2V5cywgcmVxS2V5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFhbGxSZXFkKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGFsbCBicmFuY2hlcyB3ZXJlIHNwZWNpZmllZCB3aGVuIHVzaW5nIG1hdGNoLiBTcGVjaWZpZWQ6ICcgKyBicmFuY2hLZXlzLmpvaW4oJywgJykgKyAnXFxuUmVxdWlyZWQ6ICcgKyBjb25zdHJ1Y3RvcnMuam9pbignLCAnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYnJhbmNoZXNba2V5XS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmb2xkOiAoLi4uZm9sZEFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGZvbGRBcmdzLmxlbmd0aCAhPT0gY2FzZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIHRvIGZvbGQuIEV4cGVjdGVkICcgKyBjYXNlcy5sZW5ndGggKyAnLCBnb3QgJyArIGZvbGRBcmdzLmxlbmd0aCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZm9sZEFyZ3NbY291bnRdO1xuICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1hdGNoLFxuICAgICAgICAgICAgbG9nOiBsYWJlbCA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxhYmVsLCB7XG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3JzLFxuICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yOiBrZXksXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBhcmdzXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhZHQ7XG4gICAgfTtcbiAgICBjb25zdCBBZHQgPSB7IGdlbmVyYXRlIH07XG5cbiAgICBjb25zdCBhZHQkNiA9IEFkdC5nZW5lcmF0ZShbXG4gICAgICB7IG5vbmU6IFtdIH0sXG4gICAgICB7IG9ubHk6IFsnaW5kZXgnXSB9LFxuICAgICAge1xuICAgICAgICBsZWZ0OiBbXG4gICAgICAgICAgJ2luZGV4JyxcbiAgICAgICAgICAnbmV4dCdcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbWlkZGxlOiBbXG4gICAgICAgICAgJ3ByZXYnLFxuICAgICAgICAgICdpbmRleCcsXG4gICAgICAgICAgJ25leHQnXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHJpZ2h0OiBbXG4gICAgICAgICAgJ3ByZXYnLFxuICAgICAgICAgICdpbmRleCdcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0pO1xuICAgIGNvbnN0IENvbHVtbkNvbnRleHQgPSB7IC4uLmFkdCQ2IH07XG5cbiAgICBjb25zdCBuZWlnaGJvdXJzID0gKGlucHV0LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gQ29sdW1uQ29udGV4dC5ub25lKCk7XG4gICAgICB9XG4gICAgICBpZiAoaW5wdXQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBDb2x1bW5Db250ZXh0Lm9ubHkoMCk7XG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIENvbHVtbkNvbnRleHQubGVmdCgwLCAxKTtcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCA9PT0gaW5wdXQubGVuZ3RoIC0gMSkge1xuICAgICAgICByZXR1cm4gQ29sdW1uQ29udGV4dC5yaWdodChpbmRleCAtIDEsIGluZGV4KTtcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCA+IDAgJiYgaW5kZXggPCBpbnB1dC5sZW5ndGggLSAxKSB7XG4gICAgICAgIHJldHVybiBDb2x1bW5Db250ZXh0Lm1pZGRsZShpbmRleCAtIDEsIGluZGV4LCBpbmRleCArIDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIENvbHVtbkNvbnRleHQubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgZGV0ZXJtaW5lID0gKGlucHV0LCBjb2x1bW4sIHN0ZXAsIHRhYmxlU2l6ZSwgcmVzaXplKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpbnB1dC5zbGljZSgwKTtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBuZWlnaGJvdXJzKGlucHV0LCBjb2x1bW4pO1xuICAgICAgY29uc3Qgb25Ob25lID0gY29uc3RhbnQobWFwJDEocmVzdWx0LCBjb25zdGFudCgwKSkpO1xuICAgICAgY29uc3Qgb25Pbmx5ID0gaW5kZXggPT4gdGFibGVTaXplLnNpbmdsZUNvbHVtbldpZHRoKHJlc3VsdFtpbmRleF0sIHN0ZXApO1xuICAgICAgY29uc3Qgb25MZWZ0ID0gKGluZGV4LCBuZXh0KSA9PiByZXNpemUuY2FsY0xlZnRFZGdlRGVsdGFzKHJlc3VsdCwgaW5kZXgsIG5leHQsIHN0ZXAsIHRhYmxlU2l6ZS5taW5DZWxsV2lkdGgoKSwgdGFibGVTaXplLmlzUmVsYXRpdmUpO1xuICAgICAgY29uc3Qgb25NaWRkbGUgPSAocHJldiwgaW5kZXgsIG5leHQpID0+IHJlc2l6ZS5jYWxjTWlkZGxlRGVsdGFzKHJlc3VsdCwgcHJldiwgaW5kZXgsIG5leHQsIHN0ZXAsIHRhYmxlU2l6ZS5taW5DZWxsV2lkdGgoKSwgdGFibGVTaXplLmlzUmVsYXRpdmUpO1xuICAgICAgY29uc3Qgb25SaWdodCA9IChwcmV2LCBpbmRleCkgPT4gcmVzaXplLmNhbGNSaWdodEVkZ2VEZWx0YXMocmVzdWx0LCBwcmV2LCBpbmRleCwgc3RlcCwgdGFibGVTaXplLm1pbkNlbGxXaWR0aCgpLCB0YWJsZVNpemUuaXNSZWxhdGl2ZSk7XG4gICAgICByZXR1cm4gY29udGV4dC5mb2xkKG9uTm9uZSwgb25Pbmx5LCBvbkxlZnQsIG9uTWlkZGxlLCBvblJpZ2h0KTtcbiAgICB9O1xuXG4gICAgY29uc3QgdG90YWwgPSAoc3RhcnQsIGVuZCwgbWVhc3VyZXMpID0+IHtcbiAgICAgIGxldCByID0gMDtcbiAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgIHIgKz0gbWVhc3VyZXNbaV0gIT09IHVuZGVmaW5lZCA/IG1lYXN1cmVzW2ldIDogMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3QgcmVjYWxjdWxhdGVXaWR0aEZvckNlbGxzID0gKHdhcmVob3VzZSwgd2lkdGhzKSA9PiB7XG4gICAgICBjb25zdCBhbGwgPSBXYXJlaG91c2UuanVzdENlbGxzKHdhcmVob3VzZSk7XG4gICAgICByZXR1cm4gbWFwJDEoYWxsLCBjZWxsID0+IHtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0b3RhbChjZWxsLmNvbHVtbiwgY2VsbC5jb2x1bW4gKyBjZWxsLmNvbHNwYW4sIHdpZHRocyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZWxlbWVudDogY2VsbC5lbGVtZW50LFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIGNvbHNwYW46IGNlbGwuY29sc3BhblxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWNhbGN1bGF0ZVdpZHRoRm9yQ29sdW1ucyA9ICh3YXJlaG91c2UsIHdpZHRocykgPT4ge1xuICAgICAgY29uc3QgZ3JvdXBzID0gV2FyZWhvdXNlLmp1c3RDb2x1bW5zKHdhcmVob3VzZSk7XG4gICAgICByZXR1cm4gbWFwJDEoZ3JvdXBzLCAoY29sdW1uLCBpbmRleCkgPT4gKHtcbiAgICAgICAgZWxlbWVudDogY29sdW1uLmVsZW1lbnQsXG4gICAgICAgIHdpZHRoOiB3aWR0aHNbaW5kZXhdLFxuICAgICAgICBjb2xzcGFuOiBjb2x1bW4uY29sc3BhblxuICAgICAgfSkpO1xuICAgIH07XG4gICAgY29uc3QgcmVjYWxjdWxhdGVIZWlnaHRGb3JDZWxscyA9ICh3YXJlaG91c2UsIGhlaWdodHMpID0+IHtcbiAgICAgIGNvbnN0IGFsbCA9IFdhcmVob3VzZS5qdXN0Q2VsbHMod2FyZWhvdXNlKTtcbiAgICAgIHJldHVybiBtYXAkMShhbGwsIGNlbGwgPT4ge1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0b3RhbChjZWxsLnJvdywgY2VsbC5yb3cgKyBjZWxsLnJvd3NwYW4sIGhlaWdodHMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVsZW1lbnQ6IGNlbGwuZWxlbWVudCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgcm93c3BhbjogY2VsbC5yb3dzcGFuXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG1hdGNoUm93SGVpZ2h0ID0gKHdhcmVob3VzZSwgaGVpZ2h0cykgPT4ge1xuICAgICAgcmV0dXJuIG1hcCQxKHdhcmVob3VzZS5hbGwsIChyb3csIGkpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbGVtZW50OiByb3cuZWxlbWVudCxcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodHNbaV1cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBzdW1VcCA9IG5ld1NpemUgPT4gZm9sZHIobmV3U2l6ZSwgKGIsIGEpID0+IGIgKyBhLCAwKTtcbiAgICBjb25zdCByZWNhbGN1bGF0ZSA9ICh3YXJlaG91c2UsIHdpZHRocykgPT4ge1xuICAgICAgaWYgKFdhcmVob3VzZS5oYXNDb2x1bW5zKHdhcmVob3VzZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlY2FsY3VsYXRlV2lkdGhGb3JDb2x1bW5zKHdhcmVob3VzZSwgd2lkdGhzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZWNhbGN1bGF0ZVdpZHRoRm9yQ2VsbHMod2FyZWhvdXNlLCB3aWR0aHMpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVjYWxjdWxhdGVBbmRBcHBseSA9ICh3YXJlaG91c2UsIHdpZHRocywgdGFibGVTaXplKSA9PiB7XG4gICAgICBjb25zdCBuZXdTaXplcyA9IHJlY2FsY3VsYXRlKHdhcmVob3VzZSwgd2lkdGhzKTtcbiAgICAgIGVhY2gkMihuZXdTaXplcywgY2VsbCA9PiB7XG4gICAgICAgIHRhYmxlU2l6ZS5zZXRFbGVtZW50V2lkdGgoY2VsbC5lbGVtZW50LCBjZWxsLndpZHRoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYWRqdXN0V2lkdGggPSAodGFibGUsIGRlbHRhLCBpbmRleCwgcmVzaXppbmcsIHRhYmxlU2l6ZSkgPT4ge1xuICAgICAgY29uc3Qgd2FyZWhvdXNlID0gV2FyZWhvdXNlLmZyb21UYWJsZSh0YWJsZSk7XG4gICAgICBjb25zdCBzdGVwID0gdGFibGVTaXplLmdldENlbGxEZWx0YShkZWx0YSk7XG4gICAgICBjb25zdCB3aWR0aHMgPSB0YWJsZVNpemUuZ2V0V2lkdGhzKHdhcmVob3VzZSwgdGFibGVTaXplKTtcbiAgICAgIGNvbnN0IGlzTGFzdENvbHVtbiA9IGluZGV4ID09PSB3YXJlaG91c2UuZ3JpZC5jb2x1bW5zIC0gMTtcbiAgICAgIGNvbnN0IGNsYW1wZWRTdGVwID0gcmVzaXppbmcuY2xhbXBUYWJsZURlbHRhKHdpZHRocywgaW5kZXgsIHN0ZXAsIHRhYmxlU2l6ZS5taW5DZWxsV2lkdGgoKSwgaXNMYXN0Q29sdW1uKTtcbiAgICAgIGNvbnN0IGRlbHRhcyA9IGRldGVybWluZSh3aWR0aHMsIGluZGV4LCBjbGFtcGVkU3RlcCwgdGFibGVTaXplLCByZXNpemluZyk7XG4gICAgICBjb25zdCBuZXdXaWR0aHMgPSBtYXAkMShkZWx0YXMsIChkeCwgaSkgPT4gZHggKyB3aWR0aHNbaV0pO1xuICAgICAgcmVjYWxjdWxhdGVBbmRBcHBseSh3YXJlaG91c2UsIG5ld1dpZHRocywgdGFibGVTaXplKTtcbiAgICAgIHJlc2l6aW5nLnJlc2l6ZVRhYmxlKHRhYmxlU2l6ZS5hZGp1c3RUYWJsZVdpZHRoLCBjbGFtcGVkU3RlcCwgaXNMYXN0Q29sdW1uKTtcbiAgICB9O1xuICAgIGNvbnN0IGFkanVzdEhlaWdodCA9ICh0YWJsZSwgZGVsdGEsIGluZGV4LCBkaXJlY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHdhcmVob3VzZSA9IFdhcmVob3VzZS5mcm9tVGFibGUodGFibGUpO1xuICAgICAgY29uc3QgaGVpZ2h0cyA9IGdldFBpeGVsSGVpZ2h0cyh3YXJlaG91c2UsIHRhYmxlLCBkaXJlY3Rpb24pO1xuICAgICAgY29uc3QgbmV3SGVpZ2h0cyA9IG1hcCQxKGhlaWdodHMsIChkeSwgaSkgPT4gaW5kZXggPT09IGkgPyBNYXRoLm1heChkZWx0YSArIGR5LCBtaW5IZWlnaHQoKSkgOiBkeSk7XG4gICAgICBjb25zdCBuZXdDZWxsU2l6ZXMgPSByZWNhbGN1bGF0ZUhlaWdodEZvckNlbGxzKHdhcmVob3VzZSwgbmV3SGVpZ2h0cyk7XG4gICAgICBjb25zdCBuZXdSb3dTaXplcyA9IG1hdGNoUm93SGVpZ2h0KHdhcmVob3VzZSwgbmV3SGVpZ2h0cyk7XG4gICAgICBlYWNoJDIobmV3Um93U2l6ZXMsIHJvdyA9PiB7XG4gICAgICAgIHNldEhlaWdodChyb3cuZWxlbWVudCwgcm93LmhlaWdodCk7XG4gICAgICB9KTtcbiAgICAgIGVhY2gkMihuZXdDZWxsU2l6ZXMsIGNlbGwgPT4ge1xuICAgICAgICBzZXRIZWlnaHQoY2VsbC5lbGVtZW50LCBjZWxsLmhlaWdodCk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHRvdGFsID0gc3VtVXAobmV3SGVpZ2h0cyk7XG4gICAgICBzZXRIZWlnaHQodGFibGUsIHRvdGFsKTtcbiAgICB9O1xuICAgIGNvbnN0IGFkanVzdEFuZFJlZGlzdHJpYnV0ZVdpZHRocyQxID0gKF90YWJsZSwgbGlzdCwgZGV0YWlscywgdGFibGVTaXplLCByZXNpemVCZWhhdmlvdXIpID0+IHtcbiAgICAgIGNvbnN0IHdhcmVob3VzZSA9IFdhcmVob3VzZS5nZW5lcmF0ZShsaXN0KTtcbiAgICAgIGNvbnN0IHNpemVzID0gdGFibGVTaXplLmdldFdpZHRocyh3YXJlaG91c2UsIHRhYmxlU2l6ZSk7XG4gICAgICBjb25zdCB0YWJsZVBpeGVsV2lkdGggPSB0YWJsZVNpemUucGl4ZWxXaWR0aCgpO1xuICAgICAgY29uc3Qge25ld1NpemVzLCBkZWx0YX0gPSByZXNpemVCZWhhdmlvdXIuY2FsY1JlZGVzdHJpYnV0ZWRXaWR0aHMoc2l6ZXMsIHRhYmxlUGl4ZWxXaWR0aCwgZGV0YWlscy5waXhlbERlbHRhLCB0YWJsZVNpemUuaXNSZWxhdGl2ZSk7XG4gICAgICByZWNhbGN1bGF0ZUFuZEFwcGx5KHdhcmVob3VzZSwgbmV3U2l6ZXMsIHRhYmxlU2l6ZSk7XG4gICAgICB0YWJsZVNpemUuYWRqdXN0VGFibGVXaWR0aChkZWx0YSk7XG4gICAgfTtcbiAgICBjb25zdCBhZGp1c3RXaWR0aFRvID0gKF90YWJsZSwgbGlzdCwgX2luZm8sIHRhYmxlU2l6ZSkgPT4ge1xuICAgICAgY29uc3Qgd2FyZWhvdXNlID0gV2FyZWhvdXNlLmdlbmVyYXRlKGxpc3QpO1xuICAgICAgY29uc3Qgd2lkdGhzID0gdGFibGVTaXplLmdldFdpZHRocyh3YXJlaG91c2UsIHRhYmxlU2l6ZSk7XG4gICAgICByZWNhbGN1bGF0ZUFuZEFwcGx5KHdhcmVob3VzZSwgd2lkdGhzLCB0YWJsZVNpemUpO1xuICAgIH07XG5cbiAgICBjb25zdCB1bmlxdWVDb2x1bW5zID0gZGV0YWlscyA9PiB7XG4gICAgICBjb25zdCB1bmlxdWVDaGVjayA9IChyZXN0LCBkZXRhaWwpID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1uRXhpc3RzID0gZXhpc3RzKHJlc3QsIGN1cnJlbnREZXRhaWwgPT4gY3VycmVudERldGFpbC5jb2x1bW4gPT09IGRldGFpbC5jb2x1bW4pO1xuICAgICAgICByZXR1cm4gY29sdW1uRXhpc3RzID8gcmVzdCA6IHJlc3QuY29uY2F0KFtkZXRhaWxdKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gZm9sZGwoZGV0YWlscywgdW5pcXVlQ2hlY2ssIFtdKS5zb3J0KChkZXRhaWxBLCBkZXRhaWxCKSA9PiBkZXRhaWxBLmNvbHVtbiAtIGRldGFpbEIuY29sdW1uKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNDb2wgPSBpc1RhZygnY29sJyk7XG4gICAgY29uc3QgaXNDb2xncm91cCA9IGlzVGFnKCdjb2xncm91cCcpO1xuICAgIGNvbnN0IGlzUm93JDEgPSBlbGVtZW50ID0+IG5hbWUoZWxlbWVudCkgPT09ICd0cicgfHwgaXNDb2xncm91cChlbGVtZW50KTtcbiAgICBjb25zdCBlbGVtZW50VG9EYXRhID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBjb2xzcGFuID0gZ2V0QXR0clZhbHVlKGVsZW1lbnQsICdjb2xzcGFuJywgMSk7XG4gICAgICBjb25zdCByb3dzcGFuID0gZ2V0QXR0clZhbHVlKGVsZW1lbnQsICdyb3dzcGFuJywgMSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBjb2xzcGFuLFxuICAgICAgICByb3dzcGFuXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgbW9kaWZpY2F0aW9uID0gKGdlbmVyYXRvcnMsIHRvRGF0YSA9IGVsZW1lbnRUb0RhdGEpID0+IHtcbiAgICAgIGNvbnN0IG51Q2VsbCA9IGRhdGEgPT4gaXNDb2woZGF0YS5lbGVtZW50KSA/IGdlbmVyYXRvcnMuY29sKGRhdGEpIDogZ2VuZXJhdG9ycy5jZWxsKGRhdGEpO1xuICAgICAgY29uc3QgbnVSb3cgPSBkYXRhID0+IGlzQ29sZ3JvdXAoZGF0YS5lbGVtZW50KSA/IGdlbmVyYXRvcnMuY29sZ3JvdXAoZGF0YSkgOiBnZW5lcmF0b3JzLnJvdyhkYXRhKTtcbiAgICAgIGNvbnN0IGFkZCA9IGVsZW1lbnQgPT4ge1xuICAgICAgICBpZiAoaXNSb3ckMShlbGVtZW50KSkge1xuICAgICAgICAgIHJldHVybiBudVJvdyh7IGVsZW1lbnQgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY2VsbCA9IGVsZW1lbnQ7XG4gICAgICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSBudUNlbGwodG9EYXRhKGNlbGwpKTtcbiAgICAgICAgICByZWNlbnQgPSBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgIGl0ZW06IGNlbGwsXG4gICAgICAgICAgICByZXBsYWNlbWVudFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiByZXBsYWNlbWVudDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGxldCByZWNlbnQgPSBPcHRpb25hbC5ub25lKCk7XG4gICAgICBjb25zdCBnZXRPckluaXQgPSAoZWxlbWVudCwgY29tcGFyYXRvcikgPT4ge1xuICAgICAgICByZXR1cm4gcmVjZW50LmZvbGQoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBhZGQoZWxlbWVudCk7XG4gICAgICAgIH0sIHAgPT4ge1xuICAgICAgICAgIHJldHVybiBjb21wYXJhdG9yKGVsZW1lbnQsIHAuaXRlbSkgPyBwLnJlcGxhY2VtZW50IDogYWRkKGVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBnZXRPckluaXQgfTtcbiAgICB9O1xuICAgIGNvbnN0IHRyYW5zZm9ybSQxID0gdGFnID0+IHtcbiAgICAgIHJldHVybiBnZW5lcmF0b3JzID0+IHtcbiAgICAgICAgY29uc3QgbGlzdCA9IFtdO1xuICAgICAgICBjb25zdCBmaW5kID0gKGVsZW1lbnQsIGNvbXBhcmF0b3IpID0+IHtcbiAgICAgICAgICByZXR1cm4gZmluZCQxKGxpc3QsIHggPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmF0b3IoeC5pdGVtLCBlbGVtZW50KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbWFrZU5ldyA9IGVsZW1lbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IGF0dHJzID0gdGFnID09PSAndGQnID8geyBzY29wZTogbnVsbCB9IDoge307XG4gICAgICAgICAgY29uc3QgY2VsbCA9IGdlbmVyYXRvcnMucmVwbGFjZShlbGVtZW50LCB0YWcsIGF0dHJzKTtcbiAgICAgICAgICBsaXN0LnB1c2goe1xuICAgICAgICAgICAgaXRlbTogZWxlbWVudCxcbiAgICAgICAgICAgIHN1YjogY2VsbFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBjZWxsO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXBsYWNlT3JJbml0ID0gKGVsZW1lbnQsIGNvbXBhcmF0b3IpID0+IHtcbiAgICAgICAgICBpZiAoaXNSb3ckMShlbGVtZW50KSB8fCBpc0NvbChlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBlbGVtZW50O1xuICAgICAgICAgICAgcmV0dXJuIGZpbmQoY2VsbCwgY29tcGFyYXRvcikuZm9sZCgoKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBtYWtlTmV3KGNlbGwpO1xuICAgICAgICAgICAgfSwgcCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBjb21wYXJhdG9yKGVsZW1lbnQsIHAuaXRlbSkgPyBwLnN1YiA6IG1ha2VOZXcoY2VsbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7IHJlcGxhY2VPckluaXQgfTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBnZXRTY29wZUF0dHJpYnV0ZSA9IGNlbGwgPT4gZ2V0T3B0KGNlbGwsICdzY29wZScpLm1hcChhdHRyaWJ1dGUgPT4gYXR0cmlidXRlLnN1YnN0cigwLCAzKSk7XG4gICAgY29uc3QgbWVyZ2luZyA9IGdlbmVyYXRvcnMgPT4ge1xuICAgICAgY29uc3QgdW5tZXJnZSA9IGNlbGwgPT4ge1xuICAgICAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlQXR0cmlidXRlKGNlbGwpO1xuICAgICAgICBzY29wZS5lYWNoKGF0dHJpYnV0ZSA9PiBzZXQkMihjZWxsLCAnc2NvcGUnLCBhdHRyaWJ1dGUpKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICBjb25zdCByYXcgPSBnZW5lcmF0b3JzLmNlbGwoe1xuICAgICAgICAgICAgZWxlbWVudDogY2VsbCxcbiAgICAgICAgICAgIGNvbHNwYW46IDEsXG4gICAgICAgICAgICByb3dzcGFuOiAxXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmVtb3ZlJDUocmF3LCAnd2lkdGgnKTtcbiAgICAgICAgICByZW1vdmUkNShjZWxsLCAnd2lkdGgnKTtcbiAgICAgICAgICBzY29wZS5lYWNoKGF0dHJpYnV0ZSA9PiBzZXQkMihyYXcsICdzY29wZScsIGF0dHJpYnV0ZSkpO1xuICAgICAgICAgIHJldHVybiByYXc7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uc3QgbWVyZ2UgPSBjZWxscyA9PiB7XG4gICAgICAgIGNvbnN0IGdldFNjb3BlUHJvcGVydHkgPSAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RyaW5nQXR0cmlidXRlcyA9IGNhdChtYXAkMShjZWxscywgZ2V0U2NvcGVBdHRyaWJ1dGUpKTtcbiAgICAgICAgICBpZiAoc3RyaW5nQXR0cmlidXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VTY29wZSA9IHN0cmluZ0F0dHJpYnV0ZXNbMF07XG4gICAgICAgICAgICBjb25zdCBzY29wZXMgPSBbXG4gICAgICAgICAgICAgICdyb3cnLFxuICAgICAgICAgICAgICAnY29sJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGNvbnN0IGlzTWl4ZWQgPSBleGlzdHMoc3RyaW5nQXR0cmlidXRlcywgYXR0cmlidXRlID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZSAhPT0gYmFzZVNjb3BlICYmIGNvbnRhaW5zJDIoc2NvcGVzLCBhdHRyaWJ1dGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gaXNNaXhlZCA/IE9wdGlvbmFsLm5vbmUoKSA6IE9wdGlvbmFsLmZyb20oYmFzZVNjb3BlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJlbW92ZSQ1KGNlbGxzWzBdLCAnd2lkdGgnKTtcbiAgICAgICAgZ2V0U2NvcGVQcm9wZXJ0eSgpLmZvbGQoKCkgPT4gcmVtb3ZlJDcoY2VsbHNbMF0sICdzY29wZScpLCBhdHRyaWJ1dGUgPT4gc2V0JDIoY2VsbHNbMF0sICdzY29wZScsIGF0dHJpYnV0ZSArICdncm91cCcpKTtcbiAgICAgICAgcmV0dXJuIGNvbnN0YW50KGNlbGxzWzBdKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1bm1lcmdlLFxuICAgICAgICBtZXJnZVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IEdlbmVyYXRvcnMgPSB7XG4gICAgICBtb2RpZmljYXRpb24sXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybSQxLFxuICAgICAgbWVyZ2luZ1xuICAgIH07XG5cbiAgICBjb25zdCBibG9ja0xpc3QgPSBbXG4gICAgICAnYm9keScsXG4gICAgICAncCcsXG4gICAgICAnZGl2JyxcbiAgICAgICdhcnRpY2xlJyxcbiAgICAgICdhc2lkZScsXG4gICAgICAnZmlnY2FwdGlvbicsXG4gICAgICAnZmlndXJlJyxcbiAgICAgICdmb290ZXInLFxuICAgICAgJ2hlYWRlcicsXG4gICAgICAnbmF2JyxcbiAgICAgICdzZWN0aW9uJyxcbiAgICAgICdvbCcsXG4gICAgICAndWwnLFxuICAgICAgJ3RhYmxlJyxcbiAgICAgICd0aGVhZCcsXG4gICAgICAndGZvb3QnLFxuICAgICAgJ3Rib2R5JyxcbiAgICAgICdjYXB0aW9uJyxcbiAgICAgICd0cicsXG4gICAgICAndGQnLFxuICAgICAgJ3RoJyxcbiAgICAgICdoMScsXG4gICAgICAnaDInLFxuICAgICAgJ2gzJyxcbiAgICAgICdoNCcsXG4gICAgICAnaDUnLFxuICAgICAgJ2g2JyxcbiAgICAgICdibG9ja3F1b3RlJyxcbiAgICAgICdwcmUnLFxuICAgICAgJ2FkZHJlc3MnXG4gICAgXTtcbiAgICBjb25zdCBpc0xpc3QkMSA9ICh1bml2ZXJzZSwgaXRlbSkgPT4ge1xuICAgICAgY29uc3QgdGFnTmFtZSA9IHVuaXZlcnNlLnByb3BlcnR5KCkubmFtZShpdGVtKTtcbiAgICAgIHJldHVybiBjb250YWlucyQyKFtcbiAgICAgICAgJ29sJyxcbiAgICAgICAgJ3VsJ1xuICAgICAgXSwgdGFnTmFtZSk7XG4gICAgfTtcbiAgICBjb25zdCBpc0Jsb2NrJDEgPSAodW5pdmVyc2UsIGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHRhZ05hbWUgPSB1bml2ZXJzZS5wcm9wZXJ0eSgpLm5hbWUoaXRlbSk7XG4gICAgICByZXR1cm4gY29udGFpbnMkMihibG9ja0xpc3QsIHRhZ05hbWUpO1xuICAgIH07XG4gICAgY29uc3QgaXNFbXB0eVRhZyQxID0gKHVuaXZlcnNlLCBpdGVtKSA9PiB7XG4gICAgICByZXR1cm4gY29udGFpbnMkMihbXG4gICAgICAgICdicicsXG4gICAgICAgICdpbWcnLFxuICAgICAgICAnaHInLFxuICAgICAgICAnaW5wdXQnXG4gICAgICBdLCB1bml2ZXJzZS5wcm9wZXJ0eSgpLm5hbWUoaXRlbSkpO1xuICAgIH07XG5cbiAgICBjb25zdCB1bml2ZXJzZSQxID0gRG9tVW5pdmVyc2UoKTtcbiAgICBjb25zdCBpc0Jsb2NrID0gZWxlbWVudCA9PiB7XG4gICAgICByZXR1cm4gaXNCbG9jayQxKHVuaXZlcnNlJDEsIGVsZW1lbnQpO1xuICAgIH07XG4gICAgY29uc3QgaXNMaXN0ID0gZWxlbWVudCA9PiB7XG4gICAgICByZXR1cm4gaXNMaXN0JDEodW5pdmVyc2UkMSwgZWxlbWVudCk7XG4gICAgfTtcbiAgICBjb25zdCBpc0VtcHR5VGFnID0gZWxlbWVudCA9PiB7XG4gICAgICByZXR1cm4gaXNFbXB0eVRhZyQxKHVuaXZlcnNlJDEsIGVsZW1lbnQpO1xuICAgIH07XG5cbiAgICBjb25zdCBtZXJnZSA9IGNlbGxzID0+IHtcbiAgICAgIGNvbnN0IGlzQnIgPSBpc1RhZygnYnInKTtcbiAgICAgIGNvbnN0IGFkdmFuY2VkQnIgPSBjaGlsZHJlbiA9PiB7XG4gICAgICAgIHJldHVybiBmb3JhbGwoY2hpbGRyZW4sIGMgPT4ge1xuICAgICAgICAgIHJldHVybiBpc0JyKGMpIHx8IGlzVGV4dChjKSAmJiBnZXQkNihjKS50cmltKCkubGVuZ3RoID09PSAwO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0xpc3RJdGVtID0gZWwgPT4ge1xuICAgICAgICByZXR1cm4gbmFtZShlbCkgPT09ICdsaScgfHwgYW5jZXN0b3IkMihlbCwgaXNMaXN0KS5pc1NvbWUoKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzaWJsaW5nSXNCbG9jayA9IGVsID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHRTaWJsaW5nKGVsKS5tYXAocmlnaHRTaWJsaW5nID0+IHtcbiAgICAgICAgICBpZiAoaXNCbG9jayhyaWdodFNpYmxpbmcpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzRW1wdHlUYWcocmlnaHRTaWJsaW5nKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWUocmlnaHRTaWJsaW5nKSA9PT0gJ2ltZycgPyBmYWxzZSA6IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSkuZ2V0T3IoZmFsc2UpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG1hcmtDZWxsID0gY2VsbCA9PiB7XG4gICAgICAgIHJldHVybiBsYXN0JDEoY2VsbCkuYmluZChyaWdodEVkZ2UgPT4ge1xuICAgICAgICAgIGNvbnN0IHJpZ2h0U2libGluZ0lzQmxvY2sgPSBzaWJsaW5nSXNCbG9jayhyaWdodEVkZ2UpO1xuICAgICAgICAgIHJldHVybiBwYXJlbnQocmlnaHRFZGdlKS5tYXAocGFyZW50ID0+IHtcbiAgICAgICAgICAgIHJldHVybiByaWdodFNpYmxpbmdJc0Jsb2NrID09PSB0cnVlIHx8IGlzTGlzdEl0ZW0ocGFyZW50KSB8fCBpc0JyKHJpZ2h0RWRnZSkgfHwgaXNCbG9jayhwYXJlbnQpICYmICFlcSQxKGNlbGwsIHBhcmVudCkgPyBbXSA6IFtTdWdhckVsZW1lbnQuZnJvbVRhZygnYnInKV07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLmdldE9yKFtdKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBtYXJrQ29udGVudCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IGJpbmQkMihjZWxscywgY2VsbCA9PiB7XG4gICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBjaGlsZHJlbiQyKGNlbGwpO1xuICAgICAgICAgIHJldHVybiBhZHZhbmNlZEJyKGNoaWxkcmVuKSA/IFtdIDogY2hpbGRyZW4uY29uY2F0KG1hcmtDZWxsKGNlbGwpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb250ZW50Lmxlbmd0aCA9PT0gMCA/IFtTdWdhckVsZW1lbnQuZnJvbVRhZygnYnInKV0gOiBjb250ZW50O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbnRlbnRzID0gbWFya0NvbnRlbnQoKTtcbiAgICAgIGVtcHR5KGNlbGxzWzBdKTtcbiAgICAgIGFwcGVuZChjZWxsc1swXSwgY29udGVudHMpO1xuICAgIH07XG5cbiAgICBjb25zdCBpc0VkaXRhYmxlID0gZWxlbSA9PiBpc0VkaXRhYmxlJDEoZWxlbSwgdHJ1ZSk7XG4gICAgY29uc3QgcHJ1bmUgPSB0YWJsZSA9PiB7XG4gICAgICBjb25zdCBjZWxscyA9IGNlbGxzJDEodGFibGUpO1xuICAgICAgaWYgKGNlbGxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZW1vdmUkNih0YWJsZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBvdXRjb21lID0gKGdyaWQsIGN1cnNvcikgPT4gKHtcbiAgICAgIGdyaWQsXG4gICAgICBjdXJzb3JcbiAgICB9KTtcbiAgICBjb25zdCBmaW5kRWRpdGFibGVDdXJzb3JQb3NpdGlvbiA9IHJvd3MgPT4gZmluZE1hcChyb3dzLCByb3cgPT4gZmluZE1hcChyb3cuY2VsbHMsIGNlbGwgPT4ge1xuICAgICAgY29uc3QgZWxlbSA9IGNlbGwuZWxlbWVudDtcbiAgICAgIHJldHVybiBzb21lSWYoaXNFZGl0YWJsZShlbGVtKSwgZWxlbSk7XG4gICAgfSkpO1xuICAgIGNvbnN0IGVsZW1lbnRGcm9tR3JpZCA9IChncmlkLCByb3csIGNvbHVtbikgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGNvbnN0IHJvd3MgPSBleHRyYWN0R3JpZERldGFpbHMoZ3JpZCkucm93cztcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKChfYiA9IChfYSA9IHJvd3Nbcm93XSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNlbGxzW2NvbHVtbl0pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5lbGVtZW50KS5maWx0ZXIoaXNFZGl0YWJsZSkub3JUaHVuaygoKSA9PiBmaW5kRWRpdGFibGVDdXJzb3JQb3NpdGlvbihyb3dzKSk7XG4gICAgfTtcbiAgICBjb25zdCBidW5kbGUgPSAoZ3JpZCwgcm93LCBjb2x1bW4pID0+IHtcbiAgICAgIGNvbnN0IGN1cnNvckVsZW1lbnQgPSBlbGVtZW50RnJvbUdyaWQoZ3JpZCwgcm93LCBjb2x1bW4pO1xuICAgICAgcmV0dXJuIG91dGNvbWUoZ3JpZCwgY3Vyc29yRWxlbWVudCk7XG4gICAgfTtcbiAgICBjb25zdCB1bmlxdWVSb3dzID0gZGV0YWlscyA9PiB7XG4gICAgICBjb25zdCByb3dDb21waWxhdGlvbiA9IChyZXN0LCBkZXRhaWwpID0+IHtcbiAgICAgICAgY29uc3Qgcm93RXhpc3RzID0gZXhpc3RzKHJlc3QsIGN1cnJlbnREZXRhaWwgPT4gY3VycmVudERldGFpbC5yb3cgPT09IGRldGFpbC5yb3cpO1xuICAgICAgICByZXR1cm4gcm93RXhpc3RzID8gcmVzdCA6IHJlc3QuY29uY2F0KFtkZXRhaWxdKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gZm9sZGwoZGV0YWlscywgcm93Q29tcGlsYXRpb24sIFtdKS5zb3J0KChkZXRhaWxBLCBkZXRhaWxCKSA9PiBkZXRhaWxBLnJvdyAtIGRldGFpbEIucm93KTtcbiAgICB9O1xuICAgIGNvbnN0IG9wSW5zZXJ0Um93c0JlZm9yZSA9IChncmlkLCBkZXRhaWxzLCBjb21wYXJhdG9yLCBnZW5XcmFwcGVycykgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0SW5kZXggPSBkZXRhaWxzWzBdLnJvdztcbiAgICAgIGNvbnN0IHJvd3MgPSB1bmlxdWVSb3dzKGRldGFpbHMpO1xuICAgICAgY29uc3QgbmV3R3JpZCA9IGZvbGRyKHJvd3MsIChhY2MsIHJvdykgPT4ge1xuICAgICAgICBjb25zdCBuZXdHID0gaW5zZXJ0Um93QXQoYWNjLmdyaWQsIHRhcmdldEluZGV4LCByb3cucm93ICsgYWNjLmRlbHRhLCBjb21wYXJhdG9yLCBnZW5XcmFwcGVycy5nZXRPckluaXQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGdyaWQ6IG5ld0csXG4gICAgICAgICAgZGVsdGE6IGFjYy5kZWx0YSArIDFcbiAgICAgICAgfTtcbiAgICAgIH0sIHtcbiAgICAgICAgZ3JpZCxcbiAgICAgICAgZGVsdGE6IDBcbiAgICAgIH0pLmdyaWQ7XG4gICAgICByZXR1cm4gYnVuZGxlKG5ld0dyaWQsIHRhcmdldEluZGV4LCBkZXRhaWxzWzBdLmNvbHVtbik7XG4gICAgfTtcbiAgICBjb25zdCBvcEluc2VydFJvd3NBZnRlciA9IChncmlkLCBkZXRhaWxzLCBjb21wYXJhdG9yLCBnZW5XcmFwcGVycykgPT4ge1xuICAgICAgY29uc3Qgcm93cyA9IHVuaXF1ZVJvd3MoZGV0YWlscyk7XG4gICAgICBjb25zdCB0YXJnZXQgPSByb3dzW3Jvd3MubGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCB0YXJnZXRJbmRleCA9IHRhcmdldC5yb3cgKyB0YXJnZXQucm93c3BhbjtcbiAgICAgIGNvbnN0IG5ld0dyaWQgPSBmb2xkcihyb3dzLCAobmV3Rywgcm93KSA9PiB7XG4gICAgICAgIHJldHVybiBpbnNlcnRSb3dBdChuZXdHLCB0YXJnZXRJbmRleCwgcm93LnJvdywgY29tcGFyYXRvciwgZ2VuV3JhcHBlcnMuZ2V0T3JJbml0KTtcbiAgICAgIH0sIGdyaWQpO1xuICAgICAgcmV0dXJuIGJ1bmRsZShuZXdHcmlkLCB0YXJnZXRJbmRleCwgZGV0YWlsc1swXS5jb2x1bW4pO1xuICAgIH07XG4gICAgY29uc3Qgb3BJbnNlcnRDb2x1bW5zQmVmb3JlID0gKGdyaWQsIGV4dHJhY3REZXRhaWwsIGNvbXBhcmF0b3IsIGdlbldyYXBwZXJzKSA9PiB7XG4gICAgICBjb25zdCBkZXRhaWxzID0gZXh0cmFjdERldGFpbC5kZXRhaWxzO1xuICAgICAgY29uc3QgY29sdW1ucyA9IHVuaXF1ZUNvbHVtbnMoZGV0YWlscyk7XG4gICAgICBjb25zdCB0YXJnZXRJbmRleCA9IGNvbHVtbnNbMF0uY29sdW1uO1xuICAgICAgY29uc3QgbmV3R3JpZCA9IGZvbGRyKGNvbHVtbnMsIChhY2MsIGNvbCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdHID0gaW5zZXJ0Q29sdW1uQXQoYWNjLmdyaWQsIHRhcmdldEluZGV4LCBjb2wuY29sdW1uICsgYWNjLmRlbHRhLCBjb21wYXJhdG9yLCBnZW5XcmFwcGVycy5nZXRPckluaXQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGdyaWQ6IG5ld0csXG4gICAgICAgICAgZGVsdGE6IGFjYy5kZWx0YSArIDFcbiAgICAgICAgfTtcbiAgICAgIH0sIHtcbiAgICAgICAgZ3JpZCxcbiAgICAgICAgZGVsdGE6IDBcbiAgICAgIH0pLmdyaWQ7XG4gICAgICByZXR1cm4gYnVuZGxlKG5ld0dyaWQsIGRldGFpbHNbMF0ucm93LCB0YXJnZXRJbmRleCk7XG4gICAgfTtcbiAgICBjb25zdCBvcEluc2VydENvbHVtbnNBZnRlciA9IChncmlkLCBleHRyYWN0RGV0YWlsLCBjb21wYXJhdG9yLCBnZW5XcmFwcGVycykgPT4ge1xuICAgICAgY29uc3QgZGV0YWlscyA9IGV4dHJhY3REZXRhaWwuZGV0YWlscztcbiAgICAgIGNvbnN0IHRhcmdldCA9IGRldGFpbHNbZGV0YWlscy5sZW5ndGggLSAxXTtcbiAgICAgIGNvbnN0IHRhcmdldEluZGV4ID0gdGFyZ2V0LmNvbHVtbiArIHRhcmdldC5jb2xzcGFuO1xuICAgICAgY29uc3QgY29sdW1ucyA9IHVuaXF1ZUNvbHVtbnMoZGV0YWlscyk7XG4gICAgICBjb25zdCBuZXdHcmlkID0gZm9sZHIoY29sdW1ucywgKG5ld0csIGNvbCkgPT4ge1xuICAgICAgICByZXR1cm4gaW5zZXJ0Q29sdW1uQXQobmV3RywgdGFyZ2V0SW5kZXgsIGNvbC5jb2x1bW4sIGNvbXBhcmF0b3IsIGdlbldyYXBwZXJzLmdldE9ySW5pdCk7XG4gICAgICB9LCBncmlkKTtcbiAgICAgIHJldHVybiBidW5kbGUobmV3R3JpZCwgZGV0YWlsc1swXS5yb3csIHRhcmdldEluZGV4KTtcbiAgICB9O1xuICAgIGNvbnN0IG9wTWFrZUNvbHVtbnNIZWFkZXIgPSAoaW5pdGlhbEdyaWQsIGRldGFpbHMsIGNvbXBhcmF0b3IsIGdlbldyYXBwZXJzKSA9PiB7XG4gICAgICBjb25zdCBjb2x1bW5zID0gdW5pcXVlQ29sdW1ucyhkZXRhaWxzKTtcbiAgICAgIGNvbnN0IGNvbHVtbkluZGV4ZXMgPSBtYXAkMShjb2x1bW5zLCBkZXRhaWwgPT4gZGV0YWlsLmNvbHVtbik7XG4gICAgICBjb25zdCBuZXdHcmlkID0gcmVwbGFjZUNvbHVtbnMoaW5pdGlhbEdyaWQsIGNvbHVtbkluZGV4ZXMsIHRydWUsIGNvbXBhcmF0b3IsIGdlbldyYXBwZXJzLnJlcGxhY2VPckluaXQpO1xuICAgICAgcmV0dXJuIGJ1bmRsZShuZXdHcmlkLCBkZXRhaWxzWzBdLnJvdywgZGV0YWlsc1swXS5jb2x1bW4pO1xuICAgIH07XG4gICAgY29uc3Qgb3BNYWtlQ2VsbHNIZWFkZXIgPSAoaW5pdGlhbEdyaWQsIGRldGFpbHMsIGNvbXBhcmF0b3IsIGdlbldyYXBwZXJzKSA9PiB7XG4gICAgICBjb25zdCBuZXdHcmlkID0gcmVwbGFjZUNlbGxzKGluaXRpYWxHcmlkLCBkZXRhaWxzLCBjb21wYXJhdG9yLCBnZW5XcmFwcGVycy5yZXBsYWNlT3JJbml0KTtcbiAgICAgIHJldHVybiBidW5kbGUobmV3R3JpZCwgZGV0YWlsc1swXS5yb3csIGRldGFpbHNbMF0uY29sdW1uKTtcbiAgICB9O1xuICAgIGNvbnN0IG9wVW5tYWtlQ29sdW1uc0hlYWRlciA9IChpbml0aWFsR3JpZCwgZGV0YWlscywgY29tcGFyYXRvciwgZ2VuV3JhcHBlcnMpID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtbnMgPSB1bmlxdWVDb2x1bW5zKGRldGFpbHMpO1xuICAgICAgY29uc3QgY29sdW1uSW5kZXhlcyA9IG1hcCQxKGNvbHVtbnMsIGRldGFpbCA9PiBkZXRhaWwuY29sdW1uKTtcbiAgICAgIGNvbnN0IG5ld0dyaWQgPSByZXBsYWNlQ29sdW1ucyhpbml0aWFsR3JpZCwgY29sdW1uSW5kZXhlcywgZmFsc2UsIGNvbXBhcmF0b3IsIGdlbldyYXBwZXJzLnJlcGxhY2VPckluaXQpO1xuICAgICAgcmV0dXJuIGJ1bmRsZShuZXdHcmlkLCBkZXRhaWxzWzBdLnJvdywgZGV0YWlsc1swXS5jb2x1bW4pO1xuICAgIH07XG4gICAgY29uc3Qgb3BVbm1ha2VDZWxsc0hlYWRlciA9IChpbml0aWFsR3JpZCwgZGV0YWlscywgY29tcGFyYXRvciwgZ2VuV3JhcHBlcnMpID0+IHtcbiAgICAgIGNvbnN0IG5ld0dyaWQgPSByZXBsYWNlQ2VsbHMoaW5pdGlhbEdyaWQsIGRldGFpbHMsIGNvbXBhcmF0b3IsIGdlbldyYXBwZXJzLnJlcGxhY2VPckluaXQpO1xuICAgICAgcmV0dXJuIGJ1bmRsZShuZXdHcmlkLCBkZXRhaWxzWzBdLnJvdywgZGV0YWlsc1swXS5jb2x1bW4pO1xuICAgIH07XG4gICAgY29uc3QgbWFrZVJvd3NTZWN0aW9uID0gKHNlY3Rpb24sIGFwcGx5U2NvcGUpID0+IChpbml0aWFsR3JpZCwgZGV0YWlscywgY29tcGFyYXRvciwgZ2VuV3JhcHBlcnMsIHRhYmxlU2VjdGlvbikgPT4ge1xuICAgICAgY29uc3Qgcm93cyA9IHVuaXF1ZVJvd3MoZGV0YWlscyk7XG4gICAgICBjb25zdCByb3dJbmRleGVzID0gbWFwJDEocm93cywgZGV0YWlsID0+IGRldGFpbC5yb3cpO1xuICAgICAgY29uc3QgbmV3R3JpZCA9IHJlcGxhY2VSb3dzKGluaXRpYWxHcmlkLCByb3dJbmRleGVzLCBzZWN0aW9uLCBhcHBseVNjb3BlLCBjb21wYXJhdG9yLCBnZW5XcmFwcGVycy5yZXBsYWNlT3JJbml0LCB0YWJsZVNlY3Rpb24pO1xuICAgICAgcmV0dXJuIGJ1bmRsZShuZXdHcmlkLCBkZXRhaWxzWzBdLnJvdywgZGV0YWlsc1swXS5jb2x1bW4pO1xuICAgIH07XG4gICAgY29uc3Qgb3BNYWtlUm93c0hlYWRlciA9IG1ha2VSb3dzU2VjdGlvbigndGhlYWQnLCB0cnVlKTtcbiAgICBjb25zdCBvcE1ha2VSb3dzQm9keSA9IG1ha2VSb3dzU2VjdGlvbigndGJvZHknLCBmYWxzZSk7XG4gICAgY29uc3Qgb3BNYWtlUm93c0Zvb3RlciA9IG1ha2VSb3dzU2VjdGlvbigndGZvb3QnLCBmYWxzZSk7XG4gICAgY29uc3Qgb3BFcmFzZUNvbHVtbnMgPSAoZ3JpZCwgZXh0cmFjdERldGFpbCwgX2NvbXBhcmF0b3IsIF9nZW5XcmFwcGVycykgPT4ge1xuICAgICAgY29uc3QgY29sdW1ucyA9IHVuaXF1ZUNvbHVtbnMoZXh0cmFjdERldGFpbC5kZXRhaWxzKTtcbiAgICAgIGNvbnN0IG5ld0dyaWQgPSBkZWxldGVDb2x1bW5zQXQoZ3JpZCwgbWFwJDEoY29sdW1ucywgY29sdW1uID0+IGNvbHVtbi5jb2x1bW4pKTtcbiAgICAgIGNvbnN0IG1heENvbEluZGV4ID0gbmV3R3JpZC5sZW5ndGggPiAwID8gbmV3R3JpZFswXS5jZWxscy5sZW5ndGggLSAxIDogMDtcbiAgICAgIHJldHVybiBidW5kbGUobmV3R3JpZCwgY29sdW1uc1swXS5yb3csIE1hdGgubWluKGNvbHVtbnNbMF0uY29sdW1uLCBtYXhDb2xJbmRleCkpO1xuICAgIH07XG4gICAgY29uc3Qgb3BFcmFzZVJvd3MgPSAoZ3JpZCwgZGV0YWlscywgX2NvbXBhcmF0b3IsIF9nZW5XcmFwcGVycykgPT4ge1xuICAgICAgY29uc3Qgcm93cyA9IHVuaXF1ZVJvd3MoZGV0YWlscyk7XG4gICAgICBjb25zdCBuZXdHcmlkID0gZGVsZXRlUm93c0F0KGdyaWQsIHJvd3NbMF0ucm93LCByb3dzW3Jvd3MubGVuZ3RoIC0gMV0ucm93KTtcbiAgICAgIGNvbnN0IG1heFJvd0luZGV4ID0gbmV3R3JpZC5sZW5ndGggPiAwID8gbmV3R3JpZC5sZW5ndGggLSAxIDogMDtcbiAgICAgIHJldHVybiBidW5kbGUobmV3R3JpZCwgTWF0aC5taW4oZGV0YWlsc1swXS5yb3csIG1heFJvd0luZGV4KSwgZGV0YWlsc1swXS5jb2x1bW4pO1xuICAgIH07XG4gICAgY29uc3Qgb3BNZXJnZUNlbGxzID0gKGdyaWQsIG1lcmdhYmxlLCBjb21wYXJhdG9yLCBnZW5XcmFwcGVycykgPT4ge1xuICAgICAgY29uc3QgY2VsbHMgPSBtZXJnYWJsZS5jZWxscztcbiAgICAgIG1lcmdlKGNlbGxzKTtcbiAgICAgIGNvbnN0IG5ld0dyaWQgPSBtZXJnZSQyKGdyaWQsIG1lcmdhYmxlLmJvdW5kcywgY29tcGFyYXRvciwgZ2VuV3JhcHBlcnMubWVyZ2UoY2VsbHMpKTtcbiAgICAgIHJldHVybiBvdXRjb21lKG5ld0dyaWQsIE9wdGlvbmFsLmZyb20oY2VsbHNbMF0pKTtcbiAgICB9O1xuICAgIGNvbnN0IG9wVW5tZXJnZUNlbGxzID0gKGdyaWQsIHVubWVyZ2FibGUsIGNvbXBhcmF0b3IsIGdlbldyYXBwZXJzKSA9PiB7XG4gICAgICBjb25zdCB1bm1lcmdlJDEgPSAoYiwgY2VsbCkgPT4gdW5tZXJnZShiLCBjZWxsLCBjb21wYXJhdG9yLCBnZW5XcmFwcGVycy51bm1lcmdlKGNlbGwpKTtcbiAgICAgIGNvbnN0IG5ld0dyaWQgPSBmb2xkcih1bm1lcmdhYmxlLCB1bm1lcmdlJDEsIGdyaWQpO1xuICAgICAgcmV0dXJuIG91dGNvbWUobmV3R3JpZCwgT3B0aW9uYWwuZnJvbSh1bm1lcmdhYmxlWzBdKSk7XG4gICAgfTtcbiAgICBjb25zdCBvcFBhc3RlQ2VsbHMgPSAoZ3JpZCwgcGFzdGVEZXRhaWxzLCBjb21wYXJhdG9yLCBfZ2VuV3JhcHBlcnMpID0+IHtcbiAgICAgIGNvbnN0IGdyaWRpZnkgPSAodGFibGUsIGdlbmVyYXRvcnMpID0+IHtcbiAgICAgICAgY29uc3Qgd2ggPSBXYXJlaG91c2UuZnJvbVRhYmxlKHRhYmxlKTtcbiAgICAgICAgcmV0dXJuIHRvR3JpZCh3aCwgZ2VuZXJhdG9ycywgdHJ1ZSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ3JpZEIgPSBncmlkaWZ5KHBhc3RlRGV0YWlscy5jbGlwYm9hcmQsIHBhc3RlRGV0YWlscy5nZW5lcmF0b3JzKTtcbiAgICAgIGNvbnN0IHN0YXJ0QWRkcmVzcyA9IGFkZHJlc3MocGFzdGVEZXRhaWxzLnJvdywgcGFzdGVEZXRhaWxzLmNvbHVtbik7XG4gICAgICBjb25zdCBtZXJnZWRHcmlkID0gbWVyZ2UkMShzdGFydEFkZHJlc3MsIGdyaWQsIGdyaWRCLCBwYXN0ZURldGFpbHMuZ2VuZXJhdG9ycywgY29tcGFyYXRvcik7XG4gICAgICByZXR1cm4gbWVyZ2VkR3JpZC5mb2xkKCgpID0+IG91dGNvbWUoZ3JpZCwgT3B0aW9uYWwuc29tZShwYXN0ZURldGFpbHMuZWxlbWVudCkpLCBuZXdHcmlkID0+IHtcbiAgICAgICAgcmV0dXJuIGJ1bmRsZShuZXdHcmlkLCBwYXN0ZURldGFpbHMucm93LCBwYXN0ZURldGFpbHMuY29sdW1uKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ3JpZGlmeVJvd3MgPSAocm93cywgZ2VuZXJhdG9ycywgY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgcGFzdGVEZXRhaWxzID0gZnJvbVBhc3RlZFJvd3Mocm93cywgY29udGV4dC5zZWN0aW9uKTtcbiAgICAgIGNvbnN0IHdoID0gV2FyZWhvdXNlLmdlbmVyYXRlKHBhc3RlRGV0YWlscyk7XG4gICAgICByZXR1cm4gdG9HcmlkKHdoLCBnZW5lcmF0b3JzLCB0cnVlKTtcbiAgICB9O1xuICAgIGNvbnN0IG9wUGFzdGVDb2xzQmVmb3JlID0gKGdyaWQsIHBhc3RlRGV0YWlscywgY29tcGFyYXRvciwgX2dlbldyYXBwZXJzKSA9PiB7XG4gICAgICBjb25zdCByb3dzID0gZXh0cmFjdEdyaWREZXRhaWxzKGdyaWQpLnJvd3M7XG4gICAgICBjb25zdCBpbmRleCA9IHBhc3RlRGV0YWlscy5jZWxsc1swXS5jb2x1bW47XG4gICAgICBjb25zdCBjb250ZXh0ID0gcm93c1twYXN0ZURldGFpbHMuY2VsbHNbMF0ucm93XTtcbiAgICAgIGNvbnN0IGdyaWRCID0gZ3JpZGlmeVJvd3MocGFzdGVEZXRhaWxzLmNsaXBib2FyZCwgcGFzdGVEZXRhaWxzLmdlbmVyYXRvcnMsIGNvbnRleHQpO1xuICAgICAgY29uc3QgbWVyZ2VkR3JpZCA9IGluc2VydENvbHMoaW5kZXgsIGdyaWQsIGdyaWRCLCBwYXN0ZURldGFpbHMuZ2VuZXJhdG9ycywgY29tcGFyYXRvcik7XG4gICAgICByZXR1cm4gYnVuZGxlKG1lcmdlZEdyaWQsIHBhc3RlRGV0YWlscy5jZWxsc1swXS5yb3csIHBhc3RlRGV0YWlscy5jZWxsc1swXS5jb2x1bW4pO1xuICAgIH07XG4gICAgY29uc3Qgb3BQYXN0ZUNvbHNBZnRlciA9IChncmlkLCBwYXN0ZURldGFpbHMsIGNvbXBhcmF0b3IsIF9nZW5XcmFwcGVycykgPT4ge1xuICAgICAgY29uc3Qgcm93cyA9IGV4dHJhY3RHcmlkRGV0YWlscyhncmlkKS5yb3dzO1xuICAgICAgY29uc3QgaW5kZXggPSBwYXN0ZURldGFpbHMuY2VsbHNbcGFzdGVEZXRhaWxzLmNlbGxzLmxlbmd0aCAtIDFdLmNvbHVtbiArIHBhc3RlRGV0YWlscy5jZWxsc1twYXN0ZURldGFpbHMuY2VsbHMubGVuZ3RoIC0gMV0uY29sc3BhbjtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSByb3dzW3Bhc3RlRGV0YWlscy5jZWxsc1swXS5yb3ddO1xuICAgICAgY29uc3QgZ3JpZEIgPSBncmlkaWZ5Um93cyhwYXN0ZURldGFpbHMuY2xpcGJvYXJkLCBwYXN0ZURldGFpbHMuZ2VuZXJhdG9ycywgY29udGV4dCk7XG4gICAgICBjb25zdCBtZXJnZWRHcmlkID0gaW5zZXJ0Q29scyhpbmRleCwgZ3JpZCwgZ3JpZEIsIHBhc3RlRGV0YWlscy5nZW5lcmF0b3JzLCBjb21wYXJhdG9yKTtcbiAgICAgIHJldHVybiBidW5kbGUobWVyZ2VkR3JpZCwgcGFzdGVEZXRhaWxzLmNlbGxzWzBdLnJvdywgcGFzdGVEZXRhaWxzLmNlbGxzWzBdLmNvbHVtbik7XG4gICAgfTtcbiAgICBjb25zdCBvcFBhc3RlUm93c0JlZm9yZSA9IChncmlkLCBwYXN0ZURldGFpbHMsIGNvbXBhcmF0b3IsIF9nZW5XcmFwcGVycykgPT4ge1xuICAgICAgY29uc3Qgcm93cyA9IGV4dHJhY3RHcmlkRGV0YWlscyhncmlkKS5yb3dzO1xuICAgICAgY29uc3QgaW5kZXggPSBwYXN0ZURldGFpbHMuY2VsbHNbMF0ucm93O1xuICAgICAgY29uc3QgY29udGV4dCA9IHJvd3NbaW5kZXhdO1xuICAgICAgY29uc3QgZ3JpZEIgPSBncmlkaWZ5Um93cyhwYXN0ZURldGFpbHMuY2xpcGJvYXJkLCBwYXN0ZURldGFpbHMuZ2VuZXJhdG9ycywgY29udGV4dCk7XG4gICAgICBjb25zdCBtZXJnZWRHcmlkID0gaW5zZXJ0Um93cyhpbmRleCwgZ3JpZCwgZ3JpZEIsIHBhc3RlRGV0YWlscy5nZW5lcmF0b3JzLCBjb21wYXJhdG9yKTtcbiAgICAgIHJldHVybiBidW5kbGUobWVyZ2VkR3JpZCwgcGFzdGVEZXRhaWxzLmNlbGxzWzBdLnJvdywgcGFzdGVEZXRhaWxzLmNlbGxzWzBdLmNvbHVtbik7XG4gICAgfTtcbiAgICBjb25zdCBvcFBhc3RlUm93c0FmdGVyID0gKGdyaWQsIHBhc3RlRGV0YWlscywgY29tcGFyYXRvciwgX2dlbldyYXBwZXJzKSA9PiB7XG4gICAgICBjb25zdCByb3dzID0gZXh0cmFjdEdyaWREZXRhaWxzKGdyaWQpLnJvd3M7XG4gICAgICBjb25zdCBpbmRleCA9IHBhc3RlRGV0YWlscy5jZWxsc1twYXN0ZURldGFpbHMuY2VsbHMubGVuZ3RoIC0gMV0ucm93ICsgcGFzdGVEZXRhaWxzLmNlbGxzW3Bhc3RlRGV0YWlscy5jZWxscy5sZW5ndGggLSAxXS5yb3dzcGFuO1xuICAgICAgY29uc3QgY29udGV4dCA9IHJvd3NbcGFzdGVEZXRhaWxzLmNlbGxzWzBdLnJvd107XG4gICAgICBjb25zdCBncmlkQiA9IGdyaWRpZnlSb3dzKHBhc3RlRGV0YWlscy5jbGlwYm9hcmQsIHBhc3RlRGV0YWlscy5nZW5lcmF0b3JzLCBjb250ZXh0KTtcbiAgICAgIGNvbnN0IG1lcmdlZEdyaWQgPSBpbnNlcnRSb3dzKGluZGV4LCBncmlkLCBncmlkQiwgcGFzdGVEZXRhaWxzLmdlbmVyYXRvcnMsIGNvbXBhcmF0b3IpO1xuICAgICAgcmV0dXJuIGJ1bmRsZShtZXJnZWRHcmlkLCBwYXN0ZURldGFpbHMuY2VsbHNbMF0ucm93LCBwYXN0ZURldGFpbHMuY2VsbHNbMF0uY29sdW1uKTtcbiAgICB9O1xuICAgIGNvbnN0IG9wR2V0Q29sdW1uc1R5cGUgPSAodGFibGUsIHRhcmdldCkgPT4ge1xuICAgICAgY29uc3QgaG91c2UgPSBXYXJlaG91c2UuZnJvbVRhYmxlKHRhYmxlKTtcbiAgICAgIGNvbnN0IGRldGFpbHMgPSBvbkNlbGxzKGhvdXNlLCB0YXJnZXQpO1xuICAgICAgcmV0dXJuIGRldGFpbHMuYmluZChzZWxlY3RlZENlbGxzID0+IHtcbiAgICAgICAgY29uc3QgbGFzdFNlbGVjdGVkQ2VsbCA9IHNlbGVjdGVkQ2VsbHNbc2VsZWN0ZWRDZWxscy5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3QgbWluQ29sUmFuZ2UgPSBzZWxlY3RlZENlbGxzWzBdLmNvbHVtbjtcbiAgICAgICAgY29uc3QgbWF4Q29sUmFuZ2UgPSBsYXN0U2VsZWN0ZWRDZWxsLmNvbHVtbiArIGxhc3RTZWxlY3RlZENlbGwuY29sc3BhbjtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb2x1bW5DZWxscyA9IGZsYXR0ZW4obWFwJDEoaG91c2UuYWxsLCByb3cgPT4gZmlsdGVyJDIocm93LmNlbGxzLCBjZWxsID0+IGNlbGwuY29sdW1uID49IG1pbkNvbFJhbmdlICYmIGNlbGwuY29sdW1uIDwgbWF4Q29sUmFuZ2UpKSk7XG4gICAgICAgIHJldHVybiBmaW5kQ29tbW9uQ2VsbFR5cGUoc2VsZWN0ZWRDb2x1bW5DZWxscyk7XG4gICAgICB9KS5nZXRPcignJyk7XG4gICAgfTtcbiAgICBjb25zdCBvcEdldENlbGxzVHlwZSA9ICh0YWJsZSwgdGFyZ2V0KSA9PiB7XG4gICAgICBjb25zdCBob3VzZSA9IFdhcmVob3VzZS5mcm9tVGFibGUodGFibGUpO1xuICAgICAgY29uc3QgZGV0YWlscyA9IG9uQ2VsbHMoaG91c2UsIHRhcmdldCk7XG4gICAgICByZXR1cm4gZGV0YWlscy5iaW5kKGZpbmRDb21tb25DZWxsVHlwZSkuZ2V0T3IoJycpO1xuICAgIH07XG4gICAgY29uc3Qgb3BHZXRSb3dzVHlwZSA9ICh0YWJsZSwgdGFyZ2V0KSA9PiB7XG4gICAgICBjb25zdCBob3VzZSA9IFdhcmVob3VzZS5mcm9tVGFibGUodGFibGUpO1xuICAgICAgY29uc3QgZGV0YWlscyA9IG9uQ2VsbHMoaG91c2UsIHRhcmdldCk7XG4gICAgICByZXR1cm4gZGV0YWlscy5iaW5kKHNlbGVjdGVkQ2VsbHMgPT4ge1xuICAgICAgICBjb25zdCBsYXN0U2VsZWN0ZWRDZWxsID0gc2VsZWN0ZWRDZWxsc1tzZWxlY3RlZENlbGxzLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBtaW5Sb3dSYW5nZSA9IHNlbGVjdGVkQ2VsbHNbMF0ucm93O1xuICAgICAgICBjb25zdCBtYXhSb3dSYW5nZSA9IGxhc3RTZWxlY3RlZENlbGwucm93ICsgbGFzdFNlbGVjdGVkQ2VsbC5yb3dzcGFuO1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSBob3VzZS5hbGwuc2xpY2UobWluUm93UmFuZ2UsIG1heFJvd1JhbmdlKTtcbiAgICAgICAgcmV0dXJuIGZpbmRDb21tb25Sb3dUeXBlKHNlbGVjdGVkUm93cyk7XG4gICAgICB9KS5nZXRPcignJyk7XG4gICAgfTtcbiAgICBjb25zdCByZXNpemUgPSAodGFibGUsIGxpc3QsIGRldGFpbHMsIGJlaGF2aW91cnMpID0+IGFkanVzdFdpZHRoVG8odGFibGUsIGxpc3QsIGRldGFpbHMsIGJlaGF2aW91cnMuc2l6aW5nKTtcbiAgICBjb25zdCBhZGp1c3RBbmRSZWRpc3RyaWJ1dGVXaWR0aHMgPSAodGFibGUsIGxpc3QsIGRldGFpbHMsIGJlaGF2aW91cnMpID0+IGFkanVzdEFuZFJlZGlzdHJpYnV0ZVdpZHRocyQxKHRhYmxlLCBsaXN0LCBkZXRhaWxzLCBiZWhhdmlvdXJzLnNpemluZywgYmVoYXZpb3Vycy5yZXNpemUpO1xuICAgIGNvbnN0IGZpcnN0Q29sdW1uSXNMb2NrZWQgPSAoX3dhcmVob3VzZSwgZGV0YWlscykgPT4gZXhpc3RzKGRldGFpbHMsIGRldGFpbCA9PiBkZXRhaWwuY29sdW1uID09PSAwICYmIGRldGFpbC5pc0xvY2tlZCk7XG4gICAgY29uc3QgbGFzdENvbHVtbklzTG9ja2VkID0gKHdhcmVob3VzZSwgZGV0YWlscykgPT4gZXhpc3RzKGRldGFpbHMsIGRldGFpbCA9PiBkZXRhaWwuY29sdW1uICsgZGV0YWlsLmNvbHNwYW4gPj0gd2FyZWhvdXNlLmdyaWQuY29sdW1ucyAmJiBkZXRhaWwuaXNMb2NrZWQpO1xuICAgIGNvbnN0IGdldENvbHVtbnNXaWR0aCA9ICh3YXJlaG91c2UsIGRldGFpbHMpID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtbnMkMSA9IGNvbHVtbnMod2FyZWhvdXNlKTtcbiAgICAgIGNvbnN0IHVuaXF1ZUNvbHMgPSB1bmlxdWVDb2x1bW5zKGRldGFpbHMpO1xuICAgICAgcmV0dXJuIGZvbGRsKHVuaXF1ZUNvbHMsIChhY2MsIGRldGFpbCkgPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zJDFbZGV0YWlsLmNvbHVtbl07XG4gICAgICAgIGNvbnN0IGNvbFdpZHRoID0gY29sdW1uLm1hcChnZXRPdXRlciQyKS5nZXRPcigwKTtcbiAgICAgICAgcmV0dXJuIGFjYyArIGNvbFdpZHRoO1xuICAgICAgfSwgMCk7XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnRDb2x1bW5zRXh0cmFjdG9yID0gYmVmb3JlID0+ICh3YXJlaG91c2UsIHRhcmdldCkgPT4gb25DZWxscyh3YXJlaG91c2UsIHRhcmdldCkuZmlsdGVyKGRldGFpbHMgPT4ge1xuICAgICAgY29uc3QgY2hlY2tMb2NrZWQgPSBiZWZvcmUgPyBmaXJzdENvbHVtbklzTG9ja2VkIDogbGFzdENvbHVtbklzTG9ja2VkO1xuICAgICAgcmV0dXJuICFjaGVja0xvY2tlZCh3YXJlaG91c2UsIGRldGFpbHMpO1xuICAgIH0pLm1hcChkZXRhaWxzID0+ICh7XG4gICAgICBkZXRhaWxzLFxuICAgICAgcGl4ZWxEZWx0YTogZ2V0Q29sdW1uc1dpZHRoKHdhcmVob3VzZSwgZGV0YWlscylcbiAgICB9KSk7XG4gICAgY29uc3QgZXJhc2VDb2x1bW5zRXh0cmFjdG9yID0gKHdhcmVob3VzZSwgdGFyZ2V0KSA9PiBvblVubG9ja2VkQ2VsbHMod2FyZWhvdXNlLCB0YXJnZXQpLm1hcChkZXRhaWxzID0+ICh7XG4gICAgICBkZXRhaWxzLFxuICAgICAgcGl4ZWxEZWx0YTogLWdldENvbHVtbnNXaWR0aCh3YXJlaG91c2UsIGRldGFpbHMpXG4gICAgfSkpO1xuICAgIGNvbnN0IHBhc3RlQ29sdW1uc0V4dHJhY3RvciA9IGJlZm9yZSA9PiAod2FyZWhvdXNlLCB0YXJnZXQpID0+IG9uUGFzdGVCeUVkaXRvcih3YXJlaG91c2UsIHRhcmdldCkuZmlsdGVyKGRldGFpbHMgPT4ge1xuICAgICAgY29uc3QgY2hlY2tMb2NrZWQgPSBiZWZvcmUgPyBmaXJzdENvbHVtbklzTG9ja2VkIDogbGFzdENvbHVtbklzTG9ja2VkO1xuICAgICAgcmV0dXJuICFjaGVja0xvY2tlZCh3YXJlaG91c2UsIGRldGFpbHMuY2VsbHMpO1xuICAgIH0pO1xuICAgIGNvbnN0IGhlYWRlckNlbGxHZW5lcmF0b3IgPSBHZW5lcmF0b3JzLnRyYW5zZm9ybSgndGgnKTtcbiAgICBjb25zdCBib2R5Q2VsbEdlbmVyYXRvciA9IEdlbmVyYXRvcnMudHJhbnNmb3JtKCd0ZCcpO1xuICAgIGNvbnN0IGluc2VydFJvd3NCZWZvcmUgPSBydW4ob3BJbnNlcnRSb3dzQmVmb3JlLCBvbkNlbGxzLCBub29wLCBub29wLCBHZW5lcmF0b3JzLm1vZGlmaWNhdGlvbik7XG4gICAgY29uc3QgaW5zZXJ0Um93c0FmdGVyID0gcnVuKG9wSW5zZXJ0Um93c0FmdGVyLCBvbkNlbGxzLCBub29wLCBub29wLCBHZW5lcmF0b3JzLm1vZGlmaWNhdGlvbik7XG4gICAgY29uc3QgaW5zZXJ0Q29sdW1uc0JlZm9yZSA9IHJ1bihvcEluc2VydENvbHVtbnNCZWZvcmUsIGluc2VydENvbHVtbnNFeHRyYWN0b3IodHJ1ZSksIGFkanVzdEFuZFJlZGlzdHJpYnV0ZVdpZHRocywgbm9vcCwgR2VuZXJhdG9ycy5tb2RpZmljYXRpb24pO1xuICAgIGNvbnN0IGluc2VydENvbHVtbnNBZnRlciA9IHJ1bihvcEluc2VydENvbHVtbnNBZnRlciwgaW5zZXJ0Q29sdW1uc0V4dHJhY3RvcihmYWxzZSksIGFkanVzdEFuZFJlZGlzdHJpYnV0ZVdpZHRocywgbm9vcCwgR2VuZXJhdG9ycy5tb2RpZmljYXRpb24pO1xuICAgIGNvbnN0IGVyYXNlQ29sdW1ucyA9IHJ1bihvcEVyYXNlQ29sdW1ucywgZXJhc2VDb2x1bW5zRXh0cmFjdG9yLCBhZGp1c3RBbmRSZWRpc3RyaWJ1dGVXaWR0aHMsIHBydW5lLCBHZW5lcmF0b3JzLm1vZGlmaWNhdGlvbik7XG4gICAgY29uc3QgZXJhc2VSb3dzID0gcnVuKG9wRXJhc2VSb3dzLCBvbkNlbGxzLCBub29wLCBwcnVuZSwgR2VuZXJhdG9ycy5tb2RpZmljYXRpb24pO1xuICAgIGNvbnN0IG1ha2VDb2x1bW5zSGVhZGVyID0gcnVuKG9wTWFrZUNvbHVtbnNIZWFkZXIsIG9uVW5sb2NrZWRDZWxscywgbm9vcCwgbm9vcCwgaGVhZGVyQ2VsbEdlbmVyYXRvcik7XG4gICAgY29uc3QgdW5tYWtlQ29sdW1uc0hlYWRlciA9IHJ1bihvcFVubWFrZUNvbHVtbnNIZWFkZXIsIG9uVW5sb2NrZWRDZWxscywgbm9vcCwgbm9vcCwgYm9keUNlbGxHZW5lcmF0b3IpO1xuICAgIGNvbnN0IG1ha2VSb3dzSGVhZGVyID0gcnVuKG9wTWFrZVJvd3NIZWFkZXIsIG9uVW5sb2NrZWRDZWxscywgbm9vcCwgbm9vcCwgaGVhZGVyQ2VsbEdlbmVyYXRvcik7XG4gICAgY29uc3QgbWFrZVJvd3NCb2R5ID0gcnVuKG9wTWFrZVJvd3NCb2R5LCBvblVubG9ja2VkQ2VsbHMsIG5vb3AsIG5vb3AsIGJvZHlDZWxsR2VuZXJhdG9yKTtcbiAgICBjb25zdCBtYWtlUm93c0Zvb3RlciA9IHJ1bihvcE1ha2VSb3dzRm9vdGVyLCBvblVubG9ja2VkQ2VsbHMsIG5vb3AsIG5vb3AsIGJvZHlDZWxsR2VuZXJhdG9yKTtcbiAgICBjb25zdCBtYWtlQ2VsbHNIZWFkZXIgPSBydW4ob3BNYWtlQ2VsbHNIZWFkZXIsIG9uVW5sb2NrZWRDZWxscywgbm9vcCwgbm9vcCwgaGVhZGVyQ2VsbEdlbmVyYXRvcik7XG4gICAgY29uc3QgdW5tYWtlQ2VsbHNIZWFkZXIgPSBydW4ob3BVbm1ha2VDZWxsc0hlYWRlciwgb25VbmxvY2tlZENlbGxzLCBub29wLCBub29wLCBib2R5Q2VsbEdlbmVyYXRvcik7XG4gICAgY29uc3QgbWVyZ2VDZWxscyA9IHJ1bihvcE1lcmdlQ2VsbHMsIG9uVW5sb2NrZWRNZXJnYWJsZSwgcmVzaXplLCBub29wLCBHZW5lcmF0b3JzLm1lcmdpbmcpO1xuICAgIGNvbnN0IHVubWVyZ2VDZWxscyA9IHJ1bihvcFVubWVyZ2VDZWxscywgb25VbmxvY2tlZFVubWVyZ2FibGUsIHJlc2l6ZSwgbm9vcCwgR2VuZXJhdG9ycy5tZXJnaW5nKTtcbiAgICBjb25zdCBwYXN0ZUNlbGxzID0gcnVuKG9wUGFzdGVDZWxscywgb25QYXN0ZSwgcmVzaXplLCBub29wLCBHZW5lcmF0b3JzLm1vZGlmaWNhdGlvbik7XG4gICAgY29uc3QgcGFzdGVDb2xzQmVmb3JlID0gcnVuKG9wUGFzdGVDb2xzQmVmb3JlLCBwYXN0ZUNvbHVtbnNFeHRyYWN0b3IodHJ1ZSksIG5vb3AsIG5vb3AsIEdlbmVyYXRvcnMubW9kaWZpY2F0aW9uKTtcbiAgICBjb25zdCBwYXN0ZUNvbHNBZnRlciA9IHJ1bihvcFBhc3RlQ29sc0FmdGVyLCBwYXN0ZUNvbHVtbnNFeHRyYWN0b3IoZmFsc2UpLCBub29wLCBub29wLCBHZW5lcmF0b3JzLm1vZGlmaWNhdGlvbik7XG4gICAgY29uc3QgcGFzdGVSb3dzQmVmb3JlID0gcnVuKG9wUGFzdGVSb3dzQmVmb3JlLCBvblBhc3RlQnlFZGl0b3IsIG5vb3AsIG5vb3AsIEdlbmVyYXRvcnMubW9kaWZpY2F0aW9uKTtcbiAgICBjb25zdCBwYXN0ZVJvd3NBZnRlciA9IHJ1bihvcFBhc3RlUm93c0FmdGVyLCBvblBhc3RlQnlFZGl0b3IsIG5vb3AsIG5vb3AsIEdlbmVyYXRvcnMubW9kaWZpY2F0aW9uKTtcbiAgICBjb25zdCBnZXRDb2x1bW5zVHlwZSA9IG9wR2V0Q29sdW1uc1R5cGU7XG4gICAgY29uc3QgZ2V0Q2VsbHNUeXBlID0gb3BHZXRDZWxsc1R5cGU7XG4gICAgY29uc3QgZ2V0Um93c1R5cGUgPSBvcEdldFJvd3NUeXBlO1xuXG4gICAgY29uc3QgZmlyZU5ld1JvdyA9IChlZGl0b3IsIHJvdykgPT4gZWRpdG9yLmRpc3BhdGNoKCdOZXdSb3cnLCB7IG5vZGU6IHJvdyB9KTtcbiAgICBjb25zdCBmaXJlTmV3Q2VsbCA9IChlZGl0b3IsIGNlbGwpID0+IGVkaXRvci5kaXNwYXRjaCgnTmV3Q2VsbCcsIHsgbm9kZTogY2VsbCB9KTtcbiAgICBjb25zdCBmaXJlVGFibGVNb2RpZmllZCA9IChlZGl0b3IsIHRhYmxlLCBkYXRhKSA9PiB7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ1RhYmxlTW9kaWZpZWQnLCB7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIHRhYmxlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVUYWJsZVNlbGVjdGlvbkNoYW5nZSA9IChlZGl0b3IsIGNlbGxzLCBzdGFydCwgZmluaXNoLCBvdGhlckNlbGxzKSA9PiB7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ1RhYmxlU2VsZWN0aW9uQ2hhbmdlJywge1xuICAgICAgICBjZWxscyxcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIGZpbmlzaCxcbiAgICAgICAgb3RoZXJDZWxsc1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJlVGFibGVTZWxlY3Rpb25DbGVhciA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ1RhYmxlU2VsZWN0aW9uQ2xlYXInKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVPYmplY3RSZXNpemVTdGFydCA9IChlZGl0b3IsIHRhcmdldCwgd2lkdGgsIGhlaWdodCwgb3JpZ2luKSA9PiB7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ09iamVjdFJlc2l6ZVN0YXJ0Jywge1xuICAgICAgICB0YXJnZXQsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIG9yaWdpblxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJlT2JqZWN0UmVzaXplZCA9IChlZGl0b3IsIHRhcmdldCwgd2lkdGgsIGhlaWdodCwgb3JpZ2luKSA9PiB7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ09iamVjdFJlc2l6ZWQnLCB7XG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgb3JpZ2luXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHN0eWxlTW9kaWZpZWQgPSB7XG4gICAgICBzdHJ1Y3R1cmU6IGZhbHNlLFxuICAgICAgc3R5bGU6IHRydWVcbiAgICB9O1xuICAgIGNvbnN0IHN0cnVjdHVyZU1vZGlmaWVkID0ge1xuICAgICAgc3RydWN0dXJlOiB0cnVlLFxuICAgICAgc3R5bGU6IGZhbHNlXG4gICAgfTtcbiAgICBjb25zdCBzdHlsZUFuZFN0cnVjdHVyZU1vZGlmaWVkID0ge1xuICAgICAgc3RydWN0dXJlOiB0cnVlLFxuICAgICAgc3R5bGU6IHRydWVcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0JDUgPSAoZWRpdG9yLCB0YWJsZSkgPT4ge1xuICAgICAgaWYgKGlzVGFibGVQZXJjZW50YWdlc0ZvcmNlZChlZGl0b3IpKSB7XG4gICAgICAgIHJldHVybiBUYWJsZVNpemUucGVyY2VudGFnZVNpemUodGFibGUpO1xuICAgICAgfSBlbHNlIGlmIChpc1RhYmxlUGl4ZWxzRm9yY2VkKGVkaXRvcikpIHtcbiAgICAgICAgcmV0dXJuIFRhYmxlU2l6ZS5waXhlbFNpemUodGFibGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFRhYmxlU2l6ZS5nZXRUYWJsZVNpemUodGFibGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBUYWJsZUFjdGlvbnMgPSAoZWRpdG9yLCByZXNpemVIYW5kbGVyLCBjZWxsU2VsZWN0aW9uSGFuZGxlcikgPT4ge1xuICAgICAgY29uc3QgaXNUYWJsZUJvZHkgPSBlZGl0b3IgPT4gbmFtZShnZXRCb2R5KGVkaXRvcikpID09PSAndGFibGUnO1xuICAgICAgY29uc3QgbGFzdFJvd0d1YXJkID0gdGFibGUgPT4gIWlzVGFibGVCb2R5KGVkaXRvcikgfHwgZ2V0R3JpZFNpemUodGFibGUpLnJvd3MgPiAxO1xuICAgICAgY29uc3QgbGFzdENvbHVtbkd1YXJkID0gdGFibGUgPT4gIWlzVGFibGVCb2R5KGVkaXRvcikgfHwgZ2V0R3JpZFNpemUodGFibGUpLmNvbHVtbnMgPiAxO1xuICAgICAgY29uc3QgY2xvbmVGb3JtYXRzID0gZ2V0VGFibGVDbG9uZUVsZW1lbnRzKGVkaXRvcik7XG4gICAgICBjb25zdCBjb2xNdXRhdGlvbk9wID0gaXNSZXNpemVUYWJsZUNvbHVtblJlc2l6aW5nKGVkaXRvcikgPyBub29wIDogaGFsdmU7XG4gICAgICBjb25zdCBnZXRUYWJsZVNlY3Rpb25UeXBlID0gdGFibGUgPT4ge1xuICAgICAgICBzd2l0Y2ggKGdldFRhYmxlSGVhZGVyVHlwZShlZGl0b3IpKSB7XG4gICAgICAgIGNhc2UgJ3NlY3Rpb24nOlxuICAgICAgICAgIHJldHVybiBUYWJsZVNlY3Rpb24uc2VjdGlvbigpO1xuICAgICAgICBjYXNlICdzZWN0aW9uQ2VsbHMnOlxuICAgICAgICAgIHJldHVybiBUYWJsZVNlY3Rpb24uc2VjdGlvbkNlbGxzKCk7XG4gICAgICAgIGNhc2UgJ2NlbGxzJzpcbiAgICAgICAgICByZXR1cm4gVGFibGVTZWN0aW9uLmNlbGxzKCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIFRhYmxlU2VjdGlvbi5nZXRUYWJsZVNlY3Rpb25UeXBlKHRhYmxlLCAnc2VjdGlvbicpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0U2VsZWN0aW9uRnJvbUFjdGlvbiA9ICh0YWJsZSwgcmVzdWx0KSA9PiByZXN1bHQuY3Vyc29yLmZvbGQoKCkgPT4ge1xuICAgICAgICBjb25zdCBjZWxscyA9IGNlbGxzJDEodGFibGUpO1xuICAgICAgICByZXR1cm4gaGVhZChjZWxscykuZmlsdGVyKGluQm9keSkubWFwKGZpcnN0Q2VsbCA9PiB7XG4gICAgICAgICAgY2VsbFNlbGVjdGlvbkhhbmRsZXIuY2xlYXJTZWxlY3RlZENlbGxzKHRhYmxlLmRvbSk7XG4gICAgICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLmRvbS5jcmVhdGVSbmcoKTtcbiAgICAgICAgICBybmcuc2VsZWN0Tm9kZShmaXJzdENlbGwuZG9tKTtcbiAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgICAgIHNldCQyKGZpcnN0Q2VsbCwgJ2RhdGEtbWNlLXNlbGVjdGVkJywgJzEnKTtcbiAgICAgICAgICByZXR1cm4gcm5nO1xuICAgICAgICB9KTtcbiAgICAgIH0sIGNlbGwgPT4ge1xuICAgICAgICBjb25zdCBkZXMgPSBmcmVlZmFsbFJ0bChjZWxsKTtcbiAgICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLmRvbS5jcmVhdGVSbmcoKTtcbiAgICAgICAgcm5nLnNldFN0YXJ0KGRlcy5lbGVtZW50LmRvbSwgZGVzLm9mZnNldCk7XG4gICAgICAgIHJuZy5zZXRFbmQoZGVzLmVsZW1lbnQuZG9tLCBkZXMub2Zmc2V0KTtcbiAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcocm5nKTtcbiAgICAgICAgY2VsbFNlbGVjdGlvbkhhbmRsZXIuY2xlYXJTZWxlY3RlZENlbGxzKHRhYmxlLmRvbSk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHJuZyk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGV4ZWN1dGUgPSAob3BlcmF0aW9uLCBndWFyZCwgbXV0YXRlLCBlZmZlY3QpID0+ICh0YWJsZSwgdGFyZ2V0LCBub0V2ZW50cyA9IGZhbHNlKSA9PiB7XG4gICAgICAgIHJlbW92ZURhdGFTdHlsZSh0YWJsZSk7XG4gICAgICAgIGNvbnN0IGRvYyA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXREb2MoKSk7XG4gICAgICAgIGNvbnN0IGdlbmVyYXRvcnMgPSBjZWxsT3BlcmF0aW9ucyhtdXRhdGUsIGRvYywgY2xvbmVGb3JtYXRzKTtcbiAgICAgICAgY29uc3QgYmVoYXZpb3VycyA9IHtcbiAgICAgICAgICBzaXppbmc6IGdldCQ1KGVkaXRvciwgdGFibGUpLFxuICAgICAgICAgIHJlc2l6ZTogaXNSZXNpemVUYWJsZUNvbHVtblJlc2l6aW5nKGVkaXRvcikgPyByZXNpemVUYWJsZSgpIDogcHJlc2VydmVUYWJsZSgpLFxuICAgICAgICAgIHNlY3Rpb246IGdldFRhYmxlU2VjdGlvblR5cGUodGFibGUpXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBndWFyZCh0YWJsZSkgPyBvcGVyYXRpb24odGFibGUsIHRhcmdldCwgZ2VuZXJhdG9ycywgYmVoYXZpb3VycykuYmluZChyZXN1bHQgPT4ge1xuICAgICAgICAgIHJlc2l6ZUhhbmRsZXIucmVmcmVzaCh0YWJsZS5kb20pO1xuICAgICAgICAgIGVhY2gkMihyZXN1bHQubmV3Um93cywgcm93ID0+IHtcbiAgICAgICAgICAgIGZpcmVOZXdSb3coZWRpdG9yLCByb3cuZG9tKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBlYWNoJDIocmVzdWx0Lm5ld0NlbGxzLCBjZWxsID0+IHtcbiAgICAgICAgICAgIGZpcmVOZXdDZWxsKGVkaXRvciwgY2VsbC5kb20pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHJhbmdlID0gc2V0U2VsZWN0aW9uRnJvbUFjdGlvbih0YWJsZSwgcmVzdWx0KTtcbiAgICAgICAgICBpZiAoaW5Cb2R5KHRhYmxlKSkge1xuICAgICAgICAgICAgcmVtb3ZlRGF0YVN0eWxlKHRhYmxlKTtcbiAgICAgICAgICAgIGlmICghbm9FdmVudHMpIHtcbiAgICAgICAgICAgICAgZmlyZVRhYmxlTW9kaWZpZWQoZWRpdG9yLCB0YWJsZS5kb20sIGVmZmVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByYW5nZS5tYXAocm5nID0+ICh7XG4gICAgICAgICAgICBybmcsXG4gICAgICAgICAgICBlZmZlY3RcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0pIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRlbGV0ZVJvdyA9IGV4ZWN1dGUoZXJhc2VSb3dzLCBsYXN0Um93R3VhcmQsIG5vb3AsIHN0cnVjdHVyZU1vZGlmaWVkKTtcbiAgICAgIGNvbnN0IGRlbGV0ZUNvbHVtbiA9IGV4ZWN1dGUoZXJhc2VDb2x1bW5zLCBsYXN0Q29sdW1uR3VhcmQsIG5vb3AsIHN0cnVjdHVyZU1vZGlmaWVkKTtcbiAgICAgIGNvbnN0IGluc2VydFJvd3NCZWZvcmUkMSA9IGV4ZWN1dGUoaW5zZXJ0Um93c0JlZm9yZSwgYWx3YXlzLCBub29wLCBzdHJ1Y3R1cmVNb2RpZmllZCk7XG4gICAgICBjb25zdCBpbnNlcnRSb3dzQWZ0ZXIkMSA9IGV4ZWN1dGUoaW5zZXJ0Um93c0FmdGVyLCBhbHdheXMsIG5vb3AsIHN0cnVjdHVyZU1vZGlmaWVkKTtcbiAgICAgIGNvbnN0IGluc2VydENvbHVtbnNCZWZvcmUkMSA9IGV4ZWN1dGUoaW5zZXJ0Q29sdW1uc0JlZm9yZSwgYWx3YXlzLCBjb2xNdXRhdGlvbk9wLCBzdHJ1Y3R1cmVNb2RpZmllZCk7XG4gICAgICBjb25zdCBpbnNlcnRDb2x1bW5zQWZ0ZXIkMSA9IGV4ZWN1dGUoaW5zZXJ0Q29sdW1uc0FmdGVyLCBhbHdheXMsIGNvbE11dGF0aW9uT3AsIHN0cnVjdHVyZU1vZGlmaWVkKTtcbiAgICAgIGNvbnN0IG1lcmdlQ2VsbHMkMSA9IGV4ZWN1dGUobWVyZ2VDZWxscywgYWx3YXlzLCBub29wLCBzdHJ1Y3R1cmVNb2RpZmllZCk7XG4gICAgICBjb25zdCB1bm1lcmdlQ2VsbHMkMSA9IGV4ZWN1dGUodW5tZXJnZUNlbGxzLCBhbHdheXMsIG5vb3AsIHN0cnVjdHVyZU1vZGlmaWVkKTtcbiAgICAgIGNvbnN0IHBhc3RlQ29sc0JlZm9yZSQxID0gZXhlY3V0ZShwYXN0ZUNvbHNCZWZvcmUsIGFsd2F5cywgbm9vcCwgc3RydWN0dXJlTW9kaWZpZWQpO1xuICAgICAgY29uc3QgcGFzdGVDb2xzQWZ0ZXIkMSA9IGV4ZWN1dGUocGFzdGVDb2xzQWZ0ZXIsIGFsd2F5cywgbm9vcCwgc3RydWN0dXJlTW9kaWZpZWQpO1xuICAgICAgY29uc3QgcGFzdGVSb3dzQmVmb3JlJDEgPSBleGVjdXRlKHBhc3RlUm93c0JlZm9yZSwgYWx3YXlzLCBub29wLCBzdHJ1Y3R1cmVNb2RpZmllZCk7XG4gICAgICBjb25zdCBwYXN0ZVJvd3NBZnRlciQxID0gZXhlY3V0ZShwYXN0ZVJvd3NBZnRlciwgYWx3YXlzLCBub29wLCBzdHJ1Y3R1cmVNb2RpZmllZCk7XG4gICAgICBjb25zdCBwYXN0ZUNlbGxzJDEgPSBleGVjdXRlKHBhc3RlQ2VsbHMsIGFsd2F5cywgbm9vcCwgc3R5bGVBbmRTdHJ1Y3R1cmVNb2RpZmllZCk7XG4gICAgICBjb25zdCBtYWtlQ2VsbHNIZWFkZXIkMSA9IGV4ZWN1dGUobWFrZUNlbGxzSGVhZGVyLCBhbHdheXMsIG5vb3AsIHN0cnVjdHVyZU1vZGlmaWVkKTtcbiAgICAgIGNvbnN0IHVubWFrZUNlbGxzSGVhZGVyJDEgPSBleGVjdXRlKHVubWFrZUNlbGxzSGVhZGVyLCBhbHdheXMsIG5vb3AsIHN0cnVjdHVyZU1vZGlmaWVkKTtcbiAgICAgIGNvbnN0IG1ha2VDb2x1bW5zSGVhZGVyJDEgPSBleGVjdXRlKG1ha2VDb2x1bW5zSGVhZGVyLCBhbHdheXMsIG5vb3AsIHN0cnVjdHVyZU1vZGlmaWVkKTtcbiAgICAgIGNvbnN0IHVubWFrZUNvbHVtbnNIZWFkZXIkMSA9IGV4ZWN1dGUodW5tYWtlQ29sdW1uc0hlYWRlciwgYWx3YXlzLCBub29wLCBzdHJ1Y3R1cmVNb2RpZmllZCk7XG4gICAgICBjb25zdCBtYWtlUm93c0hlYWRlciQxID0gZXhlY3V0ZShtYWtlUm93c0hlYWRlciwgYWx3YXlzLCBub29wLCBzdHJ1Y3R1cmVNb2RpZmllZCk7XG4gICAgICBjb25zdCBtYWtlUm93c0JvZHkkMSA9IGV4ZWN1dGUobWFrZVJvd3NCb2R5LCBhbHdheXMsIG5vb3AsIHN0cnVjdHVyZU1vZGlmaWVkKTtcbiAgICAgIGNvbnN0IG1ha2VSb3dzRm9vdGVyJDEgPSBleGVjdXRlKG1ha2VSb3dzRm9vdGVyLCBhbHdheXMsIG5vb3AsIHN0cnVjdHVyZU1vZGlmaWVkKTtcbiAgICAgIGNvbnN0IGdldFRhYmxlQ2VsbFR5cGUgPSBnZXRDZWxsc1R5cGU7XG4gICAgICBjb25zdCBnZXRUYWJsZUNvbFR5cGUgPSBnZXRDb2x1bW5zVHlwZTtcbiAgICAgIGNvbnN0IGdldFRhYmxlUm93VHlwZSA9IGdldFJvd3NUeXBlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGVsZXRlUm93LFxuICAgICAgICBkZWxldGVDb2x1bW4sXG4gICAgICAgIGluc2VydFJvd3NCZWZvcmU6IGluc2VydFJvd3NCZWZvcmUkMSxcbiAgICAgICAgaW5zZXJ0Um93c0FmdGVyOiBpbnNlcnRSb3dzQWZ0ZXIkMSxcbiAgICAgICAgaW5zZXJ0Q29sdW1uc0JlZm9yZTogaW5zZXJ0Q29sdW1uc0JlZm9yZSQxLFxuICAgICAgICBpbnNlcnRDb2x1bW5zQWZ0ZXI6IGluc2VydENvbHVtbnNBZnRlciQxLFxuICAgICAgICBtZXJnZUNlbGxzOiBtZXJnZUNlbGxzJDEsXG4gICAgICAgIHVubWVyZ2VDZWxsczogdW5tZXJnZUNlbGxzJDEsXG4gICAgICAgIHBhc3RlQ29sc0JlZm9yZTogcGFzdGVDb2xzQmVmb3JlJDEsXG4gICAgICAgIHBhc3RlQ29sc0FmdGVyOiBwYXN0ZUNvbHNBZnRlciQxLFxuICAgICAgICBwYXN0ZVJvd3NCZWZvcmU6IHBhc3RlUm93c0JlZm9yZSQxLFxuICAgICAgICBwYXN0ZVJvd3NBZnRlcjogcGFzdGVSb3dzQWZ0ZXIkMSxcbiAgICAgICAgcGFzdGVDZWxsczogcGFzdGVDZWxscyQxLFxuICAgICAgICBtYWtlQ2VsbHNIZWFkZXI6IG1ha2VDZWxsc0hlYWRlciQxLFxuICAgICAgICB1bm1ha2VDZWxsc0hlYWRlcjogdW5tYWtlQ2VsbHNIZWFkZXIkMSxcbiAgICAgICAgbWFrZUNvbHVtbnNIZWFkZXI6IG1ha2VDb2x1bW5zSGVhZGVyJDEsXG4gICAgICAgIHVubWFrZUNvbHVtbnNIZWFkZXI6IHVubWFrZUNvbHVtbnNIZWFkZXIkMSxcbiAgICAgICAgbWFrZVJvd3NIZWFkZXI6IG1ha2VSb3dzSGVhZGVyJDEsXG4gICAgICAgIG1ha2VSb3dzQm9keTogbWFrZVJvd3NCb2R5JDEsXG4gICAgICAgIG1ha2VSb3dzRm9vdGVyOiBtYWtlUm93c0Zvb3RlciQxLFxuICAgICAgICBnZXRUYWJsZVJvd1R5cGUsXG4gICAgICAgIGdldFRhYmxlQ2VsbFR5cGUsXG4gICAgICAgIGdldFRhYmxlQ29sVHlwZVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgY29uc3RyYWluU3BhbiA9IChlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRDb2xzcGFuID0gZ2V0QXR0clZhbHVlKGVsZW1lbnQsIHByb3BlcnR5LCAxKTtcbiAgICAgIGlmICh2YWx1ZSA9PT0gMSB8fCBjdXJyZW50Q29sc3BhbiA8PSAxKSB7XG4gICAgICAgIHJlbW92ZSQ3KGVsZW1lbnQsIHByb3BlcnR5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldCQyKGVsZW1lbnQsIHByb3BlcnR5LCBNYXRoLm1pbih2YWx1ZSwgY3VycmVudENvbHNwYW4pKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlzQ29sSW5SYW5nZSA9IChtaW5Db2xSYW5nZSwgbWF4Q29sUmFuZ2UpID0+IGNlbGwgPT4ge1xuICAgICAgY29uc3QgZW5kQ29sID0gY2VsbC5jb2x1bW4gKyBjZWxsLmNvbHNwYW4gLSAxO1xuICAgICAgY29uc3Qgc3RhcnRDb2wgPSBjZWxsLmNvbHVtbjtcbiAgICAgIHJldHVybiBlbmRDb2wgPj0gbWluQ29sUmFuZ2UgJiYgc3RhcnRDb2wgPCBtYXhDb2xSYW5nZTtcbiAgICB9O1xuICAgIGNvbnN0IGdlbmVyYXRlQ29sR3JvdXAgPSAoaG91c2UsIG1pbkNvbFJhbmdlLCBtYXhDb2xSYW5nZSkgPT4ge1xuICAgICAgaWYgKFdhcmVob3VzZS5oYXNDb2x1bW5zKGhvdXNlKSkge1xuICAgICAgICBjb25zdCBjb2xzVG9Db3B5ID0gZmlsdGVyJDIoV2FyZWhvdXNlLmp1c3RDb2x1bW5zKGhvdXNlKSwgaXNDb2xJblJhbmdlKG1pbkNvbFJhbmdlLCBtYXhDb2xSYW5nZSkpO1xuICAgICAgICBjb25zdCBjb3BpZWRDb2xzID0gbWFwJDEoY29sc1RvQ29weSwgYyA9PiB7XG4gICAgICAgICAgY29uc3QgY2xvbmVkQ29sID0gZGVlcChjLmVsZW1lbnQpO1xuICAgICAgICAgIGNvbnN0cmFpblNwYW4oY2xvbmVkQ29sLCAnc3BhbicsIG1heENvbFJhbmdlIC0gbWluQ29sUmFuZ2UpO1xuICAgICAgICAgIHJldHVybiBjbG9uZWRDb2w7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBmYWtlQ29sZ3JvdXAgPSBTdWdhckVsZW1lbnQuZnJvbVRhZygnY29sZ3JvdXAnKTtcbiAgICAgICAgYXBwZW5kKGZha2VDb2xncm91cCwgY29waWVkQ29scyk7XG4gICAgICAgIHJldHVybiBbZmFrZUNvbGdyb3VwXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdlbmVyYXRlUm93cyA9IChob3VzZSwgbWluQ29sUmFuZ2UsIG1heENvbFJhbmdlKSA9PiBtYXAkMShob3VzZS5hbGwsIHJvdyA9PiB7XG4gICAgICBjb25zdCBjZWxsc1RvQ29weSA9IGZpbHRlciQyKHJvdy5jZWxscywgaXNDb2xJblJhbmdlKG1pbkNvbFJhbmdlLCBtYXhDb2xSYW5nZSkpO1xuICAgICAgY29uc3QgY29waWVkQ2VsbHMgPSBtYXAkMShjZWxsc1RvQ29weSwgY2VsbCA9PiB7XG4gICAgICAgIGNvbnN0IGNsb25lZENlbGwgPSBkZWVwKGNlbGwuZWxlbWVudCk7XG4gICAgICAgIGNvbnN0cmFpblNwYW4oY2xvbmVkQ2VsbCwgJ2NvbHNwYW4nLCBtYXhDb2xSYW5nZSAtIG1pbkNvbFJhbmdlKTtcbiAgICAgICAgcmV0dXJuIGNsb25lZENlbGw7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZha2VUUiA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCd0cicpO1xuICAgICAgYXBwZW5kKGZha2VUUiwgY29waWVkQ2VsbHMpO1xuICAgICAgcmV0dXJuIGZha2VUUjtcbiAgICB9KTtcbiAgICBjb25zdCBjb3B5Q29scyA9ICh0YWJsZSwgdGFyZ2V0KSA9PiB7XG4gICAgICBjb25zdCBob3VzZSA9IFdhcmVob3VzZS5mcm9tVGFibGUodGFibGUpO1xuICAgICAgY29uc3QgZGV0YWlscyA9IG9uVW5sb2NrZWRDZWxscyhob3VzZSwgdGFyZ2V0KTtcbiAgICAgIHJldHVybiBkZXRhaWxzLm1hcChzZWxlY3RlZENlbGxzID0+IHtcbiAgICAgICAgY29uc3QgbGFzdFNlbGVjdGVkQ2VsbCA9IHNlbGVjdGVkQ2VsbHNbc2VsZWN0ZWRDZWxscy5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3QgbWluQ29sUmFuZ2UgPSBzZWxlY3RlZENlbGxzWzBdLmNvbHVtbjtcbiAgICAgICAgY29uc3QgbWF4Q29sUmFuZ2UgPSBsYXN0U2VsZWN0ZWRDZWxsLmNvbHVtbiArIGxhc3RTZWxlY3RlZENlbGwuY29sc3BhbjtcbiAgICAgICAgY29uc3QgZmFrZUNvbEdyb3VwcyA9IGdlbmVyYXRlQ29sR3JvdXAoaG91c2UsIG1pbkNvbFJhbmdlLCBtYXhDb2xSYW5nZSk7XG4gICAgICAgIGNvbnN0IGZha2VSb3dzID0gZ2VuZXJhdGVSb3dzKGhvdXNlLCBtaW5Db2xSYW5nZSwgbWF4Q29sUmFuZ2UpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIC4uLmZha2VDb2xHcm91cHMsXG4gICAgICAgICAgLi4uZmFrZVJvd3NcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBjb3B5Um93cyA9ICh0YWJsZSwgdGFyZ2V0LCBnZW5lcmF0b3JzKSA9PiB7XG4gICAgICBjb25zdCB3YXJlaG91c2UgPSBXYXJlaG91c2UuZnJvbVRhYmxlKHRhYmxlKTtcbiAgICAgIGNvbnN0IGRldGFpbHMgPSBvbkNlbGxzKHdhcmVob3VzZSwgdGFyZ2V0KTtcbiAgICAgIHJldHVybiBkZXRhaWxzLmJpbmQoc2VsZWN0ZWRDZWxscyA9PiB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0b0dyaWQod2FyZWhvdXNlLCBnZW5lcmF0b3JzLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBleHRyYWN0R3JpZERldGFpbHMoZ3JpZCkucm93cztcbiAgICAgICAgY29uc3Qgc2xpY2VkR3JpZCA9IHJvd3Muc2xpY2Uoc2VsZWN0ZWRDZWxsc1swXS5yb3csIHNlbGVjdGVkQ2VsbHNbc2VsZWN0ZWRDZWxscy5sZW5ndGggLSAxXS5yb3cgKyBzZWxlY3RlZENlbGxzW3NlbGVjdGVkQ2VsbHMubGVuZ3RoIC0gMV0ucm93c3Bhbik7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkR3JpZCA9IGJpbmQkMihzbGljZWRHcmlkLCByb3cgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0NlbGxzID0gZmlsdGVyJDIocm93LmNlbGxzLCBjZWxsID0+ICFjZWxsLmlzTG9ja2VkKTtcbiAgICAgICAgICByZXR1cm4gbmV3Q2VsbHMubGVuZ3RoID4gMCA/IFt7XG4gICAgICAgICAgICAgIC4uLnJvdyxcbiAgICAgICAgICAgICAgY2VsbHM6IG5ld0NlbGxzXG4gICAgICAgICAgICB9XSA6IFtdO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc2xpY2VkRGV0YWlscyA9IHRvRGV0YWlsTGlzdChmaWx0ZXJlZEdyaWQpO1xuICAgICAgICByZXR1cm4gc29tZUlmKHNsaWNlZERldGFpbHMubGVuZ3RoID4gMCwgc2xpY2VkRGV0YWlscyk7XG4gICAgICB9KS5tYXAoc2xpY2VkRGV0YWlscyA9PiBjb3B5KHNsaWNlZERldGFpbHMpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYWR0JDUgPSBBZHQuZ2VuZXJhdGUoW1xuICAgICAgeyBpbnZhbGlkOiBbJ3JhdyddIH0sXG4gICAgICB7IHBpeGVsczogWyd2YWx1ZSddIH0sXG4gICAgICB7IHBlcmNlbnQ6IFsndmFsdWUnXSB9XG4gICAgXSk7XG4gICAgY29uc3QgdmFsaWRhdGVGb3IgPSAoc3VmZml4LCB0eXBlLCB2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgcmF3QW1vdW50ID0gdmFsdWUuc3Vic3RyaW5nKDAsIHZhbHVlLmxlbmd0aCAtIHN1ZmZpeC5sZW5ndGgpO1xuICAgICAgY29uc3QgYW1vdW50ID0gcGFyc2VGbG9hdChyYXdBbW91bnQpO1xuICAgICAgcmV0dXJuIHJhd0Ftb3VudCA9PT0gYW1vdW50LnRvU3RyaW5nKCkgPyB0eXBlKGFtb3VudCkgOiBhZHQkNS5pbnZhbGlkKHZhbHVlKTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb20gPSB2YWx1ZSA9PiB7XG4gICAgICBpZiAoZW5kc1dpdGgodmFsdWUsICclJykpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlRm9yKCclJywgYWR0JDUucGVyY2VudCwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKGVuZHNXaXRoKHZhbHVlLCAncHgnKSkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVGb3IoJ3B4JywgYWR0JDUucGl4ZWxzLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWR0JDUuaW52YWxpZCh2YWx1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBTaXplID0ge1xuICAgICAgLi4uYWR0JDUsXG4gICAgICBmcm9tXG4gICAgfTtcblxuICAgIGNvbnN0IHJlZGlzdHJpYnV0ZVRvUGVyY2VudCA9ICh3aWR0aHMsIHRvdGFsV2lkdGgpID0+IHtcbiAgICAgIHJldHVybiBtYXAkMSh3aWR0aHMsIHcgPT4ge1xuICAgICAgICBjb25zdCBjb2xUeXBlID0gU2l6ZS5mcm9tKHcpO1xuICAgICAgICByZXR1cm4gY29sVHlwZS5mb2xkKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gdztcbiAgICAgICAgfSwgcHggPT4ge1xuICAgICAgICAgIGNvbnN0IHJhdGlvID0gcHggLyB0b3RhbFdpZHRoICogMTAwO1xuICAgICAgICAgIHJldHVybiByYXRpbyArICclJztcbiAgICAgICAgfSwgcGMgPT4ge1xuICAgICAgICAgIHJldHVybiBwYyArICclJztcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZGlzdHJpYnV0ZVRvUHggPSAod2lkdGhzLCB0b3RhbFdpZHRoLCBuZXdUb3RhbFdpZHRoKSA9PiB7XG4gICAgICBjb25zdCBzY2FsZSA9IG5ld1RvdGFsV2lkdGggLyB0b3RhbFdpZHRoO1xuICAgICAgcmV0dXJuIG1hcCQxKHdpZHRocywgdyA9PiB7XG4gICAgICAgIGNvbnN0IGNvbFR5cGUgPSBTaXplLmZyb20odyk7XG4gICAgICAgIHJldHVybiBjb2xUeXBlLmZvbGQoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB3O1xuICAgICAgICB9LCBweCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHB4ICogc2NhbGUgKyAncHgnO1xuICAgICAgICB9LCBwYyA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBjIC8gMTAwICogbmV3VG90YWxXaWR0aCArICdweCc7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWRpc3RyaWJ1dGVFbXB0eSA9IChuZXdXaWR0aFR5cGUsIGNvbHVtbnMpID0+IHtcbiAgICAgIGNvbnN0IGYgPSBuZXdXaWR0aFR5cGUuZm9sZCgoKSA9PiBjb25zdGFudCgnJyksIHBpeGVscyA9PiB7XG4gICAgICAgIGNvbnN0IG51bSA9IHBpeGVscyAvIGNvbHVtbnM7XG4gICAgICAgIHJldHVybiBjb25zdGFudChudW0gKyAncHgnKTtcbiAgICAgIH0sICgpID0+IHtcbiAgICAgICAgY29uc3QgbnVtID0gMTAwIC8gY29sdW1ucztcbiAgICAgICAgcmV0dXJuIGNvbnN0YW50KG51bSArICclJyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByYW5nZSQxKGNvbHVtbnMsIGYpO1xuICAgIH07XG4gICAgY29uc3QgcmVkaXN0cmlidXRlVmFsdWVzID0gKG5ld1dpZHRoVHlwZSwgd2lkdGhzLCB0b3RhbFdpZHRoKSA9PiB7XG4gICAgICByZXR1cm4gbmV3V2lkdGhUeXBlLmZvbGQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gd2lkdGhzO1xuICAgICAgfSwgcHggPT4ge1xuICAgICAgICByZXR1cm4gcmVkaXN0cmlidXRlVG9QeCh3aWR0aHMsIHRvdGFsV2lkdGgsIHB4KTtcbiAgICAgIH0sIF9wYyA9PiB7XG4gICAgICAgIHJldHVybiByZWRpc3RyaWJ1dGVUb1BlcmNlbnQod2lkdGhzLCB0b3RhbFdpZHRoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVkaXN0cmlidXRlJDEgPSAod2lkdGhzLCB0b3RhbFdpZHRoLCBuZXdXaWR0aCkgPT4ge1xuICAgICAgY29uc3QgbmV3VHlwZSA9IFNpemUuZnJvbShuZXdXaWR0aCk7XG4gICAgICBjb25zdCBmbG9hdHMgPSBmb3JhbGwod2lkdGhzLCBzID0+IHtcbiAgICAgICAgcmV0dXJuIHMgPT09ICcwcHgnO1xuICAgICAgfSkgPyByZWRpc3RyaWJ1dGVFbXB0eShuZXdUeXBlLCB3aWR0aHMubGVuZ3RoKSA6IHJlZGlzdHJpYnV0ZVZhbHVlcyhuZXdUeXBlLCB3aWR0aHMsIHRvdGFsV2lkdGgpO1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZShmbG9hdHMpO1xuICAgIH07XG4gICAgY29uc3Qgc3VtID0gKHZhbHVlcywgZmFsbGJhY2spID0+IHtcbiAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxsYmFjaztcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb2xkcih2YWx1ZXMsIChyZXN0LCB2KSA9PiB7XG4gICAgICAgIHJldHVybiBTaXplLmZyb20odikuZm9sZChjb25zdGFudCgwKSwgaWRlbnRpdHksIGlkZW50aXR5KSArIHJlc3Q7XG4gICAgICB9LCAwKTtcbiAgICB9O1xuICAgIGNvbnN0IHJvdW5kRG93biA9IChudW0sIHVuaXQpID0+IHtcbiAgICAgIGNvbnN0IGZsb29yZWQgPSBNYXRoLmZsb29yKG51bSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogZmxvb3JlZCArIHVuaXQsXG4gICAgICAgIHJlbWFpbmRlcjogbnVtIC0gZmxvb3JlZFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGFkZCQzID0gKHZhbHVlLCBhbW91bnQpID0+IHtcbiAgICAgIHJldHVybiBTaXplLmZyb20odmFsdWUpLmZvbGQoY29uc3RhbnQodmFsdWUpLCBweCA9PiB7XG4gICAgICAgIHJldHVybiBweCArIGFtb3VudCArICdweCc7XG4gICAgICB9LCBwYyA9PiB7XG4gICAgICAgIHJldHVybiBwYyArIGFtb3VudCArICclJztcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplID0gdmFsdWVzID0+IHtcbiAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgICB9XG4gICAgICBjb25zdCBzY2FuID0gZm9sZHIodmFsdWVzLCAocmVzdCwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgaW5mbyA9IFNpemUuZnJvbSh2YWx1ZSkuZm9sZCgoKSA9PiAoe1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHJlbWFpbmRlcjogMFxuICAgICAgICB9KSwgbnVtID0+IHJvdW5kRG93bihudW0sICdweCcpLCBudW0gPT4gKHtcbiAgICAgICAgICB2YWx1ZTogbnVtICsgJyUnLFxuICAgICAgICAgIHJlbWFpbmRlcjogMFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb3V0cHV0OiBbaW5mby52YWx1ZV0uY29uY2F0KHJlc3Qub3V0cHV0KSxcbiAgICAgICAgICByZW1haW5kZXI6IHJlc3QucmVtYWluZGVyICsgaW5mby5yZW1haW5kZXJcbiAgICAgICAgfTtcbiAgICAgIH0sIHtcbiAgICAgICAgb3V0cHV0OiBbXSxcbiAgICAgICAgcmVtYWluZGVyOiAwXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHIgPSBzY2FuLm91dHB1dDtcbiAgICAgIHJldHVybiByLnNsaWNlKDAsIHIubGVuZ3RoIC0gMSkuY29uY2F0KFthZGQkMyhyW3IubGVuZ3RoIC0gMV0sIE1hdGgucm91bmQoc2Nhbi5yZW1haW5kZXIpKV0pO1xuICAgIH07XG4gICAgY29uc3QgdmFsaWRhdGUgPSBTaXplLmZyb207XG5cbiAgICBjb25zdCByZWRpc3RyaWJ1dGVUb1cgPSAobmV3V2lkdGhzLCBjZWxscywgdW5pdCkgPT4ge1xuICAgICAgZWFjaCQyKGNlbGxzLCBjZWxsID0+IHtcbiAgICAgICAgY29uc3Qgd2lkdGhzID0gbmV3V2lkdGhzLnNsaWNlKGNlbGwuY29sdW1uLCBjZWxsLmNvbHNwYW4gKyBjZWxsLmNvbHVtbik7XG4gICAgICAgIGNvbnN0IHcgPSBzdW0od2lkdGhzLCBtaW5XaWR0aCgpKTtcbiAgICAgICAgc2V0JDEoY2VsbC5lbGVtZW50LCAnd2lkdGgnLCB3ICsgdW5pdCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZGlzdHJpYnV0ZVRvQ29sdW1ucyA9IChuZXdXaWR0aHMsIGNvbHVtbnMsIHVuaXQpID0+IHtcbiAgICAgIGVhY2gkMihjb2x1bW5zLCAoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCB3aWR0aCA9IHN1bShbbmV3V2lkdGhzW2luZGV4XV0sIG1pbldpZHRoKCkpO1xuICAgICAgICBzZXQkMShjb2x1bW4uZWxlbWVudCwgJ3dpZHRoJywgd2lkdGggKyB1bml0KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVkaXN0cmlidXRlVG9IID0gKG5ld0hlaWdodHMsIHJvd3MsIGNlbGxzLCB1bml0KSA9PiB7XG4gICAgICBlYWNoJDIoY2VsbHMsIGNlbGwgPT4ge1xuICAgICAgICBjb25zdCBoZWlnaHRzID0gbmV3SGVpZ2h0cy5zbGljZShjZWxsLnJvdywgY2VsbC5yb3dzcGFuICsgY2VsbC5yb3cpO1xuICAgICAgICBjb25zdCBoID0gc3VtKGhlaWdodHMsIG1pbkhlaWdodCgpKTtcbiAgICAgICAgc2V0JDEoY2VsbC5lbGVtZW50LCAnaGVpZ2h0JywgaCArIHVuaXQpO1xuICAgICAgfSk7XG4gICAgICBlYWNoJDIocm93cywgKHJvdywgaSkgPT4ge1xuICAgICAgICBzZXQkMShyb3cuZWxlbWVudCwgJ2hlaWdodCcsIG5ld0hlaWdodHNbaV0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRVbml0ID0gbmV3U2l6ZSA9PiB7XG4gICAgICByZXR1cm4gdmFsaWRhdGUobmV3U2l6ZSkuZm9sZChjb25zdGFudCgncHgnKSwgY29uc3RhbnQoJ3B4JyksIGNvbnN0YW50KCclJykpO1xuICAgIH07XG4gICAgY29uc3QgcmVkaXN0cmlidXRlID0gKHRhYmxlLCBvcHRXaWR0aCwgb3B0SGVpZ2h0KSA9PiB7XG4gICAgICBjb25zdCB3YXJlaG91c2UgPSBXYXJlaG91c2UuZnJvbVRhYmxlKHRhYmxlKTtcbiAgICAgIGNvbnN0IHJvd3MgPSB3YXJlaG91c2UuYWxsO1xuICAgICAgY29uc3QgY2VsbHMgPSBXYXJlaG91c2UuanVzdENlbGxzKHdhcmVob3VzZSk7XG4gICAgICBjb25zdCBjb2x1bW5zID0gV2FyZWhvdXNlLmp1c3RDb2x1bW5zKHdhcmVob3VzZSk7XG4gICAgICBvcHRXaWR0aC5lYWNoKG5ld1dpZHRoID0+IHtcbiAgICAgICAgY29uc3Qgd2lkdGhVbml0ID0gZ2V0VW5pdChuZXdXaWR0aCk7XG4gICAgICAgIGNvbnN0IHRvdGFsV2lkdGggPSBnZXQkOSh0YWJsZSk7XG4gICAgICAgIGNvbnN0IG9sZFdpZHRocyA9IGdldFJhd1dpZHRocyh3YXJlaG91c2UsIHRhYmxlKTtcbiAgICAgICAgY29uc3QgbnVXaWR0aHMgPSByZWRpc3RyaWJ1dGUkMShvbGRXaWR0aHMsIHRvdGFsV2lkdGgsIG5ld1dpZHRoKTtcbiAgICAgICAgaWYgKFdhcmVob3VzZS5oYXNDb2x1bW5zKHdhcmVob3VzZSkpIHtcbiAgICAgICAgICByZWRpc3RyaWJ1dGVUb0NvbHVtbnMobnVXaWR0aHMsIGNvbHVtbnMsIHdpZHRoVW5pdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVkaXN0cmlidXRlVG9XKG51V2lkdGhzLCBjZWxscywgd2lkdGhVbml0KTtcbiAgICAgICAgfVxuICAgICAgICBzZXQkMSh0YWJsZSwgJ3dpZHRoJywgbmV3V2lkdGgpO1xuICAgICAgfSk7XG4gICAgICBvcHRIZWlnaHQuZWFjaChuZXdIZWlnaHQgPT4ge1xuICAgICAgICBjb25zdCBoVW5pdCA9IGdldFVuaXQobmV3SGVpZ2h0KTtcbiAgICAgICAgY29uc3QgdG90YWxIZWlnaHQgPSBnZXQkOCh0YWJsZSk7XG4gICAgICAgIGNvbnN0IG9sZEhlaWdodHMgPSBnZXRSYXdIZWlnaHRzKHdhcmVob3VzZSwgdGFibGUsIGhlaWdodCk7XG4gICAgICAgIGNvbnN0IG51SGVpZ2h0cyA9IHJlZGlzdHJpYnV0ZSQxKG9sZEhlaWdodHMsIHRvdGFsSGVpZ2h0LCBuZXdIZWlnaHQpO1xuICAgICAgICByZWRpc3RyaWJ1dGVUb0gobnVIZWlnaHRzLCByb3dzLCBjZWxscywgaFVuaXQpO1xuICAgICAgICBzZXQkMSh0YWJsZSwgJ2hlaWdodCcsIG5ld0hlaWdodCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzUGVyY2VudFNpemluZyA9IGlzUGVyY2VudFNpemluZyQxO1xuICAgIGNvbnN0IGlzUGl4ZWxTaXppbmcgPSBpc1BpeGVsU2l6aW5nJDE7XG4gICAgY29uc3QgaXNOb25lU2l6aW5nID0gaXNOb25lU2l6aW5nJDE7XG5cbiAgICBjb25zdCBjbGVhbnVwTGVnYWN5QXR0cmlidXRlcyA9IGVsZW1lbnQgPT4ge1xuICAgICAgcmVtb3ZlJDcoZWxlbWVudCwgJ3dpZHRoJyk7XG4gICAgfTtcbiAgICBjb25zdCBjb252ZXJ0VG9QZXJjZW50U2l6ZSA9IHRhYmxlID0+IHtcbiAgICAgIGNvbnN0IG5ld1dpZHRoID0gZ2V0UGVyY2VudFRhYmxlV2lkdGgodGFibGUpO1xuICAgICAgcmVkaXN0cmlidXRlKHRhYmxlLCBPcHRpb25hbC5zb21lKG5ld1dpZHRoKSwgT3B0aW9uYWwubm9uZSgpKTtcbiAgICAgIGNsZWFudXBMZWdhY3lBdHRyaWJ1dGVzKHRhYmxlKTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbnZlcnRUb1BpeGVsU2l6ZSA9IHRhYmxlID0+IHtcbiAgICAgIGNvbnN0IG5ld1dpZHRoID0gZ2V0UGl4ZWxUYWJsZVdpZHRoKHRhYmxlKTtcbiAgICAgIHJlZGlzdHJpYnV0ZSh0YWJsZSwgT3B0aW9uYWwuc29tZShuZXdXaWR0aCksIE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgICBjbGVhbnVwTGVnYWN5QXR0cmlidXRlcyh0YWJsZSk7XG4gICAgfTtcbiAgICBjb25zdCBjb252ZXJ0VG9Ob25lU2l6ZSA9IHRhYmxlID0+IHtcbiAgICAgIHJlbW92ZSQ1KHRhYmxlLCAnd2lkdGgnKTtcbiAgICAgIGNvbnN0IGNvbHVtbnMgPSBjb2x1bW5zJDEodGFibGUpO1xuICAgICAgY29uc3Qgcm93RWxlbWVudHMgPSBjb2x1bW5zLmxlbmd0aCA+IDAgPyBjb2x1bW5zIDogY2VsbHMkMSh0YWJsZSk7XG4gICAgICBlYWNoJDIocm93RWxlbWVudHMsIGNlbGwgPT4ge1xuICAgICAgICByZW1vdmUkNShjZWxsLCAnd2lkdGgnKTtcbiAgICAgICAgY2xlYW51cExlZ2FjeUF0dHJpYnV0ZXMoY2VsbCk7XG4gICAgICB9KTtcbiAgICAgIGNsZWFudXBMZWdhY3lBdHRyaWJ1dGVzKHRhYmxlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgRGVmYXVsdFJlbmRlck9wdGlvbnMgPSB7XG4gICAgICBzdHlsZXM6IHtcbiAgICAgICAgJ2JvcmRlci1jb2xsYXBzZSc6ICdjb2xsYXBzZScsXG4gICAgICAgICd3aWR0aCc6ICcxMDAlJ1xuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZXM6IHsgYm9yZGVyOiAnMScgfSxcbiAgICAgIGNvbEdyb3VwczogZmFsc2VcbiAgICB9O1xuICAgIGNvbnN0IHRhYmxlSGVhZGVyQ2VsbCA9ICgpID0+IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCd0aCcpO1xuICAgIGNvbnN0IHRhYmxlQ2VsbCA9ICgpID0+IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCd0ZCcpO1xuICAgIGNvbnN0IHRhYmxlQ29sdW1uID0gKCkgPT4gU3VnYXJFbGVtZW50LmZyb21UYWcoJ2NvbCcpO1xuICAgIGNvbnN0IGNyZWF0ZVJvdyA9IChjb2x1bW5zLCByb3dIZWFkZXJzLCBjb2x1bW5IZWFkZXJzLCByb3dJbmRleCkgPT4ge1xuICAgICAgY29uc3QgdHIgPSBTdWdhckVsZW1lbnQuZnJvbVRhZygndHInKTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAgIGNvbnN0IHRkID0gcm93SW5kZXggPCByb3dIZWFkZXJzIHx8IGogPCBjb2x1bW5IZWFkZXJzID8gdGFibGVIZWFkZXJDZWxsKCkgOiB0YWJsZUNlbGwoKTtcbiAgICAgICAgaWYgKGogPCBjb2x1bW5IZWFkZXJzKSB7XG4gICAgICAgICAgc2V0JDIodGQsICdzY29wZScsICdyb3cnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm93SW5kZXggPCByb3dIZWFkZXJzKSB7XG4gICAgICAgICAgc2V0JDIodGQsICdzY29wZScsICdjb2wnKTtcbiAgICAgICAgfVxuICAgICAgICBhcHBlbmQkMSh0ZCwgU3VnYXJFbGVtZW50LmZyb21UYWcoJ2JyJykpO1xuICAgICAgICBhcHBlbmQkMSh0ciwgdGQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRyO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlR3JvdXBSb3cgPSBjb2x1bW5zID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtbkdyb3VwID0gU3VnYXJFbGVtZW50LmZyb21UYWcoJ2NvbGdyb3VwJyk7XG4gICAgICByYW5nZSQxKGNvbHVtbnMsICgpID0+IGFwcGVuZCQxKGNvbHVtbkdyb3VwLCB0YWJsZUNvbHVtbigpKSk7XG4gICAgICByZXR1cm4gY29sdW1uR3JvdXA7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVSb3dzID0gKHJvd3MsIGNvbHVtbnMsIHJvd0hlYWRlcnMsIGNvbHVtbkhlYWRlcnMpID0+IHJhbmdlJDEocm93cywgciA9PiBjcmVhdGVSb3coY29sdW1ucywgcm93SGVhZGVycywgY29sdW1uSGVhZGVycywgcikpO1xuICAgIGNvbnN0IHJlbmRlciA9IChyb3dzLCBjb2x1bW5zLCByb3dIZWFkZXJzLCBjb2x1bW5IZWFkZXJzLCBoZWFkZXJUeXBlLCByZW5kZXJPcHRzID0gRGVmYXVsdFJlbmRlck9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IHRhYmxlID0gU3VnYXJFbGVtZW50LmZyb21UYWcoJ3RhYmxlJyk7XG4gICAgICBjb25zdCByb3dIZWFkZXJzR29JblRoZWFkID0gaGVhZGVyVHlwZSAhPT0gJ2NlbGxzJztcbiAgICAgIHNldEFsbCh0YWJsZSwgcmVuZGVyT3B0cy5zdHlsZXMpO1xuICAgICAgc2V0QWxsJDEodGFibGUsIHJlbmRlck9wdHMuYXR0cmlidXRlcyk7XG4gICAgICBpZiAocmVuZGVyT3B0cy5jb2xHcm91cHMpIHtcbiAgICAgICAgYXBwZW5kJDEodGFibGUsIGNyZWF0ZUdyb3VwUm93KGNvbHVtbnMpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdHVhbFJvd0hlYWRlcnMgPSBNYXRoLm1pbihyb3dzLCByb3dIZWFkZXJzKTtcbiAgICAgIGlmIChyb3dIZWFkZXJzR29JblRoZWFkICYmIHJvd0hlYWRlcnMgPiAwKSB7XG4gICAgICAgIGNvbnN0IHRoZWFkID0gU3VnYXJFbGVtZW50LmZyb21UYWcoJ3RoZWFkJyk7XG4gICAgICAgIGFwcGVuZCQxKHRhYmxlLCB0aGVhZCk7XG4gICAgICAgIGNvbnN0IHRoZWFkUm93SGVhZGVycyA9IGhlYWRlclR5cGUgPT09ICdzZWN0aW9uQ2VsbHMnID8gYWN0dWFsUm93SGVhZGVycyA6IDA7XG4gICAgICAgIGNvbnN0IHRoZWFkUm93cyA9IGNyZWF0ZVJvd3Mocm93SGVhZGVycywgY29sdW1ucywgdGhlYWRSb3dIZWFkZXJzLCBjb2x1bW5IZWFkZXJzKTtcbiAgICAgICAgYXBwZW5kKHRoZWFkLCB0aGVhZFJvd3MpO1xuICAgICAgfVxuICAgICAgY29uc3QgdGJvZHkgPSBTdWdhckVsZW1lbnQuZnJvbVRhZygndGJvZHknKTtcbiAgICAgIGFwcGVuZCQxKHRhYmxlLCB0Ym9keSk7XG4gICAgICBjb25zdCBudW1Sb3dzID0gcm93SGVhZGVyc0dvSW5UaGVhZCA/IHJvd3MgLSBhY3R1YWxSb3dIZWFkZXJzIDogcm93cztcbiAgICAgIGNvbnN0IG51bVJvd0hlYWRlcnMgPSByb3dIZWFkZXJzR29JblRoZWFkID8gMCA6IHJvd0hlYWRlcnM7XG4gICAgICBjb25zdCB0Ym9keVJvd3MgPSBjcmVhdGVSb3dzKG51bVJvd3MsIGNvbHVtbnMsIG51bVJvd0hlYWRlcnMsIGNvbHVtbkhlYWRlcnMpO1xuICAgICAgYXBwZW5kKHRib2R5LCB0Ym9keVJvd3MpO1xuICAgICAgcmV0dXJuIHRhYmxlO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXQkNCA9IGVsZW1lbnQgPT4gZWxlbWVudC5kb20uaW5uZXJIVE1MO1xuICAgIGNvbnN0IGdldE91dGVyID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBTdWdhckVsZW1lbnQuZnJvbVRhZygnZGl2Jyk7XG4gICAgICBjb25zdCBjbG9uZSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsZW1lbnQuZG9tLmNsb25lTm9kZSh0cnVlKSk7XG4gICAgICBhcHBlbmQkMShjb250YWluZXIsIGNsb25lKTtcbiAgICAgIHJldHVybiBnZXQkNChjb250YWluZXIpO1xuICAgIH07XG5cbiAgICBjb25zdCBwbGFjZUNhcmV0SW5DZWxsID0gKGVkaXRvciwgY2VsbCkgPT4ge1xuICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3QoY2VsbC5kb20sIHRydWUpO1xuICAgICAgZWRpdG9yLnNlbGVjdGlvbi5jb2xsYXBzZSh0cnVlKTtcbiAgICB9O1xuICAgIGNvbnN0IHNlbGVjdEZpcnN0Q2VsbEluVGFibGUgPSAoZWRpdG9yLCB0YWJsZUVsbSkgPT4ge1xuICAgICAgZGVzY2VuZGFudCh0YWJsZUVsbSwgJ3RkLHRoJykuZWFjaChjdXJyeShwbGFjZUNhcmV0SW5DZWxsLCBlZGl0b3IpKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVFdmVudHMgPSAoZWRpdG9yLCB0YWJsZSkgPT4ge1xuICAgICAgZWFjaCQyKGRlc2NlbmRhbnRzKHRhYmxlLCAndHInKSwgcm93ID0+IHtcbiAgICAgICAgZmlyZU5ld1JvdyhlZGl0b3IsIHJvdy5kb20pO1xuICAgICAgICBlYWNoJDIoZGVzY2VuZGFudHMocm93LCAndGgsdGQnKSwgY2VsbCA9PiB7XG4gICAgICAgICAgZmlyZU5ld0NlbGwoZWRpdG9yLCBjZWxsLmRvbSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBpc1BlcmNlbnRhZ2UgPSB3aWR0aCA9PiBpc1N0cmluZyh3aWR0aCkgJiYgd2lkdGguaW5kZXhPZignJScpICE9PSAtMTtcbiAgICBjb25zdCBpbnNlcnQgPSAoZWRpdG9yLCBjb2x1bW5zLCByb3dzLCBjb2xIZWFkZXJzLCByb3dIZWFkZXJzKSA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0U3R5bGVzID0gZ2V0VGFibGVEZWZhdWx0U3R5bGVzKGVkaXRvcik7XG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICBzdHlsZXM6IGRlZmF1bHRTdHlsZXMsXG4gICAgICAgIGF0dHJpYnV0ZXM6IGdldFRhYmxlRGVmYXVsdEF0dHJpYnV0ZXMoZWRpdG9yKSxcbiAgICAgICAgY29sR3JvdXBzOiB0YWJsZVVzZUNvbHVtbkdyb3VwKGVkaXRvcilcbiAgICAgIH07XG4gICAgICBlZGl0b3IudW5kb01hbmFnZXIuaWdub3JlKCgpID0+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSByZW5kZXIocm93cywgY29sdW1ucywgcm93SGVhZGVycywgY29sSGVhZGVycywgZ2V0VGFibGVIZWFkZXJUeXBlKGVkaXRvciksIG9wdGlvbnMpO1xuICAgICAgICBzZXQkMih0YWJsZSwgJ2RhdGEtbWNlLWlkJywgJ19fbWNlJyk7XG4gICAgICAgIGNvbnN0IGh0bWwgPSBnZXRPdXRlcih0YWJsZSk7XG4gICAgICAgIGVkaXRvci5pbnNlcnRDb250ZW50KGh0bWwpO1xuICAgICAgICBlZGl0b3IuYWRkVmlzdWFsKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkZXNjZW5kYW50KGdldEJvZHkoZWRpdG9yKSwgJ3RhYmxlW2RhdGEtbWNlLWlkPVwiX19tY2VcIl0nKS5tYXAodGFibGUgPT4ge1xuICAgICAgICBpZiAoaXNUYWJsZVBpeGVsc0ZvcmNlZChlZGl0b3IpKSB7XG4gICAgICAgICAgY29udmVydFRvUGl4ZWxTaXplKHRhYmxlKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1RhYmxlUmVzcG9uc2l2ZUZvcmNlZChlZGl0b3IpKSB7XG4gICAgICAgICAgY29udmVydFRvTm9uZVNpemUodGFibGUpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzVGFibGVQZXJjZW50YWdlc0ZvcmNlZChlZGl0b3IpIHx8IGlzUGVyY2VudGFnZShkZWZhdWx0U3R5bGVzLndpZHRoKSkge1xuICAgICAgICAgIGNvbnZlcnRUb1BlcmNlbnRTaXplKHRhYmxlKTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmVEYXRhU3R5bGUodGFibGUpO1xuICAgICAgICByZW1vdmUkNyh0YWJsZSwgJ2RhdGEtbWNlLWlkJyk7XG4gICAgICAgIGZpcmVFdmVudHMoZWRpdG9yLCB0YWJsZSk7XG4gICAgICAgIHNlbGVjdEZpcnN0Q2VsbEluVGFibGUoZWRpdG9yLCB0YWJsZSk7XG4gICAgICAgIHJldHVybiB0YWJsZS5kb207XG4gICAgICB9KS5nZXRPck51bGwoKTtcbiAgICB9O1xuICAgIGNvbnN0IGluc2VydFRhYmxlID0gKGVkaXRvciwgcm93cywgY29sdW1ucywgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICBjb25zdCBjaGVja0lucHV0ID0gdmFsID0+IGlzTnVtYmVyKHZhbCkgJiYgdmFsID4gMDtcbiAgICAgIGlmIChjaGVja0lucHV0KHJvd3MpICYmIGNoZWNrSW5wdXQoY29sdW1ucykpIHtcbiAgICAgICAgY29uc3QgaGVhZGVyUm93cyA9IG9wdGlvbnMuaGVhZGVyUm93cyB8fCAwO1xuICAgICAgICBjb25zdCBoZWFkZXJDb2x1bW5zID0gb3B0aW9ucy5oZWFkZXJDb2x1bW5zIHx8IDA7XG4gICAgICAgIHJldHVybiBpbnNlcnQoZWRpdG9yLCBjb2x1bW5zLCByb3dzLCBoZWFkZXJDb2x1bW5zLCBoZWFkZXJSb3dzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgdmFsdWVzIGZvciBtY2VJbnNlcnRUYWJsZSAtIHJvd3MgYW5kIGNvbHVtbnMgdmFsdWVzIGFyZSByZXF1aXJlZCB0byBpbnNlcnQgYSB0YWJsZS4nKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBnbG9iYWwgPSB0aW55bWNlLnV0aWwuVG9vbHMucmVzb2x2ZSgndGlueW1jZS5GYWtlQ2xpcGJvYXJkJyk7XG5cbiAgICBjb25zdCB0YWJsZVR5cGVCYXNlID0gJ3gtdGlueW1jZS9kb20tdGFibGUtJztcbiAgICBjb25zdCB0YWJsZVR5cGVSb3cgPSB0YWJsZVR5cGVCYXNlICsgJ3Jvd3MnO1xuICAgIGNvbnN0IHRhYmxlVHlwZUNvbHVtbiA9IHRhYmxlVHlwZUJhc2UgKyAnY29sdW1ucyc7XG4gICAgY29uc3Qgc2V0RGF0YSA9IGl0ZW1zID0+IHtcbiAgICAgIGNvbnN0IGZha2VDbGlwYm9hcmRJdGVtID0gZ2xvYmFsLkZha2VDbGlwYm9hcmRJdGVtKGl0ZW1zKTtcbiAgICAgIGdsb2JhbC53cml0ZShbZmFrZUNsaXBib2FyZEl0ZW1dKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldERhdGEgPSB0eXBlID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGNvbnN0IGl0ZW1zID0gKF9hID0gZ2xvYmFsLnJlYWQoKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgICByZXR1cm4gZmluZE1hcChpdGVtcywgaXRlbSA9PiBPcHRpb25hbC5mcm9tKGl0ZW0uZ2V0VHlwZSh0eXBlKSkpO1xuICAgIH07XG4gICAgY29uc3QgY2xlYXJEYXRhID0gdHlwZSA9PiB7XG4gICAgICBpZiAoZ2V0RGF0YSh0eXBlKS5pc1NvbWUoKSkge1xuICAgICAgICBnbG9iYWwuY2xlYXIoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldFJvd3MgPSByb3dzT3B0ID0+IHtcbiAgICAgIHJvd3NPcHQuZm9sZChjbGVhclJvd3MsIHJvd3MgPT4gc2V0RGF0YSh7IFt0YWJsZVR5cGVSb3ddOiByb3dzIH0pKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFJvd3MgPSAoKSA9PiBnZXREYXRhKHRhYmxlVHlwZVJvdyk7XG4gICAgY29uc3QgY2xlYXJSb3dzID0gKCkgPT4gY2xlYXJEYXRhKHRhYmxlVHlwZVJvdyk7XG4gICAgY29uc3Qgc2V0Q29sdW1ucyA9IGNvbHVtbnNPcHQgPT4ge1xuICAgICAgY29sdW1uc09wdC5mb2xkKGNsZWFyQ29sdW1ucywgY29sdW1ucyA9PiBzZXREYXRhKHsgW3RhYmxlVHlwZUNvbHVtbl06IGNvbHVtbnMgfSkpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Q29sdW1ucyA9ICgpID0+IGdldERhdGEodGFibGVUeXBlQ29sdW1uKTtcbiAgICBjb25zdCBjbGVhckNvbHVtbnMgPSAoKSA9PiBjbGVhckRhdGEodGFibGVUeXBlQ29sdW1uKTtcblxuICAgIGNvbnN0IGdldFNlbGVjdGlvblN0YXJ0Q2VsbE9yQ2FwdGlvbiA9IGVkaXRvciA9PiBnZXRTZWxlY3Rpb25DZWxsT3JDYXB0aW9uKGdldFNlbGVjdGlvblN0YXJ0KGVkaXRvciksIGdldElzUm9vdChlZGl0b3IpKS5maWx0ZXIoaXNJbkVkaXRhYmxlQ29udGV4dCQxKTtcbiAgICBjb25zdCBnZXRTZWxlY3Rpb25TdGFydENlbGwgPSBlZGl0b3IgPT4gZ2V0U2VsZWN0aW9uQ2VsbChnZXRTZWxlY3Rpb25TdGFydChlZGl0b3IpLCBnZXRJc1Jvb3QoZWRpdG9yKSkuZmlsdGVyKGlzSW5FZGl0YWJsZUNvbnRleHQkMSk7XG4gICAgY29uc3QgcmVnaXN0ZXJDb21tYW5kcyA9IChlZGl0b3IsIGFjdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGlzUm9vdCA9IGdldElzUm9vdChlZGl0b3IpO1xuICAgICAgY29uc3QgZXJhc2VUYWJsZSA9ICgpID0+IGdldFNlbGVjdGlvblN0YXJ0Q2VsbE9yQ2FwdGlvbihlZGl0b3IpLmVhY2goY2VsbE9yQ2FwdGlvbiA9PiB7XG4gICAgICAgIHRhYmxlKGNlbGxPckNhcHRpb24sIGlzUm9vdCkuZmlsdGVyKG5vdChpc1Jvb3QpKS5lYWNoKHRhYmxlID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJzb3IgPSBTdWdhckVsZW1lbnQuZnJvbVRleHQoJycpO1xuICAgICAgICAgIGFmdGVyJDUodGFibGUsIGN1cnNvcik7XG4gICAgICAgICAgcmVtb3ZlJDYodGFibGUpO1xuICAgICAgICAgIGlmIChlZGl0b3IuZG9tLmlzRW1wdHkoZWRpdG9yLmdldEJvZHkoKSkpIHtcbiAgICAgICAgICAgIGVkaXRvci5zZXRDb250ZW50KCcnKTtcbiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Q3Vyc29yTG9jYXRpb24oKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLmRvbS5jcmVhdGVSbmcoKTtcbiAgICAgICAgICAgIHJuZy5zZXRTdGFydChjdXJzb3IuZG9tLCAwKTtcbiAgICAgICAgICAgIHJuZy5zZXRFbmQoY3Vyc29yLmRvbSwgMCk7XG4gICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgICAgICAgZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc2V0U2l6aW5nTW9kZSA9IHNpemluZyA9PiBnZXRTZWxlY3Rpb25TdGFydENlbGxPckNhcHRpb24oZWRpdG9yKS5lYWNoKGNlbGxPckNhcHRpb24gPT4ge1xuICAgICAgICBjb25zdCBpc0ZvcmNlZFNpemluZyA9IGlzVGFibGVSZXNwb25zaXZlRm9yY2VkKGVkaXRvcikgfHwgaXNUYWJsZVBpeGVsc0ZvcmNlZChlZGl0b3IpIHx8IGlzVGFibGVQZXJjZW50YWdlc0ZvcmNlZChlZGl0b3IpO1xuICAgICAgICBpZiAoIWlzRm9yY2VkU2l6aW5nKSB7XG4gICAgICAgICAgdGFibGUoY2VsbE9yQ2FwdGlvbiwgaXNSb290KS5lYWNoKHRhYmxlID0+IHtcbiAgICAgICAgICAgIGlmIChzaXppbmcgPT09ICdyZWxhdGl2ZScgJiYgIWlzUGVyY2VudFNpemluZyh0YWJsZSkpIHtcbiAgICAgICAgICAgICAgY29udmVydFRvUGVyY2VudFNpemUodGFibGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzaXppbmcgPT09ICdmaXhlZCcgJiYgIWlzUGl4ZWxTaXppbmcodGFibGUpKSB7XG4gICAgICAgICAgICAgIGNvbnZlcnRUb1BpeGVsU2l6ZSh0YWJsZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNpemluZyA9PT0gJ3Jlc3BvbnNpdmUnICYmICFpc05vbmVTaXppbmcodGFibGUpKSB7XG4gICAgICAgICAgICAgIGNvbnZlcnRUb05vbmVTaXplKHRhYmxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlbW92ZURhdGFTdHlsZSh0YWJsZSk7XG4gICAgICAgICAgICBmaXJlVGFibGVNb2RpZmllZChlZGl0b3IsIHRhYmxlLmRvbSwgc3RydWN0dXJlTW9kaWZpZWQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGdldFRhYmxlRnJvbUNlbGwgPSBjZWxsID0+IHRhYmxlKGNlbGwsIGlzUm9vdCk7XG4gICAgICBjb25zdCBwZXJmb3JtQWN0aW9uT25TZWxlY3Rpb24gPSBhY3Rpb24gPT4gZ2V0U2VsZWN0aW9uU3RhcnRDZWxsKGVkaXRvcikuYmluZChjZWxsID0+IGdldFRhYmxlRnJvbUNlbGwoY2VsbCkubWFwKHRhYmxlID0+IGFjdGlvbih0YWJsZSwgY2VsbCkpKTtcbiAgICAgIGNvbnN0IHRvZ2dsZVRhYmxlQ2xhc3MgPSAoX3VpLCBjbGF6eikgPT4ge1xuICAgICAgICBwZXJmb3JtQWN0aW9uT25TZWxlY3Rpb24odGFibGUgPT4ge1xuICAgICAgICAgIGVkaXRvci5mb3JtYXR0ZXIudG9nZ2xlKCd0YWJsZWNsYXNzJywgeyB2YWx1ZTogY2xhenogfSwgdGFibGUuZG9tKTtcbiAgICAgICAgICBmaXJlVGFibGVNb2RpZmllZChlZGl0b3IsIHRhYmxlLmRvbSwgc3R5bGVNb2RpZmllZCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHRvZ2dsZVRhYmxlQ2VsbENsYXNzID0gKF91aSwgY2xhenopID0+IHtcbiAgICAgICAgcGVyZm9ybUFjdGlvbk9uU2VsZWN0aW9uKHRhYmxlID0+IHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxzID0gZ2V0Q2VsbHNGcm9tU2VsZWN0aW9uKGVkaXRvcik7XG4gICAgICAgICAgY29uc3QgYWxsSGF2ZUNsYXNzID0gZm9yYWxsKHNlbGVjdGVkQ2VsbHMsIGNlbGwgPT4gZWRpdG9yLmZvcm1hdHRlci5tYXRjaCgndGFibGVjZWxsY2xhc3MnLCB7IHZhbHVlOiBjbGF6eiB9LCBjZWxsLmRvbSkpO1xuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlckFjdGlvbiA9IGFsbEhhdmVDbGFzcyA/IGVkaXRvci5mb3JtYXR0ZXIucmVtb3ZlIDogZWRpdG9yLmZvcm1hdHRlci5hcHBseTtcbiAgICAgICAgICBlYWNoJDIoc2VsZWN0ZWRDZWxscywgY2VsbCA9PiBmb3JtYXR0ZXJBY3Rpb24oJ3RhYmxlY2VsbGNsYXNzJywgeyB2YWx1ZTogY2xhenogfSwgY2VsbC5kb20pKTtcbiAgICAgICAgICBmaXJlVGFibGVNb2RpZmllZChlZGl0b3IsIHRhYmxlLmRvbSwgc3R5bGVNb2RpZmllZCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHRvZ2dsZUNhcHRpb24gPSAoKSA9PiB7XG4gICAgICAgIGdldFNlbGVjdGlvblN0YXJ0Q2VsbE9yQ2FwdGlvbihlZGl0b3IpLmVhY2goY2VsbE9yQ2FwdGlvbiA9PiB7XG4gICAgICAgICAgdGFibGUoY2VsbE9yQ2FwdGlvbiwgaXNSb290KS5lYWNoKHRhYmxlID0+IHtcbiAgICAgICAgICAgIGNoaWxkKHRhYmxlLCAnY2FwdGlvbicpLmZvbGQoKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjYXB0aW9uID0gU3VnYXJFbGVtZW50LmZyb21UYWcoJ2NhcHRpb24nKTtcbiAgICAgICAgICAgICAgYXBwZW5kJDEoY2FwdGlvbiwgU3VnYXJFbGVtZW50LmZyb21UZXh0KCdDYXB0aW9uJykpO1xuICAgICAgICAgICAgICBhcHBlbmRBdCh0YWJsZSwgY2FwdGlvbiwgMCk7XG4gICAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Q3Vyc29yTG9jYXRpb24oY2FwdGlvbi5kb20sIDApO1xuICAgICAgICAgICAgfSwgY2FwdGlvbiA9PiB7XG4gICAgICAgICAgICAgIGlmIChpc1RhZygnY2FwdGlvbicpKGNlbGxPckNhcHRpb24pKSB7XG4gICAgICAgICAgICAgICAgb25lKCd0ZCcsIHRhYmxlKS5lYWNoKHRkID0+IGVkaXRvci5zZWxlY3Rpb24uc2V0Q3Vyc29yTG9jYXRpb24odGQuZG9tLCAwKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVtb3ZlJDYoY2FwdGlvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZpcmVUYWJsZU1vZGlmaWVkKGVkaXRvciwgdGFibGUuZG9tLCBzdHJ1Y3R1cmVNb2RpZmllZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHBvc3RFeGVjdXRlID0gX2RhdGEgPT4ge1xuICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBhY3RPblNlbGVjdGlvbiA9IChleGVjdXRlLCBub0V2ZW50cyA9IGZhbHNlKSA9PiBwZXJmb3JtQWN0aW9uT25TZWxlY3Rpb24oKHRhYmxlLCBzdGFydENlbGwpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0cyA9IGZvck1lbnUoZ2V0Q2VsbHNGcm9tU2VsZWN0aW9uKGVkaXRvciksIHRhYmxlLCBzdGFydENlbGwpO1xuICAgICAgICBleGVjdXRlKHRhYmxlLCB0YXJnZXRzLCBub0V2ZW50cykuZWFjaChwb3N0RXhlY3V0ZSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNvcHlSb3dTZWxlY3Rpb24gPSAoKSA9PiBwZXJmb3JtQWN0aW9uT25TZWxlY3Rpb24oKHRhYmxlLCBzdGFydENlbGwpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0cyA9IGZvck1lbnUoZ2V0Q2VsbHNGcm9tU2VsZWN0aW9uKGVkaXRvciksIHRhYmxlLCBzdGFydENlbGwpO1xuICAgICAgICBjb25zdCBnZW5lcmF0b3JzID0gY2VsbE9wZXJhdGlvbnMobm9vcCwgU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldERvYygpKSwgT3B0aW9uYWwubm9uZSgpKTtcbiAgICAgICAgcmV0dXJuIGNvcHlSb3dzKHRhYmxlLCB0YXJnZXRzLCBnZW5lcmF0b3JzKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY29weUNvbFNlbGVjdGlvbiA9ICgpID0+IHBlcmZvcm1BY3Rpb25PblNlbGVjdGlvbigodGFibGUsIHN0YXJ0Q2VsbCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXRzID0gZm9yTWVudShnZXRDZWxsc0Zyb21TZWxlY3Rpb24oZWRpdG9yKSwgdGFibGUsIHN0YXJ0Q2VsbCk7XG4gICAgICAgIHJldHVybiBjb3B5Q29scyh0YWJsZSwgdGFyZ2V0cyk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBhc3RlT25TZWxlY3Rpb24gPSAoZXhlY3V0ZSwgZ2V0Um93cykgPT4gZ2V0Um93cygpLmVhY2gocm93cyA9PiB7XG4gICAgICAgIGNvbnN0IGNsb25lZFJvd3MgPSBtYXAkMShyb3dzLCByb3cgPT4gZGVlcChyb3cpKTtcbiAgICAgICAgcGVyZm9ybUFjdGlvbk9uU2VsZWN0aW9uKCh0YWJsZSwgc3RhcnRDZWxsKSA9PiB7XG4gICAgICAgICAgY29uc3QgZ2VuZXJhdG9ycyA9IHBhc3RlJDEoU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldERvYygpKSk7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0cyA9IHBhc3RlUm93cyhnZXRDZWxsc0Zyb21TZWxlY3Rpb24oZWRpdG9yKSwgc3RhcnRDZWxsLCBjbG9uZWRSb3dzLCBnZW5lcmF0b3JzKTtcbiAgICAgICAgICBleGVjdXRlKHRhYmxlLCB0YXJnZXRzKS5lYWNoKHBvc3RFeGVjdXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGFjdE9uVHlwZSA9IGdldEFjdGlvbiA9PiAoX3VpLCBhcmdzKSA9PiBnZXQkYyhhcmdzLCAndHlwZScpLmVhY2godHlwZSA9PiB7XG4gICAgICAgIGFjdE9uU2VsZWN0aW9uKGdldEFjdGlvbih0eXBlKSwgYXJncy5ub19ldmVudHMpO1xuICAgICAgfSk7XG4gICAgICBlYWNoJDEoe1xuICAgICAgICBtY2VUYWJsZVNwbGl0Q2VsbHM6ICgpID0+IGFjdE9uU2VsZWN0aW9uKGFjdGlvbnMudW5tZXJnZUNlbGxzKSxcbiAgICAgICAgbWNlVGFibGVNZXJnZUNlbGxzOiAoKSA9PiBhY3RPblNlbGVjdGlvbihhY3Rpb25zLm1lcmdlQ2VsbHMpLFxuICAgICAgICBtY2VUYWJsZUluc2VydFJvd0JlZm9yZTogKCkgPT4gYWN0T25TZWxlY3Rpb24oYWN0aW9ucy5pbnNlcnRSb3dzQmVmb3JlKSxcbiAgICAgICAgbWNlVGFibGVJbnNlcnRSb3dBZnRlcjogKCkgPT4gYWN0T25TZWxlY3Rpb24oYWN0aW9ucy5pbnNlcnRSb3dzQWZ0ZXIpLFxuICAgICAgICBtY2VUYWJsZUluc2VydENvbEJlZm9yZTogKCkgPT4gYWN0T25TZWxlY3Rpb24oYWN0aW9ucy5pbnNlcnRDb2x1bW5zQmVmb3JlKSxcbiAgICAgICAgbWNlVGFibGVJbnNlcnRDb2xBZnRlcjogKCkgPT4gYWN0T25TZWxlY3Rpb24oYWN0aW9ucy5pbnNlcnRDb2x1bW5zQWZ0ZXIpLFxuICAgICAgICBtY2VUYWJsZURlbGV0ZUNvbDogKCkgPT4gYWN0T25TZWxlY3Rpb24oYWN0aW9ucy5kZWxldGVDb2x1bW4pLFxuICAgICAgICBtY2VUYWJsZURlbGV0ZVJvdzogKCkgPT4gYWN0T25TZWxlY3Rpb24oYWN0aW9ucy5kZWxldGVSb3cpLFxuICAgICAgICBtY2VUYWJsZUN1dENvbDogKCkgPT4gY29weUNvbFNlbGVjdGlvbigpLmVhY2goc2VsZWN0aW9uID0+IHtcbiAgICAgICAgICBzZXRDb2x1bW5zKHNlbGVjdGlvbik7XG4gICAgICAgICAgYWN0T25TZWxlY3Rpb24oYWN0aW9ucy5kZWxldGVDb2x1bW4pO1xuICAgICAgICB9KSxcbiAgICAgICAgbWNlVGFibGVDdXRSb3c6ICgpID0+IGNvcHlSb3dTZWxlY3Rpb24oKS5lYWNoKHNlbGVjdGlvbiA9PiB7XG4gICAgICAgICAgc2V0Um93cyhzZWxlY3Rpb24pO1xuICAgICAgICAgIGFjdE9uU2VsZWN0aW9uKGFjdGlvbnMuZGVsZXRlUm93KTtcbiAgICAgICAgfSksXG4gICAgICAgIG1jZVRhYmxlQ29weUNvbDogKCkgPT4gY29weUNvbFNlbGVjdGlvbigpLmVhY2goc2VsZWN0aW9uID0+IHNldENvbHVtbnMoc2VsZWN0aW9uKSksXG4gICAgICAgIG1jZVRhYmxlQ29weVJvdzogKCkgPT4gY29weVJvd1NlbGVjdGlvbigpLmVhY2goc2VsZWN0aW9uID0+IHNldFJvd3Moc2VsZWN0aW9uKSksXG4gICAgICAgIG1jZVRhYmxlUGFzdGVDb2xCZWZvcmU6ICgpID0+IHBhc3RlT25TZWxlY3Rpb24oYWN0aW9ucy5wYXN0ZUNvbHNCZWZvcmUsIGdldENvbHVtbnMpLFxuICAgICAgICBtY2VUYWJsZVBhc3RlQ29sQWZ0ZXI6ICgpID0+IHBhc3RlT25TZWxlY3Rpb24oYWN0aW9ucy5wYXN0ZUNvbHNBZnRlciwgZ2V0Q29sdW1ucyksXG4gICAgICAgIG1jZVRhYmxlUGFzdGVSb3dCZWZvcmU6ICgpID0+IHBhc3RlT25TZWxlY3Rpb24oYWN0aW9ucy5wYXN0ZVJvd3NCZWZvcmUsIGdldFJvd3MpLFxuICAgICAgICBtY2VUYWJsZVBhc3RlUm93QWZ0ZXI6ICgpID0+IHBhc3RlT25TZWxlY3Rpb24oYWN0aW9ucy5wYXN0ZVJvd3NBZnRlciwgZ2V0Um93cyksXG4gICAgICAgIG1jZVRhYmxlRGVsZXRlOiBlcmFzZVRhYmxlLFxuICAgICAgICBtY2VUYWJsZUNlbGxUb2dnbGVDbGFzczogdG9nZ2xlVGFibGVDZWxsQ2xhc3MsXG4gICAgICAgIG1jZVRhYmxlVG9nZ2xlQ2xhc3M6IHRvZ2dsZVRhYmxlQ2xhc3MsXG4gICAgICAgIG1jZVRhYmxlVG9nZ2xlQ2FwdGlvbjogdG9nZ2xlQ2FwdGlvbixcbiAgICAgICAgbWNlVGFibGVTaXppbmdNb2RlOiAoX3VpLCBzaXppbmcpID0+IHNldFNpemluZ01vZGUoc2l6aW5nKSxcbiAgICAgICAgbWNlVGFibGVDZWxsVHlwZTogYWN0T25UeXBlKHR5cGUgPT4gdHlwZSA9PT0gJ3RoJyA/IGFjdGlvbnMubWFrZUNlbGxzSGVhZGVyIDogYWN0aW9ucy51bm1ha2VDZWxsc0hlYWRlciksXG4gICAgICAgIG1jZVRhYmxlQ29sVHlwZTogYWN0T25UeXBlKHR5cGUgPT4gdHlwZSA9PT0gJ3RoJyA/IGFjdGlvbnMubWFrZUNvbHVtbnNIZWFkZXIgOiBhY3Rpb25zLnVubWFrZUNvbHVtbnNIZWFkZXIpLFxuICAgICAgICBtY2VUYWJsZVJvd1R5cGU6IGFjdE9uVHlwZSh0eXBlID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlICdoZWFkZXInOlxuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbnMubWFrZVJvd3NIZWFkZXI7XG4gICAgICAgICAgY2FzZSAnZm9vdGVyJzpcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb25zLm1ha2VSb3dzRm9vdGVyO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9ucy5tYWtlUm93c0JvZHk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSwgKGZ1bmMsIG5hbWUpID0+IGVkaXRvci5hZGRDb21tYW5kKG5hbWUsIGZ1bmMpKTtcbiAgICAgIGVkaXRvci5hZGRDb21tYW5kKCdtY2VJbnNlcnRUYWJsZScsIChfdWksIGFyZ3MpID0+IHtcbiAgICAgICAgaW5zZXJ0VGFibGUoZWRpdG9yLCBhcmdzLnJvd3MsIGFyZ3MuY29sdW1ucywgYXJncy5vcHRpb25zKTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLmFkZENvbW1hbmQoJ21jZVRhYmxlQXBwbHlDZWxsU3R5bGUnLCAoX3VpLCBhcmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IGdldEZvcm1hdE5hbWUgPSBzdHlsZSA9PiAndGFibGVjZWxsJyArIHN0eWxlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnLScsICcnKTtcbiAgICAgICAgaWYgKCFpc09iamVjdChhcmdzKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjZWxscyA9IGZpbHRlciQyKGdldENlbGxzRnJvbVNlbGVjdGlvbihlZGl0b3IpLCBpc0luRWRpdGFibGVDb250ZXh0JDEpO1xuICAgICAgICBpZiAoY2VsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbGlkQXJncyA9IGZpbHRlciQxKGFyZ3MsICh2YWx1ZSwgc3R5bGUpID0+IGVkaXRvci5mb3JtYXR0ZXIuaGFzKGdldEZvcm1hdE5hbWUoc3R5bGUpKSAmJiBpc1N0cmluZyh2YWx1ZSkpO1xuICAgICAgICBpZiAoaXNFbXB0eSh2YWxpZEFyZ3MpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVhY2gkMSh2YWxpZEFyZ3MsICh2YWx1ZSwgc3R5bGUpID0+IHtcbiAgICAgICAgICBjb25zdCBmb3JtYXROYW1lID0gZ2V0Rm9ybWF0TmFtZShzdHlsZSk7XG4gICAgICAgICAgZWFjaCQyKGNlbGxzLCBjZWxsID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgZWRpdG9yLmZvcm1hdHRlci5yZW1vdmUoZm9ybWF0TmFtZSwgeyB2YWx1ZTogbnVsbCB9LCBjZWxsLmRvbSwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlZGl0b3IuZm9ybWF0dGVyLmFwcGx5KGZvcm1hdE5hbWUsIHsgdmFsdWUgfSwgY2VsbC5kb20pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgZ2V0VGFibGVGcm9tQ2VsbChjZWxsc1swXSkuZWFjaCh0YWJsZSA9PiBmaXJlVGFibGVNb2RpZmllZChlZGl0b3IsIHRhYmxlLmRvbSwgc3R5bGVNb2RpZmllZCkpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlZ2lzdGVyUXVlcnlDb21tYW5kcyA9IChlZGl0b3IsIGFjdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGlzUm9vdCA9IGdldElzUm9vdChlZGl0b3IpO1xuICAgICAgY29uc3QgbG9va3VwT25TZWxlY3Rpb24gPSBhY3Rpb24gPT4gZ2V0U2VsZWN0aW9uQ2VsbChnZXRTZWxlY3Rpb25TdGFydChlZGl0b3IpKS5iaW5kKGNlbGwgPT4gdGFibGUoY2VsbCwgaXNSb290KS5tYXAodGFibGUgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXRzID0gZm9yTWVudShnZXRDZWxsc0Zyb21TZWxlY3Rpb24oZWRpdG9yKSwgdGFibGUsIGNlbGwpO1xuICAgICAgICByZXR1cm4gYWN0aW9uKHRhYmxlLCB0YXJnZXRzKTtcbiAgICAgIH0pKS5nZXRPcignJyk7XG4gICAgICBlYWNoJDEoe1xuICAgICAgICBtY2VUYWJsZVJvd1R5cGU6ICgpID0+IGxvb2t1cE9uU2VsZWN0aW9uKGFjdGlvbnMuZ2V0VGFibGVSb3dUeXBlKSxcbiAgICAgICAgbWNlVGFibGVDZWxsVHlwZTogKCkgPT4gbG9va3VwT25TZWxlY3Rpb24oYWN0aW9ucy5nZXRUYWJsZUNlbGxUeXBlKSxcbiAgICAgICAgbWNlVGFibGVDb2xUeXBlOiAoKSA9PiBsb29rdXBPblNlbGVjdGlvbihhY3Rpb25zLmdldFRhYmxlQ29sVHlwZSlcbiAgICAgIH0sIChmdW5jLCBuYW1lKSA9PiBlZGl0b3IuYWRkUXVlcnlWYWx1ZUhhbmRsZXIobmFtZSwgZnVuYykpO1xuICAgIH07XG5cbiAgICBjb25zdCBhZHQkNCA9IEFkdC5nZW5lcmF0ZShbXG4gICAgICB7IGJlZm9yZTogWydlbGVtZW50J10gfSxcbiAgICAgIHtcbiAgICAgICAgb246IFtcbiAgICAgICAgICAnZWxlbWVudCcsXG4gICAgICAgICAgJ29mZnNldCdcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHsgYWZ0ZXI6IFsnZWxlbWVudCddIH1cbiAgICBdKTtcbiAgICBjb25zdCBjYXRhJDEgPSAoc3ViamVjdCwgb25CZWZvcmUsIG9uT24sIG9uQWZ0ZXIpID0+IHN1YmplY3QuZm9sZChvbkJlZm9yZSwgb25Pbiwgb25BZnRlcik7XG4gICAgY29uc3QgZ2V0U3RhcnQkMSA9IHNpdHUgPT4gc2l0dS5mb2xkKGlkZW50aXR5LCBpZGVudGl0eSwgaWRlbnRpdHkpO1xuICAgIGNvbnN0IGJlZm9yZSQyID0gYWR0JDQuYmVmb3JlO1xuICAgIGNvbnN0IG9uID0gYWR0JDQub247XG4gICAgY29uc3QgYWZ0ZXIkMyA9IGFkdCQ0LmFmdGVyO1xuICAgIGNvbnN0IFNpdHUgPSB7XG4gICAgICBiZWZvcmU6IGJlZm9yZSQyLFxuICAgICAgb24sXG4gICAgICBhZnRlcjogYWZ0ZXIkMyxcbiAgICAgIGNhdGE6IGNhdGEkMSxcbiAgICAgIGdldFN0YXJ0OiBnZXRTdGFydCQxXG4gICAgfTtcblxuICAgIGNvbnN0IGNyZWF0ZSQ0ID0gKHNlbGVjdGlvbiwga2lsbCkgPT4gKHtcbiAgICAgIHNlbGVjdGlvbixcbiAgICAgIGtpbGxcbiAgICB9KTtcbiAgICBjb25zdCBSZXNwb25zZSA9IHsgY3JlYXRlOiBjcmVhdGUkNCB9O1xuXG4gICAgY29uc3Qgc2VsZWN0Tm9kZSA9ICh3aW4sIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IHdpbi5kb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgcm5nLnNlbGVjdE5vZGUoZWxlbWVudC5kb20pO1xuICAgICAgcmV0dXJuIHJuZztcbiAgICB9O1xuICAgIGNvbnN0IHNlbGVjdE5vZGVDb250ZW50cyA9ICh3aW4sIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IHdpbi5kb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgc2VsZWN0Tm9kZUNvbnRlbnRzVXNpbmcocm5nLCBlbGVtZW50KTtcbiAgICAgIHJldHVybiBybmc7XG4gICAgfTtcbiAgICBjb25zdCBzZWxlY3ROb2RlQ29udGVudHNVc2luZyA9IChybmcsIGVsZW1lbnQpID0+IHJuZy5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudC5kb20pO1xuICAgIGNvbnN0IHNldFN0YXJ0ID0gKHJuZywgc2l0dSkgPT4ge1xuICAgICAgc2l0dS5mb2xkKGUgPT4ge1xuICAgICAgICBybmcuc2V0U3RhcnRCZWZvcmUoZS5kb20pO1xuICAgICAgfSwgKGUsIG8pID0+IHtcbiAgICAgICAgcm5nLnNldFN0YXJ0KGUuZG9tLCBvKTtcbiAgICAgIH0sIGUgPT4ge1xuICAgICAgICBybmcuc2V0U3RhcnRBZnRlcihlLmRvbSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHNldEZpbmlzaCA9IChybmcsIHNpdHUpID0+IHtcbiAgICAgIHNpdHUuZm9sZChlID0+IHtcbiAgICAgICAgcm5nLnNldEVuZEJlZm9yZShlLmRvbSk7XG4gICAgICB9LCAoZSwgbykgPT4ge1xuICAgICAgICBybmcuc2V0RW5kKGUuZG9tLCBvKTtcbiAgICAgIH0sIGUgPT4ge1xuICAgICAgICBybmcuc2V0RW5kQWZ0ZXIoZS5kb20pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWxhdGl2ZVRvTmF0aXZlID0gKHdpbiwgc3RhcnRTaXR1LCBmaW5pc2hTaXR1KSA9PiB7XG4gICAgICBjb25zdCByYW5nZSA9IHdpbi5kb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgc2V0U3RhcnQocmFuZ2UsIHN0YXJ0U2l0dSk7XG4gICAgICBzZXRGaW5pc2gocmFuZ2UsIGZpbmlzaFNpdHUpO1xuICAgICAgcmV0dXJuIHJhbmdlO1xuICAgIH07XG4gICAgY29uc3QgZXhhY3RUb05hdGl2ZSA9ICh3aW4sIHN0YXJ0LCBzb2Zmc2V0LCBmaW5pc2gsIGZvZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IHdpbi5kb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgcm5nLnNldFN0YXJ0KHN0YXJ0LmRvbSwgc29mZnNldCk7XG4gICAgICBybmcuc2V0RW5kKGZpbmlzaC5kb20sIGZvZmZzZXQpO1xuICAgICAgcmV0dXJuIHJuZztcbiAgICB9O1xuICAgIGNvbnN0IHRvUmVjdCA9IHJlY3QgPT4gKHtcbiAgICAgIGxlZnQ6IHJlY3QubGVmdCxcbiAgICAgIHRvcDogcmVjdC50b3AsXG4gICAgICByaWdodDogcmVjdC5yaWdodCxcbiAgICAgIGJvdHRvbTogcmVjdC5ib3R0b20sXG4gICAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICAgIGhlaWdodDogcmVjdC5oZWlnaHRcbiAgICB9KTtcbiAgICBjb25zdCBnZXRGaXJzdFJlY3QkMSA9IHJuZyA9PiB7XG4gICAgICBjb25zdCByZWN0cyA9IHJuZy5nZXRDbGllbnRSZWN0cygpO1xuICAgICAgY29uc3QgcmVjdCA9IHJlY3RzLmxlbmd0aCA+IDAgPyByZWN0c1swXSA6IHJuZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHJldHVybiByZWN0LndpZHRoID4gMCB8fCByZWN0LmhlaWdodCA+IDAgPyBPcHRpb25hbC5zb21lKHJlY3QpLm1hcCh0b1JlY3QpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG5cbiAgICBjb25zdCBhZHQkMyA9IEFkdC5nZW5lcmF0ZShbXG4gICAgICB7XG4gICAgICAgIGx0cjogW1xuICAgICAgICAgICdzdGFydCcsXG4gICAgICAgICAgJ3NvZmZzZXQnLFxuICAgICAgICAgICdmaW5pc2gnLFxuICAgICAgICAgICdmb2Zmc2V0J1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBydGw6IFtcbiAgICAgICAgICAnc3RhcnQnLFxuICAgICAgICAgICdzb2Zmc2V0JyxcbiAgICAgICAgICAnZmluaXNoJyxcbiAgICAgICAgICAnZm9mZnNldCdcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0pO1xuICAgIGNvbnN0IGZyb21SYW5nZSA9ICh3aW4sIHR5cGUsIHJhbmdlKSA9PiB0eXBlKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJhbmdlLnN0YXJ0Q29udGFpbmVyKSwgcmFuZ2Uuc3RhcnRPZmZzZXQsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJhbmdlLmVuZENvbnRhaW5lciksIHJhbmdlLmVuZE9mZnNldCk7XG4gICAgY29uc3QgZ2V0UmFuZ2VzID0gKHdpbiwgc2VsZWN0aW9uKSA9PiBzZWxlY3Rpb24ubWF0Y2goe1xuICAgICAgZG9tUmFuZ2U6IHJuZyA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbHRyOiBjb25zdGFudChybmcpLFxuICAgICAgICAgIHJ0bDogT3B0aW9uYWwubm9uZVxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHJlbGF0aXZlOiAoc3RhcnRTaXR1LCBmaW5pc2hTaXR1KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbHRyOiBjYWNoZWQoKCkgPT4gcmVsYXRpdmVUb05hdGl2ZSh3aW4sIHN0YXJ0U2l0dSwgZmluaXNoU2l0dSkpLFxuICAgICAgICAgIHJ0bDogY2FjaGVkKCgpID0+IE9wdGlvbmFsLnNvbWUocmVsYXRpdmVUb05hdGl2ZSh3aW4sIGZpbmlzaFNpdHUsIHN0YXJ0U2l0dSkpKVxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIGV4YWN0OiAoc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGx0cjogY2FjaGVkKCgpID0+IGV4YWN0VG9OYXRpdmUod2luLCBzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSksXG4gICAgICAgICAgcnRsOiBjYWNoZWQoKCkgPT4gT3B0aW9uYWwuc29tZShleGFjdFRvTmF0aXZlKHdpbiwgZmluaXNoLCBmb2Zmc2V0LCBzdGFydCwgc29mZnNldCkpKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGRvRGlhZ25vc2UgPSAod2luLCByYW5nZXMpID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IHJhbmdlcy5sdHIoKTtcbiAgICAgIGlmIChybmcuY29sbGFwc2VkKSB7XG4gICAgICAgIGNvbnN0IHJldmVyc2VkID0gcmFuZ2VzLnJ0bCgpLmZpbHRlcihyZXYgPT4gcmV2LmNvbGxhcHNlZCA9PT0gZmFsc2UpO1xuICAgICAgICByZXR1cm4gcmV2ZXJzZWQubWFwKHJldiA9PiBhZHQkMy5ydGwoU3VnYXJFbGVtZW50LmZyb21Eb20ocmV2LmVuZENvbnRhaW5lciksIHJldi5lbmRPZmZzZXQsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJldi5zdGFydENvbnRhaW5lciksIHJldi5zdGFydE9mZnNldCkpLmdldE9yVGh1bmsoKCkgPT4gZnJvbVJhbmdlKHdpbiwgYWR0JDMubHRyLCBybmcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmcm9tUmFuZ2Uod2luLCBhZHQkMy5sdHIsIHJuZyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBkaWFnbm9zZSA9ICh3aW4sIHNlbGVjdGlvbikgPT4ge1xuICAgICAgY29uc3QgcmFuZ2VzID0gZ2V0UmFuZ2VzKHdpbiwgc2VsZWN0aW9uKTtcbiAgICAgIHJldHVybiBkb0RpYWdub3NlKHdpbiwgcmFuZ2VzKTtcbiAgICB9O1xuICAgIGNvbnN0IGFzTHRyUmFuZ2UgPSAod2luLCBzZWxlY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IGRpYWdub3NpcyA9IGRpYWdub3NlKHdpbiwgc2VsZWN0aW9uKTtcbiAgICAgIHJldHVybiBkaWFnbm9zaXMubWF0Y2goe1xuICAgICAgICBsdHI6IChzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSA9PiB7XG4gICAgICAgICAgY29uc3Qgcm5nID0gd2luLmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgICAgcm5nLnNldFN0YXJ0KHN0YXJ0LmRvbSwgc29mZnNldCk7XG4gICAgICAgICAgcm5nLnNldEVuZChmaW5pc2guZG9tLCBmb2Zmc2V0KTtcbiAgICAgICAgICByZXR1cm4gcm5nO1xuICAgICAgICB9LFxuICAgICAgICBydGw6IChzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSA9PiB7XG4gICAgICAgICAgY29uc3Qgcm5nID0gd2luLmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgICAgcm5nLnNldFN0YXJ0KGZpbmlzaC5kb20sIGZvZmZzZXQpO1xuICAgICAgICAgIHJuZy5zZXRFbmQoc3RhcnQuZG9tLCBzb2Zmc2V0KTtcbiAgICAgICAgICByZXR1cm4gcm5nO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGFkdCQzLmx0cjtcbiAgICBhZHQkMy5ydGw7XG5cbiAgICBjb25zdCBjcmVhdGUkMyA9IChzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSA9PiAoe1xuICAgICAgc3RhcnQsXG4gICAgICBzb2Zmc2V0LFxuICAgICAgZmluaXNoLFxuICAgICAgZm9mZnNldFxuICAgIH0pO1xuICAgIGNvbnN0IFNpbVJhbmdlID0geyBjcmVhdGU6IGNyZWF0ZSQzIH07XG5cbiAgICBjb25zdCBjcmVhdGUkMiA9IChzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGFydDogU2l0dS5vbihzdGFydCwgc29mZnNldCksXG4gICAgICAgIGZpbmlzaDogU2l0dS5vbihmaW5pc2gsIGZvZmZzZXQpXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgU2l0dXMgPSB7IGNyZWF0ZTogY3JlYXRlJDIgfTtcblxuICAgIGNvbnN0IGNvbnZlcnRUb1JhbmdlID0gKHdpbiwgc2VsZWN0aW9uKSA9PiB7XG4gICAgICBjb25zdCBybmcgPSBhc0x0clJhbmdlKHdpbiwgc2VsZWN0aW9uKTtcbiAgICAgIHJldHVybiBTaW1SYW5nZS5jcmVhdGUoU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLnN0YXJ0Q29udGFpbmVyKSwgcm5nLnN0YXJ0T2Zmc2V0LCBTdWdhckVsZW1lbnQuZnJvbURvbShybmcuZW5kQ29udGFpbmVyKSwgcm5nLmVuZE9mZnNldCk7XG4gICAgfTtcbiAgICBjb25zdCBtYWtlU2l0dXMgPSBTaXR1cy5jcmVhdGU7XG5cbiAgICBjb25zdCBzeW5jID0gKGNvbnRhaW5lciwgaXNSb290LCBzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0LCBzZWxlY3RSYW5nZSkgPT4ge1xuICAgICAgaWYgKCEoZXEkMShzdGFydCwgZmluaXNoKSAmJiBzb2Zmc2V0ID09PSBmb2Zmc2V0KSkge1xuICAgICAgICByZXR1cm4gY2xvc2VzdCQxKHN0YXJ0LCAndGQsdGgnLCBpc1Jvb3QpLmJpbmQocyA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNsb3Nlc3QkMShmaW5pc2gsICd0ZCx0aCcsIGlzUm9vdCkuYmluZChmID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkZXRlY3QoY29udGFpbmVyLCBpc1Jvb3QsIHMsIGYsIHNlbGVjdFJhbmdlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZGV0ZWN0ID0gKGNvbnRhaW5lciwgaXNSb290LCBzdGFydCwgZmluaXNoLCBzZWxlY3RSYW5nZSkgPT4ge1xuICAgICAgaWYgKCFlcSQxKHN0YXJ0LCBmaW5pc2gpKSB7XG4gICAgICAgIHJldHVybiBpZGVudGlmeShzdGFydCwgZmluaXNoLCBpc1Jvb3QpLmJpbmQoY2VsbFNlbCA9PiB7XG4gICAgICAgICAgY29uc3QgYm94ZXMgPSBjZWxsU2VsLmJveGVzLmdldE9yKFtdKTtcbiAgICAgICAgICBpZiAoYm94ZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgc2VsZWN0UmFuZ2UoY29udGFpbmVyLCBib3hlcywgY2VsbFNlbC5zdGFydCwgY2VsbFNlbC5maW5pc2gpO1xuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoUmVzcG9uc2UuY3JlYXRlKE9wdGlvbmFsLnNvbWUobWFrZVNpdHVzKHN0YXJ0LCAwLCBzdGFydCwgZ2V0RW5kKHN0YXJ0KSkpLCB0cnVlKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGUgPSAocm93cywgY29sdW1ucywgY29udGFpbmVyLCBzZWxlY3RlZCwgYW5ub3RhdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZVNlbGVjdGlvbiA9IG5ld1NlbHMgPT4ge1xuICAgICAgICBhbm5vdGF0aW9ucy5jbGVhckJlZm9yZVVwZGF0ZShjb250YWluZXIpO1xuICAgICAgICBhbm5vdGF0aW9ucy5zZWxlY3RSYW5nZShjb250YWluZXIsIG5ld1NlbHMuYm94ZXMsIG5ld1NlbHMuc3RhcnQsIG5ld1NlbHMuZmluaXNoKTtcbiAgICAgICAgcmV0dXJuIG5ld1NlbHMuYm94ZXM7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHNoaWZ0U2VsZWN0aW9uKHNlbGVjdGVkLCByb3dzLCBjb2x1bW5zLCBhbm5vdGF0aW9ucy5maXJzdFNlbGVjdGVkU2VsZWN0b3IsIGFubm90YXRpb25zLmxhc3RTZWxlY3RlZFNlbGVjdG9yKS5tYXAodXBkYXRlU2VsZWN0aW9uKTtcbiAgICB9O1xuXG4gICAgY29uc3QgdHJhdmVyc2UgPSAoaXRlbSwgbW9kZSkgPT4gKHtcbiAgICAgIGl0ZW0sXG4gICAgICBtb2RlXG4gICAgfSk7XG4gICAgY29uc3QgYmFja3RyYWNrID0gKHVuaXZlcnNlLCBpdGVtLCBfZGlyZWN0aW9uLCB0cmFuc2l0aW9uID0gc2lkZXN0ZXApID0+IHtcbiAgICAgIHJldHVybiB1bml2ZXJzZS5wcm9wZXJ0eSgpLnBhcmVudChpdGVtKS5tYXAocCA9PiB7XG4gICAgICAgIHJldHVybiB0cmF2ZXJzZShwLCB0cmFuc2l0aW9uKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2lkZXN0ZXAgPSAodW5pdmVyc2UsIGl0ZW0sIGRpcmVjdGlvbiwgdHJhbnNpdGlvbiA9IGFkdmFuY2UpID0+IHtcbiAgICAgIHJldHVybiBkaXJlY3Rpb24uc2libGluZyh1bml2ZXJzZSwgaXRlbSkubWFwKHAgPT4ge1xuICAgICAgICByZXR1cm4gdHJhdmVyc2UocCwgdHJhbnNpdGlvbik7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFkdmFuY2UgPSAodW5pdmVyc2UsIGl0ZW0sIGRpcmVjdGlvbiwgdHJhbnNpdGlvbiA9IGFkdmFuY2UpID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gdW5pdmVyc2UucHJvcGVydHkoKS5jaGlsZHJlbihpdGVtKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGRpcmVjdGlvbi5maXJzdChjaGlsZHJlbik7XG4gICAgICByZXR1cm4gcmVzdWx0Lm1hcChyID0+IHtcbiAgICAgICAgcmV0dXJuIHRyYXZlcnNlKHIsIHRyYW5zaXRpb24pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzdWNjZXNzb3JzID0gW1xuICAgICAge1xuICAgICAgICBjdXJyZW50OiBiYWNrdHJhY2ssXG4gICAgICAgIG5leHQ6IHNpZGVzdGVwLFxuICAgICAgICBmYWxsYmFjazogT3B0aW9uYWwubm9uZSgpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjdXJyZW50OiBzaWRlc3RlcCxcbiAgICAgICAgbmV4dDogYWR2YW5jZSxcbiAgICAgICAgZmFsbGJhY2s6IE9wdGlvbmFsLnNvbWUoYmFja3RyYWNrKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY3VycmVudDogYWR2YW5jZSxcbiAgICAgICAgbmV4dDogYWR2YW5jZSxcbiAgICAgICAgZmFsbGJhY2s6IE9wdGlvbmFsLnNvbWUoc2lkZXN0ZXApXG4gICAgICB9XG4gICAgXTtcbiAgICBjb25zdCBnbyA9ICh1bml2ZXJzZSwgaXRlbSwgbW9kZSwgZGlyZWN0aW9uLCBydWxlcyA9IHN1Y2Nlc3NvcnMpID0+IHtcbiAgICAgIGNvbnN0IHJ1bGVPcHQgPSBmaW5kJDEocnVsZXMsIHN1Y2MgPT4ge1xuICAgICAgICByZXR1cm4gc3VjYy5jdXJyZW50ID09PSBtb2RlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcnVsZU9wdC5iaW5kKHJ1bGUgPT4ge1xuICAgICAgICByZXR1cm4gcnVsZS5jdXJyZW50KHVuaXZlcnNlLCBpdGVtLCBkaXJlY3Rpb24sIHJ1bGUubmV4dCkub3JUaHVuaygoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJ1bGUuZmFsbGJhY2suYmluZChmYiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZ28odW5pdmVyc2UsIGl0ZW0sIGZiLCBkaXJlY3Rpb24pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBsZWZ0JDEgPSAoKSA9PiB7XG4gICAgICBjb25zdCBzaWJsaW5nID0gKHVuaXZlcnNlLCBpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiB1bml2ZXJzZS5xdWVyeSgpLnByZXZTaWJsaW5nKGl0ZW0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZpcnN0ID0gY2hpbGRyZW4gPT4ge1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4ubGVuZ3RoID4gMCA/IE9wdGlvbmFsLnNvbWUoY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0pIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNpYmxpbmcsXG4gICAgICAgIGZpcnN0XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgcmlnaHQkMSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHNpYmxpbmcgPSAodW5pdmVyc2UsIGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIHVuaXZlcnNlLnF1ZXJ5KCkubmV4dFNpYmxpbmcoaXRlbSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZmlyc3QgPSBjaGlsZHJlbiA9PiB7XG4gICAgICAgIHJldHVybiBjaGlsZHJlbi5sZW5ndGggPiAwID8gT3B0aW9uYWwuc29tZShjaGlsZHJlblswXSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2libGluZyxcbiAgICAgICAgZmlyc3RcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBXYWxrZXJzID0ge1xuICAgICAgbGVmdDogbGVmdCQxLFxuICAgICAgcmlnaHQ6IHJpZ2h0JDFcbiAgICB9O1xuXG4gICAgY29uc3QgaG9uZSA9ICh1bml2ZXJzZSwgaXRlbSwgcHJlZGljYXRlLCBtb2RlLCBkaXJlY3Rpb24sIGlzUm9vdCkgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9IGdvKHVuaXZlcnNlLCBpdGVtLCBtb2RlLCBkaXJlY3Rpb24pO1xuICAgICAgcmV0dXJuIG5leHQuYmluZChuID0+IHtcbiAgICAgICAgaWYgKGlzUm9vdChuLml0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcHJlZGljYXRlKG4uaXRlbSkgPyBPcHRpb25hbC5zb21lKG4uaXRlbSkgOiBob25lKHVuaXZlcnNlLCBuLml0ZW0sIHByZWRpY2F0ZSwgbi5tb2RlLCBkaXJlY3Rpb24sIGlzUm9vdCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbGVmdCA9ICh1bml2ZXJzZSwgaXRlbSwgcHJlZGljYXRlLCBpc1Jvb3QpID0+IHtcbiAgICAgIHJldHVybiBob25lKHVuaXZlcnNlLCBpdGVtLCBwcmVkaWNhdGUsIHNpZGVzdGVwLCBXYWxrZXJzLmxlZnQoKSwgaXNSb290KTtcbiAgICB9O1xuICAgIGNvbnN0IHJpZ2h0ID0gKHVuaXZlcnNlLCBpdGVtLCBwcmVkaWNhdGUsIGlzUm9vdCkgPT4ge1xuICAgICAgcmV0dXJuIGhvbmUodW5pdmVyc2UsIGl0ZW0sIHByZWRpY2F0ZSwgc2lkZXN0ZXAsIFdhbGtlcnMucmlnaHQoKSwgaXNSb290KTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNMZWFmID0gdW5pdmVyc2UgPT4gZWxlbWVudCA9PiB1bml2ZXJzZS5wcm9wZXJ0eSgpLmNoaWxkcmVuKGVsZW1lbnQpLmxlbmd0aCA9PT0gMDtcbiAgICBjb25zdCBiZWZvcmUkMSA9ICh1bml2ZXJzZSwgaXRlbSwgaXNSb290KSA9PiB7XG4gICAgICByZXR1cm4gc2Vla0xlZnQkMSh1bml2ZXJzZSwgaXRlbSwgaXNMZWFmKHVuaXZlcnNlKSwgaXNSb290KTtcbiAgICB9O1xuICAgIGNvbnN0IGFmdGVyJDIgPSAodW5pdmVyc2UsIGl0ZW0sIGlzUm9vdCkgPT4ge1xuICAgICAgcmV0dXJuIHNlZWtSaWdodCQxKHVuaXZlcnNlLCBpdGVtLCBpc0xlYWYodW5pdmVyc2UpLCBpc1Jvb3QpO1xuICAgIH07XG4gICAgY29uc3Qgc2Vla0xlZnQkMSA9IGxlZnQ7XG4gICAgY29uc3Qgc2Vla1JpZ2h0JDEgPSByaWdodDtcblxuICAgIGNvbnN0IHVuaXZlcnNlID0gRG9tVW5pdmVyc2UoKTtcbiAgICBjb25zdCBiZWZvcmUgPSAoZWxlbWVudCwgaXNSb290KSA9PiB7XG4gICAgICByZXR1cm4gYmVmb3JlJDEodW5pdmVyc2UsIGVsZW1lbnQsIGlzUm9vdCk7XG4gICAgfTtcbiAgICBjb25zdCBhZnRlciQxID0gKGVsZW1lbnQsIGlzUm9vdCkgPT4ge1xuICAgICAgcmV0dXJuIGFmdGVyJDIodW5pdmVyc2UsIGVsZW1lbnQsIGlzUm9vdCk7XG4gICAgfTtcbiAgICBjb25zdCBzZWVrTGVmdCA9IChlbGVtZW50LCBwcmVkaWNhdGUsIGlzUm9vdCkgPT4ge1xuICAgICAgcmV0dXJuIHNlZWtMZWZ0JDEodW5pdmVyc2UsIGVsZW1lbnQsIHByZWRpY2F0ZSwgaXNSb290KTtcbiAgICB9O1xuICAgIGNvbnN0IHNlZWtSaWdodCA9IChlbGVtZW50LCBwcmVkaWNhdGUsIGlzUm9vdCkgPT4ge1xuICAgICAgcmV0dXJuIHNlZWtSaWdodCQxKHVuaXZlcnNlLCBlbGVtZW50LCBwcmVkaWNhdGUsIGlzUm9vdCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFuY2VzdG9yID0gKHNjb3BlLCBwcmVkaWNhdGUsIGlzUm9vdCkgPT4gYW5jZXN0b3IkMihzY29wZSwgcHJlZGljYXRlLCBpc1Jvb3QpLmlzU29tZSgpO1xuXG4gICAgY29uc3QgYWR0JDIgPSBBZHQuZ2VuZXJhdGUoW1xuICAgICAgeyBub25lOiBbJ21lc3NhZ2UnXSB9LFxuICAgICAgeyBzdWNjZXNzOiBbXSB9LFxuICAgICAgeyBmYWlsZWRVcDogWydjZWxsJ10gfSxcbiAgICAgIHsgZmFpbGVkRG93bjogWydjZWxsJ10gfVxuICAgIF0pO1xuICAgIGNvbnN0IGlzT3ZlcmxhcHBpbmcgPSAoYnJpZGdlLCBiZWZvcmUsIGFmdGVyKSA9PiB7XG4gICAgICBjb25zdCBiZWZvcmVCb3VuZHMgPSBicmlkZ2UuZ2V0UmVjdChiZWZvcmUpO1xuICAgICAgY29uc3QgYWZ0ZXJCb3VuZHMgPSBicmlkZ2UuZ2V0UmVjdChhZnRlcik7XG4gICAgICByZXR1cm4gYWZ0ZXJCb3VuZHMucmlnaHQgPiBiZWZvcmVCb3VuZHMubGVmdCAmJiBhZnRlckJvdW5kcy5sZWZ0IDwgYmVmb3JlQm91bmRzLnJpZ2h0O1xuICAgIH07XG4gICAgY29uc3QgaXNSb3cgPSBlbGVtID0+IHtcbiAgICAgIHJldHVybiBjbG9zZXN0JDEoZWxlbSwgJ3RyJyk7XG4gICAgfTtcbiAgICBjb25zdCB2ZXJpZnkgPSAoYnJpZGdlLCBiZWZvcmUsIGJlZm9yZU9mZnNldCwgYWZ0ZXIsIGFmdGVyT2Zmc2V0LCBmYWlsdXJlLCBpc1Jvb3QpID0+IHtcbiAgICAgIHJldHVybiBjbG9zZXN0JDEoYWZ0ZXIsICd0ZCx0aCcsIGlzUm9vdCkuYmluZChhZnRlckNlbGwgPT4ge1xuICAgICAgICByZXR1cm4gY2xvc2VzdCQxKGJlZm9yZSwgJ3RkLHRoJywgaXNSb290KS5tYXAoYmVmb3JlQ2VsbCA9PiB7XG4gICAgICAgICAgaWYgKCFlcSQxKGFmdGVyQ2VsbCwgYmVmb3JlQ2VsbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzaGFyZWRPbmUoaXNSb3csIFtcbiAgICAgICAgICAgICAgYWZ0ZXJDZWxsLFxuICAgICAgICAgICAgICBiZWZvcmVDZWxsXG4gICAgICAgICAgICBdKS5mb2xkKCgpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGlzT3ZlcmxhcHBpbmcoYnJpZGdlLCBiZWZvcmVDZWxsLCBhZnRlckNlbGwpID8gYWR0JDIuc3VjY2VzcygpIDogZmFpbHVyZShiZWZvcmVDZWxsKTtcbiAgICAgICAgICAgIH0sIF9zaGFyZWRSb3cgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShiZWZvcmVDZWxsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZXEkMShhZnRlciwgYWZ0ZXJDZWxsKSAmJiBnZXRFbmQoYWZ0ZXJDZWxsKSA9PT0gYWZ0ZXJPZmZzZXQgPyBmYWlsdXJlKGJlZm9yZUNlbGwpIDogYWR0JDIubm9uZSgnaW4gc2FtZSBjZWxsJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pLmdldE9yKGFkdCQyLm5vbmUoJ2RlZmF1bHQnKSk7XG4gICAgfTtcbiAgICBjb25zdCBjYXRhID0gKHN1YmplY3QsIG9uTm9uZSwgb25TdWNjZXNzLCBvbkZhaWxlZFVwLCBvbkZhaWxlZERvd24pID0+IHtcbiAgICAgIHJldHVybiBzdWJqZWN0LmZvbGQob25Ob25lLCBvblN1Y2Nlc3MsIG9uRmFpbGVkVXAsIG9uRmFpbGVkRG93bik7XG4gICAgfTtcbiAgICBjb25zdCBCZWZvcmVBZnRlciA9IHtcbiAgICAgIC4uLmFkdCQyLFxuICAgICAgdmVyaWZ5LFxuICAgICAgY2F0YVxuICAgIH07XG5cbiAgICBjb25zdCBpblBhcmVudCA9IChwYXJlbnQsIGNoaWxkcmVuLCBlbGVtZW50LCBpbmRleCkgPT4gKHtcbiAgICAgIHBhcmVudCxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgZWxlbWVudCxcbiAgICAgIGluZGV4XG4gICAgfSk7XG4gICAgY29uc3QgaW5kZXhJblBhcmVudCA9IGVsZW1lbnQgPT4gcGFyZW50KGVsZW1lbnQpLmJpbmQocGFyZW50ID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gY2hpbGRyZW4kMihwYXJlbnQpO1xuICAgICAgcmV0dXJuIGluZGV4T2YoY2hpbGRyZW4sIGVsZW1lbnQpLm1hcChpbmRleCA9PiBpblBhcmVudChwYXJlbnQsIGNoaWxkcmVuLCBlbGVtZW50LCBpbmRleCkpO1xuICAgIH0pO1xuICAgIGNvbnN0IGluZGV4T2YgPSAoZWxlbWVudHMsIGVsZW1lbnQpID0+IGZpbmRJbmRleChlbGVtZW50cywgY3VycnkoZXEkMSwgZWxlbWVudCkpO1xuXG4gICAgY29uc3QgaXNCciA9IGlzVGFnKCdicicpO1xuICAgIGNvbnN0IGdhdGhlcmVyID0gKGNhbmQsIGdhdGhlciwgaXNSb290KSA9PiB7XG4gICAgICByZXR1cm4gZ2F0aGVyKGNhbmQsIGlzUm9vdCkuYmluZCh0YXJnZXQgPT4ge1xuICAgICAgICByZXR1cm4gaXNUZXh0KHRhcmdldCkgJiYgZ2V0JDYodGFyZ2V0KS50cmltKCkubGVuZ3RoID09PSAwID8gZ2F0aGVyZXIodGFyZ2V0LCBnYXRoZXIsIGlzUm9vdCkgOiBPcHRpb25hbC5zb21lKHRhcmdldCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZUJyID0gKGlzUm9vdCwgZWxlbWVudCwgZGlyZWN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gZGlyZWN0aW9uLnRyYXZlcnNlKGVsZW1lbnQpLm9yVGh1bmsoKCkgPT4ge1xuICAgICAgICByZXR1cm4gZ2F0aGVyZXIoZWxlbWVudCwgZGlyZWN0aW9uLmdhdGhlciwgaXNSb290KTtcbiAgICAgIH0pLm1hcChkaXJlY3Rpb24ucmVsYXRpdmUpO1xuICAgIH07XG4gICAgY29uc3QgZmluZEJyID0gKGVsZW1lbnQsIG9mZnNldCkgPT4ge1xuICAgICAgcmV0dXJuIGNoaWxkJDIoZWxlbWVudCwgb2Zmc2V0KS5maWx0ZXIoaXNCcikub3JUaHVuaygoKSA9PiB7XG4gICAgICAgIHJldHVybiBjaGlsZCQyKGVsZW1lbnQsIG9mZnNldCAtIDEpLmZpbHRlcihpc0JyKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlUGFyZW50ID0gKGlzUm9vdCwgZWxlbWVudCwgb2Zmc2V0LCBkaXJlY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiBmaW5kQnIoZWxlbWVudCwgb2Zmc2V0KS5iaW5kKGJyID0+IHtcbiAgICAgICAgcmV0dXJuIGRpcmVjdGlvbi50cmF2ZXJzZShicikuZm9sZCgoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGdhdGhlcmVyKGJyLCBkaXJlY3Rpb24uZ2F0aGVyLCBpc1Jvb3QpLm1hcChkaXJlY3Rpb24ucmVsYXRpdmUpO1xuICAgICAgICB9LCBhZGphY2VudCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGluZGV4SW5QYXJlbnQoYWRqYWNlbnQpLm1hcChpbmZvID0+IHtcbiAgICAgICAgICAgIHJldHVybiBTaXR1Lm9uKGluZm8ucGFyZW50LCBpbmZvLmluZGV4KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHRyeUJyID0gKGlzUm9vdCwgZWxlbWVudCwgb2Zmc2V0LCBkaXJlY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGlzQnIoZWxlbWVudCkgPyBoYW5kbGVCcihpc1Jvb3QsIGVsZW1lbnQsIGRpcmVjdGlvbikgOiBoYW5kbGVQYXJlbnQoaXNSb290LCBlbGVtZW50LCBvZmZzZXQsIGRpcmVjdGlvbik7XG4gICAgICByZXR1cm4gdGFyZ2V0Lm1hcCh0Z3QgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXJ0OiB0Z3QsXG4gICAgICAgICAgZmluaXNoOiB0Z3RcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcHJvY2VzcyA9IGFuYWx5c2lzID0+IHtcbiAgICAgIHJldHVybiBCZWZvcmVBZnRlci5jYXRhKGFuYWx5c2lzLCBfbWVzc2FnZSA9PiB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9LCAoKSA9PiB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9LCBjZWxsID0+IHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUocG9pbnQoY2VsbCwgMCkpO1xuICAgICAgfSwgY2VsbCA9PiB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHBvaW50KGNlbGwsIGdldEVuZChjZWxsKSkpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG1vdmVEb3duID0gKGNhcmV0LCBhbW91bnQpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IGNhcmV0LmxlZnQsXG4gICAgICAgIHRvcDogY2FyZXQudG9wICsgYW1vdW50LFxuICAgICAgICByaWdodDogY2FyZXQucmlnaHQsXG4gICAgICAgIGJvdHRvbTogY2FyZXQuYm90dG9tICsgYW1vdW50XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgbW92ZVVwID0gKGNhcmV0LCBhbW91bnQpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IGNhcmV0LmxlZnQsXG4gICAgICAgIHRvcDogY2FyZXQudG9wIC0gYW1vdW50LFxuICAgICAgICByaWdodDogY2FyZXQucmlnaHQsXG4gICAgICAgIGJvdHRvbTogY2FyZXQuYm90dG9tIC0gYW1vdW50XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgdHJhbnNsYXRlID0gKGNhcmV0LCB4RGVsdGEsIHlEZWx0YSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdDogY2FyZXQubGVmdCArIHhEZWx0YSxcbiAgICAgICAgdG9wOiBjYXJldC50b3AgKyB5RGVsdGEsXG4gICAgICAgIHJpZ2h0OiBjYXJldC5yaWdodCArIHhEZWx0YSxcbiAgICAgICAgYm90dG9tOiBjYXJldC5ib3R0b20gKyB5RGVsdGFcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBnZXRUb3AgPSBjYXJldCA9PiB7XG4gICAgICByZXR1cm4gY2FyZXQudG9wO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Qm90dG9tID0gY2FyZXQgPT4ge1xuICAgICAgcmV0dXJuIGNhcmV0LmJvdHRvbTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0UGFydGlhbEJveCA9IChicmlkZ2UsIGVsZW1lbnQsIG9mZnNldCkgPT4ge1xuICAgICAgaWYgKG9mZnNldCA+PSAwICYmIG9mZnNldCA8IGdldEVuZChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gYnJpZGdlLmdldFJhbmdlZFJlY3QoZWxlbWVudCwgb2Zmc2V0LCBlbGVtZW50LCBvZmZzZXQgKyAxKTtcbiAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ID4gMCkge1xuICAgICAgICByZXR1cm4gYnJpZGdlLmdldFJhbmdlZFJlY3QoZWxlbWVudCwgb2Zmc2V0IC0gMSwgZWxlbWVudCwgb2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCB0b0NhcmV0ID0gcmVjdCA9PiAoe1xuICAgICAgbGVmdDogcmVjdC5sZWZ0LFxuICAgICAgdG9wOiByZWN0LnRvcCxcbiAgICAgIHJpZ2h0OiByZWN0LnJpZ2h0LFxuICAgICAgYm90dG9tOiByZWN0LmJvdHRvbVxuICAgIH0pO1xuICAgIGNvbnN0IGdldEVsZW1Cb3ggPSAoYnJpZGdlLCBlbGVtZW50KSA9PiB7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShicmlkZ2UuZ2V0UmVjdChlbGVtZW50KSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRCb3hBdCA9IChicmlkZ2UsIGVsZW1lbnQsIG9mZnNldCkgPT4ge1xuICAgICAgaWYgKGlzRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZ2V0RWxlbUJveChicmlkZ2UsIGVsZW1lbnQpLm1hcCh0b0NhcmV0KTtcbiAgICAgIH0gZWxzZSBpZiAoaXNUZXh0KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBnZXRQYXJ0aWFsQm94KGJyaWRnZSwgZWxlbWVudCwgb2Zmc2V0KS5tYXAodG9DYXJldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ2V0RW50aXJlQm94ID0gKGJyaWRnZSwgZWxlbWVudCkgPT4ge1xuICAgICAgaWYgKGlzRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZ2V0RWxlbUJveChicmlkZ2UsIGVsZW1lbnQpLm1hcCh0b0NhcmV0KTtcbiAgICAgIH0gZWxzZSBpZiAoaXNUZXh0KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBicmlkZ2UuZ2V0UmFuZ2VkUmVjdChlbGVtZW50LCAwLCBlbGVtZW50LCBnZXRFbmQoZWxlbWVudCkpLm1hcCh0b0NhcmV0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IEpVTVBfU0laRSA9IDU7XG4gICAgY29uc3QgTlVNX1JFVFJJRVMgPSAxMDA7XG4gICAgY29uc3QgYWR0JDEgPSBBZHQuZ2VuZXJhdGUoW1xuICAgICAgeyBub25lOiBbXSB9LFxuICAgICAgeyByZXRyeTogWydjYXJldCddIH1cbiAgICBdKTtcbiAgICBjb25zdCBpc091dHNpZGUgPSAoY2FyZXQsIGJveCkgPT4ge1xuICAgICAgcmV0dXJuIGNhcmV0LmxlZnQgPCBib3gubGVmdCB8fCBNYXRoLmFicyhib3gucmlnaHQgLSBjYXJldC5sZWZ0KSA8IDEgfHwgY2FyZXQubGVmdCA+IGJveC5yaWdodDtcbiAgICB9O1xuICAgIGNvbnN0IGluT3V0c2lkZUJsb2NrID0gKGJyaWRnZSwgZWxlbWVudCwgY2FyZXQpID0+IHtcbiAgICAgIHJldHVybiBjbG9zZXN0JDIoZWxlbWVudCwgaXNCbG9jaykuZm9sZChuZXZlciwgY2VsbCA9PiB7XG4gICAgICAgIHJldHVybiBnZXRFbnRpcmVCb3goYnJpZGdlLCBjZWxsKS5leGlzdHMoYm94ID0+IHtcbiAgICAgICAgICByZXR1cm4gaXNPdXRzaWRlKGNhcmV0LCBib3gpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYWRqdXN0RG93biA9IChicmlkZ2UsIGVsZW1lbnQsIGd1ZXNzQm94LCBvcmlnaW5hbCwgY2FyZXQpID0+IHtcbiAgICAgIGNvbnN0IGxvd2VyQ2FyZXQgPSBtb3ZlRG93bihjYXJldCwgSlVNUF9TSVpFKTtcbiAgICAgIGlmIChNYXRoLmFicyhndWVzc0JveC5ib3R0b20gLSBvcmlnaW5hbC5ib3R0b20pIDwgMSkge1xuICAgICAgICByZXR1cm4gYWR0JDEucmV0cnkobG93ZXJDYXJldCk7XG4gICAgICB9IGVsc2UgaWYgKGd1ZXNzQm94LnRvcCA+IGNhcmV0LmJvdHRvbSkge1xuICAgICAgICByZXR1cm4gYWR0JDEucmV0cnkobG93ZXJDYXJldCk7XG4gICAgICB9IGVsc2UgaWYgKGd1ZXNzQm94LnRvcCA9PT0gY2FyZXQuYm90dG9tKSB7XG4gICAgICAgIHJldHVybiBhZHQkMS5yZXRyeShtb3ZlRG93bihjYXJldCwgMSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGluT3V0c2lkZUJsb2NrKGJyaWRnZSwgZWxlbWVudCwgY2FyZXQpID8gYWR0JDEucmV0cnkodHJhbnNsYXRlKGxvd2VyQ2FyZXQsIEpVTVBfU0laRSwgMCkpIDogYWR0JDEubm9uZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYWRqdXN0VXAgPSAoYnJpZGdlLCBlbGVtZW50LCBndWVzc0JveCwgb3JpZ2luYWwsIGNhcmV0KSA9PiB7XG4gICAgICBjb25zdCBoaWdoZXJDYXJldCA9IG1vdmVVcChjYXJldCwgSlVNUF9TSVpFKTtcbiAgICAgIGlmIChNYXRoLmFicyhndWVzc0JveC50b3AgLSBvcmlnaW5hbC50b3ApIDwgMSkge1xuICAgICAgICByZXR1cm4gYWR0JDEucmV0cnkoaGlnaGVyQ2FyZXQpO1xuICAgICAgfSBlbHNlIGlmIChndWVzc0JveC5ib3R0b20gPCBjYXJldC50b3ApIHtcbiAgICAgICAgcmV0dXJuIGFkdCQxLnJldHJ5KGhpZ2hlckNhcmV0KTtcbiAgICAgIH0gZWxzZSBpZiAoZ3Vlc3NCb3guYm90dG9tID09PSBjYXJldC50b3ApIHtcbiAgICAgICAgcmV0dXJuIGFkdCQxLnJldHJ5KG1vdmVVcChjYXJldCwgMSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGluT3V0c2lkZUJsb2NrKGJyaWRnZSwgZWxlbWVudCwgY2FyZXQpID8gYWR0JDEucmV0cnkodHJhbnNsYXRlKGhpZ2hlckNhcmV0LCBKVU1QX1NJWkUsIDApKSA6IGFkdCQxLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHVwTW92ZW1lbnQgPSB7XG4gICAgICBwb2ludDogZ2V0VG9wLFxuICAgICAgYWRqdXN0ZXI6IGFkanVzdFVwLFxuICAgICAgbW92ZTogbW92ZVVwLFxuICAgICAgZ2F0aGVyOiBiZWZvcmVcbiAgICB9O1xuICAgIGNvbnN0IGRvd25Nb3ZlbWVudCA9IHtcbiAgICAgIHBvaW50OiBnZXRCb3R0b20sXG4gICAgICBhZGp1c3RlcjogYWRqdXN0RG93bixcbiAgICAgIG1vdmU6IG1vdmVEb3duLFxuICAgICAgZ2F0aGVyOiBhZnRlciQxXG4gICAgfTtcbiAgICBjb25zdCBpc0F0VGFibGUgPSAoYnJpZGdlLCB4LCB5KSA9PiB7XG4gICAgICByZXR1cm4gYnJpZGdlLmVsZW1lbnRGcm9tUG9pbnQoeCwgeSkuZmlsdGVyKGVsbSA9PiB7XG4gICAgICAgIHJldHVybiBuYW1lKGVsbSkgPT09ICd0YWJsZSc7XG4gICAgICB9KS5pc1NvbWUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGFkanVzdEZvclRhYmxlID0gKGJyaWRnZSwgbW92ZW1lbnQsIG9yaWdpbmFsLCBjYXJldCwgbnVtUmV0cmllcykgPT4ge1xuICAgICAgcmV0dXJuIGFkanVzdFRpbChicmlkZ2UsIG1vdmVtZW50LCBvcmlnaW5hbCwgbW92ZW1lbnQubW92ZShjYXJldCwgSlVNUF9TSVpFKSwgbnVtUmV0cmllcyk7XG4gICAgfTtcbiAgICBjb25zdCBhZGp1c3RUaWwgPSAoYnJpZGdlLCBtb3ZlbWVudCwgb3JpZ2luYWwsIGNhcmV0LCBudW1SZXRyaWVzKSA9PiB7XG4gICAgICBpZiAobnVtUmV0cmllcyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShjYXJldCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNBdFRhYmxlKGJyaWRnZSwgY2FyZXQubGVmdCwgbW92ZW1lbnQucG9pbnQoY2FyZXQpKSkge1xuICAgICAgICByZXR1cm4gYWRqdXN0Rm9yVGFibGUoYnJpZGdlLCBtb3ZlbWVudCwgb3JpZ2luYWwsIGNhcmV0LCBudW1SZXRyaWVzIC0gMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYnJpZGdlLnNpdHVzRnJvbVBvaW50KGNhcmV0LmxlZnQsIG1vdmVtZW50LnBvaW50KGNhcmV0KSkuYmluZChndWVzcyA9PiB7XG4gICAgICAgIHJldHVybiBndWVzcy5zdGFydC5mb2xkKE9wdGlvbmFsLm5vbmUsIGVsZW1lbnQgPT4ge1xuICAgICAgICAgIHJldHVybiBnZXRFbnRpcmVCb3goYnJpZGdlLCBlbGVtZW50KS5iaW5kKGd1ZXNzQm94ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBtb3ZlbWVudC5hZGp1c3RlcihicmlkZ2UsIGVsZW1lbnQsIGd1ZXNzQm94LCBvcmlnaW5hbCwgY2FyZXQpLmZvbGQoT3B0aW9uYWwubm9uZSwgbmV3Q2FyZXQgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gYWRqdXN0VGlsKGJyaWRnZSwgbW92ZW1lbnQsIG9yaWdpbmFsLCBuZXdDYXJldCwgbnVtUmV0cmllcyAtIDEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkub3JUaHVuaygoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShjYXJldCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIE9wdGlvbmFsLm5vbmUpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBjaGVja1Njcm9sbCA9IChtb3ZlbWVudCwgYWRqdXN0ZWQsIGJyaWRnZSkgPT4ge1xuICAgICAgaWYgKG1vdmVtZW50LnBvaW50KGFkanVzdGVkKSA+IGJyaWRnZS5nZXRJbm5lckhlaWdodCgpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKG1vdmVtZW50LnBvaW50KGFkanVzdGVkKSAtIGJyaWRnZS5nZXRJbm5lckhlaWdodCgpKTtcbiAgICAgIH0gZWxzZSBpZiAobW92ZW1lbnQucG9pbnQoYWRqdXN0ZWQpIDwgMCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSgtbW92ZW1lbnQucG9pbnQoYWRqdXN0ZWQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZXRyeSA9IChtb3ZlbWVudCwgYnJpZGdlLCBjYXJldCkgPT4ge1xuICAgICAgY29uc3QgbW92ZWQgPSBtb3ZlbWVudC5tb3ZlKGNhcmV0LCBKVU1QX1NJWkUpO1xuICAgICAgY29uc3QgYWRqdXN0ZWQgPSBhZGp1c3RUaWwoYnJpZGdlLCBtb3ZlbWVudCwgY2FyZXQsIG1vdmVkLCBOVU1fUkVUUklFUykuZ2V0T3IobW92ZWQpO1xuICAgICAgcmV0dXJuIGNoZWNrU2Nyb2xsKG1vdmVtZW50LCBhZGp1c3RlZCwgYnJpZGdlKS5mb2xkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGJyaWRnZS5zaXR1c0Zyb21Qb2ludChhZGp1c3RlZC5sZWZ0LCBtb3ZlbWVudC5wb2ludChhZGp1c3RlZCkpO1xuICAgICAgfSwgZGVsdGEgPT4ge1xuICAgICAgICBicmlkZ2Uuc2Nyb2xsQnkoMCwgZGVsdGEpO1xuICAgICAgICByZXR1cm4gYnJpZGdlLnNpdHVzRnJvbVBvaW50KGFkanVzdGVkLmxlZnQsIG1vdmVtZW50LnBvaW50KGFkanVzdGVkKSAtIGRlbHRhKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgUmV0cmllcyA9IHtcbiAgICAgIHRyeVVwOiBjdXJyeShyZXRyeSwgdXBNb3ZlbWVudCksXG4gICAgICB0cnlEb3duOiBjdXJyeShyZXRyeSwgZG93bk1vdmVtZW50KSxcbiAgICAgIGdldEp1bXBTaXplOiBjb25zdGFudChKVU1QX1NJWkUpXG4gICAgfTtcblxuICAgIGNvbnN0IE1BWF9SRVRSSUVTID0gMjA7XG4gICAgY29uc3QgZmluZFNwb3QgPSAoYnJpZGdlLCBpc1Jvb3QsIGRpcmVjdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIGJyaWRnZS5nZXRTZWxlY3Rpb24oKS5iaW5kKHNlbCA9PiB7XG4gICAgICAgIHJldHVybiB0cnlCcihpc1Jvb3QsIHNlbC5maW5pc2gsIHNlbC5mb2Zmc2V0LCBkaXJlY3Rpb24pLmZvbGQoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHBvaW50KHNlbC5maW5pc2gsIHNlbC5mb2Zmc2V0KSk7XG4gICAgICAgIH0sIGJyTmVpZ2hib3VyID0+IHtcbiAgICAgICAgICBjb25zdCByYW5nZSA9IGJyaWRnZS5mcm9tU2l0dXMoYnJOZWlnaGJvdXIpO1xuICAgICAgICAgIGNvbnN0IGFuYWx5c2lzID0gQmVmb3JlQWZ0ZXIudmVyaWZ5KGJyaWRnZSwgc2VsLmZpbmlzaCwgc2VsLmZvZmZzZXQsIHJhbmdlLmZpbmlzaCwgcmFuZ2UuZm9mZnNldCwgZGlyZWN0aW9uLmZhaWx1cmUsIGlzUm9vdCk7XG4gICAgICAgICAgcmV0dXJuIHByb2Nlc3MoYW5hbHlzaXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2NhbiA9IChicmlkZ2UsIGlzUm9vdCwgZWxlbWVudCwgb2Zmc2V0LCBkaXJlY3Rpb24sIG51bVJldHJpZXMpID0+IHtcbiAgICAgIGlmIChudW1SZXRyaWVzID09PSAwKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ5Q3Vyc29yKGJyaWRnZSwgaXNSb290LCBlbGVtZW50LCBvZmZzZXQsIGRpcmVjdGlvbikuYmluZChzaXR1cyA9PiB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gYnJpZGdlLmZyb21TaXR1cyhzaXR1cyk7XG4gICAgICAgIGNvbnN0IGFuYWx5c2lzID0gQmVmb3JlQWZ0ZXIudmVyaWZ5KGJyaWRnZSwgZWxlbWVudCwgb2Zmc2V0LCByYW5nZS5maW5pc2gsIHJhbmdlLmZvZmZzZXQsIGRpcmVjdGlvbi5mYWlsdXJlLCBpc1Jvb3QpO1xuICAgICAgICByZXR1cm4gQmVmb3JlQWZ0ZXIuY2F0YShhbmFseXNpcywgKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShzaXR1cyk7XG4gICAgICAgIH0sIGNlbGwgPT4ge1xuICAgICAgICAgIGlmIChlcSQxKGVsZW1lbnQsIGNlbGwpICYmIG9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRyeUFnYWluKGJyaWRnZSwgZWxlbWVudCwgb2Zmc2V0LCBtb3ZlVXAsIGRpcmVjdGlvbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzY2FuKGJyaWRnZSwgaXNSb290LCBjZWxsLCAwLCBkaXJlY3Rpb24sIG51bVJldHJpZXMgLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIGNlbGwgPT4ge1xuICAgICAgICAgIGlmIChlcSQxKGVsZW1lbnQsIGNlbGwpICYmIG9mZnNldCA9PT0gZ2V0RW5kKGNlbGwpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ5QWdhaW4oYnJpZGdlLCBlbGVtZW50LCBvZmZzZXQsIG1vdmVEb3duLCBkaXJlY3Rpb24pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc2NhbihicmlkZ2UsIGlzUm9vdCwgY2VsbCwgZ2V0RW5kKGNlbGwpLCBkaXJlY3Rpb24sIG51bVJldHJpZXMgLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCB0cnlBZ2FpbiA9IChicmlkZ2UsIGVsZW1lbnQsIG9mZnNldCwgbW92ZSwgZGlyZWN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gZ2V0Qm94QXQoYnJpZGdlLCBlbGVtZW50LCBvZmZzZXQpLmJpbmQoYm94ID0+IHtcbiAgICAgICAgcmV0dXJuIHRyeUF0KGJyaWRnZSwgZGlyZWN0aW9uLCBtb3ZlKGJveCwgUmV0cmllcy5nZXRKdW1wU2l6ZSgpKSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHRyeUF0ID0gKGJyaWRnZSwgZGlyZWN0aW9uLCBib3gpID0+IHtcbiAgICAgIGNvbnN0IGJyb3dzZXIgPSBkZXRlY3QkMigpLmJyb3dzZXI7XG4gICAgICBpZiAoYnJvd3Nlci5pc0Nocm9taXVtKCkgfHwgYnJvd3Nlci5pc1NhZmFyaSgpIHx8IGJyb3dzZXIuaXNGaXJlZm94KCkpIHtcbiAgICAgICAgcmV0dXJuIGRpcmVjdGlvbi5yZXRyeShicmlkZ2UsIGJveCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdHJ5Q3Vyc29yID0gKGJyaWRnZSwgaXNSb290LCBlbGVtZW50LCBvZmZzZXQsIGRpcmVjdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIGdldEJveEF0KGJyaWRnZSwgZWxlbWVudCwgb2Zmc2V0KS5iaW5kKGJveCA9PiB7XG4gICAgICAgIHJldHVybiB0cnlBdChicmlkZ2UsIGRpcmVjdGlvbiwgYm94KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlJDEgPSAoYnJpZGdlLCBpc1Jvb3QsIGRpcmVjdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIGZpbmRTcG90KGJyaWRnZSwgaXNSb290LCBkaXJlY3Rpb24pLmJpbmQoc3BvdCA9PiB7XG4gICAgICAgIHJldHVybiBzY2FuKGJyaWRnZSwgaXNSb290LCBzcG90LmVsZW1lbnQsIHNwb3Qub2Zmc2V0LCBkaXJlY3Rpb24sIE1BWF9SRVRSSUVTKS5tYXAoYnJpZGdlLmZyb21TaXR1cyk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgaW5TYW1lVGFibGUgPSAoZWxlbSwgdGFibGUpID0+IHtcbiAgICAgIHJldHVybiBhbmNlc3RvcihlbGVtLCBlID0+IHtcbiAgICAgICAgcmV0dXJuIHBhcmVudChlKS5leGlzdHMocCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVxJDEocCwgdGFibGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2ltdWxhdGUgPSAoYnJpZGdlLCBpc1Jvb3QsIGRpcmVjdGlvbiwgaW5pdGlhbCwgYW5jaG9yKSA9PiB7XG4gICAgICByZXR1cm4gY2xvc2VzdCQxKGluaXRpYWwsICd0ZCx0aCcsIGlzUm9vdCkuYmluZChzdGFydCA9PiB7XG4gICAgICAgIHJldHVybiBjbG9zZXN0JDEoc3RhcnQsICd0YWJsZScsIGlzUm9vdCkuYmluZCh0YWJsZSA9PiB7XG4gICAgICAgICAgaWYgKCFpblNhbWVUYWJsZShhbmNob3IsIHRhYmxlKSkge1xuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZSQxKGJyaWRnZSwgaXNSb290LCBkaXJlY3Rpb24pLmJpbmQocmFuZ2UgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3QkMShyYW5nZS5maW5pc2gsICd0ZCx0aCcsIGlzUm9vdCkubWFwKGZpbmlzaCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgICAgICAgZmluaXNoLFxuICAgICAgICAgICAgICAgIHJhbmdlXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG5hdmlnYXRlID0gKGJyaWRnZSwgaXNSb290LCBkaXJlY3Rpb24sIGluaXRpYWwsIGFuY2hvciwgcHJlY2hlY2spID0+IHtcbiAgICAgIHJldHVybiBwcmVjaGVjayhpbml0aWFsLCBpc1Jvb3QpLm9yVGh1bmsoKCkgPT4ge1xuICAgICAgICByZXR1cm4gc2ltdWxhdGUoYnJpZGdlLCBpc1Jvb3QsIGRpcmVjdGlvbiwgaW5pdGlhbCwgYW5jaG9yKS5tYXAoaW5mbyA9PiB7XG4gICAgICAgICAgY29uc3QgcmFuZ2UgPSBpbmZvLnJhbmdlO1xuICAgICAgICAgIHJldHVybiBSZXNwb25zZS5jcmVhdGUoT3B0aW9uYWwuc29tZShtYWtlU2l0dXMocmFuZ2Uuc3RhcnQsIHJhbmdlLnNvZmZzZXQsIHJhbmdlLmZpbmlzaCwgcmFuZ2UuZm9mZnNldCkpLCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcnN0VXBDaGVjayA9IChpbml0aWFsLCBpc1Jvb3QpID0+IHtcbiAgICAgIHJldHVybiBjbG9zZXN0JDEoaW5pdGlhbCwgJ3RyJywgaXNSb290KS5iaW5kKHN0YXJ0Um93ID0+IHtcbiAgICAgICAgcmV0dXJuIGNsb3Nlc3QkMShzdGFydFJvdywgJ3RhYmxlJywgaXNSb290KS5iaW5kKHRhYmxlID0+IHtcbiAgICAgICAgICBjb25zdCByb3dzID0gZGVzY2VuZGFudHModGFibGUsICd0cicpO1xuICAgICAgICAgIGlmIChlcSQxKHN0YXJ0Um93LCByb3dzWzBdKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNlZWtMZWZ0KHRhYmxlLCBlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGxhc3QkMShlbGVtZW50KS5pc1NvbWUoKTtcbiAgICAgICAgICAgIH0sIGlzUm9vdCkubWFwKGxhc3QgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBsYXN0T2Zmc2V0ID0gZ2V0RW5kKGxhc3QpO1xuICAgICAgICAgICAgICByZXR1cm4gUmVzcG9uc2UuY3JlYXRlKE9wdGlvbmFsLnNvbWUobWFrZVNpdHVzKGxhc3QsIGxhc3RPZmZzZXQsIGxhc3QsIGxhc3RPZmZzZXQpKSwgdHJ1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBsYXN0RG93bkNoZWNrID0gKGluaXRpYWwsIGlzUm9vdCkgPT4ge1xuICAgICAgcmV0dXJuIGNsb3Nlc3QkMShpbml0aWFsLCAndHInLCBpc1Jvb3QpLmJpbmQoc3RhcnRSb3cgPT4ge1xuICAgICAgICByZXR1cm4gY2xvc2VzdCQxKHN0YXJ0Um93LCAndGFibGUnLCBpc1Jvb3QpLmJpbmQodGFibGUgPT4ge1xuICAgICAgICAgIGNvbnN0IHJvd3MgPSBkZXNjZW5kYW50cyh0YWJsZSwgJ3RyJyk7XG4gICAgICAgICAgaWYgKGVxJDEoc3RhcnRSb3csIHJvd3Nbcm93cy5sZW5ndGggLSAxXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWVrUmlnaHQodGFibGUsIGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gZmlyc3QoZWxlbWVudCkuaXNTb21lKCk7XG4gICAgICAgICAgICB9LCBpc1Jvb3QpLm1hcChmaXJzdCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBSZXNwb25zZS5jcmVhdGUoT3B0aW9uYWwuc29tZShtYWtlU2l0dXMoZmlyc3QsIDAsIGZpcnN0LCAwKSksIHRydWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2VsZWN0ID0gKGJyaWRnZSwgY29udGFpbmVyLCBpc1Jvb3QsIGRpcmVjdGlvbiwgaW5pdGlhbCwgYW5jaG9yLCBzZWxlY3RSYW5nZSkgPT4ge1xuICAgICAgcmV0dXJuIHNpbXVsYXRlKGJyaWRnZSwgaXNSb290LCBkaXJlY3Rpb24sIGluaXRpYWwsIGFuY2hvcikuYmluZChpbmZvID0+IHtcbiAgICAgICAgcmV0dXJuIGRldGVjdChjb250YWluZXIsIGlzUm9vdCwgaW5mby5zdGFydCwgaW5mby5maW5pc2gsIHNlbGVjdFJhbmdlKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBDZWxsID0gaW5pdGlhbCA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBpbml0aWFsO1xuICAgICAgY29uc3QgZ2V0ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0ID0gdiA9PiB7XG4gICAgICAgIHZhbHVlID0gdjtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBnZXQsXG4gICAgICAgIHNldFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2luZ2xldG9uID0gZG9SZXZva2UgPT4ge1xuICAgICAgY29uc3Qgc3ViamVjdCA9IENlbGwoT3B0aW9uYWwubm9uZSgpKTtcbiAgICAgIGNvbnN0IHJldm9rZSA9ICgpID0+IHN1YmplY3QuZ2V0KCkuZWFjaChkb1Jldm9rZSk7XG4gICAgICBjb25zdCBjbGVhciA9ICgpID0+IHtcbiAgICAgICAgcmV2b2tlKCk7XG4gICAgICAgIHN1YmplY3Quc2V0KE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNTZXQgPSAoKSA9PiBzdWJqZWN0LmdldCgpLmlzU29tZSgpO1xuICAgICAgY29uc3QgZ2V0ID0gKCkgPT4gc3ViamVjdC5nZXQoKTtcbiAgICAgIGNvbnN0IHNldCA9IHMgPT4ge1xuICAgICAgICByZXZva2UoKTtcbiAgICAgICAgc3ViamVjdC5zZXQoT3B0aW9uYWwuc29tZShzKSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xlYXIsXG4gICAgICAgIGlzU2V0LFxuICAgICAgICBnZXQsXG4gICAgICAgIHNldFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHZhbHVlID0gKCkgPT4ge1xuICAgICAgY29uc3Qgc3ViamVjdCA9IHNpbmdsZXRvbihub29wKTtcbiAgICAgIGNvbnN0IG9uID0gZiA9PiBzdWJqZWN0LmdldCgpLmVhY2goZik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdWJqZWN0LFxuICAgICAgICBvblxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmluZENlbGwgPSAodGFyZ2V0LCBpc1Jvb3QpID0+IGNsb3Nlc3QkMSh0YXJnZXQsICd0ZCx0aCcsIGlzUm9vdCk7XG4gICAgY29uc3QgaXNJbkVkaXRhYmxlQ29udGV4dCA9IGNlbGwgPT4gcGFyZW50RWxlbWVudChjZWxsKS5leGlzdHMoaXNFZGl0YWJsZSQxKTtcbiAgICBjb25zdCBNb3VzZVNlbGVjdGlvbiA9IChicmlkZ2UsIGNvbnRhaW5lciwgaXNSb290LCBhbm5vdGF0aW9ucykgPT4ge1xuICAgICAgY29uc3QgY3Vyc29yID0gdmFsdWUoKTtcbiAgICAgIGNvbnN0IGNsZWFyc3RhdGUgPSBjdXJzb3IuY2xlYXI7XG4gICAgICBjb25zdCBhcHBseVNlbGVjdGlvbiA9IGV2ZW50ID0+IHtcbiAgICAgICAgY3Vyc29yLm9uKHN0YXJ0ID0+IHtcbiAgICAgICAgICBhbm5vdGF0aW9ucy5jbGVhckJlZm9yZVVwZGF0ZShjb250YWluZXIpO1xuICAgICAgICAgIGZpbmRDZWxsKGV2ZW50LnRhcmdldCwgaXNSb290KS5lYWNoKGZpbmlzaCA9PiB7XG4gICAgICAgICAgICBpZGVudGlmeShzdGFydCwgZmluaXNoLCBpc1Jvb3QpLmVhY2goY2VsbFNlbCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGJveGVzID0gY2VsbFNlbC5ib3hlcy5nZXRPcihbXSk7XG4gICAgICAgICAgICAgIGlmIChib3hlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaW5nbGVDZWxsID0gYm94ZXNbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgaXNOb25FZGl0YWJsZUNlbGwgPSBnZXRSYXcoc2luZ2xlQ2VsbCkgPT09ICdmYWxzZSc7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNDZWxsQ2xvc2VzdENvbnRlbnRFZGl0YWJsZSA9IGlzKGNsb3Nlc3QoZXZlbnQudGFyZ2V0KSwgc2luZ2xlQ2VsbCwgZXEkMSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTm9uRWRpdGFibGVDZWxsICYmIGlzQ2VsbENsb3Nlc3RDb250ZW50RWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zLnNlbGVjdFJhbmdlKGNvbnRhaW5lciwgYm94ZXMsIHNpbmdsZUNlbGwsIHNpbmdsZUNlbGwpO1xuICAgICAgICAgICAgICAgICAgYnJpZGdlLnNlbGVjdENvbnRlbnRzKHNpbmdsZUNlbGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChib3hlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbnMuc2VsZWN0UmFuZ2UoY29udGFpbmVyLCBib3hlcywgY2VsbFNlbC5zdGFydCwgY2VsbFNlbC5maW5pc2gpO1xuICAgICAgICAgICAgICAgIGJyaWRnZS5zZWxlY3RDb250ZW50cyhmaW5pc2gpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgbW91c2Vkb3duID0gZXZlbnQgPT4ge1xuICAgICAgICBhbm5vdGF0aW9ucy5jbGVhcihjb250YWluZXIpO1xuICAgICAgICBmaW5kQ2VsbChldmVudC50YXJnZXQsIGlzUm9vdCkuZmlsdGVyKGlzSW5FZGl0YWJsZUNvbnRleHQpLmVhY2goY3Vyc29yLnNldCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgbW91c2VvdmVyID0gZXZlbnQgPT4ge1xuICAgICAgICBhcHBseVNlbGVjdGlvbihldmVudCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgbW91c2V1cCA9IGV2ZW50ID0+IHtcbiAgICAgICAgYXBwbHlTZWxlY3Rpb24oZXZlbnQpO1xuICAgICAgICBjbGVhcnN0YXRlKCk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xlYXJzdGF0ZSxcbiAgICAgICAgbW91c2Vkb3duLFxuICAgICAgICBtb3VzZW92ZXIsXG4gICAgICAgIG1vdXNldXBcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGRvd24gPSB7XG4gICAgICB0cmF2ZXJzZTogbmV4dFNpYmxpbmcsXG4gICAgICBnYXRoZXI6IGFmdGVyJDEsXG4gICAgICByZWxhdGl2ZTogU2l0dS5iZWZvcmUsXG4gICAgICByZXRyeTogUmV0cmllcy50cnlEb3duLFxuICAgICAgZmFpbHVyZTogQmVmb3JlQWZ0ZXIuZmFpbGVkRG93blxuICAgIH07XG4gICAgY29uc3QgdXAgPSB7XG4gICAgICB0cmF2ZXJzZTogcHJldlNpYmxpbmcsXG4gICAgICBnYXRoZXI6IGJlZm9yZSxcbiAgICAgIHJlbGF0aXZlOiBTaXR1LmJlZm9yZSxcbiAgICAgIHJldHJ5OiBSZXRyaWVzLnRyeVVwLFxuICAgICAgZmFpbHVyZTogQmVmb3JlQWZ0ZXIuZmFpbGVkVXBcbiAgICB9O1xuXG4gICAgY29uc3QgaXNLZXkgPSBrZXkgPT4ge1xuICAgICAgcmV0dXJuIGtleWNvZGUgPT4ge1xuICAgICAgICByZXR1cm4ga2V5Y29kZSA9PT0ga2V5O1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGlzVXAgPSBpc0tleSgzOCk7XG4gICAgY29uc3QgaXNEb3duID0gaXNLZXkoNDApO1xuICAgIGNvbnN0IGlzTmF2aWdhdGlvbiA9IGtleWNvZGUgPT4ge1xuICAgICAgcmV0dXJuIGtleWNvZGUgPj0gMzcgJiYga2V5Y29kZSA8PSA0MDtcbiAgICB9O1xuICAgIGNvbnN0IGx0ciA9IHtcbiAgICAgIGlzQmFja3dhcmQ6IGlzS2V5KDM3KSxcbiAgICAgIGlzRm9yd2FyZDogaXNLZXkoMzkpXG4gICAgfTtcbiAgICBjb25zdCBydGwgPSB7XG4gICAgICBpc0JhY2t3YXJkOiBpc0tleSgzOSksXG4gICAgICBpc0ZvcndhcmQ6IGlzS2V5KDM3KVxuICAgIH07XG5cbiAgICBjb25zdCBnZXQkMyA9IF9ET0MgPT4ge1xuICAgICAgY29uc3QgZG9jID0gX0RPQyAhPT0gdW5kZWZpbmVkID8gX0RPQy5kb20gOiBkb2N1bWVudDtcbiAgICAgIGNvbnN0IHggPSBkb2MuYm9keS5zY3JvbGxMZWZ0IHx8IGRvYy5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICAgIGNvbnN0IHkgPSBkb2MuYm9keS5zY3JvbGxUb3AgfHwgZG9jLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7XG4gICAgICByZXR1cm4gU3VnYXJQb3NpdGlvbih4LCB5KTtcbiAgICB9O1xuICAgIGNvbnN0IGJ5ID0gKHgsIHksIF9ET0MpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IF9ET0MgIT09IHVuZGVmaW5lZCA/IF9ET0MuZG9tIDogZG9jdW1lbnQ7XG4gICAgICBjb25zdCB3aW4gPSBkb2MuZGVmYXVsdFZpZXc7XG4gICAgICBpZiAod2luKSB7XG4gICAgICAgIHdpbi5zY3JvbGxCeSh4LCB5KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgYWR0ID0gQWR0LmdlbmVyYXRlKFtcbiAgICAgIHsgZG9tUmFuZ2U6IFsncm5nJ10gfSxcbiAgICAgIHtcbiAgICAgICAgcmVsYXRpdmU6IFtcbiAgICAgICAgICAnc3RhcnRTaXR1JyxcbiAgICAgICAgICAnZmluaXNoU2l0dSdcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZXhhY3Q6IFtcbiAgICAgICAgICAnc3RhcnQnLFxuICAgICAgICAgICdzb2Zmc2V0JyxcbiAgICAgICAgICAnZmluaXNoJyxcbiAgICAgICAgICAnZm9mZnNldCdcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0pO1xuICAgIGNvbnN0IGV4YWN0RnJvbVJhbmdlID0gc2ltUmFuZ2UgPT4gYWR0LmV4YWN0KHNpbVJhbmdlLnN0YXJ0LCBzaW1SYW5nZS5zb2Zmc2V0LCBzaW1SYW5nZS5maW5pc2gsIHNpbVJhbmdlLmZvZmZzZXQpO1xuICAgIGNvbnN0IGdldFN0YXJ0ID0gc2VsZWN0aW9uID0+IHNlbGVjdGlvbi5tYXRjaCh7XG4gICAgICBkb21SYW5nZTogcm5nID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJuZy5zdGFydENvbnRhaW5lciksXG4gICAgICByZWxhdGl2ZTogKHN0YXJ0U2l0dSwgX2ZpbmlzaFNpdHUpID0+IFNpdHUuZ2V0U3RhcnQoc3RhcnRTaXR1KSxcbiAgICAgIGV4YWN0OiAoc3RhcnQsIF9zb2Zmc2V0LCBfZmluaXNoLCBfZm9mZnNldCkgPT4gc3RhcnRcbiAgICB9KTtcbiAgICBjb25zdCBkb21SYW5nZSA9IGFkdC5kb21SYW5nZTtcbiAgICBjb25zdCByZWxhdGl2ZSA9IGFkdC5yZWxhdGl2ZTtcbiAgICBjb25zdCBleGFjdCA9IGFkdC5leGFjdDtcbiAgICBjb25zdCBnZXRXaW4gPSBzZWxlY3Rpb24gPT4ge1xuICAgICAgY29uc3Qgc3RhcnQgPSBnZXRTdGFydChzZWxlY3Rpb24pO1xuICAgICAgcmV0dXJuIGRlZmF1bHRWaWV3KHN0YXJ0KTtcbiAgICB9O1xuICAgIGNvbnN0IHJhbmdlID0gU2ltUmFuZ2UuY3JlYXRlO1xuICAgIGNvbnN0IFNpbVNlbGVjdGlvbiA9IHtcbiAgICAgIGRvbVJhbmdlLFxuICAgICAgcmVsYXRpdmUsXG4gICAgICBleGFjdCxcbiAgICAgIGV4YWN0RnJvbVJhbmdlLFxuICAgICAgZ2V0V2luLFxuICAgICAgcmFuZ2VcbiAgICB9O1xuXG4gICAgY29uc3QgY2FyZXRQb3NpdGlvbkZyb21Qb2ludCA9IChkb2MsIHgsIHkpID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbSgoX2IgPSAoX2EgPSBkb2MuZG9tKS5jYXJldFBvc2l0aW9uRnJvbVBvaW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgeCwgeSkpLmJpbmQocG9zID0+IHtcbiAgICAgICAgaWYgKHBvcy5vZmZzZXROb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByID0gZG9jLmRvbS5jcmVhdGVSYW5nZSgpO1xuICAgICAgICByLnNldFN0YXJ0KHBvcy5vZmZzZXROb2RlLCBwb3Mub2Zmc2V0KTtcbiAgICAgICAgci5jb2xsYXBzZSgpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShyKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgY2FyZXRSYW5nZUZyb21Qb2ludCA9IChkb2MsIHgsIHkpID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbSgoX2IgPSAoX2EgPSBkb2MuZG9tKS5jYXJldFJhbmdlRnJvbVBvaW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgeCwgeSkpO1xuICAgIH07XG4gICAgY29uc3QgYXZhaWxhYmxlU2VhcmNoID0gKCgpID0+IHtcbiAgICAgIGlmIChkb2N1bWVudC5jYXJldFBvc2l0aW9uRnJvbVBvaW50KSB7XG4gICAgICAgIHJldHVybiBjYXJldFBvc2l0aW9uRnJvbVBvaW50O1xuICAgICAgfSBlbHNlIGlmIChkb2N1bWVudC5jYXJldFJhbmdlRnJvbVBvaW50KSB7XG4gICAgICAgIHJldHVybiBjYXJldFJhbmdlRnJvbVBvaW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmU7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICBjb25zdCBmcm9tUG9pbnQgPSAod2luLCB4LCB5KSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBTdWdhckVsZW1lbnQuZnJvbURvbSh3aW4uZG9jdW1lbnQpO1xuICAgICAgcmV0dXJuIGF2YWlsYWJsZVNlYXJjaChkb2MsIHgsIHkpLm1hcChybmcgPT4gU2ltUmFuZ2UuY3JlYXRlKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJuZy5zdGFydENvbnRhaW5lciksIHJuZy5zdGFydE9mZnNldCwgU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLmVuZENvbnRhaW5lciksIHJuZy5lbmRPZmZzZXQpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYmVmb3JlU3BlY2lhbCA9IChlbGVtZW50LCBvZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IG5hbWUkMSA9IG5hbWUoZWxlbWVudCk7XG4gICAgICBpZiAoJ2lucHV0JyA9PT0gbmFtZSQxKSB7XG4gICAgICAgIHJldHVybiBTaXR1LmFmdGVyKGVsZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmICghY29udGFpbnMkMihbXG4gICAgICAgICAgJ2JyJyxcbiAgICAgICAgICAnaW1nJ1xuICAgICAgICBdLCBuYW1lJDEpKSB7XG4gICAgICAgIHJldHVybiBTaXR1Lm9uKGVsZW1lbnQsIG9mZnNldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb2Zmc2V0ID09PSAwID8gU2l0dS5iZWZvcmUoZWxlbWVudCkgOiBTaXR1LmFmdGVyKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcHJlcHJvY2Vzc1JlbGF0aXZlID0gKHN0YXJ0U2l0dSwgZmluaXNoU2l0dSkgPT4ge1xuICAgICAgY29uc3Qgc3RhcnQgPSBzdGFydFNpdHUuZm9sZChTaXR1LmJlZm9yZSwgYmVmb3JlU3BlY2lhbCwgU2l0dS5hZnRlcik7XG4gICAgICBjb25zdCBmaW5pc2ggPSBmaW5pc2hTaXR1LmZvbGQoU2l0dS5iZWZvcmUsIGJlZm9yZVNwZWNpYWwsIFNpdHUuYWZ0ZXIpO1xuICAgICAgcmV0dXJuIFNpbVNlbGVjdGlvbi5yZWxhdGl2ZShzdGFydCwgZmluaXNoKTtcbiAgICB9O1xuICAgIGNvbnN0IHByZXByb2Nlc3NFeGFjdCA9IChzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSA9PiB7XG4gICAgICBjb25zdCBzdGFydFNpdHUgPSBiZWZvcmVTcGVjaWFsKHN0YXJ0LCBzb2Zmc2V0KTtcbiAgICAgIGNvbnN0IGZpbmlzaFNpdHUgPSBiZWZvcmVTcGVjaWFsKGZpbmlzaCwgZm9mZnNldCk7XG4gICAgICByZXR1cm4gU2ltU2VsZWN0aW9uLnJlbGF0aXZlKHN0YXJ0U2l0dSwgZmluaXNoU2l0dSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG1ha2VSYW5nZSA9IChzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBvd25lcihzdGFydCk7XG4gICAgICBjb25zdCBybmcgPSBkb2MuZG9tLmNyZWF0ZVJhbmdlKCk7XG4gICAgICBybmcuc2V0U3RhcnQoc3RhcnQuZG9tLCBzb2Zmc2V0KTtcbiAgICAgIHJuZy5zZXRFbmQoZmluaXNoLmRvbSwgZm9mZnNldCk7XG4gICAgICByZXR1cm4gcm5nO1xuICAgIH07XG4gICAgY29uc3QgYWZ0ZXIgPSAoc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCkgPT4ge1xuICAgICAgY29uc3QgciA9IG1ha2VSYW5nZShzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KTtcbiAgICAgIGNvbnN0IHNhbWUgPSBlcSQxKHN0YXJ0LCBmaW5pc2gpICYmIHNvZmZzZXQgPT09IGZvZmZzZXQ7XG4gICAgICByZXR1cm4gci5jb2xsYXBzZWQgJiYgIXNhbWU7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldE5hdGl2ZVNlbGVjdGlvbiA9IHdpbiA9PiBPcHRpb25hbC5mcm9tKHdpbi5nZXRTZWxlY3Rpb24oKSk7XG4gICAgY29uc3QgZG9TZXROYXRpdmVSYW5nZSA9ICh3aW4sIHJuZykgPT4ge1xuICAgICAgZ2V0TmF0aXZlU2VsZWN0aW9uKHdpbikuZWFjaChzZWxlY3Rpb24gPT4ge1xuICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShybmcpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBkb1NldFJhbmdlID0gKHdpbiwgc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCkgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZXhhY3RUb05hdGl2ZSh3aW4sIHN0YXJ0LCBzb2Zmc2V0LCBmaW5pc2gsIGZvZmZzZXQpO1xuICAgICAgZG9TZXROYXRpdmVSYW5nZSh3aW4sIHJuZyk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRMZWdhY3lSdGxSYW5nZSA9ICh3aW4sIHNlbGVjdGlvbiwgc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCkgPT4ge1xuICAgICAgc2VsZWN0aW9uLmNvbGxhcHNlKHN0YXJ0LmRvbSwgc29mZnNldCk7XG4gICAgICBzZWxlY3Rpb24uZXh0ZW5kKGZpbmlzaC5kb20sIGZvZmZzZXQpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0UmFuZ2VGcm9tUmVsYXRpdmUgPSAod2luLCByZWxhdGl2ZSkgPT4gZGlhZ25vc2Uod2luLCByZWxhdGl2ZSkubWF0Y2goe1xuICAgICAgbHRyOiAoc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCkgPT4ge1xuICAgICAgICBkb1NldFJhbmdlKHdpbiwgc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCk7XG4gICAgICB9LFxuICAgICAgcnRsOiAoc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCkgPT4ge1xuICAgICAgICBnZXROYXRpdmVTZWxlY3Rpb24od2luKS5lYWNoKHNlbGVjdGlvbiA9PiB7XG4gICAgICAgICAgaWYgKHNlbGVjdGlvbi5zZXRCYXNlQW5kRXh0ZW50KSB7XG4gICAgICAgICAgICBzZWxlY3Rpb24uc2V0QmFzZUFuZEV4dGVudChzdGFydC5kb20sIHNvZmZzZXQsIGZpbmlzaC5kb20sIGZvZmZzZXQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLmV4dGVuZCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgc2V0TGVnYWN5UnRsUmFuZ2Uod2luLCBzZWxlY3Rpb24sIHN0YXJ0LCBzb2Zmc2V0LCBmaW5pc2gsIGZvZmZzZXQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBkb1NldFJhbmdlKHdpbiwgZmluaXNoLCBmb2Zmc2V0LCBzdGFydCwgc29mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvU2V0UmFuZ2Uod2luLCBmaW5pc2gsIGZvZmZzZXQsIHN0YXJ0LCBzb2Zmc2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHNldEV4YWN0ID0gKHdpbiwgc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCkgPT4ge1xuICAgICAgY29uc3QgcmVsYXRpdmUgPSBwcmVwcm9jZXNzRXhhY3Qoc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCk7XG4gICAgICBzZXRSYW5nZUZyb21SZWxhdGl2ZSh3aW4sIHJlbGF0aXZlKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldFJlbGF0aXZlID0gKHdpbiwgc3RhcnRTaXR1LCBmaW5pc2hTaXR1KSA9PiB7XG4gICAgICBjb25zdCByZWxhdGl2ZSA9IHByZXByb2Nlc3NSZWxhdGl2ZShzdGFydFNpdHUsIGZpbmlzaFNpdHUpO1xuICAgICAgc2V0UmFuZ2VGcm9tUmVsYXRpdmUod2luLCByZWxhdGl2ZSk7XG4gICAgfTtcbiAgICBjb25zdCByZWFkUmFuZ2UgPSBzZWxlY3Rpb24gPT4ge1xuICAgICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xuICAgICAgICBjb25zdCBmaXJzdFJuZyA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuICAgICAgICBjb25zdCBsYXN0Um5nID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoc2VsZWN0aW9uLnJhbmdlQ291bnQgLSAxKTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoU2ltUmFuZ2UuY3JlYXRlKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGZpcnN0Um5nLnN0YXJ0Q29udGFpbmVyKSwgZmlyc3RSbmcuc3RhcnRPZmZzZXQsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKGxhc3RSbmcuZW5kQ29udGFpbmVyKSwgbGFzdFJuZy5lbmRPZmZzZXQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBkb0dldEV4YWN0ID0gc2VsZWN0aW9uID0+IHtcbiAgICAgIGlmIChzZWxlY3Rpb24uYW5jaG9yTm9kZSA9PT0gbnVsbCB8fCBzZWxlY3Rpb24uZm9jdXNOb2RlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZWFkUmFuZ2Uoc2VsZWN0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGFuY2hvciA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHNlbGVjdGlvbi5hbmNob3JOb2RlKTtcbiAgICAgICAgY29uc3QgZm9jdXMgPSBTdWdhckVsZW1lbnQuZnJvbURvbShzZWxlY3Rpb24uZm9jdXNOb2RlKTtcbiAgICAgICAgcmV0dXJuIGFmdGVyKGFuY2hvciwgc2VsZWN0aW9uLmFuY2hvck9mZnNldCwgZm9jdXMsIHNlbGVjdGlvbi5mb2N1c09mZnNldCkgPyBPcHRpb25hbC5zb21lKFNpbVJhbmdlLmNyZWF0ZShhbmNob3IsIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsIGZvY3VzLCBzZWxlY3Rpb24uZm9jdXNPZmZzZXQpKSA6IHJlYWRSYW5nZShzZWxlY3Rpb24pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2V0VG9FbGVtZW50ID0gKHdpbiwgZWxlbWVudCwgc2VsZWN0Tm9kZUNvbnRlbnRzJDEgPSB0cnVlKSA9PiB7XG4gICAgICBjb25zdCBybmdHZXR0ZXIgPSBzZWxlY3ROb2RlQ29udGVudHMkMSA/IHNlbGVjdE5vZGVDb250ZW50cyA6IHNlbGVjdE5vZGU7XG4gICAgICBjb25zdCBybmcgPSBybmdHZXR0ZXIod2luLCBlbGVtZW50KTtcbiAgICAgIGRvU2V0TmF0aXZlUmFuZ2Uod2luLCBybmcpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0RXhhY3QgPSB3aW4gPT4gZ2V0TmF0aXZlU2VsZWN0aW9uKHdpbikuZmlsdGVyKHNlbCA9PiBzZWwucmFuZ2VDb3VudCA+IDApLmJpbmQoZG9HZXRFeGFjdCk7XG4gICAgY29uc3QgZ2V0JDIgPSB3aW4gPT4gZ2V0RXhhY3Qod2luKS5tYXAocmFuZ2UgPT4gU2ltU2VsZWN0aW9uLmV4YWN0KHJhbmdlLnN0YXJ0LCByYW5nZS5zb2Zmc2V0LCByYW5nZS5maW5pc2gsIHJhbmdlLmZvZmZzZXQpKTtcbiAgICBjb25zdCBnZXRGaXJzdFJlY3QgPSAod2luLCBzZWxlY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGFzTHRyUmFuZ2Uod2luLCBzZWxlY3Rpb24pO1xuICAgICAgcmV0dXJuIGdldEZpcnN0UmVjdCQxKHJuZyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRBdFBvaW50ID0gKHdpbiwgeCwgeSkgPT4gZnJvbVBvaW50KHdpbiwgeCwgeSk7XG4gICAgY29uc3QgY2xlYXIgPSB3aW4gPT4ge1xuICAgICAgZ2V0TmF0aXZlU2VsZWN0aW9uKHdpbikuZWFjaChzZWxlY3Rpb24gPT4gc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgV2luZG93QnJpZGdlID0gd2luID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnRGcm9tUG9pbnQgPSAoeCwgeSkgPT4ge1xuICAgICAgICByZXR1cm4gU3VnYXJFbGVtZW50LmZyb21Qb2ludChTdWdhckVsZW1lbnQuZnJvbURvbSh3aW4uZG9jdW1lbnQpLCB4LCB5KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRSZWN0ID0gZWxlbWVudCA9PiB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRSYW5nZWRSZWN0ID0gKHN0YXJ0LCBzb2Zmc2V0LCBmaW5pc2gsIGZvZmZzZXQpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsID0gU2ltU2VsZWN0aW9uLmV4YWN0KHN0YXJ0LCBzb2Zmc2V0LCBmaW5pc2gsIGZvZmZzZXQpO1xuICAgICAgICByZXR1cm4gZ2V0Rmlyc3RSZWN0KHdpbiwgc2VsKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiBnZXQkMih3aW4pLm1hcChleGFjdEFkdCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1JhbmdlKHdpbiwgZXhhY3RBZHQpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBmcm9tU2l0dXMgPSBzaXR1cyA9PiB7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlID0gU2ltU2VsZWN0aW9uLnJlbGF0aXZlKHNpdHVzLnN0YXJ0LCBzaXR1cy5maW5pc2gpO1xuICAgICAgICByZXR1cm4gY29udmVydFRvUmFuZ2Uod2luLCByZWxhdGl2ZSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2l0dXNGcm9tUG9pbnQgPSAoeCwgeSkgPT4ge1xuICAgICAgICByZXR1cm4gZ2V0QXRQb2ludCh3aW4sIHgsIHkpLm1hcChleGFjdCA9PiB7XG4gICAgICAgICAgcmV0dXJuIFNpdHVzLmNyZWF0ZShleGFjdC5zdGFydCwgZXhhY3Quc29mZnNldCwgZXhhY3QuZmluaXNoLCBleGFjdC5mb2Zmc2V0KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgY2xlYXJTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgICAgIGNsZWFyKHdpbik7XG4gICAgICB9O1xuICAgICAgY29uc3QgY29sbGFwc2VTZWxlY3Rpb24gPSAodG9TdGFydCA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGdldCQyKHdpbikuZWFjaChzZWwgPT4gc2VsLmZvbGQocm5nID0+IHJuZy5jb2xsYXBzZSh0b1N0YXJ0KSwgKHN0YXJ0U2l0dSwgZmluaXNoU2l0dSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNpdHUgPSB0b1N0YXJ0ID8gc3RhcnRTaXR1IDogZmluaXNoU2l0dTtcbiAgICAgICAgICBzZXRSZWxhdGl2ZSh3aW4sIHNpdHUsIHNpdHUpO1xuICAgICAgICB9LCAoc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSB0b1N0YXJ0ID8gc3RhcnQgOiBmaW5pc2g7XG4gICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdG9TdGFydCA/IHNvZmZzZXQgOiBmb2Zmc2V0O1xuICAgICAgICAgIHNldEV4YWN0KHdpbiwgbm9kZSwgb2Zmc2V0LCBub2RlLCBvZmZzZXQpO1xuICAgICAgICB9KSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VsZWN0Tm9kZSA9IGVsZW1lbnQgPT4ge1xuICAgICAgICBzZXRUb0VsZW1lbnQod2luLCBlbGVtZW50LCBmYWxzZSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VsZWN0Q29udGVudHMgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgc2V0VG9FbGVtZW50KHdpbiwgZWxlbWVudCk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0U2VsZWN0aW9uID0gc2VsID0+IHtcbiAgICAgICAgc2V0RXhhY3Qod2luLCBzZWwuc3RhcnQsIHNlbC5zb2Zmc2V0LCBzZWwuZmluaXNoLCBzZWwuZm9mZnNldCk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0UmVsYXRpdmVTZWxlY3Rpb24gPSAoc3RhcnQsIGZpbmlzaCkgPT4ge1xuICAgICAgICBzZXRSZWxhdGl2ZSh3aW4sIHN0YXJ0LCBmaW5pc2gpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldElubmVySGVpZ2h0ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gd2luLmlubmVySGVpZ2h0O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldFNjcm9sbFkgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBvcyA9IGdldCQzKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHdpbi5kb2N1bWVudCkpO1xuICAgICAgICByZXR1cm4gcG9zLnRvcDtcbiAgICAgIH07XG4gICAgICBjb25zdCBzY3JvbGxCeSA9ICh4LCB5KSA9PiB7XG4gICAgICAgIGJ5KHgsIHksIFN1Z2FyRWxlbWVudC5mcm9tRG9tKHdpbi5kb2N1bWVudCkpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZW1lbnRGcm9tUG9pbnQsXG4gICAgICAgIGdldFJlY3QsXG4gICAgICAgIGdldFJhbmdlZFJlY3QsXG4gICAgICAgIGdldFNlbGVjdGlvbixcbiAgICAgICAgZnJvbVNpdHVzLFxuICAgICAgICBzaXR1c0Zyb21Qb2ludCxcbiAgICAgICAgY2xlYXJTZWxlY3Rpb24sXG4gICAgICAgIGNvbGxhcHNlU2VsZWN0aW9uLFxuICAgICAgICBzZXRTZWxlY3Rpb24sXG4gICAgICAgIHNldFJlbGF0aXZlU2VsZWN0aW9uLFxuICAgICAgICBzZWxlY3ROb2RlLFxuICAgICAgICBzZWxlY3RDb250ZW50cyxcbiAgICAgICAgZ2V0SW5uZXJIZWlnaHQsXG4gICAgICAgIGdldFNjcm9sbFksXG4gICAgICAgIHNjcm9sbEJ5XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCByYyA9IChyb3dzLCBjb2xzKSA9PiAoe1xuICAgICAgcm93cyxcbiAgICAgIGNvbHNcbiAgICB9KTtcbiAgICBjb25zdCBtb3VzZSA9ICh3aW4sIGNvbnRhaW5lciwgaXNSb290LCBhbm5vdGF0aW9ucykgPT4ge1xuICAgICAgY29uc3QgYnJpZGdlID0gV2luZG93QnJpZGdlKHdpbik7XG4gICAgICBjb25zdCBoYW5kbGVycyA9IE1vdXNlU2VsZWN0aW9uKGJyaWRnZSwgY29udGFpbmVyLCBpc1Jvb3QsIGFubm90YXRpb25zKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsZWFyc3RhdGU6IGhhbmRsZXJzLmNsZWFyc3RhdGUsXG4gICAgICAgIG1vdXNlZG93bjogaGFuZGxlcnMubW91c2Vkb3duLFxuICAgICAgICBtb3VzZW92ZXI6IGhhbmRsZXJzLm1vdXNlb3ZlcixcbiAgICAgICAgbW91c2V1cDogaGFuZGxlcnMubW91c2V1cFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGlzRWRpdGFibGVOb2RlID0gbm9kZSA9PiBjbG9zZXN0JDIobm9kZSwgaXNIVE1MRWxlbWVudCkuZXhpc3RzKGlzRWRpdGFibGUkMSk7XG4gICAgY29uc3QgaXNFZGl0YWJsZVNlbGVjdGlvbiA9IChzdGFydCwgZmluaXNoKSA9PiBpc0VkaXRhYmxlTm9kZShzdGFydCkgfHwgaXNFZGl0YWJsZU5vZGUoZmluaXNoKTtcbiAgICBjb25zdCBrZXlib2FyZCA9ICh3aW4sIGNvbnRhaW5lciwgaXNSb290LCBhbm5vdGF0aW9ucykgPT4ge1xuICAgICAgY29uc3QgYnJpZGdlID0gV2luZG93QnJpZGdlKHdpbik7XG4gICAgICBjb25zdCBjbGVhclRvTmF2aWdhdGUgPSAoKSA9PiB7XG4gICAgICAgIGFubm90YXRpb25zLmNsZWFyKGNvbnRhaW5lcik7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9O1xuICAgICAgY29uc3Qga2V5ZG93biA9IChldmVudCwgc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCwgZGlyZWN0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlYWxFdmVudCA9IGV2ZW50LnJhdztcbiAgICAgICAgY29uc3Qga2V5Y29kZSA9IHJlYWxFdmVudC53aGljaDtcbiAgICAgICAgY29uc3Qgc2hpZnRLZXkgPSByZWFsRXZlbnQuc2hpZnRLZXkgPT09IHRydWU7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSByZXRyaWV2ZSQxKGNvbnRhaW5lciwgYW5ub3RhdGlvbnMuc2VsZWN0ZWRTZWxlY3RvcikuZm9sZCgoKSA9PiB7XG4gICAgICAgICAgaWYgKGlzTmF2aWdhdGlvbihrZXljb2RlKSAmJiAhc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIGFubm90YXRpb25zLmNsZWFyQmVmb3JlVXBkYXRlKGNvbnRhaW5lcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc05hdmlnYXRpb24oa2V5Y29kZSkgJiYgc2hpZnRLZXkgJiYgIWlzRWRpdGFibGVTZWxlY3Rpb24oc3RhcnQsIGZpbmlzaCkpIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNEb3duKGtleWNvZGUpICYmIHNoaWZ0S2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gY3Vycnkoc2VsZWN0LCBicmlkZ2UsIGNvbnRhaW5lciwgaXNSb290LCBkb3duLCBmaW5pc2gsIHN0YXJ0LCBhbm5vdGF0aW9ucy5zZWxlY3RSYW5nZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1VwKGtleWNvZGUpICYmIHNoaWZ0S2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gY3Vycnkoc2VsZWN0LCBicmlkZ2UsIGNvbnRhaW5lciwgaXNSb290LCB1cCwgZmluaXNoLCBzdGFydCwgYW5ub3RhdGlvbnMuc2VsZWN0UmFuZ2UpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNEb3duKGtleWNvZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycnkobmF2aWdhdGUsIGJyaWRnZSwgaXNSb290LCBkb3duLCBmaW5pc2gsIHN0YXJ0LCBsYXN0RG93bkNoZWNrKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzVXAoa2V5Y29kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyeShuYXZpZ2F0ZSwgYnJpZGdlLCBpc1Jvb3QsIHVwLCBmaW5pc2gsIHN0YXJ0LCBmaXJzdFVwQ2hlY2spO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHNlbGVjdGVkID0+IHtcbiAgICAgICAgICBjb25zdCB1cGRhdGUkMSA9IGF0dGVtcHRzID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb24gPSBmaW5kTWFwKGF0dGVtcHRzLCBkZWx0YSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZShkZWx0YS5yb3dzLCBkZWx0YS5jb2xzLCBjb250YWluZXIsIHNlbGVjdGVkLCBhbm5vdGF0aW9ucyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gbmF2aWdhdGlvbi5mb2xkKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0RWRnZXMoY29udGFpbmVyLCBhbm5vdGF0aW9ucy5maXJzdFNlbGVjdGVkU2VsZWN0b3IsIGFubm90YXRpb25zLmxhc3RTZWxlY3RlZFNlbGVjdG9yKS5tYXAoZWRnZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmVsYXRpdmUgPSBpc0Rvd24oa2V5Y29kZSkgfHwgZGlyZWN0aW9uLmlzRm9yd2FyZChrZXljb2RlKSA/IFNpdHUuYWZ0ZXIgOiBTaXR1LmJlZm9yZTtcbiAgICAgICAgICAgICAgICAgIGJyaWRnZS5zZXRSZWxhdGl2ZVNlbGVjdGlvbihTaXR1Lm9uKGVkZ2VzLmZpcnN0LCAwKSwgcmVsYXRpdmUoZWRnZXMudGFibGUpKTtcbiAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zLmNsZWFyKGNvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gUmVzcG9uc2UuY3JlYXRlKE9wdGlvbmFsLm5vbmUoKSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0sIF8gPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKFJlc3BvbnNlLmNyZWF0ZShPcHRpb25hbC5ub25lKCksIHRydWUpKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKGlzTmF2aWdhdGlvbihrZXljb2RlKSAmJiBzaGlmdEtleSAmJiAhaXNFZGl0YWJsZVNlbGVjdGlvbihzdGFydCwgZmluaXNoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmU7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc0Rvd24oa2V5Y29kZSkgJiYgc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGUkMShbcmMoKzEsIDApXSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1VwKGtleWNvZGUpICYmIHNoaWZ0S2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlJDEoW3JjKC0xLCAwKV0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uLmlzQmFja3dhcmQoa2V5Y29kZSkgJiYgc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGUkMShbXG4gICAgICAgICAgICAgIHJjKDAsIC0xKSxcbiAgICAgICAgICAgICAgcmMoLTEsIDApXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbi5pc0ZvcndhcmQoa2V5Y29kZSkgJiYgc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGUkMShbXG4gICAgICAgICAgICAgIHJjKDAsICsxKSxcbiAgICAgICAgICAgICAgcmMoKzEsIDApXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzTmF2aWdhdGlvbihrZXljb2RlKSAmJiAhc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBjbGVhclRvTmF2aWdhdGU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBoYW5kbGVyKCk7XG4gICAgICB9O1xuICAgICAgY29uc3Qga2V5dXAgPSAoZXZlbnQsIHN0YXJ0LCBzb2Zmc2V0LCBmaW5pc2gsIGZvZmZzZXQpID0+IHtcbiAgICAgICAgcmV0dXJuIHJldHJpZXZlJDEoY29udGFpbmVyLCBhbm5vdGF0aW9ucy5zZWxlY3RlZFNlbGVjdG9yKS5mb2xkKCgpID0+IHtcbiAgICAgICAgICBjb25zdCByZWFsRXZlbnQgPSBldmVudC5yYXc7XG4gICAgICAgICAgY29uc3Qga2V5Y29kZSA9IHJlYWxFdmVudC53aGljaDtcbiAgICAgICAgICBjb25zdCBzaGlmdEtleSA9IHJlYWxFdmVudC5zaGlmdEtleSA9PT0gdHJ1ZTtcbiAgICAgICAgICBpZiAoIXNoaWZ0S2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNOYXZpZ2F0aW9uKGtleWNvZGUpICYmIGlzRWRpdGFibGVTZWxlY3Rpb24oc3RhcnQsIGZpbmlzaCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzeW5jKGNvbnRhaW5lciwgaXNSb290LCBzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0LCBhbm5vdGF0aW9ucy5zZWxlY3RSYW5nZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBPcHRpb25hbC5ub25lKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXlkb3duLFxuICAgICAgICBrZXl1cFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGV4dGVybmFsID0gKHdpbiwgY29udGFpbmVyLCBpc1Jvb3QsIGFubm90YXRpb25zKSA9PiB7XG4gICAgICBjb25zdCBicmlkZ2UgPSBXaW5kb3dCcmlkZ2Uod2luKTtcbiAgICAgIHJldHVybiAoc3RhcnQsIGZpbmlzaCkgPT4ge1xuICAgICAgICBhbm5vdGF0aW9ucy5jbGVhckJlZm9yZVVwZGF0ZShjb250YWluZXIpO1xuICAgICAgICBpZGVudGlmeShzdGFydCwgZmluaXNoLCBpc1Jvb3QpLmVhY2goY2VsbFNlbCA9PiB7XG4gICAgICAgICAgY29uc3QgYm94ZXMgPSBjZWxsU2VsLmJveGVzLmdldE9yKFtdKTtcbiAgICAgICAgICBhbm5vdGF0aW9ucy5zZWxlY3RSYW5nZShjb250YWluZXIsIGJveGVzLCBjZWxsU2VsLnN0YXJ0LCBjZWxsU2VsLmZpbmlzaCk7XG4gICAgICAgICAgYnJpZGdlLnNlbGVjdENvbnRlbnRzKGZpbmlzaCk7XG4gICAgICAgICAgYnJpZGdlLmNvbGxhcHNlU2VsZWN0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVhZCA9IChlbGVtZW50LCBhdHRyKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGdldCRiKGVsZW1lbnQsIGF0dHIpO1xuICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnID8gW10gOiB2YWx1ZS5zcGxpdCgnICcpO1xuICAgIH07XG4gICAgY29uc3QgYWRkJDIgPSAoZWxlbWVudCwgYXR0ciwgaWQpID0+IHtcbiAgICAgIGNvbnN0IG9sZCA9IHJlYWQoZWxlbWVudCwgYXR0cik7XG4gICAgICBjb25zdCBudSA9IG9sZC5jb25jYXQoW2lkXSk7XG4gICAgICBzZXQkMihlbGVtZW50LCBhdHRyLCBudS5qb2luKCcgJykpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmUkNCA9IChlbGVtZW50LCBhdHRyLCBpZCkgPT4ge1xuICAgICAgY29uc3QgbnUgPSBmaWx0ZXIkMihyZWFkKGVsZW1lbnQsIGF0dHIpLCB2ID0+IHYgIT09IGlkKTtcbiAgICAgIGlmIChudS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNldCQyKGVsZW1lbnQsIGF0dHIsIG51LmpvaW4oJyAnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdmUkNyhlbGVtZW50LCBhdHRyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3VwcG9ydHMgPSBlbGVtZW50ID0+IGVsZW1lbnQuZG9tLmNsYXNzTGlzdCAhPT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGdldCQxID0gZWxlbWVudCA9PiByZWFkKGVsZW1lbnQsICdjbGFzcycpO1xuICAgIGNvbnN0IGFkZCQxID0gKGVsZW1lbnQsIGNsYXp6KSA9PiBhZGQkMihlbGVtZW50LCAnY2xhc3MnLCBjbGF6eik7XG4gICAgY29uc3QgcmVtb3ZlJDMgPSAoZWxlbWVudCwgY2xhenopID0+IHJlbW92ZSQ0KGVsZW1lbnQsICdjbGFzcycsIGNsYXp6KTtcblxuICAgIGNvbnN0IGFkZCA9IChlbGVtZW50LCBjbGF6eikgPT4ge1xuICAgICAgaWYgKHN1cHBvcnRzKGVsZW1lbnQpKSB7XG4gICAgICAgIGVsZW1lbnQuZG9tLmNsYXNzTGlzdC5hZGQoY2xhenopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWRkJDEoZWxlbWVudCwgY2xhenopO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY2xlYW5DbGFzcyA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgY2xhc3NMaXN0ID0gc3VwcG9ydHMoZWxlbWVudCkgPyBlbGVtZW50LmRvbS5jbGFzc0xpc3QgOiBnZXQkMShlbGVtZW50KTtcbiAgICAgIGlmIChjbGFzc0xpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJlbW92ZSQ3KGVsZW1lbnQsICdjbGFzcycpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlJDIgPSAoZWxlbWVudCwgY2xhenopID0+IHtcbiAgICAgIGlmIChzdXBwb3J0cyhlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSBlbGVtZW50LmRvbS5jbGFzc0xpc3Q7XG4gICAgICAgIGNsYXNzTGlzdC5yZW1vdmUoY2xhenopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVtb3ZlJDMoZWxlbWVudCwgY2xhenopO1xuICAgICAgfVxuICAgICAgY2xlYW5DbGFzcyhlbGVtZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IGhhcyA9IChlbGVtZW50LCBjbGF6eikgPT4gc3VwcG9ydHMoZWxlbWVudCkgJiYgZWxlbWVudC5kb20uY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXp6KTtcblxuICAgIGNvbnN0IHJlbW92ZSQxID0gKGVsZW1lbnQsIGNsYXNzZXMpID0+IHtcbiAgICAgIGVhY2gkMihjbGFzc2VzLCB4ID0+IHtcbiAgICAgICAgcmVtb3ZlJDIoZWxlbWVudCwgeCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgYWRkQ2xhc3MgPSBjbGF6eiA9PiBlbGVtZW50ID0+IHtcbiAgICAgIGFkZChlbGVtZW50LCBjbGF6eik7XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVDbGFzc2VzID0gY2xhc3NlcyA9PiBlbGVtZW50ID0+IHtcbiAgICAgIHJlbW92ZSQxKGVsZW1lbnQsIGNsYXNzZXMpO1xuICAgIH07XG5cbiAgICBjb25zdCBieUNsYXNzID0gZXBoZW1lcmEgPT4ge1xuICAgICAgY29uc3QgYWRkU2VsZWN0aW9uQ2xhc3MgPSBhZGRDbGFzcyhlcGhlbWVyYS5zZWxlY3RlZCk7XG4gICAgICBjb25zdCByZW1vdmVTZWxlY3Rpb25DbGFzc2VzID0gcmVtb3ZlQ2xhc3NlcyhbXG4gICAgICAgIGVwaGVtZXJhLnNlbGVjdGVkLFxuICAgICAgICBlcGhlbWVyYS5sYXN0U2VsZWN0ZWQsXG4gICAgICAgIGVwaGVtZXJhLmZpcnN0U2VsZWN0ZWRcbiAgICAgIF0pO1xuICAgICAgY29uc3QgY2xlYXIgPSBjb250YWluZXIgPT4ge1xuICAgICAgICBjb25zdCBzZWxzID0gZGVzY2VuZGFudHMoY29udGFpbmVyLCBlcGhlbWVyYS5zZWxlY3RlZFNlbGVjdG9yKTtcbiAgICAgICAgZWFjaCQyKHNlbHMsIHJlbW92ZVNlbGVjdGlvbkNsYXNzZXMpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlbGVjdFJhbmdlID0gKGNvbnRhaW5lciwgY2VsbHMsIHN0YXJ0LCBmaW5pc2gpID0+IHtcbiAgICAgICAgY2xlYXIoY29udGFpbmVyKTtcbiAgICAgICAgZWFjaCQyKGNlbGxzLCBhZGRTZWxlY3Rpb25DbGFzcyk7XG4gICAgICAgIGFkZChzdGFydCwgZXBoZW1lcmEuZmlyc3RTZWxlY3RlZCk7XG4gICAgICAgIGFkZChmaW5pc2gsIGVwaGVtZXJhLmxhc3RTZWxlY3RlZCk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xlYXJCZWZvcmVVcGRhdGU6IGNsZWFyLFxuICAgICAgICBjbGVhcixcbiAgICAgICAgc2VsZWN0UmFuZ2UsXG4gICAgICAgIHNlbGVjdGVkU2VsZWN0b3I6IGVwaGVtZXJhLnNlbGVjdGVkU2VsZWN0b3IsXG4gICAgICAgIGZpcnN0U2VsZWN0ZWRTZWxlY3RvcjogZXBoZW1lcmEuZmlyc3RTZWxlY3RlZFNlbGVjdG9yLFxuICAgICAgICBsYXN0U2VsZWN0ZWRTZWxlY3RvcjogZXBoZW1lcmEubGFzdFNlbGVjdGVkU2VsZWN0b3JcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBieUF0dHIgPSAoZXBoZW1lcmEsIG9uU2VsZWN0aW9uLCBvbkNsZWFyKSA9PiB7XG4gICAgICBjb25zdCByZW1vdmVTZWxlY3Rpb25BdHRyaWJ1dGVzID0gZWxlbWVudCA9PiB7XG4gICAgICAgIHJlbW92ZSQ3KGVsZW1lbnQsIGVwaGVtZXJhLnNlbGVjdGVkKTtcbiAgICAgICAgcmVtb3ZlJDcoZWxlbWVudCwgZXBoZW1lcmEuZmlyc3RTZWxlY3RlZCk7XG4gICAgICAgIHJlbW92ZSQ3KGVsZW1lbnQsIGVwaGVtZXJhLmxhc3RTZWxlY3RlZCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgYWRkU2VsZWN0aW9uQXR0cmlidXRlID0gZWxlbWVudCA9PiB7XG4gICAgICAgIHNldCQyKGVsZW1lbnQsIGVwaGVtZXJhLnNlbGVjdGVkLCAnMScpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNsZWFyID0gY29udGFpbmVyID0+IHtcbiAgICAgICAgY2xlYXJCZWZvcmVVcGRhdGUoY29udGFpbmVyKTtcbiAgICAgICAgb25DbGVhcigpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNsZWFyQmVmb3JlVXBkYXRlID0gY29udGFpbmVyID0+IHtcbiAgICAgICAgY29uc3Qgc2VscyA9IGRlc2NlbmRhbnRzKGNvbnRhaW5lciwgYCR7IGVwaGVtZXJhLnNlbGVjdGVkU2VsZWN0b3IgfSwkeyBlcGhlbWVyYS5maXJzdFNlbGVjdGVkU2VsZWN0b3IgfSwkeyBlcGhlbWVyYS5sYXN0U2VsZWN0ZWRTZWxlY3RvciB9YCk7XG4gICAgICAgIGVhY2gkMihzZWxzLCByZW1vdmVTZWxlY3Rpb25BdHRyaWJ1dGVzKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzZWxlY3RSYW5nZSA9IChjb250YWluZXIsIGNlbGxzLCBzdGFydCwgZmluaXNoKSA9PiB7XG4gICAgICAgIGNsZWFyKGNvbnRhaW5lcik7XG4gICAgICAgIGVhY2gkMihjZWxscywgYWRkU2VsZWN0aW9uQXR0cmlidXRlKTtcbiAgICAgICAgc2V0JDIoc3RhcnQsIGVwaGVtZXJhLmZpcnN0U2VsZWN0ZWQsICcxJyk7XG4gICAgICAgIHNldCQyKGZpbmlzaCwgZXBoZW1lcmEubGFzdFNlbGVjdGVkLCAnMScpO1xuICAgICAgICBvblNlbGVjdGlvbihjZWxscywgc3RhcnQsIGZpbmlzaCk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xlYXJCZWZvcmVVcGRhdGUsXG4gICAgICAgIGNsZWFyLFxuICAgICAgICBzZWxlY3RSYW5nZSxcbiAgICAgICAgc2VsZWN0ZWRTZWxlY3RvcjogZXBoZW1lcmEuc2VsZWN0ZWRTZWxlY3RvcixcbiAgICAgICAgZmlyc3RTZWxlY3RlZFNlbGVjdG9yOiBlcGhlbWVyYS5maXJzdFNlbGVjdGVkU2VsZWN0b3IsXG4gICAgICAgIGxhc3RTZWxlY3RlZFNlbGVjdG9yOiBlcGhlbWVyYS5sYXN0U2VsZWN0ZWRTZWxlY3RvclxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IFNlbGVjdGlvbkFubm90YXRpb24gPSB7XG4gICAgICBieUNsYXNzLFxuICAgICAgYnlBdHRyXG4gICAgfTtcblxuICAgIGNvbnN0IGZvbGQgPSAoc3ViamVjdCwgb25Ob25lLCBvbk11bHRpcGxlLCBvblNpbmdsZSkgPT4ge1xuICAgICAgc3dpdGNoIChzdWJqZWN0LnRhZykge1xuICAgICAgY2FzZSAnbm9uZSc6XG4gICAgICAgIHJldHVybiBvbk5vbmUoKTtcbiAgICAgIGNhc2UgJ3NpbmdsZSc6XG4gICAgICAgIHJldHVybiBvblNpbmdsZShzdWJqZWN0LmVsZW1lbnQpO1xuICAgICAgY2FzZSAnbXVsdGlwbGUnOlxuICAgICAgICByZXR1cm4gb25NdWx0aXBsZShzdWJqZWN0LmVsZW1lbnRzKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG5vbmUgPSAoKSA9PiAoeyB0YWc6ICdub25lJyB9KTtcbiAgICBjb25zdCBtdWx0aXBsZSA9IGVsZW1lbnRzID0+ICh7XG4gICAgICB0YWc6ICdtdWx0aXBsZScsXG4gICAgICBlbGVtZW50c1xuICAgIH0pO1xuICAgIGNvbnN0IHNpbmdsZSA9IGVsZW1lbnQgPT4gKHtcbiAgICAgIHRhZzogJ3NpbmdsZScsXG4gICAgICBlbGVtZW50XG4gICAgfSk7XG5cbiAgICBjb25zdCBTZWxlY3Rpb25zID0gKGxhenlSb290LCBnZXRTdGFydCwgc2VsZWN0ZWRTZWxlY3RvcikgPT4ge1xuICAgICAgY29uc3QgZ2V0ID0gKCkgPT4gcmV0cmlldmUobGF6eVJvb3QoKSwgc2VsZWN0ZWRTZWxlY3RvcikuZm9sZCgoKSA9PiBnZXRTdGFydCgpLmZvbGQobm9uZSwgc2luZ2xlKSwgbXVsdGlwbGUpO1xuICAgICAgcmV0dXJuIHsgZ2V0IH07XG4gICAgfTtcblxuICAgIGNvbnN0IGdldFVwT3JMZWZ0Q2VsbHMgPSAoZ3JpZCwgc2VsZWN0ZWRDZWxscykgPT4ge1xuICAgICAgY29uc3QgdXBHcmlkID0gZ3JpZC5zbGljZSgwLCBzZWxlY3RlZENlbGxzW3NlbGVjdGVkQ2VsbHMubGVuZ3RoIC0gMV0ucm93ICsgMSk7XG4gICAgICBjb25zdCB1cERldGFpbHMgPSB0b0RldGFpbExpc3QodXBHcmlkKTtcbiAgICAgIHJldHVybiBiaW5kJDIodXBEZXRhaWxzLCBkZXRhaWwgPT4ge1xuICAgICAgICBjb25zdCBzbGljZWRDZWxscyA9IGRldGFpbC5jZWxscy5zbGljZSgwLCBzZWxlY3RlZENlbGxzW3NlbGVjdGVkQ2VsbHMubGVuZ3RoIC0gMV0uY29sdW1uICsgMSk7XG4gICAgICAgIHJldHVybiBtYXAkMShzbGljZWRDZWxscywgY2VsbCA9PiBjZWxsLmVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXREb3duT3JSaWdodENlbGxzID0gKGdyaWQsIHNlbGVjdGVkQ2VsbHMpID0+IHtcbiAgICAgIGNvbnN0IGRvd25HcmlkID0gZ3JpZC5zbGljZShzZWxlY3RlZENlbGxzWzBdLnJvdyArIHNlbGVjdGVkQ2VsbHNbMF0ucm93c3BhbiAtIDEsIGdyaWQubGVuZ3RoKTtcbiAgICAgIGNvbnN0IGRvd25EZXRhaWxzID0gdG9EZXRhaWxMaXN0KGRvd25HcmlkKTtcbiAgICAgIHJldHVybiBiaW5kJDIoZG93bkRldGFpbHMsIGRldGFpbCA9PiB7XG4gICAgICAgIGNvbnN0IHNsaWNlZENlbGxzID0gZGV0YWlsLmNlbGxzLnNsaWNlKHNlbGVjdGVkQ2VsbHNbMF0uY29sdW1uICsgc2VsZWN0ZWRDZWxsc1swXS5jb2xzcGFuIC0gMSwgZGV0YWlsLmNlbGxzLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiBtYXAkMShzbGljZWRDZWxscywgY2VsbCA9PiBjZWxsLmVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRPdGhlckNlbGxzID0gKHRhYmxlLCB0YXJnZXQsIGdlbmVyYXRvcnMpID0+IHtcbiAgICAgIGNvbnN0IHdhcmVob3VzZSA9IFdhcmVob3VzZS5mcm9tVGFibGUodGFibGUpO1xuICAgICAgY29uc3QgZGV0YWlscyA9IG9uQ2VsbHMod2FyZWhvdXNlLCB0YXJnZXQpO1xuICAgICAgcmV0dXJuIGRldGFpbHMubWFwKHNlbGVjdGVkQ2VsbHMgPT4ge1xuICAgICAgICBjb25zdCBncmlkID0gdG9HcmlkKHdhcmVob3VzZSwgZ2VuZXJhdG9ycywgZmFsc2UpO1xuICAgICAgICBjb25zdCB7cm93c30gPSBleHRyYWN0R3JpZERldGFpbHMoZ3JpZCk7XG4gICAgICAgIGNvbnN0IHVwT3JMZWZ0Q2VsbHMgPSBnZXRVcE9yTGVmdENlbGxzKHJvd3MsIHNlbGVjdGVkQ2VsbHMpO1xuICAgICAgICBjb25zdCBkb3duT3JSaWdodENlbGxzID0gZ2V0RG93bk9yUmlnaHRDZWxscyhyb3dzLCBzZWxlY3RlZENlbGxzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB1cE9yTGVmdENlbGxzLFxuICAgICAgICAgIGRvd25PclJpZ2h0Q2VsbHNcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBta0V2ZW50ID0gKHRhcmdldCwgeCwgeSwgc3RvcCwgcHJldmVudCwga2lsbCwgcmF3KSA9PiAoe1xuICAgICAgdGFyZ2V0LFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBzdG9wLFxuICAgICAgcHJldmVudCxcbiAgICAgIGtpbGwsXG4gICAgICByYXdcbiAgICB9KTtcbiAgICBjb25zdCBmcm9tUmF3RXZlbnQkMSA9IHJhd0V2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGdldE9yaWdpbmFsRXZlbnRUYXJnZXQocmF3RXZlbnQpLmdldE9yKHJhd0V2ZW50LnRhcmdldCkpO1xuICAgICAgY29uc3Qgc3RvcCA9ICgpID0+IHJhd0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY29uc3QgcHJldmVudCA9ICgpID0+IHJhd0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBraWxsID0gY29tcG9zZShwcmV2ZW50LCBzdG9wKTtcbiAgICAgIHJldHVybiBta0V2ZW50KHRhcmdldCwgcmF3RXZlbnQuY2xpZW50WCwgcmF3RXZlbnQuY2xpZW50WSwgc3RvcCwgcHJldmVudCwga2lsbCwgcmF3RXZlbnQpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlID0gKGZpbHRlciwgaGFuZGxlcikgPT4gcmF3RXZlbnQgPT4ge1xuICAgICAgaWYgKGZpbHRlcihyYXdFdmVudCkpIHtcbiAgICAgICAgaGFuZGxlcihmcm9tUmF3RXZlbnQkMShyYXdFdmVudCkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYmluZGVyID0gKGVsZW1lbnQsIGV2ZW50LCBmaWx0ZXIsIGhhbmRsZXIsIHVzZUNhcHR1cmUpID0+IHtcbiAgICAgIGNvbnN0IHdyYXBwZWQgPSBoYW5kbGUoZmlsdGVyLCBoYW5kbGVyKTtcbiAgICAgIGVsZW1lbnQuZG9tLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIHdyYXBwZWQsIHVzZUNhcHR1cmUpO1xuICAgICAgcmV0dXJuIHsgdW5iaW5kOiBjdXJyeSh1bmJpbmQsIGVsZW1lbnQsIGV2ZW50LCB3cmFwcGVkLCB1c2VDYXB0dXJlKSB9O1xuICAgIH07XG4gICAgY29uc3QgYmluZCQxID0gKGVsZW1lbnQsIGV2ZW50LCBmaWx0ZXIsIGhhbmRsZXIpID0+IGJpbmRlcihlbGVtZW50LCBldmVudCwgZmlsdGVyLCBoYW5kbGVyLCBmYWxzZSk7XG4gICAgY29uc3QgdW5iaW5kID0gKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCB1c2VDYXB0dXJlKSA9PiB7XG4gICAgICBlbGVtZW50LmRvbS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLCB1c2VDYXB0dXJlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmlsdGVyID0gYWx3YXlzO1xuICAgIGNvbnN0IGJpbmQgPSAoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIpID0+IGJpbmQkMShlbGVtZW50LCBldmVudCwgZmlsdGVyLCBoYW5kbGVyKTtcbiAgICBjb25zdCBmcm9tUmF3RXZlbnQgPSBmcm9tUmF3RXZlbnQkMTtcblxuICAgIGNvbnN0IGhhc0ludGVybmFsVGFyZ2V0ID0gZSA9PiAhaGFzKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGUudGFyZ2V0KSwgJ2VwaG94LXNub29rZXItcmVzaXplci1iYXInKTtcbiAgICBjb25zdCBUYWJsZUNlbGxTZWxlY3Rpb25IYW5kbGVyID0gKGVkaXRvciwgcmVzaXplSGFuZGxlcikgPT4ge1xuICAgICAgY29uc3QgY2VsbFNlbGVjdGlvbiA9IFNlbGVjdGlvbnMoKCkgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSksICgpID0+IGdldFNlbGVjdGlvbkNlbGwoZ2V0U2VsZWN0aW9uU3RhcnQoZWRpdG9yKSwgZ2V0SXNSb290KGVkaXRvcikpLCBlcGhlbWVyYS5zZWxlY3RlZFNlbGVjdG9yKTtcbiAgICAgIGNvbnN0IG9uU2VsZWN0aW9uID0gKGNlbGxzLCBzdGFydCwgZmluaXNoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhYmxlT3B0ID0gdGFibGUoc3RhcnQpO1xuICAgICAgICB0YWJsZU9wdC5lYWNoKHRhYmxlID0+IHtcbiAgICAgICAgICBjb25zdCBjbG9uZUZvcm1hdHMgPSBnZXRUYWJsZUNsb25lRWxlbWVudHMoZWRpdG9yKTtcbiAgICAgICAgICBjb25zdCBnZW5lcmF0b3JzID0gY2VsbE9wZXJhdGlvbnMobm9vcCwgU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldERvYygpKSwgY2xvbmVGb3JtYXRzKTtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxzID0gZ2V0Q2VsbHNGcm9tU2VsZWN0aW9uKGVkaXRvcik7XG4gICAgICAgICAgY29uc3Qgb3RoZXJDZWxscyA9IGdldE90aGVyQ2VsbHModGFibGUsIHsgc2VsZWN0aW9uOiBzZWxlY3RlZENlbGxzIH0sIGdlbmVyYXRvcnMpO1xuICAgICAgICAgIGZpcmVUYWJsZVNlbGVjdGlvbkNoYW5nZShlZGl0b3IsIGNlbGxzLCBzdGFydCwgZmluaXNoLCBvdGhlckNlbGxzKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25DbGVhciA9ICgpID0+IGZpcmVUYWJsZVNlbGVjdGlvbkNsZWFyKGVkaXRvcik7XG4gICAgICBjb25zdCBhbm5vdGF0aW9ucyA9IFNlbGVjdGlvbkFubm90YXRpb24uYnlBdHRyKGVwaGVtZXJhLCBvblNlbGVjdGlvbiwgb25DbGVhcik7XG4gICAgICBlZGl0b3Iub24oJ2luaXQnLCBfZSA9PiB7XG4gICAgICAgIGNvbnN0IHdpbiA9IGVkaXRvci5nZXRXaW4oKTtcbiAgICAgICAgY29uc3QgYm9keSA9IGdldEJvZHkoZWRpdG9yKTtcbiAgICAgICAgY29uc3QgaXNSb290ID0gZ2V0SXNSb290KGVkaXRvcik7XG4gICAgICAgIGNvbnN0IHN5bmNTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2VsID0gZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgICAgICBjb25zdCBzdGFydCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHNlbC5nZXRTdGFydCgpKTtcbiAgICAgICAgICBjb25zdCBlbmQgPSBTdWdhckVsZW1lbnQuZnJvbURvbShzZWwuZ2V0RW5kKCkpO1xuICAgICAgICAgIGNvbnN0IHNoYXJlZCA9IHNoYXJlZE9uZSh0YWJsZSwgW1xuICAgICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgICBlbmRcbiAgICAgICAgICBdKTtcbiAgICAgICAgICBzaGFyZWQuZm9sZCgoKSA9PiBhbm5vdGF0aW9ucy5jbGVhcihib2R5KSwgbm9vcCk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG1vdXNlSGFuZGxlcnMgPSBtb3VzZSh3aW4sIGJvZHksIGlzUm9vdCwgYW5ub3RhdGlvbnMpO1xuICAgICAgICBjb25zdCBrZXlIYW5kbGVycyA9IGtleWJvYXJkKHdpbiwgYm9keSwgaXNSb290LCBhbm5vdGF0aW9ucyk7XG4gICAgICAgIGNvbnN0IGV4dGVybmFsJDEgPSBleHRlcm5hbCh3aW4sIGJvZHksIGlzUm9vdCwgYW5ub3RhdGlvbnMpO1xuICAgICAgICBjb25zdCBoYXNTaGlmdEtleSA9IGV2ZW50ID0+IGV2ZW50LnJhdy5zaGlmdEtleSA9PT0gdHJ1ZTtcbiAgICAgICAgZWRpdG9yLm9uKCdUYWJsZVNlbGVjdG9yQ2hhbmdlJywgZSA9PiBleHRlcm5hbCQxKGUuc3RhcnQsIGUuZmluaXNoKSk7XG4gICAgICAgIGNvbnN0IGhhbmRsZVJlc3BvbnNlID0gKGV2ZW50LCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmICghaGFzU2hpZnRLZXkoZXZlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXNwb25zZS5raWxsKSB7XG4gICAgICAgICAgICBldmVudC5raWxsKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3BvbnNlLnNlbGVjdGlvbi5lYWNoKG5zID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0aXZlID0gU2ltU2VsZWN0aW9uLnJlbGF0aXZlKG5zLnN0YXJ0LCBucy5maW5pc2gpO1xuICAgICAgICAgICAgY29uc3Qgcm5nID0gYXNMdHJSYW5nZSh3aW4sIHJlbGF0aXZlKTtcbiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGtleXVwID0gZXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IHdyYXBwZWRFdmVudCA9IGZyb21SYXdFdmVudChldmVudCk7XG4gICAgICAgICAgaWYgKHdyYXBwZWRFdmVudC5yYXcuc2hpZnRLZXkgJiYgaXNOYXZpZ2F0aW9uKHdyYXBwZWRFdmVudC5yYXcud2hpY2gpKSB7XG4gICAgICAgICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBTdWdhckVsZW1lbnQuZnJvbURvbShybmcuc3RhcnRDb250YWluZXIpO1xuICAgICAgICAgICAgY29uc3QgZW5kID0gU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLmVuZENvbnRhaW5lcik7XG4gICAgICAgICAgICBrZXlIYW5kbGVycy5rZXl1cCh3cmFwcGVkRXZlbnQsIHN0YXJ0LCBybmcuc3RhcnRPZmZzZXQsIGVuZCwgcm5nLmVuZE9mZnNldCkuZWFjaChyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgIGhhbmRsZVJlc3BvbnNlKHdyYXBwZWRFdmVudCwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBrZXlkb3duID0gZXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IHdyYXBwZWRFdmVudCA9IGZyb21SYXdFdmVudChldmVudCk7XG4gICAgICAgICAgcmVzaXplSGFuZGxlci5oaWRlKCk7XG4gICAgICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgICAgICBjb25zdCBzdGFydCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJuZy5zdGFydENvbnRhaW5lcik7XG4gICAgICAgICAgY29uc3QgZW5kID0gU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLmVuZENvbnRhaW5lcik7XG4gICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gb25EaXJlY3Rpb24obHRyLCBydGwpKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5zZWxlY3Rpb24uZ2V0U3RhcnQoKSkpO1xuICAgICAgICAgIGtleUhhbmRsZXJzLmtleWRvd24od3JhcHBlZEV2ZW50LCBzdGFydCwgcm5nLnN0YXJ0T2Zmc2V0LCBlbmQsIHJuZy5lbmRPZmZzZXQsIGRpcmVjdGlvbikuZWFjaChyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICBoYW5kbGVSZXNwb25zZSh3cmFwcGVkRXZlbnQsIHJlc3BvbnNlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXNpemVIYW5kbGVyLnNob3coKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaXNMZWZ0TW91c2UgPSByYXcgPT4gcmF3LmJ1dHRvbiA9PT0gMDtcbiAgICAgICAgY29uc3QgaXNMZWZ0QnV0dG9uUHJlc3NlZCA9IHJhdyA9PiB7XG4gICAgICAgICAgaWYgKHJhdy5idXR0b25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gKHJhdy5idXR0b25zICYgMSkgIT09IDA7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGRyYWdTdGFydCA9IF9lID0+IHtcbiAgICAgICAgICBtb3VzZUhhbmRsZXJzLmNsZWFyc3RhdGUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbW91c2VEb3duID0gZSA9PiB7XG4gICAgICAgICAgaWYgKGlzTGVmdE1vdXNlKGUpICYmIGhhc0ludGVybmFsVGFyZ2V0KGUpKSB7XG4gICAgICAgICAgICBtb3VzZUhhbmRsZXJzLm1vdXNlZG93bihmcm9tUmF3RXZlbnQoZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbW91c2VPdmVyID0gZSA9PiB7XG4gICAgICAgICAgaWYgKGlzTGVmdEJ1dHRvblByZXNzZWQoZSkgJiYgaGFzSW50ZXJuYWxUYXJnZXQoZSkpIHtcbiAgICAgICAgICAgIG1vdXNlSGFuZGxlcnMubW91c2VvdmVyKGZyb21SYXdFdmVudChlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBtb3VzZVVwID0gZSA9PiB7XG4gICAgICAgICAgaWYgKGlzTGVmdE1vdXNlKGUpICYmIGhhc0ludGVybmFsVGFyZ2V0KGUpKSB7XG4gICAgICAgICAgICBtb3VzZUhhbmRsZXJzLm1vdXNldXAoZnJvbVJhd0V2ZW50KGUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGdldERvdWJsZVRhcCA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBsYXN0VGFyZ2V0ID0gQ2VsbChTdWdhckVsZW1lbnQuZnJvbURvbShib2R5KSk7XG4gICAgICAgICAgY29uc3QgbGFzdFRpbWVTdGFtcCA9IENlbGwoMCk7XG4gICAgICAgICAgY29uc3QgdG91Y2hFbmQgPSB0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHQudGFyZ2V0KTtcbiAgICAgICAgICAgIGlmIChpc1RhZygndGQnKSh0YXJnZXQpIHx8IGlzVGFnKCd0aCcpKHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgbFQgPSBsYXN0VGFyZ2V0LmdldCgpO1xuICAgICAgICAgICAgICBjb25zdCBsVFMgPSBsYXN0VGltZVN0YW1wLmdldCgpO1xuICAgICAgICAgICAgICBpZiAoZXEkMShsVCwgdGFyZ2V0KSAmJiB0LnRpbWVTdGFtcCAtIGxUUyA8IDMwMCkge1xuICAgICAgICAgICAgICAgIHQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBleHRlcm5hbCQxKHRhcmdldCwgdGFyZ2V0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdFRhcmdldC5zZXQodGFyZ2V0KTtcbiAgICAgICAgICAgIGxhc3RUaW1lU3RhbXAuc2V0KHQudGltZVN0YW1wKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB7IHRvdWNoRW5kIH07XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGRvdWJsZVRhcCA9IGdldERvdWJsZVRhcCgpO1xuICAgICAgICBlZGl0b3Iub24oJ2RyYWdzdGFydCcsIGRyYWdTdGFydCk7XG4gICAgICAgIGVkaXRvci5vbignbW91c2Vkb3duJywgbW91c2VEb3duKTtcbiAgICAgICAgZWRpdG9yLm9uKCdtb3VzZW92ZXInLCBtb3VzZU92ZXIpO1xuICAgICAgICBlZGl0b3Iub24oJ21vdXNldXAnLCBtb3VzZVVwKTtcbiAgICAgICAgZWRpdG9yLm9uKCd0b3VjaGVuZCcsIGRvdWJsZVRhcC50b3VjaEVuZCk7XG4gICAgICAgIGVkaXRvci5vbigna2V5dXAnLCBrZXl1cCk7XG4gICAgICAgIGVkaXRvci5vbigna2V5ZG93bicsIGtleWRvd24pO1xuICAgICAgICBlZGl0b3Iub24oJ05vZGVDaGFuZ2UnLCBzeW5jU2VsZWN0aW9uKTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdQcmVJbml0JywgKCkgPT4ge1xuICAgICAgICBlZGl0b3Iuc2VyaWFsaXplci5hZGRUZW1wQXR0cihlcGhlbWVyYS5maXJzdFNlbGVjdGVkKTtcbiAgICAgICAgZWRpdG9yLnNlcmlhbGl6ZXIuYWRkVGVtcEF0dHIoZXBoZW1lcmEubGFzdFNlbGVjdGVkKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2xlYXJTZWxlY3RlZENlbGxzID0gY29udGFpbmVyID0+IGFubm90YXRpb25zLmNsZWFyKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGNvbnRhaW5lcikpO1xuICAgICAgY29uc3QgZ2V0U2VsZWN0ZWRDZWxscyA9ICgpID0+IGZvbGQoY2VsbFNlbGVjdGlvbi5nZXQoKSwgY29uc3RhbnQoW10pLCBjZWxscyA9PiB7XG4gICAgICAgIHJldHVybiBtYXAkMShjZWxscywgY2VsbCA9PiBjZWxsLmRvbSk7XG4gICAgICB9LCBjZWxsID0+IFtjZWxsLmRvbV0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0U2VsZWN0ZWRDZWxscyxcbiAgICAgICAgY2xlYXJTZWxlY3RlZENlbGxzXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBFdmVudCA9IGZpZWxkcyA9PiB7XG4gICAgICBsZXQgaGFuZGxlcnMgPSBbXTtcbiAgICAgIGNvbnN0IGJpbmQgPSBoYW5kbGVyID0+IHtcbiAgICAgICAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXZlbnQgYmluZCBlcnJvcjogdW5kZWZpbmVkIGhhbmRsZXInKTtcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVuYmluZCA9IGhhbmRsZXIgPT4ge1xuICAgICAgICBoYW5kbGVycyA9IGZpbHRlciQyKGhhbmRsZXJzLCBoID0+IHtcbiAgICAgICAgICByZXR1cm4gaCAhPT0gaGFuZGxlcjtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdHJpZ2dlciA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0ge307XG4gICAgICAgIGVhY2gkMihmaWVsZHMsIChuYW1lLCBpKSA9PiB7XG4gICAgICAgICAgZXZlbnRbbmFtZV0gPSBhcmdzW2ldO1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaCQyKGhhbmRsZXJzLCBoYW5kbGVyID0+IHtcbiAgICAgICAgICBoYW5kbGVyKGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmluZCxcbiAgICAgICAgdW5iaW5kLFxuICAgICAgICB0cmlnZ2VyXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGUkMSA9IHR5cGVEZWZzID0+IHtcbiAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gbWFwKHR5cGVEZWZzLCBldmVudCA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYmluZDogZXZlbnQuYmluZCxcbiAgICAgICAgICB1bmJpbmQ6IGV2ZW50LnVuYmluZFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICBjb25zdCB0cmlnZ2VyID0gbWFwKHR5cGVEZWZzLCBldmVudCA9PiB7XG4gICAgICAgIHJldHVybiBldmVudC50cmlnZ2VyO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWdpc3RyeSxcbiAgICAgICAgdHJpZ2dlclxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFzdCA9IChmbiwgcmF0ZSkgPT4ge1xuICAgICAgbGV0IHRpbWVyID0gbnVsbDtcbiAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFpc051bGwodGltZXIpKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCB0aHJvdHRsZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGNhbmNlbCgpO1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgfSwgcmF0ZSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2FuY2VsLFxuICAgICAgICB0aHJvdHRsZVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc29ydCA9IGFyciA9PiB7XG4gICAgICByZXR1cm4gYXJyLnNsaWNlKDApLnNvcnQoKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlcU1lc3NhZ2UgPSAocmVxdWlyZWQsIGtleXMpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQWxsIHJlcXVpcmVkIGtleXMgKCcgKyBzb3J0KHJlcXVpcmVkKS5qb2luKCcsICcpICsgJykgd2VyZSBub3Qgc3BlY2lmaWVkLiBTcGVjaWZpZWQga2V5cyB3ZXJlOiAnICsgc29ydChrZXlzKS5qb2luKCcsICcpICsgJy4nKTtcbiAgICB9O1xuICAgIGNvbnN0IHVuc3VwcE1lc3NhZ2UgPSB1bnN1cHBvcnRlZCA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGtleXMgZm9yIG9iamVjdDogJyArIHNvcnQodW5zdXBwb3J0ZWQpLmpvaW4oJywgJykpO1xuICAgIH07XG4gICAgY29uc3QgdmFsaWRhdGVTdHJBcnIgPSAobGFiZWwsIGFycmF5KSA9PiB7XG4gICAgICBpZiAoIWlzQXJyYXkoYXJyYXkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlICcgKyBsYWJlbCArICcgZmllbGRzIG11c3QgYmUgYW4gYXJyYXkuIFdhczogJyArIGFycmF5ICsgJy4nKTtcbiAgICAgIH1cbiAgICAgIGVhY2gkMihhcnJheSwgYSA9PiB7XG4gICAgICAgIGlmICghaXNTdHJpbmcoYSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB2YWx1ZSAnICsgYSArICcgaW4gdGhlICcgKyBsYWJlbCArICcgZmllbGRzIHdhcyBub3QgYSBzdHJpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW52YWxpZFR5cGVNZXNzYWdlID0gKGluY29ycmVjdCwgdHlwZSkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbGwgdmFsdWVzIG5lZWQgdG8gYmUgb2YgdHlwZTogJyArIHR5cGUgKyAnLiBLZXlzICgnICsgc29ydChpbmNvcnJlY3QpLmpvaW4oJywgJykgKyAnKSB3ZXJlIG5vdC4nKTtcbiAgICB9O1xuICAgIGNvbnN0IGNoZWNrRHVwZXMgPSBldmVyeXRoaW5nID0+IHtcbiAgICAgIGNvbnN0IHNvcnRlZCA9IHNvcnQoZXZlcnl0aGluZyk7XG4gICAgICBjb25zdCBkdXBlID0gZmluZCQxKHNvcnRlZCwgKHMsIGkpID0+IHtcbiAgICAgICAgcmV0dXJuIGkgPCBzb3J0ZWQubGVuZ3RoIC0gMSAmJiBzID09PSBzb3J0ZWRbaSArIDFdO1xuICAgICAgfSk7XG4gICAgICBkdXBlLmVhY2goZCA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZpZWxkOiAnICsgZCArICcgb2NjdXJzIG1vcmUgdGhhbiBvbmNlIGluIHRoZSBjb21iaW5lZCBmaWVsZHM6IFsnICsgc29ydGVkLmpvaW4oJywgJykgKyAnXS4nKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBiYXNlID0gKGhhbmRsZVVuc3VwcG9ydGVkLCByZXF1aXJlZCkgPT4ge1xuICAgICAgcmV0dXJuIGJhc2VXaXRoKGhhbmRsZVVuc3VwcG9ydGVkLCByZXF1aXJlZCwge1xuICAgICAgICB2YWxpZGF0ZTogaXNGdW5jdGlvbixcbiAgICAgICAgbGFiZWw6ICdmdW5jdGlvbidcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYmFzZVdpdGggPSAoaGFuZGxlVW5zdXBwb3J0ZWQsIHJlcXVpcmVkLCBwcmVkKSA9PiB7XG4gICAgICBpZiAocmVxdWlyZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUgcmVxdWlyZWQgZmllbGQuJyk7XG4gICAgICB9XG4gICAgICB2YWxpZGF0ZVN0ckFycigncmVxdWlyZWQnLCByZXF1aXJlZCk7XG4gICAgICBjaGVja0R1cGVzKHJlcXVpcmVkKTtcbiAgICAgIHJldHVybiBvYmogPT4ge1xuICAgICAgICBjb25zdCBrZXlzJDEgPSBrZXlzKG9iaik7XG4gICAgICAgIGNvbnN0IGFsbFJlcWQgPSBmb3JhbGwocmVxdWlyZWQsIHJlcSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRhaW5zJDIoa2V5cyQxLCByZXEpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFhbGxSZXFkKSB7XG4gICAgICAgICAgcmVxTWVzc2FnZShyZXF1aXJlZCwga2V5cyQxKTtcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVVbnN1cHBvcnRlZChyZXF1aXJlZCwga2V5cyQxKTtcbiAgICAgICAgY29uc3QgaW52YWxpZEtleXMgPSBmaWx0ZXIkMihyZXF1aXJlZCwga2V5ID0+IHtcbiAgICAgICAgICByZXR1cm4gIXByZWQudmFsaWRhdGUob2JqW2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaW52YWxpZEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGludmFsaWRUeXBlTWVzc2FnZShpbnZhbGlkS2V5cywgcHJlZC5sYWJlbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVFeGFjdCA9IChyZXF1aXJlZCwga2V5cykgPT4ge1xuICAgICAgY29uc3QgdW5zdXBwb3J0ZWQgPSBmaWx0ZXIkMihrZXlzLCBrZXkgPT4ge1xuICAgICAgICByZXR1cm4gIWNvbnRhaW5zJDIocmVxdWlyZWQsIGtleSk7XG4gICAgICB9KTtcbiAgICAgIGlmICh1bnN1cHBvcnRlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHVuc3VwcE1lc3NhZ2UodW5zdXBwb3J0ZWQpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZXhhY3RseSA9IHJlcXVpcmVkID0+IGJhc2UoaGFuZGxlRXhhY3QsIHJlcXVpcmVkKTtcblxuICAgIGNvbnN0IERyYWdNb2RlID0gZXhhY3RseShbXG4gICAgICAnY29tcGFyZScsXG4gICAgICAnZXh0cmFjdCcsXG4gICAgICAnbXV0YXRlJyxcbiAgICAgICdzaW5rJ1xuICAgIF0pO1xuICAgIGNvbnN0IERyYWdTaW5rID0gZXhhY3RseShbXG4gICAgICAnZWxlbWVudCcsXG4gICAgICAnc3RhcnQnLFxuICAgICAgJ3N0b3AnLFxuICAgICAgJ2Rlc3Ryb3knXG4gICAgXSk7XG4gICAgY29uc3QgRHJhZ0FwaSA9IGV4YWN0bHkoW1xuICAgICAgJ2ZvcmNlRHJvcCcsXG4gICAgICAnZHJvcCcsXG4gICAgICAnbW92ZScsXG4gICAgICAnZGVsYXlEcm9wJ1xuICAgIF0pO1xuXG4gICAgY29uc3QgSW5EcmFnID0gKCkgPT4ge1xuICAgICAgbGV0IHByZXZpb3VzID0gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgY29uc3QgcmVzZXQgPSAoKSA9PiB7XG4gICAgICAgIHByZXZpb3VzID0gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVwZGF0ZSA9IChtb2RlLCBudSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwcmV2aW91cy5tYXAob2xkID0+IHtcbiAgICAgICAgICByZXR1cm4gbW9kZS5jb21wYXJlKG9sZCwgbnUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcHJldmlvdXMgPSBPcHRpb25hbC5zb21lKG51KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgICBjb25zdCBvbkV2ZW50ID0gKGV2ZW50LCBtb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGFPcHRpb24gPSBtb2RlLmV4dHJhY3QoZXZlbnQpO1xuICAgICAgICBkYXRhT3B0aW9uLmVhY2goZGF0YSA9PiB7XG4gICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdXBkYXRlKG1vZGUsIGRhdGEpO1xuICAgICAgICAgIG9mZnNldC5lYWNoKGQgPT4ge1xuICAgICAgICAgICAgZXZlbnRzLnRyaWdnZXIubW92ZShkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZXZlbnRzID0gY3JlYXRlJDEoeyBtb3ZlOiBFdmVudChbJ2luZm8nXSkgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvbkV2ZW50LFxuICAgICAgICByZXNldCxcbiAgICAgICAgZXZlbnRzOiBldmVudHMucmVnaXN0cnlcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IE5vRHJhZyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IGNyZWF0ZSQxKHsgbW92ZTogRXZlbnQoWydpbmZvJ10pIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb25FdmVudDogbm9vcCxcbiAgICAgICAgcmVzZXQ6IG5vb3AsXG4gICAgICAgIGV2ZW50czogZXZlbnRzLnJlZ2lzdHJ5XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBNb3ZlbWVudCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IG5vRHJhZ1N0YXRlID0gTm9EcmFnKCk7XG4gICAgICBjb25zdCBpbkRyYWdTdGF0ZSA9IEluRHJhZygpO1xuICAgICAgbGV0IGRyYWdTdGF0ZSA9IG5vRHJhZ1N0YXRlO1xuICAgICAgY29uc3Qgb24gPSAoKSA9PiB7XG4gICAgICAgIGRyYWdTdGF0ZS5yZXNldCgpO1xuICAgICAgICBkcmFnU3RhdGUgPSBpbkRyYWdTdGF0ZTtcbiAgICAgIH07XG4gICAgICBjb25zdCBvZmYgPSAoKSA9PiB7XG4gICAgICAgIGRyYWdTdGF0ZS5yZXNldCgpO1xuICAgICAgICBkcmFnU3RhdGUgPSBub0RyYWdTdGF0ZTtcbiAgICAgIH07XG4gICAgICBjb25zdCBvbkV2ZW50ID0gKGV2ZW50LCBtb2RlKSA9PiB7XG4gICAgICAgIGRyYWdTdGF0ZS5vbkV2ZW50KGV2ZW50LCBtb2RlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc09uID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gZHJhZ1N0YXRlID09PSBpbkRyYWdTdGF0ZTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvbixcbiAgICAgICAgb2ZmLFxuICAgICAgICBpc09uLFxuICAgICAgICBvbkV2ZW50LFxuICAgICAgICBldmVudHM6IGluRHJhZ1N0YXRlLmV2ZW50c1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0dXAgPSAobXV0YXRpb24sIG1vZGUsIHNldHRpbmdzKSA9PiB7XG4gICAgICBsZXQgYWN0aXZlID0gZmFsc2U7XG4gICAgICBjb25zdCBldmVudHMgPSBjcmVhdGUkMSh7XG4gICAgICAgIHN0YXJ0OiBFdmVudChbXSksXG4gICAgICAgIHN0b3A6IEV2ZW50KFtdKVxuICAgICAgfSk7XG4gICAgICBjb25zdCBtb3ZlbWVudCA9IE1vdmVtZW50KCk7XG4gICAgICBjb25zdCBkcm9wID0gKCkgPT4ge1xuICAgICAgICBzaW5rLnN0b3AoKTtcbiAgICAgICAgaWYgKG1vdmVtZW50LmlzT24oKSkge1xuICAgICAgICAgIG1vdmVtZW50Lm9mZigpO1xuICAgICAgICAgIGV2ZW50cy50cmlnZ2VyLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHRocm90dGxlZERyb3AgPSBsYXN0KGRyb3AsIDIwMCk7XG4gICAgICBjb25zdCBnbyA9IHBhcmVudCA9PiB7XG4gICAgICAgIHNpbmsuc3RhcnQocGFyZW50KTtcbiAgICAgICAgbW92ZW1lbnQub24oKTtcbiAgICAgICAgZXZlbnRzLnRyaWdnZXIuc3RhcnQoKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBtb3VzZW1vdmUgPSBldmVudCA9PiB7XG4gICAgICAgIHRocm90dGxlZERyb3AuY2FuY2VsKCk7XG4gICAgICAgIG1vdmVtZW50Lm9uRXZlbnQoZXZlbnQsIG1vZGUpO1xuICAgICAgfTtcbiAgICAgIG1vdmVtZW50LmV2ZW50cy5tb3ZlLmJpbmQoZXZlbnQgPT4ge1xuICAgICAgICBtb2RlLm11dGF0ZShtdXRhdGlvbiwgZXZlbnQuaW5mbyk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG9uID0gKCkgPT4ge1xuICAgICAgICBhY3RpdmUgPSB0cnVlO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG9mZiA9ICgpID0+IHtcbiAgICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNBY3RpdmUgPSAoKSA9PiBhY3RpdmU7XG4gICAgICBjb25zdCBydW5JZkFjdGl2ZSA9IGYgPT4ge1xuICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICAgICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzaW5rID0gbW9kZS5zaW5rKERyYWdBcGkoe1xuICAgICAgICBmb3JjZURyb3A6IGRyb3AsXG4gICAgICAgIGRyb3A6IHJ1bklmQWN0aXZlKGRyb3ApLFxuICAgICAgICBtb3ZlOiBydW5JZkFjdGl2ZShtb3VzZW1vdmUpLFxuICAgICAgICBkZWxheURyb3A6IHJ1bklmQWN0aXZlKHRocm90dGxlZERyb3AudGhyb3R0bGUpXG4gICAgICB9KSwgc2V0dGluZ3MpO1xuICAgICAgY29uc3QgZGVzdHJveSA9ICgpID0+IHtcbiAgICAgICAgc2luay5kZXN0cm95KCk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWxlbWVudDogc2luay5lbGVtZW50LFxuICAgICAgICBnbyxcbiAgICAgICAgb24sXG4gICAgICAgIG9mZixcbiAgICAgICAgaXNBY3RpdmUsXG4gICAgICAgIGRlc3Ryb3ksXG4gICAgICAgIGV2ZW50czogZXZlbnRzLnJlZ2lzdHJ5XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBjc3MgPSBuYW1lc3BhY2UgPT4ge1xuICAgICAgY29uc3QgZGFzaE5hbWVzcGFjZSA9IG5hbWVzcGFjZS5yZXBsYWNlKC9cXC4vZywgJy0nKTtcbiAgICAgIGNvbnN0IHJlc29sdmUgPSBzdHIgPT4ge1xuICAgICAgICByZXR1cm4gZGFzaE5hbWVzcGFjZSArICctJyArIHN0cjtcbiAgICAgIH07XG4gICAgICByZXR1cm4geyByZXNvbHZlIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHN0eWxlcyQxID0gY3NzKCdlcGhveC1kcmFnc3RlcicpO1xuICAgIGNvbnN0IHJlc29sdmUkMSA9IHN0eWxlcyQxLnJlc29sdmU7XG5cbiAgICBjb25zdCBCbG9ja2VyID0gb3B0aW9ucyA9PiB7XG4gICAgICBjb25zdCBzZXR0aW5ncyA9IHtcbiAgICAgICAgbGF5ZXJDbGFzczogcmVzb2x2ZSQxKCdibG9ja2VyJyksXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICAgIH07XG4gICAgICBjb25zdCBkaXYgPSBTdWdhckVsZW1lbnQuZnJvbVRhZygnZGl2Jyk7XG4gICAgICBzZXQkMihkaXYsICdyb2xlJywgJ3ByZXNlbnRhdGlvbicpO1xuICAgICAgc2V0QWxsKGRpdiwge1xuICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgbGVmdDogJzBweCcsXG4gICAgICAgIHRvcDogJzBweCcsXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIGhlaWdodDogJzEwMCUnXG4gICAgICB9KTtcbiAgICAgIGFkZChkaXYsIHJlc29sdmUkMSgnYmxvY2tlcicpKTtcbiAgICAgIGFkZChkaXYsIHNldHRpbmdzLmxheWVyQ2xhc3MpO1xuICAgICAgY29uc3QgZWxlbWVudCA9IGNvbnN0YW50KGRpdik7XG4gICAgICBjb25zdCBkZXN0cm95ID0gKCkgPT4ge1xuICAgICAgICByZW1vdmUkNihkaXYpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGRlc3Ryb3lcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbXBhcmUgPSAob2xkLCBudSkgPT4ge1xuICAgICAgcmV0dXJuIFN1Z2FyUG9zaXRpb24obnUubGVmdCAtIG9sZC5sZWZ0LCBudS50b3AgLSBvbGQudG9wKTtcbiAgICB9O1xuICAgIGNvbnN0IGV4dHJhY3QgPSBldmVudCA9PiB7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShTdWdhclBvc2l0aW9uKGV2ZW50LngsIGV2ZW50LnkpKTtcbiAgICB9O1xuICAgIGNvbnN0IG11dGF0ZSA9IChtdXRhdGlvbiwgaW5mbykgPT4ge1xuICAgICAgbXV0YXRpb24ubXV0YXRlKGluZm8ubGVmdCwgaW5mby50b3ApO1xuICAgIH07XG4gICAgY29uc3Qgc2luayA9IChkcmFnQXBpLCBzZXR0aW5ncykgPT4ge1xuICAgICAgY29uc3QgYmxvY2tlciA9IEJsb2NrZXIoc2V0dGluZ3MpO1xuICAgICAgY29uc3QgbWRvd24gPSBiaW5kKGJsb2NrZXIuZWxlbWVudCgpLCAnbW91c2Vkb3duJywgZHJhZ0FwaS5mb3JjZURyb3ApO1xuICAgICAgY29uc3QgbXVwID0gYmluZChibG9ja2VyLmVsZW1lbnQoKSwgJ21vdXNldXAnLCBkcmFnQXBpLmRyb3ApO1xuICAgICAgY29uc3QgbW1vdmUgPSBiaW5kKGJsb2NrZXIuZWxlbWVudCgpLCAnbW91c2Vtb3ZlJywgZHJhZ0FwaS5tb3ZlKTtcbiAgICAgIGNvbnN0IG1vdXQgPSBiaW5kKGJsb2NrZXIuZWxlbWVudCgpLCAnbW91c2VvdXQnLCBkcmFnQXBpLmRlbGF5RHJvcCk7XG4gICAgICBjb25zdCBkZXN0cm95ID0gKCkgPT4ge1xuICAgICAgICBibG9ja2VyLmRlc3Ryb3koKTtcbiAgICAgICAgbXVwLnVuYmluZCgpO1xuICAgICAgICBtbW92ZS51bmJpbmQoKTtcbiAgICAgICAgbW91dC51bmJpbmQoKTtcbiAgICAgICAgbWRvd24udW5iaW5kKCk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc3RhcnQgPSBwYXJlbnQgPT4ge1xuICAgICAgICBhcHBlbmQkMShwYXJlbnQsIGJsb2NrZXIuZWxlbWVudCgpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzdG9wID0gKCkgPT4ge1xuICAgICAgICByZW1vdmUkNihibG9ja2VyLmVsZW1lbnQoKSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIERyYWdTaW5rKHtcbiAgICAgICAgZWxlbWVudDogYmxvY2tlci5lbGVtZW50LFxuICAgICAgICBzdGFydCxcbiAgICAgICAgc3RvcCxcbiAgICAgICAgZGVzdHJveVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgTW91c2VEcmFnID0gRHJhZ01vZGUoe1xuICAgICAgY29tcGFyZSxcbiAgICAgIGV4dHJhY3QsXG4gICAgICBzaW5rLFxuICAgICAgbXV0YXRlXG4gICAgfSk7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm0gPSAobXV0YXRpb24sIHNldHRpbmdzID0ge30pID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGNvbnN0IG1vZGUgPSAoX2EgPSBzZXR0aW5ncy5tb2RlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBNb3VzZURyYWc7XG4gICAgICByZXR1cm4gc2V0dXAobXV0YXRpb24sIG1vZGUsIHNldHRpbmdzKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3R5bGVzID0gY3NzKCdlcGhveC1zbm9va2VyJyk7XG4gICAgY29uc3QgcmVzb2x2ZSA9IHN0eWxlcy5yZXNvbHZlO1xuXG4gICAgY29uc3QgTXV0YXRpb24gPSAoKSA9PiB7XG4gICAgICBjb25zdCBldmVudHMgPSBjcmVhdGUkMSh7XG4gICAgICAgIGRyYWc6IEV2ZW50KFtcbiAgICAgICAgICAneERlbHRhJyxcbiAgICAgICAgICAneURlbHRhJ1xuICAgICAgICBdKVxuICAgICAgfSk7XG4gICAgICBjb25zdCBtdXRhdGUgPSAoeCwgeSkgPT4ge1xuICAgICAgICBldmVudHMudHJpZ2dlci5kcmFnKHgsIHkpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG11dGF0ZSxcbiAgICAgICAgZXZlbnRzOiBldmVudHMucmVnaXN0cnlcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IEJhck11dGF0aW9uID0gKCkgPT4ge1xuICAgICAgY29uc3QgZXZlbnRzID0gY3JlYXRlJDEoe1xuICAgICAgICBkcmFnOiBFdmVudChbXG4gICAgICAgICAgJ3hEZWx0YScsXG4gICAgICAgICAgJ3lEZWx0YScsXG4gICAgICAgICAgJ3RhcmdldCdcbiAgICAgICAgXSlcbiAgICAgIH0pO1xuICAgICAgbGV0IHRhcmdldCA9IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIGNvbnN0IGRlbGVnYXRlID0gTXV0YXRpb24oKTtcbiAgICAgIGRlbGVnYXRlLmV2ZW50cy5kcmFnLmJpbmQoZXZlbnQgPT4ge1xuICAgICAgICB0YXJnZXQuZWFjaCh0ID0+IHtcbiAgICAgICAgICBldmVudHMudHJpZ2dlci5kcmFnKGV2ZW50LnhEZWx0YSwgZXZlbnQueURlbHRhLCB0KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGFzc2lnbiA9IHQgPT4ge1xuICAgICAgICB0YXJnZXQgPSBPcHRpb25hbC5zb21lKHQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldCA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhc3NpZ24sXG4gICAgICAgIGdldCxcbiAgICAgICAgbXV0YXRlOiBkZWxlZ2F0ZS5tdXRhdGUsXG4gICAgICAgIGV2ZW50czogZXZlbnRzLnJlZ2lzdHJ5XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBjb2wgPSAoY29sdW1uLCB4LCB5LCB3LCBoKSA9PiB7XG4gICAgICBjb25zdCBiYXIgPSBTdWdhckVsZW1lbnQuZnJvbVRhZygnZGl2Jyk7XG4gICAgICBzZXRBbGwoYmFyLCB7XG4gICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICBsZWZ0OiB4IC0gdyAvIDIgKyAncHgnLFxuICAgICAgICB0b3A6IHkgKyAncHgnLFxuICAgICAgICBoZWlnaHQ6IGggKyAncHgnLFxuICAgICAgICB3aWR0aDogdyArICdweCdcbiAgICAgIH0pO1xuICAgICAgc2V0QWxsJDEoYmFyLCB7XG4gICAgICAgICdkYXRhLWNvbHVtbic6IGNvbHVtbixcbiAgICAgICAgJ3JvbGUnOiAncHJlc2VudGF0aW9uJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYmFyO1xuICAgIH07XG4gICAgY29uc3Qgcm93ID0gKHIsIHgsIHksIHcsIGgpID0+IHtcbiAgICAgIGNvbnN0IGJhciA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdkaXYnKTtcbiAgICAgIHNldEFsbChiYXIsIHtcbiAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgIGxlZnQ6IHggKyAncHgnLFxuICAgICAgICB0b3A6IHkgLSBoIC8gMiArICdweCcsXG4gICAgICAgIGhlaWdodDogaCArICdweCcsXG4gICAgICAgIHdpZHRoOiB3ICsgJ3B4J1xuICAgICAgfSk7XG4gICAgICBzZXRBbGwkMShiYXIsIHtcbiAgICAgICAgJ2RhdGEtcm93JzogcixcbiAgICAgICAgJ3JvbGUnOiAncHJlc2VudGF0aW9uJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYmFyO1xuICAgIH07XG5cbiAgICBjb25zdCByZXNpemVCYXIgPSByZXNvbHZlKCdyZXNpemVyLWJhcicpO1xuICAgIGNvbnN0IHJlc2l6ZVJvd0JhciA9IHJlc29sdmUoJ3Jlc2l6ZXItcm93cycpO1xuICAgIGNvbnN0IHJlc2l6ZUNvbEJhciA9IHJlc29sdmUoJ3Jlc2l6ZXItY29scycpO1xuICAgIGNvbnN0IEJBUl9USElDS05FU1MgPSA3O1xuICAgIGNvbnN0IHJlc2l6YWJsZVJvd3MgPSAod2FyZWhvdXNlLCBpc1Jlc2l6YWJsZSkgPT4gYmluZCQyKHdhcmVob3VzZS5hbGwsIChyb3csIGkpID0+IGlzUmVzaXphYmxlKHJvdy5lbGVtZW50KSA/IFtpXSA6IFtdKTtcbiAgICBjb25zdCByZXNpemFibGVDb2x1bW5zID0gKHdhcmVob3VzZSwgaXNSZXNpemFibGUpID0+IHtcbiAgICAgIGNvbnN0IHJlc2l6YWJsZUNvbHMgPSBbXTtcbiAgICAgIHJhbmdlJDEod2FyZWhvdXNlLmdyaWQuY29sdW1ucywgaW5kZXggPT4ge1xuICAgICAgICBjb25zdCBjb2xFbG1PcHQgPSBXYXJlaG91c2UuZ2V0Q29sdW1uQXQod2FyZWhvdXNlLCBpbmRleCkubWFwKGNvbCA9PiBjb2wuZWxlbWVudCk7XG4gICAgICAgIGlmIChjb2xFbG1PcHQuZm9yYWxsKGlzUmVzaXphYmxlKSkge1xuICAgICAgICAgIHJlc2l6YWJsZUNvbHMucHVzaChpbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZpbHRlciQyKHJlc2l6YWJsZUNvbHMsIGNvbEluZGV4ID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1uQ2VsbHMgPSBXYXJlaG91c2UuZmlsdGVySXRlbXMod2FyZWhvdXNlLCBjZWxsID0+IGNlbGwuY29sdW1uID09PSBjb2xJbmRleCk7XG4gICAgICAgIHJldHVybiBmb3JhbGwoY29sdW1uQ2VsbHMsIGNlbGwgPT4gaXNSZXNpemFibGUoY2VsbC5lbGVtZW50KSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGRlc3Ryb3kgPSB3aXJlID0+IHtcbiAgICAgIGNvbnN0IHByZXZpb3VzID0gZGVzY2VuZGFudHMod2lyZS5wYXJlbnQoKSwgJy4nICsgcmVzaXplQmFyKTtcbiAgICAgIGVhY2gkMihwcmV2aW91cywgcmVtb3ZlJDYpO1xuICAgIH07XG4gICAgY29uc3QgZHJhd0JhciA9ICh3aXJlLCBwb3NpdGlvbnMsIGNyZWF0ZSkgPT4ge1xuICAgICAgY29uc3Qgb3JpZ2luID0gd2lyZS5vcmlnaW4oKTtcbiAgICAgIGVhY2gkMihwb3NpdGlvbnMsIGNwT3B0aW9uID0+IHtcbiAgICAgICAgY3BPcHRpb24uZWFjaChjcCA9PiB7XG4gICAgICAgICAgY29uc3QgYmFyID0gY3JlYXRlKG9yaWdpbiwgY3ApO1xuICAgICAgICAgIGFkZChiYXIsIHJlc2l6ZUJhcik7XG4gICAgICAgICAgYXBwZW5kJDEod2lyZS5wYXJlbnQoKSwgYmFyKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZnJlc2hDb2wgPSAod2lyZSwgY29sUG9zaXRpb25zLCBwb3NpdGlvbiwgdGFibGVIZWlnaHQpID0+IHtcbiAgICAgIGRyYXdCYXIod2lyZSwgY29sUG9zaXRpb25zLCAob3JpZ2luLCBjcCkgPT4ge1xuICAgICAgICBjb25zdCBjb2xCYXIgPSBjb2woY3AuY29sLCBjcC54IC0gb3JpZ2luLmxlZnQsIHBvc2l0aW9uLnRvcCAtIG9yaWdpbi50b3AsIEJBUl9USElDS05FU1MsIHRhYmxlSGVpZ2h0KTtcbiAgICAgICAgYWRkKGNvbEJhciwgcmVzaXplQ29sQmFyKTtcbiAgICAgICAgcmV0dXJuIGNvbEJhcjtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVmcmVzaFJvdyA9ICh3aXJlLCByb3dQb3NpdGlvbnMsIHBvc2l0aW9uLCB0YWJsZVdpZHRoKSA9PiB7XG4gICAgICBkcmF3QmFyKHdpcmUsIHJvd1Bvc2l0aW9ucywgKG9yaWdpbiwgY3ApID0+IHtcbiAgICAgICAgY29uc3Qgcm93QmFyID0gcm93KGNwLnJvdywgcG9zaXRpb24ubGVmdCAtIG9yaWdpbi5sZWZ0LCBjcC55IC0gb3JpZ2luLnRvcCwgdGFibGVXaWR0aCwgQkFSX1RISUNLTkVTUyk7XG4gICAgICAgIGFkZChyb3dCYXIsIHJlc2l6ZVJvd0Jhcik7XG4gICAgICAgIHJldHVybiByb3dCYXI7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZnJlc2hHcmlkID0gKHdhcmhvdXNlLCB3aXJlLCB0YWJsZSwgcm93cywgY29scykgPT4ge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSBhYnNvbHV0ZSh0YWJsZSk7XG4gICAgICBjb25zdCBpc1Jlc2l6YWJsZSA9IHdpcmUuaXNSZXNpemFibGU7XG4gICAgICBjb25zdCByb3dQb3NpdGlvbnMgPSByb3dzLmxlbmd0aCA+IDAgPyBoZWlnaHQucG9zaXRpb25zKHJvd3MsIHRhYmxlKSA6IFtdO1xuICAgICAgY29uc3QgcmVzaXphYmxlUm93QmFycyA9IHJvd1Bvc2l0aW9ucy5sZW5ndGggPiAwID8gcmVzaXphYmxlUm93cyh3YXJob3VzZSwgaXNSZXNpemFibGUpIDogW107XG4gICAgICBjb25zdCByZXNpemFibGVSb3dQb3NpdGlvbnMgPSBmaWx0ZXIkMihyb3dQb3NpdGlvbnMsIChfcG9zLCBpKSA9PiBleGlzdHMocmVzaXphYmxlUm93QmFycywgYmFySW5kZXggPT4gaSA9PT0gYmFySW5kZXgpKTtcbiAgICAgIHJlZnJlc2hSb3cod2lyZSwgcmVzaXphYmxlUm93UG9zaXRpb25zLCBwb3NpdGlvbiwgZ2V0T3V0ZXIkMih0YWJsZSkpO1xuICAgICAgY29uc3QgY29sUG9zaXRpb25zID0gY29scy5sZW5ndGggPiAwID8gd2lkdGgucG9zaXRpb25zKGNvbHMsIHRhYmxlKSA6IFtdO1xuICAgICAgY29uc3QgcmVzaXphYmxlQ29sQmFycyA9IGNvbFBvc2l0aW9ucy5sZW5ndGggPiAwID8gcmVzaXphYmxlQ29sdW1ucyh3YXJob3VzZSwgaXNSZXNpemFibGUpIDogW107XG4gICAgICBjb25zdCByZXNpemFibGVDb2xQb3NpdGlvbnMgPSBmaWx0ZXIkMihjb2xQb3NpdGlvbnMsIChfcG9zLCBpKSA9PiBleGlzdHMocmVzaXphYmxlQ29sQmFycywgYmFySW5kZXggPT4gaSA9PT0gYmFySW5kZXgpKTtcbiAgICAgIHJlZnJlc2hDb2wod2lyZSwgcmVzaXphYmxlQ29sUG9zaXRpb25zLCBwb3NpdGlvbiwgZ2V0T3V0ZXIkMSh0YWJsZSkpO1xuICAgIH07XG4gICAgY29uc3QgcmVmcmVzaCA9ICh3aXJlLCB0YWJsZSkgPT4ge1xuICAgICAgZGVzdHJveSh3aXJlKTtcbiAgICAgIGlmICh3aXJlLmlzUmVzaXphYmxlKHRhYmxlKSkge1xuICAgICAgICBjb25zdCB3YXJlaG91c2UgPSBXYXJlaG91c2UuZnJvbVRhYmxlKHRhYmxlKTtcbiAgICAgICAgY29uc3Qgcm93cyQxID0gcm93cyh3YXJlaG91c2UpO1xuICAgICAgICBjb25zdCBjb2xzID0gY29sdW1ucyh3YXJlaG91c2UpO1xuICAgICAgICByZWZyZXNoR3JpZCh3YXJlaG91c2UsIHdpcmUsIHRhYmxlLCByb3dzJDEsIGNvbHMpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZWFjaCA9ICh3aXJlLCBmKSA9PiB7XG4gICAgICBjb25zdCBiYXJzID0gZGVzY2VuZGFudHMod2lyZS5wYXJlbnQoKSwgJy4nICsgcmVzaXplQmFyKTtcbiAgICAgIGVhY2gkMihiYXJzLCBmKTtcbiAgICB9O1xuICAgIGNvbnN0IGhpZGUgPSB3aXJlID0+IHtcbiAgICAgIGVhY2god2lyZSwgYmFyID0+IHtcbiAgICAgICAgc2V0JDEoYmFyLCAnZGlzcGxheScsICdub25lJyk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHNob3cgPSB3aXJlID0+IHtcbiAgICAgIGVhY2god2lyZSwgYmFyID0+IHtcbiAgICAgICAgc2V0JDEoYmFyLCAnZGlzcGxheScsICdibG9jaycpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBpc1Jvd0JhciA9IGVsZW1lbnQgPT4ge1xuICAgICAgcmV0dXJuIGhhcyhlbGVtZW50LCByZXNpemVSb3dCYXIpO1xuICAgIH07XG4gICAgY29uc3QgaXNDb2xCYXIgPSBlbGVtZW50ID0+IHtcbiAgICAgIHJldHVybiBoYXMoZWxlbWVudCwgcmVzaXplQ29sQmFyKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzaXplQmFyRHJhZ2dpbmcgPSByZXNvbHZlKCdyZXNpemVyLWJhci1kcmFnZ2luZycpO1xuICAgIGNvbnN0IEJhck1hbmFnZXIgPSB3aXJlID0+IHtcbiAgICAgIGNvbnN0IG11dGF0aW9uID0gQmFyTXV0YXRpb24oKTtcbiAgICAgIGNvbnN0IHJlc2l6aW5nID0gdHJhbnNmb3JtKG11dGF0aW9uLCB7fSk7XG4gICAgICBsZXQgaG92ZXJUYWJsZSA9IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIGNvbnN0IGdldFJlc2l6ZXIgPSAoZWxlbWVudCwgdHlwZSkgPT4ge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShnZXQkYihlbGVtZW50LCB0eXBlKSk7XG4gICAgICB9O1xuICAgICAgbXV0YXRpb24uZXZlbnRzLmRyYWcuYmluZChldmVudCA9PiB7XG4gICAgICAgIGdldFJlc2l6ZXIoZXZlbnQudGFyZ2V0LCAnZGF0YS1yb3cnKS5lYWNoKF9kYXRhUm93ID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50Um93ID0gZ2V0Q3NzVmFsdWUoZXZlbnQudGFyZ2V0LCAndG9wJyk7XG4gICAgICAgICAgc2V0JDEoZXZlbnQudGFyZ2V0LCAndG9wJywgY3VycmVudFJvdyArIGV2ZW50LnlEZWx0YSArICdweCcpO1xuICAgICAgICB9KTtcbiAgICAgICAgZ2V0UmVzaXplcihldmVudC50YXJnZXQsICdkYXRhLWNvbHVtbicpLmVhY2goX2RhdGFDb2wgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb2wgPSBnZXRDc3NWYWx1ZShldmVudC50YXJnZXQsICdsZWZ0Jyk7XG4gICAgICAgICAgc2V0JDEoZXZlbnQudGFyZ2V0LCAnbGVmdCcsIGN1cnJlbnRDb2wgKyBldmVudC54RGVsdGEgKyAncHgnKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGdldERlbHRhID0gKHRhcmdldCwgZGlyKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1ggPSBnZXRDc3NWYWx1ZSh0YXJnZXQsIGRpcik7XG4gICAgICAgIGNvbnN0IG9sZFggPSBnZXRBdHRyVmFsdWUodGFyZ2V0LCAnZGF0YS1pbml0aWFsLScgKyBkaXIsIDApO1xuICAgICAgICByZXR1cm4gbmV3WCAtIG9sZFg7XG4gICAgICB9O1xuICAgICAgcmVzaXppbmcuZXZlbnRzLnN0b3AuYmluZCgoKSA9PiB7XG4gICAgICAgIG11dGF0aW9uLmdldCgpLmVhY2godGFyZ2V0ID0+IHtcbiAgICAgICAgICBob3ZlclRhYmxlLmVhY2godGFibGUgPT4ge1xuICAgICAgICAgICAgZ2V0UmVzaXplcih0YXJnZXQsICdkYXRhLXJvdycpLmVhY2gocm93ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZGVsdGEgPSBnZXREZWx0YSh0YXJnZXQsICd0b3AnKTtcbiAgICAgICAgICAgICAgcmVtb3ZlJDcodGFyZ2V0LCAnZGF0YS1pbml0aWFsLXRvcCcpO1xuICAgICAgICAgICAgICBldmVudHMudHJpZ2dlci5hZGp1c3RIZWlnaHQodGFibGUsIGRlbHRhLCBwYXJzZUludChyb3csIDEwKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGdldFJlc2l6ZXIodGFyZ2V0LCAnZGF0YS1jb2x1bW4nKS5lYWNoKGNvbHVtbiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gZ2V0RGVsdGEodGFyZ2V0LCAnbGVmdCcpO1xuICAgICAgICAgICAgICByZW1vdmUkNyh0YXJnZXQsICdkYXRhLWluaXRpYWwtbGVmdCcpO1xuICAgICAgICAgICAgICBldmVudHMudHJpZ2dlci5hZGp1c3RXaWR0aCh0YWJsZSwgZGVsdGEsIHBhcnNlSW50KGNvbHVtbiwgMTApKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVmcmVzaCh3aXJlLCB0YWJsZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBoYW5kbGVyID0gKHRhcmdldCwgZGlyKSA9PiB7XG4gICAgICAgIGV2ZW50cy50cmlnZ2VyLnN0YXJ0QWRqdXN0KCk7XG4gICAgICAgIG11dGF0aW9uLmFzc2lnbih0YXJnZXQpO1xuICAgICAgICBzZXQkMih0YXJnZXQsICdkYXRhLWluaXRpYWwtJyArIGRpciwgZ2V0Q3NzVmFsdWUodGFyZ2V0LCBkaXIpKTtcbiAgICAgICAgYWRkKHRhcmdldCwgcmVzaXplQmFyRHJhZ2dpbmcpO1xuICAgICAgICBzZXQkMSh0YXJnZXQsICdvcGFjaXR5JywgJzAuMicpO1xuICAgICAgICByZXNpemluZy5nbyh3aXJlLnBhcmVudCgpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBtb3VzZWRvd24gPSBiaW5kKHdpcmUucGFyZW50KCksICdtb3VzZWRvd24nLCBldmVudCA9PiB7XG4gICAgICAgIGlmIChpc1Jvd0JhcihldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgaGFuZGxlcihldmVudC50YXJnZXQsICd0b3AnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNDb2xCYXIoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgIGhhbmRsZXIoZXZlbnQudGFyZ2V0LCAnbGVmdCcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGlzUm9vdCA9IGUgPT4ge1xuICAgICAgICByZXR1cm4gZXEkMShlLCB3aXJlLnZpZXcoKSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZmluZENsb3Nlc3RFZGl0YWJsZVRhYmxlID0gdGFyZ2V0ID0+IGNsb3Nlc3QkMSh0YXJnZXQsICd0YWJsZScsIGlzUm9vdCkuZmlsdGVyKGlzRWRpdGFibGUkMSk7XG4gICAgICBjb25zdCBtb3VzZW92ZXIgPSBiaW5kKHdpcmUudmlldygpLCAnbW91c2VvdmVyJywgZXZlbnQgPT4ge1xuICAgICAgICBmaW5kQ2xvc2VzdEVkaXRhYmxlVGFibGUoZXZlbnQudGFyZ2V0KS5mb2xkKCgpID0+IHtcbiAgICAgICAgICBpZiAoaW5Cb2R5KGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgIGRlc3Ryb3kod2lyZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCB0YWJsZSA9PiB7XG4gICAgICAgICAgaWYgKHJlc2l6aW5nLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgIGhvdmVyVGFibGUgPSBPcHRpb25hbC5zb21lKHRhYmxlKTtcbiAgICAgICAgICAgIHJlZnJlc2god2lyZSwgdGFibGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRlc3Ryb3kkMSA9ICgpID0+IHtcbiAgICAgICAgbW91c2Vkb3duLnVuYmluZCgpO1xuICAgICAgICBtb3VzZW92ZXIudW5iaW5kKCk7XG4gICAgICAgIHJlc2l6aW5nLmRlc3Ryb3koKTtcbiAgICAgICAgZGVzdHJveSh3aXJlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZWZyZXNoJDEgPSB0YmwgPT4ge1xuICAgICAgICByZWZyZXNoKHdpcmUsIHRibCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZXZlbnRzID0gY3JlYXRlJDEoe1xuICAgICAgICBhZGp1c3RIZWlnaHQ6IEV2ZW50KFtcbiAgICAgICAgICAndGFibGUnLFxuICAgICAgICAgICdkZWx0YScsXG4gICAgICAgICAgJ3JvdydcbiAgICAgICAgXSksXG4gICAgICAgIGFkanVzdFdpZHRoOiBFdmVudChbXG4gICAgICAgICAgJ3RhYmxlJyxcbiAgICAgICAgICAnZGVsdGEnLFxuICAgICAgICAgICdjb2x1bW4nXG4gICAgICAgIF0pLFxuICAgICAgICBzdGFydEFkanVzdDogRXZlbnQoW10pXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlc3Ryb3k6IGRlc3Ryb3kkMSxcbiAgICAgICAgcmVmcmVzaDogcmVmcmVzaCQxLFxuICAgICAgICBvbjogcmVzaXppbmcub24sXG4gICAgICAgIG9mZjogcmVzaXppbmcub2ZmLFxuICAgICAgICBoaWRlQmFyczogY3VycnkoaGlkZSwgd2lyZSksXG4gICAgICAgIHNob3dCYXJzOiBjdXJyeShzaG93LCB3aXJlKSxcbiAgICAgICAgZXZlbnRzOiBldmVudHMucmVnaXN0cnlcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGNyZWF0ZSA9ICh3aXJlLCByZXNpemluZywgbGF6eVNpemluZykgPT4ge1xuICAgICAgY29uc3QgaGRpcmVjdGlvbiA9IGhlaWdodDtcbiAgICAgIGNvbnN0IHZkaXJlY3Rpb24gPSB3aWR0aDtcbiAgICAgIGNvbnN0IG1hbmFnZXIgPSBCYXJNYW5hZ2VyKHdpcmUpO1xuICAgICAgY29uc3QgZXZlbnRzID0gY3JlYXRlJDEoe1xuICAgICAgICBiZWZvcmVSZXNpemU6IEV2ZW50KFtcbiAgICAgICAgICAndGFibGUnLFxuICAgICAgICAgICd0eXBlJ1xuICAgICAgICBdKSxcbiAgICAgICAgYWZ0ZXJSZXNpemU6IEV2ZW50KFtcbiAgICAgICAgICAndGFibGUnLFxuICAgICAgICAgICd0eXBlJ1xuICAgICAgICBdKSxcbiAgICAgICAgc3RhcnREcmFnOiBFdmVudChbXSlcbiAgICAgIH0pO1xuICAgICAgbWFuYWdlci5ldmVudHMuYWRqdXN0SGVpZ2h0LmJpbmQoZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IGV2ZW50LnRhYmxlO1xuICAgICAgICBldmVudHMudHJpZ2dlci5iZWZvcmVSZXNpemUodGFibGUsICdyb3cnKTtcbiAgICAgICAgY29uc3QgZGVsdGEgPSBoZGlyZWN0aW9uLmRlbHRhKGV2ZW50LmRlbHRhLCB0YWJsZSk7XG4gICAgICAgIGFkanVzdEhlaWdodCh0YWJsZSwgZGVsdGEsIGV2ZW50LnJvdywgaGRpcmVjdGlvbik7XG4gICAgICAgIGV2ZW50cy50cmlnZ2VyLmFmdGVyUmVzaXplKHRhYmxlLCAncm93Jyk7XG4gICAgICB9KTtcbiAgICAgIG1hbmFnZXIuZXZlbnRzLnN0YXJ0QWRqdXN0LmJpbmQoX2V2ZW50ID0+IHtcbiAgICAgICAgZXZlbnRzLnRyaWdnZXIuc3RhcnREcmFnKCk7XG4gICAgICB9KTtcbiAgICAgIG1hbmFnZXIuZXZlbnRzLmFkanVzdFdpZHRoLmJpbmQoZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IGV2ZW50LnRhYmxlO1xuICAgICAgICBldmVudHMudHJpZ2dlci5iZWZvcmVSZXNpemUodGFibGUsICdjb2wnKTtcbiAgICAgICAgY29uc3QgZGVsdGEgPSB2ZGlyZWN0aW9uLmRlbHRhKGV2ZW50LmRlbHRhLCB0YWJsZSk7XG4gICAgICAgIGNvbnN0IHRhYmxlU2l6ZSA9IGxhenlTaXppbmcodGFibGUpO1xuICAgICAgICBhZGp1c3RXaWR0aCh0YWJsZSwgZGVsdGEsIGV2ZW50LmNvbHVtbiwgcmVzaXppbmcsIHRhYmxlU2l6ZSk7XG4gICAgICAgIGV2ZW50cy50cmlnZ2VyLmFmdGVyUmVzaXplKHRhYmxlLCAnY29sJyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9uOiBtYW5hZ2VyLm9uLFxuICAgICAgICBvZmY6IG1hbmFnZXIub2ZmLFxuICAgICAgICByZWZyZXNoQmFyczogbWFuYWdlci5yZWZyZXNoLFxuICAgICAgICBoaWRlQmFyczogbWFuYWdlci5oaWRlQmFycyxcbiAgICAgICAgc2hvd0JhcnM6IG1hbmFnZXIuc2hvd0JhcnMsXG4gICAgICAgIGRlc3Ryb3k6IG1hbmFnZXIuZGVzdHJveSxcbiAgICAgICAgZXZlbnRzOiBldmVudHMucmVnaXN0cnlcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBUYWJsZVJlc2l6ZSA9IHsgY3JlYXRlIH07XG5cbiAgICBjb25zdCBvbmx5ID0gKGVsZW1lbnQsIGlzUmVzaXphYmxlKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBpc0RvY3VtZW50KGVsZW1lbnQpID8gZG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIDogZWxlbWVudDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhcmVudDogY29uc3RhbnQocGFyZW50KSxcbiAgICAgICAgdmlldzogY29uc3RhbnQoZWxlbWVudCksXG4gICAgICAgIG9yaWdpbjogY29uc3RhbnQoU3VnYXJQb3NpdGlvbigwLCAwKSksXG4gICAgICAgIGlzUmVzaXphYmxlXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZGV0YWNoZWQgPSAoZWRpdGFibGUsIGNocm9tZSwgaXNSZXNpemFibGUpID0+IHtcbiAgICAgIGNvbnN0IG9yaWdpbiA9ICgpID0+IGFic29sdXRlKGNocm9tZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXJlbnQ6IGNvbnN0YW50KGNocm9tZSksXG4gICAgICAgIHZpZXc6IGNvbnN0YW50KGVkaXRhYmxlKSxcbiAgICAgICAgb3JpZ2luLFxuICAgICAgICBpc1Jlc2l6YWJsZVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGJvZHkgPSAoZWRpdGFibGUsIGNocm9tZSwgaXNSZXNpemFibGUpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhcmVudDogY29uc3RhbnQoY2hyb21lKSxcbiAgICAgICAgdmlldzogY29uc3RhbnQoZWRpdGFibGUpLFxuICAgICAgICBvcmlnaW46IGNvbnN0YW50KFN1Z2FyUG9zaXRpb24oMCwgMCkpLFxuICAgICAgICBpc1Jlc2l6YWJsZVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IFJlc2l6ZVdpcmUgPSB7XG4gICAgICBvbmx5LFxuICAgICAgZGV0YWNoZWQsXG4gICAgICBib2R5XG4gICAgfTtcblxuICAgIGNvbnN0IGNyZWF0ZUNvbnRhaW5lciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdkaXYnKTtcbiAgICAgIHNldEFsbChjb250YWluZXIsIHtcbiAgICAgICAgcG9zaXRpb246ICdzdGF0aWMnLFxuICAgICAgICBoZWlnaHQ6ICcwJyxcbiAgICAgICAgd2lkdGg6ICcwJyxcbiAgICAgICAgcGFkZGluZzogJzAnLFxuICAgICAgICBtYXJnaW46ICcwJyxcbiAgICAgICAgYm9yZGVyOiAnMCdcbiAgICAgIH0pO1xuICAgICAgYXBwZW5kJDEoYm9keSQxKCksIGNvbnRhaW5lcik7XG4gICAgICByZXR1cm4gY29udGFpbmVyO1xuICAgIH07XG4gICAgY29uc3QgZ2V0ID0gKGVkaXRvciwgaXNSZXNpemFibGUpID0+IHtcbiAgICAgIHJldHVybiBlZGl0b3IuaW5saW5lID8gUmVzaXplV2lyZS5ib2R5KFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpLCBjcmVhdGVDb250YWluZXIoKSwgaXNSZXNpemFibGUpIDogUmVzaXplV2lyZS5vbmx5KFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXREb2MoKSksIGlzUmVzaXphYmxlKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSA9IChlZGl0b3IsIHdpcmUpID0+IHtcbiAgICAgIGlmIChlZGl0b3IuaW5saW5lKSB7XG4gICAgICAgIHJlbW92ZSQ2KHdpcmUucGFyZW50KCkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBpc1RhYmxlID0gbm9kZSA9PiBpc05vbk51bGxhYmxlKG5vZGUpICYmIG5vZGUubm9kZU5hbWUgPT09ICdUQUJMRSc7XG4gICAgY29uc3QgYmFyUmVzaXplclByZWZpeCA9ICdiYXItJztcbiAgICBjb25zdCBpc1Jlc2l6YWJsZSA9IGVsbSA9PiBnZXQkYihlbG0sICdkYXRhLW1jZS1yZXNpemUnKSAhPT0gJ2ZhbHNlJztcbiAgICBjb25zdCBzeW5jUGl4ZWxzID0gdGFibGUgPT4ge1xuICAgICAgY29uc3Qgd2FyZWhvdXNlID0gV2FyZWhvdXNlLmZyb21UYWJsZSh0YWJsZSk7XG4gICAgICBpZiAoIVdhcmVob3VzZS5oYXNDb2x1bW5zKHdhcmVob3VzZSkpIHtcbiAgICAgICAgZWFjaCQyKGNlbGxzJDEodGFibGUpLCBjZWxsID0+IHtcbiAgICAgICAgICBjb25zdCBjb21wdXRlZFdpZHRoID0gZ2V0JGEoY2VsbCwgJ3dpZHRoJyk7XG4gICAgICAgICAgc2V0JDEoY2VsbCwgJ3dpZHRoJywgY29tcHV0ZWRXaWR0aCk7XG4gICAgICAgICAgcmVtb3ZlJDcoY2VsbCwgJ3dpZHRoJyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgVGFibGVSZXNpemVIYW5kbGVyID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvblJuZyA9IHZhbHVlKCk7XG4gICAgICBjb25zdCB0YWJsZVJlc2l6ZSA9IHZhbHVlKCk7XG4gICAgICBjb25zdCByZXNpemVXaXJlID0gdmFsdWUoKTtcbiAgICAgIGxldCBzdGFydFc7XG4gICAgICBsZXQgc3RhcnRSYXdXO1xuICAgICAgY29uc3QgbGF6eVNpemluZyA9IHRhYmxlID0+IGdldCQ1KGVkaXRvciwgdGFibGUpO1xuICAgICAgY29uc3QgbGF6eVJlc2l6aW5nQmVoYXZpb3VyID0gKCkgPT4gaXNQcmVzZXJ2ZVRhYmxlQ29sdW1uUmVzaXppbmcoZWRpdG9yKSA/IHByZXNlcnZlVGFibGUoKSA6IHJlc2l6ZVRhYmxlKCk7XG4gICAgICBjb25zdCBnZXROdW1Db2x1bW5zID0gdGFibGUgPT4gZ2V0R3JpZFNpemUodGFibGUpLmNvbHVtbnM7XG4gICAgICBjb25zdCBhZnRlckNvcm5lclJlc2l6ZSA9ICh0YWJsZSwgb3JpZ2luLCB3aWR0aCkgPT4ge1xuICAgICAgICBjb25zdCBpc1JpZ2h0RWRnZVJlc2l6ZSA9IGVuZHNXaXRoKG9yaWdpbiwgJ2UnKTtcbiAgICAgICAgaWYgKHN0YXJ0UmF3VyA9PT0gJycpIHtcbiAgICAgICAgICBjb252ZXJ0VG9QZXJjZW50U2l6ZSh0YWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdpZHRoICE9PSBzdGFydFcgJiYgc3RhcnRSYXdXICE9PSAnJykge1xuICAgICAgICAgIHNldCQxKHRhYmxlLCAnd2lkdGgnLCBzdGFydFJhd1cpO1xuICAgICAgICAgIGNvbnN0IHJlc2l6aW5nID0gbGF6eVJlc2l6aW5nQmVoYXZpb3VyKCk7XG4gICAgICAgICAgY29uc3QgdGFibGVTaXplID0gbGF6eVNpemluZyh0YWJsZSk7XG4gICAgICAgICAgY29uc3QgY29sID0gaXNQcmVzZXJ2ZVRhYmxlQ29sdW1uUmVzaXppbmcoZWRpdG9yKSB8fCBpc1JpZ2h0RWRnZVJlc2l6ZSA/IGdldE51bUNvbHVtbnModGFibGUpIC0gMSA6IDA7XG4gICAgICAgICAgYWRqdXN0V2lkdGgodGFibGUsIHdpZHRoIC0gc3RhcnRXLCBjb2wsIHJlc2l6aW5nLCB0YWJsZVNpemUpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUGVyY2VudGFnZSQxKHN0YXJ0UmF3VykpIHtcbiAgICAgICAgICBjb25zdCBwZXJjZW50VyA9IHBhcnNlRmxvYXQoc3RhcnRSYXdXLnJlcGxhY2UoJyUnLCAnJykpO1xuICAgICAgICAgIGNvbnN0IHRhcmdldFBlcmNlbnRXID0gd2lkdGggKiBwZXJjZW50VyAvIHN0YXJ0VztcbiAgICAgICAgICBzZXQkMSh0YWJsZSwgJ3dpZHRoJywgdGFyZ2V0UGVyY2VudFcgKyAnJScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1BpeGVsKHN0YXJ0UmF3VykpIHtcbiAgICAgICAgICBzeW5jUGl4ZWxzKHRhYmxlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICAgIHRhYmxlUmVzaXplLm9uKHN6ID0+IHtcbiAgICAgICAgICBzei5kZXN0cm95KCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXNpemVXaXJlLm9uKHcgPT4ge1xuICAgICAgICAgIHJlbW92ZShlZGl0b3IsIHcpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBlZGl0b3Iub24oJ2luaXQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJhd1dpcmUgPSBnZXQoZWRpdG9yLCBpc1Jlc2l6YWJsZSk7XG4gICAgICAgIHJlc2l6ZVdpcmUuc2V0KHJhd1dpcmUpO1xuICAgICAgICBpZiAoaGFzVGFibGVPYmplY3RSZXNpemluZyhlZGl0b3IpICYmIGhhc1RhYmxlUmVzaXplQmFycyhlZGl0b3IpKSB7XG4gICAgICAgICAgY29uc3QgcmVzaXppbmcgPSBsYXp5UmVzaXppbmdCZWhhdmlvdXIoKTtcbiAgICAgICAgICBjb25zdCBzeiA9IFRhYmxlUmVzaXplLmNyZWF0ZShyYXdXaXJlLCByZXNpemluZywgbGF6eVNpemluZyk7XG4gICAgICAgICAgc3oub24oKTtcbiAgICAgICAgICBzei5ldmVudHMuc3RhcnREcmFnLmJpbmQoX2V2ZW50ID0+IHtcbiAgICAgICAgICAgIHNlbGVjdGlvblJuZy5zZXQoZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc3ouZXZlbnRzLmJlZm9yZVJlc2l6ZS5iaW5kKGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJhd1RhYmxlID0gZXZlbnQudGFibGUuZG9tO1xuICAgICAgICAgICAgZmlyZU9iamVjdFJlc2l6ZVN0YXJ0KGVkaXRvciwgcmF3VGFibGUsIGdldFBpeGVsV2lkdGgocmF3VGFibGUpLCBnZXRQaXhlbEhlaWdodChyYXdUYWJsZSksIGJhclJlc2l6ZXJQcmVmaXggKyBldmVudC50eXBlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzei5ldmVudHMuYWZ0ZXJSZXNpemUuYmluZChldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YWJsZSA9IGV2ZW50LnRhYmxlO1xuICAgICAgICAgICAgY29uc3QgcmF3VGFibGUgPSB0YWJsZS5kb207XG4gICAgICAgICAgICByZW1vdmVEYXRhU3R5bGUodGFibGUpO1xuICAgICAgICAgICAgc2VsZWN0aW9uUm5nLm9uKHJuZyA9PiB7XG4gICAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG4gICAgICAgICAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmaXJlT2JqZWN0UmVzaXplZChlZGl0b3IsIHJhd1RhYmxlLCBnZXRQaXhlbFdpZHRoKHJhd1RhYmxlKSwgZ2V0UGl4ZWxIZWlnaHQocmF3VGFibGUpLCBiYXJSZXNpemVyUHJlZml4ICsgZXZlbnQudHlwZSk7XG4gICAgICAgICAgICBlZGl0b3IudW5kb01hbmFnZXIuYWRkKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGFibGVSZXNpemUuc2V0KHN6KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ09iamVjdFJlc2l6ZVN0YXJ0JywgZSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsbSA9IGUudGFyZ2V0O1xuICAgICAgICBpZiAoaXNUYWJsZSh0YXJnZXRFbG0pKSB7XG4gICAgICAgICAgY29uc3QgdGFibGUgPSBTdWdhckVsZW1lbnQuZnJvbURvbSh0YXJnZXRFbG0pO1xuICAgICAgICAgIGVhY2gkMihlZGl0b3IuZG9tLnNlbGVjdCgnLm1jZS1jbG9uZWRyZXNpemFibGUnKSwgY2xvbmUgPT4ge1xuICAgICAgICAgICAgZWRpdG9yLmRvbS5hZGRDbGFzcyhjbG9uZSwgJ21jZS0nICsgZ2V0VGFibGVDb2x1bW5SZXNpemluZ0JlaGF2aW91cihlZGl0b3IpICsgJy1jb2x1bW5zJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKCFpc1BpeGVsU2l6aW5nKHRhYmxlKSAmJiBpc1RhYmxlUGl4ZWxzRm9yY2VkKGVkaXRvcikpIHtcbiAgICAgICAgICAgIGNvbnZlcnRUb1BpeGVsU2l6ZSh0YWJsZSk7XG4gICAgICAgICAgfSBlbHNlIGlmICghaXNQZXJjZW50U2l6aW5nKHRhYmxlKSAmJiBpc1RhYmxlUGVyY2VudGFnZXNGb3JjZWQoZWRpdG9yKSkge1xuICAgICAgICAgICAgY29udmVydFRvUGVyY2VudFNpemUodGFibGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNOb25lU2l6aW5nKHRhYmxlKSAmJiBzdGFydHNXaXRoKGUub3JpZ2luLCBiYXJSZXNpemVyUHJlZml4KSkge1xuICAgICAgICAgICAgY29udmVydFRvUGVyY2VudFNpemUodGFibGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGFydFcgPSBlLndpZHRoO1xuICAgICAgICAgIHN0YXJ0UmF3VyA9IGlzVGFibGVSZXNwb25zaXZlRm9yY2VkKGVkaXRvcikgPyAnJyA6IGdldFJhd1dpZHRoKGVkaXRvciwgdGFyZ2V0RWxtKS5nZXRPcignJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdPYmplY3RSZXNpemVkJywgZSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsbSA9IGUudGFyZ2V0O1xuICAgICAgICBpZiAoaXNUYWJsZSh0YXJnZXRFbG0pKSB7XG4gICAgICAgICAgY29uc3QgdGFibGUgPSBTdWdhckVsZW1lbnQuZnJvbURvbSh0YXJnZXRFbG0pO1xuICAgICAgICAgIGNvbnN0IG9yaWdpbiA9IGUub3JpZ2luO1xuICAgICAgICAgIGlmIChzdGFydHNXaXRoKG9yaWdpbiwgJ2Nvcm5lci0nKSkge1xuICAgICAgICAgICAgYWZ0ZXJDb3JuZXJSZXNpemUodGFibGUsIG9yaWdpbiwgZS53aWR0aCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlbW92ZURhdGFTdHlsZSh0YWJsZSk7XG4gICAgICAgICAgZmlyZVRhYmxlTW9kaWZpZWQoZWRpdG9yLCB0YWJsZS5kb20sIHN0eWxlTW9kaWZpZWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignU3dpdGNoTW9kZScsICgpID0+IHtcbiAgICAgICAgdGFibGVSZXNpemUub24ocmVzaXplID0+IHtcbiAgICAgICAgICBpZiAoZWRpdG9yLm1vZGUuaXNSZWFkT25seSgpKSB7XG4gICAgICAgICAgICByZXNpemUuaGlkZUJhcnMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzaXplLnNob3dCYXJzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdkcmFnc3RhcnQgZHJhZ2VuZCcsIGUgPT4ge1xuICAgICAgICB0YWJsZVJlc2l6ZS5vbihyZXNpemUgPT4ge1xuICAgICAgICAgIGlmIChlLnR5cGUgPT09ICdkcmFnc3RhcnQnKSB7XG4gICAgICAgICAgICByZXNpemUuaGlkZUJhcnMoKTtcbiAgICAgICAgICAgIHJlc2l6ZS5vZmYoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzaXplLm9uKCk7XG4gICAgICAgICAgICByZXNpemUuc2hvd0JhcnMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ3JlbW92ZScsICgpID0+IHtcbiAgICAgICAgZGVzdHJveSgpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCByZWZyZXNoID0gdGFibGUgPT4ge1xuICAgICAgICB0YWJsZVJlc2l6ZS5vbihyZXNpemUgPT4gcmVzaXplLnJlZnJlc2hCYXJzKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHRhYmxlKSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGhpZGUgPSAoKSA9PiB7XG4gICAgICAgIHRhYmxlUmVzaXplLm9uKHJlc2l6ZSA9PiByZXNpemUuaGlkZUJhcnMoKSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2hvdyA9ICgpID0+IHtcbiAgICAgICAgdGFibGVSZXNpemUub24ocmVzaXplID0+IHJlc2l6ZS5zaG93QmFycygpKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWZyZXNoLFxuICAgICAgICBoaWRlLFxuICAgICAgICBzaG93XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBzZXR1cFRhYmxlID0gZWRpdG9yID0+IHtcbiAgICAgIHJlZ2lzdGVyKGVkaXRvcik7XG4gICAgICBjb25zdCByZXNpemVIYW5kbGVyID0gVGFibGVSZXNpemVIYW5kbGVyKGVkaXRvcik7XG4gICAgICBjb25zdCBjZWxsU2VsZWN0aW9uSGFuZGxlciA9IFRhYmxlQ2VsbFNlbGVjdGlvbkhhbmRsZXIoZWRpdG9yLCByZXNpemVIYW5kbGVyKTtcbiAgICAgIGNvbnN0IGFjdGlvbnMgPSBUYWJsZUFjdGlvbnMoZWRpdG9yLCByZXNpemVIYW5kbGVyLCBjZWxsU2VsZWN0aW9uSGFuZGxlcik7XG4gICAgICByZWdpc3RlckNvbW1hbmRzKGVkaXRvciwgYWN0aW9ucyk7XG4gICAgICByZWdpc3RlclF1ZXJ5Q29tbWFuZHMoZWRpdG9yLCBhY3Rpb25zKTtcbiAgICAgIHJlZ2lzdGVyRXZlbnRzKGVkaXRvciwgYWN0aW9ucyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBnZXRTZWxlY3RlZENlbGxzOiBjZWxsU2VsZWN0aW9uSGFuZGxlci5nZXRTZWxlY3RlZENlbGxzLFxuICAgICAgICBjbGVhclNlbGVjdGVkQ2VsbHM6IGNlbGxTZWxlY3Rpb25IYW5kbGVyLmNsZWFyU2VsZWN0ZWRDZWxsc1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgRG9tTW9kZWwgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgdGFibGUgPSBzZXR1cFRhYmxlKGVkaXRvcik7XG4gICAgICByZXR1cm4geyB0YWJsZSB9O1xuICAgIH07XG4gICAgdmFyIE1vZGVsID0gKCkgPT4ge1xuICAgICAgZ2xvYmFsJDEuYWRkKCdkb20nLCBEb21Nb2RlbCk7XG4gICAgfTtcblxuICAgIE1vZGVsKCk7XG5cbn0pKCk7XG4iLCIvLyBFeHBvcnRzIHRoZSBcImFkdmxpc3RcIiBwbHVnaW4gZm9yIHVzYWdlIHdpdGggbW9kdWxlIGxvYWRlcnNcbi8vIFVzYWdlOlxuLy8gICBDb21tb25KUzpcbi8vICAgICByZXF1aXJlKCd0aW55bWNlL3BsdWdpbnMvYWR2bGlzdCcpXG4vLyAgIEVTMjAxNTpcbi8vICAgICBpbXBvcnQgJ3RpbnltY2UvcGx1Z2lucy9hZHZsaXN0J1xucmVxdWlyZSgnLi9wbHVnaW4uanMnKTsiLCIvKipcbiAqIFRpbnlNQ0UgdmVyc2lvbiA2LjcuMCAoMjAyMy0wOC0zMClcbiAqL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBnbG9iYWwkMSA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLlBsdWdpbk1hbmFnZXInKTtcblxuICAgIGNvbnN0IGFwcGx5TGlzdEZvcm1hdCA9IChlZGl0b3IsIGxpc3ROYW1lLCBzdHlsZVZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBjbWQgPSBsaXN0TmFtZSA9PT0gJ1VMJyA/ICdJbnNlcnRVbm9yZGVyZWRMaXN0JyA6ICdJbnNlcnRPcmRlcmVkTGlzdCc7XG4gICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoY21kLCBmYWxzZSwgc3R5bGVWYWx1ZSA9PT0gZmFsc2UgPyBudWxsIDogeyAnbGlzdC1zdHlsZS10eXBlJzogc3R5bGVWYWx1ZSB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVnaXN0ZXIkMiA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IuYWRkQ29tbWFuZCgnQXBwbHlVbm9yZGVyZWRMaXN0U3R5bGUnLCAodWksIHZhbHVlKSA9PiB7XG4gICAgICAgIGFwcGx5TGlzdEZvcm1hdChlZGl0b3IsICdVTCcsIHZhbHVlWydsaXN0LXN0eWxlLXR5cGUnXSk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5hZGRDb21tYW5kKCdBcHBseU9yZGVyZWRMaXN0U3R5bGUnLCAodWksIHZhbHVlKSA9PiB7XG4gICAgICAgIGFwcGx5TGlzdEZvcm1hdChlZGl0b3IsICdPTCcsIHZhbHVlWydsaXN0LXN0eWxlLXR5cGUnXSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb3B0aW9uID0gbmFtZSA9PiBlZGl0b3IgPT4gZWRpdG9yLm9wdGlvbnMuZ2V0KG5hbWUpO1xuICAgIGNvbnN0IHJlZ2lzdGVyJDEgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgcmVnaXN0ZXJPcHRpb24gPSBlZGl0b3Iub3B0aW9ucy5yZWdpc3RlcjtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdhZHZsaXN0X251bWJlcl9zdHlsZXMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZ1tdJyxcbiAgICAgICAgZGVmYXVsdDogJ2RlZmF1bHQsbG93ZXItYWxwaGEsbG93ZXItZ3JlZWssbG93ZXItcm9tYW4sdXBwZXItYWxwaGEsdXBwZXItcm9tYW4nLnNwbGl0KCcsJylcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2Fkdmxpc3RfYnVsbGV0X3N0eWxlcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nW10nLFxuICAgICAgICBkZWZhdWx0OiAnZGVmYXVsdCxjaXJjbGUsc3F1YXJlJy5zcGxpdCgnLCcpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldE51bWJlclN0eWxlcyA9IG9wdGlvbignYWR2bGlzdF9udW1iZXJfc3R5bGVzJyk7XG4gICAgY29uc3QgZ2V0QnVsbGV0U3R5bGVzID0gb3B0aW9uKCdhZHZsaXN0X2J1bGxldF9zdHlsZXMnKTtcblxuICAgIGNvbnN0IGlzTnVsbGFibGUgPSBhID0+IGEgPT09IG51bGwgfHwgYSA9PT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGlzTm9uTnVsbGFibGUgPSBhID0+ICFpc051bGxhYmxlKGEpO1xuXG4gICAgdmFyIGdsb2JhbCA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLnV0aWwuVG9vbHMnKTtcblxuICAgIGNsYXNzIE9wdGlvbmFsIHtcbiAgICAgIGNvbnN0cnVjdG9yKHRhZywgdmFsdWUpIHtcbiAgICAgICAgdGhpcy50YWcgPSB0YWc7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHN0YXRpYyBzb21lKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBuZXcgT3B0aW9uYWwodHJ1ZSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgc3RhdGljIG5vbmUoKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zaW5nbGV0b25Ob25lO1xuICAgICAgfVxuICAgICAgZm9sZChvbk5vbmUsIG9uU29tZSkge1xuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICByZXR1cm4gb25Tb21lKHRoaXMudmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBvbk5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaXNTb21lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWc7XG4gICAgICB9XG4gICAgICBpc05vbmUoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy50YWc7XG4gICAgICB9XG4gICAgICBtYXAobWFwcGVyKSB7XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKG1hcHBlcih0aGlzLnZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYmluZChiaW5kZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgcmV0dXJuIGJpbmRlcih0aGlzLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBleGlzdHMocHJlZGljYXRlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyAmJiBwcmVkaWNhdGUodGhpcy52YWx1ZSk7XG4gICAgICB9XG4gICAgICBmb3JhbGwocHJlZGljYXRlKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy50YWcgfHwgcHJlZGljYXRlKHRoaXMudmFsdWUpO1xuICAgICAgfVxuICAgICAgZmlsdGVyKHByZWRpY2F0ZSkge1xuICAgICAgICBpZiAoIXRoaXMudGFnIHx8IHByZWRpY2F0ZSh0aGlzLnZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGdldE9yKHJlcGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMudmFsdWUgOiByZXBsYWNlbWVudDtcbiAgICAgIH1cbiAgICAgIG9yKHJlcGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMgOiByZXBsYWNlbWVudDtcbiAgICAgIH1cbiAgICAgIGdldE9yVGh1bmsodGh1bmspIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gdGhpcy52YWx1ZSA6IHRodW5rKCk7XG4gICAgICB9XG4gICAgICBvclRodW5rKHRodW5rKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMgOiB0aHVuaygpO1xuICAgICAgfVxuICAgICAgZ2V0T3JEaWUobWVzc2FnZSkge1xuICAgICAgICBpZiAoIXRoaXMudGFnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgIT09IG51bGwgJiYgbWVzc2FnZSAhPT0gdm9pZCAwID8gbWVzc2FnZSA6ICdDYWxsZWQgZ2V0T3JEaWUgb24gTm9uZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdGF0aWMgZnJvbSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gaXNOb25OdWxsYWJsZSh2YWx1ZSkgPyBPcHRpb25hbC5zb21lKHZhbHVlKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICAgIGdldE9yTnVsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gdGhpcy52YWx1ZSA6IG51bGw7XG4gICAgICB9XG4gICAgICBnZXRPclVuZGVmaW5lZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICB9XG4gICAgICBlYWNoKHdvcmtlcikge1xuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICB3b3JrZXIodGhpcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRvQXJyYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IFt0aGlzLnZhbHVlXSA6IFtdO1xuICAgICAgfVxuICAgICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IGBzb21lKCR7IHRoaXMudmFsdWUgfSlgIDogJ25vbmUoKSc7XG4gICAgICB9XG4gICAgfVxuICAgIE9wdGlvbmFsLnNpbmdsZXRvbk5vbmUgPSBuZXcgT3B0aW9uYWwoZmFsc2UpO1xuXG4gICAgY29uc3QgZmluZFVudGlsID0gKHhzLCBwcmVkLCB1bnRpbCkgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgaWYgKHByZWQoeCwgaSkpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh4KTtcbiAgICAgICAgfSBlbHNlIGlmICh1bnRpbCh4LCBpKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG5cbiAgICBjb25zdCBpc0N1c3RvbUxpc3QgPSBsaXN0ID0+IC9cXGJ0b3hcXC0vLnRlc3QobGlzdC5jbGFzc05hbWUpO1xuICAgIGNvbnN0IGlzQ2hpbGRPZkJvZHkgPSAoZWRpdG9yLCBlbG0pID0+IHtcbiAgICAgIHJldHVybiBlZGl0b3IuZG9tLmlzQ2hpbGRPZihlbG0sIGVkaXRvci5nZXRCb2R5KCkpO1xuICAgIH07XG4gICAgY29uc3QgbWF0Y2hOb2RlTmFtZXMgPSByZWdleCA9PiBub2RlID0+IGlzTm9uTnVsbGFibGUobm9kZSkgJiYgcmVnZXgudGVzdChub2RlLm5vZGVOYW1lKTtcbiAgICBjb25zdCBpc0xpc3ROb2RlID0gbWF0Y2hOb2RlTmFtZXMoL14oT0x8VUx8REwpJC8pO1xuICAgIGNvbnN0IGlzVGFibGVDZWxsTm9kZSA9IG1hdGNoTm9kZU5hbWVzKC9eKFRIfFREKSQvKTtcbiAgICBjb25zdCBpbkxpc3QgPSAoZWRpdG9yLCBwYXJlbnRzLCBub2RlTmFtZSkgPT4gZmluZFVudGlsKHBhcmVudHMsIHBhcmVudCA9PiBpc0xpc3ROb2RlKHBhcmVudCkgJiYgIWlzQ3VzdG9tTGlzdChwYXJlbnQpLCBpc1RhYmxlQ2VsbE5vZGUpLmV4aXN0cyhsaXN0ID0+IGxpc3Qubm9kZU5hbWUgPT09IG5vZGVOYW1lICYmIGlzQ2hpbGRPZkJvZHkoZWRpdG9yLCBsaXN0KSk7XG4gICAgY29uc3QgZ2V0U2VsZWN0ZWRTdHlsZVR5cGUgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgbGlzdEVsbSA9IGVkaXRvci5kb20uZ2V0UGFyZW50KGVkaXRvci5zZWxlY3Rpb24uZ2V0Tm9kZSgpLCAnb2wsdWwnKTtcbiAgICAgIGNvbnN0IHN0eWxlID0gZWRpdG9yLmRvbS5nZXRTdHlsZShsaXN0RWxtLCAnbGlzdFN0eWxlVHlwZScpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oc3R5bGUpO1xuICAgIH07XG4gICAgY29uc3QgaXNXaXRoaW5Ob25FZGl0YWJsZSA9IChlZGl0b3IsIGVsZW1lbnQpID0+IGVsZW1lbnQgIT09IG51bGwgJiYgIWVkaXRvci5kb20uaXNFZGl0YWJsZShlbGVtZW50KTtcbiAgICBjb25zdCBpc1dpdGhpbk5vbkVkaXRhYmxlTGlzdCA9IChlZGl0b3IsIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudExpc3QgPSBlZGl0b3IuZG9tLmdldFBhcmVudChlbGVtZW50LCAnb2wsdWwsZGwnKTtcbiAgICAgIHJldHVybiBpc1dpdGhpbk5vbkVkaXRhYmxlKGVkaXRvciwgcGFyZW50TGlzdCkgJiYgZWRpdG9yLnNlbGVjdGlvbi5pc0VkaXRhYmxlKCk7XG4gICAgfTtcbiAgICBjb25zdCBzZXROb2RlQ2hhbmdlSGFuZGxlciA9IChlZGl0b3IsIG5vZGVDaGFuZ2VIYW5kbGVyKSA9PiB7XG4gICAgICBjb25zdCBpbml0aWFsTm9kZSA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Tm9kZSgpO1xuICAgICAgbm9kZUNoYW5nZUhhbmRsZXIoe1xuICAgICAgICBwYXJlbnRzOiBlZGl0b3IuZG9tLmdldFBhcmVudHMoaW5pdGlhbE5vZGUpLFxuICAgICAgICBlbGVtZW50OiBpbml0aWFsTm9kZVxuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ05vZGVDaGFuZ2UnLCBub2RlQ2hhbmdlSGFuZGxlcik7XG4gICAgICByZXR1cm4gKCkgPT4gZWRpdG9yLm9mZignTm9kZUNoYW5nZScsIG5vZGVDaGFuZ2VIYW5kbGVyKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3R5bGVWYWx1ZVRvVGV4dCA9IHN0eWxlVmFsdWUgPT4ge1xuICAgICAgcmV0dXJuIHN0eWxlVmFsdWUucmVwbGFjZSgvXFwtL2csICcgJykucmVwbGFjZSgvXFxiXFx3L2csIGNociA9PiB7XG4gICAgICAgIHJldHVybiBjaHIudG9VcHBlckNhc2UoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplU3R5bGVWYWx1ZSA9IHN0eWxlVmFsdWUgPT4gaXNOdWxsYWJsZShzdHlsZVZhbHVlKSB8fCBzdHlsZVZhbHVlID09PSAnZGVmYXVsdCcgPyAnJyA6IHN0eWxlVmFsdWU7XG4gICAgY29uc3QgbWFrZVNldHVwSGFuZGxlciA9IChlZGl0b3IsIG5vZGVOYW1lKSA9PiBhcGkgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlQnV0dG9uU3RhdGUgPSAoZWRpdG9yLCBwYXJlbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KHRydWUpO1xuICAgICAgICBhcGkuc2V0QWN0aXZlKGluTGlzdChlZGl0b3IsIHBhcmVudHMsIG5vZGVOYW1lKSk7XG4gICAgICAgIGFwaS5zZXRFbmFibGVkKCFpc1dpdGhpbk5vbkVkaXRhYmxlTGlzdChlZGl0b3IsIGVsZW1lbnQpICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFZGl0YWJsZSgpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBub2RlQ2hhbmdlSGFuZGxlciA9IGUgPT4gdXBkYXRlQnV0dG9uU3RhdGUoZWRpdG9yLCBlLnBhcmVudHMpO1xuICAgICAgcmV0dXJuIHNldE5vZGVDaGFuZ2VIYW5kbGVyKGVkaXRvciwgbm9kZUNoYW5nZUhhbmRsZXIpO1xuICAgIH07XG4gICAgY29uc3QgYWRkU3BsaXRCdXR0b24gPSAoZWRpdG9yLCBpZCwgdG9vbHRpcCwgY21kLCBub2RlTmFtZSwgc3R5bGVzKSA9PiB7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkU3BsaXRCdXR0b24oaWQsIHtcbiAgICAgICAgdG9vbHRpcCxcbiAgICAgICAgaWNvbjogbm9kZU5hbWUgPT09ICdPTCcgPyAnb3JkZXJlZC1saXN0JyA6ICd1bm9yZGVyZWQtbGlzdCcsXG4gICAgICAgIHByZXNldHM6ICdsaXN0cHJldmlldycsXG4gICAgICAgIGNvbHVtbnM6IDMsXG4gICAgICAgIGZldGNoOiBjYWxsYmFjayA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbXMgPSBnbG9iYWwubWFwKHN0eWxlcywgc3R5bGVWYWx1ZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpY29uU3R5bGUgPSBub2RlTmFtZSA9PT0gJ09MJyA/ICdudW0nIDogJ2J1bGwnO1xuICAgICAgICAgICAgY29uc3QgaWNvbk5hbWUgPSBzdHlsZVZhbHVlID09PSAnZGlzYycgfHwgc3R5bGVWYWx1ZSA9PT0gJ2RlY2ltYWwnID8gJ2RlZmF1bHQnIDogc3R5bGVWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IG5vcm1hbGl6ZVN0eWxlVmFsdWUoc3R5bGVWYWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBkaXNwbGF5VGV4dCA9IHN0eWxlVmFsdWVUb1RleHQoc3R5bGVWYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB0eXBlOiAnY2hvaWNlaXRlbScsXG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtVmFsdWUsXG4gICAgICAgICAgICAgIGljb246ICdsaXN0LScgKyBpY29uU3R5bGUgKyAnLScgKyBpY29uTmFtZSxcbiAgICAgICAgICAgICAgdGV4dDogZGlzcGxheVRleHRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY2FsbGJhY2soaXRlbXMpO1xuICAgICAgICB9LFxuICAgICAgICBvbkFjdGlvbjogKCkgPT4gZWRpdG9yLmV4ZWNDb21tYW5kKGNtZCksXG4gICAgICAgIG9uSXRlbUFjdGlvbjogKF9zcGxpdEJ1dHRvbkFwaSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBhcHBseUxpc3RGb3JtYXQoZWRpdG9yLCBub2RlTmFtZSwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBzZWxlY3Q6IHZhbHVlID0+IHtcbiAgICAgICAgICBjb25zdCBsaXN0U3R5bGVUeXBlID0gZ2V0U2VsZWN0ZWRTdHlsZVR5cGUoZWRpdG9yKTtcbiAgICAgICAgICByZXR1cm4gbGlzdFN0eWxlVHlwZS5tYXAobGlzdFN0eWxlID0+IHZhbHVlID09PSBsaXN0U3R5bGUpLmdldE9yKGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25TZXR1cDogbWFrZVNldHVwSGFuZGxlcihlZGl0b3IsIG5vZGVOYW1lKVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBhZGRCdXR0b24gPSAoZWRpdG9yLCBpZCwgdG9vbHRpcCwgY21kLCBub2RlTmFtZSwgc3R5bGVWYWx1ZSkgPT4ge1xuICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZFRvZ2dsZUJ1dHRvbihpZCwge1xuICAgICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgICB0b29sdGlwLFxuICAgICAgICBpY29uOiBub2RlTmFtZSA9PT0gJ09MJyA/ICdvcmRlcmVkLWxpc3QnIDogJ3Vub3JkZXJlZC1saXN0JyxcbiAgICAgICAgb25TZXR1cDogbWFrZVNldHVwSGFuZGxlcihlZGl0b3IsIG5vZGVOYW1lKSxcbiAgICAgICAgb25BY3Rpb246ICgpID0+IGVkaXRvci5xdWVyeUNvbW1hbmRTdGF0ZShjbWQpIHx8IHN0eWxlVmFsdWUgPT09ICcnID8gZWRpdG9yLmV4ZWNDb21tYW5kKGNtZCkgOiBhcHBseUxpc3RGb3JtYXQoZWRpdG9yLCBub2RlTmFtZSwgc3R5bGVWYWx1ZSlcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYWRkQ29udHJvbCA9IChlZGl0b3IsIGlkLCB0b29sdGlwLCBjbWQsIG5vZGVOYW1lLCBzdHlsZXMpID0+IHtcbiAgICAgIGlmIChzdHlsZXMubGVuZ3RoID4gMSkge1xuICAgICAgICBhZGRTcGxpdEJ1dHRvbihlZGl0b3IsIGlkLCB0b29sdGlwLCBjbWQsIG5vZGVOYW1lLCBzdHlsZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWRkQnV0dG9uKGVkaXRvciwgaWQsIHRvb2x0aXAsIGNtZCwgbm9kZU5hbWUsIG5vcm1hbGl6ZVN0eWxlVmFsdWUoc3R5bGVzWzBdKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlciA9IGVkaXRvciA9PiB7XG4gICAgICBhZGRDb250cm9sKGVkaXRvciwgJ251bWxpc3QnLCAnTnVtYmVyZWQgbGlzdCcsICdJbnNlcnRPcmRlcmVkTGlzdCcsICdPTCcsIGdldE51bWJlclN0eWxlcyhlZGl0b3IpKTtcbiAgICAgIGFkZENvbnRyb2woZWRpdG9yLCAnYnVsbGlzdCcsICdCdWxsZXQgbGlzdCcsICdJbnNlcnRVbm9yZGVyZWRMaXN0JywgJ1VMJywgZ2V0QnVsbGV0U3R5bGVzKGVkaXRvcikpO1xuICAgIH07XG5cbiAgICB2YXIgUGx1Z2luID0gKCkgPT4ge1xuICAgICAgZ2xvYmFsJDEuYWRkKCdhZHZsaXN0JywgZWRpdG9yID0+IHtcbiAgICAgICAgaWYgKGVkaXRvci5oYXNQbHVnaW4oJ2xpc3RzJykpIHtcbiAgICAgICAgICByZWdpc3RlciQxKGVkaXRvcik7XG4gICAgICAgICAgcmVnaXN0ZXIoZWRpdG9yKTtcbiAgICAgICAgICByZWdpc3RlciQyKGVkaXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignUGxlYXNlIHVzZSB0aGUgTGlzdHMgcGx1Z2luIHRvZ2V0aGVyIHdpdGggdGhlIEFkdmFuY2VkIExpc3QgcGx1Z2luLicpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgUGx1Z2luKCk7XG5cbn0pKCk7XG4iLCIvLyBFeHBvcnRzIHRoZSBcImNvZGVcIiBwbHVnaW4gZm9yIHVzYWdlIHdpdGggbW9kdWxlIGxvYWRlcnNcbi8vIFVzYWdlOlxuLy8gICBDb21tb25KUzpcbi8vICAgICByZXF1aXJlKCd0aW55bWNlL3BsdWdpbnMvY29kZScpXG4vLyAgIEVTMjAxNTpcbi8vICAgICBpbXBvcnQgJ3RpbnltY2UvcGx1Z2lucy9jb2RlJ1xucmVxdWlyZSgnLi9wbHVnaW4uanMnKTsiLCIvKipcbiAqIFRpbnlNQ0UgdmVyc2lvbiA2LjcuMCAoMjAyMy0wOC0zMClcbiAqL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBnbG9iYWwgPSB0aW55bWNlLnV0aWwuVG9vbHMucmVzb2x2ZSgndGlueW1jZS5QbHVnaW5NYW5hZ2VyJyk7XG5cbiAgICBjb25zdCBzZXRDb250ZW50ID0gKGVkaXRvciwgaHRtbCkgPT4ge1xuICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICBlZGl0b3IudW5kb01hbmFnZXIudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICBlZGl0b3Iuc2V0Q29udGVudChodG1sKTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRDdXJzb3JMb2NhdGlvbigpO1xuICAgICAgZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRDb250ZW50ID0gZWRpdG9yID0+IHtcbiAgICAgIHJldHVybiBlZGl0b3IuZ2V0Q29udGVudCh7IHNvdXJjZV92aWV3OiB0cnVlIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBvcGVuID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGVkaXRvckNvbnRlbnQgPSBnZXRDb250ZW50KGVkaXRvcik7XG4gICAgICBlZGl0b3Iud2luZG93TWFuYWdlci5vcGVuKHtcbiAgICAgICAgdGl0bGU6ICdTb3VyY2UgQ29kZScsXG4gICAgICAgIHNpemU6ICdsYXJnZScsXG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB0eXBlOiAncGFuZWwnLFxuICAgICAgICAgIGl0ZW1zOiBbe1xuICAgICAgICAgICAgICB0eXBlOiAndGV4dGFyZWEnLFxuICAgICAgICAgICAgICBuYW1lOiAnY29kZSdcbiAgICAgICAgICAgIH1dXG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAnY2FuY2VsJyxcbiAgICAgICAgICAgIG5hbWU6ICdjYW5jZWwnLFxuICAgICAgICAgICAgdGV4dDogJ0NhbmNlbCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICAgICAgbmFtZTogJ3NhdmUnLFxuICAgICAgICAgICAgdGV4dDogJ1NhdmUnLFxuICAgICAgICAgICAgcHJpbWFyeTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgaW5pdGlhbERhdGE6IHsgY29kZTogZWRpdG9yQ29udGVudCB9LFxuICAgICAgICBvblN1Ym1pdDogYXBpID0+IHtcbiAgICAgICAgICBzZXRDb250ZW50KGVkaXRvciwgYXBpLmdldERhdGEoKS5jb2RlKTtcbiAgICAgICAgICBhcGkuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlZ2lzdGVyJDEgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmFkZENvbW1hbmQoJ21jZUNvZGVFZGl0b3InLCAoKSA9PiB7XG4gICAgICAgIG9wZW4oZWRpdG9yKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZWdpc3RlciA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBvbkFjdGlvbiA9ICgpID0+IGVkaXRvci5leGVjQ29tbWFuZCgnbWNlQ29kZUVkaXRvcicpO1xuICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZEJ1dHRvbignY29kZScsIHtcbiAgICAgICAgaWNvbjogJ3NvdXJjZWNvZGUnLFxuICAgICAgICB0b29sdGlwOiAnU291cmNlIGNvZGUnLFxuICAgICAgICBvbkFjdGlvblxuICAgICAgfSk7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTWVudUl0ZW0oJ2NvZGUnLCB7XG4gICAgICAgIGljb246ICdzb3VyY2Vjb2RlJyxcbiAgICAgICAgdGV4dDogJ1NvdXJjZSBjb2RlJyxcbiAgICAgICAgb25BY3Rpb25cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB2YXIgUGx1Z2luID0gKCkgPT4ge1xuICAgICAgZ2xvYmFsLmFkZCgnY29kZScsIGVkaXRvciA9PiB7XG4gICAgICAgIHJlZ2lzdGVyJDEoZWRpdG9yKTtcbiAgICAgICAgcmVnaXN0ZXIoZWRpdG9yKTtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIFBsdWdpbigpO1xuXG59KSgpO1xuIiwiLy8gRXhwb3J0cyB0aGUgXCJlbW90aWNvbnNcIiBwbHVnaW4gZm9yIHVzYWdlIHdpdGggbW9kdWxlIGxvYWRlcnNcbi8vIFVzYWdlOlxuLy8gICBDb21tb25KUzpcbi8vICAgICByZXF1aXJlKCd0aW55bWNlL3BsdWdpbnMvZW1vdGljb25zJylcbi8vICAgRVMyMDE1OlxuLy8gICAgIGltcG9ydCAndGlueW1jZS9wbHVnaW5zL2Vtb3RpY29ucydcbnJlcXVpcmUoJy4vcGx1Z2luLmpzJyk7Iiwid2luZG93LnRpbnltY2UuUmVzb3VyY2UuYWRkKFwidGlueW1jZS5wbHVnaW5zLmVtb3RpY29uc1wiLHtncmlubmluZzp7a2V5d29yZHM6W1wiZmFjZVwiLFwic21pbGVcIixcImhhcHB5XCIsXCJqb3lcIixcIjpEXCIsXCJncmluXCJdLGNoYXI6XCLwn5iAXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZ3JpbWFjaW5nOntrZXl3b3JkczpbXCJmYWNlXCIsXCJncmltYWNlXCIsXCJ0ZWV0aFwiXSxjaGFyOlwi8J+YrFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGdyaW46e2tleXdvcmRzOltcImZhY2VcIixcImhhcHB5XCIsXCJzbWlsZVwiLFwiam95XCIsXCJrYXdhaWlcIl0sY2hhcjpcIvCfmIFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxqb3k6e2tleXdvcmRzOltcImZhY2VcIixcImNyeVwiLFwidGVhcnNcIixcIndlZXBcIixcImhhcHB5XCIsXCJoYXBweXRlYXJzXCIsXCJoYWhhXCJdLGNoYXI6XCLwn5iCXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0scm9mbDp7a2V5d29yZHM6W1wiZmFjZVwiLFwicm9sbGluZ1wiLFwiZmxvb3JcIixcImxhdWdoaW5nXCIsXCJsb2xcIixcImhhaGFcIl0sY2hhcjpcIvCfpKNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxwYXJ0eWluZzp7a2V5d29yZHM6W1wiZmFjZVwiLFwiY2VsZWJyYXRpb25cIixcIndvb2hvb1wiXSxjaGFyOlwi8J+ls1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHNtaWxleTp7a2V5d29yZHM6W1wiZmFjZVwiLFwiaGFwcHlcIixcImpveVwiLFwiaGFoYVwiLFwiOkRcIixcIjopXCIsXCJzbWlsZVwiLFwiZnVubnlcIl0sY2hhcjpcIvCfmINcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxzbWlsZTp7a2V5d29yZHM6W1wiZmFjZVwiLFwiaGFwcHlcIixcImpveVwiLFwiZnVubnlcIixcImhhaGFcIixcImxhdWdoXCIsXCJsaWtlXCIsXCI6RFwiLFwiOilcIl0sY2hhcjpcIvCfmIRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxzd2VhdF9zbWlsZTp7a2V5d29yZHM6W1wiZmFjZVwiLFwiaG90XCIsXCJoYXBweVwiLFwibGF1Z2hcIixcInN3ZWF0XCIsXCJzbWlsZVwiLFwicmVsaWVmXCJdLGNoYXI6XCLwn5iFXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbGF1Z2hpbmc6e2tleXdvcmRzOltcImhhcHB5XCIsXCJqb3lcIixcImxvbFwiLFwic2F0aXNmaWVkXCIsXCJoYWhhXCIsXCJmYWNlXCIsXCJnbGFkXCIsXCJYRFwiLFwibGF1Z2hcIl0sY2hhcjpcIvCfmIZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxpbm5vY2VudDp7a2V5d29yZHM6W1wiZmFjZVwiLFwiYW5nZWxcIixcImhlYXZlblwiLFwiaGFsb1wiXSxjaGFyOlwi8J+Yh1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdpbms6e2tleXdvcmRzOltcImZhY2VcIixcImhhcHB5XCIsXCJtaXNjaGlldm91c1wiLFwic2VjcmV0XCIsXCI7KVwiLFwic21pbGVcIixcImV5ZVwiXSxjaGFyOlwi8J+YiVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGJsdXNoOntrZXl3b3JkczpbXCJmYWNlXCIsXCJzbWlsZVwiLFwiaGFwcHlcIixcImZsdXNoZWRcIixcImNydXNoXCIsXCJlbWJhcnJhc3NlZFwiLFwic2h5XCIsXCJqb3lcIl0sY2hhcjpcIvCfmIpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxzbGlnaHRseV9zbWlsaW5nX2ZhY2U6e2tleXdvcmRzOltcImZhY2VcIixcInNtaWxlXCJdLGNoYXI6XCLwn5mCXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sdXBzaWRlX2Rvd25fZmFjZTp7a2V5d29yZHM6W1wiZmFjZVwiLFwiZmxpcHBlZFwiLFwic2lsbHlcIixcInNtaWxlXCJdLGNoYXI6XCLwn5mDXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0scmVsYXhlZDp7a2V5d29yZHM6W1wiZmFjZVwiLFwiYmx1c2hcIixcIm1hc3NhZ2VcIixcImhhcHBpbmVzc1wiXSxjaGFyOlwi4pi677iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0seXVtOntrZXl3b3JkczpbXCJoYXBweVwiLFwiam95XCIsXCJ0b25ndWVcIixcInNtaWxlXCIsXCJmYWNlXCIsXCJzaWxseVwiLFwieXVtbXlcIixcIm5vbVwiLFwiZGVsaWNpb3VzXCIsXCJzYXZvdXJpbmdcIl0sY2hhcjpcIvCfmItcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxyZWxpZXZlZDp7a2V5d29yZHM6W1wiZmFjZVwiLFwicmVsYXhlZFwiLFwicGhld1wiLFwibWFzc2FnZVwiLFwiaGFwcGluZXNzXCJdLGNoYXI6XCLwn5iMXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0saGVhcnRfZXllczp7a2V5d29yZHM6W1wiZmFjZVwiLFwibG92ZVwiLFwibGlrZVwiLFwiYWZmZWN0aW9uXCIsXCJ2YWxlbnRpbmVzXCIsXCJpbmZhdHVhdGlvblwiLFwiY3J1c2hcIixcImhlYXJ0XCJdLGNoYXI6XCLwn5iNXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sc21pbGluZ19mYWNlX3dpdGhfdGhyZWVfaGVhcnRzOntrZXl3b3JkczpbXCJmYWNlXCIsXCJsb3ZlXCIsXCJsaWtlXCIsXCJhZmZlY3Rpb25cIixcInZhbGVudGluZXNcIixcImluZmF0dWF0aW9uXCIsXCJjcnVzaFwiLFwiaGVhcnRzXCIsXCJhZG9yZVwiXSxjaGFyOlwi8J+lsFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGtpc3NpbmdfaGVhcnQ6e2tleXdvcmRzOltcImZhY2VcIixcImxvdmVcIixcImxpa2VcIixcImFmZmVjdGlvblwiLFwidmFsZW50aW5lc1wiLFwiaW5mYXR1YXRpb25cIixcImtpc3NcIl0sY2hhcjpcIvCfmJhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxraXNzaW5nOntrZXl3b3JkczpbXCJsb3ZlXCIsXCJsaWtlXCIsXCJmYWNlXCIsXCIzXCIsXCJ2YWxlbnRpbmVzXCIsXCJpbmZhdHVhdGlvblwiLFwia2lzc1wiXSxjaGFyOlwi8J+Yl1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGtpc3Npbmdfc21pbGluZ19leWVzOntrZXl3b3JkczpbXCJmYWNlXCIsXCJhZmZlY3Rpb25cIixcInZhbGVudGluZXNcIixcImluZmF0dWF0aW9uXCIsXCJraXNzXCJdLGNoYXI6XCLwn5iZXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sa2lzc2luZ19jbG9zZWRfZXllczp7a2V5d29yZHM6W1wiZmFjZVwiLFwibG92ZVwiLFwibGlrZVwiLFwiYWZmZWN0aW9uXCIsXCJ2YWxlbnRpbmVzXCIsXCJpbmZhdHVhdGlvblwiLFwia2lzc1wiXSxjaGFyOlwi8J+YmlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHN0dWNrX291dF90b25ndWVfd2lua2luZ19leWU6e2tleXdvcmRzOltcImZhY2VcIixcInByYW5rXCIsXCJjaGlsZGlzaFwiLFwicGxheWZ1bFwiLFwibWlzY2hpZXZvdXNcIixcInNtaWxlXCIsXCJ3aW5rXCIsXCJ0b25ndWVcIl0sY2hhcjpcIvCfmJxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSx6YW55OntrZXl3b3JkczpbXCJmYWNlXCIsXCJnb29meVwiLFwiY3JhenlcIl0sY2hhcjpcIvCfpKpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxyYWlzZWRfZXllYnJvdzp7a2V5d29yZHM6W1wiZmFjZVwiLFwiZGlzdHJ1c3RcIixcInNjZXB0aWNpc21cIixcImRpc2FwcHJvdmFsXCIsXCJkaXNiZWxpZWZcIixcInN1cnByaXNlXCJdLGNoYXI6XCLwn6SoXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbW9ub2NsZTp7a2V5d29yZHM6W1wiZmFjZVwiLFwic3R1ZmZ5XCIsXCJ3ZWFsdGh5XCJdLGNoYXI6XCLwn6eQXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sc3R1Y2tfb3V0X3Rvbmd1ZV9jbG9zZWRfZXllczp7a2V5d29yZHM6W1wiZmFjZVwiLFwicHJhbmtcIixcInBsYXlmdWxcIixcIm1pc2NoaWV2b3VzXCIsXCJzbWlsZVwiLFwidG9uZ3VlXCJdLGNoYXI6XCLwn5idXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sc3R1Y2tfb3V0X3Rvbmd1ZTp7a2V5d29yZHM6W1wiZmFjZVwiLFwicHJhbmtcIixcImNoaWxkaXNoXCIsXCJwbGF5ZnVsXCIsXCJtaXNjaGlldm91c1wiLFwic21pbGVcIixcInRvbmd1ZVwiXSxjaGFyOlwi8J+Ym1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1vbmV5X21vdXRoX2ZhY2U6e2tleXdvcmRzOltcImZhY2VcIixcInJpY2hcIixcImRvbGxhclwiLFwibW9uZXlcIl0sY2hhcjpcIvCfpJFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxuZXJkX2ZhY2U6e2tleXdvcmRzOltcImZhY2VcIixcIm5lcmR5XCIsXCJnZWVrXCIsXCJkb3JrXCJdLGNoYXI6XCLwn6STXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sc3VuZ2xhc3Nlczp7a2V5d29yZHM6W1wiZmFjZVwiLFwiY29vbFwiLFwic21pbGVcIixcInN1bW1lclwiLFwiYmVhY2hcIixcInN1bmdsYXNzXCJdLGNoYXI6XCLwn5iOXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sc3Rhcl9zdHJ1Y2s6e2tleXdvcmRzOltcImZhY2VcIixcInNtaWxlXCIsXCJzdGFycnlcIixcImV5ZXNcIixcImdyaW5uaW5nXCJdLGNoYXI6XCLwn6SpXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sY2xvd25fZmFjZTp7a2V5d29yZHM6W1wiZmFjZVwiXSxjaGFyOlwi8J+koVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGNvd2JveV9oYXRfZmFjZTp7a2V5d29yZHM6W1wiZmFjZVwiLFwiY293Z2lybFwiLFwiaGF0XCJdLGNoYXI6XCLwn6SgXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0saHVnczp7a2V5d29yZHM6W1wiZmFjZVwiLFwic21pbGVcIixcImh1Z1wiXSxjaGFyOlwi8J+kl1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHNtaXJrOntrZXl3b3JkczpbXCJmYWNlXCIsXCJzbWlsZVwiLFwibWVhblwiLFwicHJhbmtcIixcInNtdWdcIixcInNhcmNhc21cIl0sY2hhcjpcIvCfmI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxub19tb3V0aDp7a2V5d29yZHM6W1wiZmFjZVwiLFwiaGVsbG9raXR0eVwiXSxjaGFyOlwi8J+YtlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG5ldXRyYWxfZmFjZTp7a2V5d29yZHM6W1wiaW5kaWZmZXJlbmNlXCIsXCJtZWhcIixcIjp8XCIsXCJuZXV0cmFsXCJdLGNoYXI6XCLwn5iQXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZXhwcmVzc2lvbmxlc3M6e2tleXdvcmRzOltcImZhY2VcIixcImluZGlmZmVyZW50XCIsXCItXy1cIixcIm1laFwiLFwiZGVhZHBhblwiXSxjaGFyOlwi8J+YkVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHVuYW11c2VkOntrZXl3b3JkczpbXCJpbmRpZmZlcmVuY2VcIixcImJvcmVkXCIsXCJzdHJhaWdodCBmYWNlXCIsXCJzZXJpb3VzXCIsXCJzYXJjYXNtXCIsXCJ1bmltcHJlc3NlZFwiLFwic2tlcHRpY2FsXCIsXCJkdWJpb3VzXCIsXCJzaWRlX2V5ZVwiXSxjaGFyOlwi8J+YklwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHJvbGxfZXllczp7a2V5d29yZHM6W1wiZmFjZVwiLFwiZXllcm9sbFwiLFwiZnJ1c3RyYXRlZFwiXSxjaGFyOlwi8J+ZhFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHRoaW5raW5nOntrZXl3b3JkczpbXCJmYWNlXCIsXCJobW1tXCIsXCJ0aGlua1wiLFwiY29uc2lkZXJcIl0sY2hhcjpcIvCfpJRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxseWluZ19mYWNlOntrZXl3b3JkczpbXCJmYWNlXCIsXCJsaWVcIixcInBpbm9jY2hpb1wiXSxjaGFyOlwi8J+kpVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGhhbmRfb3Zlcl9tb3V0aDp7a2V5d29yZHM6W1wiZmFjZVwiLFwid2hvb3BzXCIsXCJzaG9ja1wiLFwic3VycHJpc2VcIl0sY2hhcjpcIvCfpK1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxzaHVzaGluZzp7a2V5d29yZHM6W1wiZmFjZVwiLFwicXVpZXRcIixcInNoaGhcIl0sY2hhcjpcIvCfpKtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxzeW1ib2xzX292ZXJfbW91dGg6e2tleXdvcmRzOltcImZhY2VcIixcInN3ZWFyaW5nXCIsXCJjdXJzaW5nXCIsXCJjdXNzaW5nXCIsXCJwcm9mYW5pdHlcIixcImV4cGxldGl2ZVwiXSxjaGFyOlwi8J+krFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGV4cGxvZGluZ19oZWFkOntrZXl3b3JkczpbXCJmYWNlXCIsXCJzaG9ja2VkXCIsXCJtaW5kXCIsXCJibG93blwiXSxjaGFyOlwi8J+kr1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGZsdXNoZWQ6e2tleXdvcmRzOltcImZhY2VcIixcImJsdXNoXCIsXCJzaHlcIixcImZsYXR0ZXJlZFwiXSxjaGFyOlwi8J+Ys1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGRpc2FwcG9pbnRlZDp7a2V5d29yZHM6W1wiZmFjZVwiLFwic2FkXCIsXCJ1cHNldFwiLFwiZGVwcmVzc2VkXCIsXCI6KFwiXSxjaGFyOlwi8J+YnlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvcnJpZWQ6e2tleXdvcmRzOltcImZhY2VcIixcImNvbmNlcm5cIixcIm5lcnZvdXNcIixcIjooXCJdLGNoYXI6XCLwn5ifXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sYW5ncnk6e2tleXdvcmRzOltcIm1hZFwiLFwiZmFjZVwiLFwiYW5ub3llZFwiLFwiZnJ1c3RyYXRlZFwiXSxjaGFyOlwi8J+YoFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHJhZ2U6e2tleXdvcmRzOltcImFuZ3J5XCIsXCJtYWRcIixcImhhdGVcIixcImRlc3Bpc2VcIl0sY2hhcjpcIvCfmKFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxwZW5zaXZlOntrZXl3b3JkczpbXCJmYWNlXCIsXCJzYWRcIixcImRlcHJlc3NlZFwiLFwidXBzZXRcIl0sY2hhcjpcIvCfmJRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxjb25mdXNlZDp7a2V5d29yZHM6W1wiZmFjZVwiLFwiaW5kaWZmZXJlbmNlXCIsXCJodWhcIixcIndlaXJkXCIsXCJobW1tXCIsXCI6L1wiXSxjaGFyOlwi8J+YlVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHNsaWdodGx5X2Zyb3duaW5nX2ZhY2U6e2tleXdvcmRzOltcImZhY2VcIixcImZyb3duaW5nXCIsXCJkaXNhcHBvaW50ZWRcIixcInNhZFwiLFwidXBzZXRcIl0sY2hhcjpcIvCfmYFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmcm93bmluZ19mYWNlOntrZXl3b3JkczpbXCJmYWNlXCIsXCJzYWRcIixcInVwc2V0XCIsXCJmcm93blwiXSxjaGFyOlwi4pi5XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0scGVyc2V2ZXJlOntrZXl3b3JkczpbXCJmYWNlXCIsXCJzaWNrXCIsXCJub1wiLFwidXBzZXRcIixcIm9vcHNcIl0sY2hhcjpcIvCfmKNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxjb25mb3VuZGVkOntrZXl3b3JkczpbXCJmYWNlXCIsXCJjb25mdXNlZFwiLFwic2lja1wiLFwidW53ZWxsXCIsXCJvb3BzXCIsXCI6U1wiXSxjaGFyOlwi8J+YllwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHRpcmVkX2ZhY2U6e2tleXdvcmRzOltcInNpY2tcIixcIndoaW5lXCIsXCJ1cHNldFwiLFwiZnJ1c3RyYXRlZFwiXSxjaGFyOlwi8J+Yq1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdlYXJ5OntrZXl3b3JkczpbXCJmYWNlXCIsXCJ0aXJlZFwiLFwic2xlZXB5XCIsXCJzYWRcIixcImZydXN0cmF0ZWRcIixcInVwc2V0XCJdLGNoYXI6XCLwn5ipXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0scGxlYWRpbmc6e2tleXdvcmRzOltcImZhY2VcIixcImJlZ2dpbmdcIixcIm1lcmN5XCJdLGNoYXI6XCLwn6W6XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sdHJpdW1waDp7a2V5d29yZHM6W1wiZmFjZVwiLFwiZ2FzXCIsXCJwaGV3XCIsXCJwcm91ZFwiLFwicHJpZGVcIl0sY2hhcjpcIvCfmKRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxvcGVuX21vdXRoOntrZXl3b3JkczpbXCJmYWNlXCIsXCJzdXJwcmlzZVwiLFwiaW1wcmVzc2VkXCIsXCJ3b3dcIixcIndob2FcIixcIjpPXCJdLGNoYXI6XCLwn5iuXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sc2NyZWFtOntrZXl3b3JkczpbXCJmYWNlXCIsXCJtdW5jaFwiLFwic2NhcmVkXCIsXCJvbWdcIl0sY2hhcjpcIvCfmLFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmZWFyZnVsOntrZXl3b3JkczpbXCJmYWNlXCIsXCJzY2FyZWRcIixcInRlcnJpZmllZFwiLFwibmVydm91c1wiLFwib29wc1wiLFwiaHVoXCJdLGNoYXI6XCLwn5ioXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sY29sZF9zd2VhdDp7a2V5d29yZHM6W1wiZmFjZVwiLFwibmVydm91c1wiLFwic3dlYXRcIl0sY2hhcjpcIvCfmLBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxodXNoZWQ6e2tleXdvcmRzOltcImZhY2VcIixcIndvb1wiLFwic2hoXCJdLGNoYXI6XCLwn5ivXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZnJvd25pbmc6e2tleXdvcmRzOltcImZhY2VcIixcImF3XCIsXCJ3aGF0XCJdLGNoYXI6XCLwn5imXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sYW5ndWlzaGVkOntrZXl3b3JkczpbXCJmYWNlXCIsXCJzdHVubmVkXCIsXCJuZXJ2b3VzXCJdLGNoYXI6XCLwn5inXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sY3J5OntrZXl3b3JkczpbXCJmYWNlXCIsXCJ0ZWFyc1wiLFwic2FkXCIsXCJkZXByZXNzZWRcIixcInVwc2V0XCIsXCI6JyhcIl0sY2hhcjpcIvCfmKJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxkaXNhcHBvaW50ZWRfcmVsaWV2ZWQ6e2tleXdvcmRzOltcImZhY2VcIixcInBoZXdcIixcInN3ZWF0XCIsXCJuZXJ2b3VzXCJdLGNoYXI6XCLwn5ilXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZHJvb2xpbmdfZmFjZTp7a2V5d29yZHM6W1wiZmFjZVwiXSxjaGFyOlwi8J+kpFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHNsZWVweTp7a2V5d29yZHM6W1wiZmFjZVwiLFwidGlyZWRcIixcInJlc3RcIixcIm5hcFwiXSxjaGFyOlwi8J+YqlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHN3ZWF0OntrZXl3b3JkczpbXCJmYWNlXCIsXCJob3RcIixcInNhZFwiLFwidGlyZWRcIixcImV4ZXJjaXNlXCJdLGNoYXI6XCLwn5iTXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0saG90OntrZXl3b3JkczpbXCJmYWNlXCIsXCJmZXZlcmlzaFwiLFwiaGVhdFwiLFwicmVkXCIsXCJzd2VhdGluZ1wiXSxjaGFyOlwi8J+ltVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGNvbGQ6e2tleXdvcmRzOltcImZhY2VcIixcImJsdWVcIixcImZyZWV6aW5nXCIsXCJmcm96ZW5cIixcImZyb3N0Yml0ZVwiLFwiaWNpY2xlc1wiXSxjaGFyOlwi8J+ltlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHNvYjp7a2V5d29yZHM6W1wiZmFjZVwiLFwiY3J5XCIsXCJ0ZWFyc1wiLFwic2FkXCIsXCJ1cHNldFwiLFwiZGVwcmVzc2VkXCJdLGNoYXI6XCLwn5itXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZGl6enlfZmFjZTp7a2V5d29yZHM6W1wic3BlbnRcIixcInVuY29uc2Npb3VzXCIsXCJ4b3hcIixcImRpenp5XCJdLGNoYXI6XCLwn5i1XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sYXN0b25pc2hlZDp7a2V5d29yZHM6W1wiZmFjZVwiLFwieG94XCIsXCJzdXJwcmlzZWRcIixcInBvaXNvbmVkXCJdLGNoYXI6XCLwn5iyXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0semlwcGVyX21vdXRoX2ZhY2U6e2tleXdvcmRzOltcImZhY2VcIixcInNlYWxlZFwiLFwiemlwcGVyXCIsXCJzZWNyZXRcIl0sY2hhcjpcIvCfpJBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxuYXVzZWF0ZWRfZmFjZTp7a2V5d29yZHM6W1wiZmFjZVwiLFwidm9taXRcIixcImdyb3NzXCIsXCJncmVlblwiLFwic2lja1wiLFwidGhyb3cgdXBcIixcImlsbFwiXSxjaGFyOlwi8J+kolwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHNuZWV6aW5nX2ZhY2U6e2tleXdvcmRzOltcImZhY2VcIixcImdlc3VuZGhlaXRcIixcInNuZWV6ZVwiLFwic2lja1wiLFwiYWxsZXJneVwiXSxjaGFyOlwi8J+kp1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHZvbWl0aW5nOntrZXl3b3JkczpbXCJmYWNlXCIsXCJzaWNrXCJdLGNoYXI6XCLwn6SuXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbWFzazp7a2V5d29yZHM6W1wiZmFjZVwiLFwic2lja1wiLFwiaWxsXCIsXCJkaXNlYXNlXCJdLGNoYXI6XCLwn5i3XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFjZV93aXRoX3RoZXJtb21ldGVyOntrZXl3b3JkczpbXCJzaWNrXCIsXCJ0ZW1wZXJhdHVyZVwiLFwidGhlcm1vbWV0ZXJcIixcImNvbGRcIixcImZldmVyXCJdLGNoYXI6XCLwn6SSXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFjZV93aXRoX2hlYWRfYmFuZGFnZTp7a2V5d29yZHM6W1wiaW5qdXJlZFwiLFwiY2x1bXN5XCIsXCJiYW5kYWdlXCIsXCJodXJ0XCJdLGNoYXI6XCLwn6SVXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sd29venk6e2tleXdvcmRzOltcImZhY2VcIixcImRpenp5XCIsXCJpbnRveGljYXRlZFwiLFwidGlwc3lcIixcIndhdnlcIl0sY2hhcjpcIvCfpbRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxzbGVlcGluZzp7a2V5d29yZHM6W1wiZmFjZVwiLFwidGlyZWRcIixcInNsZWVweVwiLFwibmlnaHRcIixcInp6elwiXSxjaGFyOlwi8J+YtFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHp6ejp7a2V5d29yZHM6W1wic2xlZXB5XCIsXCJ0aXJlZFwiLFwiZHJlYW1cIl0sY2hhcjpcIvCfkqRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxwb29wOntrZXl3b3JkczpbXCJoYW5rZXlcIixcInNoaXRmYWNlXCIsXCJmYWlsXCIsXCJ0dXJkXCIsXCJzaGl0XCJdLGNoYXI6XCLwn5KpXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sc21pbGluZ19pbXA6e2tleXdvcmRzOltcImRldmlsXCIsXCJob3Juc1wiXSxjaGFyOlwi8J+YiFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGltcDp7a2V5d29yZHM6W1wiZGV2aWxcIixcImFuZ3J5XCIsXCJob3Juc1wiXSxjaGFyOlwi8J+Rv1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGphcGFuZXNlX29ncmU6e2tleXdvcmRzOltcIm1vbnN0ZXJcIixcInJlZFwiLFwibWFza1wiLFwiaGFsbG93ZWVuXCIsXCJzY2FyeVwiLFwiY3JlZXB5XCIsXCJkZXZpbFwiLFwiZGVtb25cIixcImphcGFuZXNlXCIsXCJvZ3JlXCJdLGNoYXI6XCLwn5G5XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0samFwYW5lc2VfZ29ibGluOntrZXl3b3JkczpbXCJyZWRcIixcImV2aWxcIixcIm1hc2tcIixcIm1vbnN0ZXJcIixcInNjYXJ5XCIsXCJjcmVlcHlcIixcImphcGFuZXNlXCIsXCJnb2JsaW5cIl0sY2hhcjpcIvCfkbpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxza3VsbDp7a2V5d29yZHM6W1wiZGVhZFwiLFwic2tlbGV0b25cIixcImNyZWVweVwiLFwiZGVhdGhcIl0sY2hhcjpcIvCfkoBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxnaG9zdDp7a2V5d29yZHM6W1wiaGFsbG93ZWVuXCIsXCJzcG9va3lcIixcInNjYXJ5XCJdLGNoYXI6XCLwn5G7XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sYWxpZW46e2tleXdvcmRzOltcIlVGT1wiLFwicGF1bFwiLFwid2VpcmRcIixcIm91dGVyX3NwYWNlXCJdLGNoYXI6XCLwn5G9XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0scm9ib3Q6e2tleXdvcmRzOltcImNvbXB1dGVyXCIsXCJtYWNoaW5lXCIsXCJib3RcIl0sY2hhcjpcIvCfpJZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxzbWlsZXlfY2F0OntrZXl3b3JkczpbXCJhbmltYWxcIixcImNhdHNcIixcImhhcHB5XCIsXCJzbWlsZVwiXSxjaGFyOlwi8J+YulwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHNtaWxlX2NhdDp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJjYXRzXCIsXCJzbWlsZVwiXSxjaGFyOlwi8J+YuFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGpveV9jYXQ6e2tleXdvcmRzOltcImFuaW1hbFwiLFwiY2F0c1wiLFwiaGFoYVwiLFwiaGFwcHlcIixcInRlYXJzXCJdLGNoYXI6XCLwn5i5XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0saGVhcnRfZXllc19jYXQ6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibG92ZVwiLFwibGlrZVwiLFwiYWZmZWN0aW9uXCIsXCJjYXRzXCIsXCJ2YWxlbnRpbmVzXCIsXCJoZWFydFwiXSxjaGFyOlwi8J+Yu1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHNtaXJrX2NhdDp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJjYXRzXCIsXCJzbWlya1wiXSxjaGFyOlwi8J+YvFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGtpc3NpbmdfY2F0OntrZXl3b3JkczpbXCJhbmltYWxcIixcImNhdHNcIixcImtpc3NcIl0sY2hhcjpcIvCfmL1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxzY3JlYW1fY2F0OntrZXl3b3JkczpbXCJhbmltYWxcIixcImNhdHNcIixcIm11bmNoXCIsXCJzY2FyZWRcIixcInNjcmVhbVwiXSxjaGFyOlwi8J+ZgFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGNyeWluZ19jYXRfZmFjZTp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJ0ZWFyc1wiLFwid2VlcFwiLFwic2FkXCIsXCJjYXRzXCIsXCJ1cHNldFwiLFwiY3J5XCJdLGNoYXI6XCLwn5i/XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0scG91dGluZ19jYXQ6e2tleXdvcmRzOltcImFuaW1hbFwiLFwiY2F0c1wiXSxjaGFyOlwi8J+YvlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHBhbG1zX3VwOntrZXl3b3JkczpbXCJoYW5kc1wiLFwiZ2VzdHVyZVwiLFwiY3VwcGVkXCIsXCJwcmF5ZXJcIl0sY2hhcjpcIvCfpLJcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHJhaXNlZF9oYW5kczp7a2V5d29yZHM6W1wiZ2VzdHVyZVwiLFwiaG9vcmF5XCIsXCJ5ZWFcIixcImNlbGVicmF0aW9uXCIsXCJoYW5kc1wiXSxjaGFyOlwi8J+ZjFwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sY2xhcDp7a2V5d29yZHM6W1wiaGFuZHNcIixcInByYWlzZVwiLFwiYXBwbGF1c2VcIixcImNvbmdyYXRzXCIsXCJ5YXlcIl0sY2hhcjpcIvCfkY9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdhdmU6e2tleXdvcmRzOltcImhhbmRzXCIsXCJnZXN0dXJlXCIsXCJnb29kYnllXCIsXCJzb2xvbmdcIixcImZhcmV3ZWxsXCIsXCJoZWxsb1wiLFwiaGlcIixcInBhbG1cIl0sY2hhcjpcIvCfkYtcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGNhbGxfbWVfaGFuZDp7a2V5d29yZHM6W1wiaGFuZHNcIixcImdlc3R1cmVcIl0sY2hhcjpcIvCfpJlcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LFwiKzFcIjp7a2V5d29yZHM6W1widGh1bWJzdXBcIixcInllc1wiLFwiYXdlc29tZVwiLFwiZ29vZFwiLFwiYWdyZWVcIixcImFjY2VwdFwiLFwiY29vbFwiLFwiaGFuZFwiLFwibGlrZVwiXSxjaGFyOlwi8J+RjVwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sXCItMVwiOntrZXl3b3JkczpbXCJ0aHVtYnNkb3duXCIsXCJub1wiLFwiZGlzbGlrZVwiLFwiaGFuZFwiXSxjaGFyOlwi8J+RjlwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFjZXB1bmNoOntrZXl3b3JkczpbXCJhbmdyeVwiLFwidmlvbGVuY2VcIixcImZpc3RcIixcImhpdFwiLFwiYXR0YWNrXCIsXCJoYW5kXCJdLGNoYXI6XCLwn5GKXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmaXN0OntrZXl3b3JkczpbXCJmaW5nZXJzXCIsXCJoYW5kXCIsXCJncmFzcFwiXSxjaGFyOlwi4pyKXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmaXN0X2xlZnQ6e2tleXdvcmRzOltcImhhbmRcIixcImZpc3RidW1wXCJdLGNoYXI6XCLwn6SbXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmaXN0X3JpZ2h0OntrZXl3b3JkczpbXCJoYW5kXCIsXCJmaXN0YnVtcFwiXSxjaGFyOlwi8J+knFwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sdjp7a2V5d29yZHM6W1wiZmluZ2Vyc1wiLFwib2h5ZWFoXCIsXCJoYW5kXCIsXCJwZWFjZVwiLFwidmljdG9yeVwiLFwidHdvXCJdLGNoYXI6XCLinIxcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG9rX2hhbmQ6e2tleXdvcmRzOltcImZpbmdlcnNcIixcImxpbWJzXCIsXCJwZXJmZWN0XCIsXCJva1wiLFwib2theVwiXSxjaGFyOlwi8J+RjFwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0scmFpc2VkX2hhbmQ6e2tleXdvcmRzOltcImZpbmdlcnNcIixcInN0b3BcIixcImhpZ2hmaXZlXCIsXCJwYWxtXCIsXCJiYW5cIl0sY2hhcjpcIuKci1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0scmFpc2VkX2JhY2tfb2ZfaGFuZDp7a2V5d29yZHM6W1wiZmluZ2Vyc1wiLFwicmFpc2VkXCIsXCJiYWNraGFuZFwiXSxjaGFyOlwi8J+kmlwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sb3Blbl9oYW5kczp7a2V5d29yZHM6W1wiZmluZ2Vyc1wiLFwiYnV0dGVyZmx5XCIsXCJoYW5kc1wiLFwib3BlblwiXSxjaGFyOlwi8J+RkFwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbXVzY2xlOntrZXl3b3JkczpbXCJhcm1cIixcImZsZXhcIixcImhhbmRcIixcInN1bW1lclwiLFwic3Ryb25nXCIsXCJiaWNlcHNcIl0sY2hhcjpcIvCfkqpcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHByYXk6e2tleXdvcmRzOltcInBsZWFzZVwiLFwiaG9wZVwiLFwid2lzaFwiLFwibmFtYXN0ZVwiLFwiaGlnaGZpdmVcIl0sY2hhcjpcIvCfmY9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGZvb3Q6e2tleXdvcmRzOltcImtpY2tcIixcInN0b21wXCJdLGNoYXI6XCLwn6a2XCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxsZWc6e2tleXdvcmRzOltcImtpY2tcIixcImxpbWJcIl0sY2hhcjpcIvCfprVcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGhhbmRzaGFrZTp7a2V5d29yZHM6W1wiYWdyZWVtZW50XCIsXCJzaGFrZVwiXSxjaGFyOlwi8J+knVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHBvaW50X3VwOntrZXl3b3JkczpbXCJoYW5kXCIsXCJmaW5nZXJzXCIsXCJkaXJlY3Rpb25cIixcInVwXCJdLGNoYXI6XCLimJ1cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHBvaW50X3VwXzI6e2tleXdvcmRzOltcImZpbmdlcnNcIixcImhhbmRcIixcImRpcmVjdGlvblwiLFwidXBcIl0sY2hhcjpcIvCfkYZcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHBvaW50X2Rvd246e2tleXdvcmRzOltcImZpbmdlcnNcIixcImhhbmRcIixcImRpcmVjdGlvblwiLFwiZG93blwiXSxjaGFyOlwi8J+Rh1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0scG9pbnRfbGVmdDp7a2V5d29yZHM6W1wiZGlyZWN0aW9uXCIsXCJmaW5nZXJzXCIsXCJoYW5kXCIsXCJsZWZ0XCJdLGNoYXI6XCLwn5GIXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxwb2ludF9yaWdodDp7a2V5d29yZHM6W1wiZmluZ2Vyc1wiLFwiaGFuZFwiLFwiZGlyZWN0aW9uXCIsXCJyaWdodFwiXSxjaGFyOlwi8J+RiVwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZnU6e2tleXdvcmRzOltcImhhbmRcIixcImZpbmdlcnNcIixcInJ1ZGVcIixcIm1pZGRsZVwiLFwiZmxpcHBpbmdcIl0sY2hhcjpcIvCflpVcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHJhaXNlZF9oYW5kX3dpdGhfZmluZ2Vyc19zcGxheWVkOntrZXl3b3JkczpbXCJoYW5kXCIsXCJmaW5nZXJzXCIsXCJwYWxtXCJdLGNoYXI6XCLwn5aQXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxsb3ZlX3lvdTp7a2V5d29yZHM6W1wiaGFuZFwiLFwiZmluZ2Vyc1wiLFwiZ2VzdHVyZVwiXSxjaGFyOlwi8J+kn1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbWV0YWw6e2tleXdvcmRzOltcImhhbmRcIixcImZpbmdlcnNcIixcImV2aWxfZXllXCIsXCJzaWduX29mX2hvcm5zXCIsXCJyb2NrX29uXCJdLGNoYXI6XCLwn6SYXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxjcm9zc2VkX2ZpbmdlcnM6e2tleXdvcmRzOltcImdvb2RcIixcImx1Y2t5XCJdLGNoYXI6XCLwn6SeXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx2dWxjYW5fc2FsdXRlOntrZXl3b3JkczpbXCJoYW5kXCIsXCJmaW5nZXJzXCIsXCJzcG9ja1wiLFwic3RhciB0cmVrXCJdLGNoYXI6XCLwn5aWXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3cml0aW5nX2hhbmQ6e2tleXdvcmRzOltcImxvd2VyX2xlZnRfYmFsbHBvaW50X3BlblwiLFwic3RhdGlvbmVyeVwiLFwid3JpdGVcIixcImNvbXBvc2VcIl0sY2hhcjpcIuKcjVwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sc2VsZmllOntrZXl3b3JkczpbXCJjYW1lcmFcIixcInBob25lXCJdLGNoYXI6XCLwn6SzXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxuYWlsX2NhcmU6e2tleXdvcmRzOltcImJlYXV0eVwiLFwibWFuaWN1cmVcIixcImZpbmdlclwiLFwiZmFzaGlvblwiLFwibmFpbFwiXSxjaGFyOlwi8J+ShVwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbGlwczp7a2V5d29yZHM6W1wibW91dGhcIixcImtpc3NcIl0sY2hhcjpcIvCfkYRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSx0b290aDp7a2V5d29yZHM6W1widGVldGhcIixcImRlbnRpc3RcIl0sY2hhcjpcIvCfprdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSx0b25ndWU6e2tleXdvcmRzOltcIm1vdXRoXCIsXCJwbGF5ZnVsXCJdLGNoYXI6XCLwn5GFXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZWFyOntrZXl3b3JkczpbXCJmYWNlXCIsXCJoZWFyXCIsXCJzb3VuZFwiLFwibGlzdGVuXCJdLGNoYXI6XCLwn5GCXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxub3NlOntrZXl3b3JkczpbXCJzbWVsbFwiLFwic25pZmZcIl0sY2hhcjpcIvCfkYNcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGV5ZTp7a2V5d29yZHM6W1wiZmFjZVwiLFwibG9va1wiLFwic2VlXCIsXCJ3YXRjaFwiLFwic3RhcmVcIl0sY2hhcjpcIvCfkYFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxleWVzOntrZXl3b3JkczpbXCJsb29rXCIsXCJ3YXRjaFwiLFwic3RhbGtcIixcInBlZWtcIixcInNlZVwiXSxjaGFyOlwi8J+RgFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGJyYWluOntrZXl3b3JkczpbXCJzbWFydFwiLFwiaW50ZWxsaWdlbnRcIl0sY2hhcjpcIvCfp6BcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxidXN0X2luX3NpbGhvdWV0dGU6e2tleXdvcmRzOltcInVzZXJcIixcInBlcnNvblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkaRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxidXN0c19pbl9zaWxob3VldHRlOntrZXl3b3JkczpbXCJ1c2VyXCIsXCJwZXJzb25cIixcImh1bWFuXCIsXCJncm91cFwiLFwidGVhbVwiXSxjaGFyOlwi8J+RpVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHNwZWFraW5nX2hlYWQ6e2tleXdvcmRzOltcInVzZXJcIixcInBlcnNvblwiLFwiaHVtYW5cIixcInNpbmdcIixcInNheVwiLFwidGFsa1wiXSxjaGFyOlwi8J+Xo1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGJhYnk6e2tleXdvcmRzOltcImNoaWxkXCIsXCJib3lcIixcImdpcmxcIixcInRvZGRsZXJcIl0sY2hhcjpcIvCfkbZcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGNoaWxkOntrZXl3b3JkczpbXCJnZW5kZXItbmV1dHJhbFwiLFwieW91bmdcIl0sY2hhcjpcIvCfp5JcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGJveTp7a2V5d29yZHM6W1wibWFuXCIsXCJtYWxlXCIsXCJndXlcIixcInRlZW5hZ2VyXCJdLGNoYXI6XCLwn5GmXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxnaXJsOntrZXl3b3JkczpbXCJmZW1hbGVcIixcIndvbWFuXCIsXCJ0ZWVuYWdlclwiXSxjaGFyOlwi8J+Rp1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sYWR1bHQ6e2tleXdvcmRzOltcImdlbmRlci1uZXV0cmFsXCIsXCJwZXJzb25cIl0sY2hhcjpcIvCfp5FcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hbjp7a2V5d29yZHM6W1wibXVzdGFjaGVcIixcImZhdGhlclwiLFwiZGFkXCIsXCJndXlcIixcImNsYXNzeVwiLFwic2lyXCIsXCJtb3VzdGFjaGVcIl0sY2hhcjpcIvCfkahcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuOntrZXl3b3JkczpbXCJmZW1hbGVcIixcImdpcmxzXCIsXCJsYWR5XCJdLGNoYXI6XCLwn5GpXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxibG9uZGVfd29tYW46e2tleXdvcmRzOltcIndvbWFuXCIsXCJmZW1hbGVcIixcImdpcmxcIixcImJsb25kZVwiLFwicGVyc29uXCJdLGNoYXI6XCLwn5Gx4oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxibG9uZGVfbWFuOntrZXl3b3JkczpbXCJtYW5cIixcIm1hbGVcIixcImJveVwiLFwiYmxvbmRlXCIsXCJndXlcIixcInBlcnNvblwiXSxjaGFyOlwi8J+RsVwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sYmVhcmRlZF9wZXJzb246e2tleXdvcmRzOltcInBlcnNvblwiLFwiYmV3aGlza2VyZWRcIl0sY2hhcjpcIvCfp5RcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG9sZGVyX2FkdWx0OntrZXl3b3JkczpbXCJodW1hblwiLFwiZWxkZXJcIixcInNlbmlvclwiLFwiZ2VuZGVyLW5ldXRyYWxcIl0sY2hhcjpcIvCfp5NcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG9sZGVyX21hbjp7a2V5d29yZHM6W1wiaHVtYW5cIixcIm1hbGVcIixcIm1lblwiLFwib2xkXCIsXCJlbGRlclwiLFwic2VuaW9yXCJdLGNoYXI6XCLwn5G0XCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxvbGRlcl93b21hbjp7a2V5d29yZHM6W1wiaHVtYW5cIixcImZlbWFsZVwiLFwid29tZW5cIixcImxhZHlcIixcIm9sZFwiLFwiZWxkZXJcIixcInNlbmlvclwiXSxjaGFyOlwi8J+RtVwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbWFuX3dpdGhfZ3VhX3BpX21hbzp7a2V5d29yZHM6W1wibWFsZVwiLFwiYm95XCIsXCJjaGluZXNlXCJdLGNoYXI6XCLwn5GyXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3b21hbl93aXRoX2hlYWRzY2FyZjp7a2V5d29yZHM6W1wiZmVtYWxlXCIsXCJoaWphYlwiLFwibWFudGlsbGFcIixcInRpY2hlbFwiXSxjaGFyOlwi8J+nlVwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sd29tYW5fd2l0aF90dXJiYW46e2tleXdvcmRzOltcImZlbWFsZVwiLFwiaW5kaWFuXCIsXCJoaW5kdWlzbVwiLFwiYXJhYnNcIixcIndvbWFuXCJdLGNoYXI6XCLwn5Gz4oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW5fd2l0aF90dXJiYW46e2tleXdvcmRzOltcIm1hbGVcIixcImluZGlhblwiLFwiaGluZHVpc21cIixcImFyYWJzXCJdLGNoYXI6XCLwn5GzXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxwb2xpY2V3b21hbjp7a2V5d29yZHM6W1wid29tYW5cIixcInBvbGljZVwiLFwibGF3XCIsXCJsZWdhbFwiLFwiZW5mb3JjZW1lbnRcIixcImFycmVzdFwiLFwiOTExXCIsXCJmZW1hbGVcIl0sY2hhcjpcIvCfka7igI3imYDvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHBvbGljZW1hbjp7a2V5d29yZHM6W1wibWFuXCIsXCJwb2xpY2VcIixcImxhd1wiLFwibGVnYWxcIixcImVuZm9yY2VtZW50XCIsXCJhcnJlc3RcIixcIjkxMVwiXSxjaGFyOlwi8J+RrlwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sY29uc3RydWN0aW9uX3dvcmtlcl93b21hbjp7a2V5d29yZHM6W1wiZmVtYWxlXCIsXCJodW1hblwiLFwid2lwXCIsXCJidWlsZFwiLFwiY29uc3RydWN0aW9uXCIsXCJ3b3JrZXJcIixcImxhYm9yXCIsXCJ3b21hblwiXSxjaGFyOlwi8J+Rt+KAjeKZgO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sY29uc3RydWN0aW9uX3dvcmtlcl9tYW46e2tleXdvcmRzOltcIm1hbGVcIixcImh1bWFuXCIsXCJ3aXBcIixcImd1eVwiLFwiYnVpbGRcIixcImNvbnN0cnVjdGlvblwiLFwid29ya2VyXCIsXCJsYWJvclwiXSxjaGFyOlwi8J+Rt1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZ3VhcmRzd29tYW46e2tleXdvcmRzOltcInVrXCIsXCJnYlwiLFwiYnJpdGlzaFwiLFwiZmVtYWxlXCIsXCJyb3lhbFwiLFwid29tYW5cIl0sY2hhcjpcIvCfkoLigI3imYDvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGd1YXJkc21hbjp7a2V5d29yZHM6W1widWtcIixcImdiXCIsXCJicml0aXNoXCIsXCJtYWxlXCIsXCJndXlcIixcInJveWFsXCJdLGNoYXI6XCLwn5KCXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmZW1hbGVfZGV0ZWN0aXZlOntrZXl3b3JkczpbXCJodW1hblwiLFwic3B5XCIsXCJkZXRlY3RpdmVcIixcImZlbWFsZVwiLFwid29tYW5cIl0sY2hhcjpcIvCflbXvuI/igI3imYDvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hbGVfZGV0ZWN0aXZlOntrZXl3b3JkczpbXCJodW1hblwiLFwic3B5XCIsXCJkZXRlY3RpdmVcIl0sY2hhcjpcIvCflbVcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuX2hlYWx0aF93b3JrZXI6e2tleXdvcmRzOltcImRvY3RvclwiLFwibnVyc2VcIixcInRoZXJhcGlzdFwiLFwiaGVhbHRoY2FyZVwiLFwid29tYW5cIixcImh1bWFuXCJdLGNoYXI6XCLwn5Gp4oCN4pqV77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW5faGVhbHRoX3dvcmtlcjp7a2V5d29yZHM6W1wiZG9jdG9yXCIsXCJudXJzZVwiLFwidGhlcmFwaXN0XCIsXCJoZWFsdGhjYXJlXCIsXCJtYW5cIixcImh1bWFuXCJdLGNoYXI6XCLwn5Go4oCN4pqV77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3b21hbl9mYXJtZXI6e2tleXdvcmRzOltcInJhbmNoZXJcIixcImdhcmRlbmVyXCIsXCJ3b21hblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkanigI3wn4y+XCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW5fZmFybWVyOntrZXl3b3JkczpbXCJyYW5jaGVyXCIsXCJnYXJkZW5lclwiLFwibWFuXCIsXCJodW1hblwiXSxjaGFyOlwi8J+RqOKAjfCfjL5cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuX2Nvb2s6e2tleXdvcmRzOltcImNoZWZcIixcIndvbWFuXCIsXCJodW1hblwiXSxjaGFyOlwi8J+RqeKAjfCfjbNcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hbl9jb29rOntrZXl3b3JkczpbXCJjaGVmXCIsXCJtYW5cIixcImh1bWFuXCJdLGNoYXI6XCLwn5Go4oCN8J+Ns1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sd29tYW5fc3R1ZGVudDp7a2V5d29yZHM6W1wiZ3JhZHVhdGVcIixcIndvbWFuXCIsXCJodW1hblwiXSxjaGFyOlwi8J+RqeKAjfCfjpNcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hbl9zdHVkZW50OntrZXl3b3JkczpbXCJncmFkdWF0ZVwiLFwibWFuXCIsXCJodW1hblwiXSxjaGFyOlwi8J+RqOKAjfCfjpNcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuX3Npbmdlcjp7a2V5d29yZHM6W1wicm9ja3N0YXJcIixcImVudGVydGFpbmVyXCIsXCJ3b21hblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkanigI3wn46kXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW5fc2luZ2VyOntrZXl3b3JkczpbXCJyb2Nrc3RhclwiLFwiZW50ZXJ0YWluZXJcIixcIm1hblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkajigI3wn46kXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3b21hbl90ZWFjaGVyOntrZXl3b3JkczpbXCJpbnN0cnVjdG9yXCIsXCJwcm9mZXNzb3JcIixcIndvbWFuXCIsXCJodW1hblwiXSxjaGFyOlwi8J+RqeKAjfCfj6tcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hbl90ZWFjaGVyOntrZXl3b3JkczpbXCJpbnN0cnVjdG9yXCIsXCJwcm9mZXNzb3JcIixcIm1hblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkajigI3wn4+rXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3b21hbl9mYWN0b3J5X3dvcmtlcjp7a2V5d29yZHM6W1wiYXNzZW1ibHlcIixcImluZHVzdHJpYWxcIixcIndvbWFuXCIsXCJodW1hblwiXSxjaGFyOlwi8J+RqeKAjfCfj61cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hbl9mYWN0b3J5X3dvcmtlcjp7a2V5d29yZHM6W1wiYXNzZW1ibHlcIixcImluZHVzdHJpYWxcIixcIm1hblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkajigI3wn4+tXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3b21hbl90ZWNobm9sb2dpc3Q6e2tleXdvcmRzOltcImNvZGVyXCIsXCJkZXZlbG9wZXJcIixcImVuZ2luZWVyXCIsXCJwcm9ncmFtbWVyXCIsXCJzb2Z0d2FyZVwiLFwid29tYW5cIixcImh1bWFuXCIsXCJsYXB0b3BcIixcImNvbXB1dGVyXCJdLGNoYXI6XCLwn5Gp4oCN8J+Su1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbWFuX3RlY2hub2xvZ2lzdDp7a2V5d29yZHM6W1wiY29kZXJcIixcImRldmVsb3BlclwiLFwiZW5naW5lZXJcIixcInByb2dyYW1tZXJcIixcInNvZnR3YXJlXCIsXCJtYW5cIixcImh1bWFuXCIsXCJsYXB0b3BcIixcImNvbXB1dGVyXCJdLGNoYXI6XCLwn5Go4oCN8J+Su1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sd29tYW5fb2ZmaWNlX3dvcmtlcjp7a2V5d29yZHM6W1wiYnVzaW5lc3NcIixcIm1hbmFnZXJcIixcIndvbWFuXCIsXCJodW1hblwiXSxjaGFyOlwi8J+RqeKAjfCfkrxcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hbl9vZmZpY2Vfd29ya2VyOntrZXl3b3JkczpbXCJidXNpbmVzc1wiLFwibWFuYWdlclwiLFwibWFuXCIsXCJodW1hblwiXSxjaGFyOlwi8J+RqOKAjfCfkrxcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuX21lY2hhbmljOntrZXl3b3JkczpbXCJwbHVtYmVyXCIsXCJ3b21hblwiLFwiaHVtYW5cIixcIndyZW5jaFwiXSxjaGFyOlwi8J+RqeKAjfCflKdcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hbl9tZWNoYW5pYzp7a2V5d29yZHM6W1wicGx1bWJlclwiLFwibWFuXCIsXCJodW1hblwiLFwid3JlbmNoXCJdLGNoYXI6XCLwn5Go4oCN8J+Up1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sd29tYW5fc2NpZW50aXN0OntrZXl3b3JkczpbXCJiaW9sb2dpc3RcIixcImNoZW1pc3RcIixcImVuZ2luZWVyXCIsXCJwaHlzaWNpc3RcIixcIndvbWFuXCIsXCJodW1hblwiXSxjaGFyOlwi8J+RqeKAjfCflKxcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hbl9zY2llbnRpc3Q6e2tleXdvcmRzOltcImJpb2xvZ2lzdFwiLFwiY2hlbWlzdFwiLFwiZW5naW5lZXJcIixcInBoeXNpY2lzdFwiLFwibWFuXCIsXCJodW1hblwiXSxjaGFyOlwi8J+RqOKAjfCflKxcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuX2FydGlzdDp7a2V5d29yZHM6W1wicGFpbnRlclwiLFwid29tYW5cIixcImh1bWFuXCJdLGNoYXI6XCLwn5Gp4oCN8J+OqFwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbWFuX2FydGlzdDp7a2V5d29yZHM6W1wicGFpbnRlclwiLFwibWFuXCIsXCJodW1hblwiXSxjaGFyOlwi8J+RqOKAjfCfjqhcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuX2ZpcmVmaWdodGVyOntrZXl3b3JkczpbXCJmaXJlbWFuXCIsXCJ3b21hblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkanigI3wn5qSXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW5fZmlyZWZpZ2h0ZXI6e2tleXdvcmRzOltcImZpcmVtYW5cIixcIm1hblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkajigI3wn5qSXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3b21hbl9waWxvdDp7a2V5d29yZHM6W1wiYXZpYXRvclwiLFwicGxhbmVcIixcIndvbWFuXCIsXCJodW1hblwiXSxjaGFyOlwi8J+RqeKAjeKciO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbWFuX3BpbG90OntrZXl3b3JkczpbXCJhdmlhdG9yXCIsXCJwbGFuZVwiLFwibWFuXCIsXCJodW1hblwiXSxjaGFyOlwi8J+RqOKAjeKciO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sd29tYW5fYXN0cm9uYXV0OntrZXl3b3JkczpbXCJzcGFjZVwiLFwicm9ja2V0XCIsXCJ3b21hblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkanigI3wn5qAXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW5fYXN0cm9uYXV0OntrZXl3b3JkczpbXCJzcGFjZVwiLFwicm9ja2V0XCIsXCJtYW5cIixcImh1bWFuXCJdLGNoYXI6XCLwn5Go4oCN8J+agFwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sd29tYW5fanVkZ2U6e2tleXdvcmRzOltcImp1c3RpY2VcIixcImNvdXJ0XCIsXCJ3b21hblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkanigI3impbvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hbl9qdWRnZTp7a2V5d29yZHM6W1wianVzdGljZVwiLFwiY291cnRcIixcIm1hblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkajigI3impbvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuX3N1cGVyaGVybzp7a2V5d29yZHM6W1wid29tYW5cIixcImZlbWFsZVwiLFwiZ29vZFwiLFwiaGVyb2luZVwiLFwic3VwZXJwb3dlcnNcIl0sY2hhcjpcIvCfprjigI3imYDvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hbl9zdXBlcmhlcm86e2tleXdvcmRzOltcIm1hblwiLFwibWFsZVwiLFwiZ29vZFwiLFwiaGVyb1wiLFwic3VwZXJwb3dlcnNcIl0sY2hhcjpcIvCfprjigI3imYLvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuX3N1cGVydmlsbGFpbjp7a2V5d29yZHM6W1wid29tYW5cIixcImZlbWFsZVwiLFwiZXZpbFwiLFwiYmFkXCIsXCJjcmltaW5hbFwiLFwiaGVyb2luZVwiLFwic3VwZXJwb3dlcnNcIl0sY2hhcjpcIvCfprnigI3imYDvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hbl9zdXBlcnZpbGxhaW46e2tleXdvcmRzOltcIm1hblwiLFwibWFsZVwiLFwiZXZpbFwiLFwiYmFkXCIsXCJjcmltaW5hbFwiLFwiaGVyb1wiLFwic3VwZXJwb3dlcnNcIl0sY2hhcjpcIvCfprnigI3imYLvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1yc19jbGF1czp7a2V5d29yZHM6W1wid29tYW5cIixcImZlbWFsZVwiLFwieG1hc1wiLFwibW90aGVyIGNocmlzdG1hc1wiXSxjaGFyOlwi8J+ktlwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sc2FudGE6e2tleXdvcmRzOltcImZlc3RpdmFsXCIsXCJtYW5cIixcIm1hbGVcIixcInhtYXNcIixcImZhdGhlciBjaHJpc3RtYXNcIl0sY2hhcjpcIvCfjoVcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHNvcmNlcmVzczp7a2V5d29yZHM6W1wid29tYW5cIixcImZlbWFsZVwiLFwibWFnZVwiLFwid2l0Y2hcIl0sY2hhcjpcIvCfp5nigI3imYDvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdpemFyZDp7a2V5d29yZHM6W1wibWFuXCIsXCJtYWxlXCIsXCJtYWdlXCIsXCJzb3JjZXJlclwiXSxjaGFyOlwi8J+nmeKAjeKZgu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sd29tYW5fZWxmOntrZXl3b3JkczpbXCJ3b21hblwiLFwiZmVtYWxlXCJdLGNoYXI6XCLwn6ed4oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW5fZWxmOntrZXl3b3JkczpbXCJtYW5cIixcIm1hbGVcIl0sY2hhcjpcIvCfp53igI3imYLvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuX3ZhbXBpcmU6e2tleXdvcmRzOltcIndvbWFuXCIsXCJmZW1hbGVcIl0sY2hhcjpcIvCfp5vigI3imYDvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hbl92YW1waXJlOntrZXl3b3JkczpbXCJtYW5cIixcIm1hbGVcIixcImRyYWN1bGFcIl0sY2hhcjpcIvCfp5vigI3imYLvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuX3pvbWJpZTp7a2V5d29yZHM6W1wid29tYW5cIixcImZlbWFsZVwiLFwidW5kZWFkXCIsXCJ3YWxraW5nIGRlYWRcIl0sY2hhcjpcIvCfp5/igI3imYDvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW5fem9tYmllOntrZXl3b3JkczpbXCJtYW5cIixcIm1hbGVcIixcImRyYWN1bGFcIixcInVuZGVhZFwiLFwid2Fsa2luZyBkZWFkXCJdLGNoYXI6XCLwn6ef4oCN4pmC77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sd29tYW5fZ2VuaWU6e2tleXdvcmRzOltcIndvbWFuXCIsXCJmZW1hbGVcIl0sY2hhcjpcIvCfp57igI3imYDvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW5fZ2VuaWU6e2tleXdvcmRzOltcIm1hblwiLFwibWFsZVwiXSxjaGFyOlwi8J+nnuKAjeKZgu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1lcm1haWQ6e2tleXdvcmRzOltcIndvbWFuXCIsXCJmZW1hbGVcIixcIm1lcndvbWFuXCIsXCJhcmllbFwiXSxjaGFyOlwi8J+nnOKAjeKZgO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbWVybWFuOntrZXl3b3JkczpbXCJtYW5cIixcIm1hbGVcIixcInRyaXRvblwiXSxjaGFyOlwi8J+nnOKAjeKZgu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sd29tYW5fZmFpcnk6e2tleXdvcmRzOltcIndvbWFuXCIsXCJmZW1hbGVcIl0sY2hhcjpcIvCfp5rigI3imYDvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hbl9mYWlyeTp7a2V5d29yZHM6W1wibWFuXCIsXCJtYWxlXCJdLGNoYXI6XCLwn6ea4oCN4pmC77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxhbmdlbDp7a2V5d29yZHM6W1wiaGVhdmVuXCIsXCJ3aW5nc1wiLFwiaGFsb1wiXSxjaGFyOlwi8J+RvFwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0scHJlZ25hbnRfd29tYW46e2tleXdvcmRzOltcImJhYnlcIl0sY2hhcjpcIvCfpLBcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGJyZWFzdGZlZWRpbmc6e2tleXdvcmRzOltcIm51cnNpbmdcIixcImJhYnlcIl0sY2hhcjpcIvCfpLFcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHByaW5jZXNzOntrZXl3b3JkczpbXCJnaXJsXCIsXCJ3b21hblwiLFwiZmVtYWxlXCIsXCJibG9uZFwiLFwiY3Jvd25cIixcInJveWFsXCIsXCJxdWVlblwiXSxjaGFyOlwi8J+RuFwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0scHJpbmNlOntrZXl3b3JkczpbXCJib3lcIixcIm1hblwiLFwibWFsZVwiLFwiY3Jvd25cIixcInJveWFsXCIsXCJraW5nXCJdLGNoYXI6XCLwn6S0XCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxicmlkZV93aXRoX3ZlaWw6e2tleXdvcmRzOltcImNvdXBsZVwiLFwibWFycmlhZ2VcIixcIndlZGRpbmdcIixcIndvbWFuXCIsXCJicmlkZVwiXSxjaGFyOlwi8J+RsFwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbWFuX2luX3R1eGVkbzp7a2V5d29yZHM6W1wiY291cGxlXCIsXCJtYXJyaWFnZVwiLFwid2VkZGluZ1wiLFwiZ3Jvb21cIl0sY2hhcjpcIvCfpLVcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHJ1bm5pbmdfd29tYW46e2tleXdvcmRzOltcIndvbWFuXCIsXCJ3YWxraW5nXCIsXCJleGVyY2lzZVwiLFwicmFjZVwiLFwicnVubmluZ1wiLFwiZmVtYWxlXCJdLGNoYXI6XCLwn4+D4oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxydW5uaW5nX21hbjp7a2V5d29yZHM6W1wibWFuXCIsXCJ3YWxraW5nXCIsXCJleGVyY2lzZVwiLFwicmFjZVwiLFwicnVubmluZ1wiXSxjaGFyOlwi8J+Pg1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sd2Fsa2luZ193b21hbjp7a2V5d29yZHM6W1wiaHVtYW5cIixcImZlZXRcIixcInN0ZXBzXCIsXCJ3b21hblwiLFwiZmVtYWxlXCJdLGNoYXI6XCLwn5q24oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3YWxraW5nX21hbjp7a2V5d29yZHM6W1wiaHVtYW5cIixcImZlZXRcIixcInN0ZXBzXCJdLGNoYXI6XCLwn5q2XCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxkYW5jZXI6e2tleXdvcmRzOltcImZlbWFsZVwiLFwiZ2lybFwiLFwid29tYW5cIixcImZ1blwiXSxjaGFyOlwi8J+Sg1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbWFuX2RhbmNpbmc6e2tleXdvcmRzOltcIm1hbGVcIixcImJveVwiLFwiZnVuXCIsXCJkYW5jZXJcIl0sY2hhcjpcIvCflbpcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGRhbmNpbmdfd29tZW46e2tleXdvcmRzOltcImZlbWFsZVwiLFwiYnVubnlcIixcIndvbWVuXCIsXCJnaXJsc1wiXSxjaGFyOlwi8J+Rr1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGRhbmNpbmdfbWVuOntrZXl3b3JkczpbXCJtYWxlXCIsXCJidW5ueVwiLFwibWVuXCIsXCJib3lzXCJdLGNoYXI6XCLwn5Gv4oCN4pmC77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sY291cGxlOntrZXl3b3JkczpbXCJwYWlyXCIsXCJwZW9wbGVcIixcImh1bWFuXCIsXCJsb3ZlXCIsXCJkYXRlXCIsXCJkYXRpbmdcIixcImxpa2VcIixcImFmZmVjdGlvblwiLFwidmFsZW50aW5lc1wiLFwibWFycmlhZ2VcIl0sY2hhcjpcIvCfkatcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSx0d29fbWVuX2hvbGRpbmdfaGFuZHM6e2tleXdvcmRzOltcInBhaXJcIixcImNvdXBsZVwiLFwibG92ZVwiLFwibGlrZVwiLFwiYnJvbWFuY2VcIixcImZyaWVuZHNoaXBcIixcInBlb3BsZVwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkaxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSx0d29fd29tZW5faG9sZGluZ19oYW5kczp7a2V5d29yZHM6W1wicGFpclwiLFwiZnJpZW5kc2hpcFwiLFwiY291cGxlXCIsXCJsb3ZlXCIsXCJsaWtlXCIsXCJmZW1hbGVcIixcInBlb3BsZVwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfka1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxib3dpbmdfd29tYW46e2tleXdvcmRzOltcIndvbWFuXCIsXCJmZW1hbGVcIixcImdpcmxcIl0sY2hhcjpcIvCfmYfigI3imYDvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGJvd2luZ19tYW46e2tleXdvcmRzOltcIm1hblwiLFwibWFsZVwiLFwiYm95XCJdLGNoYXI6XCLwn5mHXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW5fZmFjZXBhbG1pbmc6e2tleXdvcmRzOltcIm1hblwiLFwibWFsZVwiLFwiYm95XCIsXCJkaXNiZWxpZWZcIl0sY2hhcjpcIvCfpKbigI3imYLvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuX2ZhY2VwYWxtaW5nOntrZXl3b3JkczpbXCJ3b21hblwiLFwiZmVtYWxlXCIsXCJnaXJsXCIsXCJkaXNiZWxpZWZcIl0sY2hhcjpcIvCfpKbigI3imYDvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuX3NocnVnZ2luZzp7a2V5d29yZHM6W1wid29tYW5cIixcImZlbWFsZVwiLFwiZ2lybFwiLFwiY29uZnVzZWRcIixcImluZGlmZmVyZW50XCIsXCJkb3VidFwiXSxjaGFyOlwi8J+kt1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbWFuX3NocnVnZ2luZzp7a2V5d29yZHM6W1wibWFuXCIsXCJtYWxlXCIsXCJib3lcIixcImNvbmZ1c2VkXCIsXCJpbmRpZmZlcmVudFwiLFwiZG91YnRcIl0sY2hhcjpcIvCfpLfigI3imYLvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHRpcHBpbmdfaGFuZF93b21hbjp7a2V5d29yZHM6W1wiZmVtYWxlXCIsXCJnaXJsXCIsXCJ3b21hblwiLFwiaHVtYW5cIixcImluZm9ybWF0aW9uXCJdLGNoYXI6XCLwn5KBXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx0aXBwaW5nX2hhbmRfbWFuOntrZXl3b3JkczpbXCJtYWxlXCIsXCJib3lcIixcIm1hblwiLFwiaHVtYW5cIixcImluZm9ybWF0aW9uXCJdLGNoYXI6XCLwn5KB4oCN4pmC77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxub19nb29kX3dvbWFuOntrZXl3b3JkczpbXCJmZW1hbGVcIixcImdpcmxcIixcIndvbWFuXCIsXCJub3BlXCJdLGNoYXI6XCLwn5mFXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxub19nb29kX21hbjp7a2V5d29yZHM6W1wibWFsZVwiLFwiYm95XCIsXCJtYW5cIixcIm5vcGVcIl0sY2hhcjpcIvCfmYXigI3imYLvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG9rX3dvbWFuOntrZXl3b3JkczpbXCJ3b21lblwiLFwiZ2lybFwiLFwiZmVtYWxlXCIsXCJwaW5rXCIsXCJodW1hblwiLFwid29tYW5cIl0sY2hhcjpcIvCfmYZcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG9rX21hbjp7a2V5d29yZHM6W1wibWVuXCIsXCJib3lcIixcIm1hbGVcIixcImJsdWVcIixcImh1bWFuXCIsXCJtYW5cIl0sY2hhcjpcIvCfmYbigI3imYLvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHJhaXNpbmdfaGFuZF93b21hbjp7a2V5d29yZHM6W1wiZmVtYWxlXCIsXCJnaXJsXCIsXCJ3b21hblwiXSxjaGFyOlwi8J+Zi1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0scmFpc2luZ19oYW5kX21hbjp7a2V5d29yZHM6W1wibWFsZVwiLFwiYm95XCIsXCJtYW5cIl0sY2hhcjpcIvCfmYvigI3imYLvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHBvdXRpbmdfd29tYW46e2tleXdvcmRzOltcImZlbWFsZVwiLFwiZ2lybFwiLFwid29tYW5cIl0sY2hhcjpcIvCfmY5cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHBvdXRpbmdfbWFuOntrZXl3b3JkczpbXCJtYWxlXCIsXCJib3lcIixcIm1hblwiXSxjaGFyOlwi8J+ZjuKAjeKZgu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZnJvd25pbmdfd29tYW46e2tleXdvcmRzOltcImZlbWFsZVwiLFwiZ2lybFwiLFwid29tYW5cIixcInNhZFwiLFwiZGVwcmVzc2VkXCIsXCJkaXNjb3VyYWdlZFwiLFwidW5oYXBweVwiXSxjaGFyOlwi8J+ZjVwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZnJvd25pbmdfbWFuOntrZXl3b3JkczpbXCJtYWxlXCIsXCJib3lcIixcIm1hblwiLFwic2FkXCIsXCJkZXByZXNzZWRcIixcImRpc2NvdXJhZ2VkXCIsXCJ1bmhhcHB5XCJdLGNoYXI6XCLwn5mN4oCN4pmC77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxoYWlyY3V0X3dvbWFuOntrZXl3b3JkczpbXCJmZW1hbGVcIixcImdpcmxcIixcIndvbWFuXCJdLGNoYXI6XCLwn5KHXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxoYWlyY3V0X21hbjp7a2V5d29yZHM6W1wibWFsZVwiLFwiYm95XCIsXCJtYW5cIl0sY2hhcjpcIvCfkofigI3imYLvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hc3NhZ2Vfd29tYW46e2tleXdvcmRzOltcImZlbWFsZVwiLFwiZ2lybFwiLFwid29tYW5cIixcImhlYWRcIl0sY2hhcjpcIvCfkoZcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hc3NhZ2VfbWFuOntrZXl3b3JkczpbXCJtYWxlXCIsXCJib3lcIixcIm1hblwiLFwiaGVhZFwiXSxjaGFyOlwi8J+ShuKAjeKZgu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sd29tYW5faW5fc3RlYW15X3Jvb206e2tleXdvcmRzOltcImZlbWFsZVwiLFwid29tYW5cIixcInNwYVwiLFwic3RlYW1yb29tXCIsXCJzYXVuYVwiXSxjaGFyOlwi8J+nluKAjeKZgO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbWFuX2luX3N0ZWFteV9yb29tOntrZXl3b3JkczpbXCJtYWxlXCIsXCJtYW5cIixcInNwYVwiLFwic3RlYW1yb29tXCIsXCJzYXVuYVwiXSxjaGFyOlwi8J+nluKAjeKZgu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sY291cGxlX3dpdGhfaGVhcnRfd29tYW5fbWFuOntrZXl3b3JkczpbXCJwYWlyXCIsXCJsb3ZlXCIsXCJsaWtlXCIsXCJhZmZlY3Rpb25cIixcImh1bWFuXCIsXCJkYXRpbmdcIixcInZhbGVudGluZXNcIixcIm1hcnJpYWdlXCJdLGNoYXI6XCLwn5KRXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sY291cGxlX3dpdGhfaGVhcnRfd29tYW5fd29tYW46e2tleXdvcmRzOltcInBhaXJcIixcImxvdmVcIixcImxpa2VcIixcImFmZmVjdGlvblwiLFwiaHVtYW5cIixcImRhdGluZ1wiLFwidmFsZW50aW5lc1wiLFwibWFycmlhZ2VcIl0sY2hhcjpcIvCfkanigI3inaTvuI/igI3wn5GpXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sY291cGxlX3dpdGhfaGVhcnRfbWFuX21hbjp7a2V5d29yZHM6W1wicGFpclwiLFwibG92ZVwiLFwibGlrZVwiLFwiYWZmZWN0aW9uXCIsXCJodW1hblwiLFwiZGF0aW5nXCIsXCJ2YWxlbnRpbmVzXCIsXCJtYXJyaWFnZVwiXSxjaGFyOlwi8J+RqOKAjeKdpO+4j+KAjfCfkahcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxjb3VwbGVraXNzX21hbl93b21hbjp7a2V5d29yZHM6W1wicGFpclwiLFwidmFsZW50aW5lc1wiLFwibG92ZVwiLFwibGlrZVwiLFwiZGF0aW5nXCIsXCJtYXJyaWFnZVwiXSxjaGFyOlwi8J+Sj1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGNvdXBsZWtpc3Nfd29tYW5fd29tYW46e2tleXdvcmRzOltcInBhaXJcIixcInZhbGVudGluZXNcIixcImxvdmVcIixcImxpa2VcIixcImRhdGluZ1wiLFwibWFycmlhZ2VcIl0sY2hhcjpcIvCfkanigI3inaTvuI/igI3wn5KL4oCN8J+RqVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGNvdXBsZWtpc3NfbWFuX21hbjp7a2V5d29yZHM6W1wicGFpclwiLFwidmFsZW50aW5lc1wiLFwibG92ZVwiLFwibGlrZVwiLFwiZGF0aW5nXCIsXCJtYXJyaWFnZVwiXSxjaGFyOlwi8J+RqOKAjeKdpO+4j+KAjfCfkovigI3wn5GoXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFtaWx5X21hbl93b21hbl9ib3k6e2tleXdvcmRzOltcImhvbWVcIixcInBhcmVudHNcIixcImNoaWxkXCIsXCJtb21cIixcImRhZFwiLFwiZmF0aGVyXCIsXCJtb3RoZXJcIixcInBlb3BsZVwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkapcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmYW1pbHlfbWFuX3dvbWFuX2dpcmw6e2tleXdvcmRzOltcImhvbWVcIixcInBhcmVudHNcIixcInBlb3BsZVwiLFwiaHVtYW5cIixcImNoaWxkXCJdLGNoYXI6XCLwn5Go4oCN8J+RqeKAjfCfkadcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmYW1pbHlfbWFuX3dvbWFuX2dpcmxfYm95OntrZXl3b3JkczpbXCJob21lXCIsXCJwYXJlbnRzXCIsXCJwZW9wbGVcIixcImh1bWFuXCIsXCJjaGlsZHJlblwiXSxjaGFyOlwi8J+RqOKAjfCfkanigI3wn5Gn4oCN8J+RplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGZhbWlseV9tYW5fd29tYW5fYm95X2JveTp7a2V5d29yZHM6W1wiaG9tZVwiLFwicGFyZW50c1wiLFwicGVvcGxlXCIsXCJodW1hblwiLFwiY2hpbGRyZW5cIl0sY2hhcjpcIvCfkajigI3wn5Gp4oCN8J+RpuKAjfCfkaZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmYW1pbHlfbWFuX3dvbWFuX2dpcmxfZ2lybDp7a2V5d29yZHM6W1wiaG9tZVwiLFwicGFyZW50c1wiLFwicGVvcGxlXCIsXCJodW1hblwiLFwiY2hpbGRyZW5cIl0sY2hhcjpcIvCfkajigI3wn5Gp4oCN8J+Rp+KAjfCfkadcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmYW1pbHlfd29tYW5fd29tYW5fYm95OntrZXl3b3JkczpbXCJob21lXCIsXCJwYXJlbnRzXCIsXCJwZW9wbGVcIixcImh1bWFuXCIsXCJjaGlsZHJlblwiXSxjaGFyOlwi8J+RqeKAjfCfkanigI3wn5GmXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFtaWx5X3dvbWFuX3dvbWFuX2dpcmw6e2tleXdvcmRzOltcImhvbWVcIixcInBhcmVudHNcIixcInBlb3BsZVwiLFwiaHVtYW5cIixcImNoaWxkcmVuXCJdLGNoYXI6XCLwn5Gp4oCN8J+RqeKAjfCfkadcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmYW1pbHlfd29tYW5fd29tYW5fZ2lybF9ib3k6e2tleXdvcmRzOltcImhvbWVcIixcInBhcmVudHNcIixcInBlb3BsZVwiLFwiaHVtYW5cIixcImNoaWxkcmVuXCJdLGNoYXI6XCLwn5Gp4oCN8J+RqeKAjfCfkafigI3wn5GmXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFtaWx5X3dvbWFuX3dvbWFuX2JveV9ib3k6e2tleXdvcmRzOltcImhvbWVcIixcInBhcmVudHNcIixcInBlb3BsZVwiLFwiaHVtYW5cIixcImNoaWxkcmVuXCJdLGNoYXI6XCLwn5Gp4oCN8J+RqeKAjfCfkabigI3wn5GmXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFtaWx5X3dvbWFuX3dvbWFuX2dpcmxfZ2lybDp7a2V5d29yZHM6W1wiaG9tZVwiLFwicGFyZW50c1wiLFwicGVvcGxlXCIsXCJodW1hblwiLFwiY2hpbGRyZW5cIl0sY2hhcjpcIvCfkanigI3wn5Gp4oCN8J+Rp+KAjfCfkadcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmYW1pbHlfbWFuX21hbl9ib3k6e2tleXdvcmRzOltcImhvbWVcIixcInBhcmVudHNcIixcInBlb3BsZVwiLFwiaHVtYW5cIixcImNoaWxkcmVuXCJdLGNoYXI6XCLwn5Go4oCN8J+RqOKAjfCfkaZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmYW1pbHlfbWFuX21hbl9naXJsOntrZXl3b3JkczpbXCJob21lXCIsXCJwYXJlbnRzXCIsXCJwZW9wbGVcIixcImh1bWFuXCIsXCJjaGlsZHJlblwiXSxjaGFyOlwi8J+RqOKAjfCfkajigI3wn5GnXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFtaWx5X21hbl9tYW5fZ2lybF9ib3k6e2tleXdvcmRzOltcImhvbWVcIixcInBhcmVudHNcIixcInBlb3BsZVwiLFwiaHVtYW5cIixcImNoaWxkcmVuXCJdLGNoYXI6XCLwn5Go4oCN8J+RqOKAjfCfkafigI3wn5GmXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFtaWx5X21hbl9tYW5fYm95X2JveTp7a2V5d29yZHM6W1wiaG9tZVwiLFwicGFyZW50c1wiLFwicGVvcGxlXCIsXCJodW1hblwiLFwiY2hpbGRyZW5cIl0sY2hhcjpcIvCfkajigI3wn5Go4oCN8J+RpuKAjfCfkaZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmYW1pbHlfbWFuX21hbl9naXJsX2dpcmw6e2tleXdvcmRzOltcImhvbWVcIixcInBhcmVudHNcIixcInBlb3BsZVwiLFwiaHVtYW5cIixcImNoaWxkcmVuXCJdLGNoYXI6XCLwn5Go4oCN8J+RqOKAjfCfkafigI3wn5GnXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFtaWx5X3dvbWFuX2JveTp7a2V5d29yZHM6W1wiaG9tZVwiLFwicGFyZW50XCIsXCJwZW9wbGVcIixcImh1bWFuXCIsXCJjaGlsZFwiXSxjaGFyOlwi8J+RqeKAjfCfkaZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmYW1pbHlfd29tYW5fZ2lybDp7a2V5d29yZHM6W1wiaG9tZVwiLFwicGFyZW50XCIsXCJwZW9wbGVcIixcImh1bWFuXCIsXCJjaGlsZFwiXSxjaGFyOlwi8J+RqeKAjfCfkadcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmYW1pbHlfd29tYW5fZ2lybF9ib3k6e2tleXdvcmRzOltcImhvbWVcIixcInBhcmVudFwiLFwicGVvcGxlXCIsXCJodW1hblwiLFwiY2hpbGRyZW5cIl0sY2hhcjpcIvCfkanigI3wn5Gn4oCN8J+RplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGZhbWlseV93b21hbl9ib3lfYm95OntrZXl3b3JkczpbXCJob21lXCIsXCJwYXJlbnRcIixcInBlb3BsZVwiLFwiaHVtYW5cIixcImNoaWxkcmVuXCJdLGNoYXI6XCLwn5Gp4oCN8J+RpuKAjfCfkaZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmYW1pbHlfd29tYW5fZ2lybF9naXJsOntrZXl3b3JkczpbXCJob21lXCIsXCJwYXJlbnRcIixcInBlb3BsZVwiLFwiaHVtYW5cIixcImNoaWxkcmVuXCJdLGNoYXI6XCLwn5Gp4oCN8J+Rp+KAjfCfkadcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmYW1pbHlfbWFuX2JveTp7a2V5d29yZHM6W1wiaG9tZVwiLFwicGFyZW50XCIsXCJwZW9wbGVcIixcImh1bWFuXCIsXCJjaGlsZFwiXSxjaGFyOlwi8J+RqOKAjfCfkaZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmYW1pbHlfbWFuX2dpcmw6e2tleXdvcmRzOltcImhvbWVcIixcInBhcmVudFwiLFwicGVvcGxlXCIsXCJodW1hblwiLFwiY2hpbGRcIl0sY2hhcjpcIvCfkajigI3wn5GnXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFtaWx5X21hbl9naXJsX2JveTp7a2V5d29yZHM6W1wiaG9tZVwiLFwicGFyZW50XCIsXCJwZW9wbGVcIixcImh1bWFuXCIsXCJjaGlsZHJlblwiXSxjaGFyOlwi8J+RqOKAjfCfkafigI3wn5GmXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFtaWx5X21hbl9ib3lfYm95OntrZXl3b3JkczpbXCJob21lXCIsXCJwYXJlbnRcIixcInBlb3BsZVwiLFwiaHVtYW5cIixcImNoaWxkcmVuXCJdLGNoYXI6XCLwn5Go4oCN8J+RpuKAjfCfkaZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmYW1pbHlfbWFuX2dpcmxfZ2lybDp7a2V5d29yZHM6W1wiaG9tZVwiLFwicGFyZW50XCIsXCJwZW9wbGVcIixcImh1bWFuXCIsXCJjaGlsZHJlblwiXSxjaGFyOlwi8J+RqOKAjfCfkafigI3wn5GnXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0seWFybjp7a2V5d29yZHM6W1wiYmFsbFwiLFwiY3JvY2hldFwiLFwia25pdFwiXSxjaGFyOlwi8J+ntlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHRocmVhZDp7a2V5d29yZHM6W1wibmVlZGxlXCIsXCJzZXdpbmdcIixcInNwb29sXCIsXCJzdHJpbmdcIl0sY2hhcjpcIvCfp7VcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxjb2F0OntrZXl3b3JkczpbXCJqYWNrZXRcIl0sY2hhcjpcIvCfp6VcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxsYWJjb2F0OntrZXl3b3JkczpbXCJkb2N0b3JcIixcImV4cGVyaW1lbnRcIixcInNjaWVudGlzdFwiLFwiY2hlbWlzdFwiXSxjaGFyOlwi8J+lvFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuc19jbG90aGVzOntrZXl3b3JkczpbXCJmYXNoaW9uXCIsXCJzaG9wcGluZ19iYWdzXCIsXCJmZW1hbGVcIl0sY2hhcjpcIvCfkZpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSx0c2hpcnQ6e2tleXdvcmRzOltcImZhc2hpb25cIixcImNsb3RoXCIsXCJjYXN1YWxcIixcInNoaXJ0XCIsXCJ0ZWVcIl0sY2hhcjpcIvCfkZVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxqZWFuczp7a2V5d29yZHM6W1wiZmFzaGlvblwiLFwic2hvcHBpbmdcIl0sY2hhcjpcIvCfkZZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxuZWNrdGllOntrZXl3b3JkczpbXCJzaGlydFwiLFwic3VpdHVwXCIsXCJmb3JtYWxcIixcImZhc2hpb25cIixcImNsb3RoXCIsXCJidXNpbmVzc1wiXSxjaGFyOlwi8J+RlFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGRyZXNzOntrZXl3b3JkczpbXCJjbG90aGVzXCIsXCJmYXNoaW9uXCIsXCJzaG9wcGluZ1wiXSxjaGFyOlwi8J+Rl1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGJpa2luaTp7a2V5d29yZHM6W1wic3dpbW1pbmdcIixcImZlbWFsZVwiLFwid29tYW5cIixcImdpcmxcIixcImZhc2hpb25cIixcImJlYWNoXCIsXCJzdW1tZXJcIl0sY2hhcjpcIvCfkZlcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxraW1vbm86e2tleXdvcmRzOltcImRyZXNzXCIsXCJmYXNoaW9uXCIsXCJ3b21lblwiLFwiZmVtYWxlXCIsXCJqYXBhbmVzZVwiXSxjaGFyOlwi8J+RmFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGxpcHN0aWNrOntrZXl3b3JkczpbXCJmZW1hbGVcIixcImdpcmxcIixcImZhc2hpb25cIixcIndvbWFuXCJdLGNoYXI6XCLwn5KEXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sa2lzczp7a2V5d29yZHM6W1wiZmFjZVwiLFwibGlwc1wiLFwibG92ZVwiLFwibGlrZVwiLFwiYWZmZWN0aW9uXCIsXCJ2YWxlbnRpbmVzXCJdLGNoYXI6XCLwn5KLXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZm9vdHByaW50czp7a2V5d29yZHM6W1wiZmVldFwiLFwidHJhY2tpbmdcIixcIndhbGtpbmdcIixcImJlYWNoXCJdLGNoYXI6XCLwn5GjXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmxhdF9zaG9lOntrZXl3b3JkczpbXCJiYWxsZXRcIixcInNsaXAtb25cIixcInNsaXBwZXJcIl0sY2hhcjpcIvCfpb9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxoaWdoX2hlZWw6e2tleXdvcmRzOltcImZhc2hpb25cIixcInNob2VzXCIsXCJmZW1hbGVcIixcInB1bXBzXCIsXCJzdGlsZXR0b1wiXSxjaGFyOlwi8J+RoFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHNhbmRhbDp7a2V5d29yZHM6W1wic2hvZXNcIixcImZhc2hpb25cIixcImZsaXAgZmxvcHNcIl0sY2hhcjpcIvCfkaFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxib290OntrZXl3b3JkczpbXCJzaG9lc1wiLFwiZmFzaGlvblwiXSxjaGFyOlwi8J+RolwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hbnNfc2hvZTp7a2V5d29yZHM6W1wiZmFzaGlvblwiLFwibWFsZVwiXSxjaGFyOlwi8J+RnlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGF0aGxldGljX3Nob2U6e2tleXdvcmRzOltcInNob2VzXCIsXCJzcG9ydHNcIixcInNuZWFrZXJzXCJdLGNoYXI6XCLwn5GfXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0saGlraW5nX2Jvb3Q6e2tleXdvcmRzOltcImJhY2twYWNraW5nXCIsXCJjYW1waW5nXCIsXCJoaWtpbmdcIl0sY2hhcjpcIvCfpb5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxzb2Nrczp7a2V5d29yZHM6W1wic3RvY2tpbmdzXCIsXCJjbG90aGVzXCJdLGNoYXI6XCLwn6emXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZ2xvdmVzOntrZXl3b3JkczpbXCJoYW5kc1wiLFwid2ludGVyXCIsXCJjbG90aGVzXCJdLGNoYXI6XCLwn6ekXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sc2NhcmY6e2tleXdvcmRzOltcIm5lY2tcIixcIndpbnRlclwiLFwiY2xvdGhlc1wiXSxjaGFyOlwi8J+no1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuc19oYXQ6e2tleXdvcmRzOltcImZhc2hpb25cIixcImFjY2Vzc29yaWVzXCIsXCJmZW1hbGVcIixcImxhZHlcIixcInNwcmluZ1wiXSxjaGFyOlwi8J+RklwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHRvcGhhdDp7a2V5d29yZHM6W1wibWFnaWNcIixcImdlbnRsZW1hblwiLFwiY2xhc3N5XCIsXCJjaXJjdXNcIl0sY2hhcjpcIvCfjqlcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxiaWxsZWRfaGF0OntrZXl3b3JkczpbXCJjYXBcIixcImJhc2ViYWxsXCJdLGNoYXI6XCLwn6eiXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0scmVzY3VlX3dvcmtlcl9oZWxtZXQ6e2tleXdvcmRzOltcImNvbnN0cnVjdGlvblwiLFwiYnVpbGRcIl0sY2hhcjpcIuKbkVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1vcnRhcl9ib2FyZDp7a2V5d29yZHM6W1wic2Nob29sXCIsXCJjb2xsZWdlXCIsXCJkZWdyZWVcIixcInVuaXZlcnNpdHlcIixcImdyYWR1YXRpb25cIixcImNhcFwiLFwiaGF0XCIsXCJsZWdhbFwiLFwibGVhcm5cIixcImVkdWNhdGlvblwiXSxjaGFyOlwi8J+Ok1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGNyb3duOntrZXl3b3JkczpbXCJraW5nXCIsXCJrb2RcIixcImxlYWRlclwiLFwicm95YWx0eVwiLFwibG9yZFwiXSxjaGFyOlwi8J+RkVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHNjaG9vbF9zYXRjaGVsOntrZXl3b3JkczpbXCJzdHVkZW50XCIsXCJlZHVjYXRpb25cIixcImJhZ1wiLFwiYmFja3BhY2tcIl0sY2hhcjpcIvCfjpJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxsdWdnYWdlOntrZXl3b3JkczpbXCJwYWNraW5nXCIsXCJ0cmF2ZWxcIl0sY2hhcjpcIvCfp7NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxwb3VjaDp7a2V5d29yZHM6W1wiYmFnXCIsXCJhY2Nlc3Nvcmllc1wiLFwic2hvcHBpbmdcIl0sY2hhcjpcIvCfkZ1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxwdXJzZTp7a2V5d29yZHM6W1wiZmFzaGlvblwiLFwiYWNjZXNzb3JpZXNcIixcIm1vbmV5XCIsXCJzYWxlc1wiLFwic2hvcHBpbmdcIl0sY2hhcjpcIvCfkZtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxoYW5kYmFnOntrZXl3b3JkczpbXCJmYXNoaW9uXCIsXCJhY2Nlc3NvcnlcIixcImFjY2Vzc29yaWVzXCIsXCJzaG9wcGluZ1wiXSxjaGFyOlwi8J+RnFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGJyaWVmY2FzZTp7a2V5d29yZHM6W1wiYnVzaW5lc3NcIixcImRvY3VtZW50c1wiLFwid29ya1wiLFwibGF3XCIsXCJsZWdhbFwiLFwiam9iXCIsXCJjYXJlZXJcIl0sY2hhcjpcIvCfkrxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxleWVnbGFzc2VzOntrZXl3b3JkczpbXCJmYXNoaW9uXCIsXCJhY2Nlc3Nvcmllc1wiLFwiZXllc2lnaHRcIixcIm5lcmR5XCIsXCJkb3JrXCIsXCJnZWVrXCJdLGNoYXI6XCLwn5GTXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZGFya19zdW5nbGFzc2VzOntrZXl3b3JkczpbXCJmYWNlXCIsXCJjb29sXCIsXCJhY2Nlc3Nvcmllc1wiXSxjaGFyOlwi8J+VtlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGdvZ2dsZXM6e2tleXdvcmRzOltcImV5ZXNcIixcInByb3RlY3Rpb25cIixcInNhZmV0eVwiXSxjaGFyOlwi8J+lvVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHJpbmc6e2tleXdvcmRzOltcIndlZGRpbmdcIixcInByb3Bvc2VcIixcIm1hcnJpYWdlXCIsXCJ2YWxlbnRpbmVzXCIsXCJkaWFtb25kXCIsXCJmYXNoaW9uXCIsXCJqZXdlbHJ5XCIsXCJnZW1cIixcImVuZ2FnZW1lbnRcIl0sY2hhcjpcIvCfko1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxjbG9zZWRfdW1icmVsbGE6e2tleXdvcmRzOltcIndlYXRoZXJcIixcInJhaW5cIixcImRyaXp6bGVcIl0sY2hhcjpcIvCfjIJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxkb2c6e2tleXdvcmRzOltcImFuaW1hbFwiLFwiZnJpZW5kXCIsXCJuYXR1cmVcIixcIndvb2ZcIixcInB1cHB5XCIsXCJwZXRcIixcImZhaXRoZnVsXCJdLGNoYXI6XCLwn5C2XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sY2F0OntrZXl3b3JkczpbXCJhbmltYWxcIixcIm1lb3dcIixcIm5hdHVyZVwiLFwicGV0XCIsXCJraXR0ZW5cIl0sY2hhcjpcIvCfkLFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxtb3VzZTp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcImNoZWVzZV93ZWRnZVwiLFwicm9kZW50XCJdLGNoYXI6XCLwn5CtXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0saGFtc3Rlcjp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIl0sY2hhcjpcIvCfkLlcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxyYWJiaXQ6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJwZXRcIixcInNwcmluZ1wiLFwibWFnaWNcIixcImJ1bm55XCJdLGNoYXI6XCLwn5CwXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sZm94X2ZhY2U6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJmYWNlXCJdLGNoYXI6XCLwn6aKXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sYmVhcjp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcIndpbGRcIl0sY2hhcjpcIvCfkLtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxwYW5kYV9mYWNlOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwicGFuZGFcIl0sY2hhcjpcIvCfkLxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxrb2FsYTp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIl0sY2hhcjpcIvCfkKhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSx0aWdlcjp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJjYXRcIixcImRhbmdlclwiLFwid2lsZFwiLFwibmF0dXJlXCIsXCJyb2FyXCJdLGNoYXI6XCLwn5CvXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sbGlvbjp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIl0sY2hhcjpcIvCfpoFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxjb3c6e2tleXdvcmRzOltcImJlZWZcIixcIm94XCIsXCJhbmltYWxcIixcIm5hdHVyZVwiLFwibW9vXCIsXCJtaWxrXCJdLGNoYXI6XCLwn5CuXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0scGlnOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm9pbmtcIixcIm5hdHVyZVwiXSxjaGFyOlwi8J+Qt1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHBpZ19ub3NlOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm9pbmtcIl0sY2hhcjpcIvCfkL1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxmcm9nOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwiY3JvYWtcIixcInRvYWRcIl0sY2hhcjpcIvCfkLhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxzcXVpZDp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcIm9jZWFuXCIsXCJzZWFcIl0sY2hhcjpcIvCfppFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxvY3RvcHVzOntrZXl3b3JkczpbXCJhbmltYWxcIixcImNyZWF0dXJlXCIsXCJvY2VhblwiLFwic2VhXCIsXCJuYXR1cmVcIixcImJlYWNoXCJdLGNoYXI6XCLwn5CZXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sc2hyaW1wOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm9jZWFuXCIsXCJuYXR1cmVcIixcInNlYWZvb2RcIl0sY2hhcjpcIvCfppBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxtb25rZXlfZmFjZTp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcImNpcmN1c1wiXSxjaGFyOlwi8J+QtVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGdvcmlsbGE6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJjaXJjdXNcIl0sY2hhcjpcIvCfpo1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxzZWVfbm9fZXZpbDp7a2V5d29yZHM6W1wibW9ua2V5XCIsXCJhbmltYWxcIixcIm5hdHVyZVwiLFwiaGFoYVwiXSxjaGFyOlwi8J+ZiFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGhlYXJfbm9fZXZpbDp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJtb25rZXlcIixcIm5hdHVyZVwiXSxjaGFyOlwi8J+ZiVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHNwZWFrX25vX2V2aWw6e2tleXdvcmRzOltcIm1vbmtleVwiLFwiYW5pbWFsXCIsXCJuYXR1cmVcIixcIm9tZ1wiXSxjaGFyOlwi8J+ZilwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LG1vbmtleTp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcImJhbmFuYVwiLFwiY2lyY3VzXCJdLGNoYXI6XCLwn5CSXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sY2hpY2tlbjp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJjbHVja1wiLFwibmF0dXJlXCIsXCJiaXJkXCJdLGNoYXI6XCLwn5CUXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0scGVuZ3Vpbjp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIl0sY2hhcjpcIvCfkKdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxiaXJkOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwiZmx5XCIsXCJ0d2VldFwiLFwic3ByaW5nXCJdLGNoYXI6XCLwn5CmXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sYmFieV9jaGljazp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJjaGlja2VuXCIsXCJiaXJkXCJdLGNoYXI6XCLwn5CkXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0saGF0Y2hpbmdfY2hpY2s6e2tleXdvcmRzOltcImFuaW1hbFwiLFwiY2hpY2tlblwiLFwiZWdnXCIsXCJib3JuXCIsXCJiYWJ5XCIsXCJiaXJkXCJdLGNoYXI6XCLwn5CjXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0saGF0Y2hlZF9jaGljazp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJjaGlja2VuXCIsXCJiYWJ5XCIsXCJiaXJkXCJdLGNoYXI6XCLwn5ClXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sZHVjazp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcImJpcmRcIixcIm1hbGxhcmRcIl0sY2hhcjpcIvCfpoZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxlYWdsZTp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcImJpcmRcIl0sY2hhcjpcIvCfpoVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxvd2w6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJiaXJkXCIsXCJob290XCJdLGNoYXI6XCLwn6aJXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sYmF0OntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwiYmxpbmRcIixcInZhbXBpcmVcIl0sY2hhcjpcIvCfpodcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSx3b2xmOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwid2lsZFwiXSxjaGFyOlwi8J+QulwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGJvYXI6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCJdLGNoYXI6XCLwn5CXXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0saG9yc2U6e2tleXdvcmRzOltcImFuaW1hbFwiLFwiYnJvd25cIixcIm5hdHVyZVwiXSxjaGFyOlwi8J+QtFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHVuaWNvcm46e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJteXN0aWNhbFwiXSxjaGFyOlwi8J+mhFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGhvbmV5YmVlOntrZXl3b3JkczpbXCJhbmltYWxcIixcImluc2VjdFwiLFwibmF0dXJlXCIsXCJidWdcIixcInNwcmluZ1wiLFwiaG9uZXlcIl0sY2hhcjpcIvCfkJ1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxidWc6e2tleXdvcmRzOltcImFuaW1hbFwiLFwiaW5zZWN0XCIsXCJuYXR1cmVcIixcIndvcm1cIl0sY2hhcjpcIvCfkJtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxidXR0ZXJmbHk6e2tleXdvcmRzOltcImFuaW1hbFwiLFwiaW5zZWN0XCIsXCJuYXR1cmVcIixcImNhdGVycGlsbGFyXCJdLGNoYXI6XCLwn6aLXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sc25haWw6e2tleXdvcmRzOltcInNsb3dcIixcImFuaW1hbFwiLFwic2hlbGxcIl0sY2hhcjpcIvCfkIxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxiZWV0bGU6e2tleXdvcmRzOltcImFuaW1hbFwiLFwiaW5zZWN0XCIsXCJuYXR1cmVcIixcImxhZHlidWdcIl0sY2hhcjpcIvCfkJ5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxhbnQ6e2tleXdvcmRzOltcImFuaW1hbFwiLFwiaW5zZWN0XCIsXCJuYXR1cmVcIixcImJ1Z1wiXSxjaGFyOlwi8J+QnFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGdyYXNzaG9wcGVyOntrZXl3b3JkczpbXCJhbmltYWxcIixcImNyaWNrZXRcIixcImNoaXJwXCJdLGNoYXI6XCLwn6aXXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sc3BpZGVyOntrZXl3b3JkczpbXCJhbmltYWxcIixcImFyYWNobmlkXCJdLGNoYXI6XCLwn5W3XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sc2NvcnBpb246e2tleXdvcmRzOltcImFuaW1hbFwiLFwiYXJhY2huaWRcIl0sY2hhcjpcIvCfpoJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxjcmFiOntrZXl3b3JkczpbXCJhbmltYWxcIixcImNydXN0YWNlYW5cIl0sY2hhcjpcIvCfpoBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxzbmFrZTp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJldmlsXCIsXCJuYXR1cmVcIixcImhpc3NcIixcInB5dGhvblwiXSxjaGFyOlwi8J+QjVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGxpemFyZDp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcInJlcHRpbGVcIl0sY2hhcjpcIvCfpo5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxcInQtcmV4XCI6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJkaW5vc2F1clwiLFwidHlyYW5ub3NhdXJ1c1wiLFwiZXh0aW5jdFwiXSxjaGFyOlwi8J+mllwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHNhdXJvcG9kOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwiZGlub3NhdXJcIixcImJyYWNoaW9zYXVydXNcIixcImJyb250b3NhdXJ1c1wiLFwiZGlwbG9kb2N1c1wiLFwiZXh0aW5jdFwiXSxjaGFyOlwi8J+mlVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHR1cnRsZTp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJzbG93XCIsXCJuYXR1cmVcIixcInRvcnRvaXNlXCJdLGNoYXI6XCLwn5CiXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sdHJvcGljYWxfZmlzaDp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJzd2ltXCIsXCJvY2VhblwiLFwiYmVhY2hcIixcIm5lbW9cIl0sY2hhcjpcIvCfkKBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxmaXNoOntrZXl3b3JkczpbXCJhbmltYWxcIixcImZvb2RcIixcIm5hdHVyZVwiXSxjaGFyOlwi8J+Qn1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGJsb3dmaXNoOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwiZm9vZFwiLFwic2VhXCIsXCJvY2VhblwiXSxjaGFyOlwi8J+QoVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGRvbHBoaW46e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJmaXNoXCIsXCJzZWFcIixcIm9jZWFuXCIsXCJmbGlwcGVyXCIsXCJmaW5zXCIsXCJiZWFjaFwiXSxjaGFyOlwi8J+QrFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHNoYXJrOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwiZmlzaFwiLFwic2VhXCIsXCJvY2VhblwiLFwiamF3c1wiLFwiZmluc1wiLFwiYmVhY2hcIl0sY2hhcjpcIvCfpohcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSx3aGFsZTp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcInNlYVwiLFwib2NlYW5cIl0sY2hhcjpcIvCfkLNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSx3aGFsZTI6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJzZWFcIixcIm9jZWFuXCJdLGNoYXI6XCLwn5CLXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sY3JvY29kaWxlOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwicmVwdGlsZVwiLFwibGl6YXJkXCIsXCJhbGxpZ2F0b3JcIl0sY2hhcjpcIvCfkIpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxsZW9wYXJkOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiXSxjaGFyOlwi8J+QhlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHplYnJhOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwic3RyaXBlc1wiLFwic2FmYXJpXCJdLGNoYXI6XCLwn6aTXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sdGlnZXIyOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwicm9hclwiXSxjaGFyOlwi8J+QhVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHdhdGVyX2J1ZmZhbG86e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJveFwiLFwiY293XCJdLGNoYXI6XCLwn5CDXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sb3g6e2tleXdvcmRzOltcImFuaW1hbFwiLFwiY293XCIsXCJiZWVmXCJdLGNoYXI6XCLwn5CCXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sY293Mjp7a2V5d29yZHM6W1wiYmVlZlwiLFwib3hcIixcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJtb29cIixcIm1pbGtcIl0sY2hhcjpcIvCfkIRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxkZWVyOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwiaG9ybnNcIixcInZlbmlzb25cIl0sY2hhcjpcIvCfpoxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxkcm9tZWRhcnlfY2FtZWw6e2tleXdvcmRzOltcImFuaW1hbFwiLFwiaG90XCIsXCJkZXNlcnRcIixcImh1bXBcIl0sY2hhcjpcIvCfkKpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxjYW1lbDp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcImhvdFwiLFwiZGVzZXJ0XCIsXCJodW1wXCJdLGNoYXI6XCLwn5CrXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sZ2lyYWZmZTp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcInNwb3RzXCIsXCJzYWZhcmlcIl0sY2hhcjpcIvCfppJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxlbGVwaGFudDp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcIm5vc2VcIixcInRoXCIsXCJjaXJjdXNcIl0sY2hhcjpcIvCfkJhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxyaGlub2Nlcm9zOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwiaG9yblwiXSxjaGFyOlwi8J+mj1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGdvYXQ6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCJdLGNoYXI6XCLwn5CQXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0scmFtOntrZXl3b3JkczpbXCJhbmltYWxcIixcInNoZWVwXCIsXCJuYXR1cmVcIl0sY2hhcjpcIvCfkI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxzaGVlcDp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcIndvb2xcIixcInNoaXBpdFwiXSxjaGFyOlwi8J+QkVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHJhY2Vob3JzZTp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJnYW1ibGVcIixcImx1Y2tcIl0sY2hhcjpcIvCfkI5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxwaWcyOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiXSxjaGFyOlwi8J+QllwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHJhdDp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJtb3VzZVwiLFwicm9kZW50XCJdLGNoYXI6XCLwn5CAXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sbW91c2UyOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwicm9kZW50XCJdLGNoYXI6XCLwn5CBXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0scm9vc3Rlcjp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcImNoaWNrZW5cIl0sY2hhcjpcIvCfkJNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSx0dXJrZXk6e2tleXdvcmRzOltcImFuaW1hbFwiLFwiYmlyZFwiXSxjaGFyOlwi8J+mg1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGRvdmU6e2tleXdvcmRzOltcImFuaW1hbFwiLFwiYmlyZFwiXSxjaGFyOlwi8J+VilwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGRvZzI6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJmcmllbmRcIixcImRvZ2VcIixcInBldFwiLFwiZmFpdGhmdWxcIl0sY2hhcjpcIvCfkJVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxwb29kbGU6e2tleXdvcmRzOltcImRvZ1wiLFwiYW5pbWFsXCIsXCIxMDFcIixcIm5hdHVyZVwiLFwicGV0XCJdLGNoYXI6XCLwn5CpXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sY2F0Mjp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJtZW93XCIsXCJwZXRcIixcImNhdHNcIl0sY2hhcjpcIvCfkIhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxyYWJiaXQyOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwicGV0XCIsXCJtYWdpY1wiLFwic3ByaW5nXCJdLGNoYXI6XCLwn5CHXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sY2hpcG11bms6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJyb2RlbnRcIixcInNxdWlycmVsXCJdLGNoYXI6XCLwn5C/XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0saGVkZ2Vob2c6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJzcGlueVwiXSxjaGFyOlwi8J+mlFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHJhY2Nvb246e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCJdLGNoYXI6XCLwn6adXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sbGxhbWE6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJhbHBhY2FcIl0sY2hhcjpcIvCfpplcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxoaXBwb3BvdGFtdXM6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCJdLGNoYXI6XCLwn6abXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sa2FuZ2Fyb286e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJhdXN0cmFsaWFcIixcImpvZXlcIixcImhvcFwiLFwibWFyc3VwaWFsXCJdLGNoYXI6XCLwn6aYXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sYmFkZ2VyOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwiaG9uZXlcIl0sY2hhcjpcIvCfpqFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxzd2FuOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwiYmlyZFwiXSxjaGFyOlwi8J+molwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHBlYWNvY2s6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJwZWFoZW5cIixcImJpcmRcIl0sY2hhcjpcIvCfpppcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxwYXJyb3Q6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJiaXJkXCIsXCJwaXJhdGVcIixcInRhbGtcIl0sY2hhcjpcIvCfppxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxsb2JzdGVyOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwiYmlzcXVlXCIsXCJjbGF3c1wiLFwic2VhZm9vZFwiXSxjaGFyOlwi8J+mnlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LG1vc3F1aXRvOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwiaW5zZWN0XCIsXCJtYWxhcmlhXCJdLGNoYXI6XCLwn6afXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0scGF3X3ByaW50czp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJ0cmFja2luZ1wiLFwiZm9vdHByaW50c1wiLFwiZG9nXCIsXCJjYXRcIixcInBldFwiLFwiZmVldFwiXSxjaGFyOlwi8J+QvlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGRyYWdvbjp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJteXRoXCIsXCJuYXR1cmVcIixcImNoaW5lc2VcIixcImdyZWVuXCJdLGNoYXI6XCLwn5CJXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sZHJhZ29uX2ZhY2U6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibXl0aFwiLFwibmF0dXJlXCIsXCJjaGluZXNlXCIsXCJncmVlblwiXSxjaGFyOlwi8J+QslwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGNhY3R1czp7a2V5d29yZHM6W1widmVnZXRhYmxlXCIsXCJwbGFudFwiLFwibmF0dXJlXCJdLGNoYXI6XCLwn4y1XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sY2hyaXN0bWFzX3RyZWU6e2tleXdvcmRzOltcImZlc3RpdmFsXCIsXCJ2YWNhdGlvblwiLFwiZGVjZW1iZXJcIixcInhtYXNcIixcImNlbGVicmF0aW9uXCJdLGNoYXI6XCLwn46EXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sZXZlcmdyZWVuX3RyZWU6e2tleXdvcmRzOltcInBsYW50XCIsXCJuYXR1cmVcIl0sY2hhcjpcIvCfjLJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxkZWNpZHVvdXNfdHJlZTp7a2V5d29yZHM6W1wicGxhbnRcIixcIm5hdHVyZVwiXSxjaGFyOlwi8J+Ms1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHBhbG1fdHJlZTp7a2V5d29yZHM6W1wicGxhbnRcIixcInZlZ2V0YWJsZVwiLFwibmF0dXJlXCIsXCJzdW1tZXJcIixcImJlYWNoXCIsXCJtb2ppdG9cIixcInRyb3BpY2FsXCJdLGNoYXI6XCLwn4y0XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sc2VlZGxpbmc6e2tleXdvcmRzOltcInBsYW50XCIsXCJuYXR1cmVcIixcImdyYXNzXCIsXCJsYXduXCIsXCJzcHJpbmdcIl0sY2hhcjpcIvCfjLFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxoZXJiOntrZXl3b3JkczpbXCJ2ZWdldGFibGVcIixcInBsYW50XCIsXCJtZWRpY2luZVwiLFwid2VlZFwiLFwiZ3Jhc3NcIixcImxhd25cIl0sY2hhcjpcIvCfjL9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxzaGFtcm9jazp7a2V5d29yZHM6W1widmVnZXRhYmxlXCIsXCJwbGFudFwiLFwibmF0dXJlXCIsXCJpcmlzaFwiLFwiY2xvdmVyXCJdLGNoYXI6XCLimJhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxmb3VyX2xlYWZfY2xvdmVyOntrZXl3b3JkczpbXCJ2ZWdldGFibGVcIixcInBsYW50XCIsXCJuYXR1cmVcIixcImx1Y2t5XCIsXCJpcmlzaFwiXSxjaGFyOlwi8J+NgFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGJhbWJvbzp7a2V5d29yZHM6W1wicGxhbnRcIixcIm5hdHVyZVwiLFwidmVnZXRhYmxlXCIsXCJwYW5kYVwiLFwicGluZV9kZWNvcmF0aW9uXCJdLGNoYXI6XCLwn46NXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sdGFuYWJhdGFfdHJlZTp7a2V5d29yZHM6W1wicGxhbnRcIixcIm5hdHVyZVwiLFwiYnJhbmNoXCIsXCJzdW1tZXJcIl0sY2hhcjpcIvCfjotcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxsZWF2ZXM6e2tleXdvcmRzOltcIm5hdHVyZVwiLFwicGxhbnRcIixcInRyZWVcIixcInZlZ2V0YWJsZVwiLFwiZ3Jhc3NcIixcImxhd25cIixcInNwcmluZ1wiXSxjaGFyOlwi8J+Ng1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGZhbGxlbl9sZWFmOntrZXl3b3JkczpbXCJuYXR1cmVcIixcInBsYW50XCIsXCJ2ZWdldGFibGVcIixcImxlYXZlc1wiXSxjaGFyOlwi8J+NglwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LG1hcGxlX2xlYWY6e2tleXdvcmRzOltcIm5hdHVyZVwiLFwicGxhbnRcIixcInZlZ2V0YWJsZVwiLFwiY2FcIixcImZhbGxcIl0sY2hhcjpcIvCfjYFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxlYXJfb2ZfcmljZTp7a2V5d29yZHM6W1wibmF0dXJlXCIsXCJwbGFudFwiXSxjaGFyOlwi8J+MvlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGhpYmlzY3VzOntrZXl3b3JkczpbXCJwbGFudFwiLFwidmVnZXRhYmxlXCIsXCJmbG93ZXJzXCIsXCJiZWFjaFwiXSxjaGFyOlwi8J+MulwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHN1bmZsb3dlcjp7a2V5d29yZHM6W1wibmF0dXJlXCIsXCJwbGFudFwiLFwiZmFsbFwiXSxjaGFyOlwi8J+Mu1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHJvc2U6e2tleXdvcmRzOltcImZsb3dlcnNcIixcInZhbGVudGluZXNcIixcImxvdmVcIixcInNwcmluZ1wiXSxjaGFyOlwi8J+MuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHdpbHRlZF9mbG93ZXI6e2tleXdvcmRzOltcInBsYW50XCIsXCJuYXR1cmVcIixcImZsb3dlclwiXSxjaGFyOlwi8J+lgFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHR1bGlwOntrZXl3b3JkczpbXCJmbG93ZXJzXCIsXCJwbGFudFwiLFwibmF0dXJlXCIsXCJzdW1tZXJcIixcInNwcmluZ1wiXSxjaGFyOlwi8J+Mt1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGJsb3Nzb206e2tleXdvcmRzOltcIm5hdHVyZVwiLFwiZmxvd2Vyc1wiLFwieWVsbG93XCJdLGNoYXI6XCLwn4y8XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sY2hlcnJ5X2Jsb3Nzb206e2tleXdvcmRzOltcIm5hdHVyZVwiLFwicGxhbnRcIixcInNwcmluZ1wiLFwiZmxvd2VyXCJdLGNoYXI6XCLwn4y4XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sYm91cXVldDp7a2V5d29yZHM6W1wiZmxvd2Vyc1wiLFwibmF0dXJlXCIsXCJzcHJpbmdcIl0sY2hhcjpcIvCfkpBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxtdXNocm9vbTp7a2V5d29yZHM6W1wicGxhbnRcIixcInZlZ2V0YWJsZVwiXSxjaGFyOlwi8J+NhFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGNoZXN0bnV0OntrZXl3b3JkczpbXCJmb29kXCIsXCJzcXVpcnJlbFwiXSxjaGFyOlwi8J+MsFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGphY2tfb19sYW50ZXJuOntrZXl3b3JkczpbXCJoYWxsb3dlZW5cIixcImxpZ2h0XCIsXCJwdW1wa2luXCIsXCJjcmVlcHlcIixcImZhbGxcIl0sY2hhcjpcIvCfjoNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxzaGVsbDp7a2V5d29yZHM6W1wibmF0dXJlXCIsXCJzZWFcIixcImJlYWNoXCJdLGNoYXI6XCLwn5CaXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sc3BpZGVyX3dlYjp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJpbnNlY3RcIixcImFyYWNobmlkXCIsXCJzaWxrXCJdLGNoYXI6XCLwn5W4XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sZWFydGhfYW1lcmljYXM6e2tleXdvcmRzOltcImdsb2JlXCIsXCJ3b3JsZFwiLFwiVVNBXCIsXCJpbnRlcm5hdGlvbmFsXCJdLGNoYXI6XCLwn4yOXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sZWFydGhfYWZyaWNhOntrZXl3b3JkczpbXCJnbG9iZVwiLFwid29ybGRcIixcImludGVybmF0aW9uYWxcIl0sY2hhcjpcIvCfjI1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxlYXJ0aF9hc2lhOntrZXl3b3JkczpbXCJnbG9iZVwiLFwid29ybGRcIixcImVhc3RcIixcImludGVybmF0aW9uYWxcIl0sY2hhcjpcIvCfjI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxmdWxsX21vb246e2tleXdvcmRzOltcIm5hdHVyZVwiLFwieWVsbG93XCIsXCJ0d2lsaWdodFwiLFwicGxhbmV0XCIsXCJzcGFjZVwiLFwibmlnaHRcIixcImV2ZW5pbmdcIixcInNsZWVwXCJdLGNoYXI6XCLwn4yVXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sd2FuaW5nX2dpYmJvdXNfbW9vbjp7a2V5d29yZHM6W1wibmF0dXJlXCIsXCJ0d2lsaWdodFwiLFwicGxhbmV0XCIsXCJzcGFjZVwiLFwibmlnaHRcIixcImV2ZW5pbmdcIixcInNsZWVwXCIsXCJ3YXhpbmdfZ2liYm91c19tb29uXCJdLGNoYXI6XCLwn4yWXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sbGFzdF9xdWFydGVyX21vb246e2tleXdvcmRzOltcIm5hdHVyZVwiLFwidHdpbGlnaHRcIixcInBsYW5ldFwiLFwic3BhY2VcIixcIm5pZ2h0XCIsXCJldmVuaW5nXCIsXCJzbGVlcFwiXSxjaGFyOlwi8J+Ml1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHdhbmluZ19jcmVzY2VudF9tb29uOntrZXl3b3JkczpbXCJuYXR1cmVcIixcInR3aWxpZ2h0XCIsXCJwbGFuZXRcIixcInNwYWNlXCIsXCJuaWdodFwiLFwiZXZlbmluZ1wiLFwic2xlZXBcIl0sY2hhcjpcIvCfjJhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxuZXdfbW9vbjp7a2V5d29yZHM6W1wibmF0dXJlXCIsXCJ0d2lsaWdodFwiLFwicGxhbmV0XCIsXCJzcGFjZVwiLFwibmlnaHRcIixcImV2ZW5pbmdcIixcInNsZWVwXCJdLGNoYXI6XCLwn4yRXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sd2F4aW5nX2NyZXNjZW50X21vb246e2tleXdvcmRzOltcIm5hdHVyZVwiLFwidHdpbGlnaHRcIixcInBsYW5ldFwiLFwic3BhY2VcIixcIm5pZ2h0XCIsXCJldmVuaW5nXCIsXCJzbGVlcFwiXSxjaGFyOlwi8J+MklwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGZpcnN0X3F1YXJ0ZXJfbW9vbjp7a2V5d29yZHM6W1wibmF0dXJlXCIsXCJ0d2lsaWdodFwiLFwicGxhbmV0XCIsXCJzcGFjZVwiLFwibmlnaHRcIixcImV2ZW5pbmdcIixcInNsZWVwXCJdLGNoYXI6XCLwn4yTXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sd2F4aW5nX2dpYmJvdXNfbW9vbjp7a2V5d29yZHM6W1wibmF0dXJlXCIsXCJuaWdodFwiLFwic2t5XCIsXCJncmF5XCIsXCJ0d2lsaWdodFwiLFwicGxhbmV0XCIsXCJzcGFjZVwiLFwiZXZlbmluZ1wiLFwic2xlZXBcIl0sY2hhcjpcIvCfjJRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxuZXdfbW9vbl93aXRoX2ZhY2U6e2tleXdvcmRzOltcIm5hdHVyZVwiLFwidHdpbGlnaHRcIixcInBsYW5ldFwiLFwic3BhY2VcIixcIm5pZ2h0XCIsXCJldmVuaW5nXCIsXCJzbGVlcFwiXSxjaGFyOlwi8J+MmlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGZ1bGxfbW9vbl93aXRoX2ZhY2U6e2tleXdvcmRzOltcIm5hdHVyZVwiLFwidHdpbGlnaHRcIixcInBsYW5ldFwiLFwic3BhY2VcIixcIm5pZ2h0XCIsXCJldmVuaW5nXCIsXCJzbGVlcFwiXSxjaGFyOlwi8J+MnVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGZpcnN0X3F1YXJ0ZXJfbW9vbl93aXRoX2ZhY2U6e2tleXdvcmRzOltcIm5hdHVyZVwiLFwidHdpbGlnaHRcIixcInBsYW5ldFwiLFwic3BhY2VcIixcIm5pZ2h0XCIsXCJldmVuaW5nXCIsXCJzbGVlcFwiXSxjaGFyOlwi8J+Mm1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGxhc3RfcXVhcnRlcl9tb29uX3dpdGhfZmFjZTp7a2V5d29yZHM6W1wibmF0dXJlXCIsXCJ0d2lsaWdodFwiLFwicGxhbmV0XCIsXCJzcGFjZVwiLFwibmlnaHRcIixcImV2ZW5pbmdcIixcInNsZWVwXCJdLGNoYXI6XCLwn4ycXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sc3VuX3dpdGhfZmFjZTp7a2V5d29yZHM6W1wibmF0dXJlXCIsXCJtb3JuaW5nXCIsXCJza3lcIl0sY2hhcjpcIvCfjJ5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxjcmVzY2VudF9tb29uOntrZXl3b3JkczpbXCJuaWdodFwiLFwic2xlZXBcIixcInNreVwiLFwiZXZlbmluZ1wiLFwibWFnaWNcIl0sY2hhcjpcIvCfjJlcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxzdGFyOntrZXl3b3JkczpbXCJuaWdodFwiLFwieWVsbG93XCJdLGNoYXI6XCLirZBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxzdGFyMjp7a2V5d29yZHM6W1wibmlnaHRcIixcInNwYXJrbGVcIixcImF3ZXNvbWVcIixcImdvb2RcIixcIm1hZ2ljXCJdLGNoYXI6XCLwn4yfXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sZGl6enk6e2tleXdvcmRzOltcInN0YXJcIixcInNwYXJrbGVcIixcInNob290XCIsXCJtYWdpY1wiXSxjaGFyOlwi8J+Sq1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHNwYXJrbGVzOntrZXl3b3JkczpbXCJzdGFyc1wiLFwic2hpbmVcIixcInNoaW55XCIsXCJjb29sXCIsXCJhd2Vzb21lXCIsXCJnb29kXCIsXCJtYWdpY1wiXSxjaGFyOlwi4pyoXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sY29tZXQ6e2tleXdvcmRzOltcInNwYWNlXCJdLGNoYXI6XCLimIRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxzdW5ueTp7a2V5d29yZHM6W1wid2VhdGhlclwiLFwibmF0dXJlXCIsXCJicmlnaHRuZXNzXCIsXCJzdW1tZXJcIixcImJlYWNoXCIsXCJzcHJpbmdcIl0sY2hhcjpcIuKYgO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHN1bl9iZWhpbmRfc21hbGxfY2xvdWQ6e2tleXdvcmRzOltcIndlYXRoZXJcIl0sY2hhcjpcIvCfjKRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxwYXJ0bHlfc3Vubnk6e2tleXdvcmRzOltcIndlYXRoZXJcIixcIm5hdHVyZVwiLFwiY2xvdWR5XCIsXCJtb3JuaW5nXCIsXCJmYWxsXCIsXCJzcHJpbmdcIl0sY2hhcjpcIuKbhVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHN1bl9iZWhpbmRfbGFyZ2VfY2xvdWQ6e2tleXdvcmRzOltcIndlYXRoZXJcIl0sY2hhcjpcIvCfjKVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxzdW5fYmVoaW5kX3JhaW5fY2xvdWQ6e2tleXdvcmRzOltcIndlYXRoZXJcIl0sY2hhcjpcIvCfjKZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxjbG91ZDp7a2V5d29yZHM6W1wid2VhdGhlclwiLFwic2t5XCJdLGNoYXI6XCLimIHvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxjbG91ZF93aXRoX3JhaW46e2tleXdvcmRzOltcIndlYXRoZXJcIl0sY2hhcjpcIvCfjKdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxjbG91ZF93aXRoX2xpZ2h0bmluZ19hbmRfcmFpbjp7a2V5d29yZHM6W1wid2VhdGhlclwiLFwibGlnaHRuaW5nXCJdLGNoYXI6XCLim4hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxjbG91ZF93aXRoX2xpZ2h0bmluZzp7a2V5d29yZHM6W1wid2VhdGhlclwiLFwidGh1bmRlclwiXSxjaGFyOlwi8J+MqVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHphcDp7a2V5d29yZHM6W1widGh1bmRlclwiLFwid2VhdGhlclwiLFwibGlnaHRuaW5nIGJvbHRcIixcImZhc3RcIl0sY2hhcjpcIuKaoVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGZpcmU6e2tleXdvcmRzOltcImhvdFwiLFwiY29va1wiLFwiZmxhbWVcIl0sY2hhcjpcIvCflKVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxib29tOntrZXl3b3JkczpbXCJib21iXCIsXCJleHBsb2RlXCIsXCJleHBsb3Npb25cIixcImNvbGxpc2lvblwiLFwiYmxvd25cIl0sY2hhcjpcIvCfkqVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxzbm93Zmxha2U6e2tleXdvcmRzOltcIndpbnRlclwiLFwic2Vhc29uXCIsXCJjb2xkXCIsXCJ3ZWF0aGVyXCIsXCJjaHJpc3RtYXNcIixcInhtYXNcIl0sY2hhcjpcIuKdhO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGNsb3VkX3dpdGhfc25vdzp7a2V5d29yZHM6W1wid2VhdGhlclwiXSxjaGFyOlwi8J+MqFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHNub3dtYW46e2tleXdvcmRzOltcIndpbnRlclwiLFwic2Vhc29uXCIsXCJjb2xkXCIsXCJ3ZWF0aGVyXCIsXCJjaHJpc3RtYXNcIixcInhtYXNcIixcImZyb3plblwiLFwid2l0aG91dF9zbm93XCJdLGNoYXI6XCLim4RcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxzbm93bWFuX3dpdGhfc25vdzp7a2V5d29yZHM6W1wid2ludGVyXCIsXCJzZWFzb25cIixcImNvbGRcIixcIndlYXRoZXJcIixcImNocmlzdG1hc1wiLFwieG1hc1wiLFwiZnJvemVuXCJdLGNoYXI6XCLimINcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSx3aW5kX2ZhY2U6e2tleXdvcmRzOltcImd1c3RcIixcImFpclwiXSxjaGFyOlwi8J+MrFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGRhc2g6e2tleXdvcmRzOltcIndpbmRcIixcImFpclwiLFwiZmFzdFwiLFwic2hvb1wiLFwiZmFydFwiLFwic21va2VcIixcInB1ZmZcIl0sY2hhcjpcIvCfkqhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSx0b3JuYWRvOntrZXl3b3JkczpbXCJ3ZWF0aGVyXCIsXCJjeWNsb25lXCIsXCJ0d2lzdGVyXCJdLGNoYXI6XCLwn4yqXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sZm9nOntrZXl3b3JkczpbXCJ3ZWF0aGVyXCJdLGNoYXI6XCLwn4yrXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sb3Blbl91bWJyZWxsYTp7a2V5d29yZHM6W1wid2VhdGhlclwiLFwic3ByaW5nXCJdLGNoYXI6XCLimIJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSx1bWJyZWxsYTp7a2V5d29yZHM6W1wicmFpbnlcIixcIndlYXRoZXJcIixcInNwcmluZ1wiXSxjaGFyOlwi4piUXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sZHJvcGxldDp7a2V5d29yZHM6W1wid2F0ZXJcIixcImRyaXBcIixcImZhdWNldFwiLFwic3ByaW5nXCJdLGNoYXI6XCLwn5KnXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sc3dlYXRfZHJvcHM6e2tleXdvcmRzOltcIndhdGVyXCIsXCJkcmlwXCIsXCJvb3BzXCJdLGNoYXI6XCLwn5KmXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sb2NlYW46e2tleXdvcmRzOltcInNlYVwiLFwid2F0ZXJcIixcIndhdmVcIixcIm5hdHVyZVwiLFwidHN1bmFtaVwiLFwiZGlzYXN0ZXJcIl0sY2hhcjpcIvCfjIpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxncmVlbl9hcHBsZTp7a2V5d29yZHM6W1wiZnJ1aXRcIixcIm5hdHVyZVwiXSxjaGFyOlwi8J+Nj1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sYXBwbGU6e2tleXdvcmRzOltcImZydWl0XCIsXCJtYWNcIixcInNjaG9vbFwiXSxjaGFyOlwi8J+NjlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0scGVhcjp7a2V5d29yZHM6W1wiZnJ1aXRcIixcIm5hdHVyZVwiLFwiZm9vZFwiXSxjaGFyOlwi8J+NkFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sdGFuZ2VyaW5lOntrZXl3b3JkczpbXCJmb29kXCIsXCJmcnVpdFwiLFwibmF0dXJlXCIsXCJvcmFuZ2VcIl0sY2hhcjpcIvCfjYpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGxlbW9uOntrZXl3b3JkczpbXCJmcnVpdFwiLFwibmF0dXJlXCJdLGNoYXI6XCLwn42LXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxiYW5hbmE6e2tleXdvcmRzOltcImZydWl0XCIsXCJmb29kXCIsXCJtb25rZXlcIl0sY2hhcjpcIvCfjYxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHdhdGVybWVsb246e2tleXdvcmRzOltcImZydWl0XCIsXCJmb29kXCIsXCJwaWNuaWNcIixcInN1bW1lclwiXSxjaGFyOlwi8J+NiVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sZ3JhcGVzOntrZXl3b3JkczpbXCJmcnVpdFwiLFwiZm9vZFwiLFwid2luZVwiXSxjaGFyOlwi8J+Nh1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sc3RyYXdiZXJyeTp7a2V5d29yZHM6W1wiZnJ1aXRcIixcImZvb2RcIixcIm5hdHVyZVwiXSxjaGFyOlwi8J+Nk1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sbWVsb246e2tleXdvcmRzOltcImZydWl0XCIsXCJuYXR1cmVcIixcImZvb2RcIl0sY2hhcjpcIvCfjYhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGNoZXJyaWVzOntrZXl3b3JkczpbXCJmb29kXCIsXCJmcnVpdFwiXSxjaGFyOlwi8J+NklwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0scGVhY2g6e2tleXdvcmRzOltcImZydWl0XCIsXCJuYXR1cmVcIixcImZvb2RcIl0sY2hhcjpcIvCfjZFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHBpbmVhcHBsZTp7a2V5d29yZHM6W1wiZnJ1aXRcIixcIm5hdHVyZVwiLFwiZm9vZFwiXSxjaGFyOlwi8J+NjVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sY29jb251dDp7a2V5d29yZHM6W1wiZnJ1aXRcIixcIm5hdHVyZVwiLFwiZm9vZFwiLFwicGFsbVwiXSxjaGFyOlwi8J+lpVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sa2l3aV9mcnVpdDp7a2V5d29yZHM6W1wiZnJ1aXRcIixcImZvb2RcIl0sY2hhcjpcIvCfpZ1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LG1hbmdvOntrZXl3b3JkczpbXCJmcnVpdFwiLFwiZm9vZFwiLFwidHJvcGljYWxcIl0sY2hhcjpcIvCfpa1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGF2b2NhZG86e2tleXdvcmRzOltcImZydWl0XCIsXCJmb29kXCJdLGNoYXI6XCLwn6WRXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxicm9jY29saTp7a2V5d29yZHM6W1wiZnJ1aXRcIixcImZvb2RcIixcInZlZ2V0YWJsZVwiXSxjaGFyOlwi8J+lplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sdG9tYXRvOntrZXl3b3JkczpbXCJmcnVpdFwiLFwidmVnZXRhYmxlXCIsXCJuYXR1cmVcIixcImZvb2RcIl0sY2hhcjpcIvCfjYVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGVnZ3BsYW50OntrZXl3b3JkczpbXCJ2ZWdldGFibGVcIixcIm5hdHVyZVwiLFwiZm9vZFwiLFwiYXViZXJnaW5lXCJdLGNoYXI6XCLwn42GXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxjdWN1bWJlcjp7a2V5d29yZHM6W1wiZnJ1aXRcIixcImZvb2RcIixcInBpY2tsZVwiXSxjaGFyOlwi8J+lklwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sY2Fycm90OntrZXl3b3JkczpbXCJ2ZWdldGFibGVcIixcImZvb2RcIixcIm9yYW5nZVwiXSxjaGFyOlwi8J+llVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0saG90X3BlcHBlcjp7a2V5d29yZHM6W1wiZm9vZFwiLFwic3BpY3lcIixcImNoaWxsaVwiLFwiY2hpbGlcIl0sY2hhcjpcIvCfjLZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHBvdGF0bzp7a2V5d29yZHM6W1wiZm9vZFwiLFwidHViZXJcIixcInZlZ2F0YWJsZVwiLFwic3RhcmNoXCJdLGNoYXI6XCLwn6WUXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxjb3JuOntrZXl3b3JkczpbXCJmb29kXCIsXCJ2ZWdldGFibGVcIixcInBsYW50XCJdLGNoYXI6XCLwn4y9XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxsZWFmeV9ncmVlbnM6e2tleXdvcmRzOltcImZvb2RcIixcInZlZ2V0YWJsZVwiLFwicGxhbnRcIixcImJvayBjaG95XCIsXCJjYWJiYWdlXCIsXCJrYWxlXCIsXCJsZXR0dWNlXCJdLGNoYXI6XCLwn6WsXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxzd2VldF9wb3RhdG86e2tleXdvcmRzOltcImZvb2RcIixcIm5hdHVyZVwiXSxjaGFyOlwi8J+NoFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0scGVhbnV0czp7a2V5d29yZHM6W1wiZm9vZFwiLFwibnV0XCJdLGNoYXI6XCLwn6WcXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxob25leV9wb3Q6e2tleXdvcmRzOltcImJlZXNcIixcInN3ZWV0XCIsXCJraXRjaGVuXCJdLGNoYXI6XCLwn42vXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxjcm9pc3NhbnQ6e2tleXdvcmRzOltcImZvb2RcIixcImJyZWFkXCIsXCJmcmVuY2hcIl0sY2hhcjpcIvCfpZBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGJyZWFkOntrZXl3b3JkczpbXCJmb29kXCIsXCJ3aGVhdFwiLFwiYnJlYWtmYXN0XCIsXCJ0b2FzdFwiXSxjaGFyOlwi8J+NnlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sYmFndWV0dGVfYnJlYWQ6e2tleXdvcmRzOltcImZvb2RcIixcImJyZWFkXCIsXCJmcmVuY2hcIl0sY2hhcjpcIvCfpZZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGJhZ2VsOntrZXl3b3JkczpbXCJmb29kXCIsXCJicmVhZFwiLFwiYmFrZXJ5XCIsXCJzY2htZWFyXCJdLGNoYXI6XCLwn6WvXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxwcmV0emVsOntrZXl3b3JkczpbXCJmb29kXCIsXCJicmVhZFwiLFwidHdpc3RlZFwiXSxjaGFyOlwi8J+lqFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sY2hlZXNlOntrZXl3b3JkczpbXCJmb29kXCIsXCJjaGFkZGVyXCJdLGNoYXI6XCLwn6eAXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxlZ2c6e2tleXdvcmRzOltcImZvb2RcIixcImNoaWNrZW5cIixcImJyZWFrZmFzdFwiXSxjaGFyOlwi8J+lmlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sYmFjb246e2tleXdvcmRzOltcImZvb2RcIixcImJyZWFrZmFzdFwiLFwicG9ya1wiLFwicGlnXCIsXCJtZWF0XCJdLGNoYXI6XCLwn6WTXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxzdGVhazp7a2V5d29yZHM6W1wiZm9vZFwiLFwiY293XCIsXCJtZWF0XCIsXCJjdXRcIixcImNob3BcIixcImxhbWJjaG9wXCIsXCJwb3JrY2hvcFwiXSxjaGFyOlwi8J+lqVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0scGFuY2FrZXM6e2tleXdvcmRzOltcImZvb2RcIixcImJyZWFrZmFzdFwiLFwiZmxhcGphY2tzXCIsXCJob3RjYWtlc1wiXSxjaGFyOlwi8J+lnlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0scG91bHRyeV9sZWc6e2tleXdvcmRzOltcImZvb2RcIixcIm1lYXRcIixcImRydW1zdGlja1wiLFwiYmlyZFwiLFwiY2hpY2tlblwiLFwidHVya2V5XCJdLGNoYXI6XCLwn42XXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxtZWF0X29uX2JvbmU6e2tleXdvcmRzOltcImdvb2RcIixcImZvb2RcIixcImRydW1zdGlja1wiXSxjaGFyOlwi8J+NllwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sYm9uZTp7a2V5d29yZHM6W1wic2tlbGV0b25cIl0sY2hhcjpcIvCfprRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGZyaWVkX3NocmltcDp7a2V5d29yZHM6W1wiZm9vZFwiLFwiYW5pbWFsXCIsXCJhcHBldGl6ZXJcIixcInN1bW1lclwiXSxjaGFyOlwi8J+NpFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sZnJpZWRfZWdnOntrZXl3b3JkczpbXCJmb29kXCIsXCJicmVha2Zhc3RcIixcImtpdGNoZW5cIixcImVnZ1wiXSxjaGFyOlwi8J+Ns1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0saGFtYnVyZ2VyOntrZXl3b3JkczpbXCJtZWF0XCIsXCJmYXN0IGZvb2RcIixcImJlZWZcIixcImNoZWVzZWJ1cmdlclwiLFwibWNkb25hbGRzXCIsXCJidXJnZXIga2luZ1wiXSxjaGFyOlwi8J+NlFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sZnJpZXM6e2tleXdvcmRzOltcImNoaXBzXCIsXCJzbmFja1wiLFwiZmFzdCBmb29kXCJdLGNoYXI6XCLwn42fXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxzdHVmZmVkX2ZsYXRicmVhZDp7a2V5d29yZHM6W1wiZm9vZFwiLFwiZmxhdGJyZWFkXCIsXCJzdHVmZmVkXCIsXCJneXJvXCJdLGNoYXI6XCLwn6WZXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxob3Rkb2c6e2tleXdvcmRzOltcImZvb2RcIixcImZyYW5rZnVydGVyXCJdLGNoYXI6XCLwn4ytXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxwaXp6YTp7a2V5d29yZHM6W1wiZm9vZFwiLFwicGFydHlcIl0sY2hhcjpcIvCfjZVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHNhbmR3aWNoOntrZXl3b3JkczpbXCJmb29kXCIsXCJsdW5jaFwiLFwiYnJlYWRcIl0sY2hhcjpcIvCfpapcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGNhbm5lZF9mb29kOntrZXl3b3JkczpbXCJmb29kXCIsXCJzb3VwXCJdLGNoYXI6XCLwn6WrXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxzcGFnaGV0dGk6e2tleXdvcmRzOltcImZvb2RcIixcIml0YWxpYW5cIixcIm5vb2RsZVwiXSxjaGFyOlwi8J+NnVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sdGFjbzp7a2V5d29yZHM6W1wiZm9vZFwiLFwibWV4aWNhblwiXSxjaGFyOlwi8J+MrlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sYnVycml0bzp7a2V5d29yZHM6W1wiZm9vZFwiLFwibWV4aWNhblwiXSxjaGFyOlwi8J+Mr1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sZ3JlZW5fc2FsYWQ6e2tleXdvcmRzOltcImZvb2RcIixcImhlYWx0aHlcIixcImxldHR1Y2VcIl0sY2hhcjpcIvCfpZdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHNoYWxsb3dfcGFuX29mX2Zvb2Q6e2tleXdvcmRzOltcImZvb2RcIixcImNvb2tpbmdcIixcImNhc3Nlcm9sZVwiLFwicGFlbGxhXCJdLGNoYXI6XCLwn6WYXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxyYW1lbjp7a2V5d29yZHM6W1wiZm9vZFwiLFwiamFwYW5lc2VcIixcIm5vb2RsZVwiLFwiY2hvcHN0aWNrc1wiXSxjaGFyOlwi8J+NnFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sc3Rldzp7a2V5d29yZHM6W1wiZm9vZFwiLFwibWVhdFwiLFwic291cFwiXSxjaGFyOlwi8J+NslwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sZmlzaF9jYWtlOntrZXl3b3JkczpbXCJmb29kXCIsXCJqYXBhblwiLFwic2VhXCIsXCJiZWFjaFwiLFwibmFydXRvbWFraVwiLFwicGlua1wiLFwic3dpcmxcIixcImthbWFib2tvXCIsXCJzdXJpbWlcIixcInJhbWVuXCJdLGNoYXI6XCLwn42lXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxmb3J0dW5lX2Nvb2tpZTp7a2V5d29yZHM6W1wiZm9vZFwiLFwicHJvcGhlY3lcIl0sY2hhcjpcIvCfpaBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHN1c2hpOntrZXl3b3JkczpbXCJmb29kXCIsXCJmaXNoXCIsXCJqYXBhbmVzZVwiLFwicmljZVwiXSxjaGFyOlwi8J+No1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sYmVudG86e2tleXdvcmRzOltcImZvb2RcIixcImphcGFuZXNlXCIsXCJib3hcIl0sY2hhcjpcIvCfjbFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGN1cnJ5OntrZXl3b3JkczpbXCJmb29kXCIsXCJzcGljeVwiLFwiaG90XCIsXCJpbmRpYW5cIl0sY2hhcjpcIvCfjZtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHJpY2VfYmFsbDp7a2V5d29yZHM6W1wiZm9vZFwiLFwiamFwYW5lc2VcIl0sY2hhcjpcIvCfjZlcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHJpY2U6e2tleXdvcmRzOltcImZvb2RcIixcImNoaW5hXCIsXCJhc2lhblwiXSxjaGFyOlwi8J+NmlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0scmljZV9jcmFja2VyOntrZXl3b3JkczpbXCJmb29kXCIsXCJqYXBhbmVzZVwiXSxjaGFyOlwi8J+NmFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sb2Rlbjp7a2V5d29yZHM6W1wiZm9vZFwiLFwiamFwYW5lc2VcIl0sY2hhcjpcIvCfjaJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGRhbmdvOntrZXl3b3JkczpbXCJmb29kXCIsXCJkZXNzZXJ0XCIsXCJzd2VldFwiLFwiamFwYW5lc2VcIixcImJhcmJlY3VlXCIsXCJtZWF0XCJdLGNoYXI6XCLwn42hXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxzaGF2ZWRfaWNlOntrZXl3b3JkczpbXCJob3RcIixcImRlc3NlcnRcIixcInN1bW1lclwiXSxjaGFyOlwi8J+Np1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0saWNlX2NyZWFtOntrZXl3b3JkczpbXCJmb29kXCIsXCJob3RcIixcImRlc3NlcnRcIl0sY2hhcjpcIvCfjahcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGljZWNyZWFtOntrZXl3b3JkczpbXCJmb29kXCIsXCJob3RcIixcImRlc3NlcnRcIixcInN1bW1lclwiXSxjaGFyOlwi8J+NplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0scGllOntrZXl3b3JkczpbXCJmb29kXCIsXCJkZXNzZXJ0XCIsXCJwYXN0cnlcIl0sY2hhcjpcIvCfpadcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGNha2U6e2tleXdvcmRzOltcImZvb2RcIixcImRlc3NlcnRcIl0sY2hhcjpcIvCfjbBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGN1cGNha2U6e2tleXdvcmRzOltcImZvb2RcIixcImRlc3NlcnRcIixcImJha2VyeVwiLFwic3dlZXRcIl0sY2hhcjpcIvCfp4FcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LG1vb25fY2FrZTp7a2V5d29yZHM6W1wiZm9vZFwiLFwiYXV0dW1uXCJdLGNoYXI6XCLwn6WuXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxiaXJ0aGRheTp7a2V5d29yZHM6W1wiZm9vZFwiLFwiZGVzc2VydFwiLFwiY2FrZVwiXSxjaGFyOlwi8J+OglwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sY3VzdGFyZDp7a2V5d29yZHM6W1wiZGVzc2VydFwiLFwiZm9vZFwiXSxjaGFyOlwi8J+NrlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sY2FuZHk6e2tleXdvcmRzOltcInNuYWNrXCIsXCJkZXNzZXJ0XCIsXCJzd2VldFwiLFwibG9sbHlcIl0sY2hhcjpcIvCfjaxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGxvbGxpcG9wOntrZXl3b3JkczpbXCJmb29kXCIsXCJzbmFja1wiLFwiY2FuZHlcIixcInN3ZWV0XCJdLGNoYXI6XCLwn42tXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxjaG9jb2xhdGVfYmFyOntrZXl3b3JkczpbXCJmb29kXCIsXCJzbmFja1wiLFwiZGVzc2VydFwiLFwic3dlZXRcIl0sY2hhcjpcIvCfjatcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHBvcGNvcm46e2tleXdvcmRzOltcImZvb2RcIixcIm1vdmllIHRoZWF0ZXJcIixcImZpbG1zXCIsXCJzbmFja1wiXSxjaGFyOlwi8J+Nv1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sZHVtcGxpbmc6e2tleXdvcmRzOltcImZvb2RcIixcImVtcGFuYWRhXCIsXCJwaWVyb2dpXCIsXCJwb3RzdGlja2VyXCJdLGNoYXI6XCLwn6WfXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxkb3VnaG51dDp7a2V5d29yZHM6W1wiZm9vZFwiLFwiZGVzc2VydFwiLFwic25hY2tcIixcInN3ZWV0XCIsXCJkb251dFwiXSxjaGFyOlwi8J+NqVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sY29va2llOntrZXl3b3JkczpbXCJmb29kXCIsXCJzbmFja1wiLFwib3Jlb1wiLFwiY2hvY29sYXRlXCIsXCJzd2VldFwiLFwiZGVzc2VydFwiXSxjaGFyOlwi8J+NqlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sbWlsa19nbGFzczp7a2V5d29yZHM6W1wiYmV2ZXJhZ2VcIixcImRyaW5rXCIsXCJjb3dcIl0sY2hhcjpcIvCfpZtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGJlZXI6e2tleXdvcmRzOltcInJlbGF4XCIsXCJiZXZlcmFnZVwiLFwiZHJpbmtcIixcImRydW5rXCIsXCJwYXJ0eVwiLFwicHViXCIsXCJzdW1tZXJcIixcImFsY29ob2xcIixcImJvb3plXCJdLGNoYXI6XCLwn426XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxiZWVyczp7a2V5d29yZHM6W1wicmVsYXhcIixcImJldmVyYWdlXCIsXCJkcmlua1wiLFwiZHJ1bmtcIixcInBhcnR5XCIsXCJwdWJcIixcInN1bW1lclwiLFwiYWxjb2hvbFwiLFwiYm9vemVcIl0sY2hhcjpcIvCfjbtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGNsaW5raW5nX2dsYXNzZXM6e2tleXdvcmRzOltcImJldmVyYWdlXCIsXCJkcmlua1wiLFwicGFydHlcIixcImFsY29ob2xcIixcImNlbGVicmF0ZVwiLFwiY2hlZXJzXCIsXCJ3aW5lXCIsXCJjaGFtcGFnbmVcIixcInRvYXN0XCJdLGNoYXI6XCLwn6WCXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSx3aW5lX2dsYXNzOntrZXl3b3JkczpbXCJkcmlua1wiLFwiYmV2ZXJhZ2VcIixcImRydW5rXCIsXCJhbGNvaG9sXCIsXCJib296ZVwiXSxjaGFyOlwi8J+Nt1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sdHVtYmxlcl9nbGFzczp7a2V5d29yZHM6W1wiZHJpbmtcIixcImJldmVyYWdlXCIsXCJkcnVua1wiLFwiYWxjb2hvbFwiLFwibGlxdW9yXCIsXCJib296ZVwiLFwiYm91cmJvblwiLFwic2NvdGNoXCIsXCJ3aGlza3lcIixcImdsYXNzXCIsXCJzaG90XCJdLGNoYXI6XCLwn6WDXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxjb2NrdGFpbDp7a2V5d29yZHM6W1wiZHJpbmtcIixcImRydW5rXCIsXCJhbGNvaG9sXCIsXCJiZXZlcmFnZVwiLFwiYm9vemVcIixcIm1vaml0b1wiXSxjaGFyOlwi8J+NuFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sdHJvcGljYWxfZHJpbms6e2tleXdvcmRzOltcImJldmVyYWdlXCIsXCJjb2NrdGFpbFwiLFwic3VtbWVyXCIsXCJiZWFjaFwiLFwiYWxjb2hvbFwiLFwiYm9vemVcIixcIm1vaml0b1wiXSxjaGFyOlwi8J+NuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sY2hhbXBhZ25lOntrZXl3b3JkczpbXCJkcmlua1wiLFwid2luZVwiLFwiYm90dGxlXCIsXCJjZWxlYnJhdGlvblwiXSxjaGFyOlwi8J+NvlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sc2FrZTp7a2V5d29yZHM6W1wid2luZVwiLFwiZHJpbmtcIixcImRydW5rXCIsXCJiZXZlcmFnZVwiLFwiamFwYW5lc2VcIixcImFsY29ob2xcIixcImJvb3plXCJdLGNoYXI6XCLwn422XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSx0ZWE6e2tleXdvcmRzOltcImRyaW5rXCIsXCJib3dsXCIsXCJicmVha2Zhc3RcIixcImdyZWVuXCIsXCJicml0aXNoXCJdLGNoYXI6XCLwn421XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxjdXBfd2l0aF9zdHJhdzp7a2V5d29yZHM6W1wiZHJpbmtcIixcInNvZGFcIl0sY2hhcjpcIvCfpaRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGNvZmZlZTp7a2V5d29yZHM6W1wiYmV2ZXJhZ2VcIixcImNhZmZlaW5lXCIsXCJsYXR0ZVwiLFwiZXNwcmVzc29cIl0sY2hhcjpcIuKYlVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sYmFieV9ib3R0bGU6e2tleXdvcmRzOltcImZvb2RcIixcImNvbnRhaW5lclwiLFwibWlsa1wiXSxjaGFyOlwi8J+NvFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sc2FsdDp7a2V5d29yZHM6W1wiY29uZGltZW50XCIsXCJzaGFrZXJcIl0sY2hhcjpcIvCfp4JcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHNwb29uOntrZXl3b3JkczpbXCJjdXRsZXJ5XCIsXCJraXRjaGVuXCIsXCJ0YWJsZXdhcmVcIl0sY2hhcjpcIvCfpYRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGZvcmtfYW5kX2tuaWZlOntrZXl3b3JkczpbXCJjdXRsZXJ5XCIsXCJraXRjaGVuXCJdLGNoYXI6XCLwn420XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxwbGF0ZV93aXRoX2N1dGxlcnk6e2tleXdvcmRzOltcImZvb2RcIixcImVhdFwiLFwibWVhbFwiLFwibHVuY2hcIixcImRpbm5lclwiLFwicmVzdGF1cmFudFwiXSxjaGFyOlwi8J+NvVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sYm93bF93aXRoX3Nwb29uOntrZXl3b3JkczpbXCJmb29kXCIsXCJicmVha2Zhc3RcIixcImNlcmVhbFwiLFwib2F0bWVhbFwiLFwicG9ycmlkZ2VcIl0sY2hhcjpcIvCfpaNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHRha2VvdXRfYm94OntrZXl3b3JkczpbXCJmb29kXCIsXCJsZWZ0b3ZlcnNcIl0sY2hhcjpcIvCfpaFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGNob3BzdGlja3M6e2tleXdvcmRzOltcImZvb2RcIl0sY2hhcjpcIvCfpaJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHNvY2Nlcjp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJmb290YmFsbFwiXSxjaGFyOlwi4pq9XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxiYXNrZXRiYWxsOntrZXl3b3JkczpbXCJzcG9ydHNcIixcImJhbGxzXCIsXCJOQkFcIl0sY2hhcjpcIvCfj4BcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LGZvb3RiYWxsOntrZXl3b3JkczpbXCJzcG9ydHNcIixcImJhbGxzXCIsXCJORkxcIl0sY2hhcjpcIvCfj4hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LGJhc2ViYWxsOntrZXl3b3JkczpbXCJzcG9ydHNcIixcImJhbGxzXCJdLGNoYXI6XCLimr5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LHNvZnRiYWxsOntrZXl3b3JkczpbXCJzcG9ydHNcIixcImJhbGxzXCJdLGNoYXI6XCLwn6WOXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSx0ZW5uaXM6e2tleXdvcmRzOltcInNwb3J0c1wiLFwiYmFsbHNcIixcImdyZWVuXCJdLGNoYXI6XCLwn46+XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSx2b2xsZXliYWxsOntrZXl3b3JkczpbXCJzcG9ydHNcIixcImJhbGxzXCJdLGNoYXI6XCLwn4+QXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxydWdieV9mb290YmFsbDp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJ0ZWFtXCJdLGNoYXI6XCLwn4+JXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxmbHlpbmdfZGlzYzp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJmcmlzYmVlXCIsXCJ1bHRpbWF0ZVwiXSxjaGFyOlwi8J+lj1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sXCI4YmFsbFwiOntrZXl3b3JkczpbXCJwb29sXCIsXCJob2JieVwiLFwiZ2FtZVwiLFwibHVja1wiLFwibWFnaWNcIl0sY2hhcjpcIvCfjrFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LGdvbGY6e2tleXdvcmRzOltcInNwb3J0c1wiLFwiYnVzaW5lc3NcIixcImZsYWdcIixcImhvbGVcIixcInN1bW1lclwiXSxjaGFyOlwi4puzXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxnb2xmaW5nX3dvbWFuOntrZXl3b3JkczpbXCJzcG9ydHNcIixcImJ1c2luZXNzXCIsXCJ3b21hblwiLFwiZmVtYWxlXCJdLGNoYXI6XCLwn4+M77iP4oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxnb2xmaW5nX21hbjp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJidXNpbmVzc1wiXSxjaGFyOlwi8J+PjFwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxwaW5nX3Bvbmc6e2tleXdvcmRzOltcInNwb3J0c1wiLFwicGluZ3BvbmdcIl0sY2hhcjpcIvCfj5NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LGJhZG1pbnRvbjp7a2V5d29yZHM6W1wic3BvcnRzXCJdLGNoYXI6XCLwn4+4XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxnb2FsX25ldDp7a2V5d29yZHM6W1wic3BvcnRzXCJdLGNoYXI6XCLwn6WFXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxpY2VfaG9ja2V5OntrZXl3b3JkczpbXCJzcG9ydHNcIl0sY2hhcjpcIvCfj5JcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LGZpZWxkX2hvY2tleTp7a2V5d29yZHM6W1wic3BvcnRzXCJdLGNoYXI6XCLwn4+RXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxsYWNyb3NzZTp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJiYWxsXCIsXCJzdGlja1wiXSxjaGFyOlwi8J+ljVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sY3JpY2tldDp7a2V5d29yZHM6W1wic3BvcnRzXCJdLGNoYXI6XCLwn4+PXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxza2k6e2tleXdvcmRzOltcInNwb3J0c1wiLFwid2ludGVyXCIsXCJjb2xkXCIsXCJzbm93XCJdLGNoYXI6XCLwn46/XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxza2llcjp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJ3aW50ZXJcIixcInNub3dcIl0sY2hhcjpcIuKbt1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sc25vd2JvYXJkZXI6e2tleXdvcmRzOltcInNwb3J0c1wiLFwid2ludGVyXCJdLGNoYXI6XCLwn4+CXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LHBlcnNvbl9mZW5jaW5nOntrZXl3b3JkczpbXCJzcG9ydHNcIixcImZlbmNpbmdcIixcInN3b3JkXCJdLGNoYXI6XCLwn6S6XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSx3b21lbl93cmVzdGxpbmc6e2tleXdvcmRzOltcInNwb3J0c1wiLFwid3Jlc3RsZXJzXCJdLGNoYXI6XCLwn6S84oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxtZW5fd3Jlc3RsaW5nOntrZXl3b3JkczpbXCJzcG9ydHNcIixcIndyZXN0bGVyc1wiXSxjaGFyOlwi8J+kvOKAjeKZgu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sd29tYW5fY2FydHdoZWVsaW5nOntrZXl3b3JkczpbXCJneW1uYXN0aWNzXCJdLGNoYXI6XCLwn6S44oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LG1hbl9jYXJ0d2hlZWxpbmc6e2tleXdvcmRzOltcImd5bW5hc3RpY3NcIl0sY2hhcjpcIvCfpLjigI3imYLvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sd29tYW5fcGxheWluZ19oYW5kYmFsbDp7a2V5d29yZHM6W1wic3BvcnRzXCJdLGNoYXI6XCLwn6S+4oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LG1hbl9wbGF5aW5nX2hhbmRiYWxsOntrZXl3b3JkczpbXCJzcG9ydHNcIl0sY2hhcjpcIvCfpL7igI3imYLvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0saWNlX3NrYXRlOntrZXl3b3JkczpbXCJzcG9ydHNcIl0sY2hhcjpcIuKbuFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sY3VybGluZ19zdG9uZTp7a2V5d29yZHM6W1wic3BvcnRzXCJdLGNoYXI6XCLwn6WMXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxza2F0ZWJvYXJkOntrZXl3b3JkczpbXCJib2FyZFwiXSxjaGFyOlwi8J+buVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sc2xlZDp7a2V5d29yZHM6W1wic2xlaWdoXCIsXCJsdWdlXCIsXCJ0b2JvZ2dhblwiXSxjaGFyOlwi8J+bt1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sYm93X2FuZF9hcnJvdzp7a2V5d29yZHM6W1wic3BvcnRzXCJdLGNoYXI6XCLwn4+5XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxmaXNoaW5nX3BvbGVfYW5kX2Zpc2g6e2tleXdvcmRzOltcImZvb2RcIixcImhvYmJ5XCIsXCJzdW1tZXJcIl0sY2hhcjpcIvCfjqNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LGJveGluZ19nbG92ZTp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJmaWdodGluZ1wiXSxjaGFyOlwi8J+lilwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sbWFydGlhbF9hcnRzX3VuaWZvcm06e2tleXdvcmRzOltcImp1ZG9cIixcImthcmF0ZVwiLFwidGFla3dvbmRvXCJdLGNoYXI6XCLwn6WLXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxyb3dpbmdfd29tYW46e2tleXdvcmRzOltcInNwb3J0c1wiLFwiaG9iYnlcIixcIndhdGVyXCIsXCJzaGlwXCIsXCJ3b21hblwiLFwiZmVtYWxlXCJdLGNoYXI6XCLwn5qj4oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LHJvd2luZ19tYW46e2tleXdvcmRzOltcInNwb3J0c1wiLFwiaG9iYnlcIixcIndhdGVyXCIsXCJzaGlwXCJdLGNoYXI6XCLwn5qjXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LGNsaW1iaW5nX3dvbWFuOntrZXl3b3JkczpbXCJzcG9ydHNcIixcImhvYmJ5XCIsXCJ3b21hblwiLFwiZmVtYWxlXCIsXCJyb2NrXCJdLGNoYXI6XCLwn6eX4oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LGNsaW1iaW5nX21hbjp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJob2JieVwiLFwibWFuXCIsXCJtYWxlXCIsXCJyb2NrXCJdLGNoYXI6XCLwn6eX4oCN4pmC77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LHN3aW1taW5nX3dvbWFuOntrZXl3b3JkczpbXCJzcG9ydHNcIixcImV4ZXJjaXNlXCIsXCJodW1hblwiLFwiYXRobGV0ZVwiLFwid2F0ZXJcIixcInN1bW1lclwiLFwid29tYW5cIixcImZlbWFsZVwiXSxjaGFyOlwi8J+PiuKAjeKZgO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxzd2ltbWluZ19tYW46e2tleXdvcmRzOltcInNwb3J0c1wiLFwiZXhlcmNpc2VcIixcImh1bWFuXCIsXCJhdGhsZXRlXCIsXCJ3YXRlclwiLFwic3VtbWVyXCJdLGNoYXI6XCLwn4+KXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LHdvbWFuX3BsYXlpbmdfd2F0ZXJfcG9sbzp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJwb29sXCJdLGNoYXI6XCLwn6S94oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LG1hbl9wbGF5aW5nX3dhdGVyX3BvbG86e2tleXdvcmRzOltcInNwb3J0c1wiLFwicG9vbFwiXSxjaGFyOlwi8J+kveKAjeKZgu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSx3b21hbl9pbl9sb3R1c19wb3NpdGlvbjp7a2V5d29yZHM6W1wid29tYW5cIixcImZlbWFsZVwiLFwibWVkaXRhdGlvblwiLFwieW9nYVwiLFwic2VyZW5pdHlcIixcInplblwiLFwibWluZGZ1bG5lc3NcIl0sY2hhcjpcIvCfp5jigI3imYDvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sbWFuX2luX2xvdHVzX3Bvc2l0aW9uOntrZXl3b3JkczpbXCJtYW5cIixcIm1hbGVcIixcIm1lZGl0YXRpb25cIixcInlvZ2FcIixcInNlcmVuaXR5XCIsXCJ6ZW5cIixcIm1pbmRmdWxuZXNzXCJdLGNoYXI6XCLwn6eY4oCN4pmC77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LHN1cmZpbmdfd29tYW46e2tleXdvcmRzOltcInNwb3J0c1wiLFwib2NlYW5cIixcInNlYVwiLFwic3VtbWVyXCIsXCJiZWFjaFwiLFwid29tYW5cIixcImZlbWFsZVwiXSxjaGFyOlwi8J+PhOKAjeKZgO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxzdXJmaW5nX21hbjp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJvY2VhblwiLFwic2VhXCIsXCJzdW1tZXJcIixcImJlYWNoXCJdLGNoYXI6XCLwn4+EXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LGJhdGg6e2tleXdvcmRzOltcImNsZWFuXCIsXCJzaG93ZXJcIixcImJhdGhyb29tXCJdLGNoYXI6XCLwn5uAXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LGJhc2tldGJhbGxfd29tYW46e2tleXdvcmRzOltcInNwb3J0c1wiLFwiaHVtYW5cIixcIndvbWFuXCIsXCJmZW1hbGVcIl0sY2hhcjpcIuKbue+4j+KAjeKZgO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxiYXNrZXRiYWxsX21hbjp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJodW1hblwiXSxjaGFyOlwi4pu5XCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LHdlaWdodF9saWZ0aW5nX3dvbWFuOntrZXl3b3JkczpbXCJzcG9ydHNcIixcInRyYWluaW5nXCIsXCJleGVyY2lzZVwiLFwid29tYW5cIixcImZlbWFsZVwiXSxjaGFyOlwi8J+Pi++4j+KAjeKZgO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSx3ZWlnaHRfbGlmdGluZ19tYW46e2tleXdvcmRzOltcInNwb3J0c1wiLFwidHJhaW5pbmdcIixcImV4ZXJjaXNlXCJdLGNoYXI6XCLwn4+LXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LGJpa2luZ193b21hbjp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJiaWtlXCIsXCJleGVyY2lzZVwiLFwiaGlwc3RlclwiLFwid29tYW5cIixcImZlbWFsZVwiXSxjaGFyOlwi8J+atOKAjeKZgO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxiaWtpbmdfbWFuOntrZXl3b3JkczpbXCJzcG9ydHNcIixcImJpa2VcIixcImV4ZXJjaXNlXCIsXCJoaXBzdGVyXCJdLGNoYXI6XCLwn5q0XCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LG1vdW50YWluX2Jpa2luZ193b21hbjp7a2V5d29yZHM6W1widHJhbnNwb3J0YXRpb25cIixcInNwb3J0c1wiLFwiaHVtYW5cIixcInJhY2VcIixcImJpa2VcIixcIndvbWFuXCIsXCJmZW1hbGVcIl0sY2hhcjpcIvCfmrXigI3imYDvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sbW91bnRhaW5fYmlraW5nX21hbjp7a2V5d29yZHM6W1widHJhbnNwb3J0YXRpb25cIixcInNwb3J0c1wiLFwiaHVtYW5cIixcInJhY2VcIixcImJpa2VcIl0sY2hhcjpcIvCfmrVcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0saG9yc2VfcmFjaW5nOntrZXl3b3JkczpbXCJhbmltYWxcIixcImJldHRpbmdcIixcImNvbXBldGl0aW9uXCIsXCJnYW1ibGluZ1wiLFwibHVja1wiXSxjaGFyOlwi8J+Ph1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxidXNpbmVzc19zdWl0X2xldml0YXRpbmc6e2tleXdvcmRzOltcInN1aXRcIixcImJ1c2luZXNzXCIsXCJsZXZpdGF0ZVwiLFwiaG92ZXJcIixcImp1bXBcIl0sY2hhcjpcIvCflbRcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sdHJvcGh5OntrZXl3b3JkczpbXCJ3aW5cIixcImF3YXJkXCIsXCJjb250ZXN0XCIsXCJwbGFjZVwiLFwiZnR3XCIsXCJjZXJlbW9ueVwiXSxjaGFyOlwi8J+PhlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0scnVubmluZ19zaGlydF93aXRoX3Nhc2g6e2tleXdvcmRzOltcInBsYXlcIixcInBhZ2VhbnRcIl0sY2hhcjpcIvCfjr1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LG1lZGFsX3Nwb3J0czp7a2V5d29yZHM6W1wiYXdhcmRcIixcIndpbm5pbmdcIl0sY2hhcjpcIvCfj4VcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LG1lZGFsX21pbGl0YXJ5OntrZXl3b3JkczpbXCJhd2FyZFwiLFwid2lubmluZ1wiLFwiYXJteVwiXSxjaGFyOlwi8J+OllwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sXCIxc3RfcGxhY2VfbWVkYWxcIjp7a2V5d29yZHM6W1wiYXdhcmRcIixcIndpbm5pbmdcIixcImZpcnN0XCJdLGNoYXI6XCLwn6WHXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxcIjJuZF9wbGFjZV9tZWRhbFwiOntrZXl3b3JkczpbXCJhd2FyZFwiLFwic2Vjb25kXCJdLGNoYXI6XCLwn6WIXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxcIjNyZF9wbGFjZV9tZWRhbFwiOntrZXl3b3JkczpbXCJhd2FyZFwiLFwidGhpcmRcIl0sY2hhcjpcIvCfpYlcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LHJlbWluZGVyX3JpYmJvbjp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJjYXVzZVwiLFwic3VwcG9ydFwiLFwiYXdhcmVuZXNzXCJdLGNoYXI6XCLwn46XXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxyb3NldHRlOntrZXl3b3JkczpbXCJmbG93ZXJcIixcImRlY29yYXRpb25cIixcIm1pbGl0YXJ5XCJdLGNoYXI6XCLwn4+1XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSx0aWNrZXQ6e2tleXdvcmRzOltcImV2ZW50XCIsXCJjb25jZXJ0XCIsXCJwYXNzXCJdLGNoYXI6XCLwn46rXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSx0aWNrZXRzOntrZXl3b3JkczpbXCJzcG9ydHNcIixcImNvbmNlcnRcIixcImVudHJhbmNlXCJdLGNoYXI6XCLwn46fXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxwZXJmb3JtaW5nX2FydHM6e2tleXdvcmRzOltcImFjdGluZ1wiLFwidGhlYXRlclwiLFwiZHJhbWFcIl0sY2hhcjpcIvCfjq1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LGFydDp7a2V5d29yZHM6W1wiZGVzaWduXCIsXCJwYWludFwiLFwiZHJhd1wiLFwiY29sb3JzXCJdLGNoYXI6XCLwn46oXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxjaXJjdXNfdGVudDp7a2V5d29yZHM6W1wiZmVzdGl2YWxcIixcImNhcm5pdmFsXCIsXCJwYXJ0eVwiXSxjaGFyOlwi8J+OqlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sd29tYW5fanVnZ2xpbmc6e2tleXdvcmRzOltcImp1Z2dsZVwiLFwiYmFsYW5jZVwiLFwic2tpbGxcIixcIm11bHRpdGFza1wiXSxjaGFyOlwi8J+kueKAjeKZgO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxtYW5fanVnZ2xpbmc6e2tleXdvcmRzOltcImp1Z2dsZVwiLFwiYmFsYW5jZVwiLFwic2tpbGxcIixcIm11bHRpdGFza1wiXSxjaGFyOlwi8J+kueKAjeKZgu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxtaWNyb3Bob25lOntrZXl3b3JkczpbXCJzb3VuZFwiLFwibXVzaWNcIixcIlBBXCIsXCJzaW5nXCIsXCJ0YWxrc2hvd1wiXSxjaGFyOlwi8J+OpFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0saGVhZHBob25lczp7a2V5d29yZHM6W1wibXVzaWNcIixcInNjb3JlXCIsXCJnYWRnZXRzXCJdLGNoYXI6XCLwn46nXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxtdXNpY2FsX3Njb3JlOntrZXl3b3JkczpbXCJ0cmVibGVcIixcImNsZWZcIixcImNvbXBvc2VcIl0sY2hhcjpcIvCfjrxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LG11c2ljYWxfa2V5Ym9hcmQ6e2tleXdvcmRzOltcInBpYW5vXCIsXCJpbnN0cnVtZW50XCIsXCJjb21wb3NlXCJdLGNoYXI6XCLwn465XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxkcnVtOntrZXl3b3JkczpbXCJtdXNpY1wiLFwiaW5zdHJ1bWVudFwiLFwiZHJ1bXN0aWNrc1wiLFwic25hcmVcIl0sY2hhcjpcIvCfpYFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LHNheG9waG9uZTp7a2V5d29yZHM6W1wibXVzaWNcIixcImluc3RydW1lbnRcIixcImphenpcIixcImJsdWVzXCJdLGNoYXI6XCLwn463XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSx0cnVtcGV0OntrZXl3b3JkczpbXCJtdXNpY1wiLFwiYnJhc3NcIl0sY2hhcjpcIvCfjrpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LGd1aXRhcjp7a2V5d29yZHM6W1wibXVzaWNcIixcImluc3RydW1lbnRcIl0sY2hhcjpcIvCfjrhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LHZpb2xpbjp7a2V5d29yZHM6W1wibXVzaWNcIixcImluc3RydW1lbnRcIixcIm9yY2hlc3RyYVwiLFwic3ltcGhvbnlcIl0sY2hhcjpcIvCfjrtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LGNsYXBwZXI6e2tleXdvcmRzOltcIm1vdmllXCIsXCJmaWxtXCIsXCJyZWNvcmRcIl0sY2hhcjpcIvCfjqxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LHZpZGVvX2dhbWU6e2tleXdvcmRzOltcInBsYXlcIixcImNvbnNvbGVcIixcIlBTNFwiLFwiY29udHJvbGxlclwiXSxjaGFyOlwi8J+OrlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sc3BhY2VfaW52YWRlcjp7a2V5d29yZHM6W1wiZ2FtZVwiLFwiYXJjYWRlXCIsXCJwbGF5XCJdLGNoYXI6XCLwn5G+XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxkYXJ0OntrZXl3b3JkczpbXCJnYW1lXCIsXCJwbGF5XCIsXCJiYXJcIixcInRhcmdldFwiLFwiYnVsbHNleWVcIl0sY2hhcjpcIvCfjq9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LGdhbWVfZGllOntrZXl3b3JkczpbXCJkaWNlXCIsXCJyYW5kb21cIixcInRhYmxldG9wXCIsXCJwbGF5XCIsXCJsdWNrXCJdLGNoYXI6XCLwn46yXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxjaGVzc19wYXduOntrZXl3b3JkczpbXCJleHBlbmRhYmxlXCJdLGNoYXI6XCLimZ9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LHNsb3RfbWFjaGluZTp7a2V5d29yZHM6W1wiYmV0XCIsXCJnYW1ibGVcIixcInZlZ2FzXCIsXCJmcnVpdCBtYWNoaW5lXCIsXCJsdWNrXCIsXCJjYXNpbm9cIl0sY2hhcjpcIvCfjrBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LGppZ3Nhdzp7a2V5d29yZHM6W1wiaW50ZXJsb2NraW5nXCIsXCJwdXp6bGVcIixcInBpZWNlXCJdLGNoYXI6XCLwn6epXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxib3dsaW5nOntrZXl3b3JkczpbXCJzcG9ydHNcIixcImZ1blwiLFwicGxheVwiXSxjaGFyOlwi8J+Os1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0scmVkX2Nhcjp7a2V5d29yZHM6W1wicmVkXCIsXCJ0cmFuc3BvcnRhdGlvblwiLFwidmVoaWNsZVwiXSxjaGFyOlwi8J+al1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sdGF4aTp7a2V5d29yZHM6W1widWJlclwiLFwidmVoaWNsZVwiLFwiY2Fyc1wiLFwidHJhbnNwb3J0YXRpb25cIl0sY2hhcjpcIvCfmpVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGJsdWVfY2FyOntrZXl3b3JkczpbXCJ0cmFuc3BvcnRhdGlvblwiLFwidmVoaWNsZVwiXSxjaGFyOlwi8J+amVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sYnVzOntrZXl3b3JkczpbXCJjYXJcIixcInZlaGljbGVcIixcInRyYW5zcG9ydGF0aW9uXCJdLGNoYXI6XCLwn5qMXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSx0cm9sbGV5YnVzOntrZXl3b3JkczpbXCJiYXJ0XCIsXCJ0cmFuc3BvcnRhdGlvblwiLFwidmVoaWNsZVwiXSxjaGFyOlwi8J+ajlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0scmFjaW5nX2Nhcjp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJyYWNlXCIsXCJmYXN0XCIsXCJmb3JtdWxhXCIsXCJmMVwiXSxjaGFyOlwi8J+PjlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0scG9saWNlX2Nhcjp7a2V5d29yZHM6W1widmVoaWNsZVwiLFwiY2Fyc1wiLFwidHJhbnNwb3J0YXRpb25cIixcImxhd1wiLFwibGVnYWxcIixcImVuZm9yY2VtZW50XCJdLGNoYXI6XCLwn5qTXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxhbWJ1bGFuY2U6e2tleXdvcmRzOltcImhlYWx0aFwiLFwiOTExXCIsXCJob3NwaXRhbFwiXSxjaGFyOlwi8J+akVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sZmlyZV9lbmdpbmU6e2tleXdvcmRzOltcInRyYW5zcG9ydGF0aW9uXCIsXCJjYXJzXCIsXCJ2ZWhpY2xlXCJdLGNoYXI6XCLwn5qSXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxtaW5pYnVzOntrZXl3b3JkczpbXCJ2ZWhpY2xlXCIsXCJjYXJcIixcInRyYW5zcG9ydGF0aW9uXCJdLGNoYXI6XCLwn5qQXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSx0cnVjazp7a2V5d29yZHM6W1wiY2Fyc1wiLFwidHJhbnNwb3J0YXRpb25cIl0sY2hhcjpcIvCfmppcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGFydGljdWxhdGVkX2xvcnJ5OntrZXl3b3JkczpbXCJ2ZWhpY2xlXCIsXCJjYXJzXCIsXCJ0cmFuc3BvcnRhdGlvblwiLFwiZXhwcmVzc1wiXSxjaGFyOlwi8J+am1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sdHJhY3Rvcjp7a2V5d29yZHM6W1widmVoaWNsZVwiLFwiY2FyXCIsXCJmYXJtaW5nXCIsXCJhZ3JpY3VsdHVyZVwiXSxjaGFyOlwi8J+anFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sa2lja19zY29vdGVyOntrZXl3b3JkczpbXCJ2ZWhpY2xlXCIsXCJraWNrXCIsXCJyYXpvclwiXSxjaGFyOlwi8J+btFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sbW90b3JjeWNsZTp7a2V5d29yZHM6W1wicmFjZVwiLFwic3BvcnRzXCIsXCJmYXN0XCJdLGNoYXI6XCLwn4+NXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxiaWtlOntrZXl3b3JkczpbXCJzcG9ydHNcIixcImJpY3ljbGVcIixcImV4ZXJjaXNlXCIsXCJoaXBzdGVyXCJdLGNoYXI6XCLwn5qyXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxtb3Rvcl9zY29vdGVyOntrZXl3b3JkczpbXCJ2ZWhpY2xlXCIsXCJ2ZXNwYVwiLFwic2FzaGFcIl0sY2hhcjpcIvCfm7VcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHJvdGF0aW5nX2xpZ2h0OntrZXl3b3JkczpbXCJwb2xpY2VcIixcImFtYnVsYW5jZVwiLFwiOTExXCIsXCJlbWVyZ2VuY3lcIixcImFsZXJ0XCIsXCJlcnJvclwiLFwicGluZ2VkXCIsXCJsYXdcIixcImxlZ2FsXCJdLGNoYXI6XCLwn5qoXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxvbmNvbWluZ19wb2xpY2VfY2FyOntrZXl3b3JkczpbXCJ2ZWhpY2xlXCIsXCJsYXdcIixcImxlZ2FsXCIsXCJlbmZvcmNlbWVudFwiLFwiOTExXCJdLGNoYXI6XCLwn5qUXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxvbmNvbWluZ19idXM6e2tleXdvcmRzOltcInZlaGljbGVcIixcInRyYW5zcG9ydGF0aW9uXCJdLGNoYXI6XCLwn5qNXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxvbmNvbWluZ19hdXRvbW9iaWxlOntrZXl3b3JkczpbXCJjYXJcIixcInZlaGljbGVcIixcInRyYW5zcG9ydGF0aW9uXCJdLGNoYXI6XCLwn5qYXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxvbmNvbWluZ190YXhpOntrZXl3b3JkczpbXCJ2ZWhpY2xlXCIsXCJjYXJzXCIsXCJ1YmVyXCJdLGNoYXI6XCLwn5qWXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxhZXJpYWxfdHJhbXdheTp7a2V5d29yZHM6W1widHJhbnNwb3J0YXRpb25cIixcInZlaGljbGVcIixcInNraVwiXSxjaGFyOlwi8J+aoVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sbW91bnRhaW5fY2FibGV3YXk6e2tleXdvcmRzOltcInRyYW5zcG9ydGF0aW9uXCIsXCJ2ZWhpY2xlXCIsXCJza2lcIl0sY2hhcjpcIvCfmqBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHN1c3BlbnNpb25fcmFpbHdheTp7a2V5d29yZHM6W1widmVoaWNsZVwiLFwidHJhbnNwb3J0YXRpb25cIl0sY2hhcjpcIvCfmp9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHJhaWx3YXlfY2FyOntrZXl3b3JkczpbXCJ0cmFuc3BvcnRhdGlvblwiLFwidmVoaWNsZVwiXSxjaGFyOlwi8J+ag1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sdHJhaW46e2tleXdvcmRzOltcInRyYW5zcG9ydGF0aW9uXCIsXCJ2ZWhpY2xlXCIsXCJjYXJyaWFnZVwiLFwicHVibGljXCIsXCJ0cmF2ZWxcIl0sY2hhcjpcIvCfmotcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LG1vbm9yYWlsOntrZXl3b3JkczpbXCJ0cmFuc3BvcnRhdGlvblwiLFwidmVoaWNsZVwiXSxjaGFyOlwi8J+anVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sYnVsbGV0dHJhaW5fc2lkZTp7a2V5d29yZHM6W1widHJhbnNwb3J0YXRpb25cIixcInZlaGljbGVcIl0sY2hhcjpcIvCfmoRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGJ1bGxldHRyYWluX2Zyb250OntrZXl3b3JkczpbXCJ0cmFuc3BvcnRhdGlvblwiLFwidmVoaWNsZVwiLFwic3BlZWRcIixcImZhc3RcIixcInB1YmxpY1wiLFwidHJhdmVsXCJdLGNoYXI6XCLwn5qFXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxsaWdodF9yYWlsOntrZXl3b3JkczpbXCJ0cmFuc3BvcnRhdGlvblwiLFwidmVoaWNsZVwiXSxjaGFyOlwi8J+aiFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sbW91bnRhaW5fcmFpbHdheTp7a2V5d29yZHM6W1widHJhbnNwb3J0YXRpb25cIixcInZlaGljbGVcIl0sY2hhcjpcIvCfmp5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHN0ZWFtX2xvY29tb3RpdmU6e2tleXdvcmRzOltcInRyYW5zcG9ydGF0aW9uXCIsXCJ2ZWhpY2xlXCIsXCJ0cmFpblwiXSxjaGFyOlwi8J+aglwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sdHJhaW4yOntrZXl3b3JkczpbXCJ0cmFuc3BvcnRhdGlvblwiLFwidmVoaWNsZVwiXSxjaGFyOlwi8J+ahlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sbWV0cm86e2tleXdvcmRzOltcInRyYW5zcG9ydGF0aW9uXCIsXCJibHVlLXNxdWFyZVwiLFwibXJ0XCIsXCJ1bmRlcmdyb3VuZFwiLFwidHViZVwiXSxjaGFyOlwi8J+ah1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sdHJhbTp7a2V5d29yZHM6W1widHJhbnNwb3J0YXRpb25cIixcInZlaGljbGVcIl0sY2hhcjpcIvCfmopcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHN0YXRpb246e2tleXdvcmRzOltcInRyYW5zcG9ydGF0aW9uXCIsXCJ2ZWhpY2xlXCIsXCJwdWJsaWNcIl0sY2hhcjpcIvCfmolcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGZseWluZ19zYXVjZXI6e2tleXdvcmRzOltcInRyYW5zcG9ydGF0aW9uXCIsXCJ2ZWhpY2xlXCIsXCJ1Zm9cIl0sY2hhcjpcIvCfm7hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGhlbGljb3B0ZXI6e2tleXdvcmRzOltcInRyYW5zcG9ydGF0aW9uXCIsXCJ2ZWhpY2xlXCIsXCJmbHlcIl0sY2hhcjpcIvCfmoFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHNtYWxsX2FpcnBsYW5lOntrZXl3b3JkczpbXCJmbGlnaHRcIixcInRyYW5zcG9ydGF0aW9uXCIsXCJmbHlcIixcInZlaGljbGVcIl0sY2hhcjpcIvCfm6lcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGFpcnBsYW5lOntrZXl3b3JkczpbXCJ2ZWhpY2xlXCIsXCJ0cmFuc3BvcnRhdGlvblwiLFwiZmxpZ2h0XCIsXCJmbHlcIl0sY2hhcjpcIuKciO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sZmxpZ2h0X2RlcGFydHVyZTp7a2V5d29yZHM6W1wiYWlycG9ydFwiLFwiZmxpZ2h0XCIsXCJsYW5kaW5nXCJdLGNoYXI6XCLwn5urXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxmbGlnaHRfYXJyaXZhbDp7a2V5d29yZHM6W1wiYWlycG9ydFwiLFwiZmxpZ2h0XCIsXCJib2FyZGluZ1wiXSxjaGFyOlwi8J+brFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sc2FpbGJvYXQ6e2tleXdvcmRzOltcInNoaXBcIixcInN1bW1lclwiLFwidHJhbnNwb3J0YXRpb25cIixcIndhdGVyXCIsXCJzYWlsaW5nXCJdLGNoYXI6XCLim7VcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LG1vdG9yX2JvYXQ6e2tleXdvcmRzOltcInNoaXBcIl0sY2hhcjpcIvCfm6VcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHNwZWVkYm9hdDp7a2V5d29yZHM6W1wic2hpcFwiLFwidHJhbnNwb3J0YXRpb25cIixcInZlaGljbGVcIixcInN1bW1lclwiXSxjaGFyOlwi8J+apFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sZmVycnk6e2tleXdvcmRzOltcImJvYXRcIixcInNoaXBcIixcInlhY2h0XCJdLGNoYXI6XCLim7RcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHBhc3Nlbmdlcl9zaGlwOntrZXl3b3JkczpbXCJ5YWNodFwiLFwiY3J1aXNlXCIsXCJmZXJyeVwiXSxjaGFyOlwi8J+bs1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0scm9ja2V0OntrZXl3b3JkczpbXCJsYXVuY2hcIixcInNoaXBcIixcInN0YWZmbW9kZVwiLFwiTkFTQVwiLFwib3V0ZXIgc3BhY2VcIixcIm91dGVyX3NwYWNlXCIsXCJmbHlcIl0sY2hhcjpcIvCfmoBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGFydGlmaWNpYWxfc2F0ZWxsaXRlOntrZXl3b3JkczpbXCJjb21tdW5pY2F0aW9uXCIsXCJncHNcIixcIm9yYml0XCIsXCJzcGFjZWZsaWdodFwiLFwiTkFTQVwiLFwiSVNTXCJdLGNoYXI6XCLwn5uwXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxzZWF0OntrZXl3b3JkczpbXCJzaXRcIixcImFpcnBsYW5lXCIsXCJ0cmFuc3BvcnRcIixcImJ1c1wiLFwiZmxpZ2h0XCIsXCJmbHlcIl0sY2hhcjpcIvCfkrpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGNhbm9lOntrZXl3b3JkczpbXCJib2F0XCIsXCJwYWRkbGVcIixcIndhdGVyXCIsXCJzaGlwXCJdLGNoYXI6XCLwn5u2XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxhbmNob3I6e2tleXdvcmRzOltcInNoaXBcIixcImZlcnJ5XCIsXCJzZWFcIixcImJvYXRcIl0sY2hhcjpcIuKak1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sY29uc3RydWN0aW9uOntrZXl3b3JkczpbXCJ3aXBcIixcInByb2dyZXNzXCIsXCJjYXV0aW9uXCIsXCJ3YXJuaW5nXCJdLGNoYXI6XCLwn5qnXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxmdWVscHVtcDp7a2V5d29yZHM6W1wiZ2FzIHN0YXRpb25cIixcInBldHJvbGV1bVwiXSxjaGFyOlwi4pu9XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxidXNzdG9wOntrZXl3b3JkczpbXCJ0cmFuc3BvcnRhdGlvblwiLFwid2FpdFwiXSxjaGFyOlwi8J+aj1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sdmVydGljYWxfdHJhZmZpY19saWdodDp7a2V5d29yZHM6W1widHJhbnNwb3J0YXRpb25cIixcImRyaXZpbmdcIl0sY2hhcjpcIvCfmqZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHRyYWZmaWNfbGlnaHQ6e2tleXdvcmRzOltcInRyYW5zcG9ydGF0aW9uXCIsXCJzaWduYWxcIl0sY2hhcjpcIvCfmqVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGNoZWNrZXJlZF9mbGFnOntrZXl3b3JkczpbXCJjb250ZXN0XCIsXCJmaW5pc2hsaW5lXCIsXCJyYWNlXCIsXCJnb2thcnRcIl0sY2hhcjpcIvCfj4FcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHNoaXA6e2tleXdvcmRzOltcInRyYW5zcG9ydGF0aW9uXCIsXCJ0aXRhbmljXCIsXCJkZXBsb3lcIl0sY2hhcjpcIvCfmqJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGZlcnJpc193aGVlbDp7a2V5d29yZHM6W1wicGhvdG9cIixcImNhcm5pdmFsXCIsXCJsb25kb25leWVcIl0sY2hhcjpcIvCfjqFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHJvbGxlcl9jb2FzdGVyOntrZXl3b3JkczpbXCJjYXJuaXZhbFwiLFwicGxheWdyb3VuZFwiLFwicGhvdG9cIixcImZ1blwiXSxjaGFyOlwi8J+OolwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sY2Fyb3VzZWxfaG9yc2U6e2tleXdvcmRzOltcInBob3RvXCIsXCJjYXJuaXZhbFwiXSxjaGFyOlwi8J+OoFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sYnVpbGRpbmdfY29uc3RydWN0aW9uOntrZXl3b3JkczpbXCJ3aXBcIixcIndvcmtpbmdcIixcInByb2dyZXNzXCJdLGNoYXI6XCLwn4+XXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxmb2dneTp7a2V5d29yZHM6W1wicGhvdG9cIixcIm1vdW50YWluXCJdLGNoYXI6XCLwn4yBXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSx0b2t5b190b3dlcjp7a2V5d29yZHM6W1wicGhvdG9cIixcImphcGFuZXNlXCJdLGNoYXI6XCLwn5e8XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxmYWN0b3J5OntrZXl3b3JkczpbXCJidWlsZGluZ1wiLFwiaW5kdXN0cnlcIixcInBvbGx1dGlvblwiLFwic21va2VcIl0sY2hhcjpcIvCfj61cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGZvdW50YWluOntrZXl3b3JkczpbXCJwaG90b1wiLFwic3VtbWVyXCIsXCJ3YXRlclwiLFwiZnJlc2hcIl0sY2hhcjpcIuKbslwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0scmljZV9zY2VuZTp7a2V5d29yZHM6W1wicGhvdG9cIixcImphcGFuXCIsXCJhc2lhXCIsXCJ0c3VraW1pXCJdLGNoYXI6XCLwn46RXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxtb3VudGFpbjp7a2V5d29yZHM6W1wicGhvdG9cIixcIm5hdHVyZVwiLFwiZW52aXJvbm1lbnRcIl0sY2hhcjpcIuKbsFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sbW91bnRhaW5fc25vdzp7a2V5d29yZHM6W1wicGhvdG9cIixcIm5hdHVyZVwiLFwiZW52aXJvbm1lbnRcIixcIndpbnRlclwiLFwiY29sZFwiXSxjaGFyOlwi8J+PlFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sbW91bnRfZnVqaTp7a2V5d29yZHM6W1wicGhvdG9cIixcIm1vdW50YWluXCIsXCJuYXR1cmVcIixcImphcGFuZXNlXCJdLGNoYXI6XCLwn5e7XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSx2b2xjYW5vOntrZXl3b3JkczpbXCJwaG90b1wiLFwibmF0dXJlXCIsXCJkaXNhc3RlclwiXSxjaGFyOlwi8J+Mi1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0samFwYW46e2tleXdvcmRzOltcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiamFwYW5lc2VcIixcImFzaWFcIl0sY2hhcjpcIvCfl75cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGNhbXBpbmc6e2tleXdvcmRzOltcInBob3RvXCIsXCJvdXRkb29yc1wiLFwidGVudFwiXSxjaGFyOlwi8J+PlVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sdGVudDp7a2V5d29yZHM6W1wicGhvdG9cIixcImNhbXBpbmdcIixcIm91dGRvb3JzXCJdLGNoYXI6XCLim7pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LG5hdGlvbmFsX3Bhcms6e2tleXdvcmRzOltcInBob3RvXCIsXCJlbnZpcm9ubWVudFwiLFwibmF0dXJlXCJdLGNoYXI6XCLwn4+eXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxtb3RvcndheTp7a2V5d29yZHM6W1wicm9hZFwiLFwiY3VwZXJ0aW5vXCIsXCJpbnRlcnN0YXRlXCIsXCJoaWdod2F5XCJdLGNoYXI6XCLwn5ujXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxyYWlsd2F5X3RyYWNrOntrZXl3b3JkczpbXCJ0cmFpblwiLFwidHJhbnNwb3J0YXRpb25cIl0sY2hhcjpcIvCfm6RcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHN1bnJpc2U6e2tleXdvcmRzOltcIm1vcm5pbmdcIixcInZpZXdcIixcInZhY2F0aW9uXCIsXCJwaG90b1wiXSxjaGFyOlwi8J+MhVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sc3VucmlzZV9vdmVyX21vdW50YWluczp7a2V5d29yZHM6W1widmlld1wiLFwidmFjYXRpb25cIixcInBob3RvXCJdLGNoYXI6XCLwn4yEXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxkZXNlcnQ6e2tleXdvcmRzOltcInBob3RvXCIsXCJ3YXJtXCIsXCJzYWhhcmFoXCJdLGNoYXI6XCLwn4+cXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxiZWFjaF91bWJyZWxsYTp7a2V5d29yZHM6W1wid2VhdGhlclwiLFwic3VtbWVyXCIsXCJzdW5ueVwiLFwic2FuZFwiLFwibW9qaXRvXCJdLGNoYXI6XCLwn4+WXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxkZXNlcnRfaXNsYW5kOntrZXl3b3JkczpbXCJwaG90b1wiLFwidHJvcGljYWxcIixcIm1vaml0b1wiXSxjaGFyOlwi8J+PnVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sY2l0eV9zdW5yaXNlOntrZXl3b3JkczpbXCJwaG90b1wiLFwiZ29vZCBtb3JuaW5nXCIsXCJkYXduXCJdLGNoYXI6XCLwn4yHXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxjaXR5X3N1bnNldDp7a2V5d29yZHM6W1wicGhvdG9cIixcImV2ZW5pbmdcIixcInNreVwiLFwiYnVpbGRpbmdzXCJdLGNoYXI6XCLwn4yGXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxjaXR5c2NhcGU6e2tleXdvcmRzOltcInBob3RvXCIsXCJuaWdodCBsaWZlXCIsXCJ1cmJhblwiXSxjaGFyOlwi8J+PmVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sbmlnaHRfd2l0aF9zdGFyczp7a2V5d29yZHM6W1wiZXZlbmluZ1wiLFwiY2l0eVwiLFwiZG93bnRvd25cIl0sY2hhcjpcIvCfjINcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGJyaWRnZV9hdF9uaWdodDp7a2V5d29yZHM6W1wicGhvdG9cIixcInNhbmZyYW5jaXNjb1wiXSxjaGFyOlwi8J+MiVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sbWlsa3lfd2F5OntrZXl3b3JkczpbXCJwaG90b1wiLFwic3BhY2VcIixcInN0YXJzXCJdLGNoYXI6XCLwn4yMXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxzdGFyczp7a2V5d29yZHM6W1wibmlnaHRcIixcInBob3RvXCJdLGNoYXI6XCLwn4ygXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxzcGFya2xlcjp7a2V5d29yZHM6W1wic3RhcnNcIixcIm5pZ2h0XCIsXCJzaGluZVwiXSxjaGFyOlwi8J+Oh1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sZmlyZXdvcmtzOntrZXl3b3JkczpbXCJwaG90b1wiLFwiZmVzdGl2YWxcIixcImNhcm5pdmFsXCIsXCJjb25ncmF0dWxhdGlvbnNcIl0sY2hhcjpcIvCfjoZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHJhaW5ib3c6e2tleXdvcmRzOltcIm5hdHVyZVwiLFwiaGFwcHlcIixcInVuaWNvcm5fZmFjZVwiLFwicGhvdG9cIixcInNreVwiLFwic3ByaW5nXCJdLGNoYXI6XCLwn4yIXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxob3VzZXM6e2tleXdvcmRzOltcImJ1aWxkaW5nc1wiLFwicGhvdG9cIl0sY2hhcjpcIvCfj5hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGV1cm9wZWFuX2Nhc3RsZTp7a2V5d29yZHM6W1wiYnVpbGRpbmdcIixcInJveWFsdHlcIixcImhpc3RvcnlcIl0sY2hhcjpcIvCfj7BcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGphcGFuZXNlX2Nhc3RsZTp7a2V5d29yZHM6W1wicGhvdG9cIixcImJ1aWxkaW5nXCJdLGNoYXI6XCLwn4+vXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxzdGFkaXVtOntrZXl3b3JkczpbXCJwaG90b1wiLFwicGxhY2VcIixcInNwb3J0c1wiLFwiY29uY2VydFwiLFwidmVudWVcIl0sY2hhcjpcIvCfj59cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHN0YXR1ZV9vZl9saWJlcnR5OntrZXl3b3JkczpbXCJhbWVyaWNhblwiLFwibmV3eW9ya1wiXSxjaGFyOlwi8J+XvVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0saG91c2U6e2tleXdvcmRzOltcImJ1aWxkaW5nXCIsXCJob21lXCJdLGNoYXI6XCLwn4+gXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxob3VzZV93aXRoX2dhcmRlbjp7a2V5d29yZHM6W1wiaG9tZVwiLFwicGxhbnRcIixcIm5hdHVyZVwiXSxjaGFyOlwi8J+PoVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sZGVyZWxpY3RfaG91c2U6e2tleXdvcmRzOltcImFiYW5kb25cIixcImV2aWN0XCIsXCJicm9rZW5cIixcImJ1aWxkaW5nXCJdLGNoYXI6XCLwn4+aXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxvZmZpY2U6e2tleXdvcmRzOltcImJ1aWxkaW5nXCIsXCJidXJlYXVcIixcIndvcmtcIl0sY2hhcjpcIvCfj6JcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGRlcGFydG1lbnRfc3RvcmU6e2tleXdvcmRzOltcImJ1aWxkaW5nXCIsXCJzaG9wcGluZ1wiLFwibWFsbFwiXSxjaGFyOlwi8J+PrFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0scG9zdF9vZmZpY2U6e2tleXdvcmRzOltcImJ1aWxkaW5nXCIsXCJlbnZlbG9wZVwiLFwiY29tbXVuaWNhdGlvblwiXSxjaGFyOlwi8J+Po1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sZXVyb3BlYW5fcG9zdF9vZmZpY2U6e2tleXdvcmRzOltcImJ1aWxkaW5nXCIsXCJlbWFpbFwiXSxjaGFyOlwi8J+PpFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0saG9zcGl0YWw6e2tleXdvcmRzOltcImJ1aWxkaW5nXCIsXCJoZWFsdGhcIixcInN1cmdlcnlcIixcImRvY3RvclwiXSxjaGFyOlwi8J+PpVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sYmFuazp7a2V5d29yZHM6W1wiYnVpbGRpbmdcIixcIm1vbmV5XCIsXCJzYWxlc1wiLFwiY2FzaFwiLFwiYnVzaW5lc3NcIixcImVudGVycHJpc2VcIl0sY2hhcjpcIvCfj6ZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGhvdGVsOntrZXl3b3JkczpbXCJidWlsZGluZ1wiLFwiYWNjb21vZGF0aW9uXCIsXCJjaGVja2luXCJdLGNoYXI6XCLwn4+oXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxjb252ZW5pZW5jZV9zdG9yZTp7a2V5d29yZHM6W1wiYnVpbGRpbmdcIixcInNob3BwaW5nXCIsXCJncm9jZXJpZXNcIl0sY2hhcjpcIvCfj6pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHNjaG9vbDp7a2V5d29yZHM6W1wiYnVpbGRpbmdcIixcInN0dWRlbnRcIixcImVkdWNhdGlvblwiLFwibGVhcm5cIixcInRlYWNoXCJdLGNoYXI6XCLwn4+rXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxsb3ZlX2hvdGVsOntrZXl3b3JkczpbXCJsaWtlXCIsXCJhZmZlY3Rpb25cIixcImRhdGluZ1wiXSxjaGFyOlwi8J+PqVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sd2VkZGluZzp7a2V5d29yZHM6W1wibG92ZVwiLFwibGlrZVwiLFwiYWZmZWN0aW9uXCIsXCJjb3VwbGVcIixcIm1hcnJpYWdlXCIsXCJicmlkZVwiLFwiZ3Jvb21cIl0sY2hhcjpcIvCfkpJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGNsYXNzaWNhbF9idWlsZGluZzp7a2V5d29yZHM6W1wiYXJ0XCIsXCJjdWx0dXJlXCIsXCJoaXN0b3J5XCJdLGNoYXI6XCLwn4+bXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxjaHVyY2g6e2tleXdvcmRzOltcImJ1aWxkaW5nXCIsXCJyZWxpZ2lvblwiLFwiY2hyaXN0XCJdLGNoYXI6XCLim6pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LG1vc3F1ZTp7a2V5d29yZHM6W1wiaXNsYW1cIixcIndvcnNoaXBcIixcIm1pbmFyZXRcIl0sY2hhcjpcIvCflYxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHN5bmFnb2d1ZTp7a2V5d29yZHM6W1wianVkYWlzbVwiLFwid29yc2hpcFwiLFwidGVtcGxlXCIsXCJqZXdpc2hcIl0sY2hhcjpcIvCflY1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGthYWJhOntrZXl3b3JkczpbXCJtZWNjYVwiLFwibW9zcXVlXCIsXCJpc2xhbVwiXSxjaGFyOlwi8J+Vi1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sc2hpbnRvX3NocmluZTp7a2V5d29yZHM6W1widGVtcGxlXCIsXCJqYXBhblwiLFwia3lvdG9cIl0sY2hhcjpcIuKbqVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sd2F0Y2g6e2tleXdvcmRzOltcInRpbWVcIixcImFjY2Vzc29yaWVzXCJdLGNoYXI6XCLijJpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0saXBob25lOntrZXl3b3JkczpbXCJ0ZWNobm9sb2d5XCIsXCJhcHBsZVwiLFwiZ2FkZ2V0c1wiLFwiZGlhbFwiXSxjaGFyOlwi8J+TsVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxjYWxsaW5nOntrZXl3b3JkczpbXCJpcGhvbmVcIixcImluY29taW5nXCJdLGNoYXI6XCLwn5OyXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGNvbXB1dGVyOntrZXl3b3JkczpbXCJ0ZWNobm9sb2d5XCIsXCJsYXB0b3BcIixcInNjcmVlblwiLFwiZGlzcGxheVwiLFwibW9uaXRvclwiXSxjaGFyOlwi8J+Su1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxrZXlib2FyZDp7a2V5d29yZHM6W1widGVjaG5vbG9neVwiLFwiY29tcHV0ZXJcIixcInR5cGVcIixcImlucHV0XCIsXCJ0ZXh0XCJdLGNoYXI6XCLijKhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sZGVza3RvcF9jb21wdXRlcjp7a2V5d29yZHM6W1widGVjaG5vbG9neVwiLFwiY29tcHV0aW5nXCIsXCJzY3JlZW5cIl0sY2hhcjpcIvCflqVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0scHJpbnRlcjp7a2V5d29yZHM6W1wicGFwZXJcIixcImlua1wiXSxjaGFyOlwi8J+WqFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxjb21wdXRlcl9tb3VzZTp7a2V5d29yZHM6W1wiY2xpY2tcIl0sY2hhcjpcIvCflrFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sdHJhY2tiYWxsOntrZXl3b3JkczpbXCJ0ZWNobm9sb2d5XCIsXCJ0cmFja3BhZFwiXSxjaGFyOlwi8J+WslwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxqb3lzdGljazp7a2V5d29yZHM6W1wiZ2FtZVwiLFwicGxheVwiXSxjaGFyOlwi8J+VuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxjbGFtcDp7a2V5d29yZHM6W1widG9vbFwiXSxjaGFyOlwi8J+XnFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxtaW5pZGlzYzp7a2V5d29yZHM6W1widGVjaG5vbG9neVwiLFwicmVjb3JkXCIsXCJkYXRhXCIsXCJkaXNrXCIsXCI5MHNcIl0sY2hhcjpcIvCfkr1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sZmxvcHB5X2Rpc2s6e2tleXdvcmRzOltcIm9sZHNjaG9vbFwiLFwidGVjaG5vbG9neVwiLFwic2F2ZVwiLFwiOTBzXCIsXCI4MHNcIl0sY2hhcjpcIvCfkr5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sY2Q6e2tleXdvcmRzOltcInRlY2hub2xvZ3lcIixcImR2ZFwiLFwiZGlza1wiLFwiZGlzY1wiLFwiOTBzXCJdLGNoYXI6XCLwn5K/XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGR2ZDp7a2V5d29yZHM6W1wiY2RcIixcImRpc2tcIixcImRpc2NcIl0sY2hhcjpcIvCfk4BcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sdmhzOntrZXl3b3JkczpbXCJyZWNvcmRcIixcInZpZGVvXCIsXCJvbGRzY2hvb2xcIixcIjkwc1wiLFwiODBzXCJdLGNoYXI6XCLwn5O8XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGNhbWVyYTp7a2V5d29yZHM6W1wiZ2FkZ2V0c1wiLFwicGhvdG9ncmFwaHlcIl0sY2hhcjpcIvCfk7dcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sY2FtZXJhX2ZsYXNoOntrZXl3b3JkczpbXCJwaG90b2dyYXBoeVwiLFwiZ2FkZ2V0c1wiXSxjaGFyOlwi8J+TuFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSx2aWRlb19jYW1lcmE6e2tleXdvcmRzOltcImZpbG1cIixcInJlY29yZFwiXSxjaGFyOlwi8J+TuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxtb3ZpZV9jYW1lcmE6e2tleXdvcmRzOltcImZpbG1cIixcInJlY29yZFwiXSxjaGFyOlwi8J+OpVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxmaWxtX3Byb2plY3Rvcjp7a2V5d29yZHM6W1widmlkZW9cIixcInRhcGVcIixcInJlY29yZFwiLFwibW92aWVcIl0sY2hhcjpcIvCfk71cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sZmlsbV9zdHJpcDp7a2V5d29yZHM6W1wibW92aWVcIl0sY2hhcjpcIvCfjp5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sdGVsZXBob25lX3JlY2VpdmVyOntrZXl3b3JkczpbXCJ0ZWNobm9sb2d5XCIsXCJjb21tdW5pY2F0aW9uXCIsXCJkaWFsXCJdLGNoYXI6XCLwn5OeXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHBob25lOntrZXl3b3JkczpbXCJ0ZWNobm9sb2d5XCIsXCJjb21tdW5pY2F0aW9uXCIsXCJkaWFsXCIsXCJ0ZWxlcGhvbmVcIl0sY2hhcjpcIuKYju+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxwYWdlcjp7a2V5d29yZHM6W1wiYmJjYWxsXCIsXCJvbGRzY2hvb2xcIixcIjkwc1wiXSxjaGFyOlwi8J+Tn1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxmYXg6e2tleXdvcmRzOltcImNvbW11bmljYXRpb25cIixcInRlY2hub2xvZ3lcIl0sY2hhcjpcIvCfk6BcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sdHY6e2tleXdvcmRzOltcInRlY2hub2xvZ3lcIixcInByb2dyYW1cIixcIm9sZHNjaG9vbFwiLFwic2hvd1wiLFwidGVsZXZpc2lvblwiXSxjaGFyOlwi8J+TulwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxyYWRpbzp7a2V5d29yZHM6W1wiY29tbXVuaWNhdGlvblwiLFwibXVzaWNcIixcInBvZGNhc3RcIixcInByb2dyYW1cIl0sY2hhcjpcIvCfk7tcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sc3R1ZGlvX21pY3JvcGhvbmU6e2tleXdvcmRzOltcInNpbmdcIixcInJlY29yZGluZ1wiLFwiYXJ0aXN0XCIsXCJ0YWxrc2hvd1wiXSxjaGFyOlwi8J+OmVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxsZXZlbF9zbGlkZXI6e2tleXdvcmRzOltcInNjYWxlXCJdLGNoYXI6XCLwn46aXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGNvbnRyb2xfa25vYnM6e2tleXdvcmRzOltcImRpYWxcIl0sY2hhcjpcIvCfjptcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sY29tcGFzczp7a2V5d29yZHM6W1wibWFnbmV0aWNcIixcIm5hdmlnYXRpb25cIixcIm9yaWVudGVlcmluZ1wiXSxjaGFyOlwi8J+nrVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxzdG9wd2F0Y2g6e2tleXdvcmRzOltcInRpbWVcIixcImRlYWRsaW5lXCJdLGNoYXI6XCLij7FcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sdGltZXJfY2xvY2s6e2tleXdvcmRzOltcImFsYXJtXCJdLGNoYXI6XCLij7JcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sYWxhcm1fY2xvY2s6e2tleXdvcmRzOltcInRpbWVcIixcIndha2VcIl0sY2hhcjpcIuKPsFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxtYW50ZWxwaWVjZV9jbG9jazp7a2V5d29yZHM6W1widGltZVwiXSxjaGFyOlwi8J+VsFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxob3VyZ2xhc3NfZmxvd2luZ19zYW5kOntrZXl3b3JkczpbXCJvbGRzY2hvb2xcIixcInRpbWVcIixcImNvdW50ZG93blwiXSxjaGFyOlwi4o+zXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGhvdXJnbGFzczp7a2V5d29yZHM6W1widGltZVwiLFwiY2xvY2tcIixcIm9sZHNjaG9vbFwiLFwibGltaXRcIixcImV4YW1cIixcInF1aXpcIixcInRlc3RcIl0sY2hhcjpcIuKMm1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxzYXRlbGxpdGU6e2tleXdvcmRzOltcImNvbW11bmljYXRpb25cIixcImZ1dHVyZVwiLFwicmFkaW9cIixcInNwYWNlXCJdLGNoYXI6XCLwn5OhXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGJhdHRlcnk6e2tleXdvcmRzOltcInBvd2VyXCIsXCJlbmVyZ3lcIixcInN1c3RhaW5cIl0sY2hhcjpcIvCflItcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sZWxlY3RyaWNfcGx1Zzp7a2V5d29yZHM6W1wiY2hhcmdlclwiLFwicG93ZXJcIl0sY2hhcjpcIvCflIxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sYnVsYjp7a2V5d29yZHM6W1wibGlnaHRcIixcImVsZWN0cmljaXR5XCIsXCJpZGVhXCJdLGNoYXI6XCLwn5KhXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGZsYXNobGlnaHQ6e2tleXdvcmRzOltcImRhcmtcIixcImNhbXBpbmdcIixcInNpZ2h0XCIsXCJuaWdodFwiXSxjaGFyOlwi8J+UplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxjYW5kbGU6e2tleXdvcmRzOltcImZpcmVcIixcIndheFwiXSxjaGFyOlwi8J+Vr1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxmaXJlX2V4dGluZ3Vpc2hlcjp7a2V5d29yZHM6W1wicXVlbmNoXCJdLGNoYXI6XCLwn6evXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHdhc3RlYmFza2V0OntrZXl3b3JkczpbXCJiaW5cIixcInRyYXNoXCIsXCJydWJiaXNoXCIsXCJnYXJiYWdlXCIsXCJ0b3NzXCJdLGNoYXI6XCLwn5eRXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LG9pbF9kcnVtOntrZXl3b3JkczpbXCJiYXJyZWxsXCJdLGNoYXI6XCLwn5uiXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LG1vbmV5X3dpdGhfd2luZ3M6e2tleXdvcmRzOltcImRvbGxhclwiLFwiYmlsbHNcIixcInBheW1lbnRcIixcInNhbGVcIl0sY2hhcjpcIvCfkrhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sZG9sbGFyOntrZXl3b3JkczpbXCJtb25leVwiLFwic2FsZXNcIixcImJpbGxcIixcImN1cnJlbmN5XCJdLGNoYXI6XCLwn5K1XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHllbjp7a2V5d29yZHM6W1wibW9uZXlcIixcInNhbGVzXCIsXCJqYXBhbmVzZVwiLFwiZG9sbGFyXCIsXCJjdXJyZW5jeVwiXSxjaGFyOlwi8J+StFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxldXJvOntrZXl3b3JkczpbXCJtb25leVwiLFwic2FsZXNcIixcImRvbGxhclwiLFwiY3VycmVuY3lcIl0sY2hhcjpcIvCfkrZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0scG91bmQ6e2tleXdvcmRzOltcImJyaXRpc2hcIixcInN0ZXJsaW5nXCIsXCJtb25leVwiLFwic2FsZXNcIixcImJpbGxzXCIsXCJ1a1wiLFwiZW5nbGFuZFwiLFwiY3VycmVuY3lcIl0sY2hhcjpcIvCfkrdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sbW9uZXliYWc6e2tleXdvcmRzOltcImRvbGxhclwiLFwicGF5bWVudFwiLFwiY29pbnNcIixcInNhbGVcIl0sY2hhcjpcIvCfkrBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sY3JlZGl0X2NhcmQ6e2tleXdvcmRzOltcIm1vbmV5XCIsXCJzYWxlc1wiLFwiZG9sbGFyXCIsXCJiaWxsXCIsXCJwYXltZW50XCIsXCJzaG9wcGluZ1wiXSxjaGFyOlwi8J+Ss1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxnZW06e2tleXdvcmRzOltcImJsdWVcIixcInJ1YnlcIixcImRpYW1vbmRcIixcImpld2VscnlcIl0sY2hhcjpcIvCfko5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sYmFsYW5jZV9zY2FsZTp7a2V5d29yZHM6W1wibGF3XCIsXCJmYWlybmVzc1wiLFwid2VpZ2h0XCJdLGNoYXI6XCLimpZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sdG9vbGJveDp7a2V5d29yZHM6W1widG9vbHNcIixcImRpeVwiLFwiZml4XCIsXCJtYWludGFpbmVyXCIsXCJtZWNoYW5pY1wiXSxjaGFyOlwi8J+nsFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSx3cmVuY2g6e2tleXdvcmRzOltcInRvb2xzXCIsXCJkaXlcIixcImlrZWFcIixcImZpeFwiLFwibWFpbnRhaW5lclwiXSxjaGFyOlwi8J+Up1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxoYW1tZXI6e2tleXdvcmRzOltcInRvb2xzXCIsXCJidWlsZFwiLFwiY3JlYXRlXCJdLGNoYXI6XCLwn5SoXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGhhbW1lcl9hbmRfcGljazp7a2V5d29yZHM6W1widG9vbHNcIixcImJ1aWxkXCIsXCJjcmVhdGVcIl0sY2hhcjpcIuKaklwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxoYW1tZXJfYW5kX3dyZW5jaDp7a2V5d29yZHM6W1widG9vbHNcIixcImJ1aWxkXCIsXCJjcmVhdGVcIl0sY2hhcjpcIvCfm6BcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0scGljazp7a2V5d29yZHM6W1widG9vbHNcIixcImRpZ1wiXSxjaGFyOlwi4puPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LG51dF9hbmRfYm9sdDp7a2V5d29yZHM6W1wiaGFuZHlcIixcInRvb2xzXCIsXCJmaXhcIl0sY2hhcjpcIvCflKlcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sZ2Vhcjp7a2V5d29yZHM6W1wiY29nXCJdLGNoYXI6XCLimplcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sYnJpY2s6e2tleXdvcmRzOltcImJyaWNrc1wiXSxjaGFyOlwi8J+nsVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxjaGFpbnM6e2tleXdvcmRzOltcImxvY2tcIixcImFycmVzdFwiXSxjaGFyOlwi4puTXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LG1hZ25ldDp7a2V5d29yZHM6W1wiYXR0cmFjdGlvblwiLFwibWFnbmV0aWNcIl0sY2hhcjpcIvCfp7JcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sZ3VuOntrZXl3b3JkczpbXCJ2aW9sZW5jZVwiLFwid2VhcG9uXCIsXCJwaXN0b2xcIixcInJldm9sdmVyXCJdLGNoYXI6XCLwn5SrXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGJvbWI6e2tleXdvcmRzOltcImJvb21cIixcImV4cGxvZGVcIixcImV4cGxvc2lvblwiLFwidGVycm9yaXNtXCJdLGNoYXI6XCLwn5KjXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGZpcmVjcmFja2VyOntrZXl3b3JkczpbXCJkeW5hbWl0ZVwiLFwiYm9vbVwiLFwiZXhwbG9kZVwiLFwiZXhwbG9zaW9uXCIsXCJleHBsb3NpdmVcIl0sY2hhcjpcIvCfp6hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0saG9jaG86e2tleXdvcmRzOltcImtuaWZlXCIsXCJibGFkZVwiLFwiY3V0bGVyeVwiLFwia2l0Y2hlblwiLFwid2VhcG9uXCJdLGNoYXI6XCLwn5SqXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGRhZ2dlcjp7a2V5d29yZHM6W1wid2VhcG9uXCJdLGNoYXI6XCLwn5ehXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGNyb3NzZWRfc3dvcmRzOntrZXl3b3JkczpbXCJ3ZWFwb25cIl0sY2hhcjpcIuKalFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxzaGllbGQ6e2tleXdvcmRzOltcInByb3RlY3Rpb25cIixcInNlY3VyaXR5XCJdLGNoYXI6XCLwn5uhXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHNtb2tpbmc6e2tleXdvcmRzOltcImtpbGxzXCIsXCJ0b2JhY2NvXCIsXCJjaWdhcmV0dGVcIixcImpvaW50XCIsXCJzbW9rZVwiXSxjaGFyOlwi8J+arFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxza3VsbF9hbmRfY3Jvc3Nib25lczp7a2V5d29yZHM6W1wicG9pc29uXCIsXCJkYW5nZXJcIixcImRlYWRseVwiLFwic2NhcnlcIixcImRlYXRoXCIsXCJwaXJhdGVcIixcImV2aWxcIl0sY2hhcjpcIuKYoFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxjb2ZmaW46e2tleXdvcmRzOltcInZhbXBpcmVcIixcImRlYWRcIixcImRpZVwiLFwiZGVhdGhcIixcInJpcFwiLFwiZ3JhdmV5YXJkXCIsXCJjZW1ldGVyeVwiLFwiY2Fza2V0XCIsXCJmdW5lcmFsXCIsXCJib3hcIl0sY2hhcjpcIuKasFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxmdW5lcmFsX3Vybjp7a2V5d29yZHM6W1wiZGVhZFwiLFwiZGllXCIsXCJkZWF0aFwiLFwicmlwXCIsXCJhc2hlc1wiXSxjaGFyOlwi4pqxXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGFtcGhvcmE6e2tleXdvcmRzOltcInZhc2VcIixcImphclwiXSxjaGFyOlwi8J+PulwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxjcnlzdGFsX2JhbGw6e2tleXdvcmRzOltcImRpc2NvXCIsXCJwYXJ0eVwiLFwibWFnaWNcIixcImNpcmN1c1wiLFwiZm9ydHVuZV90ZWxsZXJcIl0sY2hhcjpcIvCflK5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0scHJheWVyX2JlYWRzOntrZXl3b3JkczpbXCJkaGlrclwiLFwicmVsaWdpb3VzXCJdLGNoYXI6XCLwn5O/XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LG5hemFyX2FtdWxldDp7a2V5d29yZHM6W1wiYmVhZFwiLFwiY2hhcm1cIl0sY2hhcjpcIvCfp79cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sYmFyYmVyOntrZXl3b3JkczpbXCJoYWlyXCIsXCJzYWxvblwiLFwic3R5bGVcIl0sY2hhcjpcIvCfkohcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sYWxlbWJpYzp7a2V5d29yZHM6W1wiZGlzdGlsbGluZ1wiLFwic2NpZW5jZVwiLFwiZXhwZXJpbWVudFwiLFwiY2hlbWlzdHJ5XCJdLGNoYXI6XCLimpdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sdGVsZXNjb3BlOntrZXl3b3JkczpbXCJzdGFyc1wiLFwic3BhY2VcIixcInpvb21cIixcInNjaWVuY2VcIixcImFzdHJvbm9teVwiXSxjaGFyOlwi8J+UrVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxtaWNyb3Njb3BlOntrZXl3b3JkczpbXCJsYWJvcmF0b3J5XCIsXCJleHBlcmltZW50XCIsXCJ6b29taW5cIixcInNjaWVuY2VcIixcInN0dWR5XCJdLGNoYXI6XCLwn5SsXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGhvbGU6e2tleXdvcmRzOltcImVtYmFycmFzc2luZ1wiXSxjaGFyOlwi8J+Vs1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxwaWxsOntrZXl3b3JkczpbXCJoZWFsdGhcIixcIm1lZGljaW5lXCIsXCJkb2N0b3JcIixcInBoYXJtYWN5XCIsXCJkcnVnXCJdLGNoYXI6XCLwn5KKXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHN5cmluZ2U6e2tleXdvcmRzOltcImhlYWx0aFwiLFwiaG9zcGl0YWxcIixcImRydWdzXCIsXCJibG9vZFwiLFwibWVkaWNpbmVcIixcIm5lZWRsZVwiLFwiZG9jdG9yXCIsXCJudXJzZVwiXSxjaGFyOlwi8J+SiVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxkbmE6e2tleXdvcmRzOltcImJpb2xvZ2lzdFwiLFwiZ2VuZXRpY3NcIixcImxpZmVcIl0sY2hhcjpcIvCfp6xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sbWljcm9iZTp7a2V5d29yZHM6W1wiYW1vZWJhXCIsXCJiYWN0ZXJpYVwiLFwiZ2VybXNcIl0sY2hhcjpcIvCfpqBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0scGV0cmlfZGlzaDp7a2V5d29yZHM6W1wiYmFjdGVyaWFcIixcImJpb2xvZ3lcIixcImN1bHR1cmVcIixcImxhYlwiXSxjaGFyOlwi8J+nq1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSx0ZXN0X3R1YmU6e2tleXdvcmRzOltcImNoZW1pc3RyeVwiLFwiZXhwZXJpbWVudFwiLFwibGFiXCIsXCJzY2llbmNlXCJdLGNoYXI6XCLwn6eqXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHRoZXJtb21ldGVyOntrZXl3b3JkczpbXCJ3ZWF0aGVyXCIsXCJ0ZW1wZXJhdHVyZVwiLFwiaG90XCIsXCJjb2xkXCJdLGNoYXI6XCLwn4yhXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGJyb29tOntrZXl3b3JkczpbXCJjbGVhbmluZ1wiLFwic3dlZXBpbmdcIixcIndpdGNoXCJdLGNoYXI6XCLwn6e5XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGJhc2tldDp7a2V5d29yZHM6W1wibGF1bmRyeVwiXSxjaGFyOlwi8J+nulwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSx0b2lsZXRfcGFwZXI6e2tleXdvcmRzOltcInJvbGxcIl0sY2hhcjpcIvCfp7tcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sbGFiZWw6e2tleXdvcmRzOltcInNhbGVcIixcInRhZ1wiXSxjaGFyOlwi8J+Pt1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxib29rbWFyazp7a2V5d29yZHM6W1wiZmF2b3JpdGVcIixcImxhYmVsXCIsXCJzYXZlXCJdLGNoYXI6XCLwn5SWXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHRvaWxldDp7a2V5d29yZHM6W1wicmVzdHJvb21cIixcIndjXCIsXCJ3YXNocm9vbVwiLFwiYmF0aHJvb21cIixcInBvdHR5XCJdLGNoYXI6XCLwn5q9XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHNob3dlcjp7a2V5d29yZHM6W1wiY2xlYW5cIixcIndhdGVyXCIsXCJiYXRocm9vbVwiXSxjaGFyOlwi8J+av1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxiYXRodHViOntrZXl3b3JkczpbXCJjbGVhblwiLFwic2hvd2VyXCIsXCJiYXRocm9vbVwiXSxjaGFyOlwi8J+bgVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxzb2FwOntrZXl3b3JkczpbXCJiYXJcIixcImJhdGhpbmdcIixcImNsZWFuaW5nXCIsXCJsYXRoZXJcIl0sY2hhcjpcIvCfp7xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sc3BvbmdlOntrZXl3b3JkczpbXCJhYnNvcmJpbmdcIixcImNsZWFuaW5nXCIsXCJwb3JvdXNcIl0sY2hhcjpcIvCfp71cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sbG90aW9uX2JvdHRsZTp7a2V5d29yZHM6W1wibW9pc3R1cml6ZXJcIixcInN1bnNjcmVlblwiXSxjaGFyOlwi8J+ntFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxrZXk6e2tleXdvcmRzOltcImxvY2tcIixcImRvb3JcIixcInBhc3N3b3JkXCJdLGNoYXI6XCLwn5SRXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LG9sZF9rZXk6e2tleXdvcmRzOltcImxvY2tcIixcImRvb3JcIixcInBhc3N3b3JkXCJdLGNoYXI6XCLwn5edXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGNvdWNoX2FuZF9sYW1wOntrZXl3b3JkczpbXCJyZWFkXCIsXCJjaGlsbFwiXSxjaGFyOlwi8J+bi1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxzbGVlcGluZ19iZWQ6e2tleXdvcmRzOltcImJlZFwiLFwicmVzdFwiXSxjaGFyOlwi8J+bjFwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGJlZDp7a2V5d29yZHM6W1wic2xlZXBcIixcInJlc3RcIl0sY2hhcjpcIvCfm49cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sZG9vcjp7a2V5d29yZHM6W1wiaG91c2VcIixcImVudHJ5XCIsXCJleGl0XCJdLGNoYXI6XCLwn5qqXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGJlbGxob3BfYmVsbDp7a2V5d29yZHM6W1wic2VydmljZVwiXSxjaGFyOlwi8J+bjlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSx0ZWRkeV9iZWFyOntrZXl3b3JkczpbXCJwbHVzaFwiLFwic3R1ZmZlZFwiXSxjaGFyOlwi8J+nuFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxmcmFtZWRfcGljdHVyZTp7a2V5d29yZHM6W1wicGhvdG9ncmFwaHlcIl0sY2hhcjpcIvCflrxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sd29ybGRfbWFwOntrZXl3b3JkczpbXCJsb2NhdGlvblwiLFwiZGlyZWN0aW9uXCJdLGNoYXI6XCLwn5e6XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHBhcmFzb2xfb25fZ3JvdW5kOntrZXl3b3JkczpbXCJ3ZWF0aGVyXCIsXCJzdW1tZXJcIl0sY2hhcjpcIuKbsVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxtb3lhaTp7a2V5d29yZHM6W1wicm9ja1wiLFwiZWFzdGVyIGlzbGFuZFwiLFwibW9haVwiXSxjaGFyOlwi8J+Xv1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxzaG9wcGluZzp7a2V5d29yZHM6W1wibWFsbFwiLFwiYnV5XCIsXCJwdXJjaGFzZVwiXSxjaGFyOlwi8J+bjVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxzaG9wcGluZ19jYXJ0OntrZXl3b3JkczpbXCJ0cm9sbGV5XCJdLGNoYXI6XCLwn5uSXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGJhbGxvb246e2tleXdvcmRzOltcInBhcnR5XCIsXCJjZWxlYnJhdGlvblwiLFwiYmlydGhkYXlcIixcImNpcmN1c1wiXSxjaGFyOlwi8J+OiFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxmbGFnczp7a2V5d29yZHM6W1wiZmlzaFwiLFwiamFwYW5lc2VcIixcImtvaW5vYm9yaVwiLFwiY2FycFwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn46PXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHJpYmJvbjp7a2V5d29yZHM6W1wiZGVjb3JhdGlvblwiLFwicGlua1wiLFwiZ2lybFwiLFwiYm93dGllXCJdLGNoYXI6XCLwn46AXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGdpZnQ6e2tleXdvcmRzOltcInByZXNlbnRcIixcImJpcnRoZGF5XCIsXCJjaHJpc3RtYXNcIixcInhtYXNcIl0sY2hhcjpcIvCfjoFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sY29uZmV0dGlfYmFsbDp7a2V5d29yZHM6W1wiZmVzdGl2YWxcIixcInBhcnR5XCIsXCJiaXJ0aGRheVwiLFwiY2lyY3VzXCJdLGNoYXI6XCLwn46KXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHRhZGE6e2tleXdvcmRzOltcInBhcnR5XCIsXCJjb25ncmF0dWxhdGlvbnNcIixcImJpcnRoZGF5XCIsXCJtYWdpY1wiLFwiY2lyY3VzXCIsXCJjZWxlYnJhdGlvblwiXSxjaGFyOlwi8J+OiVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxkb2xsczp7a2V5d29yZHM6W1wiamFwYW5lc2VcIixcInRveVwiLFwia2ltb25vXCJdLGNoYXI6XCLwn46OXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHdpbmRfY2hpbWU6e2tleXdvcmRzOltcIm5hdHVyZVwiLFwiZGluZ1wiLFwic3ByaW5nXCIsXCJiZWxsXCJdLGNoYXI6XCLwn46QXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGNyb3NzZWRfZmxhZ3M6e2tleXdvcmRzOltcImphcGFuZXNlXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJvcmRlclwiXSxjaGFyOlwi8J+OjFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxpemFrYXlhX2xhbnRlcm46e2tleXdvcmRzOltcImxpZ2h0XCIsXCJwYXBlclwiLFwiaGFsbG93ZWVuXCIsXCJzcG9va3lcIl0sY2hhcjpcIvCfj65cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0scmVkX2VudmVsb3BlOntrZXl3b3JkczpbXCJnaWZ0XCJdLGNoYXI6XCLwn6enXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGVtYWlsOntrZXl3b3JkczpbXCJsZXR0ZXJcIixcInBvc3RhbFwiLFwiaW5ib3hcIixcImNvbW11bmljYXRpb25cIl0sY2hhcjpcIuKcie+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxlbnZlbG9wZV93aXRoX2Fycm93OntrZXl3b3JkczpbXCJlbWFpbFwiLFwiY29tbXVuaWNhdGlvblwiXSxjaGFyOlwi8J+TqVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxpbmNvbWluZ19lbnZlbG9wZTp7a2V5d29yZHM6W1wiZW1haWxcIixcImluYm94XCJdLGNoYXI6XCLwn5OoXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LFwiZS1tYWlsXCI6e2tleXdvcmRzOltcImNvbW11bmljYXRpb25cIixcImluYm94XCJdLGNoYXI6XCLwn5OnXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGxvdmVfbGV0dGVyOntrZXl3b3JkczpbXCJlbWFpbFwiLFwibGlrZVwiLFwiYWZmZWN0aW9uXCIsXCJlbnZlbG9wZVwiLFwidmFsZW50aW5lc1wiXSxjaGFyOlwi8J+SjFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxwb3N0Ym94OntrZXl3b3JkczpbXCJlbWFpbFwiLFwibGV0dGVyXCIsXCJlbnZlbG9wZVwiXSxjaGFyOlwi8J+TrlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxtYWlsYm94X2Nsb3NlZDp7a2V5d29yZHM6W1wiZW1haWxcIixcImNvbW11bmljYXRpb25cIixcImluYm94XCJdLGNoYXI6XCLwn5OqXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LG1haWxib3g6e2tleXdvcmRzOltcImVtYWlsXCIsXCJpbmJveFwiLFwiY29tbXVuaWNhdGlvblwiXSxjaGFyOlwi8J+Tq1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxtYWlsYm94X3dpdGhfbWFpbDp7a2V5d29yZHM6W1wiZW1haWxcIixcImluYm94XCIsXCJjb21tdW5pY2F0aW9uXCJdLGNoYXI6XCLwn5OsXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LG1haWxib3hfd2l0aF9ub19tYWlsOntrZXl3b3JkczpbXCJlbWFpbFwiLFwiaW5ib3hcIl0sY2hhcjpcIvCfk61cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0scGFja2FnZTp7a2V5d29yZHM6W1wibWFpbFwiLFwiZ2lmdFwiLFwiY2FyZGJvYXJkXCIsXCJib3hcIixcIm1vdmluZ1wiXSxjaGFyOlwi8J+TplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxwb3N0YWxfaG9ybjp7a2V5d29yZHM6W1wiaW5zdHJ1bWVudFwiLFwibXVzaWNcIl0sY2hhcjpcIvCfk69cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0saW5ib3hfdHJheTp7a2V5d29yZHM6W1wiZW1haWxcIixcImRvY3VtZW50c1wiXSxjaGFyOlwi8J+TpVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxvdXRib3hfdHJheTp7a2V5d29yZHM6W1wiaW5ib3hcIixcImVtYWlsXCJdLGNoYXI6XCLwn5OkXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHNjcm9sbDp7a2V5d29yZHM6W1wiZG9jdW1lbnRzXCIsXCJhbmNpZW50XCIsXCJoaXN0b3J5XCIsXCJwYXBlclwiXSxjaGFyOlwi8J+TnFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxwYWdlX3dpdGhfY3VybDp7a2V5d29yZHM6W1wiZG9jdW1lbnRzXCIsXCJvZmZpY2VcIixcInBhcGVyXCJdLGNoYXI6XCLwn5ODXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGJvb2ttYXJrX3RhYnM6e2tleXdvcmRzOltcImZhdm9yaXRlXCIsXCJzYXZlXCIsXCJvcmRlclwiLFwidGlkeVwiXSxjaGFyOlwi8J+TkVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxyZWNlaXB0OntrZXl3b3JkczpbXCJhY2NvdW50aW5nXCIsXCJleHBlbnNlc1wiXSxjaGFyOlwi8J+nvlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxiYXJfY2hhcnQ6e2tleXdvcmRzOltcImdyYXBoXCIsXCJwcmVzZW50YXRpb25cIixcInN0YXRzXCJdLGNoYXI6XCLwn5OKXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGNoYXJ0X3dpdGhfdXB3YXJkc190cmVuZDp7a2V5d29yZHM6W1wiZ3JhcGhcIixcInByZXNlbnRhdGlvblwiLFwic3RhdHNcIixcInJlY292ZXJ5XCIsXCJidXNpbmVzc1wiLFwiZWNvbm9taWNzXCIsXCJtb25leVwiLFwic2FsZXNcIixcImdvb2RcIixcInN1Y2Nlc3NcIl0sY2hhcjpcIvCfk4hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sY2hhcnRfd2l0aF9kb3dud2FyZHNfdHJlbmQ6e2tleXdvcmRzOltcImdyYXBoXCIsXCJwcmVzZW50YXRpb25cIixcInN0YXRzXCIsXCJyZWNlc3Npb25cIixcImJ1c2luZXNzXCIsXCJlY29ub21pY3NcIixcIm1vbmV5XCIsXCJzYWxlc1wiLFwiYmFkXCIsXCJmYWlsdXJlXCJdLGNoYXI6XCLwn5OJXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHBhZ2VfZmFjaW5nX3VwOntrZXl3b3JkczpbXCJkb2N1bWVudHNcIixcIm9mZmljZVwiLFwicGFwZXJcIixcImluZm9ybWF0aW9uXCJdLGNoYXI6XCLwn5OEXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGRhdGU6e2tleXdvcmRzOltcImNhbGVuZGFyXCIsXCJzY2hlZHVsZVwiXSxjaGFyOlwi8J+ThVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxjYWxlbmRhcjp7a2V5d29yZHM6W1wic2NoZWR1bGVcIixcImRhdGVcIixcInBsYW5uaW5nXCJdLGNoYXI6XCLwn5OGXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHNwaXJhbF9jYWxlbmRhcjp7a2V5d29yZHM6W1wiZGF0ZVwiLFwic2NoZWR1bGVcIixcInBsYW5uaW5nXCJdLGNoYXI6XCLwn5eTXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGNhcmRfaW5kZXg6e2tleXdvcmRzOltcImJ1c2luZXNzXCIsXCJzdGF0aW9uZXJ5XCJdLGNoYXI6XCLwn5OHXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGNhcmRfZmlsZV9ib3g6e2tleXdvcmRzOltcImJ1c2luZXNzXCIsXCJzdGF0aW9uZXJ5XCJdLGNoYXI6XCLwn5eDXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGJhbGxvdF9ib3g6e2tleXdvcmRzOltcImVsZWN0aW9uXCIsXCJ2b3RlXCJdLGNoYXI6XCLwn5ezXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGZpbGVfY2FiaW5ldDp7a2V5d29yZHM6W1wiZmlsaW5nXCIsXCJvcmdhbml6aW5nXCJdLGNoYXI6XCLwn5eEXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGNsaXBib2FyZDp7a2V5d29yZHM6W1wic3RhdGlvbmVyeVwiLFwiZG9jdW1lbnRzXCJdLGNoYXI6XCLwn5OLXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHNwaXJhbF9ub3RlcGFkOntrZXl3b3JkczpbXCJtZW1vXCIsXCJzdGF0aW9uZXJ5XCJdLGNoYXI6XCLwn5eSXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGZpbGVfZm9sZGVyOntrZXl3b3JkczpbXCJkb2N1bWVudHNcIixcImJ1c2luZXNzXCIsXCJvZmZpY2VcIl0sY2hhcjpcIvCfk4FcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sb3Blbl9maWxlX2ZvbGRlcjp7a2V5d29yZHM6W1wiZG9jdW1lbnRzXCIsXCJsb2FkXCJdLGNoYXI6XCLwn5OCXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGNhcmRfaW5kZXhfZGl2aWRlcnM6e2tleXdvcmRzOltcIm9yZ2FuaXppbmdcIixcImJ1c2luZXNzXCIsXCJzdGF0aW9uZXJ5XCJdLGNoYXI6XCLwn5eCXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LG5ld3NwYXBlcl9yb2xsOntrZXl3b3JkczpbXCJwcmVzc1wiLFwiaGVhZGxpbmVcIl0sY2hhcjpcIvCfl55cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sbmV3c3BhcGVyOntrZXl3b3JkczpbXCJwcmVzc1wiLFwiaGVhZGxpbmVcIl0sY2hhcjpcIvCfk7BcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sbm90ZWJvb2s6e2tleXdvcmRzOltcInN0YXRpb25lcnlcIixcInJlY29yZFwiLFwibm90ZXNcIixcInBhcGVyXCIsXCJzdHVkeVwiXSxjaGFyOlwi8J+Tk1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxjbG9zZWRfYm9vazp7a2V5d29yZHM6W1wicmVhZFwiLFwibGlicmFyeVwiLFwia25vd2xlZGdlXCIsXCJ0ZXh0Ym9va1wiLFwibGVhcm5cIl0sY2hhcjpcIvCfk5VcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sZ3JlZW5fYm9vazp7a2V5d29yZHM6W1wicmVhZFwiLFwibGlicmFyeVwiLFwia25vd2xlZGdlXCIsXCJzdHVkeVwiXSxjaGFyOlwi8J+Tl1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxibHVlX2Jvb2s6e2tleXdvcmRzOltcInJlYWRcIixcImxpYnJhcnlcIixcImtub3dsZWRnZVwiLFwibGVhcm5cIixcInN0dWR5XCJdLGNoYXI6XCLwn5OYXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LG9yYW5nZV9ib29rOntrZXl3b3JkczpbXCJyZWFkXCIsXCJsaWJyYXJ5XCIsXCJrbm93bGVkZ2VcIixcInRleHRib29rXCIsXCJzdHVkeVwiXSxjaGFyOlwi8J+TmVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxub3RlYm9va193aXRoX2RlY29yYXRpdmVfY292ZXI6e2tleXdvcmRzOltcImNsYXNzcm9vbVwiLFwibm90ZXNcIixcInJlY29yZFwiLFwicGFwZXJcIixcInN0dWR5XCJdLGNoYXI6XCLwn5OUXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGxlZGdlcjp7a2V5d29yZHM6W1wibm90ZXNcIixcInBhcGVyXCJdLGNoYXI6XCLwn5OSXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGJvb2tzOntrZXl3b3JkczpbXCJsaXRlcmF0dXJlXCIsXCJsaWJyYXJ5XCIsXCJzdHVkeVwiXSxjaGFyOlwi8J+TmlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxvcGVuX2Jvb2s6e2tleXdvcmRzOltcImJvb2tcIixcInJlYWRcIixcImxpYnJhcnlcIixcImtub3dsZWRnZVwiLFwibGl0ZXJhdHVyZVwiLFwibGVhcm5cIixcInN0dWR5XCJdLGNoYXI6XCLwn5OWXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHNhZmV0eV9waW46e2tleXdvcmRzOltcImRpYXBlclwiXSxjaGFyOlwi8J+nt1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxsaW5rOntrZXl3b3JkczpbXCJyaW5nc1wiLFwidXJsXCJdLGNoYXI6XCLwn5SXXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHBhcGVyY2xpcDp7a2V5d29yZHM6W1wiZG9jdW1lbnRzXCIsXCJzdGF0aW9uZXJ5XCJdLGNoYXI6XCLwn5OOXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHBhcGVyY2xpcHM6e2tleXdvcmRzOltcImRvY3VtZW50c1wiLFwic3RhdGlvbmVyeVwiXSxjaGFyOlwi8J+Wh1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxzY2lzc29yczp7a2V5d29yZHM6W1wic3RhdGlvbmVyeVwiLFwiY3V0XCJdLGNoYXI6XCLinILvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sdHJpYW5ndWxhcl9ydWxlcjp7a2V5d29yZHM6W1wic3RhdGlvbmVyeVwiLFwibWF0aFwiLFwiYXJjaGl0ZWN0XCIsXCJza2V0Y2hcIl0sY2hhcjpcIvCfk5BcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sc3RyYWlnaHRfcnVsZXI6e2tleXdvcmRzOltcInN0YXRpb25lcnlcIixcImNhbGN1bGF0ZVwiLFwibGVuZ3RoXCIsXCJtYXRoXCIsXCJzY2hvb2xcIixcImRyYXdpbmdcIixcImFyY2hpdGVjdFwiLFwic2tldGNoXCJdLGNoYXI6XCLwn5OPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGFiYWN1czp7a2V5d29yZHM6W1wiY2FsY3VsYXRpb25cIl0sY2hhcjpcIvCfp65cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0scHVzaHBpbjp7a2V5d29yZHM6W1wic3RhdGlvbmVyeVwiLFwibWFya1wiLFwiaGVyZVwiXSxjaGFyOlwi8J+TjFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxyb3VuZF9wdXNocGluOntrZXl3b3JkczpbXCJzdGF0aW9uZXJ5XCIsXCJsb2NhdGlvblwiLFwibWFwXCIsXCJoZXJlXCJdLGNoYXI6XCLwn5ONXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHRyaWFuZ3VsYXJfZmxhZ19vbl9wb3N0OntrZXl3b3JkczpbXCJtYXJrXCIsXCJtaWxlc3RvbmVcIixcInBsYWNlXCJdLGNoYXI6XCLwn5qpXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHdoaXRlX2ZsYWc6e2tleXdvcmRzOltcImxvc2luZ1wiLFwibG9zZXJcIixcImxvc3RcIixcInN1cnJlbmRlclwiLFwiZ2l2ZSB1cFwiLFwiZmFpbFwiXSxjaGFyOlwi8J+Ps1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxibGFja19mbGFnOntrZXl3b3JkczpbXCJwaXJhdGVcIl0sY2hhcjpcIvCfj7RcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0scmFpbmJvd19mbGFnOntrZXl3b3JkczpbXCJmbGFnXCIsXCJyYWluYm93XCIsXCJwcmlkZVwiLFwiZ2F5XCIsXCJsZ2J0XCIsXCJnbGJ0XCIsXCJxdWVlclwiLFwiaG9tb3NleHVhbFwiLFwibGVzYmlhblwiLFwiYmlzZXh1YWxcIixcInRyYW5zZ2VuZGVyXCJdLGNoYXI6XCLwn4+z77iP4oCN8J+MiFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxjbG9zZWRfbG9ja193aXRoX2tleTp7a2V5d29yZHM6W1wic2VjdXJpdHlcIixcInByaXZhY3lcIl0sY2hhcjpcIvCflJBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sbG9jazp7a2V5d29yZHM6W1wic2VjdXJpdHlcIixcInBhc3N3b3JkXCIsXCJwYWRsb2NrXCJdLGNoYXI6XCLwn5SSXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHVubG9jazp7a2V5d29yZHM6W1wicHJpdmFjeVwiLFwic2VjdXJpdHlcIl0sY2hhcjpcIvCflJNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sbG9ja193aXRoX2lua19wZW46e2tleXdvcmRzOltcInNlY3VyaXR5XCIsXCJzZWNyZXRcIl0sY2hhcjpcIvCflI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0scGVuOntrZXl3b3JkczpbXCJzdGF0aW9uZXJ5XCIsXCJ3cml0aW5nXCIsXCJ3cml0ZVwiXSxjaGFyOlwi8J+WilwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxmb3VudGFpbl9wZW46e2tleXdvcmRzOltcInN0YXRpb25lcnlcIixcIndyaXRpbmdcIixcIndyaXRlXCJdLGNoYXI6XCLwn5aLXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGJsYWNrX25pYjp7a2V5d29yZHM6W1wicGVuXCIsXCJzdGF0aW9uZXJ5XCIsXCJ3cml0aW5nXCIsXCJ3cml0ZVwiXSxjaGFyOlwi4pyS77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LG1lbW86e2tleXdvcmRzOltcIndyaXRlXCIsXCJkb2N1bWVudHNcIixcInN0YXRpb25lcnlcIixcInBlbmNpbFwiLFwicGFwZXJcIixcIndyaXRpbmdcIixcImxlZ2FsXCIsXCJleGFtXCIsXCJxdWl6XCIsXCJ0ZXN0XCIsXCJzdHVkeVwiLFwiY29tcG9zZVwiXSxjaGFyOlwi8J+TnVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxwZW5jaWwyOntrZXl3b3JkczpbXCJzdGF0aW9uZXJ5XCIsXCJ3cml0ZVwiLFwicGFwZXJcIixcIndyaXRpbmdcIixcInNjaG9vbFwiLFwic3R1ZHlcIl0sY2hhcjpcIuKcj++4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxjcmF5b246e2tleXdvcmRzOltcImRyYXdpbmdcIixcImNyZWF0aXZpdHlcIl0sY2hhcjpcIvCflo1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0scGFpbnRicnVzaDp7a2V5d29yZHM6W1wiZHJhd2luZ1wiLFwiY3JlYXRpdml0eVwiLFwiYXJ0XCJdLGNoYXI6XCLwn5aMXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LG1hZzp7a2V5d29yZHM6W1wic2VhcmNoXCIsXCJ6b29tXCIsXCJmaW5kXCIsXCJkZXRlY3RpdmVcIl0sY2hhcjpcIvCflI1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sbWFnX3JpZ2h0OntrZXl3b3JkczpbXCJzZWFyY2hcIixcInpvb21cIixcImZpbmRcIixcImRldGVjdGl2ZVwiXSxjaGFyOlwi8J+UjlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxoZWFydDp7a2V5d29yZHM6W1wibG92ZVwiLFwibGlrZVwiLFwidmFsZW50aW5lc1wiXSxjaGFyOlwi4p2k77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LG9yYW5nZV9oZWFydDp7a2V5d29yZHM6W1wibG92ZVwiLFwibGlrZVwiLFwiYWZmZWN0aW9uXCIsXCJ2YWxlbnRpbmVzXCJdLGNoYXI6XCLwn6ehXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHllbGxvd19oZWFydDp7a2V5d29yZHM6W1wibG92ZVwiLFwibGlrZVwiLFwiYWZmZWN0aW9uXCIsXCJ2YWxlbnRpbmVzXCJdLGNoYXI6XCLwn5KbXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGdyZWVuX2hlYXJ0OntrZXl3b3JkczpbXCJsb3ZlXCIsXCJsaWtlXCIsXCJhZmZlY3Rpb25cIixcInZhbGVudGluZXNcIl0sY2hhcjpcIvCfkppcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYmx1ZV9oZWFydDp7a2V5d29yZHM6W1wibG92ZVwiLFwibGlrZVwiLFwiYWZmZWN0aW9uXCIsXCJ2YWxlbnRpbmVzXCJdLGNoYXI6XCLwn5KZXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHB1cnBsZV9oZWFydDp7a2V5d29yZHM6W1wibG92ZVwiLFwibGlrZVwiLFwiYWZmZWN0aW9uXCIsXCJ2YWxlbnRpbmVzXCJdLGNoYXI6XCLwn5KcXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGJsYWNrX2hlYXJ0OntrZXl3b3JkczpbXCJldmlsXCJdLGNoYXI6XCLwn5akXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGJyb2tlbl9oZWFydDp7a2V5d29yZHM6W1wic2FkXCIsXCJzb3JyeVwiLFwiYnJlYWtcIixcImhlYXJ0XCIsXCJoZWFydGJyZWFrXCJdLGNoYXI6XCLwn5KUXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGhlYXZ5X2hlYXJ0X2V4Y2xhbWF0aW9uOntrZXl3b3JkczpbXCJkZWNvcmF0aW9uXCIsXCJsb3ZlXCJdLGNoYXI6XCLinaNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sdHdvX2hlYXJ0czp7a2V5d29yZHM6W1wibG92ZVwiLFwibGlrZVwiLFwiYWZmZWN0aW9uXCIsXCJ2YWxlbnRpbmVzXCIsXCJoZWFydFwiXSxjaGFyOlwi8J+SlVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxyZXZvbHZpbmdfaGVhcnRzOntrZXl3b3JkczpbXCJsb3ZlXCIsXCJsaWtlXCIsXCJhZmZlY3Rpb25cIixcInZhbGVudGluZXNcIl0sY2hhcjpcIvCfkp5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0saGVhcnRiZWF0OntrZXl3b3JkczpbXCJsb3ZlXCIsXCJsaWtlXCIsXCJhZmZlY3Rpb25cIixcInZhbGVudGluZXNcIixcInBpbmtcIixcImhlYXJ0XCJdLGNoYXI6XCLwn5KTXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGhlYXJ0cHVsc2U6e2tleXdvcmRzOltcImxpa2VcIixcImxvdmVcIixcImFmZmVjdGlvblwiLFwidmFsZW50aW5lc1wiLFwicGlua1wiXSxjaGFyOlwi8J+Sl1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxzcGFya2xpbmdfaGVhcnQ6e2tleXdvcmRzOltcImxvdmVcIixcImxpa2VcIixcImFmZmVjdGlvblwiLFwidmFsZW50aW5lc1wiXSxjaGFyOlwi8J+SllwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjdXBpZDp7a2V5d29yZHM6W1wibG92ZVwiLFwibGlrZVwiLFwiaGVhcnRcIixcImFmZmVjdGlvblwiLFwidmFsZW50aW5lc1wiXSxjaGFyOlwi8J+SmFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxnaWZ0X2hlYXJ0OntrZXl3b3JkczpbXCJsb3ZlXCIsXCJ2YWxlbnRpbmVzXCJdLGNoYXI6XCLwn5KdXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGhlYXJ0X2RlY29yYXRpb246e2tleXdvcmRzOltcInB1cnBsZS1zcXVhcmVcIixcImxvdmVcIixcImxpa2VcIl0sY2hhcjpcIvCfkp9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0scGVhY2Vfc3ltYm9sOntrZXl3b3JkczpbXCJoaXBwaWVcIl0sY2hhcjpcIuKYrlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxsYXRpbl9jcm9zczp7a2V5d29yZHM6W1wiY2hyaXN0aWFuaXR5XCJdLGNoYXI6XCLinJ1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sc3Rhcl9hbmRfY3Jlc2NlbnQ6e2tleXdvcmRzOltcImlzbGFtXCJdLGNoYXI6XCLimKpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sb206e2tleXdvcmRzOltcImhpbmR1aXNtXCIsXCJidWRkaGlzbVwiLFwic2lraGlzbVwiLFwiamFpbmlzbVwiXSxjaGFyOlwi8J+ViVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx3aGVlbF9vZl9kaGFybWE6e2tleXdvcmRzOltcImhpbmR1aXNtXCIsXCJidWRkaGlzbVwiLFwic2lraGlzbVwiLFwiamFpbmlzbVwiXSxjaGFyOlwi4pi4XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHN0YXJfb2ZfZGF2aWQ6e2tleXdvcmRzOltcImp1ZGFpc21cIl0sY2hhcjpcIuKcoVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxzaXhfcG9pbnRlZF9zdGFyOntrZXl3b3JkczpbXCJwdXJwbGUtc3F1YXJlXCIsXCJyZWxpZ2lvblwiLFwiamV3aXNoXCIsXCJoZXhhZ3JhbVwiXSxjaGFyOlwi8J+Ur1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxtZW5vcmFoOntrZXl3b3JkczpbXCJoYW51a2thaFwiLFwiY2FuZGxlc1wiLFwiamV3aXNoXCJdLGNoYXI6XCLwn5WOXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHlpbl95YW5nOntrZXl3b3JkczpbXCJiYWxhbmNlXCJdLGNoYXI6XCLimK9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sb3J0aG9kb3hfY3Jvc3M6e2tleXdvcmRzOltcInN1cHBlZGFuZXVtXCIsXCJyZWxpZ2lvblwiXSxjaGFyOlwi4pimXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHBsYWNlX29mX3dvcnNoaXA6e2tleXdvcmRzOltcInJlbGlnaW9uXCIsXCJjaHVyY2hcIixcInRlbXBsZVwiLFwicHJheWVyXCJdLGNoYXI6XCLwn5uQXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LG9waGl1Y2h1czp7a2V5d29yZHM6W1wic2lnblwiLFwicHVycGxlLXNxdWFyZVwiLFwiY29uc3RlbGxhdGlvblwiLFwiYXN0cm9sb2d5XCJdLGNoYXI6XCLim45cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYXJpZXM6e2tleXdvcmRzOltcInNpZ25cIixcInB1cnBsZS1zcXVhcmVcIixcInpvZGlhY1wiLFwiYXN0cm9sb2d5XCJdLGNoYXI6XCLimYhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sdGF1cnVzOntrZXl3b3JkczpbXCJwdXJwbGUtc3F1YXJlXCIsXCJzaWduXCIsXCJ6b2RpYWNcIixcImFzdHJvbG9neVwiXSxjaGFyOlwi4pmJXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGdlbWluaTp7a2V5d29yZHM6W1wic2lnblwiLFwiem9kaWFjXCIsXCJwdXJwbGUtc3F1YXJlXCIsXCJhc3Ryb2xvZ3lcIl0sY2hhcjpcIuKZilwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjYW5jZXI6e2tleXdvcmRzOltcInNpZ25cIixcInpvZGlhY1wiLFwicHVycGxlLXNxdWFyZVwiLFwiYXN0cm9sb2d5XCJdLGNoYXI6XCLimYtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbGVvOntrZXl3b3JkczpbXCJzaWduXCIsXCJwdXJwbGUtc3F1YXJlXCIsXCJ6b2RpYWNcIixcImFzdHJvbG9neVwiXSxjaGFyOlwi4pmMXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHZpcmdvOntrZXl3b3JkczpbXCJzaWduXCIsXCJ6b2RpYWNcIixcInB1cnBsZS1zcXVhcmVcIixcImFzdHJvbG9neVwiXSxjaGFyOlwi4pmNXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGxpYnJhOntrZXl3b3JkczpbXCJzaWduXCIsXCJwdXJwbGUtc3F1YXJlXCIsXCJ6b2RpYWNcIixcImFzdHJvbG9neVwiXSxjaGFyOlwi4pmOXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHNjb3JwaXVzOntrZXl3b3JkczpbXCJzaWduXCIsXCJ6b2RpYWNcIixcInB1cnBsZS1zcXVhcmVcIixcImFzdHJvbG9neVwiLFwic2NvcnBpb1wiXSxjaGFyOlwi4pmPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHNhZ2l0dGFyaXVzOntrZXl3b3JkczpbXCJzaWduXCIsXCJ6b2RpYWNcIixcInB1cnBsZS1zcXVhcmVcIixcImFzdHJvbG9neVwiXSxjaGFyOlwi4pmQXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGNhcHJpY29ybjp7a2V5d29yZHM6W1wic2lnblwiLFwiem9kaWFjXCIsXCJwdXJwbGUtc3F1YXJlXCIsXCJhc3Ryb2xvZ3lcIl0sY2hhcjpcIuKZkVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxhcXVhcml1czp7a2V5d29yZHM6W1wic2lnblwiLFwicHVycGxlLXNxdWFyZVwiLFwiem9kaWFjXCIsXCJhc3Ryb2xvZ3lcIl0sY2hhcjpcIuKZklwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxwaXNjZXM6e2tleXdvcmRzOltcInB1cnBsZS1zcXVhcmVcIixcInNpZ25cIixcInpvZGlhY1wiLFwiYXN0cm9sb2d5XCJdLGNoYXI6XCLimZNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0saWQ6e2tleXdvcmRzOltcInB1cnBsZS1zcXVhcmVcIixcIndvcmRzXCJdLGNoYXI6XCLwn4aUXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGF0b21fc3ltYm9sOntrZXl3b3JkczpbXCJzY2llbmNlXCIsXCJwaHlzaWNzXCIsXCJjaGVtaXN0cnlcIl0sY2hhcjpcIuKam1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx1N2E3YTp7a2V5d29yZHM6W1wia2FuamlcIixcImphcGFuZXNlXCIsXCJjaGluZXNlXCIsXCJlbXB0eVwiLFwic2t5XCIsXCJibHVlLXNxdWFyZVwiXSxjaGFyOlwi8J+Is1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx1NTI3Mjp7a2V5d29yZHM6W1wiY3V0XCIsXCJkaXZpZGVcIixcImNoaW5lc2VcIixcImthbmppXCIsXCJwaW5rLXNxdWFyZVwiXSxjaGFyOlwi8J+IuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxyYWRpb2FjdGl2ZTp7a2V5d29yZHM6W1wibnVjbGVhclwiLFwiZGFuZ2VyXCJdLGNoYXI6XCLimKJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYmlvaGF6YXJkOntrZXl3b3JkczpbXCJkYW5nZXJcIl0sY2hhcjpcIuKYo1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxtb2JpbGVfcGhvbmVfb2ZmOntrZXl3b3JkczpbXCJtdXRlXCIsXCJvcmFuZ2Utc3F1YXJlXCIsXCJzaWxlbmNlXCIsXCJxdWlldFwiXSxjaGFyOlwi8J+TtFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx2aWJyYXRpb25fbW9kZTp7a2V5d29yZHM6W1wib3JhbmdlLXNxdWFyZVwiLFwicGhvbmVcIl0sY2hhcjpcIvCfk7NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sdTY3MDk6e2tleXdvcmRzOltcIm9yYW5nZS1zcXVhcmVcIixcImNoaW5lc2VcIixcImhhdmVcIixcImthbmppXCJdLGNoYXI6XCLwn4i2XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHU3MTIxOntrZXl3b3JkczpbXCJub3RoaW5nXCIsXCJjaGluZXNlXCIsXCJrYW5qaVwiLFwiamFwYW5lc2VcIixcIm9yYW5nZS1zcXVhcmVcIl0sY2hhcjpcIvCfiJpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sdTc1MzM6e2tleXdvcmRzOltcImNoaW5lc2VcIixcImphcGFuZXNlXCIsXCJrYW5qaVwiLFwib3JhbmdlLXNxdWFyZVwiXSxjaGFyOlwi8J+IuFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx1NTViNjp7a2V5d29yZHM6W1wiamFwYW5lc2VcIixcIm9wZW5pbmcgaG91cnNcIixcIm9yYW5nZS1zcXVhcmVcIl0sY2hhcjpcIvCfiLpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sdTY3MDg6e2tleXdvcmRzOltcImNoaW5lc2VcIixcIm1vbnRoXCIsXCJtb29uXCIsXCJqYXBhbmVzZVwiLFwib3JhbmdlLXNxdWFyZVwiLFwia2FuamlcIl0sY2hhcjpcIvCfiLfvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sZWlnaHRfcG9pbnRlZF9ibGFja19zdGFyOntrZXl3b3JkczpbXCJvcmFuZ2Utc3F1YXJlXCIsXCJzaGFwZVwiLFwicG9seWdvblwiXSxjaGFyOlwi4py077iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHZzOntrZXl3b3JkczpbXCJ3b3Jkc1wiLFwib3JhbmdlLXNxdWFyZVwiXSxjaGFyOlwi8J+GmlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxhY2NlcHQ6e2tleXdvcmRzOltcIm9rXCIsXCJnb29kXCIsXCJjaGluZXNlXCIsXCJrYW5qaVwiLFwiYWdyZWVcIixcInllc1wiLFwib3JhbmdlLWNpcmNsZVwiXSxjaGFyOlwi8J+JkVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx3aGl0ZV9mbG93ZXI6e2tleXdvcmRzOltcImphcGFuZXNlXCIsXCJzcHJpbmdcIl0sY2hhcjpcIvCfkq5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0saWRlb2dyYXBoX2FkdmFudGFnZTp7a2V5d29yZHM6W1wiY2hpbmVzZVwiLFwia2FuamlcIixcIm9idGFpblwiLFwiZ2V0XCIsXCJjaXJjbGVcIl0sY2hhcjpcIvCfiZBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sc2VjcmV0OntrZXl3b3JkczpbXCJwcml2YWN5XCIsXCJjaGluZXNlXCIsXCJzc2hoXCIsXCJrYW5qaVwiLFwicmVkLWNpcmNsZVwiXSxjaGFyOlwi44qZ77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGNvbmdyYXR1bGF0aW9uczp7a2V5d29yZHM6W1wiY2hpbmVzZVwiLFwia2FuamlcIixcImphcGFuZXNlXCIsXCJyZWQtY2lyY2xlXCJdLGNoYXI6XCLjipfvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sdTU0MDg6e2tleXdvcmRzOltcImphcGFuZXNlXCIsXCJjaGluZXNlXCIsXCJqb2luXCIsXCJrYW5qaVwiLFwicmVkLXNxdWFyZVwiXSxjaGFyOlwi8J+ItFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx1NmU4MDp7a2V5d29yZHM6W1wiZnVsbFwiLFwiY2hpbmVzZVwiLFwiamFwYW5lc2VcIixcInJlZC1zcXVhcmVcIixcImthbmppXCJdLGNoYXI6XCLwn4i1XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHU3OTgxOntrZXl3b3JkczpbXCJrYW5qaVwiLFwiamFwYW5lc2VcIixcImNoaW5lc2VcIixcImZvcmJpZGRlblwiLFwibGltaXRcIixcInJlc3RyaWN0ZWRcIixcInJlZC1zcXVhcmVcIl0sY2hhcjpcIvCfiLJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYTp7a2V5d29yZHM6W1wicmVkLXNxdWFyZVwiLFwiYWxwaGFiZXRcIixcImxldHRlclwiXSxjaGFyOlwi8J+FsO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxiOntrZXl3b3JkczpbXCJyZWQtc3F1YXJlXCIsXCJhbHBoYWJldFwiLFwibGV0dGVyXCJdLGNoYXI6XCLwn4Wx77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGFiOntrZXl3b3JkczpbXCJyZWQtc3F1YXJlXCIsXCJhbHBoYWJldFwiXSxjaGFyOlwi8J+GjlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjbDp7a2V5d29yZHM6W1wiYWxwaGFiZXRcIixcIndvcmRzXCIsXCJyZWQtc3F1YXJlXCJdLGNoYXI6XCLwn4aRXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LG8yOntrZXl3b3JkczpbXCJhbHBoYWJldFwiLFwicmVkLXNxdWFyZVwiLFwibGV0dGVyXCJdLGNoYXI6XCLwn4W+77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHNvczp7a2V5d29yZHM6W1wiaGVscFwiLFwicmVkLXNxdWFyZVwiLFwid29yZHNcIixcImVtZXJnZW5jeVwiLFwiOTExXCJdLGNoYXI6XCLwn4aYXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LG5vX2VudHJ5OntrZXl3b3JkczpbXCJsaW1pdFwiLFwic2VjdXJpdHlcIixcInByaXZhY3lcIixcImJhZFwiLFwiZGVuaWVkXCIsXCJzdG9wXCIsXCJjaXJjbGVcIl0sY2hhcjpcIuKblFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxuYW1lX2JhZGdlOntrZXl3b3JkczpbXCJmaXJlXCIsXCJmb3JiaWRcIl0sY2hhcjpcIvCfk5tcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbm9fZW50cnlfc2lnbjp7a2V5d29yZHM6W1wiZm9yYmlkXCIsXCJzdG9wXCIsXCJsaW1pdFwiLFwiZGVuaWVkXCIsXCJkaXNhbGxvd1wiLFwiY2lyY2xlXCJdLGNoYXI6XCLwn5qrXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHg6e2tleXdvcmRzOltcIm5vXCIsXCJkZWxldGVcIixcInJlbW92ZVwiLFwiY2FuY2VsXCIsXCJyZWRcIl0sY2hhcjpcIuKdjFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxvOntrZXl3b3JkczpbXCJjaXJjbGVcIixcInJvdW5kXCJdLGNoYXI6XCLirZVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sc3RvcF9zaWduOntrZXl3b3JkczpbXCJzdG9wXCJdLGNoYXI6XCLwn5uRXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGFuZ2VyOntrZXl3b3JkczpbXCJhbmdyeVwiLFwibWFkXCJdLGNoYXI6XCLwn5KiXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGhvdHNwcmluZ3M6e2tleXdvcmRzOltcImJhdGhcIixcIndhcm1cIixcInJlbGF4XCJdLGNoYXI6XCLimajvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbm9fcGVkZXN0cmlhbnM6e2tleXdvcmRzOltcInJ1bGVzXCIsXCJjcm9zc2luZ1wiLFwid2Fsa2luZ1wiLFwiY2lyY2xlXCJdLGNoYXI6XCLwn5q3XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGRvX25vdF9saXR0ZXI6e2tleXdvcmRzOltcInRyYXNoXCIsXCJiaW5cIixcImdhcmJhZ2VcIixcImNpcmNsZVwiXSxjaGFyOlwi8J+ar1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxub19iaWN5Y2xlczp7a2V5d29yZHM6W1wiY3ljbGlzdFwiLFwicHJvaGliaXRlZFwiLFwiY2lyY2xlXCJdLGNoYXI6XCLwn5qzXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LFwibm9uLXBvdGFibGVfd2F0ZXJcIjp7a2V5d29yZHM6W1wiZHJpbmtcIixcImZhdWNldFwiLFwidGFwXCIsXCJjaXJjbGVcIl0sY2hhcjpcIvCfmrFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sdW5kZXJhZ2U6e2tleXdvcmRzOltcIjE4XCIsXCJkcmlua1wiLFwicHViXCIsXCJuaWdodFwiLFwibWlub3JcIixcImNpcmNsZVwiXSxjaGFyOlwi8J+UnlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxub19tb2JpbGVfcGhvbmVzOntrZXl3b3JkczpbXCJpcGhvbmVcIixcIm11dGVcIixcImNpcmNsZVwiXSxjaGFyOlwi8J+TtVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxleGNsYW1hdGlvbjp7a2V5d29yZHM6W1wiaGVhdnlfZXhjbGFtYXRpb25fbWFya1wiLFwiZGFuZ2VyXCIsXCJzdXJwcmlzZVwiLFwicHVuY3R1YXRpb25cIixcIndvd1wiLFwid2FybmluZ1wiXSxjaGFyOlwi4p2XXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGdyZXlfZXhjbGFtYXRpb246e2tleXdvcmRzOltcInN1cnByaXNlXCIsXCJwdW5jdHVhdGlvblwiLFwiZ3JheVwiLFwid293XCIsXCJ3YXJuaW5nXCJdLGNoYXI6XCLinZVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0scXVlc3Rpb246e2tleXdvcmRzOltcImRvdWJ0XCIsXCJjb25mdXNlZFwiXSxjaGFyOlwi4p2TXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGdyZXlfcXVlc3Rpb246e2tleXdvcmRzOltcImRvdWJ0c1wiLFwiZ3JheVwiLFwiaHVoXCIsXCJjb25mdXNlZFwiXSxjaGFyOlwi4p2UXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGJhbmdiYW5nOntrZXl3b3JkczpbXCJleGNsYW1hdGlvblwiLFwic3VycHJpc2VcIl0sY2hhcjpcIuKAvO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxpbnRlcnJvYmFuZzp7a2V5d29yZHM6W1wid2F0XCIsXCJwdW5jdHVhdGlvblwiLFwic3VycHJpc2VcIl0sY2hhcjpcIuKBie+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSwxMDA6e2tleXdvcmRzOltcInNjb3JlXCIsXCJwZXJmZWN0XCIsXCJudW1iZXJzXCIsXCJjZW50dXJ5XCIsXCJleGFtXCIsXCJxdWl6XCIsXCJ0ZXN0XCIsXCJwYXNzXCIsXCJodW5kcmVkXCJdLGNoYXI6XCLwn5KvXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGxvd19icmlnaHRuZXNzOntrZXl3b3JkczpbXCJzdW5cIixcImFmdGVybm9vblwiLFwid2FybVwiLFwic3VtbWVyXCJdLGNoYXI6XCLwn5SFXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGhpZ2hfYnJpZ2h0bmVzczp7a2V5d29yZHM6W1wic3VuXCIsXCJsaWdodFwiXSxjaGFyOlwi8J+UhlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx0cmlkZW50OntrZXl3b3JkczpbXCJ3ZWFwb25cIixcInNwZWFyXCJdLGNoYXI6XCLwn5SxXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGZsZXVyX2RlX2xpczp7a2V5d29yZHM6W1wiZGVjb3JhdGl2ZVwiLFwic2NvdXRcIl0sY2hhcjpcIuKanFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxwYXJ0X2FsdGVybmF0aW9uX21hcms6e2tleXdvcmRzOltcImdyYXBoXCIsXCJwcmVzZW50YXRpb25cIixcInN0YXRzXCIsXCJidXNpbmVzc1wiLFwiZWNvbm9taWNzXCIsXCJiYWRcIl0sY2hhcjpcIuOAve+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx3YXJuaW5nOntrZXl3b3JkczpbXCJleGNsYW1hdGlvblwiLFwid2lwXCIsXCJhbGVydFwiLFwiZXJyb3JcIixcInByb2JsZW1cIixcImlzc3VlXCJdLGNoYXI6XCLimqDvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2hpbGRyZW5fY3Jvc3Npbmc6e2tleXdvcmRzOltcInNjaG9vbFwiLFwid2FybmluZ1wiLFwiZGFuZ2VyXCIsXCJzaWduXCIsXCJkcml2aW5nXCIsXCJ5ZWxsb3ctZGlhbW9uZFwiXSxjaGFyOlwi8J+auFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxiZWdpbm5lcjp7a2V5d29yZHM6W1wiYmFkZ2VcIixcInNoaWVsZFwiXSxjaGFyOlwi8J+UsFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxyZWN5Y2xlOntrZXl3b3JkczpbXCJhcnJvd1wiLFwiZW52aXJvbm1lbnRcIixcImdhcmJhZ2VcIixcInRyYXNoXCJdLGNoYXI6XCLimbvvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sdTYzMDc6e2tleXdvcmRzOltcImNoaW5lc2VcIixcInBvaW50XCIsXCJncmVlbi1zcXVhcmVcIixcImthbmppXCJdLGNoYXI6XCLwn4ivXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGNoYXJ0OntrZXl3b3JkczpbXCJncmVlbi1zcXVhcmVcIixcImdyYXBoXCIsXCJwcmVzZW50YXRpb25cIixcInN0YXRzXCJdLGNoYXI6XCLwn5K5XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHNwYXJrbGU6e2tleXdvcmRzOltcInN0YXJzXCIsXCJncmVlbi1zcXVhcmVcIixcImF3ZXNvbWVcIixcImdvb2RcIixcImZpcmV3b3Jrc1wiXSxjaGFyOlwi4p2H77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGVpZ2h0X3Nwb2tlZF9hc3Rlcmlzazp7a2V5d29yZHM6W1wic3RhclwiLFwic3BhcmtsZVwiLFwiZ3JlZW4tc3F1YXJlXCJdLGNoYXI6XCLinLPvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbmVnYXRpdmVfc3F1YXJlZF9jcm9zc19tYXJrOntrZXl3b3JkczpbXCJ4XCIsXCJncmVlbi1zcXVhcmVcIixcIm5vXCIsXCJkZW55XCJdLGNoYXI6XCLinY5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sd2hpdGVfY2hlY2tfbWFyazp7a2V5d29yZHM6W1wiZ3JlZW4tc3F1YXJlXCIsXCJva1wiLFwiYWdyZWVcIixcInZvdGVcIixcImVsZWN0aW9uXCIsXCJhbnN3ZXJcIixcInRpY2tcIl0sY2hhcjpcIuKchVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxkaWFtb25kX3NoYXBlX3dpdGhfYV9kb3RfaW5zaWRlOntrZXl3b3JkczpbXCJqZXdlbFwiLFwiYmx1ZVwiLFwiZ2VtXCIsXCJjcnlzdGFsXCIsXCJmYW5jeVwiXSxjaGFyOlwi8J+SoFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjeWNsb25lOntrZXl3b3JkczpbXCJ3ZWF0aGVyXCIsXCJzd2lybFwiLFwiYmx1ZVwiLFwiY2xvdWRcIixcInZvcnRleFwiLFwic3BpcmFsXCIsXCJ3aGlybHBvb2xcIixcInNwaW5cIixcInRvcm5hZG9cIixcImh1cnJpY2FuZVwiLFwidHlwaG9vblwiXSxjaGFyOlwi8J+MgFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxsb29wOntrZXl3b3JkczpbXCJ0YXBlXCIsXCJjYXNzZXR0ZVwiXSxjaGFyOlwi4p6/XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGdsb2JlX3dpdGhfbWVyaWRpYW5zOntrZXl3b3JkczpbXCJlYXJ0aFwiLFwiaW50ZXJuYXRpb25hbFwiLFwid29ybGRcIixcImludGVybmV0XCIsXCJpbnRlcndlYlwiLFwiaTE4blwiXSxjaGFyOlwi8J+MkFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxtOntrZXl3b3JkczpbXCJhbHBoYWJldFwiLFwiYmx1ZS1jaXJjbGVcIixcImxldHRlclwiXSxjaGFyOlwi4pOC77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGF0bTp7a2V5d29yZHM6W1wibW9uZXlcIixcInNhbGVzXCIsXCJjYXNoXCIsXCJibHVlLXNxdWFyZVwiLFwicGF5bWVudFwiLFwiYmFua1wiXSxjaGFyOlwi8J+Pp1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxzYTp7a2V5d29yZHM6W1wiamFwYW5lc2VcIixcImJsdWUtc3F1YXJlXCIsXCJrYXRha2FuYVwiXSxjaGFyOlwi8J+Igu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxwYXNzcG9ydF9jb250cm9sOntrZXl3b3JkczpbXCJjdXN0b21cIixcImJsdWUtc3F1YXJlXCJdLGNoYXI6XCLwn5uCXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGN1c3RvbXM6e2tleXdvcmRzOltcInBhc3Nwb3J0XCIsXCJib3JkZXJcIixcImJsdWUtc3F1YXJlXCJdLGNoYXI6XCLwn5uDXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGJhZ2dhZ2VfY2xhaW06e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJhaXJwb3J0XCIsXCJ0cmFuc3BvcnRcIl0sY2hhcjpcIvCfm4RcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbGVmdF9sdWdnYWdlOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwidHJhdmVsXCJdLGNoYXI6XCLwn5uFXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHdoZWVsY2hhaXI6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJkaXNhYmxlZFwiLFwiYTExeVwiLFwiYWNjZXNzaWJpbGl0eVwiXSxjaGFyOlwi4pm/XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LG5vX3Ntb2tpbmc6e2tleXdvcmRzOltcImNpZ2FyZXR0ZVwiLFwiYmx1ZS1zcXVhcmVcIixcInNtZWxsXCIsXCJzbW9rZVwiXSxjaGFyOlwi8J+arVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx3Yzp7a2V5d29yZHM6W1widG9pbGV0XCIsXCJyZXN0cm9vbVwiLFwiYmx1ZS1zcXVhcmVcIl0sY2hhcjpcIvCfmr5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0scGFya2luZzp7a2V5d29yZHM6W1wiY2Fyc1wiLFwiYmx1ZS1zcXVhcmVcIixcImFscGhhYmV0XCIsXCJsZXR0ZXJcIl0sY2hhcjpcIvCfhb/vuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0scG90YWJsZV93YXRlcjp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcImxpcXVpZFwiLFwicmVzdHJvb21cIixcImNsZWFuaW5nXCIsXCJmYXVjZXRcIl0sY2hhcjpcIvCfmrBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbWVuczp7a2V5d29yZHM6W1widG9pbGV0XCIsXCJyZXN0cm9vbVwiLFwid2NcIixcImJsdWUtc3F1YXJlXCIsXCJnZW5kZXJcIixcIm1hbGVcIl0sY2hhcjpcIvCfmrlcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sd29tZW5zOntrZXl3b3JkczpbXCJwdXJwbGUtc3F1YXJlXCIsXCJ3b21hblwiLFwiZmVtYWxlXCIsXCJ0b2lsZXRcIixcImxvb1wiLFwicmVzdHJvb21cIixcImdlbmRlclwiXSxjaGFyOlwi8J+aulwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxiYWJ5X3N5bWJvbDp7a2V5d29yZHM6W1wib3JhbmdlLXNxdWFyZVwiLFwiY2hpbGRcIl0sY2hhcjpcIvCfmrxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0scmVzdHJvb206e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJ0b2lsZXRcIixcInJlZnJlc2hcIixcIndjXCIsXCJnZW5kZXJcIl0sY2hhcjpcIvCfmrtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0scHV0X2xpdHRlcl9pbl9pdHNfcGxhY2U6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJzaWduXCIsXCJodW1hblwiLFwiaW5mb1wiXSxjaGFyOlwi8J+arlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjaW5lbWE6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJyZWNvcmRcIixcImZpbG1cIixcIm1vdmllXCIsXCJjdXJ0YWluXCIsXCJzdGFnZVwiLFwidGhlYXRlclwiXSxjaGFyOlwi8J+OplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxzaWduYWxfc3RyZW5ndGg6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJyZWNlcHRpb25cIixcInBob25lXCIsXCJpbnRlcm5ldFwiLFwiY29ubmVjdGlvblwiLFwid2lmaVwiLFwiYmx1ZXRvb3RoXCIsXCJiYXJzXCJdLGNoYXI6XCLwn5O2XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGtva286e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJoZXJlXCIsXCJrYXRha2FuYVwiLFwiamFwYW5lc2VcIixcImRlc3RpbmF0aW9uXCJdLGNoYXI6XCLwn4iBXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LG5nOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwid29yZHNcIixcInNoYXBlXCIsXCJpY29uXCJdLGNoYXI6XCLwn4aWXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LG9rOntrZXl3b3JkczpbXCJnb29kXCIsXCJhZ3JlZVwiLFwieWVzXCIsXCJibHVlLXNxdWFyZVwiXSxjaGFyOlwi8J+Gl1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx1cDp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcImFib3ZlXCIsXCJoaWdoXCJdLGNoYXI6XCLwn4aZXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGNvb2w6e2tleXdvcmRzOltcIndvcmRzXCIsXCJibHVlLXNxdWFyZVwiXSxjaGFyOlwi8J+GklwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxuZXc6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJ3b3Jkc1wiLFwic3RhcnRcIl0sY2hhcjpcIvCfhpVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sZnJlZTp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcIndvcmRzXCJdLGNoYXI6XCLwn4aTXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHplcm86e2tleXdvcmRzOltcIjBcIixcIm51bWJlcnNcIixcImJsdWUtc3F1YXJlXCIsXCJudWxsXCJdLGNoYXI6XCIw77iP4oOjXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LG9uZTp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcIm51bWJlcnNcIixcIjFcIl0sY2hhcjpcIjHvuI/ig6NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sdHdvOntrZXl3b3JkczpbXCJudW1iZXJzXCIsXCIyXCIsXCJwcmltZVwiLFwiYmx1ZS1zcXVhcmVcIl0sY2hhcjpcIjLvuI/ig6NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sdGhyZWU6e2tleXdvcmRzOltcIjNcIixcIm51bWJlcnNcIixcInByaW1lXCIsXCJibHVlLXNxdWFyZVwiXSxjaGFyOlwiM++4j+KDo1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxmb3VyOntrZXl3b3JkczpbXCI0XCIsXCJudW1iZXJzXCIsXCJibHVlLXNxdWFyZVwiXSxjaGFyOlwiNO+4j+KDo1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxmaXZlOntrZXl3b3JkczpbXCI1XCIsXCJudW1iZXJzXCIsXCJibHVlLXNxdWFyZVwiLFwicHJpbWVcIl0sY2hhcjpcIjXvuI/ig6NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sc2l4OntrZXl3b3JkczpbXCI2XCIsXCJudW1iZXJzXCIsXCJibHVlLXNxdWFyZVwiXSxjaGFyOlwiNu+4j+KDo1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxzZXZlbjp7a2V5d29yZHM6W1wiN1wiLFwibnVtYmVyc1wiLFwiYmx1ZS1zcXVhcmVcIixcInByaW1lXCJdLGNoYXI6XCI377iP4oOjXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGVpZ2h0OntrZXl3b3JkczpbXCI4XCIsXCJibHVlLXNxdWFyZVwiLFwibnVtYmVyc1wiXSxjaGFyOlwiOO+4j+KDo1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxuaW5lOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwibnVtYmVyc1wiLFwiOVwiXSxjaGFyOlwiOe+4j+KDo1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxrZXljYXBfdGVuOntrZXl3b3JkczpbXCJudW1iZXJzXCIsXCIxMFwiLFwiYmx1ZS1zcXVhcmVcIl0sY2hhcjpcIvCflJ9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYXN0ZXJpc2s6e2tleXdvcmRzOltcInN0YXJcIixcImtleWNhcFwiXSxjaGFyOlwiKuKDo1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSwxMjM0OntrZXl3b3JkczpbXCJudW1iZXJzXCIsXCJibHVlLXNxdWFyZVwiXSxjaGFyOlwi8J+UolwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxlamVjdF9idXR0b246e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCJdLGNoYXI6XCLij4/vuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYXJyb3dfZm9yd2FyZDp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcInJpZ2h0XCIsXCJkaXJlY3Rpb25cIixcInBsYXlcIl0sY2hhcjpcIuKWtu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxwYXVzZV9idXR0b246e2tleXdvcmRzOltcInBhdXNlXCIsXCJibHVlLXNxdWFyZVwiXSxjaGFyOlwi4o+4XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LG5leHRfdHJhY2tfYnV0dG9uOntrZXl3b3JkczpbXCJmb3J3YXJkXCIsXCJuZXh0XCIsXCJibHVlLXNxdWFyZVwiXSxjaGFyOlwi4o+tXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHN0b3BfYnV0dG9uOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiXSxjaGFyOlwi4o+5XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHJlY29yZF9idXR0b246e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCJdLGNoYXI6XCLij7pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0scGxheV9vcl9wYXVzZV9idXR0b246e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJwbGF5XCIsXCJwYXVzZVwiXSxjaGFyOlwi4o+vXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHByZXZpb3VzX3RyYWNrX2J1dHRvbjp7a2V5d29yZHM6W1wiYmFja3dhcmRcIl0sY2hhcjpcIuKPrlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxmYXN0X2ZvcndhcmQ6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJwbGF5XCIsXCJzcGVlZFwiLFwiY29udGludWVcIl0sY2hhcjpcIuKPqVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxyZXdpbmQ6e2tleXdvcmRzOltcInBsYXlcIixcImJsdWUtc3F1YXJlXCJdLGNoYXI6XCLij6pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sdHdpc3RlZF9yaWdodHdhcmRzX2Fycm93czp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcInNodWZmbGVcIixcIm11c2ljXCIsXCJyYW5kb21cIl0sY2hhcjpcIvCflIBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0scmVwZWF0OntrZXl3b3JkczpbXCJsb29wXCIsXCJyZWNvcmRcIl0sY2hhcjpcIvCflIFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0scmVwZWF0X29uZTp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcImxvb3BcIl0sY2hhcjpcIvCflIJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYXJyb3dfYmFja3dhcmQ6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJsZWZ0XCIsXCJkaXJlY3Rpb25cIl0sY2hhcjpcIuKXgO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxhcnJvd191cF9zbWFsbDp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcInRyaWFuZ2xlXCIsXCJkaXJlY3Rpb25cIixcInBvaW50XCIsXCJmb3J3YXJkXCIsXCJ0b3BcIl0sY2hhcjpcIvCflLxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYXJyb3dfZG93bl9zbWFsbDp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcImRpcmVjdGlvblwiLFwiYm90dG9tXCJdLGNoYXI6XCLwn5S9XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGFycm93X2RvdWJsZV91cDp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcImRpcmVjdGlvblwiLFwidG9wXCJdLGNoYXI6XCLij6tcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYXJyb3dfZG91YmxlX2Rvd246e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJkaXJlY3Rpb25cIixcImJvdHRvbVwiXSxjaGFyOlwi4o+sXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGFycm93X3JpZ2h0OntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwibmV4dFwiXSxjaGFyOlwi4p6h77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGFycm93X2xlZnQ6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJwcmV2aW91c1wiLFwiYmFja1wiXSxjaGFyOlwi4qyF77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGFycm93X3VwOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwiY29udGludWVcIixcInRvcFwiLFwiZGlyZWN0aW9uXCJdLGNoYXI6XCLirIbvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYXJyb3dfZG93bjp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcImRpcmVjdGlvblwiLFwiYm90dG9tXCJdLGNoYXI6XCLirIfvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYXJyb3dfdXBwZXJfcmlnaHQ6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJwb2ludFwiLFwiZGlyZWN0aW9uXCIsXCJkaWFnb25hbFwiLFwibm9ydGhlYXN0XCJdLGNoYXI6XCLihpfvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYXJyb3dfbG93ZXJfcmlnaHQ6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJkaXJlY3Rpb25cIixcImRpYWdvbmFsXCIsXCJzb3V0aGVhc3RcIl0sY2hhcjpcIuKGmO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxhcnJvd19sb3dlcl9sZWZ0OntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwiZGlyZWN0aW9uXCIsXCJkaWFnb25hbFwiLFwic291dGh3ZXN0XCJdLGNoYXI6XCLihpnvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYXJyb3dfdXBwZXJfbGVmdDp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcInBvaW50XCIsXCJkaXJlY3Rpb25cIixcImRpYWdvbmFsXCIsXCJub3J0aHdlc3RcIl0sY2hhcjpcIuKGlu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxhcnJvd191cF9kb3duOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwiZGlyZWN0aW9uXCIsXCJ3YXlcIixcInZlcnRpY2FsXCJdLGNoYXI6XCLihpXvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbGVmdF9yaWdodF9hcnJvdzp7a2V5d29yZHM6W1wic2hhcGVcIixcImRpcmVjdGlvblwiLFwiaG9yaXpvbnRhbFwiLFwic2lkZXdheXNcIl0sY2hhcjpcIuKGlO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxhcnJvd3NfY291bnRlcmNsb2Nrd2lzZTp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcInN5bmNcIixcImN5Y2xlXCJdLGNoYXI6XCLwn5SEXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGFycm93X3JpZ2h0X2hvb2s6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJyZXR1cm5cIixcInJvdGF0ZVwiLFwiZGlyZWN0aW9uXCJdLGNoYXI6XCLihqrvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbGVmdHdhcmRzX2Fycm93X3dpdGhfaG9vazp7a2V5d29yZHM6W1wiYmFja1wiLFwicmV0dXJuXCIsXCJibHVlLXNxdWFyZVwiLFwidW5kb1wiLFwiZW50ZXJcIl0sY2hhcjpcIuKGqe+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxhcnJvd19oZWFkaW5nX3VwOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwiZGlyZWN0aW9uXCIsXCJ0b3BcIl0sY2hhcjpcIuKktO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxhcnJvd19oZWFkaW5nX2Rvd246e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJkaXJlY3Rpb25cIixcImJvdHRvbVwiXSxjaGFyOlwi4qS177iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGhhc2g6e2tleXdvcmRzOltcInN5bWJvbFwiLFwiYmx1ZS1zcXVhcmVcIixcInR3aXR0ZXJcIl0sY2hhcjpcIiPvuI/ig6NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0saW5mb3JtYXRpb25fc291cmNlOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwiYWxwaGFiZXRcIixcImxldHRlclwiXSxjaGFyOlwi4oS577iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGFiYzp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcImFscGhhYmV0XCJdLGNoYXI6XCLwn5SkXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGFiY2Q6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJhbHBoYWJldFwiXSxjaGFyOlwi8J+UoVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjYXBpdGFsX2FiY2Q6e2tleXdvcmRzOltcImFscGhhYmV0XCIsXCJ3b3Jkc1wiLFwiYmx1ZS1zcXVhcmVcIl0sY2hhcjpcIvCflKBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sc3ltYm9sczp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcIm11c2ljXCIsXCJub3RlXCIsXCJhbXBlcnNhbmRcIixcInBlcmNlbnRcIixcImdseXBoc1wiLFwiY2hhcmFjdGVyc1wiXSxjaGFyOlwi8J+Uo1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxtdXNpY2FsX25vdGU6e2tleXdvcmRzOltcInNjb3JlXCIsXCJ0b25lXCIsXCJzb3VuZFwiXSxjaGFyOlwi8J+OtVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxub3Rlczp7a2V5d29yZHM6W1wibXVzaWNcIixcInNjb3JlXCJdLGNoYXI6XCLwn462XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHdhdnlfZGFzaDp7a2V5d29yZHM6W1wiZHJhd1wiLFwibGluZVwiLFwibW91c3RhY2hlXCIsXCJtdXN0YWNoZVwiLFwic3F1aWdnbGVcIixcInNjcmliYmxlXCJdLGNoYXI6XCLjgLDvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY3VybHlfbG9vcDp7a2V5d29yZHM6W1wic2NyaWJibGVcIixcImRyYXdcIixcInNoYXBlXCIsXCJzcXVpZ2dsZVwiXSxjaGFyOlwi4p6wXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGhlYXZ5X2NoZWNrX21hcms6e2tleXdvcmRzOltcIm9rXCIsXCJuaWtlXCIsXCJhbnN3ZXJcIixcInllc1wiLFwidGlja1wiXSxjaGFyOlwi4pyU77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGFycm93c19jbG9ja3dpc2U6e2tleXdvcmRzOltcInN5bmNcIixcImN5Y2xlXCIsXCJyb3VuZFwiLFwicmVwZWF0XCJdLGNoYXI6XCLwn5SDXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGhlYXZ5X3BsdXNfc2lnbjp7a2V5d29yZHM6W1wibWF0aFwiLFwiY2FsY3VsYXRpb25cIixcImFkZGl0aW9uXCIsXCJtb3JlXCIsXCJpbmNyZWFzZVwiXSxjaGFyOlwi4p6VXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGhlYXZ5X21pbnVzX3NpZ246e2tleXdvcmRzOltcIm1hdGhcIixcImNhbGN1bGF0aW9uXCIsXCJzdWJ0cmFjdFwiLFwibGVzc1wiXSxjaGFyOlwi4p6WXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGhlYXZ5X2RpdmlzaW9uX3NpZ246e2tleXdvcmRzOltcImRpdmlkZVwiLFwibWF0aFwiLFwiY2FsY3VsYXRpb25cIl0sY2hhcjpcIuKel1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxoZWF2eV9tdWx0aXBsaWNhdGlvbl94OntrZXl3b3JkczpbXCJtYXRoXCIsXCJjYWxjdWxhdGlvblwiXSxjaGFyOlwi4pyW77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGluZmluaXR5OntrZXl3b3JkczpbXCJmb3JldmVyXCJdLGNoYXI6XCLimb5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0saGVhdnlfZG9sbGFyX3NpZ246e2tleXdvcmRzOltcIm1vbmV5XCIsXCJzYWxlc1wiLFwicGF5bWVudFwiLFwiY3VycmVuY3lcIixcImJ1Y2tcIl0sY2hhcjpcIvCfkrJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY3VycmVuY3lfZXhjaGFuZ2U6e2tleXdvcmRzOltcIm1vbmV5XCIsXCJzYWxlc1wiLFwiZG9sbGFyXCIsXCJ0cmF2ZWxcIl0sY2hhcjpcIvCfkrFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY29weXJpZ2h0OntrZXl3b3JkczpbXCJpcFwiLFwibGljZW5zZVwiLFwiY2lyY2xlXCIsXCJsYXdcIixcImxlZ2FsXCJdLGNoYXI6XCLCqe+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxyZWdpc3RlcmVkOntrZXl3b3JkczpbXCJhbHBoYWJldFwiLFwiY2lyY2xlXCJdLGNoYXI6XCLCru+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx0bTp7a2V5d29yZHM6W1widHJhZGVtYXJrXCIsXCJicmFuZFwiLFwibGF3XCIsXCJsZWdhbFwiXSxjaGFyOlwi4oSi77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGVuZDp7a2V5d29yZHM6W1wid29yZHNcIixcImFycm93XCJdLGNoYXI6XCLwn5SaXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGJhY2s6e2tleXdvcmRzOltcImFycm93XCIsXCJ3b3Jkc1wiLFwicmV0dXJuXCJdLGNoYXI6XCLwn5SZXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LG9uOntrZXl3b3JkczpbXCJhcnJvd1wiLFwid29yZHNcIl0sY2hhcjpcIvCflJtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sdG9wOntrZXl3b3JkczpbXCJ3b3Jkc1wiLFwiYmx1ZS1zcXVhcmVcIl0sY2hhcjpcIvCflJ1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sc29vbjp7a2V5d29yZHM6W1wiYXJyb3dcIixcIndvcmRzXCJdLGNoYXI6XCLwn5ScXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGJhbGxvdF9ib3hfd2l0aF9jaGVjazp7a2V5d29yZHM6W1wib2tcIixcImFncmVlXCIsXCJjb25maXJtXCIsXCJibGFjay1zcXVhcmVcIixcInZvdGVcIixcImVsZWN0aW9uXCIsXCJ5ZXNcIixcInRpY2tcIl0sY2hhcjpcIuKYke+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxyYWRpb19idXR0b246e2tleXdvcmRzOltcImlucHV0XCIsXCJvbGRcIixcIm11c2ljXCIsXCJjaXJjbGVcIl0sY2hhcjpcIvCflJhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sd2hpdGVfY2lyY2xlOntrZXl3b3JkczpbXCJzaGFwZVwiLFwicm91bmRcIl0sY2hhcjpcIuKaqlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxibGFja19jaXJjbGU6e2tleXdvcmRzOltcInNoYXBlXCIsXCJidXR0b25cIixcInJvdW5kXCJdLGNoYXI6XCLimqtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0scmVkX2NpcmNsZTp7a2V5d29yZHM6W1wic2hhcGVcIixcImVycm9yXCIsXCJkYW5nZXJcIl0sY2hhcjpcIvCflLRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbGFyZ2VfYmx1ZV9jaXJjbGU6e2tleXdvcmRzOltcInNoYXBlXCIsXCJpY29uXCIsXCJidXR0b25cIl0sY2hhcjpcIvCflLVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sc21hbGxfb3JhbmdlX2RpYW1vbmQ6e2tleXdvcmRzOltcInNoYXBlXCIsXCJqZXdlbFwiLFwiZ2VtXCJdLGNoYXI6XCLwn5S4XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHNtYWxsX2JsdWVfZGlhbW9uZDp7a2V5d29yZHM6W1wic2hhcGVcIixcImpld2VsXCIsXCJnZW1cIl0sY2hhcjpcIvCflLlcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbGFyZ2Vfb3JhbmdlX2RpYW1vbmQ6e2tleXdvcmRzOltcInNoYXBlXCIsXCJqZXdlbFwiLFwiZ2VtXCJdLGNoYXI6XCLwn5S2XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGxhcmdlX2JsdWVfZGlhbW9uZDp7a2V5d29yZHM6W1wic2hhcGVcIixcImpld2VsXCIsXCJnZW1cIl0sY2hhcjpcIvCflLdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sc21hbGxfcmVkX3RyaWFuZ2xlOntrZXl3b3JkczpbXCJzaGFwZVwiLFwiZGlyZWN0aW9uXCIsXCJ1cFwiLFwidG9wXCJdLGNoYXI6XCLwn5S6XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGJsYWNrX3NtYWxsX3NxdWFyZTp7a2V5d29yZHM6W1wic2hhcGVcIixcImljb25cIl0sY2hhcjpcIuKWqu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx3aGl0ZV9zbWFsbF9zcXVhcmU6e2tleXdvcmRzOltcInNoYXBlXCIsXCJpY29uXCJdLGNoYXI6XCLilqvvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYmxhY2tfbGFyZ2Vfc3F1YXJlOntrZXl3b3JkczpbXCJzaGFwZVwiLFwiaWNvblwiLFwiYnV0dG9uXCJdLGNoYXI6XCLirJtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sd2hpdGVfbGFyZ2Vfc3F1YXJlOntrZXl3b3JkczpbXCJzaGFwZVwiLFwiaWNvblwiLFwic3RvbmVcIixcImJ1dHRvblwiXSxjaGFyOlwi4qycXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHNtYWxsX3JlZF90cmlhbmdsZV9kb3duOntrZXl3b3JkczpbXCJzaGFwZVwiLFwiZGlyZWN0aW9uXCIsXCJib3R0b21cIl0sY2hhcjpcIvCflLtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYmxhY2tfbWVkaXVtX3NxdWFyZTp7a2V5d29yZHM6W1wic2hhcGVcIixcImJ1dHRvblwiLFwiaWNvblwiXSxjaGFyOlwi4pe877iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHdoaXRlX21lZGl1bV9zcXVhcmU6e2tleXdvcmRzOltcInNoYXBlXCIsXCJzdG9uZVwiLFwiaWNvblwiXSxjaGFyOlwi4pe777iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGJsYWNrX21lZGl1bV9zbWFsbF9zcXVhcmU6e2tleXdvcmRzOltcImljb25cIixcInNoYXBlXCIsXCJidXR0b25cIl0sY2hhcjpcIuKXvlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx3aGl0ZV9tZWRpdW1fc21hbGxfc3F1YXJlOntrZXl3b3JkczpbXCJzaGFwZVwiLFwic3RvbmVcIixcImljb25cIixcImJ1dHRvblwiXSxjaGFyOlwi4pe9XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGJsYWNrX3NxdWFyZV9idXR0b246e2tleXdvcmRzOltcInNoYXBlXCIsXCJpbnB1dFwiLFwiZnJhbWVcIl0sY2hhcjpcIvCflLJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sd2hpdGVfc3F1YXJlX2J1dHRvbjp7a2V5d29yZHM6W1wic2hhcGVcIixcImlucHV0XCJdLGNoYXI6XCLwn5SzXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHNwZWFrZXI6e2tleXdvcmRzOltcInNvdW5kXCIsXCJ2b2x1bWVcIixcInNpbGVuY2VcIixcImJyb2FkY2FzdFwiXSxjaGFyOlwi8J+UiFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxzb3VuZDp7a2V5d29yZHM6W1widm9sdW1lXCIsXCJzcGVha2VyXCIsXCJicm9hZGNhc3RcIl0sY2hhcjpcIvCflIlcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbG91ZF9zb3VuZDp7a2V5d29yZHM6W1widm9sdW1lXCIsXCJub2lzZVwiLFwibm9pc3lcIixcInNwZWFrZXJcIixcImJyb2FkY2FzdFwiXSxjaGFyOlwi8J+UilwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxtdXRlOntrZXl3b3JkczpbXCJzb3VuZFwiLFwidm9sdW1lXCIsXCJzaWxlbmNlXCIsXCJxdWlldFwiXSxjaGFyOlwi8J+Uh1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxtZWdhOntrZXl3b3JkczpbXCJzb3VuZFwiLFwic3BlYWtlclwiLFwidm9sdW1lXCJdLGNoYXI6XCLwn5OjXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGxvdWRzcGVha2VyOntrZXl3b3JkczpbXCJ2b2x1bWVcIixcInNvdW5kXCJdLGNoYXI6XCLwn5OiXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGJlbGw6e2tleXdvcmRzOltcInNvdW5kXCIsXCJub3RpZmljYXRpb25cIixcImNocmlzdG1hc1wiLFwieG1hc1wiLFwiY2hpbWVcIl0sY2hhcjpcIvCflJRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbm9fYmVsbDp7a2V5d29yZHM6W1wic291bmRcIixcInZvbHVtZVwiLFwibXV0ZVwiLFwicXVpZXRcIixcInNpbGVudFwiXSxjaGFyOlwi8J+UlVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxibGFja19qb2tlcjp7a2V5d29yZHM6W1wicG9rZXJcIixcImNhcmRzXCIsXCJnYW1lXCIsXCJwbGF5XCIsXCJtYWdpY1wiXSxjaGFyOlwi8J+Dj1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxtYWhqb25nOntrZXl3b3JkczpbXCJnYW1lXCIsXCJwbGF5XCIsXCJjaGluZXNlXCIsXCJrYW5qaVwiXSxjaGFyOlwi8J+AhFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxzcGFkZXM6e2tleXdvcmRzOltcInBva2VyXCIsXCJjYXJkc1wiLFwic3VpdHNcIixcIm1hZ2ljXCJdLGNoYXI6XCLimaDvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2x1YnM6e2tleXdvcmRzOltcInBva2VyXCIsXCJjYXJkc1wiLFwibWFnaWNcIixcInN1aXRzXCJdLGNoYXI6XCLimaPvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0saGVhcnRzOntrZXl3b3JkczpbXCJwb2tlclwiLFwiY2FyZHNcIixcIm1hZ2ljXCIsXCJzdWl0c1wiXSxjaGFyOlwi4pml77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGRpYW1vbmRzOntrZXl3b3JkczpbXCJwb2tlclwiLFwiY2FyZHNcIixcIm1hZ2ljXCIsXCJzdWl0c1wiXSxjaGFyOlwi4pmm77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGZsb3dlcl9wbGF5aW5nX2NhcmRzOntrZXl3b3JkczpbXCJnYW1lXCIsXCJzdW5zZXRcIixcInJlZFwiXSxjaGFyOlwi8J+OtFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx0aG91Z2h0X2JhbGxvb246e2tleXdvcmRzOltcImJ1YmJsZVwiLFwiY2xvdWRcIixcInNwZWVjaFwiLFwidGhpbmtpbmdcIixcImRyZWFtXCJdLGNoYXI6XCLwn5KtXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHJpZ2h0X2FuZ2VyX2J1YmJsZTp7a2V5d29yZHM6W1wiY2FwdGlvblwiLFwic3BlZWNoXCIsXCJ0aGlua2luZ1wiLFwibWFkXCJdLGNoYXI6XCLwn5evXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHNwZWVjaF9iYWxsb29uOntrZXl3b3JkczpbXCJidWJibGVcIixcIndvcmRzXCIsXCJtZXNzYWdlXCIsXCJ0YWxrXCIsXCJjaGF0dGluZ1wiXSxjaGFyOlwi8J+SrFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxsZWZ0X3NwZWVjaF9idWJibGU6e2tleXdvcmRzOltcIndvcmRzXCIsXCJtZXNzYWdlXCIsXCJ0YWxrXCIsXCJjaGF0dGluZ1wiXSxjaGFyOlwi8J+XqFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjbG9jazE6e2tleXdvcmRzOltcInRpbWVcIixcImxhdGVcIixcImVhcmx5XCIsXCJzY2hlZHVsZVwiXSxjaGFyOlwi8J+VkFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjbG9jazI6e2tleXdvcmRzOltcInRpbWVcIixcImxhdGVcIixcImVhcmx5XCIsXCJzY2hlZHVsZVwiXSxjaGFyOlwi8J+VkVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjbG9jazM6e2tleXdvcmRzOltcInRpbWVcIixcImxhdGVcIixcImVhcmx5XCIsXCJzY2hlZHVsZVwiXSxjaGFyOlwi8J+VklwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjbG9jazQ6e2tleXdvcmRzOltcInRpbWVcIixcImxhdGVcIixcImVhcmx5XCIsXCJzY2hlZHVsZVwiXSxjaGFyOlwi8J+Vk1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjbG9jazU6e2tleXdvcmRzOltcInRpbWVcIixcImxhdGVcIixcImVhcmx5XCIsXCJzY2hlZHVsZVwiXSxjaGFyOlwi8J+VlFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjbG9jazY6e2tleXdvcmRzOltcInRpbWVcIixcImxhdGVcIixcImVhcmx5XCIsXCJzY2hlZHVsZVwiLFwiZGF3blwiLFwiZHVza1wiXSxjaGFyOlwi8J+VlVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjbG9jazc6e2tleXdvcmRzOltcInRpbWVcIixcImxhdGVcIixcImVhcmx5XCIsXCJzY2hlZHVsZVwiXSxjaGFyOlwi8J+VllwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjbG9jazg6e2tleXdvcmRzOltcInRpbWVcIixcImxhdGVcIixcImVhcmx5XCIsXCJzY2hlZHVsZVwiXSxjaGFyOlwi8J+Vl1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjbG9jazk6e2tleXdvcmRzOltcInRpbWVcIixcImxhdGVcIixcImVhcmx5XCIsXCJzY2hlZHVsZVwiXSxjaGFyOlwi8J+VmFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjbG9jazEwOntrZXl3b3JkczpbXCJ0aW1lXCIsXCJsYXRlXCIsXCJlYXJseVwiLFwic2NoZWR1bGVcIl0sY2hhcjpcIvCflZlcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2xvY2sxMTp7a2V5d29yZHM6W1widGltZVwiLFwibGF0ZVwiLFwiZWFybHlcIixcInNjaGVkdWxlXCJdLGNoYXI6XCLwn5WaXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGNsb2NrMTI6e2tleXdvcmRzOltcInRpbWVcIixcIm5vb25cIixcIm1pZG5pZ2h0XCIsXCJtaWRkYXlcIixcImxhdGVcIixcImVhcmx5XCIsXCJzY2hlZHVsZVwiXSxjaGFyOlwi8J+Vm1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjbG9jazEzMDp7a2V5d29yZHM6W1widGltZVwiLFwibGF0ZVwiLFwiZWFybHlcIixcInNjaGVkdWxlXCJdLGNoYXI6XCLwn5WcXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGNsb2NrMjMwOntrZXl3b3JkczpbXCJ0aW1lXCIsXCJsYXRlXCIsXCJlYXJseVwiLFwic2NoZWR1bGVcIl0sY2hhcjpcIvCflZ1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2xvY2szMzA6e2tleXdvcmRzOltcInRpbWVcIixcImxhdGVcIixcImVhcmx5XCIsXCJzY2hlZHVsZVwiXSxjaGFyOlwi8J+VnlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjbG9jazQzMDp7a2V5d29yZHM6W1widGltZVwiLFwibGF0ZVwiLFwiZWFybHlcIixcInNjaGVkdWxlXCJdLGNoYXI6XCLwn5WfXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGNsb2NrNTMwOntrZXl3b3JkczpbXCJ0aW1lXCIsXCJsYXRlXCIsXCJlYXJseVwiLFwic2NoZWR1bGVcIl0sY2hhcjpcIvCflaBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2xvY2s2MzA6e2tleXdvcmRzOltcInRpbWVcIixcImxhdGVcIixcImVhcmx5XCIsXCJzY2hlZHVsZVwiXSxjaGFyOlwi8J+VoVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjbG9jazczMDp7a2V5d29yZHM6W1widGltZVwiLFwibGF0ZVwiLFwiZWFybHlcIixcInNjaGVkdWxlXCJdLGNoYXI6XCLwn5WiXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGNsb2NrODMwOntrZXl3b3JkczpbXCJ0aW1lXCIsXCJsYXRlXCIsXCJlYXJseVwiLFwic2NoZWR1bGVcIl0sY2hhcjpcIvCflaNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2xvY2s5MzA6e2tleXdvcmRzOltcInRpbWVcIixcImxhdGVcIixcImVhcmx5XCIsXCJzY2hlZHVsZVwiXSxjaGFyOlwi8J+VpFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjbG9jazEwMzA6e2tleXdvcmRzOltcInRpbWVcIixcImxhdGVcIixcImVhcmx5XCIsXCJzY2hlZHVsZVwiXSxjaGFyOlwi8J+VpVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjbG9jazExMzA6e2tleXdvcmRzOltcInRpbWVcIixcImxhdGVcIixcImVhcmx5XCIsXCJzY2hlZHVsZVwiXSxjaGFyOlwi8J+VplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjbG9jazEyMzA6e2tleXdvcmRzOltcInRpbWVcIixcImxhdGVcIixcImVhcmx5XCIsXCJzY2hlZHVsZVwiXSxjaGFyOlwi8J+Vp1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxhZmdoYW5pc3Rhbjp7a2V5d29yZHM6W1wiYWZcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4em8J+Hq1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sYWxhbmRfaXNsYW5kczp7a2V5d29yZHM6W1wiw4VsYW5kXCIsXCJpc2xhbmRzXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HpvCfh71cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGFsYmFuaWE6e2tleXdvcmRzOltcImFsXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HpvCfh7FcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGFsZ2VyaWE6e2tleXdvcmRzOltcImR6XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HqfCfh79cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGFtZXJpY2FuX3NhbW9hOntrZXl3b3JkczpbXCJhbWVyaWNhblwiLFwid3NcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4em8J+HuFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sYW5kb3JyYTp7a2V5d29yZHM6W1wiYWRcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4em8J+HqVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sYW5nb2xhOntrZXl3b3JkczpbXCJhb1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6bwn4e0XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxhbmd1aWxsYTp7a2V5d29yZHM6W1wiYWlcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4em8J+HrlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sYW50YXJjdGljYTp7a2V5d29yZHM6W1wiYXFcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4em8J+HtlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sYW50aWd1YV9iYXJidWRhOntrZXl3b3JkczpbXCJhbnRpZ3VhXCIsXCJiYXJidWRhXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HpvCfh6xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGFyZ2VudGluYTp7a2V5d29yZHM6W1wiYXJcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4em8J+Ht1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sYXJtZW5pYTp7a2V5d29yZHM6W1wiYW1cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4em8J+HslwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sYXJ1YmE6e2tleXdvcmRzOltcImF3XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HpvCfh7xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGF1c3RyYWxpYTp7a2V5d29yZHM6W1wiYXVcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4em8J+HulwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sYXVzdHJpYTp7a2V5d29yZHM6W1wiYXRcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4em8J+HuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sYXplcmJhaWphbjp7a2V5d29yZHM6W1wiYXpcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4em8J+Hv1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sYmFoYW1hczp7a2V5d29yZHM6W1wiYnNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4en8J+HuFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sYmFocmFpbjp7a2V5d29yZHM6W1wiYmhcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4en8J+HrVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sYmFuZ2xhZGVzaDp7a2V5d29yZHM6W1wiYmRcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4en8J+HqVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sYmFyYmFkb3M6e2tleXdvcmRzOltcImJiXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hp/Cfh6dcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGJlbGFydXM6e2tleXdvcmRzOltcImJ5XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hp/Cfh75cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGJlbGdpdW06e2tleXdvcmRzOltcImJlXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hp/Cfh6pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGJlbGl6ZTp7a2V5d29yZHM6W1wiYnpcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4en8J+Hv1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sYmVuaW46e2tleXdvcmRzOltcImJqXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hp/Cfh69cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGJlcm11ZGE6e2tleXdvcmRzOltcImJtXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hp/Cfh7JcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGJodXRhbjp7a2V5d29yZHM6W1wiYnRcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4en8J+HuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sYm9saXZpYTp7a2V5d29yZHM6W1wiYm9cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4en8J+HtFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sY2FyaWJiZWFuX25ldGhlcmxhbmRzOntrZXl3b3JkczpbXCJib25haXJlXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hp/Cfh7ZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGJvc25pYV9oZXJ6ZWdvdmluYTp7a2V5d29yZHM6W1wiYm9zbmlhXCIsXCJoZXJ6ZWdvdmluYVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6fwn4emXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxib3Rzd2FuYTp7a2V5d29yZHM6W1wiYndcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4en8J+HvFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sYnJhemlsOntrZXl3b3JkczpbXCJiclwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6fwn4e3XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxicml0aXNoX2luZGlhbl9vY2Vhbl90ZXJyaXRvcnk6e2tleXdvcmRzOltcImJyaXRpc2hcIixcImluZGlhblwiLFwib2NlYW5cIixcInRlcnJpdG9yeVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh67wn4e0XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxicml0aXNoX3Zpcmdpbl9pc2xhbmRzOntrZXl3b3JkczpbXCJicml0aXNoXCIsXCJ2aXJnaW5cIixcImlzbGFuZHNcIixcImJ2aVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7vwn4esXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxicnVuZWk6e2tleXdvcmRzOltcImJuXCIsXCJkYXJ1c3NhbGFtXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hp/Cfh7NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGJ1bGdhcmlhOntrZXl3b3JkczpbXCJiZ1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6fwn4esXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxidXJraW5hX2Zhc286e2tleXdvcmRzOltcImJ1cmtpbmFcIixcImZhc29cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4en8J+Hq1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sYnVydW5kaTp7a2V5d29yZHM6W1wiYmlcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4en8J+HrlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sY2FwZV92ZXJkZTp7a2V5d29yZHM6W1wiY2Fib1wiLFwidmVyZGVcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eo8J+Hu1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sY2FtYm9kaWE6e2tleXdvcmRzOltcImtoXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsPCfh61cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGNhbWVyb29uOntrZXl3b3JkczpbXCJjbVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6jwn4eyXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxjYW5hZGE6e2tleXdvcmRzOltcImNhXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HqPCfh6ZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGNhbmFyeV9pc2xhbmRzOntrZXl3b3JkczpbXCJjYW5hcnlcIixcImlzbGFuZHNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eu8J+HqFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sY2F5bWFuX2lzbGFuZHM6e2tleXdvcmRzOltcImNheW1hblwiLFwiaXNsYW5kc1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Dwn4e+XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxjZW50cmFsX2FmcmljYW5fcmVwdWJsaWM6e2tleXdvcmRzOltcImNlbnRyYWxcIixcImFmcmljYW5cIixcInJlcHVibGljXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HqPCfh6tcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGNoYWQ6e2tleXdvcmRzOltcInRkXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HufCfh6lcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGNoaWxlOntrZXl3b3JkczpbXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HqPCfh7FcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGNuOntrZXl3b3JkczpbXCJjaGluYVwiLFwiY2hpbmVzZVwiLFwicHJjXCIsXCJmbGFnXCIsXCJjb3VudHJ5XCIsXCJuYXRpb25cIixcImJhbm5lclwiXSxjaGFyOlwi8J+HqPCfh7NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGNocmlzdG1hc19pc2xhbmQ6e2tleXdvcmRzOltcImNocmlzdG1hc1wiLFwiaXNsYW5kXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HqPCfh71cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGNvY29zX2lzbGFuZHM6e2tleXdvcmRzOltcImNvY29zXCIsXCJrZWVsaW5nXCIsXCJpc2xhbmRzXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HqPCfh6hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGNvbG9tYmlhOntrZXl3b3JkczpbXCJjb1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6jwn4e0XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxjb21vcm9zOntrZXl3b3JkczpbXCJrbVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Dwn4eyXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxjb25nb19icmF6emF2aWxsZTp7a2V5d29yZHM6W1wiY29uZ29cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eo8J+HrFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sY29uZ29fa2luc2hhc2E6e2tleXdvcmRzOltcImNvbmdvXCIsXCJkZW1vY3JhdGljXCIsXCJyZXB1YmxpY1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6jwn4epXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxjb29rX2lzbGFuZHM6e2tleXdvcmRzOltcImNvb2tcIixcImlzbGFuZHNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eo8J+HsFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sY29zdGFfcmljYTp7a2V5d29yZHM6W1wiY29zdGFcIixcInJpY2FcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eo8J+Ht1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sY3JvYXRpYTp7a2V5d29yZHM6W1wiaHJcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4et8J+Ht1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sY3ViYTp7a2V5d29yZHM6W1wiY3VcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eo8J+HulwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sY3VyYWNhbzp7a2V5d29yZHM6W1wiY3VyYcOnYW9cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eo8J+HvFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sY3lwcnVzOntrZXl3b3JkczpbXCJjeVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6jwn4e+XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxjemVjaF9yZXB1YmxpYzp7a2V5d29yZHM6W1wiY3pcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eo8J+Hv1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZGVubWFyazp7a2V5d29yZHM6W1wiZGtcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ep8J+HsFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZGppYm91dGk6e2tleXdvcmRzOltcImRqXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HqfCfh69cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGRvbWluaWNhOntrZXl3b3JkczpbXCJkbVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6nwn4eyXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxkb21pbmljYW5fcmVwdWJsaWM6e2tleXdvcmRzOltcImRvbWluaWNhblwiLFwicmVwdWJsaWNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ep8J+HtFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZWN1YWRvcjp7a2V5d29yZHM6W1wiZWNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eq8J+HqFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZWd5cHQ6e2tleXdvcmRzOltcImVnXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HqvCfh6xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGVsX3NhbHZhZG9yOntrZXl3b3JkczpbXCJlbFwiLFwic2FsdmFkb3JcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e48J+Hu1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZXF1YXRvcmlhbF9ndWluZWE6e2tleXdvcmRzOltcImVxdWF0b3JpYWxcIixcImduXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrPCfh7ZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGVyaXRyZWE6e2tleXdvcmRzOltcImVyXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HqvCfh7dcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGVzdG9uaWE6e2tleXdvcmRzOltcImVlXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HqvCfh6pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGV0aGlvcGlhOntrZXl3b3JkczpbXCJldFwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6rwn4e5XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxldTp7a2V5d29yZHM6W1wiZXVyb3BlYW5cIixcInVuaW9uXCIsXCJmbGFnXCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6rwn4e6XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxmYWxrbGFuZF9pc2xhbmRzOntrZXl3b3JkczpbXCJmYWxrbGFuZFwiLFwiaXNsYW5kc1wiLFwibWFsdmluYXNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4er8J+HsFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZmFyb2VfaXNsYW5kczp7a2V5d29yZHM6W1wiZmFyb2VcIixcImlzbGFuZHNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4er8J+HtFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZmlqaTp7a2V5d29yZHM6W1wiZmpcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4er8J+Hr1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZmlubGFuZDp7a2V5d29yZHM6W1wiZmlcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4er8J+HrlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZnI6e2tleXdvcmRzOltcImJhbm5lclwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJmcmFuY2VcIixcImZyZW5jaFwiLFwiY291bnRyeVwiXSxjaGFyOlwi8J+Hq/Cfh7dcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGZyZW5jaF9ndWlhbmE6e2tleXdvcmRzOltcImZyZW5jaFwiLFwiZ3VpYW5hXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrPCfh6tcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGZyZW5jaF9wb2x5bmVzaWE6e2tleXdvcmRzOltcImZyZW5jaFwiLFwicG9seW5lc2lhXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HtfCfh6tcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGZyZW5jaF9zb3V0aGVybl90ZXJyaXRvcmllczp7a2V5d29yZHM6W1wiZnJlbmNoXCIsXCJzb3V0aGVyblwiLFwidGVycml0b3JpZXNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e58J+Hq1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZ2Fib246e2tleXdvcmRzOltcImdhXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrPCfh6ZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGdhbWJpYTp7a2V5d29yZHM6W1wiZ21cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4es8J+HslwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZ2VvcmdpYTp7a2V5d29yZHM6W1wiZ2VcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4es8J+HqlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZGU6e2tleXdvcmRzOltcImdlcm1hblwiLFwibmF0aW9uXCIsXCJmbGFnXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6nwn4eqXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxnaGFuYTp7a2V5d29yZHM6W1wiZ2hcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4es8J+HrVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZ2licmFsdGFyOntrZXl3b3JkczpbXCJnaVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6zwn4euXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxncmVlY2U6e2tleXdvcmRzOltcImdyXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrPCfh7dcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGdyZWVubGFuZDp7a2V5d29yZHM6W1wiZ2xcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4es8J+HsVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZ3JlbmFkYTp7a2V5d29yZHM6W1wiZ2RcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4es8J+HqVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZ3VhZGVsb3VwZTp7a2V5d29yZHM6W1wiZ3BcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4es8J+HtVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZ3VhbTp7a2V5d29yZHM6W1wiZ3VcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4es8J+HulwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZ3VhdGVtYWxhOntrZXl3b3JkczpbXCJndFwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6zwn4e5XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxndWVybnNleTp7a2V5d29yZHM6W1wiZ2dcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4es8J+HrFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZ3VpbmVhOntrZXl3b3JkczpbXCJnblwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6zwn4ezXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxndWluZWFfYmlzc2F1OntrZXl3b3JkczpbXCJnd1wiLFwiYmlzc2F1XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrPCfh7xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGd1eWFuYTp7a2V5d29yZHM6W1wiZ3lcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4es8J+HvlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0saGFpdGk6e2tleXdvcmRzOltcImh0XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrfCfh7lcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGhvbmR1cmFzOntrZXl3b3JkczpbXCJoblwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh63wn4ezXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxob25nX2tvbmc6e2tleXdvcmRzOltcImhvbmdcIixcImtvbmdcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4et8J+HsFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0saHVuZ2FyeTp7a2V5d29yZHM6W1wiaHVcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4et8J+HulwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0saWNlbGFuZDp7a2V5d29yZHM6W1wiaXNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eu8J+HuFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0saW5kaWE6e2tleXdvcmRzOltcImluXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrvCfh7NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGluZG9uZXNpYTp7a2V5d29yZHM6W1wiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh67wn4epXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxpcmFuOntrZXl3b3JkczpbXCJpcmFuLFwiLFwiaXNsYW1pY1wiLFwicmVwdWJsaWNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eu8J+Ht1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0saXJhcTp7a2V5d29yZHM6W1wiaXFcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eu8J+HtlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0saXJlbGFuZDp7a2V5d29yZHM6W1wiaWVcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eu8J+HqlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0saXNsZV9vZl9tYW46e2tleXdvcmRzOltcImlzbGVcIixcIm1hblwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh67wn4eyXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxpc3JhZWw6e2tleXdvcmRzOltcImlsXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrvCfh7FcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGl0OntrZXl3b3JkczpbXCJpdGFseVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh67wn4e5XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxjb3RlX2Rpdm9pcmU6e2tleXdvcmRzOltcIml2b3J5XCIsXCJjb2FzdFwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6jwn4euXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxqYW1haWNhOntrZXl3b3JkczpbXCJqbVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6/wn4eyXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxqcDp7a2V5d29yZHM6W1wiamFwYW5lc2VcIixcIm5hdGlvblwiLFwiZmxhZ1wiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ev8J+HtVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0samVyc2V5OntrZXl3b3JkczpbXCJqZVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6/wn4eqXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxqb3JkYW46e2tleXdvcmRzOltcImpvXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hr/Cfh7RcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGthemFraHN0YW46e2tleXdvcmRzOltcImt6XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsPCfh79cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGtlbnlhOntrZXl3b3JkczpbXCJrZVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Dwn4eqXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxraXJpYmF0aTp7a2V5d29yZHM6W1wia2lcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ew8J+HrlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sa29zb3ZvOntrZXl3b3JkczpbXCJ4a1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh73wn4ewXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxrdXdhaXQ6e2tleXdvcmRzOltcImt3XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsPCfh7xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGt5cmd5enN0YW46e2tleXdvcmRzOltcImtnXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsPCfh6xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGxhb3M6e2tleXdvcmRzOltcImxhb1wiLFwiZGVtb2NyYXRpY1wiLFwicmVwdWJsaWNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ex8J+HplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbGF0dmlhOntrZXl3b3JkczpbXCJsdlwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Hwn4e7XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxsZWJhbm9uOntrZXl3b3JkczpbXCJsYlwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Hwn4enXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxsZXNvdGhvOntrZXl3b3JkczpbXCJsc1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Hwn4e4XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxsaWJlcmlhOntrZXl3b3JkczpbXCJsclwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Hwn4e3XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxsaWJ5YTp7a2V5d29yZHM6W1wibHlcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ex8J+HvlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbGllY2h0ZW5zdGVpbjp7a2V5d29yZHM6W1wibGlcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ex8J+HrlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbGl0aHVhbmlhOntrZXl3b3JkczpbXCJsdFwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Hwn4e5XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxsdXhlbWJvdXJnOntrZXl3b3JkczpbXCJsdVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Hwn4e6XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxtYWNhdTp7a2V5d29yZHM6W1wibWFjYW9cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ey8J+HtFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbWFjZWRvbmlhOntrZXl3b3JkczpbXCJtYWNlZG9uaWEsXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsvCfh7BcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG1hZGFnYXNjYXI6e2tleXdvcmRzOltcIm1nXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsvCfh6xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG1hbGF3aTp7a2V5d29yZHM6W1wibXdcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ey8J+HvFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbWFsYXlzaWE6e2tleXdvcmRzOltcIm15XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsvCfh75cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG1hbGRpdmVzOntrZXl3b3JkczpbXCJtdlwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Lwn4e7XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxtYWxpOntrZXl3b3JkczpbXCJtbFwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Lwn4exXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxtYWx0YTp7a2V5d29yZHM6W1wibXRcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ey8J+HuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbWFyc2hhbGxfaXNsYW5kczp7a2V5d29yZHM6W1wibWFyc2hhbGxcIixcImlzbGFuZHNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ey8J+HrVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbWFydGluaXF1ZTp7a2V5d29yZHM6W1wibXFcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ey8J+HtlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbWF1cml0YW5pYTp7a2V5d29yZHM6W1wibXJcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ey8J+Ht1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbWF1cml0aXVzOntrZXl3b3JkczpbXCJtdVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Lwn4e6XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxtYXlvdHRlOntrZXl3b3JkczpbXCJ5dFwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh77wn4e5XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxtZXhpY286e2tleXdvcmRzOltcIm14XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsvCfh71cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG1pY3JvbmVzaWE6e2tleXdvcmRzOltcIm1pY3JvbmVzaWEsXCIsXCJmZWRlcmF0ZWRcIixcInN0YXRlc1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6vwn4eyXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxtb2xkb3ZhOntrZXl3b3JkczpbXCJtb2xkb3ZhLFwiLFwicmVwdWJsaWNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ey8J+HqVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbW9uYWNvOntrZXl3b3JkczpbXCJtY1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Lwn4eoXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxtb25nb2xpYTp7a2V5d29yZHM6W1wibW5cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ey8J+Hs1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbW9udGVuZWdybzp7a2V5d29yZHM6W1wibWVcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ey8J+HqlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbW9udHNlcnJhdDp7a2V5d29yZHM6W1wibXNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ey8J+HuFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbW9yb2Njbzp7a2V5d29yZHM6W1wibWFcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ey8J+HplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbW96YW1iaXF1ZTp7a2V5d29yZHM6W1wibXpcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ey8J+Hv1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbXlhbm1hcjp7a2V5d29yZHM6W1wibW1cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ey8J+HslwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbmFtaWJpYTp7a2V5d29yZHM6W1wibmFcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ez8J+HplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbmF1cnU6e2tleXdvcmRzOltcIm5yXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hs/Cfh7dcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG5lcGFsOntrZXl3b3JkczpbXCJucFwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Pwn4e1XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxuZXRoZXJsYW5kczp7a2V5d29yZHM6W1wibmxcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ez8J+HsVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbmV3X2NhbGVkb25pYTp7a2V5d29yZHM6W1wibmV3XCIsXCJjYWxlZG9uaWFcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ez8J+HqFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbmV3X3plYWxhbmQ6e2tleXdvcmRzOltcIm5ld1wiLFwiemVhbGFuZFwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Pwn4e/XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxuaWNhcmFndWE6e2tleXdvcmRzOltcIm5pXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hs/Cfh65cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG5pZ2VyOntrZXl3b3JkczpbXCJuZVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Pwn4eqXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxuaWdlcmlhOntrZXl3b3JkczpbXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hs/Cfh6xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG5pdWU6e2tleXdvcmRzOltcIm51XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hs/Cfh7pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG5vcmZvbGtfaXNsYW5kOntrZXl3b3JkczpbXCJub3Jmb2xrXCIsXCJpc2xhbmRcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ez8J+Hq1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbm9ydGhlcm5fbWFyaWFuYV9pc2xhbmRzOntrZXl3b3JkczpbXCJub3J0aGVyblwiLFwibWFyaWFuYVwiLFwiaXNsYW5kc1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Lwn4e1XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxub3J0aF9rb3JlYTp7a2V5d29yZHM6W1wibm9ydGhcIixcImtvcmVhXCIsXCJuYXRpb25cIixcImZsYWdcIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsPCfh7VcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG5vcndheTp7a2V5d29yZHM6W1wibm9cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ez8J+HtFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sb21hbjp7a2V5d29yZHM6W1wib21fc3ltYm9sXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HtPCfh7JcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHBha2lzdGFuOntrZXl3b3JkczpbXCJwa1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Xwn4ewXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxwYWxhdTp7a2V5d29yZHM6W1wicHdcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e18J+HvFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0scGFsZXN0aW5pYW5fdGVycml0b3JpZXM6e2tleXdvcmRzOltcInBhbGVzdGluZVwiLFwicGFsZXN0aW5pYW5cIixcInRlcnJpdG9yaWVzXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HtfCfh7hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHBhbmFtYTp7a2V5d29yZHM6W1wicGFcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e18J+HplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0scGFwdWFfbmV3X2d1aW5lYTp7a2V5d29yZHM6W1wicGFwdWFcIixcIm5ld1wiLFwiZ3VpbmVhXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HtfCfh6xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHBhcmFndWF5OntrZXl3b3JkczpbXCJweVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Xwn4e+XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxwZXJ1OntrZXl3b3JkczpbXCJwZVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Xwn4eqXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxwaGlsaXBwaW5lczp7a2V5d29yZHM6W1wicGhcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e18J+HrVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0scGl0Y2Fpcm5faXNsYW5kczp7a2V5d29yZHM6W1wicGl0Y2Fpcm5cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e18J+Hs1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0scG9sYW5kOntrZXl3b3JkczpbXCJwbFwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Xwn4exXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxwb3J0dWdhbDp7a2V5d29yZHM6W1wicHRcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e18J+HuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0scHVlcnRvX3JpY286e2tleXdvcmRzOltcInB1ZXJ0b1wiLFwicmljb1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Xwn4e3XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxxYXRhcjp7a2V5d29yZHM6W1wicWFcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e28J+HplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0scmV1bmlvbjp7a2V5d29yZHM6W1wicsOpdW5pb25cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e38J+HqlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0scm9tYW5pYTp7a2V5d29yZHM6W1wicm9cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e38J+HtFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0scnU6e2tleXdvcmRzOltcInJ1c3NpYW5cIixcImZlZGVyYXRpb25cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e38J+HulwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0scndhbmRhOntrZXl3b3JkczpbXCJyd1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7fwn4e8XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxzdF9iYXJ0aGVsZW15OntrZXl3b3JkczpbXCJzYWludFwiLFwiYmFydGjDqWxlbXlcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4en8J+HsVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sc3RfaGVsZW5hOntrZXl3b3JkczpbXCJzYWludFwiLFwiaGVsZW5hXCIsXCJhc2NlbnNpb25cIixcInRyaXN0YW5cIixcImN1bmhhXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HuPCfh61cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHN0X2tpdHRzX25ldmlzOntrZXl3b3JkczpbXCJzYWludFwiLFwia2l0dHNcIixcIm5ldmlzXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsPCfh7NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHN0X2x1Y2lhOntrZXl3b3JkczpbXCJzYWludFwiLFwibHVjaWFcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ex8J+HqFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sc3RfcGllcnJlX21pcXVlbG9uOntrZXl3b3JkczpbXCJzYWludFwiLFwicGllcnJlXCIsXCJtaXF1ZWxvblwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Xwn4eyXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxzdF92aW5jZW50X2dyZW5hZGluZXM6e2tleXdvcmRzOltcInNhaW50XCIsXCJ2aW5jZW50XCIsXCJncmVuYWRpbmVzXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hu/Cfh6hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHNhbW9hOntrZXl3b3JkczpbXCJ3c1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7zwn4e4XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxzYW5fbWFyaW5vOntrZXl3b3JkczpbXCJzYW5cIixcIm1hcmlub1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7jwn4eyXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxzYW9fdG9tZV9wcmluY2lwZTp7a2V5d29yZHM6W1wic2FvXCIsXCJ0b21lXCIsXCJwcmluY2lwZVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7jwn4e5XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxzYXVkaV9hcmFiaWE6e2tleXdvcmRzOltcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e48J+HplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sc2VuZWdhbDp7a2V5d29yZHM6W1wic25cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e48J+Hs1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sc2VyYmlhOntrZXl3b3JkczpbXCJyc1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7fwn4e4XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxzZXljaGVsbGVzOntrZXl3b3JkczpbXCJzY1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7jwn4eoXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxzaWVycmFfbGVvbmU6e2tleXdvcmRzOltcInNpZXJyYVwiLFwibGVvbmVcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e48J+HsVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sc2luZ2Fwb3JlOntrZXl3b3JkczpbXCJzZ1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7jwn4esXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxzaW50X21hYXJ0ZW46e2tleXdvcmRzOltcInNpbnRcIixcIm1hYXJ0ZW5cIixcImR1dGNoXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HuPCfh71cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHNsb3Zha2lhOntrZXl3b3JkczpbXCJza1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7jwn4ewXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxzbG92ZW5pYTp7a2V5d29yZHM6W1wic2lcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e48J+HrlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sc29sb21vbl9pc2xhbmRzOntrZXl3b3JkczpbXCJzb2xvbW9uXCIsXCJpc2xhbmRzXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HuPCfh6dcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHNvbWFsaWE6e2tleXdvcmRzOltcInNvXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HuPCfh7RcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHNvdXRoX2FmcmljYTp7a2V5d29yZHM6W1wic291dGhcIixcImFmcmljYVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7/wn4emXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxzb3V0aF9nZW9yZ2lhX3NvdXRoX3NhbmR3aWNoX2lzbGFuZHM6e2tleXdvcmRzOltcInNvdXRoXCIsXCJnZW9yZ2lhXCIsXCJzYW5kd2ljaFwiLFwiaXNsYW5kc1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6zwn4e4XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxrcjp7a2V5d29yZHM6W1wic291dGhcIixcImtvcmVhXCIsXCJuYXRpb25cIixcImZsYWdcIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsPCfh7dcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHNvdXRoX3N1ZGFuOntrZXl3b3JkczpbXCJzb3V0aFwiLFwic2RcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e48J+HuFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZXM6e2tleXdvcmRzOltcInNwYWluXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HqvCfh7hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHNyaV9sYW5rYTp7a2V5d29yZHM6W1wic3JpXCIsXCJsYW5rYVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Hwn4ewXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxzdWRhbjp7a2V5d29yZHM6W1wic2RcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e48J+HqVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sc3VyaW5hbWU6e2tleXdvcmRzOltcInNyXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HuPCfh7dcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHN3YXppbGFuZDp7a2V5d29yZHM6W1wic3pcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e48J+Hv1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sc3dlZGVuOntrZXl3b3JkczpbXCJzZVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7jwn4eqXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxzd2l0emVybGFuZDp7a2V5d29yZHM6W1wiY2hcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eo8J+HrVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sc3lyaWE6e2tleXdvcmRzOltcInN5cmlhblwiLFwiYXJhYlwiLFwicmVwdWJsaWNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e48J+HvlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sdGFpd2FuOntrZXl3b3JkczpbXCJ0d1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7nwn4e8XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSx0YWppa2lzdGFuOntrZXl3b3JkczpbXCJ0alwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7nwn4evXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSx0YW56YW5pYTp7a2V5d29yZHM6W1widGFuemFuaWEsXCIsXCJ1bml0ZWRcIixcInJlcHVibGljXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HufCfh79cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHRoYWlsYW5kOntrZXl3b3JkczpbXCJ0aFwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7nwn4etXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSx0aW1vcl9sZXN0ZTp7a2V5d29yZHM6W1widGltb3JcIixcImxlc3RlXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HufCfh7FcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHRvZ286e2tleXdvcmRzOltcInRnXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HufCfh6xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHRva2VsYXU6e2tleXdvcmRzOltcInRrXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HufCfh7BcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHRvbmdhOntrZXl3b3JkczpbXCJ0b1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7nwn4e0XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSx0cmluaWRhZF90b2JhZ286e2tleXdvcmRzOltcInRyaW5pZGFkXCIsXCJ0b2JhZ29cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e58J+HuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sdHVuaXNpYTp7a2V5d29yZHM6W1widG5cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e58J+Hs1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sdHI6e2tleXdvcmRzOltcInR1cmtleVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7nwn4e3XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSx0dXJrbWVuaXN0YW46e2tleXdvcmRzOltcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e58J+HslwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sdHVya3NfY2FpY29zX2lzbGFuZHM6e2tleXdvcmRzOltcInR1cmtzXCIsXCJjYWljb3NcIixcImlzbGFuZHNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e58J+HqFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sdHV2YWx1OntrZXl3b3JkczpbXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HufCfh7tcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHVnYW5kYTp7a2V5d29yZHM6W1widWdcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e68J+HrFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sdWtyYWluZTp7a2V5d29yZHM6W1widWFcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e68J+HplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sdW5pdGVkX2FyYWJfZW1pcmF0ZXM6e2tleXdvcmRzOltcInVuaXRlZFwiLFwiYXJhYlwiLFwiZW1pcmF0ZXNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4em8J+HqlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sdWs6e2tleXdvcmRzOltcInVuaXRlZFwiLFwia2luZ2RvbVwiLFwiZ3JlYXRcIixcImJyaXRhaW5cIixcIm5vcnRoZXJuXCIsXCJpcmVsYW5kXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiLFwiYnJpdGlzaFwiLFwiVUtcIixcImVuZ2xpc2hcIixcImVuZ2xhbmRcIixcInVuaW9uIGphY2tcIl0sY2hhcjpcIvCfh6zwn4enXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxlbmdsYW5kOntrZXl3b3JkczpbXCJmbGFnXCIsXCJlbmdsaXNoXCJdLGNoYXI6XCLwn4+086CBp/OggaLzoIGl86CBrvOggafzoIG/XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxzY290bGFuZDp7a2V5d29yZHM6W1wiZmxhZ1wiLFwic2NvdHRpc2hcIl0sY2hhcjpcIvCfj7TzoIGn86CBovOggbPzoIGj86CBtPOggb9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHdhbGVzOntrZXl3b3JkczpbXCJmbGFnXCIsXCJ3ZWxzaFwiXSxjaGFyOlwi8J+PtPOggafzoIGi86CBt/OggazzoIGz86CBv1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sdXM6e2tleXdvcmRzOltcInVuaXRlZFwiLFwic3RhdGVzXCIsXCJhbWVyaWNhXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HuvCfh7hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHVzX3Zpcmdpbl9pc2xhbmRzOntrZXl3b3JkczpbXCJ2aXJnaW5cIixcImlzbGFuZHNcIixcInVzXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hu/Cfh65cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHVydWd1YXk6e2tleXdvcmRzOltcInV5XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HuvCfh75cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHV6YmVraXN0YW46e2tleXdvcmRzOltcInV6XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HuvCfh79cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHZhbnVhdHU6e2tleXdvcmRzOltcInZ1XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hu/Cfh7pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHZhdGljYW5fY2l0eTp7a2V5d29yZHM6W1widmF0aWNhblwiLFwiY2l0eVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7vwn4emXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSx2ZW5lenVlbGE6e2tleXdvcmRzOltcInZlXCIsXCJib2xpdmFyaWFuXCIsXCJyZXB1YmxpY1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7vwn4eqXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSx2aWV0bmFtOntrZXl3b3JkczpbXCJ2aWV0XCIsXCJuYW1cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e78J+Hs1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sd2FsbGlzX2Z1dHVuYTp7a2V5d29yZHM6W1wid2FsbGlzXCIsXCJmdXR1bmFcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e88J+Hq1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sd2VzdGVybl9zYWhhcmE6e2tleXdvcmRzOltcIndlc3Rlcm5cIixcInNhaGFyYVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6rwn4etXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSx5ZW1lbjp7a2V5d29yZHM6W1wieWVcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e+8J+HqlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0semFtYmlhOntrZXl3b3JkczpbXCJ6bVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7/wn4eyXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSx6aW1iYWJ3ZTp7a2V5d29yZHM6W1wiendcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e/8J+HvFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sdW5pdGVkX25hdGlvbnM6e2tleXdvcmRzOltcInVuXCIsXCJmbGFnXCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7rwn4ezXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxwaXJhdGVfZmxhZzp7a2V5d29yZHM6W1wic2t1bGxcIixcImNyb3NzYm9uZXNcIixcImZsYWdcIixcImJhbm5lclwiXSxjaGFyOlwi8J+PtOKAjeKYoO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn19KTsiLCIvKipcbiAqIFRpbnlNQ0UgdmVyc2lvbiA2LjcuMCAoMjAyMy0wOC0zMClcbiAqL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBnbG9iYWwkMSA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLlBsdWdpbk1hbmFnZXInKTtcblxuICAgIGNvbnN0IGVxID0gdCA9PiBhID0+IHQgPT09IGE7XG4gICAgY29uc3QgaXNOdWxsID0gZXEobnVsbCk7XG4gICAgY29uc3QgaXNVbmRlZmluZWQgPSBlcSh1bmRlZmluZWQpO1xuICAgIGNvbnN0IGlzTnVsbGFibGUgPSBhID0+IGEgPT09IG51bGwgfHwgYSA9PT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGlzTm9uTnVsbGFibGUgPSBhID0+ICFpc051bGxhYmxlKGEpO1xuXG4gICAgY29uc3Qgbm9vcCA9ICgpID0+IHtcbiAgICB9O1xuICAgIGNvbnN0IGNvbnN0YW50ID0gdmFsdWUgPT4ge1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG5ldmVyID0gY29uc3RhbnQoZmFsc2UpO1xuXG4gICAgY2xhc3MgT3B0aW9uYWwge1xuICAgICAgY29uc3RydWN0b3IodGFnLCB2YWx1ZSkge1xuICAgICAgICB0aGlzLnRhZyA9IHRhZztcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgc3RhdGljIHNvbWUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPcHRpb25hbCh0cnVlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBzdGF0aWMgbm9uZSgpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNpbmdsZXRvbk5vbmU7XG4gICAgICB9XG4gICAgICBmb2xkKG9uTm9uZSwgb25Tb21lKSB7XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgIHJldHVybiBvblNvbWUodGhpcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG9uTm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpc1NvbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZztcbiAgICAgIH1cbiAgICAgIGlzTm9uZSgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnRhZztcbiAgICAgIH1cbiAgICAgIG1hcChtYXBwZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUobWFwcGVyKHRoaXMudmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBiaW5kKGJpbmRlcikge1xuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICByZXR1cm4gYmluZGVyKHRoaXMudmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV4aXN0cyhwcmVkaWNhdGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnICYmIHByZWRpY2F0ZSh0aGlzLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZvcmFsbChwcmVkaWNhdGUpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnRhZyB8fCBwcmVkaWNhdGUodGhpcy52YWx1ZSk7XG4gICAgICB9XG4gICAgICBmaWx0ZXIocHJlZGljYXRlKSB7XG4gICAgICAgIGlmICghdGhpcy50YWcgfHwgcHJlZGljYXRlKHRoaXMudmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZ2V0T3IocmVwbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gdGhpcy52YWx1ZSA6IHJlcGxhY2VtZW50O1xuICAgICAgfVxuICAgICAgb3IocmVwbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gdGhpcyA6IHJlcGxhY2VtZW50O1xuICAgICAgfVxuICAgICAgZ2V0T3JUaHVuayh0aHVuaykge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzLnZhbHVlIDogdGh1bmsoKTtcbiAgICAgIH1cbiAgICAgIG9yVGh1bmsodGh1bmspIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gdGhpcyA6IHRodW5rKCk7XG4gICAgICB9XG4gICAgICBnZXRPckRpZShtZXNzYWdlKSB7XG4gICAgICAgIGlmICghdGhpcy50YWcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSAhPT0gbnVsbCAmJiBtZXNzYWdlICE9PSB2b2lkIDAgPyBtZXNzYWdlIDogJ0NhbGxlZCBnZXRPckRpZSBvbiBOb25lJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0YXRpYyBmcm9tKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpc05vbk51bGxhYmxlKHZhbHVlKSA/IE9wdGlvbmFsLnNvbWUodmFsdWUpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgICAgZ2V0T3JOdWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzLnZhbHVlIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIGdldE9yVW5kZWZpbmVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgIH1cbiAgICAgIGVhY2god29ya2VyKSB7XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgIHdvcmtlcih0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdG9BcnJheSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gW3RoaXMudmFsdWVdIDogW107XG4gICAgICB9XG4gICAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gYHNvbWUoJHsgdGhpcy52YWx1ZSB9KWAgOiAnbm9uZSgpJztcbiAgICAgIH1cbiAgICB9XG4gICAgT3B0aW9uYWwuc2luZ2xldG9uTm9uZSA9IG5ldyBPcHRpb25hbChmYWxzZSk7XG5cbiAgICBjb25zdCBleGlzdHMgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IG1hcCQxID0gKHhzLCBmKSA9PiB7XG4gICAgICBjb25zdCBsZW4gPSB4cy5sZW5ndGg7XG4gICAgICBjb25zdCByID0gbmV3IEFycmF5KGxlbik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgcltpXSA9IGYoeCwgaSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IGVhY2gkMSA9ICh4cywgZikgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgZih4LCBpKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgQ2VsbCA9IGluaXRpYWwgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gaW5pdGlhbDtcbiAgICAgIGNvbnN0IGdldCA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldCA9IHYgPT4ge1xuICAgICAgICB2YWx1ZSA9IHY7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0LFxuICAgICAgICBzZXRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGxhc3QgPSAoZm4sIHJhdGUpID0+IHtcbiAgICAgIGxldCB0aW1lciA9IG51bGw7XG4gICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGlmICghaXNOdWxsKHRpbWVyKSkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgdGhyb3R0bGUgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgIH0sIHJhdGUpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNhbmNlbCxcbiAgICAgICAgdGhyb3R0bGVcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGluc2VydEVtb3RpY29uID0gKGVkaXRvciwgY2gpID0+IHtcbiAgICAgIGVkaXRvci5pbnNlcnRDb250ZW50KGNoKTtcbiAgICB9O1xuXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzO1xuICAgIGNvbnN0IGhhc093blByb3BlcnR5ID0gT2JqZWN0Lmhhc093blByb3BlcnR5O1xuICAgIGNvbnN0IGVhY2ggPSAob2JqLCBmKSA9PiB7XG4gICAgICBjb25zdCBwcm9wcyA9IGtleXMob2JqKTtcbiAgICAgIGZvciAobGV0IGsgPSAwLCBsZW4gPSBwcm9wcy5sZW5ndGg7IGsgPCBsZW47IGsrKykge1xuICAgICAgICBjb25zdCBpID0gcHJvcHNba107XG4gICAgICAgIGNvbnN0IHggPSBvYmpbaV07XG4gICAgICAgIGYoeCwgaSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBtYXAgPSAob2JqLCBmKSA9PiB7XG4gICAgICByZXR1cm4gdHVwbGVNYXAob2JqLCAoeCwgaSkgPT4gKHtcbiAgICAgICAgazogaSxcbiAgICAgICAgdjogZih4LCBpKVxuICAgICAgfSkpO1xuICAgIH07XG4gICAgY29uc3QgdHVwbGVNYXAgPSAob2JqLCBmKSA9PiB7XG4gICAgICBjb25zdCByID0ge307XG4gICAgICBlYWNoKG9iaiwgKHgsIGkpID0+IHtcbiAgICAgICAgY29uc3QgdHVwbGUgPSBmKHgsIGkpO1xuICAgICAgICByW3R1cGxlLmtdID0gdHVwbGUudjtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBoYXMgPSAob2JqLCBrZXkpID0+IGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xuXG4gICAgY29uc3Qgc2hhbGxvdyA9IChvbGQsIG51KSA9PiB7XG4gICAgICByZXR1cm4gbnU7XG4gICAgfTtcbiAgICBjb25zdCBiYXNlTWVyZ2UgPSBtZXJnZXIgPT4ge1xuICAgICAgcmV0dXJuICguLi5vYmplY3RzKSA9PiB7XG4gICAgICAgIGlmIChvYmplY3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgbWVyZ2UgemVybyBvYmplY3RzYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV0ID0ge307XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgb2JqZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGNvbnN0IGN1ck9iamVjdCA9IG9iamVjdHNbal07XG4gICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY3VyT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoaGFzKGN1ck9iamVjdCwga2V5KSkge1xuICAgICAgICAgICAgICByZXRba2V5XSA9IG1lcmdlcihyZXRba2V5XSwgY3VyT2JqZWN0W2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG1lcmdlID0gYmFzZU1lcmdlKHNoYWxsb3cpO1xuXG4gICAgY29uc3Qgc2luZ2xldG9uID0gZG9SZXZva2UgPT4ge1xuICAgICAgY29uc3Qgc3ViamVjdCA9IENlbGwoT3B0aW9uYWwubm9uZSgpKTtcbiAgICAgIGNvbnN0IHJldm9rZSA9ICgpID0+IHN1YmplY3QuZ2V0KCkuZWFjaChkb1Jldm9rZSk7XG4gICAgICBjb25zdCBjbGVhciA9ICgpID0+IHtcbiAgICAgICAgcmV2b2tlKCk7XG4gICAgICAgIHN1YmplY3Quc2V0KE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNTZXQgPSAoKSA9PiBzdWJqZWN0LmdldCgpLmlzU29tZSgpO1xuICAgICAgY29uc3QgZ2V0ID0gKCkgPT4gc3ViamVjdC5nZXQoKTtcbiAgICAgIGNvbnN0IHNldCA9IHMgPT4ge1xuICAgICAgICByZXZva2UoKTtcbiAgICAgICAgc3ViamVjdC5zZXQoT3B0aW9uYWwuc29tZShzKSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xlYXIsXG4gICAgICAgIGlzU2V0LFxuICAgICAgICBnZXQsXG4gICAgICAgIHNldFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHZhbHVlID0gKCkgPT4ge1xuICAgICAgY29uc3Qgc3ViamVjdCA9IHNpbmdsZXRvbihub29wKTtcbiAgICAgIGNvbnN0IG9uID0gZiA9PiBzdWJqZWN0LmdldCgpLmVhY2goZik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdWJqZWN0LFxuICAgICAgICBvblxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2hlY2tSYW5nZSA9IChzdHIsIHN1YnN0ciwgc3RhcnQpID0+IHN1YnN0ciA9PT0gJycgfHwgc3RyLmxlbmd0aCA+PSBzdWJzdHIubGVuZ3RoICYmIHN0ci5zdWJzdHIoc3RhcnQsIHN0YXJ0ICsgc3Vic3RyLmxlbmd0aCkgPT09IHN1YnN0cjtcbiAgICBjb25zdCBjb250YWlucyA9IChzdHIsIHN1YnN0ciwgc3RhcnQgPSAwLCBlbmQpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IHN0ci5pbmRleE9mKHN1YnN0ciwgc3RhcnQpO1xuICAgICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKGVuZCkgPyB0cnVlIDogaWR4ICsgc3Vic3RyLmxlbmd0aCA8PSBlbmQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzdGFydHNXaXRoID0gKHN0ciwgcHJlZml4KSA9PiB7XG4gICAgICByZXR1cm4gY2hlY2tSYW5nZShzdHIsIHByZWZpeCwgMCk7XG4gICAgfTtcblxuICAgIHZhciBnbG9iYWwgPSB0aW55bWNlLnV0aWwuVG9vbHMucmVzb2x2ZSgndGlueW1jZS5SZXNvdXJjZScpO1xuXG4gICAgY29uc3QgREVGQVVMVF9JRCA9ICd0aW55bWNlLnBsdWdpbnMuZW1vdGljb25zJztcbiAgICBjb25zdCBvcHRpb24gPSBuYW1lID0+IGVkaXRvciA9PiBlZGl0b3Iub3B0aW9ucy5nZXQobmFtZSk7XG4gICAgY29uc3QgcmVnaXN0ZXIkMiA9IChlZGl0b3IsIHBsdWdpblVybCkgPT4ge1xuICAgICAgY29uc3QgcmVnaXN0ZXJPcHRpb24gPSBlZGl0b3Iub3B0aW9ucy5yZWdpc3RlcjtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdlbW90aWNvbnNfZGF0YWJhc2UnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICdlbW9qaXMnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdlbW90aWNvbnNfZGF0YWJhc2VfdXJsJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiBgJHsgcGx1Z2luVXJsIH0vanMvJHsgZ2V0RW1vamlEYXRhYmFzZShlZGl0b3IpIH0keyBlZGl0b3Iuc3VmZml4IH0uanNgXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdlbW90aWNvbnNfZGF0YWJhc2VfaWQnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6IERFRkFVTFRfSURcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2Vtb3RpY29uc19hcHBlbmQnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ29iamVjdCcsXG4gICAgICAgIGRlZmF1bHQ6IHt9XG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdlbW90aWNvbnNfaW1hZ2VzX3VybCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJ2h0dHBzOi8vdHdlbW9qaS5tYXhjZG4uY29tL3YvMTMuMC4xLzcyeDcyLydcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0RW1vamlEYXRhYmFzZSA9IG9wdGlvbignZW1vdGljb25zX2RhdGFiYXNlJyk7XG4gICAgY29uc3QgZ2V0RW1vamlEYXRhYmFzZVVybCA9IG9wdGlvbignZW1vdGljb25zX2RhdGFiYXNlX3VybCcpO1xuICAgIGNvbnN0IGdldEVtb2ppRGF0YWJhc2VJZCA9IG9wdGlvbignZW1vdGljb25zX2RhdGFiYXNlX2lkJyk7XG4gICAgY29uc3QgZ2V0QXBwZW5kZWRFbW9qaSA9IG9wdGlvbignZW1vdGljb25zX2FwcGVuZCcpO1xuICAgIGNvbnN0IGdldEVtb2ppSW1hZ2VVcmwgPSBvcHRpb24oJ2Vtb3RpY29uc19pbWFnZXNfdXJsJyk7XG5cbiAgICBjb25zdCBBTExfQ0FURUdPUlkgPSAnQWxsJztcbiAgICBjb25zdCBjYXRlZ29yeU5hbWVNYXAgPSB7XG4gICAgICBzeW1ib2xzOiAnU3ltYm9scycsXG4gICAgICBwZW9wbGU6ICdQZW9wbGUnLFxuICAgICAgYW5pbWFsc19hbmRfbmF0dXJlOiAnQW5pbWFscyBhbmQgTmF0dXJlJyxcbiAgICAgIGZvb2RfYW5kX2RyaW5rOiAnRm9vZCBhbmQgRHJpbmsnLFxuICAgICAgYWN0aXZpdHk6ICdBY3Rpdml0eScsXG4gICAgICB0cmF2ZWxfYW5kX3BsYWNlczogJ1RyYXZlbCBhbmQgUGxhY2VzJyxcbiAgICAgIG9iamVjdHM6ICdPYmplY3RzJyxcbiAgICAgIGZsYWdzOiAnRmxhZ3MnLFxuICAgICAgdXNlcjogJ1VzZXIgRGVmaW5lZCdcbiAgICB9O1xuICAgIGNvbnN0IHRyYW5zbGF0ZUNhdGVnb3J5ID0gKGNhdGVnb3JpZXMsIG5hbWUpID0+IGhhcyhjYXRlZ29yaWVzLCBuYW1lKSA/IGNhdGVnb3JpZXNbbmFtZV0gOiBuYW1lO1xuICAgIGNvbnN0IGdldFVzZXJEZWZpbmVkRW1vamkgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgdXNlckRlZmluZWRFbW90aWNvbnMgPSBnZXRBcHBlbmRlZEVtb2ppKGVkaXRvcik7XG4gICAgICByZXR1cm4gbWFwKHVzZXJEZWZpbmVkRW1vdGljb25zLCB2YWx1ZSA9PiAoe1xuICAgICAgICBrZXl3b3JkczogW10sXG4gICAgICAgIGNhdGVnb3J5OiAndXNlcicsXG4gICAgICAgIC4uLnZhbHVlXG4gICAgICB9KSk7XG4gICAgfTtcbiAgICBjb25zdCBpbml0RGF0YWJhc2UgPSAoZWRpdG9yLCBkYXRhYmFzZVVybCwgZGF0YWJhc2VJZCkgPT4ge1xuICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IHZhbHVlKCk7XG4gICAgICBjb25zdCBhbGwgPSB2YWx1ZSgpO1xuICAgICAgY29uc3QgZW1vamlJbWFnZXNVcmwgPSBnZXRFbW9qaUltYWdlVXJsKGVkaXRvcik7XG4gICAgICBjb25zdCBnZXRFbW9qaSA9IGxpYiA9PiB7XG4gICAgICAgIGlmIChzdGFydHNXaXRoKGxpYi5jaGFyLCAnPGltZycpKSB7XG4gICAgICAgICAgcmV0dXJuIGxpYi5jaGFyLnJlcGxhY2UoL3NyYz1cIihbXlwiXSspXCIvLCAobWF0Y2gsIHVybCkgPT4gYHNyYz1cIiR7IGVtb2ppSW1hZ2VzVXJsIH0keyB1cmwgfVwiYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGxpYi5jaGFyO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgcHJvY2Vzc0Vtb2ppcyA9IGVtb2ppcyA9PiB7XG4gICAgICAgIGNvbnN0IGNhdHMgPSB7fTtcbiAgICAgICAgY29uc3QgZXZlcnl0aGluZyA9IFtdO1xuICAgICAgICBlYWNoKGVtb2ppcywgKGxpYiwgdGl0bGUpID0+IHtcbiAgICAgICAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAga2V5d29yZHM6IGxpYi5rZXl3b3JkcyxcbiAgICAgICAgICAgIGNoYXI6IGdldEVtb2ppKGxpYiksXG4gICAgICAgICAgICBjYXRlZ29yeTogdHJhbnNsYXRlQ2F0ZWdvcnkoY2F0ZWdvcnlOYW1lTWFwLCBsaWIuY2F0ZWdvcnkpXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50ID0gY2F0c1tlbnRyeS5jYXRlZ29yeV0gIT09IHVuZGVmaW5lZCA/IGNhdHNbZW50cnkuY2F0ZWdvcnldIDogW107XG4gICAgICAgICAgY2F0c1tlbnRyeS5jYXRlZ29yeV0gPSBjdXJyZW50LmNvbmNhdChbZW50cnldKTtcbiAgICAgICAgICBldmVyeXRoaW5nLnB1c2goZW50cnkpO1xuICAgICAgICB9KTtcbiAgICAgICAgY2F0ZWdvcmllcy5zZXQoY2F0cyk7XG4gICAgICAgIGFsbC5zZXQoZXZlcnl0aGluZyk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLm9uKCdpbml0JywgKCkgPT4ge1xuICAgICAgICBnbG9iYWwubG9hZChkYXRhYmFzZUlkLCBkYXRhYmFzZVVybCkudGhlbihlbW9qaXMgPT4ge1xuICAgICAgICAgIGNvbnN0IHVzZXJFbW9qaXMgPSBnZXRVc2VyRGVmaW5lZEVtb2ppKGVkaXRvcik7XG4gICAgICAgICAgcHJvY2Vzc0Vtb2ppcyhtZXJnZShlbW9qaXMsIHVzZXJFbW9qaXMpKTtcbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgRmFpbGVkIHRvIGxvYWQgZW1vamlzOiAkeyBlcnIgfWApO1xuICAgICAgICAgIGNhdGVnb3JpZXMuc2V0KHt9KTtcbiAgICAgICAgICBhbGwuc2V0KFtdKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGxpc3RDYXRlZ29yeSA9IGNhdGVnb3J5ID0+IHtcbiAgICAgICAgaWYgKGNhdGVnb3J5ID09PSBBTExfQ0FURUdPUlkpIHtcbiAgICAgICAgICByZXR1cm4gbGlzdEFsbCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYXRlZ29yaWVzLmdldCgpLmJpbmQoY2F0cyA9PiBPcHRpb25hbC5mcm9tKGNhdHNbY2F0ZWdvcnldKSkuZ2V0T3IoW10pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGxpc3RBbGwgPSAoKSA9PiBhbGwuZ2V0KCkuZ2V0T3IoW10pO1xuICAgICAgY29uc3QgbGlzdENhdGVnb3JpZXMgPSAoKSA9PiBbQUxMX0NBVEVHT1JZXS5jb25jYXQoa2V5cyhjYXRlZ29yaWVzLmdldCgpLmdldE9yKHt9KSkpO1xuICAgICAgY29uc3Qgd2FpdEZvckxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGlmIChoYXNMb2FkZWQoKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGxldCBudW1SZXRyaWVzID0gMTU7XG4gICAgICAgICAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGhhc0xvYWRlZCgpKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBudW1SZXRyaWVzLS07XG4gICAgICAgICAgICAgICAgaWYgKG51bVJldHJpZXMgPCAwKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQ291bGQgbm90IGxvYWQgZW1vamlzIGZyb20gdXJsOiAnICsgZGF0YWJhc2VVcmwpO1xuICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgICByZWplY3QoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGhhc0xvYWRlZCA9ICgpID0+IGNhdGVnb3JpZXMuaXNTZXQoKSAmJiBhbGwuaXNTZXQoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxpc3RDYXRlZ29yaWVzLFxuICAgICAgICBoYXNMb2FkZWQsXG4gICAgICAgIHdhaXRGb3JMb2FkLFxuICAgICAgICBsaXN0QWxsLFxuICAgICAgICBsaXN0Q2F0ZWdvcnlcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGVtb2ppTWF0Y2hlcyA9IChlbW9qaSwgbG93ZXJDYXNlUGF0dGVybikgPT4gY29udGFpbnMoZW1vamkudGl0bGUudG9Mb3dlckNhc2UoKSwgbG93ZXJDYXNlUGF0dGVybikgfHwgZXhpc3RzKGVtb2ppLmtleXdvcmRzLCBrID0+IGNvbnRhaW5zKGsudG9Mb3dlckNhc2UoKSwgbG93ZXJDYXNlUGF0dGVybikpO1xuICAgIGNvbnN0IGVtb2ppc0Zyb20gPSAobGlzdCwgcGF0dGVybiwgbWF4UmVzdWx0cykgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IFtdO1xuICAgICAgY29uc3QgbG93ZXJDYXNlUGF0dGVybiA9IHBhdHRlcm4udG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IHJlYWNoZWRMaW1pdCA9IG1heFJlc3VsdHMuZm9sZCgoKSA9PiBuZXZlciwgbWF4ID0+IHNpemUgPT4gc2l6ZSA+PSBtYXgpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCB8fCBlbW9qaU1hdGNoZXMobGlzdFtpXSwgbG93ZXJDYXNlUGF0dGVybikpIHtcbiAgICAgICAgICBtYXRjaGVzLnB1c2goe1xuICAgICAgICAgICAgdmFsdWU6IGxpc3RbaV0uY2hhcixcbiAgICAgICAgICAgIHRleHQ6IGxpc3RbaV0udGl0bGUsXG4gICAgICAgICAgICBpY29uOiBsaXN0W2ldLmNoYXJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAocmVhY2hlZExpbWl0KG1hdGNoZXMubGVuZ3RoKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbWF0Y2hlcztcbiAgICB9O1xuXG4gICAgY29uc3QgcGF0dGVybk5hbWUgPSAncGF0dGVybic7XG4gICAgY29uc3Qgb3BlbiA9IChlZGl0b3IsIGRhdGFiYXNlKSA9PiB7XG4gICAgICBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgICAgIHBhdHRlcm46ICcnLFxuICAgICAgICByZXN1bHRzOiBlbW9qaXNGcm9tKGRhdGFiYXNlLmxpc3RBbGwoKSwgJycsIE9wdGlvbmFsLnNvbWUoMzAwKSlcbiAgICAgIH07XG4gICAgICBjb25zdCBjdXJyZW50VGFiID0gQ2VsbChBTExfQ0FURUdPUlkpO1xuICAgICAgY29uc3Qgc2NhbiA9IGRpYWxvZ0FwaSA9PiB7XG4gICAgICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSBkaWFsb2dBcGkuZ2V0RGF0YSgpO1xuICAgICAgICBjb25zdCBjYXRlZ29yeSA9IGN1cnJlbnRUYWIuZ2V0KCk7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBkYXRhYmFzZS5saXN0Q2F0ZWdvcnkoY2F0ZWdvcnkpO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gZW1vamlzRnJvbShjYW5kaWRhdGVzLCBkaWFsb2dEYXRhW3BhdHRlcm5OYW1lXSwgY2F0ZWdvcnkgPT09IEFMTF9DQVRFR09SWSA/IE9wdGlvbmFsLnNvbWUoMzAwKSA6IE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgICAgIGRpYWxvZ0FwaS5zZXREYXRhKHsgcmVzdWx0cyB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCB1cGRhdGVGaWx0ZXIgPSBsYXN0KGRpYWxvZ0FwaSA9PiB7XG4gICAgICAgIHNjYW4oZGlhbG9nQXBpKTtcbiAgICAgIH0sIDIwMCk7XG4gICAgICBjb25zdCBzZWFyY2hGaWVsZCA9IHtcbiAgICAgICAgbGFiZWw6ICdTZWFyY2gnLFxuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBuYW1lOiBwYXR0ZXJuTmFtZVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdHNGaWVsZCA9IHtcbiAgICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nLFxuICAgICAgICBuYW1lOiAncmVzdWx0cydcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRJbml0aWFsU3RhdGUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgICAgdHlwZTogJ3RhYnBhbmVsJyxcbiAgICAgICAgICB0YWJzOiBtYXAkMShkYXRhYmFzZS5saXN0Q2F0ZWdvcmllcygpLCBjYXQgPT4gKHtcbiAgICAgICAgICAgIHRpdGxlOiBjYXQsXG4gICAgICAgICAgICBuYW1lOiBjYXQsXG4gICAgICAgICAgICBpdGVtczogW1xuICAgICAgICAgICAgICBzZWFyY2hGaWVsZCxcbiAgICAgICAgICAgICAgcmVzdWx0c0ZpZWxkXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSkpXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdGl0bGU6ICdFbW9qaXMnLFxuICAgICAgICAgIHNpemU6ICdub3JtYWwnLFxuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgaW5pdGlhbERhdGE6IGluaXRpYWxTdGF0ZSxcbiAgICAgICAgICBvblRhYkNoYW5nZTogKGRpYWxvZ0FwaSwgZGV0YWlscykgPT4ge1xuICAgICAgICAgICAgY3VycmVudFRhYi5zZXQoZGV0YWlscy5uZXdUYWJOYW1lKTtcbiAgICAgICAgICAgIHVwZGF0ZUZpbHRlci50aHJvdHRsZShkaWFsb2dBcGkpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25DaGFuZ2U6IHVwZGF0ZUZpbHRlci50aHJvdHRsZSxcbiAgICAgICAgICBvbkFjdGlvbjogKGRpYWxvZ0FwaSwgYWN0aW9uRGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKGFjdGlvbkRhdGEubmFtZSA9PT0gJ3Jlc3VsdHMnKSB7XG4gICAgICAgICAgICAgIGluc2VydEVtb3RpY29uKGVkaXRvciwgYWN0aW9uRGF0YS52YWx1ZSk7XG4gICAgICAgICAgICAgIGRpYWxvZ0FwaS5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYnV0dG9uczogW3tcbiAgICAgICAgICAgICAgdHlwZTogJ2NhbmNlbCcsXG4gICAgICAgICAgICAgIHRleHQ6ICdDbG9zZScsXG4gICAgICAgICAgICAgIHByaW1hcnk6IHRydWVcbiAgICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uc3QgZGlhbG9nQXBpID0gZWRpdG9yLndpbmRvd01hbmFnZXIub3BlbihnZXRJbml0aWFsU3RhdGUoKSk7XG4gICAgICBkaWFsb2dBcGkuZm9jdXMocGF0dGVybk5hbWUpO1xuICAgICAgaWYgKCFkYXRhYmFzZS5oYXNMb2FkZWQoKSkge1xuICAgICAgICBkaWFsb2dBcGkuYmxvY2soJ0xvYWRpbmcgZW1vamlzLi4uJyk7XG4gICAgICAgIGRhdGFiYXNlLndhaXRGb3JMb2FkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgZGlhbG9nQXBpLnJlZGlhbChnZXRJbml0aWFsU3RhdGUoKSk7XG4gICAgICAgICAgdXBkYXRlRmlsdGVyLnRocm90dGxlKGRpYWxvZ0FwaSk7XG4gICAgICAgICAgZGlhbG9nQXBpLmZvY3VzKHBhdHRlcm5OYW1lKTtcbiAgICAgICAgICBkaWFsb2dBcGkudW5ibG9jaygpO1xuICAgICAgICB9KS5jYXRjaChfZXJyID0+IHtcbiAgICAgICAgICBkaWFsb2dBcGkucmVkaWFsKHtcbiAgICAgICAgICAgIHRpdGxlOiAnRW1vamlzJyxcbiAgICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3BhbmVsJyxcbiAgICAgICAgICAgICAgaXRlbXM6IFt7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnYWxlcnRiYW5uZXInLFxuICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICBpY29uOiAnd2FybmluZycsXG4gICAgICAgICAgICAgICAgICB0ZXh0OiAnQ291bGQgbm90IGxvYWQgZW1vamlzJ1xuICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYnV0dG9uczogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiAnY2FuY2VsJyxcbiAgICAgICAgICAgICAgICB0ZXh0OiAnQ2xvc2UnLFxuICAgICAgICAgICAgICAgIHByaW1hcnk6IHRydWVcbiAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICBpbml0aWFsRGF0YToge1xuICAgICAgICAgICAgICBwYXR0ZXJuOiAnJyxcbiAgICAgICAgICAgICAgcmVzdWx0czogW11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBkaWFsb2dBcGkuZm9jdXMocGF0dGVybk5hbWUpO1xuICAgICAgICAgIGRpYWxvZ0FwaS51bmJsb2NrKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCByZWdpc3RlciQxID0gKGVkaXRvciwgZGF0YWJhc2UpID0+IHtcbiAgICAgIGVkaXRvci5hZGRDb21tYW5kKCdtY2VFbW90aWNvbnMnLCAoKSA9PiBvcGVuKGVkaXRvciwgZGF0YWJhc2UpKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0dXAgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLm9uKCdQcmVJbml0JywgKCkgPT4ge1xuICAgICAgICBlZGl0b3IucGFyc2VyLmFkZEF0dHJpYnV0ZUZpbHRlcignZGF0YS1lbW90aWNvbicsIG5vZGVzID0+IHtcbiAgICAgICAgICBlYWNoJDEobm9kZXMsIG5vZGUgPT4ge1xuICAgICAgICAgICAgbm9kZS5hdHRyKCdkYXRhLW1jZS1yZXNpemUnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgIG5vZGUuYXR0cignZGF0YS1tY2UtcGxhY2Vob2xkZXInLCAnMScpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBpbml0ID0gKGVkaXRvciwgZGF0YWJhc2UpID0+IHtcbiAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRBdXRvY29tcGxldGVyKCdlbW90aWNvbnMnLCB7XG4gICAgICAgIHRyaWdnZXI6ICc6JyxcbiAgICAgICAgY29sdW1uczogJ2F1dG8nLFxuICAgICAgICBtaW5DaGFyczogMixcbiAgICAgICAgZmV0Y2g6IChwYXR0ZXJuLCBtYXhSZXN1bHRzKSA9PiBkYXRhYmFzZS53YWl0Rm9yTG9hZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBkYXRhYmFzZS5saXN0QWxsKCk7XG4gICAgICAgICAgcmV0dXJuIGVtb2ppc0Zyb20oY2FuZGlkYXRlcywgcGF0dGVybiwgT3B0aW9uYWwuc29tZShtYXhSZXN1bHRzKSk7XG4gICAgICAgIH0pLFxuICAgICAgICBvbkFjdGlvbjogKGF1dG9jb21wbGV0ZUFwaSwgcm5nLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG4gICAgICAgICAgZWRpdG9yLmluc2VydENvbnRlbnQodmFsdWUpO1xuICAgICAgICAgIGF1dG9jb21wbGV0ZUFwaS5oaWRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBvblNldHVwRWRpdGFibGUgPSBlZGl0b3IgPT4gYXBpID0+IHtcbiAgICAgIGNvbnN0IG5vZGVDaGFuZ2VkID0gKCkgPT4ge1xuICAgICAgICBhcGkuc2V0RW5hYmxlZChlZGl0b3Iuc2VsZWN0aW9uLmlzRWRpdGFibGUoKSk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLm9uKCdOb2RlQ2hhbmdlJywgbm9kZUNoYW5nZWQpO1xuICAgICAgbm9kZUNoYW5nZWQoKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5vZmYoJ05vZGVDaGFuZ2UnLCBub2RlQ2hhbmdlZCk7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXIgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgb25BY3Rpb24gPSAoKSA9PiBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZUVtb3RpY29ucycpO1xuICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZEJ1dHRvbignZW1vdGljb25zJywge1xuICAgICAgICB0b29sdGlwOiAnRW1vamlzJyxcbiAgICAgICAgaWNvbjogJ2Vtb2ppJyxcbiAgICAgICAgb25BY3Rpb24sXG4gICAgICAgIG9uU2V0dXA6IG9uU2V0dXBFZGl0YWJsZShlZGl0b3IpXG4gICAgICB9KTtcbiAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRNZW51SXRlbSgnZW1vdGljb25zJywge1xuICAgICAgICB0ZXh0OiAnRW1vamlzLi4uJyxcbiAgICAgICAgaWNvbjogJ2Vtb2ppJyxcbiAgICAgICAgb25BY3Rpb24sXG4gICAgICAgIG9uU2V0dXA6IG9uU2V0dXBFZGl0YWJsZShlZGl0b3IpXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdmFyIFBsdWdpbiA9ICgpID0+IHtcbiAgICAgIGdsb2JhbCQxLmFkZCgnZW1vdGljb25zJywgKGVkaXRvciwgcGx1Z2luVXJsKSA9PiB7XG4gICAgICAgIHJlZ2lzdGVyJDIoZWRpdG9yLCBwbHVnaW5VcmwpO1xuICAgICAgICBjb25zdCBkYXRhYmFzZVVybCA9IGdldEVtb2ppRGF0YWJhc2VVcmwoZWRpdG9yKTtcbiAgICAgICAgY29uc3QgZGF0YWJhc2VJZCA9IGdldEVtb2ppRGF0YWJhc2VJZChlZGl0b3IpO1xuICAgICAgICBjb25zdCBkYXRhYmFzZSA9IGluaXREYXRhYmFzZShlZGl0b3IsIGRhdGFiYXNlVXJsLCBkYXRhYmFzZUlkKTtcbiAgICAgICAgcmVnaXN0ZXIkMShlZGl0b3IsIGRhdGFiYXNlKTtcbiAgICAgICAgcmVnaXN0ZXIoZWRpdG9yKTtcbiAgICAgICAgaW5pdChlZGl0b3IsIGRhdGFiYXNlKTtcbiAgICAgICAgc2V0dXAoZWRpdG9yKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBQbHVnaW4oKTtcblxufSkoKTtcbiIsIi8vIEV4cG9ydHMgdGhlIFwibGlua1wiIHBsdWdpbiBmb3IgdXNhZ2Ugd2l0aCBtb2R1bGUgbG9hZGVyc1xuLy8gVXNhZ2U6XG4vLyAgIENvbW1vbkpTOlxuLy8gICAgIHJlcXVpcmUoJ3RpbnltY2UvcGx1Z2lucy9saW5rJylcbi8vICAgRVMyMDE1OlxuLy8gICAgIGltcG9ydCAndGlueW1jZS9wbHVnaW5zL2xpbmsnXG5yZXF1aXJlKCcuL3BsdWdpbi5qcycpOyIsIi8qKlxuICogVGlueU1DRSB2ZXJzaW9uIDYuNy4wICgyMDIzLTA4LTMwKVxuICovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIGdsb2JhbCQ1ID0gdGlueW1jZS51dGlsLlRvb2xzLnJlc29sdmUoJ3RpbnltY2UuUGx1Z2luTWFuYWdlcicpO1xuXG4gICAgY29uc3QgaGFzUHJvdG8gPSAodiwgY29uc3RydWN0b3IsIHByZWRpY2F0ZSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgaWYgKHByZWRpY2F0ZSh2LCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICgoX2EgPSB2LmNvbnN0cnVjdG9yKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmFtZSkgPT09IGNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB0eXBlT2YgPSB4ID0+IHtcbiAgICAgIGNvbnN0IHQgPSB0eXBlb2YgeDtcbiAgICAgIGlmICh4ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgICB9IGVsc2UgaWYgKHQgPT09ICdvYmplY3QnICYmIEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgICB9IGVsc2UgaWYgKHQgPT09ICdvYmplY3QnICYmIGhhc1Byb3RvKHgsIFN0cmluZywgKG8sIHByb3RvKSA9PiBwcm90by5pc1Byb3RvdHlwZU9mKG8pKSkge1xuICAgICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlzVHlwZSA9IHR5cGUgPT4gdmFsdWUgPT4gdHlwZU9mKHZhbHVlKSA9PT0gdHlwZTtcbiAgICBjb25zdCBpc1NpbXBsZVR5cGUgPSB0eXBlID0+IHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gdHlwZTtcbiAgICBjb25zdCBlcSA9IHQgPT4gYSA9PiB0ID09PSBhO1xuICAgIGNvbnN0IGlzU3RyaW5nID0gaXNUeXBlKCdzdHJpbmcnKTtcbiAgICBjb25zdCBpc09iamVjdCA9IGlzVHlwZSgnb2JqZWN0Jyk7XG4gICAgY29uc3QgaXNBcnJheSA9IGlzVHlwZSgnYXJyYXknKTtcbiAgICBjb25zdCBpc051bGwgPSBlcShudWxsKTtcbiAgICBjb25zdCBpc0Jvb2xlYW4gPSBpc1NpbXBsZVR5cGUoJ2Jvb2xlYW4nKTtcbiAgICBjb25zdCBpc051bGxhYmxlID0gYSA9PiBhID09PSBudWxsIHx8IGEgPT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpc05vbk51bGxhYmxlID0gYSA9PiAhaXNOdWxsYWJsZShhKTtcbiAgICBjb25zdCBpc0Z1bmN0aW9uID0gaXNTaW1wbGVUeXBlKCdmdW5jdGlvbicpO1xuICAgIGNvbnN0IGlzQXJyYXlPZiA9ICh2YWx1ZSwgcHJlZCkgPT4ge1xuICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB2YWx1ZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgIGlmICghcHJlZCh2YWx1ZVtpXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIGNvbnN0IG5vb3AgPSAoKSA9PiB7XG4gICAgfTtcbiAgICBjb25zdCBjb25zdGFudCA9IHZhbHVlID0+IHtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCB0cmlwbGVFcXVhbHMgPSAoYSwgYikgPT4ge1xuICAgICAgcmV0dXJuIGEgPT09IGI7XG4gICAgfTtcblxuICAgIGNsYXNzIE9wdGlvbmFsIHtcbiAgICAgIGNvbnN0cnVjdG9yKHRhZywgdmFsdWUpIHtcbiAgICAgICAgdGhpcy50YWcgPSB0YWc7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHN0YXRpYyBzb21lKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBuZXcgT3B0aW9uYWwodHJ1ZSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgc3RhdGljIG5vbmUoKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zaW5nbGV0b25Ob25lO1xuICAgICAgfVxuICAgICAgZm9sZChvbk5vbmUsIG9uU29tZSkge1xuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICByZXR1cm4gb25Tb21lKHRoaXMudmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBvbk5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaXNTb21lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWc7XG4gICAgICB9XG4gICAgICBpc05vbmUoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy50YWc7XG4gICAgICB9XG4gICAgICBtYXAobWFwcGVyKSB7XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKG1hcHBlcih0aGlzLnZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYmluZChiaW5kZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgcmV0dXJuIGJpbmRlcih0aGlzLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBleGlzdHMocHJlZGljYXRlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyAmJiBwcmVkaWNhdGUodGhpcy52YWx1ZSk7XG4gICAgICB9XG4gICAgICBmb3JhbGwocHJlZGljYXRlKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy50YWcgfHwgcHJlZGljYXRlKHRoaXMudmFsdWUpO1xuICAgICAgfVxuICAgICAgZmlsdGVyKHByZWRpY2F0ZSkge1xuICAgICAgICBpZiAoIXRoaXMudGFnIHx8IHByZWRpY2F0ZSh0aGlzLnZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGdldE9yKHJlcGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMudmFsdWUgOiByZXBsYWNlbWVudDtcbiAgICAgIH1cbiAgICAgIG9yKHJlcGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMgOiByZXBsYWNlbWVudDtcbiAgICAgIH1cbiAgICAgIGdldE9yVGh1bmsodGh1bmspIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gdGhpcy52YWx1ZSA6IHRodW5rKCk7XG4gICAgICB9XG4gICAgICBvclRodW5rKHRodW5rKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMgOiB0aHVuaygpO1xuICAgICAgfVxuICAgICAgZ2V0T3JEaWUobWVzc2FnZSkge1xuICAgICAgICBpZiAoIXRoaXMudGFnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgIT09IG51bGwgJiYgbWVzc2FnZSAhPT0gdm9pZCAwID8gbWVzc2FnZSA6ICdDYWxsZWQgZ2V0T3JEaWUgb24gTm9uZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdGF0aWMgZnJvbSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gaXNOb25OdWxsYWJsZSh2YWx1ZSkgPyBPcHRpb25hbC5zb21lKHZhbHVlKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICAgIGdldE9yTnVsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gdGhpcy52YWx1ZSA6IG51bGw7XG4gICAgICB9XG4gICAgICBnZXRPclVuZGVmaW5lZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICB9XG4gICAgICBlYWNoKHdvcmtlcikge1xuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICB3b3JrZXIodGhpcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRvQXJyYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IFt0aGlzLnZhbHVlXSA6IFtdO1xuICAgICAgfVxuICAgICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IGBzb21lKCR7IHRoaXMudmFsdWUgfSlgIDogJ25vbmUoKSc7XG4gICAgICB9XG4gICAgfVxuICAgIE9wdGlvbmFsLnNpbmdsZXRvbk5vbmUgPSBuZXcgT3B0aW9uYWwoZmFsc2UpO1xuXG4gICAgY29uc3QgbmF0aXZlSW5kZXhPZiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mO1xuICAgIGNvbnN0IG5hdGl2ZVB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaDtcbiAgICBjb25zdCByYXdJbmRleE9mID0gKHRzLCB0KSA9PiBuYXRpdmVJbmRleE9mLmNhbGwodHMsIHQpO1xuICAgIGNvbnN0IGNvbnRhaW5zID0gKHhzLCB4KSA9PiByYXdJbmRleE9mKHhzLCB4KSA+IC0xO1xuICAgIGNvbnN0IG1hcCA9ICh4cywgZikgPT4ge1xuICAgICAgY29uc3QgbGVuID0geHMubGVuZ3RoO1xuICAgICAgY29uc3QgciA9IG5ldyBBcnJheShsZW4pO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIHJbaV0gPSBmKHgsIGkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBlYWNoJDEgPSAoeHMsIGYpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGYoeCwgaSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBmb2xkbCA9ICh4cywgZiwgYWNjKSA9PiB7XG4gICAgICBlYWNoJDEoeHMsICh4LCBpKSA9PiB7XG4gICAgICAgIGFjYyA9IGYoYWNjLCB4LCBpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9O1xuICAgIGNvbnN0IGZsYXR0ZW4gPSB4cyA9PiB7XG4gICAgICBjb25zdCByID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0geHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgaWYgKCFpc0FycmF5KHhzW2ldKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXJyLmZsYXR0ZW4gaXRlbSAnICsgaSArICcgd2FzIG5vdCBhbiBhcnJheSwgaW5wdXQ6ICcgKyB4cyk7XG4gICAgICAgIH1cbiAgICAgICAgbmF0aXZlUHVzaC5hcHBseShyLCB4c1tpXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IGJpbmQgPSAoeHMsIGYpID0+IGZsYXR0ZW4obWFwKHhzLCBmKSk7XG4gICAgY29uc3QgZmluZE1hcCA9IChhcnIsIGYpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHIgPSBmKGFycltpXSwgaSk7XG4gICAgICAgIGlmIChyLmlzU29tZSgpKSB7XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzID0gKGxocywgcmhzLCBjb21wYXJhdG9yID0gdHJpcGxlRXF1YWxzKSA9PiBsaHMuZXhpc3RzKGxlZnQgPT4gY29tcGFyYXRvcihsZWZ0LCByaHMpKTtcbiAgICBjb25zdCBjYXQgPSBhcnIgPT4ge1xuICAgICAgY29uc3QgciA9IFtdO1xuICAgICAgY29uc3QgcHVzaCA9IHggPT4ge1xuICAgICAgICByLnB1c2goeCk7XG4gICAgICB9O1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXJyW2ldLmVhY2gocHVzaCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IHNvbWVJZiA9IChiLCBhKSA9PiBiID8gT3B0aW9uYWwuc29tZShhKSA6IE9wdGlvbmFsLm5vbmUoKTtcblxuICAgIGNvbnN0IG9wdGlvbiA9IG5hbWUgPT4gZWRpdG9yID0+IGVkaXRvci5vcHRpb25zLmdldChuYW1lKTtcbiAgICBjb25zdCByZWdpc3RlciQxID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyT3B0aW9uID0gZWRpdG9yLm9wdGlvbnMucmVnaXN0ZXI7XG4gICAgICByZWdpc3Rlck9wdGlvbignbGlua19hc3N1bWVfZXh0ZXJuYWxfdGFyZ2V0cycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiB2YWx1ZSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsaWQgPSBpc1N0cmluZyh2YWx1ZSkgfHwgaXNCb29sZWFuKHZhbHVlKTtcbiAgICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgICAgICAgIHZhbGlkXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnaHR0cCcgfHwgdmFsdWUgPT09ICdodHRwcycpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2YWxpZFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICAgICAgICB2YWxpZFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdNdXN0IGJlIGEgc3RyaW5nIG9yIGEgYm9vbGVhbi4nXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2xpbmtfY29udGV4dF90b29sYmFyJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2xpbmtfbGlzdCcsIHsgcHJvY2Vzc29yOiB2YWx1ZSA9PiBpc1N0cmluZyh2YWx1ZSkgfHwgaXNGdW5jdGlvbih2YWx1ZSkgfHwgaXNBcnJheU9mKHZhbHVlLCBpc09iamVjdCkgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignbGlua19kZWZhdWx0X3RhcmdldCcsIHsgcHJvY2Vzc29yOiAnc3RyaW5nJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdsaW5rX2RlZmF1bHRfcHJvdG9jb2wnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICdodHRwcydcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2xpbmtfdGFyZ2V0X2xpc3QnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogdmFsdWUgPT4gaXNCb29sZWFuKHZhbHVlKSB8fCBpc0FycmF5T2YodmFsdWUsIGlzT2JqZWN0KSxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignbGlua19yZWxfbGlzdCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnb2JqZWN0W10nLFxuICAgICAgICBkZWZhdWx0OiBbXVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignbGlua19jbGFzc19saXN0Jywge1xuICAgICAgICBwcm9jZXNzb3I6ICdvYmplY3RbXScsXG4gICAgICAgIGRlZmF1bHQ6IFtdXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdsaW5rX3RpdGxlJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYWxsb3dfdW5zYWZlX2xpbmtfdGFyZ2V0Jywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2xpbmtfcXVpY2tsaW5rJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYXNzdW1lRXh0ZXJuYWxUYXJnZXRzID0gb3B0aW9uKCdsaW5rX2Fzc3VtZV9leHRlcm5hbF90YXJnZXRzJyk7XG4gICAgY29uc3QgaGFzQ29udGV4dFRvb2xiYXIgPSBvcHRpb24oJ2xpbmtfY29udGV4dF90b29sYmFyJyk7XG4gICAgY29uc3QgZ2V0TGlua0xpc3QgPSBvcHRpb24oJ2xpbmtfbGlzdCcpO1xuICAgIGNvbnN0IGdldERlZmF1bHRMaW5rVGFyZ2V0ID0gb3B0aW9uKCdsaW5rX2RlZmF1bHRfdGFyZ2V0Jyk7XG4gICAgY29uc3QgZ2V0RGVmYXVsdExpbmtQcm90b2NvbCA9IG9wdGlvbignbGlua19kZWZhdWx0X3Byb3RvY29sJyk7XG4gICAgY29uc3QgZ2V0VGFyZ2V0TGlzdCA9IG9wdGlvbignbGlua190YXJnZXRfbGlzdCcpO1xuICAgIGNvbnN0IGdldFJlbExpc3QgPSBvcHRpb24oJ2xpbmtfcmVsX2xpc3QnKTtcbiAgICBjb25zdCBnZXRMaW5rQ2xhc3NMaXN0ID0gb3B0aW9uKCdsaW5rX2NsYXNzX2xpc3QnKTtcbiAgICBjb25zdCBzaG91bGRTaG93TGlua1RpdGxlID0gb3B0aW9uKCdsaW5rX3RpdGxlJyk7XG4gICAgY29uc3QgYWxsb3dVbnNhZmVMaW5rVGFyZ2V0ID0gb3B0aW9uKCdhbGxvd191bnNhZmVfbGlua190YXJnZXQnKTtcbiAgICBjb25zdCB1c2VRdWlja0xpbmsgPSBvcHRpb24oJ2xpbmtfcXVpY2tsaW5rJyk7XG5cbiAgICB2YXIgZ2xvYmFsJDQgPSB0aW55bWNlLnV0aWwuVG9vbHMucmVzb2x2ZSgndGlueW1jZS51dGlsLlRvb2xzJyk7XG5cbiAgICBjb25zdCBnZXRWYWx1ZSA9IGl0ZW0gPT4gaXNTdHJpbmcoaXRlbS52YWx1ZSkgPyBpdGVtLnZhbHVlIDogJyc7XG4gICAgY29uc3QgZ2V0VGV4dCA9IGl0ZW0gPT4ge1xuICAgICAgaWYgKGlzU3RyaW5nKGl0ZW0udGV4dCkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udGV4dDtcbiAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcoaXRlbS50aXRsZSkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udGl0bGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzYW5pdGl6ZUxpc3QgPSAobGlzdCwgZXh0cmFjdFZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBvdXQgPSBbXTtcbiAgICAgIGdsb2JhbCQ0LmVhY2gobGlzdCwgaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBnZXRUZXh0KGl0ZW0pO1xuICAgICAgICBpZiAoaXRlbS5tZW51ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBpdGVtcyA9IHNhbml0aXplTGlzdChpdGVtLm1lbnUsIGV4dHJhY3RWYWx1ZSk7XG4gICAgICAgICAgb3V0LnB1c2goe1xuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIGl0ZW1zXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBleHRyYWN0VmFsdWUoaXRlbSk7XG4gICAgICAgICAgb3V0LnB1c2goe1xuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG91dDtcbiAgICB9O1xuICAgIGNvbnN0IHNhbml0aXplV2l0aCA9IChleHRyYWN0ZXIgPSBnZXRWYWx1ZSkgPT4gbGlzdCA9PiBPcHRpb25hbC5mcm9tKGxpc3QpLm1hcChsaXN0ID0+IHNhbml0aXplTGlzdChsaXN0LCBleHRyYWN0ZXIpKTtcbiAgICBjb25zdCBzYW5pdGl6ZSA9IGxpc3QgPT4gc2FuaXRpemVXaXRoKGdldFZhbHVlKShsaXN0KTtcbiAgICBjb25zdCBjcmVhdGVVaSA9IChuYW1lLCBsYWJlbCkgPT4gaXRlbXMgPT4gKHtcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlOiAnbGlzdGJveCcsXG4gICAgICBsYWJlbCxcbiAgICAgIGl0ZW1zXG4gICAgfSk7XG4gICAgY29uc3QgTGlzdE9wdGlvbnMgPSB7XG4gICAgICBzYW5pdGl6ZSxcbiAgICAgIHNhbml0aXplV2l0aCxcbiAgICAgIGNyZWF0ZVVpLFxuICAgICAgZ2V0VmFsdWVcbiAgICB9O1xuXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzO1xuICAgIGNvbnN0IGhhc093blByb3BlcnR5ID0gT2JqZWN0Lmhhc093blByb3BlcnR5O1xuICAgIGNvbnN0IGVhY2ggPSAob2JqLCBmKSA9PiB7XG4gICAgICBjb25zdCBwcm9wcyA9IGtleXMob2JqKTtcbiAgICAgIGZvciAobGV0IGsgPSAwLCBsZW4gPSBwcm9wcy5sZW5ndGg7IGsgPCBsZW47IGsrKykge1xuICAgICAgICBjb25zdCBpID0gcHJvcHNba107XG4gICAgICAgIGNvbnN0IHggPSBvYmpbaV07XG4gICAgICAgIGYoeCwgaSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBvYmpBY2MgPSByID0+ICh4LCBpKSA9PiB7XG4gICAgICByW2ldID0geDtcbiAgICB9O1xuICAgIGNvbnN0IGludGVybmFsRmlsdGVyID0gKG9iaiwgcHJlZCwgb25UcnVlLCBvbkZhbHNlKSA9PiB7XG4gICAgICBlYWNoKG9iaiwgKHgsIGkpID0+IHtcbiAgICAgICAgKHByZWQoeCwgaSkgPyBvblRydWUgOiBvbkZhbHNlKSh4LCBpKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZmlsdGVyID0gKG9iaiwgcHJlZCkgPT4ge1xuICAgICAgY29uc3QgdCA9IHt9O1xuICAgICAgaW50ZXJuYWxGaWx0ZXIob2JqLCBwcmVkLCBvYmpBY2ModCksIG5vb3ApO1xuICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICBjb25zdCBoYXMgPSAob2JqLCBrZXkpID0+IGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xuICAgIGNvbnN0IGhhc05vbk51bGxhYmxlS2V5ID0gKG9iaiwga2V5KSA9PiBoYXMob2JqLCBrZXkpICYmIG9ialtrZXldICE9PSB1bmRlZmluZWQgJiYgb2JqW2tleV0gIT09IG51bGw7XG5cbiAgICB2YXIgZ2xvYmFsJDMgPSB0aW55bWNlLnV0aWwuVG9vbHMucmVzb2x2ZSgndGlueW1jZS5kb20uVHJlZVdhbGtlcicpO1xuXG4gICAgdmFyIGdsb2JhbCQyID0gdGlueW1jZS51dGlsLlRvb2xzLnJlc29sdmUoJ3RpbnltY2UudXRpbC5VUkknKTtcblxuICAgIGNvbnN0IGlzQW5jaG9yID0gZWxtID0+IGlzTm9uTnVsbGFibGUoZWxtKSAmJiBlbG0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2EnO1xuICAgIGNvbnN0IGlzTGluayA9IGVsbSA9PiBpc0FuY2hvcihlbG0pICYmICEhZ2V0SHJlZihlbG0pO1xuICAgIGNvbnN0IGNvbGxlY3ROb2Rlc0luUmFuZ2UgPSAocm5nLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGlmIChybmcuY29sbGFwc2VkKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRzID0gcm5nLmNsb25lQ29udGVudHMoKTtcbiAgICAgICAgY29uc3QgZmlyc3RDaGlsZCA9IGNvbnRlbnRzLmZpcnN0Q2hpbGQ7XG4gICAgICAgIGNvbnN0IHdhbGtlciA9IG5ldyBnbG9iYWwkMyhmaXJzdENoaWxkLCBjb250ZW50cyk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gW107XG4gICAgICAgIGxldCBjdXJyZW50ID0gZmlyc3RDaGlsZDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIGlmIChwcmVkaWNhdGUoY3VycmVudCkpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goY3VycmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChjdXJyZW50ID0gd2Fsa2VyLm5leHQoKSk7XG4gICAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGhhc1Byb3RvY29sID0gdXJsID0+IC9eXFx3KzovaS50ZXN0KHVybCk7XG4gICAgY29uc3QgZ2V0SHJlZiA9IGVsbSA9PiB7XG4gICAgICB2YXIgX2EsIF9iO1xuICAgICAgcmV0dXJuIChfYiA9IChfYSA9IGVsbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWNlLWhyZWYnKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZWxtLmdldEF0dHJpYnV0ZSgnaHJlZicpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5UmVsVGFyZ2V0UnVsZXMgPSAocmVsLCBpc1Vuc2FmZSkgPT4ge1xuICAgICAgY29uc3QgcnVsZXMgPSBbJ25vb3BlbmVyJ107XG4gICAgICBjb25zdCByZWxzID0gcmVsID8gcmVsLnNwbGl0KC9cXHMrLykgOiBbXTtcbiAgICAgIGNvbnN0IHRvU3RyaW5nID0gcmVscyA9PiBnbG9iYWwkNC50cmltKHJlbHMuc29ydCgpLmpvaW4oJyAnKSk7XG4gICAgICBjb25zdCBhZGRUYXJnZXRSdWxlcyA9IHJlbHMgPT4ge1xuICAgICAgICByZWxzID0gcmVtb3ZlVGFyZ2V0UnVsZXMocmVscyk7XG4gICAgICAgIHJldHVybiByZWxzLmxlbmd0aCA+IDAgPyByZWxzLmNvbmNhdChydWxlcykgOiBydWxlcztcbiAgICAgIH07XG4gICAgICBjb25zdCByZW1vdmVUYXJnZXRSdWxlcyA9IHJlbHMgPT4gcmVscy5maWx0ZXIodmFsID0+IGdsb2JhbCQ0LmluQXJyYXkocnVsZXMsIHZhbCkgPT09IC0xKTtcbiAgICAgIGNvbnN0IG5ld1JlbHMgPSBpc1Vuc2FmZSA/IGFkZFRhcmdldFJ1bGVzKHJlbHMpIDogcmVtb3ZlVGFyZ2V0UnVsZXMocmVscyk7XG4gICAgICByZXR1cm4gbmV3UmVscy5sZW5ndGggPiAwID8gdG9TdHJpbmcobmV3UmVscykgOiAnJztcbiAgICB9O1xuICAgIGNvbnN0IHRyaW1DYXJldENvbnRhaW5lcnMgPSB0ZXh0ID0+IHRleHQucmVwbGFjZSgvXFx1RkVGRi9nLCAnJyk7XG4gICAgY29uc3QgZ2V0QW5jaG9yRWxlbWVudCA9IChlZGl0b3IsIHNlbGVjdGVkRWxtKSA9PiB7XG4gICAgICBzZWxlY3RlZEVsbSA9IHNlbGVjdGVkRWxtIHx8IGdldExpbmtzSW5TZWxlY3Rpb24oZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSlbMF0gfHwgZWRpdG9yLnNlbGVjdGlvbi5nZXROb2RlKCk7XG4gICAgICBpZiAoaXNJbWFnZUZpZ3VyZShzZWxlY3RlZEVsbSkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oZWRpdG9yLmRvbS5zZWxlY3QoJ2FbaHJlZl0nLCBzZWxlY3RlZEVsbSlbMF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oZWRpdG9yLmRvbS5nZXRQYXJlbnQoc2VsZWN0ZWRFbG0sICdhW2hyZWZdJykpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNJbkFuY2hvciA9IChlZGl0b3IsIHNlbGVjdGVkRWxtKSA9PiBnZXRBbmNob3JFbGVtZW50KGVkaXRvciwgc2VsZWN0ZWRFbG0pLmlzU29tZSgpO1xuICAgIGNvbnN0IGdldEFuY2hvclRleHQgPSAoc2VsZWN0aW9uLCBhbmNob3JFbG0pID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSBhbmNob3JFbG0uZm9sZCgoKSA9PiBzZWxlY3Rpb24uZ2V0Q29udGVudCh7IGZvcm1hdDogJ3RleHQnIH0pLCBhbmNob3JFbG0gPT4gYW5jaG9yRWxtLmlubmVyVGV4dCB8fCBhbmNob3JFbG0udGV4dENvbnRlbnQgfHwgJycpO1xuICAgICAgcmV0dXJuIHRyaW1DYXJldENvbnRhaW5lcnModGV4dCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRMaW5rc0luU2VsZWN0aW9uID0gcm5nID0+IGNvbGxlY3ROb2Rlc0luUmFuZ2Uocm5nLCBpc0xpbmspO1xuICAgIGNvbnN0IGdldExpbmtzJDEgPSBlbGVtZW50cyA9PiBnbG9iYWwkNC5ncmVwKGVsZW1lbnRzLCBpc0xpbmspO1xuICAgIGNvbnN0IGhhc0xpbmtzID0gZWxlbWVudHMgPT4gZ2V0TGlua3MkMShlbGVtZW50cykubGVuZ3RoID4gMDtcbiAgICBjb25zdCBoYXNMaW5rc0luU2VsZWN0aW9uID0gcm5nID0+IGdldExpbmtzSW5TZWxlY3Rpb24ocm5nKS5sZW5ndGggPiAwO1xuICAgIGNvbnN0IGlzT25seVRleHRTZWxlY3RlZCA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBpbmxpbmVUZXh0RWxlbWVudHMgPSBlZGl0b3Iuc2NoZW1hLmdldFRleHRJbmxpbmVFbGVtZW50cygpO1xuICAgICAgY29uc3QgaXNFbGVtZW50ID0gZWxtID0+IGVsbS5ub2RlVHlwZSA9PT0gMSAmJiAhaXNBbmNob3IoZWxtKSAmJiAhaGFzKGlubGluZVRleHRFbGVtZW50cywgZWxtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgY29uc3QgaXNJbkJsb2NrQW5jaG9yID0gZ2V0QW5jaG9yRWxlbWVudChlZGl0b3IpLmV4aXN0cyhhbmNob3IgPT4gYW5jaG9yLmhhc0F0dHJpYnV0ZSgnZGF0YS1tY2UtYmxvY2snKSk7XG4gICAgICBpZiAoaXNJbkJsb2NrQW5jaG9yKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBpZiAoIXJuZy5jb2xsYXBzZWQpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBjb2xsZWN0Tm9kZXNJblJhbmdlKHJuZywgaXNFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRzLmxlbmd0aCA9PT0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNJbWFnZUZpZ3VyZSA9IGVsbSA9PiBpc05vbk51bGxhYmxlKGVsbSkgJiYgZWxtLm5vZGVOYW1lID09PSAnRklHVVJFJyAmJiAvXFxiaW1hZ2VcXGIvaS50ZXN0KGVsbS5jbGFzc05hbWUpO1xuICAgIGNvbnN0IGdldExpbmtBdHRycyA9IGRhdGEgPT4ge1xuICAgICAgY29uc3QgYXR0cnMgPSBbXG4gICAgICAgICd0aXRsZScsXG4gICAgICAgICdyZWwnLFxuICAgICAgICAnY2xhc3MnLFxuICAgICAgICAndGFyZ2V0J1xuICAgICAgXTtcbiAgICAgIHJldHVybiBmb2xkbChhdHRycywgKGFjYywga2V5KSA9PiB7XG4gICAgICAgIGRhdGFba2V5XS5lYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICBhY2Nba2V5XSA9IHZhbHVlLmxlbmd0aCA+IDAgPyB2YWx1ZSA6IG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwgeyBocmVmOiBkYXRhLmhyZWYgfSk7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVFeHRlcm5hbFRhcmdldHMgPSAoaHJlZiwgYXNzdW1lRXh0ZXJuYWxUYXJnZXRzKSA9PiB7XG4gICAgICBpZiAoKGFzc3VtZUV4dGVybmFsVGFyZ2V0cyA9PT0gJ2h0dHAnIHx8IGFzc3VtZUV4dGVybmFsVGFyZ2V0cyA9PT0gJ2h0dHBzJykgJiYgIWhhc1Byb3RvY29sKGhyZWYpKSB7XG4gICAgICAgIHJldHVybiBhc3N1bWVFeHRlcm5hbFRhcmdldHMgKyAnOi8vJyArIGhyZWY7XG4gICAgICB9XG4gICAgICByZXR1cm4gaHJlZjtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5TGlua092ZXJyaWRlcyA9IChlZGl0b3IsIGxpbmtBdHRycykgPT4ge1xuICAgICAgY29uc3QgbmV3TGlua0F0dHJzID0geyAuLi5saW5rQXR0cnMgfTtcbiAgICAgIGlmIChnZXRSZWxMaXN0KGVkaXRvcikubGVuZ3RoID09PSAwICYmICFhbGxvd1Vuc2FmZUxpbmtUYXJnZXQoZWRpdG9yKSkge1xuICAgICAgICBjb25zdCBuZXdSZWwgPSBhcHBseVJlbFRhcmdldFJ1bGVzKG5ld0xpbmtBdHRycy5yZWwsIG5ld0xpbmtBdHRycy50YXJnZXQgPT09ICdfYmxhbmsnKTtcbiAgICAgICAgbmV3TGlua0F0dHJzLnJlbCA9IG5ld1JlbCA/IG5ld1JlbCA6IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoT3B0aW9uYWwuZnJvbShuZXdMaW5rQXR0cnMudGFyZ2V0KS5pc05vbmUoKSAmJiBnZXRUYXJnZXRMaXN0KGVkaXRvcikgPT09IGZhbHNlKSB7XG4gICAgICAgIG5ld0xpbmtBdHRycy50YXJnZXQgPSBnZXREZWZhdWx0TGlua1RhcmdldChlZGl0b3IpO1xuICAgICAgfVxuICAgICAgbmV3TGlua0F0dHJzLmhyZWYgPSBoYW5kbGVFeHRlcm5hbFRhcmdldHMobmV3TGlua0F0dHJzLmhyZWYsIGFzc3VtZUV4dGVybmFsVGFyZ2V0cyhlZGl0b3IpKTtcbiAgICAgIHJldHVybiBuZXdMaW5rQXR0cnM7XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVMaW5rID0gKGVkaXRvciwgYW5jaG9yRWxtLCB0ZXh0LCBsaW5rQXR0cnMpID0+IHtcbiAgICAgIHRleHQuZWFjaCh0ZXh0ID0+IHtcbiAgICAgICAgaWYgKGhhcyhhbmNob3JFbG0sICdpbm5lclRleHQnKSkge1xuICAgICAgICAgIGFuY2hvckVsbS5pbm5lclRleHQgPSB0ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFuY2hvckVsbS50ZXh0Q29udGVudCA9IHRleHQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLmRvbS5zZXRBdHRyaWJzKGFuY2hvckVsbSwgbGlua0F0dHJzKTtcbiAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0KGFuY2hvckVsbSk7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVMaW5rID0gKGVkaXRvciwgc2VsZWN0ZWRFbG0sIHRleHQsIGxpbmtBdHRycykgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGlmIChpc0ltYWdlRmlndXJlKHNlbGVjdGVkRWxtKSkge1xuICAgICAgICBsaW5rSW1hZ2VGaWd1cmUoZG9tLCBzZWxlY3RlZEVsbSwgbGlua0F0dHJzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHQuZm9sZCgoKSA9PiB7XG4gICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VJbnNlcnRMaW5rJywgZmFsc2UsIGxpbmtBdHRycyk7XG4gICAgICAgIH0sIHRleHQgPT4ge1xuICAgICAgICAgIGVkaXRvci5pbnNlcnRDb250ZW50KGRvbS5jcmVhdGVIVE1MKCdhJywgbGlua0F0dHJzLCBkb20uZW5jb2RlKHRleHQpKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbGlua0RvbU11dGF0aW9uID0gKGVkaXRvciwgYXR0YWNoU3RhdGUsIGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRWxtID0gZWRpdG9yLnNlbGVjdGlvbi5nZXROb2RlKCk7XG4gICAgICBjb25zdCBhbmNob3JFbG0gPSBnZXRBbmNob3JFbGVtZW50KGVkaXRvciwgc2VsZWN0ZWRFbG0pO1xuICAgICAgY29uc3QgbGlua0F0dHJzID0gYXBwbHlMaW5rT3ZlcnJpZGVzKGVkaXRvciwgZ2V0TGlua0F0dHJzKGRhdGEpKTtcbiAgICAgIGVkaXRvci51bmRvTWFuYWdlci50cmFuc2FjdCgoKSA9PiB7XG4gICAgICAgIGlmIChkYXRhLmhyZWYgPT09IGF0dGFjaFN0YXRlLmhyZWYpIHtcbiAgICAgICAgICBhdHRhY2hTdGF0ZS5hdHRhY2goKTtcbiAgICAgICAgfVxuICAgICAgICBhbmNob3JFbG0uZm9sZCgoKSA9PiB7XG4gICAgICAgICAgY3JlYXRlTGluayhlZGl0b3IsIHNlbGVjdGVkRWxtLCBkYXRhLnRleHQsIGxpbmtBdHRycyk7XG4gICAgICAgIH0sIGVsbSA9PiB7XG4gICAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgICAgdXBkYXRlTGluayhlZGl0b3IsIGVsbSwgZGF0YS50ZXh0LCBsaW5rQXR0cnMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgdW5saW5rU2VsZWN0aW9uID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb20sIHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3Rpb247XG4gICAgICBjb25zdCBib29rbWFyayA9IHNlbGVjdGlvbi5nZXRCb29rbWFyaygpO1xuICAgICAgY29uc3Qgcm5nID0gc2VsZWN0aW9uLmdldFJuZygpLmNsb25lUmFuZ2UoKTtcbiAgICAgIGNvbnN0IHN0YXJ0QW5jaG9yRWxtID0gZG9tLmdldFBhcmVudChybmcuc3RhcnRDb250YWluZXIsICdhW2hyZWZdJywgZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBjb25zdCBlbmRBbmNob3JFbG0gPSBkb20uZ2V0UGFyZW50KHJuZy5lbmRDb250YWluZXIsICdhW2hyZWZdJywgZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBpZiAoc3RhcnRBbmNob3JFbG0pIHtcbiAgICAgICAgcm5nLnNldFN0YXJ0QmVmb3JlKHN0YXJ0QW5jaG9yRWxtKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbmRBbmNob3JFbG0pIHtcbiAgICAgICAgcm5nLnNldEVuZEFmdGVyKGVuZEFuY2hvckVsbSk7XG4gICAgICB9XG4gICAgICBzZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG4gICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ3VubGluaycpO1xuICAgICAgc2VsZWN0aW9uLm1vdmVUb0Jvb2ttYXJrKGJvb2ttYXJrKTtcbiAgICB9O1xuICAgIGNvbnN0IHVubGlua0RvbU11dGF0aW9uID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci51bmRvTWFuYWdlci50cmFuc2FjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKTtcbiAgICAgICAgaWYgKGlzSW1hZ2VGaWd1cmUobm9kZSkpIHtcbiAgICAgICAgICB1bmxpbmtJbWFnZUZpZ3VyZShlZGl0b3IsIG5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVubGlua1NlbGVjdGlvbihlZGl0b3IpO1xuICAgICAgICB9XG4gICAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCB1bndyYXBPcHRpb25zID0gZGF0YSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNsYXNzOiBjbHMsXG4gICAgICAgIGhyZWYsXG4gICAgICAgIHJlbCxcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICB0ZXh0LFxuICAgICAgICB0aXRsZVxuICAgICAgfSA9IGRhdGE7XG4gICAgICByZXR1cm4gZmlsdGVyKHtcbiAgICAgICAgY2xhc3M6IGNscy5nZXRPck51bGwoKSxcbiAgICAgICAgaHJlZixcbiAgICAgICAgcmVsOiByZWwuZ2V0T3JOdWxsKCksXG4gICAgICAgIHRhcmdldDogdGFyZ2V0LmdldE9yTnVsbCgpLFxuICAgICAgICB0ZXh0OiB0ZXh0LmdldE9yTnVsbCgpLFxuICAgICAgICB0aXRsZTogdGl0bGUuZ2V0T3JOdWxsKClcbiAgICAgIH0sICh2LCBfaykgPT4gaXNOdWxsKHYpID09PSBmYWxzZSk7XG4gICAgfTtcbiAgICBjb25zdCBzYW5pdGl6ZURhdGEgPSAoZWRpdG9yLCBkYXRhKSA9PiB7XG4gICAgICBjb25zdCBnZXRPcHRpb24gPSBlZGl0b3Iub3B0aW9ucy5nZXQ7XG4gICAgICBjb25zdCB1cmlPcHRpb25zID0ge1xuICAgICAgICBhbGxvd19odG1sX2RhdGFfdXJsczogZ2V0T3B0aW9uKCdhbGxvd19odG1sX2RhdGFfdXJscycpLFxuICAgICAgICBhbGxvd19zY3JpcHRfdXJsczogZ2V0T3B0aW9uKCdhbGxvd19zY3JpcHRfdXJscycpLFxuICAgICAgICBhbGxvd19zdmdfZGF0YV91cmxzOiBnZXRPcHRpb24oJ2FsbG93X3N2Z19kYXRhX3VybHMnKVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGhyZWYgPSBkYXRhLmhyZWY7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICBocmVmOiBnbG9iYWwkMi5pc0RvbVNhZmUoaHJlZiwgJ2EnLCB1cmlPcHRpb25zKSA/IGhyZWYgOiAnJ1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGxpbmsgPSAoZWRpdG9yLCBhdHRhY2hTdGF0ZSwgZGF0YSkgPT4ge1xuICAgICAgY29uc3Qgc2FuaXRpemVkRGF0YSA9IHNhbml0aXplRGF0YShlZGl0b3IsIGRhdGEpO1xuICAgICAgZWRpdG9yLmhhc1BsdWdpbigncnRjJywgdHJ1ZSkgPyBlZGl0b3IuZXhlY0NvbW1hbmQoJ2NyZWF0ZWxpbmsnLCBmYWxzZSwgdW53cmFwT3B0aW9ucyhzYW5pdGl6ZWREYXRhKSkgOiBsaW5rRG9tTXV0YXRpb24oZWRpdG9yLCBhdHRhY2hTdGF0ZSwgc2FuaXRpemVkRGF0YSk7XG4gICAgfTtcbiAgICBjb25zdCB1bmxpbmsgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmhhc1BsdWdpbigncnRjJywgdHJ1ZSkgPyBlZGl0b3IuZXhlY0NvbW1hbmQoJ3VubGluaycpIDogdW5saW5rRG9tTXV0YXRpb24oZWRpdG9yKTtcbiAgICB9O1xuICAgIGNvbnN0IHVubGlua0ltYWdlRmlndXJlID0gKGVkaXRvciwgZmlnKSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBpbWcgPSBlZGl0b3IuZG9tLnNlbGVjdCgnaW1nJywgZmlnKVswXTtcbiAgICAgIGlmIChpbWcpIHtcbiAgICAgICAgY29uc3QgYSA9IGVkaXRvci5kb20uZ2V0UGFyZW50cyhpbWcsICdhW2hyZWZdJywgZmlnKVswXTtcbiAgICAgICAgaWYgKGEpIHtcbiAgICAgICAgICAoX2EgPSBhLnBhcmVudE5vZGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pbnNlcnRCZWZvcmUoaW1nLCBhKTtcbiAgICAgICAgICBlZGl0b3IuZG9tLnJlbW92ZShhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbGlua0ltYWdlRmlndXJlID0gKGRvbSwgZmlnLCBhdHRycykgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgaW1nID0gZG9tLnNlbGVjdCgnaW1nJywgZmlnKVswXTtcbiAgICAgIGlmIChpbWcpIHtcbiAgICAgICAgY29uc3QgYSA9IGRvbS5jcmVhdGUoJ2EnLCBhdHRycyk7XG4gICAgICAgIChfYSA9IGltZy5wYXJlbnROb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaW5zZXJ0QmVmb3JlKGEsIGltZyk7XG4gICAgICAgIGEuYXBwZW5kQ2hpbGQoaW1nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaXNMaXN0R3JvdXAgPSBpdGVtID0+IGhhc05vbk51bGxhYmxlS2V5KGl0ZW0sICdpdGVtcycpO1xuICAgIGNvbnN0IGZpbmRUZXh0QnlWYWx1ZSA9ICh2YWx1ZSwgY2F0YWxvZykgPT4gZmluZE1hcChjYXRhbG9nLCBpdGVtID0+IHtcbiAgICAgIGlmIChpc0xpc3RHcm91cChpdGVtKSkge1xuICAgICAgICByZXR1cm4gZmluZFRleHRCeVZhbHVlKHZhbHVlLCBpdGVtLml0ZW1zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzb21lSWYoaXRlbS52YWx1ZSA9PT0gdmFsdWUsIGl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGdldERlbHRhID0gKHBlcnNpc3RlbnRUZXh0LCBmaWVsZE5hbWUsIGNhdGFsb2csIGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtmaWVsZE5hbWVdO1xuICAgICAgY29uc3QgaGFzUGVyc2lzdGVudFRleHQgPSBwZXJzaXN0ZW50VGV4dC5sZW5ndGggPiAwO1xuICAgICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyBmaW5kVGV4dEJ5VmFsdWUodmFsdWUsIGNhdGFsb2cpLm1hcChpID0+ICh7XG4gICAgICAgIHVybDoge1xuICAgICAgICAgIHZhbHVlOiBpLnZhbHVlLFxuICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgIHRleHQ6IGhhc1BlcnNpc3RlbnRUZXh0ID8gcGVyc2lzdGVudFRleHQgOiBpLnRleHQsXG4gICAgICAgICAgICBhdHRhY2g6IG5vb3BcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHRleHQ6IGhhc1BlcnNpc3RlbnRUZXh0ID8gcGVyc2lzdGVudFRleHQgOiBpLnRleHRcbiAgICAgIH0pKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRDYXRhbG9nID0gKGNhdGFsb2dzLCBmaWVsZE5hbWUpID0+IHtcbiAgICAgIGlmIChmaWVsZE5hbWUgPT09ICdsaW5rJykge1xuICAgICAgICByZXR1cm4gY2F0YWxvZ3MubGluaztcbiAgICAgIH0gZWxzZSBpZiAoZmllbGROYW1lID09PSAnYW5jaG9yJykge1xuICAgICAgICByZXR1cm4gY2F0YWxvZ3MuYW5jaG9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGluaXQgPSAoaW5pdGlhbERhdGEsIGxpbmtDYXRhbG9nKSA9PiB7XG4gICAgICBjb25zdCBwZXJzaXN0ZW50RGF0YSA9IHtcbiAgICAgICAgdGV4dDogaW5pdGlhbERhdGEudGV4dCxcbiAgICAgICAgdGl0bGU6IGluaXRpYWxEYXRhLnRpdGxlXG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0VGl0bGVGcm9tVXJsQ2hhbmdlID0gdXJsID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gc29tZUlmKHBlcnNpc3RlbnREYXRhLnRpdGxlLmxlbmd0aCA8PSAwLCBPcHRpb25hbC5mcm9tKChfYSA9IHVybC5tZXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGl0bGUpLmdldE9yKCcnKSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0VGV4dEZyb21VcmxDaGFuZ2UgPSB1cmwgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBzb21lSWYocGVyc2lzdGVudERhdGEudGV4dC5sZW5ndGggPD0gMCwgT3B0aW9uYWwuZnJvbSgoX2EgPSB1cmwubWV0YSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRleHQpLmdldE9yKHVybC52YWx1ZSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG9uVXJsQ2hhbmdlID0gZGF0YSA9PiB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBnZXRUZXh0RnJvbVVybENoYW5nZShkYXRhLnVybCk7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gZ2V0VGl0bGVGcm9tVXJsQ2hhbmdlKGRhdGEudXJsKTtcbiAgICAgICAgaWYgKHRleHQuaXNTb21lKCkgfHwgdGl0bGUuaXNTb21lKCkpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgICAuLi50ZXh0Lm1hcCh0ZXh0ID0+ICh7IHRleHQgfSkpLmdldE9yKHt9KSxcbiAgICAgICAgICAgIC4uLnRpdGxlLm1hcCh0aXRsZSA9PiAoeyB0aXRsZSB9KSkuZ2V0T3Ioe30pXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG9uQ2F0YWxvZ0NoYW5nZSA9IChkYXRhLCBjaGFuZ2UpID0+IHtcbiAgICAgICAgY29uc3QgY2F0YWxvZyA9IGZpbmRDYXRhbG9nKGxpbmtDYXRhbG9nLCBjaGFuZ2UpLmdldE9yKFtdKTtcbiAgICAgICAgcmV0dXJuIGdldERlbHRhKHBlcnNpc3RlbnREYXRhLnRleHQsIGNoYW5nZSwgY2F0YWxvZywgZGF0YSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25DaGFuZ2UgPSAoZ2V0RGF0YSwgY2hhbmdlKSA9PiB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBjaGFuZ2UubmFtZTtcbiAgICAgICAgaWYgKG5hbWUgPT09ICd1cmwnKSB7XG4gICAgICAgICAgcmV0dXJuIG9uVXJsQ2hhbmdlKGdldERhdGEoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGFpbnMoW1xuICAgICAgICAgICAgJ2FuY2hvcicsXG4gICAgICAgICAgICAnbGluaydcbiAgICAgICAgICBdLCBuYW1lKSkge1xuICAgICAgICAgIHJldHVybiBvbkNhdGFsb2dDaGFuZ2UoZ2V0RGF0YSgpLCBuYW1lKTtcbiAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAndGV4dCcgfHwgbmFtZSA9PT0gJ3RpdGxlJykge1xuICAgICAgICAgIHBlcnNpc3RlbnREYXRhW25hbWVdID0gZ2V0RGF0YSgpW25hbWVdO1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG9uQ2hhbmdlIH07XG4gICAgfTtcbiAgICBjb25zdCBEaWFsb2dDaGFuZ2VzID0ge1xuICAgICAgaW5pdCxcbiAgICAgIGdldERlbHRhXG4gICAgfTtcblxuICAgIHZhciBnbG9iYWwkMSA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLnV0aWwuRGVsYXknKTtcblxuICAgIGNvbnN0IGRlbGF5ZWRDb25maXJtID0gKGVkaXRvciwgbWVzc2FnZSwgY2FsbGJhY2spID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBnbG9iYWwkMS5zZXRFZGl0b3JUaW1lb3V0KGVkaXRvciwgKCkgPT4ge1xuICAgICAgICBlZGl0b3Iud2luZG93TWFuYWdlci5jb25maXJtKG1lc3NhZ2UsIHN0YXRlID0+IHtcbiAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgICAgIGNhbGxiYWNrKHN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHRyeUVtYWlsVHJhbnNmb3JtID0gZGF0YSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSBkYXRhLmhyZWY7XG4gICAgICBjb25zdCBzdWdnZXN0TWFpbFRvID0gdXJsLmluZGV4T2YoJ0AnKSA+IDAgJiYgdXJsLmluZGV4T2YoJy8nKSA9PT0gLTEgJiYgdXJsLmluZGV4T2YoJ21haWx0bzonKSA9PT0gLTE7XG4gICAgICByZXR1cm4gc3VnZ2VzdE1haWxUbyA/IE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICBtZXNzYWdlOiAnVGhlIFVSTCB5b3UgZW50ZXJlZCBzZWVtcyB0byBiZSBhbiBlbWFpbCBhZGRyZXNzLiBEbyB5b3Ugd2FudCB0byBhZGQgdGhlIHJlcXVpcmVkIG1haWx0bzogcHJlZml4PycsXG4gICAgICAgIHByZXByb2Nlc3M6IG9sZERhdGEgPT4gKHtcbiAgICAgICAgICAuLi5vbGREYXRhLFxuICAgICAgICAgIGhyZWY6ICdtYWlsdG86JyArIHVybFxuICAgICAgICB9KVxuICAgICAgfSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCB0cnlQcm90b2NvbFRyYW5zZm9ybSA9IChhc3N1bWVFeHRlcm5hbFRhcmdldHMsIGRlZmF1bHRMaW5rUHJvdG9jb2wpID0+IGRhdGEgPT4ge1xuICAgICAgY29uc3QgdXJsID0gZGF0YS5ocmVmO1xuICAgICAgY29uc3Qgc3VnZ2VzdFByb3RvY29sID0gYXNzdW1lRXh0ZXJuYWxUYXJnZXRzID09PSAxICYmICFoYXNQcm90b2NvbCh1cmwpIHx8IGFzc3VtZUV4dGVybmFsVGFyZ2V0cyA9PT0gMCAmJiAvXlxccyp3d3coXFwufFxcZFxcLikvaS50ZXN0KHVybCk7XG4gICAgICByZXR1cm4gc3VnZ2VzdFByb3RvY29sID8gT3B0aW9uYWwuc29tZSh7XG4gICAgICAgIG1lc3NhZ2U6IGBUaGUgVVJMIHlvdSBlbnRlcmVkIHNlZW1zIHRvIGJlIGFuIGV4dGVybmFsIGxpbmsuIERvIHlvdSB3YW50IHRvIGFkZCB0aGUgcmVxdWlyZWQgJHsgZGVmYXVsdExpbmtQcm90b2NvbCB9Oi8vIHByZWZpeD9gLFxuICAgICAgICBwcmVwcm9jZXNzOiBvbGREYXRhID0+ICh7XG4gICAgICAgICAgLi4ub2xkRGF0YSxcbiAgICAgICAgICBocmVmOiBkZWZhdWx0TGlua1Byb3RvY29sICsgJzovLycgKyB1cmxcbiAgICAgICAgfSlcbiAgICAgIH0pIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgcHJlcHJvY2VzcyA9IChlZGl0b3IsIGRhdGEpID0+IGZpbmRNYXAoW1xuICAgICAgdHJ5RW1haWxUcmFuc2Zvcm0sXG4gICAgICB0cnlQcm90b2NvbFRyYW5zZm9ybShhc3N1bWVFeHRlcm5hbFRhcmdldHMoZWRpdG9yKSwgZ2V0RGVmYXVsdExpbmtQcm90b2NvbChlZGl0b3IpKVxuICAgIF0sIGYgPT4gZihkYXRhKSkuZm9sZCgoKSA9PiBQcm9taXNlLnJlc29sdmUoZGF0YSksIHRyYW5zZm9ybSA9PiBuZXcgUHJvbWlzZShjYWxsYmFjayA9PiB7XG4gICAgICBkZWxheWVkQ29uZmlybShlZGl0b3IsIHRyYW5zZm9ybS5tZXNzYWdlLCBzdGF0ZSA9PiB7XG4gICAgICAgIGNhbGxiYWNrKHN0YXRlID8gdHJhbnNmb3JtLnByZXByb2Nlc3MoZGF0YSkgOiBkYXRhKTtcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgICBjb25zdCBEaWFsb2dDb25maXJtcyA9IHsgcHJlcHJvY2VzcyB9O1xuXG4gICAgY29uc3QgZ2V0QW5jaG9ycyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBhbmNob3JOb2RlcyA9IGVkaXRvci5kb20uc2VsZWN0KCdhOm5vdChbaHJlZl0pJyk7XG4gICAgICBjb25zdCBhbmNob3JzID0gYmluZChhbmNob3JOb2RlcywgYW5jaG9yID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSBhbmNob3IubmFtZSB8fCBhbmNob3IuaWQ7XG4gICAgICAgIHJldHVybiBpZCA/IFt7XG4gICAgICAgICAgICB0ZXh0OiBpZCxcbiAgICAgICAgICAgIHZhbHVlOiAnIycgKyBpZFxuICAgICAgICAgIH1dIDogW107XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhbmNob3JzLmxlbmd0aCA+IDAgPyBPcHRpb25hbC5zb21lKFt7XG4gICAgICAgICAgdGV4dDogJ05vbmUnLFxuICAgICAgICAgIHZhbHVlOiAnJ1xuICAgICAgICB9XS5jb25jYXQoYW5jaG9ycykpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgQW5jaG9yTGlzdE9wdGlvbnMgPSB7IGdldEFuY2hvcnMgfTtcblxuICAgIGNvbnN0IGdldENsYXNzZXMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgbGlzdCA9IGdldExpbmtDbGFzc0xpc3QoZWRpdG9yKTtcbiAgICAgIGlmIChsaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIExpc3RPcHRpb25zLnNhbml0aXplKGxpc3QpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IENsYXNzTGlzdE9wdGlvbnMgPSB7IGdldENsYXNzZXMgfTtcblxuICAgIGNvbnN0IHBhcnNlSnNvbiA9IHRleHQgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoSlNPTi5wYXJzZSh0ZXh0KSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdldExpbmtzID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGV4dHJhY3RvciA9IGl0ZW0gPT4gZWRpdG9yLmNvbnZlcnRVUkwoaXRlbS52YWx1ZSB8fCBpdGVtLnVybCB8fCAnJywgJ2hyZWYnKTtcbiAgICAgIGNvbnN0IGxpbmtMaXN0ID0gZ2V0TGlua0xpc3QoZWRpdG9yKTtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgaWYgKGlzU3RyaW5nKGxpbmtMaXN0KSkge1xuICAgICAgICAgIGZldGNoKGxpbmtMaXN0KS50aGVuKHJlcyA9PiByZXMub2sgPyByZXMudGV4dCgpLnRoZW4ocGFyc2VKc29uKSA6IFByb21pc2UucmVqZWN0KCkpLnRoZW4ocmVzb2x2ZSwgKCkgPT4gcmVzb2x2ZShPcHRpb25hbC5ub25lKCkpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKGxpbmtMaXN0KSkge1xuICAgICAgICAgIGxpbmtMaXN0KG91dHB1dCA9PiByZXNvbHZlKE9wdGlvbmFsLnNvbWUob3V0cHV0KSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoT3B0aW9uYWwuZnJvbShsaW5rTGlzdCkpO1xuICAgICAgICB9XG4gICAgICB9KS50aGVuKG9wdEl0ZW1zID0+IG9wdEl0ZW1zLmJpbmQoTGlzdE9wdGlvbnMuc2FuaXRpemVXaXRoKGV4dHJhY3RvcikpLm1hcChpdGVtcyA9PiB7XG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3Qgbm9uZUl0ZW0gPSBbe1xuICAgICAgICAgICAgICB0ZXh0OiAnTm9uZScsXG4gICAgICAgICAgICAgIHZhbHVlOiAnJ1xuICAgICAgICAgICAgfV07XG4gICAgICAgICAgcmV0dXJuIG5vbmVJdGVtLmNvbmNhdChpdGVtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfTtcbiAgICBjb25zdCBMaW5rTGlzdE9wdGlvbnMgPSB7IGdldExpbmtzIH07XG5cbiAgICBjb25zdCBnZXRSZWxzID0gKGVkaXRvciwgaW5pdGlhbFRhcmdldCkgPT4ge1xuICAgICAgY29uc3QgbGlzdCA9IGdldFJlbExpc3QoZWRpdG9yKTtcbiAgICAgIGlmIChsaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgaXNUYXJnZXRCbGFuayA9IGlzKGluaXRpYWxUYXJnZXQsICdfYmxhbmsnKTtcbiAgICAgICAgY29uc3QgZW5mb3JjZVNhZmUgPSBhbGxvd1Vuc2FmZUxpbmtUYXJnZXQoZWRpdG9yKSA9PT0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHNhZmVSZWxFeHRyYWN0b3IgPSBpdGVtID0+IGFwcGx5UmVsVGFyZ2V0UnVsZXMoTGlzdE9wdGlvbnMuZ2V0VmFsdWUoaXRlbSksIGlzVGFyZ2V0QmxhbmspO1xuICAgICAgICBjb25zdCBzYW5pdGl6ZXIgPSBlbmZvcmNlU2FmZSA/IExpc3RPcHRpb25zLnNhbml0aXplV2l0aChzYWZlUmVsRXh0cmFjdG9yKSA6IExpc3RPcHRpb25zLnNhbml0aXplO1xuICAgICAgICByZXR1cm4gc2FuaXRpemVyKGxpc3QpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IFJlbE9wdGlvbnMgPSB7IGdldFJlbHMgfTtcblxuICAgIGNvbnN0IGZhbGxiYWNrcyA9IFtcbiAgICAgIHtcbiAgICAgICAgdGV4dDogJ0N1cnJlbnQgd2luZG93JyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0ZXh0OiAnTmV3IHdpbmRvdycsXG4gICAgICAgIHZhbHVlOiAnX2JsYW5rJ1xuICAgICAgfVxuICAgIF07XG4gICAgY29uc3QgZ2V0VGFyZ2V0cyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBsaXN0ID0gZ2V0VGFyZ2V0TGlzdChlZGl0b3IpO1xuICAgICAgaWYgKGlzQXJyYXkobGlzdCkpIHtcbiAgICAgICAgcmV0dXJuIExpc3RPcHRpb25zLnNhbml0aXplKGxpc3QpLm9yVGh1bmsoKCkgPT4gT3B0aW9uYWwuc29tZShmYWxsYmFja3MpKTtcbiAgICAgIH0gZWxzZSBpZiAobGlzdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGZhbGxiYWNrcyk7XG4gICAgfTtcbiAgICBjb25zdCBUYXJnZXRPcHRpb25zID0geyBnZXRUYXJnZXRzIH07XG5cbiAgICBjb25zdCBub25FbXB0eUF0dHIgPSAoZG9tLCBlbGVtLCBuYW1lKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBkb20uZ2V0QXR0cmliKGVsZW0sIG5hbWUpO1xuICAgICAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB2YWwubGVuZ3RoID4gMCA/IE9wdGlvbmFsLnNvbWUodmFsKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGV4dHJhY3RGcm9tQW5jaG9yID0gKGVkaXRvciwgYW5jaG9yKSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgY29uc3Qgb25seVRleHQgPSBpc09ubHlUZXh0U2VsZWN0ZWQoZWRpdG9yKTtcbiAgICAgIGNvbnN0IHRleHQgPSBvbmx5VGV4dCA/IE9wdGlvbmFsLnNvbWUoZ2V0QW5jaG9yVGV4dChlZGl0b3Iuc2VsZWN0aW9uLCBhbmNob3IpKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIGNvbnN0IHVybCA9IGFuY2hvci5iaW5kKGFuY2hvckVsbSA9PiBPcHRpb25hbC5mcm9tKGRvbS5nZXRBdHRyaWIoYW5jaG9yRWxtLCAnaHJlZicpKSk7XG4gICAgICBjb25zdCB0YXJnZXQgPSBhbmNob3IuYmluZChhbmNob3JFbG0gPT4gT3B0aW9uYWwuZnJvbShkb20uZ2V0QXR0cmliKGFuY2hvckVsbSwgJ3RhcmdldCcpKSk7XG4gICAgICBjb25zdCByZWwgPSBhbmNob3IuYmluZChhbmNob3JFbG0gPT4gbm9uRW1wdHlBdHRyKGRvbSwgYW5jaG9yRWxtLCAncmVsJykpO1xuICAgICAgY29uc3QgbGlua0NsYXNzID0gYW5jaG9yLmJpbmQoYW5jaG9yRWxtID0+IG5vbkVtcHR5QXR0cihkb20sIGFuY2hvckVsbSwgJ2NsYXNzJykpO1xuICAgICAgY29uc3QgdGl0bGUgPSBhbmNob3IuYmluZChhbmNob3JFbG0gPT4gbm9uRW1wdHlBdHRyKGRvbSwgYW5jaG9yRWxtLCAndGl0bGUnKSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1cmwsXG4gICAgICAgIHRleHQsXG4gICAgICAgIHRpdGxlLFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIHJlbCxcbiAgICAgICAgbGlua0NsYXNzXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgY29sbGVjdCA9IChlZGl0b3IsIGxpbmtOb2RlKSA9PiBMaW5rTGlzdE9wdGlvbnMuZ2V0TGlua3MoZWRpdG9yKS50aGVuKGxpbmtzID0+IHtcbiAgICAgIGNvbnN0IGFuY2hvciA9IGV4dHJhY3RGcm9tQW5jaG9yKGVkaXRvciwgbGlua05vZGUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW5jaG9yLFxuICAgICAgICBjYXRhbG9nczoge1xuICAgICAgICAgIHRhcmdldHM6IFRhcmdldE9wdGlvbnMuZ2V0VGFyZ2V0cyhlZGl0b3IpLFxuICAgICAgICAgIHJlbHM6IFJlbE9wdGlvbnMuZ2V0UmVscyhlZGl0b3IsIGFuY2hvci50YXJnZXQpLFxuICAgICAgICAgIGNsYXNzZXM6IENsYXNzTGlzdE9wdGlvbnMuZ2V0Q2xhc3NlcyhlZGl0b3IpLFxuICAgICAgICAgIGFuY2hvcjogQW5jaG9yTGlzdE9wdGlvbnMuZ2V0QW5jaG9ycyhlZGl0b3IpLFxuICAgICAgICAgIGxpbms6IGxpbmtzXG4gICAgICAgIH0sXG4gICAgICAgIG9wdE5vZGU6IGxpbmtOb2RlLFxuICAgICAgICBmbGFnczogeyB0aXRsZUVuYWJsZWQ6IHNob3VsZFNob3dMaW5rVGl0bGUoZWRpdG9yKSB9XG4gICAgICB9O1xuICAgIH0pO1xuICAgIGNvbnN0IERpYWxvZ0luZm8gPSB7IGNvbGxlY3QgfTtcblxuICAgIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IChlZGl0b3IsIGluZm8pID0+IGFwaSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gYXBpLmdldERhdGEoKTtcbiAgICAgIGlmICghZGF0YS51cmwudmFsdWUpIHtcbiAgICAgICAgdW5saW5rKGVkaXRvcik7XG4gICAgICAgIGFwaS5jbG9zZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBnZXRDaGFuZ2VkVmFsdWUgPSBrZXkgPT4gT3B0aW9uYWwuZnJvbShkYXRhW2tleV0pLmZpbHRlcih2YWx1ZSA9PiAhaXMoaW5mby5hbmNob3Jba2V5XSwgdmFsdWUpKTtcbiAgICAgIGNvbnN0IGNoYW5nZWREYXRhID0ge1xuICAgICAgICBocmVmOiBkYXRhLnVybC52YWx1ZSxcbiAgICAgICAgdGV4dDogZ2V0Q2hhbmdlZFZhbHVlKCd0ZXh0JyksXG4gICAgICAgIHRhcmdldDogZ2V0Q2hhbmdlZFZhbHVlKCd0YXJnZXQnKSxcbiAgICAgICAgcmVsOiBnZXRDaGFuZ2VkVmFsdWUoJ3JlbCcpLFxuICAgICAgICBjbGFzczogZ2V0Q2hhbmdlZFZhbHVlKCdsaW5rQ2xhc3MnKSxcbiAgICAgICAgdGl0bGU6IGdldENoYW5nZWRWYWx1ZSgndGl0bGUnKVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGF0dGFjaFN0YXRlID0ge1xuICAgICAgICBocmVmOiBkYXRhLnVybC52YWx1ZSxcbiAgICAgICAgYXR0YWNoOiBkYXRhLnVybC5tZXRhICE9PSB1bmRlZmluZWQgJiYgZGF0YS51cmwubWV0YS5hdHRhY2ggPyBkYXRhLnVybC5tZXRhLmF0dGFjaCA6IG5vb3BcbiAgICAgIH07XG4gICAgICBEaWFsb2dDb25maXJtcy5wcmVwcm9jZXNzKGVkaXRvciwgY2hhbmdlZERhdGEpLnRoZW4ocERhdGEgPT4ge1xuICAgICAgICBsaW5rKGVkaXRvciwgYXR0YWNoU3RhdGUsIHBEYXRhKTtcbiAgICAgIH0pO1xuICAgICAgYXBpLmNsb3NlKCk7XG4gICAgfTtcbiAgICBjb25zdCBjb2xsZWN0RGF0YSA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBhbmNob3JOb2RlID0gZ2V0QW5jaG9yRWxlbWVudChlZGl0b3IpO1xuICAgICAgcmV0dXJuIERpYWxvZ0luZm8uY29sbGVjdChlZGl0b3IsIGFuY2hvck5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0SW5pdGlhbERhdGEgPSAoaW5mbywgZGVmYXVsdFRhcmdldCkgPT4ge1xuICAgICAgY29uc3QgYW5jaG9yID0gaW5mby5hbmNob3I7XG4gICAgICBjb25zdCB1cmwgPSBhbmNob3IudXJsLmdldE9yKCcnKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVybDoge1xuICAgICAgICAgIHZhbHVlOiB1cmwsXG4gICAgICAgICAgbWV0YTogeyBvcmlnaW5hbDogeyB2YWx1ZTogdXJsIH0gfVxuICAgICAgICB9LFxuICAgICAgICB0ZXh0OiBhbmNob3IudGV4dC5nZXRPcignJyksXG4gICAgICAgIHRpdGxlOiBhbmNob3IudGl0bGUuZ2V0T3IoJycpLFxuICAgICAgICBhbmNob3I6IHVybCxcbiAgICAgICAgbGluazogdXJsLFxuICAgICAgICByZWw6IGFuY2hvci5yZWwuZ2V0T3IoJycpLFxuICAgICAgICB0YXJnZXQ6IGFuY2hvci50YXJnZXQub3IoZGVmYXVsdFRhcmdldCkuZ2V0T3IoJycpLFxuICAgICAgICBsaW5rQ2xhc3M6IGFuY2hvci5saW5rQ2xhc3MuZ2V0T3IoJycpXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgbWFrZURpYWxvZyA9IChzZXR0aW5ncywgb25TdWJtaXQsIGVkaXRvcikgPT4ge1xuICAgICAgY29uc3QgdXJsSW5wdXQgPSBbe1xuICAgICAgICAgIG5hbWU6ICd1cmwnLFxuICAgICAgICAgIHR5cGU6ICd1cmxpbnB1dCcsXG4gICAgICAgICAgZmlsZXR5cGU6ICdmaWxlJyxcbiAgICAgICAgICBsYWJlbDogJ1VSTCdcbiAgICAgICAgfV07XG4gICAgICBjb25zdCBkaXNwbGF5VGV4dCA9IHNldHRpbmdzLmFuY2hvci50ZXh0Lm1hcCgoKSA9PiAoe1xuICAgICAgICBuYW1lOiAndGV4dCcsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGxhYmVsOiAnVGV4dCB0byBkaXNwbGF5J1xuICAgICAgfSkpLnRvQXJyYXkoKTtcbiAgICAgIGNvbnN0IHRpdGxlVGV4dCA9IHNldHRpbmdzLmZsYWdzLnRpdGxlRW5hYmxlZCA/IFt7XG4gICAgICAgICAgbmFtZTogJ3RpdGxlJyxcbiAgICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICAgIGxhYmVsOiAnVGl0bGUnXG4gICAgICAgIH1dIDogW107XG4gICAgICBjb25zdCBkZWZhdWx0VGFyZ2V0ID0gT3B0aW9uYWwuZnJvbShnZXREZWZhdWx0TGlua1RhcmdldChlZGl0b3IpKTtcbiAgICAgIGNvbnN0IGluaXRpYWxEYXRhID0gZ2V0SW5pdGlhbERhdGEoc2V0dGluZ3MsIGRlZmF1bHRUYXJnZXQpO1xuICAgICAgY29uc3QgY2F0YWxvZ3MgPSBzZXR0aW5ncy5jYXRhbG9ncztcbiAgICAgIGNvbnN0IGRpYWxvZ0RlbHRhID0gRGlhbG9nQ2hhbmdlcy5pbml0KGluaXRpYWxEYXRhLCBjYXRhbG9ncyk7XG4gICAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICB0eXBlOiAncGFuZWwnLFxuICAgICAgICBpdGVtczogZmxhdHRlbihbXG4gICAgICAgICAgdXJsSW5wdXQsXG4gICAgICAgICAgZGlzcGxheVRleHQsXG4gICAgICAgICAgdGl0bGVUZXh0LFxuICAgICAgICAgIGNhdChbXG4gICAgICAgICAgICBjYXRhbG9ncy5hbmNob3IubWFwKExpc3RPcHRpb25zLmNyZWF0ZVVpKCdhbmNob3InLCAnQW5jaG9ycycpKSxcbiAgICAgICAgICAgIGNhdGFsb2dzLnJlbHMubWFwKExpc3RPcHRpb25zLmNyZWF0ZVVpKCdyZWwnLCAnUmVsJykpLFxuICAgICAgICAgICAgY2F0YWxvZ3MudGFyZ2V0cy5tYXAoTGlzdE9wdGlvbnMuY3JlYXRlVWkoJ3RhcmdldCcsICdPcGVuIGxpbmsgaW4uLi4nKSksXG4gICAgICAgICAgICBjYXRhbG9ncy5saW5rLm1hcChMaXN0T3B0aW9ucy5jcmVhdGVVaSgnbGluaycsICdMaW5rIGxpc3QnKSksXG4gICAgICAgICAgICBjYXRhbG9ncy5jbGFzc2VzLm1hcChMaXN0T3B0aW9ucy5jcmVhdGVVaSgnbGlua0NsYXNzJywgJ0NsYXNzJykpXG4gICAgICAgICAgXSlcbiAgICAgICAgXSlcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0aXRsZTogJ0luc2VydC9FZGl0IExpbmsnLFxuICAgICAgICBzaXplOiAnbm9ybWFsJyxcbiAgICAgICAgYm9keSxcbiAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICdjYW5jZWwnLFxuICAgICAgICAgICAgbmFtZTogJ2NhbmNlbCcsXG4gICAgICAgICAgICB0ZXh0OiAnQ2FuY2VsJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICBuYW1lOiAnc2F2ZScsXG4gICAgICAgICAgICB0ZXh0OiAnU2F2ZScsXG4gICAgICAgICAgICBwcmltYXJ5OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBpbml0aWFsRGF0YSxcbiAgICAgICAgb25DaGFuZ2U6IChhcGksIHtuYW1lfSkgPT4ge1xuICAgICAgICAgIGRpYWxvZ0RlbHRhLm9uQ2hhbmdlKGFwaS5nZXREYXRhLCB7IG5hbWUgfSkuZWFjaChuZXdEYXRhID0+IHtcbiAgICAgICAgICAgIGFwaS5zZXREYXRhKG5ld0RhdGEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblN1Ym1pdFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG9wZW4kMSA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gY29sbGVjdERhdGEoZWRpdG9yKTtcbiAgICAgIGRhdGEudGhlbihpbmZvID0+IHtcbiAgICAgICAgY29uc3Qgb25TdWJtaXQgPSBoYW5kbGVTdWJtaXQoZWRpdG9yLCBpbmZvKTtcbiAgICAgICAgcmV0dXJuIG1ha2VEaWFsb2coaW5mbywgb25TdWJtaXQsIGVkaXRvcik7XG4gICAgICB9KS50aGVuKHNwZWMgPT4ge1xuICAgICAgICBlZGl0b3Iud2luZG93TWFuYWdlci5vcGVuKHNwZWMpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlZ2lzdGVyID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5hZGRDb21tYW5kKCdtY2VMaW5rJywgKF91aSwgdmFsdWUpID0+IHtcbiAgICAgICAgaWYgKCh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmFsdWUuZGlhbG9nKSA9PT0gdHJ1ZSB8fCAhdXNlUXVpY2tMaW5rKGVkaXRvcikpIHtcbiAgICAgICAgICBvcGVuJDEoZWRpdG9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ2NvbnRleHR0b29sYmFyLXNob3cnLCB7IHRvb2xiYXJLZXk6ICdxdWlja2xpbmsnIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdmFyIGdsb2JhbCA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLnV0aWwuVksnKTtcblxuICAgIGNvbnN0IGFwcGVuZENsaWNrUmVtb3ZlID0gKGxpbmssIGV2dCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgIGxpbmsuZGlzcGF0Y2hFdmVudChldnQpO1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICB9O1xuICAgIGNvbnN0IG9wZW4gPSB1cmwgPT4ge1xuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIGxpbmsudGFyZ2V0ID0gJ19ibGFuayc7XG4gICAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgICBsaW5rLnJlbCA9ICdub3JlZmVycmVyIG5vb3BlbmVyJztcbiAgICAgIGNvbnN0IGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdNb3VzZUV2ZW50cycpO1xuICAgICAgZXZ0LmluaXRNb3VzZUV2ZW50KCdjbGljaycsIHRydWUsIHRydWUsIHdpbmRvdywgMCwgMCwgMCwgMCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAsIG51bGwpO1xuICAgICAgYXBwZW5kQ2xpY2tSZW1vdmUobGluaywgZXZ0KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0TGluayA9IChlZGl0b3IsIGVsbSkgPT4gZWRpdG9yLmRvbS5nZXRQYXJlbnQoZWxtLCAnYVtocmVmXScpO1xuICAgIGNvbnN0IGdldFNlbGVjdGVkTGluayA9IGVkaXRvciA9PiBnZXRMaW5rKGVkaXRvciwgZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCgpKTtcbiAgICBjb25zdCBoYXNPbmx5QWx0TW9kaWZpZXIgPSBlID0+IHtcbiAgICAgIHJldHVybiBlLmFsdEtleSA9PT0gdHJ1ZSAmJiBlLnNoaWZ0S2V5ID09PSBmYWxzZSAmJiBlLmN0cmxLZXkgPT09IGZhbHNlICYmIGUubWV0YUtleSA9PT0gZmFsc2U7XG4gICAgfTtcbiAgICBjb25zdCBnb3RvTGluayA9IChlZGl0b3IsIGEpID0+IHtcbiAgICAgIGlmIChhKSB7XG4gICAgICAgIGNvbnN0IGhyZWYgPSBnZXRIcmVmKGEpO1xuICAgICAgICBpZiAoL14jLy50ZXN0KGhyZWYpKSB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0RWwgPSBlZGl0b3IuZG9tLnNlbGVjdChocmVmKTtcbiAgICAgICAgICBpZiAodGFyZ2V0RWwubGVuZ3RoKSB7XG4gICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNjcm9sbEludG9WaWV3KHRhcmdldEVsWzBdLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3BlbihhLmhyZWYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBvcGVuRGlhbG9nID0gZWRpdG9yID0+ICgpID0+IHtcbiAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnbWNlTGluaycsIGZhbHNlLCB7IGRpYWxvZzogdHJ1ZSB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGdvdG9TZWxlY3RlZExpbmsgPSBlZGl0b3IgPT4gKCkgPT4ge1xuICAgICAgZ290b0xpbmsoZWRpdG9yLCBnZXRTZWxlY3RlZExpbmsoZWRpdG9yKSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cEdvdG9MaW5rcyA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3Iub24oJ2NsaWNrJywgZSA9PiB7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBnZXRMaW5rKGVkaXRvciwgZS50YXJnZXQpO1xuICAgICAgICBpZiAobGluayAmJiBnbG9iYWwubWV0YUtleVByZXNzZWQoZSkpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZ290b0xpbmsoZWRpdG9yLCBsaW5rKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ2tleWRvd24nLCBlID0+IHtcbiAgICAgICAgaWYgKCFlLmlzRGVmYXVsdFByZXZlbnRlZCgpICYmIGUua2V5Q29kZSA9PT0gMTMgJiYgaGFzT25seUFsdE1vZGlmaWVyKGUpKSB7XG4gICAgICAgICAgY29uc3QgbGluayA9IGdldFNlbGVjdGVkTGluayhlZGl0b3IpO1xuICAgICAgICAgIGlmIChsaW5rKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBnb3RvTGluayhlZGl0b3IsIGxpbmspO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCB0b2dnbGVTdGF0ZSA9IChlZGl0b3IsIHRvZ2dsZXIpID0+IHtcbiAgICAgIGVkaXRvci5vbignTm9kZUNoYW5nZScsIHRvZ2dsZXIpO1xuICAgICAgcmV0dXJuICgpID0+IGVkaXRvci5vZmYoJ05vZGVDaGFuZ2UnLCB0b2dnbGVyKTtcbiAgICB9O1xuICAgIGNvbnN0IHRvZ2dsZUxpbmtTdGF0ZSA9IGVkaXRvciA9PiBhcGkgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlU3RhdGUgPSAoKSA9PiB7XG4gICAgICAgIGFwaS5zZXRBY3RpdmUoIWVkaXRvci5tb2RlLmlzUmVhZE9ubHkoKSAmJiBpc0luQW5jaG9yKGVkaXRvciwgZWRpdG9yLnNlbGVjdGlvbi5nZXROb2RlKCkpKTtcbiAgICAgICAgYXBpLnNldEVuYWJsZWQoZWRpdG9yLnNlbGVjdGlvbi5pc0VkaXRhYmxlKCkpO1xuICAgICAgfTtcbiAgICAgIHVwZGF0ZVN0YXRlKCk7XG4gICAgICByZXR1cm4gdG9nZ2xlU3RhdGUoZWRpdG9yLCB1cGRhdGVTdGF0ZSk7XG4gICAgfTtcbiAgICBjb25zdCB0b2dnbGVMaW5rTWVudVN0YXRlID0gZWRpdG9yID0+IGFwaSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVTdGF0ZSA9ICgpID0+IHtcbiAgICAgICAgYXBpLnNldEVuYWJsZWQoZWRpdG9yLnNlbGVjdGlvbi5pc0VkaXRhYmxlKCkpO1xuICAgICAgfTtcbiAgICAgIHVwZGF0ZVN0YXRlKCk7XG4gICAgICByZXR1cm4gdG9nZ2xlU3RhdGUoZWRpdG9yLCB1cGRhdGVTdGF0ZSk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNFeGFjdGx5T25lTGlua0luU2VsZWN0aW9uID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGxpbmtzID0gZWRpdG9yLnNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpID8gZ2V0TGlua3MkMShlZGl0b3IuZG9tLmdldFBhcmVudHMoZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCgpKSkgOiBnZXRMaW5rc0luU2VsZWN0aW9uKGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpO1xuICAgICAgcmV0dXJuIGxpbmtzLmxlbmd0aCA9PT0gMTtcbiAgICB9O1xuICAgIGNvbnN0IHRvZ2dsZUdvdG9MaW5rU3RhdGUgPSBlZGl0b3IgPT4gYXBpID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZVN0YXRlID0gKCkgPT4gYXBpLnNldEVuYWJsZWQoaGFzRXhhY3RseU9uZUxpbmtJblNlbGVjdGlvbihlZGl0b3IpKTtcbiAgICAgIHVwZGF0ZVN0YXRlKCk7XG4gICAgICByZXR1cm4gdG9nZ2xlU3RhdGUoZWRpdG9yLCB1cGRhdGVTdGF0ZSk7XG4gICAgfTtcbiAgICBjb25zdCB0b2dnbGVVbmxpbmtTdGF0ZSA9IGVkaXRvciA9PiBhcGkgPT4ge1xuICAgICAgY29uc3QgaGFzTGlua3MkMSA9IHBhcmVudHMgPT4gaGFzTGlua3MocGFyZW50cykgfHwgaGFzTGlua3NJblNlbGVjdGlvbihlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKTtcbiAgICAgIGNvbnN0IHBhcmVudHMgPSBlZGl0b3IuZG9tLmdldFBhcmVudHMoZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCgpKTtcbiAgICAgIGNvbnN0IHVwZGF0ZUVuYWJsZWQgPSBwYXJlbnRzID0+IHtcbiAgICAgICAgYXBpLnNldEVuYWJsZWQoaGFzTGlua3MkMShwYXJlbnRzKSAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRWRpdGFibGUoKSk7XG4gICAgICB9O1xuICAgICAgdXBkYXRlRW5hYmxlZChwYXJlbnRzKTtcbiAgICAgIHJldHVybiB0b2dnbGVTdGF0ZShlZGl0b3IsIGUgPT4gdXBkYXRlRW5hYmxlZChlLnBhcmVudHMpKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0dXAgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmFkZFNob3J0Y3V0KCdNZXRhK0snLCAnJywgKCkgPT4ge1xuICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZUxpbmsnKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBzZXR1cEJ1dHRvbnMgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZFRvZ2dsZUJ1dHRvbignbGluaycsIHtcbiAgICAgICAgaWNvbjogJ2xpbmsnLFxuICAgICAgICB0b29sdGlwOiAnSW5zZXJ0L2VkaXQgbGluaycsXG4gICAgICAgIG9uQWN0aW9uOiBvcGVuRGlhbG9nKGVkaXRvciksXG4gICAgICAgIG9uU2V0dXA6IHRvZ2dsZUxpbmtTdGF0ZShlZGl0b3IpXG4gICAgICB9KTtcbiAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRCdXR0b24oJ29wZW5saW5rJywge1xuICAgICAgICBpY29uOiAnbmV3LXRhYicsXG4gICAgICAgIHRvb2x0aXA6ICdPcGVuIGxpbmsnLFxuICAgICAgICBvbkFjdGlvbjogZ290b1NlbGVjdGVkTGluayhlZGl0b3IpLFxuICAgICAgICBvblNldHVwOiB0b2dnbGVHb3RvTGlua1N0YXRlKGVkaXRvcilcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZEJ1dHRvbigndW5saW5rJywge1xuICAgICAgICBpY29uOiAndW5saW5rJyxcbiAgICAgICAgdG9vbHRpcDogJ1JlbW92ZSBsaW5rJyxcbiAgICAgICAgb25BY3Rpb246ICgpID0+IHVubGluayhlZGl0b3IpLFxuICAgICAgICBvblNldHVwOiB0b2dnbGVVbmxpbmtTdGF0ZShlZGl0b3IpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHNldHVwTWVudUl0ZW1zID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRNZW51SXRlbSgnb3BlbmxpbmsnLCB7XG4gICAgICAgIHRleHQ6ICdPcGVuIGxpbmsnLFxuICAgICAgICBpY29uOiAnbmV3LXRhYicsXG4gICAgICAgIG9uQWN0aW9uOiBnb3RvU2VsZWN0ZWRMaW5rKGVkaXRvciksXG4gICAgICAgIG9uU2V0dXA6IHRvZ2dsZUdvdG9MaW5rU3RhdGUoZWRpdG9yKVxuICAgICAgfSk7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTWVudUl0ZW0oJ2xpbmsnLCB7XG4gICAgICAgIGljb246ICdsaW5rJyxcbiAgICAgICAgdGV4dDogJ0xpbmsuLi4nLFxuICAgICAgICBzaG9ydGN1dDogJ01ldGErSycsXG4gICAgICAgIG9uU2V0dXA6IHRvZ2dsZUxpbmtNZW51U3RhdGUoZWRpdG9yKSxcbiAgICAgICAgb25BY3Rpb246IG9wZW5EaWFsb2coZWRpdG9yKVxuICAgICAgfSk7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTWVudUl0ZW0oJ3VubGluaycsIHtcbiAgICAgICAgaWNvbjogJ3VubGluaycsXG4gICAgICAgIHRleHQ6ICdSZW1vdmUgbGluaycsXG4gICAgICAgIG9uQWN0aW9uOiAoKSA9PiB1bmxpbmsoZWRpdG9yKSxcbiAgICAgICAgb25TZXR1cDogdG9nZ2xlVW5saW5rU3RhdGUoZWRpdG9yKVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cENvbnRleHRNZW51ID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGluTGluayA9ICdsaW5rIHVubGluayBvcGVubGluayc7XG4gICAgICBjb25zdCBub0xpbmsgPSAnbGluayc7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQ29udGV4dE1lbnUoJ2xpbmsnLCB7XG4gICAgICAgIHVwZGF0ZTogZWxlbWVudCA9PiB7XG4gICAgICAgICAgY29uc3QgaXNFZGl0YWJsZSA9IGVkaXRvci5kb20uaXNFZGl0YWJsZShlbGVtZW50KTtcbiAgICAgICAgICBpZiAoIWlzRWRpdGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGhhc0xpbmtzKGVkaXRvci5kb20uZ2V0UGFyZW50cyhlbGVtZW50LCAnYScpKSA/IGluTGluayA6IG5vTGluaztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cENvbnRleHRUb29sYmFycyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBjb2xsYXBzZVNlbGVjdGlvblRvRW5kID0gZWRpdG9yID0+IHtcbiAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5jb2xsYXBzZShmYWxzZSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25TZXR1cExpbmsgPSBidXR0b25BcGkgPT4ge1xuICAgICAgICBjb25zdCBub2RlID0gZWRpdG9yLnNlbGVjdGlvbi5nZXROb2RlKCk7XG4gICAgICAgIGJ1dHRvbkFwaS5zZXRFbmFibGVkKGlzSW5BbmNob3IoZWRpdG9yLCBub2RlKSk7XG4gICAgICAgIHJldHVybiBub29wO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldExpbmtUZXh0ID0gdmFsdWUgPT4ge1xuICAgICAgICBjb25zdCBhbmNob3IgPSBnZXRBbmNob3JFbGVtZW50KGVkaXRvcik7XG4gICAgICAgIGNvbnN0IG9ubHlUZXh0ID0gaXNPbmx5VGV4dFNlbGVjdGVkKGVkaXRvcik7XG4gICAgICAgIGlmIChhbmNob3IuaXNOb25lKCkgJiYgb25seVRleHQpIHtcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gZ2V0QW5jaG9yVGV4dChlZGl0b3Iuc2VsZWN0aW9uLCBhbmNob3IpO1xuICAgICAgICAgIHJldHVybiBzb21lSWYodGV4dC5sZW5ndGggPT09IDAsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZENvbnRleHRGb3JtKCdxdWlja2xpbmsnLCB7XG4gICAgICAgIGxhdW5jaDoge1xuICAgICAgICAgIHR5cGU6ICdjb250ZXh0Zm9ybXRvZ2dsZWJ1dHRvbicsXG4gICAgICAgICAgaWNvbjogJ2xpbmsnLFxuICAgICAgICAgIHRvb2x0aXA6ICdMaW5rJyxcbiAgICAgICAgICBvblNldHVwOiB0b2dnbGVMaW5rU3RhdGUoZWRpdG9yKVxuICAgICAgICB9LFxuICAgICAgICBsYWJlbDogJ0xpbmsnLFxuICAgICAgICBwcmVkaWNhdGU6IG5vZGUgPT4gaGFzQ29udGV4dFRvb2xiYXIoZWRpdG9yKSAmJiBpc0luQW5jaG9yKGVkaXRvciwgbm9kZSksXG4gICAgICAgIGluaXRWYWx1ZTogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVsbSA9IGdldEFuY2hvckVsZW1lbnQoZWRpdG9yKTtcbiAgICAgICAgICByZXR1cm4gZWxtLmZvbGQoY29uc3RhbnQoJycpLCBnZXRIcmVmKTtcbiAgICAgICAgfSxcbiAgICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAnY29udGV4dGZvcm10b2dnbGVidXR0b24nLFxuICAgICAgICAgICAgaWNvbjogJ2xpbmsnLFxuICAgICAgICAgICAgdG9vbHRpcDogJ0xpbmsnLFxuICAgICAgICAgICAgcHJpbWFyeTogdHJ1ZSxcbiAgICAgICAgICAgIG9uU2V0dXA6IGJ1dHRvbkFwaSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKTtcbiAgICAgICAgICAgICAgYnV0dG9uQXBpLnNldEFjdGl2ZShpc0luQW5jaG9yKGVkaXRvciwgbm9kZSkpO1xuICAgICAgICAgICAgICByZXR1cm4gdG9nZ2xlTGlua1N0YXRlKGVkaXRvcikoYnV0dG9uQXBpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkFjdGlvbjogZm9ybUFwaSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZm9ybUFwaS5nZXRWYWx1ZSgpO1xuICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gZ2V0TGlua1RleHQodmFsdWUpO1xuICAgICAgICAgICAgICBjb25zdCBhdHRhY2hTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICBocmVmOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICBhdHRhY2g6IG5vb3BcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgbGluayhlZGl0b3IsIGF0dGFjaFN0YXRlLCB7XG4gICAgICAgICAgICAgICAgaHJlZjogdmFsdWUsXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICB0aXRsZTogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICAgICAgICAgIHJlbDogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICAgICAgICAgIHRhcmdldDogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICAgICAgICAgIGNsYXNzOiBPcHRpb25hbC5ub25lKClcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNvbGxhcHNlU2VsZWN0aW9uVG9FbmQoZWRpdG9yKTtcbiAgICAgICAgICAgICAgZm9ybUFwaS5oaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAnY29udGV4dGZvcm1idXR0b24nLFxuICAgICAgICAgICAgaWNvbjogJ3VubGluaycsXG4gICAgICAgICAgICB0b29sdGlwOiAnUmVtb3ZlIGxpbmsnLFxuICAgICAgICAgICAgb25TZXR1cDogb25TZXR1cExpbmssXG4gICAgICAgICAgICBvbkFjdGlvbjogZm9ybUFwaSA9PiB7XG4gICAgICAgICAgICAgIHVubGluayhlZGl0b3IpO1xuICAgICAgICAgICAgICBmb3JtQXBpLmhpZGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICdjb250ZXh0Zm9ybWJ1dHRvbicsXG4gICAgICAgICAgICBpY29uOiAnbmV3LXRhYicsXG4gICAgICAgICAgICB0b29sdGlwOiAnT3BlbiBsaW5rJyxcbiAgICAgICAgICAgIG9uU2V0dXA6IG9uU2V0dXBMaW5rLFxuICAgICAgICAgICAgb25BY3Rpb246IGZvcm1BcGkgPT4ge1xuICAgICAgICAgICAgICBnb3RvU2VsZWN0ZWRMaW5rKGVkaXRvcikoKTtcbiAgICAgICAgICAgICAgZm9ybUFwaS5oaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdmFyIFBsdWdpbiA9ICgpID0+IHtcbiAgICAgIGdsb2JhbCQ1LmFkZCgnbGluaycsIGVkaXRvciA9PiB7XG4gICAgICAgIHJlZ2lzdGVyJDEoZWRpdG9yKTtcbiAgICAgICAgc2V0dXBCdXR0b25zKGVkaXRvcik7XG4gICAgICAgIHNldHVwTWVudUl0ZW1zKGVkaXRvcik7XG4gICAgICAgIHNldHVwQ29udGV4dE1lbnUoZWRpdG9yKTtcbiAgICAgICAgc2V0dXBDb250ZXh0VG9vbGJhcnMoZWRpdG9yKTtcbiAgICAgICAgc2V0dXBHb3RvTGlua3MoZWRpdG9yKTtcbiAgICAgICAgcmVnaXN0ZXIoZWRpdG9yKTtcbiAgICAgICAgc2V0dXAoZWRpdG9yKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBQbHVnaW4oKTtcblxufSkoKTtcbiIsIi8vIEV4cG9ydHMgdGhlIFwibGlzdHNcIiBwbHVnaW4gZm9yIHVzYWdlIHdpdGggbW9kdWxlIGxvYWRlcnNcbi8vIFVzYWdlOlxuLy8gICBDb21tb25KUzpcbi8vICAgICByZXF1aXJlKCd0aW55bWNlL3BsdWdpbnMvbGlzdHMnKVxuLy8gICBFUzIwMTU6XG4vLyAgICAgaW1wb3J0ICd0aW55bWNlL3BsdWdpbnMvbGlzdHMnXG5yZXF1aXJlKCcuL3BsdWdpbi5qcycpOyIsIi8qKlxuICogVGlueU1DRSB2ZXJzaW9uIDYuNy4wICgyMDIzLTA4LTMwKVxuICovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIGdsb2JhbCQ3ID0gdGlueW1jZS51dGlsLlRvb2xzLnJlc29sdmUoJ3RpbnltY2UuUGx1Z2luTWFuYWdlcicpO1xuXG4gICAgY29uc3QgaGFzUHJvdG8gPSAodiwgY29uc3RydWN0b3IsIHByZWRpY2F0ZSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgaWYgKHByZWRpY2F0ZSh2LCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICgoX2EgPSB2LmNvbnN0cnVjdG9yKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmFtZSkgPT09IGNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB0eXBlT2YgPSB4ID0+IHtcbiAgICAgIGNvbnN0IHQgPSB0eXBlb2YgeDtcbiAgICAgIGlmICh4ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgICB9IGVsc2UgaWYgKHQgPT09ICdvYmplY3QnICYmIEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgICB9IGVsc2UgaWYgKHQgPT09ICdvYmplY3QnICYmIGhhc1Byb3RvKHgsIFN0cmluZywgKG8sIHByb3RvKSA9PiBwcm90by5pc1Byb3RvdHlwZU9mKG8pKSkge1xuICAgICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlzVHlwZSQxID0gdHlwZSA9PiB2YWx1ZSA9PiB0eXBlT2YodmFsdWUpID09PSB0eXBlO1xuICAgIGNvbnN0IGlzU2ltcGxlVHlwZSA9IHR5cGUgPT4gdmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSB0eXBlO1xuICAgIGNvbnN0IGlzU3RyaW5nID0gaXNUeXBlJDEoJ3N0cmluZycpO1xuICAgIGNvbnN0IGlzT2JqZWN0ID0gaXNUeXBlJDEoJ29iamVjdCcpO1xuICAgIGNvbnN0IGlzQXJyYXkgPSBpc1R5cGUkMSgnYXJyYXknKTtcbiAgICBjb25zdCBpc0Jvb2xlYW4gPSBpc1NpbXBsZVR5cGUoJ2Jvb2xlYW4nKTtcbiAgICBjb25zdCBpc051bGxhYmxlID0gYSA9PiBhID09PSBudWxsIHx8IGEgPT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpc05vbk51bGxhYmxlID0gYSA9PiAhaXNOdWxsYWJsZShhKTtcbiAgICBjb25zdCBpc0Z1bmN0aW9uID0gaXNTaW1wbGVUeXBlKCdmdW5jdGlvbicpO1xuICAgIGNvbnN0IGlzTnVtYmVyID0gaXNTaW1wbGVUeXBlKCdudW1iZXInKTtcblxuICAgIGNvbnN0IG5vb3AgPSAoKSA9PiB7XG4gICAgfTtcbiAgICBjb25zdCBjb25zdGFudCA9IHZhbHVlID0+IHtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCB0cmlwbGVFcXVhbHMgPSAoYSwgYikgPT4ge1xuICAgICAgcmV0dXJuIGEgPT09IGI7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBjdXJyeShmbiwgLi4uaW5pdGlhbEFyZ3MpIHtcbiAgICAgIHJldHVybiAoLi4ucmVzdEFyZ3MpID0+IHtcbiAgICAgICAgY29uc3QgYWxsID0gaW5pdGlhbEFyZ3MuY29uY2F0KHJlc3RBcmdzKTtcbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIGFsbCk7XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBub3QgPSBmID0+IHQgPT4gIWYodCk7XG4gICAgY29uc3QgbmV2ZXIgPSBjb25zdGFudChmYWxzZSk7XG5cbiAgICBjbGFzcyBPcHRpb25hbCB7XG4gICAgICBjb25zdHJ1Y3Rvcih0YWcsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMudGFnID0gdGFnO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgICBzdGF0aWMgc29tZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IE9wdGlvbmFsKHRydWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHN0YXRpYyBub25lKCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc2luZ2xldG9uTm9uZTtcbiAgICAgIH1cbiAgICAgIGZvbGQob25Ob25lLCBvblNvbWUpIHtcbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgcmV0dXJuIG9uU29tZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb25Ob25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlzU29tZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnO1xuICAgICAgfVxuICAgICAgaXNOb25lKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudGFnO1xuICAgICAgfVxuICAgICAgbWFwKG1hcHBlcikge1xuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShtYXBwZXIodGhpcy52YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJpbmQoYmluZGVyKSB7XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgIHJldHVybiBiaW5kZXIodGhpcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXhpc3RzKHByZWRpY2F0ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgJiYgcHJlZGljYXRlKHRoaXMudmFsdWUpO1xuICAgICAgfVxuICAgICAgZm9yYWxsKHByZWRpY2F0ZSkge1xuICAgICAgICByZXR1cm4gIXRoaXMudGFnIHx8IHByZWRpY2F0ZSh0aGlzLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZpbHRlcihwcmVkaWNhdGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhZyB8fCBwcmVkaWNhdGUodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBnZXRPcihyZXBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzLnZhbHVlIDogcmVwbGFjZW1lbnQ7XG4gICAgICB9XG4gICAgICBvcihyZXBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzIDogcmVwbGFjZW1lbnQ7XG4gICAgICB9XG4gICAgICBnZXRPclRodW5rKHRodW5rKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMudmFsdWUgOiB0aHVuaygpO1xuICAgICAgfVxuICAgICAgb3JUaHVuayh0aHVuaykge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzIDogdGh1bmsoKTtcbiAgICAgIH1cbiAgICAgIGdldE9yRGllKG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhZykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlICE9PSBudWxsICYmIG1lc3NhZ2UgIT09IHZvaWQgMCA/IG1lc3NhZ2UgOiAnQ2FsbGVkIGdldE9yRGllIG9uIE5vbmUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RhdGljIGZyb20odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUodmFsdWUpID8gT3B0aW9uYWwuc29tZSh2YWx1ZSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICBnZXRPck51bGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMudmFsdWUgOiBudWxsO1xuICAgICAgfVxuICAgICAgZ2V0T3JVbmRlZmluZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgICAgfVxuICAgICAgZWFjaCh3b3JrZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgd29ya2VyKHRoaXMudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0b0FycmF5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyBbdGhpcy52YWx1ZV0gOiBbXTtcbiAgICAgIH1cbiAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyBgc29tZSgkeyB0aGlzLnZhbHVlIH0pYCA6ICdub25lKCknO1xuICAgICAgfVxuICAgIH1cbiAgICBPcHRpb25hbC5zaW5nbGV0b25Ob25lID0gbmV3IE9wdGlvbmFsKGZhbHNlKTtcblxuICAgIGNvbnN0IG5hdGl2ZVNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuICAgIGNvbnN0IG5hdGl2ZUluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbiAgICBjb25zdCBuYXRpdmVQdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7XG4gICAgY29uc3QgcmF3SW5kZXhPZiA9ICh0cywgdCkgPT4gbmF0aXZlSW5kZXhPZi5jYWxsKHRzLCB0KTtcbiAgICBjb25zdCBjb250YWlucyQxID0gKHhzLCB4KSA9PiByYXdJbmRleE9mKHhzLCB4KSA+IC0xO1xuICAgIGNvbnN0IGV4aXN0cyA9ICh4cywgcHJlZCkgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgaWYgKHByZWQoeCwgaSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgY29uc3QgbWFwID0gKHhzLCBmKSA9PiB7XG4gICAgICBjb25zdCBsZW4gPSB4cy5sZW5ndGg7XG4gICAgICBjb25zdCByID0gbmV3IEFycmF5KGxlbik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgcltpXSA9IGYoeCwgaSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IGVhY2gkMSA9ICh4cywgZikgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgZih4LCBpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbHRlciQxID0gKHhzLCBwcmVkKSA9PiB7XG4gICAgICBjb25zdCByID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0geHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgeCA9IHhzW2ldO1xuICAgICAgICBpZiAocHJlZCh4LCBpKSkge1xuICAgICAgICAgIHIucHVzaCh4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBncm91cEJ5ID0gKHhzLCBmKSA9PiB7XG4gICAgICBpZiAoeHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB3YXNUeXBlID0gZih4c1swXSk7XG4gICAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgICAgbGV0IGdyb3VwID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgICBjb25zdCB0eXBlID0gZih4KTtcbiAgICAgICAgICBpZiAodHlwZSAhPT0gd2FzVHlwZSkge1xuICAgICAgICAgICAgci5wdXNoKGdyb3VwKTtcbiAgICAgICAgICAgIGdyb3VwID0gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIHdhc1R5cGUgPSB0eXBlO1xuICAgICAgICAgIGdyb3VwLnB1c2goeCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdyb3VwLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIHIucHVzaChncm91cCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBmb2xkbCA9ICh4cywgZiwgYWNjKSA9PiB7XG4gICAgICBlYWNoJDEoeHMsICh4LCBpKSA9PiB7XG4gICAgICAgIGFjYyA9IGYoYWNjLCB4LCBpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRVbnRpbCA9ICh4cywgcHJlZCwgdW50aWwpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoeCk7XG4gICAgICAgIH0gZWxzZSBpZiAodW50aWwoeCwgaSkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmQgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIHJldHVybiBmaW5kVW50aWwoeHMsIHByZWQsIG5ldmVyKTtcbiAgICB9O1xuICAgIGNvbnN0IGZsYXR0ZW4gPSB4cyA9PiB7XG4gICAgICBjb25zdCByID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0geHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgaWYgKCFpc0FycmF5KHhzW2ldKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXJyLmZsYXR0ZW4gaXRlbSAnICsgaSArICcgd2FzIG5vdCBhbiBhcnJheSwgaW5wdXQ6ICcgKyB4cyk7XG4gICAgICAgIH1cbiAgICAgICAgbmF0aXZlUHVzaC5hcHBseShyLCB4c1tpXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IGJpbmQgPSAoeHMsIGYpID0+IGZsYXR0ZW4obWFwKHhzLCBmKSk7XG4gICAgY29uc3QgcmV2ZXJzZSA9IHhzID0+IHtcbiAgICAgIGNvbnN0IHIgPSBuYXRpdmVTbGljZS5jYWxsKHhzLCAwKTtcbiAgICAgIHIucmV2ZXJzZSgpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBnZXQkMSA9ICh4cywgaSkgPT4gaSA+PSAwICYmIGkgPCB4cy5sZW5ndGggPyBPcHRpb25hbC5zb21lKHhzW2ldKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICBjb25zdCBoZWFkID0geHMgPT4gZ2V0JDEoeHMsIDApO1xuICAgIGNvbnN0IGxhc3QgPSB4cyA9PiBnZXQkMSh4cywgeHMubGVuZ3RoIC0gMSk7XG4gICAgY29uc3QgdW5pcXVlID0gKHhzLCBjb21wYXJhdG9yKSA9PiB7XG4gICAgICBjb25zdCByID0gW107XG4gICAgICBjb25zdCBpc0R1cGxpY2F0ZWQgPSBpc0Z1bmN0aW9uKGNvbXBhcmF0b3IpID8geCA9PiBleGlzdHMociwgaSA9PiBjb21wYXJhdG9yKGksIHgpKSA6IHggPT4gY29udGFpbnMkMShyLCB4KTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmICghaXNEdXBsaWNhdGVkKHgpKSB7XG4gICAgICAgICAgci5wdXNoKHgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuXG4gICAgY29uc3QgaXMkMiA9IChsaHMsIHJocywgY29tcGFyYXRvciA9IHRyaXBsZUVxdWFscykgPT4gbGhzLmV4aXN0cyhsZWZ0ID0+IGNvbXBhcmF0b3IobGVmdCwgcmhzKSk7XG4gICAgY29uc3QgZXF1YWxzID0gKGxocywgcmhzLCBjb21wYXJhdG9yID0gdHJpcGxlRXF1YWxzKSA9PiBsaWZ0MihsaHMsIHJocywgY29tcGFyYXRvcikuZ2V0T3IobGhzLmlzTm9uZSgpICYmIHJocy5pc05vbmUoKSk7XG4gICAgY29uc3QgbGlmdDIgPSAob2EsIG9iLCBmKSA9PiBvYS5pc1NvbWUoKSAmJiBvYi5pc1NvbWUoKSA/IE9wdGlvbmFsLnNvbWUoZihvYS5nZXRPckRpZSgpLCBvYi5nZXRPckRpZSgpKSkgOiBPcHRpb25hbC5ub25lKCk7XG5cbiAgICBjb25zdCBFTEVNRU5UID0gMTtcblxuICAgIGNvbnN0IGZyb21IdG1sID0gKGh0bWwsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBzY29wZSB8fCBkb2N1bWVudDtcbiAgICAgIGNvbnN0IGRpdiA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGRpdi5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgaWYgKCFkaXYuaGFzQ2hpbGROb2RlcygpIHx8IGRpdi5jaGlsZE5vZGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9ICdIVE1MIGRvZXMgbm90IGhhdmUgYSBzaW5nbGUgcm9vdCBub2RlJztcbiAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlLCBodG1sKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZyb21Eb20kMShkaXYuY2hpbGROb2Rlc1swXSk7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tVGFnID0gKHRhZywgc2NvcGUpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IHNjb3BlIHx8IGRvY3VtZW50O1xuICAgICAgY29uc3Qgbm9kZSA9IGRvYy5jcmVhdGVFbGVtZW50KHRhZyk7XG4gICAgICByZXR1cm4gZnJvbURvbSQxKG5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgZnJvbVRleHQgPSAodGV4dCwgc2NvcGUpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IHNjb3BlIHx8IGRvY3VtZW50O1xuICAgICAgY29uc3Qgbm9kZSA9IGRvYy5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcbiAgICAgIHJldHVybiBmcm9tRG9tJDEobm9kZSk7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tRG9tJDEgPSBub2RlID0+IHtcbiAgICAgIGlmIChub2RlID09PSBudWxsIHx8IG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vZGUgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBkb206IG5vZGUgfTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21Qb2ludCA9IChkb2NFbG0sIHgsIHkpID0+IE9wdGlvbmFsLmZyb20oZG9jRWxtLmRvbS5lbGVtZW50RnJvbVBvaW50KHgsIHkpKS5tYXAoZnJvbURvbSQxKTtcbiAgICBjb25zdCBTdWdhckVsZW1lbnQgPSB7XG4gICAgICBmcm9tSHRtbCxcbiAgICAgIGZyb21UYWcsXG4gICAgICBmcm9tVGV4dCxcbiAgICAgIGZyb21Eb206IGZyb21Eb20kMSxcbiAgICAgIGZyb21Qb2ludFxuICAgIH07XG5cbiAgICBjb25zdCBpcyQxID0gKGVsZW1lbnQsIHNlbGVjdG9yKSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGlmIChkb20ubm9kZVR5cGUgIT09IEVMRU1FTlQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZWxlbSA9IGRvbTtcbiAgICAgICAgaWYgKGVsZW0ubWF0Y2hlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZW0ubWF0Y2hlcyhzZWxlY3Rvcik7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbS5tc01hdGNoZXNTZWxlY3RvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZW0ubXNNYXRjaGVzU2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW0ubW96TWF0Y2hlc1NlbGVjdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbS5tb3pNYXRjaGVzU2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQnJvd3NlciBsYWNrcyBuYXRpdmUgc2VsZWN0b3JzJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZXEgPSAoZTEsIGUyKSA9PiBlMS5kb20gPT09IGUyLmRvbTtcbiAgICBjb25zdCBjb250YWlucyA9IChlMSwgZTIpID0+IHtcbiAgICAgIGNvbnN0IGQxID0gZTEuZG9tO1xuICAgICAgY29uc3QgZDIgPSBlMi5kb207XG4gICAgICByZXR1cm4gZDEgPT09IGQyID8gZmFsc2UgOiBkMS5jb250YWlucyhkMik7XG4gICAgfTtcbiAgICBjb25zdCBpcyA9IGlzJDE7XG5cbiAgICB2YXIgQ2xvc2VzdE9yQW5jZXN0b3IgPSAoaXMsIGFuY2VzdG9yLCBzY29wZSwgYSwgaXNSb290KSA9PiB7XG4gICAgICBpZiAoaXMoc2NvcGUsIGEpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHNjb3BlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihpc1Jvb3QpICYmIGlzUm9vdChzY29wZSkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhbmNlc3RvcihzY29wZSwgYSwgaXNSb290KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBGdW5jdGlvbigncmV0dXJuIHRoaXM7JykoKTtcblxuICAgIGNvbnN0IG5hbWUgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IHIgPSBlbGVtZW50LmRvbS5ub2RlTmFtZTtcbiAgICAgIHJldHVybiByLnRvTG93ZXJDYXNlKCk7XG4gICAgfTtcbiAgICBjb25zdCB0eXBlID0gZWxlbWVudCA9PiBlbGVtZW50LmRvbS5ub2RlVHlwZTtcbiAgICBjb25zdCBpc1R5cGUgPSB0ID0+IGVsZW1lbnQgPT4gdHlwZShlbGVtZW50KSA9PT0gdDtcbiAgICBjb25zdCBpc0VsZW1lbnQkMSA9IGlzVHlwZShFTEVNRU5UKTtcbiAgICBjb25zdCBpc1RhZyA9IHRhZyA9PiBlID0+IGlzRWxlbWVudCQxKGUpICYmIG5hbWUoZSkgPT09IHRhZztcblxuICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQgPT4gT3B0aW9uYWwuZnJvbShlbGVtZW50LmRvbS5wYXJlbnROb2RlKS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBlbGVtZW50ID0+IE9wdGlvbmFsLmZyb20oZWxlbWVudC5kb20ucGFyZW50RWxlbWVudCkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBuZXh0U2libGluZyA9IGVsZW1lbnQgPT4gT3B0aW9uYWwuZnJvbShlbGVtZW50LmRvbS5uZXh0U2libGluZykubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGVsZW1lbnQgPT4gbWFwKGVsZW1lbnQuZG9tLmNoaWxkTm9kZXMsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBjaGlsZCA9IChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgY3MgPSBlbGVtZW50LmRvbS5jaGlsZE5vZGVzO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oY3NbaW5kZXhdKS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIH07XG4gICAgY29uc3QgZmlyc3RDaGlsZCA9IGVsZW1lbnQgPT4gY2hpbGQoZWxlbWVudCwgMCk7XG4gICAgY29uc3QgbGFzdENoaWxkID0gZWxlbWVudCA9PiBjaGlsZChlbGVtZW50LCBlbGVtZW50LmRvbS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEpO1xuXG4gICAgY29uc3QgYW5jZXN0b3IkMiA9IChzY29wZSwgcHJlZGljYXRlLCBpc1Jvb3QpID0+IHtcbiAgICAgIGxldCBlbGVtZW50ID0gc2NvcGUuZG9tO1xuICAgICAgY29uc3Qgc3RvcCA9IGlzRnVuY3Rpb24oaXNSb290KSA/IGlzUm9vdCA6IG5ldmVyO1xuICAgICAgd2hpbGUgKGVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuICAgICAgICBjb25zdCBlbCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsZW1lbnQpO1xuICAgICAgICBpZiAocHJlZGljYXRlKGVsKSkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGVsKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdG9wKGVsKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgY2xvc2VzdCA9IChzY29wZSwgcHJlZGljYXRlLCBpc1Jvb3QpID0+IHtcbiAgICAgIGNvbnN0IGlzID0gKHMsIHRlc3QpID0+IHRlc3Qocyk7XG4gICAgICByZXR1cm4gQ2xvc2VzdE9yQW5jZXN0b3IoaXMsIGFuY2VzdG9yJDIsIHNjb3BlLCBwcmVkaWNhdGUsIGlzUm9vdCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJlZm9yZSQxID0gKG1hcmtlciwgZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50JDEgPSBwYXJlbnQobWFya2VyKTtcbiAgICAgIHBhcmVudCQxLmVhY2godiA9PiB7XG4gICAgICAgIHYuZG9tLmluc2VydEJlZm9yZShlbGVtZW50LmRvbSwgbWFya2VyLmRvbSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFmdGVyID0gKG1hcmtlciwgZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3Qgc2libGluZyA9IG5leHRTaWJsaW5nKG1hcmtlcik7XG4gICAgICBzaWJsaW5nLmZvbGQoKCkgPT4ge1xuICAgICAgICBjb25zdCBwYXJlbnQkMSA9IHBhcmVudChtYXJrZXIpO1xuICAgICAgICBwYXJlbnQkMS5lYWNoKHYgPT4ge1xuICAgICAgICAgIGFwcGVuZCQxKHYsIGVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHYgPT4ge1xuICAgICAgICBiZWZvcmUkMSh2LCBlbGVtZW50KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYXBwZW5kJDEgPSAocGFyZW50LCBlbGVtZW50KSA9PiB7XG4gICAgICBwYXJlbnQuZG9tLmFwcGVuZENoaWxkKGVsZW1lbnQuZG9tKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYmVmb3JlID0gKG1hcmtlciwgZWxlbWVudHMpID0+IHtcbiAgICAgIGVhY2gkMShlbGVtZW50cywgeCA9PiB7XG4gICAgICAgIGJlZm9yZSQxKG1hcmtlciwgeCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGVuZCA9IChwYXJlbnQsIGVsZW1lbnRzKSA9PiB7XG4gICAgICBlYWNoJDEoZWxlbWVudHMsIHggPT4ge1xuICAgICAgICBhcHBlbmQkMShwYXJlbnQsIHgpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGVtcHR5ID0gZWxlbWVudCA9PiB7XG4gICAgICBlbGVtZW50LmRvbS50ZXh0Q29udGVudCA9ICcnO1xuICAgICAgZWFjaCQxKGNoaWxkcmVuKGVsZW1lbnQpLCByb2d1ZSA9PiB7XG4gICAgICAgIHJlbW92ZShyb2d1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBpZiAoZG9tLnBhcmVudE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgZG9tLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG9tKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGdsb2JhbCQ2ID0gdGlueW1jZS51dGlsLlRvb2xzLnJlc29sdmUoJ3RpbnltY2UuZG9tLlJhbmdlVXRpbHMnKTtcblxuICAgIHZhciBnbG9iYWwkNSA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLmRvbS5UcmVlV2Fsa2VyJyk7XG5cbiAgICB2YXIgZ2xvYmFsJDQgPSB0aW55bWNlLnV0aWwuVG9vbHMucmVzb2x2ZSgndGlueW1jZS51dGlsLlZLJyk7XG5cbiAgICBjb25zdCBmcm9tRG9tID0gbm9kZXMgPT4gbWFwKG5vZGVzLCBTdWdhckVsZW1lbnQuZnJvbURvbSk7XG5cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgY29uc3QgZWFjaCA9IChvYmosIGYpID0+IHtcbiAgICAgIGNvbnN0IHByb3BzID0ga2V5cyhvYmopO1xuICAgICAgZm9yIChsZXQgayA9IDAsIGxlbiA9IHByb3BzLmxlbmd0aDsgayA8IGxlbjsgaysrKSB7XG4gICAgICAgIGNvbnN0IGkgPSBwcm9wc1trXTtcbiAgICAgICAgY29uc3QgeCA9IG9ialtpXTtcbiAgICAgICAgZih4LCBpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG9iakFjYyA9IHIgPT4gKHgsIGkpID0+IHtcbiAgICAgIHJbaV0gPSB4O1xuICAgIH07XG4gICAgY29uc3QgaW50ZXJuYWxGaWx0ZXIgPSAob2JqLCBwcmVkLCBvblRydWUsIG9uRmFsc2UpID0+IHtcbiAgICAgIGVhY2gob2JqLCAoeCwgaSkgPT4ge1xuICAgICAgICAocHJlZCh4LCBpKSA/IG9uVHJ1ZSA6IG9uRmFsc2UpKHgsIGkpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXIgPSAob2JqLCBwcmVkKSA9PiB7XG4gICAgICBjb25zdCB0ID0ge307XG4gICAgICBpbnRlcm5hbEZpbHRlcihvYmosIHByZWQsIG9iakFjYyh0KSwgbm9vcCk7XG4gICAgICByZXR1cm4gdDtcbiAgICB9O1xuXG4gICAgY29uc3QgcmF3U2V0ID0gKGRvbSwga2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSB8fCBpc0Jvb2xlYW4odmFsdWUpIHx8IGlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICBkb20uc2V0QXR0cmlidXRlKGtleSwgdmFsdWUgKyAnJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIGNhbGwgdG8gQXR0cmlidXRlLnNldC4gS2V5ICcsIGtleSwgJzo6IFZhbHVlICcsIHZhbHVlLCAnOjogRWxlbWVudCAnLCBkb20pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dHJpYnV0ZSB2YWx1ZSB3YXMgbm90IHNpbXBsZScpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2V0QWxsID0gKGVsZW1lbnQsIGF0dHJzKSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGVhY2goYXR0cnMsICh2LCBrKSA9PiB7XG4gICAgICAgIHJhd1NldChkb20sIGssIHYpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBjbG9uZSQxID0gZWxlbWVudCA9PiBmb2xkbChlbGVtZW50LmRvbS5hdHRyaWJ1dGVzLCAoYWNjLCBhdHRyKSA9PiB7XG4gICAgICBhY2NbYXR0ci5uYW1lXSA9IGF0dHIudmFsdWU7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICAgIGNvbnN0IGNsb25lID0gKG9yaWdpbmFsLCBpc0RlZXApID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKG9yaWdpbmFsLmRvbS5jbG9uZU5vZGUoaXNEZWVwKSk7XG4gICAgY29uc3QgZGVlcCA9IG9yaWdpbmFsID0+IGNsb25lKG9yaWdpbmFsLCB0cnVlKTtcbiAgICBjb25zdCBzaGFsbG93QXMgPSAob3JpZ2luYWwsIHRhZykgPT4ge1xuICAgICAgY29uc3QgbnUgPSBTdWdhckVsZW1lbnQuZnJvbVRhZyh0YWcpO1xuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGNsb25lJDEob3JpZ2luYWwpO1xuICAgICAgc2V0QWxsKG51LCBhdHRyaWJ1dGVzKTtcbiAgICAgIHJldHVybiBudTtcbiAgICB9O1xuICAgIGNvbnN0IG11dGF0ZSA9IChvcmlnaW5hbCwgdGFnKSA9PiB7XG4gICAgICBjb25zdCBudSA9IHNoYWxsb3dBcyhvcmlnaW5hbCwgdGFnKTtcbiAgICAgIGFmdGVyKG9yaWdpbmFsLCBudSk7XG4gICAgICBjb25zdCBjaGlsZHJlbiQxID0gY2hpbGRyZW4ob3JpZ2luYWwpO1xuICAgICAgYXBwZW5kKG51LCBjaGlsZHJlbiQxKTtcbiAgICAgIHJlbW92ZShvcmlnaW5hbCk7XG4gICAgICByZXR1cm4gbnU7XG4gICAgfTtcblxuICAgIHZhciBnbG9iYWwkMyA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLmRvbS5ET01VdGlscycpO1xuXG4gICAgdmFyIGdsb2JhbCQyID0gdGlueW1jZS51dGlsLlRvb2xzLnJlc29sdmUoJ3RpbnltY2UudXRpbC5Ub29scycpO1xuXG4gICAgY29uc3QgbWF0Y2hOb2RlTmFtZSA9IG5hbWUgPT4gbm9kZSA9PiBpc05vbk51bGxhYmxlKG5vZGUpICYmIG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZTtcbiAgICBjb25zdCBtYXRjaE5vZGVOYW1lcyA9IHJlZ2V4ID0+IG5vZGUgPT4gaXNOb25OdWxsYWJsZShub2RlKSAmJiByZWdleC50ZXN0KG5vZGUubm9kZU5hbWUpO1xuICAgIGNvbnN0IGlzVGV4dE5vZGUkMSA9IG5vZGUgPT4gaXNOb25OdWxsYWJsZShub2RlKSAmJiBub2RlLm5vZGVUeXBlID09PSAzO1xuICAgIGNvbnN0IGlzRWxlbWVudCA9IG5vZGUgPT4gaXNOb25OdWxsYWJsZShub2RlKSAmJiBub2RlLm5vZGVUeXBlID09PSAxO1xuICAgIGNvbnN0IGlzTGlzdE5vZGUgPSBtYXRjaE5vZGVOYW1lcygvXihPTHxVTHxETCkkLyk7XG4gICAgY29uc3QgaXNPbFVsTm9kZSA9IG1hdGNoTm9kZU5hbWVzKC9eKE9MfFVMKSQvKTtcbiAgICBjb25zdCBpc09sTm9kZSA9IG1hdGNoTm9kZU5hbWUoJ29sJyk7XG4gICAgY29uc3QgaXNMaXN0SXRlbU5vZGUgPSBtYXRjaE5vZGVOYW1lcygvXihMSXxEVHxERCkkLyk7XG4gICAgY29uc3QgaXNEbEl0ZW1Ob2RlID0gbWF0Y2hOb2RlTmFtZXMoL14oRFR8REQpJC8pO1xuICAgIGNvbnN0IGlzVGFibGVDZWxsTm9kZSA9IG1hdGNoTm9kZU5hbWVzKC9eKFRIfFREKSQvKTtcbiAgICBjb25zdCBpc0JyID0gbWF0Y2hOb2RlTmFtZSgnYnInKTtcbiAgICBjb25zdCBpc0ZpcnN0Q2hpbGQgPSBub2RlID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIHJldHVybiAoKF9hID0gbm9kZS5wYXJlbnROb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZmlyc3RDaGlsZCkgPT09IG5vZGU7XG4gICAgfTtcbiAgICBjb25zdCBpc1RleHRCbG9jayA9IChlZGl0b3IsIG5vZGUpID0+IGlzTm9uTnVsbGFibGUobm9kZSkgJiYgbm9kZS5ub2RlTmFtZSBpbiBlZGl0b3Iuc2NoZW1hLmdldFRleHRCbG9ja0VsZW1lbnRzKCk7XG4gICAgY29uc3QgaXNCbG9jayA9IChub2RlLCBibG9ja0VsZW1lbnRzKSA9PiBpc05vbk51bGxhYmxlKG5vZGUpICYmIG5vZGUubm9kZU5hbWUgaW4gYmxvY2tFbGVtZW50cztcbiAgICBjb25zdCBpc1ZvaWQgPSAoZWRpdG9yLCBub2RlKSA9PiBpc05vbk51bGxhYmxlKG5vZGUpICYmIG5vZGUubm9kZU5hbWUgaW4gZWRpdG9yLnNjaGVtYS5nZXRWb2lkRWxlbWVudHMoKTtcbiAgICBjb25zdCBpc0JvZ3VzQnIgPSAoZG9tLCBub2RlKSA9PiB7XG4gICAgICBpZiAoIWlzQnIobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRvbS5pc0Jsb2NrKG5vZGUubmV4dFNpYmxpbmcpICYmICFpc0JyKG5vZGUucHJldmlvdXNTaWJsaW5nKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzRW1wdHkkMiA9IChkb20sIGVsbSwga2VlcEJvb2ttYXJrcykgPT4ge1xuICAgICAgY29uc3QgZW1wdHkgPSBkb20uaXNFbXB0eShlbG0pO1xuICAgICAgaWYgKGtlZXBCb29rbWFya3MgJiYgZG9tLnNlbGVjdCgnc3BhbltkYXRhLW1jZS10eXBlPWJvb2ttYXJrXScsIGVsbSkubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gZW1wdHk7XG4gICAgfTtcbiAgICBjb25zdCBpc0NoaWxkT2ZCb2R5ID0gKGRvbSwgZWxtKSA9PiBkb20uaXNDaGlsZE9mKGVsbSwgZG9tLmdldFJvb3QoKSk7XG5cbiAgICBjb25zdCBvcHRpb24gPSBuYW1lID0+IGVkaXRvciA9PiBlZGl0b3Iub3B0aW9ucy5nZXQobmFtZSk7XG4gICAgY29uc3QgcmVnaXN0ZXIkMyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCByZWdpc3Rlck9wdGlvbiA9IGVkaXRvci5vcHRpb25zLnJlZ2lzdGVyO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2xpc3RzX2luZGVudF9vbl90YWInLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHNob3VsZEluZGVudE9uVGFiID0gb3B0aW9uKCdsaXN0c19pbmRlbnRfb25fdGFiJyk7XG4gICAgY29uc3QgZ2V0Rm9yY2VkUm9vdEJsb2NrID0gb3B0aW9uKCdmb3JjZWRfcm9vdF9ibG9jaycpO1xuICAgIGNvbnN0IGdldEZvcmNlZFJvb3RCbG9ja0F0dHJzID0gb3B0aW9uKCdmb3JjZWRfcm9vdF9ibG9ja19hdHRycycpO1xuXG4gICAgY29uc3QgY3JlYXRlVGV4dEJsb2NrID0gKGVkaXRvciwgY29udGVudE5vZGUpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBibG9ja0VsZW1lbnRzID0gZWRpdG9yLnNjaGVtYS5nZXRCbG9ja0VsZW1lbnRzKCk7XG4gICAgICBjb25zdCBmcmFnbWVudCA9IGRvbS5jcmVhdGVGcmFnbWVudCgpO1xuICAgICAgY29uc3QgYmxvY2tOYW1lID0gZ2V0Rm9yY2VkUm9vdEJsb2NrKGVkaXRvcik7XG4gICAgICBjb25zdCBibG9ja0F0dHJzID0gZ2V0Rm9yY2VkUm9vdEJsb2NrQXR0cnMoZWRpdG9yKTtcbiAgICAgIGxldCBub2RlO1xuICAgICAgbGV0IHRleHRCbG9jaztcbiAgICAgIGxldCBoYXNDb250ZW50Tm9kZSA9IGZhbHNlO1xuICAgICAgdGV4dEJsb2NrID0gZG9tLmNyZWF0ZShibG9ja05hbWUsIGJsb2NrQXR0cnMpO1xuICAgICAgaWYgKCFpc0Jsb2NrKGNvbnRlbnROb2RlLmZpcnN0Q2hpbGQsIGJsb2NrRWxlbWVudHMpKSB7XG4gICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHRleHRCbG9jayk7XG4gICAgICB9XG4gICAgICB3aGlsZSAobm9kZSA9IGNvbnRlbnROb2RlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgY29uc3Qgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xuICAgICAgICBpZiAoIWhhc0NvbnRlbnROb2RlICYmIChub2RlTmFtZSAhPT0gJ1NQQU4nIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLW1jZS10eXBlJykgIT09ICdib29rbWFyaycpKSB7XG4gICAgICAgICAgaGFzQ29udGVudE5vZGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0Jsb2NrKG5vZGUsIGJsb2NrRWxlbWVudHMpKSB7XG4gICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICAgICAgdGV4dEJsb2NrID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIXRleHRCbG9jaykge1xuICAgICAgICAgICAgdGV4dEJsb2NrID0gZG9tLmNyZWF0ZShibG9ja05hbWUsIGJsb2NrQXR0cnMpO1xuICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQodGV4dEJsb2NrKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGV4dEJsb2NrLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWhhc0NvbnRlbnROb2RlICYmIHRleHRCbG9jaykge1xuICAgICAgICB0ZXh0QmxvY2suYXBwZW5kQ2hpbGQoZG9tLmNyZWF0ZSgnYnInLCB7ICdkYXRhLW1jZS1ib2d1cyc6ICcxJyB9KSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnJhZ21lbnQ7XG4gICAgfTtcblxuICAgIGNvbnN0IERPTSQyID0gZ2xvYmFsJDMuRE9NO1xuICAgIGNvbnN0IHNwbGl0TGlzdCA9IChlZGl0b3IsIGxpc3QsIGxpKSA9PiB7XG4gICAgICBjb25zdCByZW1vdmVBbmRLZWVwQm9va21hcmtzID0gdGFyZ2V0Tm9kZSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHRhcmdldE5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgIGdsb2JhbCQyLmVhY2goYm9va21hcmtzLCBub2RlID0+IHtcbiAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUobm9kZSwgbGkucGFyZW50Tm9kZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgRE9NJDIucmVtb3ZlKHRhcmdldE5vZGUpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGJvb2ttYXJrcyA9IERPTSQyLnNlbGVjdCgnc3BhbltkYXRhLW1jZS10eXBlPVwiYm9va21hcmtcIl0nLCBsaXN0KTtcbiAgICAgIGNvbnN0IG5ld0Jsb2NrID0gY3JlYXRlVGV4dEJsb2NrKGVkaXRvciwgbGkpO1xuICAgICAgY29uc3QgdG1wUm5nID0gRE9NJDIuY3JlYXRlUm5nKCk7XG4gICAgICB0bXBSbmcuc2V0U3RhcnRBZnRlcihsaSk7XG4gICAgICB0bXBSbmcuc2V0RW5kQWZ0ZXIobGlzdCk7XG4gICAgICBjb25zdCBmcmFnbWVudCA9IHRtcFJuZy5leHRyYWN0Q29udGVudHMoKTtcbiAgICAgIGZvciAobGV0IG5vZGUgPSBmcmFnbWVudC5maXJzdENoaWxkOyBub2RlOyBub2RlID0gbm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgIGlmIChub2RlLm5vZGVOYW1lID09PSAnTEknICYmIGVkaXRvci5kb20uaXNFbXB0eShub2RlKSkge1xuICAgICAgICAgIERPTSQyLnJlbW92ZShub2RlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFlZGl0b3IuZG9tLmlzRW1wdHkoZnJhZ21lbnQpKSB7XG4gICAgICAgIERPTSQyLmluc2VydEFmdGVyKGZyYWdtZW50LCBsaXN0KTtcbiAgICAgIH1cbiAgICAgIERPTSQyLmluc2VydEFmdGVyKG5ld0Jsb2NrLCBsaXN0KTtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGxpLnBhcmVudEVsZW1lbnQ7XG4gICAgICBpZiAocGFyZW50ICYmIGlzRW1wdHkkMihlZGl0b3IuZG9tLCBwYXJlbnQpKSB7XG4gICAgICAgIHJlbW92ZUFuZEtlZXBCb29rbWFya3MocGFyZW50KTtcbiAgICAgIH1cbiAgICAgIERPTSQyLnJlbW92ZShsaSk7XG4gICAgICBpZiAoaXNFbXB0eSQyKGVkaXRvci5kb20sIGxpc3QpKSB7XG4gICAgICAgIERPTSQyLnJlbW92ZShsaXN0KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaXNEZXNjcmlwdGlvbkRldGFpbCA9IGlzVGFnKCdkZCcpO1xuICAgIGNvbnN0IGlzRGVzY3JpcHRpb25UZXJtID0gaXNUYWcoJ2R0Jyk7XG4gICAgY29uc3Qgb3V0ZGVudERsSXRlbSA9IChlZGl0b3IsIGl0ZW0pID0+IHtcbiAgICAgIGlmIChpc0Rlc2NyaXB0aW9uRGV0YWlsKGl0ZW0pKSB7XG4gICAgICAgIG11dGF0ZShpdGVtLCAnZHQnKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNEZXNjcmlwdGlvblRlcm0oaXRlbSkpIHtcbiAgICAgICAgcGFyZW50RWxlbWVudChpdGVtKS5lYWNoKGRsID0+IHNwbGl0TGlzdChlZGl0b3IsIGRsLmRvbSwgaXRlbS5kb20pKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGluZGVudERsSXRlbSA9IGl0ZW0gPT4ge1xuICAgICAgaWYgKGlzRGVzY3JpcHRpb25UZXJtKGl0ZW0pKSB7XG4gICAgICAgIG11dGF0ZShpdGVtLCAnZGQnKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGRsSW5kZW50YXRpb24gPSAoZWRpdG9yLCBpbmRlbnRhdGlvbiwgZGxJdGVtcykgPT4ge1xuICAgICAgaWYgKGluZGVudGF0aW9uID09PSAnSW5kZW50Jykge1xuICAgICAgICBlYWNoJDEoZGxJdGVtcywgaW5kZW50RGxJdGVtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVhY2gkMShkbEl0ZW1zLCBpdGVtID0+IG91dGRlbnREbEl0ZW0oZWRpdG9yLCBpdGVtKSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGdldE5vcm1hbGl6ZWRQb2ludCA9IChjb250YWluZXIsIG9mZnNldCkgPT4ge1xuICAgICAgaWYgKGlzVGV4dE5vZGUkMShjb250YWluZXIpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgIG9mZnNldFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3Qgbm9kZSA9IGdsb2JhbCQ2LmdldE5vZGUoY29udGFpbmVyLCBvZmZzZXQpO1xuICAgICAgaWYgKGlzVGV4dE5vZGUkMShub2RlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRhaW5lcjogbm9kZSxcbiAgICAgICAgICBvZmZzZXQ6IG9mZnNldCA+PSBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGggPyBub2RlLmRhdGEubGVuZ3RoIDogMFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChub2RlLnByZXZpb3VzU2libGluZyAmJiBpc1RleHROb2RlJDEobm9kZS5wcmV2aW91c1NpYmxpbmcpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGFpbmVyOiBub2RlLnByZXZpb3VzU2libGluZyxcbiAgICAgICAgICBvZmZzZXQ6IG5vZGUucHJldmlvdXNTaWJsaW5nLmRhdGEubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKG5vZGUubmV4dFNpYmxpbmcgJiYgaXNUZXh0Tm9kZSQxKG5vZGUubmV4dFNpYmxpbmcpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGFpbmVyOiBub2RlLm5leHRTaWJsaW5nLFxuICAgICAgICAgIG9mZnNldDogMFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGFpbmVyLFxuICAgICAgICBvZmZzZXRcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBub3JtYWxpemVSYW5nZSA9IHJuZyA9PiB7XG4gICAgICBjb25zdCBvdXRSbmcgPSBybmcuY2xvbmVSYW5nZSgpO1xuICAgICAgY29uc3QgcmFuZ2VTdGFydCA9IGdldE5vcm1hbGl6ZWRQb2ludChybmcuc3RhcnRDb250YWluZXIsIHJuZy5zdGFydE9mZnNldCk7XG4gICAgICBvdXRSbmcuc2V0U3RhcnQocmFuZ2VTdGFydC5jb250YWluZXIsIHJhbmdlU3RhcnQub2Zmc2V0KTtcbiAgICAgIGNvbnN0IHJhbmdlRW5kID0gZ2V0Tm9ybWFsaXplZFBvaW50KHJuZy5lbmRDb250YWluZXIsIHJuZy5lbmRPZmZzZXQpO1xuICAgICAgb3V0Um5nLnNldEVuZChyYW5nZUVuZC5jb250YWluZXIsIHJhbmdlRW5kLm9mZnNldCk7XG4gICAgICByZXR1cm4gb3V0Um5nO1xuICAgIH07XG5cbiAgICBjb25zdCBsaXN0TmFtZXMgPSBbXG4gICAgICAnT0wnLFxuICAgICAgJ1VMJyxcbiAgICAgICdETCdcbiAgICBdO1xuICAgIGNvbnN0IGxpc3RTZWxlY3RvciA9IGxpc3ROYW1lcy5qb2luKCcsJyk7XG4gICAgY29uc3QgZ2V0UGFyZW50TGlzdCA9IChlZGl0b3IsIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gbm9kZSB8fCBlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KHRydWUpO1xuICAgICAgcmV0dXJuIGVkaXRvci5kb20uZ2V0UGFyZW50KHNlbGVjdGlvblN0YXJ0LCBsaXN0U2VsZWN0b3IsIGdldENsb3Nlc3RMaXN0SG9zdChlZGl0b3IsIHNlbGVjdGlvblN0YXJ0KSk7XG4gICAgfTtcbiAgICBjb25zdCBpc1BhcmVudExpc3RTZWxlY3RlZCA9IChwYXJlbnRMaXN0LCBzZWxlY3RlZEJsb2NrcykgPT4gaXNOb25OdWxsYWJsZShwYXJlbnRMaXN0KSAmJiBzZWxlY3RlZEJsb2Nrcy5sZW5ndGggPT09IDEgJiYgc2VsZWN0ZWRCbG9ja3NbMF0gPT09IHBhcmVudExpc3Q7XG4gICAgY29uc3QgZmluZFN1Ykxpc3RzID0gcGFyZW50TGlzdCA9PiBmaWx0ZXIkMShwYXJlbnRMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwobGlzdFNlbGVjdG9yKSwgaXNMaXN0Tm9kZSk7XG4gICAgY29uc3QgZ2V0U2VsZWN0ZWRTdWJMaXN0cyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBwYXJlbnRMaXN0ID0gZ2V0UGFyZW50TGlzdChlZGl0b3IpO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRCbG9ja3MgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFNlbGVjdGVkQmxvY2tzKCk7XG4gICAgICBpZiAoaXNQYXJlbnRMaXN0U2VsZWN0ZWQocGFyZW50TGlzdCwgc2VsZWN0ZWRCbG9ja3MpKSB7XG4gICAgICAgIHJldHVybiBmaW5kU3ViTGlzdHMocGFyZW50TGlzdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmlsdGVyJDEoc2VsZWN0ZWRCbG9ja3MsIGVsbSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGlzTGlzdE5vZGUoZWxtKSAmJiBwYXJlbnRMaXN0ICE9PSBlbG07XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZmluZFBhcmVudExpc3RJdGVtc05vZGVzID0gKGVkaXRvciwgZWxtcykgPT4ge1xuICAgICAgY29uc3QgbGlzdEl0ZW1zRWxtcyA9IGdsb2JhbCQyLm1hcChlbG1zLCBlbG0gPT4ge1xuICAgICAgICBjb25zdCBwYXJlbnRMaSA9IGVkaXRvci5kb20uZ2V0UGFyZW50KGVsbSwgJ2xpLGRkLGR0JywgZ2V0Q2xvc2VzdExpc3RIb3N0KGVkaXRvciwgZWxtKSk7XG4gICAgICAgIHJldHVybiBwYXJlbnRMaSA/IHBhcmVudExpIDogZWxtO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdW5pcXVlKGxpc3RJdGVtc0VsbXMpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0U2VsZWN0ZWRMaXN0SXRlbXMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRCbG9ja3MgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFNlbGVjdGVkQmxvY2tzKCk7XG4gICAgICByZXR1cm4gZmlsdGVyJDEoZmluZFBhcmVudExpc3RJdGVtc05vZGVzKGVkaXRvciwgc2VsZWN0ZWRCbG9ja3MpLCBpc0xpc3RJdGVtTm9kZSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRTZWxlY3RlZERsSXRlbXMgPSBlZGl0b3IgPT4gZmlsdGVyJDEoZ2V0U2VsZWN0ZWRMaXN0SXRlbXMoZWRpdG9yKSwgaXNEbEl0ZW1Ob2RlKTtcbiAgICBjb25zdCBnZXRDbG9zZXN0RWRpdGluZ0hvc3QgPSAoZWRpdG9yLCBlbG0pID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudFRhYmxlQ2VsbCA9IGVkaXRvci5kb20uZ2V0UGFyZW50cyhlbG0sICdURCxUSCcpO1xuICAgICAgcmV0dXJuIHBhcmVudFRhYmxlQ2VsbC5sZW5ndGggPiAwID8gcGFyZW50VGFibGVDZWxsWzBdIDogZWRpdG9yLmdldEJvZHkoKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzTGlzdEhvc3QgPSAoc2NoZW1hLCBub2RlKSA9PiAhaXNMaXN0Tm9kZShub2RlKSAmJiAhaXNMaXN0SXRlbU5vZGUobm9kZSkgJiYgZXhpc3RzKGxpc3ROYW1lcywgbGlzdE5hbWUgPT4gc2NoZW1hLmlzVmFsaWRDaGlsZChub2RlLm5vZGVOYW1lLCBsaXN0TmFtZSkpO1xuICAgIGNvbnN0IGdldENsb3Nlc3RMaXN0SG9zdCA9IChlZGl0b3IsIGVsbSkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50QmxvY2tzID0gZWRpdG9yLmRvbS5nZXRQYXJlbnRzKGVsbSwgZWRpdG9yLmRvbS5pc0Jsb2NrKTtcbiAgICAgIGNvbnN0IHBhcmVudEJsb2NrID0gZmluZChwYXJlbnRCbG9ja3MsIGVsbSA9PiBpc0xpc3RIb3N0KGVkaXRvci5zY2hlbWEsIGVsbSkpO1xuICAgICAgcmV0dXJuIHBhcmVudEJsb2NrLmdldE9yKGVkaXRvci5nZXRCb2R5KCkpO1xuICAgIH07XG4gICAgY29uc3QgZmluZExhc3RQYXJlbnRMaXN0Tm9kZSA9IChlZGl0b3IsIGVsbSkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50TGlzdHMgPSBlZGl0b3IuZG9tLmdldFBhcmVudHMoZWxtLCAnb2wsdWwnLCBnZXRDbG9zZXN0TGlzdEhvc3QoZWRpdG9yLCBlbG0pKTtcbiAgICAgIHJldHVybiBsYXN0KHBhcmVudExpc3RzKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNlbGVjdGVkTGlzdHMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZmlyc3RMaXN0ID0gZmluZExhc3RQYXJlbnRMaXN0Tm9kZShlZGl0b3IsIGVkaXRvci5zZWxlY3Rpb24uZ2V0U3RhcnQoKSk7XG4gICAgICBjb25zdCBzdWJzZXF1ZW50TGlzdHMgPSBmaWx0ZXIkMShlZGl0b3Iuc2VsZWN0aW9uLmdldFNlbGVjdGVkQmxvY2tzKCksIGlzT2xVbE5vZGUpO1xuICAgICAgcmV0dXJuIGZpcnN0TGlzdC50b0FycmF5KCkuY29uY2F0KHN1YnNlcXVlbnRMaXN0cyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRTZWxlY3RlZExpc3RSb290cyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZExpc3RzID0gZ2V0U2VsZWN0ZWRMaXN0cyhlZGl0b3IpO1xuICAgICAgcmV0dXJuIGdldFVuaXF1ZUxpc3RSb290cyhlZGl0b3IsIHNlbGVjdGVkTGlzdHMpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0VW5pcXVlTGlzdFJvb3RzID0gKGVkaXRvciwgbGlzdHMpID0+IHtcbiAgICAgIGNvbnN0IGxpc3RSb290cyA9IG1hcChsaXN0cywgbGlzdCA9PiBmaW5kTGFzdFBhcmVudExpc3ROb2RlKGVkaXRvciwgbGlzdCkuZ2V0T3IobGlzdCkpO1xuICAgICAgcmV0dXJuIHVuaXF1ZShsaXN0Um9vdHMpO1xuICAgIH07XG5cbiAgICBjb25zdCBpc0N1c3RvbUxpc3QgPSBsaXN0ID0+IC9cXGJ0b3hcXC0vLnRlc3QobGlzdC5jbGFzc05hbWUpO1xuICAgIGNvbnN0IGluTGlzdCA9IChwYXJlbnRzLCBsaXN0TmFtZSkgPT4gZmluZFVudGlsKHBhcmVudHMsIGlzTGlzdE5vZGUsIGlzVGFibGVDZWxsTm9kZSkuZXhpc3RzKGxpc3QgPT4gbGlzdC5ub2RlTmFtZSA9PT0gbGlzdE5hbWUgJiYgIWlzQ3VzdG9tTGlzdChsaXN0KSk7XG4gICAgY29uc3QgaXNXaXRoaW5Ob25FZGl0YWJsZSA9IChlZGl0b3IsIGVsZW1lbnQpID0+IGVsZW1lbnQgIT09IG51bGwgJiYgIWVkaXRvci5kb20uaXNFZGl0YWJsZShlbGVtZW50KTtcbiAgICBjb25zdCBzZWxlY3Rpb25Jc1dpdGhpbk5vbkVkaXRhYmxlTGlzdCA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBwYXJlbnRMaXN0ID0gZ2V0UGFyZW50TGlzdChlZGl0b3IpO1xuICAgICAgcmV0dXJuIGlzV2l0aGluTm9uRWRpdGFibGUoZWRpdG9yLCBwYXJlbnRMaXN0KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzV2l0aGluTm9uRWRpdGFibGVMaXN0ID0gKGVkaXRvciwgZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50TGlzdCA9IGVkaXRvci5kb20uZ2V0UGFyZW50KGVsZW1lbnQsICdvbCx1bCxkbCcpO1xuICAgICAgcmV0dXJuIGlzV2l0aGluTm9uRWRpdGFibGUoZWRpdG9yLCBwYXJlbnRMaXN0KTtcbiAgICB9O1xuICAgIGNvbnN0IHNldE5vZGVDaGFuZ2VIYW5kbGVyID0gKGVkaXRvciwgbm9kZUNoYW5nZUhhbmRsZXIpID0+IHtcbiAgICAgIGNvbnN0IGluaXRpYWxOb2RlID0gZWRpdG9yLnNlbGVjdGlvbi5nZXROb2RlKCk7XG4gICAgICBub2RlQ2hhbmdlSGFuZGxlcih7XG4gICAgICAgIHBhcmVudHM6IGVkaXRvci5kb20uZ2V0UGFyZW50cyhpbml0aWFsTm9kZSksXG4gICAgICAgIGVsZW1lbnQ6IGluaXRpYWxOb2RlXG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignTm9kZUNoYW5nZScsIG5vZGVDaGFuZ2VIYW5kbGVyKTtcbiAgICAgIHJldHVybiAoKSA9PiBlZGl0b3Iub2ZmKCdOb2RlQ2hhbmdlJywgbm9kZUNoYW5nZUhhbmRsZXIpO1xuICAgIH07XG5cbiAgICBjb25zdCBmcm9tRWxlbWVudHMgPSAoZWxlbWVudHMsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBzY29wZSB8fCBkb2N1bWVudDtcbiAgICAgIGNvbnN0IGZyYWdtZW50ID0gZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgIGVhY2gkMShlbGVtZW50cywgZWxlbWVudCA9PiB7XG4gICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQuZG9tKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFN1Z2FyRWxlbWVudC5mcm9tRG9tKGZyYWdtZW50KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmlyZUxpc3RFdmVudCA9IChlZGl0b3IsIGFjdGlvbiwgZWxlbWVudCkgPT4gZWRpdG9yLmRpc3BhdGNoKCdMaXN0TXV0YXRpb24nLCB7XG4gICAgICBhY3Rpb24sXG4gICAgICBlbGVtZW50XG4gICAgfSk7XG5cbiAgICBjb25zdCBibGFuayA9IHIgPT4gcyA9PiBzLnJlcGxhY2UociwgJycpO1xuICAgIGNvbnN0IHRyaW0gPSBibGFuaygvXlxccyt8XFxzKyQvZyk7XG4gICAgY29uc3QgaXNOb3RFbXB0eSA9IHMgPT4gcy5sZW5ndGggPiAwO1xuICAgIGNvbnN0IGlzRW1wdHkkMSA9IHMgPT4gIWlzTm90RW1wdHkocyk7XG5cbiAgICBjb25zdCBpc1N1cHBvcnRlZCA9IGRvbSA9PiBkb20uc3R5bGUgIT09IHVuZGVmaW5lZCAmJiBpc0Z1bmN0aW9uKGRvbS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKTtcblxuICAgIGNvbnN0IGludGVybmFsU2V0ID0gKGRvbSwgcHJvcGVydHksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIGNhbGwgdG8gQ1NTLnNldC4gUHJvcGVydHkgJywgcHJvcGVydHksICc6OiBWYWx1ZSAnLCB2YWx1ZSwgJzo6IEVsZW1lbnQgJywgZG9tKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDU1MgdmFsdWUgbXVzdCBiZSBhIHN0cmluZzogJyArIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1N1cHBvcnRlZChkb20pKSB7XG4gICAgICAgIGRvbS5zdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2V0ID0gKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBpbnRlcm5hbFNldChkb20sIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGpvaW5TZWdtZW50ID0gKHBhcmVudCwgY2hpbGQpID0+IHtcbiAgICAgIGFwcGVuZCQxKHBhcmVudC5pdGVtLCBjaGlsZC5saXN0KTtcbiAgICB9O1xuICAgIGNvbnN0IGpvaW5TZWdtZW50cyA9IHNlZ21lbnRzID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgam9pblNlZ21lbnQoc2VnbWVudHNbaSAtIDFdLCBzZWdtZW50c1tpXSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhcHBlbmRTZWdtZW50cyA9IChoZWFkJDEsIHRhaWwpID0+IHtcbiAgICAgIGxpZnQyKGxhc3QoaGVhZCQxKSwgaGVhZCh0YWlsKSwgam9pblNlZ21lbnQpO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlU2VnbWVudCA9IChzY29wZSwgbGlzdFR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHNlZ21lbnQgPSB7XG4gICAgICAgIGxpc3Q6IFN1Z2FyRWxlbWVudC5mcm9tVGFnKGxpc3RUeXBlLCBzY29wZSksXG4gICAgICAgIGl0ZW06IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdsaScsIHNjb3BlKVxuICAgICAgfTtcbiAgICAgIGFwcGVuZCQxKHNlZ21lbnQubGlzdCwgc2VnbWVudC5pdGVtKTtcbiAgICAgIHJldHVybiBzZWdtZW50O1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlU2VnbWVudHMgPSAoc2NvcGUsIGVudHJ5LCBzaXplKSA9PiB7XG4gICAgICBjb25zdCBzZWdtZW50cyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgc2VnbWVudHMucHVzaChjcmVhdGVTZWdtZW50KHNjb3BlLCBlbnRyeS5saXN0VHlwZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlZ21lbnRzO1xuICAgIH07XG4gICAgY29uc3QgcG9wdWxhdGVTZWdtZW50cyA9IChzZWdtZW50cywgZW50cnkpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIHNldChzZWdtZW50c1tpXS5pdGVtLCAnbGlzdC1zdHlsZS10eXBlJywgJ25vbmUnKTtcbiAgICAgIH1cbiAgICAgIGxhc3Qoc2VnbWVudHMpLmVhY2goc2VnbWVudCA9PiB7XG4gICAgICAgIHNldEFsbChzZWdtZW50Lmxpc3QsIGVudHJ5Lmxpc3RBdHRyaWJ1dGVzKTtcbiAgICAgICAgc2V0QWxsKHNlZ21lbnQuaXRlbSwgZW50cnkuaXRlbUF0dHJpYnV0ZXMpO1xuICAgICAgICBhcHBlbmQoc2VnbWVudC5pdGVtLCBlbnRyeS5jb250ZW50KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplU2VnbWVudCA9IChzZWdtZW50LCBlbnRyeSkgPT4ge1xuICAgICAgaWYgKG5hbWUoc2VnbWVudC5saXN0KSAhPT0gZW50cnkubGlzdFR5cGUpIHtcbiAgICAgICAgc2VnbWVudC5saXN0ID0gbXV0YXRlKHNlZ21lbnQubGlzdCwgZW50cnkubGlzdFR5cGUpO1xuICAgICAgfVxuICAgICAgc2V0QWxsKHNlZ21lbnQubGlzdCwgZW50cnkubGlzdEF0dHJpYnV0ZXMpO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlSXRlbSA9IChzY29wZSwgYXR0ciwgY29udGVudCkgPT4ge1xuICAgICAgY29uc3QgaXRlbSA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdsaScsIHNjb3BlKTtcbiAgICAgIHNldEFsbChpdGVtLCBhdHRyKTtcbiAgICAgIGFwcGVuZChpdGVtLCBjb250ZW50KTtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH07XG4gICAgY29uc3QgYXBwZW5kSXRlbSA9IChzZWdtZW50LCBpdGVtKSA9PiB7XG4gICAgICBhcHBlbmQkMShzZWdtZW50Lmxpc3QsIGl0ZW0pO1xuICAgICAgc2VnbWVudC5pdGVtID0gaXRlbTtcbiAgICB9O1xuICAgIGNvbnN0IHdyaXRlU2hhbGxvdyA9IChzY29wZSwgY2FzdCwgZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IG5ld0Nhc3QgPSBjYXN0LnNsaWNlKDAsIGVudHJ5LmRlcHRoKTtcbiAgICAgIGxhc3QobmV3Q2FzdCkuZWFjaChzZWdtZW50ID0+IHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGNyZWF0ZUl0ZW0oc2NvcGUsIGVudHJ5Lml0ZW1BdHRyaWJ1dGVzLCBlbnRyeS5jb250ZW50KTtcbiAgICAgICAgYXBwZW5kSXRlbShzZWdtZW50LCBpdGVtKTtcbiAgICAgICAgbm9ybWFsaXplU2VnbWVudChzZWdtZW50LCBlbnRyeSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXdDYXN0O1xuICAgIH07XG4gICAgY29uc3Qgd3JpdGVEZWVwID0gKHNjb3BlLCBjYXN0LCBlbnRyeSkgPT4ge1xuICAgICAgY29uc3Qgc2VnbWVudHMgPSBjcmVhdGVTZWdtZW50cyhzY29wZSwgZW50cnksIGVudHJ5LmRlcHRoIC0gY2FzdC5sZW5ndGgpO1xuICAgICAgam9pblNlZ21lbnRzKHNlZ21lbnRzKTtcbiAgICAgIHBvcHVsYXRlU2VnbWVudHMoc2VnbWVudHMsIGVudHJ5KTtcbiAgICAgIGFwcGVuZFNlZ21lbnRzKGNhc3QsIHNlZ21lbnRzKTtcbiAgICAgIHJldHVybiBjYXN0LmNvbmNhdChzZWdtZW50cyk7XG4gICAgfTtcbiAgICBjb25zdCBjb21wb3NlTGlzdCA9IChzY29wZSwgZW50cmllcykgPT4ge1xuICAgICAgY29uc3QgY2FzdCA9IGZvbGRsKGVudHJpZXMsIChjYXN0LCBlbnRyeSkgPT4ge1xuICAgICAgICByZXR1cm4gZW50cnkuZGVwdGggPiBjYXN0Lmxlbmd0aCA/IHdyaXRlRGVlcChzY29wZSwgY2FzdCwgZW50cnkpIDogd3JpdGVTaGFsbG93KHNjb3BlLCBjYXN0LCBlbnRyeSk7XG4gICAgICB9LCBbXSk7XG4gICAgICByZXR1cm4gaGVhZChjYXN0KS5tYXAoc2VnbWVudCA9PiBzZWdtZW50Lmxpc3QpO1xuICAgIH07XG5cbiAgICBjb25zdCBpc0xpc3QgPSBlbCA9PiBpcyhlbCwgJ09MLFVMJyk7XG4gICAgY29uc3QgaGFzRmlyc3RDaGlsZExpc3QgPSBlbCA9PiBmaXJzdENoaWxkKGVsKS5leGlzdHMoaXNMaXN0KTtcbiAgICBjb25zdCBoYXNMYXN0Q2hpbGRMaXN0ID0gZWwgPT4gbGFzdENoaWxkKGVsKS5leGlzdHMoaXNMaXN0KTtcblxuICAgIGNvbnN0IGlzSW5kZW50ZWQgPSBlbnRyeSA9PiBlbnRyeS5kZXB0aCA+IDA7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IGVudHJ5ID0+IGVudHJ5LmlzU2VsZWN0ZWQ7XG4gICAgY29uc3QgY2xvbmVJdGVtQ29udGVudCA9IGxpID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkcmVuJDEgPSBjaGlsZHJlbihsaSk7XG4gICAgICBjb25zdCBjb250ZW50ID0gaGFzTGFzdENoaWxkTGlzdChsaSkgPyBjaGlsZHJlbiQxLnNsaWNlKDAsIC0xKSA6IGNoaWxkcmVuJDE7XG4gICAgICByZXR1cm4gbWFwKGNvbnRlbnQsIGRlZXApO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlRW50cnkgPSAobGksIGRlcHRoLCBpc1NlbGVjdGVkKSA9PiBwYXJlbnQobGkpLmZpbHRlcihpc0VsZW1lbnQkMSkubWFwKGxpc3QgPT4gKHtcbiAgICAgIGRlcHRoLFxuICAgICAgZGlydHk6IGZhbHNlLFxuICAgICAgaXNTZWxlY3RlZCxcbiAgICAgIGNvbnRlbnQ6IGNsb25lSXRlbUNvbnRlbnQobGkpLFxuICAgICAgaXRlbUF0dHJpYnV0ZXM6IGNsb25lJDEobGkpLFxuICAgICAgbGlzdEF0dHJpYnV0ZXM6IGNsb25lJDEobGlzdCksXG4gICAgICBsaXN0VHlwZTogbmFtZShsaXN0KVxuICAgIH0pKTtcblxuICAgIGNvbnN0IGluZGVudEVudHJ5ID0gKGluZGVudGF0aW9uLCBlbnRyeSkgPT4ge1xuICAgICAgc3dpdGNoIChpbmRlbnRhdGlvbikge1xuICAgICAgY2FzZSAnSW5kZW50JzpcbiAgICAgICAgZW50cnkuZGVwdGgrKztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdPdXRkZW50JzpcbiAgICAgICAgZW50cnkuZGVwdGgtLTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdGbGF0dGVuJzpcbiAgICAgICAgZW50cnkuZGVwdGggPSAwO1xuICAgICAgfVxuICAgICAgZW50cnkuZGlydHkgPSB0cnVlO1xuICAgIH07XG5cbiAgICBjb25zdCBjbG9uZUxpc3RQcm9wZXJ0aWVzID0gKHRhcmdldCwgc291cmNlKSA9PiB7XG4gICAgICB0YXJnZXQubGlzdFR5cGUgPSBzb3VyY2UubGlzdFR5cGU7XG4gICAgICB0YXJnZXQubGlzdEF0dHJpYnV0ZXMgPSB7IC4uLnNvdXJjZS5saXN0QXR0cmlidXRlcyB9O1xuICAgIH07XG4gICAgY29uc3QgY2xlYW5MaXN0UHJvcGVydGllcyA9IGVudHJ5ID0+IHtcbiAgICAgIGVudHJ5Lmxpc3RBdHRyaWJ1dGVzID0gZmlsdGVyKGVudHJ5Lmxpc3RBdHRyaWJ1dGVzLCAoX3ZhbHVlLCBrZXkpID0+IGtleSAhPT0gJ3N0YXJ0Jyk7XG4gICAgfTtcbiAgICBjb25zdCBjbG9zZXN0U2libGluZ0VudHJ5ID0gKGVudHJpZXMsIHN0YXJ0KSA9PiB7XG4gICAgICBjb25zdCBkZXB0aCA9IGVudHJpZXNbc3RhcnRdLmRlcHRoO1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGVudHJ5ID0+IGVudHJ5LmRlcHRoID09PSBkZXB0aCAmJiAhZW50cnkuZGlydHk7XG4gICAgICBjb25zdCB1bnRpbCA9IGVudHJ5ID0+IGVudHJ5LmRlcHRoIDwgZGVwdGg7XG4gICAgICByZXR1cm4gZmluZFVudGlsKHJldmVyc2UoZW50cmllcy5zbGljZSgwLCBzdGFydCkpLCBtYXRjaGVzLCB1bnRpbCkub3JUaHVuaygoKSA9PiBmaW5kVW50aWwoZW50cmllcy5zbGljZShzdGFydCArIDEpLCBtYXRjaGVzLCB1bnRpbCkpO1xuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplRW50cmllcyA9IGVudHJpZXMgPT4ge1xuICAgICAgZWFjaCQxKGVudHJpZXMsIChlbnRyeSwgaSkgPT4ge1xuICAgICAgICBjbG9zZXN0U2libGluZ0VudHJ5KGVudHJpZXMsIGkpLmZvbGQoKCkgPT4ge1xuICAgICAgICAgIGlmIChlbnRyeS5kaXJ0eSkge1xuICAgICAgICAgICAgY2xlYW5MaXN0UHJvcGVydGllcyhlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBtYXRjaGluZ0VudHJ5ID0+IGNsb25lTGlzdFByb3BlcnRpZXMoZW50cnksIG1hdGNoaW5nRW50cnkpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGVudHJpZXM7XG4gICAgfTtcblxuICAgIGNvbnN0IENlbGwgPSBpbml0aWFsID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGluaXRpYWw7XG4gICAgICBjb25zdCBnZXQgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXQgPSB2ID0+IHtcbiAgICAgICAgdmFsdWUgPSB2O1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdldCxcbiAgICAgICAgc2V0XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBwYXJzZUl0ZW0gPSAoZGVwdGgsIGl0ZW1TZWxlY3Rpb24sIHNlbGVjdGlvblN0YXRlLCBpdGVtKSA9PiBmaXJzdENoaWxkKGl0ZW0pLmZpbHRlcihpc0xpc3QpLmZvbGQoKCkgPT4ge1xuICAgICAgaXRlbVNlbGVjdGlvbi5lYWNoKHNlbGVjdGlvbiA9PiB7XG4gICAgICAgIGlmIChlcShzZWxlY3Rpb24uc3RhcnQsIGl0ZW0pKSB7XG4gICAgICAgICAgc2VsZWN0aW9uU3RhdGUuc2V0KHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGN1cnJlbnRJdGVtRW50cnkgPSBjcmVhdGVFbnRyeShpdGVtLCBkZXB0aCwgc2VsZWN0aW9uU3RhdGUuZ2V0KCkpO1xuICAgICAgaXRlbVNlbGVjdGlvbi5lYWNoKHNlbGVjdGlvbiA9PiB7XG4gICAgICAgIGlmIChlcShzZWxlY3Rpb24uZW5kLCBpdGVtKSkge1xuICAgICAgICAgIHNlbGVjdGlvblN0YXRlLnNldChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2hpbGRMaXN0RW50cmllcyA9IGxhc3RDaGlsZChpdGVtKS5maWx0ZXIoaXNMaXN0KS5tYXAobGlzdCA9PiBwYXJzZUxpc3QoZGVwdGgsIGl0ZW1TZWxlY3Rpb24sIHNlbGVjdGlvblN0YXRlLCBsaXN0KSkuZ2V0T3IoW10pO1xuICAgICAgcmV0dXJuIGN1cnJlbnRJdGVtRW50cnkudG9BcnJheSgpLmNvbmNhdChjaGlsZExpc3RFbnRyaWVzKTtcbiAgICB9LCBsaXN0ID0+IHBhcnNlTGlzdChkZXB0aCwgaXRlbVNlbGVjdGlvbiwgc2VsZWN0aW9uU3RhdGUsIGxpc3QpKTtcbiAgICBjb25zdCBwYXJzZUxpc3QgPSAoZGVwdGgsIGl0ZW1TZWxlY3Rpb24sIHNlbGVjdGlvblN0YXRlLCBsaXN0KSA9PiBiaW5kKGNoaWxkcmVuKGxpc3QpLCBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IHBhcnNlciA9IGlzTGlzdChlbGVtZW50KSA/IHBhcnNlTGlzdCA6IHBhcnNlSXRlbTtcbiAgICAgIGNvbnN0IG5ld0RlcHRoID0gZGVwdGggKyAxO1xuICAgICAgcmV0dXJuIHBhcnNlcihuZXdEZXB0aCwgaXRlbVNlbGVjdGlvbiwgc2VsZWN0aW9uU3RhdGUsIGVsZW1lbnQpO1xuICAgIH0pO1xuICAgIGNvbnN0IHBhcnNlTGlzdHMgPSAobGlzdHMsIGl0ZW1TZWxlY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvblN0YXRlID0gQ2VsbChmYWxzZSk7XG4gICAgICBjb25zdCBpbml0aWFsRGVwdGggPSAwO1xuICAgICAgcmV0dXJuIG1hcChsaXN0cywgbGlzdCA9PiAoe1xuICAgICAgICBzb3VyY2VMaXN0OiBsaXN0LFxuICAgICAgICBlbnRyaWVzOiBwYXJzZUxpc3QoaW5pdGlhbERlcHRoLCBpdGVtU2VsZWN0aW9uLCBzZWxlY3Rpb25TdGF0ZSwgbGlzdClcbiAgICAgIH0pKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb3V0ZGVudGVkQ29tcG9zZXIgPSAoZWRpdG9yLCBlbnRyaWVzKSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkRW50cmllcyA9IG5vcm1hbGl6ZUVudHJpZXMoZW50cmllcyk7XG4gICAgICByZXR1cm4gbWFwKG5vcm1hbGl6ZWRFbnRyaWVzLCBlbnRyeSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcm9tRWxlbWVudHMoZW50cnkuY29udGVudCk7XG4gICAgICAgIHJldHVybiBTdWdhckVsZW1lbnQuZnJvbURvbShjcmVhdGVUZXh0QmxvY2soZWRpdG9yLCBjb250ZW50LmRvbSkpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBpbmRlbnRlZENvbXBvc2VyID0gKGVkaXRvciwgZW50cmllcykgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEVudHJpZXMgPSBub3JtYWxpemVFbnRyaWVzKGVudHJpZXMpO1xuICAgICAgcmV0dXJuIGNvbXBvc2VMaXN0KGVkaXRvci5jb250ZW50RG9jdW1lbnQsIG5vcm1hbGl6ZWRFbnRyaWVzKS50b0FycmF5KCk7XG4gICAgfTtcbiAgICBjb25zdCBjb21wb3NlRW50cmllcyA9IChlZGl0b3IsIGVudHJpZXMpID0+IGJpbmQoZ3JvdXBCeShlbnRyaWVzLCBpc0luZGVudGVkKSwgZW50cmllcyA9PiB7XG4gICAgICBjb25zdCBncm91cElzSW5kZW50ZWQgPSBoZWFkKGVudHJpZXMpLmV4aXN0cyhpc0luZGVudGVkKTtcbiAgICAgIHJldHVybiBncm91cElzSW5kZW50ZWQgPyBpbmRlbnRlZENvbXBvc2VyKGVkaXRvciwgZW50cmllcykgOiBvdXRkZW50ZWRDb21wb3NlcihlZGl0b3IsIGVudHJpZXMpO1xuICAgIH0pO1xuICAgIGNvbnN0IGluZGVudFNlbGVjdGVkRW50cmllcyA9IChlbnRyaWVzLCBpbmRlbnRhdGlvbikgPT4ge1xuICAgICAgZWFjaCQxKGZpbHRlciQxKGVudHJpZXMsIGlzU2VsZWN0ZWQpLCBlbnRyeSA9PiBpbmRlbnRFbnRyeShpbmRlbnRhdGlvbiwgZW50cnkpKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEl0ZW1TZWxlY3Rpb24gPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRMaXN0SXRlbXMgPSBtYXAoZ2V0U2VsZWN0ZWRMaXN0SXRlbXMoZWRpdG9yKSwgU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgICAgcmV0dXJuIGxpZnQyKGZpbmQoc2VsZWN0ZWRMaXN0SXRlbXMsIG5vdChoYXNGaXJzdENoaWxkTGlzdCkpLCBmaW5kKHJldmVyc2Uoc2VsZWN0ZWRMaXN0SXRlbXMpLCBub3QoaGFzRmlyc3RDaGlsZExpc3QpKSwgKHN0YXJ0LCBlbmQpID0+ICh7XG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBlbmRcbiAgICAgIH0pKTtcbiAgICB9O1xuICAgIGNvbnN0IGxpc3RJbmRlbnRhdGlvbiA9IChlZGl0b3IsIGxpc3RzLCBpbmRlbnRhdGlvbikgPT4ge1xuICAgICAgY29uc3QgZW50cnlTZXRzID0gcGFyc2VMaXN0cyhsaXN0cywgZ2V0SXRlbVNlbGVjdGlvbihlZGl0b3IpKTtcbiAgICAgIGVhY2gkMShlbnRyeVNldHMsIGVudHJ5U2V0ID0+IHtcbiAgICAgICAgaW5kZW50U2VsZWN0ZWRFbnRyaWVzKGVudHJ5U2V0LmVudHJpZXMsIGluZGVudGF0aW9uKTtcbiAgICAgICAgY29uc3QgY29tcG9zZWRMaXN0cyA9IGNvbXBvc2VFbnRyaWVzKGVkaXRvciwgZW50cnlTZXQuZW50cmllcyk7XG4gICAgICAgIGVhY2gkMShjb21wb3NlZExpc3RzLCBjb21wb3NlZExpc3QgPT4ge1xuICAgICAgICAgIGZpcmVMaXN0RXZlbnQoZWRpdG9yLCBpbmRlbnRhdGlvbiA9PT0gJ0luZGVudCcgPyAnSW5kZW50TGlzdCcgOiAnT3V0ZGVudExpc3QnLCBjb21wb3NlZExpc3QuZG9tKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJlZm9yZShlbnRyeVNldC5zb3VyY2VMaXN0LCBjb21wb3NlZExpc3RzKTtcbiAgICAgICAgcmVtb3ZlKGVudHJ5U2V0LnNvdXJjZUxpc3QpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNlbGVjdGlvbkluZGVudGF0aW9uID0gKGVkaXRvciwgaW5kZW50YXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGxpc3RzID0gZnJvbURvbShnZXRTZWxlY3RlZExpc3RSb290cyhlZGl0b3IpKTtcbiAgICAgIGNvbnN0IGRsSXRlbXMgPSBmcm9tRG9tKGdldFNlbGVjdGVkRGxJdGVtcyhlZGl0b3IpKTtcbiAgICAgIGxldCBpc0hhbmRsZWQgPSBmYWxzZTtcbiAgICAgIGlmIChsaXN0cy5sZW5ndGggfHwgZGxJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYm9va21hcmsgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldEJvb2ttYXJrKCk7XG4gICAgICAgIGxpc3RJbmRlbnRhdGlvbihlZGl0b3IsIGxpc3RzLCBpbmRlbnRhdGlvbik7XG4gICAgICAgIGRsSW5kZW50YXRpb24oZWRpdG9yLCBpbmRlbnRhdGlvbiwgZGxJdGVtcyk7XG4gICAgICAgIGVkaXRvci5zZWxlY3Rpb24ubW92ZVRvQm9va21hcmsoYm9va21hcmspO1xuICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhub3JtYWxpemVSYW5nZShlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKSk7XG4gICAgICAgIGVkaXRvci5ub2RlQ2hhbmdlZCgpO1xuICAgICAgICBpc0hhbmRsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzSGFuZGxlZDtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZUluZGVudGF0aW9uID0gKGVkaXRvciwgaW5kZW50YXRpb24pID0+ICFzZWxlY3Rpb25Jc1dpdGhpbk5vbkVkaXRhYmxlTGlzdChlZGl0b3IpICYmIHNlbGVjdGlvbkluZGVudGF0aW9uKGVkaXRvciwgaW5kZW50YXRpb24pO1xuICAgIGNvbnN0IGluZGVudExpc3RTZWxlY3Rpb24gPSBlZGl0b3IgPT4gaGFuZGxlSW5kZW50YXRpb24oZWRpdG9yLCAnSW5kZW50Jyk7XG4gICAgY29uc3Qgb3V0ZGVudExpc3RTZWxlY3Rpb24gPSBlZGl0b3IgPT4gaGFuZGxlSW5kZW50YXRpb24oZWRpdG9yLCAnT3V0ZGVudCcpO1xuICAgIGNvbnN0IGZsYXR0ZW5MaXN0U2VsZWN0aW9uID0gZWRpdG9yID0+IGhhbmRsZUluZGVudGF0aW9uKGVkaXRvciwgJ0ZsYXR0ZW4nKTtcblxuICAgIGNvbnN0IHplcm9XaWR0aCA9ICdcXHVGRUZGJztcbiAgICBjb25zdCBpc1p3c3AgPSBjaGFyID0+IGNoYXIgPT09IHplcm9XaWR0aDtcblxuICAgIGNvbnN0IGFuY2VzdG9yJDEgPSAoc2NvcGUsIHByZWRpY2F0ZSwgaXNSb290KSA9PiBhbmNlc3RvciQyKHNjb3BlLCBwcmVkaWNhdGUsIGlzUm9vdCkuaXNTb21lKCk7XG5cbiAgICBjb25zdCBhbmNlc3RvciA9IChlbGVtZW50LCB0YXJnZXQpID0+IGFuY2VzdG9yJDEoZWxlbWVudCwgY3VycnkoZXEsIHRhcmdldCkpO1xuXG4gICAgdmFyIGdsb2JhbCQxID0gdGlueW1jZS51dGlsLlRvb2xzLnJlc29sdmUoJ3RpbnltY2UuZG9tLkJvb2ttYXJrTWFuYWdlcicpO1xuXG4gICAgY29uc3QgRE9NJDEgPSBnbG9iYWwkMy5ET007XG4gICAgY29uc3QgY3JlYXRlQm9va21hcmsgPSBybmcgPT4ge1xuICAgICAgY29uc3QgYm9va21hcmsgPSB7fTtcbiAgICAgIGNvbnN0IHNldHVwRW5kUG9pbnQgPSBzdGFydCA9PiB7XG4gICAgICAgIGxldCBjb250YWluZXIgPSBybmdbc3RhcnQgPyAnc3RhcnRDb250YWluZXInIDogJ2VuZENvbnRhaW5lciddO1xuICAgICAgICBsZXQgb2Zmc2V0ID0gcm5nW3N0YXJ0ID8gJ3N0YXJ0T2Zmc2V0JyA6ICdlbmRPZmZzZXQnXTtcbiAgICAgICAgaWYgKGlzRWxlbWVudChjb250YWluZXIpKSB7XG4gICAgICAgICAgY29uc3Qgb2Zmc2V0Tm9kZSA9IERPTSQxLmNyZWF0ZSgnc3BhbicsIHsgJ2RhdGEtbWNlLXR5cGUnOiAnYm9va21hcmsnIH0pO1xuICAgICAgICAgIGlmIChjb250YWluZXIuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSBNYXRoLm1pbihvZmZzZXQsIGNvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgICAgICAgIGNvbnRhaW5lci5pbnNlcnRCZWZvcmUob2Zmc2V0Tm9kZSwgY29udGFpbmVyLmNoaWxkTm9kZXNbb2Zmc2V0XSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBET00kMS5pbnNlcnRBZnRlcihvZmZzZXROb2RlLCBjb250YWluZXIuY2hpbGROb2Rlc1tvZmZzZXRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKG9mZnNldE5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250YWluZXIgPSBvZmZzZXROb2RlO1xuICAgICAgICAgIG9mZnNldCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgYm9va21hcmtbc3RhcnQgPyAnc3RhcnRDb250YWluZXInIDogJ2VuZENvbnRhaW5lciddID0gY29udGFpbmVyO1xuICAgICAgICBib29rbWFya1tzdGFydCA/ICdzdGFydE9mZnNldCcgOiAnZW5kT2Zmc2V0J10gPSBvZmZzZXQ7XG4gICAgICB9O1xuICAgICAgc2V0dXBFbmRQb2ludCh0cnVlKTtcbiAgICAgIGlmICghcm5nLmNvbGxhcHNlZCkge1xuICAgICAgICBzZXR1cEVuZFBvaW50KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYm9va21hcms7XG4gICAgfTtcbiAgICBjb25zdCByZXNvbHZlQm9va21hcmsgPSBib29rbWFyayA9PiB7XG4gICAgICBjb25zdCByZXN0b3JlRW5kUG9pbnQgPSBzdGFydCA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGVJbmRleCA9IGNvbnRhaW5lciA9PiB7XG4gICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgIGxldCBub2RlID0gKF9hID0gY29udGFpbmVyLnBhcmVudE5vZGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5maXJzdENoaWxkO1xuICAgICAgICAgIGxldCBpZHggPSAwO1xuICAgICAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgICAgICBpZiAobm9kZSA9PT0gY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgIHJldHVybiBpZHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzRWxlbWVudChub2RlKSB8fCBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1tY2UtdHlwZScpICE9PSAnYm9va21hcmsnKSB7XG4gICAgICAgICAgICAgIGlkeCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGNvbnRhaW5lciA9IGJvb2ttYXJrW3N0YXJ0ID8gJ3N0YXJ0Q29udGFpbmVyJyA6ICdlbmRDb250YWluZXInXTtcbiAgICAgICAgbGV0IG9mZnNldCA9IGJvb2ttYXJrW3N0YXJ0ID8gJ3N0YXJ0T2Zmc2V0JyA6ICdlbmRPZmZzZXQnXTtcbiAgICAgICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRWxlbWVudChjb250YWluZXIpICYmIGNvbnRhaW5lci5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IGNvbnRhaW5lcjtcbiAgICAgICAgICBvZmZzZXQgPSBub2RlSW5kZXgoY29udGFpbmVyKTtcbiAgICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgICAgICBET00kMS5yZW1vdmUobm9kZSk7XG4gICAgICAgICAgaWYgKCFjb250YWluZXIuaGFzQ2hpbGROb2RlcygpICYmIERPTSQxLmlzQmxvY2soY29udGFpbmVyKSkge1xuICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKERPTSQxLmNyZWF0ZSgnYnInKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJvb2ttYXJrW3N0YXJ0ID8gJ3N0YXJ0Q29udGFpbmVyJyA6ICdlbmRDb250YWluZXInXSA9IGNvbnRhaW5lcjtcbiAgICAgICAgYm9va21hcmtbc3RhcnQgPyAnc3RhcnRPZmZzZXQnIDogJ2VuZE9mZnNldCddID0gb2Zmc2V0O1xuICAgICAgfTtcbiAgICAgIHJlc3RvcmVFbmRQb2ludCh0cnVlKTtcbiAgICAgIHJlc3RvcmVFbmRQb2ludCgpO1xuICAgICAgY29uc3Qgcm5nID0gRE9NJDEuY3JlYXRlUm5nKCk7XG4gICAgICBybmcuc2V0U3RhcnQoYm9va21hcmsuc3RhcnRDb250YWluZXIsIGJvb2ttYXJrLnN0YXJ0T2Zmc2V0KTtcbiAgICAgIGlmIChib29rbWFyay5lbmRDb250YWluZXIpIHtcbiAgICAgICAgcm5nLnNldEVuZChib29rbWFyay5lbmRDb250YWluZXIsIGJvb2ttYXJrLmVuZE9mZnNldCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbm9ybWFsaXplUmFuZ2Uocm5nKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGlzdFRvZ2dsZUFjdGlvbkZyb21MaXN0TmFtZSA9IGxpc3ROYW1lID0+IHtcbiAgICAgIHN3aXRjaCAobGlzdE5hbWUpIHtcbiAgICAgIGNhc2UgJ1VMJzpcbiAgICAgICAgcmV0dXJuICdUb2dnbGVVbExpc3QnO1xuICAgICAgY2FzZSAnT0wnOlxuICAgICAgICByZXR1cm4gJ1RvZ2dsZU9sTGlzdCc7XG4gICAgICBjYXNlICdETCc6XG4gICAgICAgIHJldHVybiAnVG9nZ2xlRExMaXN0JztcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlTGlzdFN0eWxlID0gKGRvbSwgZWwsIGRldGFpbCkgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9IGRldGFpbFsnbGlzdC1zdHlsZS10eXBlJ10gPyBkZXRhaWxbJ2xpc3Qtc3R5bGUtdHlwZSddIDogbnVsbDtcbiAgICAgIGRvbS5zZXRTdHlsZShlbCwgJ2xpc3Qtc3R5bGUtdHlwZScsIHR5cGUpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0QXR0cmlicyA9IChlbG0sIGF0dHJzKSA9PiB7XG4gICAgICBnbG9iYWwkMi5lYWNoKGF0dHJzLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBlbG0uc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVMaXN0QXR0cnMgPSAoZG9tLCBlbCwgZGV0YWlsKSA9PiB7XG4gICAgICBzZXRBdHRyaWJzKGVsLCBkZXRhaWxbJ2xpc3QtYXR0cmlidXRlcyddKTtcbiAgICAgIGdsb2JhbCQyLmVhY2goZG9tLnNlbGVjdCgnbGknLCBlbCksIGxpID0+IHtcbiAgICAgICAgc2V0QXR0cmlicyhsaSwgZGV0YWlsWydsaXN0LWl0ZW0tYXR0cmlidXRlcyddKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgdXBkYXRlTGlzdFdpdGhEZXRhaWxzID0gKGRvbSwgZWwsIGRldGFpbCkgPT4ge1xuICAgICAgdXBkYXRlTGlzdFN0eWxlKGRvbSwgZWwsIGRldGFpbCk7XG4gICAgICB1cGRhdGVMaXN0QXR0cnMoZG9tLCBlbCwgZGV0YWlsKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZVN0eWxlcyA9IChkb20sIGVsZW1lbnQsIHN0eWxlcykgPT4ge1xuICAgICAgZ2xvYmFsJDIuZWFjaChzdHlsZXMsIHN0eWxlID0+IGRvbS5zZXRTdHlsZShlbGVtZW50LCBzdHlsZSwgJycpKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzSW5saW5lID0gKGVkaXRvciwgbm9kZSkgPT4gaXNOb25OdWxsYWJsZShub2RlKSAmJiAhaXNCbG9jayhub2RlLCBlZGl0b3Iuc2NoZW1hLmdldEJsb2NrRWxlbWVudHMoKSk7XG4gICAgY29uc3QgZ2V0RW5kUG9pbnROb2RlID0gKGVkaXRvciwgcm5nLCBzdGFydCwgcm9vdCkgPT4ge1xuICAgICAgbGV0IGNvbnRhaW5lciA9IHJuZ1tzdGFydCA/ICdzdGFydENvbnRhaW5lcicgOiAnZW5kQ29udGFpbmVyJ107XG4gICAgICBjb25zdCBvZmZzZXQgPSBybmdbc3RhcnQgPyAnc3RhcnRPZmZzZXQnIDogJ2VuZE9mZnNldCddO1xuICAgICAgaWYgKGlzRWxlbWVudChjb250YWluZXIpKSB7XG4gICAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5jaGlsZE5vZGVzW01hdGgubWluKG9mZnNldCwgY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoIC0gMSldIHx8IGNvbnRhaW5lcjtcbiAgICAgIH1cbiAgICAgIGlmICghc3RhcnQgJiYgaXNCcihjb250YWluZXIubmV4dFNpYmxpbmcpKSB7XG4gICAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5uZXh0U2libGluZztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpbmRCbG9ja0FuY2VzdG9yID0gbm9kZSA9PiB7XG4gICAgICAgIHdoaWxlICghZWRpdG9yLmRvbS5pc0Jsb2NrKG5vZGUpICYmIG5vZGUucGFyZW50Tm9kZSAmJiByb290ICE9PSBub2RlKSB7XG4gICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH07XG4gICAgICBjb25zdCBmaW5kQmV0dGVyQ29udGFpbmVyID0gKGNvbnRhaW5lciwgZm9yd2FyZCkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHdhbGtlciA9IG5ldyBnbG9iYWwkNShjb250YWluZXIsIGZpbmRCbG9ja0FuY2VzdG9yKGNvbnRhaW5lcikpO1xuICAgICAgICBjb25zdCBkaXIgPSBmb3J3YXJkID8gJ25leHQnIDogJ3ByZXYnO1xuICAgICAgICBsZXQgbm9kZTtcbiAgICAgICAgd2hpbGUgKG5vZGUgPSB3YWxrZXJbZGlyXSgpKSB7XG4gICAgICAgICAgaWYgKCEoaXNWb2lkKGVkaXRvciwgbm9kZSkgfHwgaXNad3NwKG5vZGUudGV4dENvbnRlbnQpIHx8ICgoX2EgPSBub2RlLnRleHRDb250ZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKSA9PT0gMCkpIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfTtcbiAgICAgIGlmIChzdGFydCAmJiBpc1RleHROb2RlJDEoY29udGFpbmVyKSkge1xuICAgICAgICBpZiAoaXNad3NwKGNvbnRhaW5lci50ZXh0Q29udGVudCkpIHtcbiAgICAgICAgICBjb250YWluZXIgPSBmaW5kQmV0dGVyQ29udGFpbmVyKGNvbnRhaW5lciwgZmFsc2UpLmdldE9yKGNvbnRhaW5lcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGNvbnRhaW5lci5wYXJlbnROb2RlICE9PSBudWxsICYmIGlzSW5saW5lKGVkaXRvciwgY29udGFpbmVyLnBhcmVudE5vZGUpKSB7XG4gICAgICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgd2hpbGUgKGNvbnRhaW5lci5wcmV2aW91c1NpYmxpbmcgIT09IG51bGwgJiYgKGlzSW5saW5lKGVkaXRvciwgY29udGFpbmVyLnByZXZpb3VzU2libGluZykgfHwgaXNUZXh0Tm9kZSQxKGNvbnRhaW5lci5wcmV2aW91c1NpYmxpbmcpKSkge1xuICAgICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghc3RhcnQgJiYgaXNUZXh0Tm9kZSQxKGNvbnRhaW5lcikpIHtcbiAgICAgICAgaWYgKGlzWndzcChjb250YWluZXIudGV4dENvbnRlbnQpKSB7XG4gICAgICAgICAgY29udGFpbmVyID0gZmluZEJldHRlckNvbnRhaW5lcihjb250YWluZXIsIHRydWUpLmdldE9yKGNvbnRhaW5lcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGNvbnRhaW5lci5wYXJlbnROb2RlICE9PSBudWxsICYmIGlzSW5saW5lKGVkaXRvciwgY29udGFpbmVyLnBhcmVudE5vZGUpKSB7XG4gICAgICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgd2hpbGUgKGNvbnRhaW5lci5uZXh0U2libGluZyAhPT0gbnVsbCAmJiAoaXNJbmxpbmUoZWRpdG9yLCBjb250YWluZXIubmV4dFNpYmxpbmcpIHx8IGlzVGV4dE5vZGUkMShjb250YWluZXIubmV4dFNpYmxpbmcpKSkge1xuICAgICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLm5leHRTaWJsaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd2hpbGUgKGNvbnRhaW5lci5wYXJlbnROb2RlICE9PSByb290KSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgICAgICBpZiAoaXNUZXh0QmxvY2soZWRpdG9yLCBjb250YWluZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoL14oVER8VEgpJC8udGVzdChwYXJlbnQubm9kZU5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICBjb250YWluZXIgPSBwYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGFpbmVyO1xuICAgIH07XG4gICAgY29uc3QgZ2V0U2VsZWN0ZWRUZXh0QmxvY2tzID0gKGVkaXRvciwgcm5nLCByb290KSA9PiB7XG4gICAgICBjb25zdCB0ZXh0QmxvY2tzID0gW107XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgY29uc3Qgc3RhcnROb2RlID0gZ2V0RW5kUG9pbnROb2RlKGVkaXRvciwgcm5nLCB0cnVlLCByb290KTtcbiAgICAgIGNvbnN0IGVuZE5vZGUgPSBnZXRFbmRQb2ludE5vZGUoZWRpdG9yLCBybmcsIGZhbHNlLCByb290KTtcbiAgICAgIGxldCBibG9jaztcbiAgICAgIGNvbnN0IHNpYmxpbmdzID0gW107XG4gICAgICBmb3IgKGxldCBub2RlID0gc3RhcnROb2RlOyBub2RlOyBub2RlID0gbm9kZS5uZXh0U2libGluZykge1xuICAgICAgICBzaWJsaW5ncy5wdXNoKG5vZGUpO1xuICAgICAgICBpZiAobm9kZSA9PT0gZW5kTm9kZSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBnbG9iYWwkMi5lYWNoKHNpYmxpbmdzLCBub2RlID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoaXNUZXh0QmxvY2soZWRpdG9yLCBub2RlKSkge1xuICAgICAgICAgIHRleHRCbG9ja3MucHVzaChub2RlKTtcbiAgICAgICAgICBibG9jayA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkb20uaXNCbG9jayhub2RlKSB8fCBpc0JyKG5vZGUpKSB7XG4gICAgICAgICAgaWYgKGlzQnIobm9kZSkpIHtcbiAgICAgICAgICAgIGRvbS5yZW1vdmUobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJsb2NrID0gbnVsbDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV4dFNpYmxpbmcgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgICBpZiAoZ2xvYmFsJDEuaXNCb29rbWFya05vZGUobm9kZSkpIHtcbiAgICAgICAgICBpZiAoaXNMaXN0Tm9kZShuZXh0U2libGluZykgfHwgaXNUZXh0QmxvY2soZWRpdG9yLCBuZXh0U2libGluZykgfHwgIW5leHRTaWJsaW5nICYmIG5vZGUucGFyZW50Tm9kZSA9PT0gcm9vdCkge1xuICAgICAgICAgICAgYmxvY2sgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgYmxvY2sgPSBkb20uY3JlYXRlKCdwJyk7XG4gICAgICAgICAgKF9hID0gbm9kZS5wYXJlbnROb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaW5zZXJ0QmVmb3JlKGJsb2NrLCBub2RlKTtcbiAgICAgICAgICB0ZXh0QmxvY2tzLnB1c2goYmxvY2spO1xuICAgICAgICB9XG4gICAgICAgIGJsb2NrLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdGV4dEJsb2NrcztcbiAgICB9O1xuICAgIGNvbnN0IGhhc0NvbXBhdGlibGVTdHlsZSA9IChkb20sIHNpYiwgZGV0YWlsKSA9PiB7XG4gICAgICBjb25zdCBzaWJTdHlsZSA9IGRvbS5nZXRTdHlsZShzaWIsICdsaXN0LXN0eWxlLXR5cGUnKTtcbiAgICAgIGxldCBkZXRhaWxTdHlsZSA9IGRldGFpbCA/IGRldGFpbFsnbGlzdC1zdHlsZS10eXBlJ10gOiAnJztcbiAgICAgIGRldGFpbFN0eWxlID0gZGV0YWlsU3R5bGUgPT09IG51bGwgPyAnJyA6IGRldGFpbFN0eWxlO1xuICAgICAgcmV0dXJuIHNpYlN0eWxlID09PSBkZXRhaWxTdHlsZTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFJvb3RTZWFyY2hTdGFydCA9IChlZGl0b3IsIHJhbmdlKSA9PiB7XG4gICAgICBjb25zdCBzdGFydCA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0U3RhcnQodHJ1ZSk7XG4gICAgICBjb25zdCBzdGFydFBvaW50ID0gZ2V0RW5kUG9pbnROb2RlKGVkaXRvciwgcmFuZ2UsIHRydWUsIGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgaWYgKGFuY2VzdG9yKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHN0YXJ0UG9pbnQpLCBTdWdhckVsZW1lbnQuZnJvbURvbShyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcikpKSB7XG4gICAgICAgIHJldHVybiByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzdGFydDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5TGlzdCA9IChlZGl0b3IsIGxpc3ROYW1lLCBkZXRhaWwpID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBsZXQgbGlzdEl0ZW1OYW1lID0gJ0xJJztcbiAgICAgIGNvbnN0IHJvb3QgPSBnZXRDbG9zZXN0TGlzdEhvc3QoZWRpdG9yLCBnZXRSb290U2VhcmNoU3RhcnQoZWRpdG9yLCBybmcpKTtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBpZiAoZG9tLmdldENvbnRlbnRFZGl0YWJsZShlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKSkgPT09ICdmYWxzZScpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGlzdE5hbWUgPSBsaXN0TmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgaWYgKGxpc3ROYW1lID09PSAnREwnKSB7XG4gICAgICAgIGxpc3RJdGVtTmFtZSA9ICdEVCc7XG4gICAgICB9XG4gICAgICBjb25zdCBib29rbWFyayA9IGNyZWF0ZUJvb2ttYXJrKHJuZyk7XG4gICAgICBjb25zdCBzZWxlY3RlZFRleHRCbG9ja3MgPSBmaWx0ZXIkMShnZXRTZWxlY3RlZFRleHRCbG9ja3MoZWRpdG9yLCBybmcsIHJvb3QpLCBlZGl0b3IuZG9tLmlzRWRpdGFibGUpO1xuICAgICAgZ2xvYmFsJDIuZWFjaChzZWxlY3RlZFRleHRCbG9ja3MsIGJsb2NrID0+IHtcbiAgICAgICAgbGV0IGxpc3RCbG9jaztcbiAgICAgICAgY29uc3Qgc2libGluZyA9IGJsb2NrLnByZXZpb3VzU2libGluZztcbiAgICAgICAgY29uc3QgcGFyZW50ID0gYmxvY2sucGFyZW50Tm9kZTtcbiAgICAgICAgaWYgKCFpc0xpc3RJdGVtTm9kZShwYXJlbnQpKSB7XG4gICAgICAgICAgaWYgKHNpYmxpbmcgJiYgaXNMaXN0Tm9kZShzaWJsaW5nKSAmJiBzaWJsaW5nLm5vZGVOYW1lID09PSBsaXN0TmFtZSAmJiBoYXNDb21wYXRpYmxlU3R5bGUoZG9tLCBzaWJsaW5nLCBkZXRhaWwpKSB7XG4gICAgICAgICAgICBsaXN0QmxvY2sgPSBzaWJsaW5nO1xuICAgICAgICAgICAgYmxvY2sgPSBkb20ucmVuYW1lKGJsb2NrLCBsaXN0SXRlbU5hbWUpO1xuICAgICAgICAgICAgc2libGluZy5hcHBlbmRDaGlsZChibG9jayk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpc3RCbG9jayA9IGRvbS5jcmVhdGUobGlzdE5hbWUpO1xuICAgICAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShsaXN0QmxvY2ssIGJsb2NrKTtcbiAgICAgICAgICAgIGxpc3RCbG9jay5hcHBlbmRDaGlsZChibG9jayk7XG4gICAgICAgICAgICBibG9jayA9IGRvbS5yZW5hbWUoYmxvY2ssIGxpc3RJdGVtTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlbW92ZVN0eWxlcyhkb20sIGJsb2NrLCBbXG4gICAgICAgICAgICAnbWFyZ2luJyxcbiAgICAgICAgICAgICdtYXJnaW4tcmlnaHQnLFxuICAgICAgICAgICAgJ21hcmdpbi1ib3R0b20nLFxuICAgICAgICAgICAgJ21hcmdpbi1sZWZ0JyxcbiAgICAgICAgICAgICdtYXJnaW4tdG9wJyxcbiAgICAgICAgICAgICdwYWRkaW5nJyxcbiAgICAgICAgICAgICdwYWRkaW5nLXJpZ2h0JyxcbiAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbScsXG4gICAgICAgICAgICAncGFkZGluZy1sZWZ0JyxcbiAgICAgICAgICAgICdwYWRkaW5nLXRvcCdcbiAgICAgICAgICBdKTtcbiAgICAgICAgICB1cGRhdGVMaXN0V2l0aERldGFpbHMoZG9tLCBsaXN0QmxvY2ssIGRldGFpbCk7XG4gICAgICAgICAgbWVyZ2VXaXRoQWRqYWNlbnRMaXN0cyhlZGl0b3IuZG9tLCBsaXN0QmxvY2spO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJlc29sdmVCb29rbWFyayhib29rbWFyaykpO1xuICAgIH07XG4gICAgY29uc3QgaXNWYWxpZExpc3RzID0gKGxpc3QxLCBsaXN0MikgPT4ge1xuICAgICAgcmV0dXJuIGlzTGlzdE5vZGUobGlzdDEpICYmIGxpc3QxLm5vZGVOYW1lID09PSAobGlzdDIgPT09IG51bGwgfHwgbGlzdDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxpc3QyLm5vZGVOYW1lKTtcbiAgICB9O1xuICAgIGNvbnN0IGhhc1NhbWVMaXN0U3R5bGUgPSAoZG9tLCBsaXN0MSwgbGlzdDIpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldFN0eWxlID0gZG9tLmdldFN0eWxlKGxpc3QxLCAnbGlzdC1zdHlsZS10eXBlJywgdHJ1ZSk7XG4gICAgICBjb25zdCBzdHlsZSA9IGRvbS5nZXRTdHlsZShsaXN0MiwgJ2xpc3Qtc3R5bGUtdHlwZScsIHRydWUpO1xuICAgICAgcmV0dXJuIHRhcmdldFN0eWxlID09PSBzdHlsZTtcbiAgICB9O1xuICAgIGNvbnN0IGhhc1NhbWVDbGFzc2VzID0gKGVsbTEsIGVsbTIpID0+IHtcbiAgICAgIHJldHVybiBlbG0xLmNsYXNzTmFtZSA9PT0gZWxtMi5jbGFzc05hbWU7XG4gICAgfTtcbiAgICBjb25zdCBzaG91bGRNZXJnZSA9IChkb20sIGxpc3QxLCBsaXN0MikgPT4ge1xuICAgICAgcmV0dXJuIGlzVmFsaWRMaXN0cyhsaXN0MSwgbGlzdDIpICYmIGhhc1NhbWVMaXN0U3R5bGUoZG9tLCBsaXN0MSwgbGlzdDIpICYmIGhhc1NhbWVDbGFzc2VzKGxpc3QxLCBsaXN0Mik7XG4gICAgfTtcbiAgICBjb25zdCBtZXJnZVdpdGhBZGphY2VudExpc3RzID0gKGRvbSwgbGlzdEJsb2NrKSA9PiB7XG4gICAgICBsZXQgbm9kZTtcbiAgICAgIGxldCBzaWJsaW5nID0gbGlzdEJsb2NrLm5leHRTaWJsaW5nO1xuICAgICAgaWYgKHNob3VsZE1lcmdlKGRvbSwgbGlzdEJsb2NrLCBzaWJsaW5nKSkge1xuICAgICAgICBjb25zdCBsaVNpYmxpbmcgPSBzaWJsaW5nO1xuICAgICAgICB3aGlsZSAobm9kZSA9IGxpU2libGluZy5maXJzdENoaWxkKSB7XG4gICAgICAgICAgbGlzdEJsb2NrLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGRvbS5yZW1vdmUobGlTaWJsaW5nKTtcbiAgICAgIH1cbiAgICAgIHNpYmxpbmcgPSBsaXN0QmxvY2sucHJldmlvdXNTaWJsaW5nO1xuICAgICAgaWYgKHNob3VsZE1lcmdlKGRvbSwgbGlzdEJsb2NrLCBzaWJsaW5nKSkge1xuICAgICAgICBjb25zdCBsaVNpYmxpbmcgPSBzaWJsaW5nO1xuICAgICAgICB3aGlsZSAobm9kZSA9IGxpU2libGluZy5sYXN0Q2hpbGQpIHtcbiAgICAgICAgICBsaXN0QmxvY2suaW5zZXJ0QmVmb3JlKG5vZGUsIGxpc3RCbG9jay5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICBkb20ucmVtb3ZlKGxpU2libGluZyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVMaXN0JDEgPSAoZWRpdG9yLCBsaXN0LCBsaXN0TmFtZSwgZGV0YWlsKSA9PiB7XG4gICAgICBpZiAobGlzdC5ub2RlTmFtZSAhPT0gbGlzdE5hbWUpIHtcbiAgICAgICAgY29uc3QgbmV3TGlzdCA9IGVkaXRvci5kb20ucmVuYW1lKGxpc3QsIGxpc3ROYW1lKTtcbiAgICAgICAgdXBkYXRlTGlzdFdpdGhEZXRhaWxzKGVkaXRvci5kb20sIG5ld0xpc3QsIGRldGFpbCk7XG4gICAgICAgIGZpcmVMaXN0RXZlbnQoZWRpdG9yLCBsaXN0VG9nZ2xlQWN0aW9uRnJvbUxpc3ROYW1lKGxpc3ROYW1lKSwgbmV3TGlzdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cGRhdGVMaXN0V2l0aERldGFpbHMoZWRpdG9yLmRvbSwgbGlzdCwgZGV0YWlsKTtcbiAgICAgICAgZmlyZUxpc3RFdmVudChlZGl0b3IsIGxpc3RUb2dnbGVBY3Rpb25Gcm9tTGlzdE5hbWUobGlzdE5hbWUpLCBsaXN0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHVwZGF0ZUN1c3RvbUxpc3QgPSAoZWRpdG9yLCBsaXN0LCBsaXN0TmFtZSwgZGV0YWlsKSA9PiB7XG4gICAgICBsaXN0LmNsYXNzTGlzdC5mb3JFYWNoKChjbHMsIF8sIGNsYXNzTGlzdCkgPT4ge1xuICAgICAgICBpZiAoY2xzLnN0YXJ0c1dpdGgoJ3RveC0nKSkge1xuICAgICAgICAgIGNsYXNzTGlzdC5yZW1vdmUoY2xzKTtcbiAgICAgICAgICBpZiAoY2xhc3NMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgbGlzdC5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChsaXN0Lm5vZGVOYW1lICE9PSBsaXN0TmFtZSkge1xuICAgICAgICBjb25zdCBuZXdMaXN0ID0gZWRpdG9yLmRvbS5yZW5hbWUobGlzdCwgbGlzdE5hbWUpO1xuICAgICAgICB1cGRhdGVMaXN0V2l0aERldGFpbHMoZWRpdG9yLmRvbSwgbmV3TGlzdCwgZGV0YWlsKTtcbiAgICAgICAgZmlyZUxpc3RFdmVudChlZGl0b3IsIGxpc3RUb2dnbGVBY3Rpb25Gcm9tTGlzdE5hbWUobGlzdE5hbWUpLCBuZXdMaXN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVwZGF0ZUxpc3RXaXRoRGV0YWlscyhlZGl0b3IuZG9tLCBsaXN0LCBkZXRhaWwpO1xuICAgICAgICBmaXJlTGlzdEV2ZW50KGVkaXRvciwgbGlzdFRvZ2dsZUFjdGlvbkZyb21MaXN0TmFtZShsaXN0TmFtZSksIGxpc3QpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdG9nZ2xlTXVsdGlwbGVMaXN0cyA9IChlZGl0b3IsIHBhcmVudExpc3QsIGxpc3RzLCBsaXN0TmFtZSwgZGV0YWlsKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnRJc0xpc3QgPSBpc0xpc3ROb2RlKHBhcmVudExpc3QpO1xuICAgICAgaWYgKHBhcmVudElzTGlzdCAmJiBwYXJlbnRMaXN0Lm5vZGVOYW1lID09PSBsaXN0TmFtZSAmJiAhaGFzTGlzdFN0eWxlRGV0YWlsKGRldGFpbCkgJiYgIWlzQ3VzdG9tTGlzdChwYXJlbnRMaXN0KSkge1xuICAgICAgICBmbGF0dGVuTGlzdFNlbGVjdGlvbihlZGl0b3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXBwbHlMaXN0KGVkaXRvciwgbGlzdE5hbWUsIGRldGFpbCk7XG4gICAgICAgIGNvbnN0IGJvb2ttYXJrID0gY3JlYXRlQm9va21hcmsoZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSk7XG4gICAgICAgIGNvbnN0IGFsbExpc3RzID0gcGFyZW50SXNMaXN0ID8gW1xuICAgICAgICAgIHBhcmVudExpc3QsXG4gICAgICAgICAgLi4ubGlzdHNcbiAgICAgICAgXSA6IGxpc3RzO1xuICAgICAgICBjb25zdCB1cGRhdGVGdW5jdGlvbiA9IHBhcmVudElzTGlzdCAmJiBpc0N1c3RvbUxpc3QocGFyZW50TGlzdCkgPyB1cGRhdGVDdXN0b21MaXN0IDogdXBkYXRlTGlzdCQxO1xuICAgICAgICBnbG9iYWwkMi5lYWNoKGFsbExpc3RzLCBlbG0gPT4ge1xuICAgICAgICAgIHVwZGF0ZUZ1bmN0aW9uKGVkaXRvciwgZWxtLCBsaXN0TmFtZSwgZGV0YWlsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJlc29sdmVCb29rbWFyayhib29rbWFyaykpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaGFzTGlzdFN0eWxlRGV0YWlsID0gZGV0YWlsID0+IHtcbiAgICAgIHJldHVybiAnbGlzdC1zdHlsZS10eXBlJyBpbiBkZXRhaWw7XG4gICAgfTtcbiAgICBjb25zdCB0b2dnbGVTaW5nbGVMaXN0ID0gKGVkaXRvciwgcGFyZW50TGlzdCwgbGlzdE5hbWUsIGRldGFpbCkgPT4ge1xuICAgICAgaWYgKHBhcmVudExpc3QgPT09IGVkaXRvci5nZXRCb2R5KCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmVudExpc3QpIHtcbiAgICAgICAgaWYgKHBhcmVudExpc3Qubm9kZU5hbWUgPT09IGxpc3ROYW1lICYmICFoYXNMaXN0U3R5bGVEZXRhaWwoZGV0YWlsKSAmJiAhaXNDdXN0b21MaXN0KHBhcmVudExpc3QpKSB7XG4gICAgICAgICAgZmxhdHRlbkxpc3RTZWxlY3Rpb24oZWRpdG9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBib29rbWFyayA9IGNyZWF0ZUJvb2ttYXJrKGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpO1xuICAgICAgICAgIGlmIChpc0N1c3RvbUxpc3QocGFyZW50TGlzdCkpIHtcbiAgICAgICAgICAgIHBhcmVudExpc3QuY2xhc3NMaXN0LmZvckVhY2goKGNscywgXywgY2xhc3NMaXN0KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjbHMuc3RhcnRzV2l0aCgndG94LScpKSB7XG4gICAgICAgICAgICAgICAgY2xhc3NMaXN0LnJlbW92ZShjbHMpO1xuICAgICAgICAgICAgICAgIGlmIChjbGFzc0xpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICBwYXJlbnRMaXN0LnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB1cGRhdGVMaXN0V2l0aERldGFpbHMoZWRpdG9yLmRvbSwgcGFyZW50TGlzdCwgZGV0YWlsKTtcbiAgICAgICAgICBjb25zdCBuZXdMaXN0ID0gZWRpdG9yLmRvbS5yZW5hbWUocGFyZW50TGlzdCwgbGlzdE5hbWUpO1xuICAgICAgICAgIG1lcmdlV2l0aEFkamFjZW50TGlzdHMoZWRpdG9yLmRvbSwgbmV3TGlzdCk7XG4gICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcocmVzb2x2ZUJvb2ttYXJrKGJvb2ttYXJrKSk7XG4gICAgICAgICAgYXBwbHlMaXN0KGVkaXRvciwgbGlzdE5hbWUsIGRldGFpbCk7XG4gICAgICAgICAgZmlyZUxpc3RFdmVudChlZGl0b3IsIGxpc3RUb2dnbGVBY3Rpb25Gcm9tTGlzdE5hbWUobGlzdE5hbWUpLCBuZXdMaXN0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXBwbHlMaXN0KGVkaXRvciwgbGlzdE5hbWUsIGRldGFpbCk7XG4gICAgICAgIGZpcmVMaXN0RXZlbnQoZWRpdG9yLCBsaXN0VG9nZ2xlQWN0aW9uRnJvbUxpc3ROYW1lKGxpc3ROYW1lKSwgcGFyZW50TGlzdCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB0b2dnbGVMaXN0ID0gKGVkaXRvciwgbGlzdE5hbWUsIF9kZXRhaWwpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudExpc3QgPSBnZXRQYXJlbnRMaXN0KGVkaXRvcik7XG4gICAgICBpZiAoaXNXaXRoaW5Ob25FZGl0YWJsZUxpc3QoZWRpdG9yLCBwYXJlbnRMaXN0KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBzZWxlY3RlZFN1Ykxpc3RzID0gZ2V0U2VsZWN0ZWRTdWJMaXN0cyhlZGl0b3IpO1xuICAgICAgY29uc3QgZGV0YWlsID0gaXNPYmplY3QoX2RldGFpbCkgPyBfZGV0YWlsIDoge307XG4gICAgICBpZiAoc2VsZWN0ZWRTdWJMaXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRvZ2dsZU11bHRpcGxlTGlzdHMoZWRpdG9yLCBwYXJlbnRMaXN0LCBzZWxlY3RlZFN1Ykxpc3RzLCBsaXN0TmFtZSwgZGV0YWlsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvZ2dsZVNpbmdsZUxpc3QoZWRpdG9yLCBwYXJlbnRMaXN0LCBsaXN0TmFtZSwgZGV0YWlsKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgRE9NID0gZ2xvYmFsJDMuRE9NO1xuICAgIGNvbnN0IG5vcm1hbGl6ZUxpc3QgPSAoZG9tLCBsaXN0KSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnROb2RlID0gbGlzdC5wYXJlbnRFbGVtZW50O1xuICAgICAgaWYgKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS5ub2RlTmFtZSA9PT0gJ0xJJyAmJiBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPT09IGxpc3QpIHtcbiAgICAgICAgY29uc3Qgc2libGluZyA9IHBhcmVudE5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICBpZiAoc2libGluZyAmJiBzaWJsaW5nLm5vZGVOYW1lID09PSAnTEknKSB7XG4gICAgICAgICAgc2libGluZy5hcHBlbmRDaGlsZChsaXN0KTtcbiAgICAgICAgICBpZiAoaXNFbXB0eSQyKGRvbSwgcGFyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgIERPTS5yZW1vdmUocGFyZW50Tm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIERPTS5zZXRTdHlsZShwYXJlbnROb2RlLCAnbGlzdFN0eWxlVHlwZScsICdub25lJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpc0xpc3ROb2RlKHBhcmVudE5vZGUpKSB7XG4gICAgICAgIGNvbnN0IHNpYmxpbmcgPSBwYXJlbnROb2RlLnByZXZpb3VzU2libGluZztcbiAgICAgICAgaWYgKHNpYmxpbmcgJiYgc2libGluZy5ub2RlTmFtZSA9PT0gJ0xJJykge1xuICAgICAgICAgIHNpYmxpbmcuYXBwZW5kQ2hpbGQobGlzdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZUxpc3RzID0gKGRvbSwgZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgbGlzdHMgPSBnbG9iYWwkMi5ncmVwKGRvbS5zZWxlY3QoJ29sLHVsJywgZWxlbWVudCkpO1xuICAgICAgZ2xvYmFsJDIuZWFjaChsaXN0cywgbGlzdCA9PiB7XG4gICAgICAgIG5vcm1hbGl6ZUxpc3QoZG9tLCBsaXN0KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBmaW5kTmV4dENhcmV0Q29udGFpbmVyID0gKGVkaXRvciwgcm5nLCBpc0ZvcndhcmQsIHJvb3QpID0+IHtcbiAgICAgIGxldCBub2RlID0gcm5nLnN0YXJ0Q29udGFpbmVyO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gcm5nLnN0YXJ0T2Zmc2V0O1xuICAgICAgaWYgKGlzVGV4dE5vZGUkMShub2RlKSAmJiAoaXNGb3J3YXJkID8gb2Zmc2V0IDwgbm9kZS5kYXRhLmxlbmd0aCA6IG9mZnNldCA+IDApKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfVxuICAgICAgY29uc3Qgbm9uRW1wdHlCbG9ja3MgPSBlZGl0b3Iuc2NoZW1hLmdldE5vbkVtcHR5RWxlbWVudHMoKTtcbiAgICAgIGlmIChpc0VsZW1lbnQobm9kZSkpIHtcbiAgICAgICAgbm9kZSA9IGdsb2JhbCQ2LmdldE5vZGUobm9kZSwgb2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHdhbGtlciA9IG5ldyBnbG9iYWwkNShub2RlLCByb290KTtcbiAgICAgIGlmIChpc0ZvcndhcmQpIHtcbiAgICAgICAgaWYgKGlzQm9ndXNCcihlZGl0b3IuZG9tLCBub2RlKSkge1xuICAgICAgICAgIHdhbGtlci5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHdhbGtGbiA9IGlzRm9yd2FyZCA/IHdhbGtlci5uZXh0LmJpbmQod2Fsa2VyKSA6IHdhbGtlci5wcmV2Mi5iaW5kKHdhbGtlcik7XG4gICAgICB3aGlsZSAobm9kZSA9IHdhbGtGbigpKSB7XG4gICAgICAgIGlmIChub2RlLm5vZGVOYW1lID09PSAnTEknICYmICFub2RlLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub25FbXB0eUJsb2Nrc1tub2RlLm5vZGVOYW1lXSkge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1RleHROb2RlJDEobm9kZSkgJiYgbm9kZS5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBjb25zdCBoYXNPbmx5T25lQmxvY2tDaGlsZCA9IChkb20sIGVsbSkgPT4ge1xuICAgICAgY29uc3QgY2hpbGROb2RlcyA9IGVsbS5jaGlsZE5vZGVzO1xuICAgICAgcmV0dXJuIGNoaWxkTm9kZXMubGVuZ3RoID09PSAxICYmICFpc0xpc3ROb2RlKGNoaWxkTm9kZXNbMF0pICYmIGRvbS5pc0Jsb2NrKGNoaWxkTm9kZXNbMF0pO1xuICAgIH07XG4gICAgY29uc3QgdW53cmFwU2luZ2xlQmxvY2tDaGlsZCA9IChkb20sIGVsbSkgPT4ge1xuICAgICAgaWYgKGhhc09ubHlPbmVCbG9ja0NoaWxkKGRvbSwgZWxtKSkge1xuICAgICAgICBkb20ucmVtb3ZlKGVsbS5maXJzdENoaWxkLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1vdmVDaGlsZHJlbiA9IChkb20sIGZyb21FbG0sIHRvRWxtKSA9PiB7XG4gICAgICBsZXQgbm9kZTtcbiAgICAgIGNvbnN0IHRhcmdldEVsbSA9IGhhc09ubHlPbmVCbG9ja0NoaWxkKGRvbSwgdG9FbG0pID8gdG9FbG0uZmlyc3RDaGlsZCA6IHRvRWxtO1xuICAgICAgdW53cmFwU2luZ2xlQmxvY2tDaGlsZChkb20sIGZyb21FbG0pO1xuICAgICAgaWYgKCFpc0VtcHR5JDIoZG9tLCBmcm9tRWxtLCB0cnVlKSkge1xuICAgICAgICB3aGlsZSAobm9kZSA9IGZyb21FbG0uZmlyc3RDaGlsZCkge1xuICAgICAgICAgIHRhcmdldEVsbS5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbWVyZ2VMaUVsZW1lbnRzID0gKGRvbSwgZnJvbUVsbSwgdG9FbG0pID0+IHtcbiAgICAgIGxldCBsaXN0Tm9kZTtcbiAgICAgIGNvbnN0IHVsID0gZnJvbUVsbS5wYXJlbnROb2RlO1xuICAgICAgaWYgKCFpc0NoaWxkT2ZCb2R5KGRvbSwgZnJvbUVsbSkgfHwgIWlzQ2hpbGRPZkJvZHkoZG9tLCB0b0VsbSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGlzTGlzdE5vZGUodG9FbG0ubGFzdENoaWxkKSkge1xuICAgICAgICBsaXN0Tm9kZSA9IHRvRWxtLmxhc3RDaGlsZDtcbiAgICAgIH1cbiAgICAgIGlmICh1bCA9PT0gdG9FbG0ubGFzdENoaWxkKSB7XG4gICAgICAgIGlmIChpc0JyKHVsLnByZXZpb3VzU2libGluZykpIHtcbiAgICAgICAgICBkb20ucmVtb3ZlKHVsLnByZXZpb3VzU2libGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vZGUgPSB0b0VsbS5sYXN0Q2hpbGQ7XG4gICAgICBpZiAobm9kZSAmJiBpc0JyKG5vZGUpICYmIGZyb21FbG0uaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgIGRvbS5yZW1vdmUobm9kZSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNFbXB0eSQyKGRvbSwgdG9FbG0sIHRydWUpKSB7XG4gICAgICAgIGVtcHR5KFN1Z2FyRWxlbWVudC5mcm9tRG9tKHRvRWxtKSk7XG4gICAgICB9XG4gICAgICBtb3ZlQ2hpbGRyZW4oZG9tLCBmcm9tRWxtLCB0b0VsbSk7XG4gICAgICBpZiAobGlzdE5vZGUpIHtcbiAgICAgICAgdG9FbG0uYXBwZW5kQ2hpbGQobGlzdE5vZGUpO1xuICAgICAgfVxuICAgICAgY29uc3QgY29udGFpbnMkMSA9IGNvbnRhaW5zKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHRvRWxtKSwgU3VnYXJFbGVtZW50LmZyb21Eb20oZnJvbUVsbSkpO1xuICAgICAgY29uc3QgbmVzdGVkTGlzdHMgPSBjb250YWlucyQxID8gZG9tLmdldFBhcmVudHMoZnJvbUVsbSwgaXNMaXN0Tm9kZSwgdG9FbG0pIDogW107XG4gICAgICBkb20ucmVtb3ZlKGZyb21FbG0pO1xuICAgICAgZWFjaCQxKG5lc3RlZExpc3RzLCBsaXN0ID0+IHtcbiAgICAgICAgaWYgKGlzRW1wdHkkMihkb20sIGxpc3QpICYmIGxpc3QgIT09IGRvbS5nZXRSb290KCkpIHtcbiAgICAgICAgICBkb20ucmVtb3ZlKGxpc3QpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG1lcmdlSW50b0VtcHR5TGkgPSAoZWRpdG9yLCBmcm9tTGksIHRvTGkpID0+IHtcbiAgICAgIGVtcHR5KFN1Z2FyRWxlbWVudC5mcm9tRG9tKHRvTGkpKTtcbiAgICAgIG1lcmdlTGlFbGVtZW50cyhlZGl0b3IuZG9tLCBmcm9tTGksIHRvTGkpO1xuICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRDdXJzb3JMb2NhdGlvbih0b0xpLCAwKTtcbiAgICB9O1xuICAgIGNvbnN0IG1lcmdlRm9yd2FyZCA9IChlZGl0b3IsIHJuZywgZnJvbUxpLCB0b0xpKSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgaWYgKGRvbS5pc0VtcHR5KHRvTGkpKSB7XG4gICAgICAgIG1lcmdlSW50b0VtcHR5TGkoZWRpdG9yLCBmcm9tTGksIHRvTGkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYm9va21hcmsgPSBjcmVhdGVCb29rbWFyayhybmcpO1xuICAgICAgICBtZXJnZUxpRWxlbWVudHMoZG9tLCBmcm9tTGksIHRvTGkpO1xuICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhyZXNvbHZlQm9va21hcmsoYm9va21hcmspKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1lcmdlQmFja3dhcmQgPSAoZWRpdG9yLCBybmcsIGZyb21MaSwgdG9MaSkgPT4ge1xuICAgICAgY29uc3QgYm9va21hcmsgPSBjcmVhdGVCb29rbWFyayhybmcpO1xuICAgICAgbWVyZ2VMaUVsZW1lbnRzKGVkaXRvci5kb20sIGZyb21MaSwgdG9MaSk7XG4gICAgICBjb25zdCByZXNvbHZlZEJvb2ttYXJrID0gcmVzb2x2ZUJvb2ttYXJrKGJvb2ttYXJrKTtcbiAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJlc29sdmVkQm9va21hcmspO1xuICAgIH07XG4gICAgY29uc3QgYmFja3NwYWNlRGVsZXRlRnJvbUxpc3RUb0xpc3RDYXJldCA9IChlZGl0b3IsIGlzRm9yd2FyZCkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbSwgc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0RWxtID0gc2VsZWN0aW9uLmdldFN0YXJ0KCk7XG4gICAgICBjb25zdCByb290ID0gZ2V0Q2xvc2VzdEVkaXRpbmdIb3N0KGVkaXRvciwgc2VsZWN0aW9uU3RhcnRFbG0pO1xuICAgICAgY29uc3QgbGkgPSBkb20uZ2V0UGFyZW50KHNlbGVjdGlvbi5nZXRTdGFydCgpLCAnTEknLCByb290KTtcbiAgICAgIGlmIChsaSkge1xuICAgICAgICBjb25zdCB1bCA9IGxpLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGlmICh1bCA9PT0gZWRpdG9yLmdldEJvZHkoKSAmJiBpc0VtcHR5JDIoZG9tLCB1bCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBybmcgPSBub3JtYWxpemVSYW5nZShzZWxlY3Rpb24uZ2V0Um5nKCkpO1xuICAgICAgICBjb25zdCBvdGhlckxpID0gZG9tLmdldFBhcmVudChmaW5kTmV4dENhcmV0Q29udGFpbmVyKGVkaXRvciwgcm5nLCBpc0ZvcndhcmQsIHJvb3QpLCAnTEknLCByb290KTtcbiAgICAgICAgaWYgKG90aGVyTGkgJiYgb3RoZXJMaSAhPT0gbGkpIHtcbiAgICAgICAgICBlZGl0b3IudW5kb01hbmFnZXIudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRm9yd2FyZCkge1xuICAgICAgICAgICAgICBtZXJnZUZvcndhcmQoZWRpdG9yLCBybmcsIG90aGVyTGksIGxpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChpc0ZpcnN0Q2hpbGQobGkpKSB7XG4gICAgICAgICAgICAgICAgb3V0ZGVudExpc3RTZWxlY3Rpb24oZWRpdG9yKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtZXJnZUJhY2t3YXJkKGVkaXRvciwgcm5nLCBsaSwgb3RoZXJMaSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICghb3RoZXJMaSkge1xuICAgICAgICAgIGlmICghaXNGb3J3YXJkICYmIHJuZy5zdGFydE9mZnNldCA9PT0gMCAmJiBybmcuZW5kT2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICBlZGl0b3IudW5kb01hbmFnZXIudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICAgICAgICBmbGF0dGVuTGlzdFNlbGVjdGlvbihlZGl0b3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZUJsb2NrID0gKGRvbSwgYmxvY2ssIHJvb3QpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudEJsb2NrID0gZG9tLmdldFBhcmVudChibG9jay5wYXJlbnROb2RlLCBkb20uaXNCbG9jaywgcm9vdCk7XG4gICAgICBkb20ucmVtb3ZlKGJsb2NrKTtcbiAgICAgIGlmIChwYXJlbnRCbG9jayAmJiBkb20uaXNFbXB0eShwYXJlbnRCbG9jaykpIHtcbiAgICAgICAgZG9tLnJlbW92ZShwYXJlbnRCbG9jayk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBiYWNrc3BhY2VEZWxldGVJbnRvTGlzdENhcmV0ID0gKGVkaXRvciwgaXNGb3J3YXJkKSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgY29uc3Qgc2VsZWN0aW9uU3RhcnRFbG0gPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KCk7XG4gICAgICBjb25zdCByb290ID0gZ2V0Q2xvc2VzdEVkaXRpbmdIb3N0KGVkaXRvciwgc2VsZWN0aW9uU3RhcnRFbG0pO1xuICAgICAgY29uc3QgYmxvY2sgPSBkb20uZ2V0UGFyZW50KHNlbGVjdGlvblN0YXJ0RWxtLCBkb20uaXNCbG9jaywgcm9vdCk7XG4gICAgICBpZiAoYmxvY2sgJiYgZG9tLmlzRW1wdHkoYmxvY2spKSB7XG4gICAgICAgIGNvbnN0IHJuZyA9IG5vcm1hbGl6ZVJhbmdlKGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpO1xuICAgICAgICBjb25zdCBvdGhlckxpID0gZG9tLmdldFBhcmVudChmaW5kTmV4dENhcmV0Q29udGFpbmVyKGVkaXRvciwgcm5nLCBpc0ZvcndhcmQsIHJvb3QpLCAnTEknLCByb290KTtcbiAgICAgICAgaWYgKG90aGVyTGkpIHtcbiAgICAgICAgICBjb25zdCBmaW5kVmFsaWRFbGVtZW50ID0gZWxlbWVudCA9PiBjb250YWlucyQxKFtcbiAgICAgICAgICAgICd0ZCcsXG4gICAgICAgICAgICAndGgnLFxuICAgICAgICAgICAgJ2NhcHRpb24nXG4gICAgICAgICAgXSwgbmFtZShlbGVtZW50KSk7XG4gICAgICAgICAgY29uc3QgZmluZFJvb3QgPSBub2RlID0+IG5vZGUuZG9tID09PSByb290O1xuICAgICAgICAgIGNvbnN0IG90aGVyTGlDZWxsID0gY2xvc2VzdChTdWdhckVsZW1lbnQuZnJvbURvbShvdGhlckxpKSwgZmluZFZhbGlkRWxlbWVudCwgZmluZFJvb3QpO1xuICAgICAgICAgIGNvbnN0IGNhcmV0Q2VsbCA9IGNsb3Nlc3QoU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLnN0YXJ0Q29udGFpbmVyKSwgZmluZFZhbGlkRWxlbWVudCwgZmluZFJvb3QpO1xuICAgICAgICAgIGlmICghZXF1YWxzKG90aGVyTGlDZWxsLCBjYXJldENlbGwsIGVxKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlZGl0b3IudW5kb01hbmFnZXIudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IG90aGVyTGkucGFyZW50Tm9kZTtcbiAgICAgICAgICAgIHJlbW92ZUJsb2NrKGRvbSwgYmxvY2ssIHJvb3QpO1xuICAgICAgICAgICAgbWVyZ2VXaXRoQWRqYWNlbnRMaXN0cyhkb20sIHBhcmVudE5vZGUpO1xuICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3Qob3RoZXJMaSwgdHJ1ZSk7XG4gICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLmNvbGxhcHNlKGlzRm9yd2FyZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IGJhY2tzcGFjZURlbGV0ZUNhcmV0ID0gKGVkaXRvciwgaXNGb3J3YXJkKSA9PiB7XG4gICAgICByZXR1cm4gYmFja3NwYWNlRGVsZXRlRnJvbUxpc3RUb0xpc3RDYXJldChlZGl0b3IsIGlzRm9yd2FyZCkgfHwgYmFja3NwYWNlRGVsZXRlSW50b0xpc3RDYXJldChlZGl0b3IsIGlzRm9yd2FyZCk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNMaXN0U2VsZWN0aW9uID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0RWxtID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCgpO1xuICAgICAgY29uc3Qgcm9vdCA9IGdldENsb3Nlc3RFZGl0aW5nSG9zdChlZGl0b3IsIHNlbGVjdGlvblN0YXJ0RWxtKTtcbiAgICAgIGNvbnN0IHN0YXJ0TGlzdFBhcmVudCA9IGVkaXRvci5kb20uZ2V0UGFyZW50KHNlbGVjdGlvblN0YXJ0RWxtLCAnTEksRFQsREQnLCByb290KTtcbiAgICAgIHJldHVybiBzdGFydExpc3RQYXJlbnQgfHwgZ2V0U2VsZWN0ZWRMaXN0SXRlbXMoZWRpdG9yKS5sZW5ndGggPiAwO1xuICAgIH07XG4gICAgY29uc3QgYmFja3NwYWNlRGVsZXRlUmFuZ2UgPSBlZGl0b3IgPT4ge1xuICAgICAgaWYgKGhhc0xpc3RTZWxlY3Rpb24oZWRpdG9yKSkge1xuICAgICAgICBlZGl0b3IudW5kb01hbmFnZXIudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnRGVsZXRlJyk7XG4gICAgICAgICAgbm9ybWFsaXplTGlzdHMoZWRpdG9yLmRvbSwgZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IGJhY2tzcGFjZURlbGV0ZSA9IChlZGl0b3IsIGlzRm9yd2FyZCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgIHJldHVybiAhaXNXaXRoaW5Ob25FZGl0YWJsZUxpc3QoZWRpdG9yLCBzZWxlY3Rpb24uZ2V0Tm9kZSgpKSAmJiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkgPyBiYWNrc3BhY2VEZWxldGVDYXJldChlZGl0b3IsIGlzRm9yd2FyZCkgOiBiYWNrc3BhY2VEZWxldGVSYW5nZShlZGl0b3IpKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldHVwJDIgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLm9uKCdFeGVjQ29tbWFuZCcsIGUgPT4ge1xuICAgICAgICBjb25zdCBjbWQgPSBlLmNvbW1hbmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKChjbWQgPT09ICdkZWxldGUnIHx8IGNtZCA9PT0gJ2ZvcndhcmRkZWxldGUnKSAmJiBoYXNMaXN0U2VsZWN0aW9uKGVkaXRvcikpIHtcbiAgICAgICAgICBub3JtYWxpemVMaXN0cyhlZGl0b3IuZG9tLCBlZGl0b3IuZ2V0Qm9keSgpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ2tleWRvd24nLCBlID0+IHtcbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gZ2xvYmFsJDQuQkFDS1NQQUNFKSB7XG4gICAgICAgICAgaWYgKGJhY2tzcGFjZURlbGV0ZShlZGl0b3IsIGZhbHNlKSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlLmtleUNvZGUgPT09IGdsb2JhbCQ0LkRFTEVURSkge1xuICAgICAgICAgIGlmIChiYWNrc3BhY2VEZWxldGUoZWRpdG9yLCB0cnVlKSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldCA9IGVkaXRvciA9PiAoe1xuICAgICAgYmFja3NwYWNlRGVsZXRlOiBpc0ZvcndhcmQgPT4ge1xuICAgICAgICBiYWNrc3BhY2VEZWxldGUoZWRpdG9yLCBpc0ZvcndhcmQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgdXBkYXRlTGlzdCA9IChlZGl0b3IsIHVwZGF0ZSkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50TGlzdCA9IGdldFBhcmVudExpc3QoZWRpdG9yKTtcbiAgICAgIGlmIChwYXJlbnRMaXN0ID09PSBudWxsIHx8IGlzV2l0aGluTm9uRWRpdGFibGVMaXN0KGVkaXRvciwgcGFyZW50TGlzdCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGlzT2JqZWN0KHVwZGF0ZS5zdHlsZXMpKSB7XG4gICAgICAgICAgZWRpdG9yLmRvbS5zZXRTdHlsZXMocGFyZW50TGlzdCwgdXBkYXRlLnN0eWxlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzT2JqZWN0KHVwZGF0ZS5hdHRycykpIHtcbiAgICAgICAgICBlYWNoKHVwZGF0ZS5hdHRycywgKHYsIGspID0+IGVkaXRvci5kb20uc2V0QXR0cmliKHBhcmVudExpc3QsIGssIHYpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHBhcnNlQWxwaGFiZXRpY0Jhc2UyNiA9IHN0ciA9PiB7XG4gICAgICBjb25zdCBjaGFycyA9IHJldmVyc2UodHJpbShzdHIpLnNwbGl0KCcnKSk7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBtYXAoY2hhcnMsIChjaGFyLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYXJWYWx1ZSA9IGNoYXIudG9VcHBlckNhc2UoKS5jaGFyQ29kZUF0KDApIC0gJ0EnLmNoYXJDb2RlQXQoMCkgKyAxO1xuICAgICAgICByZXR1cm4gTWF0aC5wb3coMjYsIGkpICogY2hhclZhbHVlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZm9sZGwodmFsdWVzLCAoc3VtLCB2KSA9PiBzdW0gKyB2LCAwKTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbXBvc2VBbHBoYWJldGljQmFzZTI2ID0gdmFsdWUgPT4ge1xuICAgICAgdmFsdWUtLTtcbiAgICAgIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVtYWluZGVyID0gdmFsdWUgJSAyNjtcbiAgICAgICAgY29uc3QgcXVvdGllbnQgPSBNYXRoLmZsb29yKHZhbHVlIC8gMjYpO1xuICAgICAgICBjb25zdCByZXN0ID0gY29tcG9zZUFscGhhYmV0aWNCYXNlMjYocXVvdGllbnQpO1xuICAgICAgICBjb25zdCBjaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgnQScuY2hhckNvZGVBdCgwKSArIHJlbWFpbmRlcik7XG4gICAgICAgIHJldHVybiByZXN0ICsgY2hhcjtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlzVXBwZXJjYXNlID0gc3RyID0+IC9eW0EtWl0rJC8udGVzdChzdHIpO1xuICAgIGNvbnN0IGlzTG93ZXJjYXNlID0gc3RyID0+IC9eW2Etel0rJC8udGVzdChzdHIpO1xuICAgIGNvbnN0IGlzTnVtZXJpYyA9IHN0ciA9PiAvXlswLTldKyQvLnRlc3Qoc3RyKTtcbiAgICBjb25zdCBkZWR1Y2VMaXN0VHlwZSA9IHN0YXJ0ID0+IHtcbiAgICAgIGlmIChpc051bWVyaWMoc3RhcnQpKSB7XG4gICAgICAgIHJldHVybiAyO1xuICAgICAgfSBlbHNlIGlmIChpc1VwcGVyY2FzZShzdGFydCkpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9IGVsc2UgaWYgKGlzTG93ZXJjYXNlKHN0YXJ0KSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gZWxzZSBpZiAoaXNFbXB0eSQxKHN0YXJ0KSkge1xuICAgICAgICByZXR1cm4gMztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiA0O1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcGFyc2VTdGFydFZhbHVlID0gc3RhcnQgPT4ge1xuICAgICAgc3dpdGNoIChkZWR1Y2VMaXN0VHlwZShzdGFydCkpIHtcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgIGxpc3RTdHlsZVR5cGU6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICAgICBzdGFydFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgIGxpc3RTdHlsZVR5cGU6IE9wdGlvbmFsLnNvbWUoJ3VwcGVyLWFscGhhJyksXG4gICAgICAgICAgc3RhcnQ6IHBhcnNlQWxwaGFiZXRpY0Jhc2UyNihzdGFydCkudG9TdHJpbmcoKVxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgIGxpc3RTdHlsZVR5cGU6IE9wdGlvbmFsLnNvbWUoJ2xvd2VyLWFscGhhJyksXG4gICAgICAgICAgc3RhcnQ6IHBhcnNlQWxwaGFiZXRpY0Jhc2UyNihzdGFydCkudG9TdHJpbmcoKVxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgIGxpc3RTdHlsZVR5cGU6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICAgICBzdGFydDogJydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIDQ6XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBwYXJzZURldGFpbCA9IGRldGFpbCA9PiB7XG4gICAgICBjb25zdCBzdGFydCA9IHBhcnNlSW50KGRldGFpbC5zdGFydCwgMTApO1xuICAgICAgaWYgKGlzJDIoZGV0YWlsLmxpc3RTdHlsZVR5cGUsICd1cHBlci1hbHBoYScpKSB7XG4gICAgICAgIHJldHVybiBjb21wb3NlQWxwaGFiZXRpY0Jhc2UyNihzdGFydCk7XG4gICAgICB9IGVsc2UgaWYgKGlzJDIoZGV0YWlsLmxpc3RTdHlsZVR5cGUsICdsb3dlci1hbHBoYScpKSB7XG4gICAgICAgIHJldHVybiBjb21wb3NlQWxwaGFiZXRpY0Jhc2UyNihzdGFydCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkZXRhaWwuc3RhcnQ7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9wZW4gPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgY3VycmVudExpc3QgPSBnZXRQYXJlbnRMaXN0KGVkaXRvcik7XG4gICAgICBpZiAoIWlzT2xOb2RlKGN1cnJlbnRMaXN0KSB8fCBpc1dpdGhpbk5vbkVkaXRhYmxlTGlzdChlZGl0b3IsIGN1cnJlbnRMaXN0KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlZGl0b3Iud2luZG93TWFuYWdlci5vcGVuKHtcbiAgICAgICAgdGl0bGU6ICdMaXN0IFByb3BlcnRpZXMnLFxuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgdHlwZTogJ3BhbmVsJyxcbiAgICAgICAgICBpdGVtczogW3tcbiAgICAgICAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgICAgICAgbmFtZTogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgbGFiZWw6ICdTdGFydCBsaXN0IGF0IG51bWJlcicsXG4gICAgICAgICAgICAgIGlucHV0TW9kZTogJ251bWVyaWMnXG4gICAgICAgICAgICB9XVxuICAgICAgICB9LFxuICAgICAgICBpbml0aWFsRGF0YToge1xuICAgICAgICAgIHN0YXJ0OiBwYXJzZURldGFpbCh7XG4gICAgICAgICAgICBzdGFydDogZWRpdG9yLmRvbS5nZXRBdHRyaWIoY3VycmVudExpc3QsICdzdGFydCcsICcxJyksXG4gICAgICAgICAgICBsaXN0U3R5bGVUeXBlOiBPcHRpb25hbC5mcm9tKGVkaXRvci5kb20uZ2V0U3R5bGUoY3VycmVudExpc3QsICdsaXN0LXN0eWxlLXR5cGUnKSlcbiAgICAgICAgICB9KVxuICAgICAgICB9LFxuICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ2NhbmNlbCcsXG4gICAgICAgICAgICBuYW1lOiAnY2FuY2VsJyxcbiAgICAgICAgICAgIHRleHQ6ICdDYW5jZWwnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgIG5hbWU6ICdzYXZlJyxcbiAgICAgICAgICAgIHRleHQ6ICdTYXZlJyxcbiAgICAgICAgICAgIHByaW1hcnk6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIG9uU3VibWl0OiBhcGkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBhcGkuZ2V0RGF0YSgpO1xuICAgICAgICAgIHBhcnNlU3RhcnRWYWx1ZShkYXRhLnN0YXJ0KS5lYWNoKGRldGFpbCA9PiB7XG4gICAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZUxpc3RVcGRhdGUnLCBmYWxzZSwge1xuICAgICAgICAgICAgICBhdHRyczogeyBzdGFydDogZGV0YWlsLnN0YXJ0ID09PSAnMScgPyAnJyA6IGRldGFpbC5zdGFydCB9LFxuICAgICAgICAgICAgICBzdHlsZXM6IHsgJ2xpc3Qtc3R5bGUtdHlwZSc6IGRldGFpbC5saXN0U3R5bGVUeXBlLmdldE9yKCcnKSB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhcGkuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHF1ZXJ5TGlzdENvbW1hbmRTdGF0ZSA9IChlZGl0b3IsIGxpc3ROYW1lKSA9PiAoKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnRMaXN0ID0gZ2V0UGFyZW50TGlzdChlZGl0b3IpO1xuICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUocGFyZW50TGlzdCkgJiYgcGFyZW50TGlzdC5ub2RlTmFtZSA9PT0gbGlzdE5hbWU7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlckRpYWxvZyA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IuYWRkQ29tbWFuZCgnbWNlTGlzdFByb3BzJywgKCkgPT4ge1xuICAgICAgICBvcGVuKGVkaXRvcik7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyJDIgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLm9uKCdCZWZvcmVFeGVjQ29tbWFuZCcsIGUgPT4ge1xuICAgICAgICBjb25zdCBjbWQgPSBlLmNvbW1hbmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGNtZCA9PT0gJ2luZGVudCcpIHtcbiAgICAgICAgICBpbmRlbnRMaXN0U2VsZWN0aW9uKGVkaXRvcik7XG4gICAgICAgIH0gZWxzZSBpZiAoY21kID09PSAnb3V0ZGVudCcpIHtcbiAgICAgICAgICBvdXRkZW50TGlzdFNlbGVjdGlvbihlZGl0b3IpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5hZGRDb21tYW5kKCdJbnNlcnRVbm9yZGVyZWRMaXN0JywgKHVpLCBkZXRhaWwpID0+IHtcbiAgICAgICAgdG9nZ2xlTGlzdChlZGl0b3IsICdVTCcsIGRldGFpbCk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5hZGRDb21tYW5kKCdJbnNlcnRPcmRlcmVkTGlzdCcsICh1aSwgZGV0YWlsKSA9PiB7XG4gICAgICAgIHRvZ2dsZUxpc3QoZWRpdG9yLCAnT0wnLCBkZXRhaWwpO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3IuYWRkQ29tbWFuZCgnSW5zZXJ0RGVmaW5pdGlvbkxpc3QnLCAodWksIGRldGFpbCkgPT4ge1xuICAgICAgICB0b2dnbGVMaXN0KGVkaXRvciwgJ0RMJywgZGV0YWlsKTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLmFkZENvbW1hbmQoJ1JlbW92ZUxpc3QnLCAoKSA9PiB7XG4gICAgICAgIGZsYXR0ZW5MaXN0U2VsZWN0aW9uKGVkaXRvcik7XG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyRGlhbG9nKGVkaXRvcik7XG4gICAgICBlZGl0b3IuYWRkQ29tbWFuZCgnbWNlTGlzdFVwZGF0ZScsICh1aSwgZGV0YWlsKSA9PiB7XG4gICAgICAgIGlmIChpc09iamVjdChkZXRhaWwpKSB7XG4gICAgICAgICAgdXBkYXRlTGlzdChlZGl0b3IsIGRldGFpbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLmFkZFF1ZXJ5U3RhdGVIYW5kbGVyKCdJbnNlcnRVbm9yZGVyZWRMaXN0JywgcXVlcnlMaXN0Q29tbWFuZFN0YXRlKGVkaXRvciwgJ1VMJykpO1xuICAgICAgZWRpdG9yLmFkZFF1ZXJ5U3RhdGVIYW5kbGVyKCdJbnNlcnRPcmRlcmVkTGlzdCcsIHF1ZXJ5TGlzdENvbW1hbmRTdGF0ZShlZGl0b3IsICdPTCcpKTtcbiAgICAgIGVkaXRvci5hZGRRdWVyeVN0YXRlSGFuZGxlcignSW5zZXJ0RGVmaW5pdGlvbkxpc3QnLCBxdWVyeUxpc3RDb21tYW5kU3RhdGUoZWRpdG9yLCAnREwnKSk7XG4gICAgfTtcblxuICAgIHZhciBnbG9iYWwgPSB0aW55bWNlLnV0aWwuVG9vbHMucmVzb2x2ZSgndGlueW1jZS5odG1sLk5vZGUnKTtcblxuICAgIGNvbnN0IGlzVGV4dE5vZGUgPSBub2RlID0+IG5vZGUudHlwZSA9PT0gMztcbiAgICBjb25zdCBpc0VtcHR5ID0gbm9kZUJ1ZmZlciA9PiBub2RlQnVmZmVyLmxlbmd0aCA9PT0gMDtcbiAgICBjb25zdCB3cmFwSW52YWxpZENoaWxkcmVuID0gbGlzdCA9PiB7XG4gICAgICBjb25zdCBpbnNlcnRMaXN0SXRlbSA9IChidWZmZXIsIHJlZk5vZGUpID0+IHtcbiAgICAgICAgY29uc3QgbGkgPSBnbG9iYWwuY3JlYXRlKCdsaScpO1xuICAgICAgICBlYWNoJDEoYnVmZmVyLCBub2RlID0+IGxpLmFwcGVuZChub2RlKSk7XG4gICAgICAgIGlmIChyZWZOb2RlKSB7XG4gICAgICAgICAgbGlzdC5pbnNlcnQobGksIHJlZk5vZGUsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpc3QuYXBwZW5kKGxpKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlZHVjZXIgPSAoYnVmZmVyLCBub2RlKSA9PiB7XG4gICAgICAgIGlmIChpc1RleHROb2RlKG5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLmJ1ZmZlcixcbiAgICAgICAgICAgIG5vZGVcbiAgICAgICAgICBdO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0VtcHR5KGJ1ZmZlcikgJiYgIWlzVGV4dE5vZGUobm9kZSkpIHtcbiAgICAgICAgICBpbnNlcnRMaXN0SXRlbShidWZmZXIsIG5vZGUpO1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdEJ1ZmZlciA9IGZvbGRsKGxpc3QuY2hpbGRyZW4oKSwgcmVkdWNlciwgW10pO1xuICAgICAgaWYgKCFpc0VtcHR5KHJlc3RCdWZmZXIpKSB7XG4gICAgICAgIGluc2VydExpc3RJdGVtKHJlc3RCdWZmZXIpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2V0dXAkMSA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3Iub24oJ1ByZUluaXQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHtwYXJzZXJ9ID0gZWRpdG9yO1xuICAgICAgICBwYXJzZXIuYWRkTm9kZUZpbHRlcigndWwsb2wnLCBub2RlcyA9PiBlYWNoJDEobm9kZXMsIHdyYXBJbnZhbGlkQ2hpbGRyZW4pKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBzZXR1cFRhYktleSA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3Iub24oJ2tleWRvd24nLCBlID0+IHtcbiAgICAgICAgaWYgKGUua2V5Q29kZSAhPT0gZ2xvYmFsJDQuVEFCIHx8IGdsb2JhbCQ0Lm1ldGFLZXlQcmVzc2VkKGUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVkaXRvci51bmRvTWFuYWdlci50cmFuc2FjdCgoKSA9PiB7XG4gICAgICAgICAgaWYgKGUuc2hpZnRLZXkgPyBvdXRkZW50TGlzdFNlbGVjdGlvbihlZGl0b3IpIDogaW5kZW50TGlzdFNlbGVjdGlvbihlZGl0b3IpKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2V0dXAgPSBlZGl0b3IgPT4ge1xuICAgICAgaWYgKHNob3VsZEluZGVudE9uVGFiKGVkaXRvcikpIHtcbiAgICAgICAgc2V0dXBUYWJLZXkoZWRpdG9yKTtcbiAgICAgIH1cbiAgICAgIHNldHVwJDIoZWRpdG9yKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0dXBUb2dnbGVCdXR0b25IYW5kbGVyID0gKGVkaXRvciwgbGlzdE5hbWUpID0+IGFwaSA9PiB7XG4gICAgICBjb25zdCB0b2dnbGVCdXR0b25IYW5kbGVyID0gZSA9PiB7XG4gICAgICAgIGFwaS5zZXRBY3RpdmUoaW5MaXN0KGUucGFyZW50cywgbGlzdE5hbWUpKTtcbiAgICAgICAgYXBpLnNldEVuYWJsZWQoIWlzV2l0aGluTm9uRWRpdGFibGVMaXN0KGVkaXRvciwgZS5lbGVtZW50KSAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRWRpdGFibGUoKSk7XG4gICAgICB9O1xuICAgICAgYXBpLnNldEVuYWJsZWQoZWRpdG9yLnNlbGVjdGlvbi5pc0VkaXRhYmxlKCkpO1xuICAgICAgcmV0dXJuIHNldE5vZGVDaGFuZ2VIYW5kbGVyKGVkaXRvciwgdG9nZ2xlQnV0dG9uSGFuZGxlcik7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlciQxID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGV4ZWMgPSBjb21tYW5kID0+ICgpID0+IGVkaXRvci5leGVjQ29tbWFuZChjb21tYW5kKTtcbiAgICAgIGlmICghZWRpdG9yLmhhc1BsdWdpbignYWR2bGlzdCcpKSB7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRUb2dnbGVCdXR0b24oJ251bWxpc3QnLCB7XG4gICAgICAgICAgaWNvbjogJ29yZGVyZWQtbGlzdCcsXG4gICAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICB0b29sdGlwOiAnTnVtYmVyZWQgbGlzdCcsXG4gICAgICAgICAgb25BY3Rpb246IGV4ZWMoJ0luc2VydE9yZGVyZWRMaXN0JyksXG4gICAgICAgICAgb25TZXR1cDogc2V0dXBUb2dnbGVCdXR0b25IYW5kbGVyKGVkaXRvciwgJ09MJylcbiAgICAgICAgfSk7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRUb2dnbGVCdXR0b24oJ2J1bGxpc3QnLCB7XG4gICAgICAgICAgaWNvbjogJ3Vub3JkZXJlZC1saXN0JyxcbiAgICAgICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgICAgIHRvb2x0aXA6ICdCdWxsZXQgbGlzdCcsXG4gICAgICAgICAgb25BY3Rpb246IGV4ZWMoJ0luc2VydFVub3JkZXJlZExpc3QnKSxcbiAgICAgICAgICBvblNldHVwOiBzZXR1cFRvZ2dsZUJ1dHRvbkhhbmRsZXIoZWRpdG9yLCAnVUwnKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0dXBNZW51QnV0dG9uSGFuZGxlciA9IChlZGl0b3IsIGxpc3ROYW1lKSA9PiBhcGkgPT4ge1xuICAgICAgY29uc3QgbWVudUJ1dHRvbkhhbmRsZXIgPSBlID0+IGFwaS5zZXRFbmFibGVkKGluTGlzdChlLnBhcmVudHMsIGxpc3ROYW1lKSAmJiAhaXNXaXRoaW5Ob25FZGl0YWJsZUxpc3QoZWRpdG9yLCBlLmVsZW1lbnQpKTtcbiAgICAgIHJldHVybiBzZXROb2RlQ2hhbmdlSGFuZGxlcihlZGl0b3IsIG1lbnVCdXR0b25IYW5kbGVyKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGxpc3RQcm9wZXJ0aWVzID0ge1xuICAgICAgICB0ZXh0OiAnTGlzdCBwcm9wZXJ0aWVzLi4uJyxcbiAgICAgICAgaWNvbjogJ29yZGVyZWQtbGlzdCcsXG4gICAgICAgIG9uQWN0aW9uOiAoKSA9PiBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZUxpc3RQcm9wcycpLFxuICAgICAgICBvblNldHVwOiBzZXR1cE1lbnVCdXR0b25IYW5kbGVyKGVkaXRvciwgJ09MJylcbiAgICAgIH07XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTWVudUl0ZW0oJ2xpc3Rwcm9wcycsIGxpc3RQcm9wZXJ0aWVzKTtcbiAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRDb250ZXh0TWVudSgnbGlzdHMnLCB7XG4gICAgICAgIHVwZGF0ZTogbm9kZSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFyZW50TGlzdCA9IGdldFBhcmVudExpc3QoZWRpdG9yLCBub2RlKTtcbiAgICAgICAgICByZXR1cm4gaXNPbE5vZGUocGFyZW50TGlzdCkgPyBbJ2xpc3Rwcm9wcyddIDogW107XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB2YXIgUGx1Z2luID0gKCkgPT4ge1xuICAgICAgZ2xvYmFsJDcuYWRkKCdsaXN0cycsIGVkaXRvciA9PiB7XG4gICAgICAgIHJlZ2lzdGVyJDMoZWRpdG9yKTtcbiAgICAgICAgc2V0dXAkMShlZGl0b3IpO1xuICAgICAgICBpZiAoIWVkaXRvci5oYXNQbHVnaW4oJ3J0YycsIHRydWUpKSB7XG4gICAgICAgICAgc2V0dXAoZWRpdG9yKTtcbiAgICAgICAgICByZWdpc3RlciQyKGVkaXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVnaXN0ZXJEaWFsb2coZWRpdG9yKTtcbiAgICAgICAgfVxuICAgICAgICByZWdpc3RlciQxKGVkaXRvcik7XG4gICAgICAgIHJlZ2lzdGVyKGVkaXRvcik7XG4gICAgICAgIHJldHVybiBnZXQoZWRpdG9yKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBQbHVnaW4oKTtcblxufSkoKTtcbiIsIi8vIEV4cG9ydHMgdGhlIFwidGFibGVcIiBwbHVnaW4gZm9yIHVzYWdlIHdpdGggbW9kdWxlIGxvYWRlcnNcbi8vIFVzYWdlOlxuLy8gICBDb21tb25KUzpcbi8vICAgICByZXF1aXJlKCd0aW55bWNlL3BsdWdpbnMvdGFibGUnKVxuLy8gICBFUzIwMTU6XG4vLyAgICAgaW1wb3J0ICd0aW55bWNlL3BsdWdpbnMvdGFibGUnXG5yZXF1aXJlKCcuL3BsdWdpbi5qcycpOyIsIi8qKlxuICogVGlueU1DRSB2ZXJzaW9uIDYuNy4wICgyMDIzLTA4LTMwKVxuICovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIGdsb2JhbCQzID0gdGlueW1jZS51dGlsLlRvb2xzLnJlc29sdmUoJ3RpbnltY2UuUGx1Z2luTWFuYWdlcicpO1xuXG4gICAgY29uc3QgaGFzUHJvdG8gPSAodiwgY29uc3RydWN0b3IsIHByZWRpY2F0ZSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgaWYgKHByZWRpY2F0ZSh2LCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICgoX2EgPSB2LmNvbnN0cnVjdG9yKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmFtZSkgPT09IGNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB0eXBlT2YgPSB4ID0+IHtcbiAgICAgIGNvbnN0IHQgPSB0eXBlb2YgeDtcbiAgICAgIGlmICh4ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgICB9IGVsc2UgaWYgKHQgPT09ICdvYmplY3QnICYmIEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgICB9IGVsc2UgaWYgKHQgPT09ICdvYmplY3QnICYmIGhhc1Byb3RvKHgsIFN0cmluZywgKG8sIHByb3RvKSA9PiBwcm90by5pc1Byb3RvdHlwZU9mKG8pKSkge1xuICAgICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlzVHlwZSQxID0gdHlwZSA9PiB2YWx1ZSA9PiB0eXBlT2YodmFsdWUpID09PSB0eXBlO1xuICAgIGNvbnN0IGlzU2ltcGxlVHlwZSA9IHR5cGUgPT4gdmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSB0eXBlO1xuICAgIGNvbnN0IGVxJDEgPSB0ID0+IGEgPT4gdCA9PT0gYTtcbiAgICBjb25zdCBpc1N0cmluZyA9IGlzVHlwZSQxKCdzdHJpbmcnKTtcbiAgICBjb25zdCBpc0FycmF5ID0gaXNUeXBlJDEoJ2FycmF5Jyk7XG4gICAgY29uc3QgaXNCb29sZWFuID0gaXNTaW1wbGVUeXBlKCdib29sZWFuJyk7XG4gICAgY29uc3QgaXNVbmRlZmluZWQgPSBlcSQxKHVuZGVmaW5lZCk7XG4gICAgY29uc3QgaXNOdWxsYWJsZSA9IGEgPT4gYSA9PT0gbnVsbCB8fCBhID09PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgaXNOb25OdWxsYWJsZSA9IGEgPT4gIWlzTnVsbGFibGUoYSk7XG4gICAgY29uc3QgaXNGdW5jdGlvbiA9IGlzU2ltcGxlVHlwZSgnZnVuY3Rpb24nKTtcbiAgICBjb25zdCBpc051bWJlciA9IGlzU2ltcGxlVHlwZSgnbnVtYmVyJyk7XG5cbiAgICBjb25zdCBub29wID0gKCkgPT4ge1xuICAgIH07XG4gICAgY29uc3QgY29tcG9zZTEgPSAoZmJjLCBmYWIpID0+IGEgPT4gZmJjKGZhYihhKSk7XG4gICAgY29uc3QgY29uc3RhbnQgPSB2YWx1ZSA9PiB7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgaWRlbnRpdHkgPSB4ID0+IHtcbiAgICAgIHJldHVybiB4O1xuICAgIH07XG4gICAgY29uc3QgdHJpcGxlRXF1YWxzID0gKGEsIGIpID0+IHtcbiAgICAgIHJldHVybiBhID09PSBiO1xuICAgIH07XG4gICAgZnVuY3Rpb24gY3VycnkoZm4sIC4uLmluaXRpYWxBcmdzKSB7XG4gICAgICByZXR1cm4gKC4uLnJlc3RBcmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IGFsbCA9IGluaXRpYWxBcmdzLmNvbmNhdChyZXN0QXJncyk7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhbGwpO1xuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgY2FsbCA9IGYgPT4ge1xuICAgICAgZigpO1xuICAgIH07XG4gICAgY29uc3QgbmV2ZXIgPSBjb25zdGFudChmYWxzZSk7XG4gICAgY29uc3QgYWx3YXlzID0gY29uc3RhbnQodHJ1ZSk7XG5cbiAgICBjbGFzcyBPcHRpb25hbCB7XG4gICAgICBjb25zdHJ1Y3Rvcih0YWcsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMudGFnID0gdGFnO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgICBzdGF0aWMgc29tZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IE9wdGlvbmFsKHRydWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHN0YXRpYyBub25lKCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc2luZ2xldG9uTm9uZTtcbiAgICAgIH1cbiAgICAgIGZvbGQob25Ob25lLCBvblNvbWUpIHtcbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgcmV0dXJuIG9uU29tZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb25Ob25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlzU29tZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnO1xuICAgICAgfVxuICAgICAgaXNOb25lKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudGFnO1xuICAgICAgfVxuICAgICAgbWFwKG1hcHBlcikge1xuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShtYXBwZXIodGhpcy52YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJpbmQoYmluZGVyKSB7XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgIHJldHVybiBiaW5kZXIodGhpcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXhpc3RzKHByZWRpY2F0ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgJiYgcHJlZGljYXRlKHRoaXMudmFsdWUpO1xuICAgICAgfVxuICAgICAgZm9yYWxsKHByZWRpY2F0ZSkge1xuICAgICAgICByZXR1cm4gIXRoaXMudGFnIHx8IHByZWRpY2F0ZSh0aGlzLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZpbHRlcihwcmVkaWNhdGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhZyB8fCBwcmVkaWNhdGUodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBnZXRPcihyZXBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzLnZhbHVlIDogcmVwbGFjZW1lbnQ7XG4gICAgICB9XG4gICAgICBvcihyZXBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzIDogcmVwbGFjZW1lbnQ7XG4gICAgICB9XG4gICAgICBnZXRPclRodW5rKHRodW5rKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMudmFsdWUgOiB0aHVuaygpO1xuICAgICAgfVxuICAgICAgb3JUaHVuayh0aHVuaykge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzIDogdGh1bmsoKTtcbiAgICAgIH1cbiAgICAgIGdldE9yRGllKG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhZykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlICE9PSBudWxsICYmIG1lc3NhZ2UgIT09IHZvaWQgMCA/IG1lc3NhZ2UgOiAnQ2FsbGVkIGdldE9yRGllIG9uIE5vbmUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RhdGljIGZyb20odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUodmFsdWUpID8gT3B0aW9uYWwuc29tZSh2YWx1ZSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICBnZXRPck51bGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMudmFsdWUgOiBudWxsO1xuICAgICAgfVxuICAgICAgZ2V0T3JVbmRlZmluZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgICAgfVxuICAgICAgZWFjaCh3b3JrZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgd29ya2VyKHRoaXMudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0b0FycmF5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyBbdGhpcy52YWx1ZV0gOiBbXTtcbiAgICAgIH1cbiAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyBgc29tZSgkeyB0aGlzLnZhbHVlIH0pYCA6ICdub25lKCknO1xuICAgICAgfVxuICAgIH1cbiAgICBPcHRpb25hbC5zaW5nbGV0b25Ob25lID0gbmV3IE9wdGlvbmFsKGZhbHNlKTtcblxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cztcbiAgICBjb25zdCBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5oYXNPd25Qcm9wZXJ0eTtcbiAgICBjb25zdCBlYWNoJDEgPSAob2JqLCBmKSA9PiB7XG4gICAgICBjb25zdCBwcm9wcyA9IGtleXMob2JqKTtcbiAgICAgIGZvciAobGV0IGsgPSAwLCBsZW4gPSBwcm9wcy5sZW5ndGg7IGsgPCBsZW47IGsrKykge1xuICAgICAgICBjb25zdCBpID0gcHJvcHNba107XG4gICAgICAgIGNvbnN0IHggPSBvYmpbaV07XG4gICAgICAgIGYoeCwgaSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBvYmpBY2MgPSByID0+ICh4LCBpKSA9PiB7XG4gICAgICByW2ldID0geDtcbiAgICB9O1xuICAgIGNvbnN0IGludGVybmFsRmlsdGVyID0gKG9iaiwgcHJlZCwgb25UcnVlLCBvbkZhbHNlKSA9PiB7XG4gICAgICBlYWNoJDEob2JqLCAoeCwgaSkgPT4ge1xuICAgICAgICAocHJlZCh4LCBpKSA/IG9uVHJ1ZSA6IG9uRmFsc2UpKHgsIGkpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXIkMSA9IChvYmosIHByZWQpID0+IHtcbiAgICAgIGNvbnN0IHQgPSB7fTtcbiAgICAgIGludGVybmFsRmlsdGVyKG9iaiwgcHJlZCwgb2JqQWNjKHQpLCBub29wKTtcbiAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgY29uc3QgbWFwVG9BcnJheSA9IChvYmosIGYpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgIGVhY2gkMShvYmosICh2YWx1ZSwgbmFtZSkgPT4ge1xuICAgICAgICByLnB1c2goZih2YWx1ZSwgbmFtZSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IHZhbHVlcyA9IG9iaiA9PiB7XG4gICAgICByZXR1cm4gbWFwVG9BcnJheShvYmosIGlkZW50aXR5KTtcbiAgICB9O1xuICAgIGNvbnN0IHNpemUgPSBvYmogPT4ge1xuICAgICAgcmV0dXJuIGtleXMob2JqKS5sZW5ndGg7XG4gICAgfTtcbiAgICBjb25zdCBnZXQkNCA9IChvYmosIGtleSkgPT4ge1xuICAgICAgcmV0dXJuIGhhcyhvYmosIGtleSkgPyBPcHRpb25hbC5mcm9tKG9ialtrZXldKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGhhcyA9IChvYmosIGtleSkgPT4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG4gICAgY29uc3QgaGFzTm9uTnVsbGFibGVLZXkgPSAob2JqLCBrZXkpID0+IGhhcyhvYmosIGtleSkgJiYgb2JqW2tleV0gIT09IHVuZGVmaW5lZCAmJiBvYmpba2V5XSAhPT0gbnVsbDtcbiAgICBjb25zdCBpc0VtcHR5JDEgPSByID0+IHtcbiAgICAgIGZvciAoY29uc3QgeCBpbiByKSB7XG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIHgpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgY29uc3QgbmF0aXZlSW5kZXhPZiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mO1xuICAgIGNvbnN0IG5hdGl2ZVB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaDtcbiAgICBjb25zdCByYXdJbmRleE9mID0gKHRzLCB0KSA9PiBuYXRpdmVJbmRleE9mLmNhbGwodHMsIHQpO1xuICAgIGNvbnN0IGNvbnRhaW5zID0gKHhzLCB4KSA9PiByYXdJbmRleE9mKHhzLCB4KSA+IC0xO1xuICAgIGNvbnN0IGV4aXN0cyA9ICh4cywgcHJlZCkgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgaWYgKHByZWQoeCwgaSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgY29uc3QgcmFuZ2UgPSAobnVtLCBmKSA9PiB7XG4gICAgICBjb25zdCByID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bTsgaSsrKSB7XG4gICAgICAgIHIucHVzaChmKGkpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3QgbWFwID0gKHhzLCBmKSA9PiB7XG4gICAgICBjb25zdCBsZW4gPSB4cy5sZW5ndGg7XG4gICAgICBjb25zdCByID0gbmV3IEFycmF5KGxlbik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgcltpXSA9IGYoeCwgaSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IGVhY2ggPSAoeHMsIGYpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGYoeCwgaSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBlYWNociA9ICh4cywgZikgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IHhzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgZih4LCBpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHBhcnRpdGlvbiA9ICh4cywgcHJlZCkgPT4ge1xuICAgICAgY29uc3QgcGFzcyA9IFtdO1xuICAgICAgY29uc3QgZmFpbCA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgY29uc3QgYXJyID0gcHJlZCh4LCBpKSA/IHBhc3MgOiBmYWlsO1xuICAgICAgICBhcnIucHVzaCh4KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhc3MsXG4gICAgICAgIGZhaWxcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXIgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpKSB7XG4gICAgICAgICAgci5wdXNoKHgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IGZvbGRyID0gKHhzLCBmLCBhY2MpID0+IHtcbiAgICAgIGVhY2hyKHhzLCAoeCwgaSkgPT4ge1xuICAgICAgICBhY2MgPSBmKGFjYywgeCwgaSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfTtcbiAgICBjb25zdCBmb2xkbCA9ICh4cywgZiwgYWNjKSA9PiB7XG4gICAgICBlYWNoKHhzLCAoeCwgaSkgPT4ge1xuICAgICAgICBhY2MgPSBmKGFjYywgeCwgaSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kVW50aWwgPSAoeHMsIHByZWQsIHVudGlsKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0geHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgeCA9IHhzW2ldO1xuICAgICAgICBpZiAocHJlZCh4LCBpKSkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHgpO1xuICAgICAgICB9IGVsc2UgaWYgKHVudGlsKHgsIGkpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kID0gKHhzLCBwcmVkKSA9PiB7XG4gICAgICByZXR1cm4gZmluZFVudGlsKHhzLCBwcmVkLCBuZXZlcik7XG4gICAgfTtcbiAgICBjb25zdCBmbGF0dGVuJDEgPSB4cyA9PiB7XG4gICAgICBjb25zdCByID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0geHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgaWYgKCFpc0FycmF5KHhzW2ldKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXJyLmZsYXR0ZW4gaXRlbSAnICsgaSArICcgd2FzIG5vdCBhbiBhcnJheSwgaW5wdXQ6ICcgKyB4cyk7XG4gICAgICAgIH1cbiAgICAgICAgbmF0aXZlUHVzaC5hcHBseShyLCB4c1tpXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IGJpbmQgPSAoeHMsIGYpID0+IGZsYXR0ZW4kMShtYXAoeHMsIGYpKTtcbiAgICBjb25zdCBmb3JhbGwgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpICE9PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIGNvbnN0IG1hcFRvT2JqZWN0ID0gKHhzLCBmKSA9PiB7XG4gICAgICBjb25zdCByID0ge307XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0geHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgeCA9IHhzW2ldO1xuICAgICAgICByW1N0cmluZyh4KV0gPSBmKHgsIGkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBnZXQkMyA9ICh4cywgaSkgPT4gaSA+PSAwICYmIGkgPCB4cy5sZW5ndGggPyBPcHRpb25hbC5zb21lKHhzW2ldKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICBjb25zdCBoZWFkID0geHMgPT4gZ2V0JDMoeHMsIDApO1xuICAgIGNvbnN0IGxhc3QgPSB4cyA9PiBnZXQkMyh4cywgeHMubGVuZ3RoIC0gMSk7XG4gICAgY29uc3QgZmluZE1hcCA9IChhcnIsIGYpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHIgPSBmKGFycltpXSwgaSk7XG4gICAgICAgIGlmIChyLmlzU29tZSgpKSB7XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IENPTU1FTlQgPSA4O1xuICAgIGNvbnN0IERPQ1VNRU5UID0gOTtcbiAgICBjb25zdCBET0NVTUVOVF9GUkFHTUVOVCA9IDExO1xuICAgIGNvbnN0IEVMRU1FTlQgPSAxO1xuICAgIGNvbnN0IFRFWFQgPSAzO1xuXG4gICAgY29uc3QgZnJvbUh0bWwgPSAoaHRtbCwgc2NvcGUpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IHNjb3BlIHx8IGRvY3VtZW50O1xuICAgICAgY29uc3QgZGl2ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZGl2LmlubmVySFRNTCA9IGh0bWw7XG4gICAgICBpZiAoIWRpdi5oYXNDaGlsZE5vZGVzKCkgfHwgZGl2LmNoaWxkTm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gJ0hUTUwgZG9lcyBub3QgaGF2ZSBhIHNpbmdsZSByb290IG5vZGUnO1xuICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UsIGh0bWwpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnJvbURvbSQxKGRpdi5jaGlsZE5vZGVzWzBdKTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21UYWcgPSAodGFnLCBzY29wZSkgPT4ge1xuICAgICAgY29uc3QgZG9jID0gc2NvcGUgfHwgZG9jdW1lbnQ7XG4gICAgICBjb25zdCBub2RlID0gZG9jLmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgICAgIHJldHVybiBmcm9tRG9tJDEobm9kZSk7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tVGV4dCA9ICh0ZXh0LCBzY29wZSkgPT4ge1xuICAgICAgY29uc3QgZG9jID0gc2NvcGUgfHwgZG9jdW1lbnQ7XG4gICAgICBjb25zdCBub2RlID0gZG9jLmNyZWF0ZVRleHROb2RlKHRleHQpO1xuICAgICAgcmV0dXJuIGZyb21Eb20kMShub2RlKTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21Eb20kMSA9IG5vZGUgPT4ge1xuICAgICAgaWYgKG5vZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm9kZSBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGRvbTogbm9kZSB9O1xuICAgIH07XG4gICAgY29uc3QgZnJvbVBvaW50ID0gKGRvY0VsbSwgeCwgeSkgPT4gT3B0aW9uYWwuZnJvbShkb2NFbG0uZG9tLmVsZW1lbnRGcm9tUG9pbnQoeCwgeSkpLm1hcChmcm9tRG9tJDEpO1xuICAgIGNvbnN0IFN1Z2FyRWxlbWVudCA9IHtcbiAgICAgIGZyb21IdG1sLFxuICAgICAgZnJvbVRhZyxcbiAgICAgIGZyb21UZXh0LFxuICAgICAgZnJvbURvbTogZnJvbURvbSQxLFxuICAgICAgZnJvbVBvaW50XG4gICAgfTtcblxuICAgIGNvbnN0IGlzJDIgPSAoZWxlbWVudCwgc2VsZWN0b3IpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgaWYgKGRvbS5ub2RlVHlwZSAhPT0gRUxFTUVOVCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlbGVtID0gZG9tO1xuICAgICAgICBpZiAoZWxlbS5tYXRjaGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbS5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtLm1zTWF0Y2hlc1NlbGVjdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbS5tc01hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBlbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBlbGVtLm1vek1hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdCcm93c2VyIGxhY2tzIG5hdGl2ZSBzZWxlY3RvcnMnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYnlwYXNzU2VsZWN0b3IgPSBkb20gPT4gZG9tLm5vZGVUeXBlICE9PSBFTEVNRU5UICYmIGRvbS5ub2RlVHlwZSAhPT0gRE9DVU1FTlQgJiYgZG9tLm5vZGVUeXBlICE9PSBET0NVTUVOVF9GUkFHTUVOVCB8fCBkb20uY2hpbGRFbGVtZW50Q291bnQgPT09IDA7XG4gICAgY29uc3QgYWxsJDEgPSAoc2VsZWN0b3IsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBiYXNlID0gc2NvcGUgPT09IHVuZGVmaW5lZCA/IGRvY3VtZW50IDogc2NvcGUuZG9tO1xuICAgICAgcmV0dXJuIGJ5cGFzc1NlbGVjdG9yKGJhc2UpID8gW10gOiBtYXAoYmFzZS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSwgU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIH07XG4gICAgY29uc3Qgb25lID0gKHNlbGVjdG9yLCBzY29wZSkgPT4ge1xuICAgICAgY29uc3QgYmFzZSA9IHNjb3BlID09PSB1bmRlZmluZWQgPyBkb2N1bWVudCA6IHNjb3BlLmRvbTtcbiAgICAgIHJldHVybiBieXBhc3NTZWxlY3RvcihiYXNlKSA/IE9wdGlvbmFsLm5vbmUoKSA6IE9wdGlvbmFsLmZyb20oYmFzZS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZXEgPSAoZTEsIGUyKSA9PiBlMS5kb20gPT09IGUyLmRvbTtcbiAgICBjb25zdCBpcyQxID0gaXMkMjtcblxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogRnVuY3Rpb24oJ3JldHVybiB0aGlzOycpKCk7XG5cbiAgICBjb25zdCBuYW1lID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCByID0gZWxlbWVudC5kb20ubm9kZU5hbWU7XG4gICAgICByZXR1cm4gci50b0xvd2VyQ2FzZSgpO1xuICAgIH07XG4gICAgY29uc3QgdHlwZSA9IGVsZW1lbnQgPT4gZWxlbWVudC5kb20ubm9kZVR5cGU7XG4gICAgY29uc3QgaXNUeXBlID0gdCA9PiBlbGVtZW50ID0+IHR5cGUoZWxlbWVudCkgPT09IHQ7XG4gICAgY29uc3QgaXNDb21tZW50ID0gZWxlbWVudCA9PiB0eXBlKGVsZW1lbnQpID09PSBDT01NRU5UIHx8IG5hbWUoZWxlbWVudCkgPT09ICcjY29tbWVudCc7XG4gICAgY29uc3QgaXNFbGVtZW50ID0gaXNUeXBlKEVMRU1FTlQpO1xuICAgIGNvbnN0IGlzVGV4dCA9IGlzVHlwZShURVhUKTtcbiAgICBjb25zdCBpc0RvY3VtZW50ID0gaXNUeXBlKERPQ1VNRU5UKTtcbiAgICBjb25zdCBpc0RvY3VtZW50RnJhZ21lbnQgPSBpc1R5cGUoRE9DVU1FTlRfRlJBR01FTlQpO1xuICAgIGNvbnN0IGlzVGFnID0gdGFnID0+IGUgPT4gaXNFbGVtZW50KGUpICYmIG5hbWUoZSkgPT09IHRhZztcblxuICAgIGNvbnN0IG93bmVyID0gZWxlbWVudCA9PiBTdWdhckVsZW1lbnQuZnJvbURvbShlbGVtZW50LmRvbS5vd25lckRvY3VtZW50KTtcbiAgICBjb25zdCBkb2N1bWVudE9yT3duZXIgPSBkb3MgPT4gaXNEb2N1bWVudChkb3MpID8gZG9zIDogb3duZXIoZG9zKTtcbiAgICBjb25zdCBwYXJlbnQgPSBlbGVtZW50ID0+IE9wdGlvbmFsLmZyb20oZWxlbWVudC5kb20ucGFyZW50Tm9kZSkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBwYXJlbnRzID0gKGVsZW1lbnQsIGlzUm9vdCkgPT4ge1xuICAgICAgY29uc3Qgc3RvcCA9IGlzRnVuY3Rpb24oaXNSb290KSA/IGlzUm9vdCA6IG5ldmVyO1xuICAgICAgbGV0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgY29uc3QgcmV0ID0gW107XG4gICAgICB3aGlsZSAoZG9tLnBhcmVudE5vZGUgIT09IG51bGwgJiYgZG9tLnBhcmVudE5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCByYXdQYXJlbnQgPSBkb20ucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgcCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJhd1BhcmVudCk7XG4gICAgICAgIHJldC5wdXNoKHApO1xuICAgICAgICBpZiAoc3RvcChwKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbSA9IHJhd1BhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9O1xuICAgIGNvbnN0IHByZXZTaWJsaW5nID0gZWxlbWVudCA9PiBPcHRpb25hbC5mcm9tKGVsZW1lbnQuZG9tLnByZXZpb3VzU2libGluZykubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBuZXh0U2libGluZyA9IGVsZW1lbnQgPT4gT3B0aW9uYWwuZnJvbShlbGVtZW50LmRvbS5uZXh0U2libGluZykubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBjaGlsZHJlbiQzID0gZWxlbWVudCA9PiBtYXAoZWxlbWVudC5kb20uY2hpbGROb2RlcywgU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIGNvbnN0IGNoaWxkJDMgPSAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGNzID0gZWxlbWVudC5kb20uY2hpbGROb2RlcztcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKGNzW2luZGV4XSkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSBlbGVtZW50ID0+IGNoaWxkJDMoZWxlbWVudCwgMCk7XG5cbiAgICBjb25zdCBpc1NoYWRvd1Jvb3QgPSBkb3MgPT4gaXNEb2N1bWVudEZyYWdtZW50KGRvcykgJiYgaXNOb25OdWxsYWJsZShkb3MuZG9tLmhvc3QpO1xuICAgIGNvbnN0IHN1cHBvcnRlZCA9IGlzRnVuY3Rpb24oRWxlbWVudC5wcm90b3R5cGUuYXR0YWNoU2hhZG93KSAmJiBpc0Z1bmN0aW9uKE5vZGUucHJvdG90eXBlLmdldFJvb3ROb2RlKTtcbiAgICBjb25zdCBnZXRSb290Tm9kZSA9IHN1cHBvcnRlZCA/IGUgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20oZS5kb20uZ2V0Um9vdE5vZGUoKSkgOiBkb2N1bWVudE9yT3duZXI7XG4gICAgY29uc3QgZ2V0U2hhZG93Um9vdCA9IGUgPT4ge1xuICAgICAgY29uc3QgciA9IGdldFJvb3ROb2RlKGUpO1xuICAgICAgcmV0dXJuIGlzU2hhZG93Um9vdChyKSA/IE9wdGlvbmFsLnNvbWUocikgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRTaGFkb3dIb3N0ID0gZSA9PiBTdWdhckVsZW1lbnQuZnJvbURvbShlLmRvbS5ob3N0KTtcblxuICAgIGNvbnN0IGluQm9keSA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgZG9tID0gaXNUZXh0KGVsZW1lbnQpID8gZWxlbWVudC5kb20ucGFyZW50Tm9kZSA6IGVsZW1lbnQuZG9tO1xuICAgICAgaWYgKGRvbSA9PT0gdW5kZWZpbmVkIHx8IGRvbSA9PT0gbnVsbCB8fCBkb20ub3duZXJEb2N1bWVudCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBkb2MgPSBkb20ub3duZXJEb2N1bWVudDtcbiAgICAgIHJldHVybiBnZXRTaGFkb3dSb290KFN1Z2FyRWxlbWVudC5mcm9tRG9tKGRvbSkpLmZvbGQoKCkgPT4gZG9jLmJvZHkuY29udGFpbnMoZG9tKSwgY29tcG9zZTEoaW5Cb2R5LCBnZXRTaGFkb3dIb3N0KSk7XG4gICAgfTtcblxuICAgIHZhciBDbG9zZXN0T3JBbmNlc3RvciA9IChpcywgYW5jZXN0b3IsIHNjb3BlLCBhLCBpc1Jvb3QpID0+IHtcbiAgICAgIGlmIChpcyhzY29wZSwgYSkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoc2NvcGUpO1xuICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKGlzUm9vdCkgJiYgaXNSb290KHNjb3BlKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9yKHNjb3BlLCBhLCBpc1Jvb3QpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBhbmNlc3RvciQxID0gKHNjb3BlLCBwcmVkaWNhdGUsIGlzUm9vdCkgPT4ge1xuICAgICAgbGV0IGVsZW1lbnQgPSBzY29wZS5kb207XG4gICAgICBjb25zdCBzdG9wID0gaXNGdW5jdGlvbihpc1Jvb3QpID8gaXNSb290IDogbmV2ZXI7XG4gICAgICB3aGlsZSAoZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gICAgICAgIGNvbnN0IGVsID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWxlbWVudCk7XG4gICAgICAgIGlmIChwcmVkaWNhdGUoZWwpKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoZWwpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0b3AoZWwpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBjbG9zZXN0JDIgPSAoc2NvcGUsIHByZWRpY2F0ZSwgaXNSb290KSA9PiB7XG4gICAgICBjb25zdCBpcyA9IChzLCB0ZXN0KSA9PiB0ZXN0KHMpO1xuICAgICAgcmV0dXJuIENsb3Nlc3RPckFuY2VzdG9yKGlzLCBhbmNlc3RvciQxLCBzY29wZSwgcHJlZGljYXRlLCBpc1Jvb3QpO1xuICAgIH07XG4gICAgY29uc3QgY2hpbGQkMiA9IChzY29wZSwgcHJlZGljYXRlKSA9PiB7XG4gICAgICBjb25zdCBwcmVkID0gbm9kZSA9PiBwcmVkaWNhdGUoU3VnYXJFbGVtZW50LmZyb21Eb20obm9kZSkpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmluZChzY29wZS5kb20uY2hpbGROb2RlcywgcHJlZCk7XG4gICAgICByZXR1cm4gcmVzdWx0Lm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFuY2VzdG9yID0gKHNjb3BlLCBzZWxlY3RvciwgaXNSb290KSA9PiBhbmNlc3RvciQxKHNjb3BlLCBlID0+IGlzJDIoZSwgc2VsZWN0b3IpLCBpc1Jvb3QpO1xuICAgIGNvbnN0IGNoaWxkJDEgPSAoc2NvcGUsIHNlbGVjdG9yKSA9PiBjaGlsZCQyKHNjb3BlLCBlID0+IGlzJDIoZSwgc2VsZWN0b3IpKTtcbiAgICBjb25zdCBkZXNjZW5kYW50ID0gKHNjb3BlLCBzZWxlY3RvcikgPT4gb25lKHNlbGVjdG9yLCBzY29wZSk7XG4gICAgY29uc3QgY2xvc2VzdCQxID0gKHNjb3BlLCBzZWxlY3RvciwgaXNSb290KSA9PiB7XG4gICAgICBjb25zdCBpcyA9IChlbGVtZW50LCBzZWxlY3RvcikgPT4gaXMkMihlbGVtZW50LCBzZWxlY3Rvcik7XG4gICAgICByZXR1cm4gQ2xvc2VzdE9yQW5jZXN0b3IoaXMsIGFuY2VzdG9yLCBzY29wZSwgc2VsZWN0b3IsIGlzUm9vdCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNsb3Nlc3QgPSB0YXJnZXQgPT4gY2xvc2VzdCQxKHRhcmdldCwgJ1tjb250ZW50ZWRpdGFibGVdJyk7XG4gICAgY29uc3QgaXNFZGl0YWJsZSA9IChlbGVtZW50LCBhc3N1bWVFZGl0YWJsZSA9IGZhbHNlKSA9PiB7XG4gICAgICBpZiAoaW5Cb2R5KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmRvbS5pc0NvbnRlbnRFZGl0YWJsZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjbG9zZXN0KGVsZW1lbnQpLmZvbGQoY29uc3RhbnQoYXNzdW1lRWRpdGFibGUpLCBlZGl0YWJsZSA9PiBnZXRSYXckMShlZGl0YWJsZSkgPT09ICd0cnVlJyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRSYXckMSA9IGVsZW1lbnQgPT4gZWxlbWVudC5kb20uY29udGVudEVkaXRhYmxlO1xuXG4gICAgY29uc3QgZ2V0Tm9kZU5hbWUgPSBlbG0gPT4gZWxtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgZ2V0Qm9keSA9IGVkaXRvciA9PiBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKTtcbiAgICBjb25zdCBnZXRJc1Jvb3QgPSBlZGl0b3IgPT4gZWxlbWVudCA9PiBlcShlbGVtZW50LCBnZXRCb2R5KGVkaXRvcikpO1xuICAgIGNvbnN0IHJlbW92ZVB4U3VmZml4ID0gc2l6ZSA9PiBzaXplID8gc2l6ZS5yZXBsYWNlKC9weCQvLCAnJykgOiAnJztcbiAgICBjb25zdCBhZGRQeFN1ZmZpeCA9IHNpemUgPT4gL15cXGQrKFxcLlxcZCspPyQvLnRlc3Qoc2l6ZSkgPyBzaXplICsgJ3B4JyA6IHNpemU7XG4gICAgY29uc3QgZ2V0U2VsZWN0aW9uU3RhcnQgPSBlZGl0b3IgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCgpKTtcbiAgICBjb25zdCBnZXRTZWxlY3Rpb25FbmQgPSBlZGl0b3IgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLnNlbGVjdGlvbi5nZXRFbmQoKSk7XG4gICAgY29uc3QgaXNJbkVkaXRhYmxlQ29udGV4dCA9IGNlbGwgPT4gY2xvc2VzdCQyKGNlbGwsIGlzVGFnKCd0YWJsZScpKS5mb3JhbGwoaXNFZGl0YWJsZSk7XG5cbiAgICBjb25zdCBjaGlsZHJlbiQyID0gKHNjb3BlLCBwcmVkaWNhdGUpID0+IGZpbHRlcihjaGlsZHJlbiQzKHNjb3BlKSwgcHJlZGljYXRlKTtcbiAgICBjb25zdCBkZXNjZW5kYW50cyQxID0gKHNjb3BlLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgIGVhY2goY2hpbGRyZW4kMyhzY29wZSksIHggPT4ge1xuICAgICAgICBpZiAocHJlZGljYXRlKHgpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChbeF0pO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZGVzY2VuZGFudHMkMSh4LCBwcmVkaWNhdGUpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgY29uc3QgY2hpbGRyZW4kMSA9IChzY29wZSwgc2VsZWN0b3IpID0+IGNoaWxkcmVuJDIoc2NvcGUsIGUgPT4gaXMkMihlLCBzZWxlY3RvcikpO1xuICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gKHNjb3BlLCBzZWxlY3RvcikgPT4gYWxsJDEoc2VsZWN0b3IsIHNjb3BlKTtcblxuICAgIGNvbnN0IHJhd1NldCA9IChkb20sIGtleSwgdmFsdWUpID0+IHtcbiAgICAgIGlmIChpc1N0cmluZyh2YWx1ZSkgfHwgaXNCb29sZWFuKHZhbHVlKSB8fCBpc051bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlICsgJycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBjYWxsIHRvIEF0dHJpYnV0ZS5zZXQuIEtleSAnLCBrZXksICc6OiBWYWx1ZSAnLCB2YWx1ZSwgJzo6IEVsZW1lbnQgJywgZG9tKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRyaWJ1dGUgdmFsdWUgd2FzIG5vdCBzaW1wbGUnKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldCQyID0gKGVsZW1lbnQsIGtleSwgdmFsdWUpID0+IHtcbiAgICAgIHJhd1NldChlbGVtZW50LmRvbSwga2V5LCB2YWx1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRBbGwgPSAoZWxlbWVudCwgYXR0cnMpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgZWFjaCQxKGF0dHJzLCAodiwgaykgPT4ge1xuICAgICAgICByYXdTZXQoZG9tLCBrLCB2KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0JDIgPSAoZWxlbWVudCwga2V5KSA9PiB7XG4gICAgICBjb25zdCB2ID0gZWxlbWVudC5kb20uZ2V0QXR0cmlidXRlKGtleSk7XG4gICAgICByZXR1cm4gdiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHY7XG4gICAgfTtcbiAgICBjb25zdCBnZXRPcHQgPSAoZWxlbWVudCwga2V5KSA9PiBPcHRpb25hbC5mcm9tKGdldCQyKGVsZW1lbnQsIGtleSkpO1xuICAgIGNvbnN0IHJlbW92ZSQyID0gKGVsZW1lbnQsIGtleSkgPT4ge1xuICAgICAgZWxlbWVudC5kb20ucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgfTtcbiAgICBjb25zdCBjbG9uZSA9IGVsZW1lbnQgPT4gZm9sZGwoZWxlbWVudC5kb20uYXR0cmlidXRlcywgKGFjYywgYXR0cikgPT4ge1xuICAgICAgYWNjW2F0dHIubmFtZV0gPSBhdHRyLnZhbHVlO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG5cbiAgICBjb25zdCBpcyA9IChsaHMsIHJocywgY29tcGFyYXRvciA9IHRyaXBsZUVxdWFscykgPT4gbGhzLmV4aXN0cyhsZWZ0ID0+IGNvbXBhcmF0b3IobGVmdCwgcmhzKSk7XG4gICAgY29uc3QgY2F0ID0gYXJyID0+IHtcbiAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgIGNvbnN0IHB1c2ggPSB4ID0+IHtcbiAgICAgICAgci5wdXNoKHgpO1xuICAgICAgfTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFycltpXS5lYWNoKHB1c2gpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBsaWZ0MiA9IChvYSwgb2IsIGYpID0+IG9hLmlzU29tZSgpICYmIG9iLmlzU29tZSgpID8gT3B0aW9uYWwuc29tZShmKG9hLmdldE9yRGllKCksIG9iLmdldE9yRGllKCkpKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICBjb25zdCBmbGF0dGVuID0gb290ID0+IG9vdC5iaW5kKGlkZW50aXR5KTtcbiAgICBjb25zdCBzb21lSWYgPSAoYiwgYSkgPT4gYiA/IE9wdGlvbmFsLnNvbWUoYSkgOiBPcHRpb25hbC5ub25lKCk7XG5cbiAgICBjb25zdCByZW1vdmVGcm9tU3RhcnQgPSAoc3RyLCBudW1DaGFycykgPT4ge1xuICAgICAgcmV0dXJuIHN0ci5zdWJzdHJpbmcobnVtQ2hhcnMpO1xuICAgIH07XG5cbiAgICBjb25zdCBjaGVja1JhbmdlID0gKHN0ciwgc3Vic3RyLCBzdGFydCkgPT4gc3Vic3RyID09PSAnJyB8fCBzdHIubGVuZ3RoID49IHN1YnN0ci5sZW5ndGggJiYgc3RyLnN1YnN0cihzdGFydCwgc3RhcnQgKyBzdWJzdHIubGVuZ3RoKSA9PT0gc3Vic3RyO1xuICAgIGNvbnN0IHJlbW92ZUxlYWRpbmcgPSAoc3RyLCBwcmVmaXgpID0+IHtcbiAgICAgIHJldHVybiBzdGFydHNXaXRoKHN0ciwgcHJlZml4KSA/IHJlbW92ZUZyb21TdGFydChzdHIsIHByZWZpeC5sZW5ndGgpIDogc3RyO1xuICAgIH07XG4gICAgY29uc3Qgc3RhcnRzV2l0aCA9IChzdHIsIHByZWZpeCkgPT4ge1xuICAgICAgcmV0dXJuIGNoZWNrUmFuZ2Uoc3RyLCBwcmVmaXgsIDApO1xuICAgIH07XG4gICAgY29uc3QgYmxhbmsgPSByID0+IHMgPT4gcy5yZXBsYWNlKHIsICcnKTtcbiAgICBjb25zdCB0cmltID0gYmxhbmsoL15cXHMrfFxccyskL2cpO1xuICAgIGNvbnN0IGlzTm90RW1wdHkgPSBzID0+IHMubGVuZ3RoID4gMDtcbiAgICBjb25zdCBpc0VtcHR5ID0gcyA9PiAhaXNOb3RFbXB0eShzKTtcbiAgICBjb25zdCB0b0ludCA9ICh2YWx1ZSwgcmFkaXggPSAxMCkgPT4ge1xuICAgICAgY29uc3QgbnVtID0gcGFyc2VJbnQodmFsdWUsIHJhZGl4KTtcbiAgICAgIHJldHVybiBpc05hTihudW0pID8gT3B0aW9uYWwubm9uZSgpIDogT3B0aW9uYWwuc29tZShudW0pO1xuICAgIH07XG4gICAgY29uc3QgdG9GbG9hdCA9IHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IG51bSA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgcmV0dXJuIGlzTmFOKG51bSkgPyBPcHRpb25hbC5ub25lKCkgOiBPcHRpb25hbC5zb21lKG51bSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzU3VwcG9ydGVkID0gZG9tID0+IGRvbS5zdHlsZSAhPT0gdW5kZWZpbmVkICYmIGlzRnVuY3Rpb24oZG9tLnN0eWxlLmdldFByb3BlcnR5VmFsdWUpO1xuXG4gICAgY29uc3QgaW50ZXJuYWxTZXQgPSAoZG9tLCBwcm9wZXJ0eSwgdmFsdWUpID0+IHtcbiAgICAgIGlmICghaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgY2FsbCB0byBDU1Muc2V0LiBQcm9wZXJ0eSAnLCBwcm9wZXJ0eSwgJzo6IFZhbHVlICcsIHZhbHVlLCAnOjogRWxlbWVudCAnLCBkb20pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NTUyB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nOiAnICsgdmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKGlzU3VwcG9ydGVkKGRvbSkpIHtcbiAgICAgICAgZG9tLnN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbnRlcm5hbFJlbW92ZSA9IChkb20sIHByb3BlcnR5KSA9PiB7XG4gICAgICBpZiAoaXNTdXBwb3J0ZWQoZG9tKSkge1xuICAgICAgICBkb20uc3R5bGUucmVtb3ZlUHJvcGVydHkocHJvcGVydHkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2V0JDEgPSAoZWxlbWVudCwgcHJvcGVydHksIHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGludGVybmFsU2V0KGRvbSwgcHJvcGVydHksIHZhbHVlKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldCQxID0gKGVsZW1lbnQsIHByb3BlcnR5KSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGNvbnN0IHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvbSk7XG4gICAgICBjb25zdCByID0gc3R5bGVzLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpO1xuICAgICAgcmV0dXJuIHIgPT09ICcnICYmICFpbkJvZHkoZWxlbWVudCkgPyBnZXRVbnNhZmVQcm9wZXJ0eShkb20sIHByb3BlcnR5KSA6IHI7XG4gICAgfTtcbiAgICBjb25zdCBnZXRVbnNhZmVQcm9wZXJ0eSA9IChkb20sIHByb3BlcnR5KSA9PiBpc1N1cHBvcnRlZChkb20pID8gZG9tLnN0eWxlLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpIDogJyc7XG4gICAgY29uc3QgZ2V0UmF3ID0gKGVsZW1lbnQsIHByb3BlcnR5KSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGNvbnN0IHJhdyA9IGdldFVuc2FmZVByb3BlcnR5KGRvbSwgcHJvcGVydHkpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20ocmF3KS5maWx0ZXIociA9PiByLmxlbmd0aCA+IDApO1xuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlJDEgPSAoZWxlbWVudCwgcHJvcGVydHkpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgaW50ZXJuYWxSZW1vdmUoZG9tLCBwcm9wZXJ0eSk7XG4gICAgICBpZiAoaXMoZ2V0T3B0KGVsZW1lbnQsICdzdHlsZScpLm1hcCh0cmltKSwgJycpKSB7XG4gICAgICAgIHJlbW92ZSQyKGVsZW1lbnQsICdzdHlsZScpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBnZXRBdHRyVmFsdWUgPSAoY2VsbCwgbmFtZSwgZmFsbGJhY2sgPSAwKSA9PiBnZXRPcHQoY2VsbCwgbmFtZSkubWFwKHZhbHVlID0+IHBhcnNlSW50KHZhbHVlLCAxMCkpLmdldE9yKGZhbGxiYWNrKTtcblxuICAgIGNvbnN0IGZpcnN0TGF5ZXIgPSAoc2NvcGUsIHNlbGVjdG9yKSA9PiB7XG4gICAgICByZXR1cm4gZmlsdGVyRmlyc3RMYXllcihzY29wZSwgc2VsZWN0b3IsIGFsd2F5cyk7XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXJGaXJzdExheWVyID0gKHNjb3BlLCBzZWxlY3RvciwgcHJlZGljYXRlKSA9PiB7XG4gICAgICByZXR1cm4gYmluZChjaGlsZHJlbiQzKHNjb3BlKSwgeCA9PiB7XG4gICAgICAgIGlmIChpcyQyKHgsIHNlbGVjdG9yKSkge1xuICAgICAgICAgIHJldHVybiBwcmVkaWNhdGUoeCkgPyBbeF0gOiBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmlsdGVyRmlyc3RMYXllcih4LCBzZWxlY3RvciwgcHJlZGljYXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHZhbGlkU2VjdGlvbkxpc3QgPSBbXG4gICAgICAndGZvb3QnLFxuICAgICAgJ3RoZWFkJyxcbiAgICAgICd0Ym9keScsXG4gICAgICAnY29sZ3JvdXAnXG4gICAgXTtcbiAgICBjb25zdCBpc1ZhbGlkU2VjdGlvbiA9IHBhcmVudE5hbWUgPT4gY29udGFpbnModmFsaWRTZWN0aW9uTGlzdCwgcGFyZW50TmFtZSk7XG4gICAgY29uc3QgZ3JpZCA9IChyb3dzLCBjb2x1bW5zKSA9PiAoe1xuICAgICAgcm93cyxcbiAgICAgIGNvbHVtbnNcbiAgICB9KTtcbiAgICBjb25zdCBkZXRhaWwgPSAoZWxlbWVudCwgcm93c3BhbiwgY29sc3BhbikgPT4gKHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICByb3dzcGFuLFxuICAgICAgY29sc3BhblxuICAgIH0pO1xuICAgIGNvbnN0IGV4dGVuZGVkID0gKGVsZW1lbnQsIHJvd3NwYW4sIGNvbHNwYW4sIHJvdywgY29sdW1uLCBpc0xvY2tlZCkgPT4gKHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICByb3dzcGFuLFxuICAgICAgY29sc3BhbixcbiAgICAgIHJvdyxcbiAgICAgIGNvbHVtbixcbiAgICAgIGlzTG9ja2VkXG4gICAgfSk7XG4gICAgY29uc3Qgcm93ZGV0YWlsID0gKGVsZW1lbnQsIGNlbGxzLCBzZWN0aW9uKSA9PiAoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIGNlbGxzLFxuICAgICAgc2VjdGlvblxuICAgIH0pO1xuICAgIGNvbnN0IGJvdW5kcyA9IChzdGFydFJvdywgc3RhcnRDb2wsIGZpbmlzaFJvdywgZmluaXNoQ29sKSA9PiAoe1xuICAgICAgc3RhcnRSb3csXG4gICAgICBzdGFydENvbCxcbiAgICAgIGZpbmlzaFJvdyxcbiAgICAgIGZpbmlzaENvbFxuICAgIH0pO1xuICAgIGNvbnN0IGNvbHVtbmV4dCA9IChlbGVtZW50LCBjb2xzcGFuLCBjb2x1bW4pID0+ICh7XG4gICAgICBlbGVtZW50LFxuICAgICAgY29sc3BhbixcbiAgICAgIGNvbHVtblxuICAgIH0pO1xuICAgIGNvbnN0IGNvbGdyb3VwID0gKGVsZW1lbnQsIGNvbHVtbnMpID0+ICh7XG4gICAgICBlbGVtZW50LFxuICAgICAgY29sdW1uc1xuICAgIH0pO1xuXG4gICAgY29uc3QgbG9va3VwID0gKHRhZ3MsIGVsZW1lbnQsIGlzUm9vdCA9IG5ldmVyKSA9PiB7XG4gICAgICBpZiAoaXNSb290KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICBpZiAoY29udGFpbnModGFncywgbmFtZShlbGVtZW50KSkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoZWxlbWVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBpc1Jvb3RPclVwcGVyVGFibGUgPSBlbG0gPT4gaXMkMihlbG0sICd0YWJsZScpIHx8IGlzUm9vdChlbG0pO1xuICAgICAgcmV0dXJuIGFuY2VzdG9yKGVsZW1lbnQsIHRhZ3Muam9pbignLCcpLCBpc1Jvb3RPclVwcGVyVGFibGUpO1xuICAgIH07XG4gICAgY29uc3QgY2VsbCA9IChlbGVtZW50LCBpc1Jvb3QpID0+IGxvb2t1cChbXG4gICAgICAndGQnLFxuICAgICAgJ3RoJ1xuICAgIF0sIGVsZW1lbnQsIGlzUm9vdCk7XG4gICAgY29uc3QgY2VsbHMgPSBhbmNlc3RvciA9PiBmaXJzdExheWVyKGFuY2VzdG9yLCAndGgsdGQnKTtcbiAgICBjb25zdCBjb2x1bW5zID0gYW5jZXN0b3IgPT4ge1xuICAgICAgaWYgKGlzJDIoYW5jZXN0b3IsICdjb2xncm91cCcpKSB7XG4gICAgICAgIHJldHVybiBjaGlsZHJlbiQxKGFuY2VzdG9yLCAnY29sJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYmluZChjb2x1bW5Hcm91cHMoYW5jZXN0b3IpLCBjb2x1bW5Hcm91cCA9PiBjaGlsZHJlbiQxKGNvbHVtbkdyb3VwLCAnY29sJykpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdGFibGUgPSAoZWxlbWVudCwgaXNSb290KSA9PiBjbG9zZXN0JDEoZWxlbWVudCwgJ3RhYmxlJywgaXNSb290KTtcbiAgICBjb25zdCByb3dzID0gYW5jZXN0b3IgPT4gZmlyc3RMYXllcihhbmNlc3RvciwgJ3RyJyk7XG4gICAgY29uc3QgY29sdW1uR3JvdXBzID0gYW5jZXN0b3IgPT4gdGFibGUoYW5jZXN0b3IpLmZvbGQoY29uc3RhbnQoW10pLCB0YWJsZSA9PiBjaGlsZHJlbiQxKHRhYmxlLCAnY29sZ3JvdXAnKSk7XG5cbiAgICBjb25zdCBmcm9tUm93c09yQ29sR3JvdXBzID0gKGVsZW1zLCBnZXRTZWN0aW9uKSA9PiBtYXAoZWxlbXMsIHJvdyA9PiB7XG4gICAgICBpZiAobmFtZShyb3cpID09PSAnY29sZ3JvdXAnKSB7XG4gICAgICAgIGNvbnN0IGNlbGxzID0gbWFwKGNvbHVtbnMocm93KSwgY29sdW1uID0+IHtcbiAgICAgICAgICBjb25zdCBjb2xzcGFuID0gZ2V0QXR0clZhbHVlKGNvbHVtbiwgJ3NwYW4nLCAxKTtcbiAgICAgICAgICByZXR1cm4gZGV0YWlsKGNvbHVtbiwgMSwgY29sc3Bhbik7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcm93ZGV0YWlsKHJvdywgY2VsbHMsICdjb2xncm91cCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2VsbHMkMSA9IG1hcChjZWxscyhyb3cpLCBjZWxsID0+IHtcbiAgICAgICAgICBjb25zdCByb3dzcGFuID0gZ2V0QXR0clZhbHVlKGNlbGwsICdyb3dzcGFuJywgMSk7XG4gICAgICAgICAgY29uc3QgY29sc3BhbiA9IGdldEF0dHJWYWx1ZShjZWxsLCAnY29sc3BhbicsIDEpO1xuICAgICAgICAgIHJldHVybiBkZXRhaWwoY2VsbCwgcm93c3BhbiwgY29sc3Bhbik7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcm93ZGV0YWlsKHJvdywgY2VsbHMkMSwgZ2V0U2VjdGlvbihyb3cpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBnZXRQYXJlbnRTZWN0aW9uID0gZ3JvdXAgPT4gcGFyZW50KGdyb3VwKS5tYXAocGFyZW50ID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudE5hbWUgPSBuYW1lKHBhcmVudCk7XG4gICAgICByZXR1cm4gaXNWYWxpZFNlY3Rpb24ocGFyZW50TmFtZSkgPyBwYXJlbnROYW1lIDogJ3Rib2R5JztcbiAgICB9KS5nZXRPcigndGJvZHknKTtcbiAgICBjb25zdCBmcm9tVGFibGUkMSA9IHRhYmxlID0+IHtcbiAgICAgIGNvbnN0IHJvd3MkMSA9IHJvd3ModGFibGUpO1xuICAgICAgY29uc3QgY29sdW1uR3JvdXBzJDEgPSBjb2x1bW5Hcm91cHModGFibGUpO1xuICAgICAgY29uc3QgZWxlbXMgPSBbXG4gICAgICAgIC4uLmNvbHVtbkdyb3VwcyQxLFxuICAgICAgICAuLi5yb3dzJDFcbiAgICAgIF07XG4gICAgICByZXR1cm4gZnJvbVJvd3NPckNvbEdyb3VwcyhlbGVtcywgZ2V0UGFyZW50U2VjdGlvbik7XG4gICAgfTtcblxuICAgIGNvbnN0IExPQ0tFRF9DT0xfQVRUUiA9ICdkYXRhLXNub29rZXItbG9ja2VkLWNvbHMnO1xuICAgIGNvbnN0IGdldExvY2tlZENvbHVtbnNGcm9tVGFibGUgPSB0YWJsZSA9PiBnZXRPcHQodGFibGUsIExPQ0tFRF9DT0xfQVRUUikuYmluZChsb2NrZWRDb2xTdHIgPT4gT3B0aW9uYWwuZnJvbShsb2NrZWRDb2xTdHIubWF0Y2goL1xcZCsvZykpKS5tYXAobG9ja2VkQ29scyA9PiBtYXBUb09iamVjdChsb2NrZWRDb2xzLCBhbHdheXMpKTtcblxuICAgIGNvbnN0IGtleSA9IChyb3csIGNvbHVtbikgPT4ge1xuICAgICAgcmV0dXJuIHJvdyArICcsJyArIGNvbHVtbjtcbiAgICB9O1xuICAgIGNvbnN0IGdldEF0ID0gKHdhcmVob3VzZSwgcm93LCBjb2x1bW4pID0+IE9wdGlvbmFsLmZyb20od2FyZWhvdXNlLmFjY2Vzc1trZXkocm93LCBjb2x1bW4pXSk7XG4gICAgY29uc3QgZmluZEl0ZW0gPSAod2FyZWhvdXNlLCBpdGVtLCBjb21wYXJhdG9yKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IGZpbHRlckl0ZW1zKHdhcmVob3VzZSwgZGV0YWlsID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmF0b3IoaXRlbSwgZGV0YWlsLmVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmlsdGVyZWQubGVuZ3RoID4gMCA/IE9wdGlvbmFsLnNvbWUoZmlsdGVyZWRbMF0pIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgZmlsdGVySXRlbXMgPSAod2FyZWhvdXNlLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGNvbnN0IGFsbCA9IGJpbmQod2FyZWhvdXNlLmFsbCwgciA9PiB7XG4gICAgICAgIHJldHVybiByLmNlbGxzO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmlsdGVyKGFsbCwgcHJlZGljYXRlKTtcbiAgICB9O1xuICAgIGNvbnN0IGdlbmVyYXRlQ29sdW1ucyA9IHJvd0RhdGEgPT4ge1xuICAgICAgY29uc3QgY29sdW1uc0dyb3VwID0ge307XG4gICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgZWFjaChyb3dEYXRhLmNlbGxzLCBjb2x1bW4gPT4ge1xuICAgICAgICBjb25zdCBjb2xzcGFuID0gY29sdW1uLmNvbHNwYW47XG4gICAgICAgIHJhbmdlKGNvbHNwYW4sIGNvbHVtbkluZGV4ID0+IHtcbiAgICAgICAgICBjb25zdCBjb2xJbmRleCA9IGluZGV4ICsgY29sdW1uSW5kZXg7XG4gICAgICAgICAgY29sdW1uc0dyb3VwW2NvbEluZGV4XSA9IGNvbHVtbmV4dChjb2x1bW4uZWxlbWVudCwgY29sc3BhbiwgY29sSW5kZXgpO1xuICAgICAgICB9KTtcbiAgICAgICAgaW5kZXggKz0gY29sc3BhbjtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNvbHVtbnNHcm91cDtcbiAgICB9O1xuICAgIGNvbnN0IGdlbmVyYXRlJDEgPSBsaXN0ID0+IHtcbiAgICAgIGNvbnN0IGFjY2VzcyA9IHt9O1xuICAgICAgY29uc3QgY2VsbHMgPSBbXTtcbiAgICAgIGNvbnN0IHRhYmxlT3B0ID0gaGVhZChsaXN0KS5tYXAocm93RGF0YSA9PiByb3dEYXRhLmVsZW1lbnQpLmJpbmQodGFibGUpO1xuICAgICAgY29uc3QgbG9ja2VkQ29sdW1ucyA9IHRhYmxlT3B0LmJpbmQoZ2V0TG9ja2VkQ29sdW1uc0Zyb21UYWJsZSkuZ2V0T3Ioe30pO1xuICAgICAgbGV0IG1heFJvd3MgPSAwO1xuICAgICAgbGV0IG1heENvbHVtbnMgPSAwO1xuICAgICAgbGV0IHJvd0NvdW50ID0gMDtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGFzczogY29sZ3JvdXBSb3dzLFxuICAgICAgICBmYWlsOiByb3dzXG4gICAgICB9ID0gcGFydGl0aW9uKGxpc3QsIHJvd0RhdGEgPT4gcm93RGF0YS5zZWN0aW9uID09PSAnY29sZ3JvdXAnKTtcbiAgICAgIGVhY2gocm93cywgcm93RGF0YSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSb3cgPSBbXTtcbiAgICAgICAgZWFjaChyb3dEYXRhLmNlbGxzLCByb3dDZWxsID0+IHtcbiAgICAgICAgICBsZXQgc3RhcnQgPSAwO1xuICAgICAgICAgIHdoaWxlIChhY2Nlc3Nba2V5KHJvd0NvdW50LCBzdGFydCldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0YXJ0Kys7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGlzTG9ja2VkID0gaGFzTm9uTnVsbGFibGVLZXkobG9ja2VkQ29sdW1ucywgc3RhcnQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgY29uc3QgY3VycmVudCA9IGV4dGVuZGVkKHJvd0NlbGwuZWxlbWVudCwgcm93Q2VsbC5yb3dzcGFuLCByb3dDZWxsLmNvbHNwYW4sIHJvd0NvdW50LCBzdGFydCwgaXNMb2NrZWQpO1xuICAgICAgICAgIGZvciAobGV0IG9jY3VwaWVkQ29sdW1uUG9zaXRpb24gPSAwOyBvY2N1cGllZENvbHVtblBvc2l0aW9uIDwgcm93Q2VsbC5jb2xzcGFuOyBvY2N1cGllZENvbHVtblBvc2l0aW9uKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IG9jY3VwaWVkUm93UG9zaXRpb24gPSAwOyBvY2N1cGllZFJvd1Bvc2l0aW9uIDwgcm93Q2VsbC5yb3dzcGFuOyBvY2N1cGllZFJvd1Bvc2l0aW9uKyspIHtcbiAgICAgICAgICAgICAgY29uc3Qgcm93UG9zaXRpb24gPSByb3dDb3VudCArIG9jY3VwaWVkUm93UG9zaXRpb247XG4gICAgICAgICAgICAgIGNvbnN0IGNvbHVtblBvc2l0aW9uID0gc3RhcnQgKyBvY2N1cGllZENvbHVtblBvc2l0aW9uO1xuICAgICAgICAgICAgICBjb25zdCBuZXdwb3MgPSBrZXkocm93UG9zaXRpb24sIGNvbHVtblBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgYWNjZXNzW25ld3Bvc10gPSBjdXJyZW50O1xuICAgICAgICAgICAgICBtYXhDb2x1bW5zID0gTWF0aC5tYXgobWF4Q29sdW1ucywgY29sdW1uUG9zaXRpb24gKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudFJvdy5wdXNoKGN1cnJlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgbWF4Um93cysrO1xuICAgICAgICBjZWxscy5wdXNoKHJvd2RldGFpbChyb3dEYXRhLmVsZW1lbnQsIGN1cnJlbnRSb3csIHJvd0RhdGEuc2VjdGlvbikpO1xuICAgICAgICByb3dDb3VudCsrO1xuICAgICAgfSk7XG4gICAgICBjb25zdCB7Y29sdW1ucywgY29sZ3JvdXBzfSA9IGxhc3QoY29sZ3JvdXBSb3dzKS5tYXAocm93RGF0YSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBnZW5lcmF0ZUNvbHVtbnMocm93RGF0YSk7XG4gICAgICAgIGNvbnN0IGNvbGdyb3VwJDEgPSBjb2xncm91cChyb3dEYXRhLmVsZW1lbnQsIHZhbHVlcyhjb2x1bW5zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29sZ3JvdXBzOiBbY29sZ3JvdXAkMV0sXG4gICAgICAgICAgY29sdW1uc1xuICAgICAgICB9O1xuICAgICAgfSkuZ2V0T3JUaHVuaygoKSA9PiAoe1xuICAgICAgICBjb2xncm91cHM6IFtdLFxuICAgICAgICBjb2x1bW5zOiB7fVxuICAgICAgfSkpO1xuICAgICAgY29uc3QgZ3JpZCQxID0gZ3JpZChtYXhSb3dzLCBtYXhDb2x1bW5zKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdyaWQ6IGdyaWQkMSxcbiAgICAgICAgYWNjZXNzLFxuICAgICAgICBhbGw6IGNlbGxzLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBjb2xncm91cHNcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBmcm9tVGFibGUgPSB0YWJsZSA9PiB7XG4gICAgICBjb25zdCBsaXN0ID0gZnJvbVRhYmxlJDEodGFibGUpO1xuICAgICAgcmV0dXJuIGdlbmVyYXRlJDEobGlzdCk7XG4gICAgfTtcbiAgICBjb25zdCBqdXN0Q2VsbHMgPSB3YXJlaG91c2UgPT4gYmluZCh3YXJlaG91c2UuYWxsLCB3ID0+IHcuY2VsbHMpO1xuICAgIGNvbnN0IGp1c3RDb2x1bW5zID0gd2FyZWhvdXNlID0+IHZhbHVlcyh3YXJlaG91c2UuY29sdW1ucyk7XG4gICAgY29uc3QgaGFzQ29sdW1ucyA9IHdhcmVob3VzZSA9PiBrZXlzKHdhcmVob3VzZS5jb2x1bW5zKS5sZW5ndGggPiAwO1xuICAgIGNvbnN0IGdldENvbHVtbkF0ID0gKHdhcmVob3VzZSwgY29sdW1uSW5kZXgpID0+IE9wdGlvbmFsLmZyb20od2FyZWhvdXNlLmNvbHVtbnNbY29sdW1uSW5kZXhdKTtcbiAgICBjb25zdCBXYXJlaG91c2UgPSB7XG4gICAgICBmcm9tVGFibGUsXG4gICAgICBnZW5lcmF0ZTogZ2VuZXJhdGUkMSxcbiAgICAgIGdldEF0LFxuICAgICAgZmluZEl0ZW0sXG4gICAgICBmaWx0ZXJJdGVtcyxcbiAgICAgIGp1c3RDZWxscyxcbiAgICAgIGp1c3RDb2x1bW5zLFxuICAgICAgaGFzQ29sdW1ucyxcbiAgICAgIGdldENvbHVtbkF0XG4gICAgfTtcblxuICAgIHZhciBnbG9iYWwkMiA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLnV0aWwuVG9vbHMnKTtcblxuICAgIGNvbnN0IGdldFREVEhPdmVyYWxsU3R5bGUgPSAoZG9tLCBlbG0sIG5hbWUpID0+IHtcbiAgICAgIGNvbnN0IGNlbGxzID0gZG9tLnNlbGVjdCgndGQsdGgnLCBlbG0pO1xuICAgICAgbGV0IGZpcnN0Q2hpbGRTdHlsZTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY3VycmVudFN0eWxlID0gZG9tLmdldFN0eWxlKGNlbGxzW2ldLCBuYW1lKTtcbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGZpcnN0Q2hpbGRTdHlsZSkpIHtcbiAgICAgICAgICBmaXJzdENoaWxkU3R5bGUgPSBjdXJyZW50U3R5bGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpcnN0Q2hpbGRTdHlsZSAhPT0gY3VycmVudFN0eWxlKSB7XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlyc3RDaGlsZFN0eWxlO1xuICAgIH07XG4gICAgY29uc3Qgc2V0QWxpZ24gPSAoZWRpdG9yLCBlbG0sIG5hbWUpID0+IHtcbiAgICAgIGdsb2JhbCQyLmVhY2goJ2xlZnQgY2VudGVyIHJpZ2h0Jy5zcGxpdCgnICcpLCBhbGlnbiA9PiB7XG4gICAgICAgIGlmIChhbGlnbiAhPT0gbmFtZSkge1xuICAgICAgICAgIGVkaXRvci5mb3JtYXR0ZXIucmVtb3ZlKCdhbGlnbicgKyBhbGlnbiwge30sIGVsbSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgZWRpdG9yLmZvcm1hdHRlci5hcHBseSgnYWxpZ24nICsgbmFtZSwge30sIGVsbSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXRWQWxpZ24gPSAoZWRpdG9yLCBlbG0sIG5hbWUpID0+IHtcbiAgICAgIGdsb2JhbCQyLmVhY2goJ3RvcCBtaWRkbGUgYm90dG9tJy5zcGxpdCgnICcpLCBhbGlnbiA9PiB7XG4gICAgICAgIGlmIChhbGlnbiAhPT0gbmFtZSkge1xuICAgICAgICAgIGVkaXRvci5mb3JtYXR0ZXIucmVtb3ZlKCd2YWxpZ24nICsgYWxpZ24sIHt9LCBlbG0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgIGVkaXRvci5mb3JtYXR0ZXIuYXBwbHkoJ3ZhbGlnbicgKyBuYW1lLCB7fSwgZWxtKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZmlyZVRhYmxlTW9kaWZpZWQgPSAoZWRpdG9yLCB0YWJsZSwgZGF0YSkgPT4ge1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdUYWJsZU1vZGlmaWVkJywge1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICB0YWJsZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHRvTnVtYmVyID0gKHB4LCBmYWxsYmFjaykgPT4gdG9GbG9hdChweCkuZ2V0T3IoZmFsbGJhY2spO1xuICAgIGNvbnN0IGdldFByb3AgPSAoZWxlbWVudCwgbmFtZSwgZmFsbGJhY2spID0+IHRvTnVtYmVyKGdldCQxKGVsZW1lbnQsIG5hbWUpLCBmYWxsYmFjayk7XG4gICAgY29uc3QgY2FsY0NvbnRlbnRCb3hTaXplID0gKGVsZW1lbnQsIHNpemUsIHVwcGVyLCBsb3dlcikgPT4ge1xuICAgICAgY29uc3QgcGFkZGluZ1VwcGVyID0gZ2V0UHJvcChlbGVtZW50LCBgcGFkZGluZy0keyB1cHBlciB9YCwgMCk7XG4gICAgICBjb25zdCBwYWRkaW5nTG93ZXIgPSBnZXRQcm9wKGVsZW1lbnQsIGBwYWRkaW5nLSR7IGxvd2VyIH1gLCAwKTtcbiAgICAgIGNvbnN0IGJvcmRlclVwcGVyID0gZ2V0UHJvcChlbGVtZW50LCBgYm9yZGVyLSR7IHVwcGVyIH0td2lkdGhgLCAwKTtcbiAgICAgIGNvbnN0IGJvcmRlckxvd2VyID0gZ2V0UHJvcChlbGVtZW50LCBgYm9yZGVyLSR7IGxvd2VyIH0td2lkdGhgLCAwKTtcbiAgICAgIHJldHVybiBzaXplIC0gcGFkZGluZ1VwcGVyIC0gcGFkZGluZ0xvd2VyIC0gYm9yZGVyVXBwZXIgLSBib3JkZXJMb3dlcjtcbiAgICB9O1xuICAgIGNvbnN0IGdldENhbGN1bGF0ZWRXaWR0aCA9IChlbGVtZW50LCBib3hTaXppbmcpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgY29uc3Qgd2lkdGggPSBkb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggfHwgZG9tLm9mZnNldFdpZHRoO1xuICAgICAgcmV0dXJuIGJveFNpemluZyA9PT0gJ2JvcmRlci1ib3gnID8gd2lkdGggOiBjYWxjQ29udGVudEJveFNpemUoZWxlbWVudCwgd2lkdGgsICdsZWZ0JywgJ3JpZ2h0Jyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRJbm5lcldpZHRoID0gZWxlbWVudCA9PiBnZXRDYWxjdWxhdGVkV2lkdGgoZWxlbWVudCwgJ2NvbnRlbnQtYm94Jyk7XG5cbiAgICBjb25zdCBnZXRJbm5lciA9IGdldElubmVyV2lkdGg7XG5cbiAgICB2YXIgZ2xvYmFsJDEgPSB0aW55bWNlLnV0aWwuVG9vbHMucmVzb2x2ZSgndGlueW1jZS5FbnYnKTtcblxuICAgIGNvbnN0IGRlZmF1bHRUYWJsZVRvb2xiYXIgPSAndGFibGVwcm9wcyB0YWJsZWRlbGV0ZSB8IHRhYmxlaW5zZXJ0cm93YmVmb3JlIHRhYmxlaW5zZXJ0cm93YWZ0ZXIgdGFibGVkZWxldGVyb3cgfCB0YWJsZWluc2VydGNvbGJlZm9yZSB0YWJsZWluc2VydGNvbGFmdGVyIHRhYmxlZGVsZXRlY29sJztcbiAgICBjb25zdCBkZWZhdWx0Q2VsbEJvcmRlcldpZHRocyA9IHJhbmdlKDUsIGkgPT4ge1xuICAgICAgY29uc3Qgc2l6ZSA9IGAkeyBpICsgMSB9cHhgO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGl0bGU6IHNpemUsXG4gICAgICAgIHZhbHVlOiBzaXplXG4gICAgICB9O1xuICAgIH0pO1xuICAgIGNvbnN0IGRlZmF1bHRDZWxsQm9yZGVyU3R5bGVzID0gbWFwKFtcbiAgICAgICdTb2xpZCcsXG4gICAgICAnRG90dGVkJyxcbiAgICAgICdEYXNoZWQnLFxuICAgICAgJ0RvdWJsZScsXG4gICAgICAnR3Jvb3ZlJyxcbiAgICAgICdSaWRnZScsXG4gICAgICAnSW5zZXQnLFxuICAgICAgJ091dHNldCcsXG4gICAgICAnTm9uZScsXG4gICAgICAnSGlkZGVuJ1xuICAgIF0sIHR5cGUgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGl0bGU6IHR5cGUsXG4gICAgICAgIHZhbHVlOiB0eXBlLnRvTG93ZXJDYXNlKClcbiAgICAgIH07XG4gICAgfSk7XG4gICAgY29uc3QgZGVmYXVsdFdpZHRoID0gJzEwMCUnO1xuICAgIGNvbnN0IGdldFBpeGVsRm9yY2VkV2lkdGggPSBlZGl0b3IgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IHBhcmVudEJsb2NrID0gKF9hID0gZG9tLmdldFBhcmVudChlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KCksIGRvbS5pc0Jsb2NrKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZWRpdG9yLmdldEJvZHkoKTtcbiAgICAgIHJldHVybiBnZXRJbm5lcihTdWdhckVsZW1lbnQuZnJvbURvbShwYXJlbnRCbG9jaykpICsgJ3B4JztcbiAgICB9O1xuICAgIGNvbnN0IGRldGVybWluZURlZmF1bHRTdHlsZXMgPSAoZWRpdG9yLCBkZWZhdWx0U3R5bGVzKSA9PiB7XG4gICAgICBpZiAoaXNSZXNwb25zaXZlRm9yY2VkKGVkaXRvcikgfHwgIXNob3VsZFN0eWxlV2l0aENzcyhlZGl0b3IpKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0U3R5bGVzO1xuICAgICAgfSBlbHNlIGlmIChpc1BpeGVsc0ZvcmNlZChlZGl0b3IpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uZGVmYXVsdFN0eWxlcyxcbiAgICAgICAgICB3aWR0aDogZ2V0UGl4ZWxGb3JjZWRXaWR0aChlZGl0b3IpXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmRlZmF1bHRTdHlsZXMsXG4gICAgICAgICAgd2lkdGg6IGRlZmF1bHRXaWR0aFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZGV0ZXJtaW5lRGVmYXVsdEF0dHJpYnV0ZXMgPSAoZWRpdG9yLCBkZWZhdWx0QXR0cmlidXRlcykgPT4ge1xuICAgICAgaWYgKGlzUmVzcG9uc2l2ZUZvcmNlZChlZGl0b3IpIHx8IHNob3VsZFN0eWxlV2l0aENzcyhlZGl0b3IpKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0QXR0cmlidXRlcztcbiAgICAgIH0gZWxzZSBpZiAoaXNQaXhlbHNGb3JjZWQoZWRpdG9yKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmRlZmF1bHRBdHRyaWJ1dGVzLFxuICAgICAgICAgIHdpZHRoOiBnZXRQaXhlbEZvcmNlZFdpZHRoKGVkaXRvcilcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uZGVmYXVsdEF0dHJpYnV0ZXMsXG4gICAgICAgICAgd2lkdGg6IGRlZmF1bHRXaWR0aFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb3B0aW9uID0gbmFtZSA9PiBlZGl0b3IgPT4gZWRpdG9yLm9wdGlvbnMuZ2V0KG5hbWUpO1xuICAgIGNvbnN0IHJlZ2lzdGVyID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyT3B0aW9uID0gZWRpdG9yLm9wdGlvbnMucmVnaXN0ZXI7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGFibGVfYm9yZGVyX3dpZHRocycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnb2JqZWN0W10nLFxuICAgICAgICBkZWZhdWx0OiBkZWZhdWx0Q2VsbEJvcmRlcldpZHRoc1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGFibGVfYm9yZGVyX3N0eWxlcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnb2JqZWN0W10nLFxuICAgICAgICBkZWZhdWx0OiBkZWZhdWx0Q2VsbEJvcmRlclN0eWxlc1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGFibGVfY2VsbF9hZHZ0YWInLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd0YWJsZV9yb3dfYWR2dGFiJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGFibGVfYWR2dGFiJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGFibGVfYXBwZWFyYW5jZV9vcHRpb25zJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGFibGVfZ3JpZCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6ICFnbG9iYWwkMS5kZXZpY2VUeXBlLmlzVG91Y2goKVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGFibGVfY2VsbF9jbGFzc19saXN0Jywge1xuICAgICAgICBwcm9jZXNzb3I6ICdvYmplY3RbXScsXG4gICAgICAgIGRlZmF1bHQ6IFtdXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd0YWJsZV9yb3dfY2xhc3NfbGlzdCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnb2JqZWN0W10nLFxuICAgICAgICBkZWZhdWx0OiBbXVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGFibGVfY2xhc3NfbGlzdCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnb2JqZWN0W10nLFxuICAgICAgICBkZWZhdWx0OiBbXVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGFibGVfdG9vbGJhcicsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogZGVmYXVsdFRhYmxlVG9vbGJhclxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGFibGVfYmFja2dyb3VuZF9jb2xvcl9tYXAnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ29iamVjdFtdJyxcbiAgICAgICAgZGVmYXVsdDogW11cbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3RhYmxlX2JvcmRlcl9jb2xvcl9tYXAnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ29iamVjdFtdJyxcbiAgICAgICAgZGVmYXVsdDogW11cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0VGFibGVTaXppbmdNb2RlID0gb3B0aW9uKCd0YWJsZV9zaXppbmdfbW9kZScpO1xuICAgIGNvbnN0IGdldFRhYmxlQm9yZGVyV2lkdGhzID0gb3B0aW9uKCd0YWJsZV9ib3JkZXJfd2lkdGhzJyk7XG4gICAgY29uc3QgZ2V0VGFibGVCb3JkZXJTdHlsZXMgPSBvcHRpb24oJ3RhYmxlX2JvcmRlcl9zdHlsZXMnKTtcbiAgICBjb25zdCBoYXNBZHZhbmNlZENlbGxUYWIgPSBvcHRpb24oJ3RhYmxlX2NlbGxfYWR2dGFiJyk7XG4gICAgY29uc3QgaGFzQWR2YW5jZWRSb3dUYWIgPSBvcHRpb24oJ3RhYmxlX3Jvd19hZHZ0YWInKTtcbiAgICBjb25zdCBoYXNBZHZhbmNlZFRhYmxlVGFiID0gb3B0aW9uKCd0YWJsZV9hZHZ0YWInKTtcbiAgICBjb25zdCBoYXNBcHBlYXJhbmNlT3B0aW9ucyA9IG9wdGlvbigndGFibGVfYXBwZWFyYW5jZV9vcHRpb25zJyk7XG4gICAgY29uc3QgaGFzVGFibGVHcmlkID0gb3B0aW9uKCd0YWJsZV9ncmlkJyk7XG4gICAgY29uc3Qgc2hvdWxkU3R5bGVXaXRoQ3NzID0gb3B0aW9uKCd0YWJsZV9zdHlsZV9ieV9jc3MnKTtcbiAgICBjb25zdCBnZXRDZWxsQ2xhc3NMaXN0ID0gb3B0aW9uKCd0YWJsZV9jZWxsX2NsYXNzX2xpc3QnKTtcbiAgICBjb25zdCBnZXRSb3dDbGFzc0xpc3QgPSBvcHRpb24oJ3RhYmxlX3Jvd19jbGFzc19saXN0Jyk7XG4gICAgY29uc3QgZ2V0VGFibGVDbGFzc0xpc3QgPSBvcHRpb24oJ3RhYmxlX2NsYXNzX2xpc3QnKTtcbiAgICBjb25zdCBnZXRUb29sYmFyID0gb3B0aW9uKCd0YWJsZV90b29sYmFyJyk7XG4gICAgY29uc3QgZ2V0VGFibGVCYWNrZ3JvdW5kQ29sb3JNYXAgPSBvcHRpb24oJ3RhYmxlX2JhY2tncm91bmRfY29sb3JfbWFwJyk7XG4gICAgY29uc3QgZ2V0VGFibGVCb3JkZXJDb2xvck1hcCA9IG9wdGlvbigndGFibGVfYm9yZGVyX2NvbG9yX21hcCcpO1xuICAgIGNvbnN0IGlzUGl4ZWxzRm9yY2VkID0gZWRpdG9yID0+IGdldFRhYmxlU2l6aW5nTW9kZShlZGl0b3IpID09PSAnZml4ZWQnO1xuICAgIGNvbnN0IGlzUmVzcG9uc2l2ZUZvcmNlZCA9IGVkaXRvciA9PiBnZXRUYWJsZVNpemluZ01vZGUoZWRpdG9yKSA9PT0gJ3Jlc3BvbnNpdmUnO1xuICAgIGNvbnN0IGdldERlZmF1bHRTdHlsZXMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IGVkaXRvci5vcHRpb25zO1xuICAgICAgY29uc3QgZGVmYXVsdFN0eWxlcyA9IG9wdGlvbnMuZ2V0KCd0YWJsZV9kZWZhdWx0X3N0eWxlcycpO1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaXNTZXQoJ3RhYmxlX2RlZmF1bHRfc3R5bGVzJykgPyBkZWZhdWx0U3R5bGVzIDogZGV0ZXJtaW5lRGVmYXVsdFN0eWxlcyhlZGl0b3IsIGRlZmF1bHRTdHlsZXMpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0RGVmYXVsdEF0dHJpYnV0ZXMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IGVkaXRvci5vcHRpb25zO1xuICAgICAgY29uc3QgZGVmYXVsdEF0dHJpYnV0ZXMgPSBvcHRpb25zLmdldCgndGFibGVfZGVmYXVsdF9hdHRyaWJ1dGVzJyk7XG4gICAgICByZXR1cm4gb3B0aW9ucy5pc1NldCgndGFibGVfZGVmYXVsdF9hdHRyaWJ1dGVzJykgPyBkZWZhdWx0QXR0cmlidXRlcyA6IGRldGVybWluZURlZmF1bHRBdHRyaWJ1dGVzKGVkaXRvciwgZGVmYXVsdEF0dHJpYnV0ZXMpO1xuICAgIH07XG5cbiAgICBjb25zdCBpc1dpdGhpbiA9IChib3VuZHMsIGRldGFpbCkgPT4ge1xuICAgICAgcmV0dXJuIGRldGFpbC5jb2x1bW4gPj0gYm91bmRzLnN0YXJ0Q29sICYmIGRldGFpbC5jb2x1bW4gKyBkZXRhaWwuY29sc3BhbiAtIDEgPD0gYm91bmRzLmZpbmlzaENvbCAmJiBkZXRhaWwucm93ID49IGJvdW5kcy5zdGFydFJvdyAmJiBkZXRhaWwucm93ICsgZGV0YWlsLnJvd3NwYW4gLSAxIDw9IGJvdW5kcy5maW5pc2hSb3c7XG4gICAgfTtcbiAgICBjb25zdCBpc1JlY3Rhbmd1bGFyID0gKHdhcmVob3VzZSwgYm91bmRzKSA9PiB7XG4gICAgICBsZXQgaXNSZWN0ID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGRldGFpbElzV2l0aGluID0gY3VycnkoaXNXaXRoaW4sIGJvdW5kcyk7XG4gICAgICBmb3IgKGxldCBpID0gYm91bmRzLnN0YXJ0Um93OyBpIDw9IGJvdW5kcy5maW5pc2hSb3c7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gYm91bmRzLnN0YXJ0Q29sOyBqIDw9IGJvdW5kcy5maW5pc2hDb2w7IGorKykge1xuICAgICAgICAgIGlzUmVjdCA9IGlzUmVjdCAmJiBXYXJlaG91c2UuZ2V0QXQod2FyZWhvdXNlLCBpLCBqKS5leGlzdHMoZGV0YWlsSXNXaXRoaW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNSZWN0ID8gT3B0aW9uYWwuc29tZShib3VuZHMpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRCb3VuZHMgPSAoZGV0YWlsQSwgZGV0YWlsQikgPT4ge1xuICAgICAgcmV0dXJuIGJvdW5kcyhNYXRoLm1pbihkZXRhaWxBLnJvdywgZGV0YWlsQi5yb3cpLCBNYXRoLm1pbihkZXRhaWxBLmNvbHVtbiwgZGV0YWlsQi5jb2x1bW4pLCBNYXRoLm1heChkZXRhaWxBLnJvdyArIGRldGFpbEEucm93c3BhbiAtIDEsIGRldGFpbEIucm93ICsgZGV0YWlsQi5yb3dzcGFuIC0gMSksIE1hdGgubWF4KGRldGFpbEEuY29sdW1uICsgZGV0YWlsQS5jb2xzcGFuIC0gMSwgZGV0YWlsQi5jb2x1bW4gKyBkZXRhaWxCLmNvbHNwYW4gLSAxKSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRBbnlCb3ggPSAod2FyZWhvdXNlLCBzdGFydENlbGwsIGZpbmlzaENlbGwpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0Q29vcmRzID0gV2FyZWhvdXNlLmZpbmRJdGVtKHdhcmVob3VzZSwgc3RhcnRDZWxsLCBlcSk7XG4gICAgICBjb25zdCBmaW5pc2hDb29yZHMgPSBXYXJlaG91c2UuZmluZEl0ZW0od2FyZWhvdXNlLCBmaW5pc2hDZWxsLCBlcSk7XG4gICAgICByZXR1cm4gc3RhcnRDb29yZHMuYmluZChzYyA9PiB7XG4gICAgICAgIHJldHVybiBmaW5pc2hDb29yZHMubWFwKGZjID0+IHtcbiAgICAgICAgICByZXR1cm4gZ2V0Qm91bmRzKHNjLCBmYyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRCb3gkMSA9ICh3YXJlaG91c2UsIHN0YXJ0Q2VsbCwgZmluaXNoQ2VsbCkgPT4ge1xuICAgICAgcmV0dXJuIGdldEFueUJveCh3YXJlaG91c2UsIHN0YXJ0Q2VsbCwgZmluaXNoQ2VsbCkuYmluZChib3VuZHMgPT4ge1xuICAgICAgICByZXR1cm4gaXNSZWN0YW5ndWxhcih3YXJlaG91c2UsIGJvdW5kcyk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0Qm94ID0gKHRhYmxlLCBmaXJzdCwgbGFzdCkgPT4ge1xuICAgICAgY29uc3Qgd2FyZWhvdXNlID0gZ2V0V2FyZWhvdXNlKHRhYmxlKTtcbiAgICAgIHJldHVybiBnZXRCb3gkMSh3YXJlaG91c2UsIGZpcnN0LCBsYXN0KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFdhcmVob3VzZSA9IFdhcmVob3VzZS5mcm9tVGFibGU7XG5cbiAgICBjb25zdCBiZWZvcmUgPSAobWFya2VyLCBlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQkMSA9IHBhcmVudChtYXJrZXIpO1xuICAgICAgcGFyZW50JDEuZWFjaCh2ID0+IHtcbiAgICAgICAgdi5kb20uaW5zZXJ0QmVmb3JlKGVsZW1lbnQuZG9tLCBtYXJrZXIuZG9tKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYWZ0ZXIkMSA9IChtYXJrZXIsIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHNpYmxpbmcgPSBuZXh0U2libGluZyhtYXJrZXIpO1xuICAgICAgc2libGluZy5mb2xkKCgpID0+IHtcbiAgICAgICAgY29uc3QgcGFyZW50JDEgPSBwYXJlbnQobWFya2VyKTtcbiAgICAgICAgcGFyZW50JDEuZWFjaCh2ID0+IHtcbiAgICAgICAgICBhcHBlbmQkMSh2LCBlbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9LCB2ID0+IHtcbiAgICAgICAgYmVmb3JlKHYsIGVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBwcmVwZW5kID0gKHBhcmVudCwgZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgZmlyc3RDaGlsZCQxID0gZmlyc3RDaGlsZChwYXJlbnQpO1xuICAgICAgZmlyc3RDaGlsZCQxLmZvbGQoKCkgPT4ge1xuICAgICAgICBhcHBlbmQkMShwYXJlbnQsIGVsZW1lbnQpO1xuICAgICAgfSwgdiA9PiB7XG4gICAgICAgIHBhcmVudC5kb20uaW5zZXJ0QmVmb3JlKGVsZW1lbnQuZG9tLCB2LmRvbSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGVuZCQxID0gKHBhcmVudCwgZWxlbWVudCkgPT4ge1xuICAgICAgcGFyZW50LmRvbS5hcHBlbmRDaGlsZChlbGVtZW50LmRvbSk7XG4gICAgfTtcbiAgICBjb25zdCB3cmFwID0gKGVsZW1lbnQsIHdyYXBwZXIpID0+IHtcbiAgICAgIGJlZm9yZShlbGVtZW50LCB3cmFwcGVyKTtcbiAgICAgIGFwcGVuZCQxKHdyYXBwZXIsIGVsZW1lbnQpO1xuICAgIH07XG5cbiAgICBjb25zdCBhZnRlciA9IChtYXJrZXIsIGVsZW1lbnRzKSA9PiB7XG4gICAgICBlYWNoKGVsZW1lbnRzLCAoeCwgaSkgPT4ge1xuICAgICAgICBjb25zdCBlID0gaSA9PT0gMCA/IG1hcmtlciA6IGVsZW1lbnRzW2kgLSAxXTtcbiAgICAgICAgYWZ0ZXIkMShlLCB4KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYXBwZW5kID0gKHBhcmVudCwgZWxlbWVudHMpID0+IHtcbiAgICAgIGVhY2goZWxlbWVudHMsIHggPT4ge1xuICAgICAgICBhcHBlbmQkMShwYXJlbnQsIHgpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbW92ZSA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBpZiAoZG9tLnBhcmVudE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgZG9tLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG9tKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHVud3JhcCA9IHdyYXBwZXIgPT4ge1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBjaGlsZHJlbiQzKHdyYXBwZXIpO1xuICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYWZ0ZXIod3JhcHBlciwgY2hpbGRyZW4pO1xuICAgICAgfVxuICAgICAgcmVtb3ZlKHdyYXBwZXIpO1xuICAgIH07XG5cbiAgICBjb25zdCBOb2RlVmFsdWUgPSAoaXMsIG5hbWUpID0+IHtcbiAgICAgIGNvbnN0IGdldCA9IGVsZW1lbnQgPT4ge1xuICAgICAgICBpZiAoIWlzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBnZXQgJyArIG5hbWUgKyAnIHZhbHVlIG9mIGEgJyArIG5hbWUgKyAnIG5vZGUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0T3B0aW9uKGVsZW1lbnQpLmdldE9yKCcnKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRPcHRpb24gPSBlbGVtZW50ID0+IGlzKGVsZW1lbnQpID8gT3B0aW9uYWwuZnJvbShlbGVtZW50LmRvbS5ub2RlVmFsdWUpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgY29uc3Qgc2V0ID0gKGVsZW1lbnQsIHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICghaXMoZWxlbWVudCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBvbmx5IHNldCByYXcgJyArIG5hbWUgKyAnIHZhbHVlIG9mIGEgJyArIG5hbWUgKyAnIG5vZGUnKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50LmRvbS5ub2RlVmFsdWUgPSB2YWx1ZTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBnZXQsXG4gICAgICAgIGdldE9wdGlvbixcbiAgICAgICAgc2V0XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBhcGkgPSBOb2RlVmFsdWUoaXNUZXh0LCAndGV4dCcpO1xuICAgIGNvbnN0IGdldCA9IGVsZW1lbnQgPT4gYXBpLmdldChlbGVtZW50KTtcbiAgICBjb25zdCBzZXQgPSAoZWxlbWVudCwgdmFsdWUpID0+IGFwaS5zZXQoZWxlbWVudCwgdmFsdWUpO1xuXG4gICAgdmFyIFRhZ0JvdW5kYXJpZXMgPSBbXG4gICAgICAnYm9keScsXG4gICAgICAncCcsXG4gICAgICAnZGl2JyxcbiAgICAgICdhcnRpY2xlJyxcbiAgICAgICdhc2lkZScsXG4gICAgICAnZmlnY2FwdGlvbicsXG4gICAgICAnZmlndXJlJyxcbiAgICAgICdmb290ZXInLFxuICAgICAgJ2hlYWRlcicsXG4gICAgICAnbmF2JyxcbiAgICAgICdzZWN0aW9uJyxcbiAgICAgICdvbCcsXG4gICAgICAndWwnLFxuICAgICAgJ2xpJyxcbiAgICAgICd0YWJsZScsXG4gICAgICAndGhlYWQnLFxuICAgICAgJ3Rib2R5JyxcbiAgICAgICd0Zm9vdCcsXG4gICAgICAnY2FwdGlvbicsXG4gICAgICAndHInLFxuICAgICAgJ3RkJyxcbiAgICAgICd0aCcsXG4gICAgICAnaDEnLFxuICAgICAgJ2gyJyxcbiAgICAgICdoMycsXG4gICAgICAnaDQnLFxuICAgICAgJ2g1JyxcbiAgICAgICdoNicsXG4gICAgICAnYmxvY2txdW90ZScsXG4gICAgICAncHJlJyxcbiAgICAgICdhZGRyZXNzJ1xuICAgIF07XG5cbiAgICB2YXIgRG9tVW5pdmVyc2UgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjbG9uZSQxID0gZWxlbWVudCA9PiB7XG4gICAgICAgIHJldHVybiBTdWdhckVsZW1lbnQuZnJvbURvbShlbGVtZW50LmRvbS5jbG9uZU5vZGUoZmFsc2UpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBkb2N1bWVudCA9IGVsZW1lbnQgPT4gZG9jdW1lbnRPck93bmVyKGVsZW1lbnQpLmRvbTtcbiAgICAgIGNvbnN0IGlzQm91bmRhcnkgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgaWYgKCFpc0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWUoZWxlbWVudCkgPT09ICdib2R5Jykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250YWlucyhUYWdCb3VuZGFyaWVzLCBuYW1lKGVsZW1lbnQpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0VtcHR5VGFnID0gZWxlbWVudCA9PiB7XG4gICAgICAgIGlmICghaXNFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250YWlucyhbXG4gICAgICAgICAgJ2JyJyxcbiAgICAgICAgICAnaW1nJyxcbiAgICAgICAgICAnaHInLFxuICAgICAgICAgICdpbnB1dCdcbiAgICAgICAgXSwgbmFtZShlbGVtZW50KSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNOb25FZGl0YWJsZSA9IGVsZW1lbnQgPT4gaXNFbGVtZW50KGVsZW1lbnQpICYmIGdldCQyKGVsZW1lbnQsICdjb250ZW50ZWRpdGFibGUnKSA9PT0gJ2ZhbHNlJztcbiAgICAgIGNvbnN0IGNvbXBhcmVQb3NpdGlvbiA9IChlbGVtZW50LCBvdGhlcikgPT4ge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5kb20uY29tcGFyZURvY3VtZW50UG9zaXRpb24ob3RoZXIuZG9tKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjb3B5QXR0cmlidXRlc1RvID0gKHNvdXJjZSwgZGVzdGluYXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgYXMgPSBjbG9uZShzb3VyY2UpO1xuICAgICAgICBzZXRBbGwoZGVzdGluYXRpb24sIGFzKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1NwZWNpYWwgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgY29uc3QgdGFnID0gbmFtZShlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5zKFtcbiAgICAgICAgICAnc2NyaXB0JyxcbiAgICAgICAgICAnbm9zY3JpcHQnLFxuICAgICAgICAgICdpZnJhbWUnLFxuICAgICAgICAgICdub2ZyYW1lcycsXG4gICAgICAgICAgJ25vZW1iZWQnLFxuICAgICAgICAgICd0aXRsZScsXG4gICAgICAgICAgJ3N0eWxlJyxcbiAgICAgICAgICAndGV4dGFyZWEnLFxuICAgICAgICAgICd4bXAnXG4gICAgICAgIF0sIHRhZyk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0TGFuZ3VhZ2UgPSBlbGVtZW50ID0+IGlzRWxlbWVudChlbGVtZW50KSA/IGdldE9wdChlbGVtZW50LCAnbGFuZycpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdXA6IGNvbnN0YW50KHtcbiAgICAgICAgICBzZWxlY3RvcjogYW5jZXN0b3IsXG4gICAgICAgICAgY2xvc2VzdDogY2xvc2VzdCQxLFxuICAgICAgICAgIHByZWRpY2F0ZTogYW5jZXN0b3IkMSxcbiAgICAgICAgICBhbGw6IHBhcmVudHNcbiAgICAgICAgfSksXG4gICAgICAgIGRvd246IGNvbnN0YW50KHtcbiAgICAgICAgICBzZWxlY3RvcjogZGVzY2VuZGFudHMsXG4gICAgICAgICAgcHJlZGljYXRlOiBkZXNjZW5kYW50cyQxXG4gICAgICAgIH0pLFxuICAgICAgICBzdHlsZXM6IGNvbnN0YW50KHtcbiAgICAgICAgICBnZXQ6IGdldCQxLFxuICAgICAgICAgIGdldFJhdzogZ2V0UmF3LFxuICAgICAgICAgIHNldDogc2V0JDEsXG4gICAgICAgICAgcmVtb3ZlOiByZW1vdmUkMVxuICAgICAgICB9KSxcbiAgICAgICAgYXR0cnM6IGNvbnN0YW50KHtcbiAgICAgICAgICBnZXQ6IGdldCQyLFxuICAgICAgICAgIHNldDogc2V0JDIsXG4gICAgICAgICAgcmVtb3ZlOiByZW1vdmUkMixcbiAgICAgICAgICBjb3B5VG86IGNvcHlBdHRyaWJ1dGVzVG9cbiAgICAgICAgfSksXG4gICAgICAgIGluc2VydDogY29uc3RhbnQoe1xuICAgICAgICAgIGJlZm9yZTogYmVmb3JlLFxuICAgICAgICAgIGFmdGVyOiBhZnRlciQxLFxuICAgICAgICAgIGFmdGVyQWxsOiBhZnRlcixcbiAgICAgICAgICBhcHBlbmQ6IGFwcGVuZCQxLFxuICAgICAgICAgIGFwcGVuZEFsbDogYXBwZW5kLFxuICAgICAgICAgIHByZXBlbmQ6IHByZXBlbmQsXG4gICAgICAgICAgd3JhcDogd3JhcFxuICAgICAgICB9KSxcbiAgICAgICAgcmVtb3ZlOiBjb25zdGFudCh7XG4gICAgICAgICAgdW53cmFwOiB1bndyYXAsXG4gICAgICAgICAgcmVtb3ZlOiByZW1vdmVcbiAgICAgICAgfSksXG4gICAgICAgIGNyZWF0ZTogY29uc3RhbnQoe1xuICAgICAgICAgIG51OiBTdWdhckVsZW1lbnQuZnJvbVRhZyxcbiAgICAgICAgICBjbG9uZTogY2xvbmUkMSxcbiAgICAgICAgICB0ZXh0OiBTdWdhckVsZW1lbnQuZnJvbVRleHRcbiAgICAgICAgfSksXG4gICAgICAgIHF1ZXJ5OiBjb25zdGFudCh7XG4gICAgICAgICAgY29tcGFyZVBvc2l0aW9uLFxuICAgICAgICAgIHByZXZTaWJsaW5nOiBwcmV2U2libGluZyxcbiAgICAgICAgICBuZXh0U2libGluZzogbmV4dFNpYmxpbmdcbiAgICAgICAgfSksXG4gICAgICAgIHByb3BlcnR5OiBjb25zdGFudCh7XG4gICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuJDMsXG4gICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICBwYXJlbnQ6IHBhcmVudCxcbiAgICAgICAgICBkb2N1bWVudCxcbiAgICAgICAgICBpc1RleHQ6IGlzVGV4dCxcbiAgICAgICAgICBpc0NvbW1lbnQ6IGlzQ29tbWVudCxcbiAgICAgICAgICBpc0VsZW1lbnQ6IGlzRWxlbWVudCxcbiAgICAgICAgICBpc1NwZWNpYWwsXG4gICAgICAgICAgZ2V0TGFuZ3VhZ2UsXG4gICAgICAgICAgZ2V0VGV4dDogZ2V0LFxuICAgICAgICAgIHNldFRleHQ6IHNldCxcbiAgICAgICAgICBpc0JvdW5kYXJ5LFxuICAgICAgICAgIGlzRW1wdHlUYWcsXG4gICAgICAgICAgaXNOb25FZGl0YWJsZVxuICAgICAgICB9KSxcbiAgICAgICAgZXE6IGVxLFxuICAgICAgICBpczogaXMkMVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgYWxsID0gKHVuaXZlcnNlLCBsb29rLCBlbGVtZW50cywgZikgPT4ge1xuICAgICAgY29uc3QgaGVhZCA9IGVsZW1lbnRzWzBdO1xuICAgICAgY29uc3QgdGFpbCA9IGVsZW1lbnRzLnNsaWNlKDEpO1xuICAgICAgcmV0dXJuIGYodW5pdmVyc2UsIGxvb2ssIGhlYWQsIHRhaWwpO1xuICAgIH07XG4gICAgY29uc3Qgb25lQWxsID0gKHVuaXZlcnNlLCBsb29rLCBlbGVtZW50cykgPT4ge1xuICAgICAgcmV0dXJuIGVsZW1lbnRzLmxlbmd0aCA+IDAgPyBhbGwodW5pdmVyc2UsIGxvb2ssIGVsZW1lbnRzLCB1bnNhZmVPbmUpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgdW5zYWZlT25lID0gKHVuaXZlcnNlLCBsb29rLCBoZWFkLCB0YWlsKSA9PiB7XG4gICAgICBjb25zdCBzdGFydCA9IGxvb2sodW5pdmVyc2UsIGhlYWQpO1xuICAgICAgcmV0dXJuIGZvbGRyKHRhaWwsIChiLCBhKSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBsb29rKHVuaXZlcnNlLCBhKTtcbiAgICAgICAgcmV0dXJuIGNvbW1vbkVsZW1lbnQodW5pdmVyc2UsIGIsIGN1cnJlbnQpO1xuICAgICAgfSwgc3RhcnQpO1xuICAgIH07XG4gICAgY29uc3QgY29tbW9uRWxlbWVudCA9ICh1bml2ZXJzZSwgc3RhcnQsIGVuZCkgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0LmJpbmQocyA9PiB7XG4gICAgICAgIHJldHVybiBlbmQuZmlsdGVyKGN1cnJ5KHVuaXZlcnNlLmVxLCBzKSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2hhcmVkT25lJDEgPSBvbmVBbGw7XG5cbiAgICBjb25zdCB1bml2ZXJzZSA9IERvbVVuaXZlcnNlKCk7XG4gICAgY29uc3Qgc2hhcmVkT25lID0gKGxvb2ssIGVsZW1lbnRzKSA9PiB7XG4gICAgICByZXR1cm4gc2hhcmVkT25lJDEodW5pdmVyc2UsIChfdW5pdmVyc2UsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIGxvb2soZWxlbWVudCk7XG4gICAgICB9LCBlbGVtZW50cyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxvb2t1cFRhYmxlID0gY29udGFpbmVyID0+IHtcbiAgICAgIHJldHVybiBhbmNlc3Rvcihjb250YWluZXIsICd0YWJsZScpO1xuICAgIH07XG4gICAgY29uc3QgcmV0cmlldmUkMSA9IChjb250YWluZXIsIHNlbGVjdG9yKSA9PiB7XG4gICAgICBjb25zdCBzZWxzID0gZGVzY2VuZGFudHMoY29udGFpbmVyLCBzZWxlY3Rvcik7XG4gICAgICByZXR1cm4gc2Vscy5sZW5ndGggPiAwID8gT3B0aW9uYWwuc29tZShzZWxzKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEVkZ2VzID0gKGNvbnRhaW5lciwgZmlyc3RTZWxlY3RlZFNlbGVjdG9yLCBsYXN0U2VsZWN0ZWRTZWxlY3RvcikgPT4ge1xuICAgICAgcmV0dXJuIGRlc2NlbmRhbnQoY29udGFpbmVyLCBmaXJzdFNlbGVjdGVkU2VsZWN0b3IpLmJpbmQoZmlyc3QgPT4ge1xuICAgICAgICByZXR1cm4gZGVzY2VuZGFudChjb250YWluZXIsIGxhc3RTZWxlY3RlZFNlbGVjdG9yKS5iaW5kKGxhc3QgPT4ge1xuICAgICAgICAgIHJldHVybiBzaGFyZWRPbmUobG9va3VwVGFibGUsIFtcbiAgICAgICAgICAgIGZpcnN0LFxuICAgICAgICAgICAgbGFzdFxuICAgICAgICAgIF0pLm1hcCh0YWJsZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBmaXJzdCxcbiAgICAgICAgICAgICAgbGFzdCxcbiAgICAgICAgICAgICAgdGFibGVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJldHJpZXZlID0gKGNvbnRhaW5lciwgc2VsZWN0b3IpID0+IHtcbiAgICAgIHJldHVybiByZXRyaWV2ZSQxKGNvbnRhaW5lciwgc2VsZWN0b3IpO1xuICAgIH07XG4gICAgY29uc3QgcmV0cmlldmVCb3ggPSAoY29udGFpbmVyLCBmaXJzdFNlbGVjdGVkU2VsZWN0b3IsIGxhc3RTZWxlY3RlZFNlbGVjdG9yKSA9PiB7XG4gICAgICByZXR1cm4gZ2V0RWRnZXMoY29udGFpbmVyLCBmaXJzdFNlbGVjdGVkU2VsZWN0b3IsIGxhc3RTZWxlY3RlZFNlbGVjdG9yKS5iaW5kKGVkZ2VzID0+IHtcbiAgICAgICAgY29uc3QgaXNSb290ID0gYW5jZXN0b3IgPT4ge1xuICAgICAgICAgIHJldHVybiBlcShjb250YWluZXIsIGFuY2VzdG9yKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2VjdGlvblNlbGVjdG9yID0gJ3RoZWFkLHRmb290LHRib2R5LHRhYmxlJztcbiAgICAgICAgY29uc3QgZmlyc3RBbmNlc3RvciA9IGFuY2VzdG9yKGVkZ2VzLmZpcnN0LCBzZWN0aW9uU2VsZWN0b3IsIGlzUm9vdCk7XG4gICAgICAgIGNvbnN0IGxhc3RBbmNlc3RvciA9IGFuY2VzdG9yKGVkZ2VzLmxhc3QsIHNlY3Rpb25TZWxlY3RvciwgaXNSb290KTtcbiAgICAgICAgcmV0dXJuIGZpcnN0QW5jZXN0b3IuYmluZChmQSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGxhc3RBbmNlc3Rvci5iaW5kKGxBID0+IHtcbiAgICAgICAgICAgIHJldHVybiBlcShmQSwgbEEpID8gZ2V0Qm94KGVkZ2VzLnRhYmxlLCBlZGdlcy5maXJzdCwgZWRnZXMubGFzdCkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZyb21Eb20gPSBub2RlcyA9PiBtYXAobm9kZXMsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcblxuICAgIGNvbnN0IHN0clNlbGVjdGVkID0gJ2RhdGEtbWNlLXNlbGVjdGVkJztcbiAgICBjb25zdCBzdHJTZWxlY3RlZFNlbGVjdG9yID0gJ3RkWycgKyBzdHJTZWxlY3RlZCArICddLHRoWycgKyBzdHJTZWxlY3RlZCArICddJztcbiAgICBjb25zdCBzdHJGaXJzdFNlbGVjdGVkID0gJ2RhdGEtbWNlLWZpcnN0LXNlbGVjdGVkJztcbiAgICBjb25zdCBzdHJGaXJzdFNlbGVjdGVkU2VsZWN0b3IgPSAndGRbJyArIHN0ckZpcnN0U2VsZWN0ZWQgKyAnXSx0aFsnICsgc3RyRmlyc3RTZWxlY3RlZCArICddJztcbiAgICBjb25zdCBzdHJMYXN0U2VsZWN0ZWQgPSAnZGF0YS1tY2UtbGFzdC1zZWxlY3RlZCc7XG4gICAgY29uc3Qgc3RyTGFzdFNlbGVjdGVkU2VsZWN0b3IgPSAndGRbJyArIHN0ckxhc3RTZWxlY3RlZCArICddLHRoWycgKyBzdHJMYXN0U2VsZWN0ZWQgKyAnXSc7XG4gICAgY29uc3QgZXBoZW1lcmEgPSB7XG4gICAgICBzZWxlY3RlZDogc3RyU2VsZWN0ZWQsXG4gICAgICBzZWxlY3RlZFNlbGVjdG9yOiBzdHJTZWxlY3RlZFNlbGVjdG9yLFxuICAgICAgZmlyc3RTZWxlY3RlZDogc3RyRmlyc3RTZWxlY3RlZCxcbiAgICAgIGZpcnN0U2VsZWN0ZWRTZWxlY3Rvcjogc3RyRmlyc3RTZWxlY3RlZFNlbGVjdG9yLFxuICAgICAgbGFzdFNlbGVjdGVkOiBzdHJMYXN0U2VsZWN0ZWQsXG4gICAgICBsYXN0U2VsZWN0ZWRTZWxlY3Rvcjogc3RyTGFzdFNlbGVjdGVkU2VsZWN0b3JcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0U2VsZWN0aW9uQ2VsbEZhbGxiYWNrID0gZWxlbWVudCA9PiB0YWJsZShlbGVtZW50KS5iaW5kKHRhYmxlID0+IHJldHJpZXZlKHRhYmxlLCBlcGhlbWVyYS5maXJzdFNlbGVjdGVkU2VsZWN0b3IpKS5mb2xkKGNvbnN0YW50KGVsZW1lbnQpLCBjZWxscyA9PiBjZWxsc1swXSk7XG4gICAgY29uc3QgZ2V0U2VsZWN0aW9uRnJvbVNlbGVjdG9yID0gc2VsZWN0b3IgPT4gKGluaXRDZWxsLCBpc1Jvb3QpID0+IHtcbiAgICAgIGNvbnN0IGNlbGxOYW1lID0gbmFtZShpbml0Q2VsbCk7XG4gICAgICBjb25zdCBjZWxsID0gY2VsbE5hbWUgPT09ICdjb2wnIHx8IGNlbGxOYW1lID09PSAnY29sZ3JvdXAnID8gZ2V0U2VsZWN0aW9uQ2VsbEZhbGxiYWNrKGluaXRDZWxsKSA6IGluaXRDZWxsO1xuICAgICAgcmV0dXJuIGNsb3Nlc3QkMShjZWxsLCBzZWxlY3RvciwgaXNSb290KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNlbGVjdGlvbkNlbGxPckNhcHRpb24gPSBnZXRTZWxlY3Rpb25Gcm9tU2VsZWN0b3IoJ3RoLHRkLGNhcHRpb24nKTtcbiAgICBjb25zdCBnZXRTZWxlY3Rpb25DZWxsID0gZ2V0U2VsZWN0aW9uRnJvbVNlbGVjdG9yKCd0aCx0ZCcpO1xuICAgIGNvbnN0IGdldENlbGxzRnJvbVNlbGVjdGlvbiA9IGVkaXRvciA9PiBmcm9tRG9tKGVkaXRvci5tb2RlbC50YWJsZS5nZXRTZWxlY3RlZENlbGxzKCkpO1xuICAgIGNvbnN0IGdldFJvd3NGcm9tU2VsZWN0aW9uID0gKHNlbGVjdGVkLCBzZWxlY3RvcikgPT4ge1xuICAgICAgY29uc3QgY2VsbE9wdCA9IGdldFNlbGVjdGlvbkNlbGwoc2VsZWN0ZWQpO1xuICAgICAgY29uc3Qgcm93c09wdCA9IGNlbGxPcHQuYmluZChjZWxsID0+IHRhYmxlKGNlbGwpKS5tYXAodGFibGUgPT4gcm93cyh0YWJsZSkpO1xuICAgICAgcmV0dXJuIGxpZnQyKGNlbGxPcHQsIHJvd3NPcHQsIChjZWxsLCByb3dzKSA9PiBmaWx0ZXIocm93cywgcm93ID0+IGV4aXN0cyhmcm9tRG9tKHJvdy5kb20uY2VsbHMpLCByb3dDZWxsID0+IGdldCQyKHJvd0NlbGwsIHNlbGVjdG9yKSA9PT0gJzEnIHx8IGVxKHJvd0NlbGwsIGNlbGwpKSkpLmdldE9yKFtdKTtcbiAgICB9O1xuXG4gICAgY29uc3QgdmVydGljYWxBbGlnblZhbHVlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgdGV4dDogJ05vbmUnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRleHQ6ICdUb3AnLFxuICAgICAgICB2YWx1ZTogJ3RvcCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRleHQ6ICdNaWRkbGUnLFxuICAgICAgICB2YWx1ZTogJ21pZGRsZSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRleHQ6ICdCb3R0b20nLFxuICAgICAgICB2YWx1ZTogJ2JvdHRvbSdcbiAgICAgIH1cbiAgICBdO1xuXG4gICAgY29uc3QgaGV4Q29sb3VyID0gdmFsdWUgPT4gKHsgdmFsdWU6IG5vcm1hbGl6ZUhleCh2YWx1ZSkgfSk7XG4gICAgY29uc3Qgc2hvcnRoYW5kUmVnZXggPSAvXiM/KFthLWZcXGRdKShbYS1mXFxkXSkoW2EtZlxcZF0pJC9pO1xuICAgIGNvbnN0IGxvbmdmb3JtUmVnZXggPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pO1xuICAgIGNvbnN0IGlzSGV4U3RyaW5nID0gaGV4ID0+IHNob3J0aGFuZFJlZ2V4LnRlc3QoaGV4KSB8fCBsb25nZm9ybVJlZ2V4LnRlc3QoaGV4KTtcbiAgICBjb25zdCBub3JtYWxpemVIZXggPSBoZXggPT4gcmVtb3ZlTGVhZGluZyhoZXgsICcjJykudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBmcm9tU3RyaW5nJDEgPSBoZXggPT4gaXNIZXhTdHJpbmcoaGV4KSA/IE9wdGlvbmFsLnNvbWUoeyB2YWx1ZTogbm9ybWFsaXplSGV4KGhleCkgfSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgY29uc3QgdG9IZXggPSBjb21wb25lbnQgPT4ge1xuICAgICAgY29uc3QgaGV4ID0gY29tcG9uZW50LnRvU3RyaW5nKDE2KTtcbiAgICAgIHJldHVybiAoaGV4Lmxlbmd0aCA9PT0gMSA/ICcwJyArIGhleCA6IGhleCkudG9VcHBlckNhc2UoKTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21SZ2JhID0gcmdiYUNvbG91ciA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRvSGV4KHJnYmFDb2xvdXIucmVkKSArIHRvSGV4KHJnYmFDb2xvdXIuZ3JlZW4pICsgdG9IZXgocmdiYUNvbG91ci5ibHVlKTtcbiAgICAgIHJldHVybiBoZXhDb2xvdXIodmFsdWUpO1xuICAgIH07XG5cbiAgICBjb25zdCByZ2JSZWdleCA9IC9eXFxzKnJnYlxccypcXChcXHMqKFxcZCspXFxzKixcXHMqKFxcZCspXFxzKixcXHMqKFxcZCspXFxzKlxcKVxccyokL2k7XG4gICAgY29uc3QgcmdiYVJlZ2V4ID0gL15cXHMqcmdiYVxccypcXChcXHMqKFxcZCspXFxzKixcXHMqKFxcZCspXFxzKixcXHMqKFxcZCspXFxzKixcXHMqKFxcZD8oPzpcXC5cXGQrKT8pXFxzKlxcKVxccyokL2k7XG4gICAgY29uc3QgcmdiYUNvbG91ciA9IChyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSkgPT4gKHtcbiAgICAgIHJlZCxcbiAgICAgIGdyZWVuLFxuICAgICAgYmx1ZSxcbiAgICAgIGFscGhhXG4gICAgfSk7XG4gICAgY29uc3QgZnJvbVN0cmluZ1ZhbHVlcyA9IChyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSkgPT4ge1xuICAgICAgY29uc3QgciA9IHBhcnNlSW50KHJlZCwgMTApO1xuICAgICAgY29uc3QgZyA9IHBhcnNlSW50KGdyZWVuLCAxMCk7XG4gICAgICBjb25zdCBiID0gcGFyc2VJbnQoYmx1ZSwgMTApO1xuICAgICAgY29uc3QgYSA9IHBhcnNlRmxvYXQoYWxwaGEpO1xuICAgICAgcmV0dXJuIHJnYmFDb2xvdXIociwgZywgYiwgYSk7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tU3RyaW5nID0gcmdiYVN0cmluZyA9PiB7XG4gICAgICBpZiAocmdiYVN0cmluZyA9PT0gJ3RyYW5zcGFyZW50Jykge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShyZ2JhQ29sb3VyKDAsIDAsIDAsIDApKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJnYk1hdGNoID0gcmdiUmVnZXguZXhlYyhyZ2JhU3RyaW5nKTtcbiAgICAgIGlmIChyZ2JNYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShmcm9tU3RyaW5nVmFsdWVzKHJnYk1hdGNoWzFdLCByZ2JNYXRjaFsyXSwgcmdiTWF0Y2hbM10sICcxJykpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmdiYU1hdGNoID0gcmdiYVJlZ2V4LmV4ZWMocmdiYVN0cmluZyk7XG4gICAgICBpZiAocmdiYU1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGZyb21TdHJpbmdWYWx1ZXMocmdiYU1hdGNoWzFdLCByZ2JhTWF0Y2hbMl0sIHJnYmFNYXRjaFszXSwgcmdiYU1hdGNoWzRdKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG5cbiAgICBjb25zdCBhbnlUb0hleCA9IGNvbG9yID0+IGZyb21TdHJpbmckMShjb2xvcikub3JUaHVuaygoKSA9PiBmcm9tU3RyaW5nKGNvbG9yKS5tYXAoZnJvbVJnYmEpKS5nZXRPclRodW5rKCgpID0+IHtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgY2FudmFzLmhlaWdodCA9IDE7XG4gICAgICBjYW52YXMud2lkdGggPSAxO1xuICAgICAgY29uc3QgY2FudmFzQ29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgY2FudmFzQ29udGV4dC5jbGVhclJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgICAgIGNhbnZhc0NvbnRleHQuZmlsbFN0eWxlID0gJyNGRkZGRkYnO1xuICAgICAgY2FudmFzQ29udGV4dC5maWxsU3R5bGUgPSBjb2xvcjtcbiAgICAgIGNhbnZhc0NvbnRleHQuZmlsbFJlY3QoMCwgMCwgMSwgMSk7XG4gICAgICBjb25zdCByZ2JhID0gY2FudmFzQ29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgMSwgMSkuZGF0YTtcbiAgICAgIGNvbnN0IHIgPSByZ2JhWzBdO1xuICAgICAgY29uc3QgZyA9IHJnYmFbMV07XG4gICAgICBjb25zdCBiID0gcmdiYVsyXTtcbiAgICAgIGNvbnN0IGEgPSByZ2JhWzNdO1xuICAgICAgcmV0dXJuIGZyb21SZ2JhKHJnYmFDb2xvdXIociwgZywgYiwgYSkpO1xuICAgIH0pO1xuICAgIGNvbnN0IHJnYmFUb0hleFN0cmluZyA9IGNvbG9yID0+IGZyb21TdHJpbmcoY29sb3IpLm1hcChmcm9tUmdiYSkubWFwKGggPT4gJyMnICsgaC52YWx1ZSkuZ2V0T3IoY29sb3IpO1xuXG4gICAgY29uc3QgQ2VsbCA9IGluaXRpYWwgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gaW5pdGlhbDtcbiAgICAgIGNvbnN0IGdldCA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldCA9IHYgPT4ge1xuICAgICAgICB2YWx1ZSA9IHY7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0LFxuICAgICAgICBzZXRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHNpbmdsZXRvbiA9IGRvUmV2b2tlID0+IHtcbiAgICAgIGNvbnN0IHN1YmplY3QgPSBDZWxsKE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgICBjb25zdCByZXZva2UgPSAoKSA9PiBzdWJqZWN0LmdldCgpLmVhY2goZG9SZXZva2UpO1xuICAgICAgY29uc3QgY2xlYXIgPSAoKSA9PiB7XG4gICAgICAgIHJldm9rZSgpO1xuICAgICAgICBzdWJqZWN0LnNldChPcHRpb25hbC5ub25lKCkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzU2V0ID0gKCkgPT4gc3ViamVjdC5nZXQoKS5pc1NvbWUoKTtcbiAgICAgIGNvbnN0IGdldCA9ICgpID0+IHN1YmplY3QuZ2V0KCk7XG4gICAgICBjb25zdCBzZXQgPSBzID0+IHtcbiAgICAgICAgcmV2b2tlKCk7XG4gICAgICAgIHN1YmplY3Quc2V0KE9wdGlvbmFsLnNvbWUocykpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsZWFyLFxuICAgICAgICBpc1NldCxcbiAgICAgICAgZ2V0LFxuICAgICAgICBzZXRcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCB1bmJpbmRhYmxlID0gKCkgPT4gc2luZ2xldG9uKHMgPT4gcy51bmJpbmQoKSk7XG5cbiAgICBjb25zdCBvblNldHVwVG9nZ2xlID0gKGVkaXRvciwgZm9ybWF0TmFtZSwgZm9ybWF0VmFsdWUpID0+IHtcbiAgICAgIHJldHVybiBhcGkgPT4ge1xuICAgICAgICBjb25zdCBib3VuZENhbGxiYWNrID0gdW5iaW5kYWJsZSgpO1xuICAgICAgICBjb25zdCBpc05vbmUgPSBpc0VtcHR5KGZvcm1hdFZhbHVlKTtcbiAgICAgICAgY29uc3QgaW5pdCA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxzID0gZ2V0Q2VsbHNGcm9tU2VsZWN0aW9uKGVkaXRvcik7XG4gICAgICAgICAgY29uc3QgY2hlY2tOb2RlID0gY2VsbCA9PiBlZGl0b3IuZm9ybWF0dGVyLm1hdGNoKGZvcm1hdE5hbWUsIHsgdmFsdWU6IGZvcm1hdFZhbHVlIH0sIGNlbGwuZG9tLCBpc05vbmUpO1xuICAgICAgICAgIGlmIChpc05vbmUpIHtcbiAgICAgICAgICAgIGFwaS5zZXRBY3RpdmUoIWV4aXN0cyhzZWxlY3RlZENlbGxzLCBjaGVja05vZGUpKTtcbiAgICAgICAgICAgIGJvdW5kQ2FsbGJhY2suc2V0KGVkaXRvci5mb3JtYXR0ZXIuZm9ybWF0Q2hhbmdlZChmb3JtYXROYW1lLCBtYXRjaCA9PiBhcGkuc2V0QWN0aXZlKCFtYXRjaCksIHRydWUpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXBpLnNldEFjdGl2ZShmb3JhbGwoc2VsZWN0ZWRDZWxscywgY2hlY2tOb2RlKSk7XG4gICAgICAgICAgICBib3VuZENhbGxiYWNrLnNldChlZGl0b3IuZm9ybWF0dGVyLmZvcm1hdENoYW5nZWQoZm9ybWF0TmFtZSwgYXBpLnNldEFjdGl2ZSwgZmFsc2UsIHsgdmFsdWU6IGZvcm1hdFZhbHVlIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGVkaXRvci5pbml0aWFsaXplZCA/IGluaXQoKSA6IGVkaXRvci5vbignaW5pdCcsIGluaXQpO1xuICAgICAgICByZXR1cm4gYm91bmRDYWxsYmFjay5jbGVhcjtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBpc0xpc3RHcm91cCA9IGl0ZW0gPT4gaGFzTm9uTnVsbGFibGVLZXkoaXRlbSwgJ21lbnUnKTtcbiAgICBjb25zdCBidWlsZExpc3RJdGVtcyA9IGl0ZW1zID0+IG1hcChpdGVtcywgaXRlbSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gaXRlbS50ZXh0IHx8IGl0ZW0udGl0bGUgfHwgJyc7XG4gICAgICBpZiAoaXNMaXN0R3JvdXAoaXRlbSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0ZXh0LFxuICAgICAgICAgIGl0ZW1zOiBidWlsZExpc3RJdGVtcyhpdGVtLm1lbnUpXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRleHQsXG4gICAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBidWlsZE1lbnVJdGVtcyA9IChlZGl0b3IsIGl0ZW1zLCBmb3JtYXQsIG9uQWN0aW9uKSA9PiBtYXAoaXRlbXMsIGl0ZW0gPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IGl0ZW0udGV4dCB8fCBpdGVtLnRpdGxlO1xuICAgICAgaWYgKGlzTGlzdEdyb3VwKGl0ZW0pKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogJ25lc3RlZG1lbnVpdGVtJyxcbiAgICAgICAgICB0ZXh0LFxuICAgICAgICAgIGdldFN1Ym1lbnVJdGVtczogKCkgPT4gYnVpbGRNZW51SXRlbXMoZWRpdG9yLCBpdGVtLm1lbnUsIGZvcm1hdCwgb25BY3Rpb24pXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRleHQsXG4gICAgICAgICAgdHlwZTogJ3RvZ2dsZW1lbnVpdGVtJyxcbiAgICAgICAgICBvbkFjdGlvbjogKCkgPT4gb25BY3Rpb24oaXRlbS52YWx1ZSksXG4gICAgICAgICAgb25TZXR1cDogb25TZXR1cFRvZ2dsZShlZGl0b3IsIGZvcm1hdCwgaXRlbS52YWx1ZSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBhcHBseVRhYmxlQ2VsbFN0eWxlID0gKGVkaXRvciwgc3R5bGUpID0+IHZhbHVlID0+IHtcbiAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnbWNlVGFibGVBcHBseUNlbGxTdHlsZScsIGZhbHNlLCB7IFtzdHlsZV06IHZhbHVlIH0pO1xuICAgIH07XG4gICAgY29uc3QgZmlsdGVyTm9uZUl0ZW0gPSBsaXN0ID0+IGJpbmQobGlzdCwgaXRlbSA9PiB7XG4gICAgICBpZiAoaXNMaXN0R3JvdXAoaXRlbSkpIHtcbiAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgbWVudTogZmlsdGVyTm9uZUl0ZW0oaXRlbS5tZW51KVxuICAgICAgICAgIH1dO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGlzTm90RW1wdHkoaXRlbS52YWx1ZSkgPyBbaXRlbV0gOiBbXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBnZW5lcmF0ZU1lbnVJdGVtc0NhbGxiYWNrID0gKGVkaXRvciwgaXRlbXMsIGZvcm1hdCwgb25BY3Rpb24pID0+IGNhbGxiYWNrID0+IGNhbGxiYWNrKGJ1aWxkTWVudUl0ZW1zKGVkaXRvciwgaXRlbXMsIGZvcm1hdCwgb25BY3Rpb24pKTtcbiAgICBjb25zdCBidWlsZENvbG9yTWVudSA9IChlZGl0b3IsIGNvbG9yTGlzdCwgc3R5bGUpID0+IHtcbiAgICAgIGNvbnN0IGNvbG9yTWFwID0gbWFwKGNvbG9yTGlzdCwgZW50cnkgPT4gKHtcbiAgICAgICAgdGV4dDogZW50cnkudGl0bGUsXG4gICAgICAgIHZhbHVlOiAnIycgKyBhbnlUb0hleChlbnRyeS52YWx1ZSkudmFsdWUsXG4gICAgICAgIHR5cGU6ICdjaG9pY2VpdGVtJ1xuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgdHlwZTogJ2ZhbmN5bWVudWl0ZW0nLFxuICAgICAgICAgIGZhbmN5dHlwZTogJ2NvbG9yc3dhdGNoJyxcbiAgICAgICAgICBpbml0RGF0YToge1xuICAgICAgICAgICAgY29sb3JzOiBjb2xvck1hcC5sZW5ndGggPiAwID8gY29sb3JNYXAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBhbGxvd0N1c3RvbUNvbG9yczogZmFsc2VcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uQWN0aW9uOiBkYXRhID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YS52YWx1ZSA9PT0gJ3JlbW92ZScgPyAnJyA6IGRhdGEudmFsdWU7XG4gICAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZVRhYmxlQXBwbHlDZWxsU3R5bGUnLCBmYWxzZSwgeyBbc3R5bGVdOiB2YWx1ZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1dO1xuICAgIH07XG4gICAgY29uc3QgY2hhbmdlUm93SGVhZGVyID0gZWRpdG9yID0+ICgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRUeXBlID0gZWRpdG9yLnF1ZXJ5Q29tbWFuZFZhbHVlKCdtY2VUYWJsZVJvd1R5cGUnKTtcbiAgICAgIGNvbnN0IG5ld1R5cGUgPSBjdXJyZW50VHlwZSA9PT0gJ2hlYWRlcicgPyAnYm9keScgOiAnaGVhZGVyJztcbiAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnbWNlVGFibGVSb3dUeXBlJywgZmFsc2UsIHsgdHlwZTogbmV3VHlwZSB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGNoYW5nZUNvbHVtbkhlYWRlciA9IGVkaXRvciA9PiAoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50VHlwZSA9IGVkaXRvci5xdWVyeUNvbW1hbmRWYWx1ZSgnbWNlVGFibGVDb2xUeXBlJyk7XG4gICAgICBjb25zdCBuZXdUeXBlID0gY3VycmVudFR5cGUgPT09ICd0aCcgPyAndGQnIDogJ3RoJztcbiAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnbWNlVGFibGVDb2xUeXBlJywgZmFsc2UsIHsgdHlwZTogbmV3VHlwZSB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0Q2xhc3NMaXN0JDEgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IGJ1aWxkTGlzdEl0ZW1zKGdldENlbGxDbGFzc0xpc3QoZWRpdG9yKSk7XG4gICAgICBpZiAoY2xhc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICBuYW1lOiAnY2xhc3MnLFxuICAgICAgICAgIHR5cGU6ICdsaXN0Ym94JyxcbiAgICAgICAgICBsYWJlbDogJ0NsYXNzJyxcbiAgICAgICAgICBpdGVtczogY2xhc3Nlc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3dpZHRoJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgbGFiZWw6ICdXaWR0aCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdoZWlnaHQnLFxuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBsYWJlbDogJ0hlaWdodCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjZWxsdHlwZScsXG4gICAgICAgIHR5cGU6ICdsaXN0Ym94JyxcbiAgICAgICAgbGFiZWw6ICdDZWxsIHR5cGUnLFxuICAgICAgICBpdGVtczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRleHQ6ICdDZWxsJyxcbiAgICAgICAgICAgIHZhbHVlOiAndGQnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiAnSGVhZGVyIGNlbGwnLFxuICAgICAgICAgICAgdmFsdWU6ICd0aCdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzY29wZScsXG4gICAgICAgIHR5cGU6ICdsaXN0Ym94JyxcbiAgICAgICAgbGFiZWw6ICdTY29wZScsXG4gICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogJ05vbmUnLFxuICAgICAgICAgICAgdmFsdWU6ICcnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiAnUm93JyxcbiAgICAgICAgICAgIHZhbHVlOiAncm93J1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogJ0NvbHVtbicsXG4gICAgICAgICAgICB2YWx1ZTogJ2NvbCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRleHQ6ICdSb3cgZ3JvdXAnLFxuICAgICAgICAgICAgdmFsdWU6ICdyb3dncm91cCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRleHQ6ICdDb2x1bW4gZ3JvdXAnLFxuICAgICAgICAgICAgdmFsdWU6ICdjb2xncm91cCdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdoYWxpZ24nLFxuICAgICAgICB0eXBlOiAnbGlzdGJveCcsXG4gICAgICAgIGxhYmVsOiAnSG9yaXpvbnRhbCBhbGlnbicsXG4gICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogJ05vbmUnLFxuICAgICAgICAgICAgdmFsdWU6ICcnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiAnTGVmdCcsXG4gICAgICAgICAgICB2YWx1ZTogJ2xlZnQnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiAnQ2VudGVyJyxcbiAgICAgICAgICAgIHZhbHVlOiAnY2VudGVyJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogJ1JpZ2h0JyxcbiAgICAgICAgICAgIHZhbHVlOiAncmlnaHQnXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAndmFsaWduJyxcbiAgICAgICAgdHlwZTogJ2xpc3Rib3gnLFxuICAgICAgICBsYWJlbDogJ1ZlcnRpY2FsIGFsaWduJyxcbiAgICAgICAgaXRlbXM6IHZlcnRpY2FsQWxpZ25WYWx1ZXNcbiAgICAgIH1cbiAgICBdO1xuICAgIGNvbnN0IGdldEl0ZW1zJDIgPSBlZGl0b3IgPT4gY2hpbGRyZW4uY29uY2F0KGdldENsYXNzTGlzdCQxKGVkaXRvcikudG9BcnJheSgpKTtcblxuICAgIGNvbnN0IGdldEFkdmFuY2VkVGFiID0gKGVkaXRvciwgZGlhbG9nTmFtZSkgPT4ge1xuICAgICAgY29uc3QgZW1wdHlCb3JkZXJTdHlsZSA9IFt7XG4gICAgICAgICAgdGV4dDogJ1NlbGVjdC4uLicsXG4gICAgICAgICAgdmFsdWU6ICcnXG4gICAgICAgIH1dO1xuICAgICAgY29uc3QgYWR2VGFiSXRlbXMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnYm9yZGVyc3R5bGUnLFxuICAgICAgICAgIHR5cGU6ICdsaXN0Ym94JyxcbiAgICAgICAgICBsYWJlbDogJ0JvcmRlciBzdHlsZScsXG4gICAgICAgICAgaXRlbXM6IGVtcHR5Qm9yZGVyU3R5bGUuY29uY2F0KGJ1aWxkTGlzdEl0ZW1zKGdldFRhYmxlQm9yZGVyU3R5bGVzKGVkaXRvcikpKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2JvcmRlcmNvbG9yJyxcbiAgICAgICAgICB0eXBlOiAnY29sb3JpbnB1dCcsXG4gICAgICAgICAgbGFiZWw6ICdCb3JkZXIgY29sb3InXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnYmFja2dyb3VuZGNvbG9yJyxcbiAgICAgICAgICB0eXBlOiAnY29sb3JpbnB1dCcsXG4gICAgICAgICAgbGFiZWw6ICdCYWNrZ3JvdW5kIGNvbG9yJ1xuICAgICAgICB9XG4gICAgICBdO1xuICAgICAgY29uc3QgYm9yZGVyV2lkdGggPSB7XG4gICAgICAgIG5hbWU6ICdib3JkZXJ3aWR0aCcsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGxhYmVsOiAnQm9yZGVyIHdpZHRoJ1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGl0ZW1zID0gZGlhbG9nTmFtZSA9PT0gJ2NlbGwnID8gW2JvcmRlcldpZHRoXS5jb25jYXQoYWR2VGFiSXRlbXMpIDogYWR2VGFiSXRlbXM7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0aXRsZTogJ0FkdmFuY2VkJyxcbiAgICAgICAgbmFtZTogJ2FkdmFuY2VkJyxcbiAgICAgICAgaXRlbXNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IG5vcm1hbCA9IChlZGl0b3IsIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBzZXRBdHRyaWIgPSAoYXR0ciwgdmFsdWUpID0+IHtcbiAgICAgICAgZG9tLnNldEF0dHJpYihlbGVtZW50LCBhdHRyLCB2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0U3R5bGUgPSAocHJvcCwgdmFsdWUpID0+IHtcbiAgICAgICAgZG9tLnNldFN0eWxlKGVsZW1lbnQsIHByb3AsIHZhbHVlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXRGb3JtYXQgPSAoZm9ybWF0TmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgICAgIGVkaXRvci5mb3JtYXR0ZXIucmVtb3ZlKGZvcm1hdE5hbWUsIHsgdmFsdWU6IG51bGwgfSwgZWxlbWVudCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWRpdG9yLmZvcm1hdHRlci5hcHBseShmb3JtYXROYW1lLCB7IHZhbHVlIH0sIGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0QXR0cmliLFxuICAgICAgICBzZXRTdHlsZSxcbiAgICAgICAgc2V0Rm9ybWF0XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgRG9tTW9kaWZpZXIgPSB7IG5vcm1hbCB9O1xuXG4gICAgY29uc3QgaXNIZWFkZXJDZWxsID0gaXNUYWcoJ3RoJyk7XG4gICAgY29uc3QgZ2V0Um93SGVhZGVyVHlwZSA9IChpc0hlYWRlclJvdywgaXNIZWFkZXJDZWxscykgPT4ge1xuICAgICAgaWYgKGlzSGVhZGVyUm93ICYmIGlzSGVhZGVyQ2VsbHMpIHtcbiAgICAgICAgcmV0dXJuICdzZWN0aW9uQ2VsbHMnO1xuICAgICAgfSBlbHNlIGlmIChpc0hlYWRlclJvdykge1xuICAgICAgICByZXR1cm4gJ3NlY3Rpb24nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICdjZWxscyc7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRSb3dUeXBlJDEgPSByb3cgPT4ge1xuICAgICAgY29uc3QgaXNIZWFkZXJSb3cgPSByb3cuc2VjdGlvbiA9PT0gJ3RoZWFkJztcbiAgICAgIGNvbnN0IGlzSGVhZGVyQ2VsbHMgPSBpcyhmaW5kQ29tbW9uQ2VsbFR5cGUocm93LmNlbGxzKSwgJ3RoJyk7XG4gICAgICBpZiAocm93LnNlY3Rpb24gPT09ICd0Zm9vdCcpIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogJ2Zvb3RlcicgfTtcbiAgICAgIH0gZWxzZSBpZiAoaXNIZWFkZXJSb3cgfHwgaXNIZWFkZXJDZWxscykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6ICdoZWFkZXInLFxuICAgICAgICAgIHN1YlR5cGU6IGdldFJvd0hlYWRlclR5cGUoaXNIZWFkZXJSb3csIGlzSGVhZGVyQ2VsbHMpXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4geyB0eXBlOiAnYm9keScgfTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRDb21tb25DZWxsVHlwZSA9IGNlbGxzID0+IHtcbiAgICAgIGNvbnN0IGhlYWRlckNlbGxzID0gZmlsdGVyKGNlbGxzLCBjZWxsID0+IGlzSGVhZGVyQ2VsbChjZWxsLmVsZW1lbnQpKTtcbiAgICAgIGlmIChoZWFkZXJDZWxscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoJ3RkJyk7XG4gICAgICB9IGVsc2UgaWYgKGhlYWRlckNlbGxzLmxlbmd0aCA9PT0gY2VsbHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKCd0aCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRDb21tb25Sb3dUeXBlID0gcm93cyA9PiB7XG4gICAgICBjb25zdCByb3dUeXBlcyA9IG1hcChyb3dzLCByb3cgPT4gZ2V0Um93VHlwZSQxKHJvdykudHlwZSk7XG4gICAgICBjb25zdCBoYXNIZWFkZXIgPSBjb250YWlucyhyb3dUeXBlcywgJ2hlYWRlcicpO1xuICAgICAgY29uc3QgaGFzRm9vdGVyID0gY29udGFpbnMocm93VHlwZXMsICdmb290ZXInKTtcbiAgICAgIGlmICghaGFzSGVhZGVyICYmICFoYXNGb290ZXIpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoJ2JvZHknKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGhhc0JvZHkgPSBjb250YWlucyhyb3dUeXBlcywgJ2JvZHknKTtcbiAgICAgICAgaWYgKGhhc0hlYWRlciAmJiAhaGFzQm9keSAmJiAhaGFzRm9vdGVyKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoJ2hlYWRlcicpO1xuICAgICAgICB9IGVsc2UgaWYgKCFoYXNIZWFkZXIgJiYgIWhhc0JvZHkgJiYgaGFzRm9vdGVyKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoJ2Zvb3RlcicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY2FjaGVkID0gZiA9PiB7XG4gICAgICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gICAgICBsZXQgcjtcbiAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgciA9IGYuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBmaW5kSW5XYXJlaG91c2UgPSAod2FyZWhvdXNlLCBlbGVtZW50KSA9PiBmaW5kTWFwKHdhcmVob3VzZS5hbGwsIHIgPT4gZmluZChyLmNlbGxzLCBlID0+IGVxKGVsZW1lbnQsIGUuZWxlbWVudCkpKTtcbiAgICBjb25zdCBleHRyYWN0Q2VsbHMgPSAod2FyZWhvdXNlLCB0YXJnZXQsIHByZWRpY2F0ZSkgPT4ge1xuICAgICAgY29uc3QgZGV0YWlscyA9IG1hcCh0YXJnZXQuc2VsZWN0aW9uLCBjZWxsJDEgPT4ge1xuICAgICAgICByZXR1cm4gY2VsbChjZWxsJDEpLmJpbmQobGMgPT4gZmluZEluV2FyZWhvdXNlKHdhcmVob3VzZSwgbGMpKS5maWx0ZXIocHJlZGljYXRlKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2VsbHMgPSBjYXQoZGV0YWlscyk7XG4gICAgICByZXR1cm4gc29tZUlmKGNlbGxzLmxlbmd0aCA+IDAsIGNlbGxzKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uTWVyZ2FibGUgPSAoX3dhcmVob3VzZSwgdGFyZ2V0KSA9PiB0YXJnZXQubWVyZ2FibGU7XG4gICAgY29uc3Qgb25Vbm1lcmdhYmxlID0gKF93YXJlaG91c2UsIHRhcmdldCkgPT4gdGFyZ2V0LnVubWVyZ2FibGU7XG4gICAgY29uc3Qgb25DZWxscyA9ICh3YXJlaG91c2UsIHRhcmdldCkgPT4gZXh0cmFjdENlbGxzKHdhcmVob3VzZSwgdGFyZ2V0LCBhbHdheXMpO1xuICAgIGNvbnN0IGlzVW5sb2NrZWRUYWJsZUNlbGwgPSAod2FyZWhvdXNlLCBjZWxsKSA9PiBmaW5kSW5XYXJlaG91c2Uod2FyZWhvdXNlLCBjZWxsKS5leGlzdHMoZGV0YWlsID0+ICFkZXRhaWwuaXNMb2NrZWQpO1xuICAgIGNvbnN0IGFsbFVubG9ja2VkID0gKHdhcmVob3VzZSwgY2VsbHMpID0+IGZvcmFsbChjZWxscywgY2VsbCA9PiBpc1VubG9ja2VkVGFibGVDZWxsKHdhcmVob3VzZSwgY2VsbCkpO1xuICAgIGNvbnN0IG9uVW5sb2NrZWRNZXJnYWJsZSA9ICh3YXJlaG91c2UsIHRhcmdldCkgPT4gb25NZXJnYWJsZSh3YXJlaG91c2UsIHRhcmdldCkuZmlsdGVyKG1lcmdlYWJsZSA9PiBhbGxVbmxvY2tlZCh3YXJlaG91c2UsIG1lcmdlYWJsZS5jZWxscykpO1xuICAgIGNvbnN0IG9uVW5sb2NrZWRVbm1lcmdhYmxlID0gKHdhcmVob3VzZSwgdGFyZ2V0KSA9PiBvblVubWVyZ2FibGUod2FyZWhvdXNlLCB0YXJnZXQpLmZpbHRlcihjZWxscyA9PiBhbGxVbmxvY2tlZCh3YXJlaG91c2UsIGNlbGxzKSk7XG5cbiAgICBjb25zdCBnZW5lcmF0ZSA9IGNhc2VzID0+IHtcbiAgICAgIGlmICghaXNBcnJheShjYXNlcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYXNlcyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICB9XG4gICAgICBpZiAoY2FzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgY2FzZScpO1xuICAgICAgfVxuICAgICAgY29uc3QgY29uc3RydWN0b3JzID0gW107XG4gICAgICBjb25zdCBhZHQgPSB7fTtcbiAgICAgIGVhY2goY2FzZXMsIChhY2FzZSwgY291bnQpID0+IHtcbiAgICAgICAgY29uc3Qga2V5cyQxID0ga2V5cyhhY2FzZSk7XG4gICAgICAgIGlmIChrZXlzJDEubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvbmUgYW5kIG9ubHkgb25lIG5hbWUgcGVyIGNhc2UnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXkgPSBrZXlzJDFbMF07XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYWNhc2Vba2V5XTtcbiAgICAgICAgaWYgKGFkdFtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2R1cGxpY2F0ZSBrZXkgZGV0ZWN0ZWQ6JyArIGtleSk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnY2F0YScpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBoYXZlIGEgY2FzZSBuYW1lZCBjYXRhIChzb3JyeSknKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhc2UgYXJndW1lbnRzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdHJ1Y3RvcnMucHVzaChrZXkpO1xuICAgICAgICBhZHRba2V5XSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgY29uc3QgYXJnTGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gICAgICAgICAgaWYgKGFyZ0xlbmd0aCAhPT0gdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dyb25nIG51bWJlciBvZiBhcmd1bWVudHMgdG8gY2FzZSAnICsga2V5ICsgJy4gRXhwZWN0ZWQgJyArIHZhbHVlLmxlbmd0aCArICcgKCcgKyB2YWx1ZSArICcpLCBnb3QgJyArIGFyZ0xlbmd0aCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG1hdGNoID0gYnJhbmNoZXMgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnJhbmNoS2V5cyA9IGtleXMoYnJhbmNoZXMpO1xuICAgICAgICAgICAgaWYgKGNvbnN0cnVjdG9ycy5sZW5ndGggIT09IGJyYW5jaEtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBtYXRjaC4gRXhwZWN0ZWQ6ICcgKyBjb25zdHJ1Y3RvcnMuam9pbignLCcpICsgJ1xcbkFjdHVhbDogJyArIGJyYW5jaEtleXMuam9pbignLCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFsbFJlcWQgPSBmb3JhbGwoY29uc3RydWN0b3JzLCByZXFLZXkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gY29udGFpbnMoYnJhbmNoS2V5cywgcmVxS2V5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFhbGxSZXFkKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGFsbCBicmFuY2hlcyB3ZXJlIHNwZWNpZmllZCB3aGVuIHVzaW5nIG1hdGNoLiBTcGVjaWZpZWQ6ICcgKyBicmFuY2hLZXlzLmpvaW4oJywgJykgKyAnXFxuUmVxdWlyZWQ6ICcgKyBjb25zdHJ1Y3RvcnMuam9pbignLCAnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYnJhbmNoZXNba2V5XS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmb2xkOiAoLi4uZm9sZEFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGZvbGRBcmdzLmxlbmd0aCAhPT0gY2FzZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIHRvIGZvbGQuIEV4cGVjdGVkICcgKyBjYXNlcy5sZW5ndGggKyAnLCBnb3QgJyArIGZvbGRBcmdzLmxlbmd0aCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZm9sZEFyZ3NbY291bnRdO1xuICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1hdGNoLFxuICAgICAgICAgICAgbG9nOiBsYWJlbCA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxhYmVsLCB7XG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3JzLFxuICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yOiBrZXksXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBhcmdzXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhZHQ7XG4gICAgfTtcbiAgICBjb25zdCBBZHQgPSB7IGdlbmVyYXRlIH07XG5cbiAgICBjb25zdCBhZHQgPSBBZHQuZ2VuZXJhdGUoW1xuICAgICAgeyBub25lOiBbXSB9LFxuICAgICAgeyBvbmx5OiBbJ2luZGV4J10gfSxcbiAgICAgIHtcbiAgICAgICAgbGVmdDogW1xuICAgICAgICAgICdpbmRleCcsXG4gICAgICAgICAgJ25leHQnXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1pZGRsZTogW1xuICAgICAgICAgICdwcmV2JyxcbiAgICAgICAgICAnaW5kZXgnLFxuICAgICAgICAgICduZXh0J1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICByaWdodDogW1xuICAgICAgICAgICdwcmV2JyxcbiAgICAgICAgICAnaW5kZXgnXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdKTtcbiAgICAoeyAuLi5hZHQgfSk7XG5cbiAgICBjb25zdCBvcEdldFJvd3NUeXBlID0gKHRhYmxlLCB0YXJnZXQpID0+IHtcbiAgICAgIGNvbnN0IGhvdXNlID0gV2FyZWhvdXNlLmZyb21UYWJsZSh0YWJsZSk7XG4gICAgICBjb25zdCBkZXRhaWxzID0gb25DZWxscyhob3VzZSwgdGFyZ2V0KTtcbiAgICAgIHJldHVybiBkZXRhaWxzLmJpbmQoc2VsZWN0ZWRDZWxscyA9PiB7XG4gICAgICAgIGNvbnN0IGxhc3RTZWxlY3RlZENlbGwgPSBzZWxlY3RlZENlbGxzW3NlbGVjdGVkQ2VsbHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IG1pblJvd1JhbmdlID0gc2VsZWN0ZWRDZWxsc1swXS5yb3c7XG4gICAgICAgIGNvbnN0IG1heFJvd1JhbmdlID0gbGFzdFNlbGVjdGVkQ2VsbC5yb3cgKyBsYXN0U2VsZWN0ZWRDZWxsLnJvd3NwYW47XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IGhvdXNlLmFsbC5zbGljZShtaW5Sb3dSYW5nZSwgbWF4Um93UmFuZ2UpO1xuICAgICAgICByZXR1cm4gZmluZENvbW1vblJvd1R5cGUoc2VsZWN0ZWRSb3dzKTtcbiAgICAgIH0pLmdldE9yKCcnKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFJvd3NUeXBlID0gb3BHZXRSb3dzVHlwZTtcblxuICAgIGNvbnN0IHJnYlRvSGV4ID0gdmFsdWUgPT4gc3RhcnRzV2l0aCh2YWx1ZSwgJ3JnYicpID8gcmdiYVRvSGV4U3RyaW5nKHZhbHVlKSA6IHZhbHVlO1xuICAgIGNvbnN0IGV4dHJhY3RBZHZhbmNlZFN0eWxlcyA9IGVsbSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWxtKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJvcmRlcndpZHRoOiBnZXRSYXcoZWxlbWVudCwgJ2JvcmRlci13aWR0aCcpLmdldE9yKCcnKSxcbiAgICAgICAgYm9yZGVyc3R5bGU6IGdldFJhdyhlbGVtZW50LCAnYm9yZGVyLXN0eWxlJykuZ2V0T3IoJycpLFxuICAgICAgICBib3JkZXJjb2xvcjogZ2V0UmF3KGVsZW1lbnQsICdib3JkZXItY29sb3InKS5tYXAocmdiVG9IZXgpLmdldE9yKCcnKSxcbiAgICAgICAgYmFja2dyb3VuZGNvbG9yOiBnZXRSYXcoZWxlbWVudCwgJ2JhY2tncm91bmQtY29sb3InKS5tYXAocmdiVG9IZXgpLmdldE9yKCcnKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNoYXJlZFZhbHVlcyA9IGRhdGEgPT4ge1xuICAgICAgY29uc3QgYmFzZURhdGEgPSBkYXRhWzBdO1xuICAgICAgY29uc3QgY29tcGFyaXNvbkRhdGEgPSBkYXRhLnNsaWNlKDEpO1xuICAgICAgZWFjaChjb21wYXJpc29uRGF0YSwgaXRlbXMgPT4ge1xuICAgICAgICBlYWNoKGtleXMoYmFzZURhdGEpLCBrZXkgPT4ge1xuICAgICAgICAgIGVhY2gkMShpdGVtcywgKGl0ZW1WYWx1ZSwgaXRlbUtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcGFyaXNvblZhbHVlID0gYmFzZURhdGFba2V5XTtcbiAgICAgICAgICAgIGlmIChjb21wYXJpc29uVmFsdWUgIT09ICcnICYmIGtleSA9PT0gaXRlbUtleSkge1xuICAgICAgICAgICAgICBpZiAoY29tcGFyaXNvblZhbHVlICE9PSBpdGVtVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBiYXNlRGF0YVtrZXldID0gJyc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBiYXNlRGF0YTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEFsaWdubWVudCA9IChmb3JtYXRzLCBmb3JtYXROYW1lLCBlZGl0b3IsIGVsbSkgPT4gZmluZChmb3JtYXRzLCBuYW1lID0+ICFpc1VuZGVmaW5lZChlZGl0b3IuZm9ybWF0dGVyLm1hdGNoTm9kZShlbG0sIGZvcm1hdE5hbWUgKyBuYW1lKSkpLmdldE9yKCcnKTtcbiAgICBjb25zdCBnZXRIQWxpZ25tZW50ID0gY3VycnkoZ2V0QWxpZ25tZW50LCBbXG4gICAgICAnbGVmdCcsXG4gICAgICAnY2VudGVyJyxcbiAgICAgICdyaWdodCdcbiAgICBdLCAnYWxpZ24nKTtcbiAgICBjb25zdCBnZXRWQWxpZ25tZW50ID0gY3VycnkoZ2V0QWxpZ25tZW50LCBbXG4gICAgICAndG9wJyxcbiAgICAgICdtaWRkbGUnLFxuICAgICAgJ2JvdHRvbSdcbiAgICBdLCAndmFsaWduJyk7XG4gICAgY29uc3QgZXh0cmFjdERhdGFGcm9tU2V0dGluZ3MgPSAoZWRpdG9yLCBoYXNBZHZUYWJsZVRhYikgPT4ge1xuICAgICAgY29uc3Qgc3R5bGUgPSBnZXREZWZhdWx0U3R5bGVzKGVkaXRvcik7XG4gICAgICBjb25zdCBhdHRycyA9IGdldERlZmF1bHRBdHRyaWJ1dGVzKGVkaXRvcik7XG4gICAgICBjb25zdCBleHRyYWN0QWR2YW5jZWRTdHlsZURhdGEgPSAoKSA9PiAoe1xuICAgICAgICBib3JkZXJzdHlsZTogZ2V0JDQoc3R5bGUsICdib3JkZXItc3R5bGUnKS5nZXRPcignJyksXG4gICAgICAgIGJvcmRlcmNvbG9yOiByZ2JUb0hleChnZXQkNChzdHlsZSwgJ2JvcmRlci1jb2xvcicpLmdldE9yKCcnKSksXG4gICAgICAgIGJhY2tncm91bmRjb2xvcjogcmdiVG9IZXgoZ2V0JDQoc3R5bGUsICdiYWNrZ3JvdW5kLWNvbG9yJykuZ2V0T3IoJycpKVxuICAgICAgfSk7XG4gICAgICBjb25zdCBkZWZhdWx0RGF0YSA9IHtcbiAgICAgICAgaGVpZ2h0OiAnJyxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgY2VsbHNwYWNpbmc6ICcnLFxuICAgICAgICBjZWxscGFkZGluZzogJycsXG4gICAgICAgIGNhcHRpb246IGZhbHNlLFxuICAgICAgICBjbGFzczogJycsXG4gICAgICAgIGFsaWduOiAnJyxcbiAgICAgICAgYm9yZGVyOiAnJ1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldEJvcmRlciA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgYm9yZGVyV2lkdGggPSBzdHlsZVsnYm9yZGVyLXdpZHRoJ107XG4gICAgICAgIGlmIChzaG91bGRTdHlsZVdpdGhDc3MoZWRpdG9yKSAmJiBib3JkZXJXaWR0aCkge1xuICAgICAgICAgIHJldHVybiB7IGJvcmRlcjogYm9yZGVyV2lkdGggfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0JDQoYXR0cnMsICdib3JkZXInKS5mb2xkKCgpID0+ICh7fSksIGJvcmRlciA9PiAoeyBib3JkZXIgfSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkdlN0eWxlID0gaGFzQWR2VGFibGVUYWIgPyBleHRyYWN0QWR2YW5jZWRTdHlsZURhdGEoKSA6IHt9O1xuICAgICAgY29uc3QgZ2V0Q2VsbFBhZGRpbmdDZWxsU3BhY2luZyA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgc3BhY2luZyA9IGdldCQ0KHN0eWxlLCAnYm9yZGVyLXNwYWNpbmcnKS5vcihnZXQkNChhdHRycywgJ2NlbGxzcGFjaW5nJykpLmZvbGQoKCkgPT4gKHt9KSwgY2VsbHNwYWNpbmcgPT4gKHsgY2VsbHNwYWNpbmcgfSkpO1xuICAgICAgICBjb25zdCBwYWRkaW5nID0gZ2V0JDQoc3R5bGUsICdib3JkZXItcGFkZGluZycpLm9yKGdldCQ0KGF0dHJzLCAnY2VsbHBhZGRpbmcnKSkuZm9sZCgoKSA9PiAoe30pLCBjZWxscGFkZGluZyA9PiAoeyBjZWxscGFkZGluZyB9KSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3BhY2luZyxcbiAgICAgICAgICAuLi5wYWRkaW5nXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgLi4uZGVmYXVsdERhdGEsXG4gICAgICAgIC4uLnN0eWxlLFxuICAgICAgICAuLi5hdHRycyxcbiAgICAgICAgLi4uYWR2U3R5bGUsXG4gICAgICAgIC4uLmdldEJvcmRlcigpLFxuICAgICAgICAuLi5nZXRDZWxsUGFkZGluZ0NlbGxTcGFjaW5nKClcbiAgICAgIH07XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFJvd1R5cGUgPSBlbG0gPT4gdGFibGUoU3VnYXJFbGVtZW50LmZyb21Eb20oZWxtKSkubWFwKHRhYmxlID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHsgc2VsZWN0aW9uOiBmcm9tRG9tKGVsbS5jZWxscykgfTtcbiAgICAgIHJldHVybiBnZXRSb3dzVHlwZSh0YWJsZSwgdGFyZ2V0KTtcbiAgICB9KS5nZXRPcignJyk7XG4gICAgY29uc3QgZXh0cmFjdERhdGFGcm9tVGFibGVFbGVtZW50ID0gKGVkaXRvciwgZWxtLCBoYXNBZHZUYWJsZVRhYikgPT4ge1xuICAgICAgY29uc3QgZ2V0Qm9yZGVyID0gKGRvbSwgZWxtKSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdEJvcmRlcldpZHRoID0gZ2V0UmF3KFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsbSksICdib3JkZXItd2lkdGgnKTtcbiAgICAgICAgaWYgKHNob3VsZFN0eWxlV2l0aENzcyhlZGl0b3IpICYmIG9wdEJvcmRlcldpZHRoLmlzU29tZSgpKSB7XG4gICAgICAgICAgcmV0dXJuIG9wdEJvcmRlcldpZHRoLmdldE9yKCcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG9tLmdldEF0dHJpYihlbG0sICdib3JkZXInKSB8fCBnZXRURFRIT3ZlcmFsbFN0eWxlKGVkaXRvci5kb20sIGVsbSwgJ2JvcmRlci13aWR0aCcpIHx8IGdldFREVEhPdmVyYWxsU3R5bGUoZWRpdG9yLmRvbSwgZWxtLCAnYm9yZGVyJykgfHwgJyc7XG4gICAgICB9O1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IGNlbGxzcGFjaW5nID0gc2hvdWxkU3R5bGVXaXRoQ3NzKGVkaXRvcikgPyBkb20uZ2V0U3R5bGUoZWxtLCAnYm9yZGVyLXNwYWNpbmcnKSB8fCBkb20uZ2V0QXR0cmliKGVsbSwgJ2NlbGxzcGFjaW5nJykgOiBkb20uZ2V0QXR0cmliKGVsbSwgJ2NlbGxzcGFjaW5nJykgfHwgZG9tLmdldFN0eWxlKGVsbSwgJ2JvcmRlci1zcGFjaW5nJyk7XG4gICAgICBjb25zdCBjZWxscGFkZGluZyA9IHNob3VsZFN0eWxlV2l0aENzcyhlZGl0b3IpID8gZ2V0VERUSE92ZXJhbGxTdHlsZShkb20sIGVsbSwgJ3BhZGRpbmcnKSB8fCBkb20uZ2V0QXR0cmliKGVsbSwgJ2NlbGxwYWRkaW5nJykgOiBkb20uZ2V0QXR0cmliKGVsbSwgJ2NlbGxwYWRkaW5nJykgfHwgZ2V0VERUSE92ZXJhbGxTdHlsZShkb20sIGVsbSwgJ3BhZGRpbmcnKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiBkb20uZ2V0U3R5bGUoZWxtLCAnd2lkdGgnKSB8fCBkb20uZ2V0QXR0cmliKGVsbSwgJ3dpZHRoJyksXG4gICAgICAgIGhlaWdodDogZG9tLmdldFN0eWxlKGVsbSwgJ2hlaWdodCcpIHx8IGRvbS5nZXRBdHRyaWIoZWxtLCAnaGVpZ2h0JyksXG4gICAgICAgIGNlbGxzcGFjaW5nOiBjZWxsc3BhY2luZyAhPT0gbnVsbCAmJiBjZWxsc3BhY2luZyAhPT0gdm9pZCAwID8gY2VsbHNwYWNpbmcgOiAnJyxcbiAgICAgICAgY2VsbHBhZGRpbmc6IGNlbGxwYWRkaW5nICE9PSBudWxsICYmIGNlbGxwYWRkaW5nICE9PSB2b2lkIDAgPyBjZWxscGFkZGluZyA6ICcnLFxuICAgICAgICBib3JkZXI6IGdldEJvcmRlcihkb20sIGVsbSksXG4gICAgICAgIGNhcHRpb246ICEhZG9tLnNlbGVjdCgnY2FwdGlvbicsIGVsbSlbMF0sXG4gICAgICAgIGNsYXNzOiBkb20uZ2V0QXR0cmliKGVsbSwgJ2NsYXNzJywgJycpLFxuICAgICAgICBhbGlnbjogZ2V0SEFsaWdubWVudChlZGl0b3IsIGVsbSksXG4gICAgICAgIC4uLmhhc0FkdlRhYmxlVGFiID8gZXh0cmFjdEFkdmFuY2VkU3R5bGVzKGVsbSkgOiB7fVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGV4dHJhY3REYXRhRnJvbVJvd0VsZW1lbnQgPSAoZWRpdG9yLCBlbG0sIGhhc0FkdmFuY2VkUm93VGFiKSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0OiBkb20uZ2V0U3R5bGUoZWxtLCAnaGVpZ2h0JykgfHwgZG9tLmdldEF0dHJpYihlbG0sICdoZWlnaHQnKSxcbiAgICAgICAgY2xhc3M6IGRvbS5nZXRBdHRyaWIoZWxtLCAnY2xhc3MnLCAnJyksXG4gICAgICAgIHR5cGU6IGdldFJvd1R5cGUoZWxtKSxcbiAgICAgICAgYWxpZ246IGdldEhBbGlnbm1lbnQoZWRpdG9yLCBlbG0pLFxuICAgICAgICAuLi5oYXNBZHZhbmNlZFJvd1RhYiA/IGV4dHJhY3RBZHZhbmNlZFN0eWxlcyhlbG0pIDoge31cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBleHRyYWN0RGF0YUZyb21DZWxsRWxlbWVudCA9IChlZGl0b3IsIGNlbGwsIGhhc0FkdmFuY2VkQ2VsbFRhYiwgY29sdW1uKSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgY29uc3QgY29sRWxtID0gY29sdW1uLmdldE9yKGNlbGwpO1xuICAgICAgY29uc3QgZ2V0U3R5bGUgPSAoZWxlbWVudCwgc3R5bGUpID0+IGRvbS5nZXRTdHlsZShlbGVtZW50LCBzdHlsZSkgfHwgZG9tLmdldEF0dHJpYihlbGVtZW50LCBzdHlsZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogZ2V0U3R5bGUoY29sRWxtLCAnd2lkdGgnKSxcbiAgICAgICAgaGVpZ2h0OiBnZXRTdHlsZShjZWxsLCAnaGVpZ2h0JyksXG4gICAgICAgIHNjb3BlOiBkb20uZ2V0QXR0cmliKGNlbGwsICdzY29wZScpLFxuICAgICAgICBjZWxsdHlwZTogZ2V0Tm9kZU5hbWUoY2VsbCksXG4gICAgICAgIGNsYXNzOiBkb20uZ2V0QXR0cmliKGNlbGwsICdjbGFzcycsICcnKSxcbiAgICAgICAgaGFsaWduOiBnZXRIQWxpZ25tZW50KGVkaXRvciwgY2VsbCksXG4gICAgICAgIHZhbGlnbjogZ2V0VkFsaWdubWVudChlZGl0b3IsIGNlbGwpLFxuICAgICAgICAuLi5oYXNBZHZhbmNlZENlbGxUYWIgPyBleHRyYWN0QWR2YW5jZWRTdHlsZXMoY2VsbCkgOiB7fVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0U2VsZWN0ZWRDZWxscyA9ICh0YWJsZSwgY2VsbHMpID0+IHtcbiAgICAgIGNvbnN0IHdhcmVob3VzZSA9IFdhcmVob3VzZS5mcm9tVGFibGUodGFibGUpO1xuICAgICAgY29uc3QgYWxsQ2VsbHMgPSBXYXJlaG91c2UuanVzdENlbGxzKHdhcmVob3VzZSk7XG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IGZpbHRlcihhbGxDZWxscywgY2VsbEEgPT4gZXhpc3RzKGNlbGxzLCBjZWxsQiA9PiBlcShjZWxsQS5lbGVtZW50LCBjZWxsQikpKTtcbiAgICAgIHJldHVybiBtYXAoZmlsdGVyZWQsIGNlbGwgPT4gKHtcbiAgICAgICAgZWxlbWVudDogY2VsbC5lbGVtZW50LmRvbSxcbiAgICAgICAgY29sdW1uOiBXYXJlaG91c2UuZ2V0Q29sdW1uQXQod2FyZWhvdXNlLCBjZWxsLmNvbHVtbikubWFwKGNvbCA9PiBjb2wuZWxlbWVudC5kb20pXG4gICAgICB9KSk7XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVTaW1wbGVQcm9wcyQxID0gKG1vZGlmaWVyLCBjb2xNb2RpZmllciwgZGF0YSwgc2hvdWxkVXBkYXRlKSA9PiB7XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlKCdzY29wZScpKSB7XG4gICAgICAgIG1vZGlmaWVyLnNldEF0dHJpYignc2NvcGUnLCBkYXRhLnNjb3BlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRVcGRhdGUoJ2NsYXNzJykpIHtcbiAgICAgICAgbW9kaWZpZXIuc2V0QXR0cmliKCdjbGFzcycsIGRhdGEuY2xhc3MpO1xuICAgICAgfVxuICAgICAgaWYgKHNob3VsZFVwZGF0ZSgnaGVpZ2h0JykpIHtcbiAgICAgICAgbW9kaWZpZXIuc2V0U3R5bGUoJ2hlaWdodCcsIGFkZFB4U3VmZml4KGRhdGEuaGVpZ2h0KSk7XG4gICAgICB9XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlKCd3aWR0aCcpKSB7XG4gICAgICAgIGNvbE1vZGlmaWVyLnNldFN0eWxlKCd3aWR0aCcsIGFkZFB4U3VmZml4KGRhdGEud2lkdGgpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHVwZGF0ZUFkdmFuY2VkUHJvcHMkMSA9IChtb2RpZmllciwgZGF0YSwgc2hvdWxkVXBkYXRlKSA9PiB7XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlKCdiYWNrZ3JvdW5kY29sb3InKSkge1xuICAgICAgICBtb2RpZmllci5zZXRGb3JtYXQoJ3RhYmxlY2VsbGJhY2tncm91bmRjb2xvcicsIGRhdGEuYmFja2dyb3VuZGNvbG9yKTtcbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRVcGRhdGUoJ2JvcmRlcmNvbG9yJykpIHtcbiAgICAgICAgbW9kaWZpZXIuc2V0Rm9ybWF0KCd0YWJsZWNlbGxib3JkZXJjb2xvcicsIGRhdGEuYm9yZGVyY29sb3IpO1xuICAgICAgfVxuICAgICAgaWYgKHNob3VsZFVwZGF0ZSgnYm9yZGVyc3R5bGUnKSkge1xuICAgICAgICBtb2RpZmllci5zZXRGb3JtYXQoJ3RhYmxlY2VsbGJvcmRlcnN0eWxlJywgZGF0YS5ib3JkZXJzdHlsZSk7XG4gICAgICB9XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlKCdib3JkZXJ3aWR0aCcpKSB7XG4gICAgICAgIG1vZGlmaWVyLnNldEZvcm1hdCgndGFibGVjZWxsYm9yZGVyd2lkdGgnLCBhZGRQeFN1ZmZpeChkYXRhLmJvcmRlcndpZHRoKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhcHBseVN0eWxlRGF0YSQxID0gKGVkaXRvciwgY2VsbHMsIGRhdGEsIHdhc0NoYW5nZWQpID0+IHtcbiAgICAgIGNvbnN0IGlzU2luZ2xlQ2VsbCA9IGNlbGxzLmxlbmd0aCA9PT0gMTtcbiAgICAgIGVhY2goY2VsbHMsIGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBjZWxsRWxtID0gaXRlbS5lbGVtZW50O1xuICAgICAgICBjb25zdCBzaG91bGRPdmVycmlkZUN1cnJlbnRWYWx1ZSA9IGlzU2luZ2xlQ2VsbCA/IGFsd2F5cyA6IHdhc0NoYW5nZWQ7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVyID0gRG9tTW9kaWZpZXIubm9ybWFsKGVkaXRvciwgY2VsbEVsbSk7XG4gICAgICAgIGNvbnN0IGNvbE1vZGlmaWVyID0gaXRlbS5jb2x1bW4ubWFwKGNvbCA9PiBEb21Nb2RpZmllci5ub3JtYWwoZWRpdG9yLCBjb2wpKS5nZXRPcihtb2RpZmllcik7XG4gICAgICAgIHVwZGF0ZVNpbXBsZVByb3BzJDEobW9kaWZpZXIsIGNvbE1vZGlmaWVyLCBkYXRhLCBzaG91bGRPdmVycmlkZUN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIGlmIChoYXNBZHZhbmNlZENlbGxUYWIoZWRpdG9yKSkge1xuICAgICAgICAgIHVwZGF0ZUFkdmFuY2VkUHJvcHMkMShtb2RpZmllciwgZGF0YSwgc2hvdWxkT3ZlcnJpZGVDdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3YXNDaGFuZ2VkKCdoYWxpZ24nKSkge1xuICAgICAgICAgIHNldEFsaWduKGVkaXRvciwgY2VsbEVsbSwgZGF0YS5oYWxpZ24pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3YXNDaGFuZ2VkKCd2YWxpZ24nKSkge1xuICAgICAgICAgIHNldFZBbGlnbihlZGl0b3IsIGNlbGxFbG0sIGRhdGEudmFsaWduKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBhcHBseVN0cnVjdHVyZURhdGEkMSA9IChlZGl0b3IsIGRhdGEpID0+IHtcbiAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnbWNlVGFibGVDZWxsVHlwZScsIGZhbHNlLCB7XG4gICAgICAgIHR5cGU6IGRhdGEuY2VsbHR5cGUsXG4gICAgICAgIG5vX2V2ZW50czogdHJ1ZVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBhcHBseUNlbGxEYXRhID0gKGVkaXRvciwgY2VsbHMsIG9sZERhdGEsIGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IG1vZGlmaWVkRGF0YSA9IGZpbHRlciQxKGRhdGEsICh2YWx1ZSwga2V5KSA9PiBvbGREYXRhW2tleV0gIT09IHZhbHVlKTtcbiAgICAgIGlmIChzaXplKG1vZGlmaWVkRGF0YSkgPiAwICYmIGNlbGxzLmxlbmd0aCA+PSAxKSB7XG4gICAgICAgIHRhYmxlKGNlbGxzWzBdKS5lYWNoKHRhYmxlID0+IHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxzID0gZ2V0U2VsZWN0ZWRDZWxscyh0YWJsZSwgY2VsbHMpO1xuICAgICAgICAgIGNvbnN0IHN0eWxlTW9kaWZpZWQgPSBzaXplKGZpbHRlciQxKG1vZGlmaWVkRGF0YSwgKF92YWx1ZSwga2V5KSA9PiBrZXkgIT09ICdzY29wZScgJiYga2V5ICE9PSAnY2VsbHR5cGUnKSkgPiAwO1xuICAgICAgICAgIGNvbnN0IHN0cnVjdHVyZU1vZGlmaWVkID0gaGFzKG1vZGlmaWVkRGF0YSwgJ2NlbGx0eXBlJyk7XG4gICAgICAgICAgaWYgKHN0eWxlTW9kaWZpZWQgfHwgaGFzKG1vZGlmaWVkRGF0YSwgJ3Njb3BlJykpIHtcbiAgICAgICAgICAgIGFwcGx5U3R5bGVEYXRhJDEoZWRpdG9yLCBzZWxlY3RlZENlbGxzLCBkYXRhLCBjdXJyeShoYXMsIG1vZGlmaWVkRGF0YSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3RydWN0dXJlTW9kaWZpZWQpIHtcbiAgICAgICAgICAgIGFwcGx5U3RydWN0dXJlRGF0YSQxKGVkaXRvciwgZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZpcmVUYWJsZU1vZGlmaWVkKGVkaXRvciwgdGFibGUuZG9tLCB7XG4gICAgICAgICAgICBzdHJ1Y3R1cmU6IHN0cnVjdHVyZU1vZGlmaWVkLFxuICAgICAgICAgICAgc3R5bGU6IHN0eWxlTW9kaWZpZWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBvblN1Ym1pdENlbGxGb3JtID0gKGVkaXRvciwgY2VsbHMsIG9sZERhdGEsIGFwaSkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGFwaS5nZXREYXRhKCk7XG4gICAgICBhcGkuY2xvc2UoKTtcbiAgICAgIGVkaXRvci51bmRvTWFuYWdlci50cmFuc2FjdCgoKSA9PiB7XG4gICAgICAgIGFwcGx5Q2VsbERhdGEoZWRpdG9yLCBjZWxscywgb2xkRGF0YSwgZGF0YSk7XG4gICAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXREYXRhJDEgPSAoZWRpdG9yLCBjZWxscykgPT4ge1xuICAgICAgY29uc3QgY2VsbHNEYXRhID0gdGFibGUoY2VsbHNbMF0pLm1hcCh0YWJsZSA9PiBtYXAoZ2V0U2VsZWN0ZWRDZWxscyh0YWJsZSwgY2VsbHMpLCBpdGVtID0+IGV4dHJhY3REYXRhRnJvbUNlbGxFbGVtZW50KGVkaXRvciwgaXRlbS5lbGVtZW50LCBoYXNBZHZhbmNlZENlbGxUYWIoZWRpdG9yKSwgaXRlbS5jb2x1bW4pKSk7XG4gICAgICByZXR1cm4gZ2V0U2hhcmVkVmFsdWVzKGNlbGxzRGF0YS5nZXRPckRpZSgpKTtcbiAgICB9O1xuICAgIGNvbnN0IG9wZW4kMiA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBjZWxscyA9IGdldENlbGxzRnJvbVNlbGVjdGlvbihlZGl0b3IpO1xuICAgICAgaWYgKGNlbGxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gZ2V0RGF0YSQxKGVkaXRvciwgY2VsbHMpO1xuICAgICAgY29uc3QgZGlhbG9nVGFiUGFuZWwgPSB7XG4gICAgICAgIHR5cGU6ICd0YWJwYW5lbCcsXG4gICAgICAgIHRhYnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ0dlbmVyYWwnLFxuICAgICAgICAgICAgbmFtZTogJ2dlbmVyYWwnLFxuICAgICAgICAgICAgaXRlbXM6IGdldEl0ZW1zJDIoZWRpdG9yKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZ2V0QWR2YW5jZWRUYWIoZWRpdG9yLCAnY2VsbCcpXG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgICBjb25zdCBkaWFsb2dQYW5lbCA9IHtcbiAgICAgICAgdHlwZTogJ3BhbmVsJyxcbiAgICAgICAgaXRlbXM6IFt7XG4gICAgICAgICAgICB0eXBlOiAnZ3JpZCcsXG4gICAgICAgICAgICBjb2x1bW5zOiAyLFxuICAgICAgICAgICAgaXRlbXM6IGdldEl0ZW1zJDIoZWRpdG9yKVxuICAgICAgICAgIH1dXG4gICAgICB9O1xuICAgICAgZWRpdG9yLndpbmRvd01hbmFnZXIub3Blbih7XG4gICAgICAgIHRpdGxlOiAnQ2VsbCBQcm9wZXJ0aWVzJyxcbiAgICAgICAgc2l6ZTogJ25vcm1hbCcsXG4gICAgICAgIGJvZHk6IGhhc0FkdmFuY2VkQ2VsbFRhYihlZGl0b3IpID8gZGlhbG9nVGFiUGFuZWwgOiBkaWFsb2dQYW5lbCxcbiAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICdjYW5jZWwnLFxuICAgICAgICAgICAgbmFtZTogJ2NhbmNlbCcsXG4gICAgICAgICAgICB0ZXh0OiAnQ2FuY2VsJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICBuYW1lOiAnc2F2ZScsXG4gICAgICAgICAgICB0ZXh0OiAnU2F2ZScsXG4gICAgICAgICAgICBwcmltYXJ5OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBpbml0aWFsRGF0YTogZGF0YSxcbiAgICAgICAgb25TdWJtaXQ6IGN1cnJ5KG9uU3VibWl0Q2VsbEZvcm0sIGVkaXRvciwgY2VsbHMsIGRhdGEpXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0Q2xhc3NMaXN0ID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSBidWlsZExpc3RJdGVtcyhnZXRSb3dDbGFzc0xpc3QoZWRpdG9yKSk7XG4gICAgICBpZiAoY2xhc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICBuYW1lOiAnY2xhc3MnLFxuICAgICAgICAgIHR5cGU6ICdsaXN0Ym94JyxcbiAgICAgICAgICBsYWJlbDogJ0NsYXNzJyxcbiAgICAgICAgICBpdGVtczogY2xhc3Nlc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBmb3JtQ2hpbGRyZW4gPSBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdsaXN0Ym94JyxcbiAgICAgICAgbmFtZTogJ3R5cGUnLFxuICAgICAgICBsYWJlbDogJ1JvdyB0eXBlJyxcbiAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiAnSGVhZGVyJyxcbiAgICAgICAgICAgIHZhbHVlOiAnaGVhZGVyJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogJ0JvZHknLFxuICAgICAgICAgICAgdmFsdWU6ICdib2R5J1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogJ0Zvb3RlcicsXG4gICAgICAgICAgICB2YWx1ZTogJ2Zvb3RlcidcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdsaXN0Ym94JyxcbiAgICAgICAgbmFtZTogJ2FsaWduJyxcbiAgICAgICAgbGFiZWw6ICdBbGlnbm1lbnQnLFxuICAgICAgICBpdGVtczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRleHQ6ICdOb25lJyxcbiAgICAgICAgICAgIHZhbHVlOiAnJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogJ0xlZnQnLFxuICAgICAgICAgICAgdmFsdWU6ICdsZWZ0J1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogJ0NlbnRlcicsXG4gICAgICAgICAgICB2YWx1ZTogJ2NlbnRlcidcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRleHQ6ICdSaWdodCcsXG4gICAgICAgICAgICB2YWx1ZTogJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdIZWlnaHQnLFxuICAgICAgICBuYW1lOiAnaGVpZ2h0JyxcbiAgICAgICAgdHlwZTogJ2lucHV0J1xuICAgICAgfVxuICAgIF07XG4gICAgY29uc3QgZ2V0SXRlbXMkMSA9IGVkaXRvciA9PiBmb3JtQ2hpbGRyZW4uY29uY2F0KGdldENsYXNzTGlzdChlZGl0b3IpLnRvQXJyYXkoKSk7XG5cbiAgICBjb25zdCB1cGRhdGVTaW1wbGVQcm9wcyA9IChtb2RpZmllciwgZGF0YSwgc2hvdWxkVXBkYXRlKSA9PiB7XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlKCdjbGFzcycpKSB7XG4gICAgICAgIG1vZGlmaWVyLnNldEF0dHJpYignY2xhc3MnLCBkYXRhLmNsYXNzKTtcbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRVcGRhdGUoJ2hlaWdodCcpKSB7XG4gICAgICAgIG1vZGlmaWVyLnNldFN0eWxlKCdoZWlnaHQnLCBhZGRQeFN1ZmZpeChkYXRhLmhlaWdodCkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdXBkYXRlQWR2YW5jZWRQcm9wcyA9IChtb2RpZmllciwgZGF0YSwgc2hvdWxkVXBkYXRlKSA9PiB7XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlKCdiYWNrZ3JvdW5kY29sb3InKSkge1xuICAgICAgICBtb2RpZmllci5zZXRTdHlsZSgnYmFja2dyb3VuZC1jb2xvcicsIGRhdGEuYmFja2dyb3VuZGNvbG9yKTtcbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRVcGRhdGUoJ2JvcmRlcmNvbG9yJykpIHtcbiAgICAgICAgbW9kaWZpZXIuc2V0U3R5bGUoJ2JvcmRlci1jb2xvcicsIGRhdGEuYm9yZGVyY29sb3IpO1xuICAgICAgfVxuICAgICAgaWYgKHNob3VsZFVwZGF0ZSgnYm9yZGVyc3R5bGUnKSkge1xuICAgICAgICBtb2RpZmllci5zZXRTdHlsZSgnYm9yZGVyLXN0eWxlJywgZGF0YS5ib3JkZXJzdHlsZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhcHBseVN0eWxlRGF0YSA9IChlZGl0b3IsIHJvd3MsIGRhdGEsIHdhc0NoYW5nZWQpID0+IHtcbiAgICAgIGNvbnN0IGlzU2luZ2xlUm93ID0gcm93cy5sZW5ndGggPT09IDE7XG4gICAgICBjb25zdCBzaG91bGRPdmVycmlkZUN1cnJlbnRWYWx1ZSA9IGlzU2luZ2xlUm93ID8gYWx3YXlzIDogd2FzQ2hhbmdlZDtcbiAgICAgIGVhY2gocm93cywgcm93RWxtID0+IHtcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSBEb21Nb2RpZmllci5ub3JtYWwoZWRpdG9yLCByb3dFbG0pO1xuICAgICAgICB1cGRhdGVTaW1wbGVQcm9wcyhtb2RpZmllciwgZGF0YSwgc2hvdWxkT3ZlcnJpZGVDdXJyZW50VmFsdWUpO1xuICAgICAgICBpZiAoaGFzQWR2YW5jZWRSb3dUYWIoZWRpdG9yKSkge1xuICAgICAgICAgIHVwZGF0ZUFkdmFuY2VkUHJvcHMobW9kaWZpZXIsIGRhdGEsIHNob3VsZE92ZXJyaWRlQ3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod2FzQ2hhbmdlZCgnYWxpZ24nKSkge1xuICAgICAgICAgIHNldEFsaWduKGVkaXRvciwgcm93RWxtLCBkYXRhLmFsaWduKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBhcHBseVN0cnVjdHVyZURhdGEgPSAoZWRpdG9yLCBkYXRhKSA9PiB7XG4gICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZVRhYmxlUm93VHlwZScsIGZhbHNlLCB7XG4gICAgICAgIHR5cGU6IGRhdGEudHlwZSxcbiAgICAgICAgbm9fZXZlbnRzOiB0cnVlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5Um93RGF0YSA9IChlZGl0b3IsIHJvd3MsIG9sZERhdGEsIGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IG1vZGlmaWVkRGF0YSA9IGZpbHRlciQxKGRhdGEsICh2YWx1ZSwga2V5KSA9PiBvbGREYXRhW2tleV0gIT09IHZhbHVlKTtcbiAgICAgIGlmIChzaXplKG1vZGlmaWVkRGF0YSkgPiAwKSB7XG4gICAgICAgIGNvbnN0IHR5cGVNb2RpZmllZCA9IGhhcyhtb2RpZmllZERhdGEsICd0eXBlJyk7XG4gICAgICAgIGNvbnN0IHN0eWxlTW9kaWZpZWQgPSB0eXBlTW9kaWZpZWQgPyBzaXplKG1vZGlmaWVkRGF0YSkgPiAxIDogdHJ1ZTtcbiAgICAgICAgaWYgKHN0eWxlTW9kaWZpZWQpIHtcbiAgICAgICAgICBhcHBseVN0eWxlRGF0YShlZGl0b3IsIHJvd3MsIGRhdGEsIGN1cnJ5KGhhcywgbW9kaWZpZWREYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVNb2RpZmllZCkge1xuICAgICAgICAgIGFwcGx5U3RydWN0dXJlRGF0YShlZGl0b3IsIGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHRhYmxlKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJvd3NbMF0pKS5lYWNoKHRhYmxlID0+IGZpcmVUYWJsZU1vZGlmaWVkKGVkaXRvciwgdGFibGUuZG9tLCB7XG4gICAgICAgICAgc3RydWN0dXJlOiB0eXBlTW9kaWZpZWQsXG4gICAgICAgICAgc3R5bGU6IHN0eWxlTW9kaWZpZWRcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb25TdWJtaXRSb3dGb3JtID0gKGVkaXRvciwgcm93cywgb2xkRGF0YSwgYXBpKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gYXBpLmdldERhdGEoKTtcbiAgICAgIGFwaS5jbG9zZSgpO1xuICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgICAgYXBwbHlSb3dEYXRhKGVkaXRvciwgcm93cywgb2xkRGF0YSwgZGF0YSk7XG4gICAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBvcGVuJDEgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgcm93cyA9IGdldFJvd3NGcm9tU2VsZWN0aW9uKGdldFNlbGVjdGlvblN0YXJ0KGVkaXRvciksIGVwaGVtZXJhLnNlbGVjdGVkKTtcbiAgICAgIGlmIChyb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCByb3dzRGF0YSA9IG1hcChyb3dzLCByb3dFbG0gPT4gZXh0cmFjdERhdGFGcm9tUm93RWxlbWVudChlZGl0b3IsIHJvd0VsbS5kb20sIGhhc0FkdmFuY2VkUm93VGFiKGVkaXRvcikpKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBnZXRTaGFyZWRWYWx1ZXMocm93c0RhdGEpO1xuICAgICAgY29uc3QgZGlhbG9nVGFiUGFuZWwgPSB7XG4gICAgICAgIHR5cGU6ICd0YWJwYW5lbCcsXG4gICAgICAgIHRhYnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ0dlbmVyYWwnLFxuICAgICAgICAgICAgbmFtZTogJ2dlbmVyYWwnLFxuICAgICAgICAgICAgaXRlbXM6IGdldEl0ZW1zJDEoZWRpdG9yKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZ2V0QWR2YW5jZWRUYWIoZWRpdG9yLCAncm93JylcbiAgICAgICAgXVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGRpYWxvZ1BhbmVsID0ge1xuICAgICAgICB0eXBlOiAncGFuZWwnLFxuICAgICAgICBpdGVtczogW3tcbiAgICAgICAgICAgIHR5cGU6ICdncmlkJyxcbiAgICAgICAgICAgIGNvbHVtbnM6IDIsXG4gICAgICAgICAgICBpdGVtczogZ2V0SXRlbXMkMShlZGl0b3IpXG4gICAgICAgICAgfV1cbiAgICAgIH07XG4gICAgICBlZGl0b3Iud2luZG93TWFuYWdlci5vcGVuKHtcbiAgICAgICAgdGl0bGU6ICdSb3cgUHJvcGVydGllcycsXG4gICAgICAgIHNpemU6ICdub3JtYWwnLFxuICAgICAgICBib2R5OiBoYXNBZHZhbmNlZFJvd1RhYihlZGl0b3IpID8gZGlhbG9nVGFiUGFuZWwgOiBkaWFsb2dQYW5lbCxcbiAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICdjYW5jZWwnLFxuICAgICAgICAgICAgbmFtZTogJ2NhbmNlbCcsXG4gICAgICAgICAgICB0ZXh0OiAnQ2FuY2VsJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICBuYW1lOiAnc2F2ZScsXG4gICAgICAgICAgICB0ZXh0OiAnU2F2ZScsXG4gICAgICAgICAgICBwcmltYXJ5OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBpbml0aWFsRGF0YTogZGF0YSxcbiAgICAgICAgb25TdWJtaXQ6IGN1cnJ5KG9uU3VibWl0Um93Rm9ybSwgZWRpdG9yLCBtYXAocm93cywgciA9PiByLmRvbSksIGRhdGEpXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0SXRlbXMgPSAoZWRpdG9yLCBjbGFzc2VzLCBpbnNlcnROZXdUYWJsZSkgPT4ge1xuICAgICAgY29uc3Qgcm93Q29sQ291bnRJdGVtcyA9ICFpbnNlcnROZXdUYWJsZSA/IFtdIDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgICBuYW1lOiAnY29scycsXG4gICAgICAgICAgbGFiZWw6ICdDb2xzJyxcbiAgICAgICAgICBpbnB1dE1vZGU6ICdudW1lcmljJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgICBuYW1lOiAncm93cycsXG4gICAgICAgICAgbGFiZWw6ICdSb3dzJyxcbiAgICAgICAgICBpbnB1dE1vZGU6ICdudW1lcmljJ1xuICAgICAgICB9XG4gICAgICBdO1xuICAgICAgY29uc3QgYWx3YXlzSXRlbXMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICAgIG5hbWU6ICd3aWR0aCcsXG4gICAgICAgICAgbGFiZWw6ICdXaWR0aCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgICAgbmFtZTogJ2hlaWdodCcsXG4gICAgICAgICAgbGFiZWw6ICdIZWlnaHQnXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgICBjb25zdCBhcHBlYXJhbmNlSXRlbXMgPSBoYXNBcHBlYXJhbmNlT3B0aW9ucyhlZGl0b3IpID8gW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgICBuYW1lOiAnY2VsbHNwYWNpbmcnLFxuICAgICAgICAgIGxhYmVsOiAnQ2VsbCBzcGFjaW5nJyxcbiAgICAgICAgICBpbnB1dE1vZGU6ICdudW1lcmljJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgICBuYW1lOiAnY2VsbHBhZGRpbmcnLFxuICAgICAgICAgIGxhYmVsOiAnQ2VsbCBwYWRkaW5nJyxcbiAgICAgICAgICBpbnB1dE1vZGU6ICdudW1lcmljJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgICBuYW1lOiAnYm9yZGVyJyxcbiAgICAgICAgICBsYWJlbDogJ0JvcmRlciB3aWR0aCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdsYWJlbCcsXG4gICAgICAgICAgbGFiZWw6ICdDYXB0aW9uJyxcbiAgICAgICAgICBpdGVtczogW3tcbiAgICAgICAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgICAgICAgICAgbmFtZTogJ2NhcHRpb24nLFxuICAgICAgICAgICAgICBsYWJlbDogJ1Nob3cgY2FwdGlvbidcbiAgICAgICAgICAgIH1dXG4gICAgICAgIH1cbiAgICAgIF0gOiBbXTtcbiAgICAgIGNvbnN0IGFsaWdubWVudEl0ZW0gPSBbe1xuICAgICAgICAgIHR5cGU6ICdsaXN0Ym94JyxcbiAgICAgICAgICBuYW1lOiAnYWxpZ24nLFxuICAgICAgICAgIGxhYmVsOiAnQWxpZ25tZW50JyxcbiAgICAgICAgICBpdGVtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZXh0OiAnTm9uZScsXG4gICAgICAgICAgICAgIHZhbHVlOiAnJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGV4dDogJ0xlZnQnLFxuICAgICAgICAgICAgICB2YWx1ZTogJ2xlZnQnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZXh0OiAnQ2VudGVyJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICdjZW50ZXInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZXh0OiAnUmlnaHQnLFxuICAgICAgICAgICAgICB2YWx1ZTogJ3JpZ2h0J1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfV07XG4gICAgICBjb25zdCBjbGFzc0xpc3RJdGVtID0gY2xhc3Nlcy5sZW5ndGggPiAwID8gW3tcbiAgICAgICAgICB0eXBlOiAnbGlzdGJveCcsXG4gICAgICAgICAgbmFtZTogJ2NsYXNzJyxcbiAgICAgICAgICBsYWJlbDogJ0NsYXNzJyxcbiAgICAgICAgICBpdGVtczogY2xhc3Nlc1xuICAgICAgICB9XSA6IFtdO1xuICAgICAgcmV0dXJuIHJvd0NvbENvdW50SXRlbXMuY29uY2F0KGFsd2F5c0l0ZW1zKS5jb25jYXQoYXBwZWFyYW5jZUl0ZW1zKS5jb25jYXQoYWxpZ25tZW50SXRlbSkuY29uY2F0KGNsYXNzTGlzdEl0ZW0pO1xuICAgIH07XG5cbiAgICBjb25zdCBzdHlsZVREVEggPSAoZG9tLCBlbG0sIG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoZWxtLnRhZ05hbWUgPT09ICdURCcgfHwgZWxtLnRhZ05hbWUgPT09ICdUSCcpIHtcbiAgICAgICAgaWYgKGlzU3RyaW5nKG5hbWUpICYmIGlzTm9uTnVsbGFibGUodmFsdWUpKSB7XG4gICAgICAgICAgZG9tLnNldFN0eWxlKGVsbSwgbmFtZSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbS5zZXRTdHlsZXMoZWxtLCBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGVsbS5jaGlsZHJlbikge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxtLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzdHlsZVREVEgoZG9tLCBlbG0uY2hpbGRyZW5baV0sIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5RGF0YVRvRWxlbWVudCA9IChlZGl0b3IsIHRhYmxlRWxtLCBkYXRhLCBzaG91bGRBcHBseU9uQ2VsbCkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IGF0dHJzID0ge307XG4gICAgICBjb25zdCBzdHlsZXMgPSB7fTtcbiAgICAgIGNvbnN0IHNob3VsZFN0eWxlV2l0aENzcyQxID0gc2hvdWxkU3R5bGVXaXRoQ3NzKGVkaXRvcik7XG4gICAgICBjb25zdCBoYXNBZHZhbmNlZFRhYmxlVGFiJDEgPSBoYXNBZHZhbmNlZFRhYmxlVGFiKGVkaXRvcik7XG4gICAgICBpZiAoIWlzVW5kZWZpbmVkKGRhdGEuY2xhc3MpKSB7XG4gICAgICAgIGF0dHJzLmNsYXNzID0gZGF0YS5jbGFzcztcbiAgICAgIH1cbiAgICAgIHN0eWxlcy5oZWlnaHQgPSBhZGRQeFN1ZmZpeChkYXRhLmhlaWdodCk7XG4gICAgICBpZiAoc2hvdWxkU3R5bGVXaXRoQ3NzJDEpIHtcbiAgICAgICAgc3R5bGVzLndpZHRoID0gYWRkUHhTdWZmaXgoZGF0YS53aWR0aCk7XG4gICAgICB9IGVsc2UgaWYgKGRvbS5nZXRBdHRyaWIodGFibGVFbG0sICd3aWR0aCcpKSB7XG4gICAgICAgIGF0dHJzLndpZHRoID0gcmVtb3ZlUHhTdWZmaXgoZGF0YS53aWR0aCk7XG4gICAgICB9XG4gICAgICBpZiAoc2hvdWxkU3R5bGVXaXRoQ3NzJDEpIHtcbiAgICAgICAgc3R5bGVzWydib3JkZXItd2lkdGgnXSA9IGFkZFB4U3VmZml4KGRhdGEuYm9yZGVyKTtcbiAgICAgICAgc3R5bGVzWydib3JkZXItc3BhY2luZyddID0gYWRkUHhTdWZmaXgoZGF0YS5jZWxsc3BhY2luZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhdHRycy5ib3JkZXIgPSBkYXRhLmJvcmRlcjtcbiAgICAgICAgYXR0cnMuY2VsbHBhZGRpbmcgPSBkYXRhLmNlbGxwYWRkaW5nO1xuICAgICAgICBhdHRycy5jZWxsc3BhY2luZyA9IGRhdGEuY2VsbHNwYWNpbmc7XG4gICAgICB9XG4gICAgICBpZiAoc2hvdWxkU3R5bGVXaXRoQ3NzJDEgJiYgdGFibGVFbG0uY2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3QgY2VsbFN0eWxlcyA9IHt9O1xuICAgICAgICBpZiAoc2hvdWxkQXBwbHlPbkNlbGwuYm9yZGVyKSB7XG4gICAgICAgICAgY2VsbFN0eWxlc1snYm9yZGVyLXdpZHRoJ10gPSBhZGRQeFN1ZmZpeChkYXRhLmJvcmRlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3VsZEFwcGx5T25DZWxsLmNlbGxwYWRkaW5nKSB7XG4gICAgICAgICAgY2VsbFN0eWxlcy5wYWRkaW5nID0gYWRkUHhTdWZmaXgoZGF0YS5jZWxscGFkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc0FkdmFuY2VkVGFibGVUYWIkMSAmJiBzaG91bGRBcHBseU9uQ2VsbC5ib3JkZXJjb2xvcikge1xuICAgICAgICAgIGNlbGxTdHlsZXNbJ2JvcmRlci1jb2xvciddID0gZGF0YS5ib3JkZXJjb2xvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRW1wdHkkMShjZWxsU3R5bGVzKSkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFibGVFbG0uY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHN0eWxlVERUSChkb20sIHRhYmxlRWxtLmNoaWxkcmVuW2ldLCBjZWxsU3R5bGVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChoYXNBZHZhbmNlZFRhYmxlVGFiJDEpIHtcbiAgICAgICAgY29uc3QgYWR2RGF0YSA9IGRhdGE7XG4gICAgICAgIHN0eWxlc1snYmFja2dyb3VuZC1jb2xvciddID0gYWR2RGF0YS5iYWNrZ3JvdW5kY29sb3I7XG4gICAgICAgIHN0eWxlc1snYm9yZGVyLWNvbG9yJ10gPSBhZHZEYXRhLmJvcmRlcmNvbG9yO1xuICAgICAgICBzdHlsZXNbJ2JvcmRlci1zdHlsZSddID0gYWR2RGF0YS5ib3JkZXJzdHlsZTtcbiAgICAgIH1cbiAgICAgIGRvbS5zZXRTdHlsZXModGFibGVFbG0sIHtcbiAgICAgICAgLi4uZ2V0RGVmYXVsdFN0eWxlcyhlZGl0b3IpLFxuICAgICAgICAuLi5zdHlsZXNcbiAgICAgIH0pO1xuICAgICAgZG9tLnNldEF0dHJpYnModGFibGVFbG0sIHtcbiAgICAgICAgLi4uZ2V0RGVmYXVsdEF0dHJpYnV0ZXMoZWRpdG9yKSxcbiAgICAgICAgLi4uYXR0cnNcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25TdWJtaXRUYWJsZUZvcm0gPSAoZWRpdG9yLCB0YWJsZUVsbSwgb2xkRGF0YSwgYXBpKSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgY29uc3QgZGF0YSA9IGFwaS5nZXREYXRhKCk7XG4gICAgICBjb25zdCBtb2RpZmllZERhdGEgPSBmaWx0ZXIkMShkYXRhLCAodmFsdWUsIGtleSkgPT4gb2xkRGF0YVtrZXldICE9PSB2YWx1ZSk7XG4gICAgICBhcGkuY2xvc2UoKTtcbiAgICAgIGlmIChkYXRhLmNsYXNzID09PSAnJykge1xuICAgICAgICBkZWxldGUgZGF0YS5jbGFzcztcbiAgICAgIH1cbiAgICAgIGVkaXRvci51bmRvTWFuYWdlci50cmFuc2FjdCgoKSA9PiB7XG4gICAgICAgIGlmICghdGFibGVFbG0pIHtcbiAgICAgICAgICBjb25zdCBjb2xzID0gdG9JbnQoZGF0YS5jb2xzKS5nZXRPcigxKTtcbiAgICAgICAgICBjb25zdCByb3dzID0gdG9JbnQoZGF0YS5yb3dzKS5nZXRPcigxKTtcbiAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZUluc2VydFRhYmxlJywgZmFsc2UsIHtcbiAgICAgICAgICAgIHJvd3MsXG4gICAgICAgICAgICBjb2x1bW5zOiBjb2xzXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGFibGVFbG0gPSBnZXRTZWxlY3Rpb25DZWxsKGdldFNlbGVjdGlvblN0YXJ0KGVkaXRvciksIGdldElzUm9vdChlZGl0b3IpKS5iaW5kKGNlbGwgPT4gdGFibGUoY2VsbCwgZ2V0SXNSb290KGVkaXRvcikpKS5tYXAodGFibGUgPT4gdGFibGUuZG9tKS5nZXRPckRpZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaXplKG1vZGlmaWVkRGF0YSkgPiAwKSB7XG4gICAgICAgICAgY29uc3QgYXBwbGljYWJsZUNlbGxQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgYm9yZGVyOiBoYXMobW9kaWZpZWREYXRhLCAnYm9yZGVyJyksXG4gICAgICAgICAgICBib3JkZXJjb2xvcjogaGFzKG1vZGlmaWVkRGF0YSwgJ2JvcmRlcmNvbG9yJyksXG4gICAgICAgICAgICBjZWxscGFkZGluZzogaGFzKG1vZGlmaWVkRGF0YSwgJ2NlbGxwYWRkaW5nJylcbiAgICAgICAgICB9O1xuICAgICAgICAgIGFwcGx5RGF0YVRvRWxlbWVudChlZGl0b3IsIHRhYmxlRWxtLCBkYXRhLCBhcHBsaWNhYmxlQ2VsbFByb3BlcnRpZXMpO1xuICAgICAgICAgIGNvbnN0IGNhcHRpb25FbG0gPSBkb20uc2VsZWN0KCdjYXB0aW9uJywgdGFibGVFbG0pWzBdO1xuICAgICAgICAgIGlmIChjYXB0aW9uRWxtICYmICFkYXRhLmNhcHRpb24gfHwgIWNhcHRpb25FbG0gJiYgZGF0YS5jYXB0aW9uKSB7XG4gICAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZVRhYmxlVG9nZ2xlQ2FwdGlvbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRBbGlnbihlZGl0b3IsIHRhYmxlRWxtLCBkYXRhLmFsaWduKTtcbiAgICAgICAgfVxuICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgZWRpdG9yLmFkZFZpc3VhbCgpO1xuICAgICAgICBpZiAoc2l6ZShtb2RpZmllZERhdGEpID4gMCkge1xuICAgICAgICAgIGNvbnN0IGNhcHRpb25Nb2RpZmllZCA9IGhhcyhtb2RpZmllZERhdGEsICdjYXB0aW9uJyk7XG4gICAgICAgICAgY29uc3Qgc3R5bGVNb2RpZmllZCA9IGNhcHRpb25Nb2RpZmllZCA/IHNpemUobW9kaWZpZWREYXRhKSA+IDEgOiB0cnVlO1xuICAgICAgICAgIGZpcmVUYWJsZU1vZGlmaWVkKGVkaXRvciwgdGFibGVFbG0sIHtcbiAgICAgICAgICAgIHN0cnVjdHVyZTogY2FwdGlvbk1vZGlmaWVkLFxuICAgICAgICAgICAgc3R5bGU6IHN0eWxlTW9kaWZpZWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBvcGVuID0gKGVkaXRvciwgaW5zZXJ0TmV3VGFibGUpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBsZXQgdGFibGVFbG07XG4gICAgICBsZXQgZGF0YSA9IGV4dHJhY3REYXRhRnJvbVNldHRpbmdzKGVkaXRvciwgaGFzQWR2YW5jZWRUYWJsZVRhYihlZGl0b3IpKTtcbiAgICAgIGlmIChpbnNlcnROZXdUYWJsZSkge1xuICAgICAgICBkYXRhLmNvbHMgPSAnMSc7XG4gICAgICAgIGRhdGEucm93cyA9ICcxJztcbiAgICAgICAgaWYgKGhhc0FkdmFuY2VkVGFibGVUYWIoZWRpdG9yKSkge1xuICAgICAgICAgIGRhdGEuYm9yZGVyc3R5bGUgPSAnJztcbiAgICAgICAgICBkYXRhLmJvcmRlcmNvbG9yID0gJyc7XG4gICAgICAgICAgZGF0YS5iYWNrZ3JvdW5kY29sb3IgPSAnJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFibGVFbG0gPSBkb20uZ2V0UGFyZW50KGVkaXRvci5zZWxlY3Rpb24uZ2V0U3RhcnQoKSwgJ3RhYmxlJywgZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICAgIGlmICh0YWJsZUVsbSkge1xuICAgICAgICAgIGRhdGEgPSBleHRyYWN0RGF0YUZyb21UYWJsZUVsZW1lbnQoZWRpdG9yLCB0YWJsZUVsbSwgaGFzQWR2YW5jZWRUYWJsZVRhYihlZGl0b3IpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaGFzQWR2YW5jZWRUYWJsZVRhYihlZGl0b3IpKSB7XG4gICAgICAgICAgICBkYXRhLmJvcmRlcnN0eWxlID0gJyc7XG4gICAgICAgICAgICBkYXRhLmJvcmRlcmNvbG9yID0gJyc7XG4gICAgICAgICAgICBkYXRhLmJhY2tncm91bmRjb2xvciA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgY2xhc3NlcyA9IGJ1aWxkTGlzdEl0ZW1zKGdldFRhYmxlQ2xhc3NMaXN0KGVkaXRvcikpO1xuICAgICAgaWYgKGNsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoZGF0YS5jbGFzcykge1xuICAgICAgICAgIGRhdGEuY2xhc3MgPSBkYXRhLmNsYXNzLnJlcGxhY2UoL1xccyptY2VcXC1pdGVtXFwtdGFibGVcXHMqL2csICcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgZ2VuZXJhbFBhbmVsID0ge1xuICAgICAgICB0eXBlOiAnZ3JpZCcsXG4gICAgICAgIGNvbHVtbnM6IDIsXG4gICAgICAgIGl0ZW1zOiBnZXRJdGVtcyhlZGl0b3IsIGNsYXNzZXMsIGluc2VydE5ld1RhYmxlKVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG5vbkFkdmFuY2VkRm9ybSA9ICgpID0+ICh7XG4gICAgICAgIHR5cGU6ICdwYW5lbCcsXG4gICAgICAgIGl0ZW1zOiBbZ2VuZXJhbFBhbmVsXVxuICAgICAgfSk7XG4gICAgICBjb25zdCBhZHZhbmNlZEZvcm0gPSAoKSA9PiAoe1xuICAgICAgICB0eXBlOiAndGFicGFuZWwnLFxuICAgICAgICB0YWJzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6ICdHZW5lcmFsJyxcbiAgICAgICAgICAgIG5hbWU6ICdnZW5lcmFsJyxcbiAgICAgICAgICAgIGl0ZW1zOiBbZ2VuZXJhbFBhbmVsXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZ2V0QWR2YW5jZWRUYWIoZWRpdG9yLCAndGFibGUnKVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRpYWxvZ0JvZHkgPSBoYXNBZHZhbmNlZFRhYmxlVGFiKGVkaXRvcikgPyBhZHZhbmNlZEZvcm0oKSA6IG5vbkFkdmFuY2VkRm9ybSgpO1xuICAgICAgZWRpdG9yLndpbmRvd01hbmFnZXIub3Blbih7XG4gICAgICAgIHRpdGxlOiAnVGFibGUgUHJvcGVydGllcycsXG4gICAgICAgIHNpemU6ICdub3JtYWwnLFxuICAgICAgICBib2R5OiBkaWFsb2dCb2R5LFxuICAgICAgICBvblN1Ym1pdDogY3Vycnkob25TdWJtaXRUYWJsZUZvcm0sIGVkaXRvciwgdGFibGVFbG0sIGRhdGEpLFxuICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ2NhbmNlbCcsXG4gICAgICAgICAgICBuYW1lOiAnY2FuY2VsJyxcbiAgICAgICAgICAgIHRleHQ6ICdDYW5jZWwnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgIG5hbWU6ICdzYXZlJyxcbiAgICAgICAgICAgIHRleHQ6ICdTYXZlJyxcbiAgICAgICAgICAgIHByaW1hcnk6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGluaXRpYWxEYXRhOiBkYXRhXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVnaXN0ZXJDb21tYW5kcyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBydW5BY3Rpb24gPSBmID0+IHtcbiAgICAgICAgaWYgKGlzSW5FZGl0YWJsZUNvbnRleHQoZ2V0U2VsZWN0aW9uU3RhcnQoZWRpdG9yKSkpIHtcbiAgICAgICAgICBmKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBlYWNoJDEoe1xuICAgICAgICBtY2VUYWJsZVByb3BzOiBjdXJyeShvcGVuLCBlZGl0b3IsIGZhbHNlKSxcbiAgICAgICAgbWNlVGFibGVSb3dQcm9wczogY3Vycnkob3BlbiQxLCBlZGl0b3IpLFxuICAgICAgICBtY2VUYWJsZUNlbGxQcm9wczogY3Vycnkob3BlbiQyLCBlZGl0b3IpLFxuICAgICAgICBtY2VJbnNlcnRUYWJsZURpYWxvZzogY3Vycnkob3BlbiwgZWRpdG9yLCB0cnVlKVxuICAgICAgfSwgKGZ1bmMsIG5hbWUpID0+IGVkaXRvci5hZGRDb21tYW5kKG5hbWUsICgpID0+IHJ1bkFjdGlvbihmdW5jKSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBjaGlsZCA9IChzY29wZSwgc2VsZWN0b3IpID0+IGNoaWxkJDEoc2NvcGUsIHNlbGVjdG9yKS5pc1NvbWUoKTtcblxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IGlkZW50aXR5O1xuICAgIGNvbnN0IHVubWVyZ2FibGUgPSBzZWxlY3RlZENlbGxzID0+IHtcbiAgICAgIGNvbnN0IGhhc1NwYW4gPSAoZWxlbSwgdHlwZSkgPT4gZ2V0T3B0KGVsZW0sIHR5cGUpLmV4aXN0cyhzcGFuID0+IHBhcnNlSW50KHNwYW4sIDEwKSA+IDEpO1xuICAgICAgY29uc3QgaGFzUm93T3JDb2xTcGFuID0gZWxlbSA9PiBoYXNTcGFuKGVsZW0sICdyb3dzcGFuJykgfHwgaGFzU3BhbihlbGVtLCAnY29sc3BhbicpO1xuICAgICAgcmV0dXJuIHNlbGVjdGVkQ2VsbHMubGVuZ3RoID4gMCAmJiBmb3JhbGwoc2VsZWN0ZWRDZWxscywgaGFzUm93T3JDb2xTcGFuKSA/IE9wdGlvbmFsLnNvbWUoc2VsZWN0ZWRDZWxscykgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBtZXJnYWJsZSA9ICh0YWJsZSwgc2VsZWN0ZWRDZWxscywgZXBoZW1lcmEpID0+IHtcbiAgICAgIGlmIChzZWxlY3RlZENlbGxzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmV0cmlldmVCb3godGFibGUsIGVwaGVtZXJhLmZpcnN0U2VsZWN0ZWRTZWxlY3RvciwgZXBoZW1lcmEubGFzdFNlbGVjdGVkU2VsZWN0b3IpLm1hcChib3VuZHMgPT4gKHtcbiAgICAgICAgICBib3VuZHMsXG4gICAgICAgICAgY2VsbHM6IHNlbGVjdGVkQ2VsbHNcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBub01lbnUgPSBjZWxsID0+ICh7XG4gICAgICBlbGVtZW50OiBjZWxsLFxuICAgICAgbWVyZ2FibGU6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgIHVubWVyZ2FibGU6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgIHNlbGVjdGlvbjogW2NlbGxdXG4gICAgfSk7XG4gICAgY29uc3QgZm9yTWVudSA9IChzZWxlY3RlZENlbGxzLCB0YWJsZSwgY2VsbCkgPT4gKHtcbiAgICAgIGVsZW1lbnQ6IGNlbGwsXG4gICAgICBtZXJnYWJsZTogbWVyZ2FibGUodGFibGUsIHNlbGVjdGVkQ2VsbHMsIGVwaGVtZXJhKSxcbiAgICAgIHVubWVyZ2FibGU6IHVubWVyZ2FibGUoc2VsZWN0ZWRDZWxscyksXG4gICAgICBzZWxlY3Rpb246IHNlbGVjdGlvbihzZWxlY3RlZENlbGxzKVxuICAgIH0pO1xuXG4gICAgY29uc3QgZ2V0U2VsZWN0aW9uVGFyZ2V0cyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCB0YXJnZXRzID0gQ2VsbChPcHRpb25hbC5ub25lKCkpO1xuICAgICAgY29uc3QgY2hhbmdlSGFuZGxlcnMgPSBDZWxsKFtdKTtcbiAgICAgIGxldCBzZWxlY3Rpb25EZXRhaWxzID0gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgY29uc3QgaXNDYXB0aW9uID0gaXNUYWcoJ2NhcHRpb24nKTtcbiAgICAgIGNvbnN0IGlzRGlzYWJsZWRGb3JTZWxlY3Rpb24gPSBrZXkgPT4gc2VsZWN0aW9uRGV0YWlscy5mb3JhbGwoZGV0YWlscyA9PiAhZGV0YWlsc1trZXldKTtcbiAgICAgIGNvbnN0IGdldFN0YXJ0ID0gKCkgPT4gZ2V0U2VsZWN0aW9uQ2VsbE9yQ2FwdGlvbihnZXRTZWxlY3Rpb25TdGFydChlZGl0b3IpLCBnZXRJc1Jvb3QoZWRpdG9yKSk7XG4gICAgICBjb25zdCBnZXRFbmQgPSAoKSA9PiBnZXRTZWxlY3Rpb25DZWxsT3JDYXB0aW9uKGdldFNlbGVjdGlvbkVuZChlZGl0b3IpLCBnZXRJc1Jvb3QoZWRpdG9yKSk7XG4gICAgICBjb25zdCBmaW5kVGFyZ2V0cyA9ICgpID0+IGdldFN0YXJ0KCkuYmluZChzdGFydENlbGxPckNhcHRpb24gPT4gZmxhdHRlbihsaWZ0Mih0YWJsZShzdGFydENlbGxPckNhcHRpb24pLCBnZXRFbmQoKS5iaW5kKHRhYmxlKSwgKHN0YXJ0VGFibGUsIGVuZFRhYmxlKSA9PiB7XG4gICAgICAgIGlmIChlcShzdGFydFRhYmxlLCBlbmRUYWJsZSkpIHtcbiAgICAgICAgICBpZiAoaXNDYXB0aW9uKHN0YXJ0Q2VsbE9yQ2FwdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKG5vTWVudShzdGFydENlbGxPckNhcHRpb24pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoZm9yTWVudShnZXRDZWxsc0Zyb21TZWxlY3Rpb24oZWRpdG9yKSwgc3RhcnRUYWJsZSwgc3RhcnRDZWxsT3JDYXB0aW9uKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9KSkpO1xuICAgICAgY29uc3QgZ2V0RXh0cmFjdGVkRGV0YWlscyA9IHRhcmdldHMgPT4ge1xuICAgICAgICBjb25zdCB0YWJsZU9wdCA9IHRhYmxlKHRhcmdldHMuZWxlbWVudCk7XG4gICAgICAgIHJldHVybiB0YWJsZU9wdC5tYXAodGFibGUgPT4ge1xuICAgICAgICAgIGNvbnN0IHdhcmVob3VzZSA9IFdhcmVob3VzZS5mcm9tVGFibGUodGFibGUpO1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbHMgPSBvbkNlbGxzKHdhcmVob3VzZSwgdGFyZ2V0cykuZ2V0T3IoW10pO1xuICAgICAgICAgIGNvbnN0IGxvY2tlZCA9IGZvbGRsKHNlbGVjdGVkQ2VsbHMsIChhY2MsIGNlbGwpID0+IHtcbiAgICAgICAgICAgIGlmIChjZWxsLmlzTG9ja2VkKSB7XG4gICAgICAgICAgICAgIGFjYy5vbkFueSA9IHRydWU7XG4gICAgICAgICAgICAgIGlmIChjZWxsLmNvbHVtbiA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGFjYy5vbkZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjZWxsLmNvbHVtbiArIGNlbGwuY29sc3BhbiA+PSB3YXJlaG91c2UuZ3JpZC5jb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgYWNjLm9uTGFzdCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgb25Bbnk6IGZhbHNlLFxuICAgICAgICAgICAgb25GaXJzdDogZmFsc2UsXG4gICAgICAgICAgICBvbkxhc3Q6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1lcmdlYWJsZTogb25VbmxvY2tlZE1lcmdhYmxlKHdhcmVob3VzZSwgdGFyZ2V0cykuaXNTb21lKCksXG4gICAgICAgICAgICB1bm1lcmdlYWJsZTogb25VbmxvY2tlZFVubWVyZ2FibGUod2FyZWhvdXNlLCB0YXJnZXRzKS5pc1NvbWUoKSxcbiAgICAgICAgICAgIGxvY2tlZFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc2V0VGFyZ2V0cyA9ICgpID0+IHtcbiAgICAgICAgdGFyZ2V0cy5zZXQoY2FjaGVkKGZpbmRUYXJnZXRzKSgpKTtcbiAgICAgICAgc2VsZWN0aW9uRGV0YWlscyA9IHRhcmdldHMuZ2V0KCkuYmluZChnZXRFeHRyYWN0ZWREZXRhaWxzKTtcbiAgICAgICAgZWFjaChjaGFuZ2VIYW5kbGVycy5nZXQoKSwgY2FsbCk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0dXBIYW5kbGVyID0gaGFuZGxlciA9PiB7XG4gICAgICAgIGhhbmRsZXIoKTtcbiAgICAgICAgY2hhbmdlSGFuZGxlcnMuc2V0KGNoYW5nZUhhbmRsZXJzLmdldCgpLmNvbmNhdChbaGFuZGxlcl0pKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICBjaGFuZ2VIYW5kbGVycy5zZXQoZmlsdGVyKGNoYW5nZUhhbmRsZXJzLmdldCgpLCBoID0+IGggIT09IGhhbmRsZXIpKTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCBvblNldHVwID0gKGFwaSwgaXNEaXNhYmxlZCkgPT4gc2V0dXBIYW5kbGVyKCgpID0+IHRhcmdldHMuZ2V0KCkuZm9sZCgoKSA9PiB7XG4gICAgICAgIGFwaS5zZXRFbmFibGVkKGZhbHNlKTtcbiAgICAgIH0sIHRhcmdldHMgPT4ge1xuICAgICAgICBhcGkuc2V0RW5hYmxlZCghaXNEaXNhYmxlZCh0YXJnZXRzKSAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRWRpdGFibGUoKSk7XG4gICAgICB9KSk7XG4gICAgICBjb25zdCBvblNldHVwV2l0aFRvZ2dsZSA9IChhcGksIGlzRGlzYWJsZWQsIGlzQWN0aXZlKSA9PiBzZXR1cEhhbmRsZXIoKCkgPT4gdGFyZ2V0cy5nZXQoKS5mb2xkKCgpID0+IHtcbiAgICAgICAgYXBpLnNldEVuYWJsZWQoZmFsc2UpO1xuICAgICAgICBhcGkuc2V0QWN0aXZlKGZhbHNlKTtcbiAgICAgIH0sIHRhcmdldHMgPT4ge1xuICAgICAgICBhcGkuc2V0RW5hYmxlZCghaXNEaXNhYmxlZCh0YXJnZXRzKSAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRWRpdGFibGUoKSk7XG4gICAgICAgIGFwaS5zZXRBY3RpdmUoaXNBY3RpdmUodGFyZ2V0cykpO1xuICAgICAgfSkpO1xuICAgICAgY29uc3QgaXNEaXNhYmxlZEZyb21Mb2NrZWQgPSBsb2NrZWREaXNhYmxlID0+IHNlbGVjdGlvbkRldGFpbHMuZXhpc3RzKGRldGFpbHMgPT4gZGV0YWlscy5sb2NrZWRbbG9ja2VkRGlzYWJsZV0pO1xuICAgICAgY29uc3Qgb25TZXR1cFRhYmxlID0gYXBpID0+IG9uU2V0dXAoYXBpLCBfID0+IGZhbHNlKTtcbiAgICAgIGNvbnN0IG9uU2V0dXBDZWxsT3JSb3cgPSBhcGkgPT4gb25TZXR1cChhcGksIHRhcmdldHMgPT4gaXNDYXB0aW9uKHRhcmdldHMuZWxlbWVudCkpO1xuICAgICAgY29uc3Qgb25TZXR1cENvbHVtbiA9IGxvY2tlZERpc2FibGUgPT4gYXBpID0+IG9uU2V0dXAoYXBpLCB0YXJnZXRzID0+IGlzQ2FwdGlvbih0YXJnZXRzLmVsZW1lbnQpIHx8IGlzRGlzYWJsZWRGcm9tTG9ja2VkKGxvY2tlZERpc2FibGUpKTtcbiAgICAgIGNvbnN0IG9uU2V0dXBQYXN0ZWFibGUgPSBnZXRDbGlwYm9hcmREYXRhID0+IGFwaSA9PiBvblNldHVwKGFwaSwgdGFyZ2V0cyA9PiBpc0NhcHRpb24odGFyZ2V0cy5lbGVtZW50KSB8fCBnZXRDbGlwYm9hcmREYXRhKCkuaXNOb25lKCkpO1xuICAgICAgY29uc3Qgb25TZXR1cFBhc3RlYWJsZUNvbHVtbiA9IChnZXRDbGlwYm9hcmREYXRhLCBsb2NrZWREaXNhYmxlKSA9PiBhcGkgPT4gb25TZXR1cChhcGksIHRhcmdldHMgPT4gaXNDYXB0aW9uKHRhcmdldHMuZWxlbWVudCkgfHwgZ2V0Q2xpcGJvYXJkRGF0YSgpLmlzTm9uZSgpIHx8IGlzRGlzYWJsZWRGcm9tTG9ja2VkKGxvY2tlZERpc2FibGUpKTtcbiAgICAgIGNvbnN0IG9uU2V0dXBNZXJnZWFibGUgPSBhcGkgPT4gb25TZXR1cChhcGksIF90YXJnZXRzID0+IGlzRGlzYWJsZWRGb3JTZWxlY3Rpb24oJ21lcmdlYWJsZScpKTtcbiAgICAgIGNvbnN0IG9uU2V0dXBVbm1lcmdlYWJsZSA9IGFwaSA9PiBvblNldHVwKGFwaSwgX3RhcmdldHMgPT4gaXNEaXNhYmxlZEZvclNlbGVjdGlvbigndW5tZXJnZWFibGUnKSk7XG4gICAgICBjb25zdCBvblNldHVwVGFibGVXaXRoQ2FwdGlvbiA9IGFwaSA9PiB7XG4gICAgICAgIHJldHVybiBvblNldHVwV2l0aFRvZ2dsZShhcGksIG5ldmVyLCB0YXJnZXRzID0+IHtcbiAgICAgICAgICBjb25zdCB0YWJsZU9wdCA9IHRhYmxlKHRhcmdldHMuZWxlbWVudCwgZ2V0SXNSb290KGVkaXRvcikpO1xuICAgICAgICAgIHJldHVybiB0YWJsZU9wdC5leGlzdHModGFibGUgPT4gY2hpbGQodGFibGUsICdjYXB0aW9uJykpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBvblNldHVwVGFibGVIZWFkZXJzID0gKGNvbW1hbmQsIGhlYWRlclR5cGUpID0+IGFwaSA9PiB7XG4gICAgICAgIHJldHVybiBvblNldHVwV2l0aFRvZ2dsZShhcGksIHRhcmdldHMgPT4gaXNDYXB0aW9uKHRhcmdldHMuZWxlbWVudCksICgpID0+IGVkaXRvci5xdWVyeUNvbW1hbmRWYWx1ZShjb21tYW5kKSA9PT0gaGVhZGVyVHlwZSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25TZXR1cFRhYmxlUm93SGVhZGVycyA9IG9uU2V0dXBUYWJsZUhlYWRlcnMoJ21jZVRhYmxlUm93VHlwZScsICdoZWFkZXInKTtcbiAgICAgIGNvbnN0IG9uU2V0dXBUYWJsZUNvbHVtbkhlYWRlcnMgPSBvblNldHVwVGFibGVIZWFkZXJzKCdtY2VUYWJsZUNvbFR5cGUnLCAndGgnKTtcbiAgICAgIGVkaXRvci5vbignTm9kZUNoYW5nZSBFeGVjQ29tbWFuZCBUYWJsZVNlbGVjdG9yQ2hhbmdlJywgcmVzZXRUYXJnZXRzKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9uU2V0dXBUYWJsZSxcbiAgICAgICAgb25TZXR1cENlbGxPclJvdyxcbiAgICAgICAgb25TZXR1cENvbHVtbixcbiAgICAgICAgb25TZXR1cFBhc3RlYWJsZSxcbiAgICAgICAgb25TZXR1cFBhc3RlYWJsZUNvbHVtbixcbiAgICAgICAgb25TZXR1cE1lcmdlYWJsZSxcbiAgICAgICAgb25TZXR1cFVubWVyZ2VhYmxlLFxuICAgICAgICByZXNldFRhcmdldHMsXG4gICAgICAgIG9uU2V0dXBUYWJsZVdpdGhDYXB0aW9uLFxuICAgICAgICBvblNldHVwVGFibGVSb3dIZWFkZXJzLFxuICAgICAgICBvblNldHVwVGFibGVDb2x1bW5IZWFkZXJzLFxuICAgICAgICB0YXJnZXRzOiB0YXJnZXRzLmdldFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgdmFyIGdsb2JhbCA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLkZha2VDbGlwYm9hcmQnKTtcblxuICAgIGNvbnN0IHRhYmxlVHlwZUJhc2UgPSAneC10aW55bWNlL2RvbS10YWJsZS0nO1xuICAgIGNvbnN0IHRhYmxlVHlwZVJvdyA9IHRhYmxlVHlwZUJhc2UgKyAncm93cyc7XG4gICAgY29uc3QgdGFibGVUeXBlQ29sdW1uID0gdGFibGVUeXBlQmFzZSArICdjb2x1bW5zJztcbiAgICBjb25zdCBnZXREYXRhID0gdHlwZSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBpdGVtcyA9IChfYSA9IGdsb2JhbC5yZWFkKCkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdO1xuICAgICAgcmV0dXJuIGZpbmRNYXAoaXRlbXMsIGl0ZW0gPT4gT3B0aW9uYWwuZnJvbShpdGVtLmdldFR5cGUodHlwZSkpKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFJvd3MgPSAoKSA9PiBnZXREYXRhKHRhYmxlVHlwZVJvdyk7XG4gICAgY29uc3QgZ2V0Q29sdW1ucyA9ICgpID0+IGdldERhdGEodGFibGVUeXBlQ29sdW1uKTtcblxuICAgIGNvbnN0IG9uU2V0dXBFZGl0YWJsZSQxID0gZWRpdG9yID0+IGFwaSA9PiB7XG4gICAgICBjb25zdCBub2RlQ2hhbmdlZCA9ICgpID0+IHtcbiAgICAgICAgYXBpLnNldEVuYWJsZWQoZWRpdG9yLnNlbGVjdGlvbi5pc0VkaXRhYmxlKCkpO1xuICAgICAgfTtcbiAgICAgIGVkaXRvci5vbignTm9kZUNoYW5nZScsIG5vZGVDaGFuZ2VkKTtcbiAgICAgIG5vZGVDaGFuZ2VkKCk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBlZGl0b3Iub2ZmKCdOb2RlQ2hhbmdlJywgbm9kZUNoYW5nZWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGFkZEJ1dHRvbnMgPSAoZWRpdG9yLCBzZWxlY3Rpb25UYXJnZXRzKSA9PiB7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTWVudUJ1dHRvbigndGFibGUnLCB7XG4gICAgICAgIHRvb2x0aXA6ICdUYWJsZScsXG4gICAgICAgIGljb246ICd0YWJsZScsXG4gICAgICAgIG9uU2V0dXA6IG9uU2V0dXBFZGl0YWJsZSQxKGVkaXRvciksXG4gICAgICAgIGZldGNoOiBjYWxsYmFjayA9PiBjYWxsYmFjaygnaW5zZXJ0dGFibGUgfCBjZWxsIHJvdyBjb2x1bW4gfCBhZHZ0YWJsZXNvcnQgfCB0YWJsZXByb3BzIGRlbGV0ZXRhYmxlJylcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY21kID0gY29tbWFuZCA9PiAoKSA9PiBlZGl0b3IuZXhlY0NvbW1hbmQoY29tbWFuZCk7XG4gICAgICBjb25zdCBhZGRCdXR0b25JZlJlZ2lzdGVyZWQgPSAobmFtZSwgc3BlYykgPT4ge1xuICAgICAgICBpZiAoZWRpdG9yLnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZChzcGVjLmNvbW1hbmQpKSB7XG4gICAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZEJ1dHRvbihuYW1lLCB7XG4gICAgICAgICAgICAuLi5zcGVjLFxuICAgICAgICAgICAgb25BY3Rpb246IGlzRnVuY3Rpb24oc3BlYy5vbkFjdGlvbikgPyBzcGVjLm9uQWN0aW9uIDogY21kKHNwZWMuY29tbWFuZClcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkZFRvZ2dsZUJ1dHRvbklmUmVnaXN0ZXJlZCA9IChuYW1lLCBzcGVjKSA9PiB7XG4gICAgICAgIGlmIChlZGl0b3IucXVlcnlDb21tYW5kU3VwcG9ydGVkKHNwZWMuY29tbWFuZCkpIHtcbiAgICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkVG9nZ2xlQnV0dG9uKG5hbWUsIHtcbiAgICAgICAgICAgIC4uLnNwZWMsXG4gICAgICAgICAgICBvbkFjdGlvbjogaXNGdW5jdGlvbihzcGVjLm9uQWN0aW9uKSA/IHNwZWMub25BY3Rpb24gOiBjbWQoc3BlYy5jb21tYW5kKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgYWRkQnV0dG9uSWZSZWdpc3RlcmVkKCd0YWJsZXByb3BzJywge1xuICAgICAgICB0b29sdGlwOiAnVGFibGUgcHJvcGVydGllcycsXG4gICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZVByb3BzJyxcbiAgICAgICAgaWNvbjogJ3RhYmxlJyxcbiAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwVGFibGVcbiAgICAgIH0pO1xuICAgICAgYWRkQnV0dG9uSWZSZWdpc3RlcmVkKCd0YWJsZWRlbGV0ZScsIHtcbiAgICAgICAgdG9vbHRpcDogJ0RlbGV0ZSB0YWJsZScsXG4gICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZURlbGV0ZScsXG4gICAgICAgIGljb246ICd0YWJsZS1kZWxldGUtdGFibGUnLFxuICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBUYWJsZVxuICAgICAgfSk7XG4gICAgICBhZGRCdXR0b25JZlJlZ2lzdGVyZWQoJ3RhYmxlY2VsbHByb3BzJywge1xuICAgICAgICB0b29sdGlwOiAnQ2VsbCBwcm9wZXJ0aWVzJyxcbiAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlQ2VsbFByb3BzJyxcbiAgICAgICAgaWNvbjogJ3RhYmxlLWNlbGwtcHJvcGVydGllcycsXG4gICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cENlbGxPclJvd1xuICAgICAgfSk7XG4gICAgICBhZGRCdXR0b25JZlJlZ2lzdGVyZWQoJ3RhYmxlbWVyZ2VjZWxscycsIHtcbiAgICAgICAgdG9vbHRpcDogJ01lcmdlIGNlbGxzJyxcbiAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlTWVyZ2VDZWxscycsXG4gICAgICAgIGljb246ICd0YWJsZS1tZXJnZS1jZWxscycsXG4gICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cE1lcmdlYWJsZVxuICAgICAgfSk7XG4gICAgICBhZGRCdXR0b25JZlJlZ2lzdGVyZWQoJ3RhYmxlc3BsaXRjZWxscycsIHtcbiAgICAgICAgdG9vbHRpcDogJ1NwbGl0IGNlbGwnLFxuICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVTcGxpdENlbGxzJyxcbiAgICAgICAgaWNvbjogJ3RhYmxlLXNwbGl0LWNlbGxzJyxcbiAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwVW5tZXJnZWFibGVcbiAgICAgIH0pO1xuICAgICAgYWRkQnV0dG9uSWZSZWdpc3RlcmVkKCd0YWJsZWluc2VydHJvd2JlZm9yZScsIHtcbiAgICAgICAgdG9vbHRpcDogJ0luc2VydCByb3cgYmVmb3JlJyxcbiAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlSW5zZXJ0Um93QmVmb3JlJyxcbiAgICAgICAgaWNvbjogJ3RhYmxlLWluc2VydC1yb3ctYWJvdmUnLFxuICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDZWxsT3JSb3dcbiAgICAgIH0pO1xuICAgICAgYWRkQnV0dG9uSWZSZWdpc3RlcmVkKCd0YWJsZWluc2VydHJvd2FmdGVyJywge1xuICAgICAgICB0b29sdGlwOiAnSW5zZXJ0IHJvdyBhZnRlcicsXG4gICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZUluc2VydFJvd0FmdGVyJyxcbiAgICAgICAgaWNvbjogJ3RhYmxlLWluc2VydC1yb3ctYWZ0ZXInLFxuICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDZWxsT3JSb3dcbiAgICAgIH0pO1xuICAgICAgYWRkQnV0dG9uSWZSZWdpc3RlcmVkKCd0YWJsZWRlbGV0ZXJvdycsIHtcbiAgICAgICAgdG9vbHRpcDogJ0RlbGV0ZSByb3cnLFxuICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVEZWxldGVSb3cnLFxuICAgICAgICBpY29uOiAndGFibGUtZGVsZXRlLXJvdycsXG4gICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cENlbGxPclJvd1xuICAgICAgfSk7XG4gICAgICBhZGRCdXR0b25JZlJlZ2lzdGVyZWQoJ3RhYmxlcm93cHJvcHMnLCB7XG4gICAgICAgIHRvb2x0aXA6ICdSb3cgcHJvcGVydGllcycsXG4gICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZVJvd1Byb3BzJyxcbiAgICAgICAgaWNvbjogJ3RhYmxlLXJvdy1wcm9wZXJ0aWVzJyxcbiAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwQ2VsbE9yUm93XG4gICAgICB9KTtcbiAgICAgIGFkZEJ1dHRvbklmUmVnaXN0ZXJlZCgndGFibGVpbnNlcnRjb2xiZWZvcmUnLCB7XG4gICAgICAgIHRvb2x0aXA6ICdJbnNlcnQgY29sdW1uIGJlZm9yZScsXG4gICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZUluc2VydENvbEJlZm9yZScsXG4gICAgICAgIGljb246ICd0YWJsZS1pbnNlcnQtY29sdW1uLWJlZm9yZScsXG4gICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cENvbHVtbignb25GaXJzdCcpXG4gICAgICB9KTtcbiAgICAgIGFkZEJ1dHRvbklmUmVnaXN0ZXJlZCgndGFibGVpbnNlcnRjb2xhZnRlcicsIHtcbiAgICAgICAgdG9vbHRpcDogJ0luc2VydCBjb2x1bW4gYWZ0ZXInLFxuICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVJbnNlcnRDb2xBZnRlcicsXG4gICAgICAgIGljb246ICd0YWJsZS1pbnNlcnQtY29sdW1uLWFmdGVyJyxcbiAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwQ29sdW1uKCdvbkxhc3QnKVxuICAgICAgfSk7XG4gICAgICBhZGRCdXR0b25JZlJlZ2lzdGVyZWQoJ3RhYmxlZGVsZXRlY29sJywge1xuICAgICAgICB0b29sdGlwOiAnRGVsZXRlIGNvbHVtbicsXG4gICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZURlbGV0ZUNvbCcsXG4gICAgICAgIGljb246ICd0YWJsZS1kZWxldGUtY29sdW1uJyxcbiAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwQ29sdW1uKCdvbkFueScpXG4gICAgICB9KTtcbiAgICAgIGFkZEJ1dHRvbklmUmVnaXN0ZXJlZCgndGFibGVjdXRyb3cnLCB7XG4gICAgICAgIHRvb2x0aXA6ICdDdXQgcm93JyxcbiAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlQ3V0Um93JyxcbiAgICAgICAgaWNvbjogJ2N1dC1yb3cnLFxuICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDZWxsT3JSb3dcbiAgICAgIH0pO1xuICAgICAgYWRkQnV0dG9uSWZSZWdpc3RlcmVkKCd0YWJsZWNvcHlyb3cnLCB7XG4gICAgICAgIHRvb2x0aXA6ICdDb3B5IHJvdycsXG4gICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZUNvcHlSb3cnLFxuICAgICAgICBpY29uOiAnZHVwbGljYXRlLXJvdycsXG4gICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cENlbGxPclJvd1xuICAgICAgfSk7XG4gICAgICBhZGRCdXR0b25JZlJlZ2lzdGVyZWQoJ3RhYmxlcGFzdGVyb3diZWZvcmUnLCB7XG4gICAgICAgIHRvb2x0aXA6ICdQYXN0ZSByb3cgYmVmb3JlJyxcbiAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlUGFzdGVSb3dCZWZvcmUnLFxuICAgICAgICBpY29uOiAncGFzdGUtcm93LWJlZm9yZScsXG4gICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cFBhc3RlYWJsZShnZXRSb3dzKVxuICAgICAgfSk7XG4gICAgICBhZGRCdXR0b25JZlJlZ2lzdGVyZWQoJ3RhYmxlcGFzdGVyb3dhZnRlcicsIHtcbiAgICAgICAgdG9vbHRpcDogJ1Bhc3RlIHJvdyBhZnRlcicsXG4gICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZVBhc3RlUm93QWZ0ZXInLFxuICAgICAgICBpY29uOiAncGFzdGUtcm93LWFmdGVyJyxcbiAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwUGFzdGVhYmxlKGdldFJvd3MpXG4gICAgICB9KTtcbiAgICAgIGFkZEJ1dHRvbklmUmVnaXN0ZXJlZCgndGFibGVjdXRjb2wnLCB7XG4gICAgICAgIHRvb2x0aXA6ICdDdXQgY29sdW1uJyxcbiAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlQ3V0Q29sJyxcbiAgICAgICAgaWNvbjogJ2N1dC1jb2x1bW4nLFxuICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDb2x1bW4oJ29uQW55JylcbiAgICAgIH0pO1xuICAgICAgYWRkQnV0dG9uSWZSZWdpc3RlcmVkKCd0YWJsZWNvcHljb2wnLCB7XG4gICAgICAgIHRvb2x0aXA6ICdDb3B5IGNvbHVtbicsXG4gICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZUNvcHlDb2wnLFxuICAgICAgICBpY29uOiAnZHVwbGljYXRlLWNvbHVtbicsXG4gICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cENvbHVtbignb25BbnknKVxuICAgICAgfSk7XG4gICAgICBhZGRCdXR0b25JZlJlZ2lzdGVyZWQoJ3RhYmxlcGFzdGVjb2xiZWZvcmUnLCB7XG4gICAgICAgIHRvb2x0aXA6ICdQYXN0ZSBjb2x1bW4gYmVmb3JlJyxcbiAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlUGFzdGVDb2xCZWZvcmUnLFxuICAgICAgICBpY29uOiAncGFzdGUtY29sdW1uLWJlZm9yZScsXG4gICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cFBhc3RlYWJsZUNvbHVtbihnZXRDb2x1bW5zLCAnb25GaXJzdCcpXG4gICAgICB9KTtcbiAgICAgIGFkZEJ1dHRvbklmUmVnaXN0ZXJlZCgndGFibGVwYXN0ZWNvbGFmdGVyJywge1xuICAgICAgICB0b29sdGlwOiAnUGFzdGUgY29sdW1uIGFmdGVyJyxcbiAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlUGFzdGVDb2xBZnRlcicsXG4gICAgICAgIGljb246ICdwYXN0ZS1jb2x1bW4tYWZ0ZXInLFxuICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBQYXN0ZWFibGVDb2x1bW4oZ2V0Q29sdW1ucywgJ29uTGFzdCcpXG4gICAgICB9KTtcbiAgICAgIGFkZEJ1dHRvbklmUmVnaXN0ZXJlZCgndGFibGVpbnNlcnRkaWFsb2cnLCB7XG4gICAgICAgIHRvb2x0aXA6ICdJbnNlcnQgdGFibGUnLFxuICAgICAgICBjb21tYW5kOiAnbWNlSW5zZXJ0VGFibGVEaWFsb2cnLFxuICAgICAgICBpY29uOiAndGFibGUnLFxuICAgICAgICBvblNldHVwOiBvblNldHVwRWRpdGFibGUkMShlZGl0b3IpXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHRhYmxlQ2xhc3NMaXN0ID0gZmlsdGVyTm9uZUl0ZW0oZ2V0VGFibGVDbGFzc0xpc3QoZWRpdG9yKSk7XG4gICAgICBpZiAodGFibGVDbGFzc0xpc3QubGVuZ3RoICE9PSAwICYmIGVkaXRvci5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoJ21jZVRhYmxlVG9nZ2xlQ2xhc3MnKSkge1xuICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTWVudUJ1dHRvbigndGFibGVjbGFzcycsIHtcbiAgICAgICAgICBpY29uOiAndGFibGUtY2xhc3NlcycsXG4gICAgICAgICAgdG9vbHRpcDogJ1RhYmxlIHN0eWxlcycsXG4gICAgICAgICAgZmV0Y2g6IGdlbmVyYXRlTWVudUl0ZW1zQ2FsbGJhY2soZWRpdG9yLCB0YWJsZUNsYXNzTGlzdCwgJ3RhYmxlY2xhc3MnLCB2YWx1ZSA9PiBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZVRhYmxlVG9nZ2xlQ2xhc3MnLCBmYWxzZSwgdmFsdWUpKSxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBUYWJsZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRhYmxlQ2VsbENsYXNzTGlzdCA9IGZpbHRlck5vbmVJdGVtKGdldENlbGxDbGFzc0xpc3QoZWRpdG9yKSk7XG4gICAgICBpZiAodGFibGVDZWxsQ2xhc3NMaXN0Lmxlbmd0aCAhPT0gMCAmJiBlZGl0b3IucXVlcnlDb21tYW5kU3VwcG9ydGVkKCdtY2VUYWJsZUNlbGxUb2dnbGVDbGFzcycpKSB7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRNZW51QnV0dG9uKCd0YWJsZWNlbGxjbGFzcycsIHtcbiAgICAgICAgICBpY29uOiAndGFibGUtY2VsbC1jbGFzc2VzJyxcbiAgICAgICAgICB0b29sdGlwOiAnQ2VsbCBzdHlsZXMnLFxuICAgICAgICAgIGZldGNoOiBnZW5lcmF0ZU1lbnVJdGVtc0NhbGxiYWNrKGVkaXRvciwgdGFibGVDZWxsQ2xhc3NMaXN0LCAndGFibGVjZWxsY2xhc3MnLCB2YWx1ZSA9PiBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZVRhYmxlQ2VsbFRvZ2dsZUNsYXNzJywgZmFsc2UsIHZhbHVlKSksXG4gICAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwQ2VsbE9yUm93XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGVkaXRvci5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoJ21jZVRhYmxlQXBwbHlDZWxsU3R5bGUnKSkge1xuICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTWVudUJ1dHRvbigndGFibGVjZWxsdmFsaWduJywge1xuICAgICAgICAgIGljb246ICd2ZXJ0aWNhbC1hbGlnbicsXG4gICAgICAgICAgdG9vbHRpcDogJ1ZlcnRpY2FsIGFsaWduJyxcbiAgICAgICAgICBmZXRjaDogZ2VuZXJhdGVNZW51SXRlbXNDYWxsYmFjayhlZGl0b3IsIHZlcnRpY2FsQWxpZ25WYWx1ZXMsICd0YWJsZWNlbGx2ZXJ0aWNhbGFsaWduJywgYXBwbHlUYWJsZUNlbGxTdHlsZShlZGl0b3IsICd2ZXJ0aWNhbC1hbGlnbicpKSxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDZWxsT3JSb3dcbiAgICAgICAgfSk7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRNZW51QnV0dG9uKCd0YWJsZWNlbGxib3JkZXJ3aWR0aCcsIHtcbiAgICAgICAgICBpY29uOiAnYm9yZGVyLXdpZHRoJyxcbiAgICAgICAgICB0b29sdGlwOiAnQm9yZGVyIHdpZHRoJyxcbiAgICAgICAgICBmZXRjaDogZ2VuZXJhdGVNZW51SXRlbXNDYWxsYmFjayhlZGl0b3IsIGdldFRhYmxlQm9yZGVyV2lkdGhzKGVkaXRvciksICd0YWJsZWNlbGxib3JkZXJ3aWR0aCcsIGFwcGx5VGFibGVDZWxsU3R5bGUoZWRpdG9yLCAnYm9yZGVyLXdpZHRoJykpLFxuICAgICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cENlbGxPclJvd1xuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE1lbnVCdXR0b24oJ3RhYmxlY2VsbGJvcmRlcnN0eWxlJywge1xuICAgICAgICAgIGljb246ICdib3JkZXItc3R5bGUnLFxuICAgICAgICAgIHRvb2x0aXA6ICdCb3JkZXIgc3R5bGUnLFxuICAgICAgICAgIGZldGNoOiBnZW5lcmF0ZU1lbnVJdGVtc0NhbGxiYWNrKGVkaXRvciwgZ2V0VGFibGVCb3JkZXJTdHlsZXMoZWRpdG9yKSwgJ3RhYmxlY2VsbGJvcmRlcnN0eWxlJywgYXBwbHlUYWJsZUNlbGxTdHlsZShlZGl0b3IsICdib3JkZXItc3R5bGUnKSksXG4gICAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwQ2VsbE9yUm93XG4gICAgICAgIH0pO1xuICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTWVudUJ1dHRvbigndGFibGVjZWxsYmFja2dyb3VuZGNvbG9yJywge1xuICAgICAgICAgIGljb246ICdjZWxsLWJhY2tncm91bmQtY29sb3InLFxuICAgICAgICAgIHRvb2x0aXA6ICdCYWNrZ3JvdW5kIGNvbG9yJyxcbiAgICAgICAgICBmZXRjaDogY2FsbGJhY2sgPT4gY2FsbGJhY2soYnVpbGRDb2xvck1lbnUoZWRpdG9yLCBnZXRUYWJsZUJhY2tncm91bmRDb2xvck1hcChlZGl0b3IpLCAnYmFja2dyb3VuZC1jb2xvcicpKSxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDZWxsT3JSb3dcbiAgICAgICAgfSk7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRNZW51QnV0dG9uKCd0YWJsZWNlbGxib3JkZXJjb2xvcicsIHtcbiAgICAgICAgICBpY29uOiAnY2VsbC1ib3JkZXItY29sb3InLFxuICAgICAgICAgIHRvb2x0aXA6ICdCb3JkZXIgY29sb3InLFxuICAgICAgICAgIGZldGNoOiBjYWxsYmFjayA9PiBjYWxsYmFjayhidWlsZENvbG9yTWVudShlZGl0b3IsIGdldFRhYmxlQm9yZGVyQ29sb3JNYXAoZWRpdG9yKSwgJ2JvcmRlci1jb2xvcicpKSxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDZWxsT3JSb3dcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhZGRUb2dnbGVCdXR0b25JZlJlZ2lzdGVyZWQoJ3RhYmxlY2FwdGlvbicsIHtcbiAgICAgICAgdG9vbHRpcDogJ1RhYmxlIGNhcHRpb24nLFxuICAgICAgICBpY29uOiAndGFibGUtY2FwdGlvbicsXG4gICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZVRvZ2dsZUNhcHRpb24nLFxuICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBUYWJsZVdpdGhDYXB0aW9uXG4gICAgICB9KTtcbiAgICAgIGFkZFRvZ2dsZUJ1dHRvbklmUmVnaXN0ZXJlZCgndGFibGVyb3doZWFkZXInLCB7XG4gICAgICAgIHRvb2x0aXA6ICdSb3cgaGVhZGVyJyxcbiAgICAgICAgaWNvbjogJ3RhYmxlLXRvcC1oZWFkZXInLFxuICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVSb3dUeXBlJyxcbiAgICAgICAgb25BY3Rpb246IGNoYW5nZVJvd0hlYWRlcihlZGl0b3IpLFxuICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBUYWJsZVJvd0hlYWRlcnNcbiAgICAgIH0pO1xuICAgICAgYWRkVG9nZ2xlQnV0dG9uSWZSZWdpc3RlcmVkKCd0YWJsZWNvbGhlYWRlcicsIHtcbiAgICAgICAgdG9vbHRpcDogJ0NvbHVtbiBoZWFkZXInLFxuICAgICAgICBpY29uOiAndGFibGUtbGVmdC1oZWFkZXInLFxuICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVDb2xUeXBlJyxcbiAgICAgICAgb25BY3Rpb246IGNoYW5nZUNvbHVtbkhlYWRlcihlZGl0b3IpLFxuICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBUYWJsZUNvbHVtbkhlYWRlcnNcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYWRkVG9vbGJhcnMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgaXNFZGl0YWJsZVRhYmxlID0gdGFibGUgPT4gZWRpdG9yLmRvbS5pcyh0YWJsZSwgJ3RhYmxlJykgJiYgZWRpdG9yLmdldEJvZHkoKS5jb250YWlucyh0YWJsZSkgJiYgZWRpdG9yLmRvbS5pc0VkaXRhYmxlKHRhYmxlLnBhcmVudE5vZGUpO1xuICAgICAgY29uc3QgdG9vbGJhciA9IGdldFRvb2xiYXIoZWRpdG9yKTtcbiAgICAgIGlmICh0b29sYmFyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZENvbnRleHRUb29sYmFyKCd0YWJsZScsIHtcbiAgICAgICAgICBwcmVkaWNhdGU6IGlzRWRpdGFibGVUYWJsZSxcbiAgICAgICAgICBpdGVtczogdG9vbGJhcixcbiAgICAgICAgICBzY29wZTogJ25vZGUnLFxuICAgICAgICAgIHBvc2l0aW9uOiAnbm9kZSdcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU2V0dXBFZGl0YWJsZSA9IGVkaXRvciA9PiBhcGkgPT4ge1xuICAgICAgY29uc3Qgbm9kZUNoYW5nZWQgPSAoKSA9PiB7XG4gICAgICAgIGFwaS5zZXRFbmFibGVkKGVkaXRvci5zZWxlY3Rpb24uaXNFZGl0YWJsZSgpKTtcbiAgICAgIH07XG4gICAgICBlZGl0b3Iub24oJ05vZGVDaGFuZ2UnLCBub2RlQ2hhbmdlZCk7XG4gICAgICBub2RlQ2hhbmdlZCgpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZWRpdG9yLm9mZignTm9kZUNoYW5nZScsIG5vZGVDaGFuZ2VkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBhZGRNZW51SXRlbXMgPSAoZWRpdG9yLCBzZWxlY3Rpb25UYXJnZXRzKSA9PiB7XG4gICAgICBjb25zdCBjbWQgPSBjb21tYW5kID0+ICgpID0+IGVkaXRvci5leGVjQ29tbWFuZChjb21tYW5kKTtcbiAgICAgIGNvbnN0IGFkZE1lbnVJZlJlZ2lzdGVyZWQgPSAobmFtZSwgc3BlYykgPT4ge1xuICAgICAgICBpZiAoZWRpdG9yLnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZChzcGVjLmNvbW1hbmQpKSB7XG4gICAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE1lbnVJdGVtKG5hbWUsIHtcbiAgICAgICAgICAgIC4uLnNwZWMsXG4gICAgICAgICAgICBvbkFjdGlvbjogaXNGdW5jdGlvbihzcGVjLm9uQWN0aW9uKSA/IHNwZWMub25BY3Rpb24gOiBjbWQoc3BlYy5jb21tYW5kKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkZFRvZ2dsZU1lbnVJZlJlZ2lzdGVyZWQgPSAobmFtZSwgc3BlYykgPT4ge1xuICAgICAgICBpZiAoZWRpdG9yLnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZChzcGVjLmNvbW1hbmQpKSB7XG4gICAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZFRvZ2dsZU1lbnVJdGVtKG5hbWUsIHtcbiAgICAgICAgICAgIC4uLnNwZWMsXG4gICAgICAgICAgICBvbkFjdGlvbjogaXNGdW5jdGlvbihzcGVjLm9uQWN0aW9uKSA/IHNwZWMub25BY3Rpb24gOiBjbWQoc3BlYy5jb21tYW5kKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgaW5zZXJ0VGFibGVBY3Rpb24gPSBkYXRhID0+IHtcbiAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VJbnNlcnRUYWJsZScsIGZhbHNlLCB7XG4gICAgICAgICAgcm93czogZGF0YS5udW1Sb3dzLFxuICAgICAgICAgIGNvbHVtbnM6IGRhdGEubnVtQ29sdW1uc1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBoYXNSb3dNZW51SXRlbXMgPSBbXG4gICAgICAgIGFkZE1lbnVJZlJlZ2lzdGVyZWQoJ3RhYmxlaW5zZXJ0cm93YmVmb3JlJywge1xuICAgICAgICAgIHRleHQ6ICdJbnNlcnQgcm93IGJlZm9yZScsXG4gICAgICAgICAgaWNvbjogJ3RhYmxlLWluc2VydC1yb3ctYWJvdmUnLFxuICAgICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZUluc2VydFJvd0JlZm9yZScsXG4gICAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwQ2VsbE9yUm93XG4gICAgICAgIH0pLFxuICAgICAgICBhZGRNZW51SWZSZWdpc3RlcmVkKCd0YWJsZWluc2VydHJvd2FmdGVyJywge1xuICAgICAgICAgIHRleHQ6ICdJbnNlcnQgcm93IGFmdGVyJyxcbiAgICAgICAgICBpY29uOiAndGFibGUtaW5zZXJ0LXJvdy1hZnRlcicsXG4gICAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlSW5zZXJ0Um93QWZ0ZXInLFxuICAgICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cENlbGxPclJvd1xuICAgICAgICB9KSxcbiAgICAgICAgYWRkTWVudUlmUmVnaXN0ZXJlZCgndGFibGVkZWxldGVyb3cnLCB7XG4gICAgICAgICAgdGV4dDogJ0RlbGV0ZSByb3cnLFxuICAgICAgICAgIGljb246ICd0YWJsZS1kZWxldGUtcm93JyxcbiAgICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVEZWxldGVSb3cnLFxuICAgICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cENlbGxPclJvd1xuICAgICAgICB9KSxcbiAgICAgICAgYWRkTWVudUlmUmVnaXN0ZXJlZCgndGFibGVyb3dwcm9wcycsIHtcbiAgICAgICAgICB0ZXh0OiAnUm93IHByb3BlcnRpZXMnLFxuICAgICAgICAgIGljb246ICd0YWJsZS1yb3ctcHJvcGVydGllcycsXG4gICAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlUm93UHJvcHMnLFxuICAgICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cENlbGxPclJvd1xuICAgICAgICB9KSxcbiAgICAgICAgYWRkTWVudUlmUmVnaXN0ZXJlZCgndGFibGVjdXRyb3cnLCB7XG4gICAgICAgICAgdGV4dDogJ0N1dCByb3cnLFxuICAgICAgICAgIGljb246ICdjdXQtcm93JyxcbiAgICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVDdXRSb3cnLFxuICAgICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cENlbGxPclJvd1xuICAgICAgICB9KSxcbiAgICAgICAgYWRkTWVudUlmUmVnaXN0ZXJlZCgndGFibGVjb3B5cm93Jywge1xuICAgICAgICAgIHRleHQ6ICdDb3B5IHJvdycsXG4gICAgICAgICAgaWNvbjogJ2R1cGxpY2F0ZS1yb3cnLFxuICAgICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZUNvcHlSb3cnLFxuICAgICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cENlbGxPclJvd1xuICAgICAgICB9KSxcbiAgICAgICAgYWRkTWVudUlmUmVnaXN0ZXJlZCgndGFibGVwYXN0ZXJvd2JlZm9yZScsIHtcbiAgICAgICAgICB0ZXh0OiAnUGFzdGUgcm93IGJlZm9yZScsXG4gICAgICAgICAgaWNvbjogJ3Bhc3RlLXJvdy1iZWZvcmUnLFxuICAgICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZVBhc3RlUm93QmVmb3JlJyxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBQYXN0ZWFibGUoZ2V0Um93cylcbiAgICAgICAgfSksXG4gICAgICAgIGFkZE1lbnVJZlJlZ2lzdGVyZWQoJ3RhYmxlcGFzdGVyb3dhZnRlcicsIHtcbiAgICAgICAgICB0ZXh0OiAnUGFzdGUgcm93IGFmdGVyJyxcbiAgICAgICAgICBpY29uOiAncGFzdGUtcm93LWFmdGVyJyxcbiAgICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVQYXN0ZVJvd0FmdGVyJyxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBQYXN0ZWFibGUoZ2V0Um93cylcbiAgICAgICAgfSlcbiAgICAgIF07XG4gICAgICBjb25zdCBoYXNDb2x1bW5NZW51SXRlbXMgPSBbXG4gICAgICAgIGFkZE1lbnVJZlJlZ2lzdGVyZWQoJ3RhYmxlaW5zZXJ0Y29sdW1uYmVmb3JlJywge1xuICAgICAgICAgIHRleHQ6ICdJbnNlcnQgY29sdW1uIGJlZm9yZScsXG4gICAgICAgICAgaWNvbjogJ3RhYmxlLWluc2VydC1jb2x1bW4tYmVmb3JlJyxcbiAgICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVJbnNlcnRDb2xCZWZvcmUnLFxuICAgICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cENvbHVtbignb25GaXJzdCcpXG4gICAgICAgIH0pLFxuICAgICAgICBhZGRNZW51SWZSZWdpc3RlcmVkKCd0YWJsZWluc2VydGNvbHVtbmFmdGVyJywge1xuICAgICAgICAgIHRleHQ6ICdJbnNlcnQgY29sdW1uIGFmdGVyJyxcbiAgICAgICAgICBpY29uOiAndGFibGUtaW5zZXJ0LWNvbHVtbi1hZnRlcicsXG4gICAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlSW5zZXJ0Q29sQWZ0ZXInLFxuICAgICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cENvbHVtbignb25MYXN0JylcbiAgICAgICAgfSksXG4gICAgICAgIGFkZE1lbnVJZlJlZ2lzdGVyZWQoJ3RhYmxlZGVsZXRlY29sdW1uJywge1xuICAgICAgICAgIHRleHQ6ICdEZWxldGUgY29sdW1uJyxcbiAgICAgICAgICBpY29uOiAndGFibGUtZGVsZXRlLWNvbHVtbicsXG4gICAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlRGVsZXRlQ29sJyxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDb2x1bW4oJ29uQW55JylcbiAgICAgICAgfSksXG4gICAgICAgIGFkZE1lbnVJZlJlZ2lzdGVyZWQoJ3RhYmxlY3V0Y29sdW1uJywge1xuICAgICAgICAgIHRleHQ6ICdDdXQgY29sdW1uJyxcbiAgICAgICAgICBpY29uOiAnY3V0LWNvbHVtbicsXG4gICAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlQ3V0Q29sJyxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDb2x1bW4oJ29uQW55JylcbiAgICAgICAgfSksXG4gICAgICAgIGFkZE1lbnVJZlJlZ2lzdGVyZWQoJ3RhYmxlY29weWNvbHVtbicsIHtcbiAgICAgICAgICB0ZXh0OiAnQ29weSBjb2x1bW4nLFxuICAgICAgICAgIGljb246ICdkdXBsaWNhdGUtY29sdW1uJyxcbiAgICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVDb3B5Q29sJyxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDb2x1bW4oJ29uQW55JylcbiAgICAgICAgfSksXG4gICAgICAgIGFkZE1lbnVJZlJlZ2lzdGVyZWQoJ3RhYmxlcGFzdGVjb2x1bW5iZWZvcmUnLCB7XG4gICAgICAgICAgdGV4dDogJ1Bhc3RlIGNvbHVtbiBiZWZvcmUnLFxuICAgICAgICAgIGljb246ICdwYXN0ZS1jb2x1bW4tYmVmb3JlJyxcbiAgICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVQYXN0ZUNvbEJlZm9yZScsXG4gICAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwUGFzdGVhYmxlQ29sdW1uKGdldENvbHVtbnMsICdvbkZpcnN0JylcbiAgICAgICAgfSksXG4gICAgICAgIGFkZE1lbnVJZlJlZ2lzdGVyZWQoJ3RhYmxlcGFzdGVjb2x1bW5hZnRlcicsIHtcbiAgICAgICAgICB0ZXh0OiAnUGFzdGUgY29sdW1uIGFmdGVyJyxcbiAgICAgICAgICBpY29uOiAncGFzdGUtY29sdW1uLWFmdGVyJyxcbiAgICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVQYXN0ZUNvbEFmdGVyJyxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBQYXN0ZWFibGVDb2x1bW4oZ2V0Q29sdW1ucywgJ29uTGFzdCcpXG4gICAgICAgIH0pXG4gICAgICBdO1xuICAgICAgY29uc3QgaGFzQ2VsbE1lbnVJdGVtcyA9IFtcbiAgICAgICAgYWRkTWVudUlmUmVnaXN0ZXJlZCgndGFibGVjZWxscHJvcHMnLCB7XG4gICAgICAgICAgdGV4dDogJ0NlbGwgcHJvcGVydGllcycsXG4gICAgICAgICAgaWNvbjogJ3RhYmxlLWNlbGwtcHJvcGVydGllcycsXG4gICAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlQ2VsbFByb3BzJyxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDZWxsT3JSb3dcbiAgICAgICAgfSksXG4gICAgICAgIGFkZE1lbnVJZlJlZ2lzdGVyZWQoJ3RhYmxlbWVyZ2VjZWxscycsIHtcbiAgICAgICAgICB0ZXh0OiAnTWVyZ2UgY2VsbHMnLFxuICAgICAgICAgIGljb246ICd0YWJsZS1tZXJnZS1jZWxscycsXG4gICAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlTWVyZ2VDZWxscycsXG4gICAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwTWVyZ2VhYmxlXG4gICAgICAgIH0pLFxuICAgICAgICBhZGRNZW51SWZSZWdpc3RlcmVkKCd0YWJsZXNwbGl0Y2VsbHMnLCB7XG4gICAgICAgICAgdGV4dDogJ1NwbGl0IGNlbGwnLFxuICAgICAgICAgIGljb246ICd0YWJsZS1zcGxpdC1jZWxscycsXG4gICAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlU3BsaXRDZWxscycsXG4gICAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwVW5tZXJnZWFibGVcbiAgICAgICAgfSlcbiAgICAgIF07XG4gICAgICBpZiAoIWhhc1RhYmxlR3JpZChlZGl0b3IpKSB7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRNZW51SXRlbSgnaW5zZXJ0dGFibGUnLCB7XG4gICAgICAgICAgdGV4dDogJ1RhYmxlJyxcbiAgICAgICAgICBpY29uOiAndGFibGUnLFxuICAgICAgICAgIG9uQWN0aW9uOiBjbWQoJ21jZUluc2VydFRhYmxlRGlhbG9nJyksXG4gICAgICAgICAgb25TZXR1cDogb25TZXR1cEVkaXRhYmxlKGVkaXRvcilcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTmVzdGVkTWVudUl0ZW0oJ2luc2VydHRhYmxlJywge1xuICAgICAgICAgIHRleHQ6ICdUYWJsZScsXG4gICAgICAgICAgaWNvbjogJ3RhYmxlJyxcbiAgICAgICAgICBnZXRTdWJtZW51SXRlbXM6ICgpID0+IFt7XG4gICAgICAgICAgICAgIHR5cGU6ICdmYW5jeW1lbnVpdGVtJyxcbiAgICAgICAgICAgICAgZmFuY3l0eXBlOiAnaW5zZXJ0dGFibGUnLFxuICAgICAgICAgICAgICBvbkFjdGlvbjogaW5zZXJ0VGFibGVBY3Rpb25cbiAgICAgICAgICAgIH1dLFxuICAgICAgICAgIG9uU2V0dXA6IG9uU2V0dXBFZGl0YWJsZShlZGl0b3IpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE1lbnVJdGVtKCdpbnNlcnR0YWJsZWRpYWxvZycsIHtcbiAgICAgICAgdGV4dDogJ0luc2VydCB0YWJsZScsXG4gICAgICAgIGljb246ICd0YWJsZScsXG4gICAgICAgIG9uQWN0aW9uOiBjbWQoJ21jZUluc2VydFRhYmxlRGlhbG9nJyksXG4gICAgICAgIG9uU2V0dXA6IG9uU2V0dXBFZGl0YWJsZShlZGl0b3IpXG4gICAgICB9KTtcbiAgICAgIGFkZE1lbnVJZlJlZ2lzdGVyZWQoJ3RhYmxlcHJvcHMnLCB7XG4gICAgICAgIHRleHQ6ICdUYWJsZSBwcm9wZXJ0aWVzJyxcbiAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwVGFibGUsXG4gICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZVByb3BzJ1xuICAgICAgfSk7XG4gICAgICBhZGRNZW51SWZSZWdpc3RlcmVkKCdkZWxldGV0YWJsZScsIHtcbiAgICAgICAgdGV4dDogJ0RlbGV0ZSB0YWJsZScsXG4gICAgICAgIGljb246ICd0YWJsZS1kZWxldGUtdGFibGUnLFxuICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBUYWJsZSxcbiAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlRGVsZXRlJ1xuICAgICAgfSk7XG4gICAgICBpZiAoY29udGFpbnMoaGFzUm93TWVudUl0ZW1zLCB0cnVlKSkge1xuICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTmVzdGVkTWVudUl0ZW0oJ3JvdycsIHtcbiAgICAgICAgICB0eXBlOiAnbmVzdGVkbWVudWl0ZW0nLFxuICAgICAgICAgIHRleHQ6ICdSb3cnLFxuICAgICAgICAgIGdldFN1Ym1lbnVJdGVtczogY29uc3RhbnQoJ3RhYmxlaW5zZXJ0cm93YmVmb3JlIHRhYmxlaW5zZXJ0cm93YWZ0ZXIgdGFibGVkZWxldGVyb3cgdGFibGVyb3dwcm9wcyB8IHRhYmxlY3V0cm93IHRhYmxlY29weXJvdyB0YWJsZXBhc3Rlcm93YmVmb3JlIHRhYmxlcGFzdGVyb3dhZnRlcicpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRhaW5zKGhhc0NvbHVtbk1lbnVJdGVtcywgdHJ1ZSkpIHtcbiAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE5lc3RlZE1lbnVJdGVtKCdjb2x1bW4nLCB7XG4gICAgICAgICAgdHlwZTogJ25lc3RlZG1lbnVpdGVtJyxcbiAgICAgICAgICB0ZXh0OiAnQ29sdW1uJyxcbiAgICAgICAgICBnZXRTdWJtZW51SXRlbXM6IGNvbnN0YW50KCd0YWJsZWluc2VydGNvbHVtbmJlZm9yZSB0YWJsZWluc2VydGNvbHVtbmFmdGVyIHRhYmxlZGVsZXRlY29sdW1uIHwgdGFibGVjdXRjb2x1bW4gdGFibGVjb3B5Y29sdW1uIHRhYmxlcGFzdGVjb2x1bW5iZWZvcmUgdGFibGVwYXN0ZWNvbHVtbmFmdGVyJylcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoY29udGFpbnMoaGFzQ2VsbE1lbnVJdGVtcywgdHJ1ZSkpIHtcbiAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE5lc3RlZE1lbnVJdGVtKCdjZWxsJywge1xuICAgICAgICAgIHR5cGU6ICduZXN0ZWRtZW51aXRlbScsXG4gICAgICAgICAgdGV4dDogJ0NlbGwnLFxuICAgICAgICAgIGdldFN1Ym1lbnVJdGVtczogY29uc3RhbnQoJ3RhYmxlY2VsbHByb3BzIHRhYmxlbWVyZ2VjZWxscyB0YWJsZXNwbGl0Y2VsbHMnKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRDb250ZXh0TWVudSgndGFibGUnLCB7XG4gICAgICAgIHVwZGF0ZTogKCkgPT4ge1xuICAgICAgICAgIHNlbGVjdGlvblRhcmdldHMucmVzZXRUYXJnZXRzKCk7XG4gICAgICAgICAgcmV0dXJuIHNlbGVjdGlvblRhcmdldHMudGFyZ2V0cygpLmZvbGQoY29uc3RhbnQoJycpLCB0YXJnZXRzID0+IHtcbiAgICAgICAgICAgIGlmIChuYW1lKHRhcmdldHMuZWxlbWVudCkgPT09ICdjYXB0aW9uJykge1xuICAgICAgICAgICAgICByZXR1cm4gJ3RhYmxlcHJvcHMgZGVsZXRldGFibGUnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuICdjZWxsIHJvdyBjb2x1bW4gfCBhZHZ0YWJsZXNvcnQgfCB0YWJsZXByb3BzIGRlbGV0ZXRhYmxlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCB0YWJsZUNsYXNzTGlzdCA9IGZpbHRlck5vbmVJdGVtKGdldFRhYmxlQ2xhc3NMaXN0KGVkaXRvcikpO1xuICAgICAgaWYgKHRhYmxlQ2xhc3NMaXN0Lmxlbmd0aCAhPT0gMCAmJiBlZGl0b3IucXVlcnlDb21tYW5kU3VwcG9ydGVkKCdtY2VUYWJsZVRvZ2dsZUNsYXNzJykpIHtcbiAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE5lc3RlZE1lbnVJdGVtKCd0YWJsZWNsYXNzJywge1xuICAgICAgICAgIGljb246ICd0YWJsZS1jbGFzc2VzJyxcbiAgICAgICAgICB0ZXh0OiAnVGFibGUgc3R5bGVzJyxcbiAgICAgICAgICBnZXRTdWJtZW51SXRlbXM6ICgpID0+IGJ1aWxkTWVudUl0ZW1zKGVkaXRvciwgdGFibGVDbGFzc0xpc3QsICd0YWJsZWNsYXNzJywgdmFsdWUgPT4gZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VUYWJsZVRvZ2dsZUNsYXNzJywgZmFsc2UsIHZhbHVlKSksXG4gICAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwVGFibGVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCB0YWJsZUNlbGxDbGFzc0xpc3QgPSBmaWx0ZXJOb25lSXRlbShnZXRDZWxsQ2xhc3NMaXN0KGVkaXRvcikpO1xuICAgICAgaWYgKHRhYmxlQ2VsbENsYXNzTGlzdC5sZW5ndGggIT09IDAgJiYgZWRpdG9yLnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZCgnbWNlVGFibGVDZWxsVG9nZ2xlQ2xhc3MnKSkge1xuICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTmVzdGVkTWVudUl0ZW0oJ3RhYmxlY2VsbGNsYXNzJywge1xuICAgICAgICAgIGljb246ICd0YWJsZS1jZWxsLWNsYXNzZXMnLFxuICAgICAgICAgIHRleHQ6ICdDZWxsIHN0eWxlcycsXG4gICAgICAgICAgZ2V0U3VibWVudUl0ZW1zOiAoKSA9PiBidWlsZE1lbnVJdGVtcyhlZGl0b3IsIHRhYmxlQ2VsbENsYXNzTGlzdCwgJ3RhYmxlY2VsbGNsYXNzJywgdmFsdWUgPT4gZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VUYWJsZUNlbGxUb2dnbGVDbGFzcycsIGZhbHNlLCB2YWx1ZSkpLFxuICAgICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cENlbGxPclJvd1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChlZGl0b3IucXVlcnlDb21tYW5kU3VwcG9ydGVkKCdtY2VUYWJsZUFwcGx5Q2VsbFN0eWxlJykpIHtcbiAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE5lc3RlZE1lbnVJdGVtKCd0YWJsZWNlbGx2YWxpZ24nLCB7XG4gICAgICAgICAgaWNvbjogJ3ZlcnRpY2FsLWFsaWduJyxcbiAgICAgICAgICB0ZXh0OiAnVmVydGljYWwgYWxpZ24nLFxuICAgICAgICAgIGdldFN1Ym1lbnVJdGVtczogKCkgPT4gYnVpbGRNZW51SXRlbXMoZWRpdG9yLCB2ZXJ0aWNhbEFsaWduVmFsdWVzLCAndGFibGVjZWxsdmVydGljYWxhbGlnbicsIGFwcGx5VGFibGVDZWxsU3R5bGUoZWRpdG9yLCAndmVydGljYWwtYWxpZ24nKSksXG4gICAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwQ2VsbE9yUm93XG4gICAgICAgIH0pO1xuICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTmVzdGVkTWVudUl0ZW0oJ3RhYmxlY2VsbGJvcmRlcndpZHRoJywge1xuICAgICAgICAgIGljb246ICdib3JkZXItd2lkdGgnLFxuICAgICAgICAgIHRleHQ6ICdCb3JkZXIgd2lkdGgnLFxuICAgICAgICAgIGdldFN1Ym1lbnVJdGVtczogKCkgPT4gYnVpbGRNZW51SXRlbXMoZWRpdG9yLCBnZXRUYWJsZUJvcmRlcldpZHRocyhlZGl0b3IpLCAndGFibGVjZWxsYm9yZGVyd2lkdGgnLCBhcHBseVRhYmxlQ2VsbFN0eWxlKGVkaXRvciwgJ2JvcmRlci13aWR0aCcpKSxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDZWxsT3JSb3dcbiAgICAgICAgfSk7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGROZXN0ZWRNZW51SXRlbSgndGFibGVjZWxsYm9yZGVyc3R5bGUnLCB7XG4gICAgICAgICAgaWNvbjogJ2JvcmRlci1zdHlsZScsXG4gICAgICAgICAgdGV4dDogJ0JvcmRlciBzdHlsZScsXG4gICAgICAgICAgZ2V0U3VibWVudUl0ZW1zOiAoKSA9PiBidWlsZE1lbnVJdGVtcyhlZGl0b3IsIGdldFRhYmxlQm9yZGVyU3R5bGVzKGVkaXRvciksICd0YWJsZWNlbGxib3JkZXJzdHlsZScsIGFwcGx5VGFibGVDZWxsU3R5bGUoZWRpdG9yLCAnYm9yZGVyLXN0eWxlJykpLFxuICAgICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cENlbGxPclJvd1xuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE5lc3RlZE1lbnVJdGVtKCd0YWJsZWNlbGxiYWNrZ3JvdW5kY29sb3InLCB7XG4gICAgICAgICAgaWNvbjogJ2NlbGwtYmFja2dyb3VuZC1jb2xvcicsXG4gICAgICAgICAgdGV4dDogJ0JhY2tncm91bmQgY29sb3InLFxuICAgICAgICAgIGdldFN1Ym1lbnVJdGVtczogKCkgPT4gYnVpbGRDb2xvck1lbnUoZWRpdG9yLCBnZXRUYWJsZUJhY2tncm91bmRDb2xvck1hcChlZGl0b3IpLCAnYmFja2dyb3VuZC1jb2xvcicpLFxuICAgICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cENlbGxPclJvd1xuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE5lc3RlZE1lbnVJdGVtKCd0YWJsZWNlbGxib3JkZXJjb2xvcicsIHtcbiAgICAgICAgICBpY29uOiAnY2VsbC1ib3JkZXItY29sb3InLFxuICAgICAgICAgIHRleHQ6ICdCb3JkZXIgY29sb3InLFxuICAgICAgICAgIGdldFN1Ym1lbnVJdGVtczogKCkgPT4gYnVpbGRDb2xvck1lbnUoZWRpdG9yLCBnZXRUYWJsZUJvcmRlckNvbG9yTWFwKGVkaXRvciksICdib3JkZXItY29sb3InKSxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDZWxsT3JSb3dcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhZGRUb2dnbGVNZW51SWZSZWdpc3RlcmVkKCd0YWJsZWNhcHRpb24nLCB7XG4gICAgICAgIGljb246ICd0YWJsZS1jYXB0aW9uJyxcbiAgICAgICAgdGV4dDogJ1RhYmxlIGNhcHRpb24nLFxuICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVUb2dnbGVDYXB0aW9uJyxcbiAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwVGFibGVXaXRoQ2FwdGlvblxuICAgICAgfSk7XG4gICAgICBhZGRUb2dnbGVNZW51SWZSZWdpc3RlcmVkKCd0YWJsZXJvd2hlYWRlcicsIHtcbiAgICAgICAgdGV4dDogJ1JvdyBoZWFkZXInLFxuICAgICAgICBpY29uOiAndGFibGUtdG9wLWhlYWRlcicsXG4gICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZVJvd1R5cGUnLFxuICAgICAgICBvbkFjdGlvbjogY2hhbmdlUm93SGVhZGVyKGVkaXRvciksXG4gICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cFRhYmxlUm93SGVhZGVyc1xuICAgICAgfSk7XG4gICAgICBhZGRUb2dnbGVNZW51SWZSZWdpc3RlcmVkKCd0YWJsZWNvbGhlYWRlcicsIHtcbiAgICAgICAgdGV4dDogJ0NvbHVtbiBoZWFkZXInLFxuICAgICAgICBpY29uOiAndGFibGUtbGVmdC1oZWFkZXInLFxuICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVDb2xUeXBlJyxcbiAgICAgICAgb25BY3Rpb246IGNoYW5nZUNvbHVtbkhlYWRlcihlZGl0b3IpLFxuICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBUYWJsZVJvd0hlYWRlcnNcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBQbHVnaW4gPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uVGFyZ2V0cyA9IGdldFNlbGVjdGlvblRhcmdldHMoZWRpdG9yKTtcbiAgICAgIHJlZ2lzdGVyKGVkaXRvcik7XG4gICAgICByZWdpc3RlckNvbW1hbmRzKGVkaXRvcik7XG4gICAgICBhZGRNZW51SXRlbXMoZWRpdG9yLCBzZWxlY3Rpb25UYXJnZXRzKTtcbiAgICAgIGFkZEJ1dHRvbnMoZWRpdG9yLCBzZWxlY3Rpb25UYXJnZXRzKTtcbiAgICAgIGFkZFRvb2xiYXJzKGVkaXRvcik7XG4gICAgfTtcbiAgICB2YXIgUGx1Z2luJDEgPSAoKSA9PiB7XG4gICAgICBnbG9iYWwkMy5hZGQoJ3RhYmxlJywgUGx1Z2luKTtcbiAgICB9O1xuXG4gICAgUGx1Z2luJDEoKTtcblxufSkoKTtcbiIsInZhciBjc3MgPSBcIi50b3gge1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xcbiAgY29sb3I6ICMyMjJmM2U7XFxuICBjdXJzb3I6IGF1dG87XFxuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcXFwiU2Vnb2UgVUlcXFwiLCBSb2JvdG8sIE94eWdlbi1TYW5zLCBVYnVudHUsIENhbnRhcmVsbCwgXFxcIkhlbHZldGljYSBOZXVlXFxcIiwgc2Fucy1zZXJpZjtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XFxuICBsaW5lLWhlaWdodDogbm9ybWFsO1xcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIHRleHQtc2hhZG93OiBub25lO1xcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XFxuICB2ZXJ0aWNhbC1hbGlnbjogaW5pdGlhbDtcXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxufVxcbi50b3ggKjpub3Qoc3ZnKTpub3QocmVjdCkge1xcbiAgYm94LXNpemluZzogaW5oZXJpdDtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgY3Vyc29yOiBpbmhlcml0O1xcbiAgZGlyZWN0aW9uOiBpbmhlcml0O1xcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XFxuICBmb250LXNpemU6IGluaGVyaXQ7XFxuICBmb250LXN0eWxlOiBpbmhlcml0O1xcbiAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogaW5oZXJpdDtcXG4gIHRleHQtYWxpZ246IGluaGVyaXQ7XFxuICB0ZXh0LWRlY29yYXRpb246IGluaGVyaXQ7XFxuICB0ZXh0LXNoYWRvdzogaW5oZXJpdDtcXG4gIHRleHQtdHJhbnNmb3JtOiBpbmhlcml0O1xcbiAgdmVydGljYWwtYWxpZ246IGluaGVyaXQ7XFxuICB3aGl0ZS1zcGFjZTogaW5oZXJpdDtcXG59XFxuLnRveCAqOm5vdChzdmcpOm5vdChyZWN0KSB7XFxuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIG5vLWR1cGxpY2F0ZS1zZWxlY3RvcnMgKi9cXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiAwO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGZsb2F0OiBub25lO1xcbiAgaGVpZ2h0OiBhdXRvO1xcbiAgbWFyZ2luOiAwO1xcbiAgbWF4LXdpZHRoOiBub25lO1xcbiAgb3V0bGluZTogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBwb3NpdGlvbjogc3RhdGljO1xcbiAgd2lkdGg6IGF1dG87XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkge1xcbiAgZGlyZWN0aW9uOiBsdHI7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbn1cXG4udG94W2Rpcj1ydGxdIHtcXG4gIGRpcmVjdGlvbjogcnRsO1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XFxufVxcbi50b3gtdGlueW1jZSB7XFxuICBib3JkZXI6IDJweCBzb2xpZCAjZWVlZWVlO1xcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcXFwiU2Vnb2UgVUlcXFwiLCBSb2JvdG8sIE94eWdlbi1TYW5zLCBVYnVudHUsIENhbnRhcmVsbCwgXFxcIkhlbHZldGljYSBOZXVlXFxcIiwgc2Fucy1zZXJpZjtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB2aXNpYmlsaXR5OiBpbmhlcml0ICFpbXBvcnRhbnQ7XFxufVxcbi50b3gudG94LXRpbnltY2UtaW5saW5lIHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBvdmVyZmxvdzogaW5pdGlhbDtcXG59XFxuLnRveC50b3gtdGlueW1jZS1pbmxpbmUgLnRveC1lZGl0b3ItY29udGFpbmVyIHtcXG4gIG92ZXJmbG93OiBpbml0aWFsO1xcbn1cXG4udG94LnRveC10aW55bWNlLWlubGluZSAudG94LWVkaXRvci1oZWFkZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlcjogMnB4IHNvbGlkICNlZWVlZWU7XFxuICBib3JkZXItcmFkaXVzOiAxMHB4O1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi50b3gtdGlueW1jZS1hdXgge1xcbiAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXFxcIlNlZ29lIFVJXFxcIiwgUm9ib3RvLCBPeHlnZW4tU2FucywgVWJ1bnR1LCBDYW50YXJlbGwsIFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsIHNhbnMtc2VyaWY7XFxuICB6LWluZGV4OiAxMzAwO1xcbn1cXG4udG94LXRpbnltY2UgKjpmb2N1cyxcXG4udG94LXRpbnltY2UtYXV4ICo6Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuYnV0dG9uOjotbW96LWZvY3VzLWlubmVyIHtcXG4gIGJvcmRlcjogMDtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LWljb24tLWZsaXAgc3ZnIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlWSgxODBkZWcpO1xcbn1cXG4udG94IC5hY2Nlc3NpYmlsaXR5LWlzc3VlX19oZWFkZXIge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBtYXJnaW4tYm90dG9tOiA0cHg7XFxufVxcbi50b3ggLmFjY2Vzc2liaWxpdHktaXNzdWVfX2Rlc2NyaXB0aW9uIHtcXG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG59XFxuLnRveCAuYWNjZXNzaWJpbGl0eS1pc3N1ZV9fZGVzY3JpcHRpb24gPiBkaXYge1xcbiAgcGFkZGluZy1ib3R0b206IDRweDtcXG59XFxuLnRveCAuYWNjZXNzaWJpbGl0eS1pc3N1ZV9fZGVzY3JpcHRpb24gPiBkaXYgPiBkaXYge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBtYXJnaW4tYm90dG9tOiA0cHg7XFxufVxcbi50b3ggLmFjY2Vzc2liaWxpdHktaXNzdWVfX2Rlc2NyaXB0aW9uID4gZGl2ID4gZGl2IC50b3gtaWNvbiBzdmcge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcbi50b3ggLmFjY2Vzc2liaWxpdHktaXNzdWVfX3JlcGFpciB7XFxuICBtYXJnaW4tdG9wOiAxNnB4O1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLmFjY2Vzc2liaWxpdHktaXNzdWUtLWluZm8gLmFjY2Vzc2liaWxpdHktaXNzdWVfX2Rlc2NyaXB0aW9uIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTAxLCAyMTYsIDAuMSk7XFxuICBjb2xvcjogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC5hY2Nlc3NpYmlsaXR5LWlzc3VlLS1pbmZvIC50b3gtZm9ybV9fZ3JvdXAgaDIge1xcbiAgY29sb3I6ICMwMDZjZTc7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZS0taW5mbyAudG94LWljb24gc3ZnIHtcXG4gIGZpbGw6ICMwMDZjZTc7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZS0taW5mbyBhLnRveC1idXR0b24tLW5ha2VkLnRveC1idXR0b24tLWljb24ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNmNlNztcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLmFjY2Vzc2liaWxpdHktaXNzdWUtLWluZm8gYS50b3gtYnV0dG9uLS1uYWtlZC50b3gtYnV0dG9uLS1pY29uOmhvdmVyLFxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZS0taW5mbyBhLnRveC1idXR0b24tLW5ha2VkLnRveC1idXR0b24tLWljb246Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNjBjZTtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC5hY2Nlc3NpYmlsaXR5LWlzc3VlLS1pbmZvIGEudG94LWJ1dHRvbi0tbmFrZWQudG94LWJ1dHRvbi0taWNvbjphY3RpdmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNTRiNDtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC5hY2Nlc3NpYmlsaXR5LWlzc3VlLS13YXJuIHtcXG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1kZXNjZW5kaW5nLXNwZWNpZmljaXR5ICovXFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZS0td2FybiAuYWNjZXNzaWJpbGl0eS1pc3N1ZV9fZGVzY3JpcHRpb24ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDE2NSwgMCwgMC4wOCk7XFxuICBjb2xvcjogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC5hY2Nlc3NpYmlsaXR5LWlzc3VlLS13YXJuIC50b3gtZm9ybV9fZ3JvdXAgaDIge1xcbiAgY29sb3I6ICM4ZjVkMDA7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZS0td2FybiAudG94LWljb24gc3ZnIHtcXG4gIGZpbGw6ICM4ZjVkMDA7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZS0td2FybiBhLnRveC1idXR0b24tLW5ha2VkLnRveC1idXR0b24tLWljb24ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRTg5RDtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLmFjY2Vzc2liaWxpdHktaXNzdWUtLXdhcm4gYS50b3gtYnV0dG9uLS1uYWtlZC50b3gtYnV0dG9uLS1pY29uOmhvdmVyLFxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZS0td2FybiBhLnRveC1idXR0b24tLW5ha2VkLnRveC1idXR0b24tLWljb246Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI0YyRDU3NDtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLmFjY2Vzc2liaWxpdHktaXNzdWUtLXdhcm4gYS50b3gtYnV0dG9uLS1uYWtlZC50b3gtYnV0dG9uLS1pY29uOmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRThDNjU3O1xcbiAgY29sb3I6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZS0tZXJyb3Ige1xcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWRlc2NlbmRpbmctc3BlY2lmaWNpdHkgKi9cXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC5hY2Nlc3NpYmlsaXR5LWlzc3VlLS1lcnJvciAuYWNjZXNzaWJpbGl0eS1pc3N1ZV9fZGVzY3JpcHRpb24ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyMDQsIDAsIDAsIDAuMSk7XFxuICBjb2xvcjogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC5hY2Nlc3NpYmlsaXR5LWlzc3VlLS1lcnJvciAudG94LWZvcm1fX2dyb3VwIGgyIHtcXG4gIGNvbG9yOiAjYzAwO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLmFjY2Vzc2liaWxpdHktaXNzdWUtLWVycm9yIC50b3gtaWNvbiBzdmcge1xcbiAgZmlsbDogI2MwMDtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC5hY2Nlc3NpYmlsaXR5LWlzc3VlLS1lcnJvciBhLnRveC1idXR0b24tLW5ha2VkLnRveC1idXR0b24tLWljb24ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI0YyQkZCRjtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLmFjY2Vzc2liaWxpdHktaXNzdWUtLWVycm9yIGEudG94LWJ1dHRvbi0tbmFrZWQudG94LWJ1dHRvbi0taWNvbjpob3ZlcixcXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLmFjY2Vzc2liaWxpdHktaXNzdWUtLWVycm9yIGEudG94LWJ1dHRvbi0tbmFrZWQudG94LWJ1dHRvbi0taWNvbjpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTlBNEE0O1xcbiAgY29sb3I6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZS0tZXJyb3IgYS50b3gtYnV0dG9uLS1uYWtlZC50b3gtYnV0dG9uLS1pY29uOmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUU5NDk0O1xcbiAgY29sb3I6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZS0tc3VjY2VzcyAuYWNjZXNzaWJpbGl0eS1pc3N1ZV9fZGVzY3JpcHRpb24ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMjAsIDE3MSwgNzAsIDAuMSk7XFxuICBjb2xvcjogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC5hY2Nlc3NpYmlsaXR5LWlzc3VlLS1zdWNjZXNzIC5hY2Nlc3NpYmlsaXR5LWlzc3VlX19kZXNjcmlwdGlvbiA+ICo6bGFzdC1jaGlsZCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLmFjY2Vzc2liaWxpdHktaXNzdWUtLXN1Y2Nlc3MgLnRveC1mb3JtX19ncm91cCBoMiB7XFxuICBjb2xvcjogIzUyNzUzMDtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC5hY2Nlc3NpYmlsaXR5LWlzc3VlLS1zdWNjZXNzIC50b3gtaWNvbiBzdmcge1xcbiAgZmlsbDogIzUyNzUzMDtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC5hY2Nlc3NpYmlsaXR5LWlzc3VlX19oZWFkZXIgLnRveC1mb3JtX19ncm91cCBoMSxcXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLnRveC1mb3JtX19ncm91cCAuYWNjZXNzaWJpbGl0eS1pc3N1ZV9fZGVzY3JpcHRpb24gaDIge1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgbWFyZ2luLXRvcDogMDtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC5hY2Nlc3NpYmlsaXR5LWlzc3VlX19oZWFkZXIgLnRveC1idXR0b24ge1xcbiAgbWFyZ2luLWxlZnQ6IDRweDtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC5hY2Nlc3NpYmlsaXR5LWlzc3VlX19oZWFkZXIgPiAqOm50aC1sYXN0LWNoaWxkKDIpIHtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLmFjY2Vzc2liaWxpdHktaXNzdWVfX2Rlc2NyaXB0aW9uIHtcXG4gIHBhZGRpbmc6IDRweCA0cHggNHB4IDhweDtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC5hY2Nlc3NpYmlsaXR5LWlzc3VlX19oZWFkZXIgLnRveC1idXR0b24ge1xcbiAgbWFyZ2luLXJpZ2h0OiA0cHg7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZV9faGVhZGVyID4gKjpudGgtbGFzdC1jaGlsZCgyKSB7XFxuICBtYXJnaW4tcmlnaHQ6IGF1dG87XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZV9fZGVzY3JpcHRpb24ge1xcbiAgcGFkZGluZzogNHB4IDhweCA0cHggNHB4O1xcbn1cXG4udG94IC50b3gtYWR2dGVtcGxhdGUgLnRveC1mb3JtX19ncmlkIHtcXG4gIGZsZXg6IDE7XFxufVxcbi50b3ggLnRveC1hZHZ0ZW1wbGF0ZSAudG94LWZvcm1fX2dyaWQgPiBkaXY6Zmlyc3QtY2hpbGQge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICB3aWR0aDogMzAlO1xcbn1cXG4udG94IC50b3gtYWR2dGVtcGxhdGUgLnRveC1mb3JtX19ncmlkID4gZGl2OmZpcnN0LWNoaWxkID4gZGl2Om50aC1jaGlsZCgyKSB7XFxuICBmbGV4LWJhc2lzOiAwO1xcbiAgZmxleC1ncm93OiAxO1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxufVxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHggKSB7XFxuICBib2R5Om5vdCgudG94LWZvcmNlLWRlc2t0b3ApIC50b3ggLnRveC1hZHZ0ZW1wbGF0ZSAudG94LWZvcm1fX2dyaWQgPiBkaXY6Zmlyc3QtY2hpbGQge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gIH1cXG59XFxuLnRveCAudG94LWFkdnRlbXBsYXRlIGlmcmFtZSB7XFxuICBib3JkZXItY29sb3I6ICNlZWVlZWU7XFxuICBib3JkZXItcmFkaXVzOiAxMHB4O1xcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcXG4gIGJvcmRlci13aWR0aDogMXB4O1xcbiAgbWFyZ2luOiAwIDEwcHg7XFxufVxcbi50b3ggLnRveC1hbmNob3JiYXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXg6IDAgMCBhdXRvO1xcbn1cXG4udG94IC50b3gtYm90dG9tLWFuY2hvcmJhciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleDogMCAwIGF1dG87XFxufVxcbi50b3ggLnRveC1iYXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXg6IDAgMCBhdXRvO1xcbn1cXG4udG94IC50b3gtYnV0dG9uIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDZjZTc7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdDtcXG4gIGJvcmRlci1jb2xvcjogIzAwNmNlNztcXG4gIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gIGJvcmRlci1zdHlsZTogc29saWQ7XFxuICBib3JkZXItd2lkdGg6IDFweDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgY29sb3I6ICNmZmY7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcXFwiU2Vnb2UgVUlcXFwiLCBSb2JvdG8sIE94eWdlbi1TYW5zLCBVYnVudHUsIENhbnRhcmVsbCwgXFxcIkhlbHZldGljYSBOZXVlXFxcIiwgc2Fucy1zZXJpZjtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcXG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xcbiAgbWFyZ2luOiAwO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIHBhZGRpbmc6IDRweCAxNnB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG4udG94IC50b3gtYnV0dG9uOjpiZWZvcmUge1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgYm90dG9tOiAtMXB4O1xcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMnB4ICNmZmYsIDAgMCAwIDFweCAjMDA2Y2U3LCAwIDAgMCAzcHggcmdiYSgwLCAxMDgsIDIzMSwgMC4yNSk7XFxuICBjb250ZW50OiAnJztcXG4gIGxlZnQ6IC0xcHg7XFxuICBvcGFjaXR5OiAwO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogLTFweDtcXG4gIHRvcDogLTFweDtcXG59XFxuLnRveCAudG94LWJ1dHRvbltkaXNhYmxlZF0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNmNlNztcXG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XFxuICBib3JkZXItY29sb3I6ICMwMDZjZTc7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcbi50b3ggLnRveC1idXR0b246Zm9jdXM6bm90KDpkaXNhYmxlZCkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNjBjZTtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XFxuICBib3JkZXItY29sb3I6ICMwMDYwY2U7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbi50b3ggLnRveC1idXR0b246Zm9jdXMtdmlzaWJsZTpub3QoOmRpc2FibGVkKTo6YmVmb3JlIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbi50b3ggLnRveC1idXR0b246aG92ZXI6bm90KDpkaXNhYmxlZCkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNjBjZTtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XFxuICBib3JkZXItY29sb3I6ICMwMDYwY2U7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbi50b3ggLnRveC1idXR0b246YWN0aXZlOm5vdCg6ZGlzYWJsZWQpIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDU0YjQ7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA1NGI0O1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4udG94IC50b3gtYnV0dG9uLnRveC1idXR0b24tLWVuYWJsZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNTRiNDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XFxuICBib3JkZXItY29sb3I6ICMwMDU0YjQ7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbi50b3ggLnRveC1idXR0b24udG94LWJ1dHRvbi0tZW5hYmxlZFtkaXNhYmxlZF0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNTRiNDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XFxuICBib3JkZXItY29sb3I6ICMwMDU0YjQ7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcbi50b3ggLnRveC1idXR0b24udG94LWJ1dHRvbi0tZW5hYmxlZDpmb2N1czpub3QoOmRpc2FibGVkKSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA0ODliO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcXG4gIGJvcmRlci1jb2xvcjogIzAwNDg5YjtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLnRveCAudG94LWJ1dHRvbi50b3gtYnV0dG9uLS1lbmFibGVkOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDQ4OWI7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA0ODliO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4udG94IC50b3gtYnV0dG9uLnRveC1idXR0b24tLWVuYWJsZWQ6YWN0aXZlOm5vdCg6ZGlzYWJsZWQpIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDNjODE7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xcbiAgYm9yZGVyLWNvbG9yOiAjMDAzYzgxO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4udG94IC50b3gtYnV0dG9uLS1pY29uLWFuZC10ZXh0LFxcbi50b3ggLnRveC1idXR0b24udG94LWJ1dHRvbi0taWNvbi1hbmQtdGV4dCxcXG4udG94IC50b3gtYnV0dG9uLnRveC1idXR0b24tLXNlY29uZGFyeS50b3gtYnV0dG9uLS1pY29uLWFuZC10ZXh0IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBwYWRkaW5nOiA1cHggNHB4O1xcbn1cXG4udG94IC50b3gtYnV0dG9uLS1pY29uLWFuZC10ZXh0IC50b3gtaWNvbiBzdmcsXFxuLnRveCAudG94LWJ1dHRvbi50b3gtYnV0dG9uLS1pY29uLWFuZC10ZXh0IC50b3gtaWNvbiBzdmcsXFxuLnRveCAudG94LWJ1dHRvbi50b3gtYnV0dG9uLS1zZWNvbmRhcnkudG94LWJ1dHRvbi0taWNvbi1hbmQtdGV4dCAudG94LWljb24gc3ZnIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgZmlsbDogY3VycmVudENvbG9yO1xcbn1cXG4udG94IC50b3gtYnV0dG9uLS1zZWNvbmRhcnkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0O1xcbiAgYm9yZGVyLWNvbG9yOiAjZjBmMGYwO1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcXG4gIGJvcmRlci13aWR0aDogMXB4O1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIHBhZGRpbmc6IDRweCAxNnB4O1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XFxufVxcbi50b3ggLnRveC1idXR0b24tLXNlY29uZGFyeVtkaXNhYmxlZF0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XFxuICBib3JkZXItY29sb3I6ICNmMGYwZjA7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6IHJnYmEoMzQsIDQ3LCA2MiwgMC41KTtcXG59XFxuLnRveCAudG94LWJ1dHRvbi0tc2Vjb25kYXJ5OmZvY3VzOm5vdCg6ZGlzYWJsZWQpIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlM2UzZTM7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xcbiAgYm9yZGVyLWNvbG9yOiAjZTNlM2UzO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtYnV0dG9uLS1zZWNvbmRhcnk6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTNlMztcXG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XFxuICBib3JkZXItY29sb3I6ICNlM2UzZTM7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC1idXR0b24tLXNlY29uZGFyeTphY3RpdmU6bm90KDpkaXNhYmxlZCkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q2ZDZkNjtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XFxuICBib3JkZXItY29sb3I6ICNkNmQ2ZDY7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC1idXR0b24tLXNlY29uZGFyeS50b3gtYnV0dG9uLS1lbmFibGVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhOGM4ZWQ7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xcbiAgYm9yZGVyLWNvbG9yOiAjYThjOGVkO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtYnV0dG9uLS1zZWNvbmRhcnkudG94LWJ1dHRvbi0tZW5hYmxlZFtkaXNhYmxlZF0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2E4YzhlZDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XFxuICBib3JkZXItY29sb3I6ICNhOGM4ZWQ7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6IHJnYmEoMzQsIDQ3LCA2MiwgMC41KTtcXG59XFxuLnRveCAudG94LWJ1dHRvbi0tc2Vjb25kYXJ5LnRveC1idXR0b24tLWVuYWJsZWQ6Zm9jdXM6bm90KDpkaXNhYmxlZCkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzkzYmJlOTtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XFxuICBib3JkZXItY29sb3I6ICM5M2JiZTk7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC1idXR0b24tLXNlY29uZGFyeS50b3gtYnV0dG9uLS1lbmFibGVkOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5M2JiZTk7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xcbiAgYm9yZGVyLWNvbG9yOiAjOTNiYmU5O1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtYnV0dG9uLS1zZWNvbmRhcnkudG94LWJ1dHRvbi0tZW5hYmxlZDphY3RpdmU6bm90KDpkaXNhYmxlZCkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzdkYWVlNDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XFxuICBib3JkZXItY29sb3I6ICM3ZGFlZTQ7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC1idXR0b24tLWljb24sXFxuLnRveCAudG94LWJ1dHRvbi50b3gtYnV0dG9uLS1pY29uLFxcbi50b3ggLnRveC1idXR0b24udG94LWJ1dHRvbi0tc2Vjb25kYXJ5LnRveC1idXR0b24tLWljb24ge1xcbiAgcGFkZGluZzogNHB4O1xcbn1cXG4udG94IC50b3gtYnV0dG9uLS1pY29uIC50b3gtaWNvbiBzdmcsXFxuLnRveCAudG94LWJ1dHRvbi50b3gtYnV0dG9uLS1pY29uIC50b3gtaWNvbiBzdmcsXFxuLnRveCAudG94LWJ1dHRvbi50b3gtYnV0dG9uLS1zZWNvbmRhcnkudG94LWJ1dHRvbi0taWNvbiAudG94LWljb24gc3ZnIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgZmlsbDogY3VycmVudENvbG9yO1xcbn1cXG4udG94IC50b3gtYnV0dG9uLWxpbmsge1xcbiAgYmFja2dyb3VuZDogMDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcXFwiU2Vnb2UgVUlcXFwiLCBSb2JvdG8sIE94eWdlbi1TYW5zLCBVYnVudHUsIENhbnRhcmVsbCwgXFxcIkhlbHZldGljYSBOZXVlXFxcIiwgc2Fucy1zZXJpZjtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XFxuICBsaW5lLWhlaWdodDogMS4zO1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxufVxcbi50b3ggLnRveC1idXR0b24tbGluay0tc20ge1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbn1cXG4udG94IC50b3gtYnV0dG9uLS1uYWtlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3gtc2hhZG93OiB1bnNldDtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtYnV0dG9uLS1uYWtlZFtkaXNhYmxlZF0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgzNCwgNDcsIDYyLCAwLjEyKTtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3gtc2hhZG93OiB1bnNldDtcXG4gIGNvbG9yOiByZ2JhKDM0LCA0NywgNjIsIDAuNSk7XFxufVxcbi50b3ggLnRveC1idXR0b24tLW5ha2VkOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMzQsIDQ3LCA2MiwgMC4xMik7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm94LXNoYWRvdzogdW5zZXQ7XFxuICBjb2xvcjogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LWJ1dHRvbi0tbmFrZWQ6Zm9jdXM6bm90KDpkaXNhYmxlZCkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgzNCwgNDcsIDYyLCAwLjEyKTtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3gtc2hhZG93OiB1bnNldDtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtYnV0dG9uLS1uYWtlZDphY3RpdmU6bm90KDpkaXNhYmxlZCkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgzNCwgNDcsIDYyLCAwLjE4KTtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3gtc2hhZG93OiB1bnNldDtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtYnV0dG9uLS1uYWtlZCAudG94LWljb24gc3ZnIHtcXG4gIGZpbGw6IGN1cnJlbnRDb2xvcjtcXG59XFxuLnRveCAudG94LWJ1dHRvbi0tbmFrZWQudG94LWJ1dHRvbi0taWNvbjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XFxuICBjb2xvcjogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LWNoZWNrYm94IHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgaGVpZ2h0OiAzNnB4O1xcbiAgbWluLXdpZHRoOiAzNnB4O1xcbn1cXG4udG94IC50b3gtY2hlY2tib3hfX2lucHV0IHtcXG4gIC8qIEhpZGUgZnJvbSB2aWV3IGJ1dCB2aXNpYmxlIHRvIHNjcmVlbiByZWFkZXJzICovXFxuICBoZWlnaHQ6IDFweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IGF1dG87XFxuICB3aWR0aDogMXB4O1xcbn1cXG4udG94IC50b3gtY2hlY2tib3hfX2ljb25zIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBib3gtc2hhZG93OiAwIDAgMCAycHggdHJhbnNwYXJlbnQ7XFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBoZWlnaHQ6IDI0cHg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIHBhZGRpbmc6IGNhbGMoNHB4IC0gMXB4KTtcXG4gIHdpZHRoOiAyNHB4O1xcbn1cXG4udG94IC50b3gtY2hlY2tib3hfX2ljb25zIC50b3gtY2hlY2tib3gtaWNvbl9fdW5jaGVja2VkIHN2ZyB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGZpbGw6IHJnYmEoMzQsIDQ3LCA2MiwgMC4zKTtcXG59XFxuLnRveCAudG94LWNoZWNrYm94X19pY29ucyAudG94LWNoZWNrYm94LWljb25fX2luZGV0ZXJtaW5hdGUgc3ZnIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBmaWxsOiAjMDA2Y2U3O1xcbn1cXG4udG94IC50b3gtY2hlY2tib3hfX2ljb25zIC50b3gtY2hlY2tib3gtaWNvbl9fY2hlY2tlZCBzdmcge1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIGZpbGw6ICMwMDZjZTc7XFxufVxcbi50b3ggLnRveC1jaGVja2JveC0tZGlzYWJsZWQge1xcbiAgY29sb3I6IHJnYmEoMzQsIDQ3LCA2MiwgMC41KTtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcbi50b3ggLnRveC1jaGVja2JveC0tZGlzYWJsZWQgLnRveC1jaGVja2JveF9faWNvbnMgLnRveC1jaGVja2JveC1pY29uX19jaGVja2VkIHN2ZyB7XFxuICBmaWxsOiByZ2JhKDM0LCA0NywgNjIsIDAuNSk7XFxufVxcbi50b3ggLnRveC1jaGVja2JveC0tZGlzYWJsZWQgLnRveC1jaGVja2JveF9faWNvbnMgLnRveC1jaGVja2JveC1pY29uX191bmNoZWNrZWQgc3ZnIHtcXG4gIGZpbGw6IHJnYmEoMzQsIDQ3LCA2MiwgMC41KTtcXG59XFxuLnRveCAudG94LWNoZWNrYm94LS1kaXNhYmxlZCAudG94LWNoZWNrYm94X19pY29ucyAudG94LWNoZWNrYm94LWljb25fX2luZGV0ZXJtaW5hdGUgc3ZnIHtcXG4gIGZpbGw6IHJnYmEoMzQsIDQ3LCA2MiwgMC41KTtcXG59XFxuLnRveCBpbnB1dC50b3gtY2hlY2tib3hfX2lucHV0OmNoZWNrZWQgKyAudG94LWNoZWNrYm94X19pY29ucyAudG94LWNoZWNrYm94LWljb25fX3VuY2hlY2tlZCBzdmcge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnRveCBpbnB1dC50b3gtY2hlY2tib3hfX2lucHV0OmNoZWNrZWQgKyAudG94LWNoZWNrYm94X19pY29ucyAudG94LWNoZWNrYm94LWljb25fX2NoZWNrZWQgc3ZnIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG4udG94IGlucHV0LnRveC1jaGVja2JveF9faW5wdXQ6aW5kZXRlcm1pbmF0ZSArIC50b3gtY2hlY2tib3hfX2ljb25zIC50b3gtY2hlY2tib3gtaWNvbl9fdW5jaGVja2VkIHN2ZyB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4udG94IGlucHV0LnRveC1jaGVja2JveF9faW5wdXQ6aW5kZXRlcm1pbmF0ZSArIC50b3gtY2hlY2tib3hfX2ljb25zIC50b3gtY2hlY2tib3gtaWNvbl9faW5kZXRlcm1pbmF0ZSBzdmcge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcbi50b3ggaW5wdXQudG94LWNoZWNrYm94X19pbnB1dDpmb2N1cyArIC50b3gtY2hlY2tib3hfX2ljb25zIHtcXG4gIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCAjMDA2Y2U3O1xcbiAgcGFkZGluZzogY2FsYyg0cHggLSAxcHgpO1xcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtY2hlY2tib3hfX2xhYmVsIHtcXG4gIG1hcmdpbi1sZWZ0OiA0cHg7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1jaGVja2JveF9faW5wdXQge1xcbiAgbGVmdDogLTEwMDAwcHg7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1iYXIgLnRveC1jaGVja2JveCB7XFxuICBtYXJnaW4tbGVmdDogNHB4O1xcbn1cXG4udG94W2Rpcj1ydGxdIC50b3gtY2hlY2tib3hfX2xhYmVsIHtcXG4gIG1hcmdpbi1yaWdodDogNHB4O1xcbn1cXG4udG94W2Rpcj1ydGxdIC50b3gtY2hlY2tib3hfX2lucHV0IHtcXG4gIHJpZ2h0OiAtMTAwMDBweDtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LWJhciAudG94LWNoZWNrYm94IHtcXG4gIG1hcmdpbi1yaWdodDogNHB4O1xcbn1cXG4udG94IHtcXG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1kZXNjZW5kaW5nLXNwZWNpZmljaXR5ICovXFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uLS10b29sYmFyIC50b3gtY29sbGVjdGlvbl9fZ3JvdXAge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uLS1ncmlkIC50b3gtY29sbGVjdGlvbl9fZ3JvdXAge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtd3JhcDogd3JhcDtcXG4gIG1heC1oZWlnaHQ6IDIwOHB4O1xcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xcbiAgb3ZlcmZsb3cteTogYXV0bztcXG4gIHBhZGRpbmc6IDA7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uLS1saXN0IC50b3gtY29sbGVjdGlvbl9fZ3JvdXAge1xcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcXG4gIGJvcmRlci1jb2xvcjogI2UzZTNlMztcXG4gIGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xcbiAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcXG4gIGJvcmRlci10b3Atd2lkdGg6IDFweDtcXG4gIHBhZGRpbmc6IDRweCAwO1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbi0tbGlzdCAudG94LWNvbGxlY3Rpb25fX2dyb3VwOmZpcnN0LWNoaWxkIHtcXG4gIGJvcmRlci10b3Atd2lkdGg6IDA7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uX19ncm91cC1oZWFkaW5nIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmY2ZjZmM7XFxuICBjb2xvcjogcmdiYSgzNCwgNDcsIDYyLCAwLjcpO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG4gIG1hcmdpbi1ib3R0b206IDRweDtcXG4gIG1hcmdpbi10b3A6IC00cHg7XFxuICBwYWRkaW5nOiA0cHggOHB4O1xcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XFxuICAtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmU7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbl9faXRlbSB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgY29sb3I6ICMyMjJmM2U7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLXdlYmtpdC10b3VjaC1jYWxsb3V0OiBub25lO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb24tLWxpc3QgLnRveC1jb2xsZWN0aW9uX19pdGVtIHtcXG4gIHBhZGRpbmc6IDRweCA4cHg7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uLS10b29sYmFyIC50b3gtY29sbGVjdGlvbl9faXRlbSB7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBwYWRkaW5nOiA0cHg7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uLS1ncmlkIC50b3gtY29sbGVjdGlvbl9faXRlbSB7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBwYWRkaW5nOiA0cHg7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uLS1saXN0IC50b3gtY29sbGVjdGlvbl9faXRlbS0tZW5hYmxlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgY29sb3I6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uLS1saXN0IC50b3gtY29sbGVjdGlvbl9faXRlbS0tYWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjY2UyZmE7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uLS10b29sYmFyIC50b3gtY29sbGVjdGlvbl9faXRlbS0tZW5hYmxlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTZjY2Y3O1xcbiAgY29sb3I6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uLS10b29sYmFyIC50b3gtY29sbGVjdGlvbl9faXRlbS0tYWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjY2UyZmE7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uLS1ncmlkIC50b3gtY29sbGVjdGlvbl9faXRlbS0tZW5hYmxlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTZjY2Y3O1xcbiAgY29sb3I6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uLS1ncmlkIC50b3gtY29sbGVjdGlvbl9faXRlbS0tYWN0aXZlOm5vdCgudG94LWNvbGxlY3Rpb25fX2l0ZW0tLXN0YXRlLWRpc2FibGVkKSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NlMmZhO1xcbiAgY29sb3I6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uLS1saXN0IC50b3gtY29sbGVjdGlvbl9faXRlbS0tYWN0aXZlOm5vdCgudG94LWNvbGxlY3Rpb25fX2l0ZW0tLXN0YXRlLWRpc2FibGVkKSB7XFxuICBjb2xvcjogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb24tLXRvb2xiYXIgLnRveC1jb2xsZWN0aW9uX19pdGVtLS1hY3RpdmU6bm90KC50b3gtY29sbGVjdGlvbl9faXRlbS0tc3RhdGUtZGlzYWJsZWQpIHtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbl9faXRlbS1pY29uLFxcbi50b3ggLnRveC1jb2xsZWN0aW9uX19pdGVtLWNoZWNrbWFyayB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGhlaWdodDogMjRweDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgd2lkdGg6IDI0cHg7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uX19pdGVtLWljb24gc3ZnLFxcbi50b3ggLnRveC1jb2xsZWN0aW9uX19pdGVtLWNoZWNrbWFyayBzdmcge1xcbiAgZmlsbDogY3VycmVudENvbG9yO1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbi0tdG9vbGJhci1sZyAudG94LWNvbGxlY3Rpb25fX2l0ZW0taWNvbiB7XFxuICBoZWlnaHQ6IDQ4cHg7XFxuICB3aWR0aDogNDhweDtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb25fX2l0ZW0tbGFiZWwge1xcbiAgY29sb3I6IGN1cnJlbnRDb2xvcjtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGZsZXg6IDE7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb25fX2l0ZW0tYWNjZXNzb3J5IHtcXG4gIGNvbG9yOiByZ2JhKDM0LCA0NywgNjIsIDAuNyk7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBoZWlnaHQ6IDI0cHg7XFxuICBsaW5lLWhlaWdodDogMjRweDtcXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbl9faXRlbS1jYXJldCB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIG1pbi1oZWlnaHQ6IDI0cHg7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uX19pdGVtLWNhcmV0OjphZnRlciB7XFxuICBjb250ZW50OiAnJztcXG4gIGZvbnQtc2l6ZTogMDtcXG4gIG1pbi1oZWlnaHQ6IGluaGVyaXQ7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uX19pdGVtLWNhcmV0IHN2ZyB7XFxuICBmaWxsOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbl9faXRlbS0tc3RhdGUtZGlzYWJsZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBjb2xvcjogcmdiYSgzNCwgNDcsIDYyLCAwLjUpO1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb25fX2l0ZW0tLXN0YXRlLWRpc2FibGVkIC50b3gtY29sbGVjdGlvbl9faXRlbS1jYXJldCBzdmcge1xcbiAgZmlsbDogcmdiYSgzNCwgNDcsIDYyLCAwLjUpO1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbi0tbGlzdCAudG94LWNvbGxlY3Rpb25fX2l0ZW06bm90KC50b3gtY29sbGVjdGlvbl9faXRlbS0tZW5hYmxlZCkgLnRveC1jb2xsZWN0aW9uX19pdGVtLWNoZWNrbWFyayBzdmcge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb24tLWxpc3QgLnRveC1jb2xsZWN0aW9uX19pdGVtOm5vdCgudG94LWNvbGxlY3Rpb25fX2l0ZW0tLWVuYWJsZWQpIC50b3gtY29sbGVjdGlvbl9faXRlbS1hY2Nlc3NvcnkgKyAudG94LWNvbGxlY3Rpb25fX2l0ZW0tY2hlY2ttYXJrIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uLS1ob3Jpem9udGFsIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZTNlM2UzO1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgYm94LXNoYWRvdzogMCAwIDJweCAwIHJnYmEoMzQsIDQ3LCA2MiwgMC4yKSwgMCA0cHggOHB4IDAgcmdiYSgzNCwgNDcsIDYyLCAwLjE1KTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4OiAwIDAgYXV0bztcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAgZmxleC13cmFwOiBub3dyYXA7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgb3ZlcmZsb3cteDogYXV0bztcXG4gIHBhZGRpbmc6IDA7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uLS1ob3Jpem9udGFsIC50b3gtY29sbGVjdGlvbl9fZ3JvdXAge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LXdyYXA6IG5vd3JhcDtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDAgNHB4O1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbi0taG9yaXpvbnRhbCAudG94LWNvbGxlY3Rpb25fX2l0ZW0ge1xcbiAgaGVpZ2h0OiAyOHB4O1xcbiAgbWFyZ2luOiA2cHggMXB4IDVweCAwO1xcbiAgcGFkZGluZzogMCA0cHg7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uLS1ob3Jpem9udGFsIC50b3gtY29sbGVjdGlvbl9faXRlbS1sYWJlbCB7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbi0taG9yaXpvbnRhbCAudG94LWNvbGxlY3Rpb25fX2l0ZW0tY2FyZXQge1xcbiAgbWFyZ2luLWxlZnQ6IDRweDtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb25fX2l0ZW0tY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tcm93IHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBmbGV4OiAxIDEgYXV0bztcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tcm93LnRveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tYWxpZ24tbGVmdCB7XFxuICBtYXJnaW4tcmlnaHQ6IGF1dG87XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tcm93LnRveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tYWxpZ24tcmlnaHQge1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbl9faXRlbS1jb250YWluZXItLXJvdy50b3gtY29sbGVjdGlvbl9faXRlbS1jb250YWluZXItLXZhbGlnbi10b3Age1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICBtYXJnaW4tYm90dG9tOiBhdXRvO1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbl9faXRlbS1jb250YWluZXItLXJvdy50b3gtY29sbGVjdGlvbl9faXRlbS1jb250YWluZXItLXZhbGlnbi1taWRkbGUge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb25fX2l0ZW0tY29udGFpbmVyLS1yb3cudG94LWNvbGxlY3Rpb25fX2l0ZW0tY29udGFpbmVyLS12YWxpZ24tYm90dG9tIHtcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcXG4gIG1hcmdpbi10b3A6IGF1dG87XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tY29sdW1uIHtcXG4gIGFsaWduLXNlbGY6IGNlbnRlcjtcXG4gIGZsZXg6IDEgMSBhdXRvO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb25fX2l0ZW0tY29udGFpbmVyLS1jb2x1bW4udG94LWNvbGxlY3Rpb25fX2l0ZW0tY29udGFpbmVyLS1hbGlnbi1sZWZ0IHtcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbl9faXRlbS1jb250YWluZXItLWNvbHVtbi50b3gtY29sbGVjdGlvbl9faXRlbS1jb250YWluZXItLWFsaWduLXJpZ2h0IHtcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb25fX2l0ZW0tY29udGFpbmVyLS1jb2x1bW4udG94LWNvbGxlY3Rpb25fX2l0ZW0tY29udGFpbmVyLS12YWxpZ24tdG9wIHtcXG4gIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tY29sdW1uLnRveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tdmFsaWduLW1pZGRsZSB7XFxuICBhbGlnbi1zZWxmOiBjZW50ZXI7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tY29sdW1uLnRveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tdmFsaWduLWJvdHRvbSB7XFxuICBhbGlnbi1zZWxmOiBmbGV4LWVuZDtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LWNvbGxlY3Rpb24tLWhvcml6b250YWwgLnRveC1jb2xsZWN0aW9uX19ncm91cDpub3QoOmxhc3Qtb2YtdHlwZSkge1xcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1jb2xsZWN0aW9uLS1saXN0IC50b3gtY29sbGVjdGlvbl9faXRlbSA+ICo6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgbWFyZ2luLWxlZnQ6IDhweDtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LWNvbGxlY3Rpb24tLWxpc3QgLnRveC1jb2xsZWN0aW9uX19pdGVtID4gLnRveC1jb2xsZWN0aW9uX19pdGVtLWxhYmVsOmZpcnN0LWNoaWxkIHtcXG4gIG1hcmdpbi1sZWZ0OiA0cHg7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1jb2xsZWN0aW9uX19pdGVtLWFjY2Vzc29yeSB7XFxuICBtYXJnaW4tbGVmdDogMTZweDtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtY29sbGVjdGlvbiAudG94LWNvbGxlY3Rpb25fX2l0ZW0tY2FyZXQge1xcbiAgbWFyZ2luLWxlZnQ6IDE2cHg7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1jb2xsZWN0aW9uLS1ob3Jpem9udGFsIC50b3gtY29sbGVjdGlvbl9fZ3JvdXA6bm90KDpsYXN0LW9mLXR5cGUpIHtcXG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1jb2xsZWN0aW9uLS1saXN0IC50b3gtY29sbGVjdGlvbl9faXRlbSA+ICo6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgbWFyZ2luLXJpZ2h0OiA4cHg7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1jb2xsZWN0aW9uLS1saXN0IC50b3gtY29sbGVjdGlvbl9faXRlbSA+IC50b3gtY29sbGVjdGlvbl9faXRlbS1sYWJlbDpmaXJzdC1jaGlsZCB7XFxuICBtYXJnaW4tcmlnaHQ6IDRweDtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LWNvbGxlY3Rpb25fX2l0ZW0tYWNjZXNzb3J5IHtcXG4gIG1hcmdpbi1yaWdodDogMTZweDtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1jb2xsZWN0aW9uIC50b3gtY29sbGVjdGlvbl9faXRlbS1jYXJldCB7XFxuICBtYXJnaW4tcmlnaHQ6IDE2cHg7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZVkoMTgwZGVnKTtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LWNvbGxlY3Rpb24tLWhvcml6b250YWwgLnRveC1jb2xsZWN0aW9uX19pdGVtLWNhcmV0IHtcXG4gIG1hcmdpbi1yaWdodDogNHB4O1xcbn1cXG4udG94IC50b3gtY29sb3ItcGlja2VyLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGhlaWdodDogMjI1cHg7XFxuICBtYXJnaW46IDA7XFxufVxcbi50b3ggLnRveC1zdi1wYWxldHRlIHtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG4udG94IC50b3gtc3YtcGFsZXR0ZS1zcGVjdHJ1bSB7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcbi50b3ggLnRveC1zdi1wYWxldHRlLFxcbi50b3ggLnRveC1zdi1wYWxldHRlLXNwZWN0cnVtIHtcXG4gIHdpZHRoOiAyMjVweDtcXG59XFxuLnRveCAudG94LXN2LXBhbGV0dGUtdGh1bWIge1xcbiAgYmFja2dyb3VuZDogbm9uZTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XFxuICBoZWlnaHQ6IDEycHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMTJweDtcXG59XFxuLnRveCAudG94LXN2LXBhbGV0dGUtaW5uZXItdGh1bWIge1xcbiAgYm9yZGVyOiAxcHggc29saWQgd2hpdGU7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMTBweDtcXG59XFxuLnRveCAudG94LWh1ZS1zbGlkZXIge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHdpZHRoOiAyNXB4O1xcbn1cXG4udG94IC50b3gtaHVlLXNsaWRlci1zcGVjdHJ1bSB7XFxuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZjAwLCAjZmYwMDgwLCAjZjBmLCAjODAwMGZmLCAjMDBmLCAjMDA4MGZmLCAjMGZmLCAjMDBmZjgwLCAjMGYwLCAjODBmZjAwLCAjZmYwLCAjZmY4MDAwLCAjZjAwKTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4udG94IC50b3gtaHVlLXNsaWRlcixcXG4udG94IC50b3gtaHVlLXNsaWRlci1zcGVjdHJ1bSB7XFxuICB3aWR0aDogMjBweDtcXG59XFxuLnRveCAudG94LWh1ZS1zbGlkZXItdGh1bWIge1xcbiAgYmFja2dyb3VuZDogd2hpdGU7XFxuICBib3JkZXI6IDFweCBzb2xpZCBibGFjaztcXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xcbiAgaGVpZ2h0OiA0cHg7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLnRveCAudG94LXJnYi1mb3JtIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbn1cXG4udG94IC50b3gtcmdiLWZvcm0gZGl2IHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xcbiAgd2lkdGg6IGluaGVyaXQ7XFxufVxcbi50b3ggLnRveC1yZ2ItZm9ybSBpbnB1dCB7XFxuICB3aWR0aDogNmVtO1xcbn1cXG4udG94IC50b3gtcmdiLWZvcm0gaW5wdXQudG94LWludmFsaWQge1xcbiAgLyogTmVlZCAhaW1wb3J0YW50IHRvIG92ZXJyaWRlIENocm9tZSdzIGZvY3VzIHN0eWxpbmcgdW5mb3J0dW5hdGVseSAqL1xcbiAgYm9yZGVyOiAxcHggc29saWQgcmVkICFpbXBvcnRhbnQ7XFxufVxcbi50b3ggLnRveC1yZ2ItZm9ybSAudG94LXJnYmEtcHJldmlldyB7XFxuICBib3JkZXI6IDFweCBzb2xpZCBibGFjaztcXG4gIGZsZXgtZ3JvdzogMjtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1zdi1wYWxldHRlIHtcXG4gIG1hcmdpbi1yaWdodDogMTVweDtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LWh1ZS1zbGlkZXIge1xcbiAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtaHVlLXNsaWRlci10aHVtYiB7XFxuICBtYXJnaW4tbGVmdDogLTFweDtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LXJnYi1mb3JtIGxhYmVsIHtcXG4gIG1hcmdpbi1yaWdodDogMC41ZW07XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1zdi1wYWxldHRlIHtcXG4gIG1hcmdpbi1sZWZ0OiAxNXB4O1xcbn1cXG4udG94W2Rpcj1ydGxdIC50b3gtaHVlLXNsaWRlciB7XFxuICBtYXJnaW4tbGVmdDogMTVweDtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LWh1ZS1zbGlkZXItdGh1bWIge1xcbiAgbWFyZ2luLXJpZ2h0OiAtMXB4O1xcbn1cXG4udG94W2Rpcj1ydGxdIC50b3gtcmdiLWZvcm0gbGFiZWwge1xcbiAgbWFyZ2luLWxlZnQ6IDAuNWVtO1xcbn1cXG4udG94IC50b3gtdG9vbGJhciAudG94LXN3YXRjaGVzLFxcbi50b3ggLnRveC10b29sYmFyX19wcmltYXJ5IC50b3gtc3dhdGNoZXMsXFxuLnRveCAudG94LXRvb2xiYXJfX292ZXJmbG93IC50b3gtc3dhdGNoZXMge1xcbiAgbWFyZ2luOiA1cHggMCA2cHggMTFweDtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb24tLWxpc3QgLnRveC1jb2xsZWN0aW9uX19ncm91cCAudG94LXN3YXRjaGVzLW1lbnUge1xcbiAgYm9yZGVyOiAwO1xcbiAgbWFyZ2luOiAtNHB4IC00cHg7XFxufVxcbi50b3ggLnRveC1zd2F0Y2hlc19fcm93IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcbi50b3ggLnRveC1zd2F0Y2gge1xcbiAgaGVpZ2h0OiAzMHB4O1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTVzLCBib3gtc2hhZG93IDAuMTVzO1xcbiAgd2lkdGg6IDMwcHg7XFxufVxcbi50b3ggLnRveC1zd2F0Y2g6aG92ZXIsXFxuLnRveCAudG94LXN3YXRjaDpmb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgxMjcsIDEyNywgMTI3LCAwLjMpIGluc2V0O1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjgpO1xcbn1cXG4udG94IC50b3gtc3dhdGNoLS1yZW1vdmUge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuLnRveCAudG94LXN3YXRjaC0tcmVtb3ZlIHN2ZyBwYXRoIHtcXG4gIHN0cm9rZTogI2U3NGMzYztcXG59XFxuLnRveCAudG94LXN3YXRjaGVzX19waWNrZXItYnRuIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBoZWlnaHQ6IDMwcHg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBwYWRkaW5nOiAwO1xcbiAgd2lkdGg6IDMwcHg7XFxufVxcbi50b3ggLnRveC1zd2F0Y2hlc19fcGlja2VyLWJ0biBzdmcge1xcbiAgZmlsbDogIzIyMmYzZTtcXG4gIGhlaWdodDogMjRweDtcXG4gIHdpZHRoOiAyNHB4O1xcbn1cXG4udG94IC50b3gtc3dhdGNoZXNfX3BpY2tlci1idG46aG92ZXIge1xcbiAgYmFja2dyb3VuZDogI2NjZTJmYTtcXG59XFxuLnRveCBkaXYudG94LXN3YXRjaDpub3QoLnRveC1zd2F0Y2gtLXJlbW92ZSkgc3ZnIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBmaWxsOiAjMjIyZjNlO1xcbiAgaGVpZ2h0OiAyNHB4O1xcbiAgbWFyZ2luOiBjYWxjKCgzMHB4IC0gMjRweCkgLyAyKSBjYWxjKCgzMHB4IC0gMjRweCkgLyAyKTtcXG4gIHdpZHRoOiAyNHB4O1xcbn1cXG4udG94IGRpdi50b3gtc3dhdGNoOm5vdCgudG94LXN3YXRjaC0tcmVtb3ZlKSBzdmcgcGF0aCB7XFxuICBmaWxsOiAjZmZmO1xcbiAgcGFpbnQtb3JkZXI6IHN0cm9rZTtcXG4gIHN0cm9rZTogIzIyMmYzZTtcXG4gIHN0cm9rZS13aWR0aDogMnB4O1xcbn1cXG4udG94IGRpdi50b3gtc3dhdGNoOm5vdCgudG94LXN3YXRjaC0tcmVtb3ZlKS50b3gtY29sbGVjdGlvbl9faXRlbS0tZW5hYmxlZCBzdmcge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1zd2F0Y2hlc19fcGlja2VyLWJ0biB7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LXN3YXRjaGVzX19waWNrZXItYnRuIHtcXG4gIG1hcmdpbi1yaWdodDogYXV0bztcXG59XFxuLnRveCAudG94LWNvbW1lbnQtdGhyZWFkIHtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi50b3ggLnRveC1jb21tZW50LXRocmVhZCA+ICo6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgbWFyZ2luLXRvcDogOHB4O1xcbn1cXG4udG94IC50b3gtY29tbWVudCB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2VlZWVlZTtcXG4gIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gIGJveC1zaGFkb3c6IDAgNHB4IDhweCAwIHJnYmEoMzQsIDQ3LCA2MiwgMC4xKTtcXG4gIHBhZGRpbmc6IDhweCA4cHggMTZweCA4cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi50b3ggLnRveC1jb21tZW50X19oZWFkZXIge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG59XFxuLnRveCAudG94LWNvbW1lbnRfX2RhdGUge1xcbiAgY29sb3I6ICMyMjJmM2U7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBsaW5lLWhlaWdodDogMThweDtcXG59XFxuLnRveCAudG94LWNvbW1lbnRfX2JvZHkge1xcbiAgY29sb3I6ICMyMjJmM2U7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbiAgbGluZS1oZWlnaHQ6IDEuMztcXG4gIG1hcmdpbi10b3A6IDhweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRleHQtdHJhbnNmb3JtOiBpbml0aWFsO1xcbn1cXG4udG94IC50b3gtY29tbWVudF9fYm9keSB0ZXh0YXJlYSB7XFxuICByZXNpemU6IG5vbmU7XFxuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcbi50b3ggLnRveC1jb21tZW50X19leHBhbmRlciB7XFxuICBwYWRkaW5nLXRvcDogOHB4O1xcbn1cXG4udG94IC50b3gtY29tbWVudF9fZXhwYW5kZXIgcCB7XFxuICBjb2xvcjogcmdiYSgzNCwgNDcsIDYyLCAwLjcpO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbn1cXG4udG94IC50b3gtY29tbWVudF9fYm9keSBwIHtcXG4gIG1hcmdpbjogMDtcXG59XFxuLnRveCAudG94LWNvbW1lbnRfX2J1dHRvbnNwYWNpbmcge1xcbiAgcGFkZGluZy10b3A6IDE2cHg7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi50b3ggLnRveC1jb21tZW50LXRocmVhZF9fb3ZlcmxheTo6YWZ0ZXIge1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG4gIGJvdHRvbTogMDtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGxlZnQ6IDA7XFxuICBvcGFjaXR5OiAwLjk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMDtcXG4gIHRvcDogMDtcXG4gIHotaW5kZXg6IDU7XFxufVxcbi50b3ggLnRveC1jb21tZW50X19yZXBseSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1zaHJpbms6IDA7XFxuICBmbGV4LXdyYXA6IHdyYXA7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xcbiAgbWFyZ2luLXRvcDogOHB4O1xcbn1cXG4udG94IC50b3gtY29tbWVudF9fcmVwbHkgPiAqOmZpcnN0LWNoaWxkIHtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4udG94IC50b3gtY29tbWVudF9fZWRpdCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG4gIG1hcmdpbi10b3A6IDE2cHg7XFxufVxcbi50b3ggLnRveC1jb21tZW50X19ncmFkaWVudDo6YWZ0ZXIge1xcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHJnYmEoMjU1LCAyNTUsIDI1NSwgMCksICNmZmYpO1xcbiAgYm90dG9tOiAwO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGhlaWdodDogNWVtO1xcbiAgbWFyZ2luLXRvcDogLTQwcHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLnRveCAudG94LWNvbW1lbnRfX292ZXJsYXkge1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG4gIGJvdHRvbTogMDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1ncm93OiAxO1xcbiAgbGVmdDogMDtcXG4gIG9wYWNpdHk6IDAuOTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAwO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgdG9wOiAwO1xcbiAgei1pbmRleDogNTtcXG59XFxuLnRveCAudG94LWNvbW1lbnRfX2xvYWRpbmctdGV4dCB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY29sb3I6ICMyMjJmM2U7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnRveCAudG94LWNvbW1lbnRfX2xvYWRpbmctdGV4dCA+IGRpdiB7XFxuICBwYWRkaW5nLWJvdHRvbTogMTZweDtcXG59XFxuLnRveCAudG94LWNvbW1lbnRfX292ZXJsYXl0ZXh0IHtcXG4gIGJvdHRvbTogMDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBsZWZ0OiAwO1xcbiAgcGFkZGluZzogMWVtO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDA7XFxuICB0b3A6IDA7XFxuICB6LWluZGV4OiAxMDtcXG59XFxuLnRveCAudG94LWNvbW1lbnRfX292ZXJsYXl0ZXh0IHAge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJveC1zaGFkb3c6IDAgMCA4cHggOHB4ICNmZmY7XFxuICBjb2xvcjogIzIyMmYzZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuLnRveCAudG94LWNvbW1lbnRfX292ZXJsYXl0ZXh0IGRpdjpudGgtb2YtdHlwZSgyKSB7XFxuICBmb250LXNpemU6IDAuOGVtO1xcbn1cXG4udG94IC50b3gtY29tbWVudF9fYnVzeS1zcGlubmVyIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm90dG9tOiAwO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgbGVmdDogMDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAwO1xcbiAgdG9wOiAwO1xcbiAgei1pbmRleDogMjA7XFxufVxcbi50b3ggLnRveC1jb21tZW50X19zY3JvbGwge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LXNocmluazogMTtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbn1cXG4udG94IC50b3gtY29udmVyc2F0aW9ucyB7XFxuICBtYXJnaW46IDhweDtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LWNvbW1lbnRfX2VkaXQge1xcbiAgbWFyZ2luLWxlZnQ6IDhweDtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LWNvbW1lbnRfX2J1dHRvbnNwYWNpbmcgPiAqOmxhc3QtY2hpbGQsXFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LWNvbW1lbnRfX2VkaXQgPiAqOmxhc3QtY2hpbGQsXFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LWNvbW1lbnRfX3JlcGx5ID4gKjpsYXN0LWNoaWxkIHtcXG4gIG1hcmdpbi1sZWZ0OiA4cHg7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1jb21tZW50X19lZGl0IHtcXG4gIG1hcmdpbi1yaWdodDogOHB4O1xcbn1cXG4udG94W2Rpcj1ydGxdIC50b3gtY29tbWVudF9fYnV0dG9uc3BhY2luZyA+ICo6bGFzdC1jaGlsZCxcXG4udG94W2Rpcj1ydGxdIC50b3gtY29tbWVudF9fZWRpdCA+ICo6bGFzdC1jaGlsZCxcXG4udG94W2Rpcj1ydGxdIC50b3gtY29tbWVudF9fcmVwbHkgPiAqOmxhc3QtY2hpbGQge1xcbiAgbWFyZ2luLXJpZ2h0OiA4cHg7XFxufVxcbi50b3ggLnRveC11c2VyIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG4udG94IC50b3gtdXNlcl9fYXZhdGFyIHN2ZyB7XFxuICBmaWxsOiByZ2JhKDM0LCA0NywgNjIsIDAuNyk7XFxufVxcbi50b3ggLnRveC11c2VyX19hdmF0YXIgaW1nIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGhlaWdodDogMzZweDtcXG4gIG9iamVjdC1maXQ6IGNvdmVyO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIHdpZHRoOiAzNnB4O1xcbn1cXG4udG94IC50b3gtdXNlcl9fbmFtZSB7XFxuICBjb2xvcjogIzIyMmYzZTtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgbGluZS1oZWlnaHQ6IDE4cHg7XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LXVzZXJfX2F2YXRhciBzdmcsXFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LXVzZXJfX2F2YXRhciBpbWcge1xcbiAgbWFyZ2luLXJpZ2h0OiA4cHg7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC11c2VyX19hdmF0YXIgKyAudG94LXVzZXJfX25hbWUge1xcbiAgbWFyZ2luLWxlZnQ6IDhweDtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LXVzZXJfX2F2YXRhciBzdmcsXFxuLnRveFtkaXI9cnRsXSAudG94LXVzZXJfX2F2YXRhciBpbWcge1xcbiAgbWFyZ2luLWxlZnQ6IDhweDtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LXVzZXJfX2F2YXRhciArIC50b3gtdXNlcl9fbmFtZSB7XFxuICBtYXJnaW4tcmlnaHQ6IDhweDtcXG59XFxuLnRveCAudG94LWRpYWxvZy13cmFwIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBib3R0b206IDA7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBsZWZ0OiAwO1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgcmlnaHQ6IDA7XFxuICB0b3A6IDA7XFxuICB6LWluZGV4OiAxMTAwO1xcbn1cXG4udG94IC50b3gtZGlhbG9nLXdyYXBfX2JhY2tkcm9wIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSk7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDA7XFxuICB0b3A6IDA7XFxuICB6LWluZGV4OiAxO1xcbn1cXG4udG94IC50b3gtZGlhbG9nLXdyYXBfX2JhY2tkcm9wLS1vcGFxdWUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG59XFxuLnRveCAudG94LWRpYWxvZyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyLWNvbG9yOiAjZWVlZWVlO1xcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcXG4gIGJvcmRlci1zdHlsZTogc29saWQ7XFxuICBib3JkZXItd2lkdGg6IDBweDtcXG4gIGJveC1zaGFkb3c6IDAgMTZweCAxNnB4IC0xMHB4IHJnYmEoMzQsIDQ3LCA2MiwgMC4xNSksIDAgMCA0MHB4IDFweCByZ2JhKDM0LCA0NywgNjIsIDAuMTUpO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBtYXgtaGVpZ2h0OiAxMDAlO1xcbiAgbWF4LXdpZHRoOiA0ODBweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogOTV2dztcXG4gIHotaW5kZXg6IDI7XFxufVxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHggKSB7XFxuICBib2R5Om5vdCgudG94LWZvcmNlLWRlc2t0b3ApIC50b3ggLnRveC1kaWFsb2cge1xcbiAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xcbiAgICBtYXJnaW46IDhweCBhdXRvO1xcbiAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gOHB4ICogMik7XFxuICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gMTZweCk7XFxuICB9XFxufVxcbi50b3ggLnRveC1kaWFsb2ctaW5saW5lIHtcXG4gIHotaW5kZXg6IDExMDA7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2hlYWRlciB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlci1ib3R0b206IG5vbmU7XFxuICBjb2xvcjogIzIyMmYzZTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICBwYWRkaW5nOiA4cHggMTZweCAwIDE2cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2hlYWRlciAudG94LWJ1dHRvbiB7XFxuICB6LWluZGV4OiAxO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19kcmFnaGFuZGxlIHtcXG4gIGN1cnNvcjogZ3JhYjtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGxlZnQ6IDA7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fZHJhZ2hhbmRsZTphY3RpdmUge1xcbiAgY3Vyc29yOiBncmFiYmluZztcXG59XFxuLnRveCAudG94LWRpYWxvZ19fZGlzbWlzcyB7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG59XFxuLnRveCAudG94LWRpYWxvZ19fdGl0bGUge1xcbiAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXFxcIlNlZ29lIFVJXFxcIiwgUm9ib3RvLCBPeHlnZW4tU2FucywgVWJ1bnR1LCBDYW50YXJlbGwsIFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsIHNhbnMtc2VyaWY7XFxuICBmb250LXNpemU6IDIwcHg7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbiAgbGluZS1oZWlnaHQ6IDEuMztcXG4gIG1hcmdpbjogMDtcXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5IHtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXg6IDE7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbiAgbGluZS1oZWlnaHQ6IDEuMztcXG4gIG1pbi13aWR0aDogMDtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG59XFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCApIHtcXG4gIGJvZHk6bm90KC50b3gtZm9yY2UtZGVza3RvcCkgLnRveCAudG94LWRpYWxvZ19fYm9keSB7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICB9XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktbmF2IHtcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LXNocmluazogMDtcXG4gIHBhZGRpbmc6IDE2cHggMTZweDtcXG59XFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCApIHtcXG4gIC50b3ggLnRveC1kaWFsb2dfX2JvZHktbmF2IHtcXG4gICAgbWF4LXdpZHRoOiAxMWVtO1xcbiAgfVxcbn1cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4ICkge1xcbiAgYm9keTpub3QoLnRveC1mb3JjZS1kZXNrdG9wKSAudG94IC50b3gtZGlhbG9nX19ib2R5LW5hdiB7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcXG4gICAgb3ZlcmZsb3cteDogYXV0bztcXG4gICAgcGFkZGluZy1ib3R0b206IDA7XFxuICB9XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktbmF2LWl0ZW0ge1xcbiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgY29sb3I6IHJnYmEoMzQsIDQ3LCA2MiwgMC43KTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgbGluZS1oZWlnaHQ6IDEuMztcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG4gIG1heC13aWR0aDogMTNlbTtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1uYXYtaXRlbTpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDEwOCwgMjMxLCAwLjEpO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LW5hdi1pdGVtLS1hY3RpdmUge1xcbiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICMwMDZjZTc7XFxuICBjb2xvcjogIzAwNmNlNztcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IHtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleDogMTtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBtYXgtaGVpZ2h0OiBtaW4oNjUwcHgsIGNhbGMoMTAwdmggLSAxMTBweCkpO1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XFxuICBwYWRkaW5nOiAxNnB4IDE2cHg7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCA+ICoge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIG1hcmdpbi10b3A6IDE2cHg7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCA+ICo6Zmlyc3QtY2hpbGQge1xcbiAgbWFyZ2luLXRvcDogMDtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50ID4gKjpsYXN0LWNoaWxkIHtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCA+ICo6b25seS1jaGlsZCB7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgbWFyZ2luLXRvcDogMDtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IGEge1xcbiAgY29sb3I6ICMwMDZjZTc7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IGE6aG92ZXIsXFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IGE6Zm9jdXMge1xcbiAgY29sb3I6ICMwMDNjODE7XFxuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IGE6Zm9jdXMtdmlzaWJsZSB7XFxuICBib3JkZXItcmFkaXVzOiAxcHg7XFxuICBvdXRsaW5lOiAycHggc29saWQgIzAwNmNlNztcXG4gIG91dGxpbmUtb2Zmc2V0OiAycHg7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCBhOmFjdGl2ZSB7XFxuICBjb2xvcjogIzAwMjQ0ZTtcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgc3ZnIHtcXG4gIGZpbGw6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCBzdHJvbmcge1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCB1bCB7XFxuICBsaXN0LXN0eWxlLXR5cGU6IGRpc2M7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCB1bCxcXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgb2wsXFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IGRkIHtcXG4gIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAyLjVyZW07XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCB1bCxcXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgb2wsXFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IGRsIHtcXG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCB1bCxcXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgb2wsXFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IGRsLFxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCBkZCxcXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgZHQge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBtYXJnaW4taW5saW5lLWVuZDogMDtcXG4gIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IDA7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAudG94LWZvcm1fX2dyb3VwIGgxIHtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbiAgZm9udC1zaXplOiAyMHB4O1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcXG4gIG1hcmdpbi10b3A6IDJyZW07XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC50b3gtZm9ybV9fZ3JvdXAgaDIge1xcbiAgY29sb3I6ICMyMjJmM2U7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xcbiAgbWFyZ2luLXRvcDogMnJlbTtcXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLnRveC1mb3JtX19ncm91cCBwIHtcXG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAudG94LWZvcm1fX2dyb3VwIGgxOmZpcnN0LWNoaWxkLFxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAudG94LWZvcm1fX2dyb3VwIGgyOmZpcnN0LWNoaWxkLFxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAudG94LWZvcm1fX2dyb3VwIHA6Zmlyc3QtY2hpbGQge1xcbiAgbWFyZ2luLXRvcDogMDtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC50b3gtZm9ybV9fZ3JvdXAgaDE6bGFzdC1jaGlsZCxcXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLnRveC1mb3JtX19ncm91cCBoMjpsYXN0LWNoaWxkLFxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAudG94LWZvcm1fX2dyb3VwIHA6bGFzdC1jaGlsZCB7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLnRveC1mb3JtX19ncm91cCBoMTpvbmx5LWNoaWxkLFxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAudG94LWZvcm1fX2dyb3VwIGgyOm9ubHktY2hpbGQsXFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC50b3gtZm9ybV9fZ3JvdXAgcDpvbmx5LWNoaWxkIHtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxuICBtYXJnaW4tdG9wOiAwO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLnRveC1mb3JtX19ncm91cCAudG94LWxhYmVsLnRveC1sYWJlbC0tY2VudGVyIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC50b3gtZm9ybV9fZ3JvdXAgLnRveC1sYWJlbC50b3gtbGFiZWwtLWVuZCB7XFxuICB0ZXh0LWFsaWduOiBlbmQ7XFxufVxcbi50b3ggLnRveC1kaWFsb2ctLXdpZHRoLWxnIHtcXG4gIGhlaWdodDogNjUwcHg7XFxuICBtYXgtd2lkdGg6IDEyMDBweDtcXG59XFxuLnRveCAudG94LWRpYWxvZy0tZnVsbHNjcmVlbiB7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxufVxcbi50b3ggLnRveC1kaWFsb2ctLWZ1bGxzY3JlZW4gLnRveC1kaWFsb2dfX2JvZHktY29udGVudCB7XFxuICBtYXgtaGVpZ2h0OiAxMDAlO1xcbn1cXG4udG94IC50b3gtZGlhbG9nLS13aWR0aC1tZCB7XFxuICBtYXgtd2lkdGg6IDgwMHB4O1xcbn1cXG4udG94IC50b3gtZGlhbG9nLS13aWR0aC1tZCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IHtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQtLWNlbnRlcmVkIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fZm9vdGVyIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyLXRvcDogbm9uZTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICBwYWRkaW5nOiA4cHggMTZweDtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fZm9vdGVyLXN0YXJ0LFxcbi50b3ggLnRveC1kaWFsb2dfX2Zvb3Rlci1lbmQge1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYnVzeS1zcGlubmVyIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpO1xcbiAgYm90dG9tOiAwO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgbGVmdDogMDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAwO1xcbiAgdG9wOiAwO1xcbiAgei1pbmRleDogMztcXG59XFxuLnRveCAudG94LWRpYWxvZ19fdGFibGUge1xcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX190YWJsZSB0aGVhZCB0aCB7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG4gIHBhZGRpbmctYm90dG9tOiA4cHg7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX3RhYmxlIHRoZWFkIHRoOmZpcnN0LWNoaWxkIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDhweDtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fdGFibGUgdGJvZHkgdHIge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM2MjYyNjI7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX3RhYmxlIHRib2R5IHRyOmxhc3QtY2hpbGQge1xcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fdGFibGUgdGQge1xcbiAgcGFkZGluZy1ib3R0b206IDhweDtcXG4gIHBhZGRpbmctdG9wOiA4cHg7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX3RhYmxlIHRkOmZpcnN0LWNoaWxkIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDhweDtcXG59XFxuLnRveCAudG94LWRpYWxvZ19faWZyYW1lIHtcXG4gIG1pbi1oZWlnaHQ6IDIwMHB4O1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19pZnJhbWUudG94LWRpYWxvZ19faWZyYW1lLS1vcGFxdWUge1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG59XFxuLnRveCAudG94LW5hdm9iai1ib3JkZXJlZCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi50b3ggLnRveC1uYXZvYmotYm9yZGVyZWQ6OmJlZm9yZSB7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZWVlZWVlO1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgY29udGVudDogJyc7XFxuICBpbnNldDogMDtcXG4gIG9wYWNpdHk6IDE7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHotaW5kZXg6IDE7XFxufVxcbi50b3ggLnRveC1uYXZvYmotYm9yZGVyZWQtZm9jdXMudG94LW5hdm9iai1ib3JkZXJlZDo6YmVmb3JlIHtcXG4gIGJvcmRlci1jb2xvcjogIzAwNmNlNztcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDJweCByZ2JhKDAsIDEwOCwgMjMxLCAwLjI1KTtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX3BvcHVwcyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMTAwJTtcXG4gIHotaW5kZXg6IDExMDA7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktaWZyYW1lIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4OiAxO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1pZnJhbWUgLnRveC1uYXZvYmoge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXg6IDE7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktaWZyYW1lIC50b3gtbmF2b2JqIDpudGgtY2hpbGQoMikge1xcbiAgZmxleDogMTtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLnRveCAudG94LWRpYWxvZy1kb2NrLWZhZGVvdXQge1xcbiAgb3BhY2l0eTogMDtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuLnRveCAudG94LWRpYWxvZy1kb2NrLWZhZGVpbiB7XFxuICBvcGFjaXR5OiAxO1xcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcXG59XFxuLnRveCAudG94LWRpYWxvZy1kb2NrLXRyYW5zaXRpb24ge1xcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwcyBsaW5lYXIgMC4zcywgb3BhY2l0eSAwLjNzIGVhc2U7XFxufVxcbi50b3ggLnRveC1kaWFsb2ctZG9jay10cmFuc2l0aW9uLnRveC1kaWFsb2ctZG9jay1mYWRlaW4ge1xcbiAgdHJhbnNpdGlvbi1kZWxheTogMHM7XFxufVxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHggKSB7XFxuICBib2R5Om5vdCgudG94LWZvcmNlLWRlc2t0b3ApIC50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1kaWFsb2dfX2JvZHktbmF2IHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xcbiAgfVxcbn1cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4ICkge1xcbiAgYm9keTpub3QoLnRveC1mb3JjZS1kZXNrdG9wKSAudG94Om5vdChbZGlyPXJ0bF0pIC50b3gtZGlhbG9nX19ib2R5LW5hdi1pdGVtOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDhweDtcXG4gIH1cXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LWRpYWxvZ19fZm9vdGVyIC50b3gtZGlhbG9nX19mb290ZXItc3RhcnQgPiAqLFxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1kaWFsb2dfX2Zvb3RlciAudG94LWRpYWxvZ19fZm9vdGVyLWVuZCA+ICoge1xcbiAgbWFyZ2luLWxlZnQ6IDhweDtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LWRpYWxvZ19fYm9keSB7XFxuICB0ZXh0LWFsaWduOiByaWdodDtcXG59XFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCApIHtcXG4gIGJvZHk6bm90KC50b3gtZm9yY2UtZGVza3RvcCkgLnRveFtkaXI9cnRsXSAudG94LWRpYWxvZ19fYm9keS1uYXYge1xcbiAgICBtYXJnaW4tbGVmdDogMDtcXG4gIH1cXG59XFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCApIHtcXG4gIGJvZHk6bm90KC50b3gtZm9yY2UtZGVza3RvcCkgLnRveFtkaXI9cnRsXSAudG94LWRpYWxvZ19fYm9keS1uYXYtaXRlbTpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgIG1hcmdpbi1yaWdodDogOHB4O1xcbiAgfVxcbn1cXG4udG94W2Rpcj1ydGxdIC50b3gtZGlhbG9nX19mb290ZXIgLnRveC1kaWFsb2dfX2Zvb3Rlci1zdGFydCA+ICosXFxuLnRveFtkaXI9cnRsXSAudG94LWRpYWxvZ19fZm9vdGVyIC50b3gtZGlhbG9nX19mb290ZXItZW5kID4gKiB7XFxuICBtYXJnaW4tcmlnaHQ6IDhweDtcXG59XFxuYm9keS50b3gtZGlhbG9nX19kaXNhYmxlLXNjcm9sbCB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4udG94IC50b3gtZHJvcHpvbmUtY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4OiAxO1xcbn1cXG4udG94IC50b3gtZHJvcHpvbmUge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxuICBib3JkZXI6IDJweCBkYXNoZWQgI2VlZWVlZTtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGZsZXgtZ3JvdzogMTtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgbWluLWhlaWdodDogMTAwcHg7XFxuICBwYWRkaW5nOiAxMHB4O1xcbn1cXG4udG94IC50b3gtZHJvcHpvbmUgcCB7XFxuICBjb2xvcjogcmdiYSgzNCwgNDcsIDYyLCAwLjcpO1xcbiAgbWFyZ2luOiAwIDAgMTZweCAwO1xcbn1cXG4udG94IC50b3gtZWRpdC1hcmVhIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4OiAxO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnRveCAudG94LWVkaXQtYXJlYTo6YmVmb3JlIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkICMyRDZBREY7XFxuICBib3JkZXItcmFkaXVzOiA0cHg7XFxuICBjb250ZW50OiAnJztcXG4gIGluc2V0OiAwO1xcbiAgb3BhY2l0eTogMDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cztcXG4gIHotaW5kZXg6IDE7XFxufVxcbi50b3ggLnRveC1lZGl0LWFyZWFfX2lmcmFtZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyOiAwO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGZsZXg6IDE7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLnRveC50b3gtZWRpdC1mb2N1cyAudG94LWVkaXQtYXJlYTo6YmVmb3JlIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbi50b3gudG94LWlubGluZS1lZGl0LWFyZWEge1xcbiAgYm9yZGVyOiAxcHggZG90dGVkICNlZWVlZWU7XFxufVxcbi50b3ggLnRveC1lZGl0b3ItY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4OiAxIDEgYXV0bztcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4udG94IC50b3gtZWRpdG9yLWhlYWRlciB7XFxuICBkaXNwbGF5OiBncmlkO1xcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgbWluLWNvbnRlbnQ7XFxuICB6LWluZGV4OiAyO1xcbn1cXG4udG94Om5vdCgudG94LXRpbnltY2UtaW5saW5lKSAudG94LWVkaXRvci1oZWFkZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlci1ib3R0b206IG5vbmU7XFxuICBib3gtc2hhZG93OiAwIDJweCAycHggLTJweCByZ2JhKDM0LCA0NywgNjIsIDAuMSksIDAgOHB4IDhweCAtNHB4IHJnYmEoMzQsIDQ3LCA2MiwgMC4wNyk7XFxuICBwYWRkaW5nOiA0cHggMDtcXG59XFxuLnRveDpub3QoLnRveC10aW55bWNlLWlubGluZSkgLnRveC1lZGl0b3ItaGVhZGVyOm5vdCgudG94LWVkaXRvci1kb2NrLXRyYW5zaXRpb24pIHtcXG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC41cztcXG59XFxuLnRveDpub3QoLnRveC10aW55bWNlLWlubGluZSkudG94LXRpbnltY2UtLXRvb2xiYXItYm90dG9tIC50b3gtZWRpdG9yLWhlYWRlciB7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgI2UzZTNlMztcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxufVxcbi50b3g6bm90KC50b3gtdGlueW1jZS1pbmxpbmUpLnRveC10aW55bWNlLS10b29sYmFyLXN0aWNreS1vbiAudG94LWVkaXRvci1oZWFkZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJveC1zaGFkb3c6IDAgMnB4IDJweCAtMnB4IHJnYmEoMzQsIDQ3LCA2MiwgMC4yKSwgMCA4cHggOHB4IC00cHggcmdiYSgzNCwgNDcsIDYyLCAwLjE1KTtcXG4gIHBhZGRpbmc6IDRweCAwO1xcbn1cXG4udG94Om5vdCgudG94LXRpbnltY2UtaW5saW5lKS50b3gtdGlueW1jZS0tdG9vbGJhci1zdGlja3ktb24udG94LXRpbnltY2UtLXRvb2xiYXItYm90dG9tIC50b3gtZWRpdG9yLWhlYWRlciB7XFxuICBib3gtc2hhZG93OiAwIDJweCAycHggLTJweCByZ2JhKDM0LCA0NywgNjIsIDAuMiksIDAgOHB4IDhweCAtNHB4IHJnYmEoMzQsIDQ3LCA2MiwgMC4xNSk7XFxufVxcbi50b3gudG94Om5vdCgudG94LXRpbnltY2UtaW5saW5lKSAudG94LWVkaXRvci1oZWFkZXIudG94LWVkaXRvci1oZWFkZXItLWVtcHR5IHtcXG4gIGJhY2tncm91bmQ6IG5vbmU7XFxuICBib3JkZXI6IG5vbmU7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgcGFkZGluZzogMDtcXG59XFxuLnRveC1lZGl0b3ItZG9jay1mYWRlb3V0IHtcXG4gIG9wYWNpdHk6IDA7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxufVxcbi50b3gtZWRpdG9yLWRvY2stZmFkZWluIHtcXG4gIG9wYWNpdHk6IDE7XFxuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xcbn1cXG4udG94LWVkaXRvci1kb2NrLXRyYW5zaXRpb24ge1xcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwcyBsaW5lYXIgMC4yNXMsIG9wYWNpdHkgMC4yNXMgZWFzZTtcXG59XFxuLnRveC1lZGl0b3ItZG9jay10cmFuc2l0aW9uLnRveC1lZGl0b3ItZG9jay1mYWRlaW4ge1xcbiAgdHJhbnNpdGlvbi1kZWxheTogMHM7XFxufVxcbi50b3ggLnRveC1jb250cm9sLXdyYXAge1xcbiAgZmxleDogMTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnRveCAudG94LWNvbnRyb2wtd3JhcDpub3QoLnRveC1jb250cm9sLXdyYXAtLXN0YXR1cy1pbnZhbGlkKSAudG94LWNvbnRyb2wtd3JhcF9fc3RhdHVzLWljb24taW52YWxpZCxcXG4udG94IC50b3gtY29udHJvbC13cmFwOm5vdCgudG94LWNvbnRyb2wtd3JhcC0tc3RhdHVzLXVua25vd24pIC50b3gtY29udHJvbC13cmFwX19zdGF0dXMtaWNvbi11bmtub3duLFxcbi50b3ggLnRveC1jb250cm9sLXdyYXA6bm90KC50b3gtY29udHJvbC13cmFwLS1zdGF0dXMtdmFsaWQpIC50b3gtY29udHJvbC13cmFwX19zdGF0dXMtaWNvbi12YWxpZCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4udG94IC50b3gtY29udHJvbC13cmFwIHN2ZyB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuLnRveCAudG94LWNvbnRyb2wtd3JhcF9fc3RhdHVzLWljb24td3JhcCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDUwJTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcXG59XFxuLnRveCAudG94LWNvbnRyb2wtd3JhcF9fc3RhdHVzLWljb24taW52YWxpZCBzdmcge1xcbiAgZmlsbDogI2MwMDtcXG59XFxuLnRveCAudG94LWNvbnRyb2wtd3JhcF9fc3RhdHVzLWljb24tdW5rbm93biBzdmcge1xcbiAgZmlsbDogb3JhbmdlO1xcbn1cXG4udG94IC50b3gtY29udHJvbC13cmFwX19zdGF0dXMtaWNvbi12YWxpZCBzdmcge1xcbiAgZmlsbDogZ3JlZW47XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1jb250cm9sLXdyYXAtLXN0YXR1cy1pbnZhbGlkIC50b3gtdGV4dGZpZWxkLFxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1jb250cm9sLXdyYXAtLXN0YXR1cy11bmtub3duIC50b3gtdGV4dGZpZWxkLFxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1jb250cm9sLXdyYXAtLXN0YXR1cy12YWxpZCAudG94LXRleHRmaWVsZCB7XFxuICBwYWRkaW5nLXJpZ2h0OiAzMnB4O1xcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtY29udHJvbC13cmFwX19zdGF0dXMtaWNvbi13cmFwIHtcXG4gIHJpZ2h0OiA0cHg7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1jb250cm9sLXdyYXAtLXN0YXR1cy1pbnZhbGlkIC50b3gtdGV4dGZpZWxkLFxcbi50b3hbZGlyPXJ0bF0gLnRveC1jb250cm9sLXdyYXAtLXN0YXR1cy11bmtub3duIC50b3gtdGV4dGZpZWxkLFxcbi50b3hbZGlyPXJ0bF0gLnRveC1jb250cm9sLXdyYXAtLXN0YXR1cy12YWxpZCAudG94LXRleHRmaWVsZCB7XFxuICBwYWRkaW5nLWxlZnQ6IDMycHg7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1jb250cm9sLXdyYXBfX3N0YXR1cy1pY29uLXdyYXAge1xcbiAgbGVmdDogNHB4O1xcbn1cXG4udG94IC50b3gtYXV0b2NvbXBsZXRlciB7XFxuICBtYXgtd2lkdGg6IDI1ZW07XFxufVxcbi50b3ggLnRveC1hdXRvY29tcGxldGVyIC50b3gtbWVudSB7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgbWF4LXdpZHRoOiAyNWVtO1xcbn1cXG4udG94IC50b3gtYXV0b2NvbXBsZXRlciAudG94LWF1dG9jb21wbGV0ZXItaGlnaGxpZ2h0IHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbn1cXG4udG94IC50b3gtY29sb3ItaW5wdXQge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHotaW5kZXg6IDE7XFxufVxcbi50b3ggLnRveC1jb2xvci1pbnB1dCAudG94LXRleHRmaWVsZCB7XFxuICB6LWluZGV4OiAtMTtcXG59XFxuLnRveCAudG94LWNvbG9yLWlucHV0IHNwYW4ge1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDM0LCA0NywgNjIsIDAuMik7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBib3JkZXItc3R5bGU6IHNvbGlkO1xcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGhlaWdodDogMjRweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogNnB4O1xcbiAgd2lkdGg6IDI0cHg7XFxufVxcbi50b3ggLnRveC1jb2xvci1pbnB1dCBzcGFuOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksXFxuLnRveCAudG94LWNvbG9yLWlucHV0IHNwYW46Zm9jdXM6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSB7XFxuICBib3JkZXItY29sb3I6ICMwMDZjZTc7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi50b3ggLnRveC1jb2xvci1pbnB1dCBzcGFuOjpiZWZvcmUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDAsIDAsIDAsIDAuMjUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlKSwgbGluZWFyLWdyYWRpZW50KC00NWRlZywgcmdiYSgwLCAwLCAwLCAwLjI1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSksIGxpbmVhci1ncmFkaWVudCg0NWRlZywgdHJhbnNwYXJlbnQgNzUlLCByZ2JhKDAsIDAsIDAsIDAuMjUpIDc1JSksIGxpbmVhci1ncmFkaWVudCgtNDVkZWcsIHRyYW5zcGFyZW50IDc1JSwgcmdiYSgwLCAwLCAwLCAwLjI1KSA3NSUpO1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwLCAwIDZweCwgNnB4IC02cHgsIC02cHggMDtcXG4gIGJhY2tncm91bmQtc2l6ZTogMTJweCAxMnB4O1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2ZmZjtcXG4gIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBjb250ZW50OiAnJztcXG4gIGhlaWdodDogMjRweDtcXG4gIGxlZnQ6IC0xcHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IC0xcHg7XFxuICB3aWR0aDogMjRweDtcXG4gIHotaW5kZXg6IC0xO1xcbn1cXG4udG94IC50b3gtY29sb3ItaW5wdXQgc3BhblthcmlhLWRpc2FibGVkPXRydWVdIHtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1jb2xvci1pbnB1dCB7XFxuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZGVzY2VuZGluZy1zcGVjaWZpY2l0eSAqL1xcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtY29sb3ItaW5wdXQgLnRveC10ZXh0ZmllbGQge1xcbiAgcGFkZGluZy1sZWZ0OiAzNnB4O1xcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtY29sb3ItaW5wdXQgc3BhbiB7XFxuICBsZWZ0OiA2cHg7XFxufVxcbi50b3hbZGlyPVxcXCJydGxcXFwiXSAudG94LWNvbG9yLWlucHV0IHtcXG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1kZXNjZW5kaW5nLXNwZWNpZmljaXR5ICovXFxufVxcbi50b3hbZGlyPVxcXCJydGxcXFwiXSAudG94LWNvbG9yLWlucHV0IC50b3gtdGV4dGZpZWxkIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDM2cHg7XFxufVxcbi50b3hbZGlyPVxcXCJydGxcXFwiXSAudG94LWNvbG9yLWlucHV0IHNwYW4ge1xcbiAgcmlnaHQ6IDZweDtcXG59XFxuLnRveCAudG94LWxhYmVsLFxcbi50b3ggLnRveC10b29sYmFyLWxhYmVsIHtcXG4gIGNvbG9yOiByZ2JhKDM0LCA0NywgNjIsIDAuNyk7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XFxuICBsaW5lLWhlaWdodDogMS4zO1xcbiAgcGFkZGluZzogMCA4cHggMCAwO1xcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG4udG94IC50b3gtdG9vbGJhci1sYWJlbCB7XFxuICBwYWRkaW5nOiAwIDhweDtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LWxhYmVsIHtcXG4gIHBhZGRpbmc6IDAgMCAwIDhweDtcXG59XFxuLnRveCAudG94LWZvcm0ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXg6IDE7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbn1cXG4udG94IC50b3gtZm9ybV9fZ3JvdXAge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIG1hcmdpbi1ib3R0b206IDRweDtcXG59XFxuLnRveCAudG94LWZvcm0tZ3JvdXAtLW1heGltaXplIHtcXG4gIGZsZXg6IDE7XFxufVxcbi50b3ggLnRveC1mb3JtX19ncm91cC0tZXJyb3Ige1xcbiAgY29sb3I6ICNjMDA7XFxufVxcbi50b3ggLnRveC1mb3JtX19ncm91cC0tY29sbGVjdGlvbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG4udG94IC50b3gtZm9ybV9fZ3JpZCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGZsZXgtd3JhcDogd3JhcDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG59XFxuLnRveCAudG94LWZvcm1fX2dyaWQtLTJjb2wgPiAudG94LWZvcm1fX2dyb3VwIHtcXG4gIHdpZHRoOiBjYWxjKDUwJSAtICg4cHggLyAyKSk7XFxufVxcbi50b3ggLnRveC1mb3JtX19ncmlkLS0zY29sID4gLnRveC1mb3JtX19ncm91cCB7XFxuICB3aWR0aDogY2FsYygxMDAlIC8gMyAtICg4cHggLyAyKSk7XFxufVxcbi50b3ggLnRveC1mb3JtX19ncmlkLS00Y29sID4gLnRveC1mb3JtX19ncm91cCB7XFxuICB3aWR0aDogY2FsYygyNSUgLSAoOHB4IC8gMikpO1xcbn1cXG4udG94IC50b3gtZm9ybV9fY29udHJvbHMtaC1zdGFjayB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuLnRveCAudG94LWZvcm1fX2dyb3VwLS1pbmxpbmUge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcbi50b3ggLnRveC1mb3JtX19ncm91cC0tc3RyZXRjaGVkIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4OiAxO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG59XFxuLnRveCAudG94LWZvcm1fX2dyb3VwLS1zdHJldGNoZWQgLnRveC10ZXh0YXJlYSB7XFxuICBmbGV4OiAxO1xcbn1cXG4udG94IC50b3gtZm9ybV9fZ3JvdXAtLXN0cmV0Y2hlZCAudG94LW5hdm9iaiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleDogMTtcXG59XFxuLnRveCAudG94LWZvcm1fX2dyb3VwLS1zdHJldGNoZWQgLnRveC1uYXZvYmogOm50aC1jaGlsZCgyKSB7XFxuICBmbGV4OiAxO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtZm9ybV9fY29udHJvbHMtaC1zdGFjayA+ICo6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgbWFyZ2luLWxlZnQ6IDRweDtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LWZvcm1fX2NvbnRyb2xzLWgtc3RhY2sgPiAqOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi1yaWdodDogNHB4O1xcbn1cXG4udG94IC50b3gtbG9jay50b3gtbG9ja2VkIC50b3gtbG9jay1pY29uX191bmxvY2ssXFxuLnRveCAudG94LWxvY2s6bm90KC50b3gtbG9ja2VkKSAudG94LWxvY2staWNvbl9fbG9jayB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4udG94IC50b3gtdGV4dGZpZWxkLFxcbi50b3ggLnRveC10b29sYmFyLXRleHRmaWVsZCxcXG4udG94IC50b3gtbGlzdGJveGZpZWxkIC50b3gtbGlzdGJveC0tc2VsZWN0LFxcbi50b3ggLnRveC10ZXh0YXJlYSxcXG4udG94IC50b3gtdGV4dGFyZWEtd3JhcCAudG94LXRleHRhcmVhOmZvY3VzIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyLWNvbG9yOiAjZWVlZWVlO1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcXG4gIGJvcmRlci13aWR0aDogMXB4O1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBjb2xvcjogIzIyMmYzZTtcXG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFxcXCJTZWdvZSBVSVxcXCIsIFJvYm90bywgT3h5Z2VuLVNhbnMsIFVidW50dSwgQ2FudGFyZWxsLCBcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLCBzYW5zLXNlcmlmO1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XFxuICBtYXJnaW46IDA7XFxuICBtaW4taGVpZ2h0OiAzNHB4O1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIHBhZGRpbmc6IDVweCA1LjVweDtcXG4gIHJlc2l6ZTogbm9uZTtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4udG94IC50b3gtdGV4dGZpZWxkW2Rpc2FibGVkXSxcXG4udG94IC50b3gtdGV4dGFyZWFbZGlzYWJsZWRdIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7XFxuICBjb2xvcjogcmdiYSgzNCwgNDcsIDYyLCAwLjg1KTtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcbi50b3ggLnRveC10ZXh0ZmllbGQ6Zm9jdXMsXFxuLnRveCAudG94LWxpc3Rib3hmaWVsZCAudG94LWxpc3Rib3gtLXNlbGVjdDpmb2N1cyxcXG4udG94IC50b3gtdGV4dGFyZWEtd3JhcDpmb2N1cy13aXRoaW4sXFxuLnRveCAudG94LXRleHRhcmVhOmZvY3VzLFxcbi50b3ggLnRveC1jdXN0b20tZWRpdG9yOmZvY3VzLXdpdGhpbiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA2Y2U3O1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHJnYmEoMCwgMTA4LCAyMzEsIDAuMjUpO1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuLnRveCAudG94LXRvb2xiYXItdGV4dGZpZWxkIHtcXG4gIGJvcmRlci13aWR0aDogMDtcXG4gIG1hcmdpbi1ib3R0b206IDNweDtcXG4gIG1hcmdpbi10b3A6IDJweDtcXG4gIG1heC13aWR0aDogMjUwcHg7XFxufVxcbi50b3ggLnRveC1uYWtlZC1idG4ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXI6IDA7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm94LXNoYWRvdzogdW5zZXQ7XFxuICBjb2xvcjogIzAwNmNlNztcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG59XFxuLnRveCAudG94LW5ha2VkLWJ0biBzdmcge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBmaWxsOiAjMjIyZjNlO1xcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtdG9vbGJhci10ZXh0ZmllbGQgKyAqIHtcXG4gIG1hcmdpbi1sZWZ0OiA0cHg7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC10b29sYmFyLXRleHRmaWVsZCArICoge1xcbiAgbWFyZ2luLXJpZ2h0OiA0cHg7XFxufVxcbi50b3ggLnRveC1saXN0Ym94ZmllbGQge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4udG94IC50b3gtbGlzdGJveGZpZWxkIC50b3gtbGlzdGJveC0tc2VsZWN0W2Rpc2FibGVkXSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyO1xcbiAgY29sb3I6IHJnYmEoMzQsIDQ3LCA2MiwgMC44NSk7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbn1cXG4udG94IC50b3gtbGlzdGJveF9fc2VsZWN0LWxhYmVsIHtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGZsZXg6IDE7XFxuICBtYXJnaW46IDAgNHB4O1xcbn1cXG4udG94IC50b3gtbGlzdGJveF9fc2VsZWN0LWNoZXZyb24ge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIHdpZHRoOiAxNnB4O1xcbn1cXG4udG94IC50b3gtbGlzdGJveF9fc2VsZWN0LWNoZXZyb24gc3ZnIHtcXG4gIGZpbGw6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC1saXN0Ym94ZmllbGQgLnRveC1saXN0Ym94LS1zZWxlY3Qge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1saXN0Ym94ZmllbGQgc3ZnIHtcXG4gIHJpZ2h0OiA4cHg7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1saXN0Ym94ZmllbGQgc3ZnIHtcXG4gIGxlZnQ6IDhweDtcXG59XFxuLnRveCAudG94LXNlbGVjdGZpZWxkIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnRveCAudG94LXNlbGVjdGZpZWxkIHNlbGVjdCB7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxuICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7XFxuICBhcHBlYXJhbmNlOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlci1jb2xvcjogI2VlZWVlZTtcXG4gIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gIGJvcmRlci1zdHlsZTogc29saWQ7XFxuICBib3JkZXItd2lkdGg6IDFweDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgY29sb3I6ICMyMjJmM2U7XFxuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcXFwiU2Vnb2UgVUlcXFwiLCBSb2JvdG8sIE94eWdlbi1TYW5zLCBVYnVudHUsIENhbnRhcmVsbCwgXFxcIkhlbHZldGljYSBOZXVlXFxcIiwgc2Fucy1zZXJpZjtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xcbiAgbWFyZ2luOiAwO1xcbiAgbWluLWhlaWdodDogMzRweDtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBwYWRkaW5nOiA1cHggNS41cHg7XFxuICByZXNpemU6IG5vbmU7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLnRveCAudG94LXNlbGVjdGZpZWxkIHNlbGVjdFtkaXNhYmxlZF0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjtcXG4gIGNvbG9yOiByZ2JhKDM0LCA0NywgNjIsIDAuODUpO1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuLnRveCAudG94LXNlbGVjdGZpZWxkIHNlbGVjdDo6LW1zLWV4cGFuZCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4udG94IC50b3gtc2VsZWN0ZmllbGQgc2VsZWN0OmZvY3VzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXItY29sb3I6ICMwMDZjZTc7XFxuICBib3gtc2hhZG93OiAwIDAgMCAycHggcmdiYSgwLCAxMDgsIDIzMSwgMC4yNSk7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG4udG94IC50b3gtc2VsZWN0ZmllbGQgc3ZnIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1zZWxlY3RmaWVsZCBzZWxlY3Rbc2l6ZT1cXFwiMFxcXCJdLFxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1zZWxlY3RmaWVsZCBzZWxlY3Rbc2l6ZT1cXFwiMVxcXCJdIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDI0cHg7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1zZWxlY3RmaWVsZCBzdmcge1xcbiAgcmlnaHQ6IDhweDtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LXNlbGVjdGZpZWxkIHNlbGVjdFtzaXplPVxcXCIwXFxcIl0sXFxuLnRveFtkaXI9cnRsXSAudG94LXNlbGVjdGZpZWxkIHNlbGVjdFtzaXplPVxcXCIxXFxcIl0ge1xcbiAgcGFkZGluZy1sZWZ0OiAyNHB4O1xcbn1cXG4udG94W2Rpcj1ydGxdIC50b3gtc2VsZWN0ZmllbGQgc3ZnIHtcXG4gIGxlZnQ6IDhweDtcXG59XFxuLnRveCAudG94LXRleHRhcmVhLXdyYXAge1xcbiAgYm9yZGVyLWNvbG9yOiAjZWVlZWVlO1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcXG4gIGJvcmRlci13aWR0aDogMXB4O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXg6IDE7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4udG94IC50b3gtdGV4dGFyZWEge1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0YXJlYTtcXG4gIC1tb3otYXBwZWFyYW5jZTogdGV4dGFyZWE7XFxuICBhcHBlYXJhbmNlOiB0ZXh0YXJlYTtcXG4gIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXG59XFxuLnRveCAudG94LXRleHRhcmVhLXdyYXAgLnRveC10ZXh0YXJlYSB7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcbi50b3ggLnRveC10ZXh0YXJlYS13cmFwIC50b3gtdGV4dGFyZWE6Zm9jdXMge1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG4udG94LWZ1bGxzY3JlZW4ge1xcbiAgYm9yZGVyOiAwO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgbWFyZ2luOiAwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIG92ZXJzY3JvbGwtYmVoYXZpb3I6IG5vbmU7XFxuICBwYWRkaW5nOiAwO1xcbiAgdG91Y2gtYWN0aW9uOiBwaW5jaC16b29tO1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcbi50b3gudG94LXRpbnltY2UudG94LWZ1bGxzY3JlZW4gLnRveC1zdGF0dXNiYXJfX3Jlc2l6ZS1oYW5kbGUge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnRveC50b3gtdGlueW1jZS50b3gtZnVsbHNjcmVlbixcXG4udG94LXNoYWRvd2hvc3QudG94LWZ1bGxzY3JlZW4ge1xcbiAgbGVmdDogMDtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIHRvcDogMDtcXG4gIHotaW5kZXg6IDEyMDA7XFxufVxcbi50b3gudG94LXRpbnltY2UudG94LWZ1bGxzY3JlZW4ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcbi50b3gtZnVsbHNjcmVlbiAudG94LnRveC10aW55bWNlLWF1eCxcXG4udG94LWZ1bGxzY3JlZW4gfiAudG94LnRveC10aW55bWNlLWF1eCB7XFxuICB6LWluZGV4OiAxMjAxO1xcbn1cXG4udG94IC50b3gtaGVscF9fbW9yZS1saW5rIHtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxuICBtYXJnaW4tdG9wOiAxZW07XFxufVxcbi50b3ggLnRveC1pbWFnZXByZXZpZXcge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY2NjtcXG4gIGhlaWdodDogMzgwcHg7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcbi50b3ggLnRveC1pbWFnZXByZXZpZXcudG94LWltYWdlcHJldmlld19fbG9hZGVkIHtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbn1cXG4udG94IC50b3gtaW1hZ2VwcmV2aWV3X19jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGxlZnQ6IDEwMHZ3O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAxMDB2dztcXG59XFxuLnRveCAudG94LWltYWdlcHJldmlld19faW1hZ2Uge1xcbiAgYmFja2dyb3VuZDogdXJsKGRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RkaERBQU1BSUFCQU16TXpQLy8veXdBQUFBQURBQU1BQUFDRm9RZnFZZWFiTnlETWtCUWI4MVVhdDg1bnhndVVBRUFPdz09KTtcXG59XFxuLnRveCAudG94LWltYWdlLXRvb2xzIC50b3gtc3BhY2VyIHtcXG4gIGZsZXg6IDE7XFxufVxcbi50b3ggLnRveC1pbWFnZS10b29scyAudG94LWJhciB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGhlaWdodDogNjBweDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbn1cXG4udG94IC50b3gtaW1hZ2UtdG9vbHMgLnRveC1pbWFnZXByZXZpZXcsXFxuLnRveCAudG94LWltYWdlLXRvb2xzIC50b3gtaW1hZ2VwcmV2aWV3ICsgLnRveC1iYXIge1xcbiAgbWFyZ2luLXRvcDogOHB4O1xcbn1cXG4udG94IC50b3gtaW1hZ2UtdG9vbHMgLnRveC1jcm9wcmVjdC1ibG9jayB7XFxuICBiYWNrZ3JvdW5kOiBibGFjaztcXG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT01MCk7XFxuICBvcGFjaXR5OiAwLjU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB6b29tOiAxO1xcbn1cXG4udG94IC50b3gtaW1hZ2UtdG9vbHMgLnRveC1jcm9wcmVjdC1oYW5kbGUge1xcbiAgYm9yZGVyOiAycHggc29saWQgd2hpdGU7XFxuICBoZWlnaHQ6IDIwcHg7XFxuICBsZWZ0OiAwO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgd2lkdGg6IDIwcHg7XFxufVxcbi50b3ggLnRveC1pbWFnZS10b29scyAudG94LWNyb3ByZWN0LWhhbmRsZS1tb3ZlIHtcXG4gIGJvcmRlcjogMDtcXG4gIGN1cnNvcjogbW92ZTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuLnRveCAudG94LWltYWdlLXRvb2xzIC50b3gtY3JvcHJlY3QtaGFuZGxlLW53IHtcXG4gIGJvcmRlci13aWR0aDogMnB4IDAgMCAycHg7XFxuICBjdXJzb3I6IG53LXJlc2l6ZTtcXG4gIGxlZnQ6IDEwMHB4O1xcbiAgbWFyZ2luOiAtMnB4IDAgMCAtMnB4O1xcbiAgdG9wOiAxMDBweDtcXG59XFxuLnRveCAudG94LWltYWdlLXRvb2xzIC50b3gtY3JvcHJlY3QtaGFuZGxlLW5lIHtcXG4gIGJvcmRlci13aWR0aDogMnB4IDJweCAwIDA7XFxuICBjdXJzb3I6IG5lLXJlc2l6ZTtcXG4gIGxlZnQ6IDIwMHB4O1xcbiAgbWFyZ2luOiAtMnB4IDAgMCAtMjBweDtcXG4gIHRvcDogMTAwcHg7XFxufVxcbi50b3ggLnRveC1pbWFnZS10b29scyAudG94LWNyb3ByZWN0LWhhbmRsZS1zdyB7XFxuICBib3JkZXItd2lkdGg6IDAgMCAycHggMnB4O1xcbiAgY3Vyc29yOiBzdy1yZXNpemU7XFxuICBsZWZ0OiAxMDBweDtcXG4gIG1hcmdpbjogLTIwcHggMnB4IDAgLTJweDtcXG4gIHRvcDogMjAwcHg7XFxufVxcbi50b3ggLnRveC1pbWFnZS10b29scyAudG94LWNyb3ByZWN0LWhhbmRsZS1zZSB7XFxuICBib3JkZXItd2lkdGg6IDAgMnB4IDJweCAwO1xcbiAgY3Vyc29yOiBzZS1yZXNpemU7XFxuICBsZWZ0OiAyMDBweDtcXG4gIG1hcmdpbjogLTIwcHggMCAwIC0yMHB4O1xcbiAgdG9wOiAyMDBweDtcXG59XFxuLnRveCAudG94LWluc2VydC10YWJsZS1waWNrZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtd3JhcDogd3JhcDtcXG4gIHdpZHRoOiAxNzBweDtcXG59XFxuLnRveCAudG94LWluc2VydC10YWJsZS1waWNrZXIgPiBkaXYge1xcbiAgYm9yZGVyLWNvbG9yOiAjZWVlZWVlO1xcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcXG4gIGJvcmRlci13aWR0aDogMCAxcHggMXB4IDA7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgaGVpZ2h0OiAxN3B4O1xcbiAgd2lkdGg6IDE3cHg7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uLS1saXN0IC50b3gtY29sbGVjdGlvbl9fZ3JvdXAgLnRveC1pbnNlcnQtdGFibGUtcGlja2VyIHtcXG4gIG1hcmdpbjogLTRweCAtNHB4O1xcbn1cXG4udG94IC50b3gtaW5zZXJ0LXRhYmxlLXBpY2tlciAudG94LWluc2VydC10YWJsZS1waWNrZXJfX3NlbGVjdGVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTA4LCAyMzEsIDAuNSk7XFxuICBib3JkZXItY29sb3I6IHJnYmEoMCwgMTA4LCAyMzEsIDAuNSk7XFxufVxcbi50b3ggLnRveC1pbnNlcnQtdGFibGUtcGlja2VyX19sYWJlbCB7XFxuICBjb2xvcjogcmdiYSgzNCwgNDcsIDYyLCAwLjcpO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBwYWRkaW5nOiA0cHg7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSB7XFxuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZGVzY2VuZGluZy1zcGVjaWZpY2l0eSAqL1xcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtaW5zZXJ0LXRhYmxlLXBpY2tlciA+IGRpdjpudGgtY2hpbGQoMTBuKSB7XFxuICBib3JkZXItcmlnaHQ6IDA7XFxufVxcbi50b3hbZGlyPXJ0bF0ge1xcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWRlc2NlbmRpbmctc3BlY2lmaWNpdHkgKi9cXG59XFxuLnRveFtkaXI9cnRsXSAudG94LWluc2VydC10YWJsZS1waWNrZXIgPiBkaXY6bnRoLWNoaWxkKDEwbisxKSB7XFxuICBib3JkZXItcmlnaHQ6IDA7XFxufVxcbi50b3gge1xcbiAgLyogc3R5bGVsaW50LWRpc2FibGUgKi9cXG4gIC8qIHN0eWxlbGludC1lbmFibGUgKi9cXG59XFxuLnRveCAudG94LW1lbnUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgYm94LXNoYWRvdzogMCAwIDJweCAwIHJnYmEoMzQsIDQ3LCA2MiwgMC4yKSwgMCA0cHggOHB4IDAgcmdiYSgzNCwgNDcsIDYyLCAwLjE1KTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xcbiAgei1pbmRleDogMTE1MDtcXG59XFxuLnRveCAudG94LW1lbnUudG94LWNvbGxlY3Rpb24udG94LWNvbGxlY3Rpb24tLWxpc3Qge1xcbiAgcGFkZGluZzogMCA0cHg7XFxufVxcbi50b3ggLnRveC1tZW51LnRveC1jb2xsZWN0aW9uLnRveC1jb2xsZWN0aW9uLS10b29sYmFyIHtcXG4gIHBhZGRpbmc6IDhweDtcXG59XFxuLnRveCAudG94LW1lbnUudG94LWNvbGxlY3Rpb24udG94LWNvbGxlY3Rpb24tLWdyaWQge1xcbiAgcGFkZGluZzogOHB4O1xcbn1cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4ICkge1xcbiAgLnRveCAudG94LW1lbnUgLnRveC1jb2xsZWN0aW9uX19pdGVtLWxhYmVsIHtcXG4gICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcXG4gICAgd29yZC1icmVhazogbm9ybWFsO1xcbiAgfVxcblxcbiAgLnRveCAudG94LWRpYWxvZ19fcG9wdXBzIC50b3gtbWVudSAudG94LWNvbGxlY3Rpb25fX2l0ZW0tbGFiZWwge1xcbiAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XFxuICB9XFxufVxcbi50b3ggLnRveC1tZW51X19sYWJlbCBoMSxcXG4udG94IC50b3gtbWVudV9fbGFiZWwgaDIsXFxuLnRveCAudG94LW1lbnVfX2xhYmVsIGgzLFxcbi50b3ggLnRveC1tZW51X19sYWJlbCBoNCxcXG4udG94IC50b3gtbWVudV9fbGFiZWwgaDUsXFxuLnRveCAudG94LW1lbnVfX2xhYmVsIGg2LFxcbi50b3ggLnRveC1tZW51X19sYWJlbCBwLFxcbi50b3ggLnRveC1tZW51X19sYWJlbCBibG9ja3F1b3RlLFxcbi50b3ggLnRveC1tZW51X19sYWJlbCBjb2RlIHtcXG4gIG1hcmdpbjogMDtcXG59XFxuLnRveCAudG94LW1lbnViYXIge1xcbiAgYmFja2dyb3VuZDogcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0cmFuc3BhcmVudCAwcHggMXB4LCB0cmFuc3BhcmVudCAxcHggMzlweCkgY2VudGVyIHRvcCAzOXB4IC8gMTAwJSBjYWxjKDEwMCUgLSAzOXB4KSBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXg6IDAgMCBhdXRvO1xcbiAgZmxleC1zaHJpbms6IDA7XFxuICBmbGV4LXdyYXA6IHdyYXA7XFxuICBncmlkLWNvbHVtbjogMSAvIC0xO1xcbiAgZ3JpZC1yb3c6IDE7XFxuICBwYWRkaW5nOiAwIDExcHggMCAxMnB4O1xcbn1cXG4udG94IC50b3gtcHJvbW90aW9uICsgLnRveC1tZW51YmFyIHtcXG4gIGdyaWQtY29sdW1uOiAxO1xcbn1cXG4udG94IC50b3gtcHJvbW90aW9uIHtcXG4gIGJhY2tncm91bmQ6IHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQgMHB4IDFweCwgdHJhbnNwYXJlbnQgMXB4IDM5cHgpIGNlbnRlciB0b3AgMzlweCAvIDEwMCUgY2FsYygxMDAlIC0gMzlweCkgbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGdyaWQtY29sdW1uOiAyO1xcbiAgZ3JpZC1yb3c6IDE7XFxuICBwYWRkaW5nLWlubGluZS1lbmQ6IDhweDtcXG4gIHBhZGRpbmctaW5saW5lLXN0YXJ0OiA0cHg7XFxuICBwYWRkaW5nLXRvcDogNXB4O1xcbn1cXG4udG94IC50b3gtcHJvbW90aW9uLWxpbmsge1xcbiAgYWxpZ24taXRlbXM6IHVuc2FmZSBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRThGMUY4O1xcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xcbiAgY29sb3I6ICMwODZCRTY7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgaGVpZ2h0OiAyNi42cHg7XFxuICBwYWRkaW5nOiA0cHggOHB4O1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG59XFxuLnRveCAudG94LXByb21vdGlvbi1saW5rOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNCNEQ3RkY7XFxufVxcbi50b3ggLnRveC1wcm9tb3Rpb24tbGluazpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDlFREY3O1xcbn1cXG4vKiBEZXByZWNhdGVkLiBSZW1vdmUgaW4gbmV4dCBtYWpvciByZWxlYXNlICovXFxuLnRveCAudG94LW1idG4ge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXg6IDAgMCBhdXRvO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG4gIGhlaWdodDogMjhweDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgbWFyZ2luOiA1cHggMXB4IDZweCAwO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwYWRkaW5nOiAwIDRweDtcXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xcbiAgd2lkdGg6IGF1dG87XFxufVxcbi50b3ggLnRveC1tYnRuW2Rpc2FibGVkXSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogcmdiYSgzNCwgNDcsIDYyLCAwLjUpO1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuLnRveCAudG94LW1idG46Zm9jdXM6bm90KDpkaXNhYmxlZCkge1xcbiAgYmFja2dyb3VuZDogI2NjZTJmYTtcXG4gIGJvcmRlcjogMDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LW1idG4tLWFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kOiAjYTZjY2Y3O1xcbiAgYm9yZGVyOiAwO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtbWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKTpub3QoLnRveC1tYnRuLS1hY3RpdmUpIHtcXG4gIGJhY2tncm91bmQ6ICNjY2UyZmE7XFxuICBib3JkZXI6IDA7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC1tYnRuX19zZWxlY3QtbGFiZWwge1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG4gIG1hcmdpbjogMCA0cHg7XFxufVxcbi50b3ggLnRveC1tYnRuW2Rpc2FibGVkXSAudG94LW1idG5fX3NlbGVjdC1sYWJlbCB7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbn1cXG4udG94IC50b3gtbWJ0bl9fc2VsZWN0LWNoZXZyb24ge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIHdpZHRoOiAxNnB4O1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnRveCAudG94LW5vdGlmaWNhdGlvbiB7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBib3JkZXItc3R5bGU6IHNvbGlkO1xcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGRpc3BsYXk6IGdyaWQ7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoNDBweCwgMWZyKSBhdXRvIG1pbm1heCg0MHB4LCAxZnIpO1xcbiAgbWFyZ2luLXRvcDogNHB4O1xcbiAgb3BhY2l0eTogMDtcXG4gIHBhZGRpbmc6IDRweDtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxMDBtcyBlYXNlLWluLCBvcGFjaXR5IDE1MG1zIGVhc2UtaW47XFxufVxcbi50b3ggLnRveC1ub3RpZmljYXRpb24gcCB7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbn1cXG4udG94IC50b3gtbm90aWZpY2F0aW9uIGEge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxufVxcbi50b3ggLnRveC1ub3RpZmljYXRpb24tLWluIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbi50b3ggLnRveC1ub3RpZmljYXRpb24tLXN1Y2Nlc3Mge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U0ZWVkYTtcXG4gIGJvcmRlci1jb2xvcjogI2Q3ZTZjODtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtbm90aWZpY2F0aW9uLS1zdWNjZXNzIHAge1xcbiAgY29sb3I6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC1ub3RpZmljYXRpb24tLXN1Y2Nlc3MgYSB7XFxuICBjb2xvcjogIzUxNzM0MjtcXG59XFxuLnRveCAudG94LW5vdGlmaWNhdGlvbi0tc3VjY2VzcyBzdmcge1xcbiAgZmlsbDogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LW5vdGlmaWNhdGlvbi0tZXJyb3Ige1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1Y2NjYztcXG4gIGJvcmRlci1jb2xvcjogI2YwYjNiMztcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtbm90aWZpY2F0aW9uLS1lcnJvciBwIHtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtbm90aWZpY2F0aW9uLS1lcnJvciBhIHtcXG4gIGNvbG9yOiAjNzcxODFmO1xcbn1cXG4udG94IC50b3gtbm90aWZpY2F0aW9uLS1lcnJvciBzdmcge1xcbiAgZmlsbDogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LW5vdGlmaWNhdGlvbi0td2FybixcXG4udG94IC50b3gtbm90aWZpY2F0aW9uLS13YXJuaW5nIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY1Y2M7XFxuICBib3JkZXItY29sb3I6ICNmZmYwYjM7XFxuICBjb2xvcjogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LW5vdGlmaWNhdGlvbi0td2FybiBwLFxcbi50b3ggLnRveC1ub3RpZmljYXRpb24tLXdhcm5pbmcgcCB7XFxuICBjb2xvcjogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LW5vdGlmaWNhdGlvbi0td2FybiBhLFxcbi50b3ggLnRveC1ub3RpZmljYXRpb24tLXdhcm5pbmcgYSB7XFxuICBjb2xvcjogIzdhNmUyNTtcXG59XFxuLnRveCAudG94LW5vdGlmaWNhdGlvbi0td2FybiBzdmcsXFxuLnRveCAudG94LW5vdGlmaWNhdGlvbi0td2FybmluZyBzdmcge1xcbiAgZmlsbDogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LW5vdGlmaWNhdGlvbi0taW5mbyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDZlN2ZiO1xcbiAgYm9yZGVyLWNvbG9yOiAjYzFkYmY5O1xcbiAgY29sb3I6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC1ub3RpZmljYXRpb24tLWluZm8gcCB7XFxuICBjb2xvcjogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LW5vdGlmaWNhdGlvbi0taW5mbyBhIHtcXG4gIGNvbG9yOiAjMmE2NGE2O1xcbn1cXG4udG94IC50b3gtbm90aWZpY2F0aW9uLS1pbmZvIHN2ZyB7XFxuICBmaWxsOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtbm90aWZpY2F0aW9uX19ib2R5IHtcXG4gIGFsaWduLXNlbGY6IGNlbnRlcjtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgZ3JpZC1jb2x1bW4tZW5kOiAzO1xcbiAgZ3JpZC1jb2x1bW4tc3RhcnQ6IDI7XFxuICBncmlkLXJvdy1lbmQ6IDI7XFxuICBncmlkLXJvdy1zdGFydDogMTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XFxuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xcbn1cXG4udG94IC50b3gtbm90aWZpY2F0aW9uX19ib2R5ID4gKiB7XFxuICBtYXJnaW46IDA7XFxufVxcbi50b3ggLnRveC1ub3RpZmljYXRpb25fX2JvZHkgPiAqICsgKiB7XFxuICBtYXJnaW4tdG9wOiAxcmVtO1xcbn1cXG4udG94IC50b3gtbm90aWZpY2F0aW9uX19pY29uIHtcXG4gIGFsaWduLXNlbGY6IGNlbnRlcjtcXG4gIGdyaWQtY29sdW1uLWVuZDogMjtcXG4gIGdyaWQtY29sdW1uLXN0YXJ0OiAxO1xcbiAgZ3JpZC1yb3ctZW5kOiAyO1xcbiAgZ3JpZC1yb3ctc3RhcnQ6IDE7XFxuICBqdXN0aWZ5LXNlbGY6IGVuZDtcXG59XFxuLnRveCAudG94LW5vdGlmaWNhdGlvbl9faWNvbiBzdmcge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcbi50b3ggLnRveC1ub3RpZmljYXRpb25fX2Rpc21pc3Mge1xcbiAgYWxpZ24tc2VsZjogc3RhcnQ7XFxuICBncmlkLWNvbHVtbi1lbmQ6IDQ7XFxuICBncmlkLWNvbHVtbi1zdGFydDogMztcXG4gIGdyaWQtcm93LWVuZDogMjtcXG4gIGdyaWQtcm93LXN0YXJ0OiAxO1xcbiAganVzdGlmeS1zZWxmOiBlbmQ7XFxufVxcbi50b3ggLnRveC1ub3RpZmljYXRpb24gLnRveC1wcm9ncmVzcy1iYXIge1xcbiAgZ3JpZC1jb2x1bW4tZW5kOiA0O1xcbiAgZ3JpZC1jb2x1bW4tc3RhcnQ6IDE7XFxuICBncmlkLXJvdy1lbmQ6IDM7XFxuICBncmlkLXJvdy1zdGFydDogMjtcXG4gIGp1c3RpZnktc2VsZjogY2VudGVyO1xcbn1cXG4udG94IC50b3gtcG9wIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnRveCAudG94LXBvcC0tcmVzaXppbmcge1xcbiAgdHJhbnNpdGlvbjogd2lkdGggMC4xcyBlYXNlO1xcbn1cXG4udG94IC50b3gtcG9wLS1yZXNpemluZyAudG94LXRvb2xiYXIsXFxuLnRveCAudG94LXBvcC0tcmVzaXppbmcgLnRveC10b29sYmFyX19ncm91cCB7XFxuICBmbGV4LXdyYXA6IG5vd3JhcDtcXG59XFxuLnRveCAudG94LXBvcC0tdHJhbnNpdGlvbiB7XFxuICB0cmFuc2l0aW9uOiAwLjE1cyBlYXNlO1xcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tO1xcbn1cXG4udG94IC50b3gtcG9wLS10cmFuc2l0aW9uOjpiZWZvcmUsXFxuLnRveCAudG94LXBvcC0tdHJhbnNpdGlvbjo6YWZ0ZXIge1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMTVzLCB2aXNpYmlsaXR5IDBzLCBvcGFjaXR5IDAuMDc1cyBlYXNlIDAuMDc1cztcXG59XFxuLnRveCAudG94LXBvcF9fZGlhbG9nIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZWVlZWVlO1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgYm94LXNoYWRvdzogMCAwIDJweCAwIHJnYmEoMzQsIDQ3LCA2MiwgMC4yKSwgMCA0cHggOHB4IDAgcmdiYSgzNCwgNDcsIDYyLCAwLjE1KTtcXG4gIG1pbi13aWR0aDogMDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi50b3ggLnRveC1wb3BfX2RpYWxvZyA+ICo6bm90KC50b3gtdG9vbGJhcikge1xcbiAgbWFyZ2luOiA0cHggNHB4IDRweCA4cHg7XFxufVxcbi50b3ggLnRveC1wb3BfX2RpYWxvZyAudG94LXRvb2xiYXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBtYXJnaW4tYm90dG9tOiAtMXB4O1xcbn1cXG4udG94IC50b3gtcG9wOjpiZWZvcmUsXFxuLnRveCAudG94LXBvcDo6YWZ0ZXIge1xcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBoZWlnaHQ6IDA7XFxuICBvcGFjaXR5OiAxO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDA7XFxufVxcbi50b3ggLnRveC1wb3AudG94LXBvcC0taW5zZXQ6OmJlZm9yZSxcXG4udG94IC50b3gtcG9wLnRveC1wb3AtLWluc2V0OjphZnRlciB7XFxuICBvcGFjaXR5OiAwO1xcbiAgdHJhbnNpdGlvbjogYWxsIDBzIDAuMTVzLCB2aXNpYmlsaXR5IDBzLCBvcGFjaXR5IDAuMDc1cyBlYXNlO1xcbn1cXG4udG94IC50b3gtcG9wLnRveC1wb3AtLWJvdHRvbTo6YmVmb3JlLFxcbi50b3ggLnRveC1wb3AudG94LXBvcC0tYm90dG9tOjphZnRlciB7XFxuICBsZWZ0OiA1MCU7XFxuICB0b3A6IDEwMCU7XFxufVxcbi50b3ggLnRveC1wb3AudG94LXBvcC0tYm90dG9tOjphZnRlciB7XFxuICBib3JkZXItY29sb3I6ICNmZmYgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItd2lkdGg6IDhweDtcXG4gIG1hcmdpbi1sZWZ0OiAtOHB4O1xcbiAgbWFyZ2luLXRvcDogLTFweDtcXG59XFxuLnRveCAudG94LXBvcC50b3gtcG9wLS1ib3R0b206OmJlZm9yZSB7XFxuICBib3JkZXItY29sb3I6ICNlZWVlZWUgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItd2lkdGg6IDlweDtcXG4gIG1hcmdpbi1sZWZ0OiAtOXB4O1xcbn1cXG4udG94IC50b3gtcG9wLnRveC1wb3AtLXRvcDo6YmVmb3JlLFxcbi50b3ggLnRveC1wb3AudG94LXBvcC0tdG9wOjphZnRlciB7XFxuICBsZWZ0OiA1MCU7XFxuICB0b3A6IDA7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwMCUpO1xcbn1cXG4udG94IC50b3gtcG9wLnRveC1wb3AtLXRvcDo6YWZ0ZXIge1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjZmZmIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXdpZHRoOiA4cHg7XFxuICBtYXJnaW4tbGVmdDogLThweDtcXG4gIG1hcmdpbi10b3A6IDFweDtcXG59XFxuLnRveCAudG94LXBvcC50b3gtcG9wLS10b3A6OmJlZm9yZSB7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICNlZWVlZWUgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItd2lkdGg6IDlweDtcXG4gIG1hcmdpbi1sZWZ0OiAtOXB4O1xcbn1cXG4udG94IC50b3gtcG9wLnRveC1wb3AtLWxlZnQ6OmJlZm9yZSxcXG4udG94IC50b3gtcG9wLnRveC1wb3AtLWxlZnQ6OmFmdGVyIHtcXG4gIGxlZnQ6IDA7XFxuICB0b3A6IGNhbGMoNTAlIC0gMXB4KTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcXG59XFxuLnRveCAudG94LXBvcC50b3gtcG9wLS1sZWZ0OjphZnRlciB7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50ICNmZmYgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItd2lkdGg6IDhweDtcXG4gIG1hcmdpbi1sZWZ0OiAtMTVweDtcXG59XFxuLnRveCAudG94LXBvcC50b3gtcG9wLS1sZWZ0OjpiZWZvcmUge1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCAjZWVlZWVlIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXdpZHRoOiAxMHB4O1xcbiAgbWFyZ2luLWxlZnQ6IC0xOXB4O1xcbn1cXG4udG94IC50b3gtcG9wLnRveC1wb3AtLXJpZ2h0OjpiZWZvcmUsXFxuLnRveCAudG94LXBvcC50b3gtcG9wLS1yaWdodDo6YWZ0ZXIge1xcbiAgbGVmdDogMTAwJTtcXG4gIHRvcDogY2FsYyg1MCUgKyAxcHgpO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xcbn1cXG4udG94IC50b3gtcG9wLnRveC1wb3AtLXJpZ2h0OjphZnRlciB7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICNmZmY7XFxuICBib3JkZXItd2lkdGg6IDhweDtcXG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xcbn1cXG4udG94IC50b3gtcG9wLnRveC1wb3AtLXJpZ2h0OjpiZWZvcmUge1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjZWVlZWVlO1xcbiAgYm9yZGVyLXdpZHRoOiAxMHB4O1xcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XFxufVxcbi50b3ggLnRveC1wb3AudG94LXBvcC0tYWxpZ24tbGVmdDo6YmVmb3JlLFxcbi50b3ggLnRveC1wb3AudG94LXBvcC0tYWxpZ24tbGVmdDo6YWZ0ZXIge1xcbiAgbGVmdDogMjBweDtcXG59XFxuLnRveCAudG94LXBvcC50b3gtcG9wLS1hbGlnbi1yaWdodDo6YmVmb3JlLFxcbi50b3ggLnRveC1wb3AudG94LXBvcC0tYWxpZ24tcmlnaHQ6OmFmdGVyIHtcXG4gIGxlZnQ6IGNhbGMoMTAwJSAtIDIwcHgpO1xcbn1cXG4udG94IC50b3gtc2lkZWJhci13cmFwIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgZmxleC1ncm93OiAxO1xcbiAgbWluLWhlaWdodDogMDtcXG59XFxuLnRveCAudG94LXNpZGViYXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG59XFxuLnRveCAudG94LXNpZGViYXJfX3NsaWRlciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLnRveCAudG94LXNpZGViYXJfX3BhbmUtY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcbi50b3ggLnRveC1zaWRlYmFyX19wYW5lIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcbi50b3ggLnRveC1zaWRlYmFyLS1zbGlkaW5nLWNsb3NlZCB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG4udG94IC50b3gtc2lkZWJhci0tc2xpZGluZy1vcGVuIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbi50b3ggLnRveC1zaWRlYmFyLS1zbGlkaW5nLWdyb3dpbmcsXFxuLnRveCAudG94LXNpZGViYXItLXNsaWRpbmctc2hyaW5raW5nIHtcXG4gIHRyYW5zaXRpb246IHdpZHRoIDAuNXMgZWFzZSwgb3BhY2l0eSAwLjVzIGVhc2U7XFxufVxcbi50b3ggLnRveC1zZWxlY3RvciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDA5OWZmO1xcbiAgYm9yZGVyLWNvbG9yOiAjNDA5OWZmO1xcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcXG4gIGJvcmRlci13aWR0aDogMXB4O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGhlaWdodDogMTBweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiAxMHB4O1xcbn1cXG4udG94LnRveC1wbGF0Zm9ybS10b3VjaCAudG94LXNlbGVjdG9yIHtcXG4gIGhlaWdodDogMTJweDtcXG4gIHdpZHRoOiAxMnB4O1xcbn1cXG4udG94IC50b3gtc2xpZGVyIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleDogMTtcXG4gIGhlaWdodDogMjRweDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4udG94IC50b3gtc2xpZGVyX19yYWlsIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2VlZWVlZTtcXG4gIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gIGhlaWdodDogMTBweDtcXG4gIG1pbi13aWR0aDogMTIwcHg7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLnRveCAudG94LXNsaWRlcl9faGFuZGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDZjZTc7XFxuICBib3JkZXI6IDJweCBzb2xpZCAjMDA1NGI0O1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGhlaWdodDogMjRweDtcXG4gIGxlZnQ6IDUwJTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogNTAlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTUwJSk7XFxuICB3aWR0aDogMTRweDtcXG59XFxuLnRveCAudG94LWZvcm1fX2NvbnRyb2xzLWgtc3RhY2sgPiAudG94LXNsaWRlcjpub3QoOmZpcnN0LW9mLXR5cGUpIHtcXG4gIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IDhweDtcXG59XFxuLnRveCAudG94LWZvcm1fX2NvbnRyb2xzLWgtc3RhY2sgPiAudG94LWZvcm1fX2dyb3VwICsgLnRveC1zbGlkZXIge1xcbiAgbWFyZ2luLWlubGluZS1zdGFydDogMzJweDtcXG59XFxuLnRveCAudG94LWZvcm1fX2NvbnRyb2xzLWgtc3RhY2sgPiAudG94LXNsaWRlciArIC50b3gtZm9ybV9fZ3JvdXAge1xcbiAgbWFyZ2luLWlubGluZS1zdGFydDogMzJweDtcXG59XFxuLnRveCAudG94LXNvdXJjZS1jb2RlIHtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbn1cXG4udG94IC50b3gtc3Bpbm5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG4udG94IC50b3gtc3Bpbm5lciA+IGRpdiB7XFxuICBhbmltYXRpb246IHRhbS1ib3VuY2luZy1kb3RzIDEuNXMgZWFzZS1pbi1vdXQgMHMgaW5maW5pdGUgYm90aDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMzQsIDQ3LCA2MiwgMC43KTtcXG4gIGJvcmRlci1yYWRpdXM6IDEwMCU7XFxuICBoZWlnaHQ6IDhweDtcXG4gIHdpZHRoOiA4cHg7XFxufVxcbi50b3ggLnRveC1zcGlubmVyID4gZGl2Om50aC1jaGlsZCgxKSB7XFxuICBhbmltYXRpb24tZGVsYXk6IC0wLjMycztcXG59XFxuLnRveCAudG94LXNwaW5uZXIgPiBkaXY6bnRoLWNoaWxkKDIpIHtcXG4gIGFuaW1hdGlvbi1kZWxheTogLTAuMTZzO1xcbn1cXG5Aa2V5ZnJhbWVzIHRhbS1ib3VuY2luZy1kb3RzIHtcXG4gIDAlLCA4MCUsIDEwMCUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgfVxcblxcbiAgNDAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gIH1cXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LXNwaW5uZXIgPiBkaXY6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgbWFyZ2luLWxlZnQ6IDRweDtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LXNwaW5uZXIgPiBkaXY6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgbWFyZ2luLXJpZ2h0OiA0cHg7XFxufVxcbi50b3ggLnRveC1zdGF0dXNiYXIge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgI2UzZTNlMztcXG4gIGNvbG9yOiByZ2JhKDM0LCA0NywgNjIsIDAuNyk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleDogMCAwIGF1dG87XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbiAgaGVpZ2h0OiAyNXB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBhZGRpbmc6IDAgOHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XFxufVxcbi50b3ggLnRveC1zdGF0dXNiYXJfX3BhdGgge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXg6IDEgMSBhdXRvO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG59XFxuLnRveCAudG94LXN0YXR1c2Jhcl9fcmlnaHQtY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG59XFxuLnRveCAudG94LXN0YXR1c2Jhcl9faGVscC10ZXh0IHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuLnRveCAudG94LXN0YXR1c2Jhcl9fdGV4dC1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXg6IDEgMSBhdXRvO1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCApIHtcXG4gIC50b3ggLnRveC1zdGF0dXNiYXJfX3RleHQtY29udGFpbmVyLnRveC1zdGF0dXNiYXJfX3RleHQtY29udGFpbmVyLTMtY29scyA+IC50b3gtc3RhdHVzYmFyX19oZWxwLXRleHQsXFxuICAudG94IC50b3gtc3RhdHVzYmFyX190ZXh0LWNvbnRhaW5lci50b3gtc3RhdHVzYmFyX190ZXh0LWNvbnRhaW5lci0zLWNvbHMgPiAudG94LXN0YXR1c2Jhcl9fcmlnaHQtY29udGFpbmVyLFxcbiAgLnRveCAudG94LXN0YXR1c2Jhcl9fdGV4dC1jb250YWluZXIudG94LXN0YXR1c2Jhcl9fdGV4dC1jb250YWluZXItMy1jb2xzID4gLnRveC1zdGF0dXNiYXJfX3BhdGgge1xcbiAgICBmbGV4OiAwIDAgY2FsYygxMDAlIC8gMyk7XFxuICB9XFxufVxcbi50b3ggLnRveC1zdGF0dXNiYXJfX3RleHQtY29udGFpbmVyLnRveC1zdGF0dXNiYXJfX3RleHQtY29udGFpbmVyLS1mbGV4LWVuZCB7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xcbn1cXG4udG94IC50b3gtc3RhdHVzYmFyX190ZXh0LWNvbnRhaW5lci50b3gtc3RhdHVzYmFyX190ZXh0LWNvbnRhaW5lci0tZmxleC1zdGFydCB7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxufVxcbi50b3ggLnRveC1zdGF0dXNiYXJfX3RleHQtY29udGFpbmVyLnRveC1zdGF0dXNiYXJfX3RleHQtY29udGFpbmVyLS1zcGFjZS1hcm91bmQge1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XFxufVxcbi50b3ggLnRveC1zdGF0dXNiYXJfX3BhdGggPiAqIHtcXG4gIGRpc3BsYXk6IGlubGluZTtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxufVxcbi50b3ggLnRveC1zdGF0dXNiYXJfX3dvcmRjb3VudCB7XFxuICBmbGV4OiAwIDAgYXV0bztcXG4gIG1hcmdpbi1sZWZ0OiAxY2g7XFxufVxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHggKSB7XFxuICAudG94IC50b3gtc3RhdHVzYmFyX190ZXh0LWNvbnRhaW5lciAudG94LXN0YXR1c2Jhcl9faGVscC10ZXh0IHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gIH1cXG5cXG4gIC50b3ggLnRveC1zdGF0dXNiYXJfX3RleHQtY29udGFpbmVyIC50b3gtc3RhdHVzYmFyX19oZWxwLXRleHQ6b25seS1jaGlsZCB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgfVxcbn1cXG4udG94IC50b3gtc3RhdHVzYmFyIGEsXFxuLnRveCAudG94LXN0YXR1c2Jhcl9fcGF0aC1pdGVtLFxcbi50b3ggLnRveC1zdGF0dXNiYXJfX3dvcmRjb3VudCB7XFxuICBjb2xvcjogcmdiYSgzNCwgNDcsIDYyLCAwLjcpO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG4udG94IC50b3gtc3RhdHVzYmFyIGE6aG92ZXI6bm90KDpkaXNhYmxlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSxcXG4udG94IC50b3gtc3RhdHVzYmFyX19wYXRoLWl0ZW06aG92ZXI6bm90KDpkaXNhYmxlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSxcXG4udG94IC50b3gtc3RhdHVzYmFyX193b3JkY291bnQ6aG92ZXI6bm90KDpkaXNhYmxlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSxcXG4udG94IC50b3gtc3RhdHVzYmFyIGE6Zm9jdXM6bm90KDpkaXNhYmxlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSxcXG4udG94IC50b3gtc3RhdHVzYmFyX19wYXRoLWl0ZW06Zm9jdXM6bm90KDpkaXNhYmxlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSxcXG4udG94IC50b3gtc3RhdHVzYmFyX193b3JkY291bnQ6Zm9jdXM6bm90KDpkaXNhYmxlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSB7XFxuICBjb2xvcjogIzIyMmYzZTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnRveCAudG94LXN0YXR1c2Jhcl9fYnJhbmRpbmcgc3ZnIHtcXG4gIGZpbGw6IHJnYmEoMzQsIDQ3LCA2MiwgMC44KTtcXG4gIGhlaWdodDogMS4xNGVtO1xcbiAgdmVydGljYWwtYWxpZ246IC0wLjI4ZW07XFxuICB3aWR0aDogMy42ZW07XFxufVxcbi50b3ggLnRveC1zdGF0dXNiYXJfX2JyYW5kaW5nIGE6aG92ZXI6bm90KDpkaXNhYmxlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSBzdmcsXFxuLnRveCAudG94LXN0YXR1c2Jhcl9fYnJhbmRpbmcgYTpmb2N1czpub3QoOmRpc2FibGVkKTpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pIHN2ZyB7XFxuICBmaWxsOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtc3RhdHVzYmFyX19yZXNpemUtaGFuZGxlIHtcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcXG4gIGFsaWduLXNlbGY6IHN0cmV0Y2g7XFxuICBjdXJzb3I6IG53c2UtcmVzaXplO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXg6IDAgMCBhdXRvO1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbWFyZ2luLXJpZ2h0OiAtOHB4O1xcbiAgcGFkZGluZy1ib3R0b206IDNweDtcXG4gIHBhZGRpbmctbGVmdDogMWNoO1xcbiAgcGFkZGluZy1yaWdodDogM3B4O1xcbn1cXG4udG94IC50b3gtc3RhdHVzYmFyX19yZXNpemUtaGFuZGxlIHN2ZyB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGZpbGw6IHJnYmEoMzQsIDQ3LCA2MiwgMC41KTtcXG59XFxuLnRveCAudG94LXN0YXR1c2Jhcl9fcmVzaXplLWhhbmRsZTpmb2N1cyBzdmcge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RlZTBlMjtcXG4gIGJvcmRlci1yYWRpdXM6IDFweCAxcHggNXB4IDFweDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDJweCAjZGVlMGUyO1xcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtc3RhdHVzYmFyX19wYXRoID4gKiB7XFxuICBtYXJnaW4tcmlnaHQ6IDRweDtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LXN0YXR1c2Jhcl9fYnJhbmRpbmcge1xcbiAgbWFyZ2luLWxlZnQ6IDJjaDtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LXN0YXR1c2JhciB7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1zdGF0dXNiYXJfX3BhdGggPiAqIHtcXG4gIG1hcmdpbi1sZWZ0OiA0cHg7XFxufVxcbi50b3ggLnRveC10aHJvYmJlciB7XFxuICB6LWluZGV4OiAxMjk5O1xcbn1cXG4udG94IC50b3gtdGhyb2JiZXJfX2J1c3ktc3Bpbm5lciB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpO1xcbiAgYm90dG9tOiAwO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgbGVmdDogMDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAwO1xcbiAgdG9wOiAwO1xcbn1cXG4udG94IC50b3gtdGJ0biB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXI6IDA7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICMyMjJmM2U7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleDogMCAwIGF1dG87XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbiAgaGVpZ2h0OiAyOHB4O1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBtYXJnaW46IDZweCAxcHggNXB4IDA7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBhZGRpbmc6IDA7XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG4gIHdpZHRoOiAzNHB4O1xcbn1cXG4udG94IC50b3gtdGJ0biBzdmcge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBmaWxsOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtdGJ0bi50b3gtdGJ0bi1tb3JlIHtcXG4gIHBhZGRpbmctbGVmdDogNXB4O1xcbiAgcGFkZGluZy1yaWdodDogNXB4O1xcbiAgd2lkdGg6IGluaGVyaXQ7XFxufVxcbi50b3ggLnRveC10YnRuOmZvY3VzIHtcXG4gIGJhY2tncm91bmQ6ICNjY2UyZmE7XFxuICBib3JkZXI6IDA7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG4udG94IC50b3gtdGJ0bjpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiAjY2NlMmZhO1xcbiAgYm9yZGVyOiAwO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtdGJ0bjpob3ZlciBzdmcge1xcbiAgZmlsbDogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LXRidG46YWN0aXZlIHtcXG4gIGJhY2tncm91bmQ6ICNhNmNjZjc7XFxuICBib3JkZXI6IDA7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC10YnRuOmFjdGl2ZSBzdmcge1xcbiAgZmlsbDogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LXRidG4tLWRpc2FibGVkIC50b3gtdGJ0bi0tZW5hYmxlZCBzdmcge1xcbiAgZmlsbDogcmdiYSgzNCwgNDcsIDYyLCAwLjUpO1xcbn1cXG4udG94IC50b3gtdGJ0bi0tZGlzYWJsZWQsXFxuLnRveCAudG94LXRidG4tLWRpc2FibGVkOmhvdmVyLFxcbi50b3ggLnRveC10YnRuOmRpc2FibGVkLFxcbi50b3ggLnRveC10YnRuOmRpc2FibGVkOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiAwO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiByZ2JhKDM0LCA0NywgNjIsIDAuNSk7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbn1cXG4udG94IC50b3gtdGJ0bi0tZGlzYWJsZWQgc3ZnLFxcbi50b3ggLnRveC10YnRuLS1kaXNhYmxlZDpob3ZlciBzdmcsXFxuLnRveCAudG94LXRidG46ZGlzYWJsZWQgc3ZnLFxcbi50b3ggLnRveC10YnRuOmRpc2FibGVkOmhvdmVyIHN2ZyB7XFxuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIG5vLWRlc2NlbmRpbmctc3BlY2lmaWNpdHkgKi9cXG4gIGZpbGw6IHJnYmEoMzQsIDQ3LCA2MiwgMC41KTtcXG59XFxuLnRveCAudG94LXRidG4tLWVuYWJsZWQsXFxuLnRveCAudG94LXRidG4tLWVuYWJsZWQ6aG92ZXIge1xcbiAgYmFja2dyb3VuZDogI2E2Y2NmNztcXG4gIGJvcmRlcjogMDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LXRidG4tLWVuYWJsZWQgPiAqLFxcbi50b3ggLnRveC10YnRuLS1lbmFibGVkOmhvdmVyID4gKiB7XFxuICB0cmFuc2Zvcm06IG5vbmU7XFxufVxcbi50b3ggLnRveC10YnRuLS1lbmFibGVkIHN2ZyxcXG4udG94IC50b3gtdGJ0bi0tZW5hYmxlZDpob3ZlciBzdmcge1xcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbGluZSBuby1kZXNjZW5kaW5nLXNwZWNpZmljaXR5ICovXFxuICBmaWxsOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtdGJ0bi0tZW5hYmxlZC50b3gtdGJ0bi0tZGlzYWJsZWQgc3ZnLFxcbi50b3ggLnRveC10YnRuLS1lbmFibGVkOmhvdmVyLnRveC10YnRuLS1kaXNhYmxlZCBzdmcge1xcbiAgZmlsbDogcmdiYSgzNCwgNDcsIDYyLCAwLjUpO1xcbn1cXG4udG94IC50b3gtdGJ0bjpmb2N1czpub3QoLnRveC10YnRuLS1kaXNhYmxlZCkge1xcbiAgY29sb3I6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC10YnRuOmZvY3VzOm5vdCgudG94LXRidG4tLWRpc2FibGVkKSBzdmcge1xcbiAgZmlsbDogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LXRidG46YWN0aXZlID4gKiB7XFxuICB0cmFuc2Zvcm06IG5vbmU7XFxufVxcbi50b3ggLnRveC10YnRuLS1tZCB7XFxuICBoZWlnaHQ6IDQycHg7XFxuICB3aWR0aDogNTFweDtcXG59XFxuLnRveCAudG94LXRidG4tLWxnIHtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBoZWlnaHQ6IDU2cHg7XFxuICB3aWR0aDogNjhweDtcXG59XFxuLnRveCAudG94LXRidG4tLXJldHVybiB7XFxuICBhbGlnbi1zZWxmOiBzdHJldGNoO1xcbiAgaGVpZ2h0OiB1bnNldDtcXG4gIHdpZHRoOiAxNnB4O1xcbn1cXG4udG94IC50b3gtdGJ0bi0tbGFiZWxlZCB7XFxuICBwYWRkaW5nOiAwIDRweDtcXG4gIHdpZHRoOiB1bnNldDtcXG59XFxuLnRveCAudG94LXRidG5fX3ZsYWJlbCB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGZvbnQtc2l6ZTogMTBweDtcXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XFxuICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07XFxuICBtYXJnaW4tYm90dG9tOiA0cHg7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG4udG94IC50b3gtbnVtYmVyLWlucHV0IHtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBtYXJnaW46IDZweCAxcHggNXB4IDA7XFxuICBwYWRkaW5nOiAwIDRweDtcXG4gIHdpZHRoOiBhdXRvO1xcbn1cXG4udG94IC50b3gtbnVtYmVyLWlucHV0IC50b3gtaW5wdXQtd3JhcHBlciB7XFxuICBiYWNrZ3JvdW5kOiAjZjdmN2Y3O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4udG94IC50b3gtbnVtYmVyLWlucHV0IC50b3gtaW5wdXQtd3JhcHBlcjpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kOiAjY2NlMmZhO1xcbn1cXG4udG94IC50b3gtbnVtYmVyLWlucHV0IGlucHV0IHtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgbWFyZ2luOiAycHggMDtcXG4gIHBvaW50ZXItZXZlbnRzOiBhbGw7XFxuICB3aWR0aDogNjBweDtcXG59XFxuLnRveCAudG94LW51bWJlci1pbnB1dCBpbnB1dDpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiAjY2NlMmZhO1xcbiAgY29sb3I6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC1udW1iZXItaW5wdXQgaW5wdXQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtbnVtYmVyLWlucHV0IGlucHV0OmRpc2FibGVkIHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiAwO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiByZ2JhKDM0LCA0NywgNjIsIDAuNSk7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbn1cXG4udG94IC50b3gtbnVtYmVyLWlucHV0IGJ1dHRvbiB7XFxuICBiYWNrZ3JvdW5kOiAjZjdmN2Y3O1xcbiAgY29sb3I6ICMyMjJmM2U7XFxuICBoZWlnaHQ6IDI4cHg7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB3aWR0aDogMjRweDtcXG59XFxuLnRveCAudG94LW51bWJlci1pbnB1dCBidXR0b24gc3ZnIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgZmlsbDogIzIyMmYzZTtcXG4gIG1hcmdpbjogMCBhdXRvO1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjY3KTtcXG59XFxuLnRveCAudG94LW51bWJlci1pbnB1dCBidXR0b246Zm9jdXMge1xcbiAgYmFja2dyb3VuZDogI2NjZTJmYTtcXG59XFxuLnRveCAudG94LW51bWJlci1pbnB1dCBidXR0b246aG92ZXIge1xcbiAgYmFja2dyb3VuZDogI2NjZTJmYTtcXG4gIGJvcmRlcjogMDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LW51bWJlci1pbnB1dCBidXR0b246aG92ZXIgc3ZnIHtcXG4gIGZpbGw6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC1udW1iZXItaW5wdXQgYnV0dG9uOmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kOiAjYTZjY2Y3O1xcbiAgYm9yZGVyOiAwO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtbnVtYmVyLWlucHV0IGJ1dHRvbjphY3RpdmUgc3ZnIHtcXG4gIGZpbGw6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC1udW1iZXItaW5wdXQgYnV0dG9uOmRpc2FibGVkIHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiAwO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiByZ2JhKDM0LCA0NywgNjIsIDAuNSk7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbn1cXG4udG94IC50b3gtbnVtYmVyLWlucHV0IGJ1dHRvbjpkaXNhYmxlZCBzdmcge1xcbiAgZmlsbDogcmdiYSgzNCwgNDcsIDYyLCAwLjUpO1xcbn1cXG4udG94IC50b3gtbnVtYmVyLWlucHV0IGJ1dHRvbi5taW51cyB7XFxuICBib3JkZXItcmFkaXVzOiAzcHggMCAwIDNweDtcXG59XFxuLnRveCAudG94LW51bWJlci1pbnB1dCBidXR0b24ucGx1cyB7XFxuICBib3JkZXItcmFkaXVzOiAwIDNweCAzcHggMDtcXG59XFxuLnRveCAudG94LW51bWJlci1pbnB1dDpmb2N1czpub3QoOmFjdGl2ZSkgPiBidXR0b24sXFxuLnRveCAudG94LW51bWJlci1pbnB1dDpmb2N1czpub3QoOmFjdGl2ZSkgPiAudG94LWlucHV0LXdyYXBwZXIge1xcbiAgYmFja2dyb3VuZDogI2NjZTJmYTtcXG59XFxuLnRveCAudG94LXRidG4tLXNlbGVjdCB7XFxuICBtYXJnaW46IDZweCAxcHggNXB4IDA7XFxuICBwYWRkaW5nOiAwIDRweDtcXG4gIHdpZHRoOiBhdXRvO1xcbn1cXG4udG94IC50b3gtdGJ0bl9fc2VsZWN0LWxhYmVsIHtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XFxuICBoZWlnaHQ6IGluaXRpYWw7XFxuICBtYXJnaW46IDAgNHB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG59XFxuLnRveCAudG94LXRidG5fX3NlbGVjdC1jaGV2cm9uIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICB3aWR0aDogMTZweDtcXG59XFxuLnRveCAudG94LXRidG5fX3NlbGVjdC1jaGV2cm9uIHN2ZyB7XFxuICBmaWxsOiByZ2JhKDM0LCA0NywgNjIsIDAuNSk7XFxufVxcbi50b3ggLnRveC10YnRuLS1iZXNwb2tlIHtcXG4gIGJhY2tncm91bmQ6ICNmN2Y3Zjc7XFxufVxcbi50b3ggLnRveC10YnRuLS1iZXNwb2tlICsgLnRveC10YnRuLS1iZXNwb2tlIHtcXG4gIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IDRweDtcXG59XFxuLnRveCAudG94LXRidG4tLWJlc3Bva2UgLnRveC10YnRuX19zZWxlY3QtbGFiZWwge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIHdpZHRoOiA3ZW07XFxufVxcbi50b3ggLnRveC10YnRuLS1kaXNhYmxlZCAudG94LXRidG5fX3NlbGVjdC1sYWJlbCxcXG4udG94IC50b3gtdGJ0bi0tc2VsZWN0OmRpc2FibGVkIC50b3gtdGJ0bl9fc2VsZWN0LWxhYmVsIHtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcbi50b3ggLnRveC1zcGxpdC1idXR0b24ge1xcbiAgYm9yZGVyOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBtYXJnaW46IDZweCAxcHggNXB4IDA7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4udG94IC50b3gtc3BsaXQtYnV0dG9uOmhvdmVyIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjY2NlMmZhIGluc2V0O1xcbn1cXG4udG94IC50b3gtc3BsaXQtYnV0dG9uOmZvY3VzIHtcXG4gIGJhY2tncm91bmQ6ICNjY2UyZmE7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC1zcGxpdC1idXR0b24gPiAqIHtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxufVxcbi50b3ggLnRveC1zcGxpdC1idXR0b25fX2NoZXZyb24ge1xcbiAgd2lkdGg6IDE2cHg7XFxufVxcbi50b3ggLnRveC1zcGxpdC1idXR0b25fX2NoZXZyb24gc3ZnIHtcXG4gIGZpbGw6IHJnYmEoMzQsIDQ3LCA2MiwgMC41KTtcXG59XFxuLnRveCAudG94LXNwbGl0LWJ1dHRvbiAudG94LXRidG4ge1xcbiAgbWFyZ2luOiAwO1xcbn1cXG4udG94IC50b3gtc3BsaXQtYnV0dG9uLnRveC10YnRuLS1kaXNhYmxlZDpob3ZlcixcXG4udG94IC50b3gtc3BsaXQtYnV0dG9uLnRveC10YnRuLS1kaXNhYmxlZDpmb2N1cyxcXG4udG94IC50b3gtc3BsaXQtYnV0dG9uLnRveC10YnRuLS1kaXNhYmxlZCAudG94LXRidG46aG92ZXIsXFxuLnRveCAudG94LXNwbGl0LWJ1dHRvbi50b3gtdGJ0bi0tZGlzYWJsZWQgLnRveC10YnRuOmZvY3VzIHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiByZ2JhKDM0LCA0NywgNjIsIDAuNSk7XFxufVxcbi50b3gudG94LXBsYXRmb3JtLXRvdWNoIC50b3gtc3BsaXQtYnV0dG9uIC50b3gtdGJ0bi0tc2VsZWN0IHtcXG4gIHBhZGRpbmc6IDAgMHB4O1xcbn1cXG4udG94LnRveC1wbGF0Zm9ybS10b3VjaCAudG94LXNwbGl0LWJ1dHRvbiAudG94LXRidG46bm90KC50b3gtdGJ0bi0tc2VsZWN0KTpmaXJzdC1jaGlsZCB7XFxuICB3aWR0aDogMzBweDtcXG59XFxuLnRveC50b3gtcGxhdGZvcm0tdG91Y2ggLnRveC1zcGxpdC1idXR0b25fX2NoZXZyb24ge1xcbiAgd2lkdGg6IDIwcHg7XFxufVxcbi50b3ggLnRveC1zcGxpdC1idXR0b24udG94LXRidG4tLWRpc2FibGVkIHN2ZyAjdG94LWljb24tdGV4dC1jb2xvcl9fY29sb3IsXFxuLnRveCAudG94LXNwbGl0LWJ1dHRvbi50b3gtdGJ0bi0tZGlzYWJsZWQgc3ZnICN0b3gtaWNvbi1oaWdobGlnaHQtYmctY29sb3JfX2NvbG9yIHtcXG4gIG9wYWNpdHk6IDAuNjtcXG59XFxuLnRveCAudG94LXRvb2xiYXItb3ZlcmxvcmQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG59XFxuLnRveCAudG94LXRvb2xiYXIsXFxuLnRveCAudG94LXRvb2xiYXJfX3ByaW1hcnksXFxuLnRveCAudG94LXRvb2xiYXJfX292ZXJmbG93IHtcXG4gIGJhY2tncm91bmQtYXR0YWNobWVudDogbG9jYWw7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgjZTNlM2UzIDBweCAxcHgsIHRyYW5zcGFyZW50IDFweCAzOXB4KTtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciB0b3AgNDBweDtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXNpemU6IGNhbGMoMTAwJSAtIDExcHggKiAyKSBjYWxjKDEwMCUgLSA0MXB4KTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4OiAwIDAgYXV0bztcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgcGFkZGluZzogMCAwcHg7XFxuICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDFweCk7XFxufVxcbi50b3ggLnRveC10b29sYmFyLW92ZXJsb3JkID4gLnRveC10b29sYmFyLFxcbi50b3ggLnRveC10b29sYmFyLW92ZXJsb3JkID4gLnRveC10b29sYmFyX19wcmltYXJ5LFxcbi50b3ggLnRveC10b29sYmFyLW92ZXJsb3JkID4gLnRveC10b29sYmFyX19vdmVyZmxvdyB7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgdG9wIDBweDtcXG4gIGJhY2tncm91bmQtc2l6ZTogY2FsYygxMDAlIC0gMTFweCAqIDIpIGNhbGMoMTAwJSAtIDBweCk7XFxufVxcbi50b3ggLnRveC10b29sYmFyX19vdmVyZmxvdy50b3gtdG9vbGJhcl9fb3ZlcmZsb3ctLWNsb3NlZCB7XFxuICBoZWlnaHQ6IDA7XFxuICBvcGFjaXR5OiAwO1xcbiAgcGFkZGluZy1ib3R0b206IDA7XFxuICBwYWRkaW5nLXRvcDogMDtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuLnRveCAudG94LXRvb2xiYXJfX292ZXJmbG93LS1ncm93aW5nIHtcXG4gIHRyYW5zaXRpb246IGhlaWdodCAwLjNzIGVhc2UsIG9wYWNpdHkgMC4ycyBsaW5lYXIgMC4xcztcXG59XFxuLnRveCAudG94LXRvb2xiYXJfX292ZXJmbG93LS1zaHJpbmtpbmcge1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2UsIGhlaWdodCAwLjJzIGxpbmVhciAwLjFzLCB2aXNpYmlsaXR5IDBzIGxpbmVhciAwLjNzO1xcbn1cXG4udG94IC50b3gtdG9vbGJhci1vdmVybG9yZCxcXG4udG94IC50b3gtYW5jaG9yYmFyIHtcXG4gIGdyaWQtY29sdW1uOiAxIC8gLTE7XFxufVxcbi50b3ggLnRveC1tZW51YmFyICsgLnRveC10b29sYmFyLFxcbi50b3ggLnRveC1tZW51YmFyICsgLnRveC10b29sYmFyLW92ZXJsb3JkIHtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIG1hcmdpbi10b3A6IC0xcHg7XFxuICBwYWRkaW5nLWJvdHRvbTogMXB4O1xcbiAgcGFkZGluZy10b3A6IDFweDtcXG59XFxuLnRveCAudG94LXRvb2xiYXItLXNjcm9sbGluZyB7XFxuICBmbGV4LXdyYXA6IG5vd3JhcDtcXG4gIG92ZXJmbG93LXg6IGF1dG87XFxufVxcbi50b3ggLnRveC1wb3AgLnRveC10b29sYmFyIHtcXG4gIGJvcmRlci13aWR0aDogMDtcXG59XFxuLnRveCAudG94LXRvb2xiYXItLW5vLWRpdmlkZXIge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcXG59XFxuLnRveCAudG94LXRvb2xiYXItb3ZlcmxvcmQgLnRveC10b29sYmFyOm5vdCgudG94LXRvb2xiYXItLXNjcm9sbGluZyk6Zmlyc3QtY2hpbGQsXFxuLnRveCAudG94LXRvb2xiYXItb3ZlcmxvcmQgLnRveC10b29sYmFyX19wcmltYXJ5IHtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciB0b3AgMzlweDtcXG59XFxuLnRveCAudG94LWVkaXRvci1oZWFkZXIgPiAudG94LXRvb2xiYXItLXNjcm9sbGluZyxcXG4udG94IC50b3gtdG9vbGJhci1vdmVybG9yZCAudG94LXRvb2xiYXItLXNjcm9sbGluZzpmaXJzdC1jaGlsZCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xcbn1cXG4udG94LnRveC10aW55bWNlLWF1eCAudG94LXRvb2xiYXJfX292ZXJmbG93IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgdG9wIDQzcHg7XFxuICBiYWNrZ3JvdW5kLXNpemU6IGNhbGMoMTAwJSAtIDhweCAqIDIpIGNhbGMoMTAwJSAtIDUxcHgpO1xcbiAgYm9yZGVyOiBub25lO1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgYm94LXNoYWRvdzogMCAwIDJweCAwIHJnYmEoMzQsIDQ3LCA2MiwgMC4yKSwgMCA0cHggOHB4IDAgcmdiYSgzNCwgNDcsIDYyLCAwLjE1KTtcXG4gIG92ZXJzY3JvbGwtYmVoYXZpb3I6IG5vbmU7XFxuICBwYWRkaW5nOiA0cHggMDtcXG59XFxuLnRveC1wb3AgLnRveC1wb3BfX2RpYWxvZyB7XFxuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZGVzY2VuZGluZy1zcGVjaWZpY2l0eSAqL1xcbn1cXG4udG94LXBvcCAudG94LXBvcF9fZGlhbG9nIC50b3gtdG9vbGJhciB7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgdG9wIDQzcHg7XFxuICBiYWNrZ3JvdW5kLXNpemU6IGNhbGMoMTAwJSAtIDExcHggKiAyKSBjYWxjKDEwMCUgLSA1MXB4KTtcXG4gIHBhZGRpbmc6IDRweCAwO1xcbn1cXG4udG94IC50b3gtdG9vbGJhcl9fZ3JvdXAge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LXdyYXA6IHdyYXA7XFxuICBtYXJnaW46IDAgMDtcXG4gIHBhZGRpbmc6IDAgMTFweCAwIDEycHg7XFxufVxcbi50b3ggLnRveC10b29sYmFyX19ncm91cC0tcHVsbC1yaWdodCB7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG59XFxuLnRveCAudG94LXRvb2xiYXItLXNjcm9sbGluZyAudG94LXRvb2xiYXJfX2dyb3VwIHtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAgZmxleC13cmFwOiBub3dyYXA7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC10b29sYmFyX19ncm91cDpub3QoOmxhc3Qtb2YtdHlwZSkge1xcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC10b29sYmFyX19ncm91cDpub3QoOmxhc3Qtb2YtdHlwZSkge1xcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuLnRveCAudG94LXRvb2x0aXAge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcGFkZGluZzogOHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4udG94IC50b3gtdG9vbHRpcF9fYm9keSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyZjNlO1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMzQsIDQ3LCA2MiwgMC4zKTtcXG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG4gIHBhZGRpbmc6IDRweCA4cHg7XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG59XFxuLnRveCAudG94LXRvb2x0aXBfX2Fycm93IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuLnRveCAudG94LXRvb2x0aXAtLWRvd24gLnRveC10b29sdGlwX19hcnJvdyB7XFxuICBib3JkZXItbGVmdDogOHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJpZ2h0OiA4cHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItdG9wOiA4cHggc29saWQgIzIyMmYzZTtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDUwJTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcXG59XFxuLnRveCAudG94LXRvb2x0aXAtLXVwIC50b3gtdG9vbHRpcF9fYXJyb3cge1xcbiAgYm9yZGVyLWJvdHRvbTogOHB4IHNvbGlkICMyMjJmM2U7XFxuICBib3JkZXItbGVmdDogOHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJpZ2h0OiA4cHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBsZWZ0OiA1MCU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XFxufVxcbi50b3ggLnRveC10b29sdGlwLS1yaWdodCAudG94LXRvb2x0aXBfX2Fycm93IHtcXG4gIGJvcmRlci1ib3R0b206IDhweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1sZWZ0OiA4cHggc29saWQgIzIyMmYzZTtcXG4gIGJvcmRlci10b3A6IDhweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAwO1xcbiAgdG9wOiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxufVxcbi50b3ggLnRveC10b29sdGlwLS1sZWZ0IC50b3gtdG9vbHRpcF9fYXJyb3cge1xcbiAgYm9yZGVyLWJvdHRvbTogOHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJpZ2h0OiA4cHggc29saWQgIzIyMmYzZTtcXG4gIGJvcmRlci10b3A6IDhweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGxlZnQ6IDA7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDUwJTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcXG59XFxuLnRveCAudG94LXRyZWUge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxufVxcbi50b3ggLnRveC10cmVlIC50b3gtdHJidG4ge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiAjMjIyZjNlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXg6IDAgMCBhdXRvO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG4gIGhlaWdodDogMjhweDtcXG4gIG1hcmdpbi1ib3R0b206IDRweDtcXG4gIG1hcmdpbi10b3A6IDRweDtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgcGFkZGluZzogMDtcXG4gIHBhZGRpbmctbGVmdDogOHB4O1xcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XFxufVxcbi50b3ggLnRveC10cmVlIC50b3gtdHJidG4gLnRveC10cmVlX19sYWJlbCB7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG4udG94IC50b3gtdHJlZSAudG94LXRyYnRuIHN2ZyB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGZpbGw6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC10cmVlIC50b3gtdHJidG46Zm9jdXMge1xcbiAgYmFja2dyb3VuZDogI2NjZTJmYTtcXG4gIGJvcmRlcjogMDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxufVxcbi50b3ggLnRveC10cmVlIC50b3gtdHJidG46aG92ZXIge1xcbiAgYmFja2dyb3VuZDogI2NjZTJmYTtcXG4gIGJvcmRlcjogMDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LXRyZWUgLnRveC10cmJ0bjpob3ZlciBzdmcge1xcbiAgZmlsbDogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LXRyZWUgLnRveC10cmJ0bjphY3RpdmUge1xcbiAgYmFja2dyb3VuZDogI2E2Y2NmNztcXG4gIGJvcmRlcjogMDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LXRyZWUgLnRveC10cmJ0bjphY3RpdmUgc3ZnIHtcXG4gIGZpbGw6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC10cmVlIC50b3gtdHJidG4tLWRpc2FibGVkLFxcbi50b3ggLnRveC10cmVlIC50b3gtdHJidG4tLWRpc2FibGVkOmhvdmVyLFxcbi50b3ggLnRveC10cmVlIC50b3gtdHJidG46ZGlzYWJsZWQsXFxuLnRveCAudG94LXRyZWUgLnRveC10cmJ0bjpkaXNhYmxlZDpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogcmdiYSgzNCwgNDcsIDYyLCAwLjUpO1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuLnRveCAudG94LXRyZWUgLnRveC10cmJ0bi0tZGlzYWJsZWQgc3ZnLFxcbi50b3ggLnRveC10cmVlIC50b3gtdHJidG4tLWRpc2FibGVkOmhvdmVyIHN2ZyxcXG4udG94IC50b3gtdHJlZSAudG94LXRyYnRuOmRpc2FibGVkIHN2ZyxcXG4udG94IC50b3gtdHJlZSAudG94LXRyYnRuOmRpc2FibGVkOmhvdmVyIHN2ZyB7XFxuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIG5vLWRlc2NlbmRpbmctc3BlY2lmaWNpdHkgKi9cXG4gIGZpbGw6IHJnYmEoMzQsIDQ3LCA2MiwgMC41KTtcXG59XFxuLnRveCAudG94LXRyZWUgLnRveC10cmJ0bi0tZW5hYmxlZCxcXG4udG94IC50b3gtdHJlZSAudG94LXRyYnRuLS1lbmFibGVkOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6ICNhNmNjZjc7XFxuICBib3JkZXI6IDA7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC10cmVlIC50b3gtdHJidG4tLWVuYWJsZWQgPiAqLFxcbi50b3ggLnRveC10cmVlIC50b3gtdHJidG4tLWVuYWJsZWQ6aG92ZXIgPiAqIHtcXG4gIHRyYW5zZm9ybTogbm9uZTtcXG59XFxuLnRveCAudG94LXRyZWUgLnRveC10cmJ0bi0tZW5hYmxlZCBzdmcsXFxuLnRveCAudG94LXRyZWUgLnRveC10cmJ0bi0tZW5hYmxlZDpob3ZlciBzdmcge1xcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbGluZSBuby1kZXNjZW5kaW5nLXNwZWNpZmljaXR5ICovXFxuICBmaWxsOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtdHJlZSAudG94LXRyYnRuOmZvY3VzOm5vdCgudG94LXRyYnRuLS1kaXNhYmxlZCkge1xcbiAgY29sb3I6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC10cmVlIC50b3gtdHJidG46Zm9jdXM6bm90KC50b3gtdHJidG4tLWRpc2FibGVkKSBzdmcge1xcbiAgZmlsbDogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LXRyZWUgLnRveC10cmJ0bjphY3RpdmUgPiAqIHtcXG4gIHRyYW5zZm9ybTogbm9uZTtcXG59XFxuLnRveCAudG94LXRyZWUgLnRveC10cmJ0bi0tcmV0dXJuIHtcXG4gIGFsaWduLXNlbGY6IHN0cmV0Y2g7XFxuICBoZWlnaHQ6IHVuc2V0O1xcbiAgd2lkdGg6IDE2cHg7XFxufVxcbi50b3ggLnRveC10cmVlIC50b3gtdHJidG4tLWxhYmVsZWQge1xcbiAgcGFkZGluZzogMCA0cHg7XFxuICB3aWR0aDogdW5zZXQ7XFxufVxcbi50b3ggLnRveC10cmVlIC50b3gtdHJidG5fX3ZsYWJlbCB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGZvbnQtc2l6ZTogMTBweDtcXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XFxuICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07XFxuICBtYXJnaW4tYm90dG9tOiA0cHg7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG4udG94IC50b3gtdHJlZSAudG94LXRyZWUtLWRpcmVjdG9yeSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIC8qIHN0eWxlbGludC1kaXNhYmxlIG5vLWRlc2NlbmRpbmctc3BlY2lmaWNpdHkgKi9cXG59XFxuLnRveCAudG94LXRyZWUgLnRveC10cmVlLS1kaXJlY3RvcnkgLnRveC10cmVlLS1kaXJlY3RvcnlfX2xhYmVsIHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbn1cXG4udG94IC50b3gtdHJlZSAudG94LXRyZWUtLWRpcmVjdG9yeSAudG94LXRyZWUtLWRpcmVjdG9yeV9fbGFiZWwgLnRveC1tYnRuIHtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbn1cXG4udG94IC50b3gtdHJlZSAudG94LXRyZWUtLWRpcmVjdG9yeSAudG94LXRyZWUtLWRpcmVjdG9yeV9fbGFiZWwgLnRveC1tYnRuIHN2ZyB7XFxuICBmaWxsOiB0cmFuc3BhcmVudDtcXG59XFxuLnRveCAudG94LXRyZWUgLnRveC10cmVlLS1kaXJlY3RvcnkgLnRveC10cmVlLS1kaXJlY3RvcnlfX2xhYmVsIC50b3gtbWJ0bi50b3gtbWJ0bi0tYWN0aXZlIHN2ZyxcXG4udG94IC50b3gtdHJlZSAudG94LXRyZWUtLWRpcmVjdG9yeSAudG94LXRyZWUtLWRpcmVjdG9yeV9fbGFiZWwgLnRveC1tYnRuOmZvY3VzIHN2ZyB7XFxuICBmaWxsOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtdHJlZSAudG94LXRyZWUtLWRpcmVjdG9yeSAudG94LXRyZWUtLWRpcmVjdG9yeV9fbGFiZWw6aG92ZXIgLnRveC1tYnRuIHN2ZyxcXG4udG94IC50b3gtdHJlZSAudG94LXRyZWUtLWRpcmVjdG9yeSAudG94LXRyZWUtLWRpcmVjdG9yeV9fbGFiZWw6Zm9jdXMgLnRveC1tYnRuIHN2ZyB7XFxuICBmaWxsOiAjMjIyZjNlO1xcbn1cXG4udG94IC50b3gtdHJlZSAudG94LXRyZWUtLWRpcmVjdG9yeSAudG94LXRyZWUtLWRpcmVjdG9yeV9fbGFiZWw6aG92ZXI6aGFzKC50b3gtbWJ0bjpob3Zlcikge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBjb2xvcjogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LXRyZWUgLnRveC10cmVlLS1kaXJlY3RvcnkgLnRveC10cmVlLS1kaXJlY3RvcnlfX2xhYmVsOmhvdmVyOmhhcygudG94LW1idG46aG92ZXIpIC50b3gtY2hldnJvbiBzdmcge1xcbiAgZmlsbDogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LXRyZWUgLnRveC10cmVlLS1kaXJlY3RvcnkgLnRveC10cmVlLS1kaXJlY3RvcnlfX2xhYmVsIC50b3gtY2hldnJvbiB7XFxuICBtYXJnaW4tcmlnaHQ6IDZweDtcXG59XFxuLnRveCAudG94LXRyZWUgLnRveC10cmVlLS1kaXJlY3RvcnkgLnRveC10cmVlLS1kaXJlY3RvcnlfX2xhYmVsOmhhcygrIC50b3gtdHJlZS0tZGlyZWN0b3J5X19jaGlsZHJlbi0tZ3Jvd2luZykgLnRveC1jaGV2cm9uLFxcbi50b3ggLnRveC10cmVlIC50b3gtdHJlZS0tZGlyZWN0b3J5IC50b3gtdHJlZS0tZGlyZWN0b3J5X19sYWJlbDpoYXMoKyAudG94LXRyZWUtLWRpcmVjdG9yeV9fY2hpbGRyZW4tLXNocmlua2luZykgLnRveC1jaGV2cm9uIHtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjVzIGVhc2UtaW4tb3V0O1xcbn1cXG4udG94IC50b3gtdHJlZSAudG94LXRyZWUtLWRpcmVjdG9yeSAudG94LXRyZWUtLWRpcmVjdG9yeV9fbGFiZWw6aGFzKCsgLnRveC10cmVlLS1kaXJlY3RvcnlfX2NoaWxkcmVuLS1ncm93aW5nKSAudG94LWNoZXZyb24sXFxuLnRveCAudG94LXRyZWUgLnRveC10cmVlLS1kaXJlY3RvcnkgLnRveC10cmVlLS1kaXJlY3RvcnlfX2xhYmVsOmhhcygrIC50b3gtdHJlZS0tZGlyZWN0b3J5X19jaGlsZHJlbi0tb3BlbikgLnRveC1jaGV2cm9uIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcXG59XFxuLnRveCAudG94LXRyZWUgLnRveC10cmVlLS1sZWFmX19sYWJlbCB7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbn1cXG4udG94IC50b3gtdHJlZSAudG94LXRyZWUtLWxlYWZfX2xhYmVsIC50b3gtbWJ0biB7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG59XFxuLnRveCAudG94LXRyZWUgLnRveC10cmVlLS1sZWFmX19sYWJlbCAudG94LW1idG4gc3ZnIHtcXG4gIGZpbGw6IHRyYW5zcGFyZW50O1xcbn1cXG4udG94IC50b3gtdHJlZSAudG94LXRyZWUtLWxlYWZfX2xhYmVsIC50b3gtbWJ0bi50b3gtbWJ0bi0tYWN0aXZlIHN2ZyxcXG4udG94IC50b3gtdHJlZSAudG94LXRyZWUtLWxlYWZfX2xhYmVsIC50b3gtbWJ0bjpmb2N1cyBzdmcge1xcbiAgZmlsbDogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LXRyZWUgLnRveC10cmVlLS1sZWFmX19sYWJlbDpob3ZlciAudG94LW1idG4gc3ZnIHtcXG4gIGZpbGw6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC10cmVlIC50b3gtdHJlZS0tbGVhZl9fbGFiZWw6aG92ZXI6aGFzKC50b3gtbWJ0bjpob3Zlcikge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBjb2xvcjogIzIyMmYzZTtcXG59XFxuLnRveCAudG94LXRyZWUgLnRveC10cmVlLS1sZWFmX19sYWJlbDpob3ZlcjpoYXMoLnRveC1tYnRuOmhvdmVyKSAudG94LWNoZXZyb24gc3ZnIHtcXG4gIGZpbGw6ICMyMjJmM2U7XFxufVxcbi50b3ggLnRveC10cmVlIC50b3gtdHJlZS0tZGlyZWN0b3J5X19jaGlsZHJlbiB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgcGFkZGluZy1sZWZ0OiAxNnB4O1xcbn1cXG4udG94IC50b3gtdHJlZSAudG94LXRyZWUtLWRpcmVjdG9yeV9fY2hpbGRyZW4udG94LXRyZWUtLWRpcmVjdG9yeV9fY2hpbGRyZW4tLWdyb3dpbmcsXFxuLnRveCAudG94LXRyZWUgLnRveC10cmVlLS1kaXJlY3RvcnlfX2NoaWxkcmVuLnRveC10cmVlLS1kaXJlY3RvcnlfX2NoaWxkcmVuLS1zaHJpbmtpbmcge1xcbiAgdHJhbnNpdGlvbjogaGVpZ2h0IDAuNXMgZWFzZS1pbi1vdXQ7XFxufVxcbi50b3ggLnRveC10cmVlIC50b3gtdHJidG4udG94LXRyZWUtLWxlYWZfX2xhYmVsIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxufVxcbi50b3ggLnRveC12aWV3LXdyYXAsXFxuLnRveCAudG94LXZpZXctd3JhcF9fc2xvdC1jb250YWluZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4OiAxO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG59XFxuLnRveCAudG94LXZpZXcge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXg6IDEgMSBhdXRvO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi50b3ggLnRveC12aWV3X19oZWFkZXIge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICBwYWRkaW5nOiA4cHggOHB4IDAgOHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4udG94IC50b3gtdmlldy0tbW9iaWxlLnRveC12aWV3X19oZWFkZXIsXFxuLnRveCAudG94LXZpZXctLW1vYmlsZS50b3gtdmlld19fdG9vbGJhciB7XFxuICBwYWRkaW5nOiA4cHg7XFxufVxcbi50b3ggLnRveC12aWV3LS1zY3JvbGxpbmcge1xcbiAgZmxleC13cmFwOiBub3dyYXA7XFxuICBvdmVyZmxvdy14OiBhdXRvO1xcbn1cXG4udG94IC50b3gtdmlld19fdG9vbGJhciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGdhcDogOHB4O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgcGFkZGluZzogOHB4IDhweCAwIDhweDtcXG59XFxuLnRveCAudG94LXZpZXdfX3Rvb2xiYXJfX2dyb3VwIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgZ2FwOiAxMnB4O1xcbn1cXG4udG94IC50b3gtdmlld19faGVhZGVyLXN0YXJ0LFxcbi50b3ggLnRveC12aWV3X19oZWFkZXItZW5kIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcbi50b3ggLnRveC12aWV3X19wYW5lIHtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHBhZGRpbmc6IDhweDtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4udG94IC50b3gtdmlld19fcGFuZV9wYW5lbCB7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZWVlZWVlO1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtdmlld19faGVhZGVyIC50b3gtdmlld19faGVhZGVyLXN0YXJ0ID4gKixcXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtdmlld19faGVhZGVyIC50b3gtdmlld19faGVhZGVyLWVuZCA+ICoge1xcbiAgbWFyZ2luLWxlZnQ6IDhweDtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LXZpZXdfX2hlYWRlciAudG94LXZpZXdfX2hlYWRlci1zdGFydCA+ICosXFxuLnRveFtkaXI9cnRsXSAudG94LXZpZXdfX2hlYWRlciAudG94LXZpZXdfX2hlYWRlci1lbmQgPiAqIHtcXG4gIG1hcmdpbi1yaWdodDogOHB4O1xcbn1cXG4udG94IC50b3gtd2VsbCB7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZWVlZWVlO1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgcGFkZGluZzogOHB4O1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcbi50b3ggLnRveC13ZWxsID4gKjpmaXJzdC1jaGlsZCB7XFxuICBtYXJnaW4tdG9wOiAwO1xcbn1cXG4udG94IC50b3gtd2VsbCA+ICo6bGFzdC1jaGlsZCB7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG4udG94IC50b3gtd2VsbCA+ICo6b25seS1jaGlsZCB7XFxuICBtYXJnaW46IDA7XFxufVxcbi50b3ggLnRveC1jdXN0b20tZWRpdG9yIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNlZWVlZWU7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleDogMTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi8qIHN0eWxlbGludC1kaXNhYmxlICovXFxuLnRveCB7XFxuICAvKiBzdHlsZWxpbnQtZW5hYmxlICovXFxufVxcbi50b3ggLnRveC1kaWFsb2ctbG9hZGluZzo6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICB6LWluZGV4OiAxMDAwO1xcbn1cXG4udG94IC50b3gtdGFiIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fY29udGVudC1qcyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleDogMTtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC50b3gtY29sbGVjdGlvbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleDogMTtcXG59XFxuXCI7IChyZXF1aXJlKFwiYnJvd3NlcmlmeS1jc3NcIikuY3JlYXRlU3R5bGUoY3NzLCB7IFwiaHJlZlwiOiBcIm5vZGVfbW9kdWxlcy90aW55bWNlL3NraW5zL3VpL294aWRlL3NraW4uY3NzXCIgfSwgeyBcImluc2VydEF0XCI6IFwiYm90dG9tXCIgfSkpOyBtb2R1bGUuZXhwb3J0cyA9IGNzczsiLCIvLyBFeHBvcnRzIHRoZSBcInNpbHZlclwiIHRoZW1lIGZvciB1c2FnZSB3aXRoIG1vZHVsZSBsb2FkZXJzXG4vLyBVc2FnZTpcbi8vICAgQ29tbW9uSlM6XG4vLyAgICAgcmVxdWlyZSgndGlueW1jZS90aGVtZXMvc2lsdmVyJylcbi8vICAgRVMyMDE1OlxuLy8gICAgIGltcG9ydCAndGlueW1jZS90aGVtZXMvc2lsdmVyJ1xucmVxdWlyZSgnLi90aGVtZS5qcycpOyIsIi8qKlxuICogVGlueU1DRSB2ZXJzaW9uIDYuNy4wICgyMDIzLTA4LTMwKVxuICovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgY29uc3QgZ2V0UHJvdG90eXBlT2YkMiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgICBjb25zdCBoYXNQcm90byA9ICh2LCBjb25zdHJ1Y3RvciwgcHJlZGljYXRlKSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBpZiAocHJlZGljYXRlKHYsIGNvbnN0cnVjdG9yLnByb3RvdHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKChfYSA9IHYuY29uc3RydWN0b3IpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5uYW1lKSA9PT0gY29uc3RydWN0b3IubmFtZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHR5cGVPZiA9IHggPT4ge1xuICAgICAgY29uc3QgdCA9IHR5cGVvZiB4O1xuICAgICAgaWYgKHggPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICAgIH0gZWxzZSBpZiAodCA9PT0gJ29iamVjdCcgJiYgQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgICByZXR1cm4gJ2FycmF5JztcbiAgICAgIH0gZWxzZSBpZiAodCA9PT0gJ29iamVjdCcgJiYgaGFzUHJvdG8oeCwgU3RyaW5nLCAobywgcHJvdG8pID0+IHByb3RvLmlzUHJvdG90eXBlT2YobykpKSB7XG4gICAgICAgIHJldHVybiAnc3RyaW5nJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0O1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNUeXBlJDEgPSB0eXBlID0+IHZhbHVlID0+IHR5cGVPZih2YWx1ZSkgPT09IHR5cGU7XG4gICAgY29uc3QgaXNTaW1wbGVUeXBlID0gdHlwZSA9PiB2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09IHR5cGU7XG4gICAgY29uc3QgZXEkMSA9IHQgPT4gYSA9PiB0ID09PSBhO1xuICAgIGNvbnN0IGlzJDIgPSAodmFsdWUsIGNvbnN0cnVjdG9yKSA9PiBpc09iamVjdCh2YWx1ZSkgJiYgaGFzUHJvdG8odmFsdWUsIGNvbnN0cnVjdG9yLCAobywgcHJvdG8pID0+IGdldFByb3RvdHlwZU9mJDIobykgPT09IHByb3RvKTtcbiAgICBjb25zdCBpc1N0cmluZyA9IGlzVHlwZSQxKCdzdHJpbmcnKTtcbiAgICBjb25zdCBpc09iamVjdCA9IGlzVHlwZSQxKCdvYmplY3QnKTtcbiAgICBjb25zdCBpc1BsYWluT2JqZWN0ID0gdmFsdWUgPT4gaXMkMih2YWx1ZSwgT2JqZWN0KTtcbiAgICBjb25zdCBpc0FycmF5ID0gaXNUeXBlJDEoJ2FycmF5Jyk7XG4gICAgY29uc3QgaXNOdWxsID0gZXEkMShudWxsKTtcbiAgICBjb25zdCBpc0Jvb2xlYW4gPSBpc1NpbXBsZVR5cGUoJ2Jvb2xlYW4nKTtcbiAgICBjb25zdCBpc1VuZGVmaW5lZCA9IGVxJDEodW5kZWZpbmVkKTtcbiAgICBjb25zdCBpc051bGxhYmxlID0gYSA9PiBhID09PSBudWxsIHx8IGEgPT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpc05vbk51bGxhYmxlID0gYSA9PiAhaXNOdWxsYWJsZShhKTtcbiAgICBjb25zdCBpc0Z1bmN0aW9uID0gaXNTaW1wbGVUeXBlKCdmdW5jdGlvbicpO1xuICAgIGNvbnN0IGlzTnVtYmVyID0gaXNTaW1wbGVUeXBlKCdudW1iZXInKTtcbiAgICBjb25zdCBpc0FycmF5T2YgPSAodmFsdWUsIHByZWQpID0+IHtcbiAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdmFsdWUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICBpZiAoIXByZWQodmFsdWVbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICBjb25zdCBub29wID0gKCkgPT4ge1xuICAgIH07XG4gICAgY29uc3Qgbm9hcmcgPSBmID0+ICgpID0+IGYoKTtcbiAgICBjb25zdCBjb21wb3NlID0gKGZhLCBmYikgPT4ge1xuICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHJldHVybiBmYShmYi5hcHBseShudWxsLCBhcmdzKSk7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgY29tcG9zZTEgPSAoZmJjLCBmYWIpID0+IGEgPT4gZmJjKGZhYihhKSk7XG4gICAgY29uc3QgY29uc3RhbnQkMSA9IHZhbHVlID0+IHtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBpZGVudGl0eSA9IHggPT4ge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgICBjb25zdCB0cmlwbGVFcXVhbHMgPSAoYSwgYikgPT4ge1xuICAgICAgcmV0dXJuIGEgPT09IGI7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBjdXJyeShmbiwgLi4uaW5pdGlhbEFyZ3MpIHtcbiAgICAgIHJldHVybiAoLi4ucmVzdEFyZ3MpID0+IHtcbiAgICAgICAgY29uc3QgYWxsID0gaW5pdGlhbEFyZ3MuY29uY2F0KHJlc3RBcmdzKTtcbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIGFsbCk7XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBub3QgPSBmID0+IHQgPT4gIWYodCk7XG4gICAgY29uc3QgZGllID0gbXNnID0+IHtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5JDEgPSBmID0+IHtcbiAgICAgIHJldHVybiBmKCk7XG4gICAgfTtcbiAgICBjb25zdCBuZXZlciA9IGNvbnN0YW50JDEoZmFsc2UpO1xuICAgIGNvbnN0IGFsd2F5cyA9IGNvbnN0YW50JDEodHJ1ZSk7XG5cbiAgICBjbGFzcyBPcHRpb25hbCB7XG4gICAgICBjb25zdHJ1Y3Rvcih0YWcsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMudGFnID0gdGFnO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgICBzdGF0aWMgc29tZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IE9wdGlvbmFsKHRydWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHN0YXRpYyBub25lKCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc2luZ2xldG9uTm9uZTtcbiAgICAgIH1cbiAgICAgIGZvbGQob25Ob25lLCBvblNvbWUpIHtcbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgcmV0dXJuIG9uU29tZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb25Ob25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlzU29tZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnO1xuICAgICAgfVxuICAgICAgaXNOb25lKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudGFnO1xuICAgICAgfVxuICAgICAgbWFwKG1hcHBlcikge1xuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShtYXBwZXIodGhpcy52YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJpbmQoYmluZGVyKSB7XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgIHJldHVybiBiaW5kZXIodGhpcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXhpc3RzKHByZWRpY2F0ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgJiYgcHJlZGljYXRlKHRoaXMudmFsdWUpO1xuICAgICAgfVxuICAgICAgZm9yYWxsKHByZWRpY2F0ZSkge1xuICAgICAgICByZXR1cm4gIXRoaXMudGFnIHx8IHByZWRpY2F0ZSh0aGlzLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZpbHRlcihwcmVkaWNhdGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhZyB8fCBwcmVkaWNhdGUodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBnZXRPcihyZXBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzLnZhbHVlIDogcmVwbGFjZW1lbnQ7XG4gICAgICB9XG4gICAgICBvcihyZXBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzIDogcmVwbGFjZW1lbnQ7XG4gICAgICB9XG4gICAgICBnZXRPclRodW5rKHRodW5rKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMudmFsdWUgOiB0aHVuaygpO1xuICAgICAgfVxuICAgICAgb3JUaHVuayh0aHVuaykge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzIDogdGh1bmsoKTtcbiAgICAgIH1cbiAgICAgIGdldE9yRGllKG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhZykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlICE9PSBudWxsICYmIG1lc3NhZ2UgIT09IHZvaWQgMCA/IG1lc3NhZ2UgOiAnQ2FsbGVkIGdldE9yRGllIG9uIE5vbmUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RhdGljIGZyb20odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUodmFsdWUpID8gT3B0aW9uYWwuc29tZSh2YWx1ZSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICBnZXRPck51bGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMudmFsdWUgOiBudWxsO1xuICAgICAgfVxuICAgICAgZ2V0T3JVbmRlZmluZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgICAgfVxuICAgICAgZWFjaCh3b3JrZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgd29ya2VyKHRoaXMudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0b0FycmF5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyBbdGhpcy52YWx1ZV0gOiBbXTtcbiAgICAgIH1cbiAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyBgc29tZSgkeyB0aGlzLnZhbHVlIH0pYCA6ICdub25lKCknO1xuICAgICAgfVxuICAgIH1cbiAgICBPcHRpb25hbC5zaW5nbGV0b25Ob25lID0gbmV3IE9wdGlvbmFsKGZhbHNlKTtcblxuICAgIGNvbnN0IG5hdGl2ZVNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuICAgIGNvbnN0IG5hdGl2ZUluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbiAgICBjb25zdCBuYXRpdmVQdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7XG4gICAgY29uc3QgcmF3SW5kZXhPZiA9ICh0cywgdCkgPT4gbmF0aXZlSW5kZXhPZi5jYWxsKHRzLCB0KTtcbiAgICBjb25zdCBpbmRleE9mID0gKHhzLCB4KSA9PiB7XG4gICAgICBjb25zdCByID0gcmF3SW5kZXhPZih4cywgeCk7XG4gICAgICByZXR1cm4gciA9PT0gLTEgPyBPcHRpb25hbC5ub25lKCkgOiBPcHRpb25hbC5zb21lKHIpO1xuICAgIH07XG4gICAgY29uc3QgY29udGFpbnMkMiA9ICh4cywgeCkgPT4gcmF3SW5kZXhPZih4cywgeCkgPiAtMTtcbiAgICBjb25zdCBleGlzdHMgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IHJhbmdlJDIgPSAobnVtLCBmKSA9PiB7XG4gICAgICBjb25zdCByID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bTsgaSsrKSB7XG4gICAgICAgIHIucHVzaChmKGkpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3QgY2h1bmskMSA9IChhcnJheSwgc2l6ZSkgPT4ge1xuICAgICAgY29uc3QgciA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkgKz0gc2l6ZSkge1xuICAgICAgICBjb25zdCBzID0gbmF0aXZlU2xpY2UuY2FsbChhcnJheSwgaSwgaSArIHNpemUpO1xuICAgICAgICByLnB1c2gocyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IG1hcCQyID0gKHhzLCBmKSA9PiB7XG4gICAgICBjb25zdCBsZW4gPSB4cy5sZW5ndGg7XG4gICAgICBjb25zdCByID0gbmV3IEFycmF5KGxlbik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgcltpXSA9IGYoeCwgaSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IGVhY2gkMSA9ICh4cywgZikgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgZih4LCBpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGVhY2hyID0gKHhzLCBmKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0geHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgeCA9IHhzW2ldO1xuICAgICAgICBmKHgsIGkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcGFydGl0aW9uJDMgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGNvbnN0IHBhc3MgPSBbXTtcbiAgICAgIGNvbnN0IGZhaWwgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGNvbnN0IGFyciA9IHByZWQoeCwgaSkgPyBwYXNzIDogZmFpbDtcbiAgICAgICAgYXJyLnB1c2goeCk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXNzLFxuICAgICAgICBmYWlsXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZmlsdGVyJDIgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpKSB7XG4gICAgICAgICAgci5wdXNoKHgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IGZvbGRyID0gKHhzLCBmLCBhY2MpID0+IHtcbiAgICAgIGVhY2hyKHhzLCAoeCwgaSkgPT4ge1xuICAgICAgICBhY2MgPSBmKGFjYywgeCwgaSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfTtcbiAgICBjb25zdCBmb2xkbCA9ICh4cywgZiwgYWNjKSA9PiB7XG4gICAgICBlYWNoJDEoeHMsICh4LCBpKSA9PiB7XG4gICAgICAgIGFjYyA9IGYoYWNjLCB4LCBpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRVbnRpbCA9ICh4cywgcHJlZCwgdW50aWwpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoeCk7XG4gICAgICAgIH0gZWxzZSBpZiAodW50aWwoeCwgaSkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmQkNSA9ICh4cywgcHJlZCkgPT4ge1xuICAgICAgcmV0dXJuIGZpbmRVbnRpbCh4cywgcHJlZCwgbmV2ZXIpO1xuICAgIH07XG4gICAgY29uc3QgZmluZEluZGV4JDEgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoaSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBmbGF0dGVuID0geHMgPT4ge1xuICAgICAgY29uc3QgciA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgIGlmICghaXNBcnJheSh4c1tpXSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Fyci5mbGF0dGVuIGl0ZW0gJyArIGkgKyAnIHdhcyBub3QgYW4gYXJyYXksIGlucHV0OiAnICsgeHMpO1xuICAgICAgICB9XG4gICAgICAgIG5hdGl2ZVB1c2guYXBwbHkociwgeHNbaV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBiaW5kJDMgPSAoeHMsIGYpID0+IGZsYXR0ZW4obWFwJDIoeHMsIGYpKTtcbiAgICBjb25zdCBmb3JhbGwgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpICE9PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIGNvbnN0IHJldmVyc2UgPSB4cyA9PiB7XG4gICAgICBjb25zdCByID0gbmF0aXZlU2xpY2UuY2FsbCh4cywgMCk7XG4gICAgICByLnJldmVyc2UoKTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IChhMSwgYTIpID0+IGZpbHRlciQyKGExLCB4ID0+ICFjb250YWlucyQyKGEyLCB4KSk7XG4gICAgY29uc3QgbWFwVG9PYmplY3QgPSAoeHMsIGYpID0+IHtcbiAgICAgIGNvbnN0IHIgPSB7fTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIHJbU3RyaW5nKHgpXSA9IGYoeCwgaSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IHB1cmUkMiA9IHggPT4gW3hdO1xuICAgIGNvbnN0IHNvcnQgPSAoeHMsIGNvbXBhcmF0b3IpID0+IHtcbiAgICAgIGNvbnN0IGNvcHkgPSBuYXRpdmVTbGljZS5jYWxsKHhzLCAwKTtcbiAgICAgIGNvcHkuc29ydChjb21wYXJhdG9yKTtcbiAgICAgIHJldHVybiBjb3B5O1xuICAgIH07XG4gICAgY29uc3QgZ2V0JGggPSAoeHMsIGkpID0+IGkgPj0gMCAmJiBpIDwgeHMubGVuZ3RoID8gT3B0aW9uYWwuc29tZSh4c1tpXSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgY29uc3QgaGVhZCA9IHhzID0+IGdldCRoKHhzLCAwKTtcbiAgICBjb25zdCBsYXN0JDEgPSB4cyA9PiBnZXQkaCh4cywgeHMubGVuZ3RoIC0gMSk7XG4gICAgY29uc3QgZnJvbSA9IGlzRnVuY3Rpb24oQXJyYXkuZnJvbSkgPyBBcnJheS5mcm9tIDogeCA9PiBuYXRpdmVTbGljZS5jYWxsKHgpO1xuICAgIGNvbnN0IGZpbmRNYXAgPSAoYXJyLCBmKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByID0gZihhcnJbaV0sIGkpO1xuICAgICAgICBpZiAoci5pc1NvbWUoKSkge1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG5cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgY29uc3QgaGFzT3duUHJvcGVydHkkMSA9IE9iamVjdC5oYXNPd25Qcm9wZXJ0eTtcbiAgICBjb25zdCBlYWNoID0gKG9iaiwgZikgPT4ge1xuICAgICAgY29uc3QgcHJvcHMgPSBrZXlzKG9iaik7XG4gICAgICBmb3IgKGxldCBrID0gMCwgbGVuID0gcHJvcHMubGVuZ3RoOyBrIDwgbGVuOyBrKyspIHtcbiAgICAgICAgY29uc3QgaSA9IHByb3BzW2tdO1xuICAgICAgICBjb25zdCB4ID0gb2JqW2ldO1xuICAgICAgICBmKHgsIGkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbWFwJDEgPSAob2JqLCBmKSA9PiB7XG4gICAgICByZXR1cm4gdHVwbGVNYXAob2JqLCAoeCwgaSkgPT4gKHtcbiAgICAgICAgazogaSxcbiAgICAgICAgdjogZih4LCBpKVxuICAgICAgfSkpO1xuICAgIH07XG4gICAgY29uc3QgdHVwbGVNYXAgPSAob2JqLCBmKSA9PiB7XG4gICAgICBjb25zdCByID0ge307XG4gICAgICBlYWNoKG9iaiwgKHgsIGkpID0+IHtcbiAgICAgICAgY29uc3QgdHVwbGUgPSBmKHgsIGkpO1xuICAgICAgICByW3R1cGxlLmtdID0gdHVwbGUudjtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBvYmpBY2MgPSByID0+ICh4LCBpKSA9PiB7XG4gICAgICByW2ldID0geDtcbiAgICB9O1xuICAgIGNvbnN0IGludGVybmFsRmlsdGVyID0gKG9iaiwgcHJlZCwgb25UcnVlLCBvbkZhbHNlKSA9PiB7XG4gICAgICBlYWNoKG9iaiwgKHgsIGkpID0+IHtcbiAgICAgICAgKHByZWQoeCwgaSkgPyBvblRydWUgOiBvbkZhbHNlKSh4LCBpKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYmlmaWx0ZXIgPSAob2JqLCBwcmVkKSA9PiB7XG4gICAgICBjb25zdCB0ID0ge307XG4gICAgICBjb25zdCBmID0ge307XG4gICAgICBpbnRlcm5hbEZpbHRlcihvYmosIHByZWQsIG9iakFjYyh0KSwgb2JqQWNjKGYpKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHQsXG4gICAgICAgIGZcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXIkMSA9IChvYmosIHByZWQpID0+IHtcbiAgICAgIGNvbnN0IHQgPSB7fTtcbiAgICAgIGludGVybmFsRmlsdGVyKG9iaiwgcHJlZCwgb2JqQWNjKHQpLCBub29wKTtcbiAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgY29uc3QgbWFwVG9BcnJheSA9IChvYmosIGYpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgIGVhY2gob2JqLCAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgci5wdXNoKGYodmFsdWUsIG5hbWUpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kJDQgPSAob2JqLCBwcmVkKSA9PiB7XG4gICAgICBjb25zdCBwcm9wcyA9IGtleXMob2JqKTtcbiAgICAgIGZvciAobGV0IGsgPSAwLCBsZW4gPSBwcm9wcy5sZW5ndGg7IGsgPCBsZW47IGsrKykge1xuICAgICAgICBjb25zdCBpID0gcHJvcHNba107XG4gICAgICAgIGNvbnN0IHggPSBvYmpbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGksIG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IHZhbHVlcyA9IG9iaiA9PiB7XG4gICAgICByZXR1cm4gbWFwVG9BcnJheShvYmosIGlkZW50aXR5KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldCRnID0gKG9iaiwga2V5KSA9PiB7XG4gICAgICByZXR1cm4gaGFzJDIob2JqLCBrZXkpID8gT3B0aW9uYWwuZnJvbShvYmpba2V5XSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBoYXMkMiA9IChvYmosIGtleSkgPT4gaGFzT3duUHJvcGVydHkkMS5jYWxsKG9iaiwga2V5KTtcbiAgICBjb25zdCBoYXNOb25OdWxsYWJsZUtleSA9IChvYmosIGtleSkgPT4gaGFzJDIob2JqLCBrZXkpICYmIG9ialtrZXldICE9PSB1bmRlZmluZWQgJiYgb2JqW2tleV0gIT09IG51bGw7XG5cbiAgICBjb25zdCBpcyQxID0gKGxocywgcmhzLCBjb21wYXJhdG9yID0gdHJpcGxlRXF1YWxzKSA9PiBsaHMuZXhpc3RzKGxlZnQgPT4gY29tcGFyYXRvcihsZWZ0LCByaHMpKTtcbiAgICBjb25zdCBlcXVhbHMgPSAobGhzLCByaHMsIGNvbXBhcmF0b3IgPSB0cmlwbGVFcXVhbHMpID0+IGxpZnQyKGxocywgcmhzLCBjb21wYXJhdG9yKS5nZXRPcihsaHMuaXNOb25lKCkgJiYgcmhzLmlzTm9uZSgpKTtcbiAgICBjb25zdCBjYXQgPSBhcnIgPT4ge1xuICAgICAgY29uc3QgciA9IFtdO1xuICAgICAgY29uc3QgcHVzaCA9IHggPT4ge1xuICAgICAgICByLnB1c2goeCk7XG4gICAgICB9O1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXJyW2ldLmVhY2gocHVzaCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IHNlcXVlbmNlID0gYXJyID0+IHtcbiAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSBhcnJbaV07XG4gICAgICAgIGlmICh4LmlzU29tZSgpKSB7XG4gICAgICAgICAgci5wdXNoKHguZ2V0T3JEaWUoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUocik7XG4gICAgfTtcbiAgICBjb25zdCBsaWZ0MiA9IChvYSwgb2IsIGYpID0+IG9hLmlzU29tZSgpICYmIG9iLmlzU29tZSgpID8gT3B0aW9uYWwuc29tZShmKG9hLmdldE9yRGllKCksIG9iLmdldE9yRGllKCkpKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICBjb25zdCBsaWZ0MyA9IChvYSwgb2IsIG9jLCBmKSA9PiBvYS5pc1NvbWUoKSAmJiBvYi5pc1NvbWUoKSAmJiBvYy5pc1NvbWUoKSA/IE9wdGlvbmFsLnNvbWUoZihvYS5nZXRPckRpZSgpLCBvYi5nZXRPckRpZSgpLCBvYy5nZXRPckRpZSgpKSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgY29uc3QgbWFwRnJvbSA9IChhLCBmKSA9PiBhICE9PSB1bmRlZmluZWQgJiYgYSAhPT0gbnVsbCA/IE9wdGlvbmFsLnNvbWUoZihhKSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgY29uc3Qgc29tZUlmID0gKGIsIGEpID0+IGIgPyBPcHRpb25hbC5zb21lKGEpIDogT3B0aW9uYWwubm9uZSgpO1xuXG4gICAgY29uc3QgYWRkVG9FbmQgPSAoc3RyLCBzdWZmaXgpID0+IHtcbiAgICAgIHJldHVybiBzdHIgKyBzdWZmaXg7XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVGcm9tU3RhcnQgPSAoc3RyLCBudW1DaGFycykgPT4ge1xuICAgICAgcmV0dXJuIHN0ci5zdWJzdHJpbmcobnVtQ2hhcnMpO1xuICAgIH07XG5cbiAgICBjb25zdCBjaGVja1JhbmdlID0gKHN0ciwgc3Vic3RyLCBzdGFydCkgPT4gc3Vic3RyID09PSAnJyB8fCBzdHIubGVuZ3RoID49IHN1YnN0ci5sZW5ndGggJiYgc3RyLnN1YnN0cihzdGFydCwgc3RhcnQgKyBzdWJzdHIubGVuZ3RoKSA9PT0gc3Vic3RyO1xuICAgIGNvbnN0IHJlbW92ZUxlYWRpbmcgPSAoc3RyLCBwcmVmaXgpID0+IHtcbiAgICAgIHJldHVybiBzdGFydHNXaXRoKHN0ciwgcHJlZml4KSA/IHJlbW92ZUZyb21TdGFydChzdHIsIHByZWZpeC5sZW5ndGgpIDogc3RyO1xuICAgIH07XG4gICAgY29uc3QgZW5zdXJlVHJhaWxpbmcgPSAoc3RyLCBzdWZmaXgpID0+IHtcbiAgICAgIHJldHVybiBlbmRzV2l0aChzdHIsIHN1ZmZpeCkgPyBzdHIgOiBhZGRUb0VuZChzdHIsIHN1ZmZpeCk7XG4gICAgfTtcbiAgICBjb25zdCBjb250YWlucyQxID0gKHN0ciwgc3Vic3RyLCBzdGFydCA9IDAsIGVuZCkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gc3RyLmluZGV4T2Yoc3Vic3RyLCBzdGFydCk7XG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gaXNVbmRlZmluZWQoZW5kKSA/IHRydWUgOiBpZHggKyBzdWJzdHIubGVuZ3RoIDw9IGVuZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHN0YXJ0c1dpdGggPSAoc3RyLCBwcmVmaXgpID0+IHtcbiAgICAgIHJldHVybiBjaGVja1JhbmdlKHN0ciwgcHJlZml4LCAwKTtcbiAgICB9O1xuICAgIGNvbnN0IGVuZHNXaXRoID0gKHN0ciwgc3VmZml4KSA9PiB7XG4gICAgICByZXR1cm4gY2hlY2tSYW5nZShzdHIsIHN1ZmZpeCwgc3RyLmxlbmd0aCAtIHN1ZmZpeC5sZW5ndGgpO1xuICAgIH07XG4gICAgY29uc3QgYmxhbmsgPSByID0+IHMgPT4gcy5yZXBsYWNlKHIsICcnKTtcbiAgICBjb25zdCB0cmltJDEgPSBibGFuaygvXlxccyt8XFxzKyQvZyk7XG4gICAgY29uc3QgaXNOb3RFbXB0eSA9IHMgPT4gcy5sZW5ndGggPiAwO1xuICAgIGNvbnN0IGlzRW1wdHkgPSBzID0+ICFpc05vdEVtcHR5KHMpO1xuXG4gICAgY29uc3QgaXNTdXBwb3J0ZWQkMSA9IGRvbSA9PiBkb20uc3R5bGUgIT09IHVuZGVmaW5lZCAmJiBpc0Z1bmN0aW9uKGRvbS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKTtcblxuICAgIGNvbnN0IGZyb21IdG1sJDIgPSAoaHRtbCwgc2NvcGUpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IHNjb3BlIHx8IGRvY3VtZW50O1xuICAgICAgY29uc3QgZGl2ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZGl2LmlubmVySFRNTCA9IGh0bWw7XG4gICAgICBpZiAoIWRpdi5oYXNDaGlsZE5vZGVzKCkgfHwgZGl2LmNoaWxkTm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gJ0hUTUwgZG9lcyBub3QgaGF2ZSBhIHNpbmdsZSByb290IG5vZGUnO1xuICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UsIGh0bWwpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnJvbURvbShkaXYuY2hpbGROb2Rlc1swXSk7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tVGFnID0gKHRhZywgc2NvcGUpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IHNjb3BlIHx8IGRvY3VtZW50O1xuICAgICAgY29uc3Qgbm9kZSA9IGRvYy5jcmVhdGVFbGVtZW50KHRhZyk7XG4gICAgICByZXR1cm4gZnJvbURvbShub2RlKTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21UZXh0ID0gKHRleHQsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBzY29wZSB8fCBkb2N1bWVudDtcbiAgICAgIGNvbnN0IG5vZGUgPSBkb2MuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG4gICAgICByZXR1cm4gZnJvbURvbShub2RlKTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21Eb20gPSBub2RlID0+IHtcbiAgICAgIGlmIChub2RlID09PSBudWxsIHx8IG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vZGUgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBkb206IG5vZGUgfTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21Qb2ludCA9IChkb2NFbG0sIHgsIHkpID0+IE9wdGlvbmFsLmZyb20oZG9jRWxtLmRvbS5lbGVtZW50RnJvbVBvaW50KHgsIHkpKS5tYXAoZnJvbURvbSk7XG4gICAgY29uc3QgU3VnYXJFbGVtZW50ID0ge1xuICAgICAgZnJvbUh0bWw6IGZyb21IdG1sJDIsXG4gICAgICBmcm9tVGFnLFxuICAgICAgZnJvbVRleHQsXG4gICAgICBmcm9tRG9tLFxuICAgICAgZnJvbVBvaW50XG4gICAgfTtcblxuICAgIGNvbnN0IEdsb2JhbCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogRnVuY3Rpb24oJ3JldHVybiB0aGlzOycpKCk7XG5cbiAgICBjb25zdCBwYXRoJDEgPSAocGFydHMsIHNjb3BlKSA9PiB7XG4gICAgICBsZXQgbyA9IHNjb3BlICE9PSB1bmRlZmluZWQgJiYgc2NvcGUgIT09IG51bGwgPyBzY29wZSA6IEdsb2JhbDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoICYmIG8gIT09IHVuZGVmaW5lZCAmJiBvICE9PSBudWxsOyArK2kpIHtcbiAgICAgICAgbyA9IG9bcGFydHNbaV1dO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICBjb25zdCByZXNvbHZlID0gKHAsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHAuc3BsaXQoJy4nKTtcbiAgICAgIHJldHVybiBwYXRoJDEocGFydHMsIHNjb3BlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgdW5zYWZlID0gKG5hbWUsIHNjb3BlKSA9PiB7XG4gICAgICByZXR1cm4gcmVzb2x2ZShuYW1lLCBzY29wZSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRPckRpZSQxID0gKG5hbWUsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBhY3R1YWwgPSB1bnNhZmUobmFtZSwgc2NvcGUpO1xuICAgICAgaWYgKGFjdHVhbCA9PT0gdW5kZWZpbmVkIHx8IGFjdHVhbCA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobmFtZSArICcgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGJyb3dzZXInKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY3R1YWw7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldFByb3RvdHlwZU9mJDEgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gICAgY29uc3Qgc2FuZEhUTUxFbGVtZW50ID0gc2NvcGUgPT4ge1xuICAgICAgcmV0dXJuIGdldE9yRGllJDEoJ0hUTUxFbGVtZW50Jywgc2NvcGUpO1xuICAgIH07XG4gICAgY29uc3QgaXNQcm90b3R5cGVPZiA9IHggPT4ge1xuICAgICAgY29uc3Qgc2NvcGUgPSByZXNvbHZlKCdvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3JywgeCk7XG4gICAgICByZXR1cm4gaXNPYmplY3QoeCkgJiYgKHNhbmRIVE1MRWxlbWVudChzY29wZSkucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoeCkgfHwgL15IVE1MXFx3KkVsZW1lbnQkLy50ZXN0KGdldFByb3RvdHlwZU9mJDEoeCkuY29uc3RydWN0b3IubmFtZSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBET0NVTUVOVCA9IDk7XG4gICAgY29uc3QgRE9DVU1FTlRfRlJBR01FTlQgPSAxMTtcbiAgICBjb25zdCBFTEVNRU5UID0gMTtcbiAgICBjb25zdCBURVhUID0gMztcblxuICAgIGNvbnN0IG5hbWUkMyA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgciA9IGVsZW1lbnQuZG9tLm5vZGVOYW1lO1xuICAgICAgcmV0dXJuIHIudG9Mb3dlckNhc2UoKTtcbiAgICB9O1xuICAgIGNvbnN0IHR5cGUkMSA9IGVsZW1lbnQgPT4gZWxlbWVudC5kb20ubm9kZVR5cGU7XG4gICAgY29uc3QgaXNUeXBlID0gdCA9PiBlbGVtZW50ID0+IHR5cGUkMShlbGVtZW50KSA9PT0gdDtcbiAgICBjb25zdCBpc0hUTUxFbGVtZW50ID0gZWxlbWVudCA9PiBpc0VsZW1lbnQkMShlbGVtZW50KSAmJiBpc1Byb3RvdHlwZU9mKGVsZW1lbnQuZG9tKTtcbiAgICBjb25zdCBpc0VsZW1lbnQkMSA9IGlzVHlwZShFTEVNRU5UKTtcbiAgICBjb25zdCBpc1RleHQgPSBpc1R5cGUoVEVYVCk7XG4gICAgY29uc3QgaXNEb2N1bWVudCA9IGlzVHlwZShET0NVTUVOVCk7XG4gICAgY29uc3QgaXNEb2N1bWVudEZyYWdtZW50ID0gaXNUeXBlKERPQ1VNRU5UX0ZSQUdNRU5UKTtcbiAgICBjb25zdCBpc1RhZyA9IHRhZyA9PiBlID0+IGlzRWxlbWVudCQxKGUpICYmIG5hbWUkMyhlKSA9PT0gdGFnO1xuXG4gICAgY29uc3QgaXMgPSAoZWxlbWVudCwgc2VsZWN0b3IpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgaWYgKGRvbS5ub2RlVHlwZSAhPT0gRUxFTUVOVCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlbGVtID0gZG9tO1xuICAgICAgICBpZiAoZWxlbS5tYXRjaGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbS5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtLm1zTWF0Y2hlc1NlbGVjdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbS5tc01hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBlbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBlbGVtLm1vek1hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdCcm93c2VyIGxhY2tzIG5hdGl2ZSBzZWxlY3RvcnMnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYnlwYXNzU2VsZWN0b3IgPSBkb20gPT4gZG9tLm5vZGVUeXBlICE9PSBFTEVNRU5UICYmIGRvbS5ub2RlVHlwZSAhPT0gRE9DVU1FTlQgJiYgZG9tLm5vZGVUeXBlICE9PSBET0NVTUVOVF9GUkFHTUVOVCB8fCBkb20uY2hpbGRFbGVtZW50Q291bnQgPT09IDA7XG4gICAgY29uc3QgYWxsJDMgPSAoc2VsZWN0b3IsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBiYXNlID0gc2NvcGUgPT09IHVuZGVmaW5lZCA/IGRvY3VtZW50IDogc2NvcGUuZG9tO1xuICAgICAgcmV0dXJuIGJ5cGFzc1NlbGVjdG9yKGJhc2UpID8gW10gOiBtYXAkMihiYXNlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpLCBTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgfTtcbiAgICBjb25zdCBvbmUgPSAoc2VsZWN0b3IsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBiYXNlID0gc2NvcGUgPT09IHVuZGVmaW5lZCA/IGRvY3VtZW50IDogc2NvcGUuZG9tO1xuICAgICAgcmV0dXJuIGJ5cGFzc1NlbGVjdG9yKGJhc2UpID8gT3B0aW9uYWwubm9uZSgpIDogT3B0aW9uYWwuZnJvbShiYXNlLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpKS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIH07XG5cbiAgICBjb25zdCBlcSA9IChlMSwgZTIpID0+IGUxLmRvbSA9PT0gZTIuZG9tO1xuICAgIGNvbnN0IGNvbnRhaW5zID0gKGUxLCBlMikgPT4ge1xuICAgICAgY29uc3QgZDEgPSBlMS5kb207XG4gICAgICBjb25zdCBkMiA9IGUyLmRvbTtcbiAgICAgIHJldHVybiBkMSA9PT0gZDIgPyBmYWxzZSA6IGQxLmNvbnRhaW5zKGQyKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb3duZXIkNCA9IGVsZW1lbnQgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20oZWxlbWVudC5kb20ub3duZXJEb2N1bWVudCk7XG4gICAgY29uc3QgZG9jdW1lbnRPck93bmVyID0gZG9zID0+IGlzRG9jdW1lbnQoZG9zKSA/IGRvcyA6IG93bmVyJDQoZG9zKTtcbiAgICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBlbGVtZW50ID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGRvY3VtZW50T3JPd25lcihlbGVtZW50KS5kb20uZG9jdW1lbnRFbGVtZW50KTtcbiAgICBjb25zdCBkZWZhdWx0VmlldyA9IGVsZW1lbnQgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20oZG9jdW1lbnRPck93bmVyKGVsZW1lbnQpLmRvbS5kZWZhdWx0Vmlldyk7XG4gICAgY29uc3QgcGFyZW50ID0gZWxlbWVudCA9PiBPcHRpb25hbC5mcm9tKGVsZW1lbnQuZG9tLnBhcmVudE5vZGUpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IGVsZW1lbnQgPT4gcGFyZW50KGVsZW1lbnQpO1xuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBlbGVtZW50ID0+IE9wdGlvbmFsLmZyb20oZWxlbWVudC5kb20ucGFyZW50RWxlbWVudCkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBwYXJlbnRzID0gKGVsZW1lbnQsIGlzUm9vdCkgPT4ge1xuICAgICAgY29uc3Qgc3RvcCA9IGlzRnVuY3Rpb24oaXNSb290KSA/IGlzUm9vdCA6IG5ldmVyO1xuICAgICAgbGV0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgY29uc3QgcmV0ID0gW107XG4gICAgICB3aGlsZSAoZG9tLnBhcmVudE5vZGUgIT09IG51bGwgJiYgZG9tLnBhcmVudE5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCByYXdQYXJlbnQgPSBkb20ucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgcCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJhd1BhcmVudCk7XG4gICAgICAgIHJldC5wdXNoKHApO1xuICAgICAgICBpZiAoc3RvcChwKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbSA9IHJhd1BhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9O1xuICAgIGNvbnN0IG9mZnNldFBhcmVudCA9IGVsZW1lbnQgPT4gT3B0aW9uYWwuZnJvbShlbGVtZW50LmRvbS5vZmZzZXRQYXJlbnQpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgY29uc3QgbmV4dFNpYmxpbmcgPSBlbGVtZW50ID0+IE9wdGlvbmFsLmZyb20oZWxlbWVudC5kb20ubmV4dFNpYmxpbmcpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBlbGVtZW50ID0+IG1hcCQyKGVsZW1lbnQuZG9tLmNoaWxkTm9kZXMsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBjaGlsZCQyID0gKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBjcyA9IGVsZW1lbnQuZG9tLmNoaWxkTm9kZXM7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShjc1tpbmRleF0pLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJzdENoaWxkID0gZWxlbWVudCA9PiBjaGlsZCQyKGVsZW1lbnQsIDApO1xuICAgIGNvbnN0IHNwb3QgPSAoZWxlbWVudCwgb2Zmc2V0KSA9PiAoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIG9mZnNldFxuICAgIH0pO1xuICAgIGNvbnN0IGxlYWYgPSAoZWxlbWVudCwgb2Zmc2V0KSA9PiB7XG4gICAgICBjb25zdCBjcyA9IGNoaWxkcmVuKGVsZW1lbnQpO1xuICAgICAgcmV0dXJuIGNzLmxlbmd0aCA+IDAgJiYgb2Zmc2V0IDwgY3MubGVuZ3RoID8gc3BvdChjc1tvZmZzZXRdLCAwKSA6IHNwb3QoZWxlbWVudCwgb2Zmc2V0KTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNTaGFkb3dSb290ID0gZG9zID0+IGlzRG9jdW1lbnRGcmFnbWVudChkb3MpICYmIGlzTm9uTnVsbGFibGUoZG9zLmRvbS5ob3N0KTtcbiAgICBjb25zdCBzdXBwb3J0ZWQgPSBpc0Z1bmN0aW9uKEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvdykgJiYgaXNGdW5jdGlvbihOb2RlLnByb3RvdHlwZS5nZXRSb290Tm9kZSk7XG4gICAgY29uc3QgaXNTdXBwb3J0ZWQgPSBjb25zdGFudCQxKHN1cHBvcnRlZCk7XG4gICAgY29uc3QgZ2V0Um9vdE5vZGUgPSBzdXBwb3J0ZWQgPyBlID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGUuZG9tLmdldFJvb3ROb2RlKCkpIDogZG9jdW1lbnRPck93bmVyO1xuICAgIGNvbnN0IGdldENvbnRlbnRDb250YWluZXIgPSBkb3MgPT4gaXNTaGFkb3dSb290KGRvcykgPyBkb3MgOiBTdWdhckVsZW1lbnQuZnJvbURvbShkb2N1bWVudE9yT3duZXIoZG9zKS5kb20uYm9keSk7XG4gICAgY29uc3QgaXNJblNoYWRvd1Jvb3QgPSBlID0+IGdldFNoYWRvd1Jvb3QoZSkuaXNTb21lKCk7XG4gICAgY29uc3QgZ2V0U2hhZG93Um9vdCA9IGUgPT4ge1xuICAgICAgY29uc3QgciA9IGdldFJvb3ROb2RlKGUpO1xuICAgICAgcmV0dXJuIGlzU2hhZG93Um9vdChyKSA/IE9wdGlvbmFsLnNvbWUocikgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRTaGFkb3dIb3N0ID0gZSA9PiBTdWdhckVsZW1lbnQuZnJvbURvbShlLmRvbS5ob3N0KTtcbiAgICBjb25zdCBnZXRPcmlnaW5hbEV2ZW50VGFyZ2V0ID0gZXZlbnQgPT4ge1xuICAgICAgaWYgKGlzU3VwcG9ydGVkKCkgJiYgaXNOb25OdWxsYWJsZShldmVudC50YXJnZXQpKSB7XG4gICAgICAgIGNvbnN0IGVsID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgaWYgKGlzRWxlbWVudCQxKGVsKSAmJiBpc09wZW5TaGFkb3dIb3N0KGVsKSkge1xuICAgICAgICAgIGlmIChldmVudC5jb21wb3NlZCAmJiBldmVudC5jb21wb3NlZFBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvc2VkUGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuICAgICAgICAgICAgaWYgKGNvbXBvc2VkUGF0aCkge1xuICAgICAgICAgICAgICByZXR1cm4gaGVhZChjb21wb3NlZFBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oZXZlbnQudGFyZ2V0KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzT3BlblNoYWRvd0hvc3QgPSBlbGVtZW50ID0+IGlzTm9uTnVsbGFibGUoZWxlbWVudC5kb20uc2hhZG93Um9vdCk7XG5cbiAgICBjb25zdCBpbkJvZHkgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGlzVGV4dChlbGVtZW50KSA/IGVsZW1lbnQuZG9tLnBhcmVudE5vZGUgOiBlbGVtZW50LmRvbTtcbiAgICAgIGlmIChkb20gPT09IHVuZGVmaW5lZCB8fCBkb20gPT09IG51bGwgfHwgZG9tLm93bmVyRG9jdW1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgZG9jID0gZG9tLm93bmVyRG9jdW1lbnQ7XG4gICAgICByZXR1cm4gZ2V0U2hhZG93Um9vdChTdWdhckVsZW1lbnQuZnJvbURvbShkb20pKS5mb2xkKCgpID0+IGRvYy5ib2R5LmNvbnRhaW5zKGRvbSksIGNvbXBvc2UxKGluQm9keSwgZ2V0U2hhZG93SG9zdCkpO1xuICAgIH07XG4gICAgY29uc3QgYm9keSA9ICgpID0+IGdldEJvZHkoU3VnYXJFbGVtZW50LmZyb21Eb20oZG9jdW1lbnQpKTtcbiAgICBjb25zdCBnZXRCb2R5ID0gZG9jID0+IHtcbiAgICAgIGNvbnN0IGIgPSBkb2MuZG9tLmJvZHk7XG4gICAgICBpZiAoYiA9PT0gbnVsbCB8fCBiID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdCb2R5IGlzIG5vdCBhdmFpbGFibGUgeWV0Jyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gU3VnYXJFbGVtZW50LmZyb21Eb20oYik7XG4gICAgfTtcblxuICAgIGNvbnN0IHJhd1NldCA9IChkb20sIGtleSwgdmFsdWUpID0+IHtcbiAgICAgIGlmIChpc1N0cmluZyh2YWx1ZSkgfHwgaXNCb29sZWFuKHZhbHVlKSB8fCBpc051bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlICsgJycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBjYWxsIHRvIEF0dHJpYnV0ZS5zZXQuIEtleSAnLCBrZXksICc6OiBWYWx1ZSAnLCB2YWx1ZSwgJzo6IEVsZW1lbnQgJywgZG9tKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRyaWJ1dGUgdmFsdWUgd2FzIG5vdCBzaW1wbGUnKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldCQ5ID0gKGVsZW1lbnQsIGtleSwgdmFsdWUpID0+IHtcbiAgICAgIHJhd1NldChlbGVtZW50LmRvbSwga2V5LCB2YWx1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRBbGwkMSA9IChlbGVtZW50LCBhdHRycykgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBlYWNoKGF0dHJzLCAodiwgaykgPT4ge1xuICAgICAgICByYXdTZXQoZG9tLCBrLCB2KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0JGYgPSAoZWxlbWVudCwga2V5KSA9PiB7XG4gICAgICBjb25zdCB2ID0gZWxlbWVudC5kb20uZ2V0QXR0cmlidXRlKGtleSk7XG4gICAgICByZXR1cm4gdiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHY7XG4gICAgfTtcbiAgICBjb25zdCBnZXRPcHQgPSAoZWxlbWVudCwga2V5KSA9PiBPcHRpb25hbC5mcm9tKGdldCRmKGVsZW1lbnQsIGtleSkpO1xuICAgIGNvbnN0IGhhcyQxID0gKGVsZW1lbnQsIGtleSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICByZXR1cm4gZG9tICYmIGRvbS5oYXNBdHRyaWJ1dGUgPyBkb20uaGFzQXR0cmlidXRlKGtleSkgOiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSQ3ID0gKGVsZW1lbnQsIGtleSkgPT4ge1xuICAgICAgZWxlbWVudC5kb20ucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgfTtcbiAgICBjb25zdCBjbG9uZSQyID0gZWxlbWVudCA9PiBmb2xkbChlbGVtZW50LmRvbS5hdHRyaWJ1dGVzLCAoYWNjLCBhdHRyKSA9PiB7XG4gICAgICBhY2NbYXR0ci5uYW1lXSA9IGF0dHIudmFsdWU7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICAgIGNvbnN0IGludGVybmFsU2V0ID0gKGRvbSwgcHJvcGVydHksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIGNhbGwgdG8gQ1NTLnNldC4gUHJvcGVydHkgJywgcHJvcGVydHksICc6OiBWYWx1ZSAnLCB2YWx1ZSwgJzo6IEVsZW1lbnQgJywgZG9tKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDU1MgdmFsdWUgbXVzdCBiZSBhIHN0cmluZzogJyArIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1N1cHBvcnRlZCQxKGRvbSkpIHtcbiAgICAgICAgZG9tLnN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbnRlcm5hbFJlbW92ZSA9IChkb20sIHByb3BlcnR5KSA9PiB7XG4gICAgICBpZiAoaXNTdXBwb3J0ZWQkMShkb20pKSB7XG4gICAgICAgIGRvbS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXQkOCA9IChlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgaW50ZXJuYWxTZXQoZG9tLCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0QWxsID0gKGVsZW1lbnQsIGNzcykgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBlYWNoKGNzcywgKHYsIGspID0+IHtcbiAgICAgICAgaW50ZXJuYWxTZXQoZG9tLCBrLCB2KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2V0T3B0aW9ucyA9IChlbGVtZW50LCBjc3MpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgZWFjaChjc3MsICh2LCBrKSA9PiB7XG4gICAgICAgIHYuZm9sZCgoKSA9PiB7XG4gICAgICAgICAgaW50ZXJuYWxSZW1vdmUoZG9tLCBrKTtcbiAgICAgICAgfSwgdmFsdWUgPT4ge1xuICAgICAgICAgIGludGVybmFsU2V0KGRvbSwgaywgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0JGUgPSAoZWxlbWVudCwgcHJvcGVydHkpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgY29uc3Qgc3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9tKTtcbiAgICAgIGNvbnN0IHIgPSBzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eSk7XG4gICAgICByZXR1cm4gciA9PT0gJycgJiYgIWluQm9keShlbGVtZW50KSA/IGdldFVuc2FmZVByb3BlcnR5KGRvbSwgcHJvcGVydHkpIDogcjtcbiAgICB9O1xuICAgIGNvbnN0IGdldFVuc2FmZVByb3BlcnR5ID0gKGRvbSwgcHJvcGVydHkpID0+IGlzU3VwcG9ydGVkJDEoZG9tKSA/IGRvbS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KSA6ICcnO1xuICAgIGNvbnN0IGdldFJhdyA9IChlbGVtZW50LCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBjb25zdCByYXcgPSBnZXRVbnNhZmVQcm9wZXJ0eShkb20sIHByb3BlcnR5KTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKHJhdykuZmlsdGVyKHIgPT4gci5sZW5ndGggPiAwKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEFsbFJhdyA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgY3NzID0ge307XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGlmIChpc1N1cHBvcnRlZCQxKGRvbSkpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb20uc3R5bGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBydWxlTmFtZSA9IGRvbS5zdHlsZS5pdGVtKGkpO1xuICAgICAgICAgIGNzc1tydWxlTmFtZV0gPSBkb20uc3R5bGVbcnVsZU5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY3NzO1xuICAgIH07XG4gICAgY29uc3QgaXNWYWxpZFZhbHVlJDEgPSAodGFnLCBwcm9wZXJ0eSwgdmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBTdWdhckVsZW1lbnQuZnJvbVRhZyh0YWcpO1xuICAgICAgc2V0JDgoZWxlbWVudCwgcHJvcGVydHksIHZhbHVlKTtcbiAgICAgIGNvbnN0IHN0eWxlID0gZ2V0UmF3KGVsZW1lbnQsIHByb3BlcnR5KTtcbiAgICAgIHJldHVybiBzdHlsZS5pc1NvbWUoKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSQ2ID0gKGVsZW1lbnQsIHByb3BlcnR5KSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGludGVybmFsUmVtb3ZlKGRvbSwgcHJvcGVydHkpO1xuICAgICAgaWYgKGlzJDEoZ2V0T3B0KGVsZW1lbnQsICdzdHlsZScpLm1hcCh0cmltJDEpLCAnJykpIHtcbiAgICAgICAgcmVtb3ZlJDcoZWxlbWVudCwgJ3N0eWxlJyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZWZsb3cgPSBlID0+IGUuZG9tLm9mZnNldFdpZHRoO1xuXG4gICAgY29uc3QgRGltZW5zaW9uID0gKG5hbWUsIGdldE9mZnNldCkgPT4ge1xuICAgICAgY29uc3Qgc2V0ID0gKGVsZW1lbnQsIGgpID0+IHtcbiAgICAgICAgaWYgKCFpc051bWJlcihoKSAmJiAhaC5tYXRjaCgvXlswLTldKyQvKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihuYW1lICsgJy5zZXQgYWNjZXB0cyBvbmx5IHBvc2l0aXZlIGludGVnZXIgdmFsdWVzLiBWYWx1ZSB3YXMgJyArIGgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgICBpZiAoaXNTdXBwb3J0ZWQkMShkb20pKSB7XG4gICAgICAgICAgZG9tLnN0eWxlW25hbWVdID0gaCArICdweCc7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBnZXQgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgY29uc3QgciA9IGdldE9mZnNldChlbGVtZW50KTtcbiAgICAgICAgaWYgKHIgPD0gMCB8fCByID09PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgY3NzID0gZ2V0JGUoZWxlbWVudCwgbmFtZSk7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoY3NzKSB8fCAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldE91dGVyID0gZ2V0O1xuICAgICAgY29uc3QgYWdncmVnYXRlID0gKGVsZW1lbnQsIHByb3BlcnRpZXMpID0+IGZvbGRsKHByb3BlcnRpZXMsIChhY2MsIHByb3BlcnR5KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IGdldCRlKGVsZW1lbnQsIHByb3BlcnR5KTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB2YWwgPT09IHVuZGVmaW5lZCA/IDAgOiBwYXJzZUludCh2YWwsIDEwKTtcbiAgICAgICAgcmV0dXJuIGlzTmFOKHZhbHVlKSA/IGFjYyA6IGFjYyArIHZhbHVlO1xuICAgICAgfSwgMCk7XG4gICAgICBjb25zdCBtYXggPSAoZWxlbWVudCwgdmFsdWUsIHByb3BlcnRpZXMpID0+IHtcbiAgICAgICAgY29uc3QgY3VtdWxhdGl2ZUluY2x1c2lvbnMgPSBhZ2dyZWdhdGUoZWxlbWVudCwgcHJvcGVydGllcyk7XG4gICAgICAgIGNvbnN0IGFic29sdXRlTWF4ID0gdmFsdWUgPiBjdW11bGF0aXZlSW5jbHVzaW9ucyA/IHZhbHVlIC0gY3VtdWxhdGl2ZUluY2x1c2lvbnMgOiAwO1xuICAgICAgICByZXR1cm4gYWJzb2x1dGVNYXg7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0LFxuICAgICAgICBnZXQsXG4gICAgICAgIGdldE91dGVyLFxuICAgICAgICBhZ2dyZWdhdGUsXG4gICAgICAgIG1heFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgYXBpJDIgPSBEaW1lbnNpb24oJ2hlaWdodCcsIGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICByZXR1cm4gaW5Cb2R5KGVsZW1lbnQpID8gZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCA6IGRvbS5vZmZzZXRIZWlnaHQ7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0JGQgPSBlbGVtZW50ID0+IGFwaSQyLmdldChlbGVtZW50KTtcbiAgICBjb25zdCBnZXRPdXRlciQyID0gZWxlbWVudCA9PiBhcGkkMi5nZXRPdXRlcihlbGVtZW50KTtcbiAgICBjb25zdCBzZXRNYXgkMSA9IChlbGVtZW50LCB2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgaW5jbHVzaW9ucyA9IFtcbiAgICAgICAgJ21hcmdpbi10b3AnLFxuICAgICAgICAnYm9yZGVyLXRvcC13aWR0aCcsXG4gICAgICAgICdwYWRkaW5nLXRvcCcsXG4gICAgICAgICdwYWRkaW5nLWJvdHRvbScsXG4gICAgICAgICdib3JkZXItYm90dG9tLXdpZHRoJyxcbiAgICAgICAgJ21hcmdpbi1ib3R0b20nXG4gICAgICBdO1xuICAgICAgY29uc3QgYWJzTWF4ID0gYXBpJDIubWF4KGVsZW1lbnQsIHZhbHVlLCBpbmNsdXNpb25zKTtcbiAgICAgIHNldCQ4KGVsZW1lbnQsICdtYXgtaGVpZ2h0JywgYWJzTWF4ICsgJ3B4Jyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHIkMSA9IChsZWZ0LCB0b3ApID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zbGF0ZSA9ICh4LCB5KSA9PiByJDEobGVmdCArIHgsIHRvcCArIHkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdCxcbiAgICAgICAgdG9wLFxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBTdWdhclBvc2l0aW9uID0gciQxO1xuXG4gICAgY29uc3QgYm94UG9zaXRpb24gPSBkb20gPT4ge1xuICAgICAgY29uc3QgYm94ID0gZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgcmV0dXJuIFN1Z2FyUG9zaXRpb24oYm94LmxlZnQsIGJveC50b3ApO1xuICAgIH07XG4gICAgY29uc3QgZmlyc3REZWZpbmVkT3JaZXJvID0gKGEsIGIpID0+IHtcbiAgICAgIGlmIChhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYiAhPT0gdW5kZWZpbmVkID8gYiA6IDA7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhYnNvbHV0ZSQzID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBlbGVtZW50LmRvbS5vd25lckRvY3VtZW50O1xuICAgICAgY29uc3QgYm9keSA9IGRvYy5ib2R5O1xuICAgICAgY29uc3Qgd2luID0gZG9jLmRlZmF1bHRWaWV3O1xuICAgICAgY29uc3QgaHRtbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICBpZiAoYm9keSA9PT0gZWxlbWVudC5kb20pIHtcbiAgICAgICAgcmV0dXJuIFN1Z2FyUG9zaXRpb24oYm9keS5vZmZzZXRMZWZ0LCBib2R5Lm9mZnNldFRvcCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzY3JvbGxUb3AgPSBmaXJzdERlZmluZWRPclplcm8od2luID09PSBudWxsIHx8IHdpbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2luLnBhZ2VZT2Zmc2V0LCBodG1sLnNjcm9sbFRvcCk7XG4gICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gZmlyc3REZWZpbmVkT3JaZXJvKHdpbiA9PT0gbnVsbCB8fCB3aW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpbi5wYWdlWE9mZnNldCwgaHRtbC5zY3JvbGxMZWZ0KTtcbiAgICAgIGNvbnN0IGNsaWVudFRvcCA9IGZpcnN0RGVmaW5lZE9yWmVybyhodG1sLmNsaWVudFRvcCwgYm9keS5jbGllbnRUb3ApO1xuICAgICAgY29uc3QgY2xpZW50TGVmdCA9IGZpcnN0RGVmaW5lZE9yWmVybyhodG1sLmNsaWVudExlZnQsIGJvZHkuY2xpZW50TGVmdCk7XG4gICAgICByZXR1cm4gdmlld3BvcnQkMShlbGVtZW50KS50cmFuc2xhdGUoc2Nyb2xsTGVmdCAtIGNsaWVudExlZnQsIHNjcm9sbFRvcCAtIGNsaWVudFRvcCk7XG4gICAgfTtcbiAgICBjb25zdCB2aWV3cG9ydCQxID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGNvbnN0IGRvYyA9IGRvbS5vd25lckRvY3VtZW50O1xuICAgICAgY29uc3QgYm9keSA9IGRvYy5ib2R5O1xuICAgICAgaWYgKGJvZHkgPT09IGRvbSkge1xuICAgICAgICByZXR1cm4gU3VnYXJQb3NpdGlvbihib2R5Lm9mZnNldExlZnQsIGJvZHkub2Zmc2V0VG9wKTtcbiAgICAgIH1cbiAgICAgIGlmICghaW5Cb2R5KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBTdWdhclBvc2l0aW9uKDAsIDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJveFBvc2l0aW9uKGRvbSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFwaSQxID0gRGltZW5zaW9uKCd3aWR0aCcsIGVsZW1lbnQgPT4gZWxlbWVudC5kb20ub2Zmc2V0V2lkdGgpO1xuICAgIGNvbnN0IHNldCQ3ID0gKGVsZW1lbnQsIGgpID0+IGFwaSQxLnNldChlbGVtZW50LCBoKTtcbiAgICBjb25zdCBnZXQkYyA9IGVsZW1lbnQgPT4gYXBpJDEuZ2V0KGVsZW1lbnQpO1xuICAgIGNvbnN0IGdldE91dGVyJDEgPSBlbGVtZW50ID0+IGFwaSQxLmdldE91dGVyKGVsZW1lbnQpO1xuICAgIGNvbnN0IHNldE1heCA9IChlbGVtZW50LCB2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgaW5jbHVzaW9ucyA9IFtcbiAgICAgICAgJ21hcmdpbi1sZWZ0JyxcbiAgICAgICAgJ2JvcmRlci1sZWZ0LXdpZHRoJyxcbiAgICAgICAgJ3BhZGRpbmctbGVmdCcsXG4gICAgICAgICdwYWRkaW5nLXJpZ2h0JyxcbiAgICAgICAgJ2JvcmRlci1yaWdodC13aWR0aCcsXG4gICAgICAgICdtYXJnaW4tcmlnaHQnXG4gICAgICBdO1xuICAgICAgY29uc3QgYWJzTWF4ID0gYXBpJDEubWF4KGVsZW1lbnQsIHZhbHVlLCBpbmNsdXNpb25zKTtcbiAgICAgIHNldCQ4KGVsZW1lbnQsICdtYXgtd2lkdGgnLCBhYnNNYXggKyAncHgnKTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2FjaGVkID0gZiA9PiB7XG4gICAgICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gICAgICBsZXQgcjtcbiAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgciA9IGYuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBEZXZpY2VUeXBlID0gKG9zLCBicm93c2VyLCB1c2VyQWdlbnQsIG1lZGlhTWF0Y2gpID0+IHtcbiAgICAgIGNvbnN0IGlzaVBhZCA9IG9zLmlzaU9TKCkgJiYgL2lwYWQvaS50ZXN0KHVzZXJBZ2VudCkgPT09IHRydWU7XG4gICAgICBjb25zdCBpc2lQaG9uZSA9IG9zLmlzaU9TKCkgJiYgIWlzaVBhZDtcbiAgICAgIGNvbnN0IGlzTW9iaWxlID0gb3MuaXNpT1MoKSB8fCBvcy5pc0FuZHJvaWQoKTtcbiAgICAgIGNvbnN0IGlzVG91Y2ggPSBpc01vYmlsZSB8fCBtZWRpYU1hdGNoKCcocG9pbnRlcjpjb2Fyc2UpJyk7XG4gICAgICBjb25zdCBpc1RhYmxldCA9IGlzaVBhZCB8fCAhaXNpUGhvbmUgJiYgaXNNb2JpbGUgJiYgbWVkaWFNYXRjaCgnKG1pbi1kZXZpY2Utd2lkdGg6NzY4cHgpJyk7XG4gICAgICBjb25zdCBpc1Bob25lID0gaXNpUGhvbmUgfHwgaXNNb2JpbGUgJiYgIWlzVGFibGV0O1xuICAgICAgY29uc3QgaU9Td2VidmlldyA9IGJyb3dzZXIuaXNTYWZhcmkoKSAmJiBvcy5pc2lPUygpICYmIC9zYWZhcmkvaS50ZXN0KHVzZXJBZ2VudCkgPT09IGZhbHNlO1xuICAgICAgY29uc3QgaXNEZXNrdG9wID0gIWlzUGhvbmUgJiYgIWlzVGFibGV0ICYmICFpT1N3ZWJ2aWV3O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNpUGFkOiBjb25zdGFudCQxKGlzaVBhZCksXG4gICAgICAgIGlzaVBob25lOiBjb25zdGFudCQxKGlzaVBob25lKSxcbiAgICAgICAgaXNUYWJsZXQ6IGNvbnN0YW50JDEoaXNUYWJsZXQpLFxuICAgICAgICBpc1Bob25lOiBjb25zdGFudCQxKGlzUGhvbmUpLFxuICAgICAgICBpc1RvdWNoOiBjb25zdGFudCQxKGlzVG91Y2gpLFxuICAgICAgICBpc0FuZHJvaWQ6IG9zLmlzQW5kcm9pZCxcbiAgICAgICAgaXNpT1M6IG9zLmlzaU9TLFxuICAgICAgICBpc1dlYlZpZXc6IGNvbnN0YW50JDEoaU9Td2VidmlldyksXG4gICAgICAgIGlzRGVza3RvcDogY29uc3RhbnQkMShpc0Rlc2t0b3ApXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBmaXJzdE1hdGNoID0gKHJlZ2V4ZXMsIHMpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVnZXhlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB4ID0gcmVnZXhlc1tpXTtcbiAgICAgICAgaWYgKHgudGVzdChzKSkge1xuICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgY29uc3QgZmluZCQzID0gKHJlZ2V4ZXMsIGFnZW50KSA9PiB7XG4gICAgICBjb25zdCByID0gZmlyc3RNYXRjaChyZWdleGVzLCBhZ2VudCk7XG4gICAgICBpZiAoIXIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtYWpvcjogMCxcbiAgICAgICAgICBtaW5vcjogMFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgZ3JvdXAgPSBpID0+IHtcbiAgICAgICAgcmV0dXJuIE51bWJlcihhZ2VudC5yZXBsYWNlKHIsICckJyArIGkpKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gbnUkZChncm91cCgxKSwgZ3JvdXAoMikpO1xuICAgIH07XG4gICAgY29uc3QgZGV0ZWN0JDUgPSAodmVyc2lvblJlZ2V4ZXMsIGFnZW50KSA9PiB7XG4gICAgICBjb25zdCBjbGVhbmVkQWdlbnQgPSBTdHJpbmcoYWdlbnQpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAodmVyc2lvblJlZ2V4ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB1bmtub3duJDMoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmaW5kJDModmVyc2lvblJlZ2V4ZXMsIGNsZWFuZWRBZ2VudCk7XG4gICAgfTtcbiAgICBjb25zdCB1bmtub3duJDMgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gbnUkZCgwLCAwKTtcbiAgICB9O1xuICAgIGNvbnN0IG51JGQgPSAobWFqb3IsIG1pbm9yKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYWpvcixcbiAgICAgICAgbWlub3JcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBWZXJzaW9uID0ge1xuICAgICAgbnU6IG51JGQsXG4gICAgICBkZXRlY3Q6IGRldGVjdCQ1LFxuICAgICAgdW5rbm93bjogdW5rbm93biQzXG4gICAgfTtcblxuICAgIGNvbnN0IGRldGVjdEJyb3dzZXIkMSA9IChicm93c2VycywgdXNlckFnZW50RGF0YSkgPT4ge1xuICAgICAgcmV0dXJuIGZpbmRNYXAodXNlckFnZW50RGF0YS5icmFuZHMsIHVhQnJhbmQgPT4ge1xuICAgICAgICBjb25zdCBsY0JyYW5kID0gdWFCcmFuZC5icmFuZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gZmluZCQ1KGJyb3dzZXJzLCBicm93c2VyID0+IHtcbiAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgcmV0dXJuIGxjQnJhbmQgPT09ICgoX2EgPSBicm93c2VyLmJyYW5kKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH0pLm1hcChpbmZvID0+ICh7XG4gICAgICAgICAgY3VycmVudDogaW5mby5uYW1lLFxuICAgICAgICAgIHZlcnNpb246IFZlcnNpb24ubnUocGFyc2VJbnQodWFCcmFuZC52ZXJzaW9uLCAxMCksIDApXG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBkZXRlY3QkNCA9IChjYW5kaWRhdGVzLCB1c2VyQWdlbnQpID0+IHtcbiAgICAgIGNvbnN0IGFnZW50ID0gU3RyaW5nKHVzZXJBZ2VudCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBmaW5kJDUoY2FuZGlkYXRlcywgY2FuZGlkYXRlID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZS5zZWFyY2goYWdlbnQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBkZXRlY3RCcm93c2VyID0gKGJyb3dzZXJzLCB1c2VyQWdlbnQpID0+IHtcbiAgICAgIHJldHVybiBkZXRlY3QkNChicm93c2VycywgdXNlckFnZW50KS5tYXAoYnJvd3NlciA9PiB7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBWZXJzaW9uLmRldGVjdChicm93c2VyLnZlcnNpb25SZWdleGVzLCB1c2VyQWdlbnQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGN1cnJlbnQ6IGJyb3dzZXIubmFtZSxcbiAgICAgICAgICB2ZXJzaW9uXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGRldGVjdE9zID0gKG9zZXMsIHVzZXJBZ2VudCkgPT4ge1xuICAgICAgcmV0dXJuIGRldGVjdCQ0KG9zZXMsIHVzZXJBZ2VudCkubWFwKG9zID0+IHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IFZlcnNpb24uZGV0ZWN0KG9zLnZlcnNpb25SZWdleGVzLCB1c2VyQWdlbnQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGN1cnJlbnQ6IG9zLm5hbWUsXG4gICAgICAgICAgdmVyc2lvblxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG5vcm1hbFZlcnNpb25SZWdleCA9IC8uKj92ZXJzaW9uXFwvXFwgPyhbMC05XSspXFwuKFswLTldKykuKi87XG4gICAgY29uc3QgY2hlY2tDb250YWlucyA9IHRhcmdldCA9PiB7XG4gICAgICByZXR1cm4gdWFzdHJpbmcgPT4ge1xuICAgICAgICByZXR1cm4gY29udGFpbnMkMSh1YXN0cmluZywgdGFyZ2V0KTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBicm93c2VycyA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0VkZ2UnLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogWy8uKj9lZGdlXFwvID8oWzAtOV0rKVxcLihbMC05XSspJC9dLFxuICAgICAgICBzZWFyY2g6IHVhc3RyaW5nID0+IHtcbiAgICAgICAgICByZXR1cm4gY29udGFpbnMkMSh1YXN0cmluZywgJ2VkZ2UvJykgJiYgY29udGFpbnMkMSh1YXN0cmluZywgJ2Nocm9tZScpICYmIGNvbnRhaW5zJDEodWFzdHJpbmcsICdzYWZhcmknKSAmJiBjb250YWlucyQxKHVhc3RyaW5nLCAnYXBwbGV3ZWJraXQnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0Nocm9taXVtJyxcbiAgICAgICAgYnJhbmQ6ICdDaHJvbWl1bScsXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbXG4gICAgICAgICAgLy4qP2Nocm9tZVxcLyhbMC05XSspXFwuKFswLTldKykuKi8sXG4gICAgICAgICAgbm9ybWFsVmVyc2lvblJlZ2V4XG4gICAgICAgIF0sXG4gICAgICAgIHNlYXJjaDogdWFzdHJpbmcgPT4ge1xuICAgICAgICAgIHJldHVybiBjb250YWlucyQxKHVhc3RyaW5nLCAnY2hyb21lJykgJiYgIWNvbnRhaW5zJDEodWFzdHJpbmcsICdjaHJvbWVmcmFtZScpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnSUUnLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogW1xuICAgICAgICAgIC8uKj9tc2llXFwgPyhbMC05XSspXFwuKFswLTldKykuKi8sXG4gICAgICAgICAgLy4qP3J2OihbMC05XSspXFwuKFswLTldKykuKi9cbiAgICAgICAgXSxcbiAgICAgICAgc2VhcmNoOiB1YXN0cmluZyA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRhaW5zJDEodWFzdHJpbmcsICdtc2llJykgfHwgY29udGFpbnMkMSh1YXN0cmluZywgJ3RyaWRlbnQnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ09wZXJhJyxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFtcbiAgICAgICAgICBub3JtYWxWZXJzaW9uUmVnZXgsXG4gICAgICAgICAgLy4qP29wZXJhXFwvKFswLTldKylcXC4oWzAtOV0rKS4qL1xuICAgICAgICBdLFxuICAgICAgICBzZWFyY2g6IGNoZWNrQ29udGFpbnMoJ29wZXJhJylcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdGaXJlZm94JyxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFsvLio/ZmlyZWZveFxcL1xcID8oWzAtOV0rKVxcLihbMC05XSspLiovXSxcbiAgICAgICAgc2VhcmNoOiBjaGVja0NvbnRhaW5zKCdmaXJlZm94JylcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTYWZhcmknLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogW1xuICAgICAgICAgIG5vcm1hbFZlcnNpb25SZWdleCxcbiAgICAgICAgICAvLio/Y3B1IG9zIChbMC05XSspXyhbMC05XSspLiovXG4gICAgICAgIF0sXG4gICAgICAgIHNlYXJjaDogdWFzdHJpbmcgPT4ge1xuICAgICAgICAgIHJldHVybiAoY29udGFpbnMkMSh1YXN0cmluZywgJ3NhZmFyaScpIHx8IGNvbnRhaW5zJDEodWFzdHJpbmcsICdtb2JpbGUvJykpICYmIGNvbnRhaW5zJDEodWFzdHJpbmcsICdhcHBsZXdlYmtpdCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgXTtcbiAgICBjb25zdCBvc2VzID0gW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnV2luZG93cycsXG4gICAgICAgIHNlYXJjaDogY2hlY2tDb250YWlucygnd2luJyksXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbLy4qP3dpbmRvd3NcXCBudFxcID8oWzAtOV0rKVxcLihbMC05XSspLiovXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2lPUycsXG4gICAgICAgIHNlYXJjaDogdWFzdHJpbmcgPT4ge1xuICAgICAgICAgIHJldHVybiBjb250YWlucyQxKHVhc3RyaW5nLCAnaXBob25lJykgfHwgY29udGFpbnMkMSh1YXN0cmluZywgJ2lwYWQnKTtcbiAgICAgICAgfSxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFtcbiAgICAgICAgICAvLio/dmVyc2lvblxcL1xcID8oWzAtOV0rKVxcLihbMC05XSspLiovLFxuICAgICAgICAgIC8uKmNwdSBvcyAoWzAtOV0rKV8oWzAtOV0rKS4qLyxcbiAgICAgICAgICAvLipjcHUgaXBob25lIG9zIChbMC05XSspXyhbMC05XSspLiovXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdBbmRyb2lkJyxcbiAgICAgICAgc2VhcmNoOiBjaGVja0NvbnRhaW5zKCdhbmRyb2lkJyksXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbLy4qP2FuZHJvaWRcXCA/KFswLTldKylcXC4oWzAtOV0rKS4qL11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdtYWNPUycsXG4gICAgICAgIHNlYXJjaDogY2hlY2tDb250YWlucygnbWFjIG9zIHgnKSxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFsvLio/bWFjXFwgb3NcXCB4XFwgPyhbMC05XSspXyhbMC05XSspLiovXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0xpbnV4JyxcbiAgICAgICAgc2VhcmNoOiBjaGVja0NvbnRhaW5zKCdsaW51eCcpLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogW11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTb2xhcmlzJyxcbiAgICAgICAgc2VhcmNoOiBjaGVja0NvbnRhaW5zKCdzdW5vcycpLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogW11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdGcmVlQlNEJyxcbiAgICAgICAgc2VhcmNoOiBjaGVja0NvbnRhaW5zKCdmcmVlYnNkJyksXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0Nocm9tZU9TJyxcbiAgICAgICAgc2VhcmNoOiBjaGVja0NvbnRhaW5zKCdjcm9zJyksXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbLy4qP2Nocm9tZVxcLyhbMC05XSspXFwuKFswLTldKykuKi9dXG4gICAgICB9XG4gICAgXTtcbiAgICBjb25zdCBQbGF0Zm9ybUluZm8gPSB7XG4gICAgICBicm93c2VyczogY29uc3RhbnQkMShicm93c2VycyksXG4gICAgICBvc2VzOiBjb25zdGFudCQxKG9zZXMpXG4gICAgfTtcblxuICAgIGNvbnN0IGVkZ2UgPSAnRWRnZSc7XG4gICAgY29uc3QgY2hyb21pdW0gPSAnQ2hyb21pdW0nO1xuICAgIGNvbnN0IGllID0gJ0lFJztcbiAgICBjb25zdCBvcGVyYSA9ICdPcGVyYSc7XG4gICAgY29uc3QgZmlyZWZveCA9ICdGaXJlZm94JztcbiAgICBjb25zdCBzYWZhcmkgPSAnU2FmYXJpJztcbiAgICBjb25zdCB1bmtub3duJDIgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gbnUkYyh7XG4gICAgICAgIGN1cnJlbnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgdmVyc2lvbjogVmVyc2lvbi51bmtub3duKClcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbnUkYyA9IGluZm8gPT4ge1xuICAgICAgY29uc3QgY3VycmVudCA9IGluZm8uY3VycmVudDtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSBpbmZvLnZlcnNpb247XG4gICAgICBjb25zdCBpc0Jyb3dzZXIgPSBuYW1lID0+ICgpID0+IGN1cnJlbnQgPT09IG5hbWU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50LFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICBpc0VkZ2U6IGlzQnJvd3NlcihlZGdlKSxcbiAgICAgICAgaXNDaHJvbWl1bTogaXNCcm93c2VyKGNocm9taXVtKSxcbiAgICAgICAgaXNJRTogaXNCcm93c2VyKGllKSxcbiAgICAgICAgaXNPcGVyYTogaXNCcm93c2VyKG9wZXJhKSxcbiAgICAgICAgaXNGaXJlZm94OiBpc0Jyb3dzZXIoZmlyZWZveCksXG4gICAgICAgIGlzU2FmYXJpOiBpc0Jyb3dzZXIoc2FmYXJpKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IEJyb3dzZXIgPSB7XG4gICAgICB1bmtub3duOiB1bmtub3duJDIsXG4gICAgICBudTogbnUkYyxcbiAgICAgIGVkZ2U6IGNvbnN0YW50JDEoZWRnZSksXG4gICAgICBjaHJvbWl1bTogY29uc3RhbnQkMShjaHJvbWl1bSksXG4gICAgICBpZTogY29uc3RhbnQkMShpZSksXG4gICAgICBvcGVyYTogY29uc3RhbnQkMShvcGVyYSksXG4gICAgICBmaXJlZm94OiBjb25zdGFudCQxKGZpcmVmb3gpLFxuICAgICAgc2FmYXJpOiBjb25zdGFudCQxKHNhZmFyaSlcbiAgICB9O1xuXG4gICAgY29uc3Qgd2luZG93cyA9ICdXaW5kb3dzJztcbiAgICBjb25zdCBpb3MgPSAnaU9TJztcbiAgICBjb25zdCBhbmRyb2lkID0gJ0FuZHJvaWQnO1xuICAgIGNvbnN0IGxpbnV4ID0gJ0xpbnV4JztcbiAgICBjb25zdCBtYWNvcyA9ICdtYWNPUyc7XG4gICAgY29uc3Qgc29sYXJpcyA9ICdTb2xhcmlzJztcbiAgICBjb25zdCBmcmVlYnNkID0gJ0ZyZWVCU0QnO1xuICAgIGNvbnN0IGNocm9tZW9zID0gJ0Nocm9tZU9TJztcbiAgICBjb25zdCB1bmtub3duJDEgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gbnUkYih7XG4gICAgICAgIGN1cnJlbnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgdmVyc2lvbjogVmVyc2lvbi51bmtub3duKClcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbnUkYiA9IGluZm8gPT4ge1xuICAgICAgY29uc3QgY3VycmVudCA9IGluZm8uY3VycmVudDtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSBpbmZvLnZlcnNpb247XG4gICAgICBjb25zdCBpc09TID0gbmFtZSA9PiAoKSA9PiBjdXJyZW50ID09PSBuYW1lO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgaXNXaW5kb3dzOiBpc09TKHdpbmRvd3MpLFxuICAgICAgICBpc2lPUzogaXNPUyhpb3MpLFxuICAgICAgICBpc0FuZHJvaWQ6IGlzT1MoYW5kcm9pZCksXG4gICAgICAgIGlzTWFjT1M6IGlzT1MobWFjb3MpLFxuICAgICAgICBpc0xpbnV4OiBpc09TKGxpbnV4KSxcbiAgICAgICAgaXNTb2xhcmlzOiBpc09TKHNvbGFyaXMpLFxuICAgICAgICBpc0ZyZWVCU0Q6IGlzT1MoZnJlZWJzZCksXG4gICAgICAgIGlzQ2hyb21lT1M6IGlzT1MoY2hyb21lb3MpXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgT3BlcmF0aW5nU3lzdGVtID0ge1xuICAgICAgdW5rbm93bjogdW5rbm93biQxLFxuICAgICAgbnU6IG51JGIsXG4gICAgICB3aW5kb3dzOiBjb25zdGFudCQxKHdpbmRvd3MpLFxuICAgICAgaW9zOiBjb25zdGFudCQxKGlvcyksXG4gICAgICBhbmRyb2lkOiBjb25zdGFudCQxKGFuZHJvaWQpLFxuICAgICAgbGludXg6IGNvbnN0YW50JDEobGludXgpLFxuICAgICAgbWFjb3M6IGNvbnN0YW50JDEobWFjb3MpLFxuICAgICAgc29sYXJpczogY29uc3RhbnQkMShzb2xhcmlzKSxcbiAgICAgIGZyZWVic2Q6IGNvbnN0YW50JDEoZnJlZWJzZCksXG4gICAgICBjaHJvbWVvczogY29uc3RhbnQkMShjaHJvbWVvcylcbiAgICB9O1xuXG4gICAgY29uc3QgZGV0ZWN0JDMgPSAodXNlckFnZW50LCB1c2VyQWdlbnREYXRhT3B0LCBtZWRpYU1hdGNoKSA9PiB7XG4gICAgICBjb25zdCBicm93c2VycyA9IFBsYXRmb3JtSW5mby5icm93c2VycygpO1xuICAgICAgY29uc3Qgb3NlcyA9IFBsYXRmb3JtSW5mby5vc2VzKCk7XG4gICAgICBjb25zdCBicm93c2VyID0gdXNlckFnZW50RGF0YU9wdC5iaW5kKHVzZXJBZ2VudERhdGEgPT4gZGV0ZWN0QnJvd3NlciQxKGJyb3dzZXJzLCB1c2VyQWdlbnREYXRhKSkub3JUaHVuaygoKSA9PiBkZXRlY3RCcm93c2VyKGJyb3dzZXJzLCB1c2VyQWdlbnQpKS5mb2xkKEJyb3dzZXIudW5rbm93biwgQnJvd3Nlci5udSk7XG4gICAgICBjb25zdCBvcyA9IGRldGVjdE9zKG9zZXMsIHVzZXJBZ2VudCkuZm9sZChPcGVyYXRpbmdTeXN0ZW0udW5rbm93biwgT3BlcmF0aW5nU3lzdGVtLm51KTtcbiAgICAgIGNvbnN0IGRldmljZVR5cGUgPSBEZXZpY2VUeXBlKG9zLCBicm93c2VyLCB1c2VyQWdlbnQsIG1lZGlhTWF0Y2gpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYnJvd3NlcixcbiAgICAgICAgb3MsXG4gICAgICAgIGRldmljZVR5cGVcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBQbGF0Zm9ybURldGVjdGlvbiA9IHsgZGV0ZWN0OiBkZXRlY3QkMyB9O1xuXG4gICAgY29uc3QgbWVkaWFNYXRjaCA9IHF1ZXJ5ID0+IHdpbmRvdy5tYXRjaE1lZGlhKHF1ZXJ5KS5tYXRjaGVzO1xuICAgIGxldCBwbGF0Zm9ybSA9IGNhY2hlZCgoKSA9PiBQbGF0Zm9ybURldGVjdGlvbi5kZXRlY3QobmF2aWdhdG9yLnVzZXJBZ2VudCwgT3B0aW9uYWwuZnJvbShuYXZpZ2F0b3IudXNlckFnZW50RGF0YSksIG1lZGlhTWF0Y2gpKTtcbiAgICBjb25zdCBkZXRlY3QkMiA9ICgpID0+IHBsYXRmb3JtKCk7XG5cbiAgICBjb25zdCBta0V2ZW50ID0gKHRhcmdldCwgeCwgeSwgc3RvcCwgcHJldmVudCwga2lsbCwgcmF3KSA9PiAoe1xuICAgICAgdGFyZ2V0LFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBzdG9wLFxuICAgICAgcHJldmVudCxcbiAgICAgIGtpbGwsXG4gICAgICByYXdcbiAgICB9KTtcbiAgICBjb25zdCBmcm9tUmF3RXZlbnQkMSA9IHJhd0V2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGdldE9yaWdpbmFsRXZlbnRUYXJnZXQocmF3RXZlbnQpLmdldE9yKHJhd0V2ZW50LnRhcmdldCkpO1xuICAgICAgY29uc3Qgc3RvcCA9ICgpID0+IHJhd0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY29uc3QgcHJldmVudCA9ICgpID0+IHJhd0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBraWxsID0gY29tcG9zZShwcmV2ZW50LCBzdG9wKTtcbiAgICAgIHJldHVybiBta0V2ZW50KHRhcmdldCwgcmF3RXZlbnQuY2xpZW50WCwgcmF3RXZlbnQuY2xpZW50WSwgc3RvcCwgcHJldmVudCwga2lsbCwgcmF3RXZlbnQpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlID0gKGZpbHRlciwgaGFuZGxlcikgPT4gcmF3RXZlbnQgPT4ge1xuICAgICAgaWYgKGZpbHRlcihyYXdFdmVudCkpIHtcbiAgICAgICAgaGFuZGxlcihmcm9tUmF3RXZlbnQkMShyYXdFdmVudCkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYmluZGVyID0gKGVsZW1lbnQsIGV2ZW50LCBmaWx0ZXIsIGhhbmRsZXIsIHVzZUNhcHR1cmUpID0+IHtcbiAgICAgIGNvbnN0IHdyYXBwZWQgPSBoYW5kbGUoZmlsdGVyLCBoYW5kbGVyKTtcbiAgICAgIGVsZW1lbnQuZG9tLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIHdyYXBwZWQsIHVzZUNhcHR1cmUpO1xuICAgICAgcmV0dXJuIHsgdW5iaW5kOiBjdXJyeSh1bmJpbmQsIGVsZW1lbnQsIGV2ZW50LCB3cmFwcGVkLCB1c2VDYXB0dXJlKSB9O1xuICAgIH07XG4gICAgY29uc3QgYmluZCQyID0gKGVsZW1lbnQsIGV2ZW50LCBmaWx0ZXIsIGhhbmRsZXIpID0+IGJpbmRlcihlbGVtZW50LCBldmVudCwgZmlsdGVyLCBoYW5kbGVyLCBmYWxzZSk7XG4gICAgY29uc3QgY2FwdHVyZSQxID0gKGVsZW1lbnQsIGV2ZW50LCBmaWx0ZXIsIGhhbmRsZXIpID0+IGJpbmRlcihlbGVtZW50LCBldmVudCwgZmlsdGVyLCBoYW5kbGVyLCB0cnVlKTtcbiAgICBjb25zdCB1bmJpbmQgPSAoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIHVzZUNhcHR1cmUpID0+IHtcbiAgICAgIGVsZW1lbnQuZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIsIHVzZUNhcHR1cmUpO1xuICAgIH07XG5cbiAgICBjb25zdCBiZWZvcmUkMSA9IChtYXJrZXIsIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCQxID0gcGFyZW50KG1hcmtlcik7XG4gICAgICBwYXJlbnQkMS5lYWNoKHYgPT4ge1xuICAgICAgICB2LmRvbS5pbnNlcnRCZWZvcmUoZWxlbWVudC5kb20sIG1hcmtlci5kb20pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBhZnRlciQyID0gKG1hcmtlciwgZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3Qgc2libGluZyA9IG5leHRTaWJsaW5nKG1hcmtlcik7XG4gICAgICBzaWJsaW5nLmZvbGQoKCkgPT4ge1xuICAgICAgICBjb25zdCBwYXJlbnQkMSA9IHBhcmVudChtYXJrZXIpO1xuICAgICAgICBwYXJlbnQkMS5lYWNoKHYgPT4ge1xuICAgICAgICAgIGFwcGVuZCQyKHYsIGVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHYgPT4ge1xuICAgICAgICBiZWZvcmUkMSh2LCBlbGVtZW50KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcHJlcGVuZCQxID0gKHBhcmVudCwgZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgZmlyc3RDaGlsZCQxID0gZmlyc3RDaGlsZChwYXJlbnQpO1xuICAgICAgZmlyc3RDaGlsZCQxLmZvbGQoKCkgPT4ge1xuICAgICAgICBhcHBlbmQkMihwYXJlbnQsIGVsZW1lbnQpO1xuICAgICAgfSwgdiA9PiB7XG4gICAgICAgIHBhcmVudC5kb20uaW5zZXJ0QmVmb3JlKGVsZW1lbnQuZG9tLCB2LmRvbSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGVuZCQyID0gKHBhcmVudCwgZWxlbWVudCkgPT4ge1xuICAgICAgcGFyZW50LmRvbS5hcHBlbmRDaGlsZChlbGVtZW50LmRvbSk7XG4gICAgfTtcbiAgICBjb25zdCBhcHBlbmRBdCA9IChwYXJlbnQsIGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjaGlsZCQyKHBhcmVudCwgaW5kZXgpLmZvbGQoKCkgPT4ge1xuICAgICAgICBhcHBlbmQkMihwYXJlbnQsIGVsZW1lbnQpO1xuICAgICAgfSwgdiA9PiB7XG4gICAgICAgIGJlZm9yZSQxKHYsIGVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFwcGVuZCQxID0gKHBhcmVudCwgZWxlbWVudHMpID0+IHtcbiAgICAgIGVhY2gkMShlbGVtZW50cywgeCA9PiB7XG4gICAgICAgIGFwcGVuZCQyKHBhcmVudCwgeCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZW1wdHkgPSBlbGVtZW50ID0+IHtcbiAgICAgIGVsZW1lbnQuZG9tLnRleHRDb250ZW50ID0gJyc7XG4gICAgICBlYWNoJDEoY2hpbGRyZW4oZWxlbWVudCksIHJvZ3VlID0+IHtcbiAgICAgICAgcmVtb3ZlJDUocm9ndWUpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmUkNSA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBpZiAoZG9tLnBhcmVudE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgZG9tLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG9tKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0JGIgPSBfRE9DID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IF9ET0MgIT09IHVuZGVmaW5lZCA/IF9ET0MuZG9tIDogZG9jdW1lbnQ7XG4gICAgICBjb25zdCB4ID0gZG9jLmJvZHkuc2Nyb2xsTGVmdCB8fCBkb2MuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICBjb25zdCB5ID0gZG9jLmJvZHkuc2Nyb2xsVG9wIHx8IGRvYy5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgICAgcmV0dXJuIFN1Z2FyUG9zaXRpb24oeCwgeSk7XG4gICAgfTtcbiAgICBjb25zdCB0byA9ICh4LCB5LCBfRE9DKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBfRE9DICE9PSB1bmRlZmluZWQgPyBfRE9DLmRvbSA6IGRvY3VtZW50O1xuICAgICAgY29uc3Qgd2luID0gZG9jLmRlZmF1bHRWaWV3O1xuICAgICAgaWYgKHdpbikge1xuICAgICAgICB3aW4uc2Nyb2xsVG8oeCwgeSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGdldCRhID0gX3dpbiA9PiB7XG4gICAgICBjb25zdCB3aW4gPSBfd2luID09PSB1bmRlZmluZWQgPyB3aW5kb3cgOiBfd2luO1xuICAgICAgaWYgKGRldGVjdCQyKCkuYnJvd3Nlci5pc0ZpcmVmb3goKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20od2luLnZpc3VhbFZpZXdwb3J0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGJvdW5kcyQxID0gKHgsIHksIHdpZHRoLCBoZWlnaHQpID0+ICh7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICAgIGJvdHRvbTogeSArIGhlaWdodFxuICAgIH0pO1xuICAgIGNvbnN0IGdldEJvdW5kcyQzID0gX3dpbiA9PiB7XG4gICAgICBjb25zdCB3aW4gPSBfd2luID09PSB1bmRlZmluZWQgPyB3aW5kb3cgOiBfd2luO1xuICAgICAgY29uc3QgZG9jID0gd2luLmRvY3VtZW50O1xuICAgICAgY29uc3Qgc2Nyb2xsID0gZ2V0JGIoU3VnYXJFbGVtZW50LmZyb21Eb20oZG9jKSk7XG4gICAgICByZXR1cm4gZ2V0JGEod2luKS5mb2xkKCgpID0+IHtcbiAgICAgICAgY29uc3QgaHRtbCA9IHdpbi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gaHRtbC5jbGllbnRXaWR0aDtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gICAgICAgIHJldHVybiBib3VuZHMkMShzY3JvbGwubGVmdCwgc2Nyb2xsLnRvcCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICB9LCB2aXN1YWxWaWV3cG9ydCA9PiBib3VuZHMkMShNYXRoLm1heCh2aXN1YWxWaWV3cG9ydC5wYWdlTGVmdCwgc2Nyb2xsLmxlZnQpLCBNYXRoLm1heCh2aXN1YWxWaWV3cG9ydC5wYWdlVG9wLCBzY3JvbGwudG9wKSwgdmlzdWFsVmlld3BvcnQud2lkdGgsIHZpc3VhbFZpZXdwb3J0LmhlaWdodCkpO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXREb2N1bWVudCA9ICgpID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGRvY3VtZW50KTtcblxuICAgIGNvbnN0IHdhbGtVcCA9IChuYXZpZ2F0aW9uLCBkb2MpID0+IHtcbiAgICAgIGNvbnN0IGZyYW1lID0gbmF2aWdhdGlvbi52aWV3KGRvYyk7XG4gICAgICByZXR1cm4gZnJhbWUuZm9sZChjb25zdGFudCQxKFtdKSwgZiA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IG5hdmlnYXRpb24ub3duZXIoZik7XG4gICAgICAgIGNvbnN0IHJlc3QgPSB3YWxrVXAobmF2aWdhdGlvbiwgcGFyZW50KTtcbiAgICAgICAgcmV0dXJuIFtmXS5jb25jYXQocmVzdCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHBhdGhUbyA9IChlbGVtZW50LCBuYXZpZ2F0aW9uKSA9PiB7XG4gICAgICBjb25zdCBkID0gbmF2aWdhdGlvbi5vd25lcihlbGVtZW50KTtcbiAgICAgIGNvbnN0IHBhdGhzID0gd2Fsa1VwKG5hdmlnYXRpb24sIGQpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUocGF0aHMpO1xuICAgIH07XG5cbiAgICBjb25zdCB2aWV3ID0gZG9jID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2MuZG9tID09PSBkb2N1bWVudCA/IE9wdGlvbmFsLm5vbmUoKSA6IE9wdGlvbmFsLmZyb20oKF9hID0gZG9jLmRvbS5kZWZhdWx0VmlldykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZyYW1lRWxlbWVudCk7XG4gICAgICByZXR1cm4gZWxlbWVudC5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIH07XG4gICAgY29uc3Qgb3duZXIkMyA9IGVsZW1lbnQgPT4gb3duZXIkNChlbGVtZW50KTtcblxuICAgIHZhciBOYXZpZ2F0aW9uID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIHZpZXc6IHZpZXcsXG4gICAgICAgIG93bmVyOiBvd25lciQzXG4gICAgfSk7XG5cbiAgICBjb25zdCBmaW5kJDIgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IGdldERvY3VtZW50KCk7XG4gICAgICBjb25zdCBzY3JvbGwgPSBnZXQkYihkb2MpO1xuICAgICAgY29uc3QgcGF0aCA9IHBhdGhUbyhlbGVtZW50LCBOYXZpZ2F0aW9uKTtcbiAgICAgIHJldHVybiBwYXRoLmZvbGQoY3VycnkoYWJzb2x1dGUkMywgZWxlbWVudCksIGZyYW1lcyA9PiB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHZpZXdwb3J0JDEoZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHIgPSBmb2xkcihmcmFtZXMsIChiLCBhKSA9PiB7XG4gICAgICAgICAgY29uc3QgbG9jID0gdmlld3BvcnQkMShhKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGVmdDogYi5sZWZ0ICsgbG9jLmxlZnQsXG4gICAgICAgICAgICB0b3A6IGIudG9wICsgbG9jLnRvcFxuICAgICAgICAgIH07XG4gICAgICAgIH0sIHtcbiAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgIHRvcDogMFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFN1Z2FyUG9zaXRpb24oci5sZWZ0ICsgb2Zmc2V0LmxlZnQgKyBzY3JvbGwubGVmdCwgci50b3AgKyBvZmZzZXQudG9wICsgc2Nyb2xsLnRvcCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcG9pbnRlZCA9IChwb2ludCwgd2lkdGgsIGhlaWdodCkgPT4gKHtcbiAgICAgIHBvaW50LFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9KTtcbiAgICBjb25zdCByZWN0ID0gKHgsIHksIHdpZHRoLCBoZWlnaHQpID0+ICh7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0XG4gICAgfSk7XG4gICAgY29uc3QgYm91bmRzID0gKHgsIHksIHdpZHRoLCBoZWlnaHQpID0+ICh7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICAgIGJvdHRvbTogeSArIGhlaWdodFxuICAgIH0pO1xuICAgIGNvbnN0IGJveCQxID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCB4eSA9IGFic29sdXRlJDMoZWxlbWVudCk7XG4gICAgICBjb25zdCB3ID0gZ2V0T3V0ZXIkMShlbGVtZW50KTtcbiAgICAgIGNvbnN0IGggPSBnZXRPdXRlciQyKGVsZW1lbnQpO1xuICAgICAgcmV0dXJuIGJvdW5kcyh4eS5sZWZ0LCB4eS50b3AsIHcsIGgpO1xuICAgIH07XG4gICAgY29uc3QgYWJzb2x1dGUkMiA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSBmaW5kJDIoZWxlbWVudCk7XG4gICAgICBjb25zdCB3aWR0aCA9IGdldE91dGVyJDEoZWxlbWVudCk7XG4gICAgICBjb25zdCBoZWlnaHQgPSBnZXRPdXRlciQyKGVsZW1lbnQpO1xuICAgICAgcmV0dXJuIGJvdW5kcyhwb3NpdGlvbi5sZWZ0LCBwb3NpdGlvbi50b3AsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH07XG4gICAgY29uc3QgY29uc3RyYWluID0gKG9yaWdpbmFsLCBjb25zdHJhaW50KSA9PiB7XG4gICAgICBjb25zdCBsZWZ0ID0gTWF0aC5tYXgob3JpZ2luYWwueCwgY29uc3RyYWludC54KTtcbiAgICAgIGNvbnN0IHRvcCA9IE1hdGgubWF4KG9yaWdpbmFsLnksIGNvbnN0cmFpbnQueSk7XG4gICAgICBjb25zdCByaWdodCA9IE1hdGgubWluKG9yaWdpbmFsLnJpZ2h0LCBjb25zdHJhaW50LnJpZ2h0KTtcbiAgICAgIGNvbnN0IGJvdHRvbSA9IE1hdGgubWluKG9yaWdpbmFsLmJvdHRvbSwgY29uc3RyYWludC5ib3R0b20pO1xuICAgICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgICBjb25zdCBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gICAgICByZXR1cm4gYm91bmRzKGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCk7XG4gICAgfTtcbiAgICBjb25zdCBjb25zdHJhaW5CeU1hbnkgPSAob3JpZ2luYWwsIGNvbnN0cmFpbnRzKSA9PiB7XG4gICAgICByZXR1cm4gZm9sZGwoY29uc3RyYWludHMsIChhY2MsIGMpID0+IGNvbnN0cmFpbihhY2MsIGMpLCBvcmlnaW5hbCk7XG4gICAgfTtcbiAgICBjb25zdCB3aW4gPSAoKSA9PiBnZXRCb3VuZHMkMyh3aW5kb3cpO1xuXG4gICAgdmFyIGdsb2JhbCRhID0gdGlueW1jZS51dGlsLlRvb2xzLnJlc29sdmUoJ3RpbnltY2UuVGhlbWVNYW5hZ2VyJyk7XG5cbiAgICBjb25zdCB2YWx1ZSQ0ID0gdmFsdWUgPT4ge1xuICAgICAgY29uc3QgYXBwbHlIZWxwZXIgPSBmbiA9PiBmbih2YWx1ZSk7XG4gICAgICBjb25zdCBjb25zdEhlbHBlciA9IGNvbnN0YW50JDEodmFsdWUpO1xuICAgICAgY29uc3Qgb3V0cHV0SGVscGVyID0gKCkgPT4gb3V0cHV0O1xuICAgICAgY29uc3Qgb3V0cHV0ID0ge1xuICAgICAgICB0YWc6IHRydWUsXG4gICAgICAgIGlubmVyOiB2YWx1ZSxcbiAgICAgICAgZm9sZDogKF9vbkVycm9yLCBvblZhbHVlKSA9PiBvblZhbHVlKHZhbHVlKSxcbiAgICAgICAgaXNWYWx1ZTogYWx3YXlzLFxuICAgICAgICBpc0Vycm9yOiBuZXZlcixcbiAgICAgICAgbWFwOiBtYXBwZXIgPT4gUmVzdWx0LnZhbHVlKG1hcHBlcih2YWx1ZSkpLFxuICAgICAgICBtYXBFcnJvcjogb3V0cHV0SGVscGVyLFxuICAgICAgICBiaW5kOiBhcHBseUhlbHBlcixcbiAgICAgICAgZXhpc3RzOiBhcHBseUhlbHBlcixcbiAgICAgICAgZm9yYWxsOiBhcHBseUhlbHBlcixcbiAgICAgICAgZ2V0T3I6IGNvbnN0SGVscGVyLFxuICAgICAgICBvcjogb3V0cHV0SGVscGVyLFxuICAgICAgICBnZXRPclRodW5rOiBjb25zdEhlbHBlcixcbiAgICAgICAgb3JUaHVuazogb3V0cHV0SGVscGVyLFxuICAgICAgICBnZXRPckRpZTogY29uc3RIZWxwZXIsXG4gICAgICAgIGVhY2g6IGZuID0+IHtcbiAgICAgICAgICBmbih2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRvT3B0aW9uYWw6ICgpID0+IE9wdGlvbmFsLnNvbWUodmFsdWUpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yJDEgPSBlcnJvciA9PiB7XG4gICAgICBjb25zdCBvdXRwdXRIZWxwZXIgPSAoKSA9PiBvdXRwdXQ7XG4gICAgICBjb25zdCBvdXRwdXQgPSB7XG4gICAgICAgIHRhZzogZmFsc2UsXG4gICAgICAgIGlubmVyOiBlcnJvcixcbiAgICAgICAgZm9sZDogKG9uRXJyb3IsIF9vblZhbHVlKSA9PiBvbkVycm9yKGVycm9yKSxcbiAgICAgICAgaXNWYWx1ZTogbmV2ZXIsXG4gICAgICAgIGlzRXJyb3I6IGFsd2F5cyxcbiAgICAgICAgbWFwOiBvdXRwdXRIZWxwZXIsXG4gICAgICAgIG1hcEVycm9yOiBtYXBwZXIgPT4gUmVzdWx0LmVycm9yKG1hcHBlcihlcnJvcikpLFxuICAgICAgICBiaW5kOiBvdXRwdXRIZWxwZXIsXG4gICAgICAgIGV4aXN0czogbmV2ZXIsXG4gICAgICAgIGZvcmFsbDogYWx3YXlzLFxuICAgICAgICBnZXRPcjogaWRlbnRpdHksXG4gICAgICAgIG9yOiBpZGVudGl0eSxcbiAgICAgICAgZ2V0T3JUaHVuazogYXBwbHkkMSxcbiAgICAgICAgb3JUaHVuazogYXBwbHkkMSxcbiAgICAgICAgZ2V0T3JEaWU6IGRpZShTdHJpbmcoZXJyb3IpKSxcbiAgICAgICAgZWFjaDogbm9vcCxcbiAgICAgICAgdG9PcHRpb25hbDogT3B0aW9uYWwubm9uZVxuICAgICAgfTtcbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tT3B0aW9uID0gKG9wdGlvbmFsLCBlcnIpID0+IG9wdGlvbmFsLmZvbGQoKCkgPT4gZXJyb3IkMShlcnIpLCB2YWx1ZSQ0KTtcbiAgICBjb25zdCBSZXN1bHQgPSB7XG4gICAgICB2YWx1ZTogdmFsdWUkNCxcbiAgICAgIGVycm9yOiBlcnJvciQxLFxuICAgICAgZnJvbU9wdGlvblxuICAgIH07XG5cbiAgICB2YXIgU2ltcGxlUmVzdWx0VHlwZTtcbiAgICAoZnVuY3Rpb24gKFNpbXBsZVJlc3VsdFR5cGUpIHtcbiAgICAgIFNpbXBsZVJlc3VsdFR5cGVbU2ltcGxlUmVzdWx0VHlwZVsnRXJyb3InXSA9IDBdID0gJ0Vycm9yJztcbiAgICAgIFNpbXBsZVJlc3VsdFR5cGVbU2ltcGxlUmVzdWx0VHlwZVsnVmFsdWUnXSA9IDFdID0gJ1ZhbHVlJztcbiAgICB9KFNpbXBsZVJlc3VsdFR5cGUgfHwgKFNpbXBsZVJlc3VsdFR5cGUgPSB7fSkpKTtcbiAgICBjb25zdCBmb2xkJDEgPSAocmVzLCBvbkVycm9yLCBvblZhbHVlKSA9PiByZXMuc3R5cGUgPT09IFNpbXBsZVJlc3VsdFR5cGUuRXJyb3IgPyBvbkVycm9yKHJlcy5zZXJyb3IpIDogb25WYWx1ZShyZXMuc3ZhbHVlKTtcbiAgICBjb25zdCBwYXJ0aXRpb24kMiA9IHJlc3VsdHMgPT4ge1xuICAgICAgY29uc3QgdmFsdWVzID0gW107XG4gICAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICAgIGVhY2gkMShyZXN1bHRzLCBvYmogPT4ge1xuICAgICAgICBmb2xkJDEob2JqLCBlcnIgPT4gZXJyb3JzLnB1c2goZXJyKSwgdmFsID0+IHZhbHVlcy5wdXNoKHZhbCkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIGVycm9yc1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG1hcEVycm9yID0gKHJlcywgZikgPT4ge1xuICAgICAgaWYgKHJlcy5zdHlwZSA9PT0gU2ltcGxlUmVzdWx0VHlwZS5FcnJvcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0eXBlOiBTaW1wbGVSZXN1bHRUeXBlLkVycm9yLFxuICAgICAgICAgIHNlcnJvcjogZihyZXMuc2Vycm9yKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1hcCA9IChyZXMsIGYpID0+IHtcbiAgICAgIGlmIChyZXMuc3R5cGUgPT09IFNpbXBsZVJlc3VsdFR5cGUuVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdHlwZTogU2ltcGxlUmVzdWx0VHlwZS5WYWx1ZSxcbiAgICAgICAgICBzdmFsdWU6IGYocmVzLnN2YWx1ZSlcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBiaW5kJDEgPSAocmVzLCBmKSA9PiB7XG4gICAgICBpZiAocmVzLnN0eXBlID09PSBTaW1wbGVSZXN1bHRUeXBlLlZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmKHJlcy5zdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGJpbmRFcnJvciA9IChyZXMsIGYpID0+IHtcbiAgICAgIGlmIChyZXMuc3R5cGUgPT09IFNpbXBsZVJlc3VsdFR5cGUuRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGYocmVzLnNlcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc3ZhbHVlID0gdiA9PiAoe1xuICAgICAgc3R5cGU6IFNpbXBsZVJlc3VsdFR5cGUuVmFsdWUsXG4gICAgICBzdmFsdWU6IHZcbiAgICB9KTtcbiAgICBjb25zdCBzZXJyb3IgPSBlID0+ICh7XG4gICAgICBzdHlwZTogU2ltcGxlUmVzdWx0VHlwZS5FcnJvcixcbiAgICAgIHNlcnJvcjogZVxuICAgIH0pO1xuICAgIGNvbnN0IHRvUmVzdWx0JDEgPSByZXMgPT4gZm9sZCQxKHJlcywgUmVzdWx0LmVycm9yLCBSZXN1bHQudmFsdWUpO1xuICAgIGNvbnN0IGZyb21SZXN1bHQkMSA9IHJlcyA9PiByZXMuZm9sZChzZXJyb3IsIHN2YWx1ZSk7XG4gICAgY29uc3QgU2ltcGxlUmVzdWx0ID0ge1xuICAgICAgZnJvbVJlc3VsdDogZnJvbVJlc3VsdCQxLFxuICAgICAgdG9SZXN1bHQ6IHRvUmVzdWx0JDEsXG4gICAgICBzdmFsdWUsXG4gICAgICBwYXJ0aXRpb246IHBhcnRpdGlvbiQyLFxuICAgICAgc2Vycm9yLFxuICAgICAgYmluZDogYmluZCQxLFxuICAgICAgYmluZEVycm9yLFxuICAgICAgbWFwLFxuICAgICAgbWFwRXJyb3IsXG4gICAgICBmb2xkOiBmb2xkJDFcbiAgICB9O1xuXG4gICAgY29uc3QgZmllbGQkMiA9IChrZXksIG5ld0tleSwgcHJlc2VuY2UsIHByb3ApID0+ICh7XG4gICAgICB0YWc6ICdmaWVsZCcsXG4gICAgICBrZXksXG4gICAgICBuZXdLZXksXG4gICAgICBwcmVzZW5jZSxcbiAgICAgIHByb3BcbiAgICB9KTtcbiAgICBjb25zdCBjdXN0b21GaWVsZCQxID0gKG5ld0tleSwgaW5zdGFudGlhdG9yKSA9PiAoe1xuICAgICAgdGFnOiAnY3VzdG9tJyxcbiAgICAgIG5ld0tleSxcbiAgICAgIGluc3RhbnRpYXRvclxuICAgIH0pO1xuICAgIGNvbnN0IGZvbGQgPSAodmFsdWUsIGlmRmllbGQsIGlmQ3VzdG9tKSA9PiB7XG4gICAgICBzd2l0Y2ggKHZhbHVlLnRhZykge1xuICAgICAgY2FzZSAnZmllbGQnOlxuICAgICAgICByZXR1cm4gaWZGaWVsZCh2YWx1ZS5rZXksIHZhbHVlLm5ld0tleSwgdmFsdWUucHJlc2VuY2UsIHZhbHVlLnByb3ApO1xuICAgICAgY2FzZSAnY3VzdG9tJzpcbiAgICAgICAgcmV0dXJuIGlmQ3VzdG9tKHZhbHVlLm5ld0tleSwgdmFsdWUuaW5zdGFudGlhdG9yKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgc2hhbGxvdyQxID0gKG9sZCwgbnUpID0+IHtcbiAgICAgIHJldHVybiBudTtcbiAgICB9O1xuICAgIGNvbnN0IGRlZXAgPSAob2xkLCBudSkgPT4ge1xuICAgICAgY29uc3QgYm90aE9iamVjdHMgPSBpc1BsYWluT2JqZWN0KG9sZCkgJiYgaXNQbGFpbk9iamVjdChudSk7XG4gICAgICByZXR1cm4gYm90aE9iamVjdHMgPyBkZWVwTWVyZ2Uob2xkLCBudSkgOiBudTtcbiAgICB9O1xuICAgIGNvbnN0IGJhc2VNZXJnZSA9IG1lcmdlciA9PiB7XG4gICAgICByZXR1cm4gKC4uLm9iamVjdHMpID0+IHtcbiAgICAgICAgaWYgKG9iamVjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBtZXJnZSB6ZXJvIG9iamVjdHNgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXQgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBvYmplY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgY29uc3QgY3VyT2JqZWN0ID0gb2JqZWN0c1tqXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjdXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChoYXMkMihjdXJPYmplY3QsIGtleSkpIHtcbiAgICAgICAgICAgICAgcmV0W2tleV0gPSBtZXJnZXIocmV0W2tleV0sIGN1ck9iamVjdFtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBkZWVwTWVyZ2UgPSBiYXNlTWVyZ2UoZGVlcCk7XG4gICAgY29uc3QgbWVyZ2UkMSA9IGJhc2VNZXJnZShzaGFsbG93JDEpO1xuXG4gICAgY29uc3QgcmVxdWlyZWQkMiA9ICgpID0+ICh7XG4gICAgICB0YWc6ICdyZXF1aXJlZCcsXG4gICAgICBwcm9jZXNzOiB7fVxuICAgIH0pO1xuICAgIGNvbnN0IGRlZmF1bHRlZFRodW5rID0gZmFsbGJhY2tUaHVuayA9PiAoe1xuICAgICAgdGFnOiAnZGVmYXVsdGVkVGh1bmsnLFxuICAgICAgcHJvY2VzczogZmFsbGJhY2tUaHVua1xuICAgIH0pO1xuICAgIGNvbnN0IGRlZmF1bHRlZCQxID0gZmFsbGJhY2sgPT4gZGVmYXVsdGVkVGh1bmsoY29uc3RhbnQkMShmYWxsYmFjaykpO1xuICAgIGNvbnN0IGFzT3B0aW9uID0gKCkgPT4gKHtcbiAgICAgIHRhZzogJ29wdGlvbicsXG4gICAgICBwcm9jZXNzOiB7fVxuICAgIH0pO1xuICAgIGNvbnN0IG1lcmdlV2l0aFRodW5rID0gYmFzZVRodW5rID0+ICh7XG4gICAgICB0YWc6ICdtZXJnZVdpdGhUaHVuaycsXG4gICAgICBwcm9jZXNzOiBiYXNlVGh1bmtcbiAgICB9KTtcbiAgICBjb25zdCBtZXJnZVdpdGggPSBiYXNlID0+IG1lcmdlV2l0aFRodW5rKGNvbnN0YW50JDEoYmFzZSkpO1xuXG4gICAgY29uc3QgbWVyZ2VWYWx1ZXMkMSA9ICh2YWx1ZXMsIGJhc2UpID0+IHZhbHVlcy5sZW5ndGggPiAwID8gU2ltcGxlUmVzdWx0LnN2YWx1ZShkZWVwTWVyZ2UoYmFzZSwgbWVyZ2UkMS5hcHBseSh1bmRlZmluZWQsIHZhbHVlcykpKSA6IFNpbXBsZVJlc3VsdC5zdmFsdWUoYmFzZSk7XG4gICAgY29uc3QgbWVyZ2VFcnJvcnMkMSA9IGVycm9ycyA9PiBjb21wb3NlKFNpbXBsZVJlc3VsdC5zZXJyb3IsIGZsYXR0ZW4pKGVycm9ycyk7XG4gICAgY29uc3QgY29uc29saWRhdGVPYmogPSAob2JqZWN0cywgYmFzZSkgPT4ge1xuICAgICAgY29uc3QgcGFydGl0aW9uID0gU2ltcGxlUmVzdWx0LnBhcnRpdGlvbihvYmplY3RzKTtcbiAgICAgIHJldHVybiBwYXJ0aXRpb24uZXJyb3JzLmxlbmd0aCA+IDAgPyBtZXJnZUVycm9ycyQxKHBhcnRpdGlvbi5lcnJvcnMpIDogbWVyZ2VWYWx1ZXMkMShwYXJ0aXRpb24udmFsdWVzLCBiYXNlKTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbnNvbGlkYXRlQXJyID0gb2JqZWN0cyA9PiB7XG4gICAgICBjb25zdCBwYXJ0aXRpb25zID0gU2ltcGxlUmVzdWx0LnBhcnRpdGlvbihvYmplY3RzKTtcbiAgICAgIHJldHVybiBwYXJ0aXRpb25zLmVycm9ycy5sZW5ndGggPiAwID8gbWVyZ2VFcnJvcnMkMShwYXJ0aXRpb25zLmVycm9ycykgOiBTaW1wbGVSZXN1bHQuc3ZhbHVlKHBhcnRpdGlvbnMudmFsdWVzKTtcbiAgICB9O1xuICAgIGNvbnN0IFJlc3VsdENvbWJpbmUgPSB7XG4gICAgICBjb25zb2xpZGF0ZU9iaixcbiAgICAgIGNvbnNvbGlkYXRlQXJyXG4gICAgfTtcblxuICAgIGNvbnN0IGZvcm1hdE9iaiA9IGlucHV0ID0+IHtcbiAgICAgIHJldHVybiBpc09iamVjdChpbnB1dCkgJiYga2V5cyhpbnB1dCkubGVuZ3RoID4gMTAwID8gJyByZW1vdmVkIGR1ZSB0byBzaXplJyA6IEpTT04uc3RyaW5naWZ5KGlucHV0LCBudWxsLCAyKTtcbiAgICB9O1xuICAgIGNvbnN0IGZvcm1hdEVycm9ycyA9IGVycm9ycyA9PiB7XG4gICAgICBjb25zdCBlcyA9IGVycm9ycy5sZW5ndGggPiAxMCA/IGVycm9ycy5zbGljZSgwLCAxMCkuY29uY2F0KFt7XG4gICAgICAgICAgcGF0aDogW10sXG4gICAgICAgICAgZ2V0RXJyb3JJbmZvOiBjb25zdGFudCQxKCcuLi4gKG9ubHkgc2hvd2luZyBmaXJzdCB0ZW4gZmFpbHVyZXMpJylcbiAgICAgICAgfV0pIDogZXJyb3JzO1xuICAgICAgcmV0dXJuIG1hcCQyKGVzLCBlID0+IHtcbiAgICAgICAgcmV0dXJuICdGYWlsZWQgcGF0aDogKCcgKyBlLnBhdGguam9pbignID4gJykgKyAnKVxcbicgKyBlLmdldEVycm9ySW5mbygpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG51JGEgPSAocGF0aCwgZ2V0RXJyb3JJbmZvKSA9PiB7XG4gICAgICByZXR1cm4gU2ltcGxlUmVzdWx0LnNlcnJvcihbe1xuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgZ2V0RXJyb3JJbmZvXG4gICAgICAgIH1dKTtcbiAgICB9O1xuICAgIGNvbnN0IG1pc3NpbmdSZXF1aXJlZCA9IChwYXRoLCBrZXksIG9iaikgPT4gbnUkYShwYXRoLCAoKSA9PiAnQ291bGQgbm90IGZpbmQgdmFsaWQgKnJlcXVpcmVkKiB2YWx1ZSBmb3IgXCInICsga2V5ICsgJ1wiIGluICcgKyBmb3JtYXRPYmoob2JqKSk7XG4gICAgY29uc3QgbWlzc2luZ0tleSA9IChwYXRoLCBrZXkpID0+IG51JGEocGF0aCwgKCkgPT4gJ0Nob2ljZSBzY2hlbWEgZGlkIG5vdCBjb250YWluIGNob2ljZSBrZXk6IFwiJyArIGtleSArICdcIicpO1xuICAgIGNvbnN0IG1pc3NpbmdCcmFuY2ggPSAocGF0aCwgYnJhbmNoZXMsIGJyYW5jaCkgPT4gbnUkYShwYXRoLCAoKSA9PiAnVGhlIGNob3NlbiBzY2hlbWE6IFwiJyArIGJyYW5jaCArICdcIiBkaWQgbm90IGV4aXN0IGluIGJyYW5jaGVzOiAnICsgZm9ybWF0T2JqKGJyYW5jaGVzKSk7XG4gICAgY29uc3QgdW5zdXBwb3J0ZWRGaWVsZHMgPSAocGF0aCwgdW5zdXBwb3J0ZWQpID0+IG51JGEocGF0aCwgKCkgPT4gJ1RoZXJlIGFyZSB1bnN1cHBvcnRlZCBmaWVsZHM6IFsnICsgdW5zdXBwb3J0ZWQuam9pbignLCAnKSArICddIHNwZWNpZmllZCcpO1xuICAgIGNvbnN0IGN1c3RvbSA9IChwYXRoLCBlcnIpID0+IG51JGEocGF0aCwgY29uc3RhbnQkMShlcnIpKTtcblxuICAgIGNvbnN0IHZhbHVlJDMgPSB2YWxpZGF0b3IgPT4ge1xuICAgICAgY29uc3QgZXh0cmFjdCA9IChwYXRoLCB2YWwpID0+IHtcbiAgICAgICAgcmV0dXJuIFNpbXBsZVJlc3VsdC5iaW5kRXJyb3IodmFsaWRhdG9yKHZhbCksIGVyciA9PiBjdXN0b20ocGF0aCwgZXJyKSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdG9TdHJpbmcgPSBjb25zdGFudCQxKCd2YWwnKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4dHJhY3QsXG4gICAgICAgIHRvU3RyaW5nXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgYW55VmFsdWUkMSA9IHZhbHVlJDMoU2ltcGxlUmVzdWx0LnN2YWx1ZSk7XG5cbiAgICBjb25zdCByZXF1aXJlZEFjY2VzcyA9IChwYXRoLCBvYmosIGtleSwgYnVuZGxlKSA9PiBnZXQkZyhvYmosIGtleSkuZm9sZCgoKSA9PiBtaXNzaW5nUmVxdWlyZWQocGF0aCwga2V5LCBvYmopLCBidW5kbGUpO1xuICAgIGNvbnN0IGZhbGxiYWNrQWNjZXNzID0gKG9iaiwga2V5LCBmYWxsYmFjaywgYnVuZGxlKSA9PiB7XG4gICAgICBjb25zdCB2ID0gZ2V0JGcob2JqLCBrZXkpLmdldE9yVGh1bmsoKCkgPT4gZmFsbGJhY2sob2JqKSk7XG4gICAgICByZXR1cm4gYnVuZGxlKHYpO1xuICAgIH07XG4gICAgY29uc3Qgb3B0aW9uQWNjZXNzID0gKG9iaiwga2V5LCBidW5kbGUpID0+IGJ1bmRsZShnZXQkZyhvYmosIGtleSkpO1xuICAgIGNvbnN0IG9wdGlvbkRlZmF1bHRlZEFjY2VzcyA9IChvYmosIGtleSwgZmFsbGJhY2ssIGJ1bmRsZSkgPT4ge1xuICAgICAgY29uc3Qgb3B0ID0gZ2V0JGcob2JqLCBrZXkpLm1hcCh2YWwgPT4gdmFsID09PSB0cnVlID8gZmFsbGJhY2sob2JqKSA6IHZhbCk7XG4gICAgICByZXR1cm4gYnVuZGxlKG9wdCk7XG4gICAgfTtcbiAgICBjb25zdCBleHRyYWN0RmllbGQgPSAoZmllbGQsIHBhdGgsIG9iaiwga2V5LCBwcm9wKSA9PiB7XG4gICAgICBjb25zdCBidW5kbGUgPSBhdiA9PiBwcm9wLmV4dHJhY3QocGF0aC5jb25jYXQoW2tleV0pLCBhdik7XG4gICAgICBjb25zdCBidW5kbGVBc09wdGlvbiA9IG9wdFZhbHVlID0+IG9wdFZhbHVlLmZvbGQoKCkgPT4gU2ltcGxlUmVzdWx0LnN2YWx1ZShPcHRpb25hbC5ub25lKCkpLCBvdiA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHByb3AuZXh0cmFjdChwYXRoLmNvbmNhdChba2V5XSksIG92KTtcbiAgICAgICAgcmV0dXJuIFNpbXBsZVJlc3VsdC5tYXAocmVzdWx0LCBPcHRpb25hbC5zb21lKTtcbiAgICAgIH0pO1xuICAgICAgc3dpdGNoIChmaWVsZC50YWcpIHtcbiAgICAgIGNhc2UgJ3JlcXVpcmVkJzpcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVkQWNjZXNzKHBhdGgsIG9iaiwga2V5LCBidW5kbGUpO1xuICAgICAgY2FzZSAnZGVmYXVsdGVkVGh1bmsnOlxuICAgICAgICByZXR1cm4gZmFsbGJhY2tBY2Nlc3Mob2JqLCBrZXksIGZpZWxkLnByb2Nlc3MsIGJ1bmRsZSk7XG4gICAgICBjYXNlICdvcHRpb24nOlxuICAgICAgICByZXR1cm4gb3B0aW9uQWNjZXNzKG9iaiwga2V5LCBidW5kbGVBc09wdGlvbik7XG4gICAgICBjYXNlICdkZWZhdWx0ZWRPcHRpb25UaHVuayc6XG4gICAgICAgIHJldHVybiBvcHRpb25EZWZhdWx0ZWRBY2Nlc3Mob2JqLCBrZXksIGZpZWxkLnByb2Nlc3MsIGJ1bmRsZUFzT3B0aW9uKTtcbiAgICAgIGNhc2UgJ21lcmdlV2l0aFRodW5rJzoge1xuICAgICAgICAgIHJldHVybiBmYWxsYmFja0FjY2VzcyhvYmosIGtleSwgY29uc3RhbnQkMSh7fSksIHYgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVlcE1lcmdlKGZpZWxkLnByb2Nlc3Mob2JqKSwgdik7XG4gICAgICAgICAgICByZXR1cm4gYnVuZGxlKHJlc3VsdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGV4dHJhY3RGaWVsZHMgPSAocGF0aCwgb2JqLCBmaWVsZHMpID0+IHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB7fTtcbiAgICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgZm9sZChmaWVsZCwgKGtleSwgbmV3S2V5LCBwcmVzZW5jZSwgcHJvcCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3RGaWVsZChwcmVzZW5jZSwgcGF0aCwgb2JqLCBrZXksIHByb3ApO1xuICAgICAgICAgIFNpbXBsZVJlc3VsdC5mb2xkKHJlc3VsdCwgZXJyID0+IHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKC4uLmVycik7XG4gICAgICAgICAgfSwgcmVzID0+IHtcbiAgICAgICAgICAgIHN1Y2Nlc3NbbmV3S2V5XSA9IHJlcztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgKG5ld0tleSwgaW5zdGFudGlhdG9yKSA9PiB7XG4gICAgICAgICAgc3VjY2Vzc1tuZXdLZXldID0gaW5zdGFudGlhdG9yKG9iaik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVycm9ycy5sZW5ndGggPiAwID8gU2ltcGxlUmVzdWx0LnNlcnJvcihlcnJvcnMpIDogU2ltcGxlUmVzdWx0LnN2YWx1ZShzdWNjZXNzKTtcbiAgICB9O1xuICAgIGNvbnN0IHZhbHVlVGh1bmsgPSBnZXREZWxlZ2F0ZSA9PiB7XG4gICAgICBjb25zdCBleHRyYWN0ID0gKHBhdGgsIHZhbCkgPT4gZ2V0RGVsZWdhdGUoKS5leHRyYWN0KHBhdGgsIHZhbCk7XG4gICAgICBjb25zdCB0b1N0cmluZyA9ICgpID0+IGdldERlbGVnYXRlKCkudG9TdHJpbmcoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4dHJhY3QsXG4gICAgICAgIHRvU3RyaW5nXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZ2V0U2V0S2V5cyA9IG9iaiA9PiBrZXlzKGZpbHRlciQxKG9iaiwgaXNOb25OdWxsYWJsZSkpO1xuICAgIGNvbnN0IG9iak9mT25seSA9IGZpZWxkcyA9PiB7XG4gICAgICBjb25zdCBkZWxlZ2F0ZSA9IG9iak9mKGZpZWxkcyk7XG4gICAgICBjb25zdCBmaWVsZE5hbWVzID0gZm9sZHIoZmllbGRzLCAoYWNjLCB2YWx1ZSkgPT4ge1xuICAgICAgICByZXR1cm4gZm9sZCh2YWx1ZSwga2V5ID0+IGRlZXBNZXJnZShhY2MsIHsgW2tleV06IHRydWUgfSksIGNvbnN0YW50JDEoYWNjKSk7XG4gICAgICB9LCB7fSk7XG4gICAgICBjb25zdCBleHRyYWN0ID0gKHBhdGgsIG8pID0+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGlzQm9vbGVhbihvKSA/IFtdIDogZ2V0U2V0S2V5cyhvKTtcbiAgICAgICAgY29uc3QgZXh0cmEgPSBmaWx0ZXIkMihrZXlzLCBrID0+ICFoYXNOb25OdWxsYWJsZUtleShmaWVsZE5hbWVzLCBrKSk7XG4gICAgICAgIHJldHVybiBleHRyYS5sZW5ndGggPT09IDAgPyBkZWxlZ2F0ZS5leHRyYWN0KHBhdGgsIG8pIDogdW5zdXBwb3J0ZWRGaWVsZHMocGF0aCwgZXh0cmEpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4dHJhY3QsXG4gICAgICAgIHRvU3RyaW5nOiBkZWxlZ2F0ZS50b1N0cmluZ1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG9iak9mID0gdmFsdWVzID0+IHtcbiAgICAgIGNvbnN0IGV4dHJhY3QgPSAocGF0aCwgbykgPT4gZXh0cmFjdEZpZWxkcyhwYXRoLCBvLCB2YWx1ZXMpO1xuICAgICAgY29uc3QgdG9TdHJpbmcgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkU3RyaW5ncyA9IG1hcCQyKHZhbHVlcywgdmFsdWUgPT4gZm9sZCh2YWx1ZSwgKGtleSwgX29rZXksIF9wcmVzZW5jZSwgcHJvcCkgPT4ga2V5ICsgJyAtPiAnICsgcHJvcC50b1N0cmluZygpLCAobmV3S2V5LCBfaW5zdGFudGlhdG9yKSA9PiAnc3RhdGUoJyArIG5ld0tleSArICcpJykpO1xuICAgICAgICByZXR1cm4gJ29iantcXG4nICsgZmllbGRTdHJpbmdzLmpvaW4oJ1xcbicpICsgJ30nO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4dHJhY3QsXG4gICAgICAgIHRvU3RyaW5nXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgYXJyT2YgPSBwcm9wID0+IHtcbiAgICAgIGNvbnN0IGV4dHJhY3QgPSAocGF0aCwgYXJyYXkpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IG1hcCQyKGFycmF5LCAoYSwgaSkgPT4gcHJvcC5leHRyYWN0KHBhdGguY29uY2F0KFsnWycgKyBpICsgJ10nXSksIGEpKTtcbiAgICAgICAgcmV0dXJuIFJlc3VsdENvbWJpbmUuY29uc29saWRhdGVBcnIocmVzdWx0cyk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdG9TdHJpbmcgPSAoKSA9PiAnYXJyYXkoJyArIHByb3AudG9TdHJpbmcoKSArICcpJztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4dHJhY3QsXG4gICAgICAgIHRvU3RyaW5nXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3Qgb25lT2YgPSAocHJvcHMsIHJhd0YpID0+IHtcbiAgICAgIGNvbnN0IGYgPSByYXdGICE9PSB1bmRlZmluZWQgPyByYXdGIDogaWRlbnRpdHk7XG4gICAgICBjb25zdCBleHRyYWN0ID0gKHBhdGgsIHZhbCkgPT4ge1xuICAgICAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BzKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gcHJvcC5leHRyYWN0KHBhdGgsIHZhbCk7XG4gICAgICAgICAgaWYgKHJlcy5zdHlwZSA9PT0gU2ltcGxlUmVzdWx0VHlwZS5WYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3R5cGU6IFNpbXBsZVJlc3VsdFR5cGUuVmFsdWUsXG4gICAgICAgICAgICAgIHN2YWx1ZTogZihyZXMuc3ZhbHVlKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3JzLnB1c2gocmVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUmVzdWx0Q29tYmluZS5jb25zb2xpZGF0ZUFycihlcnJvcnMpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHRvU3RyaW5nID0gKCkgPT4gJ29uZU9mKCcgKyBtYXAkMihwcm9wcywgcHJvcCA9PiBwcm9wLnRvU3RyaW5nKCkpLmpvaW4oJywgJykgKyAnKSc7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBleHRyYWN0LFxuICAgICAgICB0b1N0cmluZ1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHNldE9mJDEgPSAodmFsaWRhdG9yLCBwcm9wKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZUtleXMgPSAocGF0aCwga2V5cykgPT4gYXJyT2YodmFsdWUkMyh2YWxpZGF0b3IpKS5leHRyYWN0KHBhdGgsIGtleXMpO1xuICAgICAgY29uc3QgZXh0cmFjdCA9IChwYXRoLCBvKSA9PiB7XG4gICAgICAgIGNvbnN0IGtleXMkMSA9IGtleXMobyk7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZEtleXMgPSB2YWxpZGF0ZUtleXMocGF0aCwga2V5cyQxKTtcbiAgICAgICAgcmV0dXJuIFNpbXBsZVJlc3VsdC5iaW5kKHZhbGlkYXRlZEtleXMsIHZhbGlkS2V5cyA9PiB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hID0gbWFwJDIodmFsaWRLZXlzLCB2ayA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZmllbGQkMih2aywgdmssIHJlcXVpcmVkJDIoKSwgcHJvcCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIG9iak9mKHNjaGVtYSkuZXh0cmFjdChwYXRoLCBvKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdG9TdHJpbmcgPSAoKSA9PiAnc2V0T2YoJyArIHByb3AudG9TdHJpbmcoKSArICcpJztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4dHJhY3QsXG4gICAgICAgIHRvU3RyaW5nXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgdGh1bmsgPSAoX2Rlc2MsIHByb2Nlc3NvcikgPT4ge1xuICAgICAgY29uc3QgZ2V0UCA9IGNhY2hlZChwcm9jZXNzb3IpO1xuICAgICAgY29uc3QgZXh0cmFjdCA9IChwYXRoLCB2YWwpID0+IGdldFAoKS5leHRyYWN0KHBhdGgsIHZhbCk7XG4gICAgICBjb25zdCB0b1N0cmluZyA9ICgpID0+IGdldFAoKS50b1N0cmluZygpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXh0cmFjdCxcbiAgICAgICAgdG9TdHJpbmdcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBhcnJPZk9iaiA9IGNvbXBvc2UoYXJyT2YsIG9iak9mKTtcblxuICAgIGNvbnN0IGFueVZhbHVlID0gY29uc3RhbnQkMShhbnlWYWx1ZSQxKTtcbiAgICBjb25zdCB0eXBlZFZhbHVlID0gKHZhbGlkYXRvciwgZXhwZWN0ZWRUeXBlKSA9PiB2YWx1ZSQzKGEgPT4ge1xuICAgICAgY29uc3QgYWN0dWFsVHlwZSA9IHR5cGVvZiBhO1xuICAgICAgcmV0dXJuIHZhbGlkYXRvcihhKSA/IFNpbXBsZVJlc3VsdC5zdmFsdWUoYSkgOiBTaW1wbGVSZXN1bHQuc2Vycm9yKGBFeHBlY3RlZCB0eXBlOiAkeyBleHBlY3RlZFR5cGUgfSBidXQgZ290OiAkeyBhY3R1YWxUeXBlIH1gKTtcbiAgICB9KTtcbiAgICBjb25zdCBudW1iZXIgPSB0eXBlZFZhbHVlKGlzTnVtYmVyLCAnbnVtYmVyJyk7XG4gICAgY29uc3Qgc3RyaW5nID0gdHlwZWRWYWx1ZShpc1N0cmluZywgJ3N0cmluZycpO1xuICAgIGNvbnN0IGJvb2xlYW4gPSB0eXBlZFZhbHVlKGlzQm9vbGVhbiwgJ2Jvb2xlYW4nKTtcbiAgICBjb25zdCBmdW5jdGlvblByb2Nlc3NvciA9IHR5cGVkVmFsdWUoaXNGdW5jdGlvbiwgJ2Z1bmN0aW9uJyk7XG4gICAgY29uc3QgaXNQb3N0TWVzc2FnZWFibGUgPSB2YWwgPT4ge1xuICAgICAgaWYgKE9iamVjdCh2YWwpICE9PSB2YWwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHt9LnRvU3RyaW5nLmNhbGwodmFsKS5zbGljZSg4LCAtMSkpIHtcbiAgICAgIGNhc2UgJ0Jvb2xlYW4nOlxuICAgICAgY2FzZSAnTnVtYmVyJzpcbiAgICAgIGNhc2UgJ1N0cmluZyc6XG4gICAgICBjYXNlICdEYXRlJzpcbiAgICAgIGNhc2UgJ1JlZ0V4cCc6XG4gICAgICBjYXNlICdCbG9iJzpcbiAgICAgIGNhc2UgJ0ZpbGVMaXN0JzpcbiAgICAgIGNhc2UgJ0ltYWdlRGF0YSc6XG4gICAgICBjYXNlICdJbWFnZUJpdG1hcCc6XG4gICAgICBjYXNlICdBcnJheUJ1ZmZlcic6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnQXJyYXknOlxuICAgICAgY2FzZSAnT2JqZWN0JzpcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbCkuZXZlcnkocHJvcCA9PiBpc1Bvc3RNZXNzYWdlYWJsZSh2YWxbcHJvcF0pKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHBvc3RNZXNzYWdlYWJsZSA9IHZhbHVlJDMoYSA9PiB7XG4gICAgICBpZiAoaXNQb3N0TWVzc2FnZWFibGUoYSkpIHtcbiAgICAgICAgcmV0dXJuIFNpbXBsZVJlc3VsdC5zdmFsdWUoYSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gU2ltcGxlUmVzdWx0LnNlcnJvcignRXhwZWN0ZWQgdmFsdWUgdG8gYmUgYWNjZXB0YWJsZSBmb3Igc2VuZGluZyB2aWEgcG9zdE1lc3NhZ2UnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGNob29zZUZyb20gPSAocGF0aCwgaW5wdXQsIGJyYW5jaGVzLCBjaCkgPT4ge1xuICAgICAgY29uc3QgZmllbGRzID0gZ2V0JGcoYnJhbmNoZXMsIGNoKTtcbiAgICAgIHJldHVybiBmaWVsZHMuZm9sZCgoKSA9PiBtaXNzaW5nQnJhbmNoKHBhdGgsIGJyYW5jaGVzLCBjaCksIHZwID0+IHZwLmV4dHJhY3QocGF0aC5jb25jYXQoWydicmFuY2g6ICcgKyBjaF0pLCBpbnB1dCkpO1xuICAgIH07XG4gICAgY29uc3QgY2hvb3NlJDIgPSAoa2V5LCBicmFuY2hlcykgPT4ge1xuICAgICAgY29uc3QgZXh0cmFjdCA9IChwYXRoLCBpbnB1dCkgPT4ge1xuICAgICAgICBjb25zdCBjaG9pY2UgPSBnZXQkZyhpbnB1dCwga2V5KTtcbiAgICAgICAgcmV0dXJuIGNob2ljZS5mb2xkKCgpID0+IG1pc3NpbmdLZXkocGF0aCwga2V5KSwgY2hvc2VuID0+IGNob29zZUZyb20ocGF0aCwgaW5wdXQsIGJyYW5jaGVzLCBjaG9zZW4pKTtcbiAgICAgIH07XG4gICAgICBjb25zdCB0b1N0cmluZyA9ICgpID0+ICdjaG9vc2VPbignICsga2V5ICsgJykuIFBvc3NpYmxlIHZhbHVlczogJyArIGtleXMoYnJhbmNoZXMpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXh0cmFjdCxcbiAgICAgICAgdG9TdHJpbmdcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGFyck9mVmFsID0gKCkgPT4gYXJyT2YoYW55VmFsdWUkMSk7XG4gICAgY29uc3QgdmFsdWVPZiA9IHZhbGlkYXRvciA9PiB2YWx1ZSQzKHYgPT4gdmFsaWRhdG9yKHYpLmZvbGQoU2ltcGxlUmVzdWx0LnNlcnJvciwgU2ltcGxlUmVzdWx0LnN2YWx1ZSkpO1xuICAgIGNvbnN0IHNldE9mID0gKHZhbGlkYXRvciwgcHJvcCkgPT4gc2V0T2YkMSh2ID0+IFNpbXBsZVJlc3VsdC5mcm9tUmVzdWx0KHZhbGlkYXRvcih2KSksIHByb3ApO1xuICAgIGNvbnN0IGV4dHJhY3RWYWx1ZSA9IChsYWJlbCwgcHJvcCwgb2JqKSA9PiB7XG4gICAgICBjb25zdCByZXMgPSBwcm9wLmV4dHJhY3QoW2xhYmVsXSwgb2JqKTtcbiAgICAgIHJldHVybiBTaW1wbGVSZXN1bHQubWFwRXJyb3IocmVzLCBlcnJzID0+ICh7XG4gICAgICAgIGlucHV0OiBvYmosXG4gICAgICAgIGVycm9yczogZXJyc1xuICAgICAgfSkpO1xuICAgIH07XG4gICAgY29uc3QgYXNSYXcgPSAobGFiZWwsIHByb3AsIG9iaikgPT4gU2ltcGxlUmVzdWx0LnRvUmVzdWx0KGV4dHJhY3RWYWx1ZShsYWJlbCwgcHJvcCwgb2JqKSk7XG4gICAgY29uc3QgZ2V0T3JEaWUgPSBleHRyYWN0aW9uID0+IHtcbiAgICAgIHJldHVybiBleHRyYWN0aW9uLmZvbGQoZXJySW5mbyA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihmb3JtYXRFcnJvcihlcnJJbmZvKSk7XG4gICAgICB9LCBpZGVudGl0eSk7XG4gICAgfTtcbiAgICBjb25zdCBhc1Jhd09yRGllJDEgPSAobGFiZWwsIHByb3AsIG9iaikgPT4gZ2V0T3JEaWUoYXNSYXcobGFiZWwsIHByb3AsIG9iaikpO1xuICAgIGNvbnN0IGZvcm1hdEVycm9yID0gZXJySW5mbyA9PiB7XG4gICAgICByZXR1cm4gJ0Vycm9yczogXFxuJyArIGZvcm1hdEVycm9ycyhlcnJJbmZvLmVycm9ycykuam9pbignXFxuJykgKyAnXFxuXFxuSW5wdXQgb2JqZWN0OiAnICsgZm9ybWF0T2JqKGVyckluZm8uaW5wdXQpO1xuICAgIH07XG4gICAgY29uc3QgY2hvb3NlJDEgPSAoa2V5LCBicmFuY2hlcykgPT4gY2hvb3NlJDIoa2V5LCBtYXAkMShicmFuY2hlcywgb2JqT2YpKTtcbiAgICBjb25zdCB0aHVua09mID0gKGRlc2MsIHNjaGVtYSkgPT4gdGh1bmsoZGVzYywgc2NoZW1hKTtcblxuICAgIGNvbnN0IGZpZWxkJDEgPSBmaWVsZCQyO1xuICAgIGNvbnN0IGN1c3RvbUZpZWxkID0gY3VzdG9tRmllbGQkMTtcbiAgICBjb25zdCB2YWxpZGF0ZUVudW0gPSB2YWx1ZXMgPT4gdmFsdWVPZih2YWx1ZSA9PiBjb250YWlucyQyKHZhbHVlcywgdmFsdWUpID8gUmVzdWx0LnZhbHVlKHZhbHVlKSA6IFJlc3VsdC5lcnJvcihgVW5zdXBwb3J0ZWQgdmFsdWU6IFwiJHsgdmFsdWUgfVwiLCBjaG9vc2Ugb25lIG9mIFwiJHsgdmFsdWVzLmpvaW4oJywgJykgfVwiLmApKTtcbiAgICBjb25zdCByZXF1aXJlZCQxID0ga2V5ID0+IGZpZWxkJDEoa2V5LCBrZXksIHJlcXVpcmVkJDIoKSwgYW55VmFsdWUoKSk7XG4gICAgY29uc3QgcmVxdWlyZWRPZiA9IChrZXksIHNjaGVtYSkgPT4gZmllbGQkMShrZXksIGtleSwgcmVxdWlyZWQkMigpLCBzY2hlbWEpO1xuICAgIGNvbnN0IHJlcXVpcmVkTnVtYmVyID0ga2V5ID0+IHJlcXVpcmVkT2Yoa2V5LCBudW1iZXIpO1xuICAgIGNvbnN0IHJlcXVpcmVkU3RyaW5nID0ga2V5ID0+IHJlcXVpcmVkT2Yoa2V5LCBzdHJpbmcpO1xuICAgIGNvbnN0IHJlcXVpcmVkU3RyaW5nRW51bSA9IChrZXksIHZhbHVlcykgPT4gZmllbGQkMShrZXksIGtleSwgcmVxdWlyZWQkMigpLCB2YWxpZGF0ZUVudW0odmFsdWVzKSk7XG4gICAgY29uc3QgcmVxdWlyZWRCb29sZWFuID0ga2V5ID0+IHJlcXVpcmVkT2Yoa2V5LCBib29sZWFuKTtcbiAgICBjb25zdCByZXF1aXJlZEZ1bmN0aW9uID0ga2V5ID0+IHJlcXVpcmVkT2Yoa2V5LCBmdW5jdGlvblByb2Nlc3Nvcik7XG4gICAgY29uc3QgZm9yYmlkID0gKGtleSwgbWVzc2FnZSkgPT4gZmllbGQkMShrZXksIGtleSwgYXNPcHRpb24oKSwgdmFsdWUkMyhfdiA9PiBTaW1wbGVSZXN1bHQuc2Vycm9yKCdUaGUgZmllbGQ6ICcgKyBrZXkgKyAnIGlzIGZvcmJpZGRlbi4gJyArIG1lc3NhZ2UpKSk7XG4gICAgY29uc3QgcmVxdWlyZWRPYmpPZiA9IChrZXksIG9ialNjaGVtYSkgPT4gZmllbGQkMShrZXksIGtleSwgcmVxdWlyZWQkMigpLCBvYmpPZihvYmpTY2hlbWEpKTtcbiAgICBjb25zdCByZXF1aXJlZEFycmF5T2ZPYmogPSAoa2V5LCBvYmpGaWVsZHMpID0+IGZpZWxkJDEoa2V5LCBrZXksIHJlcXVpcmVkJDIoKSwgYXJyT2ZPYmoob2JqRmllbGRzKSk7XG4gICAgY29uc3QgcmVxdWlyZWRBcnJheU9mID0gKGtleSwgc2NoZW1hKSA9PiBmaWVsZCQxKGtleSwga2V5LCByZXF1aXJlZCQyKCksIGFyck9mKHNjaGVtYSkpO1xuICAgIGNvbnN0IG9wdGlvbiQzID0ga2V5ID0+IGZpZWxkJDEoa2V5LCBrZXksIGFzT3B0aW9uKCksIGFueVZhbHVlKCkpO1xuICAgIGNvbnN0IG9wdGlvbk9mID0gKGtleSwgc2NoZW1hKSA9PiBmaWVsZCQxKGtleSwga2V5LCBhc09wdGlvbigpLCBzY2hlbWEpO1xuICAgIGNvbnN0IG9wdGlvbk51bWJlciA9IGtleSA9PiBvcHRpb25PZihrZXksIG51bWJlcik7XG4gICAgY29uc3Qgb3B0aW9uU3RyaW5nID0ga2V5ID0+IG9wdGlvbk9mKGtleSwgc3RyaW5nKTtcbiAgICBjb25zdCBvcHRpb25TdHJpbmdFbnVtID0gKGtleSwgdmFsdWVzKSA9PiBvcHRpb25PZihrZXksIHZhbGlkYXRlRW51bSh2YWx1ZXMpKTtcbiAgICBjb25zdCBvcHRpb25GdW5jdGlvbiA9IGtleSA9PiBvcHRpb25PZihrZXksIGZ1bmN0aW9uUHJvY2Vzc29yKTtcbiAgICBjb25zdCBvcHRpb25BcnJheU9mID0gKGtleSwgc2NoZW1hKSA9PiBvcHRpb25PZihrZXksIGFyck9mKHNjaGVtYSkpO1xuICAgIGNvbnN0IG9wdGlvbk9iak9mID0gKGtleSwgb2JqU2NoZW1hKSA9PiBvcHRpb25PZihrZXksIG9iak9mKG9ialNjaGVtYSkpO1xuICAgIGNvbnN0IG9wdGlvbk9iak9mT25seSA9IChrZXksIG9ialNjaGVtYSkgPT4gb3B0aW9uT2Yoa2V5LCBvYmpPZk9ubHkob2JqU2NoZW1hKSk7XG4gICAgY29uc3QgZGVmYXVsdGVkID0gKGtleSwgZmFsbGJhY2spID0+IGZpZWxkJDEoa2V5LCBrZXksIGRlZmF1bHRlZCQxKGZhbGxiYWNrKSwgYW55VmFsdWUoKSk7XG4gICAgY29uc3QgZGVmYXVsdGVkT2YgPSAoa2V5LCBmYWxsYmFjaywgc2NoZW1hKSA9PiBmaWVsZCQxKGtleSwga2V5LCBkZWZhdWx0ZWQkMShmYWxsYmFjayksIHNjaGVtYSk7XG4gICAgY29uc3QgZGVmYXVsdGVkTnVtYmVyID0gKGtleSwgZmFsbGJhY2spID0+IGRlZmF1bHRlZE9mKGtleSwgZmFsbGJhY2ssIG51bWJlcik7XG4gICAgY29uc3QgZGVmYXVsdGVkU3RyaW5nID0gKGtleSwgZmFsbGJhY2spID0+IGRlZmF1bHRlZE9mKGtleSwgZmFsbGJhY2ssIHN0cmluZyk7XG4gICAgY29uc3QgZGVmYXVsdGVkU3RyaW5nRW51bSA9IChrZXksIGZhbGxiYWNrLCB2YWx1ZXMpID0+IGRlZmF1bHRlZE9mKGtleSwgZmFsbGJhY2ssIHZhbGlkYXRlRW51bSh2YWx1ZXMpKTtcbiAgICBjb25zdCBkZWZhdWx0ZWRCb29sZWFuID0gKGtleSwgZmFsbGJhY2spID0+IGRlZmF1bHRlZE9mKGtleSwgZmFsbGJhY2ssIGJvb2xlYW4pO1xuICAgIGNvbnN0IGRlZmF1bHRlZEZ1bmN0aW9uID0gKGtleSwgZmFsbGJhY2spID0+IGRlZmF1bHRlZE9mKGtleSwgZmFsbGJhY2ssIGZ1bmN0aW9uUHJvY2Vzc29yKTtcbiAgICBjb25zdCBkZWZhdWx0ZWRQb3N0TXNnID0gKGtleSwgZmFsbGJhY2spID0+IGRlZmF1bHRlZE9mKGtleSwgZmFsbGJhY2ssIHBvc3RNZXNzYWdlYWJsZSk7XG4gICAgY29uc3QgZGVmYXVsdGVkQXJyYXlPZiA9IChrZXksIGZhbGxiYWNrLCBzY2hlbWEpID0+IGRlZmF1bHRlZE9mKGtleSwgZmFsbGJhY2ssIGFyck9mKHNjaGVtYSkpO1xuICAgIGNvbnN0IGRlZmF1bHRlZE9iak9mID0gKGtleSwgZmFsbGJhY2ssIG9ialNjaGVtYSkgPT4gZGVmYXVsdGVkT2Yoa2V5LCBmYWxsYmFjaywgb2JqT2Yob2JqU2NoZW1hKSk7XG5cbiAgICBjb25zdCBDZWxsID0gaW5pdGlhbCA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBpbml0aWFsO1xuICAgICAgY29uc3QgZ2V0ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0ID0gdiA9PiB7XG4gICAgICAgIHZhbHVlID0gdjtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBnZXQsXG4gICAgICAgIHNldFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2VuZXJhdGUkNyA9IGNhc2VzID0+IHtcbiAgICAgIGlmICghaXNBcnJheShjYXNlcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYXNlcyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICB9XG4gICAgICBpZiAoY2FzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgY2FzZScpO1xuICAgICAgfVxuICAgICAgY29uc3QgY29uc3RydWN0b3JzID0gW107XG4gICAgICBjb25zdCBhZHQgPSB7fTtcbiAgICAgIGVhY2gkMShjYXNlcywgKGFjYXNlLCBjb3VudCkgPT4ge1xuICAgICAgICBjb25zdCBrZXlzJDEgPSBrZXlzKGFjYXNlKTtcbiAgICAgICAgaWYgKGtleXMkMS5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ29uZSBhbmQgb25seSBvbmUgbmFtZSBwZXIgY2FzZScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXMkMVswXTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBhY2FzZVtrZXldO1xuICAgICAgICBpZiAoYWR0W2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZHVwbGljYXRlIGtleSBkZXRlY3RlZDonICsga2V5KTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdjYXRhJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IGhhdmUgYSBjYXNlIG5hbWVkIGNhdGEgKHNvcnJ5KScpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2FzZSBhcmd1bWVudHMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdG9ycy5wdXNoKGtleSk7XG4gICAgICAgIGFkdFtrZXldID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICBjb25zdCBhcmdMZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgICAgICAgICBpZiAoYXJnTGVuZ3RoICE9PSB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBjYXNlICcgKyBrZXkgKyAnLiBFeHBlY3RlZCAnICsgdmFsdWUubGVuZ3RoICsgJyAoJyArIHZhbHVlICsgJyksIGdvdCAnICsgYXJnTGVuZ3RoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgbWF0Y2ggPSBicmFuY2hlcyA9PiB7XG4gICAgICAgICAgICBjb25zdCBicmFuY2hLZXlzID0ga2V5cyhicmFuY2hlcyk7XG4gICAgICAgICAgICBpZiAoY29uc3RydWN0b3JzLmxlbmd0aCAhPT0gYnJhbmNoS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIHRvIG1hdGNoLiBFeHBlY3RlZDogJyArIGNvbnN0cnVjdG9ycy5qb2luKCcsJykgKyAnXFxuQWN0dWFsOiAnICsgYnJhbmNoS2V5cy5qb2luKCcsJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWxsUmVxZCA9IGZvcmFsbChjb25zdHJ1Y3RvcnMsIHJlcUtleSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBjb250YWlucyQyKGJyYW5jaEtleXMsIHJlcUtleSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghYWxsUmVxZCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhbGwgYnJhbmNoZXMgd2VyZSBzcGVjaWZpZWQgd2hlbiB1c2luZyBtYXRjaC4gU3BlY2lmaWVkOiAnICsgYnJhbmNoS2V5cy5qb2luKCcsICcpICsgJ1xcblJlcXVpcmVkOiAnICsgY29uc3RydWN0b3JzLmpvaW4oJywgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJyYW5jaGVzW2tleV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZm9sZDogKC4uLmZvbGRBcmdzKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChmb2xkQXJncy5sZW5ndGggIT09IGNhc2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBmb2xkLiBFeHBlY3RlZCAnICsgY2FzZXMubGVuZ3RoICsgJywgZ290ICcgKyBmb2xkQXJncy5sZW5ndGgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGZvbGRBcmdzW2NvdW50XTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXRjaCxcbiAgICAgICAgICAgIGxvZzogbGFiZWwgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsYWJlbCwge1xuICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9ycyxcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvcjoga2V5LFxuICAgICAgICAgICAgICAgIHBhcmFtczogYXJnc1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWR0O1xuICAgIH07XG4gICAgY29uc3QgQWR0ID0geyBnZW5lcmF0ZTogZ2VuZXJhdGUkNyB9O1xuXG4gICAgQWR0LmdlbmVyYXRlKFtcbiAgICAgIHtcbiAgICAgICAgYm90aEVycm9yczogW1xuICAgICAgICAgICdlcnJvcjEnLFxuICAgICAgICAgICdlcnJvcjInXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGZpcnN0RXJyb3I6IFtcbiAgICAgICAgICAnZXJyb3IxJyxcbiAgICAgICAgICAndmFsdWUyJ1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzZWNvbmRFcnJvcjogW1xuICAgICAgICAgICd2YWx1ZTEnLFxuICAgICAgICAgICdlcnJvcjInXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJvdGhWYWx1ZXM6IFtcbiAgICAgICAgICAndmFsdWUxJyxcbiAgICAgICAgICAndmFsdWUyJ1xuICAgICAgICBdXG4gICAgICB9XG4gICAgXSk7XG4gICAgY29uc3QgcGFydGl0aW9uJDEgPSByZXN1bHRzID0+IHtcbiAgICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgICAgY29uc3QgdmFsdWVzID0gW107XG4gICAgICBlYWNoJDEocmVzdWx0cywgcmVzdWx0ID0+IHtcbiAgICAgICAgcmVzdWx0LmZvbGQoZXJyID0+IHtcbiAgICAgICAgICBlcnJvcnMucHVzaChlcnIpO1xuICAgICAgICB9LCB2YWx1ZSA9PiB7XG4gICAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXJyb3JzLFxuICAgICAgICB2YWx1ZXNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGV4Y2x1ZGUkMSA9IChvYmosIGZpZWxkcykgPT4ge1xuICAgICAgY29uc3QgciA9IHt9O1xuICAgICAgZWFjaChvYmosICh2LCBrKSA9PiB7XG4gICAgICAgIGlmICghY29udGFpbnMkMihmaWVsZHMsIGspKSB7XG4gICAgICAgICAgcltrXSA9IHY7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIGNvbnN0IHdyYXAkMiA9IChrZXksIHZhbHVlKSA9PiAoeyBba2V5XTogdmFsdWUgfSk7XG4gICAgY29uc3Qgd3JhcEFsbCQxID0ga2V5dmFsdWVzID0+IHtcbiAgICAgIGNvbnN0IHIgPSB7fTtcbiAgICAgIGVhY2gkMShrZXl2YWx1ZXMsIGt2ID0+IHtcbiAgICAgICAgcltrdi5rZXldID0ga3YudmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG5cbiAgICBjb25zdCBleGNsdWRlID0gKG9iaiwgZmllbGRzKSA9PiBleGNsdWRlJDEob2JqLCBmaWVsZHMpO1xuICAgIGNvbnN0IHdyYXAkMSA9IChrZXksIHZhbHVlKSA9PiB3cmFwJDIoa2V5LCB2YWx1ZSk7XG4gICAgY29uc3Qgd3JhcEFsbCA9IGtleXZhbHVlcyA9PiB3cmFwQWxsJDEoa2V5dmFsdWVzKTtcbiAgICBjb25zdCBtZXJnZVZhbHVlcyA9ICh2YWx1ZXMsIGJhc2UpID0+IHtcbiAgICAgIHJldHVybiB2YWx1ZXMubGVuZ3RoID09PSAwID8gUmVzdWx0LnZhbHVlKGJhc2UpIDogUmVzdWx0LnZhbHVlKGRlZXBNZXJnZShiYXNlLCBtZXJnZSQxLmFwcGx5KHVuZGVmaW5lZCwgdmFsdWVzKSkpO1xuICAgIH07XG4gICAgY29uc3QgbWVyZ2VFcnJvcnMgPSBlcnJvcnMgPT4gUmVzdWx0LmVycm9yKGZsYXR0ZW4oZXJyb3JzKSk7XG4gICAgY29uc3QgY29uc29saWRhdGUgPSAob2JqcywgYmFzZSkgPT4ge1xuICAgICAgY29uc3QgcGFydGl0aW9ucyA9IHBhcnRpdGlvbiQxKG9ianMpO1xuICAgICAgcmV0dXJuIHBhcnRpdGlvbnMuZXJyb3JzLmxlbmd0aCA+IDAgPyBtZXJnZUVycm9ycyhwYXJ0aXRpb25zLmVycm9ycykgOiBtZXJnZVZhbHVlcyhwYXJ0aXRpb25zLnZhbHVlcywgYmFzZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGVuc3VyZUlzUm9vdCA9IGlzUm9vdCA9PiBpc0Z1bmN0aW9uKGlzUm9vdCkgPyBpc1Jvb3QgOiBuZXZlcjtcbiAgICBjb25zdCBhbmNlc3RvciQyID0gKHNjb3BlLCB0cmFuc2Zvcm0sIGlzUm9vdCkgPT4ge1xuICAgICAgbGV0IGVsZW1lbnQgPSBzY29wZS5kb207XG4gICAgICBjb25zdCBzdG9wID0gZW5zdXJlSXNSb290KGlzUm9vdCk7XG4gICAgICB3aGlsZSAoZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gICAgICAgIGNvbnN0IGVsID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkID0gdHJhbnNmb3JtKGVsKTtcbiAgICAgICAgaWYgKHRyYW5zZm9ybWVkLmlzU29tZSgpKSB7XG4gICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkO1xuICAgICAgICB9IGVsc2UgaWYgKHN0b3AoZWwpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBjbG9zZXN0JDQgPSAoc2NvcGUsIHRyYW5zZm9ybSwgaXNSb290KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdHJhbnNmb3JtKHNjb3BlKTtcbiAgICAgIGNvbnN0IHN0b3AgPSBlbnN1cmVJc1Jvb3QoaXNSb290KTtcbiAgICAgIHJldHVybiBjdXJyZW50Lm9yVGh1bmsoKCkgPT4gc3RvcChzY29wZSkgPyBPcHRpb25hbC5ub25lKCkgOiBhbmNlc3RvciQyKHNjb3BlLCB0cmFuc2Zvcm0sIHN0b3ApKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNTb3VyY2UgPSAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCkgPT4gZXEoY29tcG9uZW50LmVsZW1lbnQsIHNpbXVsYXRlZEV2ZW50LmV2ZW50LnRhcmdldCk7XG5cbiAgICBjb25zdCBkZWZhdWx0RXZlbnRIYW5kbGVyID0ge1xuICAgICAgY2FuOiBhbHdheXMsXG4gICAgICBhYm9ydDogbmV2ZXIsXG4gICAgICBydW46IG5vb3BcbiAgICB9O1xuICAgIGNvbnN0IG51JDkgPSBwYXJ0cyA9PiB7XG4gICAgICBpZiAoIWhhc05vbk51bGxhYmxlS2V5KHBhcnRzLCAnY2FuJykgJiYgIWhhc05vbk51bGxhYmxlS2V5KHBhcnRzLCAnYWJvcnQnKSAmJiAhaGFzTm9uTnVsbGFibGVLZXkocGFydHMsICdydW4nKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V2ZW50SGFuZGxlciBkZWZpbmVkIGJ5OiAnICsgSlNPTi5zdHJpbmdpZnkocGFydHMsIG51bGwsIDIpICsgJyBkb2VzIG5vdCBoYXZlIGNhbiwgYWJvcnQsIG9yIHJ1biEnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRlZmF1bHRFdmVudEhhbmRsZXIsXG4gICAgICAgIC4uLnBhcnRzXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgYWxsJDIgPSAoaGFuZGxlcnMsIGYpID0+ICguLi5hcmdzKSA9PiBmb2xkbChoYW5kbGVycywgKGFjYywgaGFuZGxlcikgPT4gYWNjICYmIGYoaGFuZGxlcikuYXBwbHkodW5kZWZpbmVkLCBhcmdzKSwgdHJ1ZSk7XG4gICAgY29uc3QgYW55ID0gKGhhbmRsZXJzLCBmKSA9PiAoLi4uYXJncykgPT4gZm9sZGwoaGFuZGxlcnMsIChhY2MsIGhhbmRsZXIpID0+IGFjYyB8fCBmKGhhbmRsZXIpLmFwcGx5KHVuZGVmaW5lZCwgYXJncyksIGZhbHNlKTtcbiAgICBjb25zdCByZWFkJDIgPSBoYW5kbGVyID0+IGlzRnVuY3Rpb24oaGFuZGxlcikgPyB7XG4gICAgICBjYW46IGFsd2F5cyxcbiAgICAgIGFib3J0OiBuZXZlcixcbiAgICAgIHJ1bjogaGFuZGxlclxuICAgIH0gOiBoYW5kbGVyO1xuICAgIGNvbnN0IGZ1c2UkMSA9IGhhbmRsZXJzID0+IHtcbiAgICAgIGNvbnN0IGNhbiA9IGFsbCQyKGhhbmRsZXJzLCBoYW5kbGVyID0+IGhhbmRsZXIuY2FuKTtcbiAgICAgIGNvbnN0IGFib3J0ID0gYW55KGhhbmRsZXJzLCBoYW5kbGVyID0+IGhhbmRsZXIuYWJvcnQpO1xuICAgICAgY29uc3QgcnVuID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgZWFjaCQxKGhhbmRsZXJzLCBoYW5kbGVyID0+IHtcbiAgICAgICAgICBoYW5kbGVyLnJ1bi5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjYW4sXG4gICAgICAgIGFib3J0LFxuICAgICAgICBydW5cbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnN0YW50ID0gY29uc3RhbnQkMTtcbiAgICBjb25zdCB0b3VjaHN0YXJ0ID0gY29uc3RhbnQoJ3RvdWNoc3RhcnQnKTtcbiAgICBjb25zdCB0b3VjaG1vdmUgPSBjb25zdGFudCgndG91Y2htb3ZlJyk7XG4gICAgY29uc3QgdG91Y2hlbmQgPSBjb25zdGFudCgndG91Y2hlbmQnKTtcbiAgICBjb25zdCB0b3VjaGNhbmNlbCA9IGNvbnN0YW50KCd0b3VjaGNhbmNlbCcpO1xuICAgIGNvbnN0IG1vdXNlZG93biA9IGNvbnN0YW50KCdtb3VzZWRvd24nKTtcbiAgICBjb25zdCBtb3VzZW1vdmUgPSBjb25zdGFudCgnbW91c2Vtb3ZlJyk7XG4gICAgY29uc3QgbW91c2VvdXQgPSBjb25zdGFudCgnbW91c2VvdXQnKTtcbiAgICBjb25zdCBtb3VzZXVwID0gY29uc3RhbnQoJ21vdXNldXAnKTtcbiAgICBjb25zdCBtb3VzZW92ZXIgPSBjb25zdGFudCgnbW91c2VvdmVyJyk7XG4gICAgY29uc3QgZm9jdXNpbiA9IGNvbnN0YW50KCdmb2N1c2luJyk7XG4gICAgY29uc3QgZm9jdXNvdXQgPSBjb25zdGFudCgnZm9jdXNvdXQnKTtcbiAgICBjb25zdCBrZXlkb3duID0gY29uc3RhbnQoJ2tleWRvd24nKTtcbiAgICBjb25zdCBrZXl1cCA9IGNvbnN0YW50KCdrZXl1cCcpO1xuICAgIGNvbnN0IGlucHV0ID0gY29uc3RhbnQoJ2lucHV0Jyk7XG4gICAgY29uc3QgY2hhbmdlID0gY29uc3RhbnQoJ2NoYW5nZScpO1xuICAgIGNvbnN0IGNsaWNrID0gY29uc3RhbnQoJ2NsaWNrJyk7XG4gICAgY29uc3QgdHJhbnNpdGlvbmNhbmNlbCA9IGNvbnN0YW50KCd0cmFuc2l0aW9uY2FuY2VsJyk7XG4gICAgY29uc3QgdHJhbnNpdGlvbmVuZCA9IGNvbnN0YW50KCd0cmFuc2l0aW9uZW5kJyk7XG4gICAgY29uc3QgdHJhbnNpdGlvbnN0YXJ0ID0gY29uc3RhbnQoJ3RyYW5zaXRpb25zdGFydCcpO1xuICAgIGNvbnN0IHNlbGVjdHN0YXJ0ID0gY29uc3RhbnQoJ3NlbGVjdHN0YXJ0Jyk7XG5cbiAgICBjb25zdCBwcmVmaXhOYW1lID0gbmFtZSA9PiBjb25zdGFudCQxKCdhbGxveS4nICsgbmFtZSk7XG4gICAgY29uc3QgYWxsb3kgPSB7IHRhcDogcHJlZml4TmFtZSgndGFwJykgfTtcbiAgICBjb25zdCBmb2N1cyQ0ID0gcHJlZml4TmFtZSgnZm9jdXMnKTtcbiAgICBjb25zdCBwb3N0Qmx1ciA9IHByZWZpeE5hbWUoJ2JsdXIucG9zdCcpO1xuICAgIGNvbnN0IHBvc3RQYXN0ZSA9IHByZWZpeE5hbWUoJ3Bhc3RlLnBvc3QnKTtcbiAgICBjb25zdCByZWNlaXZlID0gcHJlZml4TmFtZSgncmVjZWl2ZScpO1xuICAgIGNvbnN0IGV4ZWN1dGUkNSA9IHByZWZpeE5hbWUoJ2V4ZWN1dGUnKTtcbiAgICBjb25zdCBmb2N1c0l0ZW0gPSBwcmVmaXhOYW1lKCdmb2N1cy5pdGVtJyk7XG4gICAgY29uc3QgdGFwID0gYWxsb3kudGFwO1xuICAgIGNvbnN0IGxvbmdwcmVzcyA9IHByZWZpeE5hbWUoJ2xvbmdwcmVzcycpO1xuICAgIGNvbnN0IHNhbmRib3hDbG9zZSA9IHByZWZpeE5hbWUoJ3NhbmRib3guY2xvc2UnKTtcbiAgICBjb25zdCB0eXBlYWhlYWRDYW5jZWwgPSBwcmVmaXhOYW1lKCd0eXBlYWhlYWQuY2FuY2VsJyk7XG4gICAgY29uc3Qgc3lzdGVtSW5pdCA9IHByZWZpeE5hbWUoJ3N5c3RlbS5pbml0Jyk7XG4gICAgY29uc3QgZG9jdW1lbnRUb3VjaG1vdmUgPSBwcmVmaXhOYW1lKCdzeXN0ZW0udG91Y2htb3ZlJyk7XG4gICAgY29uc3QgZG9jdW1lbnRUb3VjaGVuZCA9IHByZWZpeE5hbWUoJ3N5c3RlbS50b3VjaGVuZCcpO1xuICAgIGNvbnN0IHdpbmRvd1Njcm9sbCA9IHByZWZpeE5hbWUoJ3N5c3RlbS5zY3JvbGwnKTtcbiAgICBjb25zdCB3aW5kb3dSZXNpemUgPSBwcmVmaXhOYW1lKCdzeXN0ZW0ucmVzaXplJyk7XG4gICAgY29uc3QgYXR0YWNoZWRUb0RvbSA9IHByZWZpeE5hbWUoJ3N5c3RlbS5hdHRhY2hlZCcpO1xuICAgIGNvbnN0IGRldGFjaGVkRnJvbURvbSA9IHByZWZpeE5hbWUoJ3N5c3RlbS5kZXRhY2hlZCcpO1xuICAgIGNvbnN0IGRpc21pc3NSZXF1ZXN0ZWQgPSBwcmVmaXhOYW1lKCdzeXN0ZW0uZGlzbWlzc1JlcXVlc3RlZCcpO1xuICAgIGNvbnN0IHJlcG9zaXRpb25SZXF1ZXN0ZWQgPSBwcmVmaXhOYW1lKCdzeXN0ZW0ucmVwb3NpdGlvblJlcXVlc3RlZCcpO1xuICAgIGNvbnN0IGZvY3VzU2hpZnRlZCA9IHByZWZpeE5hbWUoJ2ZvY3VzbWFuYWdlci5zaGlmdGVkJyk7XG4gICAgY29uc3Qgc2xvdFZpc2liaWxpdHkgPSBwcmVmaXhOYW1lKCdzbG90Y29udGFpbmVyLnZpc2liaWxpdHknKTtcbiAgICBjb25zdCBleHRlcm5hbEVsZW1lbnRTY3JvbGwgPSBwcmVmaXhOYW1lKCdzeXN0ZW0uZXh0ZXJuYWwuZWxlbWVudC5zY3JvbGwnKTtcbiAgICBjb25zdCBjaGFuZ2VUYWIgPSBwcmVmaXhOYW1lKCdjaGFuZ2UudGFiJyk7XG4gICAgY29uc3QgZGlzbWlzc1RhYiA9IHByZWZpeE5hbWUoJ2Rpc21pc3MudGFiJyk7XG4gICAgY29uc3QgaGlnaGxpZ2h0JDEgPSBwcmVmaXhOYW1lKCdoaWdobGlnaHQnKTtcbiAgICBjb25zdCBkZWhpZ2hsaWdodCQxID0gcHJlZml4TmFtZSgnZGVoaWdobGlnaHQnKTtcblxuICAgIGNvbnN0IGVtaXQgPSAoY29tcG9uZW50LCBldmVudCkgPT4ge1xuICAgICAgZGlzcGF0Y2hXaXRoKGNvbXBvbmVudCwgY29tcG9uZW50LmVsZW1lbnQsIGV2ZW50LCB7fSk7XG4gICAgfTtcbiAgICBjb25zdCBlbWl0V2l0aCA9IChjb21wb25lbnQsIGV2ZW50LCBwcm9wZXJ0aWVzKSA9PiB7XG4gICAgICBkaXNwYXRjaFdpdGgoY29tcG9uZW50LCBjb21wb25lbnQuZWxlbWVudCwgZXZlbnQsIHByb3BlcnRpZXMpO1xuICAgIH07XG4gICAgY29uc3QgZW1pdEV4ZWN1dGUgPSBjb21wb25lbnQgPT4ge1xuICAgICAgZW1pdChjb21wb25lbnQsIGV4ZWN1dGUkNSgpKTtcbiAgICB9O1xuICAgIGNvbnN0IGRpc3BhdGNoID0gKGNvbXBvbmVudCwgdGFyZ2V0LCBldmVudCkgPT4ge1xuICAgICAgZGlzcGF0Y2hXaXRoKGNvbXBvbmVudCwgdGFyZ2V0LCBldmVudCwge30pO1xuICAgIH07XG4gICAgY29uc3QgZGlzcGF0Y2hXaXRoID0gKGNvbXBvbmVudCwgdGFyZ2V0LCBldmVudCwgcHJvcGVydGllcykgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICAuLi5wcm9wZXJ0aWVzXG4gICAgICB9O1xuICAgICAgY29tcG9uZW50LmdldFN5c3RlbSgpLnRyaWdnZXJFdmVudChldmVudCwgdGFyZ2V0LCBkYXRhKTtcbiAgICB9O1xuICAgIGNvbnN0IHJldGFyZ2V0QW5kRGlzcGF0Y2hXaXRoID0gKGNvbXBvbmVudCwgdGFyZ2V0LCBldmVudE5hbWUsIHByb3BlcnRpZXMpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgIC4uLnByb3BlcnRpZXMsXG4gICAgICAgIHRhcmdldFxuICAgICAgfTtcbiAgICAgIGNvbXBvbmVudC5nZXRTeXN0ZW0oKS50cmlnZ2VyRXZlbnQoZXZlbnROYW1lLCB0YXJnZXQsIGRhdGEpO1xuICAgIH07XG4gICAgY29uc3QgZGlzcGF0Y2hFdmVudCA9IChjb21wb25lbnQsIHRhcmdldCwgZXZlbnQsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICBjb21wb25lbnQuZ2V0U3lzdGVtKCkudHJpZ2dlckV2ZW50KGV2ZW50LCB0YXJnZXQsIHNpbXVsYXRlZEV2ZW50LmV2ZW50KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGVyaXZlJDIgPSBjb25maWdzID0+IHdyYXBBbGwoY29uZmlncyk7XG4gICAgY29uc3QgYWJvcnQgPSAobmFtZSwgcHJlZGljYXRlKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IG5hbWUsXG4gICAgICAgIHZhbHVlOiBudSQ5KHsgYWJvcnQ6IHByZWRpY2F0ZSB9KVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNhbiA9IChuYW1lLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleTogbmFtZSxcbiAgICAgICAgdmFsdWU6IG51JDkoeyBjYW46IHByZWRpY2F0ZSB9KVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHByZXZlbnREZWZhdWx0ID0gbmFtZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IG5hbWUsXG4gICAgICAgIHZhbHVlOiBudSQ5KHtcbiAgICAgICAgICBydW46IChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICBzaW11bGF0ZWRFdmVudC5ldmVudC5wcmV2ZW50KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHJ1biQxID0gKG5hbWUsIGhhbmRsZXIpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleTogbmFtZSxcbiAgICAgICAgdmFsdWU6IG51JDkoeyBydW46IGhhbmRsZXIgfSlcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBydW5BY3Rpb25FeHRyYSA9IChuYW1lLCBhY3Rpb24sIGV4dHJhKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IG5hbWUsXG4gICAgICAgIHZhbHVlOiBudSQ5KHtcbiAgICAgICAgICBydW46IChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICBhY3Rpb24uYXBwbHkodW5kZWZpbmVkLCBbXG4gICAgICAgICAgICAgIGNvbXBvbmVudCxcbiAgICAgICAgICAgICAgc2ltdWxhdGVkRXZlbnRcbiAgICAgICAgICAgIF0uY29uY2F0KGV4dHJhKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHJ1bk9uTmFtZSA9IG5hbWUgPT4ge1xuICAgICAgcmV0dXJuIGhhbmRsZXIgPT4gcnVuJDEobmFtZSwgaGFuZGxlcik7XG4gICAgfTtcbiAgICBjb25zdCBydW5PblNvdXJjZU5hbWUgPSBuYW1lID0+IHtcbiAgICAgIHJldHVybiBoYW5kbGVyID0+ICh7XG4gICAgICAgIGtleTogbmFtZSxcbiAgICAgICAgdmFsdWU6IG51JDkoe1xuICAgICAgICAgIHJ1bjogKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChpc1NvdXJjZShjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50KSkge1xuICAgICAgICAgICAgICBoYW5kbGVyKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVkaXJlY3RUb1VpZCA9IChuYW1lLCB1aWQpID0+IHtcbiAgICAgIHJldHVybiBydW4kMShuYW1lLCAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICBjb21wb25lbnQuZ2V0U3lzdGVtKCkuZ2V0QnlVaWQodWlkKS5lYWNoKHJlZGlyZWN0ZWUgPT4ge1xuICAgICAgICAgIGRpc3BhdGNoRXZlbnQocmVkaXJlY3RlZSwgcmVkaXJlY3RlZS5lbGVtZW50LCBuYW1lLCBzaW11bGF0ZWRFdmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWRpcmVjdFRvUGFydCA9IChuYW1lLCBkZXRhaWwsIHBhcnROYW1lKSA9PiB7XG4gICAgICBjb25zdCB1aWQgPSBkZXRhaWwucGFydFVpZHNbcGFydE5hbWVdO1xuICAgICAgcmV0dXJuIHJlZGlyZWN0VG9VaWQobmFtZSwgdWlkKTtcbiAgICB9O1xuICAgIGNvbnN0IHJ1bldpdGhUYXJnZXQgPSAobmFtZSwgZikgPT4ge1xuICAgICAgcmV0dXJuIHJ1biQxKG5hbWUsIChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGV2ID0gc2ltdWxhdGVkRXZlbnQuZXZlbnQ7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGNvbXBvbmVudC5nZXRTeXN0ZW0oKS5nZXRCeURvbShldi50YXJnZXQpLmdldE9yVGh1bmsoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNsb3Nlc3QgPSBjbG9zZXN0JDQoZXYudGFyZ2V0LCBlbCA9PiBjb21wb25lbnQuZ2V0U3lzdGVtKCkuZ2V0QnlEb20oZWwpLnRvT3B0aW9uYWwoKSwgbmV2ZXIpO1xuICAgICAgICAgIHJldHVybiBjbG9zZXN0LmdldE9yKGNvbXBvbmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICBmKGNvbXBvbmVudCwgdGFyZ2V0LCBzaW11bGF0ZWRFdmVudCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGN1dHRlciA9IG5hbWUgPT4ge1xuICAgICAgcmV0dXJuIHJ1biQxKG5hbWUsIChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgIHNpbXVsYXRlZEV2ZW50LmN1dCgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzdG9wcGVyID0gbmFtZSA9PiB7XG4gICAgICByZXR1cm4gcnVuJDEobmFtZSwgKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgc2ltdWxhdGVkRXZlbnQuc3RvcCgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBydW5PblNvdXJjZSA9IChuYW1lLCBmKSA9PiB7XG4gICAgICByZXR1cm4gcnVuT25Tb3VyY2VOYW1lKG5hbWUpKGYpO1xuICAgIH07XG4gICAgY29uc3QgcnVuT25BdHRhY2hlZCA9IHJ1bk9uU291cmNlTmFtZShhdHRhY2hlZFRvRG9tKCkpO1xuICAgIGNvbnN0IHJ1bk9uRGV0YWNoZWQgPSBydW5PblNvdXJjZU5hbWUoZGV0YWNoZWRGcm9tRG9tKCkpO1xuICAgIGNvbnN0IHJ1bk9uSW5pdCA9IHJ1bk9uU291cmNlTmFtZShzeXN0ZW1Jbml0KCkpO1xuICAgIGNvbnN0IHJ1bk9uRXhlY3V0ZSQxID0gcnVuT25OYW1lKGV4ZWN1dGUkNSgpKTtcblxuICAgIGNvbnN0IGZyb21IdG1sJDEgPSAoaHRtbCwgc2NvcGUpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IHNjb3BlIHx8IGRvY3VtZW50O1xuICAgICAgY29uc3QgZGl2ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZGl2LmlubmVySFRNTCA9IGh0bWw7XG4gICAgICByZXR1cm4gY2hpbGRyZW4oU3VnYXJFbGVtZW50LmZyb21Eb20oZGl2KSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldCQ5ID0gZWxlbWVudCA9PiBlbGVtZW50LmRvbS5pbm5lckhUTUw7XG4gICAgY29uc3Qgc2V0JDYgPSAoZWxlbWVudCwgY29udGVudCkgPT4ge1xuICAgICAgY29uc3Qgb3duZXIgPSBvd25lciQ0KGVsZW1lbnQpO1xuICAgICAgY29uc3QgZG9jRG9tID0gb3duZXIuZG9tO1xuICAgICAgY29uc3QgZnJhZ21lbnQgPSBTdWdhckVsZW1lbnQuZnJvbURvbShkb2NEb20uY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRFbGVtZW50cyA9IGZyb21IdG1sJDEoY29udGVudCwgZG9jRG9tKTtcbiAgICAgIGFwcGVuZCQxKGZyYWdtZW50LCBjb250ZW50RWxlbWVudHMpO1xuICAgICAgZW1wdHkoZWxlbWVudCk7XG4gICAgICBhcHBlbmQkMihlbGVtZW50LCBmcmFnbWVudCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRPdXRlciA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gU3VnYXJFbGVtZW50LmZyb21UYWcoJ2RpdicpO1xuICAgICAgY29uc3QgY2xvbmUgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlbGVtZW50LmRvbS5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgYXBwZW5kJDIoY29udGFpbmVyLCBjbG9uZSk7XG4gICAgICByZXR1cm4gZ2V0JDkoY29udGFpbmVyKTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2xvbmUkMSA9IChvcmlnaW5hbCwgaXNEZWVwKSA9PiBTdWdhckVsZW1lbnQuZnJvbURvbShvcmlnaW5hbC5kb20uY2xvbmVOb2RlKGlzRGVlcCkpO1xuICAgIGNvbnN0IHNoYWxsb3cgPSBvcmlnaW5hbCA9PiBjbG9uZSQxKG9yaWdpbmFsLCBmYWxzZSk7XG5cbiAgICBjb25zdCBnZXRIdG1sID0gZWxlbWVudCA9PiB7XG4gICAgICBpZiAoaXNTaGFkb3dSb290KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiAnI3NoYWRvdy1yb290JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gc2hhbGxvdyhlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGdldE91dGVyKGNsb25lKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZWxlbWVudCA9IGVsZW0gPT4gZ2V0SHRtbChlbGVtKTtcblxuICAgIGNvbnN0IGlzUmVjdXJzaXZlID0gKGNvbXBvbmVudCwgb3JpZ2luYXRvciwgdGFyZ2V0KSA9PiBlcShvcmlnaW5hdG9yLCBjb21wb25lbnQuZWxlbWVudCkgJiYgIWVxKG9yaWdpbmF0b3IsIHRhcmdldCk7XG4gICAgY29uc3QgZXZlbnRzJGkgPSBkZXJpdmUkMihbY2FuKGZvY3VzJDQoKSwgKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBzaW11bGF0ZWRFdmVudC5ldmVudDtcbiAgICAgICAgY29uc3Qgb3JpZ2luYXRvciA9IGV2ZW50Lm9yaWdpbmF0b3I7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgaWYgKGlzUmVjdXJzaXZlKGNvbXBvbmVudCwgb3JpZ2luYXRvciwgdGFyZ2V0KSkge1xuICAgICAgICAgIGNvbnNvbGUud2Fybihmb2N1cyQ0KCkgKyAnIGRpZCBub3QgZ2V0IGludGVycHJldGVkIGJ5IHRoZSBkZXNpcmVkIHRhcmdldC4gJyArICdcXG5PcmlnaW5hdG9yOiAnICsgZWxlbWVudChvcmlnaW5hdG9yKSArICdcXG5UYXJnZXQ6ICcgKyBlbGVtZW50KHRhcmdldCkgKyAnXFxuQ2hlY2sgdGhlICcgKyBmb2N1cyQ0KCkgKyAnIGV2ZW50IGhhbmRsZXJzJyk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KV0pO1xuXG4gICAgdmFyIERlZmF1bHRFdmVudHMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgZXZlbnRzOiBldmVudHMkaVxuICAgIH0pO1xuXG4gICAgbGV0IHVuaXF1ZSA9IDA7XG4gICAgY29uc3QgZ2VuZXJhdGUkNiA9IHByZWZpeCA9PiB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IHRpbWUgPSBkYXRlLmdldFRpbWUoKTtcbiAgICAgIGNvbnN0IHJhbmRvbSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMDApO1xuICAgICAgdW5pcXVlKys7XG4gICAgICByZXR1cm4gcHJlZml4ICsgJ18nICsgcmFuZG9tICsgdW5pcXVlICsgU3RyaW5nKHRpbWUpO1xuICAgIH07XG5cbiAgICBjb25zdCBwcmVmaXgkMSA9IGNvbnN0YW50JDEoJ2FsbG95LWlkLScpO1xuICAgIGNvbnN0IGlkQXR0ciQxID0gY29uc3RhbnQkMSgnZGF0YS1hbGxveS1pZCcpO1xuXG4gICAgY29uc3QgcHJlZml4ID0gcHJlZml4JDEoKTtcbiAgICBjb25zdCBpZEF0dHIgPSBpZEF0dHIkMSgpO1xuICAgIGNvbnN0IHdyaXRlID0gKGxhYmVsLCBlbGVtKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IGdlbmVyYXRlJDYocHJlZml4ICsgbGFiZWwpO1xuICAgICAgd3JpdGVPbmx5KGVsZW0sIGlkKTtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9O1xuICAgIGNvbnN0IHdyaXRlT25seSA9IChlbGVtLCB1aWQpID0+IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtLmRvbSwgaWRBdHRyLCB7XG4gICAgICAgIHZhbHVlOiB1aWQsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlYWQkMSA9IGVsZW0gPT4ge1xuICAgICAgY29uc3QgaWQgPSBpc0VsZW1lbnQkMShlbGVtKSA/IGVsZW0uZG9tW2lkQXR0cl0gOiBudWxsO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oaWQpO1xuICAgIH07XG4gICAgY29uc3QgZ2VuZXJhdGUkNSA9IHByZWZpeCA9PiBnZW5lcmF0ZSQ2KHByZWZpeCk7XG5cbiAgICBjb25zdCBtYWtlJDggPSBpZGVudGl0eTtcblxuICAgIGNvbnN0IE5vQ29udGV4dEFwaSA9IGdldENvbXAgPT4ge1xuICAgICAgY29uc3QgZ2V0TWVzc2FnZSA9IGV2ZW50ID0+IGBUaGUgY29tcG9uZW50IG11c3QgYmUgaW4gYSBjb250ZXh0IHRvIGV4ZWN1dGU6ICR7IGV2ZW50IH1gICsgKGdldENvbXAgPyAnXFxuJyArIGVsZW1lbnQoZ2V0Q29tcCgpLmVsZW1lbnQpICsgJyBpcyBub3QgaW4gY29udGV4dC4nIDogJycpO1xuICAgICAgY29uc3QgZmFpbCA9IGV2ZW50ID0+ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGdldE1lc3NhZ2UoZXZlbnQpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCB3YXJuID0gZXZlbnQgPT4gKCkgPT4ge1xuICAgICAgICBjb25zb2xlLndhcm4oZ2V0TWVzc2FnZShldmVudCkpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlYnVnSW5mbzogY29uc3RhbnQkMSgnZmFrZScpLFxuICAgICAgICB0cmlnZ2VyRXZlbnQ6IHdhcm4oJ3RyaWdnZXJFdmVudCcpLFxuICAgICAgICB0cmlnZ2VyRm9jdXM6IHdhcm4oJ3RyaWdnZXJGb2N1cycpLFxuICAgICAgICB0cmlnZ2VyRXNjYXBlOiB3YXJuKCd0cmlnZ2VyRXNjYXBlJyksXG4gICAgICAgIGJyb2FkY2FzdDogd2FybignYnJvYWRjYXN0JyksXG4gICAgICAgIGJyb2FkY2FzdE9uOiB3YXJuKCdicm9hZGNhc3RPbicpLFxuICAgICAgICBicm9hZGNhc3RFdmVudDogd2FybignYnJvYWRjYXN0RXZlbnQnKSxcbiAgICAgICAgYnVpbGQ6IGZhaWwoJ2J1aWxkJyksXG4gICAgICAgIGJ1aWxkT3JQYXRjaDogZmFpbCgnYnVpbGRPclBhdGNoJyksXG4gICAgICAgIGFkZFRvV29ybGQ6IGZhaWwoJ2FkZFRvV29ybGQnKSxcbiAgICAgICAgcmVtb3ZlRnJvbVdvcmxkOiBmYWlsKCdyZW1vdmVGcm9tV29ybGQnKSxcbiAgICAgICAgYWRkVG9HdWk6IGZhaWwoJ2FkZFRvR3VpJyksXG4gICAgICAgIHJlbW92ZUZyb21HdWk6IGZhaWwoJ3JlbW92ZUZyb21HdWknKSxcbiAgICAgICAgZ2V0QnlVaWQ6IGZhaWwoJ2dldEJ5VWlkJyksXG4gICAgICAgIGdldEJ5RG9tOiBmYWlsKCdnZXRCeURvbScpLFxuICAgICAgICBpc0Nvbm5lY3RlZDogbmV2ZXJcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBzaW5nbGV0b24kMSA9IE5vQ29udGV4dEFwaSgpO1xuXG4gICAgY29uc3QgbWFya0FzQmVoYXZpb3VyQXBpID0gKGYsIGFwaU5hbWUsIGFwaUZ1bmN0aW9uKSA9PiB7XG4gICAgICBjb25zdCBkZWxlZ2F0ZSA9IGFwaUZ1bmN0aW9uLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBlbmRJbmRleCA9IGRlbGVnYXRlLmluZGV4T2YoJyknKSArIDE7XG4gICAgICBjb25zdCBvcGVuQnJhY2tldEluZGV4ID0gZGVsZWdhdGUuaW5kZXhPZignKCcpO1xuICAgICAgY29uc3QgcGFyYW1ldGVycyA9IGRlbGVnYXRlLnN1YnN0cmluZyhvcGVuQnJhY2tldEluZGV4ICsgMSwgZW5kSW5kZXggLSAxKS5zcGxpdCgvLFxccyovKTtcbiAgICAgIGYudG9GdW5jdGlvbkFubm90YXRpb24gPSAoKSA9PiAoe1xuICAgICAgICBuYW1lOiBhcGlOYW1lLFxuICAgICAgICBwYXJhbWV0ZXJzOiBjbGVhblBhcmFtZXRlcnMocGFyYW1ldGVycy5zbGljZSgwLCAxKS5jb25jYXQocGFyYW1ldGVycy5zbGljZSgzKSkpXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmO1xuICAgIH07XG4gICAgY29uc3QgY2xlYW5QYXJhbWV0ZXJzID0gcGFyYW1ldGVycyA9PiBtYXAkMihwYXJhbWV0ZXJzLCBwID0+IGVuZHNXaXRoKHAsICcvKicpID8gcC5zdWJzdHJpbmcoMCwgcC5sZW5ndGggLSAnLyonLmxlbmd0aCkgOiBwKTtcbiAgICBjb25zdCBtYXJrQXNFeHRyYUFwaSA9IChmLCBleHRyYU5hbWUpID0+IHtcbiAgICAgIGNvbnN0IGRlbGVnYXRlID0gZi50b1N0cmluZygpO1xuICAgICAgY29uc3QgZW5kSW5kZXggPSBkZWxlZ2F0ZS5pbmRleE9mKCcpJykgKyAxO1xuICAgICAgY29uc3Qgb3BlbkJyYWNrZXRJbmRleCA9IGRlbGVnYXRlLmluZGV4T2YoJygnKTtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBkZWxlZ2F0ZS5zdWJzdHJpbmcob3BlbkJyYWNrZXRJbmRleCArIDEsIGVuZEluZGV4IC0gMSkuc3BsaXQoLyxcXHMqLyk7XG4gICAgICBmLnRvRnVuY3Rpb25Bbm5vdGF0aW9uID0gKCkgPT4gKHtcbiAgICAgICAgbmFtZTogZXh0cmFOYW1lLFxuICAgICAgICBwYXJhbWV0ZXJzOiBjbGVhblBhcmFtZXRlcnMocGFyYW1ldGVycylcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGY7XG4gICAgfTtcbiAgICBjb25zdCBtYXJrQXNTa2V0Y2hBcGkgPSAoZiwgYXBpRnVuY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IGRlbGVnYXRlID0gYXBpRnVuY3Rpb24udG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IGVuZEluZGV4ID0gZGVsZWdhdGUuaW5kZXhPZignKScpICsgMTtcbiAgICAgIGNvbnN0IG9wZW5CcmFja2V0SW5kZXggPSBkZWxlZ2F0ZS5pbmRleE9mKCcoJyk7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJzID0gZGVsZWdhdGUuc3Vic3RyaW5nKG9wZW5CcmFja2V0SW5kZXggKyAxLCBlbmRJbmRleCAtIDEpLnNwbGl0KC8sXFxzKi8pO1xuICAgICAgZi50b0Z1bmN0aW9uQW5ub3RhdGlvbiA9ICgpID0+ICh7XG4gICAgICAgIG5hbWU6ICdPVkVSUklERScsXG4gICAgICAgIHBhcmFtZXRlcnM6IGNsZWFuUGFyYW1ldGVycyhwYXJhbWV0ZXJzLnNsaWNlKDEpKVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJlbWFkZVRhZyA9IGdlbmVyYXRlJDYoJ2FsbG95LXByZW1hZGUnKTtcbiAgICBjb25zdCBwcmVtYWRlJDEgPSBjb21wID0+IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb21wLmVsZW1lbnQuZG9tLCBwcmVtYWRlVGFnLCB7XG4gICAgICAgIHZhbHVlOiBjb21wLnVpZCxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHdyYXAkMShwcmVtYWRlVGFnLCBjb21wKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzUHJlbWFkZSA9IGVsZW1lbnQgPT4gaGFzJDIoZWxlbWVudC5kb20sIHByZW1hZGVUYWcpO1xuICAgIGNvbnN0IGdldFByZW1hZGUgPSBzcGVjID0+IGdldCRnKHNwZWMsIHByZW1hZGVUYWcpO1xuICAgIGNvbnN0IG1ha2VBcGkgPSBmID0+IG1hcmtBc1NrZXRjaEFwaSgoY29tcG9uZW50LCAuLi5yZXN0KSA9PiBmKGNvbXBvbmVudC5nZXRBcGlzKCksIGNvbXBvbmVudCwgLi4ucmVzdCksIGYpO1xuXG4gICAgY29uc3QgTm9TdGF0ZSA9IHsgaW5pdDogKCkgPT4gbnUkOCh7IHJlYWRTdGF0ZTogY29uc3RhbnQkMSgnTm8gU3RhdGUgcmVxdWlyZWQnKSB9KSB9O1xuICAgIGNvbnN0IG51JDggPSBzcGVjID0+IHNwZWM7XG5cbiAgICBjb25zdCBnZW5lcmF0ZUZyb20kMSA9IChzcGVjLCBhbGwpID0+IHtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IG1hcCQyKGFsbCwgYSA9PiBvcHRpb25PYmpPZihhLm5hbWUoKSwgW1xuICAgICAgICByZXF1aXJlZCQxKCdjb25maWcnKSxcbiAgICAgICAgZGVmYXVsdGVkKCdzdGF0ZScsIE5vU3RhdGUpXG4gICAgICBdKSk7XG4gICAgICBjb25zdCB2YWxpZGF0ZWQgPSBhc1JhdygnY29tcG9uZW50LmJlaGF2aW91cnMnLCBvYmpPZihzY2hlbWEpLCBzcGVjLmJlaGF2aW91cnMpLmZvbGQoZXJySW5mbyA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihmb3JtYXRFcnJvcihlcnJJbmZvKSArICdcXG5Db21wbGV0ZSBzcGVjOlxcbicgKyBKU09OLnN0cmluZ2lmeShzcGVjLCBudWxsLCAyKSk7XG4gICAgICB9LCBpZGVudGl0eSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaXN0OiBhbGwsXG4gICAgICAgIGRhdGE6IG1hcCQxKHZhbGlkYXRlZCwgb3B0QmxvYlRodW5rID0+IHtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSBvcHRCbG9iVGh1bmsubWFwKGJsb2IgPT4gKHtcbiAgICAgICAgICAgIGNvbmZpZzogYmxvYi5jb25maWcsXG4gICAgICAgICAgICBzdGF0ZTogYmxvYi5zdGF0ZS5pbml0KGJsb2IuY29uZmlnKVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICByZXR1cm4gY29uc3RhbnQkMShvdXRwdXQpO1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEJlaGF2aW91cnMkMyA9IGJEYXRhID0+IGJEYXRhLmxpc3Q7XG4gICAgY29uc3QgZ2V0RGF0YSQyID0gYkRhdGEgPT4gYkRhdGEuZGF0YTtcblxuICAgIGNvbnN0IGJ5SW5uZXJLZXkgPSAoZGF0YSwgdHVwbGUpID0+IHtcbiAgICAgIGNvbnN0IHIgPSB7fTtcbiAgICAgIGVhY2goZGF0YSwgKGRldGFpbCwga2V5KSA9PiB7XG4gICAgICAgIGVhY2goZGV0YWlsLCAodmFsdWUsIGluZGV4S2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgY2hhaW4gPSBnZXQkZyhyLCBpbmRleEtleSkuZ2V0T3IoW10pO1xuICAgICAgICAgIHJbaW5kZXhLZXldID0gY2hhaW4uY29uY2F0KFt0dXBsZShrZXksIHZhbHVlKV0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIGNvbnN0IG51JDcgPSBzID0+ICh7XG4gICAgICBjbGFzc2VzOiBpc1VuZGVmaW5lZChzLmNsYXNzZXMpID8gW10gOiBzLmNsYXNzZXMsXG4gICAgICBhdHRyaWJ1dGVzOiBpc1VuZGVmaW5lZChzLmF0dHJpYnV0ZXMpID8ge30gOiBzLmF0dHJpYnV0ZXMsXG4gICAgICBzdHlsZXM6IGlzVW5kZWZpbmVkKHMuc3R5bGVzKSA/IHt9IDogcy5zdHlsZXNcbiAgICB9KTtcbiAgICBjb25zdCBtZXJnZSA9IChkZWZuQSwgbW9kKSA9PiAoe1xuICAgICAgLi4uZGVmbkEsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIC4uLmRlZm5BLmF0dHJpYnV0ZXMsXG4gICAgICAgIC4uLm1vZC5hdHRyaWJ1dGVzXG4gICAgICB9LFxuICAgICAgc3R5bGVzOiB7XG4gICAgICAgIC4uLmRlZm5BLnN0eWxlcyxcbiAgICAgICAgLi4ubW9kLnN0eWxlc1xuICAgICAgfSxcbiAgICAgIGNsYXNzZXM6IGRlZm5BLmNsYXNzZXMuY29uY2F0KG1vZC5jbGFzc2VzKVxuICAgIH0pO1xuXG4gICAgY29uc3QgY29tYmluZSQyID0gKGluZm8sIGJhc2VNb2QsIGJlaGF2aW91cnMsIGJhc2UpID0+IHtcbiAgICAgIGNvbnN0IG1vZHNCeUJlaGF2aW91ciA9IHsgLi4uYmFzZU1vZCB9O1xuICAgICAgZWFjaCQxKGJlaGF2aW91cnMsIGJlaGF2aW91ciA9PiB7XG4gICAgICAgIG1vZHNCeUJlaGF2aW91cltiZWhhdmlvdXIubmFtZSgpXSA9IGJlaGF2aW91ci5leGhpYml0KGluZm8sIGJhc2UpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBieUFzcGVjdCA9IGJ5SW5uZXJLZXkobW9kc0J5QmVoYXZpb3VyLCAobmFtZSwgbW9kaWZpY2F0aW9uKSA9PiAoe1xuICAgICAgICBuYW1lLFxuICAgICAgICBtb2RpZmljYXRpb25cbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IGNvbWJpbmVPYmplY3RzID0gb2JqZWN0cyA9PiBmb2xkcihvYmplY3RzLCAoYiwgYSkgPT4gKHtcbiAgICAgICAgLi4uYS5tb2RpZmljYXRpb24sXG4gICAgICAgIC4uLmJcbiAgICAgIH0pLCB7fSk7XG4gICAgICBjb25zdCBjb21iaW5lZENsYXNzZXMgPSBmb2xkcihieUFzcGVjdC5jbGFzc2VzLCAoYiwgYSkgPT4gYS5tb2RpZmljYXRpb24uY29uY2F0KGIpLCBbXSk7XG4gICAgICBjb25zdCBjb21iaW5lZEF0dHJpYnV0ZXMgPSBjb21iaW5lT2JqZWN0cyhieUFzcGVjdC5hdHRyaWJ1dGVzKTtcbiAgICAgIGNvbnN0IGNvbWJpbmVkU3R5bGVzID0gY29tYmluZU9iamVjdHMoYnlBc3BlY3Quc3R5bGVzKTtcbiAgICAgIHJldHVybiBudSQ3KHtcbiAgICAgICAgY2xhc3NlczogY29tYmluZWRDbGFzc2VzLFxuICAgICAgICBhdHRyaWJ1dGVzOiBjb21iaW5lZEF0dHJpYnV0ZXMsXG4gICAgICAgIHN0eWxlczogY29tYmluZWRTdHlsZXNcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBzb3J0S2V5cyA9IChsYWJlbCwga2V5TmFtZSwgYXJyYXksIG9yZGVyKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzb3J0ZWQgPSBzb3J0KGFycmF5LCAoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGFLZXkgPSBhW2tleU5hbWVdO1xuICAgICAgICAgIGNvbnN0IGJLZXkgPSBiW2tleU5hbWVdO1xuICAgICAgICAgIGNvbnN0IGFJbmRleCA9IG9yZGVyLmluZGV4T2YoYUtleSk7XG4gICAgICAgICAgY29uc3QgYkluZGV4ID0gb3JkZXIuaW5kZXhPZihiS2V5KTtcbiAgICAgICAgICBpZiAoYUluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgb3JkZXJpbmcgZm9yICcgKyBsYWJlbCArICcgZG9lcyBub3QgaGF2ZSBhbiBlbnRyeSBmb3IgJyArIGFLZXkgKyAnLlxcbk9yZGVyIHNwZWNpZmllZDogJyArIEpTT04uc3RyaW5naWZ5KG9yZGVyLCBudWxsLCAyKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChiSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBvcmRlcmluZyBmb3IgJyArIGxhYmVsICsgJyBkb2VzIG5vdCBoYXZlIGFuIGVudHJ5IGZvciAnICsgYktleSArICcuXFxuT3JkZXIgc3BlY2lmaWVkOiAnICsgSlNPTi5zdHJpbmdpZnkob3JkZXIsIG51bGwsIDIpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGFJbmRleCA8IGJJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYkluZGV4IDwgYUluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFJlc3VsdC52YWx1ZShzb3J0ZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3IoW2Vycl0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB1bmN1cnJpZWQgPSAoaGFuZGxlciwgcHVycG9zZSkgPT4gKHtcbiAgICAgIGhhbmRsZXIsXG4gICAgICBwdXJwb3NlXG4gICAgfSk7XG4gICAgY29uc3QgY3VycmllZCA9IChoYW5kbGVyLCBwdXJwb3NlKSA9PiAoe1xuICAgICAgY0hhbmRsZXI6IGhhbmRsZXIsXG4gICAgICBwdXJwb3NlXG4gICAgfSk7XG4gICAgY29uc3QgY3VycnlBcmdzID0gKGRlc2NIYW5kbGVyLCBleHRyYUFyZ3MpID0+IGN1cnJpZWQoY3VycnkuYXBwbHkodW5kZWZpbmVkLCBbZGVzY0hhbmRsZXIuaGFuZGxlcl0uY29uY2F0KGV4dHJhQXJncykpLCBkZXNjSGFuZGxlci5wdXJwb3NlKTtcbiAgICBjb25zdCBnZXRDdXJyaWVkID0gZGVzY0hhbmRsZXIgPT4gZGVzY0hhbmRsZXIuY0hhbmRsZXI7XG5cbiAgICBjb25zdCBiZWhhdmlvdXJUdXBsZSA9IChuYW1lLCBoYW5kbGVyKSA9PiAoe1xuICAgICAgbmFtZSxcbiAgICAgIGhhbmRsZXJcbiAgICB9KTtcbiAgICBjb25zdCBuYW1lVG9IYW5kbGVycyA9IChiZWhhdmlvdXJzLCBpbmZvKSA9PiB7XG4gICAgICBjb25zdCByID0ge307XG4gICAgICBlYWNoJDEoYmVoYXZpb3VycywgYmVoYXZpb3VyID0+IHtcbiAgICAgICAgcltiZWhhdmlvdXIubmFtZSgpXSA9IGJlaGF2aW91ci5oYW5kbGVycyhpbmZvKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBncm91cEJ5RXZlbnRzID0gKGluZm8sIGJlaGF2aW91cnMsIGJhc2UpID0+IHtcbiAgICAgIGNvbnN0IGJlaGF2aW91ckV2ZW50cyA9IHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgLi4ubmFtZVRvSGFuZGxlcnMoYmVoYXZpb3VycywgaW5mbylcbiAgICAgIH07XG4gICAgICByZXR1cm4gYnlJbm5lcktleShiZWhhdmlvdXJFdmVudHMsIGJlaGF2aW91clR1cGxlKTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbWJpbmUkMSA9IChpbmZvLCBldmVudE9yZGVyLCBiZWhhdmlvdXJzLCBiYXNlKSA9PiB7XG4gICAgICBjb25zdCBieUV2ZW50TmFtZSA9IGdyb3VwQnlFdmVudHMoaW5mbywgYmVoYXZpb3VycywgYmFzZSk7XG4gICAgICByZXR1cm4gY29tYmluZUdyb3VwcyhieUV2ZW50TmFtZSwgZXZlbnRPcmRlcik7XG4gICAgfTtcbiAgICBjb25zdCBhc3NlbWJsZSA9IHJhd0hhbmRsZXIgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlciA9IHJlYWQkMihyYXdIYW5kbGVyKTtcbiAgICAgIHJldHVybiAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgLi4ucmVzdCkgPT4ge1xuICAgICAgICBjb25zdCBhcmdzID0gW1xuICAgICAgICAgIGNvbXBvbmVudCxcbiAgICAgICAgICBzaW11bGF0ZWRFdmVudFxuICAgICAgICBdLmNvbmNhdChyZXN0KTtcbiAgICAgICAgaWYgKGhhbmRsZXIuYWJvcnQuYXBwbHkodW5kZWZpbmVkLCBhcmdzKSkge1xuICAgICAgICAgIHNpbXVsYXRlZEV2ZW50LnN0b3AoKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyLmNhbi5hcHBseSh1bmRlZmluZWQsIGFyZ3MpKSB7XG4gICAgICAgICAgaGFuZGxlci5ydW4uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG1pc3NpbmdPcmRlckVycm9yID0gKGV2ZW50TmFtZSwgdHVwbGVzKSA9PiBSZXN1bHQuZXJyb3IoWydUaGUgZXZlbnQgKCcgKyBldmVudE5hbWUgKyAnKSBoYXMgbW9yZSB0aGFuIG9uZSBiZWhhdmlvdXIgdGhhdCBsaXN0ZW5zIHRvIGl0LlxcbldoZW4gdGhpcyBvY2N1cnMsIHlvdSBtdXN0ICcgKyAnc3BlY2lmeSBhbiBldmVudCBvcmRlcmluZyBmb3IgdGhlIGJlaGF2aW91cnMgaW4geW91ciBzcGVjIChlLmcuIFsgXCJsaXN0aW5nXCIsIFwidG9nZ2xpbmdcIiBdKS5cXG5UaGUgYmVoYXZpb3VycyB0aGF0ICcgKyAnY2FuIHRyaWdnZXIgaXQgYXJlOiAnICsgSlNPTi5zdHJpbmdpZnkobWFwJDIodHVwbGVzLCBjID0+IGMubmFtZSksIG51bGwsIDIpXSk7XG4gICAgY29uc3QgZnVzZSA9ICh0dXBsZXMsIGV2ZW50T3JkZXIsIGV2ZW50TmFtZSkgPT4ge1xuICAgICAgY29uc3Qgb3JkZXIgPSBldmVudE9yZGVyW2V2ZW50TmFtZV07XG4gICAgICBpZiAoIW9yZGVyKSB7XG4gICAgICAgIHJldHVybiBtaXNzaW5nT3JkZXJFcnJvcihldmVudE5hbWUsIHR1cGxlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc29ydEtleXMoJ0V2ZW50OiAnICsgZXZlbnROYW1lLCAnbmFtZScsIHR1cGxlcywgb3JkZXIpLm1hcChzb3J0ZWRUdXBsZXMgPT4ge1xuICAgICAgICAgIGNvbnN0IGhhbmRsZXJzID0gbWFwJDIoc29ydGVkVHVwbGVzLCB0dXBsZSA9PiB0dXBsZS5oYW5kbGVyKTtcbiAgICAgICAgICByZXR1cm4gZnVzZSQxKGhhbmRsZXJzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjb21iaW5lR3JvdXBzID0gKGJ5RXZlbnROYW1lLCBldmVudE9yZGVyKSA9PiB7XG4gICAgICBjb25zdCByID0gbWFwVG9BcnJheShieUV2ZW50TmFtZSwgKHR1cGxlcywgZXZlbnROYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbWJpbmVkID0gdHVwbGVzLmxlbmd0aCA9PT0gMSA/IFJlc3VsdC52YWx1ZSh0dXBsZXNbMF0uaGFuZGxlcikgOiBmdXNlKHR1cGxlcywgZXZlbnRPcmRlciwgZXZlbnROYW1lKTtcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVkLm1hcChoYW5kbGVyID0+IHtcbiAgICAgICAgICBjb25zdCBhc3NlbWJsZWQgPSBhc3NlbWJsZShoYW5kbGVyKTtcbiAgICAgICAgICBjb25zdCBwdXJwb3NlID0gdHVwbGVzLmxlbmd0aCA+IDEgPyBmaWx0ZXIkMihldmVudE9yZGVyW2V2ZW50TmFtZV0sIG8gPT4gZXhpc3RzKHR1cGxlcywgdCA9PiB0Lm5hbWUgPT09IG8pKS5qb2luKCcgPiAnKSA6IHR1cGxlc1swXS5uYW1lO1xuICAgICAgICAgIHJldHVybiB3cmFwJDEoZXZlbnROYW1lLCB1bmN1cnJpZWQoYXNzZW1ibGVkLCBwdXJwb3NlKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29uc29saWRhdGUociwge30pO1xuICAgIH07XG5cbiAgICBjb25zdCBiYXNlQmVoYXZpb3VyID0gJ2FsbG95LmJhc2UuYmVoYXZpb3VyJztcbiAgICBjb25zdCBzY2hlbWEkeiA9IG9iak9mKFtcbiAgICAgIGZpZWxkJDEoJ2RvbScsICdkb20nLCByZXF1aXJlZCQyKCksIG9iak9mKFtcbiAgICAgICAgcmVxdWlyZWQkMSgndGFnJyksXG4gICAgICAgIGRlZmF1bHRlZCgnc3R5bGVzJywge30pLFxuICAgICAgICBkZWZhdWx0ZWQoJ2NsYXNzZXMnLCBbXSksXG4gICAgICAgIGRlZmF1bHRlZCgnYXR0cmlidXRlcycsIHt9KSxcbiAgICAgICAgb3B0aW9uJDMoJ3ZhbHVlJyksXG4gICAgICAgIG9wdGlvbiQzKCdpbm5lckh0bWwnKVxuICAgICAgXSkpLFxuICAgICAgcmVxdWlyZWQkMSgnY29tcG9uZW50cycpLFxuICAgICAgcmVxdWlyZWQkMSgndWlkJyksXG4gICAgICBkZWZhdWx0ZWQoJ2V2ZW50cycsIHt9KSxcbiAgICAgIGRlZmF1bHRlZCgnYXBpcycsIHt9KSxcbiAgICAgIGZpZWxkJDEoJ2V2ZW50T3JkZXInLCAnZXZlbnRPcmRlcicsIG1lcmdlV2l0aCh7XG4gICAgICAgIFtleGVjdXRlJDUoKV06IFtcbiAgICAgICAgICAnZGlzYWJsaW5nJyxcbiAgICAgICAgICBiYXNlQmVoYXZpb3VyLFxuICAgICAgICAgICd0b2dnbGluZycsXG4gICAgICAgICAgJ3R5cGVhaGVhZGV2ZW50cydcbiAgICAgICAgXSxcbiAgICAgICAgW2ZvY3VzJDQoKV06IFtcbiAgICAgICAgICBiYXNlQmVoYXZpb3VyLFxuICAgICAgICAgICdmb2N1c2luZycsXG4gICAgICAgICAgJ2tleWluZydcbiAgICAgICAgXSxcbiAgICAgICAgW3N5c3RlbUluaXQoKV06IFtcbiAgICAgICAgICBiYXNlQmVoYXZpb3VyLFxuICAgICAgICAgICdkaXNhYmxpbmcnLFxuICAgICAgICAgICd0b2dnbGluZycsXG4gICAgICAgICAgJ3JlcHJlc2VudGluZydcbiAgICAgICAgXSxcbiAgICAgICAgW2lucHV0KCldOiBbXG4gICAgICAgICAgYmFzZUJlaGF2aW91cixcbiAgICAgICAgICAncmVwcmVzZW50aW5nJyxcbiAgICAgICAgICAnc3RyZWFtaW5nJyxcbiAgICAgICAgICAnaW52YWxpZGF0aW5nJ1xuICAgICAgICBdLFxuICAgICAgICBbZGV0YWNoZWRGcm9tRG9tKCldOiBbXG4gICAgICAgICAgYmFzZUJlaGF2aW91cixcbiAgICAgICAgICAncmVwcmVzZW50aW5nJyxcbiAgICAgICAgICAnaXRlbS1ldmVudHMnLFxuICAgICAgICAgICd0b29sdGlwcGluZydcbiAgICAgICAgXSxcbiAgICAgICAgW21vdXNlZG93bigpXTogW1xuICAgICAgICAgICdmb2N1c2luZycsXG4gICAgICAgICAgYmFzZUJlaGF2aW91cixcbiAgICAgICAgICAnaXRlbS10eXBlLWV2ZW50cydcbiAgICAgICAgXSxcbiAgICAgICAgW3RvdWNoc3RhcnQoKV06IFtcbiAgICAgICAgICAnZm9jdXNpbmcnLFxuICAgICAgICAgIGJhc2VCZWhhdmlvdXIsXG4gICAgICAgICAgJ2l0ZW0tdHlwZS1ldmVudHMnXG4gICAgICAgIF0sXG4gICAgICAgIFttb3VzZW92ZXIoKV06IFtcbiAgICAgICAgICAnaXRlbS10eXBlLWV2ZW50cycsXG4gICAgICAgICAgJ3Rvb2x0aXBwaW5nJ1xuICAgICAgICBdLFxuICAgICAgICBbcmVjZWl2ZSgpXTogW1xuICAgICAgICAgICdyZWNlaXZpbmcnLFxuICAgICAgICAgICdyZWZsZWN0aW5nJyxcbiAgICAgICAgICAndG9vbHRpcHBpbmcnXG4gICAgICAgIF1cbiAgICAgIH0pLCBhbnlWYWx1ZSgpKSxcbiAgICAgIG9wdGlvbiQzKCdkb21Nb2RpZmljYXRpb24nKVxuICAgIF0pO1xuICAgIGNvbnN0IHRvSW5mbyA9IHNwZWMgPT4gYXNSYXcoJ2N1c3RvbS5kZWZpbml0aW9uJywgc2NoZW1hJHosIHNwZWMpO1xuICAgIGNvbnN0IHRvRGVmaW5pdGlvbiA9IGRldGFpbCA9PiAoe1xuICAgICAgLi4uZGV0YWlsLmRvbSxcbiAgICAgIHVpZDogZGV0YWlsLnVpZCxcbiAgICAgIGRvbUNoaWxkcmVuOiBtYXAkMihkZXRhaWwuY29tcG9uZW50cywgY29tcCA9PiBjb21wLmVsZW1lbnQpXG4gICAgfSk7XG4gICAgY29uc3QgdG9Nb2RpZmljYXRpb24gPSBkZXRhaWwgPT4gZGV0YWlsLmRvbU1vZGlmaWNhdGlvbi5mb2xkKCgpID0+IG51JDcoe30pLCBudSQ3KTtcbiAgICBjb25zdCB0b0V2ZW50cyA9IGluZm8gPT4gaW5mby5ldmVudHM7XG5cbiAgICBjb25zdCByZWFkID0gKGVsZW1lbnQsIGF0dHIpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZ2V0JGYoZWxlbWVudCwgYXR0cik7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycgPyBbXSA6IHZhbHVlLnNwbGl0KCcgJyk7XG4gICAgfTtcbiAgICBjb25zdCBhZGQkNCA9IChlbGVtZW50LCBhdHRyLCBpZCkgPT4ge1xuICAgICAgY29uc3Qgb2xkID0gcmVhZChlbGVtZW50LCBhdHRyKTtcbiAgICAgIGNvbnN0IG51ID0gb2xkLmNvbmNhdChbaWRdKTtcbiAgICAgIHNldCQ5KGVsZW1lbnQsIGF0dHIsIG51LmpvaW4oJyAnKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSQ0ID0gKGVsZW1lbnQsIGF0dHIsIGlkKSA9PiB7XG4gICAgICBjb25zdCBudSA9IGZpbHRlciQyKHJlYWQoZWxlbWVudCwgYXR0ciksIHYgPT4gdiAhPT0gaWQpO1xuICAgICAgaWYgKG51Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgc2V0JDkoZWxlbWVudCwgYXR0ciwgbnUuam9pbignICcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZSQ3KGVsZW1lbnQsIGF0dHIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICBjb25zdCBzdXBwb3J0cyA9IGVsZW1lbnQgPT4gZWxlbWVudC5kb20uY2xhc3NMaXN0ICE9PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgZ2V0JDggPSBlbGVtZW50ID0+IHJlYWQoZWxlbWVudCwgJ2NsYXNzJyk7XG4gICAgY29uc3QgYWRkJDMgPSAoZWxlbWVudCwgY2xhenopID0+IGFkZCQ0KGVsZW1lbnQsICdjbGFzcycsIGNsYXp6KTtcbiAgICBjb25zdCByZW1vdmUkMyA9IChlbGVtZW50LCBjbGF6eikgPT4gcmVtb3ZlJDQoZWxlbWVudCwgJ2NsYXNzJywgY2xhenopO1xuXG4gICAgY29uc3QgYWRkJDIgPSAoZWxlbWVudCwgY2xhenopID0+IHtcbiAgICAgIGlmIChzdXBwb3J0cyhlbGVtZW50KSkge1xuICAgICAgICBlbGVtZW50LmRvbS5jbGFzc0xpc3QuYWRkKGNsYXp6KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkZCQzKGVsZW1lbnQsIGNsYXp6KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNsZWFuQ2xhc3MgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHN1cHBvcnRzKGVsZW1lbnQpID8gZWxlbWVudC5kb20uY2xhc3NMaXN0IDogZ2V0JDgoZWxlbWVudCk7XG4gICAgICBpZiAoY2xhc3NMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZW1vdmUkNyhlbGVtZW50LCAnY2xhc3MnKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSQyID0gKGVsZW1lbnQsIGNsYXp6KSA9PiB7XG4gICAgICBpZiAoc3VwcG9ydHMoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgY2xhc3NMaXN0ID0gZWxlbWVudC5kb20uY2xhc3NMaXN0O1xuICAgICAgICBjbGFzc0xpc3QucmVtb3ZlKGNsYXp6KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZSQzKGVsZW1lbnQsIGNsYXp6KTtcbiAgICAgIH1cbiAgICAgIGNsZWFuQ2xhc3MoZWxlbWVudCk7XG4gICAgfTtcbiAgICBjb25zdCBoYXMgPSAoZWxlbWVudCwgY2xhenopID0+IHN1cHBvcnRzKGVsZW1lbnQpICYmIGVsZW1lbnQuZG9tLmNsYXNzTGlzdC5jb250YWlucyhjbGF6eik7XG5cbiAgICBjb25zdCBhZGQkMSA9IChlbGVtZW50LCBjbGFzc2VzKSA9PiB7XG4gICAgICBlYWNoJDEoY2xhc3NlcywgeCA9PiB7XG4gICAgICAgIGFkZCQyKGVsZW1lbnQsIHgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmUkMSA9IChlbGVtZW50LCBjbGFzc2VzKSA9PiB7XG4gICAgICBlYWNoJDEoY2xhc3NlcywgeCA9PiB7XG4gICAgICAgIHJlbW92ZSQyKGVsZW1lbnQsIHgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNBbGwgPSAoZWxlbWVudCwgY2xhc3NlcykgPT4gZm9yYWxsKGNsYXNzZXMsIGNsYXp6ID0+IGhhcyhlbGVtZW50LCBjbGF6eikpO1xuICAgIGNvbnN0IGdldE5hdGl2ZSA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgY2xhc3NMaXN0ID0gZWxlbWVudC5kb20uY2xhc3NMaXN0O1xuICAgICAgY29uc3QgciA9IG5ldyBBcnJheShjbGFzc0xpc3QubGVuZ3RoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xhc3NMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBjbGFzc0xpc3QuaXRlbShpKTtcbiAgICAgICAgaWYgKGl0ZW0gIT09IG51bGwpIHtcbiAgICAgICAgICByW2ldID0gaXRlbTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBnZXQkNyA9IGVsZW1lbnQgPT4gc3VwcG9ydHMoZWxlbWVudCkgPyBnZXROYXRpdmUoZWxlbWVudCkgOiBnZXQkOChlbGVtZW50KTtcblxuICAgIGNvbnN0IGdldCQ2ID0gZWxlbWVudCA9PiBlbGVtZW50LmRvbS52YWx1ZTtcbiAgICBjb25zdCBzZXQkNSA9IChlbGVtZW50LCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWYWx1ZS5zZXQgd2FzIHVuZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgZWxlbWVudC5kb20udmFsdWUgPSB2YWx1ZTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGV0ZXJtaW5lT2Jzb2xldGVkID0gKHBhcmVudCwgaW5kZXgsIG9sZE9ic29sZXRlZCkgPT4ge1xuICAgICAgY29uc3QgbmV3T2Jzb2xldGVkID0gY2hpbGQkMihwYXJlbnQsIGluZGV4KTtcbiAgICAgIHJldHVybiBuZXdPYnNvbGV0ZWQubWFwKG5ld09icyA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1DaGFuZ2VkID0gb2xkT2Jzb2xldGVkLmV4aXN0cyhvID0+ICFlcShvLCBuZXdPYnMpKTtcbiAgICAgICAgaWYgKGVsZW1DaGFuZ2VkKSB7XG4gICAgICAgICAgY29uc3Qgb2xkVGFnID0gb2xkT2Jzb2xldGVkLm1hcChuYW1lJDMpLmdldE9yKCdzcGFuJyk7XG4gICAgICAgICAgY29uc3QgbWFya2VyID0gU3VnYXJFbGVtZW50LmZyb21UYWcob2xkVGFnKTtcbiAgICAgICAgICBiZWZvcmUkMShuZXdPYnMsIG1hcmtlcik7XG4gICAgICAgICAgcmV0dXJuIG1hcmtlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbmV3T2JzO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGVuc3VyZUluRG9tID0gKHBhcmVudCwgY2hpbGQsIG9ic29sZXRlZCkgPT4ge1xuICAgICAgb2Jzb2xldGVkLmZvbGQoKCkgPT4gYXBwZW5kJDIocGFyZW50LCBjaGlsZCksIG9icyA9PiB7XG4gICAgICAgIGlmICghZXEob2JzLCBjaGlsZCkpIHtcbiAgICAgICAgICBiZWZvcmUkMShvYnMsIGNoaWxkKTtcbiAgICAgICAgICByZW1vdmUkNShvYnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHBhdGNoQ2hpbGRyZW5XaXRoID0gKHBhcmVudCwgbnUsIGYpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWx0Q2hpbGRyZW4gPSBtYXAkMihudSwgZik7XG4gICAgICBjb25zdCBjdXJyZW50Q2hpbGRyZW4gPSBjaGlsZHJlbihwYXJlbnQpO1xuICAgICAgZWFjaCQxKGN1cnJlbnRDaGlsZHJlbi5zbGljZShidWlsdENoaWxkcmVuLmxlbmd0aCksIHJlbW92ZSQ1KTtcbiAgICAgIHJldHVybiBidWlsdENoaWxkcmVuO1xuICAgIH07XG4gICAgY29uc3QgcGF0Y2hTcGVjQ2hpbGQgPSAocGFyZW50LCBpbmRleCwgc3BlYywgYnVpbGQpID0+IHtcbiAgICAgIGNvbnN0IG9sZE9ic29sZXRlZCA9IGNoaWxkJDIocGFyZW50LCBpbmRleCk7XG4gICAgICBjb25zdCBjaGlsZENvbXAgPSBidWlsZChzcGVjLCBvbGRPYnNvbGV0ZWQpO1xuICAgICAgY29uc3Qgb2Jzb2xldGVkID0gZGV0ZXJtaW5lT2Jzb2xldGVkKHBhcmVudCwgaW5kZXgsIG9sZE9ic29sZXRlZCk7XG4gICAgICBlbnN1cmVJbkRvbShwYXJlbnQsIGNoaWxkQ29tcC5lbGVtZW50LCBvYnNvbGV0ZWQpO1xuICAgICAgcmV0dXJuIGNoaWxkQ29tcDtcbiAgICB9O1xuICAgIGNvbnN0IHBhdGNoU3BlY0NoaWxkcmVuID0gKHBhcmVudCwgc3BlY3MsIGJ1aWxkKSA9PiBwYXRjaENoaWxkcmVuV2l0aChwYXJlbnQsIHNwZWNzLCAoc3BlYywgaW5kZXgpID0+IHBhdGNoU3BlY0NoaWxkKHBhcmVudCwgaW5kZXgsIHNwZWMsIGJ1aWxkKSk7XG4gICAgY29uc3QgcGF0Y2hEb21DaGlsZHJlbiA9IChwYXJlbnQsIG5vZGVzKSA9PiBwYXRjaENoaWxkcmVuV2l0aChwYXJlbnQsIG5vZGVzLCAobm9kZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG9wdE9ic29sZXRlZCA9IGNoaWxkJDIocGFyZW50LCBpbmRleCk7XG4gICAgICBlbnN1cmVJbkRvbShwYXJlbnQsIG5vZGUsIG9wdE9ic29sZXRlZCk7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGRpZmZLZXlWYWx1ZVNldCA9IChuZXdPYmosIG9sZE9iaikgPT4ge1xuICAgICAgY29uc3QgbmV3S2V5cyA9IGtleXMobmV3T2JqKTtcbiAgICAgIGNvbnN0IG9sZEtleXMgPSBrZXlzKG9sZE9iaik7XG4gICAgICBjb25zdCB0b1JlbW92ZSA9IGRpZmZlcmVuY2Uob2xkS2V5cywgbmV3S2V5cyk7XG4gICAgICBjb25zdCB0b1NldCA9IGJpZmlsdGVyKG5ld09iaiwgKHYsIGspID0+IHtcbiAgICAgICAgcmV0dXJuICFoYXMkMihvbGRPYmosIGspIHx8IHYgIT09IG9sZE9ialtrXTtcbiAgICAgIH0pLnQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b1JlbW92ZSxcbiAgICAgICAgdG9TZXRcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCByZWNvbmNpbGVUb0RvbSA9IChkZWZpbml0aW9uLCBvYnNvbGV0ZWQpID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2xhc3M6IGNsYXp6LFxuICAgICAgICBzdHlsZSxcbiAgICAgICAgLi4uZXhpc3RpbmdBdHRyaWJ1dGVzXG4gICAgICB9ID0gY2xvbmUkMihvYnNvbGV0ZWQpO1xuICAgICAgY29uc3Qge1xuICAgICAgICB0b1NldDogYXR0cnNUb1NldCxcbiAgICAgICAgdG9SZW1vdmU6IGF0dHJzVG9SZW1vdmVcbiAgICAgIH0gPSBkaWZmS2V5VmFsdWVTZXQoZGVmaW5pdGlvbi5hdHRyaWJ1dGVzLCBleGlzdGluZ0F0dHJpYnV0ZXMpO1xuICAgICAgY29uc3QgdXBkYXRlQXR0cnMgPSAoKSA9PiB7XG4gICAgICAgIGVhY2gkMShhdHRyc1RvUmVtb3ZlLCBhID0+IHJlbW92ZSQ3KG9ic29sZXRlZCwgYSkpO1xuICAgICAgICBzZXRBbGwkMShvYnNvbGV0ZWQsIGF0dHJzVG9TZXQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nU3R5bGVzID0gZ2V0QWxsUmF3KG9ic29sZXRlZCk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHRvU2V0OiBzdHlsZXNUb1NldCxcbiAgICAgICAgdG9SZW1vdmU6IHN0eWxlc1RvUmVtb3ZlXG4gICAgICB9ID0gZGlmZktleVZhbHVlU2V0KGRlZmluaXRpb24uc3R5bGVzLCBleGlzdGluZ1N0eWxlcyk7XG4gICAgICBjb25zdCB1cGRhdGVTdHlsZXMgPSAoKSA9PiB7XG4gICAgICAgIGVhY2gkMShzdHlsZXNUb1JlbW92ZSwgcyA9PiByZW1vdmUkNihvYnNvbGV0ZWQsIHMpKTtcbiAgICAgICAgc2V0QWxsKG9ic29sZXRlZCwgc3R5bGVzVG9TZXQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nQ2xhc3NlcyA9IGdldCQ3KG9ic29sZXRlZCk7XG4gICAgICBjb25zdCBjbGFzc2VzVG9SZW1vdmUgPSBkaWZmZXJlbmNlKGV4aXN0aW5nQ2xhc3NlcywgZGVmaW5pdGlvbi5jbGFzc2VzKTtcbiAgICAgIGNvbnN0IGNsYXNzZXNUb0FkZCA9IGRpZmZlcmVuY2UoZGVmaW5pdGlvbi5jbGFzc2VzLCBleGlzdGluZ0NsYXNzZXMpO1xuICAgICAgY29uc3QgdXBkYXRlQ2xhc3NlcyA9ICgpID0+IHtcbiAgICAgICAgYWRkJDEob2Jzb2xldGVkLCBjbGFzc2VzVG9BZGQpO1xuICAgICAgICByZW1vdmUkMShvYnNvbGV0ZWQsIGNsYXNzZXNUb1JlbW92ZSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdXBkYXRlSHRtbCA9IGh0bWwgPT4ge1xuICAgICAgICBzZXQkNihvYnNvbGV0ZWQsIGh0bWwpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVwZGF0ZUNoaWxkcmVuID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGRlZmluaXRpb24uZG9tQ2hpbGRyZW47XG4gICAgICAgIHBhdGNoRG9tQ2hpbGRyZW4ob2Jzb2xldGVkLCBjaGlsZHJlbik7XG4gICAgICB9O1xuICAgICAgY29uc3QgdXBkYXRlVmFsdWUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlRWxlbWVudCA9IG9ic29sZXRlZDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBkZWZpbml0aW9uLnZhbHVlLmdldE9yVW5kZWZpbmVkKCk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gZ2V0JDYodmFsdWVFbGVtZW50KSkge1xuICAgICAgICAgIHNldCQ1KHZhbHVlRWxlbWVudCwgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHZvaWQgMCA/IHZhbHVlIDogJycpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdXBkYXRlQXR0cnMoKTtcbiAgICAgIHVwZGF0ZUNsYXNzZXMoKTtcbiAgICAgIHVwZGF0ZVN0eWxlcygpO1xuICAgICAgZGVmaW5pdGlvbi5pbm5lckh0bWwuZm9sZCh1cGRhdGVDaGlsZHJlbiwgdXBkYXRlSHRtbCk7XG4gICAgICB1cGRhdGVWYWx1ZSgpO1xuICAgICAgcmV0dXJuIG9ic29sZXRlZDtcbiAgICB9O1xuXG4gICAgY29uc3QgaW50cm9kdWNlVG9Eb20gPSBkZWZpbml0aW9uID0+IHtcbiAgICAgIGNvbnN0IHN1YmplY3QgPSBTdWdhckVsZW1lbnQuZnJvbVRhZyhkZWZpbml0aW9uLnRhZyk7XG4gICAgICBzZXRBbGwkMShzdWJqZWN0LCBkZWZpbml0aW9uLmF0dHJpYnV0ZXMpO1xuICAgICAgYWRkJDEoc3ViamVjdCwgZGVmaW5pdGlvbi5jbGFzc2VzKTtcbiAgICAgIHNldEFsbChzdWJqZWN0LCBkZWZpbml0aW9uLnN0eWxlcyk7XG4gICAgICBkZWZpbml0aW9uLmlubmVySHRtbC5lYWNoKGh0bWwgPT4gc2V0JDYoc3ViamVjdCwgaHRtbCkpO1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBkZWZpbml0aW9uLmRvbUNoaWxkcmVuO1xuICAgICAgYXBwZW5kJDEoc3ViamVjdCwgY2hpbGRyZW4pO1xuICAgICAgZGVmaW5pdGlvbi52YWx1ZS5lYWNoKHZhbHVlID0+IHtcbiAgICAgICAgc2V0JDUoc3ViamVjdCwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9O1xuICAgIGNvbnN0IGF0dGVtcHRQYXRjaCA9IChkZWZpbml0aW9uLCBvYnNvbGV0ZWQpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGUgPSByZWNvbmNpbGVUb0RvbShkZWZpbml0aW9uLCBvYnNvbGV0ZWQpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShlKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaGFzTWl4ZWRDaGlsZHJlbiA9IGRlZmluaXRpb24gPT4gZGVmaW5pdGlvbi5pbm5lckh0bWwuaXNTb21lKCkgJiYgZGVmaW5pdGlvbi5kb21DaGlsZHJlbi5sZW5ndGggPiAwO1xuICAgIGNvbnN0IHJlbmRlclRvRG9tID0gKGRlZmluaXRpb24sIG9wdE9ic29sZXRlZCkgPT4ge1xuICAgICAgY29uc3QgY2FuQmVQYXRjaGVkID0gY2FuZGlkYXRlID0+IG5hbWUkMyhjYW5kaWRhdGUpID09PSBkZWZpbml0aW9uLnRhZyAmJiAhaGFzTWl4ZWRDaGlsZHJlbihkZWZpbml0aW9uKSAmJiAhaXNQcmVtYWRlKGNhbmRpZGF0ZSk7XG4gICAgICBjb25zdCBlbGVtID0gb3B0T2Jzb2xldGVkLmZpbHRlcihjYW5CZVBhdGNoZWQpLmJpbmQob2Jzb2xldGVkID0+IGF0dGVtcHRQYXRjaChkZWZpbml0aW9uLCBvYnNvbGV0ZWQpKS5nZXRPclRodW5rKCgpID0+IGludHJvZHVjZVRvRG9tKGRlZmluaXRpb24pKTtcbiAgICAgIHdyaXRlT25seShlbGVtLCBkZWZpbml0aW9uLnVpZCk7XG4gICAgICByZXR1cm4gZWxlbTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0QmVoYXZpb3VycyQyID0gc3BlYyA9PiB7XG4gICAgICBjb25zdCBiZWhhdmlvdXJzID0gZ2V0JGcoc3BlYywgJ2JlaGF2aW91cnMnKS5nZXRPcih7fSk7XG4gICAgICByZXR1cm4gYmluZCQzKGtleXMoYmVoYXZpb3VycyksIG5hbWUgPT4ge1xuICAgICAgICBjb25zdCBiZWhhdmlvdXIgPSBiZWhhdmlvdXJzW25hbWVdO1xuICAgICAgICByZXR1cm4gaXNOb25OdWxsYWJsZShiZWhhdmlvdXIpID8gW2JlaGF2aW91ci5tZV0gOiBbXTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2VuZXJhdGVGcm9tID0gKHNwZWMsIGFsbCkgPT4gZ2VuZXJhdGVGcm9tJDEoc3BlYywgYWxsKTtcbiAgICBjb25zdCBnZW5lcmF0ZSQ0ID0gc3BlYyA9PiB7XG4gICAgICBjb25zdCBhbGwgPSBnZXRCZWhhdmlvdXJzJDIoc3BlYyk7XG4gICAgICByZXR1cm4gZ2VuZXJhdGVGcm9tKHNwZWMsIGFsbCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldERvbURlZmluaXRpb24gPSAoaW5mbywgYkxpc3QsIGJEYXRhKSA9PiB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uID0gdG9EZWZpbml0aW9uKGluZm8pO1xuICAgICAgY29uc3QgaW5mb01vZGlmaWNhdGlvbiA9IHRvTW9kaWZpY2F0aW9uKGluZm8pO1xuICAgICAgY29uc3QgYmFzZU1vZGlmaWNhdGlvbiA9IHsgJ2FsbG95LmJhc2UubW9kaWZpY2F0aW9uJzogaW5mb01vZGlmaWNhdGlvbiB9O1xuICAgICAgY29uc3QgbW9kaWZpY2F0aW9uID0gYkxpc3QubGVuZ3RoID4gMCA/IGNvbWJpbmUkMihiRGF0YSwgYmFzZU1vZGlmaWNhdGlvbiwgYkxpc3QsIGRlZmluaXRpb24pIDogaW5mb01vZGlmaWNhdGlvbjtcbiAgICAgIHJldHVybiBtZXJnZShkZWZpbml0aW9uLCBtb2RpZmljYXRpb24pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0RXZlbnRzID0gKGluZm8sIGJMaXN0LCBiRGF0YSkgPT4ge1xuICAgICAgY29uc3QgYmFzZUV2ZW50cyA9IHsgJ2FsbG95LmJhc2UuYmVoYXZpb3VyJzogdG9FdmVudHMoaW5mbykgfTtcbiAgICAgIHJldHVybiBjb21iaW5lJDEoYkRhdGEsIGluZm8uZXZlbnRPcmRlciwgYkxpc3QsIGJhc2VFdmVudHMpLmdldE9yRGllKCk7XG4gICAgfTtcbiAgICBjb25zdCBidWlsZCQyID0gKHNwZWMsIG9ic29sZXRlZCkgPT4ge1xuICAgICAgY29uc3QgZ2V0TWUgPSAoKSA9PiBtZTtcbiAgICAgIGNvbnN0IHN5c3RlbUFwaSA9IENlbGwoc2luZ2xldG9uJDEpO1xuICAgICAgY29uc3QgaW5mbyA9IGdldE9yRGllKHRvSW5mbyhzcGVjKSk7XG4gICAgICBjb25zdCBiQmxvYiA9IGdlbmVyYXRlJDQoc3BlYyk7XG4gICAgICBjb25zdCBiTGlzdCA9IGdldEJlaGF2aW91cnMkMyhiQmxvYik7XG4gICAgICBjb25zdCBiRGF0YSA9IGdldERhdGEkMihiQmxvYik7XG4gICAgICBjb25zdCBtb2REZWZpbml0aW9uID0gZ2V0RG9tRGVmaW5pdGlvbihpbmZvLCBiTGlzdCwgYkRhdGEpO1xuICAgICAgY29uc3QgaXRlbSA9IHJlbmRlclRvRG9tKG1vZERlZmluaXRpb24sIG9ic29sZXRlZCk7XG4gICAgICBjb25zdCBldmVudHMgPSBnZXRFdmVudHMoaW5mbywgYkxpc3QsIGJEYXRhKTtcbiAgICAgIGNvbnN0IHN1YmNvbXBvbmVudHMgPSBDZWxsKGluZm8uY29tcG9uZW50cyk7XG4gICAgICBjb25zdCBjb25uZWN0ID0gbmV3QXBpID0+IHtcbiAgICAgICAgc3lzdGVtQXBpLnNldChuZXdBcGkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRpc2Nvbm5lY3QgPSAoKSA9PiB7XG4gICAgICAgIHN5c3RlbUFwaS5zZXQoTm9Db250ZXh0QXBpKGdldE1lKSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc3luY0NvbXBvbmVudHMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuJDEgPSBjaGlsZHJlbihpdGVtKTtcbiAgICAgICAgY29uc3Qgc3VicyA9IGJpbmQkMyhjaGlsZHJlbiQxLCBjaGlsZCA9PiBzeXN0ZW1BcGkuZ2V0KCkuZ2V0QnlEb20oY2hpbGQpLmZvbGQoKCkgPT4gW10sIHB1cmUkMikpO1xuICAgICAgICBzdWJjb21wb25lbnRzLnNldChzdWJzKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjb25maWcgPSBiZWhhdmlvdXIgPT4ge1xuICAgICAgICBjb25zdCBiID0gYkRhdGE7XG4gICAgICAgIGNvbnN0IGYgPSBpc0Z1bmN0aW9uKGJbYmVoYXZpb3VyLm5hbWUoKV0pID8gYltiZWhhdmlvdXIubmFtZSgpXSA6ICgpID0+IHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kICcgKyBiZWhhdmlvdXIubmFtZSgpICsgJyBpbiAnICsgSlNPTi5zdHJpbmdpZnkoc3BlYywgbnVsbCwgMikpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZigpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGhhc0NvbmZpZ3VyZWQgPSBiZWhhdmlvdXIgPT4gaXNGdW5jdGlvbihiRGF0YVtiZWhhdmlvdXIubmFtZSgpXSk7XG4gICAgICBjb25zdCBnZXRBcGlzID0gKCkgPT4gaW5mby5hcGlzO1xuICAgICAgY29uc3QgcmVhZFN0YXRlID0gYmVoYXZpb3VyTmFtZSA9PiBiRGF0YVtiZWhhdmlvdXJOYW1lXSgpLm1hcChiID0+IGIuc3RhdGUucmVhZFN0YXRlKCkpLmdldE9yKCdub3QgZW5hYmxlZCcpO1xuICAgICAgY29uc3QgbWUgPSB7XG4gICAgICAgIHVpZDogc3BlYy51aWQsXG4gICAgICAgIGdldFN5c3RlbTogc3lzdGVtQXBpLmdldCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBoYXNDb25maWd1cmVkLFxuICAgICAgICBzcGVjLFxuICAgICAgICByZWFkU3RhdGUsXG4gICAgICAgIGdldEFwaXMsXG4gICAgICAgIGNvbm5lY3QsXG4gICAgICAgIGRpc2Nvbm5lY3QsXG4gICAgICAgIGVsZW1lbnQ6IGl0ZW0sXG4gICAgICAgIHN5bmNDb21wb25lbnRzLFxuICAgICAgICBjb21wb25lbnRzOiBzdWJjb21wb25lbnRzLmdldCxcbiAgICAgICAgZXZlbnRzXG4gICAgICB9O1xuICAgICAgcmV0dXJuIG1lO1xuICAgIH07XG5cbiAgICBjb25zdCBidWlsZFN1YmNvbXBvbmVudHMgPSAoc3BlYywgb2Jzb2xldGVkKSA9PiB7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gZ2V0JGcoc3BlYywgJ2NvbXBvbmVudHMnKS5nZXRPcihbXSk7XG4gICAgICByZXR1cm4gb2Jzb2xldGVkLmZvbGQoKCkgPT4gbWFwJDIoY29tcG9uZW50cywgYnVpbGQkMSksIG9icyA9PiBtYXAkMihjb21wb25lbnRzLCAoYywgaSkgPT4ge1xuICAgICAgICByZXR1cm4gYnVpbGRPclBhdGNoKGMsIGNoaWxkJDIob2JzLCBpKSk7XG4gICAgICB9KSk7XG4gICAgfTtcbiAgICBjb25zdCBidWlsZEZyb21TcGVjID0gKHVzZXJTcGVjLCBvYnNvbGV0ZWQpID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZXZlbnRzOiBzcGVjRXZlbnRzLFxuICAgICAgICAuLi5zcGVjXG4gICAgICB9ID0gbWFrZSQ4KHVzZXJTcGVjKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBidWlsZFN1YmNvbXBvbmVudHMoc3BlYywgb2Jzb2xldGVkKTtcbiAgICAgIGNvbnN0IGNvbXBsZXRlU3BlYyA9IHtcbiAgICAgICAgLi4uc3BlYyxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgLi4uRGVmYXVsdEV2ZW50cyxcbiAgICAgICAgICAuLi5zcGVjRXZlbnRzXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHNcbiAgICAgIH07XG4gICAgICByZXR1cm4gUmVzdWx0LnZhbHVlKGJ1aWxkJDIoY29tcGxldGVTcGVjLCBvYnNvbGV0ZWQpKTtcbiAgICB9O1xuICAgIGNvbnN0IHRleHQkMiA9IHRleHRDb250ZW50ID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBTdWdhckVsZW1lbnQuZnJvbVRleHQodGV4dENvbnRlbnQpO1xuICAgICAgcmV0dXJuIGV4dGVybmFsJDEoeyBlbGVtZW50IH0pO1xuICAgIH07XG4gICAgY29uc3QgZXh0ZXJuYWwkMSA9IHNwZWMgPT4ge1xuICAgICAgY29uc3QgZXh0U3BlYyA9IGFzUmF3T3JEaWUkMSgnZXh0ZXJuYWwuY29tcG9uZW50Jywgb2JqT2ZPbmx5KFtcbiAgICAgICAgcmVxdWlyZWQkMSgnZWxlbWVudCcpLFxuICAgICAgICBvcHRpb24kMygndWlkJylcbiAgICAgIF0pLCBzcGVjKTtcbiAgICAgIGNvbnN0IHN5c3RlbUFwaSA9IENlbGwoTm9Db250ZXh0QXBpKCkpO1xuICAgICAgY29uc3QgY29ubmVjdCA9IG5ld0FwaSA9PiB7XG4gICAgICAgIHN5c3RlbUFwaS5zZXQobmV3QXBpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBkaXNjb25uZWN0ID0gKCkgPT4ge1xuICAgICAgICBzeXN0ZW1BcGkuc2V0KE5vQ29udGV4dEFwaSgoKSA9PiBtZSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVpZCA9IGV4dFNwZWMudWlkLmdldE9yVGh1bmsoKCkgPT4gZ2VuZXJhdGUkNSgnZXh0ZXJuYWwnKSk7XG4gICAgICB3cml0ZU9ubHkoZXh0U3BlYy5lbGVtZW50LCB1aWQpO1xuICAgICAgY29uc3QgbWUgPSB7XG4gICAgICAgIHVpZCxcbiAgICAgICAgZ2V0U3lzdGVtOiBzeXN0ZW1BcGkuZ2V0LFxuICAgICAgICBjb25maWc6IE9wdGlvbmFsLm5vbmUsXG4gICAgICAgIGhhc0NvbmZpZ3VyZWQ6IG5ldmVyLFxuICAgICAgICBjb25uZWN0LFxuICAgICAgICBkaXNjb25uZWN0LFxuICAgICAgICBnZXRBcGlzOiAoKSA9PiAoe30pLFxuICAgICAgICBlbGVtZW50OiBleHRTcGVjLmVsZW1lbnQsXG4gICAgICAgIHNwZWMsXG4gICAgICAgIHJlYWRTdGF0ZTogY29uc3RhbnQkMSgnTm8gc3RhdGUnKSxcbiAgICAgICAgc3luY0NvbXBvbmVudHM6IG5vb3AsXG4gICAgICAgIGNvbXBvbmVudHM6IGNvbnN0YW50JDEoW10pLFxuICAgICAgICBldmVudHM6IHt9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHByZW1hZGUkMShtZSk7XG4gICAgfTtcbiAgICBjb25zdCB1aWRzID0gZ2VuZXJhdGUkNTtcbiAgICBjb25zdCBpc1NrZXRjaFNwZWMkMSA9IHNwZWMgPT4gaGFzJDIoc3BlYywgJ3VpZCcpO1xuICAgIGNvbnN0IGJ1aWxkT3JQYXRjaCA9IChzcGVjLCBvYnNvbGV0ZWQpID0+IGdldFByZW1hZGUoc3BlYykuZ2V0T3JUaHVuaygoKSA9PiB7XG4gICAgICBjb25zdCB1c2VyU3BlY1dpdGhVaWQgPSBpc1NrZXRjaFNwZWMkMShzcGVjKSA/IHNwZWMgOiB7XG4gICAgICAgIHVpZDogdWlkcygnJyksXG4gICAgICAgIC4uLnNwZWNcbiAgICAgIH07XG4gICAgICByZXR1cm4gYnVpbGRGcm9tU3BlYyh1c2VyU3BlY1dpdGhVaWQsIG9ic29sZXRlZCkuZ2V0T3JEaWUoKTtcbiAgICB9KTtcbiAgICBjb25zdCBidWlsZCQxID0gc3BlYyA9PiBidWlsZE9yUGF0Y2goc3BlYywgT3B0aW9uYWwubm9uZSgpKTtcbiAgICBjb25zdCBwcmVtYWRlID0gcHJlbWFkZSQxO1xuXG4gICAgdmFyIENsb3Nlc3RPckFuY2VzdG9yID0gKGlzLCBhbmNlc3Rvciwgc2NvcGUsIGEsIGlzUm9vdCkgPT4ge1xuICAgICAgaWYgKGlzKHNjb3BlLCBhKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShzY29wZSk7XG4gICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24oaXNSb290KSAmJiBpc1Jvb3Qoc2NvcGUpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYW5jZXN0b3Ioc2NvcGUsIGEsIGlzUm9vdCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGFuY2VzdG9yJDEgPSAoc2NvcGUsIHByZWRpY2F0ZSwgaXNSb290KSA9PiB7XG4gICAgICBsZXQgZWxlbWVudCA9IHNjb3BlLmRvbTtcbiAgICAgIGNvbnN0IHN0b3AgPSBpc0Z1bmN0aW9uKGlzUm9vdCkgPyBpc1Jvb3QgOiBuZXZlcjtcbiAgICAgIHdoaWxlIChlbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgZWwgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlbGVtZW50KTtcbiAgICAgICAgaWYgKHByZWRpY2F0ZShlbCkpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShlbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RvcChlbCkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGNsb3Nlc3QkMyA9IChzY29wZSwgcHJlZGljYXRlLCBpc1Jvb3QpID0+IHtcbiAgICAgIGNvbnN0IGlzID0gKHMsIHRlc3QpID0+IHRlc3Qocyk7XG4gICAgICByZXR1cm4gQ2xvc2VzdE9yQW5jZXN0b3IoaXMsIGFuY2VzdG9yJDEsIHNjb3BlLCBwcmVkaWNhdGUsIGlzUm9vdCk7XG4gICAgfTtcbiAgICBjb25zdCBjaGlsZCQxID0gKHNjb3BlLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGNvbnN0IHByZWQgPSBub2RlID0+IHByZWRpY2F0ZShTdWdhckVsZW1lbnQuZnJvbURvbShub2RlKSk7XG4gICAgICBjb25zdCByZXN1bHQgPSBmaW5kJDUoc2NvcGUuZG9tLmNoaWxkTm9kZXMsIHByZWQpO1xuICAgICAgcmV0dXJuIHJlc3VsdC5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIH07XG4gICAgY29uc3QgZGVzY2VuZGFudCQxID0gKHNjb3BlLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGNvbnN0IGRlc2NlbmQgPSBub2RlID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjaGlsZCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5vZGUuY2hpbGROb2Rlc1tpXSk7XG4gICAgICAgICAgaWYgKHByZWRpY2F0ZShjaGlsZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGNoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVzID0gZGVzY2VuZChub2RlLmNoaWxkTm9kZXNbaV0pO1xuICAgICAgICAgIGlmIChyZXMuaXNTb21lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGRlc2NlbmQoc2NvcGUuZG9tKTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2xvc2VzdCQyID0gKHNjb3BlLCBwcmVkaWNhdGUsIGlzUm9vdCkgPT4gY2xvc2VzdCQzKHNjb3BlLCBwcmVkaWNhdGUsIGlzUm9vdCkuaXNTb21lKCk7XG5cbiAgICBjb25zdCBhbmNlc3RvciA9IChzY29wZSwgc2VsZWN0b3IsIGlzUm9vdCkgPT4gYW5jZXN0b3IkMShzY29wZSwgZSA9PiBpcyhlLCBzZWxlY3RvciksIGlzUm9vdCk7XG4gICAgY29uc3QgY2hpbGQgPSAoc2NvcGUsIHNlbGVjdG9yKSA9PiBjaGlsZCQxKHNjb3BlLCBlID0+IGlzKGUsIHNlbGVjdG9yKSk7XG4gICAgY29uc3QgZGVzY2VuZGFudCA9IChzY29wZSwgc2VsZWN0b3IpID0+IG9uZShzZWxlY3Rvciwgc2NvcGUpO1xuICAgIGNvbnN0IGNsb3Nlc3QkMSA9IChzY29wZSwgc2VsZWN0b3IsIGlzUm9vdCkgPT4ge1xuICAgICAgY29uc3QgaXMkMSA9IChlbGVtZW50LCBzZWxlY3RvcikgPT4gaXMoZWxlbWVudCwgc2VsZWN0b3IpO1xuICAgICAgcmV0dXJuIENsb3Nlc3RPckFuY2VzdG9yKGlzJDEsIGFuY2VzdG9yLCBzY29wZSwgc2VsZWN0b3IsIGlzUm9vdCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGF0dHJpYnV0ZSA9ICdhcmlhLWNvbnRyb2xzJztcbiAgICBjb25zdCBmaW5kJDEgPSBxdWVyeUVsZW0gPT4ge1xuICAgICAgY29uc3QgZGVwZW5kZW50ID0gY2xvc2VzdCQzKHF1ZXJ5RWxlbSwgZWxlbSA9PiB7XG4gICAgICAgIGlmICghaXNFbGVtZW50JDEoZWxlbSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWQgPSBnZXQkZihlbGVtLCAnaWQnKTtcbiAgICAgICAgcmV0dXJuIGlkICE9PSB1bmRlZmluZWQgJiYgaWQuaW5kZXhPZihhdHRyaWJ1dGUpID4gLTE7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkZXBlbmRlbnQuYmluZChkZXAgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IGdldCRmKGRlcCwgJ2lkJyk7XG4gICAgICAgIGNvbnN0IGRvcyA9IGdldFJvb3ROb2RlKGRlcCk7XG4gICAgICAgIHJldHVybiBkZXNjZW5kYW50KGRvcywgYFskeyBhdHRyaWJ1dGUgfT1cIiR7IGlkIH1cIl1gKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbWFuYWdlciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGFyaWFJZCA9IGdlbmVyYXRlJDYoYXR0cmlidXRlKTtcbiAgICAgIGNvbnN0IGxpbmsgPSBlbGVtID0+IHtcbiAgICAgICAgc2V0JDkoZWxlbSwgYXR0cmlidXRlLCBhcmlhSWQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVubGluayA9IGVsZW0gPT4ge1xuICAgICAgICByZW1vdmUkNyhlbGVtLCBhdHRyaWJ1dGUpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBhcmlhSWQsXG4gICAgICAgIGxpbmssXG4gICAgICAgIHVubGlua1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNBcmlhUGFydE9mID0gKGNvbXBvbmVudCwgcXVlcnlFbGVtKSA9PiBmaW5kJDEocXVlcnlFbGVtKS5leGlzdHMob3duZXIgPT4gaXNQYXJ0T2YkMShjb21wb25lbnQsIG93bmVyKSk7XG4gICAgY29uc3QgaXNQYXJ0T2YkMSA9IChjb21wb25lbnQsIHF1ZXJ5RWxlbSkgPT4gY2xvc2VzdCQyKHF1ZXJ5RWxlbSwgZWwgPT4gZXEoZWwsIGNvbXBvbmVudC5lbGVtZW50KSwgbmV2ZXIpIHx8IGlzQXJpYVBhcnRPZihjb21wb25lbnQsIHF1ZXJ5RWxlbSk7XG5cbiAgICBjb25zdCB1bmtub3duID0gJ3Vua25vd24nO1xuICAgIHZhciBFdmVudENvbmZpZ3VyYXRpb247XG4gICAgKGZ1bmN0aW9uIChFdmVudENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIEV2ZW50Q29uZmlndXJhdGlvbltFdmVudENvbmZpZ3VyYXRpb25bJ1NUT1AnXSA9IDBdID0gJ1NUT1AnO1xuICAgICAgRXZlbnRDb25maWd1cmF0aW9uW0V2ZW50Q29uZmlndXJhdGlvblsnTk9STUFMJ10gPSAxXSA9ICdOT1JNQUwnO1xuICAgICAgRXZlbnRDb25maWd1cmF0aW9uW0V2ZW50Q29uZmlndXJhdGlvblsnTE9HR0lORyddID0gMl0gPSAnTE9HR0lORyc7XG4gICAgfShFdmVudENvbmZpZ3VyYXRpb24gfHwgKEV2ZW50Q29uZmlndXJhdGlvbiA9IHt9KSkpO1xuICAgIGNvbnN0IGV2ZW50Q29uZmlnID0gQ2VsbCh7fSk7XG4gICAgY29uc3QgbWFrZUV2ZW50TG9nZ2VyID0gKGV2ZW50TmFtZSwgaW5pdGlhbFRhcmdldCkgPT4ge1xuICAgICAgY29uc3Qgc2VxdWVuY2UgPSBbXTtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbG9nRXZlbnRDdXQ6IChfbmFtZSwgdGFyZ2V0LCBwdXJwb3NlKSA9PiB7XG4gICAgICAgICAgc2VxdWVuY2UucHVzaCh7XG4gICAgICAgICAgICBvdXRjb21lOiAnY3V0JyxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHB1cnBvc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbG9nRXZlbnRTdG9wcGVkOiAoX25hbWUsIHRhcmdldCwgcHVycG9zZSkgPT4ge1xuICAgICAgICAgIHNlcXVlbmNlLnB1c2goe1xuICAgICAgICAgICAgb3V0Y29tZTogJ3N0b3BwZWQnLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgcHVycG9zZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBsb2dOb1BhcmVudDogKF9uYW1lLCB0YXJnZXQsIHB1cnBvc2UpID0+IHtcbiAgICAgICAgICBzZXF1ZW5jZS5wdXNoKHtcbiAgICAgICAgICAgIG91dGNvbWU6ICduby1wYXJlbnQnLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgcHVycG9zZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBsb2dFdmVudE5vSGFuZGxlcnM6IChfbmFtZSwgdGFyZ2V0KSA9PiB7XG4gICAgICAgICAgc2VxdWVuY2UucHVzaCh7XG4gICAgICAgICAgICBvdXRjb21lOiAnbm8taGFuZGxlcnMtbGVmdCcsXG4gICAgICAgICAgICB0YXJnZXRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbG9nRXZlbnRSZXNwb25zZTogKF9uYW1lLCB0YXJnZXQsIHB1cnBvc2UpID0+IHtcbiAgICAgICAgICBzZXF1ZW5jZS5wdXNoKHtcbiAgICAgICAgICAgIG91dGNvbWU6ICdyZXNwb25zZScsXG4gICAgICAgICAgICBwdXJwb3NlLFxuICAgICAgICAgICAgdGFyZ2V0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHdyaXRlOiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmluaXNoVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgIGlmIChjb250YWlucyQyKFtcbiAgICAgICAgICAgICAgJ21vdXNlbW92ZScsXG4gICAgICAgICAgICAgICdtb3VzZW92ZXInLFxuICAgICAgICAgICAgICAnbW91c2VvdXQnLFxuICAgICAgICAgICAgICBzeXN0ZW1Jbml0KClcbiAgICAgICAgICAgIF0sIGV2ZW50TmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5sb2coZXZlbnROYW1lLCB7XG4gICAgICAgICAgICBldmVudDogZXZlbnROYW1lLFxuICAgICAgICAgICAgdGltZTogZmluaXNoVGltZSAtIHN0YXJ0VGltZSxcbiAgICAgICAgICAgIHRhcmdldDogaW5pdGlhbFRhcmdldC5kb20sXG4gICAgICAgICAgICBzZXF1ZW5jZTogbWFwJDIoc2VxdWVuY2UsIHMgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNvbnRhaW5zJDIoW1xuICAgICAgICAgICAgICAgICAgJ2N1dCcsXG4gICAgICAgICAgICAgICAgICAnc3RvcHBlZCcsXG4gICAgICAgICAgICAgICAgICAncmVzcG9uc2UnXG4gICAgICAgICAgICAgICAgXSwgcy5vdXRjb21lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzLm91dGNvbWU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd7JyArIHMucHVycG9zZSArICd9ICcgKyBzLm91dGNvbWUgKyAnIGF0ICgnICsgZWxlbWVudChzLnRhcmdldCkgKyAnKSc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBwcm9jZXNzRXZlbnQgPSAoZXZlbnROYW1lLCBpbml0aWFsVGFyZ2V0LCBmKSA9PiB7XG4gICAgICBjb25zdCBzdGF0dXMgPSBnZXQkZyhldmVudENvbmZpZy5nZXQoKSwgZXZlbnROYW1lKS5vclRodW5rKCgpID0+IHtcbiAgICAgICAgY29uc3QgcGF0dGVybnMgPSBrZXlzKGV2ZW50Q29uZmlnLmdldCgpKTtcbiAgICAgICAgcmV0dXJuIGZpbmRNYXAocGF0dGVybnMsIHAgPT4gZXZlbnROYW1lLmluZGV4T2YocCkgPiAtMSA/IE9wdGlvbmFsLnNvbWUoZXZlbnRDb25maWcuZ2V0KClbcF0pIDogT3B0aW9uYWwubm9uZSgpKTtcbiAgICAgIH0pLmdldE9yKEV2ZW50Q29uZmlndXJhdGlvbi5OT1JNQUwpO1xuICAgICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgRXZlbnRDb25maWd1cmF0aW9uLk5PUk1BTDpcbiAgICAgICAgcmV0dXJuIGYobm9Mb2dnZXIoKSk7XG4gICAgICBjYXNlIEV2ZW50Q29uZmlndXJhdGlvbi5MT0dHSU5HOiB7XG4gICAgICAgICAgY29uc3QgbG9nZ2VyID0gbWFrZUV2ZW50TG9nZ2VyKGV2ZW50TmFtZSwgaW5pdGlhbFRhcmdldCk7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0ID0gZihsb2dnZXIpO1xuICAgICAgICAgIGxvZ2dlci53cml0ZSgpO1xuICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgRXZlbnRDb25maWd1cmF0aW9uLlNUT1A6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcGF0aCA9IFtcbiAgICAgICdhbGxveS9kYXRhL0ZpZWxkcycsXG4gICAgICAnYWxsb3kvZGVidWdnaW5nL0RlYnVnZ2luZydcbiAgICBdO1xuICAgIGNvbnN0IGdldFRyYWNlID0gKCkgPT4ge1xuICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKCk7XG4gICAgICBpZiAoZXJyLnN0YWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgbGluZXMgPSBlcnIuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgICByZXR1cm4gZmluZCQ1KGxpbmVzLCBsaW5lID0+IGxpbmUuaW5kZXhPZignYWxsb3knKSA+IDAgJiYgIWV4aXN0cyhwYXRoLCBwID0+IGxpbmUuaW5kZXhPZihwKSA+IC0xKSkuZ2V0T3IodW5rbm93bik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5rbm93bjtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlnbm9yZUV2ZW50ID0ge1xuICAgICAgbG9nRXZlbnRDdXQ6IG5vb3AsXG4gICAgICBsb2dFdmVudFN0b3BwZWQ6IG5vb3AsXG4gICAgICBsb2dOb1BhcmVudDogbm9vcCxcbiAgICAgIGxvZ0V2ZW50Tm9IYW5kbGVyczogbm9vcCxcbiAgICAgIGxvZ0V2ZW50UmVzcG9uc2U6IG5vb3AsXG4gICAgICB3cml0ZTogbm9vcFxuICAgIH07XG4gICAgY29uc3QgbW9uaXRvckV2ZW50ID0gKGV2ZW50TmFtZSwgaW5pdGlhbFRhcmdldCwgZikgPT4gcHJvY2Vzc0V2ZW50KGV2ZW50TmFtZSwgaW5pdGlhbFRhcmdldCwgZik7XG4gICAgY29uc3Qgbm9Mb2dnZXIgPSBjb25zdGFudCQxKGlnbm9yZUV2ZW50KTtcblxuICAgIGNvbnN0IG1lbnVGaWVsZHMgPSBjb25zdGFudCQxKFtcbiAgICAgIHJlcXVpcmVkJDEoJ21lbnUnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ3NlbGVjdGVkTWVudScpXG4gICAgXSk7XG4gICAgY29uc3QgaXRlbUZpZWxkcyA9IGNvbnN0YW50JDEoW1xuICAgICAgcmVxdWlyZWQkMSgnaXRlbScpLFxuICAgICAgcmVxdWlyZWQkMSgnc2VsZWN0ZWRJdGVtJylcbiAgICBdKTtcbiAgICBjb25zdGFudCQxKG9iak9mKGl0ZW1GaWVsZHMoKS5jb25jYXQobWVudUZpZWxkcygpKSkpO1xuICAgIGNvbnN0IGl0ZW1TY2hlbWEkMyA9IGNvbnN0YW50JDEob2JqT2YoaXRlbUZpZWxkcygpKSk7XG5cbiAgICBjb25zdCBfaW5pdFNpemUgPSByZXF1aXJlZE9iak9mKCdpbml0U2l6ZScsIFtcbiAgICAgIHJlcXVpcmVkJDEoJ251bUNvbHVtbnMnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ251bVJvd3MnKVxuICAgIF0pO1xuICAgIGNvbnN0IGl0ZW1NYXJrZXJzID0gKCkgPT4gcmVxdWlyZWRPZignbWFya2VycycsIGl0ZW1TY2hlbWEkMygpKTtcbiAgICBjb25zdCB0aWVyZWRNZW51TWFya2VycyA9ICgpID0+IHJlcXVpcmVkT2JqT2YoJ21hcmtlcnMnLCBbcmVxdWlyZWQkMSgnYmFja2dyb3VuZE1lbnUnKV0uY29uY2F0KG1lbnVGaWVsZHMoKSkuY29uY2F0KGl0ZW1GaWVsZHMoKSkpO1xuICAgIGNvbnN0IG1hcmtlcnMkMSA9IHJlcXVpcmVkID0+IHJlcXVpcmVkT2JqT2YoJ21hcmtlcnMnLCBtYXAkMihyZXF1aXJlZCwgcmVxdWlyZWQkMSkpO1xuICAgIGNvbnN0IG9uUHJlc2VuY2VIYW5kbGVyID0gKGxhYmVsLCBmaWVsZE5hbWUsIHByZXNlbmNlKSA9PiB7XG4gICAgICBnZXRUcmFjZSgpO1xuICAgICAgcmV0dXJuIGZpZWxkJDEoZmllbGROYW1lLCBmaWVsZE5hbWUsIHByZXNlbmNlLCB2YWx1ZU9mKGYgPT4gUmVzdWx0LnZhbHVlKCguLi5hcmdzKSA9PiB7XG4gICAgICAgIHJldHVybiBmLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICB9KSkpO1xuICAgIH07XG4gICAgY29uc3Qgb25IYW5kbGVyID0gZmllbGROYW1lID0+IG9uUHJlc2VuY2VIYW5kbGVyKCdvbkhhbmRsZXInLCBmaWVsZE5hbWUsIGRlZmF1bHRlZCQxKG5vb3ApKTtcbiAgICBjb25zdCBvbktleWJvYXJkSGFuZGxlciA9IGZpZWxkTmFtZSA9PiBvblByZXNlbmNlSGFuZGxlcignb25LZXlib2FyZEhhbmRsZXInLCBmaWVsZE5hbWUsIGRlZmF1bHRlZCQxKE9wdGlvbmFsLm5vbmUpKTtcbiAgICBjb25zdCBvblN0cmljdEhhbmRsZXIgPSBmaWVsZE5hbWUgPT4gb25QcmVzZW5jZUhhbmRsZXIoJ29uSGFuZGxlcicsIGZpZWxkTmFtZSwgcmVxdWlyZWQkMigpKTtcbiAgICBjb25zdCBvblN0cmljdEtleWJvYXJkSGFuZGxlciA9IGZpZWxkTmFtZSA9PiBvblByZXNlbmNlSGFuZGxlcignb25LZXlib2FyZEhhbmRsZXInLCBmaWVsZE5hbWUsIHJlcXVpcmVkJDIoKSk7XG4gICAgY29uc3Qgb3V0cHV0JDEgPSAobmFtZSwgdmFsdWUpID0+IGN1c3RvbUZpZWxkKG5hbWUsIGNvbnN0YW50JDEodmFsdWUpKTtcbiAgICBjb25zdCBzbmFwc2hvdCA9IG5hbWUgPT4gY3VzdG9tRmllbGQobmFtZSwgaWRlbnRpdHkpO1xuICAgIGNvbnN0IGluaXRTaXplID0gY29uc3RhbnQkMShfaW5pdFNpemUpO1xuXG4gICAgY29uc3QgbnUkNiA9ICh4LCB5LCBidWJibGUsIGRpcmVjdGlvbiwgcGxhY2VtZW50LCBib3VuZHNSZXN0cmljdGlvbiwgbGFiZWxQcmVmaXgsIGFsd2F5c0ZpdCA9IGZhbHNlKSA9PiAoe1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBidWJibGUsXG4gICAgICBkaXJlY3Rpb24sXG4gICAgICBwbGFjZW1lbnQsXG4gICAgICByZXN0cmljdGlvbjogYm91bmRzUmVzdHJpY3Rpb24sXG4gICAgICBsYWJlbDogYCR7IGxhYmVsUHJlZml4IH0tJHsgcGxhY2VtZW50IH1gLFxuICAgICAgYWx3YXlzRml0XG4gICAgfSk7XG5cbiAgICBjb25zdCBhZHQkYSA9IEFkdC5nZW5lcmF0ZShbXG4gICAgICB7IHNvdXRoZWFzdDogW10gfSxcbiAgICAgIHsgc291dGh3ZXN0OiBbXSB9LFxuICAgICAgeyBub3J0aGVhc3Q6IFtdIH0sXG4gICAgICB7IG5vcnRod2VzdDogW10gfSxcbiAgICAgIHsgc291dGg6IFtdIH0sXG4gICAgICB7IG5vcnRoOiBbXSB9LFxuICAgICAgeyBlYXN0OiBbXSB9LFxuICAgICAgeyB3ZXN0OiBbXSB9XG4gICAgXSk7XG4gICAgY29uc3QgY2F0YSQyID0gKHN1YmplY3QsIHNvdXRoZWFzdCwgc291dGh3ZXN0LCBub3J0aGVhc3QsIG5vcnRod2VzdCwgc291dGgsIG5vcnRoLCBlYXN0LCB3ZXN0KSA9PiBzdWJqZWN0LmZvbGQoc291dGhlYXN0LCBzb3V0aHdlc3QsIG5vcnRoZWFzdCwgbm9ydGh3ZXN0LCBzb3V0aCwgbm9ydGgsIGVhc3QsIHdlc3QpO1xuICAgIGNvbnN0IGNhdGFWZXJ0aWNhbCA9IChzdWJqZWN0LCBzb3V0aCwgbWlkZGxlLCBub3J0aCkgPT4gc3ViamVjdC5mb2xkKHNvdXRoLCBzb3V0aCwgbm9ydGgsIG5vcnRoLCBzb3V0aCwgbm9ydGgsIG1pZGRsZSwgbWlkZGxlKTtcbiAgICBjb25zdCBjYXRhSG9yaXpvbnRhbCA9IChzdWJqZWN0LCBlYXN0LCBtaWRkbGUsIHdlc3QpID0+IHN1YmplY3QuZm9sZChlYXN0LCB3ZXN0LCBlYXN0LCB3ZXN0LCBtaWRkbGUsIG1pZGRsZSwgZWFzdCwgd2VzdCk7XG4gICAgY29uc3Qgc291dGhlYXN0JDMgPSBhZHQkYS5zb3V0aGVhc3Q7XG4gICAgY29uc3Qgc291dGh3ZXN0JDMgPSBhZHQkYS5zb3V0aHdlc3Q7XG4gICAgY29uc3Qgbm9ydGhlYXN0JDMgPSBhZHQkYS5ub3J0aGVhc3Q7XG4gICAgY29uc3Qgbm9ydGh3ZXN0JDMgPSBhZHQkYS5ub3J0aHdlc3Q7XG4gICAgY29uc3Qgc291dGgkMyA9IGFkdCRhLnNvdXRoO1xuICAgIGNvbnN0IG5vcnRoJDMgPSBhZHQkYS5ub3J0aDtcbiAgICBjb25zdCBlYXN0JDMgPSBhZHQkYS5lYXN0O1xuICAgIGNvbnN0IHdlc3QkMyA9IGFkdCRhLndlc3Q7XG5cbiAgICBjb25zdCBjeWNsZUJ5ID0gKHZhbHVlLCBkZWx0YSwgbWluLCBtYXgpID0+IHtcbiAgICAgIGNvbnN0IHIgPSB2YWx1ZSArIGRlbHRhO1xuICAgICAgaWYgKHIgPiBtYXgpIHtcbiAgICAgICAgcmV0dXJuIG1pbjtcbiAgICAgIH0gZWxzZSBpZiAociA8IG1pbikge1xuICAgICAgICByZXR1cm4gbWF4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjbGFtcCA9ICh2YWx1ZSwgbWluLCBtYXgpID0+IE1hdGgubWluKE1hdGgubWF4KHZhbHVlLCBtaW4pLCBtYXgpO1xuXG4gICAgY29uc3QgZ2V0UmVzdHJpY3Rpb24gPSAoYW5jaG9yLCByZXN0cmljdGlvbikgPT4ge1xuICAgICAgc3dpdGNoIChyZXN0cmljdGlvbikge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gYW5jaG9yLng7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJldHVybiBhbmNob3IueCArIGFuY2hvci53aWR0aDtcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIGFuY2hvci55O1xuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gYW5jaG9yLnkgKyBhbmNob3IuaGVpZ2h0O1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYm91bmRzUmVzdHJpY3Rpb24gPSAoYW5jaG9yLCByZXN0cmljdGlvbnMpID0+IG1hcFRvT2JqZWN0KFtcbiAgICAgICdsZWZ0JyxcbiAgICAgICdyaWdodCcsXG4gICAgICAndG9wJyxcbiAgICAgICdib3R0b20nXG4gICAgXSwgZGlyID0+IGdldCRnKHJlc3RyaWN0aW9ucywgZGlyKS5tYXAocmVzdHJpY3Rpb24gPT4gZ2V0UmVzdHJpY3Rpb24oYW5jaG9yLCByZXN0cmljdGlvbikpKTtcbiAgICBjb25zdCBhZGp1c3RCb3VuZHMgPSAoYm91bmRzJDEsIHJlc3RyaWN0aW9uLCBidWJibGVPZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IGFwcGx5UmVzdHJpY3Rpb24gPSAoZGlyLCBjdXJyZW50KSA9PiByZXN0cmljdGlvbltkaXJdLm1hcChwb3MgPT4ge1xuICAgICAgICBjb25zdCBpc1ZlcnRpY2FsQXhpcyA9IGRpciA9PT0gJ3RvcCcgfHwgZGlyID09PSAnYm90dG9tJztcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gaXNWZXJ0aWNhbEF4aXMgPyBidWJibGVPZmZzZXQudG9wIDogYnViYmxlT2Zmc2V0LmxlZnQ7XG4gICAgICAgIGNvbnN0IGNvbXBhcmF0b3IgPSBkaXIgPT09ICdsZWZ0JyB8fCBkaXIgPT09ICd0b3AnID8gTWF0aC5tYXggOiBNYXRoLm1pbjtcbiAgICAgICAgY29uc3QgbmV3UG9zID0gY29tcGFyYXRvcihwb3MsIGN1cnJlbnQpICsgb2Zmc2V0O1xuICAgICAgICByZXR1cm4gaXNWZXJ0aWNhbEF4aXMgPyBjbGFtcChuZXdQb3MsIGJvdW5kcyQxLnksIGJvdW5kcyQxLmJvdHRvbSkgOiBjbGFtcChuZXdQb3MsIGJvdW5kcyQxLngsIGJvdW5kcyQxLnJpZ2h0KTtcbiAgICAgIH0pLmdldE9yKGN1cnJlbnQpO1xuICAgICAgY29uc3QgYWRqdXN0ZWRMZWZ0ID0gYXBwbHlSZXN0cmljdGlvbignbGVmdCcsIGJvdW5kcyQxLngpO1xuICAgICAgY29uc3QgYWRqdXN0ZWRUb3AgPSBhcHBseVJlc3RyaWN0aW9uKCd0b3AnLCBib3VuZHMkMS55KTtcbiAgICAgIGNvbnN0IGFkanVzdGVkUmlnaHQgPSBhcHBseVJlc3RyaWN0aW9uKCdyaWdodCcsIGJvdW5kcyQxLnJpZ2h0KTtcbiAgICAgIGNvbnN0IGFkanVzdGVkQm90dG9tID0gYXBwbHlSZXN0cmljdGlvbignYm90dG9tJywgYm91bmRzJDEuYm90dG9tKTtcbiAgICAgIHJldHVybiBib3VuZHMoYWRqdXN0ZWRMZWZ0LCBhZGp1c3RlZFRvcCwgYWRqdXN0ZWRSaWdodCAtIGFkanVzdGVkTGVmdCwgYWRqdXN0ZWRCb3R0b20gLSBhZGp1c3RlZFRvcCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsUHJlZml4JDIgPSAnbGF5b3V0JztcbiAgICBjb25zdCBlYXN0WCQxID0gYW5jaG9yID0+IGFuY2hvci54O1xuICAgIGNvbnN0IG1pZGRsZVgkMSA9IChhbmNob3IsIGVsZW1lbnQpID0+IGFuY2hvci54ICsgYW5jaG9yLndpZHRoIC8gMiAtIGVsZW1lbnQud2lkdGggLyAyO1xuICAgIGNvbnN0IHdlc3RYJDEgPSAoYW5jaG9yLCBlbGVtZW50KSA9PiBhbmNob3IueCArIGFuY2hvci53aWR0aCAtIGVsZW1lbnQud2lkdGg7XG4gICAgY29uc3Qgbm9ydGhZJDIgPSAoYW5jaG9yLCBlbGVtZW50KSA9PiBhbmNob3IueSAtIGVsZW1lbnQuaGVpZ2h0O1xuICAgIGNvbnN0IHNvdXRoWSQyID0gYW5jaG9yID0+IGFuY2hvci55ICsgYW5jaG9yLmhlaWdodDtcbiAgICBjb25zdCBjZW50cmVZJDEgPSAoYW5jaG9yLCBlbGVtZW50KSA9PiBhbmNob3IueSArIGFuY2hvci5oZWlnaHQgLyAyIC0gZWxlbWVudC5oZWlnaHQgLyAyO1xuICAgIGNvbnN0IGVhc3RFZGdlWCQxID0gYW5jaG9yID0+IGFuY2hvci54ICsgYW5jaG9yLndpZHRoO1xuICAgIGNvbnN0IHdlc3RFZGdlWCQxID0gKGFuY2hvciwgZWxlbWVudCkgPT4gYW5jaG9yLnggLSBlbGVtZW50LndpZHRoO1xuICAgIGNvbnN0IHNvdXRoZWFzdCQyID0gKGFuY2hvciwgZWxlbWVudCwgYnViYmxlcykgPT4gbnUkNihlYXN0WCQxKGFuY2hvciksIHNvdXRoWSQyKGFuY2hvciksIGJ1YmJsZXMuc291dGhlYXN0KCksIHNvdXRoZWFzdCQzKCksICdzb3V0aGVhc3QnLCBib3VuZHNSZXN0cmljdGlvbihhbmNob3IsIHtcbiAgICAgIGxlZnQ6IDEsXG4gICAgICB0b3A6IDNcbiAgICB9KSwgbGFiZWxQcmVmaXgkMik7XG4gICAgY29uc3Qgc291dGh3ZXN0JDIgPSAoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzKSA9PiBudSQ2KHdlc3RYJDEoYW5jaG9yLCBlbGVtZW50KSwgc291dGhZJDIoYW5jaG9yKSwgYnViYmxlcy5zb3V0aHdlc3QoKSwgc291dGh3ZXN0JDMoKSwgJ3NvdXRod2VzdCcsIGJvdW5kc1Jlc3RyaWN0aW9uKGFuY2hvciwge1xuICAgICAgcmlnaHQ6IDAsXG4gICAgICB0b3A6IDNcbiAgICB9KSwgbGFiZWxQcmVmaXgkMik7XG4gICAgY29uc3Qgbm9ydGhlYXN0JDIgPSAoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzKSA9PiBudSQ2KGVhc3RYJDEoYW5jaG9yKSwgbm9ydGhZJDIoYW5jaG9yLCBlbGVtZW50KSwgYnViYmxlcy5ub3J0aGVhc3QoKSwgbm9ydGhlYXN0JDMoKSwgJ25vcnRoZWFzdCcsIGJvdW5kc1Jlc3RyaWN0aW9uKGFuY2hvciwge1xuICAgICAgbGVmdDogMSxcbiAgICAgIGJvdHRvbTogMlxuICAgIH0pLCBsYWJlbFByZWZpeCQyKTtcbiAgICBjb25zdCBub3J0aHdlc3QkMiA9IChhbmNob3IsIGVsZW1lbnQsIGJ1YmJsZXMpID0+IG51JDYod2VzdFgkMShhbmNob3IsIGVsZW1lbnQpLCBub3J0aFkkMihhbmNob3IsIGVsZW1lbnQpLCBidWJibGVzLm5vcnRod2VzdCgpLCBub3J0aHdlc3QkMygpLCAnbm9ydGh3ZXN0JywgYm91bmRzUmVzdHJpY3Rpb24oYW5jaG9yLCB7XG4gICAgICByaWdodDogMCxcbiAgICAgIGJvdHRvbTogMlxuICAgIH0pLCBsYWJlbFByZWZpeCQyKTtcbiAgICBjb25zdCBub3J0aCQyID0gKGFuY2hvciwgZWxlbWVudCwgYnViYmxlcykgPT4gbnUkNihtaWRkbGVYJDEoYW5jaG9yLCBlbGVtZW50KSwgbm9ydGhZJDIoYW5jaG9yLCBlbGVtZW50KSwgYnViYmxlcy5ub3J0aCgpLCBub3J0aCQzKCksICdub3J0aCcsIGJvdW5kc1Jlc3RyaWN0aW9uKGFuY2hvciwgeyBib3R0b206IDIgfSksIGxhYmVsUHJlZml4JDIpO1xuICAgIGNvbnN0IHNvdXRoJDIgPSAoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzKSA9PiBudSQ2KG1pZGRsZVgkMShhbmNob3IsIGVsZW1lbnQpLCBzb3V0aFkkMihhbmNob3IpLCBidWJibGVzLnNvdXRoKCksIHNvdXRoJDMoKSwgJ3NvdXRoJywgYm91bmRzUmVzdHJpY3Rpb24oYW5jaG9yLCB7IHRvcDogMyB9KSwgbGFiZWxQcmVmaXgkMik7XG4gICAgY29uc3QgZWFzdCQyID0gKGFuY2hvciwgZWxlbWVudCwgYnViYmxlcykgPT4gbnUkNihlYXN0RWRnZVgkMShhbmNob3IpLCBjZW50cmVZJDEoYW5jaG9yLCBlbGVtZW50KSwgYnViYmxlcy5lYXN0KCksIGVhc3QkMygpLCAnZWFzdCcsIGJvdW5kc1Jlc3RyaWN0aW9uKGFuY2hvciwgeyBsZWZ0OiAwIH0pLCBsYWJlbFByZWZpeCQyKTtcbiAgICBjb25zdCB3ZXN0JDIgPSAoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzKSA9PiBudSQ2KHdlc3RFZGdlWCQxKGFuY2hvciwgZWxlbWVudCksIGNlbnRyZVkkMShhbmNob3IsIGVsZW1lbnQpLCBidWJibGVzLndlc3QoKSwgd2VzdCQzKCksICd3ZXN0JywgYm91bmRzUmVzdHJpY3Rpb24oYW5jaG9yLCB7IHJpZ2h0OiAxIH0pLCBsYWJlbFByZWZpeCQyKTtcbiAgICBjb25zdCBhbGwkMSA9ICgpID0+IFtcbiAgICAgIHNvdXRoZWFzdCQyLFxuICAgICAgc291dGh3ZXN0JDIsXG4gICAgICBub3J0aGVhc3QkMixcbiAgICAgIG5vcnRod2VzdCQyLFxuICAgICAgc291dGgkMixcbiAgICAgIG5vcnRoJDIsXG4gICAgICBlYXN0JDIsXG4gICAgICB3ZXN0JDJcbiAgICBdO1xuICAgIGNvbnN0IGFsbFJ0bCQxID0gKCkgPT4gW1xuICAgICAgc291dGh3ZXN0JDIsXG4gICAgICBzb3V0aGVhc3QkMixcbiAgICAgIG5vcnRod2VzdCQyLFxuICAgICAgbm9ydGhlYXN0JDIsXG4gICAgICBzb3V0aCQyLFxuICAgICAgbm9ydGgkMixcbiAgICAgIGVhc3QkMixcbiAgICAgIHdlc3QkMlxuICAgIF07XG4gICAgY29uc3QgYWJvdmVPckJlbG93ID0gKCkgPT4gW1xuICAgICAgbm9ydGhlYXN0JDIsXG4gICAgICBub3J0aHdlc3QkMixcbiAgICAgIHNvdXRoZWFzdCQyLFxuICAgICAgc291dGh3ZXN0JDIsXG4gICAgICBub3J0aCQyLFxuICAgICAgc291dGgkMlxuICAgIF07XG4gICAgY29uc3QgYWJvdmVPckJlbG93UnRsID0gKCkgPT4gW1xuICAgICAgbm9ydGh3ZXN0JDIsXG4gICAgICBub3J0aGVhc3QkMixcbiAgICAgIHNvdXRod2VzdCQyLFxuICAgICAgc291dGhlYXN0JDIsXG4gICAgICBub3J0aCQyLFxuICAgICAgc291dGgkMlxuICAgIF07XG4gICAgY29uc3QgYmVsb3dPckFib3ZlID0gKCkgPT4gW1xuICAgICAgc291dGhlYXN0JDIsXG4gICAgICBzb3V0aHdlc3QkMixcbiAgICAgIG5vcnRoZWFzdCQyLFxuICAgICAgbm9ydGh3ZXN0JDIsXG4gICAgICBzb3V0aCQyLFxuICAgICAgbm9ydGgkMlxuICAgIF07XG4gICAgY29uc3QgYmVsb3dPckFib3ZlUnRsID0gKCkgPT4gW1xuICAgICAgc291dGh3ZXN0JDIsXG4gICAgICBzb3V0aGVhc3QkMixcbiAgICAgIG5vcnRod2VzdCQyLFxuICAgICAgbm9ydGhlYXN0JDIsXG4gICAgICBzb3V0aCQyLFxuICAgICAgbm9ydGgkMlxuICAgIF07XG5cbiAgICBjb25zdCBjaG9vc2VDaGFubmVscyA9IChjaGFubmVscywgbWVzc2FnZSkgPT4gbWVzc2FnZS51bml2ZXJzYWwgPyBjaGFubmVscyA6IGZpbHRlciQyKGNoYW5uZWxzLCBjaCA9PiBjb250YWlucyQyKG1lc3NhZ2UuY2hhbm5lbHMsIGNoKSk7XG4gICAgY29uc3QgZXZlbnRzJGggPSByZWNlaXZlQ29uZmlnID0+IGRlcml2ZSQyKFtydW4kMShyZWNlaXZlKCksIChjb21wb25lbnQsIG1lc3NhZ2UpID0+IHtcbiAgICAgICAgY29uc3QgY2hhbm5lbE1hcCA9IHJlY2VpdmVDb25maWcuY2hhbm5lbHM7XG4gICAgICAgIGNvbnN0IGNoYW5uZWxzID0ga2V5cyhjaGFubmVsTWFwKTtcbiAgICAgICAgY29uc3QgcmVjZWl2aW5nRGF0YSA9IG1lc3NhZ2U7XG4gICAgICAgIGNvbnN0IHRhcmdldENoYW5uZWxzID0gY2hvb3NlQ2hhbm5lbHMoY2hhbm5lbHMsIHJlY2VpdmluZ0RhdGEpO1xuICAgICAgICBlYWNoJDEodGFyZ2V0Q2hhbm5lbHMsIGNoID0+IHtcbiAgICAgICAgICBjb25zdCBjaGFubmVsSW5mbyA9IGNoYW5uZWxNYXBbY2hdO1xuICAgICAgICAgIGNvbnN0IGNoYW5uZWxTY2hlbWEgPSBjaGFubmVsSW5mby5zY2hlbWE7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IGFzUmF3T3JEaWUkMSgnY2hhbm5lbFsnICsgY2ggKyAnXSBkYXRhXFxuUmVjZWl2ZXI6ICcgKyBlbGVtZW50KGNvbXBvbmVudC5lbGVtZW50KSwgY2hhbm5lbFNjaGVtYSwgcmVjZWl2aW5nRGF0YS5kYXRhKTtcbiAgICAgICAgICBjaGFubmVsSW5mby5vblJlY2VpdmUoY29tcG9uZW50LCBkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICB9KV0pO1xuXG4gICAgdmFyIEFjdGl2ZVJlY2VpdmluZyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBldmVudHM6IGV2ZW50cyRoXG4gICAgfSk7XG5cbiAgICB2YXIgUmVjZWl2aW5nU2NoZW1hID0gW3JlcXVpcmVkT2YoJ2NoYW5uZWxzJywgc2V0T2YoUmVzdWx0LnZhbHVlLCBvYmpPZk9ubHkoW1xuICAgICAgICBvblN0cmljdEhhbmRsZXIoJ29uUmVjZWl2ZScpLFxuICAgICAgICBkZWZhdWx0ZWQoJ3NjaGVtYScsIGFueVZhbHVlKCkpXG4gICAgICBdKSkpXTtcblxuICAgIGNvbnN0IGV4ZWN1dGVFdmVudCA9IChiQ29uZmlnLCBiU3RhdGUsIGV4ZWN1dG9yKSA9PiBydW5PbkV4ZWN1dGUkMShjb21wb25lbnQgPT4ge1xuICAgICAgZXhlY3V0b3IoY29tcG9uZW50LCBiQ29uZmlnLCBiU3RhdGUpO1xuICAgIH0pO1xuICAgIGNvbnN0IGxvYWRFdmVudCA9IChiQ29uZmlnLCBiU3RhdGUsIGYpID0+IHJ1bk9uSW5pdCgoY29tcG9uZW50LCBfc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgIGYoY29tcG9uZW50LCBiQ29uZmlnLCBiU3RhdGUpO1xuICAgIH0pO1xuICAgIGNvbnN0IGNyZWF0ZSQ1ID0gKHNjaGVtYSwgbmFtZSwgYWN0aXZlLCBhcGlzLCBleHRyYSwgc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpZ1NjaGVtYSA9IG9iak9mT25seShzY2hlbWEpO1xuICAgICAgY29uc3Qgc2NoZW1hU2NoZW1hID0gb3B0aW9uT2JqT2YobmFtZSwgW29wdGlvbk9iak9mT25seSgnY29uZmlnJywgc2NoZW1hKV0pO1xuICAgICAgcmV0dXJuIGRvQ3JlYXRlKGNvbmZpZ1NjaGVtYSwgc2NoZW1hU2NoZW1hLCBuYW1lLCBhY3RpdmUsIGFwaXMsIGV4dHJhLCBzdGF0ZSk7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVNb2RlcyQxID0gKG1vZGVzLCBuYW1lLCBhY3RpdmUsIGFwaXMsIGV4dHJhLCBzdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnU2NoZW1hID0gbW9kZXM7XG4gICAgICBjb25zdCBzY2hlbWFTY2hlbWEgPSBvcHRpb25PYmpPZihuYW1lLCBbb3B0aW9uT2YoJ2NvbmZpZycsIG1vZGVzKV0pO1xuICAgICAgcmV0dXJuIGRvQ3JlYXRlKGNvbmZpZ1NjaGVtYSwgc2NoZW1hU2NoZW1hLCBuYW1lLCBhY3RpdmUsIGFwaXMsIGV4dHJhLCBzdGF0ZSk7XG4gICAgfTtcbiAgICBjb25zdCB3cmFwQXBpID0gKGJOYW1lLCBhcGlGdW5jdGlvbiwgYXBpTmFtZSkgPT4ge1xuICAgICAgY29uc3QgZiA9IChjb21wb25lbnQsIC4uLnJlc3QpID0+IHtcbiAgICAgICAgY29uc3QgYXJncyA9IFtjb21wb25lbnRdLmNvbmNhdChyZXN0KTtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5jb25maWcoeyBuYW1lOiBjb25zdGFudCQxKGJOYW1lKSB9KS5mb2xkKCgpID0+IHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlIGNvdWxkIG5vdCBmaW5kIGFueSBiZWhhdmlvdXIgY29uZmlndXJhdGlvbiBmb3I6ICcgKyBiTmFtZSArICcuIFVzaW5nIEFQSTogJyArIGFwaU5hbWUpO1xuICAgICAgICB9LCBpbmZvID0+IHtcbiAgICAgICAgICBjb25zdCByZXN0ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncywgMSk7XG4gICAgICAgICAgcmV0dXJuIGFwaUZ1bmN0aW9uLmFwcGx5KHVuZGVmaW5lZCwgW1xuICAgICAgICAgICAgY29tcG9uZW50LFxuICAgICAgICAgICAgaW5mby5jb25maWcsXG4gICAgICAgICAgICBpbmZvLnN0YXRlXG4gICAgICAgICAgXS5jb25jYXQocmVzdCkpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gbWFya0FzQmVoYXZpb3VyQXBpKGYsIGFwaU5hbWUsIGFwaUZ1bmN0aW9uKTtcbiAgICB9O1xuICAgIGNvbnN0IHJldm9rZUJlaGF2aW91ciA9IG5hbWUgPT4gKHtcbiAgICAgIGtleTogbmFtZSxcbiAgICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgICBjb25zdCBkb0NyZWF0ZSA9IChjb25maWdTY2hlbWEsIHNjaGVtYVNjaGVtYSwgbmFtZSwgYWN0aXZlLCBhcGlzLCBleHRyYSwgc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGdldENvbmZpZyA9IGluZm8gPT4gaGFzTm9uTnVsbGFibGVLZXkoaW5mbywgbmFtZSkgPyBpbmZvW25hbWVdKCkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICBjb25zdCB3cmFwcGVkQXBpcyA9IG1hcCQxKGFwaXMsIChhcGlGLCBhcGlOYW1lKSA9PiB3cmFwQXBpKG5hbWUsIGFwaUYsIGFwaU5hbWUpKTtcbiAgICAgIGNvbnN0IHdyYXBwZWRFeHRyYSA9IG1hcCQxKGV4dHJhLCAoZXh0cmFGLCBleHRyYU5hbWUpID0+IG1hcmtBc0V4dHJhQXBpKGV4dHJhRiwgZXh0cmFOYW1lKSk7XG4gICAgICBjb25zdCBtZSA9IHtcbiAgICAgICAgLi4ud3JhcHBlZEV4dHJhLFxuICAgICAgICAuLi53cmFwcGVkQXBpcyxcbiAgICAgICAgcmV2b2tlOiBjdXJyeShyZXZva2VCZWhhdmlvdXIsIG5hbWUpLFxuICAgICAgICBjb25maWc6IHNwZWMgPT4ge1xuICAgICAgICAgIGNvbnN0IHByZXBhcmVkID0gYXNSYXdPckRpZSQxKG5hbWUgKyAnLWNvbmZpZycsIGNvbmZpZ1NjaGVtYSwgc3BlYyk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtleTogbmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgIGNvbmZpZzogcHJlcGFyZWQsXG4gICAgICAgICAgICAgIG1lLFxuICAgICAgICAgICAgICBjb25maWdBc1JhdzogY2FjaGVkKCgpID0+IGFzUmF3T3JEaWUkMShuYW1lICsgJy1jb25maWcnLCBjb25maWdTY2hlbWEsIHNwZWMpKSxcbiAgICAgICAgICAgICAgaW5pdGlhbENvbmZpZzogc3BlYyxcbiAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBzY2hlbWE6IGNvbnN0YW50JDEoc2NoZW1hU2NoZW1hKSxcbiAgICAgICAgZXhoaWJpdDogKGluZm8sIGJhc2UpID0+IHtcbiAgICAgICAgICByZXR1cm4gbGlmdDIoZ2V0Q29uZmlnKGluZm8pLCBnZXQkZyhhY3RpdmUsICdleGhpYml0JyksIChiZWhhdmlvdXJJbmZvLCBleGhpYml0b3IpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBleGhpYml0b3IoYmFzZSwgYmVoYXZpb3VySW5mby5jb25maWcsIGJlaGF2aW91ckluZm8uc3RhdGUpO1xuICAgICAgICAgIH0pLmdldE9yVGh1bmsoKCkgPT4gbnUkNyh7fSkpO1xuICAgICAgICB9LFxuICAgICAgICBuYW1lOiBjb25zdGFudCQxKG5hbWUpLFxuICAgICAgICBoYW5kbGVyczogaW5mbyA9PiB7XG4gICAgICAgICAgcmV0dXJuIGdldENvbmZpZyhpbmZvKS5tYXAoYmVoYXZpb3VySW5mbyA9PiB7XG4gICAgICAgICAgICBjb25zdCBnZXRFdmVudHMgPSBnZXQkZyhhY3RpdmUsICdldmVudHMnKS5nZXRPcigoKSA9PiAoe30pKTtcbiAgICAgICAgICAgIHJldHVybiBnZXRFdmVudHMoYmVoYXZpb3VySW5mby5jb25maWcsIGJlaGF2aW91ckluZm8uc3RhdGUpO1xuICAgICAgICAgIH0pLmdldE9yKHt9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiBtZTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGVyaXZlJDEgPSBjYXBhYmlsaXRpZXMgPT4gd3JhcEFsbChjYXBhYmlsaXRpZXMpO1xuICAgIGNvbnN0IHNpbXBsZVNjaGVtYSA9IG9iak9mT25seShbXG4gICAgICByZXF1aXJlZCQxKCdmaWVsZHMnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ25hbWUnKSxcbiAgICAgIGRlZmF1bHRlZCgnYWN0aXZlJywge30pLFxuICAgICAgZGVmYXVsdGVkKCdhcGlzJywge30pLFxuICAgICAgZGVmYXVsdGVkKCdzdGF0ZScsIE5vU3RhdGUpLFxuICAgICAgZGVmYXVsdGVkKCdleHRyYScsIHt9KVxuICAgIF0pO1xuICAgIGNvbnN0IGNyZWF0ZSQ0ID0gZGF0YSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGFzUmF3T3JEaWUkMSgnQ3JlYXRpbmcgYmVoYXZpb3VyOiAnICsgZGF0YS5uYW1lLCBzaW1wbGVTY2hlbWEsIGRhdGEpO1xuICAgICAgcmV0dXJuIGNyZWF0ZSQ1KHZhbHVlLmZpZWxkcywgdmFsdWUubmFtZSwgdmFsdWUuYWN0aXZlLCB2YWx1ZS5hcGlzLCB2YWx1ZS5leHRyYSwgdmFsdWUuc3RhdGUpO1xuICAgIH07XG4gICAgY29uc3QgbW9kZVNjaGVtYSA9IG9iak9mT25seShbXG4gICAgICByZXF1aXJlZCQxKCdicmFuY2hLZXknKSxcbiAgICAgIHJlcXVpcmVkJDEoJ2JyYW5jaGVzJyksXG4gICAgICByZXF1aXJlZCQxKCduYW1lJyksXG4gICAgICBkZWZhdWx0ZWQoJ2FjdGl2ZScsIHt9KSxcbiAgICAgIGRlZmF1bHRlZCgnYXBpcycsIHt9KSxcbiAgICAgIGRlZmF1bHRlZCgnc3RhdGUnLCBOb1N0YXRlKSxcbiAgICAgIGRlZmF1bHRlZCgnZXh0cmEnLCB7fSlcbiAgICBdKTtcbiAgICBjb25zdCBjcmVhdGVNb2RlcyA9IGRhdGEgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBhc1Jhd09yRGllJDEoJ0NyZWF0aW5nIGJlaGF2aW91cjogJyArIGRhdGEubmFtZSwgbW9kZVNjaGVtYSwgZGF0YSk7XG4gICAgICByZXR1cm4gY3JlYXRlTW9kZXMkMShjaG9vc2UkMSh2YWx1ZS5icmFuY2hLZXksIHZhbHVlLmJyYW5jaGVzKSwgdmFsdWUubmFtZSwgdmFsdWUuYWN0aXZlLCB2YWx1ZS5hcGlzLCB2YWx1ZS5leHRyYSwgdmFsdWUuc3RhdGUpO1xuICAgIH07XG4gICAgY29uc3QgcmV2b2tlID0gY29uc3RhbnQkMSh1bmRlZmluZWQpO1xuXG4gICAgY29uc3QgUmVjZWl2aW5nID0gY3JlYXRlJDQoe1xuICAgICAgZmllbGRzOiBSZWNlaXZpbmdTY2hlbWEsXG4gICAgICBuYW1lOiAncmVjZWl2aW5nJyxcbiAgICAgIGFjdGl2ZTogQWN0aXZlUmVjZWl2aW5nXG4gICAgfSk7XG5cbiAgICBjb25zdCBleGhpYml0JDYgPSAoYmFzZSwgcG9zQ29uZmlnKSA9PiBudSQ3KHtcbiAgICAgIGNsYXNzZXM6IFtdLFxuICAgICAgc3R5bGVzOiBwb3NDb25maWcudXNlRml4ZWQoKSA/IHt9IDogeyBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9XG4gICAgfSk7XG5cbiAgICB2YXIgQWN0aXZlUG9zaXRpb24gPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgZXhoaWJpdDogZXhoaWJpdCQ2XG4gICAgfSk7XG5cbiAgICBjb25zdCBmb2N1cyQzID0gZWxlbWVudCA9PiBlbGVtZW50LmRvbS5mb2N1cygpO1xuICAgIGNvbnN0IGJsdXIkMSA9IGVsZW1lbnQgPT4gZWxlbWVudC5kb20uYmx1cigpO1xuICAgIGNvbnN0IGhhc0ZvY3VzID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCByb290ID0gZ2V0Um9vdE5vZGUoZWxlbWVudCkuZG9tO1xuICAgICAgcmV0dXJuIGVsZW1lbnQuZG9tID09PSByb290LmFjdGl2ZUVsZW1lbnQ7XG4gICAgfTtcbiAgICBjb25zdCBhY3RpdmUkMSA9IChyb290ID0gZ2V0RG9jdW1lbnQoKSkgPT4gT3B0aW9uYWwuZnJvbShyb290LmRvbS5hY3RpdmVFbGVtZW50KS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIGNvbnN0IHNlYXJjaCA9IGVsZW1lbnQgPT4gYWN0aXZlJDEoZ2V0Um9vdE5vZGUoZWxlbWVudCkpLmZpbHRlcihlID0+IGVsZW1lbnQuZG9tLmNvbnRhaW5zKGUuZG9tKSk7XG5cbiAgICBjb25zdCBwcmVzZXJ2ZSQxID0gKGYsIGNvbnRhaW5lcikgPT4ge1xuICAgICAgY29uc3QgZG9zID0gZ2V0Um9vdE5vZGUoY29udGFpbmVyKTtcbiAgICAgIGNvbnN0IHJlZm9jdXMgPSBhY3RpdmUkMShkb3MpLmJpbmQoZm9jdXNlZCA9PiB7XG4gICAgICAgIGNvbnN0IGhhc0ZvY3VzID0gZWxlbSA9PiBlcShmb2N1c2VkLCBlbGVtKTtcbiAgICAgICAgcmV0dXJuIGhhc0ZvY3VzKGNvbnRhaW5lcikgPyBPcHRpb25hbC5zb21lKGNvbnRhaW5lcikgOiBkZXNjZW5kYW50JDEoY29udGFpbmVyLCBoYXNGb2N1cyk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGYoY29udGFpbmVyKTtcbiAgICAgIHJlZm9jdXMuZWFjaChvbGRGb2N1cyA9PiB7XG4gICAgICAgIGFjdGl2ZSQxKGRvcykuZmlsdGVyKG5ld0ZvY3VzID0+IGVxKG5ld0ZvY3VzLCBvbGRGb2N1cykpLmZvbGQoKCkgPT4ge1xuICAgICAgICAgIGZvY3VzJDMob2xkRm9jdXMpO1xuICAgICAgICB9LCBub29wKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgY29uc3QgTnVQb3NpdGlvbkNzcyA9IChwb3NpdGlvbiwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKSA9PiB7XG4gICAgICBjb25zdCB0b1B4ID0gbnVtID0+IG51bSArICdweCc7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgbGVmdDogbGVmdC5tYXAodG9QeCksXG4gICAgICAgIHRvcDogdG9wLm1hcCh0b1B4KSxcbiAgICAgICAgcmlnaHQ6IHJpZ2h0Lm1hcCh0b1B4KSxcbiAgICAgICAgYm90dG9tOiBib3R0b20ubWFwKHRvUHgpXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgdG9PcHRpb25zID0gcG9zaXRpb24gPT4gKHtcbiAgICAgIC4uLnBvc2l0aW9uLFxuICAgICAgcG9zaXRpb246IE9wdGlvbmFsLnNvbWUocG9zaXRpb24ucG9zaXRpb24pXG4gICAgfSk7XG4gICAgY29uc3QgYXBwbHlQb3NpdGlvbkNzcyA9IChlbGVtZW50LCBwb3NpdGlvbikgPT4ge1xuICAgICAgc2V0T3B0aW9ucyhlbGVtZW50LCB0b09wdGlvbnMocG9zaXRpb24pKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYWR0JDkgPSBBZHQuZ2VuZXJhdGUoW1xuICAgICAgeyBub25lOiBbXSB9LFxuICAgICAge1xuICAgICAgICByZWxhdGl2ZTogW1xuICAgICAgICAgICd4JyxcbiAgICAgICAgICAneScsXG4gICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAnaGVpZ2h0J1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBmaXhlZDogW1xuICAgICAgICAgICd4JyxcbiAgICAgICAgICAneScsXG4gICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAnaGVpZ2h0J1xuICAgICAgICBdXG4gICAgICB9XG4gICAgXSk7XG4gICAgY29uc3QgcG9zaXRpb25XaXRoRGlyZWN0aW9uID0gKHBvc05hbWUsIGRlY2lzaW9uLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gICAgICBjb25zdCBkZWNpc2lvblJlY3QgPSBkZWNpc2lvbi5yZWN0O1xuICAgICAgY29uc3QgZGVjaXNpb25YID0gZGVjaXNpb25SZWN0LnggLSB4O1xuICAgICAgY29uc3QgZGVjaXNpb25ZID0gZGVjaXNpb25SZWN0LnkgLSB5O1xuICAgICAgY29uc3QgZGVjaXNpb25XaWR0aCA9IGRlY2lzaW9uUmVjdC53aWR0aDtcbiAgICAgIGNvbnN0IGRlY2lzaW9uSGVpZ2h0ID0gZGVjaXNpb25SZWN0LmhlaWdodDtcbiAgICAgIGNvbnN0IGRlY2lzaW9uUmlnaHQgPSB3aWR0aCAtIChkZWNpc2lvblggKyBkZWNpc2lvbldpZHRoKTtcbiAgICAgIGNvbnN0IGRlY2lzaW9uQm90dG9tID0gaGVpZ2h0IC0gKGRlY2lzaW9uWSArIGRlY2lzaW9uSGVpZ2h0KTtcbiAgICAgIGNvbnN0IGxlZnQgPSBPcHRpb25hbC5zb21lKGRlY2lzaW9uWCk7XG4gICAgICBjb25zdCB0b3AgPSBPcHRpb25hbC5zb21lKGRlY2lzaW9uWSk7XG4gICAgICBjb25zdCByaWdodCA9IE9wdGlvbmFsLnNvbWUoZGVjaXNpb25SaWdodCk7XG4gICAgICBjb25zdCBib3R0b20gPSBPcHRpb25hbC5zb21lKGRlY2lzaW9uQm90dG9tKTtcbiAgICAgIGNvbnN0IG5vbmUgPSBPcHRpb25hbC5ub25lKCk7XG4gICAgICByZXR1cm4gY2F0YSQyKGRlY2lzaW9uLmRpcmVjdGlvbiwgKCkgPT4gTnVQb3NpdGlvbkNzcyhwb3NOYW1lLCBsZWZ0LCB0b3AsIG5vbmUsIG5vbmUpLCAoKSA9PiBOdVBvc2l0aW9uQ3NzKHBvc05hbWUsIG5vbmUsIHRvcCwgcmlnaHQsIG5vbmUpLCAoKSA9PiBOdVBvc2l0aW9uQ3NzKHBvc05hbWUsIGxlZnQsIG5vbmUsIG5vbmUsIGJvdHRvbSksICgpID0+IE51UG9zaXRpb25Dc3MocG9zTmFtZSwgbm9uZSwgbm9uZSwgcmlnaHQsIGJvdHRvbSksICgpID0+IE51UG9zaXRpb25Dc3MocG9zTmFtZSwgbGVmdCwgdG9wLCBub25lLCBub25lKSwgKCkgPT4gTnVQb3NpdGlvbkNzcyhwb3NOYW1lLCBsZWZ0LCBub25lLCBub25lLCBib3R0b20pLCAoKSA9PiBOdVBvc2l0aW9uQ3NzKHBvc05hbWUsIGxlZnQsIHRvcCwgbm9uZSwgbm9uZSksICgpID0+IE51UG9zaXRpb25Dc3MocG9zTmFtZSwgbm9uZSwgdG9wLCByaWdodCwgbm9uZSkpO1xuICAgIH07XG4gICAgY29uc3QgcmVwb3NpdGlvbiA9IChvcmlnaW4sIGRlY2lzaW9uKSA9PiBvcmlnaW4uZm9sZCgoKSA9PiB7XG4gICAgICBjb25zdCBkZWNpc2lvblJlY3QgPSBkZWNpc2lvbi5yZWN0O1xuICAgICAgcmV0dXJuIE51UG9zaXRpb25Dc3MoJ2Fic29sdXRlJywgT3B0aW9uYWwuc29tZShkZWNpc2lvblJlY3QueCksIE9wdGlvbmFsLnNvbWUoZGVjaXNpb25SZWN0LnkpLCBPcHRpb25hbC5ub25lKCksIE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgfSwgKHgsIHksIHdpZHRoLCBoZWlnaHQpID0+IHtcbiAgICAgIHJldHVybiBwb3NpdGlvbldpdGhEaXJlY3Rpb24oJ2Fic29sdXRlJywgZGVjaXNpb24sIHgsIHksIHdpZHRoLCBoZWlnaHQpO1xuICAgIH0sICh4LCB5LCB3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gICAgICByZXR1cm4gcG9zaXRpb25XaXRoRGlyZWN0aW9uKCdmaXhlZCcsIGRlY2lzaW9uLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9KTtcbiAgICBjb25zdCB0b0JveCA9IChvcmlnaW4sIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHJlbCA9IGN1cnJ5KGZpbmQkMiwgZWxlbWVudCk7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IG9yaWdpbi5mb2xkKHJlbCwgcmVsLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNjcm9sbCA9IGdldCRiKCk7XG4gICAgICAgIHJldHVybiBmaW5kJDIoZWxlbWVudCkudHJhbnNsYXRlKC1zY3JvbGwubGVmdCwgLXNjcm9sbC50b3ApO1xuICAgICAgfSk7XG4gICAgICBjb25zdCB3aWR0aCA9IGdldE91dGVyJDEoZWxlbWVudCk7XG4gICAgICBjb25zdCBoZWlnaHQgPSBnZXRPdXRlciQyKGVsZW1lbnQpO1xuICAgICAgcmV0dXJuIGJvdW5kcyhwb3NpdGlvbi5sZWZ0LCBwb3NpdGlvbi50b3AsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH07XG4gICAgY29uc3Qgdmlld3BvcnQgPSAob3JpZ2luLCBvcHRCb3VuZHMpID0+IG9wdEJvdW5kcy5mb2xkKCgpID0+IG9yaWdpbi5mb2xkKHdpbiwgd2luLCBib3VuZHMpLCBib3VuZHMkMSA9PiBvcmlnaW4uZm9sZChjb25zdGFudCQxKGJvdW5kcyQxKSwgY29uc3RhbnQkMShib3VuZHMkMSksICgpID0+IHtcbiAgICAgIGNvbnN0IHBvcyA9IHRyYW5zbGF0ZSQyKG9yaWdpbiwgYm91bmRzJDEueCwgYm91bmRzJDEueSk7XG4gICAgICByZXR1cm4gYm91bmRzKHBvcy5sZWZ0LCBwb3MudG9wLCBib3VuZHMkMS53aWR0aCwgYm91bmRzJDEuaGVpZ2h0KTtcbiAgICB9KSk7XG4gICAgY29uc3QgdHJhbnNsYXRlJDIgPSAob3JpZ2luLCB4LCB5KSA9PiB7XG4gICAgICBjb25zdCBwb3MgPSBTdWdhclBvc2l0aW9uKHgsIHkpO1xuICAgICAgY29uc3QgcmVtb3ZlU2Nyb2xsID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBvdXRlclNjcm9sbCA9IGdldCRiKCk7XG4gICAgICAgIHJldHVybiBwb3MudHJhbnNsYXRlKC1vdXRlclNjcm9sbC5sZWZ0LCAtb3V0ZXJTY3JvbGwudG9wKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gb3JpZ2luLmZvbGQoY29uc3RhbnQkMShwb3MpLCBjb25zdGFudCQxKHBvcyksIHJlbW92ZVNjcm9sbCk7XG4gICAgfTtcbiAgICBjb25zdCBjYXRhJDEgPSAoc3ViamVjdCwgb25Ob25lLCBvblJlbGF0aXZlLCBvbkZpeGVkKSA9PiBzdWJqZWN0LmZvbGQob25Ob25lLCBvblJlbGF0aXZlLCBvbkZpeGVkKTtcbiAgICBhZHQkOS5ub25lO1xuICAgIGNvbnN0IHJlbGF0aXZlJDEgPSBhZHQkOS5yZWxhdGl2ZTtcbiAgICBjb25zdCBmaXhlZCQxID0gYWR0JDkuZml4ZWQ7XG5cbiAgICBjb25zdCBhbmNob3IgPSAoYW5jaG9yQm94LCBvcmlnaW4pID0+ICh7XG4gICAgICBhbmNob3JCb3gsXG4gICAgICBvcmlnaW5cbiAgICB9KTtcbiAgICBjb25zdCBib3ggPSAoYW5jaG9yQm94LCBvcmlnaW4pID0+IGFuY2hvcihhbmNob3JCb3gsIG9yaWdpbik7XG5cbiAgICBjb25zdCBwbGFjZW1lbnRBdHRyaWJ1dGUgPSAnZGF0YS1hbGxveS1wbGFjZW1lbnQnO1xuICAgIGNvbnN0IHNldFBsYWNlbWVudCQxID0gKGVsZW1lbnQsIHBsYWNlbWVudCkgPT4ge1xuICAgICAgc2V0JDkoZWxlbWVudCwgcGxhY2VtZW50QXR0cmlidXRlLCBwbGFjZW1lbnQpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0UGxhY2VtZW50ID0gZWxlbWVudCA9PiBnZXRPcHQoZWxlbWVudCwgcGxhY2VtZW50QXR0cmlidXRlKTtcbiAgICBjb25zdCByZXNldCQyID0gZWxlbWVudCA9PiByZW1vdmUkNyhlbGVtZW50LCBwbGFjZW1lbnRBdHRyaWJ1dGUpO1xuXG4gICAgY29uc3QgYWR0JDggPSBBZHQuZ2VuZXJhdGUoW1xuICAgICAgeyBmaXQ6IFsncmVwb3NpdGlvbiddIH0sXG4gICAgICB7XG4gICAgICAgIG5vZml0OiBbXG4gICAgICAgICAgJ3JlcG9zaXRpb24nLFxuICAgICAgICAgICd2aXNpYmxlVycsXG4gICAgICAgICAgJ3Zpc2libGVIJyxcbiAgICAgICAgICAnaXNWaXNpYmxlJ1xuICAgICAgICBdXG4gICAgICB9XG4gICAgXSk7XG4gICAgY29uc3QgZGV0ZXJtaW5lUG9zaXRpb24gPSAoYm94LCBib3VuZHMpID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeDogYm91bmRzWCxcbiAgICAgICAgeTogYm91bmRzWSxcbiAgICAgICAgcmlnaHQ6IGJvdW5kc1JpZ2h0LFxuICAgICAgICBib3R0b206IGJvdW5kc0JvdHRvbVxuICAgICAgfSA9IGJvdW5kcztcbiAgICAgIGNvbnN0IHt4LCB5LCByaWdodCwgYm90dG9tLCB3aWR0aCwgaGVpZ2h0fSA9IGJveDtcbiAgICAgIGNvbnN0IHhJbkJvdW5kcyA9IHggPj0gYm91bmRzWCAmJiB4IDw9IGJvdW5kc1JpZ2h0O1xuICAgICAgY29uc3QgeUluQm91bmRzID0geSA+PSBib3VuZHNZICYmIHkgPD0gYm91bmRzQm90dG9tO1xuICAgICAgY29uc3Qgb3JpZ2luSW5Cb3VuZHMgPSB4SW5Cb3VuZHMgJiYgeUluQm91bmRzO1xuICAgICAgY29uc3QgcmlnaHRJbkJvdW5kcyA9IHJpZ2h0IDw9IGJvdW5kc1JpZ2h0ICYmIHJpZ2h0ID49IGJvdW5kc1g7XG4gICAgICBjb25zdCBib3R0b21JbkJvdW5kcyA9IGJvdHRvbSA8PSBib3VuZHNCb3R0b20gJiYgYm90dG9tID49IGJvdW5kc1k7XG4gICAgICBjb25zdCBzaXplSW5Cb3VuZHMgPSByaWdodEluQm91bmRzICYmIGJvdHRvbUluQm91bmRzO1xuICAgICAgY29uc3QgdmlzaWJsZVcgPSBNYXRoLm1pbih3aWR0aCwgeCA+PSBib3VuZHNYID8gYm91bmRzUmlnaHQgLSB4IDogcmlnaHQgLSBib3VuZHNYKTtcbiAgICAgIGNvbnN0IHZpc2libGVIID0gTWF0aC5taW4oaGVpZ2h0LCB5ID49IGJvdW5kc1kgPyBib3VuZHNCb3R0b20gLSB5IDogYm90dG9tIC0gYm91bmRzWSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcmlnaW5JbkJvdW5kcyxcbiAgICAgICAgc2l6ZUluQm91bmRzLFxuICAgICAgICB2aXNpYmxlVyxcbiAgICAgICAgdmlzaWJsZUhcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjYWxjUmVwb3NpdGlvbiA9IChib3gsIGJvdW5kcyQxKSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHg6IGJvdW5kc1gsXG4gICAgICAgIHk6IGJvdW5kc1ksXG4gICAgICAgIHJpZ2h0OiBib3VuZHNSaWdodCxcbiAgICAgICAgYm90dG9tOiBib3VuZHNCb3R0b21cbiAgICAgIH0gPSBib3VuZHMkMTtcbiAgICAgIGNvbnN0IHt4LCB5LCB3aWR0aCwgaGVpZ2h0fSA9IGJveDtcbiAgICAgIGNvbnN0IG1heFggPSBNYXRoLm1heChib3VuZHNYLCBib3VuZHNSaWdodCAtIHdpZHRoKTtcbiAgICAgIGNvbnN0IG1heFkgPSBNYXRoLm1heChib3VuZHNZLCBib3VuZHNCb3R0b20gLSBoZWlnaHQpO1xuICAgICAgY29uc3QgcmVzdHJpY3RlZFggPSBjbGFtcCh4LCBib3VuZHNYLCBtYXhYKTtcbiAgICAgIGNvbnN0IHJlc3RyaWN0ZWRZID0gY2xhbXAoeSwgYm91bmRzWSwgbWF4WSk7XG4gICAgICBjb25zdCByZXN0cmljdGVkV2lkdGggPSBNYXRoLm1pbihyZXN0cmljdGVkWCArIHdpZHRoLCBib3VuZHNSaWdodCkgLSByZXN0cmljdGVkWDtcbiAgICAgIGNvbnN0IHJlc3RyaWN0ZWRIZWlnaHQgPSBNYXRoLm1pbihyZXN0cmljdGVkWSArIGhlaWdodCwgYm91bmRzQm90dG9tKSAtIHJlc3RyaWN0ZWRZO1xuICAgICAgcmV0dXJuIGJvdW5kcyhyZXN0cmljdGVkWCwgcmVzdHJpY3RlZFksIHJlc3RyaWN0ZWRXaWR0aCwgcmVzdHJpY3RlZEhlaWdodCk7XG4gICAgfTtcbiAgICBjb25zdCBjYWxjTWF4U2l6ZXMgPSAoZGlyZWN0aW9uLCBib3gsIGJvdW5kcykgPT4ge1xuICAgICAgY29uc3QgdXBBdmFpbGFibGUgPSBjb25zdGFudCQxKGJveC5ib3R0b20gLSBib3VuZHMueSk7XG4gICAgICBjb25zdCBkb3duQXZhaWxhYmxlID0gY29uc3RhbnQkMShib3VuZHMuYm90dG9tIC0gYm94LnkpO1xuICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gY2F0YVZlcnRpY2FsKGRpcmVjdGlvbiwgZG93bkF2YWlsYWJsZSwgZG93bkF2YWlsYWJsZSwgdXBBdmFpbGFibGUpO1xuICAgICAgY29uc3Qgd2VzdEF2YWlsYWJsZSA9IGNvbnN0YW50JDEoYm94LnJpZ2h0IC0gYm91bmRzLngpO1xuICAgICAgY29uc3QgZWFzdEF2YWlsYWJsZSA9IGNvbnN0YW50JDEoYm91bmRzLnJpZ2h0IC0gYm94LngpO1xuICAgICAgY29uc3QgbWF4V2lkdGggPSBjYXRhSG9yaXpvbnRhbChkaXJlY3Rpb24sIGVhc3RBdmFpbGFibGUsIGVhc3RBdmFpbGFibGUsIHdlc3RBdmFpbGFibGUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWF4V2lkdGgsXG4gICAgICAgIG1heEhlaWdodFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGF0dGVtcHQgPSAoY2FuZGlkYXRlLCB3aWR0aCwgaGVpZ2h0LCBib3VuZHMkMSkgPT4ge1xuICAgICAgY29uc3QgYnViYmxlID0gY2FuZGlkYXRlLmJ1YmJsZTtcbiAgICAgIGNvbnN0IGJ1YmJsZU9mZnNldCA9IGJ1YmJsZS5vZmZzZXQ7XG4gICAgICBjb25zdCBhZGp1c3RlZEJvdW5kcyA9IGFkanVzdEJvdW5kcyhib3VuZHMkMSwgY2FuZGlkYXRlLnJlc3RyaWN0aW9uLCBidWJibGVPZmZzZXQpO1xuICAgICAgY29uc3QgbmV3WCA9IGNhbmRpZGF0ZS54ICsgYnViYmxlT2Zmc2V0LmxlZnQ7XG4gICAgICBjb25zdCBuZXdZID0gY2FuZGlkYXRlLnkgKyBidWJibGVPZmZzZXQudG9wO1xuICAgICAgY29uc3QgYm94ID0gYm91bmRzKG5ld1gsIG5ld1ksIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgY29uc3Qge29yaWdpbkluQm91bmRzLCBzaXplSW5Cb3VuZHMsIHZpc2libGVXLCB2aXNpYmxlSH0gPSBkZXRlcm1pbmVQb3NpdGlvbihib3gsIGFkanVzdGVkQm91bmRzKTtcbiAgICAgIGNvbnN0IGZpdHMgPSBvcmlnaW5JbkJvdW5kcyAmJiBzaXplSW5Cb3VuZHM7XG4gICAgICBjb25zdCBmaXR0ZWRCb3ggPSBmaXRzID8gYm94IDogY2FsY1JlcG9zaXRpb24oYm94LCBhZGp1c3RlZEJvdW5kcyk7XG4gICAgICBjb25zdCBpc1BhcnRseVZpc2libGUgPSBmaXR0ZWRCb3gud2lkdGggPiAwICYmIGZpdHRlZEJveC5oZWlnaHQgPiAwO1xuICAgICAgY29uc3Qge21heFdpZHRoLCBtYXhIZWlnaHR9ID0gY2FsY01heFNpemVzKGNhbmRpZGF0ZS5kaXJlY3Rpb24sIGZpdHRlZEJveCwgYm91bmRzJDEpO1xuICAgICAgY29uc3QgcmVwb3NpdGlvbiA9IHtcbiAgICAgICAgcmVjdDogZml0dGVkQm94LFxuICAgICAgICBtYXhIZWlnaHQsXG4gICAgICAgIG1heFdpZHRoLFxuICAgICAgICBkaXJlY3Rpb246IGNhbmRpZGF0ZS5kaXJlY3Rpb24sXG4gICAgICAgIHBsYWNlbWVudDogY2FuZGlkYXRlLnBsYWNlbWVudCxcbiAgICAgICAgY2xhc3Nlczoge1xuICAgICAgICAgIG9uOiBidWJibGUuY2xhc3Nlc09uLFxuICAgICAgICAgIG9mZjogYnViYmxlLmNsYXNzZXNPZmZcbiAgICAgICAgfSxcbiAgICAgICAgbGF5b3V0OiBjYW5kaWRhdGUubGFiZWwsXG4gICAgICAgIHRlc3RZOiBuZXdZXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGZpdHMgfHwgY2FuZGlkYXRlLmFsd2F5c0ZpdCA/IGFkdCQ4LmZpdChyZXBvc2l0aW9uKSA6IGFkdCQ4Lm5vZml0KHJlcG9zaXRpb24sIHZpc2libGVXLCB2aXNpYmxlSCwgaXNQYXJ0bHlWaXNpYmxlKTtcbiAgICB9O1xuICAgIGNvbnN0IGF0dGVtcHRzID0gKGVsZW1lbnQsIGNhbmRpZGF0ZXMsIGFuY2hvckJveCwgZWxlbWVudEJveCwgYnViYmxlcywgYm91bmRzKSA9PiB7XG4gICAgICBjb25zdCBwYW5lbFdpZHRoID0gZWxlbWVudEJveC53aWR0aDtcbiAgICAgIGNvbnN0IHBhbmVsSGVpZ2h0ID0gZWxlbWVudEJveC5oZWlnaHQ7XG4gICAgICBjb25zdCBhdHRlbXB0QmVzdEZpdCA9IChsYXlvdXQsIHJlcG9zaXRpb24sIHZpc2libGVXLCB2aXNpYmxlSCwgaXNWaXNpYmxlKSA9PiB7XG4gICAgICAgIGNvbnN0IG5leHQgPSBsYXlvdXQoYW5jaG9yQm94LCBlbGVtZW50Qm94LCBidWJibGVzLCBlbGVtZW50LCBib3VuZHMpO1xuICAgICAgICBjb25zdCBhdHRlbXB0TGF5b3V0ID0gYXR0ZW1wdChuZXh0LCBwYW5lbFdpZHRoLCBwYW5lbEhlaWdodCwgYm91bmRzKTtcbiAgICAgICAgcmV0dXJuIGF0dGVtcHRMYXlvdXQuZm9sZChjb25zdGFudCQxKGF0dGVtcHRMYXlvdXQpLCAobmV3UmVwb3NpdGlvbiwgbmV3VmlzaWJsZVcsIG5ld1Zpc2libGVILCBuZXdJc1Zpc2libGUpID0+IHtcbiAgICAgICAgICBjb25zdCBpbXByb3ZlZCA9IGlzVmlzaWJsZSA9PT0gbmV3SXNWaXNpYmxlID8gbmV3VmlzaWJsZUggPiB2aXNpYmxlSCB8fCBuZXdWaXNpYmxlVyA+IHZpc2libGVXIDogIWlzVmlzaWJsZSAmJiBuZXdJc1Zpc2libGU7XG4gICAgICAgICAgcmV0dXJuIGltcHJvdmVkID8gYXR0ZW1wdExheW91dCA6IGFkdCQ4Lm5vZml0KHJlcG9zaXRpb24sIHZpc2libGVXLCB2aXNpYmxlSCwgaXNWaXNpYmxlKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgYWJjID0gZm9sZGwoY2FuZGlkYXRlcywgKGIsIGEpID0+IHtcbiAgICAgICAgY29uc3QgYmVzdE5leHQgPSBjdXJyeShhdHRlbXB0QmVzdEZpdCwgYSk7XG4gICAgICAgIHJldHVybiBiLmZvbGQoY29uc3RhbnQkMShiKSwgYmVzdE5leHQpO1xuICAgICAgfSwgYWR0JDgubm9maXQoe1xuICAgICAgICByZWN0OiBhbmNob3JCb3gsXG4gICAgICAgIG1heEhlaWdodDogZWxlbWVudEJveC5oZWlnaHQsXG4gICAgICAgIG1heFdpZHRoOiBlbGVtZW50Qm94LndpZHRoLFxuICAgICAgICBkaXJlY3Rpb246IHNvdXRoZWFzdCQzKCksXG4gICAgICAgIHBsYWNlbWVudDogJ3NvdXRoZWFzdCcsXG4gICAgICAgIGNsYXNzZXM6IHtcbiAgICAgICAgICBvbjogW10sXG4gICAgICAgICAgb2ZmOiBbXVxuICAgICAgICB9LFxuICAgICAgICBsYXlvdXQ6ICdub25lJyxcbiAgICAgICAgdGVzdFk6IGFuY2hvckJveC55XG4gICAgICB9LCAtMSwgLTEsIGZhbHNlKSk7XG4gICAgICByZXR1cm4gYWJjLmZvbGQoaWRlbnRpdHksIGlkZW50aXR5KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2luZ2xldG9uID0gZG9SZXZva2UgPT4ge1xuICAgICAgY29uc3Qgc3ViamVjdCA9IENlbGwoT3B0aW9uYWwubm9uZSgpKTtcbiAgICAgIGNvbnN0IHJldm9rZSA9ICgpID0+IHN1YmplY3QuZ2V0KCkuZWFjaChkb1Jldm9rZSk7XG4gICAgICBjb25zdCBjbGVhciA9ICgpID0+IHtcbiAgICAgICAgcmV2b2tlKCk7XG4gICAgICAgIHN1YmplY3Quc2V0KE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNTZXQgPSAoKSA9PiBzdWJqZWN0LmdldCgpLmlzU29tZSgpO1xuICAgICAgY29uc3QgZ2V0ID0gKCkgPT4gc3ViamVjdC5nZXQoKTtcbiAgICAgIGNvbnN0IHNldCA9IHMgPT4ge1xuICAgICAgICByZXZva2UoKTtcbiAgICAgICAgc3ViamVjdC5zZXQoT3B0aW9uYWwuc29tZShzKSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xlYXIsXG4gICAgICAgIGlzU2V0LFxuICAgICAgICBnZXQsXG4gICAgICAgIHNldFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGRlc3Ryb3lhYmxlID0gKCkgPT4gc2luZ2xldG9uKHMgPT4gcy5kZXN0cm95KCkpO1xuICAgIGNvbnN0IHVuYmluZGFibGUgPSAoKSA9PiBzaW5nbGV0b24ocyA9PiBzLnVuYmluZCgpKTtcbiAgICBjb25zdCB2YWx1ZSQyID0gKCkgPT4ge1xuICAgICAgY29uc3Qgc3ViamVjdCA9IHNpbmdsZXRvbihub29wKTtcbiAgICAgIGNvbnN0IG9uID0gZiA9PiBzdWJqZWN0LmdldCgpLmVhY2goZik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdWJqZWN0LFxuICAgICAgICBvblxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmlsdGVyID0gYWx3YXlzO1xuICAgIGNvbnN0IGJpbmQgPSAoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIpID0+IGJpbmQkMihlbGVtZW50LCBldmVudCwgZmlsdGVyLCBoYW5kbGVyKTtcbiAgICBjb25zdCBjYXB0dXJlID0gKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyKSA9PiBjYXB0dXJlJDEoZWxlbWVudCwgZXZlbnQsIGZpbHRlciwgaGFuZGxlcik7XG4gICAgY29uc3QgZnJvbVJhd0V2ZW50ID0gZnJvbVJhd0V2ZW50JDE7XG5cbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gW1xuICAgICAgJ3RvcCcsXG4gICAgICAnYm90dG9tJyxcbiAgICAgICdyaWdodCcsXG4gICAgICAnbGVmdCdcbiAgICBdO1xuICAgIGNvbnN0IHRpbWVyQXR0ciA9ICdkYXRhLWFsbG95LXRyYW5zaXRpb24tdGltZXInO1xuICAgIGNvbnN0IGlzVHJhbnNpdGlvbmluZyQxID0gKGVsZW1lbnQsIHRyYW5zaXRpb24pID0+IGhhc0FsbChlbGVtZW50LCB0cmFuc2l0aW9uLmNsYXNzZXMpO1xuICAgIGNvbnN0IHNob3VsZEFwcGx5VHJhbnNpdGlvbkNzcyA9ICh0cmFuc2l0aW9uLCBkZWNpc2lvbiwgbGFzdFBsYWNlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIGxhc3RQbGFjZW1lbnQuZXhpc3RzKHBsYWNlciA9PiB7XG4gICAgICAgIGNvbnN0IG1vZGUgPSB0cmFuc2l0aW9uLm1vZGU7XG4gICAgICAgIHJldHVybiBtb2RlID09PSAnYWxsJyA/IHRydWUgOiBwbGFjZXJbbW9kZV0gIT09IGRlY2lzaW9uW21vZGVdO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNDaGFuZ2VzID0gKHBvc2l0aW9uLCBpbnRlcm1lZGlhdGUpID0+IHtcbiAgICAgIGNvbnN0IHJvdW5kID0gdmFsdWUgPT4gcGFyc2VGbG9hdCh2YWx1ZSkudG9GaXhlZCgzKTtcbiAgICAgIHJldHVybiBmaW5kJDQoaW50ZXJtZWRpYXRlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHBvc2l0aW9uW2tleV0ubWFwKHJvdW5kKTtcbiAgICAgICAgY29uc3QgdmFsID0gdmFsdWUubWFwKHJvdW5kKTtcbiAgICAgICAgcmV0dXJuICFlcXVhbHMobmV3VmFsdWUsIHZhbCk7XG4gICAgICB9KS5pc1NvbWUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFRyYW5zaXRpb25EdXJhdGlvbiA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgZ2V0ID0gbmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IHN0eWxlID0gZ2V0JGUoZWxlbWVudCwgbmFtZSk7XG4gICAgICAgIGNvbnN0IHRpbWVzID0gc3R5bGUuc3BsaXQoL1xccyosXFxzKi8pO1xuICAgICAgICByZXR1cm4gZmlsdGVyJDIodGltZXMsIGlzTm90RW1wdHkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHBhcnNlID0gdmFsdWUgPT4ge1xuICAgICAgICBpZiAoaXNTdHJpbmcodmFsdWUpICYmIC9eW1xcZC5dKy8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBudW0gPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgICByZXR1cm4gZW5kc1dpdGgodmFsdWUsICdtcycpID8gbnVtIDogbnVtICogMTAwMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGRlbGF5ID0gZ2V0KCd0cmFuc2l0aW9uLWRlbGF5Jyk7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IGdldCgndHJhbnNpdGlvbi1kdXJhdGlvbicpO1xuICAgICAgcmV0dXJuIGZvbGRsKGR1cmF0aW9uLCAoYWNjLCBkdXIsIGkpID0+IHtcbiAgICAgICAgY29uc3QgdGltZSA9IHBhcnNlKGRlbGF5W2ldKSArIHBhcnNlKGR1cik7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChhY2MsIHRpbWUpO1xuICAgICAgfSwgMCk7XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cFRyYW5zaXRpb25MaXN0ZW5lcnMgPSAoZWxlbWVudCwgdHJhbnNpdGlvbikgPT4ge1xuICAgICAgY29uc3QgdHJhbnNpdGlvbkVuZCA9IHVuYmluZGFibGUoKTtcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25DYW5jZWwgPSB1bmJpbmRhYmxlKCk7XG4gICAgICBsZXQgdGltZXI7XG4gICAgICBjb25zdCBpc1NvdXJjZVRyYW5zaXRpb24gPSBlID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBwc2V1ZG9FbGVtZW50ID0gKF9hID0gZS5yYXcucHNldWRvRWxlbWVudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgICAgIHJldHVybiBlcShlLnRhcmdldCwgZWxlbWVudCkgJiYgaXNFbXB0eShwc2V1ZG9FbGVtZW50KSAmJiBjb250YWlucyQyKHByb3BlcnRpZXMsIGUucmF3LnByb3BlcnR5TmFtZSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdHJhbnNpdGlvbkRvbmUgPSBlID0+IHtcbiAgICAgICAgaWYgKGlzTnVsbGFibGUoZSkgfHwgaXNTb3VyY2VUcmFuc2l0aW9uKGUpKSB7XG4gICAgICAgICAgdHJhbnNpdGlvbkVuZC5jbGVhcigpO1xuICAgICAgICAgIHRyYW5zaXRpb25DYW5jZWwuY2xlYXIoKTtcbiAgICAgICAgICBjb25zdCB0eXBlID0gZSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnJhdy50eXBlO1xuICAgICAgICAgIGlmIChpc051bGxhYmxlKHR5cGUpIHx8IHR5cGUgPT09IHRyYW5zaXRpb25lbmQoKSkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgIHJlbW92ZSQ3KGVsZW1lbnQsIHRpbWVyQXR0cik7XG4gICAgICAgICAgICByZW1vdmUkMShlbGVtZW50LCB0cmFuc2l0aW9uLmNsYXNzZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25TdGFydCA9IGJpbmQoZWxlbWVudCwgdHJhbnNpdGlvbnN0YXJ0KCksIGUgPT4ge1xuICAgICAgICBpZiAoaXNTb3VyY2VUcmFuc2l0aW9uKGUpKSB7XG4gICAgICAgICAgdHJhbnNpdGlvblN0YXJ0LnVuYmluZCgpO1xuICAgICAgICAgIHRyYW5zaXRpb25FbmQuc2V0KGJpbmQoZWxlbWVudCwgdHJhbnNpdGlvbmVuZCgpLCB0cmFuc2l0aW9uRG9uZSkpO1xuICAgICAgICAgIHRyYW5zaXRpb25DYW5jZWwuc2V0KGJpbmQoZWxlbWVudCwgdHJhbnNpdGlvbmNhbmNlbCgpLCB0cmFuc2l0aW9uRG9uZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gZ2V0VHJhbnNpdGlvbkR1cmF0aW9uKGVsZW1lbnQpO1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KHRyYW5zaXRpb25Eb25lLCBkdXJhdGlvbiArIDE3KTtcbiAgICAgICAgc2V0JDkoZWxlbWVudCwgdGltZXJBdHRyLCB0aW1lcik7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHN0YXJ0VHJhbnNpdGlvbmluZyA9IChlbGVtZW50LCB0cmFuc2l0aW9uKSA9PiB7XG4gICAgICBhZGQkMShlbGVtZW50LCB0cmFuc2l0aW9uLmNsYXNzZXMpO1xuICAgICAgZ2V0T3B0KGVsZW1lbnQsIHRpbWVyQXR0cikuZWFjaCh0aW1lcklkID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHBhcnNlSW50KHRpbWVySWQsIDEwKSk7XG4gICAgICAgIHJlbW92ZSQ3KGVsZW1lbnQsIHRpbWVyQXR0cik7XG4gICAgICB9KTtcbiAgICAgIHNldHVwVHJhbnNpdGlvbkxpc3RlbmVycyhlbGVtZW50LCB0cmFuc2l0aW9uKTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5VHJhbnNpdGlvbkNzcyA9IChlbGVtZW50LCBvcmlnaW4sIHBvc2l0aW9uLCB0cmFuc2l0aW9uLCBkZWNpc2lvbiwgbGFzdFBsYWNlbWVudCkgPT4ge1xuICAgICAgY29uc3Qgc2hvdWxkVHJhbnNpdGlvbiA9IHNob3VsZEFwcGx5VHJhbnNpdGlvbkNzcyh0cmFuc2l0aW9uLCBkZWNpc2lvbiwgbGFzdFBsYWNlbWVudCk7XG4gICAgICBpZiAoc2hvdWxkVHJhbnNpdGlvbiB8fCBpc1RyYW5zaXRpb25pbmckMShlbGVtZW50LCB0cmFuc2l0aW9uKSkge1xuICAgICAgICBzZXQkOChlbGVtZW50LCAncG9zaXRpb24nLCBwb3NpdGlvbi5wb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0b0JveChvcmlnaW4sIGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBpbnRlcm1lZGlhdGVQb3NpdGlvbiA9IHJlcG9zaXRpb24ob3JpZ2luLCB7XG4gICAgICAgICAgLi4uZGVjaXNpb24sXG4gICAgICAgICAgcmVjdFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaW50ZXJtZWRpYXRlQ3NzT3B0aW9ucyA9IG1hcFRvT2JqZWN0KHByb3BlcnRpZXMsIHByb3AgPT4gaW50ZXJtZWRpYXRlUG9zaXRpb25bcHJvcF0pO1xuICAgICAgICBpZiAoaGFzQ2hhbmdlcyhwb3NpdGlvbiwgaW50ZXJtZWRpYXRlQ3NzT3B0aW9ucykpIHtcbiAgICAgICAgICBzZXRPcHRpb25zKGVsZW1lbnQsIGludGVybWVkaWF0ZUNzc09wdGlvbnMpO1xuICAgICAgICAgIGlmIChzaG91bGRUcmFuc2l0aW9uKSB7XG4gICAgICAgICAgICBzdGFydFRyYW5zaXRpb25pbmcoZWxlbWVudCwgdHJhbnNpdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlZmxvdyhlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVtb3ZlJDEoZWxlbWVudCwgdHJhbnNpdGlvbi5jbGFzc2VzKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZWxlbWVudFNpemUgPSBwID0+ICh7XG4gICAgICB3aWR0aDogZ2V0T3V0ZXIkMShwKSxcbiAgICAgIGhlaWdodDogZ2V0T3V0ZXIkMihwKVxuICAgIH0pO1xuICAgIGNvbnN0IGxheW91dCA9IChhbmNob3JCb3gsIGVsZW1lbnQsIGJ1YmJsZXMsIG9wdGlvbnMpID0+IHtcbiAgICAgIHJlbW92ZSQ2KGVsZW1lbnQsICdtYXgtaGVpZ2h0Jyk7XG4gICAgICByZW1vdmUkNihlbGVtZW50LCAnbWF4LXdpZHRoJyk7XG4gICAgICBjb25zdCBlbGVtZW50Qm94ID0gZWxlbWVudFNpemUoZWxlbWVudCk7XG4gICAgICByZXR1cm4gYXR0ZW1wdHMoZWxlbWVudCwgb3B0aW9ucy5wcmVmZXJlbmNlLCBhbmNob3JCb3gsIGVsZW1lbnRCb3gsIGJ1YmJsZXMsIG9wdGlvbnMuYm91bmRzKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldENsYXNzZXMgPSAoZWxlbWVudCwgZGVjaXNpb24pID0+IHtcbiAgICAgIGNvbnN0IGNsYXNzSW5mbyA9IGRlY2lzaW9uLmNsYXNzZXM7XG4gICAgICByZW1vdmUkMShlbGVtZW50LCBjbGFzc0luZm8ub2ZmKTtcbiAgICAgIGFkZCQxKGVsZW1lbnQsIGNsYXNzSW5mby5vbik7XG4gICAgfTtcbiAgICBjb25zdCBzZXRIZWlnaHQgPSAoZWxlbWVudCwgZGVjaXNpb24sIG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IG1heEhlaWdodEZ1bmN0aW9uID0gb3B0aW9ucy5tYXhIZWlnaHRGdW5jdGlvbjtcbiAgICAgIG1heEhlaWdodEZ1bmN0aW9uKGVsZW1lbnQsIGRlY2lzaW9uLm1heEhlaWdodCk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRXaWR0aCA9IChlbGVtZW50LCBkZWNpc2lvbiwgb3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgbWF4V2lkdGhGdW5jdGlvbiA9IG9wdGlvbnMubWF4V2lkdGhGdW5jdGlvbjtcbiAgICAgIG1heFdpZHRoRnVuY3Rpb24oZWxlbWVudCwgZGVjaXNpb24ubWF4V2lkdGgpO1xuICAgIH07XG4gICAgY29uc3QgcG9zaXRpb24kMiA9IChlbGVtZW50LCBkZWNpc2lvbiwgb3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgcG9zaXRpb25Dc3MgPSByZXBvc2l0aW9uKG9wdGlvbnMub3JpZ2luLCBkZWNpc2lvbik7XG4gICAgICBvcHRpb25zLnRyYW5zaXRpb24uZWFjaCh0cmFuc2l0aW9uID0+IHtcbiAgICAgICAgYXBwbHlUcmFuc2l0aW9uQ3NzKGVsZW1lbnQsIG9wdGlvbnMub3JpZ2luLCBwb3NpdGlvbkNzcywgdHJhbnNpdGlvbiwgZGVjaXNpb24sIG9wdGlvbnMubGFzdFBsYWNlbWVudCk7XG4gICAgICB9KTtcbiAgICAgIGFwcGx5UG9zaXRpb25Dc3MoZWxlbWVudCwgcG9zaXRpb25Dc3MpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0UGxhY2VtZW50ID0gKGVsZW1lbnQsIGRlY2lzaW9uKSA9PiB7XG4gICAgICBzZXRQbGFjZW1lbnQkMShlbGVtZW50LCBkZWNpc2lvbi5wbGFjZW1lbnQpO1xuICAgIH07XG5cbiAgICBjb25zdCBzZXRNYXhIZWlnaHQgPSAoZWxlbWVudCwgbWF4SGVpZ2h0KSA9PiB7XG4gICAgICBzZXRNYXgkMShlbGVtZW50LCBNYXRoLmZsb29yKG1heEhlaWdodCkpO1xuICAgIH07XG4gICAgY29uc3QgYW5jaG9yZWQgPSBjb25zdGFudCQxKChlbGVtZW50LCBhdmFpbGFibGUpID0+IHtcbiAgICAgIHNldE1heEhlaWdodChlbGVtZW50LCBhdmFpbGFibGUpO1xuICAgICAgc2V0QWxsKGVsZW1lbnQsIHtcbiAgICAgICAgJ292ZXJmbG93LXgnOiAnaGlkZGVuJyxcbiAgICAgICAgJ292ZXJmbG93LXknOiAnYXV0bydcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IGV4cGFuZGFibGUkMSA9IGNvbnN0YW50JDEoKGVsZW1lbnQsIGF2YWlsYWJsZSkgPT4ge1xuICAgICAgc2V0TWF4SGVpZ2h0KGVsZW1lbnQsIGF2YWlsYWJsZSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBkZWZhdWx0T3IgPSAob3B0aW9ucywga2V5LCBkZXBoYXVsdCkgPT4gb3B0aW9uc1trZXldID09PSB1bmRlZmluZWQgPyBkZXBoYXVsdCA6IG9wdGlvbnNba2V5XTtcbiAgICBjb25zdCBzaW1wbGUgPSAoYW5jaG9yLCBlbGVtZW50LCBidWJibGUsIGxheW91dHMsIGxhc3RQbGFjZW1lbnQsIG9wdEJvdW5kcywgb3ZlcnJpZGVPcHRpb25zLCB0cmFuc2l0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXhIZWlnaHRGdW5jdGlvbiA9IGRlZmF1bHRPcihvdmVycmlkZU9wdGlvbnMsICdtYXhIZWlnaHRGdW5jdGlvbicsIGFuY2hvcmVkKCkpO1xuICAgICAgY29uc3QgbWF4V2lkdGhGdW5jdGlvbiA9IGRlZmF1bHRPcihvdmVycmlkZU9wdGlvbnMsICdtYXhXaWR0aEZ1bmN0aW9uJywgbm9vcCk7XG4gICAgICBjb25zdCBhbmNob3JCb3ggPSBhbmNob3IuYW5jaG9yQm94O1xuICAgICAgY29uc3Qgb3JpZ2luID0gYW5jaG9yLm9yaWdpbjtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIGJvdW5kczogdmlld3BvcnQob3JpZ2luLCBvcHRCb3VuZHMpLFxuICAgICAgICBvcmlnaW4sXG4gICAgICAgIHByZWZlcmVuY2U6IGxheW91dHMsXG4gICAgICAgIG1heEhlaWdodEZ1bmN0aW9uLFxuICAgICAgICBtYXhXaWR0aEZ1bmN0aW9uLFxuICAgICAgICBsYXN0UGxhY2VtZW50LFxuICAgICAgICB0cmFuc2l0aW9uXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGdvKGFuY2hvckJveCwgZWxlbWVudCwgYnViYmxlLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIGNvbnN0IGdvID0gKGFuY2hvckJveCwgZWxlbWVudCwgYnViYmxlLCBvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBkZWNpc2lvbiA9IGxheW91dChhbmNob3JCb3gsIGVsZW1lbnQsIGJ1YmJsZSwgb3B0aW9ucyk7XG4gICAgICBwb3NpdGlvbiQyKGVsZW1lbnQsIGRlY2lzaW9uLCBvcHRpb25zKTtcbiAgICAgIHNldFBsYWNlbWVudChlbGVtZW50LCBkZWNpc2lvbik7XG4gICAgICBzZXRDbGFzc2VzKGVsZW1lbnQsIGRlY2lzaW9uKTtcbiAgICAgIHNldEhlaWdodChlbGVtZW50LCBkZWNpc2lvbiwgb3B0aW9ucyk7XG4gICAgICBzZXRXaWR0aChlbGVtZW50LCBkZWNpc2lvbiwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYXlvdXQ6IGRlY2lzaW9uLmxheW91dCxcbiAgICAgICAgcGxhY2VtZW50OiBkZWNpc2lvbi5wbGFjZW1lbnRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGFsbEFsaWdubWVudHMgPSBbXG4gICAgICAndmFsaWduQ2VudHJlJyxcbiAgICAgICdhbGlnbkxlZnQnLFxuICAgICAgJ2FsaWduUmlnaHQnLFxuICAgICAgJ2FsaWduQ2VudHJlJyxcbiAgICAgICd0b3AnLFxuICAgICAgJ2JvdHRvbScsXG4gICAgICAnbGVmdCcsXG4gICAgICAncmlnaHQnLFxuICAgICAgJ2luc2V0J1xuICAgIF07XG4gICAgY29uc3QgbnUkNSA9ICh4T2Zmc2V0LCB5T2Zmc2V0LCBjbGFzc2VzLCBpbnNldE1vZGlmaWVyID0gMSkgPT4ge1xuICAgICAgY29uc3QgaW5zZXRYT2Zmc2V0ID0geE9mZnNldCAqIGluc2V0TW9kaWZpZXI7XG4gICAgICBjb25zdCBpbnNldFlPZmZzZXQgPSB5T2Zmc2V0ICogaW5zZXRNb2RpZmllcjtcbiAgICAgIGNvbnN0IGdldENsYXNzZXMgPSBwcm9wID0+IGdldCRnKGNsYXNzZXMsIHByb3ApLmdldE9yKFtdKTtcbiAgICAgIGNvbnN0IG1ha2UgPSAoeERlbHRhLCB5RGVsdGEsIGFsaWdubWVudHNPbikgPT4ge1xuICAgICAgICBjb25zdCBhbGlnbm1lbnRzT2ZmID0gZGlmZmVyZW5jZShhbGxBbGlnbm1lbnRzLCBhbGlnbm1lbnRzT24pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9mZnNldDogU3VnYXJQb3NpdGlvbih4RGVsdGEsIHlEZWx0YSksXG4gICAgICAgICAgY2xhc3Nlc09uOiBiaW5kJDMoYWxpZ25tZW50c09uLCBnZXRDbGFzc2VzKSxcbiAgICAgICAgICBjbGFzc2VzT2ZmOiBiaW5kJDMoYWxpZ25tZW50c09mZiwgZ2V0Q2xhc3NlcylcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3V0aGVhc3Q6ICgpID0+IG1ha2UoLXhPZmZzZXQsIHlPZmZzZXQsIFtcbiAgICAgICAgICAndG9wJyxcbiAgICAgICAgICAnYWxpZ25MZWZ0J1xuICAgICAgICBdKSxcbiAgICAgICAgc291dGh3ZXN0OiAoKSA9PiBtYWtlKHhPZmZzZXQsIHlPZmZzZXQsIFtcbiAgICAgICAgICAndG9wJyxcbiAgICAgICAgICAnYWxpZ25SaWdodCdcbiAgICAgICAgXSksXG4gICAgICAgIHNvdXRoOiAoKSA9PiBtYWtlKC14T2Zmc2V0IC8gMiwgeU9mZnNldCwgW1xuICAgICAgICAgICd0b3AnLFxuICAgICAgICAgICdhbGlnbkNlbnRyZSdcbiAgICAgICAgXSksXG4gICAgICAgIG5vcnRoZWFzdDogKCkgPT4gbWFrZSgteE9mZnNldCwgLXlPZmZzZXQsIFtcbiAgICAgICAgICAnYm90dG9tJyxcbiAgICAgICAgICAnYWxpZ25MZWZ0J1xuICAgICAgICBdKSxcbiAgICAgICAgbm9ydGh3ZXN0OiAoKSA9PiBtYWtlKHhPZmZzZXQsIC15T2Zmc2V0LCBbXG4gICAgICAgICAgJ2JvdHRvbScsXG4gICAgICAgICAgJ2FsaWduUmlnaHQnXG4gICAgICAgIF0pLFxuICAgICAgICBub3J0aDogKCkgPT4gbWFrZSgteE9mZnNldCAvIDIsIC15T2Zmc2V0LCBbXG4gICAgICAgICAgJ2JvdHRvbScsXG4gICAgICAgICAgJ2FsaWduQ2VudHJlJ1xuICAgICAgICBdKSxcbiAgICAgICAgZWFzdDogKCkgPT4gbWFrZSh4T2Zmc2V0LCAteU9mZnNldCAvIDIsIFtcbiAgICAgICAgICAndmFsaWduQ2VudHJlJyxcbiAgICAgICAgICAnbGVmdCdcbiAgICAgICAgXSksXG4gICAgICAgIHdlc3Q6ICgpID0+IG1ha2UoLXhPZmZzZXQsIC15T2Zmc2V0IC8gMiwgW1xuICAgICAgICAgICd2YWxpZ25DZW50cmUnLFxuICAgICAgICAgICdyaWdodCdcbiAgICAgICAgXSksXG4gICAgICAgIGluc2V0Tm9ydGhlYXN0OiAoKSA9PiBtYWtlKGluc2V0WE9mZnNldCwgaW5zZXRZT2Zmc2V0LCBbXG4gICAgICAgICAgJ3RvcCcsXG4gICAgICAgICAgJ2FsaWduTGVmdCcsXG4gICAgICAgICAgJ2luc2V0J1xuICAgICAgICBdKSxcbiAgICAgICAgaW5zZXROb3J0aHdlc3Q6ICgpID0+IG1ha2UoLWluc2V0WE9mZnNldCwgaW5zZXRZT2Zmc2V0LCBbXG4gICAgICAgICAgJ3RvcCcsXG4gICAgICAgICAgJ2FsaWduUmlnaHQnLFxuICAgICAgICAgICdpbnNldCdcbiAgICAgICAgXSksXG4gICAgICAgIGluc2V0Tm9ydGg6ICgpID0+IG1ha2UoLWluc2V0WE9mZnNldCAvIDIsIGluc2V0WU9mZnNldCwgW1xuICAgICAgICAgICd0b3AnLFxuICAgICAgICAgICdhbGlnbkNlbnRyZScsXG4gICAgICAgICAgJ2luc2V0J1xuICAgICAgICBdKSxcbiAgICAgICAgaW5zZXRTb3V0aGVhc3Q6ICgpID0+IG1ha2UoaW5zZXRYT2Zmc2V0LCAtaW5zZXRZT2Zmc2V0LCBbXG4gICAgICAgICAgJ2JvdHRvbScsXG4gICAgICAgICAgJ2FsaWduTGVmdCcsXG4gICAgICAgICAgJ2luc2V0J1xuICAgICAgICBdKSxcbiAgICAgICAgaW5zZXRTb3V0aHdlc3Q6ICgpID0+IG1ha2UoLWluc2V0WE9mZnNldCwgLWluc2V0WU9mZnNldCwgW1xuICAgICAgICAgICdib3R0b20nLFxuICAgICAgICAgICdhbGlnblJpZ2h0JyxcbiAgICAgICAgICAnaW5zZXQnXG4gICAgICAgIF0pLFxuICAgICAgICBpbnNldFNvdXRoOiAoKSA9PiBtYWtlKC1pbnNldFhPZmZzZXQgLyAyLCAtaW5zZXRZT2Zmc2V0LCBbXG4gICAgICAgICAgJ2JvdHRvbScsXG4gICAgICAgICAgJ2FsaWduQ2VudHJlJyxcbiAgICAgICAgICAnaW5zZXQnXG4gICAgICAgIF0pLFxuICAgICAgICBpbnNldEVhc3Q6ICgpID0+IG1ha2UoLWluc2V0WE9mZnNldCwgLWluc2V0WU9mZnNldCAvIDIsIFtcbiAgICAgICAgICAndmFsaWduQ2VudHJlJyxcbiAgICAgICAgICAncmlnaHQnLFxuICAgICAgICAgICdpbnNldCdcbiAgICAgICAgXSksXG4gICAgICAgIGluc2V0V2VzdDogKCkgPT4gbWFrZShpbnNldFhPZmZzZXQsIC1pbnNldFlPZmZzZXQgLyAyLCBbXG4gICAgICAgICAgJ3ZhbGlnbkNlbnRyZScsXG4gICAgICAgICAgJ2xlZnQnLFxuICAgICAgICAgICdpbnNldCdcbiAgICAgICAgXSlcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBmYWxsYmFjayA9ICgpID0+IG51JDUoMCwgMCwge30pO1xuXG4gICAgY29uc3QgbnUkNCA9IGlkZW50aXR5O1xuXG4gICAgY29uc3Qgb25EaXJlY3Rpb24gPSAoaXNMdHIsIGlzUnRsKSA9PiBlbGVtZW50ID0+IGdldERpcmVjdGlvbihlbGVtZW50KSA9PT0gJ3J0bCcgPyBpc1J0bCA6IGlzTHRyO1xuICAgIGNvbnN0IGdldERpcmVjdGlvbiA9IGVsZW1lbnQgPT4gZ2V0JGUoZWxlbWVudCwgJ2RpcmVjdGlvbicpID09PSAncnRsJyA/ICdydGwnIDogJ2x0cic7XG5cbiAgICB2YXIgQXR0cmlidXRlVmFsdWU7XG4gICAgKGZ1bmN0aW9uIChBdHRyaWJ1dGVWYWx1ZSkge1xuICAgICAgQXR0cmlidXRlVmFsdWVbJ1RvcFRvQm90dG9tJ10gPSAndG9wdG9ib3R0b20nO1xuICAgICAgQXR0cmlidXRlVmFsdWVbJ0JvdHRvbVRvVG9wJ10gPSAnYm90dG9tdG90b3AnO1xuICAgIH0oQXR0cmlidXRlVmFsdWUgfHwgKEF0dHJpYnV0ZVZhbHVlID0ge30pKSk7XG4gICAgY29uc3QgQXR0cmlidXRlID0gJ2RhdGEtYWxsb3ktdmVydGljYWwtZGlyJztcbiAgICBjb25zdCBpc0JvdHRvbVRvVG9wRGlyID0gZWwgPT4gY2xvc2VzdCQyKGVsLCBjdXJyZW50ID0+IGlzRWxlbWVudCQxKGN1cnJlbnQpICYmIGdldCRmKGN1cnJlbnQsICdkYXRhLWFsbG95LXZlcnRpY2FsLWRpcicpID09PSBBdHRyaWJ1dGVWYWx1ZS5Cb3R0b21Ub1RvcCk7XG5cbiAgICBjb25zdCBzY2hlbWEkeSA9ICgpID0+IG9wdGlvbk9iak9mKCdsYXlvdXRzJywgW1xuICAgICAgcmVxdWlyZWQkMSgnb25MdHInKSxcbiAgICAgIHJlcXVpcmVkJDEoJ29uUnRsJyksXG4gICAgICBvcHRpb24kMygnb25Cb3R0b21MdHInKSxcbiAgICAgIG9wdGlvbiQzKCdvbkJvdHRvbVJ0bCcpXG4gICAgXSk7XG4gICAgY29uc3QgZ2V0JDUgPSAoZWxlbSwgaW5mbywgZGVmYXVsdEx0ciwgZGVmYXVsdFJ0bCwgZGVmYXVsdEJvdHRvbUx0ciwgZGVmYXVsdEJvdHRvbVJ0bCwgZGlyRWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgaXNCb3R0b21Ub1RvcCA9IGRpckVsZW1lbnQubWFwKGlzQm90dG9tVG9Ub3BEaXIpLmdldE9yKGZhbHNlKTtcbiAgICAgIGNvbnN0IGN1c3RvbUx0ciA9IGluZm8ubGF5b3V0cy5tYXAobHMgPT4gbHMub25MdHIoZWxlbSkpO1xuICAgICAgY29uc3QgY3VzdG9tUnRsID0gaW5mby5sYXlvdXRzLm1hcChscyA9PiBscy5vblJ0bChlbGVtKSk7XG4gICAgICBjb25zdCBsdHIgPSBpc0JvdHRvbVRvVG9wID8gaW5mby5sYXlvdXRzLmJpbmQobHMgPT4gbHMub25Cb3R0b21MdHIubWFwKGYgPT4gZihlbGVtKSkpLm9yKGN1c3RvbUx0cikuZ2V0T3IoZGVmYXVsdEJvdHRvbUx0cikgOiBjdXN0b21MdHIuZ2V0T3IoZGVmYXVsdEx0cik7XG4gICAgICBjb25zdCBydGwgPSBpc0JvdHRvbVRvVG9wID8gaW5mby5sYXlvdXRzLmJpbmQobHMgPT4gbHMub25Cb3R0b21SdGwubWFwKGYgPT4gZihlbGVtKSkpLm9yKGN1c3RvbVJ0bCkuZ2V0T3IoZGVmYXVsdEJvdHRvbVJ0bCkgOiBjdXN0b21SdGwuZ2V0T3IoZGVmYXVsdFJ0bCk7XG4gICAgICBjb25zdCBmID0gb25EaXJlY3Rpb24obHRyLCBydGwpO1xuICAgICAgcmV0dXJuIGYoZWxlbSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHBsYWNlbWVudCQ0ID0gKGNvbXBvbmVudCwgYW5jaG9ySW5mbywgb3JpZ2luKSA9PiB7XG4gICAgICBjb25zdCBob3RzcG90ID0gYW5jaG9ySW5mby5ob3RzcG90O1xuICAgICAgY29uc3QgYW5jaG9yQm94ID0gdG9Cb3gob3JpZ2luLCBob3RzcG90LmVsZW1lbnQpO1xuICAgICAgY29uc3QgbGF5b3V0cyA9IGdldCQ1KGNvbXBvbmVudC5lbGVtZW50LCBhbmNob3JJbmZvLCBiZWxvd09yQWJvdmUoKSwgYmVsb3dPckFib3ZlUnRsKCksIGFib3ZlT3JCZWxvdygpLCBhYm92ZU9yQmVsb3dSdGwoKSwgT3B0aW9uYWwuc29tZShhbmNob3JJbmZvLmhvdHNwb3QuZWxlbWVudCkpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUobnUkNCh7XG4gICAgICAgIGFuY2hvckJveCxcbiAgICAgICAgYnViYmxlOiBhbmNob3JJbmZvLmJ1YmJsZS5nZXRPcihmYWxsYmFjaygpKSxcbiAgICAgICAgb3ZlcnJpZGVzOiBhbmNob3JJbmZvLm92ZXJyaWRlcyxcbiAgICAgICAgbGF5b3V0c1xuICAgICAgfSkpO1xuICAgIH07XG4gICAgdmFyIEhvdHNwb3RBbmNob3IgPSBbXG4gICAgICByZXF1aXJlZCQxKCdob3RzcG90JyksXG4gICAgICBvcHRpb24kMygnYnViYmxlJyksXG4gICAgICBkZWZhdWx0ZWQoJ292ZXJyaWRlcycsIHt9KSxcbiAgICAgIHNjaGVtYSR5KCksXG4gICAgICBvdXRwdXQkMSgncGxhY2VtZW50JywgcGxhY2VtZW50JDQpXG4gICAgXTtcblxuICAgIGNvbnN0IHBsYWNlbWVudCQzID0gKGNvbXBvbmVudCwgYW5jaG9ySW5mbywgb3JpZ2luKSA9PiB7XG4gICAgICBjb25zdCBwb3MgPSB0cmFuc2xhdGUkMihvcmlnaW4sIGFuY2hvckluZm8ueCwgYW5jaG9ySW5mby55KTtcbiAgICAgIGNvbnN0IGFuY2hvckJveCA9IGJvdW5kcyhwb3MubGVmdCwgcG9zLnRvcCwgYW5jaG9ySW5mby53aWR0aCwgYW5jaG9ySW5mby5oZWlnaHQpO1xuICAgICAgY29uc3QgbGF5b3V0cyA9IGdldCQ1KGNvbXBvbmVudC5lbGVtZW50LCBhbmNob3JJbmZvLCBhbGwkMSgpLCBhbGxSdGwkMSgpLCBhbGwkMSgpLCBhbGxSdGwkMSgpLCBPcHRpb25hbC5ub25lKCkpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUobnUkNCh7XG4gICAgICAgIGFuY2hvckJveCxcbiAgICAgICAgYnViYmxlOiBhbmNob3JJbmZvLmJ1YmJsZSxcbiAgICAgICAgb3ZlcnJpZGVzOiBhbmNob3JJbmZvLm92ZXJyaWRlcyxcbiAgICAgICAgbGF5b3V0c1xuICAgICAgfSkpO1xuICAgIH07XG4gICAgdmFyIE1ha2VzaGlmdEFuY2hvciA9IFtcbiAgICAgIHJlcXVpcmVkJDEoJ3gnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ3knKSxcbiAgICAgIGRlZmF1bHRlZCgnaGVpZ2h0JywgMCksXG4gICAgICBkZWZhdWx0ZWQoJ3dpZHRoJywgMCksXG4gICAgICBkZWZhdWx0ZWQoJ2J1YmJsZScsIGZhbGxiYWNrKCkpLFxuICAgICAgZGVmYXVsdGVkKCdvdmVycmlkZXMnLCB7fSksXG4gICAgICBzY2hlbWEkeSgpLFxuICAgICAgb3V0cHV0JDEoJ3BsYWNlbWVudCcsIHBsYWNlbWVudCQzKVxuICAgIF07XG5cbiAgICBjb25zdCBhZHQkNyA9IEFkdC5nZW5lcmF0ZShbXG4gICAgICB7IHNjcmVlbjogWydwb2ludCddIH0sXG4gICAgICB7XG4gICAgICAgIGFic29sdXRlOiBbXG4gICAgICAgICAgJ3BvaW50JyxcbiAgICAgICAgICAnc2Nyb2xsTGVmdCcsXG4gICAgICAgICAgJ3Njcm9sbFRvcCdcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0pO1xuICAgIGNvbnN0IHRvRml4ZWQgPSBwb3MgPT4gcG9zLmZvbGQoaWRlbnRpdHksIChwb2ludCwgc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wKSA9PiBwb2ludC50cmFuc2xhdGUoLXNjcm9sbExlZnQsIC1zY3JvbGxUb3ApKTtcbiAgICBjb25zdCB0b0Fic29sdXRlID0gcG9zID0+IHBvcy5mb2xkKGlkZW50aXR5LCBpZGVudGl0eSk7XG4gICAgY29uc3Qgc3VtID0gcG9pbnRzID0+IGZvbGRsKHBvaW50cywgKGIsIGEpID0+IGIudHJhbnNsYXRlKGEubGVmdCwgYS50b3ApLCBTdWdhclBvc2l0aW9uKDAsIDApKTtcbiAgICBjb25zdCBzdW1Bc0ZpeGVkID0gcG9zaXRpb25zID0+IHtcbiAgICAgIGNvbnN0IHBvaW50cyA9IG1hcCQyKHBvc2l0aW9ucywgdG9GaXhlZCk7XG4gICAgICByZXR1cm4gc3VtKHBvaW50cyk7XG4gICAgfTtcbiAgICBjb25zdCBzdW1Bc0Fic29sdXRlID0gcG9zaXRpb25zID0+IHtcbiAgICAgIGNvbnN0IHBvaW50cyA9IG1hcCQyKHBvc2l0aW9ucywgdG9BYnNvbHV0ZSk7XG4gICAgICByZXR1cm4gc3VtKHBvaW50cyk7XG4gICAgfTtcbiAgICBjb25zdCBzY3JlZW4gPSBhZHQkNy5zY3JlZW47XG4gICAgY29uc3QgYWJzb2x1dGUkMSA9IGFkdCQ3LmFic29sdXRlO1xuXG4gICAgY29uc3QgZ2V0T2Zmc2V0ID0gKGNvbXBvbmVudCwgb3JpZ2luLCBhbmNob3JJbmZvKSA9PiB7XG4gICAgICBjb25zdCB3aW4gPSBkZWZhdWx0VmlldyhhbmNob3JJbmZvLnJvb3QpLmRvbTtcbiAgICAgIGNvbnN0IGhhc1NhbWVPd25lciA9IGZyYW1lID0+IHtcbiAgICAgICAgY29uc3QgZnJhbWVPd25lciA9IG93bmVyJDQoZnJhbWUpO1xuICAgICAgICBjb25zdCBjb21wT3duZXIgPSBvd25lciQ0KGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGVxKGZyYW1lT3duZXIsIGNvbXBPd25lcik7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20od2luLmZyYW1lRWxlbWVudCkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKS5maWx0ZXIoaGFzU2FtZU93bmVyKS5tYXAoYWJzb2x1dGUkMyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRSb290UG9pbnQgPSAoY29tcG9uZW50LCBvcmlnaW4sIGFuY2hvckluZm8pID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IG93bmVyJDQoY29tcG9uZW50LmVsZW1lbnQpO1xuICAgICAgY29uc3Qgb3V0ZXJTY3JvbGwgPSBnZXQkYihkb2MpO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0KGNvbXBvbmVudCwgb3JpZ2luLCBhbmNob3JJbmZvKS5nZXRPcihvdXRlclNjcm9sbCk7XG4gICAgICByZXR1cm4gYWJzb2x1dGUkMShvZmZzZXQsIG91dGVyU2Nyb2xsLmxlZnQsIG91dGVyU2Nyb2xsLnRvcCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldEJveCA9IChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpID0+IHtcbiAgICAgIGNvbnN0IHBvaW50ID0gc2NyZWVuKFN1Z2FyUG9zaXRpb24obGVmdCwgdG9wKSk7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShwb2ludGVkKHBvaW50LCB3aWR0aCwgaGVpZ2h0KSk7XG4gICAgfTtcbiAgICBjb25zdCBjYWxjTmV3QW5jaG9yID0gKG9wdEJveCwgcm9vdFBvaW50LCBhbmNob3JJbmZvLCBvcmlnaW4sIGVsZW0pID0+IG9wdEJveC5tYXAoYm94ID0+IHtcbiAgICAgIGNvbnN0IHBvaW50cyA9IFtcbiAgICAgICAgcm9vdFBvaW50LFxuICAgICAgICBib3gucG9pbnRcbiAgICAgIF07XG4gICAgICBjb25zdCB0b3BMZWZ0ID0gY2F0YSQxKG9yaWdpbiwgKCkgPT4gc3VtQXNBYnNvbHV0ZShwb2ludHMpLCAoKSA9PiBzdW1Bc0Fic29sdXRlKHBvaW50cyksICgpID0+IHN1bUFzRml4ZWQocG9pbnRzKSk7XG4gICAgICBjb25zdCBhbmNob3JCb3ggPSByZWN0KHRvcExlZnQubGVmdCwgdG9wTGVmdC50b3AsIGJveC53aWR0aCwgYm94LmhlaWdodCk7XG4gICAgICBjb25zdCBsYXlvdXRzTHRyID0gYW5jaG9ySW5mby5zaG93QWJvdmUgPyBhYm92ZU9yQmVsb3coKSA6IGJlbG93T3JBYm92ZSgpO1xuICAgICAgY29uc3QgbGF5b3V0c1J0bCA9IGFuY2hvckluZm8uc2hvd0Fib3ZlID8gYWJvdmVPckJlbG93UnRsKCkgOiBiZWxvd09yQWJvdmVSdGwoKTtcbiAgICAgIGNvbnN0IGxheW91dHMgPSBnZXQkNShlbGVtLCBhbmNob3JJbmZvLCBsYXlvdXRzTHRyLCBsYXlvdXRzUnRsLCBsYXlvdXRzTHRyLCBsYXlvdXRzUnRsLCBPcHRpb25hbC5ub25lKCkpO1xuICAgICAgcmV0dXJuIG51JDQoe1xuICAgICAgICBhbmNob3JCb3gsXG4gICAgICAgIGJ1YmJsZTogYW5jaG9ySW5mby5idWJibGUuZ2V0T3IoZmFsbGJhY2soKSksXG4gICAgICAgIG92ZXJyaWRlczogYW5jaG9ySW5mby5vdmVycmlkZXMsXG4gICAgICAgIGxheW91dHNcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcGxhY2VtZW50JDIgPSAoY29tcG9uZW50LCBhbmNob3JJbmZvLCBvcmlnaW4pID0+IHtcbiAgICAgIGNvbnN0IHJvb3RQb2ludCA9IGdldFJvb3RQb2ludChjb21wb25lbnQsIG9yaWdpbiwgYW5jaG9ySW5mbyk7XG4gICAgICByZXR1cm4gYW5jaG9ySW5mby5ub2RlLmZpbHRlcihpbkJvZHkpLmJpbmQodGFyZ2V0ID0+IHtcbiAgICAgICAgY29uc3QgcmVjdCA9IHRhcmdldC5kb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IG5vZGVCb3ggPSBnZXRCb3gocmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpO1xuICAgICAgICBjb25zdCBlbGVtID0gYW5jaG9ySW5mby5ub2RlLmdldE9yKGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGNhbGNOZXdBbmNob3Iobm9kZUJveCwgcm9vdFBvaW50LCBhbmNob3JJbmZvLCBvcmlnaW4sIGVsZW0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgTm9kZUFuY2hvciA9IFtcbiAgICAgIHJlcXVpcmVkJDEoJ25vZGUnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ3Jvb3QnKSxcbiAgICAgIG9wdGlvbiQzKCdidWJibGUnKSxcbiAgICAgIHNjaGVtYSR5KCksXG4gICAgICBkZWZhdWx0ZWQoJ292ZXJyaWRlcycsIHt9KSxcbiAgICAgIGRlZmF1bHRlZCgnc2hvd0Fib3ZlJywgZmFsc2UpLFxuICAgICAgb3V0cHV0JDEoJ3BsYWNlbWVudCcsIHBsYWNlbWVudCQyKVxuICAgIF07XG5cbiAgICBjb25zdCB6ZXJvV2lkdGggPSAnXFx1RkVGRic7XG4gICAgY29uc3QgbmJzcCA9ICdcXHhBMCc7XG5cbiAgICBjb25zdCBjcmVhdGUkMyA9IChzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSA9PiAoe1xuICAgICAgc3RhcnQsXG4gICAgICBzb2Zmc2V0LFxuICAgICAgZmluaXNoLFxuICAgICAgZm9mZnNldFxuICAgIH0pO1xuICAgIGNvbnN0IFNpbVJhbmdlID0geyBjcmVhdGU6IGNyZWF0ZSQzIH07XG5cbiAgICBjb25zdCBhZHQkNiA9IEFkdC5nZW5lcmF0ZShbXG4gICAgICB7IGJlZm9yZTogWydlbGVtZW50J10gfSxcbiAgICAgIHtcbiAgICAgICAgb246IFtcbiAgICAgICAgICAnZWxlbWVudCcsXG4gICAgICAgICAgJ29mZnNldCdcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHsgYWZ0ZXI6IFsnZWxlbWVudCddIH1cbiAgICBdKTtcbiAgICBjb25zdCBjYXRhID0gKHN1YmplY3QsIG9uQmVmb3JlLCBvbk9uLCBvbkFmdGVyKSA9PiBzdWJqZWN0LmZvbGQob25CZWZvcmUsIG9uT24sIG9uQWZ0ZXIpO1xuICAgIGNvbnN0IGdldFN0YXJ0JDEgPSBzaXR1ID0+IHNpdHUuZm9sZChpZGVudGl0eSwgaWRlbnRpdHksIGlkZW50aXR5KTtcbiAgICBjb25zdCBiZWZvcmUgPSBhZHQkNi5iZWZvcmU7XG4gICAgY29uc3Qgb24kMSA9IGFkdCQ2Lm9uO1xuICAgIGNvbnN0IGFmdGVyJDEgPSBhZHQkNi5hZnRlcjtcbiAgICBjb25zdCBTaXR1ID0ge1xuICAgICAgYmVmb3JlLFxuICAgICAgb246IG9uJDEsXG4gICAgICBhZnRlcjogYWZ0ZXIkMSxcbiAgICAgIGNhdGEsXG4gICAgICBnZXRTdGFydDogZ2V0U3RhcnQkMVxuICAgIH07XG5cbiAgICBjb25zdCBhZHQkNSA9IEFkdC5nZW5lcmF0ZShbXG4gICAgICB7IGRvbVJhbmdlOiBbJ3JuZyddIH0sXG4gICAgICB7XG4gICAgICAgIHJlbGF0aXZlOiBbXG4gICAgICAgICAgJ3N0YXJ0U2l0dScsXG4gICAgICAgICAgJ2ZpbmlzaFNpdHUnXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGV4YWN0OiBbXG4gICAgICAgICAgJ3N0YXJ0JyxcbiAgICAgICAgICAnc29mZnNldCcsXG4gICAgICAgICAgJ2ZpbmlzaCcsXG4gICAgICAgICAgJ2ZvZmZzZXQnXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdKTtcbiAgICBjb25zdCBleGFjdEZyb21SYW5nZSA9IHNpbVJhbmdlID0+IGFkdCQ1LmV4YWN0KHNpbVJhbmdlLnN0YXJ0LCBzaW1SYW5nZS5zb2Zmc2V0LCBzaW1SYW5nZS5maW5pc2gsIHNpbVJhbmdlLmZvZmZzZXQpO1xuICAgIGNvbnN0IGdldFN0YXJ0ID0gc2VsZWN0aW9uID0+IHNlbGVjdGlvbi5tYXRjaCh7XG4gICAgICBkb21SYW5nZTogcm5nID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJuZy5zdGFydENvbnRhaW5lciksXG4gICAgICByZWxhdGl2ZTogKHN0YXJ0U2l0dSwgX2ZpbmlzaFNpdHUpID0+IFNpdHUuZ2V0U3RhcnQoc3RhcnRTaXR1KSxcbiAgICAgIGV4YWN0OiAoc3RhcnQsIF9zb2Zmc2V0LCBfZmluaXNoLCBfZm9mZnNldCkgPT4gc3RhcnRcbiAgICB9KTtcbiAgICBjb25zdCBkb21SYW5nZSA9IGFkdCQ1LmRvbVJhbmdlO1xuICAgIGNvbnN0IHJlbGF0aXZlID0gYWR0JDUucmVsYXRpdmU7XG4gICAgY29uc3QgZXhhY3QgPSBhZHQkNS5leGFjdDtcbiAgICBjb25zdCBnZXRXaW4gPSBzZWxlY3Rpb24gPT4ge1xuICAgICAgY29uc3Qgc3RhcnQgPSBnZXRTdGFydChzZWxlY3Rpb24pO1xuICAgICAgcmV0dXJuIGRlZmF1bHRWaWV3KHN0YXJ0KTtcbiAgICB9O1xuICAgIGNvbnN0IHJhbmdlJDEgPSBTaW1SYW5nZS5jcmVhdGU7XG4gICAgY29uc3QgU2ltU2VsZWN0aW9uID0ge1xuICAgICAgZG9tUmFuZ2UsXG4gICAgICByZWxhdGl2ZSxcbiAgICAgIGV4YWN0LFxuICAgICAgZXhhY3RGcm9tUmFuZ2UsXG4gICAgICBnZXRXaW4sXG4gICAgICByYW5nZTogcmFuZ2UkMVxuICAgIH07XG5cbiAgICBjb25zdCBzZXRTdGFydCA9IChybmcsIHNpdHUpID0+IHtcbiAgICAgIHNpdHUuZm9sZChlID0+IHtcbiAgICAgICAgcm5nLnNldFN0YXJ0QmVmb3JlKGUuZG9tKTtcbiAgICAgIH0sIChlLCBvKSA9PiB7XG4gICAgICAgIHJuZy5zZXRTdGFydChlLmRvbSwgbyk7XG4gICAgICB9LCBlID0+IHtcbiAgICAgICAgcm5nLnNldFN0YXJ0QWZ0ZXIoZS5kb20pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRGaW5pc2ggPSAocm5nLCBzaXR1KSA9PiB7XG4gICAgICBzaXR1LmZvbGQoZSA9PiB7XG4gICAgICAgIHJuZy5zZXRFbmRCZWZvcmUoZS5kb20pO1xuICAgICAgfSwgKGUsIG8pID0+IHtcbiAgICAgICAgcm5nLnNldEVuZChlLmRvbSwgbyk7XG4gICAgICB9LCBlID0+IHtcbiAgICAgICAgcm5nLnNldEVuZEFmdGVyKGUuZG9tKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVsYXRpdmVUb05hdGl2ZSA9ICh3aW4sIHN0YXJ0U2l0dSwgZmluaXNoU2l0dSkgPT4ge1xuICAgICAgY29uc3QgcmFuZ2UgPSB3aW4uZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHNldFN0YXJ0KHJhbmdlLCBzdGFydFNpdHUpO1xuICAgICAgc2V0RmluaXNoKHJhbmdlLCBmaW5pc2hTaXR1KTtcbiAgICAgIHJldHVybiByYW5nZTtcbiAgICB9O1xuICAgIGNvbnN0IGV4YWN0VG9OYXRpdmUgPSAod2luLCBzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSA9PiB7XG4gICAgICBjb25zdCBybmcgPSB3aW4uZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHJuZy5zZXRTdGFydChzdGFydC5kb20sIHNvZmZzZXQpO1xuICAgICAgcm5nLnNldEVuZChmaW5pc2guZG9tLCBmb2Zmc2V0KTtcbiAgICAgIHJldHVybiBybmc7XG4gICAgfTtcbiAgICBjb25zdCB0b1JlY3QgPSByZWN0ID0+ICh7XG4gICAgICBsZWZ0OiByZWN0LmxlZnQsXG4gICAgICB0b3A6IHJlY3QudG9wLFxuICAgICAgcmlnaHQ6IHJlY3QucmlnaHQsXG4gICAgICBib3R0b206IHJlY3QuYm90dG9tLFxuICAgICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0Rmlyc3RSZWN0JDEgPSBybmcgPT4ge1xuICAgICAgY29uc3QgcmVjdHMgPSBybmcuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgICAgIGNvbnN0IHJlY3QgPSByZWN0cy5sZW5ndGggPiAwID8gcmVjdHNbMF0gOiBybmcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICByZXR1cm4gcmVjdC53aWR0aCA+IDAgfHwgcmVjdC5oZWlnaHQgPiAwID8gT3B0aW9uYWwuc29tZShyZWN0KS5tYXAodG9SZWN0KSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEJvdW5kcyQyID0gcm5nID0+IHtcbiAgICAgIGNvbnN0IHJlY3QgPSBybmcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICByZXR1cm4gcmVjdC53aWR0aCA+IDAgfHwgcmVjdC5oZWlnaHQgPiAwID8gT3B0aW9uYWwuc29tZShyZWN0KS5tYXAodG9SZWN0KSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYWR0JDQgPSBBZHQuZ2VuZXJhdGUoW1xuICAgICAge1xuICAgICAgICBsdHI6IFtcbiAgICAgICAgICAnc3RhcnQnLFxuICAgICAgICAgICdzb2Zmc2V0JyxcbiAgICAgICAgICAnZmluaXNoJyxcbiAgICAgICAgICAnZm9mZnNldCdcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcnRsOiBbXG4gICAgICAgICAgJ3N0YXJ0JyxcbiAgICAgICAgICAnc29mZnNldCcsXG4gICAgICAgICAgJ2ZpbmlzaCcsXG4gICAgICAgICAgJ2ZvZmZzZXQnXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdKTtcbiAgICBjb25zdCBmcm9tUmFuZ2UgPSAod2luLCB0eXBlLCByYW5nZSkgPT4gdHlwZShTdWdhckVsZW1lbnQuZnJvbURvbShyYW5nZS5zdGFydENvbnRhaW5lciksIHJhbmdlLnN0YXJ0T2Zmc2V0LCBTdWdhckVsZW1lbnQuZnJvbURvbShyYW5nZS5lbmRDb250YWluZXIpLCByYW5nZS5lbmRPZmZzZXQpO1xuICAgIGNvbnN0IGdldFJhbmdlcyA9ICh3aW4sIHNlbGVjdGlvbikgPT4gc2VsZWN0aW9uLm1hdGNoKHtcbiAgICAgIGRvbVJhbmdlOiBybmcgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGx0cjogY29uc3RhbnQkMShybmcpLFxuICAgICAgICAgIHJ0bDogT3B0aW9uYWwubm9uZVxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHJlbGF0aXZlOiAoc3RhcnRTaXR1LCBmaW5pc2hTaXR1KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbHRyOiBjYWNoZWQoKCkgPT4gcmVsYXRpdmVUb05hdGl2ZSh3aW4sIHN0YXJ0U2l0dSwgZmluaXNoU2l0dSkpLFxuICAgICAgICAgIHJ0bDogY2FjaGVkKCgpID0+IE9wdGlvbmFsLnNvbWUocmVsYXRpdmVUb05hdGl2ZSh3aW4sIGZpbmlzaFNpdHUsIHN0YXJ0U2l0dSkpKVxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIGV4YWN0OiAoc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGx0cjogY2FjaGVkKCgpID0+IGV4YWN0VG9OYXRpdmUod2luLCBzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSksXG4gICAgICAgICAgcnRsOiBjYWNoZWQoKCkgPT4gT3B0aW9uYWwuc29tZShleGFjdFRvTmF0aXZlKHdpbiwgZmluaXNoLCBmb2Zmc2V0LCBzdGFydCwgc29mZnNldCkpKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGRvRGlhZ25vc2UgPSAod2luLCByYW5nZXMpID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IHJhbmdlcy5sdHIoKTtcbiAgICAgIGlmIChybmcuY29sbGFwc2VkKSB7XG4gICAgICAgIGNvbnN0IHJldmVyc2VkID0gcmFuZ2VzLnJ0bCgpLmZpbHRlcihyZXYgPT4gcmV2LmNvbGxhcHNlZCA9PT0gZmFsc2UpO1xuICAgICAgICByZXR1cm4gcmV2ZXJzZWQubWFwKHJldiA9PiBhZHQkNC5ydGwoU3VnYXJFbGVtZW50LmZyb21Eb20ocmV2LmVuZENvbnRhaW5lciksIHJldi5lbmRPZmZzZXQsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJldi5zdGFydENvbnRhaW5lciksIHJldi5zdGFydE9mZnNldCkpLmdldE9yVGh1bmsoKCkgPT4gZnJvbVJhbmdlKHdpbiwgYWR0JDQubHRyLCBybmcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmcm9tUmFuZ2Uod2luLCBhZHQkNC5sdHIsIHJuZyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBkaWFnbm9zZSA9ICh3aW4sIHNlbGVjdGlvbikgPT4ge1xuICAgICAgY29uc3QgcmFuZ2VzID0gZ2V0UmFuZ2VzKHdpbiwgc2VsZWN0aW9uKTtcbiAgICAgIHJldHVybiBkb0RpYWdub3NlKHdpbiwgcmFuZ2VzKTtcbiAgICB9O1xuICAgIGNvbnN0IGFzTHRyUmFuZ2UgPSAod2luLCBzZWxlY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IGRpYWdub3NpcyA9IGRpYWdub3NlKHdpbiwgc2VsZWN0aW9uKTtcbiAgICAgIHJldHVybiBkaWFnbm9zaXMubWF0Y2goe1xuICAgICAgICBsdHI6IChzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSA9PiB7XG4gICAgICAgICAgY29uc3Qgcm5nID0gd2luLmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgICAgcm5nLnNldFN0YXJ0KHN0YXJ0LmRvbSwgc29mZnNldCk7XG4gICAgICAgICAgcm5nLnNldEVuZChmaW5pc2guZG9tLCBmb2Zmc2V0KTtcbiAgICAgICAgICByZXR1cm4gcm5nO1xuICAgICAgICB9LFxuICAgICAgICBydGw6IChzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSA9PiB7XG4gICAgICAgICAgY29uc3Qgcm5nID0gd2luLmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgICAgcm5nLnNldFN0YXJ0KGZpbmlzaC5kb20sIGZvZmZzZXQpO1xuICAgICAgICAgIHJuZy5zZXRFbmQoc3RhcnQuZG9tLCBzb2Zmc2V0KTtcbiAgICAgICAgICByZXR1cm4gcm5nO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGFkdCQ0Lmx0cjtcbiAgICBhZHQkNC5ydGw7XG5cbiAgICBjb25zdCBhbmNlc3RvcnMgPSAoc2NvcGUsIHByZWRpY2F0ZSwgaXNSb290KSA9PiBmaWx0ZXIkMihwYXJlbnRzKHNjb3BlLCBpc1Jvb3QpLCBwcmVkaWNhdGUpO1xuXG4gICAgY29uc3QgZGVzY2VuZGFudHMgPSAoc2NvcGUsIHNlbGVjdG9yKSA9PiBhbGwkMyhzZWxlY3Rvciwgc2NvcGUpO1xuXG4gICAgY29uc3QgbWFrZVJhbmdlID0gKHN0YXJ0LCBzb2Zmc2V0LCBmaW5pc2gsIGZvZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IG93bmVyJDQoc3RhcnQpO1xuICAgICAgY29uc3Qgcm5nID0gZG9jLmRvbS5jcmVhdGVSYW5nZSgpO1xuICAgICAgcm5nLnNldFN0YXJ0KHN0YXJ0LmRvbSwgc29mZnNldCk7XG4gICAgICBybmcuc2V0RW5kKGZpbmlzaC5kb20sIGZvZmZzZXQpO1xuICAgICAgcmV0dXJuIHJuZztcbiAgICB9O1xuICAgIGNvbnN0IGFmdGVyID0gKHN0YXJ0LCBzb2Zmc2V0LCBmaW5pc2gsIGZvZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBtYWtlUmFuZ2Uoc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCk7XG4gICAgICBjb25zdCBzYW1lID0gZXEoc3RhcnQsIGZpbmlzaCkgJiYgc29mZnNldCA9PT0gZm9mZnNldDtcbiAgICAgIHJldHVybiByLmNvbGxhcHNlZCAmJiAhc2FtZTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0TmF0aXZlU2VsZWN0aW9uID0gd2luID0+IE9wdGlvbmFsLmZyb20od2luLmdldFNlbGVjdGlvbigpKTtcbiAgICBjb25zdCByZWFkUmFuZ2UgPSBzZWxlY3Rpb24gPT4ge1xuICAgICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xuICAgICAgICBjb25zdCBmaXJzdFJuZyA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuICAgICAgICBjb25zdCBsYXN0Um5nID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoc2VsZWN0aW9uLnJhbmdlQ291bnQgLSAxKTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoU2ltUmFuZ2UuY3JlYXRlKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGZpcnN0Um5nLnN0YXJ0Q29udGFpbmVyKSwgZmlyc3RSbmcuc3RhcnRPZmZzZXQsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKGxhc3RSbmcuZW5kQ29udGFpbmVyKSwgbGFzdFJuZy5lbmRPZmZzZXQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBkb0dldEV4YWN0ID0gc2VsZWN0aW9uID0+IHtcbiAgICAgIGlmIChzZWxlY3Rpb24uYW5jaG9yTm9kZSA9PT0gbnVsbCB8fCBzZWxlY3Rpb24uZm9jdXNOb2RlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZWFkUmFuZ2Uoc2VsZWN0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGFuY2hvciA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHNlbGVjdGlvbi5hbmNob3JOb2RlKTtcbiAgICAgICAgY29uc3QgZm9jdXMgPSBTdWdhckVsZW1lbnQuZnJvbURvbShzZWxlY3Rpb24uZm9jdXNOb2RlKTtcbiAgICAgICAgcmV0dXJuIGFmdGVyKGFuY2hvciwgc2VsZWN0aW9uLmFuY2hvck9mZnNldCwgZm9jdXMsIHNlbGVjdGlvbi5mb2N1c09mZnNldCkgPyBPcHRpb25hbC5zb21lKFNpbVJhbmdlLmNyZWF0ZShhbmNob3IsIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsIGZvY3VzLCBzZWxlY3Rpb24uZm9jdXNPZmZzZXQpKSA6IHJlYWRSYW5nZShzZWxlY3Rpb24pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ2V0RXhhY3QgPSB3aW4gPT4gZ2V0TmF0aXZlU2VsZWN0aW9uKHdpbikuZmlsdGVyKHNlbCA9PiBzZWwucmFuZ2VDb3VudCA+IDApLmJpbmQoZG9HZXRFeGFjdCk7XG4gICAgY29uc3QgZ2V0Rmlyc3RSZWN0ID0gKHdpbiwgc2VsZWN0aW9uKSA9PiB7XG4gICAgICBjb25zdCBybmcgPSBhc0x0clJhbmdlKHdpbiwgc2VsZWN0aW9uKTtcbiAgICAgIHJldHVybiBnZXRGaXJzdFJlY3QkMShybmcpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Qm91bmRzJDEgPSAod2luLCBzZWxlY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGFzTHRyUmFuZ2Uod2luLCBzZWxlY3Rpb24pO1xuICAgICAgcmV0dXJuIGdldEJvdW5kcyQyKHJuZyk7XG4gICAgfTtcblxuICAgIGNvbnN0IE5vZGVWYWx1ZSA9IChpcywgbmFtZSkgPT4ge1xuICAgICAgY29uc3QgZ2V0ID0gZWxlbWVudCA9PiB7XG4gICAgICAgIGlmICghaXMoZWxlbWVudCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBvbmx5IGdldCAnICsgbmFtZSArICcgdmFsdWUgb2YgYSAnICsgbmFtZSArICcgbm9kZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXRPcHRpb24oZWxlbWVudCkuZ2V0T3IoJycpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldE9wdGlvbiA9IGVsZW1lbnQgPT4gaXMoZWxlbWVudCkgPyBPcHRpb25hbC5mcm9tKGVsZW1lbnQuZG9tLm5vZGVWYWx1ZSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICBjb25zdCBzZXQgPSAoZWxlbWVudCwgdmFsdWUpID0+IHtcbiAgICAgICAgaWYgKCFpcyhlbGVtZW50KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG9ubHkgc2V0IHJhdyAnICsgbmFtZSArICcgdmFsdWUgb2YgYSAnICsgbmFtZSArICcgbm9kZScpO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnQuZG9tLm5vZGVWYWx1ZSA9IHZhbHVlO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdldCxcbiAgICAgICAgZ2V0T3B0aW9uLFxuICAgICAgICBzZXRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGFwaSA9IE5vZGVWYWx1ZShpc1RleHQsICd0ZXh0Jyk7XG4gICAgY29uc3QgZ2V0JDQgPSBlbGVtZW50ID0+IGFwaS5nZXQoZWxlbWVudCk7XG5cbiAgICBjb25zdCBwb2ludCA9IChlbGVtZW50LCBvZmZzZXQpID0+ICh7XG4gICAgICBlbGVtZW50LFxuICAgICAgb2Zmc2V0XG4gICAgfSk7XG4gICAgY29uc3QgZGVzY2VuZE9uY2UkMSA9IChlbGVtZW50LCBvZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkcmVuJDEgPSBjaGlsZHJlbihlbGVtZW50KTtcbiAgICAgIGlmIChjaGlsZHJlbiQxLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcG9pbnQoZWxlbWVudCwgb2Zmc2V0KTtcbiAgICAgIH0gZWxzZSBpZiAob2Zmc2V0IDwgY2hpbGRyZW4kMS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHBvaW50KGNoaWxkcmVuJDFbb2Zmc2V0XSwgMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsYXN0ID0gY2hpbGRyZW4kMVtjaGlsZHJlbiQxLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBsZW4gPSBpc1RleHQobGFzdCkgPyBnZXQkNChsYXN0KS5sZW5ndGggOiBjaGlsZHJlbihsYXN0KS5sZW5ndGg7XG4gICAgICAgIHJldHVybiBwb2ludChsYXN0LCBsZW4pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBkZXNjZW5kT25jZSA9IChlbGVtZW50LCBvZmZzZXQpID0+IGlzVGV4dChlbGVtZW50KSA/IHBvaW50KGVsZW1lbnQsIG9mZnNldCkgOiBkZXNjZW5kT25jZSQxKGVsZW1lbnQsIG9mZnNldCk7XG4gICAgY29uc3QgaXNTaW1SYW5nZSA9IGRldGFpbCA9PiBkZXRhaWwuZm9mZnNldCAhPT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGdldEFuY2hvclNlbGVjdGlvbiA9ICh3aW4sIGFuY2hvckluZm8pID0+IHtcbiAgICAgIGNvbnN0IGdldFNlbGVjdGlvbiA9IGFuY2hvckluZm8uZ2V0U2VsZWN0aW9uLmdldE9yVGh1bmsoKCkgPT4gKCkgPT4gZ2V0RXhhY3Qod2luKSk7XG4gICAgICByZXR1cm4gZ2V0U2VsZWN0aW9uKCkubWFwKHNlbCA9PiB7XG4gICAgICAgIGlmIChpc1NpbVJhbmdlKHNlbCkpIHtcbiAgICAgICAgICBjb25zdCBtb2RTdGFydCA9IGRlc2NlbmRPbmNlKHNlbC5zdGFydCwgc2VsLnNvZmZzZXQpO1xuICAgICAgICAgIGNvbnN0IG1vZEZpbmlzaCA9IGRlc2NlbmRPbmNlKHNlbC5maW5pc2gsIHNlbC5mb2Zmc2V0KTtcbiAgICAgICAgICByZXR1cm4gU2ltU2VsZWN0aW9uLnJhbmdlKG1vZFN0YXJ0LmVsZW1lbnQsIG1vZFN0YXJ0Lm9mZnNldCwgbW9kRmluaXNoLmVsZW1lbnQsIG1vZEZpbmlzaC5vZmZzZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBzZWw7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcGxhY2VtZW50JDEgPSAoY29tcG9uZW50LCBhbmNob3JJbmZvLCBvcmlnaW4pID0+IHtcbiAgICAgIGNvbnN0IHdpbiA9IGRlZmF1bHRWaWV3KGFuY2hvckluZm8ucm9vdCkuZG9tO1xuICAgICAgY29uc3Qgcm9vdFBvaW50ID0gZ2V0Um9vdFBvaW50KGNvbXBvbmVudCwgb3JpZ2luLCBhbmNob3JJbmZvKTtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbkJveCA9IGdldEFuY2hvclNlbGVjdGlvbih3aW4sIGFuY2hvckluZm8pLmJpbmQoc2VsID0+IHtcbiAgICAgICAgaWYgKGlzU2ltUmFuZ2Uoc2VsKSkge1xuICAgICAgICAgIGNvbnN0IG9wdFJlY3QgPSBnZXRCb3VuZHMkMSh3aW4sIFNpbVNlbGVjdGlvbi5leGFjdEZyb21SYW5nZShzZWwpKS5vclRodW5rKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHplcm9XaWR0aCQxID0gU3VnYXJFbGVtZW50LmZyb21UZXh0KHplcm9XaWR0aCk7XG4gICAgICAgICAgICBiZWZvcmUkMShzZWwuc3RhcnQsIHplcm9XaWR0aCQxKTtcbiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSBnZXRGaXJzdFJlY3Qod2luLCBTaW1TZWxlY3Rpb24uZXhhY3QoemVyb1dpZHRoJDEsIDAsIHplcm9XaWR0aCQxLCAxKSk7XG4gICAgICAgICAgICByZW1vdmUkNSh6ZXJvV2lkdGgkMSk7XG4gICAgICAgICAgICByZXR1cm4gcmVjdDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gb3B0UmVjdC5iaW5kKHJhd1JlY3QgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGdldEJveChyYXdSZWN0LmxlZnQsIHJhd1JlY3QudG9wLCByYXdSZWN0LndpZHRoLCByYXdSZWN0LmhlaWdodCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0aW9uUmVjdCA9IG1hcCQxKHNlbCwgY2VsbCA9PiBjZWxsLmRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gICAgICAgICAgY29uc3QgYm91bmRzID0ge1xuICAgICAgICAgICAgbGVmdDogTWF0aC5taW4oc2VsZWN0aW9uUmVjdC5maXJzdENlbGwubGVmdCwgc2VsZWN0aW9uUmVjdC5sYXN0Q2VsbC5sZWZ0KSxcbiAgICAgICAgICAgIHJpZ2h0OiBNYXRoLm1heChzZWxlY3Rpb25SZWN0LmZpcnN0Q2VsbC5yaWdodCwgc2VsZWN0aW9uUmVjdC5sYXN0Q2VsbC5yaWdodCksXG4gICAgICAgICAgICB0b3A6IE1hdGgubWluKHNlbGVjdGlvblJlY3QuZmlyc3RDZWxsLnRvcCwgc2VsZWN0aW9uUmVjdC5sYXN0Q2VsbC50b3ApLFxuICAgICAgICAgICAgYm90dG9tOiBNYXRoLm1heChzZWxlY3Rpb25SZWN0LmZpcnN0Q2VsbC5ib3R0b20sIHNlbGVjdGlvblJlY3QubGFzdENlbGwuYm90dG9tKVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGdldEJveChib3VuZHMubGVmdCwgYm91bmRzLnRvcCwgYm91bmRzLnJpZ2h0IC0gYm91bmRzLmxlZnQsIGJvdW5kcy5ib3R0b20gLSBib3VuZHMudG9wKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gZ2V0QW5jaG9yU2VsZWN0aW9uKHdpbiwgYW5jaG9ySW5mbykuYmluZChzZWwgPT4ge1xuICAgICAgICBpZiAoaXNTaW1SYW5nZShzZWwpKSB7XG4gICAgICAgICAgcmV0dXJuIGlzRWxlbWVudCQxKHNlbC5zdGFydCkgPyBPcHRpb25hbC5zb21lKHNlbC5zdGFydCkgOiBwYXJlbnRFbGVtZW50KHNlbC5zdGFydCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoc2VsLmZpcnN0Q2VsbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgZWxlbSA9IHRhcmdldEVsZW1lbnQuZ2V0T3IoY29tcG9uZW50LmVsZW1lbnQpO1xuICAgICAgcmV0dXJuIGNhbGNOZXdBbmNob3Ioc2VsZWN0aW9uQm94LCByb290UG9pbnQsIGFuY2hvckluZm8sIG9yaWdpbiwgZWxlbSk7XG4gICAgfTtcbiAgICB2YXIgU2VsZWN0aW9uQW5jaG9yID0gW1xuICAgICAgb3B0aW9uJDMoJ2dldFNlbGVjdGlvbicpLFxuICAgICAgcmVxdWlyZWQkMSgncm9vdCcpLFxuICAgICAgb3B0aW9uJDMoJ2J1YmJsZScpLFxuICAgICAgc2NoZW1hJHkoKSxcbiAgICAgIGRlZmF1bHRlZCgnb3ZlcnJpZGVzJywge30pLFxuICAgICAgZGVmYXVsdGVkKCdzaG93QWJvdmUnLCBmYWxzZSksXG4gICAgICBvdXRwdXQkMSgncGxhY2VtZW50JywgcGxhY2VtZW50JDEpXG4gICAgXTtcblxuICAgIGNvbnN0IGxhYmVsUHJlZml4JDEgPSAnbGluay1sYXlvdXQnO1xuICAgIGNvbnN0IGVhc3RYID0gYW5jaG9yID0+IGFuY2hvci54ICsgYW5jaG9yLndpZHRoO1xuICAgIGNvbnN0IHdlc3RYID0gKGFuY2hvciwgZWxlbWVudCkgPT4gYW5jaG9yLnggLSBlbGVtZW50LndpZHRoO1xuICAgIGNvbnN0IG5vcnRoWSQxID0gKGFuY2hvciwgZWxlbWVudCkgPT4gYW5jaG9yLnkgLSBlbGVtZW50LmhlaWdodCArIGFuY2hvci5oZWlnaHQ7XG4gICAgY29uc3Qgc291dGhZJDEgPSBhbmNob3IgPT4gYW5jaG9yLnk7XG4gICAgY29uc3Qgc291dGhlYXN0JDEgPSAoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzKSA9PiBudSQ2KGVhc3RYKGFuY2hvciksIHNvdXRoWSQxKGFuY2hvciksIGJ1YmJsZXMuc291dGhlYXN0KCksIHNvdXRoZWFzdCQzKCksICdzb3V0aGVhc3QnLCBib3VuZHNSZXN0cmljdGlvbihhbmNob3IsIHtcbiAgICAgIGxlZnQ6IDAsXG4gICAgICB0b3A6IDJcbiAgICB9KSwgbGFiZWxQcmVmaXgkMSk7XG4gICAgY29uc3Qgc291dGh3ZXN0JDEgPSAoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzKSA9PiBudSQ2KHdlc3RYKGFuY2hvciwgZWxlbWVudCksIHNvdXRoWSQxKGFuY2hvciksIGJ1YmJsZXMuc291dGh3ZXN0KCksIHNvdXRod2VzdCQzKCksICdzb3V0aHdlc3QnLCBib3VuZHNSZXN0cmljdGlvbihhbmNob3IsIHtcbiAgICAgIHJpZ2h0OiAxLFxuICAgICAgdG9wOiAyXG4gICAgfSksIGxhYmVsUHJlZml4JDEpO1xuICAgIGNvbnN0IG5vcnRoZWFzdCQxID0gKGFuY2hvciwgZWxlbWVudCwgYnViYmxlcykgPT4gbnUkNihlYXN0WChhbmNob3IpLCBub3J0aFkkMShhbmNob3IsIGVsZW1lbnQpLCBidWJibGVzLm5vcnRoZWFzdCgpLCBub3J0aGVhc3QkMygpLCAnbm9ydGhlYXN0JywgYm91bmRzUmVzdHJpY3Rpb24oYW5jaG9yLCB7XG4gICAgICBsZWZ0OiAwLFxuICAgICAgYm90dG9tOiAzXG4gICAgfSksIGxhYmVsUHJlZml4JDEpO1xuICAgIGNvbnN0IG5vcnRod2VzdCQxID0gKGFuY2hvciwgZWxlbWVudCwgYnViYmxlcykgPT4gbnUkNih3ZXN0WChhbmNob3IsIGVsZW1lbnQpLCBub3J0aFkkMShhbmNob3IsIGVsZW1lbnQpLCBidWJibGVzLm5vcnRod2VzdCgpLCBub3J0aHdlc3QkMygpLCAnbm9ydGh3ZXN0JywgYm91bmRzUmVzdHJpY3Rpb24oYW5jaG9yLCB7XG4gICAgICByaWdodDogMSxcbiAgICAgIGJvdHRvbTogM1xuICAgIH0pLCBsYWJlbFByZWZpeCQxKTtcbiAgICBjb25zdCBhbGwgPSAoKSA9PiBbXG4gICAgICBzb3V0aGVhc3QkMSxcbiAgICAgIHNvdXRod2VzdCQxLFxuICAgICAgbm9ydGhlYXN0JDEsXG4gICAgICBub3J0aHdlc3QkMVxuICAgIF07XG4gICAgY29uc3QgYWxsUnRsID0gKCkgPT4gW1xuICAgICAgc291dGh3ZXN0JDEsXG4gICAgICBzb3V0aGVhc3QkMSxcbiAgICAgIG5vcnRod2VzdCQxLFxuICAgICAgbm9ydGhlYXN0JDFcbiAgICBdO1xuXG4gICAgY29uc3QgcGxhY2VtZW50ID0gKGNvbXBvbmVudCwgc3VibWVudUluZm8sIG9yaWdpbikgPT4ge1xuICAgICAgY29uc3QgYW5jaG9yQm94ID0gdG9Cb3gob3JpZ2luLCBzdWJtZW51SW5mby5pdGVtLmVsZW1lbnQpO1xuICAgICAgY29uc3QgbGF5b3V0cyA9IGdldCQ1KGNvbXBvbmVudC5lbGVtZW50LCBzdWJtZW51SW5mbywgYWxsKCksIGFsbFJ0bCgpLCBhbGwoKSwgYWxsUnRsKCksIE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShudSQ0KHtcbiAgICAgICAgYW5jaG9yQm94LFxuICAgICAgICBidWJibGU6IGZhbGxiYWNrKCksXG4gICAgICAgIG92ZXJyaWRlczogc3VibWVudUluZm8ub3ZlcnJpZGVzLFxuICAgICAgICBsYXlvdXRzXG4gICAgICB9KSk7XG4gICAgfTtcbiAgICB2YXIgU3VibWVudUFuY2hvciA9IFtcbiAgICAgIHJlcXVpcmVkJDEoJ2l0ZW0nKSxcbiAgICAgIHNjaGVtYSR5KCksXG4gICAgICBkZWZhdWx0ZWQoJ292ZXJyaWRlcycsIHt9KSxcbiAgICAgIG91dHB1dCQxKCdwbGFjZW1lbnQnLCBwbGFjZW1lbnQpXG4gICAgXTtcblxuICAgIHZhciBBbmNob3JTY2hlbWEgPSBjaG9vc2UkMSgndHlwZScsIHtcbiAgICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uQW5jaG9yLFxuICAgICAgbm9kZTogTm9kZUFuY2hvcixcbiAgICAgIGhvdHNwb3Q6IEhvdHNwb3RBbmNob3IsXG4gICAgICBzdWJtZW51OiBTdWJtZW51QW5jaG9yLFxuICAgICAgbWFrZXNoaWZ0OiBNYWtlc2hpZnRBbmNob3JcbiAgICB9KTtcblxuICAgIGNvbnN0IFRyYW5zaXRpb25TY2hlbWEgPSBbXG4gICAgICByZXF1aXJlZEFycmF5T2YoJ2NsYXNzZXMnLCBzdHJpbmcpLFxuICAgICAgZGVmYXVsdGVkU3RyaW5nRW51bSgnbW9kZScsICdhbGwnLCBbXG4gICAgICAgICdhbGwnLFxuICAgICAgICAnbGF5b3V0JyxcbiAgICAgICAgJ3BsYWNlbWVudCdcbiAgICAgIF0pXG4gICAgXTtcbiAgICBjb25zdCBQb3NpdGlvblNjaGVtYSA9IFtcbiAgICAgIGRlZmF1bHRlZCgndXNlRml4ZWQnLCBuZXZlciksXG4gICAgICBvcHRpb24kMygnZ2V0Qm91bmRzJylcbiAgICBdO1xuICAgIGNvbnN0IFBsYWNlbWVudFNjaGVtYSA9IFtcbiAgICAgIHJlcXVpcmVkT2YoJ2FuY2hvcicsIEFuY2hvclNjaGVtYSksXG4gICAgICBvcHRpb25PYmpPZigndHJhbnNpdGlvbicsIFRyYW5zaXRpb25TY2hlbWEpXG4gICAgXTtcblxuICAgIGNvbnN0IGdldEZpeGVkT3JpZ2luID0gKCkgPT4ge1xuICAgICAgY29uc3QgaHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgIHJldHVybiBmaXhlZCQxKDAsIDAsIGh0bWwuY2xpZW50V2lkdGgsIGh0bWwuY2xpZW50SGVpZ2h0KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFJlbGF0aXZlT3JpZ2luID0gY29tcG9uZW50ID0+IHtcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gYWJzb2x1dGUkMyhjb21wb25lbnQuZWxlbWVudCk7XG4gICAgICBjb25zdCBib3VuZHMgPSBjb21wb25lbnQuZWxlbWVudC5kb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICByZXR1cm4gcmVsYXRpdmUkMShwb3NpdGlvbi5sZWZ0LCBwb3NpdGlvbi50b3AsIGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfTtcbiAgICBjb25zdCBwbGFjZSA9IChvcmlnaW4sIGFuY2hvcmluZywgb3B0Qm91bmRzLCBwbGFjZWUsIGxhc3RQbGFjZSwgdHJhbnNpdGlvbikgPT4ge1xuICAgICAgY29uc3QgYW5jaG9yID0gYm94KGFuY2hvcmluZy5hbmNob3JCb3gsIG9yaWdpbik7XG4gICAgICByZXR1cm4gc2ltcGxlKGFuY2hvciwgcGxhY2VlLmVsZW1lbnQsIGFuY2hvcmluZy5idWJibGUsIGFuY2hvcmluZy5sYXlvdXRzLCBsYXN0UGxhY2UsIG9wdEJvdW5kcywgYW5jaG9yaW5nLm92ZXJyaWRlcywgdHJhbnNpdGlvbik7XG4gICAgfTtcbiAgICBjb25zdCBwb3NpdGlvbiQxID0gKGNvbXBvbmVudCwgcG9zQ29uZmlnLCBwb3NTdGF0ZSwgcGxhY2VlLCBwbGFjZW1lbnRTcGVjKSA9PiB7XG4gICAgICBjb25zdCBvcHRXaXRoaW5Cb3VuZHMgPSBPcHRpb25hbC5ub25lKCk7XG4gICAgICBwb3NpdGlvbldpdGhpbkJvdW5kcyhjb21wb25lbnQsIHBvc0NvbmZpZywgcG9zU3RhdGUsIHBsYWNlZSwgcGxhY2VtZW50U3BlYywgb3B0V2l0aGluQm91bmRzKTtcbiAgICB9O1xuICAgIGNvbnN0IHBvc2l0aW9uV2l0aGluQm91bmRzID0gKGNvbXBvbmVudCwgcG9zQ29uZmlnLCBwb3NTdGF0ZSwgcGxhY2VlLCBwbGFjZW1lbnRTcGVjLCBvcHRXaXRoaW5Cb3VuZHMpID0+IHtcbiAgICAgIGNvbnN0IHBsYWNlZURldGFpbCA9IGFzUmF3T3JEaWUkMSgncGxhY2VtZW50LmluZm8nLCBvYmpPZihQbGFjZW1lbnRTY2hlbWEpLCBwbGFjZW1lbnRTcGVjKTtcbiAgICAgIGNvbnN0IGFuY2hvcmFnZSA9IHBsYWNlZURldGFpbC5hbmNob3I7XG4gICAgICBjb25zdCBlbGVtZW50ID0gcGxhY2VlLmVsZW1lbnQ7XG4gICAgICBjb25zdCBwbGFjZWVTdGF0ZSA9IHBvc1N0YXRlLmdldChwbGFjZWUudWlkKTtcbiAgICAgIHByZXNlcnZlJDEoKCkgPT4ge1xuICAgICAgICBzZXQkOChlbGVtZW50LCAncG9zaXRpb24nLCAnZml4ZWQnKTtcbiAgICAgICAgY29uc3Qgb2xkVmlzaWJpbGl0eSA9IGdldFJhdyhlbGVtZW50LCAndmlzaWJpbGl0eScpO1xuICAgICAgICBzZXQkOChlbGVtZW50LCAndmlzaWJpbGl0eScsICdoaWRkZW4nKTtcbiAgICAgICAgY29uc3Qgb3JpZ2luID0gcG9zQ29uZmlnLnVzZUZpeGVkKCkgPyBnZXRGaXhlZE9yaWdpbigpIDogZ2V0UmVsYXRpdmVPcmlnaW4oY29tcG9uZW50KTtcbiAgICAgICAgYW5jaG9yYWdlLnBsYWNlbWVudChjb21wb25lbnQsIGFuY2hvcmFnZSwgb3JpZ2luKS5lYWNoKGFuY2hvcmluZyA9PiB7XG4gICAgICAgICAgY29uc3Qgb3B0Qm91bmRzID0gb3B0V2l0aGluQm91bmRzLm9yVGh1bmsoKCkgPT4gcG9zQ29uZmlnLmdldEJvdW5kcy5tYXAoYXBwbHkkMSkpO1xuICAgICAgICAgIGNvbnN0IG5ld1N0YXRlID0gcGxhY2Uob3JpZ2luLCBhbmNob3JpbmcsIG9wdEJvdW5kcywgcGxhY2VlLCBwbGFjZWVTdGF0ZSwgcGxhY2VlRGV0YWlsLnRyYW5zaXRpb24pO1xuICAgICAgICAgIHBvc1N0YXRlLnNldChwbGFjZWUudWlkLCBuZXdTdGF0ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBvbGRWaXNpYmlsaXR5LmZvbGQoKCkgPT4ge1xuICAgICAgICAgIHJlbW92ZSQ2KGVsZW1lbnQsICd2aXNpYmlsaXR5Jyk7XG4gICAgICAgIH0sIHZpcyA9PiB7XG4gICAgICAgICAgc2V0JDgoZWxlbWVudCwgJ3Zpc2liaWxpdHknLCB2aXMpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGdldFJhdyhlbGVtZW50LCAnbGVmdCcpLmlzTm9uZSgpICYmIGdldFJhdyhlbGVtZW50LCAndG9wJykuaXNOb25lKCkgJiYgZ2V0UmF3KGVsZW1lbnQsICdyaWdodCcpLmlzTm9uZSgpICYmIGdldFJhdyhlbGVtZW50LCAnYm90dG9tJykuaXNOb25lKCkgJiYgaXMkMShnZXRSYXcoZWxlbWVudCwgJ3Bvc2l0aW9uJyksICdmaXhlZCcpKSB7XG4gICAgICAgICAgcmVtb3ZlJDYoZWxlbWVudCwgJ3Bvc2l0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgIH0sIGVsZW1lbnQpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0TW9kZSA9IChjb21wb25lbnQsIHBDb25maWcsIF9wU3RhdGUpID0+IHBDb25maWcudXNlRml4ZWQoKSA/ICdmaXhlZCcgOiAnYWJzb2x1dGUnO1xuICAgIGNvbnN0IHJlc2V0JDEgPSAoY29tcG9uZW50LCBwQ29uZmlnLCBwb3NTdGF0ZSwgcGxhY2VlKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gcGxhY2VlLmVsZW1lbnQ7XG4gICAgICBlYWNoJDEoW1xuICAgICAgICAncG9zaXRpb24nLFxuICAgICAgICAnbGVmdCcsXG4gICAgICAgICdyaWdodCcsXG4gICAgICAgICd0b3AnLFxuICAgICAgICAnYm90dG9tJ1xuICAgICAgXSwgcHJvcCA9PiByZW1vdmUkNihlbGVtZW50LCBwcm9wKSk7XG4gICAgICByZXNldCQyKGVsZW1lbnQpO1xuICAgICAgcG9zU3RhdGUuY2xlYXIocGxhY2VlLnVpZCk7XG4gICAgfTtcblxuICAgIHZhciBQb3NpdGlvbkFwaXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uJDEsXG4gICAgICAgIHBvc2l0aW9uV2l0aGluQm91bmRzOiBwb3NpdGlvbldpdGhpbkJvdW5kcyxcbiAgICAgICAgZ2V0TW9kZTogZ2V0TW9kZSxcbiAgICAgICAgcmVzZXQ6IHJlc2V0JDFcbiAgICB9KTtcblxuICAgIGNvbnN0IGluaXQkZyA9ICgpID0+IHtcbiAgICAgIGxldCBzdGF0ZSA9IHt9O1xuICAgICAgY29uc3Qgc2V0ID0gKGlkLCBkYXRhKSA9PiB7XG4gICAgICAgIHN0YXRlW2lkXSA9IGRhdGE7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0ID0gaWQgPT4gZ2V0JGcoc3RhdGUsIGlkKTtcbiAgICAgIGNvbnN0IGNsZWFyID0gaWQgPT4ge1xuICAgICAgICBpZiAoaXNOb25OdWxsYWJsZShpZCkpIHtcbiAgICAgICAgICBkZWxldGUgc3RhdGVbaWRdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlID0ge307XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gbnUkOCh7XG4gICAgICAgIHJlYWRTdGF0ZTogKCkgPT4gc3RhdGUsXG4gICAgICAgIGNsZWFyLFxuICAgICAgICBzZXQsXG4gICAgICAgIGdldFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHZhciBQb3NpdGlvbmluZ1N0YXRlID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIGluaXQ6IGluaXQkZ1xuICAgIH0pO1xuXG4gICAgY29uc3QgUG9zaXRpb25pbmcgPSBjcmVhdGUkNCh7XG4gICAgICBmaWVsZHM6IFBvc2l0aW9uU2NoZW1hLFxuICAgICAgbmFtZTogJ3Bvc2l0aW9uaW5nJyxcbiAgICAgIGFjdGl2ZTogQWN0aXZlUG9zaXRpb24sXG4gICAgICBhcGlzOiBQb3NpdGlvbkFwaXMsXG4gICAgICBzdGF0ZTogUG9zaXRpb25pbmdTdGF0ZVxuICAgIH0pO1xuXG4gICAgY29uc3QgaXNDb25uZWN0ZWQgPSBjb21wID0+IGNvbXAuZ2V0U3lzdGVtKCkuaXNDb25uZWN0ZWQoKTtcbiAgICBjb25zdCBmaXJlRGV0YWNoaW5nID0gY29tcG9uZW50ID0+IHtcbiAgICAgIGVtaXQoY29tcG9uZW50LCBkZXRhY2hlZEZyb21Eb20oKSk7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGNvbXBvbmVudC5jb21wb25lbnRzKCk7XG4gICAgICBlYWNoJDEoY2hpbGRyZW4sIGZpcmVEZXRhY2hpbmcpO1xuICAgIH07XG4gICAgY29uc3QgZmlyZUF0dGFjaGluZyA9IGNvbXBvbmVudCA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGNvbXBvbmVudC5jb21wb25lbnRzKCk7XG4gICAgICBlYWNoJDEoY2hpbGRyZW4sIGZpcmVBdHRhY2hpbmcpO1xuICAgICAgZW1pdChjb21wb25lbnQsIGF0dGFjaGVkVG9Eb20oKSk7XG4gICAgfTtcbiAgICBjb25zdCB2aXJ0dWFsQXR0YWNoID0gKHBhcmVudCwgY2hpbGQpID0+IHtcbiAgICAgIHBhcmVudC5nZXRTeXN0ZW0oKS5hZGRUb1dvcmxkKGNoaWxkKTtcbiAgICAgIGlmIChpbkJvZHkocGFyZW50LmVsZW1lbnQpKSB7XG4gICAgICAgIGZpcmVBdHRhY2hpbmcoY2hpbGQpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdmlydHVhbERldGFjaCA9IGNvbXAgPT4ge1xuICAgICAgZmlyZURldGFjaGluZyhjb21wKTtcbiAgICAgIGNvbXAuZ2V0U3lzdGVtKCkucmVtb3ZlRnJvbVdvcmxkKGNvbXApO1xuICAgIH07XG4gICAgY29uc3QgYXR0YWNoJDEgPSAocGFyZW50LCBjaGlsZCkgPT4ge1xuICAgICAgYXBwZW5kJDIocGFyZW50LmVsZW1lbnQsIGNoaWxkLmVsZW1lbnQpO1xuICAgIH07XG4gICAgY29uc3QgZGV0YWNoQ2hpbGRyZW4kMSA9IGNvbXBvbmVudCA9PiB7XG4gICAgICBlYWNoJDEoY29tcG9uZW50LmNvbXBvbmVudHMoKSwgY2hpbGRDb21wID0+IHJlbW92ZSQ1KGNoaWxkQ29tcC5lbGVtZW50KSk7XG4gICAgICBlbXB0eShjb21wb25lbnQuZWxlbWVudCk7XG4gICAgICBjb21wb25lbnQuc3luY0NvbXBvbmVudHMoKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlcGxhY2VDaGlsZHJlbiA9IChjb21wb25lbnQsIG5ld1NwZWNzLCBidWlsZE5ld0NoaWxkcmVuKSA9PiB7XG4gICAgICBjb25zdCBzdWJzID0gY29tcG9uZW50LmNvbXBvbmVudHMoKTtcbiAgICAgIGRldGFjaENoaWxkcmVuJDEoY29tcG9uZW50KTtcbiAgICAgIGNvbnN0IG5ld0NoaWxkcmVuID0gYnVpbGROZXdDaGlsZHJlbihuZXdTcGVjcyk7XG4gICAgICBjb25zdCBkZWxldGVkID0gZGlmZmVyZW5jZShzdWJzLCBuZXdDaGlsZHJlbik7XG4gICAgICBlYWNoJDEoZGVsZXRlZCwgY29tcCA9PiB7XG4gICAgICAgIGZpcmVEZXRhY2hpbmcoY29tcCk7XG4gICAgICAgIGNvbXBvbmVudC5nZXRTeXN0ZW0oKS5yZW1vdmVGcm9tV29ybGQoY29tcCk7XG4gICAgICB9KTtcbiAgICAgIGVhY2gkMShuZXdDaGlsZHJlbiwgY2hpbGRDb21wID0+IHtcbiAgICAgICAgaWYgKCFpc0Nvbm5lY3RlZChjaGlsZENvbXApKSB7XG4gICAgICAgICAgY29tcG9uZW50LmdldFN5c3RlbSgpLmFkZFRvV29ybGQoY2hpbGRDb21wKTtcbiAgICAgICAgICBhdHRhY2gkMShjb21wb25lbnQsIGNoaWxkQ29tcCk7XG4gICAgICAgICAgaWYgKGluQm9keShjb21wb25lbnQuZWxlbWVudCkpIHtcbiAgICAgICAgICAgIGZpcmVBdHRhY2hpbmcoY2hpbGRDb21wKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXR0YWNoJDEoY29tcG9uZW50LCBjaGlsZENvbXApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbXBvbmVudC5zeW5jQ29tcG9uZW50cygpO1xuICAgIH07XG4gICAgY29uc3QgdmlydHVhbFJlcGxhY2VDaGlsZHJlbiA9IChjb21wb25lbnQsIG5ld1NwZWNzLCBidWlsZE5ld0NoaWxkcmVuKSA9PiB7XG4gICAgICBjb25zdCBzdWJzID0gY29tcG9uZW50LmNvbXBvbmVudHMoKTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nQ29tcHMgPSBiaW5kJDMobmV3U3BlY3MsIHNwZWMgPT4gZ2V0UHJlbWFkZShzcGVjKS50b0FycmF5KCkpO1xuICAgICAgZWFjaCQxKHN1YnMsIGNoaWxkQ29tcCA9PiB7XG4gICAgICAgIGlmICghY29udGFpbnMkMihleGlzdGluZ0NvbXBzLCBjaGlsZENvbXApKSB7XG4gICAgICAgICAgdmlydHVhbERldGFjaChjaGlsZENvbXApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5ld0NoaWxkcmVuID0gYnVpbGROZXdDaGlsZHJlbihuZXdTcGVjcyk7XG4gICAgICBjb25zdCBkZWxldGVkID0gZGlmZmVyZW5jZShzdWJzLCBuZXdDaGlsZHJlbik7XG4gICAgICBlYWNoJDEoZGVsZXRlZCwgZGVsZXRlZENvbXAgPT4ge1xuICAgICAgICBpZiAoaXNDb25uZWN0ZWQoZGVsZXRlZENvbXApKSB7XG4gICAgICAgICAgdmlydHVhbERldGFjaChkZWxldGVkQ29tcCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWFjaCQxKG5ld0NoaWxkcmVuLCBjaGlsZENvbXAgPT4ge1xuICAgICAgICBpZiAoIWlzQ29ubmVjdGVkKGNoaWxkQ29tcCkpIHtcbiAgICAgICAgICB2aXJ0dWFsQXR0YWNoKGNvbXBvbmVudCwgY2hpbGRDb21wKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb21wb25lbnQuc3luY0NvbXBvbmVudHMoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYXR0YWNoID0gKHBhcmVudCwgY2hpbGQpID0+IHtcbiAgICAgIGF0dGFjaFdpdGgocGFyZW50LCBjaGlsZCwgYXBwZW5kJDIpO1xuICAgIH07XG4gICAgY29uc3QgYXR0YWNoV2l0aCA9IChwYXJlbnQsIGNoaWxkLCBpbnNlcnRpb24pID0+IHtcbiAgICAgIHBhcmVudC5nZXRTeXN0ZW0oKS5hZGRUb1dvcmxkKGNoaWxkKTtcbiAgICAgIGluc2VydGlvbihwYXJlbnQuZWxlbWVudCwgY2hpbGQuZWxlbWVudCk7XG4gICAgICBpZiAoaW5Cb2R5KHBhcmVudC5lbGVtZW50KSkge1xuICAgICAgICBmaXJlQXR0YWNoaW5nKGNoaWxkKTtcbiAgICAgIH1cbiAgICAgIHBhcmVudC5zeW5jQ29tcG9uZW50cygpO1xuICAgIH07XG4gICAgY29uc3QgZG9EZXRhY2ggPSBjb21wb25lbnQgPT4ge1xuICAgICAgZmlyZURldGFjaGluZyhjb21wb25lbnQpO1xuICAgICAgcmVtb3ZlJDUoY29tcG9uZW50LmVsZW1lbnQpO1xuICAgICAgY29tcG9uZW50LmdldFN5c3RlbSgpLnJlbW92ZUZyb21Xb3JsZChjb21wb25lbnQpO1xuICAgIH07XG4gICAgY29uc3QgZGV0YWNoID0gY29tcG9uZW50ID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCQxID0gcGFyZW50KGNvbXBvbmVudC5lbGVtZW50KS5iaW5kKHAgPT4gY29tcG9uZW50LmdldFN5c3RlbSgpLmdldEJ5RG9tKHApLnRvT3B0aW9uYWwoKSk7XG4gICAgICBkb0RldGFjaChjb21wb25lbnQpO1xuICAgICAgcGFyZW50JDEuZWFjaChwID0+IHtcbiAgICAgICAgcC5zeW5jQ29tcG9uZW50cygpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBkZXRhY2hDaGlsZHJlbiA9IGNvbXBvbmVudCA9PiB7XG4gICAgICBjb25zdCBzdWJzID0gY29tcG9uZW50LmNvbXBvbmVudHMoKTtcbiAgICAgIGVhY2gkMShzdWJzLCBkb0RldGFjaCk7XG4gICAgICBlbXB0eShjb21wb25lbnQuZWxlbWVudCk7XG4gICAgICBjb21wb25lbnQuc3luY0NvbXBvbmVudHMoKTtcbiAgICB9O1xuICAgIGNvbnN0IGF0dGFjaFN5c3RlbSA9IChlbGVtZW50LCBndWlTeXN0ZW0pID0+IHtcbiAgICAgIGF0dGFjaFN5c3RlbVdpdGgoZWxlbWVudCwgZ3VpU3lzdGVtLCBhcHBlbmQkMik7XG4gICAgfTtcbiAgICBjb25zdCBhdHRhY2hTeXN0ZW1BZnRlciA9IChlbGVtZW50LCBndWlTeXN0ZW0pID0+IHtcbiAgICAgIGF0dGFjaFN5c3RlbVdpdGgoZWxlbWVudCwgZ3VpU3lzdGVtLCBhZnRlciQyKTtcbiAgICB9O1xuICAgIGNvbnN0IGF0dGFjaFN5c3RlbVdpdGggPSAoZWxlbWVudCwgZ3VpU3lzdGVtLCBpbnNlcnRlcikgPT4ge1xuICAgICAgaW5zZXJ0ZXIoZWxlbWVudCwgZ3VpU3lzdGVtLmVsZW1lbnQpO1xuICAgICAgY29uc3QgY2hpbGRyZW4kMSA9IGNoaWxkcmVuKGd1aVN5c3RlbS5lbGVtZW50KTtcbiAgICAgIGVhY2gkMShjaGlsZHJlbiQxLCBjaGlsZCA9PiB7XG4gICAgICAgIGd1aVN5c3RlbS5nZXRCeURvbShjaGlsZCkuZWFjaChmaXJlQXR0YWNoaW5nKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZGV0YWNoU3lzdGVtID0gZ3VpU3lzdGVtID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkcmVuJDEgPSBjaGlsZHJlbihndWlTeXN0ZW0uZWxlbWVudCk7XG4gICAgICBlYWNoJDEoY2hpbGRyZW4kMSwgY2hpbGQgPT4ge1xuICAgICAgICBndWlTeXN0ZW0uZ2V0QnlEb20oY2hpbGQpLmVhY2goZmlyZURldGFjaGluZyk7XG4gICAgICB9KTtcbiAgICAgIHJlbW92ZSQ1KGd1aVN5c3RlbS5lbGVtZW50KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVidWlsZCA9IChzYW5kYm94LCBzQ29uZmlnLCBzU3RhdGUsIGRhdGEpID0+IHtcbiAgICAgIHNTdGF0ZS5nZXQoKS5lYWNoKF9kYXRhID0+IHtcbiAgICAgICAgZGV0YWNoQ2hpbGRyZW4oc2FuZGJveCk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBvaW50ID0gc0NvbmZpZy5nZXRBdHRhY2hQb2ludChzYW5kYm94KTtcbiAgICAgIGF0dGFjaChwb2ludCwgc2FuZGJveCk7XG4gICAgICBjb25zdCBidWlsdCA9IHNhbmRib3guZ2V0U3lzdGVtKCkuYnVpbGQoZGF0YSk7XG4gICAgICBhdHRhY2goc2FuZGJveCwgYnVpbHQpO1xuICAgICAgc1N0YXRlLnNldChidWlsdCk7XG4gICAgICByZXR1cm4gYnVpbHQ7XG4gICAgfTtcbiAgICBjb25zdCBvcGVuJDEgPSAoc2FuZGJveCwgc0NvbmZpZywgc1N0YXRlLCBkYXRhKSA9PiB7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHJlYnVpbGQoc2FuZGJveCwgc0NvbmZpZywgc1N0YXRlLCBkYXRhKTtcbiAgICAgIHNDb25maWcub25PcGVuKHNhbmRib3gsIG5ld1N0YXRlKTtcbiAgICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgICB9O1xuICAgIGNvbnN0IHNldENvbnRlbnQgPSAoc2FuZGJveCwgc0NvbmZpZywgc1N0YXRlLCBkYXRhKSA9PiBzU3RhdGUuZ2V0KCkubWFwKCgpID0+IHJlYnVpbGQoc2FuZGJveCwgc0NvbmZpZywgc1N0YXRlLCBkYXRhKSk7XG4gICAgY29uc3Qgb3BlbldoaWxlQ2xvYWtlZCA9IChzYW5kYm94LCBzQ29uZmlnLCBzU3RhdGUsIGRhdGEsIHRyYW5zYWN0aW9uKSA9PiB7XG4gICAgICBjbG9hayhzYW5kYm94LCBzQ29uZmlnKTtcbiAgICAgIG9wZW4kMShzYW5kYm94LCBzQ29uZmlnLCBzU3RhdGUsIGRhdGEpO1xuICAgICAgdHJhbnNhY3Rpb24oKTtcbiAgICAgIGRlY2xvYWsoc2FuZGJveCwgc0NvbmZpZyk7XG4gICAgfTtcbiAgICBjb25zdCBjbG9zZSQxID0gKHNhbmRib3gsIHNDb25maWcsIHNTdGF0ZSkgPT4ge1xuICAgICAgc1N0YXRlLmdldCgpLmVhY2goZGF0YSA9PiB7XG4gICAgICAgIGRldGFjaENoaWxkcmVuKHNhbmRib3gpO1xuICAgICAgICBkZXRhY2goc2FuZGJveCk7XG4gICAgICAgIHNDb25maWcub25DbG9zZShzYW5kYm94LCBkYXRhKTtcbiAgICAgICAgc1N0YXRlLmNsZWFyKCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzT3BlbiQxID0gKF9zYW5kYm94LCBfc0NvbmZpZywgc1N0YXRlKSA9PiBzU3RhdGUuaXNPcGVuKCk7XG4gICAgY29uc3QgaXNQYXJ0T2YgPSAoc2FuZGJveCwgc0NvbmZpZywgc1N0YXRlLCBxdWVyeUVsZW0pID0+IGlzT3BlbiQxKHNhbmRib3gsIHNDb25maWcsIHNTdGF0ZSkgJiYgc1N0YXRlLmdldCgpLmV4aXN0cyhkYXRhID0+IHNDb25maWcuaXNQYXJ0T2Yoc2FuZGJveCwgZGF0YSwgcXVlcnlFbGVtKSk7XG4gICAgY29uc3QgZ2V0U3RhdGUkMiA9IChfc2FuZGJveCwgX3NDb25maWcsIHNTdGF0ZSkgPT4gc1N0YXRlLmdldCgpO1xuICAgIGNvbnN0IHN0b3JlID0gKHNhbmRib3gsIGNzc0tleSwgYXR0ciwgbmV3VmFsdWUpID0+IHtcbiAgICAgIGdldFJhdyhzYW5kYm94LmVsZW1lbnQsIGNzc0tleSkuZm9sZCgoKSA9PiB7XG4gICAgICAgIHJlbW92ZSQ3KHNhbmRib3guZWxlbWVudCwgYXR0cik7XG4gICAgICB9LCB2ID0+IHtcbiAgICAgICAgc2V0JDkoc2FuZGJveC5lbGVtZW50LCBhdHRyLCB2KTtcbiAgICAgIH0pO1xuICAgICAgc2V0JDgoc2FuZGJveC5lbGVtZW50LCBjc3NLZXksIG5ld1ZhbHVlKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlc3RvcmUgPSAoc2FuZGJveCwgY3NzS2V5LCBhdHRyKSA9PiB7XG4gICAgICBnZXRPcHQoc2FuZGJveC5lbGVtZW50LCBhdHRyKS5mb2xkKCgpID0+IHJlbW92ZSQ2KHNhbmRib3guZWxlbWVudCwgY3NzS2V5KSwgb2xkVmFsdWUgPT4gc2V0JDgoc2FuZGJveC5lbGVtZW50LCBjc3NLZXksIG9sZFZhbHVlKSk7XG4gICAgfTtcbiAgICBjb25zdCBjbG9hayA9IChzYW5kYm94LCBzQ29uZmlnLCBfc1N0YXRlKSA9PiB7XG4gICAgICBjb25zdCBzaW5rID0gc0NvbmZpZy5nZXRBdHRhY2hQb2ludChzYW5kYm94KTtcbiAgICAgIHNldCQ4KHNhbmRib3guZWxlbWVudCwgJ3Bvc2l0aW9uJywgUG9zaXRpb25pbmcuZ2V0TW9kZShzaW5rKSk7XG4gICAgICBzdG9yZShzYW5kYm94LCAndmlzaWJpbGl0eScsIHNDb25maWcuY2xvYWtWaXNpYmlsaXR5QXR0ciwgJ2hpZGRlbicpO1xuICAgIH07XG4gICAgY29uc3QgaGFzUG9zaXRpb24gPSBlbGVtZW50ID0+IGV4aXN0cyhbXG4gICAgICAndG9wJyxcbiAgICAgICdsZWZ0JyxcbiAgICAgICdyaWdodCcsXG4gICAgICAnYm90dG9tJ1xuICAgIF0sIHBvcyA9PiBnZXRSYXcoZWxlbWVudCwgcG9zKS5pc1NvbWUoKSk7XG4gICAgY29uc3QgZGVjbG9hayA9IChzYW5kYm94LCBzQ29uZmlnLCBfc1N0YXRlKSA9PiB7XG4gICAgICBpZiAoIWhhc1Bvc2l0aW9uKHNhbmRib3guZWxlbWVudCkpIHtcbiAgICAgICAgcmVtb3ZlJDYoc2FuZGJveC5lbGVtZW50LCAncG9zaXRpb24nKTtcbiAgICAgIH1cbiAgICAgIHJlc3RvcmUoc2FuZGJveCwgJ3Zpc2liaWxpdHknLCBzQ29uZmlnLmNsb2FrVmlzaWJpbGl0eUF0dHIpO1xuICAgIH07XG5cbiAgICB2YXIgU2FuZGJveEFwaXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgY2xvYWs6IGNsb2FrLFxuICAgICAgICBkZWNsb2FrOiBkZWNsb2FrLFxuICAgICAgICBvcGVuOiBvcGVuJDEsXG4gICAgICAgIG9wZW5XaGlsZUNsb2FrZWQ6IG9wZW5XaGlsZUNsb2FrZWQsXG4gICAgICAgIGNsb3NlOiBjbG9zZSQxLFxuICAgICAgICBpc09wZW46IGlzT3BlbiQxLFxuICAgICAgICBpc1BhcnRPZjogaXNQYXJ0T2YsXG4gICAgICAgIGdldFN0YXRlOiBnZXRTdGF0ZSQyLFxuICAgICAgICBzZXRDb250ZW50OiBzZXRDb250ZW50XG4gICAgfSk7XG5cbiAgICBjb25zdCBldmVudHMkZyA9IChzYW5kYm94Q29uZmlnLCBzYW5kYm94U3RhdGUpID0+IGRlcml2ZSQyKFtydW4kMShzYW5kYm94Q2xvc2UoKSwgKHNhbmRib3gsIF9zaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICBjbG9zZSQxKHNhbmRib3gsIHNhbmRib3hDb25maWcsIHNhbmRib3hTdGF0ZSk7XG4gICAgICB9KV0pO1xuXG4gICAgdmFyIEFjdGl2ZVNhbmRib3ggPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgZXZlbnRzOiBldmVudHMkZ1xuICAgIH0pO1xuXG4gICAgdmFyIFNhbmRib3hTY2hlbWEgPSBbXG4gICAgICBvbkhhbmRsZXIoJ29uT3BlbicpLFxuICAgICAgb25IYW5kbGVyKCdvbkNsb3NlJyksXG4gICAgICByZXF1aXJlZCQxKCdpc1BhcnRPZicpLFxuICAgICAgcmVxdWlyZWQkMSgnZ2V0QXR0YWNoUG9pbnQnKSxcbiAgICAgIGRlZmF1bHRlZCgnY2xvYWtWaXNpYmlsaXR5QXR0cicsICdkYXRhLXByZWNsb2FrLXZpc2liaWxpdHknKVxuICAgIF07XG5cbiAgICBjb25zdCBpbml0JGYgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjb250ZW50cyA9IHZhbHVlJDIoKTtcbiAgICAgIGNvbnN0IHJlYWRTdGF0ZSA9IGNvbnN0YW50JDEoJ25vdC1pbXBsZW1lbnRlZCcpO1xuICAgICAgcmV0dXJuIG51JDgoe1xuICAgICAgICByZWFkU3RhdGUsXG4gICAgICAgIGlzT3BlbjogY29udGVudHMuaXNTZXQsXG4gICAgICAgIGNsZWFyOiBjb250ZW50cy5jbGVhcixcbiAgICAgICAgc2V0OiBjb250ZW50cy5zZXQsXG4gICAgICAgIGdldDogY29udGVudHMuZ2V0XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdmFyIFNhbmRib3hTdGF0ZSA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBpbml0OiBpbml0JGZcbiAgICB9KTtcblxuICAgIGNvbnN0IFNhbmRib3hpbmcgPSBjcmVhdGUkNCh7XG4gICAgICBmaWVsZHM6IFNhbmRib3hTY2hlbWEsXG4gICAgICBuYW1lOiAnc2FuZGJveGluZycsXG4gICAgICBhY3RpdmU6IEFjdGl2ZVNhbmRib3gsXG4gICAgICBhcGlzOiBTYW5kYm94QXBpcyxcbiAgICAgIHN0YXRlOiBTYW5kYm94U3RhdGVcbiAgICB9KTtcblxuICAgIGNvbnN0IGRpc21pc3NQb3B1cHMgPSBjb25zdGFudCQxKCdkaXNtaXNzLnBvcHVwcycpO1xuICAgIGNvbnN0IHJlcG9zaXRpb25Qb3B1cHMgPSBjb25zdGFudCQxKCdyZXBvc2l0aW9uLnBvcHVwcycpO1xuICAgIGNvbnN0IG1vdXNlUmVsZWFzZWQgPSBjb25zdGFudCQxKCdtb3VzZS5yZWxlYXNlZCcpO1xuXG4gICAgY29uc3Qgc2NoZW1hJHggPSBvYmpPZk9ubHkoW1xuICAgICAgZGVmYXVsdGVkKCdpc0V4dHJhUGFydCcsIG5ldmVyKSxcbiAgICAgIG9wdGlvbk9iak9mKCdmaXJlRXZlbnRJbnN0ZWFkJywgW2RlZmF1bHRlZCgnZXZlbnQnLCBkaXNtaXNzUmVxdWVzdGVkKCkpXSlcbiAgICBdKTtcbiAgICBjb25zdCByZWNlaXZpbmdDaGFubmVsJDEgPSByYXdTcGVjID0+IHtcbiAgICAgIGNvbnN0IGRldGFpbCA9IGFzUmF3T3JEaWUkMSgnRGlzbWlzc2FsJywgc2NoZW1hJHgsIHJhd1NwZWMpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Rpc21pc3NQb3B1cHMoKV06IHtcbiAgICAgICAgICBzY2hlbWE6IG9iak9mT25seShbcmVxdWlyZWQkMSgndGFyZ2V0JyldKSxcbiAgICAgICAgICBvblJlY2VpdmU6IChzYW5kYm94LCBkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAoU2FuZGJveGluZy5pc09wZW4oc2FuZGJveCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgaXNQYXJ0ID0gU2FuZGJveGluZy5pc1BhcnRPZihzYW5kYm94LCBkYXRhLnRhcmdldCkgfHwgZGV0YWlsLmlzRXh0cmFQYXJ0KHNhbmRib3gsIGRhdGEudGFyZ2V0KTtcbiAgICAgICAgICAgICAgaWYgKCFpc1BhcnQpIHtcbiAgICAgICAgICAgICAgICBkZXRhaWwuZmlyZUV2ZW50SW5zdGVhZC5mb2xkKCgpID0+IFNhbmRib3hpbmcuY2xvc2Uoc2FuZGJveCksIGZlID0+IGVtaXQoc2FuZGJveCwgZmUuZXZlbnQpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2NoZW1hJHcgPSBvYmpPZk9ubHkoW1xuICAgICAgb3B0aW9uT2JqT2YoJ2ZpcmVFdmVudEluc3RlYWQnLCBbZGVmYXVsdGVkKCdldmVudCcsIHJlcG9zaXRpb25SZXF1ZXN0ZWQoKSldKSxcbiAgICAgIHJlcXVpcmVkRnVuY3Rpb24oJ2RvUmVwb3NpdGlvbicpXG4gICAgXSk7XG4gICAgY29uc3QgcmVjZWl2aW5nQ2hhbm5lbCA9IHJhd1NwZWMgPT4ge1xuICAgICAgY29uc3QgZGV0YWlsID0gYXNSYXdPckRpZSQxKCdSZXBvc2l0aW9uJywgc2NoZW1hJHcsIHJhd1NwZWMpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW3JlcG9zaXRpb25Qb3B1cHMoKV06IHtcbiAgICAgICAgICBvblJlY2VpdmU6IHNhbmRib3ggPT4ge1xuICAgICAgICAgICAgaWYgKFNhbmRib3hpbmcuaXNPcGVuKHNhbmRib3gpKSB7XG4gICAgICAgICAgICAgIGRldGFpbC5maXJlRXZlbnRJbnN0ZWFkLmZvbGQoKCkgPT4gZGV0YWlsLmRvUmVwb3NpdGlvbihzYW5kYm94KSwgZmUgPT4gZW1pdChzYW5kYm94LCBmZS5ldmVudCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25Mb2FkJDUgPSAoY29tcG9uZW50LCByZXBDb25maWcsIHJlcFN0YXRlKSA9PiB7XG4gICAgICByZXBDb25maWcuc3RvcmUubWFuYWdlci5vbkxvYWQoY29tcG9uZW50LCByZXBDb25maWcsIHJlcFN0YXRlKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uVW5sb2FkJDIgPSAoY29tcG9uZW50LCByZXBDb25maWcsIHJlcFN0YXRlKSA9PiB7XG4gICAgICByZXBDb25maWcuc3RvcmUubWFuYWdlci5vblVubG9hZChjb21wb25lbnQsIHJlcENvbmZpZywgcmVwU3RhdGUpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0VmFsdWUkMyA9IChjb21wb25lbnQsIHJlcENvbmZpZywgcmVwU3RhdGUsIGRhdGEpID0+IHtcbiAgICAgIHJlcENvbmZpZy5zdG9yZS5tYW5hZ2VyLnNldFZhbHVlKGNvbXBvbmVudCwgcmVwQ29uZmlnLCByZXBTdGF0ZSwgZGF0YSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRWYWx1ZSQzID0gKGNvbXBvbmVudCwgcmVwQ29uZmlnLCByZXBTdGF0ZSkgPT4gcmVwQ29uZmlnLnN0b3JlLm1hbmFnZXIuZ2V0VmFsdWUoY29tcG9uZW50LCByZXBDb25maWcsIHJlcFN0YXRlKTtcbiAgICBjb25zdCBnZXRTdGF0ZSQxID0gKGNvbXBvbmVudCwgcmVwQ29uZmlnLCByZXBTdGF0ZSkgPT4gcmVwU3RhdGU7XG5cbiAgICB2YXIgUmVwcmVzZW50QXBpcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBvbkxvYWQ6IG9uTG9hZCQ1LFxuICAgICAgICBvblVubG9hZDogb25VbmxvYWQkMixcbiAgICAgICAgc2V0VmFsdWU6IHNldFZhbHVlJDMsXG4gICAgICAgIGdldFZhbHVlOiBnZXRWYWx1ZSQzLFxuICAgICAgICBnZXRTdGF0ZTogZ2V0U3RhdGUkMVxuICAgIH0pO1xuXG4gICAgY29uc3QgZXZlbnRzJGYgPSAocmVwQ29uZmlnLCByZXBTdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgZXMgPSByZXBDb25maWcucmVzZXRPbkRvbSA/IFtcbiAgICAgICAgcnVuT25BdHRhY2hlZCgoY29tcCwgX3NlKSA9PiB7XG4gICAgICAgICAgb25Mb2FkJDUoY29tcCwgcmVwQ29uZmlnLCByZXBTdGF0ZSk7XG4gICAgICAgIH0pLFxuICAgICAgICBydW5PbkRldGFjaGVkKChjb21wLCBfc2UpID0+IHtcbiAgICAgICAgICBvblVubG9hZCQyKGNvbXAsIHJlcENvbmZpZywgcmVwU3RhdGUpO1xuICAgICAgICB9KVxuICAgICAgXSA6IFtsb2FkRXZlbnQocmVwQ29uZmlnLCByZXBTdGF0ZSwgb25Mb2FkJDUpXTtcbiAgICAgIHJldHVybiBkZXJpdmUkMihlcyk7XG4gICAgfTtcblxuICAgIHZhciBBY3RpdmVSZXByZXNlbnRpbmcgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgZXZlbnRzOiBldmVudHMkZlxuICAgIH0pO1xuXG4gICAgY29uc3QgbWVtb3J5JDEgPSAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gQ2VsbChudWxsKTtcbiAgICAgIGNvbnN0IHJlYWRTdGF0ZSA9ICgpID0+ICh7XG4gICAgICAgIG1vZGU6ICdtZW1vcnknLFxuICAgICAgICB2YWx1ZTogZGF0YS5nZXQoKVxuICAgICAgfSk7XG4gICAgICBjb25zdCBpc05vdFNldCA9ICgpID0+IGRhdGEuZ2V0KCkgPT09IG51bGw7XG4gICAgICBjb25zdCBjbGVhciA9ICgpID0+IHtcbiAgICAgICAgZGF0YS5zZXQobnVsbCk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIG51JDgoe1xuICAgICAgICBzZXQ6IGRhdGEuc2V0LFxuICAgICAgICBnZXQ6IGRhdGEuZ2V0LFxuICAgICAgICBpc05vdFNldCxcbiAgICAgICAgY2xlYXIsXG4gICAgICAgIHJlYWRTdGF0ZVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBtYW51YWwgPSAoKSA9PiB7XG4gICAgICBjb25zdCByZWFkU3RhdGUgPSBub29wO1xuICAgICAgcmV0dXJuIG51JDgoeyByZWFkU3RhdGUgfSk7XG4gICAgfTtcbiAgICBjb25zdCBkYXRhc2V0ID0gKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YUJ5VmFsdWUgPSBDZWxsKHt9KTtcbiAgICAgIGNvbnN0IGRhdGFCeVRleHQgPSBDZWxsKHt9KTtcbiAgICAgIGNvbnN0IHJlYWRTdGF0ZSA9ICgpID0+ICh7XG4gICAgICAgIG1vZGU6ICdkYXRhc2V0JyxcbiAgICAgICAgZGF0YUJ5VmFsdWU6IGRhdGFCeVZhbHVlLmdldCgpLFxuICAgICAgICBkYXRhQnlUZXh0OiBkYXRhQnlUZXh0LmdldCgpXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNsZWFyID0gKCkgPT4ge1xuICAgICAgICBkYXRhQnlWYWx1ZS5zZXQoe30pO1xuICAgICAgICBkYXRhQnlUZXh0LnNldCh7fSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgbG9va3VwID0gaXRlbVN0cmluZyA9PiBnZXQkZyhkYXRhQnlWYWx1ZS5nZXQoKSwgaXRlbVN0cmluZykub3JUaHVuaygoKSA9PiBnZXQkZyhkYXRhQnlUZXh0LmdldCgpLCBpdGVtU3RyaW5nKSk7XG4gICAgICBjb25zdCB1cGRhdGUgPSBpdGVtcyA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRhQnlWYWx1ZSA9IGRhdGFCeVZhbHVlLmdldCgpO1xuICAgICAgICBjb25zdCBjdXJyZW50RGF0YUJ5VGV4dCA9IGRhdGFCeVRleHQuZ2V0KCk7XG4gICAgICAgIGNvbnN0IG5ld0RhdGFCeVZhbHVlID0ge307XG4gICAgICAgIGNvbnN0IG5ld0RhdGFCeVRleHQgPSB7fTtcbiAgICAgICAgZWFjaCQxKGl0ZW1zLCBpdGVtID0+IHtcbiAgICAgICAgICBuZXdEYXRhQnlWYWx1ZVtpdGVtLnZhbHVlXSA9IGl0ZW07XG4gICAgICAgICAgZ2V0JGcoaXRlbSwgJ21ldGEnKS5lYWNoKG1ldGEgPT4ge1xuICAgICAgICAgICAgZ2V0JGcobWV0YSwgJ3RleHQnKS5lYWNoKHRleHQgPT4ge1xuICAgICAgICAgICAgICBuZXdEYXRhQnlUZXh0W3RleHRdID0gaXRlbTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgZGF0YUJ5VmFsdWUuc2V0KHtcbiAgICAgICAgICAuLi5jdXJyZW50RGF0YUJ5VmFsdWUsXG4gICAgICAgICAgLi4ubmV3RGF0YUJ5VmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIGRhdGFCeVRleHQuc2V0KHtcbiAgICAgICAgICAuLi5jdXJyZW50RGF0YUJ5VGV4dCxcbiAgICAgICAgICAuLi5uZXdEYXRhQnlUZXh0XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBudSQ4KHtcbiAgICAgICAgcmVhZFN0YXRlLFxuICAgICAgICBsb29rdXAsXG4gICAgICAgIHVwZGF0ZSxcbiAgICAgICAgY2xlYXJcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW5pdCRlID0gc3BlYyA9PiBzcGVjLnN0b3JlLm1hbmFnZXIuc3RhdGUoc3BlYyk7XG5cbiAgICB2YXIgUmVwcmVzZW50U3RhdGUgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgbWVtb3J5OiBtZW1vcnkkMSxcbiAgICAgICAgZGF0YXNldDogZGF0YXNldCxcbiAgICAgICAgbWFudWFsOiBtYW51YWwsXG4gICAgICAgIGluaXQ6IGluaXQkZVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2V0VmFsdWUkMiA9IChjb21wb25lbnQsIHJlcENvbmZpZywgcmVwU3RhdGUsIGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlID0gcmVwQ29uZmlnLnN0b3JlO1xuICAgICAgcmVwU3RhdGUudXBkYXRlKFtkYXRhXSk7XG4gICAgICBzdG9yZS5zZXRWYWx1ZShjb21wb25lbnQsIGRhdGEpO1xuICAgICAgcmVwQ29uZmlnLm9uU2V0VmFsdWUoY29tcG9uZW50LCBkYXRhKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFZhbHVlJDIgPSAoY29tcG9uZW50LCByZXBDb25maWcsIHJlcFN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBzdG9yZSA9IHJlcENvbmZpZy5zdG9yZTtcbiAgICAgIGNvbnN0IGtleSA9IHN0b3JlLmdldERhdGFLZXkoY29tcG9uZW50KTtcbiAgICAgIHJldHVybiByZXBTdGF0ZS5sb29rdXAoa2V5KS5nZXRPclRodW5rKCgpID0+IHN0b3JlLmdldEZhbGxiYWNrRW50cnkoa2V5KSk7XG4gICAgfTtcbiAgICBjb25zdCBvbkxvYWQkNCA9IChjb21wb25lbnQsIHJlcENvbmZpZywgcmVwU3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlID0gcmVwQ29uZmlnLnN0b3JlO1xuICAgICAgc3RvcmUuaW5pdGlhbFZhbHVlLmVhY2goZGF0YSA9PiB7XG4gICAgICAgIHNldFZhbHVlJDIoY29tcG9uZW50LCByZXBDb25maWcsIHJlcFN0YXRlLCBkYXRhKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25VbmxvYWQkMSA9IChjb21wb25lbnQsIHJlcENvbmZpZywgcmVwU3RhdGUpID0+IHtcbiAgICAgIHJlcFN0YXRlLmNsZWFyKCk7XG4gICAgfTtcbiAgICB2YXIgRGF0YXNldFN0b3JlID0gW1xuICAgICAgb3B0aW9uJDMoJ2luaXRpYWxWYWx1ZScpLFxuICAgICAgcmVxdWlyZWQkMSgnZ2V0RmFsbGJhY2tFbnRyeScpLFxuICAgICAgcmVxdWlyZWQkMSgnZ2V0RGF0YUtleScpLFxuICAgICAgcmVxdWlyZWQkMSgnc2V0VmFsdWUnKSxcbiAgICAgIG91dHB1dCQxKCdtYW5hZ2VyJywge1xuICAgICAgICBzZXRWYWx1ZTogc2V0VmFsdWUkMixcbiAgICAgICAgZ2V0VmFsdWU6IGdldFZhbHVlJDIsXG4gICAgICAgIG9uTG9hZDogb25Mb2FkJDQsXG4gICAgICAgIG9uVW5sb2FkOiBvblVubG9hZCQxLFxuICAgICAgICBzdGF0ZTogZGF0YXNldFxuICAgICAgfSlcbiAgICBdO1xuXG4gICAgY29uc3QgZ2V0VmFsdWUkMSA9IChjb21wb25lbnQsIHJlcENvbmZpZywgX3JlcFN0YXRlKSA9PiByZXBDb25maWcuc3RvcmUuZ2V0VmFsdWUoY29tcG9uZW50KTtcbiAgICBjb25zdCBzZXRWYWx1ZSQxID0gKGNvbXBvbmVudCwgcmVwQ29uZmlnLCBfcmVwU3RhdGUsIGRhdGEpID0+IHtcbiAgICAgIHJlcENvbmZpZy5zdG9yZS5zZXRWYWx1ZShjb21wb25lbnQsIGRhdGEpO1xuICAgICAgcmVwQ29uZmlnLm9uU2V0VmFsdWUoY29tcG9uZW50LCBkYXRhKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uTG9hZCQzID0gKGNvbXBvbmVudCwgcmVwQ29uZmlnLCBfcmVwU3RhdGUpID0+IHtcbiAgICAgIHJlcENvbmZpZy5zdG9yZS5pbml0aWFsVmFsdWUuZWFjaChkYXRhID0+IHtcbiAgICAgICAgcmVwQ29uZmlnLnN0b3JlLnNldFZhbHVlKGNvbXBvbmVudCwgZGF0YSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHZhciBNYW51YWxTdG9yZSA9IFtcbiAgICAgIHJlcXVpcmVkJDEoJ2dldFZhbHVlJyksXG4gICAgICBkZWZhdWx0ZWQoJ3NldFZhbHVlJywgbm9vcCksXG4gICAgICBvcHRpb24kMygnaW5pdGlhbFZhbHVlJyksXG4gICAgICBvdXRwdXQkMSgnbWFuYWdlcicsIHtcbiAgICAgICAgc2V0VmFsdWU6IHNldFZhbHVlJDEsXG4gICAgICAgIGdldFZhbHVlOiBnZXRWYWx1ZSQxLFxuICAgICAgICBvbkxvYWQ6IG9uTG9hZCQzLFxuICAgICAgICBvblVubG9hZDogbm9vcCxcbiAgICAgICAgc3RhdGU6IE5vU3RhdGUuaW5pdFxuICAgICAgfSlcbiAgICBdO1xuXG4gICAgY29uc3Qgc2V0VmFsdWUgPSAoY29tcG9uZW50LCByZXBDb25maWcsIHJlcFN0YXRlLCBkYXRhKSA9PiB7XG4gICAgICByZXBTdGF0ZS5zZXQoZGF0YSk7XG4gICAgICByZXBDb25maWcub25TZXRWYWx1ZShjb21wb25lbnQsIGRhdGEpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0VmFsdWUgPSAoY29tcG9uZW50LCByZXBDb25maWcsIHJlcFN0YXRlKSA9PiByZXBTdGF0ZS5nZXQoKTtcbiAgICBjb25zdCBvbkxvYWQkMiA9IChjb21wb25lbnQsIHJlcENvbmZpZywgcmVwU3RhdGUpID0+IHtcbiAgICAgIHJlcENvbmZpZy5zdG9yZS5pbml0aWFsVmFsdWUuZWFjaChpbml0VmFsID0+IHtcbiAgICAgICAgaWYgKHJlcFN0YXRlLmlzTm90U2V0KCkpIHtcbiAgICAgICAgICByZXBTdGF0ZS5zZXQoaW5pdFZhbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25VbmxvYWQgPSAoY29tcG9uZW50LCByZXBDb25maWcsIHJlcFN0YXRlKSA9PiB7XG4gICAgICByZXBTdGF0ZS5jbGVhcigpO1xuICAgIH07XG4gICAgdmFyIE1lbW9yeVN0b3JlID0gW1xuICAgICAgb3B0aW9uJDMoJ2luaXRpYWxWYWx1ZScpLFxuICAgICAgb3V0cHV0JDEoJ21hbmFnZXInLCB7XG4gICAgICAgIHNldFZhbHVlLFxuICAgICAgICBnZXRWYWx1ZSxcbiAgICAgICAgb25Mb2FkOiBvbkxvYWQkMixcbiAgICAgICAgb25VbmxvYWQsXG4gICAgICAgIHN0YXRlOiBtZW1vcnkkMVxuICAgICAgfSlcbiAgICBdO1xuXG4gICAgdmFyIFJlcHJlc2VudFNjaGVtYSA9IFtcbiAgICAgIGRlZmF1bHRlZE9mKCdzdG9yZScsIHsgbW9kZTogJ21lbW9yeScgfSwgY2hvb3NlJDEoJ21vZGUnLCB7XG4gICAgICAgIG1lbW9yeTogTWVtb3J5U3RvcmUsXG4gICAgICAgIG1hbnVhbDogTWFudWFsU3RvcmUsXG4gICAgICAgIGRhdGFzZXQ6IERhdGFzZXRTdG9yZVxuICAgICAgfSkpLFxuICAgICAgb25IYW5kbGVyKCdvblNldFZhbHVlJyksXG4gICAgICBkZWZhdWx0ZWQoJ3Jlc2V0T25Eb20nLCBmYWxzZSlcbiAgICBdO1xuXG4gICAgY29uc3QgUmVwcmVzZW50aW5nID0gY3JlYXRlJDQoe1xuICAgICAgZmllbGRzOiBSZXByZXNlbnRTY2hlbWEsXG4gICAgICBuYW1lOiAncmVwcmVzZW50aW5nJyxcbiAgICAgIGFjdGl2ZTogQWN0aXZlUmVwcmVzZW50aW5nLFxuICAgICAgYXBpczogUmVwcmVzZW50QXBpcyxcbiAgICAgIGV4dHJhOiB7XG4gICAgICAgIHNldFZhbHVlRnJvbTogKGNvbXBvbmVudCwgc291cmNlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBSZXByZXNlbnRpbmcuZ2V0VmFsdWUoc291cmNlKTtcbiAgICAgICAgICBSZXByZXNlbnRpbmcuc2V0VmFsdWUoY29tcG9uZW50LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzdGF0ZTogUmVwcmVzZW50U3RhdGVcbiAgICB9KTtcblxuICAgIGNvbnN0IGZpZWxkID0gKG5hbWUsIGZvcmJpZGRlbikgPT4gZGVmYXVsdGVkT2JqT2YobmFtZSwge30sIG1hcCQyKGZvcmJpZGRlbiwgZiA9PiBmb3JiaWQoZi5uYW1lKCksICdDYW5ub3QgY29uZmlndXJlICcgKyBmLm5hbWUoKSArICcgZm9yICcgKyBuYW1lKSkuY29uY2F0KFtjdXN0b21GaWVsZCgnZHVtcCcsIGlkZW50aXR5KV0pKTtcbiAgICBjb25zdCBnZXQkMyA9IGRhdGEgPT4gZGF0YS5kdW1wO1xuICAgIGNvbnN0IGF1Z21lbnQgPSAoZGF0YSwgb3JpZ2luYWwpID0+ICh7XG4gICAgICAuLi5kZXJpdmUkMShvcmlnaW5hbCksXG4gICAgICAuLi5kYXRhLmR1bXBcbiAgICB9KTtcbiAgICBjb25zdCBTa2V0Y2hCZWhhdmlvdXJzID0ge1xuICAgICAgZmllbGQsXG4gICAgICBhdWdtZW50LFxuICAgICAgZ2V0OiBnZXQkM1xuICAgIH07XG5cbiAgICBjb25zdCBfcGxhY2Vob2xkZXIgPSAncGxhY2Vob2xkZXInO1xuICAgIGNvbnN0IGFkdCQzID0gQWR0LmdlbmVyYXRlKFtcbiAgICAgIHtcbiAgICAgICAgc2luZ2xlOiBbXG4gICAgICAgICAgJ3JlcXVpcmVkJyxcbiAgICAgICAgICAndmFsdWVUaHVuaydcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbXVsdGlwbGU6IFtcbiAgICAgICAgICAncmVxdWlyZWQnLFxuICAgICAgICAgICd2YWx1ZVRodW5rcydcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0pO1xuICAgIGNvbnN0IGlzU3Vic3RpdHV0ZWQgPSBzcGVjID0+IGhhcyQyKHNwZWMsICd1aVR5cGUnKTtcbiAgICBjb25zdCBzdWJQbGFjZWhvbGRlciA9IChvd25lciwgZGV0YWlsLCBjb21wU3BlYywgcGxhY2Vob2xkZXJzKSA9PiB7XG4gICAgICBpZiAob3duZXIuZXhpc3RzKG8gPT4gbyAhPT0gY29tcFNwZWMub3duZXIpKSB7XG4gICAgICAgIHJldHVybiBhZHQkMy5zaW5nbGUodHJ1ZSwgY29uc3RhbnQkMShjb21wU3BlYykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldCRnKHBsYWNlaG9sZGVycywgY29tcFNwZWMubmFtZSkuZm9sZCgoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBwbGFjZWhvbGRlciBjb21wb25lbnQ6ICcgKyBjb21wU3BlYy5uYW1lICsgJ1xcbktub3duOiBbJyArIGtleXMocGxhY2Vob2xkZXJzKSArICddXFxuTmFtZXNwYWNlOiAnICsgb3duZXIuZ2V0T3IoJ25vbmUnKSArICdcXG5TcGVjOiAnICsgSlNPTi5zdHJpbmdpZnkoY29tcFNwZWMsIG51bGwsIDIpKTtcbiAgICAgIH0sIG5ld1NwZWMgPT4gbmV3U3BlYy5yZXBsYWNlKCkpO1xuICAgIH07XG4gICAgY29uc3Qgc2NhbiA9IChvd25lciwgZGV0YWlsLCBjb21wU3BlYywgcGxhY2Vob2xkZXJzKSA9PiB7XG4gICAgICBpZiAoaXNTdWJzdGl0dXRlZChjb21wU3BlYykgJiYgY29tcFNwZWMudWlUeXBlID09PSBfcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgcmV0dXJuIHN1YlBsYWNlaG9sZGVyKG93bmVyLCBkZXRhaWwsIGNvbXBTcGVjLCBwbGFjZWhvbGRlcnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFkdCQzLnNpbmdsZShmYWxzZSwgY29uc3RhbnQkMShjb21wU3BlYykpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc3Vic3RpdHV0ZSA9IChvd25lciwgZGV0YWlsLCBjb21wU3BlYywgcGxhY2Vob2xkZXJzKSA9PiB7XG4gICAgICBjb25zdCBiYXNlID0gc2Nhbihvd25lciwgZGV0YWlsLCBjb21wU3BlYywgcGxhY2Vob2xkZXJzKTtcbiAgICAgIHJldHVybiBiYXNlLmZvbGQoKHJlcSwgdmFsdWVUaHVuaykgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzU3Vic3RpdHV0ZWQoY29tcFNwZWMpID8gdmFsdWVUaHVuayhkZXRhaWwsIGNvbXBTcGVjLmNvbmZpZywgY29tcFNwZWMudmFsaWRhdGVkKSA6IHZhbHVlVGh1bmsoZGV0YWlsKTtcbiAgICAgICAgY29uc3QgY2hpbGRTcGVjcyA9IGdldCRnKHZhbHVlLCAnY29tcG9uZW50cycpLmdldE9yKFtdKTtcbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0ZWQgPSBiaW5kJDMoY2hpbGRTcGVjcywgYyA9PiBzdWJzdGl0dXRlKG93bmVyLCBkZXRhaWwsIGMsIHBsYWNlaG9sZGVycykpO1xuICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICAgIC4uLnZhbHVlLFxuICAgICAgICAgICAgY29tcG9uZW50czogc3Vic3RpdHV0ZWRcbiAgICAgICAgICB9XTtcbiAgICAgIH0sIChyZXEsIHZhbHVlc1RodW5rKSA9PiB7XG4gICAgICAgIGlmIChpc1N1YnN0aXR1dGVkKGNvbXBTcGVjKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHZhbHVlc1RodW5rKGRldGFpbCwgY29tcFNwZWMuY29uZmlnLCBjb21wU3BlYy52YWxpZGF0ZWQpO1xuICAgICAgICAgIGNvbnN0IHByZXByb2Nlc3NvciA9IGNvbXBTcGVjLnZhbGlkYXRlZC5wcmVwcm9jZXNzLmdldE9yKGlkZW50aXR5KTtcbiAgICAgICAgICByZXR1cm4gcHJlcHJvY2Vzc29yKHZhbHVlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlc1RodW5rKGRldGFpbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc3Vic3RpdHV0ZUFsbCA9IChvd25lciwgZGV0YWlsLCBjb21wb25lbnRzLCBwbGFjZWhvbGRlcnMpID0+IGJpbmQkMyhjb21wb25lbnRzLCBjID0+IHN1YnN0aXR1dGUob3duZXIsIGRldGFpbCwgYywgcGxhY2Vob2xkZXJzKSk7XG4gICAgY29uc3Qgb25lUmVwbGFjZSA9IChsYWJlbCwgcmVwbGFjZW1lbnRzKSA9PiB7XG4gICAgICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gICAgICBjb25zdCB1c2VkID0gKCkgPT4gY2FsbGVkO1xuICAgICAgY29uc3QgcmVwbGFjZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKGNhbGxlZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIHVzZSB0aGUgc2FtZSBwbGFjZWhvbGRlciBtb3JlIHRoYW4gb25jZTogJyArIGxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnRzO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlcXVpcmVkID0gKCkgPT4gcmVwbGFjZW1lbnRzLmZvbGQoKHJlcSwgXykgPT4gcmVxLCAocmVxLCBfKSA9PiByZXEpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogY29uc3RhbnQkMShsYWJlbCksXG4gICAgICAgIHJlcXVpcmVkLFxuICAgICAgICB1c2VkLFxuICAgICAgICByZXBsYWNlXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3Qgc3Vic3RpdHV0ZVBsYWNlcyA9IChvd25lciwgZGV0YWlsLCBjb21wb25lbnRzLCBwbGFjZWhvbGRlcnMpID0+IHtcbiAgICAgIGNvbnN0IHBzID0gbWFwJDEocGxhY2Vob2xkZXJzLCAocGgsIG5hbWUpID0+IG9uZVJlcGxhY2UobmFtZSwgcGgpKTtcbiAgICAgIGNvbnN0IG91dGNvbWUgPSBzdWJzdGl0dXRlQWxsKG93bmVyLCBkZXRhaWwsIGNvbXBvbmVudHMsIHBzKTtcbiAgICAgIGVhY2gocHMsIHAgPT4ge1xuICAgICAgICBpZiAocC51c2VkKCkgPT09IGZhbHNlICYmIHAucmVxdWlyZWQoKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGxhY2Vob2xkZXI6ICcgKyBwLm5hbWUoKSArICcgd2FzIG5vdCBmb3VuZCBpbiBjb21wb25lbnRzIGxpc3RcXG5OYW1lc3BhY2U6ICcgKyBvd25lci5nZXRPcignbm9uZScpICsgJ1xcbkNvbXBvbmVudHM6ICcgKyBKU09OLnN0cmluZ2lmeShkZXRhaWwuY29tcG9uZW50cywgbnVsbCwgMikpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvdXRjb21lO1xuICAgIH07XG4gICAgY29uc3Qgc2luZ2xlJDIgPSBhZHQkMy5zaW5nbGU7XG4gICAgY29uc3QgbXVsdGlwbGUgPSBhZHQkMy5tdWx0aXBsZTtcbiAgICBjb25zdCBwbGFjZWhvbGRlciA9IGNvbnN0YW50JDEoX3BsYWNlaG9sZGVyKTtcblxuICAgIGNvbnN0IGFkdCQyID0gQWR0LmdlbmVyYXRlKFtcbiAgICAgIHsgcmVxdWlyZWQ6IFsnZGF0YSddIH0sXG4gICAgICB7IGV4dGVybmFsOiBbJ2RhdGEnXSB9LFxuICAgICAgeyBvcHRpb25hbDogWydkYXRhJ10gfSxcbiAgICAgIHsgZ3JvdXA6IFsnZGF0YSddIH1cbiAgICBdKTtcbiAgICBjb25zdCBmRmFjdG9yeSA9IGRlZmF1bHRlZCgnZmFjdG9yeScsIHsgc2tldGNoOiBpZGVudGl0eSB9KTtcbiAgICBjb25zdCBmU2NoZW1hID0gZGVmYXVsdGVkKCdzY2hlbWEnLCBbXSk7XG4gICAgY29uc3QgZk5hbWUgPSByZXF1aXJlZCQxKCduYW1lJyk7XG4gICAgY29uc3QgZlBuYW1lID0gZmllbGQkMSgncG5hbWUnLCAncG5hbWUnLCBkZWZhdWx0ZWRUaHVuayh0eXBlU3BlYyA9PiAnPGFsbG95LicgKyBnZW5lcmF0ZSQ2KHR5cGVTcGVjLm5hbWUpICsgJz4nKSwgYW55VmFsdWUoKSk7XG4gICAgY29uc3QgZkdyb3VwU2NoZW1hID0gY3VzdG9tRmllbGQoJ3NjaGVtYScsICgpID0+IFtvcHRpb24kMygncHJlcHJvY2VzcycpXSk7XG4gICAgY29uc3QgZkRlZmF1bHRzID0gZGVmYXVsdGVkKCdkZWZhdWx0cycsIGNvbnN0YW50JDEoe30pKTtcbiAgICBjb25zdCBmT3ZlcnJpZGVzID0gZGVmYXVsdGVkKCdvdmVycmlkZXMnLCBjb25zdGFudCQxKHt9KSk7XG4gICAgY29uc3QgcmVxdWlyZWRTcGVjID0gb2JqT2YoW1xuICAgICAgZkZhY3RvcnksXG4gICAgICBmU2NoZW1hLFxuICAgICAgZk5hbWUsXG4gICAgICBmUG5hbWUsXG4gICAgICBmRGVmYXVsdHMsXG4gICAgICBmT3ZlcnJpZGVzXG4gICAgXSk7XG4gICAgY29uc3QgZXh0ZXJuYWxTcGVjID0gb2JqT2YoW1xuICAgICAgZkZhY3RvcnksXG4gICAgICBmU2NoZW1hLFxuICAgICAgZk5hbWUsXG4gICAgICBmRGVmYXVsdHMsXG4gICAgICBmT3ZlcnJpZGVzXG4gICAgXSk7XG4gICAgY29uc3Qgb3B0aW9uYWxTcGVjID0gb2JqT2YoW1xuICAgICAgZkZhY3RvcnksXG4gICAgICBmU2NoZW1hLFxuICAgICAgZk5hbWUsXG4gICAgICBmUG5hbWUsXG4gICAgICBmRGVmYXVsdHMsXG4gICAgICBmT3ZlcnJpZGVzXG4gICAgXSk7XG4gICAgY29uc3QgZ3JvdXBTcGVjID0gb2JqT2YoW1xuICAgICAgZkZhY3RvcnksXG4gICAgICBmR3JvdXBTY2hlbWEsXG4gICAgICBmTmFtZSxcbiAgICAgIHJlcXVpcmVkJDEoJ3VuaXQnKSxcbiAgICAgIGZQbmFtZSxcbiAgICAgIGZEZWZhdWx0cyxcbiAgICAgIGZPdmVycmlkZXNcbiAgICBdKTtcbiAgICBjb25zdCBhc05hbWVkUGFydCA9IHBhcnQgPT4ge1xuICAgICAgcmV0dXJuIHBhcnQuZm9sZChPcHRpb25hbC5zb21lLCBPcHRpb25hbC5ub25lLCBPcHRpb25hbC5zb21lLCBPcHRpb25hbC5zb21lKTtcbiAgICB9O1xuICAgIGNvbnN0IG5hbWUkMiA9IHBhcnQgPT4ge1xuICAgICAgY29uc3QgZ2V0ID0gZGF0YSA9PiBkYXRhLm5hbWU7XG4gICAgICByZXR1cm4gcGFydC5mb2xkKGdldCwgZ2V0LCBnZXQsIGdldCk7XG4gICAgfTtcbiAgICBjb25zdCBhc0NvbW1vbiA9IHBhcnQgPT4ge1xuICAgICAgcmV0dXJuIHBhcnQuZm9sZChpZGVudGl0eSwgaWRlbnRpdHksIGlkZW50aXR5LCBpZGVudGl0eSk7XG4gICAgfTtcbiAgICBjb25zdCBjb252ZXJ0ID0gKGFkdENvbnN0cnVjdG9yLCBwYXJ0U2NoZW1hKSA9PiBzcGVjID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhc1Jhd09yRGllJDEoJ0NvbnZlcnRpbmcgcGFydCB0eXBlJywgcGFydFNjaGVtYSwgc3BlYyk7XG4gICAgICByZXR1cm4gYWR0Q29uc3RydWN0b3IoZGF0YSk7XG4gICAgfTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGNvbnZlcnQoYWR0JDIucmVxdWlyZWQsIHJlcXVpcmVkU3BlYyk7XG4gICAgY29uc3QgZXh0ZXJuYWwgPSBjb252ZXJ0KGFkdCQyLmV4dGVybmFsLCBleHRlcm5hbFNwZWMpO1xuICAgIGNvbnN0IG9wdGlvbmFsID0gY29udmVydChhZHQkMi5vcHRpb25hbCwgb3B0aW9uYWxTcGVjKTtcbiAgICBjb25zdCBncm91cCA9IGNvbnZlcnQoYWR0JDIuZ3JvdXAsIGdyb3VwU3BlYyk7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSBjb25zdGFudCQxKCdlbnRpcmV0eScpO1xuXG4gICAgdmFyIFBhcnRUeXBlID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIHJlcXVpcmVkOiByZXF1aXJlZCxcbiAgICAgICAgZXh0ZXJuYWw6IGV4dGVybmFsLFxuICAgICAgICBvcHRpb25hbDogb3B0aW9uYWwsXG4gICAgICAgIGdyb3VwOiBncm91cCxcbiAgICAgICAgYXNOYW1lZFBhcnQ6IGFzTmFtZWRQYXJ0LFxuICAgICAgICBuYW1lOiBuYW1lJDIsXG4gICAgICAgIGFzQ29tbW9uOiBhc0NvbW1vbixcbiAgICAgICAgb3JpZ2luYWw6IG9yaWdpbmFsXG4gICAgfSk7XG5cbiAgICBjb25zdCBjb21iaW5lID0gKGRldGFpbCwgZGF0YSwgcGFydFNwZWMsIHBhcnRWYWxpZGF0ZWQpID0+IGRlZXBNZXJnZShkYXRhLmRlZmF1bHRzKGRldGFpbCwgcGFydFNwZWMsIHBhcnRWYWxpZGF0ZWQpLCBwYXJ0U3BlYywgeyB1aWQ6IGRldGFpbC5wYXJ0VWlkc1tkYXRhLm5hbWVdIH0sIGRhdGEub3ZlcnJpZGVzKGRldGFpbCwgcGFydFNwZWMsIHBhcnRWYWxpZGF0ZWQpKTtcbiAgICBjb25zdCBzdWJzID0gKG93bmVyLCBkZXRhaWwsIHBhcnRzKSA9PiB7XG4gICAgICBjb25zdCBpbnRlcm5hbHMgPSB7fTtcbiAgICAgIGNvbnN0IGV4dGVybmFscyA9IHt9O1xuICAgICAgZWFjaCQxKHBhcnRzLCBwYXJ0ID0+IHtcbiAgICAgICAgcGFydC5mb2xkKGRhdGEgPT4ge1xuICAgICAgICAgIGludGVybmFsc1tkYXRhLnBuYW1lXSA9IHNpbmdsZSQyKHRydWUsIChkZXRhaWwsIHBhcnRTcGVjLCBwYXJ0VmFsaWRhdGVkKSA9PiBkYXRhLmZhY3Rvcnkuc2tldGNoKGNvbWJpbmUoZGV0YWlsLCBkYXRhLCBwYXJ0U3BlYywgcGFydFZhbGlkYXRlZCkpKTtcbiAgICAgICAgfSwgZGF0YSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFydFNwZWMgPSBkZXRhaWwucGFydHNbZGF0YS5uYW1lXTtcbiAgICAgICAgICBleHRlcm5hbHNbZGF0YS5uYW1lXSA9IGNvbnN0YW50JDEoZGF0YS5mYWN0b3J5LnNrZXRjaChjb21iaW5lKGRldGFpbCwgZGF0YSwgcGFydFNwZWNbb3JpZ2luYWwoKV0pLCBwYXJ0U3BlYykpO1xuICAgICAgICB9LCBkYXRhID0+IHtcbiAgICAgICAgICBpbnRlcm5hbHNbZGF0YS5wbmFtZV0gPSBzaW5nbGUkMihmYWxzZSwgKGRldGFpbCwgcGFydFNwZWMsIHBhcnRWYWxpZGF0ZWQpID0+IGRhdGEuZmFjdG9yeS5za2V0Y2goY29tYmluZShkZXRhaWwsIGRhdGEsIHBhcnRTcGVjLCBwYXJ0VmFsaWRhdGVkKSkpO1xuICAgICAgICB9LCBkYXRhID0+IHtcbiAgICAgICAgICBpbnRlcm5hbHNbZGF0YS5wbmFtZV0gPSBtdWx0aXBsZSh0cnVlLCAoZGV0YWlsLCBfcGFydFNwZWMsIF9wYXJ0VmFsaWRhdGVkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1bml0cyA9IGRldGFpbFtkYXRhLm5hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIG1hcCQyKHVuaXRzLCB1ID0+IGRhdGEuZmFjdG9yeS5za2V0Y2goZGVlcE1lcmdlKGRhdGEuZGVmYXVsdHMoZGV0YWlsLCB1LCBfcGFydFZhbGlkYXRlZCksIHUsIGRhdGEub3ZlcnJpZGVzKGRldGFpbCwgdSkpKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnRlcm5hbHM6IGNvbnN0YW50JDEoaW50ZXJuYWxzKSxcbiAgICAgICAgZXh0ZXJuYWxzOiBjb25zdGFudCQxKGV4dGVybmFscylcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGdlbmVyYXRlJDMgPSAob3duZXIsIHBhcnRzKSA9PiB7XG4gICAgICBjb25zdCByID0ge307XG4gICAgICBlYWNoJDEocGFydHMsIHBhcnQgPT4ge1xuICAgICAgICBhc05hbWVkUGFydChwYXJ0KS5lYWNoKG5wID0+IHtcbiAgICAgICAgICBjb25zdCBnID0gZG9HZW5lcmF0ZU9uZShvd25lciwgbnAucG5hbWUpO1xuICAgICAgICAgIHJbbnAubmFtZV0gPSBjb25maWcgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkID0gYXNSYXdPckRpZSQxKCdQYXJ0OiAnICsgbnAubmFtZSArICcgaW4gJyArIG93bmVyLCBvYmpPZihucC5zY2hlbWEpLCBjb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uZyxcbiAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICB2YWxpZGF0ZWRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3QgZG9HZW5lcmF0ZU9uZSA9IChvd25lciwgcG5hbWUpID0+ICh7XG4gICAgICB1aVR5cGU6IHBsYWNlaG9sZGVyKCksXG4gICAgICBvd25lcixcbiAgICAgIG5hbWU6IHBuYW1lXG4gICAgfSk7XG4gICAgY29uc3QgZ2VuZXJhdGVPbmUkMSA9IChvd25lciwgcG5hbWUsIGNvbmZpZykgPT4gKHtcbiAgICAgIHVpVHlwZTogcGxhY2Vob2xkZXIoKSxcbiAgICAgIG93bmVyLFxuICAgICAgbmFtZTogcG5hbWUsXG4gICAgICBjb25maWcsXG4gICAgICB2YWxpZGF0ZWQ6IHt9XG4gICAgfSk7XG4gICAgY29uc3Qgc2NoZW1hcyA9IHBhcnRzID0+IGJpbmQkMyhwYXJ0cywgcGFydCA9PiBwYXJ0LmZvbGQoT3B0aW9uYWwubm9uZSwgT3B0aW9uYWwuc29tZSwgT3B0aW9uYWwubm9uZSwgT3B0aW9uYWwubm9uZSkubWFwKGRhdGEgPT4gcmVxdWlyZWRPYmpPZihkYXRhLm5hbWUsIGRhdGEuc2NoZW1hLmNvbmNhdChbc25hcHNob3Qob3JpZ2luYWwoKSldKSkpLnRvQXJyYXkoKSk7XG4gICAgY29uc3QgbmFtZXMgPSBwYXJ0cyA9PiBtYXAkMihwYXJ0cywgbmFtZSQyKTtcbiAgICBjb25zdCBzdWJzdGl0dXRlcyA9IChvd25lciwgZGV0YWlsLCBwYXJ0cykgPT4gc3Vicyhvd25lciwgZGV0YWlsLCBwYXJ0cyk7XG4gICAgY29uc3QgY29tcG9uZW50cyQxID0gKG93bmVyLCBkZXRhaWwsIGludGVybmFscykgPT4gc3Vic3RpdHV0ZVBsYWNlcyhPcHRpb25hbC5zb21lKG93bmVyKSwgZGV0YWlsLCBkZXRhaWwuY29tcG9uZW50cywgaW50ZXJuYWxzKTtcbiAgICBjb25zdCBnZXRQYXJ0ID0gKGNvbXBvbmVudCwgZGV0YWlsLCBwYXJ0S2V5KSA9PiB7XG4gICAgICBjb25zdCB1aWQgPSBkZXRhaWwucGFydFVpZHNbcGFydEtleV07XG4gICAgICByZXR1cm4gY29tcG9uZW50LmdldFN5c3RlbSgpLmdldEJ5VWlkKHVpZCkudG9PcHRpb25hbCgpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0UGFydE9yRGllID0gKGNvbXBvbmVudCwgZGV0YWlsLCBwYXJ0S2V5KSA9PiBnZXRQYXJ0KGNvbXBvbmVudCwgZGV0YWlsLCBwYXJ0S2V5KS5nZXRPckRpZSgnQ291bGQgbm90IGZpbmQgcGFydDogJyArIHBhcnRLZXkpO1xuICAgIGNvbnN0IGdldFBhcnRzID0gKGNvbXBvbmVudCwgZGV0YWlsLCBwYXJ0S2V5cykgPT4ge1xuICAgICAgY29uc3QgciA9IHt9O1xuICAgICAgY29uc3QgdWlkcyA9IGRldGFpbC5wYXJ0VWlkcztcbiAgICAgIGNvbnN0IHN5c3RlbSA9IGNvbXBvbmVudC5nZXRTeXN0ZW0oKTtcbiAgICAgIGVhY2gkMShwYXJ0S2V5cywgcGsgPT4ge1xuICAgICAgICByW3BrXSA9IGNvbnN0YW50JDEoc3lzdGVtLmdldEJ5VWlkKHVpZHNbcGtdKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3QgZ2V0QWxsUGFydHMgPSAoY29tcG9uZW50LCBkZXRhaWwpID0+IHtcbiAgICAgIGNvbnN0IHN5c3RlbSA9IGNvbXBvbmVudC5nZXRTeXN0ZW0oKTtcbiAgICAgIHJldHVybiBtYXAkMShkZXRhaWwucGFydFVpZHMsIChwVWlkLCBfaykgPT4gY29uc3RhbnQkMShzeXN0ZW0uZ2V0QnlVaWQocFVpZCkpKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEFsbFBhcnROYW1lcyA9IGRldGFpbCA9PiBrZXlzKGRldGFpbC5wYXJ0VWlkcyk7XG4gICAgY29uc3QgZ2V0UGFydHNPckRpZSA9IChjb21wb25lbnQsIGRldGFpbCwgcGFydEtleXMpID0+IHtcbiAgICAgIGNvbnN0IHIgPSB7fTtcbiAgICAgIGNvbnN0IHVpZHMgPSBkZXRhaWwucGFydFVpZHM7XG4gICAgICBjb25zdCBzeXN0ZW0gPSBjb21wb25lbnQuZ2V0U3lzdGVtKCk7XG4gICAgICBlYWNoJDEocGFydEtleXMsIHBrID0+IHtcbiAgICAgICAgcltwa10gPSBjb25zdGFudCQxKHN5c3RlbS5nZXRCeVVpZCh1aWRzW3BrXSkuZ2V0T3JEaWUoKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3QgZGVmYXVsdFVpZHMgPSAoYmFzZVVpZCwgcGFydFR5cGVzKSA9PiB7XG4gICAgICBjb25zdCBwYXJ0TmFtZXMgPSBuYW1lcyhwYXJ0VHlwZXMpO1xuICAgICAgcmV0dXJuIHdyYXBBbGwobWFwJDIocGFydE5hbWVzLCBwbiA9PiAoe1xuICAgICAgICBrZXk6IHBuLFxuICAgICAgICB2YWx1ZTogYmFzZVVpZCArICctJyArIHBuXG4gICAgICB9KSkpO1xuICAgIH07XG4gICAgY29uc3QgZGVmYXVsdFVpZHNTY2hlbWEgPSBwYXJ0VHlwZXMgPT4gZmllbGQkMSgncGFydFVpZHMnLCAncGFydFVpZHMnLCBtZXJnZVdpdGhUaHVuayhzcGVjID0+IGRlZmF1bHRVaWRzKHNwZWMudWlkLCBwYXJ0VHlwZXMpKSwgYW55VmFsdWUoKSk7XG5cbiAgICB2YXIgQWxsb3lQYXJ0cyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBnZW5lcmF0ZTogZ2VuZXJhdGUkMyxcbiAgICAgICAgZ2VuZXJhdGVPbmU6IGdlbmVyYXRlT25lJDEsXG4gICAgICAgIHNjaGVtYXM6IHNjaGVtYXMsXG4gICAgICAgIG5hbWVzOiBuYW1lcyxcbiAgICAgICAgc3Vic3RpdHV0ZXM6IHN1YnN0aXR1dGVzLFxuICAgICAgICBjb21wb25lbnRzOiBjb21wb25lbnRzJDEsXG4gICAgICAgIGRlZmF1bHRVaWRzOiBkZWZhdWx0VWlkcyxcbiAgICAgICAgZGVmYXVsdFVpZHNTY2hlbWE6IGRlZmF1bHRVaWRzU2NoZW1hLFxuICAgICAgICBnZXRBbGxQYXJ0czogZ2V0QWxsUGFydHMsXG4gICAgICAgIGdldEFsbFBhcnROYW1lczogZ2V0QWxsUGFydE5hbWVzLFxuICAgICAgICBnZXRQYXJ0OiBnZXRQYXJ0LFxuICAgICAgICBnZXRQYXJ0T3JEaWU6IGdldFBhcnRPckRpZSxcbiAgICAgICAgZ2V0UGFydHM6IGdldFBhcnRzLFxuICAgICAgICBnZXRQYXJ0c09yRGllOiBnZXRQYXJ0c09yRGllXG4gICAgfSk7XG5cbiAgICBjb25zdCBiYXNlID0gKHBhcnRTY2hlbWFzLCBwYXJ0VWlkc1NjaGVtYXMpID0+IHtcbiAgICAgIGNvbnN0IHBzID0gcGFydFNjaGVtYXMubGVuZ3RoID4gMCA/IFtyZXF1aXJlZE9iak9mKCdwYXJ0cycsIHBhcnRTY2hlbWFzKV0gOiBbXTtcbiAgICAgIHJldHVybiBwcy5jb25jYXQoW1xuICAgICAgICByZXF1aXJlZCQxKCd1aWQnKSxcbiAgICAgICAgZGVmYXVsdGVkKCdkb20nLCB7fSksXG4gICAgICAgIGRlZmF1bHRlZCgnY29tcG9uZW50cycsIFtdKSxcbiAgICAgICAgc25hcHNob3QoJ29yaWdpbmFsU3BlYycpLFxuICAgICAgICBkZWZhdWx0ZWQoJ2RlYnVnLnNrZXRjaGVyJywge30pXG4gICAgICBdKS5jb25jYXQocGFydFVpZHNTY2hlbWFzKTtcbiAgICB9O1xuICAgIGNvbnN0IGFzUmF3T3JEaWUgPSAobGFiZWwsIHNjaGVtYSwgc3BlYywgcGFydFNjaGVtYXMsIHBhcnRVaWRzU2NoZW1hcykgPT4ge1xuICAgICAgY29uc3QgYmFzZVMgPSBiYXNlKHBhcnRTY2hlbWFzLCBwYXJ0VWlkc1NjaGVtYXMpO1xuICAgICAgcmV0dXJuIGFzUmF3T3JEaWUkMShsYWJlbCArICcgW1NwZWNTY2hlbWFdJywgb2JqT2ZPbmx5KGJhc2VTLmNvbmNhdChzY2hlbWEpKSwgc3BlYyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNpbmdsZSQxID0gKG93bmVyLCBzY2hlbWEsIGZhY3RvcnksIHNwZWMpID0+IHtcbiAgICAgIGNvbnN0IHNwZWNXaXRoVWlkID0gc3VwcGx5VWlkKHNwZWMpO1xuICAgICAgY29uc3QgZGV0YWlsID0gYXNSYXdPckRpZShvd25lciwgc2NoZW1hLCBzcGVjV2l0aFVpZCwgW10sIFtdKTtcbiAgICAgIHJldHVybiBmYWN0b3J5KGRldGFpbCwgc3BlY1dpdGhVaWQpO1xuICAgIH07XG4gICAgY29uc3QgY29tcG9zaXRlJDEgPSAob3duZXIsIHNjaGVtYSwgcGFydFR5cGVzLCBmYWN0b3J5LCBzcGVjKSA9PiB7XG4gICAgICBjb25zdCBzcGVjV2l0aFVpZCA9IHN1cHBseVVpZChzcGVjKTtcbiAgICAgIGNvbnN0IHBhcnRTY2hlbWFzID0gc2NoZW1hcyhwYXJ0VHlwZXMpO1xuICAgICAgY29uc3QgcGFydFVpZHNTY2hlbWEgPSBkZWZhdWx0VWlkc1NjaGVtYShwYXJ0VHlwZXMpO1xuICAgICAgY29uc3QgZGV0YWlsID0gYXNSYXdPckRpZShvd25lciwgc2NoZW1hLCBzcGVjV2l0aFVpZCwgcGFydFNjaGVtYXMsIFtwYXJ0VWlkc1NjaGVtYV0pO1xuICAgICAgY29uc3Qgc3VicyA9IHN1YnN0aXR1dGVzKG93bmVyLCBkZXRhaWwsIHBhcnRUeXBlcyk7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gY29tcG9uZW50cyQxKG93bmVyLCBkZXRhaWwsIHN1YnMuaW50ZXJuYWxzKCkpO1xuICAgICAgcmV0dXJuIGZhY3RvcnkoZGV0YWlsLCBjb21wb25lbnRzLCBzcGVjV2l0aFVpZCwgc3Vicy5leHRlcm5hbHMoKSk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNVaWQgPSBzcGVjID0+IGhhcyQyKHNwZWMsICd1aWQnKTtcbiAgICBjb25zdCBzdXBwbHlVaWQgPSBzcGVjID0+IHtcbiAgICAgIHJldHVybiBoYXNVaWQoc3BlYykgPyBzcGVjIDoge1xuICAgICAgICAuLi5zcGVjLFxuICAgICAgICB1aWQ6IGdlbmVyYXRlJDUoJ3VpZCcpXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBpc1NrZXRjaFNwZWMgPSBzcGVjID0+IHtcbiAgICAgIHJldHVybiBzcGVjLnVpZCAhPT0gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgY29uc3Qgc2luZ2xlU2NoZW1hID0gb2JqT2ZPbmx5KFtcbiAgICAgIHJlcXVpcmVkJDEoJ25hbWUnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ2ZhY3RvcnknKSxcbiAgICAgIHJlcXVpcmVkJDEoJ2NvbmZpZ0ZpZWxkcycpLFxuICAgICAgZGVmYXVsdGVkKCdhcGlzJywge30pLFxuICAgICAgZGVmYXVsdGVkKCdleHRyYUFwaXMnLCB7fSlcbiAgICBdKTtcbiAgICBjb25zdCBjb21wb3NpdGVTY2hlbWEgPSBvYmpPZk9ubHkoW1xuICAgICAgcmVxdWlyZWQkMSgnbmFtZScpLFxuICAgICAgcmVxdWlyZWQkMSgnZmFjdG9yeScpLFxuICAgICAgcmVxdWlyZWQkMSgnY29uZmlnRmllbGRzJyksXG4gICAgICByZXF1aXJlZCQxKCdwYXJ0RmllbGRzJyksXG4gICAgICBkZWZhdWx0ZWQoJ2FwaXMnLCB7fSksXG4gICAgICBkZWZhdWx0ZWQoJ2V4dHJhQXBpcycsIHt9KVxuICAgIF0pO1xuICAgIGNvbnN0IHNpbmdsZSA9IHJhd0NvbmZpZyA9PiB7XG4gICAgICBjb25zdCBjb25maWcgPSBhc1Jhd09yRGllJDEoJ1NrZXRjaGVyIGZvciAnICsgcmF3Q29uZmlnLm5hbWUsIHNpbmdsZVNjaGVtYSwgcmF3Q29uZmlnKTtcbiAgICAgIGNvbnN0IHNrZXRjaCA9IHNwZWMgPT4gc2luZ2xlJDEoY29uZmlnLm5hbWUsIGNvbmZpZy5jb25maWdGaWVsZHMsIGNvbmZpZy5mYWN0b3J5LCBzcGVjKTtcbiAgICAgIGNvbnN0IGFwaXMgPSBtYXAkMShjb25maWcuYXBpcywgbWFrZUFwaSk7XG4gICAgICBjb25zdCBleHRyYUFwaXMgPSBtYXAkMShjb25maWcuZXh0cmFBcGlzLCAoZiwgaykgPT4gbWFya0FzRXh0cmFBcGkoZiwgaykpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICAgIGNvbmZpZ0ZpZWxkczogY29uZmlnLmNvbmZpZ0ZpZWxkcyxcbiAgICAgICAgc2tldGNoLFxuICAgICAgICAuLi5hcGlzLFxuICAgICAgICAuLi5leHRyYUFwaXNcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjb21wb3NpdGUgPSByYXdDb25maWcgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gYXNSYXdPckRpZSQxKCdTa2V0Y2hlciBmb3IgJyArIHJhd0NvbmZpZy5uYW1lLCBjb21wb3NpdGVTY2hlbWEsIHJhd0NvbmZpZyk7XG4gICAgICBjb25zdCBza2V0Y2ggPSBzcGVjID0+IGNvbXBvc2l0ZSQxKGNvbmZpZy5uYW1lLCBjb25maWcuY29uZmlnRmllbGRzLCBjb25maWcucGFydEZpZWxkcywgY29uZmlnLmZhY3RvcnksIHNwZWMpO1xuICAgICAgY29uc3QgcGFydHMgPSBnZW5lcmF0ZSQzKGNvbmZpZy5uYW1lLCBjb25maWcucGFydEZpZWxkcyk7XG4gICAgICBjb25zdCBhcGlzID0gbWFwJDEoY29uZmlnLmFwaXMsIG1ha2VBcGkpO1xuICAgICAgY29uc3QgZXh0cmFBcGlzID0gbWFwJDEoY29uZmlnLmV4dHJhQXBpcywgKGYsIGspID0+IG1hcmtBc0V4dHJhQXBpKGYsIGspKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGNvbmZpZy5uYW1lLFxuICAgICAgICBwYXJ0RmllbGRzOiBjb25maWcucGFydEZpZWxkcyxcbiAgICAgICAgY29uZmlnRmllbGRzOiBjb25maWcuY29uZmlnRmllbGRzLFxuICAgICAgICBza2V0Y2gsXG4gICAgICAgIHBhcnRzLFxuICAgICAgICAuLi5hcGlzLFxuICAgICAgICAuLi5leHRyYUFwaXNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGluc2lkZSA9IHRhcmdldCA9PiBpc1RhZygnaW5wdXQnKSh0YXJnZXQpICYmIGdldCRmKHRhcmdldCwgJ3R5cGUnKSAhPT0gJ3JhZGlvJyB8fCBpc1RhZygndGV4dGFyZWEnKSh0YXJnZXQpO1xuXG4gICAgY29uc3QgZ2V0Q3VycmVudCA9IChjb21wb25lbnQsIGNvbXBvc2VDb25maWcsIF9jb21wb3NlU3RhdGUpID0+IGNvbXBvc2VDb25maWcuZmluZChjb21wb25lbnQpO1xuXG4gICAgdmFyIENvbXBvc2VBcGlzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIGdldEN1cnJlbnQ6IGdldEN1cnJlbnRcbiAgICB9KTtcblxuICAgIGNvbnN0IENvbXBvc2VTY2hlbWEgPSBbcmVxdWlyZWQkMSgnZmluZCcpXTtcblxuICAgIGNvbnN0IENvbXBvc2luZyA9IGNyZWF0ZSQ0KHtcbiAgICAgIGZpZWxkczogQ29tcG9zZVNjaGVtYSxcbiAgICAgIG5hbWU6ICdjb21wb3NpbmcnLFxuICAgICAgYXBpczogQ29tcG9zZUFwaXNcbiAgICB9KTtcblxuICAgIGNvbnN0IG5hdGl2ZURpc2FibGVkID0gW1xuICAgICAgJ2lucHV0JyxcbiAgICAgICdidXR0b24nLFxuICAgICAgJ3RleHRhcmVhJyxcbiAgICAgICdzZWxlY3QnXG4gICAgXTtcbiAgICBjb25zdCBvbkxvYWQkMSA9IChjb21wb25lbnQsIGRpc2FibGVDb25maWcsIGRpc2FibGVTdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgZiA9IGRpc2FibGVDb25maWcuZGlzYWJsZWQoKSA/IGRpc2FibGUgOiBlbmFibGU7XG4gICAgICBmKGNvbXBvbmVudCwgZGlzYWJsZUNvbmZpZyk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNOYXRpdmUgPSAoY29tcG9uZW50LCBjb25maWcpID0+IGNvbmZpZy51c2VOYXRpdmUgPT09IHRydWUgJiYgY29udGFpbnMkMihuYXRpdmVEaXNhYmxlZCwgbmFtZSQzKGNvbXBvbmVudC5lbGVtZW50KSk7XG4gICAgY29uc3QgbmF0aXZlSXNEaXNhYmxlZCA9IGNvbXBvbmVudCA9PiBoYXMkMShjb21wb25lbnQuZWxlbWVudCwgJ2Rpc2FibGVkJyk7XG4gICAgY29uc3QgbmF0aXZlRGlzYWJsZSA9IGNvbXBvbmVudCA9PiB7XG4gICAgICBzZXQkOShjb21wb25lbnQuZWxlbWVudCwgJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XG4gICAgfTtcbiAgICBjb25zdCBuYXRpdmVFbmFibGUgPSBjb21wb25lbnQgPT4ge1xuICAgICAgcmVtb3ZlJDcoY29tcG9uZW50LmVsZW1lbnQsICdkaXNhYmxlZCcpO1xuICAgIH07XG4gICAgY29uc3QgYXJpYUlzRGlzYWJsZWQgPSBjb21wb25lbnQgPT4gZ2V0JGYoY29tcG9uZW50LmVsZW1lbnQsICdhcmlhLWRpc2FibGVkJykgPT09ICd0cnVlJztcbiAgICBjb25zdCBhcmlhRGlzYWJsZSA9IGNvbXBvbmVudCA9PiB7XG4gICAgICBzZXQkOShjb21wb25lbnQuZWxlbWVudCwgJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xuICAgIH07XG4gICAgY29uc3QgYXJpYUVuYWJsZSA9IGNvbXBvbmVudCA9PiB7XG4gICAgICBzZXQkOShjb21wb25lbnQuZWxlbWVudCwgJ2FyaWEtZGlzYWJsZWQnLCAnZmFsc2UnKTtcbiAgICB9O1xuICAgIGNvbnN0IGRpc2FibGUgPSAoY29tcG9uZW50LCBkaXNhYmxlQ29uZmlnLCBfZGlzYWJsZVN0YXRlKSA9PiB7XG4gICAgICBkaXNhYmxlQ29uZmlnLmRpc2FibGVDbGFzcy5lYWNoKGRpc2FibGVDbGFzcyA9PiB7XG4gICAgICAgIGFkZCQyKGNvbXBvbmVudC5lbGVtZW50LCBkaXNhYmxlQ2xhc3MpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBmID0gaGFzTmF0aXZlKGNvbXBvbmVudCwgZGlzYWJsZUNvbmZpZykgPyBuYXRpdmVEaXNhYmxlIDogYXJpYURpc2FibGU7XG4gICAgICBmKGNvbXBvbmVudCk7XG4gICAgICBkaXNhYmxlQ29uZmlnLm9uRGlzYWJsZWQoY29tcG9uZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IGVuYWJsZSA9IChjb21wb25lbnQsIGRpc2FibGVDb25maWcsIF9kaXNhYmxlU3RhdGUpID0+IHtcbiAgICAgIGRpc2FibGVDb25maWcuZGlzYWJsZUNsYXNzLmVhY2goZGlzYWJsZUNsYXNzID0+IHtcbiAgICAgICAgcmVtb3ZlJDIoY29tcG9uZW50LmVsZW1lbnQsIGRpc2FibGVDbGFzcyk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGYgPSBoYXNOYXRpdmUoY29tcG9uZW50LCBkaXNhYmxlQ29uZmlnKSA/IG5hdGl2ZUVuYWJsZSA6IGFyaWFFbmFibGU7XG4gICAgICBmKGNvbXBvbmVudCk7XG4gICAgICBkaXNhYmxlQ29uZmlnLm9uRW5hYmxlZChjb21wb25lbnQpO1xuICAgIH07XG4gICAgY29uc3QgaXNEaXNhYmxlZCA9IChjb21wb25lbnQsIGRpc2FibGVDb25maWcpID0+IGhhc05hdGl2ZShjb21wb25lbnQsIGRpc2FibGVDb25maWcpID8gbmF0aXZlSXNEaXNhYmxlZChjb21wb25lbnQpIDogYXJpYUlzRGlzYWJsZWQoY29tcG9uZW50KTtcbiAgICBjb25zdCBzZXQkNCA9IChjb21wb25lbnQsIGRpc2FibGVDb25maWcsIGRpc2FibGVTdGF0ZSwgZGlzYWJsZWQpID0+IHtcbiAgICAgIGNvbnN0IGYgPSBkaXNhYmxlZCA/IGRpc2FibGUgOiBlbmFibGU7XG4gICAgICBmKGNvbXBvbmVudCwgZGlzYWJsZUNvbmZpZyk7XG4gICAgfTtcblxuICAgIHZhciBEaXNhYmxlQXBpcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBlbmFibGU6IGVuYWJsZSxcbiAgICAgICAgZGlzYWJsZTogZGlzYWJsZSxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgb25Mb2FkOiBvbkxvYWQkMSxcbiAgICAgICAgc2V0OiBzZXQkNFxuICAgIH0pO1xuXG4gICAgY29uc3QgZXhoaWJpdCQ1ID0gKGJhc2UsIGRpc2FibGVDb25maWcpID0+IG51JDcoeyBjbGFzc2VzOiBkaXNhYmxlQ29uZmlnLmRpc2FibGVkKCkgPyBkaXNhYmxlQ29uZmlnLmRpc2FibGVDbGFzcy50b0FycmF5KCkgOiBbXSB9KTtcbiAgICBjb25zdCBldmVudHMkZSA9IChkaXNhYmxlQ29uZmlnLCBkaXNhYmxlU3RhdGUpID0+IGRlcml2ZSQyKFtcbiAgICAgIGFib3J0KGV4ZWN1dGUkNSgpLCAoY29tcG9uZW50LCBfc2ltdWxhdGVkRXZlbnQpID0+IGlzRGlzYWJsZWQoY29tcG9uZW50LCBkaXNhYmxlQ29uZmlnKSksXG4gICAgICBsb2FkRXZlbnQoZGlzYWJsZUNvbmZpZywgZGlzYWJsZVN0YXRlLCBvbkxvYWQkMSlcbiAgICBdKTtcblxuICAgIHZhciBBY3RpdmVEaXNhYmxlID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIGV4aGliaXQ6IGV4aGliaXQkNSxcbiAgICAgICAgZXZlbnRzOiBldmVudHMkZVxuICAgIH0pO1xuXG4gICAgdmFyIERpc2FibGVTY2hlbWEgPSBbXG4gICAgICBkZWZhdWx0ZWRGdW5jdGlvbignZGlzYWJsZWQnLCBuZXZlciksXG4gICAgICBkZWZhdWx0ZWQoJ3VzZU5hdGl2ZScsIHRydWUpLFxuICAgICAgb3B0aW9uJDMoJ2Rpc2FibGVDbGFzcycpLFxuICAgICAgb25IYW5kbGVyKCdvbkRpc2FibGVkJyksXG4gICAgICBvbkhhbmRsZXIoJ29uRW5hYmxlZCcpXG4gICAgXTtcblxuICAgIGNvbnN0IERpc2FibGluZyA9IGNyZWF0ZSQ0KHtcbiAgICAgIGZpZWxkczogRGlzYWJsZVNjaGVtYSxcbiAgICAgIG5hbWU6ICdkaXNhYmxpbmcnLFxuICAgICAgYWN0aXZlOiBBY3RpdmVEaXNhYmxlLFxuICAgICAgYXBpczogRGlzYWJsZUFwaXNcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlaGlnaGxpZ2h0QWxsRXhjZXB0ID0gKGNvbXBvbmVudCwgaENvbmZpZywgaFN0YXRlLCBza2lwKSA9PiB7XG4gICAgICBjb25zdCBoaWdobGlnaHRlZCA9IGRlc2NlbmRhbnRzKGNvbXBvbmVudC5lbGVtZW50LCAnLicgKyBoQ29uZmlnLmhpZ2hsaWdodENsYXNzKTtcbiAgICAgIGVhY2gkMShoaWdobGlnaHRlZCwgaCA9PiB7XG4gICAgICAgIGNvbnN0IHNob3VsZFNraXAgPSBleGlzdHMoc2tpcCwgc2tpcENvbXAgPT4gZXEoc2tpcENvbXAuZWxlbWVudCwgaCkpO1xuICAgICAgICBpZiAoIXNob3VsZFNraXApIHtcbiAgICAgICAgICByZW1vdmUkMihoLCBoQ29uZmlnLmhpZ2hsaWdodENsYXNzKTtcbiAgICAgICAgICBjb21wb25lbnQuZ2V0U3lzdGVtKCkuZ2V0QnlEb20oaCkuZWFjaCh0YXJnZXQgPT4ge1xuICAgICAgICAgICAgaENvbmZpZy5vbkRlaGlnaGxpZ2h0KGNvbXBvbmVudCwgdGFyZ2V0KTtcbiAgICAgICAgICAgIGVtaXQodGFyZ2V0LCBkZWhpZ2hsaWdodCQxKCkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGRlaGlnaGxpZ2h0QWxsID0gKGNvbXBvbmVudCwgaENvbmZpZywgaFN0YXRlKSA9PiBkZWhpZ2hsaWdodEFsbEV4Y2VwdChjb21wb25lbnQsIGhDb25maWcsIGhTdGF0ZSwgW10pO1xuICAgIGNvbnN0IGRlaGlnaGxpZ2h0ID0gKGNvbXBvbmVudCwgaENvbmZpZywgaFN0YXRlLCB0YXJnZXQpID0+IHtcbiAgICAgIGlmIChpc0hpZ2hsaWdodGVkKGNvbXBvbmVudCwgaENvbmZpZywgaFN0YXRlLCB0YXJnZXQpKSB7XG4gICAgICAgIHJlbW92ZSQyKHRhcmdldC5lbGVtZW50LCBoQ29uZmlnLmhpZ2hsaWdodENsYXNzKTtcbiAgICAgICAgaENvbmZpZy5vbkRlaGlnaGxpZ2h0KGNvbXBvbmVudCwgdGFyZ2V0KTtcbiAgICAgICAgZW1pdCh0YXJnZXQsIGRlaGlnaGxpZ2h0JDEoKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoaWdobGlnaHQgPSAoY29tcG9uZW50LCBoQ29uZmlnLCBoU3RhdGUsIHRhcmdldCkgPT4ge1xuICAgICAgZGVoaWdobGlnaHRBbGxFeGNlcHQoY29tcG9uZW50LCBoQ29uZmlnLCBoU3RhdGUsIFt0YXJnZXRdKTtcbiAgICAgIGlmICghaXNIaWdobGlnaHRlZChjb21wb25lbnQsIGhDb25maWcsIGhTdGF0ZSwgdGFyZ2V0KSkge1xuICAgICAgICBhZGQkMih0YXJnZXQuZWxlbWVudCwgaENvbmZpZy5oaWdobGlnaHRDbGFzcyk7XG4gICAgICAgIGhDb25maWcub25IaWdobGlnaHQoY29tcG9uZW50LCB0YXJnZXQpO1xuICAgICAgICBlbWl0KHRhcmdldCwgaGlnaGxpZ2h0JDEoKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoaWdobGlnaHRGaXJzdCA9IChjb21wb25lbnQsIGhDb25maWcsIGhTdGF0ZSkgPT4ge1xuICAgICAgZ2V0Rmlyc3QoY29tcG9uZW50LCBoQ29uZmlnKS5lYWNoKGZpcnN0Q29tcCA9PiB7XG4gICAgICAgIGhpZ2hsaWdodChjb21wb25lbnQsIGhDb25maWcsIGhTdGF0ZSwgZmlyc3RDb21wKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaGlnaGxpZ2h0TGFzdCA9IChjb21wb25lbnQsIGhDb25maWcsIGhTdGF0ZSkgPT4ge1xuICAgICAgZ2V0TGFzdChjb21wb25lbnQsIGhDb25maWcpLmVhY2gobGFzdENvbXAgPT4ge1xuICAgICAgICBoaWdobGlnaHQoY29tcG9uZW50LCBoQ29uZmlnLCBoU3RhdGUsIGxhc3RDb21wKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaGlnaGxpZ2h0QXQgPSAoY29tcG9uZW50LCBoQ29uZmlnLCBoU3RhdGUsIGluZGV4KSA9PiB7XG4gICAgICBnZXRCeUluZGV4KGNvbXBvbmVudCwgaENvbmZpZywgaFN0YXRlLCBpbmRleCkuZm9sZChlcnIgPT4ge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9LCBmaXJzdENvbXAgPT4ge1xuICAgICAgICBoaWdobGlnaHQoY29tcG9uZW50LCBoQ29uZmlnLCBoU3RhdGUsIGZpcnN0Q29tcCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGhpZ2hsaWdodEJ5ID0gKGNvbXBvbmVudCwgaENvbmZpZywgaFN0YXRlLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzKGNvbXBvbmVudCwgaENvbmZpZyk7XG4gICAgICBjb25zdCB0YXJnZXRDb21wID0gZmluZCQ1KGNhbmRpZGF0ZXMsIHByZWRpY2F0ZSk7XG4gICAgICB0YXJnZXRDb21wLmVhY2goYyA9PiB7XG4gICAgICAgIGhpZ2hsaWdodChjb21wb25lbnQsIGhDb25maWcsIGhTdGF0ZSwgYyk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzSGlnaGxpZ2h0ZWQgPSAoY29tcG9uZW50LCBoQ29uZmlnLCBoU3RhdGUsIHF1ZXJ5VGFyZ2V0KSA9PiBoYXMocXVlcnlUYXJnZXQuZWxlbWVudCwgaENvbmZpZy5oaWdobGlnaHRDbGFzcyk7XG4gICAgY29uc3QgZ2V0SGlnaGxpZ2h0ZWQgPSAoY29tcG9uZW50LCBoQ29uZmlnLCBfaFN0YXRlKSA9PiBkZXNjZW5kYW50KGNvbXBvbmVudC5lbGVtZW50LCAnLicgKyBoQ29uZmlnLmhpZ2hsaWdodENsYXNzKS5iaW5kKGUgPT4gY29tcG9uZW50LmdldFN5c3RlbSgpLmdldEJ5RG9tKGUpLnRvT3B0aW9uYWwoKSk7XG4gICAgY29uc3QgZ2V0QnlJbmRleCA9IChjb21wb25lbnQsIGhDb25maWcsIGhTdGF0ZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gZGVzY2VuZGFudHMoY29tcG9uZW50LmVsZW1lbnQsICcuJyArIGhDb25maWcuaXRlbUNsYXNzKTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKGl0ZW1zW2luZGV4XSkuZm9sZCgoKSA9PiBSZXN1bHQuZXJyb3IobmV3IEVycm9yKCdObyBlbGVtZW50IGZvdW5kIHdpdGggaW5kZXggJyArIGluZGV4KSksIGNvbXBvbmVudC5nZXRTeXN0ZW0oKS5nZXRCeURvbSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRGaXJzdCA9IChjb21wb25lbnQsIGhDb25maWcsIF9oU3RhdGUpID0+IGRlc2NlbmRhbnQoY29tcG9uZW50LmVsZW1lbnQsICcuJyArIGhDb25maWcuaXRlbUNsYXNzKS5iaW5kKGUgPT4gY29tcG9uZW50LmdldFN5c3RlbSgpLmdldEJ5RG9tKGUpLnRvT3B0aW9uYWwoKSk7XG4gICAgY29uc3QgZ2V0TGFzdCA9IChjb21wb25lbnQsIGhDb25maWcsIF9oU3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gZGVzY2VuZGFudHMoY29tcG9uZW50LmVsZW1lbnQsICcuJyArIGhDb25maWcuaXRlbUNsYXNzKTtcbiAgICAgIGNvbnN0IGxhc3QgPSBpdGVtcy5sZW5ndGggPiAwID8gT3B0aW9uYWwuc29tZShpdGVtc1tpdGVtcy5sZW5ndGggLSAxXSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICByZXR1cm4gbGFzdC5iaW5kKGMgPT4gY29tcG9uZW50LmdldFN5c3RlbSgpLmdldEJ5RG9tKGMpLnRvT3B0aW9uYWwoKSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXREZWx0YSQyID0gKGNvbXBvbmVudCwgaENvbmZpZywgaFN0YXRlLCBkZWx0YSkgPT4ge1xuICAgICAgY29uc3QgaXRlbXMgPSBkZXNjZW5kYW50cyhjb21wb25lbnQuZWxlbWVudCwgJy4nICsgaENvbmZpZy5pdGVtQ2xhc3MpO1xuICAgICAgY29uc3QgY3VycmVudCA9IGZpbmRJbmRleCQxKGl0ZW1zLCBpdGVtID0+IGhhcyhpdGVtLCBoQ29uZmlnLmhpZ2hsaWdodENsYXNzKSk7XG4gICAgICByZXR1cm4gY3VycmVudC5iaW5kKHNlbGVjdGVkID0+IHtcbiAgICAgICAgY29uc3QgZGVzdCA9IGN5Y2xlQnkoc2VsZWN0ZWQsIGRlbHRhLCAwLCBpdGVtcy5sZW5ndGggLSAxKTtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5nZXRTeXN0ZW0oKS5nZXRCeURvbShpdGVtc1tkZXN0XSkudG9PcHRpb25hbCgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRQcmV2aW91cyA9IChjb21wb25lbnQsIGhDb25maWcsIGhTdGF0ZSkgPT4gZ2V0RGVsdGEkMihjb21wb25lbnQsIGhDb25maWcsIGhTdGF0ZSwgLTEpO1xuICAgIGNvbnN0IGdldE5leHQgPSAoY29tcG9uZW50LCBoQ29uZmlnLCBoU3RhdGUpID0+IGdldERlbHRhJDIoY29tcG9uZW50LCBoQ29uZmlnLCBoU3RhdGUsICsxKTtcbiAgICBjb25zdCBnZXRDYW5kaWRhdGVzID0gKGNvbXBvbmVudCwgaENvbmZpZywgX2hTdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgaXRlbXMgPSBkZXNjZW5kYW50cyhjb21wb25lbnQuZWxlbWVudCwgJy4nICsgaENvbmZpZy5pdGVtQ2xhc3MpO1xuICAgICAgcmV0dXJuIGNhdChtYXAkMihpdGVtcywgaSA9PiBjb21wb25lbnQuZ2V0U3lzdGVtKCkuZ2V0QnlEb20oaSkudG9PcHRpb25hbCgpKSk7XG4gICAgfTtcblxuICAgIHZhciBIaWdobGlnaHRBcGlzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIGRlaGlnaGxpZ2h0QWxsOiBkZWhpZ2hsaWdodEFsbCxcbiAgICAgICAgZGVoaWdobGlnaHQ6IGRlaGlnaGxpZ2h0LFxuICAgICAgICBoaWdobGlnaHQ6IGhpZ2hsaWdodCxcbiAgICAgICAgaGlnaGxpZ2h0Rmlyc3Q6IGhpZ2hsaWdodEZpcnN0LFxuICAgICAgICBoaWdobGlnaHRMYXN0OiBoaWdobGlnaHRMYXN0LFxuICAgICAgICBoaWdobGlnaHRBdDogaGlnaGxpZ2h0QXQsXG4gICAgICAgIGhpZ2hsaWdodEJ5OiBoaWdobGlnaHRCeSxcbiAgICAgICAgaXNIaWdobGlnaHRlZDogaXNIaWdobGlnaHRlZCxcbiAgICAgICAgZ2V0SGlnaGxpZ2h0ZWQ6IGdldEhpZ2hsaWdodGVkLFxuICAgICAgICBnZXRGaXJzdDogZ2V0Rmlyc3QsXG4gICAgICAgIGdldExhc3Q6IGdldExhc3QsXG4gICAgICAgIGdldFByZXZpb3VzOiBnZXRQcmV2aW91cyxcbiAgICAgICAgZ2V0TmV4dDogZ2V0TmV4dCxcbiAgICAgICAgZ2V0Q2FuZGlkYXRlczogZ2V0Q2FuZGlkYXRlc1xuICAgIH0pO1xuXG4gICAgdmFyIEhpZ2hsaWdodFNjaGVtYSA9IFtcbiAgICAgIHJlcXVpcmVkJDEoJ2hpZ2hsaWdodENsYXNzJyksXG4gICAgICByZXF1aXJlZCQxKCdpdGVtQ2xhc3MnKSxcbiAgICAgIG9uSGFuZGxlcignb25IaWdobGlnaHQnKSxcbiAgICAgIG9uSGFuZGxlcignb25EZWhpZ2hsaWdodCcpXG4gICAgXTtcblxuICAgIGNvbnN0IEhpZ2hsaWdodGluZyA9IGNyZWF0ZSQ0KHtcbiAgICAgIGZpZWxkczogSGlnaGxpZ2h0U2NoZW1hLFxuICAgICAgbmFtZTogJ2hpZ2hsaWdodGluZycsXG4gICAgICBhcGlzOiBIaWdobGlnaHRBcGlzXG4gICAgfSk7XG5cbiAgICBjb25zdCBCQUNLU1BBQ0UgPSBbOF07XG4gICAgY29uc3QgVEFCID0gWzldO1xuICAgIGNvbnN0IEVOVEVSID0gWzEzXTtcbiAgICBjb25zdCBFU0NBUEUgPSBbMjddO1xuICAgIGNvbnN0IFNQQUNFID0gWzMyXTtcbiAgICBjb25zdCBMRUZUID0gWzM3XTtcbiAgICBjb25zdCBVUCA9IFszOF07XG4gICAgY29uc3QgUklHSFQgPSBbMzldO1xuICAgIGNvbnN0IERPV04gPSBbNDBdO1xuXG4gICAgY29uc3QgY3ljbGVQcmV2ID0gKHZhbHVlcywgaW5kZXgsIHByZWRpY2F0ZSkgPT4ge1xuICAgICAgY29uc3QgYmVmb3JlID0gcmV2ZXJzZSh2YWx1ZXMuc2xpY2UoMCwgaW5kZXgpKTtcbiAgICAgIGNvbnN0IGFmdGVyID0gcmV2ZXJzZSh2YWx1ZXMuc2xpY2UoaW5kZXggKyAxKSk7XG4gICAgICByZXR1cm4gZmluZCQ1KGJlZm9yZS5jb25jYXQoYWZ0ZXIpLCBwcmVkaWNhdGUpO1xuICAgIH07XG4gICAgY29uc3QgdHJ5UHJldiA9ICh2YWx1ZXMsIGluZGV4LCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGNvbnN0IGJlZm9yZSA9IHJldmVyc2UodmFsdWVzLnNsaWNlKDAsIGluZGV4KSk7XG4gICAgICByZXR1cm4gZmluZCQ1KGJlZm9yZSwgcHJlZGljYXRlKTtcbiAgICB9O1xuICAgIGNvbnN0IGN5Y2xlTmV4dCA9ICh2YWx1ZXMsIGluZGV4LCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGNvbnN0IGJlZm9yZSA9IHZhbHVlcy5zbGljZSgwLCBpbmRleCk7XG4gICAgICBjb25zdCBhZnRlciA9IHZhbHVlcy5zbGljZShpbmRleCArIDEpO1xuICAgICAgcmV0dXJuIGZpbmQkNShhZnRlci5jb25jYXQoYmVmb3JlKSwgcHJlZGljYXRlKTtcbiAgICB9O1xuICAgIGNvbnN0IHRyeU5leHQgPSAodmFsdWVzLCBpbmRleCwgcHJlZGljYXRlKSA9PiB7XG4gICAgICBjb25zdCBhZnRlciA9IHZhbHVlcy5zbGljZShpbmRleCArIDEpO1xuICAgICAgcmV0dXJuIGZpbmQkNShhZnRlciwgcHJlZGljYXRlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaW5TZXQgPSBrZXlzID0+IGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHJhdyA9IGV2ZW50LnJhdztcbiAgICAgIHJldHVybiBjb250YWlucyQyKGtleXMsIHJhdy53aGljaCk7XG4gICAgfTtcbiAgICBjb25zdCBhbmQgPSBwcmVkcyA9PiBldmVudCA9PiBmb3JhbGwocHJlZHMsIHByZWQgPT4gcHJlZChldmVudCkpO1xuICAgIGNvbnN0IGlzU2hpZnQgPSBldmVudCA9PiB7XG4gICAgICBjb25zdCByYXcgPSBldmVudC5yYXc7XG4gICAgICByZXR1cm4gcmF3LnNoaWZ0S2V5ID09PSB0cnVlO1xuICAgIH07XG4gICAgY29uc3QgaXNDb250cm9sID0gZXZlbnQgPT4ge1xuICAgICAgY29uc3QgcmF3ID0gZXZlbnQucmF3O1xuICAgICAgcmV0dXJuIHJhdy5jdHJsS2V5ID09PSB0cnVlO1xuICAgIH07XG4gICAgY29uc3QgaXNOb3RTaGlmdCA9IG5vdChpc1NoaWZ0KTtcblxuICAgIGNvbnN0IHJ1bGUgPSAobWF0Y2hlcywgYWN0aW9uKSA9PiAoe1xuICAgICAgbWF0Y2hlcyxcbiAgICAgIGNsYXNzaWZpY2F0aW9uOiBhY3Rpb25cbiAgICB9KTtcbiAgICBjb25zdCBjaG9vc2UgPSAodHJhbnNpdGlvbnMsIGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uID0gZmluZCQ1KHRyYW5zaXRpb25zLCB0ID0+IHQubWF0Y2hlcyhldmVudCkpO1xuICAgICAgcmV0dXJuIHRyYW5zaXRpb24ubWFwKHQgPT4gdC5jbGFzc2lmaWNhdGlvbik7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlcG9ydEZvY3VzU2hpZnRpbmcgPSAoY29tcG9uZW50LCBwcmV2Rm9jdXMsIG5ld0ZvY3VzKSA9PiB7XG4gICAgICBjb25zdCBub0NoYW5nZSA9IHByZXZGb2N1cy5leGlzdHMocCA9PiBuZXdGb2N1cy5leGlzdHMobiA9PiBlcShuLCBwKSkpO1xuICAgICAgaWYgKCFub0NoYW5nZSkge1xuICAgICAgICBlbWl0V2l0aChjb21wb25lbnQsIGZvY3VzU2hpZnRlZCgpLCB7XG4gICAgICAgICAgcHJldkZvY3VzLFxuICAgICAgICAgIG5ld0ZvY3VzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZG9tJDIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBnZXQgPSBjb21wb25lbnQgPT4gc2VhcmNoKGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgIGNvbnN0IHNldCA9IChjb21wb25lbnQsIGZvY3VzZWUpID0+IHtcbiAgICAgICAgY29uc3QgcHJldkZvY3VzID0gZ2V0KGNvbXBvbmVudCk7XG4gICAgICAgIGNvbXBvbmVudC5nZXRTeXN0ZW0oKS50cmlnZ2VyRm9jdXMoZm9jdXNlZSwgY29tcG9uZW50LmVsZW1lbnQpO1xuICAgICAgICBjb25zdCBuZXdGb2N1cyA9IGdldChjb21wb25lbnQpO1xuICAgICAgICByZXBvcnRGb2N1c1NoaWZ0aW5nKGNvbXBvbmVudCwgcHJldkZvY3VzLCBuZXdGb2N1cyk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0LFxuICAgICAgICBzZXRcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBoaWdobGlnaHRzID0gKCkgPT4ge1xuICAgICAgY29uc3QgZ2V0ID0gY29tcG9uZW50ID0+IEhpZ2hsaWdodGluZy5nZXRIaWdobGlnaHRlZChjb21wb25lbnQpLm1hcChpdGVtID0+IGl0ZW0uZWxlbWVudCk7XG4gICAgICBjb25zdCBzZXQgPSAoY29tcG9uZW50LCBlbGVtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHByZXZGb2N1cyA9IGdldChjb21wb25lbnQpO1xuICAgICAgICBjb21wb25lbnQuZ2V0U3lzdGVtKCkuZ2V0QnlEb20oZWxlbWVudCkuZm9sZChub29wLCBpdGVtID0+IHtcbiAgICAgICAgICBIaWdobGlnaHRpbmcuaGlnaGxpZ2h0KGNvbXBvbmVudCwgaXRlbSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBuZXdGb2N1cyA9IGdldChjb21wb25lbnQpO1xuICAgICAgICByZXBvcnRGb2N1c1NoaWZ0aW5nKGNvbXBvbmVudCwgcHJldkZvY3VzLCBuZXdGb2N1cyk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0LFxuICAgICAgICBzZXRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBGb2N1c0luc2lkZU1vZGVzO1xuICAgIChmdW5jdGlvbiAoRm9jdXNJbnNpZGVNb2Rlcykge1xuICAgICAgRm9jdXNJbnNpZGVNb2Rlc1snT25Gb2N1c01vZGUnXSA9ICdvbkZvY3VzJztcbiAgICAgIEZvY3VzSW5zaWRlTW9kZXNbJ09uRW50ZXJPclNwYWNlTW9kZSddID0gJ29uRW50ZXJPclNwYWNlJztcbiAgICAgIEZvY3VzSW5zaWRlTW9kZXNbJ09uQXBpTW9kZSddID0gJ29uQXBpJztcbiAgICB9KEZvY3VzSW5zaWRlTW9kZXMgfHwgKEZvY3VzSW5zaWRlTW9kZXMgPSB7fSkpKTtcblxuICAgIGNvbnN0IHR5cGljYWwgPSAoaW5mb1NjaGVtYSwgc3RhdGVJbml0LCBnZXRLZXlkb3duUnVsZXMsIGdldEtleXVwUnVsZXMsIG9wdEZvY3VzSW4pID0+IHtcbiAgICAgIGNvbnN0IHNjaGVtYSA9ICgpID0+IGluZm9TY2hlbWEuY29uY2F0KFtcbiAgICAgICAgZGVmYXVsdGVkKCdmb2N1c01hbmFnZXInLCBkb20kMigpKSxcbiAgICAgICAgZGVmYXVsdGVkT2YoJ2ZvY3VzSW5zaWRlJywgJ29uRm9jdXMnLCB2YWx1ZU9mKHZhbCA9PiBjb250YWlucyQyKFtcbiAgICAgICAgICAnb25Gb2N1cycsXG4gICAgICAgICAgJ29uRW50ZXJPclNwYWNlJyxcbiAgICAgICAgICAnb25BcGknXG4gICAgICAgIF0sIHZhbCkgPyBSZXN1bHQudmFsdWUodmFsKSA6IFJlc3VsdC5lcnJvcignSW52YWxpZCB2YWx1ZSBmb3IgZm9jdXNJbnNpZGUnKSkpLFxuICAgICAgICBvdXRwdXQkMSgnaGFuZGxlcicsIG1lKSxcbiAgICAgICAgb3V0cHV0JDEoJ3N0YXRlJywgc3RhdGVJbml0KSxcbiAgICAgICAgb3V0cHV0JDEoJ3NlbmRGb2N1c0luJywgb3B0Rm9jdXNJbilcbiAgICAgIF0pO1xuICAgICAgY29uc3QgcHJvY2Vzc0tleSA9IChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50LCBnZXRSdWxlcywga2V5aW5nQ29uZmlnLCBrZXlpbmdTdGF0ZSkgPT4ge1xuICAgICAgICBjb25zdCBydWxlcyA9IGdldFJ1bGVzKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIGtleWluZ0NvbmZpZywga2V5aW5nU3RhdGUpO1xuICAgICAgICByZXR1cm4gY2hvb3NlKHJ1bGVzLCBzaW11bGF0ZWRFdmVudC5ldmVudCkuYmluZChydWxlID0+IHJ1bGUoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwga2V5aW5nQ29uZmlnLCBrZXlpbmdTdGF0ZSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHRvRXZlbnRzID0gKGtleWluZ0NvbmZpZywga2V5aW5nU3RhdGUpID0+IHtcbiAgICAgICAgY29uc3Qgb25Gb2N1c0hhbmRsZXIgPSBrZXlpbmdDb25maWcuZm9jdXNJbnNpZGUgIT09IEZvY3VzSW5zaWRlTW9kZXMuT25Gb2N1c01vZGUgPyBPcHRpb25hbC5ub25lKCkgOiBvcHRGb2N1c0luKGtleWluZ0NvbmZpZykubWFwKGZvY3VzSW4gPT4gcnVuJDEoZm9jdXMkNCgpLCAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgIGZvY3VzSW4oY29tcG9uZW50LCBrZXlpbmdDb25maWcsIGtleWluZ1N0YXRlKTtcbiAgICAgICAgICBzaW11bGF0ZWRFdmVudC5zdG9wKCk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgY29uc3QgdHJ5R29JbnNpZGVDb21wb25lbnQgPSAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzRW50ZXJPclNwYWNlID0gaW5TZXQoU1BBQ0UuY29uY2F0KEVOVEVSKSkoc2ltdWxhdGVkRXZlbnQuZXZlbnQpO1xuICAgICAgICAgIGlmIChrZXlpbmdDb25maWcuZm9jdXNJbnNpZGUgPT09IEZvY3VzSW5zaWRlTW9kZXMuT25FbnRlck9yU3BhY2VNb2RlICYmIGlzRW50ZXJPclNwYWNlICYmIGlzU291cmNlKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpKSB7XG4gICAgICAgICAgICBvcHRGb2N1c0luKGtleWluZ0NvbmZpZykuZWFjaChmb2N1c0luID0+IHtcbiAgICAgICAgICAgICAgZm9jdXNJbihjb21wb25lbnQsIGtleWluZ0NvbmZpZywga2V5aW5nU3RhdGUpO1xuICAgICAgICAgICAgICBzaW11bGF0ZWRFdmVudC5zdG9wKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGtleWJvYXJkRXZlbnRzID0gW1xuICAgICAgICAgIHJ1biQxKGtleWRvd24oKSwgKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHByb2Nlc3NLZXkoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgZ2V0S2V5ZG93blJ1bGVzLCBrZXlpbmdDb25maWcsIGtleWluZ1N0YXRlKS5mb2xkKCgpID0+IHtcbiAgICAgICAgICAgICAgdHJ5R29JbnNpZGVDb21wb25lbnQoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCk7XG4gICAgICAgICAgICB9LCBfID0+IHtcbiAgICAgICAgICAgICAgc2ltdWxhdGVkRXZlbnQuc3RvcCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVuJDEoa2V5dXAoKSwgKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHByb2Nlc3NLZXkoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgZ2V0S2V5dXBSdWxlcywga2V5aW5nQ29uZmlnLCBrZXlpbmdTdGF0ZSkuZWFjaChfID0+IHtcbiAgICAgICAgICAgICAgc2ltdWxhdGVkRXZlbnQuc3RvcCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIGRlcml2ZSQyKG9uRm9jdXNIYW5kbGVyLnRvQXJyYXkoKS5jb25jYXQoa2V5Ym9hcmRFdmVudHMpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBtZSA9IHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBwcm9jZXNzS2V5LFxuICAgICAgICB0b0V2ZW50c1xuICAgICAgfTtcbiAgICAgIHJldHVybiBtZTtcbiAgICB9O1xuXG4gICAgY29uc3QgY3JlYXRlJDIgPSBjeWNsaWNGaWVsZCA9PiB7XG4gICAgICBjb25zdCBzY2hlbWEgPSBbXG4gICAgICAgIG9wdGlvbiQzKCdvbkVzY2FwZScpLFxuICAgICAgICBvcHRpb24kMygnb25FbnRlcicpLFxuICAgICAgICBkZWZhdWx0ZWQoJ3NlbGVjdG9yJywgJ1tkYXRhLWFsbG95LXRhYnN0b3A9XCJ0cnVlXCJdOm5vdCg6ZGlzYWJsZWQpJyksXG4gICAgICAgIGRlZmF1bHRlZCgnZmlyc3RUYWJzdG9wJywgMCksXG4gICAgICAgIGRlZmF1bHRlZCgndXNlVGFic3RvcEF0JywgYWx3YXlzKSxcbiAgICAgICAgb3B0aW9uJDMoJ3Zpc2liaWxpdHlTZWxlY3RvcicpXG4gICAgICBdLmNvbmNhdChbY3ljbGljRmllbGRdKTtcbiAgICAgIGNvbnN0IGlzVmlzaWJsZSA9ICh0YWJiaW5nQ29uZmlnLCBlbGVtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRhYmJpbmdDb25maWcudmlzaWJpbGl0eVNlbGVjdG9yLmJpbmQoc2VsID0+IGNsb3Nlc3QkMShlbGVtZW50LCBzZWwpKS5nZXRPcihlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGdldCRkKHRhcmdldCkgPiAwO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZpbmRJbml0aWFsID0gKGNvbXBvbmVudCwgdGFiYmluZ0NvbmZpZykgPT4ge1xuICAgICAgICBjb25zdCB0YWJzdG9wcyA9IGRlc2NlbmRhbnRzKGNvbXBvbmVudC5lbGVtZW50LCB0YWJiaW5nQ29uZmlnLnNlbGVjdG9yKTtcbiAgICAgICAgY29uc3QgdmlzaWJsZXMgPSBmaWx0ZXIkMih0YWJzdG9wcywgZWxlbSA9PiBpc1Zpc2libGUodGFiYmluZ0NvbmZpZywgZWxlbSkpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbSh2aXNpYmxlc1t0YWJiaW5nQ29uZmlnLmZpcnN0VGFic3RvcF0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZpbmRDdXJyZW50ID0gKGNvbXBvbmVudCwgdGFiYmluZ0NvbmZpZykgPT4gdGFiYmluZ0NvbmZpZy5mb2N1c01hbmFnZXIuZ2V0KGNvbXBvbmVudCkuYmluZChlbGVtID0+IGNsb3Nlc3QkMShlbGVtLCB0YWJiaW5nQ29uZmlnLnNlbGVjdG9yKSk7XG4gICAgICBjb25zdCBpc1RhYnN0b3AgPSAodGFiYmluZ0NvbmZpZywgZWxlbWVudCkgPT4gaXNWaXNpYmxlKHRhYmJpbmdDb25maWcsIGVsZW1lbnQpICYmIHRhYmJpbmdDb25maWcudXNlVGFic3RvcEF0KGVsZW1lbnQpO1xuICAgICAgY29uc3QgZm9jdXNJbiA9IChjb21wb25lbnQsIHRhYmJpbmdDb25maWcsIF90YWJiaW5nU3RhdGUpID0+IHtcbiAgICAgICAgZmluZEluaXRpYWwoY29tcG9uZW50LCB0YWJiaW5nQ29uZmlnKS5lYWNoKHRhcmdldCA9PiB7XG4gICAgICAgICAgdGFiYmluZ0NvbmZpZy5mb2N1c01hbmFnZXIuc2V0KGNvbXBvbmVudCwgdGFyZ2V0KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ29Gcm9tVGFic3RvcCA9IChjb21wb25lbnQsIHRhYnN0b3BzLCBzdG9wSW5kZXgsIHRhYmJpbmdDb25maWcsIGN5Y2xlKSA9PiBjeWNsZSh0YWJzdG9wcywgc3RvcEluZGV4LCBlbGVtID0+IGlzVGFic3RvcCh0YWJiaW5nQ29uZmlnLCBlbGVtKSkuZm9sZCgoKSA9PiB0YWJiaW5nQ29uZmlnLmN5Y2xpYyA/IE9wdGlvbmFsLnNvbWUodHJ1ZSkgOiBPcHRpb25hbC5ub25lKCksIHRhcmdldCA9PiB7XG4gICAgICAgIHRhYmJpbmdDb25maWcuZm9jdXNNYW5hZ2VyLnNldChjb21wb25lbnQsIHRhcmdldCk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHRydWUpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBnbyA9IChjb21wb25lbnQsIF9zaW11bGF0ZWRFdmVudCwgdGFiYmluZ0NvbmZpZywgY3ljbGUpID0+IHtcbiAgICAgICAgY29uc3QgdGFic3RvcHMgPSBkZXNjZW5kYW50cyhjb21wb25lbnQuZWxlbWVudCwgdGFiYmluZ0NvbmZpZy5zZWxlY3Rvcik7XG4gICAgICAgIHJldHVybiBmaW5kQ3VycmVudChjb21wb25lbnQsIHRhYmJpbmdDb25maWcpLmJpbmQodGFic3RvcCA9PiB7XG4gICAgICAgICAgY29uc3Qgb3B0U3RvcEluZGV4ID0gZmluZEluZGV4JDEodGFic3RvcHMsIGN1cnJ5KGVxLCB0YWJzdG9wKSk7XG4gICAgICAgICAgcmV0dXJuIG9wdFN0b3BJbmRleC5iaW5kKHN0b3BJbmRleCA9PiBnb0Zyb21UYWJzdG9wKGNvbXBvbmVudCwgdGFic3RvcHMsIHN0b3BJbmRleCwgdGFiYmluZ0NvbmZpZywgY3ljbGUpKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ29CYWNrd2FyZHMgPSAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgdGFiYmluZ0NvbmZpZykgPT4ge1xuICAgICAgICBjb25zdCBuYXZpZ2F0ZSA9IHRhYmJpbmdDb25maWcuY3ljbGljID8gY3ljbGVQcmV2IDogdHJ5UHJldjtcbiAgICAgICAgcmV0dXJuIGdvKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIHRhYmJpbmdDb25maWcsIG5hdmlnYXRlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnb0ZvcndhcmRzID0gKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIHRhYmJpbmdDb25maWcpID0+IHtcbiAgICAgICAgY29uc3QgbmF2aWdhdGUgPSB0YWJiaW5nQ29uZmlnLmN5Y2xpYyA/IGN5Y2xlTmV4dCA6IHRyeU5leHQ7XG4gICAgICAgIHJldHVybiBnbyhjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50LCB0YWJiaW5nQ29uZmlnLCBuYXZpZ2F0ZSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNGaXJzdENoaWxkID0gZWxlbSA9PiBwYXJlbnROb2RlKGVsZW0pLmJpbmQoZmlyc3RDaGlsZCkuZXhpc3RzKGNoaWxkID0+IGVxKGNoaWxkLCBlbGVtKSk7XG4gICAgICBjb25zdCBnb0Zyb21Qc2V1ZG9UYWJzdG9wID0gKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIHRhYmJpbmdDb25maWcpID0+IGZpbmRDdXJyZW50KGNvbXBvbmVudCwgdGFiYmluZ0NvbmZpZykuZmlsdGVyKGVsZW0gPT4gIXRhYmJpbmdDb25maWcudXNlVGFic3RvcEF0KGVsZW0pKS5iaW5kKGVsZW0gPT4gKGlzRmlyc3RDaGlsZChlbGVtKSA/IGdvQmFja3dhcmRzIDogZ29Gb3J3YXJkcykoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgdGFiYmluZ0NvbmZpZykpO1xuICAgICAgY29uc3QgZXhlY3V0ZSA9IChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50LCB0YWJiaW5nQ29uZmlnKSA9PiB0YWJiaW5nQ29uZmlnLm9uRW50ZXIuYmluZChmID0+IGYoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCkpO1xuICAgICAgY29uc3QgZXhpdCA9IChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50LCB0YWJiaW5nQ29uZmlnKSA9PiB0YWJiaW5nQ29uZmlnLm9uRXNjYXBlLmJpbmQoZiA9PiBmKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpKTtcbiAgICAgIGNvbnN0IGdldEtleWRvd25SdWxlcyA9IGNvbnN0YW50JDEoW1xuICAgICAgICBydWxlKGFuZChbXG4gICAgICAgICAgaXNTaGlmdCxcbiAgICAgICAgICBpblNldChUQUIpXG4gICAgICAgIF0pLCBnb0JhY2t3YXJkcyksXG4gICAgICAgIHJ1bGUoaW5TZXQoVEFCKSwgZ29Gb3J3YXJkcyksXG4gICAgICAgIHJ1bGUoYW5kKFtcbiAgICAgICAgICBpc05vdFNoaWZ0LFxuICAgICAgICAgIGluU2V0KEVOVEVSKVxuICAgICAgICBdKSwgZXhlY3V0ZSlcbiAgICAgIF0pO1xuICAgICAgY29uc3QgZ2V0S2V5dXBSdWxlcyA9IGNvbnN0YW50JDEoW1xuICAgICAgICBydWxlKGluU2V0KEVTQ0FQRSksIGV4aXQpLFxuICAgICAgICBydWxlKGluU2V0KFRBQiksIGdvRnJvbVBzZXVkb1RhYnN0b3ApXG4gICAgICBdKTtcbiAgICAgIHJldHVybiB0eXBpY2FsKHNjaGVtYSwgTm9TdGF0ZS5pbml0LCBnZXRLZXlkb3duUnVsZXMsIGdldEtleXVwUnVsZXMsICgpID0+IE9wdGlvbmFsLnNvbWUoZm9jdXNJbikpO1xuICAgIH07XG5cbiAgICB2YXIgQWN5Y2xpY1R5cGUgPSBjcmVhdGUkMihjdXN0b21GaWVsZCgnY3ljbGljJywgbmV2ZXIpKTtcblxuICAgIHZhciBDeWNsaWNUeXBlID0gY3JlYXRlJDIoY3VzdG9tRmllbGQoJ2N5Y2xpYycsIGFsd2F5cykpO1xuXG4gICAgY29uc3QgZG9EZWZhdWx0RXhlY3V0ZSA9IChjb21wb25lbnQsIF9zaW11bGF0ZWRFdmVudCwgZm9jdXNlZCkgPT4ge1xuICAgICAgZGlzcGF0Y2goY29tcG9uZW50LCBmb2N1c2VkLCBleGVjdXRlJDUoKSk7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICB9O1xuICAgIGNvbnN0IGRlZmF1bHRFeGVjdXRlID0gKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIGZvY3VzZWQpID0+IHtcbiAgICAgIGNvbnN0IGlzQ29tcGxleCA9IGluc2lkZShmb2N1c2VkKSAmJiBpblNldChTUEFDRSkoc2ltdWxhdGVkRXZlbnQuZXZlbnQpO1xuICAgICAgcmV0dXJuIGlzQ29tcGxleCA/IE9wdGlvbmFsLm5vbmUoKSA6IGRvRGVmYXVsdEV4ZWN1dGUoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgZm9jdXNlZCk7XG4gICAgfTtcbiAgICBjb25zdCBzdG9wRXZlbnRGb3JGaXJlZm94ID0gKF9jb21wb25lbnQsIF9zaW11bGF0ZWRFdmVudCkgPT4gT3B0aW9uYWwuc29tZSh0cnVlKTtcblxuICAgIGNvbnN0IHNjaGVtYSR2ID0gW1xuICAgICAgZGVmYXVsdGVkKCdleGVjdXRlJywgZGVmYXVsdEV4ZWN1dGUpLFxuICAgICAgZGVmYXVsdGVkKCd1c2VTcGFjZScsIGZhbHNlKSxcbiAgICAgIGRlZmF1bHRlZCgndXNlRW50ZXInLCB0cnVlKSxcbiAgICAgIGRlZmF1bHRlZCgndXNlQ29udHJvbEVudGVyJywgZmFsc2UpLFxuICAgICAgZGVmYXVsdGVkKCd1c2VEb3duJywgZmFsc2UpXG4gICAgXTtcbiAgICBjb25zdCBleGVjdXRlJDQgPSAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgZXhlY3V0ZUNvbmZpZykgPT4gZXhlY3V0ZUNvbmZpZy5leGVjdXRlKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICBjb25zdCBnZXRLZXlkb3duUnVsZXMkNSA9IChjb21wb25lbnQsIF9zaW11bGF0ZWRFdmVudCwgZXhlY3V0ZUNvbmZpZywgX2V4ZWN1dGVTdGF0ZSkgPT4ge1xuICAgICAgY29uc3Qgc3BhY2VFeGVjID0gZXhlY3V0ZUNvbmZpZy51c2VTcGFjZSAmJiAhaW5zaWRlKGNvbXBvbmVudC5lbGVtZW50KSA/IFNQQUNFIDogW107XG4gICAgICBjb25zdCBlbnRlckV4ZWMgPSBleGVjdXRlQ29uZmlnLnVzZUVudGVyID8gRU5URVIgOiBbXTtcbiAgICAgIGNvbnN0IGRvd25FeGVjID0gZXhlY3V0ZUNvbmZpZy51c2VEb3duID8gRE9XTiA6IFtdO1xuICAgICAgY29uc3QgZXhlY0tleXMgPSBzcGFjZUV4ZWMuY29uY2F0KGVudGVyRXhlYykuY29uY2F0KGRvd25FeGVjKTtcbiAgICAgIHJldHVybiBbcnVsZShpblNldChleGVjS2V5cyksIGV4ZWN1dGUkNCldLmNvbmNhdChleGVjdXRlQ29uZmlnLnVzZUNvbnRyb2xFbnRlciA/IFtydWxlKGFuZChbXG4gICAgICAgICAgaXNDb250cm9sLFxuICAgICAgICAgIGluU2V0KEVOVEVSKVxuICAgICAgICBdKSwgZXhlY3V0ZSQ0KV0gOiBbXSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRLZXl1cFJ1bGVzJDUgPSAoY29tcG9uZW50LCBfc2ltdWxhdGVkRXZlbnQsIGV4ZWN1dGVDb25maWcsIF9leGVjdXRlU3RhdGUpID0+IGV4ZWN1dGVDb25maWcudXNlU3BhY2UgJiYgIWluc2lkZShjb21wb25lbnQuZWxlbWVudCkgPyBbcnVsZShpblNldChTUEFDRSksIHN0b3BFdmVudEZvckZpcmVmb3gpXSA6IFtdO1xuICAgIHZhciBFeGVjdXRpb25UeXBlID0gdHlwaWNhbChzY2hlbWEkdiwgTm9TdGF0ZS5pbml0LCBnZXRLZXlkb3duUnVsZXMkNSwgZ2V0S2V5dXBSdWxlcyQ1LCAoKSA9PiBPcHRpb25hbC5ub25lKCkpO1xuXG4gICAgY29uc3QgZmxhdGdyaWQkMSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBzZXRHcmlkU2l6ZSA9IChudW1Sb3dzLCBudW1Db2x1bW5zKSA9PiB7XG4gICAgICAgIGRpbWVuc2lvbnMuc2V0KHtcbiAgICAgICAgICBudW1Sb3dzLFxuICAgICAgICAgIG51bUNvbHVtbnNcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0TnVtUm93cyA9ICgpID0+IGRpbWVuc2lvbnMuZ2V0KCkubWFwKGQgPT4gZC5udW1Sb3dzKTtcbiAgICAgIGNvbnN0IGdldE51bUNvbHVtbnMgPSAoKSA9PiBkaW1lbnNpb25zLmdldCgpLm1hcChkID0+IGQubnVtQ29sdW1ucyk7XG4gICAgICByZXR1cm4gbnUkOCh7XG4gICAgICAgIHJlYWRTdGF0ZTogKCkgPT4gZGltZW5zaW9ucy5nZXQoKS5tYXAoZCA9PiAoe1xuICAgICAgICAgIG51bVJvd3M6IFN0cmluZyhkLm51bVJvd3MpLFxuICAgICAgICAgIG51bUNvbHVtbnM6IFN0cmluZyhkLm51bUNvbHVtbnMpXG4gICAgICAgIH0pKS5nZXRPcih7XG4gICAgICAgICAgbnVtUm93czogJz8nLFxuICAgICAgICAgIG51bUNvbHVtbnM6ICc/J1xuICAgICAgICB9KSxcbiAgICAgICAgc2V0R3JpZFNpemUsXG4gICAgICAgIGdldE51bVJvd3MsXG4gICAgICAgIGdldE51bUNvbHVtbnNcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW5pdCRkID0gc3BlYyA9PiBzcGVjLnN0YXRlKHNwZWMpO1xuXG4gICAgdmFyIEtleWluZ1N0YXRlID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIGZsYXRncmlkOiBmbGF0Z3JpZCQxLFxuICAgICAgICBpbml0OiBpbml0JGRcbiAgICB9KTtcblxuICAgIGNvbnN0IHVzZUggPSBtb3ZlbWVudCA9PiAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgY29uZmlnLCBzdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgbW92ZSA9IG1vdmVtZW50KGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgIHJldHVybiB1c2UobW92ZSwgY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgY29uZmlnLCBzdGF0ZSk7XG4gICAgfTtcbiAgICBjb25zdCB3ZXN0JDEgPSAobW92ZUxlZnQsIG1vdmVSaWdodCkgPT4ge1xuICAgICAgY29uc3QgbW92ZW1lbnQgPSBvbkRpcmVjdGlvbihtb3ZlTGVmdCwgbW92ZVJpZ2h0KTtcbiAgICAgIHJldHVybiB1c2VIKG1vdmVtZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IGVhc3QkMSA9IChtb3ZlTGVmdCwgbW92ZVJpZ2h0KSA9PiB7XG4gICAgICBjb25zdCBtb3ZlbWVudCA9IG9uRGlyZWN0aW9uKG1vdmVSaWdodCwgbW92ZUxlZnQpO1xuICAgICAgcmV0dXJuIHVzZUgobW92ZW1lbnQpO1xuICAgIH07XG4gICAgY29uc3QgdXNlViA9IG1vdmUgPT4gKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIGNvbmZpZywgc3RhdGUpID0+IHVzZShtb3ZlLCBjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50LCBjb25maWcsIHN0YXRlKTtcbiAgICBjb25zdCB1c2UgPSAobW92ZSwgY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgY29uZmlnLCBzdGF0ZSkgPT4ge1xuICAgICAgY29uc3Qgb3V0Y29tZSA9IGNvbmZpZy5mb2N1c01hbmFnZXIuZ2V0KGNvbXBvbmVudCkuYmluZChmb2N1c2VkID0+IG1vdmUoY29tcG9uZW50LmVsZW1lbnQsIGZvY3VzZWQsIGNvbmZpZywgc3RhdGUpKTtcbiAgICAgIHJldHVybiBvdXRjb21lLm1hcChuZXdGb2N1cyA9PiB7XG4gICAgICAgIGNvbmZpZy5mb2N1c01hbmFnZXIuc2V0KGNvbXBvbmVudCwgbmV3Rm9jdXMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgbm9ydGgkMSA9IHVzZVY7XG4gICAgY29uc3Qgc291dGgkMSA9IHVzZVY7XG4gICAgY29uc3QgbW92ZSQxID0gdXNlVjtcblxuICAgIGNvbnN0IGlzSGlkZGVuJDEgPSBkb20gPT4gZG9tLm9mZnNldFdpZHRoIDw9IDAgJiYgZG9tLm9mZnNldEhlaWdodCA8PSAwO1xuICAgIGNvbnN0IGlzVmlzaWJsZSA9IGVsZW1lbnQgPT4gIWlzSGlkZGVuJDEoZWxlbWVudC5kb20pO1xuXG4gICAgY29uc3QgbG9jYXRlID0gKGNhbmRpZGF0ZXMsIHByZWRpY2F0ZSkgPT4gZmluZEluZGV4JDEoY2FuZGlkYXRlcywgcHJlZGljYXRlKS5tYXAoaW5kZXggPT4gKHtcbiAgICAgIGluZGV4LFxuICAgICAgY2FuZGlkYXRlc1xuICAgIH0pKTtcblxuICAgIGNvbnN0IGxvY2F0ZVZpc2libGUgPSAoY29udGFpbmVyLCBjdXJyZW50LCBzZWxlY3RvcikgPT4ge1xuICAgICAgY29uc3QgcHJlZGljYXRlID0geCA9PiBlcSh4LCBjdXJyZW50KTtcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBkZXNjZW5kYW50cyhjb250YWluZXIsIHNlbGVjdG9yKTtcbiAgICAgIGNvbnN0IHZpc2libGUgPSBmaWx0ZXIkMihjYW5kaWRhdGVzLCBpc1Zpc2libGUpO1xuICAgICAgcmV0dXJuIGxvY2F0ZSh2aXNpYmxlLCBwcmVkaWNhdGUpO1xuICAgIH07XG4gICAgY29uc3QgZmluZEluZGV4ID0gKGVsZW1lbnRzLCB0YXJnZXQpID0+IGZpbmRJbmRleCQxKGVsZW1lbnRzLCBlbGVtID0+IGVxKHRhcmdldCwgZWxlbSkpO1xuXG4gICAgY29uc3Qgd2l0aEdyaWQgPSAodmFsdWVzLCBpbmRleCwgbnVtQ29scywgZikgPT4ge1xuICAgICAgY29uc3Qgb2xkUm93ID0gTWF0aC5mbG9vcihpbmRleCAvIG51bUNvbHMpO1xuICAgICAgY29uc3Qgb2xkQ29sdW1uID0gaW5kZXggJSBudW1Db2xzO1xuICAgICAgcmV0dXJuIGYob2xkUm93LCBvbGRDb2x1bW4pLmJpbmQoYWRkcmVzcyA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gYWRkcmVzcy5yb3cgKiBudW1Db2xzICsgYWRkcmVzcy5jb2x1bW47XG4gICAgICAgIHJldHVybiBuZXdJbmRleCA+PSAwICYmIG5ld0luZGV4IDwgdmFsdWVzLmxlbmd0aCA/IE9wdGlvbmFsLnNvbWUodmFsdWVzW25ld0luZGV4XSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGN5Y2xlSG9yaXpvbnRhbCQxID0gKHZhbHVlcywgaW5kZXgsIG51bVJvd3MsIG51bUNvbHMsIGRlbHRhKSA9PiB3aXRoR3JpZCh2YWx1ZXMsIGluZGV4LCBudW1Db2xzLCAob2xkUm93LCBvbGRDb2x1bW4pID0+IHtcbiAgICAgIGNvbnN0IG9uTGFzdFJvdyA9IG9sZFJvdyA9PT0gbnVtUm93cyAtIDE7XG4gICAgICBjb25zdCBjb2xzSW5Sb3cgPSBvbkxhc3RSb3cgPyB2YWx1ZXMubGVuZ3RoIC0gb2xkUm93ICogbnVtQ29scyA6IG51bUNvbHM7XG4gICAgICBjb25zdCBuZXdDb2x1bW4gPSBjeWNsZUJ5KG9sZENvbHVtbiwgZGVsdGEsIDAsIGNvbHNJblJvdyAtIDEpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICByb3c6IG9sZFJvdyxcbiAgICAgICAgY29sdW1uOiBuZXdDb2x1bW5cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IGN5Y2xlVmVydGljYWwkMSA9ICh2YWx1ZXMsIGluZGV4LCBudW1Sb3dzLCBudW1Db2xzLCBkZWx0YSkgPT4gd2l0aEdyaWQodmFsdWVzLCBpbmRleCwgbnVtQ29scywgKG9sZFJvdywgb2xkQ29sdW1uKSA9PiB7XG4gICAgICBjb25zdCBuZXdSb3cgPSBjeWNsZUJ5KG9sZFJvdywgZGVsdGEsIDAsIG51bVJvd3MgLSAxKTtcbiAgICAgIGNvbnN0IG9uTGFzdFJvdyA9IG5ld1JvdyA9PT0gbnVtUm93cyAtIDE7XG4gICAgICBjb25zdCBjb2xzSW5Sb3cgPSBvbkxhc3RSb3cgPyB2YWx1ZXMubGVuZ3RoIC0gbmV3Um93ICogbnVtQ29scyA6IG51bUNvbHM7XG4gICAgICBjb25zdCBuZXdDb2wgPSBjbGFtcChvbGRDb2x1bW4sIDAsIGNvbHNJblJvdyAtIDEpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICByb3c6IG5ld1JvdyxcbiAgICAgICAgY29sdW1uOiBuZXdDb2xcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IGN5Y2xlUmlnaHQkMSA9ICh2YWx1ZXMsIGluZGV4LCBudW1Sb3dzLCBudW1Db2xzKSA9PiBjeWNsZUhvcml6b250YWwkMSh2YWx1ZXMsIGluZGV4LCBudW1Sb3dzLCBudW1Db2xzLCArMSk7XG4gICAgY29uc3QgY3ljbGVMZWZ0JDEgPSAodmFsdWVzLCBpbmRleCwgbnVtUm93cywgbnVtQ29scykgPT4gY3ljbGVIb3Jpem9udGFsJDEodmFsdWVzLCBpbmRleCwgbnVtUm93cywgbnVtQ29scywgLTEpO1xuICAgIGNvbnN0IGN5Y2xlVXAkMSA9ICh2YWx1ZXMsIGluZGV4LCBudW1Sb3dzLCBudW1Db2xzKSA9PiBjeWNsZVZlcnRpY2FsJDEodmFsdWVzLCBpbmRleCwgbnVtUm93cywgbnVtQ29scywgLTEpO1xuICAgIGNvbnN0IGN5Y2xlRG93biQxID0gKHZhbHVlcywgaW5kZXgsIG51bVJvd3MsIG51bUNvbHMpID0+IGN5Y2xlVmVydGljYWwkMSh2YWx1ZXMsIGluZGV4LCBudW1Sb3dzLCBudW1Db2xzLCArMSk7XG5cbiAgICBjb25zdCBzY2hlbWEkdSA9IFtcbiAgICAgIHJlcXVpcmVkJDEoJ3NlbGVjdG9yJyksXG4gICAgICBkZWZhdWx0ZWQoJ2V4ZWN1dGUnLCBkZWZhdWx0RXhlY3V0ZSksXG4gICAgICBvbktleWJvYXJkSGFuZGxlcignb25Fc2NhcGUnKSxcbiAgICAgIGRlZmF1bHRlZCgnY2FwdHVyZVRhYicsIGZhbHNlKSxcbiAgICAgIGluaXRTaXplKClcbiAgICBdO1xuICAgIGNvbnN0IGZvY3VzSW4kMyA9IChjb21wb25lbnQsIGdyaWRDb25maWcsIF9ncmlkU3RhdGUpID0+IHtcbiAgICAgIGRlc2NlbmRhbnQoY29tcG9uZW50LmVsZW1lbnQsIGdyaWRDb25maWcuc2VsZWN0b3IpLmVhY2goZmlyc3QgPT4ge1xuICAgICAgICBncmlkQ29uZmlnLmZvY3VzTWFuYWdlci5zZXQoY29tcG9uZW50LCBmaXJzdCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRDdXJyZW50JDEgPSAoY29tcG9uZW50LCBncmlkQ29uZmlnKSA9PiBncmlkQ29uZmlnLmZvY3VzTWFuYWdlci5nZXQoY29tcG9uZW50KS5iaW5kKGVsZW0gPT4gY2xvc2VzdCQxKGVsZW0sIGdyaWRDb25maWcuc2VsZWN0b3IpKTtcbiAgICBjb25zdCBleGVjdXRlJDMgPSAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgZ3JpZENvbmZpZywgX2dyaWRTdGF0ZSkgPT4gZmluZEN1cnJlbnQkMShjb21wb25lbnQsIGdyaWRDb25maWcpLmJpbmQoZm9jdXNlZCA9PiBncmlkQ29uZmlnLmV4ZWN1dGUoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgZm9jdXNlZCkpO1xuICAgIGNvbnN0IGRvTW92ZSQyID0gY3ljbGUgPT4gKGVsZW1lbnQsIGZvY3VzZWQsIGdyaWRDb25maWcsIGdyaWRTdGF0ZSkgPT4gbG9jYXRlVmlzaWJsZShlbGVtZW50LCBmb2N1c2VkLCBncmlkQ29uZmlnLnNlbGVjdG9yKS5iaW5kKGlkZW50aWZpZWQgPT4gY3ljbGUoaWRlbnRpZmllZC5jYW5kaWRhdGVzLCBpZGVudGlmaWVkLmluZGV4LCBncmlkU3RhdGUuZ2V0TnVtUm93cygpLmdldE9yKGdyaWRDb25maWcuaW5pdFNpemUubnVtUm93cyksIGdyaWRTdGF0ZS5nZXROdW1Db2x1bW5zKCkuZ2V0T3IoZ3JpZENvbmZpZy5pbml0U2l6ZS5udW1Db2x1bW5zKSkpO1xuICAgIGNvbnN0IGhhbmRsZVRhYiA9IChfY29tcG9uZW50LCBfc2ltdWxhdGVkRXZlbnQsIGdyaWRDb25maWcpID0+IGdyaWRDb25maWcuY2FwdHVyZVRhYiA/IE9wdGlvbmFsLnNvbWUodHJ1ZSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgY29uc3QgZG9Fc2NhcGUkMSA9IChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50LCBncmlkQ29uZmlnKSA9PiBncmlkQ29uZmlnLm9uRXNjYXBlKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpO1xuICAgIGNvbnN0IG1vdmVMZWZ0JDMgPSBkb01vdmUkMihjeWNsZUxlZnQkMSk7XG4gICAgY29uc3QgbW92ZVJpZ2h0JDMgPSBkb01vdmUkMihjeWNsZVJpZ2h0JDEpO1xuICAgIGNvbnN0IG1vdmVOb3J0aCQxID0gZG9Nb3ZlJDIoY3ljbGVVcCQxKTtcbiAgICBjb25zdCBtb3ZlU291dGgkMSA9IGRvTW92ZSQyKGN5Y2xlRG93biQxKTtcbiAgICBjb25zdCBnZXRLZXlkb3duUnVsZXMkNCA9IGNvbnN0YW50JDEoW1xuICAgICAgcnVsZShpblNldChMRUZUKSwgd2VzdCQxKG1vdmVMZWZ0JDMsIG1vdmVSaWdodCQzKSksXG4gICAgICBydWxlKGluU2V0KFJJR0hUKSwgZWFzdCQxKG1vdmVMZWZ0JDMsIG1vdmVSaWdodCQzKSksXG4gICAgICBydWxlKGluU2V0KFVQKSwgbm9ydGgkMShtb3ZlTm9ydGgkMSkpLFxuICAgICAgcnVsZShpblNldChET1dOKSwgc291dGgkMShtb3ZlU291dGgkMSkpLFxuICAgICAgcnVsZShhbmQoW1xuICAgICAgICBpc1NoaWZ0LFxuICAgICAgICBpblNldChUQUIpXG4gICAgICBdKSwgaGFuZGxlVGFiKSxcbiAgICAgIHJ1bGUoYW5kKFtcbiAgICAgICAgaXNOb3RTaGlmdCxcbiAgICAgICAgaW5TZXQoVEFCKVxuICAgICAgXSksIGhhbmRsZVRhYiksXG4gICAgICBydWxlKGluU2V0KFNQQUNFLmNvbmNhdChFTlRFUikpLCBleGVjdXRlJDMpXG4gICAgXSk7XG4gICAgY29uc3QgZ2V0S2V5dXBSdWxlcyQ0ID0gY29uc3RhbnQkMShbXG4gICAgICBydWxlKGluU2V0KEVTQ0FQRSksIGRvRXNjYXBlJDEpLFxuICAgICAgcnVsZShpblNldChTUEFDRSksIHN0b3BFdmVudEZvckZpcmVmb3gpXG4gICAgXSk7XG4gICAgdmFyIEZsYXRncmlkVHlwZSA9IHR5cGljYWwoc2NoZW1hJHUsIGZsYXRncmlkJDEsIGdldEtleWRvd25SdWxlcyQ0LCBnZXRLZXl1cFJ1bGVzJDQsICgpID0+IE9wdGlvbmFsLnNvbWUoZm9jdXNJbiQzKSk7XG5cbiAgICBjb25zdCBmID0gKGNvbnRhaW5lciwgc2VsZWN0b3IsIGN1cnJlbnQsIGRlbHRhLCBnZXROZXdJbmRleCkgPT4ge1xuICAgICAgY29uc3QgaXNEaXNhYmxlZEJ1dHRvbiA9IGNhbmRpZGF0ZSA9PiBuYW1lJDMoY2FuZGlkYXRlKSA9PT0gJ2J1dHRvbicgJiYgZ2V0JGYoY2FuZGlkYXRlLCAnZGlzYWJsZWQnKSA9PT0gJ2Rpc2FibGVkJztcbiAgICAgIGNvbnN0IHRyeU5ld0luZGV4ID0gKGluaXRpYWwsIGluZGV4LCBjYW5kaWRhdGVzKSA9PiBnZXROZXdJbmRleChpbml0aWFsLCBpbmRleCwgZGVsdGEsIDAsIGNhbmRpZGF0ZXMubGVuZ3RoIC0gMSwgY2FuZGlkYXRlc1tpbmRleF0sIG5ld0luZGV4ID0+IGlzRGlzYWJsZWRCdXR0b24oY2FuZGlkYXRlc1tuZXdJbmRleF0pID8gdHJ5TmV3SW5kZXgoaW5pdGlhbCwgbmV3SW5kZXgsIGNhbmRpZGF0ZXMpIDogT3B0aW9uYWwuZnJvbShjYW5kaWRhdGVzW25ld0luZGV4XSkpO1xuICAgICAgcmV0dXJuIGxvY2F0ZVZpc2libGUoY29udGFpbmVyLCBjdXJyZW50LCBzZWxlY3RvcikuYmluZChpZGVudGlmaWVkID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBpZGVudGlmaWVkLmluZGV4O1xuICAgICAgICBjb25zdCBjYW5kaWRhdGVzID0gaWRlbnRpZmllZC5jYW5kaWRhdGVzO1xuICAgICAgICByZXR1cm4gdHJ5TmV3SW5kZXgoaW5kZXgsIGluZGV4LCBjYW5kaWRhdGVzKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaG9yaXpvbnRhbFdpdGhvdXRDeWNsZXMgPSAoY29udGFpbmVyLCBzZWxlY3RvciwgY3VycmVudCwgZGVsdGEpID0+IGYoY29udGFpbmVyLCBzZWxlY3RvciwgY3VycmVudCwgZGVsdGEsIChwcmV2SW5kZXgsIHYsIGQsIG1pbiwgbWF4LCBvbGRDYW5kaWRhdGUsIG9uTmV3SW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG5ld0luZGV4ID0gY2xhbXAodiArIGQsIG1pbiwgbWF4KTtcbiAgICAgIHJldHVybiBuZXdJbmRleCA9PT0gcHJldkluZGV4ID8gT3B0aW9uYWwuZnJvbShvbGRDYW5kaWRhdGUpIDogb25OZXdJbmRleChuZXdJbmRleCk7XG4gICAgfSk7XG4gICAgY29uc3QgaG9yaXpvbnRhbCA9IChjb250YWluZXIsIHNlbGVjdG9yLCBjdXJyZW50LCBkZWx0YSkgPT4gZihjb250YWluZXIsIHNlbGVjdG9yLCBjdXJyZW50LCBkZWx0YSwgKHByZXZJbmRleCwgdiwgZCwgbWluLCBtYXgsIF9vbGRDYW5kaWRhdGUsIG9uTmV3SW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG5ld0luZGV4ID0gY3ljbGVCeSh2LCBkLCBtaW4sIG1heCk7XG4gICAgICByZXR1cm4gbmV3SW5kZXggPT09IHByZXZJbmRleCA/IE9wdGlvbmFsLm5vbmUoKSA6IG9uTmV3SW5kZXgobmV3SW5kZXgpO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc2NoZW1hJHQgPSBbXG4gICAgICByZXF1aXJlZCQxKCdzZWxlY3RvcicpLFxuICAgICAgZGVmYXVsdGVkKCdnZXRJbml0aWFsJywgT3B0aW9uYWwubm9uZSksXG4gICAgICBkZWZhdWx0ZWQoJ2V4ZWN1dGUnLCBkZWZhdWx0RXhlY3V0ZSksXG4gICAgICBvbktleWJvYXJkSGFuZGxlcignb25Fc2NhcGUnKSxcbiAgICAgIGRlZmF1bHRlZCgnZXhlY3V0ZU9uTW92ZScsIGZhbHNlKSxcbiAgICAgIGRlZmF1bHRlZCgnYWxsb3dWZXJ0aWNhbCcsIHRydWUpLFxuICAgICAgZGVmYXVsdGVkKCdhbGxvd0hvcml6b250YWwnLCB0cnVlKSxcbiAgICAgIGRlZmF1bHRlZCgnY3ljbGVzJywgdHJ1ZSlcbiAgICBdO1xuICAgIGNvbnN0IGZpbmRDdXJyZW50ID0gKGNvbXBvbmVudCwgZmxvd0NvbmZpZykgPT4gZmxvd0NvbmZpZy5mb2N1c01hbmFnZXIuZ2V0KGNvbXBvbmVudCkuYmluZChlbGVtID0+IGNsb3Nlc3QkMShlbGVtLCBmbG93Q29uZmlnLnNlbGVjdG9yKSk7XG4gICAgY29uc3QgZXhlY3V0ZSQyID0gKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIGZsb3dDb25maWcpID0+IGZpbmRDdXJyZW50KGNvbXBvbmVudCwgZmxvd0NvbmZpZykuYmluZChmb2N1c2VkID0+IGZsb3dDb25maWcuZXhlY3V0ZShjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50LCBmb2N1c2VkKSk7XG4gICAgY29uc3QgZm9jdXNJbiQyID0gKGNvbXBvbmVudCwgZmxvd0NvbmZpZywgX3N0YXRlKSA9PiB7XG4gICAgICBmbG93Q29uZmlnLmdldEluaXRpYWwoY29tcG9uZW50KS5vclRodW5rKCgpID0+IGRlc2NlbmRhbnQoY29tcG9uZW50LmVsZW1lbnQsIGZsb3dDb25maWcuc2VsZWN0b3IpKS5lYWNoKGZpcnN0ID0+IHtcbiAgICAgICAgZmxvd0NvbmZpZy5mb2N1c01hbmFnZXIuc2V0KGNvbXBvbmVudCwgZmlyc3QpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBtb3ZlTGVmdCQyID0gKGVsZW1lbnQsIGZvY3VzZWQsIGluZm8pID0+IChpbmZvLmN5Y2xlcyA/IGhvcml6b250YWwgOiBob3Jpem9udGFsV2l0aG91dEN5Y2xlcykoZWxlbWVudCwgaW5mby5zZWxlY3RvciwgZm9jdXNlZCwgLTEpO1xuICAgIGNvbnN0IG1vdmVSaWdodCQyID0gKGVsZW1lbnQsIGZvY3VzZWQsIGluZm8pID0+IChpbmZvLmN5Y2xlcyA/IGhvcml6b250YWwgOiBob3Jpem9udGFsV2l0aG91dEN5Y2xlcykoZWxlbWVudCwgaW5mby5zZWxlY3RvciwgZm9jdXNlZCwgKzEpO1xuICAgIGNvbnN0IGRvTW92ZSQxID0gbW92ZW1lbnQgPT4gKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIGZsb3dDb25maWcsIGZsb3dTdGF0ZSkgPT4gbW92ZW1lbnQoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgZmxvd0NvbmZpZywgZmxvd1N0YXRlKS5iaW5kKCgpID0+IGZsb3dDb25maWcuZXhlY3V0ZU9uTW92ZSA/IGV4ZWN1dGUkMihjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50LCBmbG93Q29uZmlnKSA6IE9wdGlvbmFsLnNvbWUodHJ1ZSkpO1xuICAgIGNvbnN0IGRvRXNjYXBlID0gKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIGZsb3dDb25maWcpID0+IGZsb3dDb25maWcub25Fc2NhcGUoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCk7XG4gICAgY29uc3QgZ2V0S2V5ZG93blJ1bGVzJDMgPSAoX2NvbXBvbmVudCwgX3NlLCBmbG93Q29uZmlnLCBfZmxvd1N0YXRlKSA9PiB7XG4gICAgICBjb25zdCB3ZXN0TW92ZXJzID0gWy4uLmZsb3dDb25maWcuYWxsb3dIb3Jpem9udGFsID8gTEVGVCA6IFtdXS5jb25jYXQoZmxvd0NvbmZpZy5hbGxvd1ZlcnRpY2FsID8gVVAgOiBbXSk7XG4gICAgICBjb25zdCBlYXN0TW92ZXJzID0gWy4uLmZsb3dDb25maWcuYWxsb3dIb3Jpem9udGFsID8gUklHSFQgOiBbXV0uY29uY2F0KGZsb3dDb25maWcuYWxsb3dWZXJ0aWNhbCA/IERPV04gOiBbXSk7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBydWxlKGluU2V0KHdlc3RNb3ZlcnMpLCBkb01vdmUkMSh3ZXN0JDEobW92ZUxlZnQkMiwgbW92ZVJpZ2h0JDIpKSksXG4gICAgICAgIHJ1bGUoaW5TZXQoZWFzdE1vdmVycyksIGRvTW92ZSQxKGVhc3QkMShtb3ZlTGVmdCQyLCBtb3ZlUmlnaHQkMikpKSxcbiAgICAgICAgcnVsZShpblNldChFTlRFUiksIGV4ZWN1dGUkMiksXG4gICAgICAgIHJ1bGUoaW5TZXQoU1BBQ0UpLCBleGVjdXRlJDIpXG4gICAgICBdO1xuICAgIH07XG4gICAgY29uc3QgZ2V0S2V5dXBSdWxlcyQzID0gY29uc3RhbnQkMShbXG4gICAgICBydWxlKGluU2V0KFNQQUNFKSwgc3RvcEV2ZW50Rm9yRmlyZWZveCksXG4gICAgICBydWxlKGluU2V0KEVTQ0FQRSksIGRvRXNjYXBlKVxuICAgIF0pO1xuICAgIHZhciBGbG93VHlwZSA9IHR5cGljYWwoc2NoZW1hJHQsIE5vU3RhdGUuaW5pdCwgZ2V0S2V5ZG93blJ1bGVzJDMsIGdldEtleXVwUnVsZXMkMywgKCkgPT4gT3B0aW9uYWwuc29tZShmb2N1c0luJDIpKTtcblxuICAgIGNvbnN0IHRvQ2VsbCA9IChtYXRyaXgsIHJvd0luZGV4LCBjb2x1bW5JbmRleCkgPT4gT3B0aW9uYWwuZnJvbShtYXRyaXhbcm93SW5kZXhdKS5iaW5kKHJvdyA9PiBPcHRpb25hbC5mcm9tKHJvd1tjb2x1bW5JbmRleF0pLm1hcChjZWxsID0+ICh7XG4gICAgICByb3dJbmRleCxcbiAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgY2VsbFxuICAgIH0pKSk7XG4gICAgY29uc3QgY3ljbGVIb3Jpem9udGFsID0gKG1hdHJpeCwgcm93SW5kZXgsIHN0YXJ0Q29sLCBkZWx0YUNvbCkgPT4ge1xuICAgICAgY29uc3Qgcm93ID0gbWF0cml4W3Jvd0luZGV4XTtcbiAgICAgIGNvbnN0IGNvbHNJblJvdyA9IHJvdy5sZW5ndGg7XG4gICAgICBjb25zdCBuZXdDb2xJbmRleCA9IGN5Y2xlQnkoc3RhcnRDb2wsIGRlbHRhQ29sLCAwLCBjb2xzSW5Sb3cgLSAxKTtcbiAgICAgIHJldHVybiB0b0NlbGwobWF0cml4LCByb3dJbmRleCwgbmV3Q29sSW5kZXgpO1xuICAgIH07XG4gICAgY29uc3QgY3ljbGVWZXJ0aWNhbCA9IChtYXRyaXgsIGNvbEluZGV4LCBzdGFydFJvdywgZGVsdGFSb3cpID0+IHtcbiAgICAgIGNvbnN0IG5leHRSb3dJbmRleCA9IGN5Y2xlQnkoc3RhcnRSb3csIGRlbHRhUm93LCAwLCBtYXRyaXgubGVuZ3RoIC0gMSk7XG4gICAgICBjb25zdCBjb2xzSW5OZXh0Um93ID0gbWF0cml4W25leHRSb3dJbmRleF0ubGVuZ3RoO1xuICAgICAgY29uc3QgbmV4dENvbEluZGV4ID0gY2xhbXAoY29sSW5kZXgsIDAsIGNvbHNJbk5leHRSb3cgLSAxKTtcbiAgICAgIHJldHVybiB0b0NlbGwobWF0cml4LCBuZXh0Um93SW5kZXgsIG5leHRDb2xJbmRleCk7XG4gICAgfTtcbiAgICBjb25zdCBtb3ZlSG9yaXpvbnRhbCA9IChtYXRyaXgsIHJvd0luZGV4LCBzdGFydENvbCwgZGVsdGFDb2wpID0+IHtcbiAgICAgIGNvbnN0IHJvdyA9IG1hdHJpeFtyb3dJbmRleF07XG4gICAgICBjb25zdCBjb2xzSW5Sb3cgPSByb3cubGVuZ3RoO1xuICAgICAgY29uc3QgbmV3Q29sSW5kZXggPSBjbGFtcChzdGFydENvbCArIGRlbHRhQ29sLCAwLCBjb2xzSW5Sb3cgLSAxKTtcbiAgICAgIHJldHVybiB0b0NlbGwobWF0cml4LCByb3dJbmRleCwgbmV3Q29sSW5kZXgpO1xuICAgIH07XG4gICAgY29uc3QgbW92ZVZlcnRpY2FsID0gKG1hdHJpeCwgY29sSW5kZXgsIHN0YXJ0Um93LCBkZWx0YVJvdykgPT4ge1xuICAgICAgY29uc3QgbmV4dFJvd0luZGV4ID0gY2xhbXAoc3RhcnRSb3cgKyBkZWx0YVJvdywgMCwgbWF0cml4Lmxlbmd0aCAtIDEpO1xuICAgICAgY29uc3QgY29sc0luTmV4dFJvdyA9IG1hdHJpeFtuZXh0Um93SW5kZXhdLmxlbmd0aDtcbiAgICAgIGNvbnN0IG5leHRDb2xJbmRleCA9IGNsYW1wKGNvbEluZGV4LCAwLCBjb2xzSW5OZXh0Um93IC0gMSk7XG4gICAgICByZXR1cm4gdG9DZWxsKG1hdHJpeCwgbmV4dFJvd0luZGV4LCBuZXh0Q29sSW5kZXgpO1xuICAgIH07XG4gICAgY29uc3QgY3ljbGVSaWdodCA9IChtYXRyaXgsIHN0YXJ0Um93LCBzdGFydENvbCkgPT4gY3ljbGVIb3Jpem9udGFsKG1hdHJpeCwgc3RhcnRSb3csIHN0YXJ0Q29sLCArMSk7XG4gICAgY29uc3QgY3ljbGVMZWZ0ID0gKG1hdHJpeCwgc3RhcnRSb3csIHN0YXJ0Q29sKSA9PiBjeWNsZUhvcml6b250YWwobWF0cml4LCBzdGFydFJvdywgc3RhcnRDb2wsIC0xKTtcbiAgICBjb25zdCBjeWNsZVVwID0gKG1hdHJpeCwgc3RhcnRSb3csIHN0YXJ0Q29sKSA9PiBjeWNsZVZlcnRpY2FsKG1hdHJpeCwgc3RhcnRDb2wsIHN0YXJ0Um93LCAtMSk7XG4gICAgY29uc3QgY3ljbGVEb3duID0gKG1hdHJpeCwgc3RhcnRSb3csIHN0YXJ0Q29sKSA9PiBjeWNsZVZlcnRpY2FsKG1hdHJpeCwgc3RhcnRDb2wsIHN0YXJ0Um93LCArMSk7XG4gICAgY29uc3QgbW92ZUxlZnQkMSA9IChtYXRyaXgsIHN0YXJ0Um93LCBzdGFydENvbCkgPT4gbW92ZUhvcml6b250YWwobWF0cml4LCBzdGFydFJvdywgc3RhcnRDb2wsIC0xKTtcbiAgICBjb25zdCBtb3ZlUmlnaHQkMSA9IChtYXRyaXgsIHN0YXJ0Um93LCBzdGFydENvbCkgPT4gbW92ZUhvcml6b250YWwobWF0cml4LCBzdGFydFJvdywgc3RhcnRDb2wsICsxKTtcbiAgICBjb25zdCBtb3ZlVXAkMSA9IChtYXRyaXgsIHN0YXJ0Um93LCBzdGFydENvbCkgPT4gbW92ZVZlcnRpY2FsKG1hdHJpeCwgc3RhcnRDb2wsIHN0YXJ0Um93LCAtMSk7XG4gICAgY29uc3QgbW92ZURvd24kMSA9IChtYXRyaXgsIHN0YXJ0Um93LCBzdGFydENvbCkgPT4gbW92ZVZlcnRpY2FsKG1hdHJpeCwgc3RhcnRDb2wsIHN0YXJ0Um93LCArMSk7XG5cbiAgICBjb25zdCBzY2hlbWEkcyA9IFtcbiAgICAgIHJlcXVpcmVkT2JqT2YoJ3NlbGVjdG9ycycsIFtcbiAgICAgICAgcmVxdWlyZWQkMSgncm93JyksXG4gICAgICAgIHJlcXVpcmVkJDEoJ2NlbGwnKVxuICAgICAgXSksXG4gICAgICBkZWZhdWx0ZWQoJ2N5Y2xlcycsIHRydWUpLFxuICAgICAgZGVmYXVsdGVkKCdwcmV2aW91c1NlbGVjdG9yJywgT3B0aW9uYWwubm9uZSksXG4gICAgICBkZWZhdWx0ZWQoJ2V4ZWN1dGUnLCBkZWZhdWx0RXhlY3V0ZSlcbiAgICBdO1xuICAgIGNvbnN0IGZvY3VzSW4kMSA9IChjb21wb25lbnQsIG1hdHJpeENvbmZpZywgX3N0YXRlKSA9PiB7XG4gICAgICBjb25zdCBmb2N1c2VkID0gbWF0cml4Q29uZmlnLnByZXZpb3VzU2VsZWN0b3IoY29tcG9uZW50KS5vclRodW5rKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3JzID0gbWF0cml4Q29uZmlnLnNlbGVjdG9ycztcbiAgICAgICAgcmV0dXJuIGRlc2NlbmRhbnQoY29tcG9uZW50LmVsZW1lbnQsIHNlbGVjdG9ycy5jZWxsKTtcbiAgICAgIH0pO1xuICAgICAgZm9jdXNlZC5lYWNoKGNlbGwgPT4ge1xuICAgICAgICBtYXRyaXhDb25maWcuZm9jdXNNYW5hZ2VyLnNldChjb21wb25lbnQsIGNlbGwpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBleGVjdXRlJDEgPSAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgbWF0cml4Q29uZmlnKSA9PiBzZWFyY2goY29tcG9uZW50LmVsZW1lbnQpLmJpbmQoZm9jdXNlZCA9PiBtYXRyaXhDb25maWcuZXhlY3V0ZShjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50LCBmb2N1c2VkKSk7XG4gICAgY29uc3QgdG9NYXRyaXggPSAocm93cywgbWF0cml4Q29uZmlnKSA9PiBtYXAkMihyb3dzLCByb3cgPT4gZGVzY2VuZGFudHMocm93LCBtYXRyaXhDb25maWcuc2VsZWN0b3JzLmNlbGwpKTtcbiAgICBjb25zdCBkb01vdmUgPSAoaWZDeWNsZSwgaWZNb3ZlKSA9PiAoZWxlbWVudCwgZm9jdXNlZCwgbWF0cml4Q29uZmlnKSA9PiB7XG4gICAgICBjb25zdCBtb3ZlID0gbWF0cml4Q29uZmlnLmN5Y2xlcyA/IGlmQ3ljbGUgOiBpZk1vdmU7XG4gICAgICByZXR1cm4gY2xvc2VzdCQxKGZvY3VzZWQsIG1hdHJpeENvbmZpZy5zZWxlY3RvcnMucm93KS5iaW5kKGluUm93ID0+IHtcbiAgICAgICAgY29uc3QgY2VsbHNJblJvdyA9IGRlc2NlbmRhbnRzKGluUm93LCBtYXRyaXhDb25maWcuc2VsZWN0b3JzLmNlbGwpO1xuICAgICAgICByZXR1cm4gZmluZEluZGV4KGNlbGxzSW5Sb3csIGZvY3VzZWQpLmJpbmQoY29sSW5kZXggPT4ge1xuICAgICAgICAgIGNvbnN0IGFsbFJvd3MgPSBkZXNjZW5kYW50cyhlbGVtZW50LCBtYXRyaXhDb25maWcuc2VsZWN0b3JzLnJvdyk7XG4gICAgICAgICAgcmV0dXJuIGZpbmRJbmRleChhbGxSb3dzLCBpblJvdykuYmluZChyb3dJbmRleCA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYXRyaXggPSB0b01hdHJpeChhbGxSb3dzLCBtYXRyaXhDb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuIG1vdmUobWF0cml4LCByb3dJbmRleCwgY29sSW5kZXgpLm1hcChuZXh0ID0+IG5leHQuY2VsbCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBtb3ZlTGVmdCA9IGRvTW92ZShjeWNsZUxlZnQsIG1vdmVMZWZ0JDEpO1xuICAgIGNvbnN0IG1vdmVSaWdodCA9IGRvTW92ZShjeWNsZVJpZ2h0LCBtb3ZlUmlnaHQkMSk7XG4gICAgY29uc3QgbW92ZU5vcnRoID0gZG9Nb3ZlKGN5Y2xlVXAsIG1vdmVVcCQxKTtcbiAgICBjb25zdCBtb3ZlU291dGggPSBkb01vdmUoY3ljbGVEb3duLCBtb3ZlRG93biQxKTtcbiAgICBjb25zdCBnZXRLZXlkb3duUnVsZXMkMiA9IGNvbnN0YW50JDEoW1xuICAgICAgcnVsZShpblNldChMRUZUKSwgd2VzdCQxKG1vdmVMZWZ0LCBtb3ZlUmlnaHQpKSxcbiAgICAgIHJ1bGUoaW5TZXQoUklHSFQpLCBlYXN0JDEobW92ZUxlZnQsIG1vdmVSaWdodCkpLFxuICAgICAgcnVsZShpblNldChVUCksIG5vcnRoJDEobW92ZU5vcnRoKSksXG4gICAgICBydWxlKGluU2V0KERPV04pLCBzb3V0aCQxKG1vdmVTb3V0aCkpLFxuICAgICAgcnVsZShpblNldChTUEFDRS5jb25jYXQoRU5URVIpKSwgZXhlY3V0ZSQxKVxuICAgIF0pO1xuICAgIGNvbnN0IGdldEtleXVwUnVsZXMkMiA9IGNvbnN0YW50JDEoW3J1bGUoaW5TZXQoU1BBQ0UpLCBzdG9wRXZlbnRGb3JGaXJlZm94KV0pO1xuICAgIHZhciBNYXRyaXhUeXBlID0gdHlwaWNhbChzY2hlbWEkcywgTm9TdGF0ZS5pbml0LCBnZXRLZXlkb3duUnVsZXMkMiwgZ2V0S2V5dXBSdWxlcyQyLCAoKSA9PiBPcHRpb25hbC5zb21lKGZvY3VzSW4kMSkpO1xuXG4gICAgY29uc3Qgc2NoZW1hJHIgPSBbXG4gICAgICByZXF1aXJlZCQxKCdzZWxlY3RvcicpLFxuICAgICAgZGVmYXVsdGVkKCdleGVjdXRlJywgZGVmYXVsdEV4ZWN1dGUpLFxuICAgICAgZGVmYXVsdGVkKCdtb3ZlT25UYWInLCBmYWxzZSlcbiAgICBdO1xuICAgIGNvbnN0IGV4ZWN1dGUgPSAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgbWVudUNvbmZpZykgPT4gbWVudUNvbmZpZy5mb2N1c01hbmFnZXIuZ2V0KGNvbXBvbmVudCkuYmluZChmb2N1c2VkID0+IG1lbnVDb25maWcuZXhlY3V0ZShjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50LCBmb2N1c2VkKSk7XG4gICAgY29uc3QgZm9jdXNJbiA9IChjb21wb25lbnQsIG1lbnVDb25maWcsIF9zdGF0ZSkgPT4ge1xuICAgICAgZGVzY2VuZGFudChjb21wb25lbnQuZWxlbWVudCwgbWVudUNvbmZpZy5zZWxlY3RvcikuZWFjaChmaXJzdCA9PiB7XG4gICAgICAgIG1lbnVDb25maWcuZm9jdXNNYW5hZ2VyLnNldChjb21wb25lbnQsIGZpcnN0KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbW92ZVVwID0gKGVsZW1lbnQsIGZvY3VzZWQsIGluZm8pID0+IGhvcml6b250YWwoZWxlbWVudCwgaW5mby5zZWxlY3RvciwgZm9jdXNlZCwgLTEpO1xuICAgIGNvbnN0IG1vdmVEb3duID0gKGVsZW1lbnQsIGZvY3VzZWQsIGluZm8pID0+IGhvcml6b250YWwoZWxlbWVudCwgaW5mby5zZWxlY3RvciwgZm9jdXNlZCwgKzEpO1xuICAgIGNvbnN0IGZpcmVTaGlmdFRhYiA9IChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50LCBtZW51Q29uZmlnLCBtZW51U3RhdGUpID0+IG1lbnVDb25maWcubW92ZU9uVGFiID8gbW92ZSQxKG1vdmVVcCkoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgbWVudUNvbmZpZywgbWVudVN0YXRlKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICBjb25zdCBmaXJlVGFiID0gKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIG1lbnVDb25maWcsIG1lbnVTdGF0ZSkgPT4gbWVudUNvbmZpZy5tb3ZlT25UYWIgPyBtb3ZlJDEobW92ZURvd24pKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIG1lbnVDb25maWcsIG1lbnVTdGF0ZSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgY29uc3QgZ2V0S2V5ZG93blJ1bGVzJDEgPSBjb25zdGFudCQxKFtcbiAgICAgIHJ1bGUoaW5TZXQoVVApLCBtb3ZlJDEobW92ZVVwKSksXG4gICAgICBydWxlKGluU2V0KERPV04pLCBtb3ZlJDEobW92ZURvd24pKSxcbiAgICAgIHJ1bGUoYW5kKFtcbiAgICAgICAgaXNTaGlmdCxcbiAgICAgICAgaW5TZXQoVEFCKVxuICAgICAgXSksIGZpcmVTaGlmdFRhYiksXG4gICAgICBydWxlKGFuZChbXG4gICAgICAgIGlzTm90U2hpZnQsXG4gICAgICAgIGluU2V0KFRBQilcbiAgICAgIF0pLCBmaXJlVGFiKSxcbiAgICAgIHJ1bGUoaW5TZXQoRU5URVIpLCBleGVjdXRlKSxcbiAgICAgIHJ1bGUoaW5TZXQoU1BBQ0UpLCBleGVjdXRlKVxuICAgIF0pO1xuICAgIGNvbnN0IGdldEtleXVwUnVsZXMkMSA9IGNvbnN0YW50JDEoW3J1bGUoaW5TZXQoU1BBQ0UpLCBzdG9wRXZlbnRGb3JGaXJlZm94KV0pO1xuICAgIHZhciBNZW51VHlwZSA9IHR5cGljYWwoc2NoZW1hJHIsIE5vU3RhdGUuaW5pdCwgZ2V0S2V5ZG93blJ1bGVzJDEsIGdldEtleXVwUnVsZXMkMSwgKCkgPT4gT3B0aW9uYWwuc29tZShmb2N1c0luKSk7XG5cbiAgICBjb25zdCBzY2hlbWEkcSA9IFtcbiAgICAgIG9uS2V5Ym9hcmRIYW5kbGVyKCdvblNwYWNlJyksXG4gICAgICBvbktleWJvYXJkSGFuZGxlcignb25FbnRlcicpLFxuICAgICAgb25LZXlib2FyZEhhbmRsZXIoJ29uU2hpZnRFbnRlcicpLFxuICAgICAgb25LZXlib2FyZEhhbmRsZXIoJ29uTGVmdCcpLFxuICAgICAgb25LZXlib2FyZEhhbmRsZXIoJ29uUmlnaHQnKSxcbiAgICAgIG9uS2V5Ym9hcmRIYW5kbGVyKCdvblRhYicpLFxuICAgICAgb25LZXlib2FyZEhhbmRsZXIoJ29uU2hpZnRUYWInKSxcbiAgICAgIG9uS2V5Ym9hcmRIYW5kbGVyKCdvblVwJyksXG4gICAgICBvbktleWJvYXJkSGFuZGxlcignb25Eb3duJyksXG4gICAgICBvbktleWJvYXJkSGFuZGxlcignb25Fc2NhcGUnKSxcbiAgICAgIGRlZmF1bHRlZCgnc3RvcFNwYWNlS2V5dXAnLCBmYWxzZSksXG4gICAgICBvcHRpb24kMygnZm9jdXNJbicpXG4gICAgXTtcbiAgICBjb25zdCBnZXRLZXlkb3duUnVsZXMgPSAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgc3BlY2lhbEluZm8pID0+IFtcbiAgICAgIHJ1bGUoaW5TZXQoU1BBQ0UpLCBzcGVjaWFsSW5mby5vblNwYWNlKSxcbiAgICAgIHJ1bGUoYW5kKFtcbiAgICAgICAgaXNOb3RTaGlmdCxcbiAgICAgICAgaW5TZXQoRU5URVIpXG4gICAgICBdKSwgc3BlY2lhbEluZm8ub25FbnRlciksXG4gICAgICBydWxlKGFuZChbXG4gICAgICAgIGlzU2hpZnQsXG4gICAgICAgIGluU2V0KEVOVEVSKVxuICAgICAgXSksIHNwZWNpYWxJbmZvLm9uU2hpZnRFbnRlciksXG4gICAgICBydWxlKGFuZChbXG4gICAgICAgIGlzU2hpZnQsXG4gICAgICAgIGluU2V0KFRBQilcbiAgICAgIF0pLCBzcGVjaWFsSW5mby5vblNoaWZ0VGFiKSxcbiAgICAgIHJ1bGUoYW5kKFtcbiAgICAgICAgaXNOb3RTaGlmdCxcbiAgICAgICAgaW5TZXQoVEFCKVxuICAgICAgXSksIHNwZWNpYWxJbmZvLm9uVGFiKSxcbiAgICAgIHJ1bGUoaW5TZXQoVVApLCBzcGVjaWFsSW5mby5vblVwKSxcbiAgICAgIHJ1bGUoaW5TZXQoRE9XTiksIHNwZWNpYWxJbmZvLm9uRG93biksXG4gICAgICBydWxlKGluU2V0KExFRlQpLCBzcGVjaWFsSW5mby5vbkxlZnQpLFxuICAgICAgcnVsZShpblNldChSSUdIVCksIHNwZWNpYWxJbmZvLm9uUmlnaHQpLFxuICAgICAgcnVsZShpblNldChTUEFDRSksIHNwZWNpYWxJbmZvLm9uU3BhY2UpXG4gICAgXTtcbiAgICBjb25zdCBnZXRLZXl1cFJ1bGVzID0gKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIHNwZWNpYWxJbmZvKSA9PiBbXG4gICAgICAuLi5zcGVjaWFsSW5mby5zdG9wU3BhY2VLZXl1cCA/IFtydWxlKGluU2V0KFNQQUNFKSwgc3RvcEV2ZW50Rm9yRmlyZWZveCldIDogW10sXG4gICAgICBydWxlKGluU2V0KEVTQ0FQRSksIHNwZWNpYWxJbmZvLm9uRXNjYXBlKVxuICAgIF07XG4gICAgdmFyIFNwZWNpYWxUeXBlID0gdHlwaWNhbChzY2hlbWEkcSwgTm9TdGF0ZS5pbml0LCBnZXRLZXlkb3duUnVsZXMsIGdldEtleXVwUnVsZXMsIHNwZWNpYWxJbmZvID0+IHNwZWNpYWxJbmZvLmZvY3VzSW4pO1xuXG4gICAgY29uc3QgYWN5Y2xpYyA9IEFjeWNsaWNUeXBlLnNjaGVtYSgpO1xuICAgIGNvbnN0IGN5Y2xpYyA9IEN5Y2xpY1R5cGUuc2NoZW1hKCk7XG4gICAgY29uc3QgZmxvdyA9IEZsb3dUeXBlLnNjaGVtYSgpO1xuICAgIGNvbnN0IGZsYXRncmlkID0gRmxhdGdyaWRUeXBlLnNjaGVtYSgpO1xuICAgIGNvbnN0IG1hdHJpeCA9IE1hdHJpeFR5cGUuc2NoZW1hKCk7XG4gICAgY29uc3QgZXhlY3V0aW9uID0gRXhlY3V0aW9uVHlwZS5zY2hlbWEoKTtcbiAgICBjb25zdCBtZW51ID0gTWVudVR5cGUuc2NoZW1hKCk7XG4gICAgY29uc3Qgc3BlY2lhbCA9IFNwZWNpYWxUeXBlLnNjaGVtYSgpO1xuXG4gICAgdmFyIEtleWJvYXJkQnJhbmNoZXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgYWN5Y2xpYzogYWN5Y2xpYyxcbiAgICAgICAgY3ljbGljOiBjeWNsaWMsXG4gICAgICAgIGZsb3c6IGZsb3csXG4gICAgICAgIGZsYXRncmlkOiBmbGF0Z3JpZCxcbiAgICAgICAgbWF0cml4OiBtYXRyaXgsXG4gICAgICAgIGV4ZWN1dGlvbjogZXhlY3V0aW9uLFxuICAgICAgICBtZW51OiBtZW51LFxuICAgICAgICBzcGVjaWFsOiBzcGVjaWFsXG4gICAgfSk7XG5cbiAgICBjb25zdCBpc0ZsYXRncmlkU3RhdGUgPSBrZXlTdGF0ZSA9PiBoYXNOb25OdWxsYWJsZUtleShrZXlTdGF0ZSwgJ3NldEdyaWRTaXplJyk7XG4gICAgY29uc3QgS2V5aW5nID0gY3JlYXRlTW9kZXMoe1xuICAgICAgYnJhbmNoS2V5OiAnbW9kZScsXG4gICAgICBicmFuY2hlczogS2V5Ym9hcmRCcmFuY2hlcyxcbiAgICAgIG5hbWU6ICdrZXlpbmcnLFxuICAgICAgYWN0aXZlOiB7XG4gICAgICAgIGV2ZW50czogKGtleWluZ0NvbmZpZywga2V5aW5nU3RhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBoYW5kbGVyID0ga2V5aW5nQ29uZmlnLmhhbmRsZXI7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZXIudG9FdmVudHMoa2V5aW5nQ29uZmlnLCBrZXlpbmdTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhcGlzOiB7XG4gICAgICAgIGZvY3VzSW46IChjb21wb25lbnQsIGtleUNvbmZpZywga2V5U3RhdGUpID0+IHtcbiAgICAgICAgICBrZXlDb25maWcuc2VuZEZvY3VzSW4oa2V5Q29uZmlnKS5mb2xkKCgpID0+IHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5nZXRTeXN0ZW0oKS50cmlnZ2VyRm9jdXMoY29tcG9uZW50LmVsZW1lbnQsIGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgICAgICB9LCBzZW5kRm9jdXNJbiA9PiB7XG4gICAgICAgICAgICBzZW5kRm9jdXNJbihjb21wb25lbnQsIGtleUNvbmZpZywga2V5U3RhdGUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBzZXRHcmlkU2l6ZTogKGNvbXBvbmVudCwga2V5Q29uZmlnLCBrZXlTdGF0ZSwgbnVtUm93cywgbnVtQ29sdW1ucykgPT4ge1xuICAgICAgICAgIGlmICghaXNGbGF0Z3JpZFN0YXRlKGtleVN0YXRlKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignTGF5b3V0IGRvZXMgbm90IHN1cHBvcnQgc2V0R3JpZFNpemUnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAga2V5U3RhdGUuc2V0R3JpZFNpemUobnVtUm93cywgbnVtQ29sdW1ucyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc3RhdGU6IEtleWluZ1N0YXRlXG4gICAgfSk7XG5cbiAgICBjb25zdCB3aXRob3V0UmV1c2UgPSAocGFyZW50LCBkYXRhKSA9PiB7XG4gICAgICBwcmVzZXJ2ZSQxKCgpID0+IHtcbiAgICAgICAgcmVwbGFjZUNoaWxkcmVuKHBhcmVudCwgZGF0YSwgKCkgPT4gbWFwJDIoZGF0YSwgcGFyZW50LmdldFN5c3RlbSgpLmJ1aWxkKSk7XG4gICAgICB9LCBwYXJlbnQuZWxlbWVudCk7XG4gICAgfTtcbiAgICBjb25zdCB3aXRoUmV1c2UgPSAocGFyZW50LCBkYXRhKSA9PiB7XG4gICAgICBwcmVzZXJ2ZSQxKCgpID0+IHtcbiAgICAgICAgdmlydHVhbFJlcGxhY2VDaGlsZHJlbihwYXJlbnQsIGRhdGEsICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGF0Y2hTcGVjQ2hpbGRyZW4ocGFyZW50LmVsZW1lbnQsIGRhdGEsIHBhcmVudC5nZXRTeXN0ZW0oKS5idWlsZE9yUGF0Y2gpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHBhcmVudC5lbGVtZW50KTtcbiAgICB9O1xuXG4gICAgY29uc3QgdmlydHVhbFJlcGxhY2UgPSAoY29tcG9uZW50LCByZXBsYWNlZSwgcmVwbGFjZWVJbmRleCwgY2hpbGRTcGVjKSA9PiB7XG4gICAgICB2aXJ0dWFsRGV0YWNoKHJlcGxhY2VlKTtcbiAgICAgIGNvbnN0IGNoaWxkID0gcGF0Y2hTcGVjQ2hpbGQoY29tcG9uZW50LmVsZW1lbnQsIHJlcGxhY2VlSW5kZXgsIGNoaWxkU3BlYywgY29tcG9uZW50LmdldFN5c3RlbSgpLmJ1aWxkT3JQYXRjaCk7XG4gICAgICB2aXJ0dWFsQXR0YWNoKGNvbXBvbmVudCwgY2hpbGQpO1xuICAgICAgY29tcG9uZW50LnN5bmNDb21wb25lbnRzKCk7XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnQgPSAoY29tcG9uZW50LCBpbnNlcnRpb24sIGNoaWxkU3BlYykgPT4ge1xuICAgICAgY29uc3QgY2hpbGQgPSBjb21wb25lbnQuZ2V0U3lzdGVtKCkuYnVpbGQoY2hpbGRTcGVjKTtcbiAgICAgIGF0dGFjaFdpdGgoY29tcG9uZW50LCBjaGlsZCwgaW5zZXJ0aW9uKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlcGxhY2UgPSAoY29tcG9uZW50LCByZXBsYWNlZSwgcmVwbGFjZWVJbmRleCwgY2hpbGRTcGVjKSA9PiB7XG4gICAgICBkZXRhY2gocmVwbGFjZWUpO1xuICAgICAgaW5zZXJ0KGNvbXBvbmVudCwgKHAsIGMpID0+IGFwcGVuZEF0KHAsIGMsIHJlcGxhY2VlSW5kZXgpLCBjaGlsZFNwZWMpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0JDMgPSAoY29tcG9uZW50LCByZXBsYWNlQ29uZmlnLCByZXBsYWNlU3RhdGUsIGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IHJlcGxhY2VyID0gcmVwbGFjZUNvbmZpZy5yZXVzZURvbSA/IHdpdGhSZXVzZSA6IHdpdGhvdXRSZXVzZTtcbiAgICAgIHJldHVybiByZXBsYWNlcihjb21wb25lbnQsIGRhdGEpO1xuICAgIH07XG4gICAgY29uc3QgYXBwZW5kID0gKGNvbXBvbmVudCwgcmVwbGFjZUNvbmZpZywgcmVwbGFjZVN0YXRlLCBhcHBlbmRlZSkgPT4ge1xuICAgICAgaW5zZXJ0KGNvbXBvbmVudCwgYXBwZW5kJDIsIGFwcGVuZGVlKTtcbiAgICB9O1xuICAgIGNvbnN0IHByZXBlbmQgPSAoY29tcG9uZW50LCByZXBsYWNlQ29uZmlnLCByZXBsYWNlU3RhdGUsIHByZXBlbmRlZSkgPT4ge1xuICAgICAgaW5zZXJ0KGNvbXBvbmVudCwgcHJlcGVuZCQxLCBwcmVwZW5kZWUpO1xuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlID0gKGNvbXBvbmVudCwgcmVwbGFjZUNvbmZpZywgcmVwbGFjZVN0YXRlLCByZW1vdmVlKSA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGNvbnRlbnRzKGNvbXBvbmVudCk7XG4gICAgICBjb25zdCBmb3VuZENoaWxkID0gZmluZCQ1KGNoaWxkcmVuLCBjaGlsZCA9PiBlcShyZW1vdmVlLmVsZW1lbnQsIGNoaWxkLmVsZW1lbnQpKTtcbiAgICAgIGZvdW5kQ2hpbGQuZWFjaChkZXRhY2gpO1xuICAgIH07XG4gICAgY29uc3QgY29udGVudHMgPSAoY29tcG9uZW50LCBfcmVwbGFjZUNvbmZpZykgPT4gY29tcG9uZW50LmNvbXBvbmVudHMoKTtcbiAgICBjb25zdCByZXBsYWNlQXQgPSAoY29tcG9uZW50LCByZXBsYWNlQ29uZmlnLCByZXBsYWNlU3RhdGUsIHJlcGxhY2VlSW5kZXgsIHJlcGxhY2VyKSA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGNvbnRlbnRzKGNvbXBvbmVudCk7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShjaGlsZHJlbltyZXBsYWNlZUluZGV4XSkubWFwKHJlcGxhY2VlID0+IHtcbiAgICAgICAgcmVwbGFjZXIuZm9sZCgoKSA9PiBkZXRhY2gocmVwbGFjZWUpLCByID0+IHtcbiAgICAgICAgICBjb25zdCByZXBsYWNlciA9IHJlcGxhY2VDb25maWcucmV1c2VEb20gPyB2aXJ0dWFsUmVwbGFjZSA6IHJlcGxhY2U7XG4gICAgICAgICAgcmVwbGFjZXIoY29tcG9uZW50LCByZXBsYWNlZSwgcmVwbGFjZWVJbmRleCwgcik7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVwbGFjZWU7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlcGxhY2VCeSA9IChjb21wb25lbnQsIHJlcGxhY2VDb25maWcsIHJlcGxhY2VTdGF0ZSwgcmVwbGFjZWVQcmVkLCByZXBsYWNlcikgPT4ge1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBjb250ZW50cyhjb21wb25lbnQpO1xuICAgICAgcmV0dXJuIGZpbmRJbmRleCQxKGNoaWxkcmVuLCByZXBsYWNlZVByZWQpLmJpbmQocmVwbGFjZWVJbmRleCA9PiByZXBsYWNlQXQoY29tcG9uZW50LCByZXBsYWNlQ29uZmlnLCByZXBsYWNlU3RhdGUsIHJlcGxhY2VlSW5kZXgsIHJlcGxhY2VyKSk7XG4gICAgfTtcblxuICAgIHZhciBSZXBsYWNlQXBpcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBhcHBlbmQ6IGFwcGVuZCxcbiAgICAgICAgcHJlcGVuZDogcHJlcGVuZCxcbiAgICAgICAgcmVtb3ZlOiByZW1vdmUsXG4gICAgICAgIHJlcGxhY2VBdDogcmVwbGFjZUF0LFxuICAgICAgICByZXBsYWNlQnk6IHJlcGxhY2VCeSxcbiAgICAgICAgc2V0OiBzZXQkMyxcbiAgICAgICAgY29udGVudHM6IGNvbnRlbnRzXG4gICAgfSk7XG5cbiAgICBjb25zdCBSZXBsYWNpbmcgPSBjcmVhdGUkNCh7XG4gICAgICBmaWVsZHM6IFtkZWZhdWx0ZWRCb29sZWFuKCdyZXVzZURvbScsIHRydWUpXSxcbiAgICAgIG5hbWU6ICdyZXBsYWNpbmcnLFxuICAgICAgYXBpczogUmVwbGFjZUFwaXNcbiAgICB9KTtcblxuICAgIGNvbnN0IGV2ZW50cyRkID0gKG5hbWUsIGV2ZW50SGFuZGxlcnMpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IGRlcml2ZSQyKGV2ZW50SGFuZGxlcnMpO1xuICAgICAgcmV0dXJuIGNyZWF0ZSQ0KHtcbiAgICAgICAgZmllbGRzOiBbcmVxdWlyZWQkMSgnZW5hYmxlZCcpXSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgYWN0aXZlOiB7IGV2ZW50czogY29uc3RhbnQkMShldmVudHMpIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgY29uZmlnID0gKG5hbWUsIGV2ZW50SGFuZGxlcnMpID0+IHtcbiAgICAgIGNvbnN0IG1lID0gZXZlbnRzJGQobmFtZSwgZXZlbnRIYW5kbGVycyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IG5hbWUsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgY29uZmlnOiB7fSxcbiAgICAgICAgICBtZSxcbiAgICAgICAgICBjb25maWdBc1JhdzogY29uc3RhbnQkMSh7fSksXG4gICAgICAgICAgaW5pdGlhbENvbmZpZzoge30sXG4gICAgICAgICAgc3RhdGU6IE5vU3RhdGVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZm9jdXMkMiA9IChjb21wb25lbnQsIGZvY3VzQ29uZmlnKSA9PiB7XG4gICAgICBpZiAoIWZvY3VzQ29uZmlnLmlnbm9yZSkge1xuICAgICAgICBmb2N1cyQzKGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgICAgZm9jdXNDb25maWcub25Gb2N1cyhjb21wb25lbnQpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYmx1ciA9IChjb21wb25lbnQsIGZvY3VzQ29uZmlnKSA9PiB7XG4gICAgICBpZiAoIWZvY3VzQ29uZmlnLmlnbm9yZSkge1xuICAgICAgICBibHVyJDEoY29tcG9uZW50LmVsZW1lbnQpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNGb2N1c2VkID0gY29tcG9uZW50ID0+IGhhc0ZvY3VzKGNvbXBvbmVudC5lbGVtZW50KTtcblxuICAgIHZhciBGb2N1c0FwaXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgZm9jdXM6IGZvY3VzJDIsXG4gICAgICAgIGJsdXI6IGJsdXIsXG4gICAgICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkXG4gICAgfSk7XG5cbiAgICBjb25zdCBleGhpYml0JDQgPSAoYmFzZSwgZm9jdXNDb25maWcpID0+IHtcbiAgICAgIGNvbnN0IG1vZCA9IGZvY3VzQ29uZmlnLmlnbm9yZSA/IHt9IDogeyBhdHRyaWJ1dGVzOiB7IHRhYmluZGV4OiAnLTEnIH0gfTtcbiAgICAgIHJldHVybiBudSQ3KG1vZCk7XG4gICAgfTtcbiAgICBjb25zdCBldmVudHMkYyA9IGZvY3VzQ29uZmlnID0+IGRlcml2ZSQyKFtydW4kMShmb2N1cyQ0KCksIChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgIGZvY3VzJDIoY29tcG9uZW50LCBmb2N1c0NvbmZpZyk7XG4gICAgICAgIHNpbXVsYXRlZEV2ZW50LnN0b3AoKTtcbiAgICAgIH0pXS5jb25jYXQoZm9jdXNDb25maWcuc3RvcE1vdXNlZG93biA/IFtydW4kMShtb3VzZWRvd24oKSwgKF8sIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgIHNpbXVsYXRlZEV2ZW50LmV2ZW50LnByZXZlbnQoKTtcbiAgICAgIH0pXSA6IFtdKSk7XG5cbiAgICB2YXIgQWN0aXZlRm9jdXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgZXhoaWJpdDogZXhoaWJpdCQ0LFxuICAgICAgICBldmVudHM6IGV2ZW50cyRjXG4gICAgfSk7XG5cbiAgICB2YXIgRm9jdXNTY2hlbWEgPSBbXG4gICAgICBvbkhhbmRsZXIoJ29uRm9jdXMnKSxcbiAgICAgIGRlZmF1bHRlZCgnc3RvcE1vdXNlZG93bicsIGZhbHNlKSxcbiAgICAgIGRlZmF1bHRlZCgnaWdub3JlJywgZmFsc2UpXG4gICAgXTtcblxuICAgIGNvbnN0IEZvY3VzaW5nID0gY3JlYXRlJDQoe1xuICAgICAgZmllbGRzOiBGb2N1c1NjaGVtYSxcbiAgICAgIG5hbWU6ICdmb2N1c2luZycsXG4gICAgICBhY3RpdmU6IEFjdGl2ZUZvY3VzLFxuICAgICAgYXBpczogRm9jdXNBcGlzXG4gICAgfSk7XG5cbiAgICBjb25zdCBTZXR1cEJlaGF2aW91ckNlbGxTdGF0ZSA9IGluaXRpYWxTdGF0ZSA9PiB7XG4gICAgICBjb25zdCBpbml0ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBjZWxsID0gQ2VsbChpbml0aWFsU3RhdGUpO1xuICAgICAgICBjb25zdCBnZXQgPSAoKSA9PiBjZWxsLmdldCgpO1xuICAgICAgICBjb25zdCBzZXQgPSBuZXdTdGF0ZSA9PiBjZWxsLnNldChuZXdTdGF0ZSk7XG4gICAgICAgIGNvbnN0IGNsZWFyID0gKCkgPT4gY2VsbC5zZXQoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgY29uc3QgcmVhZFN0YXRlID0gKCkgPT4gY2VsbC5nZXQoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBnZXQsXG4gICAgICAgICAgc2V0LFxuICAgICAgICAgIGNsZWFyLFxuICAgICAgICAgIHJlYWRTdGF0ZVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7IGluaXQgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlQXJpYVN0YXRlID0gKGNvbXBvbmVudCwgdG9nZ2xlQ29uZmlnLCB0b2dnbGVTdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgYXJpYUluZm8gPSB0b2dnbGVDb25maWcuYXJpYTtcbiAgICAgIGFyaWFJbmZvLnVwZGF0ZShjb21wb25lbnQsIGFyaWFJbmZvLCB0b2dnbGVTdGF0ZS5nZXQoKSk7XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVDbGFzcyA9IChjb21wb25lbnQsIHRvZ2dsZUNvbmZpZywgdG9nZ2xlU3RhdGUpID0+IHtcbiAgICAgIHRvZ2dsZUNvbmZpZy50b2dnbGVDbGFzcy5lYWNoKHRvZ2dsZUNsYXNzID0+IHtcbiAgICAgICAgaWYgKHRvZ2dsZVN0YXRlLmdldCgpKSB7XG4gICAgICAgICAgYWRkJDIoY29tcG9uZW50LmVsZW1lbnQsIHRvZ2dsZUNsYXNzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZW1vdmUkMihjb21wb25lbnQuZWxlbWVudCwgdG9nZ2xlQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHNldCQyID0gKGNvbXBvbmVudCwgdG9nZ2xlQ29uZmlnLCB0b2dnbGVTdGF0ZSwgc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHRvZ2dsZVN0YXRlLmdldCgpO1xuICAgICAgdG9nZ2xlU3RhdGUuc2V0KHN0YXRlKTtcbiAgICAgIHVwZGF0ZUNsYXNzKGNvbXBvbmVudCwgdG9nZ2xlQ29uZmlnLCB0b2dnbGVTdGF0ZSk7XG4gICAgICB1cGRhdGVBcmlhU3RhdGUoY29tcG9uZW50LCB0b2dnbGVDb25maWcsIHRvZ2dsZVN0YXRlKTtcbiAgICAgIGlmIChpbml0aWFsU3RhdGUgIT09IHN0YXRlKSB7XG4gICAgICAgIHRvZ2dsZUNvbmZpZy5vblRvZ2dsZWQoY29tcG9uZW50LCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB0b2dnbGUkMiA9IChjb21wb25lbnQsIHRvZ2dsZUNvbmZpZywgdG9nZ2xlU3RhdGUpID0+IHtcbiAgICAgIHNldCQyKGNvbXBvbmVudCwgdG9nZ2xlQ29uZmlnLCB0b2dnbGVTdGF0ZSwgIXRvZ2dsZVN0YXRlLmdldCgpKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uID0gKGNvbXBvbmVudCwgdG9nZ2xlQ29uZmlnLCB0b2dnbGVTdGF0ZSkgPT4ge1xuICAgICAgc2V0JDIoY29tcG9uZW50LCB0b2dnbGVDb25maWcsIHRvZ2dsZVN0YXRlLCB0cnVlKTtcbiAgICB9O1xuICAgIGNvbnN0IG9mZiA9IChjb21wb25lbnQsIHRvZ2dsZUNvbmZpZywgdG9nZ2xlU3RhdGUpID0+IHtcbiAgICAgIHNldCQyKGNvbXBvbmVudCwgdG9nZ2xlQ29uZmlnLCB0b2dnbGVTdGF0ZSwgZmFsc2UpO1xuICAgIH07XG4gICAgY29uc3QgaXNPbiA9IChjb21wb25lbnQsIHRvZ2dsZUNvbmZpZywgdG9nZ2xlU3RhdGUpID0+IHRvZ2dsZVN0YXRlLmdldCgpO1xuICAgIGNvbnN0IG9uTG9hZCA9IChjb21wb25lbnQsIHRvZ2dsZUNvbmZpZywgdG9nZ2xlU3RhdGUpID0+IHtcbiAgICAgIHNldCQyKGNvbXBvbmVudCwgdG9nZ2xlQ29uZmlnLCB0b2dnbGVTdGF0ZSwgdG9nZ2xlQ29uZmlnLnNlbGVjdGVkKTtcbiAgICB9O1xuXG4gICAgdmFyIFRvZ2dsZUFwaXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgb25Mb2FkOiBvbkxvYWQsXG4gICAgICAgIHRvZ2dsZTogdG9nZ2xlJDIsXG4gICAgICAgIGlzT246IGlzT24sXG4gICAgICAgIG9uOiBvbixcbiAgICAgICAgb2ZmOiBvZmYsXG4gICAgICAgIHNldDogc2V0JDJcbiAgICB9KTtcblxuICAgIGNvbnN0IGV4aGliaXQkMyA9ICgpID0+IG51JDcoe30pO1xuICAgIGNvbnN0IGV2ZW50cyRiID0gKHRvZ2dsZUNvbmZpZywgdG9nZ2xlU3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGUgPSBleGVjdXRlRXZlbnQodG9nZ2xlQ29uZmlnLCB0b2dnbGVTdGF0ZSwgdG9nZ2xlJDIpO1xuICAgICAgY29uc3QgbG9hZCA9IGxvYWRFdmVudCh0b2dnbGVDb25maWcsIHRvZ2dsZVN0YXRlLCBvbkxvYWQpO1xuICAgICAgcmV0dXJuIGRlcml2ZSQyKGZsYXR0ZW4oW1xuICAgICAgICB0b2dnbGVDb25maWcudG9nZ2xlT25FeGVjdXRlID8gW2V4ZWN1dGVdIDogW10sXG4gICAgICAgIFtsb2FkXVxuICAgICAgXSkpO1xuICAgIH07XG5cbiAgICB2YXIgQWN0aXZlVG9nZ2xlID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIGV4aGliaXQ6IGV4aGliaXQkMyxcbiAgICAgICAgZXZlbnRzOiBldmVudHMkYlxuICAgIH0pO1xuXG4gICAgY29uc3QgdXBkYXRlUHJlc3NlZCA9IChjb21wb25lbnQsIGFyaWFJbmZvLCBzdGF0dXMpID0+IHtcbiAgICAgIHNldCQ5KGNvbXBvbmVudC5lbGVtZW50LCAnYXJpYS1wcmVzc2VkJywgc3RhdHVzKTtcbiAgICAgIGlmIChhcmlhSW5mby5zeW5jV2l0aEV4cGFuZGVkKSB7XG4gICAgICAgIHVwZGF0ZUV4cGFuZGVkKGNvbXBvbmVudCwgYXJpYUluZm8sIHN0YXR1cyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVTZWxlY3RlZCA9IChjb21wb25lbnQsIGFyaWFJbmZvLCBzdGF0dXMpID0+IHtcbiAgICAgIHNldCQ5KGNvbXBvbmVudC5lbGVtZW50LCAnYXJpYS1zZWxlY3RlZCcsIHN0YXR1cyk7XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVDaGVja2VkID0gKGNvbXBvbmVudCwgYXJpYUluZm8sIHN0YXR1cykgPT4ge1xuICAgICAgc2V0JDkoY29tcG9uZW50LmVsZW1lbnQsICdhcmlhLWNoZWNrZWQnLCBzdGF0dXMpO1xuICAgIH07XG4gICAgY29uc3QgdXBkYXRlRXhwYW5kZWQgPSAoY29tcG9uZW50LCBhcmlhSW5mbywgc3RhdHVzKSA9PiB7XG4gICAgICBzZXQkOShjb21wb25lbnQuZWxlbWVudCwgJ2FyaWEtZXhwYW5kZWQnLCBzdGF0dXMpO1xuICAgIH07XG5cbiAgICB2YXIgVG9nZ2xlU2NoZW1hID0gW1xuICAgICAgZGVmYXVsdGVkKCdzZWxlY3RlZCcsIGZhbHNlKSxcbiAgICAgIG9wdGlvbiQzKCd0b2dnbGVDbGFzcycpLFxuICAgICAgZGVmYXVsdGVkKCd0b2dnbGVPbkV4ZWN1dGUnLCB0cnVlKSxcbiAgICAgIG9uSGFuZGxlcignb25Ub2dnbGVkJyksXG4gICAgICBkZWZhdWx0ZWRPZignYXJpYScsIHsgbW9kZTogJ25vbmUnIH0sIGNob29zZSQxKCdtb2RlJywge1xuICAgICAgICBwcmVzc2VkOiBbXG4gICAgICAgICAgZGVmYXVsdGVkKCdzeW5jV2l0aEV4cGFuZGVkJywgZmFsc2UpLFxuICAgICAgICAgIG91dHB1dCQxKCd1cGRhdGUnLCB1cGRhdGVQcmVzc2VkKVxuICAgICAgICBdLFxuICAgICAgICBjaGVja2VkOiBbb3V0cHV0JDEoJ3VwZGF0ZScsIHVwZGF0ZUNoZWNrZWQpXSxcbiAgICAgICAgZXhwYW5kZWQ6IFtvdXRwdXQkMSgndXBkYXRlJywgdXBkYXRlRXhwYW5kZWQpXSxcbiAgICAgICAgc2VsZWN0ZWQ6IFtvdXRwdXQkMSgndXBkYXRlJywgdXBkYXRlU2VsZWN0ZWQpXSxcbiAgICAgICAgbm9uZTogW291dHB1dCQxKCd1cGRhdGUnLCBub29wKV1cbiAgICAgIH0pKVxuICAgIF07XG5cbiAgICBjb25zdCBUb2dnbGluZyA9IGNyZWF0ZSQ0KHtcbiAgICAgIGZpZWxkczogVG9nZ2xlU2NoZW1hLFxuICAgICAgbmFtZTogJ3RvZ2dsaW5nJyxcbiAgICAgIGFjdGl2ZTogQWN0aXZlVG9nZ2xlLFxuICAgICAgYXBpczogVG9nZ2xlQXBpcyxcbiAgICAgIHN0YXRlOiBTZXR1cEJlaGF2aW91ckNlbGxTdGF0ZShmYWxzZSlcbiAgICB9KTtcblxuICAgIGNvbnN0IHBvaW50ZXJFdmVudHMgPSAoKSA9PiB7XG4gICAgICBjb25zdCBvbkNsaWNrID0gKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgc2ltdWxhdGVkRXZlbnQuc3RvcCgpO1xuICAgICAgICBlbWl0RXhlY3V0ZShjb21wb25lbnQpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHJ1biQxKGNsaWNrKCksIG9uQ2xpY2spLFxuICAgICAgICBydW4kMSh0YXAoKSwgb25DbGljayksXG4gICAgICAgIGN1dHRlcih0b3VjaHN0YXJ0KCkpLFxuICAgICAgICBjdXR0ZXIobW91c2Vkb3duKCkpXG4gICAgICBdO1xuICAgIH07XG4gICAgY29uc3QgZXZlbnRzJGEgPSBvcHRBY3Rpb24gPT4ge1xuICAgICAgY29uc3QgZXhlY3V0ZUhhbmRsZXIgPSBhY3Rpb24gPT4gcnVuT25FeGVjdXRlJDEoKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgYWN0aW9uKGNvbXBvbmVudCk7XG4gICAgICAgIHNpbXVsYXRlZEV2ZW50LnN0b3AoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRlcml2ZSQyKGZsYXR0ZW4oW1xuICAgICAgICBvcHRBY3Rpb24ubWFwKGV4ZWN1dGVIYW5kbGVyKS50b0FycmF5KCksXG4gICAgICAgIHBvaW50ZXJFdmVudHMoKVxuICAgICAgXSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBob3ZlckV2ZW50ID0gJ2FsbG95Lml0ZW0taG92ZXInO1xuICAgIGNvbnN0IGZvY3VzRXZlbnQgPSAnYWxsb3kuaXRlbS1mb2N1cyc7XG4gICAgY29uc3QgdG9nZ2xlZEV2ZW50ID0gJ2FsbG95Lml0ZW0tdG9nZ2xlZCc7XG4gICAgY29uc3Qgb25Ib3ZlciA9IGl0ZW0gPT4ge1xuICAgICAgaWYgKHNlYXJjaChpdGVtLmVsZW1lbnQpLmlzTm9uZSgpIHx8IEZvY3VzaW5nLmlzRm9jdXNlZChpdGVtKSkge1xuICAgICAgICBpZiAoIUZvY3VzaW5nLmlzRm9jdXNlZChpdGVtKSkge1xuICAgICAgICAgIEZvY3VzaW5nLmZvY3VzKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVtaXRXaXRoKGl0ZW0sIGhvdmVyRXZlbnQsIHsgaXRlbSB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG9uRm9jdXMkMSA9IGl0ZW0gPT4ge1xuICAgICAgZW1pdFdpdGgoaXRlbSwgZm9jdXNFdmVudCwgeyBpdGVtIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25Ub2dnbGVkID0gKGl0ZW0sIHN0YXRlKSA9PiB7XG4gICAgICBlbWl0V2l0aChpdGVtLCB0b2dnbGVkRXZlbnQsIHtcbiAgICAgICAgaXRlbSxcbiAgICAgICAgc3RhdGVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaG92ZXIgPSBjb25zdGFudCQxKGhvdmVyRXZlbnQpO1xuICAgIGNvbnN0IGZvY3VzJDEgPSBjb25zdGFudCQxKGZvY3VzRXZlbnQpO1xuICAgIGNvbnN0IHRvZ2dsZWQgPSBjb25zdGFudCQxKHRvZ2dsZWRFdmVudCk7XG5cbiAgICBjb25zdCBnZXRJdGVtUm9sZSA9IGRldGFpbCA9PiBkZXRhaWwudG9nZ2xpbmcubWFwKHRvZ2dsaW5nID0+IHRvZ2dsaW5nLmV4Y2x1c2l2ZSA/ICdtZW51aXRlbXJhZGlvJyA6ICdtZW51aXRlbWNoZWNrYm94JykuZ2V0T3IoJ21lbnVpdGVtJyk7XG4gICAgY29uc3QgZ2V0VG9nZ2xpbmdTcGVjID0gdENvbmZpZyA9PiAoe1xuICAgICAgYXJpYTogeyBtb2RlOiAnY2hlY2tlZCcgfSxcbiAgICAgIC4uLmZpbHRlciQxKHRDb25maWcsIChfdmFsdWUsIG5hbWUpID0+IG5hbWUgIT09ICdleGNsdXNpdmUnKSxcbiAgICAgIG9uVG9nZ2xlZDogKGNvbXBvbmVudCwgc3RhdGUpID0+IHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odENvbmZpZy5vblRvZ2dsZWQpKSB7XG4gICAgICAgICAgdENvbmZpZy5vblRvZ2dsZWQoY29tcG9uZW50LCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Ub2dnbGVkKGNvbXBvbmVudCwgc3RhdGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGJ1aWxkZXIkMiA9IGRldGFpbCA9PiAoe1xuICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgZG9tTW9kaWZpY2F0aW9uOiB7XG4gICAgICAgIC4uLmRldGFpbC5kb21Nb2RpZmljYXRpb24sXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAncm9sZSc6IGdldEl0ZW1Sb2xlKGRldGFpbCksXG4gICAgICAgICAgLi4uZGV0YWlsLmRvbU1vZGlmaWNhdGlvbi5hdHRyaWJ1dGVzLFxuICAgICAgICAgICdhcmlhLWhhc3BvcHVwJzogZGV0YWlsLmhhc1N1Ym1lbnUsXG4gICAgICAgICAgLi4uZGV0YWlsLmhhc1N1Ym1lbnUgPyB7ICdhcmlhLWV4cGFuZGVkJzogZmFsc2UgfSA6IHt9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBiZWhhdmlvdXJzOiBTa2V0Y2hCZWhhdmlvdXJzLmF1Z21lbnQoZGV0YWlsLml0ZW1CZWhhdmlvdXJzLCBbXG4gICAgICAgIGRldGFpbC50b2dnbGluZy5mb2xkKFRvZ2dsaW5nLnJldm9rZSwgdENvbmZpZyA9PiBUb2dnbGluZy5jb25maWcoZ2V0VG9nZ2xpbmdTcGVjKHRDb25maWcpKSksXG4gICAgICAgIEZvY3VzaW5nLmNvbmZpZyh7XG4gICAgICAgICAgaWdub3JlOiBkZXRhaWwuaWdub3JlRm9jdXMsXG4gICAgICAgICAgc3RvcE1vdXNlZG93bjogZGV0YWlsLmlnbm9yZUZvY3VzLFxuICAgICAgICAgIG9uRm9jdXM6IGNvbXBvbmVudCA9PiB7XG4gICAgICAgICAgICBvbkZvY3VzJDEoY29tcG9uZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBLZXlpbmcuY29uZmlnKHsgbW9kZTogJ2V4ZWN1dGlvbicgfSksXG4gICAgICAgIFJlcHJlc2VudGluZy5jb25maWcoe1xuICAgICAgICAgIHN0b3JlOiB7XG4gICAgICAgICAgICBtb2RlOiAnbWVtb3J5JyxcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogZGV0YWlsLmRhdGFcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBjb25maWcoJ2l0ZW0tdHlwZS1ldmVudHMnLCBbXG4gICAgICAgICAgLi4ucG9pbnRlckV2ZW50cygpLFxuICAgICAgICAgIHJ1biQxKG1vdXNlb3ZlcigpLCBvbkhvdmVyKSxcbiAgICAgICAgICBydW4kMShmb2N1c0l0ZW0oKSwgRm9jdXNpbmcuZm9jdXMpXG4gICAgICAgIF0pXG4gICAgICBdKSxcbiAgICAgIGNvbXBvbmVudHM6IGRldGFpbC5jb21wb25lbnRzLFxuICAgICAgZXZlbnRPcmRlcjogZGV0YWlsLmV2ZW50T3JkZXJcbiAgICB9KTtcbiAgICBjb25zdCBzY2hlbWEkcCA9IFtcbiAgICAgIHJlcXVpcmVkJDEoJ2RhdGEnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ2NvbXBvbmVudHMnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ2RvbScpLFxuICAgICAgZGVmYXVsdGVkKCdoYXNTdWJtZW51JywgZmFsc2UpLFxuICAgICAgb3B0aW9uJDMoJ3RvZ2dsaW5nJyksXG4gICAgICBTa2V0Y2hCZWhhdmlvdXJzLmZpZWxkKCdpdGVtQmVoYXZpb3VycycsIFtcbiAgICAgICAgVG9nZ2xpbmcsXG4gICAgICAgIEZvY3VzaW5nLFxuICAgICAgICBLZXlpbmcsXG4gICAgICAgIFJlcHJlc2VudGluZ1xuICAgICAgXSksXG4gICAgICBkZWZhdWx0ZWQoJ2lnbm9yZUZvY3VzJywgZmFsc2UpLFxuICAgICAgZGVmYXVsdGVkKCdkb21Nb2RpZmljYXRpb24nLCB7fSksXG4gICAgICBvdXRwdXQkMSgnYnVpbGRlcicsIGJ1aWxkZXIkMiksXG4gICAgICBkZWZhdWx0ZWQoJ2V2ZW50T3JkZXInLCB7fSlcbiAgICBdO1xuXG4gICAgY29uc3QgYnVpbGRlciQxID0gZGV0YWlsID0+ICh7XG4gICAgICBkb206IGRldGFpbC5kb20sXG4gICAgICBjb21wb25lbnRzOiBkZXRhaWwuY29tcG9uZW50cyxcbiAgICAgIGV2ZW50czogZGVyaXZlJDIoW3N0b3BwZXIoZm9jdXNJdGVtKCkpXSlcbiAgICB9KTtcbiAgICBjb25zdCBzY2hlbWEkbyA9IFtcbiAgICAgIHJlcXVpcmVkJDEoJ2RvbScpLFxuICAgICAgcmVxdWlyZWQkMSgnY29tcG9uZW50cycpLFxuICAgICAgb3V0cHV0JDEoJ2J1aWxkZXInLCBidWlsZGVyJDEpXG4gICAgXTtcblxuICAgIGNvbnN0IG93bmVyJDIgPSBjb25zdGFudCQxKCdpdGVtLXdpZGdldCcpO1xuICAgIGNvbnN0IHBhcnRzJGggPSBjb25zdGFudCQxKFtyZXF1aXJlZCh7XG4gICAgICAgIG5hbWU6ICd3aWRnZXQnLFxuICAgICAgICBvdmVycmlkZXM6IGRldGFpbCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtSZXByZXNlbnRpbmcuY29uZmlnKHtcbiAgICAgICAgICAgICAgICBzdG9yZToge1xuICAgICAgICAgICAgICAgICAgbW9kZTogJ21hbnVhbCcsXG4gICAgICAgICAgICAgICAgICBnZXRWYWx1ZTogX2NvbXBvbmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXRhaWwuZGF0YTtcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBzZXRWYWx1ZTogbm9vcFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSldKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pXSk7XG5cbiAgICBjb25zdCBidWlsZGVyID0gZGV0YWlsID0+IHtcbiAgICAgIGNvbnN0IHN1YnMgPSBzdWJzdGl0dXRlcyhvd25lciQyKCksIGRldGFpbCwgcGFydHMkaCgpKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb21wb25lbnRzJDEob3duZXIkMigpLCBkZXRhaWwsIHN1YnMuaW50ZXJuYWxzKCkpO1xuICAgICAgY29uc3QgZm9jdXNXaWRnZXQgPSBjb21wb25lbnQgPT4gZ2V0UGFydChjb21wb25lbnQsIGRldGFpbCwgJ3dpZGdldCcpLm1hcCh3aWRnZXQgPT4ge1xuICAgICAgICBLZXlpbmcuZm9jdXNJbih3aWRnZXQpO1xuICAgICAgICByZXR1cm4gd2lkZ2V0O1xuICAgICAgfSk7XG4gICAgICBjb25zdCBvbkhvcml6b250YWxBcnJvdyA9IChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50KSA9PiBpbnNpZGUoc2ltdWxhdGVkRXZlbnQuZXZlbnQudGFyZ2V0KSA/IE9wdGlvbmFsLm5vbmUoKSA6ICgoKSA9PiB7XG4gICAgICAgIGlmIChkZXRhaWwuYXV0b2ZvY3VzKSB7XG4gICAgICAgICAgc2ltdWxhdGVkRXZlbnQuc2V0U291cmNlKGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH0pKCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IGRldGFpbC5kb20sXG4gICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgIGRvbU1vZGlmaWNhdGlvbjogZGV0YWlsLmRvbU1vZGlmaWNhdGlvbixcbiAgICAgICAgZXZlbnRzOiBkZXJpdmUkMihbXG4gICAgICAgICAgcnVuT25FeGVjdXRlJDEoKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGZvY3VzV2lkZ2V0KGNvbXBvbmVudCkuZWFjaChfd2lkZ2V0ID0+IHtcbiAgICAgICAgICAgICAgc2ltdWxhdGVkRXZlbnQuc3RvcCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVuJDEobW91c2VvdmVyKCksIG9uSG92ZXIpLFxuICAgICAgICAgIHJ1biQxKGZvY3VzSXRlbSgpLCAoY29tcG9uZW50LCBfc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChkZXRhaWwuYXV0b2ZvY3VzKSB7XG4gICAgICAgICAgICAgIGZvY3VzV2lkZ2V0KGNvbXBvbmVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBGb2N1c2luZy5mb2N1cyhjb21wb25lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF0pLFxuICAgICAgICBiZWhhdmlvdXJzOiBTa2V0Y2hCZWhhdmlvdXJzLmF1Z21lbnQoZGV0YWlsLndpZGdldEJlaGF2aW91cnMsIFtcbiAgICAgICAgICBSZXByZXNlbnRpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIHN0b3JlOiB7XG4gICAgICAgICAgICAgIG1vZGU6ICdtZW1vcnknLFxuICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IGRldGFpbC5kYXRhXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgRm9jdXNpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIGlnbm9yZTogZGV0YWlsLmlnbm9yZUZvY3VzLFxuICAgICAgICAgICAgb25Gb2N1czogY29tcG9uZW50ID0+IHtcbiAgICAgICAgICAgICAgb25Gb2N1cyQxKGNvbXBvbmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBtb2RlOiAnc3BlY2lhbCcsXG4gICAgICAgICAgICBmb2N1c0luOiBkZXRhaWwuYXV0b2ZvY3VzID8gY29tcG9uZW50ID0+IHtcbiAgICAgICAgICAgICAgZm9jdXNXaWRnZXQoY29tcG9uZW50KTtcbiAgICAgICAgICAgIH0gOiByZXZva2UoKSxcbiAgICAgICAgICAgIG9uTGVmdDogb25Ib3Jpem9udGFsQXJyb3csXG4gICAgICAgICAgICBvblJpZ2h0OiBvbkhvcml6b250YWxBcnJvdyxcbiAgICAgICAgICAgIG9uRXNjYXBlOiAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIUZvY3VzaW5nLmlzRm9jdXNlZChjb21wb25lbnQpICYmICFkZXRhaWwuYXV0b2ZvY3VzKSB7XG4gICAgICAgICAgICAgICAgRm9jdXNpbmcuZm9jdXMoY29tcG9uZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZXRhaWwuYXV0b2ZvY3VzKSB7XG4gICAgICAgICAgICAgICAgc2ltdWxhdGVkRXZlbnQuc2V0U291cmNlKGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHNjaGVtYSRuID0gW1xuICAgICAgcmVxdWlyZWQkMSgndWlkJyksXG4gICAgICByZXF1aXJlZCQxKCdkYXRhJyksXG4gICAgICByZXF1aXJlZCQxKCdjb21wb25lbnRzJyksXG4gICAgICByZXF1aXJlZCQxKCdkb20nKSxcbiAgICAgIGRlZmF1bHRlZCgnYXV0b2ZvY3VzJywgZmFsc2UpLFxuICAgICAgZGVmYXVsdGVkKCdpZ25vcmVGb2N1cycsIGZhbHNlKSxcbiAgICAgIFNrZXRjaEJlaGF2aW91cnMuZmllbGQoJ3dpZGdldEJlaGF2aW91cnMnLCBbXG4gICAgICAgIFJlcHJlc2VudGluZyxcbiAgICAgICAgRm9jdXNpbmcsXG4gICAgICAgIEtleWluZ1xuICAgICAgXSksXG4gICAgICBkZWZhdWx0ZWQoJ2RvbU1vZGlmaWNhdGlvbicsIHt9KSxcbiAgICAgIGRlZmF1bHRVaWRzU2NoZW1hKHBhcnRzJGgoKSksXG4gICAgICBvdXRwdXQkMSgnYnVpbGRlcicsIGJ1aWxkZXIpXG4gICAgXTtcblxuICAgIGNvbnN0IGl0ZW1TY2hlbWEkMiA9IGNob29zZSQxKCd0eXBlJywge1xuICAgICAgd2lkZ2V0OiBzY2hlbWEkbixcbiAgICAgIGl0ZW06IHNjaGVtYSRwLFxuICAgICAgc2VwYXJhdG9yOiBzY2hlbWEkb1xuICAgIH0pO1xuICAgIGNvbnN0IGNvbmZpZ3VyZUdyaWQgPSAoZGV0YWlsLCBtb3ZlbWVudEluZm8pID0+ICh7XG4gICAgICBtb2RlOiAnZmxhdGdyaWQnLFxuICAgICAgc2VsZWN0b3I6ICcuJyArIGRldGFpbC5tYXJrZXJzLml0ZW0sXG4gICAgICBpbml0U2l6ZToge1xuICAgICAgICBudW1Db2x1bW5zOiBtb3ZlbWVudEluZm8uaW5pdFNpemUubnVtQ29sdW1ucyxcbiAgICAgICAgbnVtUm93czogbW92ZW1lbnRJbmZvLmluaXRTaXplLm51bVJvd3NcbiAgICAgIH0sXG4gICAgICBmb2N1c01hbmFnZXI6IGRldGFpbC5mb2N1c01hbmFnZXJcbiAgICB9KTtcbiAgICBjb25zdCBjb25maWd1cmVNYXRyaXggPSAoZGV0YWlsLCBtb3ZlbWVudEluZm8pID0+ICh7XG4gICAgICBtb2RlOiAnbWF0cml4JyxcbiAgICAgIHNlbGVjdG9yczoge1xuICAgICAgICByb3c6IG1vdmVtZW50SW5mby5yb3dTZWxlY3RvcixcbiAgICAgICAgY2VsbDogJy4nICsgZGV0YWlsLm1hcmtlcnMuaXRlbVxuICAgICAgfSxcbiAgICAgIHByZXZpb3VzU2VsZWN0b3I6IG1vdmVtZW50SW5mby5wcmV2aW91c1NlbGVjdG9yLFxuICAgICAgZm9jdXNNYW5hZ2VyOiBkZXRhaWwuZm9jdXNNYW5hZ2VyXG4gICAgfSk7XG4gICAgY29uc3QgY29uZmlndXJlTWVudSA9IChkZXRhaWwsIG1vdmVtZW50SW5mbykgPT4gKHtcbiAgICAgIG1vZGU6ICdtZW51JyxcbiAgICAgIHNlbGVjdG9yOiAnLicgKyBkZXRhaWwubWFya2Vycy5pdGVtLFxuICAgICAgbW92ZU9uVGFiOiBtb3ZlbWVudEluZm8ubW92ZU9uVGFiLFxuICAgICAgZm9jdXNNYW5hZ2VyOiBkZXRhaWwuZm9jdXNNYW5hZ2VyXG4gICAgfSk7XG4gICAgY29uc3QgcGFydHMkZyA9IGNvbnN0YW50JDEoW2dyb3VwKHtcbiAgICAgICAgZmFjdG9yeToge1xuICAgICAgICAgIHNrZXRjaDogc3BlYyA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtSW5mbyA9IGFzUmF3T3JEaWUkMSgnbWVudS5zcGVjIGl0ZW0nLCBpdGVtU2NoZW1hJDIsIHNwZWMpO1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1JbmZvLmJ1aWxkZXIoaXRlbUluZm8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbmFtZTogJ2l0ZW1zJyxcbiAgICAgICAgdW5pdDogJ2l0ZW0nLFxuICAgICAgICBkZWZhdWx0czogKGRldGFpbCwgdSkgPT4ge1xuICAgICAgICAgIHJldHVybiBoYXMkMih1LCAndWlkJykgPyB1IDoge1xuICAgICAgICAgICAgLi4udSxcbiAgICAgICAgICAgIHVpZDogZ2VuZXJhdGUkNSgnaXRlbScpXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgb3ZlcnJpZGVzOiAoZGV0YWlsLCB1KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHUudHlwZSxcbiAgICAgICAgICAgIGlnbm9yZUZvY3VzOiBkZXRhaWwuZmFrZUZvY3VzLFxuICAgICAgICAgICAgZG9tTW9kaWZpY2F0aW9uOiB7IGNsYXNzZXM6IFtkZXRhaWwubWFya2Vycy5pdGVtXSB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSldKTtcbiAgICBjb25zdCBzY2hlbWEkbSA9IGNvbnN0YW50JDEoW1xuICAgICAgcmVxdWlyZWQkMSgndmFsdWUnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ2l0ZW1zJyksXG4gICAgICByZXF1aXJlZCQxKCdkb20nKSxcbiAgICAgIHJlcXVpcmVkJDEoJ2NvbXBvbmVudHMnKSxcbiAgICAgIGRlZmF1bHRlZCgnZXZlbnRPcmRlcicsIHt9KSxcbiAgICAgIGZpZWxkKCdtZW51QmVoYXZpb3VycycsIFtcbiAgICAgICAgSGlnaGxpZ2h0aW5nLFxuICAgICAgICBSZXByZXNlbnRpbmcsXG4gICAgICAgIENvbXBvc2luZyxcbiAgICAgICAgS2V5aW5nXG4gICAgICBdKSxcbiAgICAgIGRlZmF1bHRlZE9mKCdtb3ZlbWVudCcsIHtcbiAgICAgICAgbW9kZTogJ21lbnUnLFxuICAgICAgICBtb3ZlT25UYWI6IHRydWVcbiAgICAgIH0sIGNob29zZSQxKCdtb2RlJywge1xuICAgICAgICBncmlkOiBbXG4gICAgICAgICAgaW5pdFNpemUoKSxcbiAgICAgICAgICBvdXRwdXQkMSgnY29uZmlnJywgY29uZmlndXJlR3JpZClcbiAgICAgICAgXSxcbiAgICAgICAgbWF0cml4OiBbXG4gICAgICAgICAgb3V0cHV0JDEoJ2NvbmZpZycsIGNvbmZpZ3VyZU1hdHJpeCksXG4gICAgICAgICAgcmVxdWlyZWQkMSgncm93U2VsZWN0b3InKSxcbiAgICAgICAgICBkZWZhdWx0ZWQoJ3ByZXZpb3VzU2VsZWN0b3InLCBPcHRpb25hbC5ub25lKVxuICAgICAgICBdLFxuICAgICAgICBtZW51OiBbXG4gICAgICAgICAgZGVmYXVsdGVkKCdtb3ZlT25UYWInLCB0cnVlKSxcbiAgICAgICAgICBvdXRwdXQkMSgnY29uZmlnJywgY29uZmlndXJlTWVudSlcbiAgICAgICAgXVxuICAgICAgfSkpLFxuICAgICAgaXRlbU1hcmtlcnMoKSxcbiAgICAgIGRlZmF1bHRlZCgnZmFrZUZvY3VzJywgZmFsc2UpLFxuICAgICAgZGVmYXVsdGVkKCdmb2N1c01hbmFnZXInLCBkb20kMigpKSxcbiAgICAgIG9uSGFuZGxlcignb25IaWdobGlnaHQnKSxcbiAgICAgIG9uSGFuZGxlcignb25EZWhpZ2hsaWdodCcpXG4gICAgXSk7XG5cbiAgICBjb25zdCBmb2N1cyA9IGNvbnN0YW50JDEoJ2FsbG95Lm1lbnUtZm9jdXMnKTtcblxuICAgIGNvbnN0IGRlc2VsZWN0T3RoZXJSYWRpb0l0ZW1zID0gKG1lbnUsIGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGNoZWNrZWRSYWRpb0l0ZW1zID0gZGVzY2VuZGFudHMobWVudS5lbGVtZW50LCAnW3JvbGU9XCJtZW51aXRlbXJhZGlvXCJdW2FyaWEtY2hlY2tlZD1cInRydWVcIl0nKTtcbiAgICAgIGVhY2gkMShjaGVja2VkUmFkaW9JdGVtcywgZWxlID0+IHtcbiAgICAgICAgaWYgKCFlcShlbGUsIGl0ZW0uZWxlbWVudCkpIHtcbiAgICAgICAgICBtZW51LmdldFN5c3RlbSgpLmdldEJ5RG9tKGVsZSkuZWFjaChjID0+IHtcbiAgICAgICAgICAgIFRvZ2dsaW5nLm9mZihjKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBtYWtlJDcgPSAoZGV0YWlsLCBjb21wb25lbnRzLCBfc3BlYywgX2V4dGVybmFscykgPT4gKHtcbiAgICAgIHVpZDogZGV0YWlsLnVpZCxcbiAgICAgIGRvbTogZGV0YWlsLmRvbSxcbiAgICAgIG1hcmtlcnM6IGRldGFpbC5tYXJrZXJzLFxuICAgICAgYmVoYXZpb3VyczogYXVnbWVudChkZXRhaWwubWVudUJlaGF2aW91cnMsIFtcbiAgICAgICAgSGlnaGxpZ2h0aW5nLmNvbmZpZyh7XG4gICAgICAgICAgaGlnaGxpZ2h0Q2xhc3M6IGRldGFpbC5tYXJrZXJzLnNlbGVjdGVkSXRlbSxcbiAgICAgICAgICBpdGVtQ2xhc3M6IGRldGFpbC5tYXJrZXJzLml0ZW0sXG4gICAgICAgICAgb25IaWdobGlnaHQ6IGRldGFpbC5vbkhpZ2hsaWdodCxcbiAgICAgICAgICBvbkRlaGlnaGxpZ2h0OiBkZXRhaWwub25EZWhpZ2hsaWdodFxuICAgICAgICB9KSxcbiAgICAgICAgUmVwcmVzZW50aW5nLmNvbmZpZyh7XG4gICAgICAgICAgc3RvcmU6IHtcbiAgICAgICAgICAgIG1vZGU6ICdtZW1vcnknLFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiBkZXRhaWwudmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBDb21wb3NpbmcuY29uZmlnKHsgZmluZDogT3B0aW9uYWwuc29tZSB9KSxcbiAgICAgICAgS2V5aW5nLmNvbmZpZyhkZXRhaWwubW92ZW1lbnQuY29uZmlnKGRldGFpbCwgZGV0YWlsLm1vdmVtZW50KSlcbiAgICAgIF0pLFxuICAgICAgZXZlbnRzOiBkZXJpdmUkMihbXG4gICAgICAgIHJ1biQxKGZvY3VzJDEoKSwgKG1lbnUsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgZXZlbnQgPSBzaW11bGF0ZWRFdmVudC5ldmVudDtcbiAgICAgICAgICBtZW51LmdldFN5c3RlbSgpLmdldEJ5RG9tKGV2ZW50LnRhcmdldCkuZWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIEhpZ2hsaWdodGluZy5oaWdobGlnaHQobWVudSwgaXRlbSk7XG4gICAgICAgICAgICBzaW11bGF0ZWRFdmVudC5zdG9wKCk7XG4gICAgICAgICAgICBlbWl0V2l0aChtZW51LCBmb2N1cygpLCB7XG4gICAgICAgICAgICAgIG1lbnUsXG4gICAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgcnVuJDEoaG92ZXIoKSwgKG1lbnUsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbSA9IHNpbXVsYXRlZEV2ZW50LmV2ZW50Lml0ZW07XG4gICAgICAgICAgSGlnaGxpZ2h0aW5nLmhpZ2hsaWdodChtZW51LCBpdGVtKTtcbiAgICAgICAgfSksXG4gICAgICAgIHJ1biQxKHRvZ2dsZWQoKSwgKG1lbnUsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3Qge2l0ZW0sIHN0YXRlfSA9IHNpbXVsYXRlZEV2ZW50LmV2ZW50O1xuICAgICAgICAgIGlmIChzdGF0ZSAmJiBnZXQkZihpdGVtLmVsZW1lbnQsICdyb2xlJykgPT09ICdtZW51aXRlbXJhZGlvJykge1xuICAgICAgICAgICAgZGVzZWxlY3RPdGhlclJhZGlvSXRlbXMobWVudSwgaXRlbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgXSksXG4gICAgICBjb21wb25lbnRzLFxuICAgICAgZXZlbnRPcmRlcjogZGV0YWlsLmV2ZW50T3JkZXIsXG4gICAgICBkb21Nb2RpZmljYXRpb246IHsgYXR0cmlidXRlczogeyByb2xlOiAnbWVudScgfSB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBNZW51ID0gY29tcG9zaXRlKHtcbiAgICAgIG5hbWU6ICdNZW51JyxcbiAgICAgIGNvbmZpZ0ZpZWxkczogc2NoZW1hJG0oKSxcbiAgICAgIHBhcnRGaWVsZHM6IHBhcnRzJGcoKSxcbiAgICAgIGZhY3Rvcnk6IG1ha2UkN1xuICAgIH0pO1xuXG4gICAgY29uc3QgdHJhbnNwb3NlJDEgPSBvYmogPT4gdHVwbGVNYXAob2JqLCAodiwgaykgPT4gKHtcbiAgICAgIGs6IHYsXG4gICAgICB2OiBrXG4gICAgfSkpO1xuICAgIGNvbnN0IHRyYWNlID0gKGl0ZW1zLCBieUl0ZW0sIGJ5TWVudSwgZmluaXNoKSA9PiBnZXQkZyhieU1lbnUsIGZpbmlzaCkuYmluZCh0cmlnZ2VySXRlbSA9PiBnZXQkZyhpdGVtcywgdHJpZ2dlckl0ZW0pLmJpbmQodHJpZ2dlck1lbnUgPT4ge1xuICAgICAgY29uc3QgcmVzdCA9IHRyYWNlKGl0ZW1zLCBieUl0ZW0sIGJ5TWVudSwgdHJpZ2dlck1lbnUpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoW3RyaWdnZXJNZW51XS5jb25jYXQocmVzdCkpO1xuICAgIH0pKS5nZXRPcihbXSk7XG4gICAgY29uc3QgZ2VuZXJhdGUkMiA9IChtZW51cywgZXhwYW5zaW9ucykgPT4ge1xuICAgICAgY29uc3QgaXRlbXMgPSB7fTtcbiAgICAgIGVhY2gobWVudXMsIChtZW51SXRlbXMsIG1lbnUpID0+IHtcbiAgICAgICAgZWFjaCQxKG1lbnVJdGVtcywgaXRlbSA9PiB7XG4gICAgICAgICAgaXRlbXNbaXRlbV0gPSBtZW51O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYnlJdGVtID0gZXhwYW5zaW9ucztcbiAgICAgIGNvbnN0IGJ5TWVudSA9IHRyYW5zcG9zZSQxKGV4cGFuc2lvbnMpO1xuICAgICAgY29uc3QgbWVudVBhdGhzID0gbWFwJDEoYnlNZW51LCAoX3RyaWdnZXJJdGVtLCBzdWJtZW51KSA9PiBbc3VibWVudV0uY29uY2F0KHRyYWNlKGl0ZW1zLCBieUl0ZW0sIGJ5TWVudSwgc3VibWVudSkpKTtcbiAgICAgIHJldHVybiBtYXAkMShpdGVtcywgbWVudSA9PiBnZXQkZyhtZW51UGF0aHMsIG1lbnUpLmdldE9yKFttZW51XSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBpbml0JGMgPSAoKSA9PiB7XG4gICAgICBjb25zdCBleHBhbnNpb25zID0gQ2VsbCh7fSk7XG4gICAgICBjb25zdCBtZW51cyA9IENlbGwoe30pO1xuICAgICAgY29uc3QgcGF0aHMgPSBDZWxsKHt9KTtcbiAgICAgIGNvbnN0IHByaW1hcnkgPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBkaXJlY3RvcnkgPSBDZWxsKHt9KTtcbiAgICAgIGNvbnN0IGNsZWFyID0gKCkgPT4ge1xuICAgICAgICBleHBhbnNpb25zLnNldCh7fSk7XG4gICAgICAgIG1lbnVzLnNldCh7fSk7XG4gICAgICAgIHBhdGhzLnNldCh7fSk7XG4gICAgICAgIHByaW1hcnkuY2xlYXIoKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0NsZWFyID0gKCkgPT4gcHJpbWFyeS5nZXQoKS5pc05vbmUoKTtcbiAgICAgIGNvbnN0IHNldE1lbnVCdWlsdCA9IChtZW51TmFtZSwgYnVpbHQpID0+IHtcbiAgICAgICAgbWVudXMuc2V0KHtcbiAgICAgICAgICAuLi5tZW51cy5nZXQoKSxcbiAgICAgICAgICBbbWVudU5hbWVdOiB7XG4gICAgICAgICAgICB0eXBlOiAncHJlcGFyZWQnLFxuICAgICAgICAgICAgbWVudTogYnVpbHRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldENvbnRlbnRzID0gKHNQcmltYXJ5LCBzTWVudXMsIHNFeHBhbnNpb25zLCBkaXIpID0+IHtcbiAgICAgICAgcHJpbWFyeS5zZXQoc1ByaW1hcnkpO1xuICAgICAgICBleHBhbnNpb25zLnNldChzRXhwYW5zaW9ucyk7XG4gICAgICAgIG1lbnVzLnNldChzTWVudXMpO1xuICAgICAgICBkaXJlY3Rvcnkuc2V0KGRpcik7XG4gICAgICAgIGNvbnN0IHNQYXRocyA9IGdlbmVyYXRlJDIoZGlyLCBzRXhwYW5zaW9ucyk7XG4gICAgICAgIHBhdGhzLnNldChzUGF0aHMpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldFRyaWdnZXJpbmdJdGVtID0gbWVudVZhbHVlID0+IGZpbmQkNChleHBhbnNpb25zLmdldCgpLCAodiwgX2spID0+IHYgPT09IG1lbnVWYWx1ZSk7XG4gICAgICBjb25zdCBnZXRUcmlnZ2VyRGF0YSA9IChtZW51VmFsdWUsIGdldEl0ZW1CeVZhbHVlLCBwYXRoKSA9PiBnZXRQcmVwYXJlZE1lbnUobWVudVZhbHVlKS5iaW5kKG1lbnUgPT4gZ2V0VHJpZ2dlcmluZ0l0ZW0obWVudVZhbHVlKS5iaW5kKHRyaWdnZXJpbmdJdGVtVmFsdWUgPT4gZ2V0SXRlbUJ5VmFsdWUodHJpZ2dlcmluZ0l0ZW1WYWx1ZSkubWFwKHRyaWdnZXJlZEl0ZW0gPT4gKHtcbiAgICAgICAgdHJpZ2dlcmVkTWVudTogbWVudSxcbiAgICAgICAgdHJpZ2dlcmluZ0l0ZW06IHRyaWdnZXJlZEl0ZW0sXG4gICAgICAgIHRyaWdnZXJpbmdQYXRoOiBwYXRoXG4gICAgICB9KSkpKTtcbiAgICAgIGNvbnN0IGdldFRyaWdnZXJpbmdQYXRoID0gKGl0ZW1WYWx1ZSwgZ2V0SXRlbUJ5VmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgZXh0cmFQYXRoID0gZmlsdGVyJDIobG9va3VwSXRlbShpdGVtVmFsdWUpLnRvQXJyYXkoKSwgbWVudVZhbHVlID0+IGdldFByZXBhcmVkTWVudShtZW51VmFsdWUpLmlzU29tZSgpKTtcbiAgICAgICAgcmV0dXJuIGdldCRnKHBhdGhzLmdldCgpLCBpdGVtVmFsdWUpLmJpbmQocGF0aCA9PiB7XG4gICAgICAgICAgY29uc3QgcmV2UGF0aCA9IHJldmVyc2UoZXh0cmFQYXRoLmNvbmNhdChwYXRoKSk7XG4gICAgICAgICAgY29uc3QgdHJpZ2dlcnMgPSBiaW5kJDMocmV2UGF0aCwgKG1lbnVWYWx1ZSwgbWVudUluZGV4KSA9PiBnZXRUcmlnZ2VyRGF0YShtZW51VmFsdWUsIGdldEl0ZW1CeVZhbHVlLCByZXZQYXRoLnNsaWNlKDAsIG1lbnVJbmRleCArIDEpKS5mb2xkKCgpID0+IGlzJDEocHJpbWFyeS5nZXQoKSwgbWVudVZhbHVlKSA/IFtdIDogW09wdGlvbmFsLm5vbmUoKV0sIGRhdGEgPT4gW09wdGlvbmFsLnNvbWUoZGF0YSldKSk7XG4gICAgICAgICAgcmV0dXJuIHNlcXVlbmNlKHRyaWdnZXJzKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZXhwYW5kID0gaXRlbVZhbHVlID0+IGdldCRnKGV4cGFuc2lvbnMuZ2V0KCksIGl0ZW1WYWx1ZSkubWFwKG1lbnUgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gZ2V0JGcocGF0aHMuZ2V0KCksIGl0ZW1WYWx1ZSkuZ2V0T3IoW10pO1xuICAgICAgICByZXR1cm4gW21lbnVdLmNvbmNhdChjdXJyZW50KTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY29sbGFwc2UgPSBpdGVtVmFsdWUgPT4gZ2V0JGcocGF0aHMuZ2V0KCksIGl0ZW1WYWx1ZSkuYmluZChwYXRoID0+IHBhdGgubGVuZ3RoID4gMSA/IE9wdGlvbmFsLnNvbWUocGF0aC5zbGljZSgxKSkgOiBPcHRpb25hbC5ub25lKCkpO1xuICAgICAgY29uc3QgcmVmcmVzaCA9IGl0ZW1WYWx1ZSA9PiBnZXQkZyhwYXRocy5nZXQoKSwgaXRlbVZhbHVlKTtcbiAgICAgIGNvbnN0IGdldFByZXBhcmVkTWVudSA9IG1lbnVWYWx1ZSA9PiBsb29rdXBNZW51KG1lbnVWYWx1ZSkuYmluZChleHRyYWN0UHJlcGFyZWRNZW51KTtcbiAgICAgIGNvbnN0IGxvb2t1cE1lbnUgPSBtZW51VmFsdWUgPT4gZ2V0JGcobWVudXMuZ2V0KCksIG1lbnVWYWx1ZSk7XG4gICAgICBjb25zdCBsb29rdXBJdGVtID0gaXRlbVZhbHVlID0+IGdldCRnKGV4cGFuc2lvbnMuZ2V0KCksIGl0ZW1WYWx1ZSk7XG4gICAgICBjb25zdCBvdGhlck1lbnVzID0gcGF0aCA9PiB7XG4gICAgICAgIGNvbnN0IG1lbnVWYWx1ZXMgPSBkaXJlY3RvcnkuZ2V0KCk7XG4gICAgICAgIHJldHVybiBkaWZmZXJlbmNlKGtleXMobWVudVZhbHVlcyksIHBhdGgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldFByaW1hcnkgPSAoKSA9PiBwcmltYXJ5LmdldCgpLmJpbmQoZ2V0UHJlcGFyZWRNZW51KTtcbiAgICAgIGNvbnN0IGdldE1lbnVzID0gKCkgPT4gbWVudXMuZ2V0KCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXRNZW51QnVpbHQsXG4gICAgICAgIHNldENvbnRlbnRzLFxuICAgICAgICBleHBhbmQsXG4gICAgICAgIHJlZnJlc2gsXG4gICAgICAgIGNvbGxhcHNlLFxuICAgICAgICBsb29rdXBNZW51LFxuICAgICAgICBsb29rdXBJdGVtLFxuICAgICAgICBvdGhlck1lbnVzLFxuICAgICAgICBnZXRQcmltYXJ5LFxuICAgICAgICBnZXRNZW51cyxcbiAgICAgICAgY2xlYXIsXG4gICAgICAgIGlzQ2xlYXIsXG4gICAgICAgIGdldFRyaWdnZXJpbmdQYXRoXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZXh0cmFjdFByZXBhcmVkTWVudSA9IHByZXAgPT4gcHJlcC50eXBlID09PSAncHJlcGFyZWQnID8gT3B0aW9uYWwuc29tZShwcmVwLm1lbnUpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIGNvbnN0IExheWVyZWRTdGF0ZSA9IHtcbiAgICAgIGluaXQ6IGluaXQkYyxcbiAgICAgIGV4dHJhY3RQcmVwYXJlZE1lbnVcbiAgICB9O1xuXG4gICAgY29uc3Qgb25NZW51SXRlbUhpZ2hsaWdodGVkRXZlbnQgPSBnZW5lcmF0ZSQ2KCd0aWVyZWQtbWVudS1pdGVtLWhpZ2hsaWdodCcpO1xuICAgIGNvbnN0IG9uTWVudUl0ZW1EZWhpZ2hsaWdodGVkRXZlbnQgPSBnZW5lcmF0ZSQ2KCd0aWVyZWQtbWVudS1pdGVtLWRlaGlnaGxpZ2h0Jyk7XG5cbiAgICB2YXIgSGlnaGxpZ2h0T25PcGVuO1xuICAgIChmdW5jdGlvbiAoSGlnaGxpZ2h0T25PcGVuKSB7XG4gICAgICBIaWdobGlnaHRPbk9wZW5bSGlnaGxpZ2h0T25PcGVuWydIaWdobGlnaHRNZW51QW5kSXRlbSddID0gMF0gPSAnSGlnaGxpZ2h0TWVudUFuZEl0ZW0nO1xuICAgICAgSGlnaGxpZ2h0T25PcGVuW0hpZ2hsaWdodE9uT3BlblsnSGlnaGxpZ2h0SnVzdE1lbnUnXSA9IDFdID0gJ0hpZ2hsaWdodEp1c3RNZW51JztcbiAgICAgIEhpZ2hsaWdodE9uT3BlbltIaWdobGlnaHRPbk9wZW5bJ0hpZ2hsaWdodE5vbmUnXSA9IDJdID0gJ0hpZ2hsaWdodE5vbmUnO1xuICAgIH0oSGlnaGxpZ2h0T25PcGVuIHx8IChIaWdobGlnaHRPbk9wZW4gPSB7fSkpKTtcblxuICAgIGNvbnN0IG1ha2UkNiA9IChkZXRhaWwsIF9yYXdVaVNwZWMpID0+IHtcbiAgICAgIGNvbnN0IHN1Ym1lbnVQYXJlbnRJdGVtcyA9IHZhbHVlJDIoKTtcbiAgICAgIGNvbnN0IGJ1aWxkTWVudXMgPSAoY29udGFpbmVyLCBwcmltYXJ5TmFtZSwgbWVudXMpID0+IG1hcCQxKG1lbnVzLCAoc3BlYywgbmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBtYWtlU2tldGNoID0gKCkgPT4gTWVudS5za2V0Y2goe1xuICAgICAgICAgIC4uLnNwZWMsXG4gICAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgICAgbWFya2VyczogZGV0YWlsLm1hcmtlcnMsXG4gICAgICAgICAgZmFrZUZvY3VzOiBkZXRhaWwuZmFrZUZvY3VzLFxuICAgICAgICAgIG9uSGlnaGxpZ2h0OiAobWVudUNvbXAsIGl0ZW1Db21wKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBoaWdobGlnaHREYXRhID0ge1xuICAgICAgICAgICAgICBtZW51Q29tcCxcbiAgICAgICAgICAgICAgaXRlbUNvbXBcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBlbWl0V2l0aChtZW51Q29tcCwgb25NZW51SXRlbUhpZ2hsaWdodGVkRXZlbnQsIGhpZ2hsaWdodERhdGEpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25EZWhpZ2hsaWdodDogKG1lbnVDb21wLCBpdGVtQ29tcCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVoaWdobGlnaHREYXRhID0ge1xuICAgICAgICAgICAgICBtZW51Q29tcCxcbiAgICAgICAgICAgICAgaXRlbUNvbXBcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBlbWl0V2l0aChtZW51Q29tcCwgb25NZW51SXRlbURlaGlnaGxpZ2h0ZWRFdmVudCwgZGVoaWdobGlnaHREYXRhKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZvY3VzTWFuYWdlcjogZGV0YWlsLmZha2VGb2N1cyA/IGhpZ2hsaWdodHMoKSA6IGRvbSQyKClcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuYW1lID09PSBwcmltYXJ5TmFtZSA/IHtcbiAgICAgICAgICB0eXBlOiAncHJlcGFyZWQnLFxuICAgICAgICAgIG1lbnU6IGNvbnRhaW5lci5nZXRTeXN0ZW0oKS5idWlsZChtYWtlU2tldGNoKCkpXG4gICAgICAgIH0gOiB7XG4gICAgICAgICAgdHlwZTogJ25vdGJ1aWx0JyxcbiAgICAgICAgICBuYk1lbnU6IG1ha2VTa2V0Y2hcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbGF5ZXJlZFN0YXRlID0gTGF5ZXJlZFN0YXRlLmluaXQoKTtcbiAgICAgIGNvbnN0IHNldHVwID0gY29udGFpbmVyID0+IHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50TWFwID0gYnVpbGRNZW51cyhjb250YWluZXIsIGRldGFpbC5kYXRhLnByaW1hcnksIGRldGFpbC5kYXRhLm1lbnVzKTtcbiAgICAgICAgY29uc3QgZGlyZWN0b3J5ID0gdG9EaXJlY3RvcnkoKTtcbiAgICAgICAgbGF5ZXJlZFN0YXRlLnNldENvbnRlbnRzKGRldGFpbC5kYXRhLnByaW1hcnksIGNvbXBvbmVudE1hcCwgZGV0YWlsLmRhdGEuZXhwYW5zaW9ucywgZGlyZWN0b3J5KTtcbiAgICAgICAgcmV0dXJuIGxheWVyZWRTdGF0ZS5nZXRQcmltYXJ5KCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0SXRlbVZhbHVlID0gaXRlbSA9PiBSZXByZXNlbnRpbmcuZ2V0VmFsdWUoaXRlbSkudmFsdWU7XG4gICAgICBjb25zdCBnZXRJdGVtQnlWYWx1ZSA9IChfY29udGFpbmVyLCBtZW51cywgaXRlbVZhbHVlKSA9PiBmaW5kTWFwKG1lbnVzLCBtZW51ID0+IHtcbiAgICAgICAgaWYgKCFtZW51LmdldFN5c3RlbSgpLmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBIaWdobGlnaHRpbmcuZ2V0Q2FuZGlkYXRlcyhtZW51KTtcbiAgICAgICAgcmV0dXJuIGZpbmQkNShjYW5kaWRhdGVzLCBjID0+IGdldEl0ZW1WYWx1ZShjKSA9PT0gaXRlbVZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdG9EaXJlY3RvcnkgPSBfY29udGFpbmVyID0+IG1hcCQxKGRldGFpbC5kYXRhLm1lbnVzLCAoZGF0YSwgX21lbnVOYW1lKSA9PiBiaW5kJDMoZGF0YS5pdGVtcywgaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdzZXBhcmF0b3InID8gW10gOiBbaXRlbS5kYXRhLnZhbHVlXSkpO1xuICAgICAgY29uc3Qgc2V0QWN0aXZlTWVudSA9IEhpZ2hsaWdodGluZy5oaWdobGlnaHQ7XG4gICAgICBjb25zdCBzZXRBY3RpdmVNZW51QW5kSXRlbSA9IChjb250YWluZXIsIG1lbnUpID0+IHtcbiAgICAgICAgc2V0QWN0aXZlTWVudShjb250YWluZXIsIG1lbnUpO1xuICAgICAgICBIaWdobGlnaHRpbmcuZ2V0SGlnaGxpZ2h0ZWQobWVudSkub3JUaHVuaygoKSA9PiBIaWdobGlnaHRpbmcuZ2V0Rmlyc3QobWVudSkpLmVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgaWYgKGRldGFpbC5mYWtlRm9jdXMpIHtcbiAgICAgICAgICAgIEhpZ2hsaWdodGluZy5oaWdobGlnaHQobWVudSwgaXRlbSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKGNvbnRhaW5lciwgaXRlbS5lbGVtZW50LCBmb2N1c0l0ZW0oKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRNZW51cyA9IChzdGF0ZSwgbWVudVZhbHVlcykgPT4gY2F0KG1hcCQyKG1lbnVWYWx1ZXMsIG12ID0+IHN0YXRlLmxvb2t1cE1lbnUobXYpLmJpbmQocHJlcCA9PiBwcmVwLnR5cGUgPT09ICdwcmVwYXJlZCcgPyBPcHRpb25hbC5zb21lKHByZXAubWVudSkgOiBPcHRpb25hbC5ub25lKCkpKSk7XG4gICAgICBjb25zdCBjbG9zZU90aGVycyA9IChjb250YWluZXIsIHN0YXRlLCBwYXRoKSA9PiB7XG4gICAgICAgIGNvbnN0IG90aGVycyA9IGdldE1lbnVzKHN0YXRlLCBzdGF0ZS5vdGhlck1lbnVzKHBhdGgpKTtcbiAgICAgICAgZWFjaCQxKG90aGVycywgbyA9PiB7XG4gICAgICAgICAgcmVtb3ZlJDEoby5lbGVtZW50LCBbZGV0YWlsLm1hcmtlcnMuYmFja2dyb3VuZE1lbnVdKTtcbiAgICAgICAgICBpZiAoIWRldGFpbC5zdGF5SW5Eb20pIHtcbiAgICAgICAgICAgIFJlcGxhY2luZy5yZW1vdmUoY29udGFpbmVyLCBvKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldFN1Ym1lbnVQYXJlbnRzID0gY29udGFpbmVyID0+IHN1Ym1lbnVQYXJlbnRJdGVtcy5nZXQoKS5nZXRPclRodW5rKCgpID0+IHtcbiAgICAgICAgY29uc3QgciA9IHt9O1xuICAgICAgICBjb25zdCBpdGVtcyA9IGRlc2NlbmRhbnRzKGNvbnRhaW5lci5lbGVtZW50LCBgLiR7IGRldGFpbC5tYXJrZXJzLml0ZW0gfWApO1xuICAgICAgICBjb25zdCBwYXJlbnRJdGVtcyA9IGZpbHRlciQyKGl0ZW1zLCBpID0+IGdldCRmKGksICdhcmlhLWhhc3BvcHVwJykgPT09ICd0cnVlJyk7XG4gICAgICAgIGVhY2gkMShwYXJlbnRJdGVtcywgaSA9PiB7XG4gICAgICAgICAgY29udGFpbmVyLmdldFN5c3RlbSgpLmdldEJ5RG9tKGkpLmVhY2goaXRlbUNvbXAgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gZ2V0SXRlbVZhbHVlKGl0ZW1Db21wKTtcbiAgICAgICAgICAgIHJba2V5XSA9IGl0ZW1Db21wO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgc3VibWVudVBhcmVudEl0ZW1zLnNldChyKTtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHVwZGF0ZUFyaWFFeHBhbnNpb25zID0gKGNvbnRhaW5lciwgcGF0aCkgPT4ge1xuICAgICAgICBjb25zdCBwYXJlbnRJdGVtcyA9IGdldFN1Ym1lbnVQYXJlbnRzKGNvbnRhaW5lcik7XG4gICAgICAgIGVhY2gocGFyZW50SXRlbXMsICh2LCBrKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBjb250YWlucyQyKHBhdGgsIGspO1xuICAgICAgICAgIHNldCQ5KHYuZWxlbWVudCwgJ2FyaWEtZXhwYW5kZWQnLCBleHBhbmRlZCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVwZGF0ZU1lbnVQYXRoID0gKGNvbnRhaW5lciwgc3RhdGUsIHBhdGgpID0+IE9wdGlvbmFsLmZyb20ocGF0aFswXSkuYmluZChsYXRlc3RNZW51TmFtZSA9PiBzdGF0ZS5sb29rdXBNZW51KGxhdGVzdE1lbnVOYW1lKS5iaW5kKG1lbnVQcmVwID0+IHtcbiAgICAgICAgaWYgKG1lbnVQcmVwLnR5cGUgPT09ICdub3RidWlsdCcpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZU1lbnUgPSBtZW51UHJlcC5tZW51O1xuICAgICAgICAgIGNvbnN0IHJlc3QgPSBnZXRNZW51cyhzdGF0ZSwgcGF0aC5zbGljZSgxKSk7XG4gICAgICAgICAgZWFjaCQxKHJlc3QsIHIgPT4ge1xuICAgICAgICAgICAgYWRkJDIoci5lbGVtZW50LCBkZXRhaWwubWFya2Vycy5iYWNrZ3JvdW5kTWVudSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKCFpbkJvZHkoYWN0aXZlTWVudS5lbGVtZW50KSkge1xuICAgICAgICAgICAgUmVwbGFjaW5nLmFwcGVuZChjb250YWluZXIsIHByZW1hZGUoYWN0aXZlTWVudSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZW1vdmUkMShhY3RpdmVNZW51LmVsZW1lbnQsIFtkZXRhaWwubWFya2Vycy5iYWNrZ3JvdW5kTWVudV0pO1xuICAgICAgICAgIHNldEFjdGl2ZU1lbnVBbmRJdGVtKGNvbnRhaW5lciwgYWN0aXZlTWVudSk7XG4gICAgICAgICAgY2xvc2VPdGhlcnMoY29udGFpbmVyLCBzdGF0ZSwgcGF0aCk7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoYWN0aXZlTWVudSk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICAgIGxldCBFeHBhbmRIaWdobGlnaHREZWNpc2lvbjtcbiAgICAgIChmdW5jdGlvbiAoRXhwYW5kSGlnaGxpZ2h0RGVjaXNpb24pIHtcbiAgICAgICAgRXhwYW5kSGlnaGxpZ2h0RGVjaXNpb25bRXhwYW5kSGlnaGxpZ2h0RGVjaXNpb25bJ0hpZ2hsaWdodFN1Ym1lbnUnXSA9IDBdID0gJ0hpZ2hsaWdodFN1Ym1lbnUnO1xuICAgICAgICBFeHBhbmRIaWdobGlnaHREZWNpc2lvbltFeHBhbmRIaWdobGlnaHREZWNpc2lvblsnSGlnaGxpZ2h0UGFyZW50J10gPSAxXSA9ICdIaWdobGlnaHRQYXJlbnQnO1xuICAgICAgfShFeHBhbmRIaWdobGlnaHREZWNpc2lvbiB8fCAoRXhwYW5kSGlnaGxpZ2h0RGVjaXNpb24gPSB7fSkpKTtcbiAgICAgIGNvbnN0IGJ1aWxkSWZSZXF1aXJlZCA9IChjb250YWluZXIsIG1lbnVOYW1lLCBtZW51UHJlcCkgPT4ge1xuICAgICAgICBpZiAobWVudVByZXAudHlwZSA9PT0gJ25vdGJ1aWx0Jykge1xuICAgICAgICAgIGNvbnN0IG1lbnUgPSBjb250YWluZXIuZ2V0U3lzdGVtKCkuYnVpbGQobWVudVByZXAubmJNZW51KCkpO1xuICAgICAgICAgIGxheWVyZWRTdGF0ZS5zZXRNZW51QnVpbHQobWVudU5hbWUsIG1lbnUpO1xuICAgICAgICAgIHJldHVybiBtZW51O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtZW51UHJlcC5tZW51O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgZXhwYW5kUmlnaHQgPSAoY29udGFpbmVyLCBpdGVtLCBkZWNpc2lvbiA9IEV4cGFuZEhpZ2hsaWdodERlY2lzaW9uLkhpZ2hsaWdodFN1Ym1lbnUpID0+IHtcbiAgICAgICAgaWYgKGl0ZW0uaGFzQ29uZmlndXJlZChEaXNhYmxpbmcpICYmIERpc2FibGluZy5pc0Rpc2FibGVkKGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRJdGVtVmFsdWUoaXRlbSk7XG4gICAgICAgICAgcmV0dXJuIGxheWVyZWRTdGF0ZS5leHBhbmQodmFsdWUpLmJpbmQocGF0aCA9PiB7XG4gICAgICAgICAgICB1cGRhdGVBcmlhRXhwYW5zaW9ucyhjb250YWluZXIsIHBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20ocGF0aFswXSkuYmluZChtZW51TmFtZSA9PiBsYXllcmVkU3RhdGUubG9va3VwTWVudShtZW51TmFtZSkuYmluZChhY3RpdmVNZW51UHJlcCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZU1lbnUgPSBidWlsZElmUmVxdWlyZWQoY29udGFpbmVyLCBtZW51TmFtZSwgYWN0aXZlTWVudVByZXApO1xuICAgICAgICAgICAgICBpZiAoIWluQm9keShhY3RpdmVNZW51LmVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgUmVwbGFjaW5nLmFwcGVuZChjb250YWluZXIsIHByZW1hZGUoYWN0aXZlTWVudSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRldGFpbC5vbk9wZW5TdWJtZW51KGNvbnRhaW5lciwgaXRlbSwgYWN0aXZlTWVudSwgcmV2ZXJzZShwYXRoKSk7XG4gICAgICAgICAgICAgIGlmIChkZWNpc2lvbiA9PT0gRXhwYW5kSGlnaGxpZ2h0RGVjaXNpb24uSGlnaGxpZ2h0U3VibWVudSkge1xuICAgICAgICAgICAgICAgIEhpZ2hsaWdodGluZy5oaWdobGlnaHRGaXJzdChhY3RpdmVNZW51KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlTWVudVBhdGgoY29udGFpbmVyLCBsYXllcmVkU3RhdGUsIHBhdGgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIEhpZ2hsaWdodGluZy5kZWhpZ2hsaWdodEFsbChhY3RpdmVNZW51KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShpdGVtKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgY29sbGFwc2VMZWZ0ID0gKGNvbnRhaW5lciwgaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGdldEl0ZW1WYWx1ZShpdGVtKTtcbiAgICAgICAgcmV0dXJuIGxheWVyZWRTdGF0ZS5jb2xsYXBzZSh2YWx1ZSkuYmluZChwYXRoID0+IHtcbiAgICAgICAgICB1cGRhdGVBcmlhRXhwYW5zaW9ucyhjb250YWluZXIsIHBhdGgpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVNZW51UGF0aChjb250YWluZXIsIGxheWVyZWRTdGF0ZSwgcGF0aCkubWFwKGFjdGl2ZU1lbnUgPT4ge1xuICAgICAgICAgICAgZGV0YWlsLm9uQ29sbGFwc2VNZW51KGNvbnRhaW5lciwgaXRlbSwgYWN0aXZlTWVudSk7XG4gICAgICAgICAgICByZXR1cm4gYWN0aXZlTWVudTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdXBkYXRlVmlldyA9IChjb250YWluZXIsIGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRJdGVtVmFsdWUoaXRlbSk7XG4gICAgICAgIHJldHVybiBsYXllcmVkU3RhdGUucmVmcmVzaCh2YWx1ZSkuYmluZChwYXRoID0+IHtcbiAgICAgICAgICB1cGRhdGVBcmlhRXhwYW5zaW9ucyhjb250YWluZXIsIHBhdGgpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVNZW51UGF0aChjb250YWluZXIsIGxheWVyZWRTdGF0ZSwgcGF0aCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG9uUmlnaHQgPSAoY29udGFpbmVyLCBpdGVtKSA9PiBpbnNpZGUoaXRlbS5lbGVtZW50KSA/IE9wdGlvbmFsLm5vbmUoKSA6IGV4cGFuZFJpZ2h0KGNvbnRhaW5lciwgaXRlbSwgRXhwYW5kSGlnaGxpZ2h0RGVjaXNpb24uSGlnaGxpZ2h0U3VibWVudSk7XG4gICAgICBjb25zdCBvbkxlZnQgPSAoY29udGFpbmVyLCBpdGVtKSA9PiBpbnNpZGUoaXRlbS5lbGVtZW50KSA/IE9wdGlvbmFsLm5vbmUoKSA6IGNvbGxhcHNlTGVmdChjb250YWluZXIsIGl0ZW0pO1xuICAgICAgY29uc3Qgb25Fc2NhcGUgPSAoY29udGFpbmVyLCBpdGVtKSA9PiBjb2xsYXBzZUxlZnQoY29udGFpbmVyLCBpdGVtKS5vclRodW5rKCgpID0+IGRldGFpbC5vbkVzY2FwZShjb250YWluZXIsIGl0ZW0pLm1hcCgoKSA9PiBjb250YWluZXIpKTtcbiAgICAgIGNvbnN0IGtleU9uSXRlbSA9IGYgPT4gKGNvbnRhaW5lciwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIGNsb3Nlc3QkMShzaW11bGF0ZWRFdmVudC5nZXRTb3VyY2UoKSwgYC4keyBkZXRhaWwubWFya2Vycy5pdGVtIH1gKS5iaW5kKHRhcmdldCA9PiBjb250YWluZXIuZ2V0U3lzdGVtKCkuZ2V0QnlEb20odGFyZ2V0KS50b09wdGlvbmFsKCkuYmluZChpdGVtID0+IGYoY29udGFpbmVyLCBpdGVtKS5tYXAoYWx3YXlzKSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IGRlcml2ZSQyKFtcbiAgICAgICAgcnVuJDEoZm9jdXMoKSwgKHRtZW51LCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBzaW11bGF0ZWRFdmVudC5ldmVudC5pdGVtO1xuICAgICAgICAgIGxheWVyZWRTdGF0ZS5sb29rdXBJdGVtKGdldEl0ZW1WYWx1ZShpdGVtKSkuZWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZW51ID0gc2ltdWxhdGVkRXZlbnQuZXZlbnQubWVudTtcbiAgICAgICAgICAgIEhpZ2hsaWdodGluZy5oaWdobGlnaHQodG1lbnUsIG1lbnUpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRJdGVtVmFsdWUoc2ltdWxhdGVkRXZlbnQuZXZlbnQuaXRlbSk7XG4gICAgICAgICAgICBsYXllcmVkU3RhdGUucmVmcmVzaCh2YWx1ZSkuZWFjaChwYXRoID0+IGNsb3NlT3RoZXJzKHRtZW51LCBsYXllcmVkU3RhdGUsIHBhdGgpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIHJ1bk9uRXhlY3V0ZSQxKChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gc2ltdWxhdGVkRXZlbnQuZXZlbnQudGFyZ2V0O1xuICAgICAgICAgIGNvbXBvbmVudC5nZXRTeXN0ZW0oKS5nZXRCeURvbSh0YXJnZXQpLmVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtVmFsdWUgPSBnZXRJdGVtVmFsdWUoaXRlbSk7XG4gICAgICAgICAgICBpZiAoaXRlbVZhbHVlLmluZGV4T2YoJ2NvbGxhcHNlLWl0ZW0nKSA9PT0gMCkge1xuICAgICAgICAgICAgICBjb2xsYXBzZUxlZnQoY29tcG9uZW50LCBpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV4cGFuZFJpZ2h0KGNvbXBvbmVudCwgaXRlbSwgRXhwYW5kSGlnaGxpZ2h0RGVjaXNpb24uSGlnaGxpZ2h0U3VibWVudSkuZm9sZCgoKSA9PiB7XG4gICAgICAgICAgICAgIGRldGFpbC5vbkV4ZWN1dGUoY29tcG9uZW50LCBpdGVtKTtcbiAgICAgICAgICAgIH0sIG5vb3ApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgcnVuT25BdHRhY2hlZCgoY29udGFpbmVyLCBfc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICBzZXR1cChjb250YWluZXIpLmVhY2gocHJpbWFyeSA9PiB7XG4gICAgICAgICAgICBSZXBsYWNpbmcuYXBwZW5kKGNvbnRhaW5lciwgcHJlbWFkZShwcmltYXJ5KSk7XG4gICAgICAgICAgICBkZXRhaWwub25PcGVuTWVudShjb250YWluZXIsIHByaW1hcnkpO1xuICAgICAgICAgICAgaWYgKGRldGFpbC5oaWdobGlnaHRPbk9wZW4gPT09IEhpZ2hsaWdodE9uT3Blbi5IaWdobGlnaHRNZW51QW5kSXRlbSkge1xuICAgICAgICAgICAgICBzZXRBY3RpdmVNZW51QW5kSXRlbShjb250YWluZXIsIHByaW1hcnkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkZXRhaWwuaGlnaGxpZ2h0T25PcGVuID09PSBIaWdobGlnaHRPbk9wZW4uSGlnaGxpZ2h0SnVzdE1lbnUpIHtcbiAgICAgICAgICAgICAgc2V0QWN0aXZlTWVudShjb250YWluZXIsIHByaW1hcnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgcnVuJDEob25NZW51SXRlbUhpZ2hsaWdodGVkRXZlbnQsICh0bWVudUNvbXAsIHNlKSA9PiB7XG4gICAgICAgICAgZGV0YWlsLm9uSGlnaGxpZ2h0SXRlbSh0bWVudUNvbXAsIHNlLmV2ZW50Lm1lbnVDb21wLCBzZS5ldmVudC5pdGVtQ29tcCk7XG4gICAgICAgIH0pLFxuICAgICAgICBydW4kMShvbk1lbnVJdGVtRGVoaWdobGlnaHRlZEV2ZW50LCAodG1lbnVDb21wLCBzZSkgPT4ge1xuICAgICAgICAgIGRldGFpbC5vbkRlaGlnaGxpZ2h0SXRlbSh0bWVudUNvbXAsIHNlLmV2ZW50Lm1lbnVDb21wLCBzZS5ldmVudC5pdGVtQ29tcCk7XG4gICAgICAgIH0pLFxuICAgICAgICAuLi5kZXRhaWwubmF2aWdhdGVPbkhvdmVyID8gW3J1biQxKGhvdmVyKCksICh0bWVudSwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBzaW11bGF0ZWRFdmVudC5ldmVudC5pdGVtO1xuICAgICAgICAgICAgdXBkYXRlVmlldyh0bWVudSwgaXRlbSk7XG4gICAgICAgICAgICBleHBhbmRSaWdodCh0bWVudSwgaXRlbSwgRXhwYW5kSGlnaGxpZ2h0RGVjaXNpb24uSGlnaGxpZ2h0UGFyZW50KTtcbiAgICAgICAgICAgIGRldGFpbC5vbkhvdmVyKHRtZW51LCBpdGVtKTtcbiAgICAgICAgICB9KV0gOiBbXVxuICAgICAgXSk7XG4gICAgICBjb25zdCBnZXRBY3RpdmVJdGVtID0gY29udGFpbmVyID0+IEhpZ2hsaWdodGluZy5nZXRIaWdobGlnaHRlZChjb250YWluZXIpLmJpbmQoSGlnaGxpZ2h0aW5nLmdldEhpZ2hsaWdodGVkKTtcbiAgICAgIGNvbnN0IGNvbGxhcHNlTWVudUFwaSA9IGNvbnRhaW5lciA9PiB7XG4gICAgICAgIGdldEFjdGl2ZUl0ZW0oY29udGFpbmVyKS5lYWNoKGN1cnJlbnRJdGVtID0+IHtcbiAgICAgICAgICBjb2xsYXBzZUxlZnQoY29udGFpbmVyLCBjdXJyZW50SXRlbSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGhpZ2hsaWdodFByaW1hcnkgPSBjb250YWluZXIgPT4ge1xuICAgICAgICBsYXllcmVkU3RhdGUuZ2V0UHJpbWFyeSgpLmVhY2gocHJpbWFyeSA9PiB7XG4gICAgICAgICAgc2V0QWN0aXZlTWVudUFuZEl0ZW0oY29udGFpbmVyLCBwcmltYXJ5KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZXh0cmFjdE1lbnVGcm9tQ29udGFpbmVyID0gY29udGFpbmVyID0+IE9wdGlvbmFsLmZyb20oY29udGFpbmVyLmNvbXBvbmVudHMoKVswXSkuZmlsdGVyKGNvbXAgPT4gZ2V0JGYoY29tcC5lbGVtZW50LCAncm9sZScpID09PSAnbWVudScpO1xuICAgICAgY29uc3QgcmVwb3NpdGlvbk1lbnVzID0gY29udGFpbmVyID0+IHtcbiAgICAgICAgY29uc3QgbWF5YmVBY3RpdmVQcmltYXJ5ID0gbGF5ZXJlZFN0YXRlLmdldFByaW1hcnkoKS5iaW5kKHByaW1hcnkgPT4gZ2V0QWN0aXZlSXRlbShjb250YWluZXIpLmJpbmQoY3VycmVudEl0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IGdldEl0ZW1WYWx1ZShjdXJyZW50SXRlbSk7XG4gICAgICAgICAgY29uc3QgYWxsTWVudXMgPSB2YWx1ZXMobGF5ZXJlZFN0YXRlLmdldE1lbnVzKCkpO1xuICAgICAgICAgIGNvbnN0IHByZXBhcmVkTWVudXMgPSBjYXQobWFwJDIoYWxsTWVudXMsIExheWVyZWRTdGF0ZS5leHRyYWN0UHJlcGFyZWRNZW51KSk7XG4gICAgICAgICAgcmV0dXJuIGxheWVyZWRTdGF0ZS5nZXRUcmlnZ2VyaW5nUGF0aChpdGVtVmFsdWUsIHYgPT4gZ2V0SXRlbUJ5VmFsdWUoY29udGFpbmVyLCBwcmVwYXJlZE1lbnVzLCB2KSk7XG4gICAgICAgIH0pLm1hcCh0cmlnZ2VyaW5nUGF0aCA9PiAoe1xuICAgICAgICAgIHByaW1hcnksXG4gICAgICAgICAgdHJpZ2dlcmluZ1BhdGhcbiAgICAgICAgfSkpKTtcbiAgICAgICAgbWF5YmVBY3RpdmVQcmltYXJ5LmZvbGQoKCkgPT4ge1xuICAgICAgICAgIGV4dHJhY3RNZW51RnJvbUNvbnRhaW5lcihjb250YWluZXIpLmVhY2gocHJpbWFyeU1lbnUgPT4ge1xuICAgICAgICAgICAgZGV0YWlsLm9uUmVwb3NpdGlvbk1lbnUoY29udGFpbmVyLCBwcmltYXJ5TWVudSwgW10pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCAoe3ByaW1hcnksIHRyaWdnZXJpbmdQYXRofSkgPT4ge1xuICAgICAgICAgIGRldGFpbC5vblJlcG9zaXRpb25NZW51KGNvbnRhaW5lciwgcHJpbWFyeSwgdHJpZ2dlcmluZ1BhdGgpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBhcGlzID0ge1xuICAgICAgICBjb2xsYXBzZU1lbnU6IGNvbGxhcHNlTWVudUFwaSxcbiAgICAgICAgaGlnaGxpZ2h0UHJpbWFyeSxcbiAgICAgICAgcmVwb3NpdGlvbk1lbnVzXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgICBkb206IGRldGFpbC5kb20sXG4gICAgICAgIG1hcmtlcnM6IGRldGFpbC5tYXJrZXJzLFxuICAgICAgICBiZWhhdmlvdXJzOiBhdWdtZW50KGRldGFpbC50bWVudUJlaGF2aW91cnMsIFtcbiAgICAgICAgICBLZXlpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIG1vZGU6ICdzcGVjaWFsJyxcbiAgICAgICAgICAgIG9uUmlnaHQ6IGtleU9uSXRlbShvblJpZ2h0KSxcbiAgICAgICAgICAgIG9uTGVmdDoga2V5T25JdGVtKG9uTGVmdCksXG4gICAgICAgICAgICBvbkVzY2FwZToga2V5T25JdGVtKG9uRXNjYXBlKSxcbiAgICAgICAgICAgIGZvY3VzSW46IChjb250YWluZXIsIF9rZXlJbmZvKSA9PiB7XG4gICAgICAgICAgICAgIGxheWVyZWRTdGF0ZS5nZXRQcmltYXJ5KCkuZWFjaChwcmltYXJ5ID0+IHtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChjb250YWluZXIsIHByaW1hcnkuZWxlbWVudCwgZm9jdXNJdGVtKCkpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBIaWdobGlnaHRpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIGhpZ2hsaWdodENsYXNzOiBkZXRhaWwubWFya2Vycy5zZWxlY3RlZE1lbnUsXG4gICAgICAgICAgICBpdGVtQ2xhc3M6IGRldGFpbC5tYXJrZXJzLm1lbnVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBDb21wb3NpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIGZpbmQ6IGNvbnRhaW5lciA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBIaWdobGlnaHRpbmcuZ2V0SGlnaGxpZ2h0ZWQoY29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBSZXBsYWNpbmcuY29uZmlnKHt9KVxuICAgICAgICBdKSxcbiAgICAgICAgZXZlbnRPcmRlcjogZGV0YWlsLmV2ZW50T3JkZXIsXG4gICAgICAgIGFwaXMsXG4gICAgICAgIGV2ZW50c1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbGxhcHNlSXRlbSQxID0gY29uc3RhbnQkMSgnY29sbGFwc2UtaXRlbScpO1xuXG4gICAgY29uc3QgdGllcmVkRGF0YSA9IChwcmltYXJ5LCBtZW51cywgZXhwYW5zaW9ucykgPT4gKHtcbiAgICAgIHByaW1hcnksXG4gICAgICBtZW51cyxcbiAgICAgIGV4cGFuc2lvbnNcbiAgICB9KTtcbiAgICBjb25zdCBzaW5nbGVEYXRhID0gKG5hbWUsIG1lbnUpID0+ICh7XG4gICAgICBwcmltYXJ5OiBuYW1lLFxuICAgICAgbWVudXM6IHdyYXAkMShuYW1lLCBtZW51KSxcbiAgICAgIGV4cGFuc2lvbnM6IHt9XG4gICAgfSk7XG4gICAgY29uc3QgY29sbGFwc2VJdGVtID0gdGV4dCA9PiAoe1xuICAgICAgdmFsdWU6IGdlbmVyYXRlJDYoY29sbGFwc2VJdGVtJDEoKSksXG4gICAgICBtZXRhOiB7IHRleHQgfVxuICAgIH0pO1xuICAgIGNvbnN0IHRpZXJlZE1lbnUgPSBzaW5nbGUoe1xuICAgICAgbmFtZTogJ1RpZXJlZE1lbnUnLFxuICAgICAgY29uZmlnRmllbGRzOiBbXG4gICAgICAgIG9uU3RyaWN0S2V5Ym9hcmRIYW5kbGVyKCdvbkV4ZWN1dGUnKSxcbiAgICAgICAgb25TdHJpY3RLZXlib2FyZEhhbmRsZXIoJ29uRXNjYXBlJyksXG4gICAgICAgIG9uU3RyaWN0SGFuZGxlcignb25PcGVuTWVudScpLFxuICAgICAgICBvblN0cmljdEhhbmRsZXIoJ29uT3BlblN1Ym1lbnUnKSxcbiAgICAgICAgb25IYW5kbGVyKCdvblJlcG9zaXRpb25NZW51JyksXG4gICAgICAgIG9uSGFuZGxlcignb25Db2xsYXBzZU1lbnUnKSxcbiAgICAgICAgZGVmYXVsdGVkKCdoaWdobGlnaHRPbk9wZW4nLCBIaWdobGlnaHRPbk9wZW4uSGlnaGxpZ2h0TWVudUFuZEl0ZW0pLFxuICAgICAgICByZXF1aXJlZE9iak9mKCdkYXRhJywgW1xuICAgICAgICAgIHJlcXVpcmVkJDEoJ3ByaW1hcnknKSxcbiAgICAgICAgICByZXF1aXJlZCQxKCdtZW51cycpLFxuICAgICAgICAgIHJlcXVpcmVkJDEoJ2V4cGFuc2lvbnMnKVxuICAgICAgICBdKSxcbiAgICAgICAgZGVmYXVsdGVkKCdmYWtlRm9jdXMnLCBmYWxzZSksXG4gICAgICAgIG9uSGFuZGxlcignb25IaWdobGlnaHRJdGVtJyksXG4gICAgICAgIG9uSGFuZGxlcignb25EZWhpZ2hsaWdodEl0ZW0nKSxcbiAgICAgICAgb25IYW5kbGVyKCdvbkhvdmVyJyksXG4gICAgICAgIHRpZXJlZE1lbnVNYXJrZXJzKCksXG4gICAgICAgIHJlcXVpcmVkJDEoJ2RvbScpLFxuICAgICAgICBkZWZhdWx0ZWQoJ25hdmlnYXRlT25Ib3ZlcicsIHRydWUpLFxuICAgICAgICBkZWZhdWx0ZWQoJ3N0YXlJbkRvbScsIGZhbHNlKSxcbiAgICAgICAgZmllbGQoJ3RtZW51QmVoYXZpb3VycycsIFtcbiAgICAgICAgICBLZXlpbmcsXG4gICAgICAgICAgSGlnaGxpZ2h0aW5nLFxuICAgICAgICAgIENvbXBvc2luZyxcbiAgICAgICAgICBSZXBsYWNpbmdcbiAgICAgICAgXSksXG4gICAgICAgIGRlZmF1bHRlZCgnZXZlbnRPcmRlcicsIHt9KVxuICAgICAgXSxcbiAgICAgIGFwaXM6IHtcbiAgICAgICAgY29sbGFwc2VNZW51OiAoYXBpcywgdG1lbnUpID0+IHtcbiAgICAgICAgICBhcGlzLmNvbGxhcHNlTWVudSh0bWVudSk7XG4gICAgICAgIH0sXG4gICAgICAgIGhpZ2hsaWdodFByaW1hcnk6IChhcGlzLCB0bWVudSkgPT4ge1xuICAgICAgICAgIGFwaXMuaGlnaGxpZ2h0UHJpbWFyeSh0bWVudSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlcG9zaXRpb25NZW51czogKGFwaXMsIHRtZW51KSA9PiB7XG4gICAgICAgICAgYXBpcy5yZXBvc2l0aW9uTWVudXModG1lbnUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZmFjdG9yeTogbWFrZSQ2LFxuICAgICAgZXh0cmFBcGlzOiB7XG4gICAgICAgIHRpZXJlZERhdGEsXG4gICAgICAgIHNpbmdsZURhdGEsXG4gICAgICAgIGNvbGxhcHNlSXRlbVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgbWFrZU1lbnUgPSAoZGV0YWlsLCBtZW51U2FuZGJveCwgcGxhY2VtZW50U3BlYywgbWVudVNwZWMsIGdldEJvdW5kcykgPT4ge1xuICAgICAgY29uc3QgbGF6eVNpbmsgPSAoKSA9PiBkZXRhaWwubGF6eVNpbmsobWVudVNhbmRib3gpO1xuICAgICAgY29uc3QgbGF5b3V0cyA9IG1lbnVTcGVjLnR5cGUgPT09ICdob3Jpem9udGFsJyA/IHtcbiAgICAgICAgbGF5b3V0czoge1xuICAgICAgICAgIG9uTHRyOiAoKSA9PiBiZWxvd09yQWJvdmUoKSxcbiAgICAgICAgICBvblJ0bDogKCkgPT4gYmVsb3dPckFib3ZlUnRsKClcbiAgICAgICAgfVxuICAgICAgfSA6IHt9O1xuICAgICAgY29uc3QgaXNGaXJzdFRpZXJTdWJtZW51ID0gdHJpZ2dlcmluZ1BhdGhzID0+IHRyaWdnZXJpbmdQYXRocy5sZW5ndGggPT09IDI7XG4gICAgICBjb25zdCBnZXRTdWJtZW51TGF5b3V0cyA9IHRyaWdnZXJpbmdQYXRocyA9PiBpc0ZpcnN0VGllclN1Ym1lbnUodHJpZ2dlcmluZ1BhdGhzKSA/IGxheW91dHMgOiB7fTtcbiAgICAgIHJldHVybiB0aWVyZWRNZW51LnNrZXRjaCh7XG4gICAgICAgIGRvbTogeyB0YWc6ICdkaXYnIH0sXG4gICAgICAgIGRhdGE6IG1lbnVTcGVjLmRhdGEsXG4gICAgICAgIG1hcmtlcnM6IG1lbnVTcGVjLm1lbnUubWFya2VycyxcbiAgICAgICAgaGlnaGxpZ2h0T25PcGVuOiBtZW51U3BlYy5tZW51LmhpZ2hsaWdodE9uT3BlbixcbiAgICAgICAgZmFrZUZvY3VzOiBtZW51U3BlYy5tZW51LmZha2VGb2N1cyxcbiAgICAgICAgb25Fc2NhcGU6ICgpID0+IHtcbiAgICAgICAgICBTYW5kYm94aW5nLmNsb3NlKG1lbnVTYW5kYm94KTtcbiAgICAgICAgICBkZXRhaWwub25Fc2NhcGUubWFwKGhhbmRsZXIgPT4gaGFuZGxlcihtZW51U2FuZGJveCkpO1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHRydWUpO1xuICAgICAgICB9LFxuICAgICAgICBvbkV4ZWN1dGU6ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25PcGVuTWVudTogKHRtZW51LCBtZW51KSA9PiB7XG4gICAgICAgICAgUG9zaXRpb25pbmcucG9zaXRpb25XaXRoaW5Cb3VuZHMobGF6eVNpbmsoKS5nZXRPckRpZSgpLCBtZW51LCBwbGFjZW1lbnRTcGVjLCBnZXRCb3VuZHMoKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uT3BlblN1Ym1lbnU6ICh0bWVudSwgaXRlbSwgc3VibWVudSwgdHJpZ2dlcmluZ1BhdGhzKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2luayA9IGxhenlTaW5rKCkuZ2V0T3JEaWUoKTtcbiAgICAgICAgICBQb3NpdGlvbmluZy5wb3NpdGlvbihzaW5rLCBzdWJtZW51LCB7XG4gICAgICAgICAgICBhbmNob3I6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Ym1lbnUnLFxuICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAuLi5nZXRTdWJtZW51TGF5b3V0cyh0cmlnZ2VyaW5nUGF0aHMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUmVwb3NpdGlvbk1lbnU6ICh0bWVudSwgcHJpbWFyeU1lbnUsIHN1Ym1lbnVUcmlnZ2VycykgPT4ge1xuICAgICAgICAgIGNvbnN0IHNpbmsgPSBsYXp5U2luaygpLmdldE9yRGllKCk7XG4gICAgICAgICAgUG9zaXRpb25pbmcucG9zaXRpb25XaXRoaW5Cb3VuZHMoc2luaywgcHJpbWFyeU1lbnUsIHBsYWNlbWVudFNwZWMsIGdldEJvdW5kcygpKTtcbiAgICAgICAgICBlYWNoJDEoc3VibWVudVRyaWdnZXJzLCBzdCA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWJtZW51TGF5b3V0cyA9IGdldFN1Ym1lbnVMYXlvdXRzKHN0LnRyaWdnZXJpbmdQYXRoKTtcbiAgICAgICAgICAgIFBvc2l0aW9uaW5nLnBvc2l0aW9uKHNpbmssIHN0LnRyaWdnZXJlZE1lbnUsIHtcbiAgICAgICAgICAgICAgYW5jaG9yOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3N1Ym1lbnUnLFxuICAgICAgICAgICAgICAgIGl0ZW06IHN0LnRyaWdnZXJpbmdJdGVtLFxuICAgICAgICAgICAgICAgIC4uLnN1Ym1lbnVMYXlvdXRzXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZhY3RvcnkkbyA9IChkZXRhaWwsIHNwZWMpID0+IHtcbiAgICAgIGNvbnN0IGlzUGFydE9mUmVsYXRlZCA9IChzYW5kYm94LCBxdWVyeUVsZW0pID0+IHtcbiAgICAgICAgY29uc3QgcmVsYXRlZCA9IGRldGFpbC5nZXRSZWxhdGVkKHNhbmRib3gpO1xuICAgICAgICByZXR1cm4gcmVsYXRlZC5leGlzdHMocmVsID0+IGlzUGFydE9mJDEocmVsLCBxdWVyeUVsZW0pKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXRDb250ZW50ID0gKHNhbmRib3gsIHRoaW5nKSA9PiB7XG4gICAgICAgIFNhbmRib3hpbmcuc2V0Q29udGVudChzYW5kYm94LCB0aGluZyk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2hvd0F0ID0gKHNhbmRib3gsIHRoaW5nLCBwbGFjZW1lbnRTcGVjKSA9PiB7XG4gICAgICAgIGNvbnN0IGdldEJvdW5kcyA9IE9wdGlvbmFsLm5vbmU7XG4gICAgICAgIHNob3dXaXRoaW5Cb3VuZHMoc2FuZGJveCwgdGhpbmcsIHBsYWNlbWVudFNwZWMsIGdldEJvdW5kcyk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2hvd1dpdGhpbkJvdW5kcyA9IChzYW5kYm94LCB0aGluZywgcGxhY2VtZW50U3BlYywgZ2V0Qm91bmRzKSA9PiB7XG4gICAgICAgIGNvbnN0IHNpbmsgPSBkZXRhaWwubGF6eVNpbmsoc2FuZGJveCkuZ2V0T3JEaWUoKTtcbiAgICAgICAgU2FuZGJveGluZy5vcGVuV2hpbGVDbG9ha2VkKHNhbmRib3gsIHRoaW5nLCAoKSA9PiBQb3NpdGlvbmluZy5wb3NpdGlvbldpdGhpbkJvdW5kcyhzaW5rLCBzYW5kYm94LCBwbGFjZW1lbnRTcGVjLCBnZXRCb3VuZHMoKSkpO1xuICAgICAgICBSZXByZXNlbnRpbmcuc2V0VmFsdWUoc2FuZGJveCwgT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgbW9kZTogJ3Bvc2l0aW9uJyxcbiAgICAgICAgICBjb25maWc6IHBsYWNlbWVudFNwZWMsXG4gICAgICAgICAgZ2V0Qm91bmRzXG4gICAgICAgIH0pKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzaG93TWVudUF0ID0gKHNhbmRib3gsIHBsYWNlbWVudFNwZWMsIG1lbnVTcGVjKSA9PiB7XG4gICAgICAgIHNob3dNZW51V2l0aGluQm91bmRzKHNhbmRib3gsIHBsYWNlbWVudFNwZWMsIG1lbnVTcGVjLCBPcHRpb25hbC5ub25lKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzaG93TWVudVdpdGhpbkJvdW5kcyA9IChzYW5kYm94LCBwbGFjZW1lbnRTcGVjLCBtZW51U3BlYywgZ2V0Qm91bmRzKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lbnUgPSBtYWtlTWVudShkZXRhaWwsIHNhbmRib3gsIHBsYWNlbWVudFNwZWMsIG1lbnVTcGVjLCBnZXRCb3VuZHMpO1xuICAgICAgICBTYW5kYm94aW5nLm9wZW4oc2FuZGJveCwgbWVudSk7XG4gICAgICAgIFJlcHJlc2VudGluZy5zZXRWYWx1ZShzYW5kYm94LCBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICBtb2RlOiAnbWVudScsXG4gICAgICAgICAgbWVudVxuICAgICAgICB9KSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaGlkZSA9IHNhbmRib3ggPT4ge1xuICAgICAgICBpZiAoU2FuZGJveGluZy5pc09wZW4oc2FuZGJveCkpIHtcbiAgICAgICAgICBSZXByZXNlbnRpbmcuc2V0VmFsdWUoc2FuZGJveCwgT3B0aW9uYWwubm9uZSgpKTtcbiAgICAgICAgICBTYW5kYm94aW5nLmNsb3NlKHNhbmRib3gpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0Q29udGVudCA9IHNhbmRib3ggPT4gU2FuZGJveGluZy5nZXRTdGF0ZShzYW5kYm94KTtcbiAgICAgIGNvbnN0IHJlcG9zaXRpb24gPSBzYW5kYm94ID0+IHtcbiAgICAgICAgaWYgKFNhbmRib3hpbmcuaXNPcGVuKHNhbmRib3gpKSB7XG4gICAgICAgICAgUmVwcmVzZW50aW5nLmdldFZhbHVlKHNhbmRib3gpLmVhY2goc3RhdGUgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChzdGF0ZS5tb2RlKSB7XG4gICAgICAgICAgICBjYXNlICdtZW51JzpcbiAgICAgICAgICAgICAgU2FuZGJveGluZy5nZXRTdGF0ZShzYW5kYm94KS5lYWNoKHRpZXJlZE1lbnUucmVwb3NpdGlvbk1lbnVzKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwb3NpdGlvbic6XG4gICAgICAgICAgICAgIGNvbnN0IHNpbmsgPSBkZXRhaWwubGF6eVNpbmsoc2FuZGJveCkuZ2V0T3JEaWUoKTtcbiAgICAgICAgICAgICAgUG9zaXRpb25pbmcucG9zaXRpb25XaXRoaW5Cb3VuZHMoc2luaywgc2FuZGJveCwgc3RhdGUuY29uZmlnLCBzdGF0ZS5nZXRCb3VuZHMoKSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgYXBpcyA9IHtcbiAgICAgICAgc2V0Q29udGVudCxcbiAgICAgICAgc2hvd0F0LFxuICAgICAgICBzaG93V2l0aGluQm91bmRzLFxuICAgICAgICBzaG93TWVudUF0LFxuICAgICAgICBzaG93TWVudVdpdGhpbkJvdW5kcyxcbiAgICAgICAgaGlkZSxcbiAgICAgICAgZ2V0Q29udGVudCxcbiAgICAgICAgcmVwb3NpdGlvbixcbiAgICAgICAgaXNPcGVuOiBTYW5kYm94aW5nLmlzT3BlblxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVpZDogZGV0YWlsLnVpZCxcbiAgICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgICBiZWhhdmlvdXJzOiBhdWdtZW50KGRldGFpbC5pbmxpbmVCZWhhdmlvdXJzLCBbXG4gICAgICAgICAgU2FuZGJveGluZy5jb25maWcoe1xuICAgICAgICAgICAgaXNQYXJ0T2Y6IChzYW5kYm94LCBkYXRhLCBxdWVyeUVsZW0pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGlzUGFydE9mJDEoZGF0YSwgcXVlcnlFbGVtKSB8fCBpc1BhcnRPZlJlbGF0ZWQoc2FuZGJveCwgcXVlcnlFbGVtKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRBdHRhY2hQb2ludDogc2FuZGJveCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBkZXRhaWwubGF6eVNpbmsoc2FuZGJveCkuZ2V0T3JEaWUoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbk9wZW46IHNhbmRib3ggPT4ge1xuICAgICAgICAgICAgICBkZXRhaWwub25TaG93KHNhbmRib3gpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQ2xvc2U6IHNhbmRib3ggPT4ge1xuICAgICAgICAgICAgICBkZXRhaWwub25IaWRlKHNhbmRib3gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIFJlcHJlc2VudGluZy5jb25maWcoe1xuICAgICAgICAgICAgc3RvcmU6IHtcbiAgICAgICAgICAgICAgbW9kZTogJ21lbW9yeScsXG4gICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogT3B0aW9uYWwubm9uZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgUmVjZWl2aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBjaGFubmVsczoge1xuICAgICAgICAgICAgICAuLi5yZWNlaXZpbmdDaGFubmVsJDEoe1xuICAgICAgICAgICAgICAgIGlzRXh0cmFQYXJ0OiBzcGVjLmlzRXh0cmFQYXJ0LFxuICAgICAgICAgICAgICAgIC4uLmRldGFpbC5maXJlRGlzbWlzc2FsRXZlbnRJbnN0ZWFkLm1hcChmZSA9PiAoeyBmaXJlRXZlbnRJbnN0ZWFkOiB7IGV2ZW50OiBmZS5ldmVudCB9IH0pKS5nZXRPcih7fSlcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIC4uLnJlY2VpdmluZ0NoYW5uZWwoe1xuICAgICAgICAgICAgICAgIC4uLmRldGFpbC5maXJlUmVwb3NpdGlvbkV2ZW50SW5zdGVhZC5tYXAoZmUgPT4gKHsgZmlyZUV2ZW50SW5zdGVhZDogeyBldmVudDogZmUuZXZlbnQgfSB9KSkuZ2V0T3Ioe30pLFxuICAgICAgICAgICAgICAgIGRvUmVwb3NpdGlvbjogcmVwb3NpdGlvblxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF0pLFxuICAgICAgICBldmVudE9yZGVyOiBkZXRhaWwuZXZlbnRPcmRlcixcbiAgICAgICAgYXBpc1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IElubGluZVZpZXcgPSBzaW5nbGUoe1xuICAgICAgbmFtZTogJ0lubGluZVZpZXcnLFxuICAgICAgY29uZmlnRmllbGRzOiBbXG4gICAgICAgIHJlcXVpcmVkJDEoJ2xhenlTaW5rJyksXG4gICAgICAgIG9uSGFuZGxlcignb25TaG93JyksXG4gICAgICAgIG9uSGFuZGxlcignb25IaWRlJyksXG4gICAgICAgIG9wdGlvbkZ1bmN0aW9uKCdvbkVzY2FwZScpLFxuICAgICAgICBmaWVsZCgnaW5saW5lQmVoYXZpb3VycycsIFtcbiAgICAgICAgICBTYW5kYm94aW5nLFxuICAgICAgICAgIFJlcHJlc2VudGluZyxcbiAgICAgICAgICBSZWNlaXZpbmdcbiAgICAgICAgXSksXG4gICAgICAgIG9wdGlvbk9iak9mKCdmaXJlRGlzbWlzc2FsRXZlbnRJbnN0ZWFkJywgW2RlZmF1bHRlZCgnZXZlbnQnLCBkaXNtaXNzUmVxdWVzdGVkKCkpXSksXG4gICAgICAgIG9wdGlvbk9iak9mKCdmaXJlUmVwb3NpdGlvbkV2ZW50SW5zdGVhZCcsIFtkZWZhdWx0ZWQoJ2V2ZW50JywgcmVwb3NpdGlvblJlcXVlc3RlZCgpKV0pLFxuICAgICAgICBkZWZhdWx0ZWQoJ2dldFJlbGF0ZWQnLCBPcHRpb25hbC5ub25lKSxcbiAgICAgICAgZGVmYXVsdGVkKCdpc0V4dHJhUGFydCcsIG5ldmVyKSxcbiAgICAgICAgZGVmYXVsdGVkKCdldmVudE9yZGVyJywgT3B0aW9uYWwubm9uZSlcbiAgICAgIF0sXG4gICAgICBmYWN0b3J5OiBmYWN0b3J5JG8sXG4gICAgICBhcGlzOiB7XG4gICAgICAgIHNob3dBdDogKGFwaXMsIGNvbXBvbmVudCwgYW5jaG9yLCB0aGluZykgPT4ge1xuICAgICAgICAgIGFwaXMuc2hvd0F0KGNvbXBvbmVudCwgYW5jaG9yLCB0aGluZyk7XG4gICAgICAgIH0sXG4gICAgICAgIHNob3dXaXRoaW5Cb3VuZHM6IChhcGlzLCBjb21wb25lbnQsIGFuY2hvciwgdGhpbmcsIGJvdW5kcykgPT4ge1xuICAgICAgICAgIGFwaXMuc2hvd1dpdGhpbkJvdW5kcyhjb21wb25lbnQsIGFuY2hvciwgdGhpbmcsIGJvdW5kcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHNob3dNZW51QXQ6IChhcGlzLCBjb21wb25lbnQsIGFuY2hvciwgbWVudVNwZWMpID0+IHtcbiAgICAgICAgICBhcGlzLnNob3dNZW51QXQoY29tcG9uZW50LCBhbmNob3IsIG1lbnVTcGVjKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2hvd01lbnVXaXRoaW5Cb3VuZHM6IChhcGlzLCBjb21wb25lbnQsIGFuY2hvciwgbWVudVNwZWMsIGJvdW5kcykgPT4ge1xuICAgICAgICAgIGFwaXMuc2hvd01lbnVXaXRoaW5Cb3VuZHMoY29tcG9uZW50LCBhbmNob3IsIG1lbnVTcGVjLCBib3VuZHMpO1xuICAgICAgICB9LFxuICAgICAgICBoaWRlOiAoYXBpcywgY29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgYXBpcy5oaWRlKGNvbXBvbmVudCk7XG4gICAgICAgIH0sXG4gICAgICAgIGlzT3BlbjogKGFwaXMsIGNvbXBvbmVudCkgPT4gYXBpcy5pc09wZW4oY29tcG9uZW50KSxcbiAgICAgICAgZ2V0Q29udGVudDogKGFwaXMsIGNvbXBvbmVudCkgPT4gYXBpcy5nZXRDb250ZW50KGNvbXBvbmVudCksXG4gICAgICAgIHNldENvbnRlbnQ6IChhcGlzLCBjb21wb25lbnQsIHRoaW5nKSA9PiB7XG4gICAgICAgICAgYXBpcy5zZXRDb250ZW50KGNvbXBvbmVudCwgdGhpbmcpO1xuICAgICAgICB9LFxuICAgICAgICByZXBvc2l0aW9uOiAoYXBpcywgY29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgYXBpcy5yZXBvc2l0aW9uKGNvbXBvbmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBnbG9iYWwkOSA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLnV0aWwuRGVsYXknKTtcblxuICAgIGNvbnN0IGZhY3RvcnkkbiA9IGRldGFpbCA9PiB7XG4gICAgICBjb25zdCBldmVudHMgPSBldmVudHMkYShkZXRhaWwuYWN0aW9uKTtcbiAgICAgIGNvbnN0IHRhZyA9IGRldGFpbC5kb20udGFnO1xuICAgICAgY29uc3QgbG9va3VwQXR0ciA9IGF0dHIgPT4gZ2V0JGcoZGV0YWlsLmRvbSwgJ2F0dHJpYnV0ZXMnKS5iaW5kKGF0dHJzID0+IGdldCRnKGF0dHJzLCBhdHRyKSk7XG4gICAgICBjb25zdCBnZXRNb2RBdHRyaWJ1dGVzID0gKCkgPT4ge1xuICAgICAgICBpZiAodGFnID09PSAnYnV0dG9uJykge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSBsb29rdXBBdHRyKCd0eXBlJykuZ2V0T3IoJ2J1dHRvbicpO1xuICAgICAgICAgIGNvbnN0IHJvbGVBdHRycyA9IGxvb2t1cEF0dHIoJ3JvbGUnKS5tYXAocm9sZSA9PiAoeyByb2xlIH0pKS5nZXRPcih7fSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAuLi5yb2xlQXR0cnNcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJvbGUgPSBkZXRhaWwucm9sZS5nZXRPcihsb29rdXBBdHRyKCdyb2xlJykuZ2V0T3IoJ2J1dHRvbicpKTtcbiAgICAgICAgICByZXR1cm4geyByb2xlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1aWQ6IGRldGFpbC51aWQsXG4gICAgICAgIGRvbTogZGV0YWlsLmRvbSxcbiAgICAgICAgY29tcG9uZW50czogZGV0YWlsLmNvbXBvbmVudHMsXG4gICAgICAgIGV2ZW50cyxcbiAgICAgICAgYmVoYXZpb3VyczogU2tldGNoQmVoYXZpb3Vycy5hdWdtZW50KGRldGFpbC5idXR0b25CZWhhdmlvdXJzLCBbXG4gICAgICAgICAgRm9jdXNpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICBLZXlpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIG1vZGU6ICdleGVjdXRpb24nLFxuICAgICAgICAgICAgdXNlU3BhY2U6IHRydWUsXG4gICAgICAgICAgICB1c2VFbnRlcjogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIF0pLFxuICAgICAgICBkb21Nb2RpZmljYXRpb246IHsgYXR0cmlidXRlczogZ2V0TW9kQXR0cmlidXRlcygpIH0sXG4gICAgICAgIGV2ZW50T3JkZXI6IGRldGFpbC5ldmVudE9yZGVyXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgQnV0dG9uID0gc2luZ2xlKHtcbiAgICAgIG5hbWU6ICdCdXR0b24nLFxuICAgICAgZmFjdG9yeTogZmFjdG9yeSRuLFxuICAgICAgY29uZmlnRmllbGRzOiBbXG4gICAgICAgIGRlZmF1bHRlZCgndWlkJywgdW5kZWZpbmVkKSxcbiAgICAgICAgcmVxdWlyZWQkMSgnZG9tJyksXG4gICAgICAgIGRlZmF1bHRlZCgnY29tcG9uZW50cycsIFtdKSxcbiAgICAgICAgU2tldGNoQmVoYXZpb3Vycy5maWVsZCgnYnV0dG9uQmVoYXZpb3VycycsIFtcbiAgICAgICAgICBGb2N1c2luZyxcbiAgICAgICAgICBLZXlpbmdcbiAgICAgICAgXSksXG4gICAgICAgIG9wdGlvbiQzKCdhY3Rpb24nKSxcbiAgICAgICAgb3B0aW9uJDMoJ3JvbGUnKSxcbiAgICAgICAgZGVmYXVsdGVkKCdldmVudE9yZGVyJywge30pXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBjb25zdCByZWNvcmQgPSBzcGVjID0+IHtcbiAgICAgIGNvbnN0IHVpZCA9IGlzU2tldGNoU3BlYyhzcGVjKSAmJiBoYXNOb25OdWxsYWJsZUtleShzcGVjLCAndWlkJykgPyBzcGVjLnVpZCA6IGdlbmVyYXRlJDUoJ21lbWVudG8nKTtcbiAgICAgIGNvbnN0IGdldCA9IGFueUluU3lzdGVtID0+IGFueUluU3lzdGVtLmdldFN5c3RlbSgpLmdldEJ5VWlkKHVpZCkuZ2V0T3JEaWUoKTtcbiAgICAgIGNvbnN0IGdldE9wdCA9IGFueUluU3lzdGVtID0+IGFueUluU3lzdGVtLmdldFN5c3RlbSgpLmdldEJ5VWlkKHVpZCkudG9PcHRpb25hbCgpO1xuICAgICAgY29uc3QgYXNTcGVjID0gKCkgPT4gKHtcbiAgICAgICAgLi4uc3BlYyxcbiAgICAgICAgdWlkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdldCxcbiAgICAgICAgZ2V0T3B0LFxuICAgICAgICBhc1NwZWNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBnbG9iYWwkOCA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLnV0aWwuSTE4bicpO1xuXG4gICAgY29uc3QgcnRsVHJhbnNmb3JtID0ge1xuICAgICAgJ2luZGVudCc6IHRydWUsXG4gICAgICAnb3V0ZGVudCc6IHRydWUsXG4gICAgICAndGFibGUtaW5zZXJ0LWNvbHVtbi1hZnRlcic6IHRydWUsXG4gICAgICAndGFibGUtaW5zZXJ0LWNvbHVtbi1iZWZvcmUnOiB0cnVlLFxuICAgICAgJ3Bhc3RlLWNvbHVtbi1hZnRlcic6IHRydWUsXG4gICAgICAncGFzdGUtY29sdW1uLWJlZm9yZSc6IHRydWUsXG4gICAgICAndW5vcmRlcmVkLWxpc3QnOiB0cnVlLFxuICAgICAgJ2xpc3QtYnVsbC1jaXJjbGUnOiB0cnVlLFxuICAgICAgJ2xpc3QtYnVsbC1kZWZhdWx0JzogdHJ1ZSxcbiAgICAgICdsaXN0LWJ1bGwtc3F1YXJlJzogdHJ1ZVxuICAgIH07XG4gICAgY29uc3QgZGVmYXVsdEljb25OYW1lID0gJ3RlbXBvcmFyeS1wbGFjZWhvbGRlcic7XG4gICAgY29uc3QgZGVmYXVsdEljb24gPSBpY29ucyA9PiAoKSA9PiBnZXQkZyhpY29ucywgZGVmYXVsdEljb25OYW1lKS5nZXRPcignIW5vdCBmb3VuZCEnKTtcbiAgICBjb25zdCBnZXRJY29uTmFtZSA9IChuYW1lLCBpY29ucykgPT4ge1xuICAgICAgY29uc3QgbGNOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGdsb2JhbCQ4LmlzUnRsKCkpIHtcbiAgICAgICAgY29uc3QgcnRsTmFtZSA9IGVuc3VyZVRyYWlsaW5nKGxjTmFtZSwgJy1ydGwnKTtcbiAgICAgICAgcmV0dXJuIGhhcyQyKGljb25zLCBydGxOYW1lKSA/IHJ0bE5hbWUgOiBsY05hbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbGNOYW1lO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbG9va3VwSWNvbiA9IChuYW1lLCBpY29ucykgPT4gZ2V0JGcoaWNvbnMsIGdldEljb25OYW1lKG5hbWUsIGljb25zKSk7XG4gICAgY29uc3QgZ2V0JDIgPSAobmFtZSwgaWNvblByb3ZpZGVyKSA9PiB7XG4gICAgICBjb25zdCBpY29ucyA9IGljb25Qcm92aWRlcigpO1xuICAgICAgcmV0dXJuIGxvb2t1cEljb24obmFtZSwgaWNvbnMpLmdldE9yVGh1bmsoZGVmYXVsdEljb24oaWNvbnMpKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldE9yID0gKG5hbWUsIGljb25Qcm92aWRlciwgZmFsbGJhY2tJY29uKSA9PiB7XG4gICAgICBjb25zdCBpY29ucyA9IGljb25Qcm92aWRlcigpO1xuICAgICAgcmV0dXJuIGxvb2t1cEljb24obmFtZSwgaWNvbnMpLm9yKGZhbGxiYWNrSWNvbikuZ2V0T3JUaHVuayhkZWZhdWx0SWNvbihpY29ucykpO1xuICAgIH07XG4gICAgY29uc3QgbmVlZHNSdGxUcmFuc2Zvcm0gPSBpY29uTmFtZSA9PiBnbG9iYWwkOC5pc1J0bCgpID8gaGFzJDIocnRsVHJhbnNmb3JtLCBpY29uTmFtZSkgOiBmYWxzZTtcbiAgICBjb25zdCBhZGRGb2N1c2FibGVCZWhhdmlvdXIgPSAoKSA9PiBjb25maWcoJ2FkZC1mb2N1c2FibGUnLCBbcnVuT25BdHRhY2hlZChjb21wID0+IHtcbiAgICAgICAgY2hpbGQoY29tcC5lbGVtZW50LCAnc3ZnJykuZWFjaChzdmcgPT4gc2V0JDkoc3ZnLCAnZm9jdXNhYmxlJywgJ2ZhbHNlJykpO1xuICAgICAgfSldKTtcbiAgICBjb25zdCByZW5kZXJJY29uJDMgPSAoc3BlYywgaWNvbk5hbWUsIGljb25zLCBmYWxsYmFja0ljb24pID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICBjb25zdCBydGxJY29uQ2xhc3NlcyA9IG5lZWRzUnRsVHJhbnNmb3JtKGljb25OYW1lKSA/IFsndG94LWljb24tLWZsaXAnXSA6IFtdO1xuICAgICAgY29uc3QgaWNvbkh0bWwgPSBnZXQkZyhpY29ucywgZ2V0SWNvbk5hbWUoaWNvbk5hbWUsIGljb25zKSkub3IoZmFsbGJhY2tJY29uKS5nZXRPclRodW5rKGRlZmF1bHRJY29uKGljb25zKSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6IHNwZWMudGFnLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IChfYSA9IHNwZWMuYXR0cmlidXRlcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30sXG4gICAgICAgICAgY2xhc3Nlczogc3BlYy5jbGFzc2VzLmNvbmNhdChydGxJY29uQ2xhc3NlcyksXG4gICAgICAgICAgaW5uZXJIdG1sOiBpY29uSHRtbFxuICAgICAgICB9LFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgLi4uKF9iID0gc3BlYy5iZWhhdmlvdXJzKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBbXSxcbiAgICAgICAgICBhZGRGb2N1c2FibGVCZWhhdmlvdXIoKVxuICAgICAgICBdKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlciQzID0gKGljb25OYW1lLCBzcGVjLCBpY29uUHJvdmlkZXIsIGZhbGxiYWNrSWNvbiA9IE9wdGlvbmFsLm5vbmUoKSkgPT4gcmVuZGVySWNvbiQzKHNwZWMsIGljb25OYW1lLCBpY29uUHJvdmlkZXIoKSwgZmFsbGJhY2tJY29uKTtcbiAgICBjb25zdCByZW5kZXJGaXJzdCA9IChpY29uTmFtZXMsIHNwZWMsIGljb25Qcm92aWRlcikgPT4ge1xuICAgICAgY29uc3QgaWNvbnMgPSBpY29uUHJvdmlkZXIoKTtcbiAgICAgIGNvbnN0IGljb25OYW1lID0gZmluZCQ1KGljb25OYW1lcywgbmFtZSA9PiBoYXMkMihpY29ucywgZ2V0SWNvbk5hbWUobmFtZSwgaWNvbnMpKSk7XG4gICAgICByZXR1cm4gcmVuZGVySWNvbiQzKHNwZWMsIGljb25OYW1lLmdldE9yKGRlZmF1bHRJY29uTmFtZSksIGljb25zLCBPcHRpb25hbC5ub25lKCkpO1xuICAgIH07XG5cbiAgICBjb25zdCBub3RpZmljYXRpb25JY29uTWFwID0ge1xuICAgICAgc3VjY2VzczogJ2NoZWNrbWFyaycsXG4gICAgICBlcnJvcjogJ3dhcm5pbmcnLFxuICAgICAgZXJyOiAnZXJyb3InLFxuICAgICAgd2FybmluZzogJ3dhcm5pbmcnLFxuICAgICAgd2FybjogJ3dhcm5pbmcnLFxuICAgICAgaW5mbzogJ2luZm8nXG4gICAgfTtcbiAgICBjb25zdCBmYWN0b3J5JG0gPSBkZXRhaWwgPT4ge1xuICAgICAgY29uc3QgbWVtQmFubmVyVGV4dCA9IHJlY29yZCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ3AnLFxuICAgICAgICAgIGlubmVySHRtbDogZGV0YWlsLnRyYW5zbGF0aW9uUHJvdmlkZXIoZGV0YWlsLnRleHQpXG4gICAgICAgIH0sXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtSZXBsYWNpbmcuY29uZmlnKHt9KV0pXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlbmRlclBlcmNlbnRCYXIgPSBwZXJjZW50ID0+ICh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtYmFyJ10sXG4gICAgICAgICAgc3R5bGVzOiB7IHdpZHRoOiBgJHsgcGVyY2VudCB9JWAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlbmRlclBlcmNlbnRUZXh0ID0gcGVyY2VudCA9PiAoe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXRleHQnXSxcbiAgICAgICAgICBpbm5lckh0bWw6IGAkeyBwZXJjZW50IH0lYFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG1lbUJhbm5lclByb2dyZXNzID0gcmVjb3JkKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBkZXRhaWwucHJvZ3Jlc3MgPyBbXG4gICAgICAgICAgICAndG94LXByb2dyZXNzLWJhcicsXG4gICAgICAgICAgICAndG94LXByb2dyZXNzLWluZGljYXRvcidcbiAgICAgICAgICBdIDogWyd0b3gtcHJvZ3Jlc3MtYmFyJ11cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1iYXItY29udGFpbmVyJ11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wb25lbnRzOiBbcmVuZGVyUGVyY2VudEJhcigwKV1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlbmRlclBlcmNlbnRUZXh0KDApXG4gICAgICAgIF0sXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtSZXBsYWNpbmcuY29uZmlnKHt9KV0pXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHVwZGF0ZVByb2dyZXNzID0gKGNvbXAsIHBlcmNlbnQpID0+IHtcbiAgICAgICAgaWYgKGNvbXAuZ2V0U3lzdGVtKCkuaXNDb25uZWN0ZWQoKSkge1xuICAgICAgICAgIG1lbUJhbm5lclByb2dyZXNzLmdldE9wdChjb21wKS5lYWNoKHByb2dyZXNzID0+IHtcbiAgICAgICAgICAgIFJlcGxhY2luZy5zZXQocHJvZ3Jlc3MsIFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LWJhci1jb250YWluZXInXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29tcG9uZW50czogW3JlbmRlclBlcmNlbnRCYXIocGVyY2VudCldXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHJlbmRlclBlcmNlbnRUZXh0KHBlcmNlbnQpXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHVwZGF0ZVRleHQgPSAoY29tcCwgdGV4dCkgPT4ge1xuICAgICAgICBpZiAoY29tcC5nZXRTeXN0ZW0oKS5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgICAgY29uc3QgYmFubmVyID0gbWVtQmFubmVyVGV4dC5nZXQoY29tcCk7XG4gICAgICAgICAgUmVwbGFjaW5nLnNldChiYW5uZXIsIFt0ZXh0JDIodGV4dCldKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFwaXMgPSB7XG4gICAgICAgIHVwZGF0ZVByb2dyZXNzLFxuICAgICAgICB1cGRhdGVUZXh0XG4gICAgICB9O1xuICAgICAgY29uc3QgaWNvbkNob2ljZXMgPSBmbGF0dGVuKFtcbiAgICAgICAgZGV0YWlsLmljb24udG9BcnJheSgpLFxuICAgICAgICBkZXRhaWwubGV2ZWwudG9BcnJheSgpLFxuICAgICAgICBkZXRhaWwubGV2ZWwuYmluZChsZXZlbCA9PiBPcHRpb25hbC5mcm9tKG5vdGlmaWNhdGlvbkljb25NYXBbbGV2ZWxdKSkudG9BcnJheSgpXG4gICAgICBdKTtcbiAgICAgIGNvbnN0IG1lbUJ1dHRvbiA9IHJlY29yZChCdXR0b24uc2tldGNoKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnYnV0dG9uJyxcbiAgICAgICAgICBjbGFzc2VzOiBbXG4gICAgICAgICAgICAndG94LW5vdGlmaWNhdGlvbl9fZGlzbWlzcycsXG4gICAgICAgICAgICAndG94LWJ1dHRvbicsXG4gICAgICAgICAgICAndG94LWJ1dHRvbi0tbmFrZWQnLFxuICAgICAgICAgICAgJ3RveC1idXR0b24tLWljb24nXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbcmVuZGVyJDMoJ2Nsb3NlJywge1xuICAgICAgICAgICAgdGFnOiAnc3BhbicsXG4gICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1pY29uJ10sXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7ICdhcmlhLWxhYmVsJzogZGV0YWlsLnRyYW5zbGF0aW9uUHJvdmlkZXIoJ0Nsb3NlJykgfVxuICAgICAgICAgIH0sIGRldGFpbC5pY29uUHJvdmlkZXIpXSxcbiAgICAgICAgYWN0aW9uOiBjb21wID0+IHtcbiAgICAgICAgICBkZXRhaWwub25BY3Rpb24oY29tcCk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbkljb25TcGVjID0gcmVuZGVyRmlyc3QoaWNvbkNob2ljZXMsIHtcbiAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgY2xhc3NlczogWyd0b3gtbm90aWZpY2F0aW9uX19pY29uJ11cbiAgICAgIH0sIGRldGFpbC5pY29uUHJvdmlkZXIpO1xuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uQm9keVNwZWMgPSB7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtbm90aWZpY2F0aW9uX19ib2R5J11cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW21lbUJhbm5lclRleHQuYXNTcGVjKCldLFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbUmVwbGFjaW5nLmNvbmZpZyh7fSldKVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBbXG4gICAgICAgIG5vdGlmaWNhdGlvbkljb25TcGVjLFxuICAgICAgICBub3RpZmljYXRpb25Cb2R5U3BlY1xuICAgICAgXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVpZDogZGV0YWlsLnVpZCxcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7IHJvbGU6ICdhbGVydCcgfSxcbiAgICAgICAgICBjbGFzc2VzOiBkZXRhaWwubGV2ZWwubWFwKGxldmVsID0+IFtcbiAgICAgICAgICAgICd0b3gtbm90aWZpY2F0aW9uJyxcbiAgICAgICAgICAgICd0b3gtbm90aWZpY2F0aW9uLS1pbicsXG4gICAgICAgICAgICBgdG94LW5vdGlmaWNhdGlvbi0tJHsgbGV2ZWwgfWBcbiAgICAgICAgICBdKS5nZXRPcihbXG4gICAgICAgICAgICAndG94LW5vdGlmaWNhdGlvbicsXG4gICAgICAgICAgICAndG94LW5vdGlmaWNhdGlvbi0taW4nXG4gICAgICAgICAgXSlcbiAgICAgICAgfSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIEZvY3VzaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgY29uZmlnKCdub3RpZmljYXRpb24tZXZlbnRzJywgW3J1biQxKGZvY3VzaW4oKSwgY29tcCA9PiB7XG4gICAgICAgICAgICAgIG1lbUJ1dHRvbi5nZXRPcHQoY29tcCkuZWFjaChGb2N1c2luZy5mb2N1cyk7XG4gICAgICAgICAgICB9KV0pXG4gICAgICAgIF0pLFxuICAgICAgICBjb21wb25lbnRzOiBjb21wb25lbnRzLmNvbmNhdChkZXRhaWwucHJvZ3Jlc3MgPyBbbWVtQmFubmVyUHJvZ3Jlc3MuYXNTcGVjKCldIDogW10pLmNvbmNhdCghZGV0YWlsLmNsb3NlQnV0dG9uID8gW10gOiBbbWVtQnV0dG9uLmFzU3BlYygpXSksXG4gICAgICAgIGFwaXNcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBOb3RpZmljYXRpb24gPSBzaW5nbGUoe1xuICAgICAgbmFtZTogJ05vdGlmaWNhdGlvbicsXG4gICAgICBmYWN0b3J5OiBmYWN0b3J5JG0sXG4gICAgICBjb25maWdGaWVsZHM6IFtcbiAgICAgICAgb3B0aW9uJDMoJ2xldmVsJyksXG4gICAgICAgIHJlcXVpcmVkJDEoJ3Byb2dyZXNzJyksXG4gICAgICAgIG9wdGlvbiQzKCdpY29uJyksXG4gICAgICAgIHJlcXVpcmVkJDEoJ29uQWN0aW9uJyksXG4gICAgICAgIHJlcXVpcmVkJDEoJ3RleHQnKSxcbiAgICAgICAgcmVxdWlyZWQkMSgnaWNvblByb3ZpZGVyJyksXG4gICAgICAgIHJlcXVpcmVkJDEoJ3RyYW5zbGF0aW9uUHJvdmlkZXInKSxcbiAgICAgICAgZGVmYXVsdGVkQm9vbGVhbignY2xvc2VCdXR0b24nLCB0cnVlKVxuICAgICAgXSxcbiAgICAgIGFwaXM6IHtcbiAgICAgICAgdXBkYXRlUHJvZ3Jlc3M6IChhcGlzLCBjb21wLCBwZXJjZW50KSA9PiB7XG4gICAgICAgICAgYXBpcy51cGRhdGVQcm9ncmVzcyhjb21wLCBwZXJjZW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgdXBkYXRlVGV4dDogKGFwaXMsIGNvbXAsIHRleHQpID0+IHtcbiAgICAgICAgICBhcGlzLnVwZGF0ZVRleHQoY29tcCwgdGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBOb3RpZmljYXRpb25NYW5hZ2VySW1wbCA9IChlZGl0b3IsIGV4dHJhcywgdWlNb3RoZXJzaGlwKSA9PiB7XG4gICAgICBjb25zdCBzaGFyZWRCYWNrc3RhZ2UgPSBleHRyYXMuYmFja3N0YWdlLnNoYXJlZDtcbiAgICAgIGNvbnN0IGdldEJvdW5kcyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgY29udGVudEFyZWEgPSBib3gkMShTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Q29udGVudEFyZWFDb250YWluZXIoKSkpO1xuICAgICAgICBjb25zdCB3aW4kMSA9IHdpbigpO1xuICAgICAgICBjb25zdCB4ID0gY2xhbXAod2luJDEueCwgY29udGVudEFyZWEueCwgY29udGVudEFyZWEucmlnaHQpO1xuICAgICAgICBjb25zdCB5ID0gY2xhbXAod2luJDEueSwgY29udGVudEFyZWEueSwgY29udGVudEFyZWEuYm90dG9tKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBNYXRoLm1heChjb250ZW50QXJlYS5yaWdodCwgd2luJDEucmlnaHQpO1xuICAgICAgICBjb25zdCBib3R0b20gPSBNYXRoLm1heChjb250ZW50QXJlYS5ib3R0b20sIHdpbiQxLmJvdHRvbSk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGJvdW5kcyh4LCB5LCByaWdodCAtIHgsIGJvdHRvbSAtIHkpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBvcGVuID0gKHNldHRpbmdzLCBjbG9zZUNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IGNsb3NlID0gKCkgPT4ge1xuICAgICAgICAgIGNsb3NlQ2FsbGJhY2soKTtcbiAgICAgICAgICBJbmxpbmVWaWV3LmhpZGUobm90aWZpY2F0aW9uV3JhcHBlcik7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IGJ1aWxkJDEoTm90aWZpY2F0aW9uLnNrZXRjaCh7XG4gICAgICAgICAgdGV4dDogc2V0dGluZ3MudGV4dCxcbiAgICAgICAgICBsZXZlbDogY29udGFpbnMkMihbXG4gICAgICAgICAgICAnc3VjY2VzcycsXG4gICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgJ3dhcm5pbmcnLFxuICAgICAgICAgICAgJ3dhcm4nLFxuICAgICAgICAgICAgJ2luZm8nXG4gICAgICAgICAgXSwgc2V0dGluZ3MudHlwZSkgPyBzZXR0aW5ncy50eXBlIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHByb2dyZXNzOiBzZXR0aW5ncy5wcm9ncmVzc0JhciA9PT0gdHJ1ZSxcbiAgICAgICAgICBpY29uOiBzZXR0aW5ncy5pY29uLFxuICAgICAgICAgIGNsb3NlQnV0dG9uOiBzZXR0aW5ncy5jbG9zZUJ1dHRvbixcbiAgICAgICAgICBvbkFjdGlvbjogY2xvc2UsXG4gICAgICAgICAgaWNvblByb3ZpZGVyOiBzaGFyZWRCYWNrc3RhZ2UucHJvdmlkZXJzLmljb25zLFxuICAgICAgICAgIHRyYW5zbGF0aW9uUHJvdmlkZXI6IHNoYXJlZEJhY2tzdGFnZS5wcm92aWRlcnMudHJhbnNsYXRlXG4gICAgICAgIH0pKTtcbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uV3JhcHBlciA9IGJ1aWxkJDEoSW5saW5lVmlldy5za2V0Y2goe1xuICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LW5vdGlmaWNhdGlvbnMtY29udGFpbmVyJ11cbiAgICAgICAgICB9LFxuICAgICAgICAgIGxhenlTaW5rOiBzaGFyZWRCYWNrc3RhZ2UuZ2V0U2luayxcbiAgICAgICAgICBmaXJlRGlzbWlzc2FsRXZlbnRJbnN0ZWFkOiB7fSxcbiAgICAgICAgICAuLi5zaGFyZWRCYWNrc3RhZ2UuaGVhZGVyLmlzUG9zaXRpb25lZEF0VG9wKCkgPyB7fSA6IHsgZmlyZVJlcG9zaXRpb25FdmVudEluc3RlYWQ6IHt9IH1cbiAgICAgICAgfSkpO1xuICAgICAgICB1aU1vdGhlcnNoaXAuYWRkKG5vdGlmaWNhdGlvbldyYXBwZXIpO1xuICAgICAgICBpZiAoaXNOdW1iZXIoc2V0dGluZ3MudGltZW91dCkgJiYgc2V0dGluZ3MudGltZW91dCA+IDApIHtcbiAgICAgICAgICBnbG9iYWwkOS5zZXRFZGl0b3JUaW1lb3V0KGVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgY2xvc2UoKTtcbiAgICAgICAgICB9LCBzZXR0aW5ncy50aW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXBvc2l0aW9uID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvblNwZWMgPSBwcmVtYWRlKG5vdGlmaWNhdGlvbik7XG4gICAgICAgICAgY29uc3QgYW5jaG9yT3ZlcnJpZGVzID0geyBtYXhIZWlnaHRGdW5jdGlvbjogZXhwYW5kYWJsZSQxKCkgfTtcbiAgICAgICAgICBjb25zdCBhbGxOb3RpZmljYXRpb25zID0gZWRpdG9yLm5vdGlmaWNhdGlvbk1hbmFnZXIuZ2V0Tm90aWZpY2F0aW9ucygpO1xuICAgICAgICAgIGlmIChhbGxOb3RpZmljYXRpb25zWzBdID09PSB0aGlzTm90aWZpY2F0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBhbmNob3IgPSB7XG4gICAgICAgICAgICAgIC4uLnNoYXJlZEJhY2tzdGFnZS5hbmNob3JzLmJhbm5lcigpLFxuICAgICAgICAgICAgICBvdmVycmlkZXM6IGFuY2hvck92ZXJyaWRlc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIElubGluZVZpZXcuc2hvd1dpdGhpbkJvdW5kcyhub3RpZmljYXRpb25XcmFwcGVyLCBub3RpZmljYXRpb25TcGVjLCB7IGFuY2hvciB9LCBnZXRCb3VuZHMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmRleE9mKGFsbE5vdGlmaWNhdGlvbnMsIHRoaXNOb3RpZmljYXRpb24pLmVhY2goaWR4ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNOb3RpZmljYXRpb24gPSBhbGxOb3RpZmljYXRpb25zW2lkeCAtIDFdLmdldEVsKCk7XG4gICAgICAgICAgICAgIGNvbnN0IG5vZGVBbmNob3IgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ25vZGUnLFxuICAgICAgICAgICAgICAgIHJvb3Q6IGJvZHkoKSxcbiAgICAgICAgICAgICAgICBub2RlOiBPcHRpb25hbC5zb21lKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHByZXZpb3VzTm90aWZpY2F0aW9uKSksXG4gICAgICAgICAgICAgICAgb3ZlcnJpZGVzOiBhbmNob3JPdmVycmlkZXMsXG4gICAgICAgICAgICAgICAgbGF5b3V0czoge1xuICAgICAgICAgICAgICAgICAgb25SdGw6ICgpID0+IFtzb3V0aCQyXSxcbiAgICAgICAgICAgICAgICAgIG9uTHRyOiAoKSA9PiBbc291dGgkMl1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIElubGluZVZpZXcuc2hvd1dpdGhpbkJvdW5kcyhub3RpZmljYXRpb25XcmFwcGVyLCBub3RpZmljYXRpb25TcGVjLCB7IGFuY2hvcjogbm9kZUFuY2hvciB9LCBnZXRCb3VuZHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0aGlzTm90aWZpY2F0aW9uID0ge1xuICAgICAgICAgIGNsb3NlLFxuICAgICAgICAgIHJlcG9zaXRpb24sXG4gICAgICAgICAgdGV4dDogbnVUZXh0ID0+IHtcbiAgICAgICAgICAgIE5vdGlmaWNhdGlvbi51cGRhdGVUZXh0KG5vdGlmaWNhdGlvbiwgbnVUZXh0KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldHRpbmdzLFxuICAgICAgICAgIGdldEVsOiAoKSA9PiBub3RpZmljYXRpb24uZWxlbWVudC5kb20sXG4gICAgICAgICAgcHJvZ3Jlc3NCYXI6IHtcbiAgICAgICAgICAgIHZhbHVlOiBwZXJjZW50ID0+IHtcbiAgICAgICAgICAgICAgTm90aWZpY2F0aW9uLnVwZGF0ZVByb2dyZXNzKG5vdGlmaWNhdGlvbiwgcGVyY2VudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpc05vdGlmaWNhdGlvbjtcbiAgICAgIH07XG4gICAgICBjb25zdCBjbG9zZSA9IG5vdGlmaWNhdGlvbiA9PiB7XG4gICAgICAgIG5vdGlmaWNhdGlvbi5jbG9zZSgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldEFyZ3MgPSBub3RpZmljYXRpb24gPT4ge1xuICAgICAgICByZXR1cm4gbm90aWZpY2F0aW9uLnNldHRpbmdzO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wZW4sXG4gICAgICAgIGNsb3NlLFxuICAgICAgICBnZXRBcmdzXG4gICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgZ2xvYmFsJDcgPSB0aW55bWNlLnV0aWwuVG9vbHMucmVzb2x2ZSgndGlueW1jZS5kb20uRE9NVXRpbHMnKTtcblxuICAgIHZhciBnbG9iYWwkNiA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLkVkaXRvck1hbmFnZXInKTtcblxuICAgIHZhciBnbG9iYWwkNSA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLkVudicpO1xuXG4gICAgdmFyIFRvb2xiYXJNb2RlJDE7XG4gICAgKGZ1bmN0aW9uIChUb29sYmFyTW9kZSkge1xuICAgICAgVG9vbGJhck1vZGVbJ2RlZmF1bHQnXSA9ICd3cmFwJztcbiAgICAgIFRvb2xiYXJNb2RlWydmbG9hdGluZyddID0gJ2Zsb2F0aW5nJztcbiAgICAgIFRvb2xiYXJNb2RlWydzbGlkaW5nJ10gPSAnc2xpZGluZyc7XG4gICAgICBUb29sYmFyTW9kZVsnc2Nyb2xsaW5nJ10gPSAnc2Nyb2xsaW5nJztcbiAgICB9KFRvb2xiYXJNb2RlJDEgfHwgKFRvb2xiYXJNb2RlJDEgPSB7fSkpKTtcbiAgICB2YXIgVG9vbGJhckxvY2F0aW9uJDE7XG4gICAgKGZ1bmN0aW9uIChUb29sYmFyTG9jYXRpb24pIHtcbiAgICAgIFRvb2xiYXJMb2NhdGlvblsnYXV0byddID0gJ2F1dG8nO1xuICAgICAgVG9vbGJhckxvY2F0aW9uWyd0b3AnXSA9ICd0b3AnO1xuICAgICAgVG9vbGJhckxvY2F0aW9uWydib3R0b20nXSA9ICdib3R0b20nO1xuICAgIH0oVG9vbGJhckxvY2F0aW9uJDEgfHwgKFRvb2xiYXJMb2NhdGlvbiQxID0ge30pKSk7XG4gICAgY29uc3Qgb3B0aW9uJDIgPSBuYW1lID0+IGVkaXRvciA9PiBlZGl0b3Iub3B0aW9ucy5nZXQobmFtZSk7XG4gICAgY29uc3Qgd3JhcE9wdGlvbmFsID0gZm4gPT4gZWRpdG9yID0+IE9wdGlvbmFsLmZyb20oZm4oZWRpdG9yKSk7XG4gICAgY29uc3QgcmVnaXN0ZXIkZSA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBpc1Bob25lID0gZ2xvYmFsJDUuZGV2aWNlVHlwZS5pc1Bob25lKCk7XG4gICAgICBjb25zdCBpc01vYmlsZSA9IGdsb2JhbCQ1LmRldmljZVR5cGUuaXNUYWJsZXQoKSB8fCBpc1Bob25lO1xuICAgICAgY29uc3QgcmVnaXN0ZXJPcHRpb24gPSBlZGl0b3Iub3B0aW9ucy5yZWdpc3RlcjtcbiAgICAgIGNvbnN0IHN0cmluZ09yRmFsc2VQcm9jZXNzb3IgPSB2YWx1ZSA9PiBpc1N0cmluZyh2YWx1ZSkgfHwgdmFsdWUgPT09IGZhbHNlO1xuICAgICAgY29uc3Qgc3RyaW5nT3JOdW1iZXJQcm9jZXNzb3IgPSB2YWx1ZSA9PiBpc1N0cmluZyh2YWx1ZSkgfHwgaXNOdW1iZXIodmFsdWUpO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3NraW4nLCB7XG4gICAgICAgIHByb2Nlc3NvcjogdmFsdWUgPT4gaXNTdHJpbmcodmFsdWUpIHx8IHZhbHVlID09PSBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogJ294aWRlJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignc2tpbl91cmwnLCB7IHByb2Nlc3NvcjogJ3N0cmluZycgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaGVpZ2h0Jywge1xuICAgICAgICBwcm9jZXNzb3I6IHN0cmluZ09yTnVtYmVyUHJvY2Vzc29yLFxuICAgICAgICBkZWZhdWx0OiBNYXRoLm1heChlZGl0b3IuZ2V0RWxlbWVudCgpLm9mZnNldEhlaWdodCwgNDAwKVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignd2lkdGgnLCB7XG4gICAgICAgIHByb2Nlc3Nvcjogc3RyaW5nT3JOdW1iZXJQcm9jZXNzb3IsXG4gICAgICAgIGRlZmF1bHQ6IGdsb2JhbCQ3LkRPTS5nZXRTdHlsZShlZGl0b3IuZ2V0RWxlbWVudCgpLCAnd2lkdGgnKVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignbWluX2hlaWdodCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnbnVtYmVyJyxcbiAgICAgICAgZGVmYXVsdDogMTAwXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdtaW5fd2lkdGgnLCB7IHByb2Nlc3NvcjogJ251bWJlcicgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignbWF4X2hlaWdodCcsIHsgcHJvY2Vzc29yOiAnbnVtYmVyJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdtYXhfd2lkdGgnLCB7IHByb2Nlc3NvcjogJ251bWJlcicgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignc3R5bGVfZm9ybWF0cycsIHsgcHJvY2Vzc29yOiAnb2JqZWN0W10nIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3N0eWxlX2Zvcm1hdHNfbWVyZ2UnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignc3R5bGVfZm9ybWF0c19hdXRvaGlkZScsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdsaW5lX2hlaWdodF9mb3JtYXRzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnMSAxLjEgMS4yIDEuMyAxLjQgMS41IDInXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdmb250X2ZhbWlseV9mb3JtYXRzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnQW5kYWxlIE1vbm89YW5kYWxlIG1vbm8sbW9ub3NwYWNlOycgKyAnQXJpYWw9YXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWY7JyArICdBcmlhbCBCbGFjaz1hcmlhbCBibGFjayxzYW5zLXNlcmlmOycgKyAnQm9vayBBbnRpcXVhPWJvb2sgYW50aXF1YSxwYWxhdGlubyxzZXJpZjsnICsgJ0NvbWljIFNhbnMgTVM9Y29taWMgc2FucyBtcyxzYW5zLXNlcmlmOycgKyAnQ291cmllciBOZXc9Y291cmllciBuZXcsY291cmllcixtb25vc3BhY2U7JyArICdHZW9yZ2lhPWdlb3JnaWEscGFsYXRpbm8sc2VyaWY7JyArICdIZWx2ZXRpY2E9aGVsdmV0aWNhLGFyaWFsLHNhbnMtc2VyaWY7JyArICdJbXBhY3Q9aW1wYWN0LHNhbnMtc2VyaWY7JyArICdTeW1ib2w9c3ltYm9sOycgKyAnVGFob21hPXRhaG9tYSxhcmlhbCxoZWx2ZXRpY2Esc2Fucy1zZXJpZjsnICsgJ1Rlcm1pbmFsPXRlcm1pbmFsLG1vbmFjbyxtb25vc3BhY2U7JyArICdUaW1lcyBOZXcgUm9tYW49dGltZXMgbmV3IHJvbWFuLHRpbWVzLHNlcmlmOycgKyAnVHJlYnVjaGV0IE1TPXRyZWJ1Y2hldCBtcyxnZW5ldmEsc2Fucy1zZXJpZjsnICsgJ1ZlcmRhbmE9dmVyZGFuYSxnZW5ldmEsc2Fucy1zZXJpZjsnICsgJ1dlYmRpbmdzPXdlYmRpbmdzOycgKyAnV2luZ2RpbmdzPXdpbmdkaW5ncyx6YXBmIGRpbmdiYXRzJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignZm9udF9zaXplX2Zvcm1hdHMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICc4cHQgMTBwdCAxMnB0IDE0cHQgMThwdCAyNHB0IDM2cHQnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdmb250X3NpemVfaW5wdXRfZGVmYXVsdF91bml0Jywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAncHQnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdibG9ja19mb3JtYXRzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnUGFyYWdyYXBoPXA7JyArICdIZWFkaW5nIDE9aDE7JyArICdIZWFkaW5nIDI9aDI7JyArICdIZWFkaW5nIDM9aDM7JyArICdIZWFkaW5nIDQ9aDQ7JyArICdIZWFkaW5nIDU9aDU7JyArICdIZWFkaW5nIDY9aDY7JyArICdQcmVmb3JtYXR0ZWQ9cHJlJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignY29udGVudF9sYW5ncycsIHsgcHJvY2Vzc29yOiAnb2JqZWN0W10nIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3JlbW92ZWRfbWVudWl0ZW1zJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignbWVudWJhcicsIHtcbiAgICAgICAgcHJvY2Vzc29yOiB2YWx1ZSA9PiBpc1N0cmluZyh2YWx1ZSkgfHwgaXNCb29sZWFuKHZhbHVlKSxcbiAgICAgICAgZGVmYXVsdDogIWlzUGhvbmVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ21lbnUnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ29iamVjdCcsXG4gICAgICAgIGRlZmF1bHQ6IHt9XG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd0b29sYmFyJywge1xuICAgICAgICBwcm9jZXNzb3I6IHZhbHVlID0+IHtcbiAgICAgICAgICBpZiAoaXNCb29sZWFuKHZhbHVlKSB8fCBpc1N0cmluZyh2YWx1ZSkgfHwgaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICB2YWxpZDogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnTXVzdCBiZSBhIGJvb2xlYW4sIHN0cmluZyBvciBhcnJheS4nXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByYW5nZSQyKDksIG51bSA9PiB7XG4gICAgICAgIHJlZ2lzdGVyT3B0aW9uKCd0b29sYmFyJyArIChudW0gKyAxKSwgeyBwcm9jZXNzb3I6ICdzdHJpbmcnIH0pO1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndG9vbGJhcl9tb2RlJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiBpc01vYmlsZSA/ICdzY3JvbGxpbmcnIDogJ2Zsb2F0aW5nJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndG9vbGJhcl9ncm91cHMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ29iamVjdCcsXG4gICAgICAgIGRlZmF1bHQ6IHt9XG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd0b29sYmFyX2xvY2F0aW9uJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiBUb29sYmFyTG9jYXRpb24kMS5hdXRvXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd0b29sYmFyX3BlcnNpc3QnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndG9vbGJhcl9zdGlja3knLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBlZGl0b3IuaW5saW5lXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd0b29sYmFyX3N0aWNreV9vZmZzZXQnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ251bWJlcicsXG4gICAgICAgIGRlZmF1bHQ6IDBcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2ZpeGVkX3Rvb2xiYXJfY29udGFpbmVyJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignZml4ZWRfdG9vbGJhcl9jb250YWluZXJfdGFyZ2V0JywgeyBwcm9jZXNzb3I6ICdvYmplY3QnIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3VpX21vZGUnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICdjb21iaW5lZCdcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2ZpbGVfcGlja2VyX2NhbGxiYWNrJywgeyBwcm9jZXNzb3I6ICdmdW5jdGlvbicgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignZmlsZV9waWNrZXJfdmFsaWRhdG9yX2hhbmRsZXInLCB7IHByb2Nlc3NvcjogJ2Z1bmN0aW9uJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdmaWxlX3BpY2tlcl90eXBlcycsIHsgcHJvY2Vzc29yOiAnc3RyaW5nJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd0eXBlYWhlYWRfdXJscycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2FuY2hvcl90b3AnLCB7XG4gICAgICAgIHByb2Nlc3Nvcjogc3RyaW5nT3JGYWxzZVByb2Nlc3NvcixcbiAgICAgICAgZGVmYXVsdDogJyN0b3AnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdhbmNob3JfYm90dG9tJywge1xuICAgICAgICBwcm9jZXNzb3I6IHN0cmluZ09yRmFsc2VQcm9jZXNzb3IsXG4gICAgICAgIGRlZmF1bHQ6ICcjYm90dG9tJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignZHJhZ2dhYmxlX21vZGFsJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3N0YXR1c2JhcicsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2VsZW1lbnRwYXRoJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYnJhbmRpbmcnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdwcm9tb3Rpb24nLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdyZXNpemUnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogdmFsdWUgPT4gdmFsdWUgPT09ICdib3RoJyB8fCBpc0Jvb2xlYW4odmFsdWUpLFxuICAgICAgICBkZWZhdWx0OiAhZ2xvYmFsJDUuZGV2aWNlVHlwZS5pc1RvdWNoKClcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3NpZGViYXJfc2hvdycsIHsgcHJvY2Vzc29yOiAnc3RyaW5nJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdoZWxwX2FjY2Vzc2liaWxpdHknLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBlZGl0b3IuaGFzUGx1Z2luKCdoZWxwJylcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaXNSZWFkT25seSA9IG9wdGlvbiQyKCdyZWFkb25seScpO1xuICAgIGNvbnN0IGdldEhlaWdodE9wdGlvbiA9IG9wdGlvbiQyKCdoZWlnaHQnKTtcbiAgICBjb25zdCBnZXRXaWR0aE9wdGlvbiA9IG9wdGlvbiQyKCd3aWR0aCcpO1xuICAgIGNvbnN0IGdldE1pbldpZHRoT3B0aW9uID0gd3JhcE9wdGlvbmFsKG9wdGlvbiQyKCdtaW5fd2lkdGgnKSk7XG4gICAgY29uc3QgZ2V0TWluSGVpZ2h0T3B0aW9uID0gd3JhcE9wdGlvbmFsKG9wdGlvbiQyKCdtaW5faGVpZ2h0JykpO1xuICAgIGNvbnN0IGdldE1heFdpZHRoT3B0aW9uID0gd3JhcE9wdGlvbmFsKG9wdGlvbiQyKCdtYXhfd2lkdGgnKSk7XG4gICAgY29uc3QgZ2V0TWF4SGVpZ2h0T3B0aW9uID0gd3JhcE9wdGlvbmFsKG9wdGlvbiQyKCdtYXhfaGVpZ2h0JykpO1xuICAgIGNvbnN0IGdldFVzZXJTdHlsZUZvcm1hdHMgPSB3cmFwT3B0aW9uYWwob3B0aW9uJDIoJ3N0eWxlX2Zvcm1hdHMnKSk7XG4gICAgY29uc3Qgc2hvdWxkTWVyZ2VTdHlsZUZvcm1hdHMgPSBvcHRpb24kMignc3R5bGVfZm9ybWF0c19tZXJnZScpO1xuICAgIGNvbnN0IHNob3VsZEF1dG9IaWRlU3R5bGVGb3JtYXRzID0gb3B0aW9uJDIoJ3N0eWxlX2Zvcm1hdHNfYXV0b2hpZGUnKTtcbiAgICBjb25zdCBnZXRDb250ZW50TGFuZ3VhZ2VzID0gb3B0aW9uJDIoJ2NvbnRlbnRfbGFuZ3MnKTtcbiAgICBjb25zdCBnZXRSZW1vdmVkTWVudUl0ZW1zID0gb3B0aW9uJDIoJ3JlbW92ZWRfbWVudWl0ZW1zJyk7XG4gICAgY29uc3QgZ2V0VG9vbGJhck1vZGUgPSBvcHRpb24kMigndG9vbGJhcl9tb2RlJyk7XG4gICAgY29uc3QgZ2V0VG9vbGJhckdyb3VwcyA9IG9wdGlvbiQyKCd0b29sYmFyX2dyb3VwcycpO1xuICAgIGNvbnN0IGdldFRvb2xiYXJMb2NhdGlvbiA9IG9wdGlvbiQyKCd0b29sYmFyX2xvY2F0aW9uJyk7XG4gICAgY29uc3QgZml4ZWRDb250YWluZXJTZWxlY3RvciA9IG9wdGlvbiQyKCdmaXhlZF90b29sYmFyX2NvbnRhaW5lcicpO1xuICAgIGNvbnN0IGZpeGVkVG9vbGJhckNvbnRhaW5lclRhcmdldCA9IG9wdGlvbiQyKCdmaXhlZF90b29sYmFyX2NvbnRhaW5lcl90YXJnZXQnKTtcbiAgICBjb25zdCBpc1Rvb2xiYXJQZXJzaXN0ID0gb3B0aW9uJDIoJ3Rvb2xiYXJfcGVyc2lzdCcpO1xuICAgIGNvbnN0IGdldFN0aWNreVRvb2xiYXJPZmZzZXQgPSBvcHRpb24kMigndG9vbGJhcl9zdGlja3lfb2Zmc2V0Jyk7XG4gICAgY29uc3QgZ2V0TWVudWJhciA9IG9wdGlvbiQyKCdtZW51YmFyJyk7XG4gICAgY29uc3QgZ2V0VG9vbGJhciA9IG9wdGlvbiQyKCd0b29sYmFyJyk7XG4gICAgY29uc3QgZ2V0RmlsZVBpY2tlckNhbGxiYWNrID0gb3B0aW9uJDIoJ2ZpbGVfcGlja2VyX2NhbGxiYWNrJyk7XG4gICAgY29uc3QgZ2V0RmlsZVBpY2tlclZhbGlkYXRvckhhbmRsZXIgPSBvcHRpb24kMignZmlsZV9waWNrZXJfdmFsaWRhdG9yX2hhbmRsZXInKTtcbiAgICBjb25zdCBnZXRGb250U2l6ZUlucHV0RGVmYXVsdFVuaXQgPSBvcHRpb24kMignZm9udF9zaXplX2lucHV0X2RlZmF1bHRfdW5pdCcpO1xuICAgIGNvbnN0IGdldEZpbGVQaWNrZXJUeXBlcyA9IG9wdGlvbiQyKCdmaWxlX3BpY2tlcl90eXBlcycpO1xuICAgIGNvbnN0IHVzZVR5cGVhaGVhZFVybHMgPSBvcHRpb24kMigndHlwZWFoZWFkX3VybHMnKTtcbiAgICBjb25zdCBnZXRBbmNob3JUb3AgPSBvcHRpb24kMignYW5jaG9yX3RvcCcpO1xuICAgIGNvbnN0IGdldEFuY2hvckJvdHRvbSA9IG9wdGlvbiQyKCdhbmNob3JfYm90dG9tJyk7XG4gICAgY29uc3QgaXNEcmFnZ2FibGVNb2RhbCQxID0gb3B0aW9uJDIoJ2RyYWdnYWJsZV9tb2RhbCcpO1xuICAgIGNvbnN0IHVzZVN0YXR1c0JhciA9IG9wdGlvbiQyKCdzdGF0dXNiYXInKTtcbiAgICBjb25zdCB1c2VFbGVtZW50UGF0aCA9IG9wdGlvbiQyKCdlbGVtZW50cGF0aCcpO1xuICAgIGNvbnN0IHVzZUJyYW5kaW5nID0gb3B0aW9uJDIoJ2JyYW5kaW5nJyk7XG4gICAgY29uc3QgZ2V0UmVzaXplID0gb3B0aW9uJDIoJ3Jlc2l6ZScpO1xuICAgIGNvbnN0IGdldFBhc3RlQXNUZXh0ID0gb3B0aW9uJDIoJ3Bhc3RlX2FzX3RleHQnKTtcbiAgICBjb25zdCBnZXRTaWRlYmFyU2hvdyA9IG9wdGlvbiQyKCdzaWRlYmFyX3Nob3cnKTtcbiAgICBjb25zdCBwcm9tb3Rpb25FbmFibGVkID0gb3B0aW9uJDIoJ3Byb21vdGlvbicpO1xuICAgIGNvbnN0IHVzZUhlbHBBY2Nlc3NpYmlsaXR5ID0gb3B0aW9uJDIoJ2hlbHBfYWNjZXNzaWJpbGl0eScpO1xuICAgIGNvbnN0IGlzU2tpbkRpc2FibGVkID0gZWRpdG9yID0+IGVkaXRvci5vcHRpb25zLmdldCgnc2tpbicpID09PSBmYWxzZTtcbiAgICBjb25zdCBpc01lbnViYXJFbmFibGVkID0gZWRpdG9yID0+IGVkaXRvci5vcHRpb25zLmdldCgnbWVudWJhcicpICE9PSBmYWxzZTtcbiAgICBjb25zdCBnZXRTa2luVXJsID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHNraW5VcmwgPSBlZGl0b3Iub3B0aW9ucy5nZXQoJ3NraW5fdXJsJyk7XG4gICAgICBpZiAoaXNTa2luRGlzYWJsZWQoZWRpdG9yKSkge1xuICAgICAgICByZXR1cm4gc2tpblVybDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChza2luVXJsKSB7XG4gICAgICAgICAgcmV0dXJuIGVkaXRvci5kb2N1bWVudEJhc2VVUkkudG9BYnNvbHV0ZShza2luVXJsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBza2luID0gZWRpdG9yLm9wdGlvbnMuZ2V0KCdza2luJyk7XG4gICAgICAgICAgcmV0dXJuIGdsb2JhbCQ2LmJhc2VVUkwgKyAnL3NraW5zL3VpLycgKyBza2luO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRMaW5lSGVpZ2h0Rm9ybWF0cyA9IGVkaXRvciA9PiBlZGl0b3Iub3B0aW9ucy5nZXQoJ2xpbmVfaGVpZ2h0X2Zvcm1hdHMnKS5zcGxpdCgnICcpO1xuICAgIGNvbnN0IGlzVG9vbGJhckVuYWJsZWQgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgdG9vbGJhciA9IGdldFRvb2xiYXIoZWRpdG9yKTtcbiAgICAgIGNvbnN0IGlzVG9vbGJhclN0cmluZyA9IGlzU3RyaW5nKHRvb2xiYXIpO1xuICAgICAgY29uc3QgaXNUb29sYmFyT2JqZWN0QXJyYXkgPSBpc0FycmF5KHRvb2xiYXIpICYmIHRvb2xiYXIubGVuZ3RoID4gMDtcbiAgICAgIHJldHVybiAhaXNNdWx0aXBsZVRvb2xiYXJzKGVkaXRvcikgJiYgKGlzVG9vbGJhck9iamVjdEFycmF5IHx8IGlzVG9vbGJhclN0cmluZyB8fCB0b29sYmFyID09PSB0cnVlKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldE11bHRpcGxlVG9vbGJhcnNPcHRpb24gPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgdG9vbGJhcnMgPSByYW5nZSQyKDksIG51bSA9PiBlZGl0b3Iub3B0aW9ucy5nZXQoJ3Rvb2xiYXInICsgKG51bSArIDEpKSk7XG4gICAgICBjb25zdCB0b29sYmFyQXJyYXkgPSBmaWx0ZXIkMih0b29sYmFycywgaXNTdHJpbmcpO1xuICAgICAgcmV0dXJuIHNvbWVJZih0b29sYmFyQXJyYXkubGVuZ3RoID4gMCwgdG9vbGJhckFycmF5KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzTXVsdGlwbGVUb29sYmFycyA9IGVkaXRvciA9PiBnZXRNdWx0aXBsZVRvb2xiYXJzT3B0aW9uKGVkaXRvcikuZm9sZCgoKSA9PiB7XG4gICAgICBjb25zdCB0b29sYmFyID0gZ2V0VG9vbGJhcihlZGl0b3IpO1xuICAgICAgcmV0dXJuIGlzQXJyYXlPZih0b29sYmFyLCBpc1N0cmluZykgJiYgdG9vbGJhci5sZW5ndGggPiAwO1xuICAgIH0sIGFsd2F5cyk7XG4gICAgY29uc3QgaXNUb29sYmFyTG9jYXRpb25Cb3R0b20gPSBlZGl0b3IgPT4gZ2V0VG9vbGJhckxvY2F0aW9uKGVkaXRvcikgPT09IFRvb2xiYXJMb2NhdGlvbiQxLmJvdHRvbTtcbiAgICBjb25zdCBmaXhlZENvbnRhaW5lclRhcmdldCA9IGVkaXRvciA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBpZiAoIWVkaXRvci5pbmxpbmUpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gKF9hID0gZml4ZWRDb250YWluZXJTZWxlY3RvcihlZGl0b3IpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgIGlmIChzZWxlY3Rvci5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBkZXNjZW5kYW50KGJvZHkoKSwgc2VsZWN0b3IpO1xuICAgICAgfVxuICAgICAgY29uc3QgZWxlbWVudCA9IGZpeGVkVG9vbGJhckNvbnRhaW5lclRhcmdldChlZGl0b3IpO1xuICAgICAgaWYgKGlzTm9uTnVsbGFibGUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoU3VnYXJFbGVtZW50LmZyb21Eb20oZWxlbWVudCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IHVzZUZpeGVkQ29udGFpbmVyID0gZWRpdG9yID0+IGVkaXRvci5pbmxpbmUgJiYgZml4ZWRDb250YWluZXJUYXJnZXQoZWRpdG9yKS5pc1NvbWUoKTtcbiAgICBjb25zdCBnZXRVaUNvbnRhaW5lciA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBmaXhlZENvbnRhaW5lciA9IGZpeGVkQ29udGFpbmVyVGFyZ2V0KGVkaXRvcik7XG4gICAgICByZXR1cm4gZml4ZWRDb250YWluZXIuZ2V0T3JUaHVuaygoKSA9PiBnZXRDb250ZW50Q29udGFpbmVyKGdldFJvb3ROb2RlKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRFbGVtZW50KCkpKSkpO1xuICAgIH07XG4gICAgY29uc3QgaXNEaXN0cmFjdGlvbkZyZWUgPSBlZGl0b3IgPT4gZWRpdG9yLmlubGluZSAmJiAhaXNNZW51YmFyRW5hYmxlZChlZGl0b3IpICYmICFpc1Rvb2xiYXJFbmFibGVkKGVkaXRvcikgJiYgIWlzTXVsdGlwbGVUb29sYmFycyhlZGl0b3IpO1xuICAgIGNvbnN0IGlzU3RpY2t5VG9vbGJhciA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBpc1N0aWNreVRvb2xiYXIgPSBlZGl0b3Iub3B0aW9ucy5nZXQoJ3Rvb2xiYXJfc3RpY2t5Jyk7XG4gICAgICByZXR1cm4gKGlzU3RpY2t5VG9vbGJhciB8fCBlZGl0b3IuaW5saW5lKSAmJiAhdXNlRml4ZWRDb250YWluZXIoZWRpdG9yKSAmJiAhaXNEaXN0cmFjdGlvbkZyZWUoZWRpdG9yKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzU3BsaXRVaU1vZGUgPSBlZGl0b3IgPT4gIXVzZUZpeGVkQ29udGFpbmVyKGVkaXRvcikgJiYgZWRpdG9yLm9wdGlvbnMuZ2V0KCd1aV9tb2RlJykgPT09ICdzcGxpdCc7XG4gICAgY29uc3QgZ2V0TWVudXMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgbWVudSA9IGVkaXRvci5vcHRpb25zLmdldCgnbWVudScpO1xuICAgICAgcmV0dXJuIG1hcCQxKG1lbnUsIG1lbnUgPT4gKHtcbiAgICAgICAgLi4ubWVudSxcbiAgICAgICAgaXRlbXM6IG1lbnUuaXRlbXNcbiAgICAgIH0pKTtcbiAgICB9O1xuXG4gICAgdmFyIE9wdGlvbnMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgZ2V0IFRvb2xiYXJNb2RlICgpIHsgcmV0dXJuIFRvb2xiYXJNb2RlJDE7IH0sXG4gICAgICAgIGdldCBUb29sYmFyTG9jYXRpb24gKCkgeyByZXR1cm4gVG9vbGJhckxvY2F0aW9uJDE7IH0sXG4gICAgICAgIHJlZ2lzdGVyOiByZWdpc3RlciRlLFxuICAgICAgICBnZXRTa2luVXJsOiBnZXRTa2luVXJsLFxuICAgICAgICBpc1JlYWRPbmx5OiBpc1JlYWRPbmx5LFxuICAgICAgICBpc1NraW5EaXNhYmxlZDogaXNTa2luRGlzYWJsZWQsXG4gICAgICAgIGdldEhlaWdodE9wdGlvbjogZ2V0SGVpZ2h0T3B0aW9uLFxuICAgICAgICBnZXRXaWR0aE9wdGlvbjogZ2V0V2lkdGhPcHRpb24sXG4gICAgICAgIGdldE1pbldpZHRoT3B0aW9uOiBnZXRNaW5XaWR0aE9wdGlvbixcbiAgICAgICAgZ2V0TWluSGVpZ2h0T3B0aW9uOiBnZXRNaW5IZWlnaHRPcHRpb24sXG4gICAgICAgIGdldE1heFdpZHRoT3B0aW9uOiBnZXRNYXhXaWR0aE9wdGlvbixcbiAgICAgICAgZ2V0TWF4SGVpZ2h0T3B0aW9uOiBnZXRNYXhIZWlnaHRPcHRpb24sXG4gICAgICAgIGdldFVzZXJTdHlsZUZvcm1hdHM6IGdldFVzZXJTdHlsZUZvcm1hdHMsXG4gICAgICAgIHNob3VsZE1lcmdlU3R5bGVGb3JtYXRzOiBzaG91bGRNZXJnZVN0eWxlRm9ybWF0cyxcbiAgICAgICAgc2hvdWxkQXV0b0hpZGVTdHlsZUZvcm1hdHM6IHNob3VsZEF1dG9IaWRlU3R5bGVGb3JtYXRzLFxuICAgICAgICBnZXRMaW5lSGVpZ2h0Rm9ybWF0czogZ2V0TGluZUhlaWdodEZvcm1hdHMsXG4gICAgICAgIGdldENvbnRlbnRMYW5ndWFnZXM6IGdldENvbnRlbnRMYW5ndWFnZXMsXG4gICAgICAgIGdldFJlbW92ZWRNZW51SXRlbXM6IGdldFJlbW92ZWRNZW51SXRlbXMsXG4gICAgICAgIGlzTWVudWJhckVuYWJsZWQ6IGlzTWVudWJhckVuYWJsZWQsXG4gICAgICAgIGlzTXVsdGlwbGVUb29sYmFyczogaXNNdWx0aXBsZVRvb2xiYXJzLFxuICAgICAgICBpc1Rvb2xiYXJFbmFibGVkOiBpc1Rvb2xiYXJFbmFibGVkLFxuICAgICAgICBpc1Rvb2xiYXJQZXJzaXN0OiBpc1Rvb2xiYXJQZXJzaXN0LFxuICAgICAgICBnZXRNdWx0aXBsZVRvb2xiYXJzT3B0aW9uOiBnZXRNdWx0aXBsZVRvb2xiYXJzT3B0aW9uLFxuICAgICAgICBnZXRVaUNvbnRhaW5lcjogZ2V0VWlDb250YWluZXIsXG4gICAgICAgIHVzZUZpeGVkQ29udGFpbmVyOiB1c2VGaXhlZENvbnRhaW5lcixcbiAgICAgICAgaXNTcGxpdFVpTW9kZTogaXNTcGxpdFVpTW9kZSxcbiAgICAgICAgZ2V0VG9vbGJhck1vZGU6IGdldFRvb2xiYXJNb2RlLFxuICAgICAgICBpc0RyYWdnYWJsZU1vZGFsOiBpc0RyYWdnYWJsZU1vZGFsJDEsXG4gICAgICAgIGlzRGlzdHJhY3Rpb25GcmVlOiBpc0Rpc3RyYWN0aW9uRnJlZSxcbiAgICAgICAgaXNTdGlja3lUb29sYmFyOiBpc1N0aWNreVRvb2xiYXIsXG4gICAgICAgIGdldFN0aWNreVRvb2xiYXJPZmZzZXQ6IGdldFN0aWNreVRvb2xiYXJPZmZzZXQsXG4gICAgICAgIGdldFRvb2xiYXJMb2NhdGlvbjogZ2V0VG9vbGJhckxvY2F0aW9uLFxuICAgICAgICBpc1Rvb2xiYXJMb2NhdGlvbkJvdHRvbTogaXNUb29sYmFyTG9jYXRpb25Cb3R0b20sXG4gICAgICAgIGdldFRvb2xiYXJHcm91cHM6IGdldFRvb2xiYXJHcm91cHMsXG4gICAgICAgIGdldE1lbnVzOiBnZXRNZW51cyxcbiAgICAgICAgZ2V0TWVudWJhcjogZ2V0TWVudWJhcixcbiAgICAgICAgZ2V0VG9vbGJhcjogZ2V0VG9vbGJhcixcbiAgICAgICAgZ2V0RmlsZVBpY2tlckNhbGxiYWNrOiBnZXRGaWxlUGlja2VyQ2FsbGJhY2ssXG4gICAgICAgIGdldEZpbGVQaWNrZXJUeXBlczogZ2V0RmlsZVBpY2tlclR5cGVzLFxuICAgICAgICB1c2VUeXBlYWhlYWRVcmxzOiB1c2VUeXBlYWhlYWRVcmxzLFxuICAgICAgICBnZXRBbmNob3JUb3A6IGdldEFuY2hvclRvcCxcbiAgICAgICAgZ2V0QW5jaG9yQm90dG9tOiBnZXRBbmNob3JCb3R0b20sXG4gICAgICAgIGdldEZpbGVQaWNrZXJWYWxpZGF0b3JIYW5kbGVyOiBnZXRGaWxlUGlja2VyVmFsaWRhdG9ySGFuZGxlcixcbiAgICAgICAgZ2V0Rm9udFNpemVJbnB1dERlZmF1bHRVbml0OiBnZXRGb250U2l6ZUlucHV0RGVmYXVsdFVuaXQsXG4gICAgICAgIHVzZVN0YXR1c0JhcjogdXNlU3RhdHVzQmFyLFxuICAgICAgICB1c2VFbGVtZW50UGF0aDogdXNlRWxlbWVudFBhdGgsXG4gICAgICAgIHByb21vdGlvbkVuYWJsZWQ6IHByb21vdGlvbkVuYWJsZWQsXG4gICAgICAgIHVzZUJyYW5kaW5nOiB1c2VCcmFuZGluZyxcbiAgICAgICAgZ2V0UmVzaXplOiBnZXRSZXNpemUsXG4gICAgICAgIGdldFBhc3RlQXNUZXh0OiBnZXRQYXN0ZUFzVGV4dCxcbiAgICAgICAgZ2V0U2lkZWJhclNob3c6IGdldFNpZGViYXJTaG93LFxuICAgICAgICB1c2VIZWxwQWNjZXNzaWJpbGl0eTogdXNlSGVscEFjY2Vzc2liaWxpdHlcbiAgICB9KTtcblxuICAgIGNvbnN0IGF1dG9jb21wbGV0ZVNlbGVjdG9yID0gJ1tkYXRhLW1jZS1hdXRvY29tcGxldGVyXSc7XG4gICAgY29uc3QgZGV0ZWN0JDEgPSBlbG0gPT4gY2xvc2VzdCQxKGVsbSwgYXV0b2NvbXBsZXRlU2VsZWN0b3IpO1xuICAgIGNvbnN0IGZpbmRJbiA9IGVsbSA9PiBkZXNjZW5kYW50KGVsbSwgYXV0b2NvbXBsZXRlU2VsZWN0b3IpO1xuXG4gICAgY29uc3Qgc2V0dXAkZSA9IChhcGksIGVkaXRvcikgPT4ge1xuICAgICAgY29uc3QgcmVkaXJlY3RLZXlUb0l0ZW0gPSAoaXRlbSwgZSkgPT4ge1xuICAgICAgICBlbWl0V2l0aChpdGVtLCBrZXlkb3duKCksIHsgcmF3OiBlIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldEl0ZW0gPSAoKSA9PiBhcGkuZ2V0TWVudSgpLmJpbmQoSGlnaGxpZ2h0aW5nLmdldEhpZ2hsaWdodGVkKTtcbiAgICAgIGVkaXRvci5vbigna2V5ZG93bicsIGUgPT4ge1xuICAgICAgICBjb25zdCBrZXlDb2RlID0gZS53aGljaDtcbiAgICAgICAgaWYgKCFhcGkuaXNBY3RpdmUoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXBpLmlzTWVudU9wZW4oKSkge1xuICAgICAgICAgIGlmIChrZXlDb2RlID09PSAxMykge1xuICAgICAgICAgICAgZ2V0SXRlbSgpLmVhY2goZW1pdEV4ZWN1dGUpO1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoa2V5Q29kZSA9PT0gNDApIHtcbiAgICAgICAgICAgIGdldEl0ZW0oKS5mb2xkKCgpID0+IHtcbiAgICAgICAgICAgICAgYXBpLmdldE1lbnUoKS5lYWNoKEhpZ2hsaWdodGluZy5oaWdobGlnaHRGaXJzdCk7XG4gICAgICAgICAgICB9LCBpdGVtID0+IHtcbiAgICAgICAgICAgICAgcmVkaXJlY3RLZXlUb0l0ZW0oaXRlbSwgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChrZXlDb2RlID09PSAzNyB8fCBrZXlDb2RlID09PSAzOCB8fCBrZXlDb2RlID09PSAzOSkge1xuICAgICAgICAgICAgZ2V0SXRlbSgpLmVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgIHJlZGlyZWN0S2V5VG9JdGVtKGl0ZW0sIGUpO1xuICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGtleUNvZGUgPT09IDEzIHx8IGtleUNvZGUgPT09IDM4IHx8IGtleUNvZGUgPT09IDQwKSB7XG4gICAgICAgICAgICBhcGkuY2FuY2VsSWZOZWNlc3NhcnkoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdOb2RlQ2hhbmdlJywgZSA9PiB7XG4gICAgICAgIGlmIChhcGkuaXNBY3RpdmUoKSAmJiAhYXBpLmlzUHJvY2Vzc2luZ0FjdGlvbigpICYmIGRldGVjdCQxKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGUuZWxlbWVudCkpLmlzTm9uZSgpKSB7XG4gICAgICAgICAgYXBpLmNhbmNlbElmTmVjZXNzYXJ5KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgQXV0b2NvbXBsZXRlckVkaXRvckV2ZW50cyA9IHsgc2V0dXA6IHNldHVwJGUgfTtcblxuICAgIHZhciBJdGVtUmVzcG9uc2U7XG4gICAgKGZ1bmN0aW9uIChJdGVtUmVzcG9uc2UpIHtcbiAgICAgIEl0ZW1SZXNwb25zZVtJdGVtUmVzcG9uc2VbJ0NMT1NFX09OX0VYRUNVVEUnXSA9IDBdID0gJ0NMT1NFX09OX0VYRUNVVEUnO1xuICAgICAgSXRlbVJlc3BvbnNlW0l0ZW1SZXNwb25zZVsnQlVCQkxFX1RPX1NBTkRCT1gnXSA9IDFdID0gJ0JVQkJMRV9UT19TQU5EQk9YJztcbiAgICB9KEl0ZW1SZXNwb25zZSB8fCAoSXRlbVJlc3BvbnNlID0ge30pKSk7XG4gICAgdmFyIEl0ZW1SZXNwb25zZSQxID0gSXRlbVJlc3BvbnNlO1xuXG4gICAgY29uc3QgbmF2Q2xhc3MgPSAndG94LW1lbnUtbmF2X19qcyc7XG4gICAgY29uc3Qgc2VsZWN0YWJsZUNsYXNzID0gJ3RveC1jb2xsZWN0aW9uX19pdGVtJztcbiAgICBjb25zdCBjb2xvckNsYXNzID0gJ3RveC1zd2F0Y2gnO1xuICAgIGNvbnN0IHByZXNldENsYXNzZXMgPSB7XG4gICAgICBub3JtYWw6IG5hdkNsYXNzLFxuICAgICAgY29sb3I6IGNvbG9yQ2xhc3NcbiAgICB9O1xuICAgIGNvbnN0IHRpY2tlZENsYXNzID0gJ3RveC1jb2xsZWN0aW9uX19pdGVtLS1lbmFibGVkJztcbiAgICBjb25zdCBncm91cEhlYWRpbmdDbGFzcyA9ICd0b3gtY29sbGVjdGlvbl9fZ3JvdXAtaGVhZGluZyc7XG4gICAgY29uc3QgaWNvbkNsYXNzID0gJ3RveC1jb2xsZWN0aW9uX19pdGVtLWljb24nO1xuICAgIGNvbnN0IHRleHRDbGFzcyA9ICd0b3gtY29sbGVjdGlvbl9faXRlbS1sYWJlbCc7XG4gICAgY29uc3QgYWNjZXNzb3J5Q2xhc3MgPSAndG94LWNvbGxlY3Rpb25fX2l0ZW0tYWNjZXNzb3J5JztcbiAgICBjb25zdCBjYXJldENsYXNzID0gJ3RveC1jb2xsZWN0aW9uX19pdGVtLWNhcmV0JztcbiAgICBjb25zdCBjaGVja21hcmtDbGFzcyA9ICd0b3gtY29sbGVjdGlvbl9faXRlbS1jaGVja21hcmsnO1xuICAgIGNvbnN0IGFjdGl2ZUNsYXNzID0gJ3RveC1jb2xsZWN0aW9uX19pdGVtLS1hY3RpdmUnO1xuICAgIGNvbnN0IGNvbnRhaW5lckNsYXNzID0gJ3RveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lcic7XG4gICAgY29uc3QgY29udGFpbmVyQ29sdW1uQ2xhc3MgPSAndG94LWNvbGxlY3Rpb25fX2l0ZW0tY29udGFpbmVyLS1jb2x1bW4nO1xuICAgIGNvbnN0IGNvbnRhaW5lclJvd0NsYXNzID0gJ3RveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tcm93JztcbiAgICBjb25zdCBjb250YWluZXJBbGlnblJpZ2h0Q2xhc3MgPSAndG94LWNvbGxlY3Rpb25fX2l0ZW0tY29udGFpbmVyLS1hbGlnbi1yaWdodCc7XG4gICAgY29uc3QgY29udGFpbmVyQWxpZ25MZWZ0Q2xhc3MgPSAndG94LWNvbGxlY3Rpb25fX2l0ZW0tY29udGFpbmVyLS1hbGlnbi1sZWZ0JztcbiAgICBjb25zdCBjb250YWluZXJWYWxpZ25Ub3BDbGFzcyA9ICd0b3gtY29sbGVjdGlvbl9faXRlbS1jb250YWluZXItLXZhbGlnbi10b3AnO1xuICAgIGNvbnN0IGNvbnRhaW5lclZhbGlnbk1pZGRsZUNsYXNzID0gJ3RveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tdmFsaWduLW1pZGRsZSc7XG4gICAgY29uc3QgY29udGFpbmVyVmFsaWduQm90dG9tQ2xhc3MgPSAndG94LWNvbGxlY3Rpb25fX2l0ZW0tY29udGFpbmVyLS12YWxpZ24tYm90dG9tJztcbiAgICBjb25zdCBjbGFzc0ZvclByZXNldCA9IHByZXNldHMgPT4gZ2V0JGcocHJlc2V0Q2xhc3NlcywgcHJlc2V0cykuZ2V0T3IobmF2Q2xhc3MpO1xuXG4gICAgY29uc3QgZm9yTWVudSA9IHByZXNldHMgPT4ge1xuICAgICAgaWYgKHByZXNldHMgPT09ICdjb2xvcicpIHtcbiAgICAgICAgcmV0dXJuICd0b3gtc3dhdGNoZXMnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICd0b3gtbWVudSc7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjbGFzc2VzID0gcHJlc2V0cyA9PiAoe1xuICAgICAgYmFja2dyb3VuZE1lbnU6ICd0b3gtYmFja2dyb3VuZC1tZW51JyxcbiAgICAgIHNlbGVjdGVkTWVudTogJ3RveC1zZWxlY3RlZC1tZW51JyxcbiAgICAgIHNlbGVjdGVkSXRlbTogJ3RveC1jb2xsZWN0aW9uX19pdGVtLS1hY3RpdmUnLFxuICAgICAgaGFzSWNvbnM6ICd0b3gtbWVudS0taGFzLWljb25zJyxcbiAgICAgIG1lbnU6IGZvck1lbnUocHJlc2V0cyksXG4gICAgICB0aWVyZWRNZW51OiAndG94LXRpZXJlZC1tZW51J1xuICAgIH0pO1xuXG4gICAgY29uc3QgbWFya2VycyA9IHByZXNldHMgPT4ge1xuICAgICAgY29uc3QgbWVudUNsYXNzZXMgPSBjbGFzc2VzKHByZXNldHMpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmFja2dyb3VuZE1lbnU6IG1lbnVDbGFzc2VzLmJhY2tncm91bmRNZW51LFxuICAgICAgICBzZWxlY3RlZE1lbnU6IG1lbnVDbGFzc2VzLnNlbGVjdGVkTWVudSxcbiAgICAgICAgbWVudTogbWVudUNsYXNzZXMubWVudSxcbiAgICAgICAgc2VsZWN0ZWRJdGVtOiBtZW51Q2xhc3Nlcy5zZWxlY3RlZEl0ZW0sXG4gICAgICAgIGl0ZW06IGNsYXNzRm9yUHJlc2V0KHByZXNldHMpXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZG9tJDEgPSAoaGFzSWNvbnMsIGNvbHVtbnMsIHByZXNldHMpID0+IHtcbiAgICAgIGNvbnN0IG1lbnVDbGFzc2VzID0gY2xhc3NlcyhwcmVzZXRzKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IGZsYXR0ZW4oW1xuICAgICAgICAgIFtcbiAgICAgICAgICAgIG1lbnVDbGFzc2VzLm1lbnUsXG4gICAgICAgICAgICBgdG94LW1lbnUtJHsgY29sdW1ucyB9LWNvbHVtbmBcbiAgICAgICAgICBdLFxuICAgICAgICAgIGhhc0ljb25zID8gW21lbnVDbGFzc2VzLmhhc0ljb25zXSA6IFtdXG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgY29tcG9uZW50cyA9IFtNZW51LnBhcnRzLml0ZW1zKHt9KV07XG4gICAgY29uc3QgcGFydCA9IChoYXNJY29ucywgY29sdW1ucywgcHJlc2V0cykgPT4ge1xuICAgICAgY29uc3QgbWVudUNsYXNzZXMgPSBjbGFzc2VzKHByZXNldHMpO1xuICAgICAgY29uc3QgZCA9IHtcbiAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgY2xhc3NlczogZmxhdHRlbihbW21lbnVDbGFzc2VzLnRpZXJlZE1lbnVdXSlcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IGQsXG4gICAgICAgIG1hcmtlcnM6IG1hcmtlcnMocHJlc2V0cylcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHNjaGVtYSRsID0gY29uc3RhbnQkMShbXG4gICAgICBvcHRpb24kMygnZGF0YScpLFxuICAgICAgZGVmYXVsdGVkKCdpbnB1dEF0dHJpYnV0ZXMnLCB7fSksXG4gICAgICBkZWZhdWx0ZWQoJ2lucHV0U3R5bGVzJywge30pLFxuICAgICAgZGVmYXVsdGVkKCd0YWcnLCAnaW5wdXQnKSxcbiAgICAgIGRlZmF1bHRlZCgnaW5wdXRDbGFzc2VzJywgW10pLFxuICAgICAgb25IYW5kbGVyKCdvblNldFZhbHVlJyksXG4gICAgICBkZWZhdWx0ZWQoJ3N0eWxlcycsIHt9KSxcbiAgICAgIGRlZmF1bHRlZCgnZXZlbnRPcmRlcicsIHt9KSxcbiAgICAgIGZpZWxkKCdpbnB1dEJlaGF2aW91cnMnLCBbXG4gICAgICAgIFJlcHJlc2VudGluZyxcbiAgICAgICAgRm9jdXNpbmdcbiAgICAgIF0pLFxuICAgICAgZGVmYXVsdGVkKCdzZWxlY3RPbkZvY3VzJywgdHJ1ZSlcbiAgICBdKTtcbiAgICBjb25zdCBmb2N1c0JlaGF2aW91cnMgPSBkZXRhaWwgPT4gZGVyaXZlJDEoW0ZvY3VzaW5nLmNvbmZpZyh7XG4gICAgICAgIG9uRm9jdXM6ICFkZXRhaWwuc2VsZWN0T25Gb2N1cyA/IG5vb3AgOiBjb21wb25lbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IGlucHV0ID0gY29tcG9uZW50LmVsZW1lbnQ7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXQkNihpbnB1dCk7XG4gICAgICAgICAgaW5wdXQuZG9tLnNldFNlbGVjdGlvblJhbmdlKDAsIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgIH0pXSk7XG4gICAgY29uc3QgYmVoYXZpb3VycyA9IGRldGFpbCA9PiAoe1xuICAgICAgLi4uZm9jdXNCZWhhdmlvdXJzKGRldGFpbCksXG4gICAgICAuLi5hdWdtZW50KGRldGFpbC5pbnB1dEJlaGF2aW91cnMsIFtSZXByZXNlbnRpbmcuY29uZmlnKHtcbiAgICAgICAgICBzdG9yZToge1xuICAgICAgICAgICAgbW9kZTogJ21hbnVhbCcsXG4gICAgICAgICAgICAuLi5kZXRhaWwuZGF0YS5tYXAoZGF0YSA9PiAoeyBpbml0aWFsVmFsdWU6IGRhdGEgfSkpLmdldE9yKHt9KSxcbiAgICAgICAgICAgIGdldFZhbHVlOiBpbnB1dCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXQkNihpbnB1dC5lbGVtZW50KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRWYWx1ZTogKGlucHV0LCBkYXRhKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBnZXQkNihpbnB1dC5lbGVtZW50KTtcbiAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgIT09IGRhdGEpIHtcbiAgICAgICAgICAgICAgICBzZXQkNShpbnB1dC5lbGVtZW50LCBkYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25TZXRWYWx1ZTogZGV0YWlsLm9uU2V0VmFsdWVcbiAgICAgICAgfSldKVxuICAgIH0pO1xuICAgIGNvbnN0IGRvbSA9IGRldGFpbCA9PiAoe1xuICAgICAgdGFnOiBkZXRhaWwudGFnLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIC4uLmRldGFpbC5pbnB1dEF0dHJpYnV0ZXNcbiAgICAgIH0sXG4gICAgICBzdHlsZXM6IGRldGFpbC5pbnB1dFN0eWxlcyxcbiAgICAgIGNsYXNzZXM6IGRldGFpbC5pbnB1dENsYXNzZXNcbiAgICB9KTtcblxuICAgIGNvbnN0IGZhY3RvcnkkbCA9IChkZXRhaWwsIF9zcGVjKSA9PiAoe1xuICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgZG9tOiBkb20oZGV0YWlsKSxcbiAgICAgIGNvbXBvbmVudHM6IFtdLFxuICAgICAgYmVoYXZpb3VyczogYmVoYXZpb3VycyhkZXRhaWwpLFxuICAgICAgZXZlbnRPcmRlcjogZGV0YWlsLmV2ZW50T3JkZXJcbiAgICB9KTtcbiAgICBjb25zdCBJbnB1dCA9IHNpbmdsZSh7XG4gICAgICBuYW1lOiAnSW5wdXQnLFxuICAgICAgY29uZmlnRmllbGRzOiBzY2hlbWEkbCgpLFxuICAgICAgZmFjdG9yeTogZmFjdG9yeSRsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZWZldGNoVHJpZ2dlckV2ZW50ID0gZ2VuZXJhdGUkNigncmVmZXRjaC10cmlnZ2VyLWV2ZW50Jyk7XG4gICAgY29uc3QgcmVkaXJlY3RNZW51SXRlbUludGVyYWN0aW9uRXZlbnQgPSBnZW5lcmF0ZSQ2KCdyZWRpcmVjdC1tZW51LWl0ZW0taW50ZXJhY3Rpb24nKTtcblxuICAgIGNvbnN0IG1lbnVTZWFyY2hlckNsYXNzID0gJ3RveC1tZW51X19zZWFyY2hlcic7XG4gICAgY29uc3QgZmluZFdpdGhpblNhbmRib3ggPSBzYW5kYm94Q29tcCA9PiB7XG4gICAgICByZXR1cm4gZGVzY2VuZGFudChzYW5kYm94Q29tcC5lbGVtZW50LCBgLiR7IG1lbnVTZWFyY2hlckNsYXNzIH1gKS5iaW5kKGlucHV0RWxlbSA9PiBzYW5kYm94Q29tcC5nZXRTeXN0ZW0oKS5nZXRCeURvbShpbnB1dEVsZW0pLnRvT3B0aW9uYWwoKSk7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kV2l0aGluTWVudSA9IGZpbmRXaXRoaW5TYW5kYm94O1xuICAgIGNvbnN0IHJlc3RvcmVTdGF0ZSA9IChpbnB1dENvbXAsIHNlYXJjaGVyU3RhdGUpID0+IHtcbiAgICAgIFJlcHJlc2VudGluZy5zZXRWYWx1ZShpbnB1dENvbXAsIHNlYXJjaGVyU3RhdGUuZmV0Y2hQYXR0ZXJuKTtcbiAgICAgIGlucHV0Q29tcC5lbGVtZW50LmRvbS5zZWxlY3Rpb25TdGFydCA9IHNlYXJjaGVyU3RhdGUuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICBpbnB1dENvbXAuZWxlbWVudC5kb20uc2VsZWN0aW9uRW5kID0gc2VhcmNoZXJTdGF0ZS5zZWxlY3Rpb25FbmQ7XG4gICAgfTtcbiAgICBjb25zdCBzYXZlU3RhdGUgPSBpbnB1dENvbXAgPT4ge1xuICAgICAgY29uc3QgZmV0Y2hQYXR0ZXJuID0gUmVwcmVzZW50aW5nLmdldFZhbHVlKGlucHV0Q29tcCk7XG4gICAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IGlucHV0Q29tcC5lbGVtZW50LmRvbS5zZWxlY3Rpb25TdGFydDtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbkVuZCA9IGlucHV0Q29tcC5lbGVtZW50LmRvbS5zZWxlY3Rpb25FbmQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmZXRjaFBhdHRlcm4sXG4gICAgICAgIHNlbGVjdGlvblN0YXJ0LFxuICAgICAgICBzZWxlY3Rpb25FbmRcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBzZXRBY3RpdmVEZXNjZW5kYW50ID0gKGlucHV0Q29tcCwgYWN0aXZlKSA9PiB7XG4gICAgICBnZXRPcHQoYWN0aXZlLmVsZW1lbnQsICdpZCcpLmVhY2goaWQgPT4gc2V0JDkoaW5wdXRDb21wLmVsZW1lbnQsICdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLCBpZCkpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyTWVudVNlYXJjaGVyID0gc3BlYyA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVCeUJyb3dzZXIgPSAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgc2UuY3V0KCk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaGFuZGxlQnlIaWdobGlnaHRlZEl0ZW0gPSAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgY29uc3QgZXZlbnREYXRhID0ge1xuICAgICAgICAgIGludGVyYWN0aW9uRXZlbnQ6IHNlLmV2ZW50LFxuICAgICAgICAgIGV2ZW50VHlwZTogc2UuZXZlbnQucmF3LnR5cGVcbiAgICAgICAgfTtcbiAgICAgICAgZW1pdFdpdGgoY29tcCwgcmVkaXJlY3RNZW51SXRlbUludGVyYWN0aW9uRXZlbnQsIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHRydWUpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGN1c3RvbVNlYXJjaGVyRXZlbnRzTmFtZSA9ICdzZWFyY2hlci1ldmVudHMnO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbc2VsZWN0YWJsZUNsYXNzXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbSW5wdXQuc2tldGNoKHtcbiAgICAgICAgICAgIGlucHV0Q2xhc3NlczogW1xuICAgICAgICAgICAgICBtZW51U2VhcmNoZXJDbGFzcyxcbiAgICAgICAgICAgICAgJ3RveC10ZXh0ZmllbGQnXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaW5wdXRBdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgIC4uLnNwZWMucGxhY2Vob2xkZXIubWFwKHBsYWNlaG9sZGVyID0+ICh7IHBsYWNlaG9sZGVyOiBzcGVjLmkxOG4ocGxhY2Vob2xkZXIpIH0pKS5nZXRPcih7fSksXG4gICAgICAgICAgICAgICd0eXBlJzogJ3NlYXJjaCcsXG4gICAgICAgICAgICAgICdhcmlhLWF1dG9jb21wbGV0ZSc6ICdsaXN0J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlucHV0QmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgICAgICBjb25maWcoY3VzdG9tU2VhcmNoZXJFdmVudHNOYW1lLCBbXG4gICAgICAgICAgICAgICAgcnVuJDEoaW5wdXQoKSwgaW5wdXRDb21wID0+IHtcbiAgICAgICAgICAgICAgICAgIGVtaXQoaW5wdXRDb21wLCByZWZldGNoVHJpZ2dlckV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBydW4kMShrZXlkb3duKCksIChpbnB1dENvbXAsIHNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoc2UuZXZlbnQucmF3LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgc2Uuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBLZXlpbmcuY29uZmlnKHtcbiAgICAgICAgICAgICAgICBtb2RlOiAnc3BlY2lhbCcsXG4gICAgICAgICAgICAgICAgb25MZWZ0OiBoYW5kbGVCeUJyb3dzZXIsXG4gICAgICAgICAgICAgICAgb25SaWdodDogaGFuZGxlQnlCcm93c2VyLFxuICAgICAgICAgICAgICAgIG9uU3BhY2U6IGhhbmRsZUJ5QnJvd3NlcixcbiAgICAgICAgICAgICAgICBvbkVudGVyOiBoYW5kbGVCeUhpZ2hsaWdodGVkSXRlbSxcbiAgICAgICAgICAgICAgICBvbkVzY2FwZTogaGFuZGxlQnlIaWdobGlnaHRlZEl0ZW0sXG4gICAgICAgICAgICAgICAgb25VcDogaGFuZGxlQnlIaWdobGlnaHRlZEl0ZW0sXG4gICAgICAgICAgICAgICAgb25Eb3duOiBoYW5kbGVCeUhpZ2hsaWdodGVkSXRlbVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBldmVudE9yZGVyOiB7XG4gICAgICAgICAgICAgIGtleWRvd246IFtcbiAgICAgICAgICAgICAgICBjdXN0b21TZWFyY2hlckV2ZW50c05hbWUsXG4gICAgICAgICAgICAgICAgS2V5aW5nLm5hbWUoKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSldXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBzZWFyY2hSZXN1bHRzQ2xhc3MgPSAndG94LWNvbGxlY3Rpb24tLXJlc3VsdHNfX2pzJztcbiAgICBjb25zdCBhdWdtZW50V2l0aEFyaWEgPSBpdGVtID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGlmIChpdGVtLmRvbSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICAuLi5pdGVtLmRvbSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgLi4uKF9hID0gaXRlbS5kb20uYXR0cmlidXRlcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30sXG4gICAgICAgICAgICAgICdpZCc6IGdlbmVyYXRlJDYoJ2FyaWEtaXRlbS1zZWFyY2gtcmVzdWx0LWlkJyksXG4gICAgICAgICAgICAgICdhcmlhLXNlbGVjdGVkJzogJ2ZhbHNlJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjaHVuayA9IChyb3dEb20sIG51bUNvbHVtbnMpID0+IGl0ZW1zID0+IHtcbiAgICAgIGNvbnN0IGNodW5rcyA9IGNodW5rJDEoaXRlbXMsIG51bUNvbHVtbnMpO1xuICAgICAgcmV0dXJuIG1hcCQyKGNodW5rcywgYyA9PiAoe1xuICAgICAgICBkb206IHJvd0RvbSxcbiAgICAgICAgY29tcG9uZW50czogY1xuICAgICAgfSkpO1xuICAgIH07XG4gICAgY29uc3QgZm9yU3dhdGNoID0gY29sdW1ucyA9PiAoe1xuICAgICAgZG9tOiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAndG94LW1lbnUnLFxuICAgICAgICAgICd0b3gtc3dhdGNoZXMtbWVudSdcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIGNvbXBvbmVudHM6IFt7XG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgY2xhc3NlczogWyd0b3gtc3dhdGNoZXMnXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcG9uZW50czogW01lbnUucGFydHMuaXRlbXMoe1xuICAgICAgICAgICAgICBwcmVwcm9jZXNzOiBjb2x1bW5zICE9PSAnYXV0bycgPyBjaHVuayh7XG4gICAgICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1zd2F0Y2hlc19fcm93J11cbiAgICAgICAgICAgICAgfSwgY29sdW1ucykgOiBpZGVudGl0eVxuICAgICAgICAgICAgfSldXG4gICAgICAgIH1dXG4gICAgfSk7XG4gICAgY29uc3QgZm9yVG9vbGJhciA9IGNvbHVtbnMgPT4gKHtcbiAgICAgIGRvbToge1xuICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICBjbGFzc2VzOiBbXG4gICAgICAgICAgJ3RveC1tZW51JyxcbiAgICAgICAgICAndG94LWNvbGxlY3Rpb24nLFxuICAgICAgICAgICd0b3gtY29sbGVjdGlvbi0tdG9vbGJhcicsXG4gICAgICAgICAgJ3RveC1jb2xsZWN0aW9uLS10b29sYmFyLWxnJ1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czogW01lbnUucGFydHMuaXRlbXMoe1xuICAgICAgICAgIHByZXByb2Nlc3M6IGNodW5rKHtcbiAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1jb2xsZWN0aW9uX19ncm91cCddXG4gICAgICAgICAgfSwgY29sdW1ucylcbiAgICAgICAgfSldXG4gICAgfSk7XG4gICAgY29uc3QgcHJlcHJvY2Vzc0NvbGxlY3Rpb24gPSAoaXRlbXMsIGlzU2VwYXJhdG9yKSA9PiB7XG4gICAgICBjb25zdCBhbGxTcGxpdHMgPSBbXTtcbiAgICAgIGxldCBjdXJyZW50U3BsaXQgPSBbXTtcbiAgICAgIGVhY2gkMShpdGVtcywgKGl0ZW0sIGkpID0+IHtcbiAgICAgICAgaWYgKGlzU2VwYXJhdG9yKGl0ZW0sIGkpKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnRTcGxpdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhbGxTcGxpdHMucHVzaChjdXJyZW50U3BsaXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50U3BsaXQgPSBbXTtcbiAgICAgICAgICBpZiAoaGFzJDIoaXRlbS5kb20sICdpbm5lckh0bWwnKSB8fCBpdGVtLmNvbXBvbmVudHMgJiYgaXRlbS5jb21wb25lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGN1cnJlbnRTcGxpdC5wdXNoKGl0ZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50U3BsaXQucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoY3VycmVudFNwbGl0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgYWxsU3BsaXRzLnB1c2goY3VycmVudFNwbGl0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXAkMihhbGxTcGxpdHMsIHMgPT4gKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1jb2xsZWN0aW9uX19ncm91cCddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IHNcbiAgICAgIH0pKTtcbiAgICB9O1xuICAgIGNvbnN0IGluc2VydEl0ZW1zUGxhY2Vob2xkZXIgPSAoY29sdW1ucywgaW5pdEl0ZW1zLCBvbkl0ZW0pID0+IHtcbiAgICAgIHJldHVybiBNZW51LnBhcnRzLml0ZW1zKHtcbiAgICAgICAgcHJlcHJvY2VzczogcmF3SXRlbXMgPT4ge1xuICAgICAgICAgIGNvbnN0IGVucmljaGVkSXRlbXMgPSBtYXAkMihyYXdJdGVtcywgb25JdGVtKTtcbiAgICAgICAgICBpZiAoY29sdW1ucyAhPT0gJ2F1dG8nICYmIGNvbHVtbnMgPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gY2h1bmsoe1xuICAgICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1jb2xsZWN0aW9uX19ncm91cCddXG4gICAgICAgICAgICB9LCBjb2x1bW5zKShlbnJpY2hlZEl0ZW1zKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHByZXByb2Nlc3NDb2xsZWN0aW9uKGVucmljaGVkSXRlbXMsIChfaXRlbSwgaSkgPT4gaW5pdEl0ZW1zW2ldLnR5cGUgPT09ICdzZXBhcmF0b3InKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZm9yQ29sbGVjdGlvbiA9IChjb2x1bW5zLCBpbml0SXRlbXMsIF9oYXNJY29ucyA9IHRydWUpID0+ICh7XG4gICAgICBkb206IHtcbiAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICd0b3gtbWVudScsXG4gICAgICAgICAgJ3RveC1jb2xsZWN0aW9uJ1xuICAgICAgICBdLmNvbmNhdChjb2x1bW5zID09PSAxID8gWyd0b3gtY29sbGVjdGlvbi0tbGlzdCddIDogWyd0b3gtY29sbGVjdGlvbi0tZ3JpZCddKVxuICAgICAgfSxcbiAgICAgIGNvbXBvbmVudHM6IFtpbnNlcnRJdGVtc1BsYWNlaG9sZGVyKGNvbHVtbnMsIGluaXRJdGVtcywgaWRlbnRpdHkpXVxuICAgIH0pO1xuICAgIGNvbnN0IGZvckNvbGxlY3Rpb25XaXRoU2VhcmNoUmVzdWx0cyA9IChjb2x1bW5zLCBpbml0SXRlbXMsIF9oYXNJY29ucyA9IHRydWUpID0+IHtcbiAgICAgIGNvbnN0IGFyaWFDb250cm9sc1NlYXJjaFJlc3VsdHMgPSBnZW5lcmF0ZSQ2KCdhcmlhLWNvbnRyb2xzLXNlYXJjaC1yZXN1bHRzJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAgICd0b3gtbWVudScsXG4gICAgICAgICAgICAndG94LWNvbGxlY3Rpb24nLFxuICAgICAgICAgICAgc2VhcmNoUmVzdWx0c0NsYXNzXG4gICAgICAgICAgXS5jb25jYXQoY29sdW1ucyA9PT0gMSA/IFsndG94LWNvbGxlY3Rpb24tLWxpc3QnXSA6IFsndG94LWNvbGxlY3Rpb24tLWdyaWQnXSksXG4gICAgICAgICAgYXR0cmlidXRlczogeyBpZDogYXJpYUNvbnRyb2xzU2VhcmNoUmVzdWx0cyB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtpbnNlcnRJdGVtc1BsYWNlaG9sZGVyKGNvbHVtbnMsIGluaXRJdGVtcywgYXVnbWVudFdpdGhBcmlhKV1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBmb3JDb2xsZWN0aW9uV2l0aFNlYXJjaEZpZWxkID0gKGNvbHVtbnMsIGluaXRJdGVtcywgc2VhcmNoRmllbGQpID0+IHtcbiAgICAgIGNvbnN0IGFyaWFDb250cm9sc1NlYXJjaFJlc3VsdHMgPSBnZW5lcmF0ZSQ2KCdhcmlhLWNvbnRyb2xzLXNlYXJjaC1yZXN1bHRzJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAgICd0b3gtbWVudScsXG4gICAgICAgICAgICAndG94LWNvbGxlY3Rpb24nXG4gICAgICAgICAgXS5jb25jYXQoY29sdW1ucyA9PT0gMSA/IFsndG94LWNvbGxlY3Rpb24tLWxpc3QnXSA6IFsndG94LWNvbGxlY3Rpb24tLWdyaWQnXSlcbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgIHJlbmRlck1lbnVTZWFyY2hlcih7XG4gICAgICAgICAgICBpMThuOiBnbG9iYWwkOC50cmFuc2xhdGUsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogc2VhcmNoRmllbGQucGxhY2Vob2xkZXJcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICAgICAgIC4uLmNvbHVtbnMgPT09IDEgPyBbJ3RveC1jb2xsZWN0aW9uLS1saXN0J10gOiBbJ3RveC1jb2xsZWN0aW9uLS1ncmlkJ10sXG4gICAgICAgICAgICAgICAgc2VhcmNoUmVzdWx0c0NsYXNzXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgaWQ6IGFyaWFDb250cm9sc1NlYXJjaFJlc3VsdHMgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IFtpbnNlcnRJdGVtc1BsYWNlaG9sZGVyKGNvbHVtbnMsIGluaXRJdGVtcywgYXVnbWVudFdpdGhBcmlhKV1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBmb3JIb3Jpem9udGFsQ29sbGVjdGlvbiA9IChpbml0SXRlbXMsIF9oYXNJY29ucyA9IHRydWUpID0+ICh7XG4gICAgICBkb206IHtcbiAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICd0b3gtY29sbGVjdGlvbicsXG4gICAgICAgICAgJ3RveC1jb2xsZWN0aW9uLS1ob3Jpem9udGFsJ1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czogW01lbnUucGFydHMuaXRlbXMoeyBwcmVwcm9jZXNzOiBpdGVtcyA9PiBwcmVwcm9jZXNzQ29sbGVjdGlvbihpdGVtcywgKF9pdGVtLCBpKSA9PiBpbml0SXRlbXNbaV0udHlwZSA9PT0gJ3NlcGFyYXRvcicpIH0pXVxuICAgIH0pO1xuXG4gICAgY29uc3QgbWVudUhhc0ljb25zID0geHMgPT4gZXhpc3RzKHhzLCBpdGVtID0+ICdpY29uJyBpbiBpdGVtICYmIGl0ZW0uaWNvbiAhPT0gdW5kZWZpbmVkKTtcbiAgICBjb25zdCBoYW5kbGVFcnJvciA9IGVycm9yID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IpKTtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVIb3Jpem9udGFsUGFydGlhbE1lbnVXaXRoQWxsb3lJdGVtcyA9ICh2YWx1ZSwgX2hhc0ljb25zLCBpdGVtcywgX2NvbHVtbnMsIF9tZW51TGF5b3V0KSA9PiB7XG4gICAgICBjb25zdCBzdHJ1Y3R1cmUgPSBmb3JIb3Jpem9udGFsQ29sbGVjdGlvbihpdGVtcyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZG9tOiBzdHJ1Y3R1cmUuZG9tLFxuICAgICAgICBjb21wb25lbnRzOiBzdHJ1Y3R1cmUuY29tcG9uZW50cyxcbiAgICAgICAgaXRlbXNcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVQYXJ0aWFsTWVudVdpdGhBbGxveUl0ZW1zID0gKHZhbHVlLCBoYXNJY29ucywgaXRlbXMsIGNvbHVtbnMsIG1lbnVMYXlvdXQpID0+IHtcbiAgICAgIGNvbnN0IGdldE5vcm1hbFN0cnVjdHVyZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKG1lbnVMYXlvdXQubWVudVR5cGUgIT09ICdzZWFyY2hhYmxlJykge1xuICAgICAgICAgIHJldHVybiBmb3JDb2xsZWN0aW9uKGNvbHVtbnMsIGl0ZW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWVudUxheW91dC5zZWFyY2hNb2RlLnNlYXJjaE1vZGUgPT09ICdzZWFyY2gtd2l0aC1maWVsZCcgPyBmb3JDb2xsZWN0aW9uV2l0aFNlYXJjaEZpZWxkKGNvbHVtbnMsIGl0ZW1zLCBtZW51TGF5b3V0LnNlYXJjaE1vZGUpIDogZm9yQ29sbGVjdGlvbldpdGhTZWFyY2hSZXN1bHRzKGNvbHVtbnMsIGl0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChtZW51TGF5b3V0Lm1lbnVUeXBlID09PSAnY29sb3InKSB7XG4gICAgICAgIGNvbnN0IHN0cnVjdHVyZSA9IGZvclN3YXRjaChjb2x1bW5zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBkb206IHN0cnVjdHVyZS5kb20sXG4gICAgICAgICAgY29tcG9uZW50czogc3RydWN0dXJlLmNvbXBvbmVudHMsXG4gICAgICAgICAgaXRlbXNcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAobWVudUxheW91dC5tZW51VHlwZSA9PT0gJ25vcm1hbCcgJiYgY29sdW1ucyA9PT0gJ2F1dG8nKSB7XG4gICAgICAgIGNvbnN0IHN0cnVjdHVyZSA9IGZvckNvbGxlY3Rpb24oY29sdW1ucywgaXRlbXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIGRvbTogc3RydWN0dXJlLmRvbSxcbiAgICAgICAgICBjb21wb25lbnRzOiBzdHJ1Y3R1cmUuY29tcG9uZW50cyxcbiAgICAgICAgICBpdGVtc1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChtZW51TGF5b3V0Lm1lbnVUeXBlID09PSAnbm9ybWFsJyB8fCBtZW51TGF5b3V0Lm1lbnVUeXBlID09PSAnc2VhcmNoYWJsZScpIHtcbiAgICAgICAgY29uc3Qgc3RydWN0dXJlID0gZ2V0Tm9ybWFsU3RydWN0dXJlKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgZG9tOiBzdHJ1Y3R1cmUuZG9tLFxuICAgICAgICAgIGNvbXBvbmVudHM6IHN0cnVjdHVyZS5jb21wb25lbnRzLFxuICAgICAgICAgIGl0ZW1zXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKG1lbnVMYXlvdXQubWVudVR5cGUgPT09ICdsaXN0cHJldmlldycgJiYgY29sdW1ucyAhPT0gJ2F1dG8nKSB7XG4gICAgICAgIGNvbnN0IHN0cnVjdHVyZSA9IGZvclRvb2xiYXIoY29sdW1ucyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgZG9tOiBzdHJ1Y3R1cmUuZG9tLFxuICAgICAgICAgIGNvbXBvbmVudHM6IHN0cnVjdHVyZS5jb21wb25lbnRzLFxuICAgICAgICAgIGl0ZW1zXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIGRvbTogZG9tJDEoaGFzSWNvbnMsIGNvbHVtbnMsIG1lbnVMYXlvdXQubWVudVR5cGUpLFxuICAgICAgICAgIGNvbXBvbmVudHM6IGNvbXBvbmVudHMsXG4gICAgICAgICAgaXRlbXNcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdHlwZSA9IHJlcXVpcmVkU3RyaW5nKCd0eXBlJyk7XG4gICAgY29uc3QgbmFtZSQxID0gcmVxdWlyZWRTdHJpbmcoJ25hbWUnKTtcbiAgICBjb25zdCBsYWJlbCA9IHJlcXVpcmVkU3RyaW5nKCdsYWJlbCcpO1xuICAgIGNvbnN0IHRleHQkMSA9IHJlcXVpcmVkU3RyaW5nKCd0ZXh0Jyk7XG4gICAgY29uc3QgdGl0bGUgPSByZXF1aXJlZFN0cmluZygndGl0bGUnKTtcbiAgICBjb25zdCBpY29uID0gcmVxdWlyZWRTdHJpbmcoJ2ljb24nKTtcbiAgICBjb25zdCB2YWx1ZSQxID0gcmVxdWlyZWRTdHJpbmcoJ3ZhbHVlJyk7XG4gICAgY29uc3QgZmV0Y2gkMSA9IHJlcXVpcmVkRnVuY3Rpb24oJ2ZldGNoJyk7XG4gICAgY29uc3QgZ2V0U3VibWVudUl0ZW1zID0gcmVxdWlyZWRGdW5jdGlvbignZ2V0U3VibWVudUl0ZW1zJyk7XG4gICAgY29uc3Qgb25BY3Rpb24gPSByZXF1aXJlZEZ1bmN0aW9uKCdvbkFjdGlvbicpO1xuICAgIGNvbnN0IG9uSXRlbUFjdGlvbiA9IHJlcXVpcmVkRnVuY3Rpb24oJ29uSXRlbUFjdGlvbicpO1xuICAgIGNvbnN0IG9uU2V0dXAgPSBkZWZhdWx0ZWRGdW5jdGlvbignb25TZXR1cCcsICgpID0+IG5vb3ApO1xuICAgIGNvbnN0IG9wdGlvbmFsTmFtZSA9IG9wdGlvblN0cmluZygnbmFtZScpO1xuICAgIGNvbnN0IG9wdGlvbmFsVGV4dCA9IG9wdGlvblN0cmluZygndGV4dCcpO1xuICAgIGNvbnN0IG9wdGlvbmFsSWNvbiA9IG9wdGlvblN0cmluZygnaWNvbicpO1xuICAgIGNvbnN0IG9wdGlvbmFsVG9vbHRpcCA9IG9wdGlvblN0cmluZygndG9vbHRpcCcpO1xuICAgIGNvbnN0IG9wdGlvbmFsTGFiZWwgPSBvcHRpb25TdHJpbmcoJ2xhYmVsJyk7XG4gICAgY29uc3Qgb3B0aW9uYWxTaG9ydGN1dCA9IG9wdGlvblN0cmluZygnc2hvcnRjdXQnKTtcbiAgICBjb25zdCBvcHRpb25hbFNlbGVjdCA9IG9wdGlvbkZ1bmN0aW9uKCdzZWxlY3QnKTtcbiAgICBjb25zdCBhY3RpdmUgPSBkZWZhdWx0ZWRCb29sZWFuKCdhY3RpdmUnLCBmYWxzZSk7XG4gICAgY29uc3QgYm9yZGVybGVzcyA9IGRlZmF1bHRlZEJvb2xlYW4oJ2JvcmRlcmxlc3MnLCBmYWxzZSk7XG4gICAgY29uc3QgZW5hYmxlZCA9IGRlZmF1bHRlZEJvb2xlYW4oJ2VuYWJsZWQnLCB0cnVlKTtcbiAgICBjb25zdCBwcmltYXJ5ID0gZGVmYXVsdGVkQm9vbGVhbigncHJpbWFyeScsIGZhbHNlKTtcbiAgICBjb25zdCBkZWZhdWx0ZWRDb2x1bW5zID0gbnVtID0+IGRlZmF1bHRlZCgnY29sdW1ucycsIG51bSk7XG4gICAgY29uc3QgZGVmYXVsdGVkTWV0YSA9IGRlZmF1bHRlZCgnbWV0YScsIHt9KTtcbiAgICBjb25zdCBkZWZhdWx0ZWRPbkFjdGlvbiA9IGRlZmF1bHRlZEZ1bmN0aW9uKCdvbkFjdGlvbicsIG5vb3ApO1xuICAgIGNvbnN0IGRlZmF1bHRlZFR5cGUgPSB0eXBlID0+IGRlZmF1bHRlZFN0cmluZygndHlwZScsIHR5cGUpO1xuICAgIGNvbnN0IGdlbmVyYXRlZE5hbWUgPSBuYW1lUHJlZml4ID0+IGZpZWxkJDEoJ25hbWUnLCAnbmFtZScsIGRlZmF1bHRlZFRodW5rKCgpID0+IGdlbmVyYXRlJDYoYCR7IG5hbWVQcmVmaXggfS1uYW1lYCkpLCBzdHJpbmcpO1xuICAgIGNvbnN0IGdlbmVyYXRlZFZhbHVlID0gdmFsdWVQcmVmaXggPT4gZmllbGQkMSgndmFsdWUnLCAndmFsdWUnLCBkZWZhdWx0ZWRUaHVuaygoKSA9PiBnZW5lcmF0ZSQ2KGAkeyB2YWx1ZVByZWZpeCB9LXZhbHVlYCkpLCBhbnlWYWx1ZSgpKTtcblxuICAgIGNvbnN0IHNlcGFyYXRvck1lbnVJdGVtU2NoZW1hID0gb2JqT2YoW1xuICAgICAgdHlwZSxcbiAgICAgIG9wdGlvbmFsVGV4dFxuICAgIF0pO1xuICAgIGNvbnN0IGNyZWF0ZVNlcGFyYXRvck1lbnVJdGVtID0gc3BlYyA9PiBhc1Jhdygnc2VwYXJhdG9ybWVudWl0ZW0nLCBzZXBhcmF0b3JNZW51SXRlbVNjaGVtYSwgc3BlYyk7XG5cbiAgICBjb25zdCBhdXRvY29tcGxldGVySXRlbVNjaGVtYSA9IG9iak9mKFtcbiAgICAgIGRlZmF1bHRlZFR5cGUoJ2F1dG9jb21wbGV0ZWl0ZW0nKSxcbiAgICAgIGFjdGl2ZSxcbiAgICAgIGVuYWJsZWQsXG4gICAgICBkZWZhdWx0ZWRNZXRhLFxuICAgICAgdmFsdWUkMSxcbiAgICAgIG9wdGlvbmFsVGV4dCxcbiAgICAgIG9wdGlvbmFsSWNvblxuICAgIF0pO1xuICAgIGNvbnN0IGNyZWF0ZVNlcGFyYXRvckl0ZW0gPSBzcGVjID0+IGFzUmF3KCdBdXRvY29tcGxldGVyLlNlcGFyYXRvcicsIHNlcGFyYXRvck1lbnVJdGVtU2NoZW1hLCBzcGVjKTtcbiAgICBjb25zdCBjcmVhdGVBdXRvY29tcGxldGVySXRlbSA9IHNwZWMgPT4gYXNSYXcoJ0F1dG9jb21wbGV0ZXIuSXRlbScsIGF1dG9jb21wbGV0ZXJJdGVtU2NoZW1hLCBzcGVjKTtcblxuICAgIGNvbnN0IGJhc2VUb29sYmFyQnV0dG9uRmllbGRzID0gW1xuICAgICAgZW5hYmxlZCxcbiAgICAgIG9wdGlvbmFsVG9vbHRpcCxcbiAgICAgIG9wdGlvbmFsSWNvbixcbiAgICAgIG9wdGlvbmFsVGV4dCxcbiAgICAgIG9uU2V0dXBcbiAgICBdO1xuICAgIGNvbnN0IHRvb2xiYXJCdXR0b25TY2hlbWEgPSBvYmpPZihbXG4gICAgICB0eXBlLFxuICAgICAgb25BY3Rpb25cbiAgICBdLmNvbmNhdChiYXNlVG9vbGJhckJ1dHRvbkZpZWxkcykpO1xuICAgIGNvbnN0IGNyZWF0ZVRvb2xiYXJCdXR0b24gPSBzcGVjID0+IGFzUmF3KCd0b29sYmFyYnV0dG9uJywgdG9vbGJhckJ1dHRvblNjaGVtYSwgc3BlYyk7XG5cbiAgICBjb25zdCBiYXNlVG9vbGJhclRvZ2dsZUJ1dHRvbkZpZWxkcyA9IFthY3RpdmVdLmNvbmNhdChiYXNlVG9vbGJhckJ1dHRvbkZpZWxkcyk7XG4gICAgY29uc3QgdG9nZ2xlQnV0dG9uU2NoZW1hID0gb2JqT2YoYmFzZVRvb2xiYXJUb2dnbGVCdXR0b25GaWVsZHMuY29uY2F0KFtcbiAgICAgIHR5cGUsXG4gICAgICBvbkFjdGlvblxuICAgIF0pKTtcbiAgICBjb25zdCBjcmVhdGVUb2dnbGVCdXR0b24gPSBzcGVjID0+IGFzUmF3KCdUb2dnbGVCdXR0b24nLCB0b2dnbGVCdXR0b25TY2hlbWEsIHNwZWMpO1xuXG4gICAgY29uc3QgY29udGV4dEJhckZpZWxkcyA9IFtcbiAgICAgIGRlZmF1bHRlZEZ1bmN0aW9uKCdwcmVkaWNhdGUnLCBuZXZlciksXG4gICAgICBkZWZhdWx0ZWRTdHJpbmdFbnVtKCdzY29wZScsICdub2RlJywgW1xuICAgICAgICAnbm9kZScsXG4gICAgICAgICdlZGl0b3InXG4gICAgICBdKSxcbiAgICAgIGRlZmF1bHRlZFN0cmluZ0VudW0oJ3Bvc2l0aW9uJywgJ3NlbGVjdGlvbicsIFtcbiAgICAgICAgJ25vZGUnLFxuICAgICAgICAnc2VsZWN0aW9uJyxcbiAgICAgICAgJ2xpbmUnXG4gICAgICBdKVxuICAgIF07XG5cbiAgICBjb25zdCBjb250ZXh0QnV0dG9uRmllbGRzID0gYmFzZVRvb2xiYXJCdXR0b25GaWVsZHMuY29uY2F0KFtcbiAgICAgIGRlZmF1bHRlZFR5cGUoJ2NvbnRleHRmb3JtYnV0dG9uJyksXG4gICAgICBwcmltYXJ5LFxuICAgICAgb25BY3Rpb24sXG4gICAgICBjdXN0b21GaWVsZCgnb3JpZ2luYWwnLCBpZGVudGl0eSlcbiAgICBdKTtcbiAgICBjb25zdCBjb250ZXh0VG9nZ2xlQnV0dG9uRmllbGRzID0gYmFzZVRvb2xiYXJUb2dnbGVCdXR0b25GaWVsZHMuY29uY2F0KFtcbiAgICAgIGRlZmF1bHRlZFR5cGUoJ2NvbnRleHRmb3JtYnV0dG9uJyksXG4gICAgICBwcmltYXJ5LFxuICAgICAgb25BY3Rpb24sXG4gICAgICBjdXN0b21GaWVsZCgnb3JpZ2luYWwnLCBpZGVudGl0eSlcbiAgICBdKTtcbiAgICBjb25zdCBsYXVuY2hCdXR0b25GaWVsZHMgPSBiYXNlVG9vbGJhckJ1dHRvbkZpZWxkcy5jb25jYXQoW2RlZmF1bHRlZFR5cGUoJ2NvbnRleHRmb3JtYnV0dG9uJyldKTtcbiAgICBjb25zdCBsYXVuY2hUb2dnbGVCdXR0b25GaWVsZHMgPSBiYXNlVG9vbGJhclRvZ2dsZUJ1dHRvbkZpZWxkcy5jb25jYXQoW2RlZmF1bHRlZFR5cGUoJ2NvbnRleHRmb3JtdG9nZ2xlYnV0dG9uJyldKTtcbiAgICBjb25zdCB0b2dnbGVPck5vcm1hbCA9IGNob29zZSQxKCd0eXBlJywge1xuICAgICAgY29udGV4dGZvcm1idXR0b246IGNvbnRleHRCdXR0b25GaWVsZHMsXG4gICAgICBjb250ZXh0Zm9ybXRvZ2dsZWJ1dHRvbjogY29udGV4dFRvZ2dsZUJ1dHRvbkZpZWxkc1xuICAgIH0pO1xuICAgIGNvbnN0IGNvbnRleHRGb3JtU2NoZW1hID0gb2JqT2YoW1xuICAgICAgZGVmYXVsdGVkVHlwZSgnY29udGV4dGZvcm0nKSxcbiAgICAgIGRlZmF1bHRlZEZ1bmN0aW9uKCdpbml0VmFsdWUnLCBjb25zdGFudCQxKCcnKSksXG4gICAgICBvcHRpb25hbExhYmVsLFxuICAgICAgcmVxdWlyZWRBcnJheU9mKCdjb21tYW5kcycsIHRvZ2dsZU9yTm9ybWFsKSxcbiAgICAgIG9wdGlvbk9mKCdsYXVuY2gnLCBjaG9vc2UkMSgndHlwZScsIHtcbiAgICAgICAgY29udGV4dGZvcm1idXR0b246IGxhdW5jaEJ1dHRvbkZpZWxkcyxcbiAgICAgICAgY29udGV4dGZvcm10b2dnbGVidXR0b246IGxhdW5jaFRvZ2dsZUJ1dHRvbkZpZWxkc1xuICAgICAgfSkpXG4gICAgXS5jb25jYXQoY29udGV4dEJhckZpZWxkcykpO1xuICAgIGNvbnN0IGNyZWF0ZUNvbnRleHRGb3JtID0gc3BlYyA9PiBhc1JhdygnQ29udGV4dEZvcm0nLCBjb250ZXh0Rm9ybVNjaGVtYSwgc3BlYyk7XG5cbiAgICBjb25zdCBjb250ZXh0VG9vbGJhclNjaGVtYSA9IG9iak9mKFtcbiAgICAgIGRlZmF1bHRlZFR5cGUoJ2NvbnRleHR0b29sYmFyJyksXG4gICAgICByZXF1aXJlZFN0cmluZygnaXRlbXMnKVxuICAgIF0uY29uY2F0KGNvbnRleHRCYXJGaWVsZHMpKTtcbiAgICBjb25zdCBjcmVhdGVDb250ZXh0VG9vbGJhciA9IHNwZWMgPT4gYXNSYXcoJ0NvbnRleHRUb29sYmFyJywgY29udGV4dFRvb2xiYXJTY2hlbWEsIHNwZWMpO1xuXG4gICAgY29uc3QgY2FyZEltYWdlRmllbGRzID0gW1xuICAgICAgdHlwZSxcbiAgICAgIHJlcXVpcmVkU3RyaW5nKCdzcmMnKSxcbiAgICAgIG9wdGlvblN0cmluZygnYWx0JyksXG4gICAgICBkZWZhdWx0ZWRBcnJheU9mKCdjbGFzc2VzJywgW10sIHN0cmluZylcbiAgICBdO1xuICAgIGNvbnN0IGNhcmRJbWFnZVNjaGVtYSA9IG9iak9mKGNhcmRJbWFnZUZpZWxkcyk7XG5cbiAgICBjb25zdCBjYXJkVGV4dEZpZWxkcyA9IFtcbiAgICAgIHR5cGUsXG4gICAgICB0ZXh0JDEsXG4gICAgICBvcHRpb25hbE5hbWUsXG4gICAgICBkZWZhdWx0ZWRBcnJheU9mKCdjbGFzc2VzJywgWyd0b3gtY29sbGVjdGlvbl9faXRlbS1sYWJlbCddLCBzdHJpbmcpXG4gICAgXTtcbiAgICBjb25zdCBjYXJkVGV4dFNjaGVtYSA9IG9iak9mKGNhcmRUZXh0RmllbGRzKTtcblxuICAgIGNvbnN0IGl0ZW1TY2hlbWEkMSA9IHZhbHVlVGh1bmsoKCkgPT4gY2hvb3NlJDIoJ3R5cGUnLCB7XG4gICAgICBjYXJkaW1hZ2U6IGNhcmRJbWFnZVNjaGVtYSxcbiAgICAgIGNhcmR0ZXh0OiBjYXJkVGV4dFNjaGVtYSxcbiAgICAgIGNhcmRjb250YWluZXI6IGNhcmRDb250YWluZXJTY2hlbWFcbiAgICB9KSk7XG4gICAgY29uc3QgY2FyZENvbnRhaW5lclNjaGVtYSA9IG9iak9mKFtcbiAgICAgIHR5cGUsXG4gICAgICBkZWZhdWx0ZWRTdHJpbmcoJ2RpcmVjdGlvbicsICdob3Jpem9udGFsJyksXG4gICAgICBkZWZhdWx0ZWRTdHJpbmcoJ2FsaWduJywgJ2xlZnQnKSxcbiAgICAgIGRlZmF1bHRlZFN0cmluZygndmFsaWduJywgJ21pZGRsZScpLFxuICAgICAgcmVxdWlyZWRBcnJheU9mKCdpdGVtcycsIGl0ZW1TY2hlbWEkMSlcbiAgICBdKTtcblxuICAgIGNvbnN0IGNvbW1vbk1lbnVJdGVtRmllbGRzID0gW1xuICAgICAgZW5hYmxlZCxcbiAgICAgIG9wdGlvbmFsVGV4dCxcbiAgICAgIG9wdGlvbmFsU2hvcnRjdXQsXG4gICAgICBnZW5lcmF0ZWRWYWx1ZSgnbWVudWl0ZW0nKSxcbiAgICAgIGRlZmF1bHRlZE1ldGFcbiAgICBdO1xuXG4gICAgY29uc3QgY2FyZE1lbnVJdGVtU2NoZW1hID0gb2JqT2YoW1xuICAgICAgdHlwZSxcbiAgICAgIG9wdGlvbmFsTGFiZWwsXG4gICAgICByZXF1aXJlZEFycmF5T2YoJ2l0ZW1zJywgaXRlbVNjaGVtYSQxKSxcbiAgICAgIG9uU2V0dXAsXG4gICAgICBkZWZhdWx0ZWRPbkFjdGlvblxuICAgIF0uY29uY2F0KGNvbW1vbk1lbnVJdGVtRmllbGRzKSk7XG4gICAgY29uc3QgY3JlYXRlQ2FyZE1lbnVJdGVtID0gc3BlYyA9PiBhc1JhdygnY2FyZG1lbnVpdGVtJywgY2FyZE1lbnVJdGVtU2NoZW1hLCBzcGVjKTtcblxuICAgIGNvbnN0IGNob2ljZU1lbnVJdGVtU2NoZW1hID0gb2JqT2YoW1xuICAgICAgdHlwZSxcbiAgICAgIGFjdGl2ZSxcbiAgICAgIG9wdGlvbmFsSWNvblxuICAgIF0uY29uY2F0KGNvbW1vbk1lbnVJdGVtRmllbGRzKSk7XG4gICAgY29uc3QgY3JlYXRlQ2hvaWNlTWVudUl0ZW0gPSBzcGVjID0+IGFzUmF3KCdjaG9pY2VtZW51aXRlbScsIGNob2ljZU1lbnVJdGVtU2NoZW1hLCBzcGVjKTtcblxuICAgIGNvbnN0IGJhc2VGaWVsZHMgPSBbXG4gICAgICB0eXBlLFxuICAgICAgcmVxdWlyZWRTdHJpbmcoJ2ZhbmN5dHlwZScpLFxuICAgICAgZGVmYXVsdGVkT25BY3Rpb25cbiAgICBdO1xuICAgIGNvbnN0IGluc2VydFRhYmxlRmllbGRzID0gW2RlZmF1bHRlZCgnaW5pdERhdGEnLCB7fSldLmNvbmNhdChiYXNlRmllbGRzKTtcbiAgICBjb25zdCBjb2xvclN3YXRjaEZpZWxkcyA9IFtcbiAgICAgIG9wdGlvbkZ1bmN0aW9uKCdzZWxlY3QnKSxcbiAgICAgIGRlZmF1bHRlZE9iak9mKCdpbml0RGF0YScsIHt9LCBbXG4gICAgICAgIGRlZmF1bHRlZEJvb2xlYW4oJ2FsbG93Q3VzdG9tQ29sb3JzJywgdHJ1ZSksXG4gICAgICAgIGRlZmF1bHRlZFN0cmluZygnc3RvcmFnZUtleScsICdkZWZhdWx0JyksXG4gICAgICAgIG9wdGlvbkFycmF5T2YoJ2NvbG9ycycsIGFueVZhbHVlKCkpXG4gICAgICBdKVxuICAgIF0uY29uY2F0KGJhc2VGaWVsZHMpO1xuICAgIGNvbnN0IGZhbmN5TWVudUl0ZW1TY2hlbWEgPSBjaG9vc2UkMSgnZmFuY3l0eXBlJywge1xuICAgICAgaW5zZXJ0dGFibGU6IGluc2VydFRhYmxlRmllbGRzLFxuICAgICAgY29sb3Jzd2F0Y2g6IGNvbG9yU3dhdGNoRmllbGRzXG4gICAgfSk7XG4gICAgY29uc3QgY3JlYXRlRmFuY3lNZW51SXRlbSA9IHNwZWMgPT4gYXNSYXcoJ2ZhbmN5bWVudWl0ZW0nLCBmYW5jeU1lbnVJdGVtU2NoZW1hLCBzcGVjKTtcblxuICAgIGNvbnN0IG1lbnVJdGVtU2NoZW1hID0gb2JqT2YoW1xuICAgICAgdHlwZSxcbiAgICAgIG9uU2V0dXAsXG4gICAgICBkZWZhdWx0ZWRPbkFjdGlvbixcbiAgICAgIG9wdGlvbmFsSWNvblxuICAgIF0uY29uY2F0KGNvbW1vbk1lbnVJdGVtRmllbGRzKSk7XG4gICAgY29uc3QgY3JlYXRlTWVudUl0ZW0gPSBzcGVjID0+IGFzUmF3KCdtZW51aXRlbScsIG1lbnVJdGVtU2NoZW1hLCBzcGVjKTtcblxuICAgIGNvbnN0IG5lc3RlZE1lbnVJdGVtU2NoZW1hID0gb2JqT2YoW1xuICAgICAgdHlwZSxcbiAgICAgIGdldFN1Ym1lbnVJdGVtcyxcbiAgICAgIG9uU2V0dXAsXG4gICAgICBvcHRpb25hbEljb25cbiAgICBdLmNvbmNhdChjb21tb25NZW51SXRlbUZpZWxkcykpO1xuICAgIGNvbnN0IGNyZWF0ZU5lc3RlZE1lbnVJdGVtID0gc3BlYyA9PiBhc1JhdygnbmVzdGVkbWVudWl0ZW0nLCBuZXN0ZWRNZW51SXRlbVNjaGVtYSwgc3BlYyk7XG5cbiAgICBjb25zdCB0b2dnbGVNZW51SXRlbVNjaGVtYSA9IG9iak9mKFtcbiAgICAgIHR5cGUsXG4gICAgICBvcHRpb25hbEljb24sXG4gICAgICBhY3RpdmUsXG4gICAgICBvblNldHVwLFxuICAgICAgb25BY3Rpb25cbiAgICBdLmNvbmNhdChjb21tb25NZW51SXRlbUZpZWxkcykpO1xuICAgIGNvbnN0IGNyZWF0ZVRvZ2dsZU1lbnVJdGVtID0gc3BlYyA9PiBhc1JhdygndG9nZ2xlbWVudWl0ZW0nLCB0b2dnbGVNZW51SXRlbVNjaGVtYSwgc3BlYyk7XG5cbiAgICBjb25zdCBkZXRlY3RTaXplID0gKGNvbXAsIG1hcmdpbiwgc2VsZWN0b3JDbGFzcykgPT4ge1xuICAgICAgY29uc3QgZGVzY2VuZGFudHMkMSA9IGRlc2NlbmRhbnRzKGNvbXAuZWxlbWVudCwgJy4nICsgc2VsZWN0b3JDbGFzcyk7XG4gICAgICBpZiAoZGVzY2VuZGFudHMkMS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbkxlbmd0aCA9IGZpbmRJbmRleCQxKGRlc2NlbmRhbnRzJDEsIGMgPT4ge1xuICAgICAgICAgIGNvbnN0IHRoaXNUb3AgPSBjLmRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG4gICAgICAgICAgY29uc3QgY1RvcCA9IGRlc2NlbmRhbnRzJDFbMF0uZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICAgICAgICByZXR1cm4gTWF0aC5hYnModGhpc1RvcCAtIGNUb3ApID4gbWFyZ2luO1xuICAgICAgICB9KS5nZXRPcihkZXNjZW5kYW50cyQxLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICBudW1Db2x1bW5zOiBjb2x1bW5MZW5ndGgsXG4gICAgICAgICAgbnVtUm93czogTWF0aC5jZWlsKGRlc2NlbmRhbnRzJDEubGVuZ3RoIC8gY29sdW1uTGVuZ3RoKVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG5hbWVkRXZlbnRzID0gKG5hbWUsIGhhbmRsZXJzKSA9PiBkZXJpdmUkMShbY29uZmlnKG5hbWUsIGhhbmRsZXJzKV0pO1xuICAgIGNvbnN0IHVubmFtZWRFdmVudHMgPSBoYW5kbGVycyA9PiBuYW1lZEV2ZW50cyhnZW5lcmF0ZSQ2KCd1bm5hbWVkLWV2ZW50cycpLCBoYW5kbGVycyk7XG4gICAgY29uc3QgU2ltcGxlQmVoYXZpb3VycyA9IHtcbiAgICAgIG5hbWVkRXZlbnRzLFxuICAgICAgdW5uYW1lZEV2ZW50c1xuICAgIH07XG5cbiAgICBjb25zdCBFeGNsdXNpdml0eUNoYW5uZWwgPSBnZW5lcmF0ZSQ2KCd0b29sdGlwLmV4Y2x1c2l2ZScpO1xuICAgIGNvbnN0IFNob3dUb29sdGlwRXZlbnQgPSBnZW5lcmF0ZSQ2KCd0b29sdGlwLnNob3cnKTtcbiAgICBjb25zdCBIaWRlVG9vbHRpcEV2ZW50ID0gZ2VuZXJhdGUkNigndG9vbHRpcC5oaWRlJyk7XG5cbiAgICBjb25zdCBoaWRlQWxsRXhjbHVzaXZlID0gKGNvbXBvbmVudCwgX3RDb25maWcsIF90U3RhdGUpID0+IHtcbiAgICAgIGNvbXBvbmVudC5nZXRTeXN0ZW0oKS5icm9hZGNhc3RPbihbRXhjbHVzaXZpdHlDaGFubmVsXSwge30pO1xuICAgIH07XG4gICAgY29uc3Qgc2V0Q29tcG9uZW50cyA9IChjb21wb25lbnQsIHRDb25maWcsIHRTdGF0ZSwgc3BlY3MpID0+IHtcbiAgICAgIHRTdGF0ZS5nZXRUb29sdGlwKCkuZWFjaCh0b29sdGlwID0+IHtcbiAgICAgICAgaWYgKHRvb2x0aXAuZ2V0U3lzdGVtKCkuaXNDb25uZWN0ZWQoKSkge1xuICAgICAgICAgIFJlcGxhY2luZy5zZXQodG9vbHRpcCwgc3BlY3MpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdmFyIFRvb2x0aXBwaW5nQXBpcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBoaWRlQWxsRXhjbHVzaXZlOiBoaWRlQWxsRXhjbHVzaXZlLFxuICAgICAgICBzZXRDb21wb25lbnRzOiBzZXRDb21wb25lbnRzXG4gICAgfSk7XG5cbiAgICBjb25zdCBldmVudHMkOSA9ICh0b29sdGlwQ29uZmlnLCBzdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgaGlkZSA9IGNvbXAgPT4ge1xuICAgICAgICBzdGF0ZS5nZXRUb29sdGlwKCkuZWFjaChwID0+IHtcbiAgICAgICAgICBkZXRhY2gocCk7XG4gICAgICAgICAgdG9vbHRpcENvbmZpZy5vbkhpZGUoY29tcCwgcCk7XG4gICAgICAgICAgc3RhdGUuY2xlYXJUb29sdGlwKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBzdGF0ZS5jbGVhclRpbWVyKCk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2hvdyA9IGNvbXAgPT4ge1xuICAgICAgICBpZiAoIXN0YXRlLmlzU2hvd2luZygpKSB7XG4gICAgICAgICAgaGlkZUFsbEV4Y2x1c2l2ZShjb21wKTtcbiAgICAgICAgICBjb25zdCBzaW5rID0gdG9vbHRpcENvbmZpZy5sYXp5U2luayhjb21wKS5nZXRPckRpZSgpO1xuICAgICAgICAgIGNvbnN0IHBvcHVwID0gY29tcC5nZXRTeXN0ZW0oKS5idWlsZCh7XG4gICAgICAgICAgICBkb206IHRvb2x0aXBDb25maWcudG9vbHRpcERvbSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHRvb2x0aXBDb25maWcudG9vbHRpcENvbXBvbmVudHMsXG4gICAgICAgICAgICBldmVudHM6IGRlcml2ZSQyKHRvb2x0aXBDb25maWcubW9kZSA9PT0gJ25vcm1hbCcgPyBbXG4gICAgICAgICAgICAgIHJ1biQxKG1vdXNlb3ZlcigpLCBfID0+IHtcbiAgICAgICAgICAgICAgICBlbWl0KGNvbXAsIFNob3dUb29sdGlwRXZlbnQpO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgcnVuJDEobW91c2VvdXQoKSwgXyA9PiB7XG4gICAgICAgICAgICAgICAgZW1pdChjb21wLCBIaWRlVG9vbHRpcEV2ZW50KTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0gOiBbXSksXG4gICAgICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbUmVwbGFjaW5nLmNvbmZpZyh7fSldKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHN0YXRlLnNldFRvb2x0aXAocG9wdXApO1xuICAgICAgICAgIGF0dGFjaChzaW5rLCBwb3B1cCk7XG4gICAgICAgICAgdG9vbHRpcENvbmZpZy5vblNob3coY29tcCwgcG9wdXApO1xuICAgICAgICAgIFBvc2l0aW9uaW5nLnBvc2l0aW9uKHNpbmssIHBvcHVwLCB7IGFuY2hvcjogdG9vbHRpcENvbmZpZy5hbmNob3IoY29tcCkgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gZGVyaXZlJDIoZmxhdHRlbihbXG4gICAgICAgIFtcbiAgICAgICAgICBydW4kMShTaG93VG9vbHRpcEV2ZW50LCBjb21wID0+IHtcbiAgICAgICAgICAgIHN0YXRlLnJlc2V0VGltZXIoKCkgPT4ge1xuICAgICAgICAgICAgICBzaG93KGNvbXApO1xuICAgICAgICAgICAgfSwgdG9vbHRpcENvbmZpZy5kZWxheSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVuJDEoSGlkZVRvb2x0aXBFdmVudCwgY29tcCA9PiB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNldFRpbWVyKCgpID0+IHtcbiAgICAgICAgICAgICAgaGlkZShjb21wKTtcbiAgICAgICAgICAgIH0sIHRvb2x0aXBDb25maWcuZGVsYXkpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJ1biQxKHJlY2VpdmUoKSwgKGNvbXAsIG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlY2VpdmluZ0RhdGEgPSBtZXNzYWdlO1xuICAgICAgICAgICAgaWYgKCFyZWNlaXZpbmdEYXRhLnVuaXZlcnNhbCkge1xuICAgICAgICAgICAgICBpZiAoY29udGFpbnMkMihyZWNlaXZpbmdEYXRhLmNoYW5uZWxzLCBFeGNsdXNpdml0eUNoYW5uZWwpKSB7XG4gICAgICAgICAgICAgICAgaGlkZShjb21wKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJ1bk9uRGV0YWNoZWQoY29tcCA9PiB7XG4gICAgICAgICAgICBoaWRlKGNvbXApO1xuICAgICAgICAgIH0pXG4gICAgICAgIF0sXG4gICAgICAgIHRvb2x0aXBDb25maWcubW9kZSA9PT0gJ25vcm1hbCcgPyBbXG4gICAgICAgICAgcnVuJDEoZm9jdXNpbigpLCBjb21wID0+IHtcbiAgICAgICAgICAgIGVtaXQoY29tcCwgU2hvd1Rvb2x0aXBFdmVudCk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVuJDEocG9zdEJsdXIoKSwgY29tcCA9PiB7XG4gICAgICAgICAgICBlbWl0KGNvbXAsIEhpZGVUb29sdGlwRXZlbnQpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJ1biQxKG1vdXNlb3ZlcigpLCBjb21wID0+IHtcbiAgICAgICAgICAgIGVtaXQoY29tcCwgU2hvd1Rvb2x0aXBFdmVudCk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVuJDEobW91c2VvdXQoKSwgY29tcCA9PiB7XG4gICAgICAgICAgICBlbWl0KGNvbXAsIEhpZGVUb29sdGlwRXZlbnQpO1xuICAgICAgICAgIH0pXG4gICAgICAgIF0gOiBbXG4gICAgICAgICAgcnVuJDEoaGlnaGxpZ2h0JDEoKSwgKGNvbXAsIF9zZSkgPT4ge1xuICAgICAgICAgICAgZW1pdChjb21wLCBTaG93VG9vbHRpcEV2ZW50KTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBydW4kMShkZWhpZ2hsaWdodCQxKCksIGNvbXAgPT4ge1xuICAgICAgICAgICAgZW1pdChjb21wLCBIaWRlVG9vbHRpcEV2ZW50KTtcbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICBdKSk7XG4gICAgfTtcblxuICAgIHZhciBBY3RpdmVUb29sdGlwcGluZyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBldmVudHM6IGV2ZW50cyQ5XG4gICAgfSk7XG5cbiAgICB2YXIgVG9vbHRpcHBpbmdTY2hlbWEgPSBbXG4gICAgICByZXF1aXJlZCQxKCdsYXp5U2luaycpLFxuICAgICAgcmVxdWlyZWQkMSgndG9vbHRpcERvbScpLFxuICAgICAgZGVmYXVsdGVkKCdleGNsdXNpdmUnLCB0cnVlKSxcbiAgICAgIGRlZmF1bHRlZCgndG9vbHRpcENvbXBvbmVudHMnLCBbXSksXG4gICAgICBkZWZhdWx0ZWQoJ2RlbGF5JywgMzAwKSxcbiAgICAgIGRlZmF1bHRlZFN0cmluZ0VudW0oJ21vZGUnLCAnbm9ybWFsJywgW1xuICAgICAgICAnbm9ybWFsJyxcbiAgICAgICAgJ2ZvbGxvdy1oaWdobGlnaHQnXG4gICAgICBdKSxcbiAgICAgIGRlZmF1bHRlZCgnYW5jaG9yJywgY29tcCA9PiAoe1xuICAgICAgICB0eXBlOiAnaG90c3BvdCcsXG4gICAgICAgIGhvdHNwb3Q6IGNvbXAsXG4gICAgICAgIGxheW91dHM6IHtcbiAgICAgICAgICBvbkx0cjogY29uc3RhbnQkMShbXG4gICAgICAgICAgICBzb3V0aCQyLFxuICAgICAgICAgICAgbm9ydGgkMixcbiAgICAgICAgICAgIHNvdXRoZWFzdCQyLFxuICAgICAgICAgICAgbm9ydGhlYXN0JDIsXG4gICAgICAgICAgICBzb3V0aHdlc3QkMixcbiAgICAgICAgICAgIG5vcnRod2VzdCQyXG4gICAgICAgICAgXSksXG4gICAgICAgICAgb25SdGw6IGNvbnN0YW50JDEoW1xuICAgICAgICAgICAgc291dGgkMixcbiAgICAgICAgICAgIG5vcnRoJDIsXG4gICAgICAgICAgICBzb3V0aGVhc3QkMixcbiAgICAgICAgICAgIG5vcnRoZWFzdCQyLFxuICAgICAgICAgICAgc291dGh3ZXN0JDIsXG4gICAgICAgICAgICBub3J0aHdlc3QkMlxuICAgICAgICAgIF0pXG4gICAgICAgIH1cbiAgICAgIH0pKSxcbiAgICAgIG9uSGFuZGxlcignb25IaWRlJyksXG4gICAgICBvbkhhbmRsZXIoJ29uU2hvdycpXG4gICAgXTtcblxuICAgIGNvbnN0IGluaXQkYiA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVyID0gdmFsdWUkMigpO1xuICAgICAgY29uc3QgcG9wdXAgPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBjbGVhclRpbWVyID0gKCkgPT4ge1xuICAgICAgICB0aW1lci5vbihjbGVhclRpbWVvdXQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc2V0VGltZXIgPSAoZiwgZGVsYXkpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lcigpO1xuICAgICAgICB0aW1lci5zZXQoc2V0VGltZW91dChmLCBkZWxheSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlYWRTdGF0ZSA9IGNvbnN0YW50JDEoJ25vdC1pbXBsZW1lbnRlZCcpO1xuICAgICAgcmV0dXJuIG51JDgoe1xuICAgICAgICBnZXRUb29sdGlwOiBwb3B1cC5nZXQsXG4gICAgICAgIGlzU2hvd2luZzogcG9wdXAuaXNTZXQsXG4gICAgICAgIHNldFRvb2x0aXA6IHBvcHVwLnNldCxcbiAgICAgICAgY2xlYXJUb29sdGlwOiBwb3B1cC5jbGVhcixcbiAgICAgICAgY2xlYXJUaW1lcixcbiAgICAgICAgcmVzZXRUaW1lcixcbiAgICAgICAgcmVhZFN0YXRlXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdmFyIFRvb2x0aXBwaW5nU3RhdGUgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgaW5pdDogaW5pdCRiXG4gICAgfSk7XG5cbiAgICBjb25zdCBUb29sdGlwcGluZyA9IGNyZWF0ZSQ0KHtcbiAgICAgIGZpZWxkczogVG9vbHRpcHBpbmdTY2hlbWEsXG4gICAgICBuYW1lOiAndG9vbHRpcHBpbmcnLFxuICAgICAgYWN0aXZlOiBBY3RpdmVUb29sdGlwcGluZyxcbiAgICAgIHN0YXRlOiBUb29sdGlwcGluZ1N0YXRlLFxuICAgICAgYXBpczogVG9vbHRpcHBpbmdBcGlzXG4gICAgfSk7XG5cbiAgICBjb25zdCBlc2NhcGUgPSB0ZXh0ID0+IHRleHQucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcblxuICAgIGNvbnN0IFJlYWRPbmx5Q2hhbm5lbCA9ICdzaWx2ZXIucmVhZG9ubHknO1xuICAgIGNvbnN0IFJlYWRPbmx5RGF0YVNjaGVtYSA9IG9iak9mKFtyZXF1aXJlZEJvb2xlYW4oJ3JlYWRvbmx5JyldKTtcbiAgICBjb25zdCBicm9hZGNhc3RSZWFkb25seSA9ICh1aVJlZnMsIHJlYWRvbmx5KSA9PiB7XG4gICAgICBjb25zdCBvdXRlckNvbnRhaW5lciA9IHVpUmVmcy5tYWluVWkub3V0ZXJDb250YWluZXI7XG4gICAgICBjb25zdCB0YXJnZXQgPSBvdXRlckNvbnRhaW5lci5lbGVtZW50O1xuICAgICAgY29uc3QgbW90aGVyc2hpcHMgPSBbXG4gICAgICAgIHVpUmVmcy5tYWluVWkubW90aGVyc2hpcCxcbiAgICAgICAgLi4udWlSZWZzLnVpTW90aGVyc2hpcHNcbiAgICAgIF07XG4gICAgICBpZiAocmVhZG9ubHkpIHtcbiAgICAgICAgZWFjaCQxKG1vdGhlcnNoaXBzLCBtID0+IHtcbiAgICAgICAgICBtLmJyb2FkY2FzdE9uKFtkaXNtaXNzUG9wdXBzKCldLCB7IHRhcmdldCB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlYWNoJDEobW90aGVyc2hpcHMsIG0gPT4ge1xuICAgICAgICBtLmJyb2FkY2FzdE9uKFtSZWFkT25seUNoYW5uZWxdLCB7IHJlYWRvbmx5IH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cFJlYWRvbmx5TW9kZVN3aXRjaCA9IChlZGl0b3IsIHVpUmVmcykgPT4ge1xuICAgICAgZWRpdG9yLm9uKCdpbml0JywgKCkgPT4ge1xuICAgICAgICBpZiAoZWRpdG9yLm1vZGUuaXNSZWFkT25seSgpKSB7XG4gICAgICAgICAgYnJvYWRjYXN0UmVhZG9ubHkodWlSZWZzLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ1N3aXRjaE1vZGUnLCAoKSA9PiBicm9hZGNhc3RSZWFkb25seSh1aVJlZnMsIGVkaXRvci5tb2RlLmlzUmVhZE9ubHkoKSkpO1xuICAgICAgaWYgKGlzUmVhZE9ubHkoZWRpdG9yKSkge1xuICAgICAgICBlZGl0b3IubW9kZS5zZXQoJ3JlYWRvbmx5Jyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZWNlaXZpbmdDb25maWcgPSAoKSA9PiBSZWNlaXZpbmcuY29uZmlnKHtcbiAgICAgIGNoYW5uZWxzOiB7XG4gICAgICAgIFtSZWFkT25seUNoYW5uZWxdOiB7XG4gICAgICAgICAgc2NoZW1hOiBSZWFkT25seURhdGFTY2hlbWEsXG4gICAgICAgICAgb25SZWNlaXZlOiAoY29tcCwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgRGlzYWJsaW5nLnNldChjb21wLCBkYXRhLnJlYWRvbmx5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGl0ZW0gPSBkaXNhYmxlZCA9PiBEaXNhYmxpbmcuY29uZmlnKHtcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZGlzYWJsZUNsYXNzOiAndG94LWNvbGxlY3Rpb25fX2l0ZW0tLXN0YXRlLWRpc2FibGVkJ1xuICAgIH0pO1xuICAgIGNvbnN0IGJ1dHRvbiA9IGRpc2FibGVkID0+IERpc2FibGluZy5jb25maWcoeyBkaXNhYmxlZCB9KTtcbiAgICBjb25zdCBzcGxpdEJ1dHRvbiA9IGRpc2FibGVkID0+IERpc2FibGluZy5jb25maWcoe1xuICAgICAgZGlzYWJsZWQsXG4gICAgICBkaXNhYmxlQ2xhc3M6ICd0b3gtdGJ0bi0tZGlzYWJsZWQnXG4gICAgfSk7XG4gICAgY29uc3QgdG9vbGJhckJ1dHRvbiA9IGRpc2FibGVkID0+IERpc2FibGluZy5jb25maWcoe1xuICAgICAgZGlzYWJsZWQsXG4gICAgICBkaXNhYmxlQ2xhc3M6ICd0b3gtdGJ0bi0tZGlzYWJsZWQnLFxuICAgICAgdXNlTmF0aXZlOiBmYWxzZVxuICAgIH0pO1xuICAgIGNvbnN0IERpc2FibGluZ0NvbmZpZ3MgPSB7XG4gICAgICBpdGVtLFxuICAgICAgYnV0dG9uLFxuICAgICAgc3BsaXRCdXR0b24sXG4gICAgICB0b29sYmFyQnV0dG9uXG4gICAgfTtcblxuICAgIGNvbnN0IHJ1bldpdGhBcGkgPSAoaW5mbywgY29tcCkgPT4ge1xuICAgICAgY29uc3QgYXBpID0gaW5mby5nZXRBcGkoY29tcCk7XG4gICAgICByZXR1cm4gZiA9PiB7XG4gICAgICAgIGYoYXBpKTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBvbkNvbnRyb2xBdHRhY2hlZCA9IChpbmZvLCBlZGl0b3JPZmZDZWxsKSA9PiBydW5PbkF0dGFjaGVkKGNvbXAgPT4ge1xuICAgICAgY29uc3QgcnVuID0gcnVuV2l0aEFwaShpbmZvLCBjb21wKTtcbiAgICAgIHJ1bihhcGkgPT4ge1xuICAgICAgICBjb25zdCBvbkRlc3Ryb3kgPSBpbmZvLm9uU2V0dXAoYXBpKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob25EZXN0cm95KSkge1xuICAgICAgICAgIGVkaXRvck9mZkNlbGwuc2V0KG9uRGVzdHJveSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IG9uQ29udHJvbERldGFjaGVkID0gKGdldEFwaSwgZWRpdG9yT2ZmQ2VsbCkgPT4gcnVuT25EZXRhY2hlZChjb21wID0+IHJ1bldpdGhBcGkoZ2V0QXBpLCBjb21wKShlZGl0b3JPZmZDZWxsLmdldCgpKSk7XG5cbiAgICBjb25zdCBvbk1lbnVJdGVtRXhlY3V0ZSA9IChpbmZvLCBpdGVtUmVzcG9uc2UpID0+IHJ1bk9uRXhlY3V0ZSQxKChjb21wLCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgcnVuV2l0aEFwaShpbmZvLCBjb21wKShpbmZvLm9uQWN0aW9uKTtcbiAgICAgIGlmICghaW5mby50cmlnZ2Vyc1N1Ym1lbnUgJiYgaXRlbVJlc3BvbnNlID09PSBJdGVtUmVzcG9uc2UkMS5DTE9TRV9PTl9FWEVDVVRFKSB7XG4gICAgICAgIGlmIChjb21wLmdldFN5c3RlbSgpLmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgICBlbWl0KGNvbXAsIHNhbmRib3hDbG9zZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBzaW11bGF0ZWRFdmVudC5zdG9wKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgbWVudUl0ZW1FdmVudE9yZGVyID0ge1xuICAgICAgW2V4ZWN1dGUkNSgpXTogW1xuICAgICAgICAnZGlzYWJsaW5nJyxcbiAgICAgICAgJ2FsbG95LmJhc2UuYmVoYXZpb3VyJyxcbiAgICAgICAgJ3RvZ2dsaW5nJyxcbiAgICAgICAgJ2l0ZW0tZXZlbnRzJ1xuICAgICAgXVxuICAgIH07XG5cbiAgICBjb25zdCBjb21wb25lbnRSZW5kZXJQaXBlbGluZSA9IGNhdDtcbiAgICBjb25zdCByZW5kZXJDb21tb25JdGVtID0gKHNwZWMsIHN0cnVjdHVyZSwgaXRlbVJlc3BvbnNlLCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IGVkaXRvck9mZkNlbGwgPSBDZWxsKG5vb3ApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2l0ZW0nLFxuICAgICAgICBkb206IHN0cnVjdHVyZS5kb20sXG4gICAgICAgIGNvbXBvbmVudHM6IGNvbXBvbmVudFJlbmRlclBpcGVsaW5lKHN0cnVjdHVyZS5vcHRDb21wb25lbnRzKSxcbiAgICAgICAgZGF0YTogc3BlYy5kYXRhLFxuICAgICAgICBldmVudE9yZGVyOiBtZW51SXRlbUV2ZW50T3JkZXIsXG4gICAgICAgIGhhc1N1Ym1lbnU6IHNwZWMudHJpZ2dlcnNTdWJtZW51LFxuICAgICAgICBpdGVtQmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIGNvbmZpZygnaXRlbS1ldmVudHMnLCBbXG4gICAgICAgICAgICBvbk1lbnVJdGVtRXhlY3V0ZShzcGVjLCBpdGVtUmVzcG9uc2UpLFxuICAgICAgICAgICAgb25Db250cm9sQXR0YWNoZWQoc3BlYywgZWRpdG9yT2ZmQ2VsbCksXG4gICAgICAgICAgICBvbkNvbnRyb2xEZXRhY2hlZChzcGVjLCBlZGl0b3JPZmZDZWxsKVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIERpc2FibGluZ0NvbmZpZ3MuaXRlbSgoKSA9PiAhc3BlYy5lbmFibGVkIHx8IHByb3ZpZGVyc0JhY2tzdGFnZS5pc0Rpc2FibGVkKCkpLFxuICAgICAgICAgIHJlY2VpdmluZ0NvbmZpZygpLFxuICAgICAgICAgIFJlcGxhY2luZy5jb25maWcoe30pXG4gICAgICAgIF0uY29uY2F0KHNwZWMuaXRlbUJlaGF2aW91cnMpKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGJ1aWxkRGF0YSA9IHNvdXJjZSA9PiAoe1xuICAgICAgdmFsdWU6IHNvdXJjZS52YWx1ZSxcbiAgICAgIG1ldGE6IHtcbiAgICAgICAgdGV4dDogc291cmNlLnRleHQuZ2V0T3IoJycpLFxuICAgICAgICAuLi5zb3VyY2UubWV0YVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgY29udmVydFRleHQgPSBzb3VyY2UgPT4ge1xuICAgICAgY29uc3QgaXNNYWMgPSBnbG9iYWwkNS5vcy5pc01hY09TKCkgfHwgZ2xvYmFsJDUub3MuaXNpT1MoKTtcbiAgICAgIGNvbnN0IG1hYyA9IHtcbiAgICAgICAgYWx0OiAnXFx1MjMyNScsXG4gICAgICAgIGN0cmw6ICdcXHUyMzAzJyxcbiAgICAgICAgc2hpZnQ6ICdcXHUyMUU3JyxcbiAgICAgICAgbWV0YTogJ1xcdTIzMTgnLFxuICAgICAgICBhY2Nlc3M6ICdcXHUyMzAzXFx1MjMyNSdcbiAgICAgIH07XG4gICAgICBjb25zdCBvdGhlciA9IHtcbiAgICAgICAgbWV0YTogJ0N0cmwnLFxuICAgICAgICBhY2Nlc3M6ICdTaGlmdCtBbHQnXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVwbGFjZSA9IGlzTWFjID8gbWFjIDogb3RoZXI7XG4gICAgICBjb25zdCBzaG9ydGN1dCA9IHNvdXJjZS5zcGxpdCgnKycpO1xuICAgICAgY29uc3QgdXBkYXRlZCA9IG1hcCQyKHNob3J0Y3V0LCBzZWdtZW50ID0+IHtcbiAgICAgICAgY29uc3Qgc2VhcmNoID0gc2VnbWVudC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgICAgcmV0dXJuIGhhcyQyKHJlcGxhY2UsIHNlYXJjaCkgPyByZXBsYWNlW3NlYXJjaF0gOiBzZWdtZW50O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gaXNNYWMgPyB1cGRhdGVkLmpvaW4oJycpIDogdXBkYXRlZC5qb2luKCcrJyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlckljb24kMiA9IChuYW1lLCBpY29ucywgY2xhc3NlcyA9IFtpY29uQ2xhc3NdKSA9PiByZW5kZXIkMyhuYW1lLCB7XG4gICAgICB0YWc6ICdkaXYnLFxuICAgICAgY2xhc3Nlc1xuICAgIH0sIGljb25zKTtcbiAgICBjb25zdCByZW5kZXJUZXh0ID0gdGV4dCA9PiAoe1xuICAgICAgZG9tOiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFt0ZXh0Q2xhc3NdXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czogW3RleHQkMihnbG9iYWwkOC50cmFuc2xhdGUodGV4dCkpXVxuICAgIH0pO1xuICAgIGNvbnN0IHJlbmRlckh0bWwgPSAoaHRtbCwgY2xhc3NlcykgPT4gKHtcbiAgICAgIGRvbToge1xuICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICBjbGFzc2VzLFxuICAgICAgICBpbm5lckh0bWw6IGh0bWxcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZW5kZXJTdHlsZWRUZXh0ID0gKHN0eWxlLCB0ZXh0KSA9PiAoe1xuICAgICAgZG9tOiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFt0ZXh0Q2xhc3NdXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czogW3tcbiAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgIHRhZzogc3R5bGUudGFnLFxuICAgICAgICAgICAgc3R5bGVzOiBzdHlsZS5zdHlsZXNcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbXBvbmVudHM6IFt0ZXh0JDIoZ2xvYmFsJDgudHJhbnNsYXRlKHRleHQpKV1cbiAgICAgICAgfV1cbiAgICB9KTtcbiAgICBjb25zdCByZW5kZXJTaG9ydGN1dCA9IHNob3J0Y3V0ID0+ICh7XG4gICAgICBkb206IHtcbiAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgY2xhc3NlczogW2FjY2Vzc29yeUNsYXNzXVxuICAgICAgfSxcbiAgICAgIGNvbXBvbmVudHM6IFt0ZXh0JDIoY29udmVydFRleHQoc2hvcnRjdXQpKV1cbiAgICB9KTtcbiAgICBjb25zdCByZW5kZXJDaGVja21hcmsgPSBpY29ucyA9PiByZW5kZXJJY29uJDIoJ2NoZWNrbWFyaycsIGljb25zLCBbY2hlY2ttYXJrQ2xhc3NdKTtcbiAgICBjb25zdCByZW5kZXJTdWJtZW51Q2FyZXQgPSBpY29ucyA9PiByZW5kZXJJY29uJDIoJ2NoZXZyb24tcmlnaHQnLCBpY29ucywgW2NhcmV0Q2xhc3NdKTtcbiAgICBjb25zdCByZW5kZXJEb3dud2FyZHNDYXJldCA9IGljb25zID0+IHJlbmRlckljb24kMignY2hldnJvbi1kb3duJywgaWNvbnMsIFtjYXJldENsYXNzXSk7XG4gICAgY29uc3QgcmVuZGVyQ29udGFpbmVyID0gKGNvbnRhaW5lciwgY29tcG9uZW50cykgPT4ge1xuICAgICAgY29uc3QgZGlyZWN0aW9uQ2xhc3MgPSBjb250YWluZXIuZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gY29udGFpbmVyQ29sdW1uQ2xhc3MgOiBjb250YWluZXJSb3dDbGFzcztcbiAgICAgIGNvbnN0IGFsaWduQ2xhc3MgPSBjb250YWluZXIuYWxpZ24gPT09ICdsZWZ0JyA/IGNvbnRhaW5lckFsaWduTGVmdENsYXNzIDogY29udGFpbmVyQWxpZ25SaWdodENsYXNzO1xuICAgICAgY29uc3QgZ2V0VmFsaWduQ2xhc3MgPSAoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoY29udGFpbmVyLnZhbGlnbikge1xuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgIHJldHVybiBjb250YWluZXJWYWxpZ25Ub3BDbGFzcztcbiAgICAgICAgY2FzZSAnbWlkZGxlJzpcbiAgICAgICAgICByZXR1cm4gY29udGFpbmVyVmFsaWduTWlkZGxlQ2xhc3M7XG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgcmV0dXJuIGNvbnRhaW5lclZhbGlnbkJvdHRvbUNsYXNzO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbXG4gICAgICAgICAgICBjb250YWluZXJDbGFzcyxcbiAgICAgICAgICAgIGRpcmVjdGlvbkNsYXNzLFxuICAgICAgICAgICAgYWxpZ25DbGFzcyxcbiAgICAgICAgICAgIGdldFZhbGlnbkNsYXNzKClcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHNcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJJbWFnZSA9IChzcmMsIGNsYXNzZXMsIGFsdCkgPT4gKHtcbiAgICAgIGRvbToge1xuICAgICAgICB0YWc6ICdpbWcnLFxuICAgICAgICBjbGFzc2VzLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgc3JjLFxuICAgICAgICAgIGFsdDogYWx0LmdldE9yKCcnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCByZW5kZXJDb2xvclN0cnVjdHVyZSA9IChpdGVtLCBwcm92aWRlckJhY2tzdGFnZSwgZmFsbGJhY2tJY29uKSA9PiB7XG4gICAgICBjb25zdCBjb2xvclBpY2tlckNvbW1hbmQgPSAnY3VzdG9tJztcbiAgICAgIGNvbnN0IHJlbW92ZUNvbG9yQ29tbWFuZCA9ICdyZW1vdmUnO1xuICAgICAgY29uc3QgaXRlbVRleHQgPSBpdGVtLmFyaWFMYWJlbDtcbiAgICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IGl0ZW0udmFsdWU7XG4gICAgICBjb25zdCBpY29uU3ZnID0gaXRlbS5pY29uQ29udGVudC5tYXAobmFtZSA9PiBnZXRPcihuYW1lLCBwcm92aWRlckJhY2tzdGFnZS5pY29ucywgZmFsbGJhY2tJY29uKSk7XG4gICAgICBjb25zdCBnZXREb20gPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbW1vbiA9IGNvbG9yQ2xhc3M7XG4gICAgICAgIGNvbnN0IGljb24gPSBpY29uU3ZnLmdldE9yKCcnKTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGl0ZW1UZXh0Lm1hcCh0ZXh0ID0+ICh7IHRpdGxlOiBwcm92aWRlckJhY2tzdGFnZS50cmFuc2xhdGUodGV4dCkgfSkpLmdldE9yKHt9KTtcbiAgICAgICAgY29uc3QgYmFzZURvbSA9IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgY2xhc3NlczogW2NvbW1vbl1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGl0ZW1WYWx1ZSA9PT0gY29sb3JQaWNrZXJDb21tYW5kKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmJhc2VEb20sXG4gICAgICAgICAgICB0YWc6ICdidXR0b24nLFxuICAgICAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICAgICAuLi5iYXNlRG9tLmNsYXNzZXMsXG4gICAgICAgICAgICAgICd0b3gtc3dhdGNoZXNfX3BpY2tlci1idG4nXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaW5uZXJIdG1sOiBpY29uXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtVmFsdWUgPT09IHJlbW92ZUNvbG9yQ29tbWFuZCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5iYXNlRG9tLFxuICAgICAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICAgICAuLi5iYXNlRG9tLmNsYXNzZXMsXG4gICAgICAgICAgICAgICd0b3gtc3dhdGNoLS1yZW1vdmUnXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaW5uZXJIdG1sOiBpY29uXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc05vbk51bGxhYmxlKGl0ZW1WYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uYmFzZURvbSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgLi4uYmFzZURvbS5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAnZGF0YS1tY2UtY29sb3InOiBpdGVtVmFsdWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdHlsZXM6IHsgJ2JhY2tncm91bmQtY29sb3InOiBpdGVtVmFsdWUgfSxcbiAgICAgICAgICAgIGlubmVySHRtbDogaWNvblxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGJhc2VEb207XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IGdldERvbSgpLFxuICAgICAgICBvcHRDb21wb25lbnRzOiBbXVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckl0ZW1Eb21TdHJ1Y3R1cmUgPSBhcmlhTGFiZWwgPT4ge1xuICAgICAgY29uc3QgZG9tVGl0bGUgPSBhcmlhTGFiZWwubWFwKGxhYmVsID0+ICh7XG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICB0aXRsZTogZ2xvYmFsJDgudHJhbnNsYXRlKGxhYmVsKSxcbiAgICAgICAgICBpZDogZ2VuZXJhdGUkNignbWVudS1pdGVtJylcbiAgICAgICAgfVxuICAgICAgfSkpLmdldE9yKHt9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICBuYXZDbGFzcyxcbiAgICAgICAgICBzZWxlY3RhYmxlQ2xhc3NcbiAgICAgICAgXSxcbiAgICAgICAgLi4uZG9tVGl0bGVcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJOb3JtYWxJdGVtU3RydWN0dXJlID0gKGluZm8sIHByb3ZpZGVyc0JhY2tzdGFnZSwgcmVuZGVySWNvbnMsIGZhbGxiYWNrSWNvbikgPT4ge1xuICAgICAgY29uc3QgaWNvblNwZWMgPSB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFtpY29uQ2xhc3NdXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVuZGVySWNvbiA9IGljb25OYW1lID0+IHJlbmRlciQzKGljb25OYW1lLCBpY29uU3BlYywgcHJvdmlkZXJzQmFja3N0YWdlLmljb25zLCBmYWxsYmFja0ljb24pO1xuICAgICAgY29uc3QgcmVuZGVyRW1wdHlJY29uID0gKCkgPT4gT3B0aW9uYWwuc29tZSh7IGRvbTogaWNvblNwZWMgfSk7XG4gICAgICBjb25zdCBsZWZ0SWNvbiA9IHJlbmRlckljb25zID8gaW5mby5pY29uQ29udGVudC5tYXAocmVuZGVySWNvbikub3JUaHVuayhyZW5kZXJFbXB0eUljb24pIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgY29uc3QgY2hlY2ttYXJrID0gaW5mby5jaGVja01hcms7XG4gICAgICBjb25zdCB0ZXh0UmVuZGVyID0gT3B0aW9uYWwuZnJvbShpbmZvLm1ldGEpLmZvbGQoKCkgPT4gcmVuZGVyVGV4dCwgbWV0YSA9PiBoYXMkMihtZXRhLCAnc3R5bGUnKSA/IGN1cnJ5KHJlbmRlclN0eWxlZFRleHQsIG1ldGEuc3R5bGUpIDogcmVuZGVyVGV4dCk7XG4gICAgICBjb25zdCBjb250ZW50ID0gaW5mby5odG1sQ29udGVudC5mb2xkKCgpID0+IGluZm8udGV4dENvbnRlbnQubWFwKHRleHRSZW5kZXIpLCBodG1sID0+IE9wdGlvbmFsLnNvbWUocmVuZGVySHRtbChodG1sLCBbdGV4dENsYXNzXSkpKTtcbiAgICAgIGNvbnN0IG1lbnVJdGVtID0ge1xuICAgICAgICBkb206IHJlbmRlckl0ZW1Eb21TdHJ1Y3R1cmUoaW5mby5hcmlhTGFiZWwpLFxuICAgICAgICBvcHRDb21wb25lbnRzOiBbXG4gICAgICAgICAgbGVmdEljb24sXG4gICAgICAgICAgY29udGVudCxcbiAgICAgICAgICBpbmZvLnNob3J0Y3V0Q29udGVudC5tYXAocmVuZGVyU2hvcnRjdXQpLFxuICAgICAgICAgIGNoZWNrbWFyayxcbiAgICAgICAgICBpbmZvLmNhcmV0XG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgICByZXR1cm4gbWVudUl0ZW07XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJJdGVtU3RydWN0dXJlID0gKGluZm8sIHByb3ZpZGVyc0JhY2tzdGFnZSwgcmVuZGVySWNvbnMsIGZhbGxiYWNrSWNvbiA9IE9wdGlvbmFsLm5vbmUoKSkgPT4ge1xuICAgICAgaWYgKGluZm8ucHJlc2V0cyA9PT0gJ2NvbG9yJykge1xuICAgICAgICByZXR1cm4gcmVuZGVyQ29sb3JTdHJ1Y3R1cmUoaW5mbywgcHJvdmlkZXJzQmFja3N0YWdlLCBmYWxsYmFja0ljb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlck5vcm1hbEl0ZW1TdHJ1Y3R1cmUoaW5mbywgcHJvdmlkZXJzQmFja3N0YWdlLCByZW5kZXJJY29ucywgZmFsbGJhY2tJY29uKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdG9vbHRpcEJlaGF2aW91ciA9IChtZXRhLCBzaGFyZWRCYWNrc3RhZ2UpID0+IGdldCRnKG1ldGEsICd0b29sdGlwV29ya2VyJykubWFwKHRvb2x0aXBXb3JrZXIgPT4gW1Rvb2x0aXBwaW5nLmNvbmZpZyh7XG4gICAgICAgIGxhenlTaW5rOiBzaGFyZWRCYWNrc3RhZ2UuZ2V0U2luayxcbiAgICAgICAgdG9vbHRpcERvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtdG9vbHRpcC13b3JrZXItY29udGFpbmVyJ11cbiAgICAgICAgfSxcbiAgICAgICAgdG9vbHRpcENvbXBvbmVudHM6IFtdLFxuICAgICAgICBhbmNob3I6IGNvbXAgPT4gKHtcbiAgICAgICAgICB0eXBlOiAnc3VibWVudScsXG4gICAgICAgICAgaXRlbTogY29tcCxcbiAgICAgICAgICBvdmVycmlkZXM6IHsgbWF4SGVpZ2h0RnVuY3Rpb246IGV4cGFuZGFibGUkMSB9XG4gICAgICAgIH0pLFxuICAgICAgICBtb2RlOiAnZm9sbG93LWhpZ2hsaWdodCcsXG4gICAgICAgIG9uU2hvdzogKGNvbXBvbmVudCwgX3Rvb2x0aXApID0+IHtcbiAgICAgICAgICB0b29sdGlwV29ya2VyKGVsbSA9PiB7XG4gICAgICAgICAgICBUb29sdGlwcGluZy5zZXRDb21wb25lbnRzKGNvbXBvbmVudCwgW2V4dGVybmFsJDEoeyBlbGVtZW50OiBTdWdhckVsZW1lbnQuZnJvbURvbShlbG0pIH0pXSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXSkuZ2V0T3IoW10pO1xuICAgIGNvbnN0IGVuY29kZVRleHQgPSB0ZXh0ID0+IGdsb2JhbCQ3LkRPTS5lbmNvZGUodGV4dCk7XG4gICAgY29uc3QgcmVwbGFjZVRleHQgPSAodGV4dCwgbWF0Y2hUZXh0KSA9PiB7XG4gICAgICBjb25zdCB0cmFuc2xhdGVkID0gZ2xvYmFsJDgudHJhbnNsYXRlKHRleHQpO1xuICAgICAgY29uc3QgZW5jb2RlZCA9IGVuY29kZVRleHQodHJhbnNsYXRlZCk7XG4gICAgICBpZiAobWF0Y2hUZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZXNjYXBlZE1hdGNoUmVnZXggPSBuZXcgUmVnRXhwKGVzY2FwZShtYXRjaFRleHQpLCAnZ2knKTtcbiAgICAgICAgcmV0dXJuIGVuY29kZWQucmVwbGFjZShlc2NhcGVkTWF0Y2hSZWdleCwgbWF0Y2ggPT4gYDxzcGFuIGNsYXNzPVwidG94LWF1dG9jb21wbGV0ZXItaGlnaGxpZ2h0XCI+JHsgbWF0Y2ggfTwvc3Bhbj5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlbmNvZGVkO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVuZGVyQXV0b2NvbXBsZXRlSXRlbSA9IChzcGVjLCBtYXRjaFRleHQsIHVzZVRleHQsIHByZXNldHMsIG9uSXRlbVZhbHVlSGFuZGxlciwgaXRlbVJlc3BvbnNlLCBzaGFyZWRCYWNrc3RhZ2UsIHJlbmRlckljb25zID0gdHJ1ZSkgPT4ge1xuICAgICAgY29uc3Qgc3RydWN0dXJlID0gcmVuZGVySXRlbVN0cnVjdHVyZSh7XG4gICAgICAgIHByZXNldHMsXG4gICAgICAgIHRleHRDb250ZW50OiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGh0bWxDb250ZW50OiB1c2VUZXh0ID8gc3BlYy50ZXh0Lm1hcCh0ZXh0ID0+IHJlcGxhY2VUZXh0KHRleHQsIG1hdGNoVGV4dCkpIDogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICBhcmlhTGFiZWw6IHNwZWMudGV4dCxcbiAgICAgICAgaWNvbkNvbnRlbnQ6IHNwZWMuaWNvbixcbiAgICAgICAgc2hvcnRjdXRDb250ZW50OiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGNoZWNrTWFyazogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICBjYXJldDogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICB2YWx1ZTogc3BlYy52YWx1ZVxuICAgICAgfSwgc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVycywgcmVuZGVySWNvbnMsIHNwZWMuaWNvbik7XG4gICAgICByZXR1cm4gcmVuZGVyQ29tbW9uSXRlbSh7XG4gICAgICAgIGRhdGE6IGJ1aWxkRGF0YShzcGVjKSxcbiAgICAgICAgZW5hYmxlZDogc3BlYy5lbmFibGVkLFxuICAgICAgICBnZXRBcGk6IGNvbnN0YW50JDEoe30pLFxuICAgICAgICBvbkFjdGlvbjogX2FwaSA9PiBvbkl0ZW1WYWx1ZUhhbmRsZXIoc3BlYy52YWx1ZSwgc3BlYy5tZXRhKSxcbiAgICAgICAgb25TZXR1cDogY29uc3RhbnQkMShub29wKSxcbiAgICAgICAgdHJpZ2dlcnNTdWJtZW51OiBmYWxzZSxcbiAgICAgICAgaXRlbUJlaGF2aW91cnM6IHRvb2x0aXBCZWhhdmlvdXIoc3BlYy5tZXRhLCBzaGFyZWRCYWNrc3RhZ2UpXG4gICAgICB9LCBzdHJ1Y3R1cmUsIGl0ZW1SZXNwb25zZSwgc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVycyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlciQyID0gKGl0ZW1zLCBleHRyYXMpID0+IG1hcCQyKGl0ZW1zLCBpdGVtID0+IHtcbiAgICAgIHN3aXRjaCAoaXRlbS50eXBlKSB7XG4gICAgICBjYXNlICdjYXJkY29udGFpbmVyJzpcbiAgICAgICAgcmV0dXJuIHJlbmRlckNvbnRhaW5lcihpdGVtLCByZW5kZXIkMihpdGVtLml0ZW1zLCBleHRyYXMpKTtcbiAgICAgIGNhc2UgJ2NhcmRpbWFnZSc6XG4gICAgICAgIHJldHVybiByZW5kZXJJbWFnZShpdGVtLnNyYywgaXRlbS5jbGFzc2VzLCBpdGVtLmFsdCk7XG4gICAgICBjYXNlICdjYXJkdGV4dCc6XG4gICAgICAgIGNvbnN0IHNob3VsZEhpZ2hsaWdodCA9IGl0ZW0ubmFtZS5leGlzdHMobmFtZSA9PiBjb250YWlucyQyKGV4dHJhcy5jYXJkVGV4dC5oaWdobGlnaHRPbiwgbmFtZSkpO1xuICAgICAgICBjb25zdCBtYXRjaFRleHQgPSBzaG91bGRIaWdobGlnaHQgPyBPcHRpb25hbC5mcm9tKGV4dHJhcy5jYXJkVGV4dC5tYXRjaFRleHQpLmdldE9yKCcnKSA6ICcnO1xuICAgICAgICByZXR1cm4gcmVuZGVySHRtbChyZXBsYWNlVGV4dChpdGVtLnRleHQsIG1hdGNoVGV4dCksIGl0ZW0uY2xhc3Nlcyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVuZGVyQ2FyZE1lbnVJdGVtID0gKHNwZWMsIGl0ZW1SZXNwb25zZSwgc2hhcmVkQmFja3N0YWdlLCBleHRyYXMpID0+IHtcbiAgICAgIGNvbnN0IGdldEFwaSA9IGNvbXBvbmVudCA9PiAoe1xuICAgICAgICBpc0VuYWJsZWQ6ICgpID0+ICFEaXNhYmxpbmcuaXNEaXNhYmxlZChjb21wb25lbnQpLFxuICAgICAgICBzZXRFbmFibGVkOiBzdGF0ZSA9PiB7XG4gICAgICAgICAgRGlzYWJsaW5nLnNldChjb21wb25lbnQsICFzdGF0ZSk7XG4gICAgICAgICAgZWFjaCQxKGRlc2NlbmRhbnRzKGNvbXBvbmVudC5lbGVtZW50LCAnKicpLCBlbG0gPT4ge1xuICAgICAgICAgICAgY29tcG9uZW50LmdldFN5c3RlbSgpLmdldEJ5RG9tKGVsbSkuZWFjaChjb21wID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNvbXAuaGFzQ29uZmlndXJlZChEaXNhYmxpbmcpKSB7XG4gICAgICAgICAgICAgICAgRGlzYWJsaW5nLnNldChjb21wLCAhc3RhdGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzdHJ1Y3R1cmUgPSB7XG4gICAgICAgIGRvbTogcmVuZGVySXRlbURvbVN0cnVjdHVyZShzcGVjLmxhYmVsKSxcbiAgICAgICAgb3B0Q29tcG9uZW50czogW09wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAgICAgICBjb250YWluZXJDbGFzcyxcbiAgICAgICAgICAgICAgICBjb250YWluZXJSb3dDbGFzc1xuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcG9uZW50czogcmVuZGVyJDIoc3BlYy5pdGVtcywgZXh0cmFzKVxuICAgICAgICAgIH0pXVxuICAgICAgfTtcbiAgICAgIHJldHVybiByZW5kZXJDb21tb25JdGVtKHtcbiAgICAgICAgZGF0YTogYnVpbGREYXRhKHtcbiAgICAgICAgICB0ZXh0OiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgICAgLi4uc3BlY1xuICAgICAgICB9KSxcbiAgICAgICAgZW5hYmxlZDogc3BlYy5lbmFibGVkLFxuICAgICAgICBnZXRBcGksXG4gICAgICAgIG9uQWN0aW9uOiBzcGVjLm9uQWN0aW9uLFxuICAgICAgICBvblNldHVwOiBzcGVjLm9uU2V0dXAsXG4gICAgICAgIHRyaWdnZXJzU3VibWVudTogZmFsc2UsXG4gICAgICAgIGl0ZW1CZWhhdmlvdXJzOiBPcHRpb25hbC5mcm9tKGV4dHJhcy5pdGVtQmVoYXZpb3VycykuZ2V0T3IoW10pXG4gICAgICB9LCBzdHJ1Y3R1cmUsIGl0ZW1SZXNwb25zZSwgc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVycyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlckNob2ljZUl0ZW0gPSAoc3BlYywgdXNlVGV4dCwgcHJlc2V0cywgb25JdGVtVmFsdWVIYW5kbGVyLCBpc1NlbGVjdGVkLCBpdGVtUmVzcG9uc2UsIHByb3ZpZGVyc0JhY2tzdGFnZSwgcmVuZGVySWNvbnMgPSB0cnVlKSA9PiB7XG4gICAgICBjb25zdCBnZXRBcGkgPSBjb21wb25lbnQgPT4gKHtcbiAgICAgICAgc2V0QWN0aXZlOiBzdGF0ZSA9PiB7XG4gICAgICAgICAgVG9nZ2xpbmcuc2V0KGNvbXBvbmVudCwgc3RhdGUpO1xuICAgICAgICB9LFxuICAgICAgICBpc0FjdGl2ZTogKCkgPT4gVG9nZ2xpbmcuaXNPbihjb21wb25lbnQpLFxuICAgICAgICBpc0VuYWJsZWQ6ICgpID0+ICFEaXNhYmxpbmcuaXNEaXNhYmxlZChjb21wb25lbnQpLFxuICAgICAgICBzZXRFbmFibGVkOiBzdGF0ZSA9PiBEaXNhYmxpbmcuc2V0KGNvbXBvbmVudCwgIXN0YXRlKVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzdHJ1Y3R1cmUgPSByZW5kZXJJdGVtU3RydWN0dXJlKHtcbiAgICAgICAgcHJlc2V0cyxcbiAgICAgICAgdGV4dENvbnRlbnQ6IHVzZVRleHQgPyBzcGVjLnRleHQgOiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGh0bWxDb250ZW50OiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGFyaWFMYWJlbDogc3BlYy50ZXh0LFxuICAgICAgICBpY29uQ29udGVudDogc3BlYy5pY29uLFxuICAgICAgICBzaG9ydGN1dENvbnRlbnQ6IHVzZVRleHQgPyBzcGVjLnNob3J0Y3V0IDogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICBjaGVja01hcms6IHVzZVRleHQgPyBPcHRpb25hbC5zb21lKHJlbmRlckNoZWNrbWFyayhwcm92aWRlcnNCYWNrc3RhZ2UuaWNvbnMpKSA6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICAgY2FyZXQ6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICAgdmFsdWU6IHNwZWMudmFsdWVcbiAgICAgIH0sIHByb3ZpZGVyc0JhY2tzdGFnZSwgcmVuZGVySWNvbnMpO1xuICAgICAgcmV0dXJuIGRlZXBNZXJnZShyZW5kZXJDb21tb25JdGVtKHtcbiAgICAgICAgZGF0YTogYnVpbGREYXRhKHNwZWMpLFxuICAgICAgICBlbmFibGVkOiBzcGVjLmVuYWJsZWQsXG4gICAgICAgIGdldEFwaSxcbiAgICAgICAgb25BY3Rpb246IF9hcGkgPT4gb25JdGVtVmFsdWVIYW5kbGVyKHNwZWMudmFsdWUpLFxuICAgICAgICBvblNldHVwOiBhcGkgPT4ge1xuICAgICAgICAgIGFwaS5zZXRBY3RpdmUoaXNTZWxlY3RlZCk7XG4gICAgICAgICAgcmV0dXJuIG5vb3A7XG4gICAgICAgIH0sXG4gICAgICAgIHRyaWdnZXJzU3VibWVudTogZmFsc2UsXG4gICAgICAgIGl0ZW1CZWhhdmlvdXJzOiBbXVxuICAgICAgfSwgc3RydWN0dXJlLCBpdGVtUmVzcG9uc2UsIHByb3ZpZGVyc0JhY2tzdGFnZSksIHtcbiAgICAgICAgdG9nZ2xpbmc6IHtcbiAgICAgICAgICB0b2dnbGVDbGFzczogdGlja2VkQ2xhc3MsXG4gICAgICAgICAgdG9nZ2xlT25FeGVjdXRlOiBmYWxzZSxcbiAgICAgICAgICBzZWxlY3RlZDogc3BlYy5hY3RpdmUsXG4gICAgICAgICAgZXhjbHVzaXZlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBwYXJ0cyRmID0gZ2VuZXJhdGUkMyhvd25lciQyKCksIHBhcnRzJGgoKSk7XG5cbiAgICBjb25zdCBoZXhDb2xvdXIgPSB2YWx1ZSA9PiAoeyB2YWx1ZTogbm9ybWFsaXplSGV4KHZhbHVlKSB9KTtcbiAgICBjb25zdCBzaG9ydGhhbmRSZWdleCA9IC9eIz8oW2EtZlxcZF0pKFthLWZcXGRdKShbYS1mXFxkXSkkL2k7XG4gICAgY29uc3QgbG9uZ2Zvcm1SZWdleCA9IC9eIz8oW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkkL2k7XG4gICAgY29uc3QgaXNIZXhTdHJpbmcgPSBoZXggPT4gc2hvcnRoYW5kUmVnZXgudGVzdChoZXgpIHx8IGxvbmdmb3JtUmVnZXgudGVzdChoZXgpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZUhleCA9IGhleCA9PiByZW1vdmVMZWFkaW5nKGhleCwgJyMnKS50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IGZyb21TdHJpbmckMSA9IGhleCA9PiBpc0hleFN0cmluZyhoZXgpID8gT3B0aW9uYWwuc29tZSh7IHZhbHVlOiBub3JtYWxpemVIZXgoaGV4KSB9KSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICBjb25zdCBnZXRMb25nRm9ybSA9IGhleCA9PiB7XG4gICAgICBjb25zdCBoZXhTdHJpbmcgPSBoZXgudmFsdWUucmVwbGFjZShzaG9ydGhhbmRSZWdleCwgKG0sIHIsIGcsIGIpID0+IHIgKyByICsgZyArIGcgKyBiICsgYik7XG4gICAgICByZXR1cm4geyB2YWx1ZTogaGV4U3RyaW5nIH07XG4gICAgfTtcbiAgICBjb25zdCBleHRyYWN0VmFsdWVzID0gaGV4ID0+IHtcbiAgICAgIGNvbnN0IGxvbmdGb3JtID0gZ2V0TG9uZ0Zvcm0oaGV4KTtcbiAgICAgIGNvbnN0IHNwbGl0Rm9ybSA9IGxvbmdmb3JtUmVnZXguZXhlYyhsb25nRm9ybS52YWx1ZSk7XG4gICAgICByZXR1cm4gc3BsaXRGb3JtID09PSBudWxsID8gW1xuICAgICAgICAnRkZGRkZGJyxcbiAgICAgICAgJ0ZGJyxcbiAgICAgICAgJ0ZGJyxcbiAgICAgICAgJ0ZGJ1xuICAgICAgXSA6IHNwbGl0Rm9ybTtcbiAgICB9O1xuICAgIGNvbnN0IHRvSGV4ID0gY29tcG9uZW50ID0+IHtcbiAgICAgIGNvbnN0IGhleCA9IGNvbXBvbmVudC50b1N0cmluZygxNik7XG4gICAgICByZXR1cm4gKGhleC5sZW5ndGggPT09IDEgPyAnMCcgKyBoZXggOiBoZXgpLnRvVXBwZXJDYXNlKCk7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tUmdiYSA9IHJnYmFDb2xvdXIgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0b0hleChyZ2JhQ29sb3VyLnJlZCkgKyB0b0hleChyZ2JhQ29sb3VyLmdyZWVuKSArIHRvSGV4KHJnYmFDb2xvdXIuYmx1ZSk7XG4gICAgICByZXR1cm4gaGV4Q29sb3VyKHZhbHVlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbWluID0gTWF0aC5taW47XG4gICAgY29uc3QgbWF4ID0gTWF0aC5tYXg7XG4gICAgY29uc3Qgcm91bmQkMSA9IE1hdGgucm91bmQ7XG4gICAgY29uc3QgcmdiUmVnZXggPSAvXlxccypyZ2JcXHMqXFwoXFxzKihcXGQrKVxccyosXFxzKihcXGQrKVxccyosXFxzKihcXGQrKVxccypcXClcXHMqJC9pO1xuICAgIGNvbnN0IHJnYmFSZWdleCA9IC9eXFxzKnJnYmFcXHMqXFwoXFxzKihcXGQrKVxccyosXFxzKihcXGQrKVxccyosXFxzKihcXGQrKVxccyosXFxzKihcXGQ/KD86XFwuXFxkKyk/KVxccypcXClcXHMqJC9pO1xuICAgIGNvbnN0IHJnYmFDb2xvdXIgPSAocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpID0+ICh7XG4gICAgICByZWQsXG4gICAgICBncmVlbixcbiAgICAgIGJsdWUsXG4gICAgICBhbHBoYVxuICAgIH0pO1xuICAgIGNvbnN0IGlzUmdiYUNvbXBvbmVudCA9IHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IG51bSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgICByZXR1cm4gbnVtLnRvU3RyaW5nKCkgPT09IHZhbHVlICYmIG51bSA+PSAwICYmIG51bSA8PSAyNTU7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tSHN2ID0gaHN2ID0+IHtcbiAgICAgIGxldCByO1xuICAgICAgbGV0IGc7XG4gICAgICBsZXQgYjtcbiAgICAgIGNvbnN0IGh1ZSA9IChoc3YuaHVlIHx8IDApICUgMzYwO1xuICAgICAgbGV0IHNhdHVyYXRpb24gPSBoc3Yuc2F0dXJhdGlvbiAvIDEwMDtcbiAgICAgIGxldCBicmlnaHRuZXNzID0gaHN2LnZhbHVlIC8gMTAwO1xuICAgICAgc2F0dXJhdGlvbiA9IG1heCgwLCBtaW4oc2F0dXJhdGlvbiwgMSkpO1xuICAgICAgYnJpZ2h0bmVzcyA9IG1heCgwLCBtaW4oYnJpZ2h0bmVzcywgMSkpO1xuICAgICAgaWYgKHNhdHVyYXRpb24gPT09IDApIHtcbiAgICAgICAgciA9IGcgPSBiID0gcm91bmQkMSgyNTUgKiBicmlnaHRuZXNzKTtcbiAgICAgICAgcmV0dXJuIHJnYmFDb2xvdXIociwgZywgYiwgMSk7XG4gICAgICB9XG4gICAgICBjb25zdCBzaWRlID0gaHVlIC8gNjA7XG4gICAgICBjb25zdCBjaHJvbWEgPSBicmlnaHRuZXNzICogc2F0dXJhdGlvbjtcbiAgICAgIGNvbnN0IHggPSBjaHJvbWEgKiAoMSAtIE1hdGguYWJzKHNpZGUgJSAyIC0gMSkpO1xuICAgICAgY29uc3QgbWF0Y2ggPSBicmlnaHRuZXNzIC0gY2hyb21hO1xuICAgICAgc3dpdGNoIChNYXRoLmZsb29yKHNpZGUpKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHIgPSBjaHJvbWE7XG4gICAgICAgIGcgPSB4O1xuICAgICAgICBiID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHIgPSB4O1xuICAgICAgICBnID0gY2hyb21hO1xuICAgICAgICBiID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHIgPSAwO1xuICAgICAgICBnID0gY2hyb21hO1xuICAgICAgICBiID0geDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHIgPSAwO1xuICAgICAgICBnID0geDtcbiAgICAgICAgYiA9IGNocm9tYTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDQ6XG4gICAgICAgIHIgPSB4O1xuICAgICAgICBnID0gMDtcbiAgICAgICAgYiA9IGNocm9tYTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDU6XG4gICAgICAgIHIgPSBjaHJvbWE7XG4gICAgICAgIGcgPSAwO1xuICAgICAgICBiID0geDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByID0gZyA9IGIgPSAwO1xuICAgICAgfVxuICAgICAgciA9IHJvdW5kJDEoMjU1ICogKHIgKyBtYXRjaCkpO1xuICAgICAgZyA9IHJvdW5kJDEoMjU1ICogKGcgKyBtYXRjaCkpO1xuICAgICAgYiA9IHJvdW5kJDEoMjU1ICogKGIgKyBtYXRjaCkpO1xuICAgICAgcmV0dXJuIHJnYmFDb2xvdXIociwgZywgYiwgMSk7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tSGV4ID0gaGV4Q29sb3VyID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3RWYWx1ZXMoaGV4Q29sb3VyKTtcbiAgICAgIGNvbnN0IHJlZCA9IHBhcnNlSW50KHJlc3VsdFsxXSwgMTYpO1xuICAgICAgY29uc3QgZ3JlZW4gPSBwYXJzZUludChyZXN1bHRbMl0sIDE2KTtcbiAgICAgIGNvbnN0IGJsdWUgPSBwYXJzZUludChyZXN1bHRbM10sIDE2KTtcbiAgICAgIHJldHVybiByZ2JhQ29sb3VyKHJlZCwgZ3JlZW4sIGJsdWUsIDEpO1xuICAgIH07XG4gICAgY29uc3QgZnJvbVN0cmluZ1ZhbHVlcyA9IChyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSkgPT4ge1xuICAgICAgY29uc3QgciA9IHBhcnNlSW50KHJlZCwgMTApO1xuICAgICAgY29uc3QgZyA9IHBhcnNlSW50KGdyZWVuLCAxMCk7XG4gICAgICBjb25zdCBiID0gcGFyc2VJbnQoYmx1ZSwgMTApO1xuICAgICAgY29uc3QgYSA9IHBhcnNlRmxvYXQoYWxwaGEpO1xuICAgICAgcmV0dXJuIHJnYmFDb2xvdXIociwgZywgYiwgYSk7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tU3RyaW5nID0gcmdiYVN0cmluZyA9PiB7XG4gICAgICBpZiAocmdiYVN0cmluZyA9PT0gJ3RyYW5zcGFyZW50Jykge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShyZ2JhQ29sb3VyKDAsIDAsIDAsIDApKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJnYk1hdGNoID0gcmdiUmVnZXguZXhlYyhyZ2JhU3RyaW5nKTtcbiAgICAgIGlmIChyZ2JNYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShmcm9tU3RyaW5nVmFsdWVzKHJnYk1hdGNoWzFdLCByZ2JNYXRjaFsyXSwgcmdiTWF0Y2hbM10sICcxJykpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmdiYU1hdGNoID0gcmdiYVJlZ2V4LmV4ZWMocmdiYVN0cmluZyk7XG4gICAgICBpZiAocmdiYU1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGZyb21TdHJpbmdWYWx1ZXMocmdiYU1hdGNoWzFdLCByZ2JhTWF0Y2hbMl0sIHJnYmFNYXRjaFszXSwgcmdiYU1hdGNoWzRdKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgdG9TdHJpbmcgPSByZ2JhID0+IGByZ2JhKCR7IHJnYmEucmVkIH0sJHsgcmdiYS5ncmVlbiB9LCR7IHJnYmEuYmx1ZSB9LCR7IHJnYmEuYWxwaGEgfSlgO1xuICAgIGNvbnN0IHJlZCA9IHJnYmFDb2xvdXIoMjU1LCAwLCAwLCAxKTtcblxuICAgIGNvbnN0IGZpcmVTa2luTG9hZGVkJDEgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdTa2luTG9hZGVkJyk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJlU2tpbkxvYWRFcnJvciQxID0gKGVkaXRvciwgZXJyb3IpID0+IHtcbiAgICAgIGVkaXRvci5kaXNwYXRjaCgnU2tpbkxvYWRFcnJvcicsIGVycm9yKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVSZXNpemVFZGl0b3IgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdSZXNpemVFZGl0b3InKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVSZXNpemVDb250ZW50ID0gKGVkaXRvciwgZSkgPT4ge1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdSZXNpemVDb250ZW50JywgZSk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJlU2Nyb2xsQ29udGVudCA9IChlZGl0b3IsIGUpID0+IHtcbiAgICAgIGVkaXRvci5kaXNwYXRjaCgnU2Nyb2xsQ29udGVudCcsIGUpO1xuICAgIH07XG4gICAgY29uc3QgZmlyZVRleHRDb2xvckNoYW5nZSA9IChlZGl0b3IsIGRhdGEpID0+IHtcbiAgICAgIGVkaXRvci5kaXNwYXRjaCgnVGV4dENvbG9yQ2hhbmdlJywgZGF0YSk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJlQWZ0ZXJQcm9ncmVzc1N0YXRlID0gKGVkaXRvciwgc3RhdGUpID0+IHtcbiAgICAgIGVkaXRvci5kaXNwYXRjaCgnQWZ0ZXJQcm9ncmVzc1N0YXRlJywgeyBzdGF0ZSB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVSZXNvbHZlTmFtZSA9IChlZGl0b3IsIG5vZGUpID0+IGVkaXRvci5kaXNwYXRjaCgnUmVzb2x2ZU5hbWUnLCB7XG4gICAgICBuYW1lOiBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICB0YXJnZXQ6IG5vZGVcbiAgICB9KTtcbiAgICBjb25zdCBmaXJlVG9nZ2xlVG9vbGJhckRyYXdlciA9IChlZGl0b3IsIHN0YXRlKSA9PiB7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ1RvZ2dsZVRvb2xiYXJEcmF3ZXInLCB7IHN0YXRlIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBjb21wb3NlVW5iaW5kZXJzID0gKGYsIGcpID0+ICgpID0+IHtcbiAgICAgIGYoKTtcbiAgICAgIGcoKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uU2V0dXBFZGl0YWJsZVRvZ2dsZSA9IGVkaXRvciA9PiBvblNldHVwRXZlbnQoZWRpdG9yLCAnTm9kZUNoYW5nZScsIGFwaSA9PiB7XG4gICAgICBhcGkuc2V0RW5hYmxlZChlZGl0b3Iuc2VsZWN0aW9uLmlzRWRpdGFibGUoKSk7XG4gICAgfSk7XG4gICAgY29uc3Qgb25TZXR1cEZvcm1hdFRvZ2dsZSA9IChlZGl0b3IsIG5hbWUpID0+IGFwaSA9PiB7XG4gICAgICBjb25zdCBib3VuZEZvcm1hdENoYW5nZUNhbGxiYWNrID0gdW5iaW5kYWJsZSgpO1xuICAgICAgY29uc3QgaW5pdCA9ICgpID0+IHtcbiAgICAgICAgYXBpLnNldEFjdGl2ZShlZGl0b3IuZm9ybWF0dGVyLm1hdGNoKG5hbWUpKTtcbiAgICAgICAgY29uc3QgYmluZGluZyA9IGVkaXRvci5mb3JtYXR0ZXIuZm9ybWF0Q2hhbmdlZChuYW1lLCBhcGkuc2V0QWN0aXZlKTtcbiAgICAgICAgYm91bmRGb3JtYXRDaGFuZ2VDYWxsYmFjay5zZXQoYmluZGluZyk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLmluaXRpYWxpemVkID8gaW5pdCgpIDogZWRpdG9yLm9uY2UoJ2luaXQnLCBpbml0KTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5vZmYoJ2luaXQnLCBpbml0KTtcbiAgICAgICAgYm91bmRGb3JtYXRDaGFuZ2VDYWxsYmFjay5jbGVhcigpO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG9uU2V0dXBTdGF0ZVRvZ2dsZSA9IChlZGl0b3IsIG5hbWUpID0+IGFwaSA9PiB7XG4gICAgICBjb25zdCB1bmJpbmRFZGl0YWJsZVRvb2dsZSA9IG9uU2V0dXBFZGl0YWJsZVRvZ2dsZShlZGl0b3IpKGFwaSk7XG4gICAgICBjb25zdCB1bmJpbmRGb3JtYXRUb2dnbGUgPSBvblNldHVwRm9ybWF0VG9nZ2xlKGVkaXRvciwgbmFtZSkoYXBpKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHVuYmluZEVkaXRhYmxlVG9vZ2xlKCk7XG4gICAgICAgIHVuYmluZEZvcm1hdFRvZ2dsZSgpO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG9uU2V0dXBFdmVudCA9IChlZGl0b3IsIGV2ZW50LCBmKSA9PiBhcGkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlRXZlbnQgPSAoKSA9PiBmKGFwaSk7XG4gICAgICBjb25zdCBpbml0ID0gKCkgPT4ge1xuICAgICAgICBmKGFwaSk7XG4gICAgICAgIGVkaXRvci5vbihldmVudCwgaGFuZGxlRXZlbnQpO1xuICAgICAgfTtcbiAgICAgIGVkaXRvci5pbml0aWFsaXplZCA/IGluaXQoKSA6IGVkaXRvci5vbmNlKCdpbml0JywgaW5pdCk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBlZGl0b3Iub2ZmKCdpbml0JywgaW5pdCk7XG4gICAgICAgIGVkaXRvci5vZmYoZXZlbnQsIGhhbmRsZUV2ZW50KTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBvbkFjdGlvblRvZ2dsZUZvcm1hdCQxID0gZWRpdG9yID0+IHJhd0l0ZW0gPT4gKCkgPT4ge1xuICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnbWNlVG9nZ2xlRm9ybWF0JywgZmFsc2UsIHJhd0l0ZW0uZm9ybWF0KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25BY3Rpb25FeGVjQ29tbWFuZCA9IChlZGl0b3IsIGNvbW1hbmQpID0+ICgpID0+IGVkaXRvci5leGVjQ29tbWFuZChjb21tYW5kKTtcblxuICAgIHZhciBnbG9iYWwkNCA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLnV0aWwuTG9jYWxTdG9yYWdlJyk7XG5cbiAgICBjb25zdCBjYWNoZVN0b3JhZ2UgPSB7fTtcbiAgICBjb25zdCBDb2xvckNhY2hlID0gKHN0b3JhZ2VJZCwgbWF4ID0gMTApID0+IHtcbiAgICAgIGNvbnN0IHN0b3JhZ2VTdHJpbmcgPSBnbG9iYWwkNC5nZXRJdGVtKHN0b3JhZ2VJZCk7XG4gICAgICBjb25zdCBsb2NhbHN0b3JhZ2UgPSBpc1N0cmluZyhzdG9yYWdlU3RyaW5nKSA/IEpTT04ucGFyc2Uoc3RvcmFnZVN0cmluZykgOiBbXTtcbiAgICAgIGNvbnN0IHBydW5lID0gbGlzdCA9PiB7XG4gICAgICAgIGNvbnN0IGRpZmYgPSBtYXggLSBsaXN0Lmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGRpZmYgPCAwID8gbGlzdC5zbGljZSgwLCBtYXgpIDogbGlzdDtcbiAgICAgIH07XG4gICAgICBjb25zdCBjYWNoZSA9IHBydW5lKGxvY2Fsc3RvcmFnZSk7XG4gICAgICBjb25zdCBhZGQgPSBrZXkgPT4ge1xuICAgICAgICBpbmRleE9mKGNhY2hlLCBrZXkpLmVhY2gocmVtb3ZlKTtcbiAgICAgICAgY2FjaGUudW5zaGlmdChrZXkpO1xuICAgICAgICBpZiAoY2FjaGUubGVuZ3RoID4gbWF4KSB7XG4gICAgICAgICAgY2FjaGUucG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2xvYmFsJDQuc2V0SXRlbShzdG9yYWdlSWQsIEpTT04uc3RyaW5naWZ5KGNhY2hlKSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVtb3ZlID0gaWR4ID0+IHtcbiAgICAgICAgY2FjaGUuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc3RhdGUgPSAoKSA9PiBjYWNoZS5zbGljZSgwKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFkZCxcbiAgICAgICAgc3RhdGVcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBnZXRDYWNoZUZvcklkID0gaWQgPT4gZ2V0JGcoY2FjaGVTdG9yYWdlLCBpZCkuZ2V0T3JUaHVuaygoKSA9PiB7XG4gICAgICBjb25zdCBzdG9yYWdlSWQgPSBgdGlueW1jZS1jdXN0b20tY29sb3JzLSR7IGlkIH1gO1xuICAgICAgY29uc3QgY3VycmVudERhdGEgPSBnbG9iYWwkNC5nZXRJdGVtKHN0b3JhZ2VJZCk7XG4gICAgICBpZiAoaXNOdWxsYWJsZShjdXJyZW50RGF0YSkpIHtcbiAgICAgICAgY29uc3QgbGVnYWN5RGVmYXVsdCA9IGdsb2JhbCQ0LmdldEl0ZW0oJ3RpbnltY2UtY3VzdG9tLWNvbG9ycycpO1xuICAgICAgICBnbG9iYWwkNC5zZXRJdGVtKHN0b3JhZ2VJZCwgaXNOb25OdWxsYWJsZShsZWdhY3lEZWZhdWx0KSA/IGxlZ2FjeURlZmF1bHQgOiAnW10nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0b3JhZ2UgPSBDb2xvckNhY2hlKHN0b3JhZ2VJZCwgMTApO1xuICAgICAgY2FjaGVTdG9yYWdlW2lkXSA9IHN0b3JhZ2U7XG4gICAgICByZXR1cm4gc3RvcmFnZTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRDdXJyZW50Q29sb3JzID0gaWQgPT4gbWFwJDIoZ2V0Q2FjaGVGb3JJZChpZCkuc3RhdGUoKSwgY29sb3IgPT4gKHtcbiAgICAgIHR5cGU6ICdjaG9pY2VpdGVtJyxcbiAgICAgIHRleHQ6IGNvbG9yLFxuICAgICAgaWNvbjogJ2NoZWNrbWFyaycsXG4gICAgICB2YWx1ZTogY29sb3JcbiAgICB9KSk7XG4gICAgY29uc3QgYWRkQ29sb3IgPSAoaWQsIGNvbG9yKSA9PiB7XG4gICAgICBnZXRDYWNoZUZvcklkKGlkKS5hZGQoY29sb3IpO1xuICAgIH07XG5cbiAgICBjb25zdCBoc3ZDb2xvdXIgPSAoaHVlLCBzYXR1cmF0aW9uLCB2YWx1ZSkgPT4gKHtcbiAgICAgIGh1ZSxcbiAgICAgIHNhdHVyYXRpb24sXG4gICAgICB2YWx1ZVxuICAgIH0pO1xuICAgIGNvbnN0IGZyb21SZ2IgPSByZ2JhQ29sb3VyID0+IHtcbiAgICAgIGxldCBoID0gMDtcbiAgICAgIGxldCBzID0gMDtcbiAgICAgIGxldCB2ID0gMDtcbiAgICAgIGNvbnN0IHIgPSByZ2JhQ29sb3VyLnJlZCAvIDI1NTtcbiAgICAgIGNvbnN0IGcgPSByZ2JhQ29sb3VyLmdyZWVuIC8gMjU1O1xuICAgICAgY29uc3QgYiA9IHJnYmFDb2xvdXIuYmx1ZSAvIDI1NTtcbiAgICAgIGNvbnN0IG1pblJHQiA9IE1hdGgubWluKHIsIE1hdGgubWluKGcsIGIpKTtcbiAgICAgIGNvbnN0IG1heFJHQiA9IE1hdGgubWF4KHIsIE1hdGgubWF4KGcsIGIpKTtcbiAgICAgIGlmIChtaW5SR0IgPT09IG1heFJHQikge1xuICAgICAgICB2ID0gbWluUkdCO1xuICAgICAgICByZXR1cm4gaHN2Q29sb3VyKDAsIDAsIHYgKiAxMDApO1xuICAgICAgfVxuICAgICAgY29uc3QgZCA9IHIgPT09IG1pblJHQiA/IGcgLSBiIDogYiA9PT0gbWluUkdCID8gciAtIGcgOiBiIC0gcjtcbiAgICAgIGggPSByID09PSBtaW5SR0IgPyAzIDogYiA9PT0gbWluUkdCID8gMSA6IDU7XG4gICAgICBoID0gNjAgKiAoaCAtIGQgLyAobWF4UkdCIC0gbWluUkdCKSk7XG4gICAgICBzID0gKG1heFJHQiAtIG1pblJHQikgLyBtYXhSR0I7XG4gICAgICB2ID0gbWF4UkdCO1xuICAgICAgcmV0dXJuIGhzdkNvbG91cihNYXRoLnJvdW5kKGgpLCBNYXRoLnJvdW5kKHMgKiAxMDApLCBNYXRoLnJvdW5kKHYgKiAxMDApKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGV4VG9Ic3YgPSBoZXggPT4gZnJvbVJnYihmcm9tSGV4KGhleCkpO1xuICAgIGNvbnN0IGhzdlRvSGV4ID0gaHN2ID0+IGZyb21SZ2JhKGZyb21Ic3YoaHN2KSk7XG4gICAgY29uc3QgYW55VG9IZXggPSBjb2xvciA9PiBmcm9tU3RyaW5nJDEoY29sb3IpLm9yVGh1bmsoKCkgPT4gZnJvbVN0cmluZyhjb2xvcikubWFwKGZyb21SZ2JhKSkuZ2V0T3JUaHVuaygoKSA9PiB7XG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgIGNhbnZhcy5oZWlnaHQgPSAxO1xuICAgICAgY2FudmFzLndpZHRoID0gMTtcbiAgICAgIGNvbnN0IGNhbnZhc0NvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgIGNhbnZhc0NvbnRleHQuY2xlYXJSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgICBjYW52YXNDb250ZXh0LmZpbGxTdHlsZSA9ICcjRkZGRkZGJztcbiAgICAgIGNhbnZhc0NvbnRleHQuZmlsbFN0eWxlID0gY29sb3I7XG4gICAgICBjYW52YXNDb250ZXh0LmZpbGxSZWN0KDAsIDAsIDEsIDEpO1xuICAgICAgY29uc3QgcmdiYSA9IGNhbnZhc0NvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIDEsIDEpLmRhdGE7XG4gICAgICBjb25zdCByID0gcmdiYVswXTtcbiAgICAgIGNvbnN0IGcgPSByZ2JhWzFdO1xuICAgICAgY29uc3QgYiA9IHJnYmFbMl07XG4gICAgICBjb25zdCBhID0gcmdiYVszXTtcbiAgICAgIHJldHVybiBmcm9tUmdiYShyZ2JhQ29sb3VyKHIsIGcsIGIsIGEpKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGZvcmVncm91bmRJZCA9ICdmb3JlY29sb3InO1xuICAgIGNvbnN0IGJhY2tncm91bmRJZCA9ICdoaWxpdGVjb2xvcic7XG4gICAgY29uc3QgZmFsbGJhY2tDb2xzID0gNTtcbiAgICBjb25zdCBtYXBDb2xvcnMgPSBjb2xvck1hcCA9PiB7XG4gICAgICBjb25zdCBjb2xvcnMgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sb3JNYXAubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgY29sb3JzLnB1c2goe1xuICAgICAgICAgIHRleHQ6IGNvbG9yTWFwW2kgKyAxXSxcbiAgICAgICAgICB2YWx1ZTogJyMnICsgYW55VG9IZXgoY29sb3JNYXBbaV0pLnZhbHVlLFxuICAgICAgICAgIGljb246ICdjaGVja21hcmsnLFxuICAgICAgICAgIHR5cGU6ICdjaG9pY2VpdGVtJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb2xvcnM7XG4gICAgfTtcbiAgICBjb25zdCBvcHRpb24kMSA9IG5hbWUgPT4gZWRpdG9yID0+IGVkaXRvci5vcHRpb25zLmdldChuYW1lKTtcbiAgICBjb25zdCBmYWxsYmFja0NvbG9yID0gJyMwMDAwMDAnO1xuICAgIGNvbnN0IHJlZ2lzdGVyJGQgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgcmVnaXN0ZXJPcHRpb24gPSBlZGl0b3Iub3B0aW9ucy5yZWdpc3RlcjtcbiAgICAgIGNvbnN0IGNvbG9yUHJvY2Vzc29yID0gdmFsdWUgPT4ge1xuICAgICAgICBpZiAoaXNBcnJheU9mKHZhbHVlLCBpc1N0cmluZykpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IG1hcENvbG9ycyh2YWx1ZSksXG4gICAgICAgICAgICB2YWxpZDogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdNdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MuJ1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBjb2xvckNvbHNQcm9jZXNzb3IgPSB2YWx1ZSA9PiB7XG4gICAgICAgIGlmIChpc051bWJlcih2YWx1ZSkgJiYgdmFsdWUgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdmFsaWQ6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiAnTXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlci4nXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdjb2xvcl9tYXAnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogY29sb3JQcm9jZXNzb3IsXG4gICAgICAgIGRlZmF1bHQ6IFtcbiAgICAgICAgICAnI0JGRUREMicsXG4gICAgICAgICAgJ0xpZ2h0IEdyZWVuJyxcbiAgICAgICAgICAnI0ZCRUVCOCcsXG4gICAgICAgICAgJ0xpZ2h0IFllbGxvdycsXG4gICAgICAgICAgJyNGOENBQzYnLFxuICAgICAgICAgICdMaWdodCBSZWQnLFxuICAgICAgICAgICcjRUNDQUZBJyxcbiAgICAgICAgICAnTGlnaHQgUHVycGxlJyxcbiAgICAgICAgICAnI0MyRTBGNCcsXG4gICAgICAgICAgJ0xpZ2h0IEJsdWUnLFxuICAgICAgICAgICcjMkRDMjZCJyxcbiAgICAgICAgICAnR3JlZW4nLFxuICAgICAgICAgICcjRjFDNDBGJyxcbiAgICAgICAgICAnWWVsbG93JyxcbiAgICAgICAgICAnI0UwM0UyRCcsXG4gICAgICAgICAgJ1JlZCcsXG4gICAgICAgICAgJyNCOTZBRDknLFxuICAgICAgICAgICdQdXJwbGUnLFxuICAgICAgICAgICcjMzU5OERCJyxcbiAgICAgICAgICAnQmx1ZScsXG4gICAgICAgICAgJyMxNjkxNzknLFxuICAgICAgICAgICdEYXJrIFR1cnF1b2lzZScsXG4gICAgICAgICAgJyNFNjdFMjMnLFxuICAgICAgICAgICdPcmFuZ2UnLFxuICAgICAgICAgICcjQkEzNzJBJyxcbiAgICAgICAgICAnRGFyayBSZWQnLFxuICAgICAgICAgICcjODQzRkExJyxcbiAgICAgICAgICAnRGFyayBQdXJwbGUnLFxuICAgICAgICAgICcjMjM2RkExJyxcbiAgICAgICAgICAnRGFyayBCbHVlJyxcbiAgICAgICAgICAnI0VDRjBGMScsXG4gICAgICAgICAgJ0xpZ2h0IEdyYXknLFxuICAgICAgICAgICcjQ0VENEQ5JyxcbiAgICAgICAgICAnTWVkaXVtIEdyYXknLFxuICAgICAgICAgICcjOTVBNUE2JyxcbiAgICAgICAgICAnR3JheScsXG4gICAgICAgICAgJyM3RThDOEQnLFxuICAgICAgICAgICdEYXJrIEdyYXknLFxuICAgICAgICAgICcjMzQ0OTVFJyxcbiAgICAgICAgICAnTmF2eSBCbHVlJyxcbiAgICAgICAgICAnIzAwMDAwMCcsXG4gICAgICAgICAgJ0JsYWNrJyxcbiAgICAgICAgICAnI2ZmZmZmZicsXG4gICAgICAgICAgJ1doaXRlJ1xuICAgICAgICBdXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdjb2xvcl9tYXBfYmFja2dyb3VuZCcsIHsgcHJvY2Vzc29yOiBjb2xvclByb2Nlc3NvciB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdjb2xvcl9tYXBfZm9yZWdyb3VuZCcsIHsgcHJvY2Vzc29yOiBjb2xvclByb2Nlc3NvciB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdjb2xvcl9jb2xzJywge1xuICAgICAgICBwcm9jZXNzb3I6IGNvbG9yQ29sc1Byb2Nlc3NvcixcbiAgICAgICAgZGVmYXVsdDogY2FsY0NvbHMoZWRpdG9yKVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignY29sb3JfY29sc19mb3JlZ3JvdW5kJywge1xuICAgICAgICBwcm9jZXNzb3I6IGNvbG9yQ29sc1Byb2Nlc3NvcixcbiAgICAgICAgZGVmYXVsdDogZGVmYXVsdENvbHMoZWRpdG9yLCBmb3JlZ3JvdW5kSWQpXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdjb2xvcl9jb2xzX2JhY2tncm91bmQnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogY29sb3JDb2xzUHJvY2Vzc29yLFxuICAgICAgICBkZWZhdWx0OiBkZWZhdWx0Q29scyhlZGl0b3IsIGJhY2tncm91bmRJZClcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2N1c3RvbV9jb2xvcnMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdjb2xvcl9kZWZhdWx0X2ZvcmVncm91bmQnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6IGZhbGxiYWNrQ29sb3JcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2NvbG9yX2RlZmF1bHRfYmFja2dyb3VuZCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogZmFsbGJhY2tDb2xvclxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRDb2xvcnMkMiA9IChlZGl0b3IsIGlkKSA9PiB7XG4gICAgICBpZiAoaWQgPT09IGZvcmVncm91bmRJZCAmJiBlZGl0b3Iub3B0aW9ucy5pc1NldCgnY29sb3JfbWFwX2ZvcmVncm91bmQnKSkge1xuICAgICAgICByZXR1cm4gb3B0aW9uJDEoJ2NvbG9yX21hcF9mb3JlZ3JvdW5kJykoZWRpdG9yKTtcbiAgICAgIH0gZWxzZSBpZiAoaWQgPT09IGJhY2tncm91bmRJZCAmJiBlZGl0b3Iub3B0aW9ucy5pc1NldCgnY29sb3JfbWFwX2JhY2tncm91bmQnKSkge1xuICAgICAgICByZXR1cm4gb3B0aW9uJDEoJ2NvbG9yX21hcF9iYWNrZ3JvdW5kJykoZWRpdG9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvcHRpb24kMSgnY29sb3JfbWFwJykoZWRpdG9yKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNhbGNDb2xzID0gKGVkaXRvciwgaWQgPSAnZGVmYXVsdCcpID0+IE1hdGgubWF4KGZhbGxiYWNrQ29scywgTWF0aC5jZWlsKE1hdGguc3FydChnZXRDb2xvcnMkMihlZGl0b3IsIGlkKS5sZW5ndGgpKSk7XG4gICAgY29uc3QgZGVmYXVsdENvbHMgPSAoZWRpdG9yLCBpZCkgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdENvbHMgPSBvcHRpb24kMSgnY29sb3JfY29scycpKGVkaXRvcik7XG4gICAgICBjb25zdCBjYWxjdWxhdGVkQ29scyA9IGNhbGNDb2xzKGVkaXRvciwgaWQpO1xuICAgICAgaWYgKGRlZmF1bHRDb2xzID09PSBjYWxjQ29scyhlZGl0b3IpKSB7XG4gICAgICAgIHJldHVybiBjYWxjdWxhdGVkQ29scztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0Q29scztcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdldENvbG9yQ29scyQxID0gKGVkaXRvciwgaWQgPSAnZGVmYXVsdCcpID0+IHtcbiAgICAgIGNvbnN0IGdldENvbHMgPSAoKSA9PiB7XG4gICAgICAgIGlmIChpZCA9PT0gZm9yZWdyb3VuZElkKSB7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbiQxKCdjb2xvcl9jb2xzX2ZvcmVncm91bmQnKShlZGl0b3IpO1xuICAgICAgICB9IGVsc2UgaWYgKGlkID09PSBiYWNrZ3JvdW5kSWQpIHtcbiAgICAgICAgICByZXR1cm4gb3B0aW9uJDEoJ2NvbG9yX2NvbHNfYmFja2dyb3VuZCcpKGVkaXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbiQxKCdjb2xvcl9jb2xzJykoZWRpdG9yKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiBNYXRoLnJvdW5kKGdldENvbHMoKSk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNDdXN0b21Db2xvcnMkMSA9IG9wdGlvbiQxKCdjdXN0b21fY29sb3JzJyk7XG4gICAgY29uc3QgZ2V0RGVmYXVsdEZvcmVncm91bmRDb2xvciA9IG9wdGlvbiQxKCdjb2xvcl9kZWZhdWx0X2ZvcmVncm91bmQnKTtcbiAgICBjb25zdCBnZXREZWZhdWx0QmFja2dyb3VuZENvbG9yID0gb3B0aW9uJDEoJ2NvbG9yX2RlZmF1bHRfYmFja2dyb3VuZCcpO1xuXG4gICAgY29uc3QgZGVmYXVsdEJhY2tncm91bmRDb2xvciA9ICdyZ2JhKDAsIDAsIDAsIDApJztcbiAgICBjb25zdCBpc1ZhbGlkQmFja2dyb3VuZENvbG9yID0gdmFsdWUgPT4gZnJvbVN0cmluZyh2YWx1ZSkuZXhpc3RzKGMgPT4gYy5hbHBoYSAhPT0gMCk7XG4gICAgY29uc3QgZ2V0Q2xvc2VzdENzc0JhY2tncm91bmRDb2xvclZhbHVlID0gc2NvcGUgPT4ge1xuICAgICAgcmV0dXJuIGNsb3Nlc3QkNChzY29wZSwgbm9kZSA9PiB7XG4gICAgICAgIGlmIChpc0VsZW1lbnQkMShub2RlKSkge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gZ2V0JGUobm9kZSwgJ2JhY2tncm91bmQtY29sb3InKTtcbiAgICAgICAgICByZXR1cm4gc29tZUlmKGlzVmFsaWRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpLCBjb2xvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfSkuZ2V0T3IoZGVmYXVsdEJhY2tncm91bmRDb2xvcik7XG4gICAgfTtcbiAgICBjb25zdCBnZXRDdXJyZW50Q29sb3IgPSAoZWRpdG9yLCBmb3JtYXQpID0+IHtcbiAgICAgIGNvbnN0IG5vZGUgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KCkpO1xuICAgICAgY29uc3QgY3NzUmdiVmFsdWUgPSBmb3JtYXQgPT09ICdoaWxpdGVjb2xvcicgPyBnZXRDbG9zZXN0Q3NzQmFja2dyb3VuZENvbG9yVmFsdWUobm9kZSkgOiBnZXQkZShub2RlLCAnY29sb3InKTtcbiAgICAgIHJldHVybiBmcm9tU3RyaW5nKGNzc1JnYlZhbHVlKS5tYXAocmdiYSA9PiAnIycgKyBmcm9tUmdiYShyZ2JhKS52YWx1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBhcHBseUZvcm1hdCA9IChlZGl0b3IsIGZvcm1hdCwgdmFsdWUpID0+IHtcbiAgICAgIGVkaXRvci51bmRvTWFuYWdlci50cmFuc2FjdCgoKSA9PiB7XG4gICAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgICBlZGl0b3IuZm9ybWF0dGVyLmFwcGx5KGZvcm1hdCwgeyB2YWx1ZSB9KTtcbiAgICAgICAgZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZUZvcm1hdCA9IChlZGl0b3IsIGZvcm1hdCkgPT4ge1xuICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgIGVkaXRvci5mb3JtYXR0ZXIucmVtb3ZlKGZvcm1hdCwgeyB2YWx1ZTogbnVsbCB9LCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXJDb21tYW5kcyA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IuYWRkQ29tbWFuZCgnbWNlQXBwbHlUZXh0Y29sb3InLCAoZm9ybWF0LCB2YWx1ZSkgPT4ge1xuICAgICAgICBhcHBseUZvcm1hdChlZGl0b3IsIGZvcm1hdCwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3IuYWRkQ29tbWFuZCgnbWNlUmVtb3ZlVGV4dGNvbG9yJywgZm9ybWF0ID0+IHtcbiAgICAgICAgcmVtb3ZlRm9ybWF0KGVkaXRvciwgZm9ybWF0KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0QWRkaXRpb25hbENvbG9ycyA9IGhhc0N1c3RvbSA9PiB7XG4gICAgICBjb25zdCB0eXBlID0gJ2Nob2ljZWl0ZW0nO1xuICAgICAgY29uc3QgcmVtb3ZlID0ge1xuICAgICAgICB0eXBlLFxuICAgICAgICB0ZXh0OiAnUmVtb3ZlIGNvbG9yJyxcbiAgICAgICAgaWNvbjogJ2NvbG9yLXN3YXRjaC1yZW1vdmUtY29sb3InLFxuICAgICAgICB2YWx1ZTogJ3JlbW92ZSdcbiAgICAgIH07XG4gICAgICBjb25zdCBjdXN0b20gPSB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIHRleHQ6ICdDdXN0b20gY29sb3InLFxuICAgICAgICBpY29uOiAnY29sb3ItcGlja2VyJyxcbiAgICAgICAgdmFsdWU6ICdjdXN0b20nXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGhhc0N1c3RvbSA/IFtcbiAgICAgICAgcmVtb3ZlLFxuICAgICAgICBjdXN0b21cbiAgICAgIF0gOiBbcmVtb3ZlXTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5Q29sb3IgPSAoZWRpdG9yLCBmb3JtYXQsIHZhbHVlLCBvbkNob2ljZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlID09PSAnY3VzdG9tJykge1xuICAgICAgICBjb25zdCBkaWFsb2cgPSBjb2xvclBpY2tlckRpYWxvZyhlZGl0b3IpO1xuICAgICAgICBkaWFsb2coY29sb3JPcHQgPT4ge1xuICAgICAgICAgIGNvbG9yT3B0LmVhY2goY29sb3IgPT4ge1xuICAgICAgICAgICAgYWRkQ29sb3IoZm9ybWF0LCBjb2xvcik7XG4gICAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZUFwcGx5VGV4dGNvbG9yJywgZm9ybWF0LCBjb2xvcik7XG4gICAgICAgICAgICBvbkNob2ljZShjb2xvcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGdldEN1cnJlbnRDb2xvcihlZGl0b3IsIGZvcm1hdCkuZ2V0T3IoZmFsbGJhY2tDb2xvcikpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ3JlbW92ZScpIHtcbiAgICAgICAgb25DaG9pY2UoJycpO1xuICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZVJlbW92ZVRleHRjb2xvcicsIGZvcm1hdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbkNob2ljZSh2YWx1ZSk7XG4gICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnbWNlQXBwbHlUZXh0Y29sb3InLCBmb3JtYXQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdldENvbG9ycyQxID0gKGNvbG9ycywgaWQsIGhhc0N1c3RvbSkgPT4gY29sb3JzLmNvbmNhdChnZXRDdXJyZW50Q29sb3JzKGlkKS5jb25jYXQoZ2V0QWRkaXRpb25hbENvbG9ycyhoYXNDdXN0b20pKSk7XG4gICAgY29uc3QgZ2V0RmV0Y2gkMSA9IChjb2xvcnMsIGlkLCBoYXNDdXN0b20pID0+IGNhbGxiYWNrID0+IHtcbiAgICAgIGNhbGxiYWNrKGdldENvbG9ycyQxKGNvbG9ycywgaWQsIGhhc0N1c3RvbSkpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0SWNvbkNvbG9yID0gKHNwbGl0QnV0dG9uQXBpLCBuYW1lLCBuZXdDb2xvcikgPT4ge1xuICAgICAgY29uc3QgaWQgPSBuYW1lID09PSAnZm9yZWNvbG9yJyA/ICd0b3gtaWNvbi10ZXh0LWNvbG9yX19jb2xvcicgOiAndG94LWljb24taGlnaGxpZ2h0LWJnLWNvbG9yX19jb2xvcic7XG4gICAgICBzcGxpdEJ1dHRvbkFwaS5zZXRJY29uRmlsbChpZCwgbmV3Q29sb3IpO1xuICAgIH07XG4gICAgY29uc3Qgc2VsZWN0JDEgPSAoZWRpdG9yLCBmb3JtYXQpID0+IHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IG9wdEN1cnJlbnRIZXggPSBnZXRDdXJyZW50Q29sb3IoZWRpdG9yLCBmb3JtYXQpO1xuICAgICAgcmV0dXJuIGlzJDEob3B0Q3VycmVudEhleCwgdmFsdWUudG9VcHBlckNhc2UoKSk7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlclRleHRDb2xvckJ1dHRvbiA9IChlZGl0b3IsIG5hbWUsIGZvcm1hdCwgdG9vbHRpcCwgbGFzdENvbG9yKSA9PiB7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkU3BsaXRCdXR0b24obmFtZSwge1xuICAgICAgICB0b29sdGlwLFxuICAgICAgICBwcmVzZXRzOiAnY29sb3InLFxuICAgICAgICBpY29uOiBuYW1lID09PSAnZm9yZWNvbG9yJyA/ICd0ZXh0LWNvbG9yJyA6ICdoaWdobGlnaHQtYmctY29sb3InLFxuICAgICAgICBzZWxlY3Q6IHNlbGVjdCQxKGVkaXRvciwgZm9ybWF0KSxcbiAgICAgICAgY29sdW1uczogZ2V0Q29sb3JDb2xzJDEoZWRpdG9yLCBmb3JtYXQpLFxuICAgICAgICBmZXRjaDogZ2V0RmV0Y2gkMShnZXRDb2xvcnMkMihlZGl0b3IsIGZvcm1hdCksIGZvcm1hdCwgaGFzQ3VzdG9tQ29sb3JzJDEoZWRpdG9yKSksXG4gICAgICAgIG9uQWN0aW9uOiBfc3BsaXRCdXR0b25BcGkgPT4ge1xuICAgICAgICAgIGFwcGx5Q29sb3IoZWRpdG9yLCBmb3JtYXQsIGxhc3RDb2xvci5nZXQoKSwgbm9vcCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uSXRlbUFjdGlvbjogKF9zcGxpdEJ1dHRvbkFwaSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBhcHBseUNvbG9yKGVkaXRvciwgZm9ybWF0LCB2YWx1ZSwgbmV3Q29sb3IgPT4ge1xuICAgICAgICAgICAgbGFzdENvbG9yLnNldChuZXdDb2xvcik7XG4gICAgICAgICAgICBmaXJlVGV4dENvbG9yQ2hhbmdlKGVkaXRvciwge1xuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICBjb2xvcjogbmV3Q29sb3JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblNldHVwOiBzcGxpdEJ1dHRvbkFwaSA9PiB7XG4gICAgICAgICAgc2V0SWNvbkNvbG9yKHNwbGl0QnV0dG9uQXBpLCBuYW1lLCBsYXN0Q29sb3IuZ2V0KCkpO1xuICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBlID0+IHtcbiAgICAgICAgICAgIGlmIChlLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgc2V0SWNvbkNvbG9yKHNwbGl0QnV0dG9uQXBpLCBlLm5hbWUsIGUuY29sb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgZWRpdG9yLm9uKCdUZXh0Q29sb3JDaGFuZ2UnLCBoYW5kbGVyKTtcbiAgICAgICAgICByZXR1cm4gY29tcG9zZVVuYmluZGVycyhvblNldHVwRWRpdGFibGVUb2dnbGUoZWRpdG9yKShzcGxpdEJ1dHRvbkFwaSksICgpID0+IHtcbiAgICAgICAgICAgIGVkaXRvci5vZmYoJ1RleHRDb2xvckNoYW5nZScsIGhhbmRsZXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyVGV4dENvbG9yTWVudUl0ZW0gPSAoZWRpdG9yLCBuYW1lLCBmb3JtYXQsIHRleHQsIGxhc3RDb2xvcikgPT4ge1xuICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE5lc3RlZE1lbnVJdGVtKG5hbWUsIHtcbiAgICAgICAgdGV4dCxcbiAgICAgICAgaWNvbjogbmFtZSA9PT0gJ2ZvcmVjb2xvcicgPyAndGV4dC1jb2xvcicgOiAnaGlnaGxpZ2h0LWJnLWNvbG9yJyxcbiAgICAgICAgb25TZXR1cDogYXBpID0+IHtcbiAgICAgICAgICBzZXRJY29uQ29sb3IoYXBpLCBuYW1lLCBsYXN0Q29sb3IuZ2V0KCkpO1xuICAgICAgICAgIHJldHVybiBvblNldHVwRWRpdGFibGVUb2dnbGUoZWRpdG9yKShhcGkpO1xuICAgICAgICB9LFxuICAgICAgICBnZXRTdWJtZW51SXRlbXM6ICgpID0+IFt7XG4gICAgICAgICAgICB0eXBlOiAnZmFuY3ltZW51aXRlbScsXG4gICAgICAgICAgICBmYW5jeXR5cGU6ICdjb2xvcnN3YXRjaCcsXG4gICAgICAgICAgICBzZWxlY3Q6IHNlbGVjdCQxKGVkaXRvciwgZm9ybWF0KSxcbiAgICAgICAgICAgIGluaXREYXRhOiB7IHN0b3JhZ2VLZXk6IGZvcm1hdCB9LFxuICAgICAgICAgICAgb25BY3Rpb246IGRhdGEgPT4ge1xuICAgICAgICAgICAgICBhcHBseUNvbG9yKGVkaXRvciwgZm9ybWF0LCBkYXRhLnZhbHVlLCBuZXdDb2xvciA9PiB7XG4gICAgICAgICAgICAgICAgbGFzdENvbG9yLnNldChuZXdDb2xvcik7XG4gICAgICAgICAgICAgICAgZmlyZVRleHRDb2xvckNoYW5nZShlZGl0b3IsIHtcbiAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogbmV3Q29sb3JcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfV1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgY29sb3JQaWNrZXJEaWFsb2cgPSBlZGl0b3IgPT4gKGNhbGxiYWNrLCB2YWx1ZSkgPT4ge1xuICAgICAgbGV0IGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IG9uU3VibWl0ID0gYXBpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGFwaS5nZXREYXRhKCk7XG4gICAgICAgIGNvbnN0IGhleCA9IGRhdGEuY29sb3JwaWNrZXI7XG4gICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgY2FsbGJhY2soT3B0aW9uYWwuZnJvbShoZXgpKTtcbiAgICAgICAgICBhcGkuY2xvc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlZGl0b3Iud2luZG93TWFuYWdlci5hbGVydChlZGl0b3IudHJhbnNsYXRlKFtcbiAgICAgICAgICAgICdJbnZhbGlkIGhleCBjb2xvciBjb2RlOiB7MH0nLFxuICAgICAgICAgICAgaGV4XG4gICAgICAgICAgXSkpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25BY3Rpb24gPSAoX2FwaSwgZGV0YWlscykgPT4ge1xuICAgICAgICBpZiAoZGV0YWlscy5uYW1lID09PSAnaGV4LXZhbGlkJykge1xuICAgICAgICAgIGlzVmFsaWQgPSBkZXRhaWxzLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgaW5pdGlhbERhdGEgPSB7IGNvbG9ycGlja2VyOiB2YWx1ZSB9O1xuICAgICAgZWRpdG9yLndpbmRvd01hbmFnZXIub3Blbih7XG4gICAgICAgIHRpdGxlOiAnQ29sb3IgUGlja2VyJyxcbiAgICAgICAgc2l6ZTogJ25vcm1hbCcsXG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB0eXBlOiAncGFuZWwnLFxuICAgICAgICAgIGl0ZW1zOiBbe1xuICAgICAgICAgICAgICB0eXBlOiAnY29sb3JwaWNrZXInLFxuICAgICAgICAgICAgICBuYW1lOiAnY29sb3JwaWNrZXInLFxuICAgICAgICAgICAgICBsYWJlbDogJ0NvbG9yJ1xuICAgICAgICAgICAgfV1cbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICdjYW5jZWwnLFxuICAgICAgICAgICAgbmFtZTogJ2NhbmNlbCcsXG4gICAgICAgICAgICB0ZXh0OiAnQ2FuY2VsJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICBuYW1lOiAnc2F2ZScsXG4gICAgICAgICAgICB0ZXh0OiAnU2F2ZScsXG4gICAgICAgICAgICBwcmltYXJ5OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBpbml0aWFsRGF0YSxcbiAgICAgICAgb25BY3Rpb24sXG4gICAgICAgIG9uU3VibWl0LFxuICAgICAgICBvbkNsb3NlOiBub29wLFxuICAgICAgICBvbkNhbmNlbDogKCkgPT4ge1xuICAgICAgICAgIGNhbGxiYWNrKE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXIkYyA9IGVkaXRvciA9PiB7XG4gICAgICByZWdpc3RlckNvbW1hbmRzKGVkaXRvcik7XG4gICAgICBjb25zdCBmYWxsYmFja0NvbG9yRm9yZWdyb3VuZCA9IGdldERlZmF1bHRGb3JlZ3JvdW5kQ29sb3IoZWRpdG9yKTtcbiAgICAgIGNvbnN0IGZhbGxiYWNrQ29sb3JCYWNrZ3JvdW5kID0gZ2V0RGVmYXVsdEJhY2tncm91bmRDb2xvcihlZGl0b3IpO1xuICAgICAgY29uc3QgbGFzdEZvcmVDb2xvciA9IENlbGwoZmFsbGJhY2tDb2xvckZvcmVncm91bmQpO1xuICAgICAgY29uc3QgbGFzdEJhY2tDb2xvciA9IENlbGwoZmFsbGJhY2tDb2xvckJhY2tncm91bmQpO1xuICAgICAgcmVnaXN0ZXJUZXh0Q29sb3JCdXR0b24oZWRpdG9yLCAnZm9yZWNvbG9yJywgJ2ZvcmVjb2xvcicsICdUZXh0IGNvbG9yJywgbGFzdEZvcmVDb2xvcik7XG4gICAgICByZWdpc3RlclRleHRDb2xvckJ1dHRvbihlZGl0b3IsICdiYWNrY29sb3InLCAnaGlsaXRlY29sb3InLCAnQmFja2dyb3VuZCBjb2xvcicsIGxhc3RCYWNrQ29sb3IpO1xuICAgICAgcmVnaXN0ZXJUZXh0Q29sb3JNZW51SXRlbShlZGl0b3IsICdmb3JlY29sb3InLCAnZm9yZWNvbG9yJywgJ1RleHQgY29sb3InLCBsYXN0Rm9yZUNvbG9yKTtcbiAgICAgIHJlZ2lzdGVyVGV4dENvbG9yTWVudUl0ZW0oZWRpdG9yLCAnYmFja2NvbG9yJywgJ2hpbGl0ZWNvbG9yJywgJ0JhY2tncm91bmQgY29sb3InLCBsYXN0QmFja0NvbG9yKTtcbiAgICB9O1xuXG4gICAgY29uc3QgY3JlYXRlUGFydGlhbENob2ljZU1lbnUgPSAodmFsdWUsIGl0ZW1zLCBvbkl0ZW1WYWx1ZUhhbmRsZXIsIGNvbHVtbnMsIHByZXNldHMsIGl0ZW1SZXNwb25zZSwgc2VsZWN0LCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IGhhc0ljb25zID0gbWVudUhhc0ljb25zKGl0ZW1zKTtcbiAgICAgIGNvbnN0IHByZXNldEl0ZW1UeXBlcyA9IHByZXNldHMgIT09ICdjb2xvcicgPyAnbm9ybWFsJyA6ICdjb2xvcic7XG4gICAgICBjb25zdCBhbGxveUl0ZW1zID0gY3JlYXRlQ2hvaWNlSXRlbXMoaXRlbXMsIG9uSXRlbVZhbHVlSGFuZGxlciwgY29sdW1ucywgcHJlc2V0SXRlbVR5cGVzLCBpdGVtUmVzcG9uc2UsIHNlbGVjdCwgcHJvdmlkZXJzQmFja3N0YWdlKTtcbiAgICAgIGNvbnN0IG1lbnVMYXlvdXQgPSB7IG1lbnVUeXBlOiBwcmVzZXRzIH07XG4gICAgICByZXR1cm4gY3JlYXRlUGFydGlhbE1lbnVXaXRoQWxsb3lJdGVtcyh2YWx1ZSwgaGFzSWNvbnMsIGFsbG95SXRlbXMsIGNvbHVtbnMsIG1lbnVMYXlvdXQpO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlQ2hvaWNlSXRlbXMgPSAoaXRlbXMsIG9uSXRlbVZhbHVlSGFuZGxlciwgY29sdW1ucywgaXRlbVByZXNldHMsIGl0ZW1SZXNwb25zZSwgc2VsZWN0LCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IGNhdChtYXAkMihpdGVtcywgaXRlbSA9PiB7XG4gICAgICBpZiAoaXRlbS50eXBlID09PSAnY2hvaWNlaXRlbScpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUNob2ljZU1lbnVJdGVtKGl0ZW0pLmZvbGQoaGFuZGxlRXJyb3IsIGQgPT4gT3B0aW9uYWwuc29tZShyZW5kZXJDaG9pY2VJdGVtKGQsIGNvbHVtbnMgPT09IDEsIGl0ZW1QcmVzZXRzLCBvbkl0ZW1WYWx1ZUhhbmRsZXIsIHNlbGVjdChkLnZhbHVlKSwgaXRlbVJlc3BvbnNlLCBwcm92aWRlcnNCYWNrc3RhZ2UsIG1lbnVIYXNJY29ucyhpdGVtcykpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH0pKTtcblxuICAgIGNvbnN0IGRlcml2ZU1lbnVNb3ZlbWVudCA9IChjb2x1bW5zLCBwcmVzZXRzKSA9PiB7XG4gICAgICBjb25zdCBtZW51TWFya2VycyA9IG1hcmtlcnMocHJlc2V0cyk7XG4gICAgICBpZiAoY29sdW1ucyA9PT0gMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1vZGU6ICdtZW51JyxcbiAgICAgICAgICBtb3ZlT25UYWI6IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1ucyA9PT0gJ2F1dG8nKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbW9kZTogJ2dyaWQnLFxuICAgICAgICAgIHNlbGVjdG9yOiAnLicgKyBtZW51TWFya2Vycy5pdGVtLFxuICAgICAgICAgIGluaXRTaXplOiB7XG4gICAgICAgICAgICBudW1Db2x1bW5zOiAxLFxuICAgICAgICAgICAgbnVtUm93czogMVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJvd0NsYXNzID0gcHJlc2V0cyA9PT0gJ2NvbG9yJyA/ICd0b3gtc3dhdGNoZXNfX3JvdycgOiAndG94LWNvbGxlY3Rpb25fX2dyb3VwJztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtb2RlOiAnbWF0cml4JyxcbiAgICAgICAgICByb3dTZWxlY3RvcjogJy4nICsgcm93Q2xhc3MsXG4gICAgICAgICAgcHJldmlvdXNTZWxlY3RvcjogbWVudSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcHJlc2V0cyA9PT0gJ2NvbG9yJyA/IGRlc2NlbmRhbnQobWVudS5lbGVtZW50LCAnW2FyaWEtY2hlY2tlZD10cnVlXScpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGRlcml2ZUNvbGxlY3Rpb25Nb3ZlbWVudCA9IChjb2x1bW5zLCBwcmVzZXRzKSA9PiB7XG4gICAgICBpZiAoY29sdW1ucyA9PT0gMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1vZGU6ICdtZW51JyxcbiAgICAgICAgICBtb3ZlT25UYWI6IGZhbHNlLFxuICAgICAgICAgIHNlbGVjdG9yOiAnLnRveC1jb2xsZWN0aW9uX19pdGVtJ1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChjb2x1bW5zID09PSAnYXV0bycpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtb2RlOiAnZmxhdGdyaWQnLFxuICAgICAgICAgIHNlbGVjdG9yOiAnLicgKyAndG94LWNvbGxlY3Rpb25fX2l0ZW0nLFxuICAgICAgICAgIGluaXRTaXplOiB7XG4gICAgICAgICAgICBudW1Db2x1bW5zOiAxLFxuICAgICAgICAgICAgbnVtUm93czogMVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbW9kZTogJ21hdHJpeCcsXG4gICAgICAgICAgc2VsZWN0b3JzOiB7XG4gICAgICAgICAgICByb3c6IHByZXNldHMgPT09ICdjb2xvcicgPyAnLnRveC1zd2F0Y2hlc19fcm93JyA6ICcudG94LWNvbGxlY3Rpb25fX2dyb3VwJyxcbiAgICAgICAgICAgIGNlbGw6IHByZXNldHMgPT09ICdjb2xvcicgPyBgLiR7IGNvbG9yQ2xhc3MgfWAgOiBgLiR7IHNlbGVjdGFibGVDbGFzcyB9YFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVyQ29sb3JTd2F0Y2hJdGVtID0gKHNwZWMsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgaXRlbXMgPSBnZXRDb2xvckl0ZW1zKHNwZWMsIGJhY2tzdGFnZSk7XG4gICAgICBjb25zdCBjb2x1bW5zID0gYmFja3N0YWdlLmNvbG9yaW5wdXQuZ2V0Q29sb3JDb2xzKHNwZWMuaW5pdERhdGEuc3RvcmFnZUtleSk7XG4gICAgICBjb25zdCBwcmVzZXRzID0gJ2NvbG9yJztcbiAgICAgIGNvbnN0IG1lbnVTcGVjID0gY3JlYXRlUGFydGlhbENob2ljZU1lbnUoZ2VuZXJhdGUkNignbWVudS12YWx1ZScpLCBpdGVtcywgdmFsdWUgPT4ge1xuICAgICAgICBzcGVjLm9uQWN0aW9uKHsgdmFsdWUgfSk7XG4gICAgICB9LCBjb2x1bW5zLCBwcmVzZXRzLCBJdGVtUmVzcG9uc2UkMS5DTE9TRV9PTl9FWEVDVVRFLCBzcGVjLnNlbGVjdC5nZXRPcihuZXZlciksIGJhY2tzdGFnZS5zaGFyZWQucHJvdmlkZXJzKTtcbiAgICAgIGNvbnN0IHdpZGdldFNwZWMgPSB7XG4gICAgICAgIC4uLm1lbnVTcGVjLFxuICAgICAgICBtYXJrZXJzOiBtYXJrZXJzKHByZXNldHMpLFxuICAgICAgICBtb3ZlbWVudDogZGVyaXZlTWVudU1vdmVtZW50KGNvbHVtbnMsIHByZXNldHMpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ3dpZGdldCcsXG4gICAgICAgIGRhdGE6IHsgdmFsdWU6IGdlbmVyYXRlJDYoJ3dpZGdldC1pZCcpIH0sXG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtZmFuY3ltZW51aXRlbSddXG4gICAgICAgIH0sXG4gICAgICAgIGF1dG9mb2N1czogdHJ1ZSxcbiAgICAgICAgY29tcG9uZW50czogW3BhcnRzJGYud2lkZ2V0KE1lbnUuc2tldGNoKHdpZGdldFNwZWMpKV1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBnZXRDb2xvckl0ZW1zID0gKHNwZWMsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgdXNlQ3VzdG9tQ29sb3JzID0gc3BlYy5pbml0RGF0YS5hbGxvd0N1c3RvbUNvbG9ycyAmJiBiYWNrc3RhZ2UuY29sb3JpbnB1dC5oYXNDdXN0b21Db2xvcnMoKTtcbiAgICAgIHJldHVybiBzcGVjLmluaXREYXRhLmNvbG9ycy5mb2xkKCgpID0+IGdldENvbG9ycyQxKGJhY2tzdGFnZS5jb2xvcmlucHV0LmdldENvbG9ycyhzcGVjLmluaXREYXRhLnN0b3JhZ2VLZXkpLCBzcGVjLmluaXREYXRhLnN0b3JhZ2VLZXksIHVzZUN1c3RvbUNvbG9ycyksIGNvbG9ycyA9PiBjb2xvcnMuY29uY2F0KGdldEFkZGl0aW9uYWxDb2xvcnModXNlQ3VzdG9tQ29sb3JzKSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBjZWxsT3ZlckV2ZW50ID0gZ2VuZXJhdGUkNignY2VsbC1vdmVyJyk7XG4gICAgY29uc3QgY2VsbEV4ZWN1dGVFdmVudCA9IGdlbmVyYXRlJDYoJ2NlbGwtZXhlY3V0ZScpO1xuICAgIGNvbnN0IG1ha2VBbm5vdW5jZW1lbnRUZXh0ID0gYmFja3N0YWdlID0+IChyb3csIGNvbCkgPT4gYmFja3N0YWdlLnNoYXJlZC5wcm92aWRlcnMudHJhbnNsYXRlKGAkeyBjb2wgfSBjb2x1bW5zLCAkeyByb3cgfSByb3dzYCk7XG4gICAgY29uc3QgbWFrZUNlbGwgPSAocm93LCBjb2wsIGxhYmVsKSA9PiB7XG4gICAgICBjb25zdCBlbWl0Q2VsbE92ZXIgPSBjID0+IGVtaXRXaXRoKGMsIGNlbGxPdmVyRXZlbnQsIHtcbiAgICAgICAgcm93LFxuICAgICAgICBjb2xcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW1pdEV4ZWN1dGUgPSBjID0+IGVtaXRXaXRoKGMsIGNlbGxFeGVjdXRlRXZlbnQsIHtcbiAgICAgICAgcm93LFxuICAgICAgICBjb2xcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgb25DbGljayA9IChjLCBzZSkgPT4ge1xuICAgICAgICBzZS5zdG9wKCk7XG4gICAgICAgIGVtaXRFeGVjdXRlKGMpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBidWlsZCQxKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICByb2xlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgIFsnYXJpYS1sYWJlbCddOiBsYWJlbFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIGNvbmZpZygnaW5zZXJ0LXRhYmxlLXBpY2tlci1jZWxsJywgW1xuICAgICAgICAgICAgcnVuJDEobW91c2VvdmVyKCksIEZvY3VzaW5nLmZvY3VzKSxcbiAgICAgICAgICAgIHJ1biQxKGV4ZWN1dGUkNSgpLCBlbWl0RXhlY3V0ZSksXG4gICAgICAgICAgICBydW4kMShjbGljaygpLCBvbkNsaWNrKSxcbiAgICAgICAgICAgIHJ1biQxKHRhcCgpLCBvbkNsaWNrKVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIFRvZ2dsaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICB0b2dnbGVDbGFzczogJ3RveC1pbnNlcnQtdGFibGUtcGlja2VyX19zZWxlY3RlZCcsXG4gICAgICAgICAgICB0b2dnbGVPbkV4ZWN1dGU6IGZhbHNlXG4gICAgICAgICAgfSksXG4gICAgICAgICAgRm9jdXNpbmcuY29uZmlnKHsgb25Gb2N1czogZW1pdENlbGxPdmVyIH0pXG4gICAgICAgIF0pXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG1ha2VDZWxscyA9IChnZXRDZWxsTGFiZWwsIG51bVJvd3MsIG51bUNvbHMpID0+IHtcbiAgICAgIGNvbnN0IGNlbGxzID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVJvd3M7IGkrKykge1xuICAgICAgICBjb25zdCByb3cgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1Db2xzOyBqKyspIHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IGdldENlbGxMYWJlbChpICsgMSwgaiArIDEpO1xuICAgICAgICAgIHJvdy5wdXNoKG1ha2VDZWxsKGksIGosIGxhYmVsKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2VsbHMucHVzaChyb3cpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNlbGxzO1xuICAgIH07XG4gICAgY29uc3Qgc2VsZWN0Q2VsbHMgPSAoY2VsbHMsIHNlbGVjdGVkUm93LCBzZWxlY3RlZENvbHVtbiwgbnVtUm93cywgbnVtQ29sdW1ucykgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Sb3dzOyBpKyspIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1Db2x1bW5zOyBqKyspIHtcbiAgICAgICAgICBUb2dnbGluZy5zZXQoY2VsbHNbaV1bal0sIGkgPD0gc2VsZWN0ZWRSb3cgJiYgaiA8PSBzZWxlY3RlZENvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1ha2VDb21wb25lbnRzID0gY2VsbHMgPT4gYmluZCQzKGNlbGxzLCBjZWxsUm93ID0+IG1hcCQyKGNlbGxSb3csIHByZW1hZGUpKTtcbiAgICBjb25zdCBtYWtlTGFiZWxUZXh0ID0gKHJvdywgY29sKSA9PiB0ZXh0JDIoYCR7IGNvbCB9eCR7IHJvdyB9YCk7XG4gICAgY29uc3QgcmVuZGVySW5zZXJ0VGFibGVNZW51SXRlbSA9IChzcGVjLCBiYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IG51bVJvd3MgPSAxMDtcbiAgICAgIGNvbnN0IG51bUNvbHVtbnMgPSAxMDtcbiAgICAgIGNvbnN0IGdldENlbGxMYWJlbCA9IG1ha2VBbm5vdW5jZW1lbnRUZXh0KGJhY2tzdGFnZSk7XG4gICAgICBjb25zdCBjZWxscyA9IG1ha2VDZWxscyhnZXRDZWxsTGFiZWwsIG51bVJvd3MsIG51bUNvbHVtbnMpO1xuICAgICAgY29uc3QgZW1wdHlMYWJlbFRleHQgPSBtYWtlTGFiZWxUZXh0KDAsIDApO1xuICAgICAgY29uc3QgbWVtTGFiZWwgPSByZWNvcmQoe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdzcGFuJyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1pbnNlcnQtdGFibGUtcGlja2VyX19sYWJlbCddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtlbXB0eUxhYmVsVGV4dF0sXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtSZXBsYWNpbmcuY29uZmlnKHt9KV0pXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICd3aWRnZXQnLFxuICAgICAgICBkYXRhOiB7IHZhbHVlOiBnZW5lcmF0ZSQ2KCd3aWRnZXQtaWQnKSB9LFxuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LWZhbmN5bWVudWl0ZW0nXVxuICAgICAgICB9LFxuICAgICAgICBhdXRvZm9jdXM6IHRydWUsXG4gICAgICAgIGNvbXBvbmVudHM6IFtwYXJ0cyRmLndpZGdldCh7XG4gICAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgICAgY2xhc3NlczogWyd0b3gtaW5zZXJ0LXRhYmxlLXBpY2tlciddXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcG9uZW50czogbWFrZUNvbXBvbmVudHMoY2VsbHMpLmNvbmNhdChtZW1MYWJlbC5hc1NwZWMoKSksXG4gICAgICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgICAgIGNvbmZpZygnaW5zZXJ0LXRhYmxlLXBpY2tlcicsIFtcbiAgICAgICAgICAgICAgICBydW5PbkF0dGFjaGVkKGMgPT4ge1xuICAgICAgICAgICAgICAgICAgUmVwbGFjaW5nLnNldChtZW1MYWJlbC5nZXQoYyksIFtlbXB0eUxhYmVsVGV4dF0pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHJ1bldpdGhUYXJnZXQoY2VsbE92ZXJFdmVudCwgKGMsIHQsIGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHtyb3csIGNvbH0gPSBlLmV2ZW50O1xuICAgICAgICAgICAgICAgICAgc2VsZWN0Q2VsbHMoY2VsbHMsIHJvdywgY29sLCBudW1Sb3dzLCBudW1Db2x1bW5zKTtcbiAgICAgICAgICAgICAgICAgIFJlcGxhY2luZy5zZXQobWVtTGFiZWwuZ2V0KGMpLCBbbWFrZUxhYmVsVGV4dChyb3cgKyAxLCBjb2wgKyAxKV0pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHJ1bldpdGhUYXJnZXQoY2VsbEV4ZWN1dGVFdmVudCwgKGMsIF8sIGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHtyb3csIGNvbH0gPSBlLmV2ZW50O1xuICAgICAgICAgICAgICAgICAgc3BlYy5vbkFjdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIG51bVJvd3M6IHJvdyArIDEsXG4gICAgICAgICAgICAgICAgICAgIG51bUNvbHVtbnM6IGNvbCArIDFcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgZW1pdChjLCBzYW5kYm94Q2xvc2UoKSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgICAgICAgIGluaXRTaXplOiB7XG4gICAgICAgICAgICAgICAgICBudW1Sb3dzLFxuICAgICAgICAgICAgICAgICAgbnVtQ29sdW1uc1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbW9kZTogJ2ZsYXRncmlkJyxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1tyb2xlPVwiYnV0dG9uXCJdJ1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICB9KV1cbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGZhbmN5TWVudUl0ZW1zID0ge1xuICAgICAgaW5zZXJ0dGFibGU6IHJlbmRlckluc2VydFRhYmxlTWVudUl0ZW0sXG4gICAgICBjb2xvcnN3YXRjaDogcmVuZGVyQ29sb3JTd2F0Y2hJdGVtXG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJGYW5jeU1lbnVJdGVtID0gKHNwZWMsIGJhY2tzdGFnZSkgPT4gZ2V0JGcoZmFuY3lNZW51SXRlbXMsIHNwZWMuZmFuY3l0eXBlKS5tYXAocmVuZGVyID0+IHJlbmRlcihzcGVjLCBiYWNrc3RhZ2UpKTtcblxuICAgIGNvbnN0IHJlbmRlck5lc3RlZEl0ZW0gPSAoc3BlYywgaXRlbVJlc3BvbnNlLCBwcm92aWRlcnNCYWNrc3RhZ2UsIHJlbmRlckljb25zID0gdHJ1ZSwgZG93bndhcmRzQ2FyZXQgPSBmYWxzZSkgPT4ge1xuICAgICAgY29uc3QgY2FyZXQgPSBkb3dud2FyZHNDYXJldCA/IHJlbmRlckRvd253YXJkc0NhcmV0KHByb3ZpZGVyc0JhY2tzdGFnZS5pY29ucykgOiByZW5kZXJTdWJtZW51Q2FyZXQocHJvdmlkZXJzQmFja3N0YWdlLmljb25zKTtcbiAgICAgIGNvbnN0IGdldEFwaSA9IGNvbXBvbmVudCA9PiAoe1xuICAgICAgICBpc0VuYWJsZWQ6ICgpID0+ICFEaXNhYmxpbmcuaXNEaXNhYmxlZChjb21wb25lbnQpLFxuICAgICAgICBzZXRFbmFibGVkOiBzdGF0ZSA9PiBEaXNhYmxpbmcuc2V0KGNvbXBvbmVudCwgIXN0YXRlKSxcbiAgICAgICAgc2V0SWNvbkZpbGw6IChpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICBkZXNjZW5kYW50KGNvbXBvbmVudC5lbGVtZW50LCBgc3ZnIHBhdGhbY2xhc3M9XCIkeyBpZCB9XCJdLCByZWN0W2NsYXNzPVwiJHsgaWQgfVwiXWApLmVhY2godW5kZXJsaW5lUGF0aCA9PiB7XG4gICAgICAgICAgICBzZXQkOSh1bmRlcmxpbmVQYXRoLCAnZmlsbCcsIHZhbHVlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzdHJ1Y3R1cmUgPSByZW5kZXJJdGVtU3RydWN0dXJlKHtcbiAgICAgICAgcHJlc2V0czogJ25vcm1hbCcsXG4gICAgICAgIGljb25Db250ZW50OiBzcGVjLmljb24sXG4gICAgICAgIHRleHRDb250ZW50OiBzcGVjLnRleHQsXG4gICAgICAgIGh0bWxDb250ZW50OiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGFyaWFMYWJlbDogc3BlYy50ZXh0LFxuICAgICAgICBjYXJldDogT3B0aW9uYWwuc29tZShjYXJldCksXG4gICAgICAgIGNoZWNrTWFyazogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICBzaG9ydGN1dENvbnRlbnQ6IHNwZWMuc2hvcnRjdXRcbiAgICAgIH0sIHByb3ZpZGVyc0JhY2tzdGFnZSwgcmVuZGVySWNvbnMpO1xuICAgICAgcmV0dXJuIHJlbmRlckNvbW1vbkl0ZW0oe1xuICAgICAgICBkYXRhOiBidWlsZERhdGEoc3BlYyksXG4gICAgICAgIGdldEFwaSxcbiAgICAgICAgZW5hYmxlZDogc3BlYy5lbmFibGVkLFxuICAgICAgICBvbkFjdGlvbjogbm9vcCxcbiAgICAgICAgb25TZXR1cDogc3BlYy5vblNldHVwLFxuICAgICAgICB0cmlnZ2Vyc1N1Ym1lbnU6IHRydWUsXG4gICAgICAgIGl0ZW1CZWhhdmlvdXJzOiBbXVxuICAgICAgfSwgc3RydWN0dXJlLCBpdGVtUmVzcG9uc2UsIHByb3ZpZGVyc0JhY2tzdGFnZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlck5vcm1hbEl0ZW0gPSAoc3BlYywgaXRlbVJlc3BvbnNlLCBwcm92aWRlcnNCYWNrc3RhZ2UsIHJlbmRlckljb25zID0gdHJ1ZSkgPT4ge1xuICAgICAgY29uc3QgZ2V0QXBpID0gY29tcG9uZW50ID0+ICh7XG4gICAgICAgIGlzRW5hYmxlZDogKCkgPT4gIURpc2FibGluZy5pc0Rpc2FibGVkKGNvbXBvbmVudCksXG4gICAgICAgIHNldEVuYWJsZWQ6IHN0YXRlID0+IERpc2FibGluZy5zZXQoY29tcG9uZW50LCAhc3RhdGUpXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0cnVjdHVyZSA9IHJlbmRlckl0ZW1TdHJ1Y3R1cmUoe1xuICAgICAgICBwcmVzZXRzOiAnbm9ybWFsJyxcbiAgICAgICAgaWNvbkNvbnRlbnQ6IHNwZWMuaWNvbixcbiAgICAgICAgdGV4dENvbnRlbnQ6IHNwZWMudGV4dCxcbiAgICAgICAgaHRtbENvbnRlbnQ6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICAgYXJpYUxhYmVsOiBzcGVjLnRleHQsXG4gICAgICAgIGNhcmV0OiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGNoZWNrTWFyazogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICBzaG9ydGN1dENvbnRlbnQ6IHNwZWMuc2hvcnRjdXRcbiAgICAgIH0sIHByb3ZpZGVyc0JhY2tzdGFnZSwgcmVuZGVySWNvbnMpO1xuICAgICAgcmV0dXJuIHJlbmRlckNvbW1vbkl0ZW0oe1xuICAgICAgICBkYXRhOiBidWlsZERhdGEoc3BlYyksXG4gICAgICAgIGdldEFwaSxcbiAgICAgICAgZW5hYmxlZDogc3BlYy5lbmFibGVkLFxuICAgICAgICBvbkFjdGlvbjogc3BlYy5vbkFjdGlvbixcbiAgICAgICAgb25TZXR1cDogc3BlYy5vblNldHVwLFxuICAgICAgICB0cmlnZ2Vyc1N1Ym1lbnU6IGZhbHNlLFxuICAgICAgICBpdGVtQmVoYXZpb3VyczogW11cbiAgICAgIH0sIHN0cnVjdHVyZSwgaXRlbVJlc3BvbnNlLCBwcm92aWRlcnNCYWNrc3RhZ2UpO1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJTZXBhcmF0b3JJdGVtID0gc3BlYyA9PiAoe1xuICAgICAgdHlwZTogJ3NlcGFyYXRvcicsXG4gICAgICBkb206IHtcbiAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgIHNlbGVjdGFibGVDbGFzcyxcbiAgICAgICAgICBncm91cEhlYWRpbmdDbGFzc1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czogc3BlYy50ZXh0Lm1hcCh0ZXh0JDIpLnRvQXJyYXkoKVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVuZGVyVG9nZ2xlTWVudUl0ZW0gPSAoc3BlYywgaXRlbVJlc3BvbnNlLCBwcm92aWRlcnNCYWNrc3RhZ2UsIHJlbmRlckljb25zID0gdHJ1ZSkgPT4ge1xuICAgICAgY29uc3QgZ2V0QXBpID0gY29tcG9uZW50ID0+ICh7XG4gICAgICAgIHNldEFjdGl2ZTogc3RhdGUgPT4ge1xuICAgICAgICAgIFRvZ2dsaW5nLnNldChjb21wb25lbnQsIHN0YXRlKTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNBY3RpdmU6ICgpID0+IFRvZ2dsaW5nLmlzT24oY29tcG9uZW50KSxcbiAgICAgICAgaXNFbmFibGVkOiAoKSA9PiAhRGlzYWJsaW5nLmlzRGlzYWJsZWQoY29tcG9uZW50KSxcbiAgICAgICAgc2V0RW5hYmxlZDogc3RhdGUgPT4gRGlzYWJsaW5nLnNldChjb21wb25lbnQsICFzdGF0ZSlcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RydWN0dXJlID0gcmVuZGVySXRlbVN0cnVjdHVyZSh7XG4gICAgICAgIGljb25Db250ZW50OiBzcGVjLmljb24sXG4gICAgICAgIHRleHRDb250ZW50OiBzcGVjLnRleHQsXG4gICAgICAgIGh0bWxDb250ZW50OiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGFyaWFMYWJlbDogc3BlYy50ZXh0LFxuICAgICAgICBjaGVja01hcms6IE9wdGlvbmFsLnNvbWUocmVuZGVyQ2hlY2ttYXJrKHByb3ZpZGVyc0JhY2tzdGFnZS5pY29ucykpLFxuICAgICAgICBjYXJldDogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICBzaG9ydGN1dENvbnRlbnQ6IHNwZWMuc2hvcnRjdXQsXG4gICAgICAgIHByZXNldHM6ICdub3JtYWwnLFxuICAgICAgICBtZXRhOiBzcGVjLm1ldGFcbiAgICAgIH0sIHByb3ZpZGVyc0JhY2tzdGFnZSwgcmVuZGVySWNvbnMpO1xuICAgICAgcmV0dXJuIGRlZXBNZXJnZShyZW5kZXJDb21tb25JdGVtKHtcbiAgICAgICAgZGF0YTogYnVpbGREYXRhKHNwZWMpLFxuICAgICAgICBlbmFibGVkOiBzcGVjLmVuYWJsZWQsXG4gICAgICAgIGdldEFwaSxcbiAgICAgICAgb25BY3Rpb246IHNwZWMub25BY3Rpb24sXG4gICAgICAgIG9uU2V0dXA6IHNwZWMub25TZXR1cCxcbiAgICAgICAgdHJpZ2dlcnNTdWJtZW51OiBmYWxzZSxcbiAgICAgICAgaXRlbUJlaGF2aW91cnM6IFtdXG4gICAgICB9LCBzdHJ1Y3R1cmUsIGl0ZW1SZXNwb25zZSwgcHJvdmlkZXJzQmFja3N0YWdlKSwge1xuICAgICAgICB0b2dnbGluZzoge1xuICAgICAgICAgIHRvZ2dsZUNsYXNzOiB0aWNrZWRDbGFzcyxcbiAgICAgICAgICB0b2dnbGVPbkV4ZWN1dGU6IGZhbHNlLFxuICAgICAgICAgIHNlbGVjdGVkOiBzcGVjLmFjdGl2ZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgYXV0b2NvbXBsZXRlID0gcmVuZGVyQXV0b2NvbXBsZXRlSXRlbTtcbiAgICBjb25zdCBzZXBhcmF0b3IkMyA9IHJlbmRlclNlcGFyYXRvckl0ZW07XG4gICAgY29uc3Qgbm9ybWFsID0gcmVuZGVyTm9ybWFsSXRlbTtcbiAgICBjb25zdCBuZXN0ZWQgPSByZW5kZXJOZXN0ZWRJdGVtO1xuICAgIGNvbnN0IHRvZ2dsZSQxID0gcmVuZGVyVG9nZ2xlTWVudUl0ZW07XG4gICAgY29uc3QgZmFuY3kgPSByZW5kZXJGYW5jeU1lbnVJdGVtO1xuICAgIGNvbnN0IGNhcmQgPSByZW5kZXJDYXJkTWVudUl0ZW07XG5cbiAgICBjb25zdCBnZXRDb3VwbGVkID0gKGNvbXBvbmVudCwgY291cGxlQ29uZmlnLCBjb3VwbGVTdGF0ZSwgbmFtZSkgPT4gY291cGxlU3RhdGUuZ2V0T3JDcmVhdGUoY29tcG9uZW50LCBjb3VwbGVDb25maWcsIG5hbWUpO1xuICAgIGNvbnN0IGdldEV4aXN0aW5nQ291cGxlZCA9IChjb21wb25lbnQsIGNvdXBsZUNvbmZpZywgY291cGxlU3RhdGUsIG5hbWUpID0+IGNvdXBsZVN0YXRlLmdldEV4aXN0aW5nKGNvbXBvbmVudCwgY291cGxlQ29uZmlnLCBuYW1lKTtcblxuICAgIHZhciBDb3VwbGluZ0FwaXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgZ2V0Q291cGxlZDogZ2V0Q291cGxlZCxcbiAgICAgICAgZ2V0RXhpc3RpbmdDb3VwbGVkOiBnZXRFeGlzdGluZ0NvdXBsZWRcbiAgICB9KTtcblxuICAgIHZhciBDb3VwbGluZ1NjaGVtYSA9IFtyZXF1aXJlZE9mKCdvdGhlcnMnLCBzZXRPZihSZXN1bHQudmFsdWUsIGFueVZhbHVlKCkpKV07XG5cbiAgICBjb25zdCBpbml0JGEgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjb3VwbGVkID0ge307XG4gICAgICBjb25zdCBsb29rdXBDb3VwbGVkID0gKGNvdXBsZUNvbmZpZywgY291cGxlZE5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgYXZhaWxhYmxlID0ga2V5cyhjb3VwbGVDb25maWcub3RoZXJzKTtcbiAgICAgICAgaWYgKGF2YWlsYWJsZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBmaW5kIGFueSBrbm93biBjb3VwbGVkIGNvbXBvbmVudHMnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZ2V0JGcoY291cGxlZCwgY291cGxlZE5hbWUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0T3JDcmVhdGUgPSAoY29tcG9uZW50LCBjb3VwbGVDb25maWcsIG5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIGxvb2t1cENvdXBsZWQoY291cGxlQ29uZmlnLCBuYW1lKS5nZXRPclRodW5rKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBidWlsZGVyID0gZ2V0JGcoY291cGxlQ29uZmlnLm90aGVycywgbmFtZSkuZ2V0T3JEaWUoJ05vIGluZm9ybWF0aW9uIGZvdW5kIGZvciBjb3VwbGVkIGNvbXBvbmVudDogJyArIG5hbWUpO1xuICAgICAgICAgIGNvbnN0IHNwZWMgPSBidWlsZGVyKGNvbXBvbmVudCk7XG4gICAgICAgICAgY29uc3QgYnVpbHQgPSBjb21wb25lbnQuZ2V0U3lzdGVtKCkuYnVpbGQoc3BlYyk7XG4gICAgICAgICAgY291cGxlZFtuYW1lXSA9IGJ1aWx0O1xuICAgICAgICAgIHJldHVybiBidWlsdDtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0RXhpc3RpbmcgPSAoY29tcG9uZW50LCBjb3VwbGVDb25maWcsIG5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIGxvb2t1cENvdXBsZWQoY291cGxlQ29uZmlnLCBuYW1lKS5vclRodW5rKCgpID0+IHtcbiAgICAgICAgICBnZXQkZyhjb3VwbGVDb25maWcub3RoZXJzLCBuYW1lKS5nZXRPckRpZSgnTm8gaW5mb3JtYXRpb24gZm91bmQgZm9yIGNvdXBsZWQgY29tcG9uZW50OiAnICsgbmFtZSk7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVhZFN0YXRlID0gY29uc3RhbnQkMSh7fSk7XG4gICAgICByZXR1cm4gbnUkOCh7XG4gICAgICAgIHJlYWRTdGF0ZSxcbiAgICAgICAgZ2V0RXhpc3RpbmcsXG4gICAgICAgIGdldE9yQ3JlYXRlXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdmFyIENvdXBsaW5nU3RhdGUgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgaW5pdDogaW5pdCRhXG4gICAgfSk7XG5cbiAgICBjb25zdCBDb3VwbGluZyA9IGNyZWF0ZSQ0KHtcbiAgICAgIGZpZWxkczogQ291cGxpbmdTY2hlbWEsXG4gICAgICBuYW1lOiAnY291cGxpbmcnLFxuICAgICAgYXBpczogQ291cGxpbmdBcGlzLFxuICAgICAgc3RhdGU6IENvdXBsaW5nU3RhdGVcbiAgICB9KTtcblxuICAgIGNvbnN0IG51JDMgPSBiYXNlRm4gPT4ge1xuICAgICAgbGV0IGRhdGEgPSBPcHRpb25hbC5ub25lKCk7XG4gICAgICBsZXQgY2FsbGJhY2tzID0gW107XG4gICAgICBjb25zdCBtYXAgPSBmID0+IG51JDMobkNhbGxiYWNrID0+IHtcbiAgICAgICAgZ2V0KGRhdGEgPT4ge1xuICAgICAgICAgIG5DYWxsYmFjayhmKGRhdGEpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGdldCA9IG5DYWxsYmFjayA9PiB7XG4gICAgICAgIGlmIChpc1JlYWR5KCkpIHtcbiAgICAgICAgICBjYWxsKG5DYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2tzLnB1c2gobkNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldCA9IHggPT4ge1xuICAgICAgICBpZiAoIWlzUmVhZHkoKSkge1xuICAgICAgICAgIGRhdGEgPSBPcHRpb25hbC5zb21lKHgpO1xuICAgICAgICAgIHJ1bihjYWxsYmFja3MpO1xuICAgICAgICAgIGNhbGxiYWNrcyA9IFtdO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNSZWFkeSA9ICgpID0+IGRhdGEuaXNTb21lKCk7XG4gICAgICBjb25zdCBydW4gPSBjYnMgPT4ge1xuICAgICAgICBlYWNoJDEoY2JzLCBjYWxsKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjYWxsID0gY2IgPT4ge1xuICAgICAgICBkYXRhLmVhY2goeCA9PiB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjYih4KTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgYmFzZUZuKHNldCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBnZXQsXG4gICAgICAgIG1hcCxcbiAgICAgICAgaXNSZWFkeVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHB1cmUkMSA9IGEgPT4gbnUkMyhjYWxsYmFjayA9PiB7XG4gICAgICBjYWxsYmFjayhhKTtcbiAgICB9KTtcbiAgICBjb25zdCBMYXp5VmFsdWUgPSB7XG4gICAgICBudTogbnUkMyxcbiAgICAgIHB1cmU6IHB1cmUkMVxuICAgIH07XG5cbiAgICBjb25zdCBlcnJvclJlcG9ydGVyID0gZXJyID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9LCAwKTtcbiAgICB9O1xuICAgIGNvbnN0IG1ha2UkNSA9IHJ1biA9PiB7XG4gICAgICBjb25zdCBnZXQgPSBjYWxsYmFjayA9PiB7XG4gICAgICAgIHJ1bigpLnRoZW4oY2FsbGJhY2ssIGVycm9yUmVwb3J0ZXIpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG1hcCA9IGZhYiA9PiB7XG4gICAgICAgIHJldHVybiBtYWtlJDUoKCkgPT4gcnVuKCkudGhlbihmYWIpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBiaW5kID0gYUZ1dHVyZUIgPT4ge1xuICAgICAgICByZXR1cm4gbWFrZSQ1KCgpID0+IHJ1bigpLnRoZW4odiA9PiBhRnV0dXJlQih2KS50b1Byb21pc2UoKSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFub25CaW5kID0gZnV0dXJlQiA9PiB7XG4gICAgICAgIHJldHVybiBtYWtlJDUoKCkgPT4gcnVuKCkudGhlbigoKSA9PiBmdXR1cmVCLnRvUHJvbWlzZSgpKSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdG9MYXp5ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gTGF6eVZhbHVlLm51KGdldCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdG9DYWNoZWQgPSAoKSA9PiB7XG4gICAgICAgIGxldCBjYWNoZSA9IG51bGw7XG4gICAgICAgIHJldHVybiBtYWtlJDUoKCkgPT4ge1xuICAgICAgICAgIGlmIChjYWNoZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY2FjaGUgPSBydW4oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNhY2hlO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCB0b1Byb21pc2UgPSBydW47XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXAsXG4gICAgICAgIGJpbmQsXG4gICAgICAgIGFub25CaW5kLFxuICAgICAgICB0b0xhenksXG4gICAgICAgIHRvQ2FjaGVkLFxuICAgICAgICB0b1Byb21pc2UsXG4gICAgICAgIGdldFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG51JDIgPSBiYXNlRm4gPT4ge1xuICAgICAgcmV0dXJuIG1ha2UkNSgoKSA9PiBuZXcgUHJvbWlzZShiYXNlRm4pKTtcbiAgICB9O1xuICAgIGNvbnN0IHB1cmUgPSBhID0+IHtcbiAgICAgIHJldHVybiBtYWtlJDUoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKGEpKTtcbiAgICB9O1xuICAgIGNvbnN0IEZ1dHVyZSA9IHtcbiAgICAgIG51OiBudSQyLFxuICAgICAgcHVyZVxuICAgIH07XG5cbiAgICBjb25zdCBzdWZmaXggPSBjb25zdGFudCQxKCdzaW5rJyk7XG4gICAgY29uc3QgcGFydFR5cGUkMSA9IGNvbnN0YW50JDEob3B0aW9uYWwoe1xuICAgICAgbmFtZTogc3VmZml4KCksXG4gICAgICBvdmVycmlkZXM6IGNvbnN0YW50JDEoe1xuICAgICAgICBkb206IHsgdGFnOiAnZGl2JyB9LFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbUG9zaXRpb25pbmcuY29uZmlnKHsgdXNlRml4ZWQ6IGFsd2F5cyB9KV0pLFxuICAgICAgICBldmVudHM6IGRlcml2ZSQyKFtcbiAgICAgICAgICBjdXR0ZXIoa2V5ZG93bigpKSxcbiAgICAgICAgICBjdXR0ZXIobW91c2Vkb3duKCkpLFxuICAgICAgICAgIGN1dHRlcihjbGljaygpKVxuICAgICAgICBdKVxuICAgICAgfSlcbiAgICB9KSk7XG5cbiAgICBjb25zdCBnZXRBbmNob3IgPSAoZGV0YWlsLCBjb21wb25lbnQpID0+IHtcbiAgICAgIGNvbnN0IGhvdHNwb3QgPSBkZXRhaWwuZ2V0SG90c3BvdChjb21wb25lbnQpLmdldE9yKGNvbXBvbmVudCk7XG4gICAgICBjb25zdCB0eXBlID0gJ2hvdHNwb3QnO1xuICAgICAgY29uc3Qgb3ZlcnJpZGVzID0gZGV0YWlsLmdldEFuY2hvck92ZXJyaWRlcygpO1xuICAgICAgcmV0dXJuIGRldGFpbC5sYXlvdXRzLmZvbGQoKCkgPT4gKHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgaG90c3BvdCxcbiAgICAgICAgb3ZlcnJpZGVzXG4gICAgICB9KSwgbGF5b3V0cyA9PiAoe1xuICAgICAgICB0eXBlLFxuICAgICAgICBob3RzcG90LFxuICAgICAgICBvdmVycmlkZXMsXG4gICAgICAgIGxheW91dHNcbiAgICAgIH0pKTtcbiAgICB9O1xuICAgIGNvbnN0IGZldGNoID0gKGRldGFpbCwgbWFwRmV0Y2gsIGNvbXBvbmVudCkgPT4ge1xuICAgICAgY29uc3QgZmV0Y2hlciA9IGRldGFpbC5mZXRjaDtcbiAgICAgIHJldHVybiBmZXRjaGVyKGNvbXBvbmVudCkubWFwKG1hcEZldGNoKTtcbiAgICB9O1xuICAgIGNvbnN0IG9wZW5GID0gKGRldGFpbCwgbWFwRmV0Y2gsIGFuY2hvciwgY29tcG9uZW50LCBzYW5kYm94LCBleHRlcm5hbHMsIGhpZ2hsaWdodE9uT3BlbikgPT4ge1xuICAgICAgY29uc3QgZnV0dXJlRGF0YSA9IGZldGNoKGRldGFpbCwgbWFwRmV0Y2gsIGNvbXBvbmVudCk7XG4gICAgICBjb25zdCBnZXRMYXp5U2luayA9IGdldFNpbmsoY29tcG9uZW50LCBkZXRhaWwpO1xuICAgICAgcmV0dXJuIGZ1dHVyZURhdGEubWFwKHRkYXRhID0+IHRkYXRhLmJpbmQoZGF0YSA9PiBPcHRpb25hbC5mcm9tKHRpZXJlZE1lbnUuc2tldGNoKHtcbiAgICAgICAgLi4uZXh0ZXJuYWxzLm1lbnUoKSxcbiAgICAgICAgdWlkOiBnZW5lcmF0ZSQ1KCcnKSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgaGlnaGxpZ2h0T25PcGVuLFxuICAgICAgICBvbk9wZW5NZW51OiAodG1lbnUsIG1lbnUpID0+IHtcbiAgICAgICAgICBjb25zdCBzaW5rID0gZ2V0TGF6eVNpbmsoKS5nZXRPckRpZSgpO1xuICAgICAgICAgIFBvc2l0aW9uaW5nLnBvc2l0aW9uKHNpbmssIG1lbnUsIHsgYW5jaG9yIH0pO1xuICAgICAgICAgIFNhbmRib3hpbmcuZGVjbG9hayhzYW5kYm94KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25PcGVuU3VibWVudTogKHRtZW51LCBpdGVtLCBzdWJtZW51KSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2luayA9IGdldExhenlTaW5rKCkuZ2V0T3JEaWUoKTtcbiAgICAgICAgICBQb3NpdGlvbmluZy5wb3NpdGlvbihzaW5rLCBzdWJtZW51LCB7XG4gICAgICAgICAgICBhbmNob3I6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Ym1lbnUnLFxuICAgICAgICAgICAgICBpdGVtXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgU2FuZGJveGluZy5kZWNsb2FrKHNhbmRib3gpO1xuICAgICAgICB9LFxuICAgICAgICBvblJlcG9zaXRpb25NZW51OiAodG1lbnUsIHByaW1hcnlNZW51LCBzdWJtZW51VHJpZ2dlcnMpID0+IHtcbiAgICAgICAgICBjb25zdCBzaW5rID0gZ2V0TGF6eVNpbmsoKS5nZXRPckRpZSgpO1xuICAgICAgICAgIFBvc2l0aW9uaW5nLnBvc2l0aW9uKHNpbmssIHByaW1hcnlNZW51LCB7IGFuY2hvciB9KTtcbiAgICAgICAgICBlYWNoJDEoc3VibWVudVRyaWdnZXJzLCBzdCA9PiB7XG4gICAgICAgICAgICBQb3NpdGlvbmluZy5wb3NpdGlvbihzaW5rLCBzdC50cmlnZ2VyZWRNZW51LCB7XG4gICAgICAgICAgICAgIGFuY2hvcjoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdzdWJtZW51JyxcbiAgICAgICAgICAgICAgICBpdGVtOiBzdC50cmlnZ2VyaW5nSXRlbVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Fc2NhcGU6ICgpID0+IHtcbiAgICAgICAgICBGb2N1c2luZy5mb2N1cyhjb21wb25lbnQpO1xuICAgICAgICAgIFNhbmRib3hpbmcuY2xvc2Uoc2FuZGJveCk7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pKSkpO1xuICAgIH07XG4gICAgY29uc3Qgb3BlbiA9IChkZXRhaWwsIG1hcEZldGNoLCBob3RzcG90LCBzYW5kYm94LCBleHRlcm5hbHMsIG9uT3BlblN5bmMsIGhpZ2hsaWdodE9uT3BlbikgPT4ge1xuICAgICAgY29uc3QgYW5jaG9yID0gZ2V0QW5jaG9yKGRldGFpbCwgaG90c3BvdCk7XG4gICAgICBjb25zdCBwcm9jZXNzZWQgPSBvcGVuRihkZXRhaWwsIG1hcEZldGNoLCBhbmNob3IsIGhvdHNwb3QsIHNhbmRib3gsIGV4dGVybmFscywgaGlnaGxpZ2h0T25PcGVuKTtcbiAgICAgIHJldHVybiBwcm9jZXNzZWQubWFwKHRkYXRhID0+IHtcbiAgICAgICAgdGRhdGEuZm9sZCgoKSA9PiB7XG4gICAgICAgICAgaWYgKFNhbmRib3hpbmcuaXNPcGVuKHNhbmRib3gpKSB7XG4gICAgICAgICAgICBTYW5kYm94aW5nLmNsb3NlKHNhbmRib3gpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgZGF0YSA9PiB7XG4gICAgICAgICAgU2FuZGJveGluZy5jbG9hayhzYW5kYm94KTtcbiAgICAgICAgICBTYW5kYm94aW5nLm9wZW4oc2FuZGJveCwgZGF0YSk7XG4gICAgICAgICAgb25PcGVuU3luYyhzYW5kYm94KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzYW5kYm94O1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBjbG9zZSA9IChkZXRhaWwsIG1hcEZldGNoLCBjb21wb25lbnQsIHNhbmRib3gsIF9leHRlcm5hbHMsIF9vbk9wZW5TeW5jLCBfaGlnaGxpZ2h0T25PcGVuKSA9PiB7XG4gICAgICBTYW5kYm94aW5nLmNsb3NlKHNhbmRib3gpO1xuICAgICAgcmV0dXJuIEZ1dHVyZS5wdXJlKHNhbmRib3gpO1xuICAgIH07XG4gICAgY29uc3QgdG9nZ2xlUG9wdXAgPSAoZGV0YWlsLCBtYXBGZXRjaCwgaG90c3BvdCwgZXh0ZXJuYWxzLCBvbk9wZW5TeW5jLCBoaWdobGlnaHRPbk9wZW4pID0+IHtcbiAgICAgIGNvbnN0IHNhbmRib3ggPSBDb3VwbGluZy5nZXRDb3VwbGVkKGhvdHNwb3QsICdzYW5kYm94Jyk7XG4gICAgICBjb25zdCBzaG93aW5nID0gU2FuZGJveGluZy5pc09wZW4oc2FuZGJveCk7XG4gICAgICBjb25zdCBhY3Rpb24gPSBzaG93aW5nID8gY2xvc2UgOiBvcGVuO1xuICAgICAgcmV0dXJuIGFjdGlvbihkZXRhaWwsIG1hcEZldGNoLCBob3RzcG90LCBzYW5kYm94LCBleHRlcm5hbHMsIG9uT3BlblN5bmMsIGhpZ2hsaWdodE9uT3Blbik7XG4gICAgfTtcbiAgICBjb25zdCBtYXRjaFdpZHRoID0gKGhvdHNwb3QsIGNvbnRhaW5lciwgdXNlTWluV2lkdGgpID0+IHtcbiAgICAgIGNvbnN0IG1lbnUgPSBDb21wb3NpbmcuZ2V0Q3VycmVudChjb250YWluZXIpLmdldE9yKGNvbnRhaW5lcik7XG4gICAgICBjb25zdCBidXR0b25XaWR0aCA9IGdldCRjKGhvdHNwb3QuZWxlbWVudCk7XG4gICAgICBpZiAodXNlTWluV2lkdGgpIHtcbiAgICAgICAgc2V0JDgobWVudS5lbGVtZW50LCAnbWluLXdpZHRoJywgYnV0dG9uV2lkdGggKyAncHgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldCQ3KG1lbnUuZWxlbWVudCwgYnV0dG9uV2lkdGgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ2V0U2luayA9IChhbnlJblN5c3RlbSwgc2lua0RldGFpbCkgPT4gYW55SW5TeXN0ZW0uZ2V0U3lzdGVtKCkuZ2V0QnlVaWQoc2lua0RldGFpbC51aWQgKyAnLScgKyBzdWZmaXgoKSkubWFwKGludGVybmFsU2luayA9PiAoKSA9PiBSZXN1bHQudmFsdWUoaW50ZXJuYWxTaW5rKSkuZ2V0T3JUaHVuaygoKSA9PiBzaW5rRGV0YWlsLmxhenlTaW5rLmZvbGQoKCkgPT4gKCkgPT4gUmVzdWx0LmVycm9yKG5ldyBFcnJvcignTm8gaW50ZXJuYWwgc2luayBpcyBzcGVjaWZpZWQsIG5vciBjb3VsZCBhbiBleHRlcm5hbCBzaW5rIGJlIGZvdW5kJykpLCBsYXp5U2lua0ZuID0+ICgpID0+IGxhenlTaW5rRm4oYW55SW5TeXN0ZW0pKSk7XG4gICAgY29uc3QgZG9SZXBvc2l0aW9uTWVudXMgPSBzYW5kYm94ID0+IHtcbiAgICAgIFNhbmRib3hpbmcuZ2V0U3RhdGUoc2FuZGJveCkuZWFjaCh0bWVudSA9PiB7XG4gICAgICAgIHRpZXJlZE1lbnUucmVwb3NpdGlvbk1lbnVzKHRtZW51KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbWFrZVNhbmRib3gkMSA9IChkZXRhaWwsIGhvdHNwb3QsIGV4dHJhcykgPT4ge1xuICAgICAgY29uc3QgYXJpYUNvbnRyb2xzID0gbWFuYWdlcigpO1xuICAgICAgY29uc3Qgb25PcGVuID0gKGNvbXBvbmVudCwgbWVudSkgPT4ge1xuICAgICAgICBjb25zdCBhbmNob3IgPSBnZXRBbmNob3IoZGV0YWlsLCBob3RzcG90KTtcbiAgICAgICAgYXJpYUNvbnRyb2xzLmxpbmsoaG90c3BvdC5lbGVtZW50KTtcbiAgICAgICAgaWYgKGRldGFpbC5tYXRjaFdpZHRoKSB7XG4gICAgICAgICAgbWF0Y2hXaWR0aChhbmNob3IuaG90c3BvdCwgbWVudSwgZGV0YWlsLnVzZU1pbldpZHRoKTtcbiAgICAgICAgfVxuICAgICAgICBkZXRhaWwub25PcGVuKGFuY2hvciwgY29tcG9uZW50LCBtZW51KTtcbiAgICAgICAgaWYgKGV4dHJhcyAhPT0gdW5kZWZpbmVkICYmIGV4dHJhcy5vbk9wZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGV4dHJhcy5vbk9wZW4oY29tcG9uZW50LCBtZW51KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG9uQ2xvc2UgPSAoY29tcG9uZW50LCBtZW51KSA9PiB7XG4gICAgICAgIGFyaWFDb250cm9scy51bmxpbmsoaG90c3BvdC5lbGVtZW50KTtcbiAgICAgICAgaWYgKGV4dHJhcyAhPT0gdW5kZWZpbmVkICYmIGV4dHJhcy5vbkNsb3NlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleHRyYXMub25DbG9zZShjb21wb25lbnQsIG1lbnUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgbGF6eVNpbmsgPSBnZXRTaW5rKGhvdHNwb3QsIGRldGFpbCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IGRldGFpbC5zYW5kYm94Q2xhc3NlcyxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICBpZDogYXJpYUNvbnRyb2xzLmlkLFxuICAgICAgICAgICAgcm9sZTogJ2xpc3Rib3gnXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBiZWhhdmlvdXJzOiBTa2V0Y2hCZWhhdmlvdXJzLmF1Z21lbnQoZGV0YWlsLnNhbmRib3hCZWhhdmlvdXJzLCBbXG4gICAgICAgICAgUmVwcmVzZW50aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBzdG9yZToge1xuICAgICAgICAgICAgICBtb2RlOiAnbWVtb3J5JyxcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiBob3RzcG90XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgU2FuZGJveGluZy5jb25maWcoe1xuICAgICAgICAgICAgb25PcGVuLFxuICAgICAgICAgICAgb25DbG9zZSxcbiAgICAgICAgICAgIGlzUGFydE9mOiAoY29udGFpbmVyLCBkYXRhLCBxdWVyeUVsZW0pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGlzUGFydE9mJDEoZGF0YSwgcXVlcnlFbGVtKSB8fCBpc1BhcnRPZiQxKGhvdHNwb3QsIHF1ZXJ5RWxlbSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0QXR0YWNoUG9pbnQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGxhenlTaW5rKCkuZ2V0T3JEaWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBDb21wb3NpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIGZpbmQ6IHNhbmRib3ggPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gU2FuZGJveGluZy5nZXRTdGF0ZShzYW5kYm94KS5iaW5kKG1lbnUgPT4gQ29tcG9zaW5nLmdldEN1cnJlbnQobWVudSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIFJlY2VpdmluZy5jb25maWcoe1xuICAgICAgICAgICAgY2hhbm5lbHM6IHtcbiAgICAgICAgICAgICAgLi4ucmVjZWl2aW5nQ2hhbm5lbCQxKHsgaXNFeHRyYVBhcnQ6IG5ldmVyIH0pLFxuICAgICAgICAgICAgICAuLi5yZWNlaXZpbmdDaGFubmVsKHsgZG9SZXBvc2l0aW9uOiBkb1JlcG9zaXRpb25NZW51cyB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgcmVwb3NpdGlvbk1lbnVzID0gY29tcCA9PiB7XG4gICAgICBjb25zdCBzYW5kYm94ID0gQ291cGxpbmcuZ2V0Q291cGxlZChjb21wLCAnc2FuZGJveCcpO1xuICAgICAgZG9SZXBvc2l0aW9uTWVudXMoc2FuZGJveCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNhbmRib3hGaWVsZHMgPSAoKSA9PiBbXG4gICAgICBkZWZhdWx0ZWQoJ3NhbmRib3hDbGFzc2VzJywgW10pLFxuICAgICAgU2tldGNoQmVoYXZpb3Vycy5maWVsZCgnc2FuZGJveEJlaGF2aW91cnMnLCBbXG4gICAgICAgIENvbXBvc2luZyxcbiAgICAgICAgUmVjZWl2aW5nLFxuICAgICAgICBTYW5kYm94aW5nLFxuICAgICAgICBSZXByZXNlbnRpbmdcbiAgICAgIF0pXG4gICAgXTtcblxuICAgIGNvbnN0IHNjaGVtYSRrID0gY29uc3RhbnQkMShbXG4gICAgICByZXF1aXJlZCQxKCdkb20nKSxcbiAgICAgIHJlcXVpcmVkJDEoJ2ZldGNoJyksXG4gICAgICBvbkhhbmRsZXIoJ29uT3BlbicpLFxuICAgICAgb25LZXlib2FyZEhhbmRsZXIoJ29uRXhlY3V0ZScpLFxuICAgICAgZGVmYXVsdGVkKCdnZXRIb3RzcG90JywgT3B0aW9uYWwuc29tZSksXG4gICAgICBkZWZhdWx0ZWQoJ2dldEFuY2hvck92ZXJyaWRlcycsIGNvbnN0YW50JDEoe30pKSxcbiAgICAgIHNjaGVtYSR5KCksXG4gICAgICBmaWVsZCgnZHJvcGRvd25CZWhhdmlvdXJzJywgW1xuICAgICAgICBUb2dnbGluZyxcbiAgICAgICAgQ291cGxpbmcsXG4gICAgICAgIEtleWluZyxcbiAgICAgICAgRm9jdXNpbmdcbiAgICAgIF0pLFxuICAgICAgcmVxdWlyZWQkMSgndG9nZ2xlQ2xhc3MnKSxcbiAgICAgIGRlZmF1bHRlZCgnZXZlbnRPcmRlcicsIHt9KSxcbiAgICAgIG9wdGlvbiQzKCdsYXp5U2luaycpLFxuICAgICAgZGVmYXVsdGVkKCdtYXRjaFdpZHRoJywgZmFsc2UpLFxuICAgICAgZGVmYXVsdGVkKCd1c2VNaW5XaWR0aCcsIGZhbHNlKSxcbiAgICAgIG9wdGlvbiQzKCdyb2xlJylcbiAgICBdLmNvbmNhdChzYW5kYm94RmllbGRzKCkpKTtcbiAgICBjb25zdCBwYXJ0cyRlID0gY29uc3RhbnQkMShbXG4gICAgICBleHRlcm5hbCh7XG4gICAgICAgIHNjaGVtYTogW1xuICAgICAgICAgIHRpZXJlZE1lbnVNYXJrZXJzKCksXG4gICAgICAgICAgZGVmYXVsdGVkKCdmYWtlRm9jdXMnLCBmYWxzZSlcbiAgICAgICAgXSxcbiAgICAgICAgbmFtZTogJ21lbnUnLFxuICAgICAgICBkZWZhdWx0czogZGV0YWlsID0+IHtcbiAgICAgICAgICByZXR1cm4geyBvbkV4ZWN1dGU6IGRldGFpbC5vbkV4ZWN1dGUgfTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBwYXJ0VHlwZSQxKClcbiAgICBdKTtcblxuICAgIGNvbnN0IGZhY3RvcnkkayA9IChkZXRhaWwsIGNvbXBvbmVudHMsIF9zcGVjLCBleHRlcm5hbHMpID0+IHtcbiAgICAgIGNvbnN0IGxvb2t1cEF0dHIgPSBhdHRyID0+IGdldCRnKGRldGFpbC5kb20sICdhdHRyaWJ1dGVzJykuYmluZChhdHRycyA9PiBnZXQkZyhhdHRycywgYXR0cikpO1xuICAgICAgY29uc3Qgc3dpdGNoVG9NZW51ID0gc2FuZGJveCA9PiB7XG4gICAgICAgIFNhbmRib3hpbmcuZ2V0U3RhdGUoc2FuZGJveCkuZWFjaCh0bWVudSA9PiB7XG4gICAgICAgICAgdGllcmVkTWVudS5oaWdobGlnaHRQcmltYXJ5KHRtZW51KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdG9nZ2xlUG9wdXAkMSA9IChkcm9wZG93bkNvbXAsIG9uT3BlblN5bmMsIGhpZ2hsaWdodE9uT3BlbikgPT4ge1xuICAgICAgICByZXR1cm4gdG9nZ2xlUG9wdXAoZGV0YWlsLCBpZGVudGl0eSwgZHJvcGRvd25Db21wLCBleHRlcm5hbHMsIG9uT3BlblN5bmMsIGhpZ2hsaWdodE9uT3Blbik7XG4gICAgICB9O1xuICAgICAgY29uc3QgYWN0aW9uID0gY29tcG9uZW50ID0+IHtcbiAgICAgICAgY29uc3Qgb25PcGVuU3luYyA9IHN3aXRjaFRvTWVudTtcbiAgICAgICAgdG9nZ2xlUG9wdXAkMShjb21wb25lbnQsIG9uT3BlblN5bmMsIEhpZ2hsaWdodE9uT3Blbi5IaWdobGlnaHRNZW51QW5kSXRlbSkuZ2V0KG5vb3ApO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFwaXMgPSB7XG4gICAgICAgIGV4cGFuZDogY29tcCA9PiB7XG4gICAgICAgICAgaWYgKCFUb2dnbGluZy5pc09uKGNvbXApKSB7XG4gICAgICAgICAgICB0b2dnbGVQb3B1cCQxKGNvbXAsIG5vb3AsIEhpZ2hsaWdodE9uT3Blbi5IaWdobGlnaHROb25lKS5nZXQobm9vcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvcGVuOiBjb21wID0+IHtcbiAgICAgICAgICBpZiAoIVRvZ2dsaW5nLmlzT24oY29tcCkpIHtcbiAgICAgICAgICAgIHRvZ2dsZVBvcHVwJDEoY29tcCwgbm9vcCwgSGlnaGxpZ2h0T25PcGVuLkhpZ2hsaWdodE1lbnVBbmRJdGVtKS5nZXQobm9vcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZWZldGNoOiBjb21wID0+IHtcbiAgICAgICAgICBjb25zdCBvcHRTYW5kYm94ID0gQ291cGxpbmcuZ2V0RXhpc3RpbmdDb3VwbGVkKGNvbXAsICdzYW5kYm94Jyk7XG4gICAgICAgICAgcmV0dXJuIG9wdFNhbmRib3guZm9sZCgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdG9nZ2xlUG9wdXAkMShjb21wLCBub29wLCBIaWdobGlnaHRPbk9wZW4uSGlnaGxpZ2h0TWVudUFuZEl0ZW0pLm1hcChub29wKTtcbiAgICAgICAgICB9LCBzYW5kYm94Q29tcCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gb3BlbihkZXRhaWwsIGlkZW50aXR5LCBjb21wLCBzYW5kYm94Q29tcCwgZXh0ZXJuYWxzLCBub29wLCBIaWdobGlnaHRPbk9wZW4uSGlnaGxpZ2h0TWVudUFuZEl0ZW0pLm1hcChub29wKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNPcGVuOiBUb2dnbGluZy5pc09uLFxuICAgICAgICBjbG9zZTogY29tcCA9PiB7XG4gICAgICAgICAgaWYgKFRvZ2dsaW5nLmlzT24oY29tcCkpIHtcbiAgICAgICAgICAgIHRvZ2dsZVBvcHVwJDEoY29tcCwgbm9vcCwgSGlnaGxpZ2h0T25PcGVuLkhpZ2hsaWdodE1lbnVBbmRJdGVtKS5nZXQobm9vcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZXBvc2l0aW9uTWVudXM6IGNvbXAgPT4ge1xuICAgICAgICAgIGlmIChUb2dnbGluZy5pc09uKGNvbXApKSB7XG4gICAgICAgICAgICByZXBvc2l0aW9uTWVudXMoY29tcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgdHJpZ2dlckV4ZWN1dGUgPSAoY29tcCwgX3NlKSA9PiB7XG4gICAgICAgIGVtaXRFeGVjdXRlKGNvbXApO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1aWQ6IGRldGFpbC51aWQsXG4gICAgICAgIGRvbTogZGV0YWlsLmRvbSxcbiAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgYmVoYXZpb3VyczogYXVnbWVudChkZXRhaWwuZHJvcGRvd25CZWhhdmlvdXJzLCBbXG4gICAgICAgICAgVG9nZ2xpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzOiBkZXRhaWwudG9nZ2xlQ2xhc3MsXG4gICAgICAgICAgICBhcmlhOiB7IG1vZGU6ICdleHBhbmRlZCcgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIENvdXBsaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBvdGhlcnM6IHtcbiAgICAgICAgICAgICAgc2FuZGJveDogaG90c3BvdCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VTYW5kYm94JDEoZGV0YWlsLCBob3RzcG90LCB7XG4gICAgICAgICAgICAgICAgICBvbk9wZW46ICgpID0+IFRvZ2dsaW5nLm9uKGhvdHNwb3QpLFxuICAgICAgICAgICAgICAgICAgb25DbG9zZTogKCkgPT4gVG9nZ2xpbmcub2ZmKGhvdHNwb3QpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBLZXlpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIG1vZGU6ICdzcGVjaWFsJyxcbiAgICAgICAgICAgIG9uU3BhY2U6IHRyaWdnZXJFeGVjdXRlLFxuICAgICAgICAgICAgb25FbnRlcjogdHJpZ2dlckV4ZWN1dGUsXG4gICAgICAgICAgICBvbkRvd246IChjb21wLCBfc2UpID0+IHtcbiAgICAgICAgICAgICAgaWYgKERyb3Bkb3duLmlzT3Blbihjb21wKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNhbmRib3ggPSBDb3VwbGluZy5nZXRDb3VwbGVkKGNvbXAsICdzYW5kYm94Jyk7XG4gICAgICAgICAgICAgICAgc3dpdGNoVG9NZW51KHNhbmRib3gpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIERyb3Bkb3duLm9wZW4oY29tcCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25Fc2NhcGU6IChjb21wLCBfc2UpID0+IHtcbiAgICAgICAgICAgICAgaWYgKERyb3Bkb3duLmlzT3Blbihjb21wKSkge1xuICAgICAgICAgICAgICAgIERyb3Bkb3duLmNsb3NlKGNvbXApO1xuICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHRydWUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBGb2N1c2luZy5jb25maWcoe30pXG4gICAgICAgIF0pLFxuICAgICAgICBldmVudHM6IGV2ZW50cyRhKE9wdGlvbmFsLnNvbWUoYWN0aW9uKSksXG4gICAgICAgIGV2ZW50T3JkZXI6IHtcbiAgICAgICAgICAuLi5kZXRhaWwuZXZlbnRPcmRlcixcbiAgICAgICAgICBbZXhlY3V0ZSQ1KCldOiBbXG4gICAgICAgICAgICAnZGlzYWJsaW5nJyxcbiAgICAgICAgICAgICd0b2dnbGluZycsXG4gICAgICAgICAgICAnYWxsb3kuYmFzZS5iZWhhdmlvdXInXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBhcGlzLFxuICAgICAgICBkb21Nb2RpZmljYXRpb246IHtcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAnYXJpYS1oYXNwb3B1cCc6ICd0cnVlJyxcbiAgICAgICAgICAgIC4uLmRldGFpbC5yb2xlLmZvbGQoKCkgPT4gKHt9KSwgcm9sZSA9PiAoeyByb2xlIH0pKSxcbiAgICAgICAgICAgIC4uLmRldGFpbC5kb20udGFnID09PSAnYnV0dG9uJyA/IHsgdHlwZTogbG9va3VwQXR0cigndHlwZScpLmdldE9yKCdidXR0b24nKSB9IDoge31cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBEcm9wZG93biA9IGNvbXBvc2l0ZSh7XG4gICAgICBuYW1lOiAnRHJvcGRvd24nLFxuICAgICAgY29uZmlnRmllbGRzOiBzY2hlbWEkaygpLFxuICAgICAgcGFydEZpZWxkczogcGFydHMkZSgpLFxuICAgICAgZmFjdG9yeTogZmFjdG9yeSRrLFxuICAgICAgYXBpczoge1xuICAgICAgICBvcGVuOiAoYXBpcywgY29tcCkgPT4gYXBpcy5vcGVuKGNvbXApLFxuICAgICAgICByZWZldGNoOiAoYXBpcywgY29tcCkgPT4gYXBpcy5yZWZldGNoKGNvbXApLFxuICAgICAgICBleHBhbmQ6IChhcGlzLCBjb21wKSA9PiBhcGlzLmV4cGFuZChjb21wKSxcbiAgICAgICAgY2xvc2U6IChhcGlzLCBjb21wKSA9PiBhcGlzLmNsb3NlKGNvbXApLFxuICAgICAgICBpc09wZW46IChhcGlzLCBjb21wKSA9PiBhcGlzLmlzT3Blbihjb21wKSxcbiAgICAgICAgcmVwb3NpdGlvbk1lbnVzOiAoYXBpcywgY29tcCkgPT4gYXBpcy5yZXBvc2l0aW9uTWVudXMoY29tcClcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGlkZW50aWZ5TWVudUxheW91dCA9IHNlYXJjaE1vZGUgPT4ge1xuICAgICAgc3dpdGNoIChzZWFyY2hNb2RlLnNlYXJjaE1vZGUpIHtcbiAgICAgIGNhc2UgJ25vLXNlYXJjaCc6IHtcbiAgICAgICAgICByZXR1cm4geyBtZW51VHlwZTogJ25vcm1hbCcgfTtcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtZW51VHlwZTogJ3NlYXJjaGFibGUnLFxuICAgICAgICAgICAgc2VhcmNoTW9kZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZVJlZmV0Y2hUcmlnZ2VyID0gb3JpZ2luYWxTYW5kYm94Q29tcCA9PiB7XG4gICAgICBjb25zdCBkcm9wZG93biA9IFJlcHJlc2VudGluZy5nZXRWYWx1ZShvcmlnaW5hbFNhbmRib3hDb21wKTtcbiAgICAgIGNvbnN0IG9wdFNlYXJjaGVyU3RhdGUgPSBmaW5kV2l0aGluU2FuZGJveChvcmlnaW5hbFNhbmRib3hDb21wKS5tYXAoc2F2ZVN0YXRlKTtcbiAgICAgIERyb3Bkb3duLnJlZmV0Y2goZHJvcGRvd24pLmdldCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1NhbmRib3hDb21wID0gQ291cGxpbmcuZ2V0Q291cGxlZChkcm9wZG93biwgJ3NhbmRib3gnKTtcbiAgICAgICAgb3B0U2VhcmNoZXJTdGF0ZS5lYWNoKHNlYXJjaGVyU3RhdGUgPT4gZmluZFdpdGhpblNhbmRib3gobmV3U2FuZGJveENvbXApLmVhY2goaW5wdXRDb21wID0+IHJlc3RvcmVTdGF0ZShpbnB1dENvbXAsIHNlYXJjaGVyU3RhdGUpKSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZVJlZGlyZWN0VG9NZW51SXRlbSA9IChzYW5kYm94Q29tcCwgc2UpID0+IHtcbiAgICAgIGdldEFjdGl2ZU1lbnVJdGVtRnJvbShzYW5kYm94Q29tcCkuZWFjaChhY3RpdmVJdGVtID0+IHtcbiAgICAgICAgcmV0YXJnZXRBbmREaXNwYXRjaFdpdGgoc2FuZGJveENvbXAsIGFjdGl2ZUl0ZW0uZWxlbWVudCwgc2UuZXZlbnQuZXZlbnRUeXBlLCBzZS5ldmVudC5pbnRlcmFjdGlvbkV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0QWN0aXZlTWVudUl0ZW1Gcm9tID0gc2FuZGJveENvbXAgPT4ge1xuICAgICAgcmV0dXJuIFNhbmRib3hpbmcuZ2V0U3RhdGUoc2FuZGJveENvbXApLmJpbmQoSGlnaGxpZ2h0aW5nLmdldEhpZ2hsaWdodGVkKS5iaW5kKEhpZ2hsaWdodGluZy5nZXRIaWdobGlnaHRlZCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRTZWFyY2hSZXN1bHRzID0gYWN0aXZlTWVudUNvbXAgPT4ge1xuICAgICAgcmV0dXJuIGhhcyhhY3RpdmVNZW51Q29tcC5lbGVtZW50LCBzZWFyY2hSZXN1bHRzQ2xhc3MpID8gT3B0aW9uYWwuc29tZShhY3RpdmVNZW51Q29tcC5lbGVtZW50KSA6IGRlc2NlbmRhbnQoYWN0aXZlTWVudUNvbXAuZWxlbWVudCwgJy4nICsgc2VhcmNoUmVzdWx0c0NsYXNzKTtcbiAgICB9O1xuICAgIGNvbnN0IHVwZGF0ZUFyaWFPbkhpZ2hsaWdodCA9ICh0bWVudUNvbXAsIG1lbnVDb21wLCBpdGVtQ29tcCkgPT4ge1xuICAgICAgZmluZFdpdGhpbk1lbnUodG1lbnVDb21wKS5lYWNoKGlucHV0Q29tcCA9PiB7XG4gICAgICAgIHNldEFjdGl2ZURlc2NlbmRhbnQoaW5wdXRDb21wLCBpdGVtQ29tcCk7XG4gICAgICAgIGNvbnN0IG9wdEFjdGl2ZVJlc3VsdHMgPSBnZXRTZWFyY2hSZXN1bHRzKG1lbnVDb21wKTtcbiAgICAgICAgb3B0QWN0aXZlUmVzdWx0cy5lYWNoKHJlc3VsdHNFbGVtID0+IHtcbiAgICAgICAgICBnZXRPcHQocmVzdWx0c0VsZW0sICdpZCcpLmVhY2goY29udHJvbGxlZElkID0+IHNldCQ5KGlucHV0Q29tcC5lbGVtZW50LCAnYXJpYS1jb250cm9scycsIGNvbnRyb2xsZWRJZCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgc2V0JDkoaXRlbUNvbXAuZWxlbWVudCwgJ2FyaWEtc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgIH07XG4gICAgY29uc3QgdXBkYXRlQXJpYU9uRGVoaWdobGlnaHQgPSAodG1lbnVDb21wLCBtZW51Q29tcCwgaXRlbUNvbXApID0+IHtcbiAgICAgIHNldCQ5KGl0ZW1Db21wLmVsZW1lbnQsICdhcmlhLXNlbGVjdGVkJywgJ2ZhbHNlJyk7XG4gICAgfTtcbiAgICBjb25zdCBmb2N1c1NlYXJjaEZpZWxkID0gdG1lbnVDb21wID0+IHtcbiAgICAgIGZpbmRXaXRoaW5NZW51KHRtZW51Q29tcCkuZWFjaChzZWFyY2hlckNvbXAgPT4gRm9jdXNpbmcuZm9jdXMoc2VhcmNoZXJDb21wKSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRTZWFyY2hQYXR0ZXJuID0gZHJvcGRvd25Db21wID0+IHtcbiAgICAgIGNvbnN0IG9wdFNhbmRib3hDb21wID0gQ291cGxpbmcuZ2V0RXhpc3RpbmdDb3VwbGVkKGRyb3Bkb3duQ29tcCwgJ3NhbmRib3gnKTtcbiAgICAgIHJldHVybiBvcHRTYW5kYm94Q29tcC5iaW5kKGZpbmRXaXRoaW5TYW5kYm94KS5tYXAoc2F2ZVN0YXRlKS5tYXAoc3RhdGUgPT4gc3RhdGUuZmV0Y2hQYXR0ZXJuKS5nZXRPcignJyk7XG4gICAgfTtcblxuICAgIHZhciBGb2N1c01vZGU7XG4gICAgKGZ1bmN0aW9uIChGb2N1c01vZGUpIHtcbiAgICAgIEZvY3VzTW9kZVtGb2N1c01vZGVbJ0NvbnRlbnRGb2N1cyddID0gMF0gPSAnQ29udGVudEZvY3VzJztcbiAgICAgIEZvY3VzTW9kZVtGb2N1c01vZGVbJ1VpRm9jdXMnXSA9IDFdID0gJ1VpRm9jdXMnO1xuICAgIH0oRm9jdXNNb2RlIHx8IChGb2N1c01vZGUgPSB7fSkpKTtcbiAgICBjb25zdCBjcmVhdGVNZW51SXRlbUZyb21CcmlkZ2UgPSAoaXRlbSwgaXRlbVJlc3BvbnNlLCBiYWNrc3RhZ2UsIG1lbnVIYXNJY29ucywgaXNIb3Jpem9udGFsTWVudSkgPT4ge1xuICAgICAgY29uc3QgcHJvdmlkZXJzQmFja3N0YWdlID0gYmFja3N0YWdlLnNoYXJlZC5wcm92aWRlcnM7XG4gICAgICBjb25zdCBwYXJzZUZvckhvcml6b250YWxNZW51ID0gbWVudWl0ZW0gPT4gIWlzSG9yaXpvbnRhbE1lbnUgPyBtZW51aXRlbSA6IHtcbiAgICAgICAgLi4ubWVudWl0ZW0sXG4gICAgICAgIHNob3J0Y3V0OiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGljb246IG1lbnVpdGVtLnRleHQuaXNTb21lKCkgPyBPcHRpb25hbC5ub25lKCkgOiBtZW51aXRlbS5pY29uXG4gICAgICB9O1xuICAgICAgc3dpdGNoIChpdGVtLnR5cGUpIHtcbiAgICAgIGNhc2UgJ21lbnVpdGVtJzpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lbnVJdGVtKGl0ZW0pLmZvbGQoaGFuZGxlRXJyb3IsIGQgPT4gT3B0aW9uYWwuc29tZShub3JtYWwocGFyc2VGb3JIb3Jpem9udGFsTWVudShkKSwgaXRlbVJlc3BvbnNlLCBwcm92aWRlcnNCYWNrc3RhZ2UsIG1lbnVIYXNJY29ucykpKTtcbiAgICAgIGNhc2UgJ25lc3RlZG1lbnVpdGVtJzpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU5lc3RlZE1lbnVJdGVtKGl0ZW0pLmZvbGQoaGFuZGxlRXJyb3IsIGQgPT4gT3B0aW9uYWwuc29tZShuZXN0ZWQocGFyc2VGb3JIb3Jpem9udGFsTWVudShkKSwgaXRlbVJlc3BvbnNlLCBwcm92aWRlcnNCYWNrc3RhZ2UsIG1lbnVIYXNJY29ucywgaXNIb3Jpem9udGFsTWVudSkpKTtcbiAgICAgIGNhc2UgJ3RvZ2dsZW1lbnVpdGVtJzpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVRvZ2dsZU1lbnVJdGVtKGl0ZW0pLmZvbGQoaGFuZGxlRXJyb3IsIGQgPT4gT3B0aW9uYWwuc29tZSh0b2dnbGUkMShwYXJzZUZvckhvcml6b250YWxNZW51KGQpLCBpdGVtUmVzcG9uc2UsIHByb3ZpZGVyc0JhY2tzdGFnZSwgbWVudUhhc0ljb25zKSkpO1xuICAgICAgY2FzZSAnc2VwYXJhdG9yJzpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVNlcGFyYXRvck1lbnVJdGVtKGl0ZW0pLmZvbGQoaGFuZGxlRXJyb3IsIGQgPT4gT3B0aW9uYWwuc29tZShzZXBhcmF0b3IkMyhkKSkpO1xuICAgICAgY2FzZSAnZmFuY3ltZW51aXRlbSc6XG4gICAgICAgIHJldHVybiBjcmVhdGVGYW5jeU1lbnVJdGVtKGl0ZW0pLmZvbGQoaGFuZGxlRXJyb3IsIGQgPT4gZmFuY3koZCwgYmFja3N0YWdlKSk7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVW5rbm93biBpdGVtIGluIGdlbmVyYWwgbWVudScsIGl0ZW0pO1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUF1dG9jb21wbGV0ZUl0ZW1zID0gKGl0ZW1zLCBtYXRjaFRleHQsIG9uSXRlbVZhbHVlSGFuZGxlciwgY29sdW1ucywgaXRlbVJlc3BvbnNlLCBzaGFyZWRCYWNrc3RhZ2UsIGhpZ2hsaWdodE9uKSA9PiB7XG4gICAgICBjb25zdCByZW5kZXJUZXh0ID0gY29sdW1ucyA9PT0gMTtcbiAgICAgIGNvbnN0IHJlbmRlckljb25zID0gIXJlbmRlclRleHQgfHwgbWVudUhhc0ljb25zKGl0ZW1zKTtcbiAgICAgIHJldHVybiBjYXQobWFwJDIoaXRlbXMsIGl0ZW0gPT4ge1xuICAgICAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xuICAgICAgICBjYXNlICdzZXBhcmF0b3InOlxuICAgICAgICAgIHJldHVybiBjcmVhdGVTZXBhcmF0b3JJdGVtKGl0ZW0pLmZvbGQoaGFuZGxlRXJyb3IsIGQgPT4gT3B0aW9uYWwuc29tZShzZXBhcmF0b3IkMyhkKSkpO1xuICAgICAgICBjYXNlICdjYXJkbWVudWl0ZW0nOlxuICAgICAgICAgIHJldHVybiBjcmVhdGVDYXJkTWVudUl0ZW0oaXRlbSkuZm9sZChoYW5kbGVFcnJvciwgZCA9PiBPcHRpb25hbC5zb21lKGNhcmQoe1xuICAgICAgICAgICAgLi4uZCxcbiAgICAgICAgICAgIG9uQWN0aW9uOiBhcGkgPT4ge1xuICAgICAgICAgICAgICBkLm9uQWN0aW9uKGFwaSk7XG4gICAgICAgICAgICAgIG9uSXRlbVZhbHVlSGFuZGxlcihkLnZhbHVlLCBkLm1ldGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGl0ZW1SZXNwb25zZSwgc2hhcmVkQmFja3N0YWdlLCB7XG4gICAgICAgICAgICBpdGVtQmVoYXZpb3VyczogdG9vbHRpcEJlaGF2aW91cihkLm1ldGEsIHNoYXJlZEJhY2tzdGFnZSksXG4gICAgICAgICAgICBjYXJkVGV4dDoge1xuICAgICAgICAgICAgICBtYXRjaFRleHQsXG4gICAgICAgICAgICAgIGhpZ2hsaWdodE9uXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpKTtcbiAgICAgICAgY2FzZSAnYXV0b2NvbXBsZXRlaXRlbSc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUF1dG9jb21wbGV0ZXJJdGVtKGl0ZW0pLmZvbGQoaGFuZGxlRXJyb3IsIGQgPT4gT3B0aW9uYWwuc29tZShhdXRvY29tcGxldGUoZCwgbWF0Y2hUZXh0LCByZW5kZXJUZXh0LCAnbm9ybWFsJywgb25JdGVtVmFsdWVIYW5kbGVyLCBpdGVtUmVzcG9uc2UsIHNoYXJlZEJhY2tzdGFnZSwgcmVuZGVySWNvbnMpKSk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZVBhcnRpYWxNZW51ID0gKHZhbHVlLCBpdGVtcywgaXRlbVJlc3BvbnNlLCBiYWNrc3RhZ2UsIGlzSG9yaXpvbnRhbE1lbnUsIHNlYXJjaE1vZGUpID0+IHtcbiAgICAgIGNvbnN0IGhhc0ljb25zID0gbWVudUhhc0ljb25zKGl0ZW1zKTtcbiAgICAgIGNvbnN0IGFsbG95SXRlbXMgPSBjYXQobWFwJDIoaXRlbXMsIGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBpdGVtSGFzSWNvbiA9IGkgPT4gaXNIb3Jpem9udGFsTWVudSA/ICFoYXMkMihpLCAndGV4dCcpIDogaGFzSWNvbnM7XG4gICAgICAgIGNvbnN0IGNyZWF0ZUl0ZW0gPSBpID0+IGNyZWF0ZU1lbnVJdGVtRnJvbUJyaWRnZShpLCBpdGVtUmVzcG9uc2UsIGJhY2tzdGFnZSwgaXRlbUhhc0ljb24oaSksIGlzSG9yaXpvbnRhbE1lbnUpO1xuICAgICAgICBpZiAoaXRlbS50eXBlID09PSAnbmVzdGVkbWVudWl0ZW0nICYmIGl0ZW0uZ2V0U3VibWVudUl0ZW1zKCkubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlSXRlbSh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlSXRlbShpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgICAgY29uc3QgbWVudUxheW91dCA9IGlkZW50aWZ5TWVudUxheW91dChzZWFyY2hNb2RlKTtcbiAgICAgIGNvbnN0IGNyZWF0ZVBhcnRpYWwgPSBpc0hvcml6b250YWxNZW51ID8gY3JlYXRlSG9yaXpvbnRhbFBhcnRpYWxNZW51V2l0aEFsbG95SXRlbXMgOiBjcmVhdGVQYXJ0aWFsTWVudVdpdGhBbGxveUl0ZW1zO1xuICAgICAgcmV0dXJuIGNyZWF0ZVBhcnRpYWwodmFsdWUsIGhhc0ljb25zLCBhbGxveUl0ZW1zLCAxLCBtZW51TGF5b3V0KTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZVRpZXJlZERhdGFGcm9tID0gcGFydGlhbE1lbnUgPT4gdGllcmVkTWVudS5zaW5nbGVEYXRhKHBhcnRpYWxNZW51LnZhbHVlLCBwYXJ0aWFsTWVudSk7XG4gICAgY29uc3QgY3JlYXRlSW5saW5lTWVudUZyb20gPSAocGFydGlhbE1lbnUsIGNvbHVtbnMsIGZvY3VzTW9kZSwgcHJlc2V0cykgPT4ge1xuICAgICAgY29uc3QgbW92ZW1lbnQgPSBkZXJpdmVNZW51TW92ZW1lbnQoY29sdW1ucywgcHJlc2V0cyk7XG4gICAgICBjb25zdCBtZW51TWFya2VycyA9IG1hcmtlcnMocHJlc2V0cyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBjcmVhdGVUaWVyZWREYXRhRnJvbSh7XG4gICAgICAgICAgLi4ucGFydGlhbE1lbnUsXG4gICAgICAgICAgbW92ZW1lbnQsXG4gICAgICAgICAgbWVudUJlaGF2aW91cnM6IFNpbXBsZUJlaGF2aW91cnMudW5uYW1lZEV2ZW50cyhjb2x1bW5zICE9PSAnYXV0bycgPyBbXSA6IFtydW5PbkF0dGFjaGVkKChjb21wLCBfc2UpID0+IHtcbiAgICAgICAgICAgICAgZGV0ZWN0U2l6ZShjb21wLCA0LCBtZW51TWFya2Vycy5pdGVtKS5lYWNoKCh7bnVtQ29sdW1ucywgbnVtUm93c30pID0+IHtcbiAgICAgICAgICAgICAgICBLZXlpbmcuc2V0R3JpZFNpemUoY29tcCwgbnVtUm93cywgbnVtQ29sdW1ucyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSldKVxuICAgICAgICB9KSxcbiAgICAgICAgbWVudToge1xuICAgICAgICAgIG1hcmtlcnM6IG1hcmtlcnMocHJlc2V0cyksXG4gICAgICAgICAgZmFrZUZvY3VzOiBmb2N1c01vZGUgPT09IEZvY3VzTW9kZS5Db250ZW50Rm9jdXNcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0QXV0b2NvbXBsZXRlclJhbmdlID0gKGRvbSwgaW5pdFJhbmdlKSA9PiB7XG4gICAgICByZXR1cm4gZGV0ZWN0JDEoU3VnYXJFbGVtZW50LmZyb21Eb20oaW5pdFJhbmdlLnN0YXJ0Q29udGFpbmVyKSkubWFwKGVsbSA9PiB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgICByYW5nZS5zZWxlY3ROb2RlKGVsbS5kb20pO1xuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyJGIgPSAoZWRpdG9yLCBzaGFyZWRCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IHByb2Nlc3NpbmdBY3Rpb24gPSBDZWxsKGZhbHNlKTtcbiAgICAgIGNvbnN0IGFjdGl2ZVN0YXRlID0gQ2VsbChmYWxzZSk7XG4gICAgICBjb25zdCBhdXRvY29tcGxldGVyID0gYnVpbGQkMShJbmxpbmVWaWV3LnNrZXRjaCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtYXV0b2NvbXBsZXRlciddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtdLFxuICAgICAgICBmaXJlRGlzbWlzc2FsRXZlbnRJbnN0ZWFkOiB7fSxcbiAgICAgICAgaW5saW5lQmVoYXZpb3VyczogZGVyaXZlJDEoW2NvbmZpZygnZGlzbWlzc0F1dG9jb21wbGV0ZXInLCBbcnVuJDEoZGlzbWlzc1JlcXVlc3RlZCgpLCAoKSA9PiBjYW5jZWxJZk5lY2Vzc2FyeSgpKV0pXSksXG4gICAgICAgIGxhenlTaW5rOiBzaGFyZWRCYWNrc3RhZ2UuZ2V0U2lua1xuICAgICAgfSkpO1xuICAgICAgY29uc3QgaXNNZW51T3BlbiA9ICgpID0+IElubGluZVZpZXcuaXNPcGVuKGF1dG9jb21wbGV0ZXIpO1xuICAgICAgY29uc3QgaXNBY3RpdmUgPSBhY3RpdmVTdGF0ZS5nZXQ7XG4gICAgICBjb25zdCBoaWRlSWZOZWNlc3NhcnkgPSAoKSA9PiB7XG4gICAgICAgIGlmIChpc01lbnVPcGVuKCkpIHtcbiAgICAgICAgICBJbmxpbmVWaWV3LmhpZGUoYXV0b2NvbXBsZXRlcik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRNZW51ID0gKCkgPT4gSW5saW5lVmlldy5nZXRDb250ZW50KGF1dG9jb21wbGV0ZXIpLmJpbmQodG1lbnUgPT4ge1xuICAgICAgICByZXR1cm4gZ2V0JGgodG1lbnUuY29tcG9uZW50cygpLCAwKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2FuY2VsSWZOZWNlc3NhcnkgPSAoKSA9PiBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZUF1dG9jb21wbGV0ZXJDbG9zZScpO1xuICAgICAgY29uc3QgZ2V0Q29tYmluZWRJdGVtcyA9IG1hdGNoZXMgPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gZmluZE1hcChtYXRjaGVzLCBtID0+IE9wdGlvbmFsLmZyb20obS5jb2x1bW5zKSkuZ2V0T3IoMSk7XG4gICAgICAgIHJldHVybiBiaW5kJDMobWF0Y2hlcywgbWF0Y2ggPT4ge1xuICAgICAgICAgIGNvbnN0IGNob2ljZXMgPSBtYXRjaC5pdGVtcztcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQXV0b2NvbXBsZXRlSXRlbXMoY2hvaWNlcywgbWF0Y2gubWF0Y2hUZXh0LCAoaXRlbVZhbHVlLCBpdGVtTWV0YSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbnIgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgICAgICAgZ2V0QXV0b2NvbXBsZXRlclJhbmdlKGVkaXRvci5kb20sIG5yKS5lYWNoKHJhbmdlID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgYXV0b2NvbXBsZXRlckFwaSA9IHtcbiAgICAgICAgICAgICAgICBoaWRlOiAoKSA9PiBjYW5jZWxJZk5lY2Vzc2FyeSgpLFxuICAgICAgICAgICAgICAgIHJlbG9hZDogZmV0Y2hPcHRpb25zID0+IHtcbiAgICAgICAgICAgICAgICAgIGhpZGVJZk5lY2Vzc2FyeSgpO1xuICAgICAgICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VBdXRvY29tcGxldGVyUmVsb2FkJywgZmFsc2UsIHsgZmV0Y2hPcHRpb25zIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgcHJvY2Vzc2luZ0FjdGlvbi5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgIG1hdGNoLm9uQWN0aW9uKGF1dG9jb21wbGV0ZXJBcGksIHJhbmdlLCBpdGVtVmFsdWUsIGl0ZW1NZXRhKTtcbiAgICAgICAgICAgICAgcHJvY2Vzc2luZ0FjdGlvbi5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwgY29sdW1ucywgSXRlbVJlc3BvbnNlJDEuQlVCQkxFX1RPX1NBTkRCT1gsIHNoYXJlZEJhY2tzdGFnZSwgbWF0Y2guaGlnaGxpZ2h0T24pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBkaXNwbGF5ID0gKGxvb2t1cERhdGEsIGl0ZW1zKSA9PiB7XG4gICAgICAgIGZpbmRJbihTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKSkuZWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW5zID0gZmluZE1hcChsb29rdXBEYXRhLCBsZCA9PiBPcHRpb25hbC5mcm9tKGxkLmNvbHVtbnMpKS5nZXRPcigxKTtcbiAgICAgICAgICBJbmxpbmVWaWV3LnNob3dNZW51QXQoYXV0b2NvbXBsZXRlciwge1xuICAgICAgICAgICAgYW5jaG9yOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdub2RlJyxcbiAgICAgICAgICAgICAgcm9vdDogU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSksXG4gICAgICAgICAgICAgIG5vZGU6IE9wdGlvbmFsLmZyb20oZWxlbWVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBjcmVhdGVJbmxpbmVNZW51RnJvbShjcmVhdGVQYXJ0aWFsTWVudVdpdGhBbGxveUl0ZW1zKCdhdXRvY29tcGxldGVyLXZhbHVlJywgdHJ1ZSwgaXRlbXMsIGNvbHVtbnMsIHsgbWVudVR5cGU6ICdub3JtYWwnIH0pLCBjb2x1bW5zLCBGb2N1c01vZGUuQ29udGVudEZvY3VzLCAnbm9ybWFsJykpO1xuICAgICAgICB9KTtcbiAgICAgICAgZ2V0TWVudSgpLmVhY2goSGlnaGxpZ2h0aW5nLmhpZ2hsaWdodEZpcnN0KTtcbiAgICAgIH07XG4gICAgICBjb25zdCB1cGRhdGVEaXNwbGF5ID0gbG9va3VwRGF0YSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbWJpbmVkSXRlbXMgPSBnZXRDb21iaW5lZEl0ZW1zKGxvb2t1cERhdGEpO1xuICAgICAgICBpZiAoY29tYmluZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZGlzcGxheShsb29rdXBEYXRhLCBjb21iaW5lZEl0ZW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWRlSWZOZWNlc3NhcnkoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGVkaXRvci5vbignQXV0b2NvbXBsZXRlclN0YXJ0JywgKHtsb29rdXBEYXRhfSkgPT4ge1xuICAgICAgICBhY3RpdmVTdGF0ZS5zZXQodHJ1ZSk7XG4gICAgICAgIHByb2Nlc3NpbmdBY3Rpb24uc2V0KGZhbHNlKTtcbiAgICAgICAgdXBkYXRlRGlzcGxheShsb29rdXBEYXRhKTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdBdXRvY29tcGxldGVyVXBkYXRlJywgKHtsb29rdXBEYXRhfSkgPT4gdXBkYXRlRGlzcGxheShsb29rdXBEYXRhKSk7XG4gICAgICBlZGl0b3Iub24oJ0F1dG9jb21wbGV0ZXJFbmQnLCAoKSA9PiB7XG4gICAgICAgIGhpZGVJZk5lY2Vzc2FyeSgpO1xuICAgICAgICBhY3RpdmVTdGF0ZS5zZXQoZmFsc2UpO1xuICAgICAgICBwcm9jZXNzaW5nQWN0aW9uLnNldChmYWxzZSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGF1dG9jb21wbGV0ZXJVaUFwaSA9IHtcbiAgICAgICAgY2FuY2VsSWZOZWNlc3NhcnksXG4gICAgICAgIGlzTWVudU9wZW4sXG4gICAgICAgIGlzQWN0aXZlLFxuICAgICAgICBpc1Byb2Nlc3NpbmdBY3Rpb246IHByb2Nlc3NpbmdBY3Rpb24uZ2V0LFxuICAgICAgICBnZXRNZW51XG4gICAgICB9O1xuICAgICAgQXV0b2NvbXBsZXRlckVkaXRvckV2ZW50cy5zZXR1cChhdXRvY29tcGxldGVyVWlBcGksIGVkaXRvcik7XG4gICAgfTtcbiAgICBjb25zdCBBdXRvY29tcGxldGVyID0geyByZWdpc3RlcjogcmVnaXN0ZXIkYiB9O1xuXG4gICAgY29uc3Qgbm9uU2Nyb2xsaW5nT3ZlcmZsb3dzID0gW1xuICAgICAgJ3Zpc2libGUnLFxuICAgICAgJ2hpZGRlbicsXG4gICAgICAnY2xpcCdcbiAgICBdO1xuICAgIGNvbnN0IGlzU2Nyb2xsaW5nT3ZlcmZsb3dWYWx1ZSA9IHZhbHVlID0+IHRyaW0kMSh2YWx1ZSkubGVuZ3RoID4gMCAmJiAhY29udGFpbnMkMihub25TY3JvbGxpbmdPdmVyZmxvd3MsIHZhbHVlKTtcbiAgICBjb25zdCBpc1Njcm9sbGVyID0gZWxlbSA9PiB7XG4gICAgICBpZiAoaXNIVE1MRWxlbWVudChlbGVtKSkge1xuICAgICAgICBjb25zdCBvdmVyZmxvd1ggPSBnZXQkZShlbGVtLCAnb3ZlcmZsb3cteCcpO1xuICAgICAgICBjb25zdCBvdmVyZmxvd1kgPSBnZXQkZShlbGVtLCAnb3ZlcmZsb3cteScpO1xuICAgICAgICByZXR1cm4gaXNTY3JvbGxpbmdPdmVyZmxvd1ZhbHVlKG92ZXJmbG93WCkgfHwgaXNTY3JvbGxpbmdPdmVyZmxvd1ZhbHVlKG92ZXJmbG93WSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBkZXRlY3QgPSBwb3B1cFNpbmtFbGVtID0+IHtcbiAgICAgIGNvbnN0IGFuY2VzdG9yc1Njcm9sbGVycyA9IGFuY2VzdG9ycyhwb3B1cFNpbmtFbGVtLCBpc1Njcm9sbGVyKTtcbiAgICAgIGNvbnN0IHNjcm9sbGVycyA9IGFuY2VzdG9yc1Njcm9sbGVycy5sZW5ndGggPT09IDAgPyBnZXRTaGFkb3dSb290KHBvcHVwU2lua0VsZW0pLm1hcChnZXRTaGFkb3dIb3N0KS5tYXAoeCA9PiBhbmNlc3RvcnMoeCwgaXNTY3JvbGxlcikpLmdldE9yKFtdKSA6IGFuY2VzdG9yc1Njcm9sbGVycztcbiAgICAgIHJldHVybiBoZWFkKHNjcm9sbGVycykubWFwKGVsZW1lbnQgPT4gKHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgb3RoZXJzOiBzY3JvbGxlcnMuc2xpY2UoMSlcbiAgICAgIH0pKTtcbiAgICB9O1xuICAgIGNvbnN0IGRldGVjdFdoZW5TcGxpdFVpTW9kZSA9IChlZGl0b3IsIHBvcHVwU2lua0VsZW0pID0+IGlzU3BsaXRVaU1vZGUoZWRpdG9yKSA/IGRldGVjdChwb3B1cFNpbmtFbGVtKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICBjb25zdCBnZXRCb3VuZHNGcm9tID0gc2MgPT4ge1xuICAgICAgY29uc3Qgc2Nyb2xsYWJsZUJveGVzID0gW1xuICAgICAgICAuLi5tYXAkMihzYy5vdGhlcnMsIGJveCQxKSxcbiAgICAgICAgd2luKClcbiAgICAgIF07XG4gICAgICByZXR1cm4gY29uc3RyYWluQnlNYW55KGJveCQxKHNjLmVsZW1lbnQpLCBzY3JvbGxhYmxlQm94ZXMpO1xuICAgIH07XG5cbiAgICBjb25zdCBjbG9zZXN0ID0gKHNjb3BlLCBzZWxlY3RvciwgaXNSb290KSA9PiBjbG9zZXN0JDEoc2NvcGUsIHNlbGVjdG9yLCBpc1Jvb3QpLmlzU29tZSgpO1xuXG4gICAgY29uc3QgRGVsYXllZEZ1bmN0aW9uID0gKGZ1biwgZGVsYXkpID0+IHtcbiAgICAgIGxldCByZWYgPSBudWxsO1xuICAgICAgY29uc3Qgc2NoZWR1bGUgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICByZWYgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBmdW4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgcmVmID0gbnVsbDtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgaWYgKHJlZiAhPT0gbnVsbCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dChyZWYpO1xuICAgICAgICAgIHJlZiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjYW5jZWwsXG4gICAgICAgIHNjaGVkdWxlXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBTSUdOSUZJQ0FOVF9NT1ZFID0gNTtcbiAgICBjb25zdCBMT05HUFJFU1NfREVMQVkgPSA0MDA7XG4gICAgY29uc3QgZ2V0VG91Y2ggPSBldmVudCA9PiB7XG4gICAgICBjb25zdCByYXcgPSBldmVudC5yYXc7XG4gICAgICBpZiAocmF3LnRvdWNoZXMgPT09IHVuZGVmaW5lZCB8fCByYXcudG91Y2hlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHJhdy50b3VjaGVzWzBdKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzRmFyRW5vdWdoID0gKHRvdWNoLCBkYXRhKSA9PiB7XG4gICAgICBjb25zdCBkaXN0WCA9IE1hdGguYWJzKHRvdWNoLmNsaWVudFggLSBkYXRhLngpO1xuICAgICAgY29uc3QgZGlzdFkgPSBNYXRoLmFicyh0b3VjaC5jbGllbnRZIC0gZGF0YS55KTtcbiAgICAgIHJldHVybiBkaXN0WCA+IFNJR05JRklDQU5UX01PVkUgfHwgZGlzdFkgPiBTSUdOSUZJQ0FOVF9NT1ZFO1xuICAgIH07XG4gICAgY29uc3QgbW9uaXRvciA9IHNldHRpbmdzID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0RGF0YSA9IHZhbHVlJDIoKTtcbiAgICAgIGNvbnN0IGxvbmdwcmVzc0ZpcmVkID0gQ2VsbChmYWxzZSk7XG4gICAgICBjb25zdCBsb25ncHJlc3MkMSA9IERlbGF5ZWRGdW5jdGlvbihldmVudCA9PiB7XG4gICAgICAgIHNldHRpbmdzLnRyaWdnZXJFdmVudChsb25ncHJlc3MoKSwgZXZlbnQpO1xuICAgICAgICBsb25ncHJlc3NGaXJlZC5zZXQodHJ1ZSk7XG4gICAgICB9LCBMT05HUFJFU1NfREVMQVkpO1xuICAgICAgY29uc3QgaGFuZGxlVG91Y2hzdGFydCA9IGV2ZW50ID0+IHtcbiAgICAgICAgZ2V0VG91Y2goZXZlbnQpLmVhY2godG91Y2ggPT4ge1xuICAgICAgICAgIGxvbmdwcmVzcyQxLmNhbmNlbCgpO1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICB4OiB0b3VjaC5jbGllbnRYLFxuICAgICAgICAgICAgeTogdG91Y2guY2xpZW50WSxcbiAgICAgICAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0XG4gICAgICAgICAgfTtcbiAgICAgICAgICBsb25ncHJlc3MkMS5zY2hlZHVsZShldmVudCk7XG4gICAgICAgICAgbG9uZ3ByZXNzRmlyZWQuc2V0KGZhbHNlKTtcbiAgICAgICAgICBzdGFydERhdGEuc2V0KGRhdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBoYW5kbGVUb3VjaG1vdmUgPSBldmVudCA9PiB7XG4gICAgICAgIGxvbmdwcmVzcyQxLmNhbmNlbCgpO1xuICAgICAgICBnZXRUb3VjaChldmVudCkuZWFjaCh0b3VjaCA9PiB7XG4gICAgICAgICAgc3RhcnREYXRhLm9uKGRhdGEgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRmFyRW5vdWdoKHRvdWNoLCBkYXRhKSkge1xuICAgICAgICAgICAgICBzdGFydERhdGEuY2xlYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaGFuZGxlVG91Y2hlbmQgPSBldmVudCA9PiB7XG4gICAgICAgIGxvbmdwcmVzcyQxLmNhbmNlbCgpO1xuICAgICAgICBjb25zdCBpc1NhbWUgPSBkYXRhID0+IGVxKGRhdGEudGFyZ2V0LCBldmVudC50YXJnZXQpO1xuICAgICAgICByZXR1cm4gc3RhcnREYXRhLmdldCgpLmZpbHRlcihpc1NhbWUpLm1hcChfZGF0YSA9PiB7XG4gICAgICAgICAgaWYgKGxvbmdwcmVzc0ZpcmVkLmdldCgpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50KCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzZXR0aW5ncy50cmlnZ2VyRXZlbnQodGFwKCksIGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGhhbmRsZXJzID0gd3JhcEFsbChbXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6IHRvdWNoc3RhcnQoKSxcbiAgICAgICAgICB2YWx1ZTogaGFuZGxlVG91Y2hzdGFydFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5OiB0b3VjaG1vdmUoKSxcbiAgICAgICAgICB2YWx1ZTogaGFuZGxlVG91Y2htb3ZlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6IHRvdWNoZW5kKCksXG4gICAgICAgICAgdmFsdWU6IGhhbmRsZVRvdWNoZW5kXG4gICAgICAgIH1cbiAgICAgIF0pO1xuICAgICAgY29uc3QgZmlyZUlmUmVhZHkgPSAoZXZlbnQsIHR5cGUpID0+IGdldCRnKGhhbmRsZXJzLCB0eXBlKS5iaW5kKGhhbmRsZXIgPT4gaGFuZGxlcihldmVudCkpO1xuICAgICAgcmV0dXJuIHsgZmlyZUlmUmVhZHkgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNEYW5nZXJvdXMgPSBldmVudCA9PiB7XG4gICAgICBjb25zdCBrZXlFdiA9IGV2ZW50LnJhdztcbiAgICAgIHJldHVybiBrZXlFdi53aGljaCA9PT0gQkFDS1NQQUNFWzBdICYmICFjb250YWlucyQyKFtcbiAgICAgICAgJ2lucHV0JyxcbiAgICAgICAgJ3RleHRhcmVhJ1xuICAgICAgXSwgbmFtZSQzKGV2ZW50LnRhcmdldCkpICYmICFjbG9zZXN0KGV2ZW50LnRhcmdldCwgJ1tjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJdJyk7XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cCRkID0gKGNvbnRhaW5lciwgcmF3U2V0dGluZ3MpID0+IHtcbiAgICAgIGNvbnN0IHNldHRpbmdzID0ge1xuICAgICAgICBzdG9wQmFja3NwYWNlOiB0cnVlLFxuICAgICAgICAuLi5yYXdTZXR0aW5nc1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHBvaW50ZXJFdmVudHMgPSBbXG4gICAgICAgICd0b3VjaHN0YXJ0JyxcbiAgICAgICAgJ3RvdWNobW92ZScsXG4gICAgICAgICd0b3VjaGVuZCcsXG4gICAgICAgICd0b3VjaGNhbmNlbCcsXG4gICAgICAgICdnZXN0dXJlc3RhcnQnLFxuICAgICAgICAnbW91c2Vkb3duJyxcbiAgICAgICAgJ21vdXNldXAnLFxuICAgICAgICAnbW91c2VvdmVyJyxcbiAgICAgICAgJ21vdXNlbW92ZScsXG4gICAgICAgICdtb3VzZW91dCcsXG4gICAgICAgICdjbGljaydcbiAgICAgIF07XG4gICAgICBjb25zdCB0YXBFdmVudCA9IG1vbml0b3Ioc2V0dGluZ3MpO1xuICAgICAgY29uc3Qgc2ltcGxlRXZlbnRzID0gbWFwJDIocG9pbnRlckV2ZW50cy5jb25jYXQoW1xuICAgICAgICAnc2VsZWN0c3RhcnQnLFxuICAgICAgICAnaW5wdXQnLFxuICAgICAgICAnY29udGV4dG1lbnUnLFxuICAgICAgICAnY2hhbmdlJyxcbiAgICAgICAgJ3RyYW5zaXRpb25lbmQnLFxuICAgICAgICAndHJhbnNpdGlvbmNhbmNlbCcsXG4gICAgICAgICdkcmFnJyxcbiAgICAgICAgJ2RyYWdzdGFydCcsXG4gICAgICAgICdkcmFnZW5kJyxcbiAgICAgICAgJ2RyYWdlbnRlcicsXG4gICAgICAgICdkcmFnbGVhdmUnLFxuICAgICAgICAnZHJhZ292ZXInLFxuICAgICAgICAnZHJvcCcsXG4gICAgICAgICdrZXl1cCdcbiAgICAgIF0pLCB0eXBlID0+IGJpbmQoY29udGFpbmVyLCB0eXBlLCBldmVudCA9PiB7XG4gICAgICAgIHRhcEV2ZW50LmZpcmVJZlJlYWR5KGV2ZW50LCB0eXBlKS5lYWNoKHRhcFN0b3BwZWQgPT4ge1xuICAgICAgICAgIGlmICh0YXBTdG9wcGVkKSB7XG4gICAgICAgICAgICBldmVudC5raWxsKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc3RvcHBlZCA9IHNldHRpbmdzLnRyaWdnZXJFdmVudCh0eXBlLCBldmVudCk7XG4gICAgICAgIGlmIChzdG9wcGVkKSB7XG4gICAgICAgICAgZXZlbnQua2lsbCgpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgICBjb25zdCBwYXN0ZVRpbWVvdXQgPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBvblBhc3RlID0gYmluZChjb250YWluZXIsICdwYXN0ZScsIGV2ZW50ID0+IHtcbiAgICAgICAgdGFwRXZlbnQuZmlyZUlmUmVhZHkoZXZlbnQsICdwYXN0ZScpLmVhY2godGFwU3RvcHBlZCA9PiB7XG4gICAgICAgICAgaWYgKHRhcFN0b3BwZWQpIHtcbiAgICAgICAgICAgIGV2ZW50LmtpbGwoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzdG9wcGVkID0gc2V0dGluZ3MudHJpZ2dlckV2ZW50KCdwYXN0ZScsIGV2ZW50KTtcbiAgICAgICAgaWYgKHN0b3BwZWQpIHtcbiAgICAgICAgICBldmVudC5raWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcGFzdGVUaW1lb3V0LnNldChzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBzZXR0aW5ncy50cmlnZ2VyRXZlbnQocG9zdFBhc3RlKCksIGV2ZW50KTtcbiAgICAgICAgfSwgMCkpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBvbktleWRvd24gPSBiaW5kKGNvbnRhaW5lciwgJ2tleWRvd24nLCBldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHN0b3BwZWQgPSBzZXR0aW5ncy50cmlnZ2VyRXZlbnQoJ2tleWRvd24nLCBldmVudCk7XG4gICAgICAgIGlmIChzdG9wcGVkKSB7XG4gICAgICAgICAgZXZlbnQua2lsbCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHNldHRpbmdzLnN0b3BCYWNrc3BhY2UgJiYgaXNEYW5nZXJvdXMoZXZlbnQpKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG9uRm9jdXNJbiA9IGJpbmQoY29udGFpbmVyLCAnZm9jdXNpbicsIGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3Qgc3RvcHBlZCA9IHNldHRpbmdzLnRyaWdnZXJFdmVudCgnZm9jdXNpbicsIGV2ZW50KTtcbiAgICAgICAgaWYgKHN0b3BwZWQpIHtcbiAgICAgICAgICBldmVudC5raWxsKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgZm9jdXNvdXRUaW1lb3V0ID0gdmFsdWUkMigpO1xuICAgICAgY29uc3Qgb25Gb2N1c091dCA9IGJpbmQoY29udGFpbmVyLCAnZm9jdXNvdXQnLCBldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHN0b3BwZWQgPSBzZXR0aW5ncy50cmlnZ2VyRXZlbnQoJ2ZvY3Vzb3V0JywgZXZlbnQpO1xuICAgICAgICBpZiAoc3RvcHBlZCkge1xuICAgICAgICAgIGV2ZW50LmtpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBmb2N1c291dFRpbWVvdXQuc2V0KHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXJFdmVudChwb3N0Qmx1cigpLCBldmVudCk7XG4gICAgICAgIH0sIDApKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdW5iaW5kID0gKCkgPT4ge1xuICAgICAgICBlYWNoJDEoc2ltcGxlRXZlbnRzLCBlID0+IHtcbiAgICAgICAgICBlLnVuYmluZCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgb25LZXlkb3duLnVuYmluZCgpO1xuICAgICAgICBvbkZvY3VzSW4udW5iaW5kKCk7XG4gICAgICAgIG9uRm9jdXNPdXQudW5iaW5kKCk7XG4gICAgICAgIG9uUGFzdGUudW5iaW5kKCk7XG4gICAgICAgIHBhc3RlVGltZW91dC5vbihjbGVhclRpbWVvdXQpO1xuICAgICAgICBmb2N1c291dFRpbWVvdXQub24oY2xlYXJUaW1lb3V0KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4geyB1bmJpbmQgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGVyaXZlID0gKHJhd0V2ZW50LCByYXdUYXJnZXQpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGdldCRnKHJhd0V2ZW50LCAndGFyZ2V0JykuZ2V0T3IocmF3VGFyZ2V0KTtcbiAgICAgIHJldHVybiBDZWxsKHNvdXJjZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZyb21Tb3VyY2UgPSAoZXZlbnQsIHNvdXJjZSkgPT4ge1xuICAgICAgY29uc3Qgc3RvcHBlciA9IENlbGwoZmFsc2UpO1xuICAgICAgY29uc3QgY3V0dGVyID0gQ2VsbChmYWxzZSk7XG4gICAgICBjb25zdCBzdG9wID0gKCkgPT4ge1xuICAgICAgICBzdG9wcGVyLnNldCh0cnVlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjdXQgPSAoKSA9PiB7XG4gICAgICAgIGN1dHRlci5zZXQodHJ1ZSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RvcCxcbiAgICAgICAgY3V0LFxuICAgICAgICBpc1N0b3BwZWQ6IHN0b3BwZXIuZ2V0LFxuICAgICAgICBpc0N1dDogY3V0dGVyLmdldCxcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHNldFNvdXJjZTogc291cmNlLnNldCxcbiAgICAgICAgZ2V0U291cmNlOiBzb3VyY2UuZ2V0XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZnJvbUV4dGVybmFsID0gZXZlbnQgPT4ge1xuICAgICAgY29uc3Qgc3RvcHBlciA9IENlbGwoZmFsc2UpO1xuICAgICAgY29uc3Qgc3RvcCA9ICgpID0+IHtcbiAgICAgICAgc3RvcHBlci5zZXQodHJ1ZSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RvcCxcbiAgICAgICAgY3V0OiBub29wLFxuICAgICAgICBpc1N0b3BwZWQ6IHN0b3BwZXIuZ2V0LFxuICAgICAgICBpc0N1dDogbmV2ZXIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBzZXRTb3VyY2U6IGRpZSgnQ2Fubm90IHNldCBzb3VyY2Ugb2YgYSBicm9hZGNhc3RlZCBldmVudCcpLFxuICAgICAgICBnZXRTb3VyY2U6IGRpZSgnQ2Fubm90IGdldCBzb3VyY2Ugb2YgYSBicm9hZGNhc3RlZCBldmVudCcpXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBhZHQkMSA9IEFkdC5nZW5lcmF0ZShbXG4gICAgICB7IHN0b3BwZWQ6IFtdIH0sXG4gICAgICB7IHJlc3VtZTogWydlbGVtZW50J10gfSxcbiAgICAgIHsgY29tcGxldGU6IFtdIH1cbiAgICBdKTtcbiAgICBjb25zdCBkb1RyaWdnZXJIYW5kbGVyID0gKGxvb2t1cCwgZXZlbnRUeXBlLCByYXdFdmVudCwgdGFyZ2V0LCBzb3VyY2UsIGxvZ2dlcikgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlciA9IGxvb2t1cChldmVudFR5cGUsIHRhcmdldCk7XG4gICAgICBjb25zdCBzaW11bGF0ZWRFdmVudCA9IGZyb21Tb3VyY2UocmF3RXZlbnQsIHNvdXJjZSk7XG4gICAgICByZXR1cm4gaGFuZGxlci5mb2xkKCgpID0+IHtcbiAgICAgICAgbG9nZ2VyLmxvZ0V2ZW50Tm9IYW5kbGVycyhldmVudFR5cGUsIHRhcmdldCk7XG4gICAgICAgIHJldHVybiBhZHQkMS5jb21wbGV0ZSgpO1xuICAgICAgfSwgaGFuZGxlckluZm8gPT4ge1xuICAgICAgICBjb25zdCBkZXNjSGFuZGxlciA9IGhhbmRsZXJJbmZvLmRlc2NIYW5kbGVyO1xuICAgICAgICBjb25zdCBldmVudEhhbmRsZXIgPSBnZXRDdXJyaWVkKGRlc2NIYW5kbGVyKTtcbiAgICAgICAgZXZlbnRIYW5kbGVyKHNpbXVsYXRlZEV2ZW50KTtcbiAgICAgICAgaWYgKHNpbXVsYXRlZEV2ZW50LmlzU3RvcHBlZCgpKSB7XG4gICAgICAgICAgbG9nZ2VyLmxvZ0V2ZW50U3RvcHBlZChldmVudFR5cGUsIGhhbmRsZXJJbmZvLmVsZW1lbnQsIGRlc2NIYW5kbGVyLnB1cnBvc2UpO1xuICAgICAgICAgIHJldHVybiBhZHQkMS5zdG9wcGVkKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2ltdWxhdGVkRXZlbnQuaXNDdXQoKSkge1xuICAgICAgICAgIGxvZ2dlci5sb2dFdmVudEN1dChldmVudFR5cGUsIGhhbmRsZXJJbmZvLmVsZW1lbnQsIGRlc2NIYW5kbGVyLnB1cnBvc2UpO1xuICAgICAgICAgIHJldHVybiBhZHQkMS5jb21wbGV0ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBwYXJlbnQoaGFuZGxlckluZm8uZWxlbWVudCkuZm9sZCgoKSA9PiB7XG4gICAgICAgICAgICBsb2dnZXIubG9nTm9QYXJlbnQoZXZlbnRUeXBlLCBoYW5kbGVySW5mby5lbGVtZW50LCBkZXNjSGFuZGxlci5wdXJwb3NlKTtcbiAgICAgICAgICAgIHJldHVybiBhZHQkMS5jb21wbGV0ZSgpO1xuICAgICAgICAgIH0sIHBhcmVudCA9PiB7XG4gICAgICAgICAgICBsb2dnZXIubG9nRXZlbnRSZXNwb25zZShldmVudFR5cGUsIGhhbmRsZXJJbmZvLmVsZW1lbnQsIGRlc2NIYW5kbGVyLnB1cnBvc2UpO1xuICAgICAgICAgICAgcmV0dXJuIGFkdCQxLnJlc3VtZShwYXJlbnQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGRvVHJpZ2dlck9uVW50aWxTdG9wcGVkID0gKGxvb2t1cCwgZXZlbnRUeXBlLCByYXdFdmVudCwgcmF3VGFyZ2V0LCBzb3VyY2UsIGxvZ2dlcikgPT4gZG9UcmlnZ2VySGFuZGxlcihsb29rdXAsIGV2ZW50VHlwZSwgcmF3RXZlbnQsIHJhd1RhcmdldCwgc291cmNlLCBsb2dnZXIpLmZvbGQoYWx3YXlzLCBwYXJlbnQgPT4gZG9UcmlnZ2VyT25VbnRpbFN0b3BwZWQobG9va3VwLCBldmVudFR5cGUsIHJhd0V2ZW50LCBwYXJlbnQsIHNvdXJjZSwgbG9nZ2VyKSwgbmV2ZXIpO1xuICAgIGNvbnN0IHRyaWdnZXJIYW5kbGVyID0gKGxvb2t1cCwgZXZlbnRUeXBlLCByYXdFdmVudCwgdGFyZ2V0LCBsb2dnZXIpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGRlcml2ZShyYXdFdmVudCwgdGFyZ2V0KTtcbiAgICAgIHJldHVybiBkb1RyaWdnZXJIYW5kbGVyKGxvb2t1cCwgZXZlbnRUeXBlLCByYXdFdmVudCwgdGFyZ2V0LCBzb3VyY2UsIGxvZ2dlcik7XG4gICAgfTtcbiAgICBjb25zdCBicm9hZGNhc3QgPSAobGlzdGVuZXJzLCByYXdFdmVudCwgX2xvZ2dlcikgPT4ge1xuICAgICAgY29uc3Qgc2ltdWxhdGVkRXZlbnQgPSBmcm9tRXh0ZXJuYWwocmF3RXZlbnQpO1xuICAgICAgZWFjaCQxKGxpc3RlbmVycywgbGlzdGVuZXIgPT4ge1xuICAgICAgICBjb25zdCBkZXNjSGFuZGxlciA9IGxpc3RlbmVyLmRlc2NIYW5kbGVyO1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gZ2V0Q3VycmllZChkZXNjSGFuZGxlcik7XG4gICAgICAgIGhhbmRsZXIoc2ltdWxhdGVkRXZlbnQpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gc2ltdWxhdGVkRXZlbnQuaXNTdG9wcGVkKCk7XG4gICAgfTtcbiAgICBjb25zdCB0cmlnZ2VyVW50aWxTdG9wcGVkID0gKGxvb2t1cCwgZXZlbnRUeXBlLCByYXdFdmVudCwgbG9nZ2VyKSA9PiB0cmlnZ2VyT25VbnRpbFN0b3BwZWQobG9va3VwLCBldmVudFR5cGUsIHJhd0V2ZW50LCByYXdFdmVudC50YXJnZXQsIGxvZ2dlcik7XG4gICAgY29uc3QgdHJpZ2dlck9uVW50aWxTdG9wcGVkID0gKGxvb2t1cCwgZXZlbnRUeXBlLCByYXdFdmVudCwgcmF3VGFyZ2V0LCBsb2dnZXIpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGRlcml2ZShyYXdFdmVudCwgcmF3VGFyZ2V0KTtcbiAgICAgIHJldHVybiBkb1RyaWdnZXJPblVudGlsU3RvcHBlZChsb29rdXAsIGV2ZW50VHlwZSwgcmF3RXZlbnQsIHJhd1RhcmdldCwgc291cmNlLCBsb2dnZXIpO1xuICAgIH07XG5cbiAgICBjb25zdCBldmVudEhhbmRsZXIgPSAoZWxlbWVudCwgZGVzY0hhbmRsZXIpID0+ICh7XG4gICAgICBlbGVtZW50LFxuICAgICAgZGVzY0hhbmRsZXJcbiAgICB9KTtcbiAgICBjb25zdCBicm9hZGNhc3RIYW5kbGVyID0gKGlkLCBoYW5kbGVyKSA9PiAoe1xuICAgICAgaWQsXG4gICAgICBkZXNjSGFuZGxlcjogaGFuZGxlclxuICAgIH0pO1xuICAgIGNvbnN0IEV2ZW50UmVnaXN0cnkgPSAoKSA9PiB7XG4gICAgICBjb25zdCByZWdpc3RyeSA9IHt9O1xuICAgICAgY29uc3QgcmVnaXN0ZXJJZCA9IChleHRyYUFyZ3MsIGlkLCBldmVudHMpID0+IHtcbiAgICAgICAgZWFjaChldmVudHMsICh2LCBrKSA9PiB7XG4gICAgICAgICAgY29uc3QgaGFuZGxlcnMgPSByZWdpc3RyeVtrXSAhPT0gdW5kZWZpbmVkID8gcmVnaXN0cnlba10gOiB7fTtcbiAgICAgICAgICBoYW5kbGVyc1tpZF0gPSBjdXJyeUFyZ3ModiwgZXh0cmFBcmdzKTtcbiAgICAgICAgICByZWdpc3RyeVtrXSA9IGhhbmRsZXJzO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBmaW5kSGFuZGxlciA9IChoYW5kbGVycywgZWxlbSkgPT4gcmVhZCQxKGVsZW0pLmJpbmQoaWQgPT4gZ2V0JGcoaGFuZGxlcnMsIGlkKSkubWFwKGRlc2NIYW5kbGVyID0+IGV2ZW50SGFuZGxlcihlbGVtLCBkZXNjSGFuZGxlcikpO1xuICAgICAgY29uc3QgZmlsdGVyQnlUeXBlID0gdHlwZSA9PiBnZXQkZyhyZWdpc3RyeSwgdHlwZSkubWFwKGhhbmRsZXJzID0+IG1hcFRvQXJyYXkoaGFuZGxlcnMsIChmLCBpZCkgPT4gYnJvYWRjYXN0SGFuZGxlcihpZCwgZikpKS5nZXRPcihbXSk7XG4gICAgICBjb25zdCBmaW5kID0gKGlzQWJvdmVSb290LCB0eXBlLCB0YXJnZXQpID0+IGdldCRnKHJlZ2lzdHJ5LCB0eXBlKS5iaW5kKGhhbmRsZXJzID0+IGNsb3Nlc3QkNCh0YXJnZXQsIGVsZW0gPT4gZmluZEhhbmRsZXIoaGFuZGxlcnMsIGVsZW0pLCBpc0Fib3ZlUm9vdCkpO1xuICAgICAgY29uc3QgdW5yZWdpc3RlcklkID0gaWQgPT4ge1xuICAgICAgICBlYWNoKHJlZ2lzdHJ5LCAoaGFuZGxlcnNCeUlkLCBfZXZlbnROYW1lKSA9PiB7XG4gICAgICAgICAgaWYgKGhhcyQyKGhhbmRsZXJzQnlJZCwgaWQpKSB7XG4gICAgICAgICAgICBkZWxldGUgaGFuZGxlcnNCeUlkW2lkXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlZ2lzdGVySWQsXG4gICAgICAgIHVucmVnaXN0ZXJJZCxcbiAgICAgICAgZmlsdGVyQnlUeXBlLFxuICAgICAgICBmaW5kXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBSZWdpc3RyeSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IEV2ZW50UmVnaXN0cnkoKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB7fTtcbiAgICAgIGNvbnN0IHJlYWRPclRhZyA9IGNvbXBvbmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW0gPSBjb21wb25lbnQuZWxlbWVudDtcbiAgICAgICAgcmV0dXJuIHJlYWQkMShlbGVtKS5nZXRPclRodW5rKCgpID0+IHdyaXRlKCd1aWQtJywgY29tcG9uZW50LmVsZW1lbnQpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBmYWlsT25EdXBsaWNhdGUgPSAoY29tcG9uZW50LCB0YWdJZCkgPT4ge1xuICAgICAgICBjb25zdCBjb25mbGljdCA9IGNvbXBvbmVudHNbdGFnSWRdO1xuICAgICAgICBpZiAoY29uZmxpY3QgPT09IGNvbXBvbmVudCkge1xuICAgICAgICAgIHVucmVnaXN0ZXIoY29tcG9uZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB0YWdJZCBcIicgKyB0YWdJZCArICdcIiBpcyBhbHJlYWR5IHVzZWQgYnk6ICcgKyBlbGVtZW50KGNvbmZsaWN0LmVsZW1lbnQpICsgJ1xcbkNhbm5vdCB1c2UgaXQgZm9yOiAnICsgZWxlbWVudChjb21wb25lbnQuZWxlbWVudCkgKyAnXFxuJyArICdUaGUgY29uZmxpY3RpbmcgZWxlbWVudCBpcycgKyAoaW5Cb2R5KGNvbmZsaWN0LmVsZW1lbnQpID8gJyAnIDogJyBub3QgJykgKyAnYWxyZWFkeSBpbiB0aGUgRE9NJyk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCByZWdpc3RlciA9IGNvbXBvbmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHRhZ0lkID0gcmVhZE9yVGFnKGNvbXBvbmVudCk7XG4gICAgICAgIGlmIChoYXNOb25OdWxsYWJsZUtleShjb21wb25lbnRzLCB0YWdJZCkpIHtcbiAgICAgICAgICBmYWlsT25EdXBsaWNhdGUoY29tcG9uZW50LCB0YWdJZCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXh0cmFBcmdzID0gW2NvbXBvbmVudF07XG4gICAgICAgIGV2ZW50cy5yZWdpc3RlcklkKGV4dHJhQXJncywgdGFnSWQsIGNvbXBvbmVudC5ldmVudHMpO1xuICAgICAgICBjb21wb25lbnRzW3RhZ0lkXSA9IGNvbXBvbmVudDtcbiAgICAgIH07XG4gICAgICBjb25zdCB1bnJlZ2lzdGVyID0gY29tcG9uZW50ID0+IHtcbiAgICAgICAgcmVhZCQxKGNvbXBvbmVudC5lbGVtZW50KS5lYWNoKHRhZ0lkID0+IHtcbiAgICAgICAgICBkZWxldGUgY29tcG9uZW50c1t0YWdJZF07XG4gICAgICAgICAgZXZlbnRzLnVucmVnaXN0ZXJJZCh0YWdJZCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZpbHRlciA9IHR5cGUgPT4gZXZlbnRzLmZpbHRlckJ5VHlwZSh0eXBlKTtcbiAgICAgIGNvbnN0IGZpbmQgPSAoaXNBYm92ZVJvb3QsIHR5cGUsIHRhcmdldCkgPT4gZXZlbnRzLmZpbmQoaXNBYm92ZVJvb3QsIHR5cGUsIHRhcmdldCk7XG4gICAgICBjb25zdCBnZXRCeUlkID0gaWQgPT4gZ2V0JGcoY29tcG9uZW50cywgaWQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmluZCxcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICByZWdpc3RlcixcbiAgICAgICAgdW5yZWdpc3RlcixcbiAgICAgICAgZ2V0QnlJZFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmFjdG9yeSRqID0gZGV0YWlsID0+IHtcbiAgICAgIGNvbnN0IHthdHRyaWJ1dGVzLCAuLi5kb21XaXRob3V0QXR0cmlidXRlc30gPSBkZXRhaWwuZG9tO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIHJvbGU6ICdwcmVzZW50YXRpb24nLFxuICAgICAgICAgICAgLi4uYXR0cmlidXRlc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uZG9tV2l0aG91dEF0dHJpYnV0ZXNcbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogZGV0YWlsLmNvbXBvbmVudHMsXG4gICAgICAgIGJlaGF2aW91cnM6IGdldCQzKGRldGFpbC5jb250YWluZXJCZWhhdmlvdXJzKSxcbiAgICAgICAgZXZlbnRzOiBkZXRhaWwuZXZlbnRzLFxuICAgICAgICBkb21Nb2RpZmljYXRpb246IGRldGFpbC5kb21Nb2RpZmljYXRpb24sXG4gICAgICAgIGV2ZW50T3JkZXI6IGRldGFpbC5ldmVudE9yZGVyXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgQ29udGFpbmVyID0gc2luZ2xlKHtcbiAgICAgIG5hbWU6ICdDb250YWluZXInLFxuICAgICAgZmFjdG9yeTogZmFjdG9yeSRqLFxuICAgICAgY29uZmlnRmllbGRzOiBbXG4gICAgICAgIGRlZmF1bHRlZCgnY29tcG9uZW50cycsIFtdKSxcbiAgICAgICAgZmllbGQoJ2NvbnRhaW5lckJlaGF2aW91cnMnLCBbXSksXG4gICAgICAgIGRlZmF1bHRlZCgnZXZlbnRzJywge30pLFxuICAgICAgICBkZWZhdWx0ZWQoJ2RvbU1vZGlmaWNhdGlvbicsIHt9KSxcbiAgICAgICAgZGVmYXVsdGVkKCdldmVudE9yZGVyJywge30pXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBjb25zdCB0YWtlb3ZlciA9IHJvb3QgPT4ge1xuICAgICAgY29uc3QgaXNBYm92ZVJvb3QgPSBlbCA9PiBwYXJlbnQocm9vdC5lbGVtZW50KS5mb2xkKGFsd2F5cywgcGFyZW50ID0+IGVxKGVsLCBwYXJlbnQpKTtcbiAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gUmVnaXN0cnkoKTtcbiAgICAgIGNvbnN0IGxvb2t1cCA9IChldmVudE5hbWUsIHRhcmdldCkgPT4gcmVnaXN0cnkuZmluZChpc0Fib3ZlUm9vdCwgZXZlbnROYW1lLCB0YXJnZXQpO1xuICAgICAgY29uc3QgZG9tRXZlbnRzID0gc2V0dXAkZChyb290LmVsZW1lbnQsIHtcbiAgICAgICAgdHJpZ2dlckV2ZW50OiAoZXZlbnROYW1lLCBldmVudCkgPT4ge1xuICAgICAgICAgIHJldHVybiBtb25pdG9yRXZlbnQoZXZlbnROYW1lLCBldmVudC50YXJnZXQsIGxvZ2dlciA9PiB0cmlnZ2VyVW50aWxTdG9wcGVkKGxvb2t1cCwgZXZlbnROYW1lLCBldmVudCwgbG9nZ2VyKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3lzdGVtQXBpID0ge1xuICAgICAgICBkZWJ1Z0luZm86IGNvbnN0YW50JDEoJ3JlYWwnKSxcbiAgICAgICAgdHJpZ2dlckV2ZW50OiAoZXZlbnROYW1lLCB0YXJnZXQsIGRhdGEpID0+IHtcbiAgICAgICAgICBtb25pdG9yRXZlbnQoZXZlbnROYW1lLCB0YXJnZXQsIGxvZ2dlciA9PiB0cmlnZ2VyT25VbnRpbFN0b3BwZWQobG9va3VwLCBldmVudE5hbWUsIGRhdGEsIHRhcmdldCwgbG9nZ2VyKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRyaWdnZXJGb2N1czogKHRhcmdldCwgb3JpZ2luYXRvcikgPT4ge1xuICAgICAgICAgIHJlYWQkMSh0YXJnZXQpLmZvbGQoKCkgPT4ge1xuICAgICAgICAgICAgZm9jdXMkMyh0YXJnZXQpO1xuICAgICAgICAgIH0sIF9hbGxveUlkID0+IHtcbiAgICAgICAgICAgIG1vbml0b3JFdmVudChmb2N1cyQ0KCksIHRhcmdldCwgbG9nZ2VyID0+IHtcbiAgICAgICAgICAgICAgdHJpZ2dlckhhbmRsZXIobG9va3VwLCBmb2N1cyQ0KCksIHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hdG9yLFxuICAgICAgICAgICAgICAgIGtpbGw6IG5vb3AsXG4gICAgICAgICAgICAgICAgcHJldmVudDogbm9vcCxcbiAgICAgICAgICAgICAgICB0YXJnZXRcbiAgICAgICAgICAgICAgfSwgdGFyZ2V0LCBsb2dnZXIpO1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgdHJpZ2dlckVzY2FwZTogKGNvbXAsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgc3lzdGVtQXBpLnRyaWdnZXJFdmVudCgna2V5ZG93bicsIGNvbXAuZWxlbWVudCwgc2ltdWxhdGVkRXZlbnQuZXZlbnQpO1xuICAgICAgICB9LFxuICAgICAgICBnZXRCeVVpZDogdWlkID0+IHtcbiAgICAgICAgICByZXR1cm4gZ2V0QnlVaWQodWlkKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0QnlEb206IGVsZW0gPT4ge1xuICAgICAgICAgIHJldHVybiBnZXRCeURvbShlbGVtKTtcbiAgICAgICAgfSxcbiAgICAgICAgYnVpbGQ6IGJ1aWxkJDEsXG4gICAgICAgIGJ1aWxkT3JQYXRjaDogYnVpbGRPclBhdGNoLFxuICAgICAgICBhZGRUb0d1aTogYyA9PiB7XG4gICAgICAgICAgYWRkKGMpO1xuICAgICAgICB9LFxuICAgICAgICByZW1vdmVGcm9tR3VpOiBjID0+IHtcbiAgICAgICAgICByZW1vdmUoYyk7XG4gICAgICAgIH0sXG4gICAgICAgIGFkZFRvV29ybGQ6IGMgPT4ge1xuICAgICAgICAgIGFkZFRvV29ybGQoYyk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbW92ZUZyb21Xb3JsZDogYyA9PiB7XG4gICAgICAgICAgcmVtb3ZlRnJvbVdvcmxkKGMpO1xuICAgICAgICB9LFxuICAgICAgICBicm9hZGNhc3Q6IG1lc3NhZ2UgPT4ge1xuICAgICAgICAgIGJyb2FkY2FzdCQxKG1lc3NhZ2UpO1xuICAgICAgICB9LFxuICAgICAgICBicm9hZGNhc3RPbjogKGNoYW5uZWxzLCBtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgYnJvYWRjYXN0T24oY2hhbm5lbHMsIG1lc3NhZ2UpO1xuICAgICAgICB9LFxuICAgICAgICBicm9hZGNhc3RFdmVudDogKGV2ZW50TmFtZSwgZXZlbnQpID0+IHtcbiAgICAgICAgICBicm9hZGNhc3RFdmVudChldmVudE5hbWUsIGV2ZW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNDb25uZWN0ZWQ6IGFsd2F5c1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkZFRvV29ybGQgPSBjb21wb25lbnQgPT4ge1xuICAgICAgICBjb21wb25lbnQuY29ubmVjdChzeXN0ZW1BcGkpO1xuICAgICAgICBpZiAoIWlzVGV4dChjb21wb25lbnQuZWxlbWVudCkpIHtcbiAgICAgICAgICByZWdpc3RyeS5yZWdpc3Rlcihjb21wb25lbnQpO1xuICAgICAgICAgIGVhY2gkMShjb21wb25lbnQuY29tcG9uZW50cygpLCBhZGRUb1dvcmxkKTtcbiAgICAgICAgICBzeXN0ZW1BcGkudHJpZ2dlckV2ZW50KHN5c3RlbUluaXQoKSwgY29tcG9uZW50LmVsZW1lbnQsIHsgdGFyZ2V0OiBjb21wb25lbnQuZWxlbWVudCB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlbW92ZUZyb21Xb3JsZCA9IGNvbXBvbmVudCA9PiB7XG4gICAgICAgIGlmICghaXNUZXh0KGNvbXBvbmVudC5lbGVtZW50KSkge1xuICAgICAgICAgIGVhY2gkMShjb21wb25lbnQuY29tcG9uZW50cygpLCByZW1vdmVGcm9tV29ybGQpO1xuICAgICAgICAgIHJlZ2lzdHJ5LnVucmVnaXN0ZXIoY29tcG9uZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjb21wb25lbnQuZGlzY29ubmVjdCgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkZCA9IGNvbXBvbmVudCA9PiB7XG4gICAgICAgIGF0dGFjaChyb290LCBjb21wb25lbnQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlbW92ZSA9IGNvbXBvbmVudCA9PiB7XG4gICAgICAgIGRldGFjaChjb21wb25lbnQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICAgIGRvbUV2ZW50cy51bmJpbmQoKTtcbiAgICAgICAgcmVtb3ZlJDUocm9vdC5lbGVtZW50KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBicm9hZGNhc3REYXRhID0gZGF0YSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVycyA9IHJlZ2lzdHJ5LmZpbHRlcihyZWNlaXZlKCkpO1xuICAgICAgICBlYWNoJDEocmVjZWl2ZXJzLCByZWNlaXZlciA9PiB7XG4gICAgICAgICAgY29uc3QgZGVzY0hhbmRsZXIgPSByZWNlaXZlci5kZXNjSGFuZGxlcjtcbiAgICAgICAgICBjb25zdCBoYW5kbGVyID0gZ2V0Q3VycmllZChkZXNjSGFuZGxlcik7XG4gICAgICAgICAgaGFuZGxlcihkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgYnJvYWRjYXN0JDEgPSBtZXNzYWdlID0+IHtcbiAgICAgICAgYnJvYWRjYXN0RGF0YSh7XG4gICAgICAgICAgdW5pdmVyc2FsOiB0cnVlLFxuICAgICAgICAgIGRhdGE6IG1lc3NhZ2VcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgYnJvYWRjYXN0T24gPSAoY2hhbm5lbHMsIG1lc3NhZ2UpID0+IHtcbiAgICAgICAgYnJvYWRjYXN0RGF0YSh7XG4gICAgICAgICAgdW5pdmVyc2FsOiBmYWxzZSxcbiAgICAgICAgICBjaGFubmVscyxcbiAgICAgICAgICBkYXRhOiBtZXNzYWdlXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGJyb2FkY2FzdEV2ZW50ID0gKGV2ZW50TmFtZSwgZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gcmVnaXN0cnkuZmlsdGVyKGV2ZW50TmFtZSk7XG4gICAgICAgIHJldHVybiBicm9hZGNhc3QobGlzdGVuZXJzLCBldmVudCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0QnlVaWQgPSB1aWQgPT4gcmVnaXN0cnkuZ2V0QnlJZCh1aWQpLmZvbGQoKCkgPT4gUmVzdWx0LmVycm9yKG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgY29tcG9uZW50IHdpdGggdWlkOiBcIicgKyB1aWQgKyAnXCIgaW4gc3lzdGVtLicpKSwgUmVzdWx0LnZhbHVlKTtcbiAgICAgIGNvbnN0IGdldEJ5RG9tID0gZWxlbSA9PiB7XG4gICAgICAgIGNvbnN0IHVpZCA9IHJlYWQkMShlbGVtKS5nZXRPcignbm90IGZvdW5kJyk7XG4gICAgICAgIHJldHVybiBnZXRCeVVpZCh1aWQpO1xuICAgICAgfTtcbiAgICAgIGFkZFRvV29ybGQocm9vdCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByb290LFxuICAgICAgICBlbGVtZW50OiByb290LmVsZW1lbnQsXG4gICAgICAgIGRlc3Ryb3ksXG4gICAgICAgIGFkZCxcbiAgICAgICAgcmVtb3ZlLFxuICAgICAgICBnZXRCeVVpZCxcbiAgICAgICAgZ2V0QnlEb20sXG4gICAgICAgIGFkZFRvV29ybGQsXG4gICAgICAgIHJlbW92ZUZyb21Xb3JsZCxcbiAgICAgICAgYnJvYWRjYXN0OiBicm9hZGNhc3QkMSxcbiAgICAgICAgYnJvYWRjYXN0T24sXG4gICAgICAgIGJyb2FkY2FzdEV2ZW50XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJCYXIgPSAoc3BlYywgYmFja3N0YWdlKSA9PiAoe1xuICAgICAgZG9tOiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAndG94LWJhcicsXG4gICAgICAgICAgJ3RveC1mb3JtX19jb250cm9scy1oLXN0YWNrJ1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czogbWFwJDIoc3BlYy5pdGVtcywgYmFja3N0YWdlLmludGVycHJldGVyKVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2NoZW1hJGogPSBjb25zdGFudCQxKFtcbiAgICAgIGRlZmF1bHRlZCgncHJlZml4JywgJ2Zvcm0tZmllbGQnKSxcbiAgICAgIGZpZWxkKCdmaWVsZEJlaGF2aW91cnMnLCBbXG4gICAgICAgIENvbXBvc2luZyxcbiAgICAgICAgUmVwcmVzZW50aW5nXG4gICAgICBdKVxuICAgIF0pO1xuICAgIGNvbnN0IHBhcnRzJGQgPSBjb25zdGFudCQxKFtcbiAgICAgIG9wdGlvbmFsKHtcbiAgICAgICAgc2NoZW1hOiBbcmVxdWlyZWQkMSgnZG9tJyldLFxuICAgICAgICBuYW1lOiAnbGFiZWwnXG4gICAgICB9KSxcbiAgICAgIG9wdGlvbmFsKHtcbiAgICAgICAgZmFjdG9yeToge1xuICAgICAgICAgIHNrZXRjaDogc3BlYyA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB1aWQ6IHNwZWMudWlkLFxuICAgICAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgICAgICB0YWc6ICdzcGFuJyxcbiAgICAgICAgICAgICAgICBzdHlsZXM6IHsgZGlzcGxheTogJ25vbmUnIH0sXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogeyAnYXJpYS1oaWRkZW4nOiAndHJ1ZScgfSxcbiAgICAgICAgICAgICAgICBpbm5lckh0bWw6IHNwZWMudGV4dFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc2NoZW1hOiBbcmVxdWlyZWQkMSgndGV4dCcpXSxcbiAgICAgICAgbmFtZTogJ2FyaWEtZGVzY3JpcHRvcidcbiAgICAgIH0pLFxuICAgICAgcmVxdWlyZWQoe1xuICAgICAgICBmYWN0b3J5OiB7XG4gICAgICAgICAgc2tldGNoOiBzcGVjID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVGYWN0b3J5ID0gZXhjbHVkZShzcGVjLCBbJ2ZhY3RvcnknXSk7XG4gICAgICAgICAgICByZXR1cm4gc3BlYy5mYWN0b3J5LnNrZXRjaChleGNsdWRlRmFjdG9yeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzY2hlbWE6IFtyZXF1aXJlZCQxKCdmYWN0b3J5JyldLFxuICAgICAgICBuYW1lOiAnZmllbGQnXG4gICAgICB9KVxuICAgIF0pO1xuXG4gICAgY29uc3QgZmFjdG9yeSRpID0gKGRldGFpbCwgY29tcG9uZW50cywgX3NwZWMsIF9leHRlcm5hbHMpID0+IHtcbiAgICAgIGNvbnN0IGJlaGF2aW91cnMgPSBhdWdtZW50KGRldGFpbC5maWVsZEJlaGF2aW91cnMsIFtcbiAgICAgICAgQ29tcG9zaW5nLmNvbmZpZyh7XG4gICAgICAgICAgZmluZDogY29udGFpbmVyID0+IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRQYXJ0KGNvbnRhaW5lciwgZGV0YWlsLCAnZmllbGQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBSZXByZXNlbnRpbmcuY29uZmlnKHtcbiAgICAgICAgICBzdG9yZToge1xuICAgICAgICAgICAgbW9kZTogJ21hbnVhbCcsXG4gICAgICAgICAgICBnZXRWYWx1ZTogZmllbGQgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gQ29tcG9zaW5nLmdldEN1cnJlbnQoZmllbGQpLmJpbmQoUmVwcmVzZW50aW5nLmdldFZhbHVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRWYWx1ZTogKGZpZWxkLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICBDb21wb3NpbmcuZ2V0Q3VycmVudChmaWVsZCkuZWFjaChjdXJyZW50ID0+IHtcbiAgICAgICAgICAgICAgICBSZXByZXNlbnRpbmcuc2V0VmFsdWUoY3VycmVudCwgdmFsdWUpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICBdKTtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IGRlcml2ZSQyKFtydW5PbkF0dGFjaGVkKChjb21wb25lbnQsIF9zaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBzID0gZ2V0UGFydHMoY29tcG9uZW50LCBkZXRhaWwsIFtcbiAgICAgICAgICAgICdsYWJlbCcsXG4gICAgICAgICAgICAnZmllbGQnLFxuICAgICAgICAgICAgJ2FyaWEtZGVzY3JpcHRvcidcbiAgICAgICAgICBdKTtcbiAgICAgICAgICBwcy5maWVsZCgpLmVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBnZW5lcmF0ZSQ2KGRldGFpbC5wcmVmaXgpO1xuICAgICAgICAgICAgcHMubGFiZWwoKS5lYWNoKGxhYmVsID0+IHtcbiAgICAgICAgICAgICAgc2V0JDkobGFiZWwuZWxlbWVudCwgJ2ZvcicsIGlkKTtcbiAgICAgICAgICAgICAgc2V0JDkoZmllbGQuZWxlbWVudCwgJ2lkJywgaWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwc1snYXJpYS1kZXNjcmlwdG9yJ10oKS5lYWNoKGRlc2NyaXB0b3IgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBkZXNjcmlwdG9ySWQgPSBnZW5lcmF0ZSQ2KGRldGFpbC5wcmVmaXgpO1xuICAgICAgICAgICAgICBzZXQkOShkZXNjcmlwdG9yLmVsZW1lbnQsICdpZCcsIGRlc2NyaXB0b3JJZCk7XG4gICAgICAgICAgICAgIHNldCQ5KGZpZWxkLmVsZW1lbnQsICdhcmlhLWRlc2NyaWJlZGJ5JywgZGVzY3JpcHRvcklkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KV0pO1xuICAgICAgY29uc3QgYXBpcyA9IHtcbiAgICAgICAgZ2V0RmllbGQ6IGNvbnRhaW5lciA9PiBnZXRQYXJ0KGNvbnRhaW5lciwgZGV0YWlsLCAnZmllbGQnKSxcbiAgICAgICAgZ2V0TGFiZWw6IGNvbnRhaW5lciA9PiBnZXRQYXJ0KGNvbnRhaW5lciwgZGV0YWlsLCAnbGFiZWwnKVxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVpZDogZGV0YWlsLnVpZCxcbiAgICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICBiZWhhdmlvdXJzLFxuICAgICAgICBldmVudHMsXG4gICAgICAgIGFwaXNcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBGb3JtRmllbGQgPSBjb21wb3NpdGUoe1xuICAgICAgbmFtZTogJ0Zvcm1GaWVsZCcsXG4gICAgICBjb25maWdGaWVsZHM6IHNjaGVtYSRqKCksXG4gICAgICBwYXJ0RmllbGRzOiBwYXJ0cyRkKCksXG4gICAgICBmYWN0b3J5OiBmYWN0b3J5JGksXG4gICAgICBhcGlzOiB7XG4gICAgICAgIGdldEZpZWxkOiAoYXBpcywgY29tcCkgPT4gYXBpcy5nZXRGaWVsZChjb21wKSxcbiAgICAgICAgZ2V0TGFiZWw6IChhcGlzLCBjb21wKSA9PiBhcGlzLmdldExhYmVsKGNvbXApXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBleGhpYml0JDIgPSAoYmFzZSwgdGFiQ29uZmlnKSA9PiBudSQ3KHtcbiAgICAgIGF0dHJpYnV0ZXM6IHdyYXBBbGwoW3tcbiAgICAgICAgICBrZXk6IHRhYkNvbmZpZy50YWJBdHRyLFxuICAgICAgICAgIHZhbHVlOiAndHJ1ZSdcbiAgICAgICAgfV0pXG4gICAgfSk7XG5cbiAgICB2YXIgQWN0aXZlVGFic3RvcHBpbmcgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgZXhoaWJpdDogZXhoaWJpdCQyXG4gICAgfSk7XG5cbiAgICB2YXIgVGFic3RvcFNjaGVtYSA9IFtkZWZhdWx0ZWQoJ3RhYkF0dHInLCAnZGF0YS1hbGxveS10YWJzdG9wJyldO1xuXG4gICAgY29uc3QgVGFic3RvcHBpbmcgPSBjcmVhdGUkNCh7XG4gICAgICBmaWVsZHM6IFRhYnN0b3BTY2hlbWEsXG4gICAgICBuYW1lOiAndGFic3RvcHBpbmcnLFxuICAgICAgYWN0aXZlOiBBY3RpdmVUYWJzdG9wcGluZ1xuICAgIH0pO1xuXG4gICAgdmFyIGdsb2JhbCQzID0gdGlueW1jZS51dGlsLlRvb2xzLnJlc29sdmUoJ3RpbnltY2UuaHRtbC5FbnRpdGllcycpO1xuXG4gICAgY29uc3QgcmVuZGVyRm9ybUZpZWxkV2l0aCA9IChwTGFiZWwsIHBGaWVsZCwgZXh0cmFDbGFzc2VzLCBleHRyYUJlaGF2aW91cnMpID0+IHtcbiAgICAgIGNvbnN0IHNwZWMgPSByZW5kZXJGb3JtRmllbGRTcGVjV2l0aChwTGFiZWwsIHBGaWVsZCwgZXh0cmFDbGFzc2VzLCBleHRyYUJlaGF2aW91cnMpO1xuICAgICAgcmV0dXJuIEZvcm1GaWVsZC5za2V0Y2goc3BlYyk7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJGb3JtRmllbGQgPSAocExhYmVsLCBwRmllbGQpID0+IHJlbmRlckZvcm1GaWVsZFdpdGgocExhYmVsLCBwRmllbGQsIFtdLCBbXSk7XG4gICAgY29uc3QgcmVuZGVyRm9ybUZpZWxkU3BlY1dpdGggPSAocExhYmVsLCBwRmllbGQsIGV4dHJhQ2xhc3NlcywgZXh0cmFCZWhhdmlvdXJzKSA9PiAoe1xuICAgICAgZG9tOiByZW5kZXJGb3JtRmllbGREb21XaXRoKGV4dHJhQ2xhc3NlcyksXG4gICAgICBjb21wb25lbnRzOiBwTGFiZWwudG9BcnJheSgpLmNvbmNhdChbcEZpZWxkXSksXG4gICAgICBmaWVsZEJlaGF2aW91cnM6IGRlcml2ZSQxKGV4dHJhQmVoYXZpb3VycylcbiAgICB9KTtcbiAgICBjb25zdCByZW5kZXJGb3JtRmllbGREb20gPSAoKSA9PiByZW5kZXJGb3JtRmllbGREb21XaXRoKFtdKTtcbiAgICBjb25zdCByZW5kZXJGb3JtRmllbGREb21XaXRoID0gZXh0cmFDbGFzc2VzID0+ICh7XG4gICAgICB0YWc6ICdkaXYnLFxuICAgICAgY2xhc3NlczogWyd0b3gtZm9ybV9fZ3JvdXAnXS5jb25jYXQoZXh0cmFDbGFzc2VzKVxuICAgIH0pO1xuICAgIGNvbnN0IHJlbmRlckxhYmVsJDMgPSAobGFiZWwsIHByb3ZpZGVyc0JhY2tzdGFnZSkgPT4gRm9ybUZpZWxkLnBhcnRzLmxhYmVsKHtcbiAgICAgIGRvbToge1xuICAgICAgICB0YWc6ICdsYWJlbCcsXG4gICAgICAgIGNsYXNzZXM6IFsndG94LWxhYmVsJ11cbiAgICAgIH0sXG4gICAgICBjb21wb25lbnRzOiBbdGV4dCQyKHByb3ZpZGVyc0JhY2tzdGFnZS50cmFuc2xhdGUobGFiZWwpKV1cbiAgICB9KTtcblxuICAgIGNvbnN0IGZvcm1DaGFuZ2VFdmVudCA9IGdlbmVyYXRlJDYoJ2Zvcm0tY29tcG9uZW50LWNoYW5nZScpO1xuICAgIGNvbnN0IGZvcm1DbG9zZUV2ZW50ID0gZ2VuZXJhdGUkNignZm9ybS1jbG9zZScpO1xuICAgIGNvbnN0IGZvcm1DYW5jZWxFdmVudCA9IGdlbmVyYXRlJDYoJ2Zvcm0tY2FuY2VsJyk7XG4gICAgY29uc3QgZm9ybUFjdGlvbkV2ZW50ID0gZ2VuZXJhdGUkNignZm9ybS1hY3Rpb24nKTtcbiAgICBjb25zdCBmb3JtU3VibWl0RXZlbnQgPSBnZW5lcmF0ZSQ2KCdmb3JtLXN1Ym1pdCcpO1xuICAgIGNvbnN0IGZvcm1CbG9ja0V2ZW50ID0gZ2VuZXJhdGUkNignZm9ybS1ibG9jaycpO1xuICAgIGNvbnN0IGZvcm1VbmJsb2NrRXZlbnQgPSBnZW5lcmF0ZSQ2KCdmb3JtLXVuYmxvY2snKTtcbiAgICBjb25zdCBmb3JtVGFiQ2hhbmdlRXZlbnQgPSBnZW5lcmF0ZSQ2KCdmb3JtLXRhYmNoYW5nZScpO1xuICAgIGNvbnN0IGZvcm1SZXNpemVFdmVudCA9IGdlbmVyYXRlJDYoJ2Zvcm0tcmVzaXplJyk7XG5cbiAgICBjb25zdCByZW5kZXJDb2xsZWN0aW9uID0gKHNwZWMsIHByb3ZpZGVyc0JhY2tzdGFnZSwgaW5pdGlhbERhdGEpID0+IHtcbiAgICAgIGNvbnN0IHBMYWJlbCA9IHNwZWMubGFiZWwubWFwKGxhYmVsID0+IHJlbmRlckxhYmVsJDMobGFiZWwsIHByb3ZpZGVyc0JhY2tzdGFnZSkpO1xuICAgICAgY29uc3QgcnVuT25JdGVtID0gZiA9PiAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgY2xvc2VzdCQxKHNlLmV2ZW50LnRhcmdldCwgJ1tkYXRhLWNvbGxlY3Rpb24taXRlbS12YWx1ZV0nKS5lYWNoKHRhcmdldCA9PiB7XG4gICAgICAgICAgZihjb21wLCBzZSwgdGFyZ2V0LCBnZXQkZih0YXJnZXQsICdkYXRhLWNvbGxlY3Rpb24taXRlbS12YWx1ZScpKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0Q29udGVudHMgPSAoY29tcCwgaXRlbXMpID0+IHtcbiAgICAgICAgY29uc3QgaHRtbExpbmVzID0gbWFwJDIoaXRlbXMsIGl0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW1UZXh0ID0gZ2xvYmFsJDgudHJhbnNsYXRlKGl0ZW0udGV4dCk7XG4gICAgICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSBzcGVjLmNvbHVtbnMgPT09IDEgPyBgPGRpdiBjbGFzcz1cInRveC1jb2xsZWN0aW9uX19pdGVtLWxhYmVsXCI+JHsgaXRlbVRleHQgfTwvZGl2PmAgOiAnJztcbiAgICAgICAgICBjb25zdCBpY29uQ29udGVudCA9IGA8ZGl2IGNsYXNzPVwidG94LWNvbGxlY3Rpb25fX2l0ZW0taWNvblwiPiR7IGl0ZW0uaWNvbiB9PC9kaXY+YDtcbiAgICAgICAgICBjb25zdCBtYXBJdGVtTmFtZSA9IHtcbiAgICAgICAgICAgICdfJzogJyAnLFxuICAgICAgICAgICAgJyAtICc6ICcgJyxcbiAgICAgICAgICAgICctJzogJyAnXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBhcmlhTGFiZWwgPSBpdGVtVGV4dC5yZXBsYWNlKC9cXF98IFxcLSB8XFwtL2csIG1hdGNoID0+IG1hcEl0ZW1OYW1lW21hdGNoXSk7XG4gICAgICAgICAgY29uc3QgZGlzYWJsZWRDbGFzcyA9IHByb3ZpZGVyc0JhY2tzdGFnZS5pc0Rpc2FibGVkKCkgPyAnIHRveC1jb2xsZWN0aW9uX19pdGVtLS1zdGF0ZS1kaXNhYmxlZCcgOiAnJztcbiAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJ0b3gtY29sbGVjdGlvbl9faXRlbSR7IGRpc2FibGVkQ2xhc3MgfVwiIHRhYmluZGV4PVwiLTFcIiBkYXRhLWNvbGxlY3Rpb24taXRlbS12YWx1ZT1cIiR7IGdsb2JhbCQzLmVuY29kZUFsbFJhdyhpdGVtLnZhbHVlKSB9XCIgdGl0bGU9XCIkeyBhcmlhTGFiZWwgfVwiIGFyaWEtbGFiZWw9XCIkeyBhcmlhTGFiZWwgfVwiPiR7IGljb25Db250ZW50IH0keyB0ZXh0Q29udGVudCB9PC9kaXY+YDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNodW5rcyA9IHNwZWMuY29sdW1ucyAhPT0gJ2F1dG8nICYmIHNwZWMuY29sdW1ucyA+IDEgPyBjaHVuayQxKGh0bWxMaW5lcywgc3BlYy5jb2x1bW5zKSA6IFtodG1sTGluZXNdO1xuICAgICAgICBjb25zdCBodG1sID0gbWFwJDIoY2h1bmtzLCBjaCA9PiBgPGRpdiBjbGFzcz1cInRveC1jb2xsZWN0aW9uX19ncm91cFwiPiR7IGNoLmpvaW4oJycpIH08L2Rpdj5gKTtcbiAgICAgICAgc2V0JDYoY29tcC5lbGVtZW50LCBodG1sLmpvaW4oJycpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBvbkNsaWNrID0gcnVuT25JdGVtKChjb21wLCBzZSwgdGd0LCBpdGVtVmFsdWUpID0+IHtcbiAgICAgICAgc2Uuc3RvcCgpO1xuICAgICAgICBpZiAoIXByb3ZpZGVyc0JhY2tzdGFnZS5pc0Rpc2FibGVkKCkpIHtcbiAgICAgICAgICBlbWl0V2l0aChjb21wLCBmb3JtQWN0aW9uRXZlbnQsIHtcbiAgICAgICAgICAgIG5hbWU6IHNwZWMubmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtVmFsdWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBjb2xsZWN0aW9uRXZlbnRzID0gW1xuICAgICAgICBydW4kMShtb3VzZW92ZXIoKSwgcnVuT25JdGVtKChjb21wLCBzZSwgdGd0KSA9PiB7XG4gICAgICAgICAgZm9jdXMkMyh0Z3QpO1xuICAgICAgICB9KSksXG4gICAgICAgIHJ1biQxKGNsaWNrKCksIG9uQ2xpY2spLFxuICAgICAgICBydW4kMSh0YXAoKSwgb25DbGljayksXG4gICAgICAgIHJ1biQxKGZvY3VzaW4oKSwgcnVuT25JdGVtKChjb21wLCBzZSwgdGd0KSA9PiB7XG4gICAgICAgICAgZGVzY2VuZGFudChjb21wLmVsZW1lbnQsICcuJyArIGFjdGl2ZUNsYXNzKS5lYWNoKGN1cnJlbnRBY3RpdmUgPT4ge1xuICAgICAgICAgICAgcmVtb3ZlJDIoY3VycmVudEFjdGl2ZSwgYWN0aXZlQ2xhc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGFkZCQyKHRndCwgYWN0aXZlQ2xhc3MpO1xuICAgICAgICB9KSksXG4gICAgICAgIHJ1biQxKGZvY3Vzb3V0KCksIHJ1bk9uSXRlbShjb21wID0+IHtcbiAgICAgICAgICBkZXNjZW5kYW50KGNvbXAuZWxlbWVudCwgJy4nICsgYWN0aXZlQ2xhc3MpLmVhY2goY3VycmVudEFjdGl2ZSA9PiB7XG4gICAgICAgICAgICByZW1vdmUkMihjdXJyZW50QWN0aXZlLCBhY3RpdmVDbGFzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pKSxcbiAgICAgICAgcnVuT25FeGVjdXRlJDEocnVuT25JdGVtKChjb21wLCBzZSwgdGd0LCBpdGVtVmFsdWUpID0+IHtcbiAgICAgICAgICBlbWl0V2l0aChjb21wLCBmb3JtQWN0aW9uRXZlbnQsIHtcbiAgICAgICAgICAgIG5hbWU6IHNwZWMubmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtVmFsdWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkpXG4gICAgICBdO1xuICAgICAgY29uc3QgaXRlckNvbGxlY3Rpb25JdGVtcyA9IChjb21wLCBhcHBseUF0dHJpYnV0ZXMpID0+IG1hcCQyKGRlc2NlbmRhbnRzKGNvbXAuZWxlbWVudCwgJy50b3gtY29sbGVjdGlvbl9faXRlbScpLCBhcHBseUF0dHJpYnV0ZXMpO1xuICAgICAgY29uc3QgcEZpZWxkID0gRm9ybUZpZWxkLnBhcnRzLmZpZWxkKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1jb2xsZWN0aW9uJ10uY29uY2F0KHNwZWMuY29sdW1ucyAhPT0gMSA/IFsndG94LWNvbGxlY3Rpb24tLWdyaWQnXSA6IFsndG94LWNvbGxlY3Rpb24tLWxpc3QnXSlcbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW10sXG4gICAgICAgIGZhY3Rvcnk6IHsgc2tldGNoOiBpZGVudGl0eSB9LFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgRGlzYWJsaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBkaXNhYmxlZDogcHJvdmlkZXJzQmFja3N0YWdlLmlzRGlzYWJsZWQsXG4gICAgICAgICAgICBvbkRpc2FibGVkOiBjb21wID0+IHtcbiAgICAgICAgICAgICAgaXRlckNvbGxlY3Rpb25JdGVtcyhjb21wLCBjaGlsZEVsbSA9PiB7XG4gICAgICAgICAgICAgICAgYWRkJDIoY2hpbGRFbG0sICd0b3gtY29sbGVjdGlvbl9faXRlbS0tc3RhdGUtZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICBzZXQkOShjaGlsZEVsbSwgJ2FyaWEtZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25FbmFibGVkOiBjb21wID0+IHtcbiAgICAgICAgICAgICAgaXRlckNvbGxlY3Rpb25JdGVtcyhjb21wLCBjaGlsZEVsbSA9PiB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlJDIoY2hpbGRFbG0sICd0b3gtY29sbGVjdGlvbl9faXRlbS0tc3RhdGUtZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICByZW1vdmUkNyhjaGlsZEVsbSwgJ2FyaWEtZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcmVjZWl2aW5nQ29uZmlnKCksXG4gICAgICAgICAgUmVwbGFjaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgUmVwcmVzZW50aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBzdG9yZToge1xuICAgICAgICAgICAgICBtb2RlOiAnbWVtb3J5JyxcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiBpbml0aWFsRGF0YS5nZXRPcihbXSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblNldFZhbHVlOiAoY29tcCwgaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgc2V0Q29udGVudHMoY29tcCwgaXRlbXMpO1xuICAgICAgICAgICAgICBpZiAoc3BlYy5jb2x1bW5zID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgICAgICBkZXRlY3RTaXplKGNvbXAsIDUsICd0b3gtY29sbGVjdGlvbl9faXRlbScpLmVhY2goKHtudW1Sb3dzLCBudW1Db2x1bW5zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgS2V5aW5nLnNldEdyaWRTaXplKGNvbXAsIG51bVJvd3MsIG51bUNvbHVtbnMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVtaXQoY29tcCwgZm9ybVJlc2l6ZUV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBUYWJzdG9wcGluZy5jb25maWcoe30pLFxuICAgICAgICAgIEtleWluZy5jb25maWcoZGVyaXZlQ29sbGVjdGlvbk1vdmVtZW50KHNwZWMuY29sdW1ucywgJ25vcm1hbCcpKSxcbiAgICAgICAgICBjb25maWcoJ2NvbGxlY3Rpb24tZXZlbnRzJywgY29sbGVjdGlvbkV2ZW50cylcbiAgICAgICAgXSksXG4gICAgICAgIGV2ZW50T3JkZXI6IHtcbiAgICAgICAgICBbZXhlY3V0ZSQ1KCldOiBbXG4gICAgICAgICAgICAnZGlzYWJsaW5nJyxcbiAgICAgICAgICAgICdhbGxveS5iYXNlLmJlaGF2aW91cicsXG4gICAgICAgICAgICAnY29sbGVjdGlvbi1ldmVudHMnXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGV4dHJhQ2xhc3NlcyA9IFsndG94LWZvcm1fX2dyb3VwLS1jb2xsZWN0aW9uJ107XG4gICAgICByZXR1cm4gcmVuZGVyRm9ybUZpZWxkV2l0aChwTGFiZWwsIHBGaWVsZCwgZXh0cmFDbGFzc2VzLCBbXSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFyaWFFbGVtZW50cyA9IFtcbiAgICAgICdpbnB1dCcsXG4gICAgICAndGV4dGFyZWEnXG4gICAgXTtcbiAgICBjb25zdCBpc0FyaWFFbGVtZW50ID0gZWxlbSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gbmFtZSQzKGVsZW0pO1xuICAgICAgcmV0dXJuIGNvbnRhaW5zJDIoYXJpYUVsZW1lbnRzLCBuYW1lKTtcbiAgICB9O1xuICAgIGNvbnN0IG1hcmtWYWxpZCA9IChjb21wb25lbnQsIGludmFsaWRDb25maWcpID0+IHtcbiAgICAgIGNvbnN0IGVsZW0gPSBpbnZhbGlkQ29uZmlnLmdldFJvb3QoY29tcG9uZW50KS5nZXRPcihjb21wb25lbnQuZWxlbWVudCk7XG4gICAgICByZW1vdmUkMihlbGVtLCBpbnZhbGlkQ29uZmlnLmludmFsaWRDbGFzcyk7XG4gICAgICBpbnZhbGlkQ29uZmlnLm5vdGlmeS5lYWNoKG5vdGlmeUluZm8gPT4ge1xuICAgICAgICBpZiAoaXNBcmlhRWxlbWVudChjb21wb25lbnQuZWxlbWVudCkpIHtcbiAgICAgICAgICBzZXQkOShjb21wb25lbnQuZWxlbWVudCwgJ2FyaWEtaW52YWxpZCcsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBub3RpZnlJbmZvLmdldENvbnRhaW5lcihjb21wb25lbnQpLmVhY2goY29udGFpbmVyID0+IHtcbiAgICAgICAgICBzZXQkNihjb250YWluZXIsIG5vdGlmeUluZm8udmFsaWRIdG1sKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG5vdGlmeUluZm8ub25WYWxpZChjb21wb25lbnQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBtYXJrSW52YWxpZCA9IChjb21wb25lbnQsIGludmFsaWRDb25maWcsIGludmFsaWRTdGF0ZSwgdGV4dCkgPT4ge1xuICAgICAgY29uc3QgZWxlbSA9IGludmFsaWRDb25maWcuZ2V0Um9vdChjb21wb25lbnQpLmdldE9yKGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgIGFkZCQyKGVsZW0sIGludmFsaWRDb25maWcuaW52YWxpZENsYXNzKTtcbiAgICAgIGludmFsaWRDb25maWcubm90aWZ5LmVhY2gobm90aWZ5SW5mbyA9PiB7XG4gICAgICAgIGlmIChpc0FyaWFFbGVtZW50KGNvbXBvbmVudC5lbGVtZW50KSkge1xuICAgICAgICAgIHNldCQ5KGNvbXBvbmVudC5lbGVtZW50LCAnYXJpYS1pbnZhbGlkJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgbm90aWZ5SW5mby5nZXRDb250YWluZXIoY29tcG9uZW50KS5lYWNoKGNvbnRhaW5lciA9PiB7XG4gICAgICAgICAgc2V0JDYoY29udGFpbmVyLCB0ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIG5vdGlmeUluZm8ub25JbnZhbGlkKGNvbXBvbmVudCwgdGV4dCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHF1ZXJ5ID0gKGNvbXBvbmVudCwgaW52YWxpZENvbmZpZywgX2ludmFsaWRTdGF0ZSkgPT4gaW52YWxpZENvbmZpZy52YWxpZGF0b3IuZm9sZCgoKSA9PiBGdXR1cmUucHVyZShSZXN1bHQudmFsdWUodHJ1ZSkpLCB2YWxpZGF0b3JJbmZvID0+IHZhbGlkYXRvckluZm8udmFsaWRhdGUoY29tcG9uZW50KSk7XG4gICAgY29uc3QgcnVuID0gKGNvbXBvbmVudCwgaW52YWxpZENvbmZpZywgaW52YWxpZFN0YXRlKSA9PiB7XG4gICAgICBpbnZhbGlkQ29uZmlnLm5vdGlmeS5lYWNoKG5vdGlmeUluZm8gPT4ge1xuICAgICAgICBub3RpZnlJbmZvLm9uVmFsaWRhdGUoY29tcG9uZW50KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHF1ZXJ5KGNvbXBvbmVudCwgaW52YWxpZENvbmZpZykubWFwKHZhbGlkID0+IHtcbiAgICAgICAgaWYgKGNvbXBvbmVudC5nZXRTeXN0ZW0oKS5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbGlkLmZvbGQoZXJyID0+IHtcbiAgICAgICAgICAgIG1hcmtJbnZhbGlkKGNvbXBvbmVudCwgaW52YWxpZENvbmZpZywgaW52YWxpZFN0YXRlLCBlcnIpO1xuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvcihlcnIpO1xuICAgICAgICAgIH0sIHYgPT4ge1xuICAgICAgICAgICAgbWFya1ZhbGlkKGNvbXBvbmVudCwgaW52YWxpZENvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnZhbHVlKHYpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3IoJ05vIGxvbmdlciBpbiBzeXN0ZW0nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBpc0ludmFsaWQgPSAoY29tcG9uZW50LCBpbnZhbGlkQ29uZmlnKSA9PiB7XG4gICAgICBjb25zdCBlbGVtID0gaW52YWxpZENvbmZpZy5nZXRSb290KGNvbXBvbmVudCkuZ2V0T3IoY29tcG9uZW50LmVsZW1lbnQpO1xuICAgICAgcmV0dXJuIGhhcyhlbGVtLCBpbnZhbGlkQ29uZmlnLmludmFsaWRDbGFzcyk7XG4gICAgfTtcblxuICAgIHZhciBJbnZhbGlkYXRlQXBpcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBtYXJrVmFsaWQ6IG1hcmtWYWxpZCxcbiAgICAgICAgbWFya0ludmFsaWQ6IG1hcmtJbnZhbGlkLFxuICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgIHJ1bjogcnVuLFxuICAgICAgICBpc0ludmFsaWQ6IGlzSW52YWxpZFxuICAgIH0pO1xuXG4gICAgY29uc3QgZXZlbnRzJDggPSAoaW52YWxpZENvbmZpZywgaW52YWxpZFN0YXRlKSA9PiBpbnZhbGlkQ29uZmlnLnZhbGlkYXRvci5tYXAodmFsaWRhdG9ySW5mbyA9PiBkZXJpdmUkMihbcnVuJDEodmFsaWRhdG9ySW5mby5vbkV2ZW50LCBjb21wb25lbnQgPT4ge1xuICAgICAgICBydW4oY29tcG9uZW50LCBpbnZhbGlkQ29uZmlnLCBpbnZhbGlkU3RhdGUpLmdldChpZGVudGl0eSk7XG4gICAgICB9KV0uY29uY2F0KHZhbGlkYXRvckluZm8udmFsaWRhdGVPbkxvYWQgPyBbcnVuT25BdHRhY2hlZChjb21wb25lbnQgPT4ge1xuICAgICAgICBydW4oY29tcG9uZW50LCBpbnZhbGlkQ29uZmlnLCBpbnZhbGlkU3RhdGUpLmdldChub29wKTtcbiAgICAgIH0pXSA6IFtdKSkpLmdldE9yKHt9KTtcblxuICAgIHZhciBBY3RpdmVJbnZhbGlkYXRlID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIGV2ZW50czogZXZlbnRzJDhcbiAgICB9KTtcblxuICAgIHZhciBJbnZhbGlkYXRlU2NoZW1hID0gW1xuICAgICAgcmVxdWlyZWQkMSgnaW52YWxpZENsYXNzJyksXG4gICAgICBkZWZhdWx0ZWQoJ2dldFJvb3QnLCBPcHRpb25hbC5ub25lKSxcbiAgICAgIG9wdGlvbk9iak9mKCdub3RpZnknLCBbXG4gICAgICAgIGRlZmF1bHRlZCgnYXJpYScsICdhbGVydCcpLFxuICAgICAgICBkZWZhdWx0ZWQoJ2dldENvbnRhaW5lcicsIE9wdGlvbmFsLm5vbmUpLFxuICAgICAgICBkZWZhdWx0ZWQoJ3ZhbGlkSHRtbCcsICcnKSxcbiAgICAgICAgb25IYW5kbGVyKCdvblZhbGlkJyksXG4gICAgICAgIG9uSGFuZGxlcignb25JbnZhbGlkJyksXG4gICAgICAgIG9uSGFuZGxlcignb25WYWxpZGF0ZScpXG4gICAgICBdKSxcbiAgICAgIG9wdGlvbk9iak9mKCd2YWxpZGF0b3InLCBbXG4gICAgICAgIHJlcXVpcmVkJDEoJ3ZhbGlkYXRlJyksXG4gICAgICAgIGRlZmF1bHRlZCgnb25FdmVudCcsICdpbnB1dCcpLFxuICAgICAgICBkZWZhdWx0ZWQoJ3ZhbGlkYXRlT25Mb2FkJywgdHJ1ZSlcbiAgICAgIF0pXG4gICAgXTtcblxuICAgIGNvbnN0IEludmFsaWRhdGluZyA9IGNyZWF0ZSQ0KHtcbiAgICAgIGZpZWxkczogSW52YWxpZGF0ZVNjaGVtYSxcbiAgICAgIG5hbWU6ICdpbnZhbGlkYXRpbmcnLFxuICAgICAgYWN0aXZlOiBBY3RpdmVJbnZhbGlkYXRlLFxuICAgICAgYXBpczogSW52YWxpZGF0ZUFwaXMsXG4gICAgICBleHRyYToge1xuICAgICAgICB2YWxpZGF0aW9uOiB2YWxpZGF0b3IgPT4ge1xuICAgICAgICAgIHJldHVybiBjb21wb25lbnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgdiA9IFJlcHJlc2VudGluZy5nZXRWYWx1ZShjb21wb25lbnQpO1xuICAgICAgICAgICAgcmV0dXJuIEZ1dHVyZS5wdXJlKHZhbGlkYXRvcih2KSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZXhoaWJpdCQxID0gKCkgPT4gbnUkNyh7XG4gICAgICBzdHlsZXM6IHtcbiAgICAgICAgJy13ZWJraXQtdXNlci1zZWxlY3QnOiAnbm9uZScsXG4gICAgICAgICd1c2VyLXNlbGVjdCc6ICdub25lJyxcbiAgICAgICAgJy1tcy11c2VyLXNlbGVjdCc6ICdub25lJyxcbiAgICAgICAgJy1tb3otdXNlci1zZWxlY3QnOiAnLW1vei1ub25lJ1xuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZXM6IHsgdW5zZWxlY3RhYmxlOiAnb24nIH1cbiAgICB9KTtcbiAgICBjb25zdCBldmVudHMkNyA9ICgpID0+IGRlcml2ZSQyKFthYm9ydChzZWxlY3RzdGFydCgpLCBhbHdheXMpXSk7XG5cbiAgICB2YXIgQWN0aXZlVW5zZWxlY3RpbmcgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgZXZlbnRzOiBldmVudHMkNyxcbiAgICAgICAgZXhoaWJpdDogZXhoaWJpdCQxXG4gICAgfSk7XG5cbiAgICBjb25zdCBVbnNlbGVjdGluZyA9IGNyZWF0ZSQ0KHtcbiAgICAgIGZpZWxkczogW10sXG4gICAgICBuYW1lOiAndW5zZWxlY3RpbmcnLFxuICAgICAgYWN0aXZlOiBBY3RpdmVVbnNlbGVjdGluZ1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVuZGVyUGFuZWxCdXR0b24gPSAoc3BlYywgc2hhcmVkQmFja3N0YWdlKSA9PiBEcm9wZG93bi5za2V0Y2goe1xuICAgICAgZG9tOiBzcGVjLmRvbSxcbiAgICAgIGNvbXBvbmVudHM6IHNwZWMuY29tcG9uZW50cyxcbiAgICAgIHRvZ2dsZUNsYXNzOiAnbWNlLWFjdGl2ZScsXG4gICAgICBkcm9wZG93bkJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgRGlzYWJsaW5nQ29uZmlncy5idXR0b24oc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVycy5pc0Rpc2FibGVkKSxcbiAgICAgICAgcmVjZWl2aW5nQ29uZmlnKCksXG4gICAgICAgIFVuc2VsZWN0aW5nLmNvbmZpZyh7fSksXG4gICAgICAgIFRhYnN0b3BwaW5nLmNvbmZpZyh7fSlcbiAgICAgIF0pLFxuICAgICAgbGF5b3V0czogc3BlYy5sYXlvdXRzLFxuICAgICAgc2FuZGJveENsYXNzZXM6IFsndG94LWRpYWxvZ19fcG9wdXBzJ10sXG4gICAgICBsYXp5U2luazogc2hhcmVkQmFja3N0YWdlLmdldFNpbmssXG4gICAgICBmZXRjaDogY29tcCA9PiBGdXR1cmUubnUoY2FsbGJhY2sgPT4gc3BlYy5mZXRjaChjYWxsYmFjaykpLm1hcChpdGVtcyA9PiBPcHRpb25hbC5mcm9tKGNyZWF0ZVRpZXJlZERhdGFGcm9tKGRlZXBNZXJnZShjcmVhdGVQYXJ0aWFsQ2hvaWNlTWVudShnZW5lcmF0ZSQ2KCdtZW51LXZhbHVlJyksIGl0ZW1zLCB2YWx1ZSA9PiB7XG4gICAgICAgIHNwZWMub25JdGVtQWN0aW9uKGNvbXAsIHZhbHVlKTtcbiAgICAgIH0sIHNwZWMuY29sdW1ucywgc3BlYy5wcmVzZXRzLCBJdGVtUmVzcG9uc2UkMS5DTE9TRV9PTl9FWEVDVVRFLCBuZXZlciwgc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVycyksIHsgbW92ZW1lbnQ6IGRlcml2ZU1lbnVNb3ZlbWVudChzcGVjLmNvbHVtbnMsIHNwZWMucHJlc2V0cykgfSkpKSksXG4gICAgICBwYXJ0czogeyBtZW51OiBwYXJ0KGZhbHNlLCAxLCBzcGVjLnByZXNldHMpIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbG9ySW5wdXRDaGFuZ2VFdmVudCA9IGdlbmVyYXRlJDYoJ2NvbG9yLWlucHV0LWNoYW5nZScpO1xuICAgIGNvbnN0IGNvbG9yU3dhdGNoQ2hhbmdlRXZlbnQgPSBnZW5lcmF0ZSQ2KCdjb2xvci1zd2F0Y2gtY2hhbmdlJyk7XG4gICAgY29uc3QgY29sb3JQaWNrZXJDYW5jZWxFdmVudCA9IGdlbmVyYXRlJDYoJ2NvbG9yLXBpY2tlci1jYW5jZWwnKTtcbiAgICBjb25zdCByZW5kZXJDb2xvcklucHV0ID0gKHNwZWMsIHNoYXJlZEJhY2tzdGFnZSwgY29sb3JJbnB1dEJhY2tzdGFnZSwgaW5pdGlhbERhdGEpID0+IHtcbiAgICAgIGNvbnN0IHBGaWVsZCA9IEZvcm1GaWVsZC5wYXJ0cy5maWVsZCh7XG4gICAgICAgIGZhY3Rvcnk6IElucHV0LFxuICAgICAgICBpbnB1dENsYXNzZXM6IFsndG94LXRleHRmaWVsZCddLFxuICAgICAgICBkYXRhOiBpbml0aWFsRGF0YSxcbiAgICAgICAgb25TZXRWYWx1ZTogYyA9PiBJbnZhbGlkYXRpbmcucnVuKGMpLmdldChub29wKSxcbiAgICAgICAgaW5wdXRCZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgRGlzYWJsaW5nLmNvbmZpZyh7IGRpc2FibGVkOiBzaGFyZWRCYWNrc3RhZ2UucHJvdmlkZXJzLmlzRGlzYWJsZWQgfSksXG4gICAgICAgICAgcmVjZWl2aW5nQ29uZmlnKCksXG4gICAgICAgICAgVGFic3RvcHBpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICBJbnZhbGlkYXRpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIGludmFsaWRDbGFzczogJ3RveC10ZXh0Ym94LWZpZWxkLWludmFsaWQnLFxuICAgICAgICAgICAgZ2V0Um9vdDogY29tcCA9PiBwYXJlbnRFbGVtZW50KGNvbXAuZWxlbWVudCksXG4gICAgICAgICAgICBub3RpZnk6IHtcbiAgICAgICAgICAgICAgb25WYWxpZDogY29tcCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsID0gUmVwcmVzZW50aW5nLmdldFZhbHVlKGNvbXApO1xuICAgICAgICAgICAgICAgIGVtaXRXaXRoKGNvbXAsIGNvbG9ySW5wdXRDaGFuZ2VFdmVudCwgeyBjb2xvcjogdmFsIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmFsaWRhdG9yOiB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlT25Mb2FkOiBmYWxzZSxcbiAgICAgICAgICAgICAgdmFsaWRhdGU6IGlucHV0ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dFZhbHVlID0gUmVwcmVzZW50aW5nLmdldFZhbHVlKGlucHV0KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRWYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBGdXR1cmUucHVyZShSZXN1bHQudmFsdWUodHJ1ZSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gU3VnYXJFbGVtZW50LmZyb21UYWcoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgICAgIHNldCQ4KHNwYW4sICdiYWNrZ3JvdW5kLWNvbG9yJywgaW5wdXRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBnZXRSYXcoc3BhbiwgJ2JhY2tncm91bmQtY29sb3InKS5mb2xkKCgpID0+IFJlc3VsdC5lcnJvcignYmxhaCcpLCBfID0+IFJlc3VsdC52YWx1ZShpbnB1dFZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gRnV0dXJlLnB1cmUocmVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdKSxcbiAgICAgICAgc2VsZWN0T25Gb2N1czogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcExhYmVsID0gc3BlYy5sYWJlbC5tYXAobGFiZWwgPT4gcmVuZGVyTGFiZWwkMyhsYWJlbCwgc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVycykpO1xuICAgICAgY29uc3QgZW1pdFN3YXRjaENoYW5nZSA9IChjb2xvckJpdCwgdmFsdWUpID0+IHtcbiAgICAgICAgZW1pdFdpdGgoY29sb3JCaXQsIGNvbG9yU3dhdGNoQ2hhbmdlRXZlbnQsIHsgdmFsdWUgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25JdGVtQWN0aW9uID0gKGNvbXAsIHZhbHVlKSA9PiB7XG4gICAgICAgIG1lbUNvbG9yQnV0dG9uLmdldE9wdChjb21wKS5lYWNoKGNvbG9yQml0ID0+IHtcbiAgICAgICAgICBpZiAodmFsdWUgPT09ICdjdXN0b20nKSB7XG4gICAgICAgICAgICBjb2xvcklucHV0QmFja3N0YWdlLmNvbG9yUGlja2VyKHZhbHVlT3B0ID0+IHtcbiAgICAgICAgICAgICAgdmFsdWVPcHQuZm9sZCgoKSA9PiBlbWl0KGNvbG9yQml0LCBjb2xvclBpY2tlckNhbmNlbEV2ZW50KSwgdmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIGVtaXRTd2F0Y2hDaGFuZ2UoY29sb3JCaXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBhZGRDb2xvcihzcGVjLnN0b3JhZ2VLZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCAnI2ZmZmZmZicpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdyZW1vdmUnKSB7XG4gICAgICAgICAgICBlbWl0U3dhdGNoQ2hhbmdlKGNvbG9yQml0LCAnJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVtaXRTd2F0Y2hDaGFuZ2UoY29sb3JCaXQsIHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG1lbUNvbG9yQnV0dG9uID0gcmVjb3JkKHJlbmRlclBhbmVsQnV0dG9uKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnc3BhbicsXG4gICAgICAgICAgYXR0cmlidXRlczogeyAnYXJpYS1sYWJlbCc6IHNoYXJlZEJhY2tzdGFnZS5wcm92aWRlcnMudHJhbnNsYXRlKCdDb2xvciBzd2F0Y2gnKSB9XG4gICAgICAgIH0sXG4gICAgICAgIGxheW91dHM6IHtcbiAgICAgICAgICBvblJ0bDogKCkgPT4gW1xuICAgICAgICAgICAgc291dGh3ZXN0JDIsXG4gICAgICAgICAgICBzb3V0aGVhc3QkMixcbiAgICAgICAgICAgIHNvdXRoJDJcbiAgICAgICAgICBdLFxuICAgICAgICAgIG9uTHRyOiAoKSA9PiBbXG4gICAgICAgICAgICBzb3V0aGVhc3QkMixcbiAgICAgICAgICAgIHNvdXRod2VzdCQyLFxuICAgICAgICAgICAgc291dGgkMlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW10sXG4gICAgICAgIGZldGNoOiBnZXRGZXRjaCQxKGNvbG9ySW5wdXRCYWNrc3RhZ2UuZ2V0Q29sb3JzKHNwZWMuc3RvcmFnZUtleSksIHNwZWMuc3RvcmFnZUtleSwgY29sb3JJbnB1dEJhY2tzdGFnZS5oYXNDdXN0b21Db2xvcnMoKSksXG4gICAgICAgIGNvbHVtbnM6IGNvbG9ySW5wdXRCYWNrc3RhZ2UuZ2V0Q29sb3JDb2xzKHNwZWMuc3RvcmFnZUtleSksXG4gICAgICAgIHByZXNldHM6ICdjb2xvcicsXG4gICAgICAgIG9uSXRlbUFjdGlvblxuICAgICAgfSwgc2hhcmVkQmFja3N0YWdlKSk7XG4gICAgICByZXR1cm4gRm9ybUZpZWxkLnNrZXRjaCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtZm9ybV9fZ3JvdXAnXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBwTGFiZWwudG9BcnJheSgpLmNvbmNhdChbe1xuICAgICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LWNvbG9yLWlucHV0J11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgICAgIHBGaWVsZCxcbiAgICAgICAgICAgICAgbWVtQ29sb3JCdXR0b24uYXNTcGVjKClcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XSksXG4gICAgICAgIGZpZWxkQmVoYXZpb3VyczogZGVyaXZlJDEoW2NvbmZpZygnZm9ybS1maWVsZC1ldmVudHMnLCBbXG4gICAgICAgICAgICBydW4kMShjb2xvcklucHV0Q2hhbmdlRXZlbnQsIChjb21wLCBzZSkgPT4ge1xuICAgICAgICAgICAgICBtZW1Db2xvckJ1dHRvbi5nZXRPcHQoY29tcCkuZWFjaChjb2xvckJ1dHRvbiA9PiB7XG4gICAgICAgICAgICAgICAgc2V0JDgoY29sb3JCdXR0b24uZWxlbWVudCwgJ2JhY2tncm91bmQtY29sb3InLCBzZS5ldmVudC5jb2xvcik7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBlbWl0V2l0aChjb21wLCBmb3JtQ2hhbmdlRXZlbnQsIHsgbmFtZTogc3BlYy5uYW1lIH0pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBydW4kMShjb2xvclN3YXRjaENoYW5nZUV2ZW50LCAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgICAgICAgRm9ybUZpZWxkLmdldEZpZWxkKGNvbXApLmVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIFJlcHJlc2VudGluZy5zZXRWYWx1ZShmaWVsZCwgc2UuZXZlbnQudmFsdWUpO1xuICAgICAgICAgICAgICAgIENvbXBvc2luZy5nZXRDdXJyZW50KGNvbXApLmVhY2goRm9jdXNpbmcuZm9jdXMpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcnVuJDEoY29sb3JQaWNrZXJDYW5jZWxFdmVudCwgKGNvbXAsIF9zZSkgPT4ge1xuICAgICAgICAgICAgICBGb3JtRmllbGQuZ2V0RmllbGQoY29tcCkuZWFjaChfZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIENvbXBvc2luZy5nZXRDdXJyZW50KGNvbXApLmVhY2goRm9jdXNpbmcuZm9jdXMpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSldKVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsUGFydCA9IG9wdGlvbmFsKHtcbiAgICAgIHNjaGVtYTogW3JlcXVpcmVkJDEoJ2RvbScpXSxcbiAgICAgIG5hbWU6ICdsYWJlbCdcbiAgICB9KTtcbiAgICBjb25zdCBlZGdlUGFydCA9IG5hbWUgPT4gb3B0aW9uYWwoe1xuICAgICAgbmFtZTogJycgKyBuYW1lICsgJy1lZGdlJyxcbiAgICAgIG92ZXJyaWRlczogZGV0YWlsID0+IHtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gZGV0YWlsLm1vZGVsLm1hbmFnZXIuZWRnZUFjdGlvbnNbbmFtZV07XG4gICAgICAgIHJldHVybiBhY3Rpb24uZm9sZCgoKSA9PiAoe30pLCBhID0+ICh7XG4gICAgICAgICAgZXZlbnRzOiBkZXJpdmUkMihbXG4gICAgICAgICAgICBydW5BY3Rpb25FeHRyYSh0b3VjaHN0YXJ0KCksIChjb21wLCBzZSwgZCkgPT4gYShjb21wLCBkKSwgW2RldGFpbF0pLFxuICAgICAgICAgICAgcnVuQWN0aW9uRXh0cmEobW91c2Vkb3duKCksIChjb21wLCBzZSwgZCkgPT4gYShjb21wLCBkKSwgW2RldGFpbF0pLFxuICAgICAgICAgICAgcnVuQWN0aW9uRXh0cmEobW91c2Vtb3ZlKCksIChjb21wLCBzZSwgZGV0KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChkZXQubW91c2VJc0Rvd24uZ2V0KCkpIHtcbiAgICAgICAgICAgICAgICBhKGNvbXAsIGRldCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIFtkZXRhaWxdKVxuICAgICAgICAgIF0pXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB0bEVkZ2VQYXJ0ID0gZWRnZVBhcnQoJ3RvcC1sZWZ0Jyk7XG4gICAgY29uc3QgdGVkZ2VQYXJ0ID0gZWRnZVBhcnQoJ3RvcCcpO1xuICAgIGNvbnN0IHRyRWRnZVBhcnQgPSBlZGdlUGFydCgndG9wLXJpZ2h0Jyk7XG4gICAgY29uc3QgcmVkZ2VQYXJ0ID0gZWRnZVBhcnQoJ3JpZ2h0Jyk7XG4gICAgY29uc3QgYnJFZGdlUGFydCA9IGVkZ2VQYXJ0KCdib3R0b20tcmlnaHQnKTtcbiAgICBjb25zdCBiZWRnZVBhcnQgPSBlZGdlUGFydCgnYm90dG9tJyk7XG4gICAgY29uc3QgYmxFZGdlUGFydCA9IGVkZ2VQYXJ0KCdib3R0b20tbGVmdCcpO1xuICAgIGNvbnN0IGxlZGdlUGFydCA9IGVkZ2VQYXJ0KCdsZWZ0Jyk7XG4gICAgY29uc3QgdGh1bWJQYXJ0ID0gcmVxdWlyZWQoe1xuICAgICAgbmFtZTogJ3RodW1iJyxcbiAgICAgIGRlZmF1bHRzOiBjb25zdGFudCQxKHsgZG9tOiB7IHN0eWxlczogeyBwb3NpdGlvbjogJ2Fic29sdXRlJyB9IH0gfSksXG4gICAgICBvdmVycmlkZXM6IGRldGFpbCA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZXZlbnRzOiBkZXJpdmUkMihbXG4gICAgICAgICAgICByZWRpcmVjdFRvUGFydCh0b3VjaHN0YXJ0KCksIGRldGFpbCwgJ3NwZWN0cnVtJyksXG4gICAgICAgICAgICByZWRpcmVjdFRvUGFydCh0b3VjaG1vdmUoKSwgZGV0YWlsLCAnc3BlY3RydW0nKSxcbiAgICAgICAgICAgIHJlZGlyZWN0VG9QYXJ0KHRvdWNoZW5kKCksIGRldGFpbCwgJ3NwZWN0cnVtJyksXG4gICAgICAgICAgICByZWRpcmVjdFRvUGFydChtb3VzZWRvd24oKSwgZGV0YWlsLCAnc3BlY3RydW0nKSxcbiAgICAgICAgICAgIHJlZGlyZWN0VG9QYXJ0KG1vdXNlbW92ZSgpLCBkZXRhaWwsICdzcGVjdHJ1bScpLFxuICAgICAgICAgICAgcmVkaXJlY3RUb1BhcnQobW91c2V1cCgpLCBkZXRhaWwsICdzcGVjdHJ1bScpXG4gICAgICAgICAgXSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzcGVjdHJ1bVBhcnQgPSByZXF1aXJlZCh7XG4gICAgICBzY2hlbWE6IFtjdXN0b21GaWVsZCgnbW91c2VJc0Rvd24nLCAoKSA9PiBDZWxsKGZhbHNlKSldLFxuICAgICAgbmFtZTogJ3NwZWN0cnVtJyxcbiAgICAgIG92ZXJyaWRlczogZGV0YWlsID0+IHtcbiAgICAgICAgY29uc3QgbW9kZWxEZXRhaWwgPSBkZXRhaWwubW9kZWw7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gbW9kZWxEZXRhaWwubWFuYWdlcjtcbiAgICAgICAgY29uc3Qgc2V0VmFsdWVGcm9tID0gKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpID0+IG1vZGVsLmdldFZhbHVlRnJvbUV2ZW50KHNpbXVsYXRlZEV2ZW50KS5tYXAodmFsdWUgPT4gbW9kZWwuc2V0VmFsdWVGcm9tKGNvbXBvbmVudCwgZGV0YWlsLCB2YWx1ZSkpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgICAgICBtb2RlOiAnc3BlY2lhbCcsXG4gICAgICAgICAgICAgIG9uTGVmdDogc3BlY3RydW0gPT4gbW9kZWwub25MZWZ0KHNwZWN0cnVtLCBkZXRhaWwpLFxuICAgICAgICAgICAgICBvblJpZ2h0OiBzcGVjdHJ1bSA9PiBtb2RlbC5vblJpZ2h0KHNwZWN0cnVtLCBkZXRhaWwpLFxuICAgICAgICAgICAgICBvblVwOiBzcGVjdHJ1bSA9PiBtb2RlbC5vblVwKHNwZWN0cnVtLCBkZXRhaWwpLFxuICAgICAgICAgICAgICBvbkRvd246IHNwZWN0cnVtID0+IG1vZGVsLm9uRG93bihzcGVjdHJ1bSwgZGV0YWlsKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBGb2N1c2luZy5jb25maWcoe30pXG4gICAgICAgICAgXSksXG4gICAgICAgICAgZXZlbnRzOiBkZXJpdmUkMihbXG4gICAgICAgICAgICBydW4kMSh0b3VjaHN0YXJ0KCksIHNldFZhbHVlRnJvbSksXG4gICAgICAgICAgICBydW4kMSh0b3VjaG1vdmUoKSwgc2V0VmFsdWVGcm9tKSxcbiAgICAgICAgICAgIHJ1biQxKG1vdXNlZG93bigpLCBzZXRWYWx1ZUZyb20pLFxuICAgICAgICAgICAgcnVuJDEobW91c2Vtb3ZlKCksIChzcGVjdHJ1bSwgc2UpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGRldGFpbC5tb3VzZUlzRG93bi5nZXQoKSkge1xuICAgICAgICAgICAgICAgIHNldFZhbHVlRnJvbShzcGVjdHJ1bSwgc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgdmFyIFNsaWRlclBhcnRzID0gW1xuICAgICAgbGFiZWxQYXJ0LFxuICAgICAgbGVkZ2VQYXJ0LFxuICAgICAgcmVkZ2VQYXJ0LFxuICAgICAgdGVkZ2VQYXJ0LFxuICAgICAgYmVkZ2VQYXJ0LFxuICAgICAgdGxFZGdlUGFydCxcbiAgICAgIHRyRWRnZVBhcnQsXG4gICAgICBibEVkZ2VQYXJ0LFxuICAgICAgYnJFZGdlUGFydCxcbiAgICAgIHRodW1iUGFydCxcbiAgICAgIHNwZWN0cnVtUGFydFxuICAgIF07XG5cbiAgICBjb25zdCBfc2xpZGVyQ2hhbmdlRXZlbnQgPSAnc2xpZGVyLmNoYW5nZS52YWx1ZSc7XG4gICAgY29uc3Qgc2xpZGVyQ2hhbmdlRXZlbnQgPSBjb25zdGFudCQxKF9zbGlkZXJDaGFuZ2VFdmVudCk7XG4gICAgY29uc3QgaXNUb3VjaEV2ZW50JDIgPSBldnQgPT4gZXZ0LnR5cGUuaW5kZXhPZigndG91Y2gnKSAhPT0gLTE7XG4gICAgY29uc3QgZ2V0RXZlbnRTb3VyY2UgPSBzaW11bGF0ZWRFdmVudCA9PiB7XG4gICAgICBjb25zdCBldnQgPSBzaW11bGF0ZWRFdmVudC5ldmVudC5yYXc7XG4gICAgICBpZiAoaXNUb3VjaEV2ZW50JDIoZXZ0KSkge1xuICAgICAgICBjb25zdCB0b3VjaEV2ZW50ID0gZXZ0O1xuICAgICAgICByZXR1cm4gdG91Y2hFdmVudC50b3VjaGVzICE9PSB1bmRlZmluZWQgJiYgdG91Y2hFdmVudC50b3VjaGVzLmxlbmd0aCA9PT0gMSA/IE9wdGlvbmFsLnNvbWUodG91Y2hFdmVudC50b3VjaGVzWzBdKS5tYXAodCA9PiBTdWdhclBvc2l0aW9uKHQuY2xpZW50WCwgdC5jbGllbnRZKSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtb3VzZUV2ZW50ID0gZXZ0O1xuICAgICAgICByZXR1cm4gbW91c2VFdmVudC5jbGllbnRYICE9PSB1bmRlZmluZWQgPyBPcHRpb25hbC5zb21lKG1vdXNlRXZlbnQpLm1hcChtZSA9PiBTdWdhclBvc2l0aW9uKG1lLmNsaWVudFgsIG1lLmNsaWVudFkpKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdCA9ICd0b3AnLCByID0gJ3JpZ2h0JywgYiA9ICdib3R0b20nLCBsID0gJ2xlZnQnO1xuICAgIGNvbnN0IG1pblggPSBkZXRhaWwgPT4gZGV0YWlsLm1vZGVsLm1pblg7XG4gICAgY29uc3QgbWluWSA9IGRldGFpbCA9PiBkZXRhaWwubW9kZWwubWluWTtcbiAgICBjb25zdCBtaW4xWCA9IGRldGFpbCA9PiBkZXRhaWwubW9kZWwubWluWCAtIDE7XG4gICAgY29uc3QgbWluMVkgPSBkZXRhaWwgPT4gZGV0YWlsLm1vZGVsLm1pblkgLSAxO1xuICAgIGNvbnN0IG1heFggPSBkZXRhaWwgPT4gZGV0YWlsLm1vZGVsLm1heFg7XG4gICAgY29uc3QgbWF4WSA9IGRldGFpbCA9PiBkZXRhaWwubW9kZWwubWF4WTtcbiAgICBjb25zdCBtYXgxWCA9IGRldGFpbCA9PiBkZXRhaWwubW9kZWwubWF4WCArIDE7XG4gICAgY29uc3QgbWF4MVkgPSBkZXRhaWwgPT4gZGV0YWlsLm1vZGVsLm1heFkgKyAxO1xuICAgIGNvbnN0IHJhbmdlID0gKGRldGFpbCwgbWF4LCBtaW4pID0+IG1heChkZXRhaWwpIC0gbWluKGRldGFpbCk7XG4gICAgY29uc3QgeFJhbmdlID0gZGV0YWlsID0+IHJhbmdlKGRldGFpbCwgbWF4WCwgbWluWCk7XG4gICAgY29uc3QgeVJhbmdlID0gZGV0YWlsID0+IHJhbmdlKGRldGFpbCwgbWF4WSwgbWluWSk7XG4gICAgY29uc3QgaGFsZlggPSBkZXRhaWwgPT4geFJhbmdlKGRldGFpbCkgLyAyO1xuICAgIGNvbnN0IGhhbGZZID0gZGV0YWlsID0+IHlSYW5nZShkZXRhaWwpIC8gMjtcbiAgICBjb25zdCBzdGVwID0gZGV0YWlsID0+IGRldGFpbC5zdGVwU2l6ZTtcbiAgICBjb25zdCBzbmFwID0gZGV0YWlsID0+IGRldGFpbC5zbmFwVG9HcmlkO1xuICAgIGNvbnN0IHNuYXBTdGFydCA9IGRldGFpbCA9PiBkZXRhaWwuc25hcFN0YXJ0O1xuICAgIGNvbnN0IHJvdW5kZWQgPSBkZXRhaWwgPT4gZGV0YWlsLnJvdW5kZWQ7XG4gICAgY29uc3QgaGFzRWRnZSA9IChkZXRhaWwsIGVkZ2VOYW1lKSA9PiBkZXRhaWxbZWRnZU5hbWUgKyAnLWVkZ2UnXSAhPT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGhhc0xFZGdlID0gZGV0YWlsID0+IGhhc0VkZ2UoZGV0YWlsLCBsKTtcbiAgICBjb25zdCBoYXNSRWRnZSA9IGRldGFpbCA9PiBoYXNFZGdlKGRldGFpbCwgcik7XG4gICAgY29uc3QgaGFzVEVkZ2UgPSBkZXRhaWwgPT4gaGFzRWRnZShkZXRhaWwsIHQpO1xuICAgIGNvbnN0IGhhc0JFZGdlID0gZGV0YWlsID0+IGhhc0VkZ2UoZGV0YWlsLCBiKTtcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBkZXRhaWwgPT4gZGV0YWlsLm1vZGVsLnZhbHVlLmdldCgpO1xuXG4gICAgY29uc3QgeHlWYWx1ZSA9ICh4LCB5KSA9PiAoe1xuICAgICAgeCxcbiAgICAgIHlcbiAgICB9KTtcbiAgICBjb25zdCBmaXJlU2xpZGVyQ2hhbmdlJDMgPSAoY29tcG9uZW50LCB2YWx1ZSkgPT4ge1xuICAgICAgZW1pdFdpdGgoY29tcG9uZW50LCBzbGlkZXJDaGFuZ2VFdmVudCgpLCB7IHZhbHVlIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2V0VG9UTEVkZ2VYWSA9IChlZGdlLCBkZXRhaWwpID0+IHtcbiAgICAgIGZpcmVTbGlkZXJDaGFuZ2UkMyhlZGdlLCB4eVZhbHVlKG1pbjFYKGRldGFpbCksIG1pbjFZKGRldGFpbCkpKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldFRvVEVkZ2UgPSAoZWRnZSwgZGV0YWlsKSA9PiB7XG4gICAgICBmaXJlU2xpZGVyQ2hhbmdlJDMoZWRnZSwgbWluMVkoZGV0YWlsKSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRUb1RFZGdlWFkgPSAoZWRnZSwgZGV0YWlsKSA9PiB7XG4gICAgICBmaXJlU2xpZGVyQ2hhbmdlJDMoZWRnZSwgeHlWYWx1ZShoYWxmWChkZXRhaWwpLCBtaW4xWShkZXRhaWwpKSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRUb1RSRWRnZVhZID0gKGVkZ2UsIGRldGFpbCkgPT4ge1xuICAgICAgZmlyZVNsaWRlckNoYW5nZSQzKGVkZ2UsIHh5VmFsdWUobWF4MVgoZGV0YWlsKSwgbWluMVkoZGV0YWlsKSkpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0VG9SRWRnZSA9IChlZGdlLCBkZXRhaWwpID0+IHtcbiAgICAgIGZpcmVTbGlkZXJDaGFuZ2UkMyhlZGdlLCBtYXgxWChkZXRhaWwpKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldFRvUkVkZ2VYWSA9IChlZGdlLCBkZXRhaWwpID0+IHtcbiAgICAgIGZpcmVTbGlkZXJDaGFuZ2UkMyhlZGdlLCB4eVZhbHVlKG1heDFYKGRldGFpbCksIGhhbGZZKGRldGFpbCkpKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldFRvQlJFZGdlWFkgPSAoZWRnZSwgZGV0YWlsKSA9PiB7XG4gICAgICBmaXJlU2xpZGVyQ2hhbmdlJDMoZWRnZSwgeHlWYWx1ZShtYXgxWChkZXRhaWwpLCBtYXgxWShkZXRhaWwpKSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRUb0JFZGdlID0gKGVkZ2UsIGRldGFpbCkgPT4ge1xuICAgICAgZmlyZVNsaWRlckNoYW5nZSQzKGVkZ2UsIG1heDFZKGRldGFpbCkpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0VG9CRWRnZVhZID0gKGVkZ2UsIGRldGFpbCkgPT4ge1xuICAgICAgZmlyZVNsaWRlckNoYW5nZSQzKGVkZ2UsIHh5VmFsdWUoaGFsZlgoZGV0YWlsKSwgbWF4MVkoZGV0YWlsKSkpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0VG9CTEVkZ2VYWSA9IChlZGdlLCBkZXRhaWwpID0+IHtcbiAgICAgIGZpcmVTbGlkZXJDaGFuZ2UkMyhlZGdlLCB4eVZhbHVlKG1pbjFYKGRldGFpbCksIG1heDFZKGRldGFpbCkpKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldFRvTEVkZ2UgPSAoZWRnZSwgZGV0YWlsKSA9PiB7XG4gICAgICBmaXJlU2xpZGVyQ2hhbmdlJDMoZWRnZSwgbWluMVgoZGV0YWlsKSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRUb0xFZGdlWFkgPSAoZWRnZSwgZGV0YWlsKSA9PiB7XG4gICAgICBmaXJlU2xpZGVyQ2hhbmdlJDMoZWRnZSwgeHlWYWx1ZShtaW4xWChkZXRhaWwpLCBoYWxmWShkZXRhaWwpKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlZHVjZUJ5ID0gKHZhbHVlLCBtaW4sIG1heCwgc3RlcCkgPT4ge1xuICAgICAgaWYgKHZhbHVlIDwgbWluKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPiBtYXgpIHtcbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IG1pbikge1xuICAgICAgICByZXR1cm4gbWluIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChtaW4sIHZhbHVlIC0gc3RlcCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbmNyZWFzZUJ5ID0gKHZhbHVlLCBtaW4sIG1heCwgc3RlcCkgPT4ge1xuICAgICAgaWYgKHZhbHVlID4gbWF4KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPCBtaW4pIHtcbiAgICAgICAgcmV0dXJuIG1pbjtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IG1heCkge1xuICAgICAgICByZXR1cm4gbWF4ICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1pbihtYXgsIHZhbHVlICsgc3RlcCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjYXBWYWx1ZSA9ICh2YWx1ZSwgbWluLCBtYXgpID0+IE1hdGgubWF4KG1pbiwgTWF0aC5taW4obWF4LCB2YWx1ZSkpO1xuICAgIGNvbnN0IHNuYXBWYWx1ZU9mID0gKHZhbHVlLCBtaW4sIG1heCwgc3RlcCwgc25hcFN0YXJ0KSA9PiBzbmFwU3RhcnQuZm9sZCgoKSA9PiB7XG4gICAgICBjb25zdCBpbml0VmFsdWUgPSB2YWx1ZSAtIG1pbjtcbiAgICAgIGNvbnN0IGV4dHJhVmFsdWUgPSBNYXRoLnJvdW5kKGluaXRWYWx1ZSAvIHN0ZXApICogc3RlcDtcbiAgICAgIHJldHVybiBjYXBWYWx1ZShtaW4gKyBleHRyYVZhbHVlLCBtaW4gLSAxLCBtYXggKyAxKTtcbiAgICB9LCBzdGFydCA9PiB7XG4gICAgICBjb25zdCByZW1haW5kZXIgPSAodmFsdWUgLSBzdGFydCkgJSBzdGVwO1xuICAgICAgY29uc3QgYWRqdXN0bWVudCA9IE1hdGgucm91bmQocmVtYWluZGVyIC8gc3RlcCk7XG4gICAgICBjb25zdCByYXdTdGVwcyA9IE1hdGguZmxvb3IoKHZhbHVlIC0gc3RhcnQpIC8gc3RlcCk7XG4gICAgICBjb25zdCBtYXhTdGVwcyA9IE1hdGguZmxvb3IoKG1heCAtIHN0YXJ0KSAvIHN0ZXApO1xuICAgICAgY29uc3QgbnVtU3RlcHMgPSBNYXRoLm1pbihtYXhTdGVwcywgcmF3U3RlcHMgKyBhZGp1c3RtZW50KTtcbiAgICAgIGNvbnN0IHIgPSBzdGFydCArIG51bVN0ZXBzICogc3RlcDtcbiAgICAgIHJldHVybiBNYXRoLm1heChzdGFydCwgcik7XG4gICAgfSk7XG4gICAgY29uc3QgZmluZE9mZnNldE9mID0gKHZhbHVlLCBtaW4sIG1heCkgPT4gTWF0aC5taW4obWF4LCBNYXRoLm1heCh2YWx1ZSwgbWluKSkgLSBtaW47XG4gICAgY29uc3QgZmluZFZhbHVlT2YgPSBhcmdzID0+IHtcbiAgICAgIGNvbnN0IHttaW4sIG1heCwgcmFuZ2UsIHZhbHVlLCBzdGVwLCBzbmFwLCBzbmFwU3RhcnQsIHJvdW5kZWQsIGhhc01pbkVkZ2UsIGhhc01heEVkZ2UsIG1pbkJvdW5kLCBtYXhCb3VuZCwgc2NyZWVuUmFuZ2V9ID0gYXJncztcbiAgICAgIGNvbnN0IGNhcE1pbiA9IGhhc01pbkVkZ2UgPyBtaW4gLSAxIDogbWluO1xuICAgICAgY29uc3QgY2FwTWF4ID0gaGFzTWF4RWRnZSA/IG1heCArIDEgOiBtYXg7XG4gICAgICBpZiAodmFsdWUgPCBtaW5Cb3VuZCkge1xuICAgICAgICByZXR1cm4gY2FwTWluO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+IG1heEJvdW5kKSB7XG4gICAgICAgIHJldHVybiBjYXBNYXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBmaW5kT2Zmc2V0T2YodmFsdWUsIG1pbkJvdW5kLCBtYXhCb3VuZCk7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gY2FwVmFsdWUob2Zmc2V0IC8gc2NyZWVuUmFuZ2UgKiByYW5nZSArIG1pbiwgY2FwTWluLCBjYXBNYXgpO1xuICAgICAgICBpZiAoc25hcCAmJiBuZXdWYWx1ZSA+PSBtaW4gJiYgbmV3VmFsdWUgPD0gbWF4KSB7XG4gICAgICAgICAgcmV0dXJuIHNuYXBWYWx1ZU9mKG5ld1ZhbHVlLCBtaW4sIG1heCwgc3RlcCwgc25hcFN0YXJ0KTtcbiAgICAgICAgfSBlbHNlIGlmIChyb3VuZGVkKSB7XG4gICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZmluZE9mZnNldE9mVmFsdWUkMiA9IGFyZ3MgPT4ge1xuICAgICAgY29uc3Qge21pbiwgbWF4LCByYW5nZSwgdmFsdWUsIGhhc01pbkVkZ2UsIGhhc01heEVkZ2UsIG1heEJvdW5kLCBtYXhPZmZzZXQsIGNlbnRlck1pbkVkZ2UsIGNlbnRlck1heEVkZ2V9ID0gYXJncztcbiAgICAgIGlmICh2YWx1ZSA8IG1pbikge1xuICAgICAgICByZXR1cm4gaGFzTWluRWRnZSA/IDAgOiBjZW50ZXJNaW5FZGdlO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+IG1heCkge1xuICAgICAgICByZXR1cm4gaGFzTWF4RWRnZSA/IG1heEJvdW5kIDogY2VudGVyTWF4RWRnZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAodmFsdWUgLSBtaW4pIC8gcmFuZ2UgKiBtYXhPZmZzZXQ7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHRvcCA9ICd0b3AnLCByaWdodCA9ICdyaWdodCcsIGJvdHRvbSA9ICdib3R0b20nLCBsZWZ0ID0gJ2xlZnQnLCB3aWR0aCA9ICd3aWR0aCcsIGhlaWdodCA9ICdoZWlnaHQnO1xuICAgIGNvbnN0IGdldEJvdW5kcyA9IGNvbXBvbmVudCA9PiBjb21wb25lbnQuZWxlbWVudC5kb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgZ2V0Qm91bmRzUHJvcGVydHkgPSAoYm91bmRzLCBwcm9wZXJ0eSkgPT4gYm91bmRzW3Byb3BlcnR5XTtcbiAgICBjb25zdCBnZXRNaW5YQm91bmRzID0gY29tcG9uZW50ID0+IHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IGdldEJvdW5kcyhjb21wb25lbnQpO1xuICAgICAgcmV0dXJuIGdldEJvdW5kc1Byb3BlcnR5KGJvdW5kcywgbGVmdCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRNYXhYQm91bmRzID0gY29tcG9uZW50ID0+IHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IGdldEJvdW5kcyhjb21wb25lbnQpO1xuICAgICAgcmV0dXJuIGdldEJvdW5kc1Byb3BlcnR5KGJvdW5kcywgcmlnaHQpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0TWluWUJvdW5kcyA9IGNvbXBvbmVudCA9PiB7XG4gICAgICBjb25zdCBib3VuZHMgPSBnZXRCb3VuZHMoY29tcG9uZW50KTtcbiAgICAgIHJldHVybiBnZXRCb3VuZHNQcm9wZXJ0eShib3VuZHMsIHRvcCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRNYXhZQm91bmRzID0gY29tcG9uZW50ID0+IHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IGdldEJvdW5kcyhjb21wb25lbnQpO1xuICAgICAgcmV0dXJuIGdldEJvdW5kc1Byb3BlcnR5KGJvdW5kcywgYm90dG9tKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFhTY3JlZW5SYW5nZSA9IGNvbXBvbmVudCA9PiB7XG4gICAgICBjb25zdCBib3VuZHMgPSBnZXRCb3VuZHMoY29tcG9uZW50KTtcbiAgICAgIHJldHVybiBnZXRCb3VuZHNQcm9wZXJ0eShib3VuZHMsIHdpZHRoKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFlTY3JlZW5SYW5nZSA9IGNvbXBvbmVudCA9PiB7XG4gICAgICBjb25zdCBib3VuZHMgPSBnZXRCb3VuZHMoY29tcG9uZW50KTtcbiAgICAgIHJldHVybiBnZXRCb3VuZHNQcm9wZXJ0eShib3VuZHMsIGhlaWdodCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRDZW50ZXJPZmZzZXRPZiA9IChjb21wb25lbnRNaW5FZGdlLCBjb21wb25lbnRNYXhFZGdlLCBzcGVjdHJ1bU1pbkVkZ2UpID0+IChjb21wb25lbnRNaW5FZGdlICsgY29tcG9uZW50TWF4RWRnZSkgLyAyIC0gc3BlY3RydW1NaW5FZGdlO1xuICAgIGNvbnN0IGdldFhDZW50ZXJPZmZTZXRPZiA9IChjb21wb25lbnQsIHNwZWN0cnVtKSA9PiB7XG4gICAgICBjb25zdCBjb21wb25lbnRCb3VuZHMgPSBnZXRCb3VuZHMoY29tcG9uZW50KTtcbiAgICAgIGNvbnN0IHNwZWN0cnVtQm91bmRzID0gZ2V0Qm91bmRzKHNwZWN0cnVtKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudE1pbkVkZ2UgPSBnZXRCb3VuZHNQcm9wZXJ0eShjb21wb25lbnRCb3VuZHMsIGxlZnQpO1xuICAgICAgY29uc3QgY29tcG9uZW50TWF4RWRnZSA9IGdldEJvdW5kc1Byb3BlcnR5KGNvbXBvbmVudEJvdW5kcywgcmlnaHQpO1xuICAgICAgY29uc3Qgc3BlY3RydW1NaW5FZGdlID0gZ2V0Qm91bmRzUHJvcGVydHkoc3BlY3RydW1Cb3VuZHMsIGxlZnQpO1xuICAgICAgcmV0dXJuIGdldENlbnRlck9mZnNldE9mKGNvbXBvbmVudE1pbkVkZ2UsIGNvbXBvbmVudE1heEVkZ2UsIHNwZWN0cnVtTWluRWRnZSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRZQ2VudGVyT2ZmU2V0T2YgPSAoY29tcG9uZW50LCBzcGVjdHJ1bSkgPT4ge1xuICAgICAgY29uc3QgY29tcG9uZW50Qm91bmRzID0gZ2V0Qm91bmRzKGNvbXBvbmVudCk7XG4gICAgICBjb25zdCBzcGVjdHJ1bUJvdW5kcyA9IGdldEJvdW5kcyhzcGVjdHJ1bSk7XG4gICAgICBjb25zdCBjb21wb25lbnRNaW5FZGdlID0gZ2V0Qm91bmRzUHJvcGVydHkoY29tcG9uZW50Qm91bmRzLCB0b3ApO1xuICAgICAgY29uc3QgY29tcG9uZW50TWF4RWRnZSA9IGdldEJvdW5kc1Byb3BlcnR5KGNvbXBvbmVudEJvdW5kcywgYm90dG9tKTtcbiAgICAgIGNvbnN0IHNwZWN0cnVtTWluRWRnZSA9IGdldEJvdW5kc1Byb3BlcnR5KHNwZWN0cnVtQm91bmRzLCB0b3ApO1xuICAgICAgcmV0dXJuIGdldENlbnRlck9mZnNldE9mKGNvbXBvbmVudE1pbkVkZ2UsIGNvbXBvbmVudE1heEVkZ2UsIHNwZWN0cnVtTWluRWRnZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZpcmVTbGlkZXJDaGFuZ2UkMiA9IChzcGVjdHJ1bSwgdmFsdWUpID0+IHtcbiAgICAgIGVtaXRXaXRoKHNwZWN0cnVtLCBzbGlkZXJDaGFuZ2VFdmVudCgpLCB7IHZhbHVlIH0pO1xuICAgIH07XG4gICAgY29uc3QgZmluZFZhbHVlT2ZPZmZzZXQkMSA9IChzcGVjdHJ1bSwgZGV0YWlsLCBsZWZ0KSA9PiB7XG4gICAgICBjb25zdCBhcmdzID0ge1xuICAgICAgICBtaW46IG1pblgoZGV0YWlsKSxcbiAgICAgICAgbWF4OiBtYXhYKGRldGFpbCksXG4gICAgICAgIHJhbmdlOiB4UmFuZ2UoZGV0YWlsKSxcbiAgICAgICAgdmFsdWU6IGxlZnQsXG4gICAgICAgIHN0ZXA6IHN0ZXAoZGV0YWlsKSxcbiAgICAgICAgc25hcDogc25hcChkZXRhaWwpLFxuICAgICAgICBzbmFwU3RhcnQ6IHNuYXBTdGFydChkZXRhaWwpLFxuICAgICAgICByb3VuZGVkOiByb3VuZGVkKGRldGFpbCksXG4gICAgICAgIGhhc01pbkVkZ2U6IGhhc0xFZGdlKGRldGFpbCksXG4gICAgICAgIGhhc01heEVkZ2U6IGhhc1JFZGdlKGRldGFpbCksXG4gICAgICAgIG1pbkJvdW5kOiBnZXRNaW5YQm91bmRzKHNwZWN0cnVtKSxcbiAgICAgICAgbWF4Qm91bmQ6IGdldE1heFhCb3VuZHMoc3BlY3RydW0pLFxuICAgICAgICBzY3JlZW5SYW5nZTogZ2V0WFNjcmVlblJhbmdlKHNwZWN0cnVtKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBmaW5kVmFsdWVPZihhcmdzKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldFZhbHVlRnJvbSQyID0gKHNwZWN0cnVtLCBkZXRhaWwsIHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCB4VmFsdWUgPSBmaW5kVmFsdWVPZk9mZnNldCQxKHNwZWN0cnVtLCBkZXRhaWwsIHZhbHVlKTtcbiAgICAgIGNvbnN0IHNsaWRlclZhbCA9IHhWYWx1ZTtcbiAgICAgIGZpcmVTbGlkZXJDaGFuZ2UkMihzcGVjdHJ1bSwgc2xpZGVyVmFsKTtcbiAgICAgIHJldHVybiB4VmFsdWU7XG4gICAgfTtcbiAgICBjb25zdCBzZXRUb01pbiQyID0gKHNwZWN0cnVtLCBkZXRhaWwpID0+IHtcbiAgICAgIGNvbnN0IG1pbiA9IG1pblgoZGV0YWlsKTtcbiAgICAgIGZpcmVTbGlkZXJDaGFuZ2UkMihzcGVjdHJ1bSwgbWluKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldFRvTWF4JDIgPSAoc3BlY3RydW0sIGRldGFpbCkgPT4ge1xuICAgICAgY29uc3QgbWF4ID0gbWF4WChkZXRhaWwpO1xuICAgICAgZmlyZVNsaWRlckNoYW5nZSQyKHNwZWN0cnVtLCBtYXgpO1xuICAgIH07XG4gICAgY29uc3QgbW92ZUJ5JDIgPSAoZGlyZWN0aW9uLCBzcGVjdHJ1bSwgZGV0YWlsKSA9PiB7XG4gICAgICBjb25zdCBmID0gZGlyZWN0aW9uID4gMCA/IGluY3JlYXNlQnkgOiByZWR1Y2VCeTtcbiAgICAgIGNvbnN0IHhWYWx1ZSA9IGYoY3VycmVudFZhbHVlKGRldGFpbCksIG1pblgoZGV0YWlsKSwgbWF4WChkZXRhaWwpLCBzdGVwKGRldGFpbCkpO1xuICAgICAgZmlyZVNsaWRlckNoYW5nZSQyKHNwZWN0cnVtLCB4VmFsdWUpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoeFZhbHVlKTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZU1vdmVtZW50JDIgPSBkaXJlY3Rpb24gPT4gKHNwZWN0cnVtLCBkZXRhaWwpID0+IG1vdmVCeSQyKGRpcmVjdGlvbiwgc3BlY3RydW0sIGRldGFpbCkubWFwKGFsd2F5cyk7XG4gICAgY29uc3QgZ2V0VmFsdWVGcm9tRXZlbnQkMiA9IHNpbXVsYXRlZEV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHBvcyA9IGdldEV2ZW50U291cmNlKHNpbXVsYXRlZEV2ZW50KTtcbiAgICAgIHJldHVybiBwb3MubWFwKHAgPT4gcC5sZWZ0KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRPZmZzZXRPZlZhbHVlJDEgPSAoc3BlY3RydW0sIGRldGFpbCwgdmFsdWUsIG1pbkVkZ2UsIG1heEVkZ2UpID0+IHtcbiAgICAgIGNvbnN0IG1pbk9mZnNldCA9IDA7XG4gICAgICBjb25zdCBtYXhPZmZzZXQgPSBnZXRYU2NyZWVuUmFuZ2Uoc3BlY3RydW0pO1xuICAgICAgY29uc3QgY2VudGVyTWluRWRnZSA9IG1pbkVkZ2UuYmluZChlZGdlID0+IE9wdGlvbmFsLnNvbWUoZ2V0WENlbnRlck9mZlNldE9mKGVkZ2UsIHNwZWN0cnVtKSkpLmdldE9yKG1pbk9mZnNldCk7XG4gICAgICBjb25zdCBjZW50ZXJNYXhFZGdlID0gbWF4RWRnZS5iaW5kKGVkZ2UgPT4gT3B0aW9uYWwuc29tZShnZXRYQ2VudGVyT2ZmU2V0T2YoZWRnZSwgc3BlY3RydW0pKSkuZ2V0T3IobWF4T2Zmc2V0KTtcbiAgICAgIGNvbnN0IGFyZ3MgPSB7XG4gICAgICAgIG1pbjogbWluWChkZXRhaWwpLFxuICAgICAgICBtYXg6IG1heFgoZGV0YWlsKSxcbiAgICAgICAgcmFuZ2U6IHhSYW5nZShkZXRhaWwpLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgaGFzTWluRWRnZTogaGFzTEVkZ2UoZGV0YWlsKSxcbiAgICAgICAgaGFzTWF4RWRnZTogaGFzUkVkZ2UoZGV0YWlsKSxcbiAgICAgICAgbWluQm91bmQ6IGdldE1pblhCb3VuZHMoc3BlY3RydW0pLFxuICAgICAgICBtaW5PZmZzZXQsXG4gICAgICAgIG1heEJvdW5kOiBnZXRNYXhYQm91bmRzKHNwZWN0cnVtKSxcbiAgICAgICAgbWF4T2Zmc2V0LFxuICAgICAgICBjZW50ZXJNaW5FZGdlLFxuICAgICAgICBjZW50ZXJNYXhFZGdlXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGZpbmRPZmZzZXRPZlZhbHVlJDIoYXJncyk7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kUG9zaXRpb25PZlZhbHVlJDEgPSAoc2xpZGVyLCBzcGVjdHJ1bSwgdmFsdWUsIG1pbkVkZ2UsIG1heEVkZ2UsIGRldGFpbCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZmluZE9mZnNldE9mVmFsdWUkMShzcGVjdHJ1bSwgZGV0YWlsLCB2YWx1ZSwgbWluRWRnZSwgbWF4RWRnZSk7XG4gICAgICByZXR1cm4gZ2V0TWluWEJvdW5kcyhzcGVjdHJ1bSkgLSBnZXRNaW5YQm91bmRzKHNsaWRlcikgKyBvZmZzZXQ7XG4gICAgfTtcbiAgICBjb25zdCBzZXRQb3NpdGlvbkZyb21WYWx1ZSQyID0gKHNsaWRlciwgdGh1bWIsIGRldGFpbCwgZWRnZXMpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY3VycmVudFZhbHVlKGRldGFpbCk7XG4gICAgICBjb25zdCBwb3MgPSBmaW5kUG9zaXRpb25PZlZhbHVlJDEoc2xpZGVyLCBlZGdlcy5nZXRTcGVjdHJ1bShzbGlkZXIpLCB2YWx1ZSwgZWRnZXMuZ2V0TGVmdEVkZ2Uoc2xpZGVyKSwgZWRnZXMuZ2V0UmlnaHRFZGdlKHNsaWRlciksIGRldGFpbCk7XG4gICAgICBjb25zdCB0aHVtYlJhZGl1cyA9IGdldCRjKHRodW1iLmVsZW1lbnQpIC8gMjtcbiAgICAgIHNldCQ4KHRodW1iLmVsZW1lbnQsICdsZWZ0JywgcG9zIC0gdGh1bWJSYWRpdXMgKyAncHgnKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uTGVmdCQyID0gaGFuZGxlTW92ZW1lbnQkMigtMSk7XG4gICAgY29uc3Qgb25SaWdodCQyID0gaGFuZGxlTW92ZW1lbnQkMigxKTtcbiAgICBjb25zdCBvblVwJDIgPSBPcHRpb25hbC5ub25lO1xuICAgIGNvbnN0IG9uRG93biQyID0gT3B0aW9uYWwubm9uZTtcbiAgICBjb25zdCBlZGdlQWN0aW9ucyQyID0ge1xuICAgICAgJ3RvcC1sZWZ0JzogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgJ3RvcCc6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICd0b3AtcmlnaHQnOiBPcHRpb25hbC5ub25lKCksXG4gICAgICAncmlnaHQnOiBPcHRpb25hbC5zb21lKHNldFRvUkVkZ2UpLFxuICAgICAgJ2JvdHRvbS1yaWdodCc6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICdib3R0b20nOiBPcHRpb25hbC5ub25lKCksXG4gICAgICAnYm90dG9tLWxlZnQnOiBPcHRpb25hbC5ub25lKCksXG4gICAgICAnbGVmdCc6IE9wdGlvbmFsLnNvbWUoc2V0VG9MRWRnZSlcbiAgICB9O1xuXG4gICAgdmFyIEhvcml6b250YWxNb2RlbCA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBzZXRWYWx1ZUZyb206IHNldFZhbHVlRnJvbSQyLFxuICAgICAgICBzZXRUb01pbjogc2V0VG9NaW4kMixcbiAgICAgICAgc2V0VG9NYXg6IHNldFRvTWF4JDIsXG4gICAgICAgIGZpbmRWYWx1ZU9mT2Zmc2V0OiBmaW5kVmFsdWVPZk9mZnNldCQxLFxuICAgICAgICBnZXRWYWx1ZUZyb21FdmVudDogZ2V0VmFsdWVGcm9tRXZlbnQkMixcbiAgICAgICAgZmluZFBvc2l0aW9uT2ZWYWx1ZTogZmluZFBvc2l0aW9uT2ZWYWx1ZSQxLFxuICAgICAgICBzZXRQb3NpdGlvbkZyb21WYWx1ZTogc2V0UG9zaXRpb25Gcm9tVmFsdWUkMixcbiAgICAgICAgb25MZWZ0OiBvbkxlZnQkMixcbiAgICAgICAgb25SaWdodDogb25SaWdodCQyLFxuICAgICAgICBvblVwOiBvblVwJDIsXG4gICAgICAgIG9uRG93bjogb25Eb3duJDIsXG4gICAgICAgIGVkZ2VBY3Rpb25zOiBlZGdlQWN0aW9ucyQyXG4gICAgfSk7XG5cbiAgICBjb25zdCBmaXJlU2xpZGVyQ2hhbmdlJDEgPSAoc3BlY3RydW0sIHZhbHVlKSA9PiB7XG4gICAgICBlbWl0V2l0aChzcGVjdHJ1bSwgc2xpZGVyQ2hhbmdlRXZlbnQoKSwgeyB2YWx1ZSB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRWYWx1ZU9mT2Zmc2V0ID0gKHNwZWN0cnVtLCBkZXRhaWwsIHRvcCkgPT4ge1xuICAgICAgY29uc3QgYXJncyA9IHtcbiAgICAgICAgbWluOiBtaW5ZKGRldGFpbCksXG4gICAgICAgIG1heDogbWF4WShkZXRhaWwpLFxuICAgICAgICByYW5nZTogeVJhbmdlKGRldGFpbCksXG4gICAgICAgIHZhbHVlOiB0b3AsXG4gICAgICAgIHN0ZXA6IHN0ZXAoZGV0YWlsKSxcbiAgICAgICAgc25hcDogc25hcChkZXRhaWwpLFxuICAgICAgICBzbmFwU3RhcnQ6IHNuYXBTdGFydChkZXRhaWwpLFxuICAgICAgICByb3VuZGVkOiByb3VuZGVkKGRldGFpbCksXG4gICAgICAgIGhhc01pbkVkZ2U6IGhhc1RFZGdlKGRldGFpbCksXG4gICAgICAgIGhhc01heEVkZ2U6IGhhc0JFZGdlKGRldGFpbCksXG4gICAgICAgIG1pbkJvdW5kOiBnZXRNaW5ZQm91bmRzKHNwZWN0cnVtKSxcbiAgICAgICAgbWF4Qm91bmQ6IGdldE1heFlCb3VuZHMoc3BlY3RydW0pLFxuICAgICAgICBzY3JlZW5SYW5nZTogZ2V0WVNjcmVlblJhbmdlKHNwZWN0cnVtKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBmaW5kVmFsdWVPZihhcmdzKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldFZhbHVlRnJvbSQxID0gKHNwZWN0cnVtLCBkZXRhaWwsIHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCB5VmFsdWUgPSBmaW5kVmFsdWVPZk9mZnNldChzcGVjdHJ1bSwgZGV0YWlsLCB2YWx1ZSk7XG4gICAgICBjb25zdCBzbGlkZXJWYWwgPSB5VmFsdWU7XG4gICAgICBmaXJlU2xpZGVyQ2hhbmdlJDEoc3BlY3RydW0sIHNsaWRlclZhbCk7XG4gICAgICByZXR1cm4geVZhbHVlO1xuICAgIH07XG4gICAgY29uc3Qgc2V0VG9NaW4kMSA9IChzcGVjdHJ1bSwgZGV0YWlsKSA9PiB7XG4gICAgICBjb25zdCBtaW4gPSBtaW5ZKGRldGFpbCk7XG4gICAgICBmaXJlU2xpZGVyQ2hhbmdlJDEoc3BlY3RydW0sIG1pbik7XG4gICAgfTtcbiAgICBjb25zdCBzZXRUb01heCQxID0gKHNwZWN0cnVtLCBkZXRhaWwpID0+IHtcbiAgICAgIGNvbnN0IG1heCA9IG1heFkoZGV0YWlsKTtcbiAgICAgIGZpcmVTbGlkZXJDaGFuZ2UkMShzcGVjdHJ1bSwgbWF4KTtcbiAgICB9O1xuICAgIGNvbnN0IG1vdmVCeSQxID0gKGRpcmVjdGlvbiwgc3BlY3RydW0sIGRldGFpbCkgPT4ge1xuICAgICAgY29uc3QgZiA9IGRpcmVjdGlvbiA+IDAgPyBpbmNyZWFzZUJ5IDogcmVkdWNlQnk7XG4gICAgICBjb25zdCB5VmFsdWUgPSBmKGN1cnJlbnRWYWx1ZShkZXRhaWwpLCBtaW5ZKGRldGFpbCksIG1heFkoZGV0YWlsKSwgc3RlcChkZXRhaWwpKTtcbiAgICAgIGZpcmVTbGlkZXJDaGFuZ2UkMShzcGVjdHJ1bSwgeVZhbHVlKTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHlWYWx1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVNb3ZlbWVudCQxID0gZGlyZWN0aW9uID0+IChzcGVjdHJ1bSwgZGV0YWlsKSA9PiBtb3ZlQnkkMShkaXJlY3Rpb24sIHNwZWN0cnVtLCBkZXRhaWwpLm1hcChhbHdheXMpO1xuICAgIGNvbnN0IGdldFZhbHVlRnJvbUV2ZW50JDEgPSBzaW11bGF0ZWRFdmVudCA9PiB7XG4gICAgICBjb25zdCBwb3MgPSBnZXRFdmVudFNvdXJjZShzaW11bGF0ZWRFdmVudCk7XG4gICAgICByZXR1cm4gcG9zLm1hcChwID0+IHtcbiAgICAgICAgcmV0dXJuIHAudG9wO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kT2Zmc2V0T2ZWYWx1ZSA9IChzcGVjdHJ1bSwgZGV0YWlsLCB2YWx1ZSwgbWluRWRnZSwgbWF4RWRnZSkgPT4ge1xuICAgICAgY29uc3QgbWluT2Zmc2V0ID0gMDtcbiAgICAgIGNvbnN0IG1heE9mZnNldCA9IGdldFlTY3JlZW5SYW5nZShzcGVjdHJ1bSk7XG4gICAgICBjb25zdCBjZW50ZXJNaW5FZGdlID0gbWluRWRnZS5iaW5kKGVkZ2UgPT4gT3B0aW9uYWwuc29tZShnZXRZQ2VudGVyT2ZmU2V0T2YoZWRnZSwgc3BlY3RydW0pKSkuZ2V0T3IobWluT2Zmc2V0KTtcbiAgICAgIGNvbnN0IGNlbnRlck1heEVkZ2UgPSBtYXhFZGdlLmJpbmQoZWRnZSA9PiBPcHRpb25hbC5zb21lKGdldFlDZW50ZXJPZmZTZXRPZihlZGdlLCBzcGVjdHJ1bSkpKS5nZXRPcihtYXhPZmZzZXQpO1xuICAgICAgY29uc3QgYXJncyA9IHtcbiAgICAgICAgbWluOiBtaW5ZKGRldGFpbCksXG4gICAgICAgIG1heDogbWF4WShkZXRhaWwpLFxuICAgICAgICByYW5nZTogeVJhbmdlKGRldGFpbCksXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBoYXNNaW5FZGdlOiBoYXNURWRnZShkZXRhaWwpLFxuICAgICAgICBoYXNNYXhFZGdlOiBoYXNCRWRnZShkZXRhaWwpLFxuICAgICAgICBtaW5Cb3VuZDogZ2V0TWluWUJvdW5kcyhzcGVjdHJ1bSksXG4gICAgICAgIG1pbk9mZnNldCxcbiAgICAgICAgbWF4Qm91bmQ6IGdldE1heFlCb3VuZHMoc3BlY3RydW0pLFxuICAgICAgICBtYXhPZmZzZXQsXG4gICAgICAgIGNlbnRlck1pbkVkZ2UsXG4gICAgICAgIGNlbnRlck1heEVkZ2VcbiAgICAgIH07XG4gICAgICByZXR1cm4gZmluZE9mZnNldE9mVmFsdWUkMihhcmdzKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRQb3NpdGlvbk9mVmFsdWUgPSAoc2xpZGVyLCBzcGVjdHJ1bSwgdmFsdWUsIG1pbkVkZ2UsIG1heEVkZ2UsIGRldGFpbCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZmluZE9mZnNldE9mVmFsdWUoc3BlY3RydW0sIGRldGFpbCwgdmFsdWUsIG1pbkVkZ2UsIG1heEVkZ2UpO1xuICAgICAgcmV0dXJuIGdldE1pbllCb3VuZHMoc3BlY3RydW0pIC0gZ2V0TWluWUJvdW5kcyhzbGlkZXIpICsgb2Zmc2V0O1xuICAgIH07XG4gICAgY29uc3Qgc2V0UG9zaXRpb25Gcm9tVmFsdWUkMSA9IChzbGlkZXIsIHRodW1iLCBkZXRhaWwsIGVkZ2VzKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGN1cnJlbnRWYWx1ZShkZXRhaWwpO1xuICAgICAgY29uc3QgcG9zID0gZmluZFBvc2l0aW9uT2ZWYWx1ZShzbGlkZXIsIGVkZ2VzLmdldFNwZWN0cnVtKHNsaWRlciksIHZhbHVlLCBlZGdlcy5nZXRUb3BFZGdlKHNsaWRlciksIGVkZ2VzLmdldEJvdHRvbUVkZ2Uoc2xpZGVyKSwgZGV0YWlsKTtcbiAgICAgIGNvbnN0IHRodW1iUmFkaXVzID0gZ2V0JGQodGh1bWIuZWxlbWVudCkgLyAyO1xuICAgICAgc2V0JDgodGh1bWIuZWxlbWVudCwgJ3RvcCcsIHBvcyAtIHRodW1iUmFkaXVzICsgJ3B4Jyk7XG4gICAgfTtcbiAgICBjb25zdCBvbkxlZnQkMSA9IE9wdGlvbmFsLm5vbmU7XG4gICAgY29uc3Qgb25SaWdodCQxID0gT3B0aW9uYWwubm9uZTtcbiAgICBjb25zdCBvblVwJDEgPSBoYW5kbGVNb3ZlbWVudCQxKC0xKTtcbiAgICBjb25zdCBvbkRvd24kMSA9IGhhbmRsZU1vdmVtZW50JDEoMSk7XG4gICAgY29uc3QgZWRnZUFjdGlvbnMkMSA9IHtcbiAgICAgICd0b3AtbGVmdCc6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICd0b3AnOiBPcHRpb25hbC5zb21lKHNldFRvVEVkZ2UpLFxuICAgICAgJ3RvcC1yaWdodCc6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICdyaWdodCc6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICdib3R0b20tcmlnaHQnOiBPcHRpb25hbC5ub25lKCksXG4gICAgICAnYm90dG9tJzogT3B0aW9uYWwuc29tZShzZXRUb0JFZGdlKSxcbiAgICAgICdib3R0b20tbGVmdCc6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICdsZWZ0JzogT3B0aW9uYWwubm9uZSgpXG4gICAgfTtcblxuICAgIHZhciBWZXJ0aWNhbE1vZGVsID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIHNldFZhbHVlRnJvbTogc2V0VmFsdWVGcm9tJDEsXG4gICAgICAgIHNldFRvTWluOiBzZXRUb01pbiQxLFxuICAgICAgICBzZXRUb01heDogc2V0VG9NYXgkMSxcbiAgICAgICAgZmluZFZhbHVlT2ZPZmZzZXQ6IGZpbmRWYWx1ZU9mT2Zmc2V0LFxuICAgICAgICBnZXRWYWx1ZUZyb21FdmVudDogZ2V0VmFsdWVGcm9tRXZlbnQkMSxcbiAgICAgICAgZmluZFBvc2l0aW9uT2ZWYWx1ZTogZmluZFBvc2l0aW9uT2ZWYWx1ZSxcbiAgICAgICAgc2V0UG9zaXRpb25Gcm9tVmFsdWU6IHNldFBvc2l0aW9uRnJvbVZhbHVlJDEsXG4gICAgICAgIG9uTGVmdDogb25MZWZ0JDEsXG4gICAgICAgIG9uUmlnaHQ6IG9uUmlnaHQkMSxcbiAgICAgICAgb25VcDogb25VcCQxLFxuICAgICAgICBvbkRvd246IG9uRG93biQxLFxuICAgICAgICBlZGdlQWN0aW9uczogZWRnZUFjdGlvbnMkMVxuICAgIH0pO1xuXG4gICAgY29uc3QgZmlyZVNsaWRlckNoYW5nZSA9IChzcGVjdHJ1bSwgdmFsdWUpID0+IHtcbiAgICAgIGVtaXRXaXRoKHNwZWN0cnVtLCBzbGlkZXJDaGFuZ2VFdmVudCgpLCB7IHZhbHVlIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2xpZGVyVmFsdWUgPSAoeCwgeSkgPT4gKHtcbiAgICAgIHgsXG4gICAgICB5XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0VmFsdWVGcm9tID0gKHNwZWN0cnVtLCBkZXRhaWwsIHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCB4VmFsdWUgPSBmaW5kVmFsdWVPZk9mZnNldCQxKHNwZWN0cnVtLCBkZXRhaWwsIHZhbHVlLmxlZnQpO1xuICAgICAgY29uc3QgeVZhbHVlID0gZmluZFZhbHVlT2ZPZmZzZXQoc3BlY3RydW0sIGRldGFpbCwgdmFsdWUudG9wKTtcbiAgICAgIGNvbnN0IHZhbCA9IHNsaWRlclZhbHVlKHhWYWx1ZSwgeVZhbHVlKTtcbiAgICAgIGZpcmVTbGlkZXJDaGFuZ2Uoc3BlY3RydW0sIHZhbCk7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH07XG4gICAgY29uc3QgbW92ZUJ5ID0gKGRpcmVjdGlvbiwgaXNWZXJ0aWNhbE1vdmVtZW50LCBzcGVjdHJ1bSwgZGV0YWlsKSA9PiB7XG4gICAgICBjb25zdCBmID0gZGlyZWN0aW9uID4gMCA/IGluY3JlYXNlQnkgOiByZWR1Y2VCeTtcbiAgICAgIGNvbnN0IHhWYWx1ZSA9IGlzVmVydGljYWxNb3ZlbWVudCA/IGN1cnJlbnRWYWx1ZShkZXRhaWwpLnggOiBmKGN1cnJlbnRWYWx1ZShkZXRhaWwpLngsIG1pblgoZGV0YWlsKSwgbWF4WChkZXRhaWwpLCBzdGVwKGRldGFpbCkpO1xuICAgICAgY29uc3QgeVZhbHVlID0gIWlzVmVydGljYWxNb3ZlbWVudCA/IGN1cnJlbnRWYWx1ZShkZXRhaWwpLnkgOiBmKGN1cnJlbnRWYWx1ZShkZXRhaWwpLnksIG1pblkoZGV0YWlsKSwgbWF4WShkZXRhaWwpLCBzdGVwKGRldGFpbCkpO1xuICAgICAgZmlyZVNsaWRlckNoYW5nZShzcGVjdHJ1bSwgc2xpZGVyVmFsdWUoeFZhbHVlLCB5VmFsdWUpKTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHhWYWx1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVNb3ZlbWVudCA9IChkaXJlY3Rpb24sIGlzVmVydGljYWxNb3ZlbWVudCkgPT4gKHNwZWN0cnVtLCBkZXRhaWwpID0+IG1vdmVCeShkaXJlY3Rpb24sIGlzVmVydGljYWxNb3ZlbWVudCwgc3BlY3RydW0sIGRldGFpbCkubWFwKGFsd2F5cyk7XG4gICAgY29uc3Qgc2V0VG9NaW4gPSAoc3BlY3RydW0sIGRldGFpbCkgPT4ge1xuICAgICAgY29uc3QgbVggPSBtaW5YKGRldGFpbCk7XG4gICAgICBjb25zdCBtWSA9IG1pblkoZGV0YWlsKTtcbiAgICAgIGZpcmVTbGlkZXJDaGFuZ2Uoc3BlY3RydW0sIHNsaWRlclZhbHVlKG1YLCBtWSkpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0VG9NYXggPSAoc3BlY3RydW0sIGRldGFpbCkgPT4ge1xuICAgICAgY29uc3QgbVggPSBtYXhYKGRldGFpbCk7XG4gICAgICBjb25zdCBtWSA9IG1heFkoZGV0YWlsKTtcbiAgICAgIGZpcmVTbGlkZXJDaGFuZ2Uoc3BlY3RydW0sIHNsaWRlclZhbHVlKG1YLCBtWSkpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0VmFsdWVGcm9tRXZlbnQgPSBzaW11bGF0ZWRFdmVudCA9PiBnZXRFdmVudFNvdXJjZShzaW11bGF0ZWRFdmVudCk7XG4gICAgY29uc3Qgc2V0UG9zaXRpb25Gcm9tVmFsdWUgPSAoc2xpZGVyLCB0aHVtYiwgZGV0YWlsLCBlZGdlcykgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBjdXJyZW50VmFsdWUoZGV0YWlsKTtcbiAgICAgIGNvbnN0IHhQb3MgPSBmaW5kUG9zaXRpb25PZlZhbHVlJDEoc2xpZGVyLCBlZGdlcy5nZXRTcGVjdHJ1bShzbGlkZXIpLCB2YWx1ZS54LCBlZGdlcy5nZXRMZWZ0RWRnZShzbGlkZXIpLCBlZGdlcy5nZXRSaWdodEVkZ2Uoc2xpZGVyKSwgZGV0YWlsKTtcbiAgICAgIGNvbnN0IHlQb3MgPSBmaW5kUG9zaXRpb25PZlZhbHVlKHNsaWRlciwgZWRnZXMuZ2V0U3BlY3RydW0oc2xpZGVyKSwgdmFsdWUueSwgZWRnZXMuZ2V0VG9wRWRnZShzbGlkZXIpLCBlZGdlcy5nZXRCb3R0b21FZGdlKHNsaWRlciksIGRldGFpbCk7XG4gICAgICBjb25zdCB0aHVtYlhSYWRpdXMgPSBnZXQkYyh0aHVtYi5lbGVtZW50KSAvIDI7XG4gICAgICBjb25zdCB0aHVtYllSYWRpdXMgPSBnZXQkZCh0aHVtYi5lbGVtZW50KSAvIDI7XG4gICAgICBzZXQkOCh0aHVtYi5lbGVtZW50LCAnbGVmdCcsIHhQb3MgLSB0aHVtYlhSYWRpdXMgKyAncHgnKTtcbiAgICAgIHNldCQ4KHRodW1iLmVsZW1lbnQsICd0b3AnLCB5UG9zIC0gdGh1bWJZUmFkaXVzICsgJ3B4Jyk7XG4gICAgfTtcbiAgICBjb25zdCBvbkxlZnQgPSBoYW5kbGVNb3ZlbWVudCgtMSwgZmFsc2UpO1xuICAgIGNvbnN0IG9uUmlnaHQgPSBoYW5kbGVNb3ZlbWVudCgxLCBmYWxzZSk7XG4gICAgY29uc3Qgb25VcCA9IGhhbmRsZU1vdmVtZW50KC0xLCB0cnVlKTtcbiAgICBjb25zdCBvbkRvd24gPSBoYW5kbGVNb3ZlbWVudCgxLCB0cnVlKTtcbiAgICBjb25zdCBlZGdlQWN0aW9ucyA9IHtcbiAgICAgICd0b3AtbGVmdCc6IE9wdGlvbmFsLnNvbWUoc2V0VG9UTEVkZ2VYWSksXG4gICAgICAndG9wJzogT3B0aW9uYWwuc29tZShzZXRUb1RFZGdlWFkpLFxuICAgICAgJ3RvcC1yaWdodCc6IE9wdGlvbmFsLnNvbWUoc2V0VG9UUkVkZ2VYWSksXG4gICAgICAncmlnaHQnOiBPcHRpb25hbC5zb21lKHNldFRvUkVkZ2VYWSksXG4gICAgICAnYm90dG9tLXJpZ2h0JzogT3B0aW9uYWwuc29tZShzZXRUb0JSRWRnZVhZKSxcbiAgICAgICdib3R0b20nOiBPcHRpb25hbC5zb21lKHNldFRvQkVkZ2VYWSksXG4gICAgICAnYm90dG9tLWxlZnQnOiBPcHRpb25hbC5zb21lKHNldFRvQkxFZGdlWFkpLFxuICAgICAgJ2xlZnQnOiBPcHRpb25hbC5zb21lKHNldFRvTEVkZ2VYWSlcbiAgICB9O1xuXG4gICAgdmFyIFR3b0RNb2RlbCA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBzZXRWYWx1ZUZyb206IHNldFZhbHVlRnJvbSxcbiAgICAgICAgc2V0VG9NaW46IHNldFRvTWluLFxuICAgICAgICBzZXRUb01heDogc2V0VG9NYXgsXG4gICAgICAgIGdldFZhbHVlRnJvbUV2ZW50OiBnZXRWYWx1ZUZyb21FdmVudCxcbiAgICAgICAgc2V0UG9zaXRpb25Gcm9tVmFsdWU6IHNldFBvc2l0aW9uRnJvbVZhbHVlLFxuICAgICAgICBvbkxlZnQ6IG9uTGVmdCxcbiAgICAgICAgb25SaWdodDogb25SaWdodCxcbiAgICAgICAgb25VcDogb25VcCxcbiAgICAgICAgb25Eb3duOiBvbkRvd24sXG4gICAgICAgIGVkZ2VBY3Rpb25zOiBlZGdlQWN0aW9uc1xuICAgIH0pO1xuXG4gICAgY29uc3QgU2xpZGVyU2NoZW1hID0gW1xuICAgICAgZGVmYXVsdGVkKCdzdGVwU2l6ZScsIDEpLFxuICAgICAgZGVmYXVsdGVkKCdvbkNoYW5nZScsIG5vb3ApLFxuICAgICAgZGVmYXVsdGVkKCdvbkNob29zZScsIG5vb3ApLFxuICAgICAgZGVmYXVsdGVkKCdvbkluaXQnLCBub29wKSxcbiAgICAgIGRlZmF1bHRlZCgnb25EcmFnU3RhcnQnLCBub29wKSxcbiAgICAgIGRlZmF1bHRlZCgnb25EcmFnRW5kJywgbm9vcCksXG4gICAgICBkZWZhdWx0ZWQoJ3NuYXBUb0dyaWQnLCBmYWxzZSksXG4gICAgICBkZWZhdWx0ZWQoJ3JvdW5kZWQnLCB0cnVlKSxcbiAgICAgIG9wdGlvbiQzKCdzbmFwU3RhcnQnKSxcbiAgICAgIHJlcXVpcmVkT2YoJ21vZGVsJywgY2hvb3NlJDEoJ21vZGUnLCB7XG4gICAgICAgIHg6IFtcbiAgICAgICAgICBkZWZhdWx0ZWQoJ21pblgnLCAwKSxcbiAgICAgICAgICBkZWZhdWx0ZWQoJ21heFgnLCAxMDApLFxuICAgICAgICAgIGN1c3RvbUZpZWxkKCd2YWx1ZScsIHNwZWMgPT4gQ2VsbChzcGVjLm1vZGUubWluWCkpLFxuICAgICAgICAgIHJlcXVpcmVkJDEoJ2dldEluaXRpYWxWYWx1ZScpLFxuICAgICAgICAgIG91dHB1dCQxKCdtYW5hZ2VyJywgSG9yaXpvbnRhbE1vZGVsKVxuICAgICAgICBdLFxuICAgICAgICB5OiBbXG4gICAgICAgICAgZGVmYXVsdGVkKCdtaW5ZJywgMCksXG4gICAgICAgICAgZGVmYXVsdGVkKCdtYXhZJywgMTAwKSxcbiAgICAgICAgICBjdXN0b21GaWVsZCgndmFsdWUnLCBzcGVjID0+IENlbGwoc3BlYy5tb2RlLm1pblkpKSxcbiAgICAgICAgICByZXF1aXJlZCQxKCdnZXRJbml0aWFsVmFsdWUnKSxcbiAgICAgICAgICBvdXRwdXQkMSgnbWFuYWdlcicsIFZlcnRpY2FsTW9kZWwpXG4gICAgICAgIF0sXG4gICAgICAgIHh5OiBbXG4gICAgICAgICAgZGVmYXVsdGVkKCdtaW5YJywgMCksXG4gICAgICAgICAgZGVmYXVsdGVkKCdtYXhYJywgMTAwKSxcbiAgICAgICAgICBkZWZhdWx0ZWQoJ21pblknLCAwKSxcbiAgICAgICAgICBkZWZhdWx0ZWQoJ21heFknLCAxMDApLFxuICAgICAgICAgIGN1c3RvbUZpZWxkKCd2YWx1ZScsIHNwZWMgPT4gQ2VsbCh7XG4gICAgICAgICAgICB4OiBzcGVjLm1vZGUubWluWCxcbiAgICAgICAgICAgIHk6IHNwZWMubW9kZS5taW5ZXG4gICAgICAgICAgfSkpLFxuICAgICAgICAgIHJlcXVpcmVkJDEoJ2dldEluaXRpYWxWYWx1ZScpLFxuICAgICAgICAgIG91dHB1dCQxKCdtYW5hZ2VyJywgVHdvRE1vZGVsKVxuICAgICAgICBdXG4gICAgICB9KSksXG4gICAgICBmaWVsZCgnc2xpZGVyQmVoYXZpb3VycycsIFtcbiAgICAgICAgS2V5aW5nLFxuICAgICAgICBSZXByZXNlbnRpbmdcbiAgICAgIF0pLFxuICAgICAgY3VzdG9tRmllbGQoJ21vdXNlSXNEb3duJywgKCkgPT4gQ2VsbChmYWxzZSkpXG4gICAgXTtcblxuICAgIGNvbnN0IHNrZXRjaCQyID0gKGRldGFpbCwgY29tcG9uZW50cywgX3NwZWMsIF9leHRlcm5hbHMpID0+IHtcbiAgICAgIGNvbnN0IGdldFRodW1iID0gY29tcG9uZW50ID0+IGdldFBhcnRPckRpZShjb21wb25lbnQsIGRldGFpbCwgJ3RodW1iJyk7XG4gICAgICBjb25zdCBnZXRTcGVjdHJ1bSA9IGNvbXBvbmVudCA9PiBnZXRQYXJ0T3JEaWUoY29tcG9uZW50LCBkZXRhaWwsICdzcGVjdHJ1bScpO1xuICAgICAgY29uc3QgZ2V0TGVmdEVkZ2UgPSBjb21wb25lbnQgPT4gZ2V0UGFydChjb21wb25lbnQsIGRldGFpbCwgJ2xlZnQtZWRnZScpO1xuICAgICAgY29uc3QgZ2V0UmlnaHRFZGdlID0gY29tcG9uZW50ID0+IGdldFBhcnQoY29tcG9uZW50LCBkZXRhaWwsICdyaWdodC1lZGdlJyk7XG4gICAgICBjb25zdCBnZXRUb3BFZGdlID0gY29tcG9uZW50ID0+IGdldFBhcnQoY29tcG9uZW50LCBkZXRhaWwsICd0b3AtZWRnZScpO1xuICAgICAgY29uc3QgZ2V0Qm90dG9tRWRnZSA9IGNvbXBvbmVudCA9PiBnZXRQYXJ0KGNvbXBvbmVudCwgZGV0YWlsLCAnYm90dG9tLWVkZ2UnKTtcbiAgICAgIGNvbnN0IG1vZGVsRGV0YWlsID0gZGV0YWlsLm1vZGVsO1xuICAgICAgY29uc3QgbW9kZWwgPSBtb2RlbERldGFpbC5tYW5hZ2VyO1xuICAgICAgY29uc3QgcmVmcmVzaCA9IChzbGlkZXIsIHRodW1iKSA9PiB7XG4gICAgICAgIG1vZGVsLnNldFBvc2l0aW9uRnJvbVZhbHVlKHNsaWRlciwgdGh1bWIsIGRldGFpbCwge1xuICAgICAgICAgIGdldExlZnRFZGdlLFxuICAgICAgICAgIGdldFJpZ2h0RWRnZSxcbiAgICAgICAgICBnZXRUb3BFZGdlLFxuICAgICAgICAgIGdldEJvdHRvbUVkZ2UsXG4gICAgICAgICAgZ2V0U3BlY3RydW1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0VmFsdWUgPSAoc2xpZGVyLCBuZXdWYWx1ZSkgPT4ge1xuICAgICAgICBtb2RlbERldGFpbC52YWx1ZS5zZXQobmV3VmFsdWUpO1xuICAgICAgICBjb25zdCB0aHVtYiA9IGdldFRodW1iKHNsaWRlcik7XG4gICAgICAgIHJlZnJlc2goc2xpZGVyLCB0aHVtYik7XG4gICAgICB9O1xuICAgICAgY29uc3QgY2hhbmdlVmFsdWUgPSAoc2xpZGVyLCBuZXdWYWx1ZSkgPT4ge1xuICAgICAgICBzZXRWYWx1ZShzbGlkZXIsIG5ld1ZhbHVlKTtcbiAgICAgICAgY29uc3QgdGh1bWIgPSBnZXRUaHVtYihzbGlkZXIpO1xuICAgICAgICBkZXRhaWwub25DaGFuZ2Uoc2xpZGVyLCB0aHVtYiwgbmV3VmFsdWUpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNldFRvTWluID0gc2xpZGVyID0+IHtcbiAgICAgICAgbW9kZWwuc2V0VG9NaW4oc2xpZGVyLCBkZXRhaWwpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc2V0VG9NYXggPSBzbGlkZXIgPT4ge1xuICAgICAgICBtb2RlbC5zZXRUb01heChzbGlkZXIsIGRldGFpbCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgY2hvb3NlID0gc2xpZGVyID0+IHtcbiAgICAgICAgY29uc3QgZmlyZU9uQ2hvb3NlID0gKCkgPT4ge1xuICAgICAgICAgIGdldFBhcnQoc2xpZGVyLCBkZXRhaWwsICd0aHVtYicpLmVhY2godGh1bWIgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtb2RlbERldGFpbC52YWx1ZS5nZXQoKTtcbiAgICAgICAgICAgIGRldGFpbC5vbkNob29zZShzbGlkZXIsIHRodW1iLCB2YWx1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHdhc0Rvd24gPSBkZXRhaWwubW91c2VJc0Rvd24uZ2V0KCk7XG4gICAgICAgIGRldGFpbC5tb3VzZUlzRG93bi5zZXQoZmFsc2UpO1xuICAgICAgICBpZiAod2FzRG93bikge1xuICAgICAgICAgIGZpcmVPbkNob29zZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25EcmFnU3RhcnQgPSAoc2xpZGVyLCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICBzaW11bGF0ZWRFdmVudC5zdG9wKCk7XG4gICAgICAgIGRldGFpbC5tb3VzZUlzRG93bi5zZXQodHJ1ZSk7XG4gICAgICAgIGRldGFpbC5vbkRyYWdTdGFydChzbGlkZXIsIGdldFRodW1iKHNsaWRlcikpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG9uRHJhZ0VuZCA9IChzbGlkZXIsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgIHNpbXVsYXRlZEV2ZW50LnN0b3AoKTtcbiAgICAgICAgZGV0YWlsLm9uRHJhZ0VuZChzbGlkZXIsIGdldFRodW1iKHNsaWRlcikpO1xuICAgICAgICBjaG9vc2Uoc2xpZGVyKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1aWQ6IGRldGFpbC51aWQsXG4gICAgICAgIGRvbTogZGV0YWlsLmRvbSxcbiAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgYmVoYXZpb3VyczogYXVnbWVudChkZXRhaWwuc2xpZGVyQmVoYXZpb3VycywgW1xuICAgICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgICAgbW9kZTogJ3NwZWNpYWwnLFxuICAgICAgICAgICAgZm9jdXNJbjogc2xpZGVyID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldFBhcnQoc2xpZGVyLCBkZXRhaWwsICdzcGVjdHJ1bScpLm1hcChLZXlpbmcuZm9jdXNJbikubWFwKGFsd2F5cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgUmVwcmVzZW50aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBzdG9yZToge1xuICAgICAgICAgICAgICBtb2RlOiAnbWFudWFsJyxcbiAgICAgICAgICAgICAgZ2V0VmFsdWU6IF8gPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2RlbERldGFpbC52YWx1ZS5nZXQoKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc2V0VmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBSZWNlaXZpbmcuY29uZmlnKHsgY2hhbm5lbHM6IHsgW21vdXNlUmVsZWFzZWQoKV06IHsgb25SZWNlaXZlOiBjaG9vc2UgfSB9IH0pXG4gICAgICAgIF0pLFxuICAgICAgICBldmVudHM6IGRlcml2ZSQyKFtcbiAgICAgICAgICBydW4kMShzbGlkZXJDaGFuZ2VFdmVudCgpLCAoc2xpZGVyLCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgY2hhbmdlVmFsdWUoc2xpZGVyLCBzaW11bGF0ZWRFdmVudC5ldmVudC52YWx1ZSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVuT25BdHRhY2hlZCgoc2xpZGVyLCBfc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdldEluaXRpYWwgPSBtb2RlbERldGFpbC5nZXRJbml0aWFsVmFsdWUoKTtcbiAgICAgICAgICAgIG1vZGVsRGV0YWlsLnZhbHVlLnNldChnZXRJbml0aWFsKTtcbiAgICAgICAgICAgIGNvbnN0IHRodW1iID0gZ2V0VGh1bWIoc2xpZGVyKTtcbiAgICAgICAgICAgIHJlZnJlc2goc2xpZGVyLCB0aHVtYik7XG4gICAgICAgICAgICBjb25zdCBzcGVjdHJ1bSA9IGdldFNwZWN0cnVtKHNsaWRlcik7XG4gICAgICAgICAgICBkZXRhaWwub25Jbml0KHNsaWRlciwgdGh1bWIsIHNwZWN0cnVtLCBtb2RlbERldGFpbC52YWx1ZS5nZXQoKSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVuJDEodG91Y2hzdGFydCgpLCBvbkRyYWdTdGFydCksXG4gICAgICAgICAgcnVuJDEodG91Y2hlbmQoKSwgb25EcmFnRW5kKSxcbiAgICAgICAgICBydW4kMShtb3VzZWRvd24oKSwgb25EcmFnU3RhcnQpLFxuICAgICAgICAgIHJ1biQxKG1vdXNldXAoKSwgb25EcmFnRW5kKVxuICAgICAgICBdKSxcbiAgICAgICAgYXBpczoge1xuICAgICAgICAgIHJlc2V0VG9NaW4sXG4gICAgICAgICAgcmVzZXRUb01heCxcbiAgICAgICAgICBzZXRWYWx1ZSxcbiAgICAgICAgICByZWZyZXNoXG4gICAgICAgIH0sXG4gICAgICAgIGRvbU1vZGlmaWNhdGlvbjogeyBzdHlsZXM6IHsgcG9zaXRpb246ICdyZWxhdGl2ZScgfSB9XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBTbGlkZXIgPSBjb21wb3NpdGUoe1xuICAgICAgbmFtZTogJ1NsaWRlcicsXG4gICAgICBjb25maWdGaWVsZHM6IFNsaWRlclNjaGVtYSxcbiAgICAgIHBhcnRGaWVsZHM6IFNsaWRlclBhcnRzLFxuICAgICAgZmFjdG9yeTogc2tldGNoJDIsXG4gICAgICBhcGlzOiB7XG4gICAgICAgIHNldFZhbHVlOiAoYXBpcywgc2xpZGVyLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGFwaXMuc2V0VmFsdWUoc2xpZGVyLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlc2V0VG9NaW46IChhcGlzLCBzbGlkZXIpID0+IHtcbiAgICAgICAgICBhcGlzLnJlc2V0VG9NaW4oc2xpZGVyKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVzZXRUb01heDogKGFwaXMsIHNsaWRlcikgPT4ge1xuICAgICAgICAgIGFwaXMucmVzZXRUb01heChzbGlkZXIpO1xuICAgICAgICB9LFxuICAgICAgICByZWZyZXNoOiAoYXBpcywgc2xpZGVyKSA9PiB7XG4gICAgICAgICAgYXBpcy5yZWZyZXNoKHNsaWRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGZpZWxkc1VwZGF0ZSA9IGdlbmVyYXRlJDYoJ3JnYi1oZXgtdXBkYXRlJyk7XG4gICAgY29uc3Qgc2xpZGVyVXBkYXRlID0gZ2VuZXJhdGUkNignc2xpZGVyLXVwZGF0ZScpO1xuICAgIGNvbnN0IHBhbGV0dGVVcGRhdGUgPSBnZW5lcmF0ZSQ2KCdwYWxldHRlLXVwZGF0ZScpO1xuXG4gICAgY29uc3Qgc2xpZGVyRmFjdG9yeSA9ICh0cmFuc2xhdGUsIGdldENsYXNzKSA9PiB7XG4gICAgICBjb25zdCBzcGVjdHJ1bSA9IFNsaWRlci5wYXJ0cy5zcGVjdHJ1bSh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogW2dldENsYXNzKCdodWUtc2xpZGVyLXNwZWN0cnVtJyldLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3ByZXNlbnRhdGlvbicgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHRodW1iID0gU2xpZGVyLnBhcnRzLnRodW1iKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbZ2V0Q2xhc3MoJ2h1ZS1zbGlkZXItdGh1bWInKV0sXG4gICAgICAgICAgYXR0cmlidXRlczogeyByb2xlOiAncHJlc2VudGF0aW9uJyB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFNsaWRlci5za2V0Y2goe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFtnZXRDbGFzcygnaHVlLXNsaWRlcicpXSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7IHJvbGU6ICdwcmVzZW50YXRpb24nIH1cbiAgICAgICAgfSxcbiAgICAgICAgcm91bmRlZDogZmFsc2UsXG4gICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgbW9kZTogJ3knLFxuICAgICAgICAgIGdldEluaXRpYWxWYWx1ZTogY29uc3RhbnQkMSgwKVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgc3BlY3RydW0sXG4gICAgICAgICAgdGh1bWJcbiAgICAgICAgXSxcbiAgICAgICAgc2xpZGVyQmVoYXZpb3VyczogZGVyaXZlJDEoW0ZvY3VzaW5nLmNvbmZpZyh7fSldKSxcbiAgICAgICAgb25DaGFuZ2U6IChzbGlkZXIsIF90aHVtYiwgdmFsdWUpID0+IHtcbiAgICAgICAgICBlbWl0V2l0aChzbGlkZXIsIHNsaWRlclVwZGF0ZSwgeyB2YWx1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG93bmVyJDEgPSAnZm9ybSc7XG4gICAgY29uc3Qgc2NoZW1hJGkgPSBbZmllbGQoJ2Zvcm1CZWhhdmlvdXJzJywgW1JlcHJlc2VudGluZ10pXTtcbiAgICBjb25zdCBnZXRQYXJ0TmFtZSQxID0gbmFtZSA9PiAnPGFsbG95LmZpZWxkLicgKyBuYW1lICsgJz4nO1xuICAgIGNvbnN0IHNrZXRjaCQxID0gZlNwZWMgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSAoKCkgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBbXTtcbiAgICAgICAgY29uc3QgZmllbGQgPSAobmFtZSwgY29uZmlnKSA9PiB7XG4gICAgICAgICAgcmVjb3JkLnB1c2gobmFtZSk7XG4gICAgICAgICAgcmV0dXJuIGdlbmVyYXRlT25lJDEob3duZXIkMSwgZ2V0UGFydE5hbWUkMShuYW1lKSwgY29uZmlnKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICByZWNvcmQ6IGNvbnN0YW50JDEocmVjb3JkKVxuICAgICAgICB9O1xuICAgICAgfSkoKTtcbiAgICAgIGNvbnN0IHNwZWMgPSBmU3BlYyhwYXJ0cyk7XG4gICAgICBjb25zdCBwYXJ0TmFtZXMgPSBwYXJ0cy5yZWNvcmQoKTtcbiAgICAgIGNvbnN0IGZpZWxkUGFydHMgPSBtYXAkMihwYXJ0TmFtZXMsIG4gPT4gcmVxdWlyZWQoe1xuICAgICAgICBuYW1lOiBuLFxuICAgICAgICBwbmFtZTogZ2V0UGFydE5hbWUkMShuKVxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIGNvbXBvc2l0ZSQxKG93bmVyJDEsIHNjaGVtYSRpLCBmaWVsZFBhcnRzLCBtYWtlJDQsIHNwZWMpO1xuICAgIH07XG4gICAgY29uc3QgdG9SZXN1bHQgPSAobywgZSkgPT4gby5mb2xkKCgpID0+IFJlc3VsdC5lcnJvcihlKSwgUmVzdWx0LnZhbHVlKTtcbiAgICBjb25zdCBtYWtlJDQgPSAoZGV0YWlsLCBjb21wb25lbnRzKSA9PiAoe1xuICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgY29tcG9uZW50cyxcbiAgICAgIGJlaGF2aW91cnM6IGF1Z21lbnQoZGV0YWlsLmZvcm1CZWhhdmlvdXJzLCBbUmVwcmVzZW50aW5nLmNvbmZpZyh7XG4gICAgICAgICAgc3RvcmU6IHtcbiAgICAgICAgICAgIG1vZGU6ICdtYW51YWwnLFxuICAgICAgICAgICAgZ2V0VmFsdWU6IGZvcm0gPT4ge1xuICAgICAgICAgICAgICBjb25zdCByZXNQcyA9IGdldEFsbFBhcnRzKGZvcm0sIGRldGFpbCk7XG4gICAgICAgICAgICAgIHJldHVybiBtYXAkMShyZXNQcywgKHJlc1BUaHVuaywgcE5hbWUpID0+IHJlc1BUaHVuaygpLmJpbmQodiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0ID0gQ29tcG9zaW5nLmdldEN1cnJlbnQodik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvUmVzdWx0KG9wdCwgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBhIGN1cnJlbnQgY29tcG9uZW50IHRvIGV4dHJhY3QgdGhlIHZhbHVlIGZyb20gZm9yIGZvcm0gcGFydCAnJHsgcE5hbWUgfSc6IGAgKyBlbGVtZW50KHYuZWxlbWVudCkpKTtcbiAgICAgICAgICAgICAgfSkubWFwKFJlcHJlc2VudGluZy5nZXRWYWx1ZSkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldFZhbHVlOiAoZm9ybSwgdmFsdWVzKSA9PiB7XG4gICAgICAgICAgICAgIGVhY2godmFsdWVzLCAobmV3VmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGdldFBhcnQoZm9ybSwgZGV0YWlsLCBrZXkpLmVhY2god3JhcHBlciA9PiB7XG4gICAgICAgICAgICAgICAgICBDb21wb3NpbmcuZ2V0Q3VycmVudCh3cmFwcGVyKS5lYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgUmVwcmVzZW50aW5nLnNldFZhbHVlKGZpZWxkLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KV0pLFxuICAgICAgYXBpczoge1xuICAgICAgICBnZXRGaWVsZDogKGZvcm0sIGtleSkgPT4ge1xuICAgICAgICAgIHJldHVybiBnZXRQYXJ0KGZvcm0sIGRldGFpbCwga2V5KS5iaW5kKENvbXBvc2luZy5nZXRDdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IEZvcm0gPSB7XG4gICAgICBnZXRGaWVsZDogbWFrZUFwaSgoYXBpcywgY29tcG9uZW50LCBrZXkpID0+IGFwaXMuZ2V0RmllbGQoY29tcG9uZW50LCBrZXkpKSxcbiAgICAgIHNrZXRjaDogc2tldGNoJDFcbiAgICB9O1xuXG4gICAgY29uc3QgdmFsaWRJbnB1dCA9IGdlbmVyYXRlJDYoJ3ZhbGlkLWlucHV0Jyk7XG4gICAgY29uc3QgaW52YWxpZElucHV0ID0gZ2VuZXJhdGUkNignaW52YWxpZC1pbnB1dCcpO1xuICAgIGNvbnN0IHZhbGlkYXRpbmdJbnB1dCA9IGdlbmVyYXRlJDYoJ3ZhbGlkYXRpbmctaW5wdXQnKTtcbiAgICBjb25zdCB0cmFuc2xhdGVQcmVmaXggPSAnY29sb3JjdXN0b20ucmdiLic7XG4gICAgY29uc3QgcmdiRm9ybUZhY3RvcnkgPSAodHJhbnNsYXRlLCBnZXRDbGFzcywgb25WYWxpZEhleHgsIG9uSW52YWxpZEhleHgpID0+IHtcbiAgICAgIGNvbnN0IGludmFsaWRhdGlvbiA9IChsYWJlbCwgaXNWYWxpZCkgPT4gSW52YWxpZGF0aW5nLmNvbmZpZyh7XG4gICAgICAgIGludmFsaWRDbGFzczogZ2V0Q2xhc3MoJ2ludmFsaWQnKSxcbiAgICAgICAgbm90aWZ5OiB7XG4gICAgICAgICAgb25WYWxpZGF0ZTogY29tcCA9PiB7XG4gICAgICAgICAgICBlbWl0V2l0aChjb21wLCB2YWxpZGF0aW5nSW5wdXQsIHsgdHlwZTogbGFiZWwgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvblZhbGlkOiBjb21wID0+IHtcbiAgICAgICAgICAgIGVtaXRXaXRoKGNvbXAsIHZhbGlkSW5wdXQsIHtcbiAgICAgICAgICAgICAgdHlwZTogbGFiZWwsXG4gICAgICAgICAgICAgIHZhbHVlOiBSZXByZXNlbnRpbmcuZ2V0VmFsdWUoY29tcClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25JbnZhbGlkOiBjb21wID0+IHtcbiAgICAgICAgICAgIGVtaXRXaXRoKGNvbXAsIGludmFsaWRJbnB1dCwge1xuICAgICAgICAgICAgICB0eXBlOiBsYWJlbCxcbiAgICAgICAgICAgICAgdmFsdWU6IFJlcHJlc2VudGluZy5nZXRWYWx1ZShjb21wKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0b3I6IHtcbiAgICAgICAgICB2YWxpZGF0ZTogY29tcCA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IFJlcHJlc2VudGluZy5nZXRWYWx1ZShjb21wKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGlzVmFsaWQodmFsdWUpID8gUmVzdWx0LnZhbHVlKHRydWUpIDogUmVzdWx0LmVycm9yKHRyYW5zbGF0ZSgnYXJpYS5pbnB1dC5pbnZhbGlkJykpO1xuICAgICAgICAgICAgcmV0dXJuIEZ1dHVyZS5wdXJlKHJlcyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB2YWxpZGF0ZU9uTG9hZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCByZW5kZXJUZXh0RmllbGQgPSAoaXNWYWxpZCwgbmFtZSwgbGFiZWwsIGRlc2NyaXB0aW9uLCBkYXRhKSA9PiB7XG4gICAgICAgIGNvbnN0IGhlbHB0ZXh0ID0gdHJhbnNsYXRlKHRyYW5zbGF0ZVByZWZpeCArICdyYW5nZScpO1xuICAgICAgICBjb25zdCBwTGFiZWwgPSBGb3JtRmllbGQucGFydHMubGFiZWwoe1xuICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgdGFnOiAnbGFiZWwnLFxuICAgICAgICAgICAgYXR0cmlidXRlczogeyAnYXJpYS1sYWJlbCc6IGRlc2NyaXB0aW9uIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbXBvbmVudHM6IFt0ZXh0JDIobGFiZWwpXVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcEZpZWxkID0gRm9ybUZpZWxkLnBhcnRzLmZpZWxkKHtcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGZhY3Rvcnk6IElucHV0LFxuICAgICAgICAgIGlucHV0QXR0cmlidXRlczoge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgLi4ubmFtZSA9PT0gJ2hleCcgPyB7ICdhcmlhLWxpdmUnOiAncG9saXRlJyB9IDoge31cbiAgICAgICAgICB9LFxuICAgICAgICAgIGlucHV0Q2xhc3NlczogW2dldENsYXNzKCd0ZXh0ZmllbGQnKV0sXG4gICAgICAgICAgaW5wdXRCZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgICBpbnZhbGlkYXRpb24obmFtZSwgaXNWYWxpZCksXG4gICAgICAgICAgICBUYWJzdG9wcGluZy5jb25maWcoe30pXG4gICAgICAgICAgXSksXG4gICAgICAgICAgb25TZXRWYWx1ZTogaW5wdXQgPT4ge1xuICAgICAgICAgICAgaWYgKEludmFsaWRhdGluZy5pc0ludmFsaWQoaW5wdXQpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJ1biA9IEludmFsaWRhdGluZy5ydW4oaW5wdXQpO1xuICAgICAgICAgICAgICBydW4uZ2V0KG5vb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNvbXBzID0gW1xuICAgICAgICAgIHBMYWJlbCxcbiAgICAgICAgICBwRmllbGRcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgY29uY2F0cyA9IG5hbWUgIT09ICdoZXgnID8gW0Zvcm1GaWVsZC5wYXJ0c1snYXJpYS1kZXNjcmlwdG9yJ10oeyB0ZXh0OiBoZWxwdGV4dCB9KV0gOiBbXTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGNvbXBzLmNvbmNhdChjb25jYXRzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IHJvbGU6ICdwcmVzZW50YXRpb24nIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbXBvbmVudHNcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjb3B5UmdiVG9IZXggPSAoZm9ybSwgcmdiYSkgPT4ge1xuICAgICAgICBjb25zdCBoZXggPSBmcm9tUmdiYShyZ2JhKTtcbiAgICAgICAgRm9ybS5nZXRGaWVsZChmb3JtLCAnaGV4JykuZWFjaChoZXhGaWVsZCA9PiB7XG4gICAgICAgICAgaWYgKCFGb2N1c2luZy5pc0ZvY3VzZWQoaGV4RmllbGQpKSB7XG4gICAgICAgICAgICBSZXByZXNlbnRpbmcuc2V0VmFsdWUoZm9ybSwgeyBoZXg6IGhleC52YWx1ZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaGV4O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvcHlSZ2JUb0Zvcm0gPSAoZm9ybSwgcmdiKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlZCA9IHJnYi5yZWQ7XG4gICAgICAgIGNvbnN0IGdyZWVuID0gcmdiLmdyZWVuO1xuICAgICAgICBjb25zdCBibHVlID0gcmdiLmJsdWU7XG4gICAgICAgIFJlcHJlc2VudGluZy5zZXRWYWx1ZShmb3JtLCB7XG4gICAgICAgICAgcmVkLFxuICAgICAgICAgIGdyZWVuLFxuICAgICAgICAgIGJsdWVcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgbWVtUHJldmlldyA9IHJlY29yZCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogW2dldENsYXNzKCdyZ2JhLXByZXZpZXcnKV0sXG4gICAgICAgICAgc3R5bGVzOiB7ICdiYWNrZ3JvdW5kLWNvbG9yJzogJ3doaXRlJyB9LFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3ByZXNlbnRhdGlvbicgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHVwZGF0ZVByZXZpZXcgPSAoYW55SW5TeXN0ZW0sIGhleCkgPT4ge1xuICAgICAgICBtZW1QcmV2aWV3LmdldE9wdChhbnlJblN5c3RlbSkuZWFjaChwcmV2aWV3ID0+IHtcbiAgICAgICAgICBzZXQkOChwcmV2aWV3LmVsZW1lbnQsICdiYWNrZ3JvdW5kLWNvbG9yJywgJyMnICsgaGV4LnZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZmFjdG9yeSA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICAgICAgcmVkOiBDZWxsKE9wdGlvbmFsLnNvbWUoMjU1KSksXG4gICAgICAgICAgZ3JlZW46IENlbGwoT3B0aW9uYWwuc29tZSgyNTUpKSxcbiAgICAgICAgICBibHVlOiBDZWxsKE9wdGlvbmFsLnNvbWUoMjU1KSksXG4gICAgICAgICAgaGV4OiBDZWxsKE9wdGlvbmFsLnNvbWUoJ2ZmZmZmZicpKVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjb3B5SGV4VG9SZ2IgPSAoZm9ybSwgaGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmdiID0gZnJvbUhleChoZXgpO1xuICAgICAgICAgIGNvcHlSZ2JUb0Zvcm0oZm9ybSwgcmdiKTtcbiAgICAgICAgICBzZXRWYWx1ZVJnYihyZ2IpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBnZXQgPSBwcm9wID0+IHN0YXRlW3Byb3BdLmdldCgpO1xuICAgICAgICBjb25zdCBzZXQgPSAocHJvcCwgdmFsdWUpID0+IHtcbiAgICAgICAgICBzdGF0ZVtwcm9wXS5zZXQodmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBnZXRWYWx1ZVJnYiA9ICgpID0+IGdldCgncmVkJykuYmluZChyZWQgPT4gZ2V0KCdncmVlbicpLmJpbmQoZ3JlZW4gPT4gZ2V0KCdibHVlJykubWFwKGJsdWUgPT4gcmdiYUNvbG91cihyZWQsIGdyZWVuLCBibHVlLCAxKSkpKTtcbiAgICAgICAgY29uc3Qgc2V0VmFsdWVSZ2IgPSByZ2IgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZCA9IHJnYi5yZWQ7XG4gICAgICAgICAgY29uc3QgZ3JlZW4gPSByZ2IuZ3JlZW47XG4gICAgICAgICAgY29uc3QgYmx1ZSA9IHJnYi5ibHVlO1xuICAgICAgICAgIHNldCgncmVkJywgT3B0aW9uYWwuc29tZShyZWQpKTtcbiAgICAgICAgICBzZXQoJ2dyZWVuJywgT3B0aW9uYWwuc29tZShncmVlbikpO1xuICAgICAgICAgIHNldCgnYmx1ZScsIE9wdGlvbmFsLnNvbWUoYmx1ZSkpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBvbkludmFsaWRJbnB1dCA9IChmb3JtLCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBzaW11bGF0ZWRFdmVudC5ldmVudDtcbiAgICAgICAgICBpZiAoZGF0YS50eXBlICE9PSAnaGV4Jykge1xuICAgICAgICAgICAgc2V0KGRhdGEudHlwZSwgT3B0aW9uYWwubm9uZSgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb25JbnZhbGlkSGV4eChmb3JtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG9uVmFsaWRIZXggPSAoZm9ybSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBvblZhbGlkSGV4eChmb3JtKTtcbiAgICAgICAgICBjb25zdCBoZXggPSBoZXhDb2xvdXIodmFsdWUpO1xuICAgICAgICAgIHNldCgnaGV4JywgT3B0aW9uYWwuc29tZShoZXgudmFsdWUpKTtcbiAgICAgICAgICBjb25zdCByZ2IgPSBmcm9tSGV4KGhleCk7XG4gICAgICAgICAgY29weVJnYlRvRm9ybShmb3JtLCByZ2IpO1xuICAgICAgICAgIHNldFZhbHVlUmdiKHJnYik7XG4gICAgICAgICAgZW1pdFdpdGgoZm9ybSwgZmllbGRzVXBkYXRlLCB7IGhleCB9KTtcbiAgICAgICAgICB1cGRhdGVQcmV2aWV3KGZvcm0sIGhleCk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG9uVmFsaWRSZ2IgPSAoZm9ybSwgcHJvcCwgdmFsdWUpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWwgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgICAgICAgIHNldChwcm9wLCBPcHRpb25hbC5zb21lKHZhbCkpO1xuICAgICAgICAgIGdldFZhbHVlUmdiKCkuZWFjaChyZ2IgPT4ge1xuICAgICAgICAgICAgY29uc3QgaGV4ID0gY29weVJnYlRvSGV4KGZvcm0sIHJnYik7XG4gICAgICAgICAgICBlbWl0V2l0aChmb3JtLCBmaWVsZHNVcGRhdGUsIHsgaGV4IH0pO1xuICAgICAgICAgICAgdXBkYXRlUHJldmlldyhmb3JtLCBoZXgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpc0hleElucHV0RXZlbnQgPSBkYXRhID0+IGRhdGEudHlwZSA9PT0gJ2hleCc7XG4gICAgICAgIGNvbnN0IG9uVmFsaWRJbnB1dCA9IChmb3JtLCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBzaW11bGF0ZWRFdmVudC5ldmVudDtcbiAgICAgICAgICBpZiAoaXNIZXhJbnB1dEV2ZW50KGRhdGEpKSB7XG4gICAgICAgICAgICBvblZhbGlkSGV4KGZvcm0sIGRhdGEudmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvblZhbGlkUmdiKGZvcm0sIGRhdGEudHlwZSwgZGF0YS52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBmb3JtUGFydFN0cmluZ3MgPSBrZXkgPT4gKHtcbiAgICAgICAgICBsYWJlbDogdHJhbnNsYXRlKHRyYW5zbGF0ZVByZWZpeCArIGtleSArICcubGFiZWwnKSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogdHJhbnNsYXRlKHRyYW5zbGF0ZVByZWZpeCArIGtleSArICcuZGVzY3JpcHRpb24nKVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVkU3RyaW5ncyA9IGZvcm1QYXJ0U3RyaW5ncygncmVkJyk7XG4gICAgICAgIGNvbnN0IGdyZWVuU3RyaW5ncyA9IGZvcm1QYXJ0U3RyaW5ncygnZ3JlZW4nKTtcbiAgICAgICAgY29uc3QgYmx1ZVN0cmluZ3MgPSBmb3JtUGFydFN0cmluZ3MoJ2JsdWUnKTtcbiAgICAgICAgY29uc3QgaGV4U3RyaW5ncyA9IGZvcm1QYXJ0U3RyaW5ncygnaGV4Jyk7XG4gICAgICAgIHJldHVybiBkZWVwTWVyZ2UoRm9ybS5za2V0Y2gocGFydHMgPT4gKHtcbiAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgIHRhZzogJ2Zvcm0nLFxuICAgICAgICAgICAgY2xhc3NlczogW2dldENsYXNzKCdyZ2ItZm9ybScpXSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgJ2FyaWEtbGFiZWwnOiB0cmFuc2xhdGUoJ2FyaWEuY29sb3IucGlja2VyJykgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgICAgcGFydHMuZmllbGQoJ3JlZCcsIEZvcm1GaWVsZC5za2V0Y2gocmVuZGVyVGV4dEZpZWxkKGlzUmdiYUNvbXBvbmVudCwgJ3JlZCcsIHJlZFN0cmluZ3MubGFiZWwsIHJlZFN0cmluZ3MuZGVzY3JpcHRpb24sIDI1NSkpKSxcbiAgICAgICAgICAgIHBhcnRzLmZpZWxkKCdncmVlbicsIEZvcm1GaWVsZC5za2V0Y2gocmVuZGVyVGV4dEZpZWxkKGlzUmdiYUNvbXBvbmVudCwgJ2dyZWVuJywgZ3JlZW5TdHJpbmdzLmxhYmVsLCBncmVlblN0cmluZ3MuZGVzY3JpcHRpb24sIDI1NSkpKSxcbiAgICAgICAgICAgIHBhcnRzLmZpZWxkKCdibHVlJywgRm9ybUZpZWxkLnNrZXRjaChyZW5kZXJUZXh0RmllbGQoaXNSZ2JhQ29tcG9uZW50LCAnYmx1ZScsIGJsdWVTdHJpbmdzLmxhYmVsLCBibHVlU3RyaW5ncy5kZXNjcmlwdGlvbiwgMjU1KSkpLFxuICAgICAgICAgICAgcGFydHMuZmllbGQoJ2hleCcsIEZvcm1GaWVsZC5za2V0Y2gocmVuZGVyVGV4dEZpZWxkKGlzSGV4U3RyaW5nLCAnaGV4JywgaGV4U3RyaW5ncy5sYWJlbCwgaGV4U3RyaW5ncy5kZXNjcmlwdGlvbiwgJ2ZmZmZmZicpKSksXG4gICAgICAgICAgICBtZW1QcmV2aWV3LmFzU3BlYygpXG4gICAgICAgICAgXSxcbiAgICAgICAgICBmb3JtQmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgICAgSW52YWxpZGF0aW5nLmNvbmZpZyh7IGludmFsaWRDbGFzczogZ2V0Q2xhc3MoJ2Zvcm0taW52YWxpZCcpIH0pLFxuICAgICAgICAgICAgY29uZmlnKCdyZ2ItZm9ybS1ldmVudHMnLCBbXG4gICAgICAgICAgICAgIHJ1biQxKHZhbGlkSW5wdXQsIG9uVmFsaWRJbnB1dCksXG4gICAgICAgICAgICAgIHJ1biQxKGludmFsaWRJbnB1dCwgb25JbnZhbGlkSW5wdXQpLFxuICAgICAgICAgICAgICBydW4kMSh2YWxpZGF0aW5nSW5wdXQsIG9uSW52YWxpZElucHV0KVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICBdKVxuICAgICAgICB9KSksIHtcbiAgICAgICAgICBhcGlzOiB7XG4gICAgICAgICAgICB1cGRhdGVIZXg6IChmb3JtLCBoZXgpID0+IHtcbiAgICAgICAgICAgICAgUmVwcmVzZW50aW5nLnNldFZhbHVlKGZvcm0sIHsgaGV4OiBoZXgudmFsdWUgfSk7XG4gICAgICAgICAgICAgIGNvcHlIZXhUb1JnYihmb3JtLCBoZXgpO1xuICAgICAgICAgICAgICB1cGRhdGVQcmV2aWV3KGZvcm0sIGhleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZ2JGb3JtU2tldGNoZXIgPSBzaW5nbGUoe1xuICAgICAgICBmYWN0b3J5LFxuICAgICAgICBuYW1lOiAnUmdiRm9ybScsXG4gICAgICAgIGNvbmZpZ0ZpZWxkczogW10sXG4gICAgICAgIGFwaXM6IHtcbiAgICAgICAgICB1cGRhdGVIZXg6IChhcGlzLCBmb3JtLCBoZXgpID0+IHtcbiAgICAgICAgICAgIGFwaXMudXBkYXRlSGV4KGZvcm0sIGhleCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBleHRyYUFwaXM6IHt9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZ2JGb3JtU2tldGNoZXI7XG4gICAgfTtcblxuICAgIGNvbnN0IHBhbGV0dGVGYWN0b3J5ID0gKF90cmFuc2xhdGUsIGdldENsYXNzKSA9PiB7XG4gICAgICBjb25zdCBzcGVjdHJ1bVBhcnQgPSBTbGlkZXIucGFydHMuc3BlY3RydW0oe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdjYW52YXMnLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3ByZXNlbnRhdGlvbicgfSxcbiAgICAgICAgICBjbGFzc2VzOiBbZ2V0Q2xhc3MoJ3N2LXBhbGV0dGUtc3BlY3RydW0nKV1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCB0aHVtYlBhcnQgPSBTbGlkZXIucGFydHMudGh1bWIoe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3ByZXNlbnRhdGlvbicgfSxcbiAgICAgICAgICBjbGFzc2VzOiBbZ2V0Q2xhc3MoJ3N2LXBhbGV0dGUtdGh1bWInKV0sXG4gICAgICAgICAgaW5uZXJIdG1sOiBgPGRpdiBjbGFzcz0keyBnZXRDbGFzcygnc3YtcGFsZXR0ZS1pbm5lci10aHVtYicpIH0gcm9sZT1cInByZXNlbnRhdGlvblwiPjwvZGl2PmBcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzZXRDb2xvdXIgPSAoY2FudmFzLCByZ2JhKSA9PiB7XG4gICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGNhbnZhcztcbiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIGlmIChjdHggPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHJnYmE7XG4gICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY29uc3QgZ3JkV2hpdGUgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQoMCwgMCwgd2lkdGgsIDApO1xuICAgICAgICBncmRXaGl0ZS5hZGRDb2xvclN0b3AoMCwgJ3JnYmEoMjU1LDI1NSwyNTUsMSknKTtcbiAgICAgICAgZ3JkV2hpdGUuYWRkQ29sb3JTdG9wKDEsICdyZ2JhKDI1NSwyNTUsMjU1LDApJyk7XG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBncmRXaGl0ZTtcbiAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICBjb25zdCBncmRCbGFjayA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCgwLCAwLCAwLCBoZWlnaHQpO1xuICAgICAgICBncmRCbGFjay5hZGRDb2xvclN0b3AoMCwgJ3JnYmEoMCwwLDAsMCknKTtcbiAgICAgICAgZ3JkQmxhY2suYWRkQ29sb3JTdG9wKDEsICdyZ2JhKDAsMCwwLDEpJyk7XG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBncmRCbGFjaztcbiAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldFBhbGV0dGVIdWUgPSAoc2xpZGVyLCBodWUpID0+IHtcbiAgICAgICAgY29uc3QgY2FudmFzID0gc2xpZGVyLmNvbXBvbmVudHMoKVswXS5lbGVtZW50LmRvbTtcbiAgICAgICAgY29uc3QgaHN2ID0gaHN2Q29sb3VyKGh1ZSwgMTAwLCAxMDApO1xuICAgICAgICBjb25zdCByZ2JhID0gZnJvbUhzdihoc3YpO1xuICAgICAgICBzZXRDb2xvdXIoY2FudmFzLCB0b1N0cmluZyhyZ2JhKSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0UGFsZXR0ZVRodW1iID0gKHNsaWRlciwgaGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGhzdiA9IGZyb21SZ2IoZnJvbUhleChoZXgpKTtcbiAgICAgICAgU2xpZGVyLnNldFZhbHVlKHNsaWRlciwge1xuICAgICAgICAgIHg6IGhzdi5zYXR1cmF0aW9uLFxuICAgICAgICAgIHk6IDEwMCAtIGhzdi52YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBmYWN0b3J5ID0gX2RldGFpbCA9PiB7XG4gICAgICAgIGNvbnN0IGdldEluaXRpYWxWYWx1ZSA9IGNvbnN0YW50JDEoe1xuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgb25DaGFuZ2UgPSAoc2xpZGVyLCBfdGh1bWIsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgZW1pdFdpdGgoc2xpZGVyLCBwYWxldHRlVXBkYXRlLCB7IHZhbHVlIH0pO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBvbkluaXQgPSAoX3NsaWRlciwgX3RodW1iLCBzcGVjdHJ1bSwgX3ZhbHVlKSA9PiB7XG4gICAgICAgICAgc2V0Q29sb3VyKHNwZWN0cnVtLmVsZW1lbnQuZG9tLCB0b1N0cmluZyhyZWQpKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2xpZGVyQmVoYXZpb3VycyA9IGRlcml2ZSQxKFtcbiAgICAgICAgICBDb21wb3NpbmcuY29uZmlnKHsgZmluZDogT3B0aW9uYWwuc29tZSB9KSxcbiAgICAgICAgICBGb2N1c2luZy5jb25maWcoe30pXG4gICAgICAgIF0pO1xuICAgICAgICByZXR1cm4gU2xpZGVyLnNrZXRjaCh7XG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgYXR0cmlidXRlczogeyByb2xlOiAncHJlc2VudGF0aW9uJyB9LFxuICAgICAgICAgICAgY2xhc3NlczogW2dldENsYXNzKCdzdi1wYWxldHRlJyldXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtb2RlbDoge1xuICAgICAgICAgICAgbW9kZTogJ3h5JyxcbiAgICAgICAgICAgIGdldEluaXRpYWxWYWx1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcm91bmRlZDogZmFsc2UsXG4gICAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgICAgc3BlY3RydW1QYXJ0LFxuICAgICAgICAgICAgdGh1bWJQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBvbkNoYW5nZSxcbiAgICAgICAgICBvbkluaXQsXG4gICAgICAgICAgc2xpZGVyQmVoYXZpb3Vyc1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzYXR1cmF0aW9uQnJpZ2h0bmVzc1BhbGV0dGVTa2V0Y2hlciA9IHNpbmdsZSh7XG4gICAgICAgIGZhY3RvcnksXG4gICAgICAgIG5hbWU6ICdTYXR1cmF0aW9uQnJpZ2h0bmVzc1BhbGV0dGUnLFxuICAgICAgICBjb25maWdGaWVsZHM6IFtdLFxuICAgICAgICBhcGlzOiB7XG4gICAgICAgICAgc2V0SHVlOiAoX2FwaXMsIHNsaWRlciwgaHVlKSA9PiB7XG4gICAgICAgICAgICBzZXRQYWxldHRlSHVlKHNsaWRlciwgaHVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldFRodW1iOiAoX2FwaXMsIHNsaWRlciwgaGV4KSA9PiB7XG4gICAgICAgICAgICBzZXRQYWxldHRlVGh1bWIoc2xpZGVyLCBoZXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXh0cmFBcGlzOiB7fVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc2F0dXJhdGlvbkJyaWdodG5lc3NQYWxldHRlU2tldGNoZXI7XG4gICAgfTtcblxuICAgIGNvbnN0IG1ha2VGYWN0b3J5ID0gKHRyYW5zbGF0ZSwgZ2V0Q2xhc3MpID0+IHtcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSBkZXRhaWwgPT4ge1xuICAgICAgICBjb25zdCByZ2JGb3JtID0gcmdiRm9ybUZhY3RvcnkodHJhbnNsYXRlLCBnZXRDbGFzcywgZGV0YWlsLm9uVmFsaWRIZXgsIGRldGFpbC5vbkludmFsaWRIZXgpO1xuICAgICAgICBjb25zdCBzYlBhbGV0dGUgPSBwYWxldHRlRmFjdG9yeSh0cmFuc2xhdGUsIGdldENsYXNzKTtcbiAgICAgICAgY29uc3QgaHVlU2xpZGVyVG9EZWdyZWVzID0gaHVlID0+ICgxMDAgLSBodWUpIC8gMTAwICogMzYwO1xuICAgICAgICBjb25zdCBodWVEZWdyZWVzVG9TbGlkZXIgPSBodWUgPT4gMTAwIC0gaHVlIC8gMzYwICogMTAwO1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgICAgICBwYWxldHRlUmdiYTogQ2VsbChyZWQpLFxuICAgICAgICAgIHBhbGV0dGVIdWU6IENlbGwoMClcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbWVtU2xpZGVyID0gcmVjb3JkKHNsaWRlckZhY3RvcnkodHJhbnNsYXRlLCBnZXRDbGFzcykpO1xuICAgICAgICBjb25zdCBtZW1QYWxldHRlID0gcmVjb3JkKHNiUGFsZXR0ZS5za2V0Y2goe30pKTtcbiAgICAgICAgY29uc3QgbWVtUmdiID0gcmVjb3JkKHJnYkZvcm0uc2tldGNoKHt9KSk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZVBhbGV0dGUgPSAoYW55SW5TeXN0ZW0sIF9oZXgsIGh1ZSkgPT4ge1xuICAgICAgICAgIG1lbVBhbGV0dGUuZ2V0T3B0KGFueUluU3lzdGVtKS5lYWNoKHBhbGV0dGUgPT4ge1xuICAgICAgICAgICAgc2JQYWxldHRlLnNldEh1ZShwYWxldHRlLCBodWUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCB1cGRhdGVGaWVsZHMgPSAoYW55SW5TeXN0ZW0sIGhleCkgPT4ge1xuICAgICAgICAgIG1lbVJnYi5nZXRPcHQoYW55SW5TeXN0ZW0pLmVhY2goZm9ybSA9PiB7XG4gICAgICAgICAgICByZ2JGb3JtLnVwZGF0ZUhleChmb3JtLCBoZXgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCB1cGRhdGVTbGlkZXIgPSAoYW55SW5TeXN0ZW0sIF9oZXgsIGh1ZSkgPT4ge1xuICAgICAgICAgIG1lbVNsaWRlci5nZXRPcHQoYW55SW5TeXN0ZW0pLmVhY2goc2xpZGVyID0+IHtcbiAgICAgICAgICAgIFNsaWRlci5zZXRWYWx1ZShzbGlkZXIsIGh1ZURlZ3JlZXNUb1NsaWRlcihodWUpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdXBkYXRlUGFsZXR0ZVRodW1iID0gKGFueUluU3lzdGVtLCBoZXgpID0+IHtcbiAgICAgICAgICBtZW1QYWxldHRlLmdldE9wdChhbnlJblN5c3RlbSkuZWFjaChwYWxldHRlID0+IHtcbiAgICAgICAgICAgIHNiUGFsZXR0ZS5zZXRUaHVtYihwYWxldHRlLCBoZXgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCB1cGRhdGVTdGF0ZSA9IChoZXgsIGh1ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJnYmEgPSBmcm9tSGV4KGhleCk7XG4gICAgICAgICAgc3RhdGUucGFsZXR0ZVJnYmEuc2V0KHJnYmEpO1xuICAgICAgICAgIHN0YXRlLnBhbGV0dGVIdWUuc2V0KGh1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJ1blVwZGF0ZXMgPSAoYW55SW5TeXN0ZW0sIGhleCwgaHVlLCB1cGRhdGVzKSA9PiB7XG4gICAgICAgICAgdXBkYXRlU3RhdGUoaGV4LCBodWUpO1xuICAgICAgICAgIGVhY2gkMSh1cGRhdGVzLCB1cGRhdGUgPT4ge1xuICAgICAgICAgICAgdXBkYXRlKGFueUluU3lzdGVtLCBoZXgsIGh1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG9uUGFsZXR0ZVVwZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCB1cGRhdGVzID0gW3VwZGF0ZUZpZWxkc107XG4gICAgICAgICAgcmV0dXJuIChmb3JtLCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBzaW11bGF0ZWRFdmVudC5ldmVudC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IG9sZEh1ZSA9IHN0YXRlLnBhbGV0dGVIdWUuZ2V0KCk7XG4gICAgICAgICAgICBjb25zdCBuZXdIc3YgPSBoc3ZDb2xvdXIob2xkSHVlLCB2YWx1ZS54LCAxMDAgLSB2YWx1ZS55KTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0hleCA9IGhzdlRvSGV4KG5ld0hzdik7XG4gICAgICAgICAgICBydW5VcGRhdGVzKGZvcm0sIG5ld0hleCwgb2xkSHVlLCB1cGRhdGVzKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBvblNsaWRlclVwZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCB1cGRhdGVzID0gW1xuICAgICAgICAgICAgdXBkYXRlUGFsZXR0ZSxcbiAgICAgICAgICAgIHVwZGF0ZUZpZWxkc1xuICAgICAgICAgIF07XG4gICAgICAgICAgcmV0dXJuIChmb3JtLCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaHVlID0gaHVlU2xpZGVyVG9EZWdyZWVzKHNpbXVsYXRlZEV2ZW50LmV2ZW50LnZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IG9sZFJnYiA9IHN0YXRlLnBhbGV0dGVSZ2JhLmdldCgpO1xuICAgICAgICAgICAgY29uc3Qgb2xkSHN2ID0gZnJvbVJnYihvbGRSZ2IpO1xuICAgICAgICAgICAgY29uc3QgbmV3SHN2ID0gaHN2Q29sb3VyKGh1ZSwgb2xkSHN2LnNhdHVyYXRpb24sIG9sZEhzdi52YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBuZXdIZXggPSBoc3ZUb0hleChuZXdIc3YpO1xuICAgICAgICAgICAgcnVuVXBkYXRlcyhmb3JtLCBuZXdIZXgsIGh1ZSwgdXBkYXRlcyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb25GaWVsZHNVcGRhdGUgPSAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlcyA9IFtcbiAgICAgICAgICAgIHVwZGF0ZVBhbGV0dGUsXG4gICAgICAgICAgICB1cGRhdGVTbGlkZXIsXG4gICAgICAgICAgICB1cGRhdGVQYWxldHRlVGh1bWJcbiAgICAgICAgICBdO1xuICAgICAgICAgIHJldHVybiAoZm9ybSwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhleCA9IHNpbXVsYXRlZEV2ZW50LmV2ZW50LmhleDtcbiAgICAgICAgICAgIGNvbnN0IGhzdiA9IGhleFRvSHN2KGhleCk7XG4gICAgICAgICAgICBydW5VcGRhdGVzKGZvcm0sIGhleCwgaHN2Lmh1ZSwgdXBkYXRlcyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB1aWQ6IGRldGFpbC51aWQsXG4gICAgICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICAgIG1lbVBhbGV0dGUuYXNTcGVjKCksXG4gICAgICAgICAgICBtZW1TbGlkZXIuYXNTcGVjKCksXG4gICAgICAgICAgICBtZW1SZ2IuYXNTcGVjKClcbiAgICAgICAgICBdLFxuICAgICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICAgIGNvbmZpZygnY29sb3VyLXBpY2tlci1ldmVudHMnLCBbXG4gICAgICAgICAgICAgIHJ1biQxKGZpZWxkc1VwZGF0ZSwgb25GaWVsZHNVcGRhdGUoKSksXG4gICAgICAgICAgICAgIHJ1biQxKHBhbGV0dGVVcGRhdGUsIG9uUGFsZXR0ZVVwZGF0ZSgpKSxcbiAgICAgICAgICAgICAgcnVuJDEoc2xpZGVyVXBkYXRlLCBvblNsaWRlclVwZGF0ZSgpKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBDb21wb3NpbmcuY29uZmlnKHsgZmluZDogY29tcCA9PiBtZW1SZ2IuZ2V0T3B0KGNvbXApIH0pLFxuICAgICAgICAgICAgS2V5aW5nLmNvbmZpZyh7IG1vZGU6ICdhY3ljbGljJyB9KVxuICAgICAgICAgIF0pXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uc3QgY29sb3VyUGlja2VyU2tldGNoZXIgPSBzaW5nbGUoe1xuICAgICAgICBuYW1lOiAnQ29sb3VyUGlja2VyJyxcbiAgICAgICAgY29uZmlnRmllbGRzOiBbXG4gICAgICAgICAgcmVxdWlyZWQkMSgnZG9tJyksXG4gICAgICAgICAgZGVmYXVsdGVkKCdvblZhbGlkSGV4Jywgbm9vcCksXG4gICAgICAgICAgZGVmYXVsdGVkKCdvbkludmFsaWRIZXgnLCBub29wKVxuICAgICAgICBdLFxuICAgICAgICBmYWN0b3J5XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb2xvdXJQaWNrZXJTa2V0Y2hlcjtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2VsZiA9ICgpID0+IENvbXBvc2luZy5jb25maWcoeyBmaW5kOiBPcHRpb25hbC5zb21lIH0pO1xuICAgIGNvbnN0IG1lbWVudG8kMSA9IG1lbSA9PiBDb21wb3NpbmcuY29uZmlnKHsgZmluZDogbWVtLmdldE9wdCB9KTtcbiAgICBjb25zdCBjaGlsZEF0ID0gaW5kZXggPT4gQ29tcG9zaW5nLmNvbmZpZyh7IGZpbmQ6IGNvbXAgPT4gY2hpbGQkMihjb21wLmVsZW1lbnQsIGluZGV4KS5iaW5kKGVsZW1lbnQgPT4gY29tcC5nZXRTeXN0ZW0oKS5nZXRCeURvbShlbGVtZW50KS50b09wdGlvbmFsKCkpIH0pO1xuICAgIGNvbnN0IENvbXBvc2luZ0NvbmZpZ3MgPSB7XG4gICAgICBzZWxmLFxuICAgICAgbWVtZW50bzogbWVtZW50byQxLFxuICAgICAgY2hpbGRBdFxuICAgIH07XG5cbiAgICBjb25zdCBwcm9jZXNzb3JzID0gb2JqT2YoW1xuICAgICAgZGVmYXVsdGVkKCdwcmVwcm9jZXNzJywgaWRlbnRpdHkpLFxuICAgICAgZGVmYXVsdGVkKCdwb3N0cHJvY2VzcycsIGlkZW50aXR5KVxuICAgIF0pO1xuICAgIGNvbnN0IG1lbWVudG8gPSAobWVtLCByYXdQcm9jZXNzb3JzKSA9PiB7XG4gICAgICBjb25zdCBwcyA9IGFzUmF3T3JEaWUkMSgnUmVwcmVzZW50aW5nQ29uZmlncy5tZW1lbnRvIHByb2Nlc3NvcnMnLCBwcm9jZXNzb3JzLCByYXdQcm9jZXNzb3JzKTtcbiAgICAgIHJldHVybiBSZXByZXNlbnRpbmcuY29uZmlnKHtcbiAgICAgICAgc3RvcmU6IHtcbiAgICAgICAgICBtb2RlOiAnbWFudWFsJyxcbiAgICAgICAgICBnZXRWYWx1ZTogY29tcCA9PiB7XG4gICAgICAgICAgICBjb25zdCBvdGhlciA9IG1lbS5nZXQoY29tcCk7XG4gICAgICAgICAgICBjb25zdCByYXdWYWx1ZSA9IFJlcHJlc2VudGluZy5nZXRWYWx1ZShvdGhlcik7XG4gICAgICAgICAgICByZXR1cm4gcHMucG9zdHByb2Nlc3MocmF3VmFsdWUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0VmFsdWU6IChjb21wLCByYXdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBwcy5wcmVwcm9jZXNzKHJhd1ZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IG90aGVyID0gbWVtLmdldChjb21wKTtcbiAgICAgICAgICAgIFJlcHJlc2VudGluZy5zZXRWYWx1ZShvdGhlciwgbmV3VmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCB3aXRoQ29tcCA9IChvcHRJbml0aWFsVmFsdWUsIGdldHRlciwgc2V0dGVyKSA9PiBSZXByZXNlbnRpbmcuY29uZmlnKHtcbiAgICAgIHN0b3JlOiB7XG4gICAgICAgIG1vZGU6ICdtYW51YWwnLFxuICAgICAgICAuLi5vcHRJbml0aWFsVmFsdWUubWFwKGluaXRpYWxWYWx1ZSA9PiAoeyBpbml0aWFsVmFsdWUgfSkpLmdldE9yKHt9KSxcbiAgICAgICAgZ2V0VmFsdWU6IGdldHRlcixcbiAgICAgICAgc2V0VmFsdWU6IHNldHRlclxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHdpdGhFbGVtZW50ID0gKGluaXRpYWxWYWx1ZSwgZ2V0dGVyLCBzZXR0ZXIpID0+IHdpdGhDb21wKGluaXRpYWxWYWx1ZSwgYyA9PiBnZXR0ZXIoYy5lbGVtZW50KSwgKGMsIHYpID0+IHNldHRlcihjLmVsZW1lbnQsIHYpKTtcbiAgICBjb25zdCBkb21IdG1sID0gb3B0SW5pdGlhbFZhbHVlID0+IHdpdGhFbGVtZW50KG9wdEluaXRpYWxWYWx1ZSwgZ2V0JDksIHNldCQ2KTtcbiAgICBjb25zdCBtZW1vcnkgPSBpbml0aWFsVmFsdWUgPT4gUmVwcmVzZW50aW5nLmNvbmZpZyh7XG4gICAgICBzdG9yZToge1xuICAgICAgICBtb2RlOiAnbWVtb3J5JyxcbiAgICAgICAgaW5pdGlhbFZhbHVlXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBlbmdsaXNoID0ge1xuICAgICAgJ2NvbG9yY3VzdG9tLnJnYi5yZWQubGFiZWwnOiAnUicsXG4gICAgICAnY29sb3JjdXN0b20ucmdiLnJlZC5kZXNjcmlwdGlvbic6ICdSZWQgY29tcG9uZW50JyxcbiAgICAgICdjb2xvcmN1c3RvbS5yZ2IuZ3JlZW4ubGFiZWwnOiAnRycsXG4gICAgICAnY29sb3JjdXN0b20ucmdiLmdyZWVuLmRlc2NyaXB0aW9uJzogJ0dyZWVuIGNvbXBvbmVudCcsXG4gICAgICAnY29sb3JjdXN0b20ucmdiLmJsdWUubGFiZWwnOiAnQicsXG4gICAgICAnY29sb3JjdXN0b20ucmdiLmJsdWUuZGVzY3JpcHRpb24nOiAnQmx1ZSBjb21wb25lbnQnLFxuICAgICAgJ2NvbG9yY3VzdG9tLnJnYi5oZXgubGFiZWwnOiAnIycsXG4gICAgICAnY29sb3JjdXN0b20ucmdiLmhleC5kZXNjcmlwdGlvbic6ICdIZXggY29sb3IgY29kZScsXG4gICAgICAnY29sb3JjdXN0b20ucmdiLnJhbmdlJzogJ1JhbmdlIDAgdG8gMjU1JyxcbiAgICAgICdhcmlhLmNvbG9yLnBpY2tlcic6ICdDb2xvciBQaWNrZXInLFxuICAgICAgJ2FyaWEuaW5wdXQuaW52YWxpZCc6ICdJbnZhbGlkIGlucHV0J1xuICAgIH07XG4gICAgY29uc3QgdHJhbnNsYXRlJDEgPSBwcm92aWRlckJhY2tzdGFnZSA9PiBrZXkgPT4ge1xuICAgICAgcmV0dXJuIHByb3ZpZGVyQmFja3N0YWdlLnRyYW5zbGF0ZShlbmdsaXNoW2tleV0pO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyQ29sb3JQaWNrZXIgPSAoX3NwZWMsIHByb3ZpZGVyQmFja3N0YWdlLCBpbml0aWFsRGF0YSkgPT4ge1xuICAgICAgY29uc3QgZ2V0Q2xhc3MgPSBrZXkgPT4gJ3RveC0nICsga2V5O1xuICAgICAgY29uc3QgY29sb3VyUGlja2VyRmFjdG9yeSA9IG1ha2VGYWN0b3J5KHRyYW5zbGF0ZSQxKHByb3ZpZGVyQmFja3N0YWdlKSwgZ2V0Q2xhc3MpO1xuICAgICAgY29uc3Qgb25WYWxpZEhleCA9IGZvcm0gPT4ge1xuICAgICAgICBlbWl0V2l0aChmb3JtLCBmb3JtQWN0aW9uRXZlbnQsIHtcbiAgICAgICAgICBuYW1lOiAnaGV4LXZhbGlkJyxcbiAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBvbkludmFsaWRIZXggPSBmb3JtID0+IHtcbiAgICAgICAgZW1pdFdpdGgoZm9ybSwgZm9ybUFjdGlvbkV2ZW50LCB7XG4gICAgICAgICAgbmFtZTogJ2hleC12YWxpZCcsXG4gICAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG1lbVBpY2tlciA9IHJlY29yZChjb2xvdXJQaWNrZXJGYWN0b3J5LnNrZXRjaCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogW2dldENsYXNzKCdjb2xvci1waWNrZXItY29udGFpbmVyJyldLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3ByZXNlbnRhdGlvbicgfVxuICAgICAgICB9LFxuICAgICAgICBvblZhbGlkSGV4LFxuICAgICAgICBvbkludmFsaWRIZXhcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRvbTogeyB0YWc6ICdkaXYnIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFttZW1QaWNrZXIuYXNTcGVjKCldLFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgd2l0aENvbXAoaW5pdGlhbERhdGEsIGNvbXAgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGlja2VyID0gbWVtUGlja2VyLmdldChjb21wKTtcbiAgICAgICAgICAgIGNvbnN0IG9wdFJnYkZvcm0gPSBDb21wb3NpbmcuZ2V0Q3VycmVudChwaWNrZXIpO1xuICAgICAgICAgICAgY29uc3Qgb3B0SGV4ID0gb3B0UmdiRm9ybS5iaW5kKHJnYkZvcm0gPT4ge1xuICAgICAgICAgICAgICBjb25zdCBmb3JtVmFsdWVzID0gUmVwcmVzZW50aW5nLmdldFZhbHVlKHJnYkZvcm0pO1xuICAgICAgICAgICAgICByZXR1cm4gZm9ybVZhbHVlcy5oZXg7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBvcHRIZXgubWFwKGhleCA9PiAnIycgKyByZW1vdmVMZWFkaW5nKGhleCwgJyMnKSkuZ2V0T3IoJycpO1xuICAgICAgICAgIH0sIChjb21wLCBuZXdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0dGVybiA9IC9eIyhbYS1mQS1GMC05XXszfSg/OlthLWZBLUYwLTldezN9KT8pLztcbiAgICAgICAgICAgIGNvbnN0IHZhbE9wdCA9IE9wdGlvbmFsLmZyb20ocGF0dGVybi5leGVjKG5ld1ZhbHVlKSkuYmluZChtYXRjaGVzID0+IGdldCRoKG1hdGNoZXMsIDEpKTtcbiAgICAgICAgICAgIGNvbnN0IHBpY2tlciA9IG1lbVBpY2tlci5nZXQoY29tcCk7XG4gICAgICAgICAgICBjb25zdCBvcHRSZ2JGb3JtID0gQ29tcG9zaW5nLmdldEN1cnJlbnQocGlja2VyKTtcbiAgICAgICAgICAgIG9wdFJnYkZvcm0uZm9sZCgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDYW4gbm90IGZpbmQgZm9ybScpO1xuICAgICAgICAgICAgfSwgcmdiRm9ybSA9PiB7XG4gICAgICAgICAgICAgIFJlcHJlc2VudGluZy5zZXRWYWx1ZShyZ2JGb3JtLCB7IGhleDogdmFsT3B0LmdldE9yKCcnKSB9KTtcbiAgICAgICAgICAgICAgRm9ybS5nZXRGaWVsZChyZ2JGb3JtLCAnaGV4JykuZWFjaChoZXhGaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgZW1pdChoZXhGaWVsZCwgaW5wdXQoKSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgQ29tcG9zaW5nQ29uZmlncy5zZWxmKClcbiAgICAgICAgXSlcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBnbG9iYWwkMiA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLlJlc291cmNlJyk7XG5cbiAgICBjb25zdCBpc09sZEN1c3RvbUVkaXRvciA9IHNwZWMgPT4gaGFzJDIoc3BlYywgJ2luaXQnKTtcbiAgICBjb25zdCByZW5kZXJDdXN0b21FZGl0b3IgPSBzcGVjID0+IHtcbiAgICAgIGNvbnN0IGVkaXRvckFwaSA9IHZhbHVlJDIoKTtcbiAgICAgIGNvbnN0IG1lbVJlcGxhY2VkID0gcmVjb3JkKHsgZG9tOiB7IHRhZzogc3BlYy50YWcgfSB9KTtcbiAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IHZhbHVlJDIoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtY3VzdG9tLWVkaXRvciddXG4gICAgICAgIH0sXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBjb25maWcoJ2N1c3RvbS1lZGl0b3ItZXZlbnRzJywgW3J1bk9uQXR0YWNoZWQoY29tcG9uZW50ID0+IHtcbiAgICAgICAgICAgICAgbWVtUmVwbGFjZWQuZ2V0T3B0KGNvbXBvbmVudCkuZWFjaCh0YSA9PiB7XG4gICAgICAgICAgICAgICAgKGlzT2xkQ3VzdG9tRWRpdG9yKHNwZWMpID8gc3BlYy5pbml0KHRhLmVsZW1lbnQuZG9tKSA6IGdsb2JhbCQyLmxvYWQoc3BlYy5zY3JpcHRJZCwgc3BlYy5zY3JpcHRVcmwpLnRoZW4oaW5pdCA9PiBpbml0KHRhLmVsZW1lbnQuZG9tLCBzcGVjLnNldHRpbmdzKSkpLnRoZW4oZWEgPT4ge1xuICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlLm9uKGN2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVhLnNldFZhbHVlKGN2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZS5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgZWRpdG9yQXBpLnNldChlYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSldKSxcbiAgICAgICAgICB3aXRoQ29tcChPcHRpb25hbC5ub25lKCksICgpID0+IGVkaXRvckFwaS5nZXQoKS5mb2xkKCgpID0+IGluaXRpYWxWYWx1ZS5nZXQoKS5nZXRPcignJyksIGVkID0+IGVkLmdldFZhbHVlKCkpLCAoY29tcG9uZW50LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgZWRpdG9yQXBpLmdldCgpLmZvbGQoKCkgPT4gaW5pdGlhbFZhbHVlLnNldCh2YWx1ZSksIGVkID0+IGVkLnNldFZhbHVlKHZhbHVlKSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgQ29tcG9zaW5nQ29uZmlncy5zZWxmKClcbiAgICAgICAgXSksXG4gICAgICAgIGNvbXBvbmVudHM6IFttZW1SZXBsYWNlZC5hc1NwZWMoKV1cbiAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBnbG9iYWwkMSA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLnV0aWwuVG9vbHMnKTtcblxuICAgIGNvbnN0IGZpbHRlckJ5RXh0ZW5zaW9uID0gKGZpbGVzLCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IGFsbG93ZWRJbWFnZUZpbGVUeXBlcyA9IGdsb2JhbCQxLmV4cGxvZGUocHJvdmlkZXJzQmFja3N0YWdlLmdldE9wdGlvbignaW1hZ2VzX2ZpbGVfdHlwZXMnKSk7XG4gICAgICBjb25zdCBpc0ZpbGVJbkFsbG93ZWRUeXBlcyA9IGZpbGUgPT4gZXhpc3RzKGFsbG93ZWRJbWFnZUZpbGVUeXBlcywgdHlwZSA9PiBlbmRzV2l0aChmaWxlLm5hbWUudG9Mb3dlckNhc2UoKSwgYC4keyB0eXBlLnRvTG93ZXJDYXNlKCkgfWApKTtcbiAgICAgIHJldHVybiBmaWx0ZXIkMihmcm9tKGZpbGVzKSwgaXNGaWxlSW5BbGxvd2VkVHlwZXMpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyRHJvcFpvbmUgPSAoc3BlYywgcHJvdmlkZXJzQmFja3N0YWdlLCBpbml0aWFsRGF0YSkgPT4ge1xuICAgICAgY29uc3Qgc3RvcHBlciA9IChfLCBzZSkgPT4ge1xuICAgICAgICBzZS5zdG9wKCk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VxdWVuY2UgPSBhY3Rpb25zID0+IChjb21wLCBzZSkgPT4ge1xuICAgICAgICBlYWNoJDEoYWN0aW9ucywgYSA9PiB7XG4gICAgICAgICAgYShjb21wLCBzZSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG9uRHJvcCA9IChjb21wLCBzZSkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghRGlzYWJsaW5nLmlzRGlzYWJsZWQoY29tcCkpIHtcbiAgICAgICAgICBjb25zdCB0cmFuc2ZlckV2ZW50ID0gc2UuZXZlbnQucmF3O1xuICAgICAgICAgIGhhbmRsZUZpbGVzKGNvbXAsIChfYSA9IHRyYW5zZmVyRXZlbnQuZGF0YVRyYW5zZmVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZmlsZXMpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25TZWxlY3QgPSAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHNpbXVsYXRlZEV2ZW50LmV2ZW50LnJhdy50YXJnZXQ7XG4gICAgICAgIGhhbmRsZUZpbGVzKGNvbXBvbmVudCwgaW5wdXQuZmlsZXMpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGhhbmRsZUZpbGVzID0gKGNvbXBvbmVudCwgZmlsZXMpID0+IHtcbiAgICAgICAgaWYgKGZpbGVzKSB7XG4gICAgICAgICAgUmVwcmVzZW50aW5nLnNldFZhbHVlKGNvbXBvbmVudCwgZmlsdGVyQnlFeHRlbnNpb24oZmlsZXMsIHByb3ZpZGVyc0JhY2tzdGFnZSkpO1xuICAgICAgICAgIGVtaXRXaXRoKGNvbXBvbmVudCwgZm9ybUNoYW5nZUV2ZW50LCB7IG5hbWU6IHNwZWMubmFtZSB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG1lbUlucHV0ID0gcmVjb3JkKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnaW5wdXQnLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdmaWxlJyxcbiAgICAgICAgICAgIGFjY2VwdDogJ2ltYWdlLyonXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdHlsZXM6IHsgZGlzcGxheTogJ25vbmUnIH1cbiAgICAgICAgfSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW2NvbmZpZygnaW5wdXQtZmlsZS1ldmVudHMnLCBbXG4gICAgICAgICAgICBjdXR0ZXIoY2xpY2soKSksXG4gICAgICAgICAgICBjdXR0ZXIodGFwKCkpXG4gICAgICAgICAgXSldKVxuICAgICAgfSk7XG4gICAgICBjb25zdCByZW5kZXJGaWVsZCA9IHMgPT4gKHtcbiAgICAgICAgdWlkOiBzLnVpZCxcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1kcm9wem9uZS1jb250YWluZXInXVxuICAgICAgICB9LFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgbWVtb3J5KGluaXRpYWxEYXRhLmdldE9yKFtdKSksXG4gICAgICAgICAgQ29tcG9zaW5nQ29uZmlncy5zZWxmKCksXG4gICAgICAgICAgRGlzYWJsaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgVG9nZ2xpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzOiAnZHJhZ2VudGVyJyxcbiAgICAgICAgICAgIHRvZ2dsZU9uRXhlY3V0ZTogZmFsc2VcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjb25maWcoJ2Ryb3B6b25lLWV2ZW50cycsIFtcbiAgICAgICAgICAgIHJ1biQxKCdkcmFnZW50ZXInLCBzZXF1ZW5jZShbXG4gICAgICAgICAgICAgIHN0b3BwZXIsXG4gICAgICAgICAgICAgIFRvZ2dsaW5nLnRvZ2dsZVxuICAgICAgICAgICAgXSkpLFxuICAgICAgICAgICAgcnVuJDEoJ2RyYWdsZWF2ZScsIHNlcXVlbmNlKFtcbiAgICAgICAgICAgICAgc3RvcHBlcixcbiAgICAgICAgICAgICAgVG9nZ2xpbmcudG9nZ2xlXG4gICAgICAgICAgICBdKSksXG4gICAgICAgICAgICBydW4kMSgnZHJhZ292ZXInLCBzdG9wcGVyKSxcbiAgICAgICAgICAgIHJ1biQxKCdkcm9wJywgc2VxdWVuY2UoW1xuICAgICAgICAgICAgICBzdG9wcGVyLFxuICAgICAgICAgICAgICBvbkRyb3BcbiAgICAgICAgICAgIF0pKSxcbiAgICAgICAgICAgIHJ1biQxKGNoYW5nZSgpLCBvblNlbGVjdClcbiAgICAgICAgICBdKVxuICAgICAgICBdKSxcbiAgICAgICAgY29tcG9uZW50czogW3tcbiAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1kcm9wem9uZSddLFxuICAgICAgICAgICAgICBzdHlsZXM6IHt9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZG9tOiB7IHRhZzogJ3AnIH0sXG4gICAgICAgICAgICAgICAgY29tcG9uZW50czogW3RleHQkMihwcm92aWRlcnNCYWNrc3RhZ2UudHJhbnNsYXRlKCdEcm9wIGFuIGltYWdlIGhlcmUnKSldXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIEJ1dHRvbi5za2V0Y2goe1xuICAgICAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICAgICAgdGFnOiAnYnV0dG9uJyxcbiAgICAgICAgICAgICAgICAgIHN0eWxlczogeyBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9LFxuICAgICAgICAgICAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICAgICAgICAgICAndG94LWJ1dHRvbicsXG4gICAgICAgICAgICAgICAgICAgICd0b3gtYnV0dG9uLS1zZWNvbmRhcnknXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgICAgICAgICB0ZXh0JDIocHJvdmlkZXJzQmFja3N0YWdlLnRyYW5zbGF0ZSgnQnJvd3NlIGZvciBhbiBpbWFnZScpKSxcbiAgICAgICAgICAgICAgICAgIG1lbUlucHV0LmFzU3BlYygpXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBhY3Rpb246IGNvbXAgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXRDb21wID0gbWVtSW5wdXQuZ2V0KGNvbXApO1xuICAgICAgICAgICAgICAgICAgaW5wdXRDb21wLmVsZW1lbnQuZG9tLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBidXR0b25CZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgICAgICAgICBUYWJzdG9wcGluZy5jb25maWcoe30pLFxuICAgICAgICAgICAgICAgICAgRGlzYWJsaW5nQ29uZmlncy5idXR0b24ocHJvdmlkZXJzQmFja3N0YWdlLmlzRGlzYWJsZWQpLFxuICAgICAgICAgICAgICAgICAgcmVjZWl2aW5nQ29uZmlnKClcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1dXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBMYWJlbCA9IHNwZWMubGFiZWwubWFwKGxhYmVsID0+IHJlbmRlckxhYmVsJDMobGFiZWwsIHByb3ZpZGVyc0JhY2tzdGFnZSkpO1xuICAgICAgY29uc3QgcEZpZWxkID0gRm9ybUZpZWxkLnBhcnRzLmZpZWxkKHsgZmFjdG9yeTogeyBza2V0Y2g6IHJlbmRlckZpZWxkIH0gfSk7XG4gICAgICByZXR1cm4gcmVuZGVyRm9ybUZpZWxkV2l0aChwTGFiZWwsIHBGaWVsZCwgWyd0b3gtZm9ybV9fZ3JvdXAtLXN0cmV0Y2hlZCddLCBbXSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlckdyaWQgPSAoc3BlYywgYmFja3N0YWdlKSA9PiAoe1xuICAgICAgZG9tOiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAndG94LWZvcm1fX2dyaWQnLFxuICAgICAgICAgIGB0b3gtZm9ybV9fZ3JpZC0tJHsgc3BlYy5jb2x1bW5zIH1jb2xgXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBjb21wb25lbnRzOiBtYXAkMihzcGVjLml0ZW1zLCBiYWNrc3RhZ2UuaW50ZXJwcmV0ZXIpXG4gICAgfSk7XG5cbiAgICBjb25zdCBhZGFwdGFibGUgPSAoZm4sIHJhdGUpID0+IHtcbiAgICAgIGxldCB0aW1lciA9IG51bGw7XG4gICAgICBsZXQgYXJncyA9IG51bGw7XG4gICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGlmICghaXNOdWxsKHRpbWVyKSkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICAgIGFyZ3MgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgdGhyb3R0bGUgPSAoLi4ubmV3QXJncykgPT4ge1xuICAgICAgICBhcmdzID0gbmV3QXJncztcbiAgICAgICAgaWYgKGlzTnVsbCh0aW1lcikpIHtcbiAgICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVtcEFyZ3MgPSBhcmdzO1xuICAgICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICAgICAgYXJncyA9IG51bGw7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCB0ZW1wQXJncyk7XG4gICAgICAgICAgfSwgcmF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjYW5jZWwsXG4gICAgICAgIHRocm90dGxlXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZmlyc3QgPSAoZm4sIHJhdGUpID0+IHtcbiAgICAgIGxldCB0aW1lciA9IG51bGw7XG4gICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGlmICghaXNOdWxsKHRpbWVyKSkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgdGhyb3R0bGUgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoaXNOdWxsKHRpbWVyKSkge1xuICAgICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICB9LCByYXRlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNhbmNlbCxcbiAgICAgICAgdGhyb3R0bGVcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBsYXN0ID0gKGZuLCByYXRlKSA9PiB7XG4gICAgICBsZXQgdGltZXIgPSBudWxsO1xuICAgICAgY29uc3QgY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWlzTnVsbCh0aW1lcikpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHRocm90dGxlID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgY2FuY2VsKCk7XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICB9LCByYXRlKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjYW5jZWwsXG4gICAgICAgIHRocm90dGxlXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBiZWZvcmVPYmplY3QgPSBnZW5lcmF0ZSQ2KCdhbGxveS1mYWtlLWJlZm9yZS10YWJzdG9wJyk7XG4gICAgY29uc3QgYWZ0ZXJPYmplY3QgPSBnZW5lcmF0ZSQ2KCdhbGxveS1mYWtlLWFmdGVyLXRhYnN0b3AnKTtcbiAgICBjb25zdCBjcmFmdFdpdGhDbGFzc2VzID0gY2xhc3NlcyA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIHN0eWxlczoge1xuICAgICAgICAgICAgd2lkdGg6ICcxcHgnLFxuICAgICAgICAgICAgaGVpZ2h0OiAnMXB4JyxcbiAgICAgICAgICAgIG91dGxpbmU6ICdub25lJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgYXR0cmlidXRlczogeyB0YWJpbmRleDogJzAnIH0sXG4gICAgICAgICAgY2xhc3Nlc1xuICAgICAgICB9LFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgRm9jdXNpbmcuY29uZmlnKHsgaWdub3JlOiB0cnVlIH0pLFxuICAgICAgICAgIFRhYnN0b3BwaW5nLmNvbmZpZyh7fSlcbiAgICAgICAgXSlcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjcmFmdCA9IChjb250YWluZXJDbGFzc2VzLCBzcGVjKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAgICd0b3gtbmF2b2JqJyxcbiAgICAgICAgICAgIC4uLmNvbnRhaW5lckNsYXNzZXMuZ2V0T3IoW10pXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgY3JhZnRXaXRoQ2xhc3NlcyhbYmVmb3JlT2JqZWN0XSksXG4gICAgICAgICAgc3BlYyxcbiAgICAgICAgICBjcmFmdFdpdGhDbGFzc2VzKFthZnRlck9iamVjdF0pXG4gICAgICAgIF0sXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtDb21wb3NpbmdDb25maWdzLmNoaWxkQXQoMSldKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHRyaWdnZXJUYWIgPSAocGxhY2Vob2xkZXIsIHNoaWZ0S2V5KSA9PiB7XG4gICAgICBlbWl0V2l0aChwbGFjZWhvbGRlciwga2V5ZG93bigpLCB7XG4gICAgICAgIHJhdzoge1xuICAgICAgICAgIHdoaWNoOiA5LFxuICAgICAgICAgIHNoaWZ0S2V5XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25Gb2N1cyA9IChjb250YWluZXIsIHRhcmdldENvbXApID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRhcmdldENvbXAuZWxlbWVudDtcbiAgICAgIGlmIChoYXModGFyZ2V0LCBiZWZvcmVPYmplY3QpKSB7XG4gICAgICAgIHRyaWdnZXJUYWIoY29udGFpbmVyLCB0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAoaGFzKHRhcmdldCwgYWZ0ZXJPYmplY3QpKSB7XG4gICAgICAgIHRyaWdnZXJUYWIoY29udGFpbmVyLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc1BzZXVkb1N0b3AgPSBlbGVtZW50ID0+IHtcbiAgICAgIHJldHVybiBjbG9zZXN0KGVsZW1lbnQsIFtcbiAgICAgICAgJy4nICsgYmVmb3JlT2JqZWN0LFxuICAgICAgICAnLicgKyBhZnRlck9iamVjdFxuICAgICAgXS5qb2luKCcsJyksIG5ldmVyKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGlhbG9nQ2hhbm5lbCA9IGdlbmVyYXRlJDYoJ3VwZGF0ZS1kaWFsb2cnKTtcbiAgICBjb25zdCB0aXRsZUNoYW5uZWwgPSBnZW5lcmF0ZSQ2KCd1cGRhdGUtdGl0bGUnKTtcbiAgICBjb25zdCBib2R5Q2hhbm5lbCA9IGdlbmVyYXRlJDYoJ3VwZGF0ZS1ib2R5Jyk7XG4gICAgY29uc3QgZm9vdGVyQ2hhbm5lbCA9IGdlbmVyYXRlJDYoJ3VwZGF0ZS1mb290ZXInKTtcbiAgICBjb25zdCBib2R5U2VuZE1lc3NhZ2VDaGFubmVsID0gZ2VuZXJhdGUkNignYm9keS1zZW5kLW1lc3NhZ2UnKTtcbiAgICBjb25zdCBkaWFsb2dGb2N1c1NoaWZ0ZWRDaGFubmVsID0gZ2VuZXJhdGUkNignZGlhbG9nLWZvY3VzLXNoaWZ0ZWQnKTtcblxuICAgIGNvbnN0IGJyb3dzZXIgPSBkZXRlY3QkMigpLmJyb3dzZXI7XG4gICAgY29uc3QgaXNTYWZhcmkgPSBicm93c2VyLmlzU2FmYXJpKCk7XG4gICAgY29uc3QgaXNGaXJlZm94ID0gYnJvd3Nlci5pc0ZpcmVmb3goKTtcbiAgICBjb25zdCBpc1NhZmFyaU9yRmlyZWZveCA9IGlzU2FmYXJpIHx8IGlzRmlyZWZveDtcbiAgICBjb25zdCBpc0Nocm9taXVtID0gYnJvd3Nlci5pc0Nocm9taXVtKCk7XG4gICAgY29uc3QgaXNFbGVtZW50U2Nyb2xsQXRCb3R0b20gPSAoe3Njcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHR9KSA9PiBNYXRoLmNlaWwoc2Nyb2xsVG9wKSArIGNsaWVudEhlaWdodCA+PSBzY3JvbGxIZWlnaHQ7XG4gICAgY29uc3Qgc2Nyb2xsVG9ZID0gKHdpbiwgeSkgPT4gd2luLnNjcm9sbFRvKDAsIHkgPT09ICdib3R0b20nID8gOTk5OTk5OTkgOiB5KTtcbiAgICBjb25zdCBnZXRTY3JvbGxpbmdFbGVtZW50ID0gKGRvYywgaHRtbCkgPT4ge1xuICAgICAgY29uc3QgYm9keSA9IGRvYy5ib2R5O1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oIS9ePCFET0NUWVBFIChodG1sfEhUTUwpLy50ZXN0KGh0bWwpICYmICghaXNDaHJvbWl1bSAmJiAhaXNTYWZhcmkgfHwgaXNOb25OdWxsYWJsZShib2R5KSAmJiAoYm9keS5zY3JvbGxUb3AgIT09IDAgfHwgTWF0aC5hYnMoYm9keS5zY3JvbGxIZWlnaHQgLSBib2R5LmNsaWVudEhlaWdodCkgPiAxKSkgPyBib2R5IDogZG9jLmRvY3VtZW50RWxlbWVudCk7XG4gICAgfTtcbiAgICBjb25zdCB3cml0ZVZhbHVlID0gKGlmcmFtZUVsZW1lbnQsIGh0bWwsIGZhbGxiYWNrRm4pID0+IHtcbiAgICAgIGNvbnN0IGlmcmFtZSA9IGlmcmFtZUVsZW1lbnQuZG9tO1xuICAgICAgT3B0aW9uYWwuZnJvbShpZnJhbWUuY29udGVudERvY3VtZW50KS5mb2xkKGZhbGxiYWNrRm4sIGRvYyA9PiB7XG4gICAgICAgIGxldCBsYXN0U2Nyb2xsVG9wID0gMDtcbiAgICAgICAgY29uc3QgaXNTY3JvbGxBdEJvdHRvbSA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jLCBodG1sKS5tYXAoZWwgPT4ge1xuICAgICAgICAgIGxhc3RTY3JvbGxUb3AgPSBlbC5zY3JvbGxUb3A7XG4gICAgICAgICAgcmV0dXJuIGVsO1xuICAgICAgICB9KS5mb3JhbGwoaXNFbGVtZW50U2Nyb2xsQXRCb3R0b20pO1xuICAgICAgICBjb25zdCBzY3JvbGxBZnRlcldyaXRlID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHdpbiA9IGlmcmFtZS5jb250ZW50V2luZG93O1xuICAgICAgICAgIGlmIChpc05vbk51bGxhYmxlKHdpbikpIHtcbiAgICAgICAgICAgIGlmIChpc1Njcm9sbEF0Qm90dG9tKSB7XG4gICAgICAgICAgICAgIHNjcm9sbFRvWSh3aW4sICdib3R0b20nKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzU2Nyb2xsQXRCb3R0b20gJiYgaXNTYWZhcmlPckZpcmVmb3ggJiYgbGFzdFNjcm9sbFRvcCAhPT0gMCkge1xuICAgICAgICAgICAgICBzY3JvbGxUb1kod2luLCBsYXN0U2Nyb2xsVG9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChpc1NhZmFyaSkge1xuICAgICAgICAgIGlmcmFtZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgc2Nyb2xsQWZ0ZXJXcml0ZSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGRvYy5vcGVuKCk7XG4gICAgICAgIGRvYy53cml0ZShodG1sKTtcbiAgICAgICAgZG9jLmNsb3NlKCk7XG4gICAgICAgIGlmICghaXNTYWZhcmkpIHtcbiAgICAgICAgICBzY3JvbGxBZnRlcldyaXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgdGhyb3R0bGVJbnRlcnZhbCA9IHNvbWVJZihpc1NhZmFyaU9yRmlyZWZveCwgaXNTYWZhcmkgPyA1MDAgOiAyMDApO1xuICAgIGNvbnN0IHdyaXRlVmFsdWVUaHJvdHRsZXIgPSB0aHJvdHRsZUludGVydmFsLm1hcChpbnRlcnZhbCA9PiBhZGFwdGFibGUod3JpdGVWYWx1ZSwgaW50ZXJ2YWwpKTtcbiAgICBjb25zdCBnZXREeW5hbWljU291cmNlID0gKGluaXRpYWxEYXRhLCBzdHJlYW0pID0+IHtcbiAgICAgIGNvbnN0IGNhY2hlZFZhbHVlID0gQ2VsbChpbml0aWFsRGF0YS5nZXRPcignJykpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0VmFsdWU6IF9mcmFtZUNvbXBvbmVudCA9PiBjYWNoZWRWYWx1ZS5nZXQoKSxcbiAgICAgICAgc2V0VmFsdWU6IChmcmFtZUNvbXBvbmVudCwgaHRtbCkgPT4ge1xuICAgICAgICAgIGlmIChjYWNoZWRWYWx1ZS5nZXQoKSAhPT0gaHRtbCkge1xuICAgICAgICAgICAgY29uc3QgaWZyYW1lRWxlbWVudCA9IGZyYW1lQ29tcG9uZW50LmVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBzZXRTcmNkb2NWYWx1ZSA9ICgpID0+IHNldCQ5KGlmcmFtZUVsZW1lbnQsICdzcmNkb2MnLCBodG1sKTtcbiAgICAgICAgICAgIGlmIChzdHJlYW0pIHtcbiAgICAgICAgICAgICAgd3JpdGVWYWx1ZVRocm90dGxlci5mb2xkKGNvbnN0YW50JDEod3JpdGVWYWx1ZSksIHRocm90dGxlciA9PiB0aHJvdHRsZXIudGhyb3R0bGUpKGlmcmFtZUVsZW1lbnQsIGh0bWwsIHNldFNyY2RvY1ZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNldFNyY2RvY1ZhbHVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhY2hlZFZhbHVlLnNldChodG1sKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlcklGcmFtZSA9IChzcGVjLCBwcm92aWRlcnNCYWNrc3RhZ2UsIGluaXRpYWxEYXRhKSA9PiB7XG4gICAgICBjb25zdCBiYXNlQ2xhc3MgPSAndG94LWRpYWxvZ19faWZyYW1lJztcbiAgICAgIGNvbnN0IG9wYXF1ZUNsYXNzID0gc3BlYy50cmFuc3BhcmVudCA/IFtdIDogW2AkeyBiYXNlQ2xhc3MgfS0tb3BhcXVlYF07XG4gICAgICBjb25zdCBjb250YWluZXJCb3JkZXJlZENsYXNzID0gc3BlYy5ib3JkZXIgPyBbYHRveC1uYXZvYmotYm9yZGVyZWRgXSA6IFtdO1xuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgLi4uc3BlYy5sYWJlbC5tYXAodGl0bGUgPT4gKHsgdGl0bGUgfSkpLmdldE9yKHt9KSxcbiAgICAgICAgLi4uaW5pdGlhbERhdGEubWFwKGh0bWwgPT4gKHsgc3JjZG9jOiBodG1sIH0pKS5nZXRPcih7fSksXG4gICAgICAgIC4uLnNwZWMuc2FuZGJveGVkID8geyBzYW5kYm94OiAnYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbicgfSA6IHt9XG4gICAgICB9O1xuICAgICAgY29uc3Qgc291cmNpbmcgPSBnZXREeW5hbWljU291cmNlKGluaXRpYWxEYXRhLCBzcGVjLnN0cmVhbUNvbnRlbnQpO1xuICAgICAgY29uc3QgcExhYmVsID0gc3BlYy5sYWJlbC5tYXAobGFiZWwgPT4gcmVuZGVyTGFiZWwkMyhsYWJlbCwgcHJvdmlkZXJzQmFja3N0YWdlKSk7XG4gICAgICBjb25zdCBmYWN0b3J5ID0gbmV3U3BlYyA9PiBjcmFmdChPcHRpb25hbC5mcm9tKGNvbnRhaW5lckJvcmRlcmVkQ2xhc3MpLCB7XG4gICAgICAgIHVpZDogbmV3U3BlYy51aWQsXG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2lmcmFtZScsXG4gICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICBjbGFzc2VzOiBbXG4gICAgICAgICAgICBiYXNlQ2xhc3MsXG4gICAgICAgICAgICAuLi5vcGFxdWVDbGFzc1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIFRhYnN0b3BwaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgRm9jdXNpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICB3aXRoQ29tcChpbml0aWFsRGF0YSwgc291cmNpbmcuZ2V0VmFsdWUsIHNvdXJjaW5nLnNldFZhbHVlKSxcbiAgICAgICAgICBSZWNlaXZpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIGNoYW5uZWxzOiB7XG4gICAgICAgICAgICAgIFtkaWFsb2dGb2N1c1NoaWZ0ZWRDaGFubmVsXToge1xuICAgICAgICAgICAgICAgIG9uUmVjZWl2ZTogKGNvbXAsIG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubmV3Rm9jdXMuZWFjaChuZXdGb2N1cyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQoY29tcC5lbGVtZW50KS5lYWNoKHBhcmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgZiA9IGVxKGNvbXAuZWxlbWVudCwgbmV3Rm9jdXMpID8gYWRkJDIgOiByZW1vdmUkMjtcbiAgICAgICAgICAgICAgICAgICAgICBmKHBhcmVudCwgJ3RveC1uYXZvYmotYm9yZGVyZWQtZm9jdXMnKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdKVxuICAgICAgfSk7XG4gICAgICBjb25zdCBwRmllbGQgPSBGb3JtRmllbGQucGFydHMuZmllbGQoeyBmYWN0b3J5OiB7IHNrZXRjaDogZmFjdG9yeSB9IH0pO1xuICAgICAgcmV0dXJuIHJlbmRlckZvcm1GaWVsZFdpdGgocExhYmVsLCBwRmllbGQsIFsndG94LWZvcm1fX2dyb3VwLS1zdHJldGNoZWQnXSwgW10pO1xuICAgIH07XG5cbiAgICBjb25zdCBpbWFnZSA9IGltYWdlID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGxvYWRlZCA9ICgpID0+IHtcbiAgICAgICAgZGVzdHJveSgpO1xuICAgICAgICByZXNvbHZlKGltYWdlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBsaXN0ZW5lcnMgPSBbXG4gICAgICAgIGJpbmQoaW1hZ2UsICdsb2FkJywgbG9hZGVkKSxcbiAgICAgICAgYmluZChpbWFnZSwgJ2Vycm9yJywgKCkgPT4ge1xuICAgICAgICAgIGRlc3Ryb3koKTtcbiAgICAgICAgICByZWplY3QoJ1VuYWJsZSB0byBsb2FkIGRhdGEgZnJvbSBpbWFnZTogJyArIGltYWdlLmRvbS5zcmMpO1xuICAgICAgICB9KVxuICAgICAgXTtcbiAgICAgIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiBlYWNoJDEobGlzdGVuZXJzLCBsID0+IGwudW5iaW5kKCkpO1xuICAgICAgaWYgKGltYWdlLmRvbS5jb21wbGV0ZSkge1xuICAgICAgICBsb2FkZWQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGNhbGN1bGF0ZUltYWdlUG9zaXRpb24gPSAocGFuZWxXaWR0aCwgcGFuZWxIZWlnaHQsIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0LCB6b29tKSA9PiB7XG4gICAgICBjb25zdCB3aWR0aCA9IGltYWdlV2lkdGggKiB6b29tO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gaW1hZ2VIZWlnaHQgKiB6b29tO1xuICAgICAgY29uc3QgbGVmdCA9IE1hdGgubWF4KDAsIHBhbmVsV2lkdGggLyAyIC0gd2lkdGggLyAyKTtcbiAgICAgIGNvbnN0IHRvcCA9IE1hdGgubWF4KDAsIHBhbmVsSGVpZ2h0IC8gMiAtIGhlaWdodCAvIDIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdDogbGVmdC50b1N0cmluZygpICsgJ3B4JyxcbiAgICAgICAgdG9wOiB0b3AudG9TdHJpbmcoKSArICdweCcsXG4gICAgICAgIHdpZHRoOiB3aWR0aC50b1N0cmluZygpICsgJ3B4JyxcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQudG9TdHJpbmcoKSArICdweCdcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCB6b29tVG9GaXQgPSAocGFuZWwsIHdpZHRoLCBoZWlnaHQpID0+IHtcbiAgICAgIGNvbnN0IHBhbmVsVyA9IGdldCRjKHBhbmVsKTtcbiAgICAgIGNvbnN0IHBhbmVsSCA9IGdldCRkKHBhbmVsKTtcbiAgICAgIHJldHVybiBNYXRoLm1pbihwYW5lbFcgLyB3aWR0aCwgcGFuZWxIIC8gaGVpZ2h0LCAxKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckltYWdlUHJldmlldyA9IChzcGVjLCBpbml0aWFsRGF0YSkgPT4ge1xuICAgICAgY29uc3QgY2FjaGVkRGF0YSA9IENlbGwoaW5pdGlhbERhdGEuZ2V0T3IoeyB1cmw6ICcnIH0pKTtcbiAgICAgIGNvbnN0IG1lbUltYWdlID0gcmVjb3JkKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnaW1nJyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1pbWFnZXByZXZpZXdfX2ltYWdlJ10sXG4gICAgICAgICAgYXR0cmlidXRlczogaW5pdGlhbERhdGEubWFwKGRhdGEgPT4gKHsgc3JjOiBkYXRhLnVybCB9KSkuZ2V0T3Ioe30pXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgbWVtQ29udGFpbmVyID0gcmVjb3JkKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1pbWFnZXByZXZpZXdfX2NvbnRhaW5lciddLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3ByZXNlbnRhdGlvbicgfVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbbWVtSW1hZ2UuYXNTcGVjKCldXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNldFZhbHVlID0gKGZyYW1lQ29tcG9uZW50LCBkYXRhKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWREYXRhID0geyB1cmw6IGRhdGEudXJsIH07XG4gICAgICAgIGRhdGEuem9vbS5lYWNoKHogPT4gdHJhbnNsYXRlZERhdGEuem9vbSA9IHopO1xuICAgICAgICBkYXRhLmNhY2hlZFdpZHRoLmVhY2goeiA9PiB0cmFuc2xhdGVkRGF0YS5jYWNoZWRXaWR0aCA9IHopO1xuICAgICAgICBkYXRhLmNhY2hlZEhlaWdodC5lYWNoKHogPT4gdHJhbnNsYXRlZERhdGEuY2FjaGVkSGVpZ2h0ID0geik7XG4gICAgICAgIGNhY2hlZERhdGEuc2V0KHRyYW5zbGF0ZWREYXRhKTtcbiAgICAgICAgY29uc3QgYXBwbHlGcmFtZVBvc2l0aW9uaW5nID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHtjYWNoZWRXaWR0aCwgY2FjaGVkSGVpZ2h0LCB6b29tfSA9IHRyYW5zbGF0ZWREYXRhO1xuICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoY2FjaGVkV2lkdGgpICYmICFpc1VuZGVmaW5lZChjYWNoZWRIZWlnaHQpKSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQoem9vbSkpIHtcbiAgICAgICAgICAgICAgY29uc3QgeiA9IHpvb21Ub0ZpdChmcmFtZUNvbXBvbmVudC5lbGVtZW50LCBjYWNoZWRXaWR0aCwgY2FjaGVkSGVpZ2h0KTtcbiAgICAgICAgICAgICAgdHJhbnNsYXRlZERhdGEuem9vbSA9IHo7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGNhbGN1bGF0ZUltYWdlUG9zaXRpb24oZ2V0JGMoZnJhbWVDb21wb25lbnQuZWxlbWVudCksIGdldCRkKGZyYW1lQ29tcG9uZW50LmVsZW1lbnQpLCBjYWNoZWRXaWR0aCwgY2FjaGVkSGVpZ2h0LCB0cmFuc2xhdGVkRGF0YS56b29tKTtcbiAgICAgICAgICAgIG1lbUNvbnRhaW5lci5nZXRPcHQoZnJhbWVDb21wb25lbnQpLmVhY2goY29udGFpbmVyID0+IHtcbiAgICAgICAgICAgICAgc2V0QWxsKGNvbnRhaW5lci5lbGVtZW50LCBwb3NpdGlvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbUltYWdlLmdldE9wdChmcmFtZUNvbXBvbmVudCkuZWFjaChpbWFnZUNvbXBvbmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgaW1nID0gaW1hZ2VDb21wb25lbnQuZWxlbWVudDtcbiAgICAgICAgICBpZiAoZGF0YS51cmwgIT09IGdldCRmKGltZywgJ3NyYycpKSB7XG4gICAgICAgICAgICBzZXQkOShpbWcsICdzcmMnLCBkYXRhLnVybCk7XG4gICAgICAgICAgICByZW1vdmUkMihmcmFtZUNvbXBvbmVudC5lbGVtZW50LCAndG94LWltYWdlcHJldmlld19fbG9hZGVkJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFwcGx5RnJhbWVQb3NpdGlvbmluZygpO1xuICAgICAgICAgIGltYWdlKGltZykudGhlbihpbWcgPT4ge1xuICAgICAgICAgICAgaWYgKGZyYW1lQ29tcG9uZW50LmdldFN5c3RlbSgpLmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgYWRkJDIoZnJhbWVDb21wb25lbnQuZWxlbWVudCwgJ3RveC1pbWFnZXByZXZpZXdfX2xvYWRlZCcpO1xuICAgICAgICAgICAgICB0cmFuc2xhdGVkRGF0YS5jYWNoZWRXaWR0aCA9IGltZy5kb20ubmF0dXJhbFdpZHRoO1xuICAgICAgICAgICAgICB0cmFuc2xhdGVkRGF0YS5jYWNoZWRIZWlnaHQgPSBpbWcuZG9tLm5hdHVyYWxIZWlnaHQ7XG4gICAgICAgICAgICAgIGFwcGx5RnJhbWVQb3NpdGlvbmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzdHlsZXMgPSB7fTtcbiAgICAgIHNwZWMuaGVpZ2h0LmVhY2goaCA9PiBzdHlsZXMuaGVpZ2h0ID0gaCk7XG4gICAgICBjb25zdCBmYWtlVmFsaWRhdGVkRGF0YSA9IGluaXRpYWxEYXRhLm1hcChkID0+ICh7XG4gICAgICAgIHVybDogZC51cmwsXG4gICAgICAgIHpvb206IE9wdGlvbmFsLmZyb20oZC56b29tKSxcbiAgICAgICAgY2FjaGVkV2lkdGg6IE9wdGlvbmFsLmZyb20oZC5jYWNoZWRXaWR0aCksXG4gICAgICAgIGNhY2hlZEhlaWdodDogT3B0aW9uYWwuZnJvbShkLmNhY2hlZEhlaWdodClcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtaW1hZ2VwcmV2aWV3J10sXG4gICAgICAgICAgc3R5bGVzLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3ByZXNlbnRhdGlvbicgfVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbbWVtQ29udGFpbmVyLmFzU3BlYygpXSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIENvbXBvc2luZ0NvbmZpZ3Muc2VsZigpLFxuICAgICAgICAgIHdpdGhDb21wKGZha2VWYWxpZGF0ZWREYXRhLCAoKSA9PiBjYWNoZWREYXRhLmdldCgpLCBzZXRWYWx1ZSlcbiAgICAgICAgXSlcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlckxhYmVsJDIgPSAoc3BlYywgYmFja3N0YWdlU2hhcmVkKSA9PiB7XG4gICAgICBjb25zdCBiYXNlQ2xhc3MgPSAndG94LWxhYmVsJztcbiAgICAgIGNvbnN0IGNlbnRlckNsYXNzID0gc3BlYy5hbGlnbiA9PT0gJ2NlbnRlcicgPyBbYCR7IGJhc2VDbGFzcyB9LS1jZW50ZXJgXSA6IFtdO1xuICAgICAgY29uc3QgZW5kQ2xhc3MgPSBzcGVjLmFsaWduID09PSAnZW5kJyA/IFtgJHsgYmFzZUNsYXNzIH0tLWVuZGBdIDogW107XG4gICAgICBjb25zdCBsYWJlbCA9IHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnbGFiZWwnLFxuICAgICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAgIGJhc2VDbGFzcyxcbiAgICAgICAgICAgIC4uLmNlbnRlckNsYXNzLFxuICAgICAgICAgICAgLi4uZW5kQ2xhc3NcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFt0ZXh0JDIoYmFja3N0YWdlU2hhcmVkLnByb3ZpZGVycy50cmFuc2xhdGUoc3BlYy5sYWJlbCkpXVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbXBzID0gbWFwJDIoc3BlYy5pdGVtcywgYmFja3N0YWdlU2hhcmVkLmludGVycHJldGVyKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtZm9ybV9fZ3JvdXAnXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgLi4uY29tcHNcbiAgICAgICAgXSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIENvbXBvc2luZ0NvbmZpZ3Muc2VsZigpLFxuICAgICAgICAgIFJlcGxhY2luZy5jb25maWcoe30pLFxuICAgICAgICAgIGRvbUh0bWwoT3B0aW9uYWwubm9uZSgpKSxcbiAgICAgICAgICBLZXlpbmcuY29uZmlnKHsgbW9kZTogJ2FjeWNsaWMnIH0pXG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBpbnRlcm5hbFRvb2xiYXJCdXR0b25FeGVjdXRlID0gZ2VuZXJhdGUkNigndG9vbGJhci5idXR0b24uZXhlY3V0ZScpO1xuICAgIGNvbnN0IG9uVG9vbGJhckJ1dHRvbkV4ZWN1dGUgPSBpbmZvID0+IHJ1bk9uRXhlY3V0ZSQxKChjb21wLCBfc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgIHJ1bldpdGhBcGkoaW5mbywgY29tcCkoaXRlbUFwaSA9PiB7XG4gICAgICAgIGVtaXRXaXRoKGNvbXAsIGludGVybmFsVG9vbGJhckJ1dHRvbkV4ZWN1dGUsIHsgYnV0dG9uQXBpOiBpdGVtQXBpIH0pO1xuICAgICAgICBpbmZvLm9uQWN0aW9uKGl0ZW1BcGkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgY29tbW9uQnV0dG9uRGlzcGxheUV2ZW50ID0gZ2VuZXJhdGUkNignY29tbW9uLWJ1dHRvbi1kaXNwbGF5LWV2ZW50cycpO1xuICAgIGNvbnN0IHRvb2xiYXJCdXR0b25FdmVudE9yZGVyID0ge1xuICAgICAgW2V4ZWN1dGUkNSgpXTogW1xuICAgICAgICAnZGlzYWJsaW5nJyxcbiAgICAgICAgJ2FsbG95LmJhc2UuYmVoYXZpb3VyJyxcbiAgICAgICAgJ3RvZ2dsaW5nJyxcbiAgICAgICAgJ3Rvb2xiYXItYnV0dG9uLWV2ZW50cydcbiAgICAgIF0sXG4gICAgICBbYXR0YWNoZWRUb0RvbSgpXTogW1xuICAgICAgICAndG9vbGJhci1idXR0b24tZXZlbnRzJyxcbiAgICAgICAgY29tbW9uQnV0dG9uRGlzcGxheUV2ZW50XG4gICAgICBdLFxuICAgICAgW21vdXNlZG93bigpXTogW1xuICAgICAgICAnZm9jdXNpbmcnLFxuICAgICAgICAnYWxsb3kuYmFzZS5iZWhhdmlvdXInLFxuICAgICAgICBjb21tb25CdXR0b25EaXNwbGF5RXZlbnRcbiAgICAgIF1cbiAgICB9O1xuXG4gICAgY29uc3QgZm9yY2VJbml0aWFsU2l6ZSA9IGNvbXAgPT4gc2V0JDgoY29tcC5lbGVtZW50LCAnd2lkdGgnLCBnZXQkZShjb21wLmVsZW1lbnQsICd3aWR0aCcpKTtcblxuICAgIGNvbnN0IHJlbmRlckljb24kMSA9IChpY29uTmFtZSwgaWNvbnNQcm92aWRlciwgYmVoYXZpb3VycykgPT4gcmVuZGVyJDMoaWNvbk5hbWUsIHtcbiAgICAgIHRhZzogJ3NwYW4nLFxuICAgICAgY2xhc3NlczogW1xuICAgICAgICAndG94LWljb24nLFxuICAgICAgICAndG94LXRidG5fX2ljb24td3JhcCdcbiAgICAgIF0sXG4gICAgICBiZWhhdmlvdXJzXG4gICAgfSwgaWNvbnNQcm92aWRlcik7XG4gICAgY29uc3QgcmVuZGVySWNvbkZyb21QYWNrJDEgPSAoaWNvbk5hbWUsIGljb25zUHJvdmlkZXIpID0+IHJlbmRlckljb24kMShpY29uTmFtZSwgaWNvbnNQcm92aWRlciwgW10pO1xuICAgIGNvbnN0IHJlbmRlclJlcGxhY2VhYmxlSWNvbkZyb21QYWNrID0gKGljb25OYW1lLCBpY29uc1Byb3ZpZGVyKSA9PiByZW5kZXJJY29uJDEoaWNvbk5hbWUsIGljb25zUHJvdmlkZXIsIFtSZXBsYWNpbmcuY29uZmlnKHt9KV0pO1xuICAgIGNvbnN0IHJlbmRlckxhYmVsJDEgPSAodGV4dCwgcHJlZml4LCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+ICh7XG4gICAgICBkb206IHtcbiAgICAgICAgdGFnOiAnc3BhbicsXG4gICAgICAgIGNsYXNzZXM6IFtgJHsgcHJlZml4IH1fX3NlbGVjdC1sYWJlbGBdXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czogW3RleHQkMihwcm92aWRlcnNCYWNrc3RhZ2UudHJhbnNsYXRlKHRleHQpKV0sXG4gICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbUmVwbGFjaW5nLmNvbmZpZyh7fSldKVxuICAgIH0pO1xuXG4gICAgY29uc3QgdXBkYXRlTWVudVRleHQgPSBnZW5lcmF0ZSQ2KCd1cGRhdGUtbWVudS10ZXh0Jyk7XG4gICAgY29uc3QgdXBkYXRlTWVudUljb24gPSBnZW5lcmF0ZSQ2KCd1cGRhdGUtbWVudS1pY29uJyk7XG4gICAgY29uc3QgcmVuZGVyQ29tbW9uRHJvcGRvd24gPSAoc3BlYywgcHJlZml4LCBzaGFyZWRCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IGVkaXRvck9mZkNlbGwgPSBDZWxsKG5vb3ApO1xuICAgICAgY29uc3Qgb3B0TWVtRGlzcGxheVRleHQgPSBzcGVjLnRleHQubWFwKHRleHQgPT4gcmVjb3JkKHJlbmRlckxhYmVsJDEodGV4dCwgcHJlZml4LCBzaGFyZWRCYWNrc3RhZ2UucHJvdmlkZXJzKSkpO1xuICAgICAgY29uc3Qgb3B0TWVtRGlzcGxheUljb24gPSBzcGVjLmljb24ubWFwKGljb25OYW1lID0+IHJlY29yZChyZW5kZXJSZXBsYWNlYWJsZUljb25Gcm9tUGFjayhpY29uTmFtZSwgc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVycy5pY29ucykpKTtcbiAgICAgIGNvbnN0IG9uTGVmdE9yUmlnaHRJbk1lbnUgPSAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgY29uc3QgZHJvcGRvd24gPSBSZXByZXNlbnRpbmcuZ2V0VmFsdWUoY29tcCk7XG4gICAgICAgIEZvY3VzaW5nLmZvY3VzKGRyb3Bkb3duKTtcbiAgICAgICAgZW1pdFdpdGgoZHJvcGRvd24sICdrZXlkb3duJywgeyByYXc6IHNlLmV2ZW50LnJhdyB9KTtcbiAgICAgICAgRHJvcGRvd24uY2xvc2UoZHJvcGRvd24pO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCByb2xlID0gc3BlYy5yb2xlLmZvbGQoKCkgPT4gKHt9KSwgcm9sZSA9PiAoeyByb2xlIH0pKTtcbiAgICAgIGNvbnN0IHRvb2x0aXBBdHRyaWJ1dGVzID0gc3BlYy50b29sdGlwLmZvbGQoKCkgPT4gKHt9KSwgdG9vbHRpcCA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRUb29sdGlwID0gc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVycy50cmFuc2xhdGUodG9vbHRpcCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgJ3RpdGxlJzogdHJhbnNsYXRlZFRvb2x0aXAsXG4gICAgICAgICAgJ2FyaWEtbGFiZWwnOiB0cmFuc2xhdGVkVG9vbHRpcFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICBjb25zdCBpY29uU3BlYyA9IHJlbmRlciQzKCdjaGV2cm9uLWRvd24nLCB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFtgJHsgcHJlZml4IH1fX3NlbGVjdC1jaGV2cm9uYF1cbiAgICAgIH0sIHNoYXJlZEJhY2tzdGFnZS5wcm92aWRlcnMuaWNvbnMpO1xuICAgICAgY29uc3QgZml4V2lkdGhCZWhhdmlvdXJOYW1lID0gZ2VuZXJhdGUkNignY29tbW9uLWJ1dHRvbi1kaXNwbGF5LWV2ZW50cycpO1xuICAgICAgY29uc3QgbWVtRHJvcGRvd24gPSByZWNvcmQoRHJvcGRvd24uc2tldGNoKHtcbiAgICAgICAgLi4uc3BlYy51aWQgPyB7IHVpZDogc3BlYy51aWQgfSA6IHt9LFxuICAgICAgICAuLi5yb2xlLFxuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdidXR0b24nLFxuICAgICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIGAkeyBwcmVmaXggfS0tc2VsZWN0YFxuICAgICAgICAgIF0uY29uY2F0KG1hcCQyKHNwZWMuY2xhc3NlcywgYyA9PiBgJHsgcHJlZml4IH0tLSR7IGMgfWApKSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7IC4uLnRvb2x0aXBBdHRyaWJ1dGVzIH1cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogY29tcG9uZW50UmVuZGVyUGlwZWxpbmUoW1xuICAgICAgICAgIG9wdE1lbURpc3BsYXlJY29uLm1hcChtZW0gPT4gbWVtLmFzU3BlYygpKSxcbiAgICAgICAgICBvcHRNZW1EaXNwbGF5VGV4dC5tYXAobWVtID0+IG1lbS5hc1NwZWMoKSksXG4gICAgICAgICAgT3B0aW9uYWwuc29tZShpY29uU3BlYylcbiAgICAgICAgXSksXG4gICAgICAgIG1hdGNoV2lkdGg6IHRydWUsXG4gICAgICAgIHVzZU1pbldpZHRoOiB0cnVlLFxuICAgICAgICBvbk9wZW46IChhbmNob3IsIGRyb3Bkb3duQ29tcCwgdG1lbnVDb21wKSA9PiB7XG4gICAgICAgICAgaWYgKHNwZWMuc2VhcmNoYWJsZSkge1xuICAgICAgICAgICAgZm9jdXNTZWFyY2hGaWVsZCh0bWVudUNvbXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZHJvcGRvd25CZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgLi4uc3BlYy5kcm9wZG93bkJlaGF2aW91cnMsXG4gICAgICAgICAgRGlzYWJsaW5nQ29uZmlncy5idXR0b24oKCkgPT4gc3BlYy5kaXNhYmxlZCB8fCBzaGFyZWRCYWNrc3RhZ2UucHJvdmlkZXJzLmlzRGlzYWJsZWQoKSksXG4gICAgICAgICAgcmVjZWl2aW5nQ29uZmlnKCksXG4gICAgICAgICAgVW5zZWxlY3RpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICBSZXBsYWNpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICBjb25maWcoJ2Ryb3Bkb3duLWV2ZW50cycsIFtcbiAgICAgICAgICAgIG9uQ29udHJvbEF0dGFjaGVkKHNwZWMsIGVkaXRvck9mZkNlbGwpLFxuICAgICAgICAgICAgb25Db250cm9sRGV0YWNoZWQoc3BlYywgZWRpdG9yT2ZmQ2VsbClcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBjb25maWcoZml4V2lkdGhCZWhhdmlvdXJOYW1lLCBbcnVuT25BdHRhY2hlZCgoY29tcCwgX3NlKSA9PiBmb3JjZUluaXRpYWxTaXplKGNvbXApKV0pLFxuICAgICAgICAgIGNvbmZpZygnbWVudWJ1dHRvbi11cGRhdGUtZGlzcGxheS10ZXh0JywgW1xuICAgICAgICAgICAgcnVuJDEodXBkYXRlTWVudVRleHQsIChjb21wLCBzZSkgPT4ge1xuICAgICAgICAgICAgICBvcHRNZW1EaXNwbGF5VGV4dC5iaW5kKG1lbSA9PiBtZW0uZ2V0T3B0KGNvbXApKS5lYWNoKGRpc3BsYXlUZXh0ID0+IHtcbiAgICAgICAgICAgICAgICBSZXBsYWNpbmcuc2V0KGRpc3BsYXlUZXh0LCBbdGV4dCQyKHNoYXJlZEJhY2tzdGFnZS5wcm92aWRlcnMudHJhbnNsYXRlKHNlLmV2ZW50LnRleHQpKV0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcnVuJDEodXBkYXRlTWVudUljb24sIChjb21wLCBzZSkgPT4ge1xuICAgICAgICAgICAgICBvcHRNZW1EaXNwbGF5SWNvbi5iaW5kKG1lbSA9PiBtZW0uZ2V0T3B0KGNvbXApKS5lYWNoKGRpc3BsYXlJY29uID0+IHtcbiAgICAgICAgICAgICAgICBSZXBsYWNpbmcuc2V0KGRpc3BsYXlJY29uLCBbcmVuZGVyUmVwbGFjZWFibGVJY29uRnJvbVBhY2soc2UuZXZlbnQuaWNvbiwgc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVycy5pY29ucyldKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0pXG4gICAgICAgIF0pLFxuICAgICAgICBldmVudE9yZGVyOiBkZWVwTWVyZ2UodG9vbGJhckJ1dHRvbkV2ZW50T3JkZXIsIHtcbiAgICAgICAgICBtb3VzZWRvd246IFtcbiAgICAgICAgICAgICdmb2N1c2luZycsXG4gICAgICAgICAgICAnYWxsb3kuYmFzZS5iZWhhdmlvdXInLFxuICAgICAgICAgICAgJ2l0ZW0tdHlwZS1ldmVudHMnLFxuICAgICAgICAgICAgJ25vcm1hbC1kcm9wZG93bi1ldmVudHMnXG4gICAgICAgICAgXSxcbiAgICAgICAgICBbYXR0YWNoZWRUb0RvbSgpXTogW1xuICAgICAgICAgICAgJ3Rvb2xiYXItYnV0dG9uLWV2ZW50cycsXG4gICAgICAgICAgICAnZHJvcGRvd24tZXZlbnRzJyxcbiAgICAgICAgICAgIGZpeFdpZHRoQmVoYXZpb3VyTmFtZVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIHNhbmRib3hCZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBtb2RlOiAnc3BlY2lhbCcsXG4gICAgICAgICAgICBvbkxlZnQ6IG9uTGVmdE9yUmlnaHRJbk1lbnUsXG4gICAgICAgICAgICBvblJpZ2h0OiBvbkxlZnRPclJpZ2h0SW5NZW51XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY29uZmlnKCdkcm9wZG93bi1zYW5kYm94LWV2ZW50cycsIFtcbiAgICAgICAgICAgIHJ1biQxKHJlZmV0Y2hUcmlnZ2VyRXZlbnQsIChvcmlnaW5hbFNhbmRib3hDb21wLCBzZSkgPT4ge1xuICAgICAgICAgICAgICBoYW5kbGVSZWZldGNoVHJpZ2dlcihvcmlnaW5hbFNhbmRib3hDb21wKTtcbiAgICAgICAgICAgICAgc2Uuc3RvcCgpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBydW4kMShyZWRpcmVjdE1lbnVJdGVtSW50ZXJhY3Rpb25FdmVudCwgKHNhbmRib3hDb21wLCBzZSkgPT4ge1xuICAgICAgICAgICAgICBoYW5kbGVSZWRpcmVjdFRvTWVudUl0ZW0oc2FuZGJveENvbXAsIHNlKTtcbiAgICAgICAgICAgICAgc2Uuc3RvcCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdKVxuICAgICAgICBdKSxcbiAgICAgICAgbGF6eVNpbms6IHNoYXJlZEJhY2tzdGFnZS5nZXRTaW5rLFxuICAgICAgICB0b2dnbGVDbGFzczogYCR7IHByZWZpeCB9LS1hY3RpdmVgLFxuICAgICAgICBwYXJ0czoge1xuICAgICAgICAgIG1lbnU6IHtcbiAgICAgICAgICAgIC4uLnBhcnQoZmFsc2UsIHNwZWMuY29sdW1ucywgc3BlYy5wcmVzZXRzKSxcbiAgICAgICAgICAgIGZha2VGb2N1czogc3BlYy5zZWFyY2hhYmxlLFxuICAgICAgICAgICAgb25IaWdobGlnaHRJdGVtOiB1cGRhdGVBcmlhT25IaWdobGlnaHQsXG4gICAgICAgICAgICBvbkNvbGxhcHNlTWVudTogKHRtZW51Q29tcCwgaXRlbUNvbXBDYXVzaW5nQ29sbGFwc2UsIG5vd0FjdGl2ZU1lbnVDb21wKSA9PiB7XG4gICAgICAgICAgICAgIEhpZ2hsaWdodGluZy5nZXRIaWdobGlnaHRlZChub3dBY3RpdmVNZW51Q29tcCkuZWFjaChpdGVtQ29tcCA9PiB7XG4gICAgICAgICAgICAgICAgdXBkYXRlQXJpYU9uSGlnaGxpZ2h0KHRtZW51Q29tcCwgbm93QWN0aXZlTWVudUNvbXAsIGl0ZW1Db21wKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25EZWhpZ2hsaWdodEl0ZW06IHVwZGF0ZUFyaWFPbkRlaGlnaGxpZ2h0XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXRBbmNob3JPdmVycmlkZXM6ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWF4SGVpZ2h0RnVuY3Rpb246IChlbGVtZW50LCBhdmFpbGFibGUpID0+IHtcbiAgICAgICAgICAgICAgYW5jaG9yZWQoKShlbGVtZW50LCBhdmFpbGFibGUgLSAxMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgZmV0Y2g6IGNvbXAgPT4gRnV0dXJlLm51KGN1cnJ5KHNwZWMuZmV0Y2gsIGNvbXApKVxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIG1lbURyb3Bkb3duLmFzU3BlYygpO1xuICAgIH07XG5cbiAgICBjb25zdCBpc01lbnVJdGVtUmVmZXJlbmNlID0gaXRlbSA9PiBpc1N0cmluZyhpdGVtKTtcbiAgICBjb25zdCBpc1NlcGFyYXRvciQyID0gaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdzZXBhcmF0b3InO1xuICAgIGNvbnN0IGlzRXhwYW5kaW5nTWVudUl0ZW0gPSBpdGVtID0+IGhhcyQyKGl0ZW0sICdnZXRTdWJtZW51SXRlbXMnKTtcbiAgICBjb25zdCBzZXBhcmF0b3IkMiA9IHsgdHlwZTogJ3NlcGFyYXRvcicgfTtcbiAgICBjb25zdCB1bndyYXBSZWZlcmVuY2VzID0gKGl0ZW1zLCBtZW51SXRlbXMpID0+IHtcbiAgICAgIGNvbnN0IHJlYWxJdGVtcyA9IGZvbGRsKGl0ZW1zLCAoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgIGlmIChpc01lbnVJdGVtUmVmZXJlbmNlKGl0ZW0pKSB7XG4gICAgICAgICAgaWYgKGl0ZW0gPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbSA9PT0gJ3wnKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjLmxlbmd0aCA+IDAgJiYgIWlzU2VwYXJhdG9yJDIoYWNjW2FjYy5sZW5ndGggLSAxXSkgPyBhY2MuY29uY2F0KFtzZXBhcmF0b3IkMl0pIDogYWNjO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzJDIobWVudUl0ZW1zLCBpdGVtLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChbbWVudUl0ZW1zW2l0ZW0udG9Mb3dlckNhc2UoKV1dKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoW2l0ZW1dKTtcbiAgICAgICAgfVxuICAgICAgfSwgW10pO1xuICAgICAgaWYgKHJlYWxJdGVtcy5sZW5ndGggPiAwICYmIGlzU2VwYXJhdG9yJDIocmVhbEl0ZW1zW3JlYWxJdGVtcy5sZW5ndGggLSAxXSkpIHtcbiAgICAgICAgcmVhbEl0ZW1zLnBvcCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlYWxJdGVtcztcbiAgICB9O1xuICAgIGNvbnN0IGdldEZyb21FeHBhbmRpbmdJdGVtID0gKGl0ZW0sIG1lbnVJdGVtcykgPT4ge1xuICAgICAgY29uc3Qgc3VibWVudUl0ZW1zID0gaXRlbS5nZXRTdWJtZW51SXRlbXMoKTtcbiAgICAgIGNvbnN0IHJlc3QgPSBleHBhbmQoc3VibWVudUl0ZW1zLCBtZW51SXRlbXMpO1xuICAgICAgY29uc3QgbmV3TWVudXMgPSBkZWVwTWVyZ2UocmVzdC5tZW51cywgeyBbaXRlbS52YWx1ZV06IHJlc3QuaXRlbXMgfSk7XG4gICAgICBjb25zdCBuZXdFeHBhbnNpb25zID0gZGVlcE1lcmdlKHJlc3QuZXhwYW5zaW9ucywgeyBbaXRlbS52YWx1ZV06IGl0ZW0udmFsdWUgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpdGVtLFxuICAgICAgICBtZW51czogbmV3TWVudXMsXG4gICAgICAgIGV4cGFuc2lvbnM6IG5ld0V4cGFuc2lvbnNcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBnZW5lcmF0ZVZhbHVlSWZSZXF1aXJlZCA9IGl0ZW0gPT4ge1xuICAgICAgY29uc3QgaXRlbVZhbHVlID0gZ2V0JGcoaXRlbSwgJ3ZhbHVlJykuZ2V0T3JUaHVuaygoKSA9PiBnZW5lcmF0ZSQ2KCdnZW5lcmF0ZWQtbWVudS1pdGVtJykpO1xuICAgICAgcmV0dXJuIGRlZXBNZXJnZSh7IHZhbHVlOiBpdGVtVmFsdWUgfSwgaXRlbSk7XG4gICAgfTtcbiAgICBjb25zdCBleHBhbmQgPSAoaXRlbXMsIG1lbnVJdGVtcykgPT4ge1xuICAgICAgY29uc3QgcmVhbEl0ZW1zID0gdW53cmFwUmVmZXJlbmNlcyhpc1N0cmluZyhpdGVtcykgPyBpdGVtcy5zcGxpdCgnICcpIDogaXRlbXMsIG1lbnVJdGVtcyk7XG4gICAgICByZXR1cm4gZm9sZHIocmVhbEl0ZW1zLCAoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgIGlmIChpc0V4cGFuZGluZ01lbnVJdGVtKGl0ZW0pKSB7XG4gICAgICAgICAgY29uc3QgaXRlbVdpdGhWYWx1ZSA9IGdlbmVyYXRlVmFsdWVJZlJlcXVpcmVkKGl0ZW0pO1xuICAgICAgICAgIGNvbnN0IG5ld0RhdGEgPSBnZXRGcm9tRXhwYW5kaW5nSXRlbShpdGVtV2l0aFZhbHVlLCBtZW51SXRlbXMpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtZW51czogZGVlcE1lcmdlKGFjYy5tZW51cywgbmV3RGF0YS5tZW51cyksXG4gICAgICAgICAgICBpdGVtczogW1xuICAgICAgICAgICAgICBuZXdEYXRhLml0ZW0sXG4gICAgICAgICAgICAgIC4uLmFjYy5pdGVtc1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGV4cGFuc2lvbnM6IGRlZXBNZXJnZShhY2MuZXhwYW5zaW9ucywgbmV3RGF0YS5leHBhbnNpb25zKVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgIC4uLmFjYy5pdGVtc1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbWVudXM6IHt9LFxuICAgICAgICBleHBhbnNpb25zOiB7fSxcbiAgICAgICAgaXRlbXM6IFtdXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0U2VhcmNoTW9kZUZvckZpZWxkID0gc2V0dGluZ3MgPT4ge1xuICAgICAgcmV0dXJuIHNldHRpbmdzLnNlYXJjaC5mb2xkKCgpID0+ICh7IHNlYXJjaE1vZGU6ICduby1zZWFyY2gnIH0pLCBzZWFyY2hTZXR0aW5ncyA9PiAoe1xuICAgICAgICBzZWFyY2hNb2RlOiAnc2VhcmNoLXdpdGgtZmllbGQnLFxuICAgICAgICBwbGFjZWhvbGRlcjogc2VhcmNoU2V0dGluZ3MucGxhY2Vob2xkZXJcbiAgICAgIH0pKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNlYXJjaE1vZGVGb3JSZXN1bHRzID0gc2V0dGluZ3MgPT4ge1xuICAgICAgcmV0dXJuIHNldHRpbmdzLnNlYXJjaC5mb2xkKCgpID0+ICh7IHNlYXJjaE1vZGU6ICduby1zZWFyY2gnIH0pLCBfID0+ICh7IHNlYXJjaE1vZGU6ICdzZWFyY2gtd2l0aC1yZXN1bHRzJyB9KSk7XG4gICAgfTtcbiAgICBjb25zdCBidWlsZCA9IChpdGVtcywgaXRlbVJlc3BvbnNlLCBiYWNrc3RhZ2UsIHNldHRpbmdzKSA9PiB7XG4gICAgICBjb25zdCBwcmltYXJ5ID0gZ2VuZXJhdGUkNigncHJpbWFyeS1tZW51Jyk7XG4gICAgICBjb25zdCBkYXRhID0gZXhwYW5kKGl0ZW1zLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycy5tZW51SXRlbXMoKSk7XG4gICAgICBpZiAoZGF0YS5pdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1haW5NZW51U2VhcmNoTW9kZSA9IGdldFNlYXJjaE1vZGVGb3JGaWVsZChzZXR0aW5ncyk7XG4gICAgICBjb25zdCBtYWluTWVudSA9IGNyZWF0ZVBhcnRpYWxNZW51KHByaW1hcnksIGRhdGEuaXRlbXMsIGl0ZW1SZXNwb25zZSwgYmFja3N0YWdlLCBzZXR0aW5ncy5pc0hvcml6b250YWxNZW51LCBtYWluTWVudVNlYXJjaE1vZGUpO1xuICAgICAgY29uc3Qgc3VibWVudVNlYXJjaE1vZGUgPSBnZXRTZWFyY2hNb2RlRm9yUmVzdWx0cyhzZXR0aW5ncyk7XG4gICAgICBjb25zdCBzdWJtZW51cyA9IG1hcCQxKGRhdGEubWVudXMsIChtZW51SXRlbXMsIG1lbnVOYW1lKSA9PiBjcmVhdGVQYXJ0aWFsTWVudShtZW51TmFtZSwgbWVudUl0ZW1zLCBpdGVtUmVzcG9uc2UsIGJhY2tzdGFnZSwgZmFsc2UsIHN1Ym1lbnVTZWFyY2hNb2RlKSk7XG4gICAgICBjb25zdCBtZW51cyA9IGRlZXBNZXJnZShzdWJtZW51cywgd3JhcCQxKHByaW1hcnksIG1haW5NZW51KSk7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbSh0aWVyZWRNZW51LnRpZXJlZERhdGEocHJpbWFyeSwgbWVudXMsIGRhdGEuZXhwYW5zaW9ucykpO1xuICAgIH07XG5cbiAgICBjb25zdCBpc1NpbmdsZUxpc3RJdGVtID0gaXRlbSA9PiAhaGFzJDIoaXRlbSwgJ2l0ZW1zJyk7XG4gICAgY29uc3QgZGF0YUF0dHJpYnV0ZSA9ICdkYXRhLXZhbHVlJztcbiAgICBjb25zdCBmZXRjaEl0ZW1zID0gKGRyb3Bkb3duQ29tcCwgbmFtZSwgaXRlbXMsIHNlbGVjdGVkVmFsdWUpID0+IG1hcCQyKGl0ZW1zLCBpdGVtID0+IHtcbiAgICAgIGlmICghaXNTaW5nbGVMaXN0SXRlbShpdGVtKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6ICduZXN0ZWRtZW51aXRlbScsXG4gICAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICAgIGdldFN1Ym1lbnVJdGVtczogKCkgPT4gZmV0Y2hJdGVtcyhkcm9wZG93bkNvbXAsIG5hbWUsIGl0ZW0uaXRlbXMsIHNlbGVjdGVkVmFsdWUpXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6ICd0b2dnbGVtZW51aXRlbScsXG4gICAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICAgIHZhbHVlOiBpdGVtLnZhbHVlLFxuICAgICAgICAgIGFjdGl2ZTogaXRlbS52YWx1ZSA9PT0gc2VsZWN0ZWRWYWx1ZSxcbiAgICAgICAgICBvbkFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgUmVwcmVzZW50aW5nLnNldFZhbHVlKGRyb3Bkb3duQ29tcCwgaXRlbS52YWx1ZSk7XG4gICAgICAgICAgICBlbWl0V2l0aChkcm9wZG93bkNvbXAsIGZvcm1DaGFuZ2VFdmVudCwgeyBuYW1lIH0pO1xuICAgICAgICAgICAgRm9jdXNpbmcuZm9jdXMoZHJvcGRvd25Db21wKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgZmluZEl0ZW1CeVZhbHVlID0gKGl0ZW1zLCB2YWx1ZSkgPT4gZmluZE1hcChpdGVtcywgaXRlbSA9PiB7XG4gICAgICBpZiAoIWlzU2luZ2xlTGlzdEl0ZW0oaXRlbSkpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRJdGVtQnlWYWx1ZShpdGVtLml0ZW1zLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc29tZUlmKGl0ZW0udmFsdWUgPT09IHZhbHVlLCBpdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZW5kZXJMaXN0Qm94ID0gKHNwZWMsIGJhY2tzdGFnZSwgaW5pdGlhbERhdGEpID0+IHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyc0JhY2tzdGFnZSA9IGJhY2tzdGFnZS5zaGFyZWQucHJvdmlkZXJzO1xuICAgICAgY29uc3QgaW5pdGlhbEl0ZW0gPSBpbml0aWFsRGF0YS5iaW5kKHZhbHVlID0+IGZpbmRJdGVtQnlWYWx1ZShzcGVjLml0ZW1zLCB2YWx1ZSkpLm9yVGh1bmsoKCkgPT4gaGVhZChzcGVjLml0ZW1zKS5maWx0ZXIoaXNTaW5nbGVMaXN0SXRlbSkpO1xuICAgICAgY29uc3QgcExhYmVsID0gc3BlYy5sYWJlbC5tYXAobGFiZWwgPT4gcmVuZGVyTGFiZWwkMyhsYWJlbCwgcHJvdmlkZXJzQmFja3N0YWdlKSk7XG4gICAgICBjb25zdCBwRmllbGQgPSBGb3JtRmllbGQucGFydHMuZmllbGQoe1xuICAgICAgICBkb206IHt9LFxuICAgICAgICBmYWN0b3J5OiB7XG4gICAgICAgICAgc2tldGNoOiBza2V0Y2hTcGVjID0+IHJlbmRlckNvbW1vbkRyb3Bkb3duKHtcbiAgICAgICAgICAgIHVpZDogc2tldGNoU3BlYy51aWQsXG4gICAgICAgICAgICB0ZXh0OiBpbml0aWFsSXRlbS5tYXAoaXRlbSA9PiBpdGVtLnRleHQpLFxuICAgICAgICAgICAgaWNvbjogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICAgICAgdG9vbHRpcDogc3BlYy5sYWJlbCxcbiAgICAgICAgICAgIHJvbGU6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICAgICAgIGZldGNoOiAoY29tcCwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBmZXRjaEl0ZW1zKGNvbXAsIHNwZWMubmFtZSwgc3BlYy5pdGVtcywgUmVwcmVzZW50aW5nLmdldFZhbHVlKGNvbXApKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2soYnVpbGQoaXRlbXMsIEl0ZW1SZXNwb25zZSQxLkNMT1NFX09OX0VYRUNVVEUsIGJhY2tzdGFnZSwge1xuICAgICAgICAgICAgICAgIGlzSG9yaXpvbnRhbE1lbnU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNlYXJjaDogT3B0aW9uYWwubm9uZSgpXG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblNldHVwOiBjb25zdGFudCQxKG5vb3ApLFxuICAgICAgICAgICAgZ2V0QXBpOiBjb25zdGFudCQxKHt9KSxcbiAgICAgICAgICAgIGNvbHVtbnM6IDEsXG4gICAgICAgICAgICBwcmVzZXRzOiAnbm9ybWFsJyxcbiAgICAgICAgICAgIGNsYXNzZXM6IFtdLFxuICAgICAgICAgICAgZHJvcGRvd25CZWhhdmlvdXJzOiBbXG4gICAgICAgICAgICAgIFRhYnN0b3BwaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgICAgIHdpdGhDb21wKGluaXRpYWxJdGVtLm1hcChpdGVtID0+IGl0ZW0udmFsdWUpLCBjb21wID0+IGdldCRmKGNvbXAuZWxlbWVudCwgZGF0YUF0dHJpYnV0ZSksIChjb21wLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgZmluZEl0ZW1CeVZhbHVlKHNwZWMuaXRlbXMsIGRhdGEpLmVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXQkOShjb21wLmVsZW1lbnQsIGRhdGFBdHRyaWJ1dGUsIGl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgICAgICAgZW1pdFdpdGgoY29tcCwgdXBkYXRlTWVudVRleHQsIHsgdGV4dDogaXRlbS50ZXh0IH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sICd0b3gtbGlzdGJveCcsIGJhY2tzdGFnZS5zaGFyZWQpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgbGlzdEJveFdyYXAgPSB7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtbGlzdGJveGZpZWxkJ11cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW3BGaWVsZF1cbiAgICAgIH07XG4gICAgICByZXR1cm4gRm9ybUZpZWxkLnNrZXRjaCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtZm9ybV9fZ3JvdXAnXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBmbGF0dGVuKFtcbiAgICAgICAgICBwTGFiZWwudG9BcnJheSgpLFxuICAgICAgICAgIFtsaXN0Qm94V3JhcF1cbiAgICAgICAgXSksXG4gICAgICAgIGZpZWxkQmVoYXZpb3VyczogZGVyaXZlJDEoW0Rpc2FibGluZy5jb25maWcoe1xuICAgICAgICAgICAgZGlzYWJsZWQ6IGNvbnN0YW50JDEoIXNwZWMuZW5hYmxlZCksXG4gICAgICAgICAgICBvbkRpc2FibGVkOiBjb21wID0+IHtcbiAgICAgICAgICAgICAgRm9ybUZpZWxkLmdldEZpZWxkKGNvbXApLmVhY2goRGlzYWJsaW5nLmRpc2FibGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRW5hYmxlZDogY29tcCA9PiB7XG4gICAgICAgICAgICAgIEZvcm1GaWVsZC5nZXRGaWVsZChjb21wKS5lYWNoKERpc2FibGluZy5lbmFibGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXSlcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJQYW5lbCA9IChzcGVjLCBiYWNrc3RhZ2UpID0+ICh7XG4gICAgICBkb206IHtcbiAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgY2xhc3Nlczogc3BlYy5jbGFzc2VzXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czogbWFwJDIoc3BlYy5pdGVtcywgYmFja3N0YWdlLnNoYXJlZC5pbnRlcnByZXRlcilcbiAgICB9KTtcblxuICAgIGNvbnN0IGZhY3RvcnkkaCA9IChkZXRhaWwsIF9zcGVjKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25zID0gbWFwJDIoZGV0YWlsLm9wdGlvbnMsIG9wdGlvbiA9PiAoe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdvcHRpb24nLFxuICAgICAgICAgIHZhbHVlOiBvcHRpb24udmFsdWUsXG4gICAgICAgICAgaW5uZXJIdG1sOiBvcHRpb24udGV4dFxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgICBjb25zdCBpbml0aWFsVmFsdWVzID0gZGV0YWlsLmRhdGEubWFwKHYgPT4gd3JhcCQxKCdpbml0aWFsVmFsdWUnLCB2KSkuZ2V0T3Ioe30pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdzZWxlY3QnLFxuICAgICAgICAgIGNsYXNzZXM6IGRldGFpbC5zZWxlY3RDbGFzc2VzLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IGRldGFpbC5zZWxlY3RBdHRyaWJ1dGVzXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IG9wdGlvbnMsXG4gICAgICAgIGJlaGF2aW91cnM6IGF1Z21lbnQoZGV0YWlsLnNlbGVjdEJlaGF2aW91cnMsIFtcbiAgICAgICAgICBGb2N1c2luZy5jb25maWcoe30pLFxuICAgICAgICAgIFJlcHJlc2VudGluZy5jb25maWcoe1xuICAgICAgICAgICAgc3RvcmU6IHtcbiAgICAgICAgICAgICAgbW9kZTogJ21hbnVhbCcsXG4gICAgICAgICAgICAgIGdldFZhbHVlOiBzZWxlY3QgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXQkNihzZWxlY3QuZWxlbWVudCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHNldFZhbHVlOiAoc2VsZWN0LCBuZXdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0T3B0aW9uID0gaGVhZChkZXRhaWwub3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZm91bmQgPSBmaW5kJDUoZGV0YWlsLm9wdGlvbnMsIG9wdCA9PiBvcHQudmFsdWUgPT09IG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoZm91bmQuaXNTb21lKCkpIHtcbiAgICAgICAgICAgICAgICAgIHNldCQ1KHNlbGVjdC5lbGVtZW50LCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3QuZWxlbWVudC5kb20uc2VsZWN0ZWRJbmRleCA9PT0gLTEgJiYgbmV3VmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICBmaXJzdE9wdGlvbi5lYWNoKHZhbHVlID0+IHNldCQ1KHNlbGVjdC5lbGVtZW50LCB2YWx1ZS52YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgLi4uaW5pdGlhbFZhbHVlc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgSHRtbFNlbGVjdCA9IHNpbmdsZSh7XG4gICAgICBuYW1lOiAnSHRtbFNlbGVjdCcsXG4gICAgICBjb25maWdGaWVsZHM6IFtcbiAgICAgICAgcmVxdWlyZWQkMSgnb3B0aW9ucycpLFxuICAgICAgICBmaWVsZCgnc2VsZWN0QmVoYXZpb3VycycsIFtcbiAgICAgICAgICBGb2N1c2luZyxcbiAgICAgICAgICBSZXByZXNlbnRpbmdcbiAgICAgICAgXSksXG4gICAgICAgIGRlZmF1bHRlZCgnc2VsZWN0Q2xhc3NlcycsIFtdKSxcbiAgICAgICAgZGVmYXVsdGVkKCdzZWxlY3RBdHRyaWJ1dGVzJywge30pLFxuICAgICAgICBvcHRpb24kMygnZGF0YScpXG4gICAgICBdLFxuICAgICAgZmFjdG9yeTogZmFjdG9yeSRoXG4gICAgfSk7XG5cbiAgICBjb25zdCByZW5kZXJTZWxlY3RCb3ggPSAoc3BlYywgcHJvdmlkZXJzQmFja3N0YWdlLCBpbml0aWFsRGF0YSkgPT4ge1xuICAgICAgY29uc3QgdHJhbnNsYXRlZE9wdGlvbnMgPSBtYXAkMihzcGVjLml0ZW1zLCBpdGVtID0+ICh7XG4gICAgICAgIHRleHQ6IHByb3ZpZGVyc0JhY2tzdGFnZS50cmFuc2xhdGUoaXRlbS50ZXh0KSxcbiAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWVcbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IHBMYWJlbCA9IHNwZWMubGFiZWwubWFwKGxhYmVsID0+IHJlbmRlckxhYmVsJDMobGFiZWwsIHByb3ZpZGVyc0JhY2tzdGFnZSkpO1xuICAgICAgY29uc3QgcEZpZWxkID0gRm9ybUZpZWxkLnBhcnRzLmZpZWxkKHtcbiAgICAgICAgZG9tOiB7fSxcbiAgICAgICAgLi4uaW5pdGlhbERhdGEubWFwKGRhdGEgPT4gKHsgZGF0YSB9KSkuZ2V0T3Ioe30pLFxuICAgICAgICBzZWxlY3RBdHRyaWJ1dGVzOiB7IHNpemU6IHNwZWMuc2l6ZSB9LFxuICAgICAgICBvcHRpb25zOiB0cmFuc2xhdGVkT3B0aW9ucyxcbiAgICAgICAgZmFjdG9yeTogSHRtbFNlbGVjdCxcbiAgICAgICAgc2VsZWN0QmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIERpc2FibGluZy5jb25maWcoeyBkaXNhYmxlZDogKCkgPT4gIXNwZWMuZW5hYmxlZCB8fCBwcm92aWRlcnNCYWNrc3RhZ2UuaXNEaXNhYmxlZCgpIH0pLFxuICAgICAgICAgIFRhYnN0b3BwaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgY29uZmlnKCdzZWxlY3Rib3gtY2hhbmdlJywgW3J1biQxKGNoYW5nZSgpLCAoY29tcG9uZW50LCBfKSA9PiB7XG4gICAgICAgICAgICAgIGVtaXRXaXRoKGNvbXBvbmVudCwgZm9ybUNoYW5nZUV2ZW50LCB7IG5hbWU6IHNwZWMubmFtZSB9KTtcbiAgICAgICAgICAgIH0pXSlcbiAgICAgICAgXSlcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2hldnJvbiA9IHNwZWMuc2l6ZSA+IDEgPyBPcHRpb25hbC5ub25lKCkgOiBPcHRpb25hbC5zb21lKHJlbmRlciQzKCdjaGV2cm9uLWRvd24nLCB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFsndG94LXNlbGVjdGZpZWxkX19pY29uLWpzJ11cbiAgICAgIH0sIHByb3ZpZGVyc0JhY2tzdGFnZS5pY29ucykpO1xuICAgICAgY29uc3Qgc2VsZWN0V3JhcCA9IHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1zZWxlY3RmaWVsZCddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IGZsYXR0ZW4oW1xuICAgICAgICAgIFtwRmllbGRdLFxuICAgICAgICAgIGNoZXZyb24udG9BcnJheSgpXG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgICAgcmV0dXJuIEZvcm1GaWVsZC5za2V0Y2goe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LWZvcm1fX2dyb3VwJ11cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogZmxhdHRlbihbXG4gICAgICAgICAgcExhYmVsLnRvQXJyYXkoKSxcbiAgICAgICAgICBbc2VsZWN0V3JhcF1cbiAgICAgICAgXSksXG4gICAgICAgIGZpZWxkQmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIERpc2FibGluZy5jb25maWcoe1xuICAgICAgICAgICAgZGlzYWJsZWQ6ICgpID0+ICFzcGVjLmVuYWJsZWQgfHwgcHJvdmlkZXJzQmFja3N0YWdlLmlzRGlzYWJsZWQoKSxcbiAgICAgICAgICAgIG9uRGlzYWJsZWQ6IGNvbXAgPT4ge1xuICAgICAgICAgICAgICBGb3JtRmllbGQuZ2V0RmllbGQoY29tcCkuZWFjaChEaXNhYmxpbmcuZGlzYWJsZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25FbmFibGVkOiBjb21wID0+IHtcbiAgICAgICAgICAgICAgRm9ybUZpZWxkLmdldEZpZWxkKGNvbXApLmVhY2goRGlzYWJsaW5nLmVuYWJsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcmVjZWl2aW5nQ29uZmlnKClcbiAgICAgICAgXSlcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBzY2hlbWEkaCA9IGNvbnN0YW50JDEoW1xuICAgICAgZGVmYXVsdGVkKCdmaWVsZDFOYW1lJywgJ2ZpZWxkMScpLFxuICAgICAgZGVmYXVsdGVkKCdmaWVsZDJOYW1lJywgJ2ZpZWxkMicpLFxuICAgICAgb25TdHJpY3RIYW5kbGVyKCdvbkxvY2tlZENoYW5nZScpLFxuICAgICAgbWFya2VycyQxKFsnbG9ja0NsYXNzJ10pLFxuICAgICAgZGVmYXVsdGVkKCdsb2NrZWQnLCBmYWxzZSksXG4gICAgICBTa2V0Y2hCZWhhdmlvdXJzLmZpZWxkKCdjb3VwbGVkRmllbGRCZWhhdmlvdXJzJywgW1xuICAgICAgICBDb21wb3NpbmcsXG4gICAgICAgIFJlcHJlc2VudGluZ1xuICAgICAgXSlcbiAgICBdKTtcbiAgICBjb25zdCBnZXRGaWVsZCA9IChjb21wLCBkZXRhaWwsIHBhcnROYW1lKSA9PiBnZXRQYXJ0KGNvbXAsIGRldGFpbCwgcGFydE5hbWUpLmJpbmQoQ29tcG9zaW5nLmdldEN1cnJlbnQpO1xuICAgIGNvbnN0IGNvdXBsZWRQYXJ0ID0gKHNlbGZOYW1lLCBvdGhlck5hbWUpID0+IHJlcXVpcmVkKHtcbiAgICAgIGZhY3Rvcnk6IEZvcm1GaWVsZCxcbiAgICAgIG5hbWU6IHNlbGZOYW1lLFxuICAgICAgb3ZlcnJpZGVzOiBkZXRhaWwgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZpZWxkQmVoYXZpb3VyczogZGVyaXZlJDEoW2NvbmZpZygnY291cGxlZC1pbnB1dC1iZWhhdmlvdXInLCBbcnVuJDEoaW5wdXQoKSwgbWUgPT4ge1xuICAgICAgICAgICAgICAgIGdldEZpZWxkKG1lLCBkZXRhaWwsIG90aGVyTmFtZSkuZWFjaChvdGhlciA9PiB7XG4gICAgICAgICAgICAgICAgICBnZXRQYXJ0KG1lLCBkZXRhaWwsICdsb2NrJykuZWFjaChsb2NrID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFRvZ2dsaW5nLmlzT24obG9jaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICBkZXRhaWwub25Mb2NrZWRDaGFuZ2UobWUsIG90aGVyLCBsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pXSldKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHBhcnRzJGMgPSBjb25zdGFudCQxKFtcbiAgICAgIGNvdXBsZWRQYXJ0KCdmaWVsZDEnLCAnZmllbGQyJyksXG4gICAgICBjb3VwbGVkUGFydCgnZmllbGQyJywgJ2ZpZWxkMScpLFxuICAgICAgcmVxdWlyZWQoe1xuICAgICAgICBmYWN0b3J5OiBCdXR0b24sXG4gICAgICAgIHNjaGVtYTogW3JlcXVpcmVkJDEoJ2RvbScpXSxcbiAgICAgICAgbmFtZTogJ2xvY2snLFxuICAgICAgICBvdmVycmlkZXM6IGRldGFpbCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJ1dHRvbkJlaGF2aW91cnM6IGRlcml2ZSQxKFtUb2dnbGluZy5jb25maWcoe1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBkZXRhaWwubG9ja2VkLFxuICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzOiBkZXRhaWwubWFya2Vycy5sb2NrQ2xhc3MsXG4gICAgICAgICAgICAgICAgYXJpYTogeyBtb2RlOiAncHJlc3NlZCcgfVxuICAgICAgICAgICAgICB9KV0pXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICBdKTtcblxuICAgIGNvbnN0IGZhY3RvcnkkZyA9IChkZXRhaWwsIGNvbXBvbmVudHMsIF9zcGVjLCBfZXh0ZXJuYWxzKSA9PiAoe1xuICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgY29tcG9uZW50cyxcbiAgICAgIGJlaGF2aW91cnM6IFNrZXRjaEJlaGF2aW91cnMuYXVnbWVudChkZXRhaWwuY291cGxlZEZpZWxkQmVoYXZpb3VycywgW1xuICAgICAgICBDb21wb3NpbmcuY29uZmlnKHsgZmluZDogT3B0aW9uYWwuc29tZSB9KSxcbiAgICAgICAgUmVwcmVzZW50aW5nLmNvbmZpZyh7XG4gICAgICAgICAgc3RvcmU6IHtcbiAgICAgICAgICAgIG1vZGU6ICdtYW51YWwnLFxuICAgICAgICAgICAgZ2V0VmFsdWU6IGNvbXAgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGdldFBhcnRzT3JEaWUoY29tcCwgZGV0YWlsLCBbXG4gICAgICAgICAgICAgICAgJ2ZpZWxkMScsXG4gICAgICAgICAgICAgICAgJ2ZpZWxkMidcbiAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgW2RldGFpbC5maWVsZDFOYW1lXTogUmVwcmVzZW50aW5nLmdldFZhbHVlKHBhcnRzLmZpZWxkMSgpKSxcbiAgICAgICAgICAgICAgICBbZGV0YWlsLmZpZWxkMk5hbWVdOiBSZXByZXNlbnRpbmcuZ2V0VmFsdWUocGFydHMuZmllbGQyKCkpXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0VmFsdWU6IChjb21wLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGdldFBhcnRzT3JEaWUoY29tcCwgZGV0YWlsLCBbXG4gICAgICAgICAgICAgICAgJ2ZpZWxkMScsXG4gICAgICAgICAgICAgICAgJ2ZpZWxkMidcbiAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgIGlmIChoYXNOb25OdWxsYWJsZUtleSh2YWx1ZSwgZGV0YWlsLmZpZWxkMU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgUmVwcmVzZW50aW5nLnNldFZhbHVlKHBhcnRzLmZpZWxkMSgpLCB2YWx1ZVtkZXRhaWwuZmllbGQxTmFtZV0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChoYXNOb25OdWxsYWJsZUtleSh2YWx1ZSwgZGV0YWlsLmZpZWxkMk5hbWUpKSB7XG4gICAgICAgICAgICAgICAgUmVwcmVzZW50aW5nLnNldFZhbHVlKHBhcnRzLmZpZWxkMigpLCB2YWx1ZVtkZXRhaWwuZmllbGQyTmFtZV0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgXSksXG4gICAgICBhcGlzOiB7XG4gICAgICAgIGdldEZpZWxkMTogY29tcG9uZW50ID0+IGdldFBhcnQoY29tcG9uZW50LCBkZXRhaWwsICdmaWVsZDEnKSxcbiAgICAgICAgZ2V0RmllbGQyOiBjb21wb25lbnQgPT4gZ2V0UGFydChjb21wb25lbnQsIGRldGFpbCwgJ2ZpZWxkMicpLFxuICAgICAgICBnZXRMb2NrOiBjb21wb25lbnQgPT4gZ2V0UGFydChjb21wb25lbnQsIGRldGFpbCwgJ2xvY2snKVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IEZvcm1Db3VwbGVkSW5wdXRzID0gY29tcG9zaXRlKHtcbiAgICAgIG5hbWU6ICdGb3JtQ291cGxlZElucHV0cycsXG4gICAgICBjb25maWdGaWVsZHM6IHNjaGVtYSRoKCksXG4gICAgICBwYXJ0RmllbGRzOiBwYXJ0cyRjKCksXG4gICAgICBmYWN0b3J5OiBmYWN0b3J5JGcsXG4gICAgICBhcGlzOiB7XG4gICAgICAgIGdldEZpZWxkMTogKGFwaXMsIGNvbXBvbmVudCkgPT4gYXBpcy5nZXRGaWVsZDEoY29tcG9uZW50KSxcbiAgICAgICAgZ2V0RmllbGQyOiAoYXBpcywgY29tcG9uZW50KSA9PiBhcGlzLmdldEZpZWxkMihjb21wb25lbnQpLFxuICAgICAgICBnZXRMb2NrOiAoYXBpcywgY29tcG9uZW50KSA9PiBhcGlzLmdldExvY2soY29tcG9uZW50KVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZm9ybWF0U2l6ZSA9IHNpemUgPT4ge1xuICAgICAgY29uc3QgdW5pdERlYyA9IHtcbiAgICAgICAgJyc6IDAsXG4gICAgICAgICdweCc6IDAsXG4gICAgICAgICdwdCc6IDEsXG4gICAgICAgICdtbSc6IDEsXG4gICAgICAgICdwYyc6IDIsXG4gICAgICAgICdleCc6IDIsXG4gICAgICAgICdlbSc6IDIsXG4gICAgICAgICdjaCc6IDIsXG4gICAgICAgICdyZW0nOiAyLFxuICAgICAgICAnY20nOiAzLFxuICAgICAgICAnaW4nOiA0LFxuICAgICAgICAnJSc6IDRcbiAgICAgIH07XG4gICAgICBjb25zdCBtYXhEZWNpbWFsID0gdW5pdCA9PiB1bml0IGluIHVuaXREZWMgPyB1bml0RGVjW3VuaXRdIDogMTtcbiAgICAgIGxldCBudW1UZXh0ID0gc2l6ZS52YWx1ZS50b0ZpeGVkKG1heERlY2ltYWwoc2l6ZS51bml0KSk7XG4gICAgICBpZiAobnVtVGV4dC5pbmRleE9mKCcuJykgIT09IC0xKSB7XG4gICAgICAgIG51bVRleHQgPSBudW1UZXh0LnJlcGxhY2UoL1xcLj8wKiQvLCAnJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVtVGV4dCArIHNpemUudW5pdDtcbiAgICB9O1xuICAgIGNvbnN0IHBhcnNlU2l6ZSA9IHNpemVUZXh0ID0+IHtcbiAgICAgIGNvbnN0IG51bVBhdHRlcm4gPSAvXlxccyooXFxkKyg/OlxcLlxcZCspPylcXHMqKHxjbXxtbXxpbnxweHxwdHxwY3xlbXxleHxjaHxyZW18dnd8dmh8dm1pbnx2bWF4fCUpXFxzKiQvO1xuICAgICAgY29uc3QgbWF0Y2ggPSBudW1QYXR0ZXJuLmV4ZWMoc2l6ZVRleHQpO1xuICAgICAgaWYgKG1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdChtYXRjaFsxXSk7XG4gICAgICAgIGNvbnN0IHVuaXQgPSBtYXRjaFsyXTtcbiAgICAgICAgcmV0dXJuIFJlc3VsdC52YWx1ZSh7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgdW5pdFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3Ioc2l6ZVRleHQpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY29udmVydFVuaXQgPSAoc2l6ZSwgdW5pdCkgPT4ge1xuICAgICAgY29uc3QgaW5JbmNoID0ge1xuICAgICAgICAnJzogOTYsXG4gICAgICAgICdweCc6IDk2LFxuICAgICAgICAncHQnOiA3MixcbiAgICAgICAgJ2NtJzogMi41NCxcbiAgICAgICAgJ3BjJzogMTIsXG4gICAgICAgICdtbSc6IDI1LjQsXG4gICAgICAgICdpbic6IDFcbiAgICAgIH07XG4gICAgICBjb25zdCBzdXBwb3J0ZWQgPSB1ID0+IGhhcyQyKGluSW5jaCwgdSk7XG4gICAgICBpZiAoc2l6ZS51bml0ID09PSB1bml0KSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHNpemUudmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0ZWQoc2l6ZS51bml0KSAmJiBzdXBwb3J0ZWQodW5pdCkpIHtcbiAgICAgICAgaWYgKGluSW5jaFtzaXplLnVuaXRdID09PSBpbkluY2hbdW5pdF0pIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShzaXplLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShzaXplLnZhbHVlIC8gaW5JbmNoW3NpemUudW5pdF0gKiBpbkluY2hbdW5pdF0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgbm9TaXplQ29udmVyc2lvbiA9IF9pbnB1dCA9PiBPcHRpb25hbC5ub25lKCk7XG4gICAgY29uc3QgcmF0aW9TaXplQ29udmVyc2lvbiA9IChzY2FsZSwgdW5pdCkgPT4gc2l6ZSA9PiBjb252ZXJ0VW5pdChzaXplLCB1bml0KS5tYXAodmFsdWUgPT4gKHtcbiAgICAgIHZhbHVlOiB2YWx1ZSAqIHNjYWxlLFxuICAgICAgdW5pdFxuICAgIH0pKTtcbiAgICBjb25zdCBtYWtlUmF0aW9Db252ZXJ0ZXIgPSAoY3VycmVudEZpZWxkVGV4dCwgb3RoZXJGaWVsZFRleHQpID0+IHtcbiAgICAgIGNvbnN0IGNWYWx1ZSA9IHBhcnNlU2l6ZShjdXJyZW50RmllbGRUZXh0KS50b09wdGlvbmFsKCk7XG4gICAgICBjb25zdCBvVmFsdWUgPSBwYXJzZVNpemUob3RoZXJGaWVsZFRleHQpLnRvT3B0aW9uYWwoKTtcbiAgICAgIHJldHVybiBsaWZ0MihjVmFsdWUsIG9WYWx1ZSwgKGNTaXplLCBvU2l6ZSkgPT4gY29udmVydFVuaXQoY1NpemUsIG9TaXplLnVuaXQpLm1hcCh2YWwgPT4gb1NpemUudmFsdWUgLyB2YWwpLm1hcChyID0+IHJhdGlvU2l6ZUNvbnZlcnNpb24ociwgb1NpemUudW5pdCkpLmdldE9yKG5vU2l6ZUNvbnZlcnNpb24pKS5nZXRPcihub1NpemVDb252ZXJzaW9uKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVyU2l6ZUlucHV0ID0gKHNwZWMsIHByb3ZpZGVyc0JhY2tzdGFnZSkgPT4ge1xuICAgICAgbGV0IGNvbnZlcnRlciA9IG5vU2l6ZUNvbnZlcnNpb247XG4gICAgICBjb25zdCByYXRpb0V2ZW50ID0gZ2VuZXJhdGUkNigncmF0aW8tZXZlbnQnKTtcbiAgICAgIGNvbnN0IG1ha2VJY29uID0gaWNvbk5hbWUgPT4gcmVuZGVyJDMoaWNvbk5hbWUsIHtcbiAgICAgICAgdGFnOiAnc3BhbicsXG4gICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAndG94LWljb24nLFxuICAgICAgICAgICd0b3gtbG9jay1pY29uX18nICsgaWNvbk5hbWVcbiAgICAgICAgXVxuICAgICAgfSwgcHJvdmlkZXJzQmFja3N0YWdlLmljb25zKTtcbiAgICAgIGNvbnN0IHBMb2NrID0gRm9ybUNvdXBsZWRJbnB1dHMucGFydHMubG9jayh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2J1dHRvbicsXG4gICAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICAgJ3RveC1sb2NrJyxcbiAgICAgICAgICAgICd0b3gtYnV0dG9uJyxcbiAgICAgICAgICAgICd0b3gtYnV0dG9uLS1uYWtlZCcsXG4gICAgICAgICAgICAndG94LWJ1dHRvbi0taWNvbidcbiAgICAgICAgICBdLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgdGl0bGU6IHByb3ZpZGVyc0JhY2tzdGFnZS50cmFuc2xhdGUoc3BlYy5sYWJlbC5nZXRPcignQ29uc3RyYWluIHByb3BvcnRpb25zJykpIH1cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgIG1ha2VJY29uKCdsb2NrJyksXG4gICAgICAgICAgbWFrZUljb24oJ3VubG9jaycpXG4gICAgICAgIF0sXG4gICAgICAgIGJ1dHRvbkJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBEaXNhYmxpbmcuY29uZmlnKHsgZGlzYWJsZWQ6ICgpID0+ICFzcGVjLmVuYWJsZWQgfHwgcHJvdmlkZXJzQmFja3N0YWdlLmlzRGlzYWJsZWQoKSB9KSxcbiAgICAgICAgICByZWNlaXZpbmdDb25maWcoKSxcbiAgICAgICAgICBUYWJzdG9wcGluZy5jb25maWcoe30pXG4gICAgICAgIF0pXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IGNvbXBvbmVudHMgPT4gKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1mb3JtX19ncm91cCddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZ2V0RmllbGRQYXJ0ID0gaXNGaWVsZDEgPT4gRm9ybUZpZWxkLnBhcnRzLmZpZWxkKHtcbiAgICAgICAgZmFjdG9yeTogSW5wdXQsXG4gICAgICAgIGlucHV0Q2xhc3NlczogWyd0b3gtdGV4dGZpZWxkJ10sXG4gICAgICAgIGlucHV0QmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIERpc2FibGluZy5jb25maWcoeyBkaXNhYmxlZDogKCkgPT4gIXNwZWMuZW5hYmxlZCB8fCBwcm92aWRlcnNCYWNrc3RhZ2UuaXNEaXNhYmxlZCgpIH0pLFxuICAgICAgICAgIHJlY2VpdmluZ0NvbmZpZygpLFxuICAgICAgICAgIFRhYnN0b3BwaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgY29uZmlnKCdzaXplLWlucHV0LWV2ZW50cycsIFtcbiAgICAgICAgICAgIHJ1biQxKGZvY3VzaW4oKSwgKGNvbXBvbmVudCwgX3NpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGVtaXRXaXRoKGNvbXBvbmVudCwgcmF0aW9FdmVudCwgeyBpc0ZpZWxkMSB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcnVuJDEoY2hhbmdlKCksIChjb21wb25lbnQsIF9zaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICBlbWl0V2l0aChjb21wb25lbnQsIGZvcm1DaGFuZ2VFdmVudCwgeyBuYW1lOiBzcGVjLm5hbWUgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0pXG4gICAgICAgIF0pLFxuICAgICAgICBzZWxlY3RPbkZvY3VzOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBjb25zdCBnZXRMYWJlbCA9IGxhYmVsID0+ICh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2xhYmVsJyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1sYWJlbCddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFt0ZXh0JDIocHJvdmlkZXJzQmFja3N0YWdlLnRyYW5zbGF0ZShsYWJlbCkpXVxuICAgICAgfSk7XG4gICAgICBjb25zdCB3aWR0aEZpZWxkID0gRm9ybUNvdXBsZWRJbnB1dHMucGFydHMuZmllbGQxKGZvcm1Hcm91cChbXG4gICAgICAgIEZvcm1GaWVsZC5wYXJ0cy5sYWJlbChnZXRMYWJlbCgnV2lkdGgnKSksXG4gICAgICAgIGdldEZpZWxkUGFydCh0cnVlKVxuICAgICAgXSkpO1xuICAgICAgY29uc3QgaGVpZ2h0RmllbGQgPSBGb3JtQ291cGxlZElucHV0cy5wYXJ0cy5maWVsZDIoZm9ybUdyb3VwKFtcbiAgICAgICAgRm9ybUZpZWxkLnBhcnRzLmxhYmVsKGdldExhYmVsKCdIZWlnaHQnKSksXG4gICAgICAgIGdldEZpZWxkUGFydChmYWxzZSlcbiAgICAgIF0pKTtcbiAgICAgIHJldHVybiBGb3JtQ291cGxlZElucHV0cy5za2V0Y2goe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LWZvcm1fX2dyb3VwJ11cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW3tcbiAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1mb3JtX19jb250cm9scy1oLXN0YWNrJ11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgICAgIHdpZHRoRmllbGQsXG4gICAgICAgICAgICAgIGhlaWdodEZpZWxkLFxuICAgICAgICAgICAgICBmb3JtR3JvdXAoW1xuICAgICAgICAgICAgICAgIGdldExhYmVsKG5ic3ApLFxuICAgICAgICAgICAgICAgIHBMb2NrXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfV0sXG4gICAgICAgIGZpZWxkMU5hbWU6ICd3aWR0aCcsXG4gICAgICAgIGZpZWxkMk5hbWU6ICdoZWlnaHQnLFxuICAgICAgICBsb2NrZWQ6IHRydWUsXG4gICAgICAgIG1hcmtlcnM6IHsgbG9ja0NsYXNzOiAndG94LWxvY2tlZCcgfSxcbiAgICAgICAgb25Mb2NrZWRDaGFuZ2U6IChjdXJyZW50LCBvdGhlciwgX2xvY2spID0+IHtcbiAgICAgICAgICBwYXJzZVNpemUoUmVwcmVzZW50aW5nLmdldFZhbHVlKGN1cnJlbnQpKS5lYWNoKHNpemUgPT4ge1xuICAgICAgICAgICAgY29udmVydGVyKHNpemUpLmVhY2gobmV3U2l6ZSA9PiB7XG4gICAgICAgICAgICAgIFJlcHJlc2VudGluZy5zZXRWYWx1ZShvdGhlciwgZm9ybWF0U2l6ZShuZXdTaXplKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgY291cGxlZEZpZWxkQmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIERpc2FibGluZy5jb25maWcoe1xuICAgICAgICAgICAgZGlzYWJsZWQ6ICgpID0+ICFzcGVjLmVuYWJsZWQgfHwgcHJvdmlkZXJzQmFja3N0YWdlLmlzRGlzYWJsZWQoKSxcbiAgICAgICAgICAgIG9uRGlzYWJsZWQ6IGNvbXAgPT4ge1xuICAgICAgICAgICAgICBGb3JtQ291cGxlZElucHV0cy5nZXRGaWVsZDEoY29tcCkuYmluZChGb3JtRmllbGQuZ2V0RmllbGQpLmVhY2goRGlzYWJsaW5nLmRpc2FibGUpO1xuICAgICAgICAgICAgICBGb3JtQ291cGxlZElucHV0cy5nZXRGaWVsZDIoY29tcCkuYmluZChGb3JtRmllbGQuZ2V0RmllbGQpLmVhY2goRGlzYWJsaW5nLmRpc2FibGUpO1xuICAgICAgICAgICAgICBGb3JtQ291cGxlZElucHV0cy5nZXRMb2NrKGNvbXApLmVhY2goRGlzYWJsaW5nLmRpc2FibGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRW5hYmxlZDogY29tcCA9PiB7XG4gICAgICAgICAgICAgIEZvcm1Db3VwbGVkSW5wdXRzLmdldEZpZWxkMShjb21wKS5iaW5kKEZvcm1GaWVsZC5nZXRGaWVsZCkuZWFjaChEaXNhYmxpbmcuZW5hYmxlKTtcbiAgICAgICAgICAgICAgRm9ybUNvdXBsZWRJbnB1dHMuZ2V0RmllbGQyKGNvbXApLmJpbmQoRm9ybUZpZWxkLmdldEZpZWxkKS5lYWNoKERpc2FibGluZy5lbmFibGUpO1xuICAgICAgICAgICAgICBGb3JtQ291cGxlZElucHV0cy5nZXRMb2NrKGNvbXApLmVhY2goRGlzYWJsaW5nLmVuYWJsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcmVjZWl2aW5nQ29uZmlnKCksXG4gICAgICAgICAgY29uZmlnKCdzaXplLWlucHV0LWV2ZW50czInLCBbcnVuJDEocmF0aW9FdmVudCwgKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaXNGaWVsZDEgPSBzaW11bGF0ZWRFdmVudC5ldmVudC5pc0ZpZWxkMTtcbiAgICAgICAgICAgICAgY29uc3Qgb3B0Q3VycmVudCA9IGlzRmllbGQxID8gRm9ybUNvdXBsZWRJbnB1dHMuZ2V0RmllbGQxKGNvbXBvbmVudCkgOiBGb3JtQ291cGxlZElucHV0cy5nZXRGaWVsZDIoY29tcG9uZW50KTtcbiAgICAgICAgICAgICAgY29uc3Qgb3B0T3RoZXIgPSBpc0ZpZWxkMSA/IEZvcm1Db3VwbGVkSW5wdXRzLmdldEZpZWxkMihjb21wb25lbnQpIDogRm9ybUNvdXBsZWRJbnB1dHMuZ2V0RmllbGQxKGNvbXBvbmVudCk7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlMSA9IG9wdEN1cnJlbnQubWFwKFJlcHJlc2VudGluZy5nZXRWYWx1ZSkuZ2V0T3IoJycpO1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZTIgPSBvcHRPdGhlci5tYXAoUmVwcmVzZW50aW5nLmdldFZhbHVlKS5nZXRPcignJyk7XG4gICAgICAgICAgICAgIGNvbnZlcnRlciA9IG1ha2VSYXRpb0NvbnZlcnRlcih2YWx1ZTEsIHZhbHVlMik7XG4gICAgICAgICAgICB9KV0pXG4gICAgICAgIF0pXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVyU2xpZGVyID0gKHNwZWMsIHByb3ZpZGVyQmFja3N0YWdlLCBpbml0aWFsRGF0YSkgPT4ge1xuICAgICAgY29uc3QgbGFiZWxQYXJ0ID0gU2xpZGVyLnBhcnRzLmxhYmVsKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnbGFiZWwnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LWxhYmVsJ11cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW3RleHQkMihwcm92aWRlckJhY2tzdGFnZS50cmFuc2xhdGUoc3BlYy5sYWJlbCkpXVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzcGVjdHJ1bSA9IFNsaWRlci5wYXJ0cy5zcGVjdHJ1bSh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtc2xpZGVyX19yYWlsJ10sXG4gICAgICAgICAgYXR0cmlidXRlczogeyByb2xlOiAncHJlc2VudGF0aW9uJyB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgdGh1bWIgPSBTbGlkZXIucGFydHMudGh1bWIoe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXNsaWRlcl9faGFuZGxlJ10sXG4gICAgICAgICAgYXR0cmlidXRlczogeyByb2xlOiAncHJlc2VudGF0aW9uJyB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFNsaWRlci5za2V0Y2goe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXNsaWRlciddLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3ByZXNlbnRhdGlvbicgfVxuICAgICAgICB9LFxuICAgICAgICBtb2RlbDoge1xuICAgICAgICAgIG1vZGU6ICd4JyxcbiAgICAgICAgICBtaW5YOiBzcGVjLm1pbixcbiAgICAgICAgICBtYXhYOiBzcGVjLm1heCxcbiAgICAgICAgICBnZXRJbml0aWFsVmFsdWU6IGNvbnN0YW50JDEoaW5pdGlhbERhdGEuZ2V0T3JUaHVuaygoKSA9PiAoTWF0aC5hYnMoc3BlYy5tYXgpIC0gTWF0aC5hYnMoc3BlYy5taW4pKSAvIDIpKVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgbGFiZWxQYXJ0LFxuICAgICAgICAgIHNwZWN0cnVtLFxuICAgICAgICAgIHRodW1iXG4gICAgICAgIF0sXG4gICAgICAgIHNsaWRlckJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBDb21wb3NpbmdDb25maWdzLnNlbGYoKSxcbiAgICAgICAgICBGb2N1c2luZy5jb25maWcoe30pXG4gICAgICAgIF0pLFxuICAgICAgICBvbkNob29zZTogKGNvbXBvbmVudCwgdGh1bWIsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgZW1pdFdpdGgoY29tcG9uZW50LCBmb3JtQ2hhbmdlRXZlbnQsIHtcbiAgICAgICAgICAgIG5hbWU6IHNwZWMubmFtZSxcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJUYWJsZSA9IChzcGVjLCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IHJlbmRlclRoID0gdGV4dCA9PiAoe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICd0aCcsXG4gICAgICAgICAgaW5uZXJIdG1sOiBwcm92aWRlcnNCYWNrc3RhZ2UudHJhbnNsYXRlKHRleHQpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVuZGVySGVhZGVyID0gaGVhZGVyID0+ICh7XG4gICAgICAgIGRvbTogeyB0YWc6ICd0aGVhZCcgfSxcbiAgICAgICAgY29tcG9uZW50czogW3tcbiAgICAgICAgICAgIGRvbTogeyB0YWc6ICd0cicgfSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IG1hcCQyKGhlYWRlciwgcmVuZGVyVGgpXG4gICAgICAgICAgfV1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVuZGVyVGQgPSB0ZXh0ID0+ICh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ3RkJyxcbiAgICAgICAgICBpbm5lckh0bWw6IHByb3ZpZGVyc0JhY2tzdGFnZS50cmFuc2xhdGUodGV4dClcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCByZW5kZXJUciA9IHJvdyA9PiAoe1xuICAgICAgICBkb206IHsgdGFnOiAndHInIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IG1hcCQyKHJvdywgcmVuZGVyVGQpXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlbmRlclJvd3MgPSByb3dzID0+ICh7XG4gICAgICAgIGRvbTogeyB0YWc6ICd0Ym9keScgfSxcbiAgICAgICAgY29tcG9uZW50czogbWFwJDIocm93cywgcmVuZGVyVHIpXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ3RhYmxlJyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1kaWFsb2dfX3RhYmxlJ11cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgIHJlbmRlckhlYWRlcihzcGVjLmhlYWRlciksXG4gICAgICAgICAgcmVuZGVyUm93cyhzcGVjLmNlbGxzKVxuICAgICAgICBdLFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgVGFic3RvcHBpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICBGb2N1c2luZy5jb25maWcoe30pXG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJUZXh0RmllbGQgPSAoc3BlYywgcHJvdmlkZXJzQmFja3N0YWdlKSA9PiB7XG4gICAgICBjb25zdCBwTGFiZWwgPSBzcGVjLmxhYmVsLm1hcChsYWJlbCA9PiByZW5kZXJMYWJlbCQzKGxhYmVsLCBwcm92aWRlcnNCYWNrc3RhZ2UpKTtcbiAgICAgIGNvbnN0IGJhc2VJbnB1dEJlaGF2aW91cnMgPSBbXG4gICAgICAgIERpc2FibGluZy5jb25maWcoeyBkaXNhYmxlZDogKCkgPT4gc3BlYy5kaXNhYmxlZCB8fCBwcm92aWRlcnNCYWNrc3RhZ2UuaXNEaXNhYmxlZCgpIH0pLFxuICAgICAgICByZWNlaXZpbmdDb25maWcoKSxcbiAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgbW9kZTogJ2V4ZWN1dGlvbicsXG4gICAgICAgICAgdXNlRW50ZXI6IHNwZWMubXVsdGlsaW5lICE9PSB0cnVlLFxuICAgICAgICAgIHVzZUNvbnRyb2xFbnRlcjogc3BlYy5tdWx0aWxpbmUgPT09IHRydWUsXG4gICAgICAgICAgZXhlY3V0ZTogY29tcCA9PiB7XG4gICAgICAgICAgICBlbWl0KGNvbXAsIGZvcm1TdWJtaXRFdmVudCk7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBjb25maWcoJ3RleHRmaWVsZC1jaGFuZ2UnLCBbXG4gICAgICAgICAgcnVuJDEoaW5wdXQoKSwgKGNvbXBvbmVudCwgXykgPT4ge1xuICAgICAgICAgICAgZW1pdFdpdGgoY29tcG9uZW50LCBmb3JtQ2hhbmdlRXZlbnQsIHsgbmFtZTogc3BlYy5uYW1lIH0pO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJ1biQxKHBvc3RQYXN0ZSgpLCAoY29tcG9uZW50LCBfKSA9PiB7XG4gICAgICAgICAgICBlbWl0V2l0aChjb21wb25lbnQsIGZvcm1DaGFuZ2VFdmVudCwgeyBuYW1lOiBzcGVjLm5hbWUgfSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgXSksXG4gICAgICAgIFRhYnN0b3BwaW5nLmNvbmZpZyh7fSlcbiAgICAgIF07XG4gICAgICBjb25zdCB2YWxpZGF0aW5nQmVoYXZpb3VycyA9IHNwZWMudmFsaWRhdGlvbi5tYXAodmwgPT4gSW52YWxpZGF0aW5nLmNvbmZpZyh7XG4gICAgICAgIGdldFJvb3Q6IGlucHV0ID0+IHtcbiAgICAgICAgICByZXR1cm4gcGFyZW50RWxlbWVudChpbnB1dC5lbGVtZW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgaW52YWxpZENsYXNzOiAndG94LWludmFsaWQnLFxuICAgICAgICB2YWxpZGF0b3I6IHtcbiAgICAgICAgICB2YWxpZGF0ZTogaW5wdXQgPT4ge1xuICAgICAgICAgICAgY29uc3QgdiA9IFJlcHJlc2VudGluZy5nZXRWYWx1ZShpbnB1dCk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB2bC52YWxpZGF0b3Iodik7XG4gICAgICAgICAgICByZXR1cm4gRnV0dXJlLnB1cmUocmVzdWx0ID09PSB0cnVlID8gUmVzdWx0LnZhbHVlKHYpIDogUmVzdWx0LmVycm9yKHJlc3VsdCkpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdmFsaWRhdGVPbkxvYWQ6IHZsLnZhbGlkYXRlT25Mb2FkXG4gICAgICAgIH1cbiAgICAgIH0pKS50b0FycmF5KCk7XG4gICAgICBjb25zdCBwbGFjZWhvbGRlciA9IHNwZWMucGxhY2Vob2xkZXIuZm9sZChjb25zdGFudCQxKHt9KSwgcCA9PiAoeyBwbGFjZWhvbGRlcjogcHJvdmlkZXJzQmFja3N0YWdlLnRyYW5zbGF0ZShwKSB9KSk7XG4gICAgICBjb25zdCBpbnB1dE1vZGUgPSBzcGVjLmlucHV0TW9kZS5mb2xkKGNvbnN0YW50JDEoe30pLCBtb2RlID0+ICh7IGlucHV0bW9kZTogbW9kZSB9KSk7XG4gICAgICBjb25zdCBpbnB1dEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIC4uLnBsYWNlaG9sZGVyLFxuICAgICAgICAuLi5pbnB1dE1vZGVcbiAgICAgIH07XG4gICAgICBjb25zdCBwRmllbGQgPSBGb3JtRmllbGQucGFydHMuZmllbGQoe1xuICAgICAgICB0YWc6IHNwZWMubXVsdGlsaW5lID09PSB0cnVlID8gJ3RleHRhcmVhJyA6ICdpbnB1dCcsXG4gICAgICAgIC4uLnNwZWMuZGF0YS5tYXAoZGF0YSA9PiAoeyBkYXRhIH0pKS5nZXRPcih7fSksXG4gICAgICAgIGlucHV0QXR0cmlidXRlcyxcbiAgICAgICAgaW5wdXRDbGFzc2VzOiBbc3BlYy5jbGFzc25hbWVdLFxuICAgICAgICBpbnB1dEJlaGF2aW91cnM6IGRlcml2ZSQxKGZsYXR0ZW4oW1xuICAgICAgICAgIGJhc2VJbnB1dEJlaGF2aW91cnMsXG4gICAgICAgICAgdmFsaWRhdGluZ0JlaGF2aW91cnNcbiAgICAgICAgXSkpLFxuICAgICAgICBzZWxlY3RPbkZvY3VzOiBmYWxzZSxcbiAgICAgICAgZmFjdG9yeTogSW5wdXRcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcFRleHRGaWVsZCA9IHNwZWMubXVsdGlsaW5lID8ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXRleHRhcmVhLXdyYXAnXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbcEZpZWxkXVxuICAgICAgfSA6IHBGaWVsZDtcbiAgICAgIGNvbnN0IGV4dHJhQ2xhc3NlcyA9IHNwZWMuZmxleCA/IFsndG94LWZvcm1fX2dyb3VwLS1zdHJldGNoZWQnXSA6IFtdO1xuICAgICAgY29uc3QgZXh0cmFDbGFzc2VzMiA9IGV4dHJhQ2xhc3Nlcy5jb25jYXQoc3BlYy5tYXhpbWl6ZWQgPyBbJ3RveC1mb3JtLWdyb3VwLS1tYXhpbWl6ZSddIDogW10pO1xuICAgICAgY29uc3QgZXh0cmFCZWhhdmlvdXJzID0gW1xuICAgICAgICBEaXNhYmxpbmcuY29uZmlnKHtcbiAgICAgICAgICBkaXNhYmxlZDogKCkgPT4gc3BlYy5kaXNhYmxlZCB8fCBwcm92aWRlcnNCYWNrc3RhZ2UuaXNEaXNhYmxlZCgpLFxuICAgICAgICAgIG9uRGlzYWJsZWQ6IGNvbXAgPT4ge1xuICAgICAgICAgICAgRm9ybUZpZWxkLmdldEZpZWxkKGNvbXApLmVhY2goRGlzYWJsaW5nLmRpc2FibGUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25FbmFibGVkOiBjb21wID0+IHtcbiAgICAgICAgICAgIEZvcm1GaWVsZC5nZXRGaWVsZChjb21wKS5lYWNoKERpc2FibGluZy5lbmFibGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHJlY2VpdmluZ0NvbmZpZygpXG4gICAgICBdO1xuICAgICAgcmV0dXJuIHJlbmRlckZvcm1GaWVsZFdpdGgocExhYmVsLCBwVGV4dEZpZWxkLCBleHRyYUNsYXNzZXMyLCBleHRyYUJlaGF2aW91cnMpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVySW5wdXQgPSAoc3BlYywgcHJvdmlkZXJzQmFja3N0YWdlLCBpbml0aWFsRGF0YSkgPT4gcmVuZGVyVGV4dEZpZWxkKHtcbiAgICAgIG5hbWU6IHNwZWMubmFtZSxcbiAgICAgIG11bHRpbGluZTogZmFsc2UsXG4gICAgICBsYWJlbDogc3BlYy5sYWJlbCxcbiAgICAgIGlucHV0TW9kZTogc3BlYy5pbnB1dE1vZGUsXG4gICAgICBwbGFjZWhvbGRlcjogc3BlYy5wbGFjZWhvbGRlcixcbiAgICAgIGZsZXg6IGZhbHNlLFxuICAgICAgZGlzYWJsZWQ6ICFzcGVjLmVuYWJsZWQsXG4gICAgICBjbGFzc25hbWU6ICd0b3gtdGV4dGZpZWxkJyxcbiAgICAgIHZhbGlkYXRpb246IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgIG1heGltaXplZDogc3BlYy5tYXhpbWl6ZWQsXG4gICAgICBkYXRhOiBpbml0aWFsRGF0YVxuICAgIH0sIHByb3ZpZGVyc0JhY2tzdGFnZSk7XG4gICAgY29uc3QgcmVuZGVyVGV4dGFyZWEgPSAoc3BlYywgcHJvdmlkZXJzQmFja3N0YWdlLCBpbml0aWFsRGF0YSkgPT4gcmVuZGVyVGV4dEZpZWxkKHtcbiAgICAgIG5hbWU6IHNwZWMubmFtZSxcbiAgICAgIG11bHRpbGluZTogdHJ1ZSxcbiAgICAgIGxhYmVsOiBzcGVjLmxhYmVsLFxuICAgICAgaW5wdXRNb2RlOiBPcHRpb25hbC5ub25lKCksXG4gICAgICBwbGFjZWhvbGRlcjogc3BlYy5wbGFjZWhvbGRlcixcbiAgICAgIGZsZXg6IHRydWUsXG4gICAgICBkaXNhYmxlZDogIXNwZWMuZW5hYmxlZCxcbiAgICAgIGNsYXNzbmFtZTogJ3RveC10ZXh0YXJlYScsXG4gICAgICB2YWxpZGF0aW9uOiBPcHRpb25hbC5ub25lKCksXG4gICAgICBtYXhpbWl6ZWQ6IHNwZWMubWF4aW1pemVkLFxuICAgICAgZGF0YTogaW5pdGlhbERhdGFcbiAgICB9LCBwcm92aWRlcnNCYWNrc3RhZ2UpO1xuXG4gICAgY29uc3QgZ2V0QW5pbWF0aW9uUm9vdCA9IChjb21wb25lbnQsIHNsaWRlQ29uZmlnKSA9PiBzbGlkZUNvbmZpZy5nZXRBbmltYXRpb25Sb290LmZvbGQoKCkgPT4gY29tcG9uZW50LmVsZW1lbnQsIGdldCA9PiBnZXQoY29tcG9uZW50KSk7XG5cbiAgICBjb25zdCBnZXREaW1lbnNpb25Qcm9wZXJ0eSA9IHNsaWRlQ29uZmlnID0+IHNsaWRlQ29uZmlnLmRpbWVuc2lvbi5wcm9wZXJ0eTtcbiAgICBjb25zdCBnZXREaW1lbnNpb24gPSAoc2xpZGVDb25maWcsIGVsZW0pID0+IHNsaWRlQ29uZmlnLmRpbWVuc2lvbi5nZXREaW1lbnNpb24oZWxlbSk7XG4gICAgY29uc3QgZGlzYWJsZVRyYW5zaXRpb25zID0gKGNvbXBvbmVudCwgc2xpZGVDb25maWcpID0+IHtcbiAgICAgIGNvbnN0IHJvb3QgPSBnZXRBbmltYXRpb25Sb290KGNvbXBvbmVudCwgc2xpZGVDb25maWcpO1xuICAgICAgcmVtb3ZlJDEocm9vdCwgW1xuICAgICAgICBzbGlkZUNvbmZpZy5zaHJpbmtpbmdDbGFzcyxcbiAgICAgICAgc2xpZGVDb25maWcuZ3Jvd2luZ0NsYXNzXG4gICAgICBdKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldFNocnVuayA9IChjb21wb25lbnQsIHNsaWRlQ29uZmlnKSA9PiB7XG4gICAgICByZW1vdmUkMihjb21wb25lbnQuZWxlbWVudCwgc2xpZGVDb25maWcub3BlbkNsYXNzKTtcbiAgICAgIGFkZCQyKGNvbXBvbmVudC5lbGVtZW50LCBzbGlkZUNvbmZpZy5jbG9zZWRDbGFzcyk7XG4gICAgICBzZXQkOChjb21wb25lbnQuZWxlbWVudCwgZ2V0RGltZW5zaW9uUHJvcGVydHkoc2xpZGVDb25maWcpLCAnMHB4Jyk7XG4gICAgICByZWZsb3coY29tcG9uZW50LmVsZW1lbnQpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0R3Jvd24gPSAoY29tcG9uZW50LCBzbGlkZUNvbmZpZykgPT4ge1xuICAgICAgcmVtb3ZlJDIoY29tcG9uZW50LmVsZW1lbnQsIHNsaWRlQ29uZmlnLmNsb3NlZENsYXNzKTtcbiAgICAgIGFkZCQyKGNvbXBvbmVudC5lbGVtZW50LCBzbGlkZUNvbmZpZy5vcGVuQ2xhc3MpO1xuICAgICAgcmVtb3ZlJDYoY29tcG9uZW50LmVsZW1lbnQsIGdldERpbWVuc2lvblByb3BlcnR5KHNsaWRlQ29uZmlnKSk7XG4gICAgfTtcbiAgICBjb25zdCBkb0ltbWVkaWF0ZVNocmluayA9IChjb21wb25lbnQsIHNsaWRlQ29uZmlnLCBzbGlkZVN0YXRlLCBfY2FsY3VsYXRlZFNpemUpID0+IHtcbiAgICAgIHNsaWRlU3RhdGUuc2V0Q29sbGFwc2VkKCk7XG4gICAgICBzZXQkOChjb21wb25lbnQuZWxlbWVudCwgZ2V0RGltZW5zaW9uUHJvcGVydHkoc2xpZGVDb25maWcpLCBnZXREaW1lbnNpb24oc2xpZGVDb25maWcsIGNvbXBvbmVudC5lbGVtZW50KSk7XG4gICAgICBkaXNhYmxlVHJhbnNpdGlvbnMoY29tcG9uZW50LCBzbGlkZUNvbmZpZyk7XG4gICAgICBzZXRTaHJ1bmsoY29tcG9uZW50LCBzbGlkZUNvbmZpZyk7XG4gICAgICBzbGlkZUNvbmZpZy5vblN0YXJ0U2hyaW5rKGNvbXBvbmVudCk7XG4gICAgICBzbGlkZUNvbmZpZy5vblNocnVuayhjb21wb25lbnQpO1xuICAgIH07XG4gICAgY29uc3QgZG9TdGFydFNocmluayA9IChjb21wb25lbnQsIHNsaWRlQ29uZmlnLCBzbGlkZVN0YXRlLCBjYWxjdWxhdGVkU2l6ZSkgPT4ge1xuICAgICAgY29uc3Qgc2l6ZSA9IGNhbGN1bGF0ZWRTaXplLmdldE9yVGh1bmsoKCkgPT4gZ2V0RGltZW5zaW9uKHNsaWRlQ29uZmlnLCBjb21wb25lbnQuZWxlbWVudCkpO1xuICAgICAgc2xpZGVTdGF0ZS5zZXRDb2xsYXBzZWQoKTtcbiAgICAgIHNldCQ4KGNvbXBvbmVudC5lbGVtZW50LCBnZXREaW1lbnNpb25Qcm9wZXJ0eShzbGlkZUNvbmZpZyksIHNpemUpO1xuICAgICAgcmVmbG93KGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgIGNvbnN0IHJvb3QgPSBnZXRBbmltYXRpb25Sb290KGNvbXBvbmVudCwgc2xpZGVDb25maWcpO1xuICAgICAgcmVtb3ZlJDIocm9vdCwgc2xpZGVDb25maWcuZ3Jvd2luZ0NsYXNzKTtcbiAgICAgIGFkZCQyKHJvb3QsIHNsaWRlQ29uZmlnLnNocmlua2luZ0NsYXNzKTtcbiAgICAgIHNldFNocnVuayhjb21wb25lbnQsIHNsaWRlQ29uZmlnKTtcbiAgICAgIHNsaWRlQ29uZmlnLm9uU3RhcnRTaHJpbmsoY29tcG9uZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IGRvU3RhcnRTbWFydFNocmluayA9IChjb21wb25lbnQsIHNsaWRlQ29uZmlnLCBzbGlkZVN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBzaXplID0gZ2V0RGltZW5zaW9uKHNsaWRlQ29uZmlnLCBjb21wb25lbnQuZWxlbWVudCk7XG4gICAgICBjb25zdCBzaHJpbmtlciA9IHNpemUgPT09ICcwcHgnID8gZG9JbW1lZGlhdGVTaHJpbmsgOiBkb1N0YXJ0U2hyaW5rO1xuICAgICAgc2hyaW5rZXIoY29tcG9uZW50LCBzbGlkZUNvbmZpZywgc2xpZGVTdGF0ZSwgT3B0aW9uYWwuc29tZShzaXplKSk7XG4gICAgfTtcbiAgICBjb25zdCBkb1N0YXJ0R3JvdyA9IChjb21wb25lbnQsIHNsaWRlQ29uZmlnLCBzbGlkZVN0YXRlKSA9PiB7XG4gICAgICBjb25zdCByb290ID0gZ2V0QW5pbWF0aW9uUm9vdChjb21wb25lbnQsIHNsaWRlQ29uZmlnKTtcbiAgICAgIGNvbnN0IHdhc1Nocmlua2luZyA9IGhhcyhyb290LCBzbGlkZUNvbmZpZy5zaHJpbmtpbmdDbGFzcyk7XG4gICAgICBjb25zdCBiZWZvcmVTaXplID0gZ2V0RGltZW5zaW9uKHNsaWRlQ29uZmlnLCBjb21wb25lbnQuZWxlbWVudCk7XG4gICAgICBzZXRHcm93bihjb21wb25lbnQsIHNsaWRlQ29uZmlnKTtcbiAgICAgIGNvbnN0IGZ1bGxTaXplID0gZ2V0RGltZW5zaW9uKHNsaWRlQ29uZmlnLCBjb21wb25lbnQuZWxlbWVudCk7XG4gICAgICBjb25zdCBzdGFydFBhcnRpYWxHcm93ID0gKCkgPT4ge1xuICAgICAgICBzZXQkOChjb21wb25lbnQuZWxlbWVudCwgZ2V0RGltZW5zaW9uUHJvcGVydHkoc2xpZGVDb25maWcpLCBiZWZvcmVTaXplKTtcbiAgICAgICAgcmVmbG93KGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzdGFydENvbXBsZXRlR3JvdyA9ICgpID0+IHtcbiAgICAgICAgc2V0U2hydW5rKGNvbXBvbmVudCwgc2xpZGVDb25maWcpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldFN0YXJ0U2l6ZSA9IHdhc1Nocmlua2luZyA/IHN0YXJ0UGFydGlhbEdyb3cgOiBzdGFydENvbXBsZXRlR3JvdztcbiAgICAgIHNldFN0YXJ0U2l6ZSgpO1xuICAgICAgcmVtb3ZlJDIocm9vdCwgc2xpZGVDb25maWcuc2hyaW5raW5nQ2xhc3MpO1xuICAgICAgYWRkJDIocm9vdCwgc2xpZGVDb25maWcuZ3Jvd2luZ0NsYXNzKTtcbiAgICAgIHNldEdyb3duKGNvbXBvbmVudCwgc2xpZGVDb25maWcpO1xuICAgICAgc2V0JDgoY29tcG9uZW50LmVsZW1lbnQsIGdldERpbWVuc2lvblByb3BlcnR5KHNsaWRlQ29uZmlnKSwgZnVsbFNpemUpO1xuICAgICAgc2xpZGVTdGF0ZS5zZXRFeHBhbmRlZCgpO1xuICAgICAgc2xpZGVDb25maWcub25TdGFydEdyb3coY29tcG9uZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZnJlc2gkNCA9IChjb21wb25lbnQsIHNsaWRlQ29uZmlnLCBzbGlkZVN0YXRlKSA9PiB7XG4gICAgICBpZiAoc2xpZGVTdGF0ZS5pc0V4cGFuZGVkKCkpIHtcbiAgICAgICAgcmVtb3ZlJDYoY29tcG9uZW50LmVsZW1lbnQsIGdldERpbWVuc2lvblByb3BlcnR5KHNsaWRlQ29uZmlnKSk7XG4gICAgICAgIGNvbnN0IGZ1bGxTaXplID0gZ2V0RGltZW5zaW9uKHNsaWRlQ29uZmlnLCBjb21wb25lbnQuZWxlbWVudCk7XG4gICAgICAgIHNldCQ4KGNvbXBvbmVudC5lbGVtZW50LCBnZXREaW1lbnNpb25Qcm9wZXJ0eShzbGlkZUNvbmZpZyksIGZ1bGxTaXplKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdyb3cgPSAoY29tcG9uZW50LCBzbGlkZUNvbmZpZywgc2xpZGVTdGF0ZSkgPT4ge1xuICAgICAgaWYgKCFzbGlkZVN0YXRlLmlzRXhwYW5kZWQoKSkge1xuICAgICAgICBkb1N0YXJ0R3Jvdyhjb21wb25lbnQsIHNsaWRlQ29uZmlnLCBzbGlkZVN0YXRlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNocmluayA9IChjb21wb25lbnQsIHNsaWRlQ29uZmlnLCBzbGlkZVN0YXRlKSA9PiB7XG4gICAgICBpZiAoc2xpZGVTdGF0ZS5pc0V4cGFuZGVkKCkpIHtcbiAgICAgICAgZG9TdGFydFNtYXJ0U2hyaW5rKGNvbXBvbmVudCwgc2xpZGVDb25maWcsIHNsaWRlU3RhdGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaW1tZWRpYXRlU2hyaW5rID0gKGNvbXBvbmVudCwgc2xpZGVDb25maWcsIHNsaWRlU3RhdGUpID0+IHtcbiAgICAgIGlmIChzbGlkZVN0YXRlLmlzRXhwYW5kZWQoKSkge1xuICAgICAgICBkb0ltbWVkaWF0ZVNocmluayhjb21wb25lbnQsIHNsaWRlQ29uZmlnLCBzbGlkZVN0YXRlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGhhc0dyb3duID0gKGNvbXBvbmVudCwgc2xpZGVDb25maWcsIHNsaWRlU3RhdGUpID0+IHNsaWRlU3RhdGUuaXNFeHBhbmRlZCgpO1xuICAgIGNvbnN0IGhhc1NocnVuayA9IChjb21wb25lbnQsIHNsaWRlQ29uZmlnLCBzbGlkZVN0YXRlKSA9PiBzbGlkZVN0YXRlLmlzQ29sbGFwc2VkKCk7XG4gICAgY29uc3QgaXNHcm93aW5nID0gKGNvbXBvbmVudCwgc2xpZGVDb25maWcsIF9zbGlkZVN0YXRlKSA9PiB7XG4gICAgICBjb25zdCByb290ID0gZ2V0QW5pbWF0aW9uUm9vdChjb21wb25lbnQsIHNsaWRlQ29uZmlnKTtcbiAgICAgIHJldHVybiBoYXMocm9vdCwgc2xpZGVDb25maWcuZ3Jvd2luZ0NsYXNzKSA9PT0gdHJ1ZTtcbiAgICB9O1xuICAgIGNvbnN0IGlzU2hyaW5raW5nID0gKGNvbXBvbmVudCwgc2xpZGVDb25maWcsIF9zbGlkZVN0YXRlKSA9PiB7XG4gICAgICBjb25zdCByb290ID0gZ2V0QW5pbWF0aW9uUm9vdChjb21wb25lbnQsIHNsaWRlQ29uZmlnKTtcbiAgICAgIHJldHVybiBoYXMocm9vdCwgc2xpZGVDb25maWcuc2hyaW5raW5nQ2xhc3MpID09PSB0cnVlO1xuICAgIH07XG4gICAgY29uc3QgaXNUcmFuc2l0aW9uaW5nID0gKGNvbXBvbmVudCwgc2xpZGVDb25maWcsIHNsaWRlU3RhdGUpID0+IGlzR3Jvd2luZyhjb21wb25lbnQsIHNsaWRlQ29uZmlnKSB8fCBpc1Nocmlua2luZyhjb21wb25lbnQsIHNsaWRlQ29uZmlnKTtcbiAgICBjb25zdCB0b2dnbGVHcm93ID0gKGNvbXBvbmVudCwgc2xpZGVDb25maWcsIHNsaWRlU3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGYgPSBzbGlkZVN0YXRlLmlzRXhwYW5kZWQoKSA/IGRvU3RhcnRTbWFydFNocmluayA6IGRvU3RhcnRHcm93O1xuICAgICAgZihjb21wb25lbnQsIHNsaWRlQ29uZmlnLCBzbGlkZVN0YXRlKTtcbiAgICB9O1xuICAgIGNvbnN0IGltbWVkaWF0ZUdyb3cgPSAoY29tcG9uZW50LCBzbGlkZUNvbmZpZywgc2xpZGVTdGF0ZSkgPT4ge1xuICAgICAgaWYgKCFzbGlkZVN0YXRlLmlzRXhwYW5kZWQoKSkge1xuICAgICAgICBzZXRHcm93bihjb21wb25lbnQsIHNsaWRlQ29uZmlnKTtcbiAgICAgICAgc2V0JDgoY29tcG9uZW50LmVsZW1lbnQsIGdldERpbWVuc2lvblByb3BlcnR5KHNsaWRlQ29uZmlnKSwgZ2V0RGltZW5zaW9uKHNsaWRlQ29uZmlnLCBjb21wb25lbnQuZWxlbWVudCkpO1xuICAgICAgICBkaXNhYmxlVHJhbnNpdGlvbnMoY29tcG9uZW50LCBzbGlkZUNvbmZpZyk7XG4gICAgICAgIHNsaWRlU3RhdGUuc2V0RXhwYW5kZWQoKTtcbiAgICAgICAgc2xpZGVDb25maWcub25TdGFydEdyb3coY29tcG9uZW50KTtcbiAgICAgICAgc2xpZGVDb25maWcub25Hcm93bihjb21wb25lbnQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgU2xpZGluZ0FwaXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgcmVmcmVzaDogcmVmcmVzaCQ0LFxuICAgICAgICBncm93OiBncm93LFxuICAgICAgICBzaHJpbms6IHNocmluayxcbiAgICAgICAgaW1tZWRpYXRlU2hyaW5rOiBpbW1lZGlhdGVTaHJpbmssXG4gICAgICAgIGhhc0dyb3duOiBoYXNHcm93bixcbiAgICAgICAgaGFzU2hydW5rOiBoYXNTaHJ1bmssXG4gICAgICAgIGlzR3Jvd2luZzogaXNHcm93aW5nLFxuICAgICAgICBpc1Nocmlua2luZzogaXNTaHJpbmtpbmcsXG4gICAgICAgIGlzVHJhbnNpdGlvbmluZzogaXNUcmFuc2l0aW9uaW5nLFxuICAgICAgICB0b2dnbGVHcm93OiB0b2dnbGVHcm93LFxuICAgICAgICBkaXNhYmxlVHJhbnNpdGlvbnM6IGRpc2FibGVUcmFuc2l0aW9ucyxcbiAgICAgICAgaW1tZWRpYXRlR3JvdzogaW1tZWRpYXRlR3Jvd1xuICAgIH0pO1xuXG4gICAgY29uc3QgZXhoaWJpdCA9IChiYXNlLCBzbGlkZUNvbmZpZywgX3NsaWRlU3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGV4cGFuZGVkID0gc2xpZGVDb25maWcuZXhwYW5kZWQ7XG4gICAgICByZXR1cm4gZXhwYW5kZWQgPyBudSQ3KHtcbiAgICAgICAgY2xhc3NlczogW3NsaWRlQ29uZmlnLm9wZW5DbGFzc10sXG4gICAgICAgIHN0eWxlczoge31cbiAgICAgIH0pIDogbnUkNyh7XG4gICAgICAgIGNsYXNzZXM6IFtzbGlkZUNvbmZpZy5jbG9zZWRDbGFzc10sXG4gICAgICAgIHN0eWxlczogd3JhcCQxKHNsaWRlQ29uZmlnLmRpbWVuc2lvbi5wcm9wZXJ0eSwgJzBweCcpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGV2ZW50cyQ2ID0gKHNsaWRlQ29uZmlnLCBzbGlkZVN0YXRlKSA9PiBkZXJpdmUkMihbcnVuT25Tb3VyY2UodHJhbnNpdGlvbmVuZCgpLCAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCByYXcgPSBzaW11bGF0ZWRFdmVudC5ldmVudC5yYXc7XG4gICAgICAgIGlmIChyYXcucHJvcGVydHlOYW1lID09PSBzbGlkZUNvbmZpZy5kaW1lbnNpb24ucHJvcGVydHkpIHtcbiAgICAgICAgICBkaXNhYmxlVHJhbnNpdGlvbnMoY29tcG9uZW50LCBzbGlkZUNvbmZpZyk7XG4gICAgICAgICAgaWYgKHNsaWRlU3RhdGUuaXNFeHBhbmRlZCgpKSB7XG4gICAgICAgICAgICByZW1vdmUkNihjb21wb25lbnQuZWxlbWVudCwgc2xpZGVDb25maWcuZGltZW5zaW9uLnByb3BlcnR5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgbm90aWZ5ID0gc2xpZGVTdGF0ZS5pc0V4cGFuZGVkKCkgPyBzbGlkZUNvbmZpZy5vbkdyb3duIDogc2xpZGVDb25maWcub25TaHJ1bms7XG4gICAgICAgICAgbm90aWZ5KGNvbXBvbmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pXSk7XG5cbiAgICB2YXIgQWN0aXZlU2xpZGluZyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBleGhpYml0OiBleGhpYml0LFxuICAgICAgICBldmVudHM6IGV2ZW50cyQ2XG4gICAgfSk7XG5cbiAgICB2YXIgU2xpZGluZ1NjaGVtYSA9IFtcbiAgICAgIHJlcXVpcmVkJDEoJ2Nsb3NlZENsYXNzJyksXG4gICAgICByZXF1aXJlZCQxKCdvcGVuQ2xhc3MnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ3Nocmlua2luZ0NsYXNzJyksXG4gICAgICByZXF1aXJlZCQxKCdncm93aW5nQ2xhc3MnKSxcbiAgICAgIG9wdGlvbiQzKCdnZXRBbmltYXRpb25Sb290JyksXG4gICAgICBvbkhhbmRsZXIoJ29uU2hydW5rJyksXG4gICAgICBvbkhhbmRsZXIoJ29uU3RhcnRTaHJpbmsnKSxcbiAgICAgIG9uSGFuZGxlcignb25Hcm93bicpLFxuICAgICAgb25IYW5kbGVyKCdvblN0YXJ0R3JvdycpLFxuICAgICAgZGVmYXVsdGVkKCdleHBhbmRlZCcsIGZhbHNlKSxcbiAgICAgIHJlcXVpcmVkT2YoJ2RpbWVuc2lvbicsIGNob29zZSQxKCdwcm9wZXJ0eScsIHtcbiAgICAgICAgd2lkdGg6IFtcbiAgICAgICAgICBvdXRwdXQkMSgncHJvcGVydHknLCAnd2lkdGgnKSxcbiAgICAgICAgICBvdXRwdXQkMSgnZ2V0RGltZW5zaW9uJywgZWxlbSA9PiBnZXQkYyhlbGVtKSArICdweCcpXG4gICAgICAgIF0sXG4gICAgICAgIGhlaWdodDogW1xuICAgICAgICAgIG91dHB1dCQxKCdwcm9wZXJ0eScsICdoZWlnaHQnKSxcbiAgICAgICAgICBvdXRwdXQkMSgnZ2V0RGltZW5zaW9uJywgZWxlbSA9PiBnZXQkZChlbGVtKSArICdweCcpXG4gICAgICAgIF1cbiAgICAgIH0pKVxuICAgIF07XG5cbiAgICBjb25zdCBpbml0JDkgPSBzcGVjID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlID0gQ2VsbChzcGVjLmV4cGFuZGVkKTtcbiAgICAgIGNvbnN0IHJlYWRTdGF0ZSA9ICgpID0+ICdleHBhbmRlZDogJyArIHN0YXRlLmdldCgpO1xuICAgICAgcmV0dXJuIG51JDgoe1xuICAgICAgICBpc0V4cGFuZGVkOiAoKSA9PiBzdGF0ZS5nZXQoKSA9PT0gdHJ1ZSxcbiAgICAgICAgaXNDb2xsYXBzZWQ6ICgpID0+IHN0YXRlLmdldCgpID09PSBmYWxzZSxcbiAgICAgICAgc2V0Q29sbGFwc2VkOiBjdXJyeShzdGF0ZS5zZXQsIGZhbHNlKSxcbiAgICAgICAgc2V0RXhwYW5kZWQ6IGN1cnJ5KHN0YXRlLnNldCwgdHJ1ZSksXG4gICAgICAgIHJlYWRTdGF0ZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHZhciBTbGlkaW5nU3RhdGUgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgaW5pdDogaW5pdCQ5XG4gICAgfSk7XG5cbiAgICBjb25zdCBTbGlkaW5nID0gY3JlYXRlJDQoe1xuICAgICAgZmllbGRzOiBTbGlkaW5nU2NoZW1hLFxuICAgICAgbmFtZTogJ3NsaWRpbmcnLFxuICAgICAgYWN0aXZlOiBBY3RpdmVTbGlkaW5nLFxuICAgICAgYXBpczogU2xpZGluZ0FwaXMsXG4gICAgICBzdGF0ZTogU2xpZGluZ1N0YXRlXG4gICAgfSk7XG5cbiAgICBjb25zdCBnZXRNZW51QnV0dG9uQXBpID0gY29tcG9uZW50ID0+ICh7XG4gICAgICBpc0VuYWJsZWQ6ICgpID0+ICFEaXNhYmxpbmcuaXNEaXNhYmxlZChjb21wb25lbnQpLFxuICAgICAgc2V0RW5hYmxlZDogc3RhdGUgPT4gRGlzYWJsaW5nLnNldChjb21wb25lbnQsICFzdGF0ZSksXG4gICAgICBzZXRBY3RpdmU6IHN0YXRlID0+IHtcbiAgICAgICAgY29uc3QgZWxtID0gY29tcG9uZW50LmVsZW1lbnQ7XG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgIGFkZCQyKGVsbSwgJ3RveC10YnRuLS1lbmFibGVkJyk7XG4gICAgICAgICAgc2V0JDkoZWxtLCAnYXJpYS1wcmVzc2VkJywgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVtb3ZlJDIoZWxtLCAndG94LXRidG4tLWVuYWJsZWQnKTtcbiAgICAgICAgICByZW1vdmUkNyhlbG0sICdhcmlhLXByZXNzZWQnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGlzQWN0aXZlOiAoKSA9PiBoYXMoY29tcG9uZW50LmVsZW1lbnQsICd0b3gtdGJ0bi0tZW5hYmxlZCcpLFxuICAgICAgc2V0VGV4dDogdGV4dCA9PiB7XG4gICAgICAgIGVtaXRXaXRoKGNvbXBvbmVudCwgdXBkYXRlTWVudVRleHQsIHsgdGV4dCB9KTtcbiAgICAgIH0sXG4gICAgICBzZXRJY29uOiBpY29uID0+IGVtaXRXaXRoKGNvbXBvbmVudCwgdXBkYXRlTWVudUljb24sIHsgaWNvbiB9KVxuICAgIH0pO1xuICAgIGNvbnN0IHJlbmRlck1lbnVCdXR0b24gPSAoc3BlYywgcHJlZml4LCBiYWNrc3RhZ2UsIHJvbGUsIHRhYnN0b3BwaW5nID0gdHJ1ZSkgPT4ge1xuICAgICAgcmV0dXJuIHJlbmRlckNvbW1vbkRyb3Bkb3duKHtcbiAgICAgICAgdGV4dDogc3BlYy50ZXh0LFxuICAgICAgICBpY29uOiBzcGVjLmljb24sXG4gICAgICAgIHRvb2x0aXA6IHNwZWMudG9vbHRpcCxcbiAgICAgICAgc2VhcmNoYWJsZTogc3BlYy5zZWFyY2guaXNTb21lKCksXG4gICAgICAgIHJvbGUsXG4gICAgICAgIGZldGNoOiAoZHJvcGRvd25Db21wLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgIGNvbnN0IGZldGNoQ29udGV4dCA9IHsgcGF0dGVybjogc3BlYy5zZWFyY2guaXNTb21lKCkgPyBnZXRTZWFyY2hQYXR0ZXJuKGRyb3Bkb3duQ29tcCkgOiAnJyB9O1xuICAgICAgICAgIHNwZWMuZmV0Y2goaXRlbXMgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2soYnVpbGQoaXRlbXMsIEl0ZW1SZXNwb25zZSQxLkNMT1NFX09OX0VYRUNVVEUsIGJhY2tzdGFnZSwge1xuICAgICAgICAgICAgICBpc0hvcml6b250YWxNZW51OiBmYWxzZSxcbiAgICAgICAgICAgICAgc2VhcmNoOiBzcGVjLnNlYXJjaFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0sIGZldGNoQ29udGV4dCwgZ2V0TWVudUJ1dHRvbkFwaShkcm9wZG93bkNvbXApKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25TZXR1cDogc3BlYy5vblNldHVwLFxuICAgICAgICBnZXRBcGk6IGdldE1lbnVCdXR0b25BcGksXG4gICAgICAgIGNvbHVtbnM6IDEsXG4gICAgICAgIHByZXNldHM6ICdub3JtYWwnLFxuICAgICAgICBjbGFzc2VzOiBbXSxcbiAgICAgICAgZHJvcGRvd25CZWhhdmlvdXJzOiBbLi4udGFic3RvcHBpbmcgPyBbVGFic3RvcHBpbmcuY29uZmlnKHt9KV0gOiBbXV1cbiAgICAgIH0sIHByZWZpeCwgYmFja3N0YWdlLnNoYXJlZCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRGZXRjaCA9IChpdGVtcywgZ2V0QnV0dG9uLCBiYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IGdldE1lbnVJdGVtQWN0aW9uID0gaXRlbSA9PiBhcGkgPT4ge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9ICFhcGkuaXNBY3RpdmUoKTtcbiAgICAgICAgYXBpLnNldEFjdGl2ZShuZXdWYWx1ZSk7XG4gICAgICAgIGl0ZW0uc3RvcmFnZS5zZXQobmV3VmFsdWUpO1xuICAgICAgICBiYWNrc3RhZ2Uuc2hhcmVkLmdldFNpbmsoKS5lYWNoKHNpbmsgPT4ge1xuICAgICAgICAgIGdldEJ1dHRvbigpLmdldE9wdChzaW5rKS5lYWNoKG9yaWcgPT4ge1xuICAgICAgICAgICAgZm9jdXMkMyhvcmlnLmVsZW1lbnQpO1xuICAgICAgICAgICAgZW1pdFdpdGgob3JpZywgZm9ybUFjdGlvbkV2ZW50LCB7XG4gICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0uc3RvcmFnZS5nZXQoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldE1lbnVJdGVtU2V0dXAgPSBpdGVtID0+IGFwaSA9PiB7XG4gICAgICAgIGFwaS5zZXRBY3RpdmUoaXRlbS5zdG9yYWdlLmdldCgpKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gc3VjY2VzcyA9PiB7XG4gICAgICAgIHN1Y2Nlc3MobWFwJDIoaXRlbXMsIGl0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSBpdGVtLnRleHQuZm9sZCgoKSA9PiAoe30pLCB0ZXh0ID0+ICh7IHRleHQgfSkpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgICAgICAgLi4udGV4dCxcbiAgICAgICAgICAgIG9uQWN0aW9uOiBnZXRNZW51SXRlbUFjdGlvbihpdGVtKSxcbiAgICAgICAgICAgIG9uU2V0dXA6IGdldE1lbnVJdGVtU2V0dXAoaXRlbSlcbiAgICAgICAgICB9O1xuICAgICAgICB9KSk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJMYWJlbCA9IHRleHQgPT4gKHtcbiAgICAgIGRvbToge1xuICAgICAgICB0YWc6ICdzcGFuJyxcbiAgICAgICAgY2xhc3NlczogWyd0b3gtdHJlZV9fbGFiZWwnXSxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICd0aXRsZSc6IHRleHQsXG4gICAgICAgICAgJ2FyaWEtbGFiZWwnOiB0ZXh0XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjb21wb25lbnRzOiBbdGV4dCQyKHRleHQpXVxuICAgIH0pO1xuICAgIGNvbnN0IGxlYWZMYWJlbEV2ZW50c0lkID0gZ2VuZXJhdGUkNignbGVhZi1sYWJlbC1ldmVudC1pZCcpO1xuICAgIGNvbnN0IHJlbmRlckxlYWZMYWJlbCA9ICh7bGVhZiwgb25MZWFmQWN0aW9uLCB2aXNpYmxlLCB0cmVlSWQsIHNlbGVjdGVkSWQsIGJhY2tzdGFnZX0pID0+IHtcbiAgICAgIGNvbnN0IGludGVybmFsTWVudUJ1dHRvbiA9IGxlYWYubWVudS5tYXAoYnRuID0+IHJlbmRlck1lbnVCdXR0b24oYnRuLCAndG94LW1idG4nLCBiYWNrc3RhZ2UsIE9wdGlvbmFsLm5vbmUoKSwgdmlzaWJsZSkpO1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IFtyZW5kZXJMYWJlbChsZWFmLnRpdGxlKV07XG4gICAgICBpbnRlcm5hbE1lbnVCdXR0b24uZWFjaChidG4gPT4gY29tcG9uZW50cy5wdXNoKGJ0bikpO1xuICAgICAgcmV0dXJuIEJ1dHRvbi5za2V0Y2goe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAgICd0b3gtdHJlZS0tbGVhZl9fbGFiZWwnLFxuICAgICAgICAgICAgJ3RveC10cmJ0bidcbiAgICAgICAgICBdLmNvbmNhdCh2aXNpYmxlID8gWyd0b3gtdHJlZS0tbGVhZl9fbGFiZWwtLXZpc2libGUnXSA6IFtdKVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICByb2xlOiAndHJlZWl0ZW0nLFxuICAgICAgICBhY3Rpb246IGJ1dHRvbiA9PiB7XG4gICAgICAgICAgb25MZWFmQWN0aW9uKGxlYWYuaWQpO1xuICAgICAgICAgIGJ1dHRvbi5nZXRTeXN0ZW0oKS5icm9hZGNhc3RPbihbYHVwZGF0ZS1hY3RpdmUtaXRlbS0keyB0cmVlSWQgfWBdLCB7IHZhbHVlOiBsZWFmLmlkIH0pO1xuICAgICAgICB9LFxuICAgICAgICBldmVudE9yZGVyOiB7XG4gICAgICAgICAgW2tleWRvd24oKV06IFtcbiAgICAgICAgICAgIGxlYWZMYWJlbEV2ZW50c0lkLFxuICAgICAgICAgICAgJ2tleWluZydcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbkJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICAuLi52aXNpYmxlID8gW1RhYnN0b3BwaW5nLmNvbmZpZyh7fSldIDogW10sXG4gICAgICAgICAgVG9nZ2xpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzOiAndG94LXRyYnRuLS1lbmFibGVkJyxcbiAgICAgICAgICAgIHRvZ2dsZU9uRXhlY3V0ZTogZmFsc2UsXG4gICAgICAgICAgICBhcmlhOiB7IG1vZGU6ICdzZWxlY3RlZCcgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIFJlY2VpdmluZy5jb25maWcoe1xuICAgICAgICAgICAgY2hhbm5lbHM6IHtcbiAgICAgICAgICAgICAgW2B1cGRhdGUtYWN0aXZlLWl0ZW0tJHsgdHJlZUlkIH1gXToge1xuICAgICAgICAgICAgICAgIG9uUmVjZWl2ZTogKGNvbXAsIG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgICAgICAgIChtZXNzYWdlLnZhbHVlID09PSBsZWFmLmlkID8gVG9nZ2xpbmcub24gOiBUb2dnbGluZy5vZmYpKGNvbXApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNvbmZpZyhsZWFmTGFiZWxFdmVudHNJZCwgW1xuICAgICAgICAgICAgcnVuT25BdHRhY2hlZCgoY29tcCwgX3NlKSA9PiB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkSWQuZWFjaChpZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9nZ2xlID0gaWQgPT09IGxlYWYuaWQgPyBUb2dnbGluZy5vbiA6IFRvZ2dsaW5nLm9mZjtcbiAgICAgICAgICAgICAgICB0b2dnbGUoY29tcCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBydW4kMShrZXlkb3duKCksIChjb21wLCBzZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpc0xlZnRBcnJvd0tleSA9IHNlLmV2ZW50LnJhdy5jb2RlID09PSAnQXJyb3dMZWZ0JztcbiAgICAgICAgICAgICAgY29uc3QgaXNSaWdodEFycm93S2V5ID0gc2UuZXZlbnQucmF3LmNvZGUgPT09ICdBcnJvd1JpZ2h0JztcbiAgICAgICAgICAgICAgaWYgKGlzTGVmdEFycm93S2V5KSB7XG4gICAgICAgICAgICAgICAgYW5jZXN0b3IoY29tcC5lbGVtZW50LCAnLnRveC10cmVlLS1kaXJlY3RvcnknKS5lYWNoKGRpckVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgY29tcC5nZXRTeXN0ZW0oKS5nZXRCeURvbShkaXJFbGVtZW50KS5lYWNoKGRpckNvbXAgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZChkaXJFbGVtZW50LCAnLnRveC10cmVlLS1kaXJlY3RvcnlfX2xhYmVsJykuZWFjaChkaXJMYWJlbEVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGRpckNvbXAuZ2V0U3lzdGVtKCkuZ2V0QnlEb20oZGlyTGFiZWxFbGVtZW50KS5lYWNoKEZvY3VzaW5nLmZvY3VzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzZS5zdG9wKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNSaWdodEFycm93S2V5KSB7XG4gICAgICAgICAgICAgICAgc2Uuc3RvcCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0pXG4gICAgICAgIF0pXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckljb24gPSAoaWNvbk5hbWUsIGljb25zUHJvdmlkZXIsIGJlaGF2aW91cnMpID0+IHJlbmRlciQzKGljb25OYW1lLCB7XG4gICAgICB0YWc6ICdzcGFuJyxcbiAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgJ3RveC10cmVlX19pY29uLXdyYXAnLFxuICAgICAgICAndG94LWljb24nXG4gICAgICBdLFxuICAgICAgYmVoYXZpb3Vyc1xuICAgIH0sIGljb25zUHJvdmlkZXIpO1xuICAgIGNvbnN0IHJlbmRlckljb25Gcm9tUGFjayA9IChpY29uTmFtZSwgaWNvbnNQcm92aWRlcikgPT4gcmVuZGVySWNvbihpY29uTmFtZSwgaWNvbnNQcm92aWRlciwgW10pO1xuICAgIGNvbnN0IGRpcmVjdG9yeUxhYmVsRXZlbnRzSWQgPSBnZW5lcmF0ZSQ2KCdkaXJlY3RvcnktbGFiZWwtZXZlbnQtaWQnKTtcbiAgICBjb25zdCByZW5kZXJEaXJlY3RvcnlMYWJlbCA9ICh7ZGlyZWN0b3J5LCB2aXNpYmxlLCBub0NoaWxkcmVuLCBiYWNrc3RhZ2V9KSA9PiB7XG4gICAgICBjb25zdCBpbnRlcm5hbE1lbnVCdXR0b24gPSBkaXJlY3RvcnkubWVudS5tYXAoYnRuID0+IHJlbmRlck1lbnVCdXR0b24oYnRuLCAndG94LW1idG4nLCBiYWNrc3RhZ2UsIE9wdGlvbmFsLm5vbmUoKSkpO1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LWNoZXZyb24nXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcG9uZW50czogW3JlbmRlckljb25Gcm9tUGFjaygnY2hldnJvbi1yaWdodCcsIGJhY2tzdGFnZS5zaGFyZWQucHJvdmlkZXJzLmljb25zKV1cbiAgICAgICAgfSxcbiAgICAgICAgcmVuZGVyTGFiZWwoZGlyZWN0b3J5LnRpdGxlKVxuICAgICAgXTtcbiAgICAgIGludGVybmFsTWVudUJ1dHRvbi5lYWNoKGJ0biA9PiB7XG4gICAgICAgIGNvbXBvbmVudHMucHVzaChidG4pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCB0b2dnbGVFeHBhbmRDaGlsZHJlbiA9IGJ1dHRvbiA9PiB7XG4gICAgICAgIGFuY2VzdG9yKGJ1dHRvbi5lbGVtZW50LCAnLnRveC10cmVlLS1kaXJlY3RvcnknKS5lYWNoKGRpcmVjdG9yeUVsZSA9PiB7XG4gICAgICAgICAgYnV0dG9uLmdldFN5c3RlbSgpLmdldEJ5RG9tKGRpcmVjdG9yeUVsZSkuZWFjaChkaXJlY3RvcnlDb21wID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHdpbGxFeHBhbmQgPSAhVG9nZ2xpbmcuaXNPbihkaXJlY3RvcnlDb21wKTtcbiAgICAgICAgICAgIFRvZ2dsaW5nLnRvZ2dsZShkaXJlY3RvcnlDb21wKTtcbiAgICAgICAgICAgIGVtaXRXaXRoKGJ1dHRvbiwgJ2V4cGFuZC10cmVlLW5vZGUnLCB7XG4gICAgICAgICAgICAgIGV4cGFuZGVkOiB3aWxsRXhwYW5kLFxuICAgICAgICAgICAgICBub2RlOiBkaXJlY3RvcnkuaWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gQnV0dG9uLnNrZXRjaCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICAgJ3RveC10cmVlLS1kaXJlY3RvcnlfX2xhYmVsJyxcbiAgICAgICAgICAgICd0b3gtdHJidG4nXG4gICAgICAgICAgXS5jb25jYXQodmlzaWJsZSA/IFsndG94LXRyZWUtLWRpcmVjdG9yeV9fbGFiZWwtLXZpc2libGUnXSA6IFtdKVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICBhY3Rpb246IHRvZ2dsZUV4cGFuZENoaWxkcmVuLFxuICAgICAgICBldmVudE9yZGVyOiB7XG4gICAgICAgICAgW2tleWRvd24oKV06IFtcbiAgICAgICAgICAgIGRpcmVjdG9yeUxhYmVsRXZlbnRzSWQsXG4gICAgICAgICAgICAna2V5aW5nJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uQmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIC4uLnZpc2libGUgPyBbVGFic3RvcHBpbmcuY29uZmlnKHt9KV0gOiBbXSxcbiAgICAgICAgICBjb25maWcoZGlyZWN0b3J5TGFiZWxFdmVudHNJZCwgW3J1biQxKGtleWRvd24oKSwgKGNvbXAsIHNlKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGlzUmlnaHRBcnJvd0tleSA9IHNlLmV2ZW50LnJhdy5jb2RlID09PSAnQXJyb3dSaWdodCc7XG4gICAgICAgICAgICAgIGNvbnN0IGlzTGVmdEFycm93S2V5ID0gc2UuZXZlbnQucmF3LmNvZGUgPT09ICdBcnJvd0xlZnQnO1xuICAgICAgICAgICAgICBpZiAoaXNSaWdodEFycm93S2V5ICYmIG5vQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBzZS5zdG9wKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGlzUmlnaHRBcnJvd0tleSB8fCBpc0xlZnRBcnJvd0tleSkge1xuICAgICAgICAgICAgICAgIGFuY2VzdG9yKGNvbXAuZWxlbWVudCwgJy50b3gtdHJlZS0tZGlyZWN0b3J5JykuZWFjaChkaXJlY3RvcnlFbGUgPT4ge1xuICAgICAgICAgICAgICAgICAgY29tcC5nZXRTeXN0ZW0oKS5nZXRCeURvbShkaXJlY3RvcnlFbGUpLmVhY2goZGlyZWN0b3J5Q29tcCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVG9nZ2xpbmcuaXNPbihkaXJlY3RvcnlDb21wKSAmJiBpc1JpZ2h0QXJyb3dLZXkgfHwgVG9nZ2xpbmcuaXNPbihkaXJlY3RvcnlDb21wKSAmJiBpc0xlZnRBcnJvd0tleSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZUV4cGFuZENoaWxkcmVuKGNvbXApO1xuICAgICAgICAgICAgICAgICAgICAgIHNlLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xlZnRBcnJvd0tleSAmJiAhVG9nZ2xpbmcuaXNPbihkaXJlY3RvcnlDb21wKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yKGRpcmVjdG9yeUNvbXAuZWxlbWVudCwgJy50b3gtdHJlZS0tZGlyZWN0b3J5JykuZWFjaChwYXJlbnREaXJFbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkKHBhcmVudERpckVsZW1lbnQsICcudG94LXRyZWUtLWRpcmVjdG9yeV9fbGFiZWwnKS5lYWNoKHBhcmVudERpckxhYmVsRWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeUNvbXAuZ2V0U3lzdGVtKCkuZ2V0QnlEb20ocGFyZW50RGlyTGFiZWxFbGVtZW50KS5lYWNoKEZvY3VzaW5nLmZvY3VzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIHNlLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXSlcbiAgICAgICAgXSlcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyRGlyZWN0b3J5Q2hpbGRyZW4gPSAoe2NoaWxkcmVuLCBvbkxlYWZBY3Rpb24sIHZpc2libGUsIHRyZWVJZCwgZXhwYW5kZWRJZHMsIHNlbGVjdGVkSWQsIGJhY2tzdGFnZX0pID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtdHJlZS0tZGlyZWN0b3J5X19jaGlsZHJlbiddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IGNoaWxkcmVuLm1hcChpdGVtID0+IHtcbiAgICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnbGVhZicgPyByZW5kZXJMZWFmTGFiZWwoe1xuICAgICAgICAgICAgbGVhZjogaXRlbSxcbiAgICAgICAgICAgIHNlbGVjdGVkSWQsXG4gICAgICAgICAgICBvbkxlYWZBY3Rpb24sXG4gICAgICAgICAgICB2aXNpYmxlLFxuICAgICAgICAgICAgdHJlZUlkLFxuICAgICAgICAgICAgYmFja3N0YWdlXG4gICAgICAgICAgfSkgOiByZW5kZXJEaXJlY3Rvcnkoe1xuICAgICAgICAgICAgZGlyZWN0b3J5OiBpdGVtLFxuICAgICAgICAgICAgZXhwYW5kZWRJZHMsXG4gICAgICAgICAgICBzZWxlY3RlZElkLFxuICAgICAgICAgICAgb25MZWFmQWN0aW9uLFxuICAgICAgICAgICAgbGFiZWxUYWJzdG9wcGluZzogdmlzaWJsZSxcbiAgICAgICAgICAgIHRyZWVJZCxcbiAgICAgICAgICAgIGJhY2tzdGFnZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIFNsaWRpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIGRpbWVuc2lvbjogeyBwcm9wZXJ0eTogJ2hlaWdodCcgfSxcbiAgICAgICAgICAgIGNsb3NlZENsYXNzOiAndG94LXRyZWUtLWRpcmVjdG9yeV9fY2hpbGRyZW4tLWNsb3NlZCcsXG4gICAgICAgICAgICBvcGVuQ2xhc3M6ICd0b3gtdHJlZS0tZGlyZWN0b3J5X19jaGlsZHJlbi0tb3BlbicsXG4gICAgICAgICAgICBncm93aW5nQ2xhc3M6ICd0b3gtdHJlZS0tZGlyZWN0b3J5X19jaGlsZHJlbi0tZ3Jvd2luZycsXG4gICAgICAgICAgICBzaHJpbmtpbmdDbGFzczogJ3RveC10cmVlLS1kaXJlY3RvcnlfX2NoaWxkcmVuLS1zaHJpbmtpbmcnLFxuICAgICAgICAgICAgZXhwYW5kZWQ6IHZpc2libGVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBSZXBsYWNpbmcuY29uZmlnKHt9KVxuICAgICAgICBdKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGRpcmVjdG9yeUV2ZW50c0lkID0gZ2VuZXJhdGUkNignZGlyZWN0b3J5LWV2ZW50LWlkJyk7XG4gICAgY29uc3QgcmVuZGVyRGlyZWN0b3J5ID0gKHtkaXJlY3RvcnksIG9uTGVhZkFjdGlvbiwgbGFiZWxUYWJzdG9wcGluZywgdHJlZUlkLCBiYWNrc3RhZ2UsIGV4cGFuZGVkSWRzLCBzZWxlY3RlZElkfSkgPT4ge1xuICAgICAgY29uc3Qge2NoaWxkcmVufSA9IGRpcmVjdG9yeTtcbiAgICAgIGNvbnN0IGV4cGFuZGVkSWRzQ2VsbCA9IENlbGwoZXhwYW5kZWRJZHMpO1xuICAgICAgY29uc3QgY29tcHV0ZWRDaGlsZHJlbkNvbXBvbmVudHMgPSB2aXNpYmxlID0+IGNoaWxkcmVuLm1hcChpdGVtID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ2xlYWYnID8gcmVuZGVyTGVhZkxhYmVsKHtcbiAgICAgICAgICBsZWFmOiBpdGVtLFxuICAgICAgICAgIHNlbGVjdGVkSWQsXG4gICAgICAgICAgb25MZWFmQWN0aW9uLFxuICAgICAgICAgIHZpc2libGUsXG4gICAgICAgICAgdHJlZUlkLFxuICAgICAgICAgIGJhY2tzdGFnZVxuICAgICAgICB9KSA6IHJlbmRlckRpcmVjdG9yeSh7XG4gICAgICAgICAgZGlyZWN0b3J5OiBpdGVtLFxuICAgICAgICAgIGV4cGFuZGVkSWRzOiBleHBhbmRlZElkc0NlbGwuZ2V0KCksXG4gICAgICAgICAgc2VsZWN0ZWRJZCxcbiAgICAgICAgICBvbkxlYWZBY3Rpb24sXG4gICAgICAgICAgbGFiZWxUYWJzdG9wcGluZzogdmlzaWJsZSxcbiAgICAgICAgICB0cmVlSWQsXG4gICAgICAgICAgYmFja3N0YWdlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjaGlsZHJlblZpc2libGUgPSBleHBhbmRlZElkcy5pbmNsdWRlcyhkaXJlY3RvcnkuaWQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC10cmVlLS1kaXJlY3RvcnknXSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7IHJvbGU6ICd0cmVlaXRlbScgfVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgcmVuZGVyRGlyZWN0b3J5TGFiZWwoe1xuICAgICAgICAgICAgZGlyZWN0b3J5LFxuICAgICAgICAgICAgdmlzaWJsZTogbGFiZWxUYWJzdG9wcGluZyxcbiAgICAgICAgICAgIG5vQ2hpbGRyZW46IGRpcmVjdG9yeS5jaGlsZHJlbi5sZW5ndGggPT09IDAsXG4gICAgICAgICAgICBiYWNrc3RhZ2VcbiAgICAgICAgICB9KSxcbiAgICAgICAgICByZW5kZXJEaXJlY3RvcnlDaGlsZHJlbih7XG4gICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgIGV4cGFuZGVkSWRzLFxuICAgICAgICAgICAgc2VsZWN0ZWRJZCxcbiAgICAgICAgICAgIG9uTGVhZkFjdGlvbixcbiAgICAgICAgICAgIHZpc2libGU6IGNoaWxkcmVuVmlzaWJsZSxcbiAgICAgICAgICAgIHRyZWVJZCxcbiAgICAgICAgICAgIGJhY2tzdGFnZVxuICAgICAgICAgIH0pXG4gICAgICAgIF0sXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBjb25maWcoZGlyZWN0b3J5RXZlbnRzSWQsIFtcbiAgICAgICAgICAgIHJ1bk9uQXR0YWNoZWQoKGNvbXAsIF9zZSkgPT4ge1xuICAgICAgICAgICAgICBUb2dnbGluZy5zZXQoY29tcCwgY2hpbGRyZW5WaXNpYmxlKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcnVuJDEoJ2V4cGFuZC10cmVlLW5vZGUnLCAoX2NtcCwgc2UpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qge2V4cGFuZGVkLCBub2RlfSA9IHNlLmV2ZW50O1xuICAgICAgICAgICAgICBleHBhbmRlZElkc0NlbGwuc2V0KGV4cGFuZGVkID8gW1xuICAgICAgICAgICAgICAgIC4uLmV4cGFuZGVkSWRzQ2VsbC5nZXQoKSxcbiAgICAgICAgICAgICAgICBub2RlXG4gICAgICAgICAgICAgIF0gOiBleHBhbmRlZElkc0NlbGwuZ2V0KCkuZmlsdGVyKGlkID0+IGlkICE9PSBub2RlKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIFRvZ2dsaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICAuLi5kaXJlY3RvcnkuY2hpbGRyZW4ubGVuZ3RoID4gMCA/IHsgYXJpYTogeyBtb2RlOiAnZXhwYW5kZWQnIH0gfSA6IHt9LFxuICAgICAgICAgICAgdG9nZ2xlQ2xhc3M6ICd0b3gtdHJlZS0tZGlyZWN0b3J5LS1leHBhbmRlZCcsXG4gICAgICAgICAgICBvblRvZ2dsZWQ6IChjb21wLCBjaGlsZHJlblZpc2libGUpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW5Db21wID0gY29tcC5jb21wb25lbnRzKClbMV07XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0NoaWxkcmVuID0gY29tcHV0ZWRDaGlsZHJlbkNvbXBvbmVudHMoY2hpbGRyZW5WaXNpYmxlKTtcbiAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuVmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIFNsaWRpbmcuZ3JvdyhjaGlsZHJlbkNvbXApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFNsaWRpbmcuc2hyaW5rKGNoaWxkcmVuQ29tcCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgUmVwbGFjaW5nLnNldChjaGlsZHJlbkNvbXAsIG5ld0NoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHRyZWVFdmVudHNJZCA9IGdlbmVyYXRlJDYoJ3RyZWUtZXZlbnQtaWQnKTtcbiAgICBjb25zdCByZW5kZXJUcmVlID0gKHNwZWMsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3Qgb25MZWFmQWN0aW9uID0gc3BlYy5vbkxlYWZBY3Rpb24uZ2V0T3Iobm9vcCk7XG4gICAgICBjb25zdCBvblRvZ2dsZUV4cGFuZCA9IHNwZWMub25Ub2dnbGVFeHBhbmQuZ2V0T3Iobm9vcCk7XG4gICAgICBjb25zdCBkZWZhdWx0RXhwYW5kZWRJZHMgPSBzcGVjLmRlZmF1bHRFeHBhbmRlZElkcztcbiAgICAgIGNvbnN0IGV4cGFuZGVkSWRzID0gQ2VsbChkZWZhdWx0RXhwYW5kZWRJZHMpO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRJZENlbGwgPSBDZWxsKHNwZWMuZGVmYXVsdFNlbGVjdGVkSWQpO1xuICAgICAgY29uc3QgdHJlZUlkID0gZ2VuZXJhdGUkNigndHJlZS1pZCcpO1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSAoc2VsZWN0ZWRJZCwgZXhwYW5kZWRJZHMpID0+IHNwZWMuaXRlbXMubWFwKGl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnbGVhZicgPyByZW5kZXJMZWFmTGFiZWwoe1xuICAgICAgICAgIGxlYWY6IGl0ZW0sXG4gICAgICAgICAgc2VsZWN0ZWRJZCxcbiAgICAgICAgICBvbkxlYWZBY3Rpb24sXG4gICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICB0cmVlSWQsXG4gICAgICAgICAgYmFja3N0YWdlXG4gICAgICAgIH0pIDogcmVuZGVyRGlyZWN0b3J5KHtcbiAgICAgICAgICBkaXJlY3Rvcnk6IGl0ZW0sXG4gICAgICAgICAgc2VsZWN0ZWRJZCxcbiAgICAgICAgICBvbkxlYWZBY3Rpb24sXG4gICAgICAgICAgZXhwYW5kZWRJZHMsXG4gICAgICAgICAgbGFiZWxUYWJzdG9wcGluZzogdHJ1ZSxcbiAgICAgICAgICB0cmVlSWQsXG4gICAgICAgICAgYmFja3N0YWdlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXRyZWUnXSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7IHJvbGU6ICd0cmVlJyB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IGNoaWxkcmVuKHNlbGVjdGVkSWRDZWxsLmdldCgpLCBleHBhbmRlZElkcy5nZXQoKSksXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBLZXlpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIG1vZGU6ICdmbG93JyxcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnLnRveC10cmVlLS1sZWFmX19sYWJlbC0tdmlzaWJsZSwgLnRveC10cmVlLS1kaXJlY3RvcnlfX2xhYmVsLS12aXNpYmxlJyxcbiAgICAgICAgICAgIGN5Y2xlczogZmFsc2VcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjb25maWcodHJlZUV2ZW50c0lkLCBbcnVuJDEoJ2V4cGFuZC10cmVlLW5vZGUnLCAoX2NtcCwgc2UpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qge2V4cGFuZGVkLCBub2RlfSA9IHNlLmV2ZW50O1xuICAgICAgICAgICAgICBleHBhbmRlZElkcy5zZXQoZXhwYW5kZWQgPyBbXG4gICAgICAgICAgICAgICAgLi4uZXhwYW5kZWRJZHMuZ2V0KCksXG4gICAgICAgICAgICAgICAgbm9kZVxuICAgICAgICAgICAgICBdIDogZXhwYW5kZWRJZHMuZ2V0KCkuZmlsdGVyKGlkID0+IGlkICE9PSBub2RlKSk7XG4gICAgICAgICAgICAgIG9uVG9nZ2xlRXhwYW5kKGV4cGFuZGVkSWRzLmdldCgpLCB7XG4gICAgICAgICAgICAgICAgZXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgbm9kZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXSksXG4gICAgICAgICAgUmVjZWl2aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBjaGFubmVsczoge1xuICAgICAgICAgICAgICBbYHVwZGF0ZS1hY3RpdmUtaXRlbS0keyB0cmVlSWQgfWBdOiB7XG4gICAgICAgICAgICAgICAgb25SZWNlaXZlOiAoY29tcCwgbWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJZENlbGwuc2V0KE9wdGlvbmFsLnNvbWUobWVzc2FnZS52YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgUmVwbGFjaW5nLnNldChjb21wLCBjaGlsZHJlbihPcHRpb25hbC5zb21lKG1lc3NhZ2UudmFsdWUpLCBleHBhbmRlZElkcy5nZXQoKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIFJlcGxhY2luZy5jb25maWcoe30pXG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBldmVudHMkNSA9IChzdHJlYW1Db25maWcsIHN0cmVhbVN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBzdHJlYW1zID0gc3RyZWFtQ29uZmlnLnN0cmVhbS5zdHJlYW1zO1xuICAgICAgY29uc3QgcHJvY2Vzc29yID0gc3RyZWFtcy5zZXR1cChzdHJlYW1Db25maWcsIHN0cmVhbVN0YXRlKTtcbiAgICAgIHJldHVybiBkZXJpdmUkMihbXG4gICAgICAgIHJ1biQxKHN0cmVhbUNvbmZpZy5ldmVudCwgcHJvY2Vzc29yKSxcbiAgICAgICAgcnVuT25EZXRhY2hlZCgoKSA9PiBzdHJlYW1TdGF0ZS5jYW5jZWwoKSlcbiAgICAgIF0uY29uY2F0KHN0cmVhbUNvbmZpZy5jYW5jZWxFdmVudC5tYXAoZSA9PiBbcnVuJDEoZSwgKCkgPT4gc3RyZWFtU3RhdGUuY2FuY2VsKCkpXSkuZ2V0T3IoW10pKSk7XG4gICAgfTtcblxuICAgIHZhciBBY3RpdmVTdHJlYW1pbmcgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgZXZlbnRzOiBldmVudHMkNVxuICAgIH0pO1xuXG4gICAgY29uc3QgdGhyb3R0bGUgPSBfY29uZmlnID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlID0gQ2VsbChudWxsKTtcbiAgICAgIGNvbnN0IHJlYWRTdGF0ZSA9ICgpID0+ICh7IHRpbWVyOiBzdGF0ZS5nZXQoKSAhPT0gbnVsbCA/ICdzZXQnIDogJ3Vuc2V0JyB9KTtcbiAgICAgIGNvbnN0IHNldFRpbWVyID0gdCA9PiB7XG4gICAgICAgIHN0YXRlLnNldCh0KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHQgPSBzdGF0ZS5nZXQoKTtcbiAgICAgICAgaWYgKHQgIT09IG51bGwpIHtcbiAgICAgICAgICB0LmNhbmNlbCgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIG51JDgoe1xuICAgICAgICByZWFkU3RhdGUsXG4gICAgICAgIHNldFRpbWVyLFxuICAgICAgICBjYW5jZWxcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW5pdCQ4ID0gc3BlYyA9PiBzcGVjLnN0cmVhbS5zdHJlYW1zLnN0YXRlKHNwZWMpO1xuXG4gICAgdmFyIFN0cmVhbWluZ1N0YXRlID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIHRocm90dGxlOiB0aHJvdHRsZSxcbiAgICAgICAgaW5pdDogaW5pdCQ4XG4gICAgfSk7XG5cbiAgICBjb25zdCBzZXR1cCRjID0gKHN0cmVhbUluZm8sIHN0cmVhbVN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBzSW5mbyA9IHN0cmVhbUluZm8uc3RyZWFtO1xuICAgICAgY29uc3QgdGhyb3R0bGVyID0gbGFzdChzdHJlYW1JbmZvLm9uU3RyZWFtLCBzSW5mby5kZWxheSk7XG4gICAgICBzdHJlYW1TdGF0ZS5zZXRUaW1lcih0aHJvdHRsZXIpO1xuICAgICAgcmV0dXJuIChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgIHRocm90dGxlci50aHJvdHRsZShjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50KTtcbiAgICAgICAgaWYgKHNJbmZvLnN0b3BFdmVudCkge1xuICAgICAgICAgIHNpbXVsYXRlZEV2ZW50LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBTdHJlYW1pbmdTY2hlbWEgPSBbXG4gICAgICByZXF1aXJlZE9mKCdzdHJlYW0nLCBjaG9vc2UkMSgnbW9kZScsIHtcbiAgICAgICAgdGhyb3R0bGU6IFtcbiAgICAgICAgICByZXF1aXJlZCQxKCdkZWxheScpLFxuICAgICAgICAgIGRlZmF1bHRlZCgnc3RvcEV2ZW50JywgdHJ1ZSksXG4gICAgICAgICAgb3V0cHV0JDEoJ3N0cmVhbXMnLCB7XG4gICAgICAgICAgICBzZXR1cDogc2V0dXAkYyxcbiAgICAgICAgICAgIHN0YXRlOiB0aHJvdHRsZVxuICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgIH0pKSxcbiAgICAgIGRlZmF1bHRlZCgnZXZlbnQnLCAnaW5wdXQnKSxcbiAgICAgIG9wdGlvbiQzKCdjYW5jZWxFdmVudCcpLFxuICAgICAgb25TdHJpY3RIYW5kbGVyKCdvblN0cmVhbScpXG4gICAgXTtcblxuICAgIGNvbnN0IFN0cmVhbWluZyA9IGNyZWF0ZSQ0KHtcbiAgICAgIGZpZWxkczogU3RyZWFtaW5nU2NoZW1hLFxuICAgICAgbmFtZTogJ3N0cmVhbWluZycsXG4gICAgICBhY3RpdmU6IEFjdGl2ZVN0cmVhbWluZyxcbiAgICAgIHN0YXRlOiBTdHJlYW1pbmdTdGF0ZVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2V0VmFsdWVGcm9tSXRlbSA9IChtb2RlbCwgaW5wdXQsIGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1EYXRhID0gUmVwcmVzZW50aW5nLmdldFZhbHVlKGl0ZW0pO1xuICAgICAgUmVwcmVzZW50aW5nLnNldFZhbHVlKGlucHV0LCBpdGVtRGF0YSk7XG4gICAgICBzZXRDdXJzb3JBdEVuZChpbnB1dCk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRTZWxlY3Rpb25PbiA9IChpbnB1dCwgZikgPT4ge1xuICAgICAgY29uc3QgZWwgPSBpbnB1dC5lbGVtZW50O1xuICAgICAgY29uc3QgdmFsdWUgPSBnZXQkNihlbCk7XG4gICAgICBjb25zdCBub2RlID0gZWwuZG9tO1xuICAgICAgaWYgKGdldCRmKGVsLCAndHlwZScpICE9PSAnbnVtYmVyJykge1xuICAgICAgICBmKG5vZGUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldEN1cnNvckF0RW5kID0gaW5wdXQgPT4ge1xuICAgICAgc2V0U2VsZWN0aW9uT24oaW5wdXQsIChub2RlLCB2YWx1ZSkgPT4gbm9kZS5zZXRTZWxlY3Rpb25SYW5nZSh2YWx1ZS5sZW5ndGgsIHZhbHVlLmxlbmd0aCkpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0U2VsZWN0aW9uVG9FbmQgPSAoaW5wdXQsIHN0YXJ0T2Zmc2V0KSA9PiB7XG4gICAgICBzZXRTZWxlY3Rpb25PbihpbnB1dCwgKG5vZGUsIHZhbHVlKSA9PiBub2RlLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0T2Zmc2V0LCB2YWx1ZS5sZW5ndGgpKTtcbiAgICB9O1xuICAgIGNvbnN0IGF0dGVtcHRTZWxlY3RPdmVyID0gKG1vZGVsLCBpbnB1dCwgaXRlbSkgPT4ge1xuICAgICAgaWYgKCFtb2RlbC5zZWxlY3RzT3Zlcikge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gUmVwcmVzZW50aW5nLmdldFZhbHVlKGlucHV0KTtcbiAgICAgICAgY29uc3QgaW5wdXREaXNwbGF5ID0gbW9kZWwuZ2V0RGlzcGxheVRleHQoY3VycmVudFZhbHVlKTtcbiAgICAgICAgY29uc3QgaXRlbVZhbHVlID0gUmVwcmVzZW50aW5nLmdldFZhbHVlKGl0ZW0pO1xuICAgICAgICBjb25zdCBpdGVtRGlzcGxheSA9IG1vZGVsLmdldERpc3BsYXlUZXh0KGl0ZW1WYWx1ZSk7XG4gICAgICAgIHJldHVybiBpdGVtRGlzcGxheS5pbmRleE9mKGlucHV0RGlzcGxheSkgPT09IDAgPyBPcHRpb25hbC5zb21lKCgpID0+IHtcbiAgICAgICAgICBzZXRWYWx1ZUZyb21JdGVtKG1vZGVsLCBpbnB1dCwgaXRlbSk7XG4gICAgICAgICAgc2V0U2VsZWN0aW9uVG9FbmQoaW5wdXQsIGlucHV0RGlzcGxheS5sZW5ndGgpO1xuICAgICAgICB9KSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaXRlbUV4ZWN1dGUgPSBjb25zdGFudCQxKCdhbGxveS50eXBlYWhlYWQuaXRlbWV4ZWN1dGUnKTtcblxuICAgIGNvbnN0IG1ha2UkMyA9IChkZXRhaWwsIGNvbXBvbmVudHMsIHNwZWMsIGV4dGVybmFscykgPT4ge1xuICAgICAgY29uc3QgbmF2aWdhdGVMaXN0ID0gKGNvbXAsIHNpbXVsYXRlZEV2ZW50LCBoaWdobGlnaHRlcikgPT4ge1xuICAgICAgICBkZXRhaWwucHJldmlld2luZy5zZXQoZmFsc2UpO1xuICAgICAgICBjb25zdCBzYW5kYm94ID0gQ291cGxpbmcuZ2V0Q291cGxlZChjb21wLCAnc2FuZGJveCcpO1xuICAgICAgICBpZiAoU2FuZGJveGluZy5pc09wZW4oc2FuZGJveCkpIHtcbiAgICAgICAgICBDb21wb3NpbmcuZ2V0Q3VycmVudChzYW5kYm94KS5lYWNoKG1lbnUgPT4ge1xuICAgICAgICAgICAgSGlnaGxpZ2h0aW5nLmdldEhpZ2hsaWdodGVkKG1lbnUpLmZvbGQoKCkgPT4ge1xuICAgICAgICAgICAgICBoaWdobGlnaHRlcihtZW51KTtcbiAgICAgICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgICAgZGlzcGF0Y2hFdmVudChzYW5kYm94LCBtZW51LmVsZW1lbnQsICdrZXlkb3duJywgc2ltdWxhdGVkRXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgb25PcGVuU3luYyA9IHNhbmRib3ggPT4ge1xuICAgICAgICAgICAgQ29tcG9zaW5nLmdldEN1cnJlbnQoc2FuZGJveCkuZWFjaChoaWdobGlnaHRlcik7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBvcGVuKGRldGFpbCwgbWFwRmV0Y2goY29tcCksIGNvbXAsIHNhbmRib3gsIGV4dGVybmFscywgb25PcGVuU3luYywgSGlnaGxpZ2h0T25PcGVuLkhpZ2hsaWdodE1lbnVBbmRJdGVtKS5nZXQobm9vcCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBmb2N1c0JlaGF2aW91cnMkMSA9IGZvY3VzQmVoYXZpb3VycyhkZXRhaWwpO1xuICAgICAgY29uc3QgbWFwRmV0Y2ggPSBjb21wID0+IHRkYXRhID0+IHRkYXRhLm1hcChkYXRhID0+IHtcbiAgICAgICAgY29uc3QgbWVudXMgPSB2YWx1ZXMoZGF0YS5tZW51cyk7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gYmluZCQzKG1lbnVzLCBtZW51ID0+IGZpbHRlciQyKG1lbnUuaXRlbXMsIGl0ZW0gPT4gaXRlbS50eXBlID09PSAnaXRlbScpKTtcbiAgICAgICAgY29uc3QgcmVwU3RhdGUgPSBSZXByZXNlbnRpbmcuZ2V0U3RhdGUoY29tcCk7XG4gICAgICAgIHJlcFN0YXRlLnVwZGF0ZShtYXAkMihpdGVtcywgaXRlbSA9PiBpdGVtLmRhdGEpKTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGdldEFjdGl2ZU1lbnUgPSBzYW5kYm94Q29tcCA9PiBDb21wb3NpbmcuZ2V0Q3VycmVudChzYW5kYm94Q29tcCk7XG4gICAgICBjb25zdCB0eXBlYWhlYWRDdXN0b21FdmVudHMgPSAndHlwZWFoZWFkZXZlbnRzJztcbiAgICAgIGNvbnN0IGJlaGF2aW91cnMgPSBbXG4gICAgICAgIEZvY3VzaW5nLmNvbmZpZyh7fSksXG4gICAgICAgIFJlcHJlc2VudGluZy5jb25maWcoe1xuICAgICAgICAgIG9uU2V0VmFsdWU6IGRldGFpbC5vblNldFZhbHVlLFxuICAgICAgICAgIHN0b3JlOiB7XG4gICAgICAgICAgICBtb2RlOiAnZGF0YXNldCcsXG4gICAgICAgICAgICBnZXREYXRhS2V5OiBjb21wID0+IGdldCQ2KGNvbXAuZWxlbWVudCksXG4gICAgICAgICAgICBnZXRGYWxsYmFja0VudHJ5OiBpdGVtU3RyaW5nID0+ICh7XG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtU3RyaW5nLFxuICAgICAgICAgICAgICBtZXRhOiB7fVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzZXRWYWx1ZTogKGNvbXAsIGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgc2V0JDUoY29tcC5lbGVtZW50LCBkZXRhaWwubW9kZWwuZ2V0RGlzcGxheVRleHQoZGF0YSkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC4uLmRldGFpbC5pbml0aWFsRGF0YS5tYXAoZCA9PiB3cmFwJDEoJ2luaXRpYWxWYWx1ZScsIGQpKS5nZXRPcih7fSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBTdHJlYW1pbmcuY29uZmlnKHtcbiAgICAgICAgICBzdHJlYW06IHtcbiAgICAgICAgICAgIG1vZGU6ICd0aHJvdHRsZScsXG4gICAgICAgICAgICBkZWxheTogZGV0YWlsLnJlc3BvbnNlVGltZSxcbiAgICAgICAgICAgIHN0b3BFdmVudDogZmFsc2VcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uU3RyZWFtOiAoY29tcG9uZW50LCBfc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNhbmRib3ggPSBDb3VwbGluZy5nZXRDb3VwbGVkKGNvbXBvbmVudCwgJ3NhbmRib3gnKTtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzSW5JbnB1dCA9IEZvY3VzaW5nLmlzRm9jdXNlZChjb21wb25lbnQpO1xuICAgICAgICAgICAgaWYgKGZvY3VzSW5JbnB1dCkge1xuICAgICAgICAgICAgICBpZiAoZ2V0JDYoY29tcG9uZW50LmVsZW1lbnQpLmxlbmd0aCA+PSBkZXRhaWwubWluQ2hhcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gZ2V0QWN0aXZlTWVudShzYW5kYm94KS5iaW5kKGFjdGl2ZU1lbnUgPT4gSGlnaGxpZ2h0aW5nLmdldEhpZ2hsaWdodGVkKGFjdGl2ZU1lbnUpLm1hcChSZXByZXNlbnRpbmcuZ2V0VmFsdWUpKTtcbiAgICAgICAgICAgICAgICBkZXRhaWwucHJldmlld2luZy5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb25PcGVuU3luYyA9IF9zYW5kYm94ID0+IHtcbiAgICAgICAgICAgICAgICAgIGdldEFjdGl2ZU1lbnUoc2FuZGJveCkuZWFjaChhY3RpdmVNZW51ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNWYWx1ZS5mb2xkKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoZGV0YWlsLm1vZGVsLnNlbGVjdHNPdmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBIaWdobGlnaHRpbmcuaGlnaGxpZ2h0Rmlyc3QoYWN0aXZlTWVudSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCBwdiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgSGlnaGxpZ2h0aW5nLmhpZ2hsaWdodEJ5KGFjdGl2ZU1lbnUsIGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbURhdGEgPSBSZXByZXNlbnRpbmcuZ2V0VmFsdWUoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbURhdGEudmFsdWUgPT09IHB2LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIEhpZ2hsaWdodGluZy5nZXRIaWdobGlnaHRlZChhY3RpdmVNZW51KS5vclRodW5rKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEhpZ2hsaWdodGluZy5oaWdobGlnaHRGaXJzdChhY3RpdmVNZW51KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBvcGVuKGRldGFpbCwgbWFwRmV0Y2goY29tcG9uZW50KSwgY29tcG9uZW50LCBzYW5kYm94LCBleHRlcm5hbHMsIG9uT3BlblN5bmMsIEhpZ2hsaWdodE9uT3Blbi5IaWdobGlnaHRKdXN0TWVudSkuZ2V0KG5vb3ApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjYW5jZWxFdmVudDogdHlwZWFoZWFkQ2FuY2VsKClcbiAgICAgICAgfSksXG4gICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgIG1vZGU6ICdzcGVjaWFsJyxcbiAgICAgICAgICBvbkRvd246IChjb21wLCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgbmF2aWdhdGVMaXN0KGNvbXAsIHNpbXVsYXRlZEV2ZW50LCBIaWdobGlnaHRpbmcuaGlnaGxpZ2h0Rmlyc3QpO1xuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVzY2FwZTogY29tcCA9PiB7XG4gICAgICAgICAgICBjb25zdCBzYW5kYm94ID0gQ291cGxpbmcuZ2V0Q291cGxlZChjb21wLCAnc2FuZGJveCcpO1xuICAgICAgICAgICAgaWYgKFNhbmRib3hpbmcuaXNPcGVuKHNhbmRib3gpKSB7XG4gICAgICAgICAgICAgIFNhbmRib3hpbmcuY2xvc2Uoc2FuZGJveCk7XG4gICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uVXA6IChjb21wLCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgbmF2aWdhdGVMaXN0KGNvbXAsIHNpbXVsYXRlZEV2ZW50LCBIaWdobGlnaHRpbmcuaGlnaGxpZ2h0TGFzdCk7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uRW50ZXI6IGNvbXAgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2FuZGJveCA9IENvdXBsaW5nLmdldENvdXBsZWQoY29tcCwgJ3NhbmRib3gnKTtcbiAgICAgICAgICAgIGNvbnN0IHNhbmRib3hJc09wZW4gPSBTYW5kYm94aW5nLmlzT3BlbihzYW5kYm94KTtcbiAgICAgICAgICAgIGlmIChzYW5kYm94SXNPcGVuICYmICFkZXRhaWwucHJldmlld2luZy5nZXQoKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0QWN0aXZlTWVudShzYW5kYm94KS5iaW5kKGFjdGl2ZU1lbnUgPT4gSGlnaGxpZ2h0aW5nLmdldEhpZ2hsaWdodGVkKGFjdGl2ZU1lbnUpKS5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgZW1pdFdpdGgoY29tcCwgaXRlbUV4ZWN1dGUoKSwgeyBpdGVtIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IFJlcHJlc2VudGluZy5nZXRWYWx1ZShjb21wKTtcbiAgICAgICAgICAgICAgZW1pdChjb21wLCB0eXBlYWhlYWRDYW5jZWwoKSk7XG4gICAgICAgICAgICAgIGRldGFpbC5vbkV4ZWN1dGUoc2FuZGJveCwgY29tcCwgY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgICAgaWYgKHNhbmRib3hJc09wZW4pIHtcbiAgICAgICAgICAgICAgICBTYW5kYm94aW5nLmNsb3NlKHNhbmRib3gpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIFRvZ2dsaW5nLmNvbmZpZyh7XG4gICAgICAgICAgdG9nZ2xlQ2xhc3M6IGRldGFpbC5tYXJrZXJzLm9wZW5DbGFzcyxcbiAgICAgICAgICBhcmlhOiB7IG1vZGU6ICdleHBhbmRlZCcgfVxuICAgICAgICB9KSxcbiAgICAgICAgQ291cGxpbmcuY29uZmlnKHtcbiAgICAgICAgICBvdGhlcnM6IHtcbiAgICAgICAgICAgIHNhbmRib3g6IGhvdHNwb3QgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gbWFrZVNhbmRib3gkMShkZXRhaWwsIGhvdHNwb3QsIHtcbiAgICAgICAgICAgICAgICBvbk9wZW46ICgpID0+IFRvZ2dsaW5nLm9uKGhvdHNwb3QpLFxuICAgICAgICAgICAgICAgIG9uQ2xvc2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGRldGFpbC5sYXp5VHlwZWFoZWFkQ29tcC5nZXQoKS5lYWNoKGlucHV0ID0+IHJlbW92ZSQ3KGlucHV0LmVsZW1lbnQsICdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKSk7XG4gICAgICAgICAgICAgICAgICBUb2dnbGluZy5vZmYoaG90c3BvdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBjb25maWcodHlwZWFoZWFkQ3VzdG9tRXZlbnRzLCBbXG4gICAgICAgICAgcnVuT25BdHRhY2hlZCh0eXBlYWhlYWRDb21wID0+IHtcbiAgICAgICAgICAgIGRldGFpbC5sYXp5VHlwZWFoZWFkQ29tcC5zZXQoT3B0aW9uYWwuc29tZSh0eXBlYWhlYWRDb21wKSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVuT25EZXRhY2hlZChfdHlwZWFoZWFkQ29tcCA9PiB7XG4gICAgICAgICAgICBkZXRhaWwubGF6eVR5cGVhaGVhZENvbXAuc2V0KE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVuT25FeGVjdXRlJDEoY29tcCA9PiB7XG4gICAgICAgICAgICBjb25zdCBvbk9wZW5TeW5jID0gbm9vcDtcbiAgICAgICAgICAgIHRvZ2dsZVBvcHVwKGRldGFpbCwgbWFwRmV0Y2goY29tcCksIGNvbXAsIGV4dGVybmFscywgb25PcGVuU3luYywgSGlnaGxpZ2h0T25PcGVuLkhpZ2hsaWdodE1lbnVBbmRJdGVtKS5nZXQobm9vcCk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVuJDEoaXRlbUV4ZWN1dGUoKSwgKGNvbXAsIHNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzYW5kYm94ID0gQ291cGxpbmcuZ2V0Q291cGxlZChjb21wLCAnc2FuZGJveCcpO1xuICAgICAgICAgICAgc2V0VmFsdWVGcm9tSXRlbShkZXRhaWwubW9kZWwsIGNvbXAsIHNlLmV2ZW50Lml0ZW0pO1xuICAgICAgICAgICAgZW1pdChjb21wLCB0eXBlYWhlYWRDYW5jZWwoKSk7XG4gICAgICAgICAgICBkZXRhaWwub25JdGVtRXhlY3V0ZShjb21wLCBzYW5kYm94LCBzZS5ldmVudC5pdGVtLCBSZXByZXNlbnRpbmcuZ2V0VmFsdWUoY29tcCkpO1xuICAgICAgICAgICAgU2FuZGJveGluZy5jbG9zZShzYW5kYm94KTtcbiAgICAgICAgICAgIHNldEN1cnNvckF0RW5kKGNvbXApO1xuICAgICAgICAgIH0pXG4gICAgICAgIF0uY29uY2F0KGRldGFpbC5kaXNtaXNzT25CbHVyID8gW3J1biQxKHBvc3RCbHVyKCksIHR5cGVhaGVhZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBzYW5kYm94ID0gQ291cGxpbmcuZ2V0Q291cGxlZCh0eXBlYWhlYWQsICdzYW5kYm94Jyk7XG4gICAgICAgICAgICBpZiAoc2VhcmNoKHNhbmRib3guZWxlbWVudCkuaXNOb25lKCkpIHtcbiAgICAgICAgICAgICAgU2FuZGJveGluZy5jbG9zZShzYW5kYm94KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KV0gOiBbXSkpXG4gICAgICBdO1xuICAgICAgY29uc3QgZXZlbnRPcmRlciA9IHtcbiAgICAgICAgW2RldGFjaGVkRnJvbURvbSgpXTogW1xuICAgICAgICAgIFJlcHJlc2VudGluZy5uYW1lKCksXG4gICAgICAgICAgU3RyZWFtaW5nLm5hbWUoKSxcbiAgICAgICAgICB0eXBlYWhlYWRDdXN0b21FdmVudHNcbiAgICAgICAgXSxcbiAgICAgICAgLi4uZGV0YWlsLmV2ZW50T3JkZXJcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1aWQ6IGRldGFpbC51aWQsXG4gICAgICAgIGRvbTogZG9tKGRlZXBNZXJnZShkZXRhaWwsIHtcbiAgICAgICAgICBpbnB1dEF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICdyb2xlJzogJ2NvbWJvYm94JyxcbiAgICAgICAgICAgICdhcmlhLWF1dG9jb21wbGV0ZSc6ICdsaXN0JyxcbiAgICAgICAgICAgICdhcmlhLWhhc3BvcHVwJzogJ3RydWUnXG4gICAgICAgICAgfVxuICAgICAgICB9KSksXG4gICAgICAgIGJlaGF2aW91cnM6IHtcbiAgICAgICAgICAuLi5mb2N1c0JlaGF2aW91cnMkMSxcbiAgICAgICAgICAuLi5hdWdtZW50KGRldGFpbC50eXBlYWhlYWRCZWhhdmlvdXJzLCBiZWhhdmlvdXJzKVxuICAgICAgICB9LFxuICAgICAgICBldmVudE9yZGVyXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBzY2hlbWEkZyA9IGNvbnN0YW50JDEoW1xuICAgICAgb3B0aW9uJDMoJ2xhenlTaW5rJyksXG4gICAgICByZXF1aXJlZCQxKCdmZXRjaCcpLFxuICAgICAgZGVmYXVsdGVkKCdtaW5DaGFycycsIDUpLFxuICAgICAgZGVmYXVsdGVkKCdyZXNwb25zZVRpbWUnLCAxMDAwKSxcbiAgICAgIG9uSGFuZGxlcignb25PcGVuJyksXG4gICAgICBkZWZhdWx0ZWQoJ2dldEhvdHNwb3QnLCBPcHRpb25hbC5zb21lKSxcbiAgICAgIGRlZmF1bHRlZCgnZ2V0QW5jaG9yT3ZlcnJpZGVzJywgY29uc3RhbnQkMSh7fSkpLFxuICAgICAgZGVmYXVsdGVkKCdsYXlvdXRzJywgT3B0aW9uYWwubm9uZSgpKSxcbiAgICAgIGRlZmF1bHRlZCgnZXZlbnRPcmRlcicsIHt9KSxcbiAgICAgIGRlZmF1bHRlZE9iak9mKCdtb2RlbCcsIHt9LCBbXG4gICAgICAgIGRlZmF1bHRlZCgnZ2V0RGlzcGxheVRleHQnLCBpdGVtRGF0YSA9PiBpdGVtRGF0YS5tZXRhICE9PSB1bmRlZmluZWQgJiYgaXRlbURhdGEubWV0YS50ZXh0ICE9PSB1bmRlZmluZWQgPyBpdGVtRGF0YS5tZXRhLnRleHQgOiBpdGVtRGF0YS52YWx1ZSksXG4gICAgICAgIGRlZmF1bHRlZCgnc2VsZWN0c092ZXInLCB0cnVlKSxcbiAgICAgICAgZGVmYXVsdGVkKCdwb3B1bGF0ZUZyb21Ccm93c2UnLCB0cnVlKVxuICAgICAgXSksXG4gICAgICBvbkhhbmRsZXIoJ29uU2V0VmFsdWUnKSxcbiAgICAgIG9uS2V5Ym9hcmRIYW5kbGVyKCdvbkV4ZWN1dGUnKSxcbiAgICAgIG9uSGFuZGxlcignb25JdGVtRXhlY3V0ZScpLFxuICAgICAgZGVmYXVsdGVkKCdpbnB1dENsYXNzZXMnLCBbXSksXG4gICAgICBkZWZhdWx0ZWQoJ2lucHV0QXR0cmlidXRlcycsIHt9KSxcbiAgICAgIGRlZmF1bHRlZCgnaW5wdXRTdHlsZXMnLCB7fSksXG4gICAgICBkZWZhdWx0ZWQoJ21hdGNoV2lkdGgnLCB0cnVlKSxcbiAgICAgIGRlZmF1bHRlZCgndXNlTWluV2lkdGgnLCBmYWxzZSksXG4gICAgICBkZWZhdWx0ZWQoJ2Rpc21pc3NPbkJsdXInLCB0cnVlKSxcbiAgICAgIG1hcmtlcnMkMShbJ29wZW5DbGFzcyddKSxcbiAgICAgIG9wdGlvbiQzKCdpbml0aWFsRGF0YScpLFxuICAgICAgZmllbGQoJ3R5cGVhaGVhZEJlaGF2aW91cnMnLCBbXG4gICAgICAgIEZvY3VzaW5nLFxuICAgICAgICBSZXByZXNlbnRpbmcsXG4gICAgICAgIFN0cmVhbWluZyxcbiAgICAgICAgS2V5aW5nLFxuICAgICAgICBUb2dnbGluZyxcbiAgICAgICAgQ291cGxpbmdcbiAgICAgIF0pLFxuICAgICAgY3VzdG9tRmllbGQoJ2xhenlUeXBlYWhlYWRDb21wJywgKCkgPT4gQ2VsbChPcHRpb25hbC5ub25lKSksXG4gICAgICBjdXN0b21GaWVsZCgncHJldmlld2luZycsICgpID0+IENlbGwodHJ1ZSkpXG4gICAgXS5jb25jYXQoc2NoZW1hJGwoKSkuY29uY2F0KHNhbmRib3hGaWVsZHMoKSkpO1xuICAgIGNvbnN0IHBhcnRzJGIgPSBjb25zdGFudCQxKFtleHRlcm5hbCh7XG4gICAgICAgIHNjaGVtYTogW3RpZXJlZE1lbnVNYXJrZXJzKCldLFxuICAgICAgICBuYW1lOiAnbWVudScsXG4gICAgICAgIG92ZXJyaWRlczogZGV0YWlsID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZmFrZUZvY3VzOiB0cnVlLFxuICAgICAgICAgICAgb25IaWdobGlnaHRJdGVtOiAoX3RtZW51LCBtZW51LCBpdGVtKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghZGV0YWlsLnByZXZpZXdpbmcuZ2V0KCkpIHtcbiAgICAgICAgICAgICAgICBkZXRhaWwubGF6eVR5cGVhaGVhZENvbXAuZ2V0KCkuZWFjaChpbnB1dCA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZGV0YWlsLm1vZGVsLnBvcHVsYXRlRnJvbUJyb3dzZSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZUZyb21JdGVtKGRldGFpbC5tb2RlbCwgaW5wdXQsIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZ2V0T3B0KGl0ZW0uZWxlbWVudCwgJ2lkJykuZWFjaChpZCA9PiBzZXQkOShpbnB1dC5lbGVtZW50LCAnYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgaWQpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZXRhaWwubGF6eVR5cGVhaGVhZENvbXAuZ2V0KCkuZWFjaChpbnB1dCA9PiB7XG4gICAgICAgICAgICAgICAgICBhdHRlbXB0U2VsZWN0T3ZlcihkZXRhaWwubW9kZWwsIGlucHV0LCBpdGVtKS5mb2xkKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRldGFpbC5tb2RlbC5zZWxlY3RzT3Zlcikge1xuICAgICAgICAgICAgICAgICAgICAgIEhpZ2hsaWdodGluZy5kZWhpZ2hsaWdodChtZW51LCBpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICBkZXRhaWwucHJldmlld2luZy5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGV0YWlsLnByZXZpZXdpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSwgc2VsZWN0T3ZlclRleHRJbklucHV0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0T3ZlclRleHRJbklucHV0KCk7XG4gICAgICAgICAgICAgICAgICAgIGRldGFpbC5wcmV2aWV3aW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRXhlY3V0ZTogKF9tZW51LCBpdGVtKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBkZXRhaWwubGF6eVR5cGVhaGVhZENvbXAuZ2V0KCkubWFwKHR5cGVhaGVhZCA9PiB7XG4gICAgICAgICAgICAgICAgZW1pdFdpdGgodHlwZWFoZWFkLCBpdGVtRXhlY3V0ZSgpLCB7IGl0ZW0gfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uSG92ZXI6IChtZW51LCBpdGVtKSA9PiB7XG4gICAgICAgICAgICAgIGRldGFpbC5wcmV2aWV3aW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgIGRldGFpbC5sYXp5VHlwZWFoZWFkQ29tcC5nZXQoKS5lYWNoKGlucHV0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGV0YWlsLm1vZGVsLnBvcHVsYXRlRnJvbUJyb3dzZSkge1xuICAgICAgICAgICAgICAgICAgc2V0VmFsdWVGcm9tSXRlbShkZXRhaWwubW9kZWwsIGlucHV0LCBpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pXSk7XG5cbiAgICBjb25zdCBUeXBlYWhlYWQgPSBjb21wb3NpdGUoe1xuICAgICAgbmFtZTogJ1R5cGVhaGVhZCcsXG4gICAgICBjb25maWdGaWVsZHM6IHNjaGVtYSRnKCksXG4gICAgICBwYXJ0RmllbGRzOiBwYXJ0cyRiKCksXG4gICAgICBmYWN0b3J5OiBtYWtlJDNcbiAgICB9KTtcblxuICAgIGNvbnN0IHdyYXAgPSBkZWxlZ2F0ZSA9PiB7XG4gICAgICBjb25zdCB0b0NhY2hlZCA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHdyYXAoZGVsZWdhdGUudG9DYWNoZWQoKSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgYmluZEZ1dHVyZSA9IGYgPT4ge1xuICAgICAgICByZXR1cm4gd3JhcChkZWxlZ2F0ZS5iaW5kKHJlc0EgPT4gcmVzQS5mb2xkKGVyciA9PiBGdXR1cmUucHVyZShSZXN1bHQuZXJyb3IoZXJyKSksIGEgPT4gZihhKSkpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBiaW5kUmVzdWx0ID0gZiA9PiB7XG4gICAgICAgIHJldHVybiB3cmFwKGRlbGVnYXRlLm1hcChyZXNBID0+IHJlc0EuYmluZChmKSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG1hcFJlc3VsdCA9IGYgPT4ge1xuICAgICAgICByZXR1cm4gd3JhcChkZWxlZ2F0ZS5tYXAocmVzQSA9PiByZXNBLm1hcChmKSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG1hcEVycm9yID0gZiA9PiB7XG4gICAgICAgIHJldHVybiB3cmFwKGRlbGVnYXRlLm1hcChyZXNBID0+IHJlc0EubWFwRXJyb3IoZikpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBmb2xkUmVzdWx0ID0gKHdoZW5FcnJvciwgd2hlblZhbHVlKSA9PiB7XG4gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXAocmVzID0+IHJlcy5mb2xkKHdoZW5FcnJvciwgd2hlblZhbHVlKSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgd2l0aFRpbWVvdXQgPSAodGltZW91dCwgZXJyb3JUaHVuaykgPT4ge1xuICAgICAgICByZXR1cm4gd3JhcChGdXR1cmUubnUoY2FsbGJhY2sgPT4ge1xuICAgICAgICAgIGxldCB0aW1lZE91dCA9IGZhbHNlO1xuICAgICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aW1lZE91dCA9IHRydWU7XG4gICAgICAgICAgICBjYWxsYmFjayhSZXN1bHQuZXJyb3IoZXJyb3JUaHVuaygpKSk7XG4gICAgICAgICAgfSwgdGltZW91dCk7XG4gICAgICAgICAgZGVsZWdhdGUuZ2V0KHJlc3VsdCA9PiB7XG4gICAgICAgICAgICBpZiAoIXRpbWVkT3V0KSB7XG4gICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5kZWxlZ2F0ZSxcbiAgICAgICAgdG9DYWNoZWQsXG4gICAgICAgIGJpbmRGdXR1cmUsXG4gICAgICAgIGJpbmRSZXN1bHQsXG4gICAgICAgIG1hcFJlc3VsdCxcbiAgICAgICAgbWFwRXJyb3IsXG4gICAgICAgIGZvbGRSZXN1bHQsXG4gICAgICAgIHdpdGhUaW1lb3V0XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgbnUkMSA9IHdvcmtlciA9PiB7XG4gICAgICByZXR1cm4gd3JhcChGdXR1cmUubnUod29ya2VyKSk7XG4gICAgfTtcbiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlID0+IHtcbiAgICAgIHJldHVybiB3cmFwKEZ1dHVyZS5wdXJlKFJlc3VsdC52YWx1ZSh2YWx1ZSkpKTtcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yID0gZXJyb3IgPT4ge1xuICAgICAgcmV0dXJuIHdyYXAoRnV0dXJlLnB1cmUoUmVzdWx0LmVycm9yKGVycm9yKSkpO1xuICAgIH07XG4gICAgY29uc3QgZnJvbVJlc3VsdCA9IHJlc3VsdCA9PiB7XG4gICAgICByZXR1cm4gd3JhcChGdXR1cmUucHVyZShyZXN1bHQpKTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21GdXR1cmUgPSBmdXR1cmUgPT4ge1xuICAgICAgcmV0dXJuIHdyYXAoZnV0dXJlLm1hcChSZXN1bHQudmFsdWUpKTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21Qcm9taXNlID0gcHJvbWlzZSA9PiB7XG4gICAgICByZXR1cm4gbnUkMShjb21wbGV0ZXIgPT4ge1xuICAgICAgICBwcm9taXNlLnRoZW4odmFsdWUgPT4ge1xuICAgICAgICAgIGNvbXBsZXRlcihSZXN1bHQudmFsdWUodmFsdWUpKTtcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgIGNvbXBsZXRlcihSZXN1bHQuZXJyb3IoZXJyb3IpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IEZ1dHVyZVJlc3VsdCA9IHtcbiAgICAgIG51OiBudSQxLFxuICAgICAgd3JhcCxcbiAgICAgIHB1cmU6IHZhbHVlLFxuICAgICAgdmFsdWUsXG4gICAgICBlcnJvcixcbiAgICAgIGZyb21SZXN1bHQsXG4gICAgICBmcm9tRnV0dXJlLFxuICAgICAgZnJvbVByb21pc2VcbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVyQ29tbW9uU3BlYyA9IChzcGVjLCBhY3Rpb25PcHQsIGV4dHJhQmVoYXZpb3VycyA9IFtdLCBkb20sIGNvbXBvbmVudHMsIHByb3ZpZGVyc0JhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgYWN0aW9uID0gYWN0aW9uT3B0LmZvbGQoKCkgPT4gKHt9KSwgYWN0aW9uID0+ICh7IGFjdGlvbiB9KSk7XG4gICAgICBjb25zdCBjb21tb24gPSB7XG4gICAgICAgIGJ1dHRvbkJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBEaXNhYmxpbmdDb25maWdzLmJ1dHRvbigoKSA9PiAhc3BlYy5lbmFibGVkIHx8IHByb3ZpZGVyc0JhY2tzdGFnZS5pc0Rpc2FibGVkKCkpLFxuICAgICAgICAgIHJlY2VpdmluZ0NvbmZpZygpLFxuICAgICAgICAgIFRhYnN0b3BwaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgY29uZmlnKCdidXR0b24gcHJlc3MnLCBbXG4gICAgICAgICAgICBwcmV2ZW50RGVmYXVsdCgnY2xpY2snKSxcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0KCdtb3VzZWRvd24nKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0uY29uY2F0KGV4dHJhQmVoYXZpb3VycykpLFxuICAgICAgICBldmVudE9yZGVyOiB7XG4gICAgICAgICAgY2xpY2s6IFtcbiAgICAgICAgICAgICdidXR0b24gcHJlc3MnLFxuICAgICAgICAgICAgJ2FsbG95LmJhc2UuYmVoYXZpb3VyJ1xuICAgICAgICAgIF0sXG4gICAgICAgICAgbW91c2Vkb3duOiBbXG4gICAgICAgICAgICAnYnV0dG9uIHByZXNzJyxcbiAgICAgICAgICAgICdhbGxveS5iYXNlLmJlaGF2aW91cidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmFjdGlvblxuICAgICAgfTtcbiAgICAgIGNvbnN0IGRvbUZpbmFsID0gZGVlcE1lcmdlKGNvbW1vbiwgeyBkb20gfSk7XG4gICAgICByZXR1cm4gZGVlcE1lcmdlKGRvbUZpbmFsLCB7IGNvbXBvbmVudHMgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJJY29uQnV0dG9uU3BlYyA9IChzcGVjLCBhY3Rpb24sIHByb3ZpZGVyc0JhY2tzdGFnZSwgZXh0cmFCZWhhdmlvdXJzID0gW10pID0+IHtcbiAgICAgIGNvbnN0IHRvb2x0aXBBdHRyaWJ1dGVzID0gc3BlYy50b29sdGlwLm1hcCh0b29sdGlwID0+ICh7XG4gICAgICAgICdhcmlhLWxhYmVsJzogcHJvdmlkZXJzQmFja3N0YWdlLnRyYW5zbGF0ZSh0b29sdGlwKSxcbiAgICAgICAgJ3RpdGxlJzogcHJvdmlkZXJzQmFja3N0YWdlLnRyYW5zbGF0ZSh0b29sdGlwKVxuICAgICAgfSkpLmdldE9yKHt9KTtcbiAgICAgIGNvbnN0IGRvbSA9IHtcbiAgICAgICAgdGFnOiAnYnV0dG9uJyxcbiAgICAgICAgY2xhc3NlczogWyd0b3gtdGJ0biddLFxuICAgICAgICBhdHRyaWJ1dGVzOiB0b29sdGlwQXR0cmlidXRlc1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGljb24gPSBzcGVjLmljb24ubWFwKGljb25OYW1lID0+IHJlbmRlckljb25Gcm9tUGFjayQxKGljb25OYW1lLCBwcm92aWRlcnNCYWNrc3RhZ2UuaWNvbnMpKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb21wb25lbnRSZW5kZXJQaXBlbGluZShbaWNvbl0pO1xuICAgICAgcmV0dXJuIHJlbmRlckNvbW1vblNwZWMoc3BlYywgYWN0aW9uLCBleHRyYUJlaGF2aW91cnMsIGRvbSwgY29tcG9uZW50cywgcHJvdmlkZXJzQmFja3N0YWdlKTtcbiAgICB9O1xuICAgIGNvbnN0IGNhbGN1bGF0ZUNsYXNzZXNGcm9tQnV0dG9uVHlwZSA9IGJ1dHRvblR5cGUgPT4ge1xuICAgICAgc3dpdGNoIChidXR0b25UeXBlKSB7XG4gICAgICBjYXNlICdwcmltYXJ5JzpcbiAgICAgICAgcmV0dXJuIFsndG94LWJ1dHRvbiddO1xuICAgICAgY2FzZSAndG9vbGJhcic6XG4gICAgICAgIHJldHVybiBbJ3RveC10YnRuJ107XG4gICAgICBjYXNlICdzZWNvbmRhcnknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAndG94LWJ1dHRvbicsXG4gICAgICAgICAgJ3RveC1idXR0b24tLXNlY29uZGFyeSdcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckJ1dHRvblNwZWMgPSAoc3BlYywgYWN0aW9uLCBwcm92aWRlcnNCYWNrc3RhZ2UsIGV4dHJhQmVoYXZpb3VycyA9IFtdLCBleHRyYUNsYXNzZXMgPSBbXSkgPT4ge1xuICAgICAgY29uc3QgdHJhbnNsYXRlZFRleHQgPSBwcm92aWRlcnNCYWNrc3RhZ2UudHJhbnNsYXRlKHNwZWMudGV4dCk7XG4gICAgICBjb25zdCBpY29uID0gc3BlYy5pY29uLm1hcChpY29uTmFtZSA9PiByZW5kZXJJY29uRnJvbVBhY2skMShpY29uTmFtZSwgcHJvdmlkZXJzQmFja3N0YWdlLmljb25zKSk7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gW2ljb24uZ2V0T3JUaHVuaygoKSA9PiB0ZXh0JDIodHJhbnNsYXRlZFRleHQpKV07XG4gICAgICBjb25zdCBidXR0b25UeXBlID0gc3BlYy5idXR0b25UeXBlLmdldE9yKCFzcGVjLnByaW1hcnkgJiYgIXNwZWMuYm9yZGVybGVzcyA/ICdzZWNvbmRhcnknIDogJ3ByaW1hcnknKTtcbiAgICAgIGNvbnN0IGJhc2VDbGFzc2VzID0gY2FsY3VsYXRlQ2xhc3Nlc0Zyb21CdXR0b25UeXBlKGJ1dHRvblR5cGUpO1xuICAgICAgY29uc3QgY2xhc3NlcyA9IFtcbiAgICAgICAgLi4uYmFzZUNsYXNzZXMsXG4gICAgICAgIC4uLmljb24uaXNTb21lKCkgPyBbJ3RveC1idXR0b24tLWljb24nXSA6IFtdLFxuICAgICAgICAuLi5zcGVjLmJvcmRlcmxlc3MgPyBbJ3RveC1idXR0b24tLW5ha2VkJ10gOiBbXSxcbiAgICAgICAgLi4uZXh0cmFDbGFzc2VzXG4gICAgICBdO1xuICAgICAgY29uc3QgZG9tID0ge1xuICAgICAgICB0YWc6ICdidXR0b24nLFxuICAgICAgICBjbGFzc2VzLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7IHRpdGxlOiB0cmFuc2xhdGVkVGV4dCB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlbmRlckNvbW1vblNwZWMoc3BlYywgYWN0aW9uLCBleHRyYUJlaGF2aW91cnMsIGRvbSwgY29tcG9uZW50cywgcHJvdmlkZXJzQmFja3N0YWdlKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckJ1dHRvbiQxID0gKHNwZWMsIGFjdGlvbiwgcHJvdmlkZXJzQmFja3N0YWdlLCBleHRyYUJlaGF2aW91cnMgPSBbXSwgZXh0cmFDbGFzc2VzID0gW10pID0+IHtcbiAgICAgIGNvbnN0IGJ1dHRvblNwZWMgPSByZW5kZXJCdXR0b25TcGVjKHNwZWMsIE9wdGlvbmFsLnNvbWUoYWN0aW9uKSwgcHJvdmlkZXJzQmFja3N0YWdlLCBleHRyYUJlaGF2aW91cnMsIGV4dHJhQ2xhc3Nlcyk7XG4gICAgICByZXR1cm4gQnV0dG9uLnNrZXRjaChidXR0b25TcGVjKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEFjdGlvbiA9IChuYW1lLCBidXR0b25UeXBlKSA9PiBjb21wID0+IHtcbiAgICAgIGlmIChidXR0b25UeXBlID09PSAnY3VzdG9tJykge1xuICAgICAgICBlbWl0V2l0aChjb21wLCBmb3JtQWN0aW9uRXZlbnQsIHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHZhbHVlOiB7fVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoYnV0dG9uVHlwZSA9PT0gJ3N1Ym1pdCcpIHtcbiAgICAgICAgZW1pdChjb21wLCBmb3JtU3VibWl0RXZlbnQpO1xuICAgICAgfSBlbHNlIGlmIChidXR0b25UeXBlID09PSAnY2FuY2VsJykge1xuICAgICAgICBlbWl0KGNvbXAsIGZvcm1DYW5jZWxFdmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdVbmtub3duIGJ1dHRvbiB0eXBlOiAnLCBidXR0b25UeXBlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlzTWVudUZvb3RlckJ1dHRvblNwZWMgPSAoc3BlYywgYnV0dG9uVHlwZSkgPT4gYnV0dG9uVHlwZSA9PT0gJ21lbnUnO1xuICAgIGNvbnN0IGlzTm9ybWFsRm9vdGVyQnV0dG9uU3BlYyA9IChzcGVjLCBidXR0b25UeXBlKSA9PiBidXR0b25UeXBlID09PSAnY3VzdG9tJyB8fCBidXR0b25UeXBlID09PSAnY2FuY2VsJyB8fCBidXR0b25UeXBlID09PSAnc3VibWl0JztcbiAgICBjb25zdCBpc1RvZ2dsZUJ1dHRvblNwZWMgPSAoc3BlYywgYnV0dG9uVHlwZSkgPT4gYnV0dG9uVHlwZSA9PT0gJ3RvZ2dsZWJ1dHRvbic7XG4gICAgY29uc3QgcmVuZGVyVG9nZ2xlQnV0dG9uID0gKHNwZWMsIHByb3ZpZGVycykgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGNvbnN0IG9wdE1lbUljb24gPSBzcGVjLmljb24ubWFwKG1lbUljb24gPT4gcmVuZGVyUmVwbGFjZWFibGVJY29uRnJvbVBhY2sobWVtSWNvbiwgcHJvdmlkZXJzLmljb25zKSkubWFwKHJlY29yZCk7XG4gICAgICBjb25zdCBhY3Rpb24gPSBjb21wID0+IHtcbiAgICAgICAgZW1pdFdpdGgoY29tcCwgZm9ybUFjdGlvbkV2ZW50LCB7XG4gICAgICAgICAgbmFtZTogc3BlYy5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICBzZXRJY29uOiBuZXdJY29uID0+IHtcbiAgICAgICAgICAgICAgb3B0TWVtSWNvbi5tYXAobWVtSWNvbiA9PiBtZW1JY29uLmdldE9wdChjb21wKS5lYWNoKGRpc3BsYXlJY29uID0+IHtcbiAgICAgICAgICAgICAgICBSZXBsYWNpbmcuc2V0KGRpc3BsYXlJY29uLCBbcmVuZGVyUmVwbGFjZWFibGVJY29uRnJvbVBhY2sobmV3SWNvbiwgcHJvdmlkZXJzLmljb25zKV0pO1xuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBidXR0b25UeXBlID0gc3BlYy5idXR0b25UeXBlLmdldE9yKCFzcGVjLnByaW1hcnkgPyAnc2Vjb25kYXJ5JyA6ICdwcmltYXJ5Jyk7XG4gICAgICBjb25zdCBidXR0b25TcGVjID0ge1xuICAgICAgICAuLi5zcGVjLFxuICAgICAgICBuYW1lOiAoX2EgPSBzcGVjLm5hbWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnLFxuICAgICAgICBwcmltYXJ5OiBidXR0b25UeXBlID09PSAncHJpbWFyeScsXG4gICAgICAgIHRvb2x0aXA6IE9wdGlvbmFsLmZyb20oc3BlYy50b29sdGlwKSxcbiAgICAgICAgZW5hYmxlZDogKF9iID0gc3BlYy5lbmFibGVkKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZSxcbiAgICAgICAgYm9yZGVybGVzczogZmFsc2VcbiAgICAgIH07XG4gICAgICBjb25zdCB0b29sdGlwQXR0cmlidXRlcyA9IGJ1dHRvblNwZWMudG9vbHRpcC5tYXAodG9vbHRpcCA9PiAoe1xuICAgICAgICAnYXJpYS1sYWJlbCc6IHByb3ZpZGVycy50cmFuc2xhdGUodG9vbHRpcCksXG4gICAgICAgICd0aXRsZSc6IHByb3ZpZGVycy50cmFuc2xhdGUodG9vbHRpcClcbiAgICAgIH0pKS5nZXRPcih7fSk7XG4gICAgICBjb25zdCBidXR0b25UeXBlQ2xhc3NlcyA9IGNhbGN1bGF0ZUNsYXNzZXNGcm9tQnV0dG9uVHlwZShidXR0b25UeXBlICE9PSBudWxsICYmIGJ1dHRvblR5cGUgIT09IHZvaWQgMCA/IGJ1dHRvblR5cGUgOiAnc2Vjb25kYXJ5Jyk7XG4gICAgICBjb25zdCBzaG93SWNvbkFuZFRleHQgPSBzcGVjLmljb24uaXNTb21lKCkgJiYgc3BlYy50ZXh0LmlzU29tZSgpO1xuICAgICAgY29uc3QgZG9tID0ge1xuICAgICAgICB0YWc6ICdidXR0b24nLFxuICAgICAgICBjbGFzc2VzOiBbXG4gICAgICAgICAgLi4uYnV0dG9uVHlwZUNsYXNzZXMuY29uY2F0KHNwZWMuaWNvbi5pc1NvbWUoKSA/IFsndG94LWJ1dHRvbi0taWNvbiddIDogW10pLFxuICAgICAgICAgIC4uLnNwZWMuYWN0aXZlID8gWyd0b3gtYnV0dG9uLS1lbmFibGVkJ10gOiBbXSxcbiAgICAgICAgICAuLi5zaG93SWNvbkFuZFRleHQgPyBbJ3RveC1idXR0b24tLWljb24tYW5kLXRleHQnXSA6IFtdXG4gICAgICAgIF0sXG4gICAgICAgIGF0dHJpYnV0ZXM6IHRvb2x0aXBBdHRyaWJ1dGVzXG4gICAgICB9O1xuICAgICAgY29uc3QgZXh0cmFCZWhhdmlvdXJzID0gW107XG4gICAgICBjb25zdCB0cmFuc2xhdGVkVGV4dCA9IHByb3ZpZGVycy50cmFuc2xhdGUoc3BlYy50ZXh0LmdldE9yKCcnKSk7XG4gICAgICBjb25zdCB0cmFuc2xhdGVkVGV4dENvbXBvbmVkID0gdGV4dCQyKHRyYW5zbGF0ZWRUZXh0KTtcbiAgICAgIGNvbnN0IGljb25Db21wID0gY29tcG9uZW50UmVuZGVyUGlwZWxpbmUoW29wdE1lbUljb24ubWFwKG1lbUljb24gPT4gbWVtSWNvbi5hc1NwZWMoKSldKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBbXG4gICAgICAgIC4uLmljb25Db21wLFxuICAgICAgICAuLi5zcGVjLnRleHQuaXNTb21lKCkgPyBbdHJhbnNsYXRlZFRleHRDb21wb25lZF0gOiBbXVxuICAgICAgXTtcbiAgICAgIGNvbnN0IGljb25CdXR0b25TcGVjID0gcmVuZGVyQ29tbW9uU3BlYyhidXR0b25TcGVjLCBPcHRpb25hbC5zb21lKGFjdGlvbiksIGV4dHJhQmVoYXZpb3VycywgZG9tLCBjb21wb25lbnRzLCBwcm92aWRlcnMpO1xuICAgICAgcmV0dXJuIEJ1dHRvbi5za2V0Y2goaWNvbkJ1dHRvblNwZWMpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyRm9vdGVyQnV0dG9uID0gKHNwZWMsIGJ1dHRvblR5cGUsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgaWYgKGlzTWVudUZvb3RlckJ1dHRvblNwZWMoc3BlYywgYnV0dG9uVHlwZSkpIHtcbiAgICAgICAgY29uc3QgZ2V0QnV0dG9uID0gKCkgPT4gbWVtQnV0dG9uO1xuICAgICAgICBjb25zdCBtZW51QnV0dG9uU3BlYyA9IHNwZWM7XG4gICAgICAgIGNvbnN0IGZpeGVkU3BlYyA9IHtcbiAgICAgICAgICAuLi5zcGVjLFxuICAgICAgICAgIHR5cGU6ICdtZW51YnV0dG9uJyxcbiAgICAgICAgICBzZWFyY2g6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICAgICBvblNldHVwOiBhcGkgPT4ge1xuICAgICAgICAgICAgYXBpLnNldEVuYWJsZWQoc3BlYy5lbmFibGVkKTtcbiAgICAgICAgICAgIHJldHVybiBub29wO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZmV0Y2g6IGdldEZldGNoKG1lbnVCdXR0b25TcGVjLml0ZW1zLCBnZXRCdXR0b24sIGJhY2tzdGFnZSlcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbWVtQnV0dG9uID0gcmVjb3JkKHJlbmRlck1lbnVCdXR0b24oZml4ZWRTcGVjLCAndG94LXRidG4nLCBiYWNrc3RhZ2UsIE9wdGlvbmFsLm5vbmUoKSkpO1xuICAgICAgICByZXR1cm4gbWVtQnV0dG9uLmFzU3BlYygpO1xuICAgICAgfSBlbHNlIGlmIChpc05vcm1hbEZvb3RlckJ1dHRvblNwZWMoc3BlYywgYnV0dG9uVHlwZSkpIHtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gZ2V0QWN0aW9uKHNwZWMubmFtZSwgYnV0dG9uVHlwZSk7XG4gICAgICAgIGNvbnN0IGJ1dHRvblNwZWMgPSB7XG4gICAgICAgICAgLi4uc3BlYyxcbiAgICAgICAgICBib3JkZXJsZXNzOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVuZGVyQnV0dG9uJDEoYnV0dG9uU3BlYywgYWN0aW9uLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycywgW10pO1xuICAgICAgfSBlbHNlIGlmIChpc1RvZ2dsZUJ1dHRvblNwZWMoc3BlYywgYnV0dG9uVHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlclRvZ2dsZUJ1dHRvbihzcGVjLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdVbmtub3duIGZvb3RlciBidXR0b24gdHlwZTogJywgYnV0dG9uVHlwZSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBmb290ZXIgYnV0dG9uIHR5cGUnKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckRpYWxvZ0J1dHRvbiA9IChzcGVjLCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IGFjdGlvbiA9IGdldEFjdGlvbihzcGVjLm5hbWUsICdjdXN0b20nKTtcbiAgICAgIHJldHVybiByZW5kZXJGb3JtRmllbGQoT3B0aW9uYWwubm9uZSgpLCBGb3JtRmllbGQucGFydHMuZmllbGQoe1xuICAgICAgICBmYWN0b3J5OiBCdXR0b24sXG4gICAgICAgIC4uLnJlbmRlckJ1dHRvblNwZWMoc3BlYywgT3B0aW9uYWwuc29tZShhY3Rpb24pLCBwcm92aWRlcnNCYWNrc3RhZ2UsIFtcbiAgICAgICAgICBtZW1vcnkoJycpLFxuICAgICAgICAgIENvbXBvc2luZ0NvbmZpZ3Muc2VsZigpXG4gICAgICAgIF0pXG4gICAgICB9KSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNlcGFyYXRvciQxID0geyB0eXBlOiAnc2VwYXJhdG9yJyB9O1xuICAgIGNvbnN0IHRvTWVudUl0ZW0gPSB0YXJnZXQgPT4gKHtcbiAgICAgIHR5cGU6ICdtZW51aXRlbScsXG4gICAgICB2YWx1ZTogdGFyZ2V0LnVybCxcbiAgICAgIHRleHQ6IHRhcmdldC50aXRsZSxcbiAgICAgIG1ldGE6IHsgYXR0YWNoOiB0YXJnZXQuYXR0YWNoIH0sXG4gICAgICBvbkFjdGlvbjogbm9vcFxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXRpY01lbnVJdGVtID0gKHRpdGxlLCB1cmwpID0+ICh7XG4gICAgICB0eXBlOiAnbWVudWl0ZW0nLFxuICAgICAgdmFsdWU6IHVybCxcbiAgICAgIHRleHQ6IHRpdGxlLFxuICAgICAgbWV0YTogeyBhdHRhY2g6IHVuZGVmaW5lZCB9LFxuICAgICAgb25BY3Rpb246IG5vb3BcbiAgICB9KTtcbiAgICBjb25zdCB0b01lbnVJdGVtcyA9IHRhcmdldHMgPT4gbWFwJDIodGFyZ2V0cywgdG9NZW51SXRlbSk7XG4gICAgY29uc3QgZmlsdGVyTGlua1RhcmdldHMgPSAodHlwZSwgdGFyZ2V0cykgPT4gZmlsdGVyJDIodGFyZ2V0cywgdGFyZ2V0ID0+IHRhcmdldC50eXBlID09PSB0eXBlKTtcbiAgICBjb25zdCBmaWx0ZXJlZFRhcmdldHMgPSAodHlwZSwgdGFyZ2V0cykgPT4gdG9NZW51SXRlbXMoZmlsdGVyTGlua1RhcmdldHModHlwZSwgdGFyZ2V0cykpO1xuICAgIGNvbnN0IGhlYWRlclRhcmdldHMgPSBsaW5rSW5mbyA9PiBmaWx0ZXJlZFRhcmdldHMoJ2hlYWRlcicsIGxpbmtJbmZvLnRhcmdldHMpO1xuICAgIGNvbnN0IGFuY2hvclRhcmdldHMgPSBsaW5rSW5mbyA9PiBmaWx0ZXJlZFRhcmdldHMoJ2FuY2hvcicsIGxpbmtJbmZvLnRhcmdldHMpO1xuICAgIGNvbnN0IGFuY2hvclRhcmdldFRvcCA9IGxpbmtJbmZvID0+IE9wdGlvbmFsLmZyb20obGlua0luZm8uYW5jaG9yVG9wKS5tYXAodXJsID0+IHN0YXRpY01lbnVJdGVtKCc8dG9wPicsIHVybCkpLnRvQXJyYXkoKTtcbiAgICBjb25zdCBhbmNob3JUYXJnZXRCb3R0b20gPSBsaW5rSW5mbyA9PiBPcHRpb25hbC5mcm9tKGxpbmtJbmZvLmFuY2hvckJvdHRvbSkubWFwKHVybCA9PiBzdGF0aWNNZW51SXRlbSgnPGJvdHRvbT4nLCB1cmwpKS50b0FycmF5KCk7XG4gICAgY29uc3QgaGlzdG9yeVRhcmdldHMgPSBoaXN0b3J5ID0+IG1hcCQyKGhpc3RvcnksIHVybCA9PiBzdGF0aWNNZW51SXRlbSh1cmwsIHVybCkpO1xuICAgIGNvbnN0IGpvaW5NZW51TGlzdHMgPSBpdGVtcyA9PiB7XG4gICAgICByZXR1cm4gZm9sZGwoaXRlbXMsIChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGJvdGhFbXB0eSA9IGEubGVuZ3RoID09PSAwIHx8IGIubGVuZ3RoID09PSAwO1xuICAgICAgICByZXR1cm4gYm90aEVtcHR5ID8gYS5jb25jYXQoYikgOiBhLmNvbmNhdChzZXBhcmF0b3IkMSwgYik7XG4gICAgICB9LCBbXSk7XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXJCeVF1ZXJ5ID0gKHRlcm0sIG1lbnVJdGVtcykgPT4ge1xuICAgICAgY29uc3QgbG93ZXJDYXNlVGVybSA9IHRlcm0udG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBmaWx0ZXIkMihtZW51SXRlbXMsIGl0ZW0gPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHRleHQgPSBpdGVtLm1ldGEgIT09IHVuZGVmaW5lZCAmJiBpdGVtLm1ldGEudGV4dCAhPT0gdW5kZWZpbmVkID8gaXRlbS5tZXRhLnRleHQgOiBpdGVtLnRleHQ7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gKF9hID0gaXRlbS52YWx1ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgICAgIHJldHVybiBjb250YWlucyQxKHRleHQudG9Mb3dlckNhc2UoKSwgbG93ZXJDYXNlVGVybSkgfHwgY29udGFpbnMkMSh2YWx1ZS50b0xvd2VyQ2FzZSgpLCBsb3dlckNhc2VUZXJtKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRJdGVtcyA9IChmaWxlVHlwZSwgaW5wdXQsIHVybEJhY2tzdGFnZSkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGNvbnN0IHVybElucHV0VmFsdWUgPSBSZXByZXNlbnRpbmcuZ2V0VmFsdWUoaW5wdXQpO1xuICAgICAgY29uc3QgdGVybSA9IChfYiA9IChfYSA9IHVybElucHV0VmFsdWUgPT09IG51bGwgfHwgdXJsSW5wdXRWYWx1ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdXJsSW5wdXRWYWx1ZS5tZXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGV4dCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogdXJsSW5wdXRWYWx1ZS52YWx1ZTtcbiAgICAgIGNvbnN0IGluZm8gPSB1cmxCYWNrc3RhZ2UuZ2V0TGlua0luZm9ybWF0aW9uKCk7XG4gICAgICByZXR1cm4gaW5mby5mb2xkKCgpID0+IFtdLCBsaW5rSW5mbyA9PiB7XG4gICAgICAgIGNvbnN0IGhpc3RvcnkgPSBmaWx0ZXJCeVF1ZXJ5KHRlcm0sIGhpc3RvcnlUYXJnZXRzKHVybEJhY2tzdGFnZS5nZXRIaXN0b3J5KGZpbGVUeXBlKSkpO1xuICAgICAgICByZXR1cm4gZmlsZVR5cGUgPT09ICdmaWxlJyA/IGpvaW5NZW51TGlzdHMoW1xuICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgZmlsdGVyQnlRdWVyeSh0ZXJtLCBoZWFkZXJUYXJnZXRzKGxpbmtJbmZvKSksXG4gICAgICAgICAgZmlsdGVyQnlRdWVyeSh0ZXJtLCBmbGF0dGVuKFtcbiAgICAgICAgICAgIGFuY2hvclRhcmdldFRvcChsaW5rSW5mbyksXG4gICAgICAgICAgICBhbmNob3JUYXJnZXRzKGxpbmtJbmZvKSxcbiAgICAgICAgICAgIGFuY2hvclRhcmdldEJvdHRvbShsaW5rSW5mbylcbiAgICAgICAgICBdKSlcbiAgICAgICAgXSkgOiBoaXN0b3J5O1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBlcnJvcklkID0gZ2VuZXJhdGUkNignYXJpYS1pbnZhbGlkJyk7XG4gICAgY29uc3QgcmVuZGVyVXJsSW5wdXQgPSAoc3BlYywgYmFja3N0YWdlLCB1cmxCYWNrc3RhZ2UsIGluaXRpYWxEYXRhKSA9PiB7XG4gICAgICBjb25zdCBwcm92aWRlcnNCYWNrc3RhZ2UgPSBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycztcbiAgICAgIGNvbnN0IHVwZGF0ZUhpc3RvcnkgPSBjb21wb25lbnQgPT4ge1xuICAgICAgICBjb25zdCB1cmxFbnRyeSA9IFJlcHJlc2VudGluZy5nZXRWYWx1ZShjb21wb25lbnQpO1xuICAgICAgICB1cmxCYWNrc3RhZ2UuYWRkVG9IaXN0b3J5KHVybEVudHJ5LnZhbHVlLCBzcGVjLmZpbGV0eXBlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCB0eXBlYWhlYWRTcGVjID0ge1xuICAgICAgICAuLi5pbml0aWFsRGF0YS5tYXAoaW5pdGlhbERhdGEgPT4gKHsgaW5pdGlhbERhdGEgfSkpLmdldE9yKHt9KSxcbiAgICAgICAgZGlzbWlzc09uQmx1cjogdHJ1ZSxcbiAgICAgICAgaW5wdXRDbGFzc2VzOiBbJ3RveC10ZXh0ZmllbGQnXSxcbiAgICAgICAgc2FuZGJveENsYXNzZXM6IFsndG94LWRpYWxvZ19fcG9wdXBzJ10sXG4gICAgICAgIGlucHV0QXR0cmlidXRlczoge1xuICAgICAgICAgICdhcmlhLWVycm9ybWVzc2FnZSc6IGVycm9ySWQsXG4gICAgICAgICAgJ3R5cGUnOiAndXJsJ1xuICAgICAgICB9LFxuICAgICAgICBtaW5DaGFyczogMCxcbiAgICAgICAgcmVzcG9uc2VUaW1lOiAwLFxuICAgICAgICBmZXRjaDogaW5wdXQgPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW1zID0gZ2V0SXRlbXMoc3BlYy5maWxldHlwZSwgaW5wdXQsIHVybEJhY2tzdGFnZSk7XG4gICAgICAgICAgY29uc3QgdGRhdGEgPSBidWlsZChpdGVtcywgSXRlbVJlc3BvbnNlJDEuQlVCQkxFX1RPX1NBTkRCT1gsIGJhY2tzdGFnZSwge1xuICAgICAgICAgICAgaXNIb3Jpem9udGFsTWVudTogZmFsc2UsXG4gICAgICAgICAgICBzZWFyY2g6IE9wdGlvbmFsLm5vbmUoKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBGdXR1cmUucHVyZSh0ZGF0YSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldEhvdHNwb3Q6IGNvbXAgPT4gbWVtVXJsQm94LmdldE9wdChjb21wKSxcbiAgICAgICAgb25TZXRWYWx1ZTogKGNvbXAsIF9uZXdWYWx1ZSkgPT4ge1xuICAgICAgICAgIGlmIChjb21wLmhhc0NvbmZpZ3VyZWQoSW52YWxpZGF0aW5nKSkge1xuICAgICAgICAgICAgSW52YWxpZGF0aW5nLnJ1bihjb21wKS5nZXQobm9vcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB0eXBlYWhlYWRCZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgLi4udXJsQmFja3N0YWdlLmdldFZhbGlkYXRpb25IYW5kbGVyKCkubWFwKGhhbmRsZXIgPT4gSW52YWxpZGF0aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBnZXRSb290OiBjb21wID0+IHBhcmVudEVsZW1lbnQoY29tcC5lbGVtZW50KSxcbiAgICAgICAgICAgIGludmFsaWRDbGFzczogJ3RveC1jb250cm9sLXdyYXAtLXN0YXR1cy1pbnZhbGlkJyxcbiAgICAgICAgICAgIG5vdGlmeToge1xuICAgICAgICAgICAgICBvbkludmFsaWQ6IChjb21wLCBlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBtZW1JbnZhbGlkSWNvbi5nZXRPcHQoY29tcCkuZWFjaChpbnZhbGlkQ29tcCA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXQkOShpbnZhbGlkQ29tcC5lbGVtZW50LCAndGl0bGUnLCBwcm92aWRlcnNCYWNrc3RhZ2UudHJhbnNsYXRlKGVycikpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmFsaWRhdG9yOiB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlOiBpbnB1dCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsRW50cnkgPSBSZXByZXNlbnRpbmcuZ2V0VmFsdWUoaW5wdXQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBGdXR1cmVSZXN1bHQubnUoY29tcGxldGVyID0+IHtcbiAgICAgICAgICAgICAgICAgIGhhbmRsZXIoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBzcGVjLmZpbGV0eXBlLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHVybEVudHJ5LnZhbHVlXG4gICAgICAgICAgICAgICAgICB9LCB2YWxpZGF0aW9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb24uc3RhdHVzID09PSAnaW52YWxpZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBSZXN1bHQuZXJyb3IodmFsaWRhdGlvbi5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZXIoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSBSZXN1bHQudmFsdWUodmFsaWRhdGlvbi5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZXIodmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRlT25Mb2FkOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKS50b0FycmF5KCksXG4gICAgICAgICAgRGlzYWJsaW5nLmNvbmZpZyh7IGRpc2FibGVkOiAoKSA9PiAhc3BlYy5lbmFibGVkIHx8IHByb3ZpZGVyc0JhY2tzdGFnZS5pc0Rpc2FibGVkKCkgfSksXG4gICAgICAgICAgVGFic3RvcHBpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICBjb25maWcoJ3VybGlucHV0LWV2ZW50cycsIFtcbiAgICAgICAgICAgIHJ1biQxKGlucHV0KCksIGNvbXAgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBnZXQkNihjb21wLmVsZW1lbnQpO1xuICAgICAgICAgICAgICBjb25zdCB0cmltbWVkVmFsdWUgPSBjdXJyZW50VmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgICBpZiAodHJpbW1lZFZhbHVlICE9PSBjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzZXQkNShjb21wLmVsZW1lbnQsIHRyaW1tZWRWYWx1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHNwZWMuZmlsZXR5cGUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgIGVtaXRXaXRoKGNvbXAsIGZvcm1DaGFuZ2VFdmVudCwgeyBuYW1lOiBzcGVjLm5hbWUgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcnVuJDEoY2hhbmdlKCksIGNvbXAgPT4ge1xuICAgICAgICAgICAgICBlbWl0V2l0aChjb21wLCBmb3JtQ2hhbmdlRXZlbnQsIHsgbmFtZTogc3BlYy5uYW1lIH0pO1xuICAgICAgICAgICAgICB1cGRhdGVIaXN0b3J5KGNvbXApO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBydW4kMShwb3N0UGFzdGUoKSwgY29tcCA9PiB7XG4gICAgICAgICAgICAgIGVtaXRXaXRoKGNvbXAsIGZvcm1DaGFuZ2VFdmVudCwgeyBuYW1lOiBzcGVjLm5hbWUgfSk7XG4gICAgICAgICAgICAgIHVwZGF0ZUhpc3RvcnkoY29tcCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0pXG4gICAgICAgIF0pLFxuICAgICAgICBldmVudE9yZGVyOiB7XG4gICAgICAgICAgW2lucHV0KCldOiBbXG4gICAgICAgICAgICAnc3RyZWFtaW5nJyxcbiAgICAgICAgICAgICd1cmxpbnB1dC1ldmVudHMnLFxuICAgICAgICAgICAgJ2ludmFsaWRhdGluZydcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgZ2V0RGlzcGxheVRleHQ6IGl0ZW1EYXRhID0+IGl0ZW1EYXRhLnZhbHVlLFxuICAgICAgICAgIHNlbGVjdHNPdmVyOiBmYWxzZSxcbiAgICAgICAgICBwb3B1bGF0ZUZyb21Ccm93c2U6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIG1hcmtlcnM6IHsgb3BlbkNsYXNzOiAndG94LXRleHRmaWVsZC0tcG9wdXAtb3BlbicgfSxcbiAgICAgICAgbGF6eVNpbms6IGJhY2tzdGFnZS5zaGFyZWQuZ2V0U2luayxcbiAgICAgICAgcGFydHM6IHsgbWVudTogcGFydChmYWxzZSwgMSwgJ25vcm1hbCcpIH0sXG4gICAgICAgIG9uRXhlY3V0ZTogKF9tZW51LCBjb21wb25lbnQsIF9lbnRyeSkgPT4ge1xuICAgICAgICAgIGVtaXRXaXRoKGNvbXBvbmVudCwgZm9ybVN1Ym1pdEV2ZW50LCB7fSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uSXRlbUV4ZWN1dGU6ICh0eXBlYWhlYWQsIF9zYW5kYm94LCBfaXRlbSwgX3ZhbHVlKSA9PiB7XG4gICAgICAgICAgdXBkYXRlSGlzdG9yeSh0eXBlYWhlYWQpO1xuICAgICAgICAgIGVtaXRXaXRoKHR5cGVhaGVhZCwgZm9ybUNoYW5nZUV2ZW50LCB7IG5hbWU6IHNwZWMubmFtZSB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBGaWVsZCA9IEZvcm1GaWVsZC5wYXJ0cy5maWVsZCh7XG4gICAgICAgIC4uLnR5cGVhaGVhZFNwZWMsXG4gICAgICAgIGZhY3Rvcnk6IFR5cGVhaGVhZFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwTGFiZWwgPSBzcGVjLmxhYmVsLm1hcChsYWJlbCA9PiByZW5kZXJMYWJlbCQzKGxhYmVsLCBwcm92aWRlcnNCYWNrc3RhZ2UpKTtcbiAgICAgIGNvbnN0IG1ha2VJY29uID0gKG5hbWUsIGVycklkLCBpY29uID0gbmFtZSwgbGFiZWwgPSBuYW1lKSA9PiByZW5kZXIkMyhpY29uLCB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAndG94LWljb24nLFxuICAgICAgICAgICd0b3gtY29udHJvbC13cmFwX19zdGF0dXMtaWNvbi0nICsgbmFtZVxuICAgICAgICBdLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgJ3RpdGxlJzogcHJvdmlkZXJzQmFja3N0YWdlLnRyYW5zbGF0ZShsYWJlbCksXG4gICAgICAgICAgJ2FyaWEtbGl2ZSc6ICdwb2xpdGUnLFxuICAgICAgICAgIC4uLmVycklkLmZvbGQoKCkgPT4gKHt9KSwgaWQgPT4gKHsgaWQgfSkpXG4gICAgICAgIH1cbiAgICAgIH0sIHByb3ZpZGVyc0JhY2tzdGFnZS5pY29ucyk7XG4gICAgICBjb25zdCBtZW1JbnZhbGlkSWNvbiA9IHJlY29yZChtYWtlSWNvbignaW52YWxpZCcsIE9wdGlvbmFsLnNvbWUoZXJyb3JJZCksICd3YXJuaW5nJykpO1xuICAgICAgY29uc3QgbWVtU3RhdHVzID0gcmVjb3JkKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1jb250cm9sLXdyYXBfX3N0YXR1cy1pY29uLXdyYXAnXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbbWVtSW52YWxpZEljb24uYXNTcGVjKCldXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG9wdFVybFBpY2tlciA9IHVybEJhY2tzdGFnZS5nZXRVcmxQaWNrZXIoc3BlYy5maWxldHlwZSk7XG4gICAgICBjb25zdCBicm93c2VVcmxFdmVudCA9IGdlbmVyYXRlJDYoJ2Jyb3dzZXIudXJsLmV2ZW50Jyk7XG4gICAgICBjb25zdCBtZW1VcmxCb3ggPSByZWNvcmQoe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LWNvbnRyb2wtd3JhcCddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICBwRmllbGQsXG4gICAgICAgICAgbWVtU3RhdHVzLmFzU3BlYygpXG4gICAgICAgIF0sXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtEaXNhYmxpbmcuY29uZmlnKHsgZGlzYWJsZWQ6ICgpID0+ICFzcGVjLmVuYWJsZWQgfHwgcHJvdmlkZXJzQmFja3N0YWdlLmlzRGlzYWJsZWQoKSB9KV0pXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG1lbVVybFBpY2tlckJ1dHRvbiA9IHJlY29yZChyZW5kZXJCdXR0b24kMSh7XG4gICAgICAgIG5hbWU6IHNwZWMubmFtZSxcbiAgICAgICAgaWNvbjogT3B0aW9uYWwuc29tZSgnYnJvd3NlJyksXG4gICAgICAgIHRleHQ6IHNwZWMubGFiZWwuZ2V0T3IoJycpLFxuICAgICAgICBlbmFibGVkOiBzcGVjLmVuYWJsZWQsXG4gICAgICAgIHByaW1hcnk6IGZhbHNlLFxuICAgICAgICBidXR0b25UeXBlOiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGJvcmRlcmxlc3M6IHRydWVcbiAgICAgIH0sIGNvbXBvbmVudCA9PiBlbWl0KGNvbXBvbmVudCwgYnJvd3NlVXJsRXZlbnQpLCBwcm92aWRlcnNCYWNrc3RhZ2UsIFtdLCBbJ3RveC1icm93c2UtdXJsJ10pKTtcbiAgICAgIGNvbnN0IGNvbnRyb2xIV3JhcHBlciA9ICgpID0+ICh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtZm9ybV9fY29udHJvbHMtaC1zdGFjayddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IGZsYXR0ZW4oW1xuICAgICAgICAgIFttZW1VcmxCb3guYXNTcGVjKCldLFxuICAgICAgICAgIG9wdFVybFBpY2tlci5tYXAoKCkgPT4gbWVtVXJsUGlja2VyQnV0dG9uLmFzU3BlYygpKS50b0FycmF5KClcbiAgICAgICAgXSlcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgb3BlblVybFBpY2tlciA9IGNvbXAgPT4ge1xuICAgICAgICBDb21wb3NpbmcuZ2V0Q3VycmVudChjb21wKS5lYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnREYXRhID0gUmVwcmVzZW50aW5nLmdldFZhbHVlKGZpZWxkKTtcbiAgICAgICAgICBjb25zdCB1cmxEYXRhID0ge1xuICAgICAgICAgICAgZmllbGRuYW1lOiBzcGVjLm5hbWUsXG4gICAgICAgICAgICAuLi5jb21wb25lbnREYXRhXG4gICAgICAgICAgfTtcbiAgICAgICAgICBvcHRVcmxQaWNrZXIuZWFjaChwaWNrZXIgPT4ge1xuICAgICAgICAgICAgcGlja2VyKHVybERhdGEpLmdldChjaG9zZW5EYXRhID0+IHtcbiAgICAgICAgICAgICAgUmVwcmVzZW50aW5nLnNldFZhbHVlKGZpZWxkLCBjaG9zZW5EYXRhKTtcbiAgICAgICAgICAgICAgZW1pdFdpdGgoY29tcCwgZm9ybUNoYW5nZUV2ZW50LCB7IG5hbWU6IHNwZWMubmFtZSB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gRm9ybUZpZWxkLnNrZXRjaCh7XG4gICAgICAgIGRvbTogcmVuZGVyRm9ybUZpZWxkRG9tKCksXG4gICAgICAgIGNvbXBvbmVudHM6IHBMYWJlbC50b0FycmF5KCkuY29uY2F0KFtjb250cm9sSFdyYXBwZXIoKV0pLFxuICAgICAgICBmaWVsZEJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBEaXNhYmxpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIGRpc2FibGVkOiAoKSA9PiAhc3BlYy5lbmFibGVkIHx8IHByb3ZpZGVyc0JhY2tzdGFnZS5pc0Rpc2FibGVkKCksXG4gICAgICAgICAgICBvbkRpc2FibGVkOiBjb21wID0+IHtcbiAgICAgICAgICAgICAgRm9ybUZpZWxkLmdldEZpZWxkKGNvbXApLmVhY2goRGlzYWJsaW5nLmRpc2FibGUpO1xuICAgICAgICAgICAgICBtZW1VcmxQaWNrZXJCdXR0b24uZ2V0T3B0KGNvbXApLmVhY2goRGlzYWJsaW5nLmRpc2FibGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRW5hYmxlZDogY29tcCA9PiB7XG4gICAgICAgICAgICAgIEZvcm1GaWVsZC5nZXRGaWVsZChjb21wKS5lYWNoKERpc2FibGluZy5lbmFibGUpO1xuICAgICAgICAgICAgICBtZW1VcmxQaWNrZXJCdXR0b24uZ2V0T3B0KGNvbXApLmVhY2goRGlzYWJsaW5nLmVuYWJsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcmVjZWl2aW5nQ29uZmlnKCksXG4gICAgICAgICAgY29uZmlnKCd1cmwtaW5wdXQtZXZlbnRzJywgW3J1biQxKGJyb3dzZVVybEV2ZW50LCBvcGVuVXJsUGlja2VyKV0pXG4gICAgICAgIF0pXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVyQWxlcnRCYW5uZXIgPSAoc3BlYywgcHJvdmlkZXJzQmFja3N0YWdlKSA9PiB7XG4gICAgICBjb25zdCBpY29uID0gZ2V0JDIoc3BlYy5pY29uLCBwcm92aWRlcnNCYWNrc3RhZ2UuaWNvbnMpO1xuICAgICAgcmV0dXJuIENvbnRhaW5lci5za2V0Y2goe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ2FsZXJ0JyB9LFxuICAgICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAgICd0b3gtbm90aWZpY2F0aW9uJyxcbiAgICAgICAgICAgICd0b3gtbm90aWZpY2F0aW9uLS1pbicsXG4gICAgICAgICAgICBgdG94LW5vdGlmaWNhdGlvbi0tJHsgc3BlYy5sZXZlbCB9YFxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1ub3RpZmljYXRpb25fX2ljb24nXSxcbiAgICAgICAgICAgICAgaW5uZXJIdG1sOiAhc3BlYy51cmwgPyBpY29uIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcG9uZW50czogc3BlYy51cmwgPyBbQnV0dG9uLnNrZXRjaCh7XG4gICAgICAgICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICAgICAgICB0YWc6ICdidXR0b24nLFxuICAgICAgICAgICAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICAgICAgICAgICAndG94LWJ1dHRvbicsXG4gICAgICAgICAgICAgICAgICAgICd0b3gtYnV0dG9uLS1uYWtlZCcsXG4gICAgICAgICAgICAgICAgICAgICd0b3gtYnV0dG9uLS1pY29uJ1xuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIGlubmVySHRtbDogaWNvbixcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgdGl0bGU6IHByb3ZpZGVyc0JhY2tzdGFnZS50cmFuc2xhdGUoc3BlYy5pY29uVG9vbHRpcCkgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYWN0aW9uOiBjb21wID0+IGVtaXRXaXRoKGNvbXAsIGZvcm1BY3Rpb25FdmVudCwge1xuICAgICAgICAgICAgICAgICAgbmFtZTogJ2FsZXJ0LWJhbm5lcicsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogc3BlYy51cmxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBidXR0b25CZWhhdmlvdXJzOiBkZXJpdmUkMShbYWRkRm9jdXNhYmxlQmVoYXZpb3VyKCldKVxuICAgICAgICAgICAgICB9KV0gOiB1bmRlZmluZWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1ub3RpZmljYXRpb25fX2JvZHknXSxcbiAgICAgICAgICAgICAgaW5uZXJIdG1sOiBwcm92aWRlcnNCYWNrc3RhZ2UudHJhbnNsYXRlKHNwZWMudGV4dClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBzZXQkMSA9IChlbGVtZW50LCBzdGF0dXMpID0+IHtcbiAgICAgIGVsZW1lbnQuZG9tLmNoZWNrZWQgPSBzdGF0dXM7XG4gICAgfTtcbiAgICBjb25zdCBnZXQkMSA9IGVsZW1lbnQgPT4gZWxlbWVudC5kb20uY2hlY2tlZDtcblxuICAgIGNvbnN0IHJlbmRlckNoZWNrYm94ID0gKHNwZWMsIHByb3ZpZGVyQmFja3N0YWdlLCBpbml0aWFsRGF0YSkgPT4ge1xuICAgICAgY29uc3QgdG9nZ2xlQ2hlY2tib3hIYW5kbGVyID0gY29tcCA9PiB7XG4gICAgICAgIGNvbXAuZWxlbWVudC5kb20uY2xpY2soKTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcEZpZWxkID0gRm9ybUZpZWxkLnBhcnRzLmZpZWxkKHtcbiAgICAgICAgZmFjdG9yeTogeyBza2V0Y2g6IGlkZW50aXR5IH0sXG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2lucHV0JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1jaGVja2JveF9faW5wdXQnXSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7IHR5cGU6ICdjaGVja2JveCcgfVxuICAgICAgICB9LFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgQ29tcG9zaW5nQ29uZmlncy5zZWxmKCksXG4gICAgICAgICAgRGlzYWJsaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBkaXNhYmxlZDogKCkgPT4gIXNwZWMuZW5hYmxlZCB8fCBwcm92aWRlckJhY2tzdGFnZS5pc0Rpc2FibGVkKCksXG4gICAgICAgICAgICBvbkRpc2FibGVkOiBjb21wb25lbnQgPT4ge1xuICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50KGNvbXBvbmVudC5lbGVtZW50KS5lYWNoKGVsZW1lbnQgPT4gYWRkJDIoZWxlbWVudCwgJ3RveC1jaGVja2JveC0tZGlzYWJsZWQnKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25FbmFibGVkOiBjb21wb25lbnQgPT4ge1xuICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50KGNvbXBvbmVudC5lbGVtZW50KS5lYWNoKGVsZW1lbnQgPT4gcmVtb3ZlJDIoZWxlbWVudCwgJ3RveC1jaGVja2JveC0tZGlzYWJsZWQnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgVGFic3RvcHBpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICBGb2N1c2luZy5jb25maWcoe30pLFxuICAgICAgICAgIHdpdGhFbGVtZW50KGluaXRpYWxEYXRhLCBnZXQkMSwgc2V0JDEpLFxuICAgICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgICAgbW9kZTogJ3NwZWNpYWwnLFxuICAgICAgICAgICAgb25FbnRlcjogdG9nZ2xlQ2hlY2tib3hIYW5kbGVyLFxuICAgICAgICAgICAgb25TcGFjZTogdG9nZ2xlQ2hlY2tib3hIYW5kbGVyLFxuICAgICAgICAgICAgc3RvcFNwYWNlS2V5dXA6IHRydWVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjb25maWcoJ2NoZWNrYm94LWV2ZW50cycsIFtydW4kMShjaGFuZ2UoKSwgKGNvbXBvbmVudCwgXykgPT4ge1xuICAgICAgICAgICAgICBlbWl0V2l0aChjb21wb25lbnQsIGZvcm1DaGFuZ2VFdmVudCwgeyBuYW1lOiBzcGVjLm5hbWUgfSk7XG4gICAgICAgICAgICB9KV0pXG4gICAgICAgIF0pXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBMYWJlbCA9IEZvcm1GaWVsZC5wYXJ0cy5sYWJlbCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ3NwYW4nLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LWNoZWNrYm94X19sYWJlbCddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFt0ZXh0JDIocHJvdmlkZXJCYWNrc3RhZ2UudHJhbnNsYXRlKHNwZWMubGFiZWwpKV0sXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtVbnNlbGVjdGluZy5jb25maWcoe30pXSlcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbWFrZUljb24gPSBjbGFzc05hbWUgPT4ge1xuICAgICAgICBjb25zdCBpY29uTmFtZSA9IGNsYXNzTmFtZSA9PT0gJ2NoZWNrZWQnID8gJ3NlbGVjdGVkJyA6ICd1bnNlbGVjdGVkJztcbiAgICAgICAgcmV0dXJuIHJlbmRlciQzKGljb25OYW1lLCB7XG4gICAgICAgICAgdGFnOiAnc3BhbicsXG4gICAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICAgJ3RveC1pY29uJyxcbiAgICAgICAgICAgICd0b3gtY2hlY2tib3gtaWNvbl9fJyArIGNsYXNzTmFtZVxuICAgICAgICAgIF1cbiAgICAgICAgfSwgcHJvdmlkZXJCYWNrc3RhZ2UuaWNvbnMpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG1lbUljb25zID0gcmVjb3JkKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1jaGVja2JveF9faWNvbnMnXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgbWFrZUljb24oJ2NoZWNrZWQnKSxcbiAgICAgICAgICBtYWtlSWNvbigndW5jaGVja2VkJylcbiAgICAgICAgXVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gRm9ybUZpZWxkLnNrZXRjaCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2xhYmVsJyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1jaGVja2JveCddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICBwRmllbGQsXG4gICAgICAgICAgbWVtSWNvbnMuYXNTcGVjKCksXG4gICAgICAgICAgcExhYmVsXG4gICAgICAgIF0sXG4gICAgICAgIGZpZWxkQmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIERpc2FibGluZy5jb25maWcoeyBkaXNhYmxlZDogKCkgPT4gIXNwZWMuZW5hYmxlZCB8fCBwcm92aWRlckJhY2tzdGFnZS5pc0Rpc2FibGVkKCkgfSksXG4gICAgICAgICAgcmVjZWl2aW5nQ29uZmlnKClcbiAgICAgICAgXSlcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJIdG1sUGFuZWwgPSBzcGVjID0+IHtcbiAgICAgIGlmIChzcGVjLnByZXNldHMgPT09ICdwcmVzZW50YXRpb24nKSB7XG4gICAgICAgIHJldHVybiBDb250YWluZXIuc2tldGNoKHtcbiAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1mb3JtX19ncm91cCddLFxuICAgICAgICAgICAgaW5uZXJIdG1sOiBzcGVjLmh0bWxcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIENvbnRhaW5lci5za2V0Y2goe1xuICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LWZvcm1fX2dyb3VwJ10sXG4gICAgICAgICAgICBpbm5lckh0bWw6IHNwZWMuaHRtbCxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ2RvY3VtZW50JyB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb250YWluZXJCZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgICBUYWJzdG9wcGluZy5jb25maWcoe30pLFxuICAgICAgICAgICAgRm9jdXNpbmcuY29uZmlnKHt9KVxuICAgICAgICAgIF0pXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBtYWtlJDIgPSByZW5kZXIgPT4ge1xuICAgICAgcmV0dXJuIChwYXJ0cywgc3BlYywgZGlhbG9nRGF0YSwgYmFja3N0YWdlKSA9PiBnZXQkZyhzcGVjLCAnbmFtZScpLmZvbGQoKCkgPT4gcmVuZGVyKHNwZWMsIGJhY2tzdGFnZSwgT3B0aW9uYWwubm9uZSgpKSwgZmllbGROYW1lID0+IHBhcnRzLmZpZWxkKGZpZWxkTmFtZSwgcmVuZGVyKHNwZWMsIGJhY2tzdGFnZSwgZ2V0JGcoZGlhbG9nRGF0YSwgZmllbGROYW1lKSkpKTtcbiAgICB9O1xuICAgIGNvbnN0IG1ha2VJZnJhbWUgPSByZW5kZXIgPT4gKHBhcnRzLCBzcGVjLCBkaWFsb2dEYXRhLCBiYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IGlmcmFtZVNwZWMgPSBkZWVwTWVyZ2Uoc3BlYywgeyBzb3VyY2U6ICdkeW5hbWljJyB9KTtcbiAgICAgIHJldHVybiBtYWtlJDIocmVuZGVyKShwYXJ0cywgaWZyYW1lU3BlYywgZGlhbG9nRGF0YSwgYmFja3N0YWdlKTtcbiAgICB9O1xuICAgIGNvbnN0IGZhY3RvcmllcyA9IHtcbiAgICAgIGJhcjogbWFrZSQyKChzcGVjLCBiYWNrc3RhZ2UpID0+IHJlbmRlckJhcihzcGVjLCBiYWNrc3RhZ2Uuc2hhcmVkKSksXG4gICAgICBjb2xsZWN0aW9uOiBtYWtlJDIoKHNwZWMsIGJhY2tzdGFnZSwgZGF0YSkgPT4gcmVuZGVyQ29sbGVjdGlvbihzcGVjLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycywgZGF0YSkpLFxuICAgICAgYWxlcnRiYW5uZXI6IG1ha2UkMigoc3BlYywgYmFja3N0YWdlKSA9PiByZW5kZXJBbGVydEJhbm5lcihzcGVjLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycykpLFxuICAgICAgaW5wdXQ6IG1ha2UkMigoc3BlYywgYmFja3N0YWdlLCBkYXRhKSA9PiByZW5kZXJJbnB1dChzcGVjLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycywgZGF0YSkpLFxuICAgICAgdGV4dGFyZWE6IG1ha2UkMigoc3BlYywgYmFja3N0YWdlLCBkYXRhKSA9PiByZW5kZXJUZXh0YXJlYShzcGVjLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycywgZGF0YSkpLFxuICAgICAgbGFiZWw6IG1ha2UkMigoc3BlYywgYmFja3N0YWdlKSA9PiByZW5kZXJMYWJlbCQyKHNwZWMsIGJhY2tzdGFnZS5zaGFyZWQpKSxcbiAgICAgIGlmcmFtZTogbWFrZUlmcmFtZSgoc3BlYywgYmFja3N0YWdlLCBkYXRhKSA9PiByZW5kZXJJRnJhbWUoc3BlYywgYmFja3N0YWdlLnNoYXJlZC5wcm92aWRlcnMsIGRhdGEpKSxcbiAgICAgIGJ1dHRvbjogbWFrZSQyKChzcGVjLCBiYWNrc3RhZ2UpID0+IHJlbmRlckRpYWxvZ0J1dHRvbihzcGVjLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycykpLFxuICAgICAgY2hlY2tib3g6IG1ha2UkMigoc3BlYywgYmFja3N0YWdlLCBkYXRhKSA9PiByZW5kZXJDaGVja2JveChzcGVjLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycywgZGF0YSkpLFxuICAgICAgY29sb3JpbnB1dDogbWFrZSQyKChzcGVjLCBiYWNrc3RhZ2UsIGRhdGEpID0+IHJlbmRlckNvbG9ySW5wdXQoc3BlYywgYmFja3N0YWdlLnNoYXJlZCwgYmFja3N0YWdlLmNvbG9yaW5wdXQsIGRhdGEpKSxcbiAgICAgIGNvbG9ycGlja2VyOiBtYWtlJDIoKHNwZWMsIGJhY2tzdGFnZSwgZGF0YSkgPT4gcmVuZGVyQ29sb3JQaWNrZXIoc3BlYywgYmFja3N0YWdlLnNoYXJlZC5wcm92aWRlcnMsIGRhdGEpKSxcbiAgICAgIGRyb3B6b25lOiBtYWtlJDIoKHNwZWMsIGJhY2tzdGFnZSwgZGF0YSkgPT4gcmVuZGVyRHJvcFpvbmUoc3BlYywgYmFja3N0YWdlLnNoYXJlZC5wcm92aWRlcnMsIGRhdGEpKSxcbiAgICAgIGdyaWQ6IG1ha2UkMigoc3BlYywgYmFja3N0YWdlKSA9PiByZW5kZXJHcmlkKHNwZWMsIGJhY2tzdGFnZS5zaGFyZWQpKSxcbiAgICAgIGxpc3Rib3g6IG1ha2UkMigoc3BlYywgYmFja3N0YWdlLCBkYXRhKSA9PiByZW5kZXJMaXN0Qm94KHNwZWMsIGJhY2tzdGFnZSwgZGF0YSkpLFxuICAgICAgc2VsZWN0Ym94OiBtYWtlJDIoKHNwZWMsIGJhY2tzdGFnZSwgZGF0YSkgPT4gcmVuZGVyU2VsZWN0Qm94KHNwZWMsIGJhY2tzdGFnZS5zaGFyZWQucHJvdmlkZXJzLCBkYXRhKSksXG4gICAgICBzaXplaW5wdXQ6IG1ha2UkMigoc3BlYywgYmFja3N0YWdlKSA9PiByZW5kZXJTaXplSW5wdXQoc3BlYywgYmFja3N0YWdlLnNoYXJlZC5wcm92aWRlcnMpKSxcbiAgICAgIHNsaWRlcjogbWFrZSQyKChzcGVjLCBiYWNrc3RhZ2UsIGRhdGEpID0+IHJlbmRlclNsaWRlcihzcGVjLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycywgZGF0YSkpLFxuICAgICAgdXJsaW5wdXQ6IG1ha2UkMigoc3BlYywgYmFja3N0YWdlLCBkYXRhKSA9PiByZW5kZXJVcmxJbnB1dChzcGVjLCBiYWNrc3RhZ2UsIGJhY2tzdGFnZS51cmxpbnB1dCwgZGF0YSkpLFxuICAgICAgY3VzdG9tZWRpdG9yOiBtYWtlJDIocmVuZGVyQ3VzdG9tRWRpdG9yKSxcbiAgICAgIGh0bWxwYW5lbDogbWFrZSQyKHJlbmRlckh0bWxQYW5lbCksXG4gICAgICBpbWFnZXByZXZpZXc6IG1ha2UkMigoc3BlYywgXywgZGF0YSkgPT4gcmVuZGVySW1hZ2VQcmV2aWV3KHNwZWMsIGRhdGEpKSxcbiAgICAgIHRhYmxlOiBtYWtlJDIoKHNwZWMsIGJhY2tzdGFnZSkgPT4gcmVuZGVyVGFibGUoc3BlYywgYmFja3N0YWdlLnNoYXJlZC5wcm92aWRlcnMpKSxcbiAgICAgIHRyZWU6IG1ha2UkMigoc3BlYywgYmFja3N0YWdlKSA9PiByZW5kZXJUcmVlKHNwZWMsIGJhY2tzdGFnZSkpLFxuICAgICAgcGFuZWw6IG1ha2UkMigoc3BlYywgYmFja3N0YWdlKSA9PiByZW5kZXJQYW5lbChzcGVjLCBiYWNrc3RhZ2UpKVxuICAgIH07XG4gICAgY29uc3Qgbm9Gb3JtUGFydHMgPSB7XG4gICAgICBmaWVsZDogKF9uYW1lLCBzcGVjKSA9PiBzcGVjLFxuICAgICAgcmVjb3JkOiBjb25zdGFudCQxKFtdKVxuICAgIH07XG4gICAgY29uc3QgaW50ZXJwcmV0SW5Gb3JtID0gKHBhcnRzLCBzcGVjLCBkaWFsb2dEYXRhLCBvbGRCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IG5ld0JhY2tzdGFnZSA9IGRlZXBNZXJnZShvbGRCYWNrc3RhZ2UsIHsgc2hhcmVkOiB7IGludGVycHJldGVyOiBjaGlsZFNwZWMgPT4gaW50ZXJwcmV0UGFydHMocGFydHMsIGNoaWxkU3BlYywgZGlhbG9nRGF0YSwgbmV3QmFja3N0YWdlKSB9IH0pO1xuICAgICAgcmV0dXJuIGludGVycHJldFBhcnRzKHBhcnRzLCBzcGVjLCBkaWFsb2dEYXRhLCBuZXdCYWNrc3RhZ2UpO1xuICAgIH07XG4gICAgY29uc3QgaW50ZXJwcmV0UGFydHMgPSAocGFydHMsIHNwZWMsIGRpYWxvZ0RhdGEsIGJhY2tzdGFnZSkgPT4gZ2V0JGcoZmFjdG9yaWVzLCBzcGVjLnR5cGUpLmZvbGQoKCkgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihgVW5rbm93biBmYWN0b3J5IHR5cGUgXCIkeyBzcGVjLnR5cGUgfVwiLCBkZWZhdWx0aW5nIHRvIGNvbnRhaW5lcjogYCwgc3BlYyk7XG4gICAgICByZXR1cm4gc3BlYztcbiAgICB9LCBmYWN0b3J5ID0+IGZhY3RvcnkocGFydHMsIHNwZWMsIGRpYWxvZ0RhdGEsIGJhY2tzdGFnZSkpO1xuICAgIGNvbnN0IGludGVycHJldFdpdGhvdXRGb3JtID0gKHNwZWMsIGRpYWxvZ0RhdGEsIGJhY2tzdGFnZSkgPT4gaW50ZXJwcmV0UGFydHMobm9Gb3JtUGFydHMsIHNwZWMsIGRpYWxvZ0RhdGEsIGJhY2tzdGFnZSk7XG5cbiAgICBjb25zdCBsYWJlbFByZWZpeCA9ICdsYXlvdXQtaW5zZXQnO1xuICAgIGNvbnN0IHdlc3RFZGdlWCA9IGFuY2hvciA9PiBhbmNob3IueDtcbiAgICBjb25zdCBtaWRkbGVYID0gKGFuY2hvciwgZWxlbWVudCkgPT4gYW5jaG9yLnggKyBhbmNob3Iud2lkdGggLyAyIC0gZWxlbWVudC53aWR0aCAvIDI7XG4gICAgY29uc3QgZWFzdEVkZ2VYID0gKGFuY2hvciwgZWxlbWVudCkgPT4gYW5jaG9yLnggKyBhbmNob3Iud2lkdGggLSBlbGVtZW50LndpZHRoO1xuICAgIGNvbnN0IG5vcnRoWSA9IGFuY2hvciA9PiBhbmNob3IueTtcbiAgICBjb25zdCBzb3V0aFkgPSAoYW5jaG9yLCBlbGVtZW50KSA9PiBhbmNob3IueSArIGFuY2hvci5oZWlnaHQgLSBlbGVtZW50LmhlaWdodDtcbiAgICBjb25zdCBjZW50cmVZID0gKGFuY2hvciwgZWxlbWVudCkgPT4gYW5jaG9yLnkgKyBhbmNob3IuaGVpZ2h0IC8gMiAtIGVsZW1lbnQuaGVpZ2h0IC8gMjtcbiAgICBjb25zdCBzb3V0aHdlc3QgPSAoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzKSA9PiBudSQ2KGVhc3RFZGdlWChhbmNob3IsIGVsZW1lbnQpLCBzb3V0aFkoYW5jaG9yLCBlbGVtZW50KSwgYnViYmxlcy5pbnNldFNvdXRod2VzdCgpLCBub3J0aHdlc3QkMygpLCAnc291dGh3ZXN0JywgYm91bmRzUmVzdHJpY3Rpb24oYW5jaG9yLCB7XG4gICAgICByaWdodDogMCxcbiAgICAgIGJvdHRvbTogM1xuICAgIH0pLCBsYWJlbFByZWZpeCk7XG4gICAgY29uc3Qgc291dGhlYXN0ID0gKGFuY2hvciwgZWxlbWVudCwgYnViYmxlcykgPT4gbnUkNih3ZXN0RWRnZVgoYW5jaG9yKSwgc291dGhZKGFuY2hvciwgZWxlbWVudCksIGJ1YmJsZXMuaW5zZXRTb3V0aGVhc3QoKSwgbm9ydGhlYXN0JDMoKSwgJ3NvdXRoZWFzdCcsIGJvdW5kc1Jlc3RyaWN0aW9uKGFuY2hvciwge1xuICAgICAgbGVmdDogMSxcbiAgICAgIGJvdHRvbTogM1xuICAgIH0pLCBsYWJlbFByZWZpeCk7XG4gICAgY29uc3Qgbm9ydGh3ZXN0ID0gKGFuY2hvciwgZWxlbWVudCwgYnViYmxlcykgPT4gbnUkNihlYXN0RWRnZVgoYW5jaG9yLCBlbGVtZW50KSwgbm9ydGhZKGFuY2hvciksIGJ1YmJsZXMuaW5zZXROb3J0aHdlc3QoKSwgc291dGh3ZXN0JDMoKSwgJ25vcnRod2VzdCcsIGJvdW5kc1Jlc3RyaWN0aW9uKGFuY2hvciwge1xuICAgICAgcmlnaHQ6IDAsXG4gICAgICB0b3A6IDJcbiAgICB9KSwgbGFiZWxQcmVmaXgpO1xuICAgIGNvbnN0IG5vcnRoZWFzdCA9IChhbmNob3IsIGVsZW1lbnQsIGJ1YmJsZXMpID0+IG51JDYod2VzdEVkZ2VYKGFuY2hvciksIG5vcnRoWShhbmNob3IpLCBidWJibGVzLmluc2V0Tm9ydGhlYXN0KCksIHNvdXRoZWFzdCQzKCksICdub3J0aGVhc3QnLCBib3VuZHNSZXN0cmljdGlvbihhbmNob3IsIHtcbiAgICAgIGxlZnQ6IDEsXG4gICAgICB0b3A6IDJcbiAgICB9KSwgbGFiZWxQcmVmaXgpO1xuICAgIGNvbnN0IG5vcnRoID0gKGFuY2hvciwgZWxlbWVudCwgYnViYmxlcykgPT4gbnUkNihtaWRkbGVYKGFuY2hvciwgZWxlbWVudCksIG5vcnRoWShhbmNob3IpLCBidWJibGVzLmluc2V0Tm9ydGgoKSwgc291dGgkMygpLCAnbm9ydGgnLCBib3VuZHNSZXN0cmljdGlvbihhbmNob3IsIHsgdG9wOiAyIH0pLCBsYWJlbFByZWZpeCk7XG4gICAgY29uc3Qgc291dGggPSAoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzKSA9PiBudSQ2KG1pZGRsZVgoYW5jaG9yLCBlbGVtZW50KSwgc291dGhZKGFuY2hvciwgZWxlbWVudCksIGJ1YmJsZXMuaW5zZXRTb3V0aCgpLCBub3J0aCQzKCksICdzb3V0aCcsIGJvdW5kc1Jlc3RyaWN0aW9uKGFuY2hvciwgeyBib3R0b206IDMgfSksIGxhYmVsUHJlZml4KTtcbiAgICBjb25zdCBlYXN0ID0gKGFuY2hvciwgZWxlbWVudCwgYnViYmxlcykgPT4gbnUkNihlYXN0RWRnZVgoYW5jaG9yLCBlbGVtZW50KSwgY2VudHJlWShhbmNob3IsIGVsZW1lbnQpLCBidWJibGVzLmluc2V0RWFzdCgpLCB3ZXN0JDMoKSwgJ2Vhc3QnLCBib3VuZHNSZXN0cmljdGlvbihhbmNob3IsIHsgcmlnaHQ6IDAgfSksIGxhYmVsUHJlZml4KTtcbiAgICBjb25zdCB3ZXN0ID0gKGFuY2hvciwgZWxlbWVudCwgYnViYmxlcykgPT4gbnUkNih3ZXN0RWRnZVgoYW5jaG9yKSwgY2VudHJlWShhbmNob3IsIGVsZW1lbnQpLCBidWJibGVzLmluc2V0V2VzdCgpLCBlYXN0JDMoKSwgJ3dlc3QnLCBib3VuZHNSZXN0cmljdGlvbihhbmNob3IsIHsgbGVmdDogMSB9KSwgbGFiZWxQcmVmaXgpO1xuICAgIGNvbnN0IGxvb2t1cFByZXNlcnZlTGF5b3V0ID0gbGFzdFBsYWNlbWVudCA9PiB7XG4gICAgICBzd2l0Y2ggKGxhc3RQbGFjZW1lbnQpIHtcbiAgICAgIGNhc2UgJ25vcnRoJzpcbiAgICAgICAgcmV0dXJuIG5vcnRoO1xuICAgICAgY2FzZSAnbm9ydGhlYXN0JzpcbiAgICAgICAgcmV0dXJuIG5vcnRoZWFzdDtcbiAgICAgIGNhc2UgJ25vcnRod2VzdCc6XG4gICAgICAgIHJldHVybiBub3J0aHdlc3Q7XG4gICAgICBjYXNlICdzb3V0aCc6XG4gICAgICAgIHJldHVybiBzb3V0aDtcbiAgICAgIGNhc2UgJ3NvdXRoZWFzdCc6XG4gICAgICAgIHJldHVybiBzb3V0aGVhc3Q7XG4gICAgICBjYXNlICdzb3V0aHdlc3QnOlxuICAgICAgICByZXR1cm4gc291dGh3ZXN0O1xuICAgICAgY2FzZSAnZWFzdCc6XG4gICAgICAgIHJldHVybiBlYXN0O1xuICAgICAgY2FzZSAnd2VzdCc6XG4gICAgICAgIHJldHVybiB3ZXN0O1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcHJlc2VydmUgPSAoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzLCBwbGFjZWUsIGJvdW5kcykgPT4ge1xuICAgICAgY29uc3QgbGF5b3V0ID0gZ2V0UGxhY2VtZW50KHBsYWNlZSkubWFwKGxvb2t1cFByZXNlcnZlTGF5b3V0KS5nZXRPcihub3J0aCk7XG4gICAgICByZXR1cm4gbGF5b3V0KGFuY2hvciwgZWxlbWVudCwgYnViYmxlcywgcGxhY2VlLCBib3VuZHMpO1xuICAgIH07XG4gICAgY29uc3QgbG9va3VwRmxpcHBlZExheW91dCA9IGxhc3RQbGFjZW1lbnQgPT4ge1xuICAgICAgc3dpdGNoIChsYXN0UGxhY2VtZW50KSB7XG4gICAgICBjYXNlICdub3J0aCc6XG4gICAgICAgIHJldHVybiBzb3V0aDtcbiAgICAgIGNhc2UgJ25vcnRoZWFzdCc6XG4gICAgICAgIHJldHVybiBzb3V0aGVhc3Q7XG4gICAgICBjYXNlICdub3J0aHdlc3QnOlxuICAgICAgICByZXR1cm4gc291dGh3ZXN0O1xuICAgICAgY2FzZSAnc291dGgnOlxuICAgICAgICByZXR1cm4gbm9ydGg7XG4gICAgICBjYXNlICdzb3V0aGVhc3QnOlxuICAgICAgICByZXR1cm4gbm9ydGhlYXN0O1xuICAgICAgY2FzZSAnc291dGh3ZXN0JzpcbiAgICAgICAgcmV0dXJuIG5vcnRod2VzdDtcbiAgICAgIGNhc2UgJ2Vhc3QnOlxuICAgICAgICByZXR1cm4gd2VzdDtcbiAgICAgIGNhc2UgJ3dlc3QnOlxuICAgICAgICByZXR1cm4gZWFzdDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZsaXAgPSAoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzLCBwbGFjZWUsIGJvdW5kcykgPT4ge1xuICAgICAgY29uc3QgbGF5b3V0ID0gZ2V0UGxhY2VtZW50KHBsYWNlZSkubWFwKGxvb2t1cEZsaXBwZWRMYXlvdXQpLmdldE9yKG5vcnRoKTtcbiAgICAgIHJldHVybiBsYXlvdXQoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzLCBwbGFjZWUsIGJvdW5kcyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ1YmJsZUFsaWdubWVudHMkMiA9IHtcbiAgICAgIHZhbGlnbkNlbnRyZTogW10sXG4gICAgICBhbGlnbkNlbnRyZTogW10sXG4gICAgICBhbGlnbkxlZnQ6IFtdLFxuICAgICAgYWxpZ25SaWdodDogW10sXG4gICAgICByaWdodDogW10sXG4gICAgICBsZWZ0OiBbXSxcbiAgICAgIGJvdHRvbTogW10sXG4gICAgICB0b3A6IFtdXG4gICAgfTtcbiAgICBjb25zdCBnZXRJbmxpbmVEaWFsb2dBbmNob3IgPSAoY29udGVudEFyZWFFbGVtZW50LCBsYXp5QW5jaG9yYmFyLCBsYXp5VXNlRWRpdGFibGVBcmVhQW5jaG9yKSA9PiB7XG4gICAgICBjb25zdCBidWJibGVTaXplID0gMTI7XG4gICAgICBjb25zdCBvdmVycmlkZXMgPSB7IG1heEhlaWdodEZ1bmN0aW9uOiBleHBhbmRhYmxlJDEoKSB9O1xuICAgICAgY29uc3QgZWRpdGFibGVBcmVhQW5jaG9yID0gKCkgPT4gKHtcbiAgICAgICAgdHlwZTogJ25vZGUnLFxuICAgICAgICByb290OiBnZXRDb250ZW50Q29udGFpbmVyKGdldFJvb3ROb2RlKGNvbnRlbnRBcmVhRWxlbWVudCgpKSksXG4gICAgICAgIG5vZGU6IE9wdGlvbmFsLmZyb20oY29udGVudEFyZWFFbGVtZW50KCkpLFxuICAgICAgICBidWJibGU6IG51JDUoYnViYmxlU2l6ZSwgYnViYmxlU2l6ZSwgYnViYmxlQWxpZ25tZW50cyQyKSxcbiAgICAgICAgbGF5b3V0czoge1xuICAgICAgICAgIG9uUnRsOiAoKSA9PiBbbm9ydGhlYXN0XSxcbiAgICAgICAgICBvbkx0cjogKCkgPT4gW25vcnRod2VzdF1cbiAgICAgICAgfSxcbiAgICAgICAgb3ZlcnJpZGVzXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0YW5kYXJkQW5jaG9yID0gKCkgPT4gKHtcbiAgICAgICAgdHlwZTogJ2hvdHNwb3QnLFxuICAgICAgICBob3RzcG90OiBsYXp5QW5jaG9yYmFyKCksXG4gICAgICAgIGJ1YmJsZTogbnUkNSgtYnViYmxlU2l6ZSwgYnViYmxlU2l6ZSwgYnViYmxlQWxpZ25tZW50cyQyKSxcbiAgICAgICAgbGF5b3V0czoge1xuICAgICAgICAgIG9uUnRsOiAoKSA9PiBbXG4gICAgICAgICAgICBzb3V0aGVhc3QkMixcbiAgICAgICAgICAgIHNvdXRod2VzdCQyLFxuICAgICAgICAgICAgc291dGgkMlxuICAgICAgICAgIF0sXG4gICAgICAgICAgb25MdHI6ICgpID0+IFtcbiAgICAgICAgICAgIHNvdXRod2VzdCQyLFxuICAgICAgICAgICAgc291dGhlYXN0JDIsXG4gICAgICAgICAgICBzb3V0aCQyXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBvdmVycmlkZXNcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuICgpID0+IGxhenlVc2VFZGl0YWJsZUFyZWFBbmNob3IoKSA/IGVkaXRhYmxlQXJlYUFuY2hvcigpIDogc3RhbmRhcmRBbmNob3IoKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldElubGluZUJvdHRvbURpYWxvZ0FuY2hvciA9IChpbmxpbmUsIGNvbnRlbnRBcmVhRWxlbWVudCwgbGF6eUJvdHRvbUFuY2hvckJhciwgbGF6eVVzZUVkaXRhYmxlQXJlYUFuY2hvcikgPT4ge1xuICAgICAgY29uc3QgYnViYmxlU2l6ZSA9IDEyO1xuICAgICAgY29uc3Qgb3ZlcnJpZGVzID0geyBtYXhIZWlnaHRGdW5jdGlvbjogZXhwYW5kYWJsZSQxKCkgfTtcbiAgICAgIGNvbnN0IGVkaXRhYmxlQXJlYUFuY2hvciA9ICgpID0+ICh7XG4gICAgICAgIHR5cGU6ICdub2RlJyxcbiAgICAgICAgcm9vdDogZ2V0Q29udGVudENvbnRhaW5lcihnZXRSb290Tm9kZShjb250ZW50QXJlYUVsZW1lbnQoKSkpLFxuICAgICAgICBub2RlOiBPcHRpb25hbC5mcm9tKGNvbnRlbnRBcmVhRWxlbWVudCgpKSxcbiAgICAgICAgYnViYmxlOiBudSQ1KGJ1YmJsZVNpemUsIGJ1YmJsZVNpemUsIGJ1YmJsZUFsaWdubWVudHMkMiksXG4gICAgICAgIGxheW91dHM6IHtcbiAgICAgICAgICBvblJ0bDogKCkgPT4gW25vcnRoXSxcbiAgICAgICAgICBvbkx0cjogKCkgPT4gW25vcnRoXVxuICAgICAgICB9LFxuICAgICAgICBvdmVycmlkZXNcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RhbmRhcmRBbmNob3IgPSAoKSA9PiBpbmxpbmUgPyB7XG4gICAgICAgIHR5cGU6ICdub2RlJyxcbiAgICAgICAgcm9vdDogZ2V0Q29udGVudENvbnRhaW5lcihnZXRSb290Tm9kZShjb250ZW50QXJlYUVsZW1lbnQoKSkpLFxuICAgICAgICBub2RlOiBPcHRpb25hbC5mcm9tKGNvbnRlbnRBcmVhRWxlbWVudCgpKSxcbiAgICAgICAgYnViYmxlOiBudSQ1KDAsIC1nZXRPdXRlciQyKGNvbnRlbnRBcmVhRWxlbWVudCgpKSwgYnViYmxlQWxpZ25tZW50cyQyKSxcbiAgICAgICAgbGF5b3V0czoge1xuICAgICAgICAgIG9uUnRsOiAoKSA9PiBbbm9ydGgkMl0sXG4gICAgICAgICAgb25MdHI6ICgpID0+IFtub3J0aCQyXVxuICAgICAgICB9LFxuICAgICAgICBvdmVycmlkZXNcbiAgICAgIH0gOiB7XG4gICAgICAgIHR5cGU6ICdob3RzcG90JyxcbiAgICAgICAgaG90c3BvdDogbGF6eUJvdHRvbUFuY2hvckJhcigpLFxuICAgICAgICBidWJibGU6IG51JDUoMCwgMCwgYnViYmxlQWxpZ25tZW50cyQyKSxcbiAgICAgICAgbGF5b3V0czoge1xuICAgICAgICAgIG9uUnRsOiAoKSA9PiBbbm9ydGgkMl0sXG4gICAgICAgICAgb25MdHI6ICgpID0+IFtub3J0aCQyXVxuICAgICAgICB9LFxuICAgICAgICBvdmVycmlkZXNcbiAgICAgIH07XG4gICAgICByZXR1cm4gKCkgPT4gbGF6eVVzZUVkaXRhYmxlQXJlYUFuY2hvcigpID8gZWRpdGFibGVBcmVhQW5jaG9yKCkgOiBzdGFuZGFyZEFuY2hvcigpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0QmFubmVyQW5jaG9yID0gKGNvbnRlbnRBcmVhRWxlbWVudCwgbGF6eUFuY2hvcmJhciwgbGF6eVVzZUVkaXRhYmxlQXJlYUFuY2hvcikgPT4ge1xuICAgICAgY29uc3QgZWRpdGFibGVBcmVhQW5jaG9yID0gKCkgPT4gKHtcbiAgICAgICAgdHlwZTogJ25vZGUnLFxuICAgICAgICByb290OiBnZXRDb250ZW50Q29udGFpbmVyKGdldFJvb3ROb2RlKGNvbnRlbnRBcmVhRWxlbWVudCgpKSksXG4gICAgICAgIG5vZGU6IE9wdGlvbmFsLmZyb20oY29udGVudEFyZWFFbGVtZW50KCkpLFxuICAgICAgICBsYXlvdXRzOiB7XG4gICAgICAgICAgb25SdGw6ICgpID0+IFtub3J0aF0sXG4gICAgICAgICAgb25MdHI6ICgpID0+IFtub3J0aF1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzdGFuZGFyZEFuY2hvciA9ICgpID0+ICh7XG4gICAgICAgIHR5cGU6ICdob3RzcG90JyxcbiAgICAgICAgaG90c3BvdDogbGF6eUFuY2hvcmJhcigpLFxuICAgICAgICBsYXlvdXRzOiB7XG4gICAgICAgICAgb25SdGw6ICgpID0+IFtzb3V0aCQyXSxcbiAgICAgICAgICBvbkx0cjogKCkgPT4gW3NvdXRoJDJdXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuICgpID0+IGxhenlVc2VFZGl0YWJsZUFyZWFBbmNob3IoKSA/IGVkaXRhYmxlQXJlYUFuY2hvcigpIDogc3RhbmRhcmRBbmNob3IoKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEN1cnNvckFuY2hvciA9IChlZGl0b3IsIGJvZHlFbGVtZW50KSA9PiAoKSA9PiAoe1xuICAgICAgdHlwZTogJ3NlbGVjdGlvbicsXG4gICAgICByb290OiBib2R5RWxlbWVudCgpLFxuICAgICAgZ2V0U2VsZWN0aW9uOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbHMgPSBlZGl0b3IubW9kZWwudGFibGUuZ2V0U2VsZWN0ZWRDZWxscygpO1xuICAgICAgICBpZiAoc2VsZWN0ZWRDZWxscy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgY29uc3QgZmlyc3RDZWxsID0gc2VsZWN0ZWRDZWxsc1swXTtcbiAgICAgICAgICBjb25zdCBsYXN0Q2VsbCA9IHNlbGVjdGVkQ2VsbHNbc2VsZWN0ZWRDZWxscy5sZW5ndGggLSAxXTtcbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb25UYWJsZUNlbGxSYW5nZSA9IHtcbiAgICAgICAgICAgIGZpcnN0Q2VsbDogU3VnYXJFbGVtZW50LmZyb21Eb20oZmlyc3RDZWxsKSxcbiAgICAgICAgICAgIGxhc3RDZWxsOiBTdWdhckVsZW1lbnQuZnJvbURvbShsYXN0Q2VsbClcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHNlbGVjdGlvblRhYmxlQ2VsbFJhbmdlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShTaW1TZWxlY3Rpb24ucmFuZ2UoU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLnN0YXJ0Q29udGFpbmVyKSwgcm5nLnN0YXJ0T2Zmc2V0LCBTdWdhckVsZW1lbnQuZnJvbURvbShybmcuZW5kQ29udGFpbmVyKSwgcm5nLmVuZE9mZnNldCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGdldE5vZGVBbmNob3IkMSA9IGJvZHlFbGVtZW50ID0+IGVsZW1lbnQgPT4gKHtcbiAgICAgIHR5cGU6ICdub2RlJyxcbiAgICAgIHJvb3Q6IGJvZHlFbGVtZW50KCksXG4gICAgICBub2RlOiBlbGVtZW50XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0QW5jaG9ycyA9IChlZGl0b3IsIGxhenlBbmNob3JiYXIsIGxhenlCb3R0b21BbmNob3JCYXIsIGlzVG9vbGJhclRvcCkgPT4ge1xuICAgICAgY29uc3QgdXNlRml4ZWRUb29sYmFyQ29udGFpbmVyID0gdXNlRml4ZWRDb250YWluZXIoZWRpdG9yKTtcbiAgICAgIGNvbnN0IGJvZHlFbGVtZW50ID0gKCkgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBjb25zdCBjb250ZW50QXJlYUVsZW1lbnQgPSAoKSA9PiBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Q29udGVudEFyZWFDb250YWluZXIoKSk7XG4gICAgICBjb25zdCBsYXp5VXNlRWRpdGFibGVBcmVhQW5jaG9yID0gKCkgPT4gdXNlRml4ZWRUb29sYmFyQ29udGFpbmVyIHx8ICFpc1Rvb2xiYXJUb3AoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlubGluZURpYWxvZzogZ2V0SW5saW5lRGlhbG9nQW5jaG9yKGNvbnRlbnRBcmVhRWxlbWVudCwgbGF6eUFuY2hvcmJhciwgbGF6eVVzZUVkaXRhYmxlQXJlYUFuY2hvciksXG4gICAgICAgIGlubGluZUJvdHRvbURpYWxvZzogZ2V0SW5saW5lQm90dG9tRGlhbG9nQW5jaG9yKGVkaXRvci5pbmxpbmUsIGNvbnRlbnRBcmVhRWxlbWVudCwgbGF6eUJvdHRvbUFuY2hvckJhciwgbGF6eVVzZUVkaXRhYmxlQXJlYUFuY2hvciksXG4gICAgICAgIGJhbm5lcjogZ2V0QmFubmVyQW5jaG9yKGNvbnRlbnRBcmVhRWxlbWVudCwgbGF6eUFuY2hvcmJhciwgbGF6eVVzZUVkaXRhYmxlQXJlYUFuY2hvciksXG4gICAgICAgIGN1cnNvcjogZ2V0Q3Vyc29yQW5jaG9yKGVkaXRvciwgYm9keUVsZW1lbnQpLFxuICAgICAgICBub2RlOiBnZXROb2RlQW5jaG9yJDEoYm9keUVsZW1lbnQpXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBjb2xvclBpY2tlciA9IGVkaXRvciA9PiAoY2FsbGJhY2ssIHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBkaWFsb2cgPSBjb2xvclBpY2tlckRpYWxvZyhlZGl0b3IpO1xuICAgICAgZGlhbG9nKGNhbGxiYWNrLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNDdXN0b21Db2xvcnMgPSBlZGl0b3IgPT4gKCkgPT4gaGFzQ3VzdG9tQ29sb3JzJDEoZWRpdG9yKTtcbiAgICBjb25zdCBnZXRDb2xvcnMgPSBlZGl0b3IgPT4gaWQgPT4gZ2V0Q29sb3JzJDIoZWRpdG9yLCBpZCk7XG4gICAgY29uc3QgZ2V0Q29sb3JDb2xzID0gZWRpdG9yID0+IGlkID0+IGdldENvbG9yQ29scyQxKGVkaXRvciwgaWQpO1xuICAgIGNvbnN0IENvbG9ySW5wdXRCYWNrc3RhZ2UgPSBlZGl0b3IgPT4gKHtcbiAgICAgIGNvbG9yUGlja2VyOiBjb2xvclBpY2tlcihlZGl0b3IpLFxuICAgICAgaGFzQ3VzdG9tQ29sb3JzOiBoYXNDdXN0b21Db2xvcnMoZWRpdG9yKSxcbiAgICAgIGdldENvbG9yczogZ2V0Q29sb3JzKGVkaXRvciksXG4gICAgICBnZXRDb2xvckNvbHM6IGdldENvbG9yQ29scyhlZGl0b3IpXG4gICAgfSk7XG5cbiAgICBjb25zdCBpc0RyYWdnYWJsZU1vZGFsID0gZWRpdG9yID0+ICgpID0+IGlzRHJhZ2dhYmxlTW9kYWwkMShlZGl0b3IpO1xuICAgIGNvbnN0IERpYWxvZ0JhY2tzdGFnZSA9IGVkaXRvciA9PiAoeyBpc0RyYWdnYWJsZU1vZGFsOiBpc0RyYWdnYWJsZU1vZGFsKGVkaXRvcikgfSk7XG5cbiAgICBjb25zdCBIZWFkZXJCYWNrc3RhZ2UgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgbW9kZSA9IENlbGwoaXNUb29sYmFyTG9jYXRpb25Cb3R0b20oZWRpdG9yKSA/ICdib3R0b20nIDogJ3RvcCcpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNQb3NpdGlvbmVkQXRUb3A6ICgpID0+IG1vZGUuZ2V0KCkgPT09ICd0b3AnLFxuICAgICAgICBnZXREb2NraW5nTW9kZTogbW9kZS5nZXQsXG4gICAgICAgIHNldERvY2tpbmdNb2RlOiBtb2RlLnNldFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNOZXN0ZWRGb3JtYXQgPSBmb3JtYXQgPT4gaGFzTm9uTnVsbGFibGVLZXkoZm9ybWF0LCAnaXRlbXMnKTtcbiAgICBjb25zdCBpc0Zvcm1hdFJlZmVyZW5jZSA9IGZvcm1hdCA9PiBoYXNOb25OdWxsYWJsZUtleShmb3JtYXQsICdmb3JtYXQnKTtcbiAgICBjb25zdCBkZWZhdWx0U3R5bGVGb3JtYXRzID0gW1xuICAgICAge1xuICAgICAgICB0aXRsZTogJ0hlYWRpbmdzJyxcbiAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ0hlYWRpbmcgMScsXG4gICAgICAgICAgICBmb3JtYXQ6ICdoMSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiAnSGVhZGluZyAyJyxcbiAgICAgICAgICAgIGZvcm1hdDogJ2gyJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6ICdIZWFkaW5nIDMnLFxuICAgICAgICAgICAgZm9ybWF0OiAnaDMnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ0hlYWRpbmcgNCcsXG4gICAgICAgICAgICBmb3JtYXQ6ICdoNCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiAnSGVhZGluZyA1JyxcbiAgICAgICAgICAgIGZvcm1hdDogJ2g1J1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6ICdIZWFkaW5nIDYnLFxuICAgICAgICAgICAgZm9ybWF0OiAnaDYnXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ0lubGluZScsXG4gICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6ICdCb2xkJyxcbiAgICAgICAgICAgIGZvcm1hdDogJ2JvbGQnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ0l0YWxpYycsXG4gICAgICAgICAgICBmb3JtYXQ6ICdpdGFsaWMnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ1VuZGVybGluZScsXG4gICAgICAgICAgICBmb3JtYXQ6ICd1bmRlcmxpbmUnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ1N0cmlrZXRocm91Z2gnLFxuICAgICAgICAgICAgZm9ybWF0OiAnc3RyaWtldGhyb3VnaCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiAnU3VwZXJzY3JpcHQnLFxuICAgICAgICAgICAgZm9ybWF0OiAnc3VwZXJzY3JpcHQnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ1N1YnNjcmlwdCcsXG4gICAgICAgICAgICBmb3JtYXQ6ICdzdWJzY3JpcHQnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ0NvZGUnLFxuICAgICAgICAgICAgZm9ybWF0OiAnY29kZSdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnQmxvY2tzJyxcbiAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ1BhcmFncmFwaCcsXG4gICAgICAgICAgICBmb3JtYXQ6ICdwJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6ICdCbG9ja3F1b3RlJyxcbiAgICAgICAgICAgIGZvcm1hdDogJ2Jsb2NrcXVvdGUnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ0RpdicsXG4gICAgICAgICAgICBmb3JtYXQ6ICdkaXYnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ1ByZScsXG4gICAgICAgICAgICBmb3JtYXQ6ICdwcmUnXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ0FsaWduJyxcbiAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ0xlZnQnLFxuICAgICAgICAgICAgZm9ybWF0OiAnYWxpZ25sZWZ0J1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6ICdDZW50ZXInLFxuICAgICAgICAgICAgZm9ybWF0OiAnYWxpZ25jZW50ZXInXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ1JpZ2h0JyxcbiAgICAgICAgICAgIGZvcm1hdDogJ2FsaWducmlnaHQnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ0p1c3RpZnknLFxuICAgICAgICAgICAgZm9ybWF0OiAnYWxpZ25qdXN0aWZ5J1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF07XG4gICAgY29uc3QgaXNOZXN0ZWRGb3JtYXRzID0gZm9ybWF0ID0+IGhhcyQyKGZvcm1hdCwgJ2l0ZW1zJyk7XG4gICAgY29uc3QgaXNCbG9ja0Zvcm1hdCA9IGZvcm1hdCA9PiBoYXMkMihmb3JtYXQsICdibG9jaycpO1xuICAgIGNvbnN0IGlzSW5saW5lRm9ybWF0ID0gZm9ybWF0ID0+IGhhcyQyKGZvcm1hdCwgJ2lubGluZScpO1xuICAgIGNvbnN0IGlzU2VsZWN0b3JGb3JtYXQgPSBmb3JtYXQgPT4gaGFzJDIoZm9ybWF0LCAnc2VsZWN0b3InKTtcbiAgICBjb25zdCBtYXBGb3JtYXRzID0gdXNlckZvcm1hdHMgPT4gZm9sZGwodXNlckZvcm1hdHMsIChhY2MsIGZtdCkgPT4ge1xuICAgICAgaWYgKGlzTmVzdGVkRm9ybWF0cyhmbXQpKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG1hcEZvcm1hdHMoZm10Lml0ZW1zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjdXN0b21Gb3JtYXRzOiBhY2MuY3VzdG9tRm9ybWF0cy5jb25jYXQocmVzdWx0LmN1c3RvbUZvcm1hdHMpLFxuICAgICAgICAgIGZvcm1hdHM6IGFjYy5mb3JtYXRzLmNvbmNhdChbe1xuICAgICAgICAgICAgICB0aXRsZTogZm10LnRpdGxlLFxuICAgICAgICAgICAgICBpdGVtczogcmVzdWx0LmZvcm1hdHNcbiAgICAgICAgICAgIH1dKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChpc0lubGluZUZvcm1hdChmbXQpIHx8IGlzQmxvY2tGb3JtYXQoZm10KSB8fCBpc1NlbGVjdG9yRm9ybWF0KGZtdCkpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0TmFtZSA9IGlzU3RyaW5nKGZtdC5uYW1lKSA/IGZtdC5uYW1lIDogZm10LnRpdGxlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGZvcm1hdE5hbWVXaXRoUHJlZml4ID0gYGN1c3RvbS0keyBmb3JtYXROYW1lIH1gO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGN1c3RvbUZvcm1hdHM6IGFjYy5jdXN0b21Gb3JtYXRzLmNvbmNhdChbe1xuICAgICAgICAgICAgICBuYW1lOiBmb3JtYXROYW1lV2l0aFByZWZpeCxcbiAgICAgICAgICAgICAgZm9ybWF0OiBmbXRcbiAgICAgICAgICAgIH1dKSxcbiAgICAgICAgICBmb3JtYXRzOiBhY2MuZm9ybWF0cy5jb25jYXQoW3tcbiAgICAgICAgICAgICAgdGl0bGU6IGZtdC50aXRsZSxcbiAgICAgICAgICAgICAgZm9ybWF0OiBmb3JtYXROYW1lV2l0aFByZWZpeCxcbiAgICAgICAgICAgICAgaWNvbjogZm10Lmljb25cbiAgICAgICAgICAgIH1dKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgZm9ybWF0czogYWNjLmZvcm1hdHMuY29uY2F0KGZtdClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBjdXN0b21Gb3JtYXRzOiBbXSxcbiAgICAgIGZvcm1hdHM6IFtdXG4gICAgfSk7XG4gICAgY29uc3QgcmVnaXN0ZXJDdXN0b21Gb3JtYXRzID0gKGVkaXRvciwgdXNlckZvcm1hdHMpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG1hcEZvcm1hdHModXNlckZvcm1hdHMpO1xuICAgICAgY29uc3QgcmVnaXN0ZXJGb3JtYXRzID0gY3VzdG9tRm9ybWF0cyA9PiB7XG4gICAgICAgIGVhY2gkMShjdXN0b21Gb3JtYXRzLCBmbXQgPT4ge1xuICAgICAgICAgIGlmICghZWRpdG9yLmZvcm1hdHRlci5oYXMoZm10Lm5hbWUpKSB7XG4gICAgICAgICAgICBlZGl0b3IuZm9ybWF0dGVyLnJlZ2lzdGVyKGZtdC5uYW1lLCBmbXQuZm9ybWF0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGlmIChlZGl0b3IuZm9ybWF0dGVyKSB7XG4gICAgICAgIHJlZ2lzdGVyRm9ybWF0cyhyZXN1bHQuY3VzdG9tRm9ybWF0cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGl0b3Iub24oJ2luaXQnLCAoKSA9PiB7XG4gICAgICAgICAgcmVnaXN0ZXJGb3JtYXRzKHJlc3VsdC5jdXN0b21Gb3JtYXRzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0LmZvcm1hdHM7XG4gICAgfTtcbiAgICBjb25zdCBnZXRTdHlsZUZvcm1hdHMgPSBlZGl0b3IgPT4gZ2V0VXNlclN0eWxlRm9ybWF0cyhlZGl0b3IpLm1hcCh1c2VyRm9ybWF0cyA9PiB7XG4gICAgICBjb25zdCByZWdpc3RlcmVkVXNlckZvcm1hdHMgPSByZWdpc3RlckN1c3RvbUZvcm1hdHMoZWRpdG9yLCB1c2VyRm9ybWF0cyk7XG4gICAgICByZXR1cm4gc2hvdWxkTWVyZ2VTdHlsZUZvcm1hdHMoZWRpdG9yKSA/IGRlZmF1bHRTdHlsZUZvcm1hdHMuY29uY2F0KHJlZ2lzdGVyZWRVc2VyRm9ybWF0cykgOiByZWdpc3RlcmVkVXNlckZvcm1hdHM7XG4gICAgfSkuZ2V0T3IoZGVmYXVsdFN0eWxlRm9ybWF0cyk7XG5cbiAgICBjb25zdCBpc1NlcGFyYXRvciQxID0gZm9ybWF0ID0+IHtcbiAgICAgIGNvbnN0IGtleXMkMSA9IGtleXMoZm9ybWF0KTtcbiAgICAgIHJldHVybiBrZXlzJDEubGVuZ3RoID09PSAxICYmIGNvbnRhaW5zJDIoa2V5cyQxLCAndGl0bGUnKTtcbiAgICB9O1xuICAgIGNvbnN0IHByb2Nlc3NCYXNpYyA9IChpdGVtLCBpc1NlbGVjdGVkRm9yLCBnZXRQcmV2aWV3Rm9yKSA9PiAoe1xuICAgICAgLi4uaXRlbSxcbiAgICAgIHR5cGU6ICdmb3JtYXR0ZXInLFxuICAgICAgaXNTZWxlY3RlZDogaXNTZWxlY3RlZEZvcihpdGVtLmZvcm1hdCksXG4gICAgICBnZXRTdHlsZVByZXZpZXc6IGdldFByZXZpZXdGb3IoaXRlbS5mb3JtYXQpXG4gICAgfSk7XG4gICAgY29uc3QgcmVnaXN0ZXIkYSA9IChlZGl0b3IsIGZvcm1hdHMsIGlzU2VsZWN0ZWRGb3IsIGdldFByZXZpZXdGb3IpID0+IHtcbiAgICAgIGNvbnN0IGVucmljaFN1cHBvcnRlZCA9IGl0ZW0gPT4gcHJvY2Vzc0Jhc2ljKGl0ZW0sIGlzU2VsZWN0ZWRGb3IsIGdldFByZXZpZXdGb3IpO1xuICAgICAgY29uc3QgZW5yaWNoTWVudSA9IGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBuZXdJdGVtcyA9IGRvRW5yaWNoKGl0ZW0uaXRlbXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgdHlwZTogJ3N1Ym1lbnUnLFxuICAgICAgICAgIGdldFN0eWxlSXRlbXM6IGNvbnN0YW50JDEobmV3SXRlbXMpXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uc3QgZW5yaWNoQ3VzdG9tID0gaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IGZvcm1hdE5hbWUgPSBpc1N0cmluZyhpdGVtLm5hbWUpID8gaXRlbS5uYW1lIDogZ2VuZXJhdGUkNihpdGVtLnRpdGxlKTtcbiAgICAgICAgY29uc3QgZm9ybWF0TmFtZVdpdGhQcmVmaXggPSBgY3VzdG9tLSR7IGZvcm1hdE5hbWUgfWA7XG4gICAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7XG4gICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICB0eXBlOiAnZm9ybWF0dGVyJyxcbiAgICAgICAgICBmb3JtYXQ6IGZvcm1hdE5hbWVXaXRoUHJlZml4LFxuICAgICAgICAgIGlzU2VsZWN0ZWQ6IGlzU2VsZWN0ZWRGb3IoZm9ybWF0TmFtZVdpdGhQcmVmaXgpLFxuICAgICAgICAgIGdldFN0eWxlUHJldmlldzogZ2V0UHJldmlld0Zvcihmb3JtYXROYW1lV2l0aFByZWZpeClcbiAgICAgICAgfTtcbiAgICAgICAgZWRpdG9yLmZvcm1hdHRlci5yZWdpc3Rlcihmb3JtYXROYW1lLCBuZXdJdGVtKTtcbiAgICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgICB9O1xuICAgICAgY29uc3QgZG9FbnJpY2ggPSBpdGVtcyA9PiBtYXAkMihpdGVtcywgaXRlbSA9PiB7XG4gICAgICAgIGlmIChpc05lc3RlZEZvcm1hdChpdGVtKSkge1xuICAgICAgICAgIHJldHVybiBlbnJpY2hNZW51KGl0ZW0pO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRm9ybWF0UmVmZXJlbmNlKGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuIGVucmljaFN1cHBvcnRlZChpdGVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1NlcGFyYXRvciQxKGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICB0eXBlOiAnc2VwYXJhdG9yJ1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGVucmljaEN1c3RvbShpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZG9FbnJpY2goZm9ybWF0cyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGluaXQkNyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBpc1NlbGVjdGVkRm9yID0gZm9ybWF0ID0+ICgpID0+IGVkaXRvci5mb3JtYXR0ZXIubWF0Y2goZm9ybWF0KTtcbiAgICAgIGNvbnN0IGdldFByZXZpZXdGb3IgPSBmb3JtYXQgPT4gKCkgPT4ge1xuICAgICAgICBjb25zdCBmbXQgPSBlZGl0b3IuZm9ybWF0dGVyLmdldChmb3JtYXQpO1xuICAgICAgICByZXR1cm4gZm10ICE9PSB1bmRlZmluZWQgPyBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICB0YWc6IGZtdC5sZW5ndGggPiAwID8gZm10WzBdLmlubGluZSB8fCBmbXRbMF0uYmxvY2sgfHwgJ2RpdicgOiAnZGl2JyxcbiAgICAgICAgICBzdHlsZXM6IGVkaXRvci5kb20ucGFyc2VTdHlsZShlZGl0b3IuZm9ybWF0dGVyLmdldENzc1RleHQoZm9ybWF0KSlcbiAgICAgICAgfSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0dGluZ3NGb3JtYXRzID0gQ2VsbChbXSk7XG4gICAgICBjb25zdCBldmVudHNGb3JtYXRzID0gQ2VsbChbXSk7XG4gICAgICBjb25zdCByZXBsYWNlU2V0dGluZ3MgPSBDZWxsKGZhbHNlKTtcbiAgICAgIGVkaXRvci5vbignUHJlSW5pdCcsIF9lID0+IHtcbiAgICAgICAgY29uc3QgZm9ybWF0cyA9IGdldFN0eWxlRm9ybWF0cyhlZGl0b3IpO1xuICAgICAgICBjb25zdCBlbnJpY2hlZCA9IHJlZ2lzdGVyJGEoZWRpdG9yLCBmb3JtYXRzLCBpc1NlbGVjdGVkRm9yLCBnZXRQcmV2aWV3Rm9yKTtcbiAgICAgICAgc2V0dGluZ3NGb3JtYXRzLnNldChlbnJpY2hlZCk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignYWRkU3R5bGVNb2RpZmljYXRpb25zJywgZSA9PiB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWNhdGlvbnMgPSByZWdpc3RlciRhKGVkaXRvciwgZS5pdGVtcywgaXNTZWxlY3RlZEZvciwgZ2V0UHJldmlld0Zvcik7XG4gICAgICAgIGV2ZW50c0Zvcm1hdHMuc2V0KG1vZGlmaWNhdGlvbnMpO1xuICAgICAgICByZXBsYWNlU2V0dGluZ3Muc2V0KGUucmVwbGFjZSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGdldERhdGEgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZyb21TZXR0aW5ncyA9IHJlcGxhY2VTZXR0aW5ncy5nZXQoKSA/IFtdIDogc2V0dGluZ3NGb3JtYXRzLmdldCgpO1xuICAgICAgICBjb25zdCBmcm9tRXZlbnRzID0gZXZlbnRzRm9ybWF0cy5nZXQoKTtcbiAgICAgICAgcmV0dXJuIGZyb21TZXR0aW5ncy5jb25jYXQoZnJvbUV2ZW50cyk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgZ2V0RGF0YSB9O1xuICAgIH07XG5cbiAgICBjb25zdCBpc0VsZW1lbnQgPSBub2RlID0+IGlzTm9uTnVsbGFibGUobm9kZSkgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMTtcbiAgICBjb25zdCB0cmltID0gZ2xvYmFsJDEudHJpbTtcbiAgICBjb25zdCBoYXNDb250ZW50RWRpdGFibGVTdGF0ZSA9IHZhbHVlID0+IHtcbiAgICAgIHJldHVybiBub2RlID0+IHtcbiAgICAgICAgaWYgKGlzRWxlbWVudChub2RlKSkge1xuICAgICAgICAgIGlmIChub2RlLmNvbnRlbnRFZGl0YWJsZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWNlLWNvbnRlbnRlZGl0YWJsZScpID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBpc0NvbnRlbnRFZGl0YWJsZVRydWUgPSBoYXNDb250ZW50RWRpdGFibGVTdGF0ZSgndHJ1ZScpO1xuICAgIGNvbnN0IGlzQ29udGVudEVkaXRhYmxlRmFsc2UgPSBoYXNDb250ZW50RWRpdGFibGVTdGF0ZSgnZmFsc2UnKTtcbiAgICBjb25zdCBjcmVhdGUkMSA9ICh0eXBlLCB0aXRsZSwgdXJsLCBsZXZlbCwgYXR0YWNoKSA9PiAoe1xuICAgICAgdHlwZSxcbiAgICAgIHRpdGxlLFxuICAgICAgdXJsLFxuICAgICAgbGV2ZWwsXG4gICAgICBhdHRhY2hcbiAgICB9KTtcbiAgICBjb25zdCBpc0NoaWxkT2ZDb250ZW50RWRpdGFibGVUcnVlID0gbm9kZSA9PiB7XG4gICAgICBsZXQgdGVtcE5vZGUgPSBub2RlO1xuICAgICAgd2hpbGUgKHRlbXBOb2RlID0gdGVtcE5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRlbXBOb2RlLmNvbnRlbnRFZGl0YWJsZTtcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlICE9PSAnaW5oZXJpdCcpIHtcbiAgICAgICAgICByZXR1cm4gaXNDb250ZW50RWRpdGFibGVUcnVlKHRlbXBOb2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgY29uc3Qgc2VsZWN0ID0gKHNlbGVjdG9yLCByb290KSA9PiB7XG4gICAgICByZXR1cm4gbWFwJDIoZGVzY2VuZGFudHMoU3VnYXJFbGVtZW50LmZyb21Eb20ocm9vdCksIHNlbGVjdG9yKSwgZWxlbWVudCA9PiB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmRvbTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0RWxlbWVudFRleHQgPSBlbG0gPT4ge1xuICAgICAgcmV0dXJuIGVsbS5pbm5lclRleHQgfHwgZWxtLnRleHRDb250ZW50O1xuICAgIH07XG4gICAgY29uc3QgZ2V0T3JHZW5lcmF0ZUlkID0gZWxtID0+IHtcbiAgICAgIHJldHVybiBlbG0uaWQgPyBlbG0uaWQgOiBnZW5lcmF0ZSQ2KCdoJyk7XG4gICAgfTtcbiAgICBjb25zdCBpc0FuY2hvciA9IGVsbSA9PiB7XG4gICAgICByZXR1cm4gZWxtICYmIGVsbS5ub2RlTmFtZSA9PT0gJ0EnICYmIChlbG0uaWQgfHwgZWxtLm5hbWUpICE9PSB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBjb25zdCBpc1ZhbGlkQW5jaG9yID0gZWxtID0+IHtcbiAgICAgIHJldHVybiBpc0FuY2hvcihlbG0pICYmIGlzRWRpdGFibGUoZWxtKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzSGVhZGVyID0gZWxtID0+IHtcbiAgICAgIHJldHVybiBlbG0gJiYgL14oSFsxLTZdKSQvLnRlc3QoZWxtLm5vZGVOYW1lKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzRWRpdGFibGUgPSBlbG0gPT4ge1xuICAgICAgcmV0dXJuIGlzQ2hpbGRPZkNvbnRlbnRFZGl0YWJsZVRydWUoZWxtKSAmJiAhaXNDb250ZW50RWRpdGFibGVGYWxzZShlbG0pO1xuICAgIH07XG4gICAgY29uc3QgaXNWYWxpZEhlYWRlciA9IGVsbSA9PiB7XG4gICAgICByZXR1cm4gaXNIZWFkZXIoZWxtKSAmJiBpc0VkaXRhYmxlKGVsbSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRMZXZlbCA9IGVsbSA9PiB7XG4gICAgICByZXR1cm4gaXNIZWFkZXIoZWxtKSA/IHBhcnNlSW50KGVsbS5ub2RlTmFtZS5zdWJzdHIoMSksIDEwKSA6IDA7XG4gICAgfTtcbiAgICBjb25zdCBoZWFkZXJUYXJnZXQgPSBlbG0gPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgaGVhZGVySWQgPSBnZXRPckdlbmVyYXRlSWQoZWxtKTtcbiAgICAgIGNvbnN0IGF0dGFjaCA9ICgpID0+IHtcbiAgICAgICAgZWxtLmlkID0gaGVhZGVySWQ7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGNyZWF0ZSQxKCdoZWFkZXInLCAoX2EgPSBnZXRFbGVtZW50VGV4dChlbG0pKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJywgJyMnICsgaGVhZGVySWQsIGdldExldmVsKGVsbSksIGF0dGFjaCk7XG4gICAgfTtcbiAgICBjb25zdCBhbmNob3JUYXJnZXQgPSBlbG0gPT4ge1xuICAgICAgY29uc3QgYW5jaG9ySWQgPSBlbG0uaWQgfHwgZWxtLm5hbWU7XG4gICAgICBjb25zdCBhbmNob3JUZXh0ID0gZ2V0RWxlbWVudFRleHQoZWxtKTtcbiAgICAgIHJldHVybiBjcmVhdGUkMSgnYW5jaG9yJywgYW5jaG9yVGV4dCA/IGFuY2hvclRleHQgOiAnIycgKyBhbmNob3JJZCwgJyMnICsgYW5jaG9ySWQsIDAsIG5vb3ApO1xuICAgIH07XG4gICAgY29uc3QgZ2V0SGVhZGVyVGFyZ2V0cyA9IGVsbXMgPT4ge1xuICAgICAgcmV0dXJuIG1hcCQyKGZpbHRlciQyKGVsbXMsIGlzVmFsaWRIZWFkZXIpLCBoZWFkZXJUYXJnZXQpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0QW5jaG9yVGFyZ2V0cyA9IGVsbXMgPT4ge1xuICAgICAgcmV0dXJuIG1hcCQyKGZpbHRlciQyKGVsbXMsIGlzVmFsaWRBbmNob3IpLCBhbmNob3JUYXJnZXQpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0VGFyZ2V0RWxlbWVudHMgPSBlbG0gPT4ge1xuICAgICAgY29uc3QgZWxtcyA9IHNlbGVjdCgnaDEsaDIsaDMsaDQsaDUsaDYsYTpub3QoW2hyZWZdKScsIGVsbSk7XG4gICAgICByZXR1cm4gZWxtcztcbiAgICB9O1xuICAgIGNvbnN0IGhhc1RpdGxlID0gdGFyZ2V0ID0+IHtcbiAgICAgIHJldHVybiB0cmltKHRhcmdldC50aXRsZSkubGVuZ3RoID4gMDtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmQgPSBlbG0gPT4ge1xuICAgICAgY29uc3QgZWxtcyA9IGdldFRhcmdldEVsZW1lbnRzKGVsbSk7XG4gICAgICByZXR1cm4gZmlsdGVyJDIoZ2V0SGVhZGVyVGFyZ2V0cyhlbG1zKS5jb25jYXQoZ2V0QW5jaG9yVGFyZ2V0cyhlbG1zKSksIGhhc1RpdGxlKTtcbiAgICB9O1xuICAgIGNvbnN0IExpbmtUYXJnZXRzID0geyBmaW5kIH07XG5cbiAgICBjb25zdCBTVE9SQUdFX0tFWSA9ICd0aW55bWNlLXVybC1oaXN0b3J5JztcbiAgICBjb25zdCBISVNUT1JZX0xFTkdUSCA9IDU7XG4gICAgY29uc3QgaXNIdHRwVXJsID0gdXJsID0+IGlzU3RyaW5nKHVybCkgJiYgL15odHRwcz8vLnRlc3QodXJsKTtcbiAgICBjb25zdCBpc0FycmF5T2ZVcmwgPSBhID0+IGlzQXJyYXkoYSkgJiYgYS5sZW5ndGggPD0gSElTVE9SWV9MRU5HVEggJiYgZm9yYWxsKGEsIGlzSHR0cFVybCk7XG4gICAgY29uc3QgaXNSZWNvcmRPZlVybEFycmF5ID0gciA9PiBpc09iamVjdChyKSAmJiBmaW5kJDQociwgdmFsdWUgPT4gIWlzQXJyYXlPZlVybCh2YWx1ZSkpLmlzTm9uZSgpO1xuICAgIGNvbnN0IGdldEFsbEhpc3RvcnkgPSAoKSA9PiB7XG4gICAgICBjb25zdCB1bnBhcnNlZEhpc3RvcnkgPSBnbG9iYWwkNC5nZXRJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgIGlmICh1bnBhcnNlZEhpc3RvcnkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgbGV0IGhpc3Rvcnk7XG4gICAgICB0cnkge1xuICAgICAgICBoaXN0b3J5ID0gSlNPTi5wYXJzZSh1bnBhcnNlZEhpc3RvcnkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0xvY2FsIHN0b3JhZ2UgJyArIFNUT1JBR0VfS0VZICsgJyB3YXMgbm90IHZhbGlkIEpTT04nLCBlKTtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNSZWNvcmRPZlVybEFycmF5KGhpc3RvcnkpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdMb2NhbCBzdG9yYWdlICcgKyBTVE9SQUdFX0tFWSArICcgd2FzIG5vdCB2YWxpZCBmb3JtYXQnLCBoaXN0b3J5KTtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhpc3Rvcnk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRBbGxIaXN0b3J5ID0gaGlzdG9yeSA9PiB7XG4gICAgICBpZiAoIWlzUmVjb3JkT2ZVcmxBcnJheShoaXN0b3J5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JhZCBmb3JtYXQgZm9yIGhpc3Rvcnk6XFxuJyArIEpTT04uc3RyaW5naWZ5KGhpc3RvcnkpKTtcbiAgICAgIH1cbiAgICAgIGdsb2JhbCQ0LnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KGhpc3RvcnkpKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEhpc3RvcnkgPSBmaWxlVHlwZSA9PiB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gZ2V0QWxsSGlzdG9yeSgpO1xuICAgICAgcmV0dXJuIGdldCRnKGhpc3RvcnksIGZpbGVUeXBlKS5nZXRPcihbXSk7XG4gICAgfTtcbiAgICBjb25zdCBhZGRUb0hpc3RvcnkgPSAodXJsLCBmaWxlVHlwZSkgPT4ge1xuICAgICAgaWYgKCFpc0h0dHBVcmwodXJsKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBoaXN0b3J5ID0gZ2V0QWxsSGlzdG9yeSgpO1xuICAgICAgY29uc3QgaXRlbXMgPSBnZXQkZyhoaXN0b3J5LCBmaWxlVHlwZSkuZ2V0T3IoW10pO1xuICAgICAgY29uc3QgaXRlbXNXaXRob3V0VXJsID0gZmlsdGVyJDIoaXRlbXMsIGl0ZW0gPT4gaXRlbSAhPT0gdXJsKTtcbiAgICAgIGhpc3RvcnlbZmlsZVR5cGVdID0gW3VybF0uY29uY2F0KGl0ZW1zV2l0aG91dFVybCkuc2xpY2UoMCwgSElTVE9SWV9MRU5HVEgpO1xuICAgICAgc2V0QWxsSGlzdG9yeShoaXN0b3J5KTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNUcnV0aHkgPSB2YWx1ZSA9PiAhIXZhbHVlO1xuICAgIGNvbnN0IG1ha2VNYXAgPSB2YWx1ZSA9PiBtYXAkMShnbG9iYWwkMS5tYWtlTWFwKHZhbHVlLCAvWywgXS8pLCBpc1RydXRoeSk7XG4gICAgY29uc3QgZ2V0UGlja2VyID0gZWRpdG9yID0+IE9wdGlvbmFsLmZyb20oZ2V0RmlsZVBpY2tlckNhbGxiYWNrKGVkaXRvcikpO1xuICAgIGNvbnN0IGdldFBpY2tlclR5cGVzID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IG9wdEZpbGVUeXBlcyA9IE9wdGlvbmFsLmZyb20oZ2V0RmlsZVBpY2tlclR5cGVzKGVkaXRvcikpLmZpbHRlcihpc1RydXRoeSkubWFwKG1ha2VNYXApO1xuICAgICAgcmV0dXJuIGdldFBpY2tlcihlZGl0b3IpLmZvbGQobmV2ZXIsIF9waWNrZXIgPT4gb3B0RmlsZVR5cGVzLmZvbGQoYWx3YXlzLCB0eXBlcyA9PiBrZXlzKHR5cGVzKS5sZW5ndGggPiAwID8gdHlwZXMgOiBmYWxzZSkpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0UGlja2VyU2V0dGluZyA9IChlZGl0b3IsIGZpbGV0eXBlKSA9PiB7XG4gICAgICBjb25zdCBwaWNrZXJUeXBlcyA9IGdldFBpY2tlclR5cGVzKGVkaXRvcik7XG4gICAgICBpZiAoaXNCb29sZWFuKHBpY2tlclR5cGVzKSkge1xuICAgICAgICByZXR1cm4gcGlja2VyVHlwZXMgPyBnZXRQaWNrZXIoZWRpdG9yKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwaWNrZXJUeXBlc1tmaWxldHlwZV0gPyBnZXRQaWNrZXIoZWRpdG9yKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdldFVybFBpY2tlciA9IChlZGl0b3IsIGZpbGV0eXBlKSA9PiBnZXRQaWNrZXJTZXR0aW5nKGVkaXRvciwgZmlsZXR5cGUpLm1hcChwaWNrZXIgPT4gZW50cnkgPT4gRnV0dXJlLm51KGNvbXBsZXRlciA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gKHZhbHVlLCBtZXRhKSA9PiB7XG4gICAgICAgIGlmICghaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB2YWx1ZSB0byBiZSBzdHJpbmcnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YSAhPT0gdW5kZWZpbmVkICYmICFpc09iamVjdChtZXRhKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgbWV0YSB0byBiZSBhIG9iamVjdCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHIgPSB7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgbWV0YVxuICAgICAgICB9O1xuICAgICAgICBjb21wbGV0ZXIocik7XG4gICAgICB9O1xuICAgICAgY29uc3QgbWV0YSA9IHtcbiAgICAgICAgZmlsZXR5cGUsXG4gICAgICAgIGZpZWxkbmFtZTogZW50cnkuZmllbGRuYW1lLFxuICAgICAgICAuLi5PcHRpb25hbC5mcm9tKGVudHJ5Lm1ldGEpLmdldE9yKHt9KVxuICAgICAgfTtcbiAgICAgIHBpY2tlci5jYWxsKGVkaXRvciwgaGFuZGxlciwgZW50cnkudmFsdWUsIG1ldGEpO1xuICAgIH0pKTtcbiAgICBjb25zdCBnZXRUZXh0U2V0dGluZyA9IHZhbHVlID0+IE9wdGlvbmFsLmZyb20odmFsdWUpLmZpbHRlcihpc1N0cmluZykuZ2V0T3JVbmRlZmluZWQoKTtcbiAgICBjb25zdCBnZXRMaW5rSW5mb3JtYXRpb24gPSBlZGl0b3IgPT4ge1xuICAgICAgaWYgKCF1c2VUeXBlYWhlYWRVcmxzKGVkaXRvcikpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgdGFyZ2V0czogTGlua1RhcmdldHMuZmluZChlZGl0b3IuZ2V0Qm9keSgpKSxcbiAgICAgICAgYW5jaG9yVG9wOiBnZXRUZXh0U2V0dGluZyhnZXRBbmNob3JUb3AoZWRpdG9yKSksXG4gICAgICAgIGFuY2hvckJvdHRvbTogZ2V0VGV4dFNldHRpbmcoZ2V0QW5jaG9yQm90dG9tKGVkaXRvcikpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFZhbGlkYXRpb25IYW5kbGVyID0gZWRpdG9yID0+IE9wdGlvbmFsLmZyb20oZ2V0RmlsZVBpY2tlclZhbGlkYXRvckhhbmRsZXIoZWRpdG9yKSk7XG4gICAgY29uc3QgVXJsSW5wdXRCYWNrc3RhZ2UgPSBlZGl0b3IgPT4gKHtcbiAgICAgIGdldEhpc3RvcnksXG4gICAgICBhZGRUb0hpc3RvcnksXG4gICAgICBnZXRMaW5rSW5mb3JtYXRpb246ICgpID0+IGdldExpbmtJbmZvcm1hdGlvbihlZGl0b3IpLFxuICAgICAgZ2V0VmFsaWRhdGlvbkhhbmRsZXI6ICgpID0+IGdldFZhbGlkYXRpb25IYW5kbGVyKGVkaXRvciksXG4gICAgICBnZXRVcmxQaWNrZXI6IGZpbGV0eXBlID0+IGdldFVybFBpY2tlcihlZGl0b3IsIGZpbGV0eXBlKVxuICAgIH0pO1xuXG4gICAgY29uc3QgaW5pdCQ2ID0gKGxhenlTaW5rcywgZWRpdG9yLCBsYXp5QW5jaG9yYmFyLCBsYXp5Qm90dG9tQW5jaG9yQmFyKSA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0TWVudVN0YXRlID0gQ2VsbChmYWxzZSk7XG4gICAgICBjb25zdCB0b29sYmFyID0gSGVhZGVyQmFja3N0YWdlKGVkaXRvcik7XG4gICAgICBjb25zdCBwcm92aWRlcnMgPSB7XG4gICAgICAgIGljb25zOiAoKSA9PiBlZGl0b3IudWkucmVnaXN0cnkuZ2V0QWxsKCkuaWNvbnMsXG4gICAgICAgIG1lbnVJdGVtczogKCkgPT4gZWRpdG9yLnVpLnJlZ2lzdHJ5LmdldEFsbCgpLm1lbnVJdGVtcyxcbiAgICAgICAgdHJhbnNsYXRlOiBnbG9iYWwkOC50cmFuc2xhdGUsXG4gICAgICAgIGlzRGlzYWJsZWQ6ICgpID0+IGVkaXRvci5tb2RlLmlzUmVhZE9ubHkoKSB8fCAhZWRpdG9yLnVpLmlzRW5hYmxlZCgpLFxuICAgICAgICBnZXRPcHRpb246IGVkaXRvci5vcHRpb25zLmdldFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHVybGlucHV0ID0gVXJsSW5wdXRCYWNrc3RhZ2UoZWRpdG9yKTtcbiAgICAgIGNvbnN0IHN0eWxlcyA9IGluaXQkNyhlZGl0b3IpO1xuICAgICAgY29uc3QgY29sb3JpbnB1dCA9IENvbG9ySW5wdXRCYWNrc3RhZ2UoZWRpdG9yKTtcbiAgICAgIGNvbnN0IGRpYWxvZ1NldHRpbmdzID0gRGlhbG9nQmFja3N0YWdlKGVkaXRvcik7XG4gICAgICBjb25zdCBpc0NvbnRleHRNZW51T3BlbiA9ICgpID0+IGNvbnRleHRNZW51U3RhdGUuZ2V0KCk7XG4gICAgICBjb25zdCBzZXRDb250ZXh0TWVudVN0YXRlID0gc3RhdGUgPT4gY29udGV4dE1lbnVTdGF0ZS5zZXQoc3RhdGUpO1xuICAgICAgY29uc3QgY29tbW9uQmFja3N0YWdlID0ge1xuICAgICAgICBzaGFyZWQ6IHtcbiAgICAgICAgICBwcm92aWRlcnMsXG4gICAgICAgICAgYW5jaG9yczogZ2V0QW5jaG9ycyhlZGl0b3IsIGxhenlBbmNob3JiYXIsIGxhenlCb3R0b21BbmNob3JCYXIsIHRvb2xiYXIuaXNQb3NpdGlvbmVkQXRUb3ApLFxuICAgICAgICAgIGhlYWRlcjogdG9vbGJhclxuICAgICAgICB9LFxuICAgICAgICB1cmxpbnB1dCxcbiAgICAgICAgc3R5bGVzLFxuICAgICAgICBjb2xvcmlucHV0LFxuICAgICAgICBkaWFsb2c6IGRpYWxvZ1NldHRpbmdzLFxuICAgICAgICBpc0NvbnRleHRNZW51T3BlbixcbiAgICAgICAgc2V0Q29udGV4dE1lbnVTdGF0ZVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBvcHVwQmFja3N0YWdlID0ge1xuICAgICAgICAuLi5jb21tb25CYWNrc3RhZ2UsXG4gICAgICAgIHNoYXJlZDoge1xuICAgICAgICAgIC4uLmNvbW1vbkJhY2tzdGFnZS5zaGFyZWQsXG4gICAgICAgICAgaW50ZXJwcmV0ZXI6IHMgPT4gaW50ZXJwcmV0V2l0aG91dEZvcm0ocywge30sIHBvcHVwQmFja3N0YWdlKSxcbiAgICAgICAgICBnZXRTaW5rOiBsYXp5U2lua3MucG9wdXBcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGRpYWxvZ0JhY2tzdGFnZSA9IHtcbiAgICAgICAgLi4uY29tbW9uQmFja3N0YWdlLFxuICAgICAgICBzaGFyZWQ6IHtcbiAgICAgICAgICAuLi5jb21tb25CYWNrc3RhZ2Uuc2hhcmVkLFxuICAgICAgICAgIGludGVycHJldGVyOiBzID0+IGludGVycHJldFdpdGhvdXRGb3JtKHMsIHt9LCBkaWFsb2dCYWNrc3RhZ2UpLFxuICAgICAgICAgIGdldFNpbms6IGxhenlTaW5rcy5kaWFsb2dcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBvcHVwOiBwb3B1cEJhY2tzdGFnZSxcbiAgICAgICAgZGlhbG9nOiBkaWFsb2dCYWNrc3RhZ2VcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHNldHVwJGIgPSAoZWRpdG9yLCBtb3RoZXJzaGlwLCB1aU1vdGhlcnNoaXBzKSA9PiB7XG4gICAgICBjb25zdCBicm9hZGNhc3RFdmVudCA9IChuYW1lLCBldnQpID0+IHtcbiAgICAgICAgZWFjaCQxKFtcbiAgICAgICAgICBtb3RoZXJzaGlwLFxuICAgICAgICAgIC4uLnVpTW90aGVyc2hpcHNcbiAgICAgICAgXSwgbSA9PiB7XG4gICAgICAgICAgbS5icm9hZGNhc3RFdmVudChuYW1lLCBldnQpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBicm9hZGNhc3RPbiA9IChjaGFubmVsLCBtZXNzYWdlKSA9PiB7XG4gICAgICAgIGVhY2gkMShbXG4gICAgICAgICAgbW90aGVyc2hpcCxcbiAgICAgICAgICAuLi51aU1vdGhlcnNoaXBzXG4gICAgICAgIF0sIG0gPT4ge1xuICAgICAgICAgIG0uYnJvYWRjYXN0T24oW2NoYW5uZWxdLCBtZXNzYWdlKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZmlyZURpc21pc3NQb3B1cHMgPSBldnQgPT4gYnJvYWRjYXN0T24oZGlzbWlzc1BvcHVwcygpLCB7IHRhcmdldDogZXZ0LnRhcmdldCB9KTtcbiAgICAgIGNvbnN0IGRvYyA9IGdldERvY3VtZW50KCk7XG4gICAgICBjb25zdCBvblRvdWNoc3RhcnQgPSBiaW5kKGRvYywgJ3RvdWNoc3RhcnQnLCBmaXJlRGlzbWlzc1BvcHVwcyk7XG4gICAgICBjb25zdCBvblRvdWNobW92ZSA9IGJpbmQoZG9jLCAndG91Y2htb3ZlJywgZXZ0ID0+IGJyb2FkY2FzdEV2ZW50KGRvY3VtZW50VG91Y2htb3ZlKCksIGV2dCkpO1xuICAgICAgY29uc3Qgb25Ub3VjaGVuZCA9IGJpbmQoZG9jLCAndG91Y2hlbmQnLCBldnQgPT4gYnJvYWRjYXN0RXZlbnQoZG9jdW1lbnRUb3VjaGVuZCgpLCBldnQpKTtcbiAgICAgIGNvbnN0IG9uTW91c2Vkb3duID0gYmluZChkb2MsICdtb3VzZWRvd24nLCBmaXJlRGlzbWlzc1BvcHVwcyk7XG4gICAgICBjb25zdCBvbk1vdXNldXAgPSBiaW5kKGRvYywgJ21vdXNldXAnLCBldnQgPT4ge1xuICAgICAgICBpZiAoZXZ0LnJhdy5idXR0b24gPT09IDApIHtcbiAgICAgICAgICBicm9hZGNhc3RPbihtb3VzZVJlbGVhc2VkKCksIHsgdGFyZ2V0OiBldnQudGFyZ2V0IH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG9uQ29udGVudENsaWNrID0gcmF3ID0+IGJyb2FkY2FzdE9uKGRpc21pc3NQb3B1cHMoKSwgeyB0YXJnZXQ6IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJhdy50YXJnZXQpIH0pO1xuICAgICAgY29uc3Qgb25Db250ZW50TW91c2V1cCA9IHJhdyA9PiB7XG4gICAgICAgIGlmIChyYXcuYnV0dG9uID09PSAwKSB7XG4gICAgICAgICAgYnJvYWRjYXN0T24obW91c2VSZWxlYXNlZCgpLCB7IHRhcmdldDogU3VnYXJFbGVtZW50LmZyb21Eb20ocmF3LnRhcmdldCkgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBvbkNvbnRlbnRNb3VzZWRvd24gPSAoKSA9PiB7XG4gICAgICAgIGVhY2gkMShlZGl0b3IuZWRpdG9yTWFuYWdlci5nZXQoKSwgbG9vcEVkaXRvciA9PiB7XG4gICAgICAgICAgaWYgKGVkaXRvciAhPT0gbG9vcEVkaXRvcikge1xuICAgICAgICAgICAgbG9vcEVkaXRvci5kaXNwYXRjaCgnRGlzbWlzc1BvcHVwcycsIHsgcmVsYXRlZFRhcmdldDogZWRpdG9yIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25XaW5kb3dTY3JvbGwgPSBldnQgPT4gYnJvYWRjYXN0RXZlbnQod2luZG93U2Nyb2xsKCksIGZyb21SYXdFdmVudChldnQpKTtcbiAgICAgIGNvbnN0IG9uV2luZG93UmVzaXplID0gZXZ0ID0+IHtcbiAgICAgICAgYnJvYWRjYXN0T24ocmVwb3NpdGlvblBvcHVwcygpLCB7fSk7XG4gICAgICAgIGJyb2FkY2FzdEV2ZW50KHdpbmRvd1Jlc2l6ZSgpLCBmcm9tUmF3RXZlbnQoZXZ0KSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZG9zID0gZ2V0Um9vdE5vZGUoU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEVsZW1lbnQoKSkpO1xuICAgICAgY29uc3Qgb25FbGVtZW50U2Nyb2xsID0gY2FwdHVyZShkb3MsICdzY3JvbGwnLCBldnQgPT4ge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGMgPSBlZGl0b3IuZ2V0Q29udGFpbmVyKCk7XG4gICAgICAgICAgaWYgKGMgIT09IHVuZGVmaW5lZCAmJiBjICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRTY3JvbGxpbmdDb250ZXh0ID0gZGV0ZWN0V2hlblNwbGl0VWlNb2RlKGVkaXRvciwgbW90aGVyc2hpcC5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVycyA9IG9wdFNjcm9sbGluZ0NvbnRleHQubWFwKHNjID0+IFtcbiAgICAgICAgICAgICAgc2MuZWxlbWVudCxcbiAgICAgICAgICAgICAgLi4uc2Mub3RoZXJzXG4gICAgICAgICAgICBdKS5nZXRPcihbXSk7XG4gICAgICAgICAgICBpZiAoZXhpc3RzKHNjcm9sbGVycywgcyA9PiBlcShzLCBldnQudGFyZ2V0KSkpIHtcbiAgICAgICAgICAgICAgZWRpdG9yLmRpc3BhdGNoKCdFbGVtZW50U2Nyb2xsJywgeyB0YXJnZXQ6IGV2dC50YXJnZXQuZG9tIH0pO1xuICAgICAgICAgICAgICBicm9hZGNhc3RFdmVudChleHRlcm5hbEVsZW1lbnRTY3JvbGwoKSwgZXZ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBvbkVkaXRvclJlc2l6ZSA9ICgpID0+IGJyb2FkY2FzdE9uKHJlcG9zaXRpb25Qb3B1cHMoKSwge30pO1xuICAgICAgY29uc3Qgb25FZGl0b3JQcm9ncmVzcyA9IGV2dCA9PiB7XG4gICAgICAgIGlmIChldnQuc3RhdGUpIHtcbiAgICAgICAgICBicm9hZGNhc3RPbihkaXNtaXNzUG9wdXBzKCksIHsgdGFyZ2V0OiBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Q29udGFpbmVyKCkpIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25EaXNtaXNzUG9wdXBzID0gZXZlbnQgPT4ge1xuICAgICAgICBicm9hZGNhc3RPbihkaXNtaXNzUG9wdXBzKCksIHsgdGFyZ2V0OiBTdWdhckVsZW1lbnQuZnJvbURvbShldmVudC5yZWxhdGVkVGFyZ2V0LmdldENvbnRhaW5lcigpKSB9KTtcbiAgICAgIH07XG4gICAgICBlZGl0b3Iub24oJ1Bvc3RSZW5kZXInLCAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5vbignY2xpY2snLCBvbkNvbnRlbnRDbGljayk7XG4gICAgICAgIGVkaXRvci5vbigndGFwJywgb25Db250ZW50Q2xpY2spO1xuICAgICAgICBlZGl0b3Iub24oJ21vdXNldXAnLCBvbkNvbnRlbnRNb3VzZXVwKTtcbiAgICAgICAgZWRpdG9yLm9uKCdtb3VzZWRvd24nLCBvbkNvbnRlbnRNb3VzZWRvd24pO1xuICAgICAgICBlZGl0b3Iub24oJ1Njcm9sbFdpbmRvdycsIG9uV2luZG93U2Nyb2xsKTtcbiAgICAgICAgZWRpdG9yLm9uKCdSZXNpemVXaW5kb3cnLCBvbldpbmRvd1Jlc2l6ZSk7XG4gICAgICAgIGVkaXRvci5vbignUmVzaXplRWRpdG9yJywgb25FZGl0b3JSZXNpemUpO1xuICAgICAgICBlZGl0b3Iub24oJ0FmdGVyUHJvZ3Jlc3NTdGF0ZScsIG9uRWRpdG9yUHJvZ3Jlc3MpO1xuICAgICAgICBlZGl0b3Iub24oJ0Rpc21pc3NQb3B1cHMnLCBvbkRpc21pc3NQb3B1cHMpO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ3JlbW92ZScsICgpID0+IHtcbiAgICAgICAgZWRpdG9yLm9mZignY2xpY2snLCBvbkNvbnRlbnRDbGljayk7XG4gICAgICAgIGVkaXRvci5vZmYoJ3RhcCcsIG9uQ29udGVudENsaWNrKTtcbiAgICAgICAgZWRpdG9yLm9mZignbW91c2V1cCcsIG9uQ29udGVudE1vdXNldXApO1xuICAgICAgICBlZGl0b3Iub2ZmKCdtb3VzZWRvd24nLCBvbkNvbnRlbnRNb3VzZWRvd24pO1xuICAgICAgICBlZGl0b3Iub2ZmKCdTY3JvbGxXaW5kb3cnLCBvbldpbmRvd1Njcm9sbCk7XG4gICAgICAgIGVkaXRvci5vZmYoJ1Jlc2l6ZVdpbmRvdycsIG9uV2luZG93UmVzaXplKTtcbiAgICAgICAgZWRpdG9yLm9mZignUmVzaXplRWRpdG9yJywgb25FZGl0b3JSZXNpemUpO1xuICAgICAgICBlZGl0b3Iub2ZmKCdBZnRlclByb2dyZXNzU3RhdGUnLCBvbkVkaXRvclByb2dyZXNzKTtcbiAgICAgICAgZWRpdG9yLm9mZignRGlzbWlzc1BvcHVwcycsIG9uRGlzbWlzc1BvcHVwcyk7XG4gICAgICAgIG9uTW91c2Vkb3duLnVuYmluZCgpO1xuICAgICAgICBvblRvdWNoc3RhcnQudW5iaW5kKCk7XG4gICAgICAgIG9uVG91Y2htb3ZlLnVuYmluZCgpO1xuICAgICAgICBvblRvdWNoZW5kLnVuYmluZCgpO1xuICAgICAgICBvbk1vdXNldXAudW5iaW5kKCk7XG4gICAgICAgIG9uRWxlbWVudFNjcm9sbC51bmJpbmQoKTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdkZXRhY2gnLCAoKSA9PiB7XG4gICAgICAgIGVhY2gkMShbXG4gICAgICAgICAgbW90aGVyc2hpcCxcbiAgICAgICAgICAuLi51aU1vdGhlcnNoaXBzXG4gICAgICAgIF0sIGRldGFjaFN5c3RlbSk7XG4gICAgICAgIGVhY2gkMShbXG4gICAgICAgICAgbW90aGVyc2hpcCxcbiAgICAgICAgICAuLi51aU1vdGhlcnNoaXBzXG4gICAgICAgIF0sIG0gPT4gbS5kZXN0cm95KCkpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHBhcnRzJGEgPSBBbGxveVBhcnRzO1xuICAgIGNvbnN0IHBhcnRUeXBlID0gUGFydFR5cGU7XG5cbiAgICBjb25zdCBzY2hlbWEkZiA9IGNvbnN0YW50JDEoW1xuICAgICAgZGVmYXVsdGVkKCdzaGVsbCcsIGZhbHNlKSxcbiAgICAgIHJlcXVpcmVkJDEoJ21ha2VJdGVtJyksXG4gICAgICBkZWZhdWx0ZWQoJ3NldHVwSXRlbScsIG5vb3ApLFxuICAgICAgU2tldGNoQmVoYXZpb3Vycy5maWVsZCgnbGlzdEJlaGF2aW91cnMnLCBbUmVwbGFjaW5nXSlcbiAgICBdKTtcbiAgICBjb25zdCBjdXN0b21MaXN0RGV0YWlsID0gKCkgPT4gKHsgYmVoYXZpb3VyczogZGVyaXZlJDEoW1JlcGxhY2luZy5jb25maWcoe30pXSkgfSk7XG4gICAgY29uc3QgaXRlbXNQYXJ0ID0gb3B0aW9uYWwoe1xuICAgICAgbmFtZTogJ2l0ZW1zJyxcbiAgICAgIG92ZXJyaWRlczogY3VzdG9tTGlzdERldGFpbFxuICAgIH0pO1xuICAgIGNvbnN0IHBhcnRzJDkgPSBjb25zdGFudCQxKFtpdGVtc1BhcnRdKTtcbiAgICBjb25zdCBuYW1lID0gY29uc3RhbnQkMSgnQ3VzdG9tTGlzdCcpO1xuXG4gICAgY29uc3QgZmFjdG9yeSRmID0gKGRldGFpbCwgY29tcG9uZW50cywgX3NwZWMsIF9leHRlcm5hbCkgPT4ge1xuICAgICAgY29uc3Qgc2V0SXRlbXMgPSAobGlzdCwgaXRlbXMpID0+IHtcbiAgICAgICAgZ2V0TGlzdENvbnRhaW5lcihsaXN0KS5mb2xkKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdDdXN0b20gTGlzdCB3YXMgZGVmaW5lZCB0byBub3QgYmUgYSBzaGVsbCwgYnV0IG5vIGl0ZW0gY29udGFpbmVyIHdhcyBzcGVjaWZpZWQgaW4gY29tcG9uZW50cycpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ3VzdG9tIExpc3Qgd2FzIGRlZmluZWQgdG8gbm90IGJlIGEgc2hlbGwsIGJ1dCBubyBpdGVtIGNvbnRhaW5lciB3YXMgc3BlY2lmaWVkIGluIGNvbXBvbmVudHMnKTtcbiAgICAgICAgfSwgY29udGFpbmVyID0+IHtcbiAgICAgICAgICBjb25zdCBpdGVtQ29tcHMgPSBSZXBsYWNpbmcuY29udGVudHMoY29udGFpbmVyKTtcbiAgICAgICAgICBjb25zdCBudW1MaXN0c1JlcXVpcmVkID0gaXRlbXMubGVuZ3RoO1xuICAgICAgICAgIGNvbnN0IG51bUxpc3RzVG9BZGQgPSBudW1MaXN0c1JlcXVpcmVkIC0gaXRlbUNvbXBzLmxlbmd0aDtcbiAgICAgICAgICBjb25zdCBpdGVtc1RvQWRkID0gbnVtTGlzdHNUb0FkZCA+IDAgPyByYW5nZSQyKG51bUxpc3RzVG9BZGQsICgpID0+IGRldGFpbC5tYWtlSXRlbSgpKSA6IFtdO1xuICAgICAgICAgIGNvbnN0IGl0ZW1zVG9SZW1vdmUgPSBpdGVtQ29tcHMuc2xpY2UobnVtTGlzdHNSZXF1aXJlZCk7XG4gICAgICAgICAgZWFjaCQxKGl0ZW1zVG9SZW1vdmUsIGl0ZW0gPT4gUmVwbGFjaW5nLnJlbW92ZShjb250YWluZXIsIGl0ZW0pKTtcbiAgICAgICAgICBlYWNoJDEoaXRlbXNUb0FkZCwgaXRlbSA9PiBSZXBsYWNpbmcuYXBwZW5kKGNvbnRhaW5lciwgaXRlbSkpO1xuICAgICAgICAgIGNvbnN0IGJ1aWx0TGlzdHMgPSBSZXBsYWNpbmcuY29udGVudHMoY29udGFpbmVyKTtcbiAgICAgICAgICBlYWNoJDEoYnVpbHRMaXN0cywgKGl0ZW0sIGkpID0+IHtcbiAgICAgICAgICAgIGRldGFpbC5zZXR1cEl0ZW0obGlzdCwgaXRlbSwgaXRlbXNbaV0sIGkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBleHRyYSA9IGRldGFpbC5zaGVsbCA/IHtcbiAgICAgICAgYmVoYXZpb3VyczogW1JlcGxhY2luZy5jb25maWcoe30pXSxcbiAgICAgICAgY29tcG9uZW50czogW11cbiAgICAgIH0gOiB7XG4gICAgICAgIGJlaGF2aW91cnM6IFtdLFxuICAgICAgICBjb21wb25lbnRzXG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0TGlzdENvbnRhaW5lciA9IGNvbXBvbmVudCA9PiBkZXRhaWwuc2hlbGwgPyBPcHRpb25hbC5zb21lKGNvbXBvbmVudCkgOiBnZXRQYXJ0KGNvbXBvbmVudCwgZGV0YWlsLCAnaXRlbXMnKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVpZDogZGV0YWlsLnVpZCxcbiAgICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgICBjb21wb25lbnRzOiBleHRyYS5jb21wb25lbnRzLFxuICAgICAgICBiZWhhdmlvdXJzOiBhdWdtZW50KGRldGFpbC5saXN0QmVoYXZpb3VycywgZXh0cmEuYmVoYXZpb3VycyksXG4gICAgICAgIGFwaXM6IHsgc2V0SXRlbXMgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IEN1c3RvbUxpc3QgPSBjb21wb3NpdGUoe1xuICAgICAgbmFtZTogbmFtZSgpLFxuICAgICAgY29uZmlnRmllbGRzOiBzY2hlbWEkZigpLFxuICAgICAgcGFydEZpZWxkczogcGFydHMkOSgpLFxuICAgICAgZmFjdG9yeTogZmFjdG9yeSRmLFxuICAgICAgYXBpczoge1xuICAgICAgICBzZXRJdGVtczogKGFwaXMsIGxpc3QsIGl0ZW1zKSA9PiB7XG4gICAgICAgICAgYXBpcy5zZXRJdGVtcyhsaXN0LCBpdGVtcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHNjaGVtYSRlID0gY29uc3RhbnQkMShbXG4gICAgICByZXF1aXJlZCQxKCdkb20nKSxcbiAgICAgIGRlZmF1bHRlZCgnc2hlbGwnLCB0cnVlKSxcbiAgICAgIGZpZWxkKCd0b29sYmFyQmVoYXZpb3VycycsIFtSZXBsYWNpbmddKVxuICAgIF0pO1xuICAgIGNvbnN0IGVuaGFuY2VHcm91cHMgPSAoKSA9PiAoeyBiZWhhdmlvdXJzOiBkZXJpdmUkMShbUmVwbGFjaW5nLmNvbmZpZyh7fSldKSB9KTtcbiAgICBjb25zdCBwYXJ0cyQ4ID0gY29uc3RhbnQkMShbb3B0aW9uYWwoe1xuICAgICAgICBuYW1lOiAnZ3JvdXBzJyxcbiAgICAgICAgb3ZlcnJpZGVzOiBlbmhhbmNlR3JvdXBzXG4gICAgICB9KV0pO1xuXG4gICAgY29uc3QgZmFjdG9yeSRlID0gKGRldGFpbCwgY29tcG9uZW50cywgX3NwZWMsIF9leHRlcm5hbHMpID0+IHtcbiAgICAgIGNvbnN0IHNldEdyb3VwcyA9ICh0b29sYmFyLCBncm91cHMpID0+IHtcbiAgICAgICAgZ2V0R3JvdXBDb250YWluZXIodG9vbGJhcikuZm9sZCgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVG9vbGJhciB3YXMgZGVmaW5lZCB0byBub3QgYmUgYSBzaGVsbCwgYnV0IG5vIGdyb3VwcyBjb250YWluZXIgd2FzIHNwZWNpZmllZCBpbiBjb21wb25lbnRzJyk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb29sYmFyIHdhcyBkZWZpbmVkIHRvIG5vdCBiZSBhIHNoZWxsLCBidXQgbm8gZ3JvdXBzIGNvbnRhaW5lciB3YXMgc3BlY2lmaWVkIGluIGNvbXBvbmVudHMnKTtcbiAgICAgICAgfSwgY29udGFpbmVyID0+IHtcbiAgICAgICAgICBSZXBsYWNpbmcuc2V0KGNvbnRhaW5lciwgZ3JvdXBzKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0R3JvdXBDb250YWluZXIgPSBjb21wb25lbnQgPT4gZGV0YWlsLnNoZWxsID8gT3B0aW9uYWwuc29tZShjb21wb25lbnQpIDogZ2V0UGFydChjb21wb25lbnQsIGRldGFpbCwgJ2dyb3VwcycpO1xuICAgICAgY29uc3QgZXh0cmEgPSBkZXRhaWwuc2hlbGwgPyB7XG4gICAgICAgIGJlaGF2aW91cnM6IFtSZXBsYWNpbmcuY29uZmlnKHt9KV0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtdXG4gICAgICB9IDoge1xuICAgICAgICBiZWhhdmlvdXJzOiBbXSxcbiAgICAgICAgY29tcG9uZW50c1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVpZDogZGV0YWlsLnVpZCxcbiAgICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgICBjb21wb25lbnRzOiBleHRyYS5jb21wb25lbnRzLFxuICAgICAgICBiZWhhdmlvdXJzOiBhdWdtZW50KGRldGFpbC50b29sYmFyQmVoYXZpb3VycywgZXh0cmEuYmVoYXZpb3VycyksXG4gICAgICAgIGFwaXM6IHtcbiAgICAgICAgICBzZXRHcm91cHMsXG4gICAgICAgICAgcmVmcmVzaDogbm9vcFxuICAgICAgICB9LFxuICAgICAgICBkb21Nb2RpZmljYXRpb246IHsgYXR0cmlidXRlczogeyByb2xlOiAnZ3JvdXAnIH0gfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IFRvb2xiYXIgPSBjb21wb3NpdGUoe1xuICAgICAgbmFtZTogJ1Rvb2xiYXInLFxuICAgICAgY29uZmlnRmllbGRzOiBzY2hlbWEkZSgpLFxuICAgICAgcGFydEZpZWxkczogcGFydHMkOCgpLFxuICAgICAgZmFjdG9yeTogZmFjdG9yeSRlLFxuICAgICAgYXBpczoge1xuICAgICAgICBzZXRHcm91cHM6IChhcGlzLCB0b29sYmFyLCBncm91cHMpID0+IHtcbiAgICAgICAgICBhcGlzLnNldEdyb3Vwcyh0b29sYmFyLCBncm91cHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzZXR1cCRhID0gbm9vcDtcbiAgICBjb25zdCBpc0RvY2tlZCQyID0gbmV2ZXI7XG4gICAgY29uc3QgZ2V0QmVoYXZpb3VycyQxID0gY29uc3RhbnQkMShbXSk7XG5cbiAgICB2YXIgU3RhdGljSGVhZGVyID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIHNldHVwOiBzZXR1cCRhLFxuICAgICAgICBpc0RvY2tlZDogaXNEb2NrZWQkMixcbiAgICAgICAgZ2V0QmVoYXZpb3VyczogZ2V0QmVoYXZpb3VycyQxXG4gICAgfSk7XG5cbiAgICBjb25zdCBnZXRPZmZzZXRQYXJlbnQgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IGlzRml4ZWQgPSBpcyQxKGdldFJhdyhlbGVtZW50LCAncG9zaXRpb24nKSwgJ2ZpeGVkJyk7XG4gICAgICBjb25zdCBvZmZzZXRQYXJlbnQkMSA9IGlzRml4ZWQgPyBPcHRpb25hbC5ub25lKCkgOiBvZmZzZXRQYXJlbnQoZWxlbWVudCk7XG4gICAgICByZXR1cm4gb2Zmc2V0UGFyZW50JDEub3JUaHVuaygoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hcmtlciA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdzcGFuJyk7XG4gICAgICAgIHJldHVybiBwYXJlbnQoZWxlbWVudCkuYmluZChwYXJlbnQgPT4ge1xuICAgICAgICAgIGFwcGVuZCQyKHBhcmVudCwgbWFya2VyKTtcbiAgICAgICAgICBjb25zdCBvZmZzZXRQYXJlbnQkMSA9IG9mZnNldFBhcmVudChtYXJrZXIpO1xuICAgICAgICAgIHJlbW92ZSQ1KG1hcmtlcik7XG4gICAgICAgICAgcmV0dXJuIG9mZnNldFBhcmVudCQxO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0T3JpZ2luID0gZWxlbWVudCA9PiBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkubWFwKGFic29sdXRlJDMpLmdldE9yVGh1bmsoKCkgPT4gU3VnYXJQb3NpdGlvbigwLCAwKSk7XG5cbiAgICBjb25zdCBhcHBlYXIgPSAoY29tcG9uZW50LCBjb250ZXh0dWFsSW5mbykgPT4ge1xuICAgICAgY29uc3QgZWxlbSA9IGNvbXBvbmVudC5lbGVtZW50O1xuICAgICAgYWRkJDIoZWxlbSwgY29udGV4dHVhbEluZm8udHJhbnNpdGlvbkNsYXNzKTtcbiAgICAgIHJlbW92ZSQyKGVsZW0sIGNvbnRleHR1YWxJbmZvLmZhZGVPdXRDbGFzcyk7XG4gICAgICBhZGQkMihlbGVtLCBjb250ZXh0dWFsSW5mby5mYWRlSW5DbGFzcyk7XG4gICAgICBjb250ZXh0dWFsSW5mby5vblNob3coY29tcG9uZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IGRpc2FwcGVhciA9IChjb21wb25lbnQsIGNvbnRleHR1YWxJbmZvKSA9PiB7XG4gICAgICBjb25zdCBlbGVtID0gY29tcG9uZW50LmVsZW1lbnQ7XG4gICAgICBhZGQkMihlbGVtLCBjb250ZXh0dWFsSW5mby50cmFuc2l0aW9uQ2xhc3MpO1xuICAgICAgcmVtb3ZlJDIoZWxlbSwgY29udGV4dHVhbEluZm8uZmFkZUluQ2xhc3MpO1xuICAgICAgYWRkJDIoZWxlbSwgY29udGV4dHVhbEluZm8uZmFkZU91dENsYXNzKTtcbiAgICAgIGNvbnRleHR1YWxJbmZvLm9uSGlkZShjb21wb25lbnQpO1xuICAgIH07XG4gICAgY29uc3QgaXNQYXJ0aWFsbHlWaXNpYmxlID0gKGJveCwgYm91bmRzKSA9PiBib3gueSA8IGJvdW5kcy5ib3R0b20gJiYgYm94LmJvdHRvbSA+IGJvdW5kcy55O1xuICAgIGNvbnN0IGlzVG9wQ29tcGxldGVseVZpc2libGUgPSAoYm94LCBib3VuZHMpID0+IGJveC55ID49IGJvdW5kcy55O1xuICAgIGNvbnN0IGlzQm90dG9tQ29tcGxldGVseVZpc2libGUgPSAoYm94LCBib3VuZHMpID0+IGJveC5ib3R0b20gPD0gYm91bmRzLmJvdHRvbTtcbiAgICBjb25zdCBmb3JjZVRvcFBvc2l0aW9uID0gKHdpbkJveCwgbGVmdFgsIHZpZXdwb3J0KSA9PiAoe1xuICAgICAgbG9jYXRpb246ICd0b3AnLFxuICAgICAgbGVmdFgsXG4gICAgICB0b3BZOiB2aWV3cG9ydC5ib3VuZHMueSAtIHdpbkJveC55XG4gICAgfSk7XG4gICAgY29uc3QgZm9yY2VCb3R0b21Qb3NpdGlvbiA9ICh3aW5Cb3gsIGxlZnRYLCB2aWV3cG9ydCkgPT4gKHtcbiAgICAgIGxvY2F0aW9uOiAnYm90dG9tJyxcbiAgICAgIGxlZnRYLFxuICAgICAgYm90dG9tWTogd2luQm94LmJvdHRvbSAtIHZpZXdwb3J0LmJvdW5kcy5ib3R0b21cbiAgICB9KTtcbiAgICBjb25zdCBnZXREb2NrZWRMZWZ0UG9zaXRpb24gPSBib3VuZHMgPT4ge1xuICAgICAgcmV0dXJuIGJvdW5kcy5ib3gueCAtIGJvdW5kcy53aW4ueDtcbiAgICB9O1xuICAgIGNvbnN0IHRyeURvY2tpbmdQb3NpdGlvbiA9IChtb2RlcywgYm91bmRzLCB2aWV3cG9ydCkgPT4ge1xuICAgICAgY29uc3Qgd2luQm94ID0gYm91bmRzLndpbjtcbiAgICAgIGNvbnN0IGJveCA9IGJvdW5kcy5ib3g7XG4gICAgICBjb25zdCBsZWZ0WCA9IGdldERvY2tlZExlZnRQb3NpdGlvbihib3VuZHMpO1xuICAgICAgcmV0dXJuIGZpbmRNYXAobW9kZXMsIG1vZGUgPT4ge1xuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICByZXR1cm4gIWlzQm90dG9tQ29tcGxldGVseVZpc2libGUoYm94LCB2aWV3cG9ydC5ib3VuZHMpID8gT3B0aW9uYWwuc29tZShmb3JjZUJvdHRvbVBvc2l0aW9uKHdpbkJveCwgbGVmdFgsIHZpZXdwb3J0KSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgcmV0dXJuICFpc1RvcENvbXBsZXRlbHlWaXNpYmxlKGJveCwgdmlld3BvcnQuYm91bmRzKSA/IE9wdGlvbmFsLnNvbWUoZm9yY2VUb3BQb3NpdGlvbih3aW5Cb3gsIGxlZnRYLCB2aWV3cG9ydCkpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH0pLmdldE9yKHsgbG9jYXRpb246ICduby1kb2NrJyB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzVmlzaWJsZUZvck1vZGVzID0gKG1vZGVzLCBib3gsIHZpZXdwb3J0KSA9PiBmb3JhbGwobW9kZXMsIG1vZGUgPT4ge1xuICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICByZXR1cm4gaXNCb3R0b21Db21wbGV0ZWx5VmlzaWJsZShib3gsIHZpZXdwb3J0LmJvdW5kcyk7XG4gICAgICBjYXNlICd0b3AnOlxuICAgICAgICByZXR1cm4gaXNUb3BDb21wbGV0ZWx5VmlzaWJsZShib3gsIHZpZXdwb3J0LmJvdW5kcyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0WFlGb3JSZXN0b3JpbmcgPSAocG9zLCB2aWV3cG9ydCkgPT4ge1xuICAgICAgY29uc3QgcHJpb3JZID0gdmlld3BvcnQub3B0U2Nyb2xsRW52LmZvbGQoY29uc3RhbnQkMShwb3MuYm91bmRzLnkpLCBzY3JvbGxFbnYgPT4gc2Nyb2xsRW52LnNjcm9sbEVsbVRvcCArIChwb3MuYm91bmRzLnkgLSBzY3JvbGxFbnYuY3VycmVudFNjcm9sbFRvcCkpO1xuICAgICAgcmV0dXJuIFN1Z2FyUG9zaXRpb24ocG9zLmJvdW5kcy54LCBwcmlvclkpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0WFlGb3JTYXZpbmcgPSAoYm94LCB2aWV3cG9ydCkgPT4ge1xuICAgICAgY29uc3QgcHJpb3JZID0gdmlld3BvcnQub3B0U2Nyb2xsRW52LmZvbGQoY29uc3RhbnQkMShib3gueSksIHNjcm9sbEVudiA9PiBib3gueSArIHNjcm9sbEVudi5jdXJyZW50U2Nyb2xsVG9wIC0gc2Nyb2xsRW52LnNjcm9sbEVsbVRvcCk7XG4gICAgICByZXR1cm4gU3VnYXJQb3NpdGlvbihib3gueCwgcHJpb3JZKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFByaW9yID0gKGVsZW0sIHZpZXdwb3J0LCBzdGF0ZSkgPT4gc3RhdGUuZ2V0SW5pdGlhbFBvcygpLm1hcChwb3MgPT4ge1xuICAgICAgY29uc3QgeHkgPSBnZXRYWUZvclJlc3RvcmluZyhwb3MsIHZpZXdwb3J0KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJveDogYm91bmRzKHh5LmxlZnQsIHh5LnRvcCwgZ2V0JGMoZWxlbSksIGdldCRkKGVsZW0pKSxcbiAgICAgICAgbG9jYXRpb246IHBvcy5sb2NhdGlvblxuICAgICAgfTtcbiAgICB9KTtcbiAgICBjb25zdCBzdG9yZVByaW9yID0gKGVsZW0sIGJveCwgdmlld3BvcnQsIHN0YXRlLCBkZWNpc2lvbikgPT4ge1xuICAgICAgY29uc3QgeHkgPSBnZXRYWUZvclNhdmluZyhib3gsIHZpZXdwb3J0KTtcbiAgICAgIGNvbnN0IGJvdW5kcyQxID0gYm91bmRzKHh5LmxlZnQsIHh5LnRvcCwgYm94LndpZHRoLCBib3guaGVpZ2h0KTtcbiAgICAgIHN0YXRlLnNldEluaXRpYWxQb3Moe1xuICAgICAgICBzdHlsZTogZ2V0QWxsUmF3KGVsZW0pLFxuICAgICAgICBwb3NpdGlvbjogZ2V0JGUoZWxlbSwgJ3Bvc2l0aW9uJykgfHwgJ3N0YXRpYycsXG4gICAgICAgIGJvdW5kczogYm91bmRzJDEsXG4gICAgICAgIGxvY2F0aW9uOiBkZWNpc2lvbi5sb2NhdGlvblxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzdG9yZVByaW9ySWZOb25lID0gKGVsZW0sIGJveCwgdmlld3BvcnQsIHN0YXRlLCBkZWNpc2lvbikgPT4ge1xuICAgICAgc3RhdGUuZ2V0SW5pdGlhbFBvcygpLmZvbGQoKCkgPT4gc3RvcmVQcmlvcihlbGVtLCBib3gsIHZpZXdwb3J0LCBzdGF0ZSwgZGVjaXNpb24pLCAoKSA9PiBub29wKTtcbiAgICB9O1xuICAgIGNvbnN0IHJldmVydFRvT3JpZ2luYWwgPSAoZWxlbSwgYm94LCBzdGF0ZSkgPT4gc3RhdGUuZ2V0SW5pdGlhbFBvcygpLmJpbmQocG9zaXRpb24gPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgc3RhdGUuY2xlYXJJbml0aWFsUG9zKCk7XG4gICAgICBzd2l0Y2ggKHBvc2l0aW9uLnBvc2l0aW9uKSB7XG4gICAgICBjYXNlICdzdGF0aWMnOlxuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh7IG1vcnBoOiAnc3RhdGljJyB9KTtcbiAgICAgIGNhc2UgJ2Fic29sdXRlJzpcbiAgICAgICAgY29uc3Qgb2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGVsZW0pLmdldE9yKGJvZHkoKSk7XG4gICAgICAgIGNvbnN0IG9mZnNldEJveCA9IGJveCQxKG9mZnNldFBhcmVudCk7XG4gICAgICAgIGNvbnN0IHNjcm9sbERlbHRhID0gKF9hID0gb2Zmc2V0UGFyZW50LmRvbS5zY3JvbGxUb3ApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDA7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICBtb3JwaDogJ2Fic29sdXRlJyxcbiAgICAgICAgICBwb3NpdGlvbkNzczogTnVQb3NpdGlvbkNzcygnYWJzb2x1dGUnLCBnZXQkZyhwb3NpdGlvbi5zdHlsZSwgJ2xlZnQnKS5tYXAoX2xlZnQgPT4gYm94LnggLSBvZmZzZXRCb3gueCksIGdldCRnKHBvc2l0aW9uLnN0eWxlLCAndG9wJykubWFwKF90b3AgPT4gYm94LnkgLSBvZmZzZXRCb3gueSArIHNjcm9sbERlbHRhKSwgZ2V0JGcocG9zaXRpb24uc3R5bGUsICdyaWdodCcpLm1hcChfcmlnaHQgPT4gb2Zmc2V0Qm94LnJpZ2h0IC0gYm94LnJpZ2h0KSwgZ2V0JGcocG9zaXRpb24uc3R5bGUsICdib3R0b20nKS5tYXAoX2JvdHRvbSA9PiBvZmZzZXRCb3guYm90dG9tIC0gYm94LmJvdHRvbSkpXG4gICAgICAgIH0pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB0cnlNb3JwaFRvT3JpZ2luYWwgPSAoZWxlbSwgdmlld3BvcnQsIHN0YXRlKSA9PiBnZXRQcmlvcihlbGVtLCB2aWV3cG9ydCwgc3RhdGUpLmZpbHRlcigoe2JveH0pID0+IGlzVmlzaWJsZUZvck1vZGVzKHN0YXRlLmdldE1vZGVzKCksIGJveCwgdmlld3BvcnQpKS5iaW5kKCh7Ym94fSkgPT4gcmV2ZXJ0VG9PcmlnaW5hbChlbGVtLCBib3gsIHN0YXRlKSk7XG4gICAgY29uc3QgdHJ5RGVjaXNpb25Ub0ZpeGVkTW9ycGggPSBkZWNpc2lvbiA9PiB7XG4gICAgICBzd2l0Y2ggKGRlY2lzaW9uLmxvY2F0aW9uKSB7XG4gICAgICBjYXNlICd0b3AnOiB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgICAgbW9ycGg6ICdmaXhlZCcsXG4gICAgICAgICAgICBwb3NpdGlvbkNzczogTnVQb3NpdGlvbkNzcygnZml4ZWQnLCBPcHRpb25hbC5zb21lKGRlY2lzaW9uLmxlZnRYKSwgT3B0aW9uYWwuc29tZShkZWNpc2lvbi50b3BZKSwgT3B0aW9uYWwubm9uZSgpLCBPcHRpb25hbC5ub25lKCkpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2JvdHRvbSc6IHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgICBtb3JwaDogJ2ZpeGVkJyxcbiAgICAgICAgICAgIHBvc2l0aW9uQ3NzOiBOdVBvc2l0aW9uQ3NzKCdmaXhlZCcsIE9wdGlvbmFsLnNvbWUoZGVjaXNpb24ubGVmdFgpLCBPcHRpb25hbC5ub25lKCksIE9wdGlvbmFsLm5vbmUoKSwgT3B0aW9uYWwuc29tZShkZWNpc2lvbi5ib3R0b21ZKSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHRyeU1vcnBoVG9GaXhlZCA9IChlbGVtLCB2aWV3cG9ydCwgc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGJveCA9IGJveCQxKGVsZW0pO1xuICAgICAgY29uc3Qgd2luQm94ID0gd2luKCk7XG4gICAgICBjb25zdCBkZWNpc2lvbiA9IHRyeURvY2tpbmdQb3NpdGlvbihzdGF0ZS5nZXRNb2RlcygpLCB7XG4gICAgICAgIHdpbjogd2luQm94LFxuICAgICAgICBib3hcbiAgICAgIH0sIHZpZXdwb3J0KTtcbiAgICAgIGlmIChkZWNpc2lvbi5sb2NhdGlvbiA9PT0gJ3RvcCcgfHwgZGVjaXNpb24ubG9jYXRpb24gPT09ICdib3R0b20nKSB7XG4gICAgICAgIHN0b3JlUHJpb3IoZWxlbSwgYm94LCB2aWV3cG9ydCwgc3RhdGUsIGRlY2lzaW9uKTtcbiAgICAgICAgcmV0dXJuIHRyeURlY2lzaW9uVG9GaXhlZE1vcnBoKGRlY2lzaW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB0cnlNb3JwaFRvT3JpZ2luYWxPclVwZGF0ZUZpeGVkID0gKGVsZW0sIHZpZXdwb3J0LCBzdGF0ZSkgPT4ge1xuICAgICAgcmV0dXJuIHRyeU1vcnBoVG9PcmlnaW5hbChlbGVtLCB2aWV3cG9ydCwgc3RhdGUpLm9yVGh1bmsoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdmlld3BvcnQub3B0U2Nyb2xsRW52LmJpbmQoXyA9PiBnZXRQcmlvcihlbGVtLCB2aWV3cG9ydCwgc3RhdGUpKS5iaW5kKCh7Ym94LCBsb2NhdGlvbn0pID0+IHtcbiAgICAgICAgICBjb25zdCB3aW5Cb3ggPSB3aW4oKTtcbiAgICAgICAgICBjb25zdCBsZWZ0WCA9IGdldERvY2tlZExlZnRQb3NpdGlvbih7XG4gICAgICAgICAgICB3aW46IHdpbkJveCxcbiAgICAgICAgICAgIGJveFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGRlY2lzaW9uID0gbG9jYXRpb24gPT09ICd0b3AnID8gZm9yY2VUb3BQb3NpdGlvbih3aW5Cb3gsIGxlZnRYLCB2aWV3cG9ydCkgOiBmb3JjZUJvdHRvbVBvc2l0aW9uKHdpbkJveCwgbGVmdFgsIHZpZXdwb3J0KTtcbiAgICAgICAgICByZXR1cm4gdHJ5RGVjaXNpb25Ub0ZpeGVkTW9ycGgoZGVjaXNpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgdHJ5TW9ycGggPSAoY29tcG9uZW50LCB2aWV3cG9ydCwgc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGVsZW0gPSBjb21wb25lbnQuZWxlbWVudDtcbiAgICAgIGNvbnN0IGlzRG9ja2VkID0gaXMkMShnZXRSYXcoZWxlbSwgJ3Bvc2l0aW9uJyksICdmaXhlZCcpO1xuICAgICAgcmV0dXJuIGlzRG9ja2VkID8gdHJ5TW9ycGhUb09yaWdpbmFsT3JVcGRhdGVGaXhlZChlbGVtLCB2aWV3cG9ydCwgc3RhdGUpIDogdHJ5TW9ycGhUb0ZpeGVkKGVsZW0sIHZpZXdwb3J0LCBzdGF0ZSk7XG4gICAgfTtcbiAgICBjb25zdCBjYWxjdWxhdGVNb3JwaFRvT3JpZ2luYWwgPSAoY29tcG9uZW50LCB2aWV3cG9ydCwgc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGVsZW0gPSBjb21wb25lbnQuZWxlbWVudDtcbiAgICAgIHJldHVybiBnZXRQcmlvcihlbGVtLCB2aWV3cG9ydCwgc3RhdGUpLmJpbmQoKHtib3h9KSA9PiByZXZlcnRUb09yaWdpbmFsKGVsZW0sIGJveCwgc3RhdGUpKTtcbiAgICB9O1xuICAgIGNvbnN0IGZvcmNlRG9ja1dpdGggPSAoZWxlbSwgdmlld3BvcnQsIHN0YXRlLCBnZXREZWNpc2lvbikgPT4ge1xuICAgICAgY29uc3QgYm94ID0gYm94JDEoZWxlbSk7XG4gICAgICBjb25zdCB3aW5Cb3ggPSB3aW4oKTtcbiAgICAgIGNvbnN0IGxlZnRYID0gZ2V0RG9ja2VkTGVmdFBvc2l0aW9uKHtcbiAgICAgICAgd2luOiB3aW5Cb3gsXG4gICAgICAgIGJveFxuICAgICAgfSk7XG4gICAgICBjb25zdCBkZWNpc2lvbiA9IGdldERlY2lzaW9uKHdpbkJveCwgbGVmdFgsIHZpZXdwb3J0KTtcbiAgICAgIGlmIChkZWNpc2lvbi5sb2NhdGlvbiA9PT0gJ2JvdHRvbScgfHwgZGVjaXNpb24ubG9jYXRpb24gPT09ICd0b3AnKSB7XG4gICAgICAgIHN0b3JlUHJpb3JJZk5vbmUoZWxlbSwgYm94LCB2aWV3cG9ydCwgc3RhdGUsIGRlY2lzaW9uKTtcbiAgICAgICAgcmV0dXJuIHRyeURlY2lzaW9uVG9GaXhlZE1vcnBoKGRlY2lzaW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG1vcnBoVG9TdGF0aWMgPSAoY29tcG9uZW50LCBjb25maWcsIHN0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5zZXREb2NrZWQoZmFsc2UpO1xuICAgICAgZWFjaCQxKFtcbiAgICAgICAgJ2xlZnQnLFxuICAgICAgICAncmlnaHQnLFxuICAgICAgICAndG9wJyxcbiAgICAgICAgJ2JvdHRvbScsXG4gICAgICAgICdwb3NpdGlvbidcbiAgICAgIF0sIHByb3AgPT4gcmVtb3ZlJDYoY29tcG9uZW50LmVsZW1lbnQsIHByb3ApKTtcbiAgICAgIGNvbmZpZy5vblVuZG9ja2VkKGNvbXBvbmVudCk7XG4gICAgfTtcbiAgICBjb25zdCBtb3JwaFRvQ29vcmQgPSAoY29tcG9uZW50LCBjb25maWcsIHN0YXRlLCBwb3NpdGlvbikgPT4ge1xuICAgICAgY29uc3QgaXNEb2NrZWQgPSBwb3NpdGlvbi5wb3NpdGlvbiA9PT0gJ2ZpeGVkJztcbiAgICAgIHN0YXRlLnNldERvY2tlZChpc0RvY2tlZCk7XG4gICAgICBhcHBseVBvc2l0aW9uQ3NzKGNvbXBvbmVudC5lbGVtZW50LCBwb3NpdGlvbik7XG4gICAgICBjb25zdCBtZXRob2QgPSBpc0RvY2tlZCA/IGNvbmZpZy5vbkRvY2tlZCA6IGNvbmZpZy5vblVuZG9ja2VkO1xuICAgICAgbWV0aG9kKGNvbXBvbmVudCk7XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVWaXNpYmlsaXR5ID0gKGNvbXBvbmVudCwgY29uZmlnLCBzdGF0ZSwgdmlld3BvcnQsIG1vcnBoVG9Eb2NrZWQgPSBmYWxzZSkgPT4ge1xuICAgICAgY29uZmlnLmNvbnRleHR1YWwuZWFjaChjb250ZXh0SW5mbyA9PiB7XG4gICAgICAgIGNvbnRleHRJbmZvLmxhenlDb250ZXh0KGNvbXBvbmVudCkuZWFjaChib3ggPT4ge1xuICAgICAgICAgIGNvbnN0IGlzVmlzaWJsZSA9IGlzUGFydGlhbGx5VmlzaWJsZShib3gsIHZpZXdwb3J0LmJvdW5kcyk7XG4gICAgICAgICAgaWYgKGlzVmlzaWJsZSAhPT0gc3RhdGUuaXNWaXNpYmxlKCkpIHtcbiAgICAgICAgICAgIHN0YXRlLnNldFZpc2libGUoaXNWaXNpYmxlKTtcbiAgICAgICAgICAgIGlmIChtb3JwaFRvRG9ja2VkICYmICFpc1Zpc2libGUpIHtcbiAgICAgICAgICAgICAgYWRkJDEoY29tcG9uZW50LmVsZW1lbnQsIFtjb250ZXh0SW5mby5mYWRlT3V0Q2xhc3NdKTtcbiAgICAgICAgICAgICAgY29udGV4dEluZm8ub25IaWRlKGNvbXBvbmVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBtZXRob2QgPSBpc1Zpc2libGUgPyBhcHBlYXIgOiBkaXNhcHBlYXI7XG4gICAgICAgICAgICAgIG1ldGhvZChjb21wb25lbnQsIGNvbnRleHRJbmZvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBhcHBseUZpeGVkTW9ycGggPSAoY29tcG9uZW50LCBjb25maWcsIHN0YXRlLCB2aWV3cG9ydCwgbW9ycGgpID0+IHtcbiAgICAgIHVwZGF0ZVZpc2liaWxpdHkoY29tcG9uZW50LCBjb25maWcsIHN0YXRlLCB2aWV3cG9ydCwgdHJ1ZSk7XG4gICAgICBtb3JwaFRvQ29vcmQoY29tcG9uZW50LCBjb25maWcsIHN0YXRlLCBtb3JwaC5wb3NpdGlvbkNzcyk7XG4gICAgfTtcbiAgICBjb25zdCBhcHBseU1vcnBoID0gKGNvbXBvbmVudCwgY29uZmlnLCBzdGF0ZSwgdmlld3BvcnQsIG1vcnBoKSA9PiB7XG4gICAgICBzd2l0Y2ggKG1vcnBoLm1vcnBoKSB7XG4gICAgICBjYXNlICdzdGF0aWMnOiB7XG4gICAgICAgICAgcmV0dXJuIG1vcnBoVG9TdGF0aWMoY29tcG9uZW50LCBjb25maWcsIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgY2FzZSAnYWJzb2x1dGUnOiB7XG4gICAgICAgICAgcmV0dXJuIG1vcnBoVG9Db29yZChjb21wb25lbnQsIGNvbmZpZywgc3RhdGUsIG1vcnBoLnBvc2l0aW9uQ3NzKTtcbiAgICAgICAgfVxuICAgICAgY2FzZSAnZml4ZWQnOiB7XG4gICAgICAgICAgcmV0dXJuIGFwcGx5Rml4ZWRNb3JwaChjb21wb25lbnQsIGNvbmZpZywgc3RhdGUsIHZpZXdwb3J0LCBtb3JwaCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlZnJlc2hJbnRlcm5hbCA9IChjb21wb25lbnQsIGNvbmZpZywgc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IHZpZXdwb3J0ID0gY29uZmlnLmxhenlWaWV3cG9ydChjb21wb25lbnQpO1xuICAgICAgdXBkYXRlVmlzaWJpbGl0eShjb21wb25lbnQsIGNvbmZpZywgc3RhdGUsIHZpZXdwb3J0KTtcbiAgICAgIHRyeU1vcnBoKGNvbXBvbmVudCwgdmlld3BvcnQsIHN0YXRlKS5lYWNoKG1vcnBoID0+IHtcbiAgICAgICAgYXBwbHlNb3JwaChjb21wb25lbnQsIGNvbmZpZywgc3RhdGUsIHZpZXdwb3J0LCBtb3JwaCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlc2V0SW50ZXJuYWwgPSAoY29tcG9uZW50LCBjb25maWcsIHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBlbGVtID0gY29tcG9uZW50LmVsZW1lbnQ7XG4gICAgICBzdGF0ZS5zZXREb2NrZWQoZmFsc2UpO1xuICAgICAgY29uc3Qgdmlld3BvcnQgPSBjb25maWcubGF6eVZpZXdwb3J0KGNvbXBvbmVudCk7XG4gICAgICBjYWxjdWxhdGVNb3JwaFRvT3JpZ2luYWwoY29tcG9uZW50LCB2aWV3cG9ydCwgc3RhdGUpLmVhY2goc3RhdGljT3JBYnNvbHV0ZU1vcnBoID0+IHtcbiAgICAgICAgc3dpdGNoIChzdGF0aWNPckFic29sdXRlTW9ycGgubW9ycGgpIHtcbiAgICAgICAgY2FzZSAnc3RhdGljJzoge1xuICAgICAgICAgICAgbW9ycGhUb1N0YXRpYyhjb21wb25lbnQsIGNvbmZpZywgc3RhdGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICdhYnNvbHV0ZSc6IHtcbiAgICAgICAgICAgIG1vcnBoVG9Db29yZChjb21wb25lbnQsIGNvbmZpZywgc3RhdGUsIHN0YXRpY09yQWJzb2x1dGVNb3JwaC5wb3NpdGlvbkNzcyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgc3RhdGUuc2V0VmlzaWJsZSh0cnVlKTtcbiAgICAgIGNvbmZpZy5jb250ZXh0dWFsLmVhY2goY29udGV4dEluZm8gPT4ge1xuICAgICAgICByZW1vdmUkMShlbGVtLCBbXG4gICAgICAgICAgY29udGV4dEluZm8uZmFkZUluQ2xhc3MsXG4gICAgICAgICAgY29udGV4dEluZm8uZmFkZU91dENsYXNzLFxuICAgICAgICAgIGNvbnRleHRJbmZvLnRyYW5zaXRpb25DbGFzc1xuICAgICAgICBdKTtcbiAgICAgICAgY29udGV4dEluZm8ub25TaG93KGNvbXBvbmVudCk7XG4gICAgICB9KTtcbiAgICAgIHJlZnJlc2gkMyhjb21wb25lbnQsIGNvbmZpZywgc3RhdGUpO1xuICAgIH07XG4gICAgY29uc3QgcmVmcmVzaCQzID0gKGNvbXBvbmVudCwgY29uZmlnLCBzdGF0ZSkgPT4ge1xuICAgICAgaWYgKGNvbXBvbmVudC5nZXRTeXN0ZW0oKS5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgIHJlZnJlc2hJbnRlcm5hbChjb21wb25lbnQsIGNvbmZpZywgc3RhdGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVzZXQgPSAoY29tcG9uZW50LCBjb25maWcsIHN0YXRlKSA9PiB7XG4gICAgICBpZiAoc3RhdGUuaXNEb2NrZWQoKSkge1xuICAgICAgICByZXNldEludGVybmFsKGNvbXBvbmVudCwgY29uZmlnLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBmb3JjZURvY2tXaXRoRGVjaXNpb24gPSBnZXREZWNpc2lvbiA9PiAoY29tcG9uZW50LCBjb25maWcsIHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCB2aWV3cG9ydCA9IGNvbmZpZy5sYXp5Vmlld3BvcnQoY29tcG9uZW50KTtcbiAgICAgIGNvbnN0IG9wdE1vcnBoID0gZm9yY2VEb2NrV2l0aChjb21wb25lbnQuZWxlbWVudCwgdmlld3BvcnQsIHN0YXRlLCBnZXREZWNpc2lvbik7XG4gICAgICBvcHRNb3JwaC5lYWNoKG1vcnBoID0+IHtcbiAgICAgICAgYXBwbHlGaXhlZE1vcnBoKGNvbXBvbmVudCwgY29uZmlnLCBzdGF0ZSwgdmlld3BvcnQsIG1vcnBoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZm9yY2VEb2NrVG9Ub3AgPSBmb3JjZURvY2tXaXRoRGVjaXNpb24oZm9yY2VUb3BQb3NpdGlvbik7XG4gICAgY29uc3QgZm9yY2VEb2NrVG9Cb3R0b20gPSBmb3JjZURvY2tXaXRoRGVjaXNpb24oZm9yY2VCb3R0b21Qb3NpdGlvbik7XG4gICAgY29uc3QgaXNEb2NrZWQkMSA9IChjb21wb25lbnQsIGNvbmZpZywgc3RhdGUpID0+IHN0YXRlLmlzRG9ja2VkKCk7XG4gICAgY29uc3Qgc2V0TW9kZXMgPSAoY29tcG9uZW50LCBjb25maWcsIHN0YXRlLCBtb2RlcykgPT4gc3RhdGUuc2V0TW9kZXMobW9kZXMpO1xuICAgIGNvbnN0IGdldE1vZGVzID0gKGNvbXBvbmVudCwgY29uZmlnLCBzdGF0ZSkgPT4gc3RhdGUuZ2V0TW9kZXMoKTtcblxuICAgIHZhciBEb2NraW5nQXBpcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICByZWZyZXNoOiByZWZyZXNoJDMsXG4gICAgICAgIHJlc2V0OiByZXNldCxcbiAgICAgICAgaXNEb2NrZWQ6IGlzRG9ja2VkJDEsXG4gICAgICAgIGdldE1vZGVzOiBnZXRNb2RlcyxcbiAgICAgICAgc2V0TW9kZXM6IHNldE1vZGVzLFxuICAgICAgICBmb3JjZURvY2tUb1RvcDogZm9yY2VEb2NrVG9Ub3AsXG4gICAgICAgIGZvcmNlRG9ja1RvQm90dG9tOiBmb3JjZURvY2tUb0JvdHRvbVxuICAgIH0pO1xuXG4gICAgY29uc3QgZXZlbnRzJDQgPSAoZG9ja0luZm8sIGRvY2tTdGF0ZSkgPT4gZGVyaXZlJDIoW1xuICAgICAgcnVuT25Tb3VyY2UodHJhbnNpdGlvbmVuZCgpLCAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICBkb2NrSW5mby5jb250ZXh0dWFsLmVhY2goY29udGV4dEluZm8gPT4ge1xuICAgICAgICAgIGlmIChoYXMoY29tcG9uZW50LmVsZW1lbnQsIGNvbnRleHRJbmZvLnRyYW5zaXRpb25DbGFzcykpIHtcbiAgICAgICAgICAgIHJlbW92ZSQxKGNvbXBvbmVudC5lbGVtZW50LCBbXG4gICAgICAgICAgICAgIGNvbnRleHRJbmZvLnRyYW5zaXRpb25DbGFzcyxcbiAgICAgICAgICAgICAgY29udGV4dEluZm8uZmFkZUluQ2xhc3NcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgY29uc3Qgbm90aWZ5ID0gZG9ja1N0YXRlLmlzVmlzaWJsZSgpID8gY29udGV4dEluZm8ub25TaG93biA6IGNvbnRleHRJbmZvLm9uSGlkZGVuO1xuICAgICAgICAgICAgbm90aWZ5KGNvbXBvbmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNpbXVsYXRlZEV2ZW50LnN0b3AoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIHJ1biQxKHdpbmRvd1Njcm9sbCgpLCAoY29tcG9uZW50LCBfKSA9PiB7XG4gICAgICAgIHJlZnJlc2gkMyhjb21wb25lbnQsIGRvY2tJbmZvLCBkb2NrU3RhdGUpO1xuICAgICAgfSksXG4gICAgICBydW4kMShleHRlcm5hbEVsZW1lbnRTY3JvbGwoKSwgKGNvbXBvbmVudCwgXykgPT4ge1xuICAgICAgICByZWZyZXNoJDMoY29tcG9uZW50LCBkb2NrSW5mbywgZG9ja1N0YXRlKTtcbiAgICAgIH0pLFxuICAgICAgcnVuJDEod2luZG93UmVzaXplKCksIChjb21wb25lbnQsIF8pID0+IHtcbiAgICAgICAgcmVzZXQoY29tcG9uZW50LCBkb2NrSW5mbywgZG9ja1N0YXRlKTtcbiAgICAgIH0pXG4gICAgXSk7XG5cbiAgICB2YXIgQWN0aXZlRG9ja2luZyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBldmVudHM6IGV2ZW50cyQ0XG4gICAgfSk7XG5cbiAgICB2YXIgRG9ja2luZ1NjaGVtYSA9IFtcbiAgICAgIG9wdGlvbk9iak9mKCdjb250ZXh0dWFsJywgW1xuICAgICAgICByZXF1aXJlZFN0cmluZygnZmFkZUluQ2xhc3MnKSxcbiAgICAgICAgcmVxdWlyZWRTdHJpbmcoJ2ZhZGVPdXRDbGFzcycpLFxuICAgICAgICByZXF1aXJlZFN0cmluZygndHJhbnNpdGlvbkNsYXNzJyksXG4gICAgICAgIHJlcXVpcmVkRnVuY3Rpb24oJ2xhenlDb250ZXh0JyksXG4gICAgICAgIG9uSGFuZGxlcignb25TaG93JyksXG4gICAgICAgIG9uSGFuZGxlcignb25TaG93bicpLFxuICAgICAgICBvbkhhbmRsZXIoJ29uSGlkZScpLFxuICAgICAgICBvbkhhbmRsZXIoJ29uSGlkZGVuJylcbiAgICAgIF0pLFxuICAgICAgZGVmYXVsdGVkRnVuY3Rpb24oJ2xhenlWaWV3cG9ydCcsICgpID0+ICh7XG4gICAgICAgIGJvdW5kczogd2luKCksXG4gICAgICAgIG9wdFNjcm9sbEVudjogT3B0aW9uYWwubm9uZSgpXG4gICAgICB9KSksXG4gICAgICBkZWZhdWx0ZWRBcnJheU9mKCdtb2RlcycsIFtcbiAgICAgICAgJ3RvcCcsXG4gICAgICAgICdib3R0b20nXG4gICAgICBdLCBzdHJpbmcpLFxuICAgICAgb25IYW5kbGVyKCdvbkRvY2tlZCcpLFxuICAgICAgb25IYW5kbGVyKCdvblVuZG9ja2VkJylcbiAgICBdO1xuXG4gICAgY29uc3QgaW5pdCQ1ID0gc3BlYyA9PiB7XG4gICAgICBjb25zdCBkb2NrZWQgPSBDZWxsKGZhbHNlKTtcbiAgICAgIGNvbnN0IHZpc2libGUgPSBDZWxsKHRydWUpO1xuICAgICAgY29uc3QgaW5pdGlhbEJvdW5kcyA9IHZhbHVlJDIoKTtcbiAgICAgIGNvbnN0IG1vZGVzID0gQ2VsbChzcGVjLm1vZGVzKTtcbiAgICAgIGNvbnN0IHJlYWRTdGF0ZSA9ICgpID0+IGBkb2NrZWQ6ICAkeyBkb2NrZWQuZ2V0KCkgfSwgdmlzaWJsZTogJHsgdmlzaWJsZS5nZXQoKSB9LCBtb2RlczogJHsgbW9kZXMuZ2V0KCkuam9pbignLCcpIH1gO1xuICAgICAgcmV0dXJuIG51JDgoe1xuICAgICAgICBpc0RvY2tlZDogZG9ja2VkLmdldCxcbiAgICAgICAgc2V0RG9ja2VkOiBkb2NrZWQuc2V0LFxuICAgICAgICBnZXRJbml0aWFsUG9zOiBpbml0aWFsQm91bmRzLmdldCxcbiAgICAgICAgc2V0SW5pdGlhbFBvczogaW5pdGlhbEJvdW5kcy5zZXQsXG4gICAgICAgIGNsZWFySW5pdGlhbFBvczogaW5pdGlhbEJvdW5kcy5jbGVhcixcbiAgICAgICAgaXNWaXNpYmxlOiB2aXNpYmxlLmdldCxcbiAgICAgICAgc2V0VmlzaWJsZTogdmlzaWJsZS5zZXQsXG4gICAgICAgIGdldE1vZGVzOiBtb2Rlcy5nZXQsXG4gICAgICAgIHNldE1vZGVzOiBtb2Rlcy5zZXQsXG4gICAgICAgIHJlYWRTdGF0ZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHZhciBEb2NraW5nU3RhdGUgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgaW5pdDogaW5pdCQ1XG4gICAgfSk7XG5cbiAgICBjb25zdCBEb2NraW5nID0gY3JlYXRlJDQoe1xuICAgICAgZmllbGRzOiBEb2NraW5nU2NoZW1hLFxuICAgICAgbmFtZTogJ2RvY2tpbmcnLFxuICAgICAgYWN0aXZlOiBBY3RpdmVEb2NraW5nLFxuICAgICAgYXBpczogRG9ja2luZ0FwaXMsXG4gICAgICBzdGF0ZTogRG9ja2luZ1N0YXRlXG4gICAgfSk7XG5cbiAgICBjb25zdCB0b29sYmFySGVpZ2h0Q2hhbmdlID0gY29uc3RhbnQkMShnZW5lcmF0ZSQ2KCd0b29sYmFyLWhlaWdodC1jaGFuZ2UnKSk7XG5cbiAgICBjb25zdCB2aXNpYmlsaXR5ID0ge1xuICAgICAgZmFkZUluQ2xhc3M6ICd0b3gtZWRpdG9yLWRvY2stZmFkZWluJyxcbiAgICAgIGZhZGVPdXRDbGFzczogJ3RveC1lZGl0b3ItZG9jay1mYWRlb3V0JyxcbiAgICAgIHRyYW5zaXRpb25DbGFzczogJ3RveC1lZGl0b3ItZG9jay10cmFuc2l0aW9uJ1xuICAgIH07XG4gICAgY29uc3QgZWRpdG9yU3RpY2t5T25DbGFzcyA9ICd0b3gtdGlueW1jZS0tdG9vbGJhci1zdGlja3ktb24nO1xuICAgIGNvbnN0IGVkaXRvclN0aWNreU9mZkNsYXNzID0gJ3RveC10aW55bWNlLS10b29sYmFyLXN0aWNreS1vZmYnO1xuICAgIGNvbnN0IHNjcm9sbEZyb21CZWhpbmRIZWFkZXIgPSAoZSwgY29udGFpbmVySGVhZGVyKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBvd25lciQ0KGNvbnRhaW5lckhlYWRlcik7XG4gICAgICBjb25zdCB3aW4gPSBkZWZhdWx0Vmlldyhjb250YWluZXJIZWFkZXIpO1xuICAgICAgY29uc3Qgdmlld0hlaWdodCA9IHdpbi5kb20uaW5uZXJIZWlnaHQ7XG4gICAgICBjb25zdCBzY3JvbGxQb3MgPSBnZXQkYihkb2MpO1xuICAgICAgY29uc3QgbWFya2VyRWxlbWVudCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGUuZWxtKTtcbiAgICAgIGNvbnN0IG1hcmtlclBvcyA9IGFic29sdXRlJDIobWFya2VyRWxlbWVudCk7XG4gICAgICBjb25zdCBtYXJrZXJIZWlnaHQgPSBnZXQkZChtYXJrZXJFbGVtZW50KTtcbiAgICAgIGNvbnN0IG1hcmtlclRvcCA9IG1hcmtlclBvcy55O1xuICAgICAgY29uc3QgbWFya2VyQm90dG9tID0gbWFya2VyVG9wICsgbWFya2VySGVpZ2h0O1xuICAgICAgY29uc3QgZWRpdG9ySGVhZGVyUG9zID0gYWJzb2x1dGUkMyhjb250YWluZXJIZWFkZXIpO1xuICAgICAgY29uc3QgZWRpdG9ySGVhZGVySGVpZ2h0ID0gZ2V0JGQoY29udGFpbmVySGVhZGVyKTtcbiAgICAgIGNvbnN0IGVkaXRvckhlYWRlclRvcCA9IGVkaXRvckhlYWRlclBvcy50b3A7XG4gICAgICBjb25zdCBlZGl0b3JIZWFkZXJCb3R0b20gPSBlZGl0b3JIZWFkZXJUb3AgKyBlZGl0b3JIZWFkZXJIZWlnaHQ7XG4gICAgICBjb25zdCBlZGl0b3JIZWFkZXJEb2NrZWRBdFRvcCA9IE1hdGguYWJzKGVkaXRvckhlYWRlclRvcCAtIHNjcm9sbFBvcy50b3ApIDwgMjtcbiAgICAgIGNvbnN0IGVkaXRvckhlYWRlckRvY2tlZEF0Qm90dG9tID0gTWF0aC5hYnMoZWRpdG9ySGVhZGVyQm90dG9tIC0gKHNjcm9sbFBvcy50b3AgKyB2aWV3SGVpZ2h0KSkgPCAyO1xuICAgICAgaWYgKGVkaXRvckhlYWRlckRvY2tlZEF0VG9wICYmIG1hcmtlclRvcCA8IGVkaXRvckhlYWRlckJvdHRvbSkge1xuICAgICAgICB0byhzY3JvbGxQb3MubGVmdCwgbWFya2VyVG9wIC0gZWRpdG9ySGVhZGVySGVpZ2h0LCBkb2MpO1xuICAgICAgfSBlbHNlIGlmIChlZGl0b3JIZWFkZXJEb2NrZWRBdEJvdHRvbSAmJiBtYXJrZXJCb3R0b20gPiBlZGl0b3JIZWFkZXJUb3ApIHtcbiAgICAgICAgY29uc3QgeSA9IG1hcmtlclRvcCAtIHZpZXdIZWlnaHQgKyBtYXJrZXJIZWlnaHQgKyBlZGl0b3JIZWFkZXJIZWlnaHQ7XG4gICAgICAgIHRvKHNjcm9sbFBvcy5sZWZ0LCB5LCBkb2MpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNEb2NrZWRNb2RlID0gKGhlYWRlciwgbW9kZSkgPT4gY29udGFpbnMkMihEb2NraW5nLmdldE1vZGVzKGhlYWRlciksIG1vZGUpO1xuICAgIGNvbnN0IHVwZGF0ZUlmcmFtZUNvbnRlbnRGbG93ID0gaGVhZGVyID0+IHtcbiAgICAgIGNvbnN0IGdldE9jY3VwaWVkSGVpZ2h0ID0gZWxtID0+IGdldE91dGVyJDIoZWxtKSArIChwYXJzZUludChnZXQkZShlbG0sICdtYXJnaW4tdG9wJyksIDEwKSB8fCAwKSArIChwYXJzZUludChnZXQkZShlbG0sICdtYXJnaW4tYm90dG9tJyksIDEwKSB8fCAwKTtcbiAgICAgIGNvbnN0IGVsbSA9IGhlYWRlci5lbGVtZW50O1xuICAgICAgcGFyZW50RWxlbWVudChlbG0pLmVhY2gocGFyZW50RWxlbSA9PiB7XG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSAncGFkZGluZy0nICsgRG9ja2luZy5nZXRNb2RlcyhoZWFkZXIpWzBdO1xuICAgICAgICBpZiAoRG9ja2luZy5pc0RvY2tlZChoZWFkZXIpKSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50V2lkdGggPSBnZXQkYyhwYXJlbnRFbGVtKTtcbiAgICAgICAgICBzZXQkOChlbG0sICd3aWR0aCcsIHBhcmVudFdpZHRoICsgJ3B4Jyk7XG4gICAgICAgICAgc2V0JDgocGFyZW50RWxlbSwgcGFkZGluZywgZ2V0T2NjdXBpZWRIZWlnaHQoZWxtKSArICdweCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbW92ZSQ2KGVsbSwgJ3dpZHRoJyk7XG4gICAgICAgICAgcmVtb3ZlJDYocGFyZW50RWxlbSwgcGFkZGluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgdXBkYXRlU2lua1Zpc2liaWxpdHkgPSAoc2lua0VsZW0sIHZpc2libGUpID0+IHtcbiAgICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICAgIHJlbW92ZSQyKHNpbmtFbGVtLCB2aXNpYmlsaXR5LmZhZGVPdXRDbGFzcyk7XG4gICAgICAgIGFkZCQxKHNpbmtFbGVtLCBbXG4gICAgICAgICAgdmlzaWJpbGl0eS50cmFuc2l0aW9uQ2xhc3MsXG4gICAgICAgICAgdmlzaWJpbGl0eS5mYWRlSW5DbGFzc1xuICAgICAgICBdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZSQyKHNpbmtFbGVtLCB2aXNpYmlsaXR5LmZhZGVJbkNsYXNzKTtcbiAgICAgICAgYWRkJDEoc2lua0VsZW0sIFtcbiAgICAgICAgICB2aXNpYmlsaXR5LmZhZGVPdXRDbGFzcyxcbiAgICAgICAgICB2aXNpYmlsaXR5LnRyYW5zaXRpb25DbGFzc1xuICAgICAgICBdKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHVwZGF0ZUVkaXRvckNsYXNzZXMgPSAoZWRpdG9yLCBkb2NrZWQpID0+IHtcbiAgICAgIGNvbnN0IGVkaXRvckNvbnRhaW5lciA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRDb250YWluZXIoKSk7XG4gICAgICBpZiAoZG9ja2VkKSB7XG4gICAgICAgIGFkZCQyKGVkaXRvckNvbnRhaW5lciwgZWRpdG9yU3RpY2t5T25DbGFzcyk7XG4gICAgICAgIHJlbW92ZSQyKGVkaXRvckNvbnRhaW5lciwgZWRpdG9yU3RpY2t5T2ZmQ2xhc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWRkJDIoZWRpdG9yQ29udGFpbmVyLCBlZGl0b3JTdGlja3lPZmZDbGFzcyk7XG4gICAgICAgIHJlbW92ZSQyKGVkaXRvckNvbnRhaW5lciwgZWRpdG9yU3RpY2t5T25DbGFzcyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZXN0b3JlRm9jdXMgPSAoaGVhZGVyRWxlbSwgZm9jdXNlZEVsZW0pID0+IHtcbiAgICAgIGNvbnN0IG93bmVyRG9jID0gb3duZXIkNChmb2N1c2VkRWxlbSk7XG4gICAgICBhY3RpdmUkMShvd25lckRvYykuZmlsdGVyKGFjdGl2ZUVsbSA9PiAhZXEoZm9jdXNlZEVsZW0sIGFjdGl2ZUVsbSkpLmZpbHRlcihhY3RpdmVFbG0gPT4gZXEoYWN0aXZlRWxtLCBTdWdhckVsZW1lbnQuZnJvbURvbShvd25lckRvYy5kb20uYm9keSkpIHx8IGNvbnRhaW5zKGhlYWRlckVsZW0sIGFjdGl2ZUVsbSkpLmVhY2goKCkgPT4gZm9jdXMkMyhmb2N1c2VkRWxlbSkpO1xuICAgIH07XG4gICAgY29uc3QgZmluZEZvY3VzZWRFbGVtID0gKHJvb3RFbG0sIGxhenlTaW5rKSA9PiBzZWFyY2gocm9vdEVsbSkub3JUaHVuaygoKSA9PiBsYXp5U2luaygpLnRvT3B0aW9uYWwoKS5iaW5kKHNpbmsgPT4gc2VhcmNoKHNpbmsuZWxlbWVudCkpKTtcbiAgICBjb25zdCBzZXR1cCQ5ID0gKGVkaXRvciwgc2hhcmVkQmFja3N0YWdlLCBsYXp5SGVhZGVyKSA9PiB7XG4gICAgICBpZiAoIWVkaXRvci5pbmxpbmUpIHtcbiAgICAgICAgaWYgKCFzaGFyZWRCYWNrc3RhZ2UuaGVhZGVyLmlzUG9zaXRpb25lZEF0VG9wKCkpIHtcbiAgICAgICAgICBlZGl0b3Iub24oJ1Jlc2l6ZUVkaXRvcicsICgpID0+IHtcbiAgICAgICAgICAgIGxhenlIZWFkZXIoKS5lYWNoKERvY2tpbmcucmVzZXQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVkaXRvci5vbignUmVzaXplV2luZG93IFJlc2l6ZUVkaXRvcicsICgpID0+IHtcbiAgICAgICAgICBsYXp5SGVhZGVyKCkuZWFjaCh1cGRhdGVJZnJhbWVDb250ZW50Rmxvdyk7XG4gICAgICAgIH0pO1xuICAgICAgICBlZGl0b3Iub24oJ1NraW5Mb2FkZWQnLCAoKSA9PiB7XG4gICAgICAgICAgbGF6eUhlYWRlcigpLmVhY2goY29tcCA9PiB7XG4gICAgICAgICAgICBEb2NraW5nLmlzRG9ja2VkKGNvbXApID8gRG9ja2luZy5yZXNldChjb21wKSA6IERvY2tpbmcucmVmcmVzaChjb21wKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVkaXRvci5vbignRnVsbHNjcmVlblN0YXRlQ2hhbmdlZCcsICgpID0+IHtcbiAgICAgICAgICBsYXp5SGVhZGVyKCkuZWFjaChEb2NraW5nLnJlc2V0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlZGl0b3Iub24oJ0FmdGVyU2Nyb2xsSW50b1ZpZXcnLCBlID0+IHtcbiAgICAgICAgbGF6eUhlYWRlcigpLmVhY2goaGVhZGVyID0+IHtcbiAgICAgICAgICBEb2NraW5nLnJlZnJlc2goaGVhZGVyKTtcbiAgICAgICAgICBjb25zdCBoZWFkZXJFbGVtID0gaGVhZGVyLmVsZW1lbnQ7XG4gICAgICAgICAgaWYgKGlzVmlzaWJsZShoZWFkZXJFbGVtKSkge1xuICAgICAgICAgICAgc2Nyb2xsRnJvbUJlaGluZEhlYWRlcihlLCBoZWFkZXJFbGVtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ1Bvc3RSZW5kZXInLCAoKSA9PiB7XG4gICAgICAgIHVwZGF0ZUVkaXRvckNsYXNzZXMoZWRpdG9yLCBmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzRG9ja2VkID0gbGF6eUhlYWRlciA9PiBsYXp5SGVhZGVyKCkubWFwKERvY2tpbmcuaXNEb2NrZWQpLmdldE9yKGZhbHNlKTtcbiAgICBjb25zdCBnZXRJZnJhbWVCZWhhdmlvdXJzID0gKCkgPT4gW1JlY2VpdmluZy5jb25maWcoeyBjaGFubmVsczogeyBbdG9vbGJhckhlaWdodENoYW5nZSgpXTogeyBvblJlY2VpdmU6IHVwZGF0ZUlmcmFtZUNvbnRlbnRGbG93IH0gfSB9KV07XG4gICAgY29uc3QgZ2V0QmVoYXZpb3VycyA9IChlZGl0b3IsIHNoYXJlZEJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgZm9jdXNlZEVsbSA9IHZhbHVlJDIoKTtcbiAgICAgIGNvbnN0IGxhenlTaW5rID0gc2hhcmVkQmFja3N0YWdlLmdldFNpbms7XG4gICAgICBjb25zdCBydW5PblNpbmtFbGVtZW50ID0gZiA9PiB7XG4gICAgICAgIGxhenlTaW5rKCkuZWFjaChzaW5rID0+IGYoc2luay5lbGVtZW50KSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25Eb2NraW5nU3dpdGNoID0gY29tcCA9PiB7XG4gICAgICAgIGlmICghZWRpdG9yLmlubGluZSkge1xuICAgICAgICAgIHVwZGF0ZUlmcmFtZUNvbnRlbnRGbG93KGNvbXApO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZUVkaXRvckNsYXNzZXMoZWRpdG9yLCBEb2NraW5nLmlzRG9ja2VkKGNvbXApKTtcbiAgICAgICAgY29tcC5nZXRTeXN0ZW0oKS5icm9hZGNhc3RPbihbcmVwb3NpdGlvblBvcHVwcygpXSwge30pO1xuICAgICAgICBsYXp5U2luaygpLmVhY2goc2luayA9PiBzaW5rLmdldFN5c3RlbSgpLmJyb2FkY2FzdE9uKFtyZXBvc2l0aW9uUG9wdXBzKCldLCB7fSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxCZWhhdmlvdXJzID0gZWRpdG9yLmlubGluZSA/IFtdIDogZ2V0SWZyYW1lQmVoYXZpb3VycygpO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgRm9jdXNpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgRG9ja2luZy5jb25maWcoe1xuICAgICAgICAgIGNvbnRleHR1YWw6IHtcbiAgICAgICAgICAgIGxhenlDb250ZXh0OiBjb21wID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaGVhZGVySGVpZ2h0ID0gZ2V0T3V0ZXIkMihjb21wLmVsZW1lbnQpO1xuICAgICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBlZGl0b3IuaW5saW5lID8gZWRpdG9yLmdldENvbnRlbnRBcmVhQ29udGFpbmVyKCkgOiBlZGl0b3IuZ2V0Q29udGFpbmVyKCk7XG4gICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKGNvbnRhaW5lcikubWFwKGMgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJveCA9IGJveCQxKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGMpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRTY3JvbGxpbmdDb250ZXh0ID0gZGV0ZWN0V2hlblNwbGl0VWlNb2RlKGVkaXRvciwgY29tcC5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0U2Nyb2xsaW5nQ29udGV4dC5mb2xkKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGJveEhlaWdodCA9IGJveC5oZWlnaHQgLSBoZWFkZXJIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0b3BCb3VuZCA9IGJveC55ICsgKGlzRG9ja2VkTW9kZShjb21wLCAndG9wJykgPyAwIDogaGVhZGVySGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBib3VuZHMoYm94LngsIHRvcEJvdW5kLCBib3gud2lkdGgsIGJveEhlaWdodCk7XG4gICAgICAgICAgICAgICAgfSwgc2Nyb2xsRW52ID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnN0cmFpbmVkQm91bmRzID0gY29uc3RyYWluKGJveCwgZ2V0Qm91bmRzRnJvbShzY3JvbGxFbnYpKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnN0cmFpbmVkQm91bmRzWSA9IGlzRG9ja2VkTW9kZShjb21wLCAndG9wJykgPyBjb25zdHJhaW5lZEJvdW5kcy55IDogY29uc3RyYWluZWRCb3VuZHMueSArIGhlYWRlckhlaWdodDtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBib3VuZHMoY29uc3RyYWluZWRCb3VuZHMueCwgY29uc3RyYWluZWRCb3VuZHNZLCBjb25zdHJhaW5lZEJvdW5kcy53aWR0aCwgY29uc3RyYWluZWRCb3VuZHMuaGVpZ2h0IC0gaGVhZGVySGVpZ2h0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25TaG93OiAoKSA9PiB7XG4gICAgICAgICAgICAgIHJ1bk9uU2lua0VsZW1lbnQoZWxlbSA9PiB1cGRhdGVTaW5rVmlzaWJpbGl0eShlbGVtLCB0cnVlKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25TaG93bjogY29tcCA9PiB7XG4gICAgICAgICAgICAgIHJ1bk9uU2lua0VsZW1lbnQoZWxlbSA9PiByZW1vdmUkMShlbGVtLCBbXG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eS50cmFuc2l0aW9uQ2xhc3MsXG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eS5mYWRlSW5DbGFzc1xuICAgICAgICAgICAgICBdKSk7XG4gICAgICAgICAgICAgIGZvY3VzZWRFbG0uZ2V0KCkuZWFjaChlbGVtID0+IHtcbiAgICAgICAgICAgICAgICByZXN0b3JlRm9jdXMoY29tcC5lbGVtZW50LCBlbGVtKTtcbiAgICAgICAgICAgICAgICBmb2N1c2VkRWxtLmNsZWFyKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uSGlkZTogY29tcCA9PiB7XG4gICAgICAgICAgICAgIGZpbmRGb2N1c2VkRWxlbShjb21wLmVsZW1lbnQsIGxhenlTaW5rKS5mb2xkKGZvY3VzZWRFbG0uY2xlYXIsIGZvY3VzZWRFbG0uc2V0KTtcbiAgICAgICAgICAgICAgcnVuT25TaW5rRWxlbWVudChlbGVtID0+IHVwZGF0ZVNpbmtWaXNpYmlsaXR5KGVsZW0sIGZhbHNlKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25IaWRkZW46ICgpID0+IHtcbiAgICAgICAgICAgICAgcnVuT25TaW5rRWxlbWVudChlbGVtID0+IHJlbW92ZSQxKGVsZW0sIFt2aXNpYmlsaXR5LnRyYW5zaXRpb25DbGFzc10pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi52aXNpYmlsaXR5XG4gICAgICAgICAgfSxcbiAgICAgICAgICBsYXp5Vmlld3BvcnQ6IGNvbXAgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3B0U2Nyb2xsaW5nQ29udGV4dCA9IGRldGVjdFdoZW5TcGxpdFVpTW9kZShlZGl0b3IsIGNvbXAuZWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm4gb3B0U2Nyb2xsaW5nQ29udGV4dC5mb2xkKCgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgYm91bmRzV2l0aG91dE9mZnNldCA9IHdpbigpO1xuICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBnZXRTdGlja3lUb29sYmFyT2Zmc2V0KGVkaXRvcik7XG4gICAgICAgICAgICAgIGNvbnN0IHRvcCA9IGJvdW5kc1dpdGhvdXRPZmZzZXQueSArIChpc0RvY2tlZE1vZGUoY29tcCwgJ3RvcCcpID8gb2Zmc2V0IDogMCk7XG4gICAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdW5kc1dpdGhvdXRPZmZzZXQuaGVpZ2h0IC0gKGlzRG9ja2VkTW9kZShjb21wLCAnYm90dG9tJykgPyBvZmZzZXQgOiAwKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBib3VuZHM6IGJvdW5kcyhib3VuZHNXaXRob3V0T2Zmc2V0LngsIHRvcCwgYm91bmRzV2l0aG91dE9mZnNldC53aWR0aCwgaGVpZ2h0KSxcbiAgICAgICAgICAgICAgICBvcHRTY3JvbGxFbnY6IE9wdGlvbmFsLm5vbmUoKVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSwgc2MgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb21iaW5lZEJvdW5kcyA9IGdldEJvdW5kc0Zyb20oc2MpO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGJvdW5kczogY29tYmluZWRCb3VuZHMsXG4gICAgICAgICAgICAgICAgb3B0U2Nyb2xsRW52OiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY3JvbGxUb3A6IHNjLmVsZW1lbnQuZG9tLnNjcm9sbFRvcCxcbiAgICAgICAgICAgICAgICAgIHNjcm9sbEVsbVRvcDogYWJzb2x1dGUkMyhzYy5lbGVtZW50KS50b3BcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBtb2RlczogW3NoYXJlZEJhY2tzdGFnZS5oZWFkZXIuZ2V0RG9ja2luZ01vZGUoKV0sXG4gICAgICAgICAgb25Eb2NrZWQ6IG9uRG9ja2luZ1N3aXRjaCxcbiAgICAgICAgICBvblVuZG9ja2VkOiBvbkRvY2tpbmdTd2l0Y2hcbiAgICAgICAgfSksXG4gICAgICAgIC4uLmFkZGl0aW9uYWxCZWhhdmlvdXJzXG4gICAgICBdO1xuICAgIH07XG5cbiAgICB2YXIgU3RpY2t5SGVhZGVyID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIHNldHVwOiBzZXR1cCQ5LFxuICAgICAgICBpc0RvY2tlZDogaXNEb2NrZWQsXG4gICAgICAgIGdldEJlaGF2aW91cnM6IGdldEJlaGF2aW91cnNcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlbmRlckhlYWRlciA9IHNwZWMgPT4ge1xuICAgICAgY29uc3QgZWRpdG9yID0gc3BlYy5lZGl0b3I7XG4gICAgICBjb25zdCBnZXRCZWhhdmlvdXJzJDIgPSBzcGVjLnN0aWNreSA/IGdldEJlaGF2aW91cnMgOiBnZXRCZWhhdmlvdXJzJDE7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1aWQ6IHNwZWMudWlkLFxuICAgICAgICBkb206IHNwZWMuZG9tLFxuICAgICAgICBjb21wb25lbnRzOiBzcGVjLmNvbXBvbmVudHMsXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKGdldEJlaGF2aW91cnMkMihlZGl0b3IsIHNwZWMuc2hhcmVkQmFja3N0YWdlKSlcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGdyb3VwVG9vbGJhckJ1dHRvblNjaGVtYSA9IG9iak9mKFtcbiAgICAgIHR5cGUsXG4gICAgICByZXF1aXJlZE9mKCdpdGVtcycsIG9uZU9mKFtcbiAgICAgICAgYXJyT2ZPYmooW1xuICAgICAgICAgIG5hbWUkMSxcbiAgICAgICAgICByZXF1aXJlZEFycmF5T2YoJ2l0ZW1zJywgc3RyaW5nKVxuICAgICAgICBdKSxcbiAgICAgICAgc3RyaW5nXG4gICAgICBdKSlcbiAgICBdLmNvbmNhdChiYXNlVG9vbGJhckJ1dHRvbkZpZWxkcykpO1xuICAgIGNvbnN0IGNyZWF0ZUdyb3VwVG9vbGJhckJ1dHRvbiA9IHNwZWMgPT4gYXNSYXcoJ0dyb3VwVG9vbGJhckJ1dHRvbicsIGdyb3VwVG9vbGJhckJ1dHRvblNjaGVtYSwgc3BlYyk7XG5cbiAgICBjb25zdCBiYXNlTWVudUJ1dHRvbkZpZWxkcyA9IFtcbiAgICAgIG9wdGlvblN0cmluZygndGV4dCcpLFxuICAgICAgb3B0aW9uU3RyaW5nKCd0b29sdGlwJyksXG4gICAgICBvcHRpb25TdHJpbmcoJ2ljb24nKSxcbiAgICAgIGRlZmF1bHRlZE9mKCdzZWFyY2gnLCBmYWxzZSwgb25lT2YoW1xuICAgICAgICBib29sZWFuLFxuICAgICAgICBvYmpPZihbb3B0aW9uU3RyaW5nKCdwbGFjZWhvbGRlcicpXSlcbiAgICAgIF0sIHggPT4ge1xuICAgICAgICBpZiAoaXNCb29sZWFuKHgpKSB7XG4gICAgICAgICAgcmV0dXJuIHggPyBPcHRpb25hbC5zb21lKHsgcGxhY2Vob2xkZXI6IE9wdGlvbmFsLm5vbmUoKSB9KSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh4KTtcbiAgICAgICAgfVxuICAgICAgfSkpLFxuICAgICAgcmVxdWlyZWRGdW5jdGlvbignZmV0Y2gnKSxcbiAgICAgIGRlZmF1bHRlZEZ1bmN0aW9uKCdvblNldHVwJywgKCkgPT4gbm9vcClcbiAgICBdO1xuXG4gICAgY29uc3QgTWVudUJ1dHRvblNjaGVtYSA9IG9iak9mKFtcbiAgICAgIHR5cGUsXG4gICAgICAuLi5iYXNlTWVudUJ1dHRvbkZpZWxkc1xuICAgIF0pO1xuICAgIGNvbnN0IGNyZWF0ZU1lbnVCdXR0b24gPSBzcGVjID0+IGFzUmF3KCdtZW51YnV0dG9uJywgTWVudUJ1dHRvblNjaGVtYSwgc3BlYyk7XG5cbiAgICBjb25zdCBzcGxpdEJ1dHRvblNjaGVtYSA9IG9iak9mKFtcbiAgICAgIHR5cGUsXG4gICAgICBvcHRpb25hbFRvb2x0aXAsXG4gICAgICBvcHRpb25hbEljb24sXG4gICAgICBvcHRpb25hbFRleHQsXG4gICAgICBvcHRpb25hbFNlbGVjdCxcbiAgICAgIGZldGNoJDEsXG4gICAgICBvblNldHVwLFxuICAgICAgZGVmYXVsdGVkU3RyaW5nRW51bSgncHJlc2V0cycsICdub3JtYWwnLCBbXG4gICAgICAgICdub3JtYWwnLFxuICAgICAgICAnY29sb3InLFxuICAgICAgICAnbGlzdHByZXZpZXcnXG4gICAgICBdKSxcbiAgICAgIGRlZmF1bHRlZENvbHVtbnMoMSksXG4gICAgICBvbkFjdGlvbixcbiAgICAgIG9uSXRlbUFjdGlvblxuICAgIF0pO1xuICAgIGNvbnN0IGNyZWF0ZVNwbGl0QnV0dG9uID0gc3BlYyA9PiBhc1JhdygnU3BsaXRCdXR0b24nLCBzcGxpdEJ1dHRvblNjaGVtYSwgc3BlYyk7XG5cbiAgICBjb25zdCBmYWN0b3J5JGQgPSAoZGV0YWlsLCBzcGVjKSA9PiB7XG4gICAgICBjb25zdCBzZXRNZW51cyA9IChjb21wLCBtZW51cykgPT4ge1xuICAgICAgICBjb25zdCBuZXdNZW51cyA9IG1hcCQyKG1lbnVzLCBtID0+IHtcbiAgICAgICAgICBjb25zdCBidXR0b25TcGVjID0ge1xuICAgICAgICAgICAgdHlwZTogJ21lbnVidXR0b24nLFxuICAgICAgICAgICAgdGV4dDogbS50ZXh0LFxuICAgICAgICAgICAgZmV0Y2g6IGNhbGxiYWNrID0+IHtcbiAgICAgICAgICAgICAgY2FsbGJhY2sobS5nZXRJdGVtcygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGludGVybmFsID0gY3JlYXRlTWVudUJ1dHRvbihidXR0b25TcGVjKS5tYXBFcnJvcihlcnJJbmZvID0+IGZvcm1hdEVycm9yKGVyckluZm8pKS5nZXRPckRpZSgpO1xuICAgICAgICAgIHJldHVybiByZW5kZXJNZW51QnV0dG9uKGludGVybmFsLCAndG94LW1idG4nLCBzcGVjLmJhY2tzdGFnZSwgT3B0aW9uYWwuc29tZSgnbWVudWl0ZW0nKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBSZXBsYWNpbmcuc2V0KGNvbXAsIG5ld01lbnVzKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBhcGlzID0ge1xuICAgICAgICBmb2N1czogS2V5aW5nLmZvY3VzSW4sXG4gICAgICAgIHNldE1lbnVzXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgICBkb206IGRldGFpbC5kb20sXG4gICAgICAgIGNvbXBvbmVudHM6IFtdLFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgUmVwbGFjaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgY29uZmlnKCdtZW51YmFyLWV2ZW50cycsIFtcbiAgICAgICAgICAgIHJ1bk9uQXR0YWNoZWQoY29tcG9uZW50ID0+IHtcbiAgICAgICAgICAgICAgZGV0YWlsLm9uU2V0dXAoY29tcG9uZW50KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcnVuJDEobW91c2VvdmVyKCksIChjb21wLCBzZSkgPT4ge1xuICAgICAgICAgICAgICBkZXNjZW5kYW50KGNvbXAuZWxlbWVudCwgJy4nICsgJ3RveC1tYnRuLS1hY3RpdmUnKS5lYWNoKGFjdGl2ZUJ1dHRvbiA9PiB7XG4gICAgICAgICAgICAgICAgY2xvc2VzdCQxKHNlLmV2ZW50LnRhcmdldCwgJy4nICsgJ3RveC1tYnRuJykuZWFjaChob3ZlcmVkQnV0dG9uID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICghZXEoYWN0aXZlQnV0dG9uLCBob3ZlcmVkQnV0dG9uKSkge1xuICAgICAgICAgICAgICAgICAgICBjb21wLmdldFN5c3RlbSgpLmdldEJ5RG9tKGFjdGl2ZUJ1dHRvbikuZWFjaChhY3RpdmVDb21wID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb21wLmdldFN5c3RlbSgpLmdldEJ5RG9tKGhvdmVyZWRCdXR0b24pLmVhY2goaG92ZXJlZENvbXAgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgRHJvcGRvd24uZXhwYW5kKGhvdmVyZWRDb21wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIERyb3Bkb3duLmNsb3NlKGFjdGl2ZUNvbXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgRm9jdXNpbmcuZm9jdXMoaG92ZXJlZENvbXApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHJ1biQxKGZvY3VzU2hpZnRlZCgpLCAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgICAgICAgc2UuZXZlbnQucHJldkZvY3VzLmJpbmQocHJldiA9PiBjb21wLmdldFN5c3RlbSgpLmdldEJ5RG9tKHByZXYpLnRvT3B0aW9uYWwoKSkuZWFjaChwcmV2ID0+IHtcbiAgICAgICAgICAgICAgICBzZS5ldmVudC5uZXdGb2N1cy5iaW5kKG51ID0+IGNvbXAuZ2V0U3lzdGVtKCkuZ2V0QnlEb20obnUpLnRvT3B0aW9uYWwoKSkuZWFjaChudSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoRHJvcGRvd24uaXNPcGVuKHByZXYpKSB7XG4gICAgICAgICAgICAgICAgICAgIERyb3Bkb3duLmV4cGFuZChudSk7XG4gICAgICAgICAgICAgICAgICAgIERyb3Bkb3duLmNsb3NlKHByZXYpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSksXG4gICAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBtb2RlOiAnZmxvdycsXG4gICAgICAgICAgICBzZWxlY3RvcjogJy4nICsgJ3RveC1tYnRuJyxcbiAgICAgICAgICAgIG9uRXNjYXBlOiBjb21wID0+IHtcbiAgICAgICAgICAgICAgZGV0YWlsLm9uRXNjYXBlKGNvbXApO1xuICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBUYWJzdG9wcGluZy5jb25maWcoe30pXG4gICAgICAgIF0pLFxuICAgICAgICBhcGlzLFxuICAgICAgICBkb21Nb2RpZmljYXRpb246IHsgYXR0cmlidXRlczogeyByb2xlOiAnbWVudWJhcicgfSB9XG4gICAgICB9O1xuICAgIH07XG4gICAgdmFyIFNpbHZlck1lbnViYXIgPSBzaW5nbGUoe1xuICAgICAgZmFjdG9yeTogZmFjdG9yeSRkLFxuICAgICAgbmFtZTogJ3NpbHZlci5NZW51YmFyJyxcbiAgICAgIGNvbmZpZ0ZpZWxkczogW1xuICAgICAgICByZXF1aXJlZCQxKCdkb20nKSxcbiAgICAgICAgcmVxdWlyZWQkMSgndWlkJyksXG4gICAgICAgIHJlcXVpcmVkJDEoJ29uRXNjYXBlJyksXG4gICAgICAgIHJlcXVpcmVkJDEoJ2JhY2tzdGFnZScpLFxuICAgICAgICBkZWZhdWx0ZWQoJ29uU2V0dXAnLCBub29wKVxuICAgICAgXSxcbiAgICAgIGFwaXM6IHtcbiAgICAgICAgZm9jdXM6IChhcGlzLCBjb21wKSA9PiB7XG4gICAgICAgICAgYXBpcy5mb2N1cyhjb21wKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0TWVudXM6IChhcGlzLCBjb21wLCBtZW51cykgPT4ge1xuICAgICAgICAgIGFwaXMuc2V0TWVudXMoY29tcCwgbWVudXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBwcm9tb3Rpb25NZXNzYWdlID0gJ1xcdTI2QTFcXHVmZTBmVXBncmFkZSc7XG4gICAgY29uc3QgcHJvbW90aW9uTGluayA9ICdodHRwczovL3d3dy50aW55LmNsb3VkL3RpbnltY2Utc2VsZi1ob3N0ZWQtcHJlbWl1bS1mZWF0dXJlcy8/dXRtX3NvdXJjZT1UaW55TUNFJnV0bV9tZWRpdW09U1BBUCZ1dG1fY2FtcGFpZ249U1BBUCZ1dG1faWQ9ZWRpdG9ycmVmZXJyYWwnO1xuICAgIGNvbnN0IHJlbmRlclByb21vdGlvbiA9IHNwZWMgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdWlkOiBzcGVjLnVpZCxcbiAgICAgICAgZG9tOiBzcGVjLmRvbSxcbiAgICAgICAgY29tcG9uZW50czogW3tcbiAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICB0YWc6ICdhJyxcbiAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICdocmVmJzogcHJvbW90aW9uTGluayxcbiAgICAgICAgICAgICAgICAncmVsJzogJ25vb3BlbmVyJyxcbiAgICAgICAgICAgICAgICAndGFyZ2V0JzogJ19ibGFuaycsXG4gICAgICAgICAgICAgICAgJ2FyaWEtaGlkZGVuJzogJ3RydWUnXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LXByb21vdGlvbi1saW5rJ10sXG4gICAgICAgICAgICAgIGlubmVySHRtbDogcHJvbW90aW9uTWVzc2FnZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1dXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBvd25lciA9ICdjb250YWluZXInO1xuICAgIGNvbnN0IHNjaGVtYSRkID0gW2ZpZWxkKCdzbG90QmVoYXZpb3VycycsIFtdKV07XG4gICAgY29uc3QgZ2V0UGFydE5hbWUgPSBuYW1lID0+ICc8YWxsb3kuZmllbGQuJyArIG5hbWUgKyAnPic7XG4gICAgY29uc3Qgc2tldGNoID0gc1NwZWMgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSAoKCkgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBbXTtcbiAgICAgICAgY29uc3Qgc2xvdCA9IChuYW1lLCBjb25maWcpID0+IHtcbiAgICAgICAgICByZWNvcmQucHVzaChuYW1lKTtcbiAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVPbmUkMShvd25lciwgZ2V0UGFydE5hbWUobmFtZSksIGNvbmZpZyk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2xvdCxcbiAgICAgICAgICByZWNvcmQ6IGNvbnN0YW50JDEocmVjb3JkKVxuICAgICAgICB9O1xuICAgICAgfSkoKTtcbiAgICAgIGNvbnN0IHNwZWMgPSBzU3BlYyhwYXJ0cyk7XG4gICAgICBjb25zdCBwYXJ0TmFtZXMgPSBwYXJ0cy5yZWNvcmQoKTtcbiAgICAgIGNvbnN0IGZpZWxkUGFydHMgPSBtYXAkMihwYXJ0TmFtZXMsIG4gPT4gcmVxdWlyZWQoe1xuICAgICAgICBuYW1lOiBuLFxuICAgICAgICBwbmFtZTogZ2V0UGFydE5hbWUobilcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBjb21wb3NpdGUkMShvd25lciwgc2NoZW1hJGQsIGZpZWxkUGFydHMsIG1ha2UkMSwgc3BlYyk7XG4gICAgfTtcbiAgICBjb25zdCBtYWtlJDEgPSAoZGV0YWlsLCBjb21wb25lbnRzKSA9PiB7XG4gICAgICBjb25zdCBnZXRTbG90TmFtZXMgPSBfID0+IGdldEFsbFBhcnROYW1lcyhkZXRhaWwpO1xuICAgICAgY29uc3QgZ2V0U2xvdCA9IChjb250YWluZXIsIGtleSkgPT4gZ2V0UGFydChjb250YWluZXIsIGRldGFpbCwga2V5KTtcbiAgICAgIGNvbnN0IG9uU2xvdCA9IChmLCBkZWYpID0+IChjb250YWluZXIsIGtleSkgPT4gZ2V0UGFydChjb250YWluZXIsIGRldGFpbCwga2V5KS5tYXAoc2xvdCA9PiBmKHNsb3QsIGtleSkpLmdldE9yKGRlZik7XG4gICAgICBjb25zdCBvblNsb3RzID0gZiA9PiAoY29udGFpbmVyLCBrZXlzKSA9PiB7XG4gICAgICAgIGVhY2gkMShrZXlzLCBrZXkgPT4gZihjb250YWluZXIsIGtleSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRvU2hvd2luZyA9IChjb21wLCBfa2V5KSA9PiBnZXQkZihjb21wLmVsZW1lbnQsICdhcmlhLWhpZGRlbicpICE9PSAndHJ1ZSc7XG4gICAgICBjb25zdCBkb1Nob3cgPSAoY29tcCwga2V5KSA9PiB7XG4gICAgICAgIGlmICghZG9TaG93aW5nKGNvbXApKSB7XG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IGNvbXAuZWxlbWVudDtcbiAgICAgICAgICByZW1vdmUkNihlbGVtZW50LCAnZGlzcGxheScpO1xuICAgICAgICAgIHJlbW92ZSQ3KGVsZW1lbnQsICdhcmlhLWhpZGRlbicpO1xuICAgICAgICAgIGVtaXRXaXRoKGNvbXAsIHNsb3RWaXNpYmlsaXR5KCksIHtcbiAgICAgICAgICAgIG5hbWU6IGtleSxcbiAgICAgICAgICAgIHZpc2libGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGRvSGlkZSA9IChjb21wLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGRvU2hvd2luZyhjb21wKSkge1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb21wLmVsZW1lbnQ7XG4gICAgICAgICAgc2V0JDgoZWxlbWVudCwgJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgICAgIHNldCQ5KGVsZW1lbnQsICdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG4gICAgICAgICAgZW1pdFdpdGgoY29tcCwgc2xvdFZpc2liaWxpdHkoKSwge1xuICAgICAgICAgICAgbmFtZToga2V5LFxuICAgICAgICAgICAgdmlzaWJsZTogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzU2hvd2luZyA9IG9uU2xvdChkb1Nob3dpbmcsIGZhbHNlKTtcbiAgICAgIGNvbnN0IGhpZGVTbG90ID0gb25TbG90KGRvSGlkZSk7XG4gICAgICBjb25zdCBoaWRlU2xvdHMgPSBvblNsb3RzKGhpZGVTbG90KTtcbiAgICAgIGNvbnN0IGhpZGVBbGxTbG90cyA9IGNvbnRhaW5lciA9PiBoaWRlU2xvdHMoY29udGFpbmVyLCBnZXRTbG90TmFtZXMoKSk7XG4gICAgICBjb25zdCBzaG93U2xvdCA9IG9uU2xvdChkb1Nob3cpO1xuICAgICAgY29uc3QgYXBpcyA9IHtcbiAgICAgICAgZ2V0U2xvdE5hbWVzLFxuICAgICAgICBnZXRTbG90LFxuICAgICAgICBpc1Nob3dpbmcsXG4gICAgICAgIGhpZGVTbG90LFxuICAgICAgICBoaWRlQWxsU2xvdHMsXG4gICAgICAgIHNob3dTbG90XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgICBkb206IGRldGFpbC5kb20sXG4gICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgIGJlaGF2aW91cnM6IGdldCQzKGRldGFpbC5zbG90QmVoYXZpb3VycyksXG4gICAgICAgIGFwaXNcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBzbG90QXBpcyA9IG1hcCQxKHtcbiAgICAgIGdldFNsb3ROYW1lczogKGFwaXMsIGMpID0+IGFwaXMuZ2V0U2xvdE5hbWVzKGMpLFxuICAgICAgZ2V0U2xvdDogKGFwaXMsIGMsIGtleSkgPT4gYXBpcy5nZXRTbG90KGMsIGtleSksXG4gICAgICBpc1Nob3dpbmc6IChhcGlzLCBjLCBrZXkpID0+IGFwaXMuaXNTaG93aW5nKGMsIGtleSksXG4gICAgICBoaWRlU2xvdDogKGFwaXMsIGMsIGtleSkgPT4gYXBpcy5oaWRlU2xvdChjLCBrZXkpLFxuICAgICAgaGlkZUFsbFNsb3RzOiAoYXBpcywgYykgPT4gYXBpcy5oaWRlQWxsU2xvdHMoYyksXG4gICAgICBzaG93U2xvdDogKGFwaXMsIGMsIGtleSkgPT4gYXBpcy5zaG93U2xvdChjLCBrZXkpXG4gICAgfSwgdmFsdWUgPT4gbWFrZUFwaSh2YWx1ZSkpO1xuICAgIGNvbnN0IFNsb3RDb250YWluZXIgPSB7XG4gICAgICAuLi5zbG90QXBpcyxcbiAgICAgIC4uLnsgc2tldGNoIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgc2lkZWJhclNjaGVtYSA9IG9iak9mKFtcbiAgICAgIG9wdGlvbmFsSWNvbixcbiAgICAgIG9wdGlvbmFsVG9vbHRpcCxcbiAgICAgIGRlZmF1bHRlZEZ1bmN0aW9uKCdvblNob3cnLCBub29wKSxcbiAgICAgIGRlZmF1bHRlZEZ1bmN0aW9uKCdvbkhpZGUnLCBub29wKSxcbiAgICAgIG9uU2V0dXBcbiAgICBdKTtcbiAgICBjb25zdCBjcmVhdGVTaWRlYmFyID0gc3BlYyA9PiBhc1Jhdygnc2lkZWJhcicsIHNpZGViYXJTY2hlbWEsIHNwZWMpO1xuXG4gICAgY29uc3Qgc2V0dXAkOCA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCB7c2lkZWJhcnN9ID0gZWRpdG9yLnVpLnJlZ2lzdHJ5LmdldEFsbCgpO1xuICAgICAgZWFjaCQxKGtleXMoc2lkZWJhcnMpLCBuYW1lID0+IHtcbiAgICAgICAgY29uc3Qgc3BlYyA9IHNpZGViYXJzW25hbWVdO1xuICAgICAgICBjb25zdCBpc0FjdGl2ZSA9ICgpID0+IGlzJDEoT3B0aW9uYWwuZnJvbShlZGl0b3IucXVlcnlDb21tYW5kVmFsdWUoJ1RvZ2dsZVNpZGViYXInKSksIG5hbWUpO1xuICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkVG9nZ2xlQnV0dG9uKG5hbWUsIHtcbiAgICAgICAgICBpY29uOiBzcGVjLmljb24sXG4gICAgICAgICAgdG9vbHRpcDogc3BlYy50b29sdGlwLFxuICAgICAgICAgIG9uQWN0aW9uOiBidXR0b25BcGkgPT4ge1xuICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdUb2dnbGVTaWRlYmFyJywgZmFsc2UsIG5hbWUpO1xuICAgICAgICAgICAgYnV0dG9uQXBpLnNldEFjdGl2ZShpc0FjdGl2ZSgpKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uU2V0dXA6IGJ1dHRvbkFwaSA9PiB7XG4gICAgICAgICAgICBidXR0b25BcGkuc2V0QWN0aXZlKGlzQWN0aXZlKCkpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlVG9nZ2xlID0gKCkgPT4gYnV0dG9uQXBpLnNldEFjdGl2ZShpc0FjdGl2ZSgpKTtcbiAgICAgICAgICAgIGVkaXRvci5vbignVG9nZ2xlU2lkZWJhcicsIGhhbmRsZVRvZ2dsZSk7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICBlZGl0b3Iub2ZmKCdUb2dnbGVTaWRlYmFyJywgaGFuZGxlVG9nZ2xlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0QXBpID0gY29tcCA9PiAoeyBlbGVtZW50OiAoKSA9PiBjb21wLmVsZW1lbnQuZG9tIH0pO1xuICAgIGNvbnN0IG1ha2VQYW5lbHMgPSAocGFydHMsIHBhbmVsQ29uZmlncykgPT4ge1xuICAgICAgY29uc3Qgc3BlY3MgPSBtYXAkMihrZXlzKHBhbmVsQ29uZmlncyksIG5hbWUgPT4ge1xuICAgICAgICBjb25zdCBzcGVjID0gcGFuZWxDb25maWdzW25hbWVdO1xuICAgICAgICBjb25zdCBicmlkZ2VkID0gZ2V0T3JEaWUoY3JlYXRlU2lkZWJhcihzcGVjKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBnZXRBcGksXG4gICAgICAgICAgb25TZXR1cDogYnJpZGdlZC5vblNldHVwLFxuICAgICAgICAgIG9uU2hvdzogYnJpZGdlZC5vblNob3csXG4gICAgICAgICAgb25IaWRlOiBicmlkZ2VkLm9uSGlkZVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbWFwJDIoc3BlY3MsIHNwZWMgPT4ge1xuICAgICAgICBjb25zdCBlZGl0b3JPZmZDZWxsID0gQ2VsbChub29wKTtcbiAgICAgICAgcmV0dXJuIHBhcnRzLnNsb3Qoc3BlYy5uYW1lLCB7XG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgY2xhc3NlczogWyd0b3gtc2lkZWJhcl9fcGFuZSddXG4gICAgICAgICAgfSxcbiAgICAgICAgICBiZWhhdmlvdXJzOiBTaW1wbGVCZWhhdmlvdXJzLnVubmFtZWRFdmVudHMoW1xuICAgICAgICAgICAgb25Db250cm9sQXR0YWNoZWQoc3BlYywgZWRpdG9yT2ZmQ2VsbCksXG4gICAgICAgICAgICBvbkNvbnRyb2xEZXRhY2hlZChzcGVjLCBlZGl0b3JPZmZDZWxsKSxcbiAgICAgICAgICAgIHJ1biQxKHNsb3RWaXNpYmlsaXR5KCksIChzaWRlcGFuZWwsIHNlKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBzZS5ldmVudDtcbiAgICAgICAgICAgICAgY29uc3Qgb3B0U2lkZVBhbmVsU3BlYyA9IGZpbmQkNShzcGVjcywgY29uZmlnID0+IGNvbmZpZy5uYW1lID09PSBkYXRhLm5hbWUpO1xuICAgICAgICAgICAgICBvcHRTaWRlUGFuZWxTcGVjLmVhY2goc2lkZVBhbmVsU3BlYyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IGRhdGEudmlzaWJsZSA/IHNpZGVQYW5lbFNwZWMub25TaG93IDogc2lkZVBhbmVsU3BlYy5vbkhpZGU7XG4gICAgICAgICAgICAgICAgaGFuZGxlcihzaWRlUGFuZWxTcGVjLmdldEFwaShzaWRlcGFuZWwpKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0pXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBtYWtlU2lkZWJhciA9IHBhbmVsQ29uZmlncyA9PiBTbG90Q29udGFpbmVyLnNrZXRjaChwYXJ0cyA9PiAoe1xuICAgICAgZG9tOiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFsndG94LXNpZGViYXJfX3BhbmUtY29udGFpbmVyJ11cbiAgICAgIH0sXG4gICAgICBjb21wb25lbnRzOiBtYWtlUGFuZWxzKHBhcnRzLCBwYW5lbENvbmZpZ3MpLFxuICAgICAgc2xvdEJlaGF2aW91cnM6IFNpbXBsZUJlaGF2aW91cnMudW5uYW1lZEV2ZW50cyhbcnVuT25BdHRhY2hlZChzbG90Q29udGFpbmVyID0+IFNsb3RDb250YWluZXIuaGlkZUFsbFNsb3RzKHNsb3RDb250YWluZXIpKV0pXG4gICAgfSkpO1xuICAgIGNvbnN0IHNldFNpZGViYXIgPSAoc2lkZWJhciwgcGFuZWxDb25maWdzLCBzaG93U2lkZWJhcikgPT4ge1xuICAgICAgY29uc3Qgb3B0U2xpZGVyID0gQ29tcG9zaW5nLmdldEN1cnJlbnQoc2lkZWJhcik7XG4gICAgICBvcHRTbGlkZXIuZWFjaChzbGlkZXIgPT4ge1xuICAgICAgICBSZXBsYWNpbmcuc2V0KHNsaWRlciwgW21ha2VTaWRlYmFyKHBhbmVsQ29uZmlncyldKTtcbiAgICAgICAgY29uc3QgY29uZmlnS2V5ID0gc2hvd1NpZGViYXIgPT09IG51bGwgfHwgc2hvd1NpZGViYXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNob3dTaWRlYmFyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChpc1N0cmluZyhjb25maWdLZXkpICYmIGhhcyQyKHBhbmVsQ29uZmlncywgY29uZmlnS2V5KSkge1xuICAgICAgICAgIENvbXBvc2luZy5nZXRDdXJyZW50KHNsaWRlcikuZWFjaChzbG90Q29udGFpbmVyID0+IHtcbiAgICAgICAgICAgIFNsb3RDb250YWluZXIuc2hvd1Nsb3Qoc2xvdENvbnRhaW5lciwgY29uZmlnS2V5KTtcbiAgICAgICAgICAgIFNsaWRpbmcuaW1tZWRpYXRlR3JvdyhzbGlkZXIpO1xuICAgICAgICAgICAgcmVtb3ZlJDYoc2xpZGVyLmVsZW1lbnQsICd3aWR0aCcpO1xuICAgICAgICAgICAgdXBkYXRlU2lkZWJhclJvbGVPblRvZ2dsZShzaWRlYmFyLmVsZW1lbnQsICdyZWdpb24nKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVTaWRlYmFyUm9sZU9uVG9nZ2xlID0gKHNpZGViYXIsIHNpZGViYXJTdGF0ZSkgPT4ge1xuICAgICAgc2V0JDkoc2lkZWJhciwgJ3JvbGUnLCBzaWRlYmFyU3RhdGUpO1xuICAgIH07XG4gICAgY29uc3QgdG9nZ2xlU2lkZWJhciA9IChzaWRlYmFyLCBuYW1lKSA9PiB7XG4gICAgICBjb25zdCBvcHRTbGlkZXIgPSBDb21wb3NpbmcuZ2V0Q3VycmVudChzaWRlYmFyKTtcbiAgICAgIG9wdFNsaWRlci5lYWNoKHNsaWRlciA9PiB7XG4gICAgICAgIGNvbnN0IG9wdFNsb3RDb250YWluZXIgPSBDb21wb3NpbmcuZ2V0Q3VycmVudChzbGlkZXIpO1xuICAgICAgICBvcHRTbG90Q29udGFpbmVyLmVhY2goc2xvdENvbnRhaW5lciA9PiB7XG4gICAgICAgICAgaWYgKFNsaWRpbmcuaGFzR3Jvd24oc2xpZGVyKSkge1xuICAgICAgICAgICAgaWYgKFNsb3RDb250YWluZXIuaXNTaG93aW5nKHNsb3RDb250YWluZXIsIG5hbWUpKSB7XG4gICAgICAgICAgICAgIFNsaWRpbmcuc2hyaW5rKHNsaWRlcik7XG4gICAgICAgICAgICAgIHVwZGF0ZVNpZGViYXJSb2xlT25Ub2dnbGUoc2lkZWJhci5lbGVtZW50LCAncHJlc2VudGF0aW9uJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBTbG90Q29udGFpbmVyLmhpZGVBbGxTbG90cyhzbG90Q29udGFpbmVyKTtcbiAgICAgICAgICAgICAgU2xvdENvbnRhaW5lci5zaG93U2xvdChzbG90Q29udGFpbmVyLCBuYW1lKTtcbiAgICAgICAgICAgICAgdXBkYXRlU2lkZWJhclJvbGVPblRvZ2dsZShzaWRlYmFyLmVsZW1lbnQsICdyZWdpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgU2xvdENvbnRhaW5lci5oaWRlQWxsU2xvdHMoc2xvdENvbnRhaW5lcik7XG4gICAgICAgICAgICBTbG90Q29udGFpbmVyLnNob3dTbG90KHNsb3RDb250YWluZXIsIG5hbWUpO1xuICAgICAgICAgICAgU2xpZGluZy5ncm93KHNsaWRlcik7XG4gICAgICAgICAgICB1cGRhdGVTaWRlYmFyUm9sZU9uVG9nZ2xlKHNpZGViYXIuZWxlbWVudCwgJ3JlZ2lvbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHdoaWNoU2lkZWJhciA9IHNpZGViYXIgPT4ge1xuICAgICAgY29uc3Qgb3B0U2xpZGVyID0gQ29tcG9zaW5nLmdldEN1cnJlbnQoc2lkZWJhcik7XG4gICAgICByZXR1cm4gb3B0U2xpZGVyLmJpbmQoc2xpZGVyID0+IHtcbiAgICAgICAgY29uc3Qgc2lkZWJhck9wZW4gPSBTbGlkaW5nLmlzR3Jvd2luZyhzbGlkZXIpIHx8IFNsaWRpbmcuaGFzR3Jvd24oc2xpZGVyKTtcbiAgICAgICAgaWYgKHNpZGViYXJPcGVuKSB7XG4gICAgICAgICAgY29uc3Qgb3B0U2xvdENvbnRhaW5lciA9IENvbXBvc2luZy5nZXRDdXJyZW50KHNsaWRlcik7XG4gICAgICAgICAgcmV0dXJuIG9wdFNsb3RDb250YWluZXIuYmluZChzbG90Q29udGFpbmVyID0+IGZpbmQkNShTbG90Q29udGFpbmVyLmdldFNsb3ROYW1lcyhzbG90Q29udGFpbmVyKSwgbmFtZSA9PiBTbG90Q29udGFpbmVyLmlzU2hvd2luZyhzbG90Q29udGFpbmVyLCBuYW1lKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZml4U2l6ZSA9IGdlbmVyYXRlJDYoJ0ZpeFNpemVFdmVudCcpO1xuICAgIGNvbnN0IGF1dG9TaXplID0gZ2VuZXJhdGUkNignQXV0b1NpemVFdmVudCcpO1xuICAgIGNvbnN0IHJlbmRlclNpZGViYXIgPSBzcGVjID0+ICh7XG4gICAgICB1aWQ6IHNwZWMudWlkLFxuICAgICAgZG9tOiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFsndG94LXNpZGViYXInXSxcbiAgICAgICAgYXR0cmlidXRlczogeyByb2xlOiAncHJlc2VudGF0aW9uJyB9XG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czogW3tcbiAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1zaWRlYmFyX19zbGlkZXInXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcG9uZW50czogW10sXG4gICAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgICAgVGFic3RvcHBpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICAgIEZvY3VzaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgICBTbGlkaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICAgIGRpbWVuc2lvbjogeyBwcm9wZXJ0eTogJ3dpZHRoJyB9LFxuICAgICAgICAgICAgICBjbG9zZWRDbGFzczogJ3RveC1zaWRlYmFyLS1zbGlkaW5nLWNsb3NlZCcsXG4gICAgICAgICAgICAgIG9wZW5DbGFzczogJ3RveC1zaWRlYmFyLS1zbGlkaW5nLW9wZW4nLFxuICAgICAgICAgICAgICBzaHJpbmtpbmdDbGFzczogJ3RveC1zaWRlYmFyLS1zbGlkaW5nLXNocmlua2luZycsXG4gICAgICAgICAgICAgIGdyb3dpbmdDbGFzczogJ3RveC1zaWRlYmFyLS1zbGlkaW5nLWdyb3dpbmcnLFxuICAgICAgICAgICAgICBvblNocnVuazogc2xpZGVyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRTbG90Q29udGFpbmVyID0gQ29tcG9zaW5nLmdldEN1cnJlbnQoc2xpZGVyKTtcbiAgICAgICAgICAgICAgICBvcHRTbG90Q29udGFpbmVyLmVhY2goU2xvdENvbnRhaW5lci5oaWRlQWxsU2xvdHMpO1xuICAgICAgICAgICAgICAgIGVtaXQoc2xpZGVyLCBhdXRvU2l6ZSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uR3Jvd246IHNsaWRlciA9PiB7XG4gICAgICAgICAgICAgICAgZW1pdChzbGlkZXIsIGF1dG9TaXplKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb25TdGFydEdyb3c6IHNsaWRlciA9PiB7XG4gICAgICAgICAgICAgICAgZW1pdFdpdGgoc2xpZGVyLCBmaXhTaXplLCB7IHdpZHRoOiBnZXRSYXcoc2xpZGVyLmVsZW1lbnQsICd3aWR0aCcpLmdldE9yKCcnKSB9KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb25TdGFydFNocmluazogc2xpZGVyID0+IHtcbiAgICAgICAgICAgICAgICBlbWl0V2l0aChzbGlkZXIsIGZpeFNpemUsIHsgd2lkdGg6IGdldCRjKHNsaWRlci5lbGVtZW50KSArICdweCcgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgUmVwbGFjaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgICBDb21wb3NpbmcuY29uZmlnKHtcbiAgICAgICAgICAgICAgZmluZDogY29tcCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBSZXBsYWNpbmcuY29udGVudHMoY29tcCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhlYWQoY2hpbGRyZW4pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0pXG4gICAgICAgIH1dLFxuICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICBDb21wb3NpbmdDb25maWdzLmNoaWxkQXQoMCksXG4gICAgICAgIGNvbmZpZygnc2lkZWJhci1zbGlkaW5nLWV2ZW50cycsIFtcbiAgICAgICAgICBydW4kMShmaXhTaXplLCAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgICAgIHNldCQ4KGNvbXAuZWxlbWVudCwgJ3dpZHRoJywgc2UuZXZlbnQud2lkdGgpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJ1biQxKGF1dG9TaXplLCAoY29tcCwgX3NlKSA9PiB7XG4gICAgICAgICAgICByZW1vdmUkNihjb21wLmVsZW1lbnQsICd3aWR0aCcpO1xuICAgICAgICAgIH0pXG4gICAgICAgIF0pXG4gICAgICBdKVxuICAgIH0pO1xuXG4gICAgY29uc3QgYmxvY2sgPSAoY29tcG9uZW50LCBjb25maWcsIHN0YXRlLCBnZXRCdXN5U3BlYykgPT4ge1xuICAgICAgc2V0JDkoY29tcG9uZW50LmVsZW1lbnQsICdhcmlhLWJ1c3knLCB0cnVlKTtcbiAgICAgIGNvbnN0IHJvb3QgPSBjb25maWcuZ2V0Um9vdChjb21wb25lbnQpLmdldE9yKGNvbXBvbmVudCk7XG4gICAgICBjb25zdCBibG9ja2VyQmVoYXZpb3VycyA9IGRlcml2ZSQxKFtcbiAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgbW9kZTogJ3NwZWNpYWwnLFxuICAgICAgICAgIG9uVGFiOiAoKSA9PiBPcHRpb25hbC5zb21lKHRydWUpLFxuICAgICAgICAgIG9uU2hpZnRUYWI6ICgpID0+IE9wdGlvbmFsLnNvbWUodHJ1ZSlcbiAgICAgICAgfSksXG4gICAgICAgIEZvY3VzaW5nLmNvbmZpZyh7fSlcbiAgICAgIF0pO1xuICAgICAgY29uc3QgYmxvY2tTcGVjID0gZ2V0QnVzeVNwZWMocm9vdCwgYmxvY2tlckJlaGF2aW91cnMpO1xuICAgICAgY29uc3QgYmxvY2tlciA9IHJvb3QuZ2V0U3lzdGVtKCkuYnVpbGQoYmxvY2tTcGVjKTtcbiAgICAgIFJlcGxhY2luZy5hcHBlbmQocm9vdCwgcHJlbWFkZShibG9ja2VyKSk7XG4gICAgICBpZiAoYmxvY2tlci5oYXNDb25maWd1cmVkKEtleWluZykgJiYgY29uZmlnLmZvY3VzKSB7XG4gICAgICAgIEtleWluZy5mb2N1c0luKGJsb2NrZXIpO1xuICAgICAgfVxuICAgICAgaWYgKCFzdGF0ZS5pc0Jsb2NrZWQoKSkge1xuICAgICAgICBjb25maWcub25CbG9jayhjb21wb25lbnQpO1xuICAgICAgfVxuICAgICAgc3RhdGUuYmxvY2tXaXRoKCgpID0+IFJlcGxhY2luZy5yZW1vdmUocm9vdCwgYmxvY2tlcikpO1xuICAgIH07XG4gICAgY29uc3QgdW5ibG9jayA9IChjb21wb25lbnQsIGNvbmZpZywgc3RhdGUpID0+IHtcbiAgICAgIHJlbW92ZSQ3KGNvbXBvbmVudC5lbGVtZW50LCAnYXJpYS1idXN5Jyk7XG4gICAgICBpZiAoc3RhdGUuaXNCbG9ja2VkKCkpIHtcbiAgICAgICAgY29uZmlnLm9uVW5ibG9jayhjb21wb25lbnQpO1xuICAgICAgfVxuICAgICAgc3RhdGUuY2xlYXIoKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQmxvY2tlZCA9IChjb21wb25lbnQsIGJsb2NraW5nQ29uZmlnLCBibG9ja2luZ1N0YXRlKSA9PiBibG9ja2luZ1N0YXRlLmlzQmxvY2tlZCgpO1xuXG4gICAgdmFyIEJsb2NraW5nQXBpcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBibG9jazogYmxvY2ssXG4gICAgICAgIHVuYmxvY2s6IHVuYmxvY2ssXG4gICAgICAgIGlzQmxvY2tlZDogaXNCbG9ja2VkXG4gICAgfSk7XG5cbiAgICB2YXIgQmxvY2tpbmdTY2hlbWEgPSBbXG4gICAgICBkZWZhdWx0ZWRGdW5jdGlvbignZ2V0Um9vdCcsIE9wdGlvbmFsLm5vbmUpLFxuICAgICAgZGVmYXVsdGVkQm9vbGVhbignZm9jdXMnLCB0cnVlKSxcbiAgICAgIG9uSGFuZGxlcignb25CbG9jaycpLFxuICAgICAgb25IYW5kbGVyKCdvblVuYmxvY2snKVxuICAgIF07XG5cbiAgICBjb25zdCBpbml0JDQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBibG9ja2VyID0gZGVzdHJveWFibGUoKTtcbiAgICAgIGNvbnN0IGJsb2NrV2l0aCA9IGRlc3Ryb3kgPT4ge1xuICAgICAgICBibG9ja2VyLnNldCh7IGRlc3Ryb3kgfSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIG51JDgoe1xuICAgICAgICByZWFkU3RhdGU6IGJsb2NrZXIuaXNTZXQsXG4gICAgICAgIGJsb2NrV2l0aCxcbiAgICAgICAgY2xlYXI6IGJsb2NrZXIuY2xlYXIsXG4gICAgICAgIGlzQmxvY2tlZDogYmxvY2tlci5pc1NldFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHZhciBCbG9ja2luZ1N0YXRlID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIGluaXQ6IGluaXQkNFxuICAgIH0pO1xuXG4gICAgY29uc3QgQmxvY2tpbmcgPSBjcmVhdGUkNCh7XG4gICAgICBmaWVsZHM6IEJsb2NraW5nU2NoZW1hLFxuICAgICAgbmFtZTogJ2Jsb2NraW5nJyxcbiAgICAgIGFwaXM6IEJsb2NraW5nQXBpcyxcbiAgICAgIHN0YXRlOiBCbG9ja2luZ1N0YXRlXG4gICAgfSk7XG5cbiAgICBjb25zdCBnZXRBdHRycyA9IGVsZW0gPT4ge1xuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGVsZW0uZG9tLmF0dHJpYnV0ZXMgIT09IHVuZGVmaW5lZCA/IGVsZW0uZG9tLmF0dHJpYnV0ZXMgOiBbXTtcbiAgICAgIHJldHVybiBmb2xkbChhdHRyaWJ1dGVzLCAoYiwgYXR0cikgPT4ge1xuICAgICAgICBpZiAoYXR0ci5uYW1lID09PSAnY2xhc3MnKSB7XG4gICAgICAgICAgcmV0dXJuIGI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmIsXG4gICAgICAgICAgICBbYXR0ci5uYW1lXTogYXR0ci52YWx1ZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sIHt9KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldENsYXNzZXMgPSBlbGVtID0+IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGVsZW0uZG9tLmNsYXNzTGlzdCwgMCk7XG4gICAgY29uc3QgZnJvbUh0bWwgPSBodG1sID0+IHtcbiAgICAgIGNvbnN0IGVsZW0gPSBTdWdhckVsZW1lbnQuZnJvbUh0bWwoaHRtbCk7XG4gICAgICBjb25zdCBjaGlsZHJlbiQxID0gY2hpbGRyZW4oZWxlbSk7XG4gICAgICBjb25zdCBhdHRycyA9IGdldEF0dHJzKGVsZW0pO1xuICAgICAgY29uc3QgY2xhc3NlcyA9IGdldENsYXNzZXMoZWxlbSk7XG4gICAgICBjb25zdCBjb250ZW50cyA9IGNoaWxkcmVuJDEubGVuZ3RoID09PSAwID8ge30gOiB7IGlubmVySHRtbDogZ2V0JDkoZWxlbSkgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhZzogbmFtZSQzKGVsZW0pLFxuICAgICAgICBjbGFzc2VzLFxuICAgICAgICBhdHRyaWJ1dGVzOiBhdHRycyxcbiAgICAgICAgLi4uY29udGVudHNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGdldEJ1c3lTcGVjJDEgPSBwcm92aWRlckJhY2tzdGFnZSA9PiAoX3Jvb3QsIF9iZWhhdmlvdXJzKSA9PiAoe1xuICAgICAgZG9tOiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAnYXJpYS1sYWJlbCc6IHByb3ZpZGVyQmFja3N0YWdlLnRyYW5zbGF0ZSgnTG9hZGluZy4uLicpLFxuICAgICAgICAgICd0YWJpbmRleCc6ICcwJ1xuICAgICAgICB9LFxuICAgICAgICBjbGFzc2VzOiBbJ3RveC10aHJvYmJlcl9fYnVzeS1zcGlubmVyJ11cbiAgICAgIH0sXG4gICAgICBjb21wb25lbnRzOiBbeyBkb206IGZyb21IdG1sKCc8ZGl2IGNsYXNzPVwidG94LXNwaW5uZXJcIj48ZGl2PjwvZGl2PjxkaXY+PC9kaXY+PGRpdj48L2Rpdj48L2Rpdj4nKSB9XVxuICAgIH0pO1xuICAgIGNvbnN0IGZvY3VzQnVzeUNvbXBvbmVudCA9IHRocm9iYmVyID0+IENvbXBvc2luZy5nZXRDdXJyZW50KHRocm9iYmVyKS5lYWNoKGNvbXAgPT4gZm9jdXMkMyhjb21wLmVsZW1lbnQpKTtcbiAgICBjb25zdCB0b2dnbGVFZGl0b3JUYWJJbmRleCA9IChlZGl0b3IsIHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCB0YWJJbmRleEF0dHIgPSAndGFiaW5kZXgnO1xuICAgICAgY29uc3QgZGF0YVRhYkluZGV4QXR0ciA9IGBkYXRhLW1jZS0keyB0YWJJbmRleEF0dHIgfWA7XG4gICAgICBPcHRpb25hbC5mcm9tKGVkaXRvci5pZnJhbWVFbGVtZW50KS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pLmVhY2goaWZyYW1lID0+IHtcbiAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgZ2V0T3B0KGlmcmFtZSwgdGFiSW5kZXhBdHRyKS5lYWNoKHRhYkluZGV4ID0+IHNldCQ5KGlmcmFtZSwgZGF0YVRhYkluZGV4QXR0ciwgdGFiSW5kZXgpKTtcbiAgICAgICAgICBzZXQkOShpZnJhbWUsIHRhYkluZGV4QXR0ciwgLTEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbW92ZSQ3KGlmcmFtZSwgdGFiSW5kZXhBdHRyKTtcbiAgICAgICAgICBnZXRPcHQoaWZyYW1lLCBkYXRhVGFiSW5kZXhBdHRyKS5lYWNoKHRhYkluZGV4ID0+IHtcbiAgICAgICAgICAgIHNldCQ5KGlmcmFtZSwgdGFiSW5kZXhBdHRyLCB0YWJJbmRleCk7XG4gICAgICAgICAgICByZW1vdmUkNyhpZnJhbWUsIGRhdGFUYWJJbmRleEF0dHIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHRvZ2dsZVRocm9iYmVyID0gKGVkaXRvciwgY29tcCwgc3RhdGUsIHByb3ZpZGVyQmFja3N0YWdlKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gY29tcC5lbGVtZW50O1xuICAgICAgdG9nZ2xlRWRpdG9yVGFiSW5kZXgoZWRpdG9yLCBzdGF0ZSk7XG4gICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgQmxvY2tpbmcuYmxvY2soY29tcCwgZ2V0QnVzeVNwZWMkMShwcm92aWRlckJhY2tzdGFnZSkpO1xuICAgICAgICByZW1vdmUkNihlbGVtZW50LCAnZGlzcGxheScpO1xuICAgICAgICByZW1vdmUkNyhlbGVtZW50LCAnYXJpYS1oaWRkZW4nKTtcbiAgICAgICAgaWYgKGVkaXRvci5oYXNGb2N1cygpKSB7XG4gICAgICAgICAgZm9jdXNCdXN5Q29tcG9uZW50KGNvbXApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0aHJvYmJlckZvY3VzID0gQ29tcG9zaW5nLmdldEN1cnJlbnQoY29tcCkuZXhpc3RzKGJ1c3lDb21wID0+IGhhc0ZvY3VzKGJ1c3lDb21wLmVsZW1lbnQpKTtcbiAgICAgICAgQmxvY2tpbmcudW5ibG9jayhjb21wKTtcbiAgICAgICAgc2V0JDgoZWxlbWVudCwgJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgICBzZXQkOShlbGVtZW50LCAnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgICAgICBpZiAodGhyb2JiZXJGb2N1cykge1xuICAgICAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJUaHJvYmJlciA9IHNwZWMgPT4gKHtcbiAgICAgIHVpZDogc3BlYy51aWQsXG4gICAgICBkb206IHtcbiAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgYXR0cmlidXRlczogeyAnYXJpYS1oaWRkZW4nOiAndHJ1ZScgfSxcbiAgICAgICAgY2xhc3NlczogWyd0b3gtdGhyb2JiZXInXSxcbiAgICAgICAgc3R5bGVzOiB7IGRpc3BsYXk6ICdub25lJyB9XG4gICAgICB9LFxuICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICBSZXBsYWNpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgQmxvY2tpbmcuY29uZmlnKHsgZm9jdXM6IGZhbHNlIH0pLFxuICAgICAgICBDb21wb3NpbmcuY29uZmlnKHsgZmluZDogY29tcCA9PiBoZWFkKGNvbXAuY29tcG9uZW50cygpKSB9KVxuICAgICAgXSksXG4gICAgICBjb21wb25lbnRzOiBbXVxuICAgIH0pO1xuICAgIGNvbnN0IGlzRm9jdXNFdmVudCA9IGV2ZW50ID0+IGV2ZW50LnR5cGUgPT09ICdmb2N1c2luJztcbiAgICBjb25zdCBpc1Bhc3RlQmluVGFyZ2V0ID0gZXZlbnQgPT4ge1xuICAgICAgaWYgKGlzRm9jdXNFdmVudChldmVudCkpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGV2ZW50LmNvbXBvc2VkID8gaGVhZChldmVudC5jb21wb3NlZFBhdGgoKSkgOiBPcHRpb25hbC5mcm9tKGV2ZW50LnRhcmdldCk7XG4gICAgICAgIHJldHVybiBub2RlLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSkuZmlsdGVyKGlzRWxlbWVudCQxKS5leGlzdHModGFyZ2V0RWxtID0+IGhhcyh0YXJnZXRFbG0sICdtY2UtcGFzdGViaW4nKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cCQ3ID0gKGVkaXRvciwgbGF6eVRocm9iYmVyLCBzaGFyZWRCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IHRocm9iYmVyU3RhdGUgPSBDZWxsKGZhbHNlKTtcbiAgICAgIGNvbnN0IHRpbWVyID0gdmFsdWUkMigpO1xuICAgICAgY29uc3Qgc3RlYWxGb2N1cyA9IGUgPT4ge1xuICAgICAgICBpZiAodGhyb2JiZXJTdGF0ZS5nZXQoKSAmJiAhaXNQYXN0ZUJpblRhcmdldChlKSkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBmb2N1c0J1c3lDb21wb25lbnQobGF6eVRocm9iYmVyKCkpO1xuICAgICAgICAgIGVkaXRvci5lZGl0b3JNYW5hZ2VyLnNldEFjdGl2ZShlZGl0b3IpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKCFlZGl0b3IuaW5saW5lKSB7XG4gICAgICAgIGVkaXRvci5vbignUHJlSW5pdCcsICgpID0+IHtcbiAgICAgICAgICBlZGl0b3IuZG9tLmJpbmQoZWRpdG9yLmdldFdpbigpLCAnZm9jdXNpbicsIHN0ZWFsRm9jdXMpO1xuICAgICAgICAgIGVkaXRvci5vbignQmVmb3JlRXhlY0NvbW1hbmQnLCBlID0+IHtcbiAgICAgICAgICAgIGlmIChlLmNvbW1hbmQudG9Mb3dlckNhc2UoKSA9PT0gJ21jZWZvY3VzJyAmJiBlLnZhbHVlICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgIHN0ZWFsRm9jdXMoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgdG9nZ2xlID0gc3RhdGUgPT4ge1xuICAgICAgICBpZiAoc3RhdGUgIT09IHRocm9iYmVyU3RhdGUuZ2V0KCkpIHtcbiAgICAgICAgICB0aHJvYmJlclN0YXRlLnNldChzdGF0ZSk7XG4gICAgICAgICAgdG9nZ2xlVGhyb2JiZXIoZWRpdG9yLCBsYXp5VGhyb2JiZXIoKSwgc3RhdGUsIHNoYXJlZEJhY2tzdGFnZS5wcm92aWRlcnMpO1xuICAgICAgICAgIGZpcmVBZnRlclByb2dyZXNzU3RhdGUoZWRpdG9yLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBlZGl0b3Iub24oJ1Byb2dyZXNzU3RhdGUnLCBlID0+IHtcbiAgICAgICAgdGltZXIub24oY2xlYXJUaW1lb3V0KTtcbiAgICAgICAgaWYgKGlzTnVtYmVyKGUudGltZSkpIHtcbiAgICAgICAgICBjb25zdCB0aW1lcklkID0gZ2xvYmFsJDkuc2V0RWRpdG9yVGltZW91dChlZGl0b3IsICgpID0+IHRvZ2dsZShlLnN0YXRlKSwgZS50aW1lKTtcbiAgICAgICAgICB0aW1lci5zZXQodGltZXJJZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9nZ2xlKGUuc3RhdGUpO1xuICAgICAgICAgIHRpbWVyLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBnZW5lcmF0ZSQxID0gKHhzLCBmKSA9PiB7XG4gICAgICBjb25zdCBpbml0ID0ge1xuICAgICAgICBsZW46IDAsXG4gICAgICAgIGxpc3Q6IFtdXG4gICAgICB9O1xuICAgICAgY29uc3QgciA9IGZvbGRsKHhzLCAoYiwgYSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGYoYSwgYi5sZW4pO1xuICAgICAgICByZXR1cm4gdmFsdWUuZm9sZChjb25zdGFudCQxKGIpLCB2ID0+ICh7XG4gICAgICAgICAgbGVuOiB2LmZpbmlzaCxcbiAgICAgICAgICBsaXN0OiBiLmxpc3QuY29uY2F0KFt2XSlcbiAgICAgICAgfSkpO1xuICAgICAgfSwgaW5pdCk7XG4gICAgICByZXR1cm4gci5saXN0O1xuICAgIH07XG5cbiAgICBjb25zdCBvdXRwdXQgPSAod2l0aGluLCBleHRyYSwgd2l0aGluV2lkdGgpID0+ICh7XG4gICAgICB3aXRoaW4sXG4gICAgICBleHRyYSxcbiAgICAgIHdpdGhpbldpZHRoXG4gICAgfSk7XG4gICAgY29uc3QgYXBwb3J0aW9uID0gKHVuaXRzLCB0b3RhbCwgbGVuKSA9PiB7XG4gICAgICBjb25zdCBwYXJyYXkgPSBnZW5lcmF0ZSQxKHVuaXRzLCAodW5pdCwgY3VycmVudCkgPT4ge1xuICAgICAgICBjb25zdCB3aWR0aCA9IGxlbih1bml0KTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgIGVsZW1lbnQ6IHVuaXQsXG4gICAgICAgICAgc3RhcnQ6IGN1cnJlbnQsXG4gICAgICAgICAgZmluaXNoOiBjdXJyZW50ICsgd2lkdGgsXG4gICAgICAgICAgd2lkdGhcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHdpdGhpbiA9IGZpbHRlciQyKHBhcnJheSwgdW5pdCA9PiB1bml0LmZpbmlzaCA8PSB0b3RhbCk7XG4gICAgICBjb25zdCB3aXRoaW5XaWR0aCA9IGZvbGRyKHdpdGhpbiwgKGFjYywgZWwpID0+IGFjYyArIGVsLndpZHRoLCAwKTtcbiAgICAgIGNvbnN0IGV4dHJhID0gcGFycmF5LnNsaWNlKHdpdGhpbi5sZW5ndGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2l0aGluLFxuICAgICAgICBleHRyYSxcbiAgICAgICAgd2l0aGluV2lkdGhcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCB0b1VuaXQgPSBwYXJyYXkgPT4gbWFwJDIocGFycmF5LCB1bml0ID0+IHVuaXQuZWxlbWVudCk7XG4gICAgY29uc3QgZml0TGFzdCA9ICh3aXRoaW4sIGV4dHJhLCB3aXRoaW5XaWR0aCkgPT4ge1xuICAgICAgY29uc3QgZml0cyA9IHRvVW5pdCh3aXRoaW4uY29uY2F0KGV4dHJhKSk7XG4gICAgICByZXR1cm4gb3V0cHV0KGZpdHMsIFtdLCB3aXRoaW5XaWR0aCk7XG4gICAgfTtcbiAgICBjb25zdCBvdmVyZmxvdyA9ICh3aXRoaW4sIGV4dHJhLCBvdmVyZmxvd2VyLCB3aXRoaW5XaWR0aCkgPT4ge1xuICAgICAgY29uc3QgZml0cyA9IHRvVW5pdCh3aXRoaW4pLmNvbmNhdChbb3ZlcmZsb3dlcl0pO1xuICAgICAgcmV0dXJuIG91dHB1dChmaXRzLCB0b1VuaXQoZXh0cmEpLCB3aXRoaW5XaWR0aCk7XG4gICAgfTtcbiAgICBjb25zdCBmaXRBbGwgPSAod2l0aGluLCBleHRyYSwgd2l0aGluV2lkdGgpID0+IG91dHB1dCh0b1VuaXQod2l0aGluKSwgW10sIHdpdGhpbldpZHRoKTtcbiAgICBjb25zdCB0cnlGaXQgPSAodG90YWwsIHVuaXRzLCBsZW4pID0+IHtcbiAgICAgIGNvbnN0IGRpdmlkZSA9IGFwcG9ydGlvbih1bml0cywgdG90YWwsIGxlbik7XG4gICAgICByZXR1cm4gZGl2aWRlLmV4dHJhLmxlbmd0aCA9PT0gMCA/IE9wdGlvbmFsLnNvbWUoZGl2aWRlKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IHBhcnRpdGlvbiA9ICh0b3RhbCwgdW5pdHMsIGxlbiwgb3ZlcmZsb3dlcikgPT4ge1xuICAgICAgY29uc3QgZGl2aWRlID0gdHJ5Rml0KHRvdGFsLCB1bml0cywgbGVuKS5nZXRPclRodW5rKCgpID0+IGFwcG9ydGlvbih1bml0cywgdG90YWwgLSBsZW4ob3ZlcmZsb3dlciksIGxlbikpO1xuICAgICAgY29uc3Qgd2l0aGluID0gZGl2aWRlLndpdGhpbjtcbiAgICAgIGNvbnN0IGV4dHJhID0gZGl2aWRlLmV4dHJhO1xuICAgICAgY29uc3Qgd2l0aGluV2lkdGggPSBkaXZpZGUud2l0aGluV2lkdGg7XG4gICAgICBpZiAoZXh0cmEubGVuZ3RoID09PSAxICYmIGV4dHJhWzBdLndpZHRoIDw9IGxlbihvdmVyZmxvd2VyKSkge1xuICAgICAgICByZXR1cm4gZml0TGFzdCh3aXRoaW4sIGV4dHJhLCB3aXRoaW5XaWR0aCk7XG4gICAgICB9IGVsc2UgaWYgKGV4dHJhLmxlbmd0aCA+PSAxKSB7XG4gICAgICAgIHJldHVybiBvdmVyZmxvdyh3aXRoaW4sIGV4dHJhLCBvdmVyZmxvd2VyLCB3aXRoaW5XaWR0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZml0QWxsKHdpdGhpbiwgZXh0cmEsIHdpdGhpbldpZHRoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0R3JvdXBzJDEgPSAodG9vbGJhciwgc3RvcmVkR3JvdXBzKSA9PiB7XG4gICAgICBjb25zdCBiR3JvdXBzID0gbWFwJDIoc3RvcmVkR3JvdXBzLCBnID0+IHByZW1hZGUoZykpO1xuICAgICAgVG9vbGJhci5zZXRHcm91cHModG9vbGJhciwgYkdyb3Vwcyk7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kRm9jdXNlZENvbXAgPSBjb21wcyA9PiBmaW5kTWFwKGNvbXBzLCBjb21wID0+IHNlYXJjaChjb21wLmVsZW1lbnQpLmJpbmQoZm9jdXNlZEVsbSA9PiBjb21wLmdldFN5c3RlbSgpLmdldEJ5RG9tKGZvY3VzZWRFbG0pLnRvT3B0aW9uYWwoKSkpO1xuICAgIGNvbnN0IHJlZnJlc2gkMiA9ICh0b29sYmFyLCBkZXRhaWwsIHNldE92ZXJmbG93KSA9PiB7XG4gICAgICBjb25zdCBidWlsdEdyb3VwcyA9IGRldGFpbC5idWlsdEdyb3Vwcy5nZXQoKTtcbiAgICAgIGlmIChidWlsdEdyb3Vwcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcHJpbWFyeSA9IGdldFBhcnRPckRpZSh0b29sYmFyLCBkZXRhaWwsICdwcmltYXJ5Jyk7XG4gICAgICBjb25zdCBvdmVyZmxvd0dyb3VwID0gQ291cGxpbmcuZ2V0Q291cGxlZCh0b29sYmFyLCAnb3ZlcmZsb3dHcm91cCcpO1xuICAgICAgc2V0JDgocHJpbWFyeS5lbGVtZW50LCAndmlzaWJpbGl0eScsICdoaWRkZW4nKTtcbiAgICAgIGNvbnN0IGdyb3VwcyA9IGJ1aWx0R3JvdXBzLmNvbmNhdChbb3ZlcmZsb3dHcm91cF0pO1xuICAgICAgY29uc3QgZm9jdXNlZENvbXAgPSBmaW5kRm9jdXNlZENvbXAoZ3JvdXBzKTtcbiAgICAgIHNldE92ZXJmbG93KFtdKTtcbiAgICAgIHNldEdyb3VwcyQxKHByaW1hcnksIGdyb3Vwcyk7XG4gICAgICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IGdldCRjKHByaW1hcnkuZWxlbWVudCk7XG4gICAgICBjb25zdCBvdmVyZmxvd3MgPSBwYXJ0aXRpb24oYXZhaWxhYmxlV2lkdGgsIGRldGFpbC5idWlsdEdyb3Vwcy5nZXQoKSwgY29tcCA9PiBnZXQkYyhjb21wLmVsZW1lbnQpLCBvdmVyZmxvd0dyb3VwKTtcbiAgICAgIGlmIChvdmVyZmxvd3MuZXh0cmEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIFJlcGxhY2luZy5yZW1vdmUocHJpbWFyeSwgb3ZlcmZsb3dHcm91cCk7XG4gICAgICAgIHNldE92ZXJmbG93KFtdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldEdyb3VwcyQxKHByaW1hcnksIG92ZXJmbG93cy53aXRoaW4pO1xuICAgICAgICBzZXRPdmVyZmxvdyhvdmVyZmxvd3MuZXh0cmEpO1xuICAgICAgfVxuICAgICAgcmVtb3ZlJDYocHJpbWFyeS5lbGVtZW50LCAndmlzaWJpbGl0eScpO1xuICAgICAgcmVmbG93KHByaW1hcnkuZWxlbWVudCk7XG4gICAgICBmb2N1c2VkQ29tcC5lYWNoKEZvY3VzaW5nLmZvY3VzKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2NoZW1hJGMgPSBjb25zdGFudCQxKFtcbiAgICAgIGZpZWxkKCdzcGxpdFRvb2xiYXJCZWhhdmlvdXJzJywgW0NvdXBsaW5nXSksXG4gICAgICBjdXN0b21GaWVsZCgnYnVpbHRHcm91cHMnLCAoKSA9PiBDZWxsKFtdKSlcbiAgICBdKTtcblxuICAgIGNvbnN0IHNjaGVtYSRiID0gY29uc3RhbnQkMShbXG4gICAgICBtYXJrZXJzJDEoWydvdmVyZmxvd1RvZ2dsZWRDbGFzcyddKSxcbiAgICAgIG9wdGlvbkZ1bmN0aW9uKCdnZXRPdmVyZmxvd0JvdW5kcycpLFxuICAgICAgcmVxdWlyZWQkMSgnbGF6eVNpbmsnKSxcbiAgICAgIGN1c3RvbUZpZWxkKCdvdmVyZmxvd0dyb3VwcycsICgpID0+IENlbGwoW10pKSxcbiAgICAgIG9uSGFuZGxlcignb25PcGVuZWQnKSxcbiAgICAgIG9uSGFuZGxlcignb25DbG9zZWQnKVxuICAgIF0uY29uY2F0KHNjaGVtYSRjKCkpKTtcbiAgICBjb25zdCBwYXJ0cyQ3ID0gY29uc3RhbnQkMShbXG4gICAgICByZXF1aXJlZCh7XG4gICAgICAgIGZhY3Rvcnk6IFRvb2xiYXIsXG4gICAgICAgIHNjaGVtYTogc2NoZW1hJGUoKSxcbiAgICAgICAgbmFtZTogJ3ByaW1hcnknXG4gICAgICB9KSxcbiAgICAgIGV4dGVybmFsKHtcbiAgICAgICAgc2NoZW1hOiBzY2hlbWEkZSgpLFxuICAgICAgICBuYW1lOiAnb3ZlcmZsb3cnXG4gICAgICB9KSxcbiAgICAgIGV4dGVybmFsKHsgbmFtZTogJ292ZXJmbG93LWJ1dHRvbicgfSksXG4gICAgICBleHRlcm5hbCh7IG5hbWU6ICdvdmVyZmxvdy1ncm91cCcgfSlcbiAgICBdKTtcblxuICAgIGNvbnN0IGV4cGFuZGFibGUgPSBjb25zdGFudCQxKChlbGVtZW50LCBhdmFpbGFibGUpID0+IHtcbiAgICAgIHNldE1heChlbGVtZW50LCBNYXRoLmZsb29yKGF2YWlsYWJsZSkpO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc2NoZW1hJGEgPSBjb25zdGFudCQxKFtcbiAgICAgIG1hcmtlcnMkMShbJ3RvZ2dsZWRDbGFzcyddKSxcbiAgICAgIHJlcXVpcmVkJDEoJ2xhenlTaW5rJyksXG4gICAgICByZXF1aXJlZEZ1bmN0aW9uKCdmZXRjaCcpLFxuICAgICAgb3B0aW9uRnVuY3Rpb24oJ2dldEJvdW5kcycpLFxuICAgICAgb3B0aW9uT2JqT2YoJ2ZpcmVEaXNtaXNzYWxFdmVudEluc3RlYWQnLCBbZGVmYXVsdGVkKCdldmVudCcsIGRpc21pc3NSZXF1ZXN0ZWQoKSldKSxcbiAgICAgIHNjaGVtYSR5KCksXG4gICAgICBvbkhhbmRsZXIoJ29uVG9nZ2xlZCcpXG4gICAgXSk7XG4gICAgY29uc3QgcGFydHMkNiA9IGNvbnN0YW50JDEoW1xuICAgICAgZXh0ZXJuYWwoe1xuICAgICAgICBuYW1lOiAnYnV0dG9uJyxcbiAgICAgICAgb3ZlcnJpZGVzOiBkZXRhaWwgPT4gKHtcbiAgICAgICAgICBkb206IHsgYXR0cmlidXRlczogeyAnYXJpYS1oYXNwb3B1cCc6ICd0cnVlJyB9IH0sXG4gICAgICAgICAgYnV0dG9uQmVoYXZpb3VyczogZGVyaXZlJDEoW1RvZ2dsaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICAgIHRvZ2dsZUNsYXNzOiBkZXRhaWwubWFya2Vycy50b2dnbGVkQ2xhc3MsXG4gICAgICAgICAgICAgIGFyaWE6IHsgbW9kZTogJ2V4cGFuZGVkJyB9LFxuICAgICAgICAgICAgICB0b2dnbGVPbkV4ZWN1dGU6IGZhbHNlLFxuICAgICAgICAgICAgICBvblRvZ2dsZWQ6IGRldGFpbC5vblRvZ2dsZWRcbiAgICAgICAgICAgIH0pXSlcbiAgICAgICAgfSlcbiAgICAgIH0pLFxuICAgICAgZXh0ZXJuYWwoe1xuICAgICAgICBmYWN0b3J5OiBUb29sYmFyLFxuICAgICAgICBzY2hlbWE6IHNjaGVtYSRlKCksXG4gICAgICAgIG5hbWU6ICd0b29sYmFyJyxcbiAgICAgICAgb3ZlcnJpZGVzOiBkZXRhaWwgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b29sYmFyQmVoYXZpb3VyczogZGVyaXZlJDEoW0tleWluZy5jb25maWcoe1xuICAgICAgICAgICAgICAgIG1vZGU6ICdjeWNsaWMnLFxuICAgICAgICAgICAgICAgIG9uRXNjYXBlOiBjb21wID0+IHtcbiAgICAgICAgICAgICAgICAgIGdldFBhcnQoY29tcCwgZGV0YWlsLCAnYnV0dG9uJykuZWFjaChGb2N1c2luZy5mb2N1cyk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSldKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgXSk7XG5cbiAgICBjb25zdCBzaG91bGRTa2lwRm9jdXMgPSB2YWx1ZSQyKCk7XG4gICAgY29uc3QgdG9nZ2xlV2l0aG91dEZvY3VzaW5nID0gKGJ1dHRvbiwgZXh0ZXJuYWxzKSA9PiB7XG4gICAgICBzaG91bGRTa2lwRm9jdXMuc2V0KHRydWUpO1xuICAgICAgdG9nZ2xlKGJ1dHRvbiwgZXh0ZXJuYWxzKTtcbiAgICAgIHNob3VsZFNraXBGb2N1cy5jbGVhcigpO1xuICAgIH07XG4gICAgY29uc3QgdG9nZ2xlID0gKGJ1dHRvbiwgZXh0ZXJuYWxzKSA9PiB7XG4gICAgICBjb25zdCB0b29sYmFyU2FuZGJveCA9IENvdXBsaW5nLmdldENvdXBsZWQoYnV0dG9uLCAndG9vbGJhclNhbmRib3gnKTtcbiAgICAgIGlmIChTYW5kYm94aW5nLmlzT3Blbih0b29sYmFyU2FuZGJveCkpIHtcbiAgICAgICAgU2FuZGJveGluZy5jbG9zZSh0b29sYmFyU2FuZGJveCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBTYW5kYm94aW5nLm9wZW4odG9vbGJhclNhbmRib3gsIGV4dGVybmFscy50b29sYmFyKCkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcG9zaXRpb24gPSAoYnV0dG9uLCB0b29sYmFyLCBkZXRhaWwsIGxheW91dHMpID0+IHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IGRldGFpbC5nZXRCb3VuZHMubWFwKGJvdW5kZXIgPT4gYm91bmRlcigpKTtcbiAgICAgIGNvbnN0IHNpbmsgPSBkZXRhaWwubGF6eVNpbmsoYnV0dG9uKS5nZXRPckRpZSgpO1xuICAgICAgUG9zaXRpb25pbmcucG9zaXRpb25XaXRoaW5Cb3VuZHMoc2luaywgdG9vbGJhciwge1xuICAgICAgICBhbmNob3I6IHtcbiAgICAgICAgICB0eXBlOiAnaG90c3BvdCcsXG4gICAgICAgICAgaG90c3BvdDogYnV0dG9uLFxuICAgICAgICAgIGxheW91dHMsXG4gICAgICAgICAgb3ZlcnJpZGVzOiB7IG1heFdpZHRoRnVuY3Rpb246IGV4cGFuZGFibGUoKSB9XG4gICAgICAgIH1cbiAgICAgIH0sIGJvdW5kcyk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRHcm91cHMgPSAoYnV0dG9uLCB0b29sYmFyLCBkZXRhaWwsIGxheW91dHMsIGdyb3VwcykgPT4ge1xuICAgICAgVG9vbGJhci5zZXRHcm91cHModG9vbGJhciwgZ3JvdXBzKTtcbiAgICAgIHBvc2l0aW9uKGJ1dHRvbiwgdG9vbGJhciwgZGV0YWlsLCBsYXlvdXRzKTtcbiAgICAgIFRvZ2dsaW5nLm9uKGJ1dHRvbik7XG4gICAgfTtcbiAgICBjb25zdCBtYWtlU2FuZGJveCA9IChidXR0b24sIHNwZWMsIGRldGFpbCkgPT4ge1xuICAgICAgY29uc3QgYXJpYUNvbnRyb2xzID0gbWFuYWdlcigpO1xuICAgICAgY29uc3Qgb25PcGVuID0gKHNhbmRib3gsIHRvb2xiYXIpID0+IHtcbiAgICAgICAgY29uc3Qgc2tpcEZvY3VzID0gc2hvdWxkU2tpcEZvY3VzLmdldCgpLmdldE9yKGZhbHNlKTtcbiAgICAgICAgZGV0YWlsLmZldGNoKCkuZ2V0KGdyb3VwcyA9PiB7XG4gICAgICAgICAgc2V0R3JvdXBzKGJ1dHRvbiwgdG9vbGJhciwgZGV0YWlsLCBzcGVjLmxheW91dHMsIGdyb3Vwcyk7XG4gICAgICAgICAgYXJpYUNvbnRyb2xzLmxpbmsoYnV0dG9uLmVsZW1lbnQpO1xuICAgICAgICAgIGlmICghc2tpcEZvY3VzKSB7XG4gICAgICAgICAgICBLZXlpbmcuZm9jdXNJbih0b29sYmFyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG9uQ2xvc2UgPSAoKSA9PiB7XG4gICAgICAgIFRvZ2dsaW5nLm9mZihidXR0b24pO1xuICAgICAgICBpZiAoIXNob3VsZFNraXBGb2N1cy5nZXQoKS5nZXRPcihmYWxzZSkpIHtcbiAgICAgICAgICBGb2N1c2luZy5mb2N1cyhidXR0b24pO1xuICAgICAgICB9XG4gICAgICAgIGFyaWFDb250cm9scy51bmxpbmsoYnV0dG9uLmVsZW1lbnQpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgYXR0cmlidXRlczogeyBpZDogYXJpYUNvbnRyb2xzLmlkIH1cbiAgICAgICAgfSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgICAgbW9kZTogJ3NwZWNpYWwnLFxuICAgICAgICAgICAgb25Fc2NhcGU6IGNvbXAgPT4ge1xuICAgICAgICAgICAgICBTYW5kYm94aW5nLmNsb3NlKGNvbXApO1xuICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBTYW5kYm94aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBvbk9wZW4sXG4gICAgICAgICAgICBvbkNsb3NlLFxuICAgICAgICAgICAgaXNQYXJ0T2Y6IChjb250YWluZXIsIGRhdGEsIHF1ZXJ5RWxlbSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gaXNQYXJ0T2YkMShkYXRhLCBxdWVyeUVsZW0pIHx8IGlzUGFydE9mJDEoYnV0dG9uLCBxdWVyeUVsZW0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldEF0dGFjaFBvaW50OiAoKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBkZXRhaWwubGF6eVNpbmsoYnV0dG9uKS5nZXRPckRpZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIFJlY2VpdmluZy5jb25maWcoe1xuICAgICAgICAgICAgY2hhbm5lbHM6IHtcbiAgICAgICAgICAgICAgLi4ucmVjZWl2aW5nQ2hhbm5lbCQxKHtcbiAgICAgICAgICAgICAgICBpc0V4dHJhUGFydDogbmV2ZXIsXG4gICAgICAgICAgICAgICAgLi4uZGV0YWlsLmZpcmVEaXNtaXNzYWxFdmVudEluc3RlYWQubWFwKGZlID0+ICh7IGZpcmVFdmVudEluc3RlYWQ6IHsgZXZlbnQ6IGZlLmV2ZW50IH0gfSkpLmdldE9yKHt9KVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgLi4ucmVjZWl2aW5nQ2hhbm5lbCh7XG4gICAgICAgICAgICAgICAgZG9SZXBvc2l0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBTYW5kYm94aW5nLmdldFN0YXRlKENvdXBsaW5nLmdldENvdXBsZWQoYnV0dG9uLCAndG9vbGJhclNhbmRib3gnKSkuZWFjaCh0b29sYmFyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24oYnV0dG9uLCB0b29sYmFyLCBkZXRhaWwsIHNwZWMubGF5b3V0cyk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgXSlcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBmYWN0b3J5JGMgPSAoZGV0YWlsLCBjb21wb25lbnRzLCBzcGVjLCBleHRlcm5hbHMpID0+ICh7XG4gICAgICAuLi5CdXR0b24uc2tldGNoKHtcbiAgICAgICAgLi4uZXh0ZXJuYWxzLmJ1dHRvbigpLFxuICAgICAgICBhY3Rpb246IGJ1dHRvbiA9PiB7XG4gICAgICAgICAgdG9nZ2xlKGJ1dHRvbiwgZXh0ZXJuYWxzKTtcbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uQmVoYXZpb3VyczogU2tldGNoQmVoYXZpb3Vycy5hdWdtZW50KHsgZHVtcDogZXh0ZXJuYWxzLmJ1dHRvbigpLmJ1dHRvbkJlaGF2aW91cnMgfSwgW0NvdXBsaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBvdGhlcnM6IHtcbiAgICAgICAgICAgICAgdG9vbGJhclNhbmRib3g6IGJ1dHRvbiA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VTYW5kYm94KGJ1dHRvbiwgc3BlYywgZGV0YWlsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXSlcbiAgICAgIH0pLFxuICAgICAgYXBpczoge1xuICAgICAgICBzZXRHcm91cHM6IChidXR0b24sIGdyb3VwcykgPT4ge1xuICAgICAgICAgIFNhbmRib3hpbmcuZ2V0U3RhdGUoQ291cGxpbmcuZ2V0Q291cGxlZChidXR0b24sICd0b29sYmFyU2FuZGJveCcpKS5lYWNoKHRvb2xiYXIgPT4ge1xuICAgICAgICAgICAgc2V0R3JvdXBzKGJ1dHRvbiwgdG9vbGJhciwgZGV0YWlsLCBzcGVjLmxheW91dHMsIGdyb3Vwcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlcG9zaXRpb246IGJ1dHRvbiA9PiB7XG4gICAgICAgICAgU2FuZGJveGluZy5nZXRTdGF0ZShDb3VwbGluZy5nZXRDb3VwbGVkKGJ1dHRvbiwgJ3Rvb2xiYXJTYW5kYm94JykpLmVhY2godG9vbGJhciA9PiB7XG4gICAgICAgICAgICBwb3NpdGlvbihidXR0b24sIHRvb2xiYXIsIGRldGFpbCwgc3BlYy5sYXlvdXRzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgdG9nZ2xlOiBidXR0b24gPT4ge1xuICAgICAgICAgIHRvZ2dsZShidXR0b24sIGV4dGVybmFscyk7XG4gICAgICAgIH0sXG4gICAgICAgIHRvZ2dsZVdpdGhvdXRGb2N1c2luZzogYnV0dG9uID0+IHtcbiAgICAgICAgICB0b2dnbGVXaXRob3V0Rm9jdXNpbmcoYnV0dG9uLCBleHRlcm5hbHMpO1xuICAgICAgICB9LFxuICAgICAgICBnZXRUb29sYmFyOiBidXR0b24gPT4ge1xuICAgICAgICAgIHJldHVybiBTYW5kYm94aW5nLmdldFN0YXRlKENvdXBsaW5nLmdldENvdXBsZWQoYnV0dG9uLCAndG9vbGJhclNhbmRib3gnKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGlzT3BlbjogYnV0dG9uID0+IHtcbiAgICAgICAgICByZXR1cm4gU2FuZGJveGluZy5pc09wZW4oQ291cGxpbmcuZ2V0Q291cGxlZChidXR0b24sICd0b29sYmFyU2FuZGJveCcpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IEZsb2F0aW5nVG9vbGJhckJ1dHRvbiA9IGNvbXBvc2l0ZSh7XG4gICAgICBuYW1lOiAnRmxvYXRpbmdUb29sYmFyQnV0dG9uJyxcbiAgICAgIGZhY3Rvcnk6IGZhY3RvcnkkYyxcbiAgICAgIGNvbmZpZ0ZpZWxkczogc2NoZW1hJGEoKSxcbiAgICAgIHBhcnRGaWVsZHM6IHBhcnRzJDYoKSxcbiAgICAgIGFwaXM6IHtcbiAgICAgICAgc2V0R3JvdXBzOiAoYXBpcywgYnV0dG9uLCBncm91cHMpID0+IHtcbiAgICAgICAgICBhcGlzLnNldEdyb3VwcyhidXR0b24sIGdyb3Vwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlcG9zaXRpb246IChhcGlzLCBidXR0b24pID0+IHtcbiAgICAgICAgICBhcGlzLnJlcG9zaXRpb24oYnV0dG9uKTtcbiAgICAgICAgfSxcbiAgICAgICAgdG9nZ2xlOiAoYXBpcywgYnV0dG9uKSA9PiB7XG4gICAgICAgICAgYXBpcy50b2dnbGUoYnV0dG9uKTtcbiAgICAgICAgfSxcbiAgICAgICAgdG9nZ2xlV2l0aG91dEZvY3VzaW5nOiAoYXBpcywgYnV0dG9uKSA9PiB7XG4gICAgICAgICAgYXBpcy50b2dnbGVXaXRob3V0Rm9jdXNpbmcoYnV0dG9uKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0VG9vbGJhcjogKGFwaXMsIGJ1dHRvbikgPT4gYXBpcy5nZXRUb29sYmFyKGJ1dHRvbiksXG4gICAgICAgIGlzT3BlbjogKGFwaXMsIGJ1dHRvbikgPT4gYXBpcy5pc09wZW4oYnV0dG9uKVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2NoZW1hJDkgPSBjb25zdGFudCQxKFtcbiAgICAgIHJlcXVpcmVkJDEoJ2l0ZW1zJyksXG4gICAgICBtYXJrZXJzJDEoWydpdGVtU2VsZWN0b3InXSksXG4gICAgICBmaWVsZCgndGdyb3VwQmVoYXZpb3VycycsIFtLZXlpbmddKVxuICAgIF0pO1xuICAgIGNvbnN0IHBhcnRzJDUgPSBjb25zdGFudCQxKFtncm91cCh7XG4gICAgICAgIG5hbWU6ICdpdGVtcycsXG4gICAgICAgIHVuaXQ6ICdpdGVtJ1xuICAgICAgfSldKTtcblxuICAgIGNvbnN0IGZhY3RvcnkkYiA9IChkZXRhaWwsIGNvbXBvbmVudHMsIF9zcGVjLCBfZXh0ZXJuYWxzKSA9PiAoe1xuICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgY29tcG9uZW50cyxcbiAgICAgIGJlaGF2aW91cnM6IGF1Z21lbnQoZGV0YWlsLnRncm91cEJlaGF2aW91cnMsIFtLZXlpbmcuY29uZmlnKHtcbiAgICAgICAgICBtb2RlOiAnZmxvdycsXG4gICAgICAgICAgc2VsZWN0b3I6IGRldGFpbC5tYXJrZXJzLml0ZW1TZWxlY3RvclxuICAgICAgICB9KV0pLFxuICAgICAgZG9tTW9kaWZpY2F0aW9uOiB7IGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3Rvb2xiYXInIH0gfVxuICAgIH0pO1xuICAgIGNvbnN0IFRvb2xiYXJHcm91cCA9IGNvbXBvc2l0ZSh7XG4gICAgICBuYW1lOiAnVG9vbGJhckdyb3VwJyxcbiAgICAgIGNvbmZpZ0ZpZWxkczogc2NoZW1hJDkoKSxcbiAgICAgIHBhcnRGaWVsZHM6IHBhcnRzJDUoKSxcbiAgICAgIGZhY3Rvcnk6IGZhY3RvcnkkYlxuICAgIH0pO1xuXG4gICAgY29uc3QgYnVpbGRHcm91cHMgPSBjb21wcyA9PiBtYXAkMihjb21wcywgZyA9PiBwcmVtYWRlKGcpKTtcbiAgICBjb25zdCByZWZyZXNoJDEgPSAodG9vbGJhciwgbWVtRmxvYXRpbmdUb29sYmFyQnV0dG9uLCBkZXRhaWwpID0+IHtcbiAgICAgIHJlZnJlc2gkMih0b29sYmFyLCBkZXRhaWwsIG92ZXJmbG93R3JvdXBzID0+IHtcbiAgICAgICAgZGV0YWlsLm92ZXJmbG93R3JvdXBzLnNldChvdmVyZmxvd0dyb3Vwcyk7XG4gICAgICAgIG1lbUZsb2F0aW5nVG9vbGJhckJ1dHRvbi5nZXRPcHQodG9vbGJhcikuZWFjaChmbG9hdGluZ1Rvb2xiYXJCdXR0b24gPT4ge1xuICAgICAgICAgIEZsb2F0aW5nVG9vbGJhckJ1dHRvbi5zZXRHcm91cHMoZmxvYXRpbmdUb29sYmFyQnV0dG9uLCBidWlsZEdyb3VwcyhvdmVyZmxvd0dyb3VwcykpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZmFjdG9yeSRhID0gKGRldGFpbCwgY29tcG9uZW50cywgc3BlYywgZXh0ZXJuYWxzKSA9PiB7XG4gICAgICBjb25zdCBtZW1GbG9hdGluZ1Rvb2xiYXJCdXR0b24gPSByZWNvcmQoRmxvYXRpbmdUb29sYmFyQnV0dG9uLnNrZXRjaCh7XG4gICAgICAgIGZldGNoOiAoKSA9PiBGdXR1cmUubnUocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShidWlsZEdyb3VwcyhkZXRhaWwub3ZlcmZsb3dHcm91cHMuZ2V0KCkpKTtcbiAgICAgICAgfSksXG4gICAgICAgIGxheW91dHM6IHtcbiAgICAgICAgICBvbkx0cjogKCkgPT4gW1xuICAgICAgICAgICAgc291dGh3ZXN0JDIsXG4gICAgICAgICAgICBzb3V0aGVhc3QkMlxuICAgICAgICAgIF0sXG4gICAgICAgICAgb25SdGw6ICgpID0+IFtcbiAgICAgICAgICAgIHNvdXRoZWFzdCQyLFxuICAgICAgICAgICAgc291dGh3ZXN0JDJcbiAgICAgICAgICBdLFxuICAgICAgICAgIG9uQm90dG9tTHRyOiAoKSA9PiBbXG4gICAgICAgICAgICBub3J0aHdlc3QkMixcbiAgICAgICAgICAgIG5vcnRoZWFzdCQyXG4gICAgICAgICAgXSxcbiAgICAgICAgICBvbkJvdHRvbVJ0bDogKCkgPT4gW1xuICAgICAgICAgICAgbm9ydGhlYXN0JDIsXG4gICAgICAgICAgICBub3J0aHdlc3QkMlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgZ2V0Qm91bmRzOiBzcGVjLmdldE92ZXJmbG93Qm91bmRzLFxuICAgICAgICBsYXp5U2luazogZGV0YWlsLmxhenlTaW5rLFxuICAgICAgICBmaXJlRGlzbWlzc2FsRXZlbnRJbnN0ZWFkOiB7fSxcbiAgICAgICAgbWFya2VyczogeyB0b2dnbGVkQ2xhc3M6IGRldGFpbC5tYXJrZXJzLm92ZXJmbG93VG9nZ2xlZENsYXNzIH0sXG4gICAgICAgIHBhcnRzOiB7XG4gICAgICAgICAgYnV0dG9uOiBleHRlcm5hbHNbJ292ZXJmbG93LWJ1dHRvbiddKCksXG4gICAgICAgICAgdG9vbGJhcjogZXh0ZXJuYWxzLm92ZXJmbG93KClcbiAgICAgICAgfSxcbiAgICAgICAgb25Ub2dnbGVkOiAoY29tcCwgc3RhdGUpID0+IGRldGFpbFtzdGF0ZSA/ICdvbk9wZW5lZCcgOiAnb25DbG9zZWQnXShjb21wKVxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgICBkb206IGRldGFpbC5kb20sXG4gICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgIGJlaGF2aW91cnM6IGF1Z21lbnQoZGV0YWlsLnNwbGl0VG9vbGJhckJlaGF2aW91cnMsIFtDb3VwbGluZy5jb25maWcoe1xuICAgICAgICAgICAgb3RoZXJzOiB7XG4gICAgICAgICAgICAgIG92ZXJmbG93R3JvdXA6ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gVG9vbGJhckdyb3VwLnNrZXRjaCh7XG4gICAgICAgICAgICAgICAgICAuLi5leHRlcm5hbHNbJ292ZXJmbG93LWdyb3VwJ10oKSxcbiAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbbWVtRmxvYXRpbmdUb29sYmFyQnV0dG9uLmFzU3BlYygpXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSldKSxcbiAgICAgICAgYXBpczoge1xuICAgICAgICAgIHNldEdyb3VwczogKHRvb2xiYXIsIGdyb3VwcykgPT4ge1xuICAgICAgICAgICAgZGV0YWlsLmJ1aWx0R3JvdXBzLnNldChtYXAkMihncm91cHMsIHRvb2xiYXIuZ2V0U3lzdGVtKCkuYnVpbGQpKTtcbiAgICAgICAgICAgIHJlZnJlc2gkMSh0b29sYmFyLCBtZW1GbG9hdGluZ1Rvb2xiYXJCdXR0b24sIGRldGFpbCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZWZyZXNoOiB0b29sYmFyID0+IHJlZnJlc2gkMSh0b29sYmFyLCBtZW1GbG9hdGluZ1Rvb2xiYXJCdXR0b24sIGRldGFpbCksXG4gICAgICAgICAgdG9nZ2xlOiB0b29sYmFyID0+IHtcbiAgICAgICAgICAgIG1lbUZsb2F0aW5nVG9vbGJhckJ1dHRvbi5nZXRPcHQodG9vbGJhcikuZWFjaChmbG9hdGluZ1Rvb2xiYXJCdXR0b24gPT4ge1xuICAgICAgICAgICAgICBGbG9hdGluZ1Rvb2xiYXJCdXR0b24udG9nZ2xlKGZsb2F0aW5nVG9vbGJhckJ1dHRvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRvZ2dsZVdpdGhvdXRGb2N1c2luZzogdG9vbGJhciA9PiB7XG4gICAgICAgICAgICBtZW1GbG9hdGluZ1Rvb2xiYXJCdXR0b24uZ2V0T3B0KHRvb2xiYXIpLmVhY2goRmxvYXRpbmdUb29sYmFyQnV0dG9uLnRvZ2dsZVdpdGhvdXRGb2N1c2luZyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpc09wZW46IHRvb2xiYXIgPT4gbWVtRmxvYXRpbmdUb29sYmFyQnV0dG9uLmdldE9wdCh0b29sYmFyKS5tYXAoRmxvYXRpbmdUb29sYmFyQnV0dG9uLmlzT3BlbikuZ2V0T3IoZmFsc2UpLFxuICAgICAgICAgIHJlcG9zaXRpb246IHRvb2xiYXIgPT4ge1xuICAgICAgICAgICAgbWVtRmxvYXRpbmdUb29sYmFyQnV0dG9uLmdldE9wdCh0b29sYmFyKS5lYWNoKGZsb2F0aW5nVG9vbGJhckJ1dHRvbiA9PiB7XG4gICAgICAgICAgICAgIEZsb2F0aW5nVG9vbGJhckJ1dHRvbi5yZXBvc2l0aW9uKGZsb2F0aW5nVG9vbGJhckJ1dHRvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdldE92ZXJmbG93OiB0b29sYmFyID0+IG1lbUZsb2F0aW5nVG9vbGJhckJ1dHRvbi5nZXRPcHQodG9vbGJhcikuYmluZChGbG9hdGluZ1Rvb2xiYXJCdXR0b24uZ2V0VG9vbGJhcilcbiAgICAgICAgfSxcbiAgICAgICAgZG9tTW9kaWZpY2F0aW9uOiB7IGF0dHJpYnV0ZXM6IHsgcm9sZTogJ2dyb3VwJyB9IH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBTcGxpdEZsb2F0aW5nVG9vbGJhciA9IGNvbXBvc2l0ZSh7XG4gICAgICBuYW1lOiAnU3BsaXRGbG9hdGluZ1Rvb2xiYXInLFxuICAgICAgY29uZmlnRmllbGRzOiBzY2hlbWEkYigpLFxuICAgICAgcGFydEZpZWxkczogcGFydHMkNygpLFxuICAgICAgZmFjdG9yeTogZmFjdG9yeSRhLFxuICAgICAgYXBpczoge1xuICAgICAgICBzZXRHcm91cHM6IChhcGlzLCB0b29sYmFyLCBncm91cHMpID0+IHtcbiAgICAgICAgICBhcGlzLnNldEdyb3Vwcyh0b29sYmFyLCBncm91cHMpO1xuICAgICAgICB9LFxuICAgICAgICByZWZyZXNoOiAoYXBpcywgdG9vbGJhcikgPT4ge1xuICAgICAgICAgIGFwaXMucmVmcmVzaCh0b29sYmFyKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVwb3NpdGlvbjogKGFwaXMsIHRvb2xiYXIpID0+IHtcbiAgICAgICAgICBhcGlzLnJlcG9zaXRpb24odG9vbGJhcik7XG4gICAgICAgIH0sXG4gICAgICAgIHRvZ2dsZTogKGFwaXMsIHRvb2xiYXIpID0+IHtcbiAgICAgICAgICBhcGlzLnRvZ2dsZSh0b29sYmFyKTtcbiAgICAgICAgfSxcbiAgICAgICAgdG9nZ2xlV2l0aG91dEZvY3VzaW5nOiAoYXBpcywgdG9vbGJhcikgPT4ge1xuICAgICAgICAgIGFwaXMudG9nZ2xlKHRvb2xiYXIpO1xuICAgICAgICB9LFxuICAgICAgICBpc09wZW46IChhcGlzLCB0b29sYmFyKSA9PiBhcGlzLmlzT3Blbih0b29sYmFyKSxcbiAgICAgICAgZ2V0T3ZlcmZsb3c6IChhcGlzLCB0b29sYmFyKSA9PiBhcGlzLmdldE92ZXJmbG93KHRvb2xiYXIpXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzY2hlbWEkOCA9IGNvbnN0YW50JDEoW1xuICAgICAgbWFya2VycyQxKFtcbiAgICAgICAgJ2Nsb3NlZENsYXNzJyxcbiAgICAgICAgJ29wZW5DbGFzcycsXG4gICAgICAgICdzaHJpbmtpbmdDbGFzcycsXG4gICAgICAgICdncm93aW5nQ2xhc3MnLFxuICAgICAgICAnb3ZlcmZsb3dUb2dnbGVkQ2xhc3MnXG4gICAgICBdKSxcbiAgICAgIG9uSGFuZGxlcignb25PcGVuZWQnKSxcbiAgICAgIG9uSGFuZGxlcignb25DbG9zZWQnKVxuICAgIF0uY29uY2F0KHNjaGVtYSRjKCkpKTtcbiAgICBjb25zdCBwYXJ0cyQ0ID0gY29uc3RhbnQkMShbXG4gICAgICByZXF1aXJlZCh7XG4gICAgICAgIGZhY3Rvcnk6IFRvb2xiYXIsXG4gICAgICAgIHNjaGVtYTogc2NoZW1hJGUoKSxcbiAgICAgICAgbmFtZTogJ3ByaW1hcnknXG4gICAgICB9KSxcbiAgICAgIHJlcXVpcmVkKHtcbiAgICAgICAgZmFjdG9yeTogVG9vbGJhcixcbiAgICAgICAgc2NoZW1hOiBzY2hlbWEkZSgpLFxuICAgICAgICBuYW1lOiAnb3ZlcmZsb3cnLFxuICAgICAgICBvdmVycmlkZXM6IGRldGFpbCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvb2xiYXJCZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgICAgIFNsaWRpbmcuY29uZmlnKHtcbiAgICAgICAgICAgICAgICBkaW1lbnNpb246IHsgcHJvcGVydHk6ICdoZWlnaHQnIH0sXG4gICAgICAgICAgICAgICAgY2xvc2VkQ2xhc3M6IGRldGFpbC5tYXJrZXJzLmNsb3NlZENsYXNzLFxuICAgICAgICAgICAgICAgIG9wZW5DbGFzczogZGV0YWlsLm1hcmtlcnMub3BlbkNsYXNzLFxuICAgICAgICAgICAgICAgIHNocmlua2luZ0NsYXNzOiBkZXRhaWwubWFya2Vycy5zaHJpbmtpbmdDbGFzcyxcbiAgICAgICAgICAgICAgICBncm93aW5nQ2xhc3M6IGRldGFpbC5tYXJrZXJzLmdyb3dpbmdDbGFzcyxcbiAgICAgICAgICAgICAgICBvblNocnVuazogY29tcCA9PiB7XG4gICAgICAgICAgICAgICAgICBnZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ292ZXJmbG93LWJ1dHRvbicpLmVhY2goYnV0dG9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgVG9nZ2xpbmcub2ZmKGJ1dHRvbik7XG4gICAgICAgICAgICAgICAgICAgIEZvY3VzaW5nLmZvY3VzKGJ1dHRvbik7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIGRldGFpbC5vbkNsb3NlZChjb21wKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uR3Jvd246IGNvbXAgPT4ge1xuICAgICAgICAgICAgICAgICAgS2V5aW5nLmZvY3VzSW4oY29tcCk7XG4gICAgICAgICAgICAgICAgICBkZXRhaWwub25PcGVuZWQoY29tcCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvblN0YXJ0R3JvdzogY29tcCA9PiB7XG4gICAgICAgICAgICAgICAgICBnZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ292ZXJmbG93LWJ1dHRvbicpLmVhY2goVG9nZ2xpbmcub24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgICAgICAgIG1vZGU6ICdhY3ljbGljJyxcbiAgICAgICAgICAgICAgICBvbkVzY2FwZTogY29tcCA9PiB7XG4gICAgICAgICAgICAgICAgICBnZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ292ZXJmbG93LWJ1dHRvbicpLmVhY2goRm9jdXNpbmcuZm9jdXMpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGV4dGVybmFsKHtcbiAgICAgICAgbmFtZTogJ292ZXJmbG93LWJ1dHRvbicsXG4gICAgICAgIG92ZXJyaWRlczogZGV0YWlsID0+ICh7XG4gICAgICAgICAgYnV0dG9uQmVoYXZpb3VyczogZGVyaXZlJDEoW1RvZ2dsaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICAgIHRvZ2dsZUNsYXNzOiBkZXRhaWwubWFya2Vycy5vdmVyZmxvd1RvZ2dsZWRDbGFzcyxcbiAgICAgICAgICAgICAgYXJpYTogeyBtb2RlOiAncHJlc3NlZCcgfSxcbiAgICAgICAgICAgICAgdG9nZ2xlT25FeGVjdXRlOiBmYWxzZVxuICAgICAgICAgICAgfSldKVxuICAgICAgICB9KVxuICAgICAgfSksXG4gICAgICBleHRlcm5hbCh7IG5hbWU6ICdvdmVyZmxvdy1ncm91cCcgfSlcbiAgICBdKTtcblxuICAgIGNvbnN0IGlzT3BlbiA9ICh0b29sYmFyLCBkZXRhaWwpID0+IGdldFBhcnQodG9vbGJhciwgZGV0YWlsLCAnb3ZlcmZsb3cnKS5tYXAoU2xpZGluZy5oYXNHcm93bikuZ2V0T3IoZmFsc2UpO1xuICAgIGNvbnN0IHRvZ2dsZVRvb2xiYXIgPSAodG9vbGJhciwgZGV0YWlsKSA9PiB7XG4gICAgICBnZXRQYXJ0KHRvb2xiYXIsIGRldGFpbCwgJ292ZXJmbG93LWJ1dHRvbicpLmJpbmQoKCkgPT4gZ2V0UGFydCh0b29sYmFyLCBkZXRhaWwsICdvdmVyZmxvdycpKS5lYWNoKG92ZXJmID0+IHtcbiAgICAgICAgcmVmcmVzaCh0b29sYmFyLCBkZXRhaWwpO1xuICAgICAgICBTbGlkaW5nLnRvZ2dsZUdyb3cob3ZlcmYpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWZyZXNoID0gKHRvb2xiYXIsIGRldGFpbCkgPT4ge1xuICAgICAgZ2V0UGFydCh0b29sYmFyLCBkZXRhaWwsICdvdmVyZmxvdycpLmVhY2gob3ZlcmZsb3cgPT4ge1xuICAgICAgICByZWZyZXNoJDIodG9vbGJhciwgZGV0YWlsLCBncm91cHMgPT4ge1xuICAgICAgICAgIGNvbnN0IGJ1aWx0R3JvdXBzID0gbWFwJDIoZ3JvdXBzLCBnID0+IHByZW1hZGUoZykpO1xuICAgICAgICAgIFRvb2xiYXIuc2V0R3JvdXBzKG92ZXJmbG93LCBidWlsdEdyb3Vwcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBnZXRQYXJ0KHRvb2xiYXIsIGRldGFpbCwgJ292ZXJmbG93LWJ1dHRvbicpLmVhY2goYnV0dG9uID0+IHtcbiAgICAgICAgICBpZiAoU2xpZGluZy5oYXNHcm93bihvdmVyZmxvdykpIHtcbiAgICAgICAgICAgIFRvZ2dsaW5nLm9uKGJ1dHRvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgU2xpZGluZy5yZWZyZXNoKG92ZXJmbG93KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZmFjdG9yeSQ5ID0gKGRldGFpbCwgY29tcG9uZW50cywgc3BlYywgZXh0ZXJuYWxzKSA9PiB7XG4gICAgICBjb25zdCB0b29sYmFyVG9nZ2xlRXZlbnQgPSAnYWxsb3kudG9vbGJhci50b2dnbGUnO1xuICAgICAgY29uc3QgZG9TZXRHcm91cHMgPSAodG9vbGJhciwgZ3JvdXBzKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWx0ID0gbWFwJDIoZ3JvdXBzLCB0b29sYmFyLmdldFN5c3RlbSgpLmJ1aWxkKTtcbiAgICAgICAgZGV0YWlsLmJ1aWx0R3JvdXBzLnNldChidWlsdCk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgICBkb206IGRldGFpbC5kb20sXG4gICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgIGJlaGF2aW91cnM6IGF1Z21lbnQoZGV0YWlsLnNwbGl0VG9vbGJhckJlaGF2aW91cnMsIFtcbiAgICAgICAgICBDb3VwbGluZy5jb25maWcoe1xuICAgICAgICAgICAgb3RoZXJzOiB7XG4gICAgICAgICAgICAgIG92ZXJmbG93R3JvdXA6IHRvb2xiYXIgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBUb29sYmFyR3JvdXAuc2tldGNoKHtcbiAgICAgICAgICAgICAgICAgIC4uLmV4dGVybmFsc1snb3ZlcmZsb3ctZ3JvdXAnXSgpLFxuICAgICAgICAgICAgICAgICAgaXRlbXM6IFtCdXR0b24uc2tldGNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5leHRlcm5hbHNbJ292ZXJmbG93LWJ1dHRvbiddKCksXG4gICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBfYnV0dG9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtaXQodG9vbGJhciwgdG9vbGJhclRvZ2dsZUV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY29uZmlnKCd0b29sYmFyLXRvZ2dsZS1ldmVudHMnLCBbcnVuJDEodG9vbGJhclRvZ2dsZUV2ZW50LCB0b29sYmFyID0+IHtcbiAgICAgICAgICAgICAgdG9nZ2xlVG9vbGJhcih0b29sYmFyLCBkZXRhaWwpO1xuICAgICAgICAgICAgfSldKVxuICAgICAgICBdKSxcbiAgICAgICAgYXBpczoge1xuICAgICAgICAgIHNldEdyb3VwczogKHRvb2xiYXIsIGdyb3VwcykgPT4ge1xuICAgICAgICAgICAgZG9TZXRHcm91cHModG9vbGJhciwgZ3JvdXBzKTtcbiAgICAgICAgICAgIHJlZnJlc2godG9vbGJhciwgZGV0YWlsKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlZnJlc2g6IHRvb2xiYXIgPT4gcmVmcmVzaCh0b29sYmFyLCBkZXRhaWwpLFxuICAgICAgICAgIHRvZ2dsZTogdG9vbGJhciA9PiB0b2dnbGVUb29sYmFyKHRvb2xiYXIsIGRldGFpbCksXG4gICAgICAgICAgaXNPcGVuOiB0b29sYmFyID0+IGlzT3Blbih0b29sYmFyLCBkZXRhaWwpXG4gICAgICAgIH0sXG4gICAgICAgIGRvbU1vZGlmaWNhdGlvbjogeyBhdHRyaWJ1dGVzOiB7IHJvbGU6ICdncm91cCcgfSB9XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgU3BsaXRTbGlkaW5nVG9vbGJhciA9IGNvbXBvc2l0ZSh7XG4gICAgICBuYW1lOiAnU3BsaXRTbGlkaW5nVG9vbGJhcicsXG4gICAgICBjb25maWdGaWVsZHM6IHNjaGVtYSQ4KCksXG4gICAgICBwYXJ0RmllbGRzOiBwYXJ0cyQ0KCksXG4gICAgICBmYWN0b3J5OiBmYWN0b3J5JDksXG4gICAgICBhcGlzOiB7XG4gICAgICAgIHNldEdyb3VwczogKGFwaXMsIHRvb2xiYXIsIGdyb3VwcykgPT4ge1xuICAgICAgICAgIGFwaXMuc2V0R3JvdXBzKHRvb2xiYXIsIGdyb3Vwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZnJlc2g6IChhcGlzLCB0b29sYmFyKSA9PiB7XG4gICAgICAgICAgYXBpcy5yZWZyZXNoKHRvb2xiYXIpO1xuICAgICAgICB9LFxuICAgICAgICB0b2dnbGU6IChhcGlzLCB0b29sYmFyKSA9PiB7XG4gICAgICAgICAgYXBpcy50b2dnbGUodG9vbGJhcik7XG4gICAgICAgIH0sXG4gICAgICAgIGlzT3BlbjogKGFwaXMsIHRvb2xiYXIpID0+IGFwaXMuaXNPcGVuKHRvb2xiYXIpXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCByZW5kZXJUb29sYmFyR3JvdXBDb21tb24gPSB0b29sYmFyR3JvdXAgPT4ge1xuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHRvb2xiYXJHcm91cC50aXRsZS5mb2xkKCgpID0+ICh7fSksIHRpdGxlID0+ICh7IGF0dHJpYnV0ZXM6IHsgdGl0bGUgfSB9KSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXRvb2xiYXJfX2dyb3VwJ10sXG4gICAgICAgICAgLi4uYXR0cmlidXRlc1xuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbVG9vbGJhckdyb3VwLnBhcnRzLml0ZW1zKHt9KV0sXG4gICAgICAgIGl0ZW1zOiB0b29sYmFyR3JvdXAuaXRlbXMsXG4gICAgICAgIG1hcmtlcnM6IHsgaXRlbVNlbGVjdG9yOiAnKjpub3QoLnRveC1zcGxpdC1idXR0b24pID4gLnRveC10YnRuOm5vdChbZGlzYWJsZWRdKSwgJyArICcudG94LXNwbGl0LWJ1dHRvbjpub3QoW2Rpc2FibGVkXSksICcgKyAnLnRveC10b29sYmFyLW5hdi1qczpub3QoW2Rpc2FibGVkXSksICcgKyAnLnRveC1udW1iZXItaW5wdXQ6bm90KFtkaXNhYmxlZF0pJyB9LFxuICAgICAgICB0Z3JvdXBCZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgVGFic3RvcHBpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICBGb2N1c2luZy5jb25maWcoe30pXG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyVG9vbGJhckdyb3VwID0gdG9vbGJhckdyb3VwID0+IFRvb2xiYXJHcm91cC5za2V0Y2gocmVuZGVyVG9vbGJhckdyb3VwQ29tbW9uKHRvb2xiYXJHcm91cCkpO1xuICAgIGNvbnN0IGdldFRvb2xiYXJCZWhhdmlvdXJzID0gKHRvb2xiYXJTcGVjLCBtb2RlTmFtZSkgPT4ge1xuICAgICAgY29uc3Qgb25BdHRhY2hlZCA9IHJ1bk9uQXR0YWNoZWQoY29tcG9uZW50ID0+IHtcbiAgICAgICAgY29uc3QgZ3JvdXBzID0gbWFwJDIodG9vbGJhclNwZWMuaW5pdEdyb3VwcywgcmVuZGVyVG9vbGJhckdyb3VwKTtcbiAgICAgICAgVG9vbGJhci5zZXRHcm91cHMoY29tcG9uZW50LCBncm91cHMpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGVyaXZlJDEoW1xuICAgICAgICBEaXNhYmxpbmdDb25maWdzLnRvb2xiYXJCdXR0b24odG9vbGJhclNwZWMucHJvdmlkZXJzLmlzRGlzYWJsZWQpLFxuICAgICAgICByZWNlaXZpbmdDb25maWcoKSxcbiAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgbW9kZTogbW9kZU5hbWUsXG4gICAgICAgICAgb25Fc2NhcGU6IHRvb2xiYXJTcGVjLm9uRXNjYXBlLFxuICAgICAgICAgIHNlbGVjdG9yOiAnLnRveC10b29sYmFyX19ncm91cCdcbiAgICAgICAgfSksXG4gICAgICAgIGNvbmZpZygndG9vbGJhci1ldmVudHMnLCBbb25BdHRhY2hlZF0pXG4gICAgICBdKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlck1vcmVUb29sYmFyQ29tbW9uID0gdG9vbGJhclNwZWMgPT4ge1xuICAgICAgY29uc3QgbW9kZU5hbWUgPSB0b29sYmFyU3BlYy5jeWNsaWNLZXlpbmcgPyAnY3ljbGljJyA6ICdhY3ljbGljJztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVpZDogdG9vbGJhclNwZWMudWlkLFxuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXRvb2xiYXItb3ZlcmxvcmQnXVxuICAgICAgICB9LFxuICAgICAgICBwYXJ0czoge1xuICAgICAgICAgICdvdmVyZmxvdy1ncm91cCc6IHJlbmRlclRvb2xiYXJHcm91cENvbW1vbih7XG4gICAgICAgICAgICB0aXRsZTogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICAgICAgaXRlbXM6IFtdXG4gICAgICAgICAgfSksXG4gICAgICAgICAgJ292ZXJmbG93LWJ1dHRvbic6IHJlbmRlckljb25CdXR0b25TcGVjKHtcbiAgICAgICAgICAgIG5hbWU6ICdtb3JlJyxcbiAgICAgICAgICAgIGljb246IE9wdGlvbmFsLnNvbWUoJ21vcmUtZHJhd2VyJyksXG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgdG9vbHRpcDogT3B0aW9uYWwuc29tZSgnUmV2ZWFsIG9yIGhpZGUgYWRkaXRpb25hbCB0b29sYmFyIGl0ZW1zJyksXG4gICAgICAgICAgICBwcmltYXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIGJ1dHRvblR5cGU6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICAgICAgIGJvcmRlcmxlc3M6IGZhbHNlXG4gICAgICAgICAgfSwgT3B0aW9uYWwubm9uZSgpLCB0b29sYmFyU3BlYy5wcm92aWRlcnMpXG4gICAgICAgIH0sXG4gICAgICAgIHNwbGl0VG9vbGJhckJlaGF2aW91cnM6IGdldFRvb2xiYXJCZWhhdmlvdXJzKHRvb2xiYXJTcGVjLCBtb2RlTmFtZSlcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJGbG9hdGluZ01vcmVUb29sYmFyID0gdG9vbGJhclNwZWMgPT4ge1xuICAgICAgY29uc3QgYmFzZVNwZWMgPSByZW5kZXJNb3JlVG9vbGJhckNvbW1vbih0b29sYmFyU3BlYyk7XG4gICAgICBjb25zdCBvdmVyZmxvd1hPZmZzZXQgPSA0O1xuICAgICAgY29uc3QgcHJpbWFyeSA9IFNwbGl0RmxvYXRpbmdUb29sYmFyLnBhcnRzLnByaW1hcnkoe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXRvb2xiYXJfX3ByaW1hcnknXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBTcGxpdEZsb2F0aW5nVG9vbGJhci5za2V0Y2goe1xuICAgICAgICAuLi5iYXNlU3BlYyxcbiAgICAgICAgbGF6eVNpbms6IHRvb2xiYXJTcGVjLmdldFNpbmssXG4gICAgICAgIGdldE92ZXJmbG93Qm91bmRzOiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgaGVhZGVyRWxlbSA9IHRvb2xiYXJTcGVjLm1vcmVEcmF3ZXJEYXRhLmxhenlIZWFkZXIoKS5lbGVtZW50O1xuICAgICAgICAgIGNvbnN0IGhlYWRlckJvdW5kcyA9IGFic29sdXRlJDIoaGVhZGVyRWxlbSk7XG4gICAgICAgICAgY29uc3QgZG9jRWxlbSA9IGRvY3VtZW50RWxlbWVudChoZWFkZXJFbGVtKTtcbiAgICAgICAgICBjb25zdCBkb2NCb3VuZHMgPSBhYnNvbHV0ZSQyKGRvY0VsZW0pO1xuICAgICAgICAgIGNvbnN0IGhlaWdodCA9IE1hdGgubWF4KGRvY0VsZW0uZG9tLnNjcm9sbEhlaWdodCwgZG9jQm91bmRzLmhlaWdodCk7XG4gICAgICAgICAgcmV0dXJuIGJvdW5kcyhoZWFkZXJCb3VuZHMueCArIG92ZXJmbG93WE9mZnNldCwgZG9jQm91bmRzLnksIGhlYWRlckJvdW5kcy53aWR0aCAtIG92ZXJmbG93WE9mZnNldCAqIDIsIGhlaWdodCk7XG4gICAgICAgIH0sXG4gICAgICAgIHBhcnRzOiB7XG4gICAgICAgICAgLi4uYmFzZVNwZWMucGFydHMsXG4gICAgICAgICAgb3ZlcmZsb3c6IHtcbiAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC10b29sYmFyX19vdmVyZmxvdyddLFxuICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB0b29sYmFyU3BlYy5hdHRyaWJ1dGVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbcHJpbWFyeV0sXG4gICAgICAgIG1hcmtlcnM6IHsgb3ZlcmZsb3dUb2dnbGVkQ2xhc3M6ICd0b3gtdGJ0bi0tZW5hYmxlZCcgfSxcbiAgICAgICAgb25PcGVuZWQ6IGNvbXAgPT4gdG9vbGJhclNwZWMub25Ub2dnbGVkKGNvbXAsIHRydWUpLFxuICAgICAgICBvbkNsb3NlZDogY29tcCA9PiB0b29sYmFyU3BlYy5vblRvZ2dsZWQoY29tcCwgZmFsc2UpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlclNsaWRpbmdNb3JlVG9vbGJhciA9IHRvb2xiYXJTcGVjID0+IHtcbiAgICAgIGNvbnN0IHByaW1hcnkgPSBTcGxpdFNsaWRpbmdUb29sYmFyLnBhcnRzLnByaW1hcnkoe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXRvb2xiYXJfX3ByaW1hcnknXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gU3BsaXRTbGlkaW5nVG9vbGJhci5wYXJ0cy5vdmVyZmxvdyh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtdG9vbGJhcl9fb3ZlcmZsb3cnXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGJhc2VTcGVjID0gcmVuZGVyTW9yZVRvb2xiYXJDb21tb24odG9vbGJhclNwZWMpO1xuICAgICAgcmV0dXJuIFNwbGl0U2xpZGluZ1Rvb2xiYXIuc2tldGNoKHtcbiAgICAgICAgLi4uYmFzZVNwZWMsXG4gICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICBwcmltYXJ5LFxuICAgICAgICAgIG92ZXJmbG93XG4gICAgICAgIF0sXG4gICAgICAgIG1hcmtlcnM6IHtcbiAgICAgICAgICBvcGVuQ2xhc3M6ICd0b3gtdG9vbGJhcl9fb3ZlcmZsb3ctLW9wZW4nLFxuICAgICAgICAgIGNsb3NlZENsYXNzOiAndG94LXRvb2xiYXJfX292ZXJmbG93LS1jbG9zZWQnLFxuICAgICAgICAgIGdyb3dpbmdDbGFzczogJ3RveC10b29sYmFyX19vdmVyZmxvdy0tZ3Jvd2luZycsXG4gICAgICAgICAgc2hyaW5raW5nQ2xhc3M6ICd0b3gtdG9vbGJhcl9fb3ZlcmZsb3ctLXNocmlua2luZycsXG4gICAgICAgICAgb3ZlcmZsb3dUb2dnbGVkQ2xhc3M6ICd0b3gtdGJ0bi0tZW5hYmxlZCdcbiAgICAgICAgfSxcbiAgICAgICAgb25PcGVuZWQ6IGNvbXAgPT4ge1xuICAgICAgICAgIGNvbXAuZ2V0U3lzdGVtKCkuYnJvYWRjYXN0T24oW3Rvb2xiYXJIZWlnaHRDaGFuZ2UoKV0sIHsgdHlwZTogJ29wZW5lZCcgfSk7XG4gICAgICAgICAgdG9vbGJhclNwZWMub25Ub2dnbGVkKGNvbXAsIHRydWUpO1xuICAgICAgICB9LFxuICAgICAgICBvbkNsb3NlZDogY29tcCA9PiB7XG4gICAgICAgICAgY29tcC5nZXRTeXN0ZW0oKS5icm9hZGNhc3RPbihbdG9vbGJhckhlaWdodENoYW5nZSgpXSwgeyB0eXBlOiAnY2xvc2VkJyB9KTtcbiAgICAgICAgICB0b29sYmFyU3BlYy5vblRvZ2dsZWQoY29tcCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlclRvb2xiYXIgPSB0b29sYmFyU3BlYyA9PiB7XG4gICAgICBjb25zdCBtb2RlTmFtZSA9IHRvb2xiYXJTcGVjLmN5Y2xpY0tleWluZyA/ICdjeWNsaWMnIDogJ2FjeWNsaWMnO1xuICAgICAgcmV0dXJuIFRvb2xiYXIuc2tldGNoKHtcbiAgICAgICAgdWlkOiB0b29sYmFyU3BlYy51aWQsXG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtdG9vbGJhciddLmNvbmNhdCh0b29sYmFyU3BlYy50eXBlID09PSBUb29sYmFyTW9kZSQxLnNjcm9sbGluZyA/IFsndG94LXRvb2xiYXItLXNjcm9sbGluZyddIDogW10pXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtUb29sYmFyLnBhcnRzLmdyb3Vwcyh7fSldLFxuICAgICAgICB0b29sYmFyQmVoYXZpb3VyczogZ2V0VG9vbGJhckJlaGF2aW91cnModG9vbGJhclNwZWMsIG1vZGVOYW1lKVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJhc2VCdXR0b25GaWVsZHMgPSBbXG4gICAgICBvcHRpb25hbFRleHQsXG4gICAgICBvcHRpb25hbEljb24sXG4gICAgICBvcHRpb25TdHJpbmcoJ3Rvb2x0aXAnKSxcbiAgICAgIGRlZmF1bHRlZFN0cmluZ0VudW0oJ2J1dHRvblR5cGUnLCAnc2Vjb25kYXJ5JywgW1xuICAgICAgICAncHJpbWFyeScsXG4gICAgICAgICdzZWNvbmRhcnknXG4gICAgICBdKSxcbiAgICAgIGRlZmF1bHRlZEJvb2xlYW4oJ2JvcmRlcmxlc3MnLCBmYWxzZSksXG4gICAgICByZXF1aXJlZEZ1bmN0aW9uKCdvbkFjdGlvbicpXG4gICAgXTtcbiAgICBjb25zdCBub3JtYWxCdXR0b25GaWVsZHMgPSBbXG4gICAgICAuLi5iYXNlQnV0dG9uRmllbGRzLFxuICAgICAgdGV4dCQxLFxuICAgICAgcmVxdWlyZWRTdHJpbmdFbnVtKCd0eXBlJywgWydidXR0b24nXSlcbiAgICBdO1xuICAgIGNvbnN0IHRvZ2dsZUJ1dHRvbkZpZWxkcyA9IFtcbiAgICAgIC4uLmJhc2VCdXR0b25GaWVsZHMsXG4gICAgICBkZWZhdWx0ZWRCb29sZWFuKCdhY3RpdmUnLCBmYWxzZSksXG4gICAgICByZXF1aXJlZFN0cmluZ0VudW0oJ3R5cGUnLCBbJ3RvZ2dsZWJ1dHRvbiddKVxuICAgIF07XG4gICAgY29uc3Qgc2NoZW1hV2l0aG91dEdyb3VwQnV0dG9uID0ge1xuICAgICAgYnV0dG9uOiBub3JtYWxCdXR0b25GaWVsZHMsXG4gICAgICB0b2dnbGVidXR0b246IHRvZ2dsZUJ1dHRvbkZpZWxkc1xuICAgIH07XG4gICAgY29uc3QgZ3JvdXBGaWVsZHMgPSBbXG4gICAgICByZXF1aXJlZFN0cmluZ0VudW0oJ3R5cGUnLCBbJ2dyb3VwJ10pLFxuICAgICAgZGVmYXVsdGVkQXJyYXlPZignYnV0dG9ucycsIFtdLCBjaG9vc2UkMSgndHlwZScsIHNjaGVtYVdpdGhvdXRHcm91cEJ1dHRvbikpXG4gICAgXTtcbiAgICBjb25zdCB2aWV3QnV0dG9uU2NoZW1hID0gY2hvb3NlJDEoJ3R5cGUnLCB7XG4gICAgICAuLi5zY2hlbWFXaXRob3V0R3JvdXBCdXR0b24sXG4gICAgICBncm91cDogZ3JvdXBGaWVsZHNcbiAgICB9KTtcblxuICAgIGNvbnN0IHZpZXdTY2hlbWEgPSBvYmpPZihbXG4gICAgICBkZWZhdWx0ZWRBcnJheU9mKCdidXR0b25zJywgW10sIHZpZXdCdXR0b25TY2hlbWEpLFxuICAgICAgcmVxdWlyZWRGdW5jdGlvbignb25TaG93JyksXG4gICAgICByZXF1aXJlZEZ1bmN0aW9uKCdvbkhpZGUnKVxuICAgIF0pO1xuICAgIGNvbnN0IGNyZWF0ZVZpZXcgPSBzcGVjID0+IGFzUmF3KCd2aWV3Jywgdmlld1NjaGVtYSwgc3BlYyk7XG5cbiAgICBjb25zdCByZW5kZXJCdXR0b24gPSAoc3BlYywgcHJvdmlkZXJzKSA9PiB7XG4gICAgICB2YXIgX2EsIF9iO1xuICAgICAgY29uc3QgaXNUb2dnbGVCdXR0b24gPSBzcGVjLnR5cGUgPT09ICd0b2dnbGVidXR0b24nO1xuICAgICAgY29uc3Qgb3B0TWVtSWNvbiA9IHNwZWMuaWNvbi5tYXAobWVtSWNvbiA9PiByZW5kZXJSZXBsYWNlYWJsZUljb25Gcm9tUGFjayhtZW1JY29uLCBwcm92aWRlcnMuaWNvbnMpKS5tYXAocmVjb3JkKTtcbiAgICAgIGNvbnN0IGdldEFjdGlvbiA9ICgpID0+IGNvbXAgPT4ge1xuICAgICAgICBjb25zdCBzZXRJY29uID0gbmV3SWNvbiA9PiB7XG4gICAgICAgICAgb3B0TWVtSWNvbi5tYXAobWVtSWNvbiA9PiBtZW1JY29uLmdldE9wdChjb21wKS5lYWNoKGRpc3BsYXlJY29uID0+IHtcbiAgICAgICAgICAgIFJlcGxhY2luZy5zZXQoZGlzcGxheUljb24sIFtyZW5kZXJSZXBsYWNlYWJsZUljb25Gcm9tUGFjayhuZXdJY29uLCBwcm92aWRlcnMuaWNvbnMpXSk7XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzZXRBY3RpdmUgPSBzdGF0ZSA9PiB7XG4gICAgICAgICAgY29uc3QgZWxtID0gY29tcC5lbGVtZW50O1xuICAgICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgICAgYWRkJDIoZWxtLCAndG94LWJ1dHRvbi0tZW5hYmxlZCcpO1xuICAgICAgICAgICAgc2V0JDkoZWxtLCAnYXJpYS1wcmVzc2VkJywgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbW92ZSQyKGVsbSwgJ3RveC1idXR0b24tLWVuYWJsZWQnKTtcbiAgICAgICAgICAgIHJlbW92ZSQ3KGVsbSwgJ2FyaWEtcHJlc3NlZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaXNBY3RpdmUgPSAoKSA9PiBoYXMoY29tcC5lbGVtZW50LCAndG94LWJ1dHRvbi0tZW5hYmxlZCcpO1xuICAgICAgICBpZiAoaXNUb2dnbGVCdXR0b24pIHtcbiAgICAgICAgICByZXR1cm4gc3BlYy5vbkFjdGlvbih7XG4gICAgICAgICAgICBzZXRJY29uLFxuICAgICAgICAgICAgc2V0QWN0aXZlLFxuICAgICAgICAgICAgaXNBY3RpdmVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3BlYy50eXBlID09PSAnYnV0dG9uJykge1xuICAgICAgICAgIHJldHVybiBzcGVjLm9uQWN0aW9uKHsgc2V0SWNvbiB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFjdGlvbiA9IGdldEFjdGlvbigpO1xuICAgICAgY29uc3QgYnV0dG9uU3BlYyA9IHtcbiAgICAgICAgLi4uc3BlYyxcbiAgICAgICAgbmFtZTogaXNUb2dnbGVCdXR0b24gPyBzcGVjLnRleHQuZ2V0T3Ioc3BlYy5pY29uLmdldE9yKCcnKSkgOiAoX2EgPSBzcGVjLnRleHQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHNwZWMuaWNvbi5nZXRPcignJyksXG4gICAgICAgIHByaW1hcnk6IHNwZWMuYnV0dG9uVHlwZSA9PT0gJ3ByaW1hcnknLFxuICAgICAgICBidXR0b25UeXBlOiBPcHRpb25hbC5mcm9tKHNwZWMuYnV0dG9uVHlwZSksXG4gICAgICAgIHRvb2x0aXA6IHNwZWMudG9vbHRpcCxcbiAgICAgICAgaWNvbjogc3BlYy5pY29uLFxuICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICBib3JkZXJsZXNzOiBzcGVjLmJvcmRlcmxlc3NcbiAgICAgIH07XG4gICAgICBjb25zdCBidXR0b25UeXBlQ2xhc3NlcyA9IGNhbGN1bGF0ZUNsYXNzZXNGcm9tQnV0dG9uVHlwZSgoX2IgPSBzcGVjLmJ1dHRvblR5cGUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICdzZWNvbmRhcnknKTtcbiAgICAgIGNvbnN0IG9wdFRyYW5zbGF0ZWRUZXh0ID0gaXNUb2dnbGVCdXR0b24gPyBzcGVjLnRleHQubWFwKHByb3ZpZGVycy50cmFuc2xhdGUpIDogT3B0aW9uYWwuc29tZShwcm92aWRlcnMudHJhbnNsYXRlKHNwZWMudGV4dCkpO1xuICAgICAgY29uc3Qgb3B0VHJhbnNsYXRlZFRleHRDb21wb25lZCA9IG9wdFRyYW5zbGF0ZWRUZXh0Lm1hcCh0ZXh0JDIpO1xuICAgICAgY29uc3QgdG9vbHRpcEF0dHJpYnV0ZXMgPSBidXR0b25TcGVjLnRvb2x0aXAub3Iob3B0VHJhbnNsYXRlZFRleHQpLm1hcCh0b29sdGlwID0+ICh7XG4gICAgICAgICdhcmlhLWxhYmVsJzogcHJvdmlkZXJzLnRyYW5zbGF0ZSh0b29sdGlwKSxcbiAgICAgICAgJ3RpdGxlJzogcHJvdmlkZXJzLnRyYW5zbGF0ZSh0b29sdGlwKVxuICAgICAgfSkpLmdldE9yKHt9KTtcbiAgICAgIGNvbnN0IG9wdEljb25TcGVjID0gb3B0TWVtSWNvbi5tYXAobWVtSWNvbiA9PiBtZW1JY29uLmFzU3BlYygpKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb21wb25lbnRSZW5kZXJQaXBlbGluZShbXG4gICAgICAgIG9wdEljb25TcGVjLFxuICAgICAgICBvcHRUcmFuc2xhdGVkVGV4dENvbXBvbmVkXG4gICAgICBdKTtcbiAgICAgIGNvbnN0IGhhc0ljb25BbmRUZXh0ID0gc3BlYy5pY29uLmlzU29tZSgpICYmIG9wdFRyYW5zbGF0ZWRUZXh0Q29tcG9uZWQuaXNTb21lKCk7XG4gICAgICBjb25zdCBkb20gPSB7XG4gICAgICAgIHRhZzogJ2J1dHRvbicsXG4gICAgICAgIGNsYXNzZXM6IGJ1dHRvblR5cGVDbGFzc2VzLmNvbmNhdCguLi5zcGVjLmljb24uaXNTb21lKCkgJiYgIWhhc0ljb25BbmRUZXh0ID8gWyd0b3gtYnV0dG9uLS1pY29uJ10gOiBbXSkuY29uY2F0KC4uLmhhc0ljb25BbmRUZXh0ID8gWyd0b3gtYnV0dG9uLS1pY29uLWFuZC10ZXh0J10gOiBbXSkuY29uY2F0KC4uLnNwZWMuYm9yZGVybGVzcyA/IFsndG94LWJ1dHRvbi0tbmFrZWQnXSA6IFtdKS5jb25jYXQoLi4uc3BlYy50eXBlID09PSAndG9nZ2xlYnV0dG9uJyAmJiBzcGVjLmFjdGl2ZSA/IFsndG94LWJ1dHRvbi0tZW5hYmxlZCddIDogW10pLFxuICAgICAgICBhdHRyaWJ1dGVzOiB0b29sdGlwQXR0cmlidXRlc1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4dHJhQmVoYXZpb3VycyA9IFtdO1xuICAgICAgY29uc3QgaWNvbkJ1dHRvblNwZWMgPSByZW5kZXJDb21tb25TcGVjKGJ1dHRvblNwZWMsIE9wdGlvbmFsLnNvbWUoYWN0aW9uKSwgZXh0cmFCZWhhdmlvdXJzLCBkb20sIGNvbXBvbmVudHMsIHByb3ZpZGVycyk7XG4gICAgICByZXR1cm4gQnV0dG9uLnNrZXRjaChpY29uQnV0dG9uU3BlYyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlclZpZXdCdXR0b24gPSAoc3BlYywgcHJvdmlkZXJzKSA9PiByZW5kZXJCdXR0b24oc3BlYywgcHJvdmlkZXJzKTtcbiAgICBjb25zdCByZW5kZXJCdXR0b25zR3JvdXAgPSAoc3BlYywgcHJvdmlkZXJzKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXZpZXdfX3Rvb2xiYXJfX2dyb3VwJ11cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogbWFwJDIoc3BlYy5idXR0b25zLCBidXR0b24gPT4gcmVuZGVyVmlld0J1dHRvbihidXR0b24sIHByb3ZpZGVycykpXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZGV2aWNlRGV0ZWN0aW9uID0gZGV0ZWN0JDIoKS5kZXZpY2VUeXBlO1xuICAgIGNvbnN0IGlzUGhvbmUgPSBkZXZpY2VEZXRlY3Rpb24uaXNQaG9uZSgpO1xuICAgIGNvbnN0IGlzVGFibGV0ID0gZGV2aWNlRGV0ZWN0aW9uLmlzVGFibGV0KCk7XG4gICAgY29uc3QgcmVuZGVyVmlld0hlYWRlciA9IHNwZWMgPT4ge1xuICAgICAgbGV0IGhhc0dyb3VwcyA9IGZhbHNlO1xuICAgICAgY29uc3QgZW5kQnV0dG9ucyA9IG1hcCQyKHNwZWMuYnV0dG9ucywgYnRuc3BlYyA9PiB7XG4gICAgICAgIGlmIChidG5zcGVjLnR5cGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgICBoYXNHcm91cHMgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiByZW5kZXJCdXR0b25zR3JvdXAoYnRuc3BlYywgc3BlYy5wcm92aWRlcnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiByZW5kZXJWaWV3QnV0dG9uKGJ0bnNwZWMsIHNwZWMucHJvdmlkZXJzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1aWQ6IHNwZWMudWlkLFxuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAgICFoYXNHcm91cHMgPyAndG94LXZpZXdfX2hlYWRlcicgOiAndG94LXZpZXdfX3Rvb2xiYXInLFxuICAgICAgICAgICAgLi4uaXNQaG9uZSB8fCBpc1RhYmxldCA/IFtcbiAgICAgICAgICAgICAgJ3RveC12aWV3LS1tb2JpbGUnLFxuICAgICAgICAgICAgICAndG94LXZpZXctLXNjcm9sbGluZydcbiAgICAgICAgICAgIF0gOiBbXVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIEZvY3VzaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBtb2RlOiAnZmxvdycsXG4gICAgICAgICAgICBzZWxlY3RvcjogJ2J1dHRvbiwgLnRveC1idXR0b24nLFxuICAgICAgICAgICAgZm9jdXNJbnNpZGU6IEZvY3VzSW5zaWRlTW9kZXMuT25FbnRlck9yU3BhY2VNb2RlXG4gICAgICAgICAgfSlcbiAgICAgICAgXSksXG4gICAgICAgIGNvbXBvbmVudHM6IGhhc0dyb3VwcyA/IGVuZEJ1dHRvbnMgOiBbXG4gICAgICAgICAgQ29udGFpbmVyLnNrZXRjaCh7XG4gICAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgICAgY2xhc3NlczogWyd0b3gtdmlld19faGVhZGVyLXN0YXJ0J11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wb25lbnRzOiBbXVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIENvbnRhaW5lci5za2V0Y2goe1xuICAgICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LXZpZXdfX2hlYWRlci1lbmQnXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IGVuZEJ1dHRvbnNcbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyVmlld1BhbmUgPSBzcGVjID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVpZDogc3BlYy51aWQsXG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtdmlld19fcGFuZSddXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBmYWN0b3J5JDggPSAoZGV0YWlsLCBjb21wb25lbnRzLCBfc3BlYywgX2V4dGVybmFscykgPT4ge1xuICAgICAgY29uc3QgYXBpcyA9IHtcbiAgICAgICAgZ2V0UGFuZTogY29tcCA9PiBwYXJ0cyRhLmdldFBhcnQoY29tcCwgZGV0YWlsLCAncGFuZScpLFxuICAgICAgICBnZXRPblNob3c6IF9jb21wID0+IGRldGFpbC52aWV3Q29uZmlnLm9uU2hvdyxcbiAgICAgICAgZ2V0T25IaWRlOiBfY29tcCA9PiBkZXRhaWwudmlld0NvbmZpZy5vbkhpZGVcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1aWQ6IGRldGFpbC51aWQsXG4gICAgICAgIGRvbTogZGV0YWlsLmRvbSxcbiAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgYXBpc1xuICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBWaWV3ID0gY29tcG9zaXRlKHtcbiAgICAgIG5hbWU6ICdzaWx2ZXIuVmlldycsXG4gICAgICBjb25maWdGaWVsZHM6IFtyZXF1aXJlZCQxKCd2aWV3Q29uZmlnJyldLFxuICAgICAgcGFydEZpZWxkczogW1xuICAgICAgICBvcHRpb25hbCh7XG4gICAgICAgICAgZmFjdG9yeTogeyBza2V0Y2g6IHJlbmRlclZpZXdIZWFkZXIgfSxcbiAgICAgICAgICBzY2hlbWE6IFtcbiAgICAgICAgICAgIHJlcXVpcmVkJDEoJ2J1dHRvbnMnKSxcbiAgICAgICAgICAgIHJlcXVpcmVkJDEoJ3Byb3ZpZGVycycpXG4gICAgICAgICAgXSxcbiAgICAgICAgICBuYW1lOiAnaGVhZGVyJ1xuICAgICAgICB9KSxcbiAgICAgICAgb3B0aW9uYWwoe1xuICAgICAgICAgIGZhY3Rvcnk6IHsgc2tldGNoOiByZW5kZXJWaWV3UGFuZSB9LFxuICAgICAgICAgIHNjaGVtYTogW10sXG4gICAgICAgICAgbmFtZTogJ3BhbmUnXG4gICAgICAgIH0pXG4gICAgICBdLFxuICAgICAgZmFjdG9yeTogZmFjdG9yeSQ4LFxuICAgICAgYXBpczoge1xuICAgICAgICBnZXRQYW5lOiAoYXBpcywgY29tcCkgPT4gYXBpcy5nZXRQYW5lKGNvbXApLFxuICAgICAgICBnZXRPblNob3c6IChhcGlzLCBjb21wKSA9PiBhcGlzLmdldE9uU2hvdyhjb21wKSxcbiAgICAgICAgZ2V0T25IaWRlOiAoYXBpcywgY29tcCkgPT4gYXBpcy5nZXRPbkhpZGUoY29tcClcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IG1ha2VWaWV3cyA9IChwYXJ0cywgdmlld0NvbmZpZ3MsIHByb3ZpZGVycykgPT4ge1xuICAgICAgcmV0dXJuIG1hcFRvQXJyYXkodmlld0NvbmZpZ3MsIChjb25maWcsIG5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxWaWV3Q29uZmlnID0gZ2V0T3JEaWUoY3JlYXRlVmlldyhjb25maWcpKTtcbiAgICAgICAgcmV0dXJuIHBhcnRzLnNsb3QobmFtZSwgVmlldy5za2V0Y2goe1xuICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LXZpZXcnXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdmlld0NvbmZpZzogaW50ZXJuYWxWaWV3Q29uZmlnLFxuICAgICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICAgIC4uLmludGVybmFsVmlld0NvbmZpZy5idXR0b25zLmxlbmd0aCA+IDAgPyBbVmlldy5wYXJ0cy5oZWFkZXIoe1xuICAgICAgICAgICAgICAgIGJ1dHRvbnM6IGludGVybmFsVmlld0NvbmZpZy5idXR0b25zLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyc1xuICAgICAgICAgICAgICB9KV0gOiBbXSxcbiAgICAgICAgICAgIFZpZXcucGFydHMucGFuZSh7fSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbWFrZVNsb3RDb250YWluZXIgPSAodmlld0NvbmZpZ3MsIHByb3ZpZGVycykgPT4gU2xvdENvbnRhaW5lci5za2V0Y2gocGFydHMgPT4gKHtcbiAgICAgIGRvbToge1xuICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICBjbGFzc2VzOiBbJ3RveC12aWV3LXdyYXBfX3Nsb3QtY29udGFpbmVyJ11cbiAgICAgIH0sXG4gICAgICBjb21wb25lbnRzOiBtYWtlVmlld3MocGFydHMsIHZpZXdDb25maWdzLCBwcm92aWRlcnMpLFxuICAgICAgc2xvdEJlaGF2aW91cnM6IFNpbXBsZUJlaGF2aW91cnMudW5uYW1lZEV2ZW50cyhbcnVuT25BdHRhY2hlZChzbG90Q29udGFpbmVyID0+IFNsb3RDb250YWluZXIuaGlkZUFsbFNsb3RzKHNsb3RDb250YWluZXIpKV0pXG4gICAgfSkpO1xuICAgIGNvbnN0IGdldEN1cnJlbnROYW1lID0gc2xvdENvbnRhaW5lciA9PiB7XG4gICAgICByZXR1cm4gZmluZCQ1KFNsb3RDb250YWluZXIuZ2V0U2xvdE5hbWVzKHNsb3RDb250YWluZXIpLCBuYW1lID0+IFNsb3RDb250YWluZXIuaXNTaG93aW5nKHNsb3RDb250YWluZXIsIG5hbWUpKTtcbiAgICB9O1xuICAgIGNvbnN0IGhpZGVDb250YWluZXIgPSBjb21wID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb21wLmVsZW1lbnQ7XG4gICAgICBzZXQkOChlbGVtZW50LCAnZGlzcGxheScsICdub25lJyk7XG4gICAgICBzZXQkOShlbGVtZW50LCAnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgIH07XG4gICAgY29uc3Qgc2hvd0NvbnRhaW5lciA9IGNvbXAgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGNvbXAuZWxlbWVudDtcbiAgICAgIHJlbW92ZSQ2KGVsZW1lbnQsICdkaXNwbGF5Jyk7XG4gICAgICByZW1vdmUkNyhlbGVtZW50LCAnYXJpYS1oaWRkZW4nKTtcbiAgICB9O1xuICAgIGNvbnN0IG1ha2VWaWV3SW5zdGFuY2VBcGkgPSBzbG90ID0+ICh7IGdldENvbnRhaW5lcjogY29uc3RhbnQkMShzbG90KSB9KTtcbiAgICBjb25zdCBydW5PblBhbmVXaXRoSW5zdGFuY2VBcGkgPSAoc2xvdENvbnRhaW5lciwgbmFtZSwgZ2V0KSA9PiB7XG4gICAgICBTbG90Q29udGFpbmVyLmdldFNsb3Qoc2xvdENvbnRhaW5lciwgbmFtZSkuZWFjaCh2aWV3ID0+IHtcbiAgICAgICAgVmlldy5nZXRQYW5lKHZpZXcpLmVhY2gocGFuZSA9PiB7XG4gICAgICAgICAgY29uc3Qgb25DYWxsYmFjayA9IGdldCh2aWV3KTtcbiAgICAgICAgICBvbkNhbGxiYWNrKG1ha2VWaWV3SW5zdGFuY2VBcGkocGFuZS5lbGVtZW50LmRvbSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcnVuT25TaG93ID0gKHNsb3RDb250YWluZXIsIG5hbWUpID0+IHJ1bk9uUGFuZVdpdGhJbnN0YW5jZUFwaShzbG90Q29udGFpbmVyLCBuYW1lLCBWaWV3LmdldE9uU2hvdyk7XG4gICAgY29uc3QgcnVuT25IaWRlID0gKHNsb3RDb250YWluZXIsIG5hbWUpID0+IHJ1bk9uUGFuZVdpdGhJbnN0YW5jZUFwaShzbG90Q29udGFpbmVyLCBuYW1lLCBWaWV3LmdldE9uSGlkZSk7XG4gICAgY29uc3QgZmFjdG9yeSQ3ID0gKGRldGFpbCwgc3BlYykgPT4ge1xuICAgICAgY29uc3Qgc2V0Vmlld3MgPSAoY29tcCwgdmlld0NvbmZpZ3MpID0+IHtcbiAgICAgICAgUmVwbGFjaW5nLnNldChjb21wLCBbbWFrZVNsb3RDb250YWluZXIodmlld0NvbmZpZ3MsIHNwZWMuYmFja3N0YWdlLnNoYXJlZC5wcm92aWRlcnMpXSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgd2hpY2hWaWV3ID0gY29tcCA9PiB7XG4gICAgICAgIHJldHVybiBDb21wb3NpbmcuZ2V0Q3VycmVudChjb21wKS5iaW5kKGdldEN1cnJlbnROYW1lKTtcbiAgICAgIH07XG4gICAgICBjb25zdCB0b2dnbGVWaWV3ID0gKGNvbXAsIHNob3dNYWluVmlldywgaGlkZU1haW5WaWV3LCBuYW1lKSA9PiB7XG4gICAgICAgIHJldHVybiBDb21wb3NpbmcuZ2V0Q3VycmVudChjb21wKS5leGlzdHMoc2xvdENvbnRhaW5lciA9PiB7XG4gICAgICAgICAgY29uc3Qgb3B0Q3VycmVudFNsb3ROYW1lID0gZ2V0Q3VycmVudE5hbWUoc2xvdENvbnRhaW5lcik7XG4gICAgICAgICAgY29uc3QgaXNUb2dnbGluZ0N1cnJlbnRWaWV3ID0gb3B0Q3VycmVudFNsb3ROYW1lLmV4aXN0cyhjdXJyZW50ID0+IG5hbWUgPT09IGN1cnJlbnQpO1xuICAgICAgICAgIGNvbnN0IGV4aXN0cyA9IFNsb3RDb250YWluZXIuZ2V0U2xvdChzbG90Q29udGFpbmVyLCBuYW1lKS5pc1NvbWUoKTtcbiAgICAgICAgICBpZiAoZXhpc3RzKSB7XG4gICAgICAgICAgICBTbG90Q29udGFpbmVyLmhpZGVBbGxTbG90cyhzbG90Q29udGFpbmVyKTtcbiAgICAgICAgICAgIGlmICghaXNUb2dnbGluZ0N1cnJlbnRWaWV3KSB7XG4gICAgICAgICAgICAgIGhpZGVNYWluVmlldygpO1xuICAgICAgICAgICAgICBzaG93Q29udGFpbmVyKGNvbXApO1xuICAgICAgICAgICAgICBTbG90Q29udGFpbmVyLnNob3dTbG90KHNsb3RDb250YWluZXIsIG5hbWUpO1xuICAgICAgICAgICAgICBydW5PblNob3coc2xvdENvbnRhaW5lciwgbmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBoaWRlQ29udGFpbmVyKGNvbXApO1xuICAgICAgICAgICAgICBzaG93TWFpblZpZXcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdEN1cnJlbnRTbG90TmFtZS5lYWNoKHByZXZOYW1lID0+IHJ1bk9uSGlkZShzbG90Q29udGFpbmVyLCBwcmV2TmFtZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZXhpc3RzO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBhcGlzID0ge1xuICAgICAgICBzZXRWaWV3cyxcbiAgICAgICAgd2hpY2hWaWV3LFxuICAgICAgICB0b2dnbGVWaWV3XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXZpZXctd3JhcCddLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgJ2FyaWEtaGlkZGVuJzogJ3RydWUnIH0sXG4gICAgICAgICAgc3R5bGVzOiB7IGRpc3BsYXk6ICdub25lJyB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtdLFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgUmVwbGFjaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgQ29tcG9zaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBmaW5kOiBjb21wID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBSZXBsYWNpbmcuY29udGVudHMoY29tcCk7XG4gICAgICAgICAgICAgIHJldHVybiBoZWFkKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdKSxcbiAgICAgICAgYXBpc1xuICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBWaWV3V3JhcHBlciA9IHNpbmdsZSh7XG4gICAgICBmYWN0b3J5OiBmYWN0b3J5JDcsXG4gICAgICBuYW1lOiAnc2lsdmVyLlZpZXdXcmFwcGVyJyxcbiAgICAgIGNvbmZpZ0ZpZWxkczogW3JlcXVpcmVkJDEoJ2JhY2tzdGFnZScpXSxcbiAgICAgIGFwaXM6IHtcbiAgICAgICAgc2V0Vmlld3M6IChhcGlzLCBjb21wLCB2aWV3cykgPT4gYXBpcy5zZXRWaWV3cyhjb21wLCB2aWV3cyksXG4gICAgICAgIHRvZ2dsZVZpZXc6IChhcGlzLCBjb21wLCBvdXRlckNvbnRhaW5lciwgZWRpdG9yQ29udCwgbmFtZSkgPT4gYXBpcy50b2dnbGVWaWV3KGNvbXAsIG91dGVyQ29udGFpbmVyLCBlZGl0b3JDb250LCBuYW1lKSxcbiAgICAgICAgd2hpY2hWaWV3OiAoYXBpcywgY29tcCkgPT4gYXBpcy53aGljaFZpZXcoY29tcClcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGZhY3RvcnkkNiA9IChkZXRhaWwsIGNvbXBvbmVudHMsIF9zcGVjKSA9PiB7XG4gICAgICBsZXQgdG9vbGJhckRyYXdlck9wZW5TdGF0ZSA9IGZhbHNlO1xuICAgICAgY29uc3QgYXBpcyA9IHtcbiAgICAgICAgZ2V0U29ja2V0OiBjb21wID0+IHtcbiAgICAgICAgICByZXR1cm4gcGFydHMkYS5nZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ3NvY2tldCcpO1xuICAgICAgICB9LFxuICAgICAgICBzZXRTaWRlYmFyOiAoY29tcCwgcGFuZWxDb25maWdzLCBzaG93U2lkZWJhcikgPT4ge1xuICAgICAgICAgIHBhcnRzJGEuZ2V0UGFydChjb21wLCBkZXRhaWwsICdzaWRlYmFyJykuZWFjaChzaWRlYmFyID0+IHNldFNpZGViYXIoc2lkZWJhciwgcGFuZWxDb25maWdzLCBzaG93U2lkZWJhcikpO1xuICAgICAgICB9LFxuICAgICAgICB0b2dnbGVTaWRlYmFyOiAoY29tcCwgbmFtZSkgPT4ge1xuICAgICAgICAgIHBhcnRzJGEuZ2V0UGFydChjb21wLCBkZXRhaWwsICdzaWRlYmFyJykuZWFjaChzaWRlYmFyID0+IHRvZ2dsZVNpZGViYXIoc2lkZWJhciwgbmFtZSkpO1xuICAgICAgICB9LFxuICAgICAgICB3aGljaFNpZGViYXI6IGNvbXAgPT4ge1xuICAgICAgICAgIHJldHVybiBwYXJ0cyRhLmdldFBhcnQoY29tcCwgZGV0YWlsLCAnc2lkZWJhcicpLmJpbmQod2hpY2hTaWRlYmFyKS5nZXRPck51bGwoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0SGVhZGVyOiBjb21wID0+IHtcbiAgICAgICAgICByZXR1cm4gcGFydHMkYS5nZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ2hlYWRlcicpO1xuICAgICAgICB9LFxuICAgICAgICBnZXRUb29sYmFyOiBjb21wID0+IHtcbiAgICAgICAgICByZXR1cm4gcGFydHMkYS5nZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ3Rvb2xiYXInKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0VG9vbGJhcjogKGNvbXAsIGdyb3VwcykgPT4ge1xuICAgICAgICAgIHBhcnRzJGEuZ2V0UGFydChjb21wLCBkZXRhaWwsICd0b29sYmFyJykuZWFjaCh0b29sYmFyID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcmVkR3JvdXBzID0gbWFwJDIoZ3JvdXBzLCByZW5kZXJUb29sYmFyR3JvdXApO1xuICAgICAgICAgICAgdG9vbGJhci5nZXRBcGlzKCkuc2V0R3JvdXBzKHRvb2xiYXIsIHJlbmRlcmVkR3JvdXBzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0VG9vbGJhcnM6IChjb21wLCB0b29sYmFycykgPT4ge1xuICAgICAgICAgIHBhcnRzJGEuZ2V0UGFydChjb21wLCBkZXRhaWwsICdtdWx0aXBsZS10b29sYmFyJykuZWFjaChtVG9vbGJhciA9PiB7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJlZFRvb2xiYXJzID0gbWFwJDIodG9vbGJhcnMsIGcgPT4gbWFwJDIoZywgcmVuZGVyVG9vbGJhckdyb3VwKSk7XG4gICAgICAgICAgICBDdXN0b21MaXN0LnNldEl0ZW1zKG1Ub29sYmFyLCByZW5kZXJlZFRvb2xiYXJzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVmcmVzaFRvb2xiYXI6IGNvbXAgPT4ge1xuICAgICAgICAgIGNvbnN0IHRvb2xiYXIgPSBwYXJ0cyRhLmdldFBhcnQoY29tcCwgZGV0YWlsLCAndG9vbGJhcicpO1xuICAgICAgICAgIHRvb2xiYXIuZWFjaCh0b29sYmFyID0+IHRvb2xiYXIuZ2V0QXBpcygpLnJlZnJlc2godG9vbGJhcikpO1xuICAgICAgICB9LFxuICAgICAgICB0b2dnbGVUb29sYmFyRHJhd2VyOiBjb21wID0+IHtcbiAgICAgICAgICBwYXJ0cyRhLmdldFBhcnQoY29tcCwgZGV0YWlsLCAndG9vbGJhcicpLmVhY2godG9vbGJhciA9PiB7XG4gICAgICAgICAgICBtYXBGcm9tKHRvb2xiYXIuZ2V0QXBpcygpLnRvZ2dsZSwgdG9nZ2xlID0+IHRvZ2dsZSh0b29sYmFyKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRvZ2dsZVRvb2xiYXJEcmF3ZXJXaXRob3V0Rm9jdXNpbmc6IGNvbXAgPT4ge1xuICAgICAgICAgIHBhcnRzJGEuZ2V0UGFydChjb21wLCBkZXRhaWwsICd0b29sYmFyJykuZWFjaCh0b29sYmFyID0+IHtcbiAgICAgICAgICAgIG1hcEZyb20odG9vbGJhci5nZXRBcGlzKCkudG9nZ2xlV2l0aG91dEZvY3VzaW5nLCB0b2dnbGVXaXRob3V0Rm9jdXNpbmcgPT4gdG9nZ2xlV2l0aG91dEZvY3VzaW5nKHRvb2xiYXIpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNUb29sYmFyRHJhd2VyVG9nZ2xlZDogY29tcCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBhcnRzJGEuZ2V0UGFydChjb21wLCBkZXRhaWwsICd0b29sYmFyJykuYmluZCh0b29sYmFyID0+IE9wdGlvbmFsLmZyb20odG9vbGJhci5nZXRBcGlzKCkuaXNPcGVuKS5tYXAoaXNPcGVuID0+IGlzT3Blbih0b29sYmFyKSkpLmdldE9yKGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0VGhyb2JiZXI6IGNvbXAgPT4ge1xuICAgICAgICAgIHJldHVybiBwYXJ0cyRhLmdldFBhcnQoY29tcCwgZGV0YWlsLCAndGhyb2JiZXInKTtcbiAgICAgICAgfSxcbiAgICAgICAgZm9jdXNUb29sYmFyOiBjb21wID0+IHtcbiAgICAgICAgICBjb25zdCBvcHRUb29sYmFyID0gcGFydHMkYS5nZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ3Rvb2xiYXInKS5vclRodW5rKCgpID0+IHBhcnRzJGEuZ2V0UGFydChjb21wLCBkZXRhaWwsICdtdWx0aXBsZS10b29sYmFyJykpO1xuICAgICAgICAgIG9wdFRvb2xiYXIuZWFjaCh0b29sYmFyID0+IHtcbiAgICAgICAgICAgIEtleWluZy5mb2N1c0luKHRvb2xiYXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBzZXRNZW51YmFyOiAoY29tcCwgbWVudXMpID0+IHtcbiAgICAgICAgICBwYXJ0cyRhLmdldFBhcnQoY29tcCwgZGV0YWlsLCAnbWVudWJhcicpLmVhY2gobWVudWJhciA9PiB7XG4gICAgICAgICAgICBTaWx2ZXJNZW51YmFyLnNldE1lbnVzKG1lbnViYXIsIG1lbnVzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZm9jdXNNZW51YmFyOiBjb21wID0+IHtcbiAgICAgICAgICBwYXJ0cyRhLmdldFBhcnQoY29tcCwgZGV0YWlsLCAnbWVudWJhcicpLmVhY2gobWVudWJhciA9PiB7XG4gICAgICAgICAgICBTaWx2ZXJNZW51YmFyLmZvY3VzKG1lbnViYXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBzZXRWaWV3czogKGNvbXAsIHZpZXdDb25maWdzKSA9PiB7XG4gICAgICAgICAgcGFydHMkYS5nZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ3ZpZXdXcmFwcGVyJykuZWFjaCh3cmFwcGVyID0+IHtcbiAgICAgICAgICAgIFZpZXdXcmFwcGVyLnNldFZpZXdzKHdyYXBwZXIsIHZpZXdDb25maWdzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgdG9nZ2xlVmlldzogKGNvbXAsIG5hbWUpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGFydHMkYS5nZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ3ZpZXdXcmFwcGVyJykuZXhpc3RzKHdyYXBwZXIgPT4gVmlld1dyYXBwZXIudG9nZ2xlVmlldyh3cmFwcGVyLCAoKSA9PiBhcGlzLnNob3dNYWluVmlldyhjb21wKSwgKCkgPT4gYXBpcy5oaWRlTWFpblZpZXcoY29tcCksIG5hbWUpKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2hpY2hWaWV3OiBjb21wID0+IHtcbiAgICAgICAgICByZXR1cm4gcGFydHMkYS5nZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ3ZpZXdXcmFwcGVyJykuYmluZChWaWV3V3JhcHBlci53aGljaFZpZXcpLmdldE9yTnVsbCgpO1xuICAgICAgICB9LFxuICAgICAgICBoaWRlTWFpblZpZXc6IGNvbXAgPT4ge1xuICAgICAgICAgIHRvb2xiYXJEcmF3ZXJPcGVuU3RhdGUgPSBhcGlzLmlzVG9vbGJhckRyYXdlclRvZ2dsZWQoY29tcCk7XG4gICAgICAgICAgaWYgKHRvb2xiYXJEcmF3ZXJPcGVuU3RhdGUpIHtcbiAgICAgICAgICAgIGFwaXMudG9nZ2xlVG9vbGJhckRyYXdlcihjb21wKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFydHMkYS5nZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ2VkaXRvckNvbnRhaW5lcicpLmVhY2goZWRpdG9yQ29udGFpbmVyID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBlZGl0b3JDb250YWluZXIuZWxlbWVudDtcbiAgICAgICAgICAgIHNldCQ4KGVsZW1lbnQsICdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAgICAgICAgIHNldCQ5KGVsZW1lbnQsICdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNob3dNYWluVmlldzogY29tcCA9PiB7XG4gICAgICAgICAgaWYgKHRvb2xiYXJEcmF3ZXJPcGVuU3RhdGUpIHtcbiAgICAgICAgICAgIGFwaXMudG9nZ2xlVG9vbGJhckRyYXdlcihjb21wKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFydHMkYS5nZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ2VkaXRvckNvbnRhaW5lcicpLmVhY2goZWRpdG9yQ29udGFpbmVyID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBlZGl0b3JDb250YWluZXIuZWxlbWVudDtcbiAgICAgICAgICAgIHJlbW92ZSQ2KGVsZW1lbnQsICdkaXNwbGF5Jyk7XG4gICAgICAgICAgICByZW1vdmUkNyhlbGVtZW50LCAnYXJpYS1oaWRkZW4nKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVpZDogZGV0YWlsLnVpZCxcbiAgICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICBhcGlzLFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXRhaWwuYmVoYXZpb3Vyc1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHBhcnRNZW51YmFyID0gcGFydFR5cGUub3B0aW9uYWwoe1xuICAgICAgZmFjdG9yeTogU2lsdmVyTWVudWJhcixcbiAgICAgIG5hbWU6ICdtZW51YmFyJyxcbiAgICAgIHNjaGVtYTogW3JlcXVpcmVkJDEoJ2JhY2tzdGFnZScpXVxuICAgIH0pO1xuICAgIGNvbnN0IHRvb2xiYXJGYWN0b3J5ID0gc3BlYyA9PiB7XG4gICAgICBpZiAoc3BlYy50eXBlID09PSBUb29sYmFyTW9kZSQxLnNsaWRpbmcpIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlclNsaWRpbmdNb3JlVG9vbGJhcjtcbiAgICAgIH0gZWxzZSBpZiAoc3BlYy50eXBlID09PSBUb29sYmFyTW9kZSQxLmZsb2F0aW5nKSB7XG4gICAgICAgIHJldHVybiByZW5kZXJGbG9hdGluZ01vcmVUb29sYmFyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlclRvb2xiYXI7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBwYXJ0TXVsdGlwbGVUb29sYmFyID0gcGFydFR5cGUub3B0aW9uYWwoe1xuICAgICAgZmFjdG9yeToge1xuICAgICAgICBza2V0Y2g6IHNwZWMgPT4gQ3VzdG9tTGlzdC5za2V0Y2goe1xuICAgICAgICAgIHVpZDogc3BlYy51aWQsXG4gICAgICAgICAgZG9tOiBzcGVjLmRvbSxcbiAgICAgICAgICBsaXN0QmVoYXZpb3VyczogZGVyaXZlJDEoW0tleWluZy5jb25maWcoe1xuICAgICAgICAgICAgICBtb2RlOiAnYWN5Y2xpYycsXG4gICAgICAgICAgICAgIHNlbGVjdG9yOiAnLnRveC10b29sYmFyJ1xuICAgICAgICAgICAgfSldKSxcbiAgICAgICAgICBtYWtlSXRlbTogKCkgPT4gcmVuZGVyVG9vbGJhcih7XG4gICAgICAgICAgICB0eXBlOiBzcGVjLnR5cGUsXG4gICAgICAgICAgICB1aWQ6IGdlbmVyYXRlJDYoJ211bHRpcGxlLXRvb2xiYXItaXRlbScpLFxuICAgICAgICAgICAgY3ljbGljS2V5aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGluaXRHcm91cHM6IFtdLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiBzcGVjLnByb3ZpZGVycyxcbiAgICAgICAgICAgIG9uRXNjYXBlOiAoKSA9PiB7XG4gICAgICAgICAgICAgIHNwZWMub25Fc2NhcGUoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgc2V0dXBJdGVtOiAoX21Ub29sYmFyLCB0YywgZGF0YSwgX2luZGV4KSA9PiB7XG4gICAgICAgICAgICBUb29sYmFyLnNldEdyb3Vwcyh0YywgZGF0YSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzaGVsbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIG5hbWU6ICdtdWx0aXBsZS10b29sYmFyJyxcbiAgICAgIHNjaGVtYTogW1xuICAgICAgICByZXF1aXJlZCQxKCdkb20nKSxcbiAgICAgICAgcmVxdWlyZWQkMSgnb25Fc2NhcGUnKVxuICAgICAgXVxuICAgIH0pO1xuICAgIGNvbnN0IHBhcnRUb29sYmFyID0gcGFydFR5cGUub3B0aW9uYWwoe1xuICAgICAgZmFjdG9yeToge1xuICAgICAgICBza2V0Y2g6IHNwZWMgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlbmRlcmVyID0gdG9vbGJhckZhY3Rvcnkoc3BlYyk7XG4gICAgICAgICAgY29uc3QgdG9vbGJhclNwZWMgPSB7XG4gICAgICAgICAgICB0eXBlOiBzcGVjLnR5cGUsXG4gICAgICAgICAgICB1aWQ6IHNwZWMudWlkLFxuICAgICAgICAgICAgb25Fc2NhcGU6ICgpID0+IHtcbiAgICAgICAgICAgICAgc3BlYy5vbkVzY2FwZSgpO1xuICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblRvZ2dsZWQ6IChfY29tcCwgc3RhdGUpID0+IHNwZWMub25Ub29sYmFyVG9nZ2xlZChzdGF0ZSksXG4gICAgICAgICAgICBjeWNsaWNLZXlpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaW5pdEdyb3VwczogW10sXG4gICAgICAgICAgICBnZXRTaW5rOiBzcGVjLmdldFNpbmssXG4gICAgICAgICAgICBwcm92aWRlcnM6IHNwZWMucHJvdmlkZXJzLFxuICAgICAgICAgICAgbW9yZURyYXdlckRhdGE6IHtcbiAgICAgICAgICAgICAgbGF6eVRvb2xiYXI6IHNwZWMubGF6eVRvb2xiYXIsXG4gICAgICAgICAgICAgIGxhenlNb3JlQnV0dG9uOiBzcGVjLmxhenlNb3JlQnV0dG9uLFxuICAgICAgICAgICAgICBsYXp5SGVhZGVyOiBzcGVjLmxhenlIZWFkZXJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBzcGVjLmF0dHJpYnV0ZXNcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiByZW5kZXJlcih0b29sYmFyU3BlYyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBuYW1lOiAndG9vbGJhcicsXG4gICAgICBzY2hlbWE6IFtcbiAgICAgICAgcmVxdWlyZWQkMSgnZG9tJyksXG4gICAgICAgIHJlcXVpcmVkJDEoJ29uRXNjYXBlJyksXG4gICAgICAgIHJlcXVpcmVkJDEoJ2dldFNpbmsnKVxuICAgICAgXVxuICAgIH0pO1xuICAgIGNvbnN0IHBhcnRIZWFkZXIgPSBwYXJ0VHlwZS5vcHRpb25hbCh7XG4gICAgICBmYWN0b3J5OiB7IHNrZXRjaDogcmVuZGVySGVhZGVyIH0sXG4gICAgICBuYW1lOiAnaGVhZGVyJyxcbiAgICAgIHNjaGVtYTogW3JlcXVpcmVkJDEoJ2RvbScpXVxuICAgIH0pO1xuICAgIGNvbnN0IHBhcnRQcm9tb3Rpb24gPSBwYXJ0VHlwZS5vcHRpb25hbCh7XG4gICAgICBmYWN0b3J5OiB7IHNrZXRjaDogcmVuZGVyUHJvbW90aW9uIH0sXG4gICAgICBuYW1lOiAncHJvbW90aW9uJyxcbiAgICAgIHNjaGVtYTogW3JlcXVpcmVkJDEoJ2RvbScpXVxuICAgIH0pO1xuICAgIGNvbnN0IHBhcnRTb2NrZXQgPSBwYXJ0VHlwZS5vcHRpb25hbCh7XG4gICAgICBuYW1lOiAnc29ja2V0JyxcbiAgICAgIHNjaGVtYTogW3JlcXVpcmVkJDEoJ2RvbScpXVxuICAgIH0pO1xuICAgIGNvbnN0IHBhcnRTaWRlYmFyID0gcGFydFR5cGUub3B0aW9uYWwoe1xuICAgICAgZmFjdG9yeTogeyBza2V0Y2g6IHJlbmRlclNpZGViYXIgfSxcbiAgICAgIG5hbWU6ICdzaWRlYmFyJyxcbiAgICAgIHNjaGVtYTogW3JlcXVpcmVkJDEoJ2RvbScpXVxuICAgIH0pO1xuICAgIGNvbnN0IHBhcnRUaHJvYmJlciA9IHBhcnRUeXBlLm9wdGlvbmFsKHtcbiAgICAgIGZhY3Rvcnk6IHsgc2tldGNoOiByZW5kZXJUaHJvYmJlciB9LFxuICAgICAgbmFtZTogJ3Rocm9iYmVyJyxcbiAgICAgIHNjaGVtYTogW3JlcXVpcmVkJDEoJ2RvbScpXVxuICAgIH0pO1xuICAgIGNvbnN0IHBhcnRWaWV3V3JhcHBlciA9IHBhcnRUeXBlLm9wdGlvbmFsKHtcbiAgICAgIGZhY3Rvcnk6IFZpZXdXcmFwcGVyLFxuICAgICAgbmFtZTogJ3ZpZXdXcmFwcGVyJyxcbiAgICAgIHNjaGVtYTogW3JlcXVpcmVkJDEoJ2JhY2tzdGFnZScpXVxuICAgIH0pO1xuICAgIGNvbnN0IHJlbmRlckVkaXRvckNvbnRhaW5lciA9IHNwZWMgPT4gKHtcbiAgICAgIHVpZDogc3BlYy51aWQsXG4gICAgICBkb206IHtcbiAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgY2xhc3NlczogWyd0b3gtZWRpdG9yLWNvbnRhaW5lciddXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czogc3BlYy5jb21wb25lbnRzXG4gICAgfSk7XG4gICAgY29uc3QgcGFydEVkaXRvckNvbnRhaW5lciA9IHBhcnRUeXBlLm9wdGlvbmFsKHtcbiAgICAgIGZhY3Rvcnk6IHsgc2tldGNoOiByZW5kZXJFZGl0b3JDb250YWluZXIgfSxcbiAgICAgIG5hbWU6ICdlZGl0b3JDb250YWluZXInLFxuICAgICAgc2NoZW1hOiBbXVxuICAgIH0pO1xuICAgIHZhciBPdXRlckNvbnRhaW5lciA9IGNvbXBvc2l0ZSh7XG4gICAgICBuYW1lOiAnT3V0ZXJDb250YWluZXInLFxuICAgICAgZmFjdG9yeTogZmFjdG9yeSQ2LFxuICAgICAgY29uZmlnRmllbGRzOiBbXG4gICAgICAgIHJlcXVpcmVkJDEoJ2RvbScpLFxuICAgICAgICByZXF1aXJlZCQxKCdiZWhhdmlvdXJzJylcbiAgICAgIF0sXG4gICAgICBwYXJ0RmllbGRzOiBbXG4gICAgICAgIHBhcnRIZWFkZXIsXG4gICAgICAgIHBhcnRNZW51YmFyLFxuICAgICAgICBwYXJ0VG9vbGJhcixcbiAgICAgICAgcGFydE11bHRpcGxlVG9vbGJhcixcbiAgICAgICAgcGFydFNvY2tldCxcbiAgICAgICAgcGFydFNpZGViYXIsXG4gICAgICAgIHBhcnRQcm9tb3Rpb24sXG4gICAgICAgIHBhcnRUaHJvYmJlcixcbiAgICAgICAgcGFydFZpZXdXcmFwcGVyLFxuICAgICAgICBwYXJ0RWRpdG9yQ29udGFpbmVyXG4gICAgICBdLFxuICAgICAgYXBpczoge1xuICAgICAgICBnZXRTb2NrZXQ6IChhcGlzLCBjb21wKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFwaXMuZ2V0U29ja2V0KGNvbXApO1xuICAgICAgICB9LFxuICAgICAgICBzZXRTaWRlYmFyOiAoYXBpcywgY29tcCwgcGFuZWxDb25maWdzLCBzaG93U2lkZWJhcikgPT4ge1xuICAgICAgICAgIGFwaXMuc2V0U2lkZWJhcihjb21wLCBwYW5lbENvbmZpZ3MsIHNob3dTaWRlYmFyKTtcbiAgICAgICAgfSxcbiAgICAgICAgdG9nZ2xlU2lkZWJhcjogKGFwaXMsIGNvbXAsIG5hbWUpID0+IHtcbiAgICAgICAgICBhcGlzLnRvZ2dsZVNpZGViYXIoY29tcCwgbmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHdoaWNoU2lkZWJhcjogKGFwaXMsIGNvbXApID0+IHtcbiAgICAgICAgICByZXR1cm4gYXBpcy53aGljaFNpZGViYXIoY29tcCk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldEhlYWRlcjogKGFwaXMsIGNvbXApID0+IHtcbiAgICAgICAgICByZXR1cm4gYXBpcy5nZXRIZWFkZXIoY29tcCk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldFRvb2xiYXI6IChhcGlzLCBjb21wKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFwaXMuZ2V0VG9vbGJhcihjb21wKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0VG9vbGJhcjogKGFwaXMsIGNvbXAsIGdyb3VwcykgPT4ge1xuICAgICAgICAgIGFwaXMuc2V0VG9vbGJhcihjb21wLCBncm91cHMpO1xuICAgICAgICB9LFxuICAgICAgICBzZXRUb29sYmFyczogKGFwaXMsIGNvbXAsIHRvb2xiYXJzKSA9PiB7XG4gICAgICAgICAgYXBpcy5zZXRUb29sYmFycyhjb21wLCB0b29sYmFycyk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZnJlc2hUb29sYmFyOiAoYXBpcywgY29tcCkgPT4ge1xuICAgICAgICAgIHJldHVybiBhcGlzLnJlZnJlc2hUb29sYmFyKGNvbXApO1xuICAgICAgICB9LFxuICAgICAgICB0b2dnbGVUb29sYmFyRHJhd2VyOiAoYXBpcywgY29tcCkgPT4ge1xuICAgICAgICAgIGFwaXMudG9nZ2xlVG9vbGJhckRyYXdlcihjb21wKTtcbiAgICAgICAgfSxcbiAgICAgICAgdG9nZ2xlVG9vbGJhckRyYXdlcldpdGhvdXRGb2N1c2luZzogKGFwaXMsIGNvbXApID0+IHtcbiAgICAgICAgICBhcGlzLnRvZ2dsZVRvb2xiYXJEcmF3ZXJXaXRob3V0Rm9jdXNpbmcoY29tcCk7XG4gICAgICAgIH0sXG4gICAgICAgIGlzVG9vbGJhckRyYXdlclRvZ2dsZWQ6IChhcGlzLCBjb21wKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFwaXMuaXNUb29sYmFyRHJhd2VyVG9nZ2xlZChjb21wKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0VGhyb2JiZXI6IChhcGlzLCBjb21wKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFwaXMuZ2V0VGhyb2JiZXIoY29tcCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldE1lbnViYXI6IChhcGlzLCBjb21wLCBtZW51cykgPT4ge1xuICAgICAgICAgIGFwaXMuc2V0TWVudWJhcihjb21wLCBtZW51cyk7XG4gICAgICAgIH0sXG4gICAgICAgIGZvY3VzTWVudWJhcjogKGFwaXMsIGNvbXApID0+IHtcbiAgICAgICAgICBhcGlzLmZvY3VzTWVudWJhcihjb21wKTtcbiAgICAgICAgfSxcbiAgICAgICAgZm9jdXNUb29sYmFyOiAoYXBpcywgY29tcCkgPT4ge1xuICAgICAgICAgIGFwaXMuZm9jdXNUb29sYmFyKGNvbXApO1xuICAgICAgICB9LFxuICAgICAgICBzZXRWaWV3czogKGFwaXMsIGNvbXAsIHZpZXdzKSA9PiB7XG4gICAgICAgICAgYXBpcy5zZXRWaWV3cyhjb21wLCB2aWV3cyk7XG4gICAgICAgIH0sXG4gICAgICAgIHRvZ2dsZVZpZXc6IChhcGlzLCBjb21wLCBuYW1lKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFwaXMudG9nZ2xlVmlldyhjb21wLCBuYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2hpY2hWaWV3OiAoYXBpcywgY29tcCkgPT4ge1xuICAgICAgICAgIHJldHVybiBhcGlzLndoaWNoVmlldyhjb21wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVmYXVsdE1lbnViYXIgPSAnZmlsZSBlZGl0IHZpZXcgaW5zZXJ0IGZvcm1hdCB0b29scyB0YWJsZSBoZWxwJztcbiAgICBjb25zdCBkZWZhdWx0TWVudXMgPSB7XG4gICAgICBmaWxlOiB7XG4gICAgICAgIHRpdGxlOiAnRmlsZScsXG4gICAgICAgIGl0ZW1zOiAnbmV3ZG9jdW1lbnQgcmVzdG9yZWRyYWZ0IHwgcHJldmlldyB8IGV4cG9ydCBwcmludCB8IGRlbGV0ZWFsbGNvbnZlcnNhdGlvbnMnXG4gICAgICB9LFxuICAgICAgZWRpdDoge1xuICAgICAgICB0aXRsZTogJ0VkaXQnLFxuICAgICAgICBpdGVtczogJ3VuZG8gcmVkbyB8IGN1dCBjb3B5IHBhc3RlIHBhc3RldGV4dCB8IHNlbGVjdGFsbCB8IHNlYXJjaHJlcGxhY2UnXG4gICAgICB9LFxuICAgICAgdmlldzoge1xuICAgICAgICB0aXRsZTogJ1ZpZXcnLFxuICAgICAgICBpdGVtczogJ2NvZGUgfCB2aXN1YWxhaWQgdmlzdWFsY2hhcnMgdmlzdWFsYmxvY2tzIHwgc3BlbGxjaGVja2VyIHwgcHJldmlldyBmdWxsc2NyZWVuIHwgc2hvd2NvbW1lbnRzJ1xuICAgICAgfSxcbiAgICAgIGluc2VydDoge1xuICAgICAgICB0aXRsZTogJ0luc2VydCcsXG4gICAgICAgIGl0ZW1zOiAnaW1hZ2UgbGluayBtZWRpYSBhZGRjb21tZW50IHBhZ2VlbWJlZCB0ZW1wbGF0ZSBpbnNlcnR0ZW1wbGF0ZSBjb2Rlc2FtcGxlIGluc2VydHRhYmxlIGFjY29yZGlvbiB8IGNoYXJtYXAgZW1vdGljb25zIGhyIHwgcGFnZWJyZWFrIG5vbmJyZWFraW5nIGFuY2hvciB0YWJsZW9mY29udGVudHMgZm9vdG5vdGVzIHwgbWVyZ2V0YWdzIHwgaW5zZXJ0ZGF0ZXRpbWUnXG4gICAgICB9LFxuICAgICAgZm9ybWF0OiB7XG4gICAgICAgIHRpdGxlOiAnRm9ybWF0JyxcbiAgICAgICAgaXRlbXM6ICdib2xkIGl0YWxpYyB1bmRlcmxpbmUgc3RyaWtldGhyb3VnaCBzdXBlcnNjcmlwdCBzdWJzY3JpcHQgY29kZWZvcm1hdCB8IHN0eWxlcyBibG9ja3MgZm9udGZhbWlseSBmb250c2l6ZSBhbGlnbiBsaW5laGVpZ2h0IHwgZm9yZWNvbG9yIGJhY2tjb2xvciB8IGxhbmd1YWdlIHwgcmVtb3ZlZm9ybWF0J1xuICAgICAgfSxcbiAgICAgIHRvb2xzOiB7XG4gICAgICAgIHRpdGxlOiAnVG9vbHMnLFxuICAgICAgICBpdGVtczogJ2FpZGlhbG9nIGFpc2hvcnRjdXRzIHwgc3BlbGxjaGVja2VyIHNwZWxsY2hlY2tlcmxhbmd1YWdlIHwgYXV0b2NvcnJlY3QgY2FwaXRhbGl6YXRpb24gfCBhMTF5Y2hlY2sgY29kZSB0eXBvZ3JhcGh5IHdvcmRjb3VudCBhZGR0ZW1wbGF0ZSdcbiAgICAgIH0sXG4gICAgICB0YWJsZToge1xuICAgICAgICB0aXRsZTogJ1RhYmxlJyxcbiAgICAgICAgaXRlbXM6ICdpbnNlcnR0YWJsZSB8IGNlbGwgcm93IGNvbHVtbiB8IGFkdnRhYmxlc29ydCB8IHRhYmxlcHJvcHMgZGVsZXRldGFibGUnXG4gICAgICB9LFxuICAgICAgaGVscDoge1xuICAgICAgICB0aXRsZTogJ0hlbHAnLFxuICAgICAgICBpdGVtczogJ2hlbHAnXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBtYWtlID0gKG1lbnUsIHJlZ2lzdHJ5LCBlZGl0b3IpID0+IHtcbiAgICAgIGNvbnN0IHJlbW92ZWRNZW51SXRlbXMgPSBnZXRSZW1vdmVkTWVudUl0ZW1zKGVkaXRvcikuc3BsaXQoL1sgLF0vKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRleHQ6IG1lbnUudGl0bGUsXG4gICAgICAgIGdldEl0ZW1zOiAoKSA9PiBiaW5kJDMobWVudS5pdGVtcywgaSA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbU5hbWUgPSBpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKGl0ZW1OYW1lLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGV4aXN0cyhyZW1vdmVkTWVudUl0ZW1zLCByZW1vdmVkTWVudUl0ZW0gPT4gcmVtb3ZlZE1lbnVJdGVtID09PSBpdGVtTmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW1OYW1lID09PSAnc2VwYXJhdG9yJyB8fCBpdGVtTmFtZSA9PT0gJ3wnKSB7XG4gICAgICAgICAgICByZXR1cm4gW3sgdHlwZTogJ3NlcGFyYXRvcicgfV07XG4gICAgICAgICAgfSBlbHNlIGlmIChyZWdpc3RyeS5tZW51SXRlbXNbaXRlbU5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gW3JlZ2lzdHJ5Lm1lbnVJdGVtc1tpdGVtTmFtZV1dO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHBhcnNlSXRlbXNTdHJpbmcgPSBpdGVtcyA9PiB7XG4gICAgICByZXR1cm4gaXRlbXMuc3BsaXQoJyAnKTtcbiAgICB9O1xuICAgIGNvbnN0IGlkZW50aWZ5TWVudXMgPSAoZWRpdG9yLCByZWdpc3RyeSkgPT4ge1xuICAgICAgY29uc3QgcmF3TWVudURhdGEgPSB7XG4gICAgICAgIC4uLmRlZmF1bHRNZW51cyxcbiAgICAgICAgLi4ucmVnaXN0cnkubWVudXNcbiAgICAgIH07XG4gICAgICBjb25zdCB1c2VyRGVmaW5lZE1lbnVzID0ga2V5cyhyZWdpc3RyeS5tZW51cykubGVuZ3RoID4gMDtcbiAgICAgIGNvbnN0IG1lbnViYXIgPSByZWdpc3RyeS5tZW51YmFyID09PSB1bmRlZmluZWQgfHwgcmVnaXN0cnkubWVudWJhciA9PT0gdHJ1ZSA/IHBhcnNlSXRlbXNTdHJpbmcoZGVmYXVsdE1lbnViYXIpIDogcGFyc2VJdGVtc1N0cmluZyhyZWdpc3RyeS5tZW51YmFyID09PSBmYWxzZSA/ICcnIDogcmVnaXN0cnkubWVudWJhcik7XG4gICAgICBjb25zdCB2YWxpZE1lbnVzID0gZmlsdGVyJDIobWVudWJhciwgbWVudU5hbWUgPT4ge1xuICAgICAgICBjb25zdCBpc0RlZmF1bHRNZW51ID0gaGFzJDIoZGVmYXVsdE1lbnVzLCBtZW51TmFtZSk7XG4gICAgICAgIGlmICh1c2VyRGVmaW5lZE1lbnVzKSB7XG4gICAgICAgICAgcmV0dXJuIGlzRGVmYXVsdE1lbnUgfHwgZ2V0JGcocmVnaXN0cnkubWVudXMsIG1lbnVOYW1lKS5leGlzdHMobWVudSA9PiBoYXMkMihtZW51LCAnaXRlbXMnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGlzRGVmYXVsdE1lbnU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgbWVudXMgPSBtYXAkMih2YWxpZE1lbnVzLCBtZW51TmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IG1lbnVEYXRhID0gcmF3TWVudURhdGFbbWVudU5hbWVdO1xuICAgICAgICByZXR1cm4gbWFrZSh7XG4gICAgICAgICAgdGl0bGU6IG1lbnVEYXRhLnRpdGxlLFxuICAgICAgICAgIGl0ZW1zOiBwYXJzZUl0ZW1zU3RyaW5nKG1lbnVEYXRhLml0ZW1zKVxuICAgICAgICB9LCByZWdpc3RyeSwgZWRpdG9yKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZpbHRlciQyKG1lbnVzLCBtZW51ID0+IHtcbiAgICAgICAgY29uc3QgaXNOb3RTZXBhcmF0b3IgPSBpdGVtID0+IGlzU3RyaW5nKGl0ZW0pIHx8IGl0ZW0udHlwZSAhPT0gJ3NlcGFyYXRvcic7XG4gICAgICAgIHJldHVybiBtZW51LmdldEl0ZW1zKCkubGVuZ3RoID4gMCAmJiBleGlzdHMobWVudS5nZXRJdGVtcygpLCBpc05vdFNlcGFyYXRvcik7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmlyZVNraW5Mb2FkZWQgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZG9uZSA9ICgpID0+IHtcbiAgICAgICAgZWRpdG9yLl9za2luTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgZmlyZVNraW5Mb2FkZWQkMShlZGl0b3IpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmIChlZGl0b3IuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWRpdG9yLm9uKCdpbml0JywgZG9uZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBmaXJlU2tpbkxvYWRFcnJvciA9IChlZGl0b3IsIGVycikgPT4gKCkgPT4gZmlyZVNraW5Mb2FkRXJyb3IkMShlZGl0b3IsIHsgbWVzc2FnZTogZXJyIH0pO1xuXG4gICAgY29uc3QgbG9hZFN0eWxlc2hlZXQgPSAoZWRpdG9yLCBzdHlsZXNoZWV0VXJsLCBzdHlsZVNoZWV0TG9hZGVyKSA9PiB7XG4gICAgICBlZGl0b3Iub24oJ3JlbW92ZScsICgpID0+IHN0eWxlU2hlZXRMb2FkZXIudW5sb2FkKHN0eWxlc2hlZXRVcmwpKTtcbiAgICAgIHJldHVybiBzdHlsZVNoZWV0TG9hZGVyLmxvYWQoc3R5bGVzaGVldFVybCk7XG4gICAgfTtcbiAgICBjb25zdCBsb2FkVWlTa2lucyA9IChlZGl0b3IsIHNraW5VcmwpID0+IHtcbiAgICAgIGNvbnN0IHNraW5VaUNzcyA9IHNraW5VcmwgKyAnL3NraW4ubWluLmNzcyc7XG4gICAgICByZXR1cm4gbG9hZFN0eWxlc2hlZXQoZWRpdG9yLCBza2luVWlDc3MsIGVkaXRvci51aS5zdHlsZVNoZWV0TG9hZGVyKTtcbiAgICB9O1xuICAgIGNvbnN0IGxvYWRTaGFkb3dEb21VaVNraW5zID0gKGVkaXRvciwgc2tpblVybCkgPT4ge1xuICAgICAgY29uc3QgaXNJblNoYWRvd1Jvb3QkMSA9IGlzSW5TaGFkb3dSb290KFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRFbGVtZW50KCkpKTtcbiAgICAgIGlmIChpc0luU2hhZG93Um9vdCQxKSB7XG4gICAgICAgIGNvbnN0IHNoYWRvd0RvbVNraW5Dc3MgPSBza2luVXJsICsgJy9za2luLnNoYWRvd2RvbS5taW4uY3NzJztcbiAgICAgICAgcmV0dXJuIGxvYWRTdHlsZXNoZWV0KGVkaXRvciwgc2hhZG93RG9tU2tpbkNzcywgZ2xvYmFsJDcuRE9NLnN0eWxlU2hlZXRMb2FkZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbG9hZFNraW4gPSAoaXNJbmxpbmUsIGVkaXRvcikgPT4ge1xuICAgICAgY29uc3Qgc2tpblVybCA9IGdldFNraW5VcmwoZWRpdG9yKTtcbiAgICAgIGlmIChza2luVXJsKSB7XG4gICAgICAgIGVkaXRvci5jb250ZW50Q1NTLnB1c2goc2tpblVybCArIChpc0lubGluZSA/ICcvY29udGVudC5pbmxpbmUnIDogJy9jb250ZW50JykgKyAnLm1pbi5jc3MnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNTa2luRGlzYWJsZWQoZWRpdG9yKSAmJiBpc1N0cmluZyhza2luVXJsKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgICAgIGxvYWRVaVNraW5zKGVkaXRvciwgc2tpblVybCksXG4gICAgICAgICAgbG9hZFNoYWRvd0RvbVVpU2tpbnMoZWRpdG9yLCBza2luVXJsKVxuICAgICAgICBdKS50aGVuKGZpcmVTa2luTG9hZGVkKGVkaXRvciksIGZpcmVTa2luTG9hZEVycm9yKGVkaXRvciwgJ1NraW4gY291bGQgbm90IGJlIGxvYWRlZCcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmlyZVNraW5Mb2FkZWQoZWRpdG9yKSgpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlmcmFtZSA9IGN1cnJ5KGxvYWRTa2luLCBmYWxzZSk7XG4gICAgY29uc3QgaW5saW5lID0gY3VycnkobG9hZFNraW4sIHRydWUpO1xuXG4gICAgY29uc3QgZ2VuZXJhdGVTZWxlY3RJdGVtcyA9IChfZWRpdG9yLCBiYWNrc3RhZ2UsIHNwZWMpID0+IHtcbiAgICAgIGNvbnN0IGdlbmVyYXRlSXRlbSA9IChyYXdJdGVtLCByZXNwb25zZSwgaW52YWxpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlZFRleHQgPSBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycy50cmFuc2xhdGUocmF3SXRlbS50aXRsZSk7XG4gICAgICAgIGlmIChyYXdJdGVtLnR5cGUgPT09ICdzZXBhcmF0b3InKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgICAgdHlwZTogJ3NlcGFyYXRvcicsXG4gICAgICAgICAgICB0ZXh0OiB0cmFuc2xhdGVkVGV4dFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHJhd0l0ZW0udHlwZSA9PT0gJ3N1Ym1lbnUnKSB7XG4gICAgICAgICAgY29uc3QgaXRlbXMgPSBiaW5kJDMocmF3SXRlbS5nZXRTdHlsZUl0ZW1zKCksIHNpID0+IHZhbGlkYXRlKHNpLCByZXNwb25zZSwgdmFsdWUpKTtcbiAgICAgICAgICBpZiAocmVzcG9uc2UgPT09IDAgJiYgaXRlbXMubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgICAgdHlwZTogJ25lc3RlZG1lbnVpdGVtJyxcbiAgICAgICAgICAgICAgdGV4dDogdHJhbnNsYXRlZFRleHQsXG4gICAgICAgICAgICAgIGVuYWJsZWQ6IGl0ZW1zLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICAgIGdldFN1Ym1lbnVJdGVtczogKCkgPT4gYmluZCQzKHJhd0l0ZW0uZ2V0U3R5bGVJdGVtcygpLCBzaSA9PiB2YWxpZGF0ZShzaSwgcmVzcG9uc2UsIHZhbHVlKSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgICB0eXBlOiAndG9nZ2xlbWVudWl0ZW0nLFxuICAgICAgICAgICAgdGV4dDogdHJhbnNsYXRlZFRleHQsXG4gICAgICAgICAgICBpY29uOiByYXdJdGVtLmljb24sXG4gICAgICAgICAgICBhY3RpdmU6IHJhd0l0ZW0uaXNTZWxlY3RlZCh2YWx1ZSksXG4gICAgICAgICAgICBlbmFibGVkOiAhaW52YWxpZCxcbiAgICAgICAgICAgIG9uQWN0aW9uOiBzcGVjLm9uQWN0aW9uKHJhd0l0ZW0pLFxuICAgICAgICAgICAgLi4ucmF3SXRlbS5nZXRTdHlsZVByZXZpZXcoKS5mb2xkKCgpID0+ICh7fSksIHByZXZpZXcgPT4gKHsgbWV0YTogeyBzdHlsZTogcHJldmlldyB9IH0pKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgdmFsaWRhdGUgPSAoaXRlbSwgcmVzcG9uc2UsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGludmFsaWQgPSBpdGVtLnR5cGUgPT09ICdmb3JtYXR0ZXInICYmIHNwZWMuaXNJbnZhbGlkKGl0ZW0pO1xuICAgICAgICBpZiAocmVzcG9uc2UgPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZCA/IFtdIDogZ2VuZXJhdGVJdGVtKGl0ZW0sIHJlc3BvbnNlLCBmYWxzZSwgdmFsdWUpLnRvQXJyYXkoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVJdGVtKGl0ZW0sIHJlc3BvbnNlLCBpbnZhbGlkLCB2YWx1ZSkudG9BcnJheSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgdmFsaWRhdGVJdGVtcyA9IHByZUl0ZW1zID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBzcGVjLmdldEN1cnJlbnRWYWx1ZSgpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IHNwZWMuc2hvdWxkSGlkZSA/IDAgOiAxO1xuICAgICAgICByZXR1cm4gYmluZCQzKHByZUl0ZW1zLCBpdGVtID0+IHZhbGlkYXRlKGl0ZW0sIHJlc3BvbnNlLCB2YWx1ZSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldEZldGNoID0gKGJhY2tzdGFnZSwgZ2V0U3R5bGVJdGVtcykgPT4gKGNvbXAsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IHByZUl0ZW1zID0gZ2V0U3R5bGVJdGVtcygpO1xuICAgICAgICBjb25zdCBpdGVtcyA9IHZhbGlkYXRlSXRlbXMocHJlSXRlbXMpO1xuICAgICAgICBjb25zdCBtZW51ID0gYnVpbGQoaXRlbXMsIEl0ZW1SZXNwb25zZSQxLkNMT1NFX09OX0VYRUNVVEUsIGJhY2tzdGFnZSwge1xuICAgICAgICAgIGlzSG9yaXpvbnRhbE1lbnU6IGZhbHNlLFxuICAgICAgICAgIHNlYXJjaDogT3B0aW9uYWwubm9uZSgpXG4gICAgICAgIH0pO1xuICAgICAgICBjYWxsYmFjayhtZW51KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZGF0ZUl0ZW1zLFxuICAgICAgICBnZXRGZXRjaFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZU1lbnVJdGVtcyA9IChlZGl0b3IsIGJhY2tzdGFnZSwgc3BlYykgPT4ge1xuICAgICAgY29uc3QgZGF0YXNldCA9IHNwZWMuZGF0YXNldDtcbiAgICAgIGNvbnN0IGdldFN0eWxlSXRlbXMgPSBkYXRhc2V0LnR5cGUgPT09ICdiYXNpYycgPyAoKSA9PiBtYXAkMihkYXRhc2V0LmRhdGEsIGQgPT4gcHJvY2Vzc0Jhc2ljKGQsIHNwZWMuaXNTZWxlY3RlZEZvciwgc3BlYy5nZXRQcmV2aWV3Rm9yKSkgOiBkYXRhc2V0LmdldERhdGE7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpdGVtczogZ2VuZXJhdGVTZWxlY3RJdGVtcyhlZGl0b3IsIGJhY2tzdGFnZSwgc3BlYyksXG4gICAgICAgIGdldFN0eWxlSXRlbXNcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVTZWxlY3RCdXR0b24gPSAoZWRpdG9yLCBiYWNrc3RhZ2UsIHNwZWMpID0+IHtcbiAgICAgIGNvbnN0IHtpdGVtcywgZ2V0U3R5bGVJdGVtc30gPSBjcmVhdGVNZW51SXRlbXMoZWRpdG9yLCBiYWNrc3RhZ2UsIHNwZWMpO1xuICAgICAgY29uc3QgZ2V0QXBpID0gY29tcCA9PiAoeyBnZXRDb21wb25lbnQ6IGNvbnN0YW50JDEoY29tcCkgfSk7XG4gICAgICBjb25zdCBvblNldHVwID0gb25TZXR1cEV2ZW50KGVkaXRvciwgJ05vZGVDaGFuZ2UnLCBhcGkgPT4ge1xuICAgICAgICBjb25zdCBjb21wID0gYXBpLmdldENvbXBvbmVudCgpO1xuICAgICAgICBzcGVjLnVwZGF0ZVRleHQoY29tcCk7XG4gICAgICAgIERpc2FibGluZy5zZXQoYXBpLmdldENvbXBvbmVudCgpLCAhZWRpdG9yLnNlbGVjdGlvbi5pc0VkaXRhYmxlKCkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVuZGVyQ29tbW9uRHJvcGRvd24oe1xuICAgICAgICB0ZXh0OiBzcGVjLmljb24uaXNTb21lKCkgPyBPcHRpb25hbC5ub25lKCkgOiBzcGVjLnRleHQsXG4gICAgICAgIGljb246IHNwZWMuaWNvbixcbiAgICAgICAgdG9vbHRpcDogT3B0aW9uYWwuZnJvbShzcGVjLnRvb2x0aXApLFxuICAgICAgICByb2xlOiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGZldGNoOiBpdGVtcy5nZXRGZXRjaChiYWNrc3RhZ2UsIGdldFN0eWxlSXRlbXMpLFxuICAgICAgICBvblNldHVwLFxuICAgICAgICBnZXRBcGksXG4gICAgICAgIGNvbHVtbnM6IDEsXG4gICAgICAgIHByZXNldHM6ICdub3JtYWwnLFxuICAgICAgICBjbGFzc2VzOiBzcGVjLmljb24uaXNTb21lKCkgPyBbXSA6IFsnYmVzcG9rZSddLFxuICAgICAgICBkcm9wZG93bkJlaGF2aW91cnM6IFtdXG4gICAgICB9LCAndG94LXRidG4nLCBiYWNrc3RhZ2Uuc2hhcmVkKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJvY2VzcyA9IHJhd0Zvcm1hdHMgPT4gbWFwJDIocmF3Rm9ybWF0cywgaXRlbSA9PiB7XG4gICAgICBsZXQgdGl0bGUgPSBpdGVtLCBmb3JtYXQgPSBpdGVtO1xuICAgICAgY29uc3QgdmFsdWVzID0gaXRlbS5zcGxpdCgnPScpO1xuICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRpdGxlID0gdmFsdWVzWzBdO1xuICAgICAgICBmb3JtYXQgPSB2YWx1ZXNbMV07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0aXRsZSxcbiAgICAgICAgZm9ybWF0XG4gICAgICB9O1xuICAgIH0pO1xuICAgIGNvbnN0IGJ1aWxkQmFzaWNTdGF0aWNEYXRhc2V0ID0gZGF0YSA9PiAoe1xuICAgICAgdHlwZTogJ2Jhc2ljJyxcbiAgICAgIGRhdGFcbiAgICB9KTtcbiAgICB2YXIgRGVsaW1pdGVyO1xuICAgIChmdW5jdGlvbiAoRGVsaW1pdGVyKSB7XG4gICAgICBEZWxpbWl0ZXJbRGVsaW1pdGVyWydTZW1pQ29sb24nXSA9IDBdID0gJ1NlbWlDb2xvbic7XG4gICAgICBEZWxpbWl0ZXJbRGVsaW1pdGVyWydTcGFjZSddID0gMV0gPSAnU3BhY2UnO1xuICAgIH0oRGVsaW1pdGVyIHx8IChEZWxpbWl0ZXIgPSB7fSkpKTtcbiAgICBjb25zdCBzcGxpdCA9IChyYXdGb3JtYXRzLCBkZWxpbWl0ZXIpID0+IHtcbiAgICAgIGlmIChkZWxpbWl0ZXIgPT09IERlbGltaXRlci5TZW1pQ29sb24pIHtcbiAgICAgICAgcmV0dXJuIHJhd0Zvcm1hdHMucmVwbGFjZSgvOyQvLCAnJykuc3BsaXQoJzsnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByYXdGb3JtYXRzLnNwbGl0KCcgJyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBidWlsZEJhc2ljU2V0dGluZ3NEYXRhc2V0ID0gKGVkaXRvciwgc2V0dGluZ05hbWUsIGRlbGltaXRlcikgPT4ge1xuICAgICAgY29uc3QgcmF3Rm9ybWF0cyA9IGVkaXRvci5vcHRpb25zLmdldChzZXR0aW5nTmFtZSk7XG4gICAgICBjb25zdCBkYXRhID0gcHJvY2VzcyhzcGxpdChyYXdGb3JtYXRzLCBkZWxpbWl0ZXIpKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdiYXNpYycsXG4gICAgICAgIGRhdGFcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGFsaWduTWVudUl0ZW1zID0gW1xuICAgICAge1xuICAgICAgICB0aXRsZTogJ0xlZnQnLFxuICAgICAgICBpY29uOiAnYWxpZ24tbGVmdCcsXG4gICAgICAgIGZvcm1hdDogJ2FsaWdubGVmdCcsXG4gICAgICAgIGNvbW1hbmQ6ICdKdXN0aWZ5TGVmdCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnQ2VudGVyJyxcbiAgICAgICAgaWNvbjogJ2FsaWduLWNlbnRlcicsXG4gICAgICAgIGZvcm1hdDogJ2FsaWduY2VudGVyJyxcbiAgICAgICAgY29tbWFuZDogJ0p1c3RpZnlDZW50ZXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ1JpZ2h0JyxcbiAgICAgICAgaWNvbjogJ2FsaWduLXJpZ2h0JyxcbiAgICAgICAgZm9ybWF0OiAnYWxpZ25yaWdodCcsXG4gICAgICAgIGNvbW1hbmQ6ICdKdXN0aWZ5UmlnaHQnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ0p1c3RpZnknLFxuICAgICAgICBpY29uOiAnYWxpZ24tanVzdGlmeScsXG4gICAgICAgIGZvcm1hdDogJ2FsaWduanVzdGlmeScsXG4gICAgICAgIGNvbW1hbmQ6ICdKdXN0aWZ5RnVsbCdcbiAgICAgIH1cbiAgICBdO1xuICAgIGNvbnN0IGdldFNwZWMkNCA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBnZXRNYXRjaGluZ1ZhbHVlID0gKCkgPT4gZmluZCQ1KGFsaWduTWVudUl0ZW1zLCBpdGVtID0+IGVkaXRvci5mb3JtYXR0ZXIubWF0Y2goaXRlbS5mb3JtYXQpKTtcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWRGb3IgPSBmb3JtYXQgPT4gKCkgPT4gZWRpdG9yLmZvcm1hdHRlci5tYXRjaChmb3JtYXQpO1xuICAgICAgY29uc3QgZ2V0UHJldmlld0ZvciA9IF9mb3JtYXQgPT4gT3B0aW9uYWwubm9uZTtcbiAgICAgIGNvbnN0IHVwZGF0ZVNlbGVjdE1lbnVJY29uID0gY29tcCA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gZ2V0TWF0Y2hpbmdWYWx1ZSgpO1xuICAgICAgICBjb25zdCBhbGlnbm1lbnQgPSBtYXRjaC5mb2xkKGNvbnN0YW50JDEoJ2xlZnQnKSwgaXRlbSA9PiBpdGVtLnRpdGxlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBlbWl0V2l0aChjb21wLCB1cGRhdGVNZW51SWNvbiwgeyBpY29uOiBgYWxpZ24tJHsgYWxpZ25tZW50IH1gIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSBidWlsZEJhc2ljU3RhdGljRGF0YXNldChhbGlnbk1lbnVJdGVtcyk7XG4gICAgICBjb25zdCBvbkFjdGlvbiA9IHJhd0l0ZW0gPT4gKCkgPT4gZmluZCQ1KGFsaWduTWVudUl0ZW1zLCBpdGVtID0+IGl0ZW0uZm9ybWF0ID09PSByYXdJdGVtLmZvcm1hdCkuZWFjaChpdGVtID0+IGVkaXRvci5leGVjQ29tbWFuZChpdGVtLmNvbW1hbmQpKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvb2x0aXA6ICdBbGlnbicsXG4gICAgICAgIHRleHQ6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICAgaWNvbjogT3B0aW9uYWwuc29tZSgnYWxpZ24tbGVmdCcpLFxuICAgICAgICBpc1NlbGVjdGVkRm9yLFxuICAgICAgICBnZXRDdXJyZW50VmFsdWU6IE9wdGlvbmFsLm5vbmUsXG4gICAgICAgIGdldFByZXZpZXdGb3IsXG4gICAgICAgIG9uQWN0aW9uLFxuICAgICAgICB1cGRhdGVUZXh0OiB1cGRhdGVTZWxlY3RNZW51SWNvbixcbiAgICAgICAgZGF0YXNldCxcbiAgICAgICAgc2hvdWxkSGlkZTogZmFsc2UsXG4gICAgICAgIGlzSW52YWxpZDogaXRlbSA9PiAhZWRpdG9yLmZvcm1hdHRlci5jYW5BcHBseShpdGVtLmZvcm1hdClcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVBbGlnbkJ1dHRvbiA9IChlZGl0b3IsIGJhY2tzdGFnZSkgPT4gY3JlYXRlU2VsZWN0QnV0dG9uKGVkaXRvciwgYmFja3N0YWdlLCBnZXRTcGVjJDQoZWRpdG9yKSk7XG4gICAgY29uc3QgY3JlYXRlQWxpZ25NZW51ID0gKGVkaXRvciwgYmFja3N0YWdlKSA9PiB7XG4gICAgICBjb25zdCBtZW51SXRlbXMgPSBjcmVhdGVNZW51SXRlbXMoZWRpdG9yLCBiYWNrc3RhZ2UsIGdldFNwZWMkNChlZGl0b3IpKTtcbiAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGROZXN0ZWRNZW51SXRlbSgnYWxpZ24nLCB7XG4gICAgICAgIHRleHQ6IGJhY2tzdGFnZS5zaGFyZWQucHJvdmlkZXJzLnRyYW5zbGF0ZSgnQWxpZ24nKSxcbiAgICAgICAgb25TZXR1cDogb25TZXR1cEVkaXRhYmxlVG9nZ2xlKGVkaXRvciksXG4gICAgICAgIGdldFN1Ym1lbnVJdGVtczogKCkgPT4gbWVudUl0ZW1zLml0ZW1zLnZhbGlkYXRlSXRlbXMobWVudUl0ZW1zLmdldFN0eWxlSXRlbXMoKSlcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBmaW5kTmVhcmVzdCA9IChlZGl0b3IsIGdldFN0eWxlcykgPT4ge1xuICAgICAgY29uc3Qgc3R5bGVzID0gZ2V0U3R5bGVzKCk7XG4gICAgICBjb25zdCBmb3JtYXRzID0gbWFwJDIoc3R5bGVzLCBzdHlsZSA9PiBzdHlsZS5mb3JtYXQpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oZWRpdG9yLmZvcm1hdHRlci5jbG9zZXN0KGZvcm1hdHMpKS5iaW5kKGZtdCA9PiBmaW5kJDUoc3R5bGVzLCBkYXRhID0+IGRhdGEuZm9ybWF0ID09PSBmbXQpKS5vclRodW5rKCgpID0+IHNvbWVJZihlZGl0b3IuZm9ybWF0dGVyLm1hdGNoKCdwJyksIHtcbiAgICAgICAgdGl0bGU6ICdQYXJhZ3JhcGgnLFxuICAgICAgICBmb3JtYXQ6ICdwJ1xuICAgICAgfSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRTcGVjJDMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZmFsbGJhY2tGb3JtYXQgPSAnUGFyYWdyYXBoJztcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWRGb3IgPSBmb3JtYXQgPT4gKCkgPT4gZWRpdG9yLmZvcm1hdHRlci5tYXRjaChmb3JtYXQpO1xuICAgICAgY29uc3QgZ2V0UHJldmlld0ZvciA9IGZvcm1hdCA9PiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZtdCA9IGVkaXRvci5mb3JtYXR0ZXIuZ2V0KGZvcm1hdCk7XG4gICAgICAgIGlmIChmbXQpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgICB0YWc6IGZtdC5sZW5ndGggPiAwID8gZm10WzBdLmlubGluZSB8fCBmbXRbMF0uYmxvY2sgfHwgJ2RpdicgOiAnZGl2JyxcbiAgICAgICAgICAgIHN0eWxlczogZWRpdG9yLmRvbS5wYXJzZVN0eWxlKGVkaXRvci5mb3JtYXR0ZXIuZ2V0Q3NzVGV4dChmb3JtYXQpKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCB1cGRhdGVTZWxlY3RNZW51VGV4dCA9IGNvbXAgPT4ge1xuICAgICAgICBjb25zdCBkZXRlY3RlZEZvcm1hdCA9IGZpbmROZWFyZXN0KGVkaXRvciwgKCkgPT4gZGF0YXNldC5kYXRhKTtcbiAgICAgICAgY29uc3QgdGV4dCA9IGRldGVjdGVkRm9ybWF0LmZvbGQoY29uc3RhbnQkMShmYWxsYmFja0Zvcm1hdCksIGZtdCA9PiBmbXQudGl0bGUpO1xuICAgICAgICBlbWl0V2l0aChjb21wLCB1cGRhdGVNZW51VGV4dCwgeyB0ZXh0IH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSBidWlsZEJhc2ljU2V0dGluZ3NEYXRhc2V0KGVkaXRvciwgJ2Jsb2NrX2Zvcm1hdHMnLCBEZWxpbWl0ZXIuU2VtaUNvbG9uKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvb2x0aXA6ICdCbG9ja3MnLFxuICAgICAgICB0ZXh0OiBPcHRpb25hbC5zb21lKGZhbGxiYWNrRm9ybWF0KSxcbiAgICAgICAgaWNvbjogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICBpc1NlbGVjdGVkRm9yLFxuICAgICAgICBnZXRDdXJyZW50VmFsdWU6IE9wdGlvbmFsLm5vbmUsXG4gICAgICAgIGdldFByZXZpZXdGb3IsXG4gICAgICAgIG9uQWN0aW9uOiBvbkFjdGlvblRvZ2dsZUZvcm1hdCQxKGVkaXRvciksXG4gICAgICAgIHVwZGF0ZVRleHQ6IHVwZGF0ZVNlbGVjdE1lbnVUZXh0LFxuICAgICAgICBkYXRhc2V0LFxuICAgICAgICBzaG91bGRIaWRlOiBmYWxzZSxcbiAgICAgICAgaXNJbnZhbGlkOiBpdGVtID0+ICFlZGl0b3IuZm9ybWF0dGVyLmNhbkFwcGx5KGl0ZW0uZm9ybWF0KVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUJsb2Nrc0J1dHRvbiA9IChlZGl0b3IsIGJhY2tzdGFnZSkgPT4gY3JlYXRlU2VsZWN0QnV0dG9uKGVkaXRvciwgYmFja3N0YWdlLCBnZXRTcGVjJDMoZWRpdG9yKSk7XG4gICAgY29uc3QgY3JlYXRlQmxvY2tzTWVudSA9IChlZGl0b3IsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgbWVudUl0ZW1zID0gY3JlYXRlTWVudUl0ZW1zKGVkaXRvciwgYmFja3N0YWdlLCBnZXRTcGVjJDMoZWRpdG9yKSk7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTmVzdGVkTWVudUl0ZW0oJ2Jsb2NrcycsIHtcbiAgICAgICAgdGV4dDogJ0Jsb2NrcycsXG4gICAgICAgIG9uU2V0dXA6IG9uU2V0dXBFZGl0YWJsZVRvZ2dsZShlZGl0b3IpLFxuICAgICAgICBnZXRTdWJtZW51SXRlbXM6ICgpID0+IG1lbnVJdGVtcy5pdGVtcy52YWxpZGF0ZUl0ZW1zKG1lbnVJdGVtcy5nZXRTdHlsZUl0ZW1zKCkpXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3lzdGVtU3RhY2tGb250cyA9IFtcbiAgICAgICctYXBwbGUtc3lzdGVtJyxcbiAgICAgICdTZWdvZSBVSScsXG4gICAgICAnUm9ib3RvJyxcbiAgICAgICdIZWx2ZXRpY2EgTmV1ZScsXG4gICAgICAnc2Fucy1zZXJpZidcbiAgICBdO1xuICAgIGNvbnN0IHNwbGl0Rm9udHMgPSBmb250RmFtaWx5ID0+IHtcbiAgICAgIGNvbnN0IGZvbnRzID0gZm9udEZhbWlseS5zcGxpdCgvXFxzKixcXHMqLyk7XG4gICAgICByZXR1cm4gbWFwJDIoZm9udHMsIGZvbnQgPT4gZm9udC5yZXBsYWNlKC9eWydcIl0rfFsnXCJdKyQvZywgJycpKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzU3lzdGVtRm9udFN0YWNrID0gZm9udEZhbWlseSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGVzU3lzdGVtU3RhY2sgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZvbnRzID0gc3BsaXRGb250cyhmb250RmFtaWx5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICByZXR1cm4gZm9yYWxsKHN5c3RlbVN0YWNrRm9udHMsIGZvbnQgPT4gZm9udHMuaW5kZXhPZihmb250LnRvTG93ZXJDYXNlKCkpID4gLTEpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBmb250RmFtaWx5LmluZGV4T2YoJy1hcHBsZS1zeXN0ZW0nKSA9PT0gMCAmJiBtYXRjaGVzU3lzdGVtU3RhY2soKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNwZWMkMiA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBzeXN0ZW1Gb250ID0gJ1N5c3RlbSBGb250JztcbiAgICAgIGNvbnN0IGdldE1hdGNoaW5nVmFsdWUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGdldEZpcnN0Rm9udCA9IGZvbnRGYW1pbHkgPT4gZm9udEZhbWlseSA/IHNwbGl0Rm9udHMoZm9udEZhbWlseSlbMF0gOiAnJztcbiAgICAgICAgY29uc3QgZm9udEZhbWlseSA9IGVkaXRvci5xdWVyeUNvbW1hbmRWYWx1ZSgnRm9udE5hbWUnKTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBkYXRhc2V0LmRhdGE7XG4gICAgICAgIGNvbnN0IGZvbnQgPSBmb250RmFtaWx5ID8gZm9udEZhbWlseS50b0xvd2VyQ2FzZSgpIDogJyc7XG4gICAgICAgIGNvbnN0IG1hdGNoT3B0ID0gZmluZCQ1KGl0ZW1zLCBpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBmb3JtYXQgPSBpdGVtLmZvcm1hdDtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0LnRvTG93ZXJDYXNlKCkgPT09IGZvbnQgfHwgZ2V0Rmlyc3RGb250KGZvcm1hdCkudG9Mb3dlckNhc2UoKSA9PT0gZ2V0Rmlyc3RGb250KGZvbnQpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH0pLm9yVGh1bmsoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBzb21lSWYoaXNTeXN0ZW1Gb250U3RhY2soZm9udCksIHtcbiAgICAgICAgICAgIHRpdGxlOiBzeXN0ZW1Gb250LFxuICAgICAgICAgICAgZm9ybWF0OiBmb250XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1hdGNoT3B0LFxuICAgICAgICAgIGZvbnQ6IGZvbnRGYW1pbHlcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1NlbGVjdGVkRm9yID0gaXRlbSA9PiB2YWx1ZU9wdCA9PiB2YWx1ZU9wdC5leGlzdHModmFsdWUgPT4gdmFsdWUuZm9ybWF0ID09PSBpdGVtKTtcbiAgICAgIGNvbnN0IGdldEN1cnJlbnRWYWx1ZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qge21hdGNoT3B0fSA9IGdldE1hdGNoaW5nVmFsdWUoKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoT3B0O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldFByZXZpZXdGb3IgPSBpdGVtID0+ICgpID0+IE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICBzdHlsZXM6IGl0ZW0uaW5kZXhPZignZGluZ3MnKSA9PT0gLTEgPyB7ICdmb250LWZhbWlseSc6IGl0ZW0gfSA6IHt9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG9uQWN0aW9uID0gcmF3SXRlbSA9PiAoKSA9PiB7XG4gICAgICAgIGVkaXRvci51bmRvTWFuYWdlci50cmFuc2FjdCgoKSA9PiB7XG4gICAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdGb250TmFtZScsIGZhbHNlLCByYXdJdGVtLmZvcm1hdCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVwZGF0ZVNlbGVjdE1lbnVUZXh0ID0gY29tcCA9PiB7XG4gICAgICAgIGNvbnN0IHttYXRjaE9wdCwgZm9udH0gPSBnZXRNYXRjaGluZ1ZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHRleHQgPSBtYXRjaE9wdC5mb2xkKGNvbnN0YW50JDEoZm9udCksIGl0ZW0gPT4gaXRlbS50aXRsZSk7XG4gICAgICAgIGVtaXRXaXRoKGNvbXAsIHVwZGF0ZU1lbnVUZXh0LCB7IHRleHQgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZGF0YXNldCA9IGJ1aWxkQmFzaWNTZXR0aW5nc0RhdGFzZXQoZWRpdG9yLCAnZm9udF9mYW1pbHlfZm9ybWF0cycsIERlbGltaXRlci5TZW1pQ29sb24pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9vbHRpcDogJ0ZvbnRzJyxcbiAgICAgICAgdGV4dDogT3B0aW9uYWwuc29tZShzeXN0ZW1Gb250KSxcbiAgICAgICAgaWNvbjogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICBpc1NlbGVjdGVkRm9yLFxuICAgICAgICBnZXRDdXJyZW50VmFsdWUsXG4gICAgICAgIGdldFByZXZpZXdGb3IsXG4gICAgICAgIG9uQWN0aW9uLFxuICAgICAgICB1cGRhdGVUZXh0OiB1cGRhdGVTZWxlY3RNZW51VGV4dCxcbiAgICAgICAgZGF0YXNldCxcbiAgICAgICAgc2hvdWxkSGlkZTogZmFsc2UsXG4gICAgICAgIGlzSW52YWxpZDogbmV2ZXJcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVGb250RmFtaWx5QnV0dG9uID0gKGVkaXRvciwgYmFja3N0YWdlKSA9PiBjcmVhdGVTZWxlY3RCdXR0b24oZWRpdG9yLCBiYWNrc3RhZ2UsIGdldFNwZWMkMihlZGl0b3IpKTtcbiAgICBjb25zdCBjcmVhdGVGb250RmFtaWx5TWVudSA9IChlZGl0b3IsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgbWVudUl0ZW1zID0gY3JlYXRlTWVudUl0ZW1zKGVkaXRvciwgYmFja3N0YWdlLCBnZXRTcGVjJDIoZWRpdG9yKSk7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTmVzdGVkTWVudUl0ZW0oJ2ZvbnRmYW1pbHknLCB7XG4gICAgICAgIHRleHQ6IGJhY2tzdGFnZS5zaGFyZWQucHJvdmlkZXJzLnRyYW5zbGF0ZSgnRm9udHMnKSxcbiAgICAgICAgb25TZXR1cDogb25TZXR1cEVkaXRhYmxlVG9nZ2xlKGVkaXRvciksXG4gICAgICAgIGdldFN1Ym1lbnVJdGVtczogKCkgPT4gbWVudUl0ZW1zLml0ZW1zLnZhbGlkYXRlSXRlbXMobWVudUl0ZW1zLmdldFN0eWxlSXRlbXMoKSlcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCB1bml0cyA9IHtcbiAgICAgIHVuc3VwcG9ydGVkTGVuZ3RoOiBbXG4gICAgICAgICdlbScsXG4gICAgICAgICdleCcsXG4gICAgICAgICdjYXAnLFxuICAgICAgICAnY2gnLFxuICAgICAgICAnaWMnLFxuICAgICAgICAncmVtJyxcbiAgICAgICAgJ2xoJyxcbiAgICAgICAgJ3JsaCcsXG4gICAgICAgICd2dycsXG4gICAgICAgICd2aCcsXG4gICAgICAgICd2aScsXG4gICAgICAgICd2YicsXG4gICAgICAgICd2bWluJyxcbiAgICAgICAgJ3ZtYXgnLFxuICAgICAgICAnY20nLFxuICAgICAgICAnbW0nLFxuICAgICAgICAnUScsXG4gICAgICAgICdpbicsXG4gICAgICAgICdwYycsXG4gICAgICAgICdwdCcsXG4gICAgICAgICdweCdcbiAgICAgIF0sXG4gICAgICBmaXhlZDogW1xuICAgICAgICAncHgnLFxuICAgICAgICAncHQnXG4gICAgICBdLFxuICAgICAgcmVsYXRpdmU6IFsnJSddLFxuICAgICAgZW1wdHk6IFsnJ11cbiAgICB9O1xuICAgIGNvbnN0IHBhdHRlcm4gPSAoKCkgPT4ge1xuICAgICAgY29uc3QgZGVjaW1hbERpZ2l0cyA9ICdbMC05XSsnO1xuICAgICAgY29uc3Qgc2lnbmVkSW50ZWdlciA9ICdbKy1dPycgKyBkZWNpbWFsRGlnaXRzO1xuICAgICAgY29uc3QgZXhwb25lbnRQYXJ0ID0gJ1tlRV0nICsgc2lnbmVkSW50ZWdlcjtcbiAgICAgIGNvbnN0IGRvdCA9ICdcXFxcLic7XG4gICAgICBjb25zdCBvcHQgPSBpbnB1dCA9PiBgKD86JHsgaW5wdXQgfSk/YDtcbiAgICAgIGNvbnN0IHVuc2lnbmVkRGVjaW1hbExpdGVyYWwgPSBbXG4gICAgICAgICdJbmZpbml0eScsXG4gICAgICAgIGRlY2ltYWxEaWdpdHMgKyBkb3QgKyBvcHQoZGVjaW1hbERpZ2l0cykgKyBvcHQoZXhwb25lbnRQYXJ0KSxcbiAgICAgICAgZG90ICsgZGVjaW1hbERpZ2l0cyArIG9wdChleHBvbmVudFBhcnQpLFxuICAgICAgICBkZWNpbWFsRGlnaXRzICsgb3B0KGV4cG9uZW50UGFydClcbiAgICAgIF0uam9pbignfCcpO1xuICAgICAgY29uc3QgZmxvYXQgPSBgWystXT8oPzokeyB1bnNpZ25lZERlY2ltYWxMaXRlcmFsIH0pYDtcbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKGBeKCR7IGZsb2F0IH0pKC4qKSRgKTtcbiAgICB9KSgpO1xuICAgIGNvbnN0IGlzVW5pdCA9ICh1bml0LCBhY2NlcHRlZCkgPT4gZXhpc3RzKGFjY2VwdGVkLCBhY2MgPT4gZXhpc3RzKHVuaXRzW2FjY10sIGNoZWNrID0+IHVuaXQgPT09IGNoZWNrKSk7XG4gICAgY29uc3QgcGFyc2UgPSAoaW5wdXQsIGFjY2VwdGVkKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaCA9IE9wdGlvbmFsLmZyb20ocGF0dGVybi5leGVjKGlucHV0KSk7XG4gICAgICByZXR1cm4gbWF0Y2guYmluZChhcnJheSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gTnVtYmVyKGFycmF5WzFdKTtcbiAgICAgICAgY29uc3QgdW5pdFJhdyA9IGFycmF5WzJdO1xuICAgICAgICBpZiAoaXNVbml0KHVuaXRSYXcsIGFjY2VwdGVkKSkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdW5pdDogdW5pdFJhd1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXNlID0gKGlucHV0LCBhY2NlcHRlZCkgPT4gcGFyc2UoaW5wdXQsIGFjY2VwdGVkKS5tYXAoKHt2YWx1ZSwgdW5pdH0pID0+IHZhbHVlICsgdW5pdCk7XG5cbiAgICBjb25zdCBLZXlzID0ge1xuICAgICAgdGFiOiBjb25zdGFudCQxKDkpLFxuICAgICAgZXNjYXBlOiBjb25zdGFudCQxKDI3KSxcbiAgICAgIGVudGVyOiBjb25zdGFudCQxKDEzKSxcbiAgICAgIGJhY2tzcGFjZTogY29uc3RhbnQkMSg4KSxcbiAgICAgIGRlbGV0ZTogY29uc3RhbnQkMSg0NiksXG4gICAgICBsZWZ0OiBjb25zdGFudCQxKDM3KSxcbiAgICAgIHVwOiBjb25zdGFudCQxKDM4KSxcbiAgICAgIHJpZ2h0OiBjb25zdGFudCQxKDM5KSxcbiAgICAgIGRvd246IGNvbnN0YW50JDEoNDApLFxuICAgICAgc3BhY2U6IGNvbnN0YW50JDEoMzIpLFxuICAgICAgaG9tZTogY29uc3RhbnQkMSgzNiksXG4gICAgICBlbmQ6IGNvbnN0YW50JDEoMzUpLFxuICAgICAgcGFnZVVwOiBjb25zdGFudCQxKDMzKSxcbiAgICAgIHBhZ2VEb3duOiBjb25zdGFudCQxKDM0KVxuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGVCZXNwb2tlTnVtYmVySW5wdXQgPSAoZWRpdG9yLCBiYWNrc3RhZ2UsIHNwZWMpID0+IHtcbiAgICAgIGxldCBjdXJyZW50Q29tcCA9IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIGNvbnN0IGdldFZhbHVlRnJvbUN1cnJlbnRDb21wID0gY29tcCA9PiBjb21wLm1hcChhbGxveUNvbXAgPT4gUmVwcmVzZW50aW5nLmdldFZhbHVlKGFsbG95Q29tcCkpLmdldE9yKCcnKTtcbiAgICAgIGNvbnN0IG9uU2V0dXAgPSBvblNldHVwRXZlbnQoZWRpdG9yLCAnTm9kZUNoYW5nZSBTd2l0Y2hNb2RlJywgYXBpID0+IHtcbiAgICAgICAgY29uc3QgY29tcCA9IGFwaS5nZXRDb21wb25lbnQoKTtcbiAgICAgICAgY3VycmVudENvbXAgPSBPcHRpb25hbC5zb21lKGNvbXApO1xuICAgICAgICBzcGVjLnVwZGF0ZUlucHV0VmFsdWUoY29tcCk7XG4gICAgICAgIERpc2FibGluZy5zZXQoY29tcCwgIWVkaXRvci5zZWxlY3Rpb24uaXNFZGl0YWJsZSgpKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZ2V0QXBpID0gY29tcCA9PiAoeyBnZXRDb21wb25lbnQ6IGNvbnN0YW50JDEoY29tcCkgfSk7XG4gICAgICBjb25zdCBlZGl0b3JPZmZDZWxsID0gQ2VsbChub29wKTtcbiAgICAgIGNvbnN0IGN1c3RvbUV2ZW50cyA9IGdlbmVyYXRlJDYoJ2N1c3RvbS1udW1iZXItaW5wdXQtZXZlbnRzJyk7XG4gICAgICBjb25zdCBjaGFuZ2VWYWx1ZSA9IChmLCBmcm9tSW5wdXQsIGZvY3VzQmFjaykgPT4ge1xuICAgICAgICBjb25zdCB0ZXh0ID0gZ2V0VmFsdWVGcm9tQ3VycmVudENvbXAoY3VycmVudENvbXApO1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHNwZWMuZ2V0TmV3VmFsdWUodGV4dCwgZik7XG4gICAgICAgIGNvbnN0IGxlbmdodERlbHRhID0gdGV4dC5sZW5ndGggLSBgJHsgbmV3VmFsdWUgfWAubGVuZ3RoO1xuICAgICAgICBjb25zdCBvbGRTdGFydCA9IGN1cnJlbnRDb21wLm1hcChjb21wID0+IGNvbXAuZWxlbWVudC5kb20uc2VsZWN0aW9uU3RhcnQgLSBsZW5naHREZWx0YSk7XG4gICAgICAgIGNvbnN0IG9sZEVuZCA9IGN1cnJlbnRDb21wLm1hcChjb21wID0+IGNvbXAuZWxlbWVudC5kb20uc2VsZWN0aW9uRW5kIC0gbGVuZ2h0RGVsdGEpO1xuICAgICAgICBzcGVjLm9uQWN0aW9uKG5ld1ZhbHVlLCBmb2N1c0JhY2spO1xuICAgICAgICBjdXJyZW50Q29tcC5lYWNoKGNvbXAgPT4ge1xuICAgICAgICAgIFJlcHJlc2VudGluZy5zZXRWYWx1ZShjb21wLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgaWYgKGZyb21JbnB1dCkge1xuICAgICAgICAgICAgb2xkU3RhcnQuZWFjaChvbGRTdGFydCA9PiBjb21wLmVsZW1lbnQuZG9tLnNlbGVjdGlvblN0YXJ0ID0gb2xkU3RhcnQpO1xuICAgICAgICAgICAgb2xkRW5kLmVhY2gob2xkRW5kID0+IGNvbXAuZWxlbWVudC5kb20uc2VsZWN0aW9uRW5kID0gb2xkRW5kKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRlY3JlYXNlID0gKGZyb21JbnB1dCwgZm9jdXNCYWNrKSA9PiBjaGFuZ2VWYWx1ZSgobiwgcykgPT4gbiAtIHMsIGZyb21JbnB1dCwgZm9jdXNCYWNrKTtcbiAgICAgIGNvbnN0IGluY3JlYXNlID0gKGZyb21JbnB1dCwgZm9jdXNCYWNrKSA9PiBjaGFuZ2VWYWx1ZSgobiwgcykgPT4gbiArIHMsIGZyb21JbnB1dCwgZm9jdXNCYWNrKTtcbiAgICAgIGNvbnN0IGdvVG9QYXJlbnQgPSBjb21wID0+IHBhcmVudEVsZW1lbnQoY29tcC5lbGVtZW50KS5mb2xkKE9wdGlvbmFsLm5vbmUsIHBhcmVudCA9PiB7XG4gICAgICAgIGZvY3VzJDMocGFyZW50KTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZvY3VzSW5wdXQgPSBjb21wID0+IHtcbiAgICAgICAgaWYgKGhhc0ZvY3VzKGNvbXAuZWxlbWVudCkpIHtcbiAgICAgICAgICBmaXJzdENoaWxkKGNvbXAuZWxlbWVudCkuZWFjaChpbnB1dCA9PiBmb2N1cyQzKGlucHV0KSk7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG1ha2VTdGVwcGVyQnV0dG9uID0gKGFjdGlvbiwgdGl0bGUsIHRvb2x0aXAsIGNsYXNzZXMpID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlZFRvb2x0aXAgPSBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycy50cmFuc2xhdGUodG9vbHRpcCk7XG4gICAgICAgIGNvbnN0IGFsdEV4ZWN1dGluZyA9IGdlbmVyYXRlJDYoJ2FsdEV4ZWN1dGluZycpO1xuICAgICAgICBjb25zdCBvblNldHVwID0gb25TZXR1cEV2ZW50KGVkaXRvciwgJ05vZGVDaGFuZ2UgU3dpdGNoTW9kZScsIGFwaSA9PiB7XG4gICAgICAgICAgRGlzYWJsaW5nLnNldChhcGkuZ2V0Q29tcG9uZW50KCksICFlZGl0b3Iuc2VsZWN0aW9uLmlzRWRpdGFibGUoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBvbkNsaWNrID0gY29tcCA9PiB7XG4gICAgICAgICAgaWYgKCFEaXNhYmxpbmcuaXNEaXNhYmxlZChjb21wKSkge1xuICAgICAgICAgICAgYWN0aW9uKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIEJ1dHRvbi5za2V0Y2goe1xuICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgdGFnOiAnYnV0dG9uJyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgJ3RpdGxlJzogdHJhbnNsYXRlZFRvb2x0aXAsXG4gICAgICAgICAgICAgICdhcmlhLWxhYmVsJzogdHJhbnNsYXRlZFRvb2x0aXBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGFzc2VzOiBjbGFzc2VzLmNvbmNhdCh0aXRsZSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbXBvbmVudHM6IFtyZW5kZXJJY29uRnJvbVBhY2skMSh0aXRsZSwgYmFja3N0YWdlLnNoYXJlZC5wcm92aWRlcnMuaWNvbnMpXSxcbiAgICAgICAgICBidXR0b25CZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgICBEaXNhYmxpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICAgIGNvbmZpZyhhbHRFeGVjdXRpbmcsIFtcbiAgICAgICAgICAgICAgb25Db250cm9sQXR0YWNoZWQoe1xuICAgICAgICAgICAgICAgIG9uU2V0dXAsXG4gICAgICAgICAgICAgICAgZ2V0QXBpXG4gICAgICAgICAgICAgIH0sIGVkaXRvck9mZkNlbGwpLFxuICAgICAgICAgICAgICBvbkNvbnRyb2xEZXRhY2hlZCh7IGdldEFwaSB9LCBlZGl0b3JPZmZDZWxsKSxcbiAgICAgICAgICAgICAgcnVuJDEoa2V5ZG93bigpLCAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc2UuZXZlbnQucmF3LmtleUNvZGUgPT09IEtleXMuc3BhY2UoKSB8fCBzZS5ldmVudC5yYXcua2V5Q29kZSA9PT0gS2V5cy5lbnRlcigpKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoIURpc2FibGluZy5pc0Rpc2FibGVkKGNvbXApKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgcnVuJDEoY2xpY2soKSwgb25DbGljayksXG4gICAgICAgICAgICAgIHJ1biQxKHRvdWNoZW5kKCksIG9uQ2xpY2spXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIGV2ZW50T3JkZXI6IHtcbiAgICAgICAgICAgIFtrZXlkb3duKCldOiBbXG4gICAgICAgICAgICAgIGFsdEV4ZWN1dGluZyxcbiAgICAgICAgICAgICAgJ2tleWluZydcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbY2xpY2soKV06IFtcbiAgICAgICAgICAgICAgYWx0RXhlY3V0aW5nLFxuICAgICAgICAgICAgICAnYWxsb3kuYmFzZS5iZWhhdmlvdXInXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW3RvdWNoZW5kKCldOiBbXG4gICAgICAgICAgICAgIGFsdEV4ZWN1dGluZyxcbiAgICAgICAgICAgICAgJ2FsbG95LmJhc2UuYmVoYXZpb3VyJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgbWVtTWludXMgPSByZWNvcmQobWFrZVN0ZXBwZXJCdXR0b24oZm9jdXNCYWNrID0+IGRlY3JlYXNlKGZhbHNlLCBmb2N1c0JhY2spLCAnbWludXMnLCAnRGVjcmVhc2UgZm9udCBzaXplJywgWydoaWdobGlnaHQtb24tZm9jdXMnXSkpO1xuICAgICAgY29uc3QgbWVtUGx1cyA9IHJlY29yZChtYWtlU3RlcHBlckJ1dHRvbihmb2N1c0JhY2sgPT4gaW5jcmVhc2UoZmFsc2UsIGZvY3VzQmFjayksICdwbHVzJywgJ0luY3JlYXNlIGZvbnQgc2l6ZScsIFsnaGlnaGxpZ2h0LW9uLWZvY3VzJ10pKTtcbiAgICAgIGNvbnN0IG1lbUlucHV0ID0gcmVjb3JkKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbXG4gICAgICAgICAgICAndG94LWlucHV0LXdyYXBwZXInLFxuICAgICAgICAgICAgJ2hpZ2hsaWdodC1vbi1mb2N1cydcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtJbnB1dC5za2V0Y2goe1xuICAgICAgICAgICAgaW5wdXRCZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgICAgIERpc2FibGluZy5jb25maWcoe30pLFxuICAgICAgICAgICAgICBjb25maWcoY3VzdG9tRXZlbnRzLCBbXG4gICAgICAgICAgICAgICAgb25Db250cm9sQXR0YWNoZWQoe1xuICAgICAgICAgICAgICAgICAgb25TZXR1cCxcbiAgICAgICAgICAgICAgICAgIGdldEFwaVxuICAgICAgICAgICAgICAgIH0sIGVkaXRvck9mZkNlbGwpLFxuICAgICAgICAgICAgICAgIG9uQ29udHJvbERldGFjaGVkKHsgZ2V0QXBpIH0sIGVkaXRvck9mZkNlbGwpXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBjb25maWcoJ2lucHV0LXVwZGF0ZS1kaXNwbGF5LXRleHQnLCBbXG4gICAgICAgICAgICAgICAgcnVuJDEodXBkYXRlTWVudVRleHQsIChjb21wLCBzZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgUmVwcmVzZW50aW5nLnNldFZhbHVlKGNvbXAsIHNlLmV2ZW50LnRleHQpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHJ1biQxKGZvY3Vzb3V0KCksIGNvbXAgPT4ge1xuICAgICAgICAgICAgICAgICAgc3BlYy5vbkFjdGlvbihSZXByZXNlbnRpbmcuZ2V0VmFsdWUoY29tcCkpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHJ1biQxKGNoYW5nZSgpLCBjb21wID0+IHtcbiAgICAgICAgICAgICAgICAgIHNwZWMub25BY3Rpb24oUmVwcmVzZW50aW5nLmdldFZhbHVlKGNvbXApKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICAgICAgbW9kZTogJ3NwZWNpYWwnLFxuICAgICAgICAgICAgICAgIG9uRW50ZXI6IF9jb21wID0+IHtcbiAgICAgICAgICAgICAgICAgIGNoYW5nZVZhbHVlKGlkZW50aXR5LCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHRydWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25Fc2NhcGU6IGdvVG9QYXJlbnQsXG4gICAgICAgICAgICAgICAgb25VcDogX2NvbXAgPT4ge1xuICAgICAgICAgICAgICAgICAgaW5jcmVhc2UodHJ1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbkRvd246IF9jb21wID0+IHtcbiAgICAgICAgICAgICAgICAgIGRlY3JlYXNlKHRydWUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHRydWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25MZWZ0OiAoX2NvbXAsIHNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZS5jdXQoKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvblJpZ2h0OiAoX2NvbXAsIHNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZS5jdXQoKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICB9KV0sXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBGb2N1c2luZy5jb25maWcoe30pLFxuICAgICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgICAgbW9kZTogJ3NwZWNpYWwnLFxuICAgICAgICAgICAgb25FbnRlcjogZm9jdXNJbnB1dCxcbiAgICAgICAgICAgIG9uU3BhY2U6IGZvY3VzSW5wdXQsXG4gICAgICAgICAgICBvbkVzY2FwZTogZ29Ub1BhcmVudFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNvbmZpZygnaW5wdXQtd3JhcHBlci1ldmVudHMnLCBbcnVuJDEobW91c2VvdmVyKCksIGNvbXAgPT4ge1xuICAgICAgICAgICAgICBlYWNoJDEoW1xuICAgICAgICAgICAgICAgIG1lbU1pbnVzLFxuICAgICAgICAgICAgICAgIG1lbVBsdXNcbiAgICAgICAgICAgICAgXSwgYnV0dG9uID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBidXR0b25Ob2RlID0gU3VnYXJFbGVtZW50LmZyb21Eb20oYnV0dG9uLmdldChjb21wKS5lbGVtZW50LmRvbSk7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0ZvY3VzKGJ1dHRvbk5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICBibHVyJDEoYnV0dG9uTm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXSlcbiAgICAgICAgXSlcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1udW1iZXItaW5wdXQnXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgbWVtTWludXMuYXNTcGVjKCksXG4gICAgICAgICAgbWVtSW5wdXQuYXNTcGVjKCksXG4gICAgICAgICAgbWVtUGx1cy5hc1NwZWMoKVxuICAgICAgICBdLFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgRm9jdXNpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICBLZXlpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIG1vZGU6ICdmbG93JyxcbiAgICAgICAgICAgIGZvY3VzSW5zaWRlOiBGb2N1c0luc2lkZU1vZGVzLk9uRW50ZXJPclNwYWNlTW9kZSxcbiAgICAgICAgICAgIGN5Y2xlczogZmFsc2UsXG4gICAgICAgICAgICBzZWxlY3RvcjogJ2J1dHRvbiwgLnRveC1pbnB1dC13cmFwcGVyJyxcbiAgICAgICAgICAgIG9uRXNjYXBlOiB3cmFwcGVyQ29tcCA9PiB7XG4gICAgICAgICAgICAgIGlmIChoYXNGb2N1cyh3cmFwcGVyQ29tcC5lbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9jdXMkMyh3cmFwcGVyQ29tcC5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBsZWdhY3lGb250U2l6ZXMgPSB7XG4gICAgICAnOHB0JzogJzEnLFxuICAgICAgJzEwcHQnOiAnMicsXG4gICAgICAnMTJwdCc6ICczJyxcbiAgICAgICcxNHB0JzogJzQnLFxuICAgICAgJzE4cHQnOiAnNScsXG4gICAgICAnMjRwdCc6ICc2JyxcbiAgICAgICczNnB0JzogJzcnXG4gICAgfTtcbiAgICBjb25zdCBrZXl3b3JkRm9udFNpemVzID0ge1xuICAgICAgJ3h4LXNtYWxsJzogJzdwdCcsXG4gICAgICAneC1zbWFsbCc6ICc4cHQnLFxuICAgICAgJ3NtYWxsJzogJzEwcHQnLFxuICAgICAgJ21lZGl1bSc6ICcxMnB0JyxcbiAgICAgICdsYXJnZSc6ICcxNHB0JyxcbiAgICAgICd4LWxhcmdlJzogJzE4cHQnLFxuICAgICAgJ3h4LWxhcmdlJzogJzI0cHQnXG4gICAgfTtcbiAgICBjb25zdCByb3VuZCA9IChudW1iZXIsIHByZWNpc2lvbikgPT4ge1xuICAgICAgY29uc3QgZmFjdG9yID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbik7XG4gICAgICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIgKiBmYWN0b3IpIC8gZmFjdG9yO1xuICAgIH07XG4gICAgY29uc3QgdG9QdCA9IChmb250U2l6ZSwgcHJlY2lzaW9uKSA9PiB7XG4gICAgICBpZiAoL1swLTkuXStweCQvLnRlc3QoZm9udFNpemUpKSB7XG4gICAgICAgIHJldHVybiByb3VuZChwYXJzZUludChmb250U2l6ZSwgMTApICogNzIgLyA5NiwgcHJlY2lzaW9uIHx8IDApICsgJ3B0JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBnZXQkZyhrZXl3b3JkRm9udFNpemVzLCBmb250U2l6ZSkuZ2V0T3IoZm9udFNpemUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdG9MZWdhY3kgPSBmb250U2l6ZSA9PiBnZXQkZyhsZWdhY3lGb250U2l6ZXMsIGZvbnRTaXplKS5nZXRPcignJyk7XG4gICAgY29uc3QgZ2V0U3BlYyQxID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGdldE1hdGNoaW5nVmFsdWUgPSAoKSA9PiB7XG4gICAgICAgIGxldCBtYXRjaE9wdCA9IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBkYXRhc2V0LmRhdGE7XG4gICAgICAgIGNvbnN0IGZvbnRTaXplID0gZWRpdG9yLnF1ZXJ5Q29tbWFuZFZhbHVlKCdGb250U2l6ZScpO1xuICAgICAgICBpZiAoZm9udFNpemUpIHtcbiAgICAgICAgICBmb3IgKGxldCBwcmVjaXNpb24gPSAzOyBtYXRjaE9wdC5pc05vbmUoKSAmJiBwcmVjaXNpb24gPj0gMDsgcHJlY2lzaW9uLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHB0ID0gdG9QdChmb250U2l6ZSwgcHJlY2lzaW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGxlZ2FjeSA9IHRvTGVnYWN5KHB0KTtcbiAgICAgICAgICAgIG1hdGNoT3B0ID0gZmluZCQ1KGl0ZW1zLCBpdGVtID0+IGl0ZW0uZm9ybWF0ID09PSBmb250U2l6ZSB8fCBpdGVtLmZvcm1hdCA9PT0gcHQgfHwgaXRlbS5mb3JtYXQgPT09IGxlZ2FjeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWF0Y2hPcHQsXG4gICAgICAgICAgc2l6ZTogZm9udFNpemVcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1NlbGVjdGVkRm9yID0gaXRlbSA9PiB2YWx1ZU9wdCA9PiB2YWx1ZU9wdC5leGlzdHModmFsdWUgPT4gdmFsdWUuZm9ybWF0ID09PSBpdGVtKTtcbiAgICAgIGNvbnN0IGdldEN1cnJlbnRWYWx1ZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qge21hdGNoT3B0fSA9IGdldE1hdGNoaW5nVmFsdWUoKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoT3B0O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldFByZXZpZXdGb3IgPSBjb25zdGFudCQxKE9wdGlvbmFsLm5vbmUpO1xuICAgICAgY29uc3Qgb25BY3Rpb24gPSByYXdJdGVtID0+ICgpID0+IHtcbiAgICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ0ZvbnRTaXplJywgZmFsc2UsIHJhd0l0ZW0uZm9ybWF0KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdXBkYXRlU2VsZWN0TWVudVRleHQgPSBjb21wID0+IHtcbiAgICAgICAgY29uc3Qge21hdGNoT3B0LCBzaXplfSA9IGdldE1hdGNoaW5nVmFsdWUoKTtcbiAgICAgICAgY29uc3QgdGV4dCA9IG1hdGNoT3B0LmZvbGQoY29uc3RhbnQkMShzaXplKSwgbWF0Y2ggPT4gbWF0Y2gudGl0bGUpO1xuICAgICAgICBlbWl0V2l0aChjb21wLCB1cGRhdGVNZW51VGV4dCwgeyB0ZXh0IH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSBidWlsZEJhc2ljU2V0dGluZ3NEYXRhc2V0KGVkaXRvciwgJ2ZvbnRfc2l6ZV9mb3JtYXRzJywgRGVsaW1pdGVyLlNwYWNlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvb2x0aXA6ICdGb250IHNpemVzJyxcbiAgICAgICAgdGV4dDogT3B0aW9uYWwuc29tZSgnMTJwdCcpLFxuICAgICAgICBpY29uOiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGlzU2VsZWN0ZWRGb3IsXG4gICAgICAgIGdldFByZXZpZXdGb3IsXG4gICAgICAgIGdldEN1cnJlbnRWYWx1ZSxcbiAgICAgICAgb25BY3Rpb24sXG4gICAgICAgIHVwZGF0ZVRleHQ6IHVwZGF0ZVNlbGVjdE1lbnVUZXh0LFxuICAgICAgICBkYXRhc2V0LFxuICAgICAgICBzaG91bGRIaWRlOiBmYWxzZSxcbiAgICAgICAgaXNJbnZhbGlkOiBuZXZlclxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUZvbnRTaXplQnV0dG9uID0gKGVkaXRvciwgYmFja3N0YWdlKSA9PiBjcmVhdGVTZWxlY3RCdXR0b24oZWRpdG9yLCBiYWNrc3RhZ2UsIGdldFNwZWMkMShlZGl0b3IpKTtcbiAgICBjb25zdCBnZXRDb25maWdGcm9tVW5pdCA9IHVuaXQgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgYmFzZUNvbmZpZyA9IHsgc3RlcDogMSB9O1xuICAgICAgY29uc3QgY29uZmlncyA9IHtcbiAgICAgICAgZW06IHsgc3RlcDogMC4xIH0sXG4gICAgICAgIGNtOiB7IHN0ZXA6IDAuMSB9LFxuICAgICAgICBpbjogeyBzdGVwOiAwLjEgfSxcbiAgICAgICAgcGM6IHsgc3RlcDogMC4xIH0sXG4gICAgICAgIGNoOiB7IHN0ZXA6IDAuMSB9LFxuICAgICAgICByZW06IHsgc3RlcDogMC4xIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gKF9hID0gY29uZmlnc1t1bml0XSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogYmFzZUNvbmZpZztcbiAgICB9O1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IDE2O1xuICAgIGNvbnN0IGlzVmFsaWRWYWx1ZSA9IHZhbHVlID0+IHZhbHVlID49IDA7XG4gICAgY29uc3QgZ2V0TnVtYmVySW5wdXRTcGVjID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGdldEN1cnJlbnRWYWx1ZSA9ICgpID0+IGVkaXRvci5xdWVyeUNvbW1hbmRWYWx1ZSgnRm9udFNpemUnKTtcbiAgICAgIGNvbnN0IHVwZGF0ZUlucHV0VmFsdWUgPSBjb21wID0+IGVtaXRXaXRoKGNvbXAsIHVwZGF0ZU1lbnVUZXh0LCB7IHRleHQ6IGdldEN1cnJlbnRWYWx1ZSgpIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdXBkYXRlSW5wdXRWYWx1ZSxcbiAgICAgICAgb25BY3Rpb246IChmb3JtYXQsIGZvY3VzQmFjaykgPT4gZWRpdG9yLmV4ZWNDb21tYW5kKCdGb250U2l6ZScsIGZhbHNlLCBmb3JtYXQsIHsgc2tpcF9mb2N1czogIWZvY3VzQmFjayB9KSxcbiAgICAgICAgZ2V0TmV3VmFsdWU6ICh0ZXh0LCB1cGRhdGVGdW5jdGlvbikgPT4ge1xuICAgICAgICAgIHBhcnNlKHRleHQsIFtcbiAgICAgICAgICAgICd1bnN1cHBvcnRlZExlbmd0aCcsXG4gICAgICAgICAgICAnZW1wdHknXG4gICAgICAgICAgXSk7XG4gICAgICAgICAgY29uc3QgcGFyc2VkVGV4dCA9IHBhcnNlKHRleHQsIFtcbiAgICAgICAgICAgICd1bnN1cHBvcnRlZExlbmd0aCcsXG4gICAgICAgICAgICAnZW1wdHknXG4gICAgICAgICAgXSkub3IocGFyc2UoZ2V0Q3VycmVudFZhbHVlKCksIFtcbiAgICAgICAgICAgICd1bnN1cHBvcnRlZExlbmd0aCcsXG4gICAgICAgICAgICAnZW1wdHknXG4gICAgICAgICAgXSkpO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VkVGV4dC5tYXAocmVzID0+IHJlcy52YWx1ZSkuZ2V0T3IoZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICBjb25zdCBkZWZhdWx0VW5pdCA9IGdldEZvbnRTaXplSW5wdXREZWZhdWx0VW5pdChlZGl0b3IpO1xuICAgICAgICAgIGNvbnN0IHVuaXQgPSBwYXJzZWRUZXh0Lm1hcChyZXMgPT4gcmVzLnVuaXQpLmZpbHRlcih1ID0+IHUgIT09ICcnKS5nZXRPcihkZWZhdWx0VW5pdCk7XG4gICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB1cGRhdGVGdW5jdGlvbih2YWx1ZSwgZ2V0Q29uZmlnRnJvbVVuaXQodW5pdCkuc3RlcCk7XG4gICAgICAgICAgcmV0dXJuIGAkeyBpc1ZhbGlkVmFsdWUobmV3VmFsdWUpID8gbmV3VmFsdWUgOiB2YWx1ZSB9JHsgdW5pdCB9YDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUZvbnRTaXplSW5wdXRCdXR0b24gPSAoZWRpdG9yLCBiYWNrc3RhZ2UpID0+IGNyZWF0ZUJlc3Bva2VOdW1iZXJJbnB1dChlZGl0b3IsIGJhY2tzdGFnZSwgZ2V0TnVtYmVySW5wdXRTcGVjKGVkaXRvcikpO1xuICAgIGNvbnN0IGNyZWF0ZUZvbnRTaXplTWVudSA9IChlZGl0b3IsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgbWVudUl0ZW1zID0gY3JlYXRlTWVudUl0ZW1zKGVkaXRvciwgYmFja3N0YWdlLCBnZXRTcGVjJDEoZWRpdG9yKSk7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTmVzdGVkTWVudUl0ZW0oJ2ZvbnRzaXplJywge1xuICAgICAgICB0ZXh0OiAnRm9udCBzaXplcycsXG4gICAgICAgIG9uU2V0dXA6IG9uU2V0dXBFZGl0YWJsZVRvZ2dsZShlZGl0b3IpLFxuICAgICAgICBnZXRTdWJtZW51SXRlbXM6ICgpID0+IG1lbnVJdGVtcy5pdGVtcy52YWxpZGF0ZUl0ZW1zKG1lbnVJdGVtcy5nZXRTdHlsZUl0ZW1zKCkpXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0U3BlYyA9IChlZGl0b3IsIGRhdGFzZXQpID0+IHtcbiAgICAgIGNvbnN0IGZhbGxiYWNrRm9ybWF0ID0gJ1BhcmFncmFwaCc7XG4gICAgICBjb25zdCBpc1NlbGVjdGVkRm9yID0gZm9ybWF0ID0+ICgpID0+IGVkaXRvci5mb3JtYXR0ZXIubWF0Y2goZm9ybWF0KTtcbiAgICAgIGNvbnN0IGdldFByZXZpZXdGb3IgPSBmb3JtYXQgPT4gKCkgPT4ge1xuICAgICAgICBjb25zdCBmbXQgPSBlZGl0b3IuZm9ybWF0dGVyLmdldChmb3JtYXQpO1xuICAgICAgICByZXR1cm4gZm10ICE9PSB1bmRlZmluZWQgPyBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICB0YWc6IGZtdC5sZW5ndGggPiAwID8gZm10WzBdLmlubGluZSB8fCBmbXRbMF0uYmxvY2sgfHwgJ2RpdicgOiAnZGl2JyxcbiAgICAgICAgICBzdHlsZXM6IGVkaXRvci5kb20ucGFyc2VTdHlsZShlZGl0b3IuZm9ybWF0dGVyLmdldENzc1RleHQoZm9ybWF0KSlcbiAgICAgICAgfSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdXBkYXRlU2VsZWN0TWVudVRleHQgPSBjb21wID0+IHtcbiAgICAgICAgY29uc3QgZ2V0Rm9ybWF0SXRlbXMgPSBmbXQgPT4ge1xuICAgICAgICAgIGlmIChpc05lc3RlZEZvcm1hdChmbXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gYmluZCQzKGZtdC5pdGVtcywgZ2V0Rm9ybWF0SXRlbXMpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNGb3JtYXRSZWZlcmVuY2UoZm10KSkge1xuICAgICAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgICAgICAgdGl0bGU6IGZtdC50aXRsZSxcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IGZtdC5mb3JtYXRcbiAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZsYXR0ZW5lZEl0ZW1zID0gYmluZCQzKGdldFN0eWxlRm9ybWF0cyhlZGl0b3IpLCBnZXRGb3JtYXRJdGVtcyk7XG4gICAgICAgIGNvbnN0IGRldGVjdGVkRm9ybWF0ID0gZmluZE5lYXJlc3QoZWRpdG9yLCBjb25zdGFudCQxKGZsYXR0ZW5lZEl0ZW1zKSk7XG4gICAgICAgIGNvbnN0IHRleHQgPSBkZXRlY3RlZEZvcm1hdC5mb2xkKGNvbnN0YW50JDEoZmFsbGJhY2tGb3JtYXQpLCBmbXQgPT4gZm10LnRpdGxlKTtcbiAgICAgICAgZW1pdFdpdGgoY29tcCwgdXBkYXRlTWVudVRleHQsIHsgdGV4dCB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b29sdGlwOiAnRm9ybWF0cycsXG4gICAgICAgIHRleHQ6IE9wdGlvbmFsLnNvbWUoZmFsbGJhY2tGb3JtYXQpLFxuICAgICAgICBpY29uOiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGlzU2VsZWN0ZWRGb3IsXG4gICAgICAgIGdldEN1cnJlbnRWYWx1ZTogT3B0aW9uYWwubm9uZSxcbiAgICAgICAgZ2V0UHJldmlld0ZvcixcbiAgICAgICAgb25BY3Rpb246IG9uQWN0aW9uVG9nZ2xlRm9ybWF0JDEoZWRpdG9yKSxcbiAgICAgICAgdXBkYXRlVGV4dDogdXBkYXRlU2VsZWN0TWVudVRleHQsXG4gICAgICAgIHNob3VsZEhpZGU6IHNob3VsZEF1dG9IaWRlU3R5bGVGb3JtYXRzKGVkaXRvciksXG4gICAgICAgIGlzSW52YWxpZDogaXRlbSA9PiAhZWRpdG9yLmZvcm1hdHRlci5jYW5BcHBseShpdGVtLmZvcm1hdCksXG4gICAgICAgIGRhdGFzZXRcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVTdHlsZXNCdXR0b24gPSAoZWRpdG9yLCBiYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSB7XG4gICAgICAgIHR5cGU6ICdhZHZhbmNlZCcsXG4gICAgICAgIC4uLmJhY2tzdGFnZS5zdHlsZXNcbiAgICAgIH07XG4gICAgICByZXR1cm4gY3JlYXRlU2VsZWN0QnV0dG9uKGVkaXRvciwgYmFja3N0YWdlLCBnZXRTcGVjKGVkaXRvciwgZGF0YXNldCkpO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlU3R5bGVzTWVudSA9IChlZGl0b3IsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgZGF0YXNldCA9IHtcbiAgICAgICAgdHlwZTogJ2FkdmFuY2VkJyxcbiAgICAgICAgLi4uYmFja3N0YWdlLnN0eWxlc1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG1lbnVJdGVtcyA9IGNyZWF0ZU1lbnVJdGVtcyhlZGl0b3IsIGJhY2tzdGFnZSwgZ2V0U3BlYyhlZGl0b3IsIGRhdGFzZXQpKTtcbiAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGROZXN0ZWRNZW51SXRlbSgnc3R5bGVzJywge1xuICAgICAgICB0ZXh0OiAnRm9ybWF0cycsXG4gICAgICAgIG9uU2V0dXA6IG9uU2V0dXBFZGl0YWJsZVRvZ2dsZShlZGl0b3IpLFxuICAgICAgICBnZXRTdWJtZW51SXRlbXM6ICgpID0+IG1lbnVJdGVtcy5pdGVtcy52YWxpZGF0ZUl0ZW1zKG1lbnVJdGVtcy5nZXRTdHlsZUl0ZW1zKCkpXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2NoZW1hJDcgPSBjb25zdGFudCQxKFtcbiAgICAgIHJlcXVpcmVkJDEoJ3RvZ2dsZUNsYXNzJyksXG4gICAgICByZXF1aXJlZCQxKCdmZXRjaCcpLFxuICAgICAgb25TdHJpY3RIYW5kbGVyKCdvbkV4ZWN1dGUnKSxcbiAgICAgIGRlZmF1bHRlZCgnZ2V0SG90c3BvdCcsIE9wdGlvbmFsLnNvbWUpLFxuICAgICAgZGVmYXVsdGVkKCdnZXRBbmNob3JPdmVycmlkZXMnLCBjb25zdGFudCQxKHt9KSksXG4gICAgICBzY2hlbWEkeSgpLFxuICAgICAgb25TdHJpY3RIYW5kbGVyKCdvbkl0ZW1FeGVjdXRlJyksXG4gICAgICBvcHRpb24kMygnbGF6eVNpbmsnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ2RvbScpLFxuICAgICAgb25IYW5kbGVyKCdvbk9wZW4nKSxcbiAgICAgIGZpZWxkKCdzcGxpdERyb3Bkb3duQmVoYXZpb3VycycsIFtcbiAgICAgICAgQ291cGxpbmcsXG4gICAgICAgIEtleWluZyxcbiAgICAgICAgRm9jdXNpbmdcbiAgICAgIF0pLFxuICAgICAgZGVmYXVsdGVkKCdtYXRjaFdpZHRoJywgZmFsc2UpLFxuICAgICAgZGVmYXVsdGVkKCd1c2VNaW5XaWR0aCcsIGZhbHNlKSxcbiAgICAgIGRlZmF1bHRlZCgnZXZlbnRPcmRlcicsIHt9KSxcbiAgICAgIG9wdGlvbiQzKCdyb2xlJylcbiAgICBdLmNvbmNhdChzYW5kYm94RmllbGRzKCkpKTtcbiAgICBjb25zdCBhcnJvd1BhcnQgPSByZXF1aXJlZCh7XG4gICAgICBmYWN0b3J5OiBCdXR0b24sXG4gICAgICBzY2hlbWE6IFtyZXF1aXJlZCQxKCdkb20nKV0sXG4gICAgICBuYW1lOiAnYXJyb3cnLFxuICAgICAgZGVmYXVsdHM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgYnV0dG9uQmVoYXZpb3VyczogZGVyaXZlJDEoW0ZvY3VzaW5nLnJldm9rZSgpXSkgfTtcbiAgICAgIH0sXG4gICAgICBvdmVycmlkZXM6IGRldGFpbCA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICB0YWc6ICdzcGFuJyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3ByZXNlbnRhdGlvbicgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWN0aW9uOiBhcnJvdyA9PiB7XG4gICAgICAgICAgICBhcnJvdy5nZXRTeXN0ZW0oKS5nZXRCeVVpZChkZXRhaWwudWlkKS5lYWNoKGVtaXRFeGVjdXRlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJ1dHRvbkJlaGF2aW91cnM6IGRlcml2ZSQxKFtUb2dnbGluZy5jb25maWcoe1xuICAgICAgICAgICAgICB0b2dnbGVPbkV4ZWN1dGU6IGZhbHNlLFxuICAgICAgICAgICAgICB0b2dnbGVDbGFzczogZGV0YWlsLnRvZ2dsZUNsYXNzXG4gICAgICAgICAgICB9KV0pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgYnV0dG9uUGFydCA9IHJlcXVpcmVkKHtcbiAgICAgIGZhY3Rvcnk6IEJ1dHRvbixcbiAgICAgIHNjaGVtYTogW3JlcXVpcmVkJDEoJ2RvbScpXSxcbiAgICAgIG5hbWU6ICdidXR0b24nLFxuICAgICAgZGVmYXVsdHM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgYnV0dG9uQmVoYXZpb3VyczogZGVyaXZlJDEoW0ZvY3VzaW5nLnJldm9rZSgpXSkgfTtcbiAgICAgIH0sXG4gICAgICBvdmVycmlkZXM6IGRldGFpbCA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICB0YWc6ICdzcGFuJyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3ByZXNlbnRhdGlvbicgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWN0aW9uOiBidG4gPT4ge1xuICAgICAgICAgICAgYnRuLmdldFN5c3RlbSgpLmdldEJ5VWlkKGRldGFpbC51aWQpLmVhY2goc3BsaXREcm9wZG93biA9PiB7XG4gICAgICAgICAgICAgIGRldGFpbC5vbkV4ZWN1dGUoc3BsaXREcm9wZG93biwgYnRuKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBwYXJ0cyQzID0gY29uc3RhbnQkMShbXG4gICAgICBhcnJvd1BhcnQsXG4gICAgICBidXR0b25QYXJ0LFxuICAgICAgb3B0aW9uYWwoe1xuICAgICAgICBmYWN0b3J5OiB7XG4gICAgICAgICAgc2tldGNoOiBzcGVjID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHVpZDogc3BlYy51aWQsXG4gICAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICAgIHRhZzogJ3NwYW4nLFxuICAgICAgICAgICAgICAgIHN0eWxlczogeyBkaXNwbGF5OiAnbm9uZScgfSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7ICdhcmlhLWhpZGRlbic6ICd0cnVlJyB9LFxuICAgICAgICAgICAgICAgIGlubmVySHRtbDogc3BlYy50ZXh0XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzY2hlbWE6IFtyZXF1aXJlZCQxKCd0ZXh0JyldLFxuICAgICAgICBuYW1lOiAnYXJpYS1kZXNjcmlwdG9yJ1xuICAgICAgfSksXG4gICAgICBleHRlcm5hbCh7XG4gICAgICAgIHNjaGVtYTogW3RpZXJlZE1lbnVNYXJrZXJzKCldLFxuICAgICAgICBuYW1lOiAnbWVudScsXG4gICAgICAgIGRlZmF1bHRzOiBkZXRhaWwgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvbkV4ZWN1dGU6ICh0bWVudSwgaXRlbSkgPT4ge1xuICAgICAgICAgICAgICB0bWVudS5nZXRTeXN0ZW0oKS5nZXRCeVVpZChkZXRhaWwudWlkKS5lYWNoKHNwbGl0RHJvcGRvd24gPT4ge1xuICAgICAgICAgICAgICAgIGRldGFpbC5vbkl0ZW1FeGVjdXRlKHNwbGl0RHJvcGRvd24sIHRtZW51LCBpdGVtKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBwYXJ0VHlwZSQxKClcbiAgICBdKTtcblxuICAgIGNvbnN0IGZhY3RvcnkkNSA9IChkZXRhaWwsIGNvbXBvbmVudHMsIHNwZWMsIGV4dGVybmFscykgPT4ge1xuICAgICAgY29uc3Qgc3dpdGNoVG9NZW51ID0gc2FuZGJveCA9PiB7XG4gICAgICAgIENvbXBvc2luZy5nZXRDdXJyZW50KHNhbmRib3gpLmVhY2goY3VycmVudCA9PiB7XG4gICAgICAgICAgSGlnaGxpZ2h0aW5nLmhpZ2hsaWdodEZpcnN0KGN1cnJlbnQpO1xuICAgICAgICAgIEtleWluZy5mb2N1c0luKGN1cnJlbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBhY3Rpb24gPSBjb21wb25lbnQgPT4ge1xuICAgICAgICBjb25zdCBvbk9wZW5TeW5jID0gc3dpdGNoVG9NZW51O1xuICAgICAgICB0b2dnbGVQb3B1cChkZXRhaWwsIGlkZW50aXR5LCBjb21wb25lbnQsIGV4dGVybmFscywgb25PcGVuU3luYywgSGlnaGxpZ2h0T25PcGVuLkhpZ2hsaWdodE1lbnVBbmRJdGVtKS5nZXQobm9vcCk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgb3Blbk1lbnUgPSBjb21wID0+IHtcbiAgICAgICAgYWN0aW9uKGNvbXApO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBleGVjdXRlT25CdXR0b24gPSBjb21wID0+IHtcbiAgICAgICAgY29uc3QgYnV0dG9uID0gZ2V0UGFydE9yRGllKGNvbXAsIGRldGFpbCwgJ2J1dHRvbicpO1xuICAgICAgICBlbWl0RXhlY3V0ZShidXR0b24pO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBidXR0b25FdmVudHMgPSB7XG4gICAgICAgIC4uLmRlcml2ZSQyKFtydW5PbkF0dGFjaGVkKChjb21wb25lbnQsIF9zaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXJpYURlc2NyaXB0b3IgPSBnZXRQYXJ0KGNvbXBvbmVudCwgZGV0YWlsLCAnYXJpYS1kZXNjcmlwdG9yJyk7XG4gICAgICAgICAgICBhcmlhRGVzY3JpcHRvci5lYWNoKGRlc2NyaXB0b3IgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBkZXNjcmlwdG9ySWQgPSBnZW5lcmF0ZSQ2KCdhcmlhJyk7XG4gICAgICAgICAgICAgIHNldCQ5KGRlc2NyaXB0b3IuZWxlbWVudCwgJ2lkJywgZGVzY3JpcHRvcklkKTtcbiAgICAgICAgICAgICAgc2V0JDkoY29tcG9uZW50LmVsZW1lbnQsICdhcmlhLWRlc2NyaWJlZGJ5JywgZGVzY3JpcHRvcklkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pXSksXG4gICAgICAgIC4uLmV2ZW50cyRhKE9wdGlvbmFsLnNvbWUoYWN0aW9uKSlcbiAgICAgIH07XG4gICAgICBjb25zdCBhcGlzID0ge1xuICAgICAgICByZXBvc2l0aW9uTWVudXM6IGNvbXAgPT4ge1xuICAgICAgICAgIGlmIChUb2dnbGluZy5pc09uKGNvbXApKSB7XG4gICAgICAgICAgICByZXBvc2l0aW9uTWVudXMoY29tcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgICBkb206IGRldGFpbC5kb20sXG4gICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgIGFwaXMsXG4gICAgICAgIGV2ZW50T3JkZXI6IHtcbiAgICAgICAgICAuLi5kZXRhaWwuZXZlbnRPcmRlcixcbiAgICAgICAgICBbZXhlY3V0ZSQ1KCldOiBbXG4gICAgICAgICAgICAnZGlzYWJsaW5nJyxcbiAgICAgICAgICAgICd0b2dnbGluZycsXG4gICAgICAgICAgICAnYWxsb3kuYmFzZS5iZWhhdmlvdXInXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBldmVudHM6IGJ1dHRvbkV2ZW50cyxcbiAgICAgICAgYmVoYXZpb3VyczogYXVnbWVudChkZXRhaWwuc3BsaXREcm9wZG93bkJlaGF2aW91cnMsIFtcbiAgICAgICAgICBDb3VwbGluZy5jb25maWcoe1xuICAgICAgICAgICAgb3RoZXJzOiB7XG4gICAgICAgICAgICAgIHNhbmRib3g6IGhvdHNwb3QgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFycm93ID0gZ2V0UGFydE9yRGllKGhvdHNwb3QsIGRldGFpbCwgJ2Fycm93Jyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXh0cmFzID0ge1xuICAgICAgICAgICAgICAgICAgb25PcGVuOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIFRvZ2dsaW5nLm9uKGFycm93KTtcbiAgICAgICAgICAgICAgICAgICAgVG9nZ2xpbmcub24oaG90c3BvdCk7XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgb25DbG9zZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBUb2dnbGluZy5vZmYoYXJyb3cpO1xuICAgICAgICAgICAgICAgICAgICBUb2dnbGluZy5vZmYoaG90c3BvdCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVNhbmRib3gkMShkZXRhaWwsIGhvdHNwb3QsIGV4dHJhcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBLZXlpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIG1vZGU6ICdzcGVjaWFsJyxcbiAgICAgICAgICAgIG9uU3BhY2U6IGV4ZWN1dGVPbkJ1dHRvbixcbiAgICAgICAgICAgIG9uRW50ZXI6IGV4ZWN1dGVPbkJ1dHRvbixcbiAgICAgICAgICAgIG9uRG93bjogb3Blbk1lbnVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBGb2N1c2luZy5jb25maWcoe30pLFxuICAgICAgICAgIFRvZ2dsaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICB0b2dnbGVPbkV4ZWN1dGU6IGZhbHNlLFxuICAgICAgICAgICAgYXJpYTogeyBtb2RlOiAnZXhwYW5kZWQnIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdKSxcbiAgICAgICAgZG9tTW9kaWZpY2F0aW9uOiB7XG4gICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgJ3JvbGUnOiBkZXRhaWwucm9sZS5nZXRPcignYnV0dG9uJyksXG4gICAgICAgICAgICAnYXJpYS1oYXNwb3B1cCc6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBTcGxpdERyb3Bkb3duID0gY29tcG9zaXRlKHtcbiAgICAgIG5hbWU6ICdTcGxpdERyb3Bkb3duJyxcbiAgICAgIGNvbmZpZ0ZpZWxkczogc2NoZW1hJDcoKSxcbiAgICAgIHBhcnRGaWVsZHM6IHBhcnRzJDMoKSxcbiAgICAgIGZhY3Rvcnk6IGZhY3RvcnkkNSxcbiAgICAgIGFwaXM6IHsgcmVwb3NpdGlvbk1lbnVzOiAoYXBpcywgY29tcCkgPT4gYXBpcy5yZXBvc2l0aW9uTWVudXMoY29tcCkgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZ2V0QnV0dG9uQXBpID0gY29tcG9uZW50ID0+ICh7XG4gICAgICBpc0VuYWJsZWQ6ICgpID0+ICFEaXNhYmxpbmcuaXNEaXNhYmxlZChjb21wb25lbnQpLFxuICAgICAgc2V0RW5hYmxlZDogc3RhdGUgPT4gRGlzYWJsaW5nLnNldChjb21wb25lbnQsICFzdGF0ZSksXG4gICAgICBzZXRUZXh0OiB0ZXh0ID0+IGVtaXRXaXRoKGNvbXBvbmVudCwgdXBkYXRlTWVudVRleHQsIHsgdGV4dCB9KSxcbiAgICAgIHNldEljb246IGljb24gPT4gZW1pdFdpdGgoY29tcG9uZW50LCB1cGRhdGVNZW51SWNvbiwgeyBpY29uIH0pXG4gICAgfSk7XG4gICAgY29uc3QgZ2V0VG9nZ2xlQXBpID0gY29tcG9uZW50ID0+ICh7XG4gICAgICBzZXRBY3RpdmU6IHN0YXRlID0+IHtcbiAgICAgICAgVG9nZ2xpbmcuc2V0KGNvbXBvbmVudCwgc3RhdGUpO1xuICAgICAgfSxcbiAgICAgIGlzQWN0aXZlOiAoKSA9PiBUb2dnbGluZy5pc09uKGNvbXBvbmVudCksXG4gICAgICBpc0VuYWJsZWQ6ICgpID0+ICFEaXNhYmxpbmcuaXNEaXNhYmxlZChjb21wb25lbnQpLFxuICAgICAgc2V0RW5hYmxlZDogc3RhdGUgPT4gRGlzYWJsaW5nLnNldChjb21wb25lbnQsICFzdGF0ZSksXG4gICAgICBzZXRUZXh0OiB0ZXh0ID0+IGVtaXRXaXRoKGNvbXBvbmVudCwgdXBkYXRlTWVudVRleHQsIHsgdGV4dCB9KSxcbiAgICAgIHNldEljb246IGljb24gPT4gZW1pdFdpdGgoY29tcG9uZW50LCB1cGRhdGVNZW51SWNvbiwgeyBpY29uIH0pXG4gICAgfSk7XG4gICAgY29uc3QgZ2V0VG9vbHRpcEF0dHJpYnV0ZXMgPSAodG9vbHRpcCwgcHJvdmlkZXJzQmFja3N0YWdlKSA9PiB0b29sdGlwLm1hcCh0b29sdGlwID0+ICh7XG4gICAgICAnYXJpYS1sYWJlbCc6IHByb3ZpZGVyc0JhY2tzdGFnZS50cmFuc2xhdGUodG9vbHRpcCksXG4gICAgICAndGl0bGUnOiBwcm92aWRlcnNCYWNrc3RhZ2UudHJhbnNsYXRlKHRvb2x0aXApXG4gICAgfSkpLmdldE9yKHt9KTtcbiAgICBjb25zdCBmb2N1c0J1dHRvbkV2ZW50ID0gZ2VuZXJhdGUkNignZm9jdXMtYnV0dG9uJyk7XG4gICAgY29uc3QgcmVuZGVyQ29tbW9uU3RydWN0dXJlID0gKG9wdEljb24sIG9wdFRleHQsIHRvb2x0aXAsIGJlaGF2aW91cnMsIHByb3ZpZGVyc0JhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3Qgb3B0TWVtRGlzcGxheVRleHQgPSBvcHRUZXh0Lm1hcCh0ZXh0ID0+IHJlY29yZChyZW5kZXJMYWJlbCQxKHRleHQsICd0b3gtdGJ0bicsIHByb3ZpZGVyc0JhY2tzdGFnZSkpKTtcbiAgICAgIGNvbnN0IG9wdE1lbURpc3BsYXlJY29uID0gb3B0SWNvbi5tYXAoaWNvbiA9PiByZWNvcmQocmVuZGVyUmVwbGFjZWFibGVJY29uRnJvbVBhY2soaWNvbiwgcHJvdmlkZXJzQmFja3N0YWdlLmljb25zKSkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnYnV0dG9uJyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC10YnRuJ10uY29uY2F0KG9wdFRleHQuaXNTb21lKCkgPyBbJ3RveC10YnRuLS1zZWxlY3QnXSA6IFtdKSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiBnZXRUb29sdGlwQXR0cmlidXRlcyh0b29sdGlwLCBwcm92aWRlcnNCYWNrc3RhZ2UpXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IGNvbXBvbmVudFJlbmRlclBpcGVsaW5lKFtcbiAgICAgICAgICBvcHRNZW1EaXNwbGF5SWNvbi5tYXAobWVtID0+IG1lbS5hc1NwZWMoKSksXG4gICAgICAgICAgb3B0TWVtRGlzcGxheVRleHQubWFwKG1lbSA9PiBtZW0uYXNTcGVjKCkpXG4gICAgICAgIF0pLFxuICAgICAgICBldmVudE9yZGVyOiB7XG4gICAgICAgICAgW21vdXNlZG93bigpXTogW1xuICAgICAgICAgICAgJ2ZvY3VzaW5nJyxcbiAgICAgICAgICAgICdhbGxveS5iYXNlLmJlaGF2aW91cicsXG4gICAgICAgICAgICBjb21tb25CdXR0b25EaXNwbGF5RXZlbnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIFthdHRhY2hlZFRvRG9tKCldOiBbXG4gICAgICAgICAgICBjb21tb25CdXR0b25EaXNwbGF5RXZlbnQsXG4gICAgICAgICAgICAndG9vbGJhci1ncm91cC1idXR0b24tZXZlbnRzJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uQmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIERpc2FibGluZ0NvbmZpZ3MudG9vbGJhckJ1dHRvbihwcm92aWRlcnNCYWNrc3RhZ2UuaXNEaXNhYmxlZCksXG4gICAgICAgICAgcmVjZWl2aW5nQ29uZmlnKCksXG4gICAgICAgICAgY29uZmlnKGNvbW1vbkJ1dHRvbkRpc3BsYXlFdmVudCwgW1xuICAgICAgICAgICAgcnVuT25BdHRhY2hlZCgoY29tcCwgX3NlKSA9PiBmb3JjZUluaXRpYWxTaXplKGNvbXApKSxcbiAgICAgICAgICAgIHJ1biQxKHVwZGF0ZU1lbnVUZXh0LCAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgICAgICAgb3B0TWVtRGlzcGxheVRleHQuYmluZChtZW0gPT4gbWVtLmdldE9wdChjb21wKSkuZWFjaChkaXNwbGF5VGV4dCA9PiB7XG4gICAgICAgICAgICAgICAgUmVwbGFjaW5nLnNldChkaXNwbGF5VGV4dCwgW3RleHQkMihwcm92aWRlcnNCYWNrc3RhZ2UudHJhbnNsYXRlKHNlLmV2ZW50LnRleHQpKV0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcnVuJDEodXBkYXRlTWVudUljb24sIChjb21wLCBzZSkgPT4ge1xuICAgICAgICAgICAgICBvcHRNZW1EaXNwbGF5SWNvbi5iaW5kKG1lbSA9PiBtZW0uZ2V0T3B0KGNvbXApKS5lYWNoKGRpc3BsYXlJY29uID0+IHtcbiAgICAgICAgICAgICAgICBSZXBsYWNpbmcuc2V0KGRpc3BsYXlJY29uLCBbcmVuZGVyUmVwbGFjZWFibGVJY29uRnJvbVBhY2soc2UuZXZlbnQuaWNvbiwgcHJvdmlkZXJzQmFja3N0YWdlLmljb25zKV0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcnVuJDEobW91c2Vkb3duKCksIChidXR0b24sIHNlKSA9PiB7XG4gICAgICAgICAgICAgIHNlLmV2ZW50LnByZXZlbnQoKTtcbiAgICAgICAgICAgICAgZW1pdChidXR0b24sIGZvY3VzQnV0dG9uRXZlbnQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdKVxuICAgICAgICBdLmNvbmNhdChiZWhhdmlvdXJzLmdldE9yKFtdKSkpXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyRmxvYXRpbmdUb29sYmFyQnV0dG9uID0gKHNwZWMsIGJhY2tzdGFnZSwgaWRlbnRpZnlCdXR0b25zLCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICBjb25zdCBzaGFyZWRCYWNrc3RhZ2UgPSBiYWNrc3RhZ2Uuc2hhcmVkO1xuICAgICAgY29uc3QgZWRpdG9yT2ZmQ2VsbCA9IENlbGwobm9vcCk7XG4gICAgICBjb25zdCBzcGVjaWFsaXNhdGlvbiA9IHtcbiAgICAgICAgdG9vbGJhckJ1dHRvbkJlaGF2aW91cnM6IFtdLFxuICAgICAgICBnZXRBcGk6IGdldEJ1dHRvbkFwaSxcbiAgICAgICAgb25TZXR1cDogc3BlYy5vblNldHVwXG4gICAgICB9O1xuICAgICAgY29uc3QgYmVoYXZpb3VycyA9IFtjb25maWcoJ3Rvb2xiYXItZ3JvdXAtYnV0dG9uLWV2ZW50cycsIFtcbiAgICAgICAgICBvbkNvbnRyb2xBdHRhY2hlZChzcGVjaWFsaXNhdGlvbiwgZWRpdG9yT2ZmQ2VsbCksXG4gICAgICAgICAgb25Db250cm9sRGV0YWNoZWQoc3BlY2lhbGlzYXRpb24sIGVkaXRvck9mZkNlbGwpXG4gICAgICAgIF0pXTtcbiAgICAgIHJldHVybiBGbG9hdGluZ1Rvb2xiYXJCdXR0b24uc2tldGNoKHtcbiAgICAgICAgbGF6eVNpbms6IHNoYXJlZEJhY2tzdGFnZS5nZXRTaW5rLFxuICAgICAgICBmZXRjaDogKCkgPT4gRnV0dXJlLm51KHJlc29sdmUgPT4ge1xuICAgICAgICAgIHJlc29sdmUobWFwJDIoaWRlbnRpZnlCdXR0b25zKHNwZWMuaXRlbXMpLCByZW5kZXJUb29sYmFyR3JvdXApKTtcbiAgICAgICAgfSksXG4gICAgICAgIG1hcmtlcnM6IHsgdG9nZ2xlZENsYXNzOiAndG94LXRidG4tLWVuYWJsZWQnIH0sXG4gICAgICAgIHBhcnRzOiB7XG4gICAgICAgICAgYnV0dG9uOiByZW5kZXJDb21tb25TdHJ1Y3R1cmUoc3BlYy5pY29uLCBzcGVjLnRleHQsIHNwZWMudG9vbHRpcCwgT3B0aW9uYWwuc29tZShiZWhhdmlvdXJzKSwgc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVycyksXG4gICAgICAgICAgdG9vbGJhcjoge1xuICAgICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LXRvb2xiYXJfX292ZXJmbG93J10sXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyQ29tbW9uVG9vbGJhckJ1dHRvbiA9IChzcGVjLCBzcGVjaWFsaXNhdGlvbiwgcHJvdmlkZXJzQmFja3N0YWdlKSA9PiB7XG4gICAgICB2YXIgX2Q7XG4gICAgICBjb25zdCBlZGl0b3JPZmZDZWxsID0gQ2VsbChub29wKTtcbiAgICAgIGNvbnN0IHN0cnVjdHVyZSA9IHJlbmRlckNvbW1vblN0cnVjdHVyZShzcGVjLmljb24sIHNwZWMudGV4dCwgc3BlYy50b29sdGlwLCBPcHRpb25hbC5ub25lKCksIHByb3ZpZGVyc0JhY2tzdGFnZSk7XG4gICAgICByZXR1cm4gQnV0dG9uLnNrZXRjaCh7XG4gICAgICAgIGRvbTogc3RydWN0dXJlLmRvbSxcbiAgICAgICAgY29tcG9uZW50czogc3RydWN0dXJlLmNvbXBvbmVudHMsXG4gICAgICAgIGV2ZW50T3JkZXI6IHRvb2xiYXJCdXR0b25FdmVudE9yZGVyLFxuICAgICAgICBidXR0b25CZWhhdmlvdXJzOiB7XG4gICAgICAgICAgLi4uZGVyaXZlJDEoW1xuICAgICAgICAgICAgY29uZmlnKCd0b29sYmFyLWJ1dHRvbi1ldmVudHMnLCBbXG4gICAgICAgICAgICAgIG9uVG9vbGJhckJ1dHRvbkV4ZWN1dGUoe1xuICAgICAgICAgICAgICAgIG9uQWN0aW9uOiBzcGVjLm9uQWN0aW9uLFxuICAgICAgICAgICAgICAgIGdldEFwaTogc3BlY2lhbGlzYXRpb24uZ2V0QXBpXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBvbkNvbnRyb2xBdHRhY2hlZChzcGVjaWFsaXNhdGlvbiwgZWRpdG9yT2ZmQ2VsbCksXG4gICAgICAgICAgICAgIG9uQ29udHJvbERldGFjaGVkKHNwZWNpYWxpc2F0aW9uLCBlZGl0b3JPZmZDZWxsKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBEaXNhYmxpbmdDb25maWdzLnRvb2xiYXJCdXR0b24oKCkgPT4gIXNwZWMuZW5hYmxlZCB8fCBwcm92aWRlcnNCYWNrc3RhZ2UuaXNEaXNhYmxlZCgpKSxcbiAgICAgICAgICAgIHJlY2VpdmluZ0NvbmZpZygpXG4gICAgICAgICAgXS5jb25jYXQoc3BlY2lhbGlzYXRpb24udG9vbGJhckJ1dHRvbkJlaGF2aW91cnMpKSxcbiAgICAgICAgICBbY29tbW9uQnV0dG9uRGlzcGxheUV2ZW50XTogKF9kID0gc3RydWN0dXJlLmJ1dHRvbkJlaGF2aW91cnMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZFtjb21tb25CdXR0b25EaXNwbGF5RXZlbnRdXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyVG9vbGJhckJ1dHRvbiA9IChzcGVjLCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IHJlbmRlclRvb2xiYXJCdXR0b25XaXRoKHNwZWMsIHByb3ZpZGVyc0JhY2tzdGFnZSwgW10pO1xuICAgIGNvbnN0IHJlbmRlclRvb2xiYXJCdXR0b25XaXRoID0gKHNwZWMsIHByb3ZpZGVyc0JhY2tzdGFnZSwgYm9udXNFdmVudHMpID0+IHJlbmRlckNvbW1vblRvb2xiYXJCdXR0b24oc3BlYywge1xuICAgICAgdG9vbGJhckJ1dHRvbkJlaGF2aW91cnM6IGJvbnVzRXZlbnRzLmxlbmd0aCA+IDAgPyBbY29uZmlnKCd0b29sYmFyQnV0dG9uV2l0aCcsIGJvbnVzRXZlbnRzKV0gOiBbXSxcbiAgICAgIGdldEFwaTogZ2V0QnV0dG9uQXBpLFxuICAgICAgb25TZXR1cDogc3BlYy5vblNldHVwXG4gICAgfSwgcHJvdmlkZXJzQmFja3N0YWdlKTtcbiAgICBjb25zdCByZW5kZXJUb29sYmFyVG9nZ2xlQnV0dG9uID0gKHNwZWMsIHByb3ZpZGVyc0JhY2tzdGFnZSkgPT4gcmVuZGVyVG9vbGJhclRvZ2dsZUJ1dHRvbldpdGgoc3BlYywgcHJvdmlkZXJzQmFja3N0YWdlLCBbXSk7XG4gICAgY29uc3QgcmVuZGVyVG9vbGJhclRvZ2dsZUJ1dHRvbldpdGggPSAoc3BlYywgcHJvdmlkZXJzQmFja3N0YWdlLCBib251c0V2ZW50cykgPT4gcmVuZGVyQ29tbW9uVG9vbGJhckJ1dHRvbihzcGVjLCB7XG4gICAgICB0b29sYmFyQnV0dG9uQmVoYXZpb3VyczogW1xuICAgICAgICBSZXBsYWNpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgVG9nZ2xpbmcuY29uZmlnKHtcbiAgICAgICAgICB0b2dnbGVDbGFzczogJ3RveC10YnRuLS1lbmFibGVkJyxcbiAgICAgICAgICBhcmlhOiB7IG1vZGU6ICdwcmVzc2VkJyB9LFxuICAgICAgICAgIHRvZ2dsZU9uRXhlY3V0ZTogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIF0uY29uY2F0KGJvbnVzRXZlbnRzLmxlbmd0aCA+IDAgPyBbY29uZmlnKCd0b29sYmFyVG9nZ2xlQnV0dG9uV2l0aCcsIGJvbnVzRXZlbnRzKV0gOiBbXSksXG4gICAgICBnZXRBcGk6IGdldFRvZ2dsZUFwaSxcbiAgICAgIG9uU2V0dXA6IHNwZWMub25TZXR1cFxuICAgIH0sIHByb3ZpZGVyc0JhY2tzdGFnZSk7XG4gICAgY29uc3QgZmV0Y2hDaG9pY2VzID0gKGdldEFwaSwgc3BlYywgcHJvdmlkZXJzQmFja3N0YWdlKSA9PiBjb21wID0+IEZ1dHVyZS5udShjYWxsYmFjayA9PiBzcGVjLmZldGNoKGNhbGxiYWNrKSkubWFwKGl0ZW1zID0+IE9wdGlvbmFsLmZyb20oY3JlYXRlVGllcmVkRGF0YUZyb20oZGVlcE1lcmdlKGNyZWF0ZVBhcnRpYWxDaG9pY2VNZW51KGdlbmVyYXRlJDYoJ21lbnUtdmFsdWUnKSwgaXRlbXMsIHZhbHVlID0+IHtcbiAgICAgIHNwZWMub25JdGVtQWN0aW9uKGdldEFwaShjb21wKSwgdmFsdWUpO1xuICAgIH0sIHNwZWMuY29sdW1ucywgc3BlYy5wcmVzZXRzLCBJdGVtUmVzcG9uc2UkMS5DTE9TRV9PTl9FWEVDVVRFLCBzcGVjLnNlbGVjdC5nZXRPcihuZXZlciksIHByb3ZpZGVyc0JhY2tzdGFnZSksIHtcbiAgICAgIG1vdmVtZW50OiBkZXJpdmVNZW51TW92ZW1lbnQoc3BlYy5jb2x1bW5zLCBzcGVjLnByZXNldHMpLFxuICAgICAgbWVudUJlaGF2aW91cnM6IFNpbXBsZUJlaGF2aW91cnMudW5uYW1lZEV2ZW50cyhzcGVjLmNvbHVtbnMgIT09ICdhdXRvJyA/IFtdIDogW3J1bk9uQXR0YWNoZWQoKGNvbXAsIF9zZSkgPT4ge1xuICAgICAgICAgIGRldGVjdFNpemUoY29tcCwgNCwgY2xhc3NGb3JQcmVzZXQoc3BlYy5wcmVzZXRzKSkuZWFjaCgoe251bVJvd3MsIG51bUNvbHVtbnN9KSA9PiB7XG4gICAgICAgICAgICBLZXlpbmcuc2V0R3JpZFNpemUoY29tcCwgbnVtUm93cywgbnVtQ29sdW1ucyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pXSlcbiAgICB9KSkpKTtcbiAgICBjb25zdCByZW5kZXJTcGxpdEJ1dHRvbiA9IChzcGVjLCBzaGFyZWRCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IGdldEFwaSA9IGNvbXAgPT4gKHtcbiAgICAgICAgaXNFbmFibGVkOiAoKSA9PiAhRGlzYWJsaW5nLmlzRGlzYWJsZWQoY29tcCksXG4gICAgICAgIHNldEVuYWJsZWQ6IHN0YXRlID0+IERpc2FibGluZy5zZXQoY29tcCwgIXN0YXRlKSxcbiAgICAgICAgc2V0SWNvbkZpbGw6IChpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICBkZXNjZW5kYW50KGNvbXAuZWxlbWVudCwgYHN2ZyBwYXRoW2NsYXNzPVwiJHsgaWQgfVwiXSwgcmVjdFtjbGFzcz1cIiR7IGlkIH1cIl1gKS5lYWNoKHVuZGVybGluZVBhdGggPT4ge1xuICAgICAgICAgICAgc2V0JDkodW5kZXJsaW5lUGF0aCwgJ2ZpbGwnLCB2YWx1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldEFjdGl2ZTogc3RhdGUgPT4ge1xuICAgICAgICAgIHNldCQ5KGNvbXAuZWxlbWVudCwgJ2FyaWEtcHJlc3NlZCcsIHN0YXRlKTtcbiAgICAgICAgICBkZXNjZW5kYW50KGNvbXAuZWxlbWVudCwgJ3NwYW4nKS5lYWNoKGJ1dHRvbiA9PiB7XG4gICAgICAgICAgICBjb21wLmdldFN5c3RlbSgpLmdldEJ5RG9tKGJ1dHRvbikuZWFjaChidXR0b25Db21wID0+IFRvZ2dsaW5nLnNldChidXR0b25Db21wLCBzdGF0ZSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBpc0FjdGl2ZTogKCkgPT4gZGVzY2VuZGFudChjb21wLmVsZW1lbnQsICdzcGFuJykuZXhpc3RzKGJ1dHRvbiA9PiBjb21wLmdldFN5c3RlbSgpLmdldEJ5RG9tKGJ1dHRvbikuZXhpc3RzKFRvZ2dsaW5nLmlzT24pKSxcbiAgICAgICAgc2V0VGV4dDogdGV4dCA9PiBkZXNjZW5kYW50KGNvbXAuZWxlbWVudCwgJ3NwYW4nKS5lYWNoKGJ1dHRvbiA9PiBjb21wLmdldFN5c3RlbSgpLmdldEJ5RG9tKGJ1dHRvbikuZWFjaChidXR0b25Db21wID0+IGVtaXRXaXRoKGJ1dHRvbkNvbXAsIHVwZGF0ZU1lbnVUZXh0LCB7IHRleHQgfSkpKSxcbiAgICAgICAgc2V0SWNvbjogaWNvbiA9PiBkZXNjZW5kYW50KGNvbXAuZWxlbWVudCwgJ3NwYW4nKS5lYWNoKGJ1dHRvbiA9PiBjb21wLmdldFN5c3RlbSgpLmdldEJ5RG9tKGJ1dHRvbikuZWFjaChidXR0b25Db21wID0+IGVtaXRXaXRoKGJ1dHRvbkNvbXAsIHVwZGF0ZU1lbnVJY29uLCB7IGljb24gfSkpKVxuICAgICAgfSk7XG4gICAgICBjb25zdCBlZGl0b3JPZmZDZWxsID0gQ2VsbChub29wKTtcbiAgICAgIGNvbnN0IHNwZWNpYWxpc2F0aW9uID0ge1xuICAgICAgICBnZXRBcGksXG4gICAgICAgIG9uU2V0dXA6IHNwZWMub25TZXR1cFxuICAgICAgfTtcbiAgICAgIHJldHVybiBTcGxpdERyb3Bkb3duLnNrZXRjaCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtc3BsaXQtYnV0dG9uJ10sXG4gICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgJ2FyaWEtcHJlc3NlZCc6IGZhbHNlLFxuICAgICAgICAgICAgLi4uZ2V0VG9vbHRpcEF0dHJpYnV0ZXMoc3BlYy50b29sdGlwLCBzaGFyZWRCYWNrc3RhZ2UucHJvdmlkZXJzKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25FeGVjdXRlOiBidXR0b24gPT4ge1xuICAgICAgICAgIGNvbnN0IGFwaSA9IGdldEFwaShidXR0b24pO1xuICAgICAgICAgIGlmIChhcGkuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgIHNwZWMub25BY3Rpb24oYXBpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uSXRlbUV4ZWN1dGU6IChfYSwgX2IsIF9jKSA9PiB7XG4gICAgICAgIH0sXG4gICAgICAgIHNwbGl0RHJvcGRvd25CZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgRGlzYWJsaW5nQ29uZmlncy5zcGxpdEJ1dHRvbihzaGFyZWRCYWNrc3RhZ2UucHJvdmlkZXJzLmlzRGlzYWJsZWQpLFxuICAgICAgICAgIHJlY2VpdmluZ0NvbmZpZygpLFxuICAgICAgICAgIGNvbmZpZygnc3BsaXQtZHJvcGRvd24tZXZlbnRzJywgW1xuICAgICAgICAgICAgcnVuT25BdHRhY2hlZCgoY29tcCwgX3NlKSA9PiBmb3JjZUluaXRpYWxTaXplKGNvbXApKSxcbiAgICAgICAgICAgIHJ1biQxKGZvY3VzQnV0dG9uRXZlbnQsIEZvY3VzaW5nLmZvY3VzKSxcbiAgICAgICAgICAgIG9uQ29udHJvbEF0dGFjaGVkKHNwZWNpYWxpc2F0aW9uLCBlZGl0b3JPZmZDZWxsKSxcbiAgICAgICAgICAgIG9uQ29udHJvbERldGFjaGVkKHNwZWNpYWxpc2F0aW9uLCBlZGl0b3JPZmZDZWxsKVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIFVuc2VsZWN0aW5nLmNvbmZpZyh7fSlcbiAgICAgICAgXSksXG4gICAgICAgIGV2ZW50T3JkZXI6IHtcbiAgICAgICAgICBbYXR0YWNoZWRUb0RvbSgpXTogW1xuICAgICAgICAgICAgJ2FsbG95LmJhc2UuYmVoYXZpb3VyJyxcbiAgICAgICAgICAgICdzcGxpdC1kcm9wZG93bi1ldmVudHMnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB0b2dnbGVDbGFzczogJ3RveC10YnRuLS1lbmFibGVkJyxcbiAgICAgICAgbGF6eVNpbms6IHNoYXJlZEJhY2tzdGFnZS5nZXRTaW5rLFxuICAgICAgICBmZXRjaDogZmV0Y2hDaG9pY2VzKGdldEFwaSwgc3BlYywgc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVycyksXG4gICAgICAgIHBhcnRzOiB7IG1lbnU6IHBhcnQoZmFsc2UsIHNwZWMuY29sdW1ucywgc3BlYy5wcmVzZXRzKSB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgU3BsaXREcm9wZG93bi5wYXJ0cy5idXR0b24ocmVuZGVyQ29tbW9uU3RydWN0dXJlKHNwZWMuaWNvbiwgc3BlYy50ZXh0LCBPcHRpb25hbC5ub25lKCksIE9wdGlvbmFsLnNvbWUoW1RvZ2dsaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICAgIHRvZ2dsZUNsYXNzOiAndG94LXRidG4tLWVuYWJsZWQnLFxuICAgICAgICAgICAgICB0b2dnbGVPbkV4ZWN1dGU6IGZhbHNlXG4gICAgICAgICAgICB9KV0pLCBzaGFyZWRCYWNrc3RhZ2UucHJvdmlkZXJzKSksXG4gICAgICAgICAgU3BsaXREcm9wZG93bi5wYXJ0cy5hcnJvdyh7XG4gICAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgICAgdGFnOiAnYnV0dG9uJyxcbiAgICAgICAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICAgICAgICd0b3gtdGJ0bicsXG4gICAgICAgICAgICAgICAgJ3RveC1zcGxpdC1idXR0b25fX2NoZXZyb24nXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGlubmVySHRtbDogZ2V0JDIoJ2NoZXZyb24tZG93bicsIHNoYXJlZEJhY2tzdGFnZS5wcm92aWRlcnMuaWNvbnMpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYnV0dG9uQmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgICAgICBEaXNhYmxpbmdDb25maWdzLnNwbGl0QnV0dG9uKHNoYXJlZEJhY2tzdGFnZS5wcm92aWRlcnMuaXNEaXNhYmxlZCksXG4gICAgICAgICAgICAgIHJlY2VpdmluZ0NvbmZpZygpLFxuICAgICAgICAgICAgICBhZGRGb2N1c2FibGVCZWhhdmlvdXIoKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBTcGxpdERyb3Bkb3duLnBhcnRzWydhcmlhLWRlc2NyaXB0b3InXSh7IHRleHQ6IHNoYXJlZEJhY2tzdGFnZS5wcm92aWRlcnMudHJhbnNsYXRlKCdUbyBvcGVuIHRoZSBwb3B1cCwgcHJlc3MgU2hpZnQrRW50ZXInKSB9KVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGVmYXVsdFRvb2xiYXIgPSBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdoaXN0b3J5JyxcbiAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICAndW5kbycsXG4gICAgICAgICAgJ3JlZG8nXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdhaScsXG4gICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgJ2FpZGlhbG9nJyxcbiAgICAgICAgICAnYWlzaG9ydGN1dHMnXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzdHlsZXMnLFxuICAgICAgICBpdGVtczogWydzdHlsZXMnXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2Zvcm1hdHRpbmcnLFxuICAgICAgICBpdGVtczogW1xuICAgICAgICAgICdib2xkJyxcbiAgICAgICAgICAnaXRhbGljJ1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnYWxpZ25tZW50JyxcbiAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICAnYWxpZ25sZWZ0JyxcbiAgICAgICAgICAnYWxpZ25jZW50ZXInLFxuICAgICAgICAgICdhbGlnbnJpZ2h0JyxcbiAgICAgICAgICAnYWxpZ25qdXN0aWZ5J1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnaW5kZW50YXRpb24nLFxuICAgICAgICBpdGVtczogW1xuICAgICAgICAgICdvdXRkZW50JyxcbiAgICAgICAgICAnaW5kZW50J1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAncGVybWFuZW50IHBlbicsXG4gICAgICAgIGl0ZW1zOiBbJ3Blcm1hbmVudHBlbiddXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnY29tbWVudHMnLFxuICAgICAgICBpdGVtczogWydhZGRjb21tZW50J11cbiAgICAgIH1cbiAgICBdO1xuICAgIGNvbnN0IHJlbmRlckZyb21CcmlkZ2UgPSAoYnJpZGdlQnVpbGRlciwgcmVuZGVyKSA9PiAoc3BlYywgYmFja3N0YWdlLCBlZGl0b3IpID0+IHtcbiAgICAgIGNvbnN0IGludGVybmFsID0gYnJpZGdlQnVpbGRlcihzcGVjKS5tYXBFcnJvcihlcnJJbmZvID0+IGZvcm1hdEVycm9yKGVyckluZm8pKS5nZXRPckRpZSgpO1xuICAgICAgcmV0dXJuIHJlbmRlcihpbnRlcm5hbCwgYmFja3N0YWdlLCBlZGl0b3IpO1xuICAgIH07XG4gICAgY29uc3QgdHlwZXMgPSB7XG4gICAgICBidXR0b246IHJlbmRlckZyb21CcmlkZ2UoY3JlYXRlVG9vbGJhckJ1dHRvbiwgKHMsIGJhY2tzdGFnZSkgPT4gcmVuZGVyVG9vbGJhckJ1dHRvbihzLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycykpLFxuICAgICAgdG9nZ2xlYnV0dG9uOiByZW5kZXJGcm9tQnJpZGdlKGNyZWF0ZVRvZ2dsZUJ1dHRvbiwgKHMsIGJhY2tzdGFnZSkgPT4gcmVuZGVyVG9vbGJhclRvZ2dsZUJ1dHRvbihzLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycykpLFxuICAgICAgbWVudWJ1dHRvbjogcmVuZGVyRnJvbUJyaWRnZShjcmVhdGVNZW51QnV0dG9uLCAocywgYmFja3N0YWdlKSA9PiByZW5kZXJNZW51QnV0dG9uKHMsICd0b3gtdGJ0bicsIGJhY2tzdGFnZSwgT3B0aW9uYWwubm9uZSgpLCBmYWxzZSkpLFxuICAgICAgc3BsaXRidXR0b246IHJlbmRlckZyb21CcmlkZ2UoY3JlYXRlU3BsaXRCdXR0b24sIChzLCBiYWNrc3RhZ2UpID0+IHJlbmRlclNwbGl0QnV0dG9uKHMsIGJhY2tzdGFnZS5zaGFyZWQpKSxcbiAgICAgIGdyb3VwdG9vbGJhcmJ1dHRvbjogcmVuZGVyRnJvbUJyaWRnZShjcmVhdGVHcm91cFRvb2xiYXJCdXR0b24sIChzLCBiYWNrc3RhZ2UsIGVkaXRvcikgPT4ge1xuICAgICAgICBjb25zdCBidXR0b25zID0gZWRpdG9yLnVpLnJlZ2lzdHJ5LmdldEFsbCgpLmJ1dHRvbnM7XG4gICAgICAgIGNvbnN0IGlkZW50aWZ5ID0gdG9vbGJhciA9PiBpZGVudGlmeUJ1dHRvbnMoZWRpdG9yLCB7XG4gICAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgICB0b29sYmFyLFxuICAgICAgICAgIGFsbG93VG9vbGJhckdyb3VwczogZmFsc2VcbiAgICAgICAgfSwgYmFja3N0YWdlLCBPcHRpb25hbC5ub25lKCkpO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0geyBbQXR0cmlidXRlXTogYmFja3N0YWdlLnNoYXJlZC5oZWFkZXIuaXNQb3NpdGlvbmVkQXRUb3AoKSA/IEF0dHJpYnV0ZVZhbHVlLlRvcFRvQm90dG9tIDogQXR0cmlidXRlVmFsdWUuQm90dG9tVG9Ub3AgfTtcbiAgICAgICAgc3dpdGNoIChnZXRUb29sYmFyTW9kZShlZGl0b3IpKSB7XG4gICAgICAgIGNhc2UgVG9vbGJhck1vZGUkMS5mbG9hdGluZzpcbiAgICAgICAgICByZXR1cm4gcmVuZGVyRmxvYXRpbmdUb29sYmFyQnV0dG9uKHMsIGJhY2tzdGFnZSwgaWRlbnRpZnksIGF0dHJpYnV0ZXMpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9vbGJhciBncm91cHMgYXJlIG9ubHkgc3VwcG9ydGVkIHdoZW4gdXNpbmcgZmxvYXRpbmcgdG9vbGJhciBtb2RlJyk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfTtcbiAgICBjb25zdCBleHRyYWN0RnJvbSA9IChzcGVjLCBiYWNrc3RhZ2UsIGVkaXRvcikgPT4gZ2V0JGcodHlwZXMsIHNwZWMudHlwZSkuZm9sZCgoKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdza2lwcGluZyBidXR0b24gZGVmaW5lZCBieScsIHNwZWMpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9LCByZW5kZXIgPT4gT3B0aW9uYWwuc29tZShyZW5kZXIoc3BlYywgYmFja3N0YWdlLCBlZGl0b3IpKSk7XG4gICAgY29uc3QgYmVzcG9rZUJ1dHRvbnMgPSB7XG4gICAgICBzdHlsZXM6IGNyZWF0ZVN0eWxlc0J1dHRvbixcbiAgICAgIGZvbnRzaXplOiBjcmVhdGVGb250U2l6ZUJ1dHRvbixcbiAgICAgIGZvbnRzaXplaW5wdXQ6IGNyZWF0ZUZvbnRTaXplSW5wdXRCdXR0b24sXG4gICAgICBmb250ZmFtaWx5OiBjcmVhdGVGb250RmFtaWx5QnV0dG9uLFxuICAgICAgYmxvY2tzOiBjcmVhdGVCbG9ja3NCdXR0b24sXG4gICAgICBhbGlnbjogY3JlYXRlQWxpZ25CdXR0b25cbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZVVudXNlZERlZmF1bHRzID0gYnV0dG9ucyA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJlZEl0ZW1Hcm91cHMgPSBtYXAkMihkZWZhdWx0VG9vbGJhciwgZ3JvdXAgPT4ge1xuICAgICAgICBjb25zdCBpdGVtcyA9IGZpbHRlciQyKGdyb3VwLml0ZW1zLCBzdWJJdGVtID0+IGhhcyQyKGJ1dHRvbnMsIHN1Ykl0ZW0pIHx8IGhhcyQyKGJlc3Bva2VCdXR0b25zLCBzdWJJdGVtKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogZ3JvdXAubmFtZSxcbiAgICAgICAgICBpdGVtc1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmlsdGVyJDIoZmlsdGVyZWRJdGVtR3JvdXBzLCBncm91cCA9PiBncm91cC5pdGVtcy5sZW5ndGggPiAwKTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbnZlcnRTdHJpbmdUb29sYmFyID0gc3RyVG9vbGJhciA9PiB7XG4gICAgICBjb25zdCBncm91cHNTdHJpbmdzID0gc3RyVG9vbGJhci5zcGxpdCgnfCcpO1xuICAgICAgcmV0dXJuIG1hcCQyKGdyb3Vwc1N0cmluZ3MsIGcgPT4gKHsgaXRlbXM6IGcudHJpbSgpLnNwbGl0KCcgJykgfSkpO1xuICAgIH07XG4gICAgY29uc3QgaXNUb29sYmFyR3JvdXBTZXR0aW5nQXJyYXkgPSB0b29sYmFyID0+IGlzQXJyYXlPZih0b29sYmFyLCB0ID0+IGhhcyQyKHQsICduYW1lJykgJiYgaGFzJDIodCwgJ2l0ZW1zJykpO1xuICAgIGNvbnN0IGNyZWF0ZVRvb2xiYXIgPSB0b29sYmFyQ29uZmlnID0+IHtcbiAgICAgIGNvbnN0IHRvb2xiYXIgPSB0b29sYmFyQ29uZmlnLnRvb2xiYXI7XG4gICAgICBjb25zdCBidXR0b25zID0gdG9vbGJhckNvbmZpZy5idXR0b25zO1xuICAgICAgaWYgKHRvb2xiYXIgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH0gZWxzZSBpZiAodG9vbGJhciA9PT0gdW5kZWZpbmVkIHx8IHRvb2xiYXIgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIHJlbW92ZVVudXNlZERlZmF1bHRzKGJ1dHRvbnMpO1xuICAgICAgfSBlbHNlIGlmIChpc1N0cmluZyh0b29sYmFyKSkge1xuICAgICAgICByZXR1cm4gY29udmVydFN0cmluZ1Rvb2xiYXIodG9vbGJhcik7XG4gICAgICB9IGVsc2UgaWYgKGlzVG9vbGJhckdyb3VwU2V0dGluZ0FycmF5KHRvb2xiYXIpKSB7XG4gICAgICAgIHJldHVybiB0b29sYmFyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignVG9vbGJhciB0eXBlIHNob3VsZCBiZSBzdHJpbmcsIHN0cmluZ1tdLCBib29sZWFuIG9yIFRvb2xiYXJHcm91cFtdJyk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGxvb2t1cEJ1dHRvbiA9IChlZGl0b3IsIGJ1dHRvbnMsIHRvb2xiYXJJdGVtLCBhbGxvd1Rvb2xiYXJHcm91cHMsIGJhY2tzdGFnZSwgcHJlZml4ZXMpID0+IGdldCRnKGJ1dHRvbnMsIHRvb2xiYXJJdGVtLnRvTG93ZXJDYXNlKCkpLm9yVGh1bmsoKCkgPT4gcHJlZml4ZXMuYmluZChwcyA9PiBmaW5kTWFwKHBzLCBwcmVmaXggPT4gZ2V0JGcoYnV0dG9ucywgcHJlZml4ICsgdG9vbGJhckl0ZW0udG9Mb3dlckNhc2UoKSkpKSkuZm9sZCgoKSA9PiBnZXQkZyhiZXNwb2tlQnV0dG9ucywgdG9vbGJhckl0ZW0udG9Mb3dlckNhc2UoKSkubWFwKHIgPT4gcihlZGl0b3IsIGJhY2tzdGFnZSkpLCBzcGVjID0+IHtcbiAgICAgIGlmIChzcGVjLnR5cGUgPT09ICdncm91cHRvb2xiYXJidXR0b24nICYmICFhbGxvd1Rvb2xiYXJHcm91cHMpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBJZ25vcmluZyB0aGUgJyR7IHRvb2xiYXJJdGVtIH0nIHRvb2xiYXIgYnV0dG9uLiBHcm91cCB0b29sYmFyIGJ1dHRvbnMgYXJlIG9ubHkgc3VwcG9ydGVkIHdoZW4gdXNpbmcgZmxvYXRpbmcgdG9vbGJhciBtb2RlIGFuZCBjYW5ub3QgYmUgbmVzdGVkLmApO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGV4dHJhY3RGcm9tKHNwZWMsIGJhY2tzdGFnZSwgZWRpdG9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBpZGVudGlmeUJ1dHRvbnMgPSAoZWRpdG9yLCB0b29sYmFyQ29uZmlnLCBiYWNrc3RhZ2UsIHByZWZpeGVzKSA9PiB7XG4gICAgICBjb25zdCB0b29sYmFyR3JvdXBzID0gY3JlYXRlVG9vbGJhcih0b29sYmFyQ29uZmlnKTtcbiAgICAgIGNvbnN0IGdyb3VwcyA9IG1hcCQyKHRvb2xiYXJHcm91cHMsIGdyb3VwID0+IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBiaW5kJDMoZ3JvdXAuaXRlbXMsIHRvb2xiYXJJdGVtID0+IHtcbiAgICAgICAgICByZXR1cm4gdG9vbGJhckl0ZW0udHJpbSgpLmxlbmd0aCA9PT0gMCA/IFtdIDogbG9va3VwQnV0dG9uKGVkaXRvciwgdG9vbGJhckNvbmZpZy5idXR0b25zLCB0b29sYmFySXRlbSwgdG9vbGJhckNvbmZpZy5hbGxvd1Rvb2xiYXJHcm91cHMsIGJhY2tzdGFnZSwgcHJlZml4ZXMpLnRvQXJyYXkoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdGl0bGU6IE9wdGlvbmFsLmZyb20oZWRpdG9yLnRyYW5zbGF0ZShncm91cC5uYW1lKSksXG4gICAgICAgICAgaXRlbXNcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZpbHRlciQyKGdyb3VwcywgZ3JvdXAgPT4gZ3JvdXAuaXRlbXMubGVuZ3RoID4gMCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNldFRvb2xiYXIgPSAoZWRpdG9yLCB1aVJlZnMsIHJhd1VpQ29uZmlnLCBiYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IG91dGVyQ29udGFpbmVyID0gdWlSZWZzLm1haW5VaS5vdXRlckNvbnRhaW5lcjtcbiAgICAgIGNvbnN0IHRvb2xiYXJDb25maWcgPSByYXdVaUNvbmZpZy50b29sYmFyO1xuICAgICAgY29uc3QgdG9vbGJhckJ1dHRvbnNDb25maWcgPSByYXdVaUNvbmZpZy5idXR0b25zO1xuICAgICAgaWYgKGlzQXJyYXlPZih0b29sYmFyQ29uZmlnLCBpc1N0cmluZykpIHtcbiAgICAgICAgY29uc3QgdG9vbGJhcnMgPSB0b29sYmFyQ29uZmlnLm1hcCh0ID0+IHtcbiAgICAgICAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAgICAgICB0b29sYmFyOiB0LFxuICAgICAgICAgICAgYnV0dG9uczogdG9vbGJhckJ1dHRvbnNDb25maWcsXG4gICAgICAgICAgICBhbGxvd1Rvb2xiYXJHcm91cHM6IHJhd1VpQ29uZmlnLmFsbG93VG9vbGJhckdyb3Vwc1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGlkZW50aWZ5QnV0dG9ucyhlZGl0b3IsIGNvbmZpZywgYmFja3N0YWdlLCBPcHRpb25hbC5ub25lKCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgT3V0ZXJDb250YWluZXIuc2V0VG9vbGJhcnMob3V0ZXJDb250YWluZXIsIHRvb2xiYXJzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE91dGVyQ29udGFpbmVyLnNldFRvb2xiYXIob3V0ZXJDb250YWluZXIsIGlkZW50aWZ5QnV0dG9ucyhlZGl0b3IsIHJhd1VpQ29uZmlnLCBiYWNrc3RhZ2UsIE9wdGlvbmFsLm5vbmUoKSkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBkZXRlY3Rpb24gPSBkZXRlY3QkMigpO1xuICAgIGNvbnN0IGlzaU9TMTIgPSBkZXRlY3Rpb24ub3MuaXNpT1MoKSAmJiBkZXRlY3Rpb24ub3MudmVyc2lvbi5tYWpvciA8PSAxMjtcbiAgICBjb25zdCBzZXR1cEV2ZW50cyQxID0gKGVkaXRvciwgdWlSZWZzKSA9PiB7XG4gICAgICBjb25zdCB7dWlNb3RoZXJzaGlwc30gPSB1aVJlZnM7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgbGV0IGNvbnRlbnRXaW5kb3cgPSBlZGl0b3IuZ2V0V2luKCk7XG4gICAgICBjb25zdCBpbml0aWFsRG9jRWxlID0gZWRpdG9yLmdldERvYygpLmRvY3VtZW50RWxlbWVudDtcbiAgICAgIGNvbnN0IGxhc3RXaW5kb3dEaW1lbnNpb25zID0gQ2VsbChTdWdhclBvc2l0aW9uKGNvbnRlbnRXaW5kb3cuaW5uZXJXaWR0aCwgY29udGVudFdpbmRvdy5pbm5lckhlaWdodCkpO1xuICAgICAgY29uc3QgbGFzdERvY3VtZW50RGltZW5zaW9ucyA9IENlbGwoU3VnYXJQb3NpdGlvbihpbml0aWFsRG9jRWxlLm9mZnNldFdpZHRoLCBpbml0aWFsRG9jRWxlLm9mZnNldEhlaWdodCkpO1xuICAgICAgY29uc3QgcmVzaXplV2luZG93ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBvdXRlciA9IGxhc3RXaW5kb3dEaW1lbnNpb25zLmdldCgpO1xuICAgICAgICBpZiAob3V0ZXIubGVmdCAhPT0gY29udGVudFdpbmRvdy5pbm5lcldpZHRoIHx8IG91dGVyLnRvcCAhPT0gY29udGVudFdpbmRvdy5pbm5lckhlaWdodCkge1xuICAgICAgICAgIGxhc3RXaW5kb3dEaW1lbnNpb25zLnNldChTdWdhclBvc2l0aW9uKGNvbnRlbnRXaW5kb3cuaW5uZXJXaWR0aCwgY29udGVudFdpbmRvdy5pbm5lckhlaWdodCkpO1xuICAgICAgICAgIGZpcmVSZXNpemVDb250ZW50KGVkaXRvcik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCByZXNpemVEb2N1bWVudCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZG9jRWxlID0gZWRpdG9yLmdldERvYygpLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgY29uc3QgaW5uZXIgPSBsYXN0RG9jdW1lbnREaW1lbnNpb25zLmdldCgpO1xuICAgICAgICBpZiAoaW5uZXIubGVmdCAhPT0gZG9jRWxlLm9mZnNldFdpZHRoIHx8IGlubmVyLnRvcCAhPT0gZG9jRWxlLm9mZnNldEhlaWdodCkge1xuICAgICAgICAgIGxhc3REb2N1bWVudERpbWVuc2lvbnMuc2V0KFN1Z2FyUG9zaXRpb24oZG9jRWxlLm9mZnNldFdpZHRoLCBkb2NFbGUub2Zmc2V0SGVpZ2h0KSk7XG4gICAgICAgICAgZmlyZVJlc2l6ZUNvbnRlbnQoZWRpdG9yKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNjcm9sbCA9IGUgPT4ge1xuICAgICAgICBmaXJlU2Nyb2xsQ29udGVudChlZGl0b3IsIGUpO1xuICAgICAgfTtcbiAgICAgIGRvbS5iaW5kKGNvbnRlbnRXaW5kb3csICdyZXNpemUnLCByZXNpemVXaW5kb3cpO1xuICAgICAgZG9tLmJpbmQoY29udGVudFdpbmRvdywgJ3Njcm9sbCcsIHNjcm9sbCk7XG4gICAgICBjb25zdCBlbGVtZW50TG9hZCA9IGNhcHR1cmUoU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSksICdsb2FkJywgcmVzaXplRG9jdW1lbnQpO1xuICAgICAgZWRpdG9yLm9uKCdoaWRlJywgKCkgPT4ge1xuICAgICAgICBlYWNoJDEodWlNb3RoZXJzaGlwcywgbSA9PiB7XG4gICAgICAgICAgc2V0JDgobS5lbGVtZW50LCAnZGlzcGxheScsICdub25lJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ3Nob3cnLCAoKSA9PiB7XG4gICAgICAgIGVhY2gkMSh1aU1vdGhlcnNoaXBzLCBtID0+IHtcbiAgICAgICAgICByZW1vdmUkNihtLmVsZW1lbnQsICdkaXNwbGF5Jyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ05vZGVDaGFuZ2UnLCByZXNpemVEb2N1bWVudCk7XG4gICAgICBlZGl0b3Iub24oJ3JlbW92ZScsICgpID0+IHtcbiAgICAgICAgZWxlbWVudExvYWQudW5iaW5kKCk7XG4gICAgICAgIGRvbS51bmJpbmQoY29udGVudFdpbmRvdywgJ3Jlc2l6ZScsIHJlc2l6ZVdpbmRvdyk7XG4gICAgICAgIGRvbS51bmJpbmQoY29udGVudFdpbmRvdywgJ3Njcm9sbCcsIHNjcm9sbCk7XG4gICAgICAgIGNvbnRlbnRXaW5kb3cgPSBudWxsO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBhdHRhY2hVaU1vdGhlcnNoaXBzID0gKGVkaXRvciwgdWlSb290LCB1aVJlZnMpID0+IHtcbiAgICAgIGlmIChpc1NwbGl0VWlNb2RlKGVkaXRvcikpIHtcbiAgICAgICAgYXR0YWNoU3lzdGVtQWZ0ZXIodWlSZWZzLm1haW5VaS5tb3RoZXJzaGlwLmVsZW1lbnQsIHVpUmVmcy5wb3B1cFVpLm1vdGhlcnNoaXApO1xuICAgICAgfVxuICAgICAgYXR0YWNoU3lzdGVtKHVpUm9vdCwgdWlSZWZzLmRpYWxvZ1VpLm1vdGhlcnNoaXApO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyJDEgPSBhc3luYyAoZWRpdG9yLCB1aVJlZnMsIHJhd1VpQ29uZmlnLCBiYWNrc3RhZ2UsIGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHttYWluVWksIHVpTW90aGVyc2hpcHN9ID0gdWlSZWZzO1xuICAgICAgY29uc3QgbGFzdFRvb2xiYXJXaWR0aCA9IENlbGwoMCk7XG4gICAgICBjb25zdCBvdXRlckNvbnRhaW5lciA9IG1haW5VaS5vdXRlckNvbnRhaW5lcjtcbiAgICAgIGF3YWl0IGlmcmFtZShlZGl0b3IpO1xuICAgICAgY29uc3QgZVRhcmdldE5vZGUgPSBTdWdhckVsZW1lbnQuZnJvbURvbShhcmdzLnRhcmdldE5vZGUpO1xuICAgICAgY29uc3QgdWlSb290ID0gZ2V0Q29udGVudENvbnRhaW5lcihnZXRSb290Tm9kZShlVGFyZ2V0Tm9kZSkpO1xuICAgICAgYXR0YWNoU3lzdGVtQWZ0ZXIoZVRhcmdldE5vZGUsIG1haW5VaS5tb3RoZXJzaGlwKTtcbiAgICAgIGF0dGFjaFVpTW90aGVyc2hpcHMoZWRpdG9yLCB1aVJvb3QsIHVpUmVmcyk7XG4gICAgICBlZGl0b3Iub24oJ1Bvc3RSZW5kZXInLCAoKSA9PiB7XG4gICAgICAgIE91dGVyQ29udGFpbmVyLnNldFNpZGViYXIob3V0ZXJDb250YWluZXIsIHJhd1VpQ29uZmlnLnNpZGViYXIsIGdldFNpZGViYXJTaG93KGVkaXRvcikpO1xuICAgICAgICBzZXRUb29sYmFyKGVkaXRvciwgdWlSZWZzLCByYXdVaUNvbmZpZywgYmFja3N0YWdlKTtcbiAgICAgICAgbGFzdFRvb2xiYXJXaWR0aC5zZXQoZWRpdG9yLmdldFdpbigpLmlubmVyV2lkdGgpO1xuICAgICAgICBPdXRlckNvbnRhaW5lci5zZXRNZW51YmFyKG91dGVyQ29udGFpbmVyLCBpZGVudGlmeU1lbnVzKGVkaXRvciwgcmF3VWlDb25maWcpKTtcbiAgICAgICAgT3V0ZXJDb250YWluZXIuc2V0Vmlld3Mob3V0ZXJDb250YWluZXIsIHJhd1VpQ29uZmlnLnZpZXdzKTtcbiAgICAgICAgc2V0dXBFdmVudHMkMShlZGl0b3IsIHVpUmVmcyk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNvY2tldCA9IE91dGVyQ29udGFpbmVyLmdldFNvY2tldChvdXRlckNvbnRhaW5lcikuZ2V0T3JEaWUoJ0NvdWxkIG5vdCBmaW5kIGV4cGVjdGVkIHNvY2tldCBlbGVtZW50Jyk7XG4gICAgICBpZiAoaXNpT1MxMikge1xuICAgICAgICBzZXRBbGwoc29ja2V0LmVsZW1lbnQsIHtcbiAgICAgICAgICAnb3ZlcmZsb3cnOiAnc2Nyb2xsJyxcbiAgICAgICAgICAnLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmcnOiAndG91Y2gnXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBsaW1pdCA9IGZpcnN0KCgpID0+IHtcbiAgICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ1Njcm9sbENvbnRlbnQnKTtcbiAgICAgICAgfSwgMjApO1xuICAgICAgICBjb25zdCB1bmJpbmRlciA9IGJpbmQoc29ja2V0LmVsZW1lbnQsICdzY3JvbGwnLCBsaW1pdC50aHJvdHRsZSk7XG4gICAgICAgIGVkaXRvci5vbigncmVtb3ZlJywgdW5iaW5kZXIudW5iaW5kKTtcbiAgICAgIH1cbiAgICAgIHNldHVwUmVhZG9ubHlNb2RlU3dpdGNoKGVkaXRvciwgdWlSZWZzKTtcbiAgICAgIGVkaXRvci5hZGRDb21tYW5kKCdUb2dnbGVTaWRlYmFyJywgKF91aSwgdmFsdWUpID0+IHtcbiAgICAgICAgT3V0ZXJDb250YWluZXIudG9nZ2xlU2lkZWJhcihvdXRlckNvbnRhaW5lciwgdmFsdWUpO1xuICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ1RvZ2dsZVNpZGViYXInKTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLmFkZFF1ZXJ5VmFsdWVIYW5kbGVyKCdUb2dnbGVTaWRlYmFyJywgKCkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSBPdXRlckNvbnRhaW5lci53aGljaFNpZGViYXIob3V0ZXJDb250YWluZXIpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLmFkZENvbW1hbmQoJ1RvZ2dsZVZpZXcnLCAoX3VpLCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoT3V0ZXJDb250YWluZXIudG9nZ2xlVmlldyhvdXRlckNvbnRhaW5lciwgdmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gb3V0ZXJDb250YWluZXIuZWxlbWVudDtcbiAgICAgICAgICBtYWluVWkubW90aGVyc2hpcC5icm9hZGNhc3RPbihbZGlzbWlzc1BvcHVwcygpXSwgeyB0YXJnZXQgfSk7XG4gICAgICAgICAgZWFjaCQxKHVpTW90aGVyc2hpcHMsIG0gPT4ge1xuICAgICAgICAgICAgbS5icm9hZGNhc3RPbihbZGlzbWlzc1BvcHVwcygpXSwgeyB0YXJnZXQgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGlzTnVsbChPdXRlckNvbnRhaW5lci53aGljaFZpZXcob3V0ZXJDb250YWluZXIpKSkge1xuICAgICAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICAgICAgICAgIE91dGVyQ29udGFpbmVyLnJlZnJlc2hUb29sYmFyKG91dGVyQ29udGFpbmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLmFkZFF1ZXJ5VmFsdWVIYW5kbGVyKCdUb2dnbGVWaWV3JywgKCkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSBPdXRlckNvbnRhaW5lci53aGljaFZpZXcob3V0ZXJDb250YWluZXIpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdG9vbGJhck1vZGUgPSBnZXRUb29sYmFyTW9kZShlZGl0b3IpO1xuICAgICAgY29uc3QgcmVmcmVzaERyYXdlciA9ICgpID0+IHtcbiAgICAgICAgT3V0ZXJDb250YWluZXIucmVmcmVzaFRvb2xiYXIodWlSZWZzLm1haW5VaS5vdXRlckNvbnRhaW5lcik7XG4gICAgICB9O1xuICAgICAgaWYgKHRvb2xiYXJNb2RlID09PSBUb29sYmFyTW9kZSQxLnNsaWRpbmcgfHwgdG9vbGJhck1vZGUgPT09IFRvb2xiYXJNb2RlJDEuZmxvYXRpbmcpIHtcbiAgICAgICAgZWRpdG9yLm9uKCdSZXNpemVXaW5kb3cgUmVzaXplRWRpdG9yIFJlc2l6ZUNvbnRlbnQnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgd2lkdGggPSBlZGl0b3IuZ2V0V2luKCkuaW5uZXJXaWR0aDtcbiAgICAgICAgICBpZiAod2lkdGggIT09IGxhc3RUb29sYmFyV2lkdGguZ2V0KCkpIHtcbiAgICAgICAgICAgIHJlZnJlc2hEcmF3ZXIoKTtcbiAgICAgICAgICAgIGxhc3RUb29sYmFyV2lkdGguc2V0KHdpZHRoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgYXBpID0ge1xuICAgICAgICBzZXRFbmFibGVkOiBzdGF0ZSA9PiB7XG4gICAgICAgICAgYnJvYWRjYXN0UmVhZG9ubHkodWlSZWZzLCAhc3RhdGUpO1xuICAgICAgICB9LFxuICAgICAgICBpc0VuYWJsZWQ6ICgpID0+ICFEaXNhYmxpbmcuaXNEaXNhYmxlZChvdXRlckNvbnRhaW5lcilcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZnJhbWVDb250YWluZXI6IHNvY2tldC5lbGVtZW50LmRvbSxcbiAgICAgICAgZWRpdG9yQ29udGFpbmVyOiBvdXRlckNvbnRhaW5lci5lbGVtZW50LmRvbSxcbiAgICAgICAgYXBpXG4gICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgSWZyYW1lID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIHJlbmRlcjogcmVuZGVyJDFcbiAgICB9KTtcblxuICAgIGNvbnN0IHBhcnNlVG9JbnQgPSB2YWwgPT4ge1xuICAgICAgY29uc3QgcmUgPSAvXlswLTlcXC5dKyh8cHgpJC9pO1xuICAgICAgaWYgKHJlLnRlc3QoJycgKyB2YWwpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHBhcnNlSW50KCcnICsgdmFsLCAxMCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IG51bVRvUHggPSB2YWwgPT4gaXNOdW1iZXIodmFsKSA/IHZhbCArICdweCcgOiB2YWw7XG4gICAgY29uc3QgY2FsY0NhcHBlZFNpemUgPSAoc2l6ZSwgbWluU2l6ZSwgbWF4U2l6ZSkgPT4ge1xuICAgICAgY29uc3QgbWluT3ZlcnJpZGUgPSBtaW5TaXplLmZpbHRlcihtaW4gPT4gc2l6ZSA8IG1pbik7XG4gICAgICBjb25zdCBtYXhPdmVycmlkZSA9IG1heFNpemUuZmlsdGVyKG1heCA9PiBzaXplID4gbWF4KTtcbiAgICAgIHJldHVybiBtaW5PdmVycmlkZS5vcihtYXhPdmVycmlkZSkuZ2V0T3Ioc2l6ZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldEhlaWdodCA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBiYXNlSGVpZ2h0ID0gZ2V0SGVpZ2h0T3B0aW9uKGVkaXRvcik7XG4gICAgICBjb25zdCBtaW5IZWlnaHQgPSBnZXRNaW5IZWlnaHRPcHRpb24oZWRpdG9yKTtcbiAgICAgIGNvbnN0IG1heEhlaWdodCA9IGdldE1heEhlaWdodE9wdGlvbihlZGl0b3IpO1xuICAgICAgcmV0dXJuIHBhcnNlVG9JbnQoYmFzZUhlaWdodCkubWFwKGhlaWdodCA9PiBjYWxjQ2FwcGVkU2l6ZShoZWlnaHQsIG1pbkhlaWdodCwgbWF4SGVpZ2h0KSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRIZWlnaHRXaXRoRmFsbGJhY2sgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgaGVpZ2h0ID0gZ2V0SGVpZ2h0KGVkaXRvcik7XG4gICAgICByZXR1cm4gaGVpZ2h0LmdldE9yKGdldEhlaWdodE9wdGlvbihlZGl0b3IpKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFdpZHRoID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGJhc2VXaWR0aCA9IGdldFdpZHRoT3B0aW9uKGVkaXRvcik7XG4gICAgICBjb25zdCBtaW5XaWR0aCA9IGdldE1pbldpZHRoT3B0aW9uKGVkaXRvcik7XG4gICAgICBjb25zdCBtYXhXaWR0aCA9IGdldE1heFdpZHRoT3B0aW9uKGVkaXRvcik7XG4gICAgICByZXR1cm4gcGFyc2VUb0ludChiYXNlV2lkdGgpLm1hcCh3aWR0aCA9PiBjYWxjQ2FwcGVkU2l6ZSh3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoKSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRXaWR0aFdpdGhGYWxsYmFjayA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCB3aWR0aCA9IGdldFdpZHRoKGVkaXRvcik7XG4gICAgICByZXR1cm4gd2lkdGguZ2V0T3IoZ2V0V2lkdGhPcHRpb24oZWRpdG9yKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHtUb29sYmFyTG9jYXRpb24sIFRvb2xiYXJNb2RlfSA9IE9wdGlvbnM7XG4gICAgY29uc3QgbWF4aW11bURpc3RhbmNlVG9FZGdlID0gNDA7XG4gICAgY29uc3QgSW5saW5lSGVhZGVyID0gKGVkaXRvciwgdGFyZ2V0RWxtLCB1aVJlZnMsIGJhY2tzdGFnZSwgZmxvYXRDb250YWluZXIpID0+IHtcbiAgICAgIGNvbnN0IHttYWluVWksIHVpTW90aGVyc2hpcHN9ID0gdWlSZWZzO1xuICAgICAgY29uc3QgRE9NID0gZ2xvYmFsJDcuRE9NO1xuICAgICAgY29uc3QgdXNlRml4ZWRUb29sYmFyQ29udGFpbmVyID0gdXNlRml4ZWRDb250YWluZXIoZWRpdG9yKTtcbiAgICAgIGNvbnN0IGlzU3RpY2t5ID0gaXNTdGlja3lUb29sYmFyKGVkaXRvcik7XG4gICAgICBjb25zdCBlZGl0b3JNYXhXaWR0aE9wdCA9IGdldE1heFdpZHRoT3B0aW9uKGVkaXRvcikub3IoZ2V0V2lkdGgoZWRpdG9yKSk7XG4gICAgICBjb25zdCBoZWFkZXJCYWNrc3RhZ2UgPSBiYWNrc3RhZ2Uuc2hhcmVkLmhlYWRlcjtcbiAgICAgIGNvbnN0IGlzUG9zaXRpb25lZEF0VG9wID0gaGVhZGVyQmFja3N0YWdlLmlzUG9zaXRpb25lZEF0VG9wO1xuICAgICAgY29uc3QgdG9vbGJhck1vZGUgPSBnZXRUb29sYmFyTW9kZShlZGl0b3IpO1xuICAgICAgY29uc3QgaXNTcGxpdFRvb2xiYXIgPSB0b29sYmFyTW9kZSA9PT0gVG9vbGJhck1vZGUuc2xpZGluZyB8fCB0b29sYmFyTW9kZSA9PT0gVG9vbGJhck1vZGUuZmxvYXRpbmc7XG4gICAgICBjb25zdCB2aXNpYmxlID0gQ2VsbChmYWxzZSk7XG4gICAgICBjb25zdCBpc1Zpc2libGUgPSAoKSA9PiB2aXNpYmxlLmdldCgpICYmICFlZGl0b3IucmVtb3ZlZDtcbiAgICAgIGNvbnN0IGNhbGNUb29sYmFyT2Zmc2V0ID0gdG9vbGJhciA9PiBpc1NwbGl0VG9vbGJhciA/IHRvb2xiYXIuZm9sZChjb25zdGFudCQxKDApLCB0YmFyID0+IHRiYXIuY29tcG9uZW50cygpLmxlbmd0aCA+IDEgPyBnZXQkZCh0YmFyLmNvbXBvbmVudHMoKVsxXS5lbGVtZW50KSA6IDApIDogMDtcbiAgICAgIGNvbnN0IGNhbGNNb2RlID0gY29udGFpbmVyID0+IHtcbiAgICAgICAgc3dpdGNoIChnZXRUb29sYmFyTG9jYXRpb24oZWRpdG9yKSkge1xuICAgICAgICBjYXNlIFRvb2xiYXJMb2NhdGlvbi5hdXRvOlxuICAgICAgICAgIGNvbnN0IHRvb2xiYXIgPSBPdXRlckNvbnRhaW5lci5nZXRUb29sYmFyKG1haW5VaS5vdXRlckNvbnRhaW5lcik7XG4gICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gY2FsY1Rvb2xiYXJPZmZzZXQodG9vbGJhcik7XG4gICAgICAgICAgY29uc3QgdG9vbGJhckhlaWdodCA9IGdldCRkKGNvbnRhaW5lci5lbGVtZW50KSAtIG9mZnNldDtcbiAgICAgICAgICBjb25zdCB0YXJnZXRCb3VuZHMgPSBib3gkMSh0YXJnZXRFbG0pO1xuICAgICAgICAgIGNvbnN0IHJvb21BdFRvcCA9IHRhcmdldEJvdW5kcy55ID4gdG9vbGJhckhlaWdodDtcbiAgICAgICAgICBpZiAocm9vbUF0VG9wKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3RvcCc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IGRvY3VtZW50RWxlbWVudCh0YXJnZXRFbG0pO1xuICAgICAgICAgICAgY29uc3QgZG9jSGVpZ2h0ID0gTWF0aC5tYXgoZG9jLmRvbS5zY3JvbGxIZWlnaHQsIGdldCRkKGRvYykpO1xuICAgICAgICAgICAgY29uc3Qgcm9vbUF0Qm90dG9tID0gdGFyZ2V0Qm91bmRzLmJvdHRvbSA8IGRvY0hlaWdodCAtIHRvb2xiYXJIZWlnaHQ7XG4gICAgICAgICAgICBpZiAocm9vbUF0Qm90dG9tKSB7XG4gICAgICAgICAgICAgIHJldHVybiAnYm90dG9tJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IHdpbkJvdW5kcyA9IHdpbigpO1xuICAgICAgICAgICAgICBjb25zdCBpc1Jvb21BdEJvdHRvbVZpZXdwb3J0ID0gd2luQm91bmRzLmJvdHRvbSA8IHRhcmdldEJvdW5kcy5ib3R0b20gLSB0b29sYmFySGVpZ2h0O1xuICAgICAgICAgICAgICByZXR1cm4gaXNSb29tQXRCb3R0b21WaWV3cG9ydCA/ICdib3R0b20nIDogJ3RvcCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIFRvb2xiYXJMb2NhdGlvbi5ib3R0b206XG4gICAgICAgICAgcmV0dXJuICdib3R0b20nO1xuICAgICAgICBjYXNlIFRvb2xiYXJMb2NhdGlvbi50b3A6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuICd0b3AnO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0dXBNb2RlID0gbW9kZSA9PiB7XG4gICAgICAgIGZsb2F0Q29udGFpbmVyLm9uKGNvbnRhaW5lciA9PiB7XG4gICAgICAgICAgRG9ja2luZy5zZXRNb2Rlcyhjb250YWluZXIsIFttb2RlXSk7XG4gICAgICAgICAgaGVhZGVyQmFja3N0YWdlLnNldERvY2tpbmdNb2RlKG1vZGUpO1xuICAgICAgICAgIGNvbnN0IHZlcnRpY2FsRGlyID0gaXNQb3NpdGlvbmVkQXRUb3AoKSA/IEF0dHJpYnV0ZVZhbHVlLlRvcFRvQm90dG9tIDogQXR0cmlidXRlVmFsdWUuQm90dG9tVG9Ub3A7XG4gICAgICAgICAgc2V0JDkoY29udGFpbmVyLmVsZW1lbnQsIEF0dHJpYnV0ZSwgdmVydGljYWxEaXIpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCB1cGRhdGVDaHJvbWVXaWR0aCA9ICgpID0+IHtcbiAgICAgICAgZmxvYXRDb250YWluZXIub24oY29udGFpbmVyID0+IHtcbiAgICAgICAgICBjb25zdCBtYXhXaWR0aCA9IGVkaXRvck1heFdpZHRoT3B0LmdldE9yVGh1bmsoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYm9keU1hcmdpbiA9IHBhcnNlVG9JbnQoZ2V0JGUoYm9keSgpLCAnbWFyZ2luLWxlZnQnKSkuZ2V0T3IoMCk7XG4gICAgICAgICAgICByZXR1cm4gZ2V0JGMoYm9keSgpKSAtIGFic29sdXRlJDModGFyZ2V0RWxtKS5sZWZ0ICsgYm9keU1hcmdpbjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzZXQkOChjb250YWluZXIuZWxlbWVudCwgJ21heC13aWR0aCcsIG1heFdpZHRoICsgJ3B4Jyk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVwZGF0ZUNocm9tZVBvc2l0aW9uID0gb3B0VG9vbGJhcldpZHRoID0+IHtcbiAgICAgICAgZmxvYXRDb250YWluZXIub24oY29udGFpbmVyID0+IHtcbiAgICAgICAgICBjb25zdCB0b29sYmFyID0gT3V0ZXJDb250YWluZXIuZ2V0VG9vbGJhcihtYWluVWkub3V0ZXJDb250YWluZXIpO1xuICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGNhbGNUb29sYmFyT2Zmc2V0KHRvb2xiYXIpO1xuICAgICAgICAgIGNvbnN0IHRhcmdldEJvdW5kcyA9IGJveCQxKHRhcmdldEVsbSk7XG4gICAgICAgICAgY29uc3Qge3RvcCwgbGVmdH0gPSBnZXRPZmZzZXRQYXJlbnQkMShlZGl0b3IsIG1haW5VaS5vdXRlckNvbnRhaW5lci5lbGVtZW50KS5mb2xkKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHRvcDogaXNQb3NpdGlvbmVkQXRUb3AoKSA/IE1hdGgubWF4KHRhcmdldEJvdW5kcy55IC0gZ2V0JGQoY29udGFpbmVyLmVsZW1lbnQpICsgb2Zmc2V0LCAwKSA6IHRhcmdldEJvdW5kcy5ib3R0b20sXG4gICAgICAgICAgICAgIGxlZnQ6IHRhcmdldEJvdW5kcy54XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0sIG9mZnNldFBhcmVudCA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXRCb3ggPSBib3gkMShvZmZzZXRQYXJlbnQpO1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsRGVsdGEgPSAoX2EgPSBvZmZzZXRQYXJlbnQuZG9tLnNjcm9sbFRvcCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcbiAgICAgICAgICAgIGNvbnN0IGlzT2Zmc2V0UGFyZW50Qm9keSA9IGVxKG9mZnNldFBhcmVudCwgYm9keSgpKTtcbiAgICAgICAgICAgIGNvbnN0IHRvcFZhbHVlID0gaXNPZmZzZXRQYXJlbnRCb2R5ID8gTWF0aC5tYXgodGFyZ2V0Qm91bmRzLnkgLSBnZXQkZChjb250YWluZXIuZWxlbWVudCkgKyBvZmZzZXQsIDApIDogdGFyZ2V0Qm91bmRzLnkgLSBvZmZzZXRCb3gueSArIHNjcm9sbERlbHRhIC0gZ2V0JGQoY29udGFpbmVyLmVsZW1lbnQpICsgb2Zmc2V0O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdG9wOiBpc1Bvc2l0aW9uZWRBdFRvcCgpID8gdG9wVmFsdWUgOiB0YXJnZXRCb3VuZHMuYm90dG9tLFxuICAgICAgICAgICAgICBsZWZ0OiBpc09mZnNldFBhcmVudEJvZHkgPyB0YXJnZXRCb3VuZHMueCA6IHRhcmdldEJvdW5kcy54IC0gb2Zmc2V0Qm94LnhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgYmFzZVByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIGxlZnQ6IE1hdGgucm91bmQobGVmdCkgKyAncHgnLFxuICAgICAgICAgICAgdG9wOiBNYXRoLnJvdW5kKHRvcCkgKyAncHgnXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCB3aWR0aFByb3BlcnRpZXMgPSBvcHRUb29sYmFyV2lkdGgubWFwKHRvb2xiYXJXaWR0aCA9PiB7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGwgPSBnZXQkYigpO1xuICAgICAgICAgICAgY29uc3QgbWluaW11bVRvb2xiYXJXaWR0aCA9IDE1MDtcbiAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZVdpZHRoID0gd2luZG93LmlubmVyV2lkdGggLSAobGVmdCAtIHNjcm9sbC5sZWZ0KTtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgoTWF0aC5taW4odG9vbGJhcldpZHRoLCBhdmFpbGFibGVXaWR0aCksIG1pbmltdW1Ub29sYmFyV2lkdGgpO1xuICAgICAgICAgICAgcmV0dXJuIHsgd2lkdGg6IHdpZHRoICsgJ3B4JyB9O1xuICAgICAgICAgIH0pLmdldE9yKHt9KTtcbiAgICAgICAgICBzZXRBbGwobWFpblVpLm91dGVyQ29udGFpbmVyLmVsZW1lbnQsIHtcbiAgICAgICAgICAgIC4uLmJhc2VQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgLi4ud2lkdGhQcm9wZXJ0aWVzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldE9mZnNldFBhcmVudCQxID0gKGVkaXRvciwgZWxlbWVudCkgPT4gaXNTcGxpdFVpTW9kZShlZGl0b3IpID8gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgY29uc3QgcmVwb3NpdGlvblBvcHVwcyQxID0gKCkgPT4ge1xuICAgICAgICBlYWNoJDEodWlNb3RoZXJzaGlwcywgbSA9PiB7XG4gICAgICAgICAgbS5icm9hZGNhc3RPbihbcmVwb3NpdGlvblBvcHVwcygpXSwge30pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN0b3JlQW5kR2V0Q29tcGxldGVPdXRlckNvbnRhaW5lcldpZHRoID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXVzZUZpeGVkVG9vbGJhckNvbnRhaW5lcikge1xuICAgICAgICAgIGNvbnN0IHRvb2xiYXJDdXJyZW50UmlnaHRzaWRlUG9zaXRpb24gPSBhYnNvbHV0ZSQzKG1haW5VaS5vdXRlckNvbnRhaW5lci5lbGVtZW50KS5sZWZ0ICsgZ2V0T3V0ZXIkMShtYWluVWkub3V0ZXJDb250YWluZXIuZWxlbWVudCk7XG4gICAgICAgICAgaWYgKHRvb2xiYXJDdXJyZW50UmlnaHRzaWRlUG9zaXRpb24gPj0gd2luZG93LmlubmVyV2lkdGggLSBtYXhpbXVtRGlzdGFuY2VUb0VkZ2UgfHwgZ2V0UmF3KG1haW5VaS5vdXRlckNvbnRhaW5lci5lbGVtZW50LCAnd2lkdGgnKS5pc1NvbWUoKSkge1xuICAgICAgICAgICAgc2V0JDgobWFpblVpLm91dGVyQ29udGFpbmVyLmVsZW1lbnQsICdwb3NpdGlvbicsICdhYnNvbHV0ZScpO1xuICAgICAgICAgICAgc2V0JDgobWFpblVpLm91dGVyQ29udGFpbmVyLmVsZW1lbnQsICdsZWZ0JywgJzBweCcpO1xuICAgICAgICAgICAgcmVtb3ZlJDYobWFpblVpLm91dGVyQ29udGFpbmVyLmVsZW1lbnQsICd3aWR0aCcpO1xuICAgICAgICAgICAgY29uc3QgdyA9IGdldE91dGVyJDEobWFpblVpLm91dGVyQ29udGFpbmVyLmVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCB1cGRhdGUgPSBzdGlja3lBY3Rpb24gPT4ge1xuICAgICAgICBpZiAoIWlzVmlzaWJsZSgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdXNlRml4ZWRUb29sYmFyQ29udGFpbmVyKSB7XG4gICAgICAgICAgdXBkYXRlQ2hyb21lV2lkdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRUb29sYmFyV2lkdGggPSB1c2VGaXhlZFRvb2xiYXJDb250YWluZXIgPyBPcHRpb25hbC5ub25lKCkgOiByZXN0b3JlQW5kR2V0Q29tcGxldGVPdXRlckNvbnRhaW5lcldpZHRoKCk7XG4gICAgICAgIGlmIChpc1NwbGl0VG9vbGJhcikge1xuICAgICAgICAgIE91dGVyQ29udGFpbmVyLnJlZnJlc2hUb29sYmFyKG1haW5VaS5vdXRlckNvbnRhaW5lcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF1c2VGaXhlZFRvb2xiYXJDb250YWluZXIpIHtcbiAgICAgICAgICB1cGRhdGVDaHJvbWVQb3NpdGlvbihvcHRUb29sYmFyV2lkdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1N0aWNreSkge1xuICAgICAgICAgIGZsb2F0Q29udGFpbmVyLm9uKHN0aWNreUFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmVwb3NpdGlvblBvcHVwcyQxKCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZG9VcGRhdGVNb2RlID0gKCkgPT4ge1xuICAgICAgICBpZiAodXNlRml4ZWRUb29sYmFyQ29udGFpbmVyIHx8ICFpc1N0aWNreSB8fCAhaXNWaXNpYmxlKCkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZsb2F0Q29udGFpbmVyLmdldCgpLmV4aXN0cyhmYyA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudE1vZGUgPSBoZWFkZXJCYWNrc3RhZ2UuZ2V0RG9ja2luZ01vZGUoKTtcbiAgICAgICAgICBjb25zdCBuZXdNb2RlID0gY2FsY01vZGUoZmMpO1xuICAgICAgICAgIGlmIChuZXdNb2RlICE9PSBjdXJyZW50TW9kZSkge1xuICAgICAgICAgICAgc2V0dXBNb2RlKG5ld01vZGUpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNob3cgPSAoKSA9PiB7XG4gICAgICAgIHZpc2libGUuc2V0KHRydWUpO1xuICAgICAgICBzZXQkOChtYWluVWkub3V0ZXJDb250YWluZXIuZWxlbWVudCwgJ2Rpc3BsYXknLCAnZmxleCcpO1xuICAgICAgICBET00uYWRkQ2xhc3MoZWRpdG9yLmdldEJvZHkoKSwgJ21jZS1lZGl0LWZvY3VzJyk7XG4gICAgICAgIGVhY2gkMSh1aU1vdGhlcnNoaXBzLCBtID0+IHtcbiAgICAgICAgICByZW1vdmUkNihtLmVsZW1lbnQsICdkaXNwbGF5Jyk7XG4gICAgICAgIH0pO1xuICAgICAgICBkb1VwZGF0ZU1vZGUoKTtcbiAgICAgICAgaWYgKGlzU3BsaXRVaU1vZGUoZWRpdG9yKSkge1xuICAgICAgICAgIHVwZGF0ZShlbGVtID0+IERvY2tpbmcuaXNEb2NrZWQoZWxlbSkgPyBEb2NraW5nLnJlc2V0KGVsZW0pIDogRG9ja2luZy5yZWZyZXNoKGVsZW0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1cGRhdGUoRG9ja2luZy5yZWZyZXNoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGhpZGUgPSAoKSA9PiB7XG4gICAgICAgIHZpc2libGUuc2V0KGZhbHNlKTtcbiAgICAgICAgc2V0JDgobWFpblVpLm91dGVyQ29udGFpbmVyLmVsZW1lbnQsICdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAgICAgRE9NLnJlbW92ZUNsYXNzKGVkaXRvci5nZXRCb2R5KCksICdtY2UtZWRpdC1mb2N1cycpO1xuICAgICAgICBlYWNoJDEodWlNb3RoZXJzaGlwcywgbSA9PiB7XG4gICAgICAgICAgc2V0JDgobS5lbGVtZW50LCAnZGlzcGxheScsICdub25lJyk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVwZGF0ZU1vZGUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYW5nZWRNb2RlID0gZG9VcGRhdGVNb2RlKCk7XG4gICAgICAgIGlmIChjaGFuZ2VkTW9kZSkge1xuICAgICAgICAgIHVwZGF0ZShEb2NraW5nLnJlc2V0KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmlzaWJsZSxcbiAgICAgICAgaXNQb3NpdGlvbmVkQXRUb3AsXG4gICAgICAgIHNob3csXG4gICAgICAgIGhpZGUsXG4gICAgICAgIHVwZGF0ZSxcbiAgICAgICAgdXBkYXRlTW9kZSxcbiAgICAgICAgcmVwb3NpdGlvblBvcHVwczogcmVwb3NpdGlvblBvcHVwcyQxXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRUYXJnZXRQb3NBbmRCb3VuZHMgPSAodGFyZ2V0RWxtLCBpc1Rvb2xiYXJUb3ApID0+IHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IGJveCQxKHRhcmdldEVsbSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwb3M6IGlzVG9vbGJhclRvcCA/IGJvdW5kcy55IDogYm91bmRzLmJvdHRvbSxcbiAgICAgICAgYm91bmRzXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3Qgc2V0dXBFdmVudHMgPSAoZWRpdG9yLCB0YXJnZXRFbG0sIHVpLCB0b29sYmFyUGVyc2lzdCkgPT4ge1xuICAgICAgY29uc3QgcHJldlBvc0FuZEJvdW5kcyA9IENlbGwoZ2V0VGFyZ2V0UG9zQW5kQm91bmRzKHRhcmdldEVsbSwgdWkuaXNQb3NpdGlvbmVkQXRUb3AoKSkpO1xuICAgICAgY29uc3QgcmVzaXplQ29udGVudCA9IGUgPT4ge1xuICAgICAgICBjb25zdCB7cG9zLCBib3VuZHN9ID0gZ2V0VGFyZ2V0UG9zQW5kQm91bmRzKHRhcmdldEVsbSwgdWkuaXNQb3NpdGlvbmVkQXRUb3AoKSk7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBwb3M6IHByZXZQb3MsXG4gICAgICAgICAgYm91bmRzOiBwcmV2Qm91bmRzXG4gICAgICAgIH0gPSBwcmV2UG9zQW5kQm91bmRzLmdldCgpO1xuICAgICAgICBjb25zdCBoYXNSZXNpemVkID0gYm91bmRzLmhlaWdodCAhPT0gcHJldkJvdW5kcy5oZWlnaHQgfHwgYm91bmRzLndpZHRoICE9PSBwcmV2Qm91bmRzLndpZHRoO1xuICAgICAgICBwcmV2UG9zQW5kQm91bmRzLnNldCh7XG4gICAgICAgICAgcG9zLFxuICAgICAgICAgIGJvdW5kc1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGhhc1Jlc2l6ZWQpIHtcbiAgICAgICAgICBmaXJlUmVzaXplQ29udGVudChlZGl0b3IsIGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1aS5pc1Zpc2libGUoKSkge1xuICAgICAgICAgIGlmIChwcmV2UG9zICE9PSBwb3MpIHtcbiAgICAgICAgICAgIHVpLnVwZGF0ZShEb2NraW5nLnJlc2V0KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc1Jlc2l6ZWQpIHtcbiAgICAgICAgICAgIHVpLnVwZGF0ZU1vZGUoKTtcbiAgICAgICAgICAgIHVpLnJlcG9zaXRpb25Qb3B1cHMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpZiAoIXRvb2xiYXJQZXJzaXN0KSB7XG4gICAgICAgIGVkaXRvci5vbignYWN0aXZhdGUnLCB1aS5zaG93KTtcbiAgICAgICAgZWRpdG9yLm9uKCdkZWFjdGl2YXRlJywgdWkuaGlkZSk7XG4gICAgICB9XG4gICAgICBlZGl0b3Iub24oJ1NraW5Mb2FkZWQgUmVzaXplV2luZG93JywgKCkgPT4gdWkudXBkYXRlKERvY2tpbmcucmVzZXQpKTtcbiAgICAgIGVkaXRvci5vbignTm9kZUNoYW5nZSBrZXlkb3duJywgZSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiByZXNpemVDb250ZW50KGUpKTtcbiAgICAgIH0pO1xuICAgICAgbGV0IGxhc3RTY3JvbGxYID0gMDtcbiAgICAgIGNvbnN0IHVwZGF0ZVVpID0gbGFzdCgoKSA9PiB1aS51cGRhdGUoRG9ja2luZy5yZWZyZXNoKSwgMzMpO1xuICAgICAgZWRpdG9yLm9uKCdTY3JvbGxXaW5kb3cnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1Njcm9sbFggPSBnZXQkYigpLmxlZnQ7XG4gICAgICAgIGlmIChuZXdTY3JvbGxYICE9PSBsYXN0U2Nyb2xsWCkge1xuICAgICAgICAgIGxhc3RTY3JvbGxYID0gbmV3U2Nyb2xsWDtcbiAgICAgICAgICB1cGRhdGVVaS50aHJvdHRsZSgpO1xuICAgICAgICB9XG4gICAgICAgIHVpLnVwZGF0ZU1vZGUoKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGlzU3BsaXRVaU1vZGUoZWRpdG9yKSkge1xuICAgICAgICBlZGl0b3Iub24oJ0VsZW1lbnRTY3JvbGwnLCBfYXJncyA9PiB7XG4gICAgICAgICAgdWkudXBkYXRlKERvY2tpbmcucmVmcmVzaCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgZWxlbWVudExvYWQgPSB1bmJpbmRhYmxlKCk7XG4gICAgICBlbGVtZW50TG9hZC5zZXQoY2FwdHVyZShTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKSwgJ2xvYWQnLCBlID0+IHJlc2l6ZUNvbnRlbnQoZS5yYXcpKSk7XG4gICAgICBlZGl0b3Iub24oJ3JlbW92ZScsICgpID0+IHtcbiAgICAgICAgZWxlbWVudExvYWQuY2xlYXIoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyID0gYXN5bmMgKGVkaXRvciwgdWlSZWZzLCByYXdVaUNvbmZpZywgYmFja3N0YWdlLCBhcmdzKSA9PiB7XG4gICAgICBjb25zdCB7bWFpblVpfSA9IHVpUmVmcztcbiAgICAgIGNvbnN0IGZsb2F0Q29udGFpbmVyID0gdmFsdWUkMigpO1xuICAgICAgY29uc3QgdGFyZ2V0RWxtID0gU3VnYXJFbGVtZW50LmZyb21Eb20oYXJncy50YXJnZXROb2RlKTtcbiAgICAgIGNvbnN0IHVpID0gSW5saW5lSGVhZGVyKGVkaXRvciwgdGFyZ2V0RWxtLCB1aVJlZnMsIGJhY2tzdGFnZSwgZmxvYXRDb250YWluZXIpO1xuICAgICAgY29uc3QgdG9vbGJhclBlcnNpc3QgPSBpc1Rvb2xiYXJQZXJzaXN0KGVkaXRvcik7XG4gICAgICBhd2FpdCBpbmxpbmUoZWRpdG9yKTtcbiAgICAgIGNvbnN0IHJlbmRlciA9ICgpID0+IHtcbiAgICAgICAgaWYgKGZsb2F0Q29udGFpbmVyLmlzU2V0KCkpIHtcbiAgICAgICAgICB1aS5zaG93KCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZsb2F0Q29udGFpbmVyLnNldChPdXRlckNvbnRhaW5lci5nZXRIZWFkZXIobWFpblVpLm91dGVyQ29udGFpbmVyKS5nZXRPckRpZSgpKTtcbiAgICAgICAgY29uc3QgdWlDb250YWluZXIgPSBnZXRVaUNvbnRhaW5lcihlZGl0b3IpO1xuICAgICAgICBpZiAoaXNTcGxpdFVpTW9kZShlZGl0b3IpKSB7XG4gICAgICAgICAgYXR0YWNoU3lzdGVtQWZ0ZXIodGFyZ2V0RWxtLCBtYWluVWkubW90aGVyc2hpcCk7XG4gICAgICAgICAgYXR0YWNoU3lzdGVtQWZ0ZXIodGFyZ2V0RWxtLCB1aVJlZnMucG9wdXBVaS5tb3RoZXJzaGlwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhdHRhY2hTeXN0ZW0odWlDb250YWluZXIsIG1haW5VaS5tb3RoZXJzaGlwKTtcbiAgICAgICAgfVxuICAgICAgICBhdHRhY2hTeXN0ZW0odWlDb250YWluZXIsIHVpUmVmcy5kaWFsb2dVaS5tb3RoZXJzaGlwKTtcbiAgICAgICAgc2V0VG9vbGJhcihlZGl0b3IsIHVpUmVmcywgcmF3VWlDb25maWcsIGJhY2tzdGFnZSk7XG4gICAgICAgIE91dGVyQ29udGFpbmVyLnNldE1lbnViYXIobWFpblVpLm91dGVyQ29udGFpbmVyLCBpZGVudGlmeU1lbnVzKGVkaXRvciwgcmF3VWlDb25maWcpKTtcbiAgICAgICAgdWkuc2hvdygpO1xuICAgICAgICBzZXR1cEV2ZW50cyhlZGl0b3IsIHRhcmdldEVsbSwgdWksIHRvb2xiYXJQZXJzaXN0KTtcbiAgICAgICAgZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLm9uKCdzaG93JywgcmVuZGVyKTtcbiAgICAgIGVkaXRvci5vbignaGlkZScsIHVpLmhpZGUpO1xuICAgICAgaWYgKCF0b29sYmFyUGVyc2lzdCkge1xuICAgICAgICBlZGl0b3Iub24oJ2ZvY3VzJywgcmVuZGVyKTtcbiAgICAgICAgZWRpdG9yLm9uKCdibHVyJywgdWkuaGlkZSk7XG4gICAgICB9XG4gICAgICBlZGl0b3Iub24oJ2luaXQnLCAoKSA9PiB7XG4gICAgICAgIGlmIChlZGl0b3IuaGFzRm9jdXMoKSB8fCB0b29sYmFyUGVyc2lzdCkge1xuICAgICAgICAgIHJlbmRlcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHNldHVwUmVhZG9ubHlNb2RlU3dpdGNoKGVkaXRvciwgdWlSZWZzKTtcbiAgICAgIGNvbnN0IGFwaSA9IHtcbiAgICAgICAgc2hvdzogcmVuZGVyLFxuICAgICAgICBoaWRlOiB1aS5oaWRlLFxuICAgICAgICBzZXRFbmFibGVkOiBzdGF0ZSA9PiB7XG4gICAgICAgICAgYnJvYWRjYXN0UmVhZG9ubHkodWlSZWZzLCAhc3RhdGUpO1xuICAgICAgICB9LFxuICAgICAgICBpc0VuYWJsZWQ6ICgpID0+ICFEaXNhYmxpbmcuaXNEaXNhYmxlZChtYWluVWkub3V0ZXJDb250YWluZXIpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWRpdG9yQ29udGFpbmVyOiBtYWluVWkub3V0ZXJDb250YWluZXIuZWxlbWVudC5kb20sXG4gICAgICAgIGFwaVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgdmFyIElubGluZSA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICByZW5kZXI6IHJlbmRlclxuICAgIH0pO1xuXG4gICAgY29uc3QgTGF6eVVpUmVmZXJlbmNlcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGRpYWxvZ1VpID0gdmFsdWUkMigpO1xuICAgICAgY29uc3QgcG9wdXBVaSA9IHZhbHVlJDIoKTtcbiAgICAgIGNvbnN0IG1haW5VaSA9IHZhbHVlJDIoKTtcbiAgICAgIGNvbnN0IGxhenlHZXRJbk91dGVyT3JEaWUgPSAobGFiZWwsIGYpID0+ICgpID0+IG1haW5VaS5nZXQoKS5iaW5kKG9jID0+IGYob2Mub3V0ZXJDb250YWluZXIpKS5nZXRPckRpZShgQ291bGQgbm90IGZpbmQgJHsgbGFiZWwgfSBlbGVtZW50IGluIE91dGVyQ29udGFpbmVyYCk7XG4gICAgICBjb25zdCBnZXRVaU1vdGhlcnNoaXBzID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBvcHREaWFsb2dNb3RoZXJzaGlwID0gZGlhbG9nVWkuZ2V0KCkubWFwKHVpID0+IHVpLm1vdGhlcnNoaXApO1xuICAgICAgICBjb25zdCBvcHRQb3B1cE1vdGhlcnNoaXAgPSBwb3B1cFVpLmdldCgpLm1hcCh1aSA9PiB1aS5tb3RoZXJzaGlwKTtcbiAgICAgICAgcmV0dXJuIG9wdERpYWxvZ01vdGhlcnNoaXAuZm9sZCgoKSA9PiBvcHRQb3B1cE1vdGhlcnNoaXAudG9BcnJheSgpLCBkbSA9PiBvcHRQb3B1cE1vdGhlcnNoaXAuZm9sZCgoKSA9PiBbZG1dLCBwbSA9PiBlcShkbS5lbGVtZW50LCBwbS5lbGVtZW50KSA/IFtkbV0gOiBbXG4gICAgICAgICAgZG0sXG4gICAgICAgICAgcG1cbiAgICAgICAgXSkpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpYWxvZ1VpLFxuICAgICAgICBwb3B1cFVpLFxuICAgICAgICBtYWluVWksXG4gICAgICAgIGdldFVpTW90aGVyc2hpcHMsXG4gICAgICAgIGxhenlHZXRJbk91dGVyT3JEaWVcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHNob3dDb250ZXh0VG9vbGJhckV2ZW50ID0gJ2NvbnRleHR0b29sYmFyLXNob3cnO1xuICAgIGNvbnN0IGhpZGVDb250ZXh0VG9vbGJhckV2ZW50ID0gJ2NvbnRleHR0b29sYmFyLWhpZGUnO1xuXG4gICAgY29uc3QgZ2V0Rm9ybUFwaSA9IGlucHV0ID0+ICh7XG4gICAgICBoaWRlOiAoKSA9PiBlbWl0KGlucHV0LCBzYW5kYm94Q2xvc2UoKSksXG4gICAgICBnZXRWYWx1ZTogKCkgPT4gUmVwcmVzZW50aW5nLmdldFZhbHVlKGlucHV0KVxuICAgIH0pO1xuICAgIGNvbnN0IHJ1bk9uRXhlY3V0ZSA9IChtZW1JbnB1dCwgb3JpZ2luYWwpID0+IHJ1biQxKGludGVybmFsVG9vbGJhckJ1dHRvbkV4ZWN1dGUsIChjb21wLCBzZSkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBtZW1JbnB1dC5nZXQoY29tcCk7XG4gICAgICBjb25zdCBmb3JtQXBpID0gZ2V0Rm9ybUFwaShpbnB1dCk7XG4gICAgICBvcmlnaW5hbC5vbkFjdGlvbihmb3JtQXBpLCBzZS5ldmVudC5idXR0b25BcGkpO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlbmRlckNvbnRleHRCdXR0b24gPSAobWVtSW5wdXQsIGJ1dHRvbiwgcHJvdmlkZXJzKSA9PiB7XG4gICAgICBjb25zdCB7cHJpbWFyeSwgLi4ucmVzdH0gPSBidXR0b24ub3JpZ2luYWw7XG4gICAgICBjb25zdCBicmlkZ2VkID0gZ2V0T3JEaWUoY3JlYXRlVG9vbGJhckJ1dHRvbih7XG4gICAgICAgIC4uLnJlc3QsXG4gICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICBvbkFjdGlvbjogbm9vcFxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIHJlbmRlclRvb2xiYXJCdXR0b25XaXRoKGJyaWRnZWQsIHByb3ZpZGVycywgW3J1bk9uRXhlY3V0ZShtZW1JbnB1dCwgYnV0dG9uKV0pO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyQ29udGV4dFRvZ2dsZUJ1dHRvbiA9IChtZW1JbnB1dCwgYnV0dG9uLCBwcm92aWRlcnMpID0+IHtcbiAgICAgIGNvbnN0IHtwcmltYXJ5LCAuLi5yZXN0fSA9IGJ1dHRvbi5vcmlnaW5hbDtcbiAgICAgIGNvbnN0IGJyaWRnZWQgPSBnZXRPckRpZShjcmVhdGVUb2dnbGVCdXR0b24oe1xuICAgICAgICAuLi5yZXN0LFxuICAgICAgICB0eXBlOiAndG9nZ2xlYnV0dG9uJyxcbiAgICAgICAgb25BY3Rpb246IG5vb3BcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiByZW5kZXJUb29sYmFyVG9nZ2xlQnV0dG9uV2l0aChicmlkZ2VkLCBwcm92aWRlcnMsIFtydW5PbkV4ZWN1dGUobWVtSW5wdXQsIGJ1dHRvbildKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzVG9nZ2xlQnV0dG9uID0gYnV0dG9uID0+IGJ1dHRvbi50eXBlID09PSAnY29udGV4dGZvcm10b2dnbGVidXR0b24nO1xuICAgIGNvbnN0IGdlbmVyYXRlT25lID0gKG1lbUlucHV0LCBidXR0b24sIHByb3ZpZGVyc0JhY2tzdGFnZSkgPT4ge1xuICAgICAgaWYgKGlzVG9nZ2xlQnV0dG9uKGJ1dHRvbikpIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlckNvbnRleHRUb2dnbGVCdXR0b24obWVtSW5wdXQsIGJ1dHRvbiwgcHJvdmlkZXJzQmFja3N0YWdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZW5kZXJDb250ZXh0QnV0dG9uKG1lbUlucHV0LCBidXR0b24sIHByb3ZpZGVyc0JhY2tzdGFnZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZW5lcmF0ZSA9IChtZW1JbnB1dCwgYnV0dG9ucywgcHJvdmlkZXJzQmFja3N0YWdlKSA9PiB7XG4gICAgICBjb25zdCBtZW1lbnRvcyA9IG1hcCQyKGJ1dHRvbnMsIGJ1dHRvbiA9PiByZWNvcmQoZ2VuZXJhdGVPbmUobWVtSW5wdXQsIGJ1dHRvbiwgcHJvdmlkZXJzQmFja3N0YWdlKSkpO1xuICAgICAgY29uc3QgYXNTcGVjcyA9ICgpID0+IG1hcCQyKG1lbWVudG9zLCBtZW0gPT4gbWVtLmFzU3BlYygpKTtcbiAgICAgIGNvbnN0IGZpbmRQcmltYXJ5ID0gY29tcEluU3lzdGVtID0+IGZpbmRNYXAoYnV0dG9ucywgKGJ1dHRvbiwgaSkgPT4ge1xuICAgICAgICBpZiAoYnV0dG9uLnByaW1hcnkpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShtZW1lbnRvc1tpXSkuYmluZChtZW0gPT4gbWVtLmdldE9wdChjb21wSW5TeXN0ZW0pKS5maWx0ZXIobm90KERpc2FibGluZy5pc0Rpc2FibGVkKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhc1NwZWNzLFxuICAgICAgICBmaW5kUHJpbWFyeVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgYnVpbGRJbml0R3JvdXBzID0gKGN0eCwgcHJvdmlkZXJzKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dEF0dHJpYnV0ZXMgPSBjdHgubGFiZWwuZm9sZCgoKSA9PiAoe30pLCBsYWJlbCA9PiAoeyAnYXJpYS1sYWJlbCc6IGxhYmVsIH0pKTtcbiAgICAgIGNvbnN0IG1lbUlucHV0ID0gcmVjb3JkKElucHV0LnNrZXRjaCh7XG4gICAgICAgIGlucHV0Q2xhc3NlczogW1xuICAgICAgICAgICd0b3gtdG9vbGJhci10ZXh0ZmllbGQnLFxuICAgICAgICAgICd0b3gtdG9vbGJhci1uYXYtanMnXG4gICAgICAgIF0sXG4gICAgICAgIGRhdGE6IGN0eC5pbml0VmFsdWUoKSxcbiAgICAgICAgaW5wdXRBdHRyaWJ1dGVzLFxuICAgICAgICBzZWxlY3RPbkZvY3VzOiB0cnVlLFxuICAgICAgICBpbnB1dEJlaGF2aW91cnM6IGRlcml2ZSQxKFtLZXlpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIG1vZGU6ICdzcGVjaWFsJyxcbiAgICAgICAgICAgIG9uRW50ZXI6IGlucHV0ID0+IGNvbW1hbmRzLmZpbmRQcmltYXJ5KGlucHV0KS5tYXAocHJpbWFyeSA9PiB7XG4gICAgICAgICAgICAgIGVtaXRFeGVjdXRlKHByaW1hcnkpO1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgb25MZWZ0OiAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgICAgICAgc2UuY3V0KCk7XG4gICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25SaWdodDogKGNvbXAsIHNlKSA9PiB7XG4gICAgICAgICAgICAgIHNlLmN1dCgpO1xuICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXSlcbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IGNvbW1hbmRzID0gZ2VuZXJhdGUobWVtSW5wdXQsIGN0eC5jb21tYW5kcywgcHJvdmlkZXJzKTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICAgIGl0ZW1zOiBbbWVtSW5wdXQuYXNTcGVjKCldXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICAgIGl0ZW1zOiBjb21tYW5kcy5hc1NwZWNzKClcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckNvbnRleHRGb3JtID0gKHRvb2xiYXJUeXBlLCBjdHgsIHByb3ZpZGVycykgPT4gcmVuZGVyVG9vbGJhcih7XG4gICAgICB0eXBlOiB0b29sYmFyVHlwZSxcbiAgICAgIHVpZDogZ2VuZXJhdGUkNignY29udGV4dC10b29sYmFyJyksXG4gICAgICBpbml0R3JvdXBzOiBidWlsZEluaXRHcm91cHMoY3R4LCBwcm92aWRlcnMpLFxuICAgICAgb25Fc2NhcGU6IE9wdGlvbmFsLm5vbmUsXG4gICAgICBjeWNsaWNLZXlpbmc6IHRydWUsXG4gICAgICBwcm92aWRlcnNcbiAgICB9KTtcbiAgICBjb25zdCBDb250ZXh0Rm9ybSA9IHtcbiAgICAgIHJlbmRlckNvbnRleHRGb3JtLFxuICAgICAgYnVpbGRJbml0R3JvdXBzXG4gICAgfTtcblxuICAgIGNvbnN0IGlzVmVydGljYWxPdmVybGFwID0gKGEsIGIsIHRocmVzaG9sZCkgPT4gYi5ib3R0b20gLSBhLnkgPj0gdGhyZXNob2xkICYmIGEuYm90dG9tIC0gYi55ID49IHRocmVzaG9sZDtcbiAgICBjb25zdCBnZXRSYW5nZVJlY3QgPSBybmcgPT4ge1xuICAgICAgY29uc3QgcmVjdCA9IHJuZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGlmIChyZWN0LmhlaWdodCA8PSAwICYmIHJlY3Qud2lkdGggPD0gMCkge1xuICAgICAgICBjb25zdCBsZWFmJDEgPSBsZWFmKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJuZy5zdGFydENvbnRhaW5lciksIHJuZy5zdGFydE9mZnNldCkuZWxlbWVudDtcbiAgICAgICAgY29uc3QgZWxtID0gaXNUZXh0KGxlYWYkMSkgPyBwYXJlbnQobGVhZiQxKSA6IE9wdGlvbmFsLnNvbWUobGVhZiQxKTtcbiAgICAgICAgcmV0dXJuIGVsbS5maWx0ZXIoaXNFbGVtZW50JDEpLm1hcChlID0+IGUuZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKS5nZXRPcihyZWN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZWN0O1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ2V0U2VsZWN0aW9uQm91bmRzID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBjb25zdCByZWN0ID0gZ2V0UmFuZ2VSZWN0KHJuZyk7XG4gICAgICBpZiAoZWRpdG9yLmlubGluZSkge1xuICAgICAgICBjb25zdCBzY3JvbGwgPSBnZXQkYigpO1xuICAgICAgICByZXR1cm4gYm91bmRzKHNjcm9sbC5sZWZ0ICsgcmVjdC5sZWZ0LCBzY3JvbGwudG9wICsgcmVjdC50b3AsIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGJvZHlQb3MgPSBhYnNvbHV0ZSQyKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpKTtcbiAgICAgICAgcmV0dXJuIGJvdW5kcyhib2R5UG9zLnggKyByZWN0LmxlZnQsIGJvZHlQb3MueSArIHJlY3QudG9wLCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRBbmNob3JFbGVtZW50Qm91bmRzID0gKGVkaXRvciwgbGFzdEVsZW1lbnQpID0+IGxhc3RFbGVtZW50LmZpbHRlcihlbGVtID0+IGluQm9keShlbGVtKSAmJiBpc0hUTUxFbGVtZW50KGVsZW0pKS5tYXAoYWJzb2x1dGUkMikuZ2V0T3JUaHVuaygoKSA9PiBnZXRTZWxlY3Rpb25Cb3VuZHMoZWRpdG9yKSk7XG4gICAgY29uc3QgZ2V0SG9yaXpvbnRhbEJvdW5kcyA9IChjb250ZW50QXJlYUJveCwgdmlld3BvcnRCb3VuZHMsIG1hcmdpbikgPT4ge1xuICAgICAgY29uc3QgeCA9IE1hdGgubWF4KGNvbnRlbnRBcmVhQm94LnggKyBtYXJnaW4sIHZpZXdwb3J0Qm91bmRzLngpO1xuICAgICAgY29uc3QgcmlnaHQgPSBNYXRoLm1pbihjb250ZW50QXJlYUJveC5yaWdodCAtIG1hcmdpbiwgdmlld3BvcnRCb3VuZHMucmlnaHQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeCxcbiAgICAgICAgd2lkdGg6IHJpZ2h0IC0geFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFZlcnRpY2FsQm91bmRzID0gKGVkaXRvciwgY29udGVudEFyZWFCb3gsIHZpZXdwb3J0Qm91bmRzLCBpc1Rvb2xiYXJMb2NhdGlvblRvcCwgdG9vbGJhclR5cGUsIG1hcmdpbikgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldENvbnRhaW5lcigpKTtcbiAgICAgIGNvbnN0IGhlYWRlciA9IGRlc2NlbmRhbnQoY29udGFpbmVyLCAnLnRveC1lZGl0b3ItaGVhZGVyJykuZ2V0T3IoY29udGFpbmVyKTtcbiAgICAgIGNvbnN0IGhlYWRlckJveCA9IGJveCQxKGhlYWRlcik7XG4gICAgICBjb25zdCBpc1Rvb2xiYXJCZWxvd0NvbnRlbnRBcmVhID0gaGVhZGVyQm94LnkgPj0gY29udGVudEFyZWFCb3guYm90dG9tO1xuICAgICAgY29uc3QgaXNUb29sYmFyQWJvdmUgPSBpc1Rvb2xiYXJMb2NhdGlvblRvcCAmJiAhaXNUb29sYmFyQmVsb3dDb250ZW50QXJlYTtcbiAgICAgIGlmIChlZGl0b3IuaW5saW5lICYmIGlzVG9vbGJhckFib3ZlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeTogTWF0aC5tYXgoaGVhZGVyQm94LmJvdHRvbSArIG1hcmdpbiwgdmlld3BvcnRCb3VuZHMueSksXG4gICAgICAgICAgYm90dG9tOiB2aWV3cG9ydEJvdW5kcy5ib3R0b21cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChlZGl0b3IuaW5saW5lICYmICFpc1Rvb2xiYXJBYm92ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHk6IHZpZXdwb3J0Qm91bmRzLnksXG4gICAgICAgICAgYm90dG9tOiBNYXRoLm1pbihoZWFkZXJCb3gueSAtIG1hcmdpbiwgdmlld3BvcnRCb3VuZHMuYm90dG9tKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgY29udGFpbmVyQm91bmRzID0gdG9vbGJhclR5cGUgPT09ICdsaW5lJyA/IGJveCQxKGNvbnRhaW5lcikgOiBjb250ZW50QXJlYUJveDtcbiAgICAgIGlmIChpc1Rvb2xiYXJBYm92ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHk6IE1hdGgubWF4KGhlYWRlckJveC5ib3R0b20gKyBtYXJnaW4sIHZpZXdwb3J0Qm91bmRzLnkpLFxuICAgICAgICAgIGJvdHRvbTogTWF0aC5taW4oY29udGFpbmVyQm91bmRzLmJvdHRvbSAtIG1hcmdpbiwgdmlld3BvcnRCb3VuZHMuYm90dG9tKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeTogTWF0aC5tYXgoY29udGFpbmVyQm91bmRzLnkgKyBtYXJnaW4sIHZpZXdwb3J0Qm91bmRzLnkpLFxuICAgICAgICBib3R0b206IE1hdGgubWluKGhlYWRlckJveC55IC0gbWFyZ2luLCB2aWV3cG9ydEJvdW5kcy5ib3R0b20pXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZ2V0Q29udGV4dFRvb2xiYXJCb3VuZHMgPSAoZWRpdG9yLCBzaGFyZWRCYWNrc3RhZ2UsIHRvb2xiYXJUeXBlLCBtYXJnaW4gPSAwKSA9PiB7XG4gICAgICBjb25zdCB2aWV3cG9ydEJvdW5kcyA9IGdldEJvdW5kcyQzKHdpbmRvdyk7XG4gICAgICBjb25zdCBjb250ZW50QXJlYUJveCA9IGJveCQxKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRDb250ZW50QXJlYUNvbnRhaW5lcigpKSk7XG4gICAgICBjb25zdCB0b29sYmFyT3JNZW51YmFyRW5hYmxlZCA9IGlzTWVudWJhckVuYWJsZWQoZWRpdG9yKSB8fCBpc1Rvb2xiYXJFbmFibGVkKGVkaXRvcikgfHwgaXNNdWx0aXBsZVRvb2xiYXJzKGVkaXRvcik7XG4gICAgICBjb25zdCB7eCwgd2lkdGh9ID0gZ2V0SG9yaXpvbnRhbEJvdW5kcyhjb250ZW50QXJlYUJveCwgdmlld3BvcnRCb3VuZHMsIG1hcmdpbik7XG4gICAgICBpZiAoZWRpdG9yLmlubGluZSAmJiAhdG9vbGJhck9yTWVudWJhckVuYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIGJvdW5kcyh4LCB2aWV3cG9ydEJvdW5kcy55LCB3aWR0aCwgdmlld3BvcnRCb3VuZHMuaGVpZ2h0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGlzVG9vbGJhclRvcCA9IHNoYXJlZEJhY2tzdGFnZS5oZWFkZXIuaXNQb3NpdGlvbmVkQXRUb3AoKTtcbiAgICAgICAgY29uc3Qge3ksIGJvdHRvbX0gPSBnZXRWZXJ0aWNhbEJvdW5kcyhlZGl0b3IsIGNvbnRlbnRBcmVhQm94LCB2aWV3cG9ydEJvdW5kcywgaXNUb29sYmFyVG9wLCB0b29sYmFyVHlwZSwgbWFyZ2luKTtcbiAgICAgICAgcmV0dXJuIGJvdW5kcyh4LCB5LCB3aWR0aCwgYm90dG9tIC0geSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGJ1YmJsZVNpemUkMSA9IDEyO1xuICAgIGNvbnN0IGJ1YmJsZUFsaWdubWVudHMkMSA9IHtcbiAgICAgIHZhbGlnbkNlbnRyZTogW10sXG4gICAgICBhbGlnbkNlbnRyZTogW10sXG4gICAgICBhbGlnbkxlZnQ6IFsndG94LXBvcC0tYWxpZ24tbGVmdCddLFxuICAgICAgYWxpZ25SaWdodDogWyd0b3gtcG9wLS1hbGlnbi1yaWdodCddLFxuICAgICAgcmlnaHQ6IFsndG94LXBvcC0tcmlnaHQnXSxcbiAgICAgIGxlZnQ6IFsndG94LXBvcC0tbGVmdCddLFxuICAgICAgYm90dG9tOiBbJ3RveC1wb3AtLWJvdHRvbSddLFxuICAgICAgdG9wOiBbJ3RveC1wb3AtLXRvcCddLFxuICAgICAgaW5zZXQ6IFsndG94LXBvcC0taW5zZXQnXVxuICAgIH07XG4gICAgY29uc3QgYW5jaG9yT3ZlcnJpZGVzID0ge1xuICAgICAgbWF4SGVpZ2h0RnVuY3Rpb246IGV4cGFuZGFibGUkMSgpLFxuICAgICAgbWF4V2lkdGhGdW5jdGlvbjogZXhwYW5kYWJsZSgpXG4gICAgfTtcbiAgICBjb25zdCBpc0VudGlyZUVsZW1lbnRTZWxlY3RlZCA9IChlZGl0b3IsIGVsZW0pID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBjb25zdCBsZWFmJDEgPSBsZWFmKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJuZy5zdGFydENvbnRhaW5lciksIHJuZy5zdGFydE9mZnNldCk7XG4gICAgICByZXR1cm4gcm5nLnN0YXJ0Q29udGFpbmVyID09PSBybmcuZW5kQ29udGFpbmVyICYmIHJuZy5zdGFydE9mZnNldCA9PT0gcm5nLmVuZE9mZnNldCAtIDEgJiYgZXEobGVhZiQxLmVsZW1lbnQsIGVsZW0pO1xuICAgIH07XG4gICAgY29uc3QgcHJlc2VydmVQb3NpdGlvbiA9IChlbGVtLCBwb3NpdGlvbiwgZikgPT4ge1xuICAgICAgY29uc3QgY3VycmVudFBvc2l0aW9uID0gZ2V0UmF3KGVsZW0sICdwb3NpdGlvbicpO1xuICAgICAgc2V0JDgoZWxlbSwgJ3Bvc2l0aW9uJywgcG9zaXRpb24pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZihlbGVtKTtcbiAgICAgIGN1cnJlbnRQb3NpdGlvbi5lYWNoKHBvcyA9PiBzZXQkOChlbGVtLCAncG9zaXRpb24nLCBwb3MpKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBjb25zdCBzaG91bGRVc2VJbnNldExheW91dHMgPSBwb3NpdGlvbiA9PiBwb3NpdGlvbiA9PT0gJ25vZGUnO1xuICAgIGNvbnN0IGRldGVybWluZUluc2V0TGF5b3V0ID0gKGVkaXRvciwgY29udGV4dGJhciwgZWxlbSwgZGF0YSwgYm91bmRzKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3Rpb25Cb3VuZHMgPSBnZXRTZWxlY3Rpb25Cb3VuZHMoZWRpdG9yKTtcbiAgICAgIGNvbnN0IGlzU2FtZUFuY2hvckVsZW1lbnQgPSBkYXRhLmxhc3RFbGVtZW50KCkuZXhpc3RzKHByZXYgPT4gZXEoZWxlbSwgcHJldikpO1xuICAgICAgaWYgKGlzRW50aXJlRWxlbWVudFNlbGVjdGVkKGVkaXRvciwgZWxlbSkpIHtcbiAgICAgICAgcmV0dXJuIGlzU2FtZUFuY2hvckVsZW1lbnQgPyBwcmVzZXJ2ZSA6IG5vcnRoO1xuICAgICAgfSBlbHNlIGlmIChpc1NhbWVBbmNob3JFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBwcmVzZXJ2ZVBvc2l0aW9uKGNvbnRleHRiYXIsIGRhdGEuZ2V0TW9kZSgpLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNPdmVybGFwcGluZyA9IGlzVmVydGljYWxPdmVybGFwKHNlbGVjdGlvbkJvdW5kcywgYm94JDEoY29udGV4dGJhciksIC0yMCk7XG4gICAgICAgICAgcmV0dXJuIGlzT3ZlcmxhcHBpbmcgJiYgIWRhdGEuaXNSZXBvc2l0aW9uKCkgPyBmbGlwIDogcHJlc2VydmU7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeUJvdW5kcyA9IGRhdGEuZ2V0TW9kZSgpID09PSAnZml4ZWQnID8gYm91bmRzLnkgKyBnZXQkYigpLnRvcCA6IGJvdW5kcy55O1xuICAgICAgICBjb25zdCBjb250ZXh0YmFySGVpZ2h0ID0gZ2V0JGQoY29udGV4dGJhcikgKyBidWJibGVTaXplJDE7XG4gICAgICAgIHJldHVybiB5Qm91bmRzICsgY29udGV4dGJhckhlaWdodCA8PSBzZWxlY3Rpb25Cb3VuZHMueSA/IG5vcnRoIDogc291dGg7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRBbmNob3JTcGVjJDIgPSAoZWRpdG9yLCBtb2JpbGUsIGRhdGEsIHBvc2l0aW9uKSA9PiB7XG4gICAgICBjb25zdCBzbWFydEluc2V0TGF5b3V0ID0gZWxlbSA9PiAoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzLCBwbGFjZWUsIGJvdW5kcykgPT4ge1xuICAgICAgICBjb25zdCBsYXlvdXQgPSBkZXRlcm1pbmVJbnNldExheW91dChlZGl0b3IsIHBsYWNlZSwgZWxlbSwgZGF0YSwgYm91bmRzKTtcbiAgICAgICAgY29uc3QgbmV3QW5jaG9yID0ge1xuICAgICAgICAgIC4uLmFuY2hvcixcbiAgICAgICAgICB5OiBib3VuZHMueSxcbiAgICAgICAgICBoZWlnaHQ6IGJvdW5kcy5oZWlnaHRcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5sYXlvdXQobmV3QW5jaG9yLCBlbGVtZW50LCBidWJibGVzLCBwbGFjZWUsIGJvdW5kcyksXG4gICAgICAgICAgYWx3YXlzRml0OiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0SW5zZXRMYXlvdXRzID0gZWxlbSA9PiBzaG91bGRVc2VJbnNldExheW91dHMocG9zaXRpb24pID8gW3NtYXJ0SW5zZXRMYXlvdXQoZWxlbSldIDogW107XG4gICAgICBjb25zdCBkZXNrdG9wQW5jaG9yU3BlY0xheW91dHMgPSB7XG4gICAgICAgIG9uTHRyOiBlbGVtID0+IFtcbiAgICAgICAgICBub3J0aCQyLFxuICAgICAgICAgIHNvdXRoJDIsXG4gICAgICAgICAgbm9ydGhlYXN0JDIsXG4gICAgICAgICAgc291dGhlYXN0JDIsXG4gICAgICAgICAgbm9ydGh3ZXN0JDIsXG4gICAgICAgICAgc291dGh3ZXN0JDJcbiAgICAgICAgXS5jb25jYXQoZ2V0SW5zZXRMYXlvdXRzKGVsZW0pKSxcbiAgICAgICAgb25SdGw6IGVsZW0gPT4gW1xuICAgICAgICAgIG5vcnRoJDIsXG4gICAgICAgICAgc291dGgkMixcbiAgICAgICAgICBub3J0aHdlc3QkMixcbiAgICAgICAgICBzb3V0aHdlc3QkMixcbiAgICAgICAgICBub3J0aGVhc3QkMixcbiAgICAgICAgICBzb3V0aGVhc3QkMlxuICAgICAgICBdLmNvbmNhdChnZXRJbnNldExheW91dHMoZWxlbSkpXG4gICAgICB9O1xuICAgICAgY29uc3QgbW9iaWxlQW5jaG9yU3BlY0xheW91dHMgPSB7XG4gICAgICAgIG9uTHRyOiBlbGVtID0+IFtcbiAgICAgICAgICBzb3V0aCQyLFxuICAgICAgICAgIHNvdXRoZWFzdCQyLFxuICAgICAgICAgIHNvdXRod2VzdCQyLFxuICAgICAgICAgIG5vcnRoZWFzdCQyLFxuICAgICAgICAgIG5vcnRod2VzdCQyLFxuICAgICAgICAgIG5vcnRoJDJcbiAgICAgICAgXS5jb25jYXQoZ2V0SW5zZXRMYXlvdXRzKGVsZW0pKSxcbiAgICAgICAgb25SdGw6IGVsZW0gPT4gW1xuICAgICAgICAgIHNvdXRoJDIsXG4gICAgICAgICAgc291dGh3ZXN0JDIsXG4gICAgICAgICAgc291dGhlYXN0JDIsXG4gICAgICAgICAgbm9ydGh3ZXN0JDIsXG4gICAgICAgICAgbm9ydGhlYXN0JDIsXG4gICAgICAgICAgbm9ydGgkMlxuICAgICAgICBdLmNvbmNhdChnZXRJbnNldExheW91dHMoZWxlbSkpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIG1vYmlsZSA/IG1vYmlsZUFuY2hvclNwZWNMYXlvdXRzIDogZGVza3RvcEFuY2hvclNwZWNMYXlvdXRzO1xuICAgIH07XG4gICAgY29uc3QgZ2V0QW5jaG9yTGF5b3V0ID0gKGVkaXRvciwgcG9zaXRpb24sIGlzVG91Y2gsIGRhdGEpID0+IHtcbiAgICAgIGlmIChwb3NpdGlvbiA9PT0gJ2xpbmUnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYnViYmxlOiBudSQ1KGJ1YmJsZVNpemUkMSwgMCwgYnViYmxlQWxpZ25tZW50cyQxKSxcbiAgICAgICAgICBsYXlvdXRzOiB7XG4gICAgICAgICAgICBvbkx0cjogKCkgPT4gW2Vhc3QkMl0sXG4gICAgICAgICAgICBvblJ0bDogKCkgPT4gW3dlc3QkMl1cbiAgICAgICAgICB9LFxuICAgICAgICAgIG92ZXJyaWRlczogYW5jaG9yT3ZlcnJpZGVzXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJ1YmJsZTogbnUkNSgwLCBidWJibGVTaXplJDEsIGJ1YmJsZUFsaWdubWVudHMkMSwgMSAvIGJ1YmJsZVNpemUkMSksXG4gICAgICAgICAgbGF5b3V0czogZ2V0QW5jaG9yU3BlYyQyKGVkaXRvciwgaXNUb3VjaCwgZGF0YSwgcG9zaXRpb24pLFxuICAgICAgICAgIG92ZXJyaWRlczogYW5jaG9yT3ZlcnJpZGVzXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG1hdGNoVGFyZ2V0V2l0aCA9IChlbGVtLCBjYW5kaWRhdGVzKSA9PiB7XG4gICAgICBjb25zdCBjdHhzID0gZmlsdGVyJDIoY2FuZGlkYXRlcywgdG9vbGJhckFwaSA9PiB0b29sYmFyQXBpLnByZWRpY2F0ZShlbGVtLmRvbSkpO1xuICAgICAgY29uc3Qge3Bhc3MsIGZhaWx9ID0gcGFydGl0aW9uJDMoY3R4cywgdCA9PiB0LnR5cGUgPT09ICdjb250ZXh0dG9vbGJhcicpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGV4dFRvb2xiYXJzOiBwYXNzLFxuICAgICAgICBjb250ZXh0Rm9ybXM6IGZhaWxcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXJCeVBvc2l0aW9uRm9yU3RhcnROb2RlID0gdG9vbGJhcnMgPT4ge1xuICAgICAgaWYgKHRvb2xiYXJzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgIHJldHVybiB0b29sYmFycztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRvZXNQb3NpdGlvbkV4aXN0ID0gdmFsdWUgPT4gZXhpc3RzKHRvb2xiYXJzLCB0ID0+IHQucG9zaXRpb24gPT09IHZhbHVlKTtcbiAgICAgICAgY29uc3QgZmlsdGVyVG9vbGJhcnNCeVBvc2l0aW9uID0gdmFsdWUgPT4gZmlsdGVyJDIodG9vbGJhcnMsIHQgPT4gdC5wb3NpdGlvbiA9PT0gdmFsdWUpO1xuICAgICAgICBjb25zdCBoYXNTZWxlY3Rpb25Ub29sYmFycyA9IGRvZXNQb3NpdGlvbkV4aXN0KCdzZWxlY3Rpb24nKTtcbiAgICAgICAgY29uc3QgaGFzTm9kZVRvb2xiYXJzID0gZG9lc1Bvc2l0aW9uRXhpc3QoJ25vZGUnKTtcbiAgICAgICAgaWYgKGhhc1NlbGVjdGlvblRvb2xiYXJzIHx8IGhhc05vZGVUb29sYmFycykge1xuICAgICAgICAgIGlmIChoYXNOb2RlVG9vbGJhcnMgJiYgaGFzU2VsZWN0aW9uVG9vbGJhcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVUb29sYmFycyA9IGZpbHRlclRvb2xiYXJzQnlQb3NpdGlvbignbm9kZScpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uVG9vbGJhcnMgPSBtYXAkMihmaWx0ZXJUb29sYmFyc0J5UG9zaXRpb24oJ3NlbGVjdGlvbicpLCB0ID0+ICh7XG4gICAgICAgICAgICAgIC4uLnQsXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiAnbm9kZSdcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiBub2RlVG9vbGJhcnMuY29uY2F0KHNlbGVjdGlvblRvb2xiYXJzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhhc1NlbGVjdGlvblRvb2xiYXJzID8gZmlsdGVyVG9vbGJhcnNCeVBvc2l0aW9uKCdzZWxlY3Rpb24nKSA6IGZpbHRlclRvb2xiYXJzQnlQb3NpdGlvbignbm9kZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmlsdGVyVG9vbGJhcnNCeVBvc2l0aW9uKCdsaW5lJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbHRlckJ5UG9zaXRpb25Gb3JBbmNlc3Rvck5vZGUgPSB0b29sYmFycyA9PiB7XG4gICAgICBpZiAodG9vbGJhcnMubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgcmV0dXJuIHRvb2xiYXJzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZmluZFBvc2l0aW9uID0gdmFsdWUgPT4gZmluZCQ1KHRvb2xiYXJzLCB0ID0+IHQucG9zaXRpb24gPT09IHZhbHVlKTtcbiAgICAgICAgY29uc3QgYmFzZVBvc2l0aW9uID0gZmluZFBvc2l0aW9uKCdzZWxlY3Rpb24nKS5vclRodW5rKCgpID0+IGZpbmRQb3NpdGlvbignbm9kZScpKS5vclRodW5rKCgpID0+IGZpbmRQb3NpdGlvbignbGluZScpKS5tYXAodCA9PiB0LnBvc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIGJhc2VQb3NpdGlvbi5mb2xkKCgpID0+IFtdLCBwb3MgPT4gZmlsdGVyJDIodG9vbGJhcnMsIHQgPT4gdC5wb3NpdGlvbiA9PT0gcG9zKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBtYXRjaFN0YXJ0Tm9kZSA9IChlbGVtLCBub2RlQ2FuZGlkYXRlcywgZWRpdG9yQ2FuZGlkYXRlcykgPT4ge1xuICAgICAgY29uc3Qgbm9kZU1hdGNoZXMgPSBtYXRjaFRhcmdldFdpdGgoZWxlbSwgbm9kZUNhbmRpZGF0ZXMpO1xuICAgICAgaWYgKG5vZGVNYXRjaGVzLmNvbnRleHRGb3Jtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICBlbGVtLFxuICAgICAgICAgIHRvb2xiYXJzOiBbbm9kZU1hdGNoZXMuY29udGV4dEZvcm1zWzBdXVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVkaXRvck1hdGNoZXMgPSBtYXRjaFRhcmdldFdpdGgoZWxlbSwgZWRpdG9yQ2FuZGlkYXRlcyk7XG4gICAgICAgIGlmIChlZGl0b3JNYXRjaGVzLmNvbnRleHRGb3Jtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgICAgZWxlbSxcbiAgICAgICAgICAgIHRvb2xiYXJzOiBbZWRpdG9yTWF0Y2hlcy5jb250ZXh0Rm9ybXNbMF1dXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZU1hdGNoZXMuY29udGV4dFRvb2xiYXJzLmxlbmd0aCA+IDAgfHwgZWRpdG9yTWF0Y2hlcy5jb250ZXh0VG9vbGJhcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHRvb2xiYXJzID0gZmlsdGVyQnlQb3NpdGlvbkZvclN0YXJ0Tm9kZShub2RlTWF0Y2hlcy5jb250ZXh0VG9vbGJhcnMuY29uY2F0KGVkaXRvck1hdGNoZXMuY29udGV4dFRvb2xiYXJzKSk7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgICAgZWxlbSxcbiAgICAgICAgICAgIHRvb2xiYXJzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbWF0Y2hBbmNlc3RvciA9IChpc1Jvb3QsIHN0YXJ0Tm9kZSwgc2NvcGVzKSA9PiB7XG4gICAgICBpZiAoaXNSb290KHN0YXJ0Tm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhbmNlc3RvciQyKHN0YXJ0Tm9kZSwgYW5jZXN0b3JFbGVtID0+IHtcbiAgICAgICAgICBpZiAoaXNFbGVtZW50JDEoYW5jZXN0b3JFbGVtKSkge1xuICAgICAgICAgICAgY29uc3Qge2NvbnRleHRUb29sYmFycywgY29udGV4dEZvcm1zfSA9IG1hdGNoVGFyZ2V0V2l0aChhbmNlc3RvckVsZW0sIHNjb3Blcy5pbk5vZGVTY29wZSk7XG4gICAgICAgICAgICBjb25zdCB0b29sYmFycyA9IGNvbnRleHRGb3Jtcy5sZW5ndGggPiAwID8gY29udGV4dEZvcm1zIDogZmlsdGVyQnlQb3NpdGlvbkZvckFuY2VzdG9yTm9kZShjb250ZXh0VG9vbGJhcnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRvb2xiYXJzLmxlbmd0aCA+IDAgPyBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgICAgZWxlbTogYW5jZXN0b3JFbGVtLFxuICAgICAgICAgICAgICB0b29sYmFyc1xuICAgICAgICAgICAgfSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBpc1Jvb3QpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbG9va3VwJDEgPSAoc2NvcGVzLCBlZGl0b3IpID0+IHtcbiAgICAgIGNvbnN0IHJvb3RFbGVtID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBjb25zdCBpc1Jvb3QgPSBlbGVtID0+IGVxKGVsZW0sIHJvb3RFbGVtKTtcbiAgICAgIGNvbnN0IGlzT3V0c2lkZVJvb3QgPSBzdGFydE5vZGUgPT4gIWlzUm9vdChzdGFydE5vZGUpICYmICFjb250YWlucyhyb290RWxlbSwgc3RhcnROb2RlKTtcbiAgICAgIGNvbnN0IHN0YXJ0Tm9kZSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5zZWxlY3Rpb24uZ2V0Tm9kZSgpKTtcbiAgICAgIGlmIChpc091dHNpZGVSb290KHN0YXJ0Tm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXRjaFN0YXJ0Tm9kZShzdGFydE5vZGUsIHNjb3Blcy5pbk5vZGVTY29wZSwgc2NvcGVzLmluRWRpdG9yU2NvcGUpLm9yVGh1bmsoKCkgPT4gbWF0Y2hBbmNlc3Rvcihpc1Jvb3QsIHN0YXJ0Tm9kZSwgc2NvcGVzKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNhdGVnb3Jpc2UgPSAoY29udGV4dFRvb2xiYXJzLCBuYXZpZ2F0ZSkgPT4ge1xuICAgICAgY29uc3QgZm9ybXMgPSB7fTtcbiAgICAgIGNvbnN0IGluTm9kZVNjb3BlID0gW107XG4gICAgICBjb25zdCBpbkVkaXRvclNjb3BlID0gW107XG4gICAgICBjb25zdCBmb3JtTmF2aWdhdG9ycyA9IHt9O1xuICAgICAgY29uc3QgbG9va3VwVGFibGUgPSB7fTtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyRm9ybSA9IChrZXksIHRvb2xiYXJTcGVjKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRGb3JtID0gZ2V0T3JEaWUoY3JlYXRlQ29udGV4dEZvcm0odG9vbGJhclNwZWMpKTtcbiAgICAgICAgZm9ybXNba2V5XSA9IGNvbnRleHRGb3JtO1xuICAgICAgICBjb250ZXh0Rm9ybS5sYXVuY2gubWFwKGxhdW5jaCA9PiB7XG4gICAgICAgICAgZm9ybU5hdmlnYXRvcnNbJ2Zvcm06JyArIGtleSArICcnXSA9IHtcbiAgICAgICAgICAgIC4uLnRvb2xiYXJTcGVjLmxhdW5jaCxcbiAgICAgICAgICAgIHR5cGU6IGxhdW5jaC50eXBlID09PSAnY29udGV4dGZvcm10b2dnbGVidXR0b24nID8gJ3RvZ2dsZWJ1dHRvbicgOiAnYnV0dG9uJyxcbiAgICAgICAgICAgIG9uQWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgIG5hdmlnYXRlKGNvbnRleHRGb3JtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNvbnRleHRGb3JtLnNjb3BlID09PSAnZWRpdG9yJykge1xuICAgICAgICAgIGluRWRpdG9yU2NvcGUucHVzaChjb250ZXh0Rm9ybSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5Ob2RlU2NvcGUucHVzaChjb250ZXh0Rm9ybSk7XG4gICAgICAgIH1cbiAgICAgICAgbG9va3VwVGFibGVba2V5XSA9IGNvbnRleHRGb3JtO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyVG9vbGJhciA9IChrZXksIHRvb2xiYXJTcGVjKSA9PiB7XG4gICAgICAgIGNyZWF0ZUNvbnRleHRUb29sYmFyKHRvb2xiYXJTcGVjKS5lYWNoKGNvbnRleHRUb29sYmFyID0+IHtcbiAgICAgICAgICBpZiAodG9vbGJhclNwZWMuc2NvcGUgPT09ICdlZGl0b3InKSB7XG4gICAgICAgICAgICBpbkVkaXRvclNjb3BlLnB1c2goY29udGV4dFRvb2xiYXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbk5vZGVTY29wZS5wdXNoKGNvbnRleHRUb29sYmFyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9va3VwVGFibGVba2V5XSA9IGNvbnRleHRUb29sYmFyO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBrZXlzJDEgPSBrZXlzKGNvbnRleHRUb29sYmFycyk7XG4gICAgICBlYWNoJDEoa2V5cyQxLCBrZXkgPT4ge1xuICAgICAgICBjb25zdCB0b29sYmFyQXBpID0gY29udGV4dFRvb2xiYXJzW2tleV07XG4gICAgICAgIGlmICh0b29sYmFyQXBpLnR5cGUgPT09ICdjb250ZXh0Zm9ybScpIHtcbiAgICAgICAgICByZWdpc3RlckZvcm0oa2V5LCB0b29sYmFyQXBpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0b29sYmFyQXBpLnR5cGUgPT09ICdjb250ZXh0dG9vbGJhcicpIHtcbiAgICAgICAgICByZWdpc3RlclRvb2xiYXIoa2V5LCB0b29sYmFyQXBpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb3JtcyxcbiAgICAgICAgaW5Ob2RlU2NvcGUsXG4gICAgICAgIGluRWRpdG9yU2NvcGUsXG4gICAgICAgIGxvb2t1cFRhYmxlLFxuICAgICAgICBmb3JtTmF2aWdhdG9yc1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZm9yd2FyZFNsaWRlRXZlbnQgPSBnZW5lcmF0ZSQ2KCdmb3J3YXJkLXNsaWRlJyk7XG4gICAgY29uc3QgYmFja1NsaWRlRXZlbnQgPSBnZW5lcmF0ZSQ2KCdiYWNrd2FyZC1zbGlkZScpO1xuICAgIGNvbnN0IGNoYW5nZVNsaWRlRXZlbnQgPSBnZW5lcmF0ZSQ2KCdjaGFuZ2Utc2xpZGUtZXZlbnQnKTtcbiAgICBjb25zdCByZXNpemluZ0NsYXNzID0gJ3RveC1wb3AtLXJlc2l6aW5nJztcbiAgICBjb25zdCByZW5kZXJDb250ZXh0VG9vbGJhciA9IHNwZWMgPT4ge1xuICAgICAgY29uc3Qgc3RhY2sgPSBDZWxsKFtdKTtcbiAgICAgIHJldHVybiBJbmxpbmVWaWV3LnNrZXRjaCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtcG9wJ11cbiAgICAgICAgfSxcbiAgICAgICAgZmlyZURpc21pc3NhbEV2ZW50SW5zdGVhZDogeyBldmVudDogJ2RvTm90RGlzbWlzc1lldCcgfSxcbiAgICAgICAgb25TaG93OiBjb21wID0+IHtcbiAgICAgICAgICBzdGFjay5zZXQoW10pO1xuICAgICAgICAgIElubGluZVZpZXcuZ2V0Q29udGVudChjb21wKS5lYWNoKGMgPT4ge1xuICAgICAgICAgICAgcmVtb3ZlJDYoYy5lbGVtZW50LCAndmlzaWJpbGl0eScpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlbW92ZSQyKGNvbXAuZWxlbWVudCwgcmVzaXppbmdDbGFzcyk7XG4gICAgICAgICAgcmVtb3ZlJDYoY29tcC5lbGVtZW50LCAnd2lkdGgnKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5saW5lQmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIGNvbmZpZygnY29udGV4dC10b29sYmFyLWV2ZW50cycsIFtcbiAgICAgICAgICAgIHJ1bk9uU291cmNlKHRyYW5zaXRpb25lbmQoKSwgKGNvbXAsIHNlKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChzZS5ldmVudC5yYXcucHJvcGVydHlOYW1lID09PSAnd2lkdGgnKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlJDIoY29tcC5lbGVtZW50LCByZXNpemluZ0NsYXNzKTtcbiAgICAgICAgICAgICAgICByZW1vdmUkNihjb21wLmVsZW1lbnQsICd3aWR0aCcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHJ1biQxKGNoYW5nZVNsaWRlRXZlbnQsIChjb21wLCBzZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBlbGVtID0gY29tcC5lbGVtZW50O1xuICAgICAgICAgICAgICByZW1vdmUkNihlbGVtLCAnd2lkdGgnKTtcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudFdpZHRoID0gZ2V0JGMoZWxlbSk7XG4gICAgICAgICAgICAgIElubGluZVZpZXcuc2V0Q29udGVudChjb21wLCBzZS5ldmVudC5jb250ZW50cyk7XG4gICAgICAgICAgICAgIGFkZCQyKGVsZW0sIHJlc2l6aW5nQ2xhc3MpO1xuICAgICAgICAgICAgICBjb25zdCBuZXdXaWR0aCA9IGdldCRjKGVsZW0pO1xuICAgICAgICAgICAgICBzZXQkOChlbGVtLCAnd2lkdGgnLCBjdXJyZW50V2lkdGggKyAncHgnKTtcbiAgICAgICAgICAgICAgSW5saW5lVmlldy5nZXRDb250ZW50KGNvbXApLmVhY2gobmV3Q29udGVudHMgPT4ge1xuICAgICAgICAgICAgICAgIHNlLmV2ZW50LmZvY3VzLmJpbmQoZiA9PiB7XG4gICAgICAgICAgICAgICAgICBmb2N1cyQzKGYpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlYXJjaChlbGVtKTtcbiAgICAgICAgICAgICAgICB9KS5vclRodW5rKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIEtleWluZy5mb2N1c0luKG5ld0NvbnRlbnRzKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhY3RpdmUkMShnZXRSb290Tm9kZShlbGVtKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBzZXQkOChjb21wLmVsZW1lbnQsICd3aWR0aCcsIG5ld1dpZHRoICsgJ3B4Jyk7XG4gICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBydW4kMShmb3J3YXJkU2xpZGVFdmVudCwgKGNvbXAsIHNlKSA9PiB7XG4gICAgICAgICAgICAgIElubGluZVZpZXcuZ2V0Q29udGVudChjb21wKS5lYWNoKG9sZENvbnRlbnRzID0+IHtcbiAgICAgICAgICAgICAgICBzdGFjay5zZXQoc3RhY2suZ2V0KCkuY29uY2F0KFt7XG4gICAgICAgICAgICAgICAgICAgIGJhcjogb2xkQ29udGVudHMsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzOiBhY3RpdmUkMShnZXRSb290Tm9kZShjb21wLmVsZW1lbnQpKVxuICAgICAgICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGVtaXRXaXRoKGNvbXAsIGNoYW5nZVNsaWRlRXZlbnQsIHtcbiAgICAgICAgICAgICAgICBjb250ZW50czogc2UuZXZlbnQuZm9yd2FyZENvbnRlbnRzLFxuICAgICAgICAgICAgICAgIGZvY3VzOiBPcHRpb25hbC5ub25lKClcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHJ1biQxKGJhY2tTbGlkZUV2ZW50LCAoY29tcCwgX3NlKSA9PiB7XG4gICAgICAgICAgICAgIGxhc3QkMShzdGFjay5nZXQoKSkuZWFjaChsYXN0ID0+IHtcbiAgICAgICAgICAgICAgICBzdGFjay5zZXQoc3RhY2suZ2V0KCkuc2xpY2UoMCwgc3RhY2suZ2V0KCkubGVuZ3RoIC0gMSkpO1xuICAgICAgICAgICAgICAgIGVtaXRXaXRoKGNvbXAsIGNoYW5nZVNsaWRlRXZlbnQsIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnRzOiBwcmVtYWRlKGxhc3QuYmFyKSxcbiAgICAgICAgICAgICAgICAgIGZvY3VzOiBsYXN0LmZvY3VzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBLZXlpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIG1vZGU6ICdzcGVjaWFsJyxcbiAgICAgICAgICAgIG9uRXNjYXBlOiBjb21wID0+IGxhc3QkMShzdGFjay5nZXQoKSkuZm9sZCgoKSA9PiBzcGVjLm9uRXNjYXBlKCksIF8gPT4ge1xuICAgICAgICAgICAgICBlbWl0KGNvbXAsIGJhY2tTbGlkZUV2ZW50KTtcbiAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIF0pLFxuICAgICAgICBsYXp5U2luazogKCkgPT4gUmVzdWx0LnZhbHVlKHNwZWMuc2luaylcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCB0cmFuc2l0aW9uQ2xhc3MgPSAndG94LXBvcC0tdHJhbnNpdGlvbic7XG4gICAgY29uc3QgcmVnaXN0ZXIkOSA9IChlZGl0b3IsIHJlZ2lzdHJ5Q29udGV4dFRvb2xiYXJzLCBzaW5rLCBleHRyYXMpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tzdGFnZSA9IGV4dHJhcy5iYWNrc3RhZ2U7XG4gICAgICBjb25zdCBzaGFyZWRCYWNrc3RhZ2UgPSBiYWNrc3RhZ2Uuc2hhcmVkO1xuICAgICAgY29uc3QgaXNUb3VjaCA9IGRldGVjdCQyKCkuZGV2aWNlVHlwZS5pc1RvdWNoO1xuICAgICAgY29uc3QgbGFzdEVsZW1lbnQgPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBsYXN0VHJpZ2dlciA9IHZhbHVlJDIoKTtcbiAgICAgIGNvbnN0IGxhc3RDb250ZXh0UG9zaXRpb24gPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBjb250ZXh0YmFyID0gYnVpbGQkMShyZW5kZXJDb250ZXh0VG9vbGJhcih7XG4gICAgICAgIHNpbmssXG4gICAgICAgIG9uRXNjYXBlOiAoKSA9PiB7XG4gICAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IGdldEJvdW5kcyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBsYXN0Q29udGV4dFBvc2l0aW9uLmdldCgpLmdldE9yKCdub2RlJyk7XG4gICAgICAgIGNvbnN0IG1hcmdpbiA9IHNob3VsZFVzZUluc2V0TGF5b3V0cyhwb3NpdGlvbikgPyAxIDogMDtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHRUb29sYmFyQm91bmRzKGVkaXRvciwgc2hhcmVkQmFja3N0YWdlLCBwb3NpdGlvbiwgbWFyZ2luKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjYW5MYXVuY2hUb29sYmFyID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gIWVkaXRvci5yZW1vdmVkICYmICEoaXNUb3VjaCgpICYmIGJhY2tzdGFnZS5pc0NvbnRleHRNZW51T3BlbigpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1NhbWVMYXVuY2hFbGVtZW50ID0gZWxlbSA9PiBpcyQxKGxpZnQyKGVsZW0sIGxhc3RFbGVtZW50LmdldCgpLCBlcSksIHRydWUpO1xuICAgICAgY29uc3Qgc2hvdWxkQ29udGV4dFRvb2xiYXJIaWRlID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWNhbkxhdW5jaFRvb2xiYXIoKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNvbnRleHRUb29sYmFyQm91bmRzID0gZ2V0Qm91bmRzKCk7XG4gICAgICAgICAgY29uc3QgYW5jaG9yQm91bmRzID0gaXMkMShsYXN0Q29udGV4dFBvc2l0aW9uLmdldCgpLCAnbm9kZScpID8gZ2V0QW5jaG9yRWxlbWVudEJvdW5kcyhlZGl0b3IsIGxhc3RFbGVtZW50LmdldCgpKSA6IGdldFNlbGVjdGlvbkJvdW5kcyhlZGl0b3IpO1xuICAgICAgICAgIHJldHVybiBjb250ZXh0VG9vbGJhckJvdW5kcy5oZWlnaHQgPD0gMCB8fCAhaXNWZXJ0aWNhbE92ZXJsYXAoYW5jaG9yQm91bmRzLCBjb250ZXh0VG9vbGJhckJvdW5kcywgMC4wMSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBjbG9zZSA9ICgpID0+IHtcbiAgICAgICAgbGFzdEVsZW1lbnQuY2xlYXIoKTtcbiAgICAgICAgbGFzdFRyaWdnZXIuY2xlYXIoKTtcbiAgICAgICAgbGFzdENvbnRleHRQb3NpdGlvbi5jbGVhcigpO1xuICAgICAgICBJbmxpbmVWaWV3LmhpZGUoY29udGV4dGJhcik7XG4gICAgICB9O1xuICAgICAgY29uc3QgaGlkZU9yUmVwb3NpdGlvbklmTmVjZXNzYXJ5ID0gKCkgPT4ge1xuICAgICAgICBpZiAoSW5saW5lVmlldy5pc09wZW4oY29udGV4dGJhcikpIHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0QmFyRWxlID0gY29udGV4dGJhci5lbGVtZW50O1xuICAgICAgICAgIHJlbW92ZSQ2KGNvbnRleHRCYXJFbGUsICdkaXNwbGF5Jyk7XG4gICAgICAgICAgaWYgKHNob3VsZENvbnRleHRUb29sYmFySGlkZSgpKSB7XG4gICAgICAgICAgICBzZXQkOChjb250ZXh0QmFyRWxlLCAnZGlzcGxheScsICdub25lJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxhc3RUcmlnZ2VyLnNldCgwKTtcbiAgICAgICAgICAgIElubGluZVZpZXcucmVwb3NpdGlvbihjb250ZXh0YmFyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCB3cmFwSW5Qb3BEaWFsb2cgPSB0b29sYmFyU3BlYyA9PiAoe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXBvcF9fZGlhbG9nJ11cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW3Rvb2xiYXJTcGVjXSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIEtleWluZy5jb25maWcoeyBtb2RlOiAnYWN5Y2xpYycgfSksXG4gICAgICAgICAgY29uZmlnKCdwb3AtZGlhbG9nLXdyYXAtZXZlbnRzJywgW1xuICAgICAgICAgICAgcnVuT25BdHRhY2hlZChjb21wID0+IHtcbiAgICAgICAgICAgICAgZWRpdG9yLnNob3J0Y3V0cy5hZGQoJ2N0cmwrRjknLCAnZm9jdXMgc3RhdHVzYmFyJywgKCkgPT4gS2V5aW5nLmZvY3VzSW4oY29tcCkpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBydW5PbkRldGFjaGVkKF9jb21wID0+IHtcbiAgICAgICAgICAgICAgZWRpdG9yLnNob3J0Y3V0cy5yZW1vdmUoJ2N0cmwrRjknKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSlcbiAgICAgICAgXSlcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZ2V0U2NvcGVzID0gY2FjaGVkKCgpID0+IGNhdGVnb3Jpc2UocmVnaXN0cnlDb250ZXh0VG9vbGJhcnMsIHRvb2xiYXJBcGkgPT4ge1xuICAgICAgICBjb25zdCBhbGxveVNwZWMgPSBidWlsZFRvb2xiYXIoW3Rvb2xiYXJBcGldKTtcbiAgICAgICAgZW1pdFdpdGgoY29udGV4dGJhciwgZm9yd2FyZFNsaWRlRXZlbnQsIHsgZm9yd2FyZENvbnRlbnRzOiB3cmFwSW5Qb3BEaWFsb2coYWxsb3lTcGVjKSB9KTtcbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IGJ1aWxkQ29udGV4dFRvb2xiYXJHcm91cHMgPSAoYWxsQnV0dG9ucywgY3R4KSA9PiBpZGVudGlmeUJ1dHRvbnMoZWRpdG9yLCB7XG4gICAgICAgIGJ1dHRvbnM6IGFsbEJ1dHRvbnMsXG4gICAgICAgIHRvb2xiYXI6IGN0eC5pdGVtcyxcbiAgICAgICAgYWxsb3dUb29sYmFyR3JvdXBzOiBmYWxzZVxuICAgICAgfSwgZXh0cmFzLmJhY2tzdGFnZSwgT3B0aW9uYWwuc29tZShbJ2Zvcm06J10pKTtcbiAgICAgIGNvbnN0IGJ1aWxkQ29udGV4dEZvcm1Hcm91cHMgPSAoY3R4LCBwcm92aWRlcnMpID0+IENvbnRleHRGb3JtLmJ1aWxkSW5pdEdyb3VwcyhjdHgsIHByb3ZpZGVycyk7XG4gICAgICBjb25zdCBidWlsZFRvb2xiYXIgPSB0b29sYmFycyA9PiB7XG4gICAgICAgIGNvbnN0IHtidXR0b25zfSA9IGVkaXRvci51aS5yZWdpc3RyeS5nZXRBbGwoKTtcbiAgICAgICAgY29uc3Qgc2NvcGVzID0gZ2V0U2NvcGVzKCk7XG4gICAgICAgIGNvbnN0IGFsbEJ1dHRvbnMgPSB7XG4gICAgICAgICAgLi4uYnV0dG9ucyxcbiAgICAgICAgICAuLi5zY29wZXMuZm9ybU5hdmlnYXRvcnNcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdG9vbGJhclR5cGUgPSBnZXRUb29sYmFyTW9kZShlZGl0b3IpID09PSBUb29sYmFyTW9kZSQxLnNjcm9sbGluZyA/IFRvb2xiYXJNb2RlJDEuc2Nyb2xsaW5nIDogVG9vbGJhck1vZGUkMS5kZWZhdWx0O1xuICAgICAgICBjb25zdCBpbml0R3JvdXBzID0gZmxhdHRlbihtYXAkMih0b29sYmFycywgY3R4ID0+IGN0eC50eXBlID09PSAnY29udGV4dHRvb2xiYXInID8gYnVpbGRDb250ZXh0VG9vbGJhckdyb3VwcyhhbGxCdXR0b25zLCBjdHgpIDogYnVpbGRDb250ZXh0Rm9ybUdyb3VwcyhjdHgsIHNoYXJlZEJhY2tzdGFnZS5wcm92aWRlcnMpKSk7XG4gICAgICAgIHJldHVybiByZW5kZXJUb29sYmFyKHtcbiAgICAgICAgICB0eXBlOiB0b29sYmFyVHlwZSxcbiAgICAgICAgICB1aWQ6IGdlbmVyYXRlJDYoJ2NvbnRleHQtdG9vbGJhcicpLFxuICAgICAgICAgIGluaXRHcm91cHMsXG4gICAgICAgICAgb25Fc2NhcGU6IE9wdGlvbmFsLm5vbmUsXG4gICAgICAgICAgY3ljbGljS2V5aW5nOiB0cnVlLFxuICAgICAgICAgIHByb3ZpZGVyczogc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVyc1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRBbmNob3IgPSAocG9zaXRpb24sIGVsZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3QgYW5jaG9yYWdlID0gcG9zaXRpb24gPT09ICdub2RlJyA/IHNoYXJlZEJhY2tzdGFnZS5hbmNob3JzLm5vZGUoZWxlbWVudCkgOiBzaGFyZWRCYWNrc3RhZ2UuYW5jaG9ycy5jdXJzb3IoKTtcbiAgICAgICAgY29uc3QgYW5jaG9yTGF5b3V0ID0gZ2V0QW5jaG9yTGF5b3V0KGVkaXRvciwgcG9zaXRpb24sIGlzVG91Y2goKSwge1xuICAgICAgICAgIGxhc3RFbGVtZW50OiBsYXN0RWxlbWVudC5nZXQsXG4gICAgICAgICAgaXNSZXBvc2l0aW9uOiAoKSA9PiBpcyQxKGxhc3RUcmlnZ2VyLmdldCgpLCAwKSxcbiAgICAgICAgICBnZXRNb2RlOiAoKSA9PiBQb3NpdGlvbmluZy5nZXRNb2RlKHNpbmspXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZGVlcE1lcmdlKGFuY2hvcmFnZSwgYW5jaG9yTGF5b3V0KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBsYXVuY2hDb250ZXh0ID0gKHRvb2xiYXJBcGksIGVsZW0pID0+IHtcbiAgICAgICAgbGF1bmNoQ29udGV4dFRvb2xiYXIuY2FuY2VsKCk7XG4gICAgICAgIGlmICghY2FuTGF1bmNoVG9vbGJhcigpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRvb2xiYXJTcGVjID0gYnVpbGRUb29sYmFyKHRvb2xiYXJBcGkpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRvb2xiYXJBcGlbMF0ucG9zaXRpb247XG4gICAgICAgIGNvbnN0IGFuY2hvciA9IGdldEFuY2hvcihwb3NpdGlvbiwgZWxlbSk7XG4gICAgICAgIGxhc3RDb250ZXh0UG9zaXRpb24uc2V0KHBvc2l0aW9uKTtcbiAgICAgICAgbGFzdFRyaWdnZXIuc2V0KDEpO1xuICAgICAgICBjb25zdCBjb250ZXh0QmFyRWxlID0gY29udGV4dGJhci5lbGVtZW50O1xuICAgICAgICByZW1vdmUkNihjb250ZXh0QmFyRWxlLCAnZGlzcGxheScpO1xuICAgICAgICBpZiAoIWlzU2FtZUxhdW5jaEVsZW1lbnQoZWxlbSkpIHtcbiAgICAgICAgICByZW1vdmUkMihjb250ZXh0QmFyRWxlLCB0cmFuc2l0aW9uQ2xhc3MpO1xuICAgICAgICAgIFBvc2l0aW9uaW5nLnJlc2V0KHNpbmssIGNvbnRleHRiYXIpO1xuICAgICAgICB9XG4gICAgICAgIElubGluZVZpZXcuc2hvd1dpdGhpbkJvdW5kcyhjb250ZXh0YmFyLCB3cmFwSW5Qb3BEaWFsb2codG9vbGJhclNwZWMpLCB7XG4gICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgIHRyYW5zaXRpb246IHtcbiAgICAgICAgICAgIGNsYXNzZXM6IFt0cmFuc2l0aW9uQ2xhc3NdLFxuICAgICAgICAgICAgbW9kZTogJ3BsYWNlbWVudCdcbiAgICAgICAgICB9XG4gICAgICAgIH0sICgpID0+IE9wdGlvbmFsLnNvbWUoZ2V0Qm91bmRzKCkpKTtcbiAgICAgICAgZWxlbS5mb2xkKGxhc3RFbGVtZW50LmNsZWFyLCBsYXN0RWxlbWVudC5zZXQpO1xuICAgICAgICBpZiAoc2hvdWxkQ29udGV4dFRvb2xiYXJIaWRlKCkpIHtcbiAgICAgICAgICBzZXQkOChjb250ZXh0QmFyRWxlLCAnZGlzcGxheScsICdub25lJyk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBsZXQgaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgY29uc3QgbGF1bmNoQ29udGV4dFRvb2xiYXIgPSBsYXN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFlZGl0b3IuaGFzRm9jdXMoKSB8fCBlZGl0b3IucmVtb3ZlZCB8fCBpc0RyYWdnaW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXMoY29udGV4dGJhci5lbGVtZW50LCB0cmFuc2l0aW9uQ2xhc3MpKSB7XG4gICAgICAgICAgbGF1bmNoQ29udGV4dFRvb2xiYXIudGhyb3R0bGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzY29wZXMgPSBnZXRTY29wZXMoKTtcbiAgICAgICAgICBsb29rdXAkMShzY29wZXMsIGVkaXRvcikuZm9sZChjbG9zZSwgaW5mbyA9PiB7XG4gICAgICAgICAgICBsYXVuY2hDb250ZXh0KGluZm8udG9vbGJhcnMsIE9wdGlvbmFsLnNvbWUoaW5mby5lbGVtKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDE3KTtcbiAgICAgIGVkaXRvci5vbignaW5pdCcsICgpID0+IHtcbiAgICAgICAgZWRpdG9yLm9uKCdyZW1vdmUnLCBjbG9zZSk7XG4gICAgICAgIGVkaXRvci5vbignU2Nyb2xsQ29udGVudCBTY3JvbGxXaW5kb3cgT2JqZWN0UmVzaXplZCBSZXNpemVFZGl0b3IgbG9uZ3ByZXNzJywgaGlkZU9yUmVwb3NpdGlvbklmTmVjZXNzYXJ5KTtcbiAgICAgICAgZWRpdG9yLm9uKCdjbGljayBrZXl1cCBmb2N1cyBTZXRDb250ZW50JywgbGF1bmNoQ29udGV4dFRvb2xiYXIudGhyb3R0bGUpO1xuICAgICAgICBlZGl0b3Iub24oaGlkZUNvbnRleHRUb29sYmFyRXZlbnQsIGNsb3NlKTtcbiAgICAgICAgZWRpdG9yLm9uKHNob3dDb250ZXh0VG9vbGJhckV2ZW50LCBlID0+IHtcbiAgICAgICAgICBjb25zdCBzY29wZXMgPSBnZXRTY29wZXMoKTtcbiAgICAgICAgICBnZXQkZyhzY29wZXMubG9va3VwVGFibGUsIGUudG9vbGJhcktleSkuZWFjaChjdHggPT4ge1xuICAgICAgICAgICAgbGF1bmNoQ29udGV4dChbY3R4XSwgc29tZUlmKGUudGFyZ2V0ICE9PSBlZGl0b3IsIGUudGFyZ2V0KSk7XG4gICAgICAgICAgICBJbmxpbmVWaWV3LmdldENvbnRlbnQoY29udGV4dGJhcikuZWFjaChLZXlpbmcuZm9jdXNJbik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBlZGl0b3Iub24oJ2ZvY3Vzb3V0JywgX2UgPT4ge1xuICAgICAgICAgIGdsb2JhbCQ5LnNldEVkaXRvclRpbWVvdXQoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2VhcmNoKHNpbmsuZWxlbWVudCkuaXNOb25lKCkgJiYgc2VhcmNoKGNvbnRleHRiYXIuZWxlbWVudCkuaXNOb25lKCkpIHtcbiAgICAgICAgICAgICAgY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVkaXRvci5vbignU3dpdGNoTW9kZScsICgpID0+IHtcbiAgICAgICAgICBpZiAoZWRpdG9yLm1vZGUuaXNSZWFkT25seSgpKSB7XG4gICAgICAgICAgICBjbG9zZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVkaXRvci5vbignQWZ0ZXJQcm9ncmVzc1N0YXRlJywgZXZlbnQgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5zdGF0ZSkge1xuICAgICAgICAgICAgY2xvc2UoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvci5oYXNGb2N1cygpKSB7XG4gICAgICAgICAgICBsYXVuY2hDb250ZXh0VG9vbGJhci50aHJvdHRsZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVkaXRvci5vbignZHJhZ3N0YXJ0JywgKCkgPT4ge1xuICAgICAgICAgIGlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLm9uKCdkcmFnZW5kIGRyb3AnLCAoKSA9PiB7XG4gICAgICAgICAgaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLm9uKCdOb2RlQ2hhbmdlJywgX2UgPT4ge1xuICAgICAgICAgIHNlYXJjaChjb250ZXh0YmFyLmVsZW1lbnQpLmZvbGQobGF1bmNoQ29udGV4dFRvb2xiYXIudGhyb3R0bGUsIG5vb3ApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZWdpc3RlciQ4ID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGFsaWduVG9vbGJhckJ1dHRvbnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnYWxpZ25sZWZ0JyxcbiAgICAgICAgICB0ZXh0OiAnQWxpZ24gbGVmdCcsXG4gICAgICAgICAgY21kOiAnSnVzdGlmeUxlZnQnLFxuICAgICAgICAgIGljb246ICdhbGlnbi1sZWZ0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2FsaWduY2VudGVyJyxcbiAgICAgICAgICB0ZXh0OiAnQWxpZ24gY2VudGVyJyxcbiAgICAgICAgICBjbWQ6ICdKdXN0aWZ5Q2VudGVyJyxcbiAgICAgICAgICBpY29uOiAnYWxpZ24tY2VudGVyJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2FsaWducmlnaHQnLFxuICAgICAgICAgIHRleHQ6ICdBbGlnbiByaWdodCcsXG4gICAgICAgICAgY21kOiAnSnVzdGlmeVJpZ2h0JyxcbiAgICAgICAgICBpY29uOiAnYWxpZ24tcmlnaHQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnYWxpZ25qdXN0aWZ5JyxcbiAgICAgICAgICB0ZXh0OiAnSnVzdGlmeScsXG4gICAgICAgICAgY21kOiAnSnVzdGlmeUZ1bGwnLFxuICAgICAgICAgIGljb246ICdhbGlnbi1qdXN0aWZ5J1xuICAgICAgICB9XG4gICAgICBdO1xuICAgICAgZWFjaCQxKGFsaWduVG9vbGJhckJ1dHRvbnMsIGl0ZW0gPT4ge1xuICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkVG9nZ2xlQnV0dG9uKGl0ZW0ubmFtZSwge1xuICAgICAgICAgIHRvb2x0aXA6IGl0ZW0udGV4dCxcbiAgICAgICAgICBpY29uOiBpdGVtLmljb24sXG4gICAgICAgICAgb25BY3Rpb246IG9uQWN0aW9uRXhlY0NvbW1hbmQoZWRpdG9yLCBpdGVtLmNtZCksXG4gICAgICAgICAgb25TZXR1cDogb25TZXR1cFN0YXRlVG9nZ2xlKGVkaXRvciwgaXRlbS5uYW1lKVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZEJ1dHRvbignYWxpZ25ub25lJywge1xuICAgICAgICB0b29sdGlwOiAnTm8gYWxpZ25tZW50JyxcbiAgICAgICAgaWNvbjogJ2FsaWduLW5vbmUnLFxuICAgICAgICBvblNldHVwOiBvblNldHVwRWRpdGFibGVUb2dnbGUoZWRpdG9yKSxcbiAgICAgICAgb25BY3Rpb246IG9uQWN0aW9uRXhlY0NvbW1hbmQoZWRpdG9yLCAnSnVzdGlmeU5vbmUnKVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlZ2lzdGVyQ29udHJvbGxlciA9IChlZGl0b3IsIHNwZWMpID0+IHtcbiAgICAgIGNvbnN0IGdldE1lbnVJdGVtcyA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHNwZWMuZ2V0T3B0aW9ucyhlZGl0b3IpO1xuICAgICAgICBjb25zdCBpbml0aWFsID0gc3BlYy5nZXRDdXJyZW50KGVkaXRvcikubWFwKHNwZWMuaGFzaCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSB2YWx1ZSQyKCk7XG4gICAgICAgIHJldHVybiBtYXAkMihvcHRpb25zLCB2YWx1ZSA9PiAoe1xuICAgICAgICAgIHR5cGU6ICd0b2dnbGVtZW51aXRlbScsXG4gICAgICAgICAgdGV4dDogc3BlYy5kaXNwbGF5KHZhbHVlKSxcbiAgICAgICAgICBvblNldHVwOiBhcGkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2V0QWN0aXZlID0gYWN0aXZlID0+IHtcbiAgICAgICAgICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnQub24ob2xkQXBpID0+IG9sZEFwaS5zZXRBY3RpdmUoZmFsc2UpKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50LnNldChhcGkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFwaS5zZXRBY3RpdmUoYWN0aXZlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzZXRBY3RpdmUoaXMkMShpbml0aWFsLCBzcGVjLmhhc2godmFsdWUpKSk7XG4gICAgICAgICAgICBjb25zdCB1bmJpbmRXYXRjaGVyID0gc3BlYy53YXRjaGVyKGVkaXRvciwgdmFsdWUsIHNldEFjdGl2ZSk7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICBjdXJyZW50LmNsZWFyKCk7XG4gICAgICAgICAgICAgIHVuYmluZFdhdGNoZXIoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkFjdGlvbjogKCkgPT4gc3BlYy5zZXRDdXJyZW50KGVkaXRvciwgdmFsdWUpXG4gICAgICAgIH0pKTtcbiAgICAgIH07XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTWVudUJ1dHRvbihzcGVjLm5hbWUsIHtcbiAgICAgICAgdG9vbHRpcDogc3BlYy50ZXh0LFxuICAgICAgICBpY29uOiBzcGVjLmljb24sXG4gICAgICAgIGZldGNoOiBjYWxsYmFjayA9PiBjYWxsYmFjayhnZXRNZW51SXRlbXMoKSksXG4gICAgICAgIG9uU2V0dXA6IHNwZWMub25Ub29sYmFyU2V0dXBcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE5lc3RlZE1lbnVJdGVtKHNwZWMubmFtZSwge1xuICAgICAgICB0eXBlOiAnbmVzdGVkbWVudWl0ZW0nLFxuICAgICAgICB0ZXh0OiBzcGVjLnRleHQsXG4gICAgICAgIGdldFN1Ym1lbnVJdGVtczogZ2V0TWVudUl0ZW1zLFxuICAgICAgICBvblNldHVwOiBzcGVjLm9uTWVudVNldHVwXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGxpbmVIZWlnaHRTcGVjID0gZWRpdG9yID0+ICh7XG4gICAgICBuYW1lOiAnbGluZWhlaWdodCcsXG4gICAgICB0ZXh0OiAnTGluZSBoZWlnaHQnLFxuICAgICAgaWNvbjogJ2xpbmUtaGVpZ2h0JyxcbiAgICAgIGdldE9wdGlvbnM6IGdldExpbmVIZWlnaHRGb3JtYXRzLFxuICAgICAgaGFzaDogaW5wdXQgPT4gbm9ybWFsaXNlKGlucHV0LCBbXG4gICAgICAgICdmaXhlZCcsXG4gICAgICAgICdyZWxhdGl2ZScsXG4gICAgICAgICdlbXB0eSdcbiAgICAgIF0pLmdldE9yKGlucHV0KSxcbiAgICAgIGRpc3BsYXk6IGlkZW50aXR5LFxuICAgICAgd2F0Y2hlcjogKGVkaXRvciwgdmFsdWUsIGNhbGxiYWNrKSA9PiBlZGl0b3IuZm9ybWF0dGVyLmZvcm1hdENoYW5nZWQoJ2xpbmVoZWlnaHQnLCBjYWxsYmFjaywgZmFsc2UsIHsgdmFsdWUgfSkudW5iaW5kLFxuICAgICAgZ2V0Q3VycmVudDogZWRpdG9yID0+IE9wdGlvbmFsLmZyb20oZWRpdG9yLnF1ZXJ5Q29tbWFuZFZhbHVlKCdMaW5lSGVpZ2h0JykpLFxuICAgICAgc2V0Q3VycmVudDogKGVkaXRvciwgdmFsdWUpID0+IGVkaXRvci5leGVjQ29tbWFuZCgnTGluZUhlaWdodCcsIGZhbHNlLCB2YWx1ZSksXG4gICAgICBvblRvb2xiYXJTZXR1cDogb25TZXR1cEVkaXRhYmxlVG9nZ2xlKGVkaXRvciksXG4gICAgICBvbk1lbnVTZXR1cDogb25TZXR1cEVkaXRhYmxlVG9nZ2xlKGVkaXRvcilcbiAgICB9KTtcbiAgICBjb25zdCBsYW5ndWFnZVNwZWMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgc2V0dGluZ3NPcHQgPSBPcHRpb25hbC5mcm9tKGdldENvbnRlbnRMYW5ndWFnZXMoZWRpdG9yKSk7XG4gICAgICByZXR1cm4gc2V0dGluZ3NPcHQubWFwKHNldHRpbmdzID0+ICh7XG4gICAgICAgIG5hbWU6ICdsYW5ndWFnZScsXG4gICAgICAgIHRleHQ6ICdMYW5ndWFnZScsXG4gICAgICAgIGljb246ICdsYW5ndWFnZScsXG4gICAgICAgIGdldE9wdGlvbnM6IGNvbnN0YW50JDEoc2V0dGluZ3MpLFxuICAgICAgICBoYXNoOiBpbnB1dCA9PiBpc1VuZGVmaW5lZChpbnB1dC5jdXN0b21Db2RlKSA/IGlucHV0LmNvZGUgOiBgJHsgaW5wdXQuY29kZSB9LyR7IGlucHV0LmN1c3RvbUNvZGUgfWAsXG4gICAgICAgIGRpc3BsYXk6IGlucHV0ID0+IGlucHV0LnRpdGxlLFxuICAgICAgICB3YXRjaGVyOiAoZWRpdG9yLCB2YWx1ZSwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgcmV0dXJuIGVkaXRvci5mb3JtYXR0ZXIuZm9ybWF0Q2hhbmdlZCgnbGFuZycsIGNhbGxiYWNrLCBmYWxzZSwge1xuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLmNvZGUsXG4gICAgICAgICAgICBjdXN0b21WYWx1ZTogKF9hID0gdmFsdWUuY3VzdG9tQ29kZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbnVsbFxuICAgICAgICAgIH0pLnVuYmluZDtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0Q3VycmVudDogZWRpdG9yID0+IHtcbiAgICAgICAgICBjb25zdCBub2RlID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLnNlbGVjdGlvbi5nZXROb2RlKCkpO1xuICAgICAgICAgIHJldHVybiBjbG9zZXN0JDQobm9kZSwgbiA9PiBPcHRpb25hbC5zb21lKG4pLmZpbHRlcihpc0VsZW1lbnQkMSkuYmluZChlbGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29kZU9wdCA9IGdldE9wdChlbGUsICdsYW5nJyk7XG4gICAgICAgICAgICByZXR1cm4gY29kZU9wdC5tYXAoY29kZSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGN1c3RvbUNvZGUgPSBnZXRPcHQoZWxlLCAnZGF0YS1tY2UtbGFuZycpLmdldE9yVW5kZWZpbmVkKCk7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29kZSxcbiAgICAgICAgICAgICAgICBjdXN0b21Db2RlLFxuICAgICAgICAgICAgICAgIHRpdGxlOiAnJ1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9LFxuICAgICAgICBzZXRDdXJyZW50OiAoZWRpdG9yLCBsYW5nKSA9PiBlZGl0b3IuZXhlY0NvbW1hbmQoJ0xhbmcnLCBmYWxzZSwgbGFuZyksXG4gICAgICAgIG9uVG9vbGJhclNldHVwOiBhcGkgPT4ge1xuICAgICAgICAgIGNvbnN0IHVuYmluZGVyID0gdW5iaW5kYWJsZSgpO1xuICAgICAgICAgIGFwaS5zZXRBY3RpdmUoZWRpdG9yLmZvcm1hdHRlci5tYXRjaCgnbGFuZycsIHt9LCB1bmRlZmluZWQsIHRydWUpKTtcbiAgICAgICAgICB1bmJpbmRlci5zZXQoZWRpdG9yLmZvcm1hdHRlci5mb3JtYXRDaGFuZ2VkKCdsYW5nJywgYXBpLnNldEFjdGl2ZSwgdHJ1ZSkpO1xuICAgICAgICAgIHJldHVybiBjb21wb3NlVW5iaW5kZXJzKHVuYmluZGVyLmNsZWFyLCBvblNldHVwRWRpdGFibGVUb2dnbGUoZWRpdG9yKShhcGkpKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25NZW51U2V0dXA6IG9uU2V0dXBFZGl0YWJsZVRvZ2dsZShlZGl0b3IpXG4gICAgICB9KSk7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlciQ3ID0gZWRpdG9yID0+IHtcbiAgICAgIHJlZ2lzdGVyQ29udHJvbGxlcihlZGl0b3IsIGxpbmVIZWlnaHRTcGVjKGVkaXRvcikpO1xuICAgICAgbGFuZ3VhZ2VTcGVjKGVkaXRvcikuZWFjaChzcGVjID0+IHJlZ2lzdGVyQ29udHJvbGxlcihlZGl0b3IsIHNwZWMpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVnaXN0ZXIkNiA9IChlZGl0b3IsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY3JlYXRlQWxpZ25NZW51KGVkaXRvciwgYmFja3N0YWdlKTtcbiAgICAgIGNyZWF0ZUZvbnRGYW1pbHlNZW51KGVkaXRvciwgYmFja3N0YWdlKTtcbiAgICAgIGNyZWF0ZVN0eWxlc01lbnUoZWRpdG9yLCBiYWNrc3RhZ2UpO1xuICAgICAgY3JlYXRlQmxvY2tzTWVudShlZGl0b3IsIGJhY2tzdGFnZSk7XG4gICAgICBjcmVhdGVGb250U2l6ZU1lbnUoZWRpdG9yLCBiYWNrc3RhZ2UpO1xuICAgIH07XG5cbiAgICBjb25zdCBvblNldHVwT3V0ZGVudFN0YXRlID0gZWRpdG9yID0+IG9uU2V0dXBFdmVudChlZGl0b3IsICdOb2RlQ2hhbmdlJywgYXBpID0+IHtcbiAgICAgIGFwaS5zZXRFbmFibGVkKGVkaXRvci5xdWVyeUNvbW1hbmRTdGF0ZSgnb3V0ZGVudCcpICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFZGl0YWJsZSgpKTtcbiAgICB9KTtcbiAgICBjb25zdCByZWdpc3RlckJ1dHRvbnMkMiA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQnV0dG9uKCdvdXRkZW50Jywge1xuICAgICAgICB0b29sdGlwOiAnRGVjcmVhc2UgaW5kZW50JyxcbiAgICAgICAgaWNvbjogJ291dGRlbnQnLFxuICAgICAgICBvblNldHVwOiBvblNldHVwT3V0ZGVudFN0YXRlKGVkaXRvciksXG4gICAgICAgIG9uQWN0aW9uOiBvbkFjdGlvbkV4ZWNDb21tYW5kKGVkaXRvciwgJ291dGRlbnQnKVxuICAgICAgfSk7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQnV0dG9uKCdpbmRlbnQnLCB7XG4gICAgICAgIHRvb2x0aXA6ICdJbmNyZWFzZSBpbmRlbnQnLFxuICAgICAgICBpY29uOiAnaW5kZW50JyxcbiAgICAgICAgb25TZXR1cDogb25TZXR1cEVkaXRhYmxlVG9nZ2xlKGVkaXRvciksXG4gICAgICAgIG9uQWN0aW9uOiBvbkFjdGlvbkV4ZWNDb21tYW5kKGVkaXRvciwgJ2luZGVudCcpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyJDUgPSBlZGl0b3IgPT4ge1xuICAgICAgcmVnaXN0ZXJCdXR0b25zJDIoZWRpdG9yKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbWFrZVNldHVwSGFuZGxlciA9IChlZGl0b3IsIHBhc3RlQXNUZXh0KSA9PiBhcGkgPT4ge1xuICAgICAgYXBpLnNldEFjdGl2ZShwYXN0ZUFzVGV4dC5nZXQoKSk7XG4gICAgICBjb25zdCBwYXN0ZVBsYWluVGV4dFRvZ2dsZUhhbmRsZXIgPSBlID0+IHtcbiAgICAgICAgcGFzdGVBc1RleHQuc2V0KGUuc3RhdGUpO1xuICAgICAgICBhcGkuc2V0QWN0aXZlKGUuc3RhdGUpO1xuICAgICAgfTtcbiAgICAgIGVkaXRvci5vbignUGFzdGVQbGFpblRleHRUb2dnbGUnLCBwYXN0ZVBsYWluVGV4dFRvZ2dsZUhhbmRsZXIpO1xuICAgICAgcmV0dXJuIGNvbXBvc2VVbmJpbmRlcnMoKCkgPT4gZWRpdG9yLm9mZignUGFzdGVQbGFpblRleHRUb2dnbGUnLCBwYXN0ZVBsYWluVGV4dFRvZ2dsZUhhbmRsZXIpLCBvblNldHVwRWRpdGFibGVUb2dnbGUoZWRpdG9yKShhcGkpKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyJDQgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgcGFzdGVBc1RleHQgPSBDZWxsKGdldFBhc3RlQXNUZXh0KGVkaXRvcikpO1xuICAgICAgY29uc3Qgb25BY3Rpb24gPSAoKSA9PiBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZVRvZ2dsZVBsYWluVGV4dFBhc3RlJyk7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkVG9nZ2xlQnV0dG9uKCdwYXN0ZXRleHQnLCB7XG4gICAgICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgICAgIGljb246ICdwYXN0ZS10ZXh0JyxcbiAgICAgICAgdG9vbHRpcDogJ1Bhc3RlIGFzIHRleHQnLFxuICAgICAgICBvbkFjdGlvbixcbiAgICAgICAgb25TZXR1cDogbWFrZVNldHVwSGFuZGxlcihlZGl0b3IsIHBhc3RlQXNUZXh0KVxuICAgICAgfSk7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkVG9nZ2xlTWVudUl0ZW0oJ3Bhc3RldGV4dCcsIHtcbiAgICAgICAgdGV4dDogJ1Bhc3RlIGFzIHRleHQnLFxuICAgICAgICBpY29uOiAncGFzdGUtdGV4dCcsXG4gICAgICAgIG9uQWN0aW9uLFxuICAgICAgICBvblNldHVwOiBtYWtlU2V0dXBIYW5kbGVyKGVkaXRvciwgcGFzdGVBc1RleHQpXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25BY3Rpb25Ub2dnbGVGb3JtYXQgPSAoZWRpdG9yLCBmbXQpID0+ICgpID0+IHtcbiAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnbWNlVG9nZ2xlRm9ybWF0JywgZmFsc2UsIGZtdCk7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlckZvcm1hdEJ1dHRvbnMgPSBlZGl0b3IgPT4ge1xuICAgICAgZ2xvYmFsJDEuZWFjaChbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnYm9sZCcsXG4gICAgICAgICAgdGV4dDogJ0JvbGQnLFxuICAgICAgICAgIGljb246ICdib2xkJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2l0YWxpYycsXG4gICAgICAgICAgdGV4dDogJ0l0YWxpYycsXG4gICAgICAgICAgaWNvbjogJ2l0YWxpYydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICd1bmRlcmxpbmUnLFxuICAgICAgICAgIHRleHQ6ICdVbmRlcmxpbmUnLFxuICAgICAgICAgIGljb246ICd1bmRlcmxpbmUnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnc3RyaWtldGhyb3VnaCcsXG4gICAgICAgICAgdGV4dDogJ1N0cmlrZXRocm91Z2gnLFxuICAgICAgICAgIGljb246ICdzdHJpa2UtdGhyb3VnaCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdzdWJzY3JpcHQnLFxuICAgICAgICAgIHRleHQ6ICdTdWJzY3JpcHQnLFxuICAgICAgICAgIGljb246ICdzdWJzY3JpcHQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnc3VwZXJzY3JpcHQnLFxuICAgICAgICAgIHRleHQ6ICdTdXBlcnNjcmlwdCcsXG4gICAgICAgICAgaWNvbjogJ3N1cGVyc2NyaXB0J1xuICAgICAgICB9XG4gICAgICBdLCAoYnRuLCBfaWR4KSA9PiB7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRUb2dnbGVCdXR0b24oYnRuLm5hbWUsIHtcbiAgICAgICAgICB0b29sdGlwOiBidG4udGV4dCxcbiAgICAgICAgICBpY29uOiBidG4uaWNvbixcbiAgICAgICAgICBvblNldHVwOiBvblNldHVwU3RhdGVUb2dnbGUoZWRpdG9yLCBidG4ubmFtZSksXG4gICAgICAgICAgb25BY3Rpb246IG9uQWN0aW9uVG9nZ2xlRm9ybWF0KGVkaXRvciwgYnRuLm5hbWUpXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSA2OyBpKyspIHtcbiAgICAgICAgY29uc3QgbmFtZSA9ICdoJyArIGk7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRUb2dnbGVCdXR0b24obmFtZSwge1xuICAgICAgICAgIHRleHQ6IG5hbWUudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICB0b29sdGlwOiAnSGVhZGluZyAnICsgaSxcbiAgICAgICAgICBvblNldHVwOiBvblNldHVwU3RhdGVUb2dnbGUoZWRpdG9yLCBuYW1lKSxcbiAgICAgICAgICBvbkFjdGlvbjogb25BY3Rpb25Ub2dnbGVGb3JtYXQoZWRpdG9yLCBuYW1lKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyQ29tbWFuZEJ1dHRvbnMgPSBlZGl0b3IgPT4ge1xuICAgICAgZ2xvYmFsJDEuZWFjaChbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnY29weScsXG4gICAgICAgICAgdGV4dDogJ0NvcHknLFxuICAgICAgICAgIGFjdGlvbjogJ0NvcHknLFxuICAgICAgICAgIGljb246ICdjb3B5J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2hlbHAnLFxuICAgICAgICAgIHRleHQ6ICdIZWxwJyxcbiAgICAgICAgICBhY3Rpb246ICdtY2VIZWxwJyxcbiAgICAgICAgICBpY29uOiAnaGVscCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdzZWxlY3RhbGwnLFxuICAgICAgICAgIHRleHQ6ICdTZWxlY3QgYWxsJyxcbiAgICAgICAgICBhY3Rpb246ICdTZWxlY3RBbGwnLFxuICAgICAgICAgIGljb246ICdzZWxlY3QtYWxsJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ25ld2RvY3VtZW50JyxcbiAgICAgICAgICB0ZXh0OiAnTmV3IGRvY3VtZW50JyxcbiAgICAgICAgICBhY3Rpb246ICdtY2VOZXdEb2N1bWVudCcsXG4gICAgICAgICAgaWNvbjogJ25ldy1kb2N1bWVudCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdwcmludCcsXG4gICAgICAgICAgdGV4dDogJ1ByaW50JyxcbiAgICAgICAgICBhY3Rpb246ICdtY2VQcmludCcsXG4gICAgICAgICAgaWNvbjogJ3ByaW50J1xuICAgICAgICB9XG4gICAgICBdLCBidG4gPT4ge1xuICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQnV0dG9uKGJ0bi5uYW1lLCB7XG4gICAgICAgICAgdG9vbHRpcDogYnRuLnRleHQsXG4gICAgICAgICAgaWNvbjogYnRuLmljb24sXG4gICAgICAgICAgb25BY3Rpb246IG9uQWN0aW9uRXhlY0NvbW1hbmQoZWRpdG9yLCBidG4uYWN0aW9uKVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgZ2xvYmFsJDEuZWFjaChbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnY3V0JyxcbiAgICAgICAgICB0ZXh0OiAnQ3V0JyxcbiAgICAgICAgICBhY3Rpb246ICdDdXQnLFxuICAgICAgICAgIGljb246ICdjdXQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncGFzdGUnLFxuICAgICAgICAgIHRleHQ6ICdQYXN0ZScsXG4gICAgICAgICAgYWN0aW9uOiAnUGFzdGUnLFxuICAgICAgICAgIGljb246ICdwYXN0ZSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdyZW1vdmVmb3JtYXQnLFxuICAgICAgICAgIHRleHQ6ICdDbGVhciBmb3JtYXR0aW5nJyxcbiAgICAgICAgICBhY3Rpb246ICdSZW1vdmVGb3JtYXQnLFxuICAgICAgICAgIGljb246ICdyZW1vdmUtZm9ybWF0dGluZydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdyZW1vdmUnLFxuICAgICAgICAgIHRleHQ6ICdSZW1vdmUnLFxuICAgICAgICAgIGFjdGlvbjogJ0RlbGV0ZScsXG4gICAgICAgICAgaWNvbjogJ3JlbW92ZSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdocicsXG4gICAgICAgICAgdGV4dDogJ0hvcml6b250YWwgbGluZScsXG4gICAgICAgICAgYWN0aW9uOiAnSW5zZXJ0SG9yaXpvbnRhbFJ1bGUnLFxuICAgICAgICAgIGljb246ICdob3Jpem9udGFsLXJ1bGUnXG4gICAgICAgIH1cbiAgICAgIF0sIGJ0biA9PiB7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRCdXR0b24oYnRuLm5hbWUsIHtcbiAgICAgICAgICB0b29sdGlwOiBidG4udGV4dCxcbiAgICAgICAgICBpY29uOiBidG4uaWNvbixcbiAgICAgICAgICBvblNldHVwOiBvblNldHVwRWRpdGFibGVUb2dnbGUoZWRpdG9yKSxcbiAgICAgICAgICBvbkFjdGlvbjogb25BY3Rpb25FeGVjQ29tbWFuZChlZGl0b3IsIGJ0bi5hY3Rpb24pXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlckNvbW1hbmRUb2dnbGVCdXR0b25zID0gZWRpdG9yID0+IHtcbiAgICAgIGdsb2JhbCQxLmVhY2goW3tcbiAgICAgICAgICBuYW1lOiAnYmxvY2txdW90ZScsXG4gICAgICAgICAgdGV4dDogJ0Jsb2NrcXVvdGUnLFxuICAgICAgICAgIGFjdGlvbjogJ21jZUJsb2NrUXVvdGUnLFxuICAgICAgICAgIGljb246ICdxdW90ZSdcbiAgICAgICAgfV0sIGJ0biA9PiB7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRUb2dnbGVCdXR0b24oYnRuLm5hbWUsIHtcbiAgICAgICAgICB0b29sdGlwOiBidG4udGV4dCxcbiAgICAgICAgICBpY29uOiBidG4uaWNvbixcbiAgICAgICAgICBvbkFjdGlvbjogb25BY3Rpb25FeGVjQ29tbWFuZChlZGl0b3IsIGJ0bi5hY3Rpb24pLFxuICAgICAgICAgIG9uU2V0dXA6IG9uU2V0dXBTdGF0ZVRvZ2dsZShlZGl0b3IsIGJ0bi5uYW1lKVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXJCdXR0b25zJDEgPSBlZGl0b3IgPT4ge1xuICAgICAgcmVnaXN0ZXJGb3JtYXRCdXR0b25zKGVkaXRvcik7XG4gICAgICByZWdpc3RlckNvbW1hbmRCdXR0b25zKGVkaXRvcik7XG4gICAgICByZWdpc3RlckNvbW1hbmRUb2dnbGVCdXR0b25zKGVkaXRvcik7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3Rlck1lbnVJdGVtcyQyID0gZWRpdG9yID0+IHtcbiAgICAgIGdsb2JhbCQxLmVhY2goW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ25ld2RvY3VtZW50JyxcbiAgICAgICAgICB0ZXh0OiAnTmV3IGRvY3VtZW50JyxcbiAgICAgICAgICBhY3Rpb246ICdtY2VOZXdEb2N1bWVudCcsXG4gICAgICAgICAgaWNvbjogJ25ldy1kb2N1bWVudCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdjb3B5JyxcbiAgICAgICAgICB0ZXh0OiAnQ29weScsXG4gICAgICAgICAgYWN0aW9uOiAnQ29weScsXG4gICAgICAgICAgaWNvbjogJ2NvcHknLFxuICAgICAgICAgIHNob3J0Y3V0OiAnTWV0YStDJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3NlbGVjdGFsbCcsXG4gICAgICAgICAgdGV4dDogJ1NlbGVjdCBhbGwnLFxuICAgICAgICAgIGFjdGlvbjogJ1NlbGVjdEFsbCcsXG4gICAgICAgICAgaWNvbjogJ3NlbGVjdC1hbGwnLFxuICAgICAgICAgIHNob3J0Y3V0OiAnTWV0YStBJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3ByaW50JyxcbiAgICAgICAgICB0ZXh0OiAnUHJpbnQuLi4nLFxuICAgICAgICAgIGFjdGlvbjogJ21jZVByaW50JyxcbiAgICAgICAgICBpY29uOiAncHJpbnQnLFxuICAgICAgICAgIHNob3J0Y3V0OiAnTWV0YStQJ1xuICAgICAgICB9XG4gICAgICBdLCBtZW51aXRlbSA9PiB7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRNZW51SXRlbShtZW51aXRlbS5uYW1lLCB7XG4gICAgICAgICAgdGV4dDogbWVudWl0ZW0udGV4dCxcbiAgICAgICAgICBpY29uOiBtZW51aXRlbS5pY29uLFxuICAgICAgICAgIHNob3J0Y3V0OiBtZW51aXRlbS5zaG9ydGN1dCxcbiAgICAgICAgICBvbkFjdGlvbjogb25BY3Rpb25FeGVjQ29tbWFuZChlZGl0b3IsIG1lbnVpdGVtLmFjdGlvbilcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGdsb2JhbCQxLmVhY2goW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2JvbGQnLFxuICAgICAgICAgIHRleHQ6ICdCb2xkJyxcbiAgICAgICAgICBhY3Rpb246ICdCb2xkJyxcbiAgICAgICAgICBpY29uOiAnYm9sZCcsXG4gICAgICAgICAgc2hvcnRjdXQ6ICdNZXRhK0InXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnaXRhbGljJyxcbiAgICAgICAgICB0ZXh0OiAnSXRhbGljJyxcbiAgICAgICAgICBhY3Rpb246ICdJdGFsaWMnLFxuICAgICAgICAgIGljb246ICdpdGFsaWMnLFxuICAgICAgICAgIHNob3J0Y3V0OiAnTWV0YStJJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3VuZGVybGluZScsXG4gICAgICAgICAgdGV4dDogJ1VuZGVybGluZScsXG4gICAgICAgICAgYWN0aW9uOiAnVW5kZXJsaW5lJyxcbiAgICAgICAgICBpY29uOiAndW5kZXJsaW5lJyxcbiAgICAgICAgICBzaG9ydGN1dDogJ01ldGErVSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdzdHJpa2V0aHJvdWdoJyxcbiAgICAgICAgICB0ZXh0OiAnU3RyaWtldGhyb3VnaCcsXG4gICAgICAgICAgYWN0aW9uOiAnU3RyaWtldGhyb3VnaCcsXG4gICAgICAgICAgaWNvbjogJ3N0cmlrZS10aHJvdWdoJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3N1YnNjcmlwdCcsXG4gICAgICAgICAgdGV4dDogJ1N1YnNjcmlwdCcsXG4gICAgICAgICAgYWN0aW9uOiAnU3Vic2NyaXB0JyxcbiAgICAgICAgICBpY29uOiAnc3Vic2NyaXB0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3N1cGVyc2NyaXB0JyxcbiAgICAgICAgICB0ZXh0OiAnU3VwZXJzY3JpcHQnLFxuICAgICAgICAgIGFjdGlvbjogJ1N1cGVyc2NyaXB0JyxcbiAgICAgICAgICBpY29uOiAnc3VwZXJzY3JpcHQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncmVtb3ZlZm9ybWF0JyxcbiAgICAgICAgICB0ZXh0OiAnQ2xlYXIgZm9ybWF0dGluZycsXG4gICAgICAgICAgYWN0aW9uOiAnUmVtb3ZlRm9ybWF0JyxcbiAgICAgICAgICBpY29uOiAncmVtb3ZlLWZvcm1hdHRpbmcnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnY3V0JyxcbiAgICAgICAgICB0ZXh0OiAnQ3V0JyxcbiAgICAgICAgICBhY3Rpb246ICdDdXQnLFxuICAgICAgICAgIGljb246ICdjdXQnLFxuICAgICAgICAgIHNob3J0Y3V0OiAnTWV0YStYJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3Bhc3RlJyxcbiAgICAgICAgICB0ZXh0OiAnUGFzdGUnLFxuICAgICAgICAgIGFjdGlvbjogJ1Bhc3RlJyxcbiAgICAgICAgICBpY29uOiAncGFzdGUnLFxuICAgICAgICAgIHNob3J0Y3V0OiAnTWV0YStWJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2hyJyxcbiAgICAgICAgICB0ZXh0OiAnSG9yaXpvbnRhbCBsaW5lJyxcbiAgICAgICAgICBhY3Rpb246ICdJbnNlcnRIb3Jpem9udGFsUnVsZScsXG4gICAgICAgICAgaWNvbjogJ2hvcml6b250YWwtcnVsZSdcbiAgICAgICAgfVxuICAgICAgXSwgbWVudWl0ZW0gPT4ge1xuICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTWVudUl0ZW0obWVudWl0ZW0ubmFtZSwge1xuICAgICAgICAgIHRleHQ6IG1lbnVpdGVtLnRleHQsXG4gICAgICAgICAgaWNvbjogbWVudWl0ZW0uaWNvbixcbiAgICAgICAgICBzaG9ydGN1dDogbWVudWl0ZW0uc2hvcnRjdXQsXG4gICAgICAgICAgb25TZXR1cDogb25TZXR1cEVkaXRhYmxlVG9nZ2xlKGVkaXRvciksXG4gICAgICAgICAgb25BY3Rpb246IG9uQWN0aW9uRXhlY0NvbW1hbmQoZWRpdG9yLCBtZW51aXRlbS5hY3Rpb24pXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTWVudUl0ZW0oJ2NvZGVmb3JtYXQnLCB7XG4gICAgICAgIHRleHQ6ICdDb2RlJyxcbiAgICAgICAgaWNvbjogJ3NvdXJjZWNvZGUnLFxuICAgICAgICBvblNldHVwOiBvblNldHVwRWRpdGFibGVUb2dnbGUoZWRpdG9yKSxcbiAgICAgICAgb25BY3Rpb246IG9uQWN0aW9uVG9nZ2xlRm9ybWF0KGVkaXRvciwgJ2NvZGUnKVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlciQzID0gZWRpdG9yID0+IHtcbiAgICAgIHJlZ2lzdGVyQnV0dG9ucyQxKGVkaXRvcik7XG4gICAgICByZWdpc3Rlck1lbnVJdGVtcyQyKGVkaXRvcik7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU2V0dXBVbmRvUmVkb1N0YXRlID0gKGVkaXRvciwgdHlwZSkgPT4gb25TZXR1cEV2ZW50KGVkaXRvciwgJ1VuZG8gUmVkbyBBZGRVbmRvIFR5cGluZ1VuZG8gQ2xlYXJVbmRvcyBTd2l0Y2hNb2RlJywgYXBpID0+IHtcbiAgICAgIGFwaS5zZXRFbmFibGVkKCFlZGl0b3IubW9kZS5pc1JlYWRPbmx5KCkgJiYgZWRpdG9yLnVuZG9NYW5hZ2VyW3R5cGVdKCkpO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlZ2lzdGVyTWVudUl0ZW1zJDEgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE1lbnVJdGVtKCd1bmRvJywge1xuICAgICAgICB0ZXh0OiAnVW5kbycsXG4gICAgICAgIGljb246ICd1bmRvJyxcbiAgICAgICAgc2hvcnRjdXQ6ICdNZXRhK1onLFxuICAgICAgICBvblNldHVwOiBvblNldHVwVW5kb1JlZG9TdGF0ZShlZGl0b3IsICdoYXNVbmRvJyksXG4gICAgICAgIG9uQWN0aW9uOiBvbkFjdGlvbkV4ZWNDb21tYW5kKGVkaXRvciwgJ3VuZG8nKVxuICAgICAgfSk7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTWVudUl0ZW0oJ3JlZG8nLCB7XG4gICAgICAgIHRleHQ6ICdSZWRvJyxcbiAgICAgICAgaWNvbjogJ3JlZG8nLFxuICAgICAgICBzaG9ydGN1dDogJ01ldGErWScsXG4gICAgICAgIG9uU2V0dXA6IG9uU2V0dXBVbmRvUmVkb1N0YXRlKGVkaXRvciwgJ2hhc1JlZG8nKSxcbiAgICAgICAgb25BY3Rpb246IG9uQWN0aW9uRXhlY0NvbW1hbmQoZWRpdG9yLCAncmVkbycpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyQnV0dG9ucyA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQnV0dG9uKCd1bmRvJywge1xuICAgICAgICB0b29sdGlwOiAnVW5kbycsXG4gICAgICAgIGljb246ICd1bmRvJyxcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIG9uU2V0dXA6IG9uU2V0dXBVbmRvUmVkb1N0YXRlKGVkaXRvciwgJ2hhc1VuZG8nKSxcbiAgICAgICAgb25BY3Rpb246IG9uQWN0aW9uRXhlY0NvbW1hbmQoZWRpdG9yLCAndW5kbycpXG4gICAgICB9KTtcbiAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRCdXR0b24oJ3JlZG8nLCB7XG4gICAgICAgIHRvb2x0aXA6ICdSZWRvJyxcbiAgICAgICAgaWNvbjogJ3JlZG8nLFxuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgb25TZXR1cDogb25TZXR1cFVuZG9SZWRvU3RhdGUoZWRpdG9yLCAnaGFzUmVkbycpLFxuICAgICAgICBvbkFjdGlvbjogb25BY3Rpb25FeGVjQ29tbWFuZChlZGl0b3IsICdyZWRvJylcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXIkMiA9IGVkaXRvciA9PiB7XG4gICAgICByZWdpc3Rlck1lbnVJdGVtcyQxKGVkaXRvcik7XG4gICAgICByZWdpc3RlckJ1dHRvbnMoZWRpdG9yKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25TZXR1cFZpc3VhbEFpZFN0YXRlID0gZWRpdG9yID0+IG9uU2V0dXBFdmVudChlZGl0b3IsICdWaXN1YWxBaWQnLCBhcGkgPT4ge1xuICAgICAgYXBpLnNldEFjdGl2ZShlZGl0b3IuaGFzVmlzdWFsKTtcbiAgICB9KTtcbiAgICBjb25zdCByZWdpc3Rlck1lbnVJdGVtcyA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkVG9nZ2xlTWVudUl0ZW0oJ3Zpc3VhbGFpZCcsIHtcbiAgICAgICAgdGV4dDogJ1Zpc3VhbCBhaWRzJyxcbiAgICAgICAgb25TZXR1cDogb25TZXR1cFZpc3VhbEFpZFN0YXRlKGVkaXRvciksXG4gICAgICAgIG9uQWN0aW9uOiBvbkFjdGlvbkV4ZWNDb21tYW5kKGVkaXRvciwgJ21jZVRvZ2dsZVZpc3VhbEFpZCcpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyVG9vbGJhckJ1dHRvbiA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQnV0dG9uKCd2aXN1YWxhaWQnLCB7XG4gICAgICAgIHRvb2x0aXA6ICdWaXN1YWwgYWlkcycsXG4gICAgICAgIHRleHQ6ICdWaXN1YWwgYWlkcycsXG4gICAgICAgIG9uQWN0aW9uOiBvbkFjdGlvbkV4ZWNDb21tYW5kKGVkaXRvciwgJ21jZVRvZ2dsZVZpc3VhbEFpZCcpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyJDEgPSBlZGl0b3IgPT4ge1xuICAgICAgcmVnaXN0ZXJUb29sYmFyQnV0dG9uKGVkaXRvcik7XG4gICAgICByZWdpc3Rlck1lbnVJdGVtcyhlZGl0b3IpO1xuICAgIH07XG5cbiAgICBjb25zdCBzZXR1cCQ2ID0gKGVkaXRvciwgYmFja3N0YWdlKSA9PiB7XG4gICAgICByZWdpc3RlciQ4KGVkaXRvcik7XG4gICAgICByZWdpc3RlciQzKGVkaXRvcik7XG4gICAgICByZWdpc3RlciQ2KGVkaXRvciwgYmFja3N0YWdlKTtcbiAgICAgIHJlZ2lzdGVyJDIoZWRpdG9yKTtcbiAgICAgIHJlZ2lzdGVyJGMoZWRpdG9yKTtcbiAgICAgIHJlZ2lzdGVyJDEoZWRpdG9yKTtcbiAgICAgIHJlZ2lzdGVyJDUoZWRpdG9yKTtcbiAgICAgIHJlZ2lzdGVyJDcoZWRpdG9yKTtcbiAgICAgIHJlZ2lzdGVyJDQoZWRpdG9yKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcGF0Y2hQaXBlQ29uZmlnID0gY29uZmlnID0+IGlzU3RyaW5nKGNvbmZpZykgPyBjb25maWcuc3BsaXQoL1sgLF0vKSA6IGNvbmZpZztcbiAgICBjb25zdCBvcHRpb24gPSBuYW1lID0+IGVkaXRvciA9PiBlZGl0b3Iub3B0aW9ucy5nZXQobmFtZSk7XG4gICAgY29uc3QgcmVnaXN0ZXIgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgcmVnaXN0ZXJPcHRpb24gPSBlZGl0b3Iub3B0aW9ucy5yZWdpc3RlcjtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdjb250ZXh0bWVudV9hdm9pZF9vdmVybGFwJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignY29udGV4dG1lbnVfbmV2ZXJfdXNlX25hdGl2ZScsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdjb250ZXh0bWVudScsIHtcbiAgICAgICAgcHJvY2Vzc29yOiB2YWx1ZSA9PiB7XG4gICAgICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsdWU6IFtdLFxuICAgICAgICAgICAgICB2YWxpZDogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKHZhbHVlKSB8fCBpc0FycmF5T2YodmFsdWUsIGlzU3RyaW5nKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsdWU6IHBhdGNoUGlwZUNvbmZpZyh2YWx1ZSksXG4gICAgICAgICAgICAgIHZhbGlkOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdNdXN0IGJlIGZhbHNlIG9yIGEgc3RyaW5nLidcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiAnbGluayBsaW5rY2hlY2tlciBpbWFnZSBlZGl0aW1hZ2UgdGFibGUgc3BlbGxjaGVja2VyIGNvbmZpZ3VyZXBlcm1hbmVudHBlbidcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2hvdWxkTmV2ZXJVc2VOYXRpdmUgPSBvcHRpb24oJ2NvbnRleHRtZW51X25ldmVyX3VzZV9uYXRpdmUnKTtcbiAgICBjb25zdCBnZXRBdm9pZE92ZXJsYXBTZWxlY3RvciA9IG9wdGlvbignY29udGV4dG1lbnVfYXZvaWRfb3ZlcmxhcCcpO1xuICAgIGNvbnN0IGlzQ29udGV4dE1lbnVEaXNhYmxlZCA9IGVkaXRvciA9PiBnZXRDb250ZXh0TWVudShlZGl0b3IpLmxlbmd0aCA9PT0gMDtcbiAgICBjb25zdCBnZXRDb250ZXh0TWVudSA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0TWVudXMgPSBlZGl0b3IudWkucmVnaXN0cnkuZ2V0QWxsKCkuY29udGV4dE1lbnVzO1xuICAgICAgY29uc3QgY29udGV4dE1lbnUgPSBlZGl0b3Iub3B0aW9ucy5nZXQoJ2NvbnRleHRtZW51Jyk7XG4gICAgICBpZiAoZWRpdG9yLm9wdGlvbnMuaXNTZXQoJ2NvbnRleHRtZW51JykpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlciQyKGNvbnRleHRNZW51LCBpdGVtID0+IGhhcyQyKGNvbnRleHRNZW51cywgaXRlbSkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBudSA9ICh4LCB5KSA9PiAoe1xuICAgICAgdHlwZTogJ21ha2VzaGlmdCcsXG4gICAgICB4LFxuICAgICAgeVxuICAgIH0pO1xuICAgIGNvbnN0IHRyYW5zcG9zZSA9IChwb3MsIGR4LCBkeSkgPT4ge1xuICAgICAgcmV0dXJuIG51KHBvcy54ICsgZHgsIHBvcy55ICsgZHkpO1xuICAgIH07XG4gICAgY29uc3QgaXNUb3VjaEV2ZW50JDEgPSBlID0+IGUudHlwZSA9PT0gJ2xvbmdwcmVzcycgfHwgZS50eXBlLmluZGV4T2YoJ3RvdWNoJykgPT09IDA7XG4gICAgY29uc3QgZnJvbVBhZ2VYWSA9IGUgPT4ge1xuICAgICAgaWYgKGlzVG91Y2hFdmVudCQxKGUpKSB7XG4gICAgICAgIGNvbnN0IHRvdWNoID0gZS50b3VjaGVzWzBdO1xuICAgICAgICByZXR1cm4gbnUodG91Y2gucGFnZVgsIHRvdWNoLnBhZ2VZKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudShlLnBhZ2VYLCBlLnBhZ2VZKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZyb21DbGllbnRYWSA9IGUgPT4ge1xuICAgICAgaWYgKGlzVG91Y2hFdmVudCQxKGUpKSB7XG4gICAgICAgIGNvbnN0IHRvdWNoID0gZS50b3VjaGVzWzBdO1xuICAgICAgICByZXR1cm4gbnUodG91Y2guY2xpZW50WCwgdG91Y2guY2xpZW50WSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnUoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdHJhbnNwb3NlQ29udGVudEFyZWFDb250YWluZXIgPSAoZWxlbWVudCwgcG9zKSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXJQb3MgPSBnbG9iYWwkNy5ET00uZ2V0UG9zKGVsZW1lbnQpO1xuICAgICAgcmV0dXJuIHRyYW5zcG9zZShwb3MsIGNvbnRhaW5lclBvcy54LCBjb250YWluZXJQb3MueSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRQb2ludEFuY2hvciA9IChlZGl0b3IsIGUpID0+IHtcbiAgICAgIGlmIChlLnR5cGUgPT09ICdjb250ZXh0bWVudScgfHwgZS50eXBlID09PSAnbG9uZ3ByZXNzJykge1xuICAgICAgICBpZiAoZWRpdG9yLmlubGluZSkge1xuICAgICAgICAgIHJldHVybiBmcm9tUGFnZVhZKGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0cmFuc3Bvc2VDb250ZW50QXJlYUNvbnRhaW5lcihlZGl0b3IuZ2V0Q29udGVudEFyZWFDb250YWluZXIoKSwgZnJvbUNsaWVudFhZKGUpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGdldFNlbGVjdGlvbkFuY2hvcihlZGl0b3IpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ2V0U2VsZWN0aW9uQW5jaG9yID0gZWRpdG9yID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdzZWxlY3Rpb24nLFxuICAgICAgICByb290OiBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKSlcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBnZXROb2RlQW5jaG9yID0gZWRpdG9yID0+ICh7XG4gICAgICB0eXBlOiAnbm9kZScsXG4gICAgICBub2RlOiBPcHRpb25hbC5zb21lKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5zZWxlY3Rpb24uZ2V0Tm9kZSgpKSksXG4gICAgICByb290OiBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKVxuICAgIH0pO1xuICAgIGNvbnN0IGdldEFuY2hvclNwZWMkMSA9IChlZGl0b3IsIGUsIGFuY2hvclR5cGUpID0+IHtcbiAgICAgIHN3aXRjaCAoYW5jaG9yVHlwZSkge1xuICAgICAgY2FzZSAnbm9kZSc6XG4gICAgICAgIHJldHVybiBnZXROb2RlQW5jaG9yKGVkaXRvcik7XG4gICAgICBjYXNlICdwb2ludCc6XG4gICAgICAgIHJldHVybiBnZXRQb2ludEFuY2hvcihlZGl0b3IsIGUpO1xuICAgICAgY2FzZSAnc2VsZWN0aW9uJzpcbiAgICAgICAgcmV0dXJuIGdldFNlbGVjdGlvbkFuY2hvcihlZGl0b3IpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBpbml0QW5kU2hvdyQxID0gKGVkaXRvciwgZSwgYnVpbGRNZW51LCBiYWNrc3RhZ2UsIGNvbnRleHRtZW51LCBhbmNob3JUeXBlKSA9PiB7XG4gICAgICBjb25zdCBpdGVtcyA9IGJ1aWxkTWVudSgpO1xuICAgICAgY29uc3QgYW5jaG9yU3BlYyA9IGdldEFuY2hvclNwZWMkMShlZGl0b3IsIGUsIGFuY2hvclR5cGUpO1xuICAgICAgYnVpbGQoaXRlbXMsIEl0ZW1SZXNwb25zZSQxLkNMT1NFX09OX0VYRUNVVEUsIGJhY2tzdGFnZSwge1xuICAgICAgICBpc0hvcml6b250YWxNZW51OiBmYWxzZSxcbiAgICAgICAgc2VhcmNoOiBPcHRpb25hbC5ub25lKClcbiAgICAgIH0pLm1hcChtZW51RGF0YSA9PiB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgSW5saW5lVmlldy5zaG93TWVudUF0KGNvbnRleHRtZW51LCB7IGFuY2hvcjogYW5jaG9yU3BlYyB9LCB7XG4gICAgICAgICAgbWVudTogeyBtYXJrZXJzOiBtYXJrZXJzKCdub3JtYWwnKSB9LFxuICAgICAgICAgIGRhdGE6IG1lbnVEYXRhXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxheW91dHMgPSB7XG4gICAgICBvbkx0cjogKCkgPT4gW1xuICAgICAgICBzb3V0aCQyLFxuICAgICAgICBzb3V0aGVhc3QkMixcbiAgICAgICAgc291dGh3ZXN0JDIsXG4gICAgICAgIG5vcnRoZWFzdCQyLFxuICAgICAgICBub3J0aHdlc3QkMixcbiAgICAgICAgbm9ydGgkMixcbiAgICAgICAgbm9ydGgsXG4gICAgICAgIHNvdXRoLFxuICAgICAgICBub3J0aGVhc3QsXG4gICAgICAgIHNvdXRoZWFzdCxcbiAgICAgICAgbm9ydGh3ZXN0LFxuICAgICAgICBzb3V0aHdlc3RcbiAgICAgIF0sXG4gICAgICBvblJ0bDogKCkgPT4gW1xuICAgICAgICBzb3V0aCQyLFxuICAgICAgICBzb3V0aHdlc3QkMixcbiAgICAgICAgc291dGhlYXN0JDIsXG4gICAgICAgIG5vcnRod2VzdCQyLFxuICAgICAgICBub3J0aGVhc3QkMixcbiAgICAgICAgbm9ydGgkMixcbiAgICAgICAgbm9ydGgsXG4gICAgICAgIHNvdXRoLFxuICAgICAgICBub3J0aHdlc3QsXG4gICAgICAgIHNvdXRod2VzdCxcbiAgICAgICAgbm9ydGhlYXN0LFxuICAgICAgICBzb3V0aGVhc3RcbiAgICAgIF1cbiAgICB9O1xuICAgIGNvbnN0IGJ1YmJsZVNpemUgPSAxMjtcbiAgICBjb25zdCBidWJibGVBbGlnbm1lbnRzID0ge1xuICAgICAgdmFsaWduQ2VudHJlOiBbXSxcbiAgICAgIGFsaWduQ2VudHJlOiBbXSxcbiAgICAgIGFsaWduTGVmdDogWyd0b3gtcG9wLS1hbGlnbi1sZWZ0J10sXG4gICAgICBhbGlnblJpZ2h0OiBbJ3RveC1wb3AtLWFsaWduLXJpZ2h0J10sXG4gICAgICByaWdodDogWyd0b3gtcG9wLS1yaWdodCddLFxuICAgICAgbGVmdDogWyd0b3gtcG9wLS1sZWZ0J10sXG4gICAgICBib3R0b206IFsndG94LXBvcC0tYm90dG9tJ10sXG4gICAgICB0b3A6IFsndG94LXBvcC0tdG9wJ11cbiAgICB9O1xuICAgIGNvbnN0IGlzVG91Y2hXaXRoaW5TZWxlY3Rpb24gPSAoZWRpdG9yLCBlKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uO1xuICAgICAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpIHx8IGUudG91Y2hlcy5sZW5ndGggPCAxKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRvdWNoID0gZS50b3VjaGVzWzBdO1xuICAgICAgICBjb25zdCBybmcgPSBzZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICAgIGNvbnN0IHJuZ1JlY3RPcHQgPSBnZXRGaXJzdFJlY3QoZWRpdG9yLmdldFdpbigpLCBTaW1TZWxlY3Rpb24uZG9tUmFuZ2Uocm5nKSk7XG4gICAgICAgIHJldHVybiBybmdSZWN0T3B0LmV4aXN0cyhybmdSZWN0ID0+IHJuZ1JlY3QubGVmdCA8PSB0b3VjaC5jbGllbnRYICYmIHJuZ1JlY3QucmlnaHQgPj0gdG91Y2guY2xpZW50WCAmJiBybmdSZWN0LnRvcCA8PSB0b3VjaC5jbGllbnRZICYmIHJuZ1JlY3QuYm90dG9tID49IHRvdWNoLmNsaWVudFkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2V0dXBpT1NPdmVycmlkZXMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgb3JpZ2luYWxTZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgY29uc3Qgc2VsZWN0aW9uUmVzZXQgPSAoKSA9PiB7XG4gICAgICAgIGdsb2JhbCQ5LnNldEVkaXRvclRpbWVvdXQoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcob3JpZ2luYWxTZWxlY3Rpb24pO1xuICAgICAgICB9LCAxMCk7XG4gICAgICAgIHVuYmluZEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLm9uY2UoJ3RvdWNoZW5kJywgc2VsZWN0aW9uUmVzZXQpO1xuICAgICAgY29uc3QgcHJldmVudE1vdXNlZG93biA9IGUgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLm9uKCdtb3VzZWRvd24nLCBwcmV2ZW50TW91c2Vkb3duLCB0cnVlKTtcbiAgICAgIGNvbnN0IGNsZWFyU2VsZWN0aW9uUmVzZXQgPSAoKSA9PiB1bmJpbmRFdmVudExpc3RlbmVycygpO1xuICAgICAgZWRpdG9yLm9uY2UoJ2xvbmdwcmVzc2NhbmNlbCcsIGNsZWFyU2VsZWN0aW9uUmVzZXQpO1xuICAgICAgY29uc3QgdW5iaW5kRXZlbnRMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5vZmYoJ3RvdWNoZW5kJywgc2VsZWN0aW9uUmVzZXQpO1xuICAgICAgICBlZGl0b3Iub2ZmKCdsb25ncHJlc3NjYW5jZWwnLCBjbGVhclNlbGVjdGlvblJlc2V0KTtcbiAgICAgICAgZWRpdG9yLm9mZignbW91c2Vkb3duJywgcHJldmVudE1vdXNlZG93bik7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZ2V0QW5jaG9yU3BlYyA9IChlZGl0b3IsIGUsIGFuY2hvclR5cGUpID0+IHtcbiAgICAgIGNvbnN0IGFuY2hvclNwZWMgPSBnZXRBbmNob3JTcGVjJDEoZWRpdG9yLCBlLCBhbmNob3JUeXBlKTtcbiAgICAgIGNvbnN0IGJ1YmJsZVlPZmZzZXQgPSBhbmNob3JUeXBlID09PSAncG9pbnQnID8gYnViYmxlU2l6ZSA6IDA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBidWJibGU6IG51JDUoMCwgYnViYmxlWU9mZnNldCwgYnViYmxlQWxpZ25tZW50cyksXG4gICAgICAgIGxheW91dHMsXG4gICAgICAgIG92ZXJyaWRlczoge1xuICAgICAgICAgIG1heFdpZHRoRnVuY3Rpb246IGV4cGFuZGFibGUoKSxcbiAgICAgICAgICBtYXhIZWlnaHRGdW5jdGlvbjogZXhwYW5kYWJsZSQxKClcbiAgICAgICAgfSxcbiAgICAgICAgLi4uYW5jaG9yU3BlY1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHNob3cgPSAoZWRpdG9yLCBlLCBpdGVtcywgYmFja3N0YWdlLCBjb250ZXh0bWVudSwgYW5jaG9yVHlwZSwgaGlnaGxpZ2h0SW1tZWRpYXRlbHkpID0+IHtcbiAgICAgIGNvbnN0IGFuY2hvclNwZWMgPSBnZXRBbmNob3JTcGVjKGVkaXRvciwgZSwgYW5jaG9yVHlwZSk7XG4gICAgICBidWlsZChpdGVtcywgSXRlbVJlc3BvbnNlJDEuQ0xPU0VfT05fRVhFQ1VURSwgYmFja3N0YWdlLCB7XG4gICAgICAgIGlzSG9yaXpvbnRhbE1lbnU6IHRydWUsXG4gICAgICAgIHNlYXJjaDogT3B0aW9uYWwubm9uZSgpXG4gICAgICB9KS5tYXAobWVudURhdGEgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodE9uT3BlbiA9IGhpZ2hsaWdodEltbWVkaWF0ZWx5ID8gSGlnaGxpZ2h0T25PcGVuLkhpZ2hsaWdodE1lbnVBbmRJdGVtIDogSGlnaGxpZ2h0T25PcGVuLkhpZ2hsaWdodE5vbmU7XG4gICAgICAgIElubGluZVZpZXcuc2hvd01lbnVXaXRoaW5Cb3VuZHMoY29udGV4dG1lbnUsIHsgYW5jaG9yOiBhbmNob3JTcGVjIH0sIHtcbiAgICAgICAgICBtZW51OiB7XG4gICAgICAgICAgICBtYXJrZXJzOiBtYXJrZXJzKCdub3JtYWwnKSxcbiAgICAgICAgICAgIGhpZ2hsaWdodE9uT3BlblxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGF0YTogbWVudURhdGEsXG4gICAgICAgICAgdHlwZTogJ2hvcml6b250YWwnXG4gICAgICAgIH0sICgpID0+IE9wdGlvbmFsLnNvbWUoZ2V0Q29udGV4dFRvb2xiYXJCb3VuZHMoZWRpdG9yLCBiYWNrc3RhZ2Uuc2hhcmVkLCBhbmNob3JUeXBlID09PSAnbm9kZScgPyAnbm9kZScgOiAnc2VsZWN0aW9uJykpKTtcbiAgICAgICAgZWRpdG9yLmRpc3BhdGNoKGhpZGVDb250ZXh0VG9vbGJhckV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW5pdEFuZFNob3cgPSAoZWRpdG9yLCBlLCBidWlsZE1lbnUsIGJhY2tzdGFnZSwgY29udGV4dG1lbnUsIGFuY2hvclR5cGUpID0+IHtcbiAgICAgIGNvbnN0IGRldGVjdGlvbiA9IGRldGVjdCQyKCk7XG4gICAgICBjb25zdCBpc2lPUyA9IGRldGVjdGlvbi5vcy5pc2lPUygpO1xuICAgICAgY29uc3QgaXNNYWNPUyA9IGRldGVjdGlvbi5vcy5pc01hY09TKCk7XG4gICAgICBjb25zdCBpc0FuZHJvaWQgPSBkZXRlY3Rpb24ub3MuaXNBbmRyb2lkKCk7XG4gICAgICBjb25zdCBpc1RvdWNoID0gZGV0ZWN0aW9uLmRldmljZVR5cGUuaXNUb3VjaCgpO1xuICAgICAgY29uc3Qgc2hvdWxkSGlnaGxpZ2h0SW1tZWRpYXRlbHkgPSAoKSA9PiAhKGlzQW5kcm9pZCB8fCBpc2lPUyB8fCBpc01hY09TICYmIGlzVG91Y2gpO1xuICAgICAgY29uc3Qgb3BlbiA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBidWlsZE1lbnUoKTtcbiAgICAgICAgc2hvdyhlZGl0b3IsIGUsIGl0ZW1zLCBiYWNrc3RhZ2UsIGNvbnRleHRtZW51LCBhbmNob3JUeXBlLCBzaG91bGRIaWdobGlnaHRJbW1lZGlhdGVseSgpKTtcbiAgICAgIH07XG4gICAgICBpZiAoKGlzTWFjT1MgfHwgaXNpT1MpICYmIGFuY2hvclR5cGUgIT09ICdub2RlJykge1xuICAgICAgICBjb25zdCBvcGVuaU9TID0gKCkgPT4ge1xuICAgICAgICAgIHNldHVwaU9TT3ZlcnJpZGVzKGVkaXRvcik7XG4gICAgICAgICAgb3BlbigpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoaXNUb3VjaFdpdGhpblNlbGVjdGlvbihlZGl0b3IsIGUpKSB7XG4gICAgICAgICAgb3BlbmlPUygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVkaXRvci5vbmNlKCdzZWxlY3Rpb25jaGFuZ2UnLCBvcGVuaU9TKTtcbiAgICAgICAgICBlZGl0b3Iub25jZSgndG91Y2hlbmQnLCAoKSA9PiBlZGl0b3Iub2ZmKCdzZWxlY3Rpb25jaGFuZ2UnLCBvcGVuaU9TKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wZW4oKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaXNTZXBhcmF0b3IgPSBpdGVtID0+IGlzU3RyaW5nKGl0ZW0pID8gaXRlbSA9PT0gJ3wnIDogaXRlbS50eXBlID09PSAnc2VwYXJhdG9yJztcbiAgICBjb25zdCBzZXBhcmF0b3IgPSB7IHR5cGU6ICdzZXBhcmF0b3InIH07XG4gICAgY29uc3QgbWFrZUNvbnRleHRJdGVtID0gaXRlbSA9PiB7XG4gICAgICBjb25zdCBjb21tb25NZW51SXRlbSA9IGl0ZW0gPT4gKHtcbiAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICBpY29uOiBpdGVtLmljb24sXG4gICAgICAgIGVuYWJsZWQ6IGl0ZW0uZW5hYmxlZCxcbiAgICAgICAgc2hvcnRjdXQ6IGl0ZW0uc2hvcnRjdXRcbiAgICAgIH0pO1xuICAgICAgaWYgKGlzU3RyaW5nKGl0ZW0pKSB7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpdGNoIChpdGVtLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnc2VwYXJhdG9yJzpcbiAgICAgICAgICByZXR1cm4gc2VwYXJhdG9yO1xuICAgICAgICBjYXNlICdzdWJtZW51JzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ25lc3RlZG1lbnVpdGVtJyxcbiAgICAgICAgICAgIC4uLmNvbW1vbk1lbnVJdGVtKGl0ZW0pLFxuICAgICAgICAgICAgZ2V0U3VibWVudUl0ZW1zOiAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gaXRlbS5nZXRTdWJtZW51SXRlbXMoKTtcbiAgICAgICAgICAgICAgaWYgKGlzU3RyaW5nKGl0ZW1zKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFwJDIoaXRlbXMsIG1ha2VDb250ZXh0SXRlbSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnN0IGNvbW1vbkl0ZW0gPSBpdGVtO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnbWVudWl0ZW0nLFxuICAgICAgICAgICAgLi4uY29tbW9uTWVudUl0ZW0oY29tbW9uSXRlbSksXG4gICAgICAgICAgICBvbkFjdGlvbjogbm9hcmcoY29tbW9uSXRlbS5vbkFjdGlvbilcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhZGRDb250ZXh0TWVudUdyb3VwID0gKHhzLCBncm91cEl0ZW1zKSA9PiB7XG4gICAgICBpZiAoZ3JvdXBJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHhzO1xuICAgICAgfVxuICAgICAgY29uc3QgbGFzdE1lbnVJdGVtID0gbGFzdCQxKHhzKS5maWx0ZXIoaXRlbSA9PiAhaXNTZXBhcmF0b3IoaXRlbSkpO1xuICAgICAgY29uc3QgYmVmb3JlID0gbGFzdE1lbnVJdGVtLmZvbGQoKCkgPT4gW10sIF8gPT4gW3NlcGFyYXRvcl0pO1xuICAgICAgcmV0dXJuIHhzLmNvbmNhdChiZWZvcmUpLmNvbmNhdChncm91cEl0ZW1zKS5jb25jYXQoW3NlcGFyYXRvcl0pO1xuICAgIH07XG4gICAgY29uc3QgZ2VuZXJhdGVDb250ZXh0TWVudSA9IChjb250ZXh0TWVudXMsIG1lbnVDb25maWcsIHNlbGVjdGVkRWxlbWVudCkgPT4ge1xuICAgICAgY29uc3Qgc2VjdGlvbnMgPSBmb2xkbChtZW51Q29uZmlnLCAoYWNjLCBuYW1lKSA9PiB7XG4gICAgICAgIHJldHVybiBnZXQkZyhjb250ZXh0TWVudXMsIG5hbWUudG9Mb3dlckNhc2UoKSkubWFwKG1lbnUgPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW1zID0gbWVudS51cGRhdGUoc2VsZWN0ZWRFbGVtZW50KTtcbiAgICAgICAgICBpZiAoaXNTdHJpbmcoaXRlbXMpICYmIGlzTm90RW1wdHkodHJpbSQxKGl0ZW1zKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBhZGRDb250ZXh0TWVudUdyb3VwKGFjYywgaXRlbXMuc3BsaXQoJyAnKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGl0ZW1zKSAmJiBpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxJdGVtcyA9IG1hcCQyKGl0ZW1zLCBtYWtlQ29udGV4dEl0ZW0pO1xuICAgICAgICAgICAgcmV0dXJuIGFkZENvbnRleHRNZW51R3JvdXAoYWNjLCBhbGxJdGVtcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgfVxuICAgICAgICB9KS5nZXRPclRodW5rKCgpID0+IGFjYy5jb25jYXQoW25hbWVdKSk7XG4gICAgICB9LCBbXSk7XG4gICAgICBpZiAoc2VjdGlvbnMubGVuZ3RoID4gMCAmJiBpc1NlcGFyYXRvcihzZWN0aW9uc1tzZWN0aW9ucy5sZW5ndGggLSAxXSkpIHtcbiAgICAgICAgc2VjdGlvbnMucG9wKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VjdGlvbnM7XG4gICAgfTtcbiAgICBjb25zdCBpc05hdGl2ZU92ZXJyaWRlS2V5RXZlbnQgPSAoZWRpdG9yLCBlKSA9PiBlLmN0cmxLZXkgJiYgIXNob3VsZE5ldmVyVXNlTmF0aXZlKGVkaXRvcik7XG4gICAgY29uc3QgaXNUb3VjaEV2ZW50ID0gZSA9PiBlLnR5cGUgPT09ICdsb25ncHJlc3MnIHx8IGhhcyQyKGUsICd0b3VjaGVzJyk7XG4gICAgY29uc3QgaXNUcmlnZ2VyZWRCeUtleWJvYXJkID0gKGVkaXRvciwgZSkgPT4gIWlzVG91Y2hFdmVudChlKSAmJiAoZS5idXR0b24gIT09IDIgfHwgZS50YXJnZXQgPT09IGVkaXRvci5nZXRCb2R5KCkgJiYgZS5wb2ludGVyVHlwZSA9PT0gJycpO1xuICAgIGNvbnN0IGdldFNlbGVjdGVkRWxlbWVudCA9IChlZGl0b3IsIGUpID0+IGlzVHJpZ2dlcmVkQnlLZXlib2FyZChlZGl0b3IsIGUpID8gZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCh0cnVlKSA6IGUudGFyZ2V0O1xuICAgIGNvbnN0IGdldEFuY2hvclR5cGUgPSAoZWRpdG9yLCBlKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IGdldEF2b2lkT3ZlcmxhcFNlbGVjdG9yKGVkaXRvcik7XG4gICAgICBjb25zdCBhbmNob3JUeXBlID0gaXNUcmlnZ2VyZWRCeUtleWJvYXJkKGVkaXRvciwgZSkgPyAnc2VsZWN0aW9uJyA6ICdwb2ludCc7XG4gICAgICBpZiAoaXNOb3RFbXB0eShzZWxlY3RvcikpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZ2V0U2VsZWN0ZWRFbGVtZW50KGVkaXRvciwgZSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yRXhpc3RzID0gY2xvc2VzdChTdWdhckVsZW1lbnQuZnJvbURvbSh0YXJnZXQpLCBzZWxlY3Rvcik7XG4gICAgICAgIHJldHVybiBzZWxlY3RvckV4aXN0cyA/ICdub2RlJyA6IGFuY2hvclR5cGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYW5jaG9yVHlwZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldHVwJDUgPSAoZWRpdG9yLCBsYXp5U2luaywgYmFja3N0YWdlKSA9PiB7XG4gICAgICBjb25zdCBkZXRlY3Rpb24gPSBkZXRlY3QkMigpO1xuICAgICAgY29uc3QgaXNUb3VjaCA9IGRldGVjdGlvbi5kZXZpY2VUeXBlLmlzVG91Y2g7XG4gICAgICBjb25zdCBjb250ZXh0bWVudSA9IGJ1aWxkJDEoSW5saW5lVmlldy5za2V0Y2goe1xuICAgICAgICBkb206IHsgdGFnOiAnZGl2JyB9LFxuICAgICAgICBsYXp5U2luayxcbiAgICAgICAgb25Fc2NhcGU6ICgpID0+IGVkaXRvci5mb2N1cygpLFxuICAgICAgICBvblNob3c6ICgpID0+IGJhY2tzdGFnZS5zZXRDb250ZXh0TWVudVN0YXRlKHRydWUpLFxuICAgICAgICBvbkhpZGU6ICgpID0+IGJhY2tzdGFnZS5zZXRDb250ZXh0TWVudVN0YXRlKGZhbHNlKSxcbiAgICAgICAgZmlyZURpc21pc3NhbEV2ZW50SW5zdGVhZDoge30sXG4gICAgICAgIGlubGluZUJlaGF2aW91cnM6IGRlcml2ZSQxKFtjb25maWcoJ2Rpc21pc3NDb250ZXh0TWVudScsIFtydW4kMShkaXNtaXNzUmVxdWVzdGVkKCksIChjb21wLCBfc2UpID0+IHtcbiAgICAgICAgICAgICAgU2FuZGJveGluZy5jbG9zZShjb21wKTtcbiAgICAgICAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgICAgICB9KV0pXSlcbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IGhpZGVDb250ZXh0TWVudSA9ICgpID0+IElubGluZVZpZXcuaGlkZShjb250ZXh0bWVudSk7XG4gICAgICBjb25zdCBzaG93Q29udGV4dE1lbnUgPSBlID0+IHtcbiAgICAgICAgaWYgKHNob3VsZE5ldmVyVXNlTmF0aXZlKGVkaXRvcikpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmF0aXZlT3ZlcnJpZGVLZXlFdmVudChlZGl0b3IsIGUpIHx8IGlzQ29udGV4dE1lbnVEaXNhYmxlZChlZGl0b3IpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFuY2hvclR5cGUgPSBnZXRBbmNob3JUeXBlKGVkaXRvciwgZSk7XG4gICAgICAgIGNvbnN0IGJ1aWxkTWVudSA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnQgPSBnZXRTZWxlY3RlZEVsZW1lbnQoZWRpdG9yLCBlKTtcbiAgICAgICAgICBjb25zdCByZWdpc3RyeSA9IGVkaXRvci51aS5yZWdpc3RyeS5nZXRBbGwoKTtcbiAgICAgICAgICBjb25zdCBtZW51Q29uZmlnID0gZ2V0Q29udGV4dE1lbnUoZWRpdG9yKTtcbiAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVDb250ZXh0TWVudShyZWdpc3RyeS5jb250ZXh0TWVudXMsIG1lbnVDb25maWcsIHNlbGVjdGVkRWxlbWVudCk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGluaXRBbmRTaG93JDIgPSBpc1RvdWNoKCkgPyBpbml0QW5kU2hvdyA6IGluaXRBbmRTaG93JDE7XG4gICAgICAgIGluaXRBbmRTaG93JDIoZWRpdG9yLCBlLCBidWlsZE1lbnUsIGJhY2tzdGFnZSwgY29udGV4dG1lbnUsIGFuY2hvclR5cGUpO1xuICAgICAgfTtcbiAgICAgIGVkaXRvci5vbignaW5pdCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGlkZUV2ZW50cyA9ICdSZXNpemVFZGl0b3IgU2Nyb2xsQ29udGVudCBTY3JvbGxXaW5kb3cgbG9uZ3ByZXNzY2FuY2VsJyArIChpc1RvdWNoKCkgPyAnJyA6ICcgUmVzaXplV2luZG93Jyk7XG4gICAgICAgIGVkaXRvci5vbihoaWRlRXZlbnRzLCBoaWRlQ29udGV4dE1lbnUpO1xuICAgICAgICBlZGl0b3Iub24oJ2xvbmdwcmVzcyBjb250ZXh0bWVudScsIHNob3dDb250ZXh0TWVudSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgYWR0ID0gQWR0LmdlbmVyYXRlKFtcbiAgICAgIHtcbiAgICAgICAgb2Zmc2V0OiBbXG4gICAgICAgICAgJ3gnLFxuICAgICAgICAgICd5J1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhYnNvbHV0ZTogW1xuICAgICAgICAgICd4JyxcbiAgICAgICAgICAneSdcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZml4ZWQ6IFtcbiAgICAgICAgICAneCcsXG4gICAgICAgICAgJ3knXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdKTtcbiAgICBjb25zdCBzdWJ0cmFjdCA9IGNoYW5nZSA9PiBwb2ludCA9PiBwb2ludC50cmFuc2xhdGUoLWNoYW5nZS5sZWZ0LCAtY2hhbmdlLnRvcCk7XG4gICAgY29uc3QgYWRkID0gY2hhbmdlID0+IHBvaW50ID0+IHBvaW50LnRyYW5zbGF0ZShjaGFuZ2UubGVmdCwgY2hhbmdlLnRvcCk7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gY2hhbmdlcyA9PiAoeCwgeSkgPT4gZm9sZGwoY2hhbmdlcywgKHJlc3QsIGYpID0+IGYocmVzdCksIFN1Z2FyUG9zaXRpb24oeCwgeSkpO1xuICAgIGNvbnN0IGFzRml4ZWQgPSAoY29vcmQsIHNjcm9sbCwgb3JpZ2luKSA9PiBjb29yZC5mb2xkKHRyYW5zZm9ybShbXG4gICAgICBhZGQob3JpZ2luKSxcbiAgICAgIHN1YnRyYWN0KHNjcm9sbClcbiAgICBdKSwgdHJhbnNmb3JtKFtzdWJ0cmFjdChzY3JvbGwpXSksIHRyYW5zZm9ybShbXSkpO1xuICAgIGNvbnN0IGFzQWJzb2x1dGUgPSAoY29vcmQsIHNjcm9sbCwgb3JpZ2luKSA9PiBjb29yZC5mb2xkKHRyYW5zZm9ybShbYWRkKG9yaWdpbildKSwgdHJhbnNmb3JtKFtdKSwgdHJhbnNmb3JtKFthZGQoc2Nyb2xsKV0pKTtcbiAgICBjb25zdCBhc09mZnNldCA9IChjb29yZCwgc2Nyb2xsLCBvcmlnaW4pID0+IGNvb3JkLmZvbGQodHJhbnNmb3JtKFtdKSwgdHJhbnNmb3JtKFtzdWJ0cmFjdChvcmlnaW4pXSksIHRyYW5zZm9ybShbXG4gICAgICBhZGQoc2Nyb2xsKSxcbiAgICAgIHN1YnRyYWN0KG9yaWdpbilcbiAgICBdKSk7XG4gICAgY29uc3Qgd2l0aGluUmFuZ2UgPSAoY29vcmQxLCBjb29yZDIsIHhSYW5nZSwgeVJhbmdlLCBzY3JvbGwsIG9yaWdpbikgPT4ge1xuICAgICAgY29uc3QgYTEgPSBhc0Fic29sdXRlKGNvb3JkMSwgc2Nyb2xsLCBvcmlnaW4pO1xuICAgICAgY29uc3QgYTIgPSBhc0Fic29sdXRlKGNvb3JkMiwgc2Nyb2xsLCBvcmlnaW4pO1xuICAgICAgcmV0dXJuIE1hdGguYWJzKGExLmxlZnQgLSBhMi5sZWZ0KSA8PSB4UmFuZ2UgJiYgTWF0aC5hYnMoYTEudG9wIC0gYTIudG9wKSA8PSB5UmFuZ2U7XG4gICAgfTtcbiAgICBjb25zdCBnZXREZWx0YXMgPSAoY29vcmQxLCBjb29yZDIsIHhSYW5nZSwgeVJhbmdlLCBzY3JvbGwsIG9yaWdpbikgPT4ge1xuICAgICAgY29uc3QgYTEgPSBhc0Fic29sdXRlKGNvb3JkMSwgc2Nyb2xsLCBvcmlnaW4pO1xuICAgICAgY29uc3QgYTIgPSBhc0Fic29sdXRlKGNvb3JkMiwgc2Nyb2xsLCBvcmlnaW4pO1xuICAgICAgY29uc3QgbGVmdCA9IE1hdGguYWJzKGExLmxlZnQgLSBhMi5sZWZ0KTtcbiAgICAgIGNvbnN0IHRvcCA9IE1hdGguYWJzKGExLnRvcCAtIGEyLnRvcCk7XG4gICAgICByZXR1cm4gU3VnYXJQb3NpdGlvbihsZWZ0LCB0b3ApO1xuICAgIH07XG4gICAgY29uc3QgdG9TdHlsZXMgPSAoY29vcmQsIHNjcm9sbCwgb3JpZ2luKSA9PiB7XG4gICAgICBjb25zdCBzdHlsZXNPcHQgPSBjb29yZC5mb2xkKCh4LCB5KSA9PiAoe1xuICAgICAgICBwb3NpdGlvbjogT3B0aW9uYWwuc29tZSgnYWJzb2x1dGUnKSxcbiAgICAgICAgbGVmdDogT3B0aW9uYWwuc29tZSh4ICsgJ3B4JyksXG4gICAgICAgIHRvcDogT3B0aW9uYWwuc29tZSh5ICsgJ3B4JylcbiAgICAgIH0pLCAoeCwgeSkgPT4gKHtcbiAgICAgICAgcG9zaXRpb246IE9wdGlvbmFsLnNvbWUoJ2Fic29sdXRlJyksXG4gICAgICAgIGxlZnQ6IE9wdGlvbmFsLnNvbWUoeCAtIG9yaWdpbi5sZWZ0ICsgJ3B4JyksXG4gICAgICAgIHRvcDogT3B0aW9uYWwuc29tZSh5IC0gb3JpZ2luLnRvcCArICdweCcpXG4gICAgICB9KSwgKHgsIHkpID0+ICh7XG4gICAgICAgIHBvc2l0aW9uOiBPcHRpb25hbC5zb21lKCdmaXhlZCcpLFxuICAgICAgICBsZWZ0OiBPcHRpb25hbC5zb21lKHggKyAncHgnKSxcbiAgICAgICAgdG9wOiBPcHRpb25hbC5zb21lKHkgKyAncHgnKVxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmlnaHQ6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICAgYm90dG9tOiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIC4uLnN0eWxlc09wdFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHRyYW5zbGF0ZSA9IChjb29yZCwgZGVsdGFYLCBkZWx0YVkpID0+IGNvb3JkLmZvbGQoKHgsIHkpID0+IG9mZnNldCh4ICsgZGVsdGFYLCB5ICsgZGVsdGFZKSwgKHgsIHkpID0+IGFic29sdXRlKHggKyBkZWx0YVgsIHkgKyBkZWx0YVkpLCAoeCwgeSkgPT4gZml4ZWQoeCArIGRlbHRhWCwgeSArIGRlbHRhWSkpO1xuICAgIGNvbnN0IGFic29yYiA9IChwYXJ0aWFsQ29vcmQsIG9yaWdpbmFsQ29vcmQsIHNjcm9sbCwgb3JpZ2luKSA9PiB7XG4gICAgICBjb25zdCBhYnNvcmJPbmUgPSAoc3RlbmNpbCwgbnUpID0+IChvcHRYLCBvcHRZKSA9PiB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsID0gc3RlbmNpbChvcmlnaW5hbENvb3JkLCBzY3JvbGwsIG9yaWdpbik7XG4gICAgICAgIHJldHVybiBudShvcHRYLmdldE9yKG9yaWdpbmFsLmxlZnQpLCBvcHRZLmdldE9yKG9yaWdpbmFsLnRvcCkpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBwYXJ0aWFsQ29vcmQuZm9sZChhYnNvcmJPbmUoYXNPZmZzZXQsIG9mZnNldCksIGFic29yYk9uZShhc0Fic29sdXRlLCBhYnNvbHV0ZSksIGFic29yYk9uZShhc0ZpeGVkLCBmaXhlZCkpO1xuICAgIH07XG4gICAgY29uc3Qgb2Zmc2V0ID0gYWR0Lm9mZnNldDtcbiAgICBjb25zdCBhYnNvbHV0ZSA9IGFkdC5hYnNvbHV0ZTtcbiAgICBjb25zdCBmaXhlZCA9IGFkdC5maXhlZDtcblxuICAgIGNvbnN0IHBhcnNlQXR0clRvSW50ID0gKGVsZW1lbnQsIG5hbWUpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZ2V0JGYoZWxlbWVudCwgbmFtZSk7XG4gICAgICByZXR1cm4gaXNVbmRlZmluZWQodmFsdWUpID8gTmFOIDogcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldCA9IChjb21wb25lbnQsIHNuYXBzSW5mbykgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGNvbXBvbmVudC5lbGVtZW50O1xuICAgICAgY29uc3QgeCA9IHBhcnNlQXR0clRvSW50KGVsZW1lbnQsIHNuYXBzSW5mby5sZWZ0QXR0cik7XG4gICAgICBjb25zdCB5ID0gcGFyc2VBdHRyVG9JbnQoZWxlbWVudCwgc25hcHNJbmZvLnRvcEF0dHIpO1xuICAgICAgcmV0dXJuIGlzTmFOKHgpIHx8IGlzTmFOKHkpID8gT3B0aW9uYWwubm9uZSgpIDogT3B0aW9uYWwuc29tZShTdWdhclBvc2l0aW9uKHgsIHkpKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldCA9IChjb21wb25lbnQsIHNuYXBzSW5mbywgcHQpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb21wb25lbnQuZWxlbWVudDtcbiAgICAgIHNldCQ5KGVsZW1lbnQsIHNuYXBzSW5mby5sZWZ0QXR0ciwgcHQubGVmdCArICdweCcpO1xuICAgICAgc2V0JDkoZWxlbWVudCwgc25hcHNJbmZvLnRvcEF0dHIsIHB0LnRvcCArICdweCcpO1xuICAgIH07XG4gICAgY29uc3QgY2xlYXIgPSAoY29tcG9uZW50LCBzbmFwc0luZm8pID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb21wb25lbnQuZWxlbWVudDtcbiAgICAgIHJlbW92ZSQ3KGVsZW1lbnQsIHNuYXBzSW5mby5sZWZ0QXR0cik7XG4gICAgICByZW1vdmUkNyhlbGVtZW50LCBzbmFwc0luZm8udG9wQXR0cik7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldENvb3JkcyA9IChjb21wb25lbnQsIHNuYXBJbmZvLCBjb29yZCwgZGVsdGEpID0+IGdldChjb21wb25lbnQsIHNuYXBJbmZvKS5mb2xkKCgpID0+IGNvb3JkLCBmaXhlZCQxID0+IGZpeGVkKGZpeGVkJDEubGVmdCArIGRlbHRhLmxlZnQsIGZpeGVkJDEudG9wICsgZGVsdGEudG9wKSk7XG4gICAgY29uc3QgbW92ZU9yU25hcCA9IChjb21wb25lbnQsIHNuYXBJbmZvLCBjb29yZCwgZGVsdGEsIHNjcm9sbCwgb3JpZ2luKSA9PiB7XG4gICAgICBjb25zdCBuZXdDb29yZCA9IGdldENvb3Jkcyhjb21wb25lbnQsIHNuYXBJbmZvLCBjb29yZCwgZGVsdGEpO1xuICAgICAgY29uc3Qgc25hcCA9IHNuYXBJbmZvLm11c3RTbmFwID8gZmluZENsb3Nlc3RTbmFwKGNvbXBvbmVudCwgc25hcEluZm8sIG5ld0Nvb3JkLCBzY3JvbGwsIG9yaWdpbikgOiBmaW5kU25hcChjb21wb25lbnQsIHNuYXBJbmZvLCBuZXdDb29yZCwgc2Nyb2xsLCBvcmlnaW4pO1xuICAgICAgY29uc3QgZml4ZWRDb29yZCA9IGFzRml4ZWQobmV3Q29vcmQsIHNjcm9sbCwgb3JpZ2luKTtcbiAgICAgIHNldChjb21wb25lbnQsIHNuYXBJbmZvLCBmaXhlZENvb3JkKTtcbiAgICAgIHJldHVybiBzbmFwLmZvbGQoKCkgPT4gKHtcbiAgICAgICAgY29vcmQ6IGZpeGVkKGZpeGVkQ29vcmQubGVmdCwgZml4ZWRDb29yZC50b3ApLFxuICAgICAgICBleHRyYTogT3B0aW9uYWwubm9uZSgpXG4gICAgICB9KSwgc3Bhbm5lZCA9PiAoe1xuICAgICAgICBjb29yZDogc3Bhbm5lZC5vdXRwdXQsXG4gICAgICAgIGV4dHJhOiBzcGFubmVkLmV4dHJhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgICBjb25zdCBzdG9wRHJhZyA9IChjb21wb25lbnQsIHNuYXBJbmZvKSA9PiB7XG4gICAgICBjbGVhcihjb21wb25lbnQsIHNuYXBJbmZvKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRNYXRjaGluZ1NuYXAgPSAoc25hcHMsIG5ld0Nvb3JkLCBzY3JvbGwsIG9yaWdpbikgPT4gZmluZE1hcChzbmFwcywgc25hcCA9PiB7XG4gICAgICBjb25zdCBzZW5zb3IgPSBzbmFwLnNlbnNvcjtcbiAgICAgIGNvbnN0IGluUmFuZ2UgPSB3aXRoaW5SYW5nZShuZXdDb29yZCwgc2Vuc29yLCBzbmFwLnJhbmdlLmxlZnQsIHNuYXAucmFuZ2UudG9wLCBzY3JvbGwsIG9yaWdpbik7XG4gICAgICByZXR1cm4gaW5SYW5nZSA/IE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICBvdXRwdXQ6IGFic29yYihzbmFwLm91dHB1dCwgbmV3Q29vcmQsIHNjcm9sbCwgb3JpZ2luKSxcbiAgICAgICAgZXh0cmE6IHNuYXAuZXh0cmFcbiAgICAgIH0pIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIH0pO1xuICAgIGNvbnN0IGZpbmRDbG9zZXN0U25hcCA9IChjb21wb25lbnQsIHNuYXBJbmZvLCBuZXdDb29yZCwgc2Nyb2xsLCBvcmlnaW4pID0+IHtcbiAgICAgIGNvbnN0IHNuYXBzID0gc25hcEluZm8uZ2V0U25hcFBvaW50cyhjb21wb25lbnQpO1xuICAgICAgY29uc3QgbWF0Y2hTbmFwID0gZmluZE1hdGNoaW5nU25hcChzbmFwcywgbmV3Q29vcmQsIHNjcm9sbCwgb3JpZ2luKTtcbiAgICAgIHJldHVybiBtYXRjaFNuYXAub3JUaHVuaygoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJlc3RTbmFwID0gZm9sZGwoc25hcHMsIChhY2MsIHNuYXApID0+IHtcbiAgICAgICAgICBjb25zdCBzZW5zb3IgPSBzbmFwLnNlbnNvcjtcbiAgICAgICAgICBjb25zdCBkZWx0YXMgPSBnZXREZWx0YXMobmV3Q29vcmQsIHNlbnNvciwgc25hcC5yYW5nZS5sZWZ0LCBzbmFwLnJhbmdlLnRvcCwgc2Nyb2xsLCBvcmlnaW4pO1xuICAgICAgICAgIHJldHVybiBhY2MuZGVsdGFzLmZvbGQoKCkgPT4gKHtcbiAgICAgICAgICAgIGRlbHRhczogT3B0aW9uYWwuc29tZShkZWx0YXMpLFxuICAgICAgICAgICAgc25hcDogT3B0aW9uYWwuc29tZShzbmFwKVxuICAgICAgICAgIH0pLCBiZXN0RGVsdGFzID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJBdmcgPSAoZGVsdGFzLmxlZnQgKyBkZWx0YXMudG9wKSAvIDI7XG4gICAgICAgICAgICBjb25zdCBiZXN0QXZnID0gKGJlc3REZWx0YXMubGVmdCArIGJlc3REZWx0YXMudG9wKSAvIDI7XG4gICAgICAgICAgICBpZiAoY3VyckF2ZyA8PSBiZXN0QXZnKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGVsdGFzOiBPcHRpb25hbC5zb21lKGRlbHRhcyksXG4gICAgICAgICAgICAgICAgc25hcDogT3B0aW9uYWwuc29tZShzbmFwKVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwge1xuICAgICAgICAgIGRlbHRhczogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICAgIHNuYXA6IE9wdGlvbmFsLm5vbmUoKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGJlc3RTbmFwLnNuYXAubWFwKHNuYXAgPT4gKHtcbiAgICAgICAgICBvdXRwdXQ6IGFic29yYihzbmFwLm91dHB1dCwgbmV3Q29vcmQsIHNjcm9sbCwgb3JpZ2luKSxcbiAgICAgICAgICBleHRyYTogc25hcC5leHRyYVxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRTbmFwID0gKGNvbXBvbmVudCwgc25hcEluZm8sIG5ld0Nvb3JkLCBzY3JvbGwsIG9yaWdpbikgPT4ge1xuICAgICAgY29uc3Qgc25hcHMgPSBzbmFwSW5mby5nZXRTbmFwUG9pbnRzKGNvbXBvbmVudCk7XG4gICAgICByZXR1cm4gZmluZE1hdGNoaW5nU25hcChzbmFwcywgbmV3Q29vcmQsIHNjcm9sbCwgb3JpZ2luKTtcbiAgICB9O1xuICAgIGNvbnN0IHNuYXBUbyQxID0gKHNuYXAsIHNjcm9sbCwgb3JpZ2luKSA9PiAoe1xuICAgICAgY29vcmQ6IGFic29yYihzbmFwLm91dHB1dCwgc25hcC5vdXRwdXQsIHNjcm9sbCwgb3JpZ2luKSxcbiAgICAgIGV4dHJhOiBzbmFwLmV4dHJhXG4gICAgfSk7XG5cbiAgICBjb25zdCBzbmFwVG8gPSAoY29tcG9uZW50LCBkcmFnQ29uZmlnLCBfc3RhdGUsIHNuYXApID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGRyYWdDb25maWcuZ2V0VGFyZ2V0KGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgIGlmIChkcmFnQ29uZmlnLnJlcG9zaXRpb25UYXJnZXQpIHtcbiAgICAgICAgY29uc3QgZG9jID0gb3duZXIkNChjb21wb25lbnQuZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHNjcm9sbCA9IGdldCRiKGRvYyk7XG4gICAgICAgIGNvbnN0IG9yaWdpbiA9IGdldE9yaWdpbih0YXJnZXQpO1xuICAgICAgICBjb25zdCBzbmFwUGluID0gc25hcFRvJDEoc25hcCwgc2Nyb2xsLCBvcmlnaW4pO1xuICAgICAgICBjb25zdCBzdHlsZXMgPSB0b1N0eWxlcyhzbmFwUGluLmNvb3JkLCBzY3JvbGwsIG9yaWdpbik7XG4gICAgICAgIHNldE9wdGlvbnModGFyZ2V0LCBzdHlsZXMpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgRHJhZ2dpbmdBcGlzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIHNuYXBUbzogc25hcFRvXG4gICAgfSk7XG5cbiAgICBjb25zdCBpbml0aWFsQXR0cmlidXRlID0gJ2RhdGEtaW5pdGlhbC16LWluZGV4JztcbiAgICBjb25zdCByZXNldFpJbmRleCA9IGJsb2NrZXIgPT4ge1xuICAgICAgcGFyZW50KGJsb2NrZXIuZWxlbWVudCkuZmlsdGVyKGlzRWxlbWVudCQxKS5lYWNoKHJvb3QgPT4ge1xuICAgICAgICBnZXRPcHQocm9vdCwgaW5pdGlhbEF0dHJpYnV0ZSkuZm9sZCgoKSA9PiByZW1vdmUkNihyb290LCAnei1pbmRleCcpLCB6SW5kZXggPT4gc2V0JDgocm9vdCwgJ3otaW5kZXgnLCB6SW5kZXgpKTtcbiAgICAgICAgcmVtb3ZlJDcocm9vdCwgaW5pdGlhbEF0dHJpYnV0ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGNoYW5nZVpJbmRleCA9IGJsb2NrZXIgPT4ge1xuICAgICAgcGFyZW50KGJsb2NrZXIuZWxlbWVudCkuZmlsdGVyKGlzRWxlbWVudCQxKS5lYWNoKHJvb3QgPT4ge1xuICAgICAgICBnZXRSYXcocm9vdCwgJ3otaW5kZXgnKS5lYWNoKHppbmRleCA9PiB7XG4gICAgICAgICAgc2V0JDkocm9vdCwgaW5pdGlhbEF0dHJpYnV0ZSwgemluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNldCQ4KHJvb3QsICd6LWluZGV4JywgZ2V0JGUoYmxvY2tlci5lbGVtZW50LCAnei1pbmRleCcpKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW5zdGlnYXRlID0gKGFueUNvbXBvbmVudCwgYmxvY2tlcikgPT4ge1xuICAgICAgYW55Q29tcG9uZW50LmdldFN5c3RlbSgpLmFkZFRvR3VpKGJsb2NrZXIpO1xuICAgICAgY2hhbmdlWkluZGV4KGJsb2NrZXIpO1xuICAgIH07XG4gICAgY29uc3QgZGlzY2FyZCA9IGJsb2NrZXIgPT4ge1xuICAgICAgcmVzZXRaSW5kZXgoYmxvY2tlcik7XG4gICAgICBibG9ja2VyLmdldFN5c3RlbSgpLnJlbW92ZUZyb21HdWkoYmxvY2tlcik7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVDb21wb25lbnQgPSAoY29tcG9uZW50LCBibG9ja2VyQ2xhc3MsIGJsb2NrZXJFdmVudHMpID0+IGNvbXBvbmVudC5nZXRTeXN0ZW0oKS5idWlsZChDb250YWluZXIuc2tldGNoKHtcbiAgICAgIGRvbToge1xuICAgICAgICBzdHlsZXM6IHtcbiAgICAgICAgICAnbGVmdCc6ICcwcHgnLFxuICAgICAgICAgICd0b3AnOiAnMHB4JyxcbiAgICAgICAgICAnd2lkdGgnOiAnMTAwJScsXG4gICAgICAgICAgJ2hlaWdodCc6ICcxMDAlJyxcbiAgICAgICAgICAncG9zaXRpb24nOiAnZml4ZWQnLFxuICAgICAgICAgICd6LWluZGV4JzogJzEwMDAwMDAwMDAwMDAwMDAnXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzZXM6IFtibG9ja2VyQ2xhc3NdXG4gICAgICB9LFxuICAgICAgZXZlbnRzOiBibG9ja2VyRXZlbnRzXG4gICAgfSkpO1xuXG4gICAgdmFyIFNuYXBTY2hlbWEgPSBvcHRpb25PYmpPZignc25hcHMnLCBbXG4gICAgICByZXF1aXJlZCQxKCdnZXRTbmFwUG9pbnRzJyksXG4gICAgICBvbkhhbmRsZXIoJ29uU2Vuc29yJyksXG4gICAgICByZXF1aXJlZCQxKCdsZWZ0QXR0cicpLFxuICAgICAgcmVxdWlyZWQkMSgndG9wQXR0cicpLFxuICAgICAgZGVmYXVsdGVkKCdsYXp5Vmlld3BvcnQnLCB3aW4pLFxuICAgICAgZGVmYXVsdGVkKCdtdXN0U25hcCcsIGZhbHNlKVxuICAgIF0pO1xuXG4gICAgY29uc3Qgc2NoZW1hJDYgPSBbXG4gICAgICBkZWZhdWx0ZWQoJ3VzZUZpeGVkJywgbmV2ZXIpLFxuICAgICAgcmVxdWlyZWQkMSgnYmxvY2tlckNsYXNzJyksXG4gICAgICBkZWZhdWx0ZWQoJ2dldFRhcmdldCcsIGlkZW50aXR5KSxcbiAgICAgIGRlZmF1bHRlZCgnb25EcmFnJywgbm9vcCksXG4gICAgICBkZWZhdWx0ZWQoJ3JlcG9zaXRpb25UYXJnZXQnLCB0cnVlKSxcbiAgICAgIGRlZmF1bHRlZCgnb25Ecm9wJywgbm9vcCksXG4gICAgICBkZWZhdWx0ZWRGdW5jdGlvbignZ2V0Qm91bmRzJywgd2luKSxcbiAgICAgIFNuYXBTY2hlbWFcbiAgICBdO1xuXG4gICAgY29uc3QgZ2V0Q3VycmVudENvb3JkID0gdGFyZ2V0ID0+IGxpZnQzKGdldFJhdyh0YXJnZXQsICdsZWZ0JyksIGdldFJhdyh0YXJnZXQsICd0b3AnKSwgZ2V0UmF3KHRhcmdldCwgJ3Bvc2l0aW9uJyksIChsZWZ0LCB0b3AsIHBvc2l0aW9uKSA9PiB7XG4gICAgICBjb25zdCBudSA9IHBvc2l0aW9uID09PSAnZml4ZWQnID8gZml4ZWQgOiBvZmZzZXQ7XG4gICAgICByZXR1cm4gbnUocGFyc2VJbnQobGVmdCwgMTApLCBwYXJzZUludCh0b3AsIDEwKSk7XG4gICAgfSkuZ2V0T3JUaHVuaygoKSA9PiB7XG4gICAgICBjb25zdCBsb2NhdGlvbiA9IGFic29sdXRlJDModGFyZ2V0KTtcbiAgICAgIHJldHVybiBhYnNvbHV0ZShsb2NhdGlvbi5sZWZ0LCBsb2NhdGlvbi50b3ApO1xuICAgIH0pO1xuICAgIGNvbnN0IGNsYW1wQ29vcmRzID0gKGNvbXBvbmVudCwgY29vcmRzLCBzY3JvbGwsIG9yaWdpbiwgc3RhcnREYXRhKSA9PiB7XG4gICAgICBjb25zdCBib3VuZHMgPSBzdGFydERhdGEuYm91bmRzO1xuICAgICAgY29uc3QgYWJzb2x1dGVDb29yZCA9IGFzQWJzb2x1dGUoY29vcmRzLCBzY3JvbGwsIG9yaWdpbik7XG4gICAgICBjb25zdCBuZXdYID0gY2xhbXAoYWJzb2x1dGVDb29yZC5sZWZ0LCBib3VuZHMueCwgYm91bmRzLnggKyBib3VuZHMud2lkdGggLSBzdGFydERhdGEud2lkdGgpO1xuICAgICAgY29uc3QgbmV3WSA9IGNsYW1wKGFic29sdXRlQ29vcmQudG9wLCBib3VuZHMueSwgYm91bmRzLnkgKyBib3VuZHMuaGVpZ2h0IC0gc3RhcnREYXRhLmhlaWdodCk7XG4gICAgICBjb25zdCBuZXdDb29yZHMgPSBhYnNvbHV0ZShuZXdYLCBuZXdZKTtcbiAgICAgIHJldHVybiBjb29yZHMuZm9sZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG9mZnNldCQxID0gYXNPZmZzZXQobmV3Q29vcmRzLCBzY3JvbGwsIG9yaWdpbik7XG4gICAgICAgIHJldHVybiBvZmZzZXQob2Zmc2V0JDEubGVmdCwgb2Zmc2V0JDEudG9wKTtcbiAgICAgIH0sIGNvbnN0YW50JDEobmV3Q29vcmRzKSwgKCkgPT4ge1xuICAgICAgICBjb25zdCBmaXhlZCQxID0gYXNGaXhlZChuZXdDb29yZHMsIHNjcm9sbCwgb3JpZ2luKTtcbiAgICAgICAgcmV0dXJuIGZpeGVkKGZpeGVkJDEubGVmdCwgZml4ZWQkMS50b3ApO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBjYWxjTmV3Q29vcmQgPSAoY29tcG9uZW50LCBvcHRTbmFwcywgY3VycmVudENvb3JkLCBzY3JvbGwsIG9yaWdpbiwgZGVsdGEsIHN0YXJ0RGF0YSkgPT4ge1xuICAgICAgY29uc3QgbmV3Q29vcmQgPSBvcHRTbmFwcy5mb2xkKCgpID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlZCA9IHRyYW5zbGF0ZShjdXJyZW50Q29vcmQsIGRlbHRhLmxlZnQsIGRlbHRhLnRvcCk7XG4gICAgICAgIGNvbnN0IGZpeGVkQ29vcmQgPSBhc0ZpeGVkKHRyYW5zbGF0ZWQsIHNjcm9sbCwgb3JpZ2luKTtcbiAgICAgICAgcmV0dXJuIGZpeGVkKGZpeGVkQ29vcmQubGVmdCwgZml4ZWRDb29yZC50b3ApO1xuICAgICAgfSwgc25hcEluZm8gPT4ge1xuICAgICAgICBjb25zdCBzbmFwcGluZyA9IG1vdmVPclNuYXAoY29tcG9uZW50LCBzbmFwSW5mbywgY3VycmVudENvb3JkLCBkZWx0YSwgc2Nyb2xsLCBvcmlnaW4pO1xuICAgICAgICBzbmFwcGluZy5leHRyYS5lYWNoKGV4dHJhID0+IHtcbiAgICAgICAgICBzbmFwSW5mby5vblNlbnNvcihjb21wb25lbnQsIGV4dHJhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzbmFwcGluZy5jb29yZDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNsYW1wQ29vcmRzKGNvbXBvbmVudCwgbmV3Q29vcmQsIHNjcm9sbCwgb3JpZ2luLCBzdGFydERhdGEpO1xuICAgIH07XG4gICAgY29uc3QgZHJhZ0J5ID0gKGNvbXBvbmVudCwgZHJhZ0NvbmZpZywgc3RhcnREYXRhLCBkZWx0YSkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZHJhZ0NvbmZpZy5nZXRUYXJnZXQoY29tcG9uZW50LmVsZW1lbnQpO1xuICAgICAgaWYgKGRyYWdDb25maWcucmVwb3NpdGlvblRhcmdldCkge1xuICAgICAgICBjb25zdCBkb2MgPSBvd25lciQ0KGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsID0gZ2V0JGIoZG9jKTtcbiAgICAgICAgY29uc3Qgb3JpZ2luID0gZ2V0T3JpZ2luKHRhcmdldCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb29yZCA9IGdldEN1cnJlbnRDb29yZCh0YXJnZXQpO1xuICAgICAgICBjb25zdCBuZXdDb29yZCA9IGNhbGNOZXdDb29yZChjb21wb25lbnQsIGRyYWdDb25maWcuc25hcHMsIGN1cnJlbnRDb29yZCwgc2Nyb2xsLCBvcmlnaW4sIGRlbHRhLCBzdGFydERhdGEpO1xuICAgICAgICBjb25zdCBzdHlsZXMgPSB0b1N0eWxlcyhuZXdDb29yZCwgc2Nyb2xsLCBvcmlnaW4pO1xuICAgICAgICBzZXRPcHRpb25zKHRhcmdldCwgc3R5bGVzKTtcbiAgICAgIH1cbiAgICAgIGRyYWdDb25maWcub25EcmFnKGNvbXBvbmVudCwgdGFyZ2V0LCBkZWx0YSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNhbGNTdGFydERhdGEgPSAoZHJhZ0NvbmZpZywgY29tcCkgPT4gKHtcbiAgICAgIGJvdW5kczogZHJhZ0NvbmZpZy5nZXRCb3VuZHMoKSxcbiAgICAgIGhlaWdodDogZ2V0T3V0ZXIkMihjb21wLmVsZW1lbnQpLFxuICAgICAgd2lkdGg6IGdldE91dGVyJDEoY29tcC5lbGVtZW50KVxuICAgIH0pO1xuICAgIGNvbnN0IG1vdmUgPSAoY29tcG9uZW50LCBkcmFnQ29uZmlnLCBkcmFnU3RhdGUsIGRyYWdNb2RlLCBldmVudCkgPT4ge1xuICAgICAgY29uc3QgZGVsdGEgPSBkcmFnU3RhdGUudXBkYXRlKGRyYWdNb2RlLCBldmVudCk7XG4gICAgICBjb25zdCBkcmFnU3RhcnREYXRhID0gZHJhZ1N0YXRlLmdldFN0YXJ0RGF0YSgpLmdldE9yVGh1bmsoKCkgPT4gY2FsY1N0YXJ0RGF0YShkcmFnQ29uZmlnLCBjb21wb25lbnQpKTtcbiAgICAgIGRlbHRhLmVhY2goZGx0ID0+IHtcbiAgICAgICAgZHJhZ0J5KGNvbXBvbmVudCwgZHJhZ0NvbmZpZywgZHJhZ1N0YXJ0RGF0YSwgZGx0KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc3RvcCA9IChjb21wb25lbnQsIGJsb2NrZXIsIGRyYWdDb25maWcsIGRyYWdTdGF0ZSkgPT4ge1xuICAgICAgYmxvY2tlci5lYWNoKGRpc2NhcmQpO1xuICAgICAgZHJhZ0NvbmZpZy5zbmFwcy5lYWNoKHNuYXBJbmZvID0+IHtcbiAgICAgICAgc3RvcERyYWcoY29tcG9uZW50LCBzbmFwSW5mbyk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGRyYWdDb25maWcuZ2V0VGFyZ2V0KGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgIGRyYWdTdGF0ZS5yZXNldCgpO1xuICAgICAgZHJhZ0NvbmZpZy5vbkRyb3AoY29tcG9uZW50LCB0YXJnZXQpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlcnMgPSBldmVudHMgPT4gKGRyYWdDb25maWcsIGRyYWdTdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlU3RhcnRTdGF0ZSA9IGNvbXAgPT4ge1xuICAgICAgICBkcmFnU3RhdGUuc2V0U3RhcnREYXRhKGNhbGNTdGFydERhdGEoZHJhZ0NvbmZpZywgY29tcCkpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBkZXJpdmUkMihbXG4gICAgICAgIHJ1biQxKHdpbmRvd1Njcm9sbCgpLCBjb21wID0+IHtcbiAgICAgICAgICBkcmFnU3RhdGUuZ2V0U3RhcnREYXRhKCkuZWFjaCgoKSA9PiB1cGRhdGVTdGFydFN0YXRlKGNvbXApKTtcbiAgICAgICAgfSksXG4gICAgICAgIC4uLmV2ZW50cyhkcmFnQ29uZmlnLCBkcmFnU3RhdGUsIHVwZGF0ZVN0YXJ0U3RhdGUpXG4gICAgICBdKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaW5pdCQzID0gZHJhZ0FwaSA9PiBkZXJpdmUkMihbXG4gICAgICBydW4kMShtb3VzZWRvd24oKSwgZHJhZ0FwaS5mb3JjZURyb3ApLFxuICAgICAgcnVuJDEobW91c2V1cCgpLCBkcmFnQXBpLmRyb3ApLFxuICAgICAgcnVuJDEobW91c2Vtb3ZlKCksIChjb21wLCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICBkcmFnQXBpLm1vdmUoc2ltdWxhdGVkRXZlbnQuZXZlbnQpO1xuICAgICAgfSksXG4gICAgICBydW4kMShtb3VzZW91dCgpLCBkcmFnQXBpLmRlbGF5RHJvcClcbiAgICBdKTtcblxuICAgIGNvbnN0IGdldERhdGEkMSA9IGV2ZW50ID0+IE9wdGlvbmFsLmZyb20oU3VnYXJQb3NpdGlvbihldmVudC54LCBldmVudC55KSk7XG4gICAgY29uc3QgZ2V0RGVsdGEkMSA9IChvbGQsIG51KSA9PiBTdWdhclBvc2l0aW9uKG51LmxlZnQgLSBvbGQubGVmdCwgbnUudG9wIC0gb2xkLnRvcCk7XG5cbiAgICB2YXIgTW91c2VEYXRhID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIGdldERhdGE6IGdldERhdGEkMSxcbiAgICAgICAgZ2V0RGVsdGE6IGdldERlbHRhJDFcbiAgICB9KTtcblxuICAgIGNvbnN0IGV2ZW50cyQzID0gKGRyYWdDb25maWcsIGRyYWdTdGF0ZSwgdXBkYXRlU3RhcnRTdGF0ZSkgPT4gW3J1biQxKG1vdXNlZG93bigpLCAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCByYXcgPSBzaW11bGF0ZWRFdmVudC5ldmVudC5yYXc7XG4gICAgICAgIGlmIChyYXcuYnV0dG9uICE9PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNpbXVsYXRlZEV2ZW50LnN0b3AoKTtcbiAgICAgICAgY29uc3Qgc3RvcCQxID0gKCkgPT4gc3RvcChjb21wb25lbnQsIE9wdGlvbmFsLnNvbWUoYmxvY2tlciksIGRyYWdDb25maWcsIGRyYWdTdGF0ZSk7XG4gICAgICAgIGNvbnN0IGRlbGF5RHJvcCA9IERlbGF5ZWRGdW5jdGlvbihzdG9wJDEsIDIwMCk7XG4gICAgICAgIGNvbnN0IGRyYWdBcGkgPSB7XG4gICAgICAgICAgZHJvcDogc3RvcCQxLFxuICAgICAgICAgIGRlbGF5RHJvcDogZGVsYXlEcm9wLnNjaGVkdWxlLFxuICAgICAgICAgIGZvcmNlRHJvcDogc3RvcCQxLFxuICAgICAgICAgIG1vdmU6IGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGRlbGF5RHJvcC5jYW5jZWwoKTtcbiAgICAgICAgICAgIG1vdmUoY29tcG9uZW50LCBkcmFnQ29uZmlnLCBkcmFnU3RhdGUsIE1vdXNlRGF0YSwgZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYmxvY2tlciA9IGNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQsIGRyYWdDb25maWcuYmxvY2tlckNsYXNzLCBpbml0JDMoZHJhZ0FwaSkpO1xuICAgICAgICBjb25zdCBzdGFydCA9ICgpID0+IHtcbiAgICAgICAgICB1cGRhdGVTdGFydFN0YXRlKGNvbXBvbmVudCk7XG4gICAgICAgICAgaW5zdGlnYXRlKGNvbXBvbmVudCwgYmxvY2tlcik7XG4gICAgICAgIH07XG4gICAgICAgIHN0YXJ0KCk7XG4gICAgICB9KV07XG4gICAgY29uc3Qgc2NoZW1hJDUgPSBbXG4gICAgICAuLi5zY2hlbWEkNixcbiAgICAgIG91dHB1dCQxKCdkcmFnZ2VyJywgeyBoYW5kbGVyczogaGFuZGxlcnMoZXZlbnRzJDMpIH0pXG4gICAgXTtcblxuICAgIGNvbnN0IGluaXQkMiA9IGRyYWdBcGkgPT4gZGVyaXZlJDIoW1xuICAgICAgcnVuJDEodG91Y2hzdGFydCgpLCBkcmFnQXBpLmZvcmNlRHJvcCksXG4gICAgICBydW4kMSh0b3VjaGVuZCgpLCBkcmFnQXBpLmRyb3ApLFxuICAgICAgcnVuJDEodG91Y2hjYW5jZWwoKSwgZHJhZ0FwaS5kcm9wKSxcbiAgICAgIHJ1biQxKHRvdWNobW92ZSgpLCAoY29tcCwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgZHJhZ0FwaS5tb3ZlKHNpbXVsYXRlZEV2ZW50LmV2ZW50KTtcbiAgICAgIH0pXG4gICAgXSk7XG5cbiAgICBjb25zdCBnZXREYXRhRnJvbSA9IHRvdWNoZXMgPT4ge1xuICAgICAgY29uc3QgdG91Y2ggPSB0b3VjaGVzWzBdO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoU3VnYXJQb3NpdGlvbih0b3VjaC5jbGllbnRYLCB0b3VjaC5jbGllbnRZKSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXREYXRhID0gZXZlbnQgPT4ge1xuICAgICAgY29uc3QgcmF3ID0gZXZlbnQucmF3O1xuICAgICAgY29uc3QgdG91Y2hlcyA9IHJhdy50b3VjaGVzO1xuICAgICAgcmV0dXJuIHRvdWNoZXMubGVuZ3RoID09PSAxID8gZ2V0RGF0YUZyb20odG91Y2hlcykgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXREZWx0YSA9IChvbGQsIG51KSA9PiBTdWdhclBvc2l0aW9uKG51LmxlZnQgLSBvbGQubGVmdCwgbnUudG9wIC0gb2xkLnRvcCk7XG5cbiAgICB2YXIgVG91Y2hEYXRhID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIGdldERhdGE6IGdldERhdGEsXG4gICAgICAgIGdldERlbHRhOiBnZXREZWx0YVxuICAgIH0pO1xuXG4gICAgY29uc3QgZXZlbnRzJDIgPSAoZHJhZ0NvbmZpZywgZHJhZ1N0YXRlLCB1cGRhdGVTdGFydFN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBibG9ja2VyU2luZ2xldG9uID0gdmFsdWUkMigpO1xuICAgICAgY29uc3Qgc3RvcEJsb2NraW5nID0gY29tcG9uZW50ID0+IHtcbiAgICAgICAgc3RvcChjb21wb25lbnQsIGJsb2NrZXJTaW5nbGV0b24uZ2V0KCksIGRyYWdDb25maWcsIGRyYWdTdGF0ZSk7XG4gICAgICAgIGJsb2NrZXJTaW5nbGV0b24uY2xlYXIoKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gW1xuICAgICAgICBydW4kMSh0b3VjaHN0YXJ0KCksIChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgc2ltdWxhdGVkRXZlbnQuc3RvcCgpO1xuICAgICAgICAgIGNvbnN0IHN0b3AgPSAoKSA9PiBzdG9wQmxvY2tpbmcoY29tcG9uZW50KTtcbiAgICAgICAgICBjb25zdCBkcmFnQXBpID0ge1xuICAgICAgICAgICAgZHJvcDogc3RvcCxcbiAgICAgICAgICAgIGRlbGF5RHJvcDogbm9vcCxcbiAgICAgICAgICAgIGZvcmNlRHJvcDogc3RvcCxcbiAgICAgICAgICAgIG1vdmU6IGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgbW92ZShjb21wb25lbnQsIGRyYWdDb25maWcsIGRyYWdTdGF0ZSwgVG91Y2hEYXRhLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBibG9ja2VyID0gY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCwgZHJhZ0NvbmZpZy5ibG9ja2VyQ2xhc3MsIGluaXQkMihkcmFnQXBpKSk7XG4gICAgICAgICAgYmxvY2tlclNpbmdsZXRvbi5zZXQoYmxvY2tlcik7XG4gICAgICAgICAgY29uc3Qgc3RhcnQgPSAoKSA9PiB7XG4gICAgICAgICAgICB1cGRhdGVTdGFydFN0YXRlKGNvbXBvbmVudCk7XG4gICAgICAgICAgICBpbnN0aWdhdGUoY29tcG9uZW50LCBibG9ja2VyKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHN0YXJ0KCk7XG4gICAgICAgIH0pLFxuICAgICAgICBydW4kMSh0b3VjaG1vdmUoKSwgKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICBzaW11bGF0ZWRFdmVudC5zdG9wKCk7XG4gICAgICAgICAgbW92ZShjb21wb25lbnQsIGRyYWdDb25maWcsIGRyYWdTdGF0ZSwgVG91Y2hEYXRhLCBzaW11bGF0ZWRFdmVudC5ldmVudCk7XG4gICAgICAgIH0pLFxuICAgICAgICBydW4kMSh0b3VjaGVuZCgpLCAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgIHNpbXVsYXRlZEV2ZW50LnN0b3AoKTtcbiAgICAgICAgICBzdG9wQmxvY2tpbmcoY29tcG9uZW50KTtcbiAgICAgICAgfSksXG4gICAgICAgIHJ1biQxKHRvdWNoY2FuY2VsKCksIHN0b3BCbG9ja2luZylcbiAgICAgIF07XG4gICAgfTtcbiAgICBjb25zdCBzY2hlbWEkNCA9IFtcbiAgICAgIC4uLnNjaGVtYSQ2LFxuICAgICAgb3V0cHV0JDEoJ2RyYWdnZXInLCB7IGhhbmRsZXJzOiBoYW5kbGVycyhldmVudHMkMikgfSlcbiAgICBdO1xuXG4gICAgY29uc3QgZXZlbnRzJDEgPSAoZHJhZ0NvbmZpZywgZHJhZ1N0YXRlLCB1cGRhdGVTdGFydFN0YXRlKSA9PiBbXG4gICAgICAuLi5ldmVudHMkMyhkcmFnQ29uZmlnLCBkcmFnU3RhdGUsIHVwZGF0ZVN0YXJ0U3RhdGUpLFxuICAgICAgLi4uZXZlbnRzJDIoZHJhZ0NvbmZpZywgZHJhZ1N0YXRlLCB1cGRhdGVTdGFydFN0YXRlKVxuICAgIF07XG4gICAgY29uc3Qgc2NoZW1hJDMgPSBbXG4gICAgICAuLi5zY2hlbWEkNixcbiAgICAgIG91dHB1dCQxKCdkcmFnZ2VyJywgeyBoYW5kbGVyczogaGFuZGxlcnMoZXZlbnRzJDEpIH0pXG4gICAgXTtcblxuICAgIGNvbnN0IG1vdXNlID0gc2NoZW1hJDU7XG4gICAgY29uc3QgdG91Y2ggPSBzY2hlbWEkNDtcbiAgICBjb25zdCBtb3VzZU9yVG91Y2ggPSBzY2hlbWEkMztcblxuICAgIHZhciBEcmFnZ2luZ0JyYW5jaGVzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIG1vdXNlOiBtb3VzZSxcbiAgICAgICAgdG91Y2g6IHRvdWNoLFxuICAgICAgICBtb3VzZU9yVG91Y2g6IG1vdXNlT3JUb3VjaFxuICAgIH0pO1xuXG4gICAgY29uc3QgaW5pdCQxID0gKCkgPT4ge1xuICAgICAgbGV0IHByZXZpb3VzID0gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgbGV0IHN0YXJ0RGF0YSA9IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIGNvbnN0IHJlc2V0ID0gKCkgPT4ge1xuICAgICAgICBwcmV2aW91cyA9IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgc3RhcnREYXRhID0gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZURlbHRhID0gKG1vZGUsIG51KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHByZXZpb3VzLm1hcChvbGQgPT4gbW9kZS5nZXREZWx0YShvbGQsIG51KSk7XG4gICAgICAgIHByZXZpb3VzID0gT3B0aW9uYWwuc29tZShudSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgdXBkYXRlID0gKG1vZGUsIGRyYWdFdmVudCkgPT4gbW9kZS5nZXREYXRhKGRyYWdFdmVudCkuYmluZChudURhdGEgPT4gY2FsY3VsYXRlRGVsdGEobW9kZSwgbnVEYXRhKSk7XG4gICAgICBjb25zdCBzZXRTdGFydERhdGEgPSBkYXRhID0+IHtcbiAgICAgICAgc3RhcnREYXRhID0gT3B0aW9uYWwuc29tZShkYXRhKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRTdGFydERhdGEgPSAoKSA9PiBzdGFydERhdGE7XG4gICAgICBjb25zdCByZWFkU3RhdGUgPSBjb25zdGFudCQxKHt9KTtcbiAgICAgIHJldHVybiBudSQ4KHtcbiAgICAgICAgcmVhZFN0YXRlLFxuICAgICAgICByZXNldCxcbiAgICAgICAgdXBkYXRlLFxuICAgICAgICBnZXRTdGFydERhdGEsXG4gICAgICAgIHNldFN0YXJ0RGF0YVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHZhciBEcmFnU3RhdGUgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgaW5pdDogaW5pdCQxXG4gICAgfSk7XG5cbiAgICBjb25zdCBEcmFnZ2luZyA9IGNyZWF0ZU1vZGVzKHtcbiAgICAgIGJyYW5jaEtleTogJ21vZGUnLFxuICAgICAgYnJhbmNoZXM6IERyYWdnaW5nQnJhbmNoZXMsXG4gICAgICBuYW1lOiAnZHJhZ2dpbmcnLFxuICAgICAgYWN0aXZlOiB7XG4gICAgICAgIGV2ZW50czogKGRyYWdDb25maWcsIGRyYWdTdGF0ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRyYWdnZXIgPSBkcmFnQ29uZmlnLmRyYWdnZXI7XG4gICAgICAgICAgcmV0dXJuIGRyYWdnZXIuaGFuZGxlcnMoZHJhZ0NvbmZpZywgZHJhZ1N0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGV4dHJhOiB7XG4gICAgICAgIHNuYXA6IHNDb25maWcgPT4gKHtcbiAgICAgICAgICBzZW5zb3I6IHNDb25maWcuc2Vuc29yLFxuICAgICAgICAgIHJhbmdlOiBzQ29uZmlnLnJhbmdlLFxuICAgICAgICAgIG91dHB1dDogc0NvbmZpZy5vdXRwdXQsXG4gICAgICAgICAgZXh0cmE6IE9wdGlvbmFsLmZyb20oc0NvbmZpZy5leHRyYSlcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogRHJhZ1N0YXRlLFxuICAgICAgYXBpczogRHJhZ2dpbmdBcGlzXG4gICAgfSk7XG5cbiAgICBjb25zdCBzbmFwV2lkdGggPSA0MDtcbiAgICBjb25zdCBzbmFwT2Zmc2V0ID0gc25hcFdpZHRoIC8gMjtcbiAgICBjb25zdCBjYWxjU25hcCA9IChzZWxlY3Rvck9wdCwgdGQsIHgsIHksIHdpZHRoLCBoZWlnaHQpID0+IHNlbGVjdG9yT3B0LmZvbGQoKCkgPT4gRHJhZ2dpbmcuc25hcCh7XG4gICAgICBzZW5zb3I6IGFic29sdXRlKHggLSBzbmFwT2Zmc2V0LCB5IC0gc25hcE9mZnNldCksXG4gICAgICByYW5nZTogU3VnYXJQb3NpdGlvbih3aWR0aCwgaGVpZ2h0KSxcbiAgICAgIG91dHB1dDogYWJzb2x1dGUoT3B0aW9uYWwuc29tZSh4KSwgT3B0aW9uYWwuc29tZSh5KSksXG4gICAgICBleHRyYTogeyB0ZCB9XG4gICAgfSksIHNlbGVjdG9ySGFuZGxlID0+IHtcbiAgICAgIGNvbnN0IHNlbnNvckxlZnQgPSB4IC0gc25hcE9mZnNldDtcbiAgICAgIGNvbnN0IHNlbnNvclRvcCA9IHkgLSBzbmFwT2Zmc2V0O1xuICAgICAgY29uc3Qgc2Vuc29yV2lkdGggPSBzbmFwV2lkdGg7XG4gICAgICBjb25zdCBzZW5zb3JIZWlnaHQgPSBzbmFwV2lkdGg7XG4gICAgICBjb25zdCByZWN0ID0gc2VsZWN0b3JIYW5kbGUuZWxlbWVudC5kb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICByZXR1cm4gRHJhZ2dpbmcuc25hcCh7XG4gICAgICAgIHNlbnNvcjogYWJzb2x1dGUoc2Vuc29yTGVmdCwgc2Vuc29yVG9wKSxcbiAgICAgICAgcmFuZ2U6IFN1Z2FyUG9zaXRpb24oc2Vuc29yV2lkdGgsIHNlbnNvckhlaWdodCksXG4gICAgICAgIG91dHB1dDogYWJzb2x1dGUoT3B0aW9uYWwuc29tZSh4IC0gcmVjdC53aWR0aCAvIDIpLCBPcHRpb25hbC5zb21lKHkgLSByZWN0LmhlaWdodCAvIDIpKSxcbiAgICAgICAgZXh0cmE6IHsgdGQgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0U25hcHNDb25maWcgPSAoZ2V0U25hcFBvaW50cywgY2VsbCwgb25DaGFuZ2UpID0+IHtcbiAgICAgIGNvbnN0IGlzU2FtZUNlbGwgPSAoY2VsbE9wdCwgdGQpID0+IGNlbGxPcHQuZXhpc3RzKGN1cnJlbnRUZCA9PiBlcShjdXJyZW50VGQsIHRkKSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBnZXRTbmFwUG9pbnRzLFxuICAgICAgICBsZWZ0QXR0cjogJ2RhdGEtZHJhZy1sZWZ0JyxcbiAgICAgICAgdG9wQXR0cjogJ2RhdGEtZHJhZy10b3AnLFxuICAgICAgICBvblNlbnNvcjogKGNvbXBvbmVudCwgZXh0cmEpID0+IHtcbiAgICAgICAgICBjb25zdCB0ZCA9IGV4dHJhLnRkO1xuICAgICAgICAgIGlmICghaXNTYW1lQ2VsbChjZWxsLmdldCgpLCB0ZCkpIHtcbiAgICAgICAgICAgIGNlbGwuc2V0KHRkKTtcbiAgICAgICAgICAgIG9uQ2hhbmdlKHRkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG11c3RTbmFwOiB0cnVlXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlU2VsZWN0b3IgPSBzbmFwcyA9PiByZWNvcmQoQnV0dG9uLnNrZXRjaCh7XG4gICAgICBkb206IHtcbiAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgY2xhc3NlczogWyd0b3gtc2VsZWN0b3InXVxuICAgICAgfSxcbiAgICAgIGJ1dHRvbkJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgRHJhZ2dpbmcuY29uZmlnKHtcbiAgICAgICAgICBtb2RlOiAnbW91c2VPclRvdWNoJyxcbiAgICAgICAgICBibG9ja2VyQ2xhc3M6ICdibG9ja2VyJyxcbiAgICAgICAgICBzbmFwc1xuICAgICAgICB9KSxcbiAgICAgICAgVW5zZWxlY3RpbmcuY29uZmlnKHt9KVxuICAgICAgXSksXG4gICAgICBldmVudE9yZGVyOiB7XG4gICAgICAgIG1vdXNlZG93bjogW1xuICAgICAgICAgICdkcmFnZ2luZycsXG4gICAgICAgICAgJ2FsbG95LmJhc2UuYmVoYXZpb3VyJ1xuICAgICAgICBdLFxuICAgICAgICB0b3VjaHN0YXJ0OiBbXG4gICAgICAgICAgJ2RyYWdnaW5nJyxcbiAgICAgICAgICAnYWxsb3kuYmFzZS5iZWhhdmlvdXInXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9KSk7XG4gICAgY29uc3Qgc2V0dXAkNCA9IChlZGl0b3IsIHNpbmspID0+IHtcbiAgICAgIGNvbnN0IHRsVGRzID0gQ2VsbChbXSk7XG4gICAgICBjb25zdCBiclRkcyA9IENlbGwoW10pO1xuICAgICAgY29uc3QgaXNWaXNpYmxlID0gQ2VsbChmYWxzZSk7XG4gICAgICBjb25zdCBzdGFydENlbGwgPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBmaW5pc2hDZWxsID0gdmFsdWUkMigpO1xuICAgICAgY29uc3QgZ2V0VG9wTGVmdFNuYXAgPSB0ZCA9PiB7XG4gICAgICAgIGNvbnN0IGJveCA9IGFic29sdXRlJDIodGQpO1xuICAgICAgICByZXR1cm4gY2FsY1NuYXAobWVtVG9wTGVmdC5nZXRPcHQoc2luayksIHRkLCBib3gueCwgYm94LnksIGJveC53aWR0aCwgYm94LmhlaWdodCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0VG9wTGVmdFNuYXBzID0gKCkgPT4gbWFwJDIodGxUZHMuZ2V0KCksIHRkID0+IGdldFRvcExlZnRTbmFwKHRkKSk7XG4gICAgICBjb25zdCBnZXRCb3R0b21SaWdodFNuYXAgPSB0ZCA9PiB7XG4gICAgICAgIGNvbnN0IGJveCA9IGFic29sdXRlJDIodGQpO1xuICAgICAgICByZXR1cm4gY2FsY1NuYXAobWVtQm90dG9tUmlnaHQuZ2V0T3B0KHNpbmspLCB0ZCwgYm94LnJpZ2h0LCBib3guYm90dG9tLCBib3gud2lkdGgsIGJveC5oZWlnaHQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldEJvdHRvbVJpZ2h0U25hcHMgPSAoKSA9PiBtYXAkMihiclRkcy5nZXQoKSwgdGQgPT4gZ2V0Qm90dG9tUmlnaHRTbmFwKHRkKSk7XG4gICAgICBjb25zdCB0b3BMZWZ0U25hcHMgPSBnZXRTbmFwc0NvbmZpZyhnZXRUb3BMZWZ0U25hcHMsIHN0YXJ0Q2VsbCwgc3RhcnQgPT4ge1xuICAgICAgICBmaW5pc2hDZWxsLmdldCgpLmVhY2goZmluaXNoID0+IHtcbiAgICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ1RhYmxlU2VsZWN0b3JDaGFuZ2UnLCB7XG4gICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgIGZpbmlzaFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYm90dG9tUmlnaHRTbmFwcyA9IGdldFNuYXBzQ29uZmlnKGdldEJvdHRvbVJpZ2h0U25hcHMsIGZpbmlzaENlbGwsIGZpbmlzaCA9PiB7XG4gICAgICAgIHN0YXJ0Q2VsbC5nZXQoKS5lYWNoKHN0YXJ0ID0+IHtcbiAgICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ1RhYmxlU2VsZWN0b3JDaGFuZ2UnLCB7XG4gICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgIGZpbmlzaFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbWVtVG9wTGVmdCA9IGNyZWF0ZVNlbGVjdG9yKHRvcExlZnRTbmFwcyk7XG4gICAgICBjb25zdCBtZW1Cb3R0b21SaWdodCA9IGNyZWF0ZVNlbGVjdG9yKGJvdHRvbVJpZ2h0U25hcHMpO1xuICAgICAgY29uc3QgdG9wTGVmdCA9IGJ1aWxkJDEobWVtVG9wTGVmdC5hc1NwZWMoKSk7XG4gICAgICBjb25zdCBib3R0b21SaWdodCA9IGJ1aWxkJDEobWVtQm90dG9tUmlnaHQuYXNTcGVjKCkpO1xuICAgICAgY29uc3Qgc2hvd09ySGlkZUhhbmRsZSA9IChzZWxlY3RvciwgY2VsbCwgaXNBYm92ZSwgaXNCZWxvdykgPT4ge1xuICAgICAgICBjb25zdCBjZWxsUmVjdCA9IGNlbGwuZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICByZW1vdmUkNihzZWxlY3Rvci5lbGVtZW50LCAnZGlzcGxheScpO1xuICAgICAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IGRlZmF1bHRWaWV3KFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpKS5kb20uaW5uZXJIZWlnaHQ7XG4gICAgICAgIGNvbnN0IGFib3ZlVmlld3BvcnQgPSBpc0Fib3ZlKGNlbGxSZWN0KTtcbiAgICAgICAgY29uc3QgYmVsb3dWaWV3cG9ydCA9IGlzQmVsb3coY2VsbFJlY3QsIHZpZXdwb3J0SGVpZ2h0KTtcbiAgICAgICAgaWYgKGFib3ZlVmlld3BvcnQgfHwgYmVsb3dWaWV3cG9ydCkge1xuICAgICAgICAgIHNldCQ4KHNlbGVjdG9yLmVsZW1lbnQsICdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNuYXBUbyA9IChzZWxlY3RvciwgY2VsbCwgZ2V0U25hcENvbmZpZywgcG9zKSA9PiB7XG4gICAgICAgIGNvbnN0IHNuYXAgPSBnZXRTbmFwQ29uZmlnKGNlbGwpO1xuICAgICAgICBEcmFnZ2luZy5zbmFwVG8oc2VsZWN0b3IsIHNuYXApO1xuICAgICAgICBjb25zdCBpc0Fib3ZlID0gcmVjdCA9PiByZWN0W3Bvc10gPCAwO1xuICAgICAgICBjb25zdCBpc0JlbG93ID0gKHJlY3QsIHZpZXdwb3J0SGVpZ2h0KSA9PiByZWN0W3Bvc10gPiB2aWV3cG9ydEhlaWdodDtcbiAgICAgICAgc2hvd09ySGlkZUhhbmRsZShzZWxlY3RvciwgY2VsbCwgaXNBYm92ZSwgaXNCZWxvdyk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc25hcFRvcExlZnQgPSBjZWxsID0+IHNuYXBUbyh0b3BMZWZ0LCBjZWxsLCBnZXRUb3BMZWZ0U25hcCwgJ3RvcCcpO1xuICAgICAgY29uc3Qgc25hcExhc3RUb3BMZWZ0ID0gKCkgPT4gc3RhcnRDZWxsLmdldCgpLmVhY2goc25hcFRvcExlZnQpO1xuICAgICAgY29uc3Qgc25hcEJvdHRvbVJpZ2h0ID0gY2VsbCA9PiBzbmFwVG8oYm90dG9tUmlnaHQsIGNlbGwsIGdldEJvdHRvbVJpZ2h0U25hcCwgJ2JvdHRvbScpO1xuICAgICAgY29uc3Qgc25hcExhc3RCb3R0b21SaWdodCA9ICgpID0+IGZpbmlzaENlbGwuZ2V0KCkuZWFjaChzbmFwQm90dG9tUmlnaHQpO1xuICAgICAgaWYgKGRldGVjdCQyKCkuZGV2aWNlVHlwZS5pc1RvdWNoKCkpIHtcbiAgICAgICAgZWRpdG9yLm9uKCdUYWJsZVNlbGVjdGlvbkNoYW5nZScsIGUgPT4ge1xuICAgICAgICAgIGlmICghaXNWaXNpYmxlLmdldCgpKSB7XG4gICAgICAgICAgICBhdHRhY2goc2luaywgdG9wTGVmdCk7XG4gICAgICAgICAgICBhdHRhY2goc2luaywgYm90dG9tUmlnaHQpO1xuICAgICAgICAgICAgaXNWaXNpYmxlLnNldCh0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RhcnRDZWxsLnNldChlLnN0YXJ0KTtcbiAgICAgICAgICBmaW5pc2hDZWxsLnNldChlLmZpbmlzaCk7XG4gICAgICAgICAgZS5vdGhlckNlbGxzLmVhY2gob3RoZXJDZWxscyA9PiB7XG4gICAgICAgICAgICB0bFRkcy5zZXQob3RoZXJDZWxscy51cE9yTGVmdENlbGxzKTtcbiAgICAgICAgICAgIGJyVGRzLnNldChvdGhlckNlbGxzLmRvd25PclJpZ2h0Q2VsbHMpO1xuICAgICAgICAgICAgc25hcFRvcExlZnQoZS5zdGFydCk7XG4gICAgICAgICAgICBzbmFwQm90dG9tUmlnaHQoZS5maW5pc2gpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLm9uKCdSZXNpemVFZGl0b3IgUmVzaXplV2luZG93IFNjcm9sbENvbnRlbnQnLCAoKSA9PiB7XG4gICAgICAgICAgc25hcExhc3RUb3BMZWZ0KCk7XG4gICAgICAgICAgc25hcExhc3RCb3R0b21SaWdodCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLm9uKCdUYWJsZVNlbGVjdGlvbkNsZWFyJywgKCkgPT4ge1xuICAgICAgICAgIGlmIChpc1Zpc2libGUuZ2V0KCkpIHtcbiAgICAgICAgICAgIGRldGFjaCh0b3BMZWZ0KTtcbiAgICAgICAgICAgIGRldGFjaChib3R0b21SaWdodCk7XG4gICAgICAgICAgICBpc1Zpc2libGUuc2V0KGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RhcnRDZWxsLmNsZWFyKCk7XG4gICAgICAgICAgZmluaXNoQ2VsbC5jbGVhcigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIExvZ28gPSBcIjxzdmcgd2lkdGg9XFxcIjUwcHhcXFwiIGhlaWdodD1cXFwiMTZweFxcXCIgdmlld0JveD1cXFwiMCAwIDUwIDE2XFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPlxcbiAgPHBhdGggZmlsbC1ydWxlPVxcXCJldmVub2RkXFxcIiBjbGlwLXJ1bGU9XFxcImV2ZW5vZGRcXFwiIGQ9XFxcIk0xMC4xNDMgMGMyLjYwOC4wMTUgNS4xODYgMi4xNzggNS4xODYgNS4zMzEgMCAwIC4wNzcgMy44MTItLjA4NCA0Ljg3LS4zNjEgMi40MS0yLjE2NCA0LjA3NC00LjY1IDQuNDk2LTEuNDUzLjI4NC0yLjUyMy40OS0zLjIxMi42MjMtLjM3My4wNzEtLjYzNC4xMjItLjc4NS4xNTItLjE4NC4wMzgtLjk5Ny4xNDUtMS4zNS4xNDUtMi43MzIgMC01LjIxLTIuMDQtNS4yNDgtNS4zMyAwIDAgMC0zLjUxNC4wMy00LjQ0Mi4wOTMtMi40IDEuNzU4LTQuMzQyIDQuOTI2LTQuOTYzIDAgMCAzLjg3NS0uNzUyIDQuMDM2LS43ODIuMzY4LS4wNy43NzUtLjEgMS4xNS0uMVptMS44MjYgMi44TDUuODMgMy45ODl2Mi4zOTNsLTIuNDU1LjQ3NXY1Ljk2OGw2LjEzNy0xLjE4OVY5LjI0M2wyLjQ1Ni0uNDc2VjIuOFpNNS44MyA2LjM4MmwzLjY4Mi0uNzEzdjMuNTc0bC0zLjY4Mi43MTNWNi4zODJabTI3LjE3My0xLjY0LS4wODQtMS4wNjZoLTIuMjI2djkuMTMyaDIuNDU2VjcuNzQzYy0uMDA4LTEuMTUxLjk5OC0yLjA2NCAyLjE0OS0yLjA3MiAxLjE1LS4wMDggMS45ODcuOTIgMS45OTUgMi4wNzJ2NS4wNjVoMi40NTVWNy4zNTljLS4wMTUtMi4xOC0xLjY1Ny0zLjkyOS0zLjgzNy0zLjkxM2EzLjk5MyAzLjk5MyAwIDAgMC0yLjkwOCAxLjI5NlptLTYuMy00LjI2NkwyOS4xNiAwdjIuMzg3bC0yLjQ1Ni40NzVWLjQ3NlptMCAzLjJ2OS4xMzJoMi40NTZWMy42NzZoLTIuNDU2Wm0xOC4xNzkgMTEuNzg3TDQ5LjExIDMuNjc2SDQ2LjU4bC0xLjYxMiA0LjUyNy0uNDYgMS4zODItLjM4NC0xLjM4Mi0xLjYxMS00LjUyN0gzOS45OGwzLjMgOS4xMzJMNDIuMTUgMTZsMi43MzItLjUzN1pNMjIuODY3IDkuNzM4YzAgLjc1Mi41NjggMS4wNzUuOTIxIDEuMDc1LjM1MyAwIC42NjgtLjA0Ny45OTgtLjE1NGwuNTM3IDEuNzY1Yy0uMjMuMTU0LS45Mi41MzctMi4yMjUuNTM3LTEuMzA1IDAtMi42NTUtLjk5Ny0yLjY4Ni0yLjY4NmExMzYuODc3IDEzNi44NzcgMCAwIDEgMC00LjM3NEgxOC44VjMuNjc2aDEuNjEydi0xLjk4bDIuNDU1LS40NzZ2Mi40NTZoMi4zMDJWNS45aC0yLjMwMnYzLjgzN1pcXFwiLz5cXG48L3N2Zz5cXG5cIjtcblxuICAgIGNvbnN0IGlzSGlkZGVuID0gZWxtID0+IGVsbS5ub2RlTmFtZSA9PT0gJ0JSJyB8fCAhIWVsbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWNlLWJvZ3VzJykgfHwgZWxtLmdldEF0dHJpYnV0ZSgnZGF0YS1tY2UtdHlwZScpID09PSAnYm9va21hcmsnO1xuICAgIGNvbnN0IHJlbmRlckVsZW1lbnRQYXRoID0gKGVkaXRvciwgc2V0dGluZ3MsIHByb3ZpZGVyc0JhY2tzdGFnZSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgZGVsaW1pdGVyID0gKF9hID0gc2V0dGluZ3MuZGVsaW1pdGVyKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnXFx1MjAzQSc7XG4gICAgICBjb25zdCByZW5kZXJFbGVtZW50ID0gKG5hbWUsIGVsZW1lbnQsIGluZGV4KSA9PiBCdXR0b24uc2tldGNoKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1zdGF0dXNiYXJfX3BhdGgtaXRlbSddLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICdkYXRhLWluZGV4JzogaW5kZXgsXG4gICAgICAgICAgICAnYXJpYS1sZXZlbCc6IGluZGV4ICsgMVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW3RleHQkMihuYW1lKV0sXG4gICAgICAgIGFjdGlvbjogX2J0biA9PiB7XG4gICAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3QoZWxlbWVudCk7XG4gICAgICAgICAgZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbkJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBEaXNhYmxpbmdDb25maWdzLmJ1dHRvbihwcm92aWRlcnNCYWNrc3RhZ2UuaXNEaXNhYmxlZCksXG4gICAgICAgICAgcmVjZWl2aW5nQ29uZmlnKClcbiAgICAgICAgXSlcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVuZGVyRGl2aWRlciA9ICgpID0+ICh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtc3RhdHVzYmFyX19wYXRoLWRpdmlkZXInXSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7ICdhcmlhLWhpZGRlbic6IHRydWUgfVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbdGV4dCQyKGAgJHsgZGVsaW1pdGVyIH0gYCldXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlbmRlclBhdGhEYXRhID0gZGF0YSA9PiBmb2xkbChkYXRhLCAoYWNjLCBwYXRoLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gcmVuZGVyRWxlbWVudChwYXRoLm5hbWUsIHBhdGguZWxlbWVudCwgaW5kZXgpO1xuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChbZWxlbWVudF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBhY2MuY29uY2F0KFtcbiAgICAgICAgICAgIHJlbmRlckRpdmlkZXIoKSxcbiAgICAgICAgICAgIGVsZW1lbnRcbiAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgfSwgW10pO1xuICAgICAgY29uc3QgdXBkYXRlUGF0aCA9IHBhcmVudHMgPT4ge1xuICAgICAgICBjb25zdCBuZXdQYXRoID0gW107XG4gICAgICAgIGxldCBpID0gcGFyZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50ID0gcGFyZW50c1tpXTtcbiAgICAgICAgICBpZiAocGFyZW50Lm5vZGVUeXBlID09PSAxICYmICFpc0hpZGRlbihwYXJlbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gZmlyZVJlc29sdmVOYW1lKGVkaXRvciwgcGFyZW50KTtcbiAgICAgICAgICAgIGlmICghYXJncy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgICAgICBuZXdQYXRoLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IGFyZ3MubmFtZSxcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBwYXJlbnRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYXJncy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3UGF0aDtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXN0YXR1c2Jhcl9fcGF0aCddLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ25hdmlnYXRpb24nIH1cbiAgICAgICAgfSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgICAgbW9kZTogJ2Zsb3cnLFxuICAgICAgICAgICAgc2VsZWN0b3I6ICdkaXZbcm9sZT1idXR0b25dJ1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIERpc2FibGluZy5jb25maWcoeyBkaXNhYmxlZDogcHJvdmlkZXJzQmFja3N0YWdlLmlzRGlzYWJsZWQgfSksXG4gICAgICAgICAgcmVjZWl2aW5nQ29uZmlnKCksXG4gICAgICAgICAgVGFic3RvcHBpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICBSZXBsYWNpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICBjb25maWcoJ2VsZW1lbnRQYXRoRXZlbnRzJywgW3J1bk9uQXR0YWNoZWQoKGNvbXAsIF9lKSA9PiB7XG4gICAgICAgICAgICAgIGVkaXRvci5zaG9ydGN1dHMuYWRkKCdhbHQrRjExJywgJ2ZvY3VzIHN0YXR1c2JhciBlbGVtZW50cGF0aCcsICgpID0+IEtleWluZy5mb2N1c0luKGNvbXApKTtcbiAgICAgICAgICAgICAgZWRpdG9yLm9uKCdOb2RlQ2hhbmdlJywgZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UGF0aCA9IHVwZGF0ZVBhdGgoZS5wYXJlbnRzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDaGlsZHJlbiA9IG5ld1BhdGgubGVuZ3RoID4gMCA/IHJlbmRlclBhdGhEYXRhKG5ld1BhdGgpIDogW107XG4gICAgICAgICAgICAgICAgUmVwbGFjaW5nLnNldChjb21wLCBuZXdDaGlsZHJlbik7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSldKVxuICAgICAgICBdKSxcbiAgICAgICAgY29tcG9uZW50czogW11cbiAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBSZXNpemVUeXBlcztcbiAgICAoZnVuY3Rpb24gKFJlc2l6ZVR5cGVzKSB7XG4gICAgICBSZXNpemVUeXBlc1tSZXNpemVUeXBlc1snTm9uZSddID0gMF0gPSAnTm9uZSc7XG4gICAgICBSZXNpemVUeXBlc1tSZXNpemVUeXBlc1snQm90aCddID0gMV0gPSAnQm90aCc7XG4gICAgICBSZXNpemVUeXBlc1tSZXNpemVUeXBlc1snVmVydGljYWwnXSA9IDJdID0gJ1ZlcnRpY2FsJztcbiAgICB9KFJlc2l6ZVR5cGVzIHx8IChSZXNpemVUeXBlcyA9IHt9KSkpO1xuICAgIGNvbnN0IGdldERpbWVuc2lvbnMgPSAoZWRpdG9yLCBkZWx0YXMsIHJlc2l6ZVR5cGUsIG9yaWdpbmFsSGVpZ2h0LCBvcmlnaW5hbFdpZHRoKSA9PiB7XG4gICAgICBjb25zdCBkaW1lbnNpb25zID0geyBoZWlnaHQ6IGNhbGNDYXBwZWRTaXplKG9yaWdpbmFsSGVpZ2h0ICsgZGVsdGFzLnRvcCwgZ2V0TWluSGVpZ2h0T3B0aW9uKGVkaXRvciksIGdldE1heEhlaWdodE9wdGlvbihlZGl0b3IpKSB9O1xuICAgICAgaWYgKHJlc2l6ZVR5cGUgPT09IFJlc2l6ZVR5cGVzLkJvdGgpIHtcbiAgICAgICAgZGltZW5zaW9ucy53aWR0aCA9IGNhbGNDYXBwZWRTaXplKG9yaWdpbmFsV2lkdGggKyBkZWx0YXMubGVmdCwgZ2V0TWluV2lkdGhPcHRpb24oZWRpdG9yKSwgZ2V0TWF4V2lkdGhPcHRpb24oZWRpdG9yKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGltZW5zaW9ucztcbiAgICB9O1xuICAgIGNvbnN0IHJlc2l6ZSA9IChlZGl0b3IsIGRlbHRhcywgcmVzaXplVHlwZSkgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldENvbnRhaW5lcigpKTtcbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSBnZXREaW1lbnNpb25zKGVkaXRvciwgZGVsdGFzLCByZXNpemVUeXBlLCBnZXQkZChjb250YWluZXIpLCBnZXQkYyhjb250YWluZXIpKTtcbiAgICAgIGVhY2goZGltZW5zaW9ucywgKHZhbCwgZGltKSA9PiB7XG4gICAgICAgIGlmIChpc051bWJlcih2YWwpKSB7XG4gICAgICAgICAgc2V0JDgoY29udGFpbmVyLCBkaW0sIG51bVRvUHgodmFsKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZmlyZVJlc2l6ZUVkaXRvcihlZGl0b3IpO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRSZXNpemVUeXBlID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHJlc2l6ZSA9IGdldFJlc2l6ZShlZGl0b3IpO1xuICAgICAgaWYgKHJlc2l6ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIFJlc2l6ZVR5cGVzLk5vbmU7XG4gICAgICB9IGVsc2UgaWYgKHJlc2l6ZSA9PT0gJ2JvdGgnKSB7XG4gICAgICAgIHJldHVybiBSZXNpemVUeXBlcy5Cb3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFJlc2l6ZVR5cGVzLlZlcnRpY2FsO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qga2V5Ym9hcmRIYW5kbGVyID0gKGVkaXRvciwgcmVzaXplVHlwZSwgeCwgeSkgPT4ge1xuICAgICAgY29uc3Qgc2NhbGUgPSAyMDtcbiAgICAgIGNvbnN0IGRlbHRhID0gU3VnYXJQb3NpdGlvbih4ICogc2NhbGUsIHkgKiBzY2FsZSk7XG4gICAgICByZXNpemUoZWRpdG9yLCBkZWx0YSwgcmVzaXplVHlwZSk7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlclJlc2l6ZUhhbmRsZXIgPSAoZWRpdG9yLCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IHJlc2l6ZVR5cGUgPSBnZXRSZXNpemVUeXBlKGVkaXRvcik7XG4gICAgICBpZiAocmVzaXplVHlwZSA9PT0gUmVzaXplVHlwZXMuTm9uZSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzaXplTGFiZWwgPSByZXNpemVUeXBlID09PSBSZXNpemVUeXBlcy5Cb3RoID8gJ1ByZXNzIHRoZSBhcnJvdyBrZXlzIHRvIHJlc2l6ZSB0aGUgZWRpdG9yLicgOiAnUHJlc3MgdGhlIFVwIGFuZCBEb3duIGFycm93IGtleXMgdG8gcmVzaXplIHRoZSBlZGl0b3IuJztcbiAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHJlbmRlciQzKCdyZXNpemUtaGFuZGxlJywge1xuICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICBjbGFzc2VzOiBbJ3RveC1zdGF0dXNiYXJfX3Jlc2l6ZS1oYW5kbGUnXSxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICd0aXRsZSc6IHByb3ZpZGVyc0JhY2tzdGFnZS50cmFuc2xhdGUoJ1Jlc2l6ZScpLFxuICAgICAgICAgICdhcmlhLWxhYmVsJzogcHJvdmlkZXJzQmFja3N0YWdlLnRyYW5zbGF0ZShyZXNpemVMYWJlbClcbiAgICAgICAgfSxcbiAgICAgICAgYmVoYXZpb3VyczogW1xuICAgICAgICAgIERyYWdnaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBtb2RlOiAnbW91c2UnLFxuICAgICAgICAgICAgcmVwb3NpdGlvblRhcmdldDogZmFsc2UsXG4gICAgICAgICAgICBvbkRyYWc6IChfY29tcCwgX3RhcmdldCwgZGVsdGEpID0+IHJlc2l6ZShlZGl0b3IsIGRlbHRhLCByZXNpemVUeXBlKSxcbiAgICAgICAgICAgIGJsb2NrZXJDbGFzczogJ3RveC1ibG9ja2VyJ1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgICAgbW9kZTogJ3NwZWNpYWwnLFxuICAgICAgICAgICAgb25MZWZ0OiAoKSA9PiBrZXlib2FyZEhhbmRsZXIoZWRpdG9yLCByZXNpemVUeXBlLCAtMSwgMCksXG4gICAgICAgICAgICBvblJpZ2h0OiAoKSA9PiBrZXlib2FyZEhhbmRsZXIoZWRpdG9yLCByZXNpemVUeXBlLCAxLCAwKSxcbiAgICAgICAgICAgIG9uVXA6ICgpID0+IGtleWJvYXJkSGFuZGxlcihlZGl0b3IsIHJlc2l6ZVR5cGUsIDAsIC0xKSxcbiAgICAgICAgICAgIG9uRG93bjogKCkgPT4ga2V5Ym9hcmRIYW5kbGVyKGVkaXRvciwgcmVzaXplVHlwZSwgMCwgMSlcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBUYWJzdG9wcGluZy5jb25maWcoe30pLFxuICAgICAgICAgIEZvY3VzaW5nLmNvbmZpZyh7fSlcbiAgICAgICAgXVxuICAgICAgfSwgcHJvdmlkZXJzQmFja3N0YWdlLmljb25zKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlcldvcmRDb3VudCA9IChlZGl0b3IsIHByb3ZpZGVyc0JhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgcmVwbGFjZUNvdW50VGV4dCA9IChjb21wLCBjb3VudCwgbW9kZSkgPT4gUmVwbGFjaW5nLnNldChjb21wLCBbdGV4dCQyKHByb3ZpZGVyc0JhY2tzdGFnZS50cmFuc2xhdGUoW1xuICAgICAgICAgICd7MH0gJyArIG1vZGUsXG4gICAgICAgICAgY291bnRbbW9kZV1cbiAgICAgICAgXSkpXSk7XG4gICAgICByZXR1cm4gQnV0dG9uLnNrZXRjaCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2J1dHRvbicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtc3RhdHVzYmFyX193b3JkY291bnQnXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXSxcbiAgICAgICAgYnV0dG9uQmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIERpc2FibGluZ0NvbmZpZ3MuYnV0dG9uKHByb3ZpZGVyc0JhY2tzdGFnZS5pc0Rpc2FibGVkKSxcbiAgICAgICAgICByZWNlaXZpbmdDb25maWcoKSxcbiAgICAgICAgICBUYWJzdG9wcGluZy5jb25maWcoe30pLFxuICAgICAgICAgIFJlcGxhY2luZy5jb25maWcoe30pLFxuICAgICAgICAgIFJlcHJlc2VudGluZy5jb25maWcoe1xuICAgICAgICAgICAgc3RvcmU6IHtcbiAgICAgICAgICAgICAgbW9kZTogJ21lbW9yeScsXG4gICAgICAgICAgICAgIGluaXRpYWxWYWx1ZToge1xuICAgICAgICAgICAgICAgIG1vZGU6ICd3b3JkcycsXG4gICAgICAgICAgICAgICAgY291bnQ6IHtcbiAgICAgICAgICAgICAgICAgIHdvcmRzOiAwLFxuICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyczogMFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNvbmZpZygnd29yZGNvdW50LWV2ZW50cycsIFtcbiAgICAgICAgICAgIHJ1bk9uRXhlY3V0ZSQxKGNvbXAgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsID0gUmVwcmVzZW50aW5nLmdldFZhbHVlKGNvbXApO1xuICAgICAgICAgICAgICBjb25zdCBuZXdNb2RlID0gY3VycmVudFZhbC5tb2RlID09PSAnd29yZHMnID8gJ2NoYXJhY3RlcnMnIDogJ3dvcmRzJztcbiAgICAgICAgICAgICAgUmVwcmVzZW50aW5nLnNldFZhbHVlKGNvbXAsIHtcbiAgICAgICAgICAgICAgICBtb2RlOiBuZXdNb2RlLFxuICAgICAgICAgICAgICAgIGNvdW50OiBjdXJyZW50VmFsLmNvdW50XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXBsYWNlQ291bnRUZXh0KGNvbXAsIGN1cnJlbnRWYWwuY291bnQsIG5ld01vZGUpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBydW5PbkF0dGFjaGVkKGNvbXAgPT4ge1xuICAgICAgICAgICAgICBlZGl0b3Iub24oJ3dvcmRDb3VudFVwZGF0ZScsIGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHttb2RlfSA9IFJlcHJlc2VudGluZy5nZXRWYWx1ZShjb21wKTtcbiAgICAgICAgICAgICAgICBSZXByZXNlbnRpbmcuc2V0VmFsdWUoY29tcCwge1xuICAgICAgICAgICAgICAgICAgbW9kZSxcbiAgICAgICAgICAgICAgICAgIGNvdW50OiBlLndvcmRDb3VudFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJlcGxhY2VDb3VudFRleHQoY29tcCwgZS53b3JkQ291bnQsIG1vZGUpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSlcbiAgICAgICAgXSksXG4gICAgICAgIGV2ZW50T3JkZXI6IHtcbiAgICAgICAgICBbZXhlY3V0ZSQ1KCldOiBbXG4gICAgICAgICAgICAnZGlzYWJsaW5nJyxcbiAgICAgICAgICAgICdhbGxveS5iYXNlLmJlaGF2aW91cicsXG4gICAgICAgICAgICAnd29yZGNvdW50LWV2ZW50cydcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJTdGF0dXNiYXIgPSAoZWRpdG9yLCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IHJlbmRlckJyYW5kaW5nID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgdGFnOiAnc3BhbicsXG4gICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1zdGF0dXNiYXJfX2JyYW5kaW5nJ11cbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbXBvbmVudHM6IFt7XG4gICAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICAgIHRhZzogJ2EnLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICdocmVmJzogJ2h0dHBzOi8vd3d3LnRpbnkuY2xvdWQvcG93ZXJlZC1ieS10aW55P3V0bV9jYW1wYWlnbj1lZGl0b3JfcmVmZXJyYWwmdXRtX21lZGl1bT1wb3dlcmVkYnkmdXRtX3NvdXJjZT10aW55bWNlJnV0bV9jb250ZW50PXY2JyxcbiAgICAgICAgICAgICAgICAgICdyZWwnOiAnbm9vcGVuZXInLFxuICAgICAgICAgICAgICAgICAgJ3RhcmdldCc6ICdfYmxhbmsnLFxuICAgICAgICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiBnbG9iYWwkOC50cmFuc2xhdGUoW1xuICAgICAgICAgICAgICAgICAgICAnUG93ZXJlZCBieSB7MH0nLFxuICAgICAgICAgICAgICAgICAgICAnVGlueSdcbiAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbm5lckh0bWw6IExvZ28udHJpbSgpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtGb2N1c2luZy5jb25maWcoe30pXSlcbiAgICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVuZGVySGVscEFjY2Vzc2liaWxpdHkgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNob3J0Y3V0VGV4dCA9IGNvbnZlcnRUZXh0KCdBbHQrMCcpO1xuICAgICAgICBjb25zdCB0ZXh0ID0gYFByZXNzIHswfSBmb3IgaGVscGA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgY2xhc3NlczogWyd0b3gtc3RhdHVzYmFyX19oZWxwLXRleHQnXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcG9uZW50czogW3RleHQkMihnbG9iYWwkOC50cmFuc2xhdGUoW1xuICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICBzaG9ydGN1dFRleHRcbiAgICAgICAgICAgIF0pKV1cbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZW5kZXJSaWdodENvbnRhaW5lciA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IFtdO1xuICAgICAgICBpZiAoZWRpdG9yLmhhc1BsdWdpbignd29yZGNvdW50JykpIHtcbiAgICAgICAgICBjb21wb25lbnRzLnB1c2gocmVuZGVyV29yZENvdW50KGVkaXRvciwgcHJvdmlkZXJzQmFja3N0YWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZUJyYW5kaW5nKGVkaXRvcikpIHtcbiAgICAgICAgICBjb21wb25lbnRzLnB1c2gocmVuZGVyQnJhbmRpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1zdGF0dXNiYXJfX3JpZ2h0LWNvbnRhaW5lciddXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21wb25lbnRzXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0VGV4dENvbXBvbmVudHMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBbXTtcbiAgICAgICAgY29uc3Qgc2hvdWxkUmVuZGVySGVscCA9IHVzZUhlbHBBY2Nlc3NpYmlsaXR5KGVkaXRvcik7XG4gICAgICAgIGNvbnN0IHNob3VsZFJlbmRlckVsZW1lbnRQYXRoID0gdXNlRWxlbWVudFBhdGgoZWRpdG9yKTtcbiAgICAgICAgY29uc3Qgc2hvdWxkUmVuZGVyUmlnaHRDb250YWluZXIgPSB1c2VCcmFuZGluZyhlZGl0b3IpIHx8IGVkaXRvci5oYXNQbHVnaW4oJ3dvcmRjb3VudCcpO1xuICAgICAgICBjb25zdCBnZXRUZXh0Q29tcG9uZW50Q2xhc3NlcyA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBmbGV4U3RhcnQgPSAndG94LXN0YXR1c2Jhcl9fdGV4dC1jb250YWluZXItLWZsZXgtc3RhcnQnO1xuICAgICAgICAgIGNvbnN0IGZsZXhFbmQgPSAndG94LXN0YXR1c2Jhcl9fdGV4dC1jb250YWluZXItLWZsZXgtZW5kJztcbiAgICAgICAgICBjb25zdCBzcGFjZUFyb3VuZCA9ICd0b3gtc3RhdHVzYmFyX190ZXh0LWNvbnRhaW5lci0tc3BhY2UtYXJvdW5kJztcbiAgICAgICAgICBpZiAoc2hvdWxkUmVuZGVySGVscCkge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyM0NvbHVtbnMgPSAndG94LXN0YXR1c2Jhcl9fdGV4dC1jb250YWluZXItMy1jb2xzJztcbiAgICAgICAgICAgIGlmICghc2hvdWxkUmVuZGVyUmlnaHRDb250YWluZXIgJiYgIXNob3VsZFJlbmRlckVsZW1lbnRQYXRoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgY29udGFpbmVyM0NvbHVtbnMsXG4gICAgICAgICAgICAgICAgc3BhY2VBcm91bmRcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaG91bGRSZW5kZXJSaWdodENvbnRhaW5lciAmJiAhc2hvdWxkUmVuZGVyRWxlbWVudFBhdGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBjb250YWluZXIzQ29sdW1ucyxcbiAgICAgICAgICAgICAgICBmbGV4RW5kXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICBjb250YWluZXIzQ29sdW1ucyxcbiAgICAgICAgICAgICAgZmxleFN0YXJ0XG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW3Nob3VsZFJlbmRlclJpZ2h0Q29udGFpbmVyICYmICFzaG91bGRSZW5kZXJFbGVtZW50UGF0aCA/IGZsZXhFbmQgOiBmbGV4U3RhcnRdO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoc2hvdWxkUmVuZGVyRWxlbWVudFBhdGgpIHtcbiAgICAgICAgICBjb21wb25lbnRzLnB1c2gocmVuZGVyRWxlbWVudFBhdGgoZWRpdG9yLCB7fSwgcHJvdmlkZXJzQmFja3N0YWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3VsZFJlbmRlckhlbHApIHtcbiAgICAgICAgICBjb21wb25lbnRzLnB1c2gocmVuZGVySGVscEFjY2Vzc2liaWxpdHkoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3VsZFJlbmRlclJpZ2h0Q29udGFpbmVyKSB7XG4gICAgICAgICAgY29tcG9uZW50cy5wdXNoKHJlbmRlclJpZ2h0Q29udGFpbmVyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wb25lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgICAgICBjbGFzc2VzOiBbXG4gICAgICAgICAgICAgICAgICAndG94LXN0YXR1c2Jhcl9fdGV4dC1jb250YWluZXInLFxuICAgICAgICAgICAgICAgICAgLi4uZ2V0VGV4dENvbXBvbmVudENsYXNzZXMoKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgY29tcG9uZW50c1xuICAgICAgICAgICAgfV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldENvbXBvbmVudHMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRUZXh0Q29tcG9uZW50cygpO1xuICAgICAgICBjb25zdCByZXNpemVIYW5kbGVyID0gcmVuZGVyUmVzaXplSGFuZGxlcihlZGl0b3IsIHByb3ZpZGVyc0JhY2tzdGFnZSk7XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzLmNvbmNhdChyZXNpemVIYW5kbGVyLnRvQXJyYXkoKSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1zdGF0dXNiYXInXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBnZXRDb21wb25lbnRzKClcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGdldExhenlNb3RoZXJzaGlwID0gKGxhYmVsLCBzaW5nbGV0b24pID0+IHNpbmdsZXRvbi5nZXQoKS5nZXRPckRpZShgVUkgZm9yICR7IGxhYmVsIH0gaGFzIG5vdCBiZWVuIHJlbmRlcmVkYCk7XG4gICAgY29uc3Qgc2V0dXAkMyA9IChlZGl0b3IsIHNldHVwRm9yVGhlbWUpID0+IHtcbiAgICAgIGNvbnN0IGlzSW5saW5lID0gZWRpdG9yLmlubGluZTtcbiAgICAgIGNvbnN0IG1vZGUgPSBpc0lubGluZSA/IElubGluZSA6IElmcmFtZTtcbiAgICAgIGNvbnN0IGhlYWRlciA9IGlzU3RpY2t5VG9vbGJhcihlZGl0b3IpID8gU3RpY2t5SGVhZGVyIDogU3RhdGljSGVhZGVyO1xuICAgICAgY29uc3QgbGF6eVVpUmVmcyA9IExhenlVaVJlZmVyZW5jZXMoKTtcbiAgICAgIGNvbnN0IGxhenlNb3RoZXJzaGlwID0gdmFsdWUkMigpO1xuICAgICAgY29uc3QgbGF6eURpYWxvZ01vdGhlcnNoaXAgPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBsYXp5UG9wdXBNb3RoZXJzaGlwID0gdmFsdWUkMigpO1xuICAgICAgY29uc3QgcGxhdGZvcm0gPSBkZXRlY3QkMigpO1xuICAgICAgY29uc3QgaXNUb3VjaCA9IHBsYXRmb3JtLmRldmljZVR5cGUuaXNUb3VjaCgpO1xuICAgICAgY29uc3QgdG91Y2hQbGF0Zm9ybUNsYXNzID0gJ3RveC1wbGF0Zm9ybS10b3VjaCc7XG4gICAgICBjb25zdCBkZXZpY2VDbGFzc2VzID0gaXNUb3VjaCA/IFt0b3VjaFBsYXRmb3JtQ2xhc3NdIDogW107XG4gICAgICBjb25zdCBpc1Rvb2xiYXJCb3R0b20gPSBpc1Rvb2xiYXJMb2NhdGlvbkJvdHRvbShlZGl0b3IpO1xuICAgICAgY29uc3QgdG9vbGJhck1vZGUgPSBnZXRUb29sYmFyTW9kZShlZGl0b3IpO1xuICAgICAgY29uc3QgbWVtQW5jaG9yQmFyID0gcmVjb3JkKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1hbmNob3JiYXInXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG1lbUJvdHRvbUFuY2hvckJhciA9IHJlY29yZCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtYm90dG9tLWFuY2hvcmJhciddXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgbGF6eUhlYWRlciA9ICgpID0+IGxhenlVaVJlZnMubWFpblVpLmdldCgpLm1hcCh1aSA9PiB1aS5vdXRlckNvbnRhaW5lcikuYmluZChPdXRlckNvbnRhaW5lci5nZXRIZWFkZXIpO1xuICAgICAgY29uc3QgbGF6eURpYWxvZ1NpbmtSZXN1bHQgPSAoKSA9PiBSZXN1bHQuZnJvbU9wdGlvbihsYXp5VWlSZWZzLmRpYWxvZ1VpLmdldCgpLm1hcCh1aSA9PiB1aS5zaW5rKSwgJ1VJIGhhcyBub3QgYmVlbiByZW5kZXJlZCcpO1xuICAgICAgY29uc3QgbGF6eVBvcHVwU2lua1Jlc3VsdCA9ICgpID0+IFJlc3VsdC5mcm9tT3B0aW9uKGxhenlVaVJlZnMucG9wdXBVaS5nZXQoKS5tYXAodWkgPT4gdWkuc2luayksICcocG9wdXApIFVJIGhhcyBub3QgYmVlbiByZW5kZXJlZCcpO1xuICAgICAgY29uc3QgbGF6eUFuY2hvckJhciA9IGxhenlVaVJlZnMubGF6eUdldEluT3V0ZXJPckRpZSgnYW5jaG9yIGJhcicsIG1lbUFuY2hvckJhci5nZXRPcHQpO1xuICAgICAgY29uc3QgbGF6eUJvdHRvbUFuY2hvckJhciA9IGxhenlVaVJlZnMubGF6eUdldEluT3V0ZXJPckRpZSgnYm90dG9tIGFuY2hvciBiYXInLCBtZW1Cb3R0b21BbmNob3JCYXIuZ2V0T3B0KTtcbiAgICAgIGNvbnN0IGxhenlUb29sYmFyID0gbGF6eVVpUmVmcy5sYXp5R2V0SW5PdXRlck9yRGllKCd0b29sYmFyJywgT3V0ZXJDb250YWluZXIuZ2V0VG9vbGJhcik7XG4gICAgICBjb25zdCBsYXp5VGhyb2JiZXIgPSBsYXp5VWlSZWZzLmxhenlHZXRJbk91dGVyT3JEaWUoJ3Rocm9iYmVyJywgT3V0ZXJDb250YWluZXIuZ2V0VGhyb2JiZXIpO1xuICAgICAgY29uc3QgYmFja3N0YWdlcyA9IGluaXQkNih7XG4gICAgICAgIHBvcHVwOiBsYXp5UG9wdXBTaW5rUmVzdWx0LFxuICAgICAgICBkaWFsb2c6IGxhenlEaWFsb2dTaW5rUmVzdWx0XG4gICAgICB9LCBlZGl0b3IsIGxhenlBbmNob3JCYXIsIGxhenlCb3R0b21BbmNob3JCYXIpO1xuICAgICAgY29uc3QgbWFrZUhlYWRlclBhcnQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZlcnRpY2FsRGlyQXR0cmlidXRlcyA9IHsgYXR0cmlidXRlczogeyBbQXR0cmlidXRlXTogaXNUb29sYmFyQm90dG9tID8gQXR0cmlidXRlVmFsdWUuQm90dG9tVG9Ub3AgOiBBdHRyaWJ1dGVWYWx1ZS5Ub3BUb0JvdHRvbSB9IH07XG4gICAgICAgIGNvbnN0IHBhcnRNZW51YmFyID0gT3V0ZXJDb250YWluZXIucGFydHMubWVudWJhcih7XG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgY2xhc3NlczogWyd0b3gtbWVudWJhciddXG4gICAgICAgICAgfSxcbiAgICAgICAgICBiYWNrc3RhZ2U6IGJhY2tzdGFnZXMucG9wdXAsXG4gICAgICAgICAgb25Fc2NhcGU6ICgpID0+IHtcbiAgICAgICAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBhcnRUb29sYmFyID0gT3V0ZXJDb250YWluZXIucGFydHMudG9vbGJhcih7XG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgY2xhc3NlczogWyd0b3gtdG9vbGJhciddXG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZXRTaW5rOiBiYWNrc3RhZ2VzLnBvcHVwLnNoYXJlZC5nZXRTaW5rLFxuICAgICAgICAgIHByb3ZpZGVyczogYmFja3N0YWdlcy5wb3B1cC5zaGFyZWQucHJvdmlkZXJzLFxuICAgICAgICAgIG9uRXNjYXBlOiAoKSA9PiB7XG4gICAgICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uVG9vbGJhclRvZ2dsZWQ6IHN0YXRlID0+IHtcbiAgICAgICAgICAgIGZpcmVUb2dnbGVUb29sYmFyRHJhd2VyKGVkaXRvciwgc3RhdGUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdHlwZTogdG9vbGJhck1vZGUsXG4gICAgICAgICAgbGF6eVRvb2xiYXIsXG4gICAgICAgICAgbGF6eUhlYWRlcjogKCkgPT4gbGF6eUhlYWRlcigpLmdldE9yRGllKCdDb3VsZCBub3QgZmluZCBoZWFkZXIgZWxlbWVudCcpLFxuICAgICAgICAgIC4uLnZlcnRpY2FsRGlyQXR0cmlidXRlc1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGFydE11bHRpcGxlVG9vbGJhciA9IE91dGVyQ29udGFpbmVyLnBhcnRzWydtdWx0aXBsZS10b29sYmFyJ10oe1xuICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LXRvb2xiYXItb3ZlcmxvcmQnXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJvdmlkZXJzOiBiYWNrc3RhZ2VzLnBvcHVwLnNoYXJlZC5wcm92aWRlcnMsXG4gICAgICAgICAgb25Fc2NhcGU6ICgpID0+IHtcbiAgICAgICAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdHlwZTogdG9vbGJhck1vZGVcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGhhc011bHRpcGxlVG9vbGJhciA9IGlzTXVsdGlwbGVUb29sYmFycyhlZGl0b3IpO1xuICAgICAgICBjb25zdCBoYXNUb29sYmFyID0gaXNUb29sYmFyRW5hYmxlZChlZGl0b3IpO1xuICAgICAgICBjb25zdCBoYXNNZW51YmFyID0gaXNNZW51YmFyRW5hYmxlZChlZGl0b3IpO1xuICAgICAgICBjb25zdCBzaG91bGRIYXZlUHJvbW90aW9uID0gcHJvbW90aW9uRW5hYmxlZChlZGl0b3IpO1xuICAgICAgICBjb25zdCBwYXJ0UHJvbW90aW9uID0gbWFrZVByb21vdGlvbigpO1xuICAgICAgICBjb25zdCBoYXNBbnlDb250ZW50cyA9IGhhc011bHRpcGxlVG9vbGJhciB8fCBoYXNUb29sYmFyIHx8IGhhc01lbnViYXI7XG4gICAgICAgIGNvbnN0IGdldFBhcnRUb29sYmFyID0gKCkgPT4ge1xuICAgICAgICAgIGlmIChoYXNNdWx0aXBsZVRvb2xiYXIpIHtcbiAgICAgICAgICAgIHJldHVybiBbcGFydE11bHRpcGxlVG9vbGJhcl07XG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNUb29sYmFyKSB7XG4gICAgICAgICAgICByZXR1cm4gW3BhcnRUb29sYmFyXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbWVudWJhckNvbGxlY3Rpb24gPSBzaG91bGRIYXZlUHJvbW90aW9uID8gW1xuICAgICAgICAgIHBhcnRQcm9tb3Rpb24sXG4gICAgICAgICAgcGFydE1lbnViYXJcbiAgICAgICAgXSA6IFtwYXJ0TWVudWJhcl07XG4gICAgICAgIHJldHVybiBPdXRlckNvbnRhaW5lci5wYXJ0cy5oZWFkZXIoe1xuICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LWVkaXRvci1oZWFkZXInXS5jb25jYXQoaGFzQW55Q29udGVudHMgPyBbXSA6IFsndG94LWVkaXRvci1oZWFkZXItLWVtcHR5J10pLFxuICAgICAgICAgICAgLi4udmVydGljYWxEaXJBdHRyaWJ1dGVzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21wb25lbnRzOiBmbGF0dGVuKFtcbiAgICAgICAgICAgIGhhc01lbnViYXIgPyBtZW51YmFyQ29sbGVjdGlvbiA6IFtdLFxuICAgICAgICAgICAgZ2V0UGFydFRvb2xiYXIoKSxcbiAgICAgICAgICAgIHVzZUZpeGVkQ29udGFpbmVyKGVkaXRvcikgPyBbXSA6IFttZW1BbmNob3JCYXIuYXNTcGVjKCldXG4gICAgICAgICAgXSksXG4gICAgICAgICAgc3RpY2t5OiBpc1N0aWNreVRvb2xiYXIoZWRpdG9yKSxcbiAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgc2hhcmVkQmFja3N0YWdlOiBiYWNrc3RhZ2VzLnBvcHVwLnNoYXJlZFxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBtYWtlUHJvbW90aW9uID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gT3V0ZXJDb250YWluZXIucGFydHMucHJvbW90aW9uKHtcbiAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1wcm9tb3Rpb24nXVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgbWFrZVNpZGViYXJEZWZpbml0aW9uID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBwYXJ0U29ja2V0ID0gT3V0ZXJDb250YWluZXIucGFydHMuc29ja2V0KHtcbiAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1lZGl0LWFyZWEnXVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBhcnRTaWRlYmFyID0gT3V0ZXJDb250YWluZXIucGFydHMuc2lkZWJhcih7XG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgY2xhc3NlczogWyd0b3gtc2lkZWJhciddXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1zaWRlYmFyLXdyYXAnXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgICAgcGFydFNvY2tldCxcbiAgICAgICAgICAgIHBhcnRTaWRlYmFyXG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlbmRlckRpYWxvZ1VpID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB1aUNvbnRhaW5lciA9IGdldFVpQ29udGFpbmVyKGVkaXRvcik7XG4gICAgICAgIGNvbnN0IGlzR3JpZFVpQ29udGFpbmVyID0gZXEoYm9keSgpLCB1aUNvbnRhaW5lcikgJiYgZ2V0JGUodWlDb250YWluZXIsICdkaXNwbGF5JykgPT09ICdncmlkJztcbiAgICAgICAgY29uc3Qgc2lua1NwZWMgPSB7XG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICAgICAndG94JyxcbiAgICAgICAgICAgICAgJ3RveC1zaWx2ZXItc2luaycsXG4gICAgICAgICAgICAgICd0b3gtdGlueW1jZS1hdXgnXG4gICAgICAgICAgICBdLmNvbmNhdChkZXZpY2VDbGFzc2VzKSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgLi4uZ2xvYmFsJDguaXNSdGwoKSA/IHsgZGlyOiAncnRsJyB9IDoge30gfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1Bvc2l0aW9uaW5nLmNvbmZpZyh7IHVzZUZpeGVkOiAoKSA9PiBoZWFkZXIuaXNEb2NrZWQobGF6eUhlYWRlcikgfSldKVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZWFjdGl2ZVdpZHRoU3BlYyA9IHtcbiAgICAgICAgICBkb206IHsgc3R5bGVzOiB7IHdpZHRoOiBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgJ3B4JyB9IH0sXG4gICAgICAgICAgZXZlbnRzOiBkZXJpdmUkMihbcnVuJDEod2luZG93UmVzaXplKCksIGNvbXAgPT4ge1xuICAgICAgICAgICAgICBzZXQkOChjb21wLmVsZW1lbnQsICd3aWR0aCcsIGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAncHgnKTtcbiAgICAgICAgICAgIH0pXSlcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2luayA9IGJ1aWxkJDEoZGVlcE1lcmdlKHNpbmtTcGVjLCBpc0dyaWRVaUNvbnRhaW5lciA/IHJlYWN0aXZlV2lkdGhTcGVjIDoge30pKTtcbiAgICAgICAgY29uc3QgdWlNb3RoZXJzaGlwID0gdGFrZW92ZXIoc2luayk7XG4gICAgICAgIGxhenlEaWFsb2dNb3RoZXJzaGlwLnNldCh1aU1vdGhlcnNoaXApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNpbmssXG4gICAgICAgICAgbW90aGVyc2hpcDogdWlNb3RoZXJzaGlwXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVuZGVyUG9wdXBVaSA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2lua1NwZWMgPSB7XG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICAgICAndG94JyxcbiAgICAgICAgICAgICAgJ3RveC1zaWx2ZXItc2luaycsXG4gICAgICAgICAgICAgICd0b3gtc2lsdmVyLXBvcHVwLXNpbmsnLFxuICAgICAgICAgICAgICAndG94LXRpbnltY2UtYXV4J1xuICAgICAgICAgICAgXS5jb25jYXQoZGV2aWNlQ2xhc3NlcyksXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IC4uLmdsb2JhbCQ4LmlzUnRsKCkgPyB7IGRpcjogJ3J0bCcgfSA6IHt9IH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtQb3NpdGlvbmluZy5jb25maWcoe1xuICAgICAgICAgICAgICB1c2VGaXhlZDogKCkgPT4gaGVhZGVyLmlzRG9ja2VkKGxhenlIZWFkZXIpLFxuICAgICAgICAgICAgICBnZXRCb3VuZHM6ICgpID0+IHNldHVwRm9yVGhlbWUuZ2V0UG9wdXBTaW5rQm91bmRzKClcbiAgICAgICAgICAgIH0pXSlcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2luayA9IGJ1aWxkJDEoc2lua1NwZWMpO1xuICAgICAgICBjb25zdCB1aU1vdGhlcnNoaXAgPSB0YWtlb3ZlcihzaW5rKTtcbiAgICAgICAgbGF6eVBvcHVwTW90aGVyc2hpcC5zZXQodWlNb3RoZXJzaGlwKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzaW5rLFxuICAgICAgICAgIG1vdGhlcnNoaXA6IHVpTW90aGVyc2hpcFxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlbmRlck1haW5VaSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgcGFydEhlYWRlciA9IG1ha2VIZWFkZXJQYXJ0KCk7XG4gICAgICAgIGNvbnN0IHNpZGViYXJDb250YWluZXIgPSBtYWtlU2lkZWJhckRlZmluaXRpb24oKTtcbiAgICAgICAgY29uc3QgcGFydFRocm9iYmVyID0gT3V0ZXJDb250YWluZXIucGFydHMudGhyb2JiZXIoe1xuICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LXRocm9iYmVyJ11cbiAgICAgICAgICB9LFxuICAgICAgICAgIGJhY2tzdGFnZTogYmFja3N0YWdlcy5wb3B1cFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGFydFZpZXdXcmFwcGVyID0gT3V0ZXJDb250YWluZXIucGFydHMudmlld1dyYXBwZXIoeyBiYWNrc3RhZ2U6IGJhY2tzdGFnZXMucG9wdXAgfSk7XG4gICAgICAgIGNvbnN0IHN0YXR1c2JhciA9IHVzZVN0YXR1c0JhcihlZGl0b3IpICYmICFpc0lubGluZSA/IE9wdGlvbmFsLnNvbWUocmVuZGVyU3RhdHVzYmFyKGVkaXRvciwgYmFja3N0YWdlcy5wb3B1cC5zaGFyZWQucHJvdmlkZXJzKSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIGNvbnN0IGVkaXRvckNvbXBvbmVudHMgPSBmbGF0dGVuKFtcbiAgICAgICAgICBpc1Rvb2xiYXJCb3R0b20gPyBbXSA6IFtwYXJ0SGVhZGVyXSxcbiAgICAgICAgICBpc0lubGluZSA/IFtdIDogW3NpZGViYXJDb250YWluZXJdLFxuICAgICAgICAgIGlzVG9vbGJhckJvdHRvbSA/IFtwYXJ0SGVhZGVyXSA6IFtdXG4gICAgICAgIF0pO1xuICAgICAgICBjb25zdCBlZGl0b3JDb250YWluZXIgPSBPdXRlckNvbnRhaW5lci5wYXJ0cy5lZGl0b3JDb250YWluZXIoe1xuICAgICAgICAgIGNvbXBvbmVudHM6IGZsYXR0ZW4oW1xuICAgICAgICAgICAgZWRpdG9yQ29tcG9uZW50cyxcbiAgICAgICAgICAgIGlzSW5saW5lID8gW10gOiBbXG4gICAgICAgICAgICAgIG1lbUJvdHRvbUFuY2hvckJhci5hc1NwZWMoKSxcbiAgICAgICAgICAgICAgLi4uc3RhdHVzYmFyLnRvQXJyYXkoKVxuICAgICAgICAgICAgXVxuICAgICAgICAgIF0pXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBpc0hpZGRlbiA9IGlzRGlzdHJhY3Rpb25GcmVlKGVkaXRvcik7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgICAgcm9sZTogJ2FwcGxpY2F0aW9uJyxcbiAgICAgICAgICAuLi5nbG9iYWwkOC5pc1J0bCgpID8geyBkaXI6ICdydGwnIH0gOiB7fSxcbiAgICAgICAgICAuLi5pc0hpZGRlbiA/IHsgJ2FyaWEtaGlkZGVuJzogJ3RydWUnIH0gOiB7fVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBvdXRlckNvbnRhaW5lciA9IGJ1aWxkJDEoT3V0ZXJDb250YWluZXIuc2tldGNoKHtcbiAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICBjbGFzc2VzOiBbXG4gICAgICAgICAgICAgICd0b3gnLFxuICAgICAgICAgICAgICAndG94LXRpbnltY2UnXG4gICAgICAgICAgICBdLmNvbmNhdChpc0lubGluZSA/IFsndG94LXRpbnltY2UtaW5saW5lJ10gOiBbXSkuY29uY2F0KGlzVG9vbGJhckJvdHRvbSA/IFsndG94LXRpbnltY2UtLXRvb2xiYXItYm90dG9tJ10gOiBbXSkuY29uY2F0KGRldmljZUNsYXNzZXMpLFxuICAgICAgICAgICAgc3R5bGVzOiB7XG4gICAgICAgICAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAuLi5pc0hpZGRlbiA/IHtcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAnMCcsXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnMCdcbiAgICAgICAgICAgICAgfSA6IHt9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXR0cmlidXRlc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgICAgZWRpdG9yQ29udGFpbmVyLFxuICAgICAgICAgICAgLi4uaXNJbmxpbmUgPyBbXSA6IFtwYXJ0Vmlld1dyYXBwZXJdLFxuICAgICAgICAgICAgcGFydFRocm9iYmVyXG4gICAgICAgICAgXSxcbiAgICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgICByZWNlaXZpbmdDb25maWcoKSxcbiAgICAgICAgICAgIERpc2FibGluZy5jb25maWcoeyBkaXNhYmxlQ2xhc3M6ICd0b3gtdGlueW1jZS0tZGlzYWJsZWQnIH0pLFxuICAgICAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICAgIG1vZGU6ICdjeWNsaWMnLFxuICAgICAgICAgICAgICBzZWxlY3RvcjogJy50b3gtbWVudWJhciwgLnRveC10b29sYmFyLCAudG94LXRvb2xiYXJfX3ByaW1hcnksIC50b3gtdG9vbGJhcl9fb3ZlcmZsb3ctLW9wZW4sIC50b3gtc2lkZWJhcl9fb3ZlcmZsb3ctLW9wZW4sIC50b3gtc3RhdHVzYmFyX19wYXRoLCAudG94LXN0YXR1c2Jhcl9fd29yZGNvdW50LCAudG94LXN0YXR1c2Jhcl9fYnJhbmRpbmcgYSwgLnRveC1zdGF0dXNiYXJfX3Jlc2l6ZS1oYW5kbGUnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0pXG4gICAgICAgIH0pKTtcbiAgICAgICAgY29uc3QgbW90aGVyc2hpcCA9IHRha2VvdmVyKG91dGVyQ29udGFpbmVyKTtcbiAgICAgICAgbGF6eU1vdGhlcnNoaXAuc2V0KG1vdGhlcnNoaXApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1vdGhlcnNoaXAsXG4gICAgICAgICAgb3V0ZXJDb250YWluZXJcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXRFZGl0b3JTaXplID0gb3V0ZXJDb250YWluZXIgPT4ge1xuICAgICAgICBjb25zdCBwYXJzZWRIZWlnaHQgPSBudW1Ub1B4KGdldEhlaWdodFdpdGhGYWxsYmFjayhlZGl0b3IpKTtcbiAgICAgICAgY29uc3QgcGFyc2VkV2lkdGggPSBudW1Ub1B4KGdldFdpZHRoV2l0aEZhbGxiYWNrKGVkaXRvcikpO1xuICAgICAgICBpZiAoIWVkaXRvci5pbmxpbmUpIHtcbiAgICAgICAgICBpZiAoaXNWYWxpZFZhbHVlJDEoJ2RpdicsICd3aWR0aCcsIHBhcnNlZFdpZHRoKSkge1xuICAgICAgICAgICAgc2V0JDgob3V0ZXJDb250YWluZXIuZWxlbWVudCwgJ3dpZHRoJywgcGFyc2VkV2lkdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNWYWxpZFZhbHVlJDEoJ2RpdicsICdoZWlnaHQnLCBwYXJzZWRIZWlnaHQpKSB7XG4gICAgICAgICAgICBzZXQkOChvdXRlckNvbnRhaW5lci5lbGVtZW50LCAnaGVpZ2h0JywgcGFyc2VkSGVpZ2h0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0JDgob3V0ZXJDb250YWluZXIuZWxlbWVudCwgJ2hlaWdodCcsICc0MDBweCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VkSGVpZ2h0O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldHVwU2hvcnRjdXRzQW5kQ29tbWFuZHMgPSBvdXRlckNvbnRhaW5lciA9PiB7XG4gICAgICAgIGVkaXRvci5hZGRTaG9ydGN1dCgnYWx0K0Y5JywgJ2ZvY3VzIG1lbnViYXInLCAoKSA9PiB7XG4gICAgICAgICAgT3V0ZXJDb250YWluZXIuZm9jdXNNZW51YmFyKG91dGVyQ29udGFpbmVyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVkaXRvci5hZGRTaG9ydGN1dCgnYWx0K0YxMCcsICdmb2N1cyB0b29sYmFyJywgKCkgPT4ge1xuICAgICAgICAgIE91dGVyQ29udGFpbmVyLmZvY3VzVG9vbGJhcihvdXRlckNvbnRhaW5lcik7XG4gICAgICAgIH0pO1xuICAgICAgICBlZGl0b3IuYWRkQ29tbWFuZCgnVG9nZ2xlVG9vbGJhckRyYXdlcicsIChfdWksIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnNraXBGb2N1cykge1xuICAgICAgICAgICAgT3V0ZXJDb250YWluZXIudG9nZ2xlVG9vbGJhckRyYXdlcldpdGhvdXRGb2N1c2luZyhvdXRlckNvbnRhaW5lcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIE91dGVyQ29udGFpbmVyLnRvZ2dsZVRvb2xiYXJEcmF3ZXIob3V0ZXJDb250YWluZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVkaXRvci5hZGRRdWVyeVN0YXRlSGFuZGxlcignVG9nZ2xlVG9vbGJhckRyYXdlcicsICgpID0+IE91dGVyQ29udGFpbmVyLmlzVG9vbGJhckRyYXdlclRvZ2dsZWQob3V0ZXJDb250YWluZXIpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZW5kZXJVSVdpdGhSZWZzID0gdWlSZWZzID0+IHtcbiAgICAgICAgY29uc3Qge21haW5VaSwgcG9wdXBVaSwgdWlNb3RoZXJzaGlwc30gPSB1aVJlZnM7XG4gICAgICAgIG1hcCQxKGdldFRvb2xiYXJHcm91cHMoZWRpdG9yKSwgKHRvb2xiYXJHcm91cEJ1dHRvbkNvbmZpZywgbmFtZSkgPT4ge1xuICAgICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRHcm91cFRvb2xiYXJCdXR0b24obmFtZSwgdG9vbGJhckdyb3VwQnV0dG9uQ29uZmlnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHtidXR0b25zLCBtZW51SXRlbXMsIGNvbnRleHRUb29sYmFycywgc2lkZWJhcnMsIHZpZXdzfSA9IGVkaXRvci51aS5yZWdpc3RyeS5nZXRBbGwoKTtcbiAgICAgICAgY29uc3QgdG9vbGJhck9wdCA9IGdldE11bHRpcGxlVG9vbGJhcnNPcHRpb24oZWRpdG9yKTtcbiAgICAgICAgY29uc3QgcmF3VWlDb25maWcgPSB7XG4gICAgICAgICAgbWVudUl0ZW1zLFxuICAgICAgICAgIG1lbnVzOiBnZXRNZW51cyhlZGl0b3IpLFxuICAgICAgICAgIG1lbnViYXI6IGdldE1lbnViYXIoZWRpdG9yKSxcbiAgICAgICAgICB0b29sYmFyOiB0b29sYmFyT3B0LmdldE9yVGh1bmsoKCkgPT4gZ2V0VG9vbGJhcihlZGl0b3IpKSxcbiAgICAgICAgICBhbGxvd1Rvb2xiYXJHcm91cHM6IHRvb2xiYXJNb2RlID09PSBUb29sYmFyTW9kZSQxLmZsb2F0aW5nLFxuICAgICAgICAgIGJ1dHRvbnMsXG4gICAgICAgICAgc2lkZWJhcjogc2lkZWJhcnMsXG4gICAgICAgICAgdmlld3NcbiAgICAgICAgfTtcbiAgICAgICAgc2V0dXBTaG9ydGN1dHNBbmRDb21tYW5kcyhtYWluVWkub3V0ZXJDb250YWluZXIpO1xuICAgICAgICBzZXR1cCRiKGVkaXRvciwgbWFpblVpLm1vdGhlcnNoaXAsIHVpTW90aGVyc2hpcHMpO1xuICAgICAgICBoZWFkZXIuc2V0dXAoZWRpdG9yLCBiYWNrc3RhZ2VzLnBvcHVwLnNoYXJlZCwgbGF6eUhlYWRlcik7XG4gICAgICAgIHNldHVwJDYoZWRpdG9yLCBiYWNrc3RhZ2VzLnBvcHVwKTtcbiAgICAgICAgc2V0dXAkNShlZGl0b3IsIGJhY2tzdGFnZXMucG9wdXAuc2hhcmVkLmdldFNpbmssIGJhY2tzdGFnZXMucG9wdXApO1xuICAgICAgICBzZXR1cCQ4KGVkaXRvcik7XG4gICAgICAgIHNldHVwJDcoZWRpdG9yLCBsYXp5VGhyb2JiZXIsIGJhY2tzdGFnZXMucG9wdXAuc2hhcmVkKTtcbiAgICAgICAgcmVnaXN0ZXIkOShlZGl0b3IsIGNvbnRleHRUb29sYmFycywgcG9wdXBVaS5zaW5rLCB7IGJhY2tzdGFnZTogYmFja3N0YWdlcy5wb3B1cCB9KTtcbiAgICAgICAgc2V0dXAkNChlZGl0b3IsIHBvcHVwVWkuc2luayk7XG4gICAgICAgIGNvbnN0IGVsbSA9IGVkaXRvci5nZXRFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHNldEVkaXRvclNpemUobWFpblVpLm91dGVyQ29udGFpbmVyKTtcbiAgICAgICAgY29uc3QgYXJncyA9IHtcbiAgICAgICAgICB0YXJnZXROb2RlOiBlbG0sXG4gICAgICAgICAgaGVpZ2h0XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBtb2RlLnJlbmRlcihlZGl0b3IsIHVpUmVmcywgcmF3VWlDb25maWcsIGJhY2tzdGFnZXMucG9wdXAsIGFyZ3MpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJldXNlRGlhbG9nVWlGb3JQb3B1VWkgPSBkaWFsb2dVaSA9PiB7XG4gICAgICAgIGxhenlQb3B1cE1vdGhlcnNoaXAuc2V0KGRpYWxvZ1VpLm1vdGhlcnNoaXApO1xuICAgICAgICByZXR1cm4gZGlhbG9nVWk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVuZGVyVUkgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1haW5VaSA9IHJlbmRlck1haW5VaSgpO1xuICAgICAgICBjb25zdCBkaWFsb2dVaSA9IHJlbmRlckRpYWxvZ1VpKCk7XG4gICAgICAgIGNvbnN0IHBvcHVwVWkgPSBpc1NwbGl0VWlNb2RlKGVkaXRvcikgPyByZW5kZXJQb3B1cFVpKCkgOiByZXVzZURpYWxvZ1VpRm9yUG9wdVVpKGRpYWxvZ1VpKTtcbiAgICAgICAgbGF6eVVpUmVmcy5kaWFsb2dVaS5zZXQoZGlhbG9nVWkpO1xuICAgICAgICBsYXp5VWlSZWZzLnBvcHVwVWkuc2V0KHBvcHVwVWkpO1xuICAgICAgICBsYXp5VWlSZWZzLm1haW5VaS5zZXQobWFpblVpKTtcbiAgICAgICAgY29uc3QgdWlSZWZzID0ge1xuICAgICAgICAgIHBvcHVwVWksXG4gICAgICAgICAgZGlhbG9nVWksXG4gICAgICAgICAgbWFpblVpLFxuICAgICAgICAgIHVpTW90aGVyc2hpcHM6IGxhenlVaVJlZnMuZ2V0VWlNb3RoZXJzaGlwcygpXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZW5kZXJVSVdpdGhSZWZzKHVpUmVmcyk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcG9wdXBzOiB7XG4gICAgICAgICAgYmFja3N0YWdlOiBiYWNrc3RhZ2VzLnBvcHVwLFxuICAgICAgICAgIGdldE1vdGhlcnNoaXA6ICgpID0+IGdldExhenlNb3RoZXJzaGlwKCdwb3B1cHMnLCBsYXp5UG9wdXBNb3RoZXJzaGlwKVxuICAgICAgICB9LFxuICAgICAgICBkaWFsb2dzOiB7XG4gICAgICAgICAgYmFja3N0YWdlOiBiYWNrc3RhZ2VzLmRpYWxvZyxcbiAgICAgICAgICBnZXRNb3RoZXJzaGlwOiAoKSA9PiBnZXRMYXp5TW90aGVyc2hpcCgnZGlhbG9ncycsIGxhenlEaWFsb2dNb3RoZXJzaGlwKVxuICAgICAgICB9LFxuICAgICAgICByZW5kZXJVSVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWxsZWRCeSA9IChsYWJlbGxlZEVsZW1lbnQsIGxhYmVsRWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgbGFiZWxJZCA9IGdldE9wdChsYWJlbGxlZEVsZW1lbnQsICdpZCcpLmZvbGQoKCkgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IGdlbmVyYXRlJDYoJ2RpYWxvZy1sYWJlbCcpO1xuICAgICAgICBzZXQkOShsYWJlbEVsZW1lbnQsICdpZCcsIGlkKTtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgfSwgaWRlbnRpdHkpO1xuICAgICAgc2V0JDkobGFiZWxsZWRFbGVtZW50LCAnYXJpYS1sYWJlbGxlZGJ5JywgbGFiZWxJZCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNjaGVtYSQyID0gY29uc3RhbnQkMShbXG4gICAgICByZXF1aXJlZCQxKCdsYXp5U2luaycpLFxuICAgICAgb3B0aW9uJDMoJ2RyYWdCbG9ja0NsYXNzJyksXG4gICAgICBkZWZhdWx0ZWRGdW5jdGlvbignZ2V0Qm91bmRzJywgd2luKSxcbiAgICAgIGRlZmF1bHRlZCgndXNlVGFic3RvcEF0JywgYWx3YXlzKSxcbiAgICAgIGRlZmF1bHRlZCgnZmlyc3RUYWJzdG9wJywgMCksXG4gICAgICBkZWZhdWx0ZWQoJ2V2ZW50T3JkZXInLCB7fSksXG4gICAgICBmaWVsZCgnbW9kYWxCZWhhdmlvdXJzJywgW0tleWluZ10pLFxuICAgICAgb25LZXlib2FyZEhhbmRsZXIoJ29uRXhlY3V0ZScpLFxuICAgICAgb25TdHJpY3RLZXlib2FyZEhhbmRsZXIoJ29uRXNjYXBlJylcbiAgICBdKTtcbiAgICBjb25zdCBiYXNpYyA9IHsgc2tldGNoOiBpZGVudGl0eSB9O1xuICAgIGNvbnN0IHBhcnRzJDIgPSBjb25zdGFudCQxKFtcbiAgICAgIG9wdGlvbmFsKHtcbiAgICAgICAgbmFtZTogJ2RyYWdoYW5kbGUnLFxuICAgICAgICBvdmVycmlkZXM6IChkZXRhaWwsIHNwZWMpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW0RyYWdnaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICAgICAgbW9kZTogJ21vdXNlJyxcbiAgICAgICAgICAgICAgICBnZXRUYXJnZXQ6IGhhbmRsZSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYW5jZXN0b3IoaGFuZGxlLCAnW3JvbGU9XCJkaWFsb2dcIl0nKS5nZXRPcihoYW5kbGUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmxvY2tlckNsYXNzOiBkZXRhaWwuZHJhZ0Jsb2NrQ2xhc3MuZ2V0T3JEaWUobmV3IEVycm9yKCdUaGUgZHJhZyBibG9ja2VyIGNsYXNzIHdhcyBub3Qgc3BlY2lmaWVkIGZvciBhIGRpYWxvZyB3aXRoIGEgZHJhZyBoYW5kbGU6IFxcbicgKyBKU09OLnN0cmluZ2lmeShzcGVjLCBudWxsLCAyKSkubWVzc2FnZSksXG4gICAgICAgICAgICAgICAgZ2V0Qm91bmRzOiBkZXRhaWwuZ2V0RHJhZ0JvdW5kc1xuICAgICAgICAgICAgICB9KV0pXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICByZXF1aXJlZCh7XG4gICAgICAgIHNjaGVtYTogW3JlcXVpcmVkJDEoJ2RvbScpXSxcbiAgICAgICAgbmFtZTogJ3RpdGxlJ1xuICAgICAgfSksXG4gICAgICByZXF1aXJlZCh7XG4gICAgICAgIGZhY3Rvcnk6IGJhc2ljLFxuICAgICAgICBzY2hlbWE6IFtyZXF1aXJlZCQxKCdkb20nKV0sXG4gICAgICAgIG5hbWU6ICdjbG9zZSdcbiAgICAgIH0pLFxuICAgICAgcmVxdWlyZWQoe1xuICAgICAgICBmYWN0b3J5OiBiYXNpYyxcbiAgICAgICAgc2NoZW1hOiBbcmVxdWlyZWQkMSgnZG9tJyldLFxuICAgICAgICBuYW1lOiAnYm9keSdcbiAgICAgIH0pLFxuICAgICAgb3B0aW9uYWwoe1xuICAgICAgICBmYWN0b3J5OiBiYXNpYyxcbiAgICAgICAgc2NoZW1hOiBbcmVxdWlyZWQkMSgnZG9tJyldLFxuICAgICAgICBuYW1lOiAnZm9vdGVyJ1xuICAgICAgfSksXG4gICAgICBleHRlcm5hbCh7XG4gICAgICAgIGZhY3Rvcnk6IHtcbiAgICAgICAgICBza2V0Y2g6IChzcGVjLCBkZXRhaWwpID0+ICh7XG4gICAgICAgICAgICAuLi5zcGVjLFxuICAgICAgICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgICAgICAgY29tcG9uZW50czogZGV0YWlsLmNvbXBvbmVudHNcbiAgICAgICAgICB9KVxuICAgICAgICB9LFxuICAgICAgICBzY2hlbWE6IFtcbiAgICAgICAgICBkZWZhdWx0ZWQoJ2RvbScsIHtcbiAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICBzdHlsZXM6IHtcbiAgICAgICAgICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICAgICAgICAgIGxlZnQ6ICcwcHgnLFxuICAgICAgICAgICAgICB0b3A6ICcwcHgnLFxuICAgICAgICAgICAgICByaWdodDogJzBweCcsXG4gICAgICAgICAgICAgIGJvdHRvbTogJzBweCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBkZWZhdWx0ZWQoJ2NvbXBvbmVudHMnLCBbXSlcbiAgICAgICAgXSxcbiAgICAgICAgbmFtZTogJ2Jsb2NrZXInXG4gICAgICB9KVxuICAgIF0pO1xuXG4gICAgY29uc3QgZmFjdG9yeSQ0ID0gKGRldGFpbCwgY29tcG9uZW50cywgc3BlYywgZXh0ZXJuYWxzKSA9PiB7XG4gICAgICBjb25zdCBkaWFsb2dDb21wID0gdmFsdWUkMigpO1xuICAgICAgY29uc3Qgc2hvd0RpYWxvZyA9IGRpYWxvZyA9PiB7XG4gICAgICAgIGRpYWxvZ0NvbXAuc2V0KGRpYWxvZyk7XG4gICAgICAgIGNvbnN0IHNpbmsgPSBkZXRhaWwubGF6eVNpbmsoZGlhbG9nKS5nZXRPckRpZSgpO1xuICAgICAgICBjb25zdCBleHRlcm5hbEJsb2NrZXIgPSBleHRlcm5hbHMuYmxvY2tlcigpO1xuICAgICAgICBjb25zdCBibG9ja2VyID0gc2luay5nZXRTeXN0ZW0oKS5idWlsZCh7XG4gICAgICAgICAgLi4uZXh0ZXJuYWxCbG9ja2VyLFxuICAgICAgICAgIGNvbXBvbmVudHM6IGV4dGVybmFsQmxvY2tlci5jb21wb25lbnRzLmNvbmNhdChbcHJlbWFkZShkaWFsb2cpXSksXG4gICAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgICAgRm9jdXNpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICAgIGNvbmZpZygnZGlhbG9nLWJsb2NrZXItZXZlbnRzJywgW3J1bk9uU291cmNlKGZvY3VzaW4oKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIEJsb2NraW5nLmlzQmxvY2tlZChkaWFsb2cpID8gbm9vcCgpIDogS2V5aW5nLmZvY3VzSW4oZGlhbG9nKTtcbiAgICAgICAgICAgICAgfSldKVxuICAgICAgICAgIF0pXG4gICAgICAgIH0pO1xuICAgICAgICBhdHRhY2goc2luaywgYmxvY2tlcik7XG4gICAgICAgIEtleWluZy5mb2N1c0luKGRpYWxvZyk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaGlkZURpYWxvZyA9IGRpYWxvZyA9PiB7XG4gICAgICAgIGRpYWxvZ0NvbXAuY2xlYXIoKTtcbiAgICAgICAgcGFyZW50KGRpYWxvZy5lbGVtZW50KS5lYWNoKGJsb2NrZXJEb20gPT4ge1xuICAgICAgICAgIGRpYWxvZy5nZXRTeXN0ZW0oKS5nZXRCeURvbShibG9ja2VyRG9tKS5lYWNoKGJsb2NrZXIgPT4ge1xuICAgICAgICAgICAgZGV0YWNoKGJsb2NrZXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXREaWFsb2dCb2R5ID0gZGlhbG9nID0+IGdldFBhcnRPckRpZShkaWFsb2csIGRldGFpbCwgJ2JvZHknKTtcbiAgICAgIGNvbnN0IGdldERpYWxvZ0Zvb3RlciA9IGRpYWxvZyA9PiBnZXRQYXJ0KGRpYWxvZywgZGV0YWlsLCAnZm9vdGVyJyk7XG4gICAgICBjb25zdCBzZXRCdXN5ID0gKGRpYWxvZywgZ2V0QnVzeVNwZWMpID0+IHtcbiAgICAgICAgQmxvY2tpbmcuYmxvY2soZGlhbG9nLCBnZXRCdXN5U3BlYyk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0SWRsZSA9IGRpYWxvZyA9PiB7XG4gICAgICAgIEJsb2NraW5nLnVuYmxvY2soZGlhbG9nKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBtb2RhbEV2ZW50c0lkID0gZ2VuZXJhdGUkNignbW9kYWwtZXZlbnRzJyk7XG4gICAgICBjb25zdCBldmVudE9yZGVyID0ge1xuICAgICAgICAuLi5kZXRhaWwuZXZlbnRPcmRlcixcbiAgICAgICAgW2F0dGFjaGVkVG9Eb20oKV06IFttb2RhbEV2ZW50c0lkXS5jb25jYXQoZGV0YWlsLmV2ZW50T3JkZXJbJ2FsbG95LnN5c3RlbS5hdHRhY2hlZCddIHx8IFtdKVxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVpZDogZGV0YWlsLnVpZCxcbiAgICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICBhcGlzOiB7XG4gICAgICAgICAgc2hvdzogc2hvd0RpYWxvZyxcbiAgICAgICAgICBoaWRlOiBoaWRlRGlhbG9nLFxuICAgICAgICAgIGdldEJvZHk6IGdldERpYWxvZ0JvZHksXG4gICAgICAgICAgZ2V0Rm9vdGVyOiBnZXREaWFsb2dGb290ZXIsXG4gICAgICAgICAgc2V0SWRsZSxcbiAgICAgICAgICBzZXRCdXN5XG4gICAgICAgIH0sXG4gICAgICAgIGV2ZW50T3JkZXIsXG4gICAgICAgIGRvbU1vZGlmaWNhdGlvbjoge1xuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICdyb2xlJzogJ2RpYWxvZycsXG4gICAgICAgICAgICAnYXJpYS1tb2RhbCc6ICd0cnVlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYmVoYXZpb3VyczogYXVnbWVudChkZXRhaWwubW9kYWxCZWhhdmlvdXJzLCBbXG4gICAgICAgICAgUmVwbGFjaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBtb2RlOiAnY3ljbGljJyxcbiAgICAgICAgICAgIG9uRW50ZXI6IGRldGFpbC5vbkV4ZWN1dGUsXG4gICAgICAgICAgICBvbkVzY2FwZTogZGV0YWlsLm9uRXNjYXBlLFxuICAgICAgICAgICAgdXNlVGFic3RvcEF0OiBkZXRhaWwudXNlVGFic3RvcEF0LFxuICAgICAgICAgICAgZmlyc3RUYWJzdG9wOiBkZXRhaWwuZmlyc3RUYWJzdG9wXG4gICAgICAgICAgfSksXG4gICAgICAgICAgQmxvY2tpbmcuY29uZmlnKHsgZ2V0Um9vdDogZGlhbG9nQ29tcC5nZXQgfSksXG4gICAgICAgICAgY29uZmlnKG1vZGFsRXZlbnRzSWQsIFtydW5PbkF0dGFjaGVkKGMgPT4ge1xuICAgICAgICAgICAgICBsYWJlbGxlZEJ5KGMuZWxlbWVudCwgZ2V0UGFydE9yRGllKGMsIGRldGFpbCwgJ3RpdGxlJykuZWxlbWVudCk7XG4gICAgICAgICAgICB9KV0pXG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgTW9kYWxEaWFsb2cgPSBjb21wb3NpdGUoe1xuICAgICAgbmFtZTogJ01vZGFsRGlhbG9nJyxcbiAgICAgIGNvbmZpZ0ZpZWxkczogc2NoZW1hJDIoKSxcbiAgICAgIHBhcnRGaWVsZHM6IHBhcnRzJDIoKSxcbiAgICAgIGZhY3Rvcnk6IGZhY3RvcnkkNCxcbiAgICAgIGFwaXM6IHtcbiAgICAgICAgc2hvdzogKGFwaXMsIGRpYWxvZykgPT4ge1xuICAgICAgICAgIGFwaXMuc2hvdyhkaWFsb2cpO1xuICAgICAgICB9LFxuICAgICAgICBoaWRlOiAoYXBpcywgZGlhbG9nKSA9PiB7XG4gICAgICAgICAgYXBpcy5oaWRlKGRpYWxvZyk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldEJvZHk6IChhcGlzLCBkaWFsb2cpID0+IGFwaXMuZ2V0Qm9keShkaWFsb2cpLFxuICAgICAgICBnZXRGb290ZXI6IChhcGlzLCBkaWFsb2cpID0+IGFwaXMuZ2V0Rm9vdGVyKGRpYWxvZyksXG4gICAgICAgIHNldEJ1c3k6IChhcGlzLCBkaWFsb2csIGdldEJ1c3lTcGVjKSA9PiB7XG4gICAgICAgICAgYXBpcy5zZXRCdXN5KGRpYWxvZywgZ2V0QnVzeVNwZWMpO1xuICAgICAgICB9LFxuICAgICAgICBzZXRJZGxlOiAoYXBpcywgZGlhbG9nKSA9PiB7XG4gICAgICAgICAgYXBpcy5zZXRJZGxlKGRpYWxvZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGRpYWxvZ1RvZ2dsZU1lbnVJdGVtU2NoZW1hID0gb2JqT2YoW1xuICAgICAgdHlwZSxcbiAgICAgIG5hbWUkMVxuICAgIF0uY29uY2F0KGNvbW1vbk1lbnVJdGVtRmllbGRzKSk7XG4gICAgY29uc3QgZGlhbG9nVG9nZ2xlTWVudUl0ZW1EYXRhUHJvY2Vzc29yID0gYm9vbGVhbjtcblxuICAgIGNvbnN0IGJhc2VGb290ZXJCdXR0b25GaWVsZHMgPSBbXG4gICAgICBnZW5lcmF0ZWROYW1lKCdidXR0b24nKSxcbiAgICAgIG9wdGlvbmFsSWNvbixcbiAgICAgIGRlZmF1bHRlZFN0cmluZ0VudW0oJ2FsaWduJywgJ2VuZCcsIFtcbiAgICAgICAgJ3N0YXJ0JyxcbiAgICAgICAgJ2VuZCdcbiAgICAgIF0pLFxuICAgICAgcHJpbWFyeSxcbiAgICAgIGVuYWJsZWQsXG4gICAgICBvcHRpb25TdHJpbmdFbnVtKCdidXR0b25UeXBlJywgW1xuICAgICAgICAncHJpbWFyeScsXG4gICAgICAgICdzZWNvbmRhcnknXG4gICAgICBdKVxuICAgIF07XG4gICAgY29uc3QgZGlhbG9nRm9vdGVyQnV0dG9uRmllbGRzID0gW1xuICAgICAgLi4uYmFzZUZvb3RlckJ1dHRvbkZpZWxkcyxcbiAgICAgIHRleHQkMVxuICAgIF07XG4gICAgY29uc3Qgbm9ybWFsRm9vdGVyQnV0dG9uRmllbGRzID0gW1xuICAgICAgcmVxdWlyZWRTdHJpbmdFbnVtKCd0eXBlJywgW1xuICAgICAgICAnc3VibWl0JyxcbiAgICAgICAgJ2NhbmNlbCcsXG4gICAgICAgICdjdXN0b20nXG4gICAgICBdKSxcbiAgICAgIC4uLmRpYWxvZ0Zvb3RlckJ1dHRvbkZpZWxkc1xuICAgIF07XG4gICAgY29uc3QgbWVudUZvb3RlckJ1dHRvbkZpZWxkcyA9IFtcbiAgICAgIHJlcXVpcmVkU3RyaW5nRW51bSgndHlwZScsIFsnbWVudSddKSxcbiAgICAgIG9wdGlvbmFsVGV4dCxcbiAgICAgIG9wdGlvbmFsVG9vbHRpcCxcbiAgICAgIG9wdGlvbmFsSWNvbixcbiAgICAgIHJlcXVpcmVkQXJyYXlPZignaXRlbXMnLCBkaWFsb2dUb2dnbGVNZW51SXRlbVNjaGVtYSksXG4gICAgICAuLi5iYXNlRm9vdGVyQnV0dG9uRmllbGRzXG4gICAgXTtcbiAgICBjb25zdCB0b2dnbGVCdXR0b25TcGVjRmllbGRzID0gW1xuICAgICAgLi4uYmFzZUZvb3RlckJ1dHRvbkZpZWxkcyxcbiAgICAgIHJlcXVpcmVkU3RyaW5nRW51bSgndHlwZScsIFsndG9nZ2xlYnV0dG9uJ10pLFxuICAgICAgcmVxdWlyZWRTdHJpbmcoJ3Rvb2x0aXAnKSxcbiAgICAgIG9wdGlvbmFsSWNvbixcbiAgICAgIG9wdGlvbmFsVGV4dCxcbiAgICAgIGRlZmF1bHRlZEJvb2xlYW4oJ2FjdGl2ZScsIGZhbHNlKVxuICAgIF07XG4gICAgY29uc3QgZGlhbG9nRm9vdGVyQnV0dG9uU2NoZW1hID0gY2hvb3NlJDEoJ3R5cGUnLCB7XG4gICAgICBzdWJtaXQ6IG5vcm1hbEZvb3RlckJ1dHRvbkZpZWxkcyxcbiAgICAgIGNhbmNlbDogbm9ybWFsRm9vdGVyQnV0dG9uRmllbGRzLFxuICAgICAgY3VzdG9tOiBub3JtYWxGb290ZXJCdXR0b25GaWVsZHMsXG4gICAgICBtZW51OiBtZW51Rm9vdGVyQnV0dG9uRmllbGRzLFxuICAgICAgdG9nZ2xlYnV0dG9uOiB0b2dnbGVCdXR0b25TcGVjRmllbGRzXG4gICAgfSk7XG5cbiAgICBjb25zdCBhbGVydEJhbm5lckZpZWxkcyA9IFtcbiAgICAgIHR5cGUsXG4gICAgICB0ZXh0JDEsXG4gICAgICByZXF1aXJlZFN0cmluZ0VudW0oJ2xldmVsJywgW1xuICAgICAgICAnaW5mbycsXG4gICAgICAgICd3YXJuJyxcbiAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgJ3N1Y2Nlc3MnXG4gICAgICBdKSxcbiAgICAgIGljb24sXG4gICAgICBkZWZhdWx0ZWQoJ3VybCcsICcnKVxuICAgIF07XG4gICAgY29uc3QgYWxlcnRCYW5uZXJTY2hlbWEgPSBvYmpPZihhbGVydEJhbm5lckZpZWxkcyk7XG5cbiAgICBjb25zdCBjcmVhdGVCYXJGaWVsZHMgPSBpdGVtc0ZpZWxkID0+IFtcbiAgICAgIHR5cGUsXG4gICAgICBpdGVtc0ZpZWxkXG4gICAgXTtcblxuICAgIGNvbnN0IGJ1dHRvbkZpZWxkcyA9IFtcbiAgICAgIHR5cGUsXG4gICAgICB0ZXh0JDEsXG4gICAgICBlbmFibGVkLFxuICAgICAgZ2VuZXJhdGVkTmFtZSgnYnV0dG9uJyksXG4gICAgICBvcHRpb25hbEljb24sXG4gICAgICBib3JkZXJsZXNzLFxuICAgICAgb3B0aW9uU3RyaW5nRW51bSgnYnV0dG9uVHlwZScsIFtcbiAgICAgICAgJ3ByaW1hcnknLFxuICAgICAgICAnc2Vjb25kYXJ5JyxcbiAgICAgICAgJ3Rvb2xiYXInXG4gICAgICBdKSxcbiAgICAgIHByaW1hcnlcbiAgICBdO1xuICAgIGNvbnN0IGJ1dHRvblNjaGVtYSA9IG9iak9mKGJ1dHRvbkZpZWxkcyk7XG5cbiAgICBjb25zdCBmb3JtQ29tcG9uZW50RmllbGRzID0gW1xuICAgICAgdHlwZSxcbiAgICAgIG5hbWUkMVxuICAgIF07XG4gICAgY29uc3QgZm9ybUNvbXBvbmVudFdpdGhMYWJlbEZpZWxkcyA9IGZvcm1Db21wb25lbnRGaWVsZHMuY29uY2F0KFtvcHRpb25hbExhYmVsXSk7XG5cbiAgICBjb25zdCBjaGVja2JveEZpZWxkcyA9IGZvcm1Db21wb25lbnRGaWVsZHMuY29uY2F0KFtcbiAgICAgIGxhYmVsLFxuICAgICAgZW5hYmxlZFxuICAgIF0pO1xuICAgIGNvbnN0IGNoZWNrYm94U2NoZW1hID0gb2JqT2YoY2hlY2tib3hGaWVsZHMpO1xuICAgIGNvbnN0IGNoZWNrYm94RGF0YVByb2Nlc3NvciA9IGJvb2xlYW47XG5cbiAgICBjb25zdCBjb2xsZWN0aW9uRmllbGRzID0gZm9ybUNvbXBvbmVudFdpdGhMYWJlbEZpZWxkcy5jb25jYXQoW2RlZmF1bHRlZENvbHVtbnMoJ2F1dG8nKV0pO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25TY2hlbWEgPSBvYmpPZihjb2xsZWN0aW9uRmllbGRzKTtcbiAgICBjb25zdCBjb2xsZWN0aW9uRGF0YVByb2Nlc3NvciA9IGFyck9mT2JqKFtcbiAgICAgIHZhbHVlJDEsXG4gICAgICB0ZXh0JDEsXG4gICAgICBpY29uXG4gICAgXSk7XG5cbiAgICBjb25zdCBjb2xvcklucHV0RmllbGRzID0gZm9ybUNvbXBvbmVudFdpdGhMYWJlbEZpZWxkcy5jb25jYXQoW2RlZmF1bHRlZFN0cmluZygnc3RvcmFnZUtleScsICdkZWZhdWx0JyldKTtcbiAgICBjb25zdCBjb2xvcklucHV0U2NoZW1hID0gb2JqT2YoY29sb3JJbnB1dEZpZWxkcyk7XG4gICAgY29uc3QgY29sb3JJbnB1dERhdGFQcm9jZXNzb3IgPSBzdHJpbmc7XG5cbiAgICBjb25zdCBjb2xvclBpY2tlckZpZWxkcyA9IGZvcm1Db21wb25lbnRXaXRoTGFiZWxGaWVsZHM7XG4gICAgY29uc3QgY29sb3JQaWNrZXJTY2hlbWEgPSBvYmpPZihjb2xvclBpY2tlckZpZWxkcyk7XG4gICAgY29uc3QgY29sb3JQaWNrZXJEYXRhUHJvY2Vzc29yID0gc3RyaW5nO1xuXG4gICAgY29uc3QgY3VzdG9tRWRpdG9yRmllbGRzID0gZm9ybUNvbXBvbmVudEZpZWxkcy5jb25jYXQoW1xuICAgICAgZGVmYXVsdGVkU3RyaW5nKCd0YWcnLCAndGV4dGFyZWEnKSxcbiAgICAgIHJlcXVpcmVkU3RyaW5nKCdzY3JpcHRJZCcpLFxuICAgICAgcmVxdWlyZWRTdHJpbmcoJ3NjcmlwdFVybCcpLFxuICAgICAgZGVmYXVsdGVkUG9zdE1zZygnc2V0dGluZ3MnLCB1bmRlZmluZWQpXG4gICAgXSk7XG4gICAgY29uc3QgY3VzdG9tRWRpdG9yRmllbGRzT2xkID0gZm9ybUNvbXBvbmVudEZpZWxkcy5jb25jYXQoW1xuICAgICAgZGVmYXVsdGVkU3RyaW5nKCd0YWcnLCAndGV4dGFyZWEnKSxcbiAgICAgIHJlcXVpcmVkRnVuY3Rpb24oJ2luaXQnKVxuICAgIF0pO1xuICAgIGNvbnN0IGN1c3RvbUVkaXRvclNjaGVtYSA9IHZhbHVlT2YodiA9PiBhc1JhdygnY3VzdG9tZWRpdG9yLm9sZCcsIG9iak9mT25seShjdXN0b21FZGl0b3JGaWVsZHNPbGQpLCB2KS5vclRodW5rKCgpID0+IGFzUmF3KCdjdXN0b21lZGl0b3IubmV3Jywgb2JqT2ZPbmx5KGN1c3RvbUVkaXRvckZpZWxkcyksIHYpKSk7XG4gICAgY29uc3QgY3VzdG9tRWRpdG9yRGF0YVByb2Nlc3NvciA9IHN0cmluZztcblxuICAgIGNvbnN0IGRyb3Bab25lRmllbGRzID0gZm9ybUNvbXBvbmVudFdpdGhMYWJlbEZpZWxkcztcbiAgICBjb25zdCBkcm9wWm9uZVNjaGVtYSA9IG9iak9mKGRyb3Bab25lRmllbGRzKTtcbiAgICBjb25zdCBkcm9wWm9uZURhdGFQcm9jZXNzb3IgPSBhcnJPZlZhbCgpO1xuXG4gICAgY29uc3QgY3JlYXRlR3JpZEZpZWxkcyA9IGl0ZW1zRmllbGQgPT4gW1xuICAgICAgdHlwZSxcbiAgICAgIHJlcXVpcmVkTnVtYmVyKCdjb2x1bW5zJyksXG4gICAgICBpdGVtc0ZpZWxkXG4gICAgXTtcblxuICAgIGNvbnN0IGh0bWxQYW5lbEZpZWxkcyA9IFtcbiAgICAgIHR5cGUsXG4gICAgICByZXF1aXJlZFN0cmluZygnaHRtbCcpLFxuICAgICAgZGVmYXVsdGVkU3RyaW5nRW51bSgncHJlc2V0cycsICdwcmVzZW50YXRpb24nLCBbXG4gICAgICAgICdwcmVzZW50YXRpb24nLFxuICAgICAgICAnZG9jdW1lbnQnXG4gICAgICBdKVxuICAgIF07XG4gICAgY29uc3QgaHRtbFBhbmVsU2NoZW1hID0gb2JqT2YoaHRtbFBhbmVsRmllbGRzKTtcblxuICAgIGNvbnN0IGlmcmFtZUZpZWxkcyA9IGZvcm1Db21wb25lbnRXaXRoTGFiZWxGaWVsZHMuY29uY2F0KFtcbiAgICAgIGRlZmF1bHRlZEJvb2xlYW4oJ2JvcmRlcicsIGZhbHNlKSxcbiAgICAgIGRlZmF1bHRlZEJvb2xlYW4oJ3NhbmRib3hlZCcsIHRydWUpLFxuICAgICAgZGVmYXVsdGVkQm9vbGVhbignc3RyZWFtQ29udGVudCcsIGZhbHNlKSxcbiAgICAgIGRlZmF1bHRlZEJvb2xlYW4oJ3RyYW5zcGFyZW50JywgdHJ1ZSlcbiAgICBdKTtcbiAgICBjb25zdCBpZnJhbWVTY2hlbWEgPSBvYmpPZihpZnJhbWVGaWVsZHMpO1xuICAgIGNvbnN0IGlmcmFtZURhdGFQcm9jZXNzb3IgPSBzdHJpbmc7XG5cbiAgICBjb25zdCBpbWFnZVByZXZpZXdTY2hlbWEgPSBvYmpPZihmb3JtQ29tcG9uZW50RmllbGRzLmNvbmNhdChbb3B0aW9uU3RyaW5nKCdoZWlnaHQnKV0pKTtcbiAgICBjb25zdCBpbWFnZVByZXZpZXdEYXRhUHJvY2Vzc29yID0gb2JqT2YoW1xuICAgICAgcmVxdWlyZWRTdHJpbmcoJ3VybCcpLFxuICAgICAgb3B0aW9uTnVtYmVyKCd6b29tJyksXG4gICAgICBvcHRpb25OdW1iZXIoJ2NhY2hlZFdpZHRoJyksXG4gICAgICBvcHRpb25OdW1iZXIoJ2NhY2hlZEhlaWdodCcpXG4gICAgXSk7XG5cbiAgICBjb25zdCBpbnB1dEZpZWxkcyA9IGZvcm1Db21wb25lbnRXaXRoTGFiZWxGaWVsZHMuY29uY2F0KFtcbiAgICAgIG9wdGlvblN0cmluZygnaW5wdXRNb2RlJyksXG4gICAgICBvcHRpb25TdHJpbmcoJ3BsYWNlaG9sZGVyJyksXG4gICAgICBkZWZhdWx0ZWRCb29sZWFuKCdtYXhpbWl6ZWQnLCBmYWxzZSksXG4gICAgICBlbmFibGVkXG4gICAgXSk7XG4gICAgY29uc3QgaW5wdXRTY2hlbWEgPSBvYmpPZihpbnB1dEZpZWxkcyk7XG4gICAgY29uc3QgaW5wdXREYXRhUHJvY2Vzc29yID0gc3RyaW5nO1xuXG4gICAgY29uc3QgY3JlYXRlTGFiZWxGaWVsZHMgPSBpdGVtc0ZpZWxkID0+IFtcbiAgICAgIHR5cGUsXG4gICAgICBsYWJlbCxcbiAgICAgIGl0ZW1zRmllbGQsXG4gICAgICBkZWZhdWx0ZWRTdHJpbmdFbnVtKCdhbGlnbicsICdzdGFydCcsIFtcbiAgICAgICAgJ3N0YXJ0JyxcbiAgICAgICAgJ2NlbnRlcicsXG4gICAgICAgICdlbmQnXG4gICAgICBdKVxuICAgIF07XG5cbiAgICBjb25zdCBsaXN0Qm94U2luZ2xlSXRlbUZpZWxkcyA9IFtcbiAgICAgIHRleHQkMSxcbiAgICAgIHZhbHVlJDFcbiAgICBdO1xuICAgIGNvbnN0IGxpc3RCb3hOZXN0ZWRJdGVtRmllbGRzID0gW1xuICAgICAgdGV4dCQxLFxuICAgICAgcmVxdWlyZWRBcnJheU9mKCdpdGVtcycsIHRodW5rT2YoJ2l0ZW1zJywgKCkgPT4gbGlzdEJveEl0ZW1TY2hlbWEpKVxuICAgIF07XG4gICAgY29uc3QgbGlzdEJveEl0ZW1TY2hlbWEgPSBvbmVPZihbXG4gICAgICBvYmpPZihsaXN0Qm94U2luZ2xlSXRlbUZpZWxkcyksXG4gICAgICBvYmpPZihsaXN0Qm94TmVzdGVkSXRlbUZpZWxkcylcbiAgICBdKTtcbiAgICBjb25zdCBsaXN0Qm94RmllbGRzID0gZm9ybUNvbXBvbmVudFdpdGhMYWJlbEZpZWxkcy5jb25jYXQoW1xuICAgICAgcmVxdWlyZWRBcnJheU9mKCdpdGVtcycsIGxpc3RCb3hJdGVtU2NoZW1hKSxcbiAgICAgIGVuYWJsZWRcbiAgICBdKTtcbiAgICBjb25zdCBsaXN0Qm94U2NoZW1hID0gb2JqT2YobGlzdEJveEZpZWxkcyk7XG4gICAgY29uc3QgbGlzdEJveERhdGFQcm9jZXNzb3IgPSBzdHJpbmc7XG5cbiAgICBjb25zdCBzZWxlY3RCb3hGaWVsZHMgPSBmb3JtQ29tcG9uZW50V2l0aExhYmVsRmllbGRzLmNvbmNhdChbXG4gICAgICByZXF1aXJlZEFycmF5T2ZPYmooJ2l0ZW1zJywgW1xuICAgICAgICB0ZXh0JDEsXG4gICAgICAgIHZhbHVlJDFcbiAgICAgIF0pLFxuICAgICAgZGVmYXVsdGVkTnVtYmVyKCdzaXplJywgMSksXG4gICAgICBlbmFibGVkXG4gICAgXSk7XG4gICAgY29uc3Qgc2VsZWN0Qm94U2NoZW1hID0gb2JqT2Yoc2VsZWN0Qm94RmllbGRzKTtcbiAgICBjb25zdCBzZWxlY3RCb3hEYXRhUHJvY2Vzc29yID0gc3RyaW5nO1xuXG4gICAgY29uc3Qgc2l6ZUlucHV0RmllbGRzID0gZm9ybUNvbXBvbmVudFdpdGhMYWJlbEZpZWxkcy5jb25jYXQoW1xuICAgICAgZGVmYXVsdGVkQm9vbGVhbignY29uc3RyYWluJywgdHJ1ZSksXG4gICAgICBlbmFibGVkXG4gICAgXSk7XG4gICAgY29uc3Qgc2l6ZUlucHV0U2NoZW1hID0gb2JqT2Yoc2l6ZUlucHV0RmllbGRzKTtcbiAgICBjb25zdCBzaXplSW5wdXREYXRhUHJvY2Vzc29yID0gb2JqT2YoW1xuICAgICAgcmVxdWlyZWRTdHJpbmcoJ3dpZHRoJyksXG4gICAgICByZXF1aXJlZFN0cmluZygnaGVpZ2h0JylcbiAgICBdKTtcblxuICAgIGNvbnN0IHNsaWRlckZpZWxkcyA9IGZvcm1Db21wb25lbnRGaWVsZHMuY29uY2F0KFtcbiAgICAgIGxhYmVsLFxuICAgICAgZGVmYXVsdGVkTnVtYmVyKCdtaW4nLCAwKSxcbiAgICAgIGRlZmF1bHRlZE51bWJlcignbWF4JywgMClcbiAgICBdKTtcbiAgICBjb25zdCBzbGlkZXJTY2hlbWEgPSBvYmpPZihzbGlkZXJGaWVsZHMpO1xuICAgIGNvbnN0IHNsaWRlcklucHV0RGF0YVByb2Nlc3NvciA9IG51bWJlcjtcblxuICAgIGNvbnN0IHRhYmxlRmllbGRzID0gW1xuICAgICAgdHlwZSxcbiAgICAgIHJlcXVpcmVkQXJyYXlPZignaGVhZGVyJywgc3RyaW5nKSxcbiAgICAgIHJlcXVpcmVkQXJyYXlPZignY2VsbHMnLCBhcnJPZihzdHJpbmcpKVxuICAgIF07XG4gICAgY29uc3QgdGFibGVTY2hlbWEgPSBvYmpPZih0YWJsZUZpZWxkcyk7XG5cbiAgICBjb25zdCB0ZXh0QXJlYUZpZWxkcyA9IGZvcm1Db21wb25lbnRXaXRoTGFiZWxGaWVsZHMuY29uY2F0KFtcbiAgICAgIG9wdGlvblN0cmluZygncGxhY2Vob2xkZXInKSxcbiAgICAgIGRlZmF1bHRlZEJvb2xlYW4oJ21heGltaXplZCcsIGZhbHNlKSxcbiAgICAgIGVuYWJsZWRcbiAgICBdKTtcbiAgICBjb25zdCB0ZXh0QXJlYVNjaGVtYSA9IG9iak9mKHRleHRBcmVhRmllbGRzKTtcbiAgICBjb25zdCB0ZXh0QXJlYURhdGFQcm9jZXNzb3IgPSBzdHJpbmc7XG5cbiAgICBjb25zdCBiYXNlVHJlZUl0ZW1GaWVsZHMgPSBbXG4gICAgICByZXF1aXJlZFN0cmluZ0VudW0oJ3R5cGUnLCBbXG4gICAgICAgICdkaXJlY3RvcnknLFxuICAgICAgICAnbGVhZidcbiAgICAgIF0pLFxuICAgICAgdGl0bGUsXG4gICAgICByZXF1aXJlZFN0cmluZygnaWQnKSxcbiAgICAgIG9wdGlvbk9mKCdtZW51JywgTWVudUJ1dHRvblNjaGVtYSlcbiAgICBdO1xuICAgIGNvbnN0IHRyZWVJdGVtTGVhZkZpZWxkcyA9IGJhc2VUcmVlSXRlbUZpZWxkcztcbiAgICBjb25zdCB0cmVlSXRlbUxlYWZTY2hlbWEgPSBvYmpPZih0cmVlSXRlbUxlYWZGaWVsZHMpO1xuICAgIGNvbnN0IHRyZWVJdGVtRGlyZWN0b3J5RmllbGRzID0gYmFzZVRyZWVJdGVtRmllbGRzLmNvbmNhdChbcmVxdWlyZWRBcnJheU9mKCdjaGlsZHJlbicsIHRodW5rT2YoJ2NoaWxkcmVuJywgKCkgPT4ge1xuICAgICAgICByZXR1cm4gY2hvb3NlJDIoJ3R5cGUnLCB7XG4gICAgICAgICAgZGlyZWN0b3J5OiB0cmVlSXRlbURpcmVjdG9yeVNjaGVtYSxcbiAgICAgICAgICBsZWFmOiB0cmVlSXRlbUxlYWZTY2hlbWFcbiAgICAgICAgfSk7XG4gICAgICB9KSldKTtcbiAgICBjb25zdCB0cmVlSXRlbURpcmVjdG9yeVNjaGVtYSA9IG9iak9mKHRyZWVJdGVtRGlyZWN0b3J5RmllbGRzKTtcbiAgICBjb25zdCB0cmVlSXRlbVNjaGVtYSA9IGNob29zZSQyKCd0eXBlJywge1xuICAgICAgZGlyZWN0b3J5OiB0cmVlSXRlbURpcmVjdG9yeVNjaGVtYSxcbiAgICAgIGxlYWY6IHRyZWVJdGVtTGVhZlNjaGVtYVxuICAgIH0pO1xuICAgIGNvbnN0IHRyZWVGaWVsZHMgPSBbXG4gICAgICB0eXBlLFxuICAgICAgcmVxdWlyZWRBcnJheU9mKCdpdGVtcycsIHRyZWVJdGVtU2NoZW1hKSxcbiAgICAgIG9wdGlvbkZ1bmN0aW9uKCdvbkxlYWZBY3Rpb24nKSxcbiAgICAgIG9wdGlvbkZ1bmN0aW9uKCdvblRvZ2dsZUV4cGFuZCcpLFxuICAgICAgZGVmYXVsdGVkQXJyYXlPZignZGVmYXVsdEV4cGFuZGVkSWRzJywgW10sIHN0cmluZyksXG4gICAgICBvcHRpb25TdHJpbmcoJ2RlZmF1bHRTZWxlY3RlZElkJylcbiAgICBdO1xuICAgIGNvbnN0IHRyZWVTY2hlbWEgPSBvYmpPZih0cmVlRmllbGRzKTtcblxuICAgIGNvbnN0IHVybElucHV0RmllbGRzID0gZm9ybUNvbXBvbmVudFdpdGhMYWJlbEZpZWxkcy5jb25jYXQoW1xuICAgICAgZGVmYXVsdGVkU3RyaW5nRW51bSgnZmlsZXR5cGUnLCAnZmlsZScsIFtcbiAgICAgICAgJ2ltYWdlJyxcbiAgICAgICAgJ21lZGlhJyxcbiAgICAgICAgJ2ZpbGUnXG4gICAgICBdKSxcbiAgICAgIGVuYWJsZWRcbiAgICBdKTtcbiAgICBjb25zdCB1cmxJbnB1dFNjaGVtYSA9IG9iak9mKHVybElucHV0RmllbGRzKTtcbiAgICBjb25zdCB1cmxJbnB1dERhdGFQcm9jZXNzb3IgPSBvYmpPZihbXG4gICAgICB2YWx1ZSQxLFxuICAgICAgZGVmYXVsdGVkTWV0YVxuICAgIF0pO1xuXG4gICAgY29uc3QgY3JlYXRlSXRlbXNGaWVsZCA9IG5hbWUgPT4gZmllbGQkMSgnaXRlbXMnLCAnaXRlbXMnLCByZXF1aXJlZCQyKCksIGFyck9mKHZhbHVlT2YodiA9PiBhc1JhdyhgQ2hlY2tpbmcgaXRlbSBvZiAkeyBuYW1lIH1gLCBpdGVtU2NoZW1hLCB2KS5mb2xkKHNFcnIgPT4gUmVzdWx0LmVycm9yKGZvcm1hdEVycm9yKHNFcnIpKSwgcGFzc1ZhbHVlID0+IFJlc3VsdC52YWx1ZShwYXNzVmFsdWUpKSkpKTtcbiAgICBjb25zdCBpdGVtU2NoZW1hID0gdmFsdWVUaHVuaygoKSA9PiBjaG9vc2UkMigndHlwZScsIHtcbiAgICAgIGFsZXJ0YmFubmVyOiBhbGVydEJhbm5lclNjaGVtYSxcbiAgICAgIGJhcjogb2JqT2YoY3JlYXRlQmFyRmllbGRzKGNyZWF0ZUl0ZW1zRmllbGQoJ2JhcicpKSksXG4gICAgICBidXR0b246IGJ1dHRvblNjaGVtYSxcbiAgICAgIGNoZWNrYm94OiBjaGVja2JveFNjaGVtYSxcbiAgICAgIGNvbG9yaW5wdXQ6IGNvbG9ySW5wdXRTY2hlbWEsXG4gICAgICBjb2xvcnBpY2tlcjogY29sb3JQaWNrZXJTY2hlbWEsXG4gICAgICBkcm9wem9uZTogZHJvcFpvbmVTY2hlbWEsXG4gICAgICBncmlkOiBvYmpPZihjcmVhdGVHcmlkRmllbGRzKGNyZWF0ZUl0ZW1zRmllbGQoJ2dyaWQnKSkpLFxuICAgICAgaWZyYW1lOiBpZnJhbWVTY2hlbWEsXG4gICAgICBpbnB1dDogaW5wdXRTY2hlbWEsXG4gICAgICBsaXN0Ym94OiBsaXN0Qm94U2NoZW1hLFxuICAgICAgc2VsZWN0Ym94OiBzZWxlY3RCb3hTY2hlbWEsXG4gICAgICBzaXplaW5wdXQ6IHNpemVJbnB1dFNjaGVtYSxcbiAgICAgIHNsaWRlcjogc2xpZGVyU2NoZW1hLFxuICAgICAgdGV4dGFyZWE6IHRleHRBcmVhU2NoZW1hLFxuICAgICAgdXJsaW5wdXQ6IHVybElucHV0U2NoZW1hLFxuICAgICAgY3VzdG9tZWRpdG9yOiBjdXN0b21FZGl0b3JTY2hlbWEsXG4gICAgICBodG1scGFuZWw6IGh0bWxQYW5lbFNjaGVtYSxcbiAgICAgIGltYWdlcHJldmlldzogaW1hZ2VQcmV2aWV3U2NoZW1hLFxuICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNjaGVtYSxcbiAgICAgIGxhYmVsOiBvYmpPZihjcmVhdGVMYWJlbEZpZWxkcyhjcmVhdGVJdGVtc0ZpZWxkKCdsYWJlbCcpKSksXG4gICAgICB0YWJsZTogdGFibGVTY2hlbWEsXG4gICAgICB0cmVlOiB0cmVlU2NoZW1hLFxuICAgICAgcGFuZWw6IHBhbmVsU2NoZW1hXG4gICAgfSkpO1xuICAgIGNvbnN0IHBhbmVsRmllbGRzID0gW1xuICAgICAgdHlwZSxcbiAgICAgIGRlZmF1bHRlZCgnY2xhc3NlcycsIFtdKSxcbiAgICAgIHJlcXVpcmVkQXJyYXlPZignaXRlbXMnLCBpdGVtU2NoZW1hKVxuICAgIF07XG4gICAgY29uc3QgcGFuZWxTY2hlbWEgPSBvYmpPZihwYW5lbEZpZWxkcyk7XG5cbiAgICBjb25zdCB0YWJGaWVsZHMgPSBbXG4gICAgICBnZW5lcmF0ZWROYW1lKCd0YWInKSxcbiAgICAgIHRpdGxlLFxuICAgICAgcmVxdWlyZWRBcnJheU9mKCdpdGVtcycsIGl0ZW1TY2hlbWEpXG4gICAgXTtcbiAgICBjb25zdCB0YWJQYW5lbEZpZWxkcyA9IFtcbiAgICAgIHR5cGUsXG4gICAgICByZXF1aXJlZEFycmF5T2ZPYmooJ3RhYnMnLCB0YWJGaWVsZHMpXG4gICAgXTtcbiAgICBjb25zdCB0YWJQYW5lbFNjaGVtYSA9IG9iak9mKHRhYlBhbmVsRmllbGRzKTtcblxuICAgIGNvbnN0IGRpYWxvZ0J1dHRvbkZpZWxkcyA9IGRpYWxvZ0Zvb3RlckJ1dHRvbkZpZWxkcztcbiAgICBjb25zdCBkaWFsb2dCdXR0b25TY2hlbWEgPSBkaWFsb2dGb290ZXJCdXR0b25TY2hlbWE7XG4gICAgY29uc3QgZGlhbG9nU2NoZW1hID0gb2JqT2YoW1xuICAgICAgcmVxdWlyZWRTdHJpbmcoJ3RpdGxlJyksXG4gICAgICByZXF1aXJlZE9mKCdib2R5JywgY2hvb3NlJDIoJ3R5cGUnLCB7XG4gICAgICAgIHBhbmVsOiBwYW5lbFNjaGVtYSxcbiAgICAgICAgdGFicGFuZWw6IHRhYlBhbmVsU2NoZW1hXG4gICAgICB9KSksXG4gICAgICBkZWZhdWx0ZWRTdHJpbmcoJ3NpemUnLCAnbm9ybWFsJyksXG4gICAgICBkZWZhdWx0ZWRBcnJheU9mKCdidXR0b25zJywgW10sIGRpYWxvZ0J1dHRvblNjaGVtYSksXG4gICAgICBkZWZhdWx0ZWQoJ2luaXRpYWxEYXRhJywge30pLFxuICAgICAgZGVmYXVsdGVkRnVuY3Rpb24oJ29uQWN0aW9uJywgbm9vcCksXG4gICAgICBkZWZhdWx0ZWRGdW5jdGlvbignb25DaGFuZ2UnLCBub29wKSxcbiAgICAgIGRlZmF1bHRlZEZ1bmN0aW9uKCdvblN1Ym1pdCcsIG5vb3ApLFxuICAgICAgZGVmYXVsdGVkRnVuY3Rpb24oJ29uQ2xvc2UnLCBub29wKSxcbiAgICAgIGRlZmF1bHRlZEZ1bmN0aW9uKCdvbkNhbmNlbCcsIG5vb3ApLFxuICAgICAgZGVmYXVsdGVkRnVuY3Rpb24oJ29uVGFiQ2hhbmdlJywgbm9vcClcbiAgICBdKTtcbiAgICBjb25zdCBjcmVhdGVEaWFsb2cgPSBzcGVjID0+IGFzUmF3KCdkaWFsb2cnLCBkaWFsb2dTY2hlbWEsIHNwZWMpO1xuXG4gICAgY29uc3QgdXJsRGlhbG9nQnV0dG9uU2NoZW1hID0gb2JqT2YoW1xuICAgICAgcmVxdWlyZWRTdHJpbmdFbnVtKCd0eXBlJywgW1xuICAgICAgICAnY2FuY2VsJyxcbiAgICAgICAgJ2N1c3RvbSdcbiAgICAgIF0pLFxuICAgICAgLi4uZGlhbG9nQnV0dG9uRmllbGRzXG4gICAgXSk7XG4gICAgY29uc3QgdXJsRGlhbG9nU2NoZW1hID0gb2JqT2YoW1xuICAgICAgcmVxdWlyZWRTdHJpbmcoJ3RpdGxlJyksXG4gICAgICByZXF1aXJlZFN0cmluZygndXJsJyksXG4gICAgICBvcHRpb25OdW1iZXIoJ2hlaWdodCcpLFxuICAgICAgb3B0aW9uTnVtYmVyKCd3aWR0aCcpLFxuICAgICAgb3B0aW9uQXJyYXlPZignYnV0dG9ucycsIHVybERpYWxvZ0J1dHRvblNjaGVtYSksXG4gICAgICBkZWZhdWx0ZWRGdW5jdGlvbignb25BY3Rpb24nLCBub29wKSxcbiAgICAgIGRlZmF1bHRlZEZ1bmN0aW9uKCdvbkNhbmNlbCcsIG5vb3ApLFxuICAgICAgZGVmYXVsdGVkRnVuY3Rpb24oJ29uQ2xvc2UnLCBub29wKSxcbiAgICAgIGRlZmF1bHRlZEZ1bmN0aW9uKCdvbk1lc3NhZ2UnLCBub29wKVxuICAgIF0pO1xuICAgIGNvbnN0IGNyZWF0ZVVybERpYWxvZyA9IHNwZWMgPT4gYXNSYXcoJ2RpYWxvZycsIHVybERpYWxvZ1NjaGVtYSwgc3BlYyk7XG5cbiAgICBjb25zdCBnZXRBbGxPYmplY3RzID0gb2JqID0+IHtcbiAgICAgIGlmIChpc09iamVjdChvYmopKSB7XG4gICAgICAgIHJldHVybiBbb2JqXS5jb25jYXQoYmluZCQzKHZhbHVlcyhvYmopLCBnZXRBbGxPYmplY3RzKSk7XG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgICAgICByZXR1cm4gYmluZCQzKG9iaiwgZ2V0QWxsT2JqZWN0cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGlzTmFtZWRJdGVtID0gb2JqID0+IGlzU3RyaW5nKG9iai50eXBlKSAmJiBpc1N0cmluZyhvYmoubmFtZSk7XG4gICAgY29uc3QgZGF0YVByb2Nlc3NvcnMgPSB7XG4gICAgICBjaGVja2JveDogY2hlY2tib3hEYXRhUHJvY2Vzc29yLFxuICAgICAgY29sb3JpbnB1dDogY29sb3JJbnB1dERhdGFQcm9jZXNzb3IsXG4gICAgICBjb2xvcnBpY2tlcjogY29sb3JQaWNrZXJEYXRhUHJvY2Vzc29yLFxuICAgICAgZHJvcHpvbmU6IGRyb3Bab25lRGF0YVByb2Nlc3NvcixcbiAgICAgIGlucHV0OiBpbnB1dERhdGFQcm9jZXNzb3IsXG4gICAgICBpZnJhbWU6IGlmcmFtZURhdGFQcm9jZXNzb3IsXG4gICAgICBpbWFnZXByZXZpZXc6IGltYWdlUHJldmlld0RhdGFQcm9jZXNzb3IsXG4gICAgICBzZWxlY3Rib3g6IHNlbGVjdEJveERhdGFQcm9jZXNzb3IsXG4gICAgICBzaXplaW5wdXQ6IHNpemVJbnB1dERhdGFQcm9jZXNzb3IsXG4gICAgICBzbGlkZXI6IHNsaWRlcklucHV0RGF0YVByb2Nlc3NvcixcbiAgICAgIGxpc3Rib3g6IGxpc3RCb3hEYXRhUHJvY2Vzc29yLFxuICAgICAgc2l6ZTogc2l6ZUlucHV0RGF0YVByb2Nlc3NvcixcbiAgICAgIHRleHRhcmVhOiB0ZXh0QXJlYURhdGFQcm9jZXNzb3IsXG4gICAgICB1cmxpbnB1dDogdXJsSW5wdXREYXRhUHJvY2Vzc29yLFxuICAgICAgY3VzdG9tZWRpdG9yOiBjdXN0b21FZGl0b3JEYXRhUHJvY2Vzc29yLFxuICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvbkRhdGFQcm9jZXNzb3IsXG4gICAgICB0b2dnbGVtZW51aXRlbTogZGlhbG9nVG9nZ2xlTWVudUl0ZW1EYXRhUHJvY2Vzc29yXG4gICAgfTtcbiAgICBjb25zdCBnZXREYXRhUHJvY2Vzc29yID0gaXRlbSA9PiBPcHRpb25hbC5mcm9tKGRhdGFQcm9jZXNzb3JzW2l0ZW0udHlwZV0pO1xuICAgIGNvbnN0IGdldE5hbWVkSXRlbXMgPSBzdHJ1Y3R1cmUgPT4gZmlsdGVyJDIoZ2V0QWxsT2JqZWN0cyhzdHJ1Y3R1cmUpLCBpc05hbWVkSXRlbSk7XG5cbiAgICBjb25zdCBjcmVhdGVEYXRhVmFsaWRhdG9yID0gc3RydWN0dXJlID0+IHtcbiAgICAgIGNvbnN0IG5hbWVkSXRlbXMgPSBnZXROYW1lZEl0ZW1zKHN0cnVjdHVyZSk7XG4gICAgICBjb25zdCBmaWVsZHMgPSBiaW5kJDMobmFtZWRJdGVtcywgaXRlbSA9PiBnZXREYXRhUHJvY2Vzc29yKGl0ZW0pLmZvbGQoKCkgPT4gW10sIHNjaGVtYSA9PiBbcmVxdWlyZWRPZihpdGVtLm5hbWUsIHNjaGVtYSldKSk7XG4gICAgICByZXR1cm4gb2JqT2YoZmllbGRzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZXh0cmFjdCA9IHN0cnVjdHVyZSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBpbnRlcm5hbERpYWxvZyA9IGdldE9yRGllKGNyZWF0ZURpYWxvZyhzdHJ1Y3R1cmUpKTtcbiAgICAgIGNvbnN0IGRhdGFWYWxpZGF0b3IgPSBjcmVhdGVEYXRhVmFsaWRhdG9yKHN0cnVjdHVyZSk7XG4gICAgICBjb25zdCBpbml0aWFsRGF0YSA9IChfYSA9IHN0cnVjdHVyZS5pbml0aWFsRGF0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge307XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnRlcm5hbERpYWxvZyxcbiAgICAgICAgZGF0YVZhbGlkYXRvcixcbiAgICAgICAgaW5pdGlhbERhdGFcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBEaWFsb2dNYW5hZ2VyID0ge1xuICAgICAgb3BlbjogKGZhY3RvcnksIHN0cnVjdHVyZSkgPT4ge1xuICAgICAgICBjb25zdCBleHRyYWN0aW9uID0gZXh0cmFjdChzdHJ1Y3R1cmUpO1xuICAgICAgICByZXR1cm4gZmFjdG9yeShleHRyYWN0aW9uLmludGVybmFsRGlhbG9nLCBleHRyYWN0aW9uLmluaXRpYWxEYXRhLCBleHRyYWN0aW9uLmRhdGFWYWxpZGF0b3IpO1xuICAgICAgfSxcbiAgICAgIG9wZW5Vcmw6IChmYWN0b3J5LCBzdHJ1Y3R1cmUpID0+IHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxEaWFsb2cgPSBnZXRPckRpZShjcmVhdGVVcmxEaWFsb2coc3RydWN0dXJlKSk7XG4gICAgICAgIHJldHVybiBmYWN0b3J5KGludGVybmFsRGlhbG9nKTtcbiAgICAgIH0sXG4gICAgICByZWRpYWw6IHN0cnVjdHVyZSA9PiBleHRyYWN0KHN0cnVjdHVyZSlcbiAgICB9O1xuXG4gICAgY29uc3QgZXZlbnRzID0gKHJlZmxlY3RpbmdDb25maWcsIHJlZmxlY3RpbmdTdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlID0gKGNvbXBvbmVudCwgZGF0YSkgPT4ge1xuICAgICAgICByZWZsZWN0aW5nQ29uZmlnLnVwZGF0ZVN0YXRlLmVhY2godXBkYXRlU3RhdGUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld1N0YXRlID0gdXBkYXRlU3RhdGUoY29tcG9uZW50LCBkYXRhKTtcbiAgICAgICAgICByZWZsZWN0aW5nU3RhdGUuc2V0KG5ld1N0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlZmxlY3RpbmdDb25maWcucmVuZGVyQ29tcG9uZW50cy5lYWNoKHJlbmRlckNvbXBvbmVudHMgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0NvbXBvbmVudHMgPSByZW5kZXJDb21wb25lbnRzKGRhdGEsIHJlZmxlY3RpbmdTdGF0ZS5nZXQoKSk7XG4gICAgICAgICAgY29uc3QgcmVwbGFjZXIgPSByZWZsZWN0aW5nQ29uZmlnLnJldXNlRG9tID8gd2l0aFJldXNlIDogd2l0aG91dFJldXNlO1xuICAgICAgICAgIHJlcGxhY2VyKGNvbXBvbmVudCwgbmV3Q29tcG9uZW50cyk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBkZXJpdmUkMihbXG4gICAgICAgIHJ1biQxKHJlY2VpdmUoKSwgKGNvbXBvbmVudCwgbWVzc2FnZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlY2VpdmluZ0RhdGEgPSBtZXNzYWdlO1xuICAgICAgICAgIGlmICghcmVjZWl2aW5nRGF0YS51bml2ZXJzYWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5uZWwgPSByZWZsZWN0aW5nQ29uZmlnLmNoYW5uZWw7XG4gICAgICAgICAgICBpZiAoY29udGFpbnMkMihyZWNlaXZpbmdEYXRhLmNoYW5uZWxzLCBjaGFubmVsKSkge1xuICAgICAgICAgICAgICB1cGRhdGUoY29tcG9uZW50LCByZWNlaXZpbmdEYXRhLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHJ1bk9uQXR0YWNoZWQoKGNvbXAsIF9zZSkgPT4ge1xuICAgICAgICAgIHJlZmxlY3RpbmdDb25maWcuaW5pdGlhbERhdGEuZWFjaChyYXdEYXRhID0+IHtcbiAgICAgICAgICAgIHVwZGF0ZShjb21wLCByYXdEYXRhKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgIF0pO1xuICAgIH07XG5cbiAgICB2YXIgQWN0aXZlUmVmbGVjdGluZyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBldmVudHM6IGV2ZW50c1xuICAgIH0pO1xuXG4gICAgY29uc3QgZ2V0U3RhdGUgPSAoY29tcG9uZW50LCByZXBsYWNlQ29uZmlnLCByZWZsZWN0U3RhdGUpID0+IHJlZmxlY3RTdGF0ZTtcblxuICAgIHZhciBSZWZsZWN0aW5nQXBpcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBnZXRTdGF0ZTogZ2V0U3RhdGVcbiAgICB9KTtcblxuICAgIHZhciBSZWZsZWN0aW5nU2NoZW1hID0gW1xuICAgICAgcmVxdWlyZWQkMSgnY2hhbm5lbCcpLFxuICAgICAgb3B0aW9uJDMoJ3JlbmRlckNvbXBvbmVudHMnKSxcbiAgICAgIG9wdGlvbiQzKCd1cGRhdGVTdGF0ZScpLFxuICAgICAgb3B0aW9uJDMoJ2luaXRpYWxEYXRhJyksXG4gICAgICBkZWZhdWx0ZWRCb29sZWFuKCdyZXVzZURvbScsIHRydWUpXG4gICAgXTtcblxuICAgIGNvbnN0IGluaXQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjZWxsID0gQ2VsbChPcHRpb25hbC5ub25lKCkpO1xuICAgICAgY29uc3QgY2xlYXIgPSAoKSA9PiBjZWxsLnNldChPcHRpb25hbC5ub25lKCkpO1xuICAgICAgY29uc3QgcmVhZFN0YXRlID0gKCkgPT4gY2VsbC5nZXQoKS5nZXRPcignbm9uZScpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVhZFN0YXRlLFxuICAgICAgICBnZXQ6IGNlbGwuZ2V0LFxuICAgICAgICBzZXQ6IGNlbGwuc2V0LFxuICAgICAgICBjbGVhclxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgdmFyIFJlZmxlY3RpbmdTdGF0ZSA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBpbml0OiBpbml0XG4gICAgfSk7XG5cbiAgICBjb25zdCBSZWZsZWN0aW5nID0gY3JlYXRlJDQoe1xuICAgICAgZmllbGRzOiBSZWZsZWN0aW5nU2NoZW1hLFxuICAgICAgbmFtZTogJ3JlZmxlY3RpbmcnLFxuICAgICAgYWN0aXZlOiBBY3RpdmVSZWZsZWN0aW5nLFxuICAgICAgYXBpczogUmVmbGVjdGluZ0FwaXMsXG4gICAgICBzdGF0ZTogUmVmbGVjdGluZ1N0YXRlXG4gICAgfSk7XG5cbiAgICBjb25zdCB0b1ZhbGlkVmFsdWVzID0gdmFsdWVzID0+IHtcbiAgICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICBlYWNoKHZhbHVlcywgKHZhbHVlLCBuYW1lKSA9PiB7XG4gICAgICAgIHZhbHVlLmZvbGQoKCkgPT4ge1xuICAgICAgICAgIGVycm9ycy5wdXNoKG5hbWUpO1xuICAgICAgICB9LCB2ID0+IHtcbiAgICAgICAgICByZXN1bHRbbmFtZV0gPSB2O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGVycm9ycy5sZW5ndGggPiAwID8gUmVzdWx0LmVycm9yKGVycm9ycykgOiBSZXN1bHQudmFsdWUocmVzdWx0KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVyQm9keVBhbmVsID0gKHNwZWMsIGRpYWxvZ0RhdGEsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgbWVtRm9ybSA9IHJlY29yZChGb3JtLnNrZXRjaChwYXJ0cyA9PiAoe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LWZvcm0nXS5jb25jYXQoc3BlYy5jbGFzc2VzKVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBtYXAkMihzcGVjLml0ZW1zLCBpdGVtID0+IGludGVycHJldEluRm9ybShwYXJ0cywgaXRlbSwgZGlhbG9nRGF0YSwgYmFja3N0YWdlKSlcbiAgICAgIH0pKSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LWRpYWxvZ19fYm9keSddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFt7XG4gICAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgICAgY2xhc3NlczogWyd0b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQnXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IFttZW1Gb3JtLmFzU3BlYygpXVxuICAgICAgICAgIH1dLFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBtb2RlOiAnYWN5Y2xpYycsXG4gICAgICAgICAgICB1c2VUYWJzdG9wQXQ6IG5vdChpc1BzZXVkb1N0b3ApXG4gICAgICAgICAgfSksXG4gICAgICAgICAgQ29tcG9zaW5nQ29uZmlncy5tZW1lbnRvKG1lbUZvcm0pLFxuICAgICAgICAgIG1lbWVudG8obWVtRm9ybSwge1xuICAgICAgICAgICAgcG9zdHByb2Nlc3M6IGZvcm1WYWx1ZSA9PiB0b1ZhbGlkVmFsdWVzKGZvcm1WYWx1ZSkuZm9sZChlcnIgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH0sIGlkZW50aXR5KVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNvbmZpZygnZGlhbG9nLWJvZHktcGFuZWwnLCBbcnVuJDEoZm9jdXNpbigpLCAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgICAgICAgY29tcC5nZXRTeXN0ZW0oKS5icm9hZGNhc3RPbihbZGlhbG9nRm9jdXNTaGlmdGVkQ2hhbm5lbF0sIHsgbmV3Rm9jdXM6IE9wdGlvbmFsLnNvbWUoc2UuZXZlbnQudGFyZ2V0KSB9KTtcbiAgICAgICAgICAgIH0pXSlcbiAgICAgICAgXSlcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGZhY3RvcnkkMyA9IChkZXRhaWwsIF9zcGVjKSA9PiAoe1xuICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgY29tcG9uZW50czogZGV0YWlsLmNvbXBvbmVudHMsXG4gICAgICBldmVudHM6IGV2ZW50cyRhKGRldGFpbC5hY3Rpb24pLFxuICAgICAgYmVoYXZpb3VyczogYXVnbWVudChkZXRhaWwudGFiQnV0dG9uQmVoYXZpb3VycywgW1xuICAgICAgICBGb2N1c2luZy5jb25maWcoe30pLFxuICAgICAgICBLZXlpbmcuY29uZmlnKHtcbiAgICAgICAgICBtb2RlOiAnZXhlY3V0aW9uJyxcbiAgICAgICAgICB1c2VTcGFjZTogdHJ1ZSxcbiAgICAgICAgICB1c2VFbnRlcjogdHJ1ZVxuICAgICAgICB9KSxcbiAgICAgICAgUmVwcmVzZW50aW5nLmNvbmZpZyh7XG4gICAgICAgICAgc3RvcmU6IHtcbiAgICAgICAgICAgIG1vZGU6ICdtZW1vcnknLFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiBkZXRhaWwudmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICBdKSxcbiAgICAgIGRvbU1vZGlmaWNhdGlvbjogZGV0YWlsLmRvbU1vZGlmaWNhdGlvblxuICAgIH0pO1xuICAgIGNvbnN0IFRhYkJ1dHRvbiA9IHNpbmdsZSh7XG4gICAgICBuYW1lOiAnVGFiQnV0dG9uJyxcbiAgICAgIGNvbmZpZ0ZpZWxkczogW1xuICAgICAgICBkZWZhdWx0ZWQoJ3VpZCcsIHVuZGVmaW5lZCksXG4gICAgICAgIHJlcXVpcmVkJDEoJ3ZhbHVlJyksXG4gICAgICAgIGZpZWxkJDEoJ2RvbScsICdkb20nLCBtZXJnZVdpdGhUaHVuaygoKSA9PiAoe1xuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICdyb2xlJzogJ3RhYicsXG4gICAgICAgICAgICAnaWQnOiBnZW5lcmF0ZSQ2KCdhcmlhJyksXG4gICAgICAgICAgICAnYXJpYS1zZWxlY3RlZCc6ICdmYWxzZSdcbiAgICAgICAgICB9XG4gICAgICAgIH0pKSwgYW55VmFsdWUoKSksXG4gICAgICAgIG9wdGlvbiQzKCdhY3Rpb24nKSxcbiAgICAgICAgZGVmYXVsdGVkKCdkb21Nb2RpZmljYXRpb24nLCB7fSksXG4gICAgICAgIGZpZWxkKCd0YWJCdXR0b25CZWhhdmlvdXJzJywgW1xuICAgICAgICAgIEZvY3VzaW5nLFxuICAgICAgICAgIEtleWluZyxcbiAgICAgICAgICBSZXByZXNlbnRpbmdcbiAgICAgICAgXSksXG4gICAgICAgIHJlcXVpcmVkJDEoJ3ZpZXcnKVxuICAgICAgXSxcbiAgICAgIGZhY3Rvcnk6IGZhY3RvcnkkM1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc2NoZW1hJDEgPSBjb25zdGFudCQxKFtcbiAgICAgIHJlcXVpcmVkJDEoJ3RhYnMnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ2RvbScpLFxuICAgICAgZGVmYXVsdGVkKCdjbGlja1RvRGlzbWlzcycsIGZhbHNlKSxcbiAgICAgIGZpZWxkKCd0YWJiYXJCZWhhdmlvdXJzJywgW1xuICAgICAgICBIaWdobGlnaHRpbmcsXG4gICAgICAgIEtleWluZ1xuICAgICAgXSksXG4gICAgICBtYXJrZXJzJDEoW1xuICAgICAgICAndGFiQ2xhc3MnLFxuICAgICAgICAnc2VsZWN0ZWRDbGFzcydcbiAgICAgIF0pXG4gICAgXSk7XG4gICAgY29uc3QgdGFic1BhcnQgPSBncm91cCh7XG4gICAgICBmYWN0b3J5OiBUYWJCdXR0b24sXG4gICAgICBuYW1lOiAndGFicycsXG4gICAgICB1bml0OiAndGFiJyxcbiAgICAgIG92ZXJyaWRlczogYmFyRGV0YWlsID0+IHtcbiAgICAgICAgY29uc3QgZGlzbWlzc1RhYiQxID0gKHRhYmJhciwgYnV0dG9uKSA9PiB7XG4gICAgICAgICAgSGlnaGxpZ2h0aW5nLmRlaGlnaGxpZ2h0KHRhYmJhciwgYnV0dG9uKTtcbiAgICAgICAgICBlbWl0V2l0aCh0YWJiYXIsIGRpc21pc3NUYWIoKSwge1xuICAgICAgICAgICAgdGFiYmFyLFxuICAgICAgICAgICAgYnV0dG9uXG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNoYW5nZVRhYiQxID0gKHRhYmJhciwgYnV0dG9uKSA9PiB7XG4gICAgICAgICAgSGlnaGxpZ2h0aW5nLmhpZ2hsaWdodCh0YWJiYXIsIGJ1dHRvbik7XG4gICAgICAgICAgZW1pdFdpdGgodGFiYmFyLCBjaGFuZ2VUYWIoKSwge1xuICAgICAgICAgICAgdGFiYmFyLFxuICAgICAgICAgICAgYnV0dG9uXG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWN0aW9uOiBidXR0b24gPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFiYmFyID0gYnV0dG9uLmdldFN5c3RlbSgpLmdldEJ5VWlkKGJhckRldGFpbC51aWQpLmdldE9yRGllKCk7XG4gICAgICAgICAgICBjb25zdCBhY3RpdmVCdXR0b24gPSBIaWdobGlnaHRpbmcuaXNIaWdobGlnaHRlZCh0YWJiYXIsIGJ1dHRvbik7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9ICgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChhY3RpdmVCdXR0b24gJiYgYmFyRGV0YWlsLmNsaWNrVG9EaXNtaXNzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpc21pc3NUYWIkMTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICghYWN0aXZlQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZVRhYiQxO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBub29wO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgcmVzcG9uc2UodGFiYmFyLCBidXR0b24pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZG9tTW9kaWZpY2F0aW9uOiB7IGNsYXNzZXM6IFtiYXJEZXRhaWwubWFya2Vycy50YWJDbGFzc10gfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHBhcnRzJDEgPSBjb25zdGFudCQxKFt0YWJzUGFydF0pO1xuXG4gICAgY29uc3QgZmFjdG9yeSQyID0gKGRldGFpbCwgY29tcG9uZW50cywgX3NwZWMsIF9leHRlcm5hbHMpID0+ICh7XG4gICAgICAndWlkJzogZGV0YWlsLnVpZCxcbiAgICAgICdkb20nOiBkZXRhaWwuZG9tLFxuICAgICAgY29tcG9uZW50cyxcbiAgICAgICdkZWJ1Zy5za2V0Y2hlcic6ICdUYWJiYXInLFxuICAgICAgJ2RvbU1vZGlmaWNhdGlvbic6IHsgYXR0cmlidXRlczogeyByb2xlOiAndGFibGlzdCcgfSB9LFxuICAgICAgJ2JlaGF2aW91cnMnOiBhdWdtZW50KGRldGFpbC50YWJiYXJCZWhhdmlvdXJzLCBbXG4gICAgICAgIEhpZ2hsaWdodGluZy5jb25maWcoe1xuICAgICAgICAgIGhpZ2hsaWdodENsYXNzOiBkZXRhaWwubWFya2Vycy5zZWxlY3RlZENsYXNzLFxuICAgICAgICAgIGl0ZW1DbGFzczogZGV0YWlsLm1hcmtlcnMudGFiQ2xhc3MsXG4gICAgICAgICAgb25IaWdobGlnaHQ6ICh0YWJiYXIsIHRhYikgPT4ge1xuICAgICAgICAgICAgc2V0JDkodGFiLmVsZW1lbnQsICdhcmlhLXNlbGVjdGVkJywgJ3RydWUnKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uRGVoaWdobGlnaHQ6ICh0YWJiYXIsIHRhYikgPT4ge1xuICAgICAgICAgICAgc2V0JDkodGFiLmVsZW1lbnQsICdhcmlhLXNlbGVjdGVkJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgbW9kZTogJ2Zsb3cnLFxuICAgICAgICAgIGdldEluaXRpYWw6IHRhYmJhciA9PiB7XG4gICAgICAgICAgICByZXR1cm4gSGlnaGxpZ2h0aW5nLmdldEhpZ2hsaWdodGVkKHRhYmJhcikubWFwKHRhYiA9PiB0YWIuZWxlbWVudCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3RvcjogJy4nICsgZGV0YWlsLm1hcmtlcnMudGFiQ2xhc3MsXG4gICAgICAgICAgZXhlY3V0ZU9uTW92ZTogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgXSlcbiAgICB9KTtcbiAgICBjb25zdCBUYWJiYXIgPSBjb21wb3NpdGUoe1xuICAgICAgbmFtZTogJ1RhYmJhcicsXG4gICAgICBjb25maWdGaWVsZHM6IHNjaGVtYSQxKCksXG4gICAgICBwYXJ0RmllbGRzOiBwYXJ0cyQxKCksXG4gICAgICBmYWN0b3J5OiBmYWN0b3J5JDJcbiAgICB9KTtcblxuICAgIGNvbnN0IGZhY3RvcnkkMSA9IChkZXRhaWwsIF9zcGVjKSA9PiAoe1xuICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgYmVoYXZpb3VyczogYXVnbWVudChkZXRhaWwudGFidmlld0JlaGF2aW91cnMsIFtSZXBsYWNpbmcuY29uZmlnKHt9KV0pLFxuICAgICAgZG9tTW9kaWZpY2F0aW9uOiB7IGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3RhYnBhbmVsJyB9IH1cbiAgICB9KTtcbiAgICBjb25zdCBUYWJ2aWV3ID0gc2luZ2xlKHtcbiAgICAgIG5hbWU6ICdUYWJ2aWV3JyxcbiAgICAgIGNvbmZpZ0ZpZWxkczogW2ZpZWxkKCd0YWJ2aWV3QmVoYXZpb3VycycsIFtSZXBsYWNpbmddKV0sXG4gICAgICBmYWN0b3J5OiBmYWN0b3J5JDFcbiAgICB9KTtcblxuICAgIGNvbnN0IHNjaGVtYSA9IGNvbnN0YW50JDEoW1xuICAgICAgZGVmYXVsdGVkKCdzZWxlY3RGaXJzdCcsIHRydWUpLFxuICAgICAgb25IYW5kbGVyKCdvbkNoYW5nZVRhYicpLFxuICAgICAgb25IYW5kbGVyKCdvbkRpc21pc3NUYWInKSxcbiAgICAgIGRlZmF1bHRlZCgndGFicycsIFtdKSxcbiAgICAgIGZpZWxkKCd0YWJTZWN0aW9uQmVoYXZpb3VycycsIFtdKVxuICAgIF0pO1xuICAgIGNvbnN0IGJhclBhcnQgPSByZXF1aXJlZCh7XG4gICAgICBmYWN0b3J5OiBUYWJiYXIsXG4gICAgICBzY2hlbWE6IFtcbiAgICAgICAgcmVxdWlyZWQkMSgnZG9tJyksXG4gICAgICAgIHJlcXVpcmVkT2JqT2YoJ21hcmtlcnMnLCBbXG4gICAgICAgICAgcmVxdWlyZWQkMSgndGFiQ2xhc3MnKSxcbiAgICAgICAgICByZXF1aXJlZCQxKCdzZWxlY3RlZENsYXNzJylcbiAgICAgICAgXSlcbiAgICAgIF0sXG4gICAgICBuYW1lOiAndGFiYmFyJyxcbiAgICAgIGRlZmF1bHRzOiBkZXRhaWwgPT4ge1xuICAgICAgICByZXR1cm4geyB0YWJzOiBkZXRhaWwudGFicyB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHZpZXdQYXJ0ID0gcmVxdWlyZWQoe1xuICAgICAgZmFjdG9yeTogVGFidmlldyxcbiAgICAgIG5hbWU6ICd0YWJ2aWV3J1xuICAgIH0pO1xuICAgIGNvbnN0IHBhcnRzID0gY29uc3RhbnQkMShbXG4gICAgICBiYXJQYXJ0LFxuICAgICAgdmlld1BhcnRcbiAgICBdKTtcblxuICAgIGNvbnN0IGZhY3RvcnkgPSAoZGV0YWlsLCBjb21wb25lbnRzLCBfc3BlYywgX2V4dGVybmFscykgPT4ge1xuICAgICAgY29uc3QgY2hhbmdlVGFiJDEgPSBidXR0b24gPT4ge1xuICAgICAgICBjb25zdCB0YWJWYWx1ZSA9IFJlcHJlc2VudGluZy5nZXRWYWx1ZShidXR0b24pO1xuICAgICAgICBnZXRQYXJ0KGJ1dHRvbiwgZGV0YWlsLCAndGFidmlldycpLmVhY2godGFidmlldyA9PiB7XG4gICAgICAgICAgY29uc3QgdGFiV2l0aFZhbHVlID0gZmluZCQ1KGRldGFpbC50YWJzLCB0ID0+IHQudmFsdWUgPT09IHRhYlZhbHVlKTtcbiAgICAgICAgICB0YWJXaXRoVmFsdWUuZWFjaCh0YWJEYXRhID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhbmVsID0gdGFiRGF0YS52aWV3KCk7XG4gICAgICAgICAgICBnZXRPcHQoYnV0dG9uLmVsZW1lbnQsICdpZCcpLmVhY2goaWQgPT4ge1xuICAgICAgICAgICAgICBzZXQkOSh0YWJ2aWV3LmVsZW1lbnQsICdhcmlhLWxhYmVsbGVkYnknLCBpZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFJlcGxhY2luZy5zZXQodGFidmlldywgcGFuZWwpO1xuICAgICAgICAgICAgZGV0YWlsLm9uQ2hhbmdlVGFiKHRhYnZpZXcsIGJ1dHRvbiwgcGFuZWwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjaGFuZ2VUYWJCeSA9IChzZWN0aW9uLCBieVByZWQpID0+IHtcbiAgICAgICAgZ2V0UGFydChzZWN0aW9uLCBkZXRhaWwsICd0YWJiYXInKS5lYWNoKHRhYmJhciA9PiB7XG4gICAgICAgICAgYnlQcmVkKHRhYmJhcikuZWFjaChlbWl0RXhlY3V0ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVpZDogZGV0YWlsLnVpZCxcbiAgICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICBiZWhhdmlvdXJzOiBnZXQkMyhkZXRhaWwudGFiU2VjdGlvbkJlaGF2aW91cnMpLFxuICAgICAgICBldmVudHM6IGRlcml2ZSQyKGZsYXR0ZW4oW1xuICAgICAgICAgIGRldGFpbC5zZWxlY3RGaXJzdCA/IFtydW5PbkF0dGFjaGVkKChzZWN0aW9uLCBfc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgY2hhbmdlVGFiQnkoc2VjdGlvbiwgSGlnaGxpZ2h0aW5nLmdldEZpcnN0KTtcbiAgICAgICAgICAgIH0pXSA6IFtdLFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIHJ1biQxKGNoYW5nZVRhYigpLCAoc2VjdGlvbiwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gc2ltdWxhdGVkRXZlbnQuZXZlbnQuYnV0dG9uO1xuICAgICAgICAgICAgICBjaGFuZ2VUYWIkMShidXR0b24pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBydW4kMShkaXNtaXNzVGFiKCksIChzZWN0aW9uLCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBidXR0b24gPSBzaW11bGF0ZWRFdmVudC5ldmVudC5idXR0b247XG4gICAgICAgICAgICAgIGRldGFpbC5vbkRpc21pc3NUYWIoc2VjdGlvbiwgYnV0dG9uKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICBdKSksXG4gICAgICAgIGFwaXM6IHtcbiAgICAgICAgICBnZXRWaWV3SXRlbXM6IHNlY3Rpb24gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGdldFBhcnQoc2VjdGlvbiwgZGV0YWlsLCAndGFidmlldycpLm1hcCh0YWJ2aWV3ID0+IFJlcGxhY2luZy5jb250ZW50cyh0YWJ2aWV3KSkuZ2V0T3IoW10pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc2hvd1RhYjogKHNlY3Rpb24sIHRhYktleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2V0VGFiSWZOb3RBY3RpdmUgPSB0YWJiYXIgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVzID0gSGlnaGxpZ2h0aW5nLmdldENhbmRpZGF0ZXModGFiYmFyKTtcbiAgICAgICAgICAgICAgY29uc3Qgb3B0VGFiID0gZmluZCQ1KGNhbmRpZGF0ZXMsIGMgPT4gUmVwcmVzZW50aW5nLmdldFZhbHVlKGMpID09PSB0YWJLZXkpO1xuICAgICAgICAgICAgICByZXR1cm4gb3B0VGFiLmZpbHRlcih0YWIgPT4gIUhpZ2hsaWdodGluZy5pc0hpZ2hsaWdodGVkKHRhYmJhciwgdGFiKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2hhbmdlVGFiQnkoc2VjdGlvbiwgZ2V0VGFiSWZOb3RBY3RpdmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IFRhYlNlY3Rpb24gPSBjb21wb3NpdGUoe1xuICAgICAgbmFtZTogJ1RhYlNlY3Rpb24nLFxuICAgICAgY29uZmlnRmllbGRzOiBzY2hlbWEoKSxcbiAgICAgIHBhcnRGaWVsZHM6IHBhcnRzKCksXG4gICAgICBmYWN0b3J5LFxuICAgICAgYXBpczoge1xuICAgICAgICBnZXRWaWV3SXRlbXM6IChhcGlzLCBjb21wb25lbnQpID0+IGFwaXMuZ2V0Vmlld0l0ZW1zKGNvbXBvbmVudCksXG4gICAgICAgIHNob3dUYWI6IChhcGlzLCBjb21wb25lbnQsIHRhYktleSkgPT4ge1xuICAgICAgICAgIGFwaXMuc2hvd1RhYihjb21wb25lbnQsIHRhYktleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IG1lYXN1cmVIZWlnaHRzID0gKGFsbFRhYnMsIHRhYnZpZXcsIHRhYnZpZXdDb21wKSA9PiBtYXAkMihhbGxUYWJzLCAoX3RhYiwgaSkgPT4ge1xuICAgICAgUmVwbGFjaW5nLnNldCh0YWJ2aWV3Q29tcCwgYWxsVGFic1tpXS52aWV3KCkpO1xuICAgICAgY29uc3QgcmVjdCA9IHRhYnZpZXcuZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgUmVwbGFjaW5nLnNldCh0YWJ2aWV3Q29tcCwgW10pO1xuICAgICAgcmV0dXJuIHJlY3QuaGVpZ2h0O1xuICAgIH0pO1xuICAgIGNvbnN0IGdldE1heEhlaWdodCA9IGhlaWdodHMgPT4gaGVhZChzb3J0KGhlaWdodHMsIChhLCBiKSA9PiB7XG4gICAgICBpZiAoYSA+IGIpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIGlmIChhIDwgYikge1xuICAgICAgICByZXR1cm4gKzE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9KSk7XG4gICAgY29uc3QgZ2V0TWF4VGFidmlld0hlaWdodCA9IChkaWFsb2csIHRhYnZpZXcsIHRhYmxpc3QpID0+IHtcbiAgICAgIGNvbnN0IGRvY3VtZW50RWxlbWVudCQxID0gZG9jdW1lbnRFbGVtZW50KGRpYWxvZykuZG9tO1xuICAgICAgY29uc3Qgcm9vdEVsbSA9IGFuY2VzdG9yKGRpYWxvZywgJy50b3gtZGlhbG9nLXdyYXAnKS5nZXRPcihkaWFsb2cpO1xuICAgICAgY29uc3QgaXNGaXhlZCA9IGdldCRlKHJvb3RFbG0sICdwb3NpdGlvbicpID09PSAnZml4ZWQnO1xuICAgICAgbGV0IG1heEhlaWdodDtcbiAgICAgIGlmIChpc0ZpeGVkKSB7XG4gICAgICAgIG1heEhlaWdodCA9IE1hdGgubWF4KGRvY3VtZW50RWxlbWVudCQxLmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1heEhlaWdodCA9IE1hdGgubWF4KGRvY3VtZW50RWxlbWVudCQxLm9mZnNldEhlaWdodCwgZG9jdW1lbnRFbGVtZW50JDEuc2Nyb2xsSGVpZ2h0KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRhYnZpZXdIZWlnaHQgPSBnZXQkZCh0YWJ2aWV3KTtcbiAgICAgIGNvbnN0IGlzVGFiTGlzdEJlc2lkZSA9IHRhYnZpZXcuZG9tLm9mZnNldExlZnQgPj0gdGFibGlzdC5kb20ub2Zmc2V0TGVmdCArIGdldCRjKHRhYmxpc3QpO1xuICAgICAgY29uc3QgY3VycmVudFRhYkhlaWdodCA9IGlzVGFiTGlzdEJlc2lkZSA/IE1hdGgubWF4KGdldCRkKHRhYmxpc3QpLCB0YWJ2aWV3SGVpZ2h0KSA6IHRhYnZpZXdIZWlnaHQ7XG4gICAgICBjb25zdCBkaWFsb2dUb3BNYXJnaW4gPSBwYXJzZUludChnZXQkZShkaWFsb2csICdtYXJnaW4tdG9wJyksIDEwKSB8fCAwO1xuICAgICAgY29uc3QgZGlhbG9nQm90dG9tTWFyZ2luID0gcGFyc2VJbnQoZ2V0JGUoZGlhbG9nLCAnbWFyZ2luLWJvdHRvbScpLCAxMCkgfHwgMDtcbiAgICAgIGNvbnN0IGRpYWxvZ0hlaWdodCA9IGdldCRkKGRpYWxvZykgKyBkaWFsb2dUb3BNYXJnaW4gKyBkaWFsb2dCb3R0b21NYXJnaW47XG4gICAgICBjb25zdCBjaHJvbWVIZWlnaHQgPSBkaWFsb2dIZWlnaHQgLSBjdXJyZW50VGFiSGVpZ2h0O1xuICAgICAgcmV0dXJuIG1heEhlaWdodCAtIGNocm9tZUhlaWdodDtcbiAgICB9O1xuICAgIGNvbnN0IHNob3dUYWIgPSAoYWxsVGFicywgY29tcCkgPT4ge1xuICAgICAgaGVhZChhbGxUYWJzKS5lYWNoKHRhYiA9PiBUYWJTZWN0aW9uLnNob3dUYWIoY29tcCwgdGFiLnZhbHVlKSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRUYWJ2aWV3SGVpZ2h0ID0gKHRhYnZpZXcsIGhlaWdodCkgPT4ge1xuICAgICAgc2V0JDgodGFidmlldywgJ2hlaWdodCcsIGhlaWdodCArICdweCcpO1xuICAgICAgc2V0JDgodGFidmlldywgJ2ZsZXgtYmFzaXMnLCBoZWlnaHQgKyAncHgnKTtcbiAgICB9O1xuICAgIGNvbnN0IHVwZGF0ZVRhYnZpZXdIZWlnaHQgPSAoZGlhbG9nQm9keSwgdGFidmlldywgbWF4VGFiSGVpZ2h0KSA9PiB7XG4gICAgICBhbmNlc3RvcihkaWFsb2dCb2R5LCAnW3JvbGU9XCJkaWFsb2dcIl0nKS5lYWNoKGRpYWxvZyA9PiB7XG4gICAgICAgIGRlc2NlbmRhbnQoZGlhbG9nLCAnW3JvbGU9XCJ0YWJsaXN0XCJdJykuZWFjaCh0YWJsaXN0ID0+IHtcbiAgICAgICAgICBtYXhUYWJIZWlnaHQuZ2V0KCkubWFwKGhlaWdodCA9PiB7XG4gICAgICAgICAgICBzZXQkOCh0YWJ2aWV3LCAnaGVpZ2h0JywgJzAnKTtcbiAgICAgICAgICAgIHNldCQ4KHRhYnZpZXcsICdmbGV4LWJhc2lzJywgJzAnKTtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihoZWlnaHQsIGdldE1heFRhYnZpZXdIZWlnaHQoZGlhbG9nLCB0YWJ2aWV3LCB0YWJsaXN0KSk7XG4gICAgICAgICAgfSkuZWFjaChoZWlnaHQgPT4ge1xuICAgICAgICAgICAgc2V0VGFidmlld0hlaWdodCh0YWJ2aWV3LCBoZWlnaHQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0VGFidmlldyA9IGRpYWxvZyA9PiBkZXNjZW5kYW50KGRpYWxvZywgJ1tyb2xlPVwidGFicGFuZWxcIl0nKTtcbiAgICBjb25zdCBzbWFydE1vZGUgPSBhbGxUYWJzID0+IHtcbiAgICAgIGNvbnN0IG1heFRhYkhlaWdodCA9IHZhbHVlJDIoKTtcbiAgICAgIGNvbnN0IGV4dHJhRXZlbnRzID0gW1xuICAgICAgICBydW5PbkF0dGFjaGVkKGNvbXAgPT4ge1xuICAgICAgICAgIGNvbnN0IGRpYWxvZyA9IGNvbXAuZWxlbWVudDtcbiAgICAgICAgICBnZXRUYWJ2aWV3KGRpYWxvZykuZWFjaCh0YWJ2aWV3ID0+IHtcbiAgICAgICAgICAgIHNldCQ4KHRhYnZpZXcsICd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuICAgICAgICAgICAgY29tcC5nZXRTeXN0ZW0oKS5nZXRCeURvbSh0YWJ2aWV3KS50b09wdGlvbmFsKCkuZWFjaCh0YWJ2aWV3Q29tcCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGhlaWdodHMgPSBtZWFzdXJlSGVpZ2h0cyhhbGxUYWJzLCB0YWJ2aWV3LCB0YWJ2aWV3Q29tcCk7XG4gICAgICAgICAgICAgIGNvbnN0IG1heFRhYkhlaWdodE9wdCA9IGdldE1heEhlaWdodChoZWlnaHRzKTtcbiAgICAgICAgICAgICAgbWF4VGFiSGVpZ2h0T3B0LmZvbGQobWF4VGFiSGVpZ2h0LmNsZWFyLCBtYXhUYWJIZWlnaHQuc2V0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdXBkYXRlVGFidmlld0hlaWdodChkaWFsb2csIHRhYnZpZXcsIG1heFRhYkhlaWdodCk7XG4gICAgICAgICAgICByZW1vdmUkNih0YWJ2aWV3LCAndmlzaWJpbGl0eScpO1xuICAgICAgICAgICAgc2hvd1RhYihhbGxUYWJzLCBjb21wKTtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHVwZGF0ZVRhYnZpZXdIZWlnaHQoZGlhbG9nLCB0YWJ2aWV3LCBtYXhUYWJIZWlnaHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLFxuICAgICAgICBydW4kMSh3aW5kb3dSZXNpemUoKSwgY29tcCA9PiB7XG4gICAgICAgICAgY29uc3QgZGlhbG9nID0gY29tcC5lbGVtZW50O1xuICAgICAgICAgIGdldFRhYnZpZXcoZGlhbG9nKS5lYWNoKHRhYnZpZXcgPT4ge1xuICAgICAgICAgICAgdXBkYXRlVGFidmlld0hlaWdodChkaWFsb2csIHRhYnZpZXcsIG1heFRhYkhlaWdodCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLFxuICAgICAgICBydW4kMShmb3JtUmVzaXplRXZlbnQsIChjb21wLCBfc2UpID0+IHtcbiAgICAgICAgICBjb25zdCBkaWFsb2cgPSBjb21wLmVsZW1lbnQ7XG4gICAgICAgICAgZ2V0VGFidmlldyhkaWFsb2cpLmVhY2godGFidmlldyA9PiB7XG4gICAgICAgICAgICBjb25zdCBvbGRGb2N1cyA9IGFjdGl2ZSQxKGdldFJvb3ROb2RlKHRhYnZpZXcpKTtcbiAgICAgICAgICAgIHNldCQ4KHRhYnZpZXcsICd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuICAgICAgICAgICAgY29uc3Qgb2xkSGVpZ2h0ID0gZ2V0UmF3KHRhYnZpZXcsICdoZWlnaHQnKS5tYXAoaCA9PiBwYXJzZUludChoLCAxMCkpO1xuICAgICAgICAgICAgcmVtb3ZlJDYodGFidmlldywgJ2hlaWdodCcpO1xuICAgICAgICAgICAgcmVtb3ZlJDYodGFidmlldywgJ2ZsZXgtYmFzaXMnKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0hlaWdodCA9IHRhYnZpZXcuZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IGhhc0dyb3duID0gb2xkSGVpZ2h0LmZvcmFsbChoID0+IG5ld0hlaWdodCA+IGgpO1xuICAgICAgICAgICAgaWYgKGhhc0dyb3duKSB7XG4gICAgICAgICAgICAgIG1heFRhYkhlaWdodC5zZXQobmV3SGVpZ2h0KTtcbiAgICAgICAgICAgICAgdXBkYXRlVGFidmlld0hlaWdodChkaWFsb2csIHRhYnZpZXcsIG1heFRhYkhlaWdodCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvbGRIZWlnaHQuZWFjaChoID0+IHtcbiAgICAgICAgICAgICAgICBzZXRUYWJ2aWV3SGVpZ2h0KHRhYnZpZXcsIGgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlbW92ZSQ2KHRhYnZpZXcsICd2aXNpYmlsaXR5Jyk7XG4gICAgICAgICAgICBvbGRGb2N1cy5lYWNoKGZvY3VzJDMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgXTtcbiAgICAgIGNvbnN0IHNlbGVjdEZpcnN0ID0gZmFsc2U7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBleHRyYUV2ZW50cyxcbiAgICAgICAgc2VsZWN0Rmlyc3RcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IFNlbmREYXRhVG9TZWN0aW9uQ2hhbm5lbCA9ICdzZW5kLWRhdGEtdG8tc2VjdGlvbic7XG4gICAgY29uc3QgU2VuZERhdGFUb1ZpZXdDaGFubmVsID0gJ3NlbmQtZGF0YS10by12aWV3JztcbiAgICBjb25zdCByZW5kZXJUYWJQYW5lbCA9IChzcGVjLCBkaWFsb2dEYXRhLCBiYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlZFZhbHVlID0gQ2VsbCh7fSk7XG4gICAgICBjb25zdCB1cGRhdGVEYXRhV2l0aEZvcm0gPSBmb3JtID0+IHtcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBSZXByZXNlbnRpbmcuZ2V0VmFsdWUoZm9ybSk7XG4gICAgICAgIGNvbnN0IHZhbGlkRGF0YSA9IHRvVmFsaWRWYWx1ZXMoZm9ybURhdGEpLmdldE9yKHt9KTtcbiAgICAgICAgY29uc3QgY3VycmVudERhdGEgPSBzdG9yZWRWYWx1ZS5nZXQoKTtcbiAgICAgICAgY29uc3QgbmV3RGF0YSA9IGRlZXBNZXJnZShjdXJyZW50RGF0YSwgdmFsaWREYXRhKTtcbiAgICAgICAgc3RvcmVkVmFsdWUuc2V0KG5ld0RhdGEpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldERhdGFPbkZvcm0gPSBmb3JtID0+IHtcbiAgICAgICAgY29uc3QgdGFiRGF0YSA9IHN0b3JlZFZhbHVlLmdldCgpO1xuICAgICAgICBSZXByZXNlbnRpbmcuc2V0VmFsdWUoZm9ybSwgdGFiRGF0YSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgb2xkVGFiID0gQ2VsbChudWxsKTtcbiAgICAgIGNvbnN0IGFsbFRhYnMgPSBtYXAkMihzcGVjLnRhYnMsIHRhYiA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IHRhYi5uYW1lLFxuICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LWRpYWxvZ19fYm9keS1uYXYtaXRlbSddXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21wb25lbnRzOiBbdGV4dCQyKGJhY2tzdGFnZS5zaGFyZWQucHJvdmlkZXJzLnRyYW5zbGF0ZSh0YWIudGl0bGUpKV0sXG4gICAgICAgICAgdmlldzogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFtGb3JtLnNrZXRjaChwYXJ0cyA9PiAoe1xuICAgICAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LWZvcm0nXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29tcG9uZW50czogbWFwJDIodGFiLml0ZW1zLCBpdGVtID0+IGludGVycHJldEluRm9ybShwYXJ0cywgaXRlbSwgZGlhbG9nRGF0YSwgYmFja3N0YWdlKSksXG4gICAgICAgICAgICAgICAgZm9ybUJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICAgICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgICAgICAgICAgICBtb2RlOiAnYWN5Y2xpYycsXG4gICAgICAgICAgICAgICAgICAgIHVzZVRhYnN0b3BBdDogbm90KGlzUHNldWRvU3RvcClcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgY29uZmlnKCdUYWJWaWV3LmZvcm0uZXZlbnRzJywgW1xuICAgICAgICAgICAgICAgICAgICBydW5PbkF0dGFjaGVkKHNldERhdGFPbkZvcm0pLFxuICAgICAgICAgICAgICAgICAgICBydW5PbkRldGFjaGVkKHVwZGF0ZURhdGFXaXRoRm9ybSlcbiAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgUmVjZWl2aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5uZWxzOiB3cmFwQWxsKFtcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFNlbmREYXRhVG9TZWN0aW9uQ2hhbm5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IG9uUmVjZWl2ZTogdXBkYXRlRGF0YVdpdGhGb3JtIH1cbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogU2VuZERhdGFUb1ZpZXdDaGFubmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgb25SZWNlaXZlOiBzZXREYXRhT25Gb3JtIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIH0pKV07XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICBjb25zdCB0YWJNb2RlID0gc21hcnRNb2RlKGFsbFRhYnMpO1xuICAgICAgcmV0dXJuIFRhYlNlY3Rpb24uc2tldGNoKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1kaWFsb2dfX2JvZHknXVxuICAgICAgICB9LFxuICAgICAgICBvbkNoYW5nZVRhYjogKHNlY3Rpb24sIGJ1dHRvbiwgX3ZpZXdJdGVtcykgPT4ge1xuICAgICAgICAgIGNvbnN0IG5hbWUgPSBSZXByZXNlbnRpbmcuZ2V0VmFsdWUoYnV0dG9uKTtcbiAgICAgICAgICBlbWl0V2l0aChzZWN0aW9uLCBmb3JtVGFiQ2hhbmdlRXZlbnQsIHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBvbGROYW1lOiBvbGRUYWIuZ2V0KClcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBvbGRUYWIuc2V0KG5hbWUpO1xuICAgICAgICB9LFxuICAgICAgICB0YWJzOiBhbGxUYWJzLFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgVGFiU2VjdGlvbi5wYXJ0cy50YWJiYXIoe1xuICAgICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LWRpYWxvZ19fYm9keS1uYXYnXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IFtUYWJiYXIucGFydHMudGFicyh7fSldLFxuICAgICAgICAgICAgbWFya2Vyczoge1xuICAgICAgICAgICAgICB0YWJDbGFzczogJ3RveC10YWInLFxuICAgICAgICAgICAgICBzZWxlY3RlZENsYXNzOiAndG94LWRpYWxvZ19fYm9keS1uYXYtaXRlbS0tYWN0aXZlJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRhYmJhckJlaGF2aW91cnM6IGRlcml2ZSQxKFtUYWJzdG9wcGluZy5jb25maWcoe30pXSlcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBUYWJTZWN0aW9uLnBhcnRzLnRhYnZpZXcoe1xuICAgICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LWRpYWxvZ19fYm9keS1jb250ZW50J11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RGaXJzdDogdGFiTW9kZS5zZWxlY3RGaXJzdCxcbiAgICAgICAgdGFiU2VjdGlvbkJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBjb25maWcoJ3RhYnBhbmVsJywgdGFiTW9kZS5leHRyYUV2ZW50cyksXG4gICAgICAgICAgS2V5aW5nLmNvbmZpZyh7IG1vZGU6ICdhY3ljbGljJyB9KSxcbiAgICAgICAgICBDb21wb3NpbmcuY29uZmlnKHsgZmluZDogY29tcCA9PiBoZWFkKFRhYlNlY3Rpb24uZ2V0Vmlld0l0ZW1zKGNvbXApKSB9KSxcbiAgICAgICAgICB3aXRoQ29tcChPcHRpb25hbC5ub25lKCksIHRzZWN0aW9uID0+IHtcbiAgICAgICAgICAgIHRzZWN0aW9uLmdldFN5c3RlbSgpLmJyb2FkY2FzdE9uKFtTZW5kRGF0YVRvU2VjdGlvbkNoYW5uZWxdLCB7fSk7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmVkVmFsdWUuZ2V0KCk7XG4gICAgICAgICAgfSwgKHRzZWN0aW9uLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgc3RvcmVkVmFsdWUuc2V0KHZhbHVlKTtcbiAgICAgICAgICAgIHRzZWN0aW9uLmdldFN5c3RlbSgpLmJyb2FkY2FzdE9uKFtTZW5kRGF0YVRvVmlld0NoYW5uZWxdLCB7fSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgXSlcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJCb2R5ID0gKHNwZWMsIGRpYWxvZ0lkLCBjb250ZW50SWQsIGJhY2tzdGFnZSwgYXJpYUF0dHJzKSA9PiB7XG4gICAgICBjb25zdCByZW5kZXJDb21wb25lbnRzID0gaW5jb21pbmcgPT4ge1xuICAgICAgICBjb25zdCBib2R5ID0gaW5jb21pbmcuYm9keTtcbiAgICAgICAgc3dpdGNoIChib2R5LnR5cGUpIHtcbiAgICAgICAgY2FzZSAndGFicGFuZWwnOiB7XG4gICAgICAgICAgICByZXR1cm4gW3JlbmRlclRhYlBhbmVsKGJvZHksIGluY29taW5nLmluaXRpYWxEYXRhLCBiYWNrc3RhZ2UpXTtcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHJldHVybiBbcmVuZGVyQm9keVBhbmVsKGJvZHksIGluY29taW5nLmluaXRpYWxEYXRhLCBiYWNrc3RhZ2UpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCB1cGRhdGVTdGF0ZSA9IChfY29tcCwgaW5jb21pbmcpID0+IE9wdGlvbmFsLnNvbWUoeyBpc1RhYlBhbmVsOiAoKSA9PiBpbmNvbWluZy5ib2R5LnR5cGUgPT09ICd0YWJwYW5lbCcgfSk7XG4gICAgICBjb25zdCBhcmlhQXR0cmlidXRlcyA9IHsgJ2FyaWEtbGl2ZSc6ICdwb2xpdGUnIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LWRpYWxvZ19fY29udGVudC1qcyddLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIC4uLmNvbnRlbnRJZC5tYXAoeCA9PiAoeyBpZDogeCB9KSkuZ2V0T3Ioe30pLFxuICAgICAgICAgICAgLi4uYXJpYUF0dHJzID8gYXJpYUF0dHJpYnV0ZXMgOiB7fVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW10sXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBDb21wb3NpbmdDb25maWdzLmNoaWxkQXQoMCksXG4gICAgICAgICAgUmVmbGVjdGluZy5jb25maWcoe1xuICAgICAgICAgICAgY2hhbm5lbDogYCR7IGJvZHlDaGFubmVsIH0tJHsgZGlhbG9nSWQgfWAsXG4gICAgICAgICAgICB1cGRhdGVTdGF0ZSxcbiAgICAgICAgICAgIHJlbmRlckNvbXBvbmVudHMsXG4gICAgICAgICAgICBpbml0aWFsRGF0YTogc3BlY1xuICAgICAgICAgIH0pXG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVySW5saW5lQm9keSA9IChzcGVjLCBkaWFsb2dJZCwgY29udGVudElkLCBiYWNrc3RhZ2UsIGFyaWFBdHRycykgPT4gcmVuZGVyQm9keShzcGVjLCBkaWFsb2dJZCwgT3B0aW9uYWwuc29tZShjb250ZW50SWQpLCBiYWNrc3RhZ2UsIGFyaWFBdHRycyk7XG4gICAgY29uc3QgcmVuZGVyTW9kYWxCb2R5ID0gKHNwZWMsIGRpYWxvZ0lkLCBiYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IGJvZHlTcGVjID0gcmVuZGVyQm9keShzcGVjLCBkaWFsb2dJZCwgT3B0aW9uYWwubm9uZSgpLCBiYWNrc3RhZ2UsIGZhbHNlKTtcbiAgICAgIHJldHVybiBNb2RhbERpYWxvZy5wYXJ0cy5ib2R5KGJvZHlTcGVjKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlcklmcmFtZUJvZHkgPSBzcGVjID0+IHtcbiAgICAgIGNvbnN0IGJvZHlTcGVjID0ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LWRpYWxvZ19fY29udGVudC1qcyddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFt7XG4gICAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgICAgY2xhc3NlczogWyd0b3gtZGlhbG9nX19ib2R5LWlmcmFtZSddXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcG9uZW50czogW2NyYWZ0KE9wdGlvbmFsLm5vbmUoKSwge1xuICAgICAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICAgICAgdGFnOiAnaWZyYW1lJyxcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgc3JjOiBzcGVjLnVybCB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgICAgICAgICBUYWJzdG9wcGluZy5jb25maWcoe30pLFxuICAgICAgICAgICAgICAgICAgRm9jdXNpbmcuY29uZmlnKHt9KVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIH0pXVxuICAgICAgICAgIH1dLFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBtb2RlOiAnYWN5Y2xpYycsXG4gICAgICAgICAgICB1c2VUYWJzdG9wQXQ6IG5vdChpc1BzZXVkb1N0b3ApXG4gICAgICAgICAgfSldKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBNb2RhbERpYWxvZy5wYXJ0cy5ib2R5KGJvZHlTcGVjKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgICdAYmFiZWwvaGVscGVycyAtIHR5cGVvZic7XG4gICAgICByZXR1cm4gX3R5cGVvZiA9ICdmdW5jdGlvbicgPT0gdHlwZW9mIFN5bWJvbCAmJiAnc3ltYm9sJyA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICAgIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogJiYgJ2Z1bmN0aW9uJyA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/ICdzeW1ib2wnIDogdHlwZW9mIG9iajtcbiAgICAgIH0sIF90eXBlb2Yob2JqKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICd1bmRlZmluZWQnIHx8ICFSZWZsZWN0LmNvbnN0cnVjdClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICh0eXBlb2YgUHJveHkgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7XG4gICAgICBpZiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpKSB7XG4gICAgICAgIF9jb25zdHJ1Y3QgPSBSZWZsZWN0LmNvbnN0cnVjdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgICAgICB2YXIgYSA9IFtudWxsXTtcbiAgICAgICAgICBhLnB1c2guYXBwbHkoYSwgYXJncyk7XG4gICAgICAgICAgdmFyIENvbnN0cnVjdG9yID0gRnVuY3Rpb24uYmluZC5hcHBseShQYXJlbnQsIGEpO1xuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgICAgICAgIGlmIChDbGFzcylcbiAgICAgICAgICAgIF9zZXRQcm90b3R5cGVPZihpbnN0YW5jZSwgQ2xhc3MucHJvdG90eXBlKTtcbiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gICAgICByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKVxuICAgICAgICByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gICAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlclsnQEBpdGVyYXRvciddICE9IG51bGwpXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gICAgICBpZiAoIW8pXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICh0eXBlb2YgbyA9PT0gJ3N0cmluZycpXG4gICAgICAgIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICAgICAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICAgICAgaWYgKG4gPT09ICdPYmplY3QnICYmIG8uY29uc3RydWN0b3IpXG4gICAgICAgIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICBpZiAobiA9PT0gJ01hcCcgfHwgbiA9PT0gJ1NldCcpXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICAgICAgaWYgKG4gPT09ICdBcmd1bWVudHMnIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKVxuICAgICAgICByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgICAgIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKVxuICAgICAgICBsZW4gPSBhcnIubGVuZ3RoO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKVxuICAgICAgICBhcnIyW2ldID0gYXJyW2ldO1xuICAgICAgcmV0dXJuIGFycjI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4nKTtcbiAgICB9XG4gICAgdmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0Lmhhc093blByb3BlcnR5LCBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiwgaXNGcm96ZW4gPSBPYmplY3QuaXNGcm96ZW4sIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mLCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAgIHZhciBmcmVlemUgPSBPYmplY3QuZnJlZXplLCBzZWFsID0gT2JqZWN0LnNlYWwsIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG4gICAgdmFyIF9yZWYgPSB0eXBlb2YgUmVmbGVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgUmVmbGVjdCwgYXBwbHkgPSBfcmVmLmFwcGx5LCBjb25zdHJ1Y3QgPSBfcmVmLmNvbnN0cnVjdDtcbiAgICBpZiAoIWFwcGx5KSB7XG4gICAgICBhcHBseSA9IGZ1bmN0aW9uIGFwcGx5KGZ1biwgdGhpc1ZhbHVlLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiBmdW4uYXBwbHkodGhpc1ZhbHVlLCBhcmdzKTtcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghZnJlZXplKSB7XG4gICAgICBmcmVlemUgPSBmdW5jdGlvbiBmcmVlemUoeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghc2VhbCkge1xuICAgICAgc2VhbCA9IGZ1bmN0aW9uIHNlYWwoeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghY29uc3RydWN0KSB7XG4gICAgICBjb25zdHJ1Y3QgPSBmdW5jdGlvbiBjb25zdHJ1Y3QoRnVuYywgYXJncykge1xuICAgICAgICByZXR1cm4gX2NvbnN0cnVjdChGdW5jLCBfdG9Db25zdW1hYmxlQXJyYXkoYXJncykpO1xuICAgICAgfTtcbiAgICB9XG4gICAgdmFyIGFycmF5Rm9yRWFjaCA9IHVuYXBwbHkoQXJyYXkucHJvdG90eXBlLmZvckVhY2gpO1xuICAgIHZhciBhcnJheVBvcCA9IHVuYXBwbHkoQXJyYXkucHJvdG90eXBlLnBvcCk7XG4gICAgdmFyIGFycmF5UHVzaCA9IHVuYXBwbHkoQXJyYXkucHJvdG90eXBlLnB1c2gpO1xuICAgIHZhciBzdHJpbmdUb0xvd2VyQ2FzZSA9IHVuYXBwbHkoU3RyaW5nLnByb3RvdHlwZS50b0xvd2VyQ2FzZSk7XG4gICAgdmFyIHN0cmluZ01hdGNoID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLm1hdGNoKTtcbiAgICB2YXIgc3RyaW5nUmVwbGFjZSA9IHVuYXBwbHkoU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbiAgICB2YXIgc3RyaW5nSW5kZXhPZiA9IHVuYXBwbHkoU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mKTtcbiAgICB2YXIgc3RyaW5nVHJpbSA9IHVuYXBwbHkoU3RyaW5nLnByb3RvdHlwZS50cmltKTtcbiAgICB2YXIgcmVnRXhwVGVzdCA9IHVuYXBwbHkoUmVnRXhwLnByb3RvdHlwZS50ZXN0KTtcbiAgICB2YXIgdHlwZUVycm9yQ3JlYXRlID0gdW5jb25zdHJ1Y3QoVHlwZUVycm9yKTtcbiAgICBmdW5jdGlvbiB1bmFwcGx5KGZ1bmMpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAodGhpc0FyZykge1xuICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpO1xuICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdW5jb25zdHJ1Y3QoZnVuYykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb25zdHJ1Y3QoZnVuYywgYXJncyk7XG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRUb1NldChzZXQsIGFycmF5KSB7XG4gICAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgc2V0UHJvdG90eXBlT2Yoc2V0LCBudWxsKTtcbiAgICAgIH1cbiAgICAgIHZhciBsID0gYXJyYXkubGVuZ3RoO1xuICAgICAgd2hpbGUgKGwtLSkge1xuICAgICAgICB2YXIgZWxlbWVudCA9IGFycmF5W2xdO1xuICAgICAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdmFyIGxjRWxlbWVudCA9IHN0cmluZ1RvTG93ZXJDYXNlKGVsZW1lbnQpO1xuICAgICAgICAgIGlmIChsY0VsZW1lbnQgIT09IGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmICghaXNGcm96ZW4oYXJyYXkpKSB7XG4gICAgICAgICAgICAgIGFycmF5W2xdID0gbGNFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlbWVudCA9IGxjRWxlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0W2VsZW1lbnRdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsb25lKG9iamVjdCkge1xuICAgICAgdmFyIG5ld09iamVjdCA9IGNyZWF0ZShudWxsKTtcbiAgICAgIHZhciBwcm9wZXJ0eTtcbiAgICAgIGZvciAocHJvcGVydHkgaW4gb2JqZWN0KSB7XG4gICAgICAgIGlmIChhcHBseShoYXNPd25Qcm9wZXJ0eSwgb2JqZWN0LCBbcHJvcGVydHldKSkge1xuICAgICAgICAgIG5ld09iamVjdFtwcm9wZXJ0eV0gPSBvYmplY3RbcHJvcGVydHldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3T2JqZWN0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBsb29rdXBHZXR0ZXIob2JqZWN0LCBwcm9wKSB7XG4gICAgICB3aGlsZSAob2JqZWN0ICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBkZXNjID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcCk7XG4gICAgICAgIGlmIChkZXNjKSB7XG4gICAgICAgICAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5hcHBseShkZXNjLmdldCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2YgZGVzYy52YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHVuYXBwbHkoZGVzYy52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9iamVjdCA9IGdldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBmYWxsYmFja1ZhbHVlKGVsZW1lbnQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdmYWxsYmFjayB2YWx1ZSBmb3InLCBlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsbGJhY2tWYWx1ZTtcbiAgICB9XG4gICAgdmFyIGh0bWwkMSA9IGZyZWV6ZShbXG4gICAgICAnYScsXG4gICAgICAnYWJicicsXG4gICAgICAnYWNyb255bScsXG4gICAgICAnYWRkcmVzcycsXG4gICAgICAnYXJlYScsXG4gICAgICAnYXJ0aWNsZScsXG4gICAgICAnYXNpZGUnLFxuICAgICAgJ2F1ZGlvJyxcbiAgICAgICdiJyxcbiAgICAgICdiZGknLFxuICAgICAgJ2JkbycsXG4gICAgICAnYmlnJyxcbiAgICAgICdibGluaycsXG4gICAgICAnYmxvY2txdW90ZScsXG4gICAgICAnYm9keScsXG4gICAgICAnYnInLFxuICAgICAgJ2J1dHRvbicsXG4gICAgICAnY2FudmFzJyxcbiAgICAgICdjYXB0aW9uJyxcbiAgICAgICdjZW50ZXInLFxuICAgICAgJ2NpdGUnLFxuICAgICAgJ2NvZGUnLFxuICAgICAgJ2NvbCcsXG4gICAgICAnY29sZ3JvdXAnLFxuICAgICAgJ2NvbnRlbnQnLFxuICAgICAgJ2RhdGEnLFxuICAgICAgJ2RhdGFsaXN0JyxcbiAgICAgICdkZCcsXG4gICAgICAnZGVjb3JhdG9yJyxcbiAgICAgICdkZWwnLFxuICAgICAgJ2RldGFpbHMnLFxuICAgICAgJ2RmbicsXG4gICAgICAnZGlhbG9nJyxcbiAgICAgICdkaXInLFxuICAgICAgJ2RpdicsXG4gICAgICAnZGwnLFxuICAgICAgJ2R0JyxcbiAgICAgICdlbGVtZW50JyxcbiAgICAgICdlbScsXG4gICAgICAnZmllbGRzZXQnLFxuICAgICAgJ2ZpZ2NhcHRpb24nLFxuICAgICAgJ2ZpZ3VyZScsXG4gICAgICAnZm9udCcsXG4gICAgICAnZm9vdGVyJyxcbiAgICAgICdmb3JtJyxcbiAgICAgICdoMScsXG4gICAgICAnaDInLFxuICAgICAgJ2gzJyxcbiAgICAgICdoNCcsXG4gICAgICAnaDUnLFxuICAgICAgJ2g2JyxcbiAgICAgICdoZWFkJyxcbiAgICAgICdoZWFkZXInLFxuICAgICAgJ2hncm91cCcsXG4gICAgICAnaHInLFxuICAgICAgJ2h0bWwnLFxuICAgICAgJ2knLFxuICAgICAgJ2ltZycsXG4gICAgICAnaW5wdXQnLFxuICAgICAgJ2lucycsXG4gICAgICAna2JkJyxcbiAgICAgICdsYWJlbCcsXG4gICAgICAnbGVnZW5kJyxcbiAgICAgICdsaScsXG4gICAgICAnbWFpbicsXG4gICAgICAnbWFwJyxcbiAgICAgICdtYXJrJyxcbiAgICAgICdtYXJxdWVlJyxcbiAgICAgICdtZW51JyxcbiAgICAgICdtZW51aXRlbScsXG4gICAgICAnbWV0ZXInLFxuICAgICAgJ25hdicsXG4gICAgICAnbm9icicsXG4gICAgICAnb2wnLFxuICAgICAgJ29wdGdyb3VwJyxcbiAgICAgICdvcHRpb24nLFxuICAgICAgJ291dHB1dCcsXG4gICAgICAncCcsXG4gICAgICAncGljdHVyZScsXG4gICAgICAncHJlJyxcbiAgICAgICdwcm9ncmVzcycsXG4gICAgICAncScsXG4gICAgICAncnAnLFxuICAgICAgJ3J0JyxcbiAgICAgICdydWJ5JyxcbiAgICAgICdzJyxcbiAgICAgICdzYW1wJyxcbiAgICAgICdzZWN0aW9uJyxcbiAgICAgICdzZWxlY3QnLFxuICAgICAgJ3NoYWRvdycsXG4gICAgICAnc21hbGwnLFxuICAgICAgJ3NvdXJjZScsXG4gICAgICAnc3BhY2VyJyxcbiAgICAgICdzcGFuJyxcbiAgICAgICdzdHJpa2UnLFxuICAgICAgJ3N0cm9uZycsXG4gICAgICAnc3R5bGUnLFxuICAgICAgJ3N1YicsXG4gICAgICAnc3VtbWFyeScsXG4gICAgICAnc3VwJyxcbiAgICAgICd0YWJsZScsXG4gICAgICAndGJvZHknLFxuICAgICAgJ3RkJyxcbiAgICAgICd0ZW1wbGF0ZScsXG4gICAgICAndGV4dGFyZWEnLFxuICAgICAgJ3Rmb290JyxcbiAgICAgICd0aCcsXG4gICAgICAndGhlYWQnLFxuICAgICAgJ3RpbWUnLFxuICAgICAgJ3RyJyxcbiAgICAgICd0cmFjaycsXG4gICAgICAndHQnLFxuICAgICAgJ3UnLFxuICAgICAgJ3VsJyxcbiAgICAgICd2YXInLFxuICAgICAgJ3ZpZGVvJyxcbiAgICAgICd3YnInXG4gICAgXSk7XG4gICAgdmFyIHN2ZyQxID0gZnJlZXplKFtcbiAgICAgICdzdmcnLFxuICAgICAgJ2EnLFxuICAgICAgJ2FsdGdseXBoJyxcbiAgICAgICdhbHRnbHlwaGRlZicsXG4gICAgICAnYWx0Z2x5cGhpdGVtJyxcbiAgICAgICdhbmltYXRlY29sb3InLFxuICAgICAgJ2FuaW1hdGVtb3Rpb24nLFxuICAgICAgJ2FuaW1hdGV0cmFuc2Zvcm0nLFxuICAgICAgJ2NpcmNsZScsXG4gICAgICAnY2xpcHBhdGgnLFxuICAgICAgJ2RlZnMnLFxuICAgICAgJ2Rlc2MnLFxuICAgICAgJ2VsbGlwc2UnLFxuICAgICAgJ2ZpbHRlcicsXG4gICAgICAnZm9udCcsXG4gICAgICAnZycsXG4gICAgICAnZ2x5cGgnLFxuICAgICAgJ2dseXBocmVmJyxcbiAgICAgICdoa2VybicsXG4gICAgICAnaW1hZ2UnLFxuICAgICAgJ2xpbmUnLFxuICAgICAgJ2xpbmVhcmdyYWRpZW50JyxcbiAgICAgICdtYXJrZXInLFxuICAgICAgJ21hc2snLFxuICAgICAgJ21ldGFkYXRhJyxcbiAgICAgICdtcGF0aCcsXG4gICAgICAncGF0aCcsXG4gICAgICAncGF0dGVybicsXG4gICAgICAncG9seWdvbicsXG4gICAgICAncG9seWxpbmUnLFxuICAgICAgJ3JhZGlhbGdyYWRpZW50JyxcbiAgICAgICdyZWN0JyxcbiAgICAgICdzdG9wJyxcbiAgICAgICdzdHlsZScsXG4gICAgICAnc3dpdGNoJyxcbiAgICAgICdzeW1ib2wnLFxuICAgICAgJ3RleHQnLFxuICAgICAgJ3RleHRwYXRoJyxcbiAgICAgICd0aXRsZScsXG4gICAgICAndHJlZicsXG4gICAgICAndHNwYW4nLFxuICAgICAgJ3ZpZXcnLFxuICAgICAgJ3ZrZXJuJ1xuICAgIF0pO1xuICAgIHZhciBzdmdGaWx0ZXJzID0gZnJlZXplKFtcbiAgICAgICdmZUJsZW5kJyxcbiAgICAgICdmZUNvbG9yTWF0cml4JyxcbiAgICAgICdmZUNvbXBvbmVudFRyYW5zZmVyJyxcbiAgICAgICdmZUNvbXBvc2l0ZScsXG4gICAgICAnZmVDb252b2x2ZU1hdHJpeCcsXG4gICAgICAnZmVEaWZmdXNlTGlnaHRpbmcnLFxuICAgICAgJ2ZlRGlzcGxhY2VtZW50TWFwJyxcbiAgICAgICdmZURpc3RhbnRMaWdodCcsXG4gICAgICAnZmVGbG9vZCcsXG4gICAgICAnZmVGdW5jQScsXG4gICAgICAnZmVGdW5jQicsXG4gICAgICAnZmVGdW5jRycsXG4gICAgICAnZmVGdW5jUicsXG4gICAgICAnZmVHYXVzc2lhbkJsdXInLFxuICAgICAgJ2ZlSW1hZ2UnLFxuICAgICAgJ2ZlTWVyZ2UnLFxuICAgICAgJ2ZlTWVyZ2VOb2RlJyxcbiAgICAgICdmZU1vcnBob2xvZ3knLFxuICAgICAgJ2ZlT2Zmc2V0JyxcbiAgICAgICdmZVBvaW50TGlnaHQnLFxuICAgICAgJ2ZlU3BlY3VsYXJMaWdodGluZycsXG4gICAgICAnZmVTcG90TGlnaHQnLFxuICAgICAgJ2ZlVGlsZScsXG4gICAgICAnZmVUdXJidWxlbmNlJ1xuICAgIF0pO1xuICAgIHZhciBzdmdEaXNhbGxvd2VkID0gZnJlZXplKFtcbiAgICAgICdhbmltYXRlJyxcbiAgICAgICdjb2xvci1wcm9maWxlJyxcbiAgICAgICdjdXJzb3InLFxuICAgICAgJ2Rpc2NhcmQnLFxuICAgICAgJ2ZlZHJvcHNoYWRvdycsXG4gICAgICAnZm9udC1mYWNlJyxcbiAgICAgICdmb250LWZhY2UtZm9ybWF0JyxcbiAgICAgICdmb250LWZhY2UtbmFtZScsXG4gICAgICAnZm9udC1mYWNlLXNyYycsXG4gICAgICAnZm9udC1mYWNlLXVyaScsXG4gICAgICAnZm9yZWlnbm9iamVjdCcsXG4gICAgICAnaGF0Y2gnLFxuICAgICAgJ2hhdGNocGF0aCcsXG4gICAgICAnbWVzaCcsXG4gICAgICAnbWVzaGdyYWRpZW50JyxcbiAgICAgICdtZXNocGF0Y2gnLFxuICAgICAgJ21lc2hyb3cnLFxuICAgICAgJ21pc3NpbmctZ2x5cGgnLFxuICAgICAgJ3NjcmlwdCcsXG4gICAgICAnc2V0JyxcbiAgICAgICdzb2xpZGNvbG9yJyxcbiAgICAgICd1bmtub3duJyxcbiAgICAgICd1c2UnXG4gICAgXSk7XG4gICAgdmFyIG1hdGhNbCQxID0gZnJlZXplKFtcbiAgICAgICdtYXRoJyxcbiAgICAgICdtZW5jbG9zZScsXG4gICAgICAnbWVycm9yJyxcbiAgICAgICdtZmVuY2VkJyxcbiAgICAgICdtZnJhYycsXG4gICAgICAnbWdseXBoJyxcbiAgICAgICdtaScsXG4gICAgICAnbWxhYmVsZWR0cicsXG4gICAgICAnbW11bHRpc2NyaXB0cycsXG4gICAgICAnbW4nLFxuICAgICAgJ21vJyxcbiAgICAgICdtb3ZlcicsXG4gICAgICAnbXBhZGRlZCcsXG4gICAgICAnbXBoYW50b20nLFxuICAgICAgJ21yb290JyxcbiAgICAgICdtcm93JyxcbiAgICAgICdtcycsXG4gICAgICAnbXNwYWNlJyxcbiAgICAgICdtc3FydCcsXG4gICAgICAnbXN0eWxlJyxcbiAgICAgICdtc3ViJyxcbiAgICAgICdtc3VwJyxcbiAgICAgICdtc3Vic3VwJyxcbiAgICAgICdtdGFibGUnLFxuICAgICAgJ210ZCcsXG4gICAgICAnbXRleHQnLFxuICAgICAgJ210cicsXG4gICAgICAnbXVuZGVyJyxcbiAgICAgICdtdW5kZXJvdmVyJ1xuICAgIF0pO1xuICAgIHZhciBtYXRoTWxEaXNhbGxvd2VkID0gZnJlZXplKFtcbiAgICAgICdtYWN0aW9uJyxcbiAgICAgICdtYWxpZ25ncm91cCcsXG4gICAgICAnbWFsaWdubWFyaycsXG4gICAgICAnbWxvbmdkaXYnLFxuICAgICAgJ21zY2FycmllcycsXG4gICAgICAnbXNjYXJyeScsXG4gICAgICAnbXNncm91cCcsXG4gICAgICAnbXN0YWNrJyxcbiAgICAgICdtc2xpbmUnLFxuICAgICAgJ21zcm93JyxcbiAgICAgICdzZW1hbnRpY3MnLFxuICAgICAgJ2Fubm90YXRpb24nLFxuICAgICAgJ2Fubm90YXRpb24teG1sJyxcbiAgICAgICdtcHJlc2NyaXB0cycsXG4gICAgICAnbm9uZSdcbiAgICBdKTtcbiAgICB2YXIgdGV4dCA9IGZyZWV6ZShbJyN0ZXh0J10pO1xuICAgIHZhciBodG1sID0gZnJlZXplKFtcbiAgICAgICdhY2NlcHQnLFxuICAgICAgJ2FjdGlvbicsXG4gICAgICAnYWxpZ24nLFxuICAgICAgJ2FsdCcsXG4gICAgICAnYXV0b2NhcGl0YWxpemUnLFxuICAgICAgJ2F1dG9jb21wbGV0ZScsXG4gICAgICAnYXV0b3BpY3R1cmVpbnBpY3R1cmUnLFxuICAgICAgJ2F1dG9wbGF5JyxcbiAgICAgICdiYWNrZ3JvdW5kJyxcbiAgICAgICdiZ2NvbG9yJyxcbiAgICAgICdib3JkZXInLFxuICAgICAgJ2NhcHR1cmUnLFxuICAgICAgJ2NlbGxwYWRkaW5nJyxcbiAgICAgICdjZWxsc3BhY2luZycsXG4gICAgICAnY2hlY2tlZCcsXG4gICAgICAnY2l0ZScsXG4gICAgICAnY2xhc3MnLFxuICAgICAgJ2NsZWFyJyxcbiAgICAgICdjb2xvcicsXG4gICAgICAnY29scycsXG4gICAgICAnY29sc3BhbicsXG4gICAgICAnY29udHJvbHMnLFxuICAgICAgJ2NvbnRyb2xzbGlzdCcsXG4gICAgICAnY29vcmRzJyxcbiAgICAgICdjcm9zc29yaWdpbicsXG4gICAgICAnZGF0ZXRpbWUnLFxuICAgICAgJ2RlY29kaW5nJyxcbiAgICAgICdkZWZhdWx0JyxcbiAgICAgICdkaXInLFxuICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgICdkaXNhYmxlcGljdHVyZWlucGljdHVyZScsXG4gICAgICAnZGlzYWJsZXJlbW90ZXBsYXliYWNrJyxcbiAgICAgICdkb3dubG9hZCcsXG4gICAgICAnZHJhZ2dhYmxlJyxcbiAgICAgICdlbmN0eXBlJyxcbiAgICAgICdlbnRlcmtleWhpbnQnLFxuICAgICAgJ2ZhY2UnLFxuICAgICAgJ2ZvcicsXG4gICAgICAnaGVhZGVycycsXG4gICAgICAnaGVpZ2h0JyxcbiAgICAgICdoaWRkZW4nLFxuICAgICAgJ2hpZ2gnLFxuICAgICAgJ2hyZWYnLFxuICAgICAgJ2hyZWZsYW5nJyxcbiAgICAgICdpZCcsXG4gICAgICAnaW5wdXRtb2RlJyxcbiAgICAgICdpbnRlZ3JpdHknLFxuICAgICAgJ2lzbWFwJyxcbiAgICAgICdraW5kJyxcbiAgICAgICdsYWJlbCcsXG4gICAgICAnbGFuZycsXG4gICAgICAnbGlzdCcsXG4gICAgICAnbG9hZGluZycsXG4gICAgICAnbG9vcCcsXG4gICAgICAnbG93JyxcbiAgICAgICdtYXgnLFxuICAgICAgJ21heGxlbmd0aCcsXG4gICAgICAnbWVkaWEnLFxuICAgICAgJ21ldGhvZCcsXG4gICAgICAnbWluJyxcbiAgICAgICdtaW5sZW5ndGgnLFxuICAgICAgJ211bHRpcGxlJyxcbiAgICAgICdtdXRlZCcsXG4gICAgICAnbmFtZScsXG4gICAgICAnbm9uY2UnLFxuICAgICAgJ25vc2hhZGUnLFxuICAgICAgJ25vdmFsaWRhdGUnLFxuICAgICAgJ25vd3JhcCcsXG4gICAgICAnb3BlbicsXG4gICAgICAnb3B0aW11bScsXG4gICAgICAncGF0dGVybicsXG4gICAgICAncGxhY2Vob2xkZXInLFxuICAgICAgJ3BsYXlzaW5saW5lJyxcbiAgICAgICdwb3N0ZXInLFxuICAgICAgJ3ByZWxvYWQnLFxuICAgICAgJ3B1YmRhdGUnLFxuICAgICAgJ3JhZGlvZ3JvdXAnLFxuICAgICAgJ3JlYWRvbmx5JyxcbiAgICAgICdyZWwnLFxuICAgICAgJ3JlcXVpcmVkJyxcbiAgICAgICdyZXYnLFxuICAgICAgJ3JldmVyc2VkJyxcbiAgICAgICdyb2xlJyxcbiAgICAgICdyb3dzJyxcbiAgICAgICdyb3dzcGFuJyxcbiAgICAgICdzcGVsbGNoZWNrJyxcbiAgICAgICdzY29wZScsXG4gICAgICAnc2VsZWN0ZWQnLFxuICAgICAgJ3NoYXBlJyxcbiAgICAgICdzaXplJyxcbiAgICAgICdzaXplcycsXG4gICAgICAnc3BhbicsXG4gICAgICAnc3JjbGFuZycsXG4gICAgICAnc3RhcnQnLFxuICAgICAgJ3NyYycsXG4gICAgICAnc3Jjc2V0JyxcbiAgICAgICdzdGVwJyxcbiAgICAgICdzdHlsZScsXG4gICAgICAnc3VtbWFyeScsXG4gICAgICAndGFiaW5kZXgnLFxuICAgICAgJ3RpdGxlJyxcbiAgICAgICd0cmFuc2xhdGUnLFxuICAgICAgJ3R5cGUnLFxuICAgICAgJ3VzZW1hcCcsXG4gICAgICAndmFsaWduJyxcbiAgICAgICd2YWx1ZScsXG4gICAgICAnd2lkdGgnLFxuICAgICAgJ3htbG5zJyxcbiAgICAgICdzbG90J1xuICAgIF0pO1xuICAgIHZhciBzdmcgPSBmcmVlemUoW1xuICAgICAgJ2FjY2VudC1oZWlnaHQnLFxuICAgICAgJ2FjY3VtdWxhdGUnLFxuICAgICAgJ2FkZGl0aXZlJyxcbiAgICAgICdhbGlnbm1lbnQtYmFzZWxpbmUnLFxuICAgICAgJ2FzY2VudCcsXG4gICAgICAnYXR0cmlidXRlbmFtZScsXG4gICAgICAnYXR0cmlidXRldHlwZScsXG4gICAgICAnYXppbXV0aCcsXG4gICAgICAnYmFzZWZyZXF1ZW5jeScsXG4gICAgICAnYmFzZWxpbmUtc2hpZnQnLFxuICAgICAgJ2JlZ2luJyxcbiAgICAgICdiaWFzJyxcbiAgICAgICdieScsXG4gICAgICAnY2xhc3MnLFxuICAgICAgJ2NsaXAnLFxuICAgICAgJ2NsaXBwYXRodW5pdHMnLFxuICAgICAgJ2NsaXAtcGF0aCcsXG4gICAgICAnY2xpcC1ydWxlJyxcbiAgICAgICdjb2xvcicsXG4gICAgICAnY29sb3ItaW50ZXJwb2xhdGlvbicsXG4gICAgICAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJyxcbiAgICAgICdjb2xvci1wcm9maWxlJyxcbiAgICAgICdjb2xvci1yZW5kZXJpbmcnLFxuICAgICAgJ2N4JyxcbiAgICAgICdjeScsXG4gICAgICAnZCcsXG4gICAgICAnZHgnLFxuICAgICAgJ2R5JyxcbiAgICAgICdkaWZmdXNlY29uc3RhbnQnLFxuICAgICAgJ2RpcmVjdGlvbicsXG4gICAgICAnZGlzcGxheScsXG4gICAgICAnZGl2aXNvcicsXG4gICAgICAnZHVyJyxcbiAgICAgICdlZGdlbW9kZScsXG4gICAgICAnZWxldmF0aW9uJyxcbiAgICAgICdlbmQnLFxuICAgICAgJ2ZpbGwnLFxuICAgICAgJ2ZpbGwtb3BhY2l0eScsXG4gICAgICAnZmlsbC1ydWxlJyxcbiAgICAgICdmaWx0ZXInLFxuICAgICAgJ2ZpbHRlcnVuaXRzJyxcbiAgICAgICdmbG9vZC1jb2xvcicsXG4gICAgICAnZmxvb2Qtb3BhY2l0eScsXG4gICAgICAnZm9udC1mYW1pbHknLFxuICAgICAgJ2ZvbnQtc2l6ZScsXG4gICAgICAnZm9udC1zaXplLWFkanVzdCcsXG4gICAgICAnZm9udC1zdHJldGNoJyxcbiAgICAgICdmb250LXN0eWxlJyxcbiAgICAgICdmb250LXZhcmlhbnQnLFxuICAgICAgJ2ZvbnQtd2VpZ2h0JyxcbiAgICAgICdmeCcsXG4gICAgICAnZnknLFxuICAgICAgJ2cxJyxcbiAgICAgICdnMicsXG4gICAgICAnZ2x5cGgtbmFtZScsXG4gICAgICAnZ2x5cGhyZWYnLFxuICAgICAgJ2dyYWRpZW50dW5pdHMnLFxuICAgICAgJ2dyYWRpZW50dHJhbnNmb3JtJyxcbiAgICAgICdoZWlnaHQnLFxuICAgICAgJ2hyZWYnLFxuICAgICAgJ2lkJyxcbiAgICAgICdpbWFnZS1yZW5kZXJpbmcnLFxuICAgICAgJ2luJyxcbiAgICAgICdpbjInLFxuICAgICAgJ2snLFxuICAgICAgJ2sxJyxcbiAgICAgICdrMicsXG4gICAgICAnazMnLFxuICAgICAgJ2s0JyxcbiAgICAgICdrZXJuaW5nJyxcbiAgICAgICdrZXlwb2ludHMnLFxuICAgICAgJ2tleXNwbGluZXMnLFxuICAgICAgJ2tleXRpbWVzJyxcbiAgICAgICdsYW5nJyxcbiAgICAgICdsZW5ndGhhZGp1c3QnLFxuICAgICAgJ2xldHRlci1zcGFjaW5nJyxcbiAgICAgICdrZXJuZWxtYXRyaXgnLFxuICAgICAgJ2tlcm5lbHVuaXRsZW5ndGgnLFxuICAgICAgJ2xpZ2h0aW5nLWNvbG9yJyxcbiAgICAgICdsb2NhbCcsXG4gICAgICAnbWFya2VyLWVuZCcsXG4gICAgICAnbWFya2VyLW1pZCcsXG4gICAgICAnbWFya2VyLXN0YXJ0JyxcbiAgICAgICdtYXJrZXJoZWlnaHQnLFxuICAgICAgJ21hcmtlcnVuaXRzJyxcbiAgICAgICdtYXJrZXJ3aWR0aCcsXG4gICAgICAnbWFza2NvbnRlbnR1bml0cycsXG4gICAgICAnbWFza3VuaXRzJyxcbiAgICAgICdtYXgnLFxuICAgICAgJ21hc2snLFxuICAgICAgJ21lZGlhJyxcbiAgICAgICdtZXRob2QnLFxuICAgICAgJ21vZGUnLFxuICAgICAgJ21pbicsXG4gICAgICAnbmFtZScsXG4gICAgICAnbnVtb2N0YXZlcycsXG4gICAgICAnb2Zmc2V0JyxcbiAgICAgICdvcGVyYXRvcicsXG4gICAgICAnb3BhY2l0eScsXG4gICAgICAnb3JkZXInLFxuICAgICAgJ29yaWVudCcsXG4gICAgICAnb3JpZW50YXRpb24nLFxuICAgICAgJ29yaWdpbicsXG4gICAgICAnb3ZlcmZsb3cnLFxuICAgICAgJ3BhaW50LW9yZGVyJyxcbiAgICAgICdwYXRoJyxcbiAgICAgICdwYXRobGVuZ3RoJyxcbiAgICAgICdwYXR0ZXJuY29udGVudHVuaXRzJyxcbiAgICAgICdwYXR0ZXJudHJhbnNmb3JtJyxcbiAgICAgICdwYXR0ZXJudW5pdHMnLFxuICAgICAgJ3BvaW50cycsXG4gICAgICAncHJlc2VydmVhbHBoYScsXG4gICAgICAncHJlc2VydmVhc3BlY3RyYXRpbycsXG4gICAgICAncHJpbWl0aXZldW5pdHMnLFxuICAgICAgJ3InLFxuICAgICAgJ3J4JyxcbiAgICAgICdyeScsXG4gICAgICAncmFkaXVzJyxcbiAgICAgICdyZWZ4JyxcbiAgICAgICdyZWZ5JyxcbiAgICAgICdyZXBlYXRjb3VudCcsXG4gICAgICAncmVwZWF0ZHVyJyxcbiAgICAgICdyZXN0YXJ0JyxcbiAgICAgICdyZXN1bHQnLFxuICAgICAgJ3JvdGF0ZScsXG4gICAgICAnc2NhbGUnLFxuICAgICAgJ3NlZWQnLFxuICAgICAgJ3NoYXBlLXJlbmRlcmluZycsXG4gICAgICAnc3BlY3VsYXJjb25zdGFudCcsXG4gICAgICAnc3BlY3VsYXJleHBvbmVudCcsXG4gICAgICAnc3ByZWFkbWV0aG9kJyxcbiAgICAgICdzdGFydG9mZnNldCcsXG4gICAgICAnc3RkZGV2aWF0aW9uJyxcbiAgICAgICdzdGl0Y2h0aWxlcycsXG4gICAgICAnc3RvcC1jb2xvcicsXG4gICAgICAnc3RvcC1vcGFjaXR5JyxcbiAgICAgICdzdHJva2UtZGFzaGFycmF5JyxcbiAgICAgICdzdHJva2UtZGFzaG9mZnNldCcsXG4gICAgICAnc3Ryb2tlLWxpbmVjYXAnLFxuICAgICAgJ3N0cm9rZS1saW5lam9pbicsXG4gICAgICAnc3Ryb2tlLW1pdGVybGltaXQnLFxuICAgICAgJ3N0cm9rZS1vcGFjaXR5JyxcbiAgICAgICdzdHJva2UnLFxuICAgICAgJ3N0cm9rZS13aWR0aCcsXG4gICAgICAnc3R5bGUnLFxuICAgICAgJ3N1cmZhY2VzY2FsZScsXG4gICAgICAnc3lzdGVtbGFuZ3VhZ2UnLFxuICAgICAgJ3RhYmluZGV4JyxcbiAgICAgICd0YXJnZXR4JyxcbiAgICAgICd0YXJnZXR5JyxcbiAgICAgICd0cmFuc2Zvcm0nLFxuICAgICAgJ3RyYW5zZm9ybS1vcmlnaW4nLFxuICAgICAgJ3RleHQtYW5jaG9yJyxcbiAgICAgICd0ZXh0LWRlY29yYXRpb24nLFxuICAgICAgJ3RleHQtcmVuZGVyaW5nJyxcbiAgICAgICd0ZXh0bGVuZ3RoJyxcbiAgICAgICd0eXBlJyxcbiAgICAgICd1MScsXG4gICAgICAndTInLFxuICAgICAgJ3VuaWNvZGUnLFxuICAgICAgJ3ZhbHVlcycsXG4gICAgICAndmlld2JveCcsXG4gICAgICAndmlzaWJpbGl0eScsXG4gICAgICAndmVyc2lvbicsXG4gICAgICAndmVydC1hZHYteScsXG4gICAgICAndmVydC1vcmlnaW4teCcsXG4gICAgICAndmVydC1vcmlnaW4teScsXG4gICAgICAnd2lkdGgnLFxuICAgICAgJ3dvcmQtc3BhY2luZycsXG4gICAgICAnd3JhcCcsXG4gICAgICAnd3JpdGluZy1tb2RlJyxcbiAgICAgICd4Y2hhbm5lbHNlbGVjdG9yJyxcbiAgICAgICd5Y2hhbm5lbHNlbGVjdG9yJyxcbiAgICAgICd4JyxcbiAgICAgICd4MScsXG4gICAgICAneDInLFxuICAgICAgJ3htbG5zJyxcbiAgICAgICd5JyxcbiAgICAgICd5MScsXG4gICAgICAneTInLFxuICAgICAgJ3onLFxuICAgICAgJ3pvb21hbmRwYW4nXG4gICAgXSk7XG4gICAgdmFyIG1hdGhNbCA9IGZyZWV6ZShbXG4gICAgICAnYWNjZW50JyxcbiAgICAgICdhY2NlbnR1bmRlcicsXG4gICAgICAnYWxpZ24nLFxuICAgICAgJ2JldmVsbGVkJyxcbiAgICAgICdjbG9zZScsXG4gICAgICAnY29sdW1uc2FsaWduJyxcbiAgICAgICdjb2x1bW5saW5lcycsXG4gICAgICAnY29sdW1uc3BhbicsXG4gICAgICAnZGVub21hbGlnbicsXG4gICAgICAnZGVwdGgnLFxuICAgICAgJ2RpcicsXG4gICAgICAnZGlzcGxheScsXG4gICAgICAnZGlzcGxheXN0eWxlJyxcbiAgICAgICdlbmNvZGluZycsXG4gICAgICAnZmVuY2UnLFxuICAgICAgJ2ZyYW1lJyxcbiAgICAgICdoZWlnaHQnLFxuICAgICAgJ2hyZWYnLFxuICAgICAgJ2lkJyxcbiAgICAgICdsYXJnZW9wJyxcbiAgICAgICdsZW5ndGgnLFxuICAgICAgJ2xpbmV0aGlja25lc3MnLFxuICAgICAgJ2xzcGFjZScsXG4gICAgICAnbHF1b3RlJyxcbiAgICAgICdtYXRoYmFja2dyb3VuZCcsXG4gICAgICAnbWF0aGNvbG9yJyxcbiAgICAgICdtYXRoc2l6ZScsXG4gICAgICAnbWF0aHZhcmlhbnQnLFxuICAgICAgJ21heHNpemUnLFxuICAgICAgJ21pbnNpemUnLFxuICAgICAgJ21vdmFibGVsaW1pdHMnLFxuICAgICAgJ25vdGF0aW9uJyxcbiAgICAgICdudW1hbGlnbicsXG4gICAgICAnb3BlbicsXG4gICAgICAncm93YWxpZ24nLFxuICAgICAgJ3Jvd2xpbmVzJyxcbiAgICAgICdyb3dzcGFjaW5nJyxcbiAgICAgICdyb3dzcGFuJyxcbiAgICAgICdyc3BhY2UnLFxuICAgICAgJ3JxdW90ZScsXG4gICAgICAnc2NyaXB0bGV2ZWwnLFxuICAgICAgJ3NjcmlwdG1pbnNpemUnLFxuICAgICAgJ3NjcmlwdHNpemVtdWx0aXBsaWVyJyxcbiAgICAgICdzZWxlY3Rpb24nLFxuICAgICAgJ3NlcGFyYXRvcicsXG4gICAgICAnc2VwYXJhdG9ycycsXG4gICAgICAnc3RyZXRjaHknLFxuICAgICAgJ3N1YnNjcmlwdHNoaWZ0JyxcbiAgICAgICdzdXBzY3JpcHRzaGlmdCcsXG4gICAgICAnc3ltbWV0cmljJyxcbiAgICAgICd2b2Zmc2V0JyxcbiAgICAgICd3aWR0aCcsXG4gICAgICAneG1sbnMnXG4gICAgXSk7XG4gICAgdmFyIHhtbCA9IGZyZWV6ZShbXG4gICAgICAneGxpbms6aHJlZicsXG4gICAgICAneG1sOmlkJyxcbiAgICAgICd4bGluazp0aXRsZScsXG4gICAgICAneG1sOnNwYWNlJyxcbiAgICAgICd4bWxuczp4bGluaydcbiAgICBdKTtcbiAgICB2YXIgTVVTVEFDSEVfRVhQUiA9IHNlYWwoL1xce1xce1tcXHdcXFddKnxbXFx3XFxXXSpcXH1cXH0vZ20pO1xuICAgIHZhciBFUkJfRVhQUiA9IHNlYWwoLzwlW1xcd1xcV10qfFtcXHdcXFddKiU+L2dtKTtcbiAgICB2YXIgREFUQV9BVFRSID0gc2VhbCgvXmRhdGEtW1xcLVxcdy5cXHUwMEI3LVxcdUZGRkZdLyk7XG4gICAgdmFyIEFSSUFfQVRUUiA9IHNlYWwoL15hcmlhLVtcXC1cXHddKyQvKTtcbiAgICB2YXIgSVNfQUxMT1dFRF9VUkkgPSBzZWFsKC9eKD86KD86KD86ZnxodCl0cHM/fG1haWx0b3x0ZWx8Y2FsbHRvfGNpZHx4bXBwKTp8W15hLXpdfFthLXorLlxcLV0rKD86W15hLXorLlxcLTpdfCQpKS9pKTtcbiAgICB2YXIgSVNfU0NSSVBUX09SX0RBVEEgPSBzZWFsKC9eKD86XFx3K3NjcmlwdHxkYXRhKTovaSk7XG4gICAgdmFyIEFUVFJfV0hJVEVTUEFDRSA9IHNlYWwoL1tcXHUwMDAwLVxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwLVxcdTIwMjlcXHUyMDVGXFx1MzAwMF0vZyk7XG4gICAgdmFyIERPQ1RZUEVfTkFNRSA9IHNlYWwoL15odG1sJC9pKTtcbiAgICB2YXIgZ2V0R2xvYmFsID0gZnVuY3Rpb24gZ2V0R2xvYmFsKCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHdpbmRvdztcbiAgICB9O1xuICAgIHZhciBfY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5ID0gZnVuY3Rpb24gX2NyZWF0ZVRydXN0ZWRUeXBlc1BvbGljeSh0cnVzdGVkVHlwZXMsIGRvY3VtZW50KSB7XG4gICAgICBpZiAoX3R5cGVvZih0cnVzdGVkVHlwZXMpICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgdHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHZhciBzdWZmaXggPSBudWxsO1xuICAgICAgdmFyIEFUVFJfTkFNRSA9ICdkYXRhLXR0LXBvbGljeS1zdWZmaXgnO1xuICAgICAgaWYgKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdC5oYXNBdHRyaWJ1dGUoQVRUUl9OQU1FKSkge1xuICAgICAgICBzdWZmaXggPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LmdldEF0dHJpYnV0ZShBVFRSX05BTUUpO1xuICAgICAgfVxuICAgICAgdmFyIHBvbGljeU5hbWUgPSAnZG9tcHVyaWZ5JyArIChzdWZmaXggPyAnIycgKyBzdWZmaXggOiAnJyk7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeShwb2xpY3lOYW1lLCB7XG4gICAgICAgICAgY3JlYXRlSFRNTDogZnVuY3Rpb24gY3JlYXRlSFRNTChodG1sKSB7XG4gICAgICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RydXN0ZWRUeXBlcyBwb2xpY3kgJyArIHBvbGljeU5hbWUgKyAnIGNvdWxkIG5vdCBiZSBjcmVhdGVkLicpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGZ1bmN0aW9uIGNyZWF0ZURPTVB1cmlmeSgpIHtcbiAgICAgIHZhciB3aW5kb3cgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGdldEdsb2JhbCgpO1xuICAgICAgdmFyIERPTVB1cmlmeSA9IGZ1bmN0aW9uIERPTVB1cmlmeShyb290KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVET01QdXJpZnkocm9vdCk7XG4gICAgICB9O1xuICAgICAgRE9NUHVyaWZ5LnZlcnNpb24gPSAnMi4zLjgnO1xuICAgICAgRE9NUHVyaWZ5LnJlbW92ZWQgPSBbXTtcbiAgICAgIGlmICghd2luZG93IHx8ICF3aW5kb3cuZG9jdW1lbnQgfHwgd2luZG93LmRvY3VtZW50Lm5vZGVUeXBlICE9PSA5KSB7XG4gICAgICAgIERPTVB1cmlmeS5pc1N1cHBvcnRlZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gRE9NUHVyaWZ5O1xuICAgICAgfVxuICAgICAgdmFyIG9yaWdpbmFsRG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gICAgICB2YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gICAgICB2YXIgRG9jdW1lbnRGcmFnbWVudCA9IHdpbmRvdy5Eb2N1bWVudEZyYWdtZW50LCBIVE1MVGVtcGxhdGVFbGVtZW50ID0gd2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQsIE5vZGUgPSB3aW5kb3cuTm9kZSwgRWxlbWVudCA9IHdpbmRvdy5FbGVtZW50LCBOb2RlRmlsdGVyID0gd2luZG93Lk5vZGVGaWx0ZXIsIF93aW5kb3ckTmFtZWROb2RlTWFwID0gd2luZG93Lk5hbWVkTm9kZU1hcCwgTmFtZWROb2RlTWFwID0gX3dpbmRvdyROYW1lZE5vZGVNYXAgPT09IHZvaWQgMCA/IHdpbmRvdy5OYW1lZE5vZGVNYXAgfHwgd2luZG93Lk1vek5hbWVkQXR0ck1hcCA6IF93aW5kb3ckTmFtZWROb2RlTWFwLCBIVE1MRm9ybUVsZW1lbnQgPSB3aW5kb3cuSFRNTEZvcm1FbGVtZW50LCBET01QYXJzZXIgPSB3aW5kb3cuRE9NUGFyc2VyLCB0cnVzdGVkVHlwZXMgPSB3aW5kb3cudHJ1c3RlZFR5cGVzO1xuICAgICAgdmFyIEVsZW1lbnRQcm90b3R5cGUgPSBFbGVtZW50LnByb3RvdHlwZTtcbiAgICAgIHZhciBjbG9uZU5vZGUgPSBsb29rdXBHZXR0ZXIoRWxlbWVudFByb3RvdHlwZSwgJ2Nsb25lTm9kZScpO1xuICAgICAgdmFyIGdldE5leHRTaWJsaW5nID0gbG9va3VwR2V0dGVyKEVsZW1lbnRQcm90b3R5cGUsICduZXh0U2libGluZycpO1xuICAgICAgdmFyIGdldENoaWxkTm9kZXMgPSBsb29rdXBHZXR0ZXIoRWxlbWVudFByb3RvdHlwZSwgJ2NoaWxkTm9kZXMnKTtcbiAgICAgIHZhciBnZXRQYXJlbnROb2RlID0gbG9va3VwR2V0dGVyKEVsZW1lbnRQcm90b3R5cGUsICdwYXJlbnROb2RlJyk7XG4gICAgICBpZiAodHlwZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKTtcbiAgICAgICAgaWYgKHRlbXBsYXRlLmNvbnRlbnQgJiYgdGVtcGxhdGUuY29udGVudC5vd25lckRvY3VtZW50KSB7XG4gICAgICAgICAgZG9jdW1lbnQgPSB0ZW1wbGF0ZS5jb250ZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciB0cnVzdGVkVHlwZXNQb2xpY3kgPSBfY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5KHRydXN0ZWRUeXBlcywgb3JpZ2luYWxEb2N1bWVudCk7XG4gICAgICB2YXIgZW1wdHlIVE1MID0gdHJ1c3RlZFR5cGVzUG9saWN5ID8gdHJ1c3RlZFR5cGVzUG9saWN5LmNyZWF0ZUhUTUwoJycpIDogJyc7XG4gICAgICB2YXIgX2RvY3VtZW50ID0gZG9jdW1lbnQsIGltcGxlbWVudGF0aW9uID0gX2RvY3VtZW50LmltcGxlbWVudGF0aW9uLCBjcmVhdGVOb2RlSXRlcmF0b3IgPSBfZG9jdW1lbnQuY3JlYXRlTm9kZUl0ZXJhdG9yLCBjcmVhdGVEb2N1bWVudEZyYWdtZW50ID0gX2RvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQsIGdldEVsZW1lbnRzQnlUYWdOYW1lID0gX2RvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lO1xuICAgICAgdmFyIGltcG9ydE5vZGUgPSBvcmlnaW5hbERvY3VtZW50LmltcG9ydE5vZGU7XG4gICAgICB2YXIgZG9jdW1lbnRNb2RlID0ge307XG4gICAgICB0cnkge1xuICAgICAgICBkb2N1bWVudE1vZGUgPSBjbG9uZShkb2N1bWVudCkuZG9jdW1lbnRNb2RlID8gZG9jdW1lbnQuZG9jdW1lbnRNb2RlIDoge307XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICB9XG4gICAgICB2YXIgaG9va3MgPSB7fTtcbiAgICAgIERPTVB1cmlmeS5pc1N1cHBvcnRlZCA9IHR5cGVvZiBnZXRQYXJlbnROb2RlID09PSAnZnVuY3Rpb24nICYmIGltcGxlbWVudGF0aW9uICYmIHR5cGVvZiBpbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50TW9kZSAhPT0gOTtcbiAgICAgIHZhciBNVVNUQUNIRV9FWFBSJDEgPSBNVVNUQUNIRV9FWFBSLCBFUkJfRVhQUiQxID0gRVJCX0VYUFIsIERBVEFfQVRUUiQxID0gREFUQV9BVFRSLCBBUklBX0FUVFIkMSA9IEFSSUFfQVRUUiwgSVNfU0NSSVBUX09SX0RBVEEkMSA9IElTX1NDUklQVF9PUl9EQVRBLCBBVFRSX1dISVRFU1BBQ0UkMSA9IEFUVFJfV0hJVEVTUEFDRTtcbiAgICAgIHZhciBJU19BTExPV0VEX1VSSSQxID0gSVNfQUxMT1dFRF9VUkk7XG4gICAgICB2YXIgQUxMT1dFRF9UQUdTID0gbnVsbDtcbiAgICAgIHZhciBERUZBVUxUX0FMTE9XRURfVEFHUyA9IGFkZFRvU2V0KHt9LCBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGh0bWwkMSksIF90b0NvbnN1bWFibGVBcnJheShzdmckMSksIF90b0NvbnN1bWFibGVBcnJheShzdmdGaWx0ZXJzKSwgX3RvQ29uc3VtYWJsZUFycmF5KG1hdGhNbCQxKSwgX3RvQ29uc3VtYWJsZUFycmF5KHRleHQpKSk7XG4gICAgICB2YXIgQUxMT1dFRF9BVFRSID0gbnVsbDtcbiAgICAgIHZhciBERUZBVUxUX0FMTE9XRURfQVRUUiA9IGFkZFRvU2V0KHt9LCBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGh0bWwpLCBfdG9Db25zdW1hYmxlQXJyYXkoc3ZnKSwgX3RvQ29uc3VtYWJsZUFycmF5KG1hdGhNbCksIF90b0NvbnN1bWFibGVBcnJheSh4bWwpKSk7XG4gICAgICB2YXIgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcgPSBPYmplY3Quc2VhbChPYmplY3QuY3JlYXRlKG51bGwsIHtcbiAgICAgICAgdGFnTmFtZUNoZWNrOiB7XG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIGF0dHJpYnV0ZU5hbWVDaGVjazoge1xuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICB9LFxuICAgICAgICBhbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM6IHtcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICAgIHZhciBGT1JCSURfVEFHUyA9IG51bGw7XG4gICAgICB2YXIgRk9SQklEX0FUVFIgPSBudWxsO1xuICAgICAgdmFyIEFMTE9XX0FSSUFfQVRUUiA9IHRydWU7XG4gICAgICB2YXIgQUxMT1dfREFUQV9BVFRSID0gdHJ1ZTtcbiAgICAgIHZhciBBTExPV19VTktOT1dOX1BST1RPQ09MUyA9IGZhbHNlO1xuICAgICAgdmFyIFNBRkVfRk9SX1RFTVBMQVRFUyA9IGZhbHNlO1xuICAgICAgdmFyIFdIT0xFX0RPQ1VNRU5UID0gZmFsc2U7XG4gICAgICB2YXIgU0VUX0NPTkZJRyA9IGZhbHNlO1xuICAgICAgdmFyIEZPUkNFX0JPRFkgPSBmYWxzZTtcbiAgICAgIHZhciBSRVRVUk5fRE9NID0gZmFsc2U7XG4gICAgICB2YXIgUkVUVVJOX0RPTV9GUkFHTUVOVCA9IGZhbHNlO1xuICAgICAgdmFyIFJFVFVSTl9UUlVTVEVEX1RZUEUgPSBmYWxzZTtcbiAgICAgIHZhciBTQU5JVElaRV9ET00gPSB0cnVlO1xuICAgICAgdmFyIEtFRVBfQ09OVEVOVCA9IHRydWU7XG4gICAgICB2YXIgSU5fUExBQ0UgPSBmYWxzZTtcbiAgICAgIHZhciBVU0VfUFJPRklMRVMgPSB7fTtcbiAgICAgIHZhciBGT1JCSURfQ09OVEVOVFMgPSBudWxsO1xuICAgICAgdmFyIERFRkFVTFRfRk9SQklEX0NPTlRFTlRTID0gYWRkVG9TZXQoe30sIFtcbiAgICAgICAgJ2Fubm90YXRpb24teG1sJyxcbiAgICAgICAgJ2F1ZGlvJyxcbiAgICAgICAgJ2NvbGdyb3VwJyxcbiAgICAgICAgJ2Rlc2MnLFxuICAgICAgICAnZm9yZWlnbm9iamVjdCcsXG4gICAgICAgICdoZWFkJyxcbiAgICAgICAgJ2lmcmFtZScsXG4gICAgICAgICdtYXRoJyxcbiAgICAgICAgJ21pJyxcbiAgICAgICAgJ21uJyxcbiAgICAgICAgJ21vJyxcbiAgICAgICAgJ21zJyxcbiAgICAgICAgJ210ZXh0JyxcbiAgICAgICAgJ25vZW1iZWQnLFxuICAgICAgICAnbm9mcmFtZXMnLFxuICAgICAgICAnbm9zY3JpcHQnLFxuICAgICAgICAncGxhaW50ZXh0JyxcbiAgICAgICAgJ3NjcmlwdCcsXG4gICAgICAgICdzdHlsZScsXG4gICAgICAgICdzdmcnLFxuICAgICAgICAndGVtcGxhdGUnLFxuICAgICAgICAndGhlYWQnLFxuICAgICAgICAndGl0bGUnLFxuICAgICAgICAndmlkZW8nLFxuICAgICAgICAneG1wJ1xuICAgICAgXSk7XG4gICAgICB2YXIgREFUQV9VUklfVEFHUyA9IG51bGw7XG4gICAgICB2YXIgREVGQVVMVF9EQVRBX1VSSV9UQUdTID0gYWRkVG9TZXQoe30sIFtcbiAgICAgICAgJ2F1ZGlvJyxcbiAgICAgICAgJ3ZpZGVvJyxcbiAgICAgICAgJ2ltZycsXG4gICAgICAgICdzb3VyY2UnLFxuICAgICAgICAnaW1hZ2UnLFxuICAgICAgICAndHJhY2snXG4gICAgICBdKTtcbiAgICAgIHZhciBVUklfU0FGRV9BVFRSSUJVVEVTID0gbnVsbDtcbiAgICAgIHZhciBERUZBVUxUX1VSSV9TQUZFX0FUVFJJQlVURVMgPSBhZGRUb1NldCh7fSwgW1xuICAgICAgICAnYWx0JyxcbiAgICAgICAgJ2NsYXNzJyxcbiAgICAgICAgJ2ZvcicsXG4gICAgICAgICdpZCcsXG4gICAgICAgICdsYWJlbCcsXG4gICAgICAgICduYW1lJyxcbiAgICAgICAgJ3BhdHRlcm4nLFxuICAgICAgICAncGxhY2Vob2xkZXInLFxuICAgICAgICAncm9sZScsXG4gICAgICAgICdzdW1tYXJ5JyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ3ZhbHVlJyxcbiAgICAgICAgJ3N0eWxlJyxcbiAgICAgICAgJ3htbG5zJ1xuICAgICAgXSk7XG4gICAgICB2YXIgTUFUSE1MX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJztcbiAgICAgIHZhciBTVkdfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcbiAgICAgIHZhciBIVE1MX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJztcbiAgICAgIHZhciBOQU1FU1BBQ0UgPSBIVE1MX05BTUVTUEFDRTtcbiAgICAgIHZhciBJU19FTVBUWV9JTlBVVCA9IGZhbHNlO1xuICAgICAgdmFyIFBBUlNFUl9NRURJQV9UWVBFO1xuICAgICAgdmFyIFNVUFBPUlRFRF9QQVJTRVJfTUVESUFfVFlQRVMgPSBbXG4gICAgICAgICdhcHBsaWNhdGlvbi94aHRtbCt4bWwnLFxuICAgICAgICAndGV4dC9odG1sJ1xuICAgICAgXTtcbiAgICAgIHZhciBERUZBVUxUX1BBUlNFUl9NRURJQV9UWVBFID0gJ3RleHQvaHRtbCc7XG4gICAgICB2YXIgdHJhbnNmb3JtQ2FzZUZ1bmM7XG4gICAgICB2YXIgQ09ORklHID0gbnVsbDtcbiAgICAgIHZhciBmb3JtRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcbiAgICAgIHZhciBpc1JlZ2V4T3JGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzUmVnZXhPckZ1bmN0aW9uKHRlc3RWYWx1ZSkge1xuICAgICAgICByZXR1cm4gdGVzdFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwIHx8IHRlc3RWYWx1ZSBpbnN0YW5jZW9mIEZ1bmN0aW9uO1xuICAgICAgfTtcbiAgICAgIHZhciBfcGFyc2VDb25maWcgPSBmdW5jdGlvbiBfcGFyc2VDb25maWcoY2ZnKSB7XG4gICAgICAgIGlmIChDT05GSUcgJiYgQ09ORklHID09PSBjZmcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjZmcgfHwgX3R5cGVvZihjZmcpICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGNmZyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGNmZyA9IGNsb25lKGNmZyk7XG4gICAgICAgIEFMTE9XRURfVEFHUyA9ICdBTExPV0VEX1RBR1MnIGluIGNmZyA/IGFkZFRvU2V0KHt9LCBjZmcuQUxMT1dFRF9UQUdTKSA6IERFRkFVTFRfQUxMT1dFRF9UQUdTO1xuICAgICAgICBBTExPV0VEX0FUVFIgPSAnQUxMT1dFRF9BVFRSJyBpbiBjZmcgPyBhZGRUb1NldCh7fSwgY2ZnLkFMTE9XRURfQVRUUikgOiBERUZBVUxUX0FMTE9XRURfQVRUUjtcbiAgICAgICAgVVJJX1NBRkVfQVRUUklCVVRFUyA9ICdBRERfVVJJX1NBRkVfQVRUUicgaW4gY2ZnID8gYWRkVG9TZXQoY2xvbmUoREVGQVVMVF9VUklfU0FGRV9BVFRSSUJVVEVTKSwgY2ZnLkFERF9VUklfU0FGRV9BVFRSKSA6IERFRkFVTFRfVVJJX1NBRkVfQVRUUklCVVRFUztcbiAgICAgICAgREFUQV9VUklfVEFHUyA9ICdBRERfREFUQV9VUklfVEFHUycgaW4gY2ZnID8gYWRkVG9TZXQoY2xvbmUoREVGQVVMVF9EQVRBX1VSSV9UQUdTKSwgY2ZnLkFERF9EQVRBX1VSSV9UQUdTKSA6IERFRkFVTFRfREFUQV9VUklfVEFHUztcbiAgICAgICAgRk9SQklEX0NPTlRFTlRTID0gJ0ZPUkJJRF9DT05URU5UUycgaW4gY2ZnID8gYWRkVG9TZXQoe30sIGNmZy5GT1JCSURfQ09OVEVOVFMpIDogREVGQVVMVF9GT1JCSURfQ09OVEVOVFM7XG4gICAgICAgIEZPUkJJRF9UQUdTID0gJ0ZPUkJJRF9UQUdTJyBpbiBjZmcgPyBhZGRUb1NldCh7fSwgY2ZnLkZPUkJJRF9UQUdTKSA6IHt9O1xuICAgICAgICBGT1JCSURfQVRUUiA9ICdGT1JCSURfQVRUUicgaW4gY2ZnID8gYWRkVG9TZXQoe30sIGNmZy5GT1JCSURfQVRUUikgOiB7fTtcbiAgICAgICAgVVNFX1BST0ZJTEVTID0gJ1VTRV9QUk9GSUxFUycgaW4gY2ZnID8gY2ZnLlVTRV9QUk9GSUxFUyA6IGZhbHNlO1xuICAgICAgICBBTExPV19BUklBX0FUVFIgPSBjZmcuQUxMT1dfQVJJQV9BVFRSICE9PSBmYWxzZTtcbiAgICAgICAgQUxMT1dfREFUQV9BVFRSID0gY2ZnLkFMTE9XX0RBVEFfQVRUUiAhPT0gZmFsc2U7XG4gICAgICAgIEFMTE9XX1VOS05PV05fUFJPVE9DT0xTID0gY2ZnLkFMTE9XX1VOS05PV05fUFJPVE9DT0xTIHx8IGZhbHNlO1xuICAgICAgICBTQUZFX0ZPUl9URU1QTEFURVMgPSBjZmcuU0FGRV9GT1JfVEVNUExBVEVTIHx8IGZhbHNlO1xuICAgICAgICBXSE9MRV9ET0NVTUVOVCA9IGNmZy5XSE9MRV9ET0NVTUVOVCB8fCBmYWxzZTtcbiAgICAgICAgUkVUVVJOX0RPTSA9IGNmZy5SRVRVUk5fRE9NIHx8IGZhbHNlO1xuICAgICAgICBSRVRVUk5fRE9NX0ZSQUdNRU5UID0gY2ZnLlJFVFVSTl9ET01fRlJBR01FTlQgfHwgZmFsc2U7XG4gICAgICAgIFJFVFVSTl9UUlVTVEVEX1RZUEUgPSBjZmcuUkVUVVJOX1RSVVNURURfVFlQRSB8fCBmYWxzZTtcbiAgICAgICAgRk9SQ0VfQk9EWSA9IGNmZy5GT1JDRV9CT0RZIHx8IGZhbHNlO1xuICAgICAgICBTQU5JVElaRV9ET00gPSBjZmcuU0FOSVRJWkVfRE9NICE9PSBmYWxzZTtcbiAgICAgICAgS0VFUF9DT05URU5UID0gY2ZnLktFRVBfQ09OVEVOVCAhPT0gZmFsc2U7XG4gICAgICAgIElOX1BMQUNFID0gY2ZnLklOX1BMQUNFIHx8IGZhbHNlO1xuICAgICAgICBJU19BTExPV0VEX1VSSSQxID0gY2ZnLkFMTE9XRURfVVJJX1JFR0VYUCB8fCBJU19BTExPV0VEX1VSSSQxO1xuICAgICAgICBOQU1FU1BBQ0UgPSBjZmcuTkFNRVNQQUNFIHx8IEhUTUxfTkFNRVNQQUNFO1xuICAgICAgICBpZiAoY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HICYmIGlzUmVnZXhPckZ1bmN0aW9uKGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spKSB7XG4gICAgICAgICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrID0gY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HICYmIGlzUmVnZXhPckZ1bmN0aW9uKGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spKSB7XG4gICAgICAgICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrID0gY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HICYmIHR5cGVvZiBjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICBDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMgPSBjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzO1xuICAgICAgICB9XG4gICAgICAgIFBBUlNFUl9NRURJQV9UWVBFID0gU1VQUE9SVEVEX1BBUlNFUl9NRURJQV9UWVBFUy5pbmRleE9mKGNmZy5QQVJTRVJfTUVESUFfVFlQRSkgPT09IC0xID8gUEFSU0VSX01FRElBX1RZUEUgPSBERUZBVUxUX1BBUlNFUl9NRURJQV9UWVBFIDogUEFSU0VSX01FRElBX1RZUEUgPSBjZmcuUEFSU0VSX01FRElBX1RZUEU7XG4gICAgICAgIHRyYW5zZm9ybUNhc2VGdW5jID0gUEFSU0VSX01FRElBX1RZUEUgPT09ICdhcHBsaWNhdGlvbi94aHRtbCt4bWwnID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSA6IHN0cmluZ1RvTG93ZXJDYXNlO1xuICAgICAgICBpZiAoU0FGRV9GT1JfVEVNUExBVEVTKSB7XG4gICAgICAgICAgQUxMT1dfREFUQV9BVFRSID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFJFVFVSTl9ET01fRlJBR01FTlQpIHtcbiAgICAgICAgICBSRVRVUk5fRE9NID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVVNFX1BST0ZJTEVTKSB7XG4gICAgICAgICAgQUxMT1dFRF9UQUdTID0gYWRkVG9TZXQoe30sIF90b0NvbnN1bWFibGVBcnJheSh0ZXh0KSk7XG4gICAgICAgICAgQUxMT1dFRF9BVFRSID0gW107XG4gICAgICAgICAgaWYgKFVTRV9QUk9GSUxFUy5odG1sID09PSB0cnVlKSB7XG4gICAgICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIGh0bWwkMSk7XG4gICAgICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIGh0bWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoVVNFX1BST0ZJTEVTLnN2ZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBzdmckMSk7XG4gICAgICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIHN2Zyk7XG4gICAgICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIHhtbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChVU0VfUFJPRklMRVMuc3ZnRmlsdGVycyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBzdmdGaWx0ZXJzKTtcbiAgICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgc3ZnKTtcbiAgICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgeG1sKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFVTRV9QUk9GSUxFUy5tYXRoTWwgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgbWF0aE1sJDEpO1xuICAgICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBtYXRoTWwpO1xuICAgICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCB4bWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ZnLkFERF9UQUdTKSB7XG4gICAgICAgICAgaWYgKEFMTE9XRURfVEFHUyA9PT0gREVGQVVMVF9BTExPV0VEX1RBR1MpIHtcbiAgICAgICAgICAgIEFMTE9XRURfVEFHUyA9IGNsb25lKEFMTE9XRURfVEFHUyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgY2ZnLkFERF9UQUdTKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ZnLkFERF9BVFRSKSB7XG4gICAgICAgICAgaWYgKEFMTE9XRURfQVRUUiA9PT0gREVGQVVMVF9BTExPV0VEX0FUVFIpIHtcbiAgICAgICAgICAgIEFMTE9XRURfQVRUUiA9IGNsb25lKEFMTE9XRURfQVRUUik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgY2ZnLkFERF9BVFRSKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ZnLkFERF9VUklfU0FGRV9BVFRSKSB7XG4gICAgICAgICAgYWRkVG9TZXQoVVJJX1NBRkVfQVRUUklCVVRFUywgY2ZnLkFERF9VUklfU0FGRV9BVFRSKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ZnLkZPUkJJRF9DT05URU5UUykge1xuICAgICAgICAgIGlmIChGT1JCSURfQ09OVEVOVFMgPT09IERFRkFVTFRfRk9SQklEX0NPTlRFTlRTKSB7XG4gICAgICAgICAgICBGT1JCSURfQ09OVEVOVFMgPSBjbG9uZShGT1JCSURfQ09OVEVOVFMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhZGRUb1NldChGT1JCSURfQ09OVEVOVFMsIGNmZy5GT1JCSURfQ09OVEVOVFMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChLRUVQX0NPTlRFTlQpIHtcbiAgICAgICAgICBBTExPV0VEX1RBR1NbJyN0ZXh0J10gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChXSE9MRV9ET0NVTUVOVCkge1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgW1xuICAgICAgICAgICAgJ2h0bWwnLFxuICAgICAgICAgICAgJ2hlYWQnLFxuICAgICAgICAgICAgJ2JvZHknXG4gICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFMTE9XRURfVEFHUy50YWJsZSkge1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgWyd0Ym9keSddKTtcbiAgICAgICAgICBkZWxldGUgRk9SQklEX1RBR1MudGJvZHk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZyZWV6ZSkge1xuICAgICAgICAgIGZyZWV6ZShjZmcpO1xuICAgICAgICB9XG4gICAgICAgIENPTkZJRyA9IGNmZztcbiAgICAgIH07XG4gICAgICB2YXIgTUFUSE1MX1RFWFRfSU5URUdSQVRJT05fUE9JTlRTID0gYWRkVG9TZXQoe30sIFtcbiAgICAgICAgJ21pJyxcbiAgICAgICAgJ21vJyxcbiAgICAgICAgJ21uJyxcbiAgICAgICAgJ21zJyxcbiAgICAgICAgJ210ZXh0J1xuICAgICAgXSk7XG4gICAgICB2YXIgSFRNTF9JTlRFR1JBVElPTl9QT0lOVFMgPSBhZGRUb1NldCh7fSwgW1xuICAgICAgICAnZm9yZWlnbm9iamVjdCcsXG4gICAgICAgICdkZXNjJyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ2Fubm90YXRpb24teG1sJ1xuICAgICAgXSk7XG4gICAgICB2YXIgQ09NTU9OX1NWR19BTkRfSFRNTF9FTEVNRU5UUyA9IGFkZFRvU2V0KHt9LCBbXG4gICAgICAgICd0aXRsZScsXG4gICAgICAgICdzdHlsZScsXG4gICAgICAgICdmb250JyxcbiAgICAgICAgJ2EnLFxuICAgICAgICAnc2NyaXB0J1xuICAgICAgXSk7XG4gICAgICB2YXIgQUxMX1NWR19UQUdTID0gYWRkVG9TZXQoe30sIHN2ZyQxKTtcbiAgICAgIGFkZFRvU2V0KEFMTF9TVkdfVEFHUywgc3ZnRmlsdGVycyk7XG4gICAgICBhZGRUb1NldChBTExfU1ZHX1RBR1MsIHN2Z0Rpc2FsbG93ZWQpO1xuICAgICAgdmFyIEFMTF9NQVRITUxfVEFHUyA9IGFkZFRvU2V0KHt9LCBtYXRoTWwkMSk7XG4gICAgICBhZGRUb1NldChBTExfTUFUSE1MX1RBR1MsIG1hdGhNbERpc2FsbG93ZWQpO1xuICAgICAgdmFyIF9jaGVja1ZhbGlkTmFtZXNwYWNlID0gZnVuY3Rpb24gX2NoZWNrVmFsaWROYW1lc3BhY2UoZWxlbWVudCkge1xuICAgICAgICB2YXIgcGFyZW50ID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcbiAgICAgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC50YWdOYW1lKSB7XG4gICAgICAgICAgcGFyZW50ID0ge1xuICAgICAgICAgICAgbmFtZXNwYWNlVVJJOiBIVE1MX05BTUVTUEFDRSxcbiAgICAgICAgICAgIHRhZ05hbWU6ICd0ZW1wbGF0ZSdcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHZhciB0YWdOYW1lID0gc3RyaW5nVG9Mb3dlckNhc2UoZWxlbWVudC50YWdOYW1lKTtcbiAgICAgICAgdmFyIHBhcmVudFRhZ05hbWUgPSBzdHJpbmdUb0xvd2VyQ2FzZShwYXJlbnQudGFnTmFtZSk7XG4gICAgICAgIGlmIChlbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRSkge1xuICAgICAgICAgIGlmIChwYXJlbnQubmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09ICdzdmcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gTUFUSE1MX05BTUVTUEFDRSkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09ICdzdmcnICYmIChwYXJlbnRUYWdOYW1lID09PSAnYW5ub3RhdGlvbi14bWwnIHx8IE1BVEhNTF9URVhUX0lOVEVHUkFUSU9OX1BPSU5UU1twYXJlbnRUYWdOYW1lXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBCb29sZWFuKEFMTF9TVkdfVEFHU1t0YWdOYW1lXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQubmFtZXNwYWNlVVJJID09PSBNQVRITUxfTkFNRVNQQUNFKSB7XG4gICAgICAgICAgaWYgKHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFnTmFtZSA9PT0gJ21hdGgnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRSkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09ICdtYXRoJyAmJiBIVE1MX0lOVEVHUkFUSU9OX1BPSU5UU1twYXJlbnRUYWdOYW1lXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIEJvb2xlYW4oQUxMX01BVEhNTF9UQUdTW3RhZ05hbWVdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgICAgaWYgKHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0UgJiYgIUhUTUxfSU5URUdSQVRJT05fUE9JTlRTW3BhcmVudFRhZ05hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXJlbnQubmFtZXNwYWNlVVJJID09PSBNQVRITUxfTkFNRVNQQUNFICYmICFNQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFNbcGFyZW50VGFnTmFtZV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICFBTExfTUFUSE1MX1RBR1NbdGFnTmFtZV0gJiYgKENPTU1PTl9TVkdfQU5EX0hUTUxfRUxFTUVOVFNbdGFnTmFtZV0gfHwgIUFMTF9TVkdfVEFHU1t0YWdOYW1lXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfTtcbiAgICAgIHZhciBfZm9yY2VSZW1vdmUgPSBmdW5jdGlvbiBfZm9yY2VSZW1vdmUobm9kZSkge1xuICAgICAgICBhcnJheVB1c2goRE9NUHVyaWZ5LnJlbW92ZWQsIHsgZWxlbWVudDogbm9kZSB9KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbm9kZS5vdXRlckhUTUwgPSBlbXB0eUhUTUw7XG4gICAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB2YXIgX3JlbW92ZUF0dHJpYnV0ZSA9IGZ1bmN0aW9uIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgbm9kZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGFycmF5UHVzaChET01QdXJpZnkucmVtb3ZlZCwge1xuICAgICAgICAgICAgYXR0cmlidXRlOiBub2RlLmdldEF0dHJpYnV0ZU5vZGUobmFtZSksXG4gICAgICAgICAgICBmcm9tOiBub2RlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICBhcnJheVB1c2goRE9NUHVyaWZ5LnJlbW92ZWQsIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTogbnVsbCxcbiAgICAgICAgICAgIGZyb206IG5vZGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgaWYgKG5hbWUgPT09ICdpcycgJiYgIUFMTE9XRURfQVRUUltuYW1lXSkge1xuICAgICAgICAgIGlmIChSRVRVUk5fRE9NIHx8IFJFVFVSTl9ET01fRlJBR01FTlQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIF9mb3JjZVJlbW92ZShub2RlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwgJycpO1xuICAgICAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHZhciBfaW5pdERvY3VtZW50ID0gZnVuY3Rpb24gX2luaXREb2N1bWVudChkaXJ0eSkge1xuICAgICAgICB2YXIgZG9jO1xuICAgICAgICB2YXIgbGVhZGluZ1doaXRlc3BhY2U7XG4gICAgICAgIGlmIChGT1JDRV9CT0RZKSB7XG4gICAgICAgICAgZGlydHkgPSAnPHJlbW92ZT48L3JlbW92ZT4nICsgZGlydHk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIG1hdGNoZXMgPSBzdHJpbmdNYXRjaChkaXJ0eSwgL15bXFxyXFxuXFx0IF0rLyk7XG4gICAgICAgICAgbGVhZGluZ1doaXRlc3BhY2UgPSBtYXRjaGVzICYmIG1hdGNoZXNbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFBBUlNFUl9NRURJQV9UWVBFID09PSAnYXBwbGljYXRpb24veGh0bWwreG1sJykge1xuICAgICAgICAgIGRpcnR5ID0gJzxodG1sIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiPjxoZWFkPjwvaGVhZD48Ym9keT4nICsgZGlydHkgKyAnPC9ib2R5PjwvaHRtbD4nO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkaXJ0eVBheWxvYWQgPSB0cnVzdGVkVHlwZXNQb2xpY3kgPyB0cnVzdGVkVHlwZXNQb2xpY3kuY3JlYXRlSFRNTChkaXJ0eSkgOiBkaXJ0eTtcbiAgICAgICAgaWYgKE5BTUVTUEFDRSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhkaXJ0eVBheWxvYWQsIFBBUlNFUl9NRURJQV9UWVBFKTtcbiAgICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZG9jIHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICAgZG9jID0gaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQoTkFNRVNQQUNFLCAndGVtcGxhdGUnLCBudWxsKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZG9jLmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUwgPSBJU19FTVBUWV9JTlBVVCA/ICcnIDogZGlydHlQYXlsb2FkO1xuICAgICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGJvZHkgPSBkb2MuYm9keSB8fCBkb2MuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBpZiAoZGlydHkgJiYgbGVhZGluZ1doaXRlc3BhY2UpIHtcbiAgICAgICAgICBib2R5Lmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsZWFkaW5nV2hpdGVzcGFjZSksIGJvZHkuY2hpbGROb2Rlc1swXSB8fCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoTkFNRVNQQUNFID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgICAgIHJldHVybiBnZXRFbGVtZW50c0J5VGFnTmFtZS5jYWxsKGRvYywgV0hPTEVfRE9DVU1FTlQgPyAnaHRtbCcgOiAnYm9keScpWzBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBXSE9MRV9ET0NVTUVOVCA/IGRvYy5kb2N1bWVudEVsZW1lbnQgOiBib2R5O1xuICAgICAgfTtcbiAgICAgIHZhciBfY3JlYXRlSXRlcmF0b3IgPSBmdW5jdGlvbiBfY3JlYXRlSXRlcmF0b3Iocm9vdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTm9kZUl0ZXJhdG9yLmNhbGwocm9vdC5vd25lckRvY3VtZW50IHx8IHJvb3QsIHJvb3QsIE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UIHwgTm9kZUZpbHRlci5TSE9XX0NPTU1FTlQgfCBOb2RlRmlsdGVyLlNIT1dfVEVYVCwgbnVsbCwgZmFsc2UpO1xuICAgICAgfTtcbiAgICAgIHZhciBfaXNDbG9iYmVyZWQgPSBmdW5jdGlvbiBfaXNDbG9iYmVyZWQoZWxtKSB7XG4gICAgICAgIHJldHVybiBlbG0gaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQgJiYgKHR5cGVvZiBlbG0ubm9kZU5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBlbG0udGV4dENvbnRlbnQgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBlbG0ucmVtb3ZlQ2hpbGQgIT09ICdmdW5jdGlvbicgfHwgIShlbG0uYXR0cmlidXRlcyBpbnN0YW5jZW9mIE5hbWVkTm9kZU1hcCkgfHwgdHlwZW9mIGVsbS5yZW1vdmVBdHRyaWJ1dGUgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGVsbS5zZXRBdHRyaWJ1dGUgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGVsbS5uYW1lc3BhY2VVUkkgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBlbG0uaW5zZXJ0QmVmb3JlICE9PSAnZnVuY3Rpb24nKTtcbiAgICAgIH07XG4gICAgICB2YXIgX2lzTm9kZSA9IGZ1bmN0aW9uIF9pc05vZGUob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBfdHlwZW9mKE5vZGUpID09PSAnb2JqZWN0JyA/IG9iamVjdCBpbnN0YW5jZW9mIE5vZGUgOiBvYmplY3QgJiYgX3R5cGVvZihvYmplY3QpID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb2JqZWN0Lm5vZGVUeXBlID09PSAnbnVtYmVyJyAmJiB0eXBlb2Ygb2JqZWN0Lm5vZGVOYW1lID09PSAnc3RyaW5nJztcbiAgICAgIH07XG4gICAgICB2YXIgX2V4ZWN1dGVIb29rID0gZnVuY3Rpb24gX2V4ZWN1dGVIb29rKGVudHJ5UG9pbnQsIGN1cnJlbnROb2RlLCBkYXRhKSB7XG4gICAgICAgIGlmICghaG9va3NbZW50cnlQb2ludF0pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXJyYXlGb3JFYWNoKGhvb2tzW2VudHJ5UG9pbnRdLCBmdW5jdGlvbiAoaG9vaykge1xuICAgICAgICAgIGhvb2suY2FsbChET01QdXJpZnksIGN1cnJlbnROb2RlLCBkYXRhLCBDT05GSUcpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICB2YXIgX3Nhbml0aXplRWxlbWVudHMgPSBmdW5jdGlvbiBfc2FuaXRpemVFbGVtZW50cyhjdXJyZW50Tm9kZSkge1xuICAgICAgICB2YXIgY29udGVudDtcbiAgICAgICAgX2V4ZWN1dGVIb29rKCdiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzJywgY3VycmVudE5vZGUsIG51bGwpO1xuICAgICAgICBpZiAoX2lzQ2xvYmJlcmVkKGN1cnJlbnROb2RlKSkge1xuICAgICAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlZ0V4cFRlc3QoL1tcXHUwMDgwLVxcdUZGRkZdLywgY3VycmVudE5vZGUubm9kZU5hbWUpKSB7XG4gICAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGFnTmFtZSA9IHRyYW5zZm9ybUNhc2VGdW5jKGN1cnJlbnROb2RlLm5vZGVOYW1lKTtcbiAgICAgICAgX2V4ZWN1dGVIb29rKCd1cG9uU2FuaXRpemVFbGVtZW50JywgY3VycmVudE5vZGUsIHtcbiAgICAgICAgICB0YWdOYW1lOiB0YWdOYW1lLFxuICAgICAgICAgIGFsbG93ZWRUYWdzOiBBTExPV0VEX1RBR1NcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjdXJyZW50Tm9kZS5oYXNDaGlsZE5vZGVzKCkgJiYgIV9pc05vZGUoY3VycmVudE5vZGUuZmlyc3RFbGVtZW50Q2hpbGQpICYmICghX2lzTm9kZShjdXJyZW50Tm9kZS5jb250ZW50KSB8fCAhX2lzTm9kZShjdXJyZW50Tm9kZS5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkKSkgJiYgcmVnRXhwVGVzdCgvPFsvXFx3XS9nLCBjdXJyZW50Tm9kZS5pbm5lckhUTUwpICYmIHJlZ0V4cFRlc3QoLzxbL1xcd10vZywgY3VycmVudE5vZGUudGV4dENvbnRlbnQpKSB7XG4gICAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFnTmFtZSA9PT0gJ3NlbGVjdCcgJiYgcmVnRXhwVGVzdCgvPHRlbXBsYXRlL2ksIGN1cnJlbnROb2RlLmlubmVySFRNTCkpIHtcbiAgICAgICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghQUxMT1dFRF9UQUdTW3RhZ05hbWVdIHx8IEZPUkJJRF9UQUdTW3RhZ05hbWVdKSB7XG4gICAgICAgICAgaWYgKCFGT1JCSURfVEFHU1t0YWdOYW1lXSAmJiBfYmFzaWNDdXN0b21FbGVtZW50VGVzdCh0YWdOYW1lKSkge1xuICAgICAgICAgICAgaWYgKENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCAmJiByZWdFeHBUZXN0KENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaywgdGFnTmFtZSkpXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmIChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sodGFnTmFtZSkpXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKEtFRVBfQ09OVEVOVCAmJiAhRk9SQklEX0NPTlRFTlRTW3RhZ05hbWVdKSB7XG4gICAgICAgICAgICB2YXIgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoY3VycmVudE5vZGUpIHx8IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgICAgICAgICB2YXIgY2hpbGROb2RlcyA9IGdldENoaWxkTm9kZXMoY3VycmVudE5vZGUpIHx8IGN1cnJlbnROb2RlLmNoaWxkTm9kZXM7XG4gICAgICAgICAgICBpZiAoY2hpbGROb2RlcyAmJiBwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgIHZhciBjaGlsZENvdW50ID0gY2hpbGROb2Rlcy5sZW5ndGg7XG4gICAgICAgICAgICAgIGZvciAodmFyIGkgPSBjaGlsZENvdW50IC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShjbG9uZU5vZGUoY2hpbGROb2Rlc1tpXSwgdHJ1ZSksIGdldE5leHRTaWJsaW5nKGN1cnJlbnROb2RlKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudE5vZGUgaW5zdGFuY2VvZiBFbGVtZW50ICYmICFfY2hlY2tWYWxpZE5hbWVzcGFjZShjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgodGFnTmFtZSA9PT0gJ25vc2NyaXB0JyB8fCB0YWdOYW1lID09PSAnbm9lbWJlZCcpICYmIHJlZ0V4cFRlc3QoLzxcXC9ubyhzY3JpcHR8ZW1iZWQpL2ksIGN1cnJlbnROb2RlLmlubmVySFRNTCkpIHtcbiAgICAgICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChTQUZFX0ZPUl9URU1QTEFURVMgJiYgY3VycmVudE5vZGUubm9kZVR5cGUgPT09IDMpIHtcbiAgICAgICAgICBjb250ZW50ID0gY3VycmVudE5vZGUudGV4dENvbnRlbnQ7XG4gICAgICAgICAgY29udGVudCA9IHN0cmluZ1JlcGxhY2UoY29udGVudCwgTVVTVEFDSEVfRVhQUiQxLCAnICcpO1xuICAgICAgICAgIGNvbnRlbnQgPSBzdHJpbmdSZXBsYWNlKGNvbnRlbnQsIEVSQl9FWFBSJDEsICcgJyk7XG4gICAgICAgICAgaWYgKGN1cnJlbnROb2RlLnRleHRDb250ZW50ICE9PSBjb250ZW50KSB7XG4gICAgICAgICAgICBhcnJheVB1c2goRE9NUHVyaWZ5LnJlbW92ZWQsIHsgZWxlbWVudDogY3VycmVudE5vZGUuY2xvbmVOb2RlKCkgfSk7XG4gICAgICAgICAgICBjdXJyZW50Tm9kZS50ZXh0Q29udGVudCA9IGNvbnRlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9leGVjdXRlSG9vaygnYWZ0ZXJTYW5pdGl6ZUVsZW1lbnRzJywgY3VycmVudE5vZGUsIG51bGwpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9O1xuICAgICAgdmFyIF9pc1ZhbGlkQXR0cmlidXRlID0gZnVuY3Rpb24gX2lzVmFsaWRBdHRyaWJ1dGUobGNUYWcsIGxjTmFtZSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKFNBTklUSVpFX0RPTSAmJiAobGNOYW1lID09PSAnaWQnIHx8IGxjTmFtZSA9PT0gJ25hbWUnKSAmJiAodmFsdWUgaW4gZG9jdW1lbnQgfHwgdmFsdWUgaW4gZm9ybUVsZW1lbnQpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBTExPV19EQVRBX0FUVFIgJiYgIUZPUkJJRF9BVFRSW2xjTmFtZV0gJiYgcmVnRXhwVGVzdChEQVRBX0FUVFIkMSwgbGNOYW1lKSk7XG4gICAgICAgIGVsc2UgaWYgKEFMTE9XX0FSSUFfQVRUUiAmJiByZWdFeHBUZXN0KEFSSUFfQVRUUiQxLCBsY05hbWUpKTtcbiAgICAgICAgZWxzZSBpZiAoIUFMTE9XRURfQVRUUltsY05hbWVdIHx8IEZPUkJJRF9BVFRSW2xjTmFtZV0pIHtcbiAgICAgICAgICBpZiAoX2Jhc2ljQ3VzdG9tRWxlbWVudFRlc3QobGNUYWcpICYmIChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAgJiYgcmVnRXhwVGVzdChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2ssIGxjVGFnKSB8fCBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sobGNUYWcpKSAmJiAoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwICYmIHJlZ0V4cFRlc3QoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrLCBsY05hbWUpIHx8IENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayhsY05hbWUpKSB8fCBsY05hbWUgPT09ICdpcycgJiYgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzICYmIChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAgJiYgcmVnRXhwVGVzdChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2ssIHZhbHVlKSB8fCBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sodmFsdWUpKSk7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFVSSV9TQUZFX0FUVFJJQlVURVNbbGNOYW1lXSk7XG4gICAgICAgIGVsc2UgaWYgKHJlZ0V4cFRlc3QoSVNfQUxMT1dFRF9VUkkkMSwgc3RyaW5nUmVwbGFjZSh2YWx1ZSwgQVRUUl9XSElURVNQQUNFJDEsICcnKSkpO1xuICAgICAgICBlbHNlIGlmICgobGNOYW1lID09PSAnc3JjJyB8fCBsY05hbWUgPT09ICd4bGluazpocmVmJyB8fCBsY05hbWUgPT09ICdocmVmJykgJiYgbGNUYWcgIT09ICdzY3JpcHQnICYmIHN0cmluZ0luZGV4T2YodmFsdWUsICdkYXRhOicpID09PSAwICYmIERBVEFfVVJJX1RBR1NbbGNUYWddKTtcbiAgICAgICAgZWxzZSBpZiAoQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFMgJiYgIXJlZ0V4cFRlc3QoSVNfU0NSSVBUX09SX0RBVEEkMSwgc3RyaW5nUmVwbGFjZSh2YWx1ZSwgQVRUUl9XSElURVNQQUNFJDEsICcnKSkpO1xuICAgICAgICBlbHNlIGlmICghdmFsdWUpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgICAgdmFyIF9iYXNpY0N1c3RvbUVsZW1lbnRUZXN0ID0gZnVuY3Rpb24gX2Jhc2ljQ3VzdG9tRWxlbWVudFRlc3QodGFnTmFtZSkge1xuICAgICAgICByZXR1cm4gdGFnTmFtZS5pbmRleE9mKCctJykgPiAwO1xuICAgICAgfTtcbiAgICAgIHZhciBfc2FuaXRpemVBdHRyaWJ1dGVzID0gZnVuY3Rpb24gX3Nhbml0aXplQXR0cmlidXRlcyhjdXJyZW50Tm9kZSkge1xuICAgICAgICB2YXIgYXR0cjtcbiAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICB2YXIgbGNOYW1lO1xuICAgICAgICB2YXIgbDtcbiAgICAgICAgX2V4ZWN1dGVIb29rKCdiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXMnLCBjdXJyZW50Tm9kZSwgbnVsbCk7XG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gY3VycmVudE5vZGUuYXR0cmlidXRlcztcbiAgICAgICAgaWYgKCFhdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBob29rRXZlbnQgPSB7XG4gICAgICAgICAgYXR0ck5hbWU6ICcnLFxuICAgICAgICAgIGF0dHJWYWx1ZTogJycsXG4gICAgICAgICAga2VlcEF0dHI6IHRydWUsXG4gICAgICAgICAgYWxsb3dlZEF0dHJpYnV0ZXM6IEFMTE9XRURfQVRUUlxuICAgICAgICB9O1xuICAgICAgICBsID0gYXR0cmlidXRlcy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChsLS0pIHtcbiAgICAgICAgICBhdHRyID0gYXR0cmlidXRlc1tsXTtcbiAgICAgICAgICB2YXIgX2F0dHIgPSBhdHRyLCBuYW1lID0gX2F0dHIubmFtZSwgbmFtZXNwYWNlVVJJID0gX2F0dHIubmFtZXNwYWNlVVJJO1xuICAgICAgICAgIHZhbHVlID0gbmFtZSA9PT0gJ3ZhbHVlJyA/IGF0dHIudmFsdWUgOiBzdHJpbmdUcmltKGF0dHIudmFsdWUpO1xuICAgICAgICAgIGxjTmFtZSA9IHRyYW5zZm9ybUNhc2VGdW5jKG5hbWUpO1xuICAgICAgICAgIHZhciBpbml0VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICBob29rRXZlbnQuYXR0ck5hbWUgPSBsY05hbWU7XG4gICAgICAgICAgaG9va0V2ZW50LmF0dHJWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgIGhvb2tFdmVudC5rZWVwQXR0ciA9IHRydWU7XG4gICAgICAgICAgaG9va0V2ZW50LmZvcmNlS2VlcEF0dHIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgX2V4ZWN1dGVIb29rKCd1cG9uU2FuaXRpemVBdHRyaWJ1dGUnLCBjdXJyZW50Tm9kZSwgaG9va0V2ZW50KTtcbiAgICAgICAgICB2YWx1ZSA9IGhvb2tFdmVudC5hdHRyVmFsdWU7XG4gICAgICAgICAgaWYgKGhvb2tFdmVudC5mb3JjZUtlZXBBdHRyKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFob29rRXZlbnQua2VlcEF0dHIpIHtcbiAgICAgICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZWdFeHBUZXN0KC9cXC8+L2ksIHZhbHVlKSkge1xuICAgICAgICAgICAgX3JlbW92ZUF0dHJpYnV0ZShuYW1lLCBjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFNBRkVfRk9SX1RFTVBMQVRFUykge1xuICAgICAgICAgICAgdmFsdWUgPSBzdHJpbmdSZXBsYWNlKHZhbHVlLCBNVVNUQUNIRV9FWFBSJDEsICcgJyk7XG4gICAgICAgICAgICB2YWx1ZSA9IHN0cmluZ1JlcGxhY2UodmFsdWUsIEVSQl9FWFBSJDEsICcgJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBsY1RhZyA9IHRyYW5zZm9ybUNhc2VGdW5jKGN1cnJlbnROb2RlLm5vZGVOYW1lKTtcbiAgICAgICAgICBpZiAoIV9pc1ZhbGlkQXR0cmlidXRlKGxjVGFnLCBsY05hbWUsIHZhbHVlKSkge1xuICAgICAgICAgICAgX3JlbW92ZUF0dHJpYnV0ZShuYW1lLCBjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSBpbml0VmFsdWUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGlmIChuYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5zZXRBdHRyaWJ1dGVOUyhuYW1lc3BhY2VVUkksIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfZXhlY3V0ZUhvb2soJ2FmdGVyU2FuaXRpemVBdHRyaWJ1dGVzJywgY3VycmVudE5vZGUsIG51bGwpO1xuICAgICAgfTtcbiAgICAgIHZhciBfc2FuaXRpemVTaGFkb3dET00gPSBmdW5jdGlvbiBfc2FuaXRpemVTaGFkb3dET00oZnJhZ21lbnQpIHtcbiAgICAgICAgdmFyIHNoYWRvd05vZGU7XG4gICAgICAgIHZhciBzaGFkb3dJdGVyYXRvciA9IF9jcmVhdGVJdGVyYXRvcihmcmFnbWVudCk7XG4gICAgICAgIF9leGVjdXRlSG9vaygnYmVmb3JlU2FuaXRpemVTaGFkb3dET00nLCBmcmFnbWVudCwgbnVsbCk7XG4gICAgICAgIHdoaWxlIChzaGFkb3dOb2RlID0gc2hhZG93SXRlcmF0b3IubmV4dE5vZGUoKSkge1xuICAgICAgICAgIF9leGVjdXRlSG9vaygndXBvblNhbml0aXplU2hhZG93Tm9kZScsIHNoYWRvd05vZGUsIG51bGwpO1xuICAgICAgICAgIGlmIChfc2FuaXRpemVFbGVtZW50cyhzaGFkb3dOb2RlKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzaGFkb3dOb2RlLmNvbnRlbnQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSB7XG4gICAgICAgICAgICBfc2FuaXRpemVTaGFkb3dET00oc2hhZG93Tm9kZS5jb250ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgX3Nhbml0aXplQXR0cmlidXRlcyhzaGFkb3dOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBfZXhlY3V0ZUhvb2soJ2FmdGVyU2FuaXRpemVTaGFkb3dET00nLCBmcmFnbWVudCwgbnVsbCk7XG4gICAgICB9O1xuICAgICAgRE9NUHVyaWZ5LnNhbml0aXplID0gZnVuY3Rpb24gKGRpcnR5LCBjZmcpIHtcbiAgICAgICAgdmFyIGJvZHk7XG4gICAgICAgIHZhciBpbXBvcnRlZE5vZGU7XG4gICAgICAgIHZhciBjdXJyZW50Tm9kZTtcbiAgICAgICAgdmFyIG9sZE5vZGU7XG4gICAgICAgIHZhciByZXR1cm5Ob2RlO1xuICAgICAgICBJU19FTVBUWV9JTlBVVCA9ICFkaXJ0eTtcbiAgICAgICAgaWYgKElTX0VNUFRZX0lOUFVUKSB7XG4gICAgICAgICAgZGlydHkgPSAnPCEtLT4nO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZGlydHkgIT09ICdzdHJpbmcnICYmICFfaXNOb2RlKGRpcnR5KSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGlydHkudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IHR5cGVFcnJvckNyZWF0ZSgndG9TdHJpbmcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGlydHkgPSBkaXJ0eS50b1N0cmluZygpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkaXJ0eSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgdGhyb3cgdHlwZUVycm9yQ3JlYXRlKCdkaXJ0eSBpcyBub3QgYSBzdHJpbmcsIGFib3J0aW5nJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghRE9NUHVyaWZ5LmlzU3VwcG9ydGVkKSB7XG4gICAgICAgICAgaWYgKF90eXBlb2Yod2luZG93LnRvU3RhdGljSFRNTCkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB3aW5kb3cudG9TdGF0aWNIVE1MID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRpcnR5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICByZXR1cm4gd2luZG93LnRvU3RhdGljSFRNTChkaXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoX2lzTm9kZShkaXJ0eSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy50b1N0YXRpY0hUTUwoZGlydHkub3V0ZXJIVE1MKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGRpcnR5O1xuICAgICAgICB9XG4gICAgICAgIGlmICghU0VUX0NPTkZJRykge1xuICAgICAgICAgIF9wYXJzZUNvbmZpZyhjZmcpO1xuICAgICAgICB9XG4gICAgICAgIERPTVB1cmlmeS5yZW1vdmVkID0gW107XG4gICAgICAgIGlmICh0eXBlb2YgZGlydHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgSU5fUExBQ0UgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSU5fUExBQ0UpIHtcbiAgICAgICAgICBpZiAoZGlydHkubm9kZU5hbWUpIHtcbiAgICAgICAgICAgIHZhciB0YWdOYW1lID0gdHJhbnNmb3JtQ2FzZUZ1bmMoZGlydHkubm9kZU5hbWUpO1xuICAgICAgICAgICAgaWYgKCFBTExPV0VEX1RBR1NbdGFnTmFtZV0gfHwgRk9SQklEX1RBR1NbdGFnTmFtZV0pIHtcbiAgICAgICAgICAgICAgdGhyb3cgdHlwZUVycm9yQ3JlYXRlKCdyb290IG5vZGUgaXMgZm9yYmlkZGVuIGFuZCBjYW5ub3QgYmUgc2FuaXRpemVkIGluLXBsYWNlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRpcnR5IGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgICAgIGJvZHkgPSBfaW5pdERvY3VtZW50KCc8IS0tLS0+Jyk7XG4gICAgICAgICAgaW1wb3J0ZWROb2RlID0gYm9keS5vd25lckRvY3VtZW50LmltcG9ydE5vZGUoZGlydHksIHRydWUpO1xuICAgICAgICAgIGlmIChpbXBvcnRlZE5vZGUubm9kZVR5cGUgPT09IDEgJiYgaW1wb3J0ZWROb2RlLm5vZGVOYW1lID09PSAnQk9EWScpIHtcbiAgICAgICAgICAgIGJvZHkgPSBpbXBvcnRlZE5vZGU7XG4gICAgICAgICAgfSBlbHNlIGlmIChpbXBvcnRlZE5vZGUubm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgICAgICAgICAgYm9keSA9IGltcG9ydGVkTm9kZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYm9keS5hcHBlbmRDaGlsZChpbXBvcnRlZE5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIVJFVFVSTl9ET00gJiYgIVNBRkVfRk9SX1RFTVBMQVRFUyAmJiAhV0hPTEVfRE9DVU1FTlQgJiYgZGlydHkuaW5kZXhPZignPCcpID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydXN0ZWRUeXBlc1BvbGljeSAmJiBSRVRVUk5fVFJVU1RFRF9UWVBFID8gdHJ1c3RlZFR5cGVzUG9saWN5LmNyZWF0ZUhUTUwoZGlydHkpIDogZGlydHk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJvZHkgPSBfaW5pdERvY3VtZW50KGRpcnR5KTtcbiAgICAgICAgICBpZiAoIWJvZHkpIHtcbiAgICAgICAgICAgIHJldHVybiBSRVRVUk5fRE9NID8gbnVsbCA6IFJFVFVSTl9UUlVTVEVEX1RZUEUgPyBlbXB0eUhUTUwgOiAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJvZHkgJiYgRk9SQ0VfQk9EWSkge1xuICAgICAgICAgIF9mb3JjZVJlbW92ZShib2R5LmZpcnN0Q2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBub2RlSXRlcmF0b3IgPSBfY3JlYXRlSXRlcmF0b3IoSU5fUExBQ0UgPyBkaXJ0eSA6IGJvZHkpO1xuICAgICAgICB3aGlsZSAoY3VycmVudE5vZGUgPSBub2RlSXRlcmF0b3IubmV4dE5vZGUoKSkge1xuICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gMyAmJiBjdXJyZW50Tm9kZSA9PT0gb2xkTm9kZSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChfc2FuaXRpemVFbGVtZW50cyhjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY3VycmVudE5vZGUuY29udGVudCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgICAgICAgIF9zYW5pdGl6ZVNoYWRvd0RPTShjdXJyZW50Tm9kZS5jb250ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgX3Nhbml0aXplQXR0cmlidXRlcyhjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgb2xkTm9kZSA9IGN1cnJlbnROb2RlO1xuICAgICAgICB9XG4gICAgICAgIG9sZE5vZGUgPSBudWxsO1xuICAgICAgICBpZiAoSU5fUExBQ0UpIHtcbiAgICAgICAgICByZXR1cm4gZGlydHk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFJFVFVSTl9ET00pIHtcbiAgICAgICAgICBpZiAoUkVUVVJOX0RPTV9GUkFHTUVOVCkge1xuICAgICAgICAgICAgcmV0dXJuTm9kZSA9IGNyZWF0ZURvY3VtZW50RnJhZ21lbnQuY2FsbChib2R5Lm93bmVyRG9jdW1lbnQpO1xuICAgICAgICAgICAgd2hpbGUgKGJvZHkuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICByZXR1cm5Ob2RlLmFwcGVuZENoaWxkKGJvZHkuZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybk5vZGUgPSBib2R5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoQUxMT1dFRF9BVFRSLnNoYWRvd3Jvb3QpIHtcbiAgICAgICAgICAgIHJldHVybk5vZGUgPSBpbXBvcnROb2RlLmNhbGwob3JpZ2luYWxEb2N1bWVudCwgcmV0dXJuTm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXR1cm5Ob2RlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzZXJpYWxpemVkSFRNTCA9IFdIT0xFX0RPQ1VNRU5UID8gYm9keS5vdXRlckhUTUwgOiBib2R5LmlubmVySFRNTDtcbiAgICAgICAgaWYgKFdIT0xFX0RPQ1VNRU5UICYmIEFMTE9XRURfVEFHU1snIWRvY3R5cGUnXSAmJiBib2R5Lm93bmVyRG9jdW1lbnQgJiYgYm9keS5vd25lckRvY3VtZW50LmRvY3R5cGUgJiYgYm9keS5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSAmJiByZWdFeHBUZXN0KERPQ1RZUEVfTkFNRSwgYm9keS5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSkpIHtcbiAgICAgICAgICBzZXJpYWxpemVkSFRNTCA9ICc8IURPQ1RZUEUgJyArIGJvZHkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUgKyAnPlxcbicgKyBzZXJpYWxpemVkSFRNTDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoU0FGRV9GT1JfVEVNUExBVEVTKSB7XG4gICAgICAgICAgc2VyaWFsaXplZEhUTUwgPSBzdHJpbmdSZXBsYWNlKHNlcmlhbGl6ZWRIVE1MLCBNVVNUQUNIRV9FWFBSJDEsICcgJyk7XG4gICAgICAgICAgc2VyaWFsaXplZEhUTUwgPSBzdHJpbmdSZXBsYWNlKHNlcmlhbGl6ZWRIVE1MLCBFUkJfRVhQUiQxLCAnICcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVzdGVkVHlwZXNQb2xpY3kgJiYgUkVUVVJOX1RSVVNURURfVFlQRSA/IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKHNlcmlhbGl6ZWRIVE1MKSA6IHNlcmlhbGl6ZWRIVE1MO1xuICAgICAgfTtcbiAgICAgIERPTVB1cmlmeS5zZXRDb25maWcgPSBmdW5jdGlvbiAoY2ZnKSB7XG4gICAgICAgIF9wYXJzZUNvbmZpZyhjZmcpO1xuICAgICAgICBTRVRfQ09ORklHID0gdHJ1ZTtcbiAgICAgIH07XG4gICAgICBET01QdXJpZnkuY2xlYXJDb25maWcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIENPTkZJRyA9IG51bGw7XG4gICAgICAgIFNFVF9DT05GSUcgPSBmYWxzZTtcbiAgICAgIH07XG4gICAgICBET01QdXJpZnkuaXNWYWxpZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uICh0YWcsIGF0dHIsIHZhbHVlKSB7XG4gICAgICAgIGlmICghQ09ORklHKSB7XG4gICAgICAgICAgX3BhcnNlQ29uZmlnKHt9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbGNUYWcgPSB0cmFuc2Zvcm1DYXNlRnVuYyh0YWcpO1xuICAgICAgICB2YXIgbGNOYW1lID0gdHJhbnNmb3JtQ2FzZUZ1bmMoYXR0cik7XG4gICAgICAgIHJldHVybiBfaXNWYWxpZEF0dHJpYnV0ZShsY1RhZywgbGNOYW1lLCB2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgRE9NUHVyaWZ5LmFkZEhvb2sgPSBmdW5jdGlvbiAoZW50cnlQb2ludCwgaG9va0Z1bmN0aW9uKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaG9va0Z1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGhvb2tzW2VudHJ5UG9pbnRdID0gaG9va3NbZW50cnlQb2ludF0gfHwgW107XG4gICAgICAgIGFycmF5UHVzaChob29rc1tlbnRyeVBvaW50XSwgaG9va0Z1bmN0aW9uKTtcbiAgICAgIH07XG4gICAgICBET01QdXJpZnkucmVtb3ZlSG9vayA9IGZ1bmN0aW9uIChlbnRyeVBvaW50KSB7XG4gICAgICAgIGlmIChob29rc1tlbnRyeVBvaW50XSkge1xuICAgICAgICAgIHJldHVybiBhcnJheVBvcChob29rc1tlbnRyeVBvaW50XSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBET01QdXJpZnkucmVtb3ZlSG9va3MgPSBmdW5jdGlvbiAoZW50cnlQb2ludCkge1xuICAgICAgICBpZiAoaG9va3NbZW50cnlQb2ludF0pIHtcbiAgICAgICAgICBob29rc1tlbnRyeVBvaW50XSA9IFtdO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgRE9NUHVyaWZ5LnJlbW92ZUFsbEhvb2tzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBob29rcyA9IHt9O1xuICAgICAgfTtcbiAgICAgIHJldHVybiBET01QdXJpZnk7XG4gICAgfVxuICAgIHZhciBwdXJpZnkgPSBjcmVhdGVET01QdXJpZnkoKTtcblxuICAgIGNvbnN0IHNhbml0aXplSHRtbFN0cmluZyA9IGh0bWwgPT4gcHVyaWZ5KCkuc2FuaXRpemUoaHRtbCk7XG5cbiAgICBjb25zdCBpc1RvdWNoID0gZ2xvYmFsJDUuZGV2aWNlVHlwZS5pc1RvdWNoKCk7XG4gICAgY29uc3QgaGlkZGVuSGVhZGVyID0gKHRpdGxlLCBjbG9zZSkgPT4gKHtcbiAgICAgIGRvbToge1xuICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICBzdHlsZXM6IHsgZGlzcGxheTogJ25vbmUnIH0sXG4gICAgICAgIGNsYXNzZXM6IFsndG94LWRpYWxvZ19faGVhZGVyJ11cbiAgICAgIH0sXG4gICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBjbG9zZVxuICAgICAgXVxuICAgIH0pO1xuICAgIGNvbnN0IHBDbG9zZSA9IChvbkNsb3NlLCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IE1vZGFsRGlhbG9nLnBhcnRzLmNsb3NlKEJ1dHRvbi5za2V0Y2goe1xuICAgICAgZG9tOiB7XG4gICAgICAgIHRhZzogJ2J1dHRvbicsXG4gICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAndG94LWJ1dHRvbicsXG4gICAgICAgICAgJ3RveC1idXR0b24tLWljb24nLFxuICAgICAgICAgICd0b3gtYnV0dG9uLS1uYWtlZCdcbiAgICAgICAgXSxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICd0eXBlJzogJ2J1dHRvbicsXG4gICAgICAgICAgJ2FyaWEtbGFiZWwnOiBwcm92aWRlcnNCYWNrc3RhZ2UudHJhbnNsYXRlKCdDbG9zZScpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhY3Rpb246IG9uQ2xvc2UsXG4gICAgICBidXR0b25CZWhhdmlvdXJzOiBkZXJpdmUkMShbVGFic3RvcHBpbmcuY29uZmlnKHt9KV0pXG4gICAgfSkpO1xuICAgIGNvbnN0IHBVbnRpdGxlZCA9ICgpID0+IE1vZGFsRGlhbG9nLnBhcnRzLnRpdGxlKHtcbiAgICAgIGRvbToge1xuICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICBjbGFzc2VzOiBbJ3RveC1kaWFsb2dfX3RpdGxlJ10sXG4gICAgICAgIGlubmVySHRtbDogJycsXG4gICAgICAgIHN0eWxlczogeyBkaXNwbGF5OiAnbm9uZScgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHBCb2R5TWVzc2FnZSA9IChtZXNzYWdlLCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IE1vZGFsRGlhbG9nLnBhcnRzLmJvZHkoe1xuICAgICAgZG9tOiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFsndG94LWRpYWxvZ19fYm9keSddXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czogW3tcbiAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1kaWFsb2dfX2JvZHktY29udGVudCddXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21wb25lbnRzOiBbeyBkb206IGZyb21IdG1sKGA8cD4keyBzYW5pdGl6ZUh0bWxTdHJpbmcocHJvdmlkZXJzQmFja3N0YWdlLnRyYW5zbGF0ZShtZXNzYWdlKSkgfTwvcD5gKSB9XVxuICAgICAgICB9XVxuICAgIH0pO1xuICAgIGNvbnN0IHBGb290ZXIgPSBidXR0b25zID0+IE1vZGFsRGlhbG9nLnBhcnRzLmZvb3Rlcih7XG4gICAgICBkb206IHtcbiAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgY2xhc3NlczogWyd0b3gtZGlhbG9nX19mb290ZXInXVxuICAgICAgfSxcbiAgICAgIGNvbXBvbmVudHM6IGJ1dHRvbnNcbiAgICB9KTtcbiAgICBjb25zdCBwRm9vdGVyR3JvdXAgPSAoc3RhcnRCdXR0b25zLCBlbmRCdXR0b25zKSA9PiBbXG4gICAgICBDb250YWluZXIuc2tldGNoKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1kaWFsb2dfX2Zvb3Rlci1zdGFydCddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IHN0YXJ0QnV0dG9uc1xuICAgICAgfSksXG4gICAgICBDb250YWluZXIuc2tldGNoKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1kaWFsb2dfX2Zvb3Rlci1lbmQnXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBlbmRCdXR0b25zXG4gICAgICB9KVxuICAgIF07XG4gICAgY29uc3QgcmVuZGVyRGlhbG9nJDEgPSBzcGVjID0+IHtcbiAgICAgIGNvbnN0IGRpYWxvZ0NsYXNzID0gJ3RveC1kaWFsb2cnO1xuICAgICAgY29uc3QgYmxvY2tlckNsYXNzID0gZGlhbG9nQ2xhc3MgKyAnLXdyYXAnO1xuICAgICAgY29uc3QgYmxvY2tlckJhY2tkcm9wQ2xhc3MgPSBibG9ja2VyQ2xhc3MgKyAnX19iYWNrZHJvcCc7XG4gICAgICBjb25zdCBzY3JvbGxMb2NrQ2xhc3MgPSBkaWFsb2dDbGFzcyArICdfX2Rpc2FibGUtc2Nyb2xsJztcbiAgICAgIHJldHVybiBNb2RhbERpYWxvZy5za2V0Y2goe1xuICAgICAgICBsYXp5U2luazogc3BlYy5sYXp5U2luayxcbiAgICAgICAgb25Fc2NhcGU6IGNvbXAgPT4ge1xuICAgICAgICAgIHNwZWMub25Fc2NhcGUoY29tcCk7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZVRhYnN0b3BBdDogZWxlbSA9PiAhaXNQc2V1ZG9TdG9wKGVsZW0pLFxuICAgICAgICBmaXJzdFRhYnN0b3A6IHNwZWMuZmlyc3RUYWJzdG9wLFxuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFtkaWFsb2dDbGFzc10uY29uY2F0KHNwZWMuZXh0cmFDbGFzc2VzKSxcbiAgICAgICAgICBzdHlsZXM6IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgICAgLi4uc3BlYy5leHRyYVN0eWxlc1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgIHNwZWMuaGVhZGVyLFxuICAgICAgICAgIHNwZWMuYm9keSxcbiAgICAgICAgICAuLi5zcGVjLmZvb3Rlci50b0FycmF5KClcbiAgICAgICAgXSxcbiAgICAgICAgcGFydHM6IHtcbiAgICAgICAgICBibG9ja2VyOiB7XG4gICAgICAgICAgICBkb206IGZyb21IdG1sKGA8ZGl2IGNsYXNzPVwiJHsgYmxvY2tlckNsYXNzIH1cIj48L2Rpdj5gKSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IFt7XG4gICAgICAgICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgICAgICAgY2xhc3NlczogaXNUb3VjaCA/IFtcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tlckJhY2tkcm9wQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrZXJCYWNrZHJvcENsYXNzICsgJy0tb3BhcXVlJ1xuICAgICAgICAgICAgICAgICAgXSA6IFtibG9ja2VyQmFja2Ryb3BDbGFzc11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkcmFnQmxvY2tDbGFzczogYmxvY2tlckNsYXNzLFxuICAgICAgICBtb2RhbEJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBGb2N1c2luZy5jb25maWcoe30pLFxuICAgICAgICAgIGNvbmZpZygnZGlhbG9nLWV2ZW50cycsIHNwZWMuZGlhbG9nRXZlbnRzLmNvbmNhdChbXG4gICAgICAgICAgICBydW5PblNvdXJjZShmb2N1c2luKCksIChjb21wLCBfc2UpID0+IHtcbiAgICAgICAgICAgICAgQmxvY2tpbmcuaXNCbG9ja2VkKGNvbXApID8gbm9vcCgpIDogS2V5aW5nLmZvY3VzSW4oY29tcCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHJ1biQxKGZvY3VzU2hpZnRlZCgpLCAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgICAgICAgY29tcC5nZXRTeXN0ZW0oKS5icm9hZGNhc3RPbihbZGlhbG9nRm9jdXNTaGlmdGVkQ2hhbm5lbF0sIHsgbmV3Rm9jdXM6IHNlLmV2ZW50Lm5ld0ZvY3VzIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdKSksXG4gICAgICAgICAgY29uZmlnKCdzY3JvbGwtbG9jaycsIFtcbiAgICAgICAgICAgIHJ1bk9uQXR0YWNoZWQoKCkgPT4ge1xuICAgICAgICAgICAgICBhZGQkMihib2R5KCksIHNjcm9sbExvY2tDbGFzcyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHJ1bk9uRGV0YWNoZWQoKCkgPT4ge1xuICAgICAgICAgICAgICByZW1vdmUkMihib2R5KCksIHNjcm9sbExvY2tDbGFzcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIC4uLnNwZWMuZXh0cmFCZWhhdmlvdXJzXG4gICAgICAgIF0pLFxuICAgICAgICBldmVudE9yZGVyOiB7XG4gICAgICAgICAgW2V4ZWN1dGUkNSgpXTogWydkaWFsb2ctZXZlbnRzJ10sXG4gICAgICAgICAgW2F0dGFjaGVkVG9Eb20oKV06IFtcbiAgICAgICAgICAgICdzY3JvbGwtbG9jaycsXG4gICAgICAgICAgICAnZGlhbG9nLWV2ZW50cycsXG4gICAgICAgICAgICAnYWxsb3kuYmFzZS5iZWhhdmlvdXInXG4gICAgICAgICAgXSxcbiAgICAgICAgICBbZGV0YWNoZWRGcm9tRG9tKCldOiBbXG4gICAgICAgICAgICAnYWxsb3kuYmFzZS5iZWhhdmlvdXInLFxuICAgICAgICAgICAgJ2RpYWxvZy1ldmVudHMnLFxuICAgICAgICAgICAgJ3Njcm9sbC1sb2NrJ1xuICAgICAgICAgIF0sXG4gICAgICAgICAgLi4uc3BlYy5ldmVudE9yZGVyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJDbG9zZSA9IHByb3ZpZGVyc0JhY2tzdGFnZSA9PiBCdXR0b24uc2tldGNoKHtcbiAgICAgIGRvbToge1xuICAgICAgICB0YWc6ICdidXR0b24nLFxuICAgICAgICBjbGFzc2VzOiBbXG4gICAgICAgICAgJ3RveC1idXR0b24nLFxuICAgICAgICAgICd0b3gtYnV0dG9uLS1pY29uJyxcbiAgICAgICAgICAndG94LWJ1dHRvbi0tbmFrZWQnXG4gICAgICAgIF0sXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAndHlwZSc6ICdidXR0b24nLFxuICAgICAgICAgICdhcmlhLWxhYmVsJzogcHJvdmlkZXJzQmFja3N0YWdlLnRyYW5zbGF0ZSgnQ2xvc2UnKSxcbiAgICAgICAgICAndGl0bGUnOiBwcm92aWRlcnNCYWNrc3RhZ2UudHJhbnNsYXRlKCdDbG9zZScpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBidXR0b25CZWhhdmlvdXJzOiBkZXJpdmUkMShbVGFic3RvcHBpbmcuY29uZmlnKHt9KV0pLFxuICAgICAgY29tcG9uZW50czogW3JlbmRlciQzKCdjbG9zZScsIHtcbiAgICAgICAgICB0YWc6ICdzcGFuJyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1pY29uJ11cbiAgICAgICAgfSwgcHJvdmlkZXJzQmFja3N0YWdlLmljb25zKV0sXG4gICAgICBhY3Rpb246IGNvbXAgPT4ge1xuICAgICAgICBlbWl0KGNvbXAsIGZvcm1DYW5jZWxFdmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVuZGVyVGl0bGUgPSAoc3BlYywgZGlhbG9nSWQsIHRpdGxlSWQsIHByb3ZpZGVyc0JhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgcmVuZGVyQ29tcG9uZW50cyA9IGRhdGEgPT4gW3RleHQkMihwcm92aWRlcnNCYWNrc3RhZ2UudHJhbnNsYXRlKGRhdGEudGl0bGUpKV07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LWRpYWxvZ19fdGl0bGUnXSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7IC4uLnRpdGxlSWQubWFwKHggPT4gKHsgaWQ6IHggfSkpLmdldE9yKHt9KSB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtdLFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbUmVmbGVjdGluZy5jb25maWcoe1xuICAgICAgICAgICAgY2hhbm5lbDogYCR7IHRpdGxlQ2hhbm5lbCB9LSR7IGRpYWxvZ0lkIH1gLFxuICAgICAgICAgICAgaW5pdGlhbERhdGE6IHNwZWMsXG4gICAgICAgICAgICByZW5kZXJDb21wb25lbnRzXG4gICAgICAgICAgfSldKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckRyYWdIYW5kbGUgPSAoKSA9PiAoeyBkb206IGZyb21IdG1sKCc8ZGl2IGNsYXNzPVwidG94LWRpYWxvZ19fZHJhZ2hhbmRsZVwiPjwvZGl2PicpIH0pO1xuICAgIGNvbnN0IHJlbmRlcklubGluZUhlYWRlciA9IChzcGVjLCBkaWFsb2dJZCwgdGl0bGVJZCwgcHJvdmlkZXJzQmFja3N0YWdlKSA9PiBDb250YWluZXIuc2tldGNoKHtcbiAgICAgIGRvbTogZnJvbUh0bWwoJzxkaXYgY2xhc3M9XCJ0b3gtZGlhbG9nX19oZWFkZXJcIj48L2Rpdj4nKSxcbiAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgcmVuZGVyVGl0bGUoc3BlYywgZGlhbG9nSWQsIE9wdGlvbmFsLnNvbWUodGl0bGVJZCksIHByb3ZpZGVyc0JhY2tzdGFnZSksXG4gICAgICAgIHJlbmRlckRyYWdIYW5kbGUoKSxcbiAgICAgICAgcmVuZGVyQ2xvc2UocHJvdmlkZXJzQmFja3N0YWdlKVxuICAgICAgXSxcbiAgICAgIGNvbnRhaW5lckJlaGF2aW91cnM6IGRlcml2ZSQxKFtEcmFnZ2luZy5jb25maWcoe1xuICAgICAgICAgIG1vZGU6ICdtb3VzZScsXG4gICAgICAgICAgYmxvY2tlckNsYXNzOiAnYmxvY2tlcicsXG4gICAgICAgICAgZ2V0VGFyZ2V0OiBoYW5kbGUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3QkMShoYW5kbGUsICdbcm9sZT1cImRpYWxvZ1wiXScpLmdldE9yRGllKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzbmFwczoge1xuICAgICAgICAgICAgZ2V0U25hcFBvaW50czogKCkgPT4gW10sXG4gICAgICAgICAgICBsZWZ0QXR0cjogJ2RhdGEtZHJhZy1sZWZ0JyxcbiAgICAgICAgICAgIHRvcEF0dHI6ICdkYXRhLWRyYWctdG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSldKVxuICAgIH0pO1xuICAgIGNvbnN0IHJlbmRlck1vZGFsSGVhZGVyID0gKHNwZWMsIGRpYWxvZ0lkLCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IHBUaXRsZSA9IE1vZGFsRGlhbG9nLnBhcnRzLnRpdGxlKHJlbmRlclRpdGxlKHNwZWMsIGRpYWxvZ0lkLCBPcHRpb25hbC5ub25lKCksIHByb3ZpZGVyc0JhY2tzdGFnZSkpO1xuICAgICAgY29uc3QgcEhhbmRsZSA9IE1vZGFsRGlhbG9nLnBhcnRzLmRyYWdoYW5kbGUocmVuZGVyRHJhZ0hhbmRsZSgpKTtcbiAgICAgIGNvbnN0IHBDbG9zZSA9IE1vZGFsRGlhbG9nLnBhcnRzLmNsb3NlKHJlbmRlckNsb3NlKHByb3ZpZGVyc0JhY2tzdGFnZSkpO1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IFtwVGl0bGVdLmNvbmNhdChzcGVjLmRyYWdnYWJsZSA/IFtwSGFuZGxlXSA6IFtdKS5jb25jYXQoW3BDbG9zZV0pO1xuICAgICAgcmV0dXJuIENvbnRhaW5lci5za2V0Y2goe1xuICAgICAgICBkb206IGZyb21IdG1sKCc8ZGl2IGNsYXNzPVwidG94LWRpYWxvZ19faGVhZGVyXCI+PC9kaXY+JyksXG4gICAgICAgIGNvbXBvbmVudHNcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRIZWFkZXIgPSAodGl0bGUsIGRpYWxvZ0lkLCBiYWNrc3RhZ2UpID0+IHJlbmRlck1vZGFsSGVhZGVyKHtcbiAgICAgIHRpdGxlOiBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycy50cmFuc2xhdGUodGl0bGUpLFxuICAgICAgZHJhZ2dhYmxlOiBiYWNrc3RhZ2UuZGlhbG9nLmlzRHJhZ2dhYmxlTW9kYWwoKVxuICAgIH0sIGRpYWxvZ0lkLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycyk7XG4gICAgY29uc3QgZ2V0QnVzeVNwZWMgPSAobWVzc2FnZSwgYnMsIHByb3ZpZGVycywgaGVhZGVySGVpZ2h0KSA9PiAoe1xuICAgICAgZG9tOiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFsndG94LWRpYWxvZ19fYnVzeS1zcGlubmVyJ10sXG4gICAgICAgIGF0dHJpYnV0ZXM6IHsgJ2FyaWEtbGFiZWwnOiBwcm92aWRlcnMudHJhbnNsYXRlKG1lc3NhZ2UpIH0sXG4gICAgICAgIHN0eWxlczoge1xuICAgICAgICAgIGxlZnQ6ICcwcHgnLFxuICAgICAgICAgIHJpZ2h0OiAnMHB4JyxcbiAgICAgICAgICBib3R0b206ICcwcHgnLFxuICAgICAgICAgIHRvcDogYCR7IGhlYWRlckhlaWdodC5nZXRPcigwKSB9cHhgLFxuICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBiZWhhdmlvdXJzOiBicyxcbiAgICAgIGNvbXBvbmVudHM6IFt7IGRvbTogZnJvbUh0bWwoJzxkaXYgY2xhc3M9XCJ0b3gtc3Bpbm5lclwiPjxkaXY+PC9kaXY+PGRpdj48L2Rpdj48ZGl2PjwvZGl2PjwvZGl2PicpIH1dXG4gICAgfSk7XG4gICAgY29uc3QgZ2V0RXZlbnRFeHRyYXMgPSAobGF6eURpYWxvZywgcHJvdmlkZXJzLCBleHRyYSkgPT4gKHtcbiAgICAgIG9uQ2xvc2U6ICgpID0+IGV4dHJhLmNsb3NlV2luZG93KCksXG4gICAgICBvbkJsb2NrOiBibG9ja0V2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgaGVhZGVySGVpZ2h0ID0gZGVzY2VuZGFudChsYXp5RGlhbG9nKCkuZWxlbWVudCwgJy50b3gtZGlhbG9nX19oZWFkZXInKS5tYXAoaGVhZGVyID0+IGdldCRkKGhlYWRlcikpO1xuICAgICAgICBNb2RhbERpYWxvZy5zZXRCdXN5KGxhenlEaWFsb2coKSwgKF9jb21wLCBicykgPT4gZ2V0QnVzeVNwZWMoYmxvY2tFdmVudC5tZXNzYWdlLCBicywgcHJvdmlkZXJzLCBoZWFkZXJIZWlnaHQpKTtcbiAgICAgIH0sXG4gICAgICBvblVuYmxvY2s6ICgpID0+IHtcbiAgICAgICAgTW9kYWxEaWFsb2cuc2V0SWRsZShsYXp5RGlhbG9nKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlbmRlck1vZGFsRGlhbG9nID0gKHNwZWMsIGluaXRpYWxEYXRhLCBkaWFsb2dFdmVudHMsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlU3RhdGUgPSAoX2NvbXAsIGluY29taW5nKSA9PiBPcHRpb25hbC5zb21lKGluY29taW5nKTtcbiAgICAgIHJldHVybiBidWlsZCQxKHJlbmRlckRpYWxvZyQxKHtcbiAgICAgICAgLi4uc3BlYyxcbiAgICAgICAgZmlyc3RUYWJzdG9wOiAxLFxuICAgICAgICBsYXp5U2luazogYmFja3N0YWdlLnNoYXJlZC5nZXRTaW5rLFxuICAgICAgICBleHRyYUJlaGF2aW91cnM6IFtcbiAgICAgICAgICBSZWZsZWN0aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBjaGFubmVsOiBgJHsgZGlhbG9nQ2hhbm5lbCB9LSR7IHNwZWMuaWQgfWAsXG4gICAgICAgICAgICB1cGRhdGVTdGF0ZSxcbiAgICAgICAgICAgIGluaXRpYWxEYXRhXG4gICAgICAgICAgfSksXG4gICAgICAgICAgbWVtb3J5KHt9KSxcbiAgICAgICAgICAuLi5zcGVjLmV4dHJhQmVoYXZpb3Vyc1xuICAgICAgICBdLFxuICAgICAgICBvbkVzY2FwZTogY29tcCA9PiB7XG4gICAgICAgICAgZW1pdChjb21wLCBmb3JtQ2FuY2VsRXZlbnQpO1xuICAgICAgICB9LFxuICAgICAgICBkaWFsb2dFdmVudHMsXG4gICAgICAgIGV2ZW50T3JkZXI6IHtcbiAgICAgICAgICBbcmVjZWl2ZSgpXTogW1xuICAgICAgICAgICAgUmVmbGVjdGluZy5uYW1lKCksXG4gICAgICAgICAgICBSZWNlaXZpbmcubmFtZSgpXG4gICAgICAgICAgXSxcbiAgICAgICAgICBbYXR0YWNoZWRUb0RvbSgpXTogW1xuICAgICAgICAgICAgJ3Njcm9sbC1sb2NrJyxcbiAgICAgICAgICAgIFJlZmxlY3RpbmcubmFtZSgpLFxuICAgICAgICAgICAgJ21lc3NhZ2VzJyxcbiAgICAgICAgICAgICdkaWFsb2ctZXZlbnRzJyxcbiAgICAgICAgICAgICdhbGxveS5iYXNlLmJlaGF2aW91cidcbiAgICAgICAgICBdLFxuICAgICAgICAgIFtkZXRhY2hlZEZyb21Eb20oKV06IFtcbiAgICAgICAgICAgICdhbGxveS5iYXNlLmJlaGF2aW91cicsXG4gICAgICAgICAgICAnZGlhbG9nLWV2ZW50cycsXG4gICAgICAgICAgICAnbWVzc2FnZXMnLFxuICAgICAgICAgICAgUmVmbGVjdGluZy5uYW1lKCksXG4gICAgICAgICAgICAnc2Nyb2xsLWxvY2snXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfTtcbiAgICBjb25zdCBtYXBNZW51QnV0dG9ucyA9IChidXR0b25zLCBtZW51SXRlbVN0YXRlcyA9IHt9KSA9PiB7XG4gICAgICBjb25zdCBtYXBJdGVtcyA9IGJ1dHRvbiA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gbWFwJDIoYnV0dG9uLml0ZW1zLCBpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBjZWxsID0gZ2V0JGcobWVudUl0ZW1TdGF0ZXMsIGl0ZW0ubmFtZSkuZ2V0T3IoQ2VsbChmYWxzZSkpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgc3RvcmFnZTogY2VsbFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmJ1dHRvbixcbiAgICAgICAgICBpdGVtc1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHJldHVybiBtYXAkMihidXR0b25zLCBidXR0b24gPT4ge1xuICAgICAgICByZXR1cm4gYnV0dG9uLnR5cGUgPT09ICdtZW51JyA/IG1hcEl0ZW1zKGJ1dHRvbikgOiBidXR0b247XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGV4dHJhY3RDZWxsc1RvT2JqZWN0ID0gYnV0dG9ucyA9PiBmb2xkbChidXR0b25zLCAoYWNjLCBidXR0b24pID0+IHtcbiAgICAgIGlmIChidXR0b24udHlwZSA9PT0gJ21lbnUnKSB7XG4gICAgICAgIGNvbnN0IG1lbnVCdXR0b24gPSBidXR0b247XG4gICAgICAgIHJldHVybiBmb2xkbChtZW51QnV0dG9uLml0ZW1zLCAoaW5uZXJBY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgICBpbm5lckFjY1tpdGVtLm5hbWVdID0gaXRlbS5zdG9yYWdlO1xuICAgICAgICAgIHJldHVybiBpbm5lckFjYztcbiAgICAgICAgfSwgYWNjKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuXG4gICAgY29uc3QgaW5pdENvbW1vbkV2ZW50cyA9IChmaXJlQXBpRXZlbnQsIGV4dHJhcykgPT4gW1xuICAgICAgcnVuV2l0aFRhcmdldChmb2N1c2luKCksIG9uRm9jdXMpLFxuICAgICAgZmlyZUFwaUV2ZW50KGZvcm1DbG9zZUV2ZW50LCAoX2FwaSwgc3BlYywgX2V2ZW50LCBzZWxmKSA9PiB7XG4gICAgICAgIGFjdGl2ZSQxKGdldFJvb3ROb2RlKHNlbGYuZWxlbWVudCkpLmZvbGQobm9vcCwgYmx1ciQxKTtcbiAgICAgICAgZXh0cmFzLm9uQ2xvc2UoKTtcbiAgICAgICAgc3BlYy5vbkNsb3NlKCk7XG4gICAgICB9KSxcbiAgICAgIGZpcmVBcGlFdmVudChmb3JtQ2FuY2VsRXZlbnQsIChhcGksIHNwZWMsIF9ldmVudCwgc2VsZikgPT4ge1xuICAgICAgICBzcGVjLm9uQ2FuY2VsKGFwaSk7XG4gICAgICAgIGVtaXQoc2VsZiwgZm9ybUNsb3NlRXZlbnQpO1xuICAgICAgfSksXG4gICAgICBydW4kMShmb3JtVW5ibG9ja0V2ZW50LCAoX2MsIF9zZSkgPT4gZXh0cmFzLm9uVW5ibG9jaygpKSxcbiAgICAgIHJ1biQxKGZvcm1CbG9ja0V2ZW50LCAoX2MsIHNlKSA9PiBleHRyYXMub25CbG9jayhzZS5ldmVudCkpXG4gICAgXTtcbiAgICBjb25zdCBpbml0VXJsRGlhbG9nID0gKGdldEluc3RhbmNlQXBpLCBleHRyYXMpID0+IHtcbiAgICAgIGNvbnN0IGZpcmVBcGlFdmVudCA9IChldmVudE5hbWUsIGYpID0+IHJ1biQxKGV2ZW50TmFtZSwgKGMsIHNlKSA9PiB7XG4gICAgICAgIHdpdGhTcGVjKGMsIChzcGVjLCBfYykgPT4ge1xuICAgICAgICAgIGYoZ2V0SW5zdGFuY2VBcGkoKSwgc3BlYywgc2UuZXZlbnQsIGMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgd2l0aFNwZWMgPSAoYywgZikgPT4ge1xuICAgICAgICBSZWZsZWN0aW5nLmdldFN0YXRlKGMpLmdldCgpLmVhY2goY3VycmVudERpYWxvZyA9PiB7XG4gICAgICAgICAgZihjdXJyZW50RGlhbG9nLCBjKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4uaW5pdENvbW1vbkV2ZW50cyhmaXJlQXBpRXZlbnQsIGV4dHJhcyksXG4gICAgICAgIGZpcmVBcGlFdmVudChmb3JtQWN0aW9uRXZlbnQsIChhcGksIHNwZWMsIGV2ZW50KSA9PiB7XG4gICAgICAgICAgc3BlYy5vbkFjdGlvbihhcGksIHsgbmFtZTogZXZlbnQubmFtZSB9KTtcbiAgICAgICAgfSlcbiAgICAgIF07XG4gICAgfTtcbiAgICBjb25zdCBpbml0RGlhbG9nID0gKGdldEluc3RhbmNlQXBpLCBleHRyYXMsIGdldFNpbmspID0+IHtcbiAgICAgIGNvbnN0IGZpcmVBcGlFdmVudCA9IChldmVudE5hbWUsIGYpID0+IHJ1biQxKGV2ZW50TmFtZSwgKGMsIHNlKSA9PiB7XG4gICAgICAgIHdpdGhTcGVjKGMsIChzcGVjLCBfYykgPT4ge1xuICAgICAgICAgIGYoZ2V0SW5zdGFuY2VBcGkoKSwgc3BlYywgc2UuZXZlbnQsIGMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgd2l0aFNwZWMgPSAoYywgZikgPT4ge1xuICAgICAgICBSZWZsZWN0aW5nLmdldFN0YXRlKGMpLmdldCgpLmVhY2goY3VycmVudERpYWxvZ0luaXQgPT4ge1xuICAgICAgICAgIGYoY3VycmVudERpYWxvZ0luaXQuaW50ZXJuYWxEaWFsb2csIGMpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gW1xuICAgICAgICAuLi5pbml0Q29tbW9uRXZlbnRzKGZpcmVBcGlFdmVudCwgZXh0cmFzKSxcbiAgICAgICAgZmlyZUFwaUV2ZW50KGZvcm1TdWJtaXRFdmVudCwgKGFwaSwgc3BlYykgPT4gc3BlYy5vblN1Ym1pdChhcGkpKSxcbiAgICAgICAgZmlyZUFwaUV2ZW50KGZvcm1DaGFuZ2VFdmVudCwgKGFwaSwgc3BlYywgZXZlbnQpID0+IHtcbiAgICAgICAgICBzcGVjLm9uQ2hhbmdlKGFwaSwgeyBuYW1lOiBldmVudC5uYW1lIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgZmlyZUFwaUV2ZW50KGZvcm1BY3Rpb25FdmVudCwgKGFwaSwgc3BlYywgZXZlbnQsIGNvbXBvbmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZvY3VzSW4gPSAoKSA9PiBjb21wb25lbnQuZ2V0U3lzdGVtKCkuaXNDb25uZWN0ZWQoKSA/IEtleWluZy5mb2N1c0luKGNvbXBvbmVudCkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgY29uc3QgaXNEaXNhYmxlZCA9IGZvY3VzZWQgPT4gaGFzJDEoZm9jdXNlZCwgJ2Rpc2FibGVkJykgfHwgZ2V0T3B0KGZvY3VzZWQsICdhcmlhLWRpc2FibGVkJykuZXhpc3RzKHZhbCA9PiB2YWwgPT09ICd0cnVlJyk7XG4gICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSBnZXRSb290Tm9kZShjb21wb25lbnQuZWxlbWVudCk7XG4gICAgICAgICAgY29uc3QgY3VycmVudCA9IGFjdGl2ZSQxKHJvb3ROb2RlKTtcbiAgICAgICAgICBzcGVjLm9uQWN0aW9uKGFwaSwge1xuICAgICAgICAgICAgbmFtZTogZXZlbnQubmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiBldmVudC52YWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGFjdGl2ZSQxKHJvb3ROb2RlKS5mb2xkKGZvY3VzSW4sIGZvY3VzZWQgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRGlzYWJsZWQoZm9jdXNlZCkpIHtcbiAgICAgICAgICAgICAgZm9jdXNJbigpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LmV4aXN0cyhjdXIgPT4gY29udGFpbnMoZm9jdXNlZCwgY3VyKSAmJiBpc0Rpc2FibGVkKGN1cikpKSB7XG4gICAgICAgICAgICAgIGZvY3VzSW4oKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGdldFNpbmsoKS50b09wdGlvbmFsKCkuZmlsdGVyKHNpbmsgPT4gIWNvbnRhaW5zKHNpbmsuZWxlbWVudCwgZm9jdXNlZCkpLmVhY2goZm9jdXNJbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLFxuICAgICAgICBmaXJlQXBpRXZlbnQoZm9ybVRhYkNoYW5nZUV2ZW50LCAoYXBpLCBzcGVjLCBldmVudCkgPT4ge1xuICAgICAgICAgIHNwZWMub25UYWJDaGFuZ2UoYXBpLCB7XG4gICAgICAgICAgICBuZXdUYWJOYW1lOiBldmVudC5uYW1lLFxuICAgICAgICAgICAgb2xkVGFiTmFtZTogZXZlbnQub2xkTmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgcnVuT25EZXRhY2hlZChjb21wb25lbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IGFwaSA9IGdldEluc3RhbmNlQXBpKCk7XG4gICAgICAgICAgUmVwcmVzZW50aW5nLnNldFZhbHVlKGNvbXBvbmVudCwgYXBpLmdldERhdGEoKSk7XG4gICAgICAgIH0pXG4gICAgICBdO1xuICAgIH07XG5cbiAgICBjb25zdCBtYWtlQnV0dG9uID0gKGJ1dHRvbiwgYmFja3N0YWdlKSA9PiByZW5kZXJGb290ZXJCdXR0b24oYnV0dG9uLCBidXR0b24udHlwZSwgYmFja3N0YWdlKTtcbiAgICBjb25zdCBsb29rdXAgPSAoY29tcEluU3lzdGVtLCBmb290ZXJCdXR0b25zLCBidXR0b25OYW1lKSA9PiBmaW5kJDUoZm9vdGVyQnV0dG9ucywgYnV0dG9uID0+IGJ1dHRvbi5uYW1lID09PSBidXR0b25OYW1lKS5iaW5kKG1lbUJ1dHRvbiA9PiBtZW1CdXR0b24ubWVtZW50by5nZXRPcHQoY29tcEluU3lzdGVtKSk7XG4gICAgY29uc3QgcmVuZGVyQ29tcG9uZW50cyA9IChfZGF0YSwgc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGZvb3RlckJ1dHRvbnMgPSBzdGF0ZS5tYXAocyA9PiBzLmZvb3RlckJ1dHRvbnMpLmdldE9yKFtdKTtcbiAgICAgIGNvbnN0IGJ1dHRvbkdyb3VwcyA9IHBhcnRpdGlvbiQzKGZvb3RlckJ1dHRvbnMsIGJ1dHRvbiA9PiBidXR0b24uYWxpZ24gPT09ICdzdGFydCcpO1xuICAgICAgY29uc3QgbWFrZUdyb3VwID0gKGVkZ2UsIGJ1dHRvbnMpID0+IENvbnRhaW5lci5za2V0Y2goe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFtgdG94LWRpYWxvZ19fZm9vdGVyLSR7IGVkZ2UgfWBdXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IG1hcCQyKGJ1dHRvbnMsIGJ1dHRvbiA9PiBidXR0b24ubWVtZW50by5hc1NwZWMoKSlcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RhcnRCdXR0b25zID0gbWFrZUdyb3VwKCdzdGFydCcsIGJ1dHRvbkdyb3Vwcy5wYXNzKTtcbiAgICAgIGNvbnN0IGVuZEJ1dHRvbnMgPSBtYWtlR3JvdXAoJ2VuZCcsIGJ1dHRvbkdyb3Vwcy5mYWlsKTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHN0YXJ0QnV0dG9ucyxcbiAgICAgICAgZW5kQnV0dG9uc1xuICAgICAgXTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckZvb3RlciA9IChpbml0U3BlYywgZGlhbG9nSWQsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlU3RhdGUgPSAoY29tcCwgZGF0YSkgPT4ge1xuICAgICAgICBjb25zdCBmb290ZXJCdXR0b25zID0gbWFwJDIoZGF0YS5idXR0b25zLCBidXR0b24gPT4ge1xuICAgICAgICAgIGNvbnN0IG1lbUJ1dHRvbiA9IHJlY29yZChtYWtlQnV0dG9uKGJ1dHRvbiwgYmFja3N0YWdlKSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGJ1dHRvbi5uYW1lLFxuICAgICAgICAgICAgYWxpZ246IGJ1dHRvbi5hbGlnbixcbiAgICAgICAgICAgIG1lbWVudG86IG1lbUJ1dHRvblxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBsb29rdXBCeU5hbWUgPSBidXR0b25OYW1lID0+IGxvb2t1cChjb21wLCBmb290ZXJCdXR0b25zLCBidXR0b25OYW1lKTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgIGxvb2t1cEJ5TmFtZSxcbiAgICAgICAgICBmb290ZXJCdXR0b25zXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRvbTogZnJvbUh0bWwoJzxkaXYgY2xhc3M9XCJ0b3gtZGlhbG9nX19mb290ZXJcIj48L2Rpdj4nKSxcbiAgICAgICAgY29tcG9uZW50czogW10sXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtSZWZsZWN0aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBjaGFubmVsOiBgJHsgZm9vdGVyQ2hhbm5lbCB9LSR7IGRpYWxvZ0lkIH1gLFxuICAgICAgICAgICAgaW5pdGlhbERhdGE6IGluaXRTcGVjLFxuICAgICAgICAgICAgdXBkYXRlU3RhdGUsXG4gICAgICAgICAgICByZW5kZXJDb21wb25lbnRzXG4gICAgICAgICAgfSldKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlcklubGluZUZvb3RlciA9IChpbml0U3BlYywgZGlhbG9nSWQsIGJhY2tzdGFnZSkgPT4gcmVuZGVyRm9vdGVyKGluaXRTcGVjLCBkaWFsb2dJZCwgYmFja3N0YWdlKTtcbiAgICBjb25zdCByZW5kZXJNb2RhbEZvb3RlciA9IChpbml0U3BlYywgZGlhbG9nSWQsIGJhY2tzdGFnZSkgPT4gTW9kYWxEaWFsb2cucGFydHMuZm9vdGVyKHJlbmRlckZvb3Rlcihpbml0U3BlYywgZGlhbG9nSWQsIGJhY2tzdGFnZSkpO1xuXG4gICAgY29uc3QgZ2V0Q29tcEJ5TmFtZSA9IChhY2Nlc3MsIG5hbWUpID0+IHtcbiAgICAgIGNvbnN0IHJvb3QgPSBhY2Nlc3MuZ2V0Um9vdCgpO1xuICAgICAgaWYgKHJvb3QuZ2V0U3lzdGVtKCkuaXNDb25uZWN0ZWQoKSkge1xuICAgICAgICBjb25zdCBmb3JtID0gQ29tcG9zaW5nLmdldEN1cnJlbnQoYWNjZXNzLmdldEZvcm1XcmFwcGVyKCkpLmdldE9yKGFjY2Vzcy5nZXRGb3JtV3JhcHBlcigpKTtcbiAgICAgICAgcmV0dXJuIEZvcm0uZ2V0RmllbGQoZm9ybSwgbmFtZSkub3JUaHVuaygoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9vdGVyID0gYWNjZXNzLmdldEZvb3RlcigpO1xuICAgICAgICAgIGNvbnN0IGZvb3RlclN0YXRlID0gZm9vdGVyLmJpbmQoZiA9PiBSZWZsZWN0aW5nLmdldFN0YXRlKGYpLmdldCgpKTtcbiAgICAgICAgICByZXR1cm4gZm9vdGVyU3RhdGUuYmluZChmID0+IGYubG9va3VwQnlOYW1lKG5hbWUpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdmFsaWRhdGVEYXRhJDEgPSAoYWNjZXNzLCBkYXRhKSA9PiB7XG4gICAgICBjb25zdCByb290ID0gYWNjZXNzLmdldFJvb3QoKTtcbiAgICAgIHJldHVybiBSZWZsZWN0aW5nLmdldFN0YXRlKHJvb3QpLmdldCgpLm1hcChkaWFsb2dTdGF0ZSA9PiBnZXRPckRpZShhc1JhdygnZGF0YScsIGRpYWxvZ1N0YXRlLmRhdGFWYWxpZGF0b3IsIGRhdGEpKSkuZ2V0T3IoZGF0YSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXREaWFsb2dBcGkgPSAoYWNjZXNzLCBkb1JlZGlhbCwgbWVudUl0ZW1TdGF0ZXMpID0+IHtcbiAgICAgIGNvbnN0IHdpdGhSb290ID0gZiA9PiB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBhY2Nlc3MuZ2V0Um9vdCgpO1xuICAgICAgICBpZiAocm9vdC5nZXRTeXN0ZW0oKS5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgICAgZihyb290KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldERhdGEgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBhY2Nlc3MuZ2V0Um9vdCgpO1xuICAgICAgICBjb25zdCB2YWx1ZUNvbXAgPSByb290LmdldFN5c3RlbSgpLmlzQ29ubmVjdGVkKCkgPyBhY2Nlc3MuZ2V0Rm9ybVdyYXBwZXIoKSA6IHJvb3Q7XG4gICAgICAgIGNvbnN0IHJlcHJlc2VudGVkVmFsdWVzID0gUmVwcmVzZW50aW5nLmdldFZhbHVlKHZhbHVlQ29tcCk7XG4gICAgICAgIGNvbnN0IG1lbnVJdGVtQ3VycmVudFN0YXRlID0gbWFwJDEobWVudUl0ZW1TdGF0ZXMsIGNlbGwgPT4gY2VsbC5nZXQoKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmVwcmVzZW50ZWRWYWx1ZXMsXG4gICAgICAgICAgLi4ubWVudUl0ZW1DdXJyZW50U3RhdGVcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXREYXRhID0gbmV3RGF0YSA9PiB7XG4gICAgICAgIHdpdGhSb290KF8gPT4ge1xuICAgICAgICAgIGNvbnN0IHByZXZEYXRhID0gaW5zdGFuY2VBcGkuZ2V0RGF0YSgpO1xuICAgICAgICAgIGNvbnN0IG1lcmdlZERhdGEgPSBkZWVwTWVyZ2UocHJldkRhdGEsIG5ld0RhdGEpO1xuICAgICAgICAgIGNvbnN0IG5ld0ludGVybmFsRGF0YSA9IHZhbGlkYXRlRGF0YSQxKGFjY2VzcywgbWVyZ2VkRGF0YSk7XG4gICAgICAgICAgY29uc3QgZm9ybSA9IGFjY2Vzcy5nZXRGb3JtV3JhcHBlcigpO1xuICAgICAgICAgIFJlcHJlc2VudGluZy5zZXRWYWx1ZShmb3JtLCBuZXdJbnRlcm5hbERhdGEpO1xuICAgICAgICAgIGVhY2gobWVudUl0ZW1TdGF0ZXMsICh2LCBrKSA9PiB7XG4gICAgICAgICAgICBpZiAoaGFzJDIobWVyZ2VkRGF0YSwgaykpIHtcbiAgICAgICAgICAgICAgdi5zZXQobWVyZ2VkRGF0YVtrXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldEVuYWJsZWQgPSAobmFtZSwgc3RhdGUpID0+IHtcbiAgICAgICAgZ2V0Q29tcEJ5TmFtZShhY2Nlc3MsIG5hbWUpLmVhY2goc3RhdGUgPyBEaXNhYmxpbmcuZW5hYmxlIDogRGlzYWJsaW5nLmRpc2FibGUpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZvY3VzID0gbmFtZSA9PiB7XG4gICAgICAgIGdldENvbXBCeU5hbWUoYWNjZXNzLCBuYW1lKS5lYWNoKEZvY3VzaW5nLmZvY3VzKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBibG9jayA9IG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAoIWlzU3RyaW5nKG1lc3NhZ2UpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZGlhbG9nSW5zdGFuY2VBUEkuYmxvY2sgZnVuY3Rpb24gc2hvdWxkIGJlIHBhc3NlZCBhIGJsb2NraW5nIG1lc3NhZ2Ugb2YgdHlwZSBzdHJpbmcgYXMgYW4gYXJndW1lbnQnKTtcbiAgICAgICAgfVxuICAgICAgICB3aXRoUm9vdChyb290ID0+IHtcbiAgICAgICAgICBlbWl0V2l0aChyb290LCBmb3JtQmxvY2tFdmVudCwgeyBtZXNzYWdlIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCB1bmJsb2NrID0gKCkgPT4ge1xuICAgICAgICB3aXRoUm9vdChyb290ID0+IHtcbiAgICAgICAgICBlbWl0KHJvb3QsIGZvcm1VbmJsb2NrRXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzaG93VGFiID0gbmFtZSA9PiB7XG4gICAgICAgIHdpdGhSb290KF8gPT4ge1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSBhY2Nlc3MuZ2V0Qm9keSgpO1xuICAgICAgICAgIGNvbnN0IGJvZHlTdGF0ZSA9IFJlZmxlY3RpbmcuZ2V0U3RhdGUoYm9keSk7XG4gICAgICAgICAgaWYgKGJvZHlTdGF0ZS5nZXQoKS5leGlzdHMoYiA9PiBiLmlzVGFiUGFuZWwoKSkpIHtcbiAgICAgICAgICAgIENvbXBvc2luZy5nZXRDdXJyZW50KGJvZHkpLmVhY2godGFiU2VjdGlvbiA9PiB7XG4gICAgICAgICAgICAgIFRhYlNlY3Rpb24uc2hvd1RhYih0YWJTZWN0aW9uLCBuYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVkaWFsID0gZCA9PiB7XG4gICAgICAgIHdpdGhSb290KHJvb3QgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gYWNjZXNzLmdldElkKCk7XG4gICAgICAgICAgY29uc3QgZGlhbG9nSW5pdCA9IGRvUmVkaWFsKGQpO1xuICAgICAgICAgIGNvbnN0IHN0b3JlZE1lbnVCdXR0b25zID0gbWFwTWVudUJ1dHRvbnMoZGlhbG9nSW5pdC5pbnRlcm5hbERpYWxvZy5idXR0b25zLCBtZW51SXRlbVN0YXRlcyk7XG4gICAgICAgICAgcm9vdC5nZXRTeXN0ZW0oKS5icm9hZGNhc3RPbihbYCR7IGRpYWxvZ0NoYW5uZWwgfS0keyBpZCB9YF0sIGRpYWxvZ0luaXQpO1xuICAgICAgICAgIHJvb3QuZ2V0U3lzdGVtKCkuYnJvYWRjYXN0T24oW2AkeyB0aXRsZUNoYW5uZWwgfS0keyBpZCB9YF0sIGRpYWxvZ0luaXQuaW50ZXJuYWxEaWFsb2cpO1xuICAgICAgICAgIHJvb3QuZ2V0U3lzdGVtKCkuYnJvYWRjYXN0T24oW2AkeyBib2R5Q2hhbm5lbCB9LSR7IGlkIH1gXSwgZGlhbG9nSW5pdC5pbnRlcm5hbERpYWxvZyk7XG4gICAgICAgICAgcm9vdC5nZXRTeXN0ZW0oKS5icm9hZGNhc3RPbihbYCR7IGZvb3RlckNoYW5uZWwgfS0keyBpZCB9YF0sIHtcbiAgICAgICAgICAgIC4uLmRpYWxvZ0luaXQuaW50ZXJuYWxEaWFsb2csXG4gICAgICAgICAgICBidXR0b25zOiBzdG9yZWRNZW51QnV0dG9uc1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGluc3RhbmNlQXBpLnNldERhdGEoZGlhbG9nSW5pdC5pbml0aWFsRGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNsb3NlID0gKCkgPT4ge1xuICAgICAgICB3aXRoUm9vdChyb290ID0+IHtcbiAgICAgICAgICBlbWl0KHJvb3QsIGZvcm1DbG9zZUV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaW5zdGFuY2VBcGkgPSB7XG4gICAgICAgIGdldERhdGEsXG4gICAgICAgIHNldERhdGEsXG4gICAgICAgIHNldEVuYWJsZWQsXG4gICAgICAgIGZvY3VzLFxuICAgICAgICBibG9jayxcbiAgICAgICAgdW5ibG9jayxcbiAgICAgICAgc2hvd1RhYixcbiAgICAgICAgcmVkaWFsLFxuICAgICAgICBjbG9zZSxcbiAgICAgICAgdG9nZ2xlRnVsbHNjcmVlbjogYWNjZXNzLnRvZ2dsZUZ1bGxzY3JlZW5cbiAgICAgIH07XG4gICAgICByZXR1cm4gaW5zdGFuY2VBcGk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldERpYWxvZ1NpemVDbGFzc2VzID0gc2l6ZSA9PiB7XG4gICAgICBzd2l0Y2ggKHNpemUpIHtcbiAgICAgIGNhc2UgJ2xhcmdlJzpcbiAgICAgICAgcmV0dXJuIFsndG94LWRpYWxvZy0td2lkdGgtbGcnXTtcbiAgICAgIGNhc2UgJ21lZGl1bSc6XG4gICAgICAgIHJldHVybiBbJ3RveC1kaWFsb2ctLXdpZHRoLW1kJ107XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJEaWFsb2cgPSAoZGlhbG9nSW5pdCwgZXh0cmEsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgZGlhbG9nSWQgPSBnZW5lcmF0ZSQ2KCdkaWFsb2cnKTtcbiAgICAgIGNvbnN0IGludGVybmFsRGlhbG9nID0gZGlhbG9nSW5pdC5pbnRlcm5hbERpYWxvZztcbiAgICAgIGNvbnN0IGhlYWRlciA9IGdldEhlYWRlcihpbnRlcm5hbERpYWxvZy50aXRsZSwgZGlhbG9nSWQsIGJhY2tzdGFnZSk7XG4gICAgICBjb25zdCBib2R5ID0gcmVuZGVyTW9kYWxCb2R5KHtcbiAgICAgICAgYm9keTogaW50ZXJuYWxEaWFsb2cuYm9keSxcbiAgICAgICAgaW5pdGlhbERhdGE6IGludGVybmFsRGlhbG9nLmluaXRpYWxEYXRhXG4gICAgICB9LCBkaWFsb2dJZCwgYmFja3N0YWdlKTtcbiAgICAgIGNvbnN0IHN0b3JlZE1lbnVCdXR0b25zID0gbWFwTWVudUJ1dHRvbnMoaW50ZXJuYWxEaWFsb2cuYnV0dG9ucyk7XG4gICAgICBjb25zdCBvYmpPZkNlbGxzID0gZXh0cmFjdENlbGxzVG9PYmplY3Qoc3RvcmVkTWVudUJ1dHRvbnMpO1xuICAgICAgY29uc3QgZm9vdGVyID0gc29tZUlmKHN0b3JlZE1lbnVCdXR0b25zLmxlbmd0aCAhPT0gMCwgcmVuZGVyTW9kYWxGb290ZXIoeyBidXR0b25zOiBzdG9yZWRNZW51QnV0dG9ucyB9LCBkaWFsb2dJZCwgYmFja3N0YWdlKSk7XG4gICAgICBjb25zdCBkaWFsb2dFdmVudHMgPSBpbml0RGlhbG9nKCgpID0+IGluc3RhbmNlQXBpLCBnZXRFdmVudEV4dHJhcygoKSA9PiBkaWFsb2csIGJhY2tzdGFnZS5zaGFyZWQucHJvdmlkZXJzLCBleHRyYSksIGJhY2tzdGFnZS5zaGFyZWQuZ2V0U2luayk7XG4gICAgICBjb25zdCBkaWFsb2dTaXplID0gZ2V0RGlhbG9nU2l6ZUNsYXNzZXMoaW50ZXJuYWxEaWFsb2cuc2l6ZSk7XG4gICAgICBjb25zdCBzcGVjID0ge1xuICAgICAgICBpZDogZGlhbG9nSWQsXG4gICAgICAgIGhlYWRlcixcbiAgICAgICAgYm9keSxcbiAgICAgICAgZm9vdGVyLFxuICAgICAgICBleHRyYUNsYXNzZXM6IGRpYWxvZ1NpemUsXG4gICAgICAgIGV4dHJhQmVoYXZpb3VyczogW10sXG4gICAgICAgIGV4dHJhU3R5bGVzOiB7fVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGRpYWxvZyA9IHJlbmRlck1vZGFsRGlhbG9nKHNwZWMsIGRpYWxvZ0luaXQsIGRpYWxvZ0V2ZW50cywgYmFja3N0YWdlKTtcbiAgICAgIGNvbnN0IG1vZGFsQWNjZXNzID0gKCgpID0+IHtcbiAgICAgICAgY29uc3QgZ2V0Rm9ybSA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBvdXRlckZvcm0gPSBNb2RhbERpYWxvZy5nZXRCb2R5KGRpYWxvZyk7XG4gICAgICAgICAgcmV0dXJuIENvbXBvc2luZy5nZXRDdXJyZW50KG91dGVyRm9ybSkuZ2V0T3Iob3V0ZXJGb3JtKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdG9nZ2xlRnVsbHNjcmVlbiA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBmdWxsc2NyZWVuQ2xhc3MgPSAndG94LWRpYWxvZy0tZnVsbHNjcmVlbic7XG4gICAgICAgICAgY29uc3Qgc3VnYXJCb2R5ID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZGlhbG9nLmVsZW1lbnQuZG9tKTtcbiAgICAgICAgICBpZiAoIWhhcyhzdWdhckJvZHksIGZ1bGxzY3JlZW5DbGFzcykpIHtcbiAgICAgICAgICAgIHJlbW92ZSQxKHN1Z2FyQm9keSwgZGlhbG9nU2l6ZSk7XG4gICAgICAgICAgICBhZGQkMihzdWdhckJvZHksIGZ1bGxzY3JlZW5DbGFzcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbW92ZSQyKHN1Z2FyQm9keSwgZnVsbHNjcmVlbkNsYXNzKTtcbiAgICAgICAgICAgIGFkZCQxKHN1Z2FyQm9keSwgZGlhbG9nU2l6ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGdldElkOiBjb25zdGFudCQxKGRpYWxvZ0lkKSxcbiAgICAgICAgICBnZXRSb290OiBjb25zdGFudCQxKGRpYWxvZyksXG4gICAgICAgICAgZ2V0Qm9keTogKCkgPT4gTW9kYWxEaWFsb2cuZ2V0Qm9keShkaWFsb2cpLFxuICAgICAgICAgIGdldEZvb3RlcjogKCkgPT4gTW9kYWxEaWFsb2cuZ2V0Rm9vdGVyKGRpYWxvZyksXG4gICAgICAgICAgZ2V0Rm9ybVdyYXBwZXI6IGdldEZvcm0sXG4gICAgICAgICAgdG9nZ2xlRnVsbHNjcmVlblxuICAgICAgICB9O1xuICAgICAgfSkoKTtcbiAgICAgIGNvbnN0IGluc3RhbmNlQXBpID0gZ2V0RGlhbG9nQXBpKG1vZGFsQWNjZXNzLCBleHRyYS5yZWRpYWwsIG9iak9mQ2VsbHMpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGlhbG9nLFxuICAgICAgICBpbnN0YW5jZUFwaVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0SW5saW5lRGlhbG9nU2l6ZUNsYXNzID0gc2l6ZSA9PiB7XG4gICAgICBzd2l0Y2ggKHNpemUpIHtcbiAgICAgIGNhc2UgJ21lZGl1bSc6XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKCd0b3gtZGlhbG9nLS13aWR0aC1tZCcpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlcklubGluZURpYWxvZyA9IChkaWFsb2dJbml0LCBleHRyYSwgYmFja3N0YWdlLCBhcmlhQXR0cnMgPSBmYWxzZSkgPT4ge1xuICAgICAgY29uc3QgZGlhbG9nSWQgPSBnZW5lcmF0ZSQ2KCdkaWFsb2cnKTtcbiAgICAgIGNvbnN0IGRpYWxvZ0xhYmVsSWQgPSBnZW5lcmF0ZSQ2KCdkaWFsb2ctbGFiZWwnKTtcbiAgICAgIGNvbnN0IGRpYWxvZ0NvbnRlbnRJZCA9IGdlbmVyYXRlJDYoJ2RpYWxvZy1jb250ZW50Jyk7XG4gICAgICBjb25zdCBpbnRlcm5hbERpYWxvZyA9IGRpYWxvZ0luaXQuaW50ZXJuYWxEaWFsb2c7XG4gICAgICBjb25zdCBkaWFsb2dTaXplID0gZ2V0SW5saW5lRGlhbG9nU2l6ZUNsYXNzKGludGVybmFsRGlhbG9nLnNpemUpO1xuICAgICAgY29uc3QgdXBkYXRlU3RhdGUgPSAoX2NvbXAsIGluY29taW5nKSA9PiBPcHRpb25hbC5zb21lKGluY29taW5nKTtcbiAgICAgIGNvbnN0IG1lbUhlYWRlciA9IHJlY29yZChyZW5kZXJJbmxpbmVIZWFkZXIoe1xuICAgICAgICB0aXRsZTogaW50ZXJuYWxEaWFsb2cudGl0bGUsXG4gICAgICAgIGRyYWdnYWJsZTogdHJ1ZVxuICAgICAgfSwgZGlhbG9nSWQsIGRpYWxvZ0xhYmVsSWQsIGJhY2tzdGFnZS5zaGFyZWQucHJvdmlkZXJzKSk7XG4gICAgICBjb25zdCBtZW1Cb2R5ID0gcmVjb3JkKHJlbmRlcklubGluZUJvZHkoe1xuICAgICAgICBib2R5OiBpbnRlcm5hbERpYWxvZy5ib2R5LFxuICAgICAgICBpbml0aWFsRGF0YTogaW50ZXJuYWxEaWFsb2cuaW5pdGlhbERhdGFcbiAgICAgIH0sIGRpYWxvZ0lkLCBkaWFsb2dDb250ZW50SWQsIGJhY2tzdGFnZSwgYXJpYUF0dHJzKSk7XG4gICAgICBjb25zdCBzdG9yYWdlZE1lbnVCdXR0b25zID0gbWFwTWVudUJ1dHRvbnMoaW50ZXJuYWxEaWFsb2cuYnV0dG9ucyk7XG4gICAgICBjb25zdCBvYmpPZkNlbGxzID0gZXh0cmFjdENlbGxzVG9PYmplY3Qoc3RvcmFnZWRNZW51QnV0dG9ucyk7XG4gICAgICBjb25zdCBvcHRNZW1Gb290ZXIgPSBzb21lSWYoc3RvcmFnZWRNZW51QnV0dG9ucy5sZW5ndGggIT09IDAsIHJlY29yZChyZW5kZXJJbmxpbmVGb290ZXIoeyBidXR0b25zOiBzdG9yYWdlZE1lbnVCdXR0b25zIH0sIGRpYWxvZ0lkLCBiYWNrc3RhZ2UpKSk7XG4gICAgICBjb25zdCBkaWFsb2dFdmVudHMgPSBpbml0RGlhbG9nKCgpID0+IGluc3RhbmNlQXBpLCB7XG4gICAgICAgIG9uQmxvY2s6IGV2ZW50ID0+IHtcbiAgICAgICAgICBCbG9ja2luZy5ibG9jayhkaWFsb2csIChfY29tcCwgYnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlckhlaWdodCA9IG1lbUhlYWRlci5nZXRPcHQoZGlhbG9nKS5tYXAoZGlhbG9nID0+IGdldCRkKGRpYWxvZy5lbGVtZW50KSk7XG4gICAgICAgICAgICByZXR1cm4gZ2V0QnVzeVNwZWMoZXZlbnQubWVzc2FnZSwgYnMsIGJhY2tzdGFnZS5zaGFyZWQucHJvdmlkZXJzLCBoZWFkZXJIZWlnaHQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblVuYmxvY2s6ICgpID0+IHtcbiAgICAgICAgICBCbG9ja2luZy51bmJsb2NrKGRpYWxvZyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ2xvc2U6ICgpID0+IGV4dHJhLmNsb3NlV2luZG93KClcbiAgICAgIH0sIGJhY2tzdGFnZS5zaGFyZWQuZ2V0U2luayk7XG4gICAgICBjb25zdCBpbmxpbmVDbGFzcyA9ICd0b3gtZGlhbG9nLWlubGluZSc7XG4gICAgICBjb25zdCBkaWFsb2cgPSBidWlsZCQxKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbXG4gICAgICAgICAgICAndG94LWRpYWxvZycsXG4gICAgICAgICAgICBpbmxpbmVDbGFzcyxcbiAgICAgICAgICAgIC4uLmRpYWxvZ1NpemUudG9BcnJheSgpXG4gICAgICAgICAgXSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICByb2xlOiAnZGlhbG9nJyxcbiAgICAgICAgICAgIFsnYXJpYS1sYWJlbGxlZGJ5J106IGRpYWxvZ0xhYmVsSWRcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGV2ZW50T3JkZXI6IHtcbiAgICAgICAgICBbcmVjZWl2ZSgpXTogW1xuICAgICAgICAgICAgUmVmbGVjdGluZy5uYW1lKCksXG4gICAgICAgICAgICBSZWNlaXZpbmcubmFtZSgpXG4gICAgICAgICAgXSxcbiAgICAgICAgICBbZXhlY3V0ZSQ1KCldOiBbJ2V4ZWN1dGUtb24tZm9ybSddLFxuICAgICAgICAgIFthdHRhY2hlZFRvRG9tKCldOiBbXG4gICAgICAgICAgICAncmVmbGVjdGluZycsXG4gICAgICAgICAgICAnZXhlY3V0ZS1vbi1mb3JtJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgICAgbW9kZTogJ2N5Y2xpYycsXG4gICAgICAgICAgICBvbkVzY2FwZTogYyA9PiB7XG4gICAgICAgICAgICAgIGVtaXQoYywgZm9ybUNsb3NlRXZlbnQpO1xuICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1c2VUYWJzdG9wQXQ6IGVsZW0gPT4gIWlzUHNldWRvU3RvcChlbGVtKSAmJiAobmFtZSQzKGVsZW0pICE9PSAnYnV0dG9uJyB8fCBnZXQkZihlbGVtLCAnZGlzYWJsZWQnKSAhPT0gJ2Rpc2FibGVkJyksXG4gICAgICAgICAgICBmaXJzdFRhYnN0b3A6IDFcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBSZWZsZWN0aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBjaGFubmVsOiBgJHsgZGlhbG9nQ2hhbm5lbCB9LSR7IGRpYWxvZ0lkIH1gLFxuICAgICAgICAgICAgdXBkYXRlU3RhdGUsXG4gICAgICAgICAgICBpbml0aWFsRGF0YTogZGlhbG9nSW5pdFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIEZvY3VzaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgY29uZmlnKCdleGVjdXRlLW9uLWZvcm0nLCBkaWFsb2dFdmVudHMuY29uY2F0KFtcbiAgICAgICAgICAgIHJ1bk9uU291cmNlKGZvY3VzaW4oKSwgKGNvbXAsIF9zZSkgPT4ge1xuICAgICAgICAgICAgICBLZXlpbmcuZm9jdXNJbihjb21wKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcnVuJDEoZm9jdXNTaGlmdGVkKCksIChjb21wLCBzZSkgPT4ge1xuICAgICAgICAgICAgICBjb21wLmdldFN5c3RlbSgpLmJyb2FkY2FzdE9uKFtkaWFsb2dGb2N1c1NoaWZ0ZWRDaGFubmVsXSwgeyBuZXdGb2N1czogc2UuZXZlbnQubmV3Rm9jdXMgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0pKSxcbiAgICAgICAgICBCbG9ja2luZy5jb25maWcoeyBnZXRSb290OiAoKSA9PiBPcHRpb25hbC5zb21lKGRpYWxvZykgfSksXG4gICAgICAgICAgUmVwbGFjaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgbWVtb3J5KHt9KVxuICAgICAgICBdKSxcbiAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgIG1lbUhlYWRlci5hc1NwZWMoKSxcbiAgICAgICAgICBtZW1Cb2R5LmFzU3BlYygpLFxuICAgICAgICAgIC4uLm9wdE1lbUZvb3Rlci5tYXAobWVtRm9vdGVyID0+IG1lbUZvb3Rlci5hc1NwZWMoKSkudG9BcnJheSgpXG4gICAgICAgIF1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgdG9nZ2xlRnVsbHNjcmVlbiA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZnVsbHNjcmVlbkNsYXNzID0gJ3RveC1kaWFsb2ctLWZ1bGxzY3JlZW4nO1xuICAgICAgICBjb25zdCBzdWdhckJvZHkgPSBTdWdhckVsZW1lbnQuZnJvbURvbShkaWFsb2cuZWxlbWVudC5kb20pO1xuICAgICAgICBpZiAoIWhhc0FsbChzdWdhckJvZHksIFtmdWxsc2NyZWVuQ2xhc3NdKSkge1xuICAgICAgICAgIHJlbW92ZSQxKHN1Z2FyQm9keSwgW2lubGluZUNsYXNzXSk7XG4gICAgICAgICAgYWRkJDEoc3VnYXJCb2R5LCBbZnVsbHNjcmVlbkNsYXNzXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVtb3ZlJDEoc3VnYXJCb2R5LCBbZnVsbHNjcmVlbkNsYXNzXSk7XG4gICAgICAgICAgYWRkJDEoc3VnYXJCb2R5LCBbaW5saW5lQ2xhc3NdKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGluc3RhbmNlQXBpID0gZ2V0RGlhbG9nQXBpKHtcbiAgICAgICAgZ2V0SWQ6IGNvbnN0YW50JDEoZGlhbG9nSWQpLFxuICAgICAgICBnZXRSb290OiBjb25zdGFudCQxKGRpYWxvZyksXG4gICAgICAgIGdldEZvb3RlcjogKCkgPT4gb3B0TWVtRm9vdGVyLm1hcChtZW1Gb290ZXIgPT4gbWVtRm9vdGVyLmdldChkaWFsb2cpKSxcbiAgICAgICAgZ2V0Qm9keTogKCkgPT4gbWVtQm9keS5nZXQoZGlhbG9nKSxcbiAgICAgICAgZ2V0Rm9ybVdyYXBwZXI6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBib2R5ID0gbWVtQm9keS5nZXQoZGlhbG9nKTtcbiAgICAgICAgICByZXR1cm4gQ29tcG9zaW5nLmdldEN1cnJlbnQoYm9keSkuZ2V0T3IoYm9keSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRvZ2dsZUZ1bGxzY3JlZW5cbiAgICAgIH0sIGV4dHJhLnJlZGlhbCwgb2JqT2ZDZWxscyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaWFsb2csXG4gICAgICAgIGluc3RhbmNlQXBpXG4gICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgZ2xvYmFsID0gdGlueW1jZS51dGlsLlRvb2xzLnJlc29sdmUoJ3RpbnltY2UudXRpbC5VUkknKTtcblxuICAgIGNvbnN0IGdldFVybERpYWxvZ0FwaSA9IHJvb3QgPT4ge1xuICAgICAgY29uc3Qgd2l0aFJvb3QgPSBmID0+IHtcbiAgICAgICAgaWYgKHJvb3QuZ2V0U3lzdGVtKCkuaXNDb25uZWN0ZWQoKSkge1xuICAgICAgICAgIGYocm9vdCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBibG9jayA9IG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAoIWlzU3RyaW5nKG1lc3NhZ2UpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdXJsRGlhbG9nSW5zdGFuY2VBUEkuYmxvY2sgZnVuY3Rpb24gc2hvdWxkIGJlIHBhc3NlZCBhIGJsb2NraW5nIG1lc3NhZ2Ugb2YgdHlwZSBzdHJpbmcgYXMgYW4gYXJndW1lbnQnKTtcbiAgICAgICAgfVxuICAgICAgICB3aXRoUm9vdChyb290ID0+IHtcbiAgICAgICAgICBlbWl0V2l0aChyb290LCBmb3JtQmxvY2tFdmVudCwgeyBtZXNzYWdlIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCB1bmJsb2NrID0gKCkgPT4ge1xuICAgICAgICB3aXRoUm9vdChyb290ID0+IHtcbiAgICAgICAgICBlbWl0KHJvb3QsIGZvcm1VbmJsb2NrRXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjbG9zZSA9ICgpID0+IHtcbiAgICAgICAgd2l0aFJvb3Qocm9vdCA9PiB7XG4gICAgICAgICAgZW1pdChyb290LCBmb3JtQ2xvc2VFdmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlbmRNZXNzYWdlID0gZGF0YSA9PiB7XG4gICAgICAgIHdpdGhSb290KHJvb3QgPT4ge1xuICAgICAgICAgIHJvb3QuZ2V0U3lzdGVtKCkuYnJvYWRjYXN0T24oW2JvZHlTZW5kTWVzc2FnZUNoYW5uZWxdLCBkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmxvY2ssXG4gICAgICAgIHVuYmxvY2ssXG4gICAgICAgIGNsb3NlLFxuICAgICAgICBzZW5kTWVzc2FnZVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgU1VQUE9SVEVEX01FU1NBR0VfQUNUSU9OUyA9IFtcbiAgICAgICdpbnNlcnRDb250ZW50JyxcbiAgICAgICdzZXRDb250ZW50JyxcbiAgICAgICdleGVjQ29tbWFuZCcsXG4gICAgICAnY2xvc2UnLFxuICAgICAgJ2Jsb2NrJyxcbiAgICAgICd1bmJsb2NrJ1xuICAgIF07XG4gICAgY29uc3QgaXNTdXBwb3J0ZWRNZXNzYWdlID0gZGF0YSA9PiBpc09iamVjdChkYXRhKSAmJiBTVVBQT1JURURfTUVTU0FHRV9BQ1RJT05TLmluZGV4T2YoZGF0YS5tY2VBY3Rpb24pICE9PSAtMTtcbiAgICBjb25zdCBpc0N1c3RvbU1lc3NhZ2UgPSBkYXRhID0+ICFpc1N1cHBvcnRlZE1lc3NhZ2UoZGF0YSkgJiYgaXNPYmplY3QoZGF0YSkgJiYgaGFzJDIoZGF0YSwgJ21jZUFjdGlvbicpO1xuICAgIGNvbnN0IGhhbmRsZU1lc3NhZ2UgPSAoZWRpdG9yLCBhcGksIGRhdGEpID0+IHtcbiAgICAgIHN3aXRjaCAoZGF0YS5tY2VBY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2luc2VydENvbnRlbnQnOlxuICAgICAgICBlZGl0b3IuaW5zZXJ0Q29udGVudChkYXRhLmNvbnRlbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NldENvbnRlbnQnOlxuICAgICAgICBlZGl0b3Iuc2V0Q29udGVudChkYXRhLmNvbnRlbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V4ZWNDb21tYW5kJzpcbiAgICAgICAgY29uc3QgdWkgPSBpc0Jvb2xlYW4oZGF0YS51aSkgPyBkYXRhLnVpIDogZmFsc2U7XG4gICAgICAgIGVkaXRvci5leGVjQ29tbWFuZChkYXRhLmNtZCwgdWksIGRhdGEudmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Nsb3NlJzpcbiAgICAgICAgYXBpLmNsb3NlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYmxvY2snOlxuICAgICAgICBhcGkuYmxvY2soZGF0YS5tZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1bmJsb2NrJzpcbiAgICAgICAgYXBpLnVuYmxvY2soKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJVcmxEaWFsb2cgPSAoaW50ZXJuYWxEaWFsb2csIGV4dHJhLCBlZGl0b3IsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgZGlhbG9nSWQgPSBnZW5lcmF0ZSQ2KCdkaWFsb2cnKTtcbiAgICAgIGNvbnN0IGhlYWRlciA9IGdldEhlYWRlcihpbnRlcm5hbERpYWxvZy50aXRsZSwgZGlhbG9nSWQsIGJhY2tzdGFnZSk7XG4gICAgICBjb25zdCBib2R5ID0gcmVuZGVySWZyYW1lQm9keShpbnRlcm5hbERpYWxvZyk7XG4gICAgICBjb25zdCBmb290ZXIgPSBpbnRlcm5hbERpYWxvZy5idXR0b25zLmJpbmQoYnV0dG9ucyA9PiB7XG4gICAgICAgIGlmIChidXR0b25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUocmVuZGVyTW9kYWxGb290ZXIoeyBidXR0b25zIH0sIGRpYWxvZ0lkLCBiYWNrc3RhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBkaWFsb2dFdmVudHMgPSBpbml0VXJsRGlhbG9nKCgpID0+IGluc3RhbmNlQXBpLCBnZXRFdmVudEV4dHJhcygoKSA9PiBkaWFsb2csIGJhY2tzdGFnZS5zaGFyZWQucHJvdmlkZXJzLCBleHRyYSkpO1xuICAgICAgY29uc3Qgc3R5bGVzID0ge1xuICAgICAgICAuLi5pbnRlcm5hbERpYWxvZy5oZWlnaHQuZm9sZCgoKSA9PiAoe30pLCBoZWlnaHQgPT4gKHtcbiAgICAgICAgICAnaGVpZ2h0JzogaGVpZ2h0ICsgJ3B4JyxcbiAgICAgICAgICAnbWF4LWhlaWdodCc6IGhlaWdodCArICdweCdcbiAgICAgICAgfSkpLFxuICAgICAgICAuLi5pbnRlcm5hbERpYWxvZy53aWR0aC5mb2xkKCgpID0+ICh7fSksIHdpZHRoID0+ICh7XG4gICAgICAgICAgJ3dpZHRoJzogd2lkdGggKyAncHgnLFxuICAgICAgICAgICdtYXgtd2lkdGgnOiB3aWR0aCArICdweCdcbiAgICAgICAgfSkpXG4gICAgICB9O1xuICAgICAgY29uc3QgY2xhc3NlcyA9IGludGVybmFsRGlhbG9nLndpZHRoLmlzTm9uZSgpICYmIGludGVybmFsRGlhbG9nLmhlaWdodC5pc05vbmUoKSA/IFsndG94LWRpYWxvZy0td2lkdGgtbGcnXSA6IFtdO1xuICAgICAgY29uc3QgaWZyYW1lVXJpID0gbmV3IGdsb2JhbChpbnRlcm5hbERpYWxvZy51cmwsIHsgYmFzZV91cmk6IG5ldyBnbG9iYWwod2luZG93LmxvY2F0aW9uLmhyZWYpIH0pO1xuICAgICAgY29uc3QgaWZyYW1lRG9tYWluID0gYCR7IGlmcmFtZVVyaS5wcm90b2NvbCB9Oi8vJHsgaWZyYW1lVXJpLmhvc3QgfSR7IGlmcmFtZVVyaS5wb3J0ID8gJzonICsgaWZyYW1lVXJpLnBvcnQgOiAnJyB9YDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VIYW5kbGVyVW5iaW5kZXIgPSB1bmJpbmRhYmxlKCk7XG4gICAgICBjb25zdCBleHRyYUJlaGF2aW91cnMgPSBbXG4gICAgICAgIGNvbmZpZygnbWVzc2FnZXMnLCBbXG4gICAgICAgICAgcnVuT25BdHRhY2hlZCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1bmJpbmQgPSBiaW5kKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHdpbmRvdyksICdtZXNzYWdlJywgZSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpZnJhbWVVcmkuaXNTYW1lT3JpZ2luKG5ldyBnbG9iYWwoZS5yYXcub3JpZ2luKSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gZS5yYXcuZGF0YTtcbiAgICAgICAgICAgICAgICBpZiAoaXNTdXBwb3J0ZWRNZXNzYWdlKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICBoYW5kbGVNZXNzYWdlKGVkaXRvciwgaW5zdGFuY2VBcGksIGRhdGEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNDdXN0b21NZXNzYWdlKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICBpbnRlcm5hbERpYWxvZy5vbk1lc3NhZ2UoaW5zdGFuY2VBcGksIGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBtZXNzYWdlSGFuZGxlclVuYmluZGVyLnNldCh1bmJpbmQpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJ1bk9uRGV0YWNoZWQobWVzc2FnZUhhbmRsZXJVbmJpbmRlci5jbGVhcilcbiAgICAgICAgXSksXG4gICAgICAgIFJlY2VpdmluZy5jb25maWcoe1xuICAgICAgICAgIGNoYW5uZWxzOiB7XG4gICAgICAgICAgICBbYm9keVNlbmRNZXNzYWdlQ2hhbm5lbF06IHtcbiAgICAgICAgICAgICAgb25SZWNlaXZlOiAoY29tcCwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGRlc2NlbmRhbnQoY29tcC5lbGVtZW50LCAnaWZyYW1lJykuZWFjaChpZnJhbWVFbGUgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaWZyYW1lV2luID0gaWZyYW1lRWxlLmRvbS5jb250ZW50V2luZG93O1xuICAgICAgICAgICAgICAgICAgaWYgKGlzTm9uTnVsbGFibGUoaWZyYW1lV2luKSkge1xuICAgICAgICAgICAgICAgICAgICBpZnJhbWVXaW4ucG9zdE1lc3NhZ2UoZGF0YSwgaWZyYW1lRG9tYWluKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIF07XG4gICAgICBjb25zdCBzcGVjID0ge1xuICAgICAgICBpZDogZGlhbG9nSWQsXG4gICAgICAgIGhlYWRlcixcbiAgICAgICAgYm9keSxcbiAgICAgICAgZm9vdGVyLFxuICAgICAgICBleHRyYUNsYXNzZXM6IGNsYXNzZXMsXG4gICAgICAgIGV4dHJhQmVoYXZpb3VycyxcbiAgICAgICAgZXh0cmFTdHlsZXM6IHN0eWxlc1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRpYWxvZyA9IHJlbmRlck1vZGFsRGlhbG9nKHNwZWMsIGludGVybmFsRGlhbG9nLCBkaWFsb2dFdmVudHMsIGJhY2tzdGFnZSk7XG4gICAgICBjb25zdCBpbnN0YW5jZUFwaSA9IGdldFVybERpYWxvZ0FwaShkaWFsb2cpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGlhbG9nLFxuICAgICAgICBpbnN0YW5jZUFwaVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0dXAkMiA9IGJhY2tzdGFnZSA9PiB7XG4gICAgICBjb25zdCBzaGFyZWRCYWNrc3RhZ2UgPSBiYWNrc3RhZ2Uuc2hhcmVkO1xuICAgICAgY29uc3Qgb3BlbiA9IChtZXNzYWdlLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBjb25zdCBjbG9zZURpYWxvZyA9ICgpID0+IHtcbiAgICAgICAgICBNb2RhbERpYWxvZy5oaWRlKGFsZXJ0RGlhbG9nKTtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBtZW1Gb290ZXJDbG9zZSA9IHJlY29yZChyZW5kZXJGb290ZXJCdXR0b24oe1xuICAgICAgICAgIG5hbWU6ICdjbG9zZS1hbGVydCcsXG4gICAgICAgICAgdGV4dDogJ09LJyxcbiAgICAgICAgICBwcmltYXJ5OiB0cnVlLFxuICAgICAgICAgIGJ1dHRvblR5cGU6IE9wdGlvbmFsLnNvbWUoJ3ByaW1hcnknKSxcbiAgICAgICAgICBhbGlnbjogJ2VuZCcsXG4gICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBpY29uOiBPcHRpb25hbC5ub25lKClcbiAgICAgICAgfSwgJ2NhbmNlbCcsIGJhY2tzdGFnZSkpO1xuICAgICAgICBjb25zdCB0aXRsZVNwZWMgPSBwVW50aXRsZWQoKTtcbiAgICAgICAgY29uc3QgY2xvc2VTcGVjID0gcENsb3NlKGNsb3NlRGlhbG9nLCBzaGFyZWRCYWNrc3RhZ2UucHJvdmlkZXJzKTtcbiAgICAgICAgY29uc3QgYWxlcnREaWFsb2cgPSBidWlsZCQxKHJlbmRlckRpYWxvZyQxKHtcbiAgICAgICAgICBsYXp5U2luazogKCkgPT4gc2hhcmVkQmFja3N0YWdlLmdldFNpbmsoKSxcbiAgICAgICAgICBoZWFkZXI6IGhpZGRlbkhlYWRlcih0aXRsZVNwZWMsIGNsb3NlU3BlYyksXG4gICAgICAgICAgYm9keTogcEJvZHlNZXNzYWdlKG1lc3NhZ2UsIHNoYXJlZEJhY2tzdGFnZS5wcm92aWRlcnMpLFxuICAgICAgICAgIGZvb3RlcjogT3B0aW9uYWwuc29tZShwRm9vdGVyKHBGb290ZXJHcm91cChbXSwgW21lbUZvb3RlckNsb3NlLmFzU3BlYygpXSkpKSxcbiAgICAgICAgICBvbkVzY2FwZTogY2xvc2VEaWFsb2csXG4gICAgICAgICAgZXh0cmFDbGFzc2VzOiBbJ3RveC1hbGVydC1kaWFsb2cnXSxcbiAgICAgICAgICBleHRyYUJlaGF2aW91cnM6IFtdLFxuICAgICAgICAgIGV4dHJhU3R5bGVzOiB7fSxcbiAgICAgICAgICBkaWFsb2dFdmVudHM6IFtydW4kMShmb3JtQ2FuY2VsRXZlbnQsIGNsb3NlRGlhbG9nKV0sXG4gICAgICAgICAgZXZlbnRPcmRlcjoge31cbiAgICAgICAgfSkpO1xuICAgICAgICBNb2RhbERpYWxvZy5zaG93KGFsZXJ0RGlhbG9nKTtcbiAgICAgICAgY29uc3QgZm9vdGVyQ2xvc2VCdXR0b24gPSBtZW1Gb290ZXJDbG9zZS5nZXQoYWxlcnREaWFsb2cpO1xuICAgICAgICBGb2N1c2luZy5mb2N1cyhmb290ZXJDbG9zZUJ1dHRvbik7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgb3BlbiB9O1xuICAgIH07XG5cbiAgICBjb25zdCBzZXR1cCQxID0gYmFja3N0YWdlID0+IHtcbiAgICAgIGNvbnN0IHNoYXJlZEJhY2tzdGFnZSA9IGJhY2tzdGFnZS5zaGFyZWQ7XG4gICAgICBjb25zdCBvcGVuID0gKG1lc3NhZ2UsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IGNsb3NlRGlhbG9nID0gc3RhdGUgPT4ge1xuICAgICAgICAgIE1vZGFsRGlhbG9nLmhpZGUoY29uZmlybURpYWxvZyk7XG4gICAgICAgICAgY2FsbGJhY2soc3RhdGUpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBtZW1Gb290ZXJZZXMgPSByZWNvcmQocmVuZGVyRm9vdGVyQnV0dG9uKHtcbiAgICAgICAgICBuYW1lOiAneWVzJyxcbiAgICAgICAgICB0ZXh0OiAnWWVzJyxcbiAgICAgICAgICBwcmltYXJ5OiB0cnVlLFxuICAgICAgICAgIGJ1dHRvblR5cGU6IE9wdGlvbmFsLnNvbWUoJ3ByaW1hcnknKSxcbiAgICAgICAgICBhbGlnbjogJ2VuZCcsXG4gICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBpY29uOiBPcHRpb25hbC5ub25lKClcbiAgICAgICAgfSwgJ3N1Ym1pdCcsIGJhY2tzdGFnZSkpO1xuICAgICAgICBjb25zdCBmb290ZXJObyA9IHJlbmRlckZvb3RlckJ1dHRvbih7XG4gICAgICAgICAgbmFtZTogJ25vJyxcbiAgICAgICAgICB0ZXh0OiAnTm8nLFxuICAgICAgICAgIHByaW1hcnk6IGZhbHNlLFxuICAgICAgICAgIGJ1dHRvblR5cGU6IE9wdGlvbmFsLnNvbWUoJ3NlY29uZGFyeScpLFxuICAgICAgICAgIGFsaWduOiAnZW5kJyxcbiAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgIGljb246IE9wdGlvbmFsLm5vbmUoKVxuICAgICAgICB9LCAnY2FuY2VsJywgYmFja3N0YWdlKTtcbiAgICAgICAgY29uc3QgdGl0bGVTcGVjID0gcFVudGl0bGVkKCk7XG4gICAgICAgIGNvbnN0IGNsb3NlU3BlYyA9IHBDbG9zZSgoKSA9PiBjbG9zZURpYWxvZyhmYWxzZSksIHNoYXJlZEJhY2tzdGFnZS5wcm92aWRlcnMpO1xuICAgICAgICBjb25zdCBjb25maXJtRGlhbG9nID0gYnVpbGQkMShyZW5kZXJEaWFsb2ckMSh7XG4gICAgICAgICAgbGF6eVNpbms6ICgpID0+IHNoYXJlZEJhY2tzdGFnZS5nZXRTaW5rKCksXG4gICAgICAgICAgaGVhZGVyOiBoaWRkZW5IZWFkZXIodGl0bGVTcGVjLCBjbG9zZVNwZWMpLFxuICAgICAgICAgIGJvZHk6IHBCb2R5TWVzc2FnZShtZXNzYWdlLCBzaGFyZWRCYWNrc3RhZ2UucHJvdmlkZXJzKSxcbiAgICAgICAgICBmb290ZXI6IE9wdGlvbmFsLnNvbWUocEZvb3RlcihwRm9vdGVyR3JvdXAoW10sIFtcbiAgICAgICAgICAgIGZvb3Rlck5vLFxuICAgICAgICAgICAgbWVtRm9vdGVyWWVzLmFzU3BlYygpXG4gICAgICAgICAgXSkpKSxcbiAgICAgICAgICBvbkVzY2FwZTogKCkgPT4gY2xvc2VEaWFsb2coZmFsc2UpLFxuICAgICAgICAgIGV4dHJhQ2xhc3NlczogWyd0b3gtY29uZmlybS1kaWFsb2cnXSxcbiAgICAgICAgICBleHRyYUJlaGF2aW91cnM6IFtdLFxuICAgICAgICAgIGV4dHJhU3R5bGVzOiB7fSxcbiAgICAgICAgICBkaWFsb2dFdmVudHM6IFtcbiAgICAgICAgICAgIHJ1biQxKGZvcm1DYW5jZWxFdmVudCwgKCkgPT4gY2xvc2VEaWFsb2coZmFsc2UpKSxcbiAgICAgICAgICAgIHJ1biQxKGZvcm1TdWJtaXRFdmVudCwgKCkgPT4gY2xvc2VEaWFsb2codHJ1ZSkpXG4gICAgICAgICAgXSxcbiAgICAgICAgICBldmVudE9yZGVyOiB7fVxuICAgICAgICB9KSk7XG4gICAgICAgIE1vZGFsRGlhbG9nLnNob3coY29uZmlybURpYWxvZyk7XG4gICAgICAgIGNvbnN0IGZvb3Rlclllc0J1dHRvbiA9IG1lbUZvb3Rlclllcy5nZXQoY29uZmlybURpYWxvZyk7XG4gICAgICAgIEZvY3VzaW5nLmZvY3VzKGZvb3Rlclllc0J1dHRvbik7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgb3BlbiB9O1xuICAgIH07XG5cbiAgICBjb25zdCB2YWxpZGF0ZURhdGEgPSAoZGF0YSwgdmFsaWRhdG9yKSA9PiBnZXRPckRpZShhc1JhdygnZGF0YScsIHZhbGlkYXRvciwgZGF0YSkpO1xuICAgIGNvbnN0IGlzQWxlcnRPckNvbmZpcm1EaWFsb2cgPSB0YXJnZXQgPT4gY2xvc2VzdCh0YXJnZXQsICcudG94LWFsZXJ0LWRpYWxvZycpIHx8IGNsb3Nlc3QodGFyZ2V0LCAnLnRveC1jb25maXJtLWRpYWxvZycpO1xuICAgIGNvbnN0IGlubGluZUFkZGl0aW9uYWxCZWhhdmlvdXJzID0gKGVkaXRvciwgaXNTdGlja3lUb29sYmFyLCBpc1Rvb2xiYXJMb2NhdGlvblRvcCkgPT4ge1xuICAgICAgaWYgKGlzU3RpY2t5VG9vbGJhciAmJiBpc1Rvb2xiYXJMb2NhdGlvblRvcCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW0RvY2tpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIGNvbnRleHR1YWw6IHtcbiAgICAgICAgICAgICAgbGF6eUNvbnRleHQ6ICgpID0+IE9wdGlvbmFsLnNvbWUoYm94JDEoU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldENvbnRlbnRBcmVhQ29udGFpbmVyKCkpKSksXG4gICAgICAgICAgICAgIGZhZGVJbkNsYXNzOiAndG94LWRpYWxvZy1kb2NrLWZhZGVpbicsXG4gICAgICAgICAgICAgIGZhZGVPdXRDbGFzczogJ3RveC1kaWFsb2ctZG9jay1mYWRlb3V0JyxcbiAgICAgICAgICAgICAgdHJhbnNpdGlvbkNsYXNzOiAndG94LWRpYWxvZy1kb2NrLXRyYW5zaXRpb24nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbW9kZXM6IFsndG9wJ10sXG4gICAgICAgICAgICBsYXp5Vmlld3BvcnQ6IGNvbXAgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBvcHRTY3JvbGxpbmdDb250ZXh0ID0gZGV0ZWN0V2hlblNwbGl0VWlNb2RlKGVkaXRvciwgY29tcC5lbGVtZW50KTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9wdFNjcm9sbGluZ0NvbnRleHQubWFwKHNjID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21iaW5lZEJvdW5kcyA9IGdldEJvdW5kc0Zyb20oc2MpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBib3VuZHM6IGNvbWJpbmVkQm91bmRzLFxuICAgICAgICAgICAgICAgICAgb3B0U2Nyb2xsRW52OiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjcm9sbFRvcDogc2MuZWxlbWVudC5kb20uc2Nyb2xsVG9wLFxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxFbG1Ub3A6IGFic29sdXRlJDMoc2MuZWxlbWVudCkudG9wXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0pLmdldE9yVGh1bmsoKCkgPT4gKHtcbiAgICAgICAgICAgICAgICBib3VuZHM6IHdpbigpLFxuICAgICAgICAgICAgICAgIG9wdFNjcm9sbEVudjogT3B0aW9uYWwubm9uZSgpXG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KV07XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cCA9IGV4dHJhcyA9PiB7XG4gICAgICBjb25zdCBlZGl0b3IgPSBleHRyYXMuZWRpdG9yO1xuICAgICAgY29uc3QgaXNTdGlja3lUb29sYmFyJDEgPSBpc1N0aWNreVRvb2xiYXIoZWRpdG9yKTtcbiAgICAgIGNvbnN0IGFsZXJ0RGlhbG9nID0gc2V0dXAkMihleHRyYXMuYmFja3N0YWdlcy5kaWFsb2cpO1xuICAgICAgY29uc3QgY29uZmlybURpYWxvZyA9IHNldHVwJDEoZXh0cmFzLmJhY2tzdGFnZXMuZGlhbG9nKTtcbiAgICAgIGNvbnN0IG9wZW4gPSAoY29uZmlnLCBwYXJhbXMsIGNsb3NlV2luZG93KSA9PiB7XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQocGFyYW1zKSkge1xuICAgICAgICAgIGlmIChwYXJhbXMuaW5saW5lID09PSAndG9vbGJhcicpIHtcbiAgICAgICAgICAgIHJldHVybiBvcGVuSW5saW5lRGlhbG9nKGNvbmZpZywgZXh0cmFzLmJhY2tzdGFnZXMucG9wdXAuc2hhcmVkLmFuY2hvcnMuaW5saW5lRGlhbG9nKCksIGNsb3NlV2luZG93LCBwYXJhbXMpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1zLmlubGluZSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgIHJldHVybiBvcGVuQm90dG9tSW5saW5lRGlhbG9nKGNvbmZpZywgZXh0cmFzLmJhY2tzdGFnZXMucG9wdXAuc2hhcmVkLmFuY2hvcnMuaW5saW5lQm90dG9tRGlhbG9nKCksIGNsb3NlV2luZG93LCBwYXJhbXMpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1zLmlubGluZSA9PT0gJ2N1cnNvcicpIHtcbiAgICAgICAgICAgIHJldHVybiBvcGVuSW5saW5lRGlhbG9nKGNvbmZpZywgZXh0cmFzLmJhY2tzdGFnZXMucG9wdXAuc2hhcmVkLmFuY2hvcnMuY3Vyc29yKCksIGNsb3NlV2luZG93LCBwYXJhbXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3Blbk1vZGFsRGlhbG9nKGNvbmZpZywgY2xvc2VXaW5kb3cpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG9wZW5VcmwgPSAoY29uZmlnLCBjbG9zZVdpbmRvdykgPT4gb3Blbk1vZGFsVXJsRGlhbG9nKGNvbmZpZywgY2xvc2VXaW5kb3cpO1xuICAgICAgY29uc3Qgb3Blbk1vZGFsVXJsRGlhbG9nID0gKGNvbmZpZywgY2xvc2VXaW5kb3cpID0+IHtcbiAgICAgICAgY29uc3QgZmFjdG9yeSA9IGNvbnRlbnRzID0+IHtcbiAgICAgICAgICBjb25zdCBkaWFsb2cgPSByZW5kZXJVcmxEaWFsb2coY29udGVudHMsIHtcbiAgICAgICAgICAgIGNsb3NlV2luZG93OiAoKSA9PiB7XG4gICAgICAgICAgICAgIE1vZGFsRGlhbG9nLmhpZGUoZGlhbG9nLmRpYWxvZyk7XG4gICAgICAgICAgICAgIGNsb3NlV2luZG93KGRpYWxvZy5pbnN0YW5jZUFwaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgZWRpdG9yLCBleHRyYXMuYmFja3N0YWdlcy5kaWFsb2cpO1xuICAgICAgICAgIE1vZGFsRGlhbG9nLnNob3coZGlhbG9nLmRpYWxvZyk7XG4gICAgICAgICAgcmV0dXJuIGRpYWxvZy5pbnN0YW5jZUFwaTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIERpYWxvZ01hbmFnZXIub3BlblVybChmYWN0b3J5LCBjb25maWcpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG9wZW5Nb2RhbERpYWxvZyA9IChjb25maWcsIGNsb3NlV2luZG93KSA9PiB7XG4gICAgICAgIGNvbnN0IGZhY3RvcnkgPSAoY29udGVudHMsIGludGVybmFsSW5pdGlhbERhdGEsIGRhdGFWYWxpZGF0b3IpID0+IHtcbiAgICAgICAgICBjb25zdCBpbml0aWFsRGF0YSA9IGludGVybmFsSW5pdGlhbERhdGE7XG4gICAgICAgICAgY29uc3QgZGlhbG9nSW5pdCA9IHtcbiAgICAgICAgICAgIGRhdGFWYWxpZGF0b3IsXG4gICAgICAgICAgICBpbml0aWFsRGF0YSxcbiAgICAgICAgICAgIGludGVybmFsRGlhbG9nOiBjb250ZW50c1xuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgZGlhbG9nID0gcmVuZGVyRGlhbG9nKGRpYWxvZ0luaXQsIHtcbiAgICAgICAgICAgIHJlZGlhbDogRGlhbG9nTWFuYWdlci5yZWRpYWwsXG4gICAgICAgICAgICBjbG9zZVdpbmRvdzogKCkgPT4ge1xuICAgICAgICAgICAgICBNb2RhbERpYWxvZy5oaWRlKGRpYWxvZy5kaWFsb2cpO1xuICAgICAgICAgICAgICBjbG9zZVdpbmRvdyhkaWFsb2cuaW5zdGFuY2VBcGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGV4dHJhcy5iYWNrc3RhZ2VzLmRpYWxvZyk7XG4gICAgICAgICAgTW9kYWxEaWFsb2cuc2hvdyhkaWFsb2cuZGlhbG9nKTtcbiAgICAgICAgICBkaWFsb2cuaW5zdGFuY2VBcGkuc2V0RGF0YShpbml0aWFsRGF0YSk7XG4gICAgICAgICAgcmV0dXJuIGRpYWxvZy5pbnN0YW5jZUFwaTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIERpYWxvZ01hbmFnZXIub3BlbihmYWN0b3J5LCBjb25maWcpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG9wZW5JbmxpbmVEaWFsb2cgPSAoY29uZmlnJDEsIGFuY2hvciwgY2xvc2VXaW5kb3csIHdpbmRvd1BhcmFtcykgPT4ge1xuICAgICAgICBjb25zdCBmYWN0b3J5ID0gKGNvbnRlbnRzLCBpbnRlcm5hbEluaXRpYWxEYXRhLCBkYXRhVmFsaWRhdG9yKSA9PiB7XG4gICAgICAgICAgY29uc3QgaW5pdGlhbERhdGEgPSB2YWxpZGF0ZURhdGEoaW50ZXJuYWxJbml0aWFsRGF0YSwgZGF0YVZhbGlkYXRvcik7XG4gICAgICAgICAgY29uc3QgaW5saW5lRGlhbG9nID0gdmFsdWUkMigpO1xuICAgICAgICAgIGNvbnN0IGlzVG9vbGJhckxvY2F0aW9uVG9wID0gZXh0cmFzLmJhY2tzdGFnZXMucG9wdXAuc2hhcmVkLmhlYWRlci5pc1Bvc2l0aW9uZWRBdFRvcCgpO1xuICAgICAgICAgIGNvbnN0IGRpYWxvZ0luaXQgPSB7XG4gICAgICAgICAgICBkYXRhVmFsaWRhdG9yLFxuICAgICAgICAgICAgaW5pdGlhbERhdGEsXG4gICAgICAgICAgICBpbnRlcm5hbERpYWxvZzogY29udGVudHNcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IHJlZnJlc2hEb2NraW5nID0gKCkgPT4gaW5saW5lRGlhbG9nLm9uKGRpYWxvZyA9PiB7XG4gICAgICAgICAgICBJbmxpbmVWaWV3LnJlcG9zaXRpb24oZGlhbG9nKTtcbiAgICAgICAgICAgIERvY2tpbmcucmVmcmVzaChkaWFsb2cpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGRpYWxvZ1VpID0gcmVuZGVySW5saW5lRGlhbG9nKGRpYWxvZ0luaXQsIHtcbiAgICAgICAgICAgIHJlZGlhbDogRGlhbG9nTWFuYWdlci5yZWRpYWwsXG4gICAgICAgICAgICBjbG9zZVdpbmRvdzogKCkgPT4ge1xuICAgICAgICAgICAgICBpbmxpbmVEaWFsb2cub24oSW5saW5lVmlldy5oaWRlKTtcbiAgICAgICAgICAgICAgZWRpdG9yLm9mZignUmVzaXplRWRpdG9yJywgcmVmcmVzaERvY2tpbmcpO1xuICAgICAgICAgICAgICBpbmxpbmVEaWFsb2cuY2xlYXIoKTtcbiAgICAgICAgICAgICAgY2xvc2VXaW5kb3coZGlhbG9nVWkuaW5zdGFuY2VBcGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGV4dHJhcy5iYWNrc3RhZ2VzLnBvcHVwLCB3aW5kb3dQYXJhbXMuYXJpYUF0dHJzKTtcbiAgICAgICAgICBjb25zdCBpbmxpbmVEaWFsb2dDb21wID0gYnVpbGQkMShJbmxpbmVWaWV3LnNrZXRjaCh7XG4gICAgICAgICAgICBsYXp5U2luazogZXh0cmFzLmJhY2tzdGFnZXMucG9wdXAuc2hhcmVkLmdldFNpbmssXG4gICAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgICAgY2xhc3NlczogW11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaXJlRGlzbWlzc2FsRXZlbnRJbnN0ZWFkOiB3aW5kb3dQYXJhbXMucGVyc2lzdGVudCA/IHsgZXZlbnQ6ICdkb05vdERpc21pc3NZZXQnIH0gOiB7fSxcbiAgICAgICAgICAgIC4uLmlzVG9vbGJhckxvY2F0aW9uVG9wID8ge30gOiB7IGZpcmVSZXBvc2l0aW9uRXZlbnRJbnN0ZWFkOiB7fSB9LFxuICAgICAgICAgICAgaW5saW5lQmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgICAgICBjb25maWcoJ3dpbmRvdy1tYW5hZ2VyLWlubGluZS1ldmVudHMnLCBbcnVuJDEoZGlzbWlzc1JlcXVlc3RlZCgpLCAoX2NvbXAsIF9zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgZW1pdChkaWFsb2dVaS5kaWFsb2csIGZvcm1DYW5jZWxFdmVudCk7XG4gICAgICAgICAgICAgICAgfSldKSxcbiAgICAgICAgICAgICAgLi4uaW5saW5lQWRkaXRpb25hbEJlaGF2aW91cnMoZWRpdG9yLCBpc1N0aWNreVRvb2xiYXIkMSwgaXNUb29sYmFyTG9jYXRpb25Ub3ApXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIGlzRXh0cmFQYXJ0OiAoX2NvbXAsIHRhcmdldCkgPT4gaXNBbGVydE9yQ29uZmlybURpYWxvZyh0YXJnZXQpXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIGlubGluZURpYWxvZy5zZXQoaW5saW5lRGlhbG9nQ29tcCk7XG4gICAgICAgICAgY29uc3QgZ2V0SW5saW5lRGlhbG9nQm91bmRzID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbSA9IGVkaXRvci5pbmxpbmUgPyBib2R5KCkgOiBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Q29udGFpbmVyKCkpO1xuICAgICAgICAgICAgY29uc3QgYm91bmRzID0gYm94JDEoZWxlbSk7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShib3VuZHMpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgSW5saW5lVmlldy5zaG93V2l0aGluQm91bmRzKGlubGluZURpYWxvZ0NvbXAsIHByZW1hZGUoZGlhbG9nVWkuZGlhbG9nKSwgeyBhbmNob3IgfSwgZ2V0SW5saW5lRGlhbG9nQm91bmRzKTtcbiAgICAgICAgICBpZiAoIWlzU3RpY2t5VG9vbGJhciQxIHx8ICFpc1Rvb2xiYXJMb2NhdGlvblRvcCkge1xuICAgICAgICAgICAgRG9ja2luZy5yZWZyZXNoKGlubGluZURpYWxvZ0NvbXApO1xuICAgICAgICAgICAgZWRpdG9yLm9uKCdSZXNpemVFZGl0b3InLCByZWZyZXNoRG9ja2luZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRpYWxvZ1VpLmluc3RhbmNlQXBpLnNldERhdGEoaW5pdGlhbERhdGEpO1xuICAgICAgICAgIEtleWluZy5mb2N1c0luKGRpYWxvZ1VpLmRpYWxvZyk7XG4gICAgICAgICAgcmV0dXJuIGRpYWxvZ1VpLmluc3RhbmNlQXBpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gRGlhbG9nTWFuYWdlci5vcGVuKGZhY3RvcnksIGNvbmZpZyQxKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBvcGVuQm90dG9tSW5saW5lRGlhbG9nID0gKGNvbmZpZyQxLCBhbmNob3IsIGNsb3NlV2luZG93LCB3aW5kb3dQYXJhbXMpID0+IHtcbiAgICAgICAgY29uc3QgZmFjdG9yeSA9IChjb250ZW50cywgaW50ZXJuYWxJbml0aWFsRGF0YSwgZGF0YVZhbGlkYXRvcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGluaXRpYWxEYXRhID0gdmFsaWRhdGVEYXRhKGludGVybmFsSW5pdGlhbERhdGEsIGRhdGFWYWxpZGF0b3IpO1xuICAgICAgICAgIGNvbnN0IGlubGluZURpYWxvZyA9IHZhbHVlJDIoKTtcbiAgICAgICAgICBjb25zdCBpc1Rvb2xiYXJMb2NhdGlvblRvcCA9IGV4dHJhcy5iYWNrc3RhZ2VzLnBvcHVwLnNoYXJlZC5oZWFkZXIuaXNQb3NpdGlvbmVkQXRUb3AoKTtcbiAgICAgICAgICBjb25zdCBkaWFsb2dJbml0ID0ge1xuICAgICAgICAgICAgZGF0YVZhbGlkYXRvcixcbiAgICAgICAgICAgIGluaXRpYWxEYXRhLFxuICAgICAgICAgICAgaW50ZXJuYWxEaWFsb2c6IGNvbnRlbnRzXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCByZWZyZXNoRG9ja2luZyA9ICgpID0+IGlubGluZURpYWxvZy5vbihkaWFsb2cgPT4ge1xuICAgICAgICAgICAgSW5saW5lVmlldy5yZXBvc2l0aW9uKGRpYWxvZyk7XG4gICAgICAgICAgICBEb2NraW5nLnJlZnJlc2goZGlhbG9nKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBkaWFsb2dVaSA9IHJlbmRlcklubGluZURpYWxvZyhkaWFsb2dJbml0LCB7XG4gICAgICAgICAgICByZWRpYWw6IERpYWxvZ01hbmFnZXIucmVkaWFsLFxuICAgICAgICAgICAgY2xvc2VXaW5kb3c6ICgpID0+IHtcbiAgICAgICAgICAgICAgaW5saW5lRGlhbG9nLm9uKElubGluZVZpZXcuaGlkZSk7XG4gICAgICAgICAgICAgIGVkaXRvci5vZmYoJ1Jlc2l6ZUVkaXRvciBTY3JvbGxXaW5kb3cgRWxlbWVudFNjcm9sbCcsIHJlZnJlc2hEb2NraW5nKTtcbiAgICAgICAgICAgICAgaW5saW5lRGlhbG9nLmNsZWFyKCk7XG4gICAgICAgICAgICAgIGNsb3NlV2luZG93KGRpYWxvZ1VpLmluc3RhbmNlQXBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBleHRyYXMuYmFja3N0YWdlcy5wb3B1cCwgd2luZG93UGFyYW1zLmFyaWFBdHRycyk7XG4gICAgICAgICAgY29uc3QgaW5saW5lRGlhbG9nQ29tcCA9IGJ1aWxkJDEoSW5saW5lVmlldy5za2V0Y2goe1xuICAgICAgICAgICAgbGF6eVNpbms6IGV4dHJhcy5iYWNrc3RhZ2VzLnBvcHVwLnNoYXJlZC5nZXRTaW5rLFxuICAgICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFtdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmlyZURpc21pc3NhbEV2ZW50SW5zdGVhZDogd2luZG93UGFyYW1zLnBlcnNpc3RlbnQgPyB7IGV2ZW50OiAnZG9Ob3REaXNtaXNzWWV0JyB9IDoge30sXG4gICAgICAgICAgICAuLi5pc1Rvb2xiYXJMb2NhdGlvblRvcCA/IHt9IDogeyBmaXJlUmVwb3NpdGlvbkV2ZW50SW5zdGVhZDoge30gfSxcbiAgICAgICAgICAgIGlubGluZUJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICAgICAgY29uZmlnKCd3aW5kb3ctbWFuYWdlci1pbmxpbmUtZXZlbnRzJywgW3J1biQxKGRpc21pc3NSZXF1ZXN0ZWQoKSwgKF9jb21wLCBfc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgIGVtaXQoZGlhbG9nVWkuZGlhbG9nLCBmb3JtQ2FuY2VsRXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pXSksXG4gICAgICAgICAgICAgIERvY2tpbmcuY29uZmlnKHtcbiAgICAgICAgICAgICAgICBjb250ZXh0dWFsOiB7XG4gICAgICAgICAgICAgICAgICBsYXp5Q29udGV4dDogKCkgPT4gT3B0aW9uYWwuc29tZShib3gkMShTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Q29udGVudEFyZWFDb250YWluZXIoKSkpKSxcbiAgICAgICAgICAgICAgICAgIGZhZGVJbkNsYXNzOiAndG94LWRpYWxvZy1kb2NrLWZhZGVpbicsXG4gICAgICAgICAgICAgICAgICBmYWRlT3V0Q2xhc3M6ICd0b3gtZGlhbG9nLWRvY2stZmFkZW91dCcsXG4gICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uQ2xhc3M6ICd0b3gtZGlhbG9nLWRvY2stdHJhbnNpdGlvbidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1vZGVzOiBbXG4gICAgICAgICAgICAgICAgICAndG9wJyxcbiAgICAgICAgICAgICAgICAgICdib3R0b20nXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBsYXp5Vmlld3BvcnQ6IGNvbXAgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0U2Nyb2xsaW5nQ29udGV4dCA9IGRldGVjdFdoZW5TcGxpdFVpTW9kZShlZGl0b3IsIGNvbXAuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gb3B0U2Nyb2xsaW5nQ29udGV4dC5tYXAoc2MgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21iaW5lZEJvdW5kcyA9IGdldEJvdW5kc0Zyb20oc2MpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kczogY29tYmluZWRCb3VuZHMsXG4gICAgICAgICAgICAgICAgICAgICAgb3B0U2Nyb2xsRW52OiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY3JvbGxUb3A6IHNjLmVsZW1lbnQuZG9tLnNjcm9sbFRvcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbEVsbVRvcDogYWJzb2x1dGUkMyhzYy5lbGVtZW50KS50b3BcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgfSkuZ2V0T3JUaHVuaygoKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBib3VuZHM6IHdpbigpLFxuICAgICAgICAgICAgICAgICAgICBvcHRTY3JvbGxFbnY6IE9wdGlvbmFsLm5vbmUoKVxuICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgaXNFeHRyYVBhcnQ6IChfY29tcCwgdGFyZ2V0KSA9PiBpc0FsZXJ0T3JDb25maXJtRGlhbG9nKHRhcmdldClcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgaW5saW5lRGlhbG9nLnNldChpbmxpbmVEaWFsb2dDb21wKTtcbiAgICAgICAgICBjb25zdCBnZXRJbmxpbmVEaWFsb2dCb3VuZHMgPSAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLmJhY2tzdGFnZXMucG9wdXAuc2hhcmVkLmdldFNpbmsoKS50b09wdGlvbmFsKCkuYmluZChzID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgb3B0U2Nyb2xsaW5nQ29udGV4dCA9IGRldGVjdFdoZW5TcGxpdFVpTW9kZShlZGl0b3IsIHMuZWxlbWVudCk7XG4gICAgICAgICAgICAgIGNvbnN0IG1hcmdpbiA9IDE1O1xuICAgICAgICAgICAgICBjb25zdCBib3VuZHMkMSA9IG9wdFNjcm9sbGluZ0NvbnRleHQubWFwKHNjID0+IGdldEJvdW5kc0Zyb20oc2MpKS5nZXRPcih3aW4oKSk7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRBcmVhQ29udGFpbmVyID0gYm94JDEoU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldENvbnRlbnRBcmVhQ29udGFpbmVyKCkpKTtcbiAgICAgICAgICAgICAgY29uc3QgY29uc3RyYWluZWRCb3VuZHMgPSBjb25zdHJhaW4oY29udGVudEFyZWFDb250YWluZXIsIGJvdW5kcyQxKTtcbiAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoYm91bmRzKGNvbnN0cmFpbmVkQm91bmRzLngsIGNvbnN0cmFpbmVkQm91bmRzLnksIGNvbnN0cmFpbmVkQm91bmRzLndpZHRoLCBjb25zdHJhaW5lZEJvdW5kcy5oZWlnaHQgLSBtYXJnaW4pKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG4gICAgICAgICAgSW5saW5lVmlldy5zaG93V2l0aGluQm91bmRzKGlubGluZURpYWxvZ0NvbXAsIHByZW1hZGUoZGlhbG9nVWkuZGlhbG9nKSwgeyBhbmNob3IgfSwgZ2V0SW5saW5lRGlhbG9nQm91bmRzKTtcbiAgICAgICAgICBEb2NraW5nLnJlZnJlc2goaW5saW5lRGlhbG9nQ29tcCk7XG4gICAgICAgICAgZWRpdG9yLm9uKCdSZXNpemVFZGl0b3IgU2Nyb2xsV2luZG93IEVsZW1lbnRTY3JvbGwnLCByZWZyZXNoRG9ja2luZyk7XG4gICAgICAgICAgZGlhbG9nVWkuaW5zdGFuY2VBcGkuc2V0RGF0YShpbml0aWFsRGF0YSk7XG4gICAgICAgICAgS2V5aW5nLmZvY3VzSW4oZGlhbG9nVWkuZGlhbG9nKTtcbiAgICAgICAgICByZXR1cm4gZGlhbG9nVWkuaW5zdGFuY2VBcGk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBEaWFsb2dNYW5hZ2VyLm9wZW4oZmFjdG9yeSwgY29uZmlnJDEpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbmZpcm0gPSAobWVzc2FnZSwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgY29uZmlybURpYWxvZy5vcGVuKG1lc3NhZ2UsIGNhbGxiYWNrKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBhbGVydCA9IChtZXNzYWdlLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBhbGVydERpYWxvZy5vcGVuKG1lc3NhZ2UsIGNhbGxiYWNrKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjbG9zZSA9IGluc3RhbmNlQXBpID0+IHtcbiAgICAgICAgaW5zdGFuY2VBcGkuY2xvc2UoKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcGVuLFxuICAgICAgICBvcGVuVXJsLFxuICAgICAgICBhbGVydCxcbiAgICAgICAgY2xvc2UsXG4gICAgICAgIGNvbmZpcm1cbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHJlZ2lzdGVyT3B0aW9ucyA9IGVkaXRvciA9PiB7XG4gICAgICByZWdpc3RlciRlKGVkaXRvcik7XG4gICAgICByZWdpc3RlciRkKGVkaXRvcik7XG4gICAgICByZWdpc3RlcihlZGl0b3IpO1xuICAgIH07XG4gICAgdmFyIFRoZW1lID0gKCkgPT4ge1xuICAgICAgZ2xvYmFsJGEuYWRkKCdzaWx2ZXInLCBlZGl0b3IgPT4ge1xuICAgICAgICByZWdpc3Rlck9wdGlvbnMoZWRpdG9yKTtcbiAgICAgICAgbGV0IHBvcHVwU2lua0JvdW5kcyA9ICgpID0+IHdpbigpO1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgZGlhbG9ncyxcbiAgICAgICAgICBwb3B1cHMsXG4gICAgICAgICAgcmVuZGVyVUk6IHJlbmRlck1vZGVVSVxuICAgICAgICB9ID0gc2V0dXAkMyhlZGl0b3IsIHsgZ2V0UG9wdXBTaW5rQm91bmRzOiAoKSA9PiBwb3B1cFNpbmtCb3VuZHMoKSB9KTtcbiAgICAgICAgY29uc3QgcmVuZGVyVUkgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVuZGVyUmVzdWx0ID0gYXdhaXQgcmVuZGVyTW9kZVVJKCk7XG4gICAgICAgICAgY29uc3Qgb3B0U2Nyb2xsaW5nQ29udGV4dCA9IGRldGVjdFdoZW5TcGxpdFVpTW9kZShlZGl0b3IsIHBvcHVwcy5nZXRNb3RoZXJzaGlwKCkuZWxlbWVudCk7XG4gICAgICAgICAgb3B0U2Nyb2xsaW5nQ29udGV4dC5lYWNoKHNjID0+IHtcbiAgICAgICAgICAgIHBvcHVwU2lua0JvdW5kcyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEJvdW5kc0Zyb20oc2MpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcmVuZGVyUmVzdWx0O1xuICAgICAgICB9O1xuICAgICAgICBBdXRvY29tcGxldGVyLnJlZ2lzdGVyKGVkaXRvciwgcG9wdXBzLmJhY2tzdGFnZS5zaGFyZWQpO1xuICAgICAgICBjb25zdCB3aW5kb3dNZ3IgPSBzZXR1cCh7XG4gICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgIGJhY2tzdGFnZXM6IHtcbiAgICAgICAgICAgIHBvcHVwOiBwb3B1cHMuYmFja3N0YWdlLFxuICAgICAgICAgICAgZGlhbG9nOiBkaWFsb2dzLmJhY2tzdGFnZVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGdldE5vdGlmaWNhdGlvbk1hbmFnZXJJbXBsID0gKCkgPT4gTm90aWZpY2F0aW9uTWFuYWdlckltcGwoZWRpdG9yLCB7IGJhY2tzdGFnZTogcG9wdXBzLmJhY2tzdGFnZSB9LCBwb3B1cHMuZ2V0TW90aGVyc2hpcCgpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZW5kZXJVSSxcbiAgICAgICAgICBnZXRXaW5kb3dNYW5hZ2VySW1wbDogY29uc3RhbnQkMSh3aW5kb3dNZ3IpLFxuICAgICAgICAgIGdldE5vdGlmaWNhdGlvbk1hbmFnZXJJbXBsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgVGhlbWUoKTtcblxufSkoKTtcbiIsIi8qKlxuICogVGlueU1DRSB2ZXJzaW9uIDYuNy4wICgyMDIzLTA4LTMwKVxuICovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIHR5cGVPZiQxID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgIGlmICh4ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgICB9XG4gICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAndW5kZWZpbmVkJztcbiAgICAgIH1cbiAgICAgIHZhciB0ID0gdHlwZW9mIHg7XG4gICAgICBpZiAodCA9PT0gJ29iamVjdCcgJiYgKEFycmF5LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHgpIHx8IHguY29uc3RydWN0b3IgJiYgeC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnQXJyYXknKSkge1xuICAgICAgICByZXR1cm4gJ2FycmF5JztcbiAgICAgIH1cbiAgICAgIGlmICh0ID09PSAnb2JqZWN0JyAmJiAoU3RyaW5nLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHgpIHx8IHguY29uc3RydWN0b3IgJiYgeC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnU3RyaW5nJykpIHtcbiAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICB2YXIgaXNFcXVhdGFibGVUeXBlID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgICd1bmRlZmluZWQnLFxuICAgICAgICAnYm9vbGVhbicsXG4gICAgICAgICdudW1iZXInLFxuICAgICAgICAnc3RyaW5nJyxcbiAgICAgICAgJ2Z1bmN0aW9uJyxcbiAgICAgICAgJ3htbCcsXG4gICAgICAgICdudWxsJ1xuICAgICAgXS5pbmRleE9mKHgpICE9PSAtMTtcbiAgICB9O1xuXG4gICAgdmFyIHNvcnQkMSA9IGZ1bmN0aW9uICh4cywgY29tcGFyZUZuKSB7XG4gICAgICB2YXIgY2xvbmUgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh4cyk7XG4gICAgICByZXR1cm4gY2xvbmUuc29ydChjb21wYXJlRm4pO1xuICAgIH07XG5cbiAgICB2YXIgY29udHJhbWFwID0gZnVuY3Rpb24gKGVxYSwgZikge1xuICAgICAgcmV0dXJuIGVxJDIoZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgICAgcmV0dXJuIGVxYS5lcShmKHgpLCBmKHkpKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdmFyIGVxJDIgPSBmdW5jdGlvbiAoZikge1xuICAgICAgcmV0dXJuIHsgZXE6IGYgfTtcbiAgICB9O1xuICAgIHZhciB0cmlwbGVFcSA9IGVxJDIoZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgIHJldHVybiB4ID09PSB5O1xuICAgIH0pO1xuICAgIHZhciBlcVN0cmluZyA9IHRyaXBsZUVxO1xuICAgIHZhciBlcUFycmF5ID0gZnVuY3Rpb24gKGVxYSkge1xuICAgICAgcmV0dXJuIGVxJDIoZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgICAgaWYgKHgubGVuZ3RoICE9PSB5Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbGVuID0geC5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBpZiAoIWVxYS5lcSh4W2ldLCB5W2ldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdmFyIGVxU29ydGVkQXJyYXkgPSBmdW5jdGlvbiAoZXFhLCBjb21wYXJlRm4pIHtcbiAgICAgIHJldHVybiBjb250cmFtYXAoZXFBcnJheShlcWEpLCBmdW5jdGlvbiAoeHMpIHtcbiAgICAgICAgcmV0dXJuIHNvcnQkMSh4cywgY29tcGFyZUZuKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdmFyIGVxUmVjb3JkID0gZnVuY3Rpb24gKGVxYSkge1xuICAgICAgcmV0dXJuIGVxJDIoZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgICAgdmFyIGt4ID0gT2JqZWN0LmtleXMoeCk7XG4gICAgICAgIHZhciBreSA9IE9iamVjdC5rZXlzKHkpO1xuICAgICAgICBpZiAoIWVxU29ydGVkQXJyYXkoZXFTdHJpbmcpLmVxKGt4LCBreSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxlbiA9IGt4Lmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIHZhciBxID0ga3hbaV07XG4gICAgICAgICAgaWYgKCFlcWEuZXEoeFtxXSwgeVtxXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHZhciBlcUFueSA9IGVxJDIoZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgIGlmICh4ID09PSB5KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIHR4ID0gdHlwZU9mJDEoeCk7XG4gICAgICB2YXIgdHkgPSB0eXBlT2YkMSh5KTtcbiAgICAgIGlmICh0eCAhPT0gdHkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGlzRXF1YXRhYmxlVHlwZSh0eCkpIHtcbiAgICAgICAgcmV0dXJuIHggPT09IHk7XG4gICAgICB9IGVsc2UgaWYgKHR4ID09PSAnYXJyYXknKSB7XG4gICAgICAgIHJldHVybiBlcUFycmF5KGVxQW55KS5lcSh4LCB5KTtcbiAgICAgIH0gZWxzZSBpZiAodHggPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBlcVJlY29yZChlcUFueSkuZXEoeCwgeSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG5cbiAgICBjb25zdCBnZXRQcm90b3R5cGVPZiQyID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuICAgIGNvbnN0IGhhc1Byb3RvID0gKHYsIGNvbnN0cnVjdG9yLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGlmIChwcmVkaWNhdGUodiwgY29uc3RydWN0b3IucHJvdG90eXBlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoKF9hID0gdi5jb25zdHJ1Y3RvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5hbWUpID09PSBjb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdHlwZU9mID0geCA9PiB7XG4gICAgICBjb25zdCB0ID0gdHlwZW9mIHg7XG4gICAgICBpZiAoeCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgICAgfSBlbHNlIGlmICh0ID09PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgICAgIHJldHVybiAnYXJyYXknO1xuICAgICAgfSBlbHNlIGlmICh0ID09PSAnb2JqZWN0JyAmJiBoYXNQcm90byh4LCBTdHJpbmcsIChvLCBwcm90bykgPT4gcHJvdG8uaXNQcm90b3R5cGVPZihvKSkpIHtcbiAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc1R5cGUkMSA9IHR5cGUgPT4gdmFsdWUgPT4gdHlwZU9mKHZhbHVlKSA9PT0gdHlwZTtcbiAgICBjb25zdCBpc1NpbXBsZVR5cGUgPSB0eXBlID0+IHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gdHlwZTtcbiAgICBjb25zdCBlcSQxID0gdCA9PiBhID0+IHQgPT09IGE7XG4gICAgY29uc3QgaXMkNCA9ICh2YWx1ZSwgY29uc3RydWN0b3IpID0+IGlzT2JqZWN0KHZhbHVlKSAmJiBoYXNQcm90byh2YWx1ZSwgY29uc3RydWN0b3IsIChvLCBwcm90bykgPT4gZ2V0UHJvdG90eXBlT2YkMihvKSA9PT0gcHJvdG8pO1xuICAgIGNvbnN0IGlzU3RyaW5nID0gaXNUeXBlJDEoJ3N0cmluZycpO1xuICAgIGNvbnN0IGlzT2JqZWN0ID0gaXNUeXBlJDEoJ29iamVjdCcpO1xuICAgIGNvbnN0IGlzUGxhaW5PYmplY3QgPSB2YWx1ZSA9PiBpcyQ0KHZhbHVlLCBPYmplY3QpO1xuICAgIGNvbnN0IGlzQXJyYXkkMSA9IGlzVHlwZSQxKCdhcnJheScpO1xuICAgIGNvbnN0IGlzTnVsbCA9IGVxJDEobnVsbCk7XG4gICAgY29uc3QgaXNCb29sZWFuID0gaXNTaW1wbGVUeXBlKCdib29sZWFuJyk7XG4gICAgY29uc3QgaXNVbmRlZmluZWQgPSBlcSQxKHVuZGVmaW5lZCk7XG4gICAgY29uc3QgaXNOdWxsYWJsZSA9IGEgPT4gYSA9PT0gbnVsbCB8fCBhID09PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgaXNOb25OdWxsYWJsZSA9IGEgPT4gIWlzTnVsbGFibGUoYSk7XG4gICAgY29uc3QgaXNGdW5jdGlvbiA9IGlzU2ltcGxlVHlwZSgnZnVuY3Rpb24nKTtcbiAgICBjb25zdCBpc051bWJlciA9IGlzU2ltcGxlVHlwZSgnbnVtYmVyJyk7XG4gICAgY29uc3QgaXNBcnJheU9mID0gKHZhbHVlLCBwcmVkKSA9PiB7XG4gICAgICBpZiAoaXNBcnJheSQxKHZhbHVlKSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdmFsdWUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICBpZiAoIXByZWQodmFsdWVbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICBjb25zdCBub29wID0gKCkgPT4ge1xuICAgIH07XG4gICAgY29uc3QgY29tcG9zZSA9IChmYSwgZmIpID0+IHtcbiAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICByZXR1cm4gZmEoZmIuYXBwbHkobnVsbCwgYXJncykpO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbXBvc2UxID0gKGZiYywgZmFiKSA9PiBhID0+IGZiYyhmYWIoYSkpO1xuICAgIGNvbnN0IGNvbnN0YW50ID0gdmFsdWUgPT4ge1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGlkZW50aXR5ID0geCA9PiB7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICAgIGNvbnN0IHRyaXBsZUVxdWFscyA9IChhLCBiKSA9PiB7XG4gICAgICByZXR1cm4gYSA9PT0gYjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGN1cnJ5KGZuLCAuLi5pbml0aWFsQXJncykge1xuICAgICAgcmV0dXJuICguLi5yZXN0QXJncykgPT4ge1xuICAgICAgICBjb25zdCBhbGwgPSBpbml0aWFsQXJncy5jb25jYXQocmVzdEFyZ3MpO1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgYWxsKTtcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IG5vdCA9IGYgPT4gdCA9PiAhZih0KTtcbiAgICBjb25zdCBkaWUgPSBtc2cgPT4ge1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgYXBwbHkkMSA9IGYgPT4ge1xuICAgICAgcmV0dXJuIGYoKTtcbiAgICB9O1xuICAgIGNvbnN0IGNhbGwgPSBmID0+IHtcbiAgICAgIGYoKTtcbiAgICB9O1xuICAgIGNvbnN0IG5ldmVyID0gY29uc3RhbnQoZmFsc2UpO1xuICAgIGNvbnN0IGFsd2F5cyA9IGNvbnN0YW50KHRydWUpO1xuXG4gICAgY2xhc3MgT3B0aW9uYWwge1xuICAgICAgY29uc3RydWN0b3IodGFnLCB2YWx1ZSkge1xuICAgICAgICB0aGlzLnRhZyA9IHRhZztcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgc3RhdGljIHNvbWUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPcHRpb25hbCh0cnVlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBzdGF0aWMgbm9uZSgpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNpbmdsZXRvbk5vbmU7XG4gICAgICB9XG4gICAgICBmb2xkKG9uTm9uZSwgb25Tb21lKSB7XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgIHJldHVybiBvblNvbWUodGhpcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG9uTm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpc1NvbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZztcbiAgICAgIH1cbiAgICAgIGlzTm9uZSgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnRhZztcbiAgICAgIH1cbiAgICAgIG1hcChtYXBwZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUobWFwcGVyKHRoaXMudmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBiaW5kKGJpbmRlcikge1xuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICByZXR1cm4gYmluZGVyKHRoaXMudmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV4aXN0cyhwcmVkaWNhdGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnICYmIHByZWRpY2F0ZSh0aGlzLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZvcmFsbChwcmVkaWNhdGUpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnRhZyB8fCBwcmVkaWNhdGUodGhpcy52YWx1ZSk7XG4gICAgICB9XG4gICAgICBmaWx0ZXIocHJlZGljYXRlKSB7XG4gICAgICAgIGlmICghdGhpcy50YWcgfHwgcHJlZGljYXRlKHRoaXMudmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZ2V0T3IocmVwbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gdGhpcy52YWx1ZSA6IHJlcGxhY2VtZW50O1xuICAgICAgfVxuICAgICAgb3IocmVwbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gdGhpcyA6IHJlcGxhY2VtZW50O1xuICAgICAgfVxuICAgICAgZ2V0T3JUaHVuayh0aHVuaykge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzLnZhbHVlIDogdGh1bmsoKTtcbiAgICAgIH1cbiAgICAgIG9yVGh1bmsodGh1bmspIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gdGhpcyA6IHRodW5rKCk7XG4gICAgICB9XG4gICAgICBnZXRPckRpZShtZXNzYWdlKSB7XG4gICAgICAgIGlmICghdGhpcy50YWcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSAhPT0gbnVsbCAmJiBtZXNzYWdlICE9PSB2b2lkIDAgPyBtZXNzYWdlIDogJ0NhbGxlZCBnZXRPckRpZSBvbiBOb25lJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0YXRpYyBmcm9tKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpc05vbk51bGxhYmxlKHZhbHVlKSA/IE9wdGlvbmFsLnNvbWUodmFsdWUpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgICAgZ2V0T3JOdWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzLnZhbHVlIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIGdldE9yVW5kZWZpbmVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgIH1cbiAgICAgIGVhY2god29ya2VyKSB7XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgIHdvcmtlcih0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdG9BcnJheSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gW3RoaXMudmFsdWVdIDogW107XG4gICAgICB9XG4gICAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gYHNvbWUoJHsgdGhpcy52YWx1ZSB9KWAgOiAnbm9uZSgpJztcbiAgICAgIH1cbiAgICB9XG4gICAgT3B0aW9uYWwuc2luZ2xldG9uTm9uZSA9IG5ldyBPcHRpb25hbChmYWxzZSk7XG5cbiAgICBjb25zdCBuYXRpdmVTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbiAgICBjb25zdCBuYXRpdmVJbmRleE9mID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2Y7XG4gICAgY29uc3QgbmF0aXZlUHVzaCA9IEFycmF5LnByb3RvdHlwZS5wdXNoO1xuICAgIGNvbnN0IHJhd0luZGV4T2YgPSAodHMsIHQpID0+IG5hdGl2ZUluZGV4T2YuY2FsbCh0cywgdCk7XG4gICAgY29uc3QgaW5kZXhPZiQxID0gKHhzLCB4KSA9PiB7XG4gICAgICBjb25zdCByID0gcmF3SW5kZXhPZih4cywgeCk7XG4gICAgICByZXR1cm4gciA9PT0gLTEgPyBPcHRpb25hbC5ub25lKCkgOiBPcHRpb25hbC5zb21lKHIpO1xuICAgIH07XG4gICAgY29uc3QgY29udGFpbnMkMiA9ICh4cywgeCkgPT4gcmF3SW5kZXhPZih4cywgeCkgPiAtMTtcbiAgICBjb25zdCBleGlzdHMgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IG1hcCQzID0gKHhzLCBmKSA9PiB7XG4gICAgICBjb25zdCBsZW4gPSB4cy5sZW5ndGg7XG4gICAgICBjb25zdCByID0gbmV3IEFycmF5KGxlbik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgcltpXSA9IGYoeCwgaSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IGVhY2gkZSA9ICh4cywgZikgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgZih4LCBpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGVhY2hyID0gKHhzLCBmKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0geHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgeCA9IHhzW2ldO1xuICAgICAgICBmKHgsIGkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcGFydGl0aW9uJDIgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGNvbnN0IHBhc3MgPSBbXTtcbiAgICAgIGNvbnN0IGZhaWwgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGNvbnN0IGFyciA9IHByZWQoeCwgaSkgPyBwYXNzIDogZmFpbDtcbiAgICAgICAgYXJyLnB1c2goeCk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXNzLFxuICAgICAgICBmYWlsXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZmlsdGVyJDUgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpKSB7XG4gICAgICAgICAgci5wdXNoKHgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IGZvbGRyID0gKHhzLCBmLCBhY2MpID0+IHtcbiAgICAgIGVhY2hyKHhzLCAoeCwgaSkgPT4ge1xuICAgICAgICBhY2MgPSBmKGFjYywgeCwgaSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfTtcbiAgICBjb25zdCBmb2xkbCA9ICh4cywgZiwgYWNjKSA9PiB7XG4gICAgICBlYWNoJGUoeHMsICh4LCBpKSA9PiB7XG4gICAgICAgIGFjYyA9IGYoYWNjLCB4LCBpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRVbnRpbCQxID0gKHhzLCBwcmVkLCB1bnRpbCkgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgaWYgKHByZWQoeCwgaSkpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh4KTtcbiAgICAgICAgfSBlbHNlIGlmICh1bnRpbCh4LCBpKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgZmluZCQyID0gKHhzLCBwcmVkKSA9PiB7XG4gICAgICByZXR1cm4gZmluZFVudGlsJDEoeHMsIHByZWQsIG5ldmVyKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRJbmRleCQyID0gKHhzLCBwcmVkKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0geHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgeCA9IHhzW2ldO1xuICAgICAgICBpZiAocHJlZCh4LCBpKSkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgZmxhdHRlbiA9IHhzID0+IHtcbiAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoIWlzQXJyYXkkMSh4c1tpXSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Fyci5mbGF0dGVuIGl0ZW0gJyArIGkgKyAnIHdhcyBub3QgYW4gYXJyYXksIGlucHV0OiAnICsgeHMpO1xuICAgICAgICB9XG4gICAgICAgIG5hdGl2ZVB1c2guYXBwbHkociwgeHNbaV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBiaW5kJDMgPSAoeHMsIGYpID0+IGZsYXR0ZW4obWFwJDMoeHMsIGYpKTtcbiAgICBjb25zdCBmb3JhbGwgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpICE9PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIGNvbnN0IHJldmVyc2UgPSB4cyA9PiB7XG4gICAgICBjb25zdCByID0gbmF0aXZlU2xpY2UuY2FsbCh4cywgMCk7XG4gICAgICByLnJldmVyc2UoKTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IChhMSwgYTIpID0+IGZpbHRlciQ1KGExLCB4ID0+ICFjb250YWlucyQyKGEyLCB4KSk7XG4gICAgY29uc3QgbWFwVG9PYmplY3QgPSAoeHMsIGYpID0+IHtcbiAgICAgIGNvbnN0IHIgPSB7fTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIHJbU3RyaW5nKHgpXSA9IGYoeCwgaSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IHNvcnQgPSAoeHMsIGNvbXBhcmF0b3IpID0+IHtcbiAgICAgIGNvbnN0IGNvcHkgPSBuYXRpdmVTbGljZS5jYWxsKHhzLCAwKTtcbiAgICAgIGNvcHkuc29ydChjb21wYXJhdG9yKTtcbiAgICAgIHJldHVybiBjb3B5O1xuICAgIH07XG4gICAgY29uc3QgZ2V0JGIgPSAoeHMsIGkpID0+IGkgPj0gMCAmJiBpIDwgeHMubGVuZ3RoID8gT3B0aW9uYWwuc29tZSh4c1tpXSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgY29uc3QgaGVhZCA9IHhzID0+IGdldCRiKHhzLCAwKTtcbiAgICBjb25zdCBsYXN0JDMgPSB4cyA9PiBnZXQkYih4cywgeHMubGVuZ3RoIC0gMSk7XG4gICAgY29uc3QgZnJvbSA9IGlzRnVuY3Rpb24oQXJyYXkuZnJvbSkgPyBBcnJheS5mcm9tIDogeCA9PiBuYXRpdmVTbGljZS5jYWxsKHgpO1xuICAgIGNvbnN0IGZpbmRNYXAgPSAoYXJyLCBmKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByID0gZihhcnJbaV0sIGkpO1xuICAgICAgICBpZiAoci5pc1NvbWUoKSkge1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgdW5pcXVlJDEgPSAoeHMsIGNvbXBhcmF0b3IpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgIGNvbnN0IGlzRHVwbGljYXRlZCA9IGlzRnVuY3Rpb24oY29tcGFyYXRvcikgPyB4ID0+IGV4aXN0cyhyLCBpID0+IGNvbXBhcmF0b3IoaSwgeCkpIDogeCA9PiBjb250YWlucyQyKHIsIHgpO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgaWYgKCFpc0R1cGxpY2F0ZWQoeCkpIHtcbiAgICAgICAgICByLnB1c2goeCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByO1xuICAgIH07XG5cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgY29uc3QgaGFzT3duUHJvcGVydHkkMiA9IE9iamVjdC5oYXNPd25Qcm9wZXJ0eTtcbiAgICBjb25zdCBlYWNoJGQgPSAob2JqLCBmKSA9PiB7XG4gICAgICBjb25zdCBwcm9wcyA9IGtleXMob2JqKTtcbiAgICAgIGZvciAobGV0IGsgPSAwLCBsZW4gPSBwcm9wcy5sZW5ndGg7IGsgPCBsZW47IGsrKykge1xuICAgICAgICBjb25zdCBpID0gcHJvcHNba107XG4gICAgICAgIGNvbnN0IHggPSBvYmpbaV07XG4gICAgICAgIGYoeCwgaSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBtYXAkMiA9IChvYmosIGYpID0+IHtcbiAgICAgIHJldHVybiB0dXBsZU1hcChvYmosICh4LCBpKSA9PiAoe1xuICAgICAgICBrOiBpLFxuICAgICAgICB2OiBmKHgsIGkpXG4gICAgICB9KSk7XG4gICAgfTtcbiAgICBjb25zdCB0dXBsZU1hcCA9IChvYmosIGYpID0+IHtcbiAgICAgIGNvbnN0IHIgPSB7fTtcbiAgICAgIGVhY2gkZChvYmosICh4LCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IHR1cGxlID0gZih4LCBpKTtcbiAgICAgICAgclt0dXBsZS5rXSA9IHR1cGxlLnY7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3Qgb2JqQWNjID0gciA9PiAoeCwgaSkgPT4ge1xuICAgICAgcltpXSA9IHg7XG4gICAgfTtcbiAgICBjb25zdCBpbnRlcm5hbEZpbHRlciA9IChvYmosIHByZWQsIG9uVHJ1ZSwgb25GYWxzZSkgPT4ge1xuICAgICAgZWFjaCRkKG9iaiwgKHgsIGkpID0+IHtcbiAgICAgICAgKHByZWQoeCwgaSkgPyBvblRydWUgOiBvbkZhbHNlKSh4LCBpKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYmlmaWx0ZXIgPSAob2JqLCBwcmVkKSA9PiB7XG4gICAgICBjb25zdCB0ID0ge307XG4gICAgICBjb25zdCBmID0ge307XG4gICAgICBpbnRlcm5hbEZpbHRlcihvYmosIHByZWQsIG9iakFjYyh0KSwgb2JqQWNjKGYpKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHQsXG4gICAgICAgIGZcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXIkNCA9IChvYmosIHByZWQpID0+IHtcbiAgICAgIGNvbnN0IHQgPSB7fTtcbiAgICAgIGludGVybmFsRmlsdGVyKG9iaiwgcHJlZCwgb2JqQWNjKHQpLCBub29wKTtcbiAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgY29uc3QgbWFwVG9BcnJheSA9IChvYmosIGYpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgIGVhY2gkZChvYmosICh2YWx1ZSwgbmFtZSkgPT4ge1xuICAgICAgICByLnB1c2goZih2YWx1ZSwgbmFtZSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IHZhbHVlcyA9IG9iaiA9PiB7XG4gICAgICByZXR1cm4gbWFwVG9BcnJheShvYmosIGlkZW50aXR5KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldCRhID0gKG9iaiwga2V5KSA9PiB7XG4gICAgICByZXR1cm4gaGFzJDIob2JqLCBrZXkpID8gT3B0aW9uYWwuZnJvbShvYmpba2V5XSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBoYXMkMiA9IChvYmosIGtleSkgPT4gaGFzT3duUHJvcGVydHkkMi5jYWxsKG9iaiwga2V5KTtcbiAgICBjb25zdCBoYXNOb25OdWxsYWJsZUtleSA9IChvYmosIGtleSkgPT4gaGFzJDIob2JqLCBrZXkpICYmIG9ialtrZXldICE9PSB1bmRlZmluZWQgJiYgb2JqW2tleV0gIT09IG51bGw7XG4gICAgY29uc3QgZXF1YWwkMSA9IChhMSwgYTIsIGVxID0gZXFBbnkpID0+IGVxUmVjb3JkKGVxKS5lcShhMSwgYTIpO1xuXG4gICAgY29uc3Qgc3RyaW5nQXJyYXkgPSBhID0+IHtcbiAgICAgIGNvbnN0IGFsbCA9IHt9O1xuICAgICAgZWFjaCRlKGEsIGtleSA9PiB7XG4gICAgICAgIGFsbFtrZXldID0ge307XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBrZXlzKGFsbCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzQXJyYXlMaWtlID0gbyA9PiBvLmxlbmd0aCAhPT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuICAgIGNvbnN0IHRvQXJyYXkkMSA9IG9iaiA9PiB7XG4gICAgICBpZiAoIWlzQXJyYXkob2JqKSkge1xuICAgICAgICBjb25zdCBhcnJheSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBhcnJheVtpXSA9IG9ialtpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZWFjaCRjID0gKG8sIGNiLCBzKSA9PiB7XG4gICAgICBpZiAoIW8pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcyA9IHMgfHwgbztcbiAgICAgIGlmIChpc0FycmF5TGlrZShvKSkge1xuICAgICAgICBmb3IgKGxldCBuID0gMCwgbCA9IG8ubGVuZ3RoOyBuIDwgbDsgbisrKSB7XG4gICAgICAgICAgaWYgKGNiLmNhbGwocywgb1tuXSwgbiwgbykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IG4gaW4gbykge1xuICAgICAgICAgIGlmIChoYXMkMihvLCBuKSkge1xuICAgICAgICAgICAgaWYgKGNiLmNhbGwocywgb1tuXSwgbiwgbykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgY29uc3QgbWFwJDEgPSAoYXJyYXksIGNhbGxiYWNrKSA9PiB7XG4gICAgICBjb25zdCBvdXQgPSBbXTtcbiAgICAgIGVhY2gkYyhhcnJheSwgKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgIG91dC5wdXNoKGNhbGxiYWNrKGl0ZW0sIGluZGV4LCBhcnJheSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH07XG4gICAgY29uc3QgZmlsdGVyJDMgPSAoYSwgZikgPT4ge1xuICAgICAgY29uc3QgbyA9IFtdO1xuICAgICAgZWFjaCRjKGEsICh2LCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoIWYgfHwgZih2LCBpbmRleCwgYSkpIHtcbiAgICAgICAgICBvLnB1c2godik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICBjb25zdCBpbmRleE9mID0gKGEsIHYpID0+IHtcbiAgICAgIGlmIChhKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gYS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBpZiAoYVtpXSA9PT0gdikge1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgICBjb25zdCByZWR1Y2UgPSAoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yLCB0aGlzQXJnKSA9PiB7XG4gICAgICBsZXQgYWNjID0gaXNVbmRlZmluZWQoYWNjdW11bGF0b3IpID8gY29sbGVjdGlvblswXSA6IGFjY3VtdWxhdG9yO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xsZWN0aW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFjYyA9IGl0ZXJhdGVlLmNhbGwodGhpc0FyZywgYWNjLCBjb2xsZWN0aW9uW2ldLCBpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kSW5kZXgkMSA9IChhcnJheSwgcHJlZGljYXRlLCB0aGlzQXJnKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAocHJlZGljYXRlLmNhbGwodGhpc0FyZywgYXJyYXlbaV0sIGksIGFycmF5KSkge1xuICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgICBjb25zdCBsYXN0JDIgPSBjb2xsZWN0aW9uID0+IGNvbGxlY3Rpb25bY29sbGVjdGlvbi5sZW5ndGggLSAxXTtcblxuICAgIGNvbnN0IGNhY2hlZCA9IGYgPT4ge1xuICAgICAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuICAgICAgbGV0IHI7XG4gICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHIgPSBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgRGV2aWNlVHlwZSA9IChvcywgYnJvd3NlciwgdXNlckFnZW50LCBtZWRpYU1hdGNoKSA9PiB7XG4gICAgICBjb25zdCBpc2lQYWQgPSBvcy5pc2lPUygpICYmIC9pcGFkL2kudGVzdCh1c2VyQWdlbnQpID09PSB0cnVlO1xuICAgICAgY29uc3QgaXNpUGhvbmUgPSBvcy5pc2lPUygpICYmICFpc2lQYWQ7XG4gICAgICBjb25zdCBpc01vYmlsZSA9IG9zLmlzaU9TKCkgfHwgb3MuaXNBbmRyb2lkKCk7XG4gICAgICBjb25zdCBpc1RvdWNoID0gaXNNb2JpbGUgfHwgbWVkaWFNYXRjaCgnKHBvaW50ZXI6Y29hcnNlKScpO1xuICAgICAgY29uc3QgaXNUYWJsZXQgPSBpc2lQYWQgfHwgIWlzaVBob25lICYmIGlzTW9iaWxlICYmIG1lZGlhTWF0Y2goJyhtaW4tZGV2aWNlLXdpZHRoOjc2OHB4KScpO1xuICAgICAgY29uc3QgaXNQaG9uZSA9IGlzaVBob25lIHx8IGlzTW9iaWxlICYmICFpc1RhYmxldDtcbiAgICAgIGNvbnN0IGlPU3dlYnZpZXcgPSBicm93c2VyLmlzU2FmYXJpKCkgJiYgb3MuaXNpT1MoKSAmJiAvc2FmYXJpL2kudGVzdCh1c2VyQWdlbnQpID09PSBmYWxzZTtcbiAgICAgIGNvbnN0IGlzRGVza3RvcCA9ICFpc1Bob25lICYmICFpc1RhYmxldCAmJiAhaU9Td2VidmlldztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzaVBhZDogY29uc3RhbnQoaXNpUGFkKSxcbiAgICAgICAgaXNpUGhvbmU6IGNvbnN0YW50KGlzaVBob25lKSxcbiAgICAgICAgaXNUYWJsZXQ6IGNvbnN0YW50KGlzVGFibGV0KSxcbiAgICAgICAgaXNQaG9uZTogY29uc3RhbnQoaXNQaG9uZSksXG4gICAgICAgIGlzVG91Y2g6IGNvbnN0YW50KGlzVG91Y2gpLFxuICAgICAgICBpc0FuZHJvaWQ6IG9zLmlzQW5kcm9pZCxcbiAgICAgICAgaXNpT1M6IG9zLmlzaU9TLFxuICAgICAgICBpc1dlYlZpZXc6IGNvbnN0YW50KGlPU3dlYnZpZXcpLFxuICAgICAgICBpc0Rlc2t0b3A6IGNvbnN0YW50KGlzRGVza3RvcClcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSAocmVnZXhlcywgcykgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWdleGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSByZWdleGVzW2ldO1xuICAgICAgICBpZiAoeC50ZXN0KHMpKSB7XG4gICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kJDEgPSAocmVnZXhlcywgYWdlbnQpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBmaXJzdE1hdGNoKHJlZ2V4ZXMsIGFnZW50KTtcbiAgICAgIGlmICghcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1ham9yOiAwLFxuICAgICAgICAgIG1pbm9yOiAwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBncm91cCA9IGkgPT4ge1xuICAgICAgICByZXR1cm4gTnVtYmVyKGFnZW50LnJlcGxhY2UociwgJyQnICsgaSkpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBudSQzKGdyb3VwKDEpLCBncm91cCgyKSk7XG4gICAgfTtcbiAgICBjb25zdCBkZXRlY3QkNSA9ICh2ZXJzaW9uUmVnZXhlcywgYWdlbnQpID0+IHtcbiAgICAgIGNvbnN0IGNsZWFuZWRBZ2VudCA9IFN0cmluZyhhZ2VudCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmICh2ZXJzaW9uUmVnZXhlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVua25vd24kMigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZpbmQkMSh2ZXJzaW9uUmVnZXhlcywgY2xlYW5lZEFnZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IHVua25vd24kMiA9ICgpID0+IHtcbiAgICAgIHJldHVybiBudSQzKDAsIDApO1xuICAgIH07XG4gICAgY29uc3QgbnUkMyA9IChtYWpvciwgbWlub3IpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1ham9yLFxuICAgICAgICBtaW5vclxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IFZlcnNpb24gPSB7XG4gICAgICBudTogbnUkMyxcbiAgICAgIGRldGVjdDogZGV0ZWN0JDUsXG4gICAgICB1bmtub3duOiB1bmtub3duJDJcbiAgICB9O1xuXG4gICAgY29uc3QgZGV0ZWN0QnJvd3NlciQxID0gKGJyb3dzZXJzLCB1c2VyQWdlbnREYXRhKSA9PiB7XG4gICAgICByZXR1cm4gZmluZE1hcCh1c2VyQWdlbnREYXRhLmJyYW5kcywgdWFCcmFuZCA9PiB7XG4gICAgICAgIGNvbnN0IGxjQnJhbmQgPSB1YUJyYW5kLmJyYW5kLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBmaW5kJDIoYnJvd3NlcnMsIGJyb3dzZXIgPT4ge1xuICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICByZXR1cm4gbGNCcmFuZCA9PT0gKChfYSA9IGJyb3dzZXIuYnJhbmQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSkubWFwKGluZm8gPT4gKHtcbiAgICAgICAgICBjdXJyZW50OiBpbmZvLm5hbWUsXG4gICAgICAgICAgdmVyc2lvbjogVmVyc2lvbi5udShwYXJzZUludCh1YUJyYW5kLnZlcnNpb24sIDEwKSwgMClcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGRldGVjdCQ0ID0gKGNhbmRpZGF0ZXMsIHVzZXJBZ2VudCkgPT4ge1xuICAgICAgY29uc3QgYWdlbnQgPSBTdHJpbmcodXNlckFnZW50KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIGZpbmQkMihjYW5kaWRhdGVzLCBjYW5kaWRhdGUgPT4ge1xuICAgICAgICByZXR1cm4gY2FuZGlkYXRlLnNlYXJjaChhZ2VudCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGRldGVjdEJyb3dzZXIgPSAoYnJvd3NlcnMsIHVzZXJBZ2VudCkgPT4ge1xuICAgICAgcmV0dXJuIGRldGVjdCQ0KGJyb3dzZXJzLCB1c2VyQWdlbnQpLm1hcChicm93c2VyID0+IHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IFZlcnNpb24uZGV0ZWN0KGJyb3dzZXIudmVyc2lvblJlZ2V4ZXMsIHVzZXJBZ2VudCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY3VycmVudDogYnJvd3Nlci5uYW1lLFxuICAgICAgICAgIHZlcnNpb25cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZGV0ZWN0T3MgPSAob3NlcywgdXNlckFnZW50KSA9PiB7XG4gICAgICByZXR1cm4gZGV0ZWN0JDQob3NlcywgdXNlckFnZW50KS5tYXAob3MgPT4ge1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gVmVyc2lvbi5kZXRlY3Qob3MudmVyc2lvblJlZ2V4ZXMsIHVzZXJBZ2VudCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY3VycmVudDogb3MubmFtZSxcbiAgICAgICAgICB2ZXJzaW9uXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVtb3ZlRnJvbVN0YXJ0ID0gKHN0ciwgbnVtQ2hhcnMpID0+IHtcbiAgICAgIHJldHVybiBzdHIuc3Vic3RyaW5nKG51bUNoYXJzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2hlY2tSYW5nZSA9IChzdHIsIHN1YnN0ciwgc3RhcnQpID0+IHN1YnN0ciA9PT0gJycgfHwgc3RyLmxlbmd0aCA+PSBzdWJzdHIubGVuZ3RoICYmIHN0ci5zdWJzdHIoc3RhcnQsIHN0YXJ0ICsgc3Vic3RyLmxlbmd0aCkgPT09IHN1YnN0cjtcbiAgICBjb25zdCByZW1vdmVMZWFkaW5nID0gKHN0ciwgcHJlZml4KSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRzV2l0aChzdHIsIHByZWZpeCkgPyByZW1vdmVGcm9tU3RhcnQoc3RyLCBwcmVmaXgubGVuZ3RoKSA6IHN0cjtcbiAgICB9O1xuICAgIGNvbnN0IGNvbnRhaW5zJDEgPSAoc3RyLCBzdWJzdHIsIHN0YXJ0ID0gMCwgZW5kKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBzdHIuaW5kZXhPZihzdWJzdHIsIHN0YXJ0KTtcbiAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgIHJldHVybiBpc1VuZGVmaW5lZChlbmQpID8gdHJ1ZSA6IGlkeCArIHN1YnN0ci5sZW5ndGggPD0gZW5kO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc3RhcnRzV2l0aCA9IChzdHIsIHByZWZpeCkgPT4ge1xuICAgICAgcmV0dXJuIGNoZWNrUmFuZ2Uoc3RyLCBwcmVmaXgsIDApO1xuICAgIH07XG4gICAgY29uc3QgZW5kc1dpdGggPSAoc3RyLCBzdWZmaXgpID0+IHtcbiAgICAgIHJldHVybiBjaGVja1JhbmdlKHN0ciwgc3VmZml4LCBzdHIubGVuZ3RoIC0gc3VmZml4Lmxlbmd0aCk7XG4gICAgfTtcbiAgICBjb25zdCBibGFuayA9IHIgPT4gcyA9PiBzLnJlcGxhY2UociwgJycpO1xuICAgIGNvbnN0IHRyaW0kMyA9IGJsYW5rKC9eXFxzK3xcXHMrJC9nKTtcbiAgICBjb25zdCBsVHJpbSA9IGJsYW5rKC9eXFxzKy9nKTtcbiAgICBjb25zdCByVHJpbSA9IGJsYW5rKC9cXHMrJC9nKTtcbiAgICBjb25zdCBpc05vdEVtcHR5ID0gcyA9PiBzLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgaXNFbXB0eSQzID0gcyA9PiAhaXNOb3RFbXB0eShzKTtcbiAgICBjb25zdCByZXBlYXQgPSAocywgY291bnQpID0+IGNvdW50IDw9IDAgPyAnJyA6IG5ldyBBcnJheShjb3VudCArIDEpLmpvaW4ocyk7XG4gICAgY29uc3QgdG9JbnQgPSAodmFsdWUsIHJhZGl4ID0gMTApID0+IHtcbiAgICAgIGNvbnN0IG51bSA9IHBhcnNlSW50KHZhbHVlLCByYWRpeCk7XG4gICAgICByZXR1cm4gaXNOYU4obnVtKSA/IE9wdGlvbmFsLm5vbmUoKSA6IE9wdGlvbmFsLnNvbWUobnVtKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgbm9ybWFsVmVyc2lvblJlZ2V4ID0gLy4qP3ZlcnNpb25cXC9cXCA/KFswLTldKylcXC4oWzAtOV0rKS4qLztcbiAgICBjb25zdCBjaGVja0NvbnRhaW5zID0gdGFyZ2V0ID0+IHtcbiAgICAgIHJldHVybiB1YXN0cmluZyA9PiB7XG4gICAgICAgIHJldHVybiBjb250YWlucyQxKHVhc3RyaW5nLCB0YXJnZXQpO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGJyb3dzZXJzID0gW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnRWRnZScsXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbLy4qP2VkZ2VcXC8gPyhbMC05XSspXFwuKFswLTldKykkL10sXG4gICAgICAgIHNlYXJjaDogdWFzdHJpbmcgPT4ge1xuICAgICAgICAgIHJldHVybiBjb250YWlucyQxKHVhc3RyaW5nLCAnZWRnZS8nKSAmJiBjb250YWlucyQxKHVhc3RyaW5nLCAnY2hyb21lJykgJiYgY29udGFpbnMkMSh1YXN0cmluZywgJ3NhZmFyaScpICYmIGNvbnRhaW5zJDEodWFzdHJpbmcsICdhcHBsZXdlYmtpdCcpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnQ2hyb21pdW0nLFxuICAgICAgICBicmFuZDogJ0Nocm9taXVtJyxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFtcbiAgICAgICAgICAvLio/Y2hyb21lXFwvKFswLTldKylcXC4oWzAtOV0rKS4qLyxcbiAgICAgICAgICBub3JtYWxWZXJzaW9uUmVnZXhcbiAgICAgICAgXSxcbiAgICAgICAgc2VhcmNoOiB1YXN0cmluZyA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRhaW5zJDEodWFzdHJpbmcsICdjaHJvbWUnKSAmJiAhY29udGFpbnMkMSh1YXN0cmluZywgJ2Nocm9tZWZyYW1lJyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdJRScsXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbXG4gICAgICAgICAgLy4qP21zaWVcXCA/KFswLTldKylcXC4oWzAtOV0rKS4qLyxcbiAgICAgICAgICAvLio/cnY6KFswLTldKylcXC4oWzAtOV0rKS4qL1xuICAgICAgICBdLFxuICAgICAgICBzZWFyY2g6IHVhc3RyaW5nID0+IHtcbiAgICAgICAgICByZXR1cm4gY29udGFpbnMkMSh1YXN0cmluZywgJ21zaWUnKSB8fCBjb250YWlucyQxKHVhc3RyaW5nLCAndHJpZGVudCcpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnT3BlcmEnLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogW1xuICAgICAgICAgIG5vcm1hbFZlcnNpb25SZWdleCxcbiAgICAgICAgICAvLio/b3BlcmFcXC8oWzAtOV0rKVxcLihbMC05XSspLiovXG4gICAgICAgIF0sXG4gICAgICAgIHNlYXJjaDogY2hlY2tDb250YWlucygnb3BlcmEnKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0ZpcmVmb3gnLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogWy8uKj9maXJlZm94XFwvXFwgPyhbMC05XSspXFwuKFswLTldKykuKi9dLFxuICAgICAgICBzZWFyY2g6IGNoZWNrQ29udGFpbnMoJ2ZpcmVmb3gnKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1NhZmFyaScsXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbXG4gICAgICAgICAgbm9ybWFsVmVyc2lvblJlZ2V4LFxuICAgICAgICAgIC8uKj9jcHUgb3MgKFswLTldKylfKFswLTldKykuKi9cbiAgICAgICAgXSxcbiAgICAgICAgc2VhcmNoOiB1YXN0cmluZyA9PiB7XG4gICAgICAgICAgcmV0dXJuIChjb250YWlucyQxKHVhc3RyaW5nLCAnc2FmYXJpJykgfHwgY29udGFpbnMkMSh1YXN0cmluZywgJ21vYmlsZS8nKSkgJiYgY29udGFpbnMkMSh1YXN0cmluZywgJ2FwcGxld2Via2l0Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdO1xuICAgIGNvbnN0IG9zZXMgPSBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdXaW5kb3dzJyxcbiAgICAgICAgc2VhcmNoOiBjaGVja0NvbnRhaW5zKCd3aW4nKSxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFsvLio/d2luZG93c1xcIG50XFwgPyhbMC05XSspXFwuKFswLTldKykuKi9dXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnaU9TJyxcbiAgICAgICAgc2VhcmNoOiB1YXN0cmluZyA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRhaW5zJDEodWFzdHJpbmcsICdpcGhvbmUnKSB8fCBjb250YWlucyQxKHVhc3RyaW5nLCAnaXBhZCcpO1xuICAgICAgICB9LFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogW1xuICAgICAgICAgIC8uKj92ZXJzaW9uXFwvXFwgPyhbMC05XSspXFwuKFswLTldKykuKi8sXG4gICAgICAgICAgLy4qY3B1IG9zIChbMC05XSspXyhbMC05XSspLiovLFxuICAgICAgICAgIC8uKmNwdSBpcGhvbmUgb3MgKFswLTldKylfKFswLTldKykuKi9cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0FuZHJvaWQnLFxuICAgICAgICBzZWFyY2g6IGNoZWNrQ29udGFpbnMoJ2FuZHJvaWQnKSxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFsvLio/YW5kcm9pZFxcID8oWzAtOV0rKVxcLihbMC05XSspLiovXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ21hY09TJyxcbiAgICAgICAgc2VhcmNoOiBjaGVja0NvbnRhaW5zKCdtYWMgb3MgeCcpLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogWy8uKj9tYWNcXCBvc1xcIHhcXCA/KFswLTldKylfKFswLTldKykuKi9dXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnTGludXgnLFxuICAgICAgICBzZWFyY2g6IGNoZWNrQ29udGFpbnMoJ2xpbnV4JyksXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1NvbGFyaXMnLFxuICAgICAgICBzZWFyY2g6IGNoZWNrQ29udGFpbnMoJ3N1bm9zJyksXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0ZyZWVCU0QnLFxuICAgICAgICBzZWFyY2g6IGNoZWNrQ29udGFpbnMoJ2ZyZWVic2QnKSxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFtdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnQ2hyb21lT1MnLFxuICAgICAgICBzZWFyY2g6IGNoZWNrQ29udGFpbnMoJ2Nyb3MnKSxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFsvLio/Y2hyb21lXFwvKFswLTldKylcXC4oWzAtOV0rKS4qL11cbiAgICAgIH1cbiAgICBdO1xuICAgIGNvbnN0IFBsYXRmb3JtSW5mbyA9IHtcbiAgICAgIGJyb3dzZXJzOiBjb25zdGFudChicm93c2VycyksXG4gICAgICBvc2VzOiBjb25zdGFudChvc2VzKVxuICAgIH07XG5cbiAgICBjb25zdCBlZGdlID0gJ0VkZ2UnO1xuICAgIGNvbnN0IGNocm9taXVtID0gJ0Nocm9taXVtJztcbiAgICBjb25zdCBpZSA9ICdJRSc7XG4gICAgY29uc3Qgb3BlcmEgPSAnT3BlcmEnO1xuICAgIGNvbnN0IGZpcmVmb3ggPSAnRmlyZWZveCc7XG4gICAgY29uc3Qgc2FmYXJpID0gJ1NhZmFyaSc7XG4gICAgY29uc3QgdW5rbm93biQxID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIG51JDIoe1xuICAgICAgICBjdXJyZW50OiB1bmRlZmluZWQsXG4gICAgICAgIHZlcnNpb246IFZlcnNpb24udW5rbm93bigpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG51JDIgPSBpbmZvID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBpbmZvLmN1cnJlbnQ7XG4gICAgICBjb25zdCB2ZXJzaW9uID0gaW5mby52ZXJzaW9uO1xuICAgICAgY29uc3QgaXNCcm93c2VyID0gbmFtZSA9PiAoKSA9PiBjdXJyZW50ID09PSBuYW1lO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgaXNFZGdlOiBpc0Jyb3dzZXIoZWRnZSksXG4gICAgICAgIGlzQ2hyb21pdW06IGlzQnJvd3NlcihjaHJvbWl1bSksXG4gICAgICAgIGlzSUU6IGlzQnJvd3NlcihpZSksXG4gICAgICAgIGlzT3BlcmE6IGlzQnJvd3NlcihvcGVyYSksXG4gICAgICAgIGlzRmlyZWZveDogaXNCcm93c2VyKGZpcmVmb3gpLFxuICAgICAgICBpc1NhZmFyaTogaXNCcm93c2VyKHNhZmFyaSlcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBCcm93c2VyID0ge1xuICAgICAgdW5rbm93bjogdW5rbm93biQxLFxuICAgICAgbnU6IG51JDIsXG4gICAgICBlZGdlOiBjb25zdGFudChlZGdlKSxcbiAgICAgIGNocm9taXVtOiBjb25zdGFudChjaHJvbWl1bSksXG4gICAgICBpZTogY29uc3RhbnQoaWUpLFxuICAgICAgb3BlcmE6IGNvbnN0YW50KG9wZXJhKSxcbiAgICAgIGZpcmVmb3g6IGNvbnN0YW50KGZpcmVmb3gpLFxuICAgICAgc2FmYXJpOiBjb25zdGFudChzYWZhcmkpXG4gICAgfTtcblxuICAgIGNvbnN0IHdpbmRvd3MgPSAnV2luZG93cyc7XG4gICAgY29uc3QgaW9zID0gJ2lPUyc7XG4gICAgY29uc3QgYW5kcm9pZCA9ICdBbmRyb2lkJztcbiAgICBjb25zdCBsaW51eCA9ICdMaW51eCc7XG4gICAgY29uc3QgbWFjb3MgPSAnbWFjT1MnO1xuICAgIGNvbnN0IHNvbGFyaXMgPSAnU29sYXJpcyc7XG4gICAgY29uc3QgZnJlZWJzZCA9ICdGcmVlQlNEJztcbiAgICBjb25zdCBjaHJvbWVvcyA9ICdDaHJvbWVPUyc7XG4gICAgY29uc3QgdW5rbm93biA9ICgpID0+IHtcbiAgICAgIHJldHVybiBudSQxKHtcbiAgICAgICAgY3VycmVudDogdW5kZWZpbmVkLFxuICAgICAgICB2ZXJzaW9uOiBWZXJzaW9uLnVua25vd24oKVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBudSQxID0gaW5mbyA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gaW5mby5jdXJyZW50O1xuICAgICAgY29uc3QgdmVyc2lvbiA9IGluZm8udmVyc2lvbjtcbiAgICAgIGNvbnN0IGlzT1MgPSBuYW1lID0+ICgpID0+IGN1cnJlbnQgPT09IG5hbWU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50LFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICBpc1dpbmRvd3M6IGlzT1Mod2luZG93cyksXG4gICAgICAgIGlzaU9TOiBpc09TKGlvcyksXG4gICAgICAgIGlzQW5kcm9pZDogaXNPUyhhbmRyb2lkKSxcbiAgICAgICAgaXNNYWNPUzogaXNPUyhtYWNvcyksXG4gICAgICAgIGlzTGludXg6IGlzT1MobGludXgpLFxuICAgICAgICBpc1NvbGFyaXM6IGlzT1Moc29sYXJpcyksXG4gICAgICAgIGlzRnJlZUJTRDogaXNPUyhmcmVlYnNkKSxcbiAgICAgICAgaXNDaHJvbWVPUzogaXNPUyhjaHJvbWVvcylcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBPcGVyYXRpbmdTeXN0ZW0gPSB7XG4gICAgICB1bmtub3duLFxuICAgICAgbnU6IG51JDEsXG4gICAgICB3aW5kb3dzOiBjb25zdGFudCh3aW5kb3dzKSxcbiAgICAgIGlvczogY29uc3RhbnQoaW9zKSxcbiAgICAgIGFuZHJvaWQ6IGNvbnN0YW50KGFuZHJvaWQpLFxuICAgICAgbGludXg6IGNvbnN0YW50KGxpbnV4KSxcbiAgICAgIG1hY29zOiBjb25zdGFudChtYWNvcyksXG4gICAgICBzb2xhcmlzOiBjb25zdGFudChzb2xhcmlzKSxcbiAgICAgIGZyZWVic2Q6IGNvbnN0YW50KGZyZWVic2QpLFxuICAgICAgY2hyb21lb3M6IGNvbnN0YW50KGNocm9tZW9zKVxuICAgIH07XG5cbiAgICBjb25zdCBkZXRlY3QkMyA9ICh1c2VyQWdlbnQsIHVzZXJBZ2VudERhdGFPcHQsIG1lZGlhTWF0Y2gpID0+IHtcbiAgICAgIGNvbnN0IGJyb3dzZXJzID0gUGxhdGZvcm1JbmZvLmJyb3dzZXJzKCk7XG4gICAgICBjb25zdCBvc2VzID0gUGxhdGZvcm1JbmZvLm9zZXMoKTtcbiAgICAgIGNvbnN0IGJyb3dzZXIgPSB1c2VyQWdlbnREYXRhT3B0LmJpbmQodXNlckFnZW50RGF0YSA9PiBkZXRlY3RCcm93c2VyJDEoYnJvd3NlcnMsIHVzZXJBZ2VudERhdGEpKS5vclRodW5rKCgpID0+IGRldGVjdEJyb3dzZXIoYnJvd3NlcnMsIHVzZXJBZ2VudCkpLmZvbGQoQnJvd3Nlci51bmtub3duLCBCcm93c2VyLm51KTtcbiAgICAgIGNvbnN0IG9zID0gZGV0ZWN0T3Mob3NlcywgdXNlckFnZW50KS5mb2xkKE9wZXJhdGluZ1N5c3RlbS51bmtub3duLCBPcGVyYXRpbmdTeXN0ZW0ubnUpO1xuICAgICAgY29uc3QgZGV2aWNlVHlwZSA9IERldmljZVR5cGUob3MsIGJyb3dzZXIsIHVzZXJBZ2VudCwgbWVkaWFNYXRjaCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBicm93c2VyLFxuICAgICAgICBvcyxcbiAgICAgICAgZGV2aWNlVHlwZVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IFBsYXRmb3JtRGV0ZWN0aW9uID0geyBkZXRlY3Q6IGRldGVjdCQzIH07XG5cbiAgICBjb25zdCBtZWRpYU1hdGNoID0gcXVlcnkgPT4gd2luZG93Lm1hdGNoTWVkaWEocXVlcnkpLm1hdGNoZXM7XG4gICAgbGV0IHBsYXRmb3JtJDQgPSBjYWNoZWQoKCkgPT4gUGxhdGZvcm1EZXRlY3Rpb24uZGV0ZWN0KG5hdmlnYXRvci51c2VyQWdlbnQsIE9wdGlvbmFsLmZyb20obmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpLCBtZWRpYU1hdGNoKSk7XG4gICAgY29uc3QgZGV0ZWN0JDIgPSAoKSA9PiBwbGF0Zm9ybSQ0KCk7XG5cbiAgICBjb25zdCB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIGNvbnN0IHBsYXRmb3JtJDMgPSBkZXRlY3QkMigpO1xuICAgIGNvbnN0IGJyb3dzZXIkMyA9IHBsYXRmb3JtJDMuYnJvd3NlcjtcbiAgICBjb25zdCBvcyQxID0gcGxhdGZvcm0kMy5vcztcbiAgICBjb25zdCBkZXZpY2VUeXBlID0gcGxhdGZvcm0kMy5kZXZpY2VUeXBlO1xuICAgIGNvbnN0IHdpbmRvd3NQaG9uZSA9IHVzZXJBZ2VudC5pbmRleE9mKCdXaW5kb3dzIFBob25lJykgIT09IC0xO1xuICAgIGNvbnN0IEVudiA9IHtcbiAgICAgIHRyYW5zcGFyZW50U3JjOiAnZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBQUFBQVAvLy95SDVCQUVBQUFBQUxBQUFBQUFCQUFFQUFBSUJSQUE3JyxcbiAgICAgIGRvY3VtZW50TW9kZTogYnJvd3NlciQzLmlzSUUoKSA/IGRvY3VtZW50LmRvY3VtZW50TW9kZSB8fCA3IDogMTAsXG4gICAgICBjYWNoZVN1ZmZpeDogbnVsbCxcbiAgICAgIGNvbnRhaW5lcjogbnVsbCxcbiAgICAgIGNhbkhhdmVDU1A6ICFicm93c2VyJDMuaXNJRSgpLFxuICAgICAgd2luZG93c1Bob25lLFxuICAgICAgYnJvd3Nlcjoge1xuICAgICAgICBjdXJyZW50OiBicm93c2VyJDMuY3VycmVudCxcbiAgICAgICAgdmVyc2lvbjogYnJvd3NlciQzLnZlcnNpb24sXG4gICAgICAgIGlzQ2hyb21pdW06IGJyb3dzZXIkMy5pc0Nocm9taXVtLFxuICAgICAgICBpc0VkZ2U6IGJyb3dzZXIkMy5pc0VkZ2UsXG4gICAgICAgIGlzRmlyZWZveDogYnJvd3NlciQzLmlzRmlyZWZveCxcbiAgICAgICAgaXNJRTogYnJvd3NlciQzLmlzSUUsXG4gICAgICAgIGlzT3BlcmE6IGJyb3dzZXIkMy5pc09wZXJhLFxuICAgICAgICBpc1NhZmFyaTogYnJvd3NlciQzLmlzU2FmYXJpXG4gICAgICB9LFxuICAgICAgb3M6IHtcbiAgICAgICAgY3VycmVudDogb3MkMS5jdXJyZW50LFxuICAgICAgICB2ZXJzaW9uOiBvcyQxLnZlcnNpb24sXG4gICAgICAgIGlzQW5kcm9pZDogb3MkMS5pc0FuZHJvaWQsXG4gICAgICAgIGlzQ2hyb21lT1M6IG9zJDEuaXNDaHJvbWVPUyxcbiAgICAgICAgaXNGcmVlQlNEOiBvcyQxLmlzRnJlZUJTRCxcbiAgICAgICAgaXNpT1M6IG9zJDEuaXNpT1MsXG4gICAgICAgIGlzTGludXg6IG9zJDEuaXNMaW51eCxcbiAgICAgICAgaXNNYWNPUzogb3MkMS5pc01hY09TLFxuICAgICAgICBpc1NvbGFyaXM6IG9zJDEuaXNTb2xhcmlzLFxuICAgICAgICBpc1dpbmRvd3M6IG9zJDEuaXNXaW5kb3dzXG4gICAgICB9LFxuICAgICAgZGV2aWNlVHlwZToge1xuICAgICAgICBpc0Rlc2t0b3A6IGRldmljZVR5cGUuaXNEZXNrdG9wLFxuICAgICAgICBpc2lQYWQ6IGRldmljZVR5cGUuaXNpUGFkLFxuICAgICAgICBpc2lQaG9uZTogZGV2aWNlVHlwZS5pc2lQaG9uZSxcbiAgICAgICAgaXNQaG9uZTogZGV2aWNlVHlwZS5pc1Bob25lLFxuICAgICAgICBpc1RhYmxldDogZGV2aWNlVHlwZS5pc1RhYmxldCxcbiAgICAgICAgaXNUb3VjaDogZGV2aWNlVHlwZS5pc1RvdWNoLFxuICAgICAgICBpc1dlYlZpZXc6IGRldmljZVR5cGUuaXNXZWJWaWV3XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHdoaXRlU3BhY2VSZWdFeHAkMSA9IC9eXFxzKnxcXHMqJC9nO1xuICAgIGNvbnN0IHRyaW0kMiA9IHN0ciA9PiB7XG4gICAgICByZXR1cm4gaXNOdWxsYWJsZShzdHIpID8gJycgOiAoJycgKyBzdHIpLnJlcGxhY2Uod2hpdGVTcGFjZVJlZ0V4cCQxLCAnJyk7XG4gICAgfTtcbiAgICBjb25zdCBpcyQzID0gKG9iaiwgdHlwZSkgPT4ge1xuICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgIHJldHVybiBvYmogIT09IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlID09PSAnYXJyYXknICYmIGlzQXJyYXkob2JqKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSB0eXBlO1xuICAgIH07XG4gICAgY29uc3QgbWFrZU1hcCQ0ID0gKGl0ZW1zLCBkZWxpbSwgbWFwID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHJlc29sdmVkSXRlbXMgPSBpc1N0cmluZyhpdGVtcykgPyBpdGVtcy5zcGxpdChkZWxpbSB8fCAnLCcpIDogaXRlbXMgfHwgW107XG4gICAgICBsZXQgaSA9IHJlc29sdmVkSXRlbXMubGVuZ3RoO1xuICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICBtYXBbcmVzb2x2ZWRJdGVtc1tpXV0gPSB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXA7XG4gICAgfTtcbiAgICBjb25zdCBoYXNPd25Qcm9wZXJ0eSQxID0gaGFzJDI7XG4gICAgY29uc3QgZXh0ZW5kJDMgPSAob2JqLCAuLi5leHRzKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZXh0ID0gZXh0c1tpXTtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIGV4dCkge1xuICAgICAgICAgIGlmIChoYXMkMihleHQsIG5hbWUpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGV4dFtuYW1lXTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIG9ialtuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICAgIGNvbnN0IHdhbGskNCA9IGZ1bmN0aW9uIChvLCBmLCBuLCBzKSB7XG4gICAgICBzID0gcyB8fCB0aGlzO1xuICAgICAgaWYgKG8pIHtcbiAgICAgICAgaWYgKG4pIHtcbiAgICAgICAgICBvID0gb1tuXTtcbiAgICAgICAgfVxuICAgICAgICBlYWNoJGMobywgKG8sIGkpID0+IHtcbiAgICAgICAgICBpZiAoZi5jYWxsKHMsIG8sIGksIG4pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3YWxrJDQobywgZiwgbiwgcyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVzb2x2ZSQzID0gKG4sIG8gPSB3aW5kb3cpID0+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBuLnNwbGl0KCcuJyk7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHBhdGgubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIG8gPSBvW3BhdGhbaV1dO1xuICAgICAgICBpZiAoIW8pIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICBjb25zdCBleHBsb2RlJDMgPSAocywgZCkgPT4ge1xuICAgICAgaWYgKGlzQXJyYXkkMShzKSkge1xuICAgICAgICByZXR1cm4gcztcbiAgICAgIH0gZWxzZSBpZiAocyA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG1hcCQxKHMuc3BsaXQoZCB8fCAnLCcpLCB0cmltJDIpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgX2FkZENhY2hlU3VmZml4ID0gdXJsID0+IHtcbiAgICAgIGNvbnN0IGNhY2hlU3VmZml4ID0gRW52LmNhY2hlU3VmZml4O1xuICAgICAgaWYgKGNhY2hlU3VmZml4KSB7XG4gICAgICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgY2FjaGVTdWZmaXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH07XG4gICAgY29uc3QgVG9vbHMgPSB7XG4gICAgICB0cmltOiB0cmltJDIsXG4gICAgICBpc0FycmF5OiBpc0FycmF5LFxuICAgICAgaXM6IGlzJDMsXG4gICAgICB0b0FycmF5OiB0b0FycmF5JDEsXG4gICAgICBtYWtlTWFwOiBtYWtlTWFwJDQsXG4gICAgICBlYWNoOiBlYWNoJGMsXG4gICAgICBtYXA6IG1hcCQxLFxuICAgICAgZ3JlcDogZmlsdGVyJDMsXG4gICAgICBpbkFycmF5OiBpbmRleE9mLFxuICAgICAgaGFzT3duOiBoYXNPd25Qcm9wZXJ0eSQxLFxuICAgICAgZXh0ZW5kOiBleHRlbmQkMyxcbiAgICAgIHdhbGs6IHdhbGskNCxcbiAgICAgIHJlc29sdmU6IHJlc29sdmUkMyxcbiAgICAgIGV4cGxvZGU6IGV4cGxvZGUkMyxcbiAgICAgIF9hZGRDYWNoZVN1ZmZpeFxuICAgIH07XG5cbiAgICBjb25zdCBpcyQyID0gKGxocywgcmhzLCBjb21wYXJhdG9yID0gdHJpcGxlRXF1YWxzKSA9PiBsaHMuZXhpc3RzKGxlZnQgPT4gY29tcGFyYXRvcihsZWZ0LCByaHMpKTtcbiAgICBjb25zdCBlcXVhbHMgPSAobGhzLCByaHMsIGNvbXBhcmF0b3IgPSB0cmlwbGVFcXVhbHMpID0+IGxpZnQyKGxocywgcmhzLCBjb21wYXJhdG9yKS5nZXRPcihsaHMuaXNOb25lKCkgJiYgcmhzLmlzTm9uZSgpKTtcbiAgICBjb25zdCBjYXQgPSBhcnIgPT4ge1xuICAgICAgY29uc3QgciA9IFtdO1xuICAgICAgY29uc3QgcHVzaCA9IHggPT4ge1xuICAgICAgICByLnB1c2goeCk7XG4gICAgICB9O1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXJyW2ldLmVhY2gocHVzaCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IGxpZnQyID0gKG9hLCBvYiwgZikgPT4gb2EuaXNTb21lKCkgJiYgb2IuaXNTb21lKCkgPyBPcHRpb25hbC5zb21lKGYob2EuZ2V0T3JEaWUoKSwgb2IuZ2V0T3JEaWUoKSkpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIGNvbnN0IGxpZnQzID0gKG9hLCBvYiwgb2MsIGYpID0+IG9hLmlzU29tZSgpICYmIG9iLmlzU29tZSgpICYmIG9jLmlzU29tZSgpID8gT3B0aW9uYWwuc29tZShmKG9hLmdldE9yRGllKCksIG9iLmdldE9yRGllKCksIG9jLmdldE9yRGllKCkpKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICBjb25zdCBzb21lSWYgPSAoYiwgYSkgPT4gYiA/IE9wdGlvbmFsLnNvbWUoYSkgOiBPcHRpb25hbC5ub25lKCk7XG5cbiAgICBjb25zdCBHbG9iYWwgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpczsnKSgpO1xuXG4gICAgY29uc3QgcGF0aCA9IChwYXJ0cywgc2NvcGUpID0+IHtcbiAgICAgIGxldCBvID0gc2NvcGUgIT09IHVuZGVmaW5lZCAmJiBzY29wZSAhPT0gbnVsbCA/IHNjb3BlIDogR2xvYmFsO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGggJiYgbyAhPT0gdW5kZWZpbmVkICYmIG8gIT09IG51bGw7ICsraSkge1xuICAgICAgICBvID0gb1twYXJ0c1tpXV07XG4gICAgICB9XG4gICAgICByZXR1cm4gbztcbiAgICB9O1xuICAgIGNvbnN0IHJlc29sdmUkMiA9IChwLCBzY29wZSkgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSBwLnNwbGl0KCcuJyk7XG4gICAgICByZXR1cm4gcGF0aChwYXJ0cywgc2NvcGUpO1xuICAgIH07XG5cbiAgICBjb25zdCB1bnNhZmUgPSAobmFtZSwgc2NvcGUpID0+IHtcbiAgICAgIHJldHVybiByZXNvbHZlJDIobmFtZSwgc2NvcGUpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0T3JEaWUgPSAobmFtZSwgc2NvcGUpID0+IHtcbiAgICAgIGNvbnN0IGFjdHVhbCA9IHVuc2FmZShuYW1lLCBzY29wZSk7XG4gICAgICBpZiAoYWN0dWFsID09PSB1bmRlZmluZWQgfHwgYWN0dWFsID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihuYW1lICsgJyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgYnJvd3NlcicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjdHVhbDtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0UHJvdG90eXBlT2YkMSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgICBjb25zdCBzYW5kSFRNTEVsZW1lbnQgPSBzY29wZSA9PiB7XG4gICAgICByZXR1cm4gZ2V0T3JEaWUoJ0hUTUxFbGVtZW50Jywgc2NvcGUpO1xuICAgIH07XG4gICAgY29uc3QgaXNQcm90b3R5cGVPZiA9IHggPT4ge1xuICAgICAgY29uc3Qgc2NvcGUgPSByZXNvbHZlJDIoJ293bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcnLCB4KTtcbiAgICAgIHJldHVybiBpc09iamVjdCh4KSAmJiAoc2FuZEhUTUxFbGVtZW50KHNjb3BlKS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZih4KSB8fCAvXkhUTUxcXHcqRWxlbWVudCQvLnRlc3QoZ2V0UHJvdG90eXBlT2YkMSh4KS5jb25zdHJ1Y3Rvci5uYW1lKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IENPTU1FTlQgPSA4O1xuICAgIGNvbnN0IERPQ1VNRU5UID0gOTtcbiAgICBjb25zdCBET0NVTUVOVF9GUkFHTUVOVCA9IDExO1xuICAgIGNvbnN0IEVMRU1FTlQgPSAxO1xuICAgIGNvbnN0IFRFWFQgPSAzO1xuXG4gICAgY29uc3QgbmFtZSA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgciA9IGVsZW1lbnQuZG9tLm5vZGVOYW1lO1xuICAgICAgcmV0dXJuIHIudG9Mb3dlckNhc2UoKTtcbiAgICB9O1xuICAgIGNvbnN0IHR5cGUkMSA9IGVsZW1lbnQgPT4gZWxlbWVudC5kb20ubm9kZVR5cGU7XG4gICAgY29uc3QgaXNUeXBlID0gdCA9PiBlbGVtZW50ID0+IHR5cGUkMShlbGVtZW50KSA9PT0gdDtcbiAgICBjb25zdCBpc0NvbW1lbnQkMSA9IGVsZW1lbnQgPT4gdHlwZSQxKGVsZW1lbnQpID09PSBDT01NRU5UIHx8IG5hbWUoZWxlbWVudCkgPT09ICcjY29tbWVudCc7XG4gICAgY29uc3QgaXNIVE1MRWxlbWVudCA9IGVsZW1lbnQgPT4gaXNFbGVtZW50JDcoZWxlbWVudCkgJiYgaXNQcm90b3R5cGVPZihlbGVtZW50LmRvbSk7XG4gICAgY29uc3QgaXNFbGVtZW50JDcgPSBpc1R5cGUoRUxFTUVOVCk7XG4gICAgY29uc3QgaXNUZXh0JGIgPSBpc1R5cGUoVEVYVCk7XG4gICAgY29uc3QgaXNEb2N1bWVudCQyID0gaXNUeXBlKERPQ1VNRU5UKTtcbiAgICBjb25zdCBpc0RvY3VtZW50RnJhZ21lbnQkMSA9IGlzVHlwZShET0NVTUVOVF9GUkFHTUVOVCk7XG4gICAgY29uc3QgaXNUYWcgPSB0YWcgPT4gZSA9PiBpc0VsZW1lbnQkNyhlKSAmJiBuYW1lKGUpID09PSB0YWc7XG5cbiAgICBjb25zdCByYXdTZXQgPSAoZG9tLCBrZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoaXNTdHJpbmcodmFsdWUpIHx8IGlzQm9vbGVhbih2YWx1ZSkgfHwgaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSArICcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgY2FsbCB0byBBdHRyaWJ1dGUuc2V0LiBLZXkgJywga2V5LCAnOjogVmFsdWUgJywgdmFsdWUsICc6OiBFbGVtZW50ICcsIGRvbSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQXR0cmlidXRlIHZhbHVlIHdhcyBub3Qgc2ltcGxlJyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXQkMyA9IChlbGVtZW50LCBrZXksIHZhbHVlKSA9PiB7XG4gICAgICByYXdTZXQoZWxlbWVudC5kb20sIGtleSwgdmFsdWUpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0QWxsJDEgPSAoZWxlbWVudCwgYXR0cnMpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgZWFjaCRkKGF0dHJzLCAodiwgaykgPT4ge1xuICAgICAgICByYXdTZXQoZG9tLCBrLCB2KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0JDkgPSAoZWxlbWVudCwga2V5KSA9PiB7XG4gICAgICBjb25zdCB2ID0gZWxlbWVudC5kb20uZ2V0QXR0cmlidXRlKGtleSk7XG4gICAgICByZXR1cm4gdiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHY7XG4gICAgfTtcbiAgICBjb25zdCBnZXRPcHQgPSAoZWxlbWVudCwga2V5KSA9PiBPcHRpb25hbC5mcm9tKGdldCQ5KGVsZW1lbnQsIGtleSkpO1xuICAgIGNvbnN0IGhhcyQxID0gKGVsZW1lbnQsIGtleSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICByZXR1cm4gZG9tICYmIGRvbS5oYXNBdHRyaWJ1dGUgPyBkb20uaGFzQXR0cmlidXRlKGtleSkgOiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSRhID0gKGVsZW1lbnQsIGtleSkgPT4ge1xuICAgICAgZWxlbWVudC5kb20ucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNOb25lID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBhdHRycyA9IGVsZW1lbnQuZG9tLmF0dHJpYnV0ZXM7XG4gICAgICByZXR1cm4gYXR0cnMgPT09IHVuZGVmaW5lZCB8fCBhdHRycyA9PT0gbnVsbCB8fCBhdHRycy5sZW5ndGggPT09IDA7XG4gICAgfTtcbiAgICBjb25zdCBjbG9uZSQ0ID0gZWxlbWVudCA9PiBmb2xkbChlbGVtZW50LmRvbS5hdHRyaWJ1dGVzLCAoYWNjLCBhdHRyKSA9PiB7XG4gICAgICBhY2NbYXR0ci5uYW1lXSA9IGF0dHIudmFsdWU7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICAgIGNvbnN0IHJlYWQkNCA9IChlbGVtZW50LCBhdHRyKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGdldCQ5KGVsZW1lbnQsIGF0dHIpO1xuICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnID8gW10gOiB2YWx1ZS5zcGxpdCgnICcpO1xuICAgIH07XG4gICAgY29uc3QgYWRkJDQgPSAoZWxlbWVudCwgYXR0ciwgaWQpID0+IHtcbiAgICAgIGNvbnN0IG9sZCA9IHJlYWQkNChlbGVtZW50LCBhdHRyKTtcbiAgICAgIGNvbnN0IG51ID0gb2xkLmNvbmNhdChbaWRdKTtcbiAgICAgIHNldCQzKGVsZW1lbnQsIGF0dHIsIG51LmpvaW4oJyAnKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSQ5ID0gKGVsZW1lbnQsIGF0dHIsIGlkKSA9PiB7XG4gICAgICBjb25zdCBudSA9IGZpbHRlciQ1KHJlYWQkNChlbGVtZW50LCBhdHRyKSwgdiA9PiB2ICE9PSBpZCk7XG4gICAgICBpZiAobnUubGVuZ3RoID4gMCkge1xuICAgICAgICBzZXQkMyhlbGVtZW50LCBhdHRyLCBudS5qb2luKCcgJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVtb3ZlJGEoZWxlbWVudCwgYXR0cik7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIGNvbnN0IHN1cHBvcnRzID0gZWxlbWVudCA9PiBlbGVtZW50LmRvbS5jbGFzc0xpc3QgIT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBnZXQkOCA9IGVsZW1lbnQgPT4gcmVhZCQ0KGVsZW1lbnQsICdjbGFzcycpO1xuICAgIGNvbnN0IGFkZCQzID0gKGVsZW1lbnQsIGNsYXp6KSA9PiBhZGQkNChlbGVtZW50LCAnY2xhc3MnLCBjbGF6eik7XG4gICAgY29uc3QgcmVtb3ZlJDggPSAoZWxlbWVudCwgY2xhenopID0+IHJlbW92ZSQ5KGVsZW1lbnQsICdjbGFzcycsIGNsYXp6KTtcbiAgICBjb25zdCB0b2dnbGUkMiA9IChlbGVtZW50LCBjbGF6eikgPT4ge1xuICAgICAgaWYgKGNvbnRhaW5zJDIoZ2V0JDgoZWxlbWVudCksIGNsYXp6KSkge1xuICAgICAgICByZXR1cm4gcmVtb3ZlJDgoZWxlbWVudCwgY2xhenopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFkZCQzKGVsZW1lbnQsIGNsYXp6KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgYWRkJDIgPSAoZWxlbWVudCwgY2xhenopID0+IHtcbiAgICAgIGlmIChzdXBwb3J0cyhlbGVtZW50KSkge1xuICAgICAgICBlbGVtZW50LmRvbS5jbGFzc0xpc3QuYWRkKGNsYXp6KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkZCQzKGVsZW1lbnQsIGNsYXp6KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNsZWFuQ2xhc3MgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHN1cHBvcnRzKGVsZW1lbnQpID8gZWxlbWVudC5kb20uY2xhc3NMaXN0IDogZ2V0JDgoZWxlbWVudCk7XG4gICAgICBpZiAoY2xhc3NMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZW1vdmUkYShlbGVtZW50LCAnY2xhc3MnKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSQ3ID0gKGVsZW1lbnQsIGNsYXp6KSA9PiB7XG4gICAgICBpZiAoc3VwcG9ydHMoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgY2xhc3NMaXN0ID0gZWxlbWVudC5kb20uY2xhc3NMaXN0O1xuICAgICAgICBjbGFzc0xpc3QucmVtb3ZlKGNsYXp6KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZSQ4KGVsZW1lbnQsIGNsYXp6KTtcbiAgICAgIH1cbiAgICAgIGNsZWFuQ2xhc3MoZWxlbWVudCk7XG4gICAgfTtcbiAgICBjb25zdCB0b2dnbGUkMSA9IChlbGVtZW50LCBjbGF6eikgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gc3VwcG9ydHMoZWxlbWVudCkgPyBlbGVtZW50LmRvbS5jbGFzc0xpc3QudG9nZ2xlKGNsYXp6KSA6IHRvZ2dsZSQyKGVsZW1lbnQsIGNsYXp6KTtcbiAgICAgIGNsZWFuQ2xhc3MoZWxlbWVudCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgY29uc3QgaGFzID0gKGVsZW1lbnQsIGNsYXp6KSA9PiBzdXBwb3J0cyhlbGVtZW50KSAmJiBlbGVtZW50LmRvbS5jbGFzc0xpc3QuY29udGFpbnMoY2xhenopO1xuXG4gICAgY29uc3QgZnJvbUh0bWwkMSA9IChodG1sLCBzY29wZSkgPT4ge1xuICAgICAgY29uc3QgZG9jID0gc2NvcGUgfHwgZG9jdW1lbnQ7XG4gICAgICBjb25zdCBkaXYgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBkaXYuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgIGlmICghZGl2Lmhhc0NoaWxkTm9kZXMoKSB8fCBkaXYuY2hpbGROb2Rlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnSFRNTCBkb2VzIG5vdCBoYXZlIGEgc2luZ2xlIHJvb3Qgbm9kZSc7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSwgaHRtbCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmcm9tRG9tJDIoZGl2LmNoaWxkTm9kZXNbMF0pO1xuICAgIH07XG4gICAgY29uc3QgZnJvbVRhZyA9ICh0YWcsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBzY29wZSB8fCBkb2N1bWVudDtcbiAgICAgIGNvbnN0IG5vZGUgPSBkb2MuY3JlYXRlRWxlbWVudCh0YWcpO1xuICAgICAgcmV0dXJuIGZyb21Eb20kMihub2RlKTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21UZXh0ID0gKHRleHQsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBzY29wZSB8fCBkb2N1bWVudDtcbiAgICAgIGNvbnN0IG5vZGUgPSBkb2MuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG4gICAgICByZXR1cm4gZnJvbURvbSQyKG5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgZnJvbURvbSQyID0gbm9kZSA9PiB7XG4gICAgICBpZiAobm9kZSA9PT0gbnVsbCB8fCBub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb2RlIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZG9tOiBub2RlIH07XG4gICAgfTtcbiAgICBjb25zdCBmcm9tUG9pbnQkMiA9IChkb2NFbG0sIHgsIHkpID0+IE9wdGlvbmFsLmZyb20oZG9jRWxtLmRvbS5lbGVtZW50RnJvbVBvaW50KHgsIHkpKS5tYXAoZnJvbURvbSQyKTtcbiAgICBjb25zdCBTdWdhckVsZW1lbnQgPSB7XG4gICAgICBmcm9tSHRtbDogZnJvbUh0bWwkMSxcbiAgICAgIGZyb21UYWcsXG4gICAgICBmcm9tVGV4dCxcbiAgICAgIGZyb21Eb206IGZyb21Eb20kMixcbiAgICAgIGZyb21Qb2ludDogZnJvbVBvaW50JDJcbiAgICB9O1xuXG4gICAgY29uc3QgdG9BcnJheSA9ICh0YXJnZXQsIGYpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgIGNvbnN0IHJlY3Vyc2UgPSBlID0+IHtcbiAgICAgICAgci5wdXNoKGUpO1xuICAgICAgICByZXR1cm4gZihlKTtcbiAgICAgIH07XG4gICAgICBsZXQgY3VyID0gZih0YXJnZXQpO1xuICAgICAgZG8ge1xuICAgICAgICBjdXIgPSBjdXIuYmluZChyZWN1cnNlKTtcbiAgICAgIH0gd2hpbGUgKGN1ci5pc1NvbWUoKSk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuXG4gICAgY29uc3QgaXMkMSA9IChlbGVtZW50LCBzZWxlY3RvcikgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBpZiAoZG9tLm5vZGVUeXBlICE9PSBFTEVNRU5UKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVsZW0gPSBkb207XG4gICAgICAgIGlmIChlbGVtLm1hdGNoZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBlbGVtLm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW0ubXNNYXRjaGVzU2VsZWN0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBlbGVtLm1zTWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZW0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtLm1vek1hdGNoZXNTZWxlY3RvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZW0ubW96TWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jyb3dzZXIgbGFja3MgbmF0aXZlIHNlbGVjdG9ycycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBieXBhc3NTZWxlY3RvciA9IGRvbSA9PiBkb20ubm9kZVR5cGUgIT09IEVMRU1FTlQgJiYgZG9tLm5vZGVUeXBlICE9PSBET0NVTUVOVCAmJiBkb20ubm9kZVR5cGUgIT09IERPQ1VNRU5UX0ZSQUdNRU5UIHx8IGRvbS5jaGlsZEVsZW1lbnRDb3VudCA9PT0gMDtcbiAgICBjb25zdCBhbGwgPSAoc2VsZWN0b3IsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBiYXNlID0gc2NvcGUgPT09IHVuZGVmaW5lZCA/IGRvY3VtZW50IDogc2NvcGUuZG9tO1xuICAgICAgcmV0dXJuIGJ5cGFzc1NlbGVjdG9yKGJhc2UpID8gW10gOiBtYXAkMyhiYXNlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpLCBTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgfTtcbiAgICBjb25zdCBvbmUgPSAoc2VsZWN0b3IsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBiYXNlID0gc2NvcGUgPT09IHVuZGVmaW5lZCA/IGRvY3VtZW50IDogc2NvcGUuZG9tO1xuICAgICAgcmV0dXJuIGJ5cGFzc1NlbGVjdG9yKGJhc2UpID8gT3B0aW9uYWwubm9uZSgpIDogT3B0aW9uYWwuZnJvbShiYXNlLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpKS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIH07XG5cbiAgICBjb25zdCBlcSA9IChlMSwgZTIpID0+IGUxLmRvbSA9PT0gZTIuZG9tO1xuICAgIGNvbnN0IGNvbnRhaW5zID0gKGUxLCBlMikgPT4ge1xuICAgICAgY29uc3QgZDEgPSBlMS5kb207XG4gICAgICBjb25zdCBkMiA9IGUyLmRvbTtcbiAgICAgIHJldHVybiBkMSA9PT0gZDIgPyBmYWxzZSA6IGQxLmNvbnRhaW5zKGQyKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb3duZXIkMSA9IGVsZW1lbnQgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20oZWxlbWVudC5kb20ub3duZXJEb2N1bWVudCk7XG4gICAgY29uc3QgZG9jdW1lbnRPck93bmVyID0gZG9zID0+IGlzRG9jdW1lbnQkMihkb3MpID8gZG9zIDogb3duZXIkMShkb3MpO1xuICAgIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGVsZW1lbnQgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20oZG9jdW1lbnRPck93bmVyKGVsZW1lbnQpLmRvbS5kb2N1bWVudEVsZW1lbnQpO1xuICAgIGNvbnN0IGRlZmF1bHRWaWV3ID0gZWxlbWVudCA9PiBTdWdhckVsZW1lbnQuZnJvbURvbShkb2N1bWVudE9yT3duZXIoZWxlbWVudCkuZG9tLmRlZmF1bHRWaWV3KTtcbiAgICBjb25zdCBwYXJlbnQgPSBlbGVtZW50ID0+IE9wdGlvbmFsLmZyb20oZWxlbWVudC5kb20ucGFyZW50Tm9kZSkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gZWxlbWVudCA9PiBPcHRpb25hbC5mcm9tKGVsZW1lbnQuZG9tLnBhcmVudEVsZW1lbnQpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgY29uc3QgcGFyZW50cyQxID0gKGVsZW1lbnQsIGlzUm9vdCkgPT4ge1xuICAgICAgY29uc3Qgc3RvcCA9IGlzRnVuY3Rpb24oaXNSb290KSA/IGlzUm9vdCA6IG5ldmVyO1xuICAgICAgbGV0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgY29uc3QgcmV0ID0gW107XG4gICAgICB3aGlsZSAoZG9tLnBhcmVudE5vZGUgIT09IG51bGwgJiYgZG9tLnBhcmVudE5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCByYXdQYXJlbnQgPSBkb20ucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgcCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJhd1BhcmVudCk7XG4gICAgICAgIHJldC5wdXNoKHApO1xuICAgICAgICBpZiAoc3RvcChwKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbSA9IHJhd1BhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9O1xuICAgIGNvbnN0IHNpYmxpbmdzID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJTZWxmID0gZWxlbWVudHMgPT4gZmlsdGVyJDUoZWxlbWVudHMsIHggPT4gIWVxKGVsZW1lbnQsIHgpKTtcbiAgICAgIHJldHVybiBwYXJlbnQoZWxlbWVudCkubWFwKGNoaWxkcmVuJDEpLm1hcChmaWx0ZXJTZWxmKS5nZXRPcihbXSk7XG4gICAgfTtcbiAgICBjb25zdCBwcmV2U2libGluZyA9IGVsZW1lbnQgPT4gT3B0aW9uYWwuZnJvbShlbGVtZW50LmRvbS5wcmV2aW91c1NpYmxpbmcpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgY29uc3QgbmV4dFNpYmxpbmcgPSBlbGVtZW50ID0+IE9wdGlvbmFsLmZyb20oZWxlbWVudC5kb20ubmV4dFNpYmxpbmcpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgY29uc3QgcHJldlNpYmxpbmdzID0gZWxlbWVudCA9PiByZXZlcnNlKHRvQXJyYXkoZWxlbWVudCwgcHJldlNpYmxpbmcpKTtcbiAgICBjb25zdCBuZXh0U2libGluZ3MgPSBlbGVtZW50ID0+IHRvQXJyYXkoZWxlbWVudCwgbmV4dFNpYmxpbmcpO1xuICAgIGNvbnN0IGNoaWxkcmVuJDEgPSBlbGVtZW50ID0+IG1hcCQzKGVsZW1lbnQuZG9tLmNoaWxkTm9kZXMsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBjaGlsZCQxID0gKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBjcyA9IGVsZW1lbnQuZG9tLmNoaWxkTm9kZXM7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShjc1tpbmRleF0pLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJzdENoaWxkID0gZWxlbWVudCA9PiBjaGlsZCQxKGVsZW1lbnQsIDApO1xuICAgIGNvbnN0IGxhc3RDaGlsZCA9IGVsZW1lbnQgPT4gY2hpbGQkMShlbGVtZW50LCBlbGVtZW50LmRvbS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEpO1xuICAgIGNvbnN0IGNoaWxkTm9kZXNDb3VudCA9IGVsZW1lbnQgPT4gZWxlbWVudC5kb20uY2hpbGROb2Rlcy5sZW5ndGg7XG4gICAgY29uc3QgaGFzQ2hpbGROb2RlcyA9IGVsZW1lbnQgPT4gZWxlbWVudC5kb20uaGFzQ2hpbGROb2RlcygpO1xuXG4gICAgY29uc3QgZ2V0SGVhZCA9IGRvYyA9PiB7XG4gICAgICBjb25zdCBiID0gZG9jLmRvbS5oZWFkO1xuICAgICAgaWYgKGIgPT09IG51bGwgfHwgYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSGVhZCBpcyBub3QgYXZhaWxhYmxlIHlldCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFN1Z2FyRWxlbWVudC5mcm9tRG9tKGIpO1xuICAgIH07XG5cbiAgICBjb25zdCBpc1NoYWRvd1Jvb3QgPSBkb3MgPT4gaXNEb2N1bWVudEZyYWdtZW50JDEoZG9zKSAmJiBpc05vbk51bGxhYmxlKGRvcy5kb20uaG9zdCk7XG4gICAgY29uc3Qgc3VwcG9ydGVkID0gaXNGdW5jdGlvbihFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hTaGFkb3cpICYmIGlzRnVuY3Rpb24oTm9kZS5wcm90b3R5cGUuZ2V0Um9vdE5vZGUpO1xuICAgIGNvbnN0IGlzU3VwcG9ydGVkJDEgPSBjb25zdGFudChzdXBwb3J0ZWQpO1xuICAgIGNvbnN0IGdldFJvb3ROb2RlID0gc3VwcG9ydGVkID8gZSA9PiBTdWdhckVsZW1lbnQuZnJvbURvbShlLmRvbS5nZXRSb290Tm9kZSgpKSA6IGRvY3VtZW50T3JPd25lcjtcbiAgICBjb25zdCBnZXRTdHlsZUNvbnRhaW5lciA9IGRvcyA9PiBpc1NoYWRvd1Jvb3QoZG9zKSA/IGRvcyA6IGdldEhlYWQoZG9jdW1lbnRPck93bmVyKGRvcykpO1xuICAgIGNvbnN0IGdldENvbnRlbnRDb250YWluZXIgPSBkb3MgPT4gaXNTaGFkb3dSb290KGRvcykgPyBkb3MgOiBTdWdhckVsZW1lbnQuZnJvbURvbShkb2N1bWVudE9yT3duZXIoZG9zKS5kb20uYm9keSk7XG4gICAgY29uc3QgZ2V0U2hhZG93Um9vdCA9IGUgPT4ge1xuICAgICAgY29uc3QgciA9IGdldFJvb3ROb2RlKGUpO1xuICAgICAgcmV0dXJuIGlzU2hhZG93Um9vdChyKSA/IE9wdGlvbmFsLnNvbWUocikgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRTaGFkb3dIb3N0ID0gZSA9PiBTdWdhckVsZW1lbnQuZnJvbURvbShlLmRvbS5ob3N0KTtcbiAgICBjb25zdCBnZXRPcmlnaW5hbEV2ZW50VGFyZ2V0ID0gZXZlbnQgPT4ge1xuICAgICAgaWYgKGlzU3VwcG9ydGVkJDEoKSAmJiBpc05vbk51bGxhYmxlKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgY29uc3QgZWwgPSBTdWdhckVsZW1lbnQuZnJvbURvbShldmVudC50YXJnZXQpO1xuICAgICAgICBpZiAoaXNFbGVtZW50JDcoZWwpICYmIGlzT3BlblNoYWRvd0hvc3QoZWwpKSB7XG4gICAgICAgICAgaWYgKGV2ZW50LmNvbXBvc2VkICYmIGV2ZW50LmNvbXBvc2VkUGF0aCkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9zZWRQYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG4gICAgICAgICAgICBpZiAoY29tcG9zZWRQYXRoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoZWFkKGNvbXBvc2VkUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShldmVudC50YXJnZXQpO1xuICAgIH07XG4gICAgY29uc3QgaXNPcGVuU2hhZG93SG9zdCA9IGVsZW1lbnQgPT4gaXNOb25OdWxsYWJsZShlbGVtZW50LmRvbS5zaGFkb3dSb290KTtcblxuICAgIGNvbnN0IGluQm9keSA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgZG9tID0gaXNUZXh0JGIoZWxlbWVudCkgPyBlbGVtZW50LmRvbS5wYXJlbnROb2RlIDogZWxlbWVudC5kb207XG4gICAgICBpZiAoZG9tID09PSB1bmRlZmluZWQgfHwgZG9tID09PSBudWxsIHx8IGRvbS5vd25lckRvY3VtZW50ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvYyA9IGRvbS5vd25lckRvY3VtZW50O1xuICAgICAgcmV0dXJuIGdldFNoYWRvd1Jvb3QoU3VnYXJFbGVtZW50LmZyb21Eb20oZG9tKSkuZm9sZCgoKSA9PiBkb2MuYm9keS5jb250YWlucyhkb20pLCBjb21wb3NlMShpbkJvZHksIGdldFNoYWRvd0hvc3QpKTtcbiAgICB9O1xuXG4gICAgdmFyIENsb3Nlc3RPckFuY2VzdG9yID0gKGlzLCBhbmNlc3Rvciwgc2NvcGUsIGEsIGlzUm9vdCkgPT4ge1xuICAgICAgaWYgKGlzKHNjb3BlLCBhKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShzY29wZSk7XG4gICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24oaXNSb290KSAmJiBpc1Jvb3Qoc2NvcGUpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYW5jZXN0b3Ioc2NvcGUsIGEsIGlzUm9vdCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGFuY2VzdG9yJDQgPSAoc2NvcGUsIHByZWRpY2F0ZSwgaXNSb290KSA9PiB7XG4gICAgICBsZXQgZWxlbWVudCA9IHNjb3BlLmRvbTtcbiAgICAgIGNvbnN0IHN0b3AgPSBpc0Z1bmN0aW9uKGlzUm9vdCkgPyBpc1Jvb3QgOiBuZXZlcjtcbiAgICAgIHdoaWxlIChlbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgZWwgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlbGVtZW50KTtcbiAgICAgICAgaWYgKHByZWRpY2F0ZShlbCkpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShlbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RvcChlbCkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGNsb3Nlc3QkNCA9IChzY29wZSwgcHJlZGljYXRlLCBpc1Jvb3QpID0+IHtcbiAgICAgIGNvbnN0IGlzID0gKHMsIHRlc3QpID0+IHRlc3Qocyk7XG4gICAgICByZXR1cm4gQ2xvc2VzdE9yQW5jZXN0b3IoaXMsIGFuY2VzdG9yJDQsIHNjb3BlLCBwcmVkaWNhdGUsIGlzUm9vdCk7XG4gICAgfTtcbiAgICBjb25zdCBzaWJsaW5nJDEgPSAoc2NvcGUsIHByZWRpY2F0ZSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHNjb3BlLmRvbTtcbiAgICAgIGlmICghZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2hpbGQoU3VnYXJFbGVtZW50LmZyb21Eb20oZWxlbWVudC5wYXJlbnROb2RlKSwgeCA9PiAhZXEoc2NvcGUsIHgpICYmIHByZWRpY2F0ZSh4KSk7XG4gICAgfTtcbiAgICBjb25zdCBjaGlsZCA9IChzY29wZSwgcHJlZGljYXRlKSA9PiB7XG4gICAgICBjb25zdCBwcmVkID0gbm9kZSA9PiBwcmVkaWNhdGUoU3VnYXJFbGVtZW50LmZyb21Eb20obm9kZSkpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmluZCQyKHNjb3BlLmRvbS5jaGlsZE5vZGVzLCBwcmVkKTtcbiAgICAgIHJldHVybiByZXN1bHQubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICB9O1xuICAgIGNvbnN0IGRlc2NlbmRhbnQkMSA9IChzY29wZSwgcHJlZGljYXRlKSA9PiB7XG4gICAgICBjb25zdCBkZXNjZW5kID0gbm9kZSA9PiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGQgPSBTdWdhckVsZW1lbnQuZnJvbURvbShub2RlLmNoaWxkTm9kZXNbaV0pO1xuICAgICAgICAgIGlmIChwcmVkaWNhdGUoY2hpbGQpKSB7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShjaGlsZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlcyA9IGRlc2NlbmQobm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgICAgICAgICBpZiAocmVzLmlzU29tZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBkZXNjZW5kKHNjb3BlLmRvbSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFuY2VzdG9yJDMgPSAoc2NvcGUsIHNlbGVjdG9yLCBpc1Jvb3QpID0+IGFuY2VzdG9yJDQoc2NvcGUsIGUgPT4gaXMkMShlLCBzZWxlY3RvciksIGlzUm9vdCk7XG4gICAgY29uc3QgZGVzY2VuZGFudCA9IChzY29wZSwgc2VsZWN0b3IpID0+IG9uZShzZWxlY3Rvciwgc2NvcGUpO1xuICAgIGNvbnN0IGNsb3Nlc3QkMyA9IChzY29wZSwgc2VsZWN0b3IsIGlzUm9vdCkgPT4ge1xuICAgICAgY29uc3QgaXMgPSAoZWxlbWVudCwgc2VsZWN0b3IpID0+IGlzJDEoZWxlbWVudCwgc2VsZWN0b3IpO1xuICAgICAgcmV0dXJuIENsb3Nlc3RPckFuY2VzdG9yKGlzLCBhbmNlc3RvciQzLCBzY29wZSwgc2VsZWN0b3IsIGlzUm9vdCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNsb3Nlc3QkMiA9IHRhcmdldCA9PiBjbG9zZXN0JDModGFyZ2V0LCAnW2NvbnRlbnRlZGl0YWJsZV0nKTtcbiAgICBjb25zdCBpc0VkaXRhYmxlJDMgPSAoZWxlbWVudCwgYXNzdW1lRWRpdGFibGUgPSBmYWxzZSkgPT4ge1xuICAgICAgaWYgKGluQm9keShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5kb20uaXNDb250ZW50RWRpdGFibGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY2xvc2VzdCQyKGVsZW1lbnQpLmZvbGQoY29uc3RhbnQoYXNzdW1lRWRpdGFibGUpLCBlZGl0YWJsZSA9PiBnZXRSYXckMShlZGl0YWJsZSkgPT09ICd0cnVlJyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRSYXckMSA9IGVsZW1lbnQgPT4gZWxlbWVudC5kb20uY29udGVudEVkaXRhYmxlO1xuXG4gICAgY29uc3QgaXNTdXBwb3J0ZWQgPSBkb20gPT4gZG9tLnN0eWxlICE9PSB1bmRlZmluZWQgJiYgaXNGdW5jdGlvbihkb20uc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSk7XG5cbiAgICBjb25zdCBpbnRlcm5hbFNldCA9IChkb20sIHByb3BlcnR5LCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBjYWxsIHRvIENTUy5zZXQuIFByb3BlcnR5ICcsIHByb3BlcnR5LCAnOjogVmFsdWUgJywgdmFsdWUsICc6OiBFbGVtZW50ICcsIGRvbSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ1NTIHZhbHVlIG11c3QgYmUgYSBzdHJpbmc6ICcgKyB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNTdXBwb3J0ZWQoZG9tKSkge1xuICAgICAgICBkb20uc3R5bGUuc2V0UHJvcGVydHkocHJvcGVydHksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGludGVybmFsUmVtb3ZlID0gKGRvbSwgcHJvcGVydHkpID0+IHtcbiAgICAgIGlmIChpc1N1cHBvcnRlZChkb20pKSB7XG4gICAgICAgIGRvbS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXQkMiA9IChlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgaW50ZXJuYWxTZXQoZG9tLCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0QWxsID0gKGVsZW1lbnQsIGNzcykgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBlYWNoJGQoY3NzLCAodiwgaykgPT4ge1xuICAgICAgICBpbnRlcm5hbFNldChkb20sIGssIHYpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXQkNyA9IChlbGVtZW50LCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBjb25zdCBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb20pO1xuICAgICAgY29uc3QgciA9IHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KTtcbiAgICAgIHJldHVybiByID09PSAnJyAmJiAhaW5Cb2R5KGVsZW1lbnQpID8gZ2V0VW5zYWZlUHJvcGVydHkoZG9tLCBwcm9wZXJ0eSkgOiByO1xuICAgIH07XG4gICAgY29uc3QgZ2V0VW5zYWZlUHJvcGVydHkgPSAoZG9tLCBwcm9wZXJ0eSkgPT4gaXNTdXBwb3J0ZWQoZG9tKSA/IGRvbS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KSA6ICcnO1xuICAgIGNvbnN0IGdldFJhdyA9IChlbGVtZW50LCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBjb25zdCByYXcgPSBnZXRVbnNhZmVQcm9wZXJ0eShkb20sIHByb3BlcnR5KTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKHJhdykuZmlsdGVyKHIgPT4gci5sZW5ndGggPiAwKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEFsbFJhdyA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgY3NzID0ge307XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGlmIChpc1N1cHBvcnRlZChkb20pKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9tLnN0eWxlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgcnVsZU5hbWUgPSBkb20uc3R5bGUuaXRlbShpKTtcbiAgICAgICAgICBjc3NbcnVsZU5hbWVdID0gZG9tLnN0eWxlW3J1bGVOYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNzcztcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSQ2ID0gKGVsZW1lbnQsIHByb3BlcnR5KSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGludGVybmFsUmVtb3ZlKGRvbSwgcHJvcGVydHkpO1xuICAgICAgaWYgKGlzJDIoZ2V0T3B0KGVsZW1lbnQsICdzdHlsZScpLm1hcCh0cmltJDMpLCAnJykpIHtcbiAgICAgICAgcmVtb3ZlJGEoZWxlbWVudCwgJ3N0eWxlJyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZWZsb3cgPSBlID0+IGUuZG9tLm9mZnNldFdpZHRoO1xuXG4gICAgY29uc3QgYmVmb3JlJDMgPSAobWFya2VyLCBlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQkMSA9IHBhcmVudChtYXJrZXIpO1xuICAgICAgcGFyZW50JDEuZWFjaCh2ID0+IHtcbiAgICAgICAgdi5kb20uaW5zZXJ0QmVmb3JlKGVsZW1lbnQuZG9tLCBtYXJrZXIuZG9tKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYWZ0ZXIkNCA9IChtYXJrZXIsIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHNpYmxpbmcgPSBuZXh0U2libGluZyhtYXJrZXIpO1xuICAgICAgc2libGluZy5mb2xkKCgpID0+IHtcbiAgICAgICAgY29uc3QgcGFyZW50JDEgPSBwYXJlbnQobWFya2VyKTtcbiAgICAgICAgcGFyZW50JDEuZWFjaCh2ID0+IHtcbiAgICAgICAgICBhcHBlbmQkMSh2LCBlbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9LCB2ID0+IHtcbiAgICAgICAgYmVmb3JlJDModiwgZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHByZXBlbmQgPSAocGFyZW50LCBlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBmaXJzdENoaWxkJDEgPSBmaXJzdENoaWxkKHBhcmVudCk7XG4gICAgICBmaXJzdENoaWxkJDEuZm9sZCgoKSA9PiB7XG4gICAgICAgIGFwcGVuZCQxKHBhcmVudCwgZWxlbWVudCk7XG4gICAgICB9LCB2ID0+IHtcbiAgICAgICAgcGFyZW50LmRvbS5pbnNlcnRCZWZvcmUoZWxlbWVudC5kb20sIHYuZG9tKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYXBwZW5kJDEgPSAocGFyZW50LCBlbGVtZW50KSA9PiB7XG4gICAgICBwYXJlbnQuZG9tLmFwcGVuZENoaWxkKGVsZW1lbnQuZG9tKTtcbiAgICB9O1xuICAgIGNvbnN0IHdyYXAkMiA9IChlbGVtZW50LCB3cmFwcGVyKSA9PiB7XG4gICAgICBiZWZvcmUkMyhlbGVtZW50LCB3cmFwcGVyKTtcbiAgICAgIGFwcGVuZCQxKHdyYXBwZXIsIGVsZW1lbnQpO1xuICAgIH07XG5cbiAgICBjb25zdCBhZnRlciQzID0gKG1hcmtlciwgZWxlbWVudHMpID0+IHtcbiAgICAgIGVhY2gkZShlbGVtZW50cywgKHgsIGkpID0+IHtcbiAgICAgICAgY29uc3QgZSA9IGkgPT09IDAgPyBtYXJrZXIgOiBlbGVtZW50c1tpIC0gMV07XG4gICAgICAgIGFmdGVyJDQoZSwgeCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGVuZCA9IChwYXJlbnQsIGVsZW1lbnRzKSA9PiB7XG4gICAgICBlYWNoJGUoZWxlbWVudHMsIHggPT4ge1xuICAgICAgICBhcHBlbmQkMShwYXJlbnQsIHgpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGVtcHR5ID0gZWxlbWVudCA9PiB7XG4gICAgICBlbGVtZW50LmRvbS50ZXh0Q29udGVudCA9ICcnO1xuICAgICAgZWFjaCRlKGNoaWxkcmVuJDEoZWxlbWVudCksIHJvZ3VlID0+IHtcbiAgICAgICAgcmVtb3ZlJDUocm9ndWUpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmUkNSA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBpZiAoZG9tLnBhcmVudE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgZG9tLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG9tKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHVud3JhcCA9IHdyYXBwZXIgPT4ge1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBjaGlsZHJlbiQxKHdyYXBwZXIpO1xuICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYWZ0ZXIkMyh3cmFwcGVyLCBjaGlsZHJlbik7XG4gICAgICB9XG4gICAgICByZW1vdmUkNSh3cmFwcGVyKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZnJvbUh0bWwgPSAoaHRtbCwgc2NvcGUpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IHNjb3BlIHx8IGRvY3VtZW50O1xuICAgICAgY29uc3QgZGl2ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZGl2LmlubmVySFRNTCA9IGh0bWw7XG4gICAgICByZXR1cm4gY2hpbGRyZW4kMShTdWdhckVsZW1lbnQuZnJvbURvbShkaXYpKTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21Eb20kMSA9IG5vZGVzID0+IG1hcCQzKG5vZGVzLCBTdWdhckVsZW1lbnQuZnJvbURvbSk7XG5cbiAgICBjb25zdCBnZXQkNiA9IGVsZW1lbnQgPT4gZWxlbWVudC5kb20uaW5uZXJIVE1MO1xuICAgIGNvbnN0IHNldCQxID0gKGVsZW1lbnQsIGNvbnRlbnQpID0+IHtcbiAgICAgIGNvbnN0IG93bmVyID0gb3duZXIkMShlbGVtZW50KTtcbiAgICAgIGNvbnN0IGRvY0RvbSA9IG93bmVyLmRvbTtcbiAgICAgIGNvbnN0IGZyYWdtZW50ID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZG9jRG9tLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG4gICAgICBjb25zdCBjb250ZW50RWxlbWVudHMgPSBmcm9tSHRtbChjb250ZW50LCBkb2NEb20pO1xuICAgICAgYXBwZW5kKGZyYWdtZW50LCBjb250ZW50RWxlbWVudHMpO1xuICAgICAgZW1wdHkoZWxlbWVudCk7XG4gICAgICBhcHBlbmQkMShlbGVtZW50LCBmcmFnbWVudCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRPdXRlciA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gU3VnYXJFbGVtZW50LmZyb21UYWcoJ2RpdicpO1xuICAgICAgY29uc3QgY2xvbmUgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlbGVtZW50LmRvbS5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgYXBwZW5kJDEoY29udGFpbmVyLCBjbG9uZSk7XG4gICAgICByZXR1cm4gZ2V0JDYoY29udGFpbmVyKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbWtFdmVudCA9ICh0YXJnZXQsIHgsIHksIHN0b3AsIHByZXZlbnQsIGtpbGwsIHJhdykgPT4gKHtcbiAgICAgIHRhcmdldCxcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgc3RvcCxcbiAgICAgIHByZXZlbnQsXG4gICAgICBraWxsLFxuICAgICAgcmF3XG4gICAgfSk7XG4gICAgY29uc3QgZnJvbVJhd0V2ZW50ID0gcmF3RXZlbnQgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZ2V0T3JpZ2luYWxFdmVudFRhcmdldChyYXdFdmVudCkuZ2V0T3IocmF3RXZlbnQudGFyZ2V0KSk7XG4gICAgICBjb25zdCBzdG9wID0gKCkgPT4gcmF3RXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBjb25zdCBwcmV2ZW50ID0gKCkgPT4gcmF3RXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IGtpbGwgPSBjb21wb3NlKHByZXZlbnQsIHN0b3ApO1xuICAgICAgcmV0dXJuIG1rRXZlbnQodGFyZ2V0LCByYXdFdmVudC5jbGllbnRYLCByYXdFdmVudC5jbGllbnRZLCBzdG9wLCBwcmV2ZW50LCBraWxsLCByYXdFdmVudCk7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGUkMSA9IChmaWx0ZXIsIGhhbmRsZXIpID0+IHJhd0V2ZW50ID0+IHtcbiAgICAgIGlmIChmaWx0ZXIocmF3RXZlbnQpKSB7XG4gICAgICAgIGhhbmRsZXIoZnJvbVJhd0V2ZW50KHJhd0V2ZW50KSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBiaW5kZXIgPSAoZWxlbWVudCwgZXZlbnQsIGZpbHRlciwgaGFuZGxlciwgdXNlQ2FwdHVyZSkgPT4ge1xuICAgICAgY29uc3Qgd3JhcHBlZCA9IGhhbmRsZSQxKGZpbHRlciwgaGFuZGxlcik7XG4gICAgICBlbGVtZW50LmRvbS5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCB3cmFwcGVkLCB1c2VDYXB0dXJlKTtcbiAgICAgIHJldHVybiB7IHVuYmluZDogY3VycnkodW5iaW5kLCBlbGVtZW50LCBldmVudCwgd3JhcHBlZCwgdXNlQ2FwdHVyZSkgfTtcbiAgICB9O1xuICAgIGNvbnN0IGJpbmQkMiA9IChlbGVtZW50LCBldmVudCwgZmlsdGVyLCBoYW5kbGVyKSA9PiBiaW5kZXIoZWxlbWVudCwgZXZlbnQsIGZpbHRlciwgaGFuZGxlciwgZmFsc2UpO1xuICAgIGNvbnN0IHVuYmluZCA9IChlbGVtZW50LCBldmVudCwgaGFuZGxlciwgdXNlQ2FwdHVyZSkgPT4ge1xuICAgICAgZWxlbWVudC5kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHIgPSAobGVmdCwgdG9wKSA9PiB7XG4gICAgICBjb25zdCB0cmFuc2xhdGUgPSAoeCwgeSkgPT4gcihsZWZ0ICsgeCwgdG9wICsgeSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0LFxuICAgICAgICB0b3AsXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IFN1Z2FyUG9zaXRpb24gPSByO1xuXG4gICAgY29uc3QgYm94UG9zaXRpb24gPSBkb20gPT4ge1xuICAgICAgY29uc3QgYm94ID0gZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgcmV0dXJuIFN1Z2FyUG9zaXRpb24oYm94LmxlZnQsIGJveC50b3ApO1xuICAgIH07XG4gICAgY29uc3QgZmlyc3REZWZpbmVkT3JaZXJvID0gKGEsIGIpID0+IHtcbiAgICAgIGlmIChhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYiAhPT0gdW5kZWZpbmVkID8gYiA6IDA7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhYnNvbHV0ZSA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgZG9jID0gZWxlbWVudC5kb20ub3duZXJEb2N1bWVudDtcbiAgICAgIGNvbnN0IGJvZHkgPSBkb2MuYm9keTtcbiAgICAgIGNvbnN0IHdpbiA9IGRvYy5kZWZhdWx0VmlldztcbiAgICAgIGNvbnN0IGh0bWwgPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgaWYgKGJvZHkgPT09IGVsZW1lbnQuZG9tKSB7XG4gICAgICAgIHJldHVybiBTdWdhclBvc2l0aW9uKGJvZHkub2Zmc2V0TGVmdCwgYm9keS5vZmZzZXRUb3ApO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gZmlyc3REZWZpbmVkT3JaZXJvKHdpbiA9PT0gbnVsbCB8fCB3aW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpbi5wYWdlWU9mZnNldCwgaHRtbC5zY3JvbGxUb3ApO1xuICAgICAgY29uc3Qgc2Nyb2xsTGVmdCA9IGZpcnN0RGVmaW5lZE9yWmVybyh3aW4gPT09IG51bGwgfHwgd2luID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3aW4ucGFnZVhPZmZzZXQsIGh0bWwuc2Nyb2xsTGVmdCk7XG4gICAgICBjb25zdCBjbGllbnRUb3AgPSBmaXJzdERlZmluZWRPclplcm8oaHRtbC5jbGllbnRUb3AsIGJvZHkuY2xpZW50VG9wKTtcbiAgICAgIGNvbnN0IGNsaWVudExlZnQgPSBmaXJzdERlZmluZWRPclplcm8oaHRtbC5jbGllbnRMZWZ0LCBib2R5LmNsaWVudExlZnQpO1xuICAgICAgcmV0dXJuIHZpZXdwb3J0KGVsZW1lbnQpLnRyYW5zbGF0ZShzY3JvbGxMZWZ0IC0gY2xpZW50TGVmdCwgc2Nyb2xsVG9wIC0gY2xpZW50VG9wKTtcbiAgICB9O1xuICAgIGNvbnN0IHZpZXdwb3J0ID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGNvbnN0IGRvYyA9IGRvbS5vd25lckRvY3VtZW50O1xuICAgICAgY29uc3QgYm9keSA9IGRvYy5ib2R5O1xuICAgICAgaWYgKGJvZHkgPT09IGRvbSkge1xuICAgICAgICByZXR1cm4gU3VnYXJQb3NpdGlvbihib2R5Lm9mZnNldExlZnQsIGJvZHkub2Zmc2V0VG9wKTtcbiAgICAgIH1cbiAgICAgIGlmICghaW5Cb2R5KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBTdWdhclBvc2l0aW9uKDAsIDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJveFBvc2l0aW9uKGRvbSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldCQ1ID0gX0RPQyA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBfRE9DICE9PSB1bmRlZmluZWQgPyBfRE9DLmRvbSA6IGRvY3VtZW50O1xuICAgICAgY29uc3QgeCA9IGRvYy5ib2R5LnNjcm9sbExlZnQgfHwgZG9jLmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgY29uc3QgeSA9IGRvYy5ib2R5LnNjcm9sbFRvcCB8fCBkb2MuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcbiAgICAgIHJldHVybiBTdWdhclBvc2l0aW9uKHgsIHkpO1xuICAgIH07XG4gICAgY29uc3QgdG8gPSAoeCwgeSwgX0RPQykgPT4ge1xuICAgICAgY29uc3QgZG9jID0gX0RPQyAhPT0gdW5kZWZpbmVkID8gX0RPQy5kb20gOiBkb2N1bWVudDtcbiAgICAgIGNvbnN0IHdpbiA9IGRvYy5kZWZhdWx0VmlldztcbiAgICAgIGlmICh3aW4pIHtcbiAgICAgICAgd2luLnNjcm9sbFRvKHgsIHkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaW50b1ZpZXcgPSAoZWxlbWVudCwgYWxpZ25Ub1RvcCkgPT4ge1xuICAgICAgY29uc3QgaXNTYWZhcmkgPSBkZXRlY3QkMigpLmJyb3dzZXIuaXNTYWZhcmkoKTtcbiAgICAgIGlmIChpc1NhZmFyaSAmJiBpc0Z1bmN0aW9uKGVsZW1lbnQuZG9tLnNjcm9sbEludG9WaWV3SWZOZWVkZWQpKSB7XG4gICAgICAgIGVsZW1lbnQuZG9tLnNjcm9sbEludG9WaWV3SWZOZWVkZWQoZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5kb20uc2Nyb2xsSW50b1ZpZXcoYWxpZ25Ub1RvcCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGdldCQ0ID0gX3dpbiA9PiB7XG4gICAgICBjb25zdCB3aW4gPSBfd2luID09PSB1bmRlZmluZWQgPyB3aW5kb3cgOiBfd2luO1xuICAgICAgaWYgKGRldGVjdCQyKCkuYnJvd3Nlci5pc0ZpcmVmb3goKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20od2luLnZpc3VhbFZpZXdwb3J0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGJvdW5kcyA9ICh4LCB5LCB3aWR0aCwgaGVpZ2h0KSA9PiAoe1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIHJpZ2h0OiB4ICsgd2lkdGgsXG4gICAgICBib3R0b206IHkgKyBoZWlnaHRcbiAgICB9KTtcbiAgICBjb25zdCBnZXRCb3VuZHMgPSBfd2luID0+IHtcbiAgICAgIGNvbnN0IHdpbiA9IF93aW4gPT09IHVuZGVmaW5lZCA/IHdpbmRvdyA6IF93aW47XG4gICAgICBjb25zdCBkb2MgPSB3aW4uZG9jdW1lbnQ7XG4gICAgICBjb25zdCBzY3JvbGwgPSBnZXQkNShTdWdhckVsZW1lbnQuZnJvbURvbShkb2MpKTtcbiAgICAgIHJldHVybiBnZXQkNCh3aW4pLmZvbGQoKCkgPT4ge1xuICAgICAgICBjb25zdCBodG1sID0gd2luLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgICAgICAgcmV0dXJuIGJvdW5kcyhzY3JvbGwubGVmdCwgc2Nyb2xsLnRvcCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICB9LCB2aXN1YWxWaWV3cG9ydCA9PiBib3VuZHMoTWF0aC5tYXgodmlzdWFsVmlld3BvcnQucGFnZUxlZnQsIHNjcm9sbC5sZWZ0KSwgTWF0aC5tYXgodmlzdWFsVmlld3BvcnQucGFnZVRvcCwgc2Nyb2xsLnRvcCksIHZpc3VhbFZpZXdwb3J0LndpZHRoLCB2aXN1YWxWaWV3cG9ydC5oZWlnaHQpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2hpbGRyZW4gPSAoc2NvcGUsIHByZWRpY2F0ZSkgPT4gZmlsdGVyJDUoY2hpbGRyZW4kMShzY29wZSksIHByZWRpY2F0ZSk7XG4gICAgY29uc3QgZGVzY2VuZGFudHMkMSA9IChzY29wZSwgcHJlZGljYXRlKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICBlYWNoJGUoY2hpbGRyZW4kMShzY29wZSksIHggPT4ge1xuICAgICAgICBpZiAocHJlZGljYXRlKHgpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChbeF0pO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZGVzY2VuZGFudHMkMSh4LCBwcmVkaWNhdGUpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgY29uc3QgZGVzY2VuZGFudHMgPSAoc2NvcGUsIHNlbGVjdG9yKSA9PiBhbGwoc2VsZWN0b3IsIHNjb3BlKTtcblxuICAgIGNvbnN0IGFuY2VzdG9yJDIgPSAoc2NvcGUsIHNlbGVjdG9yLCBpc1Jvb3QpID0+IGFuY2VzdG9yJDMoc2NvcGUsIHNlbGVjdG9yLCBpc1Jvb3QpLmlzU29tZSgpO1xuXG4gICAgY2xhc3MgRG9tVHJlZVdhbGtlciB7XG4gICAgICBjb25zdHJ1Y3RvcihzdGFydE5vZGUsIHJvb3ROb2RlKSB7XG4gICAgICAgIHRoaXMubm9kZSA9IHN0YXJ0Tm9kZTtcbiAgICAgICAgdGhpcy5yb290Tm9kZSA9IHJvb3ROb2RlO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLmN1cnJlbnQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5uZXh0ID0gdGhpcy5uZXh0LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucHJldiA9IHRoaXMucHJldi5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnByZXYyID0gdGhpcy5wcmV2Mi5iaW5kKHRoaXMpO1xuICAgICAgfVxuICAgICAgY3VycmVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgICAgIH1cbiAgICAgIG5leHQoc2hhbGxvdykge1xuICAgICAgICB0aGlzLm5vZGUgPSB0aGlzLmZpbmRTaWJsaW5nKHRoaXMubm9kZSwgJ2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCBzaGFsbG93KTtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgICAgIH1cbiAgICAgIHByZXYoc2hhbGxvdykge1xuICAgICAgICB0aGlzLm5vZGUgPSB0aGlzLmZpbmRTaWJsaW5nKHRoaXMubm9kZSwgJ2xhc3RDaGlsZCcsICdwcmV2aW91c1NpYmxpbmcnLCBzaGFsbG93KTtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgICAgIH1cbiAgICAgIHByZXYyKHNoYWxsb3cpIHtcbiAgICAgICAgdGhpcy5ub2RlID0gdGhpcy5maW5kUHJldmlvdXNOb2RlKHRoaXMubm9kZSwgc2hhbGxvdyk7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGU7XG4gICAgICB9XG4gICAgICBmaW5kU2libGluZyhub2RlLCBzdGFydE5hbWUsIHNpYmxpbmdOYW1lLCBzaGFsbG93KSB7XG4gICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgaWYgKCFzaGFsbG93ICYmIG5vZGVbc3RhcnROYW1lXSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVbc3RhcnROYW1lXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5vZGUgIT09IHRoaXMucm9vdE5vZGUpIHtcbiAgICAgICAgICAgIGxldCBzaWJsaW5nID0gbm9kZVtzaWJsaW5nTmFtZV07XG4gICAgICAgICAgICBpZiAoc2libGluZykge1xuICAgICAgICAgICAgICByZXR1cm4gc2libGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTsgcGFyZW50ICYmIHBhcmVudCAhPT0gdGhpcy5yb290Tm9kZTsgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgc2libGluZyA9IHBhcmVudFtzaWJsaW5nTmFtZV07XG4gICAgICAgICAgICAgIGlmIChzaWJsaW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGZpbmRQcmV2aW91c05vZGUobm9kZSwgc2hhbGxvdykge1xuICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgIGNvbnN0IHNpYmxpbmcgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICBpZiAodGhpcy5yb290Tm9kZSAmJiBzaWJsaW5nID09PSB0aGlzLnJvb3ROb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzaWJsaW5nKSB7XG4gICAgICAgICAgICBpZiAoIXNoYWxsb3cpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgY2hpbGQgPSBzaWJsaW5nLmxhc3RDaGlsZDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQubGFzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjaGlsZC5sYXN0Q2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzaWJsaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQgIT09IHRoaXMucm9vdE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaXNOb2RlVHlwZSA9IHR5cGUgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUgPT4ge1xuICAgICAgICByZXR1cm4gISFub2RlICYmIG5vZGUubm9kZVR5cGUgPT09IHR5cGU7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgaXNSZXN0cmljdGVkTm9kZSA9IG5vZGUgPT4gISFub2RlICYmICFPYmplY3QuZ2V0UHJvdG90eXBlT2Yobm9kZSk7XG4gICAgY29uc3QgaXNFbGVtZW50JDYgPSBpc05vZGVUeXBlKDEpO1xuICAgIGNvbnN0IG1hdGNoTm9kZU5hbWUgPSBuYW1lID0+IHtcbiAgICAgIGNvbnN0IGxvd2VyQ2FzZWROYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIG5vZGUgPT4gaXNOb25OdWxsYWJsZShub2RlKSAmJiBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IGxvd2VyQ2FzZWROYW1lO1xuICAgIH07XG4gICAgY29uc3QgbWF0Y2hOb2RlTmFtZXMgPSBuYW1lcyA9PiB7XG4gICAgICBjb25zdCBsb3dlckNhc2VkTmFtZXMgPSBuYW1lcy5tYXAocyA9PiBzLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgcmV0dXJuIG5vZGUgPT4ge1xuICAgICAgICBpZiAobm9kZSAmJiBub2RlLm5vZGVOYW1lKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgcmV0dXJuIGNvbnRhaW5zJDIobG93ZXJDYXNlZE5hbWVzLCBub2RlTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG1hdGNoU3R5bGVWYWx1ZXMgPSAobmFtZSwgdmFsdWVzKSA9PiB7XG4gICAgICBjb25zdCBpdGVtcyA9IHZhbHVlcy50b0xvd2VyQ2FzZSgpLnNwbGl0KCcgJyk7XG4gICAgICByZXR1cm4gbm9kZSA9PiB7XG4gICAgICAgIGlmIChpc0VsZW1lbnQkNihub2RlKSkge1xuICAgICAgICAgIGNvbnN0IHdpbiA9IG5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcbiAgICAgICAgICBpZiAod2luKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkID0gd2luLmdldENvbXB1dGVkU3R5bGUobm9kZSwgbnVsbCk7XG4gICAgICAgICAgICAgIGNvbnN0IGNzc1ZhbHVlID0gY29tcHV0ZWQgPyBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpIDogbnVsbDtcbiAgICAgICAgICAgICAgaWYgKGNzc1ZhbHVlID09PSBpdGVtc1tpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBoYXNBdHRyaWJ1dGUgPSBhdHRyTmFtZSA9PiB7XG4gICAgICByZXR1cm4gbm9kZSA9PiB7XG4gICAgICAgIHJldHVybiBpc0VsZW1lbnQkNihub2RlKSAmJiBub2RlLmhhc0F0dHJpYnV0ZShhdHRyTmFtZSk7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgaGFzQXR0cmlidXRlVmFsdWUgPSAoYXR0ck5hbWUsIGF0dHJWYWx1ZSkgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUgPT4ge1xuICAgICAgICByZXR1cm4gaXNFbGVtZW50JDYobm9kZSkgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpID09PSBhdHRyVmFsdWU7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgaXNCb2d1cyQyID0gbm9kZSA9PiBpc0VsZW1lbnQkNihub2RlKSAmJiBub2RlLmhhc0F0dHJpYnV0ZSgnZGF0YS1tY2UtYm9ndXMnKTtcbiAgICBjb25zdCBpc0JvZ3VzQWxsJDEgPSBub2RlID0+IGlzRWxlbWVudCQ2KG5vZGUpICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLW1jZS1ib2d1cycpID09PSAnYWxsJztcbiAgICBjb25zdCBpc1RhYmxlJDIgPSBub2RlID0+IGlzRWxlbWVudCQ2KG5vZGUpICYmIG5vZGUudGFnTmFtZSA9PT0gJ1RBQkxFJztcbiAgICBjb25zdCBoYXNDb250ZW50RWRpdGFibGVTdGF0ZSA9IHZhbHVlID0+IHtcbiAgICAgIHJldHVybiBub2RlID0+IHtcbiAgICAgICAgaWYgKGlzRWxlbWVudCQ2KG5vZGUpKSB7XG4gICAgICAgICAgaWYgKG5vZGUuY29udGVudEVkaXRhYmxlID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1tY2UtY29udGVudGVkaXRhYmxlJykgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGlzVGV4dGFyZWFPcklucHV0ID0gbWF0Y2hOb2RlTmFtZXMoW1xuICAgICAgJ3RleHRhcmVhJyxcbiAgICAgICdpbnB1dCdcbiAgICBdKTtcbiAgICBjb25zdCBpc1RleHQkYSA9IGlzTm9kZVR5cGUoMyk7XG4gICAgY29uc3QgaXNDRGF0YSA9IGlzTm9kZVR5cGUoNCk7XG4gICAgY29uc3QgaXNQaSA9IGlzTm9kZVR5cGUoNyk7XG4gICAgY29uc3QgaXNDb21tZW50ID0gaXNOb2RlVHlwZSg4KTtcbiAgICBjb25zdCBpc0RvY3VtZW50JDEgPSBpc05vZGVUeXBlKDkpO1xuICAgIGNvbnN0IGlzRG9jdW1lbnRGcmFnbWVudCA9IGlzTm9kZVR5cGUoMTEpO1xuICAgIGNvbnN0IGlzQnIkNiA9IG1hdGNoTm9kZU5hbWUoJ2JyJyk7XG4gICAgY29uc3QgaXNJbWcgPSBtYXRjaE5vZGVOYW1lKCdpbWcnKTtcbiAgICBjb25zdCBpc0NvbnRlbnRFZGl0YWJsZVRydWUkMyA9IGhhc0NvbnRlbnRFZGl0YWJsZVN0YXRlKCd0cnVlJyk7XG4gICAgY29uc3QgaXNDb250ZW50RWRpdGFibGVGYWxzZSRiID0gaGFzQ29udGVudEVkaXRhYmxlU3RhdGUoJ2ZhbHNlJyk7XG4gICAgY29uc3QgaXNUYWJsZUNlbGwkMyA9IG1hdGNoTm9kZU5hbWVzKFtcbiAgICAgICd0ZCcsXG4gICAgICAndGgnXG4gICAgXSk7XG4gICAgY29uc3QgaXNUYWJsZUNlbGxPckNhcHRpb24gPSBtYXRjaE5vZGVOYW1lcyhbXG4gICAgICAndGQnLFxuICAgICAgJ3RoJyxcbiAgICAgICdjYXB0aW9uJ1xuICAgIF0pO1xuICAgIGNvbnN0IGlzTWVkaWEkMiA9IG1hdGNoTm9kZU5hbWVzKFtcbiAgICAgICd2aWRlbycsXG4gICAgICAnYXVkaW8nLFxuICAgICAgJ29iamVjdCcsXG4gICAgICAnZW1iZWQnXG4gICAgXSk7XG4gICAgY29uc3QgaXNMaXN0SXRlbSQyID0gbWF0Y2hOb2RlTmFtZSgnbGknKTtcbiAgICBjb25zdCBpc0RldGFpbHMgPSBtYXRjaE5vZGVOYW1lKCdkZXRhaWxzJyk7XG4gICAgY29uc3QgaXNTdW1tYXJ5ID0gbWF0Y2hOb2RlTmFtZSgnc3VtbWFyeScpO1xuXG4gICAgY29uc3QgemVyb1dpZHRoID0gJ1xcdUZFRkYnO1xuICAgIGNvbnN0IG5ic3AgPSAnXFx4QTAnO1xuICAgIGNvbnN0IGlzWndzcCQyID0gY2hhciA9PiBjaGFyID09PSB6ZXJvV2lkdGg7XG4gICAgY29uc3QgcmVtb3ZlWndzcCA9IHMgPT4gcy5yZXBsYWNlKC9cXHVGRUZGL2csICcnKTtcblxuICAgIGNvbnN0IE5vZGVWYWx1ZSA9IChpcywgbmFtZSkgPT4ge1xuICAgICAgY29uc3QgZ2V0ID0gZWxlbWVudCA9PiB7XG4gICAgICAgIGlmICghaXMoZWxlbWVudCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBvbmx5IGdldCAnICsgbmFtZSArICcgdmFsdWUgb2YgYSAnICsgbmFtZSArICcgbm9kZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXRPcHRpb24oZWxlbWVudCkuZ2V0T3IoJycpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldE9wdGlvbiA9IGVsZW1lbnQgPT4gaXMoZWxlbWVudCkgPyBPcHRpb25hbC5mcm9tKGVsZW1lbnQuZG9tLm5vZGVWYWx1ZSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICBjb25zdCBzZXQgPSAoZWxlbWVudCwgdmFsdWUpID0+IHtcbiAgICAgICAgaWYgKCFpcyhlbGVtZW50KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG9ubHkgc2V0IHJhdyAnICsgbmFtZSArICcgdmFsdWUgb2YgYSAnICsgbmFtZSArICcgbm9kZScpO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnQuZG9tLm5vZGVWYWx1ZSA9IHZhbHVlO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdldCxcbiAgICAgICAgZ2V0T3B0aW9uLFxuICAgICAgICBzZXRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGFwaSQxID0gTm9kZVZhbHVlKGlzVGV4dCRiLCAndGV4dCcpO1xuICAgIGNvbnN0IGdldCQzID0gZWxlbWVudCA9PiBhcGkkMS5nZXQoZWxlbWVudCk7XG4gICAgY29uc3QgZ2V0T3B0aW9uID0gZWxlbWVudCA9PiBhcGkkMS5nZXRPcHRpb24oZWxlbWVudCk7XG4gICAgY29uc3Qgc2V0ID0gKGVsZW1lbnQsIHZhbHVlKSA9PiBhcGkkMS5zZXQoZWxlbWVudCwgdmFsdWUpO1xuXG4gICAgY29uc3QgYmxvY2tzID0gW1xuICAgICAgJ2FydGljbGUnLFxuICAgICAgJ2FzaWRlJyxcbiAgICAgICdkZXRhaWxzJyxcbiAgICAgICdkaXYnLFxuICAgICAgJ2R0JyxcbiAgICAgICdmaWdjYXB0aW9uJyxcbiAgICAgICdmb290ZXInLFxuICAgICAgJ2Zvcm0nLFxuICAgICAgJ2ZpZWxkc2V0JyxcbiAgICAgICdoZWFkZXInLFxuICAgICAgJ2hncm91cCcsXG4gICAgICAnaHRtbCcsXG4gICAgICAnbWFpbicsXG4gICAgICAnbmF2JyxcbiAgICAgICdzZWN0aW9uJyxcbiAgICAgICdzdW1tYXJ5JyxcbiAgICAgICdib2R5JyxcbiAgICAgICdwJyxcbiAgICAgICdkbCcsXG4gICAgICAnbXVsdGljb2wnLFxuICAgICAgJ2RkJyxcbiAgICAgICdmaWd1cmUnLFxuICAgICAgJ2FkZHJlc3MnLFxuICAgICAgJ2NlbnRlcicsXG4gICAgICAnYmxvY2txdW90ZScsXG4gICAgICAnaDEnLFxuICAgICAgJ2gyJyxcbiAgICAgICdoMycsXG4gICAgICAnaDQnLFxuICAgICAgJ2g1JyxcbiAgICAgICdoNicsXG4gICAgICAnbGlzdGluZycsXG4gICAgICAneG1wJyxcbiAgICAgICdwcmUnLFxuICAgICAgJ3BsYWludGV4dCcsXG4gICAgICAnbWVudScsXG4gICAgICAnZGlyJyxcbiAgICAgICd1bCcsXG4gICAgICAnb2wnLFxuICAgICAgJ2xpJyxcbiAgICAgICdocicsXG4gICAgICAndGFibGUnLFxuICAgICAgJ3Rib2R5JyxcbiAgICAgICd0aGVhZCcsXG4gICAgICAndGZvb3QnLFxuICAgICAgJ3RoJyxcbiAgICAgICd0cicsXG4gICAgICAndGQnLFxuICAgICAgJ2NhcHRpb24nXG4gICAgXTtcbiAgICBjb25zdCB0YWJsZUNlbGxzID0gW1xuICAgICAgJ3RkJyxcbiAgICAgICd0aCdcbiAgICBdO1xuICAgIGNvbnN0IHRhYmxlU2VjdGlvbnMgPSBbXG4gICAgICAndGhlYWQnLFxuICAgICAgJ3Rib2R5JyxcbiAgICAgICd0Zm9vdCdcbiAgICBdO1xuICAgIGNvbnN0IHRleHRCbG9ja3MgPSBbXG4gICAgICAnaDEnLFxuICAgICAgJ2gyJyxcbiAgICAgICdoMycsXG4gICAgICAnaDQnLFxuICAgICAgJ2g1JyxcbiAgICAgICdoNicsXG4gICAgICAncCcsXG4gICAgICAnZGl2JyxcbiAgICAgICdhZGRyZXNzJyxcbiAgICAgICdwcmUnLFxuICAgICAgJ2Zvcm0nLFxuICAgICAgJ2Jsb2NrcXVvdGUnLFxuICAgICAgJ2NlbnRlcicsXG4gICAgICAnZGlyJyxcbiAgICAgICdmaWVsZHNldCcsXG4gICAgICAnaGVhZGVyJyxcbiAgICAgICdmb290ZXInLFxuICAgICAgJ2FydGljbGUnLFxuICAgICAgJ3NlY3Rpb24nLFxuICAgICAgJ2hncm91cCcsXG4gICAgICAnYXNpZGUnLFxuICAgICAgJ25hdicsXG4gICAgICAnZmlndXJlJ1xuICAgIF07XG4gICAgY29uc3QgaGVhZGluZ3MgPSBbXG4gICAgICAnaDEnLFxuICAgICAgJ2gyJyxcbiAgICAgICdoMycsXG4gICAgICAnaDQnLFxuICAgICAgJ2g1JyxcbiAgICAgICdoNidcbiAgICBdO1xuICAgIGNvbnN0IGxpc3RJdGVtcyQxID0gW1xuICAgICAgJ2xpJyxcbiAgICAgICdkZCcsXG4gICAgICAnZHQnXG4gICAgXTtcbiAgICBjb25zdCBsaXN0cyA9IFtcbiAgICAgICd1bCcsXG4gICAgICAnb2wnLFxuICAgICAgJ2RsJ1xuICAgIF07XG4gICAgY29uc3Qgd3NFbGVtZW50cyA9IFtcbiAgICAgICdwcmUnLFxuICAgICAgJ3NjcmlwdCcsXG4gICAgICAndGV4dGFyZWEnLFxuICAgICAgJ3N0eWxlJ1xuICAgIF07XG4gICAgY29uc3Qgd3JhcEJsb2NrRWxlbWVudHMgPSBbJ3ByZSddLmNvbmNhdChoZWFkaW5ncyk7XG4gICAgY29uc3QgbGF6eUxvb2t1cCA9IGl0ZW1zID0+IHtcbiAgICAgIGxldCBsb29rdXA7XG4gICAgICByZXR1cm4gbm9kZSA9PiB7XG4gICAgICAgIGxvb2t1cCA9IGxvb2t1cCA/IGxvb2t1cCA6IG1hcFRvT2JqZWN0KGl0ZW1zLCBhbHdheXMpO1xuICAgICAgICByZXR1cm4gaGFzJDIobG9va3VwLCBuYW1lKG5vZGUpKTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBpc0Jsb2NrJDIgPSBsYXp5TG9va3VwKGJsb2Nrcyk7XG4gICAgY29uc3QgaXNUYWJsZSQxID0gbm9kZSA9PiBuYW1lKG5vZGUpID09PSAndGFibGUnO1xuICAgIGNvbnN0IGlzSW5saW5lJDEgPSBub2RlID0+IGlzRWxlbWVudCQ3KG5vZGUpICYmICFpc0Jsb2NrJDIobm9kZSk7XG4gICAgY29uc3QgaXNCciQ1ID0gbm9kZSA9PiBpc0VsZW1lbnQkNyhub2RlKSAmJiBuYW1lKG5vZGUpID09PSAnYnInO1xuICAgIGNvbnN0IGlzVGV4dEJsb2NrJDIgPSBsYXp5TG9va3VwKHRleHRCbG9ja3MpO1xuICAgIGNvbnN0IGlzTGlzdCA9IGxhenlMb29rdXAobGlzdHMpO1xuICAgIGNvbnN0IGlzTGlzdEl0ZW0kMSA9IGxhenlMb29rdXAobGlzdEl0ZW1zJDEpO1xuICAgIGNvbnN0IGlzVGFibGVTZWN0aW9uID0gbGF6eUxvb2t1cCh0YWJsZVNlY3Rpb25zKTtcbiAgICBjb25zdCBpc1RhYmxlQ2VsbCQyID0gbGF6eUxvb2t1cCh0YWJsZUNlbGxzKTtcbiAgICBjb25zdCBpc1dzUHJlc2VydmVFbGVtZW50ID0gbGF6eUxvb2t1cCh3c0VsZW1lbnRzKTtcbiAgICBjb25zdCBpc1dyYXBCbG9ja0VsZW1lbnQgPSBsYXp5TG9va3VwKHdyYXBCbG9ja0VsZW1lbnRzKTtcbiAgICBjb25zdCBpc1dyYXBFbGVtZW50ID0gbm9kZSA9PiBpc1dyYXBCbG9ja0VsZW1lbnQobm9kZSkgfHwgaXNJbmxpbmUkMShub2RlKTtcblxuICAgIGNvbnN0IGdldExhc3RDaGlsZHJlbiQxID0gZWxtID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gW107XG4gICAgICBsZXQgcmF3Tm9kZSA9IGVsbS5kb207XG4gICAgICB3aGlsZSAocmF3Tm9kZSkge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJhd05vZGUpKTtcbiAgICAgICAgcmF3Tm9kZSA9IHJhd05vZGUubGFzdENoaWxkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlVHJhaWxpbmdCciA9IGVsbSA9PiB7XG4gICAgICBjb25zdCBhbGxCcnMgPSBkZXNjZW5kYW50cyhlbG0sICdicicpO1xuICAgICAgY29uc3QgYnJzID0gZmlsdGVyJDUoZ2V0TGFzdENoaWxkcmVuJDEoZWxtKS5zbGljZSgtMSksIGlzQnIkNSk7XG4gICAgICBpZiAoYWxsQnJzLmxlbmd0aCA9PT0gYnJzLmxlbmd0aCkge1xuICAgICAgICBlYWNoJGUoYnJzLCByZW1vdmUkNSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVQYWRkaW5nQnIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBiciA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdicicpO1xuICAgICAgc2V0JDMoYnIsICdkYXRhLW1jZS1ib2d1cycsICcxJyk7XG4gICAgICByZXR1cm4gYnI7XG4gICAgfTtcbiAgICBjb25zdCBmaWxsV2l0aFBhZGRpbmdCciA9IGVsbSA9PiB7XG4gICAgICBlbXB0eShlbG0pO1xuICAgICAgYXBwZW5kJDEoZWxtLCBjcmVhdGVQYWRkaW5nQnIoKSk7XG4gICAgfTtcbiAgICBjb25zdCB0cmltQmxvY2tUcmFpbGluZ0JyID0gZWxtID0+IHtcbiAgICAgIGxhc3RDaGlsZChlbG0pLmVhY2gobGFzdENoaWxkID0+IHtcbiAgICAgICAgcHJldlNpYmxpbmcobGFzdENoaWxkKS5lYWNoKGxhc3RDaGlsZFByZXZTaWJsaW5nID0+IHtcbiAgICAgICAgICBpZiAoaXNCbG9jayQyKGVsbSkgJiYgaXNCciQ1KGxhc3RDaGlsZCkgJiYgaXNCbG9jayQyKGxhc3RDaGlsZFByZXZTaWJsaW5nKSkge1xuICAgICAgICAgICAgcmVtb3ZlJDUobGFzdENoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IFpXU1AkMSA9IHplcm9XaWR0aDtcbiAgICBjb25zdCBpc1p3c3AkMSA9IGlzWndzcCQyO1xuICAgIGNvbnN0IHRyaW0kMSA9IHJlbW92ZVp3c3A7XG5cbiAgICBjb25zdCBpc0VsZW1lbnQkNSA9IGlzRWxlbWVudCQ2O1xuICAgIGNvbnN0IGlzVGV4dCQ5ID0gaXNUZXh0JGE7XG4gICAgY29uc3QgaXNDYXJldENvbnRhaW5lckJsb2NrJDEgPSBub2RlID0+IHtcbiAgICAgIGlmIChpc1RleHQkOShub2RlKSkge1xuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzRWxlbWVudCQ1KG5vZGUpICYmIG5vZGUuaGFzQXR0cmlidXRlKCdkYXRhLW1jZS1jYXJldCcpO1xuICAgIH07XG4gICAgY29uc3QgaXNDYXJldENvbnRhaW5lcklubGluZSA9IG5vZGUgPT4gaXNUZXh0JDkobm9kZSkgJiYgaXNad3NwJDEobm9kZS5kYXRhKTtcbiAgICBjb25zdCBpc0NhcmV0Q29udGFpbmVyJDIgPSBub2RlID0+IGlzQ2FyZXRDb250YWluZXJCbG9jayQxKG5vZGUpIHx8IGlzQ2FyZXRDb250YWluZXJJbmxpbmUobm9kZSk7XG4gICAgY29uc3QgaGFzQ29udGVudCA9IG5vZGUgPT4gbm9kZS5maXJzdENoaWxkICE9PSBub2RlLmxhc3RDaGlsZCB8fCAhaXNCciQ2KG5vZGUuZmlyc3RDaGlsZCk7XG4gICAgY29uc3QgaW5zZXJ0SW5saW5lJDEgPSAobm9kZSwgYmVmb3JlKSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBkb2MgPSAoX2EgPSBub2RlLm93bmVyRG9jdW1lbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGRvY3VtZW50O1xuICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb2MuY3JlYXRlVGV4dE5vZGUoWldTUCQxKTtcbiAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICBpZiAoIWJlZm9yZSkge1xuICAgICAgICBjb25zdCBzaWJsaW5nID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgICAgaWYgKGlzVGV4dCQ5KHNpYmxpbmcpKSB7XG4gICAgICAgICAgaWYgKGlzQ2FyZXRDb250YWluZXIkMihzaWJsaW5nKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGFydHNXaXRoQ2FyZXRDb250YWluZXIkMShzaWJsaW5nKSkge1xuICAgICAgICAgICAgc2libGluZy5zcGxpdFRleHQoMSk7XG4gICAgICAgICAgICByZXR1cm4gc2libGluZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgICBwYXJlbnROb2RlID09PSBudWxsIHx8IHBhcmVudE5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRleHROb2RlLCBub2RlLm5leHRTaWJsaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJlbnROb2RlID09PSBudWxsIHx8IHBhcmVudE5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGV4dE5vZGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgIGlmIChpc1RleHQkOShzaWJsaW5nKSkge1xuICAgICAgICAgIGlmIChpc0NhcmV0Q29udGFpbmVyJDIoc2libGluZykpIHtcbiAgICAgICAgICAgIHJldHVybiBzaWJsaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZW5kc1dpdGhDYXJldENvbnRhaW5lciQxKHNpYmxpbmcpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2libGluZy5zcGxpdFRleHQoc2libGluZy5kYXRhLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwYXJlbnROb2RlID09PSBudWxsIHx8IHBhcmVudE5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRleHROb2RlLCBub2RlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0ZXh0Tm9kZTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQmVmb3JlSW5saW5lID0gcG9zID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHBvcy5jb250YWluZXIoKTtcbiAgICAgIGlmICghaXNUZXh0JGEoY29udGFpbmVyKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGFpbmVyLmRhdGEuY2hhckF0KHBvcy5vZmZzZXQoKSkgPT09IFpXU1AkMSB8fCBwb3MuaXNBdFN0YXJ0KCkgJiYgaXNDYXJldENvbnRhaW5lcklubGluZShjb250YWluZXIucHJldmlvdXNTaWJsaW5nKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQWZ0ZXJJbmxpbmUgPSBwb3MgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gcG9zLmNvbnRhaW5lcigpO1xuICAgICAgaWYgKCFpc1RleHQkYShjb250YWluZXIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250YWluZXIuZGF0YS5jaGFyQXQocG9zLm9mZnNldCgpIC0gMSkgPT09IFpXU1AkMSB8fCBwb3MuaXNBdEVuZCgpICYmIGlzQ2FyZXRDb250YWluZXJJbmxpbmUoY29udGFpbmVyLm5leHRTaWJsaW5nKTtcbiAgICB9O1xuICAgIGNvbnN0IGluc2VydEJsb2NrID0gKGJsb2NrTmFtZSwgbm9kZSwgYmVmb3JlKSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBkb2MgPSAoX2EgPSBub2RlLm93bmVyRG9jdW1lbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGRvY3VtZW50O1xuICAgICAgY29uc3QgYmxvY2tOb2RlID0gZG9jLmNyZWF0ZUVsZW1lbnQoYmxvY2tOYW1lKTtcbiAgICAgIGJsb2NrTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWNlLWNhcmV0JywgYmVmb3JlID8gJ2JlZm9yZScgOiAnYWZ0ZXInKTtcbiAgICAgIGJsb2NrTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWNlLWJvZ3VzJywgJ2FsbCcpO1xuICAgICAgYmxvY2tOb2RlLmFwcGVuZENoaWxkKGNyZWF0ZVBhZGRpbmdCcigpLmRvbSk7XG4gICAgICBjb25zdCBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgaWYgKCFiZWZvcmUpIHtcbiAgICAgICAgaWYgKG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgICBwYXJlbnROb2RlID09PSBudWxsIHx8IHBhcmVudE5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGJsb2NrTm9kZSwgbm9kZS5uZXh0U2libGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyZW50Tm9kZSA9PT0gbnVsbCB8fCBwYXJlbnROb2RlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJlbnROb2RlLmFwcGVuZENoaWxkKGJsb2NrTm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudE5vZGUgPT09IG51bGwgfHwgcGFyZW50Tm9kZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYmxvY2tOb2RlLCBub2RlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBibG9ja05vZGU7XG4gICAgfTtcbiAgICBjb25zdCBzdGFydHNXaXRoQ2FyZXRDb250YWluZXIkMSA9IG5vZGUgPT4gaXNUZXh0JDkobm9kZSkgJiYgbm9kZS5kYXRhWzBdID09PSBaV1NQJDE7XG4gICAgY29uc3QgZW5kc1dpdGhDYXJldENvbnRhaW5lciQxID0gbm9kZSA9PiBpc1RleHQkOShub2RlKSAmJiBub2RlLmRhdGFbbm9kZS5kYXRhLmxlbmd0aCAtIDFdID09PSBaV1NQJDE7XG4gICAgY29uc3QgdHJpbUJvZ3VzQnIgPSBlbG0gPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgYnJzID0gZWxtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdicicpO1xuICAgICAgY29uc3QgbGFzdEJyID0gYnJzW2Jycy5sZW5ndGggLSAxXTtcbiAgICAgIGlmIChpc0JvZ3VzJDIobGFzdEJyKSkge1xuICAgICAgICAoX2EgPSBsYXN0QnIucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJlbW92ZUNoaWxkKGxhc3RCcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzaG93Q2FyZXRDb250YWluZXJCbG9jayA9IGNhcmV0Q29udGFpbmVyID0+IHtcbiAgICAgIGlmIChjYXJldENvbnRhaW5lciAmJiBjYXJldENvbnRhaW5lci5oYXNBdHRyaWJ1dGUoJ2RhdGEtbWNlLWNhcmV0JykpIHtcbiAgICAgICAgdHJpbUJvZ3VzQnIoY2FyZXRDb250YWluZXIpO1xuICAgICAgICBjYXJldENvbnRhaW5lci5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbWNlLWNhcmV0Jyk7XG4gICAgICAgIGNhcmV0Q29udGFpbmVyLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1tY2UtYm9ndXMnKTtcbiAgICAgICAgY2FyZXRDb250YWluZXIucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgICBjYXJldENvbnRhaW5lci5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbWNlLXN0eWxlJyk7XG4gICAgICAgIGNhcmV0Q29udGFpbmVyLnJlbW92ZUF0dHJpYnV0ZSgnX21vel9hYnNwb3MnKTtcbiAgICAgICAgcmV0dXJuIGNhcmV0Q29udGFpbmVyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBjb25zdCBpc1JhbmdlSW5DYXJldENvbnRhaW5lckJsb2NrID0gcmFuZ2UgPT4gaXNDYXJldENvbnRhaW5lckJsb2NrJDEocmFuZ2Uuc3RhcnRDb250YWluZXIpO1xuXG4gICAgY29uc3QgaXNDb250ZW50RWRpdGFibGVUcnVlJDIgPSBpc0NvbnRlbnRFZGl0YWJsZVRydWUkMztcbiAgICBjb25zdCBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJGEgPSBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJGI7XG4gICAgY29uc3QgaXNCciQ0ID0gaXNCciQ2O1xuICAgIGNvbnN0IGlzVGV4dCQ4ID0gaXNUZXh0JGE7XG4gICAgY29uc3QgaXNJbnZhbGlkVGV4dEVsZW1lbnQgPSBtYXRjaE5vZGVOYW1lcyhbXG4gICAgICAnc2NyaXB0JyxcbiAgICAgICdzdHlsZScsXG4gICAgICAndGV4dGFyZWEnXG4gICAgXSk7XG4gICAgY29uc3QgaXNBdG9taWNJbmxpbmUgPSBtYXRjaE5vZGVOYW1lcyhbXG4gICAgICAnaW1nJyxcbiAgICAgICdpbnB1dCcsXG4gICAgICAndGV4dGFyZWEnLFxuICAgICAgJ2hyJyxcbiAgICAgICdpZnJhbWUnLFxuICAgICAgJ3ZpZGVvJyxcbiAgICAgICdhdWRpbycsXG4gICAgICAnb2JqZWN0JyxcbiAgICAgICdlbWJlZCdcbiAgICBdKTtcbiAgICBjb25zdCBpc1RhYmxlID0gbWF0Y2hOb2RlTmFtZXMoWyd0YWJsZSddKTtcbiAgICBjb25zdCBpc0NhcmV0Q29udGFpbmVyJDEgPSBpc0NhcmV0Q29udGFpbmVyJDI7XG4gICAgY29uc3QgaXNDYXJldENhbmRpZGF0ZSQzID0gbm9kZSA9PiB7XG4gICAgICBpZiAoaXNDYXJldENvbnRhaW5lciQxKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1RleHQkOChub2RlKSkge1xuICAgICAgICByZXR1cm4gIWlzSW52YWxpZFRleHRFbGVtZW50KG5vZGUucGFyZW50Tm9kZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNBdG9taWNJbmxpbmUobm9kZSkgfHwgaXNCciQ0KG5vZGUpIHx8IGlzVGFibGUobm9kZSkgfHwgaXNOb25VaUNvbnRlbnRFZGl0YWJsZUZhbHNlKG5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgaXNVbnNlbGVjdGFibGUgPSBub2RlID0+IGlzRWxlbWVudCQ2KG5vZGUpICYmIG5vZGUuZ2V0QXR0cmlidXRlKCd1bnNlbGVjdGFibGUnKSA9PT0gJ3RydWUnO1xuICAgIGNvbnN0IGlzTm9uVWlDb250ZW50RWRpdGFibGVGYWxzZSA9IG5vZGUgPT4gIWlzVW5zZWxlY3RhYmxlKG5vZGUpICYmIGlzQ29udGVudEVkaXRhYmxlRmFsc2UkYShub2RlKTtcbiAgICBjb25zdCBpc0luRWRpdGFibGUgPSAobm9kZSwgcm9vdCkgPT4ge1xuICAgICAgZm9yIChsZXQgdGVtcE5vZGUgPSBub2RlLnBhcmVudE5vZGU7IHRlbXBOb2RlICYmIHRlbXBOb2RlICE9PSByb290OyB0ZW1wTm9kZSA9IHRlbXBOb2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgaWYgKGlzTm9uVWlDb250ZW50RWRpdGFibGVGYWxzZSh0ZW1wTm9kZSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQ29udGVudEVkaXRhYmxlVHJ1ZSQyKHRlbXBOb2RlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQXRvbWljQ29udGVudEVkaXRhYmxlRmFsc2UgPSBub2RlID0+IHtcbiAgICAgIGlmICghaXNOb25VaUNvbnRlbnRFZGl0YWJsZUZhbHNlKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhZm9sZGwoZnJvbShub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpLCAocmVzdWx0LCBlbG0pID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCB8fCBpc0NvbnRlbnRFZGl0YWJsZVRydWUkMihlbG0pO1xuICAgICAgfSwgZmFsc2UpO1xuICAgIH07XG4gICAgY29uc3QgaXNBdG9taWMkMSA9IG5vZGUgPT4gaXNBdG9taWNJbmxpbmUobm9kZSkgfHwgaXNBdG9taWNDb250ZW50RWRpdGFibGVGYWxzZShub2RlKTtcbiAgICBjb25zdCBpc0VkaXRhYmxlQ2FyZXRDYW5kaWRhdGUkMSA9IChub2RlLCByb290KSA9PiBpc0NhcmV0Q2FuZGlkYXRlJDMobm9kZSkgJiYgaXNJbkVkaXRhYmxlKG5vZGUsIHJvb3QpO1xuXG4gICAgY29uc3Qgd2hpdGVTcGFjZVJlZ0V4cCA9IC9eWyBcXHRcXHJcXG5dKiQvO1xuICAgIGNvbnN0IGlzV2hpdGVzcGFjZVRleHQgPSB0ZXh0ID0+IHdoaXRlU3BhY2VSZWdFeHAudGVzdCh0ZXh0KTtcbiAgICBjb25zdCBpc1p3c3AgPSB0ZXh0ID0+IHtcbiAgICAgIGZvciAoY29uc3QgYyBvZiB0ZXh0KSB7XG4gICAgICAgIGlmICghaXNad3NwJDIoYykpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgY29uc3QgaXNDb2xsYXBzaWJsZVdoaXRlc3BhY2UkMSA9IGMgPT4gJyBcXGZcXHRcXHgwQicuaW5kZXhPZihjKSAhPT0gLTE7XG4gICAgY29uc3QgaXNOZXdMaW5lQ2hhciA9IGMgPT4gYyA9PT0gJ1xcbicgfHwgYyA9PT0gJ1xccic7XG4gICAgY29uc3QgaXNOZXdsaW5lID0gKHRleHQsIGlkeCkgPT4gaWR4IDwgdGV4dC5sZW5ndGggJiYgaWR4ID49IDAgPyBpc05ld0xpbmVDaGFyKHRleHRbaWR4XSkgOiBmYWxzZTtcbiAgICBjb25zdCBub3JtYWxpemUkNCA9ICh0ZXh0LCB0YWJTcGFjZXMgPSA0LCBpc1N0YXJ0T2ZDb250ZW50ID0gdHJ1ZSwgaXNFbmRPZkNvbnRlbnQgPSB0cnVlKSA9PiB7XG4gICAgICBjb25zdCB0YWJTcGFjZSA9IHJlcGVhdCgnICcsIHRhYlNwYWNlcyk7XG4gICAgICBjb25zdCBub3JtYWxpemVkVGV4dCA9IHRleHQucmVwbGFjZSgvXFx0L2csIHRhYlNwYWNlKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvbGRsKG5vcm1hbGl6ZWRUZXh0LCAoYWNjLCBjKSA9PiB7XG4gICAgICAgIGlmIChpc0NvbGxhcHNpYmxlV2hpdGVzcGFjZSQxKGMpIHx8IGMgPT09IG5ic3ApIHtcbiAgICAgICAgICBpZiAoYWNjLnBjSXNTcGFjZSB8fCBhY2Muc3RyID09PSAnJyAmJiBpc1N0YXJ0T2ZDb250ZW50IHx8IGFjYy5zdHIubGVuZ3RoID09PSBub3JtYWxpemVkVGV4dC5sZW5ndGggLSAxICYmIGlzRW5kT2ZDb250ZW50IHx8IGlzTmV3bGluZShub3JtYWxpemVkVGV4dCwgYWNjLnN0ci5sZW5ndGggKyAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgcGNJc1NwYWNlOiBmYWxzZSxcbiAgICAgICAgICAgICAgc3RyOiBhY2Muc3RyICsgbmJzcFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgcGNJc1NwYWNlOiB0cnVlLFxuICAgICAgICAgICAgICBzdHI6IGFjYy5zdHIgKyAnICdcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwY0lzU3BhY2U6IGlzTmV3TGluZUNoYXIoYyksXG4gICAgICAgICAgICBzdHI6IGFjYy5zdHIgKyBjXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBwY0lzU3BhY2U6IGZhbHNlLFxuICAgICAgICBzdHI6ICcnXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQuc3RyO1xuICAgIH07XG5cbiAgICBjb25zdCBoYXNXaGl0ZXNwYWNlUHJlc2VydmVQYXJlbnQgPSAobm9kZSwgcm9vdE5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHJvb3RFbGVtZW50ID0gU3VnYXJFbGVtZW50LmZyb21Eb20ocm9vdE5vZGUpO1xuICAgICAgY29uc3Qgc3RhcnROb2RlID0gU3VnYXJFbGVtZW50LmZyb21Eb20obm9kZSk7XG4gICAgICByZXR1cm4gYW5jZXN0b3IkMihzdGFydE5vZGUsICdwcmUsY29kZScsIGN1cnJ5KGVxLCByb290RWxlbWVudCkpO1xuICAgIH07XG4gICAgY29uc3QgaXNXaGl0ZXNwYWNlJDEgPSAobm9kZSwgcm9vdE5vZGUpID0+IHtcbiAgICAgIHJldHVybiBpc1RleHQkYShub2RlKSAmJiBpc1doaXRlc3BhY2VUZXh0KG5vZGUuZGF0YSkgJiYgIWhhc1doaXRlc3BhY2VQcmVzZXJ2ZVBhcmVudChub2RlLCByb290Tm9kZSk7XG4gICAgfTtcbiAgICBjb25zdCBpc05hbWVkQW5jaG9yID0gbm9kZSA9PiB7XG4gICAgICByZXR1cm4gaXNFbGVtZW50JDYobm9kZSkgJiYgbm9kZS5ub2RlTmFtZSA9PT0gJ0EnICYmICFub2RlLmhhc0F0dHJpYnV0ZSgnaHJlZicpICYmIChub2RlLmhhc0F0dHJpYnV0ZSgnbmFtZScpIHx8IG5vZGUuaGFzQXR0cmlidXRlKCdpZCcpKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQ29udGVudCQxID0gKG5vZGUsIHJvb3ROb2RlKSA9PiB7XG4gICAgICByZXR1cm4gaXNDYXJldENhbmRpZGF0ZSQzKG5vZGUpICYmICFpc1doaXRlc3BhY2UkMShub2RlLCByb290Tm9kZSkgfHwgaXNOYW1lZEFuY2hvcihub2RlKSB8fCBpc0Jvb2ttYXJrKG5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgaXNCb29rbWFyayA9IGhhc0F0dHJpYnV0ZSgnZGF0YS1tY2UtYm9va21hcmsnKTtcbiAgICBjb25zdCBpc0JvZ3VzJDEgPSBoYXNBdHRyaWJ1dGUoJ2RhdGEtbWNlLWJvZ3VzJyk7XG4gICAgY29uc3QgaXNCb2d1c0FsbCA9IGhhc0F0dHJpYnV0ZVZhbHVlKCdkYXRhLW1jZS1ib2d1cycsICdhbGwnKTtcbiAgICBjb25zdCBpc0VtcHR5Tm9kZSA9ICh0YXJnZXROb2RlLCBza2lwQm9ndXMpID0+IHtcbiAgICAgIGxldCBickNvdW50ID0gMDtcbiAgICAgIGlmIChpc0NvbnRlbnQkMSh0YXJnZXROb2RlLCB0YXJnZXROb2RlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgbm9kZSA9IHRhcmdldE5vZGUuZmlyc3RDaGlsZDtcbiAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd2Fsa2VyID0gbmV3IERvbVRyZWVXYWxrZXIobm9kZSwgdGFyZ2V0Tm9kZSk7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBpZiAoc2tpcEJvZ3VzKSB7XG4gICAgICAgICAgICBpZiAoaXNCb2d1c0FsbChub2RlKSkge1xuICAgICAgICAgICAgICBub2RlID0gd2Fsa2VyLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzQm9ndXMkMShub2RlKSkge1xuICAgICAgICAgICAgICBub2RlID0gd2Fsa2VyLm5leHQoKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0JyJDYobm9kZSkpIHtcbiAgICAgICAgICAgIGJyQ291bnQrKztcbiAgICAgICAgICAgIG5vZGUgPSB3YWxrZXIubmV4dCgpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0NvbnRlbnQkMShub2RlLCB0YXJnZXROb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBub2RlID0gd2Fsa2VyLm5leHQoKTtcbiAgICAgICAgfSB3aGlsZSAobm9kZSk7XG4gICAgICAgIHJldHVybiBickNvdW50IDw9IDE7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc0VtcHR5JDIgPSAoZWxtLCBza2lwQm9ndXMgPSB0cnVlKSA9PiBpc0VtcHR5Tm9kZShlbG0uZG9tLCBza2lwQm9ndXMpO1xuXG4gICAgY29uc3QgdHJhbnNwYXJlbnRCbG9ja0F0dHIgPSAnZGF0YS1tY2UtYmxvY2snO1xuICAgIGNvbnN0IGVsZW1lbnROYW1lcyA9IG1hcCA9PiBmaWx0ZXIkNShrZXlzKG1hcCksIGtleSA9PiAhL1tBLVpdLy50ZXN0KGtleSkpO1xuICAgIGNvbnN0IG1ha2VTZWxlY3RvckZyb21TY2hlbWFNYXAgPSBtYXAgPT4gZWxlbWVudE5hbWVzKG1hcCkuam9pbignLCcpO1xuICAgIGNvbnN0IHVwZGF0ZVRyYW5zcGFyZW50ID0gKGJsb2Nrc1NlbGVjdG9yLCB0cmFuc3BhcmVudCkgPT4ge1xuICAgICAgaWYgKGlzTm9uTnVsbGFibGUodHJhbnNwYXJlbnQucXVlcnlTZWxlY3RvcihibG9ja3NTZWxlY3RvcikpKSB7XG4gICAgICAgIHRyYW5zcGFyZW50LnNldEF0dHJpYnV0ZSh0cmFuc3BhcmVudEJsb2NrQXR0ciwgJ3RydWUnKTtcbiAgICAgICAgaWYgKHRyYW5zcGFyZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1tY2Utc2VsZWN0ZWQnKSA9PT0gJ2lubGluZS1ib3VuZGFyeScpIHtcbiAgICAgICAgICB0cmFuc3BhcmVudC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbWNlLXNlbGVjdGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc3BhcmVudC5yZW1vdmVBdHRyaWJ1dGUodHJhbnNwYXJlbnRCbG9ja0F0dHIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVCbG9ja1N0YXRlT25DaGlsZHJlbiA9IChzY2hlbWEsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCB0cmFuc3BhcmVudFNlbGVjdG9yID0gbWFrZVNlbGVjdG9yRnJvbVNjaGVtYU1hcChzY2hlbWEuZ2V0VHJhbnNwYXJlbnRFbGVtZW50cygpKTtcbiAgICAgIGNvbnN0IGJsb2Nrc1NlbGVjdG9yID0gbWFrZVNlbGVjdG9yRnJvbVNjaGVtYU1hcChzY2hlbWEuZ2V0QmxvY2tFbGVtZW50cygpKTtcbiAgICAgIHJldHVybiBmaWx0ZXIkNShzY29wZS5xdWVyeVNlbGVjdG9yQWxsKHRyYW5zcGFyZW50U2VsZWN0b3IpLCB0cmFuc3BhcmVudCA9PiB1cGRhdGVUcmFuc3BhcmVudChibG9ja3NTZWxlY3RvciwgdHJhbnNwYXJlbnQpKTtcbiAgICB9O1xuICAgIGNvbnN0IHRyaW1FZGdlID0gKGVsLCBsZWZ0U2lkZSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgY2hpbGRQcm9wZXJ0eU5hbWUgPSBsZWZ0U2lkZSA/ICdsYXN0Q2hpbGQnIDogJ2ZpcnN0Q2hpbGQnO1xuICAgICAgZm9yIChsZXQgY2hpbGQgPSBlbFtjaGlsZFByb3BlcnR5TmFtZV07IGNoaWxkOyBjaGlsZCA9IGNoaWxkW2NoaWxkUHJvcGVydHlOYW1lXSkge1xuICAgICAgICBpZiAoaXNFbXB0eSQyKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGNoaWxkKSkpIHtcbiAgICAgICAgICAoX2EgPSBjaGlsZC5wYXJlbnROb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc3BsaXQkMiA9IChwYXJlbnRFbG0sIHNwbGl0RWxtKSA9PiB7XG4gICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICBjb25zdCBwYXJlbnROb2RlID0gcGFyZW50RWxtLnBhcmVudE5vZGU7XG4gICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICByYW5nZS5zZXRTdGFydEJlZm9yZShwYXJlbnRFbG0pO1xuICAgICAgICByYW5nZS5zZXRFbmRCZWZvcmUoc3BsaXRFbG0pO1xuICAgICAgICBjb25zdCBiZWZvcmVGcmFnbWVudCA9IHJhbmdlLmV4dHJhY3RDb250ZW50cygpO1xuICAgICAgICB0cmltRWRnZShiZWZvcmVGcmFnbWVudCwgdHJ1ZSk7XG4gICAgICAgIHJhbmdlLnNldFN0YXJ0QWZ0ZXIoc3BsaXRFbG0pO1xuICAgICAgICByYW5nZS5zZXRFbmRBZnRlcihwYXJlbnRFbG0pO1xuICAgICAgICBjb25zdCBhZnRlckZyYWdtZW50ID0gcmFuZ2UuZXh0cmFjdENvbnRlbnRzKCk7XG4gICAgICAgIHRyaW1FZGdlKGFmdGVyRnJhZ21lbnQsIGZhbHNlKTtcbiAgICAgICAgaWYgKCFpc0VtcHR5JDIoU3VnYXJFbGVtZW50LmZyb21Eb20oYmVmb3JlRnJhZ21lbnQpKSkge1xuICAgICAgICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGJlZm9yZUZyYWdtZW50LCBwYXJlbnRFbG0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFbXB0eSQyKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHNwbGl0RWxtKSkpIHtcbiAgICAgICAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShzcGxpdEVsbSwgcGFyZW50RWxtKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRW1wdHkkMihTdWdhckVsZW1lbnQuZnJvbURvbShhZnRlckZyYWdtZW50KSkpIHtcbiAgICAgICAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShhZnRlckZyYWdtZW50LCBwYXJlbnRFbG0pO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocGFyZW50RWxtKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNwbGl0SW52YWxpZENoaWxkcmVuID0gKHNjaGVtYSwgc2NvcGUsIHRyYW5zcGFyZW50QmxvY2tzKSA9PiB7XG4gICAgICBjb25zdCBibG9ja3NFbGVtZW50cyA9IHNjaGVtYS5nZXRCbG9ja0VsZW1lbnRzKCk7XG4gICAgICBjb25zdCByb290Tm9kZSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHNjb3BlKTtcbiAgICAgIGNvbnN0IGlzQmxvY2sgPSBlbCA9PiBuYW1lKGVsKSBpbiBibG9ja3NFbGVtZW50cztcbiAgICAgIGNvbnN0IGlzUm9vdCA9IGVsID0+IGVxKGVsLCByb290Tm9kZSk7XG4gICAgICBlYWNoJGUoZnJvbURvbSQxKHRyYW5zcGFyZW50QmxvY2tzKSwgdHJhbnNwYXJlbnRCbG9jayA9PiB7XG4gICAgICAgIGFuY2VzdG9yJDQodHJhbnNwYXJlbnRCbG9jaywgaXNCbG9jaywgaXNSb290KS5lYWNoKHBhcmVudEJsb2NrID0+IHtcbiAgICAgICAgICBjb25zdCBpbnZhbGlkQ2hpbGRyZW4gPSBjaGlsZHJlbih0cmFuc3BhcmVudEJsb2NrLCBlbCA9PiBpc0Jsb2NrKGVsKSAmJiAhc2NoZW1hLmlzVmFsaWRDaGlsZChuYW1lKHBhcmVudEJsb2NrKSwgbmFtZShlbCkpKTtcbiAgICAgICAgICBpZiAoaW52YWxpZENoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlU2NvcGUgPSBwYXJlbnRFbGVtZW50KHBhcmVudEJsb2NrKTtcbiAgICAgICAgICAgIGVhY2gkZShpbnZhbGlkQ2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgICAgICAgYW5jZXN0b3IkNChjaGlsZCwgaXNCbG9jaywgaXNSb290KS5lYWNoKHBhcmVudEJsb2NrID0+IHtcbiAgICAgICAgICAgICAgICBzcGxpdCQyKHBhcmVudEJsb2NrLmRvbSwgY2hpbGQuZG9tKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHN0YXRlU2NvcGUuZWFjaChzY29wZSA9PiB1cGRhdGVCbG9ja1N0YXRlT25DaGlsZHJlbihzY2hlbWEsIHNjb3BlLmRvbSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHVud3JhcEludmFsaWRDaGlsZHJlbiA9IChzY2hlbWEsIHNjb3BlLCB0cmFuc3BhcmVudEJsb2NrcykgPT4ge1xuICAgICAgZWFjaCRlKFtcbiAgICAgICAgLi4udHJhbnNwYXJlbnRCbG9ja3MsXG4gICAgICAgIC4uLmlzVHJhbnNwYXJlbnRCbG9jayhzY2hlbWEsIHNjb3BlKSA/IFtzY29wZV0gOiBbXVxuICAgICAgXSwgYmxvY2sgPT4gZWFjaCRlKGRlc2NlbmRhbnRzKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGJsb2NrKSwgYmxvY2subm9kZU5hbWUudG9Mb3dlckNhc2UoKSksIGVsbSA9PiB7XG4gICAgICAgIGlmIChpc1RyYW5zcGFyZW50SW5saW5lKHNjaGVtYSwgZWxtLmRvbSkpIHtcbiAgICAgICAgICB1bndyYXAoZWxtKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH07XG4gICAgY29uc3QgdXBkYXRlQ2hpbGRyZW4gPSAoc2NoZW1hLCBzY29wZSkgPT4ge1xuICAgICAgY29uc3QgdHJhbnNwYXJlbnRCbG9ja3MgPSB1cGRhdGVCbG9ja1N0YXRlT25DaGlsZHJlbihzY2hlbWEsIHNjb3BlKTtcbiAgICAgIHNwbGl0SW52YWxpZENoaWxkcmVuKHNjaGVtYSwgc2NvcGUsIHRyYW5zcGFyZW50QmxvY2tzKTtcbiAgICAgIHVud3JhcEludmFsaWRDaGlsZHJlbihzY2hlbWEsIHNjb3BlLCB0cmFuc3BhcmVudEJsb2Nrcyk7XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVFbGVtZW50ID0gKHNjaGVtYSwgdGFyZ2V0KSA9PiB7XG4gICAgICBpZiAoaXNUcmFuc3BhcmVudEVsZW1lbnQoc2NoZW1hLCB0YXJnZXQpKSB7XG4gICAgICAgIGNvbnN0IGJsb2Nrc1NlbGVjdG9yID0gbWFrZVNlbGVjdG9yRnJvbVNjaGVtYU1hcChzY2hlbWEuZ2V0QmxvY2tFbGVtZW50cygpKTtcbiAgICAgICAgdXBkYXRlVHJhbnNwYXJlbnQoYmxvY2tzU2VsZWN0b3IsIHRhcmdldCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVDYXJldCA9IChzY2hlbWEsIHJvb3QsIGNhcmV0UGFyZW50KSA9PiB7XG4gICAgICBjb25zdCBpc1Jvb3QgPSBlbCA9PiBlcShlbCwgU3VnYXJFbGVtZW50LmZyb21Eb20ocm9vdCkpO1xuICAgICAgY29uc3QgcGFyZW50cyA9IHBhcmVudHMkMShTdWdhckVsZW1lbnQuZnJvbURvbShjYXJldFBhcmVudCksIGlzUm9vdCk7XG4gICAgICBnZXQkYihwYXJlbnRzLCBwYXJlbnRzLmxlbmd0aCAtIDIpLmZpbHRlcihpc0VsZW1lbnQkNykuZm9sZCgoKSA9PiB1cGRhdGVDaGlsZHJlbihzY2hlbWEsIHJvb3QpLCBzY29wZSA9PiB1cGRhdGVDaGlsZHJlbihzY2hlbWEsIHNjb3BlLmRvbSkpO1xuICAgIH07XG4gICAgY29uc3QgaGFzQmxvY2tBdHRyID0gZWwgPT4gZWwuaGFzQXR0cmlidXRlKHRyYW5zcGFyZW50QmxvY2tBdHRyKTtcbiAgICBjb25zdCBpc1RyYW5zcGFyZW50RWxlbWVudE5hbWUgPSAoc2NoZW1hLCBuYW1lKSA9PiBoYXMkMihzY2hlbWEuZ2V0VHJhbnNwYXJlbnRFbGVtZW50cygpLCBuYW1lKTtcbiAgICBjb25zdCBpc1RyYW5zcGFyZW50RWxlbWVudCA9IChzY2hlbWEsIG5vZGUpID0+IGlzRWxlbWVudCQ2KG5vZGUpICYmIGlzVHJhbnNwYXJlbnRFbGVtZW50TmFtZShzY2hlbWEsIG5vZGUubm9kZU5hbWUpO1xuICAgIGNvbnN0IGlzVHJhbnNwYXJlbnRCbG9jayA9IChzY2hlbWEsIG5vZGUpID0+IGlzVHJhbnNwYXJlbnRFbGVtZW50KHNjaGVtYSwgbm9kZSkgJiYgaGFzQmxvY2tBdHRyKG5vZGUpO1xuICAgIGNvbnN0IGlzVHJhbnNwYXJlbnRJbmxpbmUgPSAoc2NoZW1hLCBub2RlKSA9PiBpc1RyYW5zcGFyZW50RWxlbWVudChzY2hlbWEsIG5vZGUpICYmICFoYXNCbG9ja0F0dHIobm9kZSk7XG4gICAgY29uc3QgaXNUcmFuc3BhcmVudEFzdEJsb2NrID0gKHNjaGVtYSwgbm9kZSkgPT4gbm9kZS50eXBlID09PSAxICYmIGlzVHJhbnNwYXJlbnRFbGVtZW50TmFtZShzY2hlbWEsIG5vZGUubmFtZSkgJiYgaXNTdHJpbmcobm9kZS5hdHRyKHRyYW5zcGFyZW50QmxvY2tBdHRyKSk7XG5cbiAgICBjb25zdCBicm93c2VyJDIgPSBkZXRlY3QkMigpLmJyb3dzZXI7XG4gICAgY29uc3QgZmlyc3RFbGVtZW50ID0gbm9kZXMgPT4gZmluZCQyKG5vZGVzLCBpc0VsZW1lbnQkNyk7XG4gICAgY29uc3QgZ2V0VGFibGVDYXB0aW9uRGVsdGFZID0gZWxtID0+IHtcbiAgICAgIGlmIChicm93c2VyJDIuaXNGaXJlZm94KCkgJiYgbmFtZShlbG0pID09PSAndGFibGUnKSB7XG4gICAgICAgIHJldHVybiBmaXJzdEVsZW1lbnQoY2hpbGRyZW4kMShlbG0pKS5maWx0ZXIoZWxtID0+IHtcbiAgICAgICAgICByZXR1cm4gbmFtZShlbG0pID09PSAnY2FwdGlvbic7XG4gICAgICAgIH0pLmJpbmQoY2FwdGlvbiA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZpcnN0RWxlbWVudChuZXh0U2libGluZ3MoY2FwdGlvbikpLm1hcChib2R5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHlUb3AgPSBib2R5LmRvbS5vZmZzZXRUb3A7XG4gICAgICAgICAgICBjb25zdCBjYXB0aW9uVG9wID0gY2FwdGlvbi5kb20ub2Zmc2V0VG9wO1xuICAgICAgICAgICAgY29uc3QgY2FwdGlvbkhlaWdodCA9IGNhcHRpb24uZG9tLm9mZnNldEhlaWdodDtcbiAgICAgICAgICAgIHJldHVybiBib2R5VG9wIDw9IGNhcHRpb25Ub3AgPyAtY2FwdGlvbkhlaWdodCA6IDA7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLmdldE9yKDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoYXNDaGlsZCA9IChlbG0sIGNoaWxkKSA9PiBlbG0uY2hpbGRyZW4gJiYgY29udGFpbnMkMihlbG0uY2hpbGRyZW4sIGNoaWxkKTtcbiAgICBjb25zdCBnZXRQb3MgPSAoYm9keSwgZWxtLCByb290RWxtKSA9PiB7XG4gICAgICBsZXQgeCA9IDAsIHkgPSAwO1xuICAgICAgY29uc3QgZG9jID0gYm9keS5vd25lckRvY3VtZW50O1xuICAgICAgcm9vdEVsbSA9IHJvb3RFbG0gPyByb290RWxtIDogYm9keTtcbiAgICAgIGlmIChlbG0pIHtcbiAgICAgICAgaWYgKHJvb3RFbG0gPT09IGJvZHkgJiYgZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAmJiBnZXQkNyhTdWdhckVsZW1lbnQuZnJvbURvbShib2R5KSwgJ3Bvc2l0aW9uJykgPT09ICdzdGF0aWMnKSB7XG4gICAgICAgICAgY29uc3QgcG9zID0gZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgIHggPSBwb3MubGVmdCArIChkb2MuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgfHwgYm9keS5zY3JvbGxMZWZ0KSAtIGRvYy5kb2N1bWVudEVsZW1lbnQuY2xpZW50TGVmdDtcbiAgICAgICAgICB5ID0gcG9zLnRvcCArIChkb2MuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCB8fCBib2R5LnNjcm9sbFRvcCkgLSBkb2MuZG9jdW1lbnRFbGVtZW50LmNsaWVudFRvcDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeCxcbiAgICAgICAgICAgIHlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCBvZmZzZXRQYXJlbnQgPSBlbG07XG4gICAgICAgIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0UGFyZW50ICE9PSByb290RWxtICYmIG9mZnNldFBhcmVudC5ub2RlVHlwZSAmJiAhaGFzQ2hpbGQob2Zmc2V0UGFyZW50LCByb290RWxtKSkge1xuICAgICAgICAgIGNvbnN0IGNhc3RPZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQ7XG4gICAgICAgICAgeCArPSBjYXN0T2Zmc2V0UGFyZW50Lm9mZnNldExlZnQgfHwgMDtcbiAgICAgICAgICB5ICs9IGNhc3RPZmZzZXRQYXJlbnQub2Zmc2V0VG9wIHx8IDA7XG4gICAgICAgICAgb2Zmc2V0UGFyZW50ID0gY2FzdE9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgb2Zmc2V0UGFyZW50ID0gZWxtLnBhcmVudE5vZGU7XG4gICAgICAgIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0UGFyZW50ICE9PSByb290RWxtICYmIG9mZnNldFBhcmVudC5ub2RlVHlwZSAmJiAhaGFzQ2hpbGQob2Zmc2V0UGFyZW50LCByb290RWxtKSkge1xuICAgICAgICAgIHggLT0gb2Zmc2V0UGFyZW50LnNjcm9sbExlZnQgfHwgMDtcbiAgICAgICAgICB5IC09IG9mZnNldFBhcmVudC5zY3JvbGxUb3AgfHwgMDtcbiAgICAgICAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICB5ICs9IGdldFRhYmxlQ2FwdGlvbkRlbHRhWShTdWdhckVsZW1lbnQuZnJvbURvbShlbG0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IFN0eWxlU2hlZXRMb2FkZXIgPSAoZG9jdW1lbnRPclNoYWRvd1Jvb3QsIHNldHRpbmdzID0ge30pID0+IHtcbiAgICAgIGxldCBpZENvdW50ID0gMDtcbiAgICAgIGNvbnN0IGxvYWRlZFN0YXRlcyA9IHt9O1xuICAgICAgY29uc3QgZWRvcyA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGRvY3VtZW50T3JTaGFkb3dSb290KTtcbiAgICAgIGNvbnN0IGRvYyA9IGRvY3VtZW50T3JPd25lcihlZG9zKTtcbiAgICAgIGNvbnN0IF9zZXRSZWZlcnJlclBvbGljeSA9IHJlZmVycmVyUG9saWN5ID0+IHtcbiAgICAgICAgc2V0dGluZ3MucmVmZXJyZXJQb2xpY3kgPSByZWZlcnJlclBvbGljeTtcbiAgICAgIH07XG4gICAgICBjb25zdCBfc2V0Q29udGVudENzc0NvcnMgPSBjb250ZW50Q3NzQ29ycyA9PiB7XG4gICAgICAgIHNldHRpbmdzLmNvbnRlbnRDc3NDb3JzID0gY29udGVudENzc0NvcnM7XG4gICAgICB9O1xuICAgICAgY29uc3QgYWRkU3R5bGUgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgYXBwZW5kJDEoZ2V0U3R5bGVDb250YWluZXIoZWRvcyksIGVsZW1lbnQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlbW92ZVN0eWxlID0gaWQgPT4ge1xuICAgICAgICBjb25zdCBzdHlsZUNvbnRhaW5lciA9IGdldFN0eWxlQ29udGFpbmVyKGVkb3MpO1xuICAgICAgICBkZXNjZW5kYW50KHN0eWxlQ29udGFpbmVyLCAnIycgKyBpZCkuZWFjaChyZW1vdmUkNSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0T3JDcmVhdGVTdGF0ZSA9IHVybCA9PiBnZXQkYShsb2FkZWRTdGF0ZXMsIHVybCkuZ2V0T3JUaHVuaygoKSA9PiAoe1xuICAgICAgICBpZDogJ21jZS11JyArIGlkQ291bnQrKyxcbiAgICAgICAgcGFzc2VkOiBbXSxcbiAgICAgICAgZmFpbGVkOiBbXSxcbiAgICAgICAgY291bnQ6IDBcbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IGxvYWQgPSB1cmwgPT4gbmV3IFByb21pc2UoKHN1Y2Nlc3MsIGZhaWx1cmUpID0+IHtcbiAgICAgICAgbGV0IGxpbms7XG4gICAgICAgIGNvbnN0IHVybFdpdGhTdWZmaXggPSBUb29scy5fYWRkQ2FjaGVTdWZmaXgodXJsKTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBnZXRPckNyZWF0ZVN0YXRlKHVybFdpdGhTdWZmaXgpO1xuICAgICAgICBsb2FkZWRTdGF0ZXNbdXJsV2l0aFN1ZmZpeF0gPSBzdGF0ZTtcbiAgICAgICAgc3RhdGUuY291bnQrKztcbiAgICAgICAgY29uc3QgcmVzb2x2ZSA9IChjYWxsYmFja3MsIHN0YXR1cykgPT4ge1xuICAgICAgICAgIGVhY2gkZShjYWxsYmFja3MsIGNhbGwpO1xuICAgICAgICAgIHN0YXRlLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgICBzdGF0ZS5wYXNzZWQgPSBbXTtcbiAgICAgICAgICBzdGF0ZS5mYWlsZWQgPSBbXTtcbiAgICAgICAgICBpZiAobGluaykge1xuICAgICAgICAgICAgbGluay5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgbGluay5vbmVycm9yID0gbnVsbDtcbiAgICAgICAgICAgIGxpbmsgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcGFzc2VkID0gKCkgPT4gcmVzb2x2ZShzdGF0ZS5wYXNzZWQsIDIpO1xuICAgICAgICBjb25zdCBmYWlsZWQgPSAoKSA9PiByZXNvbHZlKHN0YXRlLmZhaWxlZCwgMyk7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgc3RhdGUucGFzc2VkLnB1c2goc3VjY2Vzcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZhaWx1cmUpIHtcbiAgICAgICAgICBzdGF0ZS5mYWlsZWQucHVzaChmYWlsdXJlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUuc3RhdHVzID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZS5zdGF0dXMgPT09IDIpIHtcbiAgICAgICAgICBwYXNzZWQoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlLnN0YXR1cyA9PT0gMykge1xuICAgICAgICAgIGZhaWxlZCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5zdGF0dXMgPSAxO1xuICAgICAgICBjb25zdCBsaW5rRWxlbSA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdsaW5rJywgZG9jLmRvbSk7XG4gICAgICAgIHNldEFsbCQxKGxpbmtFbGVtLCB7XG4gICAgICAgICAgcmVsOiAnc3R5bGVzaGVldCcsXG4gICAgICAgICAgdHlwZTogJ3RleHQvY3NzJyxcbiAgICAgICAgICBpZDogc3RhdGUuaWRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChzZXR0aW5ncy5jb250ZW50Q3NzQ29ycykge1xuICAgICAgICAgIHNldCQzKGxpbmtFbGVtLCAnY3Jvc3NPcmlnaW4nLCAnYW5vbnltb3VzJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNldHRpbmdzLnJlZmVycmVyUG9saWN5KSB7XG4gICAgICAgICAgc2V0JDMobGlua0VsZW0sICdyZWZlcnJlcnBvbGljeScsIHNldHRpbmdzLnJlZmVycmVyUG9saWN5KTtcbiAgICAgICAgfVxuICAgICAgICBsaW5rID0gbGlua0VsZW0uZG9tO1xuICAgICAgICBsaW5rLm9ubG9hZCA9IHBhc3NlZDtcbiAgICAgICAgbGluay5vbmVycm9yID0gZmFpbGVkO1xuICAgICAgICBhZGRTdHlsZShsaW5rRWxlbSk7XG4gICAgICAgIHNldCQzKGxpbmtFbGVtLCAnaHJlZicsIHVybFdpdGhTdWZmaXgpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBsb2FkQWxsID0gdXJscyA9PiB7XG4gICAgICAgIGNvbnN0IGxvYWRlZFVybHMgPSBQcm9taXNlLmFsbFNldHRsZWQobWFwJDModXJscywgdXJsID0+IGxvYWQodXJsKS50aGVuKGNvbnN0YW50KHVybCkpKSk7XG4gICAgICAgIHJldHVybiBsb2FkZWRVcmxzLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgY29uc3QgcGFydHMgPSBwYXJ0aXRpb24kMihyZXN1bHRzLCByID0+IHIuc3RhdHVzID09PSAnZnVsZmlsbGVkJyk7XG4gICAgICAgICAgaWYgKHBhcnRzLmZhaWwubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG1hcCQzKHBhcnRzLmZhaWwsIHJlc3VsdCA9PiByZXN1bHQucmVhc29uKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBtYXAkMyhwYXJ0cy5wYXNzLCByZXN1bHQgPT4gcmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVubG9hZCA9IHVybCA9PiB7XG4gICAgICAgIGNvbnN0IHVybFdpdGhTdWZmaXggPSBUb29scy5fYWRkQ2FjaGVTdWZmaXgodXJsKTtcbiAgICAgICAgZ2V0JGEobG9hZGVkU3RhdGVzLCB1cmxXaXRoU3VmZml4KS5lYWNoKHN0YXRlID0+IHtcbiAgICAgICAgICBjb25zdCBjb3VudCA9IC0tc3RhdGUuY291bnQ7XG4gICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICBkZWxldGUgbG9hZGVkU3RhdGVzW3VybFdpdGhTdWZmaXhdO1xuICAgICAgICAgICAgcmVtb3ZlU3R5bGUoc3RhdGUuaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdW5sb2FkQWxsID0gdXJscyA9PiB7XG4gICAgICAgIGVhY2gkZSh1cmxzLCB1cmwgPT4ge1xuICAgICAgICAgIHVubG9hZCh1cmwpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsb2FkLFxuICAgICAgICBsb2FkQWxsLFxuICAgICAgICB1bmxvYWQsXG4gICAgICAgIHVubG9hZEFsbCxcbiAgICAgICAgX3NldFJlZmVycmVyUG9saWN5LFxuICAgICAgICBfc2V0Q29udGVudENzc0NvcnNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGNyZWF0ZSRkID0gKCkgPT4ge1xuICAgICAgY29uc3QgbWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgIGNvbnN0IGZvckVsZW1lbnQgPSAocmVmZXJlbmNlRWxlbWVudCwgc2V0dGluZ3MpID0+IHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IGdldFJvb3ROb2RlKHJlZmVyZW5jZUVsZW1lbnQpO1xuICAgICAgICBjb25zdCByb290RG9tID0gcm9vdC5kb207XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKG1hcC5nZXQocm9vdERvbSkpLmdldE9yVGh1bmsoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNsID0gU3R5bGVTaGVldExvYWRlcihyb290RG9tLCBzZXR0aW5ncyk7XG4gICAgICAgICAgbWFwLnNldChyb290RG9tLCBzbCk7XG4gICAgICAgICAgcmV0dXJuIHNsO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBmb3JFbGVtZW50IH07XG4gICAgfTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGNyZWF0ZSRkKCk7XG5cbiAgICBjb25zdCBpc1NwYW4gPSBub2RlID0+IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3NwYW4nO1xuICAgIGNvbnN0IGlzSW5saW5lQ29udGVudCA9IChub2RlLCByb290KSA9PiBpc05vbk51bGxhYmxlKG5vZGUpICYmIChpc0NvbnRlbnQkMShub2RlLCByb290KSB8fCBpc0lubGluZSQxKFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5vZGUpKSk7XG4gICAgY29uc3Qgc3Vycm91bmRlZEJ5SW5saW5lQ29udGVudCA9IChub2RlLCByb290KSA9PiB7XG4gICAgICBjb25zdCBwcmV2ID0gbmV3IERvbVRyZWVXYWxrZXIobm9kZSwgcm9vdCkucHJldihmYWxzZSk7XG4gICAgICBjb25zdCBuZXh0ID0gbmV3IERvbVRyZWVXYWxrZXIobm9kZSwgcm9vdCkubmV4dChmYWxzZSk7XG4gICAgICBjb25zdCBwcmV2SXNJbmxpbmUgPSBpc1VuZGVmaW5lZChwcmV2KSB8fCBpc0lubGluZUNvbnRlbnQocHJldiwgcm9vdCk7XG4gICAgICBjb25zdCBuZXh0SXNJbmxpbmUgPSBpc1VuZGVmaW5lZChuZXh0KSB8fCBpc0lubGluZUNvbnRlbnQobmV4dCwgcm9vdCk7XG4gICAgICByZXR1cm4gcHJldklzSW5saW5lICYmIG5leHRJc0lubGluZTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQm9va21hcmtOb2RlJDIgPSBub2RlID0+IGlzU3Bhbihub2RlKSAmJiBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1tY2UtdHlwZScpID09PSAnYm9va21hcmsnO1xuICAgIGNvbnN0IGlzS2VlcFRleHROb2RlID0gKG5vZGUsIHJvb3QpID0+IGlzVGV4dCRhKG5vZGUpICYmIG5vZGUuZGF0YS5sZW5ndGggPiAwICYmIHN1cnJvdW5kZWRCeUlubGluZUNvbnRlbnQobm9kZSwgcm9vdCk7XG4gICAgY29uc3QgaXNLZWVwRWxlbWVudCA9IG5vZGUgPT4gaXNFbGVtZW50JDYobm9kZSkgPyBub2RlLmNoaWxkTm9kZXMubGVuZ3RoID4gMCA6IGZhbHNlO1xuICAgIGNvbnN0IGlzRG9jdW1lbnQgPSBub2RlID0+IGlzRG9jdW1lbnRGcmFnbWVudChub2RlKSB8fCBpc0RvY3VtZW50JDEobm9kZSk7XG4gICAgY29uc3QgdHJpbU5vZGUgPSAoZG9tLCBub2RlLCByb290KSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCByb290Tm9kZSA9IHJvb3QgfHwgbm9kZTtcbiAgICAgIGlmIChpc0VsZW1lbnQkNihub2RlKSAmJiBpc0Jvb2ttYXJrTm9kZSQyKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfVxuICAgICAgY29uc3QgY2hpbGRyZW4gPSBub2RlLmNoaWxkTm9kZXM7XG4gICAgICBmb3IgKGxldCBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdHJpbU5vZGUoZG9tLCBjaGlsZHJlbltpXSwgcm9vdE5vZGUpO1xuICAgICAgfVxuICAgICAgaWYgKGlzRWxlbWVudCQ2KG5vZGUpKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDaGlsZHJlbiA9IG5vZGUuY2hpbGROb2RlcztcbiAgICAgICAgaWYgKGN1cnJlbnRDaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgaXNCb29rbWFya05vZGUkMihjdXJyZW50Q2hpbGRyZW5bMF0pKSB7XG4gICAgICAgICAgKF9hID0gbm9kZS5wYXJlbnROb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaW5zZXJ0QmVmb3JlKGN1cnJlbnRDaGlsZHJlblswXSwgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghaXNEb2N1bWVudChub2RlKSAmJiAhaXNDb250ZW50JDEobm9kZSwgcm9vdE5vZGUpICYmICFpc0tlZXBFbGVtZW50KG5vZGUpICYmICFpc0tlZXBUZXh0Tm9kZShub2RlLCByb290Tm9kZSkpIHtcbiAgICAgICAgZG9tLnJlbW92ZShub2RlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlO1xuICAgIH07XG5cbiAgICBjb25zdCBtYWtlTWFwJDMgPSBUb29scy5tYWtlTWFwO1xuICAgIGNvbnN0IGF0dHJzQ2hhcnNSZWdFeHAgPSAvWyY8PlxcXCJcXHUwMDYwXFx1MDA3RS1cXHVEN0ZGXFx1RTAwMC1cXHVGRkVGXXxbXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdL2c7XG4gICAgY29uc3QgdGV4dENoYXJzUmVnRXhwID0gL1s8PiZcXHUwMDdFLVxcdUQ3RkZcXHVFMDAwLVxcdUZGRUZdfFtcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0vZztcbiAgICBjb25zdCByYXdDaGFyc1JlZ0V4cCA9IC9bPD4mXFxcIlxcJ10vZztcbiAgICBjb25zdCBlbnRpdHlSZWdFeHAgPSAvJiMoW2EtejAtOV0rKTs/fCYoW2EtejAtOV0rKTsvZ2k7XG4gICAgY29uc3QgYXNjaWlNYXAgPSB7XG4gICAgICAxMjg6ICdcXHUyMEFDJyxcbiAgICAgIDEzMDogJ1xcdTIwMUEnLFxuICAgICAgMTMxOiAnXFx1MDE5MicsXG4gICAgICAxMzI6ICdcXHUyMDFFJyxcbiAgICAgIDEzMzogJ1xcdTIwMjYnLFxuICAgICAgMTM0OiAnXFx1MjAyMCcsXG4gICAgICAxMzU6ICdcXHUyMDIxJyxcbiAgICAgIDEzNjogJ1xcdTAyYzYnLFxuICAgICAgMTM3OiAnXFx1MjAzMCcsXG4gICAgICAxMzg6ICdcXHUwMTYwJyxcbiAgICAgIDEzOTogJ1xcdTIwMzknLFxuICAgICAgMTQwOiAnXFx1MDE1MicsXG4gICAgICAxNDI6ICdcXHUwMTdkJyxcbiAgICAgIDE0NTogJ1xcdTIwMTgnLFxuICAgICAgMTQ2OiAnXFx1MjAxOScsXG4gICAgICAxNDc6ICdcXHUyMDFDJyxcbiAgICAgIDE0ODogJ1xcdTIwMUQnLFxuICAgICAgMTQ5OiAnXFx1MjAyMicsXG4gICAgICAxNTA6ICdcXHUyMDEzJyxcbiAgICAgIDE1MTogJ1xcdTIwMTQnLFxuICAgICAgMTUyOiAnXFx1MDJEQycsXG4gICAgICAxNTM6ICdcXHUyMTIyJyxcbiAgICAgIDE1NDogJ1xcdTAxNjEnLFxuICAgICAgMTU1OiAnXFx1MjAzQScsXG4gICAgICAxNTY6ICdcXHUwMTUzJyxcbiAgICAgIDE1ODogJ1xcdTAxN2UnLFxuICAgICAgMTU5OiAnXFx1MDE3OCdcbiAgICB9O1xuICAgIGNvbnN0IGJhc2VFbnRpdGllcyA9IHtcbiAgICAgICdcIic6ICcmcXVvdDsnLFxuICAgICAgJ1xcJyc6ICcmIzM5OycsXG4gICAgICAnPCc6ICcmbHQ7JyxcbiAgICAgICc+JzogJyZndDsnLFxuICAgICAgJyYnOiAnJmFtcDsnLFxuICAgICAgJ2AnOiAnJiM5NjsnXG4gICAgfTtcbiAgICBjb25zdCByZXZlcnNlRW50aXRpZXMgPSB7XG4gICAgICAnJmx0Oyc6ICc8JyxcbiAgICAgICcmZ3Q7JzogJz4nLFxuICAgICAgJyZhbXA7JzogJyYnLFxuICAgICAgJyZxdW90Oyc6ICdcIicsXG4gICAgICAnJmFwb3M7JzogYCdgXG4gICAgfTtcbiAgICBjb25zdCBuYXRpdmVEZWNvZGUgPSB0ZXh0ID0+IHtcbiAgICAgIGNvbnN0IGVsbSA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdkaXYnKS5kb207XG4gICAgICBlbG0uaW5uZXJIVE1MID0gdGV4dDtcbiAgICAgIHJldHVybiBlbG0udGV4dENvbnRlbnQgfHwgZWxtLmlubmVyVGV4dCB8fCB0ZXh0O1xuICAgIH07XG4gICAgY29uc3QgYnVpbGRFbnRpdGllc0xvb2t1cCA9IChpdGVtcywgcmFkaXgpID0+IHtcbiAgICAgIGNvbnN0IGxvb2t1cCA9IHt9O1xuICAgICAgaWYgKGl0ZW1zKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1MaXN0ID0gaXRlbXMuc3BsaXQoJywnKTtcbiAgICAgICAgcmFkaXggPSByYWRpeCB8fCAxMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtTGlzdC5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgIGNvbnN0IGNociA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoaXRlbUxpc3RbaV0sIHJhZGl4KSk7XG4gICAgICAgICAgaWYgKCFiYXNlRW50aXRpZXNbY2hyXSkge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gJyYnICsgaXRlbUxpc3RbaSArIDFdICsgJzsnO1xuICAgICAgICAgICAgbG9va3VwW2Nocl0gPSBlbnRpdHk7XG4gICAgICAgICAgICBsb29rdXBbZW50aXR5XSA9IGNocjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvb2t1cDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBuYW1lZEVudGl0aWVzID0gYnVpbGRFbnRpdGllc0xvb2t1cCgnNTAsbmJzcCw1MSxpZXhjbCw1MixjZW50LDUzLHBvdW5kLDU0LGN1cnJlbiw1NSx5ZW4sNTYsYnJ2YmFyLDU3LHNlY3QsNTgsdW1sLDU5LGNvcHksJyArICc1YSxvcmRmLDViLGxhcXVvLDVjLG5vdCw1ZCxzaHksNWUscmVnLDVmLG1hY3IsNWcsZGVnLDVoLHBsdXNtbiw1aSxzdXAyLDVqLHN1cDMsNWssYWN1dGUsJyArICc1bCxtaWNybyw1bSxwYXJhLDVuLG1pZGRvdCw1byxjZWRpbCw1cCxzdXAxLDVxLG9yZG0sNXIscmFxdW8sNXMsZnJhYzE0LDV0LGZyYWMxMiw1dSxmcmFjMzQsJyArICc1dixpcXVlc3QsNjAsQWdyYXZlLDYxLEFhY3V0ZSw2MixBY2lyYyw2MyxBdGlsZGUsNjQsQXVtbCw2NSxBcmluZyw2NixBRWxpZyw2NyxDY2VkaWwsJyArICc2OCxFZ3JhdmUsNjksRWFjdXRlLDZhLEVjaXJjLDZiLEV1bWwsNmMsSWdyYXZlLDZkLElhY3V0ZSw2ZSxJY2lyYyw2ZixJdW1sLDZnLEVUSCw2aCxOdGlsZGUsJyArICc2aSxPZ3JhdmUsNmosT2FjdXRlLDZrLE9jaXJjLDZsLE90aWxkZSw2bSxPdW1sLDZuLHRpbWVzLDZvLE9zbGFzaCw2cCxVZ3JhdmUsNnEsVWFjdXRlLCcgKyAnNnIsVWNpcmMsNnMsVXVtbCw2dCxZYWN1dGUsNnUsVEhPUk4sNnYsc3psaWcsNzAsYWdyYXZlLDcxLGFhY3V0ZSw3MixhY2lyYyw3MyxhdGlsZGUsNzQsYXVtbCwnICsgJzc1LGFyaW5nLDc2LGFlbGlnLDc3LGNjZWRpbCw3OCxlZ3JhdmUsNzksZWFjdXRlLDdhLGVjaXJjLDdiLGV1bWwsN2MsaWdyYXZlLDdkLGlhY3V0ZSw3ZSxpY2lyYywnICsgJzdmLGl1bWwsN2csZXRoLDdoLG50aWxkZSw3aSxvZ3JhdmUsN2osb2FjdXRlLDdrLG9jaXJjLDdsLG90aWxkZSw3bSxvdW1sLDduLGRpdmlkZSw3byxvc2xhc2gsJyArICc3cCx1Z3JhdmUsN3EsdWFjdXRlLDdyLHVjaXJjLDdzLHV1bWwsN3QseWFjdXRlLDd1LHRob3JuLDd2LHl1bWwsY2ksZm5vZixzaCxBbHBoYSxzaSxCZXRhLCcgKyAnc2osR2FtbWEsc2ssRGVsdGEsc2wsRXBzaWxvbixzbSxaZXRhLHNuLEV0YSxzbyxUaGV0YSxzcCxJb3RhLHNxLEthcHBhLHNyLExhbWJkYSxzcyxNdSwnICsgJ3N0LE51LHN1LFhpLHN2LE9taWNyb24sdDAsUGksdDEsUmhvLHQzLFNpZ21hLHQ0LFRhdSx0NSxVcHNpbG9uLHQ2LFBoaSx0NyxDaGksdDgsUHNpLCcgKyAndDksT21lZ2EsdGgsYWxwaGEsdGksYmV0YSx0aixnYW1tYSx0ayxkZWx0YSx0bCxlcHNpbG9uLHRtLHpldGEsdG4sZXRhLHRvLHRoZXRhLHRwLGlvdGEsJyArICd0cSxrYXBwYSx0cixsYW1iZGEsdHMsbXUsdHQsbnUsdHUseGksdHYsb21pY3Jvbix1MCxwaSx1MSxyaG8sdTIsc2lnbWFmLHUzLHNpZ21hLHU0LHRhdSwnICsgJ3U1LHVwc2lsb24sdTYscGhpLHU3LGNoaSx1OCxwc2ksdTksb21lZ2EsdWgsdGhldGFzeW0sdWksdXBzaWgsdW0scGl2LDgxMixidWxsLDgxNixoZWxsaXAsJyArICc4MWkscHJpbWUsODFqLFByaW1lLDgxdSxvbGluZSw4MjQsZnJhc2wsODhvLHdlaWVycCw4OGgsaW1hZ2UsODhzLHJlYWwsODkyLHRyYWRlLDg5bCxhbGVmc3ltLCcgKyAnOGNnLGxhcnIsOGNoLHVhcnIsOGNpLHJhcnIsOGNqLGRhcnIsOGNrLGhhcnIsOGRsLGNyYXJyLDhlZyxsQXJyLDhlaCx1QXJyLDhlaSxyQXJyLDhlaixkQXJyLCcgKyAnOGVrLGhBcnIsOGcwLGZvcmFsbCw4ZzIscGFydCw4ZzMsZXhpc3QsOGc1LGVtcHR5LDhnNyxuYWJsYSw4ZzgsaXNpbiw4Zzksbm90aW4sOGdiLG5pLDhnZixwcm9kLCcgKyAnOGdoLHN1bSw4Z2ksbWludXMsOGduLGxvd2FzdCw4Z3EscmFkaWMsOGd0LHByb3AsOGd1LGluZmluLDhoMCxhbmcsOGg3LGFuZCw4aDgsb3IsOGg5LGNhcCw4aGEsY3VwLCcgKyAnOGhiLGludCw4aGssdGhlcmU0LDhocyxzaW0sOGk1LGNvbmcsOGk4LGFzeW1wLDhqMCxuZSw4ajEsZXF1aXYsOGo0LGxlLDhqNSxnZSw4azIsc3ViLDhrMyxzdXAsOGs0LCcgKyAnbnN1Yiw4azYsc3ViZSw4azcsc3VwZSw4a2wsb3BsdXMsOGtuLG90aW1lcyw4bDUscGVycCw4bTUsc2RvdCw4bzgsbGNlaWwsOG85LHJjZWlsLDhvYSxsZmxvb3IsOG9iLCcgKyAncmZsb29yLDhwOSxsYW5nLDhwYSxyYW5nLDllYSxsb3osOWowLHNwYWRlcyw5ajMsY2x1YnMsOWo1LGhlYXJ0cyw5ajYsZGlhbXMsYWksT0VsaWcsYWosb2VsaWcsYjAsJyArICdTY2Fyb24sYjEsc2Nhcm9uLGJvLFl1bWwsbTYsY2lyYyxtcyx0aWxkZSw4MDIsZW5zcCw4MDMsZW1zcCw4MDksdGhpbnNwLDgwYyx6d25qLDgwZCx6d2osODBlLGxybSwnICsgJzgwZixybG0sODBqLG5kYXNoLDgwayxtZGFzaCw4MG8sbHNxdW8sODBwLHJzcXVvLDgwcSxzYnF1byw4MHMsbGRxdW8sODB0LHJkcXVvLDgwdSxiZHF1byw4MTAsZGFnZ2VyLCcgKyAnODExLERhZ2dlciw4MWcscGVybWlsLDgxcCxsc2FxdW8sODFxLHJzYXF1byw4NWMsZXVybycsIDMyKTtcbiAgICBjb25zdCBlbmNvZGVSYXcgPSAodGV4dCwgYXR0cikgPT4gdGV4dC5yZXBsYWNlKGF0dHIgPyBhdHRyc0NoYXJzUmVnRXhwIDogdGV4dENoYXJzUmVnRXhwLCBjaHIgPT4ge1xuICAgICAgcmV0dXJuIGJhc2VFbnRpdGllc1tjaHJdIHx8IGNocjtcbiAgICB9KTtcbiAgICBjb25zdCBlbmNvZGVBbGxSYXcgPSB0ZXh0ID0+ICgnJyArIHRleHQpLnJlcGxhY2UocmF3Q2hhcnNSZWdFeHAsIGNociA9PiB7XG4gICAgICByZXR1cm4gYmFzZUVudGl0aWVzW2Nocl0gfHwgY2hyO1xuICAgIH0pO1xuICAgIGNvbnN0IGVuY29kZU51bWVyaWMgPSAodGV4dCwgYXR0cikgPT4gdGV4dC5yZXBsYWNlKGF0dHIgPyBhdHRyc0NoYXJzUmVnRXhwIDogdGV4dENoYXJzUmVnRXhwLCBjaHIgPT4ge1xuICAgICAgaWYgKGNoci5sZW5ndGggPiAxKSB7XG4gICAgICAgIHJldHVybiAnJiMnICsgKChjaHIuY2hhckNvZGVBdCgwKSAtIDU1Mjk2KSAqIDEwMjQgKyAoY2hyLmNoYXJDb2RlQXQoMSkgLSA1NjMyMCkgKyA2NTUzNikgKyAnOyc7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUVudGl0aWVzW2Nocl0gfHwgJyYjJyArIGNoci5jaGFyQ29kZUF0KDApICsgJzsnO1xuICAgIH0pO1xuICAgIGNvbnN0IGVuY29kZU5hbWVkID0gKHRleHQsIGF0dHIsIGVudGl0aWVzKSA9PiB7XG4gICAgICBjb25zdCByZXNvbHZlRW50aXRpZXMgPSBlbnRpdGllcyB8fCBuYW1lZEVudGl0aWVzO1xuICAgICAgcmV0dXJuIHRleHQucmVwbGFjZShhdHRyID8gYXR0cnNDaGFyc1JlZ0V4cCA6IHRleHRDaGFyc1JlZ0V4cCwgY2hyID0+IHtcbiAgICAgICAgcmV0dXJuIGJhc2VFbnRpdGllc1tjaHJdIHx8IHJlc29sdmVFbnRpdGllc1tjaHJdIHx8IGNocjtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0RW5jb2RlRnVuYyA9IChuYW1lLCBlbnRpdGllcykgPT4ge1xuICAgICAgY29uc3QgZW50aXRpZXNNYXAgPSBidWlsZEVudGl0aWVzTG9va3VwKGVudGl0aWVzKSB8fCBuYW1lZEVudGl0aWVzO1xuICAgICAgY29uc3QgZW5jb2RlTmFtZWRBbmROdW1lcmljID0gKHRleHQsIGF0dHIpID0+IHRleHQucmVwbGFjZShhdHRyID8gYXR0cnNDaGFyc1JlZ0V4cCA6IHRleHRDaGFyc1JlZ0V4cCwgY2hyID0+IHtcbiAgICAgICAgaWYgKGJhc2VFbnRpdGllc1tjaHJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gYmFzZUVudGl0aWVzW2Nocl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudGl0aWVzTWFwW2Nocl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBlbnRpdGllc01hcFtjaHJdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaHIubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHJldHVybiAnJiMnICsgKChjaHIuY2hhckNvZGVBdCgwKSAtIDU1Mjk2KSAqIDEwMjQgKyAoY2hyLmNoYXJDb2RlQXQoMSkgLSA1NjMyMCkgKyA2NTUzNikgKyAnOyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcmIycgKyBjaHIuY2hhckNvZGVBdCgwKSArICc7JztcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jb2RlQ3VzdG9tTmFtZWQgPSAodGV4dCwgYXR0cikgPT4ge1xuICAgICAgICByZXR1cm4gZW5jb2RlTmFtZWQodGV4dCwgYXR0ciwgZW50aXRpZXNNYXApO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG5hbWVNYXAgPSBtYWtlTWFwJDMobmFtZS5yZXBsYWNlKC9cXCsvZywgJywnKSk7XG4gICAgICBpZiAobmFtZU1hcC5uYW1lZCAmJiBuYW1lTWFwLm51bWVyaWMpIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZU5hbWVkQW5kTnVtZXJpYztcbiAgICAgIH1cbiAgICAgIGlmIChuYW1lTWFwLm5hbWVkKSB7XG4gICAgICAgIGlmIChlbnRpdGllcykge1xuICAgICAgICAgIHJldHVybiBlbmNvZGVDdXN0b21OYW1lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW5jb2RlTmFtZWQ7XG4gICAgICB9XG4gICAgICBpZiAobmFtZU1hcC5udW1lcmljKSB7XG4gICAgICAgIHJldHVybiBlbmNvZGVOdW1lcmljO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVuY29kZVJhdztcbiAgICB9O1xuICAgIGNvbnN0IGRlY29kZSA9IHRleHQgPT4gdGV4dC5yZXBsYWNlKGVudGl0eVJlZ0V4cCwgKGFsbCwgbnVtZXJpYykgPT4ge1xuICAgICAgaWYgKG51bWVyaWMpIHtcbiAgICAgICAgaWYgKG51bWVyaWMuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgPT09ICd4Jykge1xuICAgICAgICAgIG51bWVyaWMgPSBwYXJzZUludChudW1lcmljLnN1YnN0cigxKSwgMTYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG51bWVyaWMgPSBwYXJzZUludChudW1lcmljLCAxMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG51bWVyaWMgPiA2NTUzNSkge1xuICAgICAgICAgIG51bWVyaWMgLT0gNjU1MzY7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYgKyAobnVtZXJpYyA+PiAxMCksIDU2MzIwICsgKG51bWVyaWMgJiAxMDIzKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzY2lpTWFwW251bWVyaWNdIHx8IFN0cmluZy5mcm9tQ2hhckNvZGUobnVtZXJpYyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV2ZXJzZUVudGl0aWVzW2FsbF0gfHwgbmFtZWRFbnRpdGllc1thbGxdIHx8IG5hdGl2ZURlY29kZShhbGwpO1xuICAgIH0pO1xuICAgIGNvbnN0IEVudGl0aWVzID0ge1xuICAgICAgZW5jb2RlUmF3LFxuICAgICAgZW5jb2RlQWxsUmF3LFxuICAgICAgZW5jb2RlTnVtZXJpYyxcbiAgICAgIGVuY29kZU5hbWVkLFxuICAgICAgZ2V0RW5jb2RlRnVuYyxcbiAgICAgIGRlY29kZVxuICAgIH07XG5cbiAgICBjb25zdCBzcGxpdCQxID0gKGl0ZW1zLCBkZWxpbSkgPT4ge1xuICAgICAgaXRlbXMgPSBUb29scy50cmltKGl0ZW1zKTtcbiAgICAgIHJldHVybiBpdGVtcyA/IGl0ZW1zLnNwbGl0KGRlbGltIHx8ICcgJykgOiBbXTtcbiAgICB9O1xuICAgIGNvbnN0IHBhdHRlcm5Ub1JlZ0V4cCA9IHN0ciA9PiBuZXcgUmVnRXhwKCdeJyArIHN0ci5yZXBsYWNlKC8oWz8rKl0pL2csICcuJDEnKSArICckJyk7XG5cbiAgICBjb25zdCBwYXJzZUN1c3RvbUVsZW1lbnRzUnVsZXMgPSB2YWx1ZSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21FbGVtZW50UmVnRXhwID0gL14ofik/KC4rKSQvO1xuICAgICAgcmV0dXJuIGJpbmQkMyhzcGxpdCQxKHZhbHVlLCAnLCcpLCBydWxlID0+IHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGN1c3RvbUVsZW1lbnRSZWdFeHAuZXhlYyhydWxlKTtcbiAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICBjb25zdCBpbmxpbmUgPSBtYXRjaGVzWzFdID09PSAnfic7XG4gICAgICAgICAgY29uc3QgY2xvbmVOYW1lID0gaW5saW5lID8gJ3NwYW4nIDogJ2Rpdic7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IG1hdGNoZXNbMl07XG4gICAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgICAgIGlubGluZSxcbiAgICAgICAgICAgICAgY2xvbmVOYW1lLFxuICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICB9XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRFbGVtZW50U2V0c0FzU3RyaW5ncyA9IHR5cGUgPT4ge1xuICAgICAgbGV0IGdsb2JhbEF0dHJpYnV0ZXMsIGJsb2NrQ29udGVudDtcbiAgICAgIGxldCBwaHJhc2luZ0NvbnRlbnQsIGZsb3dDb250ZW50O1xuICAgICAgZ2xvYmFsQXR0cmlidXRlcyA9ICdpZCBhY2Nlc3NrZXkgY2xhc3MgZGlyIGxhbmcgc3R5bGUgdGFiaW5kZXggdGl0bGUgcm9sZSc7XG4gICAgICBibG9ja0NvbnRlbnQgPSAnYWRkcmVzcyBibG9ja3F1b3RlIGRpdiBkbCBmaWVsZHNldCBmb3JtIGgxIGgyIGgzIGg0IGg1IGg2IGhyIG1lbnUgb2wgcCBwcmUgdGFibGUgdWwnO1xuICAgICAgcGhyYXNpbmdDb250ZW50ID0gJ2EgYWJiciBiIGJkbyBiciBidXR0b24gY2l0ZSBjb2RlIGRlbCBkZm4gZW0gZW1iZWQgaSBpZnJhbWUgaW1nIGlucHV0IGlucyBrYmQgJyArICdsYWJlbCBtYXAgbm9zY3JpcHQgb2JqZWN0IHEgcyBzYW1wIHNjcmlwdCBzZWxlY3Qgc21hbGwgc3BhbiBzdHJvbmcgc3ViIHN1cCAnICsgJ3RleHRhcmVhIHUgdmFyICN0ZXh0ICNjb21tZW50JztcbiAgICAgIGlmICh0eXBlICE9PSAnaHRtbDQnKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zcGFyZW50Q29udGVudCA9ICdhIGlucyBkZWwgY2FudmFzIG1hcCc7XG4gICAgICAgIGdsb2JhbEF0dHJpYnV0ZXMgKz0gJyBjb250ZW50ZWRpdGFibGUgY29udGV4dG1lbnUgZHJhZ2dhYmxlIGRyb3B6b25lICcgKyAnaGlkZGVuIHNwZWxsY2hlY2sgdHJhbnNsYXRlJztcbiAgICAgICAgYmxvY2tDb250ZW50ICs9ICcgYXJ0aWNsZSBhc2lkZSBkZXRhaWxzIGRpYWxvZyBmaWd1cmUgbWFpbiBoZWFkZXIgZm9vdGVyIGhncm91cCBzZWN0aW9uIG5hdiAnICsgdHJhbnNwYXJlbnRDb250ZW50O1xuICAgICAgICBwaHJhc2luZ0NvbnRlbnQgKz0gJyBhdWRpbyBjYW52YXMgY29tbWFuZCBkYXRhbGlzdCBtYXJrIG1ldGVyIG91dHB1dCBwaWN0dXJlICcgKyAncHJvZ3Jlc3MgdGltZSB3YnIgdmlkZW8gcnVieSBiZGkga2V5Z2VuJztcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlICE9PSAnaHRtbDUtc3RyaWN0Jykge1xuICAgICAgICBnbG9iYWxBdHRyaWJ1dGVzICs9ICcgeG1sOmxhbmcnO1xuICAgICAgICBjb25zdCBodG1sNFBocmFzaW5nQ29udGVudCA9ICdhY3JvbnltIGFwcGxldCBiYXNlZm9udCBiaWcgZm9udCBzdHJpa2UgdHQnO1xuICAgICAgICBwaHJhc2luZ0NvbnRlbnQgPSBbXG4gICAgICAgICAgcGhyYXNpbmdDb250ZW50LFxuICAgICAgICAgIGh0bWw0UGhyYXNpbmdDb250ZW50XG4gICAgICAgIF0uam9pbignICcpO1xuICAgICAgICBjb25zdCBodG1sNEJsb2NrQ29udGVudCA9ICdjZW50ZXIgZGlyIGlzaW5kZXggbm9mcmFtZXMnO1xuICAgICAgICBibG9ja0NvbnRlbnQgPSBbXG4gICAgICAgICAgYmxvY2tDb250ZW50LFxuICAgICAgICAgIGh0bWw0QmxvY2tDb250ZW50XG4gICAgICAgIF0uam9pbignICcpO1xuICAgICAgICBmbG93Q29udGVudCA9IFtcbiAgICAgICAgICBibG9ja0NvbnRlbnQsXG4gICAgICAgICAgcGhyYXNpbmdDb250ZW50XG4gICAgICAgIF0uam9pbignICcpO1xuICAgICAgfVxuICAgICAgZmxvd0NvbnRlbnQgPSBmbG93Q29udGVudCB8fCBbXG4gICAgICAgIGJsb2NrQ29udGVudCxcbiAgICAgICAgcGhyYXNpbmdDb250ZW50XG4gICAgICBdLmpvaW4oJyAnKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdsb2JhbEF0dHJpYnV0ZXMsXG4gICAgICAgIGJsb2NrQ29udGVudCxcbiAgICAgICAgcGhyYXNpbmdDb250ZW50LFxuICAgICAgICBmbG93Q29udGVudFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgbWFrZVNjaGVtYSA9IHR5cGUgPT4ge1xuICAgICAgY29uc3Qge2dsb2JhbEF0dHJpYnV0ZXMsIHBocmFzaW5nQ29udGVudCwgZmxvd0NvbnRlbnR9ID0gZ2V0RWxlbWVudFNldHNBc1N0cmluZ3ModHlwZSk7XG4gICAgICBjb25zdCBzY2hlbWEgPSB7fTtcbiAgICAgIGNvbnN0IGFkZCA9IChuYW1lLCBhdHRyaWJ1dGVzID0gJycsIGNoaWxkcmVuID0gJycpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGROYW1lcyA9IHNwbGl0JDEoY2hpbGRyZW4pO1xuICAgICAgICBjb25zdCBuYW1lcyA9IHNwbGl0JDEobmFtZSk7XG4gICAgICAgIGxldCBuaSA9IG5hbWVzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKG5pLS0pIHtcbiAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzT3JkZXIgPSBzcGxpdCQxKFtcbiAgICAgICAgICAgIGdsb2JhbEF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzXG4gICAgICAgICAgXS5qb2luKCcgJykpO1xuICAgICAgICAgIHNjaGVtYVtuYW1lc1tuaV1dID0ge1xuICAgICAgICAgICAgYXR0cmlidXRlczogbWFwVG9PYmplY3QoYXR0cmlidXRlc09yZGVyLCBjb25zdGFudCh7fSkpLFxuICAgICAgICAgICAgYXR0cmlidXRlc09yZGVyLFxuICAgICAgICAgICAgY2hpbGRyZW46IG1hcFRvT2JqZWN0KGNoaWxkTmFtZXMsIGNvbnN0YW50KHt9KSlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgYWRkQXR0cnMgPSAobmFtZSwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBjb25zdCBuYW1lcyA9IHNwbGl0JDEobmFtZSk7XG4gICAgICAgIGNvbnN0IGF0dHJzID0gc3BsaXQkMShhdHRyaWJ1dGVzKTtcbiAgICAgICAgbGV0IG5pID0gbmFtZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAobmktLSkge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYUl0ZW0gPSBzY2hlbWFbbmFtZXNbbmldXTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGF0dHJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgc2NoZW1hSXRlbS5hdHRyaWJ1dGVzW2F0dHJzW2ldXSA9IHt9O1xuICAgICAgICAgICAgc2NoZW1hSXRlbS5hdHRyaWJ1dGVzT3JkZXIucHVzaChhdHRyc1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKHR5cGUgIT09ICdodG1sNS1zdHJpY3QnKSB7XG4gICAgICAgIGNvbnN0IGh0bWw0UGhyYXNpbmdDb250ZW50ID0gJ2Fjcm9ueW0gYXBwbGV0IGJhc2Vmb250IGJpZyBmb250IHN0cmlrZSB0dCc7XG4gICAgICAgIGVhY2gkZShzcGxpdCQxKGh0bWw0UGhyYXNpbmdDb250ZW50KSwgbmFtZSA9PiB7XG4gICAgICAgICAgYWRkKG5hbWUsICcnLCBwaHJhc2luZ0NvbnRlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaHRtbDRCbG9ja0NvbnRlbnQgPSAnY2VudGVyIGRpciBpc2luZGV4IG5vZnJhbWVzJztcbiAgICAgICAgZWFjaCRlKHNwbGl0JDEoaHRtbDRCbG9ja0NvbnRlbnQpLCBuYW1lID0+IHtcbiAgICAgICAgICBhZGQobmFtZSwgJycsIGZsb3dDb250ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhZGQoJ2h0bWwnLCAnbWFuaWZlc3QnLCAnaGVhZCBib2R5Jyk7XG4gICAgICBhZGQoJ2hlYWQnLCAnJywgJ2Jhc2UgY29tbWFuZCBsaW5rIG1ldGEgbm9zY3JpcHQgc2NyaXB0IHN0eWxlIHRpdGxlJyk7XG4gICAgICBhZGQoJ3RpdGxlIGhyIG5vc2NyaXB0IGJyJyk7XG4gICAgICBhZGQoJ2Jhc2UnLCAnaHJlZiB0YXJnZXQnKTtcbiAgICAgIGFkZCgnbGluaycsICdocmVmIHJlbCBtZWRpYSBocmVmbGFuZyB0eXBlIHNpemVzIGhyZWZsYW5nJyk7XG4gICAgICBhZGQoJ21ldGEnLCAnbmFtZSBodHRwLWVxdWl2IGNvbnRlbnQgY2hhcnNldCcpO1xuICAgICAgYWRkKCdzdHlsZScsICdtZWRpYSB0eXBlIHNjb3BlZCcpO1xuICAgICAgYWRkKCdzY3JpcHQnLCAnc3JjIGFzeW5jIGRlZmVyIHR5cGUgY2hhcnNldCcpO1xuICAgICAgYWRkKCdib2R5JywgJ29uYWZ0ZXJwcmludCBvbmJlZm9yZXByaW50IG9uYmVmb3JldW5sb2FkIG9uYmx1ciBvbmVycm9yIG9uZm9jdXMgJyArICdvbmhhc2hjaGFuZ2Ugb25sb2FkIG9ubWVzc2FnZSBvbm9mZmxpbmUgb25vbmxpbmUgb25wYWdlaGlkZSBvbnBhZ2VzaG93ICcgKyAnb25wb3BzdGF0ZSBvbnJlc2l6ZSBvbnNjcm9sbCBvbnN0b3JhZ2Ugb251bmxvYWQnLCBmbG93Q29udGVudCk7XG4gICAgICBhZGQoJ2RkIGRpdicsICcnLCBmbG93Q29udGVudCk7XG4gICAgICBhZGQoJ2FkZHJlc3MgZHQgY2FwdGlvbicsICcnLCB0eXBlID09PSAnaHRtbDQnID8gcGhyYXNpbmdDb250ZW50IDogZmxvd0NvbnRlbnQpO1xuICAgICAgYWRkKCdoMSBoMiBoMyBoNCBoNSBoNiBwcmUgcCBhYmJyIGNvZGUgdmFyIHNhbXAga2JkIHN1YiBzdXAgaSBiIHUgYmRvIHNwYW4gbGVnZW5kIGVtIHN0cm9uZyBzbWFsbCBzIGNpdGUgZGZuJywgJycsIHBocmFzaW5nQ29udGVudCk7XG4gICAgICBhZGQoJ2Jsb2NrcXVvdGUnLCAnY2l0ZScsIGZsb3dDb250ZW50KTtcbiAgICAgIGFkZCgnb2wnLCAncmV2ZXJzZWQgc3RhcnQgdHlwZScsICdsaScpO1xuICAgICAgYWRkKCd1bCcsICcnLCAnbGknKTtcbiAgICAgIGFkZCgnbGknLCAndmFsdWUnLCBmbG93Q29udGVudCk7XG4gICAgICBhZGQoJ2RsJywgJycsICdkdCBkZCcpO1xuICAgICAgYWRkKCdhJywgJ2hyZWYgdGFyZ2V0IHJlbCBtZWRpYSBocmVmbGFuZyB0eXBlJywgdHlwZSA9PT0gJ2h0bWw0JyA/IHBocmFzaW5nQ29udGVudCA6IGZsb3dDb250ZW50KTtcbiAgICAgIGFkZCgncScsICdjaXRlJywgcGhyYXNpbmdDb250ZW50KTtcbiAgICAgIGFkZCgnaW5zIGRlbCcsICdjaXRlIGRhdGV0aW1lJywgZmxvd0NvbnRlbnQpO1xuICAgICAgYWRkKCdpbWcnLCAnc3JjIHNpemVzIHNyY3NldCBhbHQgdXNlbWFwIGlzbWFwIHdpZHRoIGhlaWdodCcpO1xuICAgICAgYWRkKCdpZnJhbWUnLCAnc3JjIG5hbWUgd2lkdGggaGVpZ2h0JywgZmxvd0NvbnRlbnQpO1xuICAgICAgYWRkKCdlbWJlZCcsICdzcmMgdHlwZSB3aWR0aCBoZWlnaHQnKTtcbiAgICAgIGFkZCgnb2JqZWN0JywgJ2RhdGEgdHlwZSB0eXBlbXVzdG1hdGNoIG5hbWUgdXNlbWFwIGZvcm0gd2lkdGggaGVpZ2h0JywgW1xuICAgICAgICBmbG93Q29udGVudCxcbiAgICAgICAgJ3BhcmFtJ1xuICAgICAgXS5qb2luKCcgJykpO1xuICAgICAgYWRkKCdwYXJhbScsICduYW1lIHZhbHVlJyk7XG4gICAgICBhZGQoJ21hcCcsICduYW1lJywgW1xuICAgICAgICBmbG93Q29udGVudCxcbiAgICAgICAgJ2FyZWEnXG4gICAgICBdLmpvaW4oJyAnKSk7XG4gICAgICBhZGQoJ2FyZWEnLCAnYWx0IGNvb3JkcyBzaGFwZSBocmVmIHRhcmdldCByZWwgbWVkaWEgaHJlZmxhbmcgdHlwZScpO1xuICAgICAgYWRkKCd0YWJsZScsICdib3JkZXInLCAnY2FwdGlvbiBjb2xncm91cCB0aGVhZCB0Zm9vdCB0Ym9keSB0cicgKyAodHlwZSA9PT0gJ2h0bWw0JyA/ICcgY29sJyA6ICcnKSk7XG4gICAgICBhZGQoJ2NvbGdyb3VwJywgJ3NwYW4nLCAnY29sJyk7XG4gICAgICBhZGQoJ2NvbCcsICdzcGFuJyk7XG4gICAgICBhZGQoJ3Rib2R5IHRoZWFkIHRmb290JywgJycsICd0cicpO1xuICAgICAgYWRkKCd0cicsICcnLCAndGQgdGgnKTtcbiAgICAgIGFkZCgndGQnLCAnY29sc3BhbiByb3dzcGFuIGhlYWRlcnMnLCBmbG93Q29udGVudCk7XG4gICAgICBhZGQoJ3RoJywgJ2NvbHNwYW4gcm93c3BhbiBoZWFkZXJzIHNjb3BlIGFiYnInLCBmbG93Q29udGVudCk7XG4gICAgICBhZGQoJ2Zvcm0nLCAnYWNjZXB0LWNoYXJzZXQgYWN0aW9uIGF1dG9jb21wbGV0ZSBlbmN0eXBlIG1ldGhvZCBuYW1lIG5vdmFsaWRhdGUgdGFyZ2V0JywgZmxvd0NvbnRlbnQpO1xuICAgICAgYWRkKCdmaWVsZHNldCcsICdkaXNhYmxlZCBmb3JtIG5hbWUnLCBbXG4gICAgICAgIGZsb3dDb250ZW50LFxuICAgICAgICAnbGVnZW5kJ1xuICAgICAgXS5qb2luKCcgJykpO1xuICAgICAgYWRkKCdsYWJlbCcsICdmb3JtIGZvcicsIHBocmFzaW5nQ29udGVudCk7XG4gICAgICBhZGQoJ2lucHV0JywgJ2FjY2VwdCBhbHQgYXV0b2NvbXBsZXRlIGNoZWNrZWQgZGlybmFtZSBkaXNhYmxlZCBmb3JtIGZvcm1hY3Rpb24gZm9ybWVuY3R5cGUgZm9ybW1ldGhvZCBmb3Jtbm92YWxpZGF0ZSAnICsgJ2Zvcm10YXJnZXQgaGVpZ2h0IGxpc3QgbWF4IG1heGxlbmd0aCBtaW4gbXVsdGlwbGUgbmFtZSBwYXR0ZXJuIHJlYWRvbmx5IHJlcXVpcmVkIHNpemUgc3JjIHN0ZXAgdHlwZSB2YWx1ZSB3aWR0aCcpO1xuICAgICAgYWRkKCdidXR0b24nLCAnZGlzYWJsZWQgZm9ybSBmb3JtYWN0aW9uIGZvcm1lbmN0eXBlIGZvcm1tZXRob2QgZm9ybW5vdmFsaWRhdGUgZm9ybXRhcmdldCBuYW1lIHR5cGUgdmFsdWUnLCB0eXBlID09PSAnaHRtbDQnID8gZmxvd0NvbnRlbnQgOiBwaHJhc2luZ0NvbnRlbnQpO1xuICAgICAgYWRkKCdzZWxlY3QnLCAnZGlzYWJsZWQgZm9ybSBtdWx0aXBsZSBuYW1lIHJlcXVpcmVkIHNpemUnLCAnb3B0aW9uIG9wdGdyb3VwJyk7XG4gICAgICBhZGQoJ29wdGdyb3VwJywgJ2Rpc2FibGVkIGxhYmVsJywgJ29wdGlvbicpO1xuICAgICAgYWRkKCdvcHRpb24nLCAnZGlzYWJsZWQgbGFiZWwgc2VsZWN0ZWQgdmFsdWUnKTtcbiAgICAgIGFkZCgndGV4dGFyZWEnLCAnY29scyBkaXJuYW1lIGRpc2FibGVkIGZvcm0gbWF4bGVuZ3RoIG5hbWUgcmVhZG9ubHkgcmVxdWlyZWQgcm93cyB3cmFwJyk7XG4gICAgICBhZGQoJ21lbnUnLCAndHlwZSBsYWJlbCcsIFtcbiAgICAgICAgZmxvd0NvbnRlbnQsXG4gICAgICAgICdsaSdcbiAgICAgIF0uam9pbignICcpKTtcbiAgICAgIGFkZCgnbm9zY3JpcHQnLCAnJywgZmxvd0NvbnRlbnQpO1xuICAgICAgaWYgKHR5cGUgIT09ICdodG1sNCcpIHtcbiAgICAgICAgYWRkKCd3YnInKTtcbiAgICAgICAgYWRkKCdydWJ5JywgJycsIFtcbiAgICAgICAgICBwaHJhc2luZ0NvbnRlbnQsXG4gICAgICAgICAgJ3J0IHJwJ1xuICAgICAgICBdLmpvaW4oJyAnKSk7XG4gICAgICAgIGFkZCgnZmlnY2FwdGlvbicsICcnLCBmbG93Q29udGVudCk7XG4gICAgICAgIGFkZCgnbWFyayBydCBycCBzdW1tYXJ5IGJkaScsICcnLCBwaHJhc2luZ0NvbnRlbnQpO1xuICAgICAgICBhZGQoJ2NhbnZhcycsICd3aWR0aCBoZWlnaHQnLCBmbG93Q29udGVudCk7XG4gICAgICAgIGFkZCgndmlkZW8nLCAnc3JjIGNyb3Nzb3JpZ2luIHBvc3RlciBwcmVsb2FkIGF1dG9wbGF5IG1lZGlhZ3JvdXAgbG9vcCAnICsgJ211dGVkIGNvbnRyb2xzIHdpZHRoIGhlaWdodCBidWZmZXJlZCcsIFtcbiAgICAgICAgICBmbG93Q29udGVudCxcbiAgICAgICAgICAndHJhY2sgc291cmNlJ1xuICAgICAgICBdLmpvaW4oJyAnKSk7XG4gICAgICAgIGFkZCgnYXVkaW8nLCAnc3JjIGNyb3Nzb3JpZ2luIHByZWxvYWQgYXV0b3BsYXkgbWVkaWFncm91cCBsb29wIG11dGVkIGNvbnRyb2xzICcgKyAnYnVmZmVyZWQgdm9sdW1lJywgW1xuICAgICAgICAgIGZsb3dDb250ZW50LFxuICAgICAgICAgICd0cmFjayBzb3VyY2UnXG4gICAgICAgIF0uam9pbignICcpKTtcbiAgICAgICAgYWRkKCdwaWN0dXJlJywgJycsICdpbWcgc291cmNlJyk7XG4gICAgICAgIGFkZCgnc291cmNlJywgJ3NyYyBzcmNzZXQgdHlwZSBtZWRpYSBzaXplcycpO1xuICAgICAgICBhZGQoJ3RyYWNrJywgJ2tpbmQgc3JjIHNyY2xhbmcgbGFiZWwgZGVmYXVsdCcpO1xuICAgICAgICBhZGQoJ2RhdGFsaXN0JywgJycsIFtcbiAgICAgICAgICBwaHJhc2luZ0NvbnRlbnQsXG4gICAgICAgICAgJ29wdGlvbidcbiAgICAgICAgXS5qb2luKCcgJykpO1xuICAgICAgICBhZGQoJ2FydGljbGUgc2VjdGlvbiBuYXYgYXNpZGUgbWFpbiBoZWFkZXIgZm9vdGVyJywgJycsIGZsb3dDb250ZW50KTtcbiAgICAgICAgYWRkKCdoZ3JvdXAnLCAnJywgJ2gxIGgyIGgzIGg0IGg1IGg2Jyk7XG4gICAgICAgIGFkZCgnZmlndXJlJywgJycsIFtcbiAgICAgICAgICBmbG93Q29udGVudCxcbiAgICAgICAgICAnZmlnY2FwdGlvbidcbiAgICAgICAgXS5qb2luKCcgJykpO1xuICAgICAgICBhZGQoJ3RpbWUnLCAnZGF0ZXRpbWUnLCBwaHJhc2luZ0NvbnRlbnQpO1xuICAgICAgICBhZGQoJ2RpYWxvZycsICdvcGVuJywgZmxvd0NvbnRlbnQpO1xuICAgICAgICBhZGQoJ2NvbW1hbmQnLCAndHlwZSBsYWJlbCBpY29uIGRpc2FibGVkIGNoZWNrZWQgcmFkaW9ncm91cCBjb21tYW5kJyk7XG4gICAgICAgIGFkZCgnb3V0cHV0JywgJ2ZvciBmb3JtIG5hbWUnLCBwaHJhc2luZ0NvbnRlbnQpO1xuICAgICAgICBhZGQoJ3Byb2dyZXNzJywgJ3ZhbHVlIG1heCcsIHBocmFzaW5nQ29udGVudCk7XG4gICAgICAgIGFkZCgnbWV0ZXInLCAndmFsdWUgbWluIG1heCBsb3cgaGlnaCBvcHRpbXVtJywgcGhyYXNpbmdDb250ZW50KTtcbiAgICAgICAgYWRkKCdkZXRhaWxzJywgJ29wZW4nLCBbXG4gICAgICAgICAgZmxvd0NvbnRlbnQsXG4gICAgICAgICAgJ3N1bW1hcnknXG4gICAgICAgIF0uam9pbignICcpKTtcbiAgICAgICAgYWRkKCdrZXlnZW4nLCAnYXV0b2ZvY3VzIGNoYWxsZW5nZSBkaXNhYmxlZCBmb3JtIGtleXR5cGUgbmFtZScpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgIT09ICdodG1sNS1zdHJpY3QnKSB7XG4gICAgICAgIGFkZEF0dHJzKCdzY3JpcHQnLCAnbGFuZ3VhZ2UgeG1sOnNwYWNlJyk7XG4gICAgICAgIGFkZEF0dHJzKCdzdHlsZScsICd4bWw6c3BhY2UnKTtcbiAgICAgICAgYWRkQXR0cnMoJ29iamVjdCcsICdkZWNsYXJlIGNsYXNzaWQgY29kZSBjb2RlYmFzZSBjb2RldHlwZSBhcmNoaXZlIHN0YW5kYnkgYWxpZ24gYm9yZGVyIGhzcGFjZSB2c3BhY2UnKTtcbiAgICAgICAgYWRkQXR0cnMoJ2VtYmVkJywgJ2FsaWduIG5hbWUgaHNwYWNlIHZzcGFjZScpO1xuICAgICAgICBhZGRBdHRycygncGFyYW0nLCAndmFsdWV0eXBlIHR5cGUnKTtcbiAgICAgICAgYWRkQXR0cnMoJ2EnLCAnY2hhcnNldCBuYW1lIHJldiBzaGFwZSBjb29yZHMnKTtcbiAgICAgICAgYWRkQXR0cnMoJ2JyJywgJ2NsZWFyJyk7XG4gICAgICAgIGFkZEF0dHJzKCdhcHBsZXQnLCAnY29kZWJhc2UgYXJjaGl2ZSBjb2RlIG9iamVjdCBhbHQgbmFtZSB3aWR0aCBoZWlnaHQgYWxpZ24gaHNwYWNlIHZzcGFjZScpO1xuICAgICAgICBhZGRBdHRycygnaW1nJywgJ25hbWUgbG9uZ2Rlc2MgYWxpZ24gYm9yZGVyIGhzcGFjZSB2c3BhY2UnKTtcbiAgICAgICAgYWRkQXR0cnMoJ2lmcmFtZScsICdsb25nZGVzYyBmcmFtZWJvcmRlciBtYXJnaW53aWR0aCBtYXJnaW5oZWlnaHQgc2Nyb2xsaW5nIGFsaWduJyk7XG4gICAgICAgIGFkZEF0dHJzKCdmb250IGJhc2Vmb250JywgJ3NpemUgY29sb3IgZmFjZScpO1xuICAgICAgICBhZGRBdHRycygnaW5wdXQnLCAndXNlbWFwIGFsaWduJyk7XG4gICAgICAgIGFkZEF0dHJzKCdzZWxlY3QnKTtcbiAgICAgICAgYWRkQXR0cnMoJ3RleHRhcmVhJyk7XG4gICAgICAgIGFkZEF0dHJzKCdoMSBoMiBoMyBoNCBoNSBoNiBkaXYgcCBsZWdlbmQgY2FwdGlvbicsICdhbGlnbicpO1xuICAgICAgICBhZGRBdHRycygndWwnLCAndHlwZSBjb21wYWN0Jyk7XG4gICAgICAgIGFkZEF0dHJzKCdsaScsICd0eXBlJyk7XG4gICAgICAgIGFkZEF0dHJzKCdvbCBkbCBtZW51IGRpcicsICdjb21wYWN0Jyk7XG4gICAgICAgIGFkZEF0dHJzKCdwcmUnLCAnd2lkdGggeG1sOnNwYWNlJyk7XG4gICAgICAgIGFkZEF0dHJzKCdocicsICdhbGlnbiBub3NoYWRlIHNpemUgd2lkdGgnKTtcbiAgICAgICAgYWRkQXR0cnMoJ2lzaW5kZXgnLCAncHJvbXB0Jyk7XG4gICAgICAgIGFkZEF0dHJzKCd0YWJsZScsICdzdW1tYXJ5IHdpZHRoIGZyYW1lIHJ1bGVzIGNlbGxzcGFjaW5nIGNlbGxwYWRkaW5nIGFsaWduIGJnY29sb3InKTtcbiAgICAgICAgYWRkQXR0cnMoJ2NvbCcsICd3aWR0aCBhbGlnbiBjaGFyIGNoYXJvZmYgdmFsaWduJyk7XG4gICAgICAgIGFkZEF0dHJzKCdjb2xncm91cCcsICd3aWR0aCBhbGlnbiBjaGFyIGNoYXJvZmYgdmFsaWduJyk7XG4gICAgICAgIGFkZEF0dHJzKCd0aGVhZCcsICdhbGlnbiBjaGFyIGNoYXJvZmYgdmFsaWduJyk7XG4gICAgICAgIGFkZEF0dHJzKCd0cicsICdhbGlnbiBjaGFyIGNoYXJvZmYgdmFsaWduIGJnY29sb3InKTtcbiAgICAgICAgYWRkQXR0cnMoJ3RoJywgJ2F4aXMgYWxpZ24gY2hhciBjaGFyb2ZmIHZhbGlnbiBub3dyYXAgYmdjb2xvciB3aWR0aCBoZWlnaHQnKTtcbiAgICAgICAgYWRkQXR0cnMoJ2Zvcm0nLCAnYWNjZXB0Jyk7XG4gICAgICAgIGFkZEF0dHJzKCd0ZCcsICdhYmJyIGF4aXMgc2NvcGUgYWxpZ24gY2hhciBjaGFyb2ZmIHZhbGlnbiBub3dyYXAgYmdjb2xvciB3aWR0aCBoZWlnaHQnKTtcbiAgICAgICAgYWRkQXR0cnMoJ3Rmb290JywgJ2FsaWduIGNoYXIgY2hhcm9mZiB2YWxpZ24nKTtcbiAgICAgICAgYWRkQXR0cnMoJ3Rib2R5JywgJ2FsaWduIGNoYXIgY2hhcm9mZiB2YWxpZ24nKTtcbiAgICAgICAgYWRkQXR0cnMoJ2FyZWEnLCAnbm9ocmVmJyk7XG4gICAgICAgIGFkZEF0dHJzKCdib2R5JywgJ2JhY2tncm91bmQgYmdjb2xvciB0ZXh0IGxpbmsgdmxpbmsgYWxpbmsnKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlICE9PSAnaHRtbDQnKSB7XG4gICAgICAgIGFkZEF0dHJzKCdpbnB1dCBidXR0b24gc2VsZWN0IHRleHRhcmVhJywgJ2F1dG9mb2N1cycpO1xuICAgICAgICBhZGRBdHRycygnaW5wdXQgdGV4dGFyZWEnLCAncGxhY2Vob2xkZXInKTtcbiAgICAgICAgYWRkQXR0cnMoJ2EnLCAnZG93bmxvYWQnKTtcbiAgICAgICAgYWRkQXR0cnMoJ2xpbmsgc2NyaXB0IGltZycsICdjcm9zc29yaWdpbicpO1xuICAgICAgICBhZGRBdHRycygnaW1nJywgJ2xvYWRpbmcnKTtcbiAgICAgICAgYWRkQXR0cnMoJ2lmcmFtZScsICdzYW5kYm94IHNlYW1sZXNzIGFsbG93IGFsbG93ZnVsbHNjcmVlbiBsb2FkaW5nJyk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSAhPT0gJ2h0bWw0Jykge1xuICAgICAgICBlYWNoJGUoW1xuICAgICAgICAgIHNjaGVtYS52aWRlbyxcbiAgICAgICAgICBzY2hlbWEuYXVkaW9cbiAgICAgICAgXSwgaXRlbSA9PiB7XG4gICAgICAgICAgZGVsZXRlIGl0ZW0uY2hpbGRyZW4uYXVkaW87XG4gICAgICAgICAgZGVsZXRlIGl0ZW0uY2hpbGRyZW4udmlkZW87XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZWFjaCRlKHNwbGl0JDEoJ2EgZm9ybSBtZXRlciBwcm9ncmVzcyBkZm4nKSwgbmFtZSA9PiB7XG4gICAgICAgIGlmIChzY2hlbWFbbmFtZV0pIHtcbiAgICAgICAgICBkZWxldGUgc2NoZW1hW25hbWVdLmNoaWxkcmVuW25hbWVdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGRlbGV0ZSBzY2hlbWEuY2FwdGlvbi5jaGlsZHJlbi50YWJsZTtcbiAgICAgIGRlbGV0ZSBzY2hlbWEuc2NyaXB0O1xuICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJlZml4VG9PcGVyYXRpb24gPSBwcmVmaXggPT4gcHJlZml4ID09PSAnLScgPyAncmVtb3ZlJyA6ICdhZGQnO1xuICAgIGNvbnN0IHBhcnNlVmFsaWRDaGlsZHJlblJ1bGVzID0gdmFsdWUgPT4ge1xuICAgICAgY29uc3QgY2hpbGRSdWxlUmVnRXhwID0gL14oWytcXC1dPykoW0EtWmEtejAtOV9cXC0uXFx1MDBiN1xcdTAwYzAtXFx1MDBkNlxcdTAwZDgtXFx1MDBmNlxcdTAwZjgtXFx1MDM3ZFxcdTAzN2YtXFx1MWZmZlxcdTIwMGMtXFx1MjAwZFxcdTIwM2YtXFx1MjA0MFxcdTIwNzAtXFx1MjE4ZlxcdTJjMDAtXFx1MmZlZlxcdTMwMDEtXFx1ZDdmZlxcdWY5MDAtXFx1ZmRjZlxcdWZkZjAtXFx1ZmZmZF0rKVxcWyhbXlxcXV0rKV0kLztcbiAgICAgIHJldHVybiBiaW5kJDMoc3BsaXQkMSh2YWx1ZSwgJywnKSwgcnVsZSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBjaGlsZFJ1bGVSZWdFeHAuZXhlYyhydWxlKTtcbiAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaGVzWzFdO1xuICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IHByZWZpeCA/IHByZWZpeFRvT3BlcmF0aW9uKHByZWZpeCkgOiAncmVwbGFjZSc7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IG1hdGNoZXNbMl07XG4gICAgICAgICAgY29uc3QgdmFsaWRDaGlsZHJlbiA9IHNwbGl0JDEobWF0Y2hlc1szXSwgJ3wnKTtcbiAgICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICAgICAgb3BlcmF0aW9uLFxuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICB2YWxpZENoaWxkcmVuXG4gICAgICAgICAgICB9XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBwYXJzZVZhbGlkRWxlbWVudHNBdHRyRGF0YUludG9FbGVtZW50ID0gKGF0dHJEYXRhLCB0YXJnZXRFbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBhdHRyUnVsZVJlZ0V4cCA9IC9eKFshXFwtXSk/KFxcdytbXFxcXDpdOlxcdyt8W149fjxdKyk/KD86KFs9fjxdKSguKikpPyQvO1xuICAgICAgY29uc3QgaGFzUGF0dGVybnNSZWdFeHAgPSAvWyo/K10vO1xuICAgICAgY29uc3Qge2F0dHJpYnV0ZXMsIGF0dHJpYnV0ZXNPcmRlcn0gPSB0YXJnZXRFbGVtZW50O1xuICAgICAgcmV0dXJuIGVhY2gkZShzcGxpdCQxKGF0dHJEYXRhLCAnfCcpLCBydWxlID0+IHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGF0dHJSdWxlUmVnRXhwLmV4ZWMocnVsZSk7XG4gICAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgICAgY29uc3QgYXR0ciA9IHt9O1xuICAgICAgICAgIGNvbnN0IGF0dHJUeXBlID0gbWF0Y2hlc1sxXTtcbiAgICAgICAgICBjb25zdCBhdHRyTmFtZSA9IG1hdGNoZXNbMl0ucmVwbGFjZSgvW1xcXFw6XTovZywgJzonKTtcbiAgICAgICAgICBjb25zdCBhdHRyUHJlZml4ID0gbWF0Y2hlc1szXTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1hdGNoZXNbNF07XG4gICAgICAgICAgaWYgKGF0dHJUeXBlID09PSAnIScpIHtcbiAgICAgICAgICAgIHRhcmdldEVsZW1lbnQuYXR0cmlidXRlc1JlcXVpcmVkID0gdGFyZ2V0RWxlbWVudC5hdHRyaWJ1dGVzUmVxdWlyZWQgfHwgW107XG4gICAgICAgICAgICB0YXJnZXRFbGVtZW50LmF0dHJpYnV0ZXNSZXF1aXJlZC5wdXNoKGF0dHJOYW1lKTtcbiAgICAgICAgICAgIGF0dHIucmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYXR0clR5cGUgPT09ICctJykge1xuICAgICAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXNbYXR0ck5hbWVdO1xuICAgICAgICAgICAgYXR0cmlidXRlc09yZGVyLnNwbGljZShUb29scy5pbkFycmF5KGF0dHJpYnV0ZXNPcmRlciwgYXR0ck5hbWUpLCAxKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGF0dHJQcmVmaXgpIHtcbiAgICAgICAgICAgIGlmIChhdHRyUHJlZml4ID09PSAnPScpIHtcbiAgICAgICAgICAgICAgdGFyZ2V0RWxlbWVudC5hdHRyaWJ1dGVzRGVmYXVsdCA9IHRhcmdldEVsZW1lbnQuYXR0cmlidXRlc0RlZmF1bHQgfHwgW107XG4gICAgICAgICAgICAgIHRhcmdldEVsZW1lbnQuYXR0cmlidXRlc0RlZmF1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZTogYXR0ck5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGF0dHIuZGVmYXVsdFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJQcmVmaXggPT09ICd+Jykge1xuICAgICAgICAgICAgICB0YXJnZXRFbGVtZW50LmF0dHJpYnV0ZXNGb3JjZWQgPSB0YXJnZXRFbGVtZW50LmF0dHJpYnV0ZXNGb3JjZWQgfHwgW107XG4gICAgICAgICAgICAgIHRhcmdldEVsZW1lbnQuYXR0cmlidXRlc0ZvcmNlZC5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBhdHRyTmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYXR0ci5mb3JjZWRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRyUHJlZml4ID09PSAnPCcpIHtcbiAgICAgICAgICAgICAgYXR0ci52YWxpZFZhbHVlcyA9IFRvb2xzLm1ha2VNYXAodmFsdWUsICc/Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYXNQYXR0ZXJuc1JlZ0V4cC50ZXN0KGF0dHJOYW1lKSkge1xuICAgICAgICAgICAgY29uc3QgYXR0clBhdHRlcm4gPSBhdHRyO1xuICAgICAgICAgICAgdGFyZ2V0RWxlbWVudC5hdHRyaWJ1dGVQYXR0ZXJucyA9IHRhcmdldEVsZW1lbnQuYXR0cmlidXRlUGF0dGVybnMgfHwgW107XG4gICAgICAgICAgICBhdHRyUGF0dGVybi5wYXR0ZXJuID0gcGF0dGVyblRvUmVnRXhwKGF0dHJOYW1lKTtcbiAgICAgICAgICAgIHRhcmdldEVsZW1lbnQuYXR0cmlidXRlUGF0dGVybnMucHVzaChhdHRyUGF0dGVybik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghYXR0cmlidXRlc1thdHRyTmFtZV0pIHtcbiAgICAgICAgICAgICAgYXR0cmlidXRlc09yZGVyLnB1c2goYXR0ck5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXR0cmlidXRlc1thdHRyTmFtZV0gPSBhdHRyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBjbG9uZUF0dHJpYnV0ZXNJbnRvID0gKGZyb20sIHRvKSA9PiB7XG4gICAgICBlYWNoJGQoZnJvbS5hdHRyaWJ1dGVzLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICB0by5hdHRyaWJ1dGVzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgdG8uYXR0cmlidXRlc09yZGVyLnB1c2goLi4uZnJvbS5hdHRyaWJ1dGVzT3JkZXIpO1xuICAgIH07XG4gICAgY29uc3QgcGFyc2VWYWxpZEVsZW1lbnRzUnVsZXMgPSAoZ2xvYmFsRWxlbWVudCwgdmFsaWRFbGVtZW50cykgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudFJ1bGVSZWdFeHAgPSAvXihbIytcXC1dKT8oW15cXFshXFwvXSspKD86XFwvKFteXFxbIV0rKSk/KD86KCE/KVxcWyhbXlxcXV0rKV0pPyQvO1xuICAgICAgcmV0dXJuIGJpbmQkMyhzcGxpdCQxKHZhbGlkRWxlbWVudHMsICcsJyksIHJ1bGUgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gZWxlbWVudFJ1bGVSZWdFeHAuZXhlYyhydWxlKTtcbiAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaGVzWzFdO1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnROYW1lID0gbWF0Y2hlc1syXTtcbiAgICAgICAgICBjb25zdCBvdXRwdXROYW1lID0gbWF0Y2hlc1szXTtcbiAgICAgICAgICBjb25zdCBhdHRyc1ByZWZpeCA9IG1hdGNoZXNbNF07XG4gICAgICAgICAgY29uc3QgYXR0ckRhdGEgPSBtYXRjaGVzWzVdO1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNPcmRlcjogW11cbiAgICAgICAgICB9O1xuICAgICAgICAgIGdsb2JhbEVsZW1lbnQuZWFjaChlbCA9PiBjbG9uZUF0dHJpYnV0ZXNJbnRvKGVsLCBlbGVtZW50KSk7XG4gICAgICAgICAgaWYgKHByZWZpeCA9PT0gJyMnKSB7XG4gICAgICAgICAgICBlbGVtZW50LnBhZGRFbXB0eSA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChwcmVmaXggPT09ICctJykge1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFbXB0eSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhdHRyc1ByZWZpeCA9PT0gJyEnKSB7XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUVtcHR5QXR0cnMgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYXR0ckRhdGEpIHtcbiAgICAgICAgICAgIHBhcnNlVmFsaWRFbGVtZW50c0F0dHJEYXRhSW50b0VsZW1lbnQoYXR0ckRhdGEsIGVsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3V0cHV0TmFtZSkge1xuICAgICAgICAgICAgZWxlbWVudC5vdXRwdXROYW1lID0gZWxlbWVudE5hbWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbGVtZW50TmFtZSA9PT0gJ0AnKSB7XG4gICAgICAgICAgICBpZiAoZ2xvYmFsRWxlbWVudC5pc05vbmUoKSkge1xuICAgICAgICAgICAgICBnbG9iYWxFbGVtZW50ID0gT3B0aW9uYWwuc29tZShlbGVtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFtvdXRwdXROYW1lID8ge1xuICAgICAgICAgICAgICBuYW1lOiBlbGVtZW50TmFtZSxcbiAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgYWxpYXNOYW1lOiBvdXRwdXROYW1lXG4gICAgICAgICAgICB9IDoge1xuICAgICAgICAgICAgICBuYW1lOiBlbGVtZW50TmFtZSxcbiAgICAgICAgICAgICAgZWxlbWVudFxuICAgICAgICAgICAgfV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbWFwQ2FjaGUgPSB7fTtcbiAgICBjb25zdCBtYWtlTWFwJDIgPSBUb29scy5tYWtlTWFwLCBlYWNoJGIgPSBUb29scy5lYWNoLCBleHRlbmQkMiA9IFRvb2xzLmV4dGVuZCwgZXhwbG9kZSQyID0gVG9vbHMuZXhwbG9kZTtcbiAgICBjb25zdCBjcmVhdGVNYXAgPSAoZGVmYXVsdFZhbHVlLCBleHRlbmRXaXRoID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gbWFrZU1hcCQyKGRlZmF1bHRWYWx1ZSwgJyAnLCBtYWtlTWFwJDIoZGVmYXVsdFZhbHVlLnRvVXBwZXJDYXNlKCksICcgJykpO1xuICAgICAgcmV0dXJuIGV4dGVuZCQyKHZhbHVlLCBleHRlbmRXaXRoKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFRleHRSb290QmxvY2tFbGVtZW50cyA9IHNjaGVtYSA9PiBjcmVhdGVNYXAoJ3RkIHRoIGxpIGR0IGRkIGZpZ2NhcHRpb24gY2FwdGlvbiBkZXRhaWxzIHN1bW1hcnknLCBzY2hlbWEuZ2V0VGV4dEJsb2NrRWxlbWVudHMoKSk7XG4gICAgY29uc3QgY29tcGlsZUVsZW1lbnRNYXAgPSAodmFsdWUsIG1vZGUpID0+IHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBjb25zdCBzdHlsZXMgPSB7fTtcbiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlID0geyAnKic6IHZhbHVlIH07XG4gICAgICAgIH1cbiAgICAgICAgZWFjaCRiKHZhbHVlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIHN0eWxlc1trZXldID0gc3R5bGVzW2tleS50b1VwcGVyQ2FzZSgpXSA9IG1vZGUgPT09ICdtYXAnID8gbWFrZU1hcCQyKHZhbHVlLCAvWywgXS8pIDogZXhwbG9kZSQyKHZhbHVlLCAvWywgXS8pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBTY2hlbWEgPSAoc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgZWxlbWVudHMgPSB7fTtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0ge307XG4gICAgICBsZXQgcGF0dGVybkVsZW1lbnRzID0gW107XG4gICAgICBjb25zdCBjdXN0b21FbGVtZW50c01hcCA9IHt9O1xuICAgICAgY29uc3Qgc3BlY2lhbEVsZW1lbnRzID0ge307XG4gICAgICBjb25zdCBjcmVhdGVMb29rdXBUYWJsZSA9IChvcHRpb24sIGRlZmF1bHRWYWx1ZSwgZXh0ZW5kV2l0aCkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHNldHRpbmdzW29wdGlvbl07XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICBsZXQgbmV3VmFsdWUgPSBtYXBDYWNoZVtvcHRpb25dO1xuICAgICAgICAgIGlmICghbmV3VmFsdWUpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gY3JlYXRlTWFwKGRlZmF1bHRWYWx1ZSwgZXh0ZW5kV2l0aCk7XG4gICAgICAgICAgICBtYXBDYWNoZVtvcHRpb25dID0gbmV3VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWFrZU1hcCQyKHZhbHVlLCAvWywgXS8sIG1ha2VNYXAkMih2YWx1ZS50b1VwcGVyQ2FzZSgpLCAvWywgXS8pKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNjaGVtYVR5cGUgPSAoX2EgPSBzZXR0aW5ncy5zY2hlbWEpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdodG1sNSc7XG4gICAgICBjb25zdCBzY2hlbWFJdGVtcyA9IG1ha2VTY2hlbWEoc2NoZW1hVHlwZSk7XG4gICAgICBpZiAoc2V0dGluZ3MudmVyaWZ5X2h0bWwgPT09IGZhbHNlKSB7XG4gICAgICAgIHNldHRpbmdzLnZhbGlkX2VsZW1lbnRzID0gJypbKl0nO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsaWRTdHlsZXMgPSBjb21waWxlRWxlbWVudE1hcChzZXR0aW5ncy52YWxpZF9zdHlsZXMpO1xuICAgICAgY29uc3QgaW52YWxpZFN0eWxlcyA9IGNvbXBpbGVFbGVtZW50TWFwKHNldHRpbmdzLmludmFsaWRfc3R5bGVzLCAnbWFwJyk7XG4gICAgICBjb25zdCB2YWxpZENsYXNzZXMgPSBjb21waWxlRWxlbWVudE1hcChzZXR0aW5ncy52YWxpZF9jbGFzc2VzLCAnbWFwJyk7XG4gICAgICBjb25zdCB3aGl0ZXNwYWNlRWxlbWVudHNNYXAgPSBjcmVhdGVMb29rdXBUYWJsZSgnd2hpdGVzcGFjZV9lbGVtZW50cycsICdwcmUgc2NyaXB0IG5vc2NyaXB0IHN0eWxlIHRleHRhcmVhIHZpZGVvIGF1ZGlvIGlmcmFtZSBvYmplY3QgY29kZScpO1xuICAgICAgY29uc3Qgc2VsZkNsb3NpbmdFbGVtZW50c01hcCA9IGNyZWF0ZUxvb2t1cFRhYmxlKCdzZWxmX2Nsb3NpbmdfZWxlbWVudHMnLCAnY29sZ3JvdXAgZGQgZHQgbGkgb3B0aW9uIHAgdGQgdGZvb3QgdGggdGhlYWQgdHInKTtcbiAgICAgIGNvbnN0IHZvaWRFbGVtZW50c01hcCA9IGNyZWF0ZUxvb2t1cFRhYmxlKCd2b2lkX2VsZW1lbnRzJywgJ2FyZWEgYmFzZSBiYXNlZm9udCBiciBjb2wgZnJhbWUgaHIgaW1nIGlucHV0IGlzaW5kZXggbGluayAnICsgJ21ldGEgcGFyYW0gZW1iZWQgc291cmNlIHdiciB0cmFjaycpO1xuICAgICAgY29uc3QgYm9vbEF0dHJNYXAgPSBjcmVhdGVMb29rdXBUYWJsZSgnYm9vbGVhbl9hdHRyaWJ1dGVzJywgJ2NoZWNrZWQgY29tcGFjdCBkZWNsYXJlIGRlZmVyIGRpc2FibGVkIGlzbWFwIG11bHRpcGxlIG5vaHJlZiBub3Jlc2l6ZSAnICsgJ25vc2hhZGUgbm93cmFwIHJlYWRvbmx5IHNlbGVjdGVkIGF1dG9wbGF5IGxvb3AgY29udHJvbHMgYWxsb3dmdWxsc2NyZWVuJyk7XG4gICAgICBjb25zdCBub25FbXB0eU9yTW92ZUNhcmV0QmVmb3JlT25FbnRlciA9ICd0ZCB0aCBpZnJhbWUgdmlkZW8gYXVkaW8gb2JqZWN0IHNjcmlwdCBjb2RlJztcbiAgICAgIGNvbnN0IG5vbkVtcHR5RWxlbWVudHNNYXAgPSBjcmVhdGVMb29rdXBUYWJsZSgnbm9uX2VtcHR5X2VsZW1lbnRzJywgbm9uRW1wdHlPck1vdmVDYXJldEJlZm9yZU9uRW50ZXIgKyAnIHByZScsIHZvaWRFbGVtZW50c01hcCk7XG4gICAgICBjb25zdCBtb3ZlQ2FyZXRCZWZvcmVPbkVudGVyRWxlbWVudHNNYXAgPSBjcmVhdGVMb29rdXBUYWJsZSgnbW92ZV9jYXJldF9iZWZvcmVfb25fZW50ZXJfZWxlbWVudHMnLCBub25FbXB0eU9yTW92ZUNhcmV0QmVmb3JlT25FbnRlciArICcgdGFibGUnLCB2b2lkRWxlbWVudHNNYXApO1xuICAgICAgY29uc3QgdGV4dEJsb2NrRWxlbWVudHNNYXAgPSBjcmVhdGVMb29rdXBUYWJsZSgndGV4dF9ibG9ja19lbGVtZW50cycsICdoMSBoMiBoMyBoNCBoNSBoNiBwIGRpdiBhZGRyZXNzIHByZSBmb3JtICcgKyAnYmxvY2txdW90ZSBjZW50ZXIgZGlyIGZpZWxkc2V0IGhlYWRlciBmb290ZXIgYXJ0aWNsZSBzZWN0aW9uIGhncm91cCBhc2lkZSBtYWluIG5hdiBmaWd1cmUnKTtcbiAgICAgIGNvbnN0IGJsb2NrRWxlbWVudHNNYXAgPSBjcmVhdGVMb29rdXBUYWJsZSgnYmxvY2tfZWxlbWVudHMnLCAnaHIgdGFibGUgdGJvZHkgdGhlYWQgdGZvb3QgJyArICd0aCB0ciB0ZCBsaSBvbCB1bCBjYXB0aW9uIGRsIGR0IGRkIG5vc2NyaXB0IG1lbnUgaXNpbmRleCBvcHRpb24gJyArICdkYXRhbGlzdCBzZWxlY3Qgb3B0Z3JvdXAgZmlnY2FwdGlvbiBkZXRhaWxzIHN1bW1hcnknLCB0ZXh0QmxvY2tFbGVtZW50c01hcCk7XG4gICAgICBjb25zdCB0ZXh0SW5saW5lRWxlbWVudHNNYXAgPSBjcmVhdGVMb29rdXBUYWJsZSgndGV4dF9pbmxpbmVfZWxlbWVudHMnLCAnc3BhbiBzdHJvbmcgYiBlbSBpIGZvbnQgcyBzdHJpa2UgdSB2YXIgY2l0ZSAnICsgJ2RmbiBjb2RlIG1hcmsgcSBzdXAgc3ViIHNhbXAnKTtcbiAgICAgIGNvbnN0IHRyYW5zcGFyZW50RWxlbWVudHNNYXAgPSBjcmVhdGVMb29rdXBUYWJsZSgndHJhbnNwYXJlbnRfZWxlbWVudHMnLCAnYSBpbnMgZGVsIGNhbnZhcyBtYXAnKTtcbiAgICAgIGVhY2gkYignc2NyaXB0IG5vc2NyaXB0IGlmcmFtZSBub2ZyYW1lcyBub2VtYmVkIHRpdGxlIHN0eWxlIHRleHRhcmVhIHhtcCBwbGFpbnRleHQnLnNwbGl0KCcgJyksIG5hbWUgPT4ge1xuICAgICAgICBzcGVjaWFsRWxlbWVudHNbbmFtZV0gPSBuZXcgUmVnRXhwKCc8LycgKyBuYW1lICsgJ1tePl0qPicsICdnaScpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBhZGRWYWxpZEVsZW1lbnRzID0gdmFsaWRFbGVtZW50cyA9PiB7XG4gICAgICAgIGNvbnN0IGdsb2JhbEVsZW1lbnQgPSBPcHRpb25hbC5mcm9tKGVsZW1lbnRzWydAJ10pO1xuICAgICAgICBjb25zdCBoYXNQYXR0ZXJuc1JlZ0V4cCA9IC9bKj8rXS87XG4gICAgICAgIGVhY2gkZShwYXJzZVZhbGlkRWxlbWVudHNSdWxlcyhnbG9iYWxFbGVtZW50LCB2YWxpZEVsZW1lbnRzICE9PSBudWxsICYmIHZhbGlkRWxlbWVudHMgIT09IHZvaWQgMCA/IHZhbGlkRWxlbWVudHMgOiAnJyksICh7bmFtZSwgZWxlbWVudCwgYWxpYXNOYW1lfSkgPT4ge1xuICAgICAgICAgIGlmIChhbGlhc05hbWUpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzW2FsaWFzTmFtZV0gPSBlbGVtZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFzUGF0dGVybnNSZWdFeHAudGVzdChuYW1lKSkge1xuICAgICAgICAgICAgY29uc3QgcGF0dGVybkVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICAgICAgcGF0dGVybkVsZW1lbnQucGF0dGVybiA9IHBhdHRlcm5Ub1JlZ0V4cChuYW1lKTtcbiAgICAgICAgICAgIHBhdHRlcm5FbGVtZW50cy5wdXNoKHBhdHRlcm5FbGVtZW50KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxlbWVudHNbbmFtZV0gPSBlbGVtZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0VmFsaWRFbGVtZW50cyA9IHZhbGlkRWxlbWVudHMgPT4ge1xuICAgICAgICBwYXR0ZXJuRWxlbWVudHMgPSBbXTtcbiAgICAgICAgZWFjaCRlKGtleXMoZWxlbWVudHMpLCBuYW1lID0+IHtcbiAgICAgICAgICBkZWxldGUgZWxlbWVudHNbbmFtZV07XG4gICAgICAgIH0pO1xuICAgICAgICBhZGRWYWxpZEVsZW1lbnRzKHZhbGlkRWxlbWVudHMpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkZEN1c3RvbUVsZW1lbnRzID0gY3VzdG9tRWxlbWVudHMgPT4ge1xuICAgICAgICBkZWxldGUgbWFwQ2FjaGUudGV4dF9ibG9ja19lbGVtZW50cztcbiAgICAgICAgZGVsZXRlIG1hcENhY2hlLmJsb2NrX2VsZW1lbnRzO1xuICAgICAgICBlYWNoJGUocGFyc2VDdXN0b21FbGVtZW50c1J1bGVzKGN1c3RvbUVsZW1lbnRzICE9PSBudWxsICYmIGN1c3RvbUVsZW1lbnRzICE9PSB2b2lkIDAgPyBjdXN0b21FbGVtZW50cyA6ICcnKSwgKHtpbmxpbmUsIG5hbWUsIGNsb25lTmFtZX0pID0+IHtcbiAgICAgICAgICBjaGlsZHJlbltuYW1lXSA9IGNoaWxkcmVuW2Nsb25lTmFtZV07XG4gICAgICAgICAgY3VzdG9tRWxlbWVudHNNYXBbbmFtZV0gPSBjbG9uZU5hbWU7XG4gICAgICAgICAgbm9uRW1wdHlFbGVtZW50c01hcFtuYW1lLnRvVXBwZXJDYXNlKCldID0ge307XG4gICAgICAgICAgbm9uRW1wdHlFbGVtZW50c01hcFtuYW1lXSA9IHt9O1xuICAgICAgICAgIGlmICghaW5saW5lKSB7XG4gICAgICAgICAgICBibG9ja0VsZW1lbnRzTWFwW25hbWUudG9VcHBlckNhc2UoKV0gPSB7fTtcbiAgICAgICAgICAgIGJsb2NrRWxlbWVudHNNYXBbbmFtZV0gPSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFlbGVtZW50c1tuYW1lXSkge1xuICAgICAgICAgICAgbGV0IGN1c3RvbVJ1bGUgPSBlbGVtZW50c1tjbG9uZU5hbWVdO1xuICAgICAgICAgICAgY3VzdG9tUnVsZSA9IGV4dGVuZCQyKHt9LCBjdXN0b21SdWxlKTtcbiAgICAgICAgICAgIGRlbGV0ZSBjdXN0b21SdWxlLnJlbW92ZUVtcHR5QXR0cnM7XG4gICAgICAgICAgICBkZWxldGUgY3VzdG9tUnVsZS5yZW1vdmVFbXB0eTtcbiAgICAgICAgICAgIGVsZW1lbnRzW25hbWVdID0gY3VzdG9tUnVsZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWFjaCRkKGNoaWxkcmVuLCAoZWxlbWVudCwgZWxtTmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnRbY2xvbmVOYW1lXSkge1xuICAgICAgICAgICAgICBjaGlsZHJlbltlbG1OYW1lXSA9IGVsZW1lbnQgPSBleHRlbmQkMih7fSwgY2hpbGRyZW5bZWxtTmFtZV0pO1xuICAgICAgICAgICAgICBlbGVtZW50W25hbWVdID0gZWxlbWVudFtjbG9uZU5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBhZGRWYWxpZENoaWxkcmVuID0gdmFsaWRDaGlsZHJlbiA9PiB7XG4gICAgICAgIGVhY2gkZShwYXJzZVZhbGlkQ2hpbGRyZW5SdWxlcyh2YWxpZENoaWxkcmVuICE9PSBudWxsICYmIHZhbGlkQ2hpbGRyZW4gIT09IHZvaWQgMCA/IHZhbGlkQ2hpbGRyZW4gOiAnJyksICh7b3BlcmF0aW9uLCBuYW1lLCB2YWxpZENoaWxkcmVufSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcmVudCA9IG9wZXJhdGlvbiA9PT0gJ3JlcGxhY2UnID8geyAnI2NvbW1lbnQnOiB7fSB9IDogY2hpbGRyZW5bbmFtZV07XG4gICAgICAgICAgZWFjaCRlKHZhbGlkQ2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgICAgIGlmIChvcGVyYXRpb24gPT09ICdyZW1vdmUnKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSBwYXJlbnRbY2hpbGRdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGFyZW50W2NoaWxkXSA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNoaWxkcmVuW25hbWVdID0gcGFyZW50O1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRFbGVtZW50UnVsZSA9IG5hbWUgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbbmFtZV07XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGkgPSBwYXR0ZXJuRWxlbWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgY29uc3QgcGF0dGVybkVsZW1lbnQgPSBwYXR0ZXJuRWxlbWVudHNbaV07XG4gICAgICAgICAgaWYgKHBhdHRlcm5FbGVtZW50LnBhdHRlcm4udGVzdChuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm5FbGVtZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfTtcbiAgICAgIGlmICghc2V0dGluZ3MudmFsaWRfZWxlbWVudHMpIHtcbiAgICAgICAgZWFjaCRiKHNjaGVtYUl0ZW1zLCAoZWxlbWVudCwgbmFtZSkgPT4ge1xuICAgICAgICAgIGVsZW1lbnRzW25hbWVdID0ge1xuICAgICAgICAgICAgYXR0cmlidXRlczogZWxlbWVudC5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgYXR0cmlidXRlc09yZGVyOiBlbGVtZW50LmF0dHJpYnV0ZXNPcmRlclxuICAgICAgICAgIH07XG4gICAgICAgICAgY2hpbGRyZW5bbmFtZV0gPSBlbGVtZW50LmNoaWxkcmVuO1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaCRiKHNwbGl0JDEoJ3N0cm9uZy9iIGVtL2knKSwgaXRlbSA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbXMgPSBzcGxpdCQxKGl0ZW0sICcvJyk7XG4gICAgICAgICAgZWxlbWVudHNbaXRlbXNbMV1dLm91dHB1dE5hbWUgPSBpdGVtc1swXTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2gkYih0ZXh0SW5saW5lRWxlbWVudHNNYXAsIChfdmFsLCBuYW1lKSA9PiB7XG4gICAgICAgICAgaWYgKGVsZW1lbnRzW25hbWVdKSB7XG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MucGFkZF9lbXB0eV9ibG9ja19pbmxpbmVfY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgZWxlbWVudHNbbmFtZV0ucGFkZEluRW1wdHlCbG9jayA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50c1tuYW1lXS5yZW1vdmVFbXB0eSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZWFjaCRiKHNwbGl0JDEoJ29sIHVsIGJsb2NrcXVvdGUgYSB0YWJsZSB0Ym9keScpLCBuYW1lID0+IHtcbiAgICAgICAgICBpZiAoZWxlbWVudHNbbmFtZV0pIHtcbiAgICAgICAgICAgIGVsZW1lbnRzW25hbWVdLnJlbW92ZUVtcHR5ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoJGIoc3BsaXQkMSgncCBoMSBoMiBoMyBoNCBoNSBoNiB0aCB0ZCBwcmUgZGl2IGFkZHJlc3MgY2FwdGlvbiBsaSBzdW1tYXJ5JyksIG5hbWUgPT4ge1xuICAgICAgICAgIGlmIChlbGVtZW50c1tuYW1lXSkge1xuICAgICAgICAgICAgZWxlbWVudHNbbmFtZV0ucGFkZEVtcHR5ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoJGIoc3BsaXQkMSgnc3BhbicpLCBuYW1lID0+IHtcbiAgICAgICAgICBlbGVtZW50c1tuYW1lXS5yZW1vdmVFbXB0eUF0dHJzID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRWYWxpZEVsZW1lbnRzKHNldHRpbmdzLnZhbGlkX2VsZW1lbnRzKTtcbiAgICAgICAgZWFjaCRiKHNjaGVtYUl0ZW1zLCAoZWxlbWVudCwgbmFtZSkgPT4ge1xuICAgICAgICAgIGNoaWxkcmVuW25hbWVdID0gZWxlbWVudC5jaGlsZHJlbjtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhZGRDdXN0b21FbGVtZW50cyhzZXR0aW5ncy5jdXN0b21fZWxlbWVudHMpO1xuICAgICAgYWRkVmFsaWRDaGlsZHJlbihzZXR0aW5ncy52YWxpZF9jaGlsZHJlbik7XG4gICAgICBhZGRWYWxpZEVsZW1lbnRzKHNldHRpbmdzLmV4dGVuZGVkX3ZhbGlkX2VsZW1lbnRzKTtcbiAgICAgIGFkZFZhbGlkQ2hpbGRyZW4oJytvbFt1bHxvbF0sK3VsW3VsfG9sXScpO1xuICAgICAgZWFjaCRiKHtcbiAgICAgICAgZGQ6ICdkbCcsXG4gICAgICAgIGR0OiAnZGwnLFxuICAgICAgICBsaTogJ3VsIG9sJyxcbiAgICAgICAgdGQ6ICd0cicsXG4gICAgICAgIHRoOiAndHInLFxuICAgICAgICB0cjogJ3Rib2R5IHRoZWFkIHRmb290JyxcbiAgICAgICAgdGJvZHk6ICd0YWJsZScsXG4gICAgICAgIHRoZWFkOiAndGFibGUnLFxuICAgICAgICB0Zm9vdDogJ3RhYmxlJyxcbiAgICAgICAgbGVnZW5kOiAnZmllbGRzZXQnLFxuICAgICAgICBhcmVhOiAnbWFwJyxcbiAgICAgICAgcGFyYW06ICd2aWRlbyBhdWRpbyBvYmplY3QnXG4gICAgICB9LCAocGFyZW50cywgaXRlbSkgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudHNbaXRlbV0pIHtcbiAgICAgICAgICBlbGVtZW50c1tpdGVtXS5wYXJlbnRzUmVxdWlyZWQgPSBzcGxpdCQxKHBhcmVudHMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChzZXR0aW5ncy5pbnZhbGlkX2VsZW1lbnRzKSB7XG4gICAgICAgIGVhY2gkYihleHBsb2RlJDIoc2V0dGluZ3MuaW52YWxpZF9lbGVtZW50cyksIGl0ZW0gPT4ge1xuICAgICAgICAgIGlmIChlbGVtZW50c1tpdGVtXSkge1xuICAgICAgICAgICAgZGVsZXRlIGVsZW1lbnRzW2l0ZW1dO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoIWdldEVsZW1lbnRSdWxlKCdzcGFuJykpIHtcbiAgICAgICAgYWRkVmFsaWRFbGVtZW50cygnc3BhblshZGF0YS1tY2UtdHlwZXwqXScpO1xuICAgICAgfVxuICAgICAgY29uc3QgZ2V0VmFsaWRTdHlsZXMgPSBjb25zdGFudCh2YWxpZFN0eWxlcyk7XG4gICAgICBjb25zdCBnZXRJbnZhbGlkU3R5bGVzID0gY29uc3RhbnQoaW52YWxpZFN0eWxlcyk7XG4gICAgICBjb25zdCBnZXRWYWxpZENsYXNzZXMgPSBjb25zdGFudCh2YWxpZENsYXNzZXMpO1xuICAgICAgY29uc3QgZ2V0Qm9vbEF0dHJzID0gY29uc3RhbnQoYm9vbEF0dHJNYXApO1xuICAgICAgY29uc3QgZ2V0QmxvY2tFbGVtZW50cyA9IGNvbnN0YW50KGJsb2NrRWxlbWVudHNNYXApO1xuICAgICAgY29uc3QgZ2V0VGV4dEJsb2NrRWxlbWVudHMgPSBjb25zdGFudCh0ZXh0QmxvY2tFbGVtZW50c01hcCk7XG4gICAgICBjb25zdCBnZXRUZXh0SW5saW5lRWxlbWVudHMgPSBjb25zdGFudCh0ZXh0SW5saW5lRWxlbWVudHNNYXApO1xuICAgICAgY29uc3QgZ2V0Vm9pZEVsZW1lbnRzID0gY29uc3RhbnQoT2JqZWN0LnNlYWwodm9pZEVsZW1lbnRzTWFwKSk7XG4gICAgICBjb25zdCBnZXRTZWxmQ2xvc2luZ0VsZW1lbnRzID0gY29uc3RhbnQoc2VsZkNsb3NpbmdFbGVtZW50c01hcCk7XG4gICAgICBjb25zdCBnZXROb25FbXB0eUVsZW1lbnRzID0gY29uc3RhbnQobm9uRW1wdHlFbGVtZW50c01hcCk7XG4gICAgICBjb25zdCBnZXRNb3ZlQ2FyZXRCZWZvcmVPbkVudGVyRWxlbWVudHMgPSBjb25zdGFudChtb3ZlQ2FyZXRCZWZvcmVPbkVudGVyRWxlbWVudHNNYXApO1xuICAgICAgY29uc3QgZ2V0V2hpdGVzcGFjZUVsZW1lbnRzID0gY29uc3RhbnQod2hpdGVzcGFjZUVsZW1lbnRzTWFwKTtcbiAgICAgIGNvbnN0IGdldFRyYW5zcGFyZW50RWxlbWVudHMgPSBjb25zdGFudCh0cmFuc3BhcmVudEVsZW1lbnRzTWFwKTtcbiAgICAgIGNvbnN0IGdldFNwZWNpYWxFbGVtZW50cyA9IGNvbnN0YW50KE9iamVjdC5zZWFsKHNwZWNpYWxFbGVtZW50cykpO1xuICAgICAgY29uc3QgaXNWYWxpZENoaWxkID0gKG5hbWUsIGNoaWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGNoaWxkcmVuW25hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIHJldHVybiAhIShwYXJlbnQgJiYgcGFyZW50W2NoaWxkLnRvTG93ZXJDYXNlKCldKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1ZhbGlkID0gKG5hbWUsIGF0dHIpID0+IHtcbiAgICAgICAgY29uc3QgcnVsZSA9IGdldEVsZW1lbnRSdWxlKG5hbWUpO1xuICAgICAgICBpZiAocnVsZSkge1xuICAgICAgICAgIGlmIChhdHRyKSB7XG4gICAgICAgICAgICBpZiAocnVsZS5hdHRyaWJ1dGVzW2F0dHJdKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXR0clBhdHRlcm5zID0gcnVsZS5hdHRyaWJ1dGVQYXR0ZXJucztcbiAgICAgICAgICAgIGlmIChhdHRyUGF0dGVybnMpIHtcbiAgICAgICAgICAgICAgbGV0IGkgPSBhdHRyUGF0dGVybnMubGVuZ3RoO1xuICAgICAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKGF0dHJQYXR0ZXJuc1tpXS5wYXR0ZXJuLnRlc3QoYXR0cikpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldEN1c3RvbUVsZW1lbnRzID0gY29uc3RhbnQoY3VzdG9tRWxlbWVudHNNYXApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogc2NoZW1hVHlwZSxcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICBnZXRWYWxpZFN0eWxlcyxcbiAgICAgICAgZ2V0VmFsaWRDbGFzc2VzLFxuICAgICAgICBnZXRCbG9ja0VsZW1lbnRzLFxuICAgICAgICBnZXRJbnZhbGlkU3R5bGVzLFxuICAgICAgICBnZXRWb2lkRWxlbWVudHMsXG4gICAgICAgIGdldFRleHRCbG9ja0VsZW1lbnRzLFxuICAgICAgICBnZXRUZXh0SW5saW5lRWxlbWVudHMsXG4gICAgICAgIGdldEJvb2xBdHRycyxcbiAgICAgICAgZ2V0RWxlbWVudFJ1bGUsXG4gICAgICAgIGdldFNlbGZDbG9zaW5nRWxlbWVudHMsXG4gICAgICAgIGdldE5vbkVtcHR5RWxlbWVudHMsXG4gICAgICAgIGdldE1vdmVDYXJldEJlZm9yZU9uRW50ZXJFbGVtZW50cyxcbiAgICAgICAgZ2V0V2hpdGVzcGFjZUVsZW1lbnRzLFxuICAgICAgICBnZXRUcmFuc3BhcmVudEVsZW1lbnRzLFxuICAgICAgICBnZXRTcGVjaWFsRWxlbWVudHMsXG4gICAgICAgIGlzVmFsaWRDaGlsZCxcbiAgICAgICAgaXNWYWxpZCxcbiAgICAgICAgZ2V0Q3VzdG9tRWxlbWVudHMsXG4gICAgICAgIGFkZFZhbGlkRWxlbWVudHMsXG4gICAgICAgIHNldFZhbGlkRWxlbWVudHMsXG4gICAgICAgIGFkZEN1c3RvbUVsZW1lbnRzLFxuICAgICAgICBhZGRWYWxpZENoaWxkcmVuXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBTdHlsZXMgPSAoc2V0dGluZ3MgPSB7fSwgc2NoZW1hKSA9PiB7XG4gICAgICBjb25zdCB1cmxPclN0clJlZ0V4cCA9IC8oPzp1cmwoPzooPzpcXChcXHMqXFxcIihbXlxcXCJdKylcXFwiXFxzKlxcKSl8KD86XFwoXFxzKlxcJyhbXlxcJ10rKVxcJ1xccypcXCkpfCg/OlxcKFxccyooW14pXFxzXSspXFxzKlxcKSkpKXwoPzpcXCcoW15cXCddKylcXCcpfCg/OlxcXCIoW15cXFwiXSspXFxcIikvZ2k7XG4gICAgICBjb25zdCBzdHlsZVJlZ0V4cCA9IC9cXHMqKFteOl0rKTpcXHMqKFteO10rKTs/L2c7XG4gICAgICBjb25zdCB0cmltUmlnaHRSZWdFeHAgPSAvXFxzKyQvO1xuICAgICAgY29uc3QgZW5jb2RpbmdMb29rdXAgPSB7fTtcbiAgICAgIGxldCB2YWxpZFN0eWxlcztcbiAgICAgIGxldCBpbnZhbGlkU3R5bGVzO1xuICAgICAgY29uc3QgaW52aXNpYmxlQ2hhciA9IHplcm9XaWR0aDtcbiAgICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAgdmFsaWRTdHlsZXMgPSBzY2hlbWEuZ2V0VmFsaWRTdHlsZXMoKTtcbiAgICAgICAgaW52YWxpZFN0eWxlcyA9IHNjaGVtYS5nZXRJbnZhbGlkU3R5bGVzKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBlbmNvZGluZ0l0ZW1zID0gKGBcXFxcXCIgXFxcXCcgXFxcXDsgXFxcXDogOyA6IGAgKyBpbnZpc2libGVDaGFyKS5zcGxpdCgnICcpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbmNvZGluZ0l0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVuY29kaW5nTG9va3VwW2VuY29kaW5nSXRlbXNbaV1dID0gaW52aXNpYmxlQ2hhciArIGk7XG4gICAgICAgIGVuY29kaW5nTG9va3VwW2ludmlzaWJsZUNoYXIgKyBpXSA9IGVuY29kaW5nSXRlbXNbaV07XG4gICAgICB9XG4gICAgICBjb25zdCBzZWxmID0ge1xuICAgICAgICBwYXJzZTogY3NzID0+IHtcbiAgICAgICAgICBjb25zdCBzdHlsZXMgPSB7fTtcbiAgICAgICAgICBsZXQgaXNFbmNvZGVkID0gZmFsc2U7XG4gICAgICAgICAgY29uc3QgdXJsQ29udmVydGVyID0gc2V0dGluZ3MudXJsX2NvbnZlcnRlcjtcbiAgICAgICAgICBjb25zdCB1cmxDb252ZXJ0ZXJTY29wZSA9IHNldHRpbmdzLnVybF9jb252ZXJ0ZXJfc2NvcGUgfHwgc2VsZjtcbiAgICAgICAgICBjb25zdCBjb21wcmVzcyA9IChwcmVmaXgsIHN1ZmZpeCwgbm9Kb2luKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0b3AgPSBzdHlsZXNbcHJlZml4ICsgJy10b3AnICsgc3VmZml4XTtcbiAgICAgICAgICAgIGlmICghdG9wKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gc3R5bGVzW3ByZWZpeCArICctcmlnaHQnICsgc3VmZml4XTtcbiAgICAgICAgICAgIGlmICghcmlnaHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYm90dG9tID0gc3R5bGVzW3ByZWZpeCArICctYm90dG9tJyArIHN1ZmZpeF07XG4gICAgICAgICAgICBpZiAoIWJvdHRvbSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gc3R5bGVzW3ByZWZpeCArICctbGVmdCcgKyBzdWZmaXhdO1xuICAgICAgICAgICAgaWYgKCFsZWZ0KSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJveCA9IFtcbiAgICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgICByaWdodCxcbiAgICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgICBsZWZ0XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbGV0IGkgPSBib3gubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgICAgaWYgKGJveFtpXSAhPT0gYm94W2kgKyAxXSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaSA+IC0xICYmIG5vSm9pbikge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHlsZXNbcHJlZml4ICsgc3VmZml4XSA9IGkgPT09IC0xID8gYm94WzBdIDogYm94LmpvaW4oJyAnKTtcbiAgICAgICAgICAgIGRlbGV0ZSBzdHlsZXNbcHJlZml4ICsgJy10b3AnICsgc3VmZml4XTtcbiAgICAgICAgICAgIGRlbGV0ZSBzdHlsZXNbcHJlZml4ICsgJy1yaWdodCcgKyBzdWZmaXhdO1xuICAgICAgICAgICAgZGVsZXRlIHN0eWxlc1twcmVmaXggKyAnLWJvdHRvbScgKyBzdWZmaXhdO1xuICAgICAgICAgICAgZGVsZXRlIHN0eWxlc1twcmVmaXggKyAnLWxlZnQnICsgc3VmZml4XTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGNhbkNvbXByZXNzID0ga2V5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gc3R5bGVzW2tleV07XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHZhbHVlLmluZGV4T2YoJywnKSA+IC0xID8gW3ZhbHVlXSA6IHZhbHVlLnNwbGl0KCcgJyk7XG4gICAgICAgICAgICBsZXQgaSA9IHZhbHVlcy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZXNbaV0gIT09IHZhbHVlc1swXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3R5bGVzW2tleV0gPSB2YWx1ZXNbMF07XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGNvbXByZXNzMiA9ICh0YXJnZXQsIGEsIGIsIGMpID0+IHtcbiAgICAgICAgICAgIGlmICghY2FuQ29tcHJlc3MoYSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjYW5Db21wcmVzcyhiKSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNhbkNvbXByZXNzKGMpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0eWxlc1t0YXJnZXRdID0gc3R5bGVzW2FdICsgJyAnICsgc3R5bGVzW2JdICsgJyAnICsgc3R5bGVzW2NdO1xuICAgICAgICAgICAgZGVsZXRlIHN0eWxlc1thXTtcbiAgICAgICAgICAgIGRlbGV0ZSBzdHlsZXNbYl07XG4gICAgICAgICAgICBkZWxldGUgc3R5bGVzW2NdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgZW5jb2RlID0gc3RyID0+IHtcbiAgICAgICAgICAgIGlzRW5jb2RlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RpbmdMb29rdXBbc3RyXTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGRlY29kZSA9IChzdHIsIGtlZXBTbGFzaGVzKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNFbmNvZGVkKSB7XG4gICAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHVGRUZGWzAtOV0vZywgc3RyID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RpbmdMb29rdXBbc3RyXTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWtlZXBTbGFzaGVzKSB7XG4gICAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXFxcKFtcXCdcXFwiOzpdKS9nLCAnJDEnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBkZWNvZGVTaW5nbGVIZXhTZXF1ZW5jZSA9IGVzY1NlcSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChlc2NTZXEuc2xpY2UoMSksIDE2KSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBkZWNvZGVIZXhTZXF1ZW5jZXMgPSB2YWx1ZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvXFxcXFswLTlhLWZdKy9naSwgZGVjb2RlU2luZ2xlSGV4U2VxdWVuY2UpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgcHJvY2Vzc1VybCA9IChtYXRjaCwgdXJsLCB1cmwyLCB1cmwzLCBzdHIsIHN0cjIpID0+IHtcbiAgICAgICAgICAgIHN0ciA9IHN0ciB8fCBzdHIyO1xuICAgICAgICAgICAgaWYgKHN0cikge1xuICAgICAgICAgICAgICBzdHIgPSBkZWNvZGUoc3RyKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGAnYCArIHN0ci5yZXBsYWNlKC9cXCcvZywgYFxcXFwnYCkgKyBgJ2A7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cmwgPSBkZWNvZGUodXJsIHx8IHVybDIgfHwgdXJsMyB8fCAnJyk7XG4gICAgICAgICAgICBpZiAoIXNldHRpbmdzLmFsbG93X3NjcmlwdF91cmxzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNjcmlwdFVybCA9IHVybC5yZXBsYWNlKC9bXFxzXFxyXFxuXSsvZywgJycpO1xuICAgICAgICAgICAgICBpZiAoLyhqYXZhfHZiKXNjcmlwdDovaS50ZXN0KHNjcmlwdFVybCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCFzZXR0aW5ncy5hbGxvd19zdmdfZGF0YV91cmxzICYmIC9eZGF0YTppbWFnZVxcL3N2Zy9pLnRlc3Qoc2NyaXB0VXJsKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHVybENvbnZlcnRlcikge1xuICAgICAgICAgICAgICB1cmwgPSB1cmxDb252ZXJ0ZXIuY2FsbCh1cmxDb252ZXJ0ZXJTY29wZSwgdXJsLCAnc3R5bGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBgdXJsKCdgICsgdXJsLnJlcGxhY2UoL1xcJy9nLCBgXFxcXCdgKSArIGAnKWA7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoY3NzKSB7XG4gICAgICAgICAgICBjc3MgPSBjc3MucmVwbGFjZSgvW1xcdTAwMDAtXFx1MDAxRl0vZywgJycpO1xuICAgICAgICAgICAgY3NzID0gY3NzLnJlcGxhY2UoL1xcXFxbXFxcIlxcJzs6XFx1RkVGRl0vZywgZW5jb2RlKS5yZXBsYWNlKC9cXFwiW15cXFwiXStcXFwifFxcJ1teXFwnXStcXCcvZywgc3RyID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bOzpdL2csIGVuY29kZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBtYXRjaGVzO1xuICAgICAgICAgICAgd2hpbGUgKG1hdGNoZXMgPSBzdHlsZVJlZ0V4cC5leGVjKGNzcykpIHtcbiAgICAgICAgICAgICAgc3R5bGVSZWdFeHAubGFzdEluZGV4ID0gbWF0Y2hlcy5pbmRleCArIG1hdGNoZXNbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoZXNbMV0ucmVwbGFjZSh0cmltUmlnaHRSZWdFeHAsICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBtYXRjaGVzWzJdLnJlcGxhY2UodHJpbVJpZ2h0UmVnRXhwLCAnJyk7XG4gICAgICAgICAgICAgIGlmIChuYW1lICYmIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbmFtZSA9IGRlY29kZUhleFNlcXVlbmNlcyhuYW1lKTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGRlY29kZUhleFNlcXVlbmNlcyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUuaW5kZXhPZihpbnZpc2libGVDaGFyKSAhPT0gLTEgfHwgbmFtZS5pbmRleE9mKCdcIicpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghc2V0dGluZ3MuYWxsb3dfc2NyaXB0X3VybHMgJiYgKG5hbWUgPT09ICdiZWhhdmlvcicgfHwgL2V4cHJlc3Npb25cXHMqXFwofFxcL1xcKnxcXCpcXC8vLnRlc3QodmFsdWUpKSkge1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnZm9udC13ZWlnaHQnICYmIHZhbHVlID09PSAnNzAwJykge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSAnYm9sZCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnY29sb3InIHx8IG5hbWUgPT09ICdiYWNrZ3JvdW5kLWNvbG9yJykge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UodXJsT3JTdHJSZWdFeHAsIHByb2Nlc3NVcmwpO1xuICAgICAgICAgICAgICAgIHN0eWxlc1tuYW1lXSA9IGlzRW5jb2RlZCA/IGRlY29kZSh2YWx1ZSwgdHJ1ZSkgOiB2YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcHJlc3MoJ2JvcmRlcicsICcnLCB0cnVlKTtcbiAgICAgICAgICAgIGNvbXByZXNzKCdib3JkZXInLCAnLXdpZHRoJyk7XG4gICAgICAgICAgICBjb21wcmVzcygnYm9yZGVyJywgJy1jb2xvcicpO1xuICAgICAgICAgICAgY29tcHJlc3MoJ2JvcmRlcicsICctc3R5bGUnKTtcbiAgICAgICAgICAgIGNvbXByZXNzKCdwYWRkaW5nJywgJycpO1xuICAgICAgICAgICAgY29tcHJlc3MoJ21hcmdpbicsICcnKTtcbiAgICAgICAgICAgIGNvbXByZXNzMignYm9yZGVyJywgJ2JvcmRlci13aWR0aCcsICdib3JkZXItc3R5bGUnLCAnYm9yZGVyLWNvbG9yJyk7XG4gICAgICAgICAgICBpZiAoc3R5bGVzLmJvcmRlciA9PT0gJ21lZGl1bSBub25lJykge1xuICAgICAgICAgICAgICBkZWxldGUgc3R5bGVzLmJvcmRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHlsZXNbJ2JvcmRlci1pbWFnZSddID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHN0eWxlc1snYm9yZGVyLWltYWdlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNlcmlhbGl6ZTogKHN0eWxlcywgZWxlbWVudE5hbWUpID0+IHtcbiAgICAgICAgICBsZXQgY3NzID0gJyc7XG4gICAgICAgICAgY29uc3Qgc2VyaWFsaXplU3R5bGVzID0gKGVsZW1OYW1lLCB2YWxpZFN0eWxlTGlzdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3R5bGVMaXN0ID0gdmFsaWRTdHlsZUxpc3RbZWxlbU5hbWVdO1xuICAgICAgICAgICAgaWYgKHN0eWxlTGlzdCkge1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHN0eWxlTGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gc3R5bGVMaXN0W2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gc3R5bGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgY3NzICs9IChjc3MubGVuZ3RoID4gMCA/ICcgJyA6ICcnKSArIG5hbWUgKyAnOiAnICsgdmFsdWUgKyAnOyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gKG5hbWUsIGVsZW1OYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWludmFsaWRTdHlsZXMgfHwgIWVsZW1OYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHN0eWxlTWFwID0gaW52YWxpZFN0eWxlc1snKiddO1xuICAgICAgICAgICAgaWYgKHN0eWxlTWFwICYmIHN0eWxlTWFwW25hbWVdKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0eWxlTWFwID0gaW52YWxpZFN0eWxlc1tlbGVtTmFtZV07XG4gICAgICAgICAgICByZXR1cm4gIShzdHlsZU1hcCAmJiBzdHlsZU1hcFtuYW1lXSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoZWxlbWVudE5hbWUgJiYgdmFsaWRTdHlsZXMpIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZVN0eWxlcygnKicsIHZhbGlkU3R5bGVzKTtcbiAgICAgICAgICAgIHNlcmlhbGl6ZVN0eWxlcyhlbGVtZW50TmFtZSwgdmFsaWRTdHlsZXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlYWNoJGQoc3R5bGVzLCAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIGlzVmFsaWQobmFtZSwgZWxlbWVudE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgY3NzICs9IChjc3MubGVuZ3RoID4gMCA/ICcgJyA6ICcnKSArIG5hbWUgKyAnOiAnICsgdmFsdWUgKyAnOyc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY3NzO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcblxuICAgIGNvbnN0IGRlcHJlY2F0ZWQgPSB7XG4gICAgICBrZXlMb2NhdGlvbjogdHJ1ZSxcbiAgICAgIGxheWVyWDogdHJ1ZSxcbiAgICAgIGxheWVyWTogdHJ1ZSxcbiAgICAgIHJldHVyblZhbHVlOiB0cnVlLFxuICAgICAgd2Via2l0TW92ZW1lbnRYOiB0cnVlLFxuICAgICAgd2Via2l0TW92ZW1lbnRZOiB0cnVlLFxuICAgICAga2V5SWRlbnRpZmllcjogdHJ1ZSxcbiAgICAgIG1velByZXNzdXJlOiB0cnVlXG4gICAgfTtcbiAgICBjb25zdCBpc05hdGl2ZUV2ZW50ID0gZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBFdmVudCB8fCBpc0Z1bmN0aW9uKGV2ZW50LmluaXRFdmVudCk7XG4gICAgY29uc3QgaGFzSXNEZWZhdWx0UHJldmVudGVkID0gZXZlbnQgPT4gZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkID09PSBhbHdheXMgfHwgZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkID09PSBuZXZlcjtcbiAgICBjb25zdCBuZWVkc05vcm1hbGl6aW5nID0gZXZlbnQgPT4gaXNOdWxsYWJsZShldmVudC5wcmV2ZW50RGVmYXVsdCkgfHwgaXNOYXRpdmVFdmVudChldmVudCk7XG4gICAgY29uc3QgY2xvbmUkMyA9IChvcmlnaW5hbEV2ZW50LCBkYXRhKSA9PiB7XG4gICAgICBjb25zdCBldmVudCA9IGRhdGEgIT09IG51bGwgJiYgZGF0YSAhPT0gdm9pZCAwID8gZGF0YSA6IHt9O1xuICAgICAgZm9yIChjb25zdCBuYW1lIGluIG9yaWdpbmFsRXZlbnQpIHtcbiAgICAgICAgaWYgKCFoYXMkMihkZXByZWNhdGVkLCBuYW1lKSkge1xuICAgICAgICAgIGV2ZW50W25hbWVdID0gb3JpZ2luYWxFdmVudFtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzTm9uTnVsbGFibGUob3JpZ2luYWxFdmVudC5jb21wb3NlZFBhdGgpKSB7XG4gICAgICAgIGV2ZW50LmNvbXBvc2VkUGF0aCA9ICgpID0+IG9yaWdpbmFsRXZlbnQuY29tcG9zZWRQYXRoKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfTtcbiAgICBjb25zdCBub3JtYWxpemUkMyA9ICh0eXBlLCBvcmlnaW5hbEV2ZW50LCBmYWxsYmFja1RhcmdldCwgZGF0YSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgZXZlbnQgPSBjbG9uZSQzKG9yaWdpbmFsRXZlbnQsIGRhdGEpO1xuICAgICAgZXZlbnQudHlwZSA9IHR5cGU7XG4gICAgICBpZiAoaXNOdWxsYWJsZShldmVudC50YXJnZXQpKSB7XG4gICAgICAgIGV2ZW50LnRhcmdldCA9IChfYSA9IGV2ZW50LnNyY0VsZW1lbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbGxiYWNrVGFyZ2V0O1xuICAgICAgfVxuICAgICAgaWYgKG5lZWRzTm9ybWFsaXppbmcob3JpZ2luYWxFdmVudCkpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQgPSAoKSA9PiB7XG4gICAgICAgICAgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgICAgICAgZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkID0gYWx3YXlzO1xuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKG9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQpKSB7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24gPSAoKSA9PiB7XG4gICAgICAgICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgICAgICBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGFsd2F5cztcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihvcmlnaW5hbEV2ZW50LnN0b3BQcm9wYWdhdGlvbikpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gPSAoKSA9PiB7XG4gICAgICAgICAgZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSBhbHdheXM7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH07XG4gICAgICAgIGlmICghaGFzSXNEZWZhdWx0UHJldmVudGVkKGV2ZW50KSkge1xuICAgICAgICAgIGV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCA9IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgPT09IHRydWUgPyBhbHdheXMgOiBuZXZlcjtcbiAgICAgICAgICBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGV2ZW50LmNhbmNlbEJ1YmJsZSA9PT0gdHJ1ZSA/IGFsd2F5cyA6IG5ldmVyO1xuICAgICAgICAgIGV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gbmV2ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBldmVudDtcbiAgICB9O1xuXG4gICAgY29uc3QgZXZlbnRFeHBhbmRvUHJlZml4ID0gJ21jZS1kYXRhLSc7XG4gICAgY29uc3QgbW91c2VFdmVudFJlID0gL14oPzptb3VzZXxjb250ZXh0bWVudSl8Y2xpY2svO1xuICAgIGNvbnN0IGFkZEV2ZW50ID0gKHRhcmdldCwgbmFtZSwgY2FsbGJhY2ssIGNhcHR1cmUpID0+IHtcbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGNhbGxiYWNrLCBjYXB0dXJlIHx8IGZhbHNlKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZUV2ZW50ID0gKHRhcmdldCwgbmFtZSwgY2FsbGJhY2ssIGNhcHR1cmUpID0+IHtcbiAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIGNhbGxiYWNrLCBjYXB0dXJlIHx8IGZhbHNlKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzTW91c2VFdmVudCA9IGV2ZW50ID0+IGlzTm9uTnVsbGFibGUoZXZlbnQpICYmIG1vdXNlRXZlbnRSZS50ZXN0KGV2ZW50LnR5cGUpO1xuICAgIGNvbnN0IGZpeCA9IChvcmlnaW5hbEV2ZW50LCBkYXRhKSA9PiB7XG4gICAgICBjb25zdCBldmVudCA9IG5vcm1hbGl6ZSQzKG9yaWdpbmFsRXZlbnQudHlwZSwgb3JpZ2luYWxFdmVudCwgZG9jdW1lbnQsIGRhdGEpO1xuICAgICAgaWYgKGlzTW91c2VFdmVudChvcmlnaW5hbEV2ZW50KSAmJiBpc1VuZGVmaW5lZChvcmlnaW5hbEV2ZW50LnBhZ2VYKSAmJiAhaXNVbmRlZmluZWQob3JpZ2luYWxFdmVudC5jbGllbnRYKSkge1xuICAgICAgICBjb25zdCBldmVudERvYyA9IGV2ZW50LnRhcmdldC5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50O1xuICAgICAgICBjb25zdCBkb2MgPSBldmVudERvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBldmVudERvYy5ib2R5O1xuICAgICAgICBjb25zdCBtb3VzZUV2ZW50ID0gZXZlbnQ7XG4gICAgICAgIG1vdXNlRXZlbnQucGFnZVggPSBvcmlnaW5hbEV2ZW50LmNsaWVudFggKyAoZG9jICYmIGRvYy5zY3JvbGxMZWZ0IHx8IGJvZHkgJiYgYm9keS5zY3JvbGxMZWZ0IHx8IDApIC0gKGRvYyAmJiBkb2MuY2xpZW50TGVmdCB8fCBib2R5ICYmIGJvZHkuY2xpZW50TGVmdCB8fCAwKTtcbiAgICAgICAgbW91c2VFdmVudC5wYWdlWSA9IG9yaWdpbmFsRXZlbnQuY2xpZW50WSArIChkb2MgJiYgZG9jLnNjcm9sbFRvcCB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsVG9wIHx8IDApIC0gKGRvYyAmJiBkb2MuY2xpZW50VG9wIHx8IGJvZHkgJiYgYm9keS5jbGllbnRUb3AgfHwgMCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfTtcbiAgICBjb25zdCBiaW5kT25SZWFkeSA9ICh3aW4sIGNhbGxiYWNrLCBldmVudFV0aWxzKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSB3aW4uZG9jdW1lbnQsIGV2ZW50ID0geyB0eXBlOiAncmVhZHknIH07XG4gICAgICBpZiAoZXZlbnRVdGlscy5kb21Mb2FkZWQpIHtcbiAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpc0RvY1JlYWR5ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gZG9jLnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScgfHwgZG9jLnJlYWR5U3RhdGUgPT09ICdpbnRlcmFjdGl2ZScgJiYgZG9jLmJvZHk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVhZHlIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICByZW1vdmVFdmVudCh3aW4sICdET01Db250ZW50TG9hZGVkJywgcmVhZHlIYW5kbGVyKTtcbiAgICAgICAgcmVtb3ZlRXZlbnQod2luLCAnbG9hZCcsIHJlYWR5SGFuZGxlcik7XG4gICAgICAgIGlmICghZXZlbnRVdGlscy5kb21Mb2FkZWQpIHtcbiAgICAgICAgICBldmVudFV0aWxzLmRvbUxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHdpbiA9IG51bGw7XG4gICAgICB9O1xuICAgICAgaWYgKGlzRG9jUmVhZHkoKSkge1xuICAgICAgICByZWFkeUhhbmRsZXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkZEV2ZW50KHdpbiwgJ0RPTUNvbnRlbnRMb2FkZWQnLCByZWFkeUhhbmRsZXIpO1xuICAgICAgfVxuICAgICAgaWYgKCFldmVudFV0aWxzLmRvbUxvYWRlZCkge1xuICAgICAgICBhZGRFdmVudCh3aW4sICdsb2FkJywgcmVhZHlIYW5kbGVyKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNsYXNzIEV2ZW50VXRpbHMge1xuICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZG9tTG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZXZlbnRzID0ge307XG4gICAgICAgIHRoaXMuY291bnQgPSAxO1xuICAgICAgICB0aGlzLmV4cGFuZG8gPSBldmVudEV4cGFuZG9QcmVmaXggKyAoK25ldyBEYXRlKCkpLnRvU3RyaW5nKDMyKTtcbiAgICAgICAgdGhpcy5oYXNGb2N1c0luID0gJ29uZm9jdXNpbicgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICB0aGlzLmNvdW50ID0gMTtcbiAgICAgIH1cbiAgICAgIGJpbmQodGFyZ2V0LCBuYW1lcywgY2FsbGJhY2ssIHNjb3BlKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgY2FsbGJhY2tMaXN0O1xuICAgICAgICBjb25zdCB3aW4gPSB3aW5kb3c7XG4gICAgICAgIGNvbnN0IGRlZmF1bHROYXRpdmVIYW5kbGVyID0gZXZ0ID0+IHtcbiAgICAgICAgICBzZWxmLmV4ZWN1dGVIYW5kbGVycyhmaXgoZXZ0IHx8IHdpbi5ldmVudCksIGlkKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCF0YXJnZXQgfHwgaXNUZXh0JGEodGFyZ2V0KSB8fCBpc0NvbW1lbnQodGFyZ2V0KSkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaztcbiAgICAgICAgfVxuICAgICAgICBsZXQgaWQ7XG4gICAgICAgIGlmICghdGFyZ2V0W3NlbGYuZXhwYW5kb10pIHtcbiAgICAgICAgICBpZCA9IHNlbGYuY291bnQrKztcbiAgICAgICAgICB0YXJnZXRbc2VsZi5leHBhbmRvXSA9IGlkO1xuICAgICAgICAgIHNlbGYuZXZlbnRzW2lkXSA9IHt9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlkID0gdGFyZ2V0W3NlbGYuZXhwYW5kb107XG4gICAgICAgIH1cbiAgICAgICAgc2NvcGUgPSBzY29wZSB8fCB0YXJnZXQ7XG4gICAgICAgIGNvbnN0IG5hbWVzTGlzdCA9IG5hbWVzLnNwbGl0KCcgJyk7XG4gICAgICAgIGxldCBpID0gbmFtZXNMaXN0Lmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgIGxldCBuYW1lID0gbmFtZXNMaXN0W2ldO1xuICAgICAgICAgIGxldCBuYXRpdmVIYW5kbGVyID0gZGVmYXVsdE5hdGl2ZUhhbmRsZXI7XG4gICAgICAgICAgbGV0IGNhcHR1cmUgPSBmYWxzZTtcbiAgICAgICAgICBsZXQgZmFrZU5hbWUgPSBmYWxzZTtcbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ0RPTUNvbnRlbnRMb2FkZWQnKSB7XG4gICAgICAgICAgICBuYW1lID0gJ3JlYWR5JztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNlbGYuZG9tTG9hZGVkICYmIG5hbWUgPT09ICdyZWFkeScgJiYgdGFyZ2V0LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoc2NvcGUsIGZpeCh7IHR5cGU6IG5hbWUgfSkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghc2VsZi5oYXNGb2N1c0luICYmIChuYW1lID09PSAnZm9jdXNpbicgfHwgbmFtZSA9PT0gJ2ZvY3Vzb3V0JykpIHtcbiAgICAgICAgICAgIGNhcHR1cmUgPSB0cnVlO1xuICAgICAgICAgICAgZmFrZU5hbWUgPSBuYW1lID09PSAnZm9jdXNpbicgPyAnZm9jdXMnIDogJ2JsdXInO1xuICAgICAgICAgICAgbmF0aXZlSGFuZGxlciA9IGV2dCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gZml4KGV2dCB8fCB3aW4uZXZlbnQpO1xuICAgICAgICAgICAgICBldmVudC50eXBlID0gZXZlbnQudHlwZSA9PT0gJ2ZvY3VzJyA/ICdmb2N1c2luJyA6ICdmb2N1c291dCc7XG4gICAgICAgICAgICAgIHNlbGYuZXhlY3V0ZUhhbmRsZXJzKGV2ZW50LCBpZCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYWxsYmFja0xpc3QgPSBzZWxmLmV2ZW50c1tpZF1bbmFtZV07XG4gICAgICAgICAgaWYgKCFjYWxsYmFja0xpc3QpIHtcbiAgICAgICAgICAgIHNlbGYuZXZlbnRzW2lkXVtuYW1lXSA9IGNhbGxiYWNrTGlzdCA9IFt7XG4gICAgICAgICAgICAgICAgZnVuYzogY2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgc2NvcGVcbiAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICBjYWxsYmFja0xpc3QuZmFrZU5hbWUgPSBmYWtlTmFtZTtcbiAgICAgICAgICAgIGNhbGxiYWNrTGlzdC5jYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICAgIGNhbGxiYWNrTGlzdC5uYXRpdmVIYW5kbGVyID0gbmF0aXZlSGFuZGxlcjtcbiAgICAgICAgICAgIGlmIChuYW1lID09PSAncmVhZHknKSB7XG4gICAgICAgICAgICAgIGJpbmRPblJlYWR5KHRhcmdldCwgbmF0aXZlSGFuZGxlciwgc2VsZik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhZGRFdmVudCh0YXJnZXQsIGZha2VOYW1lIHx8IG5hbWUsIG5hdGl2ZUhhbmRsZXIsIGNhcHR1cmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gJ3JlYWR5JyAmJiBzZWxmLmRvbUxvYWRlZCkge1xuICAgICAgICAgICAgICBjYWxsYmFjayhmaXgoeyB0eXBlOiBuYW1lIH0pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICBmdW5jOiBjYWxsYmFjayxcbiAgICAgICAgICAgICAgICBzY29wZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0ID0gY2FsbGJhY2tMaXN0ID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrO1xuICAgICAgfVxuICAgICAgdW5iaW5kKHRhcmdldCwgbmFtZXMsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGFyZ2V0IHx8IGlzVGV4dCRhKHRhcmdldCkgfHwgaXNDb21tZW50KHRhcmdldCkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZCA9IHRhcmdldFt0aGlzLmV4cGFuZG9dO1xuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICBsZXQgZXZlbnRNYXAgPSB0aGlzLmV2ZW50c1tpZF07XG4gICAgICAgICAgaWYgKG5hbWVzKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lc0xpc3QgPSBuYW1lcy5zcGxpdCgnICcpO1xuICAgICAgICAgICAgbGV0IGkgPSBuYW1lc0xpc3QubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgICBjb25zdCBuYW1lID0gbmFtZXNMaXN0W2ldO1xuICAgICAgICAgICAgICBjb25zdCBjYWxsYmFja0xpc3QgPSBldmVudE1hcFtuYW1lXTtcbiAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrTGlzdCkge1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgbGV0IGNpID0gY2FsbGJhY2tMaXN0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgIHdoaWxlIChjaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja0xpc3RbY2ldLmZ1bmMgPT09IGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmF0aXZlSGFuZGxlciA9IGNhbGxiYWNrTGlzdC5uYXRpdmVIYW5kbGVyO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZha2VOYW1lID0gY2FsbGJhY2tMaXN0LmZha2VOYW1lLCBjYXB0dXJlID0gY2FsbGJhY2tMaXN0LmNhcHR1cmU7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q2FsbGJhY2tMaXN0ID0gY2FsbGJhY2tMaXN0LnNsaWNlKDAsIGNpKS5jb25jYXQoY2FsbGJhY2tMaXN0LnNsaWNlKGNpICsgMSkpO1xuICAgICAgICAgICAgICAgICAgICAgIG5ld0NhbGxiYWNrTGlzdC5uYXRpdmVIYW5kbGVyID0gbmF0aXZlSGFuZGxlcjtcbiAgICAgICAgICAgICAgICAgICAgICBuZXdDYWxsYmFja0xpc3QuZmFrZU5hbWUgPSBmYWtlTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICBuZXdDYWxsYmFja0xpc3QuY2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRNYXBbbmFtZV0gPSBuZXdDYWxsYmFja0xpc3Q7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFjYWxsYmFjayB8fCBjYWxsYmFja0xpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICBkZWxldGUgZXZlbnRNYXBbbmFtZV07XG4gICAgICAgICAgICAgICAgICByZW1vdmVFdmVudCh0YXJnZXQsIGNhbGxiYWNrTGlzdC5mYWtlTmFtZSB8fCBuYW1lLCBjYWxsYmFja0xpc3QubmF0aXZlSGFuZGxlciwgY2FsbGJhY2tMaXN0LmNhcHR1cmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlYWNoJGQoZXZlbnRNYXAsIChjYWxsYmFja0xpc3QsIG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQodGFyZ2V0LCBjYWxsYmFja0xpc3QuZmFrZU5hbWUgfHwgbmFtZSwgY2FsbGJhY2tMaXN0Lm5hdGl2ZUhhbmRsZXIsIGNhbGxiYWNrTGlzdC5jYXB0dXJlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZXZlbnRNYXAgPSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIGV2ZW50TWFwKSB7XG4gICAgICAgICAgICBpZiAoaGFzJDIoZXZlbnRNYXAsIG5hbWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgdGhpcy5ldmVudHNbaWRdO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkZWxldGUgdGFyZ2V0W3RoaXMuZXhwYW5kb107XG4gICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIHRhcmdldFt0aGlzLmV4cGFuZG9dID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBmaXJlKHRhcmdldCwgbmFtZSwgYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaCh0YXJnZXQsIG5hbWUsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgZGlzcGF0Y2godGFyZ2V0LCBuYW1lLCBhcmdzKSB7XG4gICAgICAgIGlmICghdGFyZ2V0IHx8IGlzVGV4dCRhKHRhcmdldCkgfHwgaXNDb21tZW50KHRhcmdldCkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBldmVudCA9IGZpeCh7XG4gICAgICAgICAgdHlwZTogbmFtZSxcbiAgICAgICAgICB0YXJnZXRcbiAgICAgICAgfSwgYXJncyk7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBjb25zdCBpZCA9IHRhcmdldFt0aGlzLmV4cGFuZG9dO1xuICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgdGhpcy5leGVjdXRlSGFuZGxlcnMoZXZlbnQsIGlkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGUgfHwgdGFyZ2V0Lm93bmVyRG9jdW1lbnQgfHwgdGFyZ2V0LmRlZmF1bHRWaWV3IHx8IHRhcmdldC5wYXJlbnRXaW5kb3c7XG4gICAgICAgIH0gd2hpbGUgKHRhcmdldCAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgY2xlYW4odGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0IHx8IGlzVGV4dCRhKHRhcmdldCkgfHwgaXNDb21tZW50KHRhcmdldCkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFyZ2V0W3RoaXMuZXhwYW5kb10pIHtcbiAgICAgICAgICB0aGlzLnVuYmluZCh0YXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFyZ2V0LmdldEVsZW1lbnRzQnlUYWdOYW1lKSB7XG4gICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LmRvY3VtZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmdldEVsZW1lbnRzQnlUYWdOYW1lKSB7XG4gICAgICAgICAgdGhpcy51bmJpbmQodGFyZ2V0KTtcbiAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRhcmdldC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpO1xuICAgICAgICAgIGxldCBpID0gY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIHRhcmdldCA9IGNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgaWYgKHRhcmdldFt0aGlzLmV4cGFuZG9dKSB7XG4gICAgICAgICAgICAgIHRoaXMudW5iaW5kKHRhcmdldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5ldmVudHMgPSB7fTtcbiAgICAgIH1cbiAgICAgIGNhbmNlbChlKSB7XG4gICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgZXhlY3V0ZUhhbmRsZXJzKGV2dCwgaWQpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5ldmVudHNbaWRdO1xuICAgICAgICBjb25zdCBjYWxsYmFja0xpc3QgPSBjb250YWluZXIgJiYgY29udGFpbmVyW2V2dC50eXBlXTtcbiAgICAgICAgaWYgKGNhbGxiYWNrTGlzdCkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gY2FsbGJhY2tMaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBjYWxsYmFja0xpc3RbaV07XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgJiYgY2FsbGJhY2suZnVuYy5jYWxsKGNhbGxiYWNrLnNjb3BlLCBldnQpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChldnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIEV2ZW50VXRpbHMuRXZlbnQgPSBuZXcgRXZlbnRVdGlscygpO1xuXG4gICAgY29uc3QgZWFjaCRhID0gVG9vbHMuZWFjaDtcbiAgICBjb25zdCBncmVwID0gVG9vbHMuZ3JlcDtcbiAgICBjb25zdCBpbnRlcm5hbFN0eWxlTmFtZSA9ICdkYXRhLW1jZS1zdHlsZSc7XG4gICAgY29uc3QgbnVtZXJpY2FsQ3NzTWFwID0gVG9vbHMubWFrZU1hcCgnZmlsbC1vcGFjaXR5IGZvbnQtd2VpZ2h0IGxpbmUtaGVpZ2h0IG9wYWNpdHkgb3JwaGFucyB3aWRvd3Mgei1pbmRleCB6b29tJywgJyAnKTtcbiAgICBjb25zdCBsZWdhY3lTZXRBdHRyaWJ1dGUgPSAoZWxtLCBuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKGlzTnVsbGFibGUodmFsdWUpIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgICByZW1vdmUkYShlbG0sIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0JDMoZWxtLCBuYW1lLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjYW1lbENhc2VUb0h5cGhlbnMgPSBuYW1lID0+IG5hbWUucmVwbGFjZSgvW0EtWl0vZywgdiA9PiAnLScgKyB2LnRvTG93ZXJDYXNlKCkpO1xuICAgIGNvbnN0IGZpbmROb2RlSW5kZXggPSAobm9kZSwgbm9ybWFsaXplZCkgPT4ge1xuICAgICAgbGV0IGlkeCA9IDA7XG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICBmb3IgKGxldCBsYXN0Tm9kZVR5cGUgPSBub2RlLm5vZGVUeXBlLCB0ZW1wTm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nOyB0ZW1wTm9kZTsgdGVtcE5vZGUgPSB0ZW1wTm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgICBjb25zdCBub2RlVHlwZSA9IHRlbXBOb2RlLm5vZGVUeXBlO1xuICAgICAgICAgIGlmIChub3JtYWxpemVkICYmIGlzVGV4dCRhKHRlbXBOb2RlKSkge1xuICAgICAgICAgICAgaWYgKG5vZGVUeXBlID09PSBsYXN0Tm9kZVR5cGUgfHwgIXRlbXBOb2RlLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZHgrKztcbiAgICAgICAgICBsYXN0Tm9kZVR5cGUgPSBub2RlVHlwZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGlkeDtcbiAgICB9O1xuICAgIGNvbnN0IHVwZGF0ZUludGVybmFsU3R5bGVBdHRyID0gKHN0eWxlcywgZWxtKSA9PiB7XG4gICAgICBjb25zdCByYXdWYWx1ZSA9IGdldCQ5KGVsbSwgJ3N0eWxlJyk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHN0eWxlcy5zZXJpYWxpemUoc3R5bGVzLnBhcnNlKHJhd1ZhbHVlKSwgbmFtZShlbG0pKTtcbiAgICAgIGxlZ2FjeVNldEF0dHJpYnV0ZShlbG0sIGludGVybmFsU3R5bGVOYW1lLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBjb252ZXJ0U3R5bGVUb1N0cmluZyA9IChjc3NWYWx1ZSwgY3NzTmFtZSkgPT4ge1xuICAgICAgaWYgKGlzTnVtYmVyKGNzc1ZhbHVlKSkge1xuICAgICAgICByZXR1cm4gaGFzJDIobnVtZXJpY2FsQ3NzTWFwLCBjc3NOYW1lKSA/IGNzc1ZhbHVlICsgJycgOiBjc3NWYWx1ZSArICdweCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY3NzVmFsdWU7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhcHBseVN0eWxlJDEgPSAoJGVsbSwgY3NzTmFtZSwgY3NzVmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gY2FtZWxDYXNlVG9IeXBoZW5zKGNzc05hbWUpO1xuICAgICAgaWYgKGlzTnVsbGFibGUoY3NzVmFsdWUpIHx8IGNzc1ZhbHVlID09PSAnJykge1xuICAgICAgICByZW1vdmUkNigkZWxtLCBub3JtYWxpemVkTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXQkMigkZWxtLCBub3JtYWxpemVkTmFtZSwgY29udmVydFN0eWxlVG9TdHJpbmcoY3NzVmFsdWUsIG5vcm1hbGl6ZWROYW1lKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cEF0dHJIb29rcyA9IChzdHlsZXMsIHNldHRpbmdzLCBnZXRDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBrZWVwVmFsdWVzID0gc2V0dGluZ3Mua2VlcF92YWx1ZXM7XG4gICAgICBjb25zdCBrZWVwVXJsSG9vayA9IHtcbiAgICAgICAgc2V0OiAoZWxtLCB2YWx1ZSwgbmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN1Z2FyRWxtID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWxtKTtcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihzZXR0aW5ncy51cmxfY29udmVydGVyKSAmJiBpc05vbk51bGxhYmxlKHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBzZXR0aW5ncy51cmxfY29udmVydGVyLmNhbGwoc2V0dGluZ3MudXJsX2NvbnZlcnRlcl9zY29wZSB8fCBnZXRDb250ZXh0KCksIFN0cmluZyh2YWx1ZSksIG5hbWUsIGVsbSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGludGVybmFsTmFtZSA9ICdkYXRhLW1jZS0nICsgbmFtZTtcbiAgICAgICAgICBsZWdhY3lTZXRBdHRyaWJ1dGUoc3VnYXJFbG0sIGludGVybmFsTmFtZSwgdmFsdWUpO1xuICAgICAgICAgIGxlZ2FjeVNldEF0dHJpYnV0ZShzdWdhckVsbSwgbmFtZSwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBnZXQ6IChlbG0sIG5hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdWdhckVsbSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsbSk7XG4gICAgICAgICAgcmV0dXJuIGdldCQ5KHN1Z2FyRWxtLCAnZGF0YS1tY2UtJyArIG5hbWUpIHx8IGdldCQ5KHN1Z2FyRWxtLCBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGF0dHJIb29rcyA9IHtcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBzZXQ6IChlbG0sIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWdhckVsbSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsbSk7XG4gICAgICAgICAgICBpZiAoa2VlcFZhbHVlcykge1xuICAgICAgICAgICAgICBsZWdhY3lTZXRBdHRyaWJ1dGUoc3VnYXJFbG0sIGludGVybmFsU3R5bGVOYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW1vdmUkYShzdWdhckVsbSwgJ3N0eWxlJyk7XG4gICAgICAgICAgICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgICAgICAgIHNldEFsbChzdWdhckVsbSwgc3R5bGVzLnBhcnNlKHZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZXQ6IGVsbSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWdhckVsbSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsbSk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldCQ5KHN1Z2FyRWxtLCBpbnRlcm5hbFN0eWxlTmFtZSkgfHwgZ2V0JDkoc3VnYXJFbG0sICdzdHlsZScpO1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlcy5zZXJpYWxpemUoc3R5bGVzLnBhcnNlKHZhbHVlKSwgbmFtZShzdWdhckVsbSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChrZWVwVmFsdWVzKSB7XG4gICAgICAgIGF0dHJIb29rcy5ocmVmID0gYXR0ckhvb2tzLnNyYyA9IGtlZXBVcmxIb29rO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGF0dHJIb29rcztcbiAgICB9O1xuICAgIGNvbnN0IERPTVV0aWxzID0gKGRvYywgc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgYWRkZWRTdHlsZXMgPSB7fTtcbiAgICAgIGNvbnN0IHdpbiA9IHdpbmRvdztcbiAgICAgIGNvbnN0IGZpbGVzID0ge307XG4gICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICBjb25zdCBzdGRNb2RlID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGJveE1vZGVsID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHN0eWxlU2hlZXRMb2FkZXIgPSBpbnN0YW5jZS5mb3JFbGVtZW50KFN1Z2FyRWxlbWVudC5mcm9tRG9tKGRvYyksIHtcbiAgICAgICAgY29udGVudENzc0NvcnM6IHNldHRpbmdzLmNvbnRlbnRDc3NDb3JzLFxuICAgICAgICByZWZlcnJlclBvbGljeTogc2V0dGluZ3MucmVmZXJyZXJQb2xpY3lcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYm91bmRFdmVudHMgPSBbXTtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IHNldHRpbmdzLnNjaGVtYSA/IHNldHRpbmdzLnNjaGVtYSA6IFNjaGVtYSh7fSk7XG4gICAgICBjb25zdCBzdHlsZXMgPSBTdHlsZXMoe1xuICAgICAgICB1cmxfY29udmVydGVyOiBzZXR0aW5ncy51cmxfY29udmVydGVyLFxuICAgICAgICB1cmxfY29udmVydGVyX3Njb3BlOiBzZXR0aW5ncy51cmxfY29udmVydGVyX3Njb3BlXG4gICAgICB9LCBzZXR0aW5ncy5zY2hlbWEpO1xuICAgICAgY29uc3QgZXZlbnRzID0gc2V0dGluZ3Mub3duRXZlbnRzID8gbmV3IEV2ZW50VXRpbHMoKSA6IEV2ZW50VXRpbHMuRXZlbnQ7XG4gICAgICBjb25zdCBibG9ja0VsZW1lbnRzTWFwID0gc2NoZW1hLmdldEJsb2NrRWxlbWVudHMoKTtcbiAgICAgIGNvbnN0IGlzQmxvY2sgPSBub2RlID0+IHtcbiAgICAgICAgaWYgKGlzU3RyaW5nKG5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuIGhhcyQyKGJsb2NrRWxlbWVudHNNYXAsIG5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBpc0VsZW1lbnQkNihub2RlKSAmJiAoaGFzJDIoYmxvY2tFbGVtZW50c01hcCwgbm9kZS5ub2RlTmFtZSkgfHwgaXNUcmFuc3BhcmVudEJsb2NrKHNjaGVtYSwgbm9kZSkpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0ID0gZWxtID0+IGVsbSAmJiBkb2MgJiYgaXNTdHJpbmcoZWxtKSA/IGRvYy5nZXRFbGVtZW50QnlJZChlbG0pIDogZWxtO1xuICAgICAgY29uc3QgX2dldCA9IGVsbSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0KGVsbSk7XG4gICAgICAgIHJldHVybiBpc05vbk51bGxhYmxlKHZhbHVlKSA/IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHZhbHVlKSA6IG51bGw7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0QXR0cmliID0gKGVsbSwgbmFtZSwgZGVmYXVsdFZhbCA9ICcnKSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgY29uc3QgJGVsbSA9IF9nZXQoZWxtKTtcbiAgICAgICAgaWYgKGlzTm9uTnVsbGFibGUoJGVsbSkgJiYgaXNFbGVtZW50JDcoJGVsbSkpIHtcbiAgICAgICAgICBjb25zdCBob29rID0gYXR0ckhvb2tzW25hbWVdO1xuICAgICAgICAgIGlmIChob29rICYmIGhvb2suZ2V0KSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGhvb2suZ2V0KCRlbG0uZG9tLCBuYW1lKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBnZXQkOSgkZWxtLCBuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUodmFsdWUpID8gdmFsdWUgOiBkZWZhdWx0VmFsO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldEF0dHJpYnMgPSBlbG0gPT4ge1xuICAgICAgICBjb25zdCBub2RlID0gZ2V0KGVsbSk7XG4gICAgICAgIHJldHVybiBpc051bGxhYmxlKG5vZGUpID8gW10gOiBub2RlLmF0dHJpYnV0ZXM7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0QXR0cmliID0gKGVsbSwgbmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgcnVuKGVsbSwgZSA9PiB7XG4gICAgICAgICAgaWYgKGlzRWxlbWVudCQ2KGUpKSB7XG4gICAgICAgICAgICBjb25zdCAkZWxtID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZSk7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSB2YWx1ZSA9PT0gJycgPyBudWxsIDogdmFsdWU7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbFZhbHVlID0gZ2V0JDkoJGVsbSwgbmFtZSk7XG4gICAgICAgICAgICBjb25zdCBob29rID0gYXR0ckhvb2tzW25hbWVdO1xuICAgICAgICAgICAgaWYgKGhvb2sgJiYgaG9vay5zZXQpIHtcbiAgICAgICAgICAgICAgaG9vay5zZXQoJGVsbS5kb20sIHZhbCwgbmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsZWdhY3lTZXRBdHRyaWJ1dGUoJGVsbSwgbmFtZSwgdmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcmlnaW5hbFZhbHVlICE9PSB2YWwgJiYgc2V0dGluZ3Mub25TZXRBdHRyaWIpIHtcbiAgICAgICAgICAgICAgc2V0dGluZ3Mub25TZXRBdHRyaWIoe1xuICAgICAgICAgICAgICAgIGF0dHJFbG06ICRlbG0uZG9tLFxuICAgICAgICAgICAgICAgIGF0dHJOYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgIGF0dHJWYWx1ZTogdmFsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgY2xvbmUgPSAobm9kZSwgZGVlcCkgPT4ge1xuICAgICAgICByZXR1cm4gbm9kZS5jbG9uZU5vZGUoZGVlcCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0Um9vdCA9ICgpID0+IHNldHRpbmdzLnJvb3RfZWxlbWVudCB8fCBkb2MuYm9keTtcbiAgICAgIGNvbnN0IGdldFZpZXdQb3J0ID0gYXJnV2luID0+IHtcbiAgICAgICAgY29uc3QgdnAgPSBnZXRCb3VuZHMoYXJnV2luKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiB2cC54LFxuICAgICAgICAgIHk6IHZwLnksXG4gICAgICAgICAgdzogdnAud2lkdGgsXG4gICAgICAgICAgaDogdnAuaGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0UG9zJDEgPSAoZWxtLCByb290RWxtKSA9PiBnZXRQb3MoZG9jLmJvZHksIGdldChlbG0pLCByb290RWxtKTtcbiAgICAgIGNvbnN0IHNldFN0eWxlID0gKGVsbSwgbmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgcnVuKGVsbSwgZSA9PiB7XG4gICAgICAgICAgY29uc3QgJGVsbSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGUpO1xuICAgICAgICAgIGFwcGx5U3R5bGUkMSgkZWxtLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgaWYgKHNldHRpbmdzLnVwZGF0ZV9zdHlsZXMpIHtcbiAgICAgICAgICAgIHVwZGF0ZUludGVybmFsU3R5bGVBdHRyKHN0eWxlcywgJGVsbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXRTdHlsZXMgPSAoZWxtLCBzdHlsZXNBcmcpID0+IHtcbiAgICAgICAgcnVuKGVsbSwgZSA9PiB7XG4gICAgICAgICAgY29uc3QgJGVsbSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGUpO1xuICAgICAgICAgIGVhY2gkZChzdHlsZXNBcmcsICh2LCBuKSA9PiB7XG4gICAgICAgICAgICBhcHBseVN0eWxlJDEoJGVsbSwgbiwgdik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHNldHRpbmdzLnVwZGF0ZV9zdHlsZXMpIHtcbiAgICAgICAgICAgIHVwZGF0ZUludGVybmFsU3R5bGVBdHRyKHN0eWxlcywgJGVsbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRTdHlsZSA9IChlbG0sIG5hbWUsIGNvbXB1dGVkKSA9PiB7XG4gICAgICAgIGNvbnN0ICRlbG0gPSBnZXQoZWxtKTtcbiAgICAgICAgaWYgKGlzTnVsbGFibGUoJGVsbSkgfHwgIWlzRWxlbWVudCQ2KCRlbG0pKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcHV0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0JDcoU3VnYXJFbGVtZW50LmZyb21Eb20oJGVsbSksIGNhbWVsQ2FzZVRvSHlwaGVucyhuYW1lKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvLShcXEQpL2csIChhLCBiKSA9PiBiLnRvVXBwZXJDYXNlKCkpO1xuICAgICAgICAgIGlmIChuYW1lID09PSAnZmxvYXQnKSB7XG4gICAgICAgICAgICBuYW1lID0gJ2Nzc0Zsb2F0JztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICRlbG0uc3R5bGUgPyAkZWxtLnN0eWxlW25hbWVdIDogdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0U2l6ZSA9IGVsbSA9PiB7XG4gICAgICAgIGNvbnN0ICRlbG0gPSBnZXQoZWxtKTtcbiAgICAgICAgaWYgKCEkZWxtKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHc6IDAsXG4gICAgICAgICAgICBoOiAwXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdyA9IGdldFN0eWxlKCRlbG0sICd3aWR0aCcpO1xuICAgICAgICBsZXQgaCA9IGdldFN0eWxlKCRlbG0sICdoZWlnaHQnKTtcbiAgICAgICAgaWYgKCF3IHx8IHcuaW5kZXhPZigncHgnKSA9PT0gLTEpIHtcbiAgICAgICAgICB3ID0gJzAnO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaCB8fCBoLmluZGV4T2YoJ3B4JykgPT09IC0xKSB7XG4gICAgICAgICAgaCA9ICcwJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHc6IHBhcnNlSW50KHcsIDEwKSB8fCAkZWxtLm9mZnNldFdpZHRoIHx8ICRlbG0uY2xpZW50V2lkdGgsXG4gICAgICAgICAgaDogcGFyc2VJbnQoaCwgMTApIHx8ICRlbG0ub2Zmc2V0SGVpZ2h0IHx8ICRlbG0uY2xpZW50SGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0UmVjdCA9IGVsbSA9PiB7XG4gICAgICAgIGNvbnN0ICRlbG0gPSBnZXQoZWxtKTtcbiAgICAgICAgY29uc3QgcG9zID0gZ2V0UG9zJDEoJGVsbSk7XG4gICAgICAgIGNvbnN0IHNpemUgPSBnZXRTaXplKCRlbG0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IHBvcy54LFxuICAgICAgICAgIHk6IHBvcy55LFxuICAgICAgICAgIHc6IHNpemUudyxcbiAgICAgICAgICBoOiBzaXplLmhcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpcyA9IChlbG0sIHNlbGVjdG9yKSA9PiB7XG4gICAgICAgIGlmICghZWxtKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsbXMgPSBpc0FycmF5JDEoZWxtKSA/IGVsbSA6IFtlbG1dO1xuICAgICAgICByZXR1cm4gZXhpc3RzKGVsbXMsIGUgPT4ge1xuICAgICAgICAgIHJldHVybiBpcyQxKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGUpLCBzZWxlY3Rvcik7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldFBhcmVudHMgPSAoZWxtLCBzZWxlY3Rvciwgcm9vdCwgY29sbGVjdCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgbGV0IG5vZGUgPSBnZXQoZWxtKTtcbiAgICAgICAgY29sbGVjdCA9IGNvbGxlY3QgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRSb290ID0gcm9vdCB8fCAoZ2V0Um9vdCgpLm5vZGVOYW1lICE9PSAnQk9EWScgPyBnZXRSb290KCkucGFyZW50Tm9kZSA6IG51bGwpO1xuICAgICAgICBpZiAoaXNTdHJpbmcoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgaWYgKHNlbGVjdG9yID09PSAnKicpIHtcbiAgICAgICAgICAgIHNlbGVjdG9yID0gaXNFbGVtZW50JDY7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdG9yVmFsID0gc2VsZWN0b3I7XG4gICAgICAgICAgICBzZWxlY3RvciA9IG5vZGUgPT4gaXMobm9kZSwgc2VsZWN0b3JWYWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAobm9kZSkge1xuICAgICAgICAgIGlmIChub2RlID09PSByZXNvbHZlZFJvb3QgfHwgaXNOdWxsYWJsZShub2RlLm5vZGVUeXBlKSB8fCBpc0RvY3VtZW50JDEobm9kZSkgfHwgaXNEb2N1bWVudEZyYWdtZW50KG5vZGUpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFzZWxlY3RvciB8fCBzZWxlY3Rvcihub2RlKSkge1xuICAgICAgICAgICAgaWYgKGNvbGxlY3QpIHtcbiAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobm9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gW25vZGVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0ID8gcmVzdWx0IDogbnVsbDtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRQYXJlbnQgPSAobm9kZSwgc2VsZWN0b3IsIHJvb3QpID0+IHtcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IGdldFBhcmVudHMobm9kZSwgc2VsZWN0b3IsIHJvb3QsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHBhcmVudHMgJiYgcGFyZW50cy5sZW5ndGggPiAwID8gcGFyZW50c1swXSA6IG51bGw7XG4gICAgICB9O1xuICAgICAgY29uc3QgX2ZpbmRTaWIgPSAobm9kZSwgc2VsZWN0b3IsIG5hbWUpID0+IHtcbiAgICAgICAgbGV0IGZ1bmMgPSBzZWxlY3RvcjtcbiAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICBpZiAoaXNTdHJpbmcoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgICBmdW5jID0gbm9kZSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBpcyhub2RlLCBzZWxlY3Rvcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCB0ZW1wTm9kZSA9IG5vZGVbbmFtZV07IHRlbXBOb2RlOyB0ZW1wTm9kZSA9IHRlbXBOb2RlW25hbWVdKSB7XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihmdW5jKSAmJiBmdW5jKHRlbXBOb2RlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdGVtcE5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldE5leHQgPSAobm9kZSwgc2VsZWN0b3IpID0+IF9maW5kU2liKG5vZGUsIHNlbGVjdG9yLCAnbmV4dFNpYmxpbmcnKTtcbiAgICAgIGNvbnN0IGdldFByZXYgPSAobm9kZSwgc2VsZWN0b3IpID0+IF9maW5kU2liKG5vZGUsIHNlbGVjdG9yLCAncHJldmlvdXNTaWJsaW5nJyk7XG4gICAgICBjb25zdCBpc1BhcmVudE5vZGUgPSBub2RlID0+IGlzRnVuY3Rpb24obm9kZS5xdWVyeVNlbGVjdG9yQWxsKTtcbiAgICAgIGNvbnN0IHNlbGVjdCA9IChzZWxlY3Rvciwgc2NvcGUpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY29uc3QgZWxtID0gKF9iID0gKF9hID0gZ2V0KHNjb3BlKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogc2V0dGluZ3Mucm9vdF9lbGVtZW50KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBkb2M7XG4gICAgICAgIHJldHVybiBpc1BhcmVudE5vZGUoZWxtKSA/IGZyb20oZWxtLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKSA6IFtdO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJ1biA9IGZ1bmN0aW9uIChlbG0sIGZ1bmMsIHNjb3BlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBzY29wZSAhPT0gbnVsbCAmJiBzY29wZSAhPT0gdm9pZCAwID8gc2NvcGUgOiB0aGlzO1xuICAgICAgICBpZiAoaXNBcnJheSQxKGVsbSkpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgICBlYWNoJGEoZWxtLCAoZSwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGdldChlKTtcbiAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGZ1bmMuY2FsbChjb250ZXh0LCBub2RlLCBpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gZ2V0KGVsbSk7XG4gICAgICAgICAgcmV0dXJuICFub2RlID8gZmFsc2UgOiBmdW5jLmNhbGwoY29udGV4dCwgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBzZXRBdHRyaWJzID0gKGVsbSwgYXR0cnMpID0+IHtcbiAgICAgICAgcnVuKGVsbSwgJGVsbSA9PiB7XG4gICAgICAgICAgZWFjaCRkKGF0dHJzLCAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgICAgIHNldEF0dHJpYigkZWxtLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldEhUTUwgPSAoZWxtLCBodG1sKSA9PiB7XG4gICAgICAgIHJ1bihlbG0sIGUgPT4ge1xuICAgICAgICAgIGNvbnN0ICRlbG0gPSBTdWdhckVsZW1lbnQuZnJvbURvbShlKTtcbiAgICAgICAgICBzZXQkMSgkZWxtLCBodG1sKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgYWRkID0gKHBhcmVudEVsbSwgbmFtZSwgYXR0cnMsIGh0bWwsIGNyZWF0ZSkgPT4gcnVuKHBhcmVudEVsbSwgcGFyZW50RWxtID0+IHtcbiAgICAgICAgY29uc3QgbmV3RWxtID0gaXNTdHJpbmcobmFtZSkgPyBkb2MuY3JlYXRlRWxlbWVudChuYW1lKSA6IG5hbWU7XG4gICAgICAgIGlmIChpc05vbk51bGxhYmxlKGF0dHJzKSkge1xuICAgICAgICAgIHNldEF0dHJpYnMobmV3RWxtLCBhdHRycyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGh0bWwpIHtcbiAgICAgICAgICBpZiAoIWlzU3RyaW5nKGh0bWwpICYmIGh0bWwubm9kZVR5cGUpIHtcbiAgICAgICAgICAgIG5ld0VsbS5hcHBlbmRDaGlsZChodG1sKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKGh0bWwpKSB7XG4gICAgICAgICAgICBzZXRIVE1MKG5ld0VsbSwgaHRtbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhY3JlYXRlID8gcGFyZW50RWxtLmFwcGVuZENoaWxkKG5ld0VsbSkgOiBuZXdFbG07XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNyZWF0ZSA9IChuYW1lLCBhdHRycywgaHRtbCkgPT4gYWRkKGRvYy5jcmVhdGVFbGVtZW50KG5hbWUpLCBuYW1lLCBhdHRycywgaHRtbCwgdHJ1ZSk7XG4gICAgICBjb25zdCBkZWNvZGUgPSBFbnRpdGllcy5kZWNvZGU7XG4gICAgICBjb25zdCBlbmNvZGUgPSBFbnRpdGllcy5lbmNvZGVBbGxSYXc7XG4gICAgICBjb25zdCBjcmVhdGVIVE1MID0gKG5hbWUsIGF0dHJzLCBodG1sID0gJycpID0+IHtcbiAgICAgICAgbGV0IG91dEh0bWwgPSAnPCcgKyBuYW1lO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBhdHRycykge1xuICAgICAgICAgIGlmIChoYXNOb25OdWxsYWJsZUtleShhdHRycywga2V5KSkge1xuICAgICAgICAgICAgb3V0SHRtbCArPSAnICcgKyBrZXkgKyAnPVwiJyArIGVuY29kZShhdHRyc1trZXldKSArICdcIic7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0VtcHR5JDMoaHRtbCkgJiYgaGFzJDIoc2NoZW1hLmdldFZvaWRFbGVtZW50cygpLCBuYW1lKSkge1xuICAgICAgICAgIHJldHVybiBvdXRIdG1sICsgJyAvPic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG91dEh0bWwgKyAnPicgKyBodG1sICsgJzwvJyArIG5hbWUgKyAnPic7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBjcmVhdGVGcmFnbWVudCA9IGh0bWwgPT4ge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGNvbnN0IGZyYWcgPSBkb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG4gICAgICAgIGlmIChodG1sKSB7XG4gICAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IGh0bWw7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5vZGU7XG4gICAgICAgIHdoaWxlIChub2RlID0gY29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICBmcmFnLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGZyYWcucmVtb3ZlQ2hpbGQoY29udGFpbmVyKTtcbiAgICAgICAgcmV0dXJuIGZyYWc7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVtb3ZlID0gKG5vZGUsIGtlZXBDaGlsZHJlbikgPT4ge1xuICAgICAgICByZXR1cm4gcnVuKG5vZGUsIG4gPT4ge1xuICAgICAgICAgIGNvbnN0ICRub2RlID0gU3VnYXJFbGVtZW50LmZyb21Eb20obik7XG4gICAgICAgICAgaWYgKGtlZXBDaGlsZHJlbikge1xuICAgICAgICAgICAgZWFjaCRlKGNoaWxkcmVuJDEoJG5vZGUpLCBjaGlsZCA9PiB7XG4gICAgICAgICAgICAgIGlmIChpc1RleHQkYihjaGlsZCkgJiYgY2hpbGQuZG9tLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJlbW92ZSQ1KGNoaWxkKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBiZWZvcmUkMygkbm9kZSwgY2hpbGQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVtb3ZlJDUoJG5vZGUpO1xuICAgICAgICAgIHJldHVybiAkbm9kZS5kb207XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlbW92ZUFsbEF0dHJpYnMgPSBlID0+IHJ1bihlLCBlID0+IHtcbiAgICAgICAgY29uc3QgYXR0cnMgPSBlLmF0dHJpYnV0ZXM7XG4gICAgICAgIGZvciAobGV0IGkgPSBhdHRycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGUucmVtb3ZlQXR0cmlidXRlTm9kZShhdHRycy5pdGVtKGkpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBwYXJzZVN0eWxlID0gY3NzVGV4dCA9PiBzdHlsZXMucGFyc2UoY3NzVGV4dCk7XG4gICAgICBjb25zdCBzZXJpYWxpemVTdHlsZSA9IChzdHlsZXNBcmcsIG5hbWUpID0+IHN0eWxlcy5zZXJpYWxpemUoc3R5bGVzQXJnLCBuYW1lKTtcbiAgICAgIGNvbnN0IGFkZFN0eWxlID0gY3NzVGV4dCA9PiB7XG4gICAgICAgIGlmIChzZWxmICE9PSBET01VdGlscy5ET00gJiYgZG9jID09PSBkb2N1bWVudCkge1xuICAgICAgICAgIGlmIChhZGRlZFN0eWxlc1tjc3NUZXh0XSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhZGRlZFN0eWxlc1tjc3NUZXh0XSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0eWxlRWxtID0gZG9jLmdldEVsZW1lbnRCeUlkKCdtY2VEZWZhdWx0U3R5bGVzJyk7XG4gICAgICAgIGlmICghc3R5bGVFbG0pIHtcbiAgICAgICAgICBzdHlsZUVsbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgICAgIHN0eWxlRWxtLmlkID0gJ21jZURlZmF1bHRTdHlsZXMnO1xuICAgICAgICAgIHN0eWxlRWxtLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgICAgIGNvbnN0IGhlYWQgPSBkb2MuaGVhZDtcbiAgICAgICAgICBpZiAoaGVhZC5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICBoZWFkLmluc2VydEJlZm9yZShzdHlsZUVsbSwgaGVhZC5maXJzdENoaWxkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZUVsbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdHlsZUVsbS5zdHlsZVNoZWV0KSB7XG4gICAgICAgICAgc3R5bGVFbG0uc3R5bGVTaGVldC5jc3NUZXh0ICs9IGNzc1RleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3R5bGVFbG0uYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKGNzc1RleHQpKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGxvYWRDU1MgPSB1cmxzID0+IHtcbiAgICAgICAgaWYgKCF1cmxzKSB7XG4gICAgICAgICAgdXJscyA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGVhY2gkZSh1cmxzLnNwbGl0KCcsJyksIHVybCA9PiB7XG4gICAgICAgICAgZmlsZXNbdXJsXSA9IHRydWU7XG4gICAgICAgICAgc3R5bGVTaGVldExvYWRlci5sb2FkKHVybCkuY2F0Y2gobm9vcCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHRvZ2dsZUNsYXNzID0gKGVsbSwgY2xzLCBzdGF0ZSkgPT4ge1xuICAgICAgICBydW4oZWxtLCBlID0+IHtcbiAgICAgICAgICBpZiAoaXNFbGVtZW50JDYoZSkpIHtcbiAgICAgICAgICAgIGNvbnN0ICRlbG0gPSBTdWdhckVsZW1lbnQuZnJvbURvbShlKTtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzZXMgPSBjbHMuc3BsaXQoJyAnKTtcbiAgICAgICAgICAgIGVhY2gkZShjbGFzc2VzLCBjID0+IHtcbiAgICAgICAgICAgICAgaWYgKGlzTm9uTnVsbGFibGUoc3RhdGUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm4gPSBzdGF0ZSA/IGFkZCQyIDogcmVtb3ZlJDc7XG4gICAgICAgICAgICAgICAgZm4oJGVsbSwgYyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdG9nZ2xlJDEoJGVsbSwgYyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgYWRkQ2xhc3MgPSAoZWxtLCBjbHMpID0+IHtcbiAgICAgICAgdG9nZ2xlQ2xhc3MoZWxtLCBjbHMsIHRydWUpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlbW92ZUNsYXNzID0gKGVsbSwgY2xzKSA9PiB7XG4gICAgICAgIHRvZ2dsZUNsYXNzKGVsbSwgY2xzLCBmYWxzZSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaGFzQ2xhc3MgPSAoZWxtLCBjbHMpID0+IHtcbiAgICAgICAgY29uc3QgJGVsbSA9IF9nZXQoZWxtKTtcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGNscy5zcGxpdCgnICcpO1xuICAgICAgICByZXR1cm4gaXNOb25OdWxsYWJsZSgkZWxtKSAmJiBmb3JhbGwoY2xhc3NlcywgYyA9PiBoYXMoJGVsbSwgYykpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNob3cgPSBlbG0gPT4ge1xuICAgICAgICBydW4oZWxtLCBlID0+IHJlbW92ZSQ2KFN1Z2FyRWxlbWVudC5mcm9tRG9tKGUpLCAnZGlzcGxheScpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBoaWRlID0gZWxtID0+IHtcbiAgICAgICAgcnVuKGVsbSwgZSA9PiBzZXQkMihTdWdhckVsZW1lbnQuZnJvbURvbShlKSwgJ2Rpc3BsYXknLCAnbm9uZScpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0hpZGRlbiA9IGVsbSA9PiB7XG4gICAgICAgIGNvbnN0ICRlbG0gPSBfZ2V0KGVsbSk7XG4gICAgICAgIHJldHVybiBpc05vbk51bGxhYmxlKCRlbG0pICYmIGlzJDIoZ2V0UmF3KCRlbG0sICdkaXNwbGF5JyksICdub25lJyk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdW5pcXVlSWQgPSBwcmVmaXggPT4gKCFwcmVmaXggPyAnbWNlXycgOiBwcmVmaXgpICsgY291bnRlcisrO1xuICAgICAgY29uc3QgZ2V0T3V0ZXJIVE1MID0gZWxtID0+IHtcbiAgICAgICAgY29uc3QgJGVsbSA9IF9nZXQoZWxtKTtcbiAgICAgICAgaWYgKGlzTm9uTnVsbGFibGUoJGVsbSkpIHtcbiAgICAgICAgICByZXR1cm4gaXNFbGVtZW50JDYoJGVsbS5kb20pID8gJGVsbS5kb20ub3V0ZXJIVE1MIDogZ2V0T3V0ZXIoJGVsbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0T3V0ZXJIVE1MID0gKGVsbSwgaHRtbCkgPT4ge1xuICAgICAgICBydW4oZWxtLCAkZWxtID0+IHtcbiAgICAgICAgICBpZiAoaXNFbGVtZW50JDYoJGVsbSkpIHtcbiAgICAgICAgICAgICRlbG0ub3V0ZXJIVE1MID0gaHRtbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGluc2VydEFmdGVyID0gKG5vZGUsIHJlZmVyZW5jZSkgPT4ge1xuICAgICAgICBjb25zdCByZWZlcmVuY2VOb2RlID0gZ2V0KHJlZmVyZW5jZSk7XG4gICAgICAgIHJldHVybiBydW4obm9kZSwgbm9kZSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFyZW50ID0gcmVmZXJlbmNlTm9kZSA9PT0gbnVsbCB8fCByZWZlcmVuY2VOb2RlID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZWZlcmVuY2VOb2RlLnBhcmVudE5vZGU7XG4gICAgICAgICAgY29uc3QgbmV4dFNpYmxpbmcgPSByZWZlcmVuY2VOb2RlID09PSBudWxsIHx8IHJlZmVyZW5jZU5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlZmVyZW5jZU5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgaWYgKG5leHRTaWJsaW5nKSB7XG4gICAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dFNpYmxpbmcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVwbGFjZSA9IChuZXdFbG0sIG9sZEVsbSwga2VlcENoaWxkcmVuKSA9PiBydW4ob2xkRWxtLCBlbG0gPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VlID0gaXNBcnJheSQxKG9sZEVsbSkgPyBuZXdFbG0uY2xvbmVOb2RlKHRydWUpIDogbmV3RWxtO1xuICAgICAgICBpZiAoa2VlcENoaWxkcmVuKSB7XG4gICAgICAgICAgZWFjaCRhKGdyZXAoZWxtLmNoaWxkTm9kZXMpLCBub2RlID0+IHtcbiAgICAgICAgICAgIHJlcGxhY2VlLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIChfYSA9IGVsbS5wYXJlbnROb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVwbGFjZUNoaWxkKHJlcGxhY2VlLCBlbG0pO1xuICAgICAgICByZXR1cm4gZWxtO1xuICAgICAgfSk7XG4gICAgICBjb25zdCByZW5hbWUgPSAoZWxtLCBuYW1lKSA9PiB7XG4gICAgICAgIGlmIChlbG0ubm9kZU5hbWUgIT09IG5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgIGNvbnN0IG5ld0VsbSA9IGNyZWF0ZShuYW1lKTtcbiAgICAgICAgICBlYWNoJGEoZ2V0QXR0cmlicyhlbG0pLCBhdHRyTm9kZSA9PiB7XG4gICAgICAgICAgICBzZXRBdHRyaWIobmV3RWxtLCBhdHRyTm9kZS5ub2RlTmFtZSwgZ2V0QXR0cmliKGVsbSwgYXR0ck5vZGUubm9kZU5hbWUpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXBsYWNlKG5ld0VsbSwgZWxtLCB0cnVlKTtcbiAgICAgICAgICByZXR1cm4gbmV3RWxtO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBlbG07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBmaW5kQ29tbW9uQW5jZXN0b3IgPSAoYSwgYikgPT4ge1xuICAgICAgICBsZXQgcHMgPSBhO1xuICAgICAgICB3aGlsZSAocHMpIHtcbiAgICAgICAgICBsZXQgcGUgPSBiO1xuICAgICAgICAgIHdoaWxlIChwZSAmJiBwcyAhPT0gcGUpIHtcbiAgICAgICAgICAgIHBlID0gcGUucGFyZW50Tm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBzID09PSBwZSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBzID0gcHMucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBzICYmIGEub3duZXJEb2N1bWVudCkge1xuICAgICAgICAgIHJldHVybiBhLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBwcztcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzTm9uRW1wdHlFbGVtZW50ID0gbm9kZSA9PiB7XG4gICAgICAgIGlmIChpc0VsZW1lbnQkNihub2RlKSkge1xuICAgICAgICAgIGNvbnN0IGlzTmFtZWRBbmNob3IgPSBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdhJyAmJiAhZ2V0QXR0cmliKG5vZGUsICdocmVmJykgJiYgZ2V0QXR0cmliKG5vZGUsICdpZCcpO1xuICAgICAgICAgIGlmIChnZXRBdHRyaWIobm9kZSwgJ25hbWUnKSB8fCBnZXRBdHRyaWIobm9kZSwgJ2RhdGEtbWNlLWJvb2ttYXJrJykgfHwgaXNOYW1lZEFuY2hvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0VtcHR5ID0gKG5vZGUsIGVsZW1lbnRzLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIGxldCBickNvdW50ID0gMDtcbiAgICAgICAgaWYgKGlzTm9uRW1wdHlFbGVtZW50KG5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgICAgIGlmIChmaXJzdENoaWxkKSB7XG4gICAgICAgICAgY29uc3Qgd2Fsa2VyID0gbmV3IERvbVRyZWVXYWxrZXIoZmlyc3RDaGlsZCwgbm9kZSk7XG4gICAgICAgICAgY29uc3Qgd2hpdGVzcGFjZUVsZW1lbnRzID0gc2NoZW1hID8gc2NoZW1hLmdldFdoaXRlc3BhY2VFbGVtZW50cygpIDoge307XG4gICAgICAgICAgY29uc3Qgbm9uRW1wdHlFbGVtZW50cyA9IGVsZW1lbnRzIHx8IChzY2hlbWEgPyBzY2hlbWEuZ2V0Tm9uRW1wdHlFbGVtZW50cygpIDogbnVsbCk7XG4gICAgICAgICAgbGV0IHRlbXBOb2RlID0gZmlyc3RDaGlsZDtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoaXNFbGVtZW50JDYodGVtcE5vZGUpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGJvZ3VzVmFsID0gdGVtcE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLW1jZS1ib2d1cycpO1xuICAgICAgICAgICAgICBpZiAoYm9ndXNWYWwpIHtcbiAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IHdhbGtlci5uZXh0KGJvZ3VzVmFsID09PSAnYWxsJyk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRlbXBOb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgIGlmIChub25FbXB0eUVsZW1lbnRzICYmIG5vbkVtcHR5RWxlbWVudHNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2JyJykge1xuICAgICAgICAgICAgICAgICAgYnJDb3VudCsrO1xuICAgICAgICAgICAgICAgICAgdGVtcE5vZGUgPSB3YWxrZXIubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoaXNOb25FbXB0eUVsZW1lbnQodGVtcE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNDb21tZW50KHRlbXBOb2RlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNUZXh0JGEodGVtcE5vZGUpICYmICFpc1doaXRlc3BhY2VUZXh0KHRlbXBOb2RlLmRhdGEpICYmICghKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5pbmNsdWRlWndzcCkgfHwgIWlzWndzcCh0ZW1wTm9kZS5kYXRhKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzVGV4dCRhKHRlbXBOb2RlKSAmJiB0ZW1wTm9kZS5wYXJlbnROb2RlICYmIHdoaXRlc3BhY2VFbGVtZW50c1t0ZW1wTm9kZS5wYXJlbnROb2RlLm5vZGVOYW1lXSAmJiBpc1doaXRlc3BhY2VUZXh0KHRlbXBOb2RlLmRhdGEpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBOb2RlID0gd2Fsa2VyLm5leHQoKTtcbiAgICAgICAgICB9IHdoaWxlICh0ZW1wTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJyQ291bnQgPD0gMTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjcmVhdGVSbmcgPSAoKSA9PiBkb2MuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIGNvbnN0IHNwbGl0ID0gKHBhcmVudEVsbSwgc3BsaXRFbG0sIHJlcGxhY2VtZW50RWxtKSA9PiB7XG4gICAgICAgIGxldCByYW5nZSA9IGNyZWF0ZVJuZygpO1xuICAgICAgICBsZXQgYmVmb3JlRnJhZ21lbnQ7XG4gICAgICAgIGxldCBhZnRlckZyYWdtZW50O1xuICAgICAgICBpZiAocGFyZW50RWxtICYmIHNwbGl0RWxtICYmIHBhcmVudEVsbS5wYXJlbnROb2RlICYmIHNwbGl0RWxtLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gcGFyZW50RWxtLnBhcmVudE5vZGU7XG4gICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQocGFyZW50Tm9kZSwgZmluZE5vZGVJbmRleChwYXJlbnRFbG0pKTtcbiAgICAgICAgICByYW5nZS5zZXRFbmQoc3BsaXRFbG0ucGFyZW50Tm9kZSwgZmluZE5vZGVJbmRleChzcGxpdEVsbSkpO1xuICAgICAgICAgIGJlZm9yZUZyYWdtZW50ID0gcmFuZ2UuZXh0cmFjdENvbnRlbnRzKCk7XG4gICAgICAgICAgcmFuZ2UgPSBjcmVhdGVSbmcoKTtcbiAgICAgICAgICByYW5nZS5zZXRTdGFydChzcGxpdEVsbS5wYXJlbnROb2RlLCBmaW5kTm9kZUluZGV4KHNwbGl0RWxtKSArIDEpO1xuICAgICAgICAgIHJhbmdlLnNldEVuZChwYXJlbnROb2RlLCBmaW5kTm9kZUluZGV4KHBhcmVudEVsbSkgKyAxKTtcbiAgICAgICAgICBhZnRlckZyYWdtZW50ID0gcmFuZ2UuZXh0cmFjdENvbnRlbnRzKCk7XG4gICAgICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodHJpbU5vZGUoc2VsZiwgYmVmb3JlRnJhZ21lbnQpLCBwYXJlbnRFbG0pO1xuICAgICAgICAgIGlmIChyZXBsYWNlbWVudEVsbSkge1xuICAgICAgICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocmVwbGFjZW1lbnRFbG0sIHBhcmVudEVsbSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHNwbGl0RWxtLCBwYXJlbnRFbG0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZSh0cmltTm9kZShzZWxmLCBhZnRlckZyYWdtZW50KSwgcGFyZW50RWxtKTtcbiAgICAgICAgICByZW1vdmUocGFyZW50RWxtKTtcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnRFbG0gfHwgc3BsaXRFbG07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGJpbmQgPSAodGFyZ2V0LCBuYW1lLCBmdW5jLCBzY29wZSkgPT4ge1xuICAgICAgICBpZiAoaXNBcnJheSQxKHRhcmdldCkpIHtcbiAgICAgICAgICBsZXQgaSA9IHRhcmdldC5sZW5ndGg7XG4gICAgICAgICAgY29uc3QgcnYgPSBbXTtcbiAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICBydltpXSA9IGJpbmQodGFyZ2V0W2ldLCBuYW1lLCBmdW5jLCBzY29wZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBydjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc2V0dGluZ3MuY29sbGVjdCAmJiAodGFyZ2V0ID09PSBkb2MgfHwgdGFyZ2V0ID09PSB3aW4pKSB7XG4gICAgICAgICAgICBib3VuZEV2ZW50cy5wdXNoKFtcbiAgICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICBmdW5jLFxuICAgICAgICAgICAgICBzY29wZVxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBldmVudHMuYmluZCh0YXJnZXQsIG5hbWUsIGZ1bmMsIHNjb3BlIHx8IHNlbGYpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgdW5iaW5kID0gKHRhcmdldCwgbmFtZSwgZnVuYykgPT4ge1xuICAgICAgICBpZiAoaXNBcnJheSQxKHRhcmdldCkpIHtcbiAgICAgICAgICBsZXQgaSA9IHRhcmdldC5sZW5ndGg7XG4gICAgICAgICAgY29uc3QgcnYgPSBbXTtcbiAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICBydltpXSA9IHVuYmluZCh0YXJnZXRbaV0sIG5hbWUsIGZ1bmMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcnY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGJvdW5kRXZlbnRzLmxlbmd0aCA+IDAgJiYgKHRhcmdldCA9PT0gZG9jIHx8IHRhcmdldCA9PT0gd2luKSkge1xuICAgICAgICAgICAgbGV0IGkgPSBib3VuZEV2ZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAgIGNvbnN0IFtib3VuZFRhcmdldCwgYm91bmROYW1lLCBib3VuZEZ1bmNdID0gYm91bmRFdmVudHNbaV07XG4gICAgICAgICAgICAgIGlmICh0YXJnZXQgPT09IGJvdW5kVGFyZ2V0ICYmICghbmFtZSB8fCBuYW1lID09PSBib3VuZE5hbWUpICYmICghZnVuYyB8fCBmdW5jID09PSBib3VuZEZ1bmMpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnRzLnVuYmluZChib3VuZFRhcmdldCwgYm91bmROYW1lLCBib3VuZEZ1bmMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBldmVudHMudW5iaW5kKHRhcmdldCwgbmFtZSwgZnVuYyk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBkaXNwYXRjaCA9ICh0YXJnZXQsIG5hbWUsIGV2dCkgPT4gZXZlbnRzLmRpc3BhdGNoKHRhcmdldCwgbmFtZSwgZXZ0KTtcbiAgICAgIGNvbnN0IGZpcmUgPSAodGFyZ2V0LCBuYW1lLCBldnQpID0+IGV2ZW50cy5kaXNwYXRjaCh0YXJnZXQsIG5hbWUsIGV2dCk7XG4gICAgICBjb25zdCBnZXRDb250ZW50RWRpdGFibGUgPSBub2RlID0+IHtcbiAgICAgICAgaWYgKG5vZGUgJiYgaXNFbGVtZW50JDYobm9kZSkpIHtcbiAgICAgICAgICBjb25zdCBjb250ZW50RWRpdGFibGUgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1tY2UtY29udGVudGVkaXRhYmxlJyk7XG4gICAgICAgICAgaWYgKGNvbnRlbnRFZGl0YWJsZSAmJiBjb250ZW50RWRpdGFibGUgIT09ICdpbmhlcml0Jykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRFZGl0YWJsZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5vZGUuY29udGVudEVkaXRhYmxlICE9PSAnaW5oZXJpdCcgPyBub2RlLmNvbnRlbnRFZGl0YWJsZSA6IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRDb250ZW50RWRpdGFibGVQYXJlbnQgPSBub2RlID0+IHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IGdldFJvb3QoKTtcbiAgICAgICAgbGV0IHN0YXRlID0gbnVsbDtcbiAgICAgICAgZm9yIChsZXQgdGVtcE5vZGUgPSBub2RlOyB0ZW1wTm9kZSAmJiB0ZW1wTm9kZSAhPT0gcm9vdDsgdGVtcE5vZGUgPSB0ZW1wTm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgc3RhdGUgPSBnZXRDb250ZW50RWRpdGFibGUodGVtcE5vZGUpO1xuICAgICAgICAgIGlmIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0VkaXRhYmxlID0gbm9kZSA9PiB7XG4gICAgICAgIGlmIChpc05vbk51bGxhYmxlKG5vZGUpKSB7XG4gICAgICAgICAgY29uc3Qgc2NvcGUgPSBpc0VsZW1lbnQkNihub2RlKSA/IG5vZGUgOiBub2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUoc2NvcGUpICYmIGlzRWRpdGFibGUkMyhTdWdhckVsZW1lbnQuZnJvbURvbShzY29wZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICAgIGlmIChib3VuZEV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGV0IGkgPSBib3VuZEV2ZW50cy5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgY29uc3QgW2JvdW5kVGFyZ2V0LCBib3VuZE5hbWUsIGJvdW5kRnVuY10gPSBib3VuZEV2ZW50c1tpXTtcbiAgICAgICAgICAgIGV2ZW50cy51bmJpbmQoYm91bmRUYXJnZXQsIGJvdW5kTmFtZSwgYm91bmRGdW5jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWFjaCRkKGZpbGVzLCAoXywgdXJsKSA9PiB7XG4gICAgICAgICAgc3R5bGVTaGVldExvYWRlci51bmxvYWQodXJsKTtcbiAgICAgICAgICBkZWxldGUgZmlsZXNbdXJsXTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNDaGlsZE9mID0gKG5vZGUsIHBhcmVudCkgPT4ge1xuICAgICAgICByZXR1cm4gbm9kZSA9PT0gcGFyZW50IHx8IHBhcmVudC5jb250YWlucyhub2RlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBkdW1wUm5nID0gciA9PiAnc3RhcnRDb250YWluZXI6ICcgKyByLnN0YXJ0Q29udGFpbmVyLm5vZGVOYW1lICsgJywgc3RhcnRPZmZzZXQ6ICcgKyByLnN0YXJ0T2Zmc2V0ICsgJywgZW5kQ29udGFpbmVyOiAnICsgci5lbmRDb250YWluZXIubm9kZU5hbWUgKyAnLCBlbmRPZmZzZXQ6ICcgKyByLmVuZE9mZnNldDtcbiAgICAgIGNvbnN0IHNlbGYgPSB7XG4gICAgICAgIGRvYyxcbiAgICAgICAgc2V0dGluZ3MsXG4gICAgICAgIHdpbixcbiAgICAgICAgZmlsZXMsXG4gICAgICAgIHN0ZE1vZGUsXG4gICAgICAgIGJveE1vZGVsLFxuICAgICAgICBzdHlsZVNoZWV0TG9hZGVyLFxuICAgICAgICBib3VuZEV2ZW50cyxcbiAgICAgICAgc3R5bGVzLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGV2ZW50cyxcbiAgICAgICAgaXNCbG9jazogaXNCbG9jayxcbiAgICAgICAgcm9vdDogbnVsbCxcbiAgICAgICAgY2xvbmUsXG4gICAgICAgIGdldFJvb3QsXG4gICAgICAgIGdldFZpZXdQb3J0LFxuICAgICAgICBnZXRSZWN0LFxuICAgICAgICBnZXRTaXplLFxuICAgICAgICBnZXRQYXJlbnQsXG4gICAgICAgIGdldFBhcmVudHM6IGdldFBhcmVudHMsXG4gICAgICAgIGdldCxcbiAgICAgICAgZ2V0TmV4dCxcbiAgICAgICAgZ2V0UHJldixcbiAgICAgICAgc2VsZWN0LFxuICAgICAgICBpcyxcbiAgICAgICAgYWRkLFxuICAgICAgICBjcmVhdGUsXG4gICAgICAgIGNyZWF0ZUhUTUwsXG4gICAgICAgIGNyZWF0ZUZyYWdtZW50LFxuICAgICAgICByZW1vdmUsXG4gICAgICAgIHNldFN0eWxlLFxuICAgICAgICBnZXRTdHlsZTogZ2V0U3R5bGUsXG4gICAgICAgIHNldFN0eWxlcyxcbiAgICAgICAgcmVtb3ZlQWxsQXR0cmlicyxcbiAgICAgICAgc2V0QXR0cmliLFxuICAgICAgICBzZXRBdHRyaWJzLFxuICAgICAgICBnZXRBdHRyaWIsXG4gICAgICAgIGdldFBvczogZ2V0UG9zJDEsXG4gICAgICAgIHBhcnNlU3R5bGUsXG4gICAgICAgIHNlcmlhbGl6ZVN0eWxlLFxuICAgICAgICBhZGRTdHlsZSxcbiAgICAgICAgbG9hZENTUyxcbiAgICAgICAgYWRkQ2xhc3MsXG4gICAgICAgIHJlbW92ZUNsYXNzLFxuICAgICAgICBoYXNDbGFzcyxcbiAgICAgICAgdG9nZ2xlQ2xhc3MsXG4gICAgICAgIHNob3csXG4gICAgICAgIGhpZGUsXG4gICAgICAgIGlzSGlkZGVuLFxuICAgICAgICB1bmlxdWVJZCxcbiAgICAgICAgc2V0SFRNTCxcbiAgICAgICAgZ2V0T3V0ZXJIVE1MLFxuICAgICAgICBzZXRPdXRlckhUTUwsXG4gICAgICAgIGRlY29kZSxcbiAgICAgICAgZW5jb2RlLFxuICAgICAgICBpbnNlcnRBZnRlcixcbiAgICAgICAgcmVwbGFjZSxcbiAgICAgICAgcmVuYW1lLFxuICAgICAgICBmaW5kQ29tbW9uQW5jZXN0b3IsXG4gICAgICAgIHJ1bixcbiAgICAgICAgZ2V0QXR0cmlicyxcbiAgICAgICAgaXNFbXB0eSxcbiAgICAgICAgY3JlYXRlUm5nLFxuICAgICAgICBub2RlSW5kZXg6IGZpbmROb2RlSW5kZXgsXG4gICAgICAgIHNwbGl0LFxuICAgICAgICBiaW5kOiBiaW5kLFxuICAgICAgICB1bmJpbmQ6IHVuYmluZCxcbiAgICAgICAgZmlyZSxcbiAgICAgICAgZGlzcGF0Y2gsXG4gICAgICAgIGdldENvbnRlbnRFZGl0YWJsZSxcbiAgICAgICAgZ2V0Q29udGVudEVkaXRhYmxlUGFyZW50LFxuICAgICAgICBpc0VkaXRhYmxlLFxuICAgICAgICBkZXN0cm95LFxuICAgICAgICBpc0NoaWxkT2YsXG4gICAgICAgIGR1bXBSbmdcbiAgICAgIH07XG4gICAgICBjb25zdCBhdHRySG9va3MgPSBzZXR1cEF0dHJIb29rcyhzdHlsZXMsIHNldHRpbmdzLCBjb25zdGFudChzZWxmKSk7XG4gICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIERPTVV0aWxzLkRPTSA9IERPTVV0aWxzKGRvY3VtZW50KTtcbiAgICBET01VdGlscy5ub2RlSW5kZXggPSBmaW5kTm9kZUluZGV4O1xuXG4gICAgY29uc3QgRE9NJGIgPSBET01VdGlscy5ET007XG4gICAgY29uc3QgUVVFVUVEID0gMDtcbiAgICBjb25zdCBMT0FESU5HID0gMTtcbiAgICBjb25zdCBMT0FERUQgPSAyO1xuICAgIGNvbnN0IEZBSUxFRCA9IDM7XG4gICAgY2xhc3MgU2NyaXB0TG9hZGVyIHtcbiAgICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzID0ge30pIHtcbiAgICAgICAgdGhpcy5zdGF0ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLnNjcmlwdExvYWRlZENhbGxiYWNrcyA9IHt9O1xuICAgICAgICB0aGlzLnF1ZXVlTG9hZGVkQ2FsbGJhY2tzID0gW107XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgICB9XG4gICAgICBfc2V0UmVmZXJyZXJQb2xpY3kocmVmZXJyZXJQb2xpY3kpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5yZWZlcnJlclBvbGljeSA9IHJlZmVycmVyUG9saWN5O1xuICAgICAgfVxuICAgICAgbG9hZFNjcmlwdCh1cmwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBjb25zdCBkb20gPSBET00kYjtcbiAgICAgICAgICBsZXQgZWxtO1xuICAgICAgICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICAgICAgICBkb20ucmVtb3ZlKGlkKTtcbiAgICAgICAgICAgIGlmIChlbG0pIHtcbiAgICAgICAgICAgICAgZWxtLm9uZXJyb3IgPSBlbG0ub25sb2FkID0gZWxtID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGRvbmUgPSAoKSA9PiB7XG4gICAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBlcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICAgIHJlamVjdCgnRmFpbGVkIHRvIGxvYWQgc2NyaXB0OiAnICsgdXJsKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGlkID0gZG9tLnVuaXF1ZUlkKCk7XG4gICAgICAgICAgZWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgICAgZWxtLmlkID0gaWQ7XG4gICAgICAgICAgZWxtLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgICAgICAgICBlbG0uc3JjID0gVG9vbHMuX2FkZENhY2hlU3VmZml4KHVybCk7XG4gICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MucmVmZXJyZXJQb2xpY3kpIHtcbiAgICAgICAgICAgIGRvbS5zZXRBdHRyaWIoZWxtLCAncmVmZXJyZXJwb2xpY3knLCB0aGlzLnNldHRpbmdzLnJlZmVycmVyUG9saWN5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxtLm9ubG9hZCA9IGRvbmU7XG4gICAgICAgICAgZWxtLm9uZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSB8fCBkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZChlbG0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlzRG9uZSh1cmwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVzW3VybF0gPT09IExPQURFRDtcbiAgICAgIH1cbiAgICAgIG1hcmtEb25lKHVybCkge1xuICAgICAgICB0aGlzLnN0YXRlc1t1cmxdID0gTE9BREVEO1xuICAgICAgfVxuICAgICAgYWRkKHVybCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgc2VsZi5xdWV1ZS5wdXNoKHVybCk7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gc2VsZi5zdGF0ZXNbdXJsXTtcbiAgICAgICAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzZWxmLnN0YXRlc1t1cmxdID0gUVVFVUVEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgaWYgKCFzZWxmLnNjcmlwdExvYWRlZENhbGxiYWNrc1t1cmxdKSB7XG4gICAgICAgICAgICBzZWxmLnNjcmlwdExvYWRlZENhbGxiYWNrc1t1cmxdID0gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlbGYuc2NyaXB0TG9hZGVkQ2FsbGJhY2tzW3VybF0ucHVzaCh7XG4gICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgbG9hZCh1cmwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkKHVybCk7XG4gICAgICB9XG4gICAgICByZW1vdmUodXJsKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnN0YXRlc1t1cmxdO1xuICAgICAgICBkZWxldGUgdGhpcy5zY3JpcHRMb2FkZWRDYWxsYmFja3NbdXJsXTtcbiAgICAgIH1cbiAgICAgIGxvYWRRdWV1ZSgpIHtcbiAgICAgICAgY29uc3QgcXVldWUgPSB0aGlzLnF1ZXVlO1xuICAgICAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRTY3JpcHRzKHF1ZXVlKTtcbiAgICAgIH1cbiAgICAgIGxvYWRTY3JpcHRzKHNjcmlwdHMpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGV4ZWNDYWxsYmFja3MgPSAobmFtZSwgdXJsKSA9PiB7XG4gICAgICAgICAgZ2V0JGEoc2VsZi5zY3JpcHRMb2FkZWRDYWxsYmFja3MsIHVybCkuZWFjaChjYWxsYmFja3MgPT4ge1xuICAgICAgICAgICAgZWFjaCRlKGNhbGxiYWNrcywgY2FsbGJhY2sgPT4gY2FsbGJhY2tbbmFtZV0odXJsKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZGVsZXRlIHNlbGYuc2NyaXB0TG9hZGVkQ2FsbGJhY2tzW3VybF07XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHByb2Nlc3NSZXN1bHRzID0gcmVzdWx0cyA9PiB7XG4gICAgICAgICAgY29uc3QgZmFpbHVyZXMgPSBmaWx0ZXIkNShyZXN1bHRzLCByZXN1bHQgPT4gcmVzdWx0LnN0YXR1cyA9PT0gJ3JlamVjdGVkJyk7XG4gICAgICAgICAgaWYgKGZhaWx1cmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChiaW5kJDMoZmFpbHVyZXMsICh7cmVhc29ufSkgPT4gaXNBcnJheSQxKHJlYXNvbikgPyByZWFzb24gOiBbcmVhc29uXSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsb2FkID0gdXJscyA9PiBQcm9taXNlLmFsbFNldHRsZWQobWFwJDModXJscywgdXJsID0+IHtcbiAgICAgICAgICBpZiAoc2VsZi5zdGF0ZXNbdXJsXSA9PT0gTE9BREVEKSB7XG4gICAgICAgICAgICBleGVjQ2FsbGJhY2tzKCdyZXNvbHZlJywgdXJsKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNlbGYuc3RhdGVzW3VybF0gPT09IEZBSUxFRCkge1xuICAgICAgICAgICAgZXhlY0NhbGxiYWNrcygncmVqZWN0JywgdXJsKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh1cmwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxmLnN0YXRlc1t1cmxdID0gTE9BRElORztcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmxvYWRTY3JpcHQodXJsKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgc2VsZi5zdGF0ZXNbdXJsXSA9IExPQURFRDtcbiAgICAgICAgICAgICAgZXhlY0NhbGxiYWNrcygncmVzb2x2ZScsIHVybCk7XG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXVlID0gc2VsZi5xdWV1ZTtcbiAgICAgICAgICAgICAgaWYgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBzZWxmLnF1ZXVlID0gW107XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvYWQocXVldWUpLnRoZW4ocHJvY2Vzc1Jlc3VsdHMpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgICBzZWxmLnN0YXRlc1t1cmxdID0gRkFJTEVEO1xuICAgICAgICAgICAgICBleGVjQ2FsbGJhY2tzKCdyZWplY3QnLCB1cmwpO1xuICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodXJsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICBjb25zdCBwcm9jZXNzUXVldWUgPSB1cmxzID0+IHtcbiAgICAgICAgICBzZWxmLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiBsb2FkKHVybHMpLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBzZWxmLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRRdWV1ZWRJdGVtID0gc2VsZi5xdWV1ZUxvYWRlZENhbGxiYWNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgT3B0aW9uYWwuZnJvbShuZXh0UXVldWVkSXRlbSkuZWFjaChjYWxsKTtcbiAgICAgICAgICAgIHJldHVybiBwcm9jZXNzUmVzdWx0cyhyZXN1bHRzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdW5pcXVlU2NyaXB0cyA9IHN0cmluZ0FycmF5KHNjcmlwdHMpO1xuICAgICAgICBpZiAoc2VsZi5sb2FkaW5nKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHNlbGYucXVldWVMb2FkZWRDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICAgIHByb2Nlc3NRdWV1ZSh1bmlxdWVTY3JpcHRzKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcHJvY2Vzc1F1ZXVlKHVuaXF1ZVNjcmlwdHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFNjcmlwdExvYWRlci5TY3JpcHRMb2FkZXIgPSBuZXcgU2NyaXB0TG9hZGVyKCk7XG5cbiAgICBjb25zdCBDZWxsID0gaW5pdGlhbCA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBpbml0aWFsO1xuICAgICAgY29uc3QgZ2V0ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0ID0gdiA9PiB7XG4gICAgICAgIHZhbHVlID0gdjtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBnZXQsXG4gICAgICAgIHNldFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNEdXBsaWNhdGVkID0gKGl0ZW1zLCBpdGVtKSA9PiB7XG4gICAgICBjb25zdCBmaXJzdEluZGV4ID0gaXRlbXMuaW5kZXhPZihpdGVtKTtcbiAgICAgIHJldHVybiBmaXJzdEluZGV4ICE9PSAtMSAmJiBpdGVtcy5pbmRleE9mKGl0ZW0sIGZpcnN0SW5kZXggKyAxKSA+IGZpcnN0SW5kZXg7XG4gICAgfTtcbiAgICBjb25zdCBpc1JhdyA9IHN0ciA9PiBpc09iamVjdChzdHIpICYmIGhhcyQyKHN0ciwgJ3JhdycpO1xuICAgIGNvbnN0IGlzVG9rZW5pc2VkID0gc3RyID0+IGlzQXJyYXkkMShzdHIpICYmIHN0ci5sZW5ndGggPiAxO1xuICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICBjb25zdCBjdXJyZW50Q29kZSA9IENlbGwoJ2VuJyk7XG4gICAgY29uc3QgZ2V0TGFuZ3VhZ2VEYXRhID0gKCkgPT4gZ2V0JGEoZGF0YSwgY3VycmVudENvZGUuZ2V0KCkpO1xuICAgIGNvbnN0IGdldERhdGEkMSA9ICgpID0+IG1hcCQyKGRhdGEsIHZhbHVlID0+ICh7IC4uLnZhbHVlIH0pKTtcbiAgICBjb25zdCBzZXRDb2RlID0gbmV3Q29kZSA9PiB7XG4gICAgICBpZiAobmV3Q29kZSkge1xuICAgICAgICBjdXJyZW50Q29kZS5zZXQobmV3Q29kZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRDb2RlID0gKCkgPT4gY3VycmVudENvZGUuZ2V0KCk7XG4gICAgY29uc3QgYWRkJDEgPSAoY29kZSwgaXRlbXMpID0+IHtcbiAgICAgIGxldCBsYW5nRGF0YSA9IGRhdGFbY29kZV07XG4gICAgICBpZiAoIWxhbmdEYXRhKSB7XG4gICAgICAgIGRhdGFbY29kZV0gPSBsYW5nRGF0YSA9IHt9O1xuICAgICAgfVxuICAgICAgY29uc3QgbGNOYW1lcyA9IG1hcCQzKGtleXMoaXRlbXMpLCBuYW1lID0+IG5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICBlYWNoJGQoaXRlbXMsICh0cmFuc2xhdGlvbiwgbmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBsY05hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChsY05hbWUgIT09IG5hbWUgJiYgaXNEdXBsaWNhdGVkKGxjTmFtZXMsIGxjTmFtZSkpIHtcbiAgICAgICAgICBpZiAoIWhhcyQyKGl0ZW1zLCBsY05hbWUpKSB7XG4gICAgICAgICAgICBsYW5nRGF0YVtsY05hbWVdID0gdHJhbnNsYXRpb247XG4gICAgICAgICAgfVxuICAgICAgICAgIGxhbmdEYXRhW25hbWVdID0gdHJhbnNsYXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGFuZ0RhdGFbbGNOYW1lXSA9IHRyYW5zbGF0aW9uO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHRleHQgPT4ge1xuICAgICAgY29uc3QgbGFuZ0RhdGEgPSBnZXRMYW5ndWFnZURhdGEoKS5nZXRPcih7fSk7XG4gICAgICBjb25zdCB0b1N0cmluZyA9IG9iaiA9PiB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFpc0VtcHR5KG9iaikgPyAnJyArIG9iaiA6ICcnO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzRW1wdHkgPSB0ZXh0ID0+IHRleHQgPT09ICcnIHx8IHRleHQgPT09IG51bGwgfHwgdGV4dCA9PT0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZ2V0TGFuZ0RhdGEgPSB0ZXh0ID0+IHtcbiAgICAgICAgY29uc3QgdGV4dFN0ciA9IHRvU3RyaW5nKHRleHQpO1xuICAgICAgICByZXR1cm4gaGFzJDIobGFuZ0RhdGEsIHRleHRTdHIpID8gdG9TdHJpbmcobGFuZ0RhdGFbdGV4dFN0cl0pIDogZ2V0JGEobGFuZ0RhdGEsIHRleHRTdHIudG9Mb3dlckNhc2UoKSkubWFwKHRvU3RyaW5nKS5nZXRPcih0ZXh0U3RyKTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZW1vdmVDb250ZXh0ID0gc3RyID0+IHN0ci5yZXBsYWNlKC97Y29udGV4dDpcXHcrfSQvLCAnJyk7XG4gICAgICBpZiAoaXNFbXB0eSh0ZXh0KSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgICBpZiAoaXNSYXcodGV4dCkpIHtcbiAgICAgICAgcmV0dXJuIHRvU3RyaW5nKHRleHQucmF3KTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1Rva2VuaXNlZCh0ZXh0KSkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0ZXh0LnNsaWNlKDEpO1xuICAgICAgICBjb25zdCBzdWJzdGl0dWVkID0gZ2V0TGFuZ0RhdGEodGV4dFswXSkucmVwbGFjZSgvXFx7KFswLTldKylcXH0vZywgKCQxLCAkMikgPT4gaGFzJDIodmFsdWVzLCAkMikgPyB0b1N0cmluZyh2YWx1ZXNbJDJdKSA6ICQxKTtcbiAgICAgICAgcmV0dXJuIHJlbW92ZUNvbnRleHQoc3Vic3RpdHVlZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVtb3ZlQ29udGV4dChnZXRMYW5nRGF0YSh0ZXh0KSk7XG4gICAgfTtcbiAgICBjb25zdCBpc1J0bCQxID0gKCkgPT4gZ2V0TGFuZ3VhZ2VEYXRhKCkuYmluZChpdGVtcyA9PiBnZXQkYShpdGVtcywgJ19kaXInKSkuZXhpc3RzKGRpciA9PiBkaXIgPT09ICdydGwnKTtcbiAgICBjb25zdCBoYXNDb2RlID0gY29kZSA9PiBoYXMkMihkYXRhLCBjb2RlKTtcbiAgICBjb25zdCBJMThuID0ge1xuICAgICAgZ2V0RGF0YTogZ2V0RGF0YSQxLFxuICAgICAgc2V0Q29kZSxcbiAgICAgIGdldENvZGUsXG4gICAgICBhZGQ6IGFkZCQxLFxuICAgICAgdHJhbnNsYXRlLFxuICAgICAgaXNSdGw6IGlzUnRsJDEsXG4gICAgICBoYXNDb2RlXG4gICAgfTtcblxuICAgIGNvbnN0IEFkZE9uTWFuYWdlciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICBjb25zdCB1cmxzID0ge307XG4gICAgICBjb25zdCBsb29rdXAgPSB7fTtcbiAgICAgIGNvbnN0IF9saXN0ZW5lcnMgPSBbXTtcbiAgICAgIGNvbnN0IHJ1bkxpc3RlbmVycyA9IChuYW1lLCBzdGF0ZSkgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaGVkTGlzdGVuZXJzID0gZmlsdGVyJDUoX2xpc3RlbmVycywgbGlzdGVuZXIgPT4gbGlzdGVuZXIubmFtZSA9PT0gbmFtZSAmJiBsaXN0ZW5lci5zdGF0ZSA9PT0gc3RhdGUpO1xuICAgICAgICBlYWNoJGUobWF0Y2hlZExpc3RlbmVycywgbGlzdGVuZXIgPT4gbGlzdGVuZXIucmVzb2x2ZSgpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0xvYWRlZCA9IG5hbWUgPT4gaGFzJDIodXJscywgbmFtZSk7XG4gICAgICBjb25zdCBpc0FkZGVkID0gbmFtZSA9PiBoYXMkMihsb29rdXAsIG5hbWUpO1xuICAgICAgY29uc3QgZ2V0ID0gbmFtZSA9PiB7XG4gICAgICAgIGlmIChsb29rdXBbbmFtZV0pIHtcbiAgICAgICAgICByZXR1cm4gbG9va3VwW25hbWVdLmluc3RhbmNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgbG9hZExhbmd1YWdlUGFjayA9IChuYW1lLCBsYW5ndWFnZXMpID0+IHtcbiAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBJMThuLmdldENvZGUoKTtcbiAgICAgICAgY29uc3Qgd3JhcHBlZExhbmd1YWdlcyA9ICcsJyArIChsYW5ndWFnZXMgfHwgJycpICsgJywnO1xuICAgICAgICBpZiAoIWxhbmd1YWdlIHx8IGxhbmd1YWdlcyAmJiB3cmFwcGVkTGFuZ3VhZ2VzLmluZGV4T2YoJywnICsgbGFuZ3VhZ2UgKyAnLCcpID09PSAtMSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBTY3JpcHRMb2FkZXIuU2NyaXB0TG9hZGVyLmFkZCh1cmxzW25hbWVdICsgJy9sYW5ncy8nICsgbGFuZ3VhZ2UgKyAnLmpzJyk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVxdWlyZUxhbmdQYWNrID0gKG5hbWUsIGxhbmd1YWdlcykgPT4ge1xuICAgICAgICBpZiAoQWRkT25NYW5hZ2VyLmxhbmd1YWdlTG9hZCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBpZiAoaXNMb2FkZWQobmFtZSkpIHtcbiAgICAgICAgICAgIGxvYWRMYW5ndWFnZVBhY2sobmFtZSwgbGFuZ3VhZ2VzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2FpdEZvcihuYW1lLCAnbG9hZGVkJykudGhlbigoKSA9PiBsb2FkTGFuZ3VhZ2VQYWNrKG5hbWUsIGxhbmd1YWdlcykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkZCA9IChpZCwgYWRkT24pID0+IHtcbiAgICAgICAgaXRlbXMucHVzaChhZGRPbik7XG4gICAgICAgIGxvb2t1cFtpZF0gPSB7IGluc3RhbmNlOiBhZGRPbiB9O1xuICAgICAgICBydW5MaXN0ZW5lcnMoaWQsICdhZGRlZCcpO1xuICAgICAgICByZXR1cm4gYWRkT247XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVtb3ZlID0gbmFtZSA9PiB7XG4gICAgICAgIGRlbGV0ZSB1cmxzW25hbWVdO1xuICAgICAgICBkZWxldGUgbG9va3VwW25hbWVdO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNyZWF0ZVVybCA9IChiYXNlVXJsLCBkZXApID0+IHtcbiAgICAgICAgaWYgKGlzU3RyaW5nKGRlcCkpIHtcbiAgICAgICAgICByZXR1cm4gaXNTdHJpbmcoYmFzZVVybCkgPyB7XG4gICAgICAgICAgICBwcmVmaXg6ICcnLFxuICAgICAgICAgICAgcmVzb3VyY2U6IGRlcCxcbiAgICAgICAgICAgIHN1ZmZpeDogJydcbiAgICAgICAgICB9IDoge1xuICAgICAgICAgICAgcHJlZml4OiBiYXNlVXJsLnByZWZpeCxcbiAgICAgICAgICAgIHJlc291cmNlOiBkZXAsXG4gICAgICAgICAgICBzdWZmaXg6IGJhc2VVcmwuc3VmZml4XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZGVwO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgbG9hZCA9IChuYW1lLCBhZGRPblVybCkgPT4ge1xuICAgICAgICBpZiAodXJsc1tuYW1lXSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdXJsU3RyaW5nID0gaXNTdHJpbmcoYWRkT25VcmwpID8gYWRkT25VcmwgOiBhZGRPblVybC5wcmVmaXggKyBhZGRPblVybC5yZXNvdXJjZSArIGFkZE9uVXJsLnN1ZmZpeDtcbiAgICAgICAgaWYgKHVybFN0cmluZy5pbmRleE9mKCcvJykgIT09IDAgJiYgdXJsU3RyaW5nLmluZGV4T2YoJzovLycpID09PSAtMSkge1xuICAgICAgICAgIHVybFN0cmluZyA9IEFkZE9uTWFuYWdlci5iYXNlVVJMICsgJy8nICsgdXJsU3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIHVybHNbbmFtZV0gPSB1cmxTdHJpbmcuc3Vic3RyaW5nKDAsIHVybFN0cmluZy5sYXN0SW5kZXhPZignLycpKTtcbiAgICAgICAgY29uc3QgZG9uZSA9ICgpID0+IHtcbiAgICAgICAgICBydW5MaXN0ZW5lcnMobmFtZSwgJ2xvYWRlZCcpO1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGxvb2t1cFtuYW1lXSkge1xuICAgICAgICAgIHJldHVybiBkb25lKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFNjcmlwdExvYWRlci5TY3JpcHRMb2FkZXIuYWRkKHVybFN0cmluZykudGhlbihkb25lKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHdhaXRGb3IgPSAobmFtZSwgc3RhdGUgPSAnYWRkZWQnKSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZSA9PT0gJ2FkZGVkJyAmJiBpc0FkZGVkKG5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAnbG9hZGVkJyAmJiBpc0xvYWRlZChuYW1lKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBfbGlzdGVuZXJzLnB1c2goe1xuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgcmVzb2x2ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpdGVtcyxcbiAgICAgICAgdXJscyxcbiAgICAgICAgbG9va3VwLFxuICAgICAgICBnZXQsXG4gICAgICAgIHJlcXVpcmVMYW5nUGFjayxcbiAgICAgICAgYWRkLFxuICAgICAgICByZW1vdmUsXG4gICAgICAgIGNyZWF0ZVVybCxcbiAgICAgICAgbG9hZCxcbiAgICAgICAgd2FpdEZvclxuICAgICAgfTtcbiAgICB9O1xuICAgIEFkZE9uTWFuYWdlci5sYW5ndWFnZUxvYWQgPSB0cnVlO1xuICAgIEFkZE9uTWFuYWdlci5iYXNlVVJMID0gJyc7XG4gICAgQWRkT25NYW5hZ2VyLlBsdWdpbk1hbmFnZXIgPSBBZGRPbk1hbmFnZXIoKTtcbiAgICBBZGRPbk1hbmFnZXIuVGhlbWVNYW5hZ2VyID0gQWRkT25NYW5hZ2VyKCk7XG4gICAgQWRkT25NYW5hZ2VyLk1vZGVsTWFuYWdlciA9IEFkZE9uTWFuYWdlcigpO1xuXG4gICAgY29uc3Qgc2luZ2xldG9uID0gZG9SZXZva2UgPT4ge1xuICAgICAgY29uc3Qgc3ViamVjdCA9IENlbGwoT3B0aW9uYWwubm9uZSgpKTtcbiAgICAgIGNvbnN0IHJldm9rZSA9ICgpID0+IHN1YmplY3QuZ2V0KCkuZWFjaChkb1Jldm9rZSk7XG4gICAgICBjb25zdCBjbGVhciA9ICgpID0+IHtcbiAgICAgICAgcmV2b2tlKCk7XG4gICAgICAgIHN1YmplY3Quc2V0KE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNTZXQgPSAoKSA9PiBzdWJqZWN0LmdldCgpLmlzU29tZSgpO1xuICAgICAgY29uc3QgZ2V0ID0gKCkgPT4gc3ViamVjdC5nZXQoKTtcbiAgICAgIGNvbnN0IHNldCA9IHMgPT4ge1xuICAgICAgICByZXZva2UoKTtcbiAgICAgICAgc3ViamVjdC5zZXQoT3B0aW9uYWwuc29tZShzKSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xlYXIsXG4gICAgICAgIGlzU2V0LFxuICAgICAgICBnZXQsXG4gICAgICAgIHNldFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHJlcGVhdGFibGUgPSBkZWxheSA9PiB7XG4gICAgICBjb25zdCBpbnRlcnZhbElkID0gQ2VsbChPcHRpb25hbC5ub25lKCkpO1xuICAgICAgY29uc3QgcmV2b2tlID0gKCkgPT4gaW50ZXJ2YWxJZC5nZXQoKS5lYWNoKGlkID0+IGNsZWFySW50ZXJ2YWwoaWQpKTtcbiAgICAgIGNvbnN0IGNsZWFyID0gKCkgPT4ge1xuICAgICAgICByZXZva2UoKTtcbiAgICAgICAgaW50ZXJ2YWxJZC5zZXQoT3B0aW9uYWwubm9uZSgpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1NldCA9ICgpID0+IGludGVydmFsSWQuZ2V0KCkuaXNTb21lKCk7XG4gICAgICBjb25zdCBnZXQgPSAoKSA9PiBpbnRlcnZhbElkLmdldCgpO1xuICAgICAgY29uc3Qgc2V0ID0gZnVuY3Rpb25Ub1JlcGVhdCA9PiB7XG4gICAgICAgIHJldm9rZSgpO1xuICAgICAgICBpbnRlcnZhbElkLnNldChPcHRpb25hbC5zb21lKHNldEludGVydmFsKGZ1bmN0aW9uVG9SZXBlYXQsIGRlbGF5KSkpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsZWFyLFxuICAgICAgICBpc1NldCxcbiAgICAgICAgZ2V0LFxuICAgICAgICBzZXRcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCB2YWx1ZSQyID0gKCkgPT4ge1xuICAgICAgY29uc3Qgc3ViamVjdCA9IHNpbmdsZXRvbihub29wKTtcbiAgICAgIGNvbnN0IG9uID0gZiA9PiBzdWJqZWN0LmdldCgpLmVhY2goZik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdWJqZWN0LFxuICAgICAgICBvblxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmlyc3QkMSA9IChmbiwgcmF0ZSkgPT4ge1xuICAgICAgbGV0IHRpbWVyID0gbnVsbDtcbiAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFpc051bGwodGltZXIpKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCB0aHJvdHRsZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChpc051bGwodGltZXIpKSB7XG4gICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgIH0sIHJhdGUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2FuY2VsLFxuICAgICAgICB0aHJvdHRsZVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGxhc3QkMSA9IChmbiwgcmF0ZSkgPT4ge1xuICAgICAgbGV0IHRpbWVyID0gbnVsbDtcbiAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFpc051bGwodGltZXIpKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCB0aHJvdHRsZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGNhbmNlbCgpO1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgfSwgcmF0ZSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2FuY2VsLFxuICAgICAgICB0aHJvdHRsZVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgYW5ub3RhdGlvbiA9IGNvbnN0YW50KCdtY2UtYW5ub3RhdGlvbicpO1xuICAgIGNvbnN0IGRhdGFBbm5vdGF0aW9uID0gY29uc3RhbnQoJ2RhdGEtbWNlLWFubm90YXRpb24nKTtcbiAgICBjb25zdCBkYXRhQW5ub3RhdGlvbklkID0gY29uc3RhbnQoJ2RhdGEtbWNlLWFubm90YXRpb24tdWlkJyk7XG4gICAgY29uc3QgZGF0YUFubm90YXRpb25BY3RpdmUgPSBjb25zdGFudCgnZGF0YS1tY2UtYW5ub3RhdGlvbi1hY3RpdmUnKTtcbiAgICBjb25zdCBkYXRhQW5ub3RhdGlvbkNsYXNzZXMgPSBjb25zdGFudCgnZGF0YS1tY2UtYW5ub3RhdGlvbi1jbGFzc2VzJyk7XG4gICAgY29uc3QgZGF0YUFubm90YXRpb25BdHRyaWJ1dGVzID0gY29uc3RhbnQoJ2RhdGEtbWNlLWFubm90YXRpb24tYXR0cnMnKTtcblxuICAgIGNvbnN0IGlzUm9vdCQxID0gcm9vdCA9PiBub2RlID0+IGVxKG5vZGUsIHJvb3QpO1xuICAgIGNvbnN0IGlkZW50aWZ5ID0gKGVkaXRvciwgYW5ub3RhdGlvbk5hbWUpID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBjb25zdCBzdGFydCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJuZy5zdGFydENvbnRhaW5lcik7XG4gICAgICBjb25zdCByb290ID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IGFubm90YXRpb25OYW1lLmZvbGQoKCkgPT4gJy4nICsgYW5ub3RhdGlvbigpLCBhbiA9PiBgWyR7IGRhdGFBbm5vdGF0aW9uKCkgfT1cIiR7IGFuIH1cIl1gKTtcbiAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gY2hpbGQkMShzdGFydCwgcm5nLnN0YXJ0T2Zmc2V0KS5nZXRPcihzdGFydCk7XG4gICAgICBjb25zdCBjbG9zZXN0ID0gY2xvc2VzdCQzKG5ld1N0YXJ0LCBzZWxlY3RvciwgaXNSb290JDEocm9vdCkpO1xuICAgICAgcmV0dXJuIGNsb3Nlc3QuYmluZChjID0+IGdldE9wdChjLCBgJHsgZGF0YUFubm90YXRpb25JZCgpIH1gKS5iaW5kKHVpZCA9PiBnZXRPcHQoYywgYCR7IGRhdGFBbm5vdGF0aW9uKCkgfWApLm1hcChuYW1lID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBmaW5kTWFya2VycyhlZGl0b3IsIHVpZCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdWlkLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgZWxlbWVudHNcbiAgICAgICAgfTtcbiAgICAgIH0pKSk7XG4gICAgfTtcbiAgICBjb25zdCBpc0Fubm90YXRpb24gPSBlbGVtID0+IGlzRWxlbWVudCQ3KGVsZW0pICYmIGhhcyhlbGVtLCBhbm5vdGF0aW9uKCkpO1xuICAgIGNvbnN0IGlzQm9ndXNFbGVtZW50ID0gKGVsZW0sIHJvb3QpID0+IGhhcyQxKGVsZW0sICdkYXRhLW1jZS1ib2d1cycpIHx8IGFuY2VzdG9yJDIoZWxlbSwgJ1tkYXRhLW1jZS1ib2d1cz1cImFsbFwiXScsIGlzUm9vdCQxKHJvb3QpKTtcbiAgICBjb25zdCBmaW5kTWFya2VycyA9IChlZGl0b3IsIHVpZCkgPT4ge1xuICAgICAgY29uc3QgYm9keSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgY29uc3QgZGVzY2VuZGFudHMkMSA9IGRlc2NlbmRhbnRzKGJvZHksIGBbJHsgZGF0YUFubm90YXRpb25JZCgpIH09XCIkeyB1aWQgfVwiXWApO1xuICAgICAgcmV0dXJuIGZpbHRlciQ1KGRlc2NlbmRhbnRzJDEsIGRlc2NlbmRhbnQgPT4gIWlzQm9ndXNFbGVtZW50KGRlc2NlbmRhbnQsIGJvZHkpKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRBbGwgPSAoZWRpdG9yLCBuYW1lKSA9PiB7XG4gICAgICBjb25zdCBib2R5ID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBjb25zdCBtYXJrZXJzID0gZGVzY2VuZGFudHMoYm9keSwgYFskeyBkYXRhQW5ub3RhdGlvbigpIH09XCIkeyBuYW1lIH1cIl1gKTtcbiAgICAgIGNvbnN0IGRpcmVjdG9yeSA9IHt9O1xuICAgICAgZWFjaCRlKG1hcmtlcnMsIG0gPT4ge1xuICAgICAgICBpZiAoIWlzQm9ndXNFbGVtZW50KG0sIGJvZHkpKSB7XG4gICAgICAgICAgY29uc3QgdWlkID0gZ2V0JDkobSwgZGF0YUFubm90YXRpb25JZCgpKTtcbiAgICAgICAgICBjb25zdCBub2Rlc0FscmVhZHkgPSBnZXQkYShkaXJlY3RvcnksIHVpZCkuZ2V0T3IoW10pO1xuICAgICAgICAgIGRpcmVjdG9yeVt1aWRdID0gbm9kZXNBbHJlYWR5LmNvbmNhdChbbV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkaXJlY3Rvcnk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNldHVwJHggPSAoZWRpdG9yLCByZWdpc3RyeSkgPT4ge1xuICAgICAgY29uc3QgY2hhbmdlQ2FsbGJhY2tzID0gQ2VsbCh7fSk7XG4gICAgICBjb25zdCBpbml0RGF0YSA9ICgpID0+ICh7XG4gICAgICAgIGxpc3RlbmVyczogW10sXG4gICAgICAgIHByZXZpb3VzOiB2YWx1ZSQyKClcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgd2l0aENhbGxiYWNrcyA9IChuYW1lLCBmKSA9PiB7XG4gICAgICAgIHVwZGF0ZUNhbGxiYWNrcyhuYW1lLCBkYXRhID0+IHtcbiAgICAgICAgICBmKGRhdGEpO1xuICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCB1cGRhdGVDYWxsYmFja3MgPSAobmFtZSwgZikgPT4ge1xuICAgICAgICBjb25zdCBjYWxsYmFja01hcCA9IGNoYW5nZUNhbGxiYWNrcy5nZXQoKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGdldCRhKGNhbGxiYWNrTWFwLCBuYW1lKS5nZXRPclRodW5rKGluaXREYXRhKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0RGF0YSA9IGYoZGF0YSk7XG4gICAgICAgIGNhbGxiYWNrTWFwW25hbWVdID0gb3V0cHV0RGF0YTtcbiAgICAgICAgY2hhbmdlQ2FsbGJhY2tzLnNldChjYWxsYmFja01hcCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZmlyZUNhbGxiYWNrcyA9IChuYW1lLCB1aWQsIGVsZW1lbnRzKSA9PiB7XG4gICAgICAgIHdpdGhDYWxsYmFja3MobmFtZSwgZGF0YSA9PiB7XG4gICAgICAgICAgZWFjaCRlKGRhdGEubGlzdGVuZXJzLCBmID0+IGYodHJ1ZSwgbmFtZSwge1xuICAgICAgICAgICAgdWlkLFxuICAgICAgICAgICAgbm9kZXM6IG1hcCQzKGVsZW1lbnRzLCBlbGVtID0+IGVsZW0uZG9tKVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZmlyZU5vQW5ub3RhdGlvbiA9IG5hbWUgPT4ge1xuICAgICAgICB3aXRoQ2FsbGJhY2tzKG5hbWUsIGRhdGEgPT4ge1xuICAgICAgICAgIGVhY2gkZShkYXRhLmxpc3RlbmVycywgZiA9PiBmKGZhbHNlLCBuYW1lKSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHRvZ2dsZUFjdGl2ZUF0dHIgPSAodWlkLCBzdGF0ZSkgPT4ge1xuICAgICAgICBlYWNoJGUoZmluZE1hcmtlcnMoZWRpdG9yLCB1aWQpLCBlbGVtID0+IHtcbiAgICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICAgIHNldCQzKGVsZW0sIGRhdGFBbm5vdGF0aW9uQWN0aXZlKCksICd0cnVlJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbW92ZSRhKGVsZW0sIGRhdGFBbm5vdGF0aW9uQWN0aXZlKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25Ob2RlQ2hhbmdlID0gbGFzdCQxKCgpID0+IHtcbiAgICAgICAgY29uc3QgYW5ub3RhdGlvbnMgPSBzb3J0KHJlZ2lzdHJ5LmdldE5hbWVzKCkpO1xuICAgICAgICBlYWNoJGUoYW5ub3RhdGlvbnMsIG5hbWUgPT4ge1xuICAgICAgICAgIHVwZGF0ZUNhbGxiYWNrcyhuYW1lLCBkYXRhID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZXYgPSBkYXRhLnByZXZpb3VzLmdldCgpO1xuICAgICAgICAgICAgaWRlbnRpZnkoZWRpdG9yLCBPcHRpb25hbC5zb21lKG5hbWUpKS5mb2xkKCgpID0+IHtcbiAgICAgICAgICAgICAgcHJldi5lYWNoKHVpZCA9PiB7XG4gICAgICAgICAgICAgICAgZmlyZU5vQW5ub3RhdGlvbihuYW1lKTtcbiAgICAgICAgICAgICAgICBkYXRhLnByZXZpb3VzLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgdG9nZ2xlQWN0aXZlQXR0cih1aWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCAoe3VpZCwgbmFtZSwgZWxlbWVudHN9KSA9PiB7XG4gICAgICAgICAgICAgIGlmICghaXMkMihwcmV2LCB1aWQpKSB7XG4gICAgICAgICAgICAgICAgcHJldi5lYWNoKHVpZCA9PiB0b2dnbGVBY3RpdmVBdHRyKHVpZCwgZmFsc2UpKTtcbiAgICAgICAgICAgICAgICBmaXJlQ2FsbGJhY2tzKG5hbWUsIHVpZCwgZWxlbWVudHMpO1xuICAgICAgICAgICAgICAgIGRhdGEucHJldmlvdXMuc2V0KHVpZCk7XG4gICAgICAgICAgICAgICAgdG9nZ2xlQWN0aXZlQXR0cih1aWQsIHRydWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHByZXZpb3VzOiBkYXRhLnByZXZpb3VzLFxuICAgICAgICAgICAgICBsaXN0ZW5lcnM6IGRhdGEubGlzdGVuZXJzXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0sIDMwKTtcbiAgICAgIGVkaXRvci5vbigncmVtb3ZlJywgKCkgPT4ge1xuICAgICAgICBvbk5vZGVDaGFuZ2UuY2FuY2VsKCk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignTm9kZUNoYW5nZScsICgpID0+IHtcbiAgICAgICAgb25Ob2RlQ2hhbmdlLnRocm90dGxlKCk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGFkZExpc3RlbmVyID0gKG5hbWUsIGYpID0+IHtcbiAgICAgICAgdXBkYXRlQ2FsbGJhY2tzKG5hbWUsIGRhdGEgPT4gKHtcbiAgICAgICAgICBwcmV2aW91czogZGF0YS5wcmV2aW91cyxcbiAgICAgICAgICBsaXN0ZW5lcnM6IGRhdGEubGlzdGVuZXJzLmNvbmNhdChbZl0pXG4gICAgICAgIH0pKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBhZGRMaXN0ZW5lciB9O1xuICAgIH07XG5cbiAgICBjb25zdCBzZXR1cCR3ID0gKGVkaXRvciwgcmVnaXN0cnkpID0+IHtcbiAgICAgIGNvbnN0IGRhdGFBbm5vdGF0aW9uJDEgPSBkYXRhQW5ub3RhdGlvbigpO1xuICAgICAgY29uc3QgaWRlbnRpZnlQYXJzZXJOb2RlID0gbm9kZSA9PiBPcHRpb25hbC5mcm9tKG5vZGUuYXR0cihkYXRhQW5ub3RhdGlvbiQxKSkuYmluZChyZWdpc3RyeS5sb29rdXApO1xuICAgICAgY29uc3QgcmVtb3ZlRGlyZWN0QW5ub3RhdGlvbiA9IG5vZGUgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBub2RlLmF0dHIoZGF0YUFubm90YXRpb25JZCgpLCBudWxsKTtcbiAgICAgICAgbm9kZS5hdHRyKGRhdGFBbm5vdGF0aW9uKCksIG51bGwpO1xuICAgICAgICBub2RlLmF0dHIoZGF0YUFubm90YXRpb25BY3RpdmUoKSwgbnVsbCk7XG4gICAgICAgIGNvbnN0IGN1c3RvbUF0dHJOYW1lcyA9IE9wdGlvbmFsLmZyb20obm9kZS5hdHRyKGRhdGFBbm5vdGF0aW9uQXR0cmlidXRlcygpKSkubWFwKG5hbWVzID0+IG5hbWVzLnNwbGl0KCcsJykpLmdldE9yKFtdKTtcbiAgICAgICAgY29uc3QgY3VzdG9tQ2xhc3NlcyA9IE9wdGlvbmFsLmZyb20obm9kZS5hdHRyKGRhdGFBbm5vdGF0aW9uQ2xhc3NlcygpKSkubWFwKG5hbWVzID0+IG5hbWVzLnNwbGl0KCcsJykpLmdldE9yKFtdKTtcbiAgICAgICAgZWFjaCRlKGN1c3RvbUF0dHJOYW1lcywgbmFtZSA9PiBub2RlLmF0dHIobmFtZSwgbnVsbCkpO1xuICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSAoX2IgPSAoX2EgPSBub2RlLmF0dHIoJ2NsYXNzJykpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zcGxpdCgnICcpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBbXTtcbiAgICAgICAgY29uc3QgbmV3Q2xhc3NMaXN0ID0gZGlmZmVyZW5jZShjbGFzc0xpc3QsIFthbm5vdGF0aW9uKCldLmNvbmNhdChjdXN0b21DbGFzc2VzKSk7XG4gICAgICAgIG5vZGUuYXR0cignY2xhc3MnLCBuZXdDbGFzc0xpc3QubGVuZ3RoID4gMCA/IG5ld0NsYXNzTGlzdC5qb2luKCcgJykgOiBudWxsKTtcbiAgICAgICAgbm9kZS5hdHRyKGRhdGFBbm5vdGF0aW9uQ2xhc3NlcygpLCBudWxsKTtcbiAgICAgICAgbm9kZS5hdHRyKGRhdGFBbm5vdGF0aW9uQXR0cmlidXRlcygpLCBudWxsKTtcbiAgICAgIH07XG4gICAgICBlZGl0b3Iuc2VyaWFsaXplci5hZGRUZW1wQXR0cihkYXRhQW5ub3RhdGlvbkFjdGl2ZSgpKTtcbiAgICAgIGVkaXRvci5zZXJpYWxpemVyLmFkZEF0dHJpYnV0ZUZpbHRlcihkYXRhQW5ub3RhdGlvbiQxLCBub2RlcyA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICAgIGlkZW50aWZ5UGFyc2VyTm9kZShub2RlKS5lYWNoKHNldHRpbmdzID0+IHtcbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5wZXJzaXN0ZW50ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBpZiAobm9kZS5uYW1lID09PSAnc3BhbicpIHtcbiAgICAgICAgICAgICAgICBub2RlLnVud3JhcCgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlbW92ZURpcmVjdEFubm90YXRpb24obm9kZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNyZWF0ZSRjID0gKCkgPT4ge1xuICAgICAgY29uc3QgYW5ub3RhdGlvbnMgPSB7fTtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyID0gKG5hbWUsIHNldHRpbmdzKSA9PiB7XG4gICAgICAgIGFubm90YXRpb25zW25hbWVdID0ge1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgc2V0dGluZ3NcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCBsb29rdXAgPSBuYW1lID0+IGdldCRhKGFubm90YXRpb25zLCBuYW1lKS5tYXAoYSA9PiBhLnNldHRpbmdzKTtcbiAgICAgIGNvbnN0IGdldE5hbWVzID0gKCkgPT4ga2V5cyhhbm5vdGF0aW9ucyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWdpc3RlcixcbiAgICAgICAgbG9va3VwLFxuICAgICAgICBnZXROYW1lc1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgbGV0IHVuaXF1ZSA9IDA7XG4gICAgY29uc3QgZ2VuZXJhdGUkMSA9IHByZWZpeCA9PiB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IHRpbWUgPSBkYXRlLmdldFRpbWUoKTtcbiAgICAgIGNvbnN0IHJhbmRvbSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMDApO1xuICAgICAgdW5pcXVlKys7XG4gICAgICByZXR1cm4gcHJlZml4ICsgJ18nICsgcmFuZG9tICsgdW5pcXVlICsgU3RyaW5nKHRpbWUpO1xuICAgIH07XG5cbiAgICBjb25zdCBhZGQgPSAoZWxlbWVudCwgY2xhc3NlcykgPT4ge1xuICAgICAgZWFjaCRlKGNsYXNzZXMsIHggPT4ge1xuICAgICAgICBhZGQkMihlbGVtZW50LCB4KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlJDQgPSAoZWxlbWVudCwgY2xhc3NlcykgPT4ge1xuICAgICAgZWFjaCRlKGNsYXNzZXMsIHggPT4ge1xuICAgICAgICByZW1vdmUkNyhlbGVtZW50LCB4KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBjbG9uZSQyID0gKG9yaWdpbmFsLCBpc0RlZXApID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKG9yaWdpbmFsLmRvbS5jbG9uZU5vZGUoaXNEZWVwKSk7XG4gICAgY29uc3Qgc2hhbGxvdyQxID0gb3JpZ2luYWwgPT4gY2xvbmUkMihvcmlnaW5hbCwgZmFsc2UpO1xuICAgIGNvbnN0IGRlZXAkMSA9IG9yaWdpbmFsID0+IGNsb25lJDIob3JpZ2luYWwsIHRydWUpO1xuICAgIGNvbnN0IHNoYWxsb3dBcyA9IChvcmlnaW5hbCwgdGFnKSA9PiB7XG4gICAgICBjb25zdCBudSA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKHRhZyk7XG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0gY2xvbmUkNChvcmlnaW5hbCk7XG4gICAgICBzZXRBbGwkMShudSwgYXR0cmlidXRlcyk7XG4gICAgICByZXR1cm4gbnU7XG4gICAgfTtcbiAgICBjb25zdCBtdXRhdGUgPSAob3JpZ2luYWwsIHRhZykgPT4ge1xuICAgICAgY29uc3QgbnUgPSBzaGFsbG93QXMob3JpZ2luYWwsIHRhZyk7XG4gICAgICBhZnRlciQ0KG9yaWdpbmFsLCBudSk7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGNoaWxkcmVuJDEob3JpZ2luYWwpO1xuICAgICAgYXBwZW5kKG51LCBjaGlsZHJlbik7XG4gICAgICByZW1vdmUkNShvcmlnaW5hbCk7XG4gICAgICByZXR1cm4gbnU7XG4gICAgfTtcblxuICAgIGNvbnN0IFRleHRXYWxrZXIgPSAoc3RhcnROb2RlLCByb290Tm9kZSwgaXNCb3VuZGFyeSA9IG5ldmVyKSA9PiB7XG4gICAgICBjb25zdCB3YWxrZXIgPSBuZXcgRG9tVHJlZVdhbGtlcihzdGFydE5vZGUsIHJvb3ROb2RlKTtcbiAgICAgIGNvbnN0IHdhbGsgPSBkaXJlY3Rpb24gPT4ge1xuICAgICAgICBsZXQgbmV4dDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIG5leHQgPSB3YWxrZXJbZGlyZWN0aW9uXSgpO1xuICAgICAgICB9IHdoaWxlIChuZXh0ICYmICFpc1RleHQkYShuZXh0KSAmJiAhaXNCb3VuZGFyeShuZXh0KSk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKG5leHQpLmZpbHRlcihpc1RleHQkYSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudDogKCkgPT4gT3B0aW9uYWwuZnJvbSh3YWxrZXIuY3VycmVudCgpKS5maWx0ZXIoaXNUZXh0JGEpLFxuICAgICAgICBuZXh0OiAoKSA9PiB3YWxrKCduZXh0JyksXG4gICAgICAgIHByZXY6ICgpID0+IHdhbGsoJ3ByZXYnKSxcbiAgICAgICAgcHJldjI6ICgpID0+IHdhbGsoJ3ByZXYyJylcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IFRleHRTZWVrZXIgPSAoZG9tLCBpc0JvdW5kYXJ5KSA9PiB7XG4gICAgICBjb25zdCBpc0Jsb2NrQm91bmRhcnkgPSBpc0JvdW5kYXJ5ID8gaXNCb3VuZGFyeSA6IG5vZGUgPT4gZG9tLmlzQmxvY2sobm9kZSkgfHwgaXNCciQ2KG5vZGUpIHx8IGlzQ29udGVudEVkaXRhYmxlRmFsc2UkYihub2RlKTtcbiAgICAgIGNvbnN0IHdhbGsgPSAobm9kZSwgb2Zmc2V0LCB3YWxrZXIsIHByb2Nlc3MpID0+IHtcbiAgICAgICAgaWYgKGlzVGV4dCRhKG5vZGUpKSB7XG4gICAgICAgICAgY29uc3QgbmV3T2Zmc2V0ID0gcHJvY2Vzcyhub2RlLCBvZmZzZXQsIG5vZGUuZGF0YSk7XG4gICAgICAgICAgaWYgKG5ld09mZnNldCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgICAgY29udGFpbmVyOiBub2RlLFxuICAgICAgICAgICAgICBvZmZzZXQ6IG5ld09mZnNldFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3YWxrZXIoKS5iaW5kKG5leHQgPT4gd2FsayhuZXh0LmNvbnRhaW5lciwgbmV4dC5vZmZzZXQsIHdhbGtlciwgcHJvY2VzcykpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGJhY2t3YXJkcyA9IChub2RlLCBvZmZzZXQsIHByb2Nlc3MsIHJvb3QpID0+IHtcbiAgICAgICAgY29uc3Qgd2Fsa2VyID0gVGV4dFdhbGtlcihub2RlLCByb290ICE9PSBudWxsICYmIHJvb3QgIT09IHZvaWQgMCA/IHJvb3QgOiBkb20uZ2V0Um9vdCgpLCBpc0Jsb2NrQm91bmRhcnkpO1xuICAgICAgICByZXR1cm4gd2Fsayhub2RlLCBvZmZzZXQsICgpID0+IHdhbGtlci5wcmV2KCkubWFwKHByZXYgPT4gKHtcbiAgICAgICAgICBjb250YWluZXI6IHByZXYsXG4gICAgICAgICAgb2Zmc2V0OiBwcmV2Lmxlbmd0aFxuICAgICAgICB9KSksIHByb2Nlc3MpLmdldE9yTnVsbCgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZvcndhcmRzID0gKG5vZGUsIG9mZnNldCwgcHJvY2Vzcywgcm9vdCkgPT4ge1xuICAgICAgICBjb25zdCB3YWxrZXIgPSBUZXh0V2Fsa2VyKG5vZGUsIHJvb3QgIT09IG51bGwgJiYgcm9vdCAhPT0gdm9pZCAwID8gcm9vdCA6IGRvbS5nZXRSb290KCksIGlzQmxvY2tCb3VuZGFyeSk7XG4gICAgICAgIHJldHVybiB3YWxrKG5vZGUsIG9mZnNldCwgKCkgPT4gd2Fsa2VyLm5leHQoKS5tYXAobmV4dCA9PiAoe1xuICAgICAgICAgIGNvbnRhaW5lcjogbmV4dCxcbiAgICAgICAgICBvZmZzZXQ6IDBcbiAgICAgICAgfSkpLCBwcm9jZXNzKS5nZXRPck51bGwoKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYWNrd2FyZHMsXG4gICAgICAgIGZvcndhcmRzXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCByb3VuZCQyID0gTWF0aC5yb3VuZDtcbiAgICBjb25zdCBjbG9uZSQxID0gcmVjdCA9PiB7XG4gICAgICBpZiAoIXJlY3QpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICBib3R0b206IDAsXG4gICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgaGVpZ2h0OiAwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiByb3VuZCQyKHJlY3QubGVmdCksXG4gICAgICAgIHRvcDogcm91bmQkMihyZWN0LnRvcCksXG4gICAgICAgIGJvdHRvbTogcm91bmQkMihyZWN0LmJvdHRvbSksXG4gICAgICAgIHJpZ2h0OiByb3VuZCQyKHJlY3QucmlnaHQpLFxuICAgICAgICB3aWR0aDogcm91bmQkMihyZWN0LndpZHRoKSxcbiAgICAgICAgaGVpZ2h0OiByb3VuZCQyKHJlY3QuaGVpZ2h0KVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbGxhcHNlID0gKHJlY3QsIHRvU3RhcnQpID0+IHtcbiAgICAgIHJlY3QgPSBjbG9uZSQxKHJlY3QpO1xuICAgICAgaWYgKHRvU3RhcnQpIHtcbiAgICAgICAgcmVjdC5yaWdodCA9IHJlY3QubGVmdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY3QubGVmdCA9IHJlY3QubGVmdCArIHJlY3Qud2lkdGg7XG4gICAgICAgIHJlY3QucmlnaHQgPSByZWN0LmxlZnQ7XG4gICAgICB9XG4gICAgICByZWN0LndpZHRoID0gMDtcbiAgICAgIHJldHVybiByZWN0O1xuICAgIH07XG4gICAgY29uc3QgaXNFcXVhbCA9IChyZWN0MSwgcmVjdDIpID0+IHJlY3QxLmxlZnQgPT09IHJlY3QyLmxlZnQgJiYgcmVjdDEudG9wID09PSByZWN0Mi50b3AgJiYgcmVjdDEuYm90dG9tID09PSByZWN0Mi5ib3R0b20gJiYgcmVjdDEucmlnaHQgPT09IHJlY3QyLnJpZ2h0O1xuICAgIGNvbnN0IGlzVmFsaWRPdmVyZmxvdyA9IChvdmVyZmxvd1ksIHJlY3QxLCByZWN0MikgPT4gb3ZlcmZsb3dZID49IDAgJiYgb3ZlcmZsb3dZIDw9IE1hdGgubWluKHJlY3QxLmhlaWdodCwgcmVjdDIuaGVpZ2h0KSAvIDI7XG4gICAgY29uc3QgaXNBYm92ZSQxID0gKHJlY3QxLCByZWN0MikgPT4ge1xuICAgICAgY29uc3QgaGFsZkhlaWdodCA9IE1hdGgubWluKHJlY3QyLmhlaWdodCAvIDIsIHJlY3QxLmhlaWdodCAvIDIpO1xuICAgICAgaWYgKHJlY3QxLmJvdHRvbSAtIGhhbGZIZWlnaHQgPCByZWN0Mi50b3ApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdDEudG9wID4gcmVjdDIuYm90dG9tKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1ZhbGlkT3ZlcmZsb3cocmVjdDIudG9wIC0gcmVjdDEuYm90dG9tLCByZWN0MSwgcmVjdDIpO1xuICAgIH07XG4gICAgY29uc3QgaXNCZWxvdyQxID0gKHJlY3QxLCByZWN0MikgPT4ge1xuICAgICAgaWYgKHJlY3QxLnRvcCA+IHJlY3QyLmJvdHRvbSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0MS5ib3R0b20gPCByZWN0Mi50b3ApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRPdmVyZmxvdyhyZWN0Mi5ib3R0b20gLSByZWN0MS50b3AsIHJlY3QxLCByZWN0Mik7XG4gICAgfTtcbiAgICBjb25zdCBjb250YWluc1hZID0gKHJlY3QsIGNsaWVudFgsIGNsaWVudFkpID0+IGNsaWVudFggPj0gcmVjdC5sZWZ0ICYmIGNsaWVudFggPD0gcmVjdC5yaWdodCAmJiBjbGllbnRZID49IHJlY3QudG9wICYmIGNsaWVudFkgPD0gcmVjdC5ib3R0b207XG4gICAgY29uc3QgYm91bmRpbmdDbGllbnRSZWN0RnJvbVJlY3RzID0gcmVjdHMgPT4ge1xuICAgICAgcmV0dXJuIGZvbGRsKHJlY3RzLCAoYWNjLCByZWN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhY2MuZm9sZCgoKSA9PiBPcHRpb25hbC5zb21lKHJlY3QpLCBwcmV2UmVjdCA9PiB7XG4gICAgICAgICAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QubGVmdCwgcHJldlJlY3QubGVmdCk7XG4gICAgICAgICAgY29uc3QgdG9wID0gTWF0aC5taW4ocmVjdC50b3AsIHByZXZSZWN0LnRvcCk7XG4gICAgICAgICAgY29uc3QgcmlnaHQgPSBNYXRoLm1heChyZWN0LnJpZ2h0LCBwcmV2UmVjdC5yaWdodCk7XG4gICAgICAgICAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdC5ib3R0b20sIHByZXZSZWN0LmJvdHRvbSk7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICBib3R0b20sXG4gICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgd2lkdGg6IHJpZ2h0IC0gbGVmdCxcbiAgICAgICAgICAgIGhlaWdodDogYm90dG9tIC0gdG9wXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgT3B0aW9uYWwubm9uZSgpKTtcbiAgICB9O1xuICAgIGNvbnN0IGRpc3RhbmNlVG9SZWN0RWRnZUZyb21YWSA9IChyZWN0LCB4LCB5KSA9PiB7XG4gICAgICBjb25zdCBjeCA9IE1hdGgubWF4KE1hdGgubWluKHgsIHJlY3QubGVmdCArIHJlY3Qud2lkdGgpLCByZWN0LmxlZnQpO1xuICAgICAgY29uc3QgY3kgPSBNYXRoLm1heChNYXRoLm1pbih5LCByZWN0LnRvcCArIHJlY3QuaGVpZ2h0KSwgcmVjdC50b3ApO1xuICAgICAgcmV0dXJuIE1hdGguc3FydCgoeCAtIGN4KSAqICh4IC0gY3gpICsgKHkgLSBjeSkgKiAoeSAtIGN5KSk7XG4gICAgfTtcbiAgICBjb25zdCBvdmVybGFwWSA9IChyMSwgcjIpID0+IE1hdGgubWF4KDAsIE1hdGgubWluKHIxLmJvdHRvbSwgcjIuYm90dG9tKSAtIE1hdGgubWF4KHIxLnRvcCwgcjIudG9wKSk7XG5cbiAgICBjb25zdCBjbGFtcCQyID0gKHZhbHVlLCBtaW4sIG1heCkgPT4gTWF0aC5taW4oTWF0aC5tYXgodmFsdWUsIG1pbiksIG1heCk7XG5cbiAgICBjb25zdCBnZXRTZWxlY3RlZE5vZGUgPSByYW5nZSA9PiB7XG4gICAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLCBzdGFydE9mZnNldCA9IHJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgICAgaWYgKHN0YXJ0Q29udGFpbmVyID09PSByYW5nZS5lbmRDb250YWluZXIgJiYgc3RhcnRDb250YWluZXIuaGFzQ2hpbGROb2RlcygpICYmIHJhbmdlLmVuZE9mZnNldCA9PT0gc3RhcnRPZmZzZXQgKyAxKSB7XG4gICAgICAgIHJldHVybiBzdGFydENvbnRhaW5lci5jaGlsZE5vZGVzW3N0YXJ0T2Zmc2V0XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Tm9kZSQxID0gKGNvbnRhaW5lciwgb2Zmc2V0KSA9PiB7XG4gICAgICBpZiAoaXNFbGVtZW50JDYoY29udGFpbmVyKSAmJiBjb250YWluZXIuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBjb250YWluZXIuY2hpbGROb2RlcztcbiAgICAgICAgY29uc3Qgc2FmZU9mZnNldCA9IGNsYW1wJDIob2Zmc2V0LCAwLCBjaGlsZE5vZGVzLmxlbmd0aCAtIDEpO1xuICAgICAgICByZXR1cm4gY2hpbGROb2Rlc1tzYWZlT2Zmc2V0XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXROb2RlVW5zYWZlID0gKGNvbnRhaW5lciwgb2Zmc2V0KSA9PiB7XG4gICAgICBpZiAob2Zmc2V0IDwgMCAmJiBpc0VsZW1lbnQkNihjb250YWluZXIpICYmIGNvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBnZXROb2RlJDEoY29udGFpbmVyLCBvZmZzZXQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBleHRlbmRpbmdDaGFycyA9IG5ldyBSZWdFeHAoJ1tcXHUwMzAwLVxcdTAzNmZcXHUwNDgzLVxcdTA0ODdcXHUwNDg4LVxcdTA0ODlcXHUwNTkxLVxcdTA1YmRcXHUwNWJmXFx1MDVjMS1cXHUwNWMyXFx1MDVjNC1cXHUwNWM1XFx1MDVjN1xcdTA2MTAtXFx1MDYxYScgKyAnXFx1MDY0Yi1cXHUwNjVmXFx1MDY3MFxcdTA2ZDYtXFx1MDZkY1xcdTA2ZGYtXFx1MDZlNFxcdTA2ZTctXFx1MDZlOFxcdTA2ZWEtXFx1MDZlZFxcdTA3MTFcXHUwNzMwLVxcdTA3NGFcXHUwN2E2LVxcdTA3YjAnICsgJ1xcdTA3ZWItXFx1MDdmM1xcdTA4MTYtXFx1MDgxOVxcdTA4MWItXFx1MDgyM1xcdTA4MjUtXFx1MDgyN1xcdTA4MjktXFx1MDgyZFxcdTA4NTktXFx1MDg1YlxcdTA4ZTMtXFx1MDkwMlxcdTA5M2FcXHUwOTNjJyArICdcXHUwOTQxLVxcdTA5NDhcXHUwOTRkXFx1MDk1MS1cXHUwOTU3XFx1MDk2Mi1cXHUwOTYzXFx1MDk4MVxcdTA5YmNcXHUwOWJlXFx1MDljMS1cXHUwOWM0XFx1MDljZFxcdTA5ZDdcXHUwOWUyLVxcdTA5ZTMnICsgJ1xcdTBhMDEtXFx1MGEwMlxcdTBhM2NcXHUwYTQxLVxcdTBhNDJcXHUwYTQ3LVxcdTBhNDhcXHUwYTRiLVxcdTBhNGRcXHUwYTUxXFx1MGE3MC1cXHUwYTcxXFx1MGE3NVxcdTBhODEtXFx1MGE4MlxcdTBhYmMnICsgJ1xcdTBhYzEtXFx1MGFjNVxcdTBhYzctXFx1MGFjOFxcdTBhY2RcXHUwYWUyLVxcdTBhZTNcXHUwYjAxXFx1MGIzY1xcdTBiM2VcXHUwYjNmXFx1MGI0MS1cXHUwYjQ0XFx1MGI0ZFxcdTBiNTZcXHUwYjU3JyArICdcXHUwYjYyLVxcdTBiNjNcXHUwYjgyXFx1MGJiZVxcdTBiYzBcXHUwYmNkXFx1MGJkN1xcdTBjMDBcXHUwYzNlLVxcdTBjNDBcXHUwYzQ2LVxcdTBjNDhcXHUwYzRhLVxcdTBjNGRcXHUwYzU1LVxcdTBjNTYnICsgJ1xcdTBjNjItXFx1MGM2M1xcdTBjODFcXHUwY2JjXFx1MGNiZlxcdTBjYzJcXHUwY2M2XFx1MGNjYy1cXHUwY2NkXFx1MGNkNS1cXHUwY2Q2XFx1MGNlMi1cXHUwY2UzXFx1MGQwMVxcdTBkM2VcXHUwZDQxLVxcdTBkNDQnICsgJ1xcdTBkNGRcXHUwZDU3XFx1MGQ2Mi1cXHUwZDYzXFx1MGRjYVxcdTBkY2ZcXHUwZGQyLVxcdTBkZDRcXHUwZGQ2XFx1MGRkZlxcdTBlMzFcXHUwZTM0LVxcdTBlM2FcXHUwZTQ3LVxcdTBlNGVcXHUwZWIxXFx1MGViNC1cXHUwZWI5JyArICdcXHUwZWJiLVxcdTBlYmNcXHUwZWM4LVxcdTBlY2RcXHUwZjE4LVxcdTBmMTlcXHUwZjM1XFx1MGYzN1xcdTBmMzlcXHUwZjcxLVxcdTBmN2VcXHUwZjgwLVxcdTBmODRcXHUwZjg2LVxcdTBmODdcXHUwZjhkLVxcdTBmOTcnICsgJ1xcdTBmOTktXFx1MGZiY1xcdTBmYzZcXHUxMDJkLVxcdTEwMzBcXHUxMDMyLVxcdTEwMzdcXHUxMDM5LVxcdTEwM2FcXHUxMDNkLVxcdTEwM2VcXHUxMDU4LVxcdTEwNTlcXHUxMDVlLVxcdTEwNjBcXHUxMDcxLVxcdTEwNzQnICsgJ1xcdTEwODJcXHUxMDg1LVxcdTEwODZcXHUxMDhkXFx1MTA5ZFxcdTEzNWQtXFx1MTM1ZlxcdTE3MTItXFx1MTcxNFxcdTE3MzItXFx1MTczNFxcdTE3NTItXFx1MTc1M1xcdTE3NzItXFx1MTc3M1xcdTE3YjQtXFx1MTdiNScgKyAnXFx1MTdiNy1cXHUxN2JkXFx1MTdjNlxcdTE3YzktXFx1MTdkM1xcdTE3ZGRcXHUxODBiLVxcdTE4MGRcXHUxOGE5XFx1MTkyMC1cXHUxOTIyXFx1MTkyNy1cXHUxOTI4XFx1MTkzMlxcdTE5MzktXFx1MTkzYlxcdTFhMTctXFx1MWExOCcgKyAnXFx1MWExYlxcdTFhNTZcXHUxYTU4LVxcdTFhNWVcXHUxYTYwXFx1MWE2MlxcdTFhNjUtXFx1MWE2Y1xcdTFhNzMtXFx1MWE3Y1xcdTFhN2ZcXHUxYWIwLVxcdTFhYmRcXHUxQUJFXFx1MWIwMC1cXHUxYjAzXFx1MWIzNCcgKyAnXFx1MWIzNi1cXHUxYjNhXFx1MWIzY1xcdTFiNDJcXHUxYjZiLVxcdTFiNzNcXHUxYjgwLVxcdTFiODFcXHUxYmEyLVxcdTFiYTVcXHUxYmE4LVxcdTFiYTlcXHUxYmFiLVxcdTFiYWRcXHUxYmU2XFx1MWJlOC1cXHUxYmU5JyArICdcXHUxYmVkXFx1MWJlZi1cXHUxYmYxXFx1MWMyYy1cXHUxYzMzXFx1MWMzNi1cXHUxYzM3XFx1MWNkMC1cXHUxY2QyXFx1MWNkNC1cXHUxY2UwXFx1MWNlMi1cXHUxY2U4XFx1MWNlZFxcdTFjZjRcXHUxY2Y4LVxcdTFjZjknICsgJ1xcdTFkYzAtXFx1MWRmNVxcdTFkZmMtXFx1MWRmZlxcdTIwMGMtXFx1MjAwZFxcdTIwZDAtXFx1MjBkY1xcdTIwREQtXFx1MjBFMFxcdTIwZTFcXHUyMEUyLVxcdTIwRTRcXHUyMGU1LVxcdTIwZjBcXHUyY2VmLVxcdTJjZjEnICsgJ1xcdTJkN2ZcXHUyZGUwLVxcdTJkZmZcXHUzMDJhLVxcdTMwMmRcXHUzMDJlLVxcdTMwMmZcXHUzMDk5LVxcdTMwOWFcXHVhNjZmXFx1QTY3MC1cXHVBNjcyXFx1YTY3NC1cXHVhNjdkXFx1YTY5ZS1cXHVhNjlmXFx1YTZmMC1cXHVhNmYxJyArICdcXHVhODAyXFx1YTgwNlxcdWE4MGJcXHVhODI1LVxcdWE4MjZcXHVhOGM0XFx1YThlMC1cXHVhOGYxXFx1YTkyNi1cXHVhOTJkXFx1YTk0Ny1cXHVhOTUxXFx1YTk4MC1cXHVhOTgyXFx1YTliM1xcdWE5YjYtXFx1YTliOVxcdWE5YmMnICsgJ1xcdWE5ZTVcXHVhYTI5LVxcdWFhMmVcXHVhYTMxLVxcdWFhMzJcXHVhYTM1LVxcdWFhMzZcXHVhYTQzXFx1YWE0Y1xcdWFhN2NcXHVhYWIwXFx1YWFiMi1cXHVhYWI0XFx1YWFiNy1cXHVhYWI4XFx1YWFiZS1cXHVhYWJmXFx1YWFjMScgKyAnXFx1YWFlYy1cXHVhYWVkXFx1YWFmNlxcdWFiZTVcXHVhYmU4XFx1YWJlZFxcdWZiMWVcXHVmZTAwLVxcdWZlMGZcXHVmZTIwLVxcdWZlMmZcXHVmZjllLVxcdWZmOWZdJyk7XG4gICAgY29uc3QgaXNFeHRlbmRpbmdDaGFyID0gY2ggPT4gaXNTdHJpbmcoY2gpICYmIGNoLmNoYXJDb2RlQXQoMCkgPj0gNzY4ICYmIGV4dGVuZGluZ0NoYXJzLnRlc3QoY2gpO1xuXG4gICAgY29uc3Qgb3IgPSAoLi4uYXJncykgPT4ge1xuICAgICAgcmV0dXJuIHggPT4ge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJnc1tpXSh4KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBhbmQgPSAoLi4uYXJncykgPT4ge1xuICAgICAgcmV0dXJuIHggPT4ge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoIWFyZ3NbaV0oeCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBpc0VsZW1lbnQkNCA9IGlzRWxlbWVudCQ2O1xuICAgIGNvbnN0IGlzQ2FyZXRDYW5kaWRhdGUkMiA9IGlzQ2FyZXRDYW5kaWRhdGUkMztcbiAgICBjb25zdCBpc0Jsb2NrJDEgPSBtYXRjaFN0eWxlVmFsdWVzKCdkaXNwbGF5JywgJ2Jsb2NrIHRhYmxlJyk7XG4gICAgY29uc3QgaXNGbG9hdGVkID0gbWF0Y2hTdHlsZVZhbHVlcygnZmxvYXQnLCAnbGVmdCByaWdodCcpO1xuICAgIGNvbnN0IGlzVmFsaWRFbGVtZW50Q2FyZXRDYW5kaWRhdGUgPSBhbmQoaXNFbGVtZW50JDQsIGlzQ2FyZXRDYW5kaWRhdGUkMiwgbm90KGlzRmxvYXRlZCkpO1xuICAgIGNvbnN0IGlzTm90UHJlID0gbm90KG1hdGNoU3R5bGVWYWx1ZXMoJ3doaXRlLXNwYWNlJywgJ3ByZSBwcmUtbGluZSBwcmUtd3JhcCcpKTtcbiAgICBjb25zdCBpc1RleHQkNyA9IGlzVGV4dCRhO1xuICAgIGNvbnN0IGlzQnIkMyA9IGlzQnIkNjtcbiAgICBjb25zdCBub2RlSW5kZXgkMSA9IERPTVV0aWxzLm5vZGVJbmRleDtcbiAgICBjb25zdCByZXNvbHZlSW5kZXgkMSA9IGdldE5vZGVVbnNhZmU7XG4gICAgY29uc3QgY3JlYXRlUmFuZ2UkMSA9IGRvYyA9PiBkb2MgPyBkb2MuY3JlYXRlUmFuZ2UoKSA6IERPTVV0aWxzLkRPTS5jcmVhdGVSbmcoKTtcbiAgICBjb25zdCBpc1doaXRlU3BhY2UkMSA9IGNociA9PiBpc1N0cmluZyhjaHIpICYmIC9bXFxyXFxuXFx0IF0vLnRlc3QoY2hyKTtcbiAgICBjb25zdCBpc1JhbmdlID0gcm5nID0+ICEhcm5nLnNldFN0YXJ0ICYmICEhcm5nLnNldEVuZDtcbiAgICBjb25zdCBpc0hpZGRlbldoaXRlU3BhY2VSYW5nZSA9IHJhbmdlID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7XG4gICAgICBpZiAoaXNXaGl0ZVNwYWNlJDEocmFuZ2UudG9TdHJpbmcoKSkgJiYgaXNOb3RQcmUoY29udGFpbmVyLnBhcmVudE5vZGUpICYmIGlzVGV4dCRhKGNvbnRhaW5lcikpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGNvbnRhaW5lci5kYXRhO1xuICAgICAgICBpZiAoaXNXaGl0ZVNwYWNlJDEodGV4dFtvZmZzZXQgLSAxXSkgfHwgaXNXaGl0ZVNwYWNlJDEodGV4dFtvZmZzZXQgKyAxXSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgY29uc3QgZ2V0QnJDbGllbnRSZWN0ID0gYnJOb2RlID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IGJyTm9kZS5vd25lckRvY3VtZW50O1xuICAgICAgY29uc3Qgcm5nID0gY3JlYXRlUmFuZ2UkMShkb2MpO1xuICAgICAgY29uc3QgbmJzcCQxID0gZG9jLmNyZWF0ZVRleHROb2RlKG5ic3ApO1xuICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IGJyTm9kZS5wYXJlbnROb2RlO1xuICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmJzcCQxLCBick5vZGUpO1xuICAgICAgcm5nLnNldFN0YXJ0KG5ic3AkMSwgMCk7XG4gICAgICBybmcuc2V0RW5kKG5ic3AkMSwgMSk7XG4gICAgICBjb25zdCBjbGllbnRSZWN0ID0gY2xvbmUkMShybmcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgICAgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuYnNwJDEpO1xuICAgICAgcmV0dXJuIGNsaWVudFJlY3Q7XG4gICAgfTtcbiAgICBjb25zdCBnZXRCb3VuZGluZ0NsaWVudFJlY3RXZWJLaXRUZXh0ID0gcm5nID0+IHtcbiAgICAgIGNvbnN0IHNjID0gcm5nLnN0YXJ0Q29udGFpbmVyO1xuICAgICAgY29uc3QgZWMgPSBybmcuZW5kQ29udGFpbmVyO1xuICAgICAgY29uc3Qgc28gPSBybmcuc3RhcnRPZmZzZXQ7XG4gICAgICBjb25zdCBlbyA9IHJuZy5lbmRPZmZzZXQ7XG4gICAgICBpZiAoc2MgPT09IGVjICYmIGlzVGV4dCRhKGVjKSAmJiBzbyA9PT0gMCAmJiBlbyA9PT0gMSkge1xuICAgICAgICBjb25zdCBuZXdSbmcgPSBybmcuY2xvbmVSYW5nZSgpO1xuICAgICAgICBuZXdSbmcuc2V0RW5kQWZ0ZXIoZWMpO1xuICAgICAgICByZXR1cm4gZ2V0Qm91bmRpbmdDbGllbnRSZWN0JDEobmV3Um5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNaZXJvUmVjdCA9IHIgPT4gci5sZWZ0ID09PSAwICYmIHIucmlnaHQgPT09IDAgJiYgci50b3AgPT09IDAgJiYgci5ib3R0b20gPT09IDA7XG4gICAgY29uc3QgZ2V0Qm91bmRpbmdDbGllbnRSZWN0JDEgPSBpdGVtID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGxldCBjbGllbnRSZWN0O1xuICAgICAgY29uc3QgY2xpZW50UmVjdHMgPSBpdGVtLmdldENsaWVudFJlY3RzKCk7XG4gICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID4gMCkge1xuICAgICAgICBjbGllbnRSZWN0ID0gY2xvbmUkMShjbGllbnRSZWN0c1swXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGllbnRSZWN0ID0gY2xvbmUkMShpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNSYW5nZShpdGVtKSAmJiBpc0JyJDMoaXRlbSkgJiYgaXNaZXJvUmVjdChjbGllbnRSZWN0KSkge1xuICAgICAgICByZXR1cm4gZ2V0QnJDbGllbnRSZWN0KGl0ZW0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzWmVyb1JlY3QoY2xpZW50UmVjdCkgJiYgaXNSYW5nZShpdGVtKSkge1xuICAgICAgICByZXR1cm4gKF9hID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0V2ViS2l0VGV4dChpdGVtKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY2xpZW50UmVjdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGllbnRSZWN0O1xuICAgIH07XG4gICAgY29uc3QgY29sbGFwc2VBbmRJbmZsYXRlV2lkdGggPSAoY2xpZW50UmVjdCwgdG9TdGFydCkgPT4ge1xuICAgICAgY29uc3QgbmV3Q2xpZW50UmVjdCA9IGNvbGxhcHNlKGNsaWVudFJlY3QsIHRvU3RhcnQpO1xuICAgICAgbmV3Q2xpZW50UmVjdC53aWR0aCA9IDE7XG4gICAgICBuZXdDbGllbnRSZWN0LnJpZ2h0ID0gbmV3Q2xpZW50UmVjdC5sZWZ0ICsgMTtcbiAgICAgIHJldHVybiBuZXdDbGllbnRSZWN0O1xuICAgIH07XG4gICAgY29uc3QgZ2V0Q2FyZXRQb3NpdGlvbkNsaWVudFJlY3RzID0gY2FyZXRQb3NpdGlvbiA9PiB7XG4gICAgICBjb25zdCBjbGllbnRSZWN0cyA9IFtdO1xuICAgICAgY29uc3QgYWRkVW5pcXVlQW5kVmFsaWRSZWN0ID0gY2xpZW50UmVjdCA9PiB7XG4gICAgICAgIGlmIChjbGllbnRSZWN0LmhlaWdodCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmIChpc0VxdWFsKGNsaWVudFJlY3QsIGNsaWVudFJlY3RzW2NsaWVudFJlY3RzLmxlbmd0aCAtIDFdKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjbGllbnRSZWN0cy5wdXNoKGNsaWVudFJlY3QpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkZENoYXJhY3Rlck9mZnNldCA9IChjb250YWluZXIsIG9mZnNldCkgPT4ge1xuICAgICAgICBjb25zdCByYW5nZSA9IGNyZWF0ZVJhbmdlJDEoY29udGFpbmVyLm93bmVyRG9jdW1lbnQpO1xuICAgICAgICBpZiAob2Zmc2V0IDwgY29udGFpbmVyLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKGlzRXh0ZW5kaW5nQ2hhcihjb250YWluZXIuZGF0YVtvZmZzZXRdKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNFeHRlbmRpbmdDaGFyKGNvbnRhaW5lci5kYXRhW29mZnNldCAtIDFdKSkge1xuICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoY29udGFpbmVyLCBvZmZzZXQpO1xuICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kKGNvbnRhaW5lciwgb2Zmc2V0ICsgMSk7XG4gICAgICAgICAgICBpZiAoIWlzSGlkZGVuV2hpdGVTcGFjZVJhbmdlKHJhbmdlKSkge1xuICAgICAgICAgICAgICBhZGRVbmlxdWVBbmRWYWxpZFJlY3QoY29sbGFwc2VBbmRJbmZsYXRlV2lkdGgoZ2V0Qm91bmRpbmdDbGllbnRSZWN0JDEocmFuZ2UpLCBmYWxzZSkpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvZmZzZXQgPiAwKSB7XG4gICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoY29udGFpbmVyLCBvZmZzZXQgLSAxKTtcbiAgICAgICAgICByYW5nZS5zZXRFbmQoY29udGFpbmVyLCBvZmZzZXQpO1xuICAgICAgICAgIGlmICghaXNIaWRkZW5XaGl0ZVNwYWNlUmFuZ2UocmFuZ2UpKSB7XG4gICAgICAgICAgICBhZGRVbmlxdWVBbmRWYWxpZFJlY3QoY29sbGFwc2VBbmRJbmZsYXRlV2lkdGgoZ2V0Qm91bmRpbmdDbGllbnRSZWN0JDEocmFuZ2UpLCBmYWxzZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob2Zmc2V0IDwgY29udGFpbmVyLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoY29udGFpbmVyLCBvZmZzZXQpO1xuICAgICAgICAgIHJhbmdlLnNldEVuZChjb250YWluZXIsIG9mZnNldCArIDEpO1xuICAgICAgICAgIGlmICghaXNIaWRkZW5XaGl0ZVNwYWNlUmFuZ2UocmFuZ2UpKSB7XG4gICAgICAgICAgICBhZGRVbmlxdWVBbmRWYWxpZFJlY3QoY29sbGFwc2VBbmRJbmZsYXRlV2lkdGgoZ2V0Qm91bmRpbmdDbGllbnRSZWN0JDEocmFuZ2UpLCB0cnVlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgY29udGFpbmVyID0gY2FyZXRQb3NpdGlvbi5jb250YWluZXIoKTtcbiAgICAgIGNvbnN0IG9mZnNldCA9IGNhcmV0UG9zaXRpb24ub2Zmc2V0KCk7XG4gICAgICBpZiAoaXNUZXh0JDcoY29udGFpbmVyKSkge1xuICAgICAgICBhZGRDaGFyYWN0ZXJPZmZzZXQoY29udGFpbmVyLCBvZmZzZXQpO1xuICAgICAgICByZXR1cm4gY2xpZW50UmVjdHM7XG4gICAgICB9XG4gICAgICBpZiAoaXNFbGVtZW50JDQoY29udGFpbmVyKSkge1xuICAgICAgICBpZiAoY2FyZXRQb3NpdGlvbi5pc0F0RW5kKCkpIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gcmVzb2x2ZUluZGV4JDEoY29udGFpbmVyLCBvZmZzZXQpO1xuICAgICAgICAgIGlmIChpc1RleHQkNyhub2RlKSkge1xuICAgICAgICAgICAgYWRkQ2hhcmFjdGVyT2Zmc2V0KG5vZGUsIG5vZGUuZGF0YS5sZW5ndGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnRDYXJldENhbmRpZGF0ZShub2RlKSAmJiAhaXNCciQzKG5vZGUpKSB7XG4gICAgICAgICAgICBhZGRVbmlxdWVBbmRWYWxpZFJlY3QoY29sbGFwc2VBbmRJbmZsYXRlV2lkdGgoZ2V0Qm91bmRpbmdDbGllbnRSZWN0JDEobm9kZSksIGZhbHNlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSByZXNvbHZlSW5kZXgkMShjb250YWluZXIsIG9mZnNldCk7XG4gICAgICAgICAgaWYgKGlzVGV4dCQ3KG5vZGUpKSB7XG4gICAgICAgICAgICBhZGRDaGFyYWN0ZXJPZmZzZXQobm9kZSwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc1ZhbGlkRWxlbWVudENhcmV0Q2FuZGlkYXRlKG5vZGUpICYmIGNhcmV0UG9zaXRpb24uaXNBdEVuZCgpKSB7XG4gICAgICAgICAgICBhZGRVbmlxdWVBbmRWYWxpZFJlY3QoY29sbGFwc2VBbmRJbmZsYXRlV2lkdGgoZ2V0Qm91bmRpbmdDbGllbnRSZWN0JDEobm9kZSksIGZhbHNlKSk7XG4gICAgICAgICAgICByZXR1cm4gY2xpZW50UmVjdHM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGJlZm9yZU5vZGUgPSByZXNvbHZlSW5kZXgkMShjYXJldFBvc2l0aW9uLmNvbnRhaW5lcigpLCBjYXJldFBvc2l0aW9uLm9mZnNldCgpIC0gMSk7XG4gICAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50Q2FyZXRDYW5kaWRhdGUoYmVmb3JlTm9kZSkgJiYgIWlzQnIkMyhiZWZvcmVOb2RlKSkge1xuICAgICAgICAgICAgaWYgKGlzQmxvY2skMShiZWZvcmVOb2RlKSB8fCBpc0Jsb2NrJDEobm9kZSkgfHwgIWlzVmFsaWRFbGVtZW50Q2FyZXRDYW5kaWRhdGUobm9kZSkpIHtcbiAgICAgICAgICAgICAgYWRkVW5pcXVlQW5kVmFsaWRSZWN0KGNvbGxhcHNlQW5kSW5mbGF0ZVdpZHRoKGdldEJvdW5kaW5nQ2xpZW50UmVjdCQxKGJlZm9yZU5vZGUpLCBmYWxzZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnRDYXJldENhbmRpZGF0ZShub2RlKSkge1xuICAgICAgICAgICAgYWRkVW5pcXVlQW5kVmFsaWRSZWN0KGNvbGxhcHNlQW5kSW5mbGF0ZVdpZHRoKGdldEJvdW5kaW5nQ2xpZW50UmVjdCQxKG5vZGUpLCB0cnVlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xpZW50UmVjdHM7XG4gICAgfTtcbiAgICBjb25zdCBDYXJldFBvc2l0aW9uID0gKGNvbnRhaW5lciwgb2Zmc2V0LCBjbGllbnRSZWN0cykgPT4ge1xuICAgICAgY29uc3QgaXNBdFN0YXJ0ID0gKCkgPT4ge1xuICAgICAgICBpZiAoaXNUZXh0JDcoY29udGFpbmVyKSkge1xuICAgICAgICAgIHJldHVybiBvZmZzZXQgPT09IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9mZnNldCA9PT0gMDtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0F0RW5kID0gKCkgPT4ge1xuICAgICAgICBpZiAoaXNUZXh0JDcoY29udGFpbmVyKSkge1xuICAgICAgICAgIHJldHVybiBvZmZzZXQgPj0gY29udGFpbmVyLmRhdGEubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvZmZzZXQgPj0gY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHRvUmFuZ2UgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gY3JlYXRlUmFuZ2UkMShjb250YWluZXIub3duZXJEb2N1bWVudCk7XG4gICAgICAgIHJhbmdlLnNldFN0YXJ0KGNvbnRhaW5lciwgb2Zmc2V0KTtcbiAgICAgICAgcmFuZ2Uuc2V0RW5kKGNvbnRhaW5lciwgb2Zmc2V0KTtcbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldENsaWVudFJlY3RzID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWNsaWVudFJlY3RzKSB7XG4gICAgICAgICAgY2xpZW50UmVjdHMgPSBnZXRDYXJldFBvc2l0aW9uQ2xpZW50UmVjdHMoQ2FyZXRQb3NpdGlvbihjb250YWluZXIsIG9mZnNldCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbGllbnRSZWN0cztcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1Zpc2libGUgPSAoKSA9PiBnZXRDbGllbnRSZWN0cygpLmxlbmd0aCA+IDA7XG4gICAgICBjb25zdCBpc0VxdWFsID0gY2FyZXRQb3NpdGlvbiA9PiBjYXJldFBvc2l0aW9uICYmIGNvbnRhaW5lciA9PT0gY2FyZXRQb3NpdGlvbi5jb250YWluZXIoKSAmJiBvZmZzZXQgPT09IGNhcmV0UG9zaXRpb24ub2Zmc2V0KCk7XG4gICAgICBjb25zdCBnZXROb2RlID0gYmVmb3JlID0+IHJlc29sdmVJbmRleCQxKGNvbnRhaW5lciwgYmVmb3JlID8gb2Zmc2V0IC0gMSA6IG9mZnNldCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250YWluZXI6IGNvbnN0YW50KGNvbnRhaW5lciksXG4gICAgICAgIG9mZnNldDogY29uc3RhbnQob2Zmc2V0KSxcbiAgICAgICAgdG9SYW5nZSxcbiAgICAgICAgZ2V0Q2xpZW50UmVjdHMsXG4gICAgICAgIGlzVmlzaWJsZSxcbiAgICAgICAgaXNBdFN0YXJ0LFxuICAgICAgICBpc0F0RW5kLFxuICAgICAgICBpc0VxdWFsLFxuICAgICAgICBnZXROb2RlXG4gICAgICB9O1xuICAgIH07XG4gICAgQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydCA9IHJhbmdlID0+IENhcmV0UG9zaXRpb24ocmFuZ2Uuc3RhcnRDb250YWluZXIsIHJhbmdlLnN0YXJ0T2Zmc2V0KTtcbiAgICBDYXJldFBvc2l0aW9uLmZyb21SYW5nZUVuZCA9IHJhbmdlID0+IENhcmV0UG9zaXRpb24ocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQpO1xuICAgIENhcmV0UG9zaXRpb24uYWZ0ZXIgPSBub2RlID0+IENhcmV0UG9zaXRpb24obm9kZS5wYXJlbnROb2RlLCBub2RlSW5kZXgkMShub2RlKSArIDEpO1xuICAgIENhcmV0UG9zaXRpb24uYmVmb3JlID0gbm9kZSA9PiBDYXJldFBvc2l0aW9uKG5vZGUucGFyZW50Tm9kZSwgbm9kZUluZGV4JDEobm9kZSkpO1xuICAgIENhcmV0UG9zaXRpb24uaXNBYm92ZSA9IChwb3MxLCBwb3MyKSA9PiBsaWZ0MihoZWFkKHBvczIuZ2V0Q2xpZW50UmVjdHMoKSksIGxhc3QkMyhwb3MxLmdldENsaWVudFJlY3RzKCkpLCBpc0Fib3ZlJDEpLmdldE9yKGZhbHNlKTtcbiAgICBDYXJldFBvc2l0aW9uLmlzQmVsb3cgPSAocG9zMSwgcG9zMikgPT4gbGlmdDIobGFzdCQzKHBvczIuZ2V0Q2xpZW50UmVjdHMoKSksIGhlYWQocG9zMS5nZXRDbGllbnRSZWN0cygpKSwgaXNCZWxvdyQxKS5nZXRPcihmYWxzZSk7XG4gICAgQ2FyZXRQb3NpdGlvbi5pc0F0U3RhcnQgPSBwb3MgPT4gcG9zID8gcG9zLmlzQXRTdGFydCgpIDogZmFsc2U7XG4gICAgQ2FyZXRQb3NpdGlvbi5pc0F0RW5kID0gcG9zID0+IHBvcyA/IHBvcy5pc0F0RW5kKCkgOiBmYWxzZTtcbiAgICBDYXJldFBvc2l0aW9uLmlzVGV4dFBvc2l0aW9uID0gcG9zID0+IHBvcyA/IGlzVGV4dCRhKHBvcy5jb250YWluZXIoKSkgOiBmYWxzZTtcbiAgICBDYXJldFBvc2l0aW9uLmlzRWxlbWVudFBvc2l0aW9uID0gcG9zID0+ICFDYXJldFBvc2l0aW9uLmlzVGV4dFBvc2l0aW9uKHBvcyk7XG5cbiAgICBjb25zdCB0cmltRW1wdHlUZXh0Tm9kZSQxID0gKGRvbSwgbm9kZSkgPT4ge1xuICAgICAgaWYgKGlzVGV4dCRhKG5vZGUpICYmIG5vZGUuZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZG9tLnJlbW92ZShub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGluc2VydE5vZGUgPSAoZG9tLCBybmcsIG5vZGUpID0+IHtcbiAgICAgIHJuZy5pbnNlcnROb2RlKG5vZGUpO1xuICAgICAgdHJpbUVtcHR5VGV4dE5vZGUkMShkb20sIG5vZGUucHJldmlvdXNTaWJsaW5nKTtcbiAgICAgIHRyaW1FbXB0eVRleHROb2RlJDEoZG9tLCBub2RlLm5leHRTaWJsaW5nKTtcbiAgICB9O1xuICAgIGNvbnN0IGluc2VydEZyYWdtZW50ID0gKGRvbSwgcm5nLCBmcmFnKSA9PiB7XG4gICAgICBjb25zdCBmaXJzdENoaWxkID0gT3B0aW9uYWwuZnJvbShmcmFnLmZpcnN0Q2hpbGQpO1xuICAgICAgY29uc3QgbGFzdENoaWxkID0gT3B0aW9uYWwuZnJvbShmcmFnLmxhc3RDaGlsZCk7XG4gICAgICBybmcuaW5zZXJ0Tm9kZShmcmFnKTtcbiAgICAgIGZpcnN0Q2hpbGQuZWFjaChjaGlsZCA9PiB0cmltRW1wdHlUZXh0Tm9kZSQxKGRvbSwgY2hpbGQucHJldmlvdXNTaWJsaW5nKSk7XG4gICAgICBsYXN0Q2hpbGQuZWFjaChjaGlsZCA9PiB0cmltRW1wdHlUZXh0Tm9kZSQxKGRvbSwgY2hpbGQubmV4dFNpYmxpbmcpKTtcbiAgICB9O1xuICAgIGNvbnN0IHJhbmdlSW5zZXJ0Tm9kZSA9IChkb20sIHJuZywgbm9kZSkgPT4ge1xuICAgICAgaWYgKGlzRG9jdW1lbnRGcmFnbWVudChub2RlKSkge1xuICAgICAgICBpbnNlcnRGcmFnbWVudChkb20sIHJuZywgbm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnNlcnROb2RlKGRvbSwgcm5nLCBub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaXNUZXh0JDYgPSBpc1RleHQkYTtcbiAgICBjb25zdCBpc0JvZ3VzID0gaXNCb2d1cyQyO1xuICAgIGNvbnN0IG5vZGVJbmRleCA9IERPTVV0aWxzLm5vZGVJbmRleDtcbiAgICBjb25zdCBub3JtYWxpemVkUGFyZW50ID0gbm9kZSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgaWYgKGlzQm9ndXMocGFyZW50Tm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRQYXJlbnQocGFyZW50Tm9kZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyZW50Tm9kZTtcbiAgICB9O1xuICAgIGNvbnN0IGdldENoaWxkTm9kZXMgPSBub2RlID0+IHtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVkdWNlKG5vZGUuY2hpbGROb2RlcywgKHJlc3VsdCwgbm9kZSkgPT4ge1xuICAgICAgICBpZiAoaXNCb2d1cyhub2RlKSAmJiBub2RlLm5vZGVOYW1lICE9PSAnQlInKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChnZXRDaGlsZE5vZGVzKG5vZGUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQucHVzaChub2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSwgW10pO1xuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplZFRleHRPZmZzZXQgPSAobm9kZSwgb2Zmc2V0KSA9PiB7XG4gICAgICBsZXQgdGVtcE5vZGUgPSBub2RlO1xuICAgICAgd2hpbGUgKHRlbXBOb2RlID0gdGVtcE5vZGUucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICAgIGlmICghaXNUZXh0JDYodGVtcE5vZGUpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgb2Zmc2V0ICs9IHRlbXBOb2RlLmRhdGEubGVuZ3RoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9O1xuICAgIGNvbnN0IGVxdWFsID0gYSA9PiBiID0+IGEgPT09IGI7XG4gICAgY29uc3Qgbm9ybWFsaXplZE5vZGVJbmRleCA9IG5vZGUgPT4ge1xuICAgICAgbGV0IG5vZGVzLCBpbmRleDtcbiAgICAgIG5vZGVzID0gZ2V0Q2hpbGROb2Rlcyhub3JtYWxpemVkUGFyZW50KG5vZGUpKTtcbiAgICAgIGluZGV4ID0gZmluZEluZGV4JDEobm9kZXMsIGVxdWFsKG5vZGUpLCBub2RlKTtcbiAgICAgIG5vZGVzID0gbm9kZXMuc2xpY2UoMCwgaW5kZXggKyAxKTtcbiAgICAgIGNvbnN0IG51bVRleHRGcmFnbWVudHMgPSByZWR1Y2Uobm9kZXMsIChyZXN1bHQsIG5vZGUsIGkpID0+IHtcbiAgICAgICAgaWYgKGlzVGV4dCQ2KG5vZGUpICYmIGlzVGV4dCQ2KG5vZGVzW2kgLSAxXSkpIHtcbiAgICAgICAgICByZXN1bHQrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSwgMCk7XG4gICAgICBub2RlcyA9IGZpbHRlciQzKG5vZGVzLCBtYXRjaE5vZGVOYW1lcyhbbm9kZS5ub2RlTmFtZV0pKTtcbiAgICAgIGluZGV4ID0gZmluZEluZGV4JDEobm9kZXMsIGVxdWFsKG5vZGUpLCBub2RlKTtcbiAgICAgIHJldHVybiBpbmRleCAtIG51bVRleHRGcmFnbWVudHM7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVQYXRoSXRlbSA9IG5vZGUgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IGlzVGV4dCQ2KG5vZGUpID8gJ3RleHQoKScgOiBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gbmFtZSArICdbJyArIG5vcm1hbGl6ZWROb2RlSW5kZXgobm9kZSkgKyAnXSc7XG4gICAgfTtcbiAgICBjb25zdCBwYXJlbnRzVW50aWwkMSA9IChyb290LCBub2RlLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcbiAgICAgIGZvciAobGV0IHRlbXBOb2RlID0gbm9kZS5wYXJlbnROb2RlOyB0ZW1wTm9kZSAmJiB0ZW1wTm9kZSAhPT0gcm9vdDsgdGVtcE5vZGUgPSB0ZW1wTm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUgJiYgcHJlZGljYXRlKHRlbXBOb2RlKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudHMucHVzaCh0ZW1wTm9kZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyZW50cztcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZSRiID0gKHJvb3QsIGNhcmV0UG9zaXRpb24pID0+IHtcbiAgICAgIGxldCBwYXRoID0gW107XG4gICAgICBsZXQgY29udGFpbmVyID0gY2FyZXRQb3NpdGlvbi5jb250YWluZXIoKTtcbiAgICAgIGxldCBvZmZzZXQgPSBjYXJldFBvc2l0aW9uLm9mZnNldCgpO1xuICAgICAgbGV0IG91dHB1dE9mZnNldDtcbiAgICAgIGlmIChpc1RleHQkNihjb250YWluZXIpKSB7XG4gICAgICAgIG91dHB1dE9mZnNldCA9IG5vcm1hbGl6ZWRUZXh0T2Zmc2V0KGNvbnRhaW5lciwgb2Zmc2V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBjb250YWluZXIuY2hpbGROb2RlcztcbiAgICAgICAgaWYgKG9mZnNldCA+PSBjaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgIG91dHB1dE9mZnNldCA9ICdhZnRlcic7XG4gICAgICAgICAgb2Zmc2V0ID0gY2hpbGROb2Rlcy5sZW5ndGggLSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dHB1dE9mZnNldCA9ICdiZWZvcmUnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRhaW5lciA9IGNoaWxkTm9kZXNbb2Zmc2V0XTtcbiAgICAgIH1cbiAgICAgIHBhdGgucHVzaChjcmVhdGVQYXRoSXRlbShjb250YWluZXIpKTtcbiAgICAgIGxldCBwYXJlbnRzID0gcGFyZW50c1VudGlsJDEocm9vdCwgY29udGFpbmVyKTtcbiAgICAgIHBhcmVudHMgPSBmaWx0ZXIkMyhwYXJlbnRzLCBub3QoaXNCb2d1cyQyKSk7XG4gICAgICBwYXRoID0gcGF0aC5jb25jYXQobWFwJDEocGFyZW50cywgbm9kZSA9PiB7XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXRoSXRlbShub2RlKTtcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBwYXRoLnJldmVyc2UoKS5qb2luKCcvJykgKyAnLCcgKyBvdXRwdXRPZmZzZXQ7XG4gICAgfTtcbiAgICBjb25zdCByZXNvbHZlUGF0aEl0ZW0gPSAobm9kZSwgbmFtZSwgaW5kZXgpID0+IHtcbiAgICAgIGxldCBub2RlcyA9IGdldENoaWxkTm9kZXMobm9kZSk7XG4gICAgICBub2RlcyA9IGZpbHRlciQzKG5vZGVzLCAobm9kZSwgaW5kZXgpID0+IHtcbiAgICAgICAgcmV0dXJuICFpc1RleHQkNihub2RlKSB8fCAhaXNUZXh0JDYobm9kZXNbaW5kZXggLSAxXSk7XG4gICAgICB9KTtcbiAgICAgIG5vZGVzID0gZmlsdGVyJDMobm9kZXMsIG1hdGNoTm9kZU5hbWVzKFtuYW1lXSkpO1xuICAgICAgcmV0dXJuIG5vZGVzW2luZGV4XTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRUZXh0UG9zaXRpb24gPSAoY29udGFpbmVyLCBvZmZzZXQpID0+IHtcbiAgICAgIGxldCBub2RlID0gY29udGFpbmVyO1xuICAgICAgbGV0IHRhcmdldE9mZnNldCA9IDA7XG4gICAgICB3aGlsZSAoaXNUZXh0JDYobm9kZSkpIHtcbiAgICAgICAgY29uc3QgZGF0YUxlbiA9IG5vZGUuZGF0YS5sZW5ndGg7XG4gICAgICAgIGlmIChvZmZzZXQgPj0gdGFyZ2V0T2Zmc2V0ICYmIG9mZnNldCA8PSB0YXJnZXRPZmZzZXQgKyBkYXRhTGVuKSB7XG4gICAgICAgICAgY29udGFpbmVyID0gbm9kZTtcbiAgICAgICAgICBvZmZzZXQgPSBvZmZzZXQgLSB0YXJnZXRPZmZzZXQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1RleHQkNihub2RlLm5leHRTaWJsaW5nKSkge1xuICAgICAgICAgIGNvbnRhaW5lciA9IG5vZGU7XG4gICAgICAgICAgb2Zmc2V0ID0gZGF0YUxlbjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRPZmZzZXQgKz0gZGF0YUxlbjtcbiAgICAgICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgICB9XG4gICAgICBpZiAoaXNUZXh0JDYoY29udGFpbmVyKSAmJiBvZmZzZXQgPiBjb250YWluZXIuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgb2Zmc2V0ID0gY29udGFpbmVyLmRhdGEubGVuZ3RoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24oY29udGFpbmVyLCBvZmZzZXQpO1xuICAgIH07XG4gICAgY29uc3QgcmVzb2x2ZSQxID0gKHJvb3QsIHBhdGgpID0+IHtcbiAgICAgIGlmICghcGF0aCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdCgnLCcpO1xuICAgICAgY29uc3QgcGF0aHMgPSBwYXJ0c1swXS5zcGxpdCgnLycpO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gcGFydHMubGVuZ3RoID4gMSA/IHBhcnRzWzFdIDogJ2JlZm9yZSc7XG4gICAgICBjb25zdCBjb250YWluZXIgPSByZWR1Y2UocGF0aHMsIChyZXN1bHQsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gLyhbXFx3XFwtXFwoXFwpXSspXFxbKFswLTldKylcXF0vLmV4ZWModmFsdWUpO1xuICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoWzFdID09PSAndGV4dCgpJykge1xuICAgICAgICAgIG1hdGNoWzFdID0gJyN0ZXh0JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzb2x2ZVBhdGhJdGVtKHJlc3VsdCwgbWF0Y2hbMV0sIHBhcnNlSW50KG1hdGNoWzJdLCAxMCkpO1xuICAgICAgfSwgcm9vdCk7XG4gICAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICghaXNUZXh0JDYoY29udGFpbmVyKSAmJiBjb250YWluZXIucGFyZW50Tm9kZSkge1xuICAgICAgICBsZXQgbm9kZU9mZnNldDtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gJ2FmdGVyJykge1xuICAgICAgICAgIG5vZGVPZmZzZXQgPSBub2RlSW5kZXgoY29udGFpbmVyKSArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZU9mZnNldCA9IG5vZGVJbmRleChjb250YWluZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBDYXJldFBvc2l0aW9uKGNvbnRhaW5lci5wYXJlbnROb2RlLCBub2RlT2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmaW5kVGV4dFBvc2l0aW9uKGNvbnRhaW5lciwgcGFyc2VJbnQob2Zmc2V0LCAxMCkpO1xuICAgIH07XG5cbiAgICBjb25zdCBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJDkgPSBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJGI7XG4gICAgY29uc3QgZ2V0Tm9ybWFsaXplZFRleHRPZmZzZXQkMSA9ICh0cmltLCBjb250YWluZXIsIG9mZnNldCkgPT4ge1xuICAgICAgbGV0IHRyaW1tZWRPZmZzZXQgPSB0cmltKGNvbnRhaW5lci5kYXRhLnNsaWNlKDAsIG9mZnNldCkpLmxlbmd0aDtcbiAgICAgIGZvciAobGV0IG5vZGUgPSBjb250YWluZXIucHJldmlvdXNTaWJsaW5nOyBub2RlICYmIGlzVGV4dCRhKG5vZGUpOyBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgdHJpbW1lZE9mZnNldCArPSB0cmltKG5vZGUuZGF0YSkubGVuZ3RoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRyaW1tZWRPZmZzZXQ7XG4gICAgfTtcbiAgICBjb25zdCBnZXRQb2ludCA9IChkb20sIHRyaW0sIG5vcm1hbGl6ZWQsIHJuZywgc3RhcnQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHN0YXJ0ID8gcm5nLnN0YXJ0Q29udGFpbmVyIDogcm5nLmVuZENvbnRhaW5lcjtcbiAgICAgIGxldCBvZmZzZXQgPSBzdGFydCA/IHJuZy5zdGFydE9mZnNldCA6IHJuZy5lbmRPZmZzZXQ7XG4gICAgICBjb25zdCBwb2ludCA9IFtdO1xuICAgICAgY29uc3Qgcm9vdCA9IGRvbS5nZXRSb290KCk7XG4gICAgICBpZiAoaXNUZXh0JGEoY29udGFpbmVyKSkge1xuICAgICAgICBwb2ludC5wdXNoKG5vcm1hbGl6ZWQgPyBnZXROb3JtYWxpemVkVGV4dE9mZnNldCQxKHRyaW0sIGNvbnRhaW5lciwgb2Zmc2V0KSA6IG9mZnNldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgYWZ0ZXIgPSAwO1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVzID0gY29udGFpbmVyLmNoaWxkTm9kZXM7XG4gICAgICAgIGlmIChvZmZzZXQgPj0gY2hpbGROb2Rlcy5sZW5ndGggJiYgY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICBhZnRlciA9IDE7XG4gICAgICAgICAgb2Zmc2V0ID0gTWF0aC5tYXgoMCwgY2hpbGROb2Rlcy5sZW5ndGggLSAxKTtcbiAgICAgICAgfVxuICAgICAgICBwb2ludC5wdXNoKGRvbS5ub2RlSW5kZXgoY2hpbGROb2Rlc1tvZmZzZXRdLCBub3JtYWxpemVkKSArIGFmdGVyKTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IG5vZGUgPSBjb250YWluZXI7IG5vZGUgJiYgbm9kZSAhPT0gcm9vdDsgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICBwb2ludC5wdXNoKGRvbS5ub2RlSW5kZXgobm9kZSwgbm9ybWFsaXplZCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBvaW50O1xuICAgIH07XG4gICAgY29uc3QgZ2V0TG9jYXRpb24gPSAodHJpbSwgc2VsZWN0aW9uLCBub3JtYWxpemVkLCBybmcpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IHNlbGVjdGlvbi5kb207XG4gICAgICBjb25zdCBzdGFydCA9IGdldFBvaW50KGRvbSwgdHJpbSwgbm9ybWFsaXplZCwgcm5nLCB0cnVlKTtcbiAgICAgIGNvbnN0IGZvcndhcmQgPSBzZWxlY3Rpb24uaXNGb3J3YXJkKCk7XG4gICAgICBjb25zdCBmYWtlQ2FyZXQgPSBpc1JhbmdlSW5DYXJldENvbnRhaW5lckJsb2NrKHJuZykgPyB7IGlzRmFrZUNhcmV0OiB0cnVlIH0gOiB7fTtcbiAgICAgIGlmICghc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkpIHtcbiAgICAgICAgY29uc3QgZW5kID0gZ2V0UG9pbnQoZG9tLCB0cmltLCBub3JtYWxpemVkLCBybmcsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydCxcbiAgICAgICAgICBlbmQsXG4gICAgICAgICAgZm9yd2FyZCxcbiAgICAgICAgICAuLi5mYWtlQ2FyZXRcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgZm9yd2FyZCxcbiAgICAgICAgICAuLi5mYWtlQ2FyZXRcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRJbmRleCA9IChkb20sIG5hbWUsIGVsZW1lbnQpID0+IHtcbiAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICBUb29scy5lYWNoKGRvbS5zZWxlY3QobmFtZSksIG5vZGUgPT4ge1xuICAgICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWNlLWJvZ3VzJykgPT09ICdhbGwnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUgPT09IGVsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY291bnQrKztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNvdW50O1xuICAgIH07XG4gICAgY29uc3QgbW92ZUVuZFBvaW50JDEgPSAocm5nLCBzdGFydCkgPT4ge1xuICAgICAgbGV0IGNvbnRhaW5lciA9IHN0YXJ0ID8gcm5nLnN0YXJ0Q29udGFpbmVyIDogcm5nLmVuZENvbnRhaW5lcjtcbiAgICAgIGxldCBvZmZzZXQgPSBzdGFydCA/IHJuZy5zdGFydE9mZnNldCA6IHJuZy5lbmRPZmZzZXQ7XG4gICAgICBpZiAoaXNFbGVtZW50JDYoY29udGFpbmVyKSAmJiBjb250YWluZXIubm9kZU5hbWUgPT09ICdUUicpIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IGNvbnRhaW5lci5jaGlsZE5vZGVzO1xuICAgICAgICBjb250YWluZXIgPSBjaGlsZE5vZGVzW01hdGgubWluKHN0YXJ0ID8gb2Zmc2V0IDogb2Zmc2V0IC0gMSwgY2hpbGROb2Rlcy5sZW5ndGggLSAxKV07XG4gICAgICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgICAgICBvZmZzZXQgPSBzdGFydCA/IDAgOiBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGg7XG4gICAgICAgICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgICAgICBybmcuc2V0U3RhcnQoY29udGFpbmVyLCBvZmZzZXQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBybmcuc2V0RW5kKGNvbnRhaW5lciwgb2Zmc2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZVRhYmxlQ2VsbFNlbGVjdGlvbiA9IHJuZyA9PiB7XG4gICAgICBtb3ZlRW5kUG9pbnQkMShybmcsIHRydWUpO1xuICAgICAgbW92ZUVuZFBvaW50JDEocm5nLCBmYWxzZSk7XG4gICAgICByZXR1cm4gcm5nO1xuICAgIH07XG4gICAgY29uc3QgZmluZFNpYmxpbmcgPSAobm9kZSwgb2Zmc2V0KSA9PiB7XG4gICAgICBpZiAoaXNFbGVtZW50JDYobm9kZSkpIHtcbiAgICAgICAgbm9kZSA9IGdldE5vZGUkMShub2RlLCBvZmZzZXQpO1xuICAgICAgICBpZiAoaXNDb250ZW50RWRpdGFibGVGYWxzZSQ5KG5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpc0NhcmV0Q29udGFpbmVyJDIobm9kZSkpIHtcbiAgICAgICAgaWYgKGlzVGV4dCRhKG5vZGUpICYmIGlzQ2FyZXRDb250YWluZXJCbG9jayQxKG5vZGUpKSB7XG4gICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc2libGluZyA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICBpZiAoaXNDb250ZW50RWRpdGFibGVGYWxzZSQ5KHNpYmxpbmcpKSB7XG4gICAgICAgICAgcmV0dXJuIHNpYmxpbmc7XG4gICAgICAgIH1cbiAgICAgICAgc2libGluZyA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgIGlmIChpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJDkoc2libGluZykpIHtcbiAgICAgICAgICByZXR1cm4gc2libGluZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRBZGphY2VudENvbnRlbnRFZGl0YWJsZUZhbHNlRWxtID0gcm5nID0+IHtcbiAgICAgIHJldHVybiBmaW5kU2libGluZyhybmcuc3RhcnRDb250YWluZXIsIHJuZy5zdGFydE9mZnNldCkgfHwgZmluZFNpYmxpbmcocm5nLmVuZENvbnRhaW5lciwgcm5nLmVuZE9mZnNldCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRPZmZzZXRCb29rbWFyayA9ICh0cmltLCBub3JtYWxpemVkLCBzZWxlY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBzZWxlY3Rpb24uZ2V0Tm9kZSgpO1xuICAgICAgY29uc3Qgcm5nID0gc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdJTUcnIHx8IGlzQ29udGVudEVkaXRhYmxlRmFsc2UkOShlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBuYW1lID0gZWxlbWVudC5ub2RlTmFtZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGluZGV4OiBmaW5kSW5kZXgoc2VsZWN0aW9uLmRvbSwgbmFtZSwgZWxlbWVudClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNpYmxpbmcgPSBmaW5kQWRqYWNlbnRDb250ZW50RWRpdGFibGVGYWxzZUVsbShybmcpO1xuICAgICAgaWYgKHNpYmxpbmcpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHNpYmxpbmcudGFnTmFtZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGluZGV4OiBmaW5kSW5kZXgoc2VsZWN0aW9uLmRvbSwgbmFtZSwgc2libGluZylcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBnZXRMb2NhdGlvbih0cmltLCBzZWxlY3Rpb24sIG5vcm1hbGl6ZWQsIHJuZyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRDYXJldEJvb2ttYXJrID0gc2VsZWN0aW9uID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IHNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0OiBjcmVhdGUkYihzZWxlY3Rpb24uZG9tLmdldFJvb3QoKSwgQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChybmcpKSxcbiAgICAgICAgZW5kOiBjcmVhdGUkYihzZWxlY3Rpb24uZG9tLmdldFJvb3QoKSwgQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VFbmQocm5nKSksXG4gICAgICAgIGZvcndhcmQ6IHNlbGVjdGlvbi5pc0ZvcndhcmQoKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFJhbmdlQm9va21hcmsgPSBzZWxlY3Rpb24gPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcm5nOiBzZWxlY3Rpb24uZ2V0Um5nKCksXG4gICAgICAgIGZvcndhcmQ6IHNlbGVjdGlvbi5pc0ZvcndhcmQoKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUJvb2ttYXJrU3BhbiA9IChkb20sIGlkLCBmaWxsZWQpID0+IHtcbiAgICAgIGNvbnN0IGFyZ3MgPSB7XG4gICAgICAgICdkYXRhLW1jZS10eXBlJzogJ2Jvb2ttYXJrJyxcbiAgICAgICAgaWQsXG4gICAgICAgICdzdHlsZSc6ICdvdmVyZmxvdzpoaWRkZW47bGluZS1oZWlnaHQ6MHB4J1xuICAgICAgfTtcbiAgICAgIHJldHVybiBmaWxsZWQgPyBkb20uY3JlYXRlKCdzcGFuJywgYXJncywgJyYjeEZFRkY7JykgOiBkb20uY3JlYXRlKCdzcGFuJywgYXJncyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRQZXJzaXN0ZW50Qm9va21hcmsgPSAoc2VsZWN0aW9uLCBmaWxsZWQpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IHNlbGVjdGlvbi5kb207XG4gICAgICBsZXQgcm5nID0gc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgY29uc3QgaWQgPSBkb20udW5pcXVlSWQoKTtcbiAgICAgIGNvbnN0IGNvbGxhcHNlZCA9IHNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpO1xuICAgICAgY29uc3QgZWxlbWVudCA9IHNlbGVjdGlvbi5nZXROb2RlKCk7XG4gICAgICBjb25zdCBuYW1lID0gZWxlbWVudC5ub2RlTmFtZTtcbiAgICAgIGNvbnN0IGZvcndhcmQgPSBzZWxlY3Rpb24uaXNGb3J3YXJkKCk7XG4gICAgICBpZiAobmFtZSA9PT0gJ0lNRycpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGluZGV4OiBmaW5kSW5kZXgoZG9tLCBuYW1lLCBlbGVtZW50KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3Qgcm5nMiA9IG5vcm1hbGl6ZVRhYmxlQ2VsbFNlbGVjdGlvbihybmcuY2xvbmVSYW5nZSgpKTtcbiAgICAgIGlmICghY29sbGFwc2VkKSB7XG4gICAgICAgIHJuZzIuY29sbGFwc2UoZmFsc2UpO1xuICAgICAgICBjb25zdCBlbmRCb29rbWFya05vZGUgPSBjcmVhdGVCb29rbWFya1NwYW4oZG9tLCBpZCArICdfZW5kJywgZmlsbGVkKTtcbiAgICAgICAgcmFuZ2VJbnNlcnROb2RlKGRvbSwgcm5nMiwgZW5kQm9va21hcmtOb2RlKTtcbiAgICAgIH1cbiAgICAgIHJuZyA9IG5vcm1hbGl6ZVRhYmxlQ2VsbFNlbGVjdGlvbihybmcpO1xuICAgICAgcm5nLmNvbGxhcHNlKHRydWUpO1xuICAgICAgY29uc3Qgc3RhcnRCb29rbWFya05vZGUgPSBjcmVhdGVCb29rbWFya1NwYW4oZG9tLCBpZCArICdfc3RhcnQnLCBmaWxsZWQpO1xuICAgICAgcmFuZ2VJbnNlcnROb2RlKGRvbSwgcm5nLCBzdGFydEJvb2ttYXJrTm9kZSk7XG4gICAgICBzZWxlY3Rpb24ubW92ZVRvQm9va21hcmsoe1xuICAgICAgICBpZCxcbiAgICAgICAga2VlcDogdHJ1ZSxcbiAgICAgICAgZm9yd2FyZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZCxcbiAgICAgICAgZm9yd2FyZFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEJvb2ttYXJrJDIgPSAoc2VsZWN0aW9uLCB0eXBlLCBub3JtYWxpemVkID0gZmFsc2UpID0+IHtcbiAgICAgIGlmICh0eXBlID09PSAyKSB7XG4gICAgICAgIHJldHVybiBnZXRPZmZzZXRCb29rbWFyayh0cmltJDEsIG5vcm1hbGl6ZWQsIHNlbGVjdGlvbik7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IDMpIHtcbiAgICAgICAgcmV0dXJuIGdldENhcmV0Qm9va21hcmsoc2VsZWN0aW9uKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSkge1xuICAgICAgICByZXR1cm4gZ2V0UmFuZ2VCb29rbWFyayhzZWxlY3Rpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGdldFBlcnNpc3RlbnRCb29rbWFyayhzZWxlY3Rpb24sIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdldFVuZG9Cb29rbWFyayA9IGN1cnJ5KGdldE9mZnNldEJvb2ttYXJrLCBpZGVudGl0eSwgdHJ1ZSk7XG5cbiAgICBjb25zdCB2YWx1ZSQxID0gdmFsdWUgPT4ge1xuICAgICAgY29uc3QgYXBwbHlIZWxwZXIgPSBmbiA9PiBmbih2YWx1ZSk7XG4gICAgICBjb25zdCBjb25zdEhlbHBlciA9IGNvbnN0YW50KHZhbHVlKTtcbiAgICAgIGNvbnN0IG91dHB1dEhlbHBlciA9ICgpID0+IG91dHB1dDtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHtcbiAgICAgICAgdGFnOiB0cnVlLFxuICAgICAgICBpbm5lcjogdmFsdWUsXG4gICAgICAgIGZvbGQ6IChfb25FcnJvciwgb25WYWx1ZSkgPT4gb25WYWx1ZSh2YWx1ZSksXG4gICAgICAgIGlzVmFsdWU6IGFsd2F5cyxcbiAgICAgICAgaXNFcnJvcjogbmV2ZXIsXG4gICAgICAgIG1hcDogbWFwcGVyID0+IFJlc3VsdC52YWx1ZShtYXBwZXIodmFsdWUpKSxcbiAgICAgICAgbWFwRXJyb3I6IG91dHB1dEhlbHBlcixcbiAgICAgICAgYmluZDogYXBwbHlIZWxwZXIsXG4gICAgICAgIGV4aXN0czogYXBwbHlIZWxwZXIsXG4gICAgICAgIGZvcmFsbDogYXBwbHlIZWxwZXIsXG4gICAgICAgIGdldE9yOiBjb25zdEhlbHBlcixcbiAgICAgICAgb3I6IG91dHB1dEhlbHBlcixcbiAgICAgICAgZ2V0T3JUaHVuazogY29uc3RIZWxwZXIsXG4gICAgICAgIG9yVGh1bms6IG91dHB1dEhlbHBlcixcbiAgICAgICAgZ2V0T3JEaWU6IGNvbnN0SGVscGVyLFxuICAgICAgICBlYWNoOiBmbiA9PiB7XG4gICAgICAgICAgZm4odmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICB0b09wdGlvbmFsOiAoKSA9PiBPcHRpb25hbC5zb21lKHZhbHVlKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfTtcbiAgICBjb25zdCBlcnJvciA9IGVycm9yID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dEhlbHBlciA9ICgpID0+IG91dHB1dDtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHtcbiAgICAgICAgdGFnOiBmYWxzZSxcbiAgICAgICAgaW5uZXI6IGVycm9yLFxuICAgICAgICBmb2xkOiAob25FcnJvciwgX29uVmFsdWUpID0+IG9uRXJyb3IoZXJyb3IpLFxuICAgICAgICBpc1ZhbHVlOiBuZXZlcixcbiAgICAgICAgaXNFcnJvcjogYWx3YXlzLFxuICAgICAgICBtYXA6IG91dHB1dEhlbHBlcixcbiAgICAgICAgbWFwRXJyb3I6IG1hcHBlciA9PiBSZXN1bHQuZXJyb3IobWFwcGVyKGVycm9yKSksXG4gICAgICAgIGJpbmQ6IG91dHB1dEhlbHBlcixcbiAgICAgICAgZXhpc3RzOiBuZXZlcixcbiAgICAgICAgZm9yYWxsOiBhbHdheXMsXG4gICAgICAgIGdldE9yOiBpZGVudGl0eSxcbiAgICAgICAgb3I6IGlkZW50aXR5LFxuICAgICAgICBnZXRPclRodW5rOiBhcHBseSQxLFxuICAgICAgICBvclRodW5rOiBhcHBseSQxLFxuICAgICAgICBnZXRPckRpZTogZGllKFN0cmluZyhlcnJvcikpLFxuICAgICAgICBlYWNoOiBub29wLFxuICAgICAgICB0b09wdGlvbmFsOiBPcHRpb25hbC5ub25lXG4gICAgICB9O1xuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21PcHRpb24gPSAob3B0aW9uYWwsIGVycikgPT4gb3B0aW9uYWwuZm9sZCgoKSA9PiBlcnJvcihlcnIpLCB2YWx1ZSQxKTtcbiAgICBjb25zdCBSZXN1bHQgPSB7XG4gICAgICB2YWx1ZTogdmFsdWUkMSxcbiAgICAgIGVycm9yLFxuICAgICAgZnJvbU9wdGlvblxuICAgIH07XG5cbiAgICBjb25zdCBnZW5lcmF0ZSA9IGNhc2VzID0+IHtcbiAgICAgIGlmICghaXNBcnJheSQxKGNhc2VzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhc2VzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgIH1cbiAgICAgIGlmIChjYXNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBjYXNlJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBbXTtcbiAgICAgIGNvbnN0IGFkdCA9IHt9O1xuICAgICAgZWFjaCRlKGNhc2VzLCAoYWNhc2UsIGNvdW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGtleXMkMSA9IGtleXMoYWNhc2UpO1xuICAgICAgICBpZiAoa2V5cyQxLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignb25lIGFuZCBvbmx5IG9uZSBuYW1lIHBlciBjYXNlJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5ID0ga2V5cyQxWzBdO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGFjYXNlW2tleV07XG4gICAgICAgIGlmIChhZHRba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkdXBsaWNhdGUga2V5IGRldGVjdGVkOicgKyBrZXkpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2NhdGEnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgaGF2ZSBhIGNhc2UgbmFtZWQgY2F0YSAoc29ycnkpJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQXJyYXkkMSh2YWx1ZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhc2UgYXJndW1lbnRzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdHJ1Y3RvcnMucHVzaChrZXkpO1xuICAgICAgICBhZHRba2V5XSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgY29uc3QgYXJnTGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gICAgICAgICAgaWYgKGFyZ0xlbmd0aCAhPT0gdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dyb25nIG51bWJlciBvZiBhcmd1bWVudHMgdG8gY2FzZSAnICsga2V5ICsgJy4gRXhwZWN0ZWQgJyArIHZhbHVlLmxlbmd0aCArICcgKCcgKyB2YWx1ZSArICcpLCBnb3QgJyArIGFyZ0xlbmd0aCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG1hdGNoID0gYnJhbmNoZXMgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnJhbmNoS2V5cyA9IGtleXMoYnJhbmNoZXMpO1xuICAgICAgICAgICAgaWYgKGNvbnN0cnVjdG9ycy5sZW5ndGggIT09IGJyYW5jaEtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBtYXRjaC4gRXhwZWN0ZWQ6ICcgKyBjb25zdHJ1Y3RvcnMuam9pbignLCcpICsgJ1xcbkFjdHVhbDogJyArIGJyYW5jaEtleXMuam9pbignLCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFsbFJlcWQgPSBmb3JhbGwoY29uc3RydWN0b3JzLCByZXFLZXkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gY29udGFpbnMkMihicmFuY2hLZXlzLCByZXFLZXkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWFsbFJlcWQpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYWxsIGJyYW5jaGVzIHdlcmUgc3BlY2lmaWVkIHdoZW4gdXNpbmcgbWF0Y2guIFNwZWNpZmllZDogJyArIGJyYW5jaEtleXMuam9pbignLCAnKSArICdcXG5SZXF1aXJlZDogJyArIGNvbnN0cnVjdG9ycy5qb2luKCcsICcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBicmFuY2hlc1trZXldLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZvbGQ6ICguLi5mb2xkQXJncykgPT4ge1xuICAgICAgICAgICAgICBpZiAoZm9sZEFyZ3MubGVuZ3RoICE9PSBjYXNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dyb25nIG51bWJlciBvZiBhcmd1bWVudHMgdG8gZm9sZC4gRXhwZWN0ZWQgJyArIGNhc2VzLmxlbmd0aCArICcsIGdvdCAnICsgZm9sZEFyZ3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBmb2xkQXJnc1tjb3VudF07XG4gICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWF0Y2gsXG4gICAgICAgICAgICBsb2c6IGxhYmVsID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2cobGFiZWwsIHtcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcnMsXG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3I6IGtleSxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IGFyZ3NcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFkdDtcbiAgICB9O1xuICAgIGNvbnN0IEFkdCA9IHsgZ2VuZXJhdGUgfTtcblxuICAgIEFkdC5nZW5lcmF0ZShbXG4gICAgICB7XG4gICAgICAgIGJvdGhFcnJvcnM6IFtcbiAgICAgICAgICAnZXJyb3IxJyxcbiAgICAgICAgICAnZXJyb3IyJ1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBmaXJzdEVycm9yOiBbXG4gICAgICAgICAgJ2Vycm9yMScsXG4gICAgICAgICAgJ3ZhbHVlMidcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc2Vjb25kRXJyb3I6IFtcbiAgICAgICAgICAndmFsdWUxJyxcbiAgICAgICAgICAnZXJyb3IyJ1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBib3RoVmFsdWVzOiBbXG4gICAgICAgICAgJ3ZhbHVlMScsXG4gICAgICAgICAgJ3ZhbHVlMidcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0pO1xuICAgIGNvbnN0IHBhcnRpdGlvbiQxID0gcmVzdWx0cyA9PiB7XG4gICAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IFtdO1xuICAgICAgZWFjaCRlKHJlc3VsdHMsIHJlc3VsdCA9PiB7XG4gICAgICAgIHJlc3VsdC5mb2xkKGVyciA9PiB7XG4gICAgICAgICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgICAgfSwgdmFsdWUgPT4ge1xuICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVycm9ycyxcbiAgICAgICAgdmFsdWVzXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBpc0lubGluZVBhdHRlcm4gPSBwYXR0ZXJuID0+IHBhdHRlcm4udHlwZSA9PT0gJ2lubGluZS1jb21tYW5kJyB8fCBwYXR0ZXJuLnR5cGUgPT09ICdpbmxpbmUtZm9ybWF0JztcbiAgICBjb25zdCBpc0Jsb2NrUGF0dGVybiA9IHBhdHRlcm4gPT4gcGF0dGVybi50eXBlID09PSAnYmxvY2stY29tbWFuZCcgfHwgcGF0dGVybi50eXBlID09PSAnYmxvY2stZm9ybWF0JztcbiAgICBjb25zdCBub3JtYWxpemVQYXR0ZXJuID0gcGF0dGVybiA9PiB7XG4gICAgICBjb25zdCBlcnIgPSBtZXNzYWdlID0+IFJlc3VsdC5lcnJvcih7XG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIHBhdHRlcm5cbiAgICAgIH0pO1xuICAgICAgY29uc3QgZm9ybWF0T3JDbWQgPSAobmFtZSwgb25Gb3JtYXQsIG9uQ29tbWFuZCkgPT4ge1xuICAgICAgICBpZiAocGF0dGVybi5mb3JtYXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxldCBmb3JtYXRzO1xuICAgICAgICAgIGlmIChpc0FycmF5JDEocGF0dGVybi5mb3JtYXQpKSB7XG4gICAgICAgICAgICBpZiAoIWZvcmFsbChwYXR0ZXJuLmZvcm1hdCwgaXNTdHJpbmcpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBlcnIobmFtZSArICcgcGF0dGVybiBoYXMgbm9uLXN0cmluZyBpdGVtcyBpbiB0aGUgYGZvcm1hdGAgYXJyYXknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvcm1hdHMgPSBwYXR0ZXJuLmZvcm1hdDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKHBhdHRlcm4uZm9ybWF0KSkge1xuICAgICAgICAgICAgZm9ybWF0cyA9IFtwYXR0ZXJuLmZvcm1hdF07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBlcnIobmFtZSArICcgcGF0dGVybiBoYXMgbm9uLXN0cmluZyBgZm9ybWF0YCBwYXJhbWV0ZXInKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFJlc3VsdC52YWx1ZShvbkZvcm1hdChmb3JtYXRzKSk7XG4gICAgICAgIH0gZWxzZSBpZiAocGF0dGVybi5jbWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICghaXNTdHJpbmcocGF0dGVybi5jbWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyKG5hbWUgKyAnIHBhdHRlcm4gaGFzIG5vbi1zdHJpbmcgYGNtZGAgcGFyYW1ldGVyJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBSZXN1bHQudmFsdWUob25Db21tYW5kKHBhdHRlcm4uY21kLCBwYXR0ZXJuLnZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGVycihuYW1lICsgJyBwYXR0ZXJuIGlzIG1pc3NpbmcgYm90aCBgZm9ybWF0YCBhbmQgYGNtZGAgcGFyYW1ldGVycycpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKCFpc09iamVjdChwYXR0ZXJuKSkge1xuICAgICAgICByZXR1cm4gZXJyKCdSYXcgcGF0dGVybiBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzU3RyaW5nKHBhdHRlcm4uc3RhcnQpKSB7XG4gICAgICAgIHJldHVybiBlcnIoJ1JhdyBwYXR0ZXJuIGlzIG1pc3NpbmcgYHN0YXJ0YCBwYXJhbWV0ZXInKTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXR0ZXJuLmVuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghaXNTdHJpbmcocGF0dGVybi5lbmQpKSB7XG4gICAgICAgICAgcmV0dXJuIGVycignSW5saW5lIHBhdHRlcm4gaGFzIG5vbi1zdHJpbmcgYGVuZGAgcGFyYW1ldGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdHRlcm4uc3RhcnQubGVuZ3RoID09PSAwICYmIHBhdHRlcm4uZW5kLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBlcnIoJ0lubGluZSBwYXR0ZXJuIGhhcyBlbXB0eSBgc3RhcnRgIGFuZCBgZW5kYCBwYXJhbWV0ZXJzJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0YXJ0ID0gcGF0dGVybi5zdGFydDtcbiAgICAgICAgbGV0IGVuZCA9IHBhdHRlcm4uZW5kO1xuICAgICAgICBpZiAoZW5kLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGVuZCA9IHN0YXJ0O1xuICAgICAgICAgIHN0YXJ0ID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdE9yQ21kKCdJbmxpbmUnLCBmb3JtYXQgPT4gKHtcbiAgICAgICAgICB0eXBlOiAnaW5saW5lLWZvcm1hdCcsXG4gICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgZW5kLFxuICAgICAgICAgIGZvcm1hdFxuICAgICAgICB9KSwgKGNtZCwgdmFsdWUpID0+ICh7XG4gICAgICAgICAgdHlwZTogJ2lubGluZS1jb21tYW5kJyxcbiAgICAgICAgICBzdGFydCxcbiAgICAgICAgICBlbmQsXG4gICAgICAgICAgY21kLFxuICAgICAgICAgIHZhbHVlXG4gICAgICAgIH0pKTtcbiAgICAgIH0gZWxzZSBpZiAocGF0dGVybi5yZXBsYWNlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghaXNTdHJpbmcocGF0dGVybi5yZXBsYWNlbWVudCkpIHtcbiAgICAgICAgICByZXR1cm4gZXJyKCdSZXBsYWNlbWVudCBwYXR0ZXJuIGhhcyBub24tc3RyaW5nIGByZXBsYWNlbWVudGAgcGFyYW1ldGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdHRlcm4uc3RhcnQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGVycignUmVwbGFjZW1lbnQgcGF0dGVybiBoYXMgZW1wdHkgYHN0YXJ0YCBwYXJhbWV0ZXInKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUmVzdWx0LnZhbHVlKHtcbiAgICAgICAgICB0eXBlOiAnaW5saW5lLWNvbW1hbmQnLFxuICAgICAgICAgIHN0YXJ0OiAnJyxcbiAgICAgICAgICBlbmQ6IHBhdHRlcm4uc3RhcnQsXG4gICAgICAgICAgY21kOiAnbWNlSW5zZXJ0Q29udGVudCcsXG4gICAgICAgICAgdmFsdWU6IHBhdHRlcm4ucmVwbGFjZW1lbnRcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocGF0dGVybi5zdGFydC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gZXJyKCdCbG9jayBwYXR0ZXJuIGhhcyBlbXB0eSBgc3RhcnRgIHBhcmFtZXRlcicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtYXRPckNtZCgnQmxvY2snLCBmb3JtYXRzID0+ICh7XG4gICAgICAgICAgdHlwZTogJ2Jsb2NrLWZvcm1hdCcsXG4gICAgICAgICAgc3RhcnQ6IHBhdHRlcm4uc3RhcnQsXG4gICAgICAgICAgZm9ybWF0OiBmb3JtYXRzWzBdXG4gICAgICAgIH0pLCAoY29tbWFuZCwgY29tbWFuZFZhbHVlKSA9PiAoe1xuICAgICAgICAgIHR5cGU6ICdibG9jay1jb21tYW5kJyxcbiAgICAgICAgICBzdGFydDogcGF0dGVybi5zdGFydCxcbiAgICAgICAgICBjbWQ6IGNvbW1hbmQsXG4gICAgICAgICAgdmFsdWU6IGNvbW1hbmRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRCbG9ja1BhdHRlcm5zID0gcGF0dGVybnMgPT4gZmlsdGVyJDUocGF0dGVybnMsIGlzQmxvY2tQYXR0ZXJuKTtcbiAgICBjb25zdCBnZXRJbmxpbmVQYXR0ZXJucyA9IHBhdHRlcm5zID0+IGZpbHRlciQ1KHBhdHRlcm5zLCBpc0lubGluZVBhdHRlcm4pO1xuICAgIGNvbnN0IGNyZWF0ZVBhdHRlcm5TZXQgPSAocGF0dGVybnMsIGR5bmFtaWNQYXR0ZXJuc0xvb2t1cCkgPT4gKHtcbiAgICAgIGlubGluZVBhdHRlcm5zOiBnZXRJbmxpbmVQYXR0ZXJucyhwYXR0ZXJucyksXG4gICAgICBibG9ja1BhdHRlcm5zOiBnZXRCbG9ja1BhdHRlcm5zKHBhdHRlcm5zKSxcbiAgICAgIGR5bmFtaWNQYXR0ZXJuc0xvb2t1cFxuICAgIH0pO1xuICAgIGNvbnN0IGZyb21SYXdQYXR0ZXJucyA9IHBhdHRlcm5zID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBwYXJ0aXRpb24kMShtYXAkMyhwYXR0ZXJucywgbm9ybWFsaXplUGF0dGVybikpO1xuICAgICAgZWFjaCRlKG5vcm1hbGl6ZWQuZXJyb3JzLCBlcnIgPT4gY29uc29sZS5lcnJvcihlcnIubWVzc2FnZSwgZXJyLnBhdHRlcm4pKTtcbiAgICAgIHJldHVybiBub3JtYWxpemVkLnZhbHVlcztcbiAgICB9O1xuICAgIGNvbnN0IGZyb21SYXdQYXR0ZXJuc0xvb2t1cCA9IGxvb2t1cEZuID0+IHtcbiAgICAgIHJldHVybiBjdHggPT4ge1xuICAgICAgICBjb25zdCByYXdQYXR0ZXJucyA9IGxvb2t1cEZuKGN0eCk7XG4gICAgICAgIHJldHVybiBmcm9tUmF3UGF0dGVybnMocmF3UGF0dGVybnMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGV2aWNlRGV0ZWN0aW9uJDEgPSBkZXRlY3QkMigpLmRldmljZVR5cGU7XG4gICAgY29uc3QgaXNUb3VjaCA9IGRldmljZURldGVjdGlvbiQxLmlzVG91Y2goKTtcbiAgICBjb25zdCBET00kYSA9IERPTVV0aWxzLkRPTTtcbiAgICBjb25zdCBnZXRIYXNoID0gdmFsdWUgPT4ge1xuICAgICAgY29uc3QgaXRlbXMgPSB2YWx1ZS5pbmRleE9mKCc9JykgPiAwID8gdmFsdWUuc3BsaXQoL1s7LF0oPyFbXj07LF0qKD86WzssXXwkKSkvKSA6IHZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICByZXR1cm4gZm9sZGwoaXRlbXMsIChvdXRwdXQsIGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgYXJyID0gaXRlbS5zcGxpdCgnPScpO1xuICAgICAgICBjb25zdCBrZXkgPSBhcnJbMF07XG4gICAgICAgIGNvbnN0IHZhbCA9IGFyci5sZW5ndGggPiAxID8gYXJyWzFdIDoga2V5O1xuICAgICAgICBvdXRwdXRbdHJpbSQzKGtleSldID0gdHJpbSQzKHZhbCk7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICB9LCB7fSk7XG4gICAgfTtcbiAgICBjb25zdCBpc1JlZ0V4cCA9IHggPT4gaXMkNCh4LCBSZWdFeHApO1xuICAgIGNvbnN0IG9wdGlvbiA9IG5hbWUgPT4gZWRpdG9yID0+IGVkaXRvci5vcHRpb25zLmdldChuYW1lKTtcbiAgICBjb25zdCBzdHJpbmdPck9iamVjdFByb2Nlc3NvciA9IHZhbHVlID0+IGlzU3RyaW5nKHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSk7XG4gICAgY29uc3QgYm9keU9wdGlvblByb2Nlc3NvciA9IChlZGl0b3IsIGRlZmF1bHRWYWx1ZSA9ICcnKSA9PiB2YWx1ZSA9PiB7XG4gICAgICBjb25zdCB2YWxpZCA9IGlzU3RyaW5nKHZhbHVlKTtcbiAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICBpZiAodmFsdWUuaW5kZXhPZignPScpICE9PSAtMSkge1xuICAgICAgICAgIGNvbnN0IGJvZHlPYmogPSBnZXRIYXNoKHZhbHVlKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IGdldCRhKGJvZHlPYmosIGVkaXRvci5pZCkuZ2V0T3IoZGVmYXVsdFZhbHVlKSxcbiAgICAgICAgICAgIHZhbGlkXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB2YWxpZFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgIG1lc3NhZ2U6ICdNdXN0IGJlIGEgc3RyaW5nLidcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyJDcgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgcmVnaXN0ZXJPcHRpb24gPSBlZGl0b3Iub3B0aW9ucy5yZWdpc3RlcjtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdpZCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogZWRpdG9yLmlkXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdzZWxlY3RvcicsIHsgcHJvY2Vzc29yOiAnc3RyaW5nJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd0YXJnZXQnLCB7IHByb2Nlc3NvcjogJ29iamVjdCcgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignc3VmZml4JywgeyBwcm9jZXNzb3I6ICdzdHJpbmcnIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2NhY2hlX3N1ZmZpeCcsIHsgcHJvY2Vzc29yOiAnc3RyaW5nJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdiYXNlX3VybCcsIHsgcHJvY2Vzc29yOiAnc3RyaW5nJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdyZWZlcnJlcl9wb2xpY3knLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICcnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdsYW5ndWFnZV9sb2FkJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaW5saW5lJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2lmcmFtZV9hdHRycycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnb2JqZWN0JyxcbiAgICAgICAgZGVmYXVsdDoge31cbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2RvY3R5cGUnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICc8IURPQ1RZUEUgaHRtbD4nXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdkb2N1bWVudF9iYXNlX3VybCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogZWRpdG9yLmRvY3VtZW50QmFzZVVybFxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYm9keV9pZCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiBib2R5T3B0aW9uUHJvY2Vzc29yKGVkaXRvciwgJ3RpbnltY2UnKSxcbiAgICAgICAgZGVmYXVsdDogJ3RpbnltY2UnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdib2R5X2NsYXNzJywge1xuICAgICAgICBwcm9jZXNzb3I6IGJvZHlPcHRpb25Qcm9jZXNzb3IoZWRpdG9yKSxcbiAgICAgICAgZGVmYXVsdDogJydcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2NvbnRlbnRfc2VjdXJpdHlfcG9saWN5Jywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYnJfaW5fcHJlJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignZm9yY2VkX3Jvb3RfYmxvY2snLCB7XG4gICAgICAgIHByb2Nlc3NvcjogdmFsdWUgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbGlkID0gaXNTdHJpbmcodmFsdWUpICYmIGlzTm90RW1wdHkodmFsdWUpO1xuICAgICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgIHZhbGlkXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdNdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy4nXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDogJ3AnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdmb3JjZWRfcm9vdF9ibG9ja19hdHRycycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnb2JqZWN0JyxcbiAgICAgICAgZGVmYXVsdDoge31cbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ25ld2xpbmVfYmVoYXZpb3InLCB7XG4gICAgICAgIHByb2Nlc3NvcjogdmFsdWUgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbGlkID0gY29udGFpbnMkMihbXG4gICAgICAgICAgICAnYmxvY2snLFxuICAgICAgICAgICAgJ2xpbmVicmVhaycsXG4gICAgICAgICAgICAnaW52ZXJ0JyxcbiAgICAgICAgICAgICdkZWZhdWx0J1xuICAgICAgICAgIF0sIHZhbHVlKTtcbiAgICAgICAgICByZXR1cm4gdmFsaWQgPyB7XG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHZhbGlkXG4gICAgICAgICAgfSA6IHtcbiAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdNdXN0IGJlIG9uZSBvZjogYmxvY2ssIGxpbmVicmVhaywgaW52ZXJ0IG9yIGRlZmF1bHQuJ1xuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6ICdkZWZhdWx0J1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYnJfbmV3bGluZV9zZWxlY3RvcicsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJy5tY2UtdG9jIGgyLGZpZ2NhcHRpb24sY2FwdGlvbidcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ25vX25ld2xpbmVfc2VsZWN0b3InLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICcnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdrZWVwX3N0eWxlcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2VuZF9jb250YWluZXJfb25fZW1wdHlfYmxvY2snLCB7XG4gICAgICAgIHByb2Nlc3NvcjogdmFsdWUgPT4ge1xuICAgICAgICAgIGlmIChpc0Jvb2xlYW4odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnTXVzdCBiZSBib29sZWFuIG9yIGEgc3RyaW5nJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6ICdibG9ja3F1b3RlJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignZm9udF9zaXplX3N0eWxlX3ZhbHVlcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJ3h4LXNtYWxsLHgtc21hbGwsc21hbGwsbWVkaXVtLGxhcmdlLHgtbGFyZ2UseHgtbGFyZ2UnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdmb250X3NpemVfbGVnYWN5X3ZhbHVlcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJ3h4LXNtYWxsLHNtYWxsLG1lZGl1bSxsYXJnZSx4LWxhcmdlLHh4LWxhcmdlLDMwMCUnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdmb250X3NpemVfY2xhc3NlcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJydcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2F1dG9tYXRpY191cGxvYWRzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaW1hZ2VzX3JldXNlX2ZpbGVuYW1lJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2ltYWdlc19yZXBsYWNlX2Jsb2JfdXJpcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2ljb25zJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaWNvbnNfdXJsJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaW1hZ2VzX3VwbG9hZF91cmwnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICcnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdpbWFnZXNfdXBsb2FkX2Jhc2VfcGF0aCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJydcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2ltYWdlc191cGxvYWRfY3JlZGVudGlhbHMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaW1hZ2VzX3VwbG9hZF9oYW5kbGVyJywgeyBwcm9jZXNzb3I6ICdmdW5jdGlvbicgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignbGFuZ3VhZ2UnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICdlbidcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2xhbmd1YWdlX3VybCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJydcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2VudGl0eV9lbmNvZGluZycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJ25hbWVkJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaW5kZW50Jywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaW5kZW50X2JlZm9yZScsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJ3AsaDEsaDIsaDMsaDQsaDUsaDYsYmxvY2txdW90ZSxkaXYsdGl0bGUsc3R5bGUscHJlLHNjcmlwdCx0ZCx0aCx1bCxvbCxsaSxkbCxkdCxkZCxhcmVhLHRhYmxlLHRoZWFkLCcgKyAndGZvb3QsdGJvZHksdHIsc2VjdGlvbixkZXRhaWxzLHN1bW1hcnksYXJ0aWNsZSxoZ3JvdXAsYXNpZGUsZmlndXJlLGZpZ2NhcHRpb24sb3B0aW9uLG9wdGdyb3VwLGRhdGFsaXN0J1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaW5kZW50X2FmdGVyJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAncCxoMSxoMixoMyxoNCxoNSxoNixibG9ja3F1b3RlLGRpdix0aXRsZSxzdHlsZSxwcmUsc2NyaXB0LHRkLHRoLHVsLG9sLGxpLGRsLGR0LGRkLGFyZWEsdGFibGUsdGhlYWQsJyArICd0Zm9vdCx0Ym9keSx0cixzZWN0aW9uLGRldGFpbHMsc3VtbWFyeSxhcnRpY2xlLGhncm91cCxhc2lkZSxmaWd1cmUsZmlnY2FwdGlvbixvcHRpb24sb3B0Z3JvdXAsZGF0YWxpc3QnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdpbmRlbnRfdXNlX21hcmdpbicsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdpbmRlbnRhdGlvbicsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJzQwcHgnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdjb250ZW50X2NzcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiB2YWx1ZSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsaWQgPSB2YWx1ZSA9PT0gZmFsc2UgfHwgaXNTdHJpbmcodmFsdWUpIHx8IGlzQXJyYXlPZih2YWx1ZSwgaXNTdHJpbmcpO1xuICAgICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBtYXAkMyh2YWx1ZS5zcGxpdCgnLCcpLCB0cmltJDMpLFxuICAgICAgICAgICAgICAgIHZhbGlkXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkkMSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2YWxpZFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogW10sXG4gICAgICAgICAgICAgICAgdmFsaWRcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdmFsaWRcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnTXVzdCBiZSBmYWxzZSwgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy4nXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDogaXNJbmxpbmUoZWRpdG9yKSA/IFtdIDogWydkZWZhdWx0J11cbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2NvbnRlbnRfc3R5bGUnLCB7IHByb2Nlc3NvcjogJ3N0cmluZycgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignY29udGVudF9jc3NfY29ycycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdmb250X2NzcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiB2YWx1ZSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsaWQgPSBpc1N0cmluZyh2YWx1ZSkgfHwgaXNBcnJheU9mKHZhbHVlLCBpc1N0cmluZyk7XG4gICAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGlzQXJyYXkkMSh2YWx1ZSkgPyB2YWx1ZSA6IG1hcCQzKHZhbHVlLnNwbGl0KCcsJyksIHRyaW0kMyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWx1ZTogbmV3VmFsdWUsXG4gICAgICAgICAgICAgIHZhbGlkXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdNdXN0IGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IFtdXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdpbmxpbmVfYm91bmRhcmllcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2lubGluZV9ib3VuZGFyaWVzX3NlbGVjdG9yJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnYVtocmVmXSxjb2RlLHNwYW4ubWNlLWFubm90YXRpb24nXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdvYmplY3RfcmVzaXppbmcnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogdmFsdWUgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbGlkID0gaXNCb29sZWFuKHZhbHVlKSB8fCBpc1N0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IGRldmljZURldGVjdGlvbiQxLmlzaVBob25lKCkgfHwgZGV2aWNlRGV0ZWN0aW9uJDEuaXNpUGFkKCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgICAgICAgdmFsaWRcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlID09PSB0cnVlID8gJ3RhYmxlLGltZyxmaWd1cmUuaW1hZ2UsZGl2LHZpZGVvLGlmcmFtZScgOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2YWxpZFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdNdXN0IGJlIGJvb2xlYW4gb3IgYSBzdHJpbmcnXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDogIWlzVG91Y2hcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3Jlc2l6ZV9pbWdfcHJvcG9ydGlvbmFsJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignZXZlbnRfcm9vdCcsIHsgcHJvY2Vzc29yOiAnb2JqZWN0JyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdzZXJ2aWNlX21lc3NhZ2UnLCB7IHByb2Nlc3NvcjogJ3N0cmluZycgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGhlbWUnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogdmFsdWUgPT4gdmFsdWUgPT09IGZhbHNlIHx8IGlzU3RyaW5nKHZhbHVlKSB8fCBpc0Z1bmN0aW9uKHZhbHVlKSxcbiAgICAgICAgZGVmYXVsdDogJ3NpbHZlcidcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3RoZW1lX3VybCcsIHsgcHJvY2Vzc29yOiAnc3RyaW5nJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdmb3JtYXRzJywgeyBwcm9jZXNzb3I6ICdvYmplY3QnIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2Zvcm1hdF9lbXB0eV9saW5lcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdmb3JtYXRfbm9uZWRpdGFibGVfc2VsZWN0b3InLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICcnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdwcmV2aWV3X3N0eWxlcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiB2YWx1ZSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsaWQgPSB2YWx1ZSA9PT0gZmFsc2UgfHwgaXNTdHJpbmcodmFsdWUpO1xuICAgICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlID09PSBmYWxzZSA/ICcnIDogdmFsdWUsXG4gICAgICAgICAgICAgIHZhbGlkXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdNdXN0IGJlIGZhbHNlIG9yIGEgc3RyaW5nJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6ICdmb250LWZhbWlseSBmb250LXNpemUgZm9udC13ZWlnaHQgZm9udC1zdHlsZSB0ZXh0LWRlY29yYXRpb24gdGV4dC10cmFuc2Zvcm0gY29sb3IgYmFja2dyb3VuZC1jb2xvciBib3JkZXIgYm9yZGVyLXJhZGl1cyBvdXRsaW5lIHRleHQtc2hhZG93J1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignY3VzdG9tX3VpX3NlbGVjdG9yJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaGlkZGVuX2lucHV0Jywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignc3VibWl0X3BhdGNoJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignZW5jb2RpbmcnLCB7IHByb2Nlc3NvcjogJ3N0cmluZycgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYWRkX2Zvcm1fc3VibWl0X3RyaWdnZXInLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdhZGRfdW5sb2FkX3RyaWdnZXInLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdjdXN0b21fdW5kb19yZWRvX2xldmVscycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnbnVtYmVyJyxcbiAgICAgICAgZGVmYXVsdDogMFxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignZGlzYWJsZV9ub2RlY2hhbmdlJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3JlYWRvbmx5Jywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2VkaXRhYmxlX3Jvb3QnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdwbHVnaW5zJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmdbXScsXG4gICAgICAgIGRlZmF1bHQ6IFtdXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdleHRlcm5hbF9wbHVnaW5zJywgeyBwcm9jZXNzb3I6ICdvYmplY3QnIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2ZvcmNlZF9wbHVnaW5zJywgeyBwcm9jZXNzb3I6ICdzdHJpbmdbXScgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignbW9kZWwnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6IGVkaXRvci5oYXNQbHVnaW4oJ3J0YycpID8gJ3BsdWdpbicgOiAnZG9tJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignbW9kZWxfdXJsJywgeyBwcm9jZXNzb3I6ICdzdHJpbmcnIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2Jsb2NrX3Vuc3VwcG9ydGVkX2Ryb3AnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd2aXN1YWwnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd2aXN1YWxfdGFibGVfY2xhc3MnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICdtY2UtaXRlbS10YWJsZSdcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3Zpc3VhbF9hbmNob3JfY2xhc3MnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICdtY2UtaXRlbS1hbmNob3InXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdpZnJhbWVfYXJpYV90ZXh0Jywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnUmljaCBUZXh0IEFyZWEuIFByZXNzIEFMVC0wIGZvciBoZWxwLidcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3NldHVwJywgeyBwcm9jZXNzb3I6ICdmdW5jdGlvbicgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaW5pdF9pbnN0YW5jZV9jYWxsYmFjaycsIHsgcHJvY2Vzc29yOiAnZnVuY3Rpb24nIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3VybF9jb252ZXJ0ZXInLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Z1bmN0aW9uJyxcbiAgICAgICAgZGVmYXVsdDogZWRpdG9yLmNvbnZlcnRVUkxcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3VybF9jb252ZXJ0ZXJfc2NvcGUnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ29iamVjdCcsXG4gICAgICAgIGRlZmF1bHQ6IGVkaXRvclxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndXJsY29udmVydGVyX2NhbGxiYWNrJywgeyBwcm9jZXNzb3I6ICdmdW5jdGlvbicgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYWxsb3dfY29uZGl0aW9uYWxfY29tbWVudHMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYWxsb3dfaHRtbF9kYXRhX3VybHMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYWxsb3dfc3ZnX2RhdGFfdXJscycsIHsgcHJvY2Vzc29yOiAnYm9vbGVhbicgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYWxsb3dfaHRtbF9pbl9uYW1lZF9hbmNob3InLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYWxsb3dfc2NyaXB0X3VybHMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYWxsb3dfdW5zYWZlX2xpbmtfdGFyZ2V0Jywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2NvbnZlcnRfZm9udHNfdG9fc3BhbnMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICBkZXByZWNhdGVkOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdmaXhfbGlzdF9lbGVtZW50cycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdwcmVzZXJ2ZV9jZGF0YScsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdyZW1vdmVfdHJhaWxpbmdfYnJzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigncGFkX2VtcHR5X3dpdGhfYnInLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaW5saW5lX3N0eWxlcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIGRlcHJlY2F0ZWQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2VsZW1lbnRfZm9ybWF0Jywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnaHRtbCdcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2VudGl0aWVzJywgeyBwcm9jZXNzb3I6ICdzdHJpbmcnIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3NjaGVtYScsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJ2h0bWw1J1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignY29udmVydF91cmxzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigncmVsYXRpdmVfdXJscycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3JlbW92ZV9zY3JpcHRfaG9zdCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2N1c3RvbV9lbGVtZW50cycsIHsgcHJvY2Vzc29yOiAnc3RyaW5nJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdleHRlbmRlZF92YWxpZF9lbGVtZW50cycsIHsgcHJvY2Vzc29yOiAnc3RyaW5nJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdpbnZhbGlkX2VsZW1lbnRzJywgeyBwcm9jZXNzb3I6ICdzdHJpbmcnIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2ludmFsaWRfc3R5bGVzJywgeyBwcm9jZXNzb3I6IHN0cmluZ09yT2JqZWN0UHJvY2Vzc29yIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3ZhbGlkX2NoaWxkcmVuJywgeyBwcm9jZXNzb3I6ICdzdHJpbmcnIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3ZhbGlkX2NsYXNzZXMnLCB7IHByb2Nlc3Nvcjogc3RyaW5nT3JPYmplY3RQcm9jZXNzb3IgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndmFsaWRfZWxlbWVudHMnLCB7IHByb2Nlc3NvcjogJ3N0cmluZycgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndmFsaWRfc3R5bGVzJywgeyBwcm9jZXNzb3I6IHN0cmluZ09yT2JqZWN0UHJvY2Vzc29yIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3ZlcmlmeV9odG1sJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYXV0b19mb2N1cycsIHsgcHJvY2Vzc29yOiB2YWx1ZSA9PiBpc1N0cmluZyh2YWx1ZSkgfHwgdmFsdWUgPT09IHRydWUgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYnJvd3Nlcl9zcGVsbGNoZWNrJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3Byb3RlY3QnLCB7IHByb2Nlc3NvcjogJ2FycmF5JyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdpbWFnZXNfZmlsZV90eXBlcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJ2pwZWcsanBnLGpwZSxqZmksamlmLGpmaWYscG5nLGdpZixibXAsd2VicCdcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2RlcHJlY2F0aW9uX3dhcm5pbmdzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYTExeV9hZHZhbmNlZF9vcHRpb25zJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2FwaV9rZXknLCB7IHByb2Nlc3NvcjogJ3N0cmluZycgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigncGFzdGVfYmxvY2tfZHJvcCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdwYXN0ZV9kYXRhX2ltYWdlcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3Bhc3RlX3ByZXByb2Nlc3MnLCB7IHByb2Nlc3NvcjogJ2Z1bmN0aW9uJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdwYXN0ZV9wb3N0cHJvY2VzcycsIHsgcHJvY2Vzc29yOiAnZnVuY3Rpb24nIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3Bhc3RlX3dlYmtpdF9zdHlsZXMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICdub25lJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigncGFzdGVfcmVtb3ZlX3N0eWxlc19pZl93ZWJraXQnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdwYXN0ZV9tZXJnZV9mb3JtYXRzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignc21hcnRfcGFzdGUnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdwYXN0ZV9hc190ZXh0Jywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3Bhc3RlX3RhYl9zcGFjZXMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ251bWJlcicsXG4gICAgICAgIGRlZmF1bHQ6IDRcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3RleHRfcGF0dGVybnMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogdmFsdWUgPT4ge1xuICAgICAgICAgIGlmIChpc0FycmF5T2YodmFsdWUsIGlzT2JqZWN0KSB8fCB2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5zID0gdmFsdWUgPT09IGZhbHNlID8gW10gOiB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBmcm9tUmF3UGF0dGVybnMocGF0dGVybnMpLFxuICAgICAgICAgICAgICB2YWxpZDogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnTXVzdCBiZSBhbiBhcnJheSBvZiBvYmplY3RzIG9yIGZhbHNlLidcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhcnQ6ICcqJyxcbiAgICAgICAgICAgIGVuZDogJyonLFxuICAgICAgICAgICAgZm9ybWF0OiAnaXRhbGljJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhcnQ6ICcqKicsXG4gICAgICAgICAgICBlbmQ6ICcqKicsXG4gICAgICAgICAgICBmb3JtYXQ6ICdib2xkJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhcnQ6ICcjJyxcbiAgICAgICAgICAgIGZvcm1hdDogJ2gxJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhcnQ6ICcjIycsXG4gICAgICAgICAgICBmb3JtYXQ6ICdoMidcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXJ0OiAnIyMjJyxcbiAgICAgICAgICAgIGZvcm1hdDogJ2gzJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhcnQ6ICcjIyMjJyxcbiAgICAgICAgICAgIGZvcm1hdDogJ2g0J1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhcnQ6ICcjIyMjIycsXG4gICAgICAgICAgICBmb3JtYXQ6ICdoNSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXJ0OiAnIyMjIyMjJyxcbiAgICAgICAgICAgIGZvcm1hdDogJ2g2J1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhcnQ6ICcxLiAnLFxuICAgICAgICAgICAgY21kOiAnSW5zZXJ0T3JkZXJlZExpc3QnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGFydDogJyogJyxcbiAgICAgICAgICAgIGNtZDogJ0luc2VydFVub3JkZXJlZExpc3QnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGFydDogJy0gJyxcbiAgICAgICAgICAgIGNtZDogJ0luc2VydFVub3JkZXJlZExpc3QnXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd0ZXh0X3BhdHRlcm5zX2xvb2t1cCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiB2YWx1ZSA9PiB7XG4gICAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWx1ZTogZnJvbVJhd1BhdHRlcm5zTG9va3VwKHZhbHVlKSxcbiAgICAgICAgICAgICAgdmFsaWQ6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ011c3QgYmUgYSBzaW5nbGUgZnVuY3Rpb24nXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDogX2N0eCA9PiBbXVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignbm9uZWRpdGFibGVfY2xhc3MnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICdtY2VOb25FZGl0YWJsZSdcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2VkaXRhYmxlX2NsYXNzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnbWNlRWRpdGFibGUnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdub25lZGl0YWJsZV9yZWdleHAnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogdmFsdWUgPT4ge1xuICAgICAgICAgIGlmIChpc0FycmF5T2YodmFsdWUsIGlzUmVnRXhwKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgIHZhbGlkOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWx1ZTogW3ZhbHVlXSxcbiAgICAgICAgICAgICAgdmFsaWQ6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ011c3QgYmUgYSBSZWdFeHAgb3IgYW4gYXJyYXkgb2YgUmVnRXhwLidcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiBbXVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGFibGVfdGFiX25hdmlnYXRpb24nLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdoaWdobGlnaHRfb25fZm9jdXMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigneHNzX3Nhbml0aXphdGlvbicsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2RldGFpbHNfaW5pdGlhbF9zdGF0ZScsIHtcbiAgICAgICAgcHJvY2Vzc29yOiB2YWx1ZSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsaWQgPSBjb250YWlucyQyKFtcbiAgICAgICAgICAgICdpbmhlcml0ZWQnLFxuICAgICAgICAgICAgJ2NvbGxhcHNlZCcsXG4gICAgICAgICAgICAnZXhwYW5kZWQnXG4gICAgICAgICAgXSwgdmFsdWUpO1xuICAgICAgICAgIHJldHVybiB2YWxpZCA/IHtcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdmFsaWRcbiAgICAgICAgICB9IDoge1xuICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogJ011c3QgYmUgb25lIG9mOiBpbmhlcml0ZWQsIGNvbGxhcHNlZCwgb3IgZXhwYW5kZWQuJ1xuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6ICdpbmhlcml0ZWQnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdkZXRhaWxzX3NlcmlhbGl6ZWRfc3RhdGUnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogdmFsdWUgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbGlkID0gY29udGFpbnMkMihbXG4gICAgICAgICAgICAnaW5oZXJpdGVkJyxcbiAgICAgICAgICAgICdjb2xsYXBzZWQnLFxuICAgICAgICAgICAgJ2V4cGFuZGVkJ1xuICAgICAgICAgIF0sIHZhbHVlKTtcbiAgICAgICAgICByZXR1cm4gdmFsaWQgPyB7XG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHZhbGlkXG4gICAgICAgICAgfSA6IHtcbiAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdNdXN0IGJlIG9uZSBvZjogaW5oZXJpdGVkLCBjb2xsYXBzZWQsIG9yIGV4cGFuZGVkLidcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiAnaW5oZXJpdGVkJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaW5pdF9jb250ZW50X3N5bmMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignbmV3ZG9jdW1lbnRfY29udGVudCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJydcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdTY3JpcHRzTG9hZGVkJywgKCkgPT4ge1xuICAgICAgICByZWdpc3Rlck9wdGlvbignZGlyZWN0aW9uYWxpdHknLCB7XG4gICAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgICBkZWZhdWx0OiBJMThuLmlzUnRsKCkgPyAncnRsJyA6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICAgICAgcmVnaXN0ZXJPcHRpb24oJ3BsYWNlaG9sZGVyJywge1xuICAgICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgICAgZGVmYXVsdDogRE9NJGEuZ2V0QXR0cmliKGVkaXRvci5nZXRFbGVtZW50KCksICdwbGFjZWhvbGRlcicpXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRJZnJhbWVBdHRycyA9IG9wdGlvbignaWZyYW1lX2F0dHJzJyk7XG4gICAgY29uc3QgZ2V0RG9jVHlwZSA9IG9wdGlvbignZG9jdHlwZScpO1xuICAgIGNvbnN0IGdldERvY3VtZW50QmFzZVVybCA9IG9wdGlvbignZG9jdW1lbnRfYmFzZV91cmwnKTtcbiAgICBjb25zdCBnZXRCb2R5SWQgPSBvcHRpb24oJ2JvZHlfaWQnKTtcbiAgICBjb25zdCBnZXRCb2R5Q2xhc3MgPSBvcHRpb24oJ2JvZHlfY2xhc3MnKTtcbiAgICBjb25zdCBnZXRDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBvcHRpb24oJ2NvbnRlbnRfc2VjdXJpdHlfcG9saWN5Jyk7XG4gICAgY29uc3Qgc2hvdWxkUHV0QnJJblByZSQxID0gb3B0aW9uKCdicl9pbl9wcmUnKTtcbiAgICBjb25zdCBnZXRGb3JjZWRSb290QmxvY2sgPSBvcHRpb24oJ2ZvcmNlZF9yb290X2Jsb2NrJyk7XG4gICAgY29uc3QgZ2V0Rm9yY2VkUm9vdEJsb2NrQXR0cnMgPSBvcHRpb24oJ2ZvcmNlZF9yb290X2Jsb2NrX2F0dHJzJyk7XG4gICAgY29uc3QgZ2V0TmV3bGluZUJlaGF2aW9yID0gb3B0aW9uKCduZXdsaW5lX2JlaGF2aW9yJyk7XG4gICAgY29uc3QgZ2V0QnJOZXdMaW5lU2VsZWN0b3IgPSBvcHRpb24oJ2JyX25ld2xpbmVfc2VsZWN0b3InKTtcbiAgICBjb25zdCBnZXROb05ld0xpbmVTZWxlY3RvciA9IG9wdGlvbignbm9fbmV3bGluZV9zZWxlY3RvcicpO1xuICAgIGNvbnN0IHNob3VsZEtlZXBTdHlsZXMgPSBvcHRpb24oJ2tlZXBfc3R5bGVzJyk7XG4gICAgY29uc3Qgc2hvdWxkRW5kQ29udGFpbmVyT25FbXB0eUJsb2NrID0gb3B0aW9uKCdlbmRfY29udGFpbmVyX29uX2VtcHR5X2Jsb2NrJyk7XG4gICAgY29uc3QgaXNBdXRvbWF0aWNVcGxvYWRzRW5hYmxlZCA9IG9wdGlvbignYXV0b21hdGljX3VwbG9hZHMnKTtcbiAgICBjb25zdCBzaG91bGRSZXVzZUZpbGVOYW1lID0gb3B0aW9uKCdpbWFnZXNfcmV1c2VfZmlsZW5hbWUnKTtcbiAgICBjb25zdCBzaG91bGRSZXBsYWNlQmxvYlVyaXMgPSBvcHRpb24oJ2ltYWdlc19yZXBsYWNlX2Jsb2JfdXJpcycpO1xuICAgIGNvbnN0IGdldEljb25QYWNrTmFtZSA9IG9wdGlvbignaWNvbnMnKTtcbiAgICBjb25zdCBnZXRJY29uc1VybCA9IG9wdGlvbignaWNvbnNfdXJsJyk7XG4gICAgY29uc3QgZ2V0SW1hZ2VVcGxvYWRVcmwgPSBvcHRpb24oJ2ltYWdlc191cGxvYWRfdXJsJyk7XG4gICAgY29uc3QgZ2V0SW1hZ2VVcGxvYWRCYXNlUGF0aCA9IG9wdGlvbignaW1hZ2VzX3VwbG9hZF9iYXNlX3BhdGgnKTtcbiAgICBjb25zdCBnZXRJbWFnZXNVcGxvYWRDcmVkZW50aWFscyA9IG9wdGlvbignaW1hZ2VzX3VwbG9hZF9jcmVkZW50aWFscycpO1xuICAgIGNvbnN0IGdldEltYWdlc1VwbG9hZEhhbmRsZXIgPSBvcHRpb24oJ2ltYWdlc191cGxvYWRfaGFuZGxlcicpO1xuICAgIGNvbnN0IHNob3VsZFVzZUNvbnRlbnRDc3NDb3JzID0gb3B0aW9uKCdjb250ZW50X2Nzc19jb3JzJyk7XG4gICAgY29uc3QgZ2V0UmVmZXJyZXJQb2xpY3kgPSBvcHRpb24oJ3JlZmVycmVyX3BvbGljeScpO1xuICAgIGNvbnN0IGdldExhbmd1YWdlQ29kZSA9IG9wdGlvbignbGFuZ3VhZ2UnKTtcbiAgICBjb25zdCBnZXRMYW5ndWFnZVVybCA9IG9wdGlvbignbGFuZ3VhZ2VfdXJsJyk7XG4gICAgY29uc3Qgc2hvdWxkSW5kZW50VXNlTWFyZ2luID0gb3B0aW9uKCdpbmRlbnRfdXNlX21hcmdpbicpO1xuICAgIGNvbnN0IGdldEluZGVudGF0aW9uID0gb3B0aW9uKCdpbmRlbnRhdGlvbicpO1xuICAgIGNvbnN0IGdldENvbnRlbnRDc3MgPSBvcHRpb24oJ2NvbnRlbnRfY3NzJyk7XG4gICAgY29uc3QgZ2V0Q29udGVudFN0eWxlID0gb3B0aW9uKCdjb250ZW50X3N0eWxlJyk7XG4gICAgY29uc3QgZ2V0Rm9udENzcyA9IG9wdGlvbignZm9udF9jc3MnKTtcbiAgICBjb25zdCBnZXREaXJlY3Rpb25hbGl0eSA9IG9wdGlvbignZGlyZWN0aW9uYWxpdHknKTtcbiAgICBjb25zdCBnZXRJbmxpbmVCb3VuZGFyeVNlbGVjdG9yID0gb3B0aW9uKCdpbmxpbmVfYm91bmRhcmllc19zZWxlY3RvcicpO1xuICAgIGNvbnN0IGdldE9iamVjdFJlc2l6aW5nID0gb3B0aW9uKCdvYmplY3RfcmVzaXppbmcnKTtcbiAgICBjb25zdCBnZXRSZXNpemVJbWdQcm9wb3J0aW9uYWwgPSBvcHRpb24oJ3Jlc2l6ZV9pbWdfcHJvcG9ydGlvbmFsJyk7XG4gICAgY29uc3QgZ2V0UGxhY2Vob2xkZXIgPSBvcHRpb24oJ3BsYWNlaG9sZGVyJyk7XG4gICAgY29uc3QgZ2V0RXZlbnRSb290ID0gb3B0aW9uKCdldmVudF9yb290Jyk7XG4gICAgY29uc3QgZ2V0U2VydmljZU1lc3NhZ2UgPSBvcHRpb24oJ3NlcnZpY2VfbWVzc2FnZScpO1xuICAgIGNvbnN0IGdldFRoZW1lID0gb3B0aW9uKCd0aGVtZScpO1xuICAgIGNvbnN0IGdldFRoZW1lVXJsID0gb3B0aW9uKCd0aGVtZV91cmwnKTtcbiAgICBjb25zdCBnZXRNb2RlbCA9IG9wdGlvbignbW9kZWwnKTtcbiAgICBjb25zdCBnZXRNb2RlbFVybCA9IG9wdGlvbignbW9kZWxfdXJsJyk7XG4gICAgY29uc3QgaXNJbmxpbmVCb3VuZGFyaWVzRW5hYmxlZCA9IG9wdGlvbignaW5saW5lX2JvdW5kYXJpZXMnKTtcbiAgICBjb25zdCBnZXRGb3JtYXRzID0gb3B0aW9uKCdmb3JtYXRzJyk7XG4gICAgY29uc3QgZ2V0UHJldmlld1N0eWxlcyA9IG9wdGlvbigncHJldmlld19zdHlsZXMnKTtcbiAgICBjb25zdCBjYW5Gb3JtYXRFbXB0eUxpbmVzID0gb3B0aW9uKCdmb3JtYXRfZW1wdHlfbGluZXMnKTtcbiAgICBjb25zdCBnZXRGb3JtYXROb25lZGl0YWJsZVNlbGVjdG9yID0gb3B0aW9uKCdmb3JtYXRfbm9uZWRpdGFibGVfc2VsZWN0b3InKTtcbiAgICBjb25zdCBnZXRDdXN0b21VaVNlbGVjdG9yID0gb3B0aW9uKCdjdXN0b21fdWlfc2VsZWN0b3InKTtcbiAgICBjb25zdCBpc0lubGluZSA9IG9wdGlvbignaW5saW5lJyk7XG4gICAgY29uc3QgaGFzSGlkZGVuSW5wdXQgPSBvcHRpb24oJ2hpZGRlbl9pbnB1dCcpO1xuICAgIGNvbnN0IHNob3VsZFBhdGNoU3VibWl0ID0gb3B0aW9uKCdzdWJtaXRfcGF0Y2gnKTtcbiAgICBjb25zdCBzaG91bGRBZGRGb3JtU3VibWl0VHJpZ2dlciA9IG9wdGlvbignYWRkX2Zvcm1fc3VibWl0X3RyaWdnZXInKTtcbiAgICBjb25zdCBzaG91bGRBZGRVbmxvYWRUcmlnZ2VyID0gb3B0aW9uKCdhZGRfdW5sb2FkX3RyaWdnZXInKTtcbiAgICBjb25zdCBnZXRDdXN0b21VbmRvUmVkb0xldmVscyA9IG9wdGlvbignY3VzdG9tX3VuZG9fcmVkb19sZXZlbHMnKTtcbiAgICBjb25zdCBzaG91bGREaXNhYmxlTm9kZUNoYW5nZSA9IG9wdGlvbignZGlzYWJsZV9ub2RlY2hhbmdlJyk7XG4gICAgY29uc3QgaXNSZWFkT25seSQxID0gb3B0aW9uKCdyZWFkb25seScpO1xuICAgIGNvbnN0IGhhc0VkaXRhYmxlUm9vdCQxID0gb3B0aW9uKCdlZGl0YWJsZV9yb290Jyk7XG4gICAgY29uc3QgaGFzQ29udGVudENzc0NvcnMgPSBvcHRpb24oJ2NvbnRlbnRfY3NzX2NvcnMnKTtcbiAgICBjb25zdCBnZXRQbHVnaW5zID0gb3B0aW9uKCdwbHVnaW5zJyk7XG4gICAgY29uc3QgZ2V0RXh0ZXJuYWxQbHVnaW5zJDEgPSBvcHRpb24oJ2V4dGVybmFsX3BsdWdpbnMnKTtcbiAgICBjb25zdCBzaG91bGRCbG9ja1Vuc3VwcG9ydGVkRHJvcCA9IG9wdGlvbignYmxvY2tfdW5zdXBwb3J0ZWRfZHJvcCcpO1xuICAgIGNvbnN0IGlzVmlzdWFsQWlkc0VuYWJsZWQgPSBvcHRpb24oJ3Zpc3VhbCcpO1xuICAgIGNvbnN0IGdldFZpc3VhbEFpZHNUYWJsZUNsYXNzID0gb3B0aW9uKCd2aXN1YWxfdGFibGVfY2xhc3MnKTtcbiAgICBjb25zdCBnZXRWaXN1YWxBaWRzQW5jaG9yQ2xhc3MgPSBvcHRpb24oJ3Zpc3VhbF9hbmNob3JfY2xhc3MnKTtcbiAgICBjb25zdCBnZXRJZnJhbWVBcmlhVGV4dCA9IG9wdGlvbignaWZyYW1lX2FyaWFfdGV4dCcpO1xuICAgIGNvbnN0IGdldFNldHVwQ2FsbGJhY2sgPSBvcHRpb24oJ3NldHVwJyk7XG4gICAgY29uc3QgZ2V0SW5pdEluc3RhbmNlQ2FsbGJhY2sgPSBvcHRpb24oJ2luaXRfaW5zdGFuY2VfY2FsbGJhY2snKTtcbiAgICBjb25zdCBnZXRVcmxDb252ZXJ0ZXJDYWxsYmFjayA9IG9wdGlvbigndXJsY29udmVydGVyX2NhbGxiYWNrJyk7XG4gICAgY29uc3QgZ2V0QXV0b0ZvY3VzID0gb3B0aW9uKCdhdXRvX2ZvY3VzJyk7XG4gICAgY29uc3Qgc2hvdWxkQnJvd3NlclNwZWxsY2hlY2sgPSBvcHRpb24oJ2Jyb3dzZXJfc3BlbGxjaGVjaycpO1xuICAgIGNvbnN0IGdldFByb3RlY3QgPSBvcHRpb24oJ3Byb3RlY3QnKTtcbiAgICBjb25zdCBzaG91bGRQYXN0ZUJsb2NrRHJvcCA9IG9wdGlvbigncGFzdGVfYmxvY2tfZHJvcCcpO1xuICAgIGNvbnN0IHNob3VsZFBhc3RlRGF0YUltYWdlcyA9IG9wdGlvbigncGFzdGVfZGF0YV9pbWFnZXMnKTtcbiAgICBjb25zdCBnZXRQYXN0ZVByZVByb2Nlc3MgPSBvcHRpb24oJ3Bhc3RlX3ByZXByb2Nlc3MnKTtcbiAgICBjb25zdCBnZXRQYXN0ZVBvc3RQcm9jZXNzID0gb3B0aW9uKCdwYXN0ZV9wb3N0cHJvY2VzcycpO1xuICAgIGNvbnN0IGdldE5ld0RvY3VtZW50Q29udGVudCA9IG9wdGlvbignbmV3ZG9jdW1lbnRfY29udGVudCcpO1xuICAgIGNvbnN0IGdldFBhc3RlV2Via2l0U3R5bGVzID0gb3B0aW9uKCdwYXN0ZV93ZWJraXRfc3R5bGVzJyk7XG4gICAgY29uc3Qgc2hvdWxkUGFzdGVSZW1vdmVXZWJLaXRTdHlsZXMgPSBvcHRpb24oJ3Bhc3RlX3JlbW92ZV9zdHlsZXNfaWZfd2Via2l0Jyk7XG4gICAgY29uc3Qgc2hvdWxkUGFzdGVNZXJnZUZvcm1hdHMgPSBvcHRpb24oJ3Bhc3RlX21lcmdlX2Zvcm1hdHMnKTtcbiAgICBjb25zdCBpc1NtYXJ0UGFzdGVFbmFibGVkID0gb3B0aW9uKCdzbWFydF9wYXN0ZScpO1xuICAgIGNvbnN0IGlzUGFzdGVBc1RleHRFbmFibGVkID0gb3B0aW9uKCdwYXN0ZV9hc190ZXh0Jyk7XG4gICAgY29uc3QgZ2V0UGFzdGVUYWJTcGFjZXMgPSBvcHRpb24oJ3Bhc3RlX3RhYl9zcGFjZXMnKTtcbiAgICBjb25zdCBzaG91bGRBbGxvd0h0bWxEYXRhVXJscyA9IG9wdGlvbignYWxsb3dfaHRtbF9kYXRhX3VybHMnKTtcbiAgICBjb25zdCBnZXRUZXh0UGF0dGVybnMgPSBvcHRpb24oJ3RleHRfcGF0dGVybnMnKTtcbiAgICBjb25zdCBnZXRUZXh0UGF0dGVybnNMb29rdXAgPSBvcHRpb24oJ3RleHRfcGF0dGVybnNfbG9va3VwJyk7XG4gICAgY29uc3QgZ2V0Tm9uRWRpdGFibGVDbGFzcyA9IG9wdGlvbignbm9uZWRpdGFibGVfY2xhc3MnKTtcbiAgICBjb25zdCBnZXRFZGl0YWJsZUNsYXNzID0gb3B0aW9uKCdlZGl0YWJsZV9jbGFzcycpO1xuICAgIGNvbnN0IGdldE5vbkVkaXRhYmxlUmVnRXhwcyA9IG9wdGlvbignbm9uZWRpdGFibGVfcmVnZXhwJyk7XG4gICAgY29uc3Qgc2hvdWxkUHJlc2VydmVDRGF0YSA9IG9wdGlvbigncHJlc2VydmVfY2RhdGEnKTtcbiAgICBjb25zdCBzaG91bGRIaWdobGlnaHRPbkZvY3VzID0gb3B0aW9uKCdoaWdobGlnaHRfb25fZm9jdXMnKTtcbiAgICBjb25zdCBzaG91bGRTYW5pdGl6ZVhzcyA9IG9wdGlvbigneHNzX3Nhbml0aXphdGlvbicpO1xuICAgIGNvbnN0IHNob3VsZFVzZURvY3VtZW50V3JpdGUgPSBvcHRpb24oJ2luaXRfY29udGVudF9zeW5jJyk7XG4gICAgY29uc3QgaGFzVGV4dFBhdHRlcm5zTG9va3VwID0gZWRpdG9yID0+IGVkaXRvci5vcHRpb25zLmlzU2V0KCd0ZXh0X3BhdHRlcm5zX2xvb2t1cCcpO1xuICAgIGNvbnN0IGdldEZvbnRTdHlsZVZhbHVlcyA9IGVkaXRvciA9PiBUb29scy5leHBsb2RlKGVkaXRvci5vcHRpb25zLmdldCgnZm9udF9zaXplX3N0eWxlX3ZhbHVlcycpKTtcbiAgICBjb25zdCBnZXRGb250U2l6ZUNsYXNzZXMgPSBlZGl0b3IgPT4gVG9vbHMuZXhwbG9kZShlZGl0b3Iub3B0aW9ucy5nZXQoJ2ZvbnRfc2l6ZV9jbGFzc2VzJykpO1xuICAgIGNvbnN0IGlzRW5jb2RpbmdYbWwgPSBlZGl0b3IgPT4gZWRpdG9yLm9wdGlvbnMuZ2V0KCdlbmNvZGluZycpID09PSAneG1sJztcbiAgICBjb25zdCBnZXRBbGxvd2VkSW1hZ2VGaWxlVHlwZXMgPSBlZGl0b3IgPT4gVG9vbHMuZXhwbG9kZShlZGl0b3Iub3B0aW9ucy5nZXQoJ2ltYWdlc19maWxlX3R5cGVzJykpO1xuICAgIGNvbnN0IGhhc1RhYmxlVGFiTmF2aWdhdGlvbiA9IG9wdGlvbigndGFibGVfdGFiX25hdmlnYXRpb24nKTtcbiAgICBjb25zdCBnZXREZXRhaWxzSW5pdGlhbFN0YXRlID0gb3B0aW9uKCdkZXRhaWxzX2luaXRpYWxfc3RhdGUnKTtcbiAgICBjb25zdCBnZXREZXRhaWxzU2VyaWFsaXplZFN0YXRlID0gb3B0aW9uKCdkZXRhaWxzX3NlcmlhbGl6ZWRfc3RhdGUnKTtcblxuICAgIGNvbnN0IGlzRWxlbWVudCQzID0gaXNFbGVtZW50JDY7XG4gICAgY29uc3QgaXNUZXh0JDUgPSBpc1RleHQkYTtcbiAgICBjb25zdCByZW1vdmVOb2RlJDEgPSBub2RlID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICBwYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdHJpbUNvdW50ID0gdGV4dCA9PiB7XG4gICAgICBjb25zdCB0cmltbWVkVGV4dCA9IHRyaW0kMSh0ZXh0KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvdW50OiB0ZXh0Lmxlbmd0aCAtIHRyaW1tZWRUZXh0Lmxlbmd0aCxcbiAgICAgICAgdGV4dDogdHJpbW1lZFRleHRcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBkZWxldGVad3NwQ2hhcnMgPSBjYXJldENvbnRhaW5lciA9PiB7XG4gICAgICBsZXQgaWR4O1xuICAgICAgd2hpbGUgKChpZHggPSBjYXJldENvbnRhaW5lci5kYXRhLmxhc3RJbmRleE9mKFpXU1AkMSkpICE9PSAtMSkge1xuICAgICAgICBjYXJldENvbnRhaW5lci5kZWxldGVEYXRhKGlkeCwgMSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVVbmNoYW5nZWQgPSAoY2FyZXRDb250YWluZXIsIHBvcykgPT4ge1xuICAgICAgcmVtb3ZlJDMoY2FyZXRDb250YWluZXIpO1xuICAgICAgcmV0dXJuIHBvcztcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZVRleHRBbmRSZXBvc2l0aW9uID0gKGNhcmV0Q29udGFpbmVyLCBwb3MpID0+IHtcbiAgICAgIGNvbnN0IGJlZm9yZSA9IHRyaW1Db3VudChjYXJldENvbnRhaW5lci5kYXRhLnN1YnN0cigwLCBwb3Mub2Zmc2V0KCkpKTtcbiAgICAgIGNvbnN0IGFmdGVyID0gdHJpbUNvdW50KGNhcmV0Q29udGFpbmVyLmRhdGEuc3Vic3RyKHBvcy5vZmZzZXQoKSkpO1xuICAgICAgY29uc3QgdGV4dCA9IGJlZm9yZS50ZXh0ICsgYWZ0ZXIudGV4dDtcbiAgICAgIGlmICh0ZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgZGVsZXRlWndzcENoYXJzKGNhcmV0Q29udGFpbmVyKTtcbiAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24oY2FyZXRDb250YWluZXIsIHBvcy5vZmZzZXQoKSAtIGJlZm9yZS5jb3VudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcG9zO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlRWxlbWVudEFuZFJlcG9zaXRpb24gPSAoY2FyZXRDb250YWluZXIsIHBvcykgPT4ge1xuICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHBvcy5jb250YWluZXIoKTtcbiAgICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0gaW5kZXhPZiQxKGZyb20ocGFyZW50Tm9kZS5jaGlsZE5vZGVzKSwgY2FyZXRDb250YWluZXIpLm1hcChpbmRleCA9PiB7XG4gICAgICAgIHJldHVybiBpbmRleCA8IHBvcy5vZmZzZXQoKSA/IENhcmV0UG9zaXRpb24ocGFyZW50Tm9kZSwgcG9zLm9mZnNldCgpIC0gMSkgOiBwb3M7XG4gICAgICB9KS5nZXRPcihwb3MpO1xuICAgICAgcmVtb3ZlJDMoY2FyZXRDb250YWluZXIpO1xuICAgICAgcmV0dXJuIG5ld1Bvc2l0aW9uO1xuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlVGV4dENhcmV0Q29udGFpbmVyID0gKGNhcmV0Q29udGFpbmVyLCBwb3MpID0+IGlzVGV4dCQ1KGNhcmV0Q29udGFpbmVyKSAmJiBwb3MuY29udGFpbmVyKCkgPT09IGNhcmV0Q29udGFpbmVyID8gcmVtb3ZlVGV4dEFuZFJlcG9zaXRpb24oY2FyZXRDb250YWluZXIsIHBvcykgOiByZW1vdmVVbmNoYW5nZWQoY2FyZXRDb250YWluZXIsIHBvcyk7XG4gICAgY29uc3QgcmVtb3ZlRWxlbWVudENhcmV0Q29udGFpbmVyID0gKGNhcmV0Q29udGFpbmVyLCBwb3MpID0+IHBvcy5jb250YWluZXIoKSA9PT0gY2FyZXRDb250YWluZXIucGFyZW50Tm9kZSA/IHJlbW92ZUVsZW1lbnRBbmRSZXBvc2l0aW9uKGNhcmV0Q29udGFpbmVyLCBwb3MpIDogcmVtb3ZlVW5jaGFuZ2VkKGNhcmV0Q29udGFpbmVyLCBwb3MpO1xuICAgIGNvbnN0IHJlbW92ZUFuZFJlcG9zaXRpb24gPSAoY29udGFpbmVyLCBwb3MpID0+IENhcmV0UG9zaXRpb24uaXNUZXh0UG9zaXRpb24ocG9zKSA/IHJlbW92ZVRleHRDYXJldENvbnRhaW5lcihjb250YWluZXIsIHBvcykgOiByZW1vdmVFbGVtZW50Q2FyZXRDb250YWluZXIoY29udGFpbmVyLCBwb3MpO1xuICAgIGNvbnN0IHJlbW92ZSQzID0gY2FyZXRDb250YWluZXJOb2RlID0+IHtcbiAgICAgIGlmIChpc0VsZW1lbnQkMyhjYXJldENvbnRhaW5lck5vZGUpICYmIGlzQ2FyZXRDb250YWluZXIkMihjYXJldENvbnRhaW5lck5vZGUpKSB7XG4gICAgICAgIGlmIChoYXNDb250ZW50KGNhcmV0Q29udGFpbmVyTm9kZSkpIHtcbiAgICAgICAgICBjYXJldENvbnRhaW5lck5vZGUucmVtb3ZlQXR0cmlidXRlKCdkYXRhLW1jZS1jYXJldCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbW92ZU5vZGUkMShjYXJldENvbnRhaW5lck5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNUZXh0JDUoY2FyZXRDb250YWluZXJOb2RlKSkge1xuICAgICAgICBkZWxldGVad3NwQ2hhcnMoY2FyZXRDb250YWluZXJOb2RlKTtcbiAgICAgICAgaWYgKGNhcmV0Q29udGFpbmVyTm9kZS5kYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJlbW92ZU5vZGUkMShjYXJldENvbnRhaW5lck5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGlzQ29udGVudEVkaXRhYmxlRmFsc2UkOCA9IGlzQ29udGVudEVkaXRhYmxlRmFsc2UkYjtcbiAgICBjb25zdCBpc01lZGlhJDEgPSBpc01lZGlhJDI7XG4gICAgY29uc3QgaXNUYWJsZUNlbGwkMSA9IGlzVGFibGVDZWxsJDM7XG4gICAgY29uc3QgaW5saW5lRmFrZUNhcmV0U2VsZWN0b3IgPSAnKltjb250ZW50RWRpdGFibGU9ZmFsc2VdLHZpZGVvLGF1ZGlvLGVtYmVkLG9iamVjdCc7XG4gICAgY29uc3QgZ2V0QWJzb2x1dGVDbGllbnRSZWN0ID0gKHJvb3QsIGVsZW1lbnQsIGJlZm9yZSkgPT4ge1xuICAgICAgY29uc3QgY2xpZW50UmVjdCA9IGNvbGxhcHNlKGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGJlZm9yZSk7XG4gICAgICBsZXQgc2Nyb2xsWDtcbiAgICAgIGxldCBzY3JvbGxZO1xuICAgICAgaWYgKHJvb3QudGFnTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgICAgIGNvbnN0IGRvY0VsbSA9IHJvb3Qub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIHNjcm9sbFggPSByb290LnNjcm9sbExlZnQgfHwgZG9jRWxtLnNjcm9sbExlZnQ7XG4gICAgICAgIHNjcm9sbFkgPSByb290LnNjcm9sbFRvcCB8fCBkb2NFbG0uc2Nyb2xsVG9wO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgcm9vdFJlY3QgPSByb290LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBzY3JvbGxYID0gcm9vdC5zY3JvbGxMZWZ0IC0gcm9vdFJlY3QubGVmdDtcbiAgICAgICAgc2Nyb2xsWSA9IHJvb3Quc2Nyb2xsVG9wIC0gcm9vdFJlY3QudG9wO1xuICAgICAgfVxuICAgICAgY2xpZW50UmVjdC5sZWZ0ICs9IHNjcm9sbFg7XG4gICAgICBjbGllbnRSZWN0LnJpZ2h0ICs9IHNjcm9sbFg7XG4gICAgICBjbGllbnRSZWN0LnRvcCArPSBzY3JvbGxZO1xuICAgICAgY2xpZW50UmVjdC5ib3R0b20gKz0gc2Nyb2xsWTtcbiAgICAgIGNsaWVudFJlY3Qud2lkdGggPSAxO1xuICAgICAgbGV0IG1hcmdpbiA9IGVsZW1lbnQub2Zmc2V0V2lkdGggLSBlbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgaWYgKG1hcmdpbiA+IDApIHtcbiAgICAgICAgaWYgKGJlZm9yZSkge1xuICAgICAgICAgIG1hcmdpbiAqPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBjbGllbnRSZWN0LmxlZnQgKz0gbWFyZ2luO1xuICAgICAgICBjbGllbnRSZWN0LnJpZ2h0ICs9IG1hcmdpbjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGllbnRSZWN0O1xuICAgIH07XG4gICAgY29uc3QgdHJpbUlubGluZUNhcmV0Q29udGFpbmVycyA9IHJvb3QgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGNvbnN0IGZha2VDYXJldFRhcmdldE5vZGVzID0gZGVzY2VuZGFudHMoU3VnYXJFbGVtZW50LmZyb21Eb20ocm9vdCksIGlubGluZUZha2VDYXJldFNlbGVjdG9yKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmFrZUNhcmV0VGFyZ2V0Tm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGZha2VDYXJldFRhcmdldE5vZGVzW2ldLmRvbTtcbiAgICAgICAgbGV0IHNpYmxpbmcgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgICAgICAgaWYgKGVuZHNXaXRoQ2FyZXRDb250YWluZXIkMShzaWJsaW5nKSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBzaWJsaW5nLmRhdGE7XG4gICAgICAgICAgaWYgKGRhdGEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAoX2EgPSBzaWJsaW5nLnBhcmVudE5vZGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZW1vdmVDaGlsZChzaWJsaW5nKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2libGluZy5kZWxldGVEYXRhKGRhdGEubGVuZ3RoIC0gMSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNpYmxpbmcgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgICBpZiAoc3RhcnRzV2l0aENhcmV0Q29udGFpbmVyJDEoc2libGluZykpIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gc2libGluZy5kYXRhO1xuICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgKF9iID0gc2libGluZy5wYXJlbnROb2RlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmVtb3ZlQ2hpbGQoc2libGluZyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNpYmxpbmcuZGVsZXRlRGF0YSgwLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IEZha2VDYXJldCA9IChlZGl0b3IsIHJvb3QsIGlzQmxvY2ssIGhhc0ZvY3VzKSA9PiB7XG4gICAgICBjb25zdCBsYXN0VmlzdWFsQ2FyZXQgPSB2YWx1ZSQyKCk7XG4gICAgICBsZXQgY3Vyc29ySW50ZXJ2YWw7XG4gICAgICBsZXQgY2FyZXRDb250YWluZXJOb2RlO1xuICAgICAgY29uc3QgY2FyZXRCbG9jayA9IGdldEZvcmNlZFJvb3RCbG9jayhlZGl0b3IpO1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IHNob3cgPSAoYmVmb3JlLCBlbGVtZW50KSA9PiB7XG4gICAgICAgIGxldCBybmc7XG4gICAgICAgIGhpZGUoKTtcbiAgICAgICAgaWYgKGlzVGFibGVDZWxsJDEoZWxlbWVudCkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNCbG9jayhlbGVtZW50KSkge1xuICAgICAgICAgIGNvbnN0IGNhcmV0Q29udGFpbmVyID0gaW5zZXJ0QmxvY2soY2FyZXRCbG9jaywgZWxlbWVudCwgYmVmb3JlKTtcbiAgICAgICAgICBjb25zdCBjbGllbnRSZWN0ID0gZ2V0QWJzb2x1dGVDbGllbnRSZWN0KHJvb3QsIGVsZW1lbnQsIGJlZm9yZSk7XG4gICAgICAgICAgZG9tLnNldFN0eWxlKGNhcmV0Q29udGFpbmVyLCAndG9wJywgY2xpZW50UmVjdC50b3ApO1xuICAgICAgICAgIGNhcmV0Q29udGFpbmVyTm9kZSA9IGNhcmV0Q29udGFpbmVyO1xuICAgICAgICAgIGNvbnN0IGNhcmV0ID0gZG9tLmNyZWF0ZSgnZGl2Jywge1xuICAgICAgICAgICAgJ2NsYXNzJzogJ21jZS12aXN1YWwtY2FyZXQnLFxuICAgICAgICAgICAgJ2RhdGEtbWNlLWJvZ3VzJzogJ2FsbCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBkb20uc2V0U3R5bGVzKGNhcmV0LCB7IC4uLmNsaWVudFJlY3QgfSk7XG4gICAgICAgICAgZG9tLmFkZChyb290LCBjYXJldCk7XG4gICAgICAgICAgbGFzdFZpc3VhbENhcmV0LnNldCh7XG4gICAgICAgICAgICBjYXJldCxcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBiZWZvcmVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoYmVmb3JlKSB7XG4gICAgICAgICAgICBkb20uYWRkQ2xhc3MoY2FyZXQsICdtY2UtdmlzdWFsLWNhcmV0LWJlZm9yZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGFydEJsaW5rKCk7XG4gICAgICAgICAgcm5nID0gZWxlbWVudC5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgICAgcm5nLnNldFN0YXJ0KGNhcmV0Q29udGFpbmVyLCAwKTtcbiAgICAgICAgICBybmcuc2V0RW5kKGNhcmV0Q29udGFpbmVyLCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYXJldENvbnRhaW5lck5vZGUgPSBpbnNlcnRJbmxpbmUkMShlbGVtZW50LCBiZWZvcmUpO1xuICAgICAgICAgIHJuZyA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICAgIGlmIChpc0lubGluZUZha2VDYXJldFRhcmdldChjYXJldENvbnRhaW5lck5vZGUubmV4dFNpYmxpbmcpKSB7XG4gICAgICAgICAgICBybmcuc2V0U3RhcnQoY2FyZXRDb250YWluZXJOb2RlLCAwKTtcbiAgICAgICAgICAgIHJuZy5zZXRFbmQoY2FyZXRDb250YWluZXJOb2RlLCAwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm5nLnNldFN0YXJ0KGNhcmV0Q29udGFpbmVyTm9kZSwgMSk7XG4gICAgICAgICAgICBybmcuc2V0RW5kKGNhcmV0Q29udGFpbmVyTm9kZSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBybmc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJuZztcbiAgICAgIH07XG4gICAgICBjb25zdCBoaWRlID0gKCkgPT4ge1xuICAgICAgICB0cmltSW5saW5lQ2FyZXRDb250YWluZXJzKHJvb3QpO1xuICAgICAgICBpZiAoY2FyZXRDb250YWluZXJOb2RlKSB7XG4gICAgICAgICAgcmVtb3ZlJDMoY2FyZXRDb250YWluZXJOb2RlKTtcbiAgICAgICAgICBjYXJldENvbnRhaW5lck5vZGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RWaXN1YWxDYXJldC5vbihjYXJldFN0YXRlID0+IHtcbiAgICAgICAgICBkb20ucmVtb3ZlKGNhcmV0U3RhdGUuY2FyZXQpO1xuICAgICAgICAgIGxhc3RWaXN1YWxDYXJldC5jbGVhcigpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGN1cnNvckludGVydmFsKSB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChjdXJzb3JJbnRlcnZhbCk7XG4gICAgICAgICAgY3Vyc29ySW50ZXJ2YWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBzdGFydEJsaW5rID0gKCkgPT4ge1xuICAgICAgICBjdXJzb3JJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICBsYXN0VmlzdWFsQ2FyZXQub24oY2FyZXRTdGF0ZSA9PiB7XG4gICAgICAgICAgICBpZiAoaGFzRm9jdXMoKSkge1xuICAgICAgICAgICAgICBkb20udG9nZ2xlQ2xhc3MoY2FyZXRTdGF0ZS5jYXJldCwgJ21jZS12aXN1YWwtY2FyZXQtaGlkZGVuJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkb20uYWRkQ2xhc3MoY2FyZXRTdGF0ZS5jYXJldCwgJ21jZS12aXN1YWwtY2FyZXQtaGlkZGVuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVwb3NpdGlvbiA9ICgpID0+IHtcbiAgICAgICAgbGFzdFZpc3VhbENhcmV0Lm9uKGNhcmV0U3RhdGUgPT4ge1xuICAgICAgICAgIGNvbnN0IGNsaWVudFJlY3QgPSBnZXRBYnNvbHV0ZUNsaWVudFJlY3Qocm9vdCwgY2FyZXRTdGF0ZS5lbGVtZW50LCBjYXJldFN0YXRlLmJlZm9yZSk7XG4gICAgICAgICAgZG9tLnNldFN0eWxlcyhjYXJldFN0YXRlLmNhcmV0LCB7IC4uLmNsaWVudFJlY3QgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiBjbGVhckludGVydmFsKGN1cnNvckludGVydmFsKTtcbiAgICAgIGNvbnN0IGdldENzcyA9ICgpID0+ICcubWNlLXZpc3VhbC1jYXJldCB7JyArICdwb3NpdGlvbjogYWJzb2x1dGU7JyArICdiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsnICsgJ2JhY2tncm91bmQtY29sb3I6IGN1cnJlbnRjb2xvcjsnICsgJ30nICsgJy5tY2UtdmlzdWFsLWNhcmV0LWhpZGRlbiB7JyArICdkaXNwbGF5OiBub25lOycgKyAnfScgKyAnKltkYXRhLW1jZS1jYXJldF0geycgKyAncG9zaXRpb246IGFic29sdXRlOycgKyAnbGVmdDogLTEwMDBweDsnICsgJ3JpZ2h0OiBhdXRvOycgKyAndG9wOiAwOycgKyAnbWFyZ2luOiAwOycgKyAncGFkZGluZzogMDsnICsgJ30nO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2hvdyxcbiAgICAgICAgaGlkZSxcbiAgICAgICAgZ2V0Q3NzLFxuICAgICAgICByZXBvc2l0aW9uLFxuICAgICAgICBkZXN0cm95XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgaXNGYWtlQ2FyZXRUYWJsZUJyb3dzZXIgPSAoKSA9PiBFbnYuYnJvd3Nlci5pc0ZpcmVmb3goKTtcbiAgICBjb25zdCBpc0lubGluZUZha2VDYXJldFRhcmdldCA9IG5vZGUgPT4gaXNDb250ZW50RWRpdGFibGVGYWxzZSQ4KG5vZGUpIHx8IGlzTWVkaWEkMShub2RlKTtcbiAgICBjb25zdCBpc0Zha2VDYXJldFRhcmdldCA9IG5vZGUgPT4ge1xuICAgICAgY29uc3QgaXNUYXJnZXQgPSBpc0lubGluZUZha2VDYXJldFRhcmdldChub2RlKSB8fCBpc1RhYmxlJDIobm9kZSkgJiYgaXNGYWtlQ2FyZXRUYWJsZUJyb3dzZXIoKTtcbiAgICAgIHJldHVybiBpc1RhcmdldCAmJiBwYXJlbnRFbGVtZW50KFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5vZGUpKS5leGlzdHMoaXNFZGl0YWJsZSQzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNDb250ZW50RWRpdGFibGVUcnVlJDEgPSBpc0NvbnRlbnRFZGl0YWJsZVRydWUkMztcbiAgICBjb25zdCBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJDcgPSBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJGI7XG4gICAgY29uc3QgaXNNZWRpYSA9IGlzTWVkaWEkMjtcbiAgICBjb25zdCBpc0Jsb2NrTGlrZSA9IG1hdGNoU3R5bGVWYWx1ZXMoJ2Rpc3BsYXknLCAnYmxvY2sgdGFibGUgdGFibGUtY2VsbCB0YWJsZS1jYXB0aW9uIGxpc3QtaXRlbScpO1xuICAgIGNvbnN0IGlzQ2FyZXRDb250YWluZXIgPSBpc0NhcmV0Q29udGFpbmVyJDI7XG4gICAgY29uc3QgaXNDYXJldENvbnRhaW5lckJsb2NrID0gaXNDYXJldENvbnRhaW5lckJsb2NrJDE7XG4gICAgY29uc3QgaXNFbGVtZW50JDIgPSBpc0VsZW1lbnQkNjtcbiAgICBjb25zdCBpc1RleHQkNCA9IGlzVGV4dCRhO1xuICAgIGNvbnN0IGlzQ2FyZXRDYW5kaWRhdGUkMSA9IGlzQ2FyZXRDYW5kaWRhdGUkMztcbiAgICBjb25zdCBpc0ZvcndhcmRzID0gZGlyZWN0aW9uID0+IGRpcmVjdGlvbiA+IDA7XG4gICAgY29uc3QgaXNCYWNrd2FyZHMgPSBkaXJlY3Rpb24gPT4gZGlyZWN0aW9uIDwgMDtcbiAgICBjb25zdCBza2lwQ2FyZXRDb250YWluZXJzID0gKHdhbGssIHNoYWxsb3cpID0+IHtcbiAgICAgIGxldCBub2RlO1xuICAgICAgd2hpbGUgKG5vZGUgPSB3YWxrKHNoYWxsb3cpKSB7XG4gICAgICAgIGlmICghaXNDYXJldENvbnRhaW5lckJsb2NrKG5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgY29uc3QgZmluZE5vZGUgPSAobm9kZSwgZGlyZWN0aW9uLCBwcmVkaWNhdGVGbiwgcm9vdE5vZGUsIHNoYWxsb3cpID0+IHtcbiAgICAgIGNvbnN0IHdhbGtlciA9IG5ldyBEb21UcmVlV2Fsa2VyKG5vZGUsIHJvb3ROb2RlKTtcbiAgICAgIGNvbnN0IGlzQ2VmT3JDYXJldENvbnRhaW5lciA9IGlzQ29udGVudEVkaXRhYmxlRmFsc2UkNyhub2RlKSB8fCBpc0NhcmV0Q29udGFpbmVyQmxvY2sobm9kZSk7XG4gICAgICBsZXQgdGVtcE5vZGU7XG4gICAgICBpZiAoaXNCYWNrd2FyZHMoZGlyZWN0aW9uKSkge1xuICAgICAgICBpZiAoaXNDZWZPckNhcmV0Q29udGFpbmVyKSB7XG4gICAgICAgICAgdGVtcE5vZGUgPSBza2lwQ2FyZXRDb250YWluZXJzKHdhbGtlci5wcmV2LmJpbmQod2Fsa2VyKSwgdHJ1ZSk7XG4gICAgICAgICAgaWYgKHByZWRpY2F0ZUZuKHRlbXBOb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAodGVtcE5vZGUgPSBza2lwQ2FyZXRDb250YWluZXJzKHdhbGtlci5wcmV2LmJpbmQod2Fsa2VyKSwgc2hhbGxvdykpIHtcbiAgICAgICAgICBpZiAocHJlZGljYXRlRm4odGVtcE5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGVtcE5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNGb3J3YXJkcyhkaXJlY3Rpb24pKSB7XG4gICAgICAgIGlmIChpc0NlZk9yQ2FyZXRDb250YWluZXIpIHtcbiAgICAgICAgICB0ZW1wTm9kZSA9IHNraXBDYXJldENvbnRhaW5lcnMod2Fsa2VyLm5leHQuYmluZCh3YWxrZXIpLCB0cnVlKTtcbiAgICAgICAgICBpZiAocHJlZGljYXRlRm4odGVtcE5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGVtcE5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0ZW1wTm9kZSA9IHNraXBDYXJldENvbnRhaW5lcnMod2Fsa2VyLm5leHQuYmluZCh3YWxrZXIpLCBzaGFsbG93KSkge1xuICAgICAgICAgIGlmIChwcmVkaWNhdGVGbih0ZW1wTm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZW1wTm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgY29uc3QgZ2V0RWRpdGluZ0hvc3QgPSAobm9kZSwgcm9vdE5vZGUpID0+IHtcbiAgICAgIGNvbnN0IGlzQ0VUcnVlID0gbm9kZSA9PiBpc0NvbnRlbnRFZGl0YWJsZVRydWUkMShub2RlLmRvbSk7XG4gICAgICBjb25zdCBpc1Jvb3QgPSBub2RlID0+IG5vZGUuZG9tID09PSByb290Tm9kZTtcbiAgICAgIHJldHVybiBhbmNlc3RvciQ0KFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5vZGUpLCBpc0NFVHJ1ZSwgaXNSb290KS5tYXAoZWxtID0+IGVsbS5kb20pLmdldE9yKHJvb3ROb2RlKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFBhcmVudEJsb2NrJDMgPSAobm9kZSwgcm9vdE5vZGUpID0+IHtcbiAgICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT09IHJvb3ROb2RlKSB7XG4gICAgICAgIGlmIChpc0Jsb2NrTGlrZShub2RlKSkge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIGNvbnN0IGlzSW5TYW1lQmxvY2sgPSAoY2FyZXRQb3NpdGlvbjEsIGNhcmV0UG9zaXRpb24yLCByb290Tm9kZSkgPT4gZ2V0UGFyZW50QmxvY2skMyhjYXJldFBvc2l0aW9uMS5jb250YWluZXIoKSwgcm9vdE5vZGUpID09PSBnZXRQYXJlbnRCbG9jayQzKGNhcmV0UG9zaXRpb24yLmNvbnRhaW5lcigpLCByb290Tm9kZSk7XG4gICAgY29uc3QgZ2V0Q2hpbGROb2RlQXRSZWxhdGl2ZU9mZnNldCA9IChyZWxhdGl2ZU9mZnNldCwgY2FyZXRQb3NpdGlvbikgPT4ge1xuICAgICAgaWYgKCFjYXJldFBvc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBjb250YWluZXIgPSBjYXJldFBvc2l0aW9uLmNvbnRhaW5lcigpO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gY2FyZXRQb3NpdGlvbi5vZmZzZXQoKTtcbiAgICAgIGlmICghaXNFbGVtZW50JDIoY29udGFpbmVyKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oY29udGFpbmVyLmNoaWxkTm9kZXNbb2Zmc2V0ICsgcmVsYXRpdmVPZmZzZXRdKTtcbiAgICB9O1xuICAgIGNvbnN0IGJlZm9yZUFmdGVyID0gKGJlZm9yZSwgbm9kZSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgZG9jID0gKF9hID0gbm9kZS5vd25lckRvY3VtZW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBkb2N1bWVudDtcbiAgICAgIGNvbnN0IHJhbmdlID0gZG9jLmNyZWF0ZVJhbmdlKCk7XG4gICAgICBpZiAoYmVmb3JlKSB7XG4gICAgICAgIHJhbmdlLnNldFN0YXJ0QmVmb3JlKG5vZGUpO1xuICAgICAgICByYW5nZS5zZXRFbmRCZWZvcmUobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByYW5nZS5zZXRTdGFydEFmdGVyKG5vZGUpO1xuICAgICAgICByYW5nZS5zZXRFbmRBZnRlcihub2RlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByYW5nZTtcbiAgICB9O1xuICAgIGNvbnN0IGlzTm9kZXNJblNhbWVCbG9jayA9IChyb290LCBub2RlMSwgbm9kZTIpID0+IGdldFBhcmVudEJsb2NrJDMobm9kZTEsIHJvb3QpID09PSBnZXRQYXJlbnRCbG9jayQzKG5vZGUyLCByb290KTtcbiAgICBjb25zdCBsZWFuID0gKGxlZnQsIHJvb3QsIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHNpYmxpbmdOYW1lID0gbGVmdCA/ICdwcmV2aW91c1NpYmxpbmcnIDogJ25leHRTaWJsaW5nJztcbiAgICAgIGxldCB0ZW1wTm9kZSA9IG5vZGU7XG4gICAgICB3aGlsZSAodGVtcE5vZGUgJiYgdGVtcE5vZGUgIT09IHJvb3QpIHtcbiAgICAgICAgbGV0IHNpYmxpbmcgPSB0ZW1wTm9kZVtzaWJsaW5nTmFtZV07XG4gICAgICAgIGlmIChzaWJsaW5nICYmIGlzQ2FyZXRDb250YWluZXIoc2libGluZykpIHtcbiAgICAgICAgICBzaWJsaW5nID0gc2libGluZ1tzaWJsaW5nTmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQ29udGVudEVkaXRhYmxlRmFsc2UkNyhzaWJsaW5nKSB8fCBpc01lZGlhKHNpYmxpbmcpKSB7XG4gICAgICAgICAgaWYgKGlzTm9kZXNJblNhbWVCbG9jayhyb290LCBzaWJsaW5nLCB0ZW1wTm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzaWJsaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNDYXJldENhbmRpZGF0ZSQxKHNpYmxpbmcpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdGVtcE5vZGUgPSB0ZW1wTm9kZS5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBjb25zdCBiZWZvcmUkMiA9IGN1cnJ5KGJlZm9yZUFmdGVyLCB0cnVlKTtcbiAgICBjb25zdCBhZnRlciQyID0gY3VycnkoYmVmb3JlQWZ0ZXIsIGZhbHNlKTtcbiAgICBjb25zdCBub3JtYWxpemVSYW5nZSA9IChkaXJlY3Rpb24sIHJvb3QsIHJhbmdlKSA9PiB7XG4gICAgICBsZXQgbm9kZTtcbiAgICAgIGNvbnN0IGxlYW5MZWZ0ID0gY3VycnkobGVhbiwgdHJ1ZSwgcm9vdCk7XG4gICAgICBjb25zdCBsZWFuUmlnaHQgPSBjdXJyeShsZWFuLCBmYWxzZSwgcm9vdCk7XG4gICAgICBjb25zdCBjb250YWluZXIgPSByYW5nZS5zdGFydENvbnRhaW5lcjtcbiAgICAgIGNvbnN0IG9mZnNldCA9IHJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgICAgaWYgKGlzQ2FyZXRDb250YWluZXJCbG9jayQxKGNvbnRhaW5lcikpIHtcbiAgICAgICAgY29uc3QgYmxvY2sgPSBpc1RleHQkNChjb250YWluZXIpID8gY29udGFpbmVyLnBhcmVudE5vZGUgOiBjb250YWluZXI7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gYmxvY2suZ2V0QXR0cmlidXRlKCdkYXRhLW1jZS1jYXJldCcpO1xuICAgICAgICBpZiAobG9jYXRpb24gPT09ICdiZWZvcmUnKSB7XG4gICAgICAgICAgbm9kZSA9IGJsb2NrLm5leHRTaWJsaW5nO1xuICAgICAgICAgIGlmIChpc0Zha2VDYXJldFRhcmdldChub2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGJlZm9yZSQyKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYXRpb24gPT09ICdhZnRlcicpIHtcbiAgICAgICAgICBub2RlID0gYmxvY2sucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgIGlmIChpc0Zha2VDYXJldFRhcmdldChub2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGFmdGVyJDIobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICB9XG4gICAgICBpZiAoaXNUZXh0JGEoY29udGFpbmVyKSkge1xuICAgICAgICBpZiAoaXNDYXJldENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gMSkge1xuICAgICAgICAgICAgbm9kZSA9IGxlYW5SaWdodChjb250YWluZXIpO1xuICAgICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGJlZm9yZSQyKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9kZSA9IGxlYW5MZWZ0KGNvbnRhaW5lcik7XG4gICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICByZXR1cm4gYWZ0ZXIkMihub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gLTEpIHtcbiAgICAgICAgICAgIG5vZGUgPSBsZWFuTGVmdChjb250YWluZXIpO1xuICAgICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGFmdGVyJDIobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlID0gbGVhblJpZ2h0KGNvbnRhaW5lcik7XG4gICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICByZXR1cm4gYmVmb3JlJDIobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByYW5nZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5kc1dpdGhDYXJldENvbnRhaW5lciQxKGNvbnRhaW5lcikgJiYgb2Zmc2V0ID49IGNvbnRhaW5lci5kYXRhLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAxKSB7XG4gICAgICAgICAgICBub2RlID0gbGVhblJpZ2h0KGNvbnRhaW5lcik7XG4gICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICByZXR1cm4gYmVmb3JlJDIobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByYW5nZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnRzV2l0aENhcmV0Q29udGFpbmVyJDEoY29udGFpbmVyKSAmJiBvZmZzZXQgPD0gMSkge1xuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IC0xKSB7XG4gICAgICAgICAgICBub2RlID0gbGVhbkxlZnQoY29udGFpbmVyKTtcbiAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhZnRlciQyKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9mZnNldCA9PT0gY29udGFpbmVyLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgbm9kZSA9IGxlYW5SaWdodChjb250YWluZXIpO1xuICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gYmVmb3JlJDIobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByYW5nZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgbm9kZSA9IGxlYW5MZWZ0KGNvbnRhaW5lcik7XG4gICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBhZnRlciQyKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByYW5nZTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFJlbGF0aXZlQ2VmRWxtID0gKGZvcndhcmQsIGNhcmV0UG9zaXRpb24pID0+IGdldENoaWxkTm9kZUF0UmVsYXRpdmVPZmZzZXQoZm9yd2FyZCA/IDAgOiAtMSwgY2FyZXRQb3NpdGlvbikuZmlsdGVyKGlzQ29udGVudEVkaXRhYmxlRmFsc2UkNyk7XG4gICAgY29uc3QgZ2V0Tm9ybWFsaXplZFJhbmdlRW5kUG9pbnQgPSAoZGlyZWN0aW9uLCByb290LCByYW5nZSkgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFJhbmdlID0gbm9ybWFsaXplUmFuZ2UoZGlyZWN0aW9uLCByb290LCByYW5nZSk7XG4gICAgICByZXR1cm4gZGlyZWN0aW9uID09PSAtMSA/IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQobm9ybWFsaXplZFJhbmdlKSA6IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlRW5kKG5vcm1hbGl6ZWRSYW5nZSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRFbGVtZW50RnJvbVBvc2l0aW9uID0gcG9zID0+IE9wdGlvbmFsLmZyb20ocG9zLmdldE5vZGUoKSkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBnZXRFbGVtZW50RnJvbVByZXZQb3NpdGlvbiA9IHBvcyA9PiBPcHRpb25hbC5mcm9tKHBvcy5nZXROb2RlKHRydWUpKS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIGNvbnN0IGdldFZpc3VhbENhcmV0UG9zaXRpb24gPSAod2Fsa0ZuLCBjYXJldFBvc2l0aW9uKSA9PiB7XG4gICAgICBsZXQgcG9zID0gY2FyZXRQb3NpdGlvbjtcbiAgICAgIHdoaWxlIChwb3MgPSB3YWxrRm4ocG9zKSkge1xuICAgICAgICBpZiAocG9zLmlzVmlzaWJsZSgpKSB7XG4gICAgICAgICAgcmV0dXJuIHBvcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHBvcztcbiAgICB9O1xuICAgIGNvbnN0IGlzTW92ZUluc2lkZVNhbWVCbG9jayA9IChmcm9tLCB0bykgPT4ge1xuICAgICAgY29uc3QgaW5TYW1lQmxvY2sgPSBpc0luU2FtZUJsb2NrKGZyb20sIHRvKTtcbiAgICAgIGlmICghaW5TYW1lQmxvY2sgJiYgaXNCciQ2KGZyb20uZ2V0Tm9kZSgpKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpblNhbWVCbG9jaztcbiAgICB9O1xuXG4gICAgdmFyIEhEaXJlY3Rpb247XG4gICAgKGZ1bmN0aW9uIChIRGlyZWN0aW9uKSB7XG4gICAgICBIRGlyZWN0aW9uW0hEaXJlY3Rpb25bJ0JhY2t3YXJkcyddID0gLTFdID0gJ0JhY2t3YXJkcyc7XG4gICAgICBIRGlyZWN0aW9uW0hEaXJlY3Rpb25bJ0ZvcndhcmRzJ10gPSAxXSA9ICdGb3J3YXJkcyc7XG4gICAgfShIRGlyZWN0aW9uIHx8IChIRGlyZWN0aW9uID0ge30pKSk7XG4gICAgY29uc3QgaXNDb250ZW50RWRpdGFibGVGYWxzZSQ2ID0gaXNDb250ZW50RWRpdGFibGVGYWxzZSRiO1xuICAgIGNvbnN0IGlzVGV4dCQzID0gaXNUZXh0JGE7XG4gICAgY29uc3QgaXNFbGVtZW50JDEgPSBpc0VsZW1lbnQkNjtcbiAgICBjb25zdCBpc0JyJDIgPSBpc0JyJDY7XG4gICAgY29uc3QgaXNDYXJldENhbmRpZGF0ZSA9IGlzQ2FyZXRDYW5kaWRhdGUkMztcbiAgICBjb25zdCBpc0F0b21pYyA9IGlzQXRvbWljJDE7XG4gICAgY29uc3QgaXNFZGl0YWJsZUNhcmV0Q2FuZGlkYXRlID0gaXNFZGl0YWJsZUNhcmV0Q2FuZGlkYXRlJDE7XG4gICAgY29uc3QgZ2V0UGFyZW50cyQzID0gKG5vZGUsIHJvb3QpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcbiAgICAgIGxldCB0ZW1wTm9kZSA9IG5vZGU7XG4gICAgICB3aGlsZSAodGVtcE5vZGUgJiYgdGVtcE5vZGUgIT09IHJvb3QpIHtcbiAgICAgICAgcGFyZW50cy5wdXNoKHRlbXBOb2RlKTtcbiAgICAgICAgdGVtcE5vZGUgPSB0ZW1wTm9kZS5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcmVudHM7XG4gICAgfTtcbiAgICBjb25zdCBub2RlQXRJbmRleCA9IChjb250YWluZXIsIG9mZnNldCkgPT4ge1xuICAgICAgaWYgKGNvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkgJiYgb2Zmc2V0IDwgY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBjb250YWluZXIuY2hpbGROb2Rlc1tvZmZzZXRdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBjb25zdCBnZXRDYXJldENhbmRpZGF0ZVBvc2l0aW9uID0gKGRpcmVjdGlvbiwgbm9kZSkgPT4ge1xuICAgICAgaWYgKGlzRm9yd2FyZHMoZGlyZWN0aW9uKSkge1xuICAgICAgICBpZiAoaXNDYXJldENhbmRpZGF0ZShub2RlLnByZXZpb3VzU2libGluZykgJiYgIWlzVGV4dCQzKG5vZGUucHJldmlvdXNTaWJsaW5nKSkge1xuICAgICAgICAgIHJldHVybiBDYXJldFBvc2l0aW9uLmJlZm9yZShub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNUZXh0JDMobm9kZSkpIHtcbiAgICAgICAgICByZXR1cm4gQ2FyZXRQb3NpdGlvbihub2RlLCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzQmFja3dhcmRzKGRpcmVjdGlvbikpIHtcbiAgICAgICAgaWYgKGlzQ2FyZXRDYW5kaWRhdGUobm9kZS5uZXh0U2libGluZykgJiYgIWlzVGV4dCQzKG5vZGUubmV4dFNpYmxpbmcpKSB7XG4gICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24uYWZ0ZXIobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVGV4dCQzKG5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24obm9kZSwgbm9kZS5kYXRhLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpc0JhY2t3YXJkcyhkaXJlY3Rpb24pKSB7XG4gICAgICAgIGlmIChpc0JyJDIobm9kZSkpIHtcbiAgICAgICAgICByZXR1cm4gQ2FyZXRQb3NpdGlvbi5iZWZvcmUobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24uYWZ0ZXIobm9kZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gQ2FyZXRQb3NpdGlvbi5iZWZvcmUobm9kZSk7XG4gICAgfTtcbiAgICBjb25zdCBtb3ZlRm9yd2FyZEZyb21CciA9IChyb290LCBuZXh0Tm9kZSkgPT4ge1xuICAgICAgY29uc3QgbmV4dFNpYmxpbmcgPSBuZXh0Tm9kZS5uZXh0U2libGluZztcbiAgICAgIGlmIChuZXh0U2libGluZyAmJiBpc0NhcmV0Q2FuZGlkYXRlKG5leHRTaWJsaW5nKSkge1xuICAgICAgICBpZiAoaXNUZXh0JDMobmV4dFNpYmxpbmcpKSB7XG4gICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24obmV4dFNpYmxpbmcsIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBDYXJldFBvc2l0aW9uLmJlZm9yZShuZXh0U2libGluZyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmaW5kQ2FyZXRQb3NpdGlvbiQxKEhEaXJlY3Rpb24uRm9yd2FyZHMsIENhcmV0UG9zaXRpb24uYWZ0ZXIobmV4dE5vZGUpLCByb290KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRDYXJldFBvc2l0aW9uJDEgPSAoZGlyZWN0aW9uLCBzdGFydFBvcywgcm9vdCkgPT4ge1xuICAgICAgbGV0IG5vZGU7XG4gICAgICBsZXQgbmV4dE5vZGU7XG4gICAgICBsZXQgaW5uZXJOb2RlO1xuICAgICAgbGV0IGNhcmV0UG9zaXRpb247XG4gICAgICBpZiAoIWlzRWxlbWVudCQxKHJvb3QpIHx8ICFzdGFydFBvcykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChzdGFydFBvcy5pc0VxdWFsKENhcmV0UG9zaXRpb24uYWZ0ZXIocm9vdCkpICYmIHJvb3QubGFzdENoaWxkKSB7XG4gICAgICAgIGNhcmV0UG9zaXRpb24gPSBDYXJldFBvc2l0aW9uLmFmdGVyKHJvb3QubGFzdENoaWxkKTtcbiAgICAgICAgaWYgKGlzQmFja3dhcmRzKGRpcmVjdGlvbikgJiYgaXNDYXJldENhbmRpZGF0ZShyb290Lmxhc3RDaGlsZCkgJiYgaXNFbGVtZW50JDEocm9vdC5sYXN0Q2hpbGQpKSB7XG4gICAgICAgICAgcmV0dXJuIGlzQnIkMihyb290Lmxhc3RDaGlsZCkgPyBDYXJldFBvc2l0aW9uLmJlZm9yZShyb290Lmxhc3RDaGlsZCkgOiBjYXJldFBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYXJldFBvc2l0aW9uID0gc3RhcnRQb3M7XG4gICAgICB9XG4gICAgICBjb25zdCBjb250YWluZXIgPSBjYXJldFBvc2l0aW9uLmNvbnRhaW5lcigpO1xuICAgICAgbGV0IG9mZnNldCA9IGNhcmV0UG9zaXRpb24ub2Zmc2V0KCk7XG4gICAgICBpZiAoaXNUZXh0JDMoY29udGFpbmVyKSkge1xuICAgICAgICBpZiAoaXNCYWNrd2FyZHMoZGlyZWN0aW9uKSAmJiBvZmZzZXQgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24oY29udGFpbmVyLCAtLW9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRm9yd2FyZHMoZGlyZWN0aW9uKSAmJiBvZmZzZXQgPCBjb250YWluZXIubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24oY29udGFpbmVyLCArK29mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IGNvbnRhaW5lcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc0JhY2t3YXJkcyhkaXJlY3Rpb24pICYmIG9mZnNldCA+IDApIHtcbiAgICAgICAgICBuZXh0Tm9kZSA9IG5vZGVBdEluZGV4KGNvbnRhaW5lciwgb2Zmc2V0IC0gMSk7XG4gICAgICAgICAgaWYgKGlzQ2FyZXRDYW5kaWRhdGUobmV4dE5vZGUpKSB7XG4gICAgICAgICAgICBpZiAoIWlzQXRvbWljKG5leHROb2RlKSkge1xuICAgICAgICAgICAgICBpbm5lck5vZGUgPSBmaW5kTm9kZShuZXh0Tm9kZSwgZGlyZWN0aW9uLCBpc0VkaXRhYmxlQ2FyZXRDYW5kaWRhdGUsIG5leHROb2RlKTtcbiAgICAgICAgICAgICAgaWYgKGlubmVyTm9kZSkge1xuICAgICAgICAgICAgICAgIGlmIChpc1RleHQkMyhpbm5lck5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gQ2FyZXRQb3NpdGlvbihpbm5lck5vZGUsIGlubmVyTm9kZS5kYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBDYXJldFBvc2l0aW9uLmFmdGVyKGlubmVyTm9kZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1RleHQkMyhuZXh0Tm9kZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24obmV4dE5vZGUsIG5leHROb2RlLmRhdGEubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBDYXJldFBvc2l0aW9uLmJlZm9yZShuZXh0Tm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0ZvcndhcmRzKGRpcmVjdGlvbikgJiYgb2Zmc2V0IDwgY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgbmV4dE5vZGUgPSBub2RlQXRJbmRleChjb250YWluZXIsIG9mZnNldCk7XG4gICAgICAgICAgaWYgKGlzQ2FyZXRDYW5kaWRhdGUobmV4dE5vZGUpKSB7XG4gICAgICAgICAgICBpZiAoaXNCciQyKG5leHROb2RlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gbW92ZUZvcndhcmRGcm9tQnIocm9vdCwgbmV4dE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0F0b21pYyhuZXh0Tm9kZSkpIHtcbiAgICAgICAgICAgICAgaW5uZXJOb2RlID0gZmluZE5vZGUobmV4dE5vZGUsIGRpcmVjdGlvbiwgaXNFZGl0YWJsZUNhcmV0Q2FuZGlkYXRlLCBuZXh0Tm9kZSk7XG4gICAgICAgICAgICAgIGlmIChpbm5lck5vZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNUZXh0JDMoaW5uZXJOb2RlKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24oaW5uZXJOb2RlLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24uYmVmb3JlKGlubmVyTm9kZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1RleHQkMyhuZXh0Tm9kZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24obmV4dE5vZGUsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24uYWZ0ZXIobmV4dE5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbmV4dE5vZGUgPyBuZXh0Tm9kZSA6IGNhcmV0UG9zaXRpb24uZ2V0Tm9kZSgpO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUgJiYgKGlzRm9yd2FyZHMoZGlyZWN0aW9uKSAmJiBjYXJldFBvc2l0aW9uLmlzQXRFbmQoKSB8fCBpc0JhY2t3YXJkcyhkaXJlY3Rpb24pICYmIGNhcmV0UG9zaXRpb24uaXNBdFN0YXJ0KCkpKSB7XG4gICAgICAgIG5vZGUgPSBmaW5kTm9kZShub2RlLCBkaXJlY3Rpb24sIGFsd2F5cywgcm9vdCwgdHJ1ZSk7XG4gICAgICAgIGlmIChpc0VkaXRhYmxlQ2FyZXRDYW5kaWRhdGUobm9kZSwgcm9vdCkpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0Q2FyZXRDYW5kaWRhdGVQb3NpdGlvbihkaXJlY3Rpb24sIG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0Tm9kZSA9IG5vZGUgPyBmaW5kTm9kZShub2RlLCBkaXJlY3Rpb24sIGlzRWRpdGFibGVDYXJldENhbmRpZGF0ZSwgcm9vdCkgOiBub2RlO1xuICAgICAgY29uc3Qgcm9vdENvbnRlbnRFZGl0YWJsZUZhbHNlRWxtID0gbGFzdCQyKGZpbHRlciQ1KGdldFBhcmVudHMkMyhjb250YWluZXIsIHJvb3QpLCBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJDYpKTtcbiAgICAgIGlmIChyb290Q29udGVudEVkaXRhYmxlRmFsc2VFbG0gJiYgKCFuZXh0Tm9kZSB8fCAhcm9vdENvbnRlbnRFZGl0YWJsZUZhbHNlRWxtLmNvbnRhaW5zKG5leHROb2RlKSkpIHtcbiAgICAgICAgaWYgKGlzRm9yd2FyZHMoZGlyZWN0aW9uKSkge1xuICAgICAgICAgIGNhcmV0UG9zaXRpb24gPSBDYXJldFBvc2l0aW9uLmFmdGVyKHJvb3RDb250ZW50RWRpdGFibGVGYWxzZUVsbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FyZXRQb3NpdGlvbiA9IENhcmV0UG9zaXRpb24uYmVmb3JlKHJvb3RDb250ZW50RWRpdGFibGVGYWxzZUVsbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhcmV0UG9zaXRpb247XG4gICAgICB9XG4gICAgICBpZiAobmV4dE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGdldENhcmV0Q2FuZGlkYXRlUG9zaXRpb24oZGlyZWN0aW9uLCBuZXh0Tm9kZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIGNvbnN0IENhcmV0V2Fsa2VyID0gcm9vdCA9PiAoe1xuICAgICAgbmV4dDogY2FyZXRQb3NpdGlvbiA9PiB7XG4gICAgICAgIHJldHVybiBmaW5kQ2FyZXRQb3NpdGlvbiQxKEhEaXJlY3Rpb24uRm9yd2FyZHMsIGNhcmV0UG9zaXRpb24sIHJvb3QpO1xuICAgICAgfSxcbiAgICAgIHByZXY6IGNhcmV0UG9zaXRpb24gPT4ge1xuICAgICAgICByZXR1cm4gZmluZENhcmV0UG9zaXRpb24kMShIRGlyZWN0aW9uLkJhY2t3YXJkcywgY2FyZXRQb3NpdGlvbiwgcm9vdCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCB3YWxrVG9Qb3NpdGlvbkluID0gKGZvcndhcmQsIHJvb3QsIHN0YXJ0KSA9PiB7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IGZvcndhcmQgPyBDYXJldFBvc2l0aW9uLmJlZm9yZShzdGFydCkgOiBDYXJldFBvc2l0aW9uLmFmdGVyKHN0YXJ0KTtcbiAgICAgIHJldHVybiBmcm9tUG9zaXRpb24oZm9yd2FyZCwgcm9vdCwgcG9zaXRpb24pO1xuICAgIH07XG4gICAgY29uc3QgYWZ0ZXJFbGVtZW50ID0gbm9kZSA9PiBpc0JyJDYobm9kZSkgPyBDYXJldFBvc2l0aW9uLmJlZm9yZShub2RlKSA6IENhcmV0UG9zaXRpb24uYWZ0ZXIobm9kZSk7XG4gICAgY29uc3QgaXNCZWZvcmVPclN0YXJ0ID0gcG9zaXRpb24gPT4ge1xuICAgICAgaWYgKENhcmV0UG9zaXRpb24uaXNUZXh0UG9zaXRpb24ocG9zaXRpb24pKSB7XG4gICAgICAgIHJldHVybiBwb3NpdGlvbi5vZmZzZXQoKSA9PT0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpc0NhcmV0Q2FuZGlkYXRlJDMocG9zaXRpb24uZ2V0Tm9kZSgpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlzQWZ0ZXJPckVuZCA9IHBvc2l0aW9uID0+IHtcbiAgICAgIGlmIChDYXJldFBvc2l0aW9uLmlzVGV4dFBvc2l0aW9uKHBvc2l0aW9uKSkge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBwb3NpdGlvbi5jb250YWluZXIoKTtcbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uLm9mZnNldCgpID09PSBjb250YWluZXIuZGF0YS5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaXNDYXJldENhbmRpZGF0ZSQzKHBvc2l0aW9uLmdldE5vZGUodHJ1ZSkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNCZWZvcmVBZnRlclNhbWVFbGVtZW50ID0gKGZyb20sIHRvKSA9PiAhQ2FyZXRQb3NpdGlvbi5pc1RleHRQb3NpdGlvbihmcm9tKSAmJiAhQ2FyZXRQb3NpdGlvbi5pc1RleHRQb3NpdGlvbih0bykgJiYgZnJvbS5nZXROb2RlKCkgPT09IHRvLmdldE5vZGUodHJ1ZSk7XG4gICAgY29uc3QgaXNBdEJyID0gcG9zaXRpb24gPT4gIUNhcmV0UG9zaXRpb24uaXNUZXh0UG9zaXRpb24ocG9zaXRpb24pICYmIGlzQnIkNihwb3NpdGlvbi5nZXROb2RlKCkpO1xuICAgIGNvbnN0IHNob3VsZFNraXBQb3NpdGlvbiA9IChmb3J3YXJkLCBmcm9tLCB0bykgPT4ge1xuICAgICAgaWYgKGZvcndhcmQpIHtcbiAgICAgICAgcmV0dXJuICFpc0JlZm9yZUFmdGVyU2FtZUVsZW1lbnQoZnJvbSwgdG8pICYmICFpc0F0QnIoZnJvbSkgJiYgaXNBZnRlck9yRW5kKGZyb20pICYmIGlzQmVmb3JlT3JTdGFydCh0byk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gIWlzQmVmb3JlQWZ0ZXJTYW1lRWxlbWVudCh0bywgZnJvbSkgJiYgaXNCZWZvcmVPclN0YXJ0KGZyb20pICYmIGlzQWZ0ZXJPckVuZCh0byk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBmcm9tUG9zaXRpb24gPSAoZm9yd2FyZCwgcm9vdCwgcG9zKSA9PiB7XG4gICAgICBjb25zdCB3YWxrZXIgPSBDYXJldFdhbGtlcihyb290KTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKGZvcndhcmQgPyB3YWxrZXIubmV4dChwb3MpIDogd2Fsa2VyLnByZXYocG9zKSk7XG4gICAgfTtcbiAgICBjb25zdCBuYXZpZ2F0ZSA9IChmb3J3YXJkLCByb290LCBmcm9tKSA9PiBmcm9tUG9zaXRpb24oZm9yd2FyZCwgcm9vdCwgZnJvbSkuYmluZCh0byA9PiB7XG4gICAgICBpZiAoaXNJblNhbWVCbG9jayhmcm9tLCB0bywgcm9vdCkgJiYgc2hvdWxkU2tpcFBvc2l0aW9uKGZvcndhcmQsIGZyb20sIHRvKSkge1xuICAgICAgICByZXR1cm4gZnJvbVBvc2l0aW9uKGZvcndhcmQsIHJvb3QsIHRvKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHRvKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBuYXZpZ2F0ZUlnbm9yZSA9IChmb3J3YXJkLCByb290LCBmcm9tLCBpZ25vcmVGaWx0ZXIpID0+IG5hdmlnYXRlKGZvcndhcmQsIHJvb3QsIGZyb20pLmJpbmQocG9zID0+IGlnbm9yZUZpbHRlcihwb3MpID8gbmF2aWdhdGVJZ25vcmUoZm9yd2FyZCwgcm9vdCwgcG9zLCBpZ25vcmVGaWx0ZXIpIDogT3B0aW9uYWwuc29tZShwb3MpKTtcbiAgICBjb25zdCBwb3NpdGlvbkluID0gKGZvcndhcmQsIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0Tm9kZSA9IGZvcndhcmQgPyBlbGVtZW50LmZpcnN0Q2hpbGQgOiBlbGVtZW50Lmxhc3RDaGlsZDtcbiAgICAgIGlmIChpc1RleHQkYShzdGFydE5vZGUpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKENhcmV0UG9zaXRpb24oc3RhcnROb2RlLCBmb3J3YXJkID8gMCA6IHN0YXJ0Tm9kZS5kYXRhLmxlbmd0aCkpO1xuICAgICAgfSBlbHNlIGlmIChzdGFydE5vZGUpIHtcbiAgICAgICAgaWYgKGlzQ2FyZXRDYW5kaWRhdGUkMyhzdGFydE5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoZm9yd2FyZCA/IENhcmV0UG9zaXRpb24uYmVmb3JlKHN0YXJ0Tm9kZSkgOiBhZnRlckVsZW1lbnQoc3RhcnROb2RlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHdhbGtUb1Bvc2l0aW9uSW4oZm9yd2FyZCwgZWxlbWVudCwgc3RhcnROb2RlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG5leHRQb3NpdGlvbiA9IGN1cnJ5KGZyb21Qb3NpdGlvbiwgdHJ1ZSk7XG4gICAgY29uc3QgcHJldlBvc2l0aW9uID0gY3VycnkoZnJvbVBvc2l0aW9uLCBmYWxzZSk7XG4gICAgY29uc3QgZmlyc3RQb3NpdGlvbkluID0gY3VycnkocG9zaXRpb25JbiwgdHJ1ZSk7XG4gICAgY29uc3QgbGFzdFBvc2l0aW9uSW4gPSBjdXJyeShwb3NpdGlvbkluLCBmYWxzZSk7XG5cbiAgICBjb25zdCBDQVJFVF9JRCA9ICdfbWNlX2NhcmV0JztcbiAgICBjb25zdCBpc0NhcmV0Tm9kZSA9IG5vZGUgPT4gaXNFbGVtZW50JDYobm9kZSkgJiYgbm9kZS5pZCA9PT0gQ0FSRVRfSUQ7XG4gICAgY29uc3QgZ2V0UGFyZW50Q2FyZXRDb250YWluZXIgPSAoYm9keSwgbm9kZSkgPT4ge1xuICAgICAgbGV0IGN1cnJlbnROb2RlID0gbm9kZTtcbiAgICAgIHdoaWxlIChjdXJyZW50Tm9kZSAmJiBjdXJyZW50Tm9kZSAhPT0gYm9keSkge1xuICAgICAgICBpZiAoaXNDYXJldE5vZGUoY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCBpc1N0cmluZ1BhdGhCb29rbWFyayA9IGJvb2ttYXJrID0+IGlzU3RyaW5nKGJvb2ttYXJrLnN0YXJ0KTtcbiAgICBjb25zdCBpc1JhbmdlQm9va21hcmsgPSBib29rbWFyayA9PiBoYXMkMihib29rbWFyaywgJ3JuZycpO1xuICAgIGNvbnN0IGlzSWRCb29rbWFyayA9IGJvb2ttYXJrID0+IGhhcyQyKGJvb2ttYXJrLCAnaWQnKTtcbiAgICBjb25zdCBpc0luZGV4Qm9va21hcmsgPSBib29rbWFyayA9PiBoYXMkMihib29rbWFyaywgJ25hbWUnKTtcbiAgICBjb25zdCBpc1BhdGhCb29rbWFyayA9IGJvb2ttYXJrID0+IFRvb2xzLmlzQXJyYXkoYm9va21hcmsuc3RhcnQpO1xuXG4gICAgY29uc3QgaXNGb3J3YXJkQm9va21hcmsgPSBib29rbWFyayA9PiAhaXNJbmRleEJvb2ttYXJrKGJvb2ttYXJrKSAmJiBpc0Jvb2xlYW4oYm9va21hcmsuZm9yd2FyZCkgPyBib29rbWFyay5mb3J3YXJkIDogdHJ1ZTtcbiAgICBjb25zdCBhZGRCb2d1cyA9IChkb20sIG5vZGUpID0+IHtcbiAgICAgIGlmIChpc0VsZW1lbnQkNihub2RlKSAmJiBkb20uaXNCbG9jayhub2RlKSAmJiAhbm9kZS5pbm5lckhUTUwpIHtcbiAgICAgICAgbm9kZS5pbm5lckhUTUwgPSAnPGJyIGRhdGEtbWNlLWJvZ3VzPVwiMVwiIC8+JztcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlO1xuICAgIH07XG4gICAgY29uc3QgcmVzb2x2ZUNhcmV0UG9zaXRpb25Cb29rbWFyayA9IChkb20sIGJvb2ttYXJrKSA9PiB7XG4gICAgICBjb25zdCBzdGFydFBvcyA9IE9wdGlvbmFsLmZyb20ocmVzb2x2ZSQxKGRvbS5nZXRSb290KCksIGJvb2ttYXJrLnN0YXJ0KSk7XG4gICAgICBjb25zdCBlbmRQb3MgPSBPcHRpb25hbC5mcm9tKHJlc29sdmUkMShkb20uZ2V0Um9vdCgpLCBib29rbWFyay5lbmQpKTtcbiAgICAgIHJldHVybiBsaWZ0MihzdGFydFBvcywgZW5kUG9zLCAoc3RhcnQsIGVuZCkgPT4ge1xuICAgICAgICBjb25zdCByYW5nZSA9IGRvbS5jcmVhdGVSbmcoKTtcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnQuY29udGFpbmVyKCksIHN0YXJ0Lm9mZnNldCgpKTtcbiAgICAgICAgcmFuZ2Uuc2V0RW5kKGVuZC5jb250YWluZXIoKSwgZW5kLm9mZnNldCgpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByYW5nZSxcbiAgICAgICAgICBmb3J3YXJkOiBpc0ZvcndhcmRCb29rbWFyayhib29rbWFyaylcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0WndzcCA9IChub2RlLCBybmcpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGNvbnN0IGRvYyA9IChfYSA9IG5vZGUub3duZXJEb2N1bWVudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZG9jdW1lbnQ7XG4gICAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvYy5jcmVhdGVUZXh0Tm9kZShaV1NQJDEpO1xuICAgICAgbm9kZS5hcHBlbmRDaGlsZCh0ZXh0Tm9kZSk7XG4gICAgICBybmcuc2V0U3RhcnQodGV4dE5vZGUsIDApO1xuICAgICAgcm5nLnNldEVuZCh0ZXh0Tm9kZSwgMCk7XG4gICAgfTtcbiAgICBjb25zdCBpc0VtcHR5JDEgPSBub2RlID0+ICFub2RlLmhhc0NoaWxkTm9kZXMoKTtcbiAgICBjb25zdCB0cnlGaW5kUmFuZ2VQb3NpdGlvbiA9IChub2RlLCBybmcpID0+IGxhc3RQb3NpdGlvbkluKG5vZGUpLmZvbGQobmV2ZXIsIHBvcyA9PiB7XG4gICAgICBybmcuc2V0U3RhcnQocG9zLmNvbnRhaW5lcigpLCBwb3Mub2Zmc2V0KCkpO1xuICAgICAgcm5nLnNldEVuZChwb3MuY29udGFpbmVyKCksIHBvcy5vZmZzZXQoKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICBjb25zdCBwYWRFbXB0eUNhcmV0Q29udGFpbmVyID0gKHJvb3QsIG5vZGUsIHJuZykgPT4ge1xuICAgICAgaWYgKGlzRW1wdHkkMShub2RlKSAmJiBnZXRQYXJlbnRDYXJldENvbnRhaW5lcihyb290LCBub2RlKSkge1xuICAgICAgICBpbnNlcnRad3NwKG5vZGUsIHJuZyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2V0RW5kUG9pbnQgPSAoZG9tLCBzdGFydCwgYm9va21hcmssIHJuZykgPT4ge1xuICAgICAgY29uc3QgcG9pbnQgPSBib29rbWFya1tzdGFydCA/ICdzdGFydCcgOiAnZW5kJ107XG4gICAgICBjb25zdCByb290ID0gZG9tLmdldFJvb3QoKTtcbiAgICAgIGlmIChwb2ludCkge1xuICAgICAgICBsZXQgbm9kZSA9IHJvb3Q7XG4gICAgICAgIGxldCBvZmZzZXQgPSBwb2ludFswXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHBvaW50Lmxlbmd0aCAtIDE7IG5vZGUgJiYgaSA+PSAxOyBpLS0pIHtcbiAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IG5vZGUuY2hpbGROb2RlcztcbiAgICAgICAgICBpZiAocGFkRW1wdHlDYXJldENvbnRhaW5lcihyb290LCBub2RlLCBybmcpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBvaW50W2ldID4gY2hpbGRyZW4ubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgaWYgKHBhZEVtcHR5Q2FyZXRDb250YWluZXIocm9vdCwgbm9kZSwgcm5nKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnlGaW5kUmFuZ2VQb3NpdGlvbihub2RlLCBybmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBub2RlID0gY2hpbGRyZW5bcG9pbnRbaV1dO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1RleHQkYShub2RlKSkge1xuICAgICAgICAgIG9mZnNldCA9IE1hdGgubWluKHBvaW50WzBdLCBub2RlLmRhdGEubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNFbGVtZW50JDYobm9kZSkpIHtcbiAgICAgICAgICBvZmZzZXQgPSBNYXRoLm1pbihwb2ludFswXSwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgICAgcm5nLnNldFN0YXJ0KG5vZGUsIG9mZnNldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcm5nLnNldEVuZChub2RlLCBvZmZzZXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIGNvbnN0IGlzVmFsaWRUZXh0Tm9kZSA9IG5vZGUgPT4gaXNUZXh0JGEobm9kZSkgJiYgbm9kZS5kYXRhLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgcmVzdG9yZUVuZFBvaW50ID0gKGRvbSwgc3VmZml4LCBib29rbWFyaykgPT4ge1xuICAgICAgY29uc3QgbWFya2VyID0gZG9tLmdldChib29rbWFyay5pZCArICdfJyArIHN1ZmZpeCk7XG4gICAgICBjb25zdCBtYXJrZXJQYXJlbnQgPSBtYXJrZXIgPT09IG51bGwgfHwgbWFya2VyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtYXJrZXIucGFyZW50Tm9kZTtcbiAgICAgIGNvbnN0IGtlZXAgPSBib29rbWFyay5rZWVwO1xuICAgICAgaWYgKG1hcmtlciAmJiBtYXJrZXJQYXJlbnQpIHtcbiAgICAgICAgbGV0IGNvbnRhaW5lcjtcbiAgICAgICAgbGV0IG9mZnNldDtcbiAgICAgICAgaWYgKHN1ZmZpeCA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICAgIGlmICgha2VlcCkge1xuICAgICAgICAgICAgY29udGFpbmVyID0gbWFya2VyUGFyZW50O1xuICAgICAgICAgICAgb2Zmc2V0ID0gZG9tLm5vZGVJbmRleChtYXJrZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobWFya2VyLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgICAgICBjb250YWluZXIgPSBtYXJrZXIuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNWYWxpZFRleHROb2RlKG1hcmtlci5uZXh0U2libGluZykpIHtcbiAgICAgICAgICAgICAgY29udGFpbmVyID0gbWFya2VyLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkVGV4dE5vZGUobWFya2VyLnByZXZpb3VzU2libGluZykpIHtcbiAgICAgICAgICAgICAgY29udGFpbmVyID0gbWFya2VyLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gbWFya2VyLnByZXZpb3VzU2libGluZy5kYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnRhaW5lciA9IG1hcmtlclBhcmVudDtcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gZG9tLm5vZGVJbmRleChtYXJrZXIpICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFrZWVwKSB7XG4gICAgICAgICAgICBjb250YWluZXIgPSBtYXJrZXJQYXJlbnQ7XG4gICAgICAgICAgICBvZmZzZXQgPSBkb20ubm9kZUluZGV4KG1hcmtlcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChtYXJrZXIuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgICAgICAgIGNvbnRhaW5lciA9IG1hcmtlci5maXJzdENoaWxkO1xuICAgICAgICAgICAgICBvZmZzZXQgPSAxO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkVGV4dE5vZGUobWFya2VyLnByZXZpb3VzU2libGluZykpIHtcbiAgICAgICAgICAgICAgY29udGFpbmVyID0gbWFya2VyLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gbWFya2VyLnByZXZpb3VzU2libGluZy5kYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnRhaW5lciA9IG1hcmtlclBhcmVudDtcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gZG9tLm5vZGVJbmRleChtYXJrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWtlZXApIHtcbiAgICAgICAgICBjb25zdCBwcmV2ID0gbWFya2VyLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICBjb25zdCBuZXh0ID0gbWFya2VyLm5leHRTaWJsaW5nO1xuICAgICAgICAgIFRvb2xzLmVhY2goVG9vbHMuZ3JlcChtYXJrZXIuY2hpbGROb2RlcyksIG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKGlzVGV4dCRhKG5vZGUpKSB7XG4gICAgICAgICAgICAgIG5vZGUuZGF0YSA9IG5vZGUuZGF0YS5yZXBsYWNlKC9cXHVGRUZGL2csICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsZXQgb3RoZXJNYXJrZXI7XG4gICAgICAgICAgd2hpbGUgKG90aGVyTWFya2VyID0gZG9tLmdldChib29rbWFyay5pZCArICdfJyArIHN1ZmZpeCkpIHtcbiAgICAgICAgICAgIGRvbS5yZW1vdmUob3RoZXJNYXJrZXIsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNUZXh0JGEobmV4dCkgJiYgaXNUZXh0JGEocHJldikgJiYgIUVudi5icm93c2VyLmlzT3BlcmEoKSkge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gcHJldi5kYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIHByZXYuYXBwZW5kRGF0YShuZXh0LmRhdGEpO1xuICAgICAgICAgICAgZG9tLnJlbW92ZShuZXh0KTtcbiAgICAgICAgICAgIGNvbnRhaW5lciA9IHByZXY7XG4gICAgICAgICAgICBvZmZzZXQgPSBpZHg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKENhcmV0UG9zaXRpb24oY29udGFpbmVyLCBvZmZzZXQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZXNvbHZlUGF0aHMgPSAoZG9tLCBib29rbWFyaykgPT4ge1xuICAgICAgY29uc3QgcmFuZ2UgPSBkb20uY3JlYXRlUm5nKCk7XG4gICAgICBpZiAoc2V0RW5kUG9pbnQoZG9tLCB0cnVlLCBib29rbWFyaywgcmFuZ2UpICYmIHNldEVuZFBvaW50KGRvbSwgZmFsc2UsIGJvb2ttYXJrLCByYW5nZSkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgIHJhbmdlLFxuICAgICAgICAgIGZvcndhcmQ6IGlzRm9yd2FyZEJvb2ttYXJrKGJvb2ttYXJrKVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZXNvbHZlSWQgPSAoZG9tLCBib29rbWFyaykgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRQb3MgPSByZXN0b3JlRW5kUG9pbnQoZG9tLCAnc3RhcnQnLCBib29rbWFyayk7XG4gICAgICBjb25zdCBlbmRQb3MgPSByZXN0b3JlRW5kUG9pbnQoZG9tLCAnZW5kJywgYm9va21hcmspO1xuICAgICAgcmV0dXJuIGxpZnQyKHN0YXJ0UG9zLCBlbmRQb3Mub3Ioc3RhcnRQb3MpLCAoc3BvcywgZXBvcykgPT4ge1xuICAgICAgICBjb25zdCByYW5nZSA9IGRvbS5jcmVhdGVSbmcoKTtcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoYWRkQm9ndXMoZG9tLCBzcG9zLmNvbnRhaW5lcigpKSwgc3Bvcy5vZmZzZXQoKSk7XG4gICAgICAgIHJhbmdlLnNldEVuZChhZGRCb2d1cyhkb20sIGVwb3MuY29udGFpbmVyKCkpLCBlcG9zLm9mZnNldCgpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByYW5nZSxcbiAgICAgICAgICBmb3J3YXJkOiBpc0ZvcndhcmRCb29rbWFyayhib29rbWFyaylcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVzb2x2ZUluZGV4ID0gKGRvbSwgYm9va21hcmspID0+IE9wdGlvbmFsLmZyb20oZG9tLnNlbGVjdChib29rbWFyay5uYW1lKVtib29rbWFyay5pbmRleF0pLm1hcChlbG0gPT4ge1xuICAgICAgY29uc3QgcmFuZ2UgPSBkb20uY3JlYXRlUm5nKCk7XG4gICAgICByYW5nZS5zZWxlY3ROb2RlKGVsbSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByYW5nZSxcbiAgICAgICAgZm9yd2FyZDogdHJ1ZVxuICAgICAgfTtcbiAgICB9KTtcbiAgICBjb25zdCByZXNvbHZlID0gKHNlbGVjdGlvbiwgYm9va21hcmspID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IHNlbGVjdGlvbi5kb207XG4gICAgICBpZiAoYm9va21hcmspIHtcbiAgICAgICAgaWYgKGlzUGF0aEJvb2ttYXJrKGJvb2ttYXJrKSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlUGF0aHMoZG9tLCBib29rbWFyayk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmdQYXRoQm9va21hcmsoYm9va21hcmspKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmVDYXJldFBvc2l0aW9uQm9va21hcmsoZG9tLCBib29rbWFyayk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNJZEJvb2ttYXJrKGJvb2ttYXJrKSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlSWQoZG9tLCBib29rbWFyayk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNJbmRleEJvb2ttYXJrKGJvb2ttYXJrKSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlSW5kZXgoZG9tLCBib29rbWFyayk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNSYW5nZUJvb2ttYXJrKGJvb2ttYXJrKSkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgIHJhbmdlOiBib29rbWFyay5ybmcsXG4gICAgICAgICAgICBmb3J3YXJkOiBpc0ZvcndhcmRCb29rbWFyayhib29rbWFyaylcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0Qm9va21hcmskMSA9IChzZWxlY3Rpb24sIHR5cGUsIG5vcm1hbGl6ZWQpID0+IHtcbiAgICAgIHJldHVybiBnZXRCb29rbWFyayQyKHNlbGVjdGlvbiwgdHlwZSwgbm9ybWFsaXplZCk7XG4gICAgfTtcbiAgICBjb25zdCBtb3ZlVG9Cb29rbWFyayA9IChzZWxlY3Rpb24sIGJvb2ttYXJrKSA9PiB7XG4gICAgICByZXNvbHZlKHNlbGVjdGlvbiwgYm9va21hcmspLmVhY2goKHtyYW5nZSwgZm9yd2FyZH0pID0+IHtcbiAgICAgICAgc2VsZWN0aW9uLnNldFJuZyhyYW5nZSwgZm9yd2FyZCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQm9va21hcmtOb2RlJDEgPSBub2RlID0+IHtcbiAgICAgIHJldHVybiBpc0VsZW1lbnQkNihub2RlKSAmJiBub2RlLnRhZ05hbWUgPT09ICdTUEFOJyAmJiBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1tY2UtdHlwZScpID09PSAnYm9va21hcmsnO1xuICAgIH07XG5cbiAgICBjb25zdCBpcyA9IGV4cGVjdGVkID0+IGFjdHVhbCA9PiBleHBlY3RlZCA9PT0gYWN0dWFsO1xuICAgIGNvbnN0IGlzTmJzcCA9IGlzKG5ic3ApO1xuICAgIGNvbnN0IGlzV2hpdGVTcGFjZSA9IGNociA9PiBjaHIgIT09ICcnICYmICcgXFxmXFxuXFxyXFx0XFx4MEInLmluZGV4T2YoY2hyKSAhPT0gLTE7XG4gICAgY29uc3QgaXNDb250ZW50ID0gY2hyID0+ICFpc1doaXRlU3BhY2UoY2hyKSAmJiAhaXNOYnNwKGNocikgJiYgIWlzWndzcCQyKGNocik7XG5cbiAgICBjb25zdCBoZXhDb2xvdXIgPSB2YWx1ZSA9PiAoeyB2YWx1ZTogbm9ybWFsaXplSGV4KHZhbHVlKSB9KTtcbiAgICBjb25zdCBub3JtYWxpemVIZXggPSBoZXggPT4gcmVtb3ZlTGVhZGluZyhoZXgsICcjJykudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCB0b0hleCA9IGNvbXBvbmVudCA9PiB7XG4gICAgICBjb25zdCBoZXggPSBjb21wb25lbnQudG9TdHJpbmcoMTYpO1xuICAgICAgcmV0dXJuIChoZXgubGVuZ3RoID09PSAxID8gJzAnICsgaGV4IDogaGV4KS50b1VwcGVyQ2FzZSgpO1xuICAgIH07XG4gICAgY29uc3QgZnJvbVJnYmEgPSByZ2JhQ29sb3VyID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdG9IZXgocmdiYUNvbG91ci5yZWQpICsgdG9IZXgocmdiYUNvbG91ci5ncmVlbikgKyB0b0hleChyZ2JhQ29sb3VyLmJsdWUpO1xuICAgICAgcmV0dXJuIGhleENvbG91cih2YWx1ZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJnYlJlZ2V4ID0gL15cXHMqcmdiXFxzKlxcKFxccyooXFxkKylcXHMqLFxccyooXFxkKylcXHMqLFxccyooXFxkKylcXHMqXFwpXFxzKiQvaTtcbiAgICBjb25zdCByZ2JhUmVnZXggPSAvXlxccypyZ2JhXFxzKlxcKFxccyooXFxkKylcXHMqLFxccyooXFxkKylcXHMqLFxccyooXFxkKylcXHMqLFxccyooXFxkPyg/OlxcLlxcZCspPylcXHMqXFwpXFxzKiQvaTtcbiAgICBjb25zdCByZ2JhQ29sb3VyID0gKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKSA9PiAoe1xuICAgICAgcmVkLFxuICAgICAgZ3JlZW4sXG4gICAgICBibHVlLFxuICAgICAgYWxwaGFcbiAgICB9KTtcbiAgICBjb25zdCBmcm9tU3RyaW5nVmFsdWVzID0gKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKSA9PiB7XG4gICAgICBjb25zdCByID0gcGFyc2VJbnQocmVkLCAxMCk7XG4gICAgICBjb25zdCBnID0gcGFyc2VJbnQoZ3JlZW4sIDEwKTtcbiAgICAgIGNvbnN0IGIgPSBwYXJzZUludChibHVlLCAxMCk7XG4gICAgICBjb25zdCBhID0gcGFyc2VGbG9hdChhbHBoYSk7XG4gICAgICByZXR1cm4gcmdiYUNvbG91cihyLCBnLCBiLCBhKTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21TdHJpbmcgPSByZ2JhU3RyaW5nID0+IHtcbiAgICAgIGlmIChyZ2JhU3RyaW5nID09PSAndHJhbnNwYXJlbnQnKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHJnYmFDb2xvdXIoMCwgMCwgMCwgMCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmdiTWF0Y2ggPSByZ2JSZWdleC5leGVjKHJnYmFTdHJpbmcpO1xuICAgICAgaWYgKHJnYk1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGZyb21TdHJpbmdWYWx1ZXMocmdiTWF0Y2hbMV0sIHJnYk1hdGNoWzJdLCByZ2JNYXRjaFszXSwgJzEnKSk7XG4gICAgICB9XG4gICAgICBjb25zdCByZ2JhTWF0Y2ggPSByZ2JhUmVnZXguZXhlYyhyZ2JhU3RyaW5nKTtcbiAgICAgIGlmIChyZ2JhTWF0Y2ggIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoZnJvbVN0cmluZ1ZhbHVlcyhyZ2JhTWF0Y2hbMV0sIHJnYmFNYXRjaFsyXSwgcmdiYU1hdGNoWzNdLCByZ2JhTWF0Y2hbNF0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJnYmFUb0hleFN0cmluZyA9IGNvbG9yID0+IGZyb21TdHJpbmcoY29sb3IpLm1hcChmcm9tUmdiYSkubWFwKGggPT4gJyMnICsgaC52YWx1ZSkuZ2V0T3IoY29sb3IpO1xuXG4gICAgY29uc3QgZ2V0UmFuZ2VzJDEgPSBzZWxlY3Rpb24gPT4ge1xuICAgICAgY29uc3QgcmFuZ2VzID0gW107XG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0aW9uLnJhbmdlQ291bnQ7IGkrKykge1xuICAgICAgICAgIHJhbmdlcy5wdXNoKHNlbGVjdGlvbi5nZXRSYW5nZUF0KGkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJhbmdlcztcbiAgICB9O1xuICAgIGNvbnN0IGdldFNlbGVjdGVkTm9kZXMgPSByYW5nZXMgPT4ge1xuICAgICAgcmV0dXJuIGJpbmQkMyhyYW5nZXMsIHJhbmdlID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGdldFNlbGVjdGVkTm9kZShyYW5nZSk7XG4gICAgICAgIHJldHVybiBub2RlID8gW1N1Z2FyRWxlbWVudC5mcm9tRG9tKG5vZGUpXSA6IFtdO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNNdWx0aXBsZVJhbmdlcyA9IHNlbGVjdGlvbiA9PiB7XG4gICAgICByZXR1cm4gZ2V0UmFuZ2VzJDEoc2VsZWN0aW9uKS5sZW5ndGggPiAxO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRDZWxsc0Zyb21SYW5nZXMgPSByYW5nZXMgPT4gZmlsdGVyJDUoZ2V0U2VsZWN0ZWROb2RlcyhyYW5nZXMpLCBpc1RhYmxlQ2VsbCQyKTtcbiAgICBjb25zdCBnZXRDZWxsc0Zyb21FbGVtZW50ID0gZWxtID0+IGRlc2NlbmRhbnRzKGVsbSwgJ3RkW2RhdGEtbWNlLXNlbGVjdGVkXSx0aFtkYXRhLW1jZS1zZWxlY3RlZF0nKTtcbiAgICBjb25zdCBnZXRDZWxsc0Zyb21FbGVtZW50T3JSYW5nZXMgPSAocmFuZ2VzLCBlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZENlbGxzID0gZ2V0Q2VsbHNGcm9tRWxlbWVudChlbGVtZW50KTtcbiAgICAgIHJldHVybiBzZWxlY3RlZENlbGxzLmxlbmd0aCA+IDAgPyBzZWxlY3RlZENlbGxzIDogZ2V0Q2VsbHNGcm9tUmFuZ2VzKHJhbmdlcyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRDZWxsc0Zyb21FZGl0b3IgPSBlZGl0b3IgPT4gZ2V0Q2VsbHNGcm9tRWxlbWVudE9yUmFuZ2VzKGdldFJhbmdlcyQxKGVkaXRvci5zZWxlY3Rpb24uZ2V0U2VsKCkpLCBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKSk7XG4gICAgY29uc3QgZ2V0Q2xvc2VzdFRhYmxlID0gKGNlbGwsIGlzUm9vdCkgPT4gYW5jZXN0b3IkMyhjZWxsLCAndGFibGUnLCBpc1Jvb3QpO1xuXG4gICAgY29uc3QgZ2V0U3RhcnROb2RlID0gcm5nID0+IHtcbiAgICAgIGNvbnN0IHNjID0gcm5nLnN0YXJ0Q29udGFpbmVyLCBzbyA9IHJuZy5zdGFydE9mZnNldDtcbiAgICAgIGlmIChpc1RleHQkYShzYykpIHtcbiAgICAgICAgcmV0dXJuIHNvID09PSAwID8gT3B0aW9uYWwuc29tZShTdWdhckVsZW1lbnQuZnJvbURvbShzYykpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oc2MuY2hpbGROb2Rlc1tzb10pLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRFbmROb2RlID0gcm5nID0+IHtcbiAgICAgIGNvbnN0IGVjID0gcm5nLmVuZENvbnRhaW5lciwgZW8gPSBybmcuZW5kT2Zmc2V0O1xuICAgICAgaWYgKGlzVGV4dCRhKGVjKSkge1xuICAgICAgICByZXR1cm4gZW8gPT09IGVjLmRhdGEubGVuZ3RoID8gT3B0aW9uYWwuc29tZShTdWdhckVsZW1lbnQuZnJvbURvbShlYykpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oZWMuY2hpbGROb2Rlc1tlbyAtIDFdKS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ2V0Rmlyc3RDaGlsZHJlbiA9IG5vZGUgPT4ge1xuICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQobm9kZSkuZm9sZChjb25zdGFudChbbm9kZV0pLCBjaGlsZCA9PiB7XG4gICAgICAgIHJldHVybiBbbm9kZV0uY29uY2F0KGdldEZpcnN0Q2hpbGRyZW4oY2hpbGQpKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0TGFzdENoaWxkcmVuID0gbm9kZSA9PiB7XG4gICAgICByZXR1cm4gbGFzdENoaWxkKG5vZGUpLmZvbGQoY29uc3RhbnQoW25vZGVdKSwgY2hpbGQgPT4ge1xuICAgICAgICBpZiAobmFtZShjaGlsZCkgPT09ICdicicpIHtcbiAgICAgICAgICByZXR1cm4gcHJldlNpYmxpbmcoY2hpbGQpLm1hcChzaWJsaW5nID0+IHtcbiAgICAgICAgICAgIHJldHVybiBbbm9kZV0uY29uY2F0KGdldExhc3RDaGlsZHJlbihzaWJsaW5nKSk7XG4gICAgICAgICAgfSkuZ2V0T3IoW10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBbbm9kZV0uY29uY2F0KGdldExhc3RDaGlsZHJlbihjaGlsZCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGhhc0FsbENvbnRlbnRzU2VsZWN0ZWQgPSAoZWxtLCBybmcpID0+IHtcbiAgICAgIHJldHVybiBsaWZ0MihnZXRTdGFydE5vZGUocm5nKSwgZ2V0RW5kTm9kZShybmcpLCAoc3RhcnROb2RlLCBlbmROb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gZmluZCQyKGdldEZpcnN0Q2hpbGRyZW4oZWxtKSwgY3VycnkoZXEsIHN0YXJ0Tm9kZSkpO1xuICAgICAgICBjb25zdCBlbmQgPSBmaW5kJDIoZ2V0TGFzdENoaWxkcmVuKGVsbSksIGN1cnJ5KGVxLCBlbmROb2RlKSk7XG4gICAgICAgIHJldHVybiBzdGFydC5pc1NvbWUoKSAmJiBlbmQuaXNTb21lKCk7XG4gICAgICB9KS5nZXRPcihmYWxzZSk7XG4gICAgfTtcbiAgICBjb25zdCBtb3ZlRW5kUG9pbnQgPSAoZG9tLCBybmcsIG5vZGUsIHN0YXJ0KSA9PiB7XG4gICAgICBjb25zdCByb290ID0gbm9kZTtcbiAgICAgIGNvbnN0IHdhbGtlciA9IG5ldyBEb21UcmVlV2Fsa2VyKG5vZGUsIHJvb3QpO1xuICAgICAgY29uc3QgbW92ZUNhcmV0QmVmb3JlT25FbnRlckVsZW1lbnRzTWFwID0gZmlsdGVyJDQoZG9tLnNjaGVtYS5nZXRNb3ZlQ2FyZXRCZWZvcmVPbkVudGVyRWxlbWVudHMoKSwgKF8sIG5hbWUpID0+ICFjb250YWlucyQyKFtcbiAgICAgICAgJ3RkJyxcbiAgICAgICAgJ3RoJyxcbiAgICAgICAgJ3RhYmxlJ1xuICAgICAgXSwgbmFtZS50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICBsZXQgY3VycmVudE5vZGUgPSBub2RlO1xuICAgICAgZG8ge1xuICAgICAgICBpZiAoaXNUZXh0JGEoY3VycmVudE5vZGUpICYmIFRvb2xzLnRyaW0oY3VycmVudE5vZGUuZGF0YSkubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgICAgICBybmcuc2V0U3RhcnQoY3VycmVudE5vZGUsIDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBybmcuc2V0RW5kKGN1cnJlbnROb2RlLCBjdXJyZW50Tm9kZS5kYXRhLmxlbmd0aCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW92ZUNhcmV0QmVmb3JlT25FbnRlckVsZW1lbnRzTWFwW2N1cnJlbnROb2RlLm5vZGVOYW1lXSkge1xuICAgICAgICAgIGlmIChzdGFydCkge1xuICAgICAgICAgICAgcm5nLnNldFN0YXJ0QmVmb3JlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlLm5vZGVOYW1lID09PSAnQlInKSB7XG4gICAgICAgICAgICAgIHJuZy5zZXRFbmRCZWZvcmUoY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm5nLnNldEVuZEFmdGVyKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IHdoaWxlIChjdXJyZW50Tm9kZSA9IHN0YXJ0ID8gd2Fsa2VyLm5leHQoKSA6IHdhbGtlci5wcmV2KCkpO1xuICAgICAgaWYgKHJvb3Qubm9kZU5hbWUgPT09ICdCT0RZJykge1xuICAgICAgICBpZiAoc3RhcnQpIHtcbiAgICAgICAgICBybmcuc2V0U3RhcnQocm9vdCwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcm5nLnNldEVuZChyb290LCByb290LmNoaWxkTm9kZXMubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaGFzQW55UmFuZ2VzID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHNlbCA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0U2VsKCk7XG4gICAgICByZXR1cm4gaXNOb25OdWxsYWJsZShzZWwpICYmIHNlbC5yYW5nZUNvdW50ID4gMDtcbiAgICB9O1xuICAgIGNvbnN0IHJ1bk9uUmFuZ2VzID0gKGVkaXRvciwgZXhlY3V0b3IpID0+IHtcbiAgICAgIGNvbnN0IGZha2VTZWxlY3Rpb25Ob2RlcyA9IGdldENlbGxzRnJvbUVkaXRvcihlZGl0b3IpO1xuICAgICAgaWYgKGZha2VTZWxlY3Rpb25Ob2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVhY2gkZShmYWtlU2VsZWN0aW9uTm9kZXMsIGVsZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBlbGVtLmRvbTtcbiAgICAgICAgICBjb25zdCBmYWtlTm9kZVJuZyA9IGVkaXRvci5kb20uY3JlYXRlUm5nKCk7XG4gICAgICAgICAgZmFrZU5vZGVSbmcuc2V0U3RhcnRCZWZvcmUobm9kZSk7XG4gICAgICAgICAgZmFrZU5vZGVSbmcuc2V0RW5kQWZ0ZXIobm9kZSk7XG4gICAgICAgICAgZXhlY3V0b3IoZmFrZU5vZGVSbmcsIHRydWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4ZWN1dG9yKGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCksIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHByZXNlcnZlID0gKHNlbGVjdGlvbiwgZmlsbEJvb2ttYXJrLCBleGVjdXRvcikgPT4ge1xuICAgICAgY29uc3QgYm9va21hcmsgPSBnZXRQZXJzaXN0ZW50Qm9va21hcmsoc2VsZWN0aW9uLCBmaWxsQm9va21hcmspO1xuICAgICAgZXhlY3V0b3IoYm9va21hcmspO1xuICAgICAgc2VsZWN0aW9uLm1vdmVUb0Jvb2ttYXJrKGJvb2ttYXJrKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNOb2RlID0gbm9kZSA9PiBpc051bWJlcihub2RlID09PSBudWxsIHx8IG5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG5vZGUubm9kZVR5cGUpO1xuICAgIGNvbnN0IGlzRWxlbWVudE5vZGUkMSA9IG5vZGUgPT4gaXNFbGVtZW50JDYobm9kZSkgJiYgIWlzQm9va21hcmtOb2RlJDEobm9kZSkgJiYgIWlzQ2FyZXROb2RlKG5vZGUpICYmICFpc0JvZ3VzJDIobm9kZSk7XG4gICAgY29uc3QgaXNFbGVtZW50RGlyZWN0bHlTZWxlY3RlZCA9IChkb20sIG5vZGUpID0+IHtcbiAgICAgIGlmIChpc0VsZW1lbnROb2RlJDEobm9kZSkgJiYgIS9eKFREfFRIKSQvLnRlc3Qobm9kZS5ub2RlTmFtZSkpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRBdHRyID0gZG9tLmdldEF0dHJpYihub2RlLCAnZGF0YS1tY2Utc2VsZWN0ZWQnKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZUludChzZWxlY3RlZEF0dHIsIDEwKTtcbiAgICAgICAgcmV0dXJuICFpc05hTih2YWx1ZSkgJiYgdmFsdWUgPiAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNFZGl0YWJsZSQyID0gZWxtID0+IGVsbS5pc0NvbnRlbnRFZGl0YWJsZSA9PT0gdHJ1ZTtcbiAgICBjb25zdCBwcmVzZXJ2ZVNlbGVjdGlvbiA9IChlZGl0b3IsIGFjdGlvbiwgc2hvdWxkTW92ZVN0YXJ0KSA9PiB7XG4gICAgICBjb25zdCB7c2VsZWN0aW9uLCBkb219ID0gZWRpdG9yO1xuICAgICAgY29uc3Qgc2VsZWN0ZWROb2RlQmVmb3JlQWN0aW9uID0gc2VsZWN0aW9uLmdldE5vZGUoKTtcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWRCZWZvcmVOb2RlTm9uZWRpdGFibGUgPSBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJGIoc2VsZWN0ZWROb2RlQmVmb3JlQWN0aW9uKTtcbiAgICAgIHByZXNlcnZlKHNlbGVjdGlvbiwgdHJ1ZSwgKCkgPT4ge1xuICAgICAgICBhY3Rpb24oKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaXNCZWZvcmVOb2RlU3RpbGxOb25lZGl0YWJsZSA9IGlzU2VsZWN0ZWRCZWZvcmVOb2RlTm9uZWRpdGFibGUgJiYgaXNDb250ZW50RWRpdGFibGVGYWxzZSRiKHNlbGVjdGVkTm9kZUJlZm9yZUFjdGlvbik7XG4gICAgICBpZiAoaXNCZWZvcmVOb2RlU3RpbGxOb25lZGl0YWJsZSAmJiBkb20uaXNDaGlsZE9mKHNlbGVjdGVkTm9kZUJlZm9yZUFjdGlvbiwgZWRpdG9yLmdldEJvZHkoKSkpIHtcbiAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3Qoc2VsZWN0ZWROb2RlQmVmb3JlQWN0aW9uKTtcbiAgICAgIH0gZWxzZSBpZiAoc2hvdWxkTW92ZVN0YXJ0KHNlbGVjdGlvbi5nZXRTdGFydCgpKSkge1xuICAgICAgICBtb3ZlU3RhcnRUb05lYXJlc3RUZXh0KGRvbSwgc2VsZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1vdmVTdGFydFRvTmVhcmVzdFRleHQgPSAoZG9tLCBzZWxlY3Rpb24pID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICBjb25zdCBybmcgPSBzZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBjb25zdCB7c3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0fSA9IHJuZztcbiAgICAgIGNvbnN0IHNlbGVjdGVkTm9kZSA9IHNlbGVjdGlvbi5nZXROb2RlKCk7XG4gICAgICBpZiAoaXNFbGVtZW50RGlyZWN0bHlTZWxlY3RlZChkb20sIHNlbGVjdGVkTm9kZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGlzRWxlbWVudCQ2KHN0YXJ0Q29udGFpbmVyKSkge1xuICAgICAgICBjb25zdCBub2RlcyA9IHN0YXJ0Q29udGFpbmVyLmNoaWxkTm9kZXM7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBkb20uZ2V0Um9vdCgpO1xuICAgICAgICBsZXQgd2Fsa2VyO1xuICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPCBub2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBzdGFydE5vZGUgPSBub2Rlc1tzdGFydE9mZnNldF07XG4gICAgICAgICAgd2Fsa2VyID0gbmV3IERvbVRyZWVXYWxrZXIoc3RhcnROb2RlLCAoX2EgPSBkb20uZ2V0UGFyZW50KHN0YXJ0Tm9kZSwgZG9tLmlzQmxvY2spKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiByb290KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdGFydE5vZGUgPSBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICB3YWxrZXIgPSBuZXcgRG9tVHJlZVdhbGtlcihzdGFydE5vZGUsIChfYiA9IGRvbS5nZXRQYXJlbnQoc3RhcnROb2RlLCBkb20uaXNCbG9jaykpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHJvb3QpO1xuICAgICAgICAgIHdhbGtlci5uZXh0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IG5vZGUgPSB3YWxrZXIuY3VycmVudCgpOyBub2RlOyBub2RlID0gd2Fsa2VyLm5leHQoKSkge1xuICAgICAgICAgIGlmIChkb20uZ2V0Q29udGVudEVkaXRhYmxlKG5vZGUpID09PSAnZmFsc2UnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1RleHQkYShub2RlKSAmJiAhaXNXaGl0ZVNwYWNlTm9kZSQxKG5vZGUpKSB7XG4gICAgICAgICAgICBybmcuc2V0U3RhcnQobm9kZSwgMCk7XG4gICAgICAgICAgICBzZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXROb25XaGl0ZVNwYWNlU2libGluZyA9IChub2RlLCBuZXh0LCBpbmMpID0+IHtcbiAgICAgIGlmIChub2RlKSB7XG4gICAgICAgIGNvbnN0IG5leHROYW1lID0gbmV4dCA/ICduZXh0U2libGluZycgOiAncHJldmlvdXNTaWJsaW5nJztcbiAgICAgICAgZm9yIChub2RlID0gaW5jID8gbm9kZSA6IG5vZGVbbmV4dE5hbWVdOyBub2RlOyBub2RlID0gbm9kZVtuZXh0TmFtZV0pIHtcbiAgICAgICAgICBpZiAoaXNFbGVtZW50JDYobm9kZSkgfHwgIWlzV2hpdGVTcGFjZU5vZGUkMShub2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgY29uc3QgaXNUZXh0QmxvY2skMSA9IChzY2hlbWEsIG5vZGUpID0+ICEhc2NoZW1hLmdldFRleHRCbG9ja0VsZW1lbnRzKClbbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSB8fCBpc1RyYW5zcGFyZW50QmxvY2soc2NoZW1hLCBub2RlKTtcbiAgICBjb25zdCBpc1ZhbGlkID0gKGVkLCBwYXJlbnQsIGNoaWxkKSA9PiB7XG4gICAgICByZXR1cm4gZWQuc2NoZW1hLmlzVmFsaWRDaGlsZChwYXJlbnQsIGNoaWxkKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzV2hpdGVTcGFjZU5vZGUkMSA9IChub2RlLCBhbGxvd1NwYWNlcyA9IGZhbHNlKSA9PiB7XG4gICAgICBpZiAoaXNOb25OdWxsYWJsZShub2RlKSAmJiBpc1RleHQkYShub2RlKSkge1xuICAgICAgICBjb25zdCBkYXRhID0gYWxsb3dTcGFjZXMgPyBub2RlLmRhdGEucmVwbGFjZSgvIC9nLCAnXFx4QTAnKSA6IG5vZGUuZGF0YTtcbiAgICAgICAgcmV0dXJuIGlzV2hpdGVzcGFjZVRleHQoZGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc0VtcHR5VGV4dE5vZGUkMSA9IG5vZGUgPT4ge1xuICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUobm9kZSkgJiYgaXNUZXh0JGEobm9kZSkgJiYgbm9kZS5sZW5ndGggPT09IDA7XG4gICAgfTtcbiAgICBjb25zdCBpc1dyYXBOb25lZGl0YWJsZVRhcmdldCA9IChlZGl0b3IsIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IGJhc2VEYXRhU2VsZWN0b3IgPSAnW2RhdGEtbWNlLWNlZi13cmFwcGFibGVdJztcbiAgICAgIGNvbnN0IGZvcm1hdE5vbmVkaXRhYmxlU2VsZWN0b3IgPSBnZXRGb3JtYXROb25lZGl0YWJsZVNlbGVjdG9yKGVkaXRvcik7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IGlzRW1wdHkkMyhmb3JtYXROb25lZGl0YWJsZVNlbGVjdG9yKSA/IGJhc2VEYXRhU2VsZWN0b3IgOiBgJHsgYmFzZURhdGFTZWxlY3RvciB9LCR7IGZvcm1hdE5vbmVkaXRhYmxlU2VsZWN0b3IgfWA7XG4gICAgICByZXR1cm4gaXMkMShTdWdhckVsZW1lbnQuZnJvbURvbShub2RlKSwgc2VsZWN0b3IpO1xuICAgIH07XG4gICAgY29uc3QgaXNXcmFwcGFibGVOb25lZGl0YWJsZSA9IChlZGl0b3IsIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICByZXR1cm4gaXNFbGVtZW50Tm9kZSQxKG5vZGUpICYmIGRvbS5nZXRDb250ZW50RWRpdGFibGUobm9kZSkgPT09ICdmYWxzZScgJiYgaXNXcmFwTm9uZWRpdGFibGVUYXJnZXQoZWRpdG9yLCBub2RlKSAmJiBkb20uc2VsZWN0KCdbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXScsIG5vZGUpLmxlbmd0aCA9PT0gMDtcbiAgICB9O1xuICAgIGNvbnN0IHJlcGxhY2VWYXJzID0gKHZhbHVlLCB2YXJzKSA9PiB7XG4gICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlKHZhcnMpO1xuICAgICAgfSBlbHNlIGlmIChpc05vbk51bGxhYmxlKHZhcnMpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvJShcXHcrKS9nLCAoc3RyLCBuYW1lKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHZhcnNbbmFtZV0gfHwgc3RyO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIGNvbnN0IGlzRXEkNSA9IChzdHIxLCBzdHIyKSA9PiB7XG4gICAgICBzdHIxID0gc3RyMSB8fCAnJztcbiAgICAgIHN0cjIgPSBzdHIyIHx8ICcnO1xuICAgICAgc3RyMSA9ICcnICsgKHN0cjEubm9kZU5hbWUgfHwgc3RyMSk7XG4gICAgICBzdHIyID0gJycgKyAoc3RyMi5ub2RlTmFtZSB8fCBzdHIyKTtcbiAgICAgIHJldHVybiBzdHIxLnRvTG93ZXJDYXNlKCkgPT09IHN0cjIudG9Mb3dlckNhc2UoKTtcbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZVN0eWxlVmFsdWUgPSAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgIGlmIChpc051bGxhYmxlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBzdHJWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIGlmIChuYW1lID09PSAnY29sb3InIHx8IG5hbWUgPT09ICdiYWNrZ3JvdW5kQ29sb3InKSB7XG4gICAgICAgICAgc3RyVmFsdWUgPSByZ2JhVG9IZXhTdHJpbmcoc3RyVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lID09PSAnZm9udFdlaWdodCcgJiYgdmFsdWUgPT09IDcwMCkge1xuICAgICAgICAgIHN0clZhbHVlID0gJ2JvbGQnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lID09PSAnZm9udEZhbWlseScpIHtcbiAgICAgICAgICBzdHJWYWx1ZSA9IHN0clZhbHVlLnJlcGxhY2UoL1tcXCdcXFwiXS9nLCAnJykucmVwbGFjZSgvLFxccysvZywgJywnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyVmFsdWU7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRTdHlsZSA9IChkb20sIG5vZGUsIG5hbWUpID0+IHtcbiAgICAgIGNvbnN0IHN0eWxlID0gZG9tLmdldFN0eWxlKG5vZGUsIG5hbWUpO1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZVN0eWxlVmFsdWUoc3R5bGUsIG5hbWUpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0VGV4dERlY29yYXRpb24gPSAoZG9tLCBub2RlKSA9PiB7XG4gICAgICBsZXQgZGVjb3JhdGlvbjtcbiAgICAgIGRvbS5nZXRQYXJlbnQobm9kZSwgbiA9PiB7XG4gICAgICAgIGlmIChpc0VsZW1lbnQkNihuKSkge1xuICAgICAgICAgIGRlY29yYXRpb24gPSBkb20uZ2V0U3R5bGUobiwgJ3RleHQtZGVjb3JhdGlvbicpO1xuICAgICAgICAgIHJldHVybiAhIWRlY29yYXRpb24gJiYgZGVjb3JhdGlvbiAhPT0gJ25vbmUnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGVjb3JhdGlvbjtcbiAgICB9O1xuICAgIGNvbnN0IGdldFBhcmVudHMkMiA9IChkb20sIG5vZGUsIHNlbGVjdG9yKSA9PiB7XG4gICAgICByZXR1cm4gZG9tLmdldFBhcmVudHMobm9kZSwgc2VsZWN0b3IsIGRvbS5nZXRSb290KCkpO1xuICAgIH07XG4gICAgY29uc3QgaXNGb3JtYXRQcmVkaWNhdGUgPSAoZWRpdG9yLCBmb3JtYXROYW1lLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdHMgPSBlZGl0b3IuZm9ybWF0dGVyLmdldChmb3JtYXROYW1lKTtcbiAgICAgIHJldHVybiBpc05vbk51bGxhYmxlKGZvcm1hdHMpICYmIGV4aXN0cyhmb3JtYXRzLCBwcmVkaWNhdGUpO1xuICAgIH07XG4gICAgY29uc3QgaXNWYXJpYWJsZUZvcm1hdE5hbWUgPSAoZWRpdG9yLCBmb3JtYXROYW1lKSA9PiB7XG4gICAgICBjb25zdCBoYXNWYXJpYWJsZVZhbHVlcyA9IGZvcm1hdCA9PiB7XG4gICAgICAgIGNvbnN0IGlzVmFyaWFibGVWYWx1ZSA9IHZhbCA9PiBpc0Z1bmN0aW9uKHZhbCkgfHwgdmFsLmxlbmd0aCA+IDEgJiYgdmFsLmNoYXJBdCgwKSA9PT0gJyUnO1xuICAgICAgICByZXR1cm4gZXhpc3RzKFtcbiAgICAgICAgICAnc3R5bGVzJyxcbiAgICAgICAgICAnYXR0cmlidXRlcydcbiAgICAgICAgXSwga2V5ID0+IGdldCRhKGZvcm1hdCwga2V5KS5leGlzdHMoZmllbGQgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWVzID0gaXNBcnJheSQxKGZpZWxkKSA/IGZpZWxkIDogdmFsdWVzKGZpZWxkKTtcbiAgICAgICAgICByZXR1cm4gZXhpc3RzKGZpZWxkVmFsdWVzLCBpc1ZhcmlhYmxlVmFsdWUpO1xuICAgICAgICB9KSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGlzRm9ybWF0UHJlZGljYXRlKGVkaXRvciwgZm9ybWF0TmFtZSwgaGFzVmFyaWFibGVWYWx1ZXMpO1xuICAgIH07XG4gICAgY29uc3QgYXJlU2ltaWxhckZvcm1hdHMgPSAoZWRpdG9yLCBmb3JtYXROYW1lLCBvdGhlckZvcm1hdE5hbWUpID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkS2V5cyA9IFtcbiAgICAgICAgJ2lubGluZScsXG4gICAgICAgICdibG9jaycsXG4gICAgICAgICdzZWxlY3RvcicsXG4gICAgICAgICdhdHRyaWJ1dGVzJyxcbiAgICAgICAgJ3N0eWxlcycsXG4gICAgICAgICdjbGFzc2VzJ1xuICAgICAgXTtcbiAgICAgIGNvbnN0IGZpbHRlck9iaiA9IGZvcm1hdCA9PiBmaWx0ZXIkNChmb3JtYXQsIChfLCBrZXkpID0+IGV4aXN0cyh2YWxpZEtleXMsIHZhbGlkS2V5ID0+IHZhbGlkS2V5ID09PSBrZXkpKTtcbiAgICAgIHJldHVybiBpc0Zvcm1hdFByZWRpY2F0ZShlZGl0b3IsIGZvcm1hdE5hbWUsIGZtdDEgPT4ge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEZtdDEgPSBmaWx0ZXJPYmooZm10MSk7XG4gICAgICAgIHJldHVybiBpc0Zvcm1hdFByZWRpY2F0ZShlZGl0b3IsIG90aGVyRm9ybWF0TmFtZSwgZm10MiA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRGbXQyID0gZmlsdGVyT2JqKGZtdDIpO1xuICAgICAgICAgIHJldHVybiBlcXVhbCQxKGZpbHRlcmVkRm10MSwgZmlsdGVyZWRGbXQyKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQmxvY2tGb3JtYXQgPSBmb3JtYXQgPT4gaGFzTm9uTnVsbGFibGVLZXkoZm9ybWF0LCAnYmxvY2snKTtcbiAgICBjb25zdCBpc1dyYXBwaW5nQmxvY2tGb3JtYXQgPSBmb3JtYXQgPT4gaXNCbG9ja0Zvcm1hdChmb3JtYXQpICYmIGZvcm1hdC53cmFwcGVyID09PSB0cnVlO1xuICAgIGNvbnN0IGlzTm9uV3JhcHBpbmdCbG9ja0Zvcm1hdCA9IGZvcm1hdCA9PiBpc0Jsb2NrRm9ybWF0KGZvcm1hdCkgJiYgZm9ybWF0LndyYXBwZXIgIT09IHRydWU7XG4gICAgY29uc3QgaXNTZWxlY3RvckZvcm1hdCA9IGZvcm1hdCA9PiBoYXNOb25OdWxsYWJsZUtleShmb3JtYXQsICdzZWxlY3RvcicpO1xuICAgIGNvbnN0IGlzSW5saW5lRm9ybWF0ID0gZm9ybWF0ID0+IGhhc05vbk51bGxhYmxlS2V5KGZvcm1hdCwgJ2lubGluZScpO1xuICAgIGNvbnN0IGlzTWl4ZWRGb3JtYXQgPSBmb3JtYXQgPT4gaXNTZWxlY3RvckZvcm1hdChmb3JtYXQpICYmIGlzSW5saW5lRm9ybWF0KGZvcm1hdCkgJiYgaXMkMihnZXQkYShmb3JtYXQsICdtaXhlZCcpLCB0cnVlKTtcbiAgICBjb25zdCBzaG91bGRFeHBhbmRUb1NlbGVjdG9yID0gZm9ybWF0ID0+IGlzU2VsZWN0b3JGb3JtYXQoZm9ybWF0KSAmJiBmb3JtYXQuZXhwYW5kICE9PSBmYWxzZSAmJiAhaXNJbmxpbmVGb3JtYXQoZm9ybWF0KTtcblxuICAgIGNvbnN0IGlzQm9va21hcmtOb2RlID0gaXNCb29rbWFya05vZGUkMTtcbiAgICBjb25zdCBnZXRQYXJlbnRzJDEgPSBnZXRQYXJlbnRzJDI7XG4gICAgY29uc3QgaXNXaGl0ZVNwYWNlTm9kZSA9IGlzV2hpdGVTcGFjZU5vZGUkMTtcbiAgICBjb25zdCBpc1RleHRCbG9jayA9IGlzVGV4dEJsb2NrJDE7XG4gICAgY29uc3QgaXNCb2d1c0JyID0gbm9kZSA9PiB7XG4gICAgICByZXR1cm4gaXNCciQ2KG5vZGUpICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLW1jZS1ib2d1cycpICYmICFub2RlLm5leHRTaWJsaW5nO1xuICAgIH07XG4gICAgY29uc3QgZmluZFBhcmVudENvbnRlbnRFZGl0YWJsZSA9IChkb20sIG5vZGUpID0+IHtcbiAgICAgIGxldCBwYXJlbnQgPSBub2RlO1xuICAgICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgICBpZiAoaXNFbGVtZW50JDYocGFyZW50KSAmJiBkb20uZ2V0Q29udGVudEVkaXRhYmxlKHBhcmVudCkpIHtcbiAgICAgICAgICByZXR1cm4gZG9tLmdldENvbnRlbnRFZGl0YWJsZShwYXJlbnQpID09PSAnZmFsc2UnID8gcGFyZW50IDogbm9kZTtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlO1xuICAgIH07XG4gICAgY29uc3Qgd2Fsa1RleHQgPSAoc3RhcnQsIG5vZGUsIG9mZnNldCwgcHJlZGljYXRlKSA9PiB7XG4gICAgICBjb25zdCBzdHIgPSBub2RlLmRhdGE7XG4gICAgICBpZiAoc3RhcnQpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IG9mZnNldDsgaSA+IDA7IGktLSkge1xuICAgICAgICAgIGlmIChwcmVkaWNhdGUoc3RyLmNoYXJBdChpIC0gMSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGkgPSBvZmZzZXQ7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAocHJlZGljYXRlKHN0ci5jaGFyQXQoaSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRTcGFjZSA9IChzdGFydCwgbm9kZSwgb2Zmc2V0KSA9PiB3YWxrVGV4dChzdGFydCwgbm9kZSwgb2Zmc2V0LCBjID0+IGlzTmJzcChjKSB8fCBpc1doaXRlU3BhY2UoYykpO1xuICAgIGNvbnN0IGZpbmRDb250ZW50ID0gKHN0YXJ0LCBub2RlLCBvZmZzZXQpID0+IHdhbGtUZXh0KHN0YXJ0LCBub2RlLCBvZmZzZXQsIGlzQ29udGVudCk7XG4gICAgY29uc3QgZmluZFdvcmRFbmRQb2ludCA9IChkb20sIGJvZHksIGNvbnRhaW5lciwgb2Zmc2V0LCBzdGFydCwgaW5jbHVkZVRyYWlsaW5nU3BhY2VzKSA9PiB7XG4gICAgICBsZXQgbGFzdFRleHROb2RlO1xuICAgICAgY29uc3Qgcm9vdE5vZGUgPSBkb20uZ2V0UGFyZW50KGNvbnRhaW5lciwgZG9tLmlzQmxvY2spIHx8IGJvZHk7XG4gICAgICBjb25zdCB3YWxrID0gKGNvbnRhaW5lciwgb2Zmc2V0LCBwcmVkKSA9PiB7XG4gICAgICAgIGNvbnN0IHRleHRTZWVrZXIgPSBUZXh0U2Vla2VyKGRvbSk7XG4gICAgICAgIGNvbnN0IHdhbGtlciA9IHN0YXJ0ID8gdGV4dFNlZWtlci5iYWNrd2FyZHMgOiB0ZXh0U2Vla2VyLmZvcndhcmRzO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbSh3YWxrZXIoY29udGFpbmVyLCBvZmZzZXQsICh0ZXh0LCB0ZXh0T2Zmc2V0KSA9PiB7XG4gICAgICAgICAgaWYgKGlzQm9va21hcmtOb2RlKHRleHQucGFyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGFzdFRleHROb2RlID0gdGV4dDtcbiAgICAgICAgICAgIHJldHVybiBwcmVkKHN0YXJ0LCB0ZXh0LCB0ZXh0T2Zmc2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHJvb3ROb2RlKSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc3BhY2VSZXN1bHQgPSB3YWxrKGNvbnRhaW5lciwgb2Zmc2V0LCBmaW5kU3BhY2UpO1xuICAgICAgcmV0dXJuIHNwYWNlUmVzdWx0LmJpbmQocmVzdWx0ID0+IGluY2x1ZGVUcmFpbGluZ1NwYWNlcyA/IHdhbGsocmVzdWx0LmNvbnRhaW5lciwgcmVzdWx0Lm9mZnNldCArIChzdGFydCA/IC0xIDogMCksIGZpbmRDb250ZW50KSA6IE9wdGlvbmFsLnNvbWUocmVzdWx0KSkub3JUaHVuaygoKSA9PiBsYXN0VGV4dE5vZGUgPyBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgY29udGFpbmVyOiBsYXN0VGV4dE5vZGUsXG4gICAgICAgIG9mZnNldDogc3RhcnQgPyAwIDogbGFzdFRleHROb2RlLmxlbmd0aFxuICAgICAgfSkgOiBPcHRpb25hbC5ub25lKCkpO1xuICAgIH07XG4gICAgY29uc3QgZmluZFNlbGVjdG9yRW5kUG9pbnQgPSAoZG9tLCBmb3JtYXRMaXN0LCBybmcsIGNvbnRhaW5lciwgc2libGluZ05hbWUpID0+IHtcbiAgICAgIGNvbnN0IHNpYmxpbmcgPSBjb250YWluZXJbc2libGluZ05hbWVdO1xuICAgICAgaWYgKGlzVGV4dCRhKGNvbnRhaW5lcikgJiYgaXNFbXB0eSQzKGNvbnRhaW5lci5kYXRhKSAmJiBzaWJsaW5nKSB7XG4gICAgICAgIGNvbnRhaW5lciA9IHNpYmxpbmc7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJlbnRzID0gZ2V0UGFyZW50cyQxKGRvbSwgY29udGFpbmVyKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGZvcm1hdExpc3QubGVuZ3RoOyB5KyspIHtcbiAgICAgICAgICBjb25zdCBjdXJGb3JtYXQgPSBmb3JtYXRMaXN0W3ldO1xuICAgICAgICAgIGlmIChpc05vbk51bGxhYmxlKGN1ckZvcm1hdC5jb2xsYXBzZWQpICYmIGN1ckZvcm1hdC5jb2xsYXBzZWQgIT09IHJuZy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNTZWxlY3RvckZvcm1hdChjdXJGb3JtYXQpICYmIGRvbS5pcyhwYXJlbnRzW2ldLCBjdXJGb3JtYXQuc2VsZWN0b3IpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50c1tpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kQmxvY2tFbmRQb2ludCA9IChkb20sIGZvcm1hdExpc3QsIGNvbnRhaW5lciwgc2libGluZ05hbWUpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGxldCBub2RlID0gY29udGFpbmVyO1xuICAgICAgY29uc3Qgcm9vdCA9IGRvbS5nZXRSb290KCk7XG4gICAgICBjb25zdCBmb3JtYXQgPSBmb3JtYXRMaXN0WzBdO1xuICAgICAgaWYgKGlzQmxvY2tGb3JtYXQoZm9ybWF0KSkge1xuICAgICAgICBub2RlID0gZm9ybWF0LndyYXBwZXIgPyBudWxsIDogZG9tLmdldFBhcmVudChjb250YWluZXIsIGZvcm1hdC5ibG9jaywgcm9vdCk7XG4gICAgICB9XG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgY29uc3Qgc2NvcGVSb290ID0gKF9hID0gZG9tLmdldFBhcmVudChjb250YWluZXIsICdMSSxURCxUSCcpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiByb290O1xuICAgICAgICBub2RlID0gZG9tLmdldFBhcmVudChpc1RleHQkYShjb250YWluZXIpID8gY29udGFpbmVyLnBhcmVudE5vZGUgOiBjb250YWluZXIsIG5vZGUgPT4gbm9kZSAhPT0gcm9vdCAmJiBpc1RleHRCbG9jayhkb20uc2NoZW1hLCBub2RlKSwgc2NvcGVSb290KTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlICYmIGlzQmxvY2tGb3JtYXQoZm9ybWF0KSAmJiBmb3JtYXQud3JhcHBlcikge1xuICAgICAgICBub2RlID0gZ2V0UGFyZW50cyQxKGRvbSwgbm9kZSwgJ3VsLG9sJykucmV2ZXJzZSgpWzBdIHx8IG5vZGU7XG4gICAgICB9XG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgbm9kZSA9IGNvbnRhaW5lcjtcbiAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZVtzaWJsaW5nTmFtZV0gJiYgIWRvbS5pc0Jsb2NrKG5vZGVbc2libGluZ05hbWVdKSkge1xuICAgICAgICAgIG5vZGUgPSBub2RlW3NpYmxpbmdOYW1lXTtcbiAgICAgICAgICBpZiAoaXNFcSQ1KG5vZGUsICdicicpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlIHx8IGNvbnRhaW5lcjtcbiAgICB9O1xuICAgIGNvbnN0IGlzQXRCbG9ja0JvdW5kYXJ5JDEgPSAoZG9tLCByb290LCBjb250YWluZXIsIHNpYmxpbmdOYW1lKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgIGlmIChpc05vbk51bGxhYmxlKGNvbnRhaW5lcltzaWJsaW5nTmFtZV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAocGFyZW50ID09PSByb290IHx8IGlzTnVsbGFibGUocGFyZW50KSB8fCBkb20uaXNCbG9jayhwYXJlbnQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGlzQXRCbG9ja0JvdW5kYXJ5JDEoZG9tLCByb290LCBwYXJlbnQsIHNpYmxpbmdOYW1lKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRQYXJlbnRDb250YWluZXIgPSAoZG9tLCBmb3JtYXRMaXN0LCBjb250YWluZXIsIG9mZnNldCwgc3RhcnQpID0+IHtcbiAgICAgIGxldCBwYXJlbnQgPSBjb250YWluZXI7XG4gICAgICBjb25zdCBzaWJsaW5nTmFtZSA9IHN0YXJ0ID8gJ3ByZXZpb3VzU2libGluZycgOiAnbmV4dFNpYmxpbmcnO1xuICAgICAgY29uc3Qgcm9vdCA9IGRvbS5nZXRSb290KCk7XG4gICAgICBpZiAoaXNUZXh0JGEoY29udGFpbmVyKSAmJiAhaXNXaGl0ZVNwYWNlTm9kZShjb250YWluZXIpKSB7XG4gICAgICAgIGlmIChzdGFydCA/IG9mZnNldCA+IDAgOiBvZmZzZXQgPCBjb250YWluZXIuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgIGlmICghZm9ybWF0TGlzdFswXS5ibG9ja19leHBhbmQgJiYgZG9tLmlzQmxvY2socGFyZW50KSkge1xuICAgICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgc2libGluZyA9IHBhcmVudFtzaWJsaW5nTmFtZV07IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nW3NpYmxpbmdOYW1lXSkge1xuICAgICAgICAgIGNvbnN0IGFsbG93U3BhY2VzID0gaXNUZXh0JGEoc2libGluZykgJiYgIWlzQXRCbG9ja0JvdW5kYXJ5JDEoZG9tLCByb290LCBzaWJsaW5nLCBzaWJsaW5nTmFtZSk7XG4gICAgICAgICAgaWYgKCFpc0Jvb2ttYXJrTm9kZShzaWJsaW5nKSAmJiAhaXNCb2d1c0JyKHNpYmxpbmcpICYmICFpc1doaXRlU3BhY2VOb2RlKHNpYmxpbmcsIGFsbG93U3BhY2VzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmVudCA9PT0gcm9vdCB8fCBwYXJlbnQucGFyZW50Tm9kZSA9PT0gcm9vdCkge1xuICAgICAgICAgIGNvbnRhaW5lciA9IHBhcmVudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgfTtcbiAgICBjb25zdCBpc1NlbGZPclBhcmVudEJvb2ttYXJrID0gY29udGFpbmVyID0+IGlzQm9va21hcmtOb2RlKGNvbnRhaW5lci5wYXJlbnROb2RlKSB8fCBpc0Jvb2ttYXJrTm9kZShjb250YWluZXIpO1xuICAgIGNvbnN0IGV4cGFuZFJuZyA9IChkb20sIHJuZywgZm9ybWF0TGlzdCwgaW5jbHVkZVRyYWlsaW5nU3BhY2UgPSBmYWxzZSkgPT4ge1xuICAgICAgbGV0IHtzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQsIGVuZENvbnRhaW5lciwgZW5kT2Zmc2V0fSA9IHJuZztcbiAgICAgIGNvbnN0IGZvcm1hdCA9IGZvcm1hdExpc3RbMF07XG4gICAgICBpZiAoaXNFbGVtZW50JDYoc3RhcnRDb250YWluZXIpICYmIHN0YXJ0Q29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICBzdGFydENvbnRhaW5lciA9IGdldE5vZGUkMShzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQpO1xuICAgICAgICBpZiAoaXNUZXh0JGEoc3RhcnRDb250YWluZXIpKSB7XG4gICAgICAgICAgc3RhcnRPZmZzZXQgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNFbGVtZW50JDYoZW5kQ29udGFpbmVyKSAmJiBlbmRDb250YWluZXIuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgIGVuZENvbnRhaW5lciA9IGdldE5vZGUkMShlbmRDb250YWluZXIsIHJuZy5jb2xsYXBzZWQgPyBlbmRPZmZzZXQgOiBlbmRPZmZzZXQgLSAxKTtcbiAgICAgICAgaWYgKGlzVGV4dCRhKGVuZENvbnRhaW5lcikpIHtcbiAgICAgICAgICBlbmRPZmZzZXQgPSBlbmRDb250YWluZXIuZGF0YS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0YXJ0Q29udGFpbmVyID0gZmluZFBhcmVudENvbnRlbnRFZGl0YWJsZShkb20sIHN0YXJ0Q29udGFpbmVyKTtcbiAgICAgIGVuZENvbnRhaW5lciA9IGZpbmRQYXJlbnRDb250ZW50RWRpdGFibGUoZG9tLCBlbmRDb250YWluZXIpO1xuICAgICAgaWYgKGlzU2VsZk9yUGFyZW50Qm9va21hcmsoc3RhcnRDb250YWluZXIpKSB7XG4gICAgICAgIHN0YXJ0Q29udGFpbmVyID0gaXNCb29rbWFya05vZGUoc3RhcnRDb250YWluZXIpID8gc3RhcnRDb250YWluZXIgOiBzdGFydENvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgICAgICBpZiAocm5nLmNvbGxhcHNlZCkge1xuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyID0gc3RhcnRDb250YWluZXIucHJldmlvdXNTaWJsaW5nIHx8IHN0YXJ0Q29udGFpbmVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyID0gc3RhcnRDb250YWluZXIubmV4dFNpYmxpbmcgfHwgc3RhcnRDb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVGV4dCRhKHN0YXJ0Q29udGFpbmVyKSkge1xuICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gcm5nLmNvbGxhcHNlZCA/IHN0YXJ0Q29udGFpbmVyLmxlbmd0aCA6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpc1NlbGZPclBhcmVudEJvb2ttYXJrKGVuZENvbnRhaW5lcikpIHtcbiAgICAgICAgZW5kQ29udGFpbmVyID0gaXNCb29rbWFya05vZGUoZW5kQ29udGFpbmVyKSA/IGVuZENvbnRhaW5lciA6IGVuZENvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgICAgICBpZiAocm5nLmNvbGxhcHNlZCkge1xuICAgICAgICAgIGVuZENvbnRhaW5lciA9IGVuZENvbnRhaW5lci5uZXh0U2libGluZyB8fCBlbmRDb250YWluZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5kQ29udGFpbmVyID0gZW5kQ29udGFpbmVyLnByZXZpb3VzU2libGluZyB8fCBlbmRDb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVGV4dCRhKGVuZENvbnRhaW5lcikpIHtcbiAgICAgICAgICBlbmRPZmZzZXQgPSBybmcuY29sbGFwc2VkID8gMCA6IGVuZENvbnRhaW5lci5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChybmcuY29sbGFwc2VkKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0UG9pbnQgPSBmaW5kV29yZEVuZFBvaW50KGRvbSwgZG9tLmdldFJvb3QoKSwgc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0LCB0cnVlLCBpbmNsdWRlVHJhaWxpbmdTcGFjZSk7XG4gICAgICAgIHN0YXJ0UG9pbnQuZWFjaCgoe2NvbnRhaW5lciwgb2Zmc2V0fSkgPT4ge1xuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyID0gY29udGFpbmVyO1xuICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5kUG9pbnQgPSBmaW5kV29yZEVuZFBvaW50KGRvbSwgZG9tLmdldFJvb3QoKSwgZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQsIGZhbHNlLCBpbmNsdWRlVHJhaWxpbmdTcGFjZSk7XG4gICAgICAgIGVuZFBvaW50LmVhY2goKHtjb250YWluZXIsIG9mZnNldH0pID0+IHtcbiAgICAgICAgICBlbmRDb250YWluZXIgPSBjb250YWluZXI7XG4gICAgICAgICAgZW5kT2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0lubGluZUZvcm1hdChmb3JtYXQpIHx8IGZvcm1hdC5ibG9ja19leHBhbmQpIHtcbiAgICAgICAgaWYgKCFpc0lubGluZUZvcm1hdChmb3JtYXQpIHx8ICghaXNUZXh0JGEoc3RhcnRDb250YWluZXIpIHx8IHN0YXJ0T2Zmc2V0ID09PSAwKSkge1xuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyID0gZmluZFBhcmVudENvbnRhaW5lcihkb20sIGZvcm1hdExpc3QsIHN0YXJ0Q29udGFpbmVyLCBzdGFydE9mZnNldCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0lubGluZUZvcm1hdChmb3JtYXQpIHx8ICghaXNUZXh0JGEoZW5kQ29udGFpbmVyKSB8fCBlbmRPZmZzZXQgPT09IGVuZENvbnRhaW5lci5kYXRhLmxlbmd0aCkpIHtcbiAgICAgICAgICBlbmRDb250YWluZXIgPSBmaW5kUGFyZW50Q29udGFpbmVyKGRvbSwgZm9ybWF0TGlzdCwgZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHNob3VsZEV4cGFuZFRvU2VsZWN0b3IoZm9ybWF0KSkge1xuICAgICAgICBzdGFydENvbnRhaW5lciA9IGZpbmRTZWxlY3RvckVuZFBvaW50KGRvbSwgZm9ybWF0TGlzdCwgcm5nLCBzdGFydENvbnRhaW5lciwgJ3ByZXZpb3VzU2libGluZycpO1xuICAgICAgICBlbmRDb250YWluZXIgPSBmaW5kU2VsZWN0b3JFbmRQb2ludChkb20sIGZvcm1hdExpc3QsIHJuZywgZW5kQ29udGFpbmVyLCAnbmV4dFNpYmxpbmcnKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0Jsb2NrRm9ybWF0KGZvcm1hdCkgfHwgaXNTZWxlY3RvckZvcm1hdChmb3JtYXQpKSB7XG4gICAgICAgIHN0YXJ0Q29udGFpbmVyID0gZmluZEJsb2NrRW5kUG9pbnQoZG9tLCBmb3JtYXRMaXN0LCBzdGFydENvbnRhaW5lciwgJ3ByZXZpb3VzU2libGluZycpO1xuICAgICAgICBlbmRDb250YWluZXIgPSBmaW5kQmxvY2tFbmRQb2ludChkb20sIGZvcm1hdExpc3QsIGVuZENvbnRhaW5lciwgJ25leHRTaWJsaW5nJyk7XG4gICAgICAgIGlmIChpc0Jsb2NrRm9ybWF0KGZvcm1hdCkpIHtcbiAgICAgICAgICBpZiAoIWRvbS5pc0Jsb2NrKHN0YXJ0Q29udGFpbmVyKSkge1xuICAgICAgICAgICAgc3RhcnRDb250YWluZXIgPSBmaW5kUGFyZW50Q29udGFpbmVyKGRvbSwgZm9ybWF0TGlzdCwgc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0LCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFkb20uaXNCbG9jayhlbmRDb250YWluZXIpKSB7XG4gICAgICAgICAgICBlbmRDb250YWluZXIgPSBmaW5kUGFyZW50Q29udGFpbmVyKGRvbSwgZm9ybWF0TGlzdCwgZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpc0VsZW1lbnQkNihzdGFydENvbnRhaW5lcikgJiYgc3RhcnRDb250YWluZXIucGFyZW50Tm9kZSkge1xuICAgICAgICBzdGFydE9mZnNldCA9IGRvbS5ub2RlSW5kZXgoc3RhcnRDb250YWluZXIpO1xuICAgICAgICBzdGFydENvbnRhaW5lciA9IHN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICB9XG4gICAgICBpZiAoaXNFbGVtZW50JDYoZW5kQ29udGFpbmVyKSAmJiBlbmRDb250YWluZXIucGFyZW50Tm9kZSkge1xuICAgICAgICBlbmRPZmZzZXQgPSBkb20ubm9kZUluZGV4KGVuZENvbnRhaW5lcikgKyAxO1xuICAgICAgICBlbmRDb250YWluZXIgPSBlbmRDb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgICAgICBzdGFydE9mZnNldCxcbiAgICAgICAgZW5kQ29udGFpbmVyLFxuICAgICAgICBlbmRPZmZzZXRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHdhbGskMyA9IChkb20sIHJuZywgY2FsbGJhY2spID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gcm5nLnN0YXJ0T2Zmc2V0O1xuICAgICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSBnZXROb2RlJDEocm5nLnN0YXJ0Q29udGFpbmVyLCBzdGFydE9mZnNldCk7XG4gICAgICBjb25zdCBlbmRPZmZzZXQgPSBybmcuZW5kT2Zmc2V0O1xuICAgICAgY29uc3QgZW5kQ29udGFpbmVyID0gZ2V0Tm9kZSQxKHJuZy5lbmRDb250YWluZXIsIGVuZE9mZnNldCAtIDEpO1xuICAgICAgY29uc3QgZXhjbHVkZSA9IG5vZGVzID0+IHtcbiAgICAgICAgY29uc3QgZmlyc3ROb2RlID0gbm9kZXNbMF07XG4gICAgICAgIGlmIChpc1RleHQkYShmaXJzdE5vZGUpICYmIGZpcnN0Tm9kZSA9PT0gc3RhcnRDb250YWluZXIgJiYgc3RhcnRPZmZzZXQgPj0gZmlyc3ROb2RlLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgbm9kZXMuc3BsaWNlKDAsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3ROb2RlID0gbm9kZXNbbm9kZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmIChlbmRPZmZzZXQgPT09IDAgJiYgbm9kZXMubGVuZ3RoID4gMCAmJiBsYXN0Tm9kZSA9PT0gZW5kQ29udGFpbmVyICYmIGlzVGV4dCRhKGxhc3ROb2RlKSkge1xuICAgICAgICAgIG5vZGVzLnNwbGljZShub2Rlcy5sZW5ndGggLSAxLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZXM7XG4gICAgICB9O1xuICAgICAgY29uc3QgY29sbGVjdFNpYmxpbmdzID0gKG5vZGUsIG5hbWUsIGVuZE5vZGUpID0+IHtcbiAgICAgICAgY29uc3Qgc2libGluZ3MgPSBbXTtcbiAgICAgICAgZm9yICg7IG5vZGUgJiYgbm9kZSAhPT0gZW5kTm9kZTsgbm9kZSA9IG5vZGVbbmFtZV0pIHtcbiAgICAgICAgICBzaWJsaW5ncy5wdXNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaWJsaW5ncztcbiAgICAgIH07XG4gICAgICBjb25zdCBmaW5kRW5kUG9pbnQgPSAobm9kZSwgcm9vdCkgPT4gZG9tLmdldFBhcmVudChub2RlLCBub2RlID0+IG5vZGUucGFyZW50Tm9kZSA9PT0gcm9vdCwgcm9vdCk7XG4gICAgICBjb25zdCB3YWxrQm91bmRhcnkgPSAoc3RhcnROb2RlLCBlbmROb2RlLCBuZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHNpYmxpbmdOYW1lID0gbmV4dCA/ICduZXh0U2libGluZycgOiAncHJldmlvdXNTaWJsaW5nJztcbiAgICAgICAgZm9yIChsZXQgbm9kZSA9IHN0YXJ0Tm9kZSwgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlOyBub2RlICYmIG5vZGUgIT09IGVuZE5vZGU7IG5vZGUgPSBwYXJlbnQpIHtcbiAgICAgICAgICBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICAgICAgY29uc3Qgc2libGluZ3MgPSBjb2xsZWN0U2libGluZ3Mobm9kZSA9PT0gc3RhcnROb2RlID8gbm9kZSA6IG5vZGVbc2libGluZ05hbWVdLCBzaWJsaW5nTmFtZSk7XG4gICAgICAgICAgaWYgKHNpYmxpbmdzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKCFuZXh0KSB7XG4gICAgICAgICAgICAgIHNpYmxpbmdzLnJldmVyc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKGV4Y2x1ZGUoc2libGluZ3MpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpZiAoc3RhcnRDb250YWluZXIgPT09IGVuZENvbnRhaW5lcikge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXhjbHVkZShbc3RhcnRDb250YWluZXJdKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBhbmNlc3RvciA9IChfYSA9IGRvbS5maW5kQ29tbW9uQW5jZXN0b3Ioc3RhcnRDb250YWluZXIsIGVuZENvbnRhaW5lcikpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGRvbS5nZXRSb290KCk7XG4gICAgICBpZiAoZG9tLmlzQ2hpbGRPZihzdGFydENvbnRhaW5lciwgZW5kQ29udGFpbmVyKSkge1xuICAgICAgICByZXR1cm4gd2Fsa0JvdW5kYXJ5KHN0YXJ0Q29udGFpbmVyLCBhbmNlc3RvciwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoZG9tLmlzQ2hpbGRPZihlbmRDb250YWluZXIsIHN0YXJ0Q29udGFpbmVyKSkge1xuICAgICAgICByZXR1cm4gd2Fsa0JvdW5kYXJ5KGVuZENvbnRhaW5lciwgYW5jZXN0b3IpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhcnRQb2ludCA9IGZpbmRFbmRQb2ludChzdGFydENvbnRhaW5lciwgYW5jZXN0b3IpIHx8IHN0YXJ0Q29udGFpbmVyO1xuICAgICAgY29uc3QgZW5kUG9pbnQgPSBmaW5kRW5kUG9pbnQoZW5kQ29udGFpbmVyLCBhbmNlc3RvcikgfHwgZW5kQ29udGFpbmVyO1xuICAgICAgd2Fsa0JvdW5kYXJ5KHN0YXJ0Q29udGFpbmVyLCBzdGFydFBvaW50LCB0cnVlKTtcbiAgICAgIGNvbnN0IHNpYmxpbmdzID0gY29sbGVjdFNpYmxpbmdzKHN0YXJ0UG9pbnQgPT09IHN0YXJ0Q29udGFpbmVyID8gc3RhcnRQb2ludCA6IHN0YXJ0UG9pbnQubmV4dFNpYmxpbmcsICduZXh0U2libGluZycsIGVuZFBvaW50ID09PSBlbmRDb250YWluZXIgPyBlbmRQb2ludC5uZXh0U2libGluZyA6IGVuZFBvaW50KTtcbiAgICAgIGlmIChzaWJsaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgY2FsbGJhY2soZXhjbHVkZShzaWJsaW5ncykpO1xuICAgICAgfVxuICAgICAgd2Fsa0JvdW5kYXJ5KGVuZENvbnRhaW5lciwgZW5kUG9pbnQpO1xuICAgIH07XG5cbiAgICBjb25zdCB2YWxpZEJsb2NrcyA9IFtcbiAgICAgICdwcmVbY2xhc3MqPWxhbmd1YWdlLV1bY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl0nLFxuICAgICAgJ2ZpZ3VyZS5pbWFnZScsXG4gICAgICAnZGl2W2RhdGEtZXBob3gtZW1iZWQtaXJpXScsXG4gICAgICAnZGl2LnRpbnktcGFnZWVtYmVkJyxcbiAgICAgICdkaXYubWNlLXRvYycsXG4gICAgICAnZGl2W2RhdGEtbWNlLXRvY10nXG4gICAgXTtcbiAgICBjb25zdCBpc1plcm9XaWR0aCA9IGVsZW0gPT4gaXNUZXh0JGIoZWxlbSkgJiYgZ2V0JDMoZWxlbSkgPT09IFpXU1AkMTtcbiAgICBjb25zdCBjb250ZXh0ID0gKGVkaXRvciwgZWxlbSwgd3JhcE5hbWUsIG5vZGVOYW1lKSA9PiBwYXJlbnQoZWxlbSkuZm9sZCgoKSA9PiAnc2tpcHBpbmcnLCBwYXJlbnQgPT4ge1xuICAgICAgaWYgKG5vZGVOYW1lID09PSAnYnInIHx8IGlzWmVyb1dpZHRoKGVsZW0pKSB7XG4gICAgICAgIHJldHVybiAndmFsaWQnO1xuICAgICAgfSBlbHNlIGlmIChpc0Fubm90YXRpb24oZWxlbSkpIHtcbiAgICAgICAgcmV0dXJuICdleGlzdGluZyc7XG4gICAgICB9IGVsc2UgaWYgKGlzQ2FyZXROb2RlKGVsZW0uZG9tKSkge1xuICAgICAgICByZXR1cm4gJ2NhcmV0JztcbiAgICAgIH0gZWxzZSBpZiAoZXhpc3RzKHZhbGlkQmxvY2tzLCBzZWxlY3RvciA9PiBpcyQxKGVsZW0sIHNlbGVjdG9yKSkpIHtcbiAgICAgICAgcmV0dXJuICd2YWxpZC1ibG9jayc7XG4gICAgICB9IGVsc2UgaWYgKCFpc1ZhbGlkKGVkaXRvciwgd3JhcE5hbWUsIG5vZGVOYW1lKSB8fCAhaXNWYWxpZChlZGl0b3IsIG5hbWUocGFyZW50KSwgd3JhcE5hbWUpKSB7XG4gICAgICAgIHJldHVybiAnaW52YWxpZC1jaGlsZCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJ3ZhbGlkJztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGFwcGx5V29yZEdyYWIgPSAoZWRpdG9yLCBybmcpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBleHBhbmRSbmcoZWRpdG9yLmRvbSwgcm5nLCBbeyBpbmxpbmU6ICdzcGFuJyB9XSk7XG4gICAgICBybmcuc2V0U3RhcnQoci5zdGFydENvbnRhaW5lciwgci5zdGFydE9mZnNldCk7XG4gICAgICBybmcuc2V0RW5kKHIuZW5kQ29udGFpbmVyLCByLmVuZE9mZnNldCk7XG4gICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgIH07XG4gICAgY29uc3QgYXBwbHlBbm5vdGF0aW9uID0gKGVsZW0sIG1hc3RlclVJZCwgZGF0YSwgYW5ub3RhdGlvbk5hbWUsIGRlY29yYXRlLCBkaXJlY3RBbm5vdGF0aW9uKSA9PiB7XG4gICAgICBjb25zdCB7dWlkID0gbWFzdGVyVUlkLCAuLi5vdGhlckRhdGF9ID0gZGF0YTtcbiAgICAgIGFkZCQyKGVsZW0sIGFubm90YXRpb24oKSk7XG4gICAgICBzZXQkMyhlbGVtLCBgJHsgZGF0YUFubm90YXRpb25JZCgpIH1gLCB1aWQpO1xuICAgICAgc2V0JDMoZWxlbSwgYCR7IGRhdGFBbm5vdGF0aW9uKCkgfWAsIGFubm90YXRpb25OYW1lKTtcbiAgICAgIGNvbnN0IHthdHRyaWJ1dGVzID0ge30sIGNsYXNzZXMgPSBbXX0gPSBkZWNvcmF0ZSh1aWQsIG90aGVyRGF0YSk7XG4gICAgICBzZXRBbGwkMShlbGVtLCBhdHRyaWJ1dGVzKTtcbiAgICAgIGFkZChlbGVtLCBjbGFzc2VzKTtcbiAgICAgIGlmIChkaXJlY3RBbm5vdGF0aW9uKSB7XG4gICAgICAgIGlmIChjbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzZXQkMyhlbGVtLCBgJHsgZGF0YUFubm90YXRpb25DbGFzc2VzKCkgfWAsIGNsYXNzZXMuam9pbignLCcpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdHRyaWJ1dGVOYW1lcyA9IGtleXMoYXR0cmlidXRlcyk7XG4gICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2V0JDMoZWxlbSwgYCR7IGRhdGFBbm5vdGF0aW9uQXR0cmlidXRlcygpIH1gLCBhdHRyaWJ1dGVOYW1lcy5qb2luKCcsJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVEaXJlY3RBbm5vdGF0aW9uID0gZWxlbSA9PiB7XG4gICAgICByZW1vdmUkNyhlbGVtLCBhbm5vdGF0aW9uKCkpO1xuICAgICAgcmVtb3ZlJGEoZWxlbSwgYCR7IGRhdGFBbm5vdGF0aW9uSWQoKSB9YCk7XG4gICAgICByZW1vdmUkYShlbGVtLCBgJHsgZGF0YUFubm90YXRpb24oKSB9YCk7XG4gICAgICByZW1vdmUkYShlbGVtLCBgJHsgZGF0YUFubm90YXRpb25BY3RpdmUoKSB9YCk7XG4gICAgICBjb25zdCBjdXN0b21BdHRyTmFtZXMgPSBnZXRPcHQoZWxlbSwgYCR7IGRhdGFBbm5vdGF0aW9uQXR0cmlidXRlcygpIH1gKS5tYXAobmFtZXMgPT4gbmFtZXMuc3BsaXQoJywnKSkuZ2V0T3IoW10pO1xuICAgICAgY29uc3QgY3VzdG9tQ2xhc3NlcyA9IGdldE9wdChlbGVtLCBgJHsgZGF0YUFubm90YXRpb25DbGFzc2VzKCkgfWApLm1hcChuYW1lcyA9PiBuYW1lcy5zcGxpdCgnLCcpKS5nZXRPcihbXSk7XG4gICAgICBlYWNoJGUoY3VzdG9tQXR0ck5hbWVzLCBuYW1lID0+IHJlbW92ZSRhKGVsZW0sIG5hbWUpKTtcbiAgICAgIHJlbW92ZSQ0KGVsZW0sIGN1c3RvbUNsYXNzZXMpO1xuICAgICAgcmVtb3ZlJGEoZWxlbSwgYCR7IGRhdGFBbm5vdGF0aW9uQ2xhc3NlcygpIH1gKTtcbiAgICAgIHJlbW92ZSRhKGVsZW0sIGAkeyBkYXRhQW5ub3RhdGlvbkF0dHJpYnV0ZXMoKSB9YCk7XG4gICAgfTtcbiAgICBjb25zdCBtYWtlQW5ub3RhdGlvbiA9IChlRG9jLCB1aWQsIGRhdGEsIGFubm90YXRpb25OYW1lLCBkZWNvcmF0ZSkgPT4ge1xuICAgICAgY29uc3QgbWFzdGVyID0gU3VnYXJFbGVtZW50LmZyb21UYWcoJ3NwYW4nLCBlRG9jKTtcbiAgICAgIGFwcGx5QW5ub3RhdGlvbihtYXN0ZXIsIHVpZCwgZGF0YSwgYW5ub3RhdGlvbk5hbWUsIGRlY29yYXRlLCBmYWxzZSk7XG4gICAgICByZXR1cm4gbWFzdGVyO1xuICAgIH07XG4gICAgY29uc3QgYW5ub3RhdGUgPSAoZWRpdG9yLCBybmcsIHVpZCwgYW5ub3RhdGlvbk5hbWUsIGRlY29yYXRlLCBkYXRhKSA9PiB7XG4gICAgICBjb25zdCBuZXdXcmFwcGVycyA9IFtdO1xuICAgICAgY29uc3QgbWFzdGVyID0gbWFrZUFubm90YXRpb24oZWRpdG9yLmdldERvYygpLCB1aWQsIGRhdGEsIGFubm90YXRpb25OYW1lLCBkZWNvcmF0ZSk7XG4gICAgICBjb25zdCB3cmFwcGVyID0gdmFsdWUkMigpO1xuICAgICAgY29uc3QgZmluaXNoV3JhcHBlciA9ICgpID0+IHtcbiAgICAgICAgd3JhcHBlci5jbGVhcigpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldE9yT3BlbldyYXBwZXIgPSAoKSA9PiB3cmFwcGVyLmdldCgpLmdldE9yVGh1bmsoKCkgPT4ge1xuICAgICAgICBjb25zdCBudSA9IHNoYWxsb3ckMShtYXN0ZXIpO1xuICAgICAgICBuZXdXcmFwcGVycy5wdXNoKG51KTtcbiAgICAgICAgd3JhcHBlci5zZXQobnUpO1xuICAgICAgICByZXR1cm4gbnU7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb2Nlc3NFbGVtZW50cyA9IGVsZW1zID0+IHtcbiAgICAgICAgZWFjaCRlKGVsZW1zLCBwcm9jZXNzRWxlbWVudCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcHJvY2Vzc0VsZW1lbnQgPSBlbGVtID0+IHtcbiAgICAgICAgY29uc3QgY3R4ID0gY29udGV4dChlZGl0b3IsIGVsZW0sICdzcGFuJywgbmFtZShlbGVtKSk7XG4gICAgICAgIHN3aXRjaCAoY3R4KSB7XG4gICAgICAgIGNhc2UgJ2ludmFsaWQtY2hpbGQnOiB7XG4gICAgICAgICAgICBmaW5pc2hXcmFwcGVyKCk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGNoaWxkcmVuJDEoZWxlbSk7XG4gICAgICAgICAgICBwcm9jZXNzRWxlbWVudHMoY2hpbGRyZW4pO1xuICAgICAgICAgICAgZmluaXNoV3JhcHBlcigpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICd2YWxpZC1ibG9jayc6IHtcbiAgICAgICAgICAgIGZpbmlzaFdyYXBwZXIoKTtcbiAgICAgICAgICAgIGFwcGx5QW5ub3RhdGlvbihlbGVtLCB1aWQsIGRhdGEsIGFubm90YXRpb25OYW1lLCBkZWNvcmF0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3ZhbGlkJzoge1xuICAgICAgICAgICAgY29uc3QgdyA9IGdldE9yT3BlbldyYXBwZXIoKTtcbiAgICAgICAgICAgIHdyYXAkMihlbGVtLCB3KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHByb2Nlc3NOb2RlcyA9IG5vZGVzID0+IHtcbiAgICAgICAgY29uc3QgZWxlbXMgPSBtYXAkMyhub2RlcywgU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgICAgICBwcm9jZXNzRWxlbWVudHMoZWxlbXMpO1xuICAgICAgfTtcbiAgICAgIHdhbGskMyhlZGl0b3IuZG9tLCBybmcsIG5vZGVzID0+IHtcbiAgICAgICAgZmluaXNoV3JhcHBlcigpO1xuICAgICAgICBwcm9jZXNzTm9kZXMobm9kZXMpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3V3JhcHBlcnM7XG4gICAgfTtcbiAgICBjb25zdCBhbm5vdGF0ZVdpdGhCb29rbWFyayA9IChlZGl0b3IsIG5hbWUsIHNldHRpbmdzLCBkYXRhKSA9PiB7XG4gICAgICBlZGl0b3IudW5kb01hbmFnZXIudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uO1xuICAgICAgICBjb25zdCBpbml0aWFsUm5nID0gc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgICBjb25zdCBoYXNGYWtlU2VsZWN0aW9uID0gZ2V0Q2VsbHNGcm9tRWRpdG9yKGVkaXRvcikubGVuZ3RoID4gMDtcbiAgICAgICAgY29uc3QgbWFzdGVyVWlkID0gZ2VuZXJhdGUkMSgnbWNlLWFubm90YXRpb24nKTtcbiAgICAgICAgaWYgKGluaXRpYWxSbmcuY29sbGFwc2VkICYmICFoYXNGYWtlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgYXBwbHlXb3JkR3JhYihlZGl0b3IsIGluaXRpYWxSbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxlY3Rpb24uZ2V0Um5nKCkuY29sbGFwc2VkICYmICFoYXNGYWtlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgY29uc3Qgd3JhcHBlciA9IG1ha2VBbm5vdGF0aW9uKGVkaXRvci5nZXREb2MoKSwgbWFzdGVyVWlkLCBkYXRhLCBuYW1lLCBzZXR0aW5ncy5kZWNvcmF0ZSk7XG4gICAgICAgICAgc2V0JDEod3JhcHBlciwgbmJzcCk7XG4gICAgICAgICAgc2VsZWN0aW9uLmdldFJuZygpLmluc2VydE5vZGUod3JhcHBlci5kb20pO1xuICAgICAgICAgIHNlbGVjdGlvbi5zZWxlY3Qod3JhcHBlci5kb20pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXNlcnZlKHNlbGVjdGlvbiwgZmFsc2UsICgpID0+IHtcbiAgICAgICAgICAgIHJ1bk9uUmFuZ2VzKGVkaXRvciwgc2VsZWN0aW9uUm5nID0+IHtcbiAgICAgICAgICAgICAgYW5ub3RhdGUoZWRpdG9yLCBzZWxlY3Rpb25SbmcsIG1hc3RlclVpZCwgbmFtZSwgc2V0dGluZ3MuZGVjb3JhdGUsIGRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBBbm5vdGF0b3IgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgcmVnaXN0cnkgPSBjcmVhdGUkYygpO1xuICAgICAgc2V0dXAkdyhlZGl0b3IsIHJlZ2lzdHJ5KTtcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSBzZXR1cCR4KGVkaXRvciwgcmVnaXN0cnkpO1xuICAgICAgY29uc3QgaXNTcGFuID0gaXNUYWcoJ3NwYW4nKTtcbiAgICAgIGNvbnN0IHJlbW92ZUFubm90YXRpb25zID0gZWxlbWVudHMgPT4ge1xuICAgICAgICBlYWNoJGUoZWxlbWVudHMsIGVsZW1lbnQgPT4ge1xuICAgICAgICAgIGlmIChpc1NwYW4oZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHVud3JhcChlbGVtZW50KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVtb3ZlRGlyZWN0QW5ub3RhdGlvbihlbGVtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlZ2lzdGVyOiAobmFtZSwgc2V0dGluZ3MpID0+IHtcbiAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlcihuYW1lLCBzZXR0aW5ncyk7XG4gICAgICAgIH0sXG4gICAgICAgIGFubm90YXRlOiAobmFtZSwgZGF0YSkgPT4ge1xuICAgICAgICAgIHJlZ2lzdHJ5Lmxvb2t1cChuYW1lKS5lYWNoKHNldHRpbmdzID0+IHtcbiAgICAgICAgICAgIGFubm90YXRlV2l0aEJvb2ttYXJrKGVkaXRvciwgbmFtZSwgc2V0dGluZ3MsIGRhdGEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBhbm5vdGF0aW9uQ2hhbmdlZDogKG5hbWUsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgY2hhbmdlcy5hZGRMaXN0ZW5lcihuYW1lLCBjYWxsYmFjayk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbW92ZTogbmFtZSA9PiB7XG4gICAgICAgICAgaWRlbnRpZnkoZWRpdG9yLCBPcHRpb25hbC5zb21lKG5hbWUpKS5lYWNoKCh7ZWxlbWVudHN9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBib29rbWFyayA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Qm9va21hcmsoKTtcbiAgICAgICAgICAgIHJlbW92ZUFubm90YXRpb25zKGVsZW1lbnRzKTtcbiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24ubW92ZVRvQm9va21hcmsoYm9va21hcmspO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICByZW1vdmVBbGw6IG5hbWUgPT4ge1xuICAgICAgICAgIGNvbnN0IGJvb2ttYXJrID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRCb29rbWFyaygpO1xuICAgICAgICAgIGVhY2gkZChmaW5kQWxsKGVkaXRvciwgbmFtZSksIChlbGVtZW50cywgXykgPT4ge1xuICAgICAgICAgICAgcmVtb3ZlQW5ub3RhdGlvbnMoZWxlbWVudHMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24ubW92ZVRvQm9va21hcmsoYm9va21hcmspO1xuICAgICAgICB9LFxuICAgICAgICBnZXRBbGw6IG5hbWUgPT4ge1xuICAgICAgICAgIGNvbnN0IGRpcmVjdG9yeSA9IGZpbmRBbGwoZWRpdG9yLCBuYW1lKTtcbiAgICAgICAgICByZXR1cm4gbWFwJDIoZGlyZWN0b3J5LCBlbGVtcyA9PiBtYXAkMyhlbGVtcywgZWxlbSA9PiBlbGVtLmRvbSkpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBCb29rbWFya01hbmFnZXIgPSBzZWxlY3Rpb24gPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0Qm9va21hcms6IGN1cnJ5KGdldEJvb2ttYXJrJDEsIHNlbGVjdGlvbiksXG4gICAgICAgIG1vdmVUb0Jvb2ttYXJrOiBjdXJyeShtb3ZlVG9Cb29rbWFyaywgc2VsZWN0aW9uKVxuICAgICAgfTtcbiAgICB9O1xuICAgIEJvb2ttYXJrTWFuYWdlci5pc0Jvb2ttYXJrTm9kZSA9IGlzQm9va21hcmtOb2RlJDE7XG5cbiAgICBjb25zdCBpc1hZV2l0aGluUmFuZ2UgPSAoY2xpZW50WCwgY2xpZW50WSwgcmFuZ2UpID0+IHtcbiAgICAgIGlmIChyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGV4aXN0cyhyYW5nZS5nZXRDbGllbnRSZWN0cygpLCByZWN0ID0+IGNvbnRhaW5zWFkocmVjdCwgY2xpZW50WCwgY2xpZW50WSkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBmaXJlUHJlUHJvY2VzcyA9IChlZGl0b3IsIGFyZ3MpID0+IGVkaXRvci5kaXNwYXRjaCgnUHJlUHJvY2VzcycsIGFyZ3MpO1xuICAgIGNvbnN0IGZpcmVQb3N0UHJvY2VzcyA9IChlZGl0b3IsIGFyZ3MpID0+IGVkaXRvci5kaXNwYXRjaCgnUG9zdFByb2Nlc3MnLCBhcmdzKTtcbiAgICBjb25zdCBmaXJlUmVtb3ZlID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5kaXNwYXRjaCgncmVtb3ZlJyk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJlRGV0YWNoID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5kaXNwYXRjaCgnZGV0YWNoJyk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJlU3dpdGNoTW9kZSA9IChlZGl0b3IsIG1vZGUpID0+IHtcbiAgICAgIGVkaXRvci5kaXNwYXRjaCgnU3dpdGNoTW9kZScsIHsgbW9kZSB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVPYmplY3RSZXNpemVTdGFydCA9IChlZGl0b3IsIHRhcmdldCwgd2lkdGgsIGhlaWdodCwgb3JpZ2luKSA9PiB7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ09iamVjdFJlc2l6ZVN0YXJ0Jywge1xuICAgICAgICB0YXJnZXQsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIG9yaWdpblxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJlT2JqZWN0UmVzaXplZCA9IChlZGl0b3IsIHRhcmdldCwgd2lkdGgsIGhlaWdodCwgb3JpZ2luKSA9PiB7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ09iamVjdFJlc2l6ZWQnLCB7XG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgb3JpZ2luXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVQcmVJbml0ID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5kaXNwYXRjaCgnUHJlSW5pdCcpO1xuICAgIH07XG4gICAgY29uc3QgZmlyZVBvc3RSZW5kZXIgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdQb3N0UmVuZGVyJyk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJlSW5pdCA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ0luaXQnKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVQbGFjZWhvbGRlclRvZ2dsZSA9IChlZGl0b3IsIHN0YXRlKSA9PiB7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ1BsYWNlaG9sZGVyVG9nZ2xlJywgeyBzdGF0ZSB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVFcnJvciA9IChlZGl0b3IsIGVycm9yVHlwZSwgZXJyb3IpID0+IHtcbiAgICAgIGVkaXRvci5kaXNwYXRjaChlcnJvclR5cGUsIGVycm9yKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVGb3JtYXRBcHBseSA9IChlZGl0b3IsIGZvcm1hdCwgbm9kZSwgdmFycykgPT4ge1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdGb3JtYXRBcHBseScsIHtcbiAgICAgICAgZm9ybWF0LFxuICAgICAgICBub2RlLFxuICAgICAgICB2YXJzXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVGb3JtYXRSZW1vdmUgPSAoZWRpdG9yLCBmb3JtYXQsIG5vZGUsIHZhcnMpID0+IHtcbiAgICAgIGVkaXRvci5kaXNwYXRjaCgnRm9ybWF0UmVtb3ZlJywge1xuICAgICAgICBmb3JtYXQsXG4gICAgICAgIG5vZGUsXG4gICAgICAgIHZhcnNcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZmlyZUJlZm9yZVNldENvbnRlbnQgPSAoZWRpdG9yLCBhcmdzKSA9PiBlZGl0b3IuZGlzcGF0Y2goJ0JlZm9yZVNldENvbnRlbnQnLCBhcmdzKTtcbiAgICBjb25zdCBmaXJlU2V0Q29udGVudCA9IChlZGl0b3IsIGFyZ3MpID0+IGVkaXRvci5kaXNwYXRjaCgnU2V0Q29udGVudCcsIGFyZ3MpO1xuICAgIGNvbnN0IGZpcmVCZWZvcmVHZXRDb250ZW50ID0gKGVkaXRvciwgYXJncykgPT4gZWRpdG9yLmRpc3BhdGNoKCdCZWZvcmVHZXRDb250ZW50JywgYXJncyk7XG4gICAgY29uc3QgZmlyZUdldENvbnRlbnQgPSAoZWRpdG9yLCBhcmdzKSA9PiBlZGl0b3IuZGlzcGF0Y2goJ0dldENvbnRlbnQnLCBhcmdzKTtcbiAgICBjb25zdCBmaXJlQXV0b2NvbXBsZXRlclN0YXJ0ID0gKGVkaXRvciwgYXJncykgPT4ge1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdBdXRvY29tcGxldGVyU3RhcnQnLCBhcmdzKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVBdXRvY29tcGxldGVyVXBkYXRlID0gKGVkaXRvciwgYXJncykgPT4ge1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdBdXRvY29tcGxldGVyVXBkYXRlJywgYXJncyk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJlQXV0b2NvbXBsZXRlckVuZCA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ0F1dG9jb21wbGV0ZXJFbmQnKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVQYXN0ZVByZVByb2Nlc3MgPSAoZWRpdG9yLCBodG1sLCBpbnRlcm5hbCkgPT4gZWRpdG9yLmRpc3BhdGNoKCdQYXN0ZVByZVByb2Nlc3MnLCB7XG4gICAgICBjb250ZW50OiBodG1sLFxuICAgICAgaW50ZXJuYWxcbiAgICB9KTtcbiAgICBjb25zdCBmaXJlUGFzdGVQb3N0UHJvY2VzcyA9IChlZGl0b3IsIG5vZGUsIGludGVybmFsKSA9PiBlZGl0b3IuZGlzcGF0Y2goJ1Bhc3RlUG9zdFByb2Nlc3MnLCB7XG4gICAgICBub2RlLFxuICAgICAgaW50ZXJuYWxcbiAgICB9KTtcbiAgICBjb25zdCBmaXJlUGFzdGVQbGFpblRleHRUb2dnbGUgPSAoZWRpdG9yLCBzdGF0ZSkgPT4gZWRpdG9yLmRpc3BhdGNoKCdQYXN0ZVBsYWluVGV4dFRvZ2dsZScsIHsgc3RhdGUgfSk7XG4gICAgY29uc3QgZmlyZUVkaXRhYmxlUm9vdFN0YXRlQ2hhbmdlID0gKGVkaXRvciwgc3RhdGUpID0+IGVkaXRvci5kaXNwYXRjaCgnRWRpdGFibGVSb290U3RhdGVDaGFuZ2UnLCB7IHN0YXRlIH0pO1xuXG4gICAgY29uc3QgVksgPSB7XG4gICAgICBCQUNLU1BBQ0U6IDgsXG4gICAgICBERUxFVEU6IDQ2LFxuICAgICAgRE9XTjogNDAsXG4gICAgICBFTlRFUjogMTMsXG4gICAgICBFU0M6IDI3LFxuICAgICAgTEVGVDogMzcsXG4gICAgICBSSUdIVDogMzksXG4gICAgICBTUEFDRUJBUjogMzIsXG4gICAgICBUQUI6IDksXG4gICAgICBVUDogMzgsXG4gICAgICBQQUdFX1VQOiAzMyxcbiAgICAgIFBBR0VfRE9XTjogMzQsXG4gICAgICBFTkQ6IDM1LFxuICAgICAgSE9NRTogMzYsXG4gICAgICBtb2RpZmllclByZXNzZWQ6IGUgPT4ge1xuICAgICAgICByZXR1cm4gZS5zaGlmdEtleSB8fCBlLmN0cmxLZXkgfHwgZS5hbHRLZXkgfHwgVksubWV0YUtleVByZXNzZWQoZSk7XG4gICAgICB9LFxuICAgICAgbWV0YUtleVByZXNzZWQ6IGUgPT4ge1xuICAgICAgICByZXR1cm4gRW52Lm9zLmlzTWFjT1MoKSB8fCBFbnYub3MuaXNpT1MoKSA/IGUubWV0YUtleSA6IGUuY3RybEtleSAmJiAhZS5hbHRLZXk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGVsZW1lbnRTZWxlY3Rpb25BdHRyID0gJ2RhdGEtbWNlLXNlbGVjdGVkJztcbiAgICBjb25zdCBjb250cm9sRWxtU2VsZWN0b3IgPSAndGFibGUsaW1nLGZpZ3VyZS5pbWFnZSxocix2aWRlbyxzcGFuLm1jZS1wcmV2aWV3LW9iamVjdCxkZXRhaWxzJztcbiAgICBjb25zdCBhYnMgPSBNYXRoLmFicztcbiAgICBjb25zdCByb3VuZCQxID0gTWF0aC5yb3VuZDtcbiAgICBjb25zdCByZXNpemVIYW5kbGVzID0ge1xuICAgICAgbnc6IFtcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgLTEsXG4gICAgICAgIC0xXG4gICAgICBdLFxuICAgICAgbmU6IFtcbiAgICAgICAgMSxcbiAgICAgICAgMCxcbiAgICAgICAgMSxcbiAgICAgICAgLTFcbiAgICAgIF0sXG4gICAgICBzZTogW1xuICAgICAgICAxLFxuICAgICAgICAxLFxuICAgICAgICAxLFxuICAgICAgICAxXG4gICAgICBdLFxuICAgICAgc3c6IFtcbiAgICAgICAgMCxcbiAgICAgICAgMSxcbiAgICAgICAgLTEsXG4gICAgICAgIDFcbiAgICAgIF1cbiAgICB9O1xuICAgIGNvbnN0IGlzVG91Y2hFdmVudCA9IGV2dCA9PiBldnQudHlwZSA9PT0gJ2xvbmdwcmVzcycgfHwgZXZ0LnR5cGUuaW5kZXhPZigndG91Y2gnKSA9PT0gMDtcbiAgICBjb25zdCBDb250cm9sU2VsZWN0aW9uID0gKHNlbGVjdGlvbiwgZWRpdG9yKSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgY29uc3QgZWRpdGFibGVEb2MgPSBlZGl0b3IuZ2V0RG9jKCk7XG4gICAgICBjb25zdCByb290RG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICAgIGNvbnN0IHJvb3RFbGVtZW50ID0gZWRpdG9yLmdldEJvZHkoKTtcbiAgICAgIGxldCBzZWxlY3RlZEVsbSwgc2VsZWN0ZWRFbG1HaG9zdCwgcmVzaXplSGVscGVyLCBzZWxlY3RlZEhhbmRsZSwgcmVzaXplQmFja2Ryb3A7XG4gICAgICBsZXQgc3RhcnRYLCBzdGFydFksIHNlbGVjdGVkRWxtWCwgc2VsZWN0ZWRFbG1ZLCBzdGFydFcsIHN0YXJ0SCwgcmF0aW8sIHJlc2l6ZVN0YXJ0ZWQ7XG4gICAgICBsZXQgd2lkdGg7XG4gICAgICBsZXQgaGVpZ2h0O1xuICAgICAgbGV0IHN0YXJ0U2Nyb2xsV2lkdGg7XG4gICAgICBsZXQgc3RhcnRTY3JvbGxIZWlnaHQ7XG4gICAgICBjb25zdCBpc0ltYWdlID0gZWxtID0+IGlzTm9uTnVsbGFibGUoZWxtKSAmJiAoaXNJbWcoZWxtKSB8fCBkb20uaXMoZWxtLCAnZmlndXJlLmltYWdlJykpO1xuICAgICAgY29uc3QgaXNNZWRpYSA9IGVsbSA9PiBpc01lZGlhJDIoZWxtKSB8fCBkb20uaGFzQ2xhc3MoZWxtLCAnbWNlLXByZXZpZXctb2JqZWN0Jyk7XG4gICAgICBjb25zdCBpc0V2ZW50T25JbWFnZU91dHNpZGVSYW5nZSA9IChldnQsIHJhbmdlKSA9PiB7XG4gICAgICAgIGlmIChpc1RvdWNoRXZlbnQoZXZ0KSkge1xuICAgICAgICAgIGNvbnN0IHRvdWNoID0gZXZ0LnRvdWNoZXNbMF07XG4gICAgICAgICAgcmV0dXJuIGlzSW1hZ2UoZXZ0LnRhcmdldCkgJiYgIWlzWFlXaXRoaW5SYW5nZSh0b3VjaC5jbGllbnRYLCB0b3VjaC5jbGllbnRZLCByYW5nZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGlzSW1hZ2UoZXZ0LnRhcmdldCkgJiYgIWlzWFlXaXRoaW5SYW5nZShldnQuY2xpZW50WCwgZXZ0LmNsaWVudFksIHJhbmdlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbnRleHRNZW51U2VsZWN0SW1hZ2UgPSBldnQgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldnQudGFyZ2V0O1xuICAgICAgICBpZiAoaXNFdmVudE9uSW1hZ2VPdXRzaWRlUmFuZ2UoZXZ0LCBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKSAmJiAhZXZ0LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3QodGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldFJlc2l6ZVRhcmdldHMgPSBlbG0gPT4ge1xuICAgICAgICBpZiAoZG9tLmhhc0NsYXNzKGVsbSwgJ21jZS1wcmV2aWV3LW9iamVjdCcpICYmIGlzTm9uTnVsbGFibGUoZWxtLmZpcnN0RWxlbWVudENoaWxkKSkge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBlbG0sXG4gICAgICAgICAgICBlbG0uZmlyc3RFbGVtZW50Q2hpbGRcbiAgICAgICAgICBdO1xuICAgICAgICB9IGVsc2UgaWYgKGRvbS5pcyhlbG0sICdmaWd1cmUuaW1hZ2UnKSkge1xuICAgICAgICAgIHJldHVybiBbZWxtLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gW2VsbV07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBpc1Jlc2l6YWJsZSA9IGVsbSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0T2JqZWN0UmVzaXppbmcoZWRpdG9yKTtcbiAgICAgICAgaWYgKCFzZWxlY3Rvcikge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxtLmdldEF0dHJpYnV0ZSgnZGF0YS1tY2UtcmVzaXplJykgPT09ICdmYWxzZScpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsbSA9PT0gZWRpdG9yLmdldEJvZHkoKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9tLmhhc0NsYXNzKGVsbSwgJ21jZS1wcmV2aWV3LW9iamVjdCcpICYmIGlzTm9uTnVsbGFibGUoZWxtLmZpcnN0RWxlbWVudENoaWxkKSkge1xuICAgICAgICAgIHJldHVybiBpcyQxKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsbS5maXJzdEVsZW1lbnRDaGlsZCksIHNlbGVjdG9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gaXMkMShTdWdhckVsZW1lbnQuZnJvbURvbShlbG0pLCBzZWxlY3Rvcik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBjcmVhdGVHaG9zdEVsZW1lbnQgPSBlbG0gPT4ge1xuICAgICAgICBpZiAoaXNNZWRpYShlbG0pKSB7XG4gICAgICAgICAgcmV0dXJuIGRvbS5jcmVhdGUoJ2ltZycsIHsgc3JjOiBFbnYudHJhbnNwYXJlbnRTcmMgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGVsbS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBzZXRTaXplUHJvcCA9IChlbGVtZW50LCBuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoaXNOb25OdWxsYWJsZSh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCB0YXJnZXRzID0gZ2V0UmVzaXplVGFyZ2V0cyhlbGVtZW50KTtcbiAgICAgICAgICBlYWNoJGUodGFyZ2V0cywgdGFyZ2V0ID0+IHtcbiAgICAgICAgICAgIGlmICh0YXJnZXQuc3R5bGVbbmFtZV0gfHwgIWVkaXRvci5zY2hlbWEuaXNWYWxpZCh0YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgbmFtZSkpIHtcbiAgICAgICAgICAgICAgZG9tLnNldFN0eWxlKHRhcmdldCwgbmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZG9tLnNldEF0dHJpYih0YXJnZXQsIG5hbWUsICcnICsgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0R2hvc3RFbG1TaXplID0gKGdob3N0RWxtLCB3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gICAgICAgIHNldFNpemVQcm9wKGdob3N0RWxtLCAnd2lkdGgnLCB3aWR0aCk7XG4gICAgICAgIHNldFNpemVQcm9wKGdob3N0RWxtLCAnaGVpZ2h0JywgaGVpZ2h0KTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNpemVHaG9zdEVsZW1lbnQgPSBlID0+IHtcbiAgICAgICAgbGV0IGRlbHRhWCwgZGVsdGFZLCBwcm9wb3J0aW9uYWw7XG4gICAgICAgIGxldCByZXNpemVIZWxwZXJYLCByZXNpemVIZWxwZXJZO1xuICAgICAgICBkZWx0YVggPSBlLnNjcmVlblggLSBzdGFydFg7XG4gICAgICAgIGRlbHRhWSA9IGUuc2NyZWVuWSAtIHN0YXJ0WTtcbiAgICAgICAgd2lkdGggPSBkZWx0YVggKiBzZWxlY3RlZEhhbmRsZVsyXSArIHN0YXJ0VztcbiAgICAgICAgaGVpZ2h0ID0gZGVsdGFZICogc2VsZWN0ZWRIYW5kbGVbM10gKyBzdGFydEg7XG4gICAgICAgIHdpZHRoID0gd2lkdGggPCA1ID8gNSA6IHdpZHRoO1xuICAgICAgICBoZWlnaHQgPSBoZWlnaHQgPCA1ID8gNSA6IGhlaWdodDtcbiAgICAgICAgaWYgKChpc0ltYWdlKHNlbGVjdGVkRWxtKSB8fCBpc01lZGlhKHNlbGVjdGVkRWxtKSkgJiYgZ2V0UmVzaXplSW1nUHJvcG9ydGlvbmFsKGVkaXRvcikgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcHJvcG9ydGlvbmFsID0gIVZLLm1vZGlmaWVyUHJlc3NlZChlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wb3J0aW9uYWwgPSBWSy5tb2RpZmllclByZXNzZWQoZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BvcnRpb25hbCkge1xuICAgICAgICAgIGlmIChhYnMoZGVsdGFYKSA+IGFicyhkZWx0YVkpKSB7XG4gICAgICAgICAgICBoZWlnaHQgPSByb3VuZCQxKHdpZHRoICogcmF0aW8pO1xuICAgICAgICAgICAgd2lkdGggPSByb3VuZCQxKGhlaWdodCAvIHJhdGlvKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2lkdGggPSByb3VuZCQxKGhlaWdodCAvIHJhdGlvKTtcbiAgICAgICAgICAgIGhlaWdodCA9IHJvdW5kJDEod2lkdGggKiByYXRpbyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldEdob3N0RWxtU2l6ZShzZWxlY3RlZEVsbUdob3N0LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgcmVzaXplSGVscGVyWCA9IHNlbGVjdGVkSGFuZGxlLnN0YXJ0UG9zLnggKyBkZWx0YVg7XG4gICAgICAgIHJlc2l6ZUhlbHBlclkgPSBzZWxlY3RlZEhhbmRsZS5zdGFydFBvcy55ICsgZGVsdGFZO1xuICAgICAgICByZXNpemVIZWxwZXJYID0gcmVzaXplSGVscGVyWCA+IDAgPyByZXNpemVIZWxwZXJYIDogMDtcbiAgICAgICAgcmVzaXplSGVscGVyWSA9IHJlc2l6ZUhlbHBlclkgPiAwID8gcmVzaXplSGVscGVyWSA6IDA7XG4gICAgICAgIGRvbS5zZXRTdHlsZXMocmVzaXplSGVscGVyLCB7XG4gICAgICAgICAgbGVmdDogcmVzaXplSGVscGVyWCxcbiAgICAgICAgICB0b3A6IHJlc2l6ZUhlbHBlclksXG4gICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmVzaXplSGVscGVyLmlubmVySFRNTCA9IHdpZHRoICsgJyAmdGltZXM7ICcgKyBoZWlnaHQ7XG4gICAgICAgIGlmIChzZWxlY3RlZEhhbmRsZVsyXSA8IDAgJiYgc2VsZWN0ZWRFbG1HaG9zdC5jbGllbnRXaWR0aCA8PSB3aWR0aCkge1xuICAgICAgICAgIGRvbS5zZXRTdHlsZShzZWxlY3RlZEVsbUdob3N0LCAnbGVmdCcsIHNlbGVjdGVkRWxtWCArIChzdGFydFcgLSB3aWR0aCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxlY3RlZEhhbmRsZVszXSA8IDAgJiYgc2VsZWN0ZWRFbG1HaG9zdC5jbGllbnRIZWlnaHQgPD0gaGVpZ2h0KSB7XG4gICAgICAgICAgZG9tLnNldFN0eWxlKHNlbGVjdGVkRWxtR2hvc3QsICd0b3AnLCBzZWxlY3RlZEVsbVkgKyAoc3RhcnRIIC0gaGVpZ2h0KSk7XG4gICAgICAgIH1cbiAgICAgICAgZGVsdGFYID0gcm9vdEVsZW1lbnQuc2Nyb2xsV2lkdGggLSBzdGFydFNjcm9sbFdpZHRoO1xuICAgICAgICBkZWx0YVkgPSByb290RWxlbWVudC5zY3JvbGxIZWlnaHQgLSBzdGFydFNjcm9sbEhlaWdodDtcbiAgICAgICAgaWYgKGRlbHRhWCArIGRlbHRhWSAhPT0gMCkge1xuICAgICAgICAgIGRvbS5zZXRTdHlsZXMocmVzaXplSGVscGVyLCB7XG4gICAgICAgICAgICBsZWZ0OiByZXNpemVIZWxwZXJYIC0gZGVsdGFYLFxuICAgICAgICAgICAgdG9wOiByZXNpemVIZWxwZXJZIC0gZGVsdGFZXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXNpemVTdGFydGVkKSB7XG4gICAgICAgICAgZmlyZU9iamVjdFJlc2l6ZVN0YXJ0KGVkaXRvciwgc2VsZWN0ZWRFbG0sIHN0YXJ0Vywgc3RhcnRILCAnY29ybmVyLScgKyBzZWxlY3RlZEhhbmRsZS5uYW1lKTtcbiAgICAgICAgICByZXNpemVTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGVuZEdob3N0UmVzaXplID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB3YXNSZXNpemVTdGFydGVkID0gcmVzaXplU3RhcnRlZDtcbiAgICAgICAgcmVzaXplU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICBpZiAod2FzUmVzaXplU3RhcnRlZCkge1xuICAgICAgICAgIHNldFNpemVQcm9wKHNlbGVjdGVkRWxtLCAnd2lkdGgnLCB3aWR0aCk7XG4gICAgICAgICAgc2V0U2l6ZVByb3Aoc2VsZWN0ZWRFbG0sICdoZWlnaHQnLCBoZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIGRvbS51bmJpbmQoZWRpdGFibGVEb2MsICdtb3VzZW1vdmUnLCByZXNpemVHaG9zdEVsZW1lbnQpO1xuICAgICAgICBkb20udW5iaW5kKGVkaXRhYmxlRG9jLCAnbW91c2V1cCcsIGVuZEdob3N0UmVzaXplKTtcbiAgICAgICAgaWYgKHJvb3REb2N1bWVudCAhPT0gZWRpdGFibGVEb2MpIHtcbiAgICAgICAgICBkb20udW5iaW5kKHJvb3REb2N1bWVudCwgJ21vdXNlbW92ZScsIHJlc2l6ZUdob3N0RWxlbWVudCk7XG4gICAgICAgICAgZG9tLnVuYmluZChyb290RG9jdW1lbnQsICdtb3VzZXVwJywgZW5kR2hvc3RSZXNpemUpO1xuICAgICAgICB9XG4gICAgICAgIGRvbS5yZW1vdmUoc2VsZWN0ZWRFbG1HaG9zdCk7XG4gICAgICAgIGRvbS5yZW1vdmUocmVzaXplSGVscGVyKTtcbiAgICAgICAgZG9tLnJlbW92ZShyZXNpemVCYWNrZHJvcCk7XG4gICAgICAgIHNob3dSZXNpemVSZWN0KHNlbGVjdGVkRWxtKTtcbiAgICAgICAgaWYgKHdhc1Jlc2l6ZVN0YXJ0ZWQpIHtcbiAgICAgICAgICBmaXJlT2JqZWN0UmVzaXplZChlZGl0b3IsIHNlbGVjdGVkRWxtLCB3aWR0aCwgaGVpZ2h0LCAnY29ybmVyLScgKyBzZWxlY3RlZEhhbmRsZS5uYW1lKTtcbiAgICAgICAgICBkb20uc2V0QXR0cmliKHNlbGVjdGVkRWxtLCAnc3R5bGUnLCBkb20uZ2V0QXR0cmliKHNlbGVjdGVkRWxtLCAnc3R5bGUnKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2hvd1Jlc2l6ZVJlY3QgPSB0YXJnZXRFbG0gPT4ge1xuICAgICAgICB1bmJpbmRSZXNpemVIYW5kbGVFdmVudHMoKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBkb20uZ2V0UG9zKHRhcmdldEVsbSwgcm9vdEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZEVsbVggPSBwb3NpdGlvbi54O1xuICAgICAgICBjb25zdCBzZWxlY3RlZEVsbVkgPSBwb3NpdGlvbi55O1xuICAgICAgICBjb25zdCByZWN0ID0gdGFyZ2V0RWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB0YXJnZXRXaWR0aCA9IHJlY3Qud2lkdGggfHwgcmVjdC5yaWdodCAtIHJlY3QubGVmdDtcbiAgICAgICAgY29uc3QgdGFyZ2V0SGVpZ2h0ID0gcmVjdC5oZWlnaHQgfHwgcmVjdC5ib3R0b20gLSByZWN0LnRvcDtcbiAgICAgICAgaWYgKHNlbGVjdGVkRWxtICE9PSB0YXJnZXRFbG0pIHtcbiAgICAgICAgICBoaWRlUmVzaXplUmVjdCgpO1xuICAgICAgICAgIHNlbGVjdGVkRWxtID0gdGFyZ2V0RWxtO1xuICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlID0gZWRpdG9yLmRpc3BhdGNoKCdPYmplY3RTZWxlY3RlZCcsIHsgdGFyZ2V0OiB0YXJnZXRFbG0gfSk7XG4gICAgICAgIGlmIChpc1Jlc2l6YWJsZSh0YXJnZXRFbG0pICYmICFlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgZWFjaCRkKHJlc2l6ZUhhbmRsZXMsIChoYW5kbGUsIG5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0RHJhZyA9IGUgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBnZXRSZXNpemVUYXJnZXRzKHNlbGVjdGVkRWxtKVswXTtcbiAgICAgICAgICAgICAgc3RhcnRYID0gZS5zY3JlZW5YO1xuICAgICAgICAgICAgICBzdGFydFkgPSBlLnNjcmVlblk7XG4gICAgICAgICAgICAgIHN0YXJ0VyA9IHRhcmdldC5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgICAgc3RhcnRIID0gdGFyZ2V0LmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgICAgcmF0aW8gPSBzdGFydEggLyBzdGFydFc7XG4gICAgICAgICAgICAgIHNlbGVjdGVkSGFuZGxlID0gaGFuZGxlO1xuICAgICAgICAgICAgICBzZWxlY3RlZEhhbmRsZS5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRIYW5kbGUuc3RhcnRQb3MgPSB7XG4gICAgICAgICAgICAgICAgeDogdGFyZ2V0V2lkdGggKiBoYW5kbGVbMF0gKyBzZWxlY3RlZEVsbVgsXG4gICAgICAgICAgICAgICAgeTogdGFyZ2V0SGVpZ2h0ICogaGFuZGxlWzFdICsgc2VsZWN0ZWRFbG1ZXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHN0YXJ0U2Nyb2xsV2lkdGggPSByb290RWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICAgICAgICAgICAgc3RhcnRTY3JvbGxIZWlnaHQgPSByb290RWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gICAgICAgICAgICAgIHJlc2l6ZUJhY2tkcm9wID0gZG9tLmFkZChyb290RWxlbWVudCwgJ2RpdicsIHtcbiAgICAgICAgICAgICAgICAnY2xhc3MnOiAnbWNlLXJlc2l6ZS1iYWNrZHJvcCcsXG4gICAgICAgICAgICAgICAgJ2RhdGEtbWNlLWJvZ3VzJzogJ2FsbCdcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGRvbS5zZXRTdHlsZXMocmVzaXplQmFja2Ryb3AsIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgICAgICAgICBsZWZ0OiAnMCcsXG4gICAgICAgICAgICAgICAgdG9wOiAnMCcsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJ1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRFbG1HaG9zdCA9IGNyZWF0ZUdob3N0RWxlbWVudChzZWxlY3RlZEVsbSk7XG4gICAgICAgICAgICAgIGRvbS5hZGRDbGFzcyhzZWxlY3RlZEVsbUdob3N0LCAnbWNlLWNsb25lZHJlc2l6YWJsZScpO1xuICAgICAgICAgICAgICBkb20uc2V0QXR0cmliKHNlbGVjdGVkRWxtR2hvc3QsICdkYXRhLW1jZS1ib2d1cycsICdhbGwnKTtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRFbG1HaG9zdC5jb250ZW50RWRpdGFibGUgPSAnZmFsc2UnO1xuICAgICAgICAgICAgICBkb20uc2V0U3R5bGVzKHNlbGVjdGVkRWxtR2hvc3QsIHtcbiAgICAgICAgICAgICAgICBsZWZ0OiBzZWxlY3RlZEVsbVgsXG4gICAgICAgICAgICAgICAgdG9wOiBzZWxlY3RlZEVsbVksXG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBzZXRHaG9zdEVsbVNpemUoc2VsZWN0ZWRFbG1HaG9zdCwgdGFyZ2V0V2lkdGgsIHRhcmdldEhlaWdodCk7XG4gICAgICAgICAgICAgIHNlbGVjdGVkRWxtR2hvc3QucmVtb3ZlQXR0cmlidXRlKGVsZW1lbnRTZWxlY3Rpb25BdHRyKTtcbiAgICAgICAgICAgICAgcm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQoc2VsZWN0ZWRFbG1HaG9zdCk7XG4gICAgICAgICAgICAgIGRvbS5iaW5kKGVkaXRhYmxlRG9jLCAnbW91c2Vtb3ZlJywgcmVzaXplR2hvc3RFbGVtZW50KTtcbiAgICAgICAgICAgICAgZG9tLmJpbmQoZWRpdGFibGVEb2MsICdtb3VzZXVwJywgZW5kR2hvc3RSZXNpemUpO1xuICAgICAgICAgICAgICBpZiAocm9vdERvY3VtZW50ICE9PSBlZGl0YWJsZURvYykge1xuICAgICAgICAgICAgICAgIGRvbS5iaW5kKHJvb3REb2N1bWVudCwgJ21vdXNlbW92ZScsIHJlc2l6ZUdob3N0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgZG9tLmJpbmQocm9vdERvY3VtZW50LCAnbW91c2V1cCcsIGVuZEdob3N0UmVzaXplKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNpemVIZWxwZXIgPSBkb20uYWRkKHJvb3RFbGVtZW50LCAnZGl2Jywge1xuICAgICAgICAgICAgICAgICdjbGFzcyc6ICdtY2UtcmVzaXplLWhlbHBlcicsXG4gICAgICAgICAgICAgICAgJ2RhdGEtbWNlLWJvZ3VzJzogJ2FsbCdcbiAgICAgICAgICAgICAgfSwgc3RhcnRXICsgJyAmdGltZXM7ICcgKyBzdGFydEgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBoYW5kbGVFbG0gPSBkb20uZ2V0KCdtY2VSZXNpemVIYW5kbGUnICsgbmFtZSk7XG4gICAgICAgICAgICBpZiAoaGFuZGxlRWxtKSB7XG4gICAgICAgICAgICAgIGRvbS5yZW1vdmUoaGFuZGxlRWxtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhhbmRsZUVsbSA9IGRvbS5hZGQocm9vdEVsZW1lbnQsICdkaXYnLCB7XG4gICAgICAgICAgICAgICdpZCc6ICdtY2VSZXNpemVIYW5kbGUnICsgbmFtZSxcbiAgICAgICAgICAgICAgJ2RhdGEtbWNlLWJvZ3VzJzogJ2FsbCcsXG4gICAgICAgICAgICAgICdjbGFzcyc6ICdtY2UtcmVzaXplaGFuZGxlJyxcbiAgICAgICAgICAgICAgJ3Vuc2VsZWN0YWJsZSc6IHRydWUsXG4gICAgICAgICAgICAgICdzdHlsZSc6ICdjdXJzb3I6JyArIG5hbWUgKyAnLXJlc2l6ZTsgbWFyZ2luOjA7IHBhZGRpbmc6MCdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZG9tLmJpbmQoaGFuZGxlRWxtLCAnbW91c2Vkb3duJywgZSA9PiB7XG4gICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgc3RhcnREcmFnKGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBoYW5kbGUuZWxtID0gaGFuZGxlRWxtO1xuICAgICAgICAgICAgZG9tLnNldFN0eWxlcyhoYW5kbGVFbG0sIHtcbiAgICAgICAgICAgICAgbGVmdDogdGFyZ2V0V2lkdGggKiBoYW5kbGVbMF0gKyBzZWxlY3RlZEVsbVggLSBoYW5kbGVFbG0ub2Zmc2V0V2lkdGggLyAyLFxuICAgICAgICAgICAgICB0b3A6IHRhcmdldEhlaWdodCAqIGhhbmRsZVsxXSArIHNlbGVjdGVkRWxtWSAtIGhhbmRsZUVsbS5vZmZzZXRIZWlnaHQgLyAyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWRlUmVzaXplUmVjdChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCB0aHJvdHRsZWRTaG93UmVzaXplUmVjdCA9IGZpcnN0JDEoc2hvd1Jlc2l6ZVJlY3QsIDApO1xuICAgICAgY29uc3QgaGlkZVJlc2l6ZVJlY3QgPSAocmVtb3ZlU2VsZWN0ZWQgPSB0cnVlKSA9PiB7XG4gICAgICAgIHRocm90dGxlZFNob3dSZXNpemVSZWN0LmNhbmNlbCgpO1xuICAgICAgICB1bmJpbmRSZXNpemVIYW5kbGVFdmVudHMoKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkRWxtICYmIHJlbW92ZVNlbGVjdGVkKSB7XG4gICAgICAgICAgc2VsZWN0ZWRFbG0ucmVtb3ZlQXR0cmlidXRlKGVsZW1lbnRTZWxlY3Rpb25BdHRyKTtcbiAgICAgICAgfVxuICAgICAgICBlYWNoJGQocmVzaXplSGFuZGxlcywgKHZhbHVlLCBuYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgaGFuZGxlRWxtID0gZG9tLmdldCgnbWNlUmVzaXplSGFuZGxlJyArIG5hbWUpO1xuICAgICAgICAgIGlmIChoYW5kbGVFbG0pIHtcbiAgICAgICAgICAgIGRvbS51bmJpbmQoaGFuZGxlRWxtKTtcbiAgICAgICAgICAgIGRvbS5yZW1vdmUoaGFuZGxlRWxtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzQ2hpbGRPckVxdWFsID0gKG5vZGUsIHBhcmVudCkgPT4gZG9tLmlzQ2hpbGRPZihub2RlLCBwYXJlbnQpO1xuICAgICAgY29uc3QgdXBkYXRlUmVzaXplUmVjdCA9IGUgPT4ge1xuICAgICAgICBpZiAocmVzaXplU3RhcnRlZCB8fCBlZGl0b3IucmVtb3ZlZCB8fCBlZGl0b3IuY29tcG9zaW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmdldEVsbSA9IGUudHlwZSA9PT0gJ21vdXNlZG93bicgPyBlLnRhcmdldCA6IHNlbGVjdGlvbi5nZXROb2RlKCk7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xFbG0gPSBjbG9zZXN0JDMoU3VnYXJFbGVtZW50LmZyb21Eb20odGFyZ2V0RWxtKSwgY29udHJvbEVsbVNlbGVjdG9yKS5tYXAoZSA9PiBlLmRvbSkuZmlsdGVyKGUgPT4gZG9tLmlzRWRpdGFibGUoZS5wYXJlbnRFbGVtZW50KSkuZ2V0T3JVbmRlZmluZWQoKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZSA9IGlzTm9uTnVsbGFibGUoY29udHJvbEVsbSkgPyBkb20uZ2V0QXR0cmliKGNvbnRyb2xFbG0sIGVsZW1lbnRTZWxlY3Rpb25BdHRyLCAnMScpIDogJzEnO1xuICAgICAgICBlYWNoJGUoZG9tLnNlbGVjdChgaW1nWyR7IGVsZW1lbnRTZWxlY3Rpb25BdHRyIH1dLGhyWyR7IGVsZW1lbnRTZWxlY3Rpb25BdHRyIH1dYCksIGltZyA9PiB7XG4gICAgICAgICAgaW1nLnJlbW92ZUF0dHJpYnV0ZShlbGVtZW50U2VsZWN0aW9uQXR0cik7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaXNOb25OdWxsYWJsZShjb250cm9sRWxtKSAmJiBpc0NoaWxkT3JFcXVhbChjb250cm9sRWxtLCByb290RWxlbWVudCkgJiYgZWRpdG9yLmhhc0ZvY3VzKCkpIHtcbiAgICAgICAgICBkaXNhYmxlR2Vja29SZXNpemUoKTtcbiAgICAgICAgICBjb25zdCBzdGFydEVsbSA9IHNlbGVjdGlvbi5nZXRTdGFydCh0cnVlKTtcbiAgICAgICAgICBpZiAoaXNDaGlsZE9yRXF1YWwoc3RhcnRFbG0sIGNvbnRyb2xFbG0pICYmIGlzQ2hpbGRPckVxdWFsKHNlbGVjdGlvbi5nZXRFbmQodHJ1ZSksIGNvbnRyb2xFbG0pKSB7XG4gICAgICAgICAgICBkb20uc2V0QXR0cmliKGNvbnRyb2xFbG0sIGVsZW1lbnRTZWxlY3Rpb25BdHRyLCBzZWxlY3RlZFZhbHVlKTtcbiAgICAgICAgICAgIHRocm90dGxlZFNob3dSZXNpemVSZWN0LnRocm90dGxlKGNvbnRyb2xFbG0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBoaWRlUmVzaXplUmVjdCgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVuYmluZFJlc2l6ZUhhbmRsZUV2ZW50cyA9ICgpID0+IHtcbiAgICAgICAgZWFjaCRkKHJlc2l6ZUhhbmRsZXMsIGhhbmRsZSA9PiB7XG4gICAgICAgICAgaWYgKGhhbmRsZS5lbG0pIHtcbiAgICAgICAgICAgIGRvbS51bmJpbmQoaGFuZGxlLmVsbSk7XG4gICAgICAgICAgICBkZWxldGUgaGFuZGxlLmVsbTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRpc2FibGVHZWNrb1Jlc2l6ZSA9ICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBlZGl0b3IuZ2V0RG9jKCkuZXhlY0NvbW1hbmQoJ2VuYWJsZU9iamVjdFJlc2l6aW5nJywgZmFsc2UsICdmYWxzZScpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZWRpdG9yLm9uKCdpbml0JywgKCkgPT4ge1xuICAgICAgICBkaXNhYmxlR2Vja29SZXNpemUoKTtcbiAgICAgICAgZWRpdG9yLm9uKCdOb2RlQ2hhbmdlIFJlc2l6ZUVkaXRvciBSZXNpemVXaW5kb3cgUmVzaXplQ29udGVudCBkcm9wJywgdXBkYXRlUmVzaXplUmVjdCk7XG4gICAgICAgIGVkaXRvci5vbigna2V5dXAgY29tcG9zaXRpb25lbmQnLCBlID0+IHtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRFbG0gJiYgc2VsZWN0ZWRFbG0ubm9kZU5hbWUgPT09ICdUQUJMRScpIHtcbiAgICAgICAgICAgIHVwZGF0ZVJlc2l6ZVJlY3QoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLm9uKCdoaWRlIGJsdXInLCBoaWRlUmVzaXplUmVjdCk7XG4gICAgICAgIGVkaXRvci5vbignY29udGV4dG1lbnUgbG9uZ3ByZXNzJywgY29udGV4dE1lbnVTZWxlY3RJbWFnZSwgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbigncmVtb3ZlJywgdW5iaW5kUmVzaXplSGFuZGxlRXZlbnRzKTtcbiAgICAgIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICAgIHRocm90dGxlZFNob3dSZXNpemVSZWN0LmNhbmNlbCgpO1xuICAgICAgICBzZWxlY3RlZEVsbSA9IHNlbGVjdGVkRWxtR2hvc3QgPSByZXNpemVCYWNrZHJvcCA9IG51bGw7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNSZXNpemFibGUsXG4gICAgICAgIHNob3dSZXNpemVSZWN0LFxuICAgICAgICBoaWRlUmVzaXplUmVjdCxcbiAgICAgICAgdXBkYXRlUmVzaXplUmVjdCxcbiAgICAgICAgZGVzdHJveVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0U3RhcnQgPSAocm5nLCBzaXR1KSA9PiB7XG4gICAgICBzaXR1LmZvbGQoZSA9PiB7XG4gICAgICAgIHJuZy5zZXRTdGFydEJlZm9yZShlLmRvbSk7XG4gICAgICB9LCAoZSwgbykgPT4ge1xuICAgICAgICBybmcuc2V0U3RhcnQoZS5kb20sIG8pO1xuICAgICAgfSwgZSA9PiB7XG4gICAgICAgIHJuZy5zZXRTdGFydEFmdGVyKGUuZG9tKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2V0RmluaXNoID0gKHJuZywgc2l0dSkgPT4ge1xuICAgICAgc2l0dS5mb2xkKGUgPT4ge1xuICAgICAgICBybmcuc2V0RW5kQmVmb3JlKGUuZG9tKTtcbiAgICAgIH0sIChlLCBvKSA9PiB7XG4gICAgICAgIHJuZy5zZXRFbmQoZS5kb20sIG8pO1xuICAgICAgfSwgZSA9PiB7XG4gICAgICAgIHJuZy5zZXRFbmRBZnRlcihlLmRvbSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbGF0aXZlVG9OYXRpdmUgPSAod2luLCBzdGFydFNpdHUsIGZpbmlzaFNpdHUpID0+IHtcbiAgICAgIGNvbnN0IHJhbmdlID0gd2luLmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICBzZXRTdGFydChyYW5nZSwgc3RhcnRTaXR1KTtcbiAgICAgIHNldEZpbmlzaChyYW5nZSwgZmluaXNoU2l0dSk7XG4gICAgICByZXR1cm4gcmFuZ2U7XG4gICAgfTtcbiAgICBjb25zdCBleGFjdFRvTmF0aXZlID0gKHdpbiwgc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCkgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gd2luLmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICBybmcuc2V0U3RhcnQoc3RhcnQuZG9tLCBzb2Zmc2V0KTtcbiAgICAgIHJuZy5zZXRFbmQoZmluaXNoLmRvbSwgZm9mZnNldCk7XG4gICAgICByZXR1cm4gcm5nO1xuICAgIH07XG5cbiAgICBjb25zdCBhZHQkMyA9IEFkdC5nZW5lcmF0ZShbXG4gICAgICB7XG4gICAgICAgIGx0cjogW1xuICAgICAgICAgICdzdGFydCcsXG4gICAgICAgICAgJ3NvZmZzZXQnLFxuICAgICAgICAgICdmaW5pc2gnLFxuICAgICAgICAgICdmb2Zmc2V0J1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBydGw6IFtcbiAgICAgICAgICAnc3RhcnQnLFxuICAgICAgICAgICdzb2Zmc2V0JyxcbiAgICAgICAgICAnZmluaXNoJyxcbiAgICAgICAgICAnZm9mZnNldCdcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0pO1xuICAgIGNvbnN0IGZyb21SYW5nZSA9ICh3aW4sIHR5cGUsIHJhbmdlKSA9PiB0eXBlKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJhbmdlLnN0YXJ0Q29udGFpbmVyKSwgcmFuZ2Uuc3RhcnRPZmZzZXQsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJhbmdlLmVuZENvbnRhaW5lciksIHJhbmdlLmVuZE9mZnNldCk7XG4gICAgY29uc3QgZ2V0UmFuZ2VzID0gKHdpbiwgc2VsZWN0aW9uKSA9PiBzZWxlY3Rpb24ubWF0Y2goe1xuICAgICAgZG9tUmFuZ2U6IHJuZyA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbHRyOiBjb25zdGFudChybmcpLFxuICAgICAgICAgIHJ0bDogT3B0aW9uYWwubm9uZVxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHJlbGF0aXZlOiAoc3RhcnRTaXR1LCBmaW5pc2hTaXR1KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbHRyOiBjYWNoZWQoKCkgPT4gcmVsYXRpdmVUb05hdGl2ZSh3aW4sIHN0YXJ0U2l0dSwgZmluaXNoU2l0dSkpLFxuICAgICAgICAgIHJ0bDogY2FjaGVkKCgpID0+IE9wdGlvbmFsLnNvbWUocmVsYXRpdmVUb05hdGl2ZSh3aW4sIGZpbmlzaFNpdHUsIHN0YXJ0U2l0dSkpKVxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIGV4YWN0OiAoc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGx0cjogY2FjaGVkKCgpID0+IGV4YWN0VG9OYXRpdmUod2luLCBzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSksXG4gICAgICAgICAgcnRsOiBjYWNoZWQoKCkgPT4gT3B0aW9uYWwuc29tZShleGFjdFRvTmF0aXZlKHdpbiwgZmluaXNoLCBmb2Zmc2V0LCBzdGFydCwgc29mZnNldCkpKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGRvRGlhZ25vc2UgPSAod2luLCByYW5nZXMpID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IHJhbmdlcy5sdHIoKTtcbiAgICAgIGlmIChybmcuY29sbGFwc2VkKSB7XG4gICAgICAgIGNvbnN0IHJldmVyc2VkID0gcmFuZ2VzLnJ0bCgpLmZpbHRlcihyZXYgPT4gcmV2LmNvbGxhcHNlZCA9PT0gZmFsc2UpO1xuICAgICAgICByZXR1cm4gcmV2ZXJzZWQubWFwKHJldiA9PiBhZHQkMy5ydGwoU3VnYXJFbGVtZW50LmZyb21Eb20ocmV2LmVuZENvbnRhaW5lciksIHJldi5lbmRPZmZzZXQsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJldi5zdGFydENvbnRhaW5lciksIHJldi5zdGFydE9mZnNldCkpLmdldE9yVGh1bmsoKCkgPT4gZnJvbVJhbmdlKHdpbiwgYWR0JDMubHRyLCBybmcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmcm9tUmFuZ2Uod2luLCBhZHQkMy5sdHIsIHJuZyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBkaWFnbm9zZSA9ICh3aW4sIHNlbGVjdGlvbikgPT4ge1xuICAgICAgY29uc3QgcmFuZ2VzID0gZ2V0UmFuZ2VzKHdpbiwgc2VsZWN0aW9uKTtcbiAgICAgIHJldHVybiBkb0RpYWdub3NlKHdpbiwgcmFuZ2VzKTtcbiAgICB9O1xuICAgIGFkdCQzLmx0cjtcbiAgICBhZHQkMy5ydGw7XG5cbiAgICBjb25zdCBjcmVhdGUkYSA9IChzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSA9PiAoe1xuICAgICAgc3RhcnQsXG4gICAgICBzb2Zmc2V0LFxuICAgICAgZmluaXNoLFxuICAgICAgZm9mZnNldFxuICAgIH0pO1xuICAgIGNvbnN0IFNpbVJhbmdlID0geyBjcmVhdGU6IGNyZWF0ZSRhIH07XG5cbiAgICBjb25zdCBjYXJldFBvc2l0aW9uRnJvbVBvaW50ID0gKGRvYywgeCwgeSkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKChfYiA9IChfYSA9IGRvYy5kb20pLmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB4LCB5KSkuYmluZChwb3MgPT4ge1xuICAgICAgICBpZiAocG9zLm9mZnNldE5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHIgPSBkb2MuZG9tLmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgIHIuc2V0U3RhcnQocG9zLm9mZnNldE5vZGUsIHBvcy5vZmZzZXQpO1xuICAgICAgICByLmNvbGxhcHNlKCk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHIpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBjYXJldFJhbmdlRnJvbVBvaW50ID0gKGRvYywgeCwgeSkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKChfYiA9IChfYSA9IGRvYy5kb20pLmNhcmV0UmFuZ2VGcm9tUG9pbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB4LCB5KSk7XG4gICAgfTtcbiAgICBjb25zdCBhdmFpbGFibGVTZWFyY2ggPSAoKCkgPT4ge1xuICAgICAgaWYgKGRvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIGNhcmV0UG9zaXRpb25Gcm9tUG9pbnQ7XG4gICAgICB9IGVsc2UgaWYgKGRvY3VtZW50LmNhcmV0UmFuZ2VGcm9tUG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIGNhcmV0UmFuZ2VGcm9tUG9pbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIGNvbnN0IGZyb21Qb2ludCQxID0gKHdpbiwgeCwgeSkgPT4ge1xuICAgICAgY29uc3QgZG9jID0gU3VnYXJFbGVtZW50LmZyb21Eb20od2luLmRvY3VtZW50KTtcbiAgICAgIHJldHVybiBhdmFpbGFibGVTZWFyY2goZG9jLCB4LCB5KS5tYXAocm5nID0+IFNpbVJhbmdlLmNyZWF0ZShTdWdhckVsZW1lbnQuZnJvbURvbShybmcuc3RhcnRDb250YWluZXIpLCBybmcuc3RhcnRPZmZzZXQsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJuZy5lbmRDb250YWluZXIpLCBybmcuZW5kT2Zmc2V0KSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFkdCQyID0gQWR0LmdlbmVyYXRlKFtcbiAgICAgIHsgYmVmb3JlOiBbJ2VsZW1lbnQnXSB9LFxuICAgICAge1xuICAgICAgICBvbjogW1xuICAgICAgICAgICdlbGVtZW50JyxcbiAgICAgICAgICAnb2Zmc2V0J1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgeyBhZnRlcjogWydlbGVtZW50J10gfVxuICAgIF0pO1xuICAgIGNvbnN0IGNhdGEgPSAoc3ViamVjdCwgb25CZWZvcmUsIG9uT24sIG9uQWZ0ZXIpID0+IHN1YmplY3QuZm9sZChvbkJlZm9yZSwgb25Pbiwgb25BZnRlcik7XG4gICAgY29uc3QgZ2V0U3RhcnQkMiA9IHNpdHUgPT4gc2l0dS5mb2xkKGlkZW50aXR5LCBpZGVudGl0eSwgaWRlbnRpdHkpO1xuICAgIGNvbnN0IGJlZm9yZSQxID0gYWR0JDIuYmVmb3JlO1xuICAgIGNvbnN0IG9uID0gYWR0JDIub247XG4gICAgY29uc3QgYWZ0ZXIkMSA9IGFkdCQyLmFmdGVyO1xuICAgIGNvbnN0IFNpdHUgPSB7XG4gICAgICBiZWZvcmU6IGJlZm9yZSQxLFxuICAgICAgb24sXG4gICAgICBhZnRlcjogYWZ0ZXIkMSxcbiAgICAgIGNhdGEsXG4gICAgICBnZXRTdGFydDogZ2V0U3RhcnQkMlxuICAgIH07XG5cbiAgICBjb25zdCBhZHQkMSA9IEFkdC5nZW5lcmF0ZShbXG4gICAgICB7IGRvbVJhbmdlOiBbJ3JuZyddIH0sXG4gICAgICB7XG4gICAgICAgIHJlbGF0aXZlOiBbXG4gICAgICAgICAgJ3N0YXJ0U2l0dScsXG4gICAgICAgICAgJ2ZpbmlzaFNpdHUnXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGV4YWN0OiBbXG4gICAgICAgICAgJ3N0YXJ0JyxcbiAgICAgICAgICAnc29mZnNldCcsXG4gICAgICAgICAgJ2ZpbmlzaCcsXG4gICAgICAgICAgJ2ZvZmZzZXQnXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdKTtcbiAgICBjb25zdCBleGFjdEZyb21SYW5nZSA9IHNpbVJhbmdlID0+IGFkdCQxLmV4YWN0KHNpbVJhbmdlLnN0YXJ0LCBzaW1SYW5nZS5zb2Zmc2V0LCBzaW1SYW5nZS5maW5pc2gsIHNpbVJhbmdlLmZvZmZzZXQpO1xuICAgIGNvbnN0IGdldFN0YXJ0JDEgPSBzZWxlY3Rpb24gPT4gc2VsZWN0aW9uLm1hdGNoKHtcbiAgICAgIGRvbVJhbmdlOiBybmcgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLnN0YXJ0Q29udGFpbmVyKSxcbiAgICAgIHJlbGF0aXZlOiAoc3RhcnRTaXR1LCBfZmluaXNoU2l0dSkgPT4gU2l0dS5nZXRTdGFydChzdGFydFNpdHUpLFxuICAgICAgZXhhY3Q6IChzdGFydCwgX3NvZmZzZXQsIF9maW5pc2gsIF9mb2Zmc2V0KSA9PiBzdGFydFxuICAgIH0pO1xuICAgIGNvbnN0IGRvbVJhbmdlID0gYWR0JDEuZG9tUmFuZ2U7XG4gICAgY29uc3QgcmVsYXRpdmUgPSBhZHQkMS5yZWxhdGl2ZTtcbiAgICBjb25zdCBleGFjdCA9IGFkdCQxLmV4YWN0O1xuICAgIGNvbnN0IGdldFdpbiA9IHNlbGVjdGlvbiA9PiB7XG4gICAgICBjb25zdCBzdGFydCA9IGdldFN0YXJ0JDEoc2VsZWN0aW9uKTtcbiAgICAgIHJldHVybiBkZWZhdWx0VmlldyhzdGFydCk7XG4gICAgfTtcbiAgICBjb25zdCByYW5nZSA9IFNpbVJhbmdlLmNyZWF0ZTtcbiAgICBjb25zdCBTaW1TZWxlY3Rpb24gPSB7XG4gICAgICBkb21SYW5nZSxcbiAgICAgIHJlbGF0aXZlLFxuICAgICAgZXhhY3QsXG4gICAgICBleGFjdEZyb21SYW5nZSxcbiAgICAgIGdldFdpbixcbiAgICAgIHJhbmdlXG4gICAgfTtcblxuICAgIGNvbnN0IGJlZm9yZVNwZWNpYWwgPSAoZWxlbWVudCwgb2Zmc2V0KSA9PiB7XG4gICAgICBjb25zdCBuYW1lJDEgPSBuYW1lKGVsZW1lbnQpO1xuICAgICAgaWYgKCdpbnB1dCcgPT09IG5hbWUkMSkge1xuICAgICAgICByZXR1cm4gU2l0dS5hZnRlcihlbGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoIWNvbnRhaW5zJDIoW1xuICAgICAgICAgICdicicsXG4gICAgICAgICAgJ2ltZydcbiAgICAgICAgXSwgbmFtZSQxKSkge1xuICAgICAgICByZXR1cm4gU2l0dS5vbihlbGVtZW50LCBvZmZzZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9mZnNldCA9PT0gMCA/IFNpdHUuYmVmb3JlKGVsZW1lbnQpIDogU2l0dS5hZnRlcihlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHByZXByb2Nlc3NSZWxhdGl2ZSA9IChzdGFydFNpdHUsIGZpbmlzaFNpdHUpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gc3RhcnRTaXR1LmZvbGQoU2l0dS5iZWZvcmUsIGJlZm9yZVNwZWNpYWwsIFNpdHUuYWZ0ZXIpO1xuICAgICAgY29uc3QgZmluaXNoID0gZmluaXNoU2l0dS5mb2xkKFNpdHUuYmVmb3JlLCBiZWZvcmVTcGVjaWFsLCBTaXR1LmFmdGVyKTtcbiAgICAgIHJldHVybiBTaW1TZWxlY3Rpb24ucmVsYXRpdmUoc3RhcnQsIGZpbmlzaCk7XG4gICAgfTtcbiAgICBjb25zdCBwcmVwcm9jZXNzRXhhY3QgPSAoc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCkgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRTaXR1ID0gYmVmb3JlU3BlY2lhbChzdGFydCwgc29mZnNldCk7XG4gICAgICBjb25zdCBmaW5pc2hTaXR1ID0gYmVmb3JlU3BlY2lhbChmaW5pc2gsIGZvZmZzZXQpO1xuICAgICAgcmV0dXJuIFNpbVNlbGVjdGlvbi5yZWxhdGl2ZShzdGFydFNpdHUsIGZpbmlzaFNpdHUpO1xuICAgIH07XG4gICAgY29uc3QgcHJlcHJvY2VzcyA9IHNlbGVjdGlvbiA9PiBzZWxlY3Rpb24ubWF0Y2goe1xuICAgICAgZG9tUmFuZ2U6IHJuZyA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLnN0YXJ0Q29udGFpbmVyKTtcbiAgICAgICAgY29uc3QgZmluaXNoID0gU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLmVuZENvbnRhaW5lcik7XG4gICAgICAgIHJldHVybiBwcmVwcm9jZXNzRXhhY3Qoc3RhcnQsIHJuZy5zdGFydE9mZnNldCwgZmluaXNoLCBybmcuZW5kT2Zmc2V0KTtcbiAgICAgIH0sXG4gICAgICByZWxhdGl2ZTogcHJlcHJvY2Vzc1JlbGF0aXZlLFxuICAgICAgZXhhY3Q6IHByZXByb2Nlc3NFeGFjdFxuICAgIH0pO1xuXG4gICAgY29uc3QgZnJvbUVsZW1lbnRzID0gKGVsZW1lbnRzLCBzY29wZSkgPT4ge1xuICAgICAgY29uc3QgZG9jID0gc2NvcGUgfHwgZG9jdW1lbnQ7XG4gICAgICBjb25zdCBmcmFnbWVudCA9IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICBlYWNoJGUoZWxlbWVudHMsIGVsZW1lbnQgPT4ge1xuICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChlbGVtZW50LmRvbSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBTdWdhckVsZW1lbnQuZnJvbURvbShmcmFnbWVudCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHRvTmF0aXZlID0gc2VsZWN0aW9uID0+IHtcbiAgICAgIGNvbnN0IHdpbiA9IFNpbVNlbGVjdGlvbi5nZXRXaW4oc2VsZWN0aW9uKS5kb207XG4gICAgICBjb25zdCBnZXREb21SYW5nZSA9IChzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSA9PiBleGFjdFRvTmF0aXZlKHdpbiwgc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCk7XG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IHByZXByb2Nlc3Moc2VsZWN0aW9uKTtcbiAgICAgIHJldHVybiBkaWFnbm9zZSh3aW4sIGZpbHRlcmVkKS5tYXRjaCh7XG4gICAgICAgIGx0cjogZ2V0RG9tUmFuZ2UsXG4gICAgICAgIHJ0bDogZ2V0RG9tUmFuZ2VcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0QXRQb2ludCA9ICh3aW4sIHgsIHkpID0+IGZyb21Qb2ludCQxKHdpbiwgeCwgeSk7XG5cbiAgICBjb25zdCBmcm9tUG9pbnQgPSAoY2xpZW50WCwgY2xpZW50WSwgZG9jKSA9PiB7XG4gICAgICBjb25zdCB3aW4gPSBkZWZhdWx0VmlldyhTdWdhckVsZW1lbnQuZnJvbURvbShkb2MpKTtcbiAgICAgIHJldHVybiBnZXRBdFBvaW50KHdpbi5kb20sIGNsaWVudFgsIGNsaWVudFkpLm1hcChzaW1SYW5nZSA9PiB7XG4gICAgICAgIGNvbnN0IHJuZyA9IGRvYy5jcmVhdGVSYW5nZSgpO1xuICAgICAgICBybmcuc2V0U3RhcnQoc2ltUmFuZ2Uuc3RhcnQuZG9tLCBzaW1SYW5nZS5zb2Zmc2V0KTtcbiAgICAgICAgcm5nLnNldEVuZChzaW1SYW5nZS5maW5pc2guZG9tLCBzaW1SYW5nZS5mb2Zmc2V0KTtcbiAgICAgICAgcmV0dXJuIHJuZztcbiAgICAgIH0pLmdldE9yVW5kZWZpbmVkKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzRXEkNCA9IChybmcxLCBybmcyKSA9PiB7XG4gICAgICByZXR1cm4gaXNOb25OdWxsYWJsZShybmcxKSAmJiBpc05vbk51bGxhYmxlKHJuZzIpICYmIChybmcxLnN0YXJ0Q29udGFpbmVyID09PSBybmcyLnN0YXJ0Q29udGFpbmVyICYmIHJuZzEuc3RhcnRPZmZzZXQgPT09IHJuZzIuc3RhcnRPZmZzZXQpICYmIChybmcxLmVuZENvbnRhaW5lciA9PT0gcm5nMi5lbmRDb250YWluZXIgJiYgcm5nMS5lbmRPZmZzZXQgPT09IHJuZzIuZW5kT2Zmc2V0KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmluZFBhcmVudCA9IChub2RlLCByb290Tm9kZSwgcHJlZGljYXRlKSA9PiB7XG4gICAgICBsZXQgY3VycmVudE5vZGUgPSBub2RlO1xuICAgICAgd2hpbGUgKGN1cnJlbnROb2RlICYmIGN1cnJlbnROb2RlICE9PSByb290Tm9kZSkge1xuICAgICAgICBpZiAocHJlZGljYXRlKGN1cnJlbnROb2RlKSkge1xuICAgICAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIGNvbnN0IGhhc1BhcmVudCQxID0gKG5vZGUsIHJvb3ROb2RlLCBwcmVkaWNhdGUpID0+IGZpbmRQYXJlbnQobm9kZSwgcm9vdE5vZGUsIHByZWRpY2F0ZSkgIT09IG51bGw7XG4gICAgY29uc3QgaGFzUGFyZW50V2l0aE5hbWUgPSAobm9kZSwgcm9vdE5vZGUsIG5hbWUpID0+IGhhc1BhcmVudCQxKG5vZGUsIHJvb3ROb2RlLCBub2RlID0+IG5vZGUubm9kZU5hbWUgPT09IG5hbWUpO1xuICAgIGNvbnN0IGlzQ2VGYWxzZUNhcmV0Q29udGFpbmVyID0gKG5vZGUsIHJvb3ROb2RlKSA9PiBpc0NhcmV0Q29udGFpbmVyJDIobm9kZSkgJiYgIWhhc1BhcmVudCQxKG5vZGUsIHJvb3ROb2RlLCBpc0NhcmV0Tm9kZSk7XG4gICAgY29uc3QgaGFzQnJCZWZvcmVBZnRlciA9IChkb20sIG5vZGUsIGxlZnQpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICBjb25zdCB3YWxrZXIgPSBuZXcgRG9tVHJlZVdhbGtlcihub2RlLCBkb20uZ2V0UGFyZW50KHBhcmVudE5vZGUsIGRvbS5pc0Jsb2NrKSB8fCBkb20uZ2V0Um9vdCgpKTtcbiAgICAgICAgbGV0IGN1cnJlbnROb2RlO1xuICAgICAgICB3aGlsZSAoY3VycmVudE5vZGUgPSB3YWxrZXJbbGVmdCA/ICdwcmV2JyA6ICduZXh0J10oKSkge1xuICAgICAgICAgIGlmIChpc0JyJDYoY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IGlzUHJldk5vZGUgPSAobm9kZSwgbmFtZSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgcmV0dXJuICgoX2EgPSBub2RlLnByZXZpb3VzU2libGluZykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5vZGVOYW1lKSA9PT0gbmFtZTtcbiAgICB9O1xuICAgIGNvbnN0IGhhc0NvbnRlbnRFZGl0YWJsZUZhbHNlUGFyZW50ID0gKHJvb3QsIG5vZGUpID0+IHtcbiAgICAgIGxldCBjdXJyZW50Tm9kZSA9IG5vZGU7XG4gICAgICB3aGlsZSAoY3VycmVudE5vZGUgJiYgY3VycmVudE5vZGUgIT09IHJvb3QpIHtcbiAgICAgICAgaWYgKGlzQ29udGVudEVkaXRhYmxlRmFsc2UkYihjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kVGV4dE5vZGVSZWxhdGl2ZSA9IChkb20sIGlzQWZ0ZXJOb2RlLCBjb2xsYXBzZWQsIGxlZnQsIHN0YXJ0Tm9kZSkgPT4ge1xuICAgICAgY29uc3QgYm9keSA9IGRvbS5nZXRSb290KCk7XG4gICAgICBjb25zdCBub25FbXB0eUVsZW1lbnRzTWFwID0gZG9tLnNjaGVtYS5nZXROb25FbXB0eUVsZW1lbnRzKCk7XG4gICAgICBjb25zdCBwYXJlbnROb2RlID0gc3RhcnROb2RlLnBhcmVudE5vZGU7XG4gICAgICBsZXQgbGFzdElubGluZUVsZW1lbnQ7XG4gICAgICBsZXQgbm9kZTtcbiAgICAgIGlmICghcGFyZW50Tm9kZSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFyZW50QmxvY2tDb250YWluZXIgPSBkb20uZ2V0UGFyZW50KHBhcmVudE5vZGUsIGRvbS5pc0Jsb2NrKSB8fCBib2R5O1xuICAgICAgaWYgKGxlZnQgJiYgaXNCciQ2KHN0YXJ0Tm9kZSkgJiYgaXNBZnRlck5vZGUgJiYgZG9tLmlzRW1wdHkocGFyZW50QmxvY2tDb250YWluZXIpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKENhcmV0UG9zaXRpb24ocGFyZW50Tm9kZSwgZG9tLm5vZGVJbmRleChzdGFydE5vZGUpKSk7XG4gICAgICB9XG4gICAgICBjb25zdCB3YWxrZXIgPSBuZXcgRG9tVHJlZVdhbGtlcihzdGFydE5vZGUsIHBhcmVudEJsb2NrQ29udGFpbmVyKTtcbiAgICAgIHdoaWxlIChub2RlID0gd2Fsa2VyW2xlZnQgPyAncHJldicgOiAnbmV4dCddKCkpIHtcbiAgICAgICAgaWYgKGRvbS5nZXRDb250ZW50RWRpdGFibGVQYXJlbnQobm9kZSkgPT09ICdmYWxzZScgfHwgaXNDZUZhbHNlQ2FyZXRDb250YWluZXIobm9kZSwgYm9keSkpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1RleHQkYShub2RlKSAmJiBub2RlLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmICghaGFzUGFyZW50V2l0aE5hbWUobm9kZSwgYm9keSwgJ0EnKSkge1xuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoQ2FyZXRQb3NpdGlvbihub2RlLCBsZWZ0ID8gbm9kZS5kYXRhLmxlbmd0aCA6IDApKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9tLmlzQmxvY2sobm9kZSkgfHwgbm9uRW1wdHlFbGVtZW50c01hcFtub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0SW5saW5lRWxlbWVudCA9IG5vZGU7XG4gICAgICB9XG4gICAgICBpZiAoaXNDb21tZW50KGxhc3RJbmxpbmVFbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbGxhcHNlZCAmJiBsYXN0SW5saW5lRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShDYXJldFBvc2l0aW9uKGxhc3RJbmxpbmVFbGVtZW50LCAwKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplRW5kUG9pbnQgPSAoZG9tLCBjb2xsYXBzZWQsIHN0YXJ0LCBybmcpID0+IHtcbiAgICAgIGNvbnN0IGJvZHkgPSBkb20uZ2V0Um9vdCgpO1xuICAgICAgbGV0IG5vZGU7XG4gICAgICBsZXQgbm9ybWFsaXplZCA9IGZhbHNlO1xuICAgICAgbGV0IGNvbnRhaW5lciA9IHN0YXJ0ID8gcm5nLnN0YXJ0Q29udGFpbmVyIDogcm5nLmVuZENvbnRhaW5lcjtcbiAgICAgIGxldCBvZmZzZXQgPSBzdGFydCA/IHJuZy5zdGFydE9mZnNldCA6IHJuZy5lbmRPZmZzZXQ7XG4gICAgICBjb25zdCBpc0FmdGVyTm9kZSA9IGlzRWxlbWVudCQ2KGNvbnRhaW5lcikgJiYgb2Zmc2V0ID09PSBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGg7XG4gICAgICBjb25zdCBub25FbXB0eUVsZW1lbnRzTWFwID0gZG9tLnNjaGVtYS5nZXROb25FbXB0eUVsZW1lbnRzKCk7XG4gICAgICBsZXQgZGlyZWN0aW9uTGVmdCA9IHN0YXJ0O1xuICAgICAgaWYgKGlzQ2FyZXRDb250YWluZXIkMihjb250YWluZXIpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNFbGVtZW50JDYoY29udGFpbmVyKSAmJiBvZmZzZXQgPiBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIGRpcmVjdGlvbkxlZnQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0RvY3VtZW50JDEoY29udGFpbmVyKSkge1xuICAgICAgICBjb250YWluZXIgPSBib2R5O1xuICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRhaW5lciA9PT0gYm9keSkge1xuICAgICAgICBpZiAoZGlyZWN0aW9uTGVmdCkge1xuICAgICAgICAgIG5vZGUgPSBjb250YWluZXIuY2hpbGROb2Rlc1tvZmZzZXQgPiAwID8gb2Zmc2V0IC0gMSA6IDBdO1xuICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICBpZiAoaXNDYXJldENvbnRhaW5lciQyKG5vZGUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm9uRW1wdHlFbGVtZW50c01hcFtub2RlLm5vZGVOYW1lXSB8fCBpc1RhYmxlJDIobm9kZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICBvZmZzZXQgPSBNYXRoLm1pbighZGlyZWN0aW9uTGVmdCAmJiBvZmZzZXQgPiAwID8gb2Zmc2V0IC0gMSA6IG9mZnNldCwgY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLmNoaWxkTm9kZXNbb2Zmc2V0XTtcbiAgICAgICAgICBvZmZzZXQgPSBpc1RleHQkYShjb250YWluZXIpICYmIGlzQWZ0ZXJOb2RlID8gY29udGFpbmVyLmRhdGEubGVuZ3RoIDogMDtcbiAgICAgICAgICBpZiAoIWNvbGxhcHNlZCAmJiBjb250YWluZXIgPT09IGJvZHkubGFzdENoaWxkICYmIGlzVGFibGUkMihjb250YWluZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFzQ29udGVudEVkaXRhYmxlRmFsc2VQYXJlbnQoYm9keSwgY29udGFpbmVyKSB8fCBpc0NhcmV0Q29udGFpbmVyJDIoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkgJiYgIWlzVGFibGUkMihjb250YWluZXIpKSB7XG4gICAgICAgICAgICBub2RlID0gY29udGFpbmVyO1xuICAgICAgICAgICAgY29uc3Qgd2Fsa2VyID0gbmV3IERvbVRyZWVXYWxrZXIoY29udGFpbmVyLCBib2R5KTtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgaWYgKGlzQ29udGVudEVkaXRhYmxlRmFsc2UkYihub2RlKSB8fCBpc0NhcmV0Q29udGFpbmVyJDIobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGlzVGV4dCRhKG5vZGUpICYmIG5vZGUuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gZGlyZWN0aW9uTGVmdCA/IDAgOiBub2RlLmRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IG5vZGU7XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKG5vbkVtcHR5RWxlbWVudHNNYXBbbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSAmJiAhaXNUYWJsZUNlbGxPckNhcHRpb24obm9kZSkpIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBkb20ubm9kZUluZGV4KG5vZGUpO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICBpZiAoIWRpcmVjdGlvbkxlZnQpIHtcbiAgICAgICAgICAgICAgICAgIG9mZnNldCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBub3JtYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAobm9kZSA9IGRpcmVjdGlvbkxlZnQgPyB3YWxrZXIubmV4dCgpIDogd2Fsa2VyLnByZXYoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY29sbGFwc2VkKSB7XG4gICAgICAgIGlmIChpc1RleHQkYShjb250YWluZXIpICYmIG9mZnNldCA9PT0gMCkge1xuICAgICAgICAgIGZpbmRUZXh0Tm9kZVJlbGF0aXZlKGRvbSwgaXNBZnRlck5vZGUsIGNvbGxhcHNlZCwgdHJ1ZSwgY29udGFpbmVyKS5lYWNoKHBvcyA9PiB7XG4gICAgICAgICAgICBjb250YWluZXIgPSBwb3MuY29udGFpbmVyKCk7XG4gICAgICAgICAgICBvZmZzZXQgPSBwb3Mub2Zmc2V0KCk7XG4gICAgICAgICAgICBub3JtYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNFbGVtZW50JDYoY29udGFpbmVyKSkge1xuICAgICAgICAgIG5vZGUgPSBjb250YWluZXIuY2hpbGROb2Rlc1tvZmZzZXRdO1xuICAgICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgbm9kZSA9IGNvbnRhaW5lci5jaGlsZE5vZGVzW29mZnNldCAtIDFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobm9kZSAmJiBpc0JyJDYobm9kZSkgJiYgIWlzUHJldk5vZGUobm9kZSwgJ0EnKSAmJiAhaGFzQnJCZWZvcmVBZnRlcihkb20sIG5vZGUsIGZhbHNlKSAmJiAhaGFzQnJCZWZvcmVBZnRlcihkb20sIG5vZGUsIHRydWUpKSB7XG4gICAgICAgICAgICBmaW5kVGV4dE5vZGVSZWxhdGl2ZShkb20sIGlzQWZ0ZXJOb2RlLCBjb2xsYXBzZWQsIHRydWUsIG5vZGUpLmVhY2gocG9zID0+IHtcbiAgICAgICAgICAgICAgY29udGFpbmVyID0gcG9zLmNvbnRhaW5lcigpO1xuICAgICAgICAgICAgICBvZmZzZXQgPSBwb3Mub2Zmc2V0KCk7XG4gICAgICAgICAgICAgIG5vcm1hbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGlyZWN0aW9uTGVmdCAmJiAhY29sbGFwc2VkICYmIGlzVGV4dCRhKGNvbnRhaW5lcikgJiYgb2Zmc2V0ID09PSBjb250YWluZXIuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgZmluZFRleHROb2RlUmVsYXRpdmUoZG9tLCBpc0FmdGVyTm9kZSwgY29sbGFwc2VkLCBmYWxzZSwgY29udGFpbmVyKS5lYWNoKHBvcyA9PiB7XG4gICAgICAgICAgY29udGFpbmVyID0gcG9zLmNvbnRhaW5lcigpO1xuICAgICAgICAgIG9mZnNldCA9IHBvcy5vZmZzZXQoKTtcbiAgICAgICAgICBub3JtYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbm9ybWFsaXplZCAmJiBjb250YWluZXIgPyBPcHRpb25hbC5zb21lKENhcmV0UG9zaXRpb24oY29udGFpbmVyLCBvZmZzZXQpKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZSQyID0gKGRvbSwgcm5nKSA9PiB7XG4gICAgICBjb25zdCBjb2xsYXBzZWQgPSBybmcuY29sbGFwc2VkLCBub3JtUm5nID0gcm5nLmNsb25lUmFuZ2UoKTtcbiAgICAgIGNvbnN0IHN0YXJ0UG9zID0gQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChybmcpO1xuICAgICAgbm9ybWFsaXplRW5kUG9pbnQoZG9tLCBjb2xsYXBzZWQsIHRydWUsIG5vcm1SbmcpLmVhY2gocG9zID0+IHtcbiAgICAgICAgaWYgKCFjb2xsYXBzZWQgfHwgIUNhcmV0UG9zaXRpb24uaXNBYm92ZShzdGFydFBvcywgcG9zKSkge1xuICAgICAgICAgIG5vcm1Sbmcuc2V0U3RhcnQocG9zLmNvbnRhaW5lcigpLCBwb3Mub2Zmc2V0KCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICghY29sbGFwc2VkKSB7XG4gICAgICAgIG5vcm1hbGl6ZUVuZFBvaW50KGRvbSwgY29sbGFwc2VkLCBmYWxzZSwgbm9ybVJuZykuZWFjaChwb3MgPT4ge1xuICAgICAgICAgIG5vcm1Sbmcuc2V0RW5kKHBvcy5jb250YWluZXIoKSwgcG9zLm9mZnNldCgpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoY29sbGFwc2VkKSB7XG4gICAgICAgIG5vcm1SbmcuY29sbGFwc2UodHJ1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNFcSQ0KHJuZywgbm9ybVJuZykgPyBPcHRpb25hbC5ub25lKCkgOiBPcHRpb25hbC5zb21lKG5vcm1SbmcpO1xuICAgIH07XG5cbiAgICBjb25zdCBzcGxpdFRleHQgPSAobm9kZSwgb2Zmc2V0KSA9PiB7XG4gICAgICByZXR1cm4gbm9kZS5zcGxpdFRleHQob2Zmc2V0KTtcbiAgICB9O1xuICAgIGNvbnN0IHNwbGl0ID0gcm5nID0+IHtcbiAgICAgIGxldCBzdGFydENvbnRhaW5lciA9IHJuZy5zdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQgPSBybmcuc3RhcnRPZmZzZXQsIGVuZENvbnRhaW5lciA9IHJuZy5lbmRDb250YWluZXIsIGVuZE9mZnNldCA9IHJuZy5lbmRPZmZzZXQ7XG4gICAgICBpZiAoc3RhcnRDb250YWluZXIgPT09IGVuZENvbnRhaW5lciAmJiBpc1RleHQkYShzdGFydENvbnRhaW5lcikpIHtcbiAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID4gMCAmJiBzdGFydE9mZnNldCA8IHN0YXJ0Q29udGFpbmVyLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgZW5kQ29udGFpbmVyID0gc3BsaXRUZXh0KHN0YXJ0Q29udGFpbmVyLCBzdGFydE9mZnNldCk7XG4gICAgICAgICAgc3RhcnRDb250YWluZXIgPSBlbmRDb250YWluZXIucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgIGlmIChlbmRPZmZzZXQgPiBzdGFydE9mZnNldCkge1xuICAgICAgICAgICAgZW5kT2Zmc2V0ID0gZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQ7XG4gICAgICAgICAgICBjb25zdCBuZXdDb250YWluZXIgPSBzcGxpdFRleHQoZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQpLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyID0gZW5kQ29udGFpbmVyID0gbmV3Q29udGFpbmVyO1xuICAgICAgICAgICAgZW5kT2Zmc2V0ID0gbmV3Q29udGFpbmVyLmRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbmRPZmZzZXQgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzVGV4dCRhKHN0YXJ0Q29udGFpbmVyKSAmJiBzdGFydE9mZnNldCA+IDAgJiYgc3RhcnRPZmZzZXQgPCBzdGFydENvbnRhaW5lci5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyID0gc3BsaXRUZXh0KHN0YXJ0Q29udGFpbmVyLCBzdGFydE9mZnNldCk7XG4gICAgICAgICAgc3RhcnRPZmZzZXQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1RleHQkYShlbmRDb250YWluZXIpICYmIGVuZE9mZnNldCA+IDAgJiYgZW5kT2Zmc2V0IDwgZW5kQ29udGFpbmVyLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgbmV3Q29udGFpbmVyID0gc3BsaXRUZXh0KGVuZENvbnRhaW5lciwgZW5kT2Zmc2V0KS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgICAgZW5kQ29udGFpbmVyID0gbmV3Q29udGFpbmVyO1xuICAgICAgICAgIGVuZE9mZnNldCA9IG5ld0NvbnRhaW5lci5kYXRhLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnRDb250YWluZXIsXG4gICAgICAgIHN0YXJ0T2Zmc2V0LFxuICAgICAgICBlbmRDb250YWluZXIsXG4gICAgICAgIGVuZE9mZnNldFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgUmFuZ2VVdGlscyA9IGRvbSA9PiB7XG4gICAgICBjb25zdCB3YWxrID0gKHJuZywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgcmV0dXJuIHdhbGskMyhkb20sIHJuZywgY2FsbGJhY2spO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNwbGl0JDEgPSBzcGxpdDtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZSA9IHJuZyA9PiB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemUkMihkb20sIHJuZykuZm9sZChuZXZlciwgbm9ybWFsaXplZFJuZyA9PiB7XG4gICAgICAgICAgcm5nLnNldFN0YXJ0KG5vcm1hbGl6ZWRSbmcuc3RhcnRDb250YWluZXIsIG5vcm1hbGl6ZWRSbmcuc3RhcnRPZmZzZXQpO1xuICAgICAgICAgIHJuZy5zZXRFbmQobm9ybWFsaXplZFJuZy5lbmRDb250YWluZXIsIG5vcm1hbGl6ZWRSbmcuZW5kT2Zmc2V0KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZXhwYW5kID0gKHJuZywgb3B0aW9ucyA9IHsgdHlwZTogJ3dvcmQnIH0pID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ3dvcmQnKSB7XG4gICAgICAgICAgY29uc3QgcmFuZ2VMaWtlID0gZXhwYW5kUm5nKGRvbSwgcm5nLCBbeyBpbmxpbmU6ICdzcGFuJyB9XSk7XG4gICAgICAgICAgY29uc3QgbmV3UmFuZ2UgPSBkb20uY3JlYXRlUm5nKCk7XG4gICAgICAgICAgbmV3UmFuZ2Uuc2V0U3RhcnQocmFuZ2VMaWtlLnN0YXJ0Q29udGFpbmVyLCByYW5nZUxpa2Uuc3RhcnRPZmZzZXQpO1xuICAgICAgICAgIG5ld1JhbmdlLnNldEVuZChyYW5nZUxpa2UuZW5kQ29udGFpbmVyLCByYW5nZUxpa2UuZW5kT2Zmc2V0KTtcbiAgICAgICAgICByZXR1cm4gbmV3UmFuZ2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJuZztcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3YWxrLFxuICAgICAgICBzcGxpdDogc3BsaXQkMSxcbiAgICAgICAgZXhwYW5kLFxuICAgICAgICBub3JtYWxpemVcbiAgICAgIH07XG4gICAgfTtcbiAgICBSYW5nZVV0aWxzLmNvbXBhcmVSYW5nZXMgPSBpc0VxJDQ7XG4gICAgUmFuZ2VVdGlscy5nZXRDYXJldFJhbmdlRnJvbVBvaW50ID0gZnJvbVBvaW50O1xuICAgIFJhbmdlVXRpbHMuZ2V0U2VsZWN0ZWROb2RlID0gZ2V0U2VsZWN0ZWROb2RlO1xuICAgIFJhbmdlVXRpbHMuZ2V0Tm9kZSA9IGdldE5vZGUkMTtcblxuICAgIGNvbnN0IERpbWVuc2lvbiA9IChuYW1lLCBnZXRPZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IHNldCA9IChlbGVtZW50LCBoKSA9PiB7XG4gICAgICAgIGlmICghaXNOdW1iZXIoaCkgJiYgIWgubWF0Y2goL15bMC05XSskLykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobmFtZSArICcuc2V0IGFjY2VwdHMgb25seSBwb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlcy4gVmFsdWUgd2FzICcgKyBoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgICAgaWYgKGlzU3VwcG9ydGVkKGRvbSkpIHtcbiAgICAgICAgICBkb20uc3R5bGVbbmFtZV0gPSBoICsgJ3B4JztcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldCA9IGVsZW1lbnQgPT4ge1xuICAgICAgICBjb25zdCByID0gZ2V0T2Zmc2V0KGVsZW1lbnQpO1xuICAgICAgICBpZiAociA8PSAwIHx8IHIgPT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBjc3MgPSBnZXQkNyhlbGVtZW50LCBuYW1lKTtcbiAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChjc3MpIHx8IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0T3V0ZXIgPSBnZXQ7XG4gICAgICBjb25zdCBhZ2dyZWdhdGUgPSAoZWxlbWVudCwgcHJvcGVydGllcykgPT4gZm9sZGwocHJvcGVydGllcywgKGFjYywgcHJvcGVydHkpID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gZ2V0JDcoZWxlbWVudCwgcHJvcGVydHkpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbCA9PT0gdW5kZWZpbmVkID8gMCA6IHBhcnNlSW50KHZhbCwgMTApO1xuICAgICAgICByZXR1cm4gaXNOYU4odmFsdWUpID8gYWNjIDogYWNjICsgdmFsdWU7XG4gICAgICB9LCAwKTtcbiAgICAgIGNvbnN0IG1heCA9IChlbGVtZW50LCB2YWx1ZSwgcHJvcGVydGllcykgPT4ge1xuICAgICAgICBjb25zdCBjdW11bGF0aXZlSW5jbHVzaW9ucyA9IGFnZ3JlZ2F0ZShlbGVtZW50LCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgY29uc3QgYWJzb2x1dGVNYXggPSB2YWx1ZSA+IGN1bXVsYXRpdmVJbmNsdXNpb25zID8gdmFsdWUgLSBjdW11bGF0aXZlSW5jbHVzaW9ucyA6IDA7XG4gICAgICAgIHJldHVybiBhYnNvbHV0ZU1heDtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXQsXG4gICAgICAgIGdldCxcbiAgICAgICAgZ2V0T3V0ZXIsXG4gICAgICAgIGFnZ3JlZ2F0ZSxcbiAgICAgICAgbWF4XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBhcGkgPSBEaW1lbnNpb24oJ2hlaWdodCcsIGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICByZXR1cm4gaW5Cb2R5KGVsZW1lbnQpID8gZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCA6IGRvbS5vZmZzZXRIZWlnaHQ7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0JDIgPSBlbGVtZW50ID0+IGFwaS5nZXQoZWxlbWVudCk7XG5cbiAgICBjb25zdCBnZXREb2N1bWVudCA9ICgpID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGRvY3VtZW50KTtcblxuICAgIGNvbnN0IHdhbGtVcCA9IChuYXZpZ2F0aW9uLCBkb2MpID0+IHtcbiAgICAgIGNvbnN0IGZyYW1lID0gbmF2aWdhdGlvbi52aWV3KGRvYyk7XG4gICAgICByZXR1cm4gZnJhbWUuZm9sZChjb25zdGFudChbXSksIGYgPT4ge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBuYXZpZ2F0aW9uLm93bmVyKGYpO1xuICAgICAgICBjb25zdCByZXN0ID0gd2Fsa1VwKG5hdmlnYXRpb24sIHBhcmVudCk7XG4gICAgICAgIHJldHVybiBbZl0uY29uY2F0KHJlc3QpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBwYXRoVG8gPSAoZWxlbWVudCwgbmF2aWdhdGlvbikgPT4ge1xuICAgICAgY29uc3QgZCA9IG5hdmlnYXRpb24ub3duZXIoZWxlbWVudCk7XG4gICAgICByZXR1cm4gd2Fsa1VwKG5hdmlnYXRpb24sIGQpO1xuICAgIH07XG5cbiAgICBjb25zdCB2aWV3ID0gZG9jID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2MuZG9tID09PSBkb2N1bWVudCA/IE9wdGlvbmFsLm5vbmUoKSA6IE9wdGlvbmFsLmZyb20oKF9hID0gZG9jLmRvbS5kZWZhdWx0VmlldykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZyYW1lRWxlbWVudCk7XG4gICAgICByZXR1cm4gZWxlbWVudC5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIH07XG4gICAgY29uc3Qgb3duZXIgPSBlbGVtZW50ID0+IGRvY3VtZW50T3JPd25lcihlbGVtZW50KTtcblxuICAgIHZhciBOYXZpZ2F0aW9uID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIHZpZXc6IHZpZXcsXG4gICAgICAgIG93bmVyOiBvd25lclxuICAgIH0pO1xuXG4gICAgY29uc3QgZmluZCA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgZG9jID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgIGNvbnN0IHNjcm9sbCA9IGdldCQ1KGRvYyk7XG4gICAgICBjb25zdCBmcmFtZXMgPSBwYXRoVG8oZWxlbWVudCwgTmF2aWdhdGlvbik7XG4gICAgICBjb25zdCBvZmZzZXQgPSB2aWV3cG9ydChlbGVtZW50KTtcbiAgICAgIGNvbnN0IHIgPSBmb2xkcihmcmFtZXMsIChiLCBhKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvYyA9IHZpZXdwb3J0KGEpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxlZnQ6IGIubGVmdCArIGxvYy5sZWZ0LFxuICAgICAgICAgIHRvcDogYi50b3AgKyBsb2MudG9wXG4gICAgICAgIH07XG4gICAgICB9LCB7XG4gICAgICAgIGxlZnQ6IDAsXG4gICAgICAgIHRvcDogMFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gU3VnYXJQb3NpdGlvbihyLmxlZnQgKyBvZmZzZXQubGVmdCArIHNjcm9sbC5sZWZ0LCByLnRvcCArIG9mZnNldC50b3AgKyBzY3JvbGwudG9wKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZXhjbHVkZUZyb21EZXNjZW5kID0gZWxlbWVudCA9PiBuYW1lKGVsZW1lbnQpID09PSAndGV4dGFyZWEnO1xuICAgIGNvbnN0IGZpcmVTY3JvbGxJbnRvVmlld0V2ZW50ID0gKGVkaXRvciwgZGF0YSkgPT4ge1xuICAgICAgY29uc3Qgc2Nyb2xsRXZlbnQgPSBlZGl0b3IuZGlzcGF0Y2goJ1Njcm9sbEludG9WaWV3JywgZGF0YSk7XG4gICAgICByZXR1cm4gc2Nyb2xsRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJlQWZ0ZXJTY3JvbGxJbnRvVmlld0V2ZW50ID0gKGVkaXRvciwgZGF0YSkgPT4ge1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdBZnRlclNjcm9sbEludG9WaWV3JywgZGF0YSk7XG4gICAgfTtcbiAgICBjb25zdCBkZXNjZW5kID0gKGVsZW1lbnQsIG9mZnNldCkgPT4ge1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBjaGlsZHJlbiQxKGVsZW1lbnQpO1xuICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCB8fCBleGNsdWRlRnJvbURlc2NlbmQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG9mZnNldFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChvZmZzZXQgPCBjaGlsZHJlbi5sZW5ndGggJiYgIWV4Y2x1ZGVGcm9tRGVzY2VuZChjaGlsZHJlbltvZmZzZXRdKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVsZW1lbnQ6IGNoaWxkcmVuW29mZnNldF0sXG4gICAgICAgICAgb2Zmc2V0OiAwXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsYXN0ID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmIChleGNsdWRlRnJvbURlc2NlbmQobGFzdCkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIG9mZnNldFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG5hbWUobGFzdCkgPT09ICdpbWcnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBlbGVtZW50OiBsYXN0LFxuICAgICAgICAgICAgICBvZmZzZXQ6IDFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1RleHQkYihsYXN0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZWxlbWVudDogbGFzdCxcbiAgICAgICAgICAgICAgb2Zmc2V0OiBnZXQkMyhsYXN0KS5sZW5ndGhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGVsZW1lbnQ6IGxhc3QsXG4gICAgICAgICAgICAgIG9mZnNldDogY2hpbGRyZW4kMShsYXN0KS5sZW5ndGhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBtYXJrZXJJbmZvID0gKGVsZW1lbnQsIGNsZWFudXBGdW4pID0+IHtcbiAgICAgIGNvbnN0IHBvcyA9IGFic29sdXRlKGVsZW1lbnQpO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gZ2V0JDIoZWxlbWVudCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBib3R0b206IHBvcy50b3AgKyBoZWlnaHQsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgcG9zLFxuICAgICAgICBjbGVhbnVwOiBjbGVhbnVwRnVuXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlTWFya2VyJDEgPSAoZWxlbWVudCwgb2Zmc2V0KSA9PiB7XG4gICAgICBjb25zdCBzdGFydFBvaW50ID0gZGVzY2VuZChlbGVtZW50LCBvZmZzZXQpO1xuICAgICAgY29uc3Qgc3BhbiA9IFN1Z2FyRWxlbWVudC5mcm9tSHRtbCgnPHNwYW4gZGF0YS1tY2UtYm9ndXM9XCJhbGxcIiBzdHlsZT1cImRpc3BsYXk6IGlubGluZS1ibG9jaztcIj4nICsgWldTUCQxICsgJzwvc3Bhbj4nKTtcbiAgICAgIGJlZm9yZSQzKHN0YXJ0UG9pbnQuZWxlbWVudCwgc3Bhbik7XG4gICAgICByZXR1cm4gbWFya2VySW5mbyhzcGFuLCAoKSA9PiByZW1vdmUkNShzcGFuKSk7XG4gICAgfTtcbiAgICBjb25zdCBlbGVtZW50TWFya2VyID0gZWxlbWVudCA9PiBtYXJrZXJJbmZvKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsZW1lbnQpLCBub29wKTtcbiAgICBjb25zdCB3aXRoTWFya2VyID0gKGVkaXRvciwgZiwgcm5nLCBhbGlnblRvVG9wKSA9PiB7XG4gICAgICBwcmVzZXJ2ZVdpdGgoZWRpdG9yLCAoX3MsIF9lKSA9PiBhcHBseVdpdGhNYXJrZXIoZWRpdG9yLCBmLCBybmcsIGFsaWduVG9Ub3ApLCBybmcpO1xuICAgIH07XG4gICAgY29uc3Qgd2l0aFNjcm9sbEV2ZW50cyA9IChlZGl0b3IsIGRvYywgZiwgbWFya2VyLCBhbGlnblRvVG9wKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBlbG06IG1hcmtlci5lbGVtZW50LmRvbSxcbiAgICAgICAgYWxpZ25Ub1RvcFxuICAgICAgfTtcbiAgICAgIGlmIChmaXJlU2Nyb2xsSW50b1ZpZXdFdmVudChlZGl0b3IsIGRhdGEpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IGdldCQ1KGRvYykudG9wO1xuICAgICAgZihlZGl0b3IsIGRvYywgc2Nyb2xsVG9wLCBtYXJrZXIsIGFsaWduVG9Ub3ApO1xuICAgICAgZmlyZUFmdGVyU2Nyb2xsSW50b1ZpZXdFdmVudChlZGl0b3IsIGRhdGEpO1xuICAgIH07XG4gICAgY29uc3QgYXBwbHlXaXRoTWFya2VyID0gKGVkaXRvciwgZiwgcm5nLCBhbGlnblRvVG9wKSA9PiB7XG4gICAgICBjb25zdCBib2R5ID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBjb25zdCBkb2MgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0RG9jKCkpO1xuICAgICAgcmVmbG93KGJvZHkpO1xuICAgICAgY29uc3QgbWFya2VyID0gY3JlYXRlTWFya2VyJDEoU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLnN0YXJ0Q29udGFpbmVyKSwgcm5nLnN0YXJ0T2Zmc2V0KTtcbiAgICAgIHdpdGhTY3JvbGxFdmVudHMoZWRpdG9yLCBkb2MsIGYsIG1hcmtlciwgYWxpZ25Ub1RvcCk7XG4gICAgICBtYXJrZXIuY2xlYW51cCgpO1xuICAgIH07XG4gICAgY29uc3Qgd2l0aEVsZW1lbnQgPSAoZWRpdG9yLCBlbGVtZW50LCBmLCBhbGlnblRvVG9wKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0RG9jKCkpO1xuICAgICAgd2l0aFNjcm9sbEV2ZW50cyhlZGl0b3IsIGRvYywgZiwgZWxlbWVudE1hcmtlcihlbGVtZW50KSwgYWxpZ25Ub1RvcCk7XG4gICAgfTtcbiAgICBjb25zdCBwcmVzZXJ2ZVdpdGggPSAoZWRpdG9yLCBmLCBybmcpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0RWxlbWVudCA9IHJuZy5zdGFydENvbnRhaW5lcjtcbiAgICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gcm5nLnN0YXJ0T2Zmc2V0O1xuICAgICAgY29uc3QgZW5kRWxlbWVudCA9IHJuZy5lbmRDb250YWluZXI7XG4gICAgICBjb25zdCBlbmRPZmZzZXQgPSBybmcuZW5kT2Zmc2V0O1xuICAgICAgZihTdWdhckVsZW1lbnQuZnJvbURvbShzdGFydEVsZW1lbnQpLCBTdWdhckVsZW1lbnQuZnJvbURvbShlbmRFbGVtZW50KSk7XG4gICAgICBjb25zdCBuZXdSbmcgPSBlZGl0b3IuZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgbmV3Um5nLnNldFN0YXJ0KHN0YXJ0RWxlbWVudCwgc3RhcnRPZmZzZXQpO1xuICAgICAgbmV3Um5nLnNldEVuZChlbmRFbGVtZW50LCBlbmRPZmZzZXQpO1xuICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcocm5nKTtcbiAgICB9O1xuICAgIGNvbnN0IHNjcm9sbFRvTWFya2VyID0gKGVkaXRvciwgbWFya2VyLCB2aWV3SGVpZ2h0LCBhbGlnblRvVG9wLCBkb2MpID0+IHtcbiAgICAgIGNvbnN0IHBvcyA9IG1hcmtlci5wb3M7XG4gICAgICBpZiAoYWxpZ25Ub1RvcCkge1xuICAgICAgICB0byhwb3MubGVmdCwgcG9zLnRvcCwgZG9jKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHkgPSBwb3MudG9wIC0gdmlld0hlaWdodCArIG1hcmtlci5oZWlnaHQ7XG4gICAgICAgIHRvKC1lZGl0b3IuZ2V0Qm9keSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQsIHksIGRvYyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbnRvV2luZG93SWZOZWVkZWQgPSAoZWRpdG9yLCBkb2MsIHNjcm9sbFRvcCwgdmlld0hlaWdodCwgbWFya2VyLCBhbGlnblRvVG9wKSA9PiB7XG4gICAgICBjb25zdCB2aWV3cG9ydEJvdHRvbSA9IHZpZXdIZWlnaHQgKyBzY3JvbGxUb3A7XG4gICAgICBjb25zdCBtYXJrZXJUb3AgPSBtYXJrZXIucG9zLnRvcDtcbiAgICAgIGNvbnN0IG1hcmtlckJvdHRvbSA9IG1hcmtlci5ib3R0b207XG4gICAgICBjb25zdCBsYXJnZXJUaGFuVmlld3BvcnQgPSBtYXJrZXJCb3R0b20gLSBtYXJrZXJUb3AgPj0gdmlld0hlaWdodDtcbiAgICAgIGlmIChtYXJrZXJUb3AgPCBzY3JvbGxUb3ApIHtcbiAgICAgICAgc2Nyb2xsVG9NYXJrZXIoZWRpdG9yLCBtYXJrZXIsIHZpZXdIZWlnaHQsIGFsaWduVG9Ub3AgIT09IGZhbHNlLCBkb2MpO1xuICAgICAgfSBlbHNlIGlmIChtYXJrZXJUb3AgPiB2aWV3cG9ydEJvdHRvbSkge1xuICAgICAgICBjb25zdCBhbGlnbiA9IGxhcmdlclRoYW5WaWV3cG9ydCA/IGFsaWduVG9Ub3AgIT09IGZhbHNlIDogYWxpZ25Ub1RvcCA9PT0gdHJ1ZTtcbiAgICAgICAgc2Nyb2xsVG9NYXJrZXIoZWRpdG9yLCBtYXJrZXIsIHZpZXdIZWlnaHQsIGFsaWduLCBkb2MpO1xuICAgICAgfSBlbHNlIGlmIChtYXJrZXJCb3R0b20gPiB2aWV3cG9ydEJvdHRvbSAmJiAhbGFyZ2VyVGhhblZpZXdwb3J0KSB7XG4gICAgICAgIHNjcm9sbFRvTWFya2VyKGVkaXRvciwgbWFya2VyLCB2aWV3SGVpZ2h0LCBhbGlnblRvVG9wID09PSB0cnVlLCBkb2MpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaW50b1dpbmRvdyA9IChlZGl0b3IsIGRvYywgc2Nyb2xsVG9wLCBtYXJrZXIsIGFsaWduVG9Ub3ApID0+IHtcbiAgICAgIGNvbnN0IHZpZXdIZWlnaHQgPSBkZWZhdWx0Vmlldyhkb2MpLmRvbS5pbm5lckhlaWdodDtcbiAgICAgIGludG9XaW5kb3dJZk5lZWRlZChlZGl0b3IsIGRvYywgc2Nyb2xsVG9wLCB2aWV3SGVpZ2h0LCBtYXJrZXIsIGFsaWduVG9Ub3ApO1xuICAgIH07XG4gICAgY29uc3QgaW50b0ZyYW1lID0gKGVkaXRvciwgZG9jLCBzY3JvbGxUb3AsIG1hcmtlciwgYWxpZ25Ub1RvcCkgPT4ge1xuICAgICAgY29uc3QgZnJhbWVWaWV3SGVpZ2h0ID0gZGVmYXVsdFZpZXcoZG9jKS5kb20uaW5uZXJIZWlnaHQ7XG4gICAgICBpbnRvV2luZG93SWZOZWVkZWQoZWRpdG9yLCBkb2MsIHNjcm9sbFRvcCwgZnJhbWVWaWV3SGVpZ2h0LCBtYXJrZXIsIGFsaWduVG9Ub3ApO1xuICAgICAgY29uc3Qgb3AgPSBmaW5kKG1hcmtlci5lbGVtZW50KTtcbiAgICAgIGNvbnN0IHZpZXdwb3J0Qm91bmRzID0gZ2V0Qm91bmRzKHdpbmRvdyk7XG4gICAgICBpZiAob3AudG9wIDwgdmlld3BvcnRCb3VuZHMueSkge1xuICAgICAgICBpbnRvVmlldyhtYXJrZXIuZWxlbWVudCwgYWxpZ25Ub1RvcCAhPT0gZmFsc2UpO1xuICAgICAgfSBlbHNlIGlmIChvcC50b3AgPiB2aWV3cG9ydEJvdW5kcy5ib3R0b20pIHtcbiAgICAgICAgaW50b1ZpZXcobWFya2VyLmVsZW1lbnQsIGFsaWduVG9Ub3AgPT09IHRydWUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmFuZ2VJbnRvV2luZG93ID0gKGVkaXRvciwgcm5nLCBhbGlnblRvVG9wKSA9PiB3aXRoTWFya2VyKGVkaXRvciwgaW50b1dpbmRvdywgcm5nLCBhbGlnblRvVG9wKTtcbiAgICBjb25zdCBlbGVtZW50SW50b1dpbmRvdyA9IChlZGl0b3IsIGVsZW1lbnQsIGFsaWduVG9Ub3ApID0+IHdpdGhFbGVtZW50KGVkaXRvciwgZWxlbWVudCwgaW50b1dpbmRvdywgYWxpZ25Ub1RvcCk7XG4gICAgY29uc3QgcmFuZ2VJbnRvRnJhbWUgPSAoZWRpdG9yLCBybmcsIGFsaWduVG9Ub3ApID0+IHdpdGhNYXJrZXIoZWRpdG9yLCBpbnRvRnJhbWUsIHJuZywgYWxpZ25Ub1RvcCk7XG4gICAgY29uc3QgZWxlbWVudEludG9GcmFtZSA9IChlZGl0b3IsIGVsZW1lbnQsIGFsaWduVG9Ub3ApID0+IHdpdGhFbGVtZW50KGVkaXRvciwgZWxlbWVudCwgaW50b0ZyYW1lLCBhbGlnblRvVG9wKTtcbiAgICBjb25zdCBzY3JvbGxFbGVtZW50SW50b1ZpZXcgPSAoZWRpdG9yLCBlbGVtZW50LCBhbGlnblRvVG9wKSA9PiB7XG4gICAgICBjb25zdCBzY3JvbGxlciA9IGVkaXRvci5pbmxpbmUgPyBlbGVtZW50SW50b1dpbmRvdyA6IGVsZW1lbnRJbnRvRnJhbWU7XG4gICAgICBzY3JvbGxlcihlZGl0b3IsIGVsZW1lbnQsIGFsaWduVG9Ub3ApO1xuICAgIH07XG4gICAgY29uc3Qgc2Nyb2xsUmFuZ2VJbnRvVmlldyA9IChlZGl0b3IsIHJuZywgYWxpZ25Ub1RvcCkgPT4ge1xuICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBlZGl0b3IuaW5saW5lID8gcmFuZ2VJbnRvV2luZG93IDogcmFuZ2VJbnRvRnJhbWU7XG4gICAgICBzY3JvbGxlcihlZGl0b3IsIHJuZywgYWxpZ25Ub1RvcCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZvY3VzJDEgPSBlbGVtZW50ID0+IGVsZW1lbnQuZG9tLmZvY3VzKCk7XG4gICAgY29uc3QgaGFzRm9jdXMkMSA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3Qgcm9vdCA9IGdldFJvb3ROb2RlKGVsZW1lbnQpLmRvbTtcbiAgICAgIHJldHVybiBlbGVtZW50LmRvbSA9PT0gcm9vdC5hY3RpdmVFbGVtZW50O1xuICAgIH07XG4gICAgY29uc3QgYWN0aXZlJDEgPSAocm9vdCA9IGdldERvY3VtZW50KCkpID0+IE9wdGlvbmFsLmZyb20ocm9vdC5kb20uYWN0aXZlRWxlbWVudCkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBzZWFyY2ggPSBlbGVtZW50ID0+IGFjdGl2ZSQxKGdldFJvb3ROb2RlKGVsZW1lbnQpKS5maWx0ZXIoZSA9PiBlbGVtZW50LmRvbS5jb250YWlucyhlLmRvbSkpO1xuXG4gICAgY29uc3QgY2xhbXAkMSA9IChvZmZzZXQsIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IG1heCA9IGlzVGV4dCRiKGVsZW1lbnQpID8gZ2V0JDMoZWxlbWVudCkubGVuZ3RoIDogY2hpbGRyZW4kMShlbGVtZW50KS5sZW5ndGggKyAxO1xuICAgICAgaWYgKG9mZnNldCA+IG1heCkge1xuICAgICAgICByZXR1cm4gbWF4O1xuICAgICAgfSBlbHNlIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZVJuZyA9IHJuZyA9PiBTaW1TZWxlY3Rpb24ucmFuZ2Uocm5nLnN0YXJ0LCBjbGFtcCQxKHJuZy5zb2Zmc2V0LCBybmcuc3RhcnQpLCBybmcuZmluaXNoLCBjbGFtcCQxKHJuZy5mb2Zmc2V0LCBybmcuZmluaXNoKSk7XG4gICAgY29uc3QgaXNPckNvbnRhaW5zID0gKHJvb3QsIGVsbSkgPT4gIWlzUmVzdHJpY3RlZE5vZGUoZWxtLmRvbSkgJiYgKGNvbnRhaW5zKHJvb3QsIGVsbSkgfHwgZXEocm9vdCwgZWxtKSk7XG4gICAgY29uc3QgaXNSbmdJblJvb3QgPSByb290ID0+IHJuZyA9PiBpc09yQ29udGFpbnMocm9vdCwgcm5nLnN0YXJ0KSAmJiBpc09yQ29udGFpbnMocm9vdCwgcm5nLmZpbmlzaCk7XG4gICAgY29uc3Qgc2hvdWxkU3RvcmUgPSBlZGl0b3IgPT4gZWRpdG9yLmlubGluZSB8fCBFbnYuYnJvd3Nlci5pc0ZpcmVmb3goKTtcbiAgICBjb25zdCBuYXRpdmVSYW5nZVRvU2VsZWN0aW9uUmFuZ2UgPSByID0+IFNpbVNlbGVjdGlvbi5yYW5nZShTdWdhckVsZW1lbnQuZnJvbURvbShyLnN0YXJ0Q29udGFpbmVyKSwgci5zdGFydE9mZnNldCwgU3VnYXJFbGVtZW50LmZyb21Eb20oci5lbmRDb250YWluZXIpLCByLmVuZE9mZnNldCk7XG4gICAgY29uc3QgcmVhZFJhbmdlID0gd2luID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbi5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGNvbnN0IHJuZyA9ICFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDAgPyBPcHRpb25hbC5ub25lKCkgOiBPcHRpb25hbC5mcm9tKHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApKTtcbiAgICAgIHJldHVybiBybmcubWFwKG5hdGl2ZVJhbmdlVG9TZWxlY3Rpb25SYW5nZSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRCb29rbWFyayA9IHJvb3QgPT4ge1xuICAgICAgY29uc3Qgd2luID0gZGVmYXVsdFZpZXcocm9vdCk7XG4gICAgICByZXR1cm4gcmVhZFJhbmdlKHdpbi5kb20pLmZpbHRlcihpc1JuZ0luUm9vdChyb290KSk7XG4gICAgfTtcbiAgICBjb25zdCB2YWxpZGF0ZSA9IChyb290LCBib29rbWFyaykgPT4gT3B0aW9uYWwuZnJvbShib29rbWFyaykuZmlsdGVyKGlzUm5nSW5Sb290KHJvb3QpKS5tYXAobm9ybWFsaXplUm5nKTtcbiAgICBjb25zdCBib29rbWFya1RvTmF0aXZlUm5nID0gYm9va21hcmsgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJuZy5zZXRTdGFydChib29rbWFyay5zdGFydC5kb20sIGJvb2ttYXJrLnNvZmZzZXQpO1xuICAgICAgICBybmcuc2V0RW5kKGJvb2ttYXJrLmZpbmlzaC5kb20sIGJvb2ttYXJrLmZvZmZzZXQpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShybmcpO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc3RvcmUgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgbmV3Qm9va21hcmsgPSBzaG91bGRTdG9yZShlZGl0b3IpID8gZ2V0Qm9va21hcmsoU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSkpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgZWRpdG9yLmJvb2ttYXJrID0gbmV3Qm9va21hcmsuaXNTb21lKCkgPyBuZXdCb29rbWFyayA6IGVkaXRvci5ib29rbWFyaztcbiAgICB9O1xuICAgIGNvbnN0IGdldFJuZyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBib29rbWFyayA9IGVkaXRvci5ib29rbWFyayA/IGVkaXRvci5ib29rbWFyayA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIHJldHVybiBib29rbWFyay5iaW5kKHggPT4gdmFsaWRhdGUoU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSksIHgpKS5iaW5kKGJvb2ttYXJrVG9OYXRpdmVSbmcpO1xuICAgIH07XG4gICAgY29uc3QgcmVzdG9yZSA9IGVkaXRvciA9PiB7XG4gICAgICBnZXRSbmcoZWRpdG9yKS5lYWNoKHJuZyA9PiBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNFZGl0b3JVSUVsZW1lbnQkMSA9IGVsbSA9PiB7XG4gICAgICBjb25zdCBjbGFzc05hbWUgPSBlbG0uY2xhc3NOYW1lLnRvU3RyaW5nKCk7XG4gICAgICByZXR1cm4gY2xhc3NOYW1lLmluZGV4T2YoJ3RveC0nKSAhPT0gLTEgfHwgY2xhc3NOYW1lLmluZGV4T2YoJ21jZS0nKSAhPT0gLTE7XG4gICAgfTtcbiAgICBjb25zdCBGb2N1c01hbmFnZXIgPSB7IGlzRWRpdG9yVUlFbGVtZW50OiBpc0VkaXRvclVJRWxlbWVudCQxIH07XG5cbiAgICBjb25zdCB3cmFwcGVkU2V0VGltZW91dCA9IChjYWxsYmFjaywgdGltZSkgPT4ge1xuICAgICAgaWYgKCFpc051bWJlcih0aW1lKSkge1xuICAgICAgICB0aW1lID0gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXRUaW1lb3V0KGNhbGxiYWNrLCB0aW1lKTtcbiAgICB9O1xuICAgIGNvbnN0IHdyYXBwZWRTZXRJbnRlcnZhbCA9IChjYWxsYmFjaywgdGltZSkgPT4ge1xuICAgICAgaWYgKCFpc051bWJlcih0aW1lKSkge1xuICAgICAgICB0aW1lID0gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXRJbnRlcnZhbChjYWxsYmFjaywgdGltZSk7XG4gICAgfTtcbiAgICBjb25zdCBEZWxheSA9IHtcbiAgICAgIHNldEVkaXRvclRpbWVvdXQ6IChlZGl0b3IsIGNhbGxiYWNrLCB0aW1lKSA9PiB7XG4gICAgICAgIHJldHVybiB3cmFwcGVkU2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKCFlZGl0b3IucmVtb3ZlZCkge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRpbWUpO1xuICAgICAgfSxcbiAgICAgIHNldEVkaXRvckludGVydmFsOiAoZWRpdG9yLCBjYWxsYmFjaywgdGltZSkgPT4ge1xuICAgICAgICBjb25zdCB0aW1lciA9IHdyYXBwZWRTZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgaWYgKCFlZGl0b3IucmVtb3ZlZCkge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gICAgICAgICAgfVxuICAgICAgICB9LCB0aW1lKTtcbiAgICAgICAgcmV0dXJuIHRpbWVyO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBpc01hbnVhbE5vZGVDaGFuZ2UgPSBlID0+IHtcbiAgICAgIHJldHVybiBlLnR5cGUgPT09ICdub2RlY2hhbmdlJyAmJiBlLnNlbGVjdGlvbkNoYW5nZTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyUGFnZU1vdXNlVXAgPSAoZWRpdG9yLCB0aHJvdHRsZWRTdG9yZSkgPT4ge1xuICAgICAgY29uc3QgbW91c2VVcFBhZ2UgPSAoKSA9PiB7XG4gICAgICAgIHRocm90dGxlZFN0b3JlLnRocm90dGxlKCk7XG4gICAgICB9O1xuICAgICAgRE9NVXRpbHMuRE9NLmJpbmQoZG9jdW1lbnQsICdtb3VzZXVwJywgbW91c2VVcFBhZ2UpO1xuICAgICAgZWRpdG9yLm9uKCdyZW1vdmUnLCAoKSA9PiB7XG4gICAgICAgIERPTVV0aWxzLkRPTS51bmJpbmQoZG9jdW1lbnQsICdtb3VzZXVwJywgbW91c2VVcFBhZ2UpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3Rlck1vdXNlVXAgPSAoZWRpdG9yLCB0aHJvdHRsZWRTdG9yZSkgPT4ge1xuICAgICAgZWRpdG9yLm9uKCdtb3VzZXVwIHRvdWNoZW5kJywgX2UgPT4ge1xuICAgICAgICB0aHJvdHRsZWRTdG9yZS50aHJvdHRsZSgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlckVkaXRvckV2ZW50cyA9IChlZGl0b3IsIHRocm90dGxlZFN0b3JlKSA9PiB7XG4gICAgICByZWdpc3Rlck1vdXNlVXAoZWRpdG9yLCB0aHJvdHRsZWRTdG9yZSk7XG4gICAgICBlZGl0b3Iub24oJ2tleXVwIE5vZGVDaGFuZ2UgQWZ0ZXJTZXRTZWxlY3Rpb25SYW5nZScsIGUgPT4ge1xuICAgICAgICBpZiAoIWlzTWFudWFsTm9kZUNoYW5nZShlKSkge1xuICAgICAgICAgIHN0b3JlKGVkaXRvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXIkNiA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCB0aHJvdHRsZWRTdG9yZSA9IGZpcnN0JDEoKCkgPT4ge1xuICAgICAgICBzdG9yZShlZGl0b3IpO1xuICAgICAgfSwgMCk7XG4gICAgICBlZGl0b3Iub24oJ2luaXQnLCAoKSA9PiB7XG4gICAgICAgIGlmIChlZGl0b3IuaW5saW5lKSB7XG4gICAgICAgICAgcmVnaXN0ZXJQYWdlTW91c2VVcChlZGl0b3IsIHRocm90dGxlZFN0b3JlKTtcbiAgICAgICAgfVxuICAgICAgICByZWdpc3RlckVkaXRvckV2ZW50cyhlZGl0b3IsIHRocm90dGxlZFN0b3JlKTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdyZW1vdmUnLCAoKSA9PiB7XG4gICAgICAgIHRocm90dGxlZFN0b3JlLmNhbmNlbCgpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGxldCBkb2N1bWVudEZvY3VzSW5IYW5kbGVyO1xuICAgIGNvbnN0IERPTSQ5ID0gRE9NVXRpbHMuRE9NO1xuICAgIGNvbnN0IGlzRWRpdG9yVUlFbGVtZW50ID0gZWxtID0+IHtcbiAgICAgIHJldHVybiBpc0VsZW1lbnQkNihlbG0pICYmIEZvY3VzTWFuYWdlci5pc0VkaXRvclVJRWxlbWVudChlbG0pO1xuICAgIH07XG4gICAgY29uc3QgaXNFZGl0b3JDb250ZW50QXJlYUVsZW1lbnQgPSBlbG0gPT4ge1xuICAgICAgY29uc3QgY2xhc3NMaXN0ID0gZWxtLmNsYXNzTGlzdDtcbiAgICAgIGlmIChjbGFzc0xpc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY2xhc3NMaXN0LmNvbnRhaW5zKCd0b3gtZWRpdC1hcmVhJykgfHwgY2xhc3NMaXN0LmNvbnRhaW5zKCd0b3gtZWRpdC1hcmVhX19pZnJhbWUnKSB8fCBjbGFzc0xpc3QuY29udGFpbnMoJ21jZS1jb250ZW50LWJvZHknKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlzVUlFbGVtZW50ID0gKGVkaXRvciwgZWxtKSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21TZWxlY3RvciA9IGdldEN1c3RvbVVpU2VsZWN0b3IoZWRpdG9yKTtcbiAgICAgIGNvbnN0IHBhcmVudCA9IERPTSQ5LmdldFBhcmVudChlbG0sIGVsbSA9PiB7XG4gICAgICAgIHJldHVybiBpc0VkaXRvclVJRWxlbWVudChlbG0pIHx8IChjdXN0b21TZWxlY3RvciA/IGVkaXRvci5kb20uaXMoZWxtLCBjdXN0b21TZWxlY3RvcikgOiBmYWxzZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBwYXJlbnQgIT09IG51bGw7XG4gICAgfTtcbiAgICBjb25zdCBnZXRBY3RpdmVFbGVtZW50ID0gZWRpdG9yID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBnZXRSb290Tm9kZShTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0RWxlbWVudCgpKSk7XG4gICAgICAgIHJldHVybiBhY3RpdmUkMShyb290KS5mb2xkKCgpID0+IGRvY3VtZW50LmJvZHksIHggPT4geC5kb20pO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmJvZHk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlckV2ZW50cyQxID0gKGVkaXRvck1hbmFnZXIsIGUpID0+IHtcbiAgICAgIGNvbnN0IGVkaXRvciA9IGUuZWRpdG9yO1xuICAgICAgcmVnaXN0ZXIkNihlZGl0b3IpO1xuICAgICAgY29uc3QgdG9nZ2xlQ29udGVudEFyZWFPbkZvY3VzID0gKGVkaXRvciwgZm4pID0+IHtcbiAgICAgICAgaWYgKHNob3VsZEhpZ2hsaWdodE9uRm9jdXMoZWRpdG9yKSAmJiBlZGl0b3IuaW5saW5lICE9PSB0cnVlKSB7XG4gICAgICAgICAgY29uc3QgY29udGVudEFyZWEgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Q29udGFpbmVyKCkpO1xuICAgICAgICAgIGZuKGNvbnRlbnRBcmVhLCAndG94LWVkaXQtZm9jdXMnKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGVkaXRvci5vbignZm9jdXNpbicsICgpID0+IHtcbiAgICAgICAgY29uc3QgZm9jdXNlZEVkaXRvciA9IGVkaXRvck1hbmFnZXIuZm9jdXNlZEVkaXRvcjtcbiAgICAgICAgaWYgKGlzRWRpdG9yQ29udGVudEFyZWFFbGVtZW50KGdldEFjdGl2ZUVsZW1lbnQoZWRpdG9yKSkpIHtcbiAgICAgICAgICB0b2dnbGVDb250ZW50QXJlYU9uRm9jdXMoZWRpdG9yLCBhZGQkMik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvY3VzZWRFZGl0b3IgIT09IGVkaXRvcikge1xuICAgICAgICAgIGlmIChmb2N1c2VkRWRpdG9yKSB7XG4gICAgICAgICAgICBmb2N1c2VkRWRpdG9yLmRpc3BhdGNoKCdibHVyJywgeyBmb2N1c2VkRWRpdG9yOiBlZGl0b3IgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVkaXRvck1hbmFnZXIuc2V0QWN0aXZlKGVkaXRvcik7XG4gICAgICAgICAgZWRpdG9yTWFuYWdlci5mb2N1c2VkRWRpdG9yID0gZWRpdG9yO1xuICAgICAgICAgIGVkaXRvci5kaXNwYXRjaCgnZm9jdXMnLCB7IGJsdXJyZWRFZGl0b3I6IGZvY3VzZWRFZGl0b3IgfSk7XG4gICAgICAgICAgZWRpdG9yLmZvY3VzKHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignZm9jdXNvdXQnLCAoKSA9PiB7XG4gICAgICAgIERlbGF5LnNldEVkaXRvclRpbWVvdXQoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9jdXNlZEVkaXRvciA9IGVkaXRvck1hbmFnZXIuZm9jdXNlZEVkaXRvcjtcbiAgICAgICAgICBpZiAoIWlzRWRpdG9yQ29udGVudEFyZWFFbGVtZW50KGdldEFjdGl2ZUVsZW1lbnQoZWRpdG9yKSkgfHwgZm9jdXNlZEVkaXRvciAhPT0gZWRpdG9yKSB7XG4gICAgICAgICAgICB0b2dnbGVDb250ZW50QXJlYU9uRm9jdXMoZWRpdG9yLCByZW1vdmUkNyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaXNVSUVsZW1lbnQoZWRpdG9yLCBnZXRBY3RpdmVFbGVtZW50KGVkaXRvcikpICYmIGZvY3VzZWRFZGl0b3IgPT09IGVkaXRvcikge1xuICAgICAgICAgICAgZWRpdG9yLmRpc3BhdGNoKCdibHVyJywgeyBmb2N1c2VkRWRpdG9yOiBudWxsIH0pO1xuICAgICAgICAgICAgZWRpdG9yTWFuYWdlci5mb2N1c2VkRWRpdG9yID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBpZiAoIWRvY3VtZW50Rm9jdXNJbkhhbmRsZXIpIHtcbiAgICAgICAgZG9jdW1lbnRGb2N1c0luSGFuZGxlciA9IGUgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZUVkaXRvciA9IGVkaXRvck1hbmFnZXIuYWN0aXZlRWRpdG9yO1xuICAgICAgICAgIGlmIChhY3RpdmVFZGl0b3IpIHtcbiAgICAgICAgICAgIGdldE9yaWdpbmFsRXZlbnRUYXJnZXQoZSkuZWFjaCh0YXJnZXQgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBlbGVtID0gdGFyZ2V0O1xuICAgICAgICAgICAgICBpZiAoZWxlbS5vd25lckRvY3VtZW50ID09PSBkb2N1bWVudCkge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtICE9PSBkb2N1bWVudC5ib2R5ICYmICFpc1VJRWxlbWVudChhY3RpdmVFZGl0b3IsIGVsZW0pICYmIGVkaXRvck1hbmFnZXIuZm9jdXNlZEVkaXRvciA9PT0gYWN0aXZlRWRpdG9yKSB7XG4gICAgICAgICAgICAgICAgICBhY3RpdmVFZGl0b3IuZGlzcGF0Y2goJ2JsdXInLCB7IGZvY3VzZWRFZGl0b3I6IG51bGwgfSk7XG4gICAgICAgICAgICAgICAgICBlZGl0b3JNYW5hZ2VyLmZvY3VzZWRFZGl0b3IgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBET00kOS5iaW5kKGRvY3VtZW50LCAnZm9jdXNpbicsIGRvY3VtZW50Rm9jdXNJbkhhbmRsZXIpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdW5yZWdpc3RlckRvY3VtZW50RXZlbnRzID0gKGVkaXRvck1hbmFnZXIsIGUpID0+IHtcbiAgICAgIGlmIChlZGl0b3JNYW5hZ2VyLmZvY3VzZWRFZGl0b3IgPT09IGUuZWRpdG9yKSB7XG4gICAgICAgIGVkaXRvck1hbmFnZXIuZm9jdXNlZEVkaXRvciA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoIWVkaXRvck1hbmFnZXIuYWN0aXZlRWRpdG9yICYmIGRvY3VtZW50Rm9jdXNJbkhhbmRsZXIpIHtcbiAgICAgICAgRE9NJDkudW5iaW5kKGRvY3VtZW50LCAnZm9jdXNpbicsIGRvY3VtZW50Rm9jdXNJbkhhbmRsZXIpO1xuICAgICAgICBkb2N1bWVudEZvY3VzSW5IYW5kbGVyID0gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldHVwJHYgPSBlZGl0b3JNYW5hZ2VyID0+IHtcbiAgICAgIGVkaXRvck1hbmFnZXIub24oJ0FkZEVkaXRvcicsIGN1cnJ5KHJlZ2lzdGVyRXZlbnRzJDEsIGVkaXRvck1hbmFnZXIpKTtcbiAgICAgIGVkaXRvck1hbmFnZXIub24oJ1JlbW92ZUVkaXRvcicsIGN1cnJ5KHVucmVnaXN0ZXJEb2N1bWVudEV2ZW50cywgZWRpdG9yTWFuYWdlcikpO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRDb250ZW50RWRpdGFibGVIb3N0ID0gKGVkaXRvciwgbm9kZSkgPT4gZWRpdG9yLmRvbS5nZXRQYXJlbnQobm9kZSwgbm9kZSA9PiBlZGl0b3IuZG9tLmdldENvbnRlbnRFZGl0YWJsZShub2RlKSA9PT0gJ3RydWUnKTtcbiAgICBjb25zdCBnZXRDb2xsYXBzZWROb2RlID0gcm5nID0+IHJuZy5jb2xsYXBzZWQgPyBPcHRpb25hbC5mcm9tKGdldE5vZGUkMShybmcuc3RhcnRDb250YWluZXIsIHJuZy5zdGFydE9mZnNldCkpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgY29uc3QgZ2V0Rm9jdXNJbkVsZW1lbnQgPSAocm9vdCwgcm5nKSA9PiBnZXRDb2xsYXBzZWROb2RlKHJuZykuYmluZChub2RlID0+IHtcbiAgICAgIGlmIChpc1RhYmxlU2VjdGlvbihub2RlKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShub2RlKTtcbiAgICAgIH0gZWxzZSBpZiAoIWNvbnRhaW5zKHJvb3QsIG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHJvb3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBub3JtYWxpemVTZWxlY3Rpb24gPSAoZWRpdG9yLCBybmcpID0+IHtcbiAgICAgIGdldEZvY3VzSW5FbGVtZW50KFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpLCBybmcpLmJpbmQoZWxtID0+IHtcbiAgICAgICAgcmV0dXJuIGZpcnN0UG9zaXRpb25JbihlbG0uZG9tKTtcbiAgICAgIH0pLmZvbGQoKCkgPT4ge1xuICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLm5vcm1hbGl6ZSgpO1xuICAgICAgfSwgY2FyZXRQb3MgPT4gZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcoY2FyZXRQb3MudG9SYW5nZSgpKSk7XG4gICAgfTtcbiAgICBjb25zdCBmb2N1c0JvZHkgPSBib2R5ID0+IHtcbiAgICAgIGlmIChib2R5LnNldEFjdGl2ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGJvZHkuc2V0QWN0aXZlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgYm9keS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBib2R5LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoYXNFbGVtZW50Rm9jdXMgPSBlbG0gPT4gaGFzRm9jdXMkMShlbG0pIHx8IHNlYXJjaChlbG0pLmlzU29tZSgpO1xuICAgIGNvbnN0IGhhc0lmcmFtZUZvY3VzID0gZWRpdG9yID0+IGlzTm9uTnVsbGFibGUoZWRpdG9yLmlmcmFtZUVsZW1lbnQpICYmIGhhc0ZvY3VzJDEoU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmlmcmFtZUVsZW1lbnQpKTtcbiAgICBjb25zdCBoYXNJbmxpbmVGb2N1cyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCByYXdCb2R5ID0gZWRpdG9yLmdldEJvZHkoKTtcbiAgICAgIHJldHVybiByYXdCb2R5ICYmIGhhc0VsZW1lbnRGb2N1cyhTdWdhckVsZW1lbnQuZnJvbURvbShyYXdCb2R5KSk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNVaUZvY3VzID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGRvcyA9IGdldFJvb3ROb2RlKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRFbGVtZW50KCkpKTtcbiAgICAgIHJldHVybiBhY3RpdmUkMShkb3MpLmZpbHRlcihlbGVtID0+ICFpc0VkaXRvckNvbnRlbnRBcmVhRWxlbWVudChlbGVtLmRvbSkgJiYgaXNVSUVsZW1lbnQoZWRpdG9yLCBlbGVtLmRvbSkpLmlzU29tZSgpO1xuICAgIH07XG4gICAgY29uc3QgaGFzRm9jdXMgPSBlZGl0b3IgPT4gZWRpdG9yLmlubGluZSA/IGhhc0lubGluZUZvY3VzKGVkaXRvcikgOiBoYXNJZnJhbWVGb2N1cyhlZGl0b3IpO1xuICAgIGNvbnN0IGhhc0VkaXRvck9yVWlGb2N1cyA9IGVkaXRvciA9PiBoYXNGb2N1cyhlZGl0b3IpIHx8IGhhc1VpRm9jdXMoZWRpdG9yKTtcbiAgICBjb25zdCBmb2N1c0VkaXRvciA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uO1xuICAgICAgY29uc3QgYm9keSA9IGVkaXRvci5nZXRCb2R5KCk7XG4gICAgICBsZXQgcm5nID0gc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgZWRpdG9yLnF1aXJrcy5yZWZyZXNoQ29udGVudEVkaXRhYmxlKCk7XG4gICAgICBpZiAoaXNOb25OdWxsYWJsZShlZGl0b3IuYm9va21hcmspICYmICFoYXNGb2N1cyhlZGl0b3IpKSB7XG4gICAgICAgIGdldFJuZyhlZGl0b3IpLmVhY2goYm9va21hcmtSbmcgPT4ge1xuICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKGJvb2ttYXJrUm5nKTtcbiAgICAgICAgICBybmcgPSBib29rbWFya1JuZztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjb250ZW50RWRpdGFibGVIb3N0ID0gZ2V0Q29udGVudEVkaXRhYmxlSG9zdChlZGl0b3IsIHNlbGVjdGlvbi5nZXROb2RlKCkpO1xuICAgICAgaWYgKGNvbnRlbnRFZGl0YWJsZUhvc3QgJiYgZWRpdG9yLmRvbS5pc0NoaWxkT2YoY29udGVudEVkaXRhYmxlSG9zdCwgYm9keSkpIHtcbiAgICAgICAgZm9jdXNCb2R5KGNvbnRlbnRFZGl0YWJsZUhvc3QpO1xuICAgICAgICBub3JtYWxpemVTZWxlY3Rpb24oZWRpdG9yLCBybmcpO1xuICAgICAgICBhY3RpdmF0ZUVkaXRvcihlZGl0b3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIWVkaXRvci5pbmxpbmUpIHtcbiAgICAgICAgaWYgKCFFbnYuYnJvd3Nlci5pc09wZXJhKCkpIHtcbiAgICAgICAgICBmb2N1c0JvZHkoYm9keSk7XG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yLmdldFdpbigpLmZvY3VzKCk7XG4gICAgICB9XG4gICAgICBpZiAoRW52LmJyb3dzZXIuaXNGaXJlZm94KCkgfHwgZWRpdG9yLmlubGluZSkge1xuICAgICAgICBmb2N1c0JvZHkoYm9keSk7XG4gICAgICAgIG5vcm1hbGl6ZVNlbGVjdGlvbihlZGl0b3IsIHJuZyk7XG4gICAgICB9XG4gICAgICBhY3RpdmF0ZUVkaXRvcihlZGl0b3IpO1xuICAgIH07XG4gICAgY29uc3QgYWN0aXZhdGVFZGl0b3IgPSBlZGl0b3IgPT4gZWRpdG9yLmVkaXRvck1hbmFnZXIuc2V0QWN0aXZlKGVkaXRvcik7XG4gICAgY29uc3QgZm9jdXMgPSAoZWRpdG9yLCBza2lwRm9jdXMpID0+IHtcbiAgICAgIGlmIChlZGl0b3IucmVtb3ZlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc2tpcEZvY3VzKSB7XG4gICAgICAgIGFjdGl2YXRlRWRpdG9yKGVkaXRvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb2N1c0VkaXRvcihlZGl0b3IpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBnZXRFbmRwb2ludEVsZW1lbnQgPSAocm9vdCwgcm5nLCBzdGFydCwgcmVhbCwgcmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gc3RhcnQgPyBybmcuc3RhcnRDb250YWluZXIgOiBybmcuZW5kQ29udGFpbmVyO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gc3RhcnQgPyBybmcuc3RhcnRPZmZzZXQgOiBybmcuZW5kT2Zmc2V0O1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oY29udGFpbmVyKS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pLm1hcChlbG0gPT4gIXJlYWwgfHwgIXJuZy5jb2xsYXBzZWQgPyBjaGlsZCQxKGVsbSwgcmVzb2x2ZShlbG0sIG9mZnNldCkpLmdldE9yKGVsbSkgOiBlbG0pLmJpbmQoZWxtID0+IGlzRWxlbWVudCQ3KGVsbSkgPyBPcHRpb25hbC5zb21lKGVsbSkgOiBwYXJlbnQoZWxtKS5maWx0ZXIoaXNFbGVtZW50JDcpKS5tYXAoZWxtID0+IGVsbS5kb20pLmdldE9yKHJvb3QpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0U3RhcnQgPSAocm9vdCwgcm5nLCByZWFsID0gZmFsc2UpID0+IGdldEVuZHBvaW50RWxlbWVudChyb290LCBybmcsIHRydWUsIHJlYWwsIChlbG0sIG9mZnNldCkgPT4gTWF0aC5taW4oY2hpbGROb2Rlc0NvdW50KGVsbSksIG9mZnNldCkpO1xuICAgIGNvbnN0IGdldEVuZCQxID0gKHJvb3QsIHJuZywgcmVhbCA9IGZhbHNlKSA9PiBnZXRFbmRwb2ludEVsZW1lbnQocm9vdCwgcm5nLCBmYWxzZSwgcmVhbCwgKGVsbSwgb2Zmc2V0KSA9PiBvZmZzZXQgPiAwID8gb2Zmc2V0IC0gMSA6IG9mZnNldCk7XG4gICAgY29uc3Qgc2tpcEVtcHR5VGV4dE5vZGVzID0gKG5vZGUsIGZvcndhcmRzKSA9PiB7XG4gICAgICBjb25zdCBvcmlnID0gbm9kZTtcbiAgICAgIHdoaWxlIChub2RlICYmIGlzVGV4dCRhKG5vZGUpICYmIG5vZGUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIG5vZGUgPSBmb3J3YXJkcyA/IG5vZGUubmV4dFNpYmxpbmcgOiBub2RlLnByZXZpb3VzU2libGluZztcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlIHx8IG9yaWc7XG4gICAgfTtcbiAgICBjb25zdCBnZXROb2RlID0gKHJvb3QsIHJuZykgPT4ge1xuICAgICAgaWYgKCFybmcpIHtcbiAgICAgICAgcmV0dXJuIHJvb3Q7XG4gICAgICB9XG4gICAgICBsZXQgc3RhcnRDb250YWluZXIgPSBybmcuc3RhcnRDb250YWluZXI7XG4gICAgICBsZXQgZW5kQ29udGFpbmVyID0gcm5nLmVuZENvbnRhaW5lcjtcbiAgICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gcm5nLnN0YXJ0T2Zmc2V0O1xuICAgICAgY29uc3QgZW5kT2Zmc2V0ID0gcm5nLmVuZE9mZnNldDtcbiAgICAgIGxldCBub2RlID0gcm5nLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xuICAgICAgaWYgKCFybmcuY29sbGFwc2VkKSB7XG4gICAgICAgIGlmIChzdGFydENvbnRhaW5lciA9PT0gZW5kQ29udGFpbmVyKSB7XG4gICAgICAgICAgaWYgKGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0IDwgMikge1xuICAgICAgICAgICAgaWYgKHN0YXJ0Q29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgICAgICBub2RlID0gc3RhcnRDb250YWluZXIuY2hpbGROb2Rlc1tzdGFydE9mZnNldF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1RleHQkYShzdGFydENvbnRhaW5lcikgJiYgaXNUZXh0JGEoZW5kQ29udGFpbmVyKSkge1xuICAgICAgICAgIGlmIChzdGFydENvbnRhaW5lci5sZW5ndGggPT09IHN0YXJ0T2Zmc2V0KSB7XG4gICAgICAgICAgICBzdGFydENvbnRhaW5lciA9IHNraXBFbXB0eVRleHROb2RlcyhzdGFydENvbnRhaW5lci5uZXh0U2libGluZywgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyID0gc3RhcnRDb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVuZE9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgZW5kQ29udGFpbmVyID0gc2tpcEVtcHR5VGV4dE5vZGVzKGVuZENvbnRhaW5lci5wcmV2aW91c1NpYmxpbmcsIGZhbHNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZW5kQ29udGFpbmVyID0gZW5kQ29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGFydENvbnRhaW5lciAmJiBzdGFydENvbnRhaW5lciA9PT0gZW5kQ29udGFpbmVyKSB7XG4gICAgICAgICAgICBub2RlID0gc3RhcnRDb250YWluZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBlbG0gPSBpc1RleHQkYShub2RlKSA/IG5vZGUucGFyZW50Tm9kZSA6IG5vZGU7XG4gICAgICByZXR1cm4gaXNFbGVtZW50JDYoZWxtKSA/IGVsbSA6IHJvb3Q7XG4gICAgfTtcbiAgICBjb25zdCBnZXRTZWxlY3RlZEJsb2NrcyA9IChkb20sIHJuZywgc3RhcnRFbG0sIGVuZEVsbSkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRCbG9ja3MgPSBbXTtcbiAgICAgIGNvbnN0IHJvb3QgPSBkb20uZ2V0Um9vdCgpO1xuICAgICAgY29uc3Qgc3RhcnQgPSBkb20uZ2V0UGFyZW50KHN0YXJ0RWxtIHx8IGdldFN0YXJ0KHJvb3QsIHJuZywgcm5nLmNvbGxhcHNlZCksIGRvbS5pc0Jsb2NrKTtcbiAgICAgIGNvbnN0IGVuZCA9IGRvbS5nZXRQYXJlbnQoZW5kRWxtIHx8IGdldEVuZCQxKHJvb3QsIHJuZywgcm5nLmNvbGxhcHNlZCksIGRvbS5pc0Jsb2NrKTtcbiAgICAgIGlmIChzdGFydCAmJiBzdGFydCAhPT0gcm9vdCkge1xuICAgICAgICBzZWxlY3RlZEJsb2Nrcy5wdXNoKHN0YXJ0KTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGFydCAmJiBlbmQgJiYgc3RhcnQgIT09IGVuZCkge1xuICAgICAgICBsZXQgbm9kZTtcbiAgICAgICAgY29uc3Qgd2Fsa2VyID0gbmV3IERvbVRyZWVXYWxrZXIoc3RhcnQsIHJvb3QpO1xuICAgICAgICB3aGlsZSAoKG5vZGUgPSB3YWxrZXIubmV4dCgpKSAmJiBub2RlICE9PSBlbmQpIHtcbiAgICAgICAgICBpZiAoZG9tLmlzQmxvY2sobm9kZSkpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkQmxvY2tzLnB1c2gobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZW5kICYmIHN0YXJ0ICE9PSBlbmQgJiYgZW5kICE9PSByb290KSB7XG4gICAgICAgIHNlbGVjdGVkQmxvY2tzLnB1c2goZW5kKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZWxlY3RlZEJsb2NrcztcbiAgICB9O1xuICAgIGNvbnN0IHNlbGVjdCA9IChkb20sIG5vZGUsIGNvbnRlbnQpID0+IE9wdGlvbmFsLmZyb20obm9kZSkuYmluZChub2RlID0+IE9wdGlvbmFsLmZyb20obm9kZS5wYXJlbnROb2RlKS5tYXAocGFyZW50ID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IGRvbS5ub2RlSW5kZXgobm9kZSk7XG4gICAgICBjb25zdCBybmcgPSBkb20uY3JlYXRlUm5nKCk7XG4gICAgICBybmcuc2V0U3RhcnQocGFyZW50LCBpZHgpO1xuICAgICAgcm5nLnNldEVuZChwYXJlbnQsIGlkeCArIDEpO1xuICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgbW92ZUVuZFBvaW50KGRvbSwgcm5nLCBub2RlLCB0cnVlKTtcbiAgICAgICAgbW92ZUVuZFBvaW50KGRvbSwgcm5nLCBub2RlLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcm5nO1xuICAgIH0pKTtcblxuICAgIGNvbnN0IHByb2Nlc3NSYW5nZXMgPSAoZWRpdG9yLCByYW5nZXMpID0+IG1hcCQzKHJhbmdlcywgcmFuZ2UgPT4ge1xuICAgICAgY29uc3QgZXZ0ID0gZWRpdG9yLmRpc3BhdGNoKCdHZXRTZWxlY3Rpb25SYW5nZScsIHsgcmFuZ2UgfSk7XG4gICAgICByZXR1cm4gZXZ0LnJhbmdlICE9PSByYW5nZSA/IGV2dC5yYW5nZSA6IHJhbmdlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZ2V0RW5kID0gZWxlbWVudCA9PiBuYW1lKGVsZW1lbnQpID09PSAnaW1nJyA/IDEgOiBnZXRPcHRpb24oZWxlbWVudCkuZm9sZCgoKSA9PiBjaGlsZHJlbiQxKGVsZW1lbnQpLmxlbmd0aCwgdiA9PiB2Lmxlbmd0aCk7XG4gICAgY29uc3QgaXNUZXh0Tm9kZVdpdGhDdXJzb3JQb3NpdGlvbiA9IGVsID0+IGdldE9wdGlvbihlbCkuZmlsdGVyKHRleHQgPT4gdGV4dC50cmltKCkubGVuZ3RoICE9PSAwIHx8IHRleHQuaW5kZXhPZihuYnNwKSA+IC0xKS5pc1NvbWUoKTtcbiAgICBjb25zdCBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJDUgPSBlbGVtID0+IGlzSFRNTEVsZW1lbnQoZWxlbSkgJiYgZ2V0JDkoZWxlbSwgJ2NvbnRlbnRlZGl0YWJsZScpID09PSAnZmFsc2UnO1xuICAgIGNvbnN0IGVsZW1lbnRzV2l0aEN1cnNvclBvc2l0aW9uID0gW1xuICAgICAgJ2ltZycsXG4gICAgICAnYnInXG4gICAgXTtcbiAgICBjb25zdCBpc0N1cnNvclBvc2l0aW9uID0gZWxlbSA9PiB7XG4gICAgICBjb25zdCBoYXNDdXJzb3JQb3NpdGlvbiA9IGlzVGV4dE5vZGVXaXRoQ3Vyc29yUG9zaXRpb24oZWxlbSk7XG4gICAgICByZXR1cm4gaGFzQ3Vyc29yUG9zaXRpb24gfHwgY29udGFpbnMkMihlbGVtZW50c1dpdGhDdXJzb3JQb3NpdGlvbiwgbmFtZShlbGVtKSkgfHwgaXNDb250ZW50RWRpdGFibGVGYWxzZSQ1KGVsZW0pO1xuICAgIH07XG5cbiAgICBjb25zdCBmaXJzdCA9IGVsZW1lbnQgPT4gZGVzY2VuZGFudCQxKGVsZW1lbnQsIGlzQ3Vyc29yUG9zaXRpb24pO1xuICAgIGNvbnN0IGxhc3QgPSBlbGVtZW50ID0+IGRlc2NlbmRhbnRSdGwoZWxlbWVudCwgaXNDdXJzb3JQb3NpdGlvbik7XG4gICAgY29uc3QgZGVzY2VuZGFudFJ0bCA9IChzY29wZSwgcHJlZGljYXRlKSA9PiB7XG4gICAgICBjb25zdCBkZXNjZW5kID0gZWxlbWVudCA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gY2hpbGRyZW4kMShlbGVtZW50KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgICAgICBpZiAocHJlZGljYXRlKGNoaWxkKSkge1xuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoY2hpbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXMgPSBkZXNjZW5kKGNoaWxkKTtcbiAgICAgICAgICBpZiAocmVzLmlzU29tZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBkZXNjZW5kKHNjb3BlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYXV0b2NvbXBsZXRlU2VsZWN0b3IgPSAnW2RhdGEtbWNlLWF1dG9jb21wbGV0ZXJdJztcbiAgICBjb25zdCBjcmVhdGUkOSA9IChlZGl0b3IsIHJhbmdlKSA9PiB7XG4gICAgICBpZiAoZmluZEluKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpKS5pc05vbmUoKSkge1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gU3VnYXJFbGVtZW50LmZyb21IdG1sKCc8c3BhbiBkYXRhLW1jZS1hdXRvY29tcGxldGVyPVwiMVwiIGRhdGEtbWNlLWJvZ3VzPVwiMVwiPjwvc3Bhbj4nLCBlZGl0b3IuZ2V0RG9jKCkpO1xuICAgICAgICBhcHBlbmQkMSh3cmFwcGVyLCBTdWdhckVsZW1lbnQuZnJvbURvbShyYW5nZS5leHRyYWN0Q29udGVudHMoKSkpO1xuICAgICAgICByYW5nZS5pbnNlcnROb2RlKHdyYXBwZXIuZG9tKTtcbiAgICAgICAgcGFyZW50KHdyYXBwZXIpLmVhY2goZWxtID0+IGVsbS5kb20ubm9ybWFsaXplKCkpO1xuICAgICAgICBsYXN0KHdyYXBwZXIpLm1hcChsYXN0ID0+IHtcbiAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldEN1cnNvckxvY2F0aW9uKGxhc3QuZG9tLCBnZXRFbmQobGFzdCkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGRldGVjdCQxID0gZWxtID0+IGNsb3Nlc3QkMyhlbG0sIGF1dG9jb21wbGV0ZVNlbGVjdG9yKTtcbiAgICBjb25zdCBmaW5kSW4gPSBlbG0gPT4gZGVzY2VuZGFudChlbG0sIGF1dG9jb21wbGV0ZVNlbGVjdG9yKTtcbiAgICBjb25zdCByZW1vdmUkMiA9IChlZGl0b3IsIGVsbSkgPT4gZmluZEluKGVsbSkuZWFjaCh3cmFwcGVyID0+IHtcbiAgICAgIGNvbnN0IGJvb2ttYXJrID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRCb29rbWFyaygpO1xuICAgICAgdW53cmFwKHdyYXBwZXIpO1xuICAgICAgZWRpdG9yLnNlbGVjdGlvbi5tb3ZlVG9Cb29rbWFyayhib29rbWFyayk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0eXBlTG9va3VwID0ge1xuICAgICAgJyN0ZXh0JzogMyxcbiAgICAgICcjY29tbWVudCc6IDgsXG4gICAgICAnI2NkYXRhJzogNCxcbiAgICAgICcjcGknOiA3LFxuICAgICAgJyNkb2N0eXBlJzogMTAsXG4gICAgICAnI2RvY3VtZW50LWZyYWdtZW50JzogMTFcbiAgICB9O1xuICAgIGNvbnN0IHdhbGskMiA9IChub2RlLCByb290LCBwcmV2KSA9PiB7XG4gICAgICBjb25zdCBzdGFydE5hbWUgPSBwcmV2ID8gJ2xhc3RDaGlsZCcgOiAnZmlyc3RDaGlsZCc7XG4gICAgICBjb25zdCBzaWJsaW5nTmFtZSA9IHByZXYgPyAncHJldicgOiAnbmV4dCc7XG4gICAgICBpZiAobm9kZVtzdGFydE5hbWVdKSB7XG4gICAgICAgIHJldHVybiBub2RlW3N0YXJ0TmFtZV07XG4gICAgICB9XG4gICAgICBpZiAobm9kZSAhPT0gcm9vdCkge1xuICAgICAgICBsZXQgc2libGluZyA9IG5vZGVbc2libGluZ05hbWVdO1xuICAgICAgICBpZiAoc2libGluZykge1xuICAgICAgICAgIHJldHVybiBzaWJsaW5nO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IHBhcmVudCA9IG5vZGUucGFyZW50OyBwYXJlbnQgJiYgcGFyZW50ICE9PSByb290OyBwYXJlbnQgPSBwYXJlbnQucGFyZW50KSB7XG4gICAgICAgICAgc2libGluZyA9IHBhcmVudFtzaWJsaW5nTmFtZV07XG4gICAgICAgICAgaWYgKHNpYmxpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzaWJsaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIGNvbnN0IGlzRW1wdHlUZXh0Tm9kZSA9IG5vZGUgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgdGV4dCA9IChfYSA9IG5vZGUudmFsdWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnO1xuICAgICAgaWYgKCFpc1doaXRlc3BhY2VUZXh0KHRleHQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBub2RlLnBhcmVudDtcbiAgICAgIGlmIChwYXJlbnROb2RlICYmIChwYXJlbnROb2RlLm5hbWUgIT09ICdzcGFuJyB8fCBwYXJlbnROb2RlLmF0dHIoJ3N0eWxlJykpICYmIC9eWyBdKyQvLnRlc3QodGV4dCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBpc05vbkVtcHR5RWxlbWVudCA9IG5vZGUgPT4ge1xuICAgICAgY29uc3QgaXNOYW1lZEFuY2hvciA9IG5vZGUubmFtZSA9PT0gJ2EnICYmICFub2RlLmF0dHIoJ2hyZWYnKSAmJiBub2RlLmF0dHIoJ2lkJyk7XG4gICAgICByZXR1cm4gbm9kZS5hdHRyKCduYW1lJykgfHwgbm9kZS5hdHRyKCdpZCcpICYmICFub2RlLmZpcnN0Q2hpbGQgfHwgbm9kZS5hdHRyKCdkYXRhLW1jZS1ib29rbWFyaycpIHx8IGlzTmFtZWRBbmNob3I7XG4gICAgfTtcbiAgICBjbGFzcyBBc3ROb2RlIHtcbiAgICAgIHN0YXRpYyBjcmVhdGUobmFtZSwgYXR0cnMpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBBc3ROb2RlKG5hbWUsIHR5cGVMb29rdXBbbmFtZV0gfHwgMSk7XG4gICAgICAgIGlmIChhdHRycykge1xuICAgICAgICAgIGVhY2gkZChhdHRycywgKHZhbHVlLCBhdHRyTmFtZSkgPT4ge1xuICAgICAgICAgICAgbm9kZS5hdHRyKGF0dHJOYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG4gICAgICBjb25zdHJ1Y3RvcihuYW1lLCB0eXBlKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIGlmICh0eXBlID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLm1hcCA9IHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXBsYWNlKG5vZGUpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmIChub2RlLnBhcmVudCkge1xuICAgICAgICAgIG5vZGUucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5pbnNlcnQobm9kZSwgc2VsZik7XG4gICAgICAgIHNlbGYucmVtb3ZlKCk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgfVxuICAgICAgYXR0cihuYW1lLCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKCFpc1N0cmluZyhuYW1lKSkge1xuICAgICAgICAgIGlmIChpc05vbk51bGxhYmxlKG5hbWUpKSB7XG4gICAgICAgICAgICBlYWNoJGQobmFtZSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgc2VsZi5hdHRyKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF0dHJzID0gc2VsZi5hdHRyaWJ1dGVzO1xuICAgICAgICBpZiAoYXR0cnMpIHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmIChuYW1lIGluIGF0dHJzLm1hcCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBhdHRycy5tYXBbbmFtZV07XG4gICAgICAgICAgICAgICAgbGV0IGkgPSBhdHRycy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgICAgICAgaWYgKGF0dHJzW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmFtZSBpbiBhdHRycy5tYXApIHtcbiAgICAgICAgICAgICAgbGV0IGkgPSBhdHRycy5sZW5ndGg7XG4gICAgICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgICAgICBpZiAoYXR0cnNbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgICAgICAgYXR0cnNbaV0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYXR0cnMucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF0dHJzLm1hcFtuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhdHRycy5tYXBbbmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGNsb25lKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgQXN0Tm9kZShzZWxmLm5hbWUsIHNlbGYudHlwZSk7XG4gICAgICAgIGNvbnN0IHNlbGZBdHRycyA9IHNlbGYuYXR0cmlidXRlcztcbiAgICAgICAgaWYgKHNlbGZBdHRycykge1xuICAgICAgICAgIGNvbnN0IGNsb25lQXR0cnMgPSBbXTtcbiAgICAgICAgICBjbG9uZUF0dHJzLm1hcCA9IHt9O1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gc2VsZkF0dHJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc2VsZkF0dHIgPSBzZWxmQXR0cnNbaV07XG4gICAgICAgICAgICBpZiAoc2VsZkF0dHIubmFtZSAhPT0gJ2lkJykge1xuICAgICAgICAgICAgICBjbG9uZUF0dHJzW2Nsb25lQXR0cnMubGVuZ3RoXSA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBzZWxmQXR0ci5uYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBzZWxmQXR0ci52YWx1ZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBjbG9uZUF0dHJzLm1hcFtzZWxmQXR0ci5uYW1lXSA9IHNlbGZBdHRyLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjbG9uZS5hdHRyaWJ1dGVzID0gY2xvbmVBdHRycztcbiAgICAgICAgfVxuICAgICAgICBjbG9uZS52YWx1ZSA9IHNlbGYudmFsdWU7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICAgIH1cbiAgICAgIHdyYXAod3JhcHBlcikge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKHNlbGYucGFyZW50KSB7XG4gICAgICAgICAgc2VsZi5wYXJlbnQuaW5zZXJ0KHdyYXBwZXIsIHNlbGYpO1xuICAgICAgICAgIHdyYXBwZXIuYXBwZW5kKHNlbGYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgfVxuICAgICAgdW53cmFwKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgZm9yIChsZXQgbm9kZSA9IHNlbGYuZmlyc3RDaGlsZDsgbm9kZTspIHtcbiAgICAgICAgICBjb25zdCBuZXh0ID0gbm9kZS5uZXh0O1xuICAgICAgICAgIHNlbGYuaW5zZXJ0KG5vZGUsIHNlbGYsIHRydWUpO1xuICAgICAgICAgIG5vZGUgPSBuZXh0O1xuICAgICAgICB9XG4gICAgICAgIHNlbGYucmVtb3ZlKCk7XG4gICAgICB9XG4gICAgICByZW1vdmUoKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzLCBwYXJlbnQgPSBzZWxmLnBhcmVudCwgbmV4dCA9IHNlbGYubmV4dCwgcHJldiA9IHNlbGYucHJldjtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgIGlmIChwYXJlbnQuZmlyc3RDaGlsZCA9PT0gc2VsZikge1xuICAgICAgICAgICAgcGFyZW50LmZpcnN0Q2hpbGQgPSBuZXh0O1xuICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgbmV4dC5wcmV2ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHByZXYpIHtcbiAgICAgICAgICAgIHByZXYubmV4dCA9IG5leHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXJlbnQubGFzdENoaWxkID09PSBzZWxmKSB7XG4gICAgICAgICAgICBwYXJlbnQubGFzdENoaWxkID0gcHJldjtcbiAgICAgICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgICAgIHByZXYubmV4dCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0KSB7XG4gICAgICAgICAgICBuZXh0LnByZXYgPSBwcmV2O1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxmLnBhcmVudCA9IHNlbGYubmV4dCA9IHNlbGYucHJldiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICB9XG4gICAgICBhcHBlbmQobm9kZSkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKG5vZGUucGFyZW50KSB7XG4gICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXN0ID0gc2VsZi5sYXN0Q2hpbGQ7XG4gICAgICAgIGlmIChsYXN0KSB7XG4gICAgICAgICAgbGFzdC5uZXh0ID0gbm9kZTtcbiAgICAgICAgICBub2RlLnByZXYgPSBsYXN0O1xuICAgICAgICAgIHNlbGYubGFzdENoaWxkID0gbm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWxmLmxhc3RDaGlsZCA9IHNlbGYuZmlyc3RDaGlsZCA9IG5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5wYXJlbnQgPSBzZWxmO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH1cbiAgICAgIGluc2VydChub2RlLCByZWZOb2RlLCBiZWZvcmUpIHtcbiAgICAgICAgaWYgKG5vZGUucGFyZW50KSB7XG4gICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnQgPSByZWZOb2RlLnBhcmVudCB8fCB0aGlzO1xuICAgICAgICBpZiAoYmVmb3JlKSB7XG4gICAgICAgICAgaWYgKHJlZk5vZGUgPT09IHBhcmVudC5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICBwYXJlbnQuZmlyc3RDaGlsZCA9IG5vZGU7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZWZOb2RlLnByZXYpIHtcbiAgICAgICAgICAgIHJlZk5vZGUucHJldi5uZXh0ID0gbm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbm9kZS5wcmV2ID0gcmVmTm9kZS5wcmV2O1xuICAgICAgICAgIG5vZGUubmV4dCA9IHJlZk5vZGU7XG4gICAgICAgICAgcmVmTm9kZS5wcmV2ID0gbm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAocmVmTm9kZSA9PT0gcGFyZW50Lmxhc3RDaGlsZCkge1xuICAgICAgICAgICAgcGFyZW50Lmxhc3RDaGlsZCA9IG5vZGU7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZWZOb2RlLm5leHQpIHtcbiAgICAgICAgICAgIHJlZk5vZGUubmV4dC5wcmV2ID0gbm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbm9kZS5uZXh0ID0gcmVmTm9kZS5uZXh0O1xuICAgICAgICAgIG5vZGUucHJldiA9IHJlZk5vZGU7XG4gICAgICAgICAgcmVmTm9kZS5uZXh0ID0gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG4gICAgICBnZXRBbGwobmFtZSkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBub2RlID0gc2VsZi5maXJzdENoaWxkOyBub2RlOyBub2RlID0gd2FsayQyKG5vZGUsIHNlbGYpKSB7XG4gICAgICAgICAgaWYgKG5vZGUubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgY29sbGVjdGlvbi5wdXNoKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgIH1cbiAgICAgIGNoaWxkcmVuKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBub2RlID0gc2VsZi5maXJzdENoaWxkOyBub2RlOyBub2RlID0gbm9kZS5uZXh0KSB7XG4gICAgICAgICAgY29sbGVjdGlvbi5wdXNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgICAgfVxuICAgICAgZW1wdHkoKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBpZiAoc2VsZi5maXJzdENoaWxkKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZXMgPSBbXTtcbiAgICAgICAgICBmb3IgKGxldCBub2RlID0gc2VsZi5maXJzdENoaWxkOyBub2RlOyBub2RlID0gd2FsayQyKG5vZGUsIHNlbGYpKSB7XG4gICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgaSA9IG5vZGVzLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgICBub2RlLnBhcmVudCA9IG5vZGUuZmlyc3RDaGlsZCA9IG5vZGUubGFzdENoaWxkID0gbm9kZS5uZXh0ID0gbm9kZS5wcmV2ID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5maXJzdENoaWxkID0gc2VsZi5sYXN0Q2hpbGQgPSBudWxsO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgIH1cbiAgICAgIGlzRW1wdHkoZWxlbWVudHMsIHdoaXRlc3BhY2UgPSB7fSwgcHJlZGljYXRlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBub2RlID0gc2VsZi5maXJzdENoaWxkO1xuICAgICAgICBpZiAoaXNOb25FbXB0eUVsZW1lbnQoc2VsZikpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAobm9kZS50eXBlID09PSAxKSB7XG4gICAgICAgICAgICAgIGlmIChub2RlLmF0dHIoJ2RhdGEtbWNlLWJvZ3VzJykpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZWxlbWVudHNbbm9kZS5uYW1lXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoaXNOb25FbXB0eUVsZW1lbnQobm9kZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09IDgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gMyAmJiAhaXNFbXB0eVRleHROb2RlKG5vZGUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09IDMgJiYgbm9kZS5wYXJlbnQgJiYgd2hpdGVzcGFjZVtub2RlLnBhcmVudC5uYW1lXSAmJiBpc1doaXRlc3BhY2VUZXh0KChfYSA9IG5vZGUudmFsdWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJlZGljYXRlICYmIHByZWRpY2F0ZShub2RlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSB3aGlsZSAobm9kZSA9IHdhbGskMihub2RlLCBzZWxmKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICB3YWxrKHByZXYpIHtcbiAgICAgICAgcmV0dXJuIHdhbGskMih0aGlzLCBudWxsLCBwcmV2KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpc0NvbmRpdGlvbmFsQ29tbWVudCA9IChodG1sLCBzdGFydEluZGV4KSA9PiAvXlxccypcXFtpZiBbXFx3XFxXXStcXF0+Lio8IVxcW2VuZGlmXFxdKC0tIT8pPz4vLnRlc3QoaHRtbC5zdWJzdHIoc3RhcnRJbmRleCkpO1xuICAgIGNvbnN0IGZpbmRDb21tZW50RW5kSW5kZXggPSAoaHRtbCwgaXNCb2d1cywgc3RhcnRJbmRleCA9IDApID0+IHtcbiAgICAgIGNvbnN0IGxjSHRtbCA9IGh0bWwudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChsY0h0bWwuaW5kZXhPZignW2lmICcsIHN0YXJ0SW5kZXgpICE9PSAtMSAmJiBpc0NvbmRpdGlvbmFsQ29tbWVudChsY0h0bWwsIHN0YXJ0SW5kZXgpKSB7XG4gICAgICAgIGNvbnN0IGVuZElmSW5kZXggPSBsY0h0bWwuaW5kZXhPZignW2VuZGlmXScsIHN0YXJ0SW5kZXgpO1xuICAgICAgICByZXR1cm4gbGNIdG1sLmluZGV4T2YoJz4nLCBlbmRJZkluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc0JvZ3VzKSB7XG4gICAgICAgICAgY29uc3QgZW5kSW5kZXggPSBsY0h0bWwuaW5kZXhPZignPicsIHN0YXJ0SW5kZXgpO1xuICAgICAgICAgIHJldHVybiBlbmRJbmRleCAhPT0gLTEgPyBlbmRJbmRleCA6IGxjSHRtbC5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZW5kQ29tbWVudFJlZ2V4cCA9IC8tLSE/Pi9nO1xuICAgICAgICAgIGVuZENvbW1lbnRSZWdleHAubGFzdEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICAgICAgICBjb25zdCBtYXRjaCA9IGVuZENvbW1lbnRSZWdleHAuZXhlYyhodG1sKTtcbiAgICAgICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxjSHRtbC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRNYXRjaGluZ0VuZFRhZ0luZGV4ID0gKHNjaGVtYSwgaHRtbCwgc3RhcnRJbmRleCkgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRUYWdSZWdFeHAgPSAvPChbIT9cXC9dKT8oW0EtWmEtejAtOVxcLV86Ll0rKS9nO1xuICAgICAgY29uc3QgZW5kVGFnUmVnRXhwID0gLyg/Olxccyg/OlteJ1wiPl0rKD86XCJbXlwiXSpcInwnW14nXSonKSkqW15cIic+XSooPzpcIlteXCI+XSp8J1teJz5dKik/fFxccyp8XFwvKT4vZztcbiAgICAgIGNvbnN0IHZvaWRFbGVtZW50cyA9IHNjaGVtYS5nZXRWb2lkRWxlbWVudHMoKTtcbiAgICAgIGxldCBjb3VudCA9IDEsIGluZGV4ID0gc3RhcnRJbmRleDtcbiAgICAgIHdoaWxlIChjb3VudCAhPT0gMCkge1xuICAgICAgICBzdGFydFRhZ1JlZ0V4cC5sYXN0SW5kZXggPSBpbmRleDtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICBjb25zdCBzdGFydE1hdGNoID0gc3RhcnRUYWdSZWdFeHAuZXhlYyhodG1sKTtcbiAgICAgICAgICBpZiAoc3RhcnRNYXRjaCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRNYXRjaFsxXSA9PT0gJyEnKSB7XG4gICAgICAgICAgICBpZiAoc3RhcnRzV2l0aChzdGFydE1hdGNoWzJdLCAnLS0nKSkge1xuICAgICAgICAgICAgICBpbmRleCA9IGZpbmRDb21tZW50RW5kSW5kZXgoaHRtbCwgZmFsc2UsIHN0YXJ0TWF0Y2guaW5kZXggKyAnIS0tJy5sZW5ndGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaW5kZXggPSBmaW5kQ29tbWVudEVuZEluZGV4KGh0bWwsIHRydWUsIHN0YXJ0TWF0Y2guaW5kZXggKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbmRUYWdSZWdFeHAubGFzdEluZGV4ID0gc3RhcnRUYWdSZWdFeHAubGFzdEluZGV4O1xuICAgICAgICAgICAgY29uc3QgZW5kTWF0Y2ggPSBlbmRUYWdSZWdFeHAuZXhlYyhodG1sKTtcbiAgICAgICAgICAgIGlmIChpc051bGwoZW5kTWF0Y2gpIHx8IGVuZE1hdGNoLmluZGV4ICE9PSBzdGFydFRhZ1JlZ0V4cC5sYXN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhcnRNYXRjaFsxXSA9PT0gJy8nKSB7XG4gICAgICAgICAgICAgIGNvdW50IC09IDE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFoYXMkMih2b2lkRWxlbWVudHMsIHN0YXJ0TWF0Y2hbMl0pKSB7XG4gICAgICAgICAgICAgIGNvdW50ICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbmRleCA9IHN0YXJ0VGFnUmVnRXhwLmxhc3RJbmRleCArIGVuZE1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH07XG4gICAgY29uc3QgdHJpbUh0bWwkMSA9ICh0ZW1wQXR0cnMsIGh0bWwpID0+IHtcbiAgICAgIGNvbnN0IHRyaW1Db250ZW50UmVnRXhwID0gbmV3IFJlZ0V4cChbJ1xcXFxzPygnICsgdGVtcEF0dHJzLmpvaW4oJ3wnKSArICcpPVwiW15cIl0rXCInXS5qb2luKCd8JyksICdnaScpO1xuICAgICAgcmV0dXJuIGh0bWwucmVwbGFjZSh0cmltQ29udGVudFJlZ0V4cCwgJycpO1xuICAgIH07XG4gICAgY29uc3QgdHJpbUludGVybmFsID0gKHNlcmlhbGl6ZXIsIGh0bWwpID0+IHtcbiAgICAgIGNvbnN0IGJvZ3VzQWxsUmVnRXhwID0gLzwoXFx3KykgW14+XSpkYXRhLW1jZS1ib2d1cz1cImFsbFwiW14+XSo+L2c7XG4gICAgICBjb25zdCBzY2hlbWEgPSBzZXJpYWxpemVyLnNjaGVtYTtcbiAgICAgIGxldCBjb250ZW50ID0gdHJpbUh0bWwkMShzZXJpYWxpemVyLmdldFRlbXBBdHRycygpLCBodG1sKTtcbiAgICAgIGNvbnN0IHZvaWRFbGVtZW50cyA9IHNjaGVtYS5nZXRWb2lkRWxlbWVudHMoKTtcbiAgICAgIGxldCBtYXRjaGVzO1xuICAgICAgd2hpbGUgKG1hdGNoZXMgPSBib2d1c0FsbFJlZ0V4cC5leGVjKGNvbnRlbnQpKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gYm9ndXNBbGxSZWdFeHAubGFzdEluZGV4O1xuICAgICAgICBjb25zdCBtYXRjaExlbmd0aCA9IG1hdGNoZXNbMF0ubGVuZ3RoO1xuICAgICAgICBsZXQgZW5kVGFnSW5kZXg7XG4gICAgICAgIGlmICh2b2lkRWxlbWVudHNbbWF0Y2hlc1sxXV0pIHtcbiAgICAgICAgICBlbmRUYWdJbmRleCA9IGluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVuZFRhZ0luZGV4ID0gZmluZE1hdGNoaW5nRW5kVGFnSW5kZXgoc2NoZW1hLCBjb250ZW50LCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKDAsIGluZGV4IC0gbWF0Y2hMZW5ndGgpICsgY29udGVudC5zdWJzdHJpbmcoZW5kVGFnSW5kZXgpO1xuICAgICAgICBib2d1c0FsbFJlZ0V4cC5sYXN0SW5kZXggPSBpbmRleCAtIG1hdGNoTGVuZ3RoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRyaW0kMShjb250ZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IHRyaW1FeHRlcm5hbCA9IHRyaW1JbnRlcm5hbDtcblxuICAgIGNvbnN0IGNsZWFudXBCb2d1c0VsZW1lbnRzID0gcGFyZW50ID0+IHtcbiAgICAgIGNvbnN0IGJvZ3VzRWxlbWVudHMgPSBkZXNjZW5kYW50cyhwYXJlbnQsICdbZGF0YS1tY2UtYm9ndXNdJyk7XG4gICAgICBlYWNoJGUoYm9ndXNFbGVtZW50cywgZWxlbSA9PiB7XG4gICAgICAgIGNvbnN0IGJvZ3VzVmFsdWUgPSBnZXQkOShlbGVtLCAnZGF0YS1tY2UtYm9ndXMnKTtcbiAgICAgICAgaWYgKGJvZ3VzVmFsdWUgPT09ICdhbGwnKSB7XG4gICAgICAgICAgcmVtb3ZlJDUoZWxlbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNCciQ1KGVsZW0pKSB7XG4gICAgICAgICAgYmVmb3JlJDMoZWxlbSwgU3VnYXJFbGVtZW50LmZyb21UZXh0KHplcm9XaWR0aCkpO1xuICAgICAgICAgIHJlbW92ZSQ1KGVsZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVud3JhcChlbGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBjbGVhbnVwSW5wdXROYW1lcyA9IHBhcmVudCA9PiB7XG4gICAgICBjb25zdCBpbnB1dHMgPSBkZXNjZW5kYW50cyhwYXJlbnQsICdpbnB1dCcpO1xuICAgICAgZWFjaCRlKGlucHV0cywgaW5wdXQgPT4ge1xuICAgICAgICByZW1vdmUkYShpbnB1dCwgJ25hbWUnKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCB0cmltRW1wdHlDb250ZW50cyA9IChlZGl0b3IsIGh0bWwpID0+IHtcbiAgICAgIGNvbnN0IGJsb2NrTmFtZSA9IGdldEZvcmNlZFJvb3RCbG9jayhlZGl0b3IpO1xuICAgICAgY29uc3QgZW1wdHlSZWdFeHAgPSBuZXcgUmVnRXhwKGBeKDwkeyBibG9ja05hbWUgfVtePl0qPigmbmJzcDt8JiMxNjA7fFxcXFxzfFxcdTAwYTB8PGJyIFxcXFwvPnwpPFxcXFwvJHsgYmxvY2tOYW1lIH0+W1xcclxcbl0qfDxiciBcXFxcLz5bXFxyXFxuXSopJGApO1xuICAgICAgcmV0dXJuIGh0bWwucmVwbGFjZShlbXB0eVJlZ0V4cCwgJycpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0UGxhaW5UZXh0Q29udGVudCA9IChlZGl0b3IsIGJvZHkpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IGVkaXRvci5nZXREb2MoKTtcbiAgICAgIGNvbnN0IGRvcyA9IGdldFJvb3ROb2RlKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpKTtcbiAgICAgIGNvbnN0IG9mZnNjcmVlbkRpdiA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdkaXYnLCBkb2MpO1xuICAgICAgc2V0JDMob2Zmc2NyZWVuRGl2LCAnZGF0YS1tY2UtYm9ndXMnLCAnYWxsJyk7XG4gICAgICBzZXRBbGwob2Zmc2NyZWVuRGl2LCB7XG4gICAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgICBsZWZ0OiAnLTk5OTk5OTlweCcsXG4gICAgICAgIHRvcDogJzAnXG4gICAgICB9KTtcbiAgICAgIHNldCQxKG9mZnNjcmVlbkRpdiwgYm9keS5pbm5lckhUTUwpO1xuICAgICAgY2xlYW51cEJvZ3VzRWxlbWVudHMob2Zmc2NyZWVuRGl2KTtcbiAgICAgIGNsZWFudXBJbnB1dE5hbWVzKG9mZnNjcmVlbkRpdik7XG4gICAgICBjb25zdCByb290ID0gZ2V0Q29udGVudENvbnRhaW5lcihkb3MpO1xuICAgICAgYXBwZW5kJDEocm9vdCwgb2Zmc2NyZWVuRGl2KTtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB0cmltJDEob2Zmc2NyZWVuRGl2LmRvbS5pbm5lclRleHQpO1xuICAgICAgcmVtb3ZlJDUob2Zmc2NyZWVuRGl2KTtcbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH07XG4gICAgY29uc3QgZ2V0Q29udGVudEZyb21Cb2R5ID0gKGVkaXRvciwgYXJncywgYm9keSkgPT4ge1xuICAgICAgbGV0IGNvbnRlbnQ7XG4gICAgICBpZiAoYXJncy5mb3JtYXQgPT09ICdyYXcnKSB7XG4gICAgICAgIGNvbnRlbnQgPSBUb29scy50cmltKHRyaW1FeHRlcm5hbChlZGl0b3Iuc2VyaWFsaXplciwgYm9keS5pbm5lckhUTUwpKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJncy5mb3JtYXQgPT09ICd0ZXh0Jykge1xuICAgICAgICBjb250ZW50ID0gZ2V0UGxhaW5UZXh0Q29udGVudChlZGl0b3IsIGJvZHkpO1xuICAgICAgfSBlbHNlIGlmIChhcmdzLmZvcm1hdCA9PT0gJ3RyZWUnKSB7XG4gICAgICAgIGNvbnRlbnQgPSBlZGl0b3Iuc2VyaWFsaXplci5zZXJpYWxpemUoYm9keSwgYXJncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZW50ID0gdHJpbUVtcHR5Q29udGVudHMoZWRpdG9yLCBlZGl0b3Iuc2VyaWFsaXplci5zZXJpYWxpemUoYm9keSwgYXJncykpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2hvdWxkVHJpbSA9IGFyZ3MuZm9ybWF0ICE9PSAndGV4dCcgJiYgIWlzV3NQcmVzZXJ2ZUVsZW1lbnQoU3VnYXJFbGVtZW50LmZyb21Eb20oYm9keSkpO1xuICAgICAgcmV0dXJuIHNob3VsZFRyaW0gJiYgaXNTdHJpbmcoY29udGVudCkgPyBUb29scy50cmltKGNvbnRlbnQpIDogY29udGVudDtcbiAgICB9O1xuICAgIGNvbnN0IGdldENvbnRlbnRJbnRlcm5hbCA9IChlZGl0b3IsIGFyZ3MpID0+IE9wdGlvbmFsLmZyb20oZWRpdG9yLmdldEJvZHkoKSkuZm9sZChjb25zdGFudChhcmdzLmZvcm1hdCA9PT0gJ3RyZWUnID8gbmV3IEFzdE5vZGUoJ2JvZHknLCAxMSkgOiAnJyksIGJvZHkgPT4gZ2V0Q29udGVudEZyb21Cb2R5KGVkaXRvciwgYXJncywgYm9keSkpO1xuXG4gICAgY29uc3QgbWFrZU1hcCQxID0gVG9vbHMubWFrZU1hcDtcbiAgICBjb25zdCBXcml0ZXIgPSBzZXR0aW5ncyA9PiB7XG4gICAgICBjb25zdCBodG1sID0gW107XG4gICAgICBzZXR0aW5ncyA9IHNldHRpbmdzIHx8IHt9O1xuICAgICAgY29uc3QgaW5kZW50ID0gc2V0dGluZ3MuaW5kZW50O1xuICAgICAgY29uc3QgaW5kZW50QmVmb3JlID0gbWFrZU1hcCQxKHNldHRpbmdzLmluZGVudF9iZWZvcmUgfHwgJycpO1xuICAgICAgY29uc3QgaW5kZW50QWZ0ZXIgPSBtYWtlTWFwJDEoc2V0dGluZ3MuaW5kZW50X2FmdGVyIHx8ICcnKTtcbiAgICAgIGNvbnN0IGVuY29kZSA9IEVudGl0aWVzLmdldEVuY29kZUZ1bmMoc2V0dGluZ3MuZW50aXR5X2VuY29kaW5nIHx8ICdyYXcnLCBzZXR0aW5ncy5lbnRpdGllcyk7XG4gICAgICBjb25zdCBodG1sT3V0cHV0ID0gc2V0dGluZ3MuZWxlbWVudF9mb3JtYXQgIT09ICd4aHRtbCc7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGFydDogKG5hbWUsIGF0dHJzLCBlbXB0eSkgPT4ge1xuICAgICAgICAgIGlmIChpbmRlbnQgJiYgaW5kZW50QmVmb3JlW25hbWVdICYmIGh0bWwubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBodG1sW2h0bWwubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCAmJiB2YWx1ZSAhPT0gJ1xcbicpIHtcbiAgICAgICAgICAgICAgaHRtbC5wdXNoKCdcXG4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaHRtbC5wdXNoKCc8JywgbmFtZSk7XG4gICAgICAgICAgaWYgKGF0dHJzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGF0dHJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICBjb25zdCBhdHRyID0gYXR0cnNbaV07XG4gICAgICAgICAgICAgIGh0bWwucHVzaCgnICcsIGF0dHIubmFtZSwgJz1cIicsIGVuY29kZShhdHRyLnZhbHVlLCB0cnVlKSwgJ1wiJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZW1wdHkgfHwgaHRtbE91dHB1dCkge1xuICAgICAgICAgICAgaHRtbFtodG1sLmxlbmd0aF0gPSAnPic7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGh0bWxbaHRtbC5sZW5ndGhdID0gJyAvPic7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbXB0eSAmJiBpbmRlbnQgJiYgaW5kZW50QWZ0ZXJbbmFtZV0gJiYgaHRtbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGh0bWxbaHRtbC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAwICYmIHZhbHVlICE9PSAnXFxuJykge1xuICAgICAgICAgICAgICBodG1sLnB1c2goJ1xcbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW5kOiBuYW1lID0+IHtcbiAgICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgICAgaHRtbC5wdXNoKCc8LycsIG5hbWUsICc+Jyk7XG4gICAgICAgICAgaWYgKGluZGVudCAmJiBpbmRlbnRBZnRlcltuYW1lXSAmJiBodG1sLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHZhbHVlID0gaHRtbFtodG1sLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDAgJiYgdmFsdWUgIT09ICdcXG4nKSB7XG4gICAgICAgICAgICAgIGh0bWwucHVzaCgnXFxuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB0ZXh0OiAodGV4dCwgcmF3KSA9PiB7XG4gICAgICAgICAgaWYgKHRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaHRtbFtodG1sLmxlbmd0aF0gPSByYXcgPyB0ZXh0IDogZW5jb2RlKHRleHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2RhdGE6IHRleHQgPT4ge1xuICAgICAgICAgIGh0bWwucHVzaCgnPCFbQ0RBVEFbJywgdGV4dCwgJ11dPicpO1xuICAgICAgICB9LFxuICAgICAgICBjb21tZW50OiB0ZXh0ID0+IHtcbiAgICAgICAgICBodG1sLnB1c2goJzwhLS0nLCB0ZXh0LCAnLS0+Jyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBpOiAobmFtZSwgdGV4dCkgPT4ge1xuICAgICAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgICAgICBodG1sLnB1c2goJzw/JywgbmFtZSwgJyAnLCBlbmNvZGUodGV4dCksICc/PicpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBodG1sLnB1c2goJzw/JywgbmFtZSwgJz8+Jyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbmRlbnQpIHtcbiAgICAgICAgICAgIGh0bWwucHVzaCgnXFxuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkb2N0eXBlOiB0ZXh0ID0+IHtcbiAgICAgICAgICBodG1sLnB1c2goJzwhRE9DVFlQRScsIHRleHQsICc+JywgaW5kZW50ID8gJ1xcbicgOiAnJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlc2V0OiAoKSA9PiB7XG4gICAgICAgICAgaHRtbC5sZW5ndGggPSAwO1xuICAgICAgICB9LFxuICAgICAgICBnZXRDb250ZW50OiAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGh0bWwuam9pbignJykucmVwbGFjZSgvXFxuJC8sICcnKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgSHRtbFNlcmlhbGl6ZXIgPSAoc2V0dGluZ3MgPSB7fSwgc2NoZW1hID0gU2NoZW1hKCkpID0+IHtcbiAgICAgIGNvbnN0IHdyaXRlciA9IFdyaXRlcihzZXR0aW5ncyk7XG4gICAgICBzZXR0aW5ncy52YWxpZGF0ZSA9ICd2YWxpZGF0ZScgaW4gc2V0dGluZ3MgPyBzZXR0aW5ncy52YWxpZGF0ZSA6IHRydWU7XG4gICAgICBjb25zdCBzZXJpYWxpemUgPSBub2RlID0+IHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGUgPSBzZXR0aW5ncy52YWxpZGF0ZTtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSB7XG4gICAgICAgICAgMzogbm9kZSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB3cml0ZXIudGV4dCgoX2EgPSBub2RlLnZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJywgbm9kZS5yYXcpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgODogbm9kZSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB3cml0ZXIuY29tbWVudCgoX2EgPSBub2RlLnZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICA3OiBub2RlID0+IHtcbiAgICAgICAgICAgIHdyaXRlci5waShub2RlLm5hbWUsIG5vZGUudmFsdWUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgMTA6IG5vZGUgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgd3JpdGVyLmRvY3R5cGUoKF9hID0gbm9kZS52YWx1ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJycpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgNDogbm9kZSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB3cml0ZXIuY2RhdGEoKF9hID0gbm9kZS52YWx1ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJycpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgMTE6IG5vZGUgPT4ge1xuICAgICAgICAgICAgbGV0IHRlbXBOb2RlID0gbm9kZTtcbiAgICAgICAgICAgIGlmICh0ZW1wTm9kZSA9IHRlbXBOb2RlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIHdhbGsodGVtcE5vZGUpO1xuICAgICAgICAgICAgICB9IHdoaWxlICh0ZW1wTm9kZSA9IHRlbXBOb2RlLm5leHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgd3JpdGVyLnJlc2V0KCk7XG4gICAgICAgIGNvbnN0IHdhbGsgPSBub2RlID0+IHtcbiAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgY29uc3QgaGFuZGxlciA9IGhhbmRsZXJzW25vZGUudHlwZV07XG4gICAgICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gbm9kZS5uYW1lO1xuICAgICAgICAgICAgY29uc3QgaXNFbXB0eSA9IG5hbWUgaW4gc2NoZW1hLmdldFZvaWRFbGVtZW50cygpO1xuICAgICAgICAgICAgbGV0IGF0dHJzID0gbm9kZS5hdHRyaWJ1dGVzO1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRlICYmIGF0dHJzICYmIGF0dHJzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc29ydGVkQXR0cnMgPSBbXTtcbiAgICAgICAgICAgICAgc29ydGVkQXR0cnMubWFwID0ge307XG4gICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRSdWxlID0gc2NoZW1hLmdldEVsZW1lbnRSdWxlKG5vZGUubmFtZSk7XG4gICAgICAgICAgICAgIGlmIChlbGVtZW50UnVsZSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gZWxlbWVudFJ1bGUuYXR0cmlidXRlc09yZGVyLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgYXR0ck5hbWUgPSBlbGVtZW50UnVsZS5hdHRyaWJ1dGVzT3JkZXJbaV07XG4gICAgICAgICAgICAgICAgICBpZiAoYXR0ck5hbWUgaW4gYXR0cnMubWFwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJWYWx1ZSA9IGF0dHJzLm1hcFthdHRyTmFtZV07XG4gICAgICAgICAgICAgICAgICAgIHNvcnRlZEF0dHJzLm1hcFthdHRyTmFtZV0gPSBhdHRyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHNvcnRlZEF0dHJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGF0dHJOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhdHRyVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gYXR0cnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBhdHRyTmFtZSA9IGF0dHJzW2ldLm5hbWU7XG4gICAgICAgICAgICAgICAgICBpZiAoIShhdHRyTmFtZSBpbiBzb3J0ZWRBdHRycy5tYXApKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJWYWx1ZSA9IGF0dHJzLm1hcFthdHRyTmFtZV07XG4gICAgICAgICAgICAgICAgICAgIHNvcnRlZEF0dHJzLm1hcFthdHRyTmFtZV0gPSBhdHRyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHNvcnRlZEF0dHJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGF0dHJOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhdHRyVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF0dHJzID0gc29ydGVkQXR0cnM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdyaXRlci5zdGFydChuYW1lLCBhdHRycywgaXNFbXB0eSk7XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkpIHtcbiAgICAgICAgICAgICAgbGV0IGNoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuICAgICAgICAgICAgICBpZiAoY2hpbGQpIHtcbiAgICAgICAgICAgICAgICBpZiAoKG5hbWUgPT09ICdwcmUnIHx8IG5hbWUgPT09ICd0ZXh0YXJlYScpICYmIGNoaWxkLnR5cGUgPT09IDMgJiYgKChfYSA9IGNoaWxkLnZhbHVlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbMF0pID09PSAnXFxuJykge1xuICAgICAgICAgICAgICAgICAgd3JpdGVyLnRleHQoJ1xcbicsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICB3YWxrKGNoaWxkKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChjaGlsZCA9IGNoaWxkLm5leHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHdyaXRlci5lbmQobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZXIobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAobm9kZS50eXBlID09PSAxICYmICFzZXR0aW5ncy5pbm5lcikge1xuICAgICAgICAgIHdhbGsobm9kZSk7XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSAzKSB7XG4gICAgICAgICAgaGFuZGxlcnNbM10obm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGFuZGxlcnNbMTFdKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3cml0ZXIuZ2V0Q29udGVudCgpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7IHNlcmlhbGl6ZSB9O1xuICAgIH07XG5cbiAgICBjb25zdCBub25Jbmhlcml0YWJsZVN0eWxlcyA9IG5ldyBTZXQoKTtcbiAgICAoKCkgPT4ge1xuICAgICAgY29uc3Qgbm9uSW5oZXJpdGFibGVTdHlsZXNBcnIgPSBbXG4gICAgICAgICdtYXJnaW4nLFxuICAgICAgICAnbWFyZ2luLWxlZnQnLFxuICAgICAgICAnbWFyZ2luLXJpZ2h0JyxcbiAgICAgICAgJ21hcmdpbi10b3AnLFxuICAgICAgICAnbWFyZ2luLWJvdHRvbScsXG4gICAgICAgICdwYWRkaW5nJyxcbiAgICAgICAgJ3BhZGRpbmctbGVmdCcsXG4gICAgICAgICdwYWRkaW5nLXJpZ2h0JyxcbiAgICAgICAgJ3BhZGRpbmctdG9wJyxcbiAgICAgICAgJ3BhZGRpbmctYm90dG9tJyxcbiAgICAgICAgJ2JvcmRlcicsXG4gICAgICAgICdib3JkZXItd2lkdGgnLFxuICAgICAgICAnYm9yZGVyLXN0eWxlJyxcbiAgICAgICAgJ2JvcmRlci1jb2xvcicsXG4gICAgICAgICdiYWNrZ3JvdW5kJyxcbiAgICAgICAgJ2JhY2tncm91bmQtYXR0YWNobWVudCcsXG4gICAgICAgICdiYWNrZ3JvdW5kLWNsaXAnLFxuICAgICAgICAnYmFja2dyb3VuZC1jb2xvcicsXG4gICAgICAgICdiYWNrZ3JvdW5kLWltYWdlJyxcbiAgICAgICAgJ2JhY2tncm91bmQtb3JpZ2luJyxcbiAgICAgICAgJ2JhY2tncm91bmQtcG9zaXRpb24nLFxuICAgICAgICAnYmFja2dyb3VuZC1yZXBlYXQnLFxuICAgICAgICAnYmFja2dyb3VuZC1zaXplJyxcbiAgICAgICAgJ2Zsb2F0JyxcbiAgICAgICAgJ3Bvc2l0aW9uJyxcbiAgICAgICAgJ2xlZnQnLFxuICAgICAgICAncmlnaHQnLFxuICAgICAgICAndG9wJyxcbiAgICAgICAgJ2JvdHRvbScsXG4gICAgICAgICd6LWluZGV4JyxcbiAgICAgICAgJ2Rpc3BsYXknLFxuICAgICAgICAndHJhbnNmb3JtJyxcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgJ21heC13aWR0aCcsXG4gICAgICAgICdtaW4td2lkdGgnLFxuICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgJ21heC1oZWlnaHQnLFxuICAgICAgICAnbWluLWhlaWdodCcsXG4gICAgICAgICdvdmVyZmxvdycsXG4gICAgICAgICdvdmVyZmxvdy14JyxcbiAgICAgICAgJ292ZXJmbG93LXknLFxuICAgICAgICAndGV4dC1vdmVyZmxvdycsXG4gICAgICAgICd2ZXJ0aWNhbC1hbGlnbicsXG4gICAgICAgICd0cmFuc2l0aW9uJyxcbiAgICAgICAgJ3RyYW5zaXRpb24tZGVsYXknLFxuICAgICAgICAndHJhbnNpdGlvbi1kdXJhdGlvbicsXG4gICAgICAgICd0cmFuc2l0aW9uLXByb3BlcnR5JyxcbiAgICAgICAgJ3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uJ1xuICAgICAgXTtcbiAgICAgIGVhY2gkZShub25Jbmhlcml0YWJsZVN0eWxlc0Fyciwgc3R5bGUgPT4ge1xuICAgICAgICBub25Jbmhlcml0YWJsZVN0eWxlcy5hZGQoc3R5bGUpO1xuICAgICAgfSk7XG4gICAgfSkoKTtcbiAgICBjb25zdCBzaG9ydGhhbmRTdHlsZVByb3BzID0gW1xuICAgICAgJ2ZvbnQnLFxuICAgICAgJ3RleHQtZGVjb3JhdGlvbicsXG4gICAgICAndGV4dC1lbXBoYXNpcydcbiAgICBdO1xuICAgIGNvbnN0IGdldFN0eWxlUHJvcHMgPSAoZG9tLCBub2RlKSA9PiBrZXlzKGRvbS5wYXJzZVN0eWxlKGRvbS5nZXRBdHRyaWIobm9kZSwgJ3N0eWxlJykpKTtcbiAgICBjb25zdCBpc05vbkluaGVyaXRhYmxlU3R5bGUgPSBzdHlsZSA9PiBub25Jbmhlcml0YWJsZVN0eWxlcy5oYXMoc3R5bGUpO1xuICAgIGNvbnN0IGhhc0luaGVyaXRhYmxlU3R5bGVzID0gKGRvbSwgbm9kZSkgPT4gZm9yYWxsKGdldFN0eWxlUHJvcHMoZG9tLCBub2RlKSwgc3R5bGUgPT4gIWlzTm9uSW5oZXJpdGFibGVTdHlsZShzdHlsZSkpO1xuICAgIGNvbnN0IGdldExvbmdoYW5kU3R5bGVQcm9wcyA9IHN0eWxlcyA9PiBmaWx0ZXIkNShzdHlsZXMsIHN0eWxlID0+IGV4aXN0cyhzaG9ydGhhbmRTdHlsZVByb3BzLCBwcm9wID0+IHN0YXJ0c1dpdGgoc3R5bGUsIHByb3ApKSk7XG4gICAgY29uc3QgaGFzU3R5bGVDb25mbGljdCA9IChkb20sIG5vZGUsIHBhcmVudE5vZGUpID0+IHtcbiAgICAgIGNvbnN0IG5vZGVTdHlsZVByb3BzID0gZ2V0U3R5bGVQcm9wcyhkb20sIG5vZGUpO1xuICAgICAgY29uc3QgcGFyZW50Tm9kZVN0eWxlUHJvcHMgPSBnZXRTdHlsZVByb3BzKGRvbSwgcGFyZW50Tm9kZSk7XG4gICAgICBjb25zdCB2YWx1ZU1pc21hdGNoID0gcHJvcCA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGNvbnN0IG5vZGVWYWx1ZSA9IChfYSA9IGRvbS5nZXRTdHlsZShub2RlLCBwcm9wKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgICAgIGNvbnN0IHBhcmVudFZhbHVlID0gKF9iID0gZG9tLmdldFN0eWxlKHBhcmVudE5vZGUsIHByb3ApKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcbiAgICAgICAgcmV0dXJuIGlzTm90RW1wdHkobm9kZVZhbHVlKSAmJiBpc05vdEVtcHR5KHBhcmVudFZhbHVlKSAmJiBub2RlVmFsdWUgIT09IHBhcmVudFZhbHVlO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBleGlzdHMobm9kZVN0eWxlUHJvcHMsIG5vZGVTdHlsZVByb3AgPT4ge1xuICAgICAgICBjb25zdCBwcm9wRXhpc3RzID0gcHJvcHMgPT4gZXhpc3RzKHByb3BzLCBwcm9wID0+IHByb3AgPT09IG5vZGVTdHlsZVByb3ApO1xuICAgICAgICBpZiAoIXByb3BFeGlzdHMocGFyZW50Tm9kZVN0eWxlUHJvcHMpICYmIHByb3BFeGlzdHMoc2hvcnRoYW5kU3R5bGVQcm9wcykpIHtcbiAgICAgICAgICBjb25zdCBsb25naGFuZFByb3BzID0gZ2V0TG9uZ2hhbmRTdHlsZVByb3BzKHBhcmVudE5vZGVTdHlsZVByb3BzKTtcbiAgICAgICAgICByZXR1cm4gZXhpc3RzKGxvbmdoYW5kUHJvcHMsIHZhbHVlTWlzbWF0Y2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB2YWx1ZU1pc21hdGNoKG5vZGVTdHlsZVByb3ApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNDaGFyID0gKGZvcndhcmQsIHByZWRpY2F0ZSwgcG9zKSA9PiBPcHRpb25hbC5mcm9tKHBvcy5jb250YWluZXIoKSkuZmlsdGVyKGlzVGV4dCRhKS5leGlzdHModGV4dCA9PiB7XG4gICAgICBjb25zdCBkZWx0YSA9IGZvcndhcmQgPyAwIDogLTE7XG4gICAgICByZXR1cm4gcHJlZGljYXRlKHRleHQuZGF0YS5jaGFyQXQocG9zLm9mZnNldCgpICsgZGVsdGEpKTtcbiAgICB9KTtcbiAgICBjb25zdCBpc0JlZm9yZVNwYWNlID0gY3VycnkoaXNDaGFyLCB0cnVlLCBpc1doaXRlU3BhY2UpO1xuICAgIGNvbnN0IGlzQWZ0ZXJTcGFjZSA9IGN1cnJ5KGlzQ2hhciwgZmFsc2UsIGlzV2hpdGVTcGFjZSk7XG4gICAgY29uc3QgaXNFbXB0eVRleHQgPSBwb3MgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gcG9zLmNvbnRhaW5lcigpO1xuICAgICAgcmV0dXJuIGlzVGV4dCRhKGNvbnRhaW5lcikgJiYgKGNvbnRhaW5lci5kYXRhLmxlbmd0aCA9PT0gMCB8fCBpc1p3c3AkMShjb250YWluZXIuZGF0YSkgJiYgQm9va21hcmtNYW5hZ2VyLmlzQm9va21hcmtOb2RlKGNvbnRhaW5lci5wYXJlbnROb2RlKSk7XG4gICAgfTtcbiAgICBjb25zdCBtYXRjaGVzRWxlbWVudFBvc2l0aW9uID0gKGJlZm9yZSwgcHJlZGljYXRlKSA9PiBwb3MgPT4gZ2V0Q2hpbGROb2RlQXRSZWxhdGl2ZU9mZnNldChiZWZvcmUgPyAwIDogLTEsIHBvcykuZmlsdGVyKHByZWRpY2F0ZSkuaXNTb21lKCk7XG4gICAgY29uc3QgaXNJbWFnZUJsb2NrID0gbm9kZSA9PiBpc0ltZyhub2RlKSAmJiBnZXQkNyhTdWdhckVsZW1lbnQuZnJvbURvbShub2RlKSwgJ2Rpc3BsYXknKSA9PT0gJ2Jsb2NrJztcbiAgICBjb25zdCBpc0NlZk5vZGUgPSBub2RlID0+IGlzQ29udGVudEVkaXRhYmxlRmFsc2UkYihub2RlKSAmJiAhaXNCb2d1c0FsbCQxKG5vZGUpO1xuICAgIGNvbnN0IGlzQmVmb3JlSW1hZ2VCbG9jayA9IG1hdGNoZXNFbGVtZW50UG9zaXRpb24odHJ1ZSwgaXNJbWFnZUJsb2NrKTtcbiAgICBjb25zdCBpc0FmdGVySW1hZ2VCbG9jayA9IG1hdGNoZXNFbGVtZW50UG9zaXRpb24oZmFsc2UsIGlzSW1hZ2VCbG9jayk7XG4gICAgY29uc3QgaXNCZWZvcmVNZWRpYSA9IG1hdGNoZXNFbGVtZW50UG9zaXRpb24odHJ1ZSwgaXNNZWRpYSQyKTtcbiAgICBjb25zdCBpc0FmdGVyTWVkaWEgPSBtYXRjaGVzRWxlbWVudFBvc2l0aW9uKGZhbHNlLCBpc01lZGlhJDIpO1xuICAgIGNvbnN0IGlzQmVmb3JlVGFibGUgPSBtYXRjaGVzRWxlbWVudFBvc2l0aW9uKHRydWUsIGlzVGFibGUkMik7XG4gICAgY29uc3QgaXNBZnRlclRhYmxlID0gbWF0Y2hlc0VsZW1lbnRQb3NpdGlvbihmYWxzZSwgaXNUYWJsZSQyKTtcbiAgICBjb25zdCBpc0JlZm9yZUNvbnRlbnRFZGl0YWJsZUZhbHNlID0gbWF0Y2hlc0VsZW1lbnRQb3NpdGlvbih0cnVlLCBpc0NlZk5vZGUpO1xuICAgIGNvbnN0IGlzQWZ0ZXJDb250ZW50RWRpdGFibGVGYWxzZSA9IG1hdGNoZXNFbGVtZW50UG9zaXRpb24oZmFsc2UsIGlzQ2VmTm9kZSk7XG5cbiAgICBjb25zdCBkcm9wTGFzdCA9IHhzID0+IHhzLnNsaWNlKDAsIC0xKTtcbiAgICBjb25zdCBwYXJlbnRzVW50aWwgPSAoc3RhcnQsIHJvb3QsIHByZWRpY2F0ZSkgPT4ge1xuICAgICAgaWYgKGNvbnRhaW5zKHJvb3QsIHN0YXJ0KSkge1xuICAgICAgICByZXR1cm4gZHJvcExhc3QocGFyZW50cyQxKHN0YXJ0LCBlbG0gPT4ge1xuICAgICAgICAgIHJldHVybiBwcmVkaWNhdGUoZWxtKSB8fCBlcShlbG0sIHJvb3QpO1xuICAgICAgICB9KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBwYXJlbnRzID0gKHN0YXJ0LCByb290KSA9PiBwYXJlbnRzVW50aWwoc3RhcnQsIHJvb3QsIG5ldmVyKTtcbiAgICBjb25zdCBwYXJlbnRzQW5kU2VsZiA9IChzdGFydCwgcm9vdCkgPT4gW3N0YXJ0XS5jb25jYXQocGFyZW50cyhzdGFydCwgcm9vdCkpO1xuXG4gICAgY29uc3QgbmF2aWdhdGVJZ25vcmVFbXB0eVRleHROb2RlcyA9IChmb3J3YXJkLCByb290LCBmcm9tKSA9PiBuYXZpZ2F0ZUlnbm9yZShmb3J3YXJkLCByb290LCBmcm9tLCBpc0VtcHR5VGV4dCk7XG4gICAgY29uc3QgZ2V0Q2xvc2VzdEJsb2NrJDEgPSAocm9vdCwgcG9zKSA9PiBmaW5kJDIocGFyZW50c0FuZFNlbGYoU3VnYXJFbGVtZW50LmZyb21Eb20ocG9zLmNvbnRhaW5lcigpKSwgcm9vdCksIGlzQmxvY2skMik7XG4gICAgY29uc3QgaXNBdEJlZm9yZUFmdGVyQmxvY2tCb3VuZGFyeSA9IChmb3J3YXJkLCByb290LCBwb3MpID0+IG5hdmlnYXRlSWdub3JlRW1wdHlUZXh0Tm9kZXMoZm9yd2FyZCwgcm9vdC5kb20sIHBvcykuZm9yYWxsKG5ld1BvcyA9PiBnZXRDbG9zZXN0QmxvY2skMShyb290LCBwb3MpLmZvbGQoKCkgPT4gIWlzSW5TYW1lQmxvY2sobmV3UG9zLCBwb3MsIHJvb3QuZG9tKSwgZnJvbUJsb2NrID0+ICFpc0luU2FtZUJsb2NrKG5ld1BvcywgcG9zLCByb290LmRvbSkgJiYgY29udGFpbnMoZnJvbUJsb2NrLCBTdWdhckVsZW1lbnQuZnJvbURvbShuZXdQb3MuY29udGFpbmVyKCkpKSkpO1xuICAgIGNvbnN0IGlzQXRCbG9ja0JvdW5kYXJ5ID0gKGZvcndhcmQsIHJvb3QsIHBvcykgPT4gZ2V0Q2xvc2VzdEJsb2NrJDEocm9vdCwgcG9zKS5mb2xkKCgpID0+IG5hdmlnYXRlSWdub3JlRW1wdHlUZXh0Tm9kZXMoZm9yd2FyZCwgcm9vdC5kb20sIHBvcykuZm9yYWxsKG5ld1BvcyA9PiAhaXNJblNhbWVCbG9jayhuZXdQb3MsIHBvcywgcm9vdC5kb20pKSwgcGFyZW50ID0+IG5hdmlnYXRlSWdub3JlRW1wdHlUZXh0Tm9kZXMoZm9yd2FyZCwgcGFyZW50LmRvbSwgcG9zKS5pc05vbmUoKSk7XG4gICAgY29uc3QgaXNBdFN0YXJ0T2ZCbG9jayA9IGN1cnJ5KGlzQXRCbG9ja0JvdW5kYXJ5LCBmYWxzZSk7XG4gICAgY29uc3QgaXNBdEVuZE9mQmxvY2sgPSBjdXJyeShpc0F0QmxvY2tCb3VuZGFyeSwgdHJ1ZSk7XG4gICAgY29uc3QgaXNCZWZvcmVCbG9jayA9IGN1cnJ5KGlzQXRCZWZvcmVBZnRlckJsb2NrQm91bmRhcnksIGZhbHNlKTtcbiAgICBjb25zdCBpc0FmdGVyQmxvY2sgPSBjdXJyeShpc0F0QmVmb3JlQWZ0ZXJCbG9ja0JvdW5kYXJ5LCB0cnVlKTtcblxuICAgIGNvbnN0IGlzQnIkMSA9IHBvcyA9PiBnZXRFbGVtZW50RnJvbVBvc2l0aW9uKHBvcykuZXhpc3RzKGlzQnIkNSk7XG4gICAgY29uc3QgZmluZEJyID0gKGZvcndhcmQsIHJvb3QsIHBvcykgPT4ge1xuICAgICAgY29uc3QgcGFyZW50QmxvY2tzID0gZmlsdGVyJDUocGFyZW50c0FuZFNlbGYoU3VnYXJFbGVtZW50LmZyb21Eb20ocG9zLmNvbnRhaW5lcigpKSwgcm9vdCksIGlzQmxvY2skMik7XG4gICAgICBjb25zdCBzY29wZSA9IGhlYWQocGFyZW50QmxvY2tzKS5nZXRPcihyb290KTtcbiAgICAgIHJldHVybiBmcm9tUG9zaXRpb24oZm9yd2FyZCwgc2NvcGUuZG9tLCBwb3MpLmZpbHRlcihpc0JyJDEpO1xuICAgIH07XG4gICAgY29uc3QgaXNCZWZvcmVCciQxID0gKHJvb3QsIHBvcykgPT4gZ2V0RWxlbWVudEZyb21Qb3NpdGlvbihwb3MpLmV4aXN0cyhpc0JyJDUpIHx8IGZpbmRCcih0cnVlLCByb290LCBwb3MpLmlzU29tZSgpO1xuICAgIGNvbnN0IGlzQWZ0ZXJCciA9IChyb290LCBwb3MpID0+IGdldEVsZW1lbnRGcm9tUHJldlBvc2l0aW9uKHBvcykuZXhpc3RzKGlzQnIkNSkgfHwgZmluZEJyKGZhbHNlLCByb290LCBwb3MpLmlzU29tZSgpO1xuICAgIGNvbnN0IGZpbmRQcmV2aW91c0JyID0gY3VycnkoZmluZEJyLCBmYWxzZSk7XG4gICAgY29uc3QgZmluZE5leHRCciA9IGN1cnJ5KGZpbmRCciwgdHJ1ZSk7XG5cbiAgICBjb25zdCBpc0luTWlkZGxlT2ZUZXh0ID0gcG9zID0+IENhcmV0UG9zaXRpb24uaXNUZXh0UG9zaXRpb24ocG9zKSAmJiAhcG9zLmlzQXRTdGFydCgpICYmICFwb3MuaXNBdEVuZCgpO1xuICAgIGNvbnN0IGdldENsb3Nlc3RCbG9jayA9IChyb290LCBwb3MpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudEJsb2NrcyA9IGZpbHRlciQ1KHBhcmVudHNBbmRTZWxmKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHBvcy5jb250YWluZXIoKSksIHJvb3QpLCBpc0Jsb2NrJDIpO1xuICAgICAgcmV0dXJuIGhlYWQocGFyZW50QmxvY2tzKS5nZXRPcihyb290KTtcbiAgICB9O1xuICAgIGNvbnN0IGhhc1NwYWNlQmVmb3JlID0gKHJvb3QsIHBvcykgPT4ge1xuICAgICAgaWYgKGlzSW5NaWRkbGVPZlRleHQocG9zKSkge1xuICAgICAgICByZXR1cm4gaXNBZnRlclNwYWNlKHBvcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaXNBZnRlclNwYWNlKHBvcykgfHwgcHJldlBvc2l0aW9uKGdldENsb3Nlc3RCbG9jayhyb290LCBwb3MpLmRvbSwgcG9zKS5leGlzdHMoaXNBZnRlclNwYWNlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGhhc1NwYWNlQWZ0ZXIgPSAocm9vdCwgcG9zKSA9PiB7XG4gICAgICBpZiAoaXNJbk1pZGRsZU9mVGV4dChwb3MpKSB7XG4gICAgICAgIHJldHVybiBpc0JlZm9yZVNwYWNlKHBvcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaXNCZWZvcmVTcGFjZShwb3MpIHx8IG5leHRQb3NpdGlvbihnZXRDbG9zZXN0QmxvY2socm9vdCwgcG9zKS5kb20sIHBvcykuZXhpc3RzKGlzQmVmb3JlU3BhY2UpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNQcmVWYWx1ZSA9IHZhbHVlID0+IGNvbnRhaW5zJDIoW1xuICAgICAgJ3ByZScsXG4gICAgICAncHJlLXdyYXAnXG4gICAgXSwgdmFsdWUpO1xuICAgIGNvbnN0IGlzSW5QcmUgPSBwb3MgPT4gZ2V0RWxlbWVudEZyb21Qb3NpdGlvbihwb3MpLmJpbmQoZWxtID0+IGNsb3Nlc3QkNChlbG0sIGlzRWxlbWVudCQ3KSkuZXhpc3RzKGVsbSA9PiBpc1ByZVZhbHVlKGdldCQ3KGVsbSwgJ3doaXRlLXNwYWNlJykpKTtcbiAgICBjb25zdCBpc0F0QmVnaW5uaW5nT2ZCb2R5ID0gKHJvb3QsIHBvcykgPT4gcHJldlBvc2l0aW9uKHJvb3QuZG9tLCBwb3MpLmlzTm9uZSgpO1xuICAgIGNvbnN0IGlzQXRFbmRPZkJvZHkgPSAocm9vdCwgcG9zKSA9PiBuZXh0UG9zaXRpb24ocm9vdC5kb20sIHBvcykuaXNOb25lKCk7XG4gICAgY29uc3QgaXNBdExpbmVCb3VuZGFyeSA9IChyb290LCBwb3MpID0+IGlzQXRCZWdpbm5pbmdPZkJvZHkocm9vdCwgcG9zKSB8fCBpc0F0RW5kT2ZCb2R5KHJvb3QsIHBvcykgfHwgaXNBdFN0YXJ0T2ZCbG9jayhyb290LCBwb3MpIHx8IGlzQXRFbmRPZkJsb2NrKHJvb3QsIHBvcykgfHwgaXNBZnRlckJyKHJvb3QsIHBvcykgfHwgaXNCZWZvcmVCciQxKHJvb3QsIHBvcyk7XG4gICAgY29uc3QgaXNDZWZCbG9jayA9IG5vZGUgPT4gaXNOb25OdWxsYWJsZShub2RlKSAmJiBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJGIobm9kZSkgJiYgaXNCbG9ja0xpa2Uobm9kZSk7XG4gICAgY29uc3QgaXNTaWJsaW5nQ2VmQmxvY2sgPSAocm9vdCwgZGlyZWN0aW9uKSA9PiBjb250YWluZXIgPT4ge1xuICAgICAgcmV0dXJuIGlzQ2VmQmxvY2sobmV3IERvbVRyZWVXYWxrZXIoY29udGFpbmVyLCByb290KVtkaXJlY3Rpb25dKCkpO1xuICAgIH07XG4gICAgY29uc3QgaXNCZWZvcmVDZWZCbG9jayA9IChyb290LCBwb3MpID0+IHtcbiAgICAgIGNvbnN0IG5leHRQb3MgPSBuZXh0UG9zaXRpb24ocm9vdC5kb20sIHBvcykuZ2V0T3IocG9zKTtcbiAgICAgIGNvbnN0IGlzTmV4dENlZkJsb2NrID0gaXNTaWJsaW5nQ2VmQmxvY2socm9vdC5kb20sICduZXh0Jyk7XG4gICAgICByZXR1cm4gcG9zLmlzQXRFbmQoKSAmJiAoaXNOZXh0Q2VmQmxvY2socG9zLmNvbnRhaW5lcigpKSB8fCBpc05leHRDZWZCbG9jayhuZXh0UG9zLmNvbnRhaW5lcigpKSk7XG4gICAgfTtcbiAgICBjb25zdCBpc0FmdGVyQ2VmQmxvY2sgPSAocm9vdCwgcG9zKSA9PiB7XG4gICAgICBjb25zdCBwcmV2UG9zID0gcHJldlBvc2l0aW9uKHJvb3QuZG9tLCBwb3MpLmdldE9yKHBvcyk7XG4gICAgICBjb25zdCBpc1ByZXZDZWZCbG9jayA9IGlzU2libGluZ0NlZkJsb2NrKHJvb3QuZG9tLCAncHJldicpO1xuICAgICAgcmV0dXJuIHBvcy5pc0F0U3RhcnQoKSAmJiAoaXNQcmV2Q2VmQmxvY2socG9zLmNvbnRhaW5lcigpKSB8fCBpc1ByZXZDZWZCbG9jayhwcmV2UG9zLmNvbnRhaW5lcigpKSk7XG4gICAgfTtcbiAgICBjb25zdCBuZWVkc1RvSGF2ZU5ic3AgPSAocm9vdCwgcG9zKSA9PiB7XG4gICAgICBpZiAoaXNJblByZShwb3MpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpc0F0TGluZUJvdW5kYXJ5KHJvb3QsIHBvcykgfHwgaGFzU3BhY2VCZWZvcmUocm9vdCwgcG9zKSB8fCBoYXNTcGFjZUFmdGVyKHJvb3QsIHBvcyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBuZWVkc1RvQmVOYnNwTGVmdCA9IChyb290LCBwb3MpID0+IHtcbiAgICAgIGlmIChpc0luUHJlKHBvcykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGlzQXRTdGFydE9mQmxvY2socm9vdCwgcG9zKSB8fCBpc0JlZm9yZUJsb2NrKHJvb3QsIHBvcykgfHwgaXNBZnRlckJyKHJvb3QsIHBvcykgfHwgaGFzU3BhY2VCZWZvcmUocm9vdCwgcG9zKSB8fCBpc0FmdGVyQ2VmQmxvY2socm9vdCwgcG9zKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGxlYW5SaWdodCA9IHBvcyA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBwb3MuY29udGFpbmVyKCk7XG4gICAgICBjb25zdCBvZmZzZXQgPSBwb3Mub2Zmc2V0KCk7XG4gICAgICBpZiAoaXNUZXh0JGEoY29udGFpbmVyKSAmJiBvZmZzZXQgPCBjb250YWluZXIuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24oY29udGFpbmVyLCBvZmZzZXQgKyAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwb3M7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBuZWVkc1RvQmVOYnNwUmlnaHQgPSAocm9vdCwgcG9zKSA9PiB7XG4gICAgICBpZiAoaXNJblByZShwb3MpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpc0F0RW5kT2ZCbG9jayhyb290LCBwb3MpIHx8IGlzQWZ0ZXJCbG9jayhyb290LCBwb3MpIHx8IGlzQmVmb3JlQnIkMShyb290LCBwb3MpIHx8IGhhc1NwYWNlQWZ0ZXIocm9vdCwgcG9zKSB8fCBpc0JlZm9yZUNlZkJsb2NrKHJvb3QsIHBvcyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBuZWVkc1RvQmVOYnNwID0gKHJvb3QsIHBvcykgPT4gbmVlZHNUb0JlTmJzcExlZnQocm9vdCwgcG9zKSB8fCBuZWVkc1RvQmVOYnNwUmlnaHQocm9vdCwgbGVhblJpZ2h0KHBvcykpO1xuICAgIGNvbnN0IGlzTmJzcEF0ID0gKHRleHQsIG9mZnNldCkgPT4gaXNOYnNwKHRleHQuY2hhckF0KG9mZnNldCkpO1xuICAgIGNvbnN0IGlzV2hpdGVTcGFjZUF0ID0gKHRleHQsIG9mZnNldCkgPT4gaXNXaGl0ZVNwYWNlKHRleHQuY2hhckF0KG9mZnNldCkpO1xuICAgIGNvbnN0IGhhc05ic3AgPSBwb3MgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gcG9zLmNvbnRhaW5lcigpO1xuICAgICAgcmV0dXJuIGlzVGV4dCRhKGNvbnRhaW5lcikgJiYgY29udGFpbnMkMShjb250YWluZXIuZGF0YSwgbmJzcCk7XG4gICAgfTtcbiAgICBjb25zdCBub3JtYWxpemVOYnNwTWlkZGxlID0gdGV4dCA9PiB7XG4gICAgICBjb25zdCBjaGFycyA9IHRleHQuc3BsaXQoJycpO1xuICAgICAgcmV0dXJuIG1hcCQzKGNoYXJzLCAoY2hyLCBpKSA9PiB7XG4gICAgICAgIGlmIChpc05ic3AoY2hyKSAmJiBpID4gMCAmJiBpIDwgY2hhcnMubGVuZ3RoIC0gMSAmJiBpc0NvbnRlbnQoY2hhcnNbaSAtIDFdKSAmJiBpc0NvbnRlbnQoY2hhcnNbaSArIDFdKSkge1xuICAgICAgICAgIHJldHVybiAnICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGNocjtcbiAgICAgICAgfVxuICAgICAgfSkuam9pbignJyk7XG4gICAgfTtcbiAgICBjb25zdCBub3JtYWxpemVOYnNwQXRTdGFydCA9IChyb290LCBub2RlLCBtYWtlTmJzcCkgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IG5vZGUuZGF0YTtcbiAgICAgIGNvbnN0IGZpcnN0UG9zID0gQ2FyZXRQb3NpdGlvbihub2RlLCAwKTtcbiAgICAgIGlmICghbWFrZU5ic3AgJiYgaXNOYnNwQXQodGV4dCwgMCkgJiYgIW5lZWRzVG9CZU5ic3Aocm9vdCwgZmlyc3RQb3MpKSB7XG4gICAgICAgIG5vZGUuZGF0YSA9ICcgJyArIHRleHQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChtYWtlTmJzcCAmJiBpc1doaXRlU3BhY2VBdCh0ZXh0LCAwKSAmJiBuZWVkc1RvQmVOYnNwTGVmdChyb290LCBmaXJzdFBvcykpIHtcbiAgICAgICAgbm9kZS5kYXRhID0gbmJzcCArIHRleHQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplTmJzcEluTWlkZGxlT2ZUZXh0Tm9kZSA9IG5vZGUgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IG5vZGUuZGF0YTtcbiAgICAgIGNvbnN0IG5ld1RleHQgPSBub3JtYWxpemVOYnNwTWlkZGxlKHRleHQpO1xuICAgICAgaWYgKG5ld1RleHQgIT09IHRleHQpIHtcbiAgICAgICAgbm9kZS5kYXRhID0gbmV3VGV4dDtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBub3JtYWxpemVOYnNwQXRFbmQgPSAocm9vdCwgbm9kZSwgbWFrZU5ic3ApID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSBub2RlLmRhdGE7XG4gICAgICBjb25zdCBsYXN0UG9zID0gQ2FyZXRQb3NpdGlvbihub2RlLCB0ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgaWYgKCFtYWtlTmJzcCAmJiBpc05ic3BBdCh0ZXh0LCB0ZXh0Lmxlbmd0aCAtIDEpICYmICFuZWVkc1RvQmVOYnNwKHJvb3QsIGxhc3RQb3MpKSB7XG4gICAgICAgIG5vZGUuZGF0YSA9IHRleHQuc2xpY2UoMCwgLTEpICsgJyAnO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAobWFrZU5ic3AgJiYgaXNXaGl0ZVNwYWNlQXQodGV4dCwgdGV4dC5sZW5ndGggLSAxKSAmJiBuZWVkc1RvQmVOYnNwUmlnaHQocm9vdCwgbGFzdFBvcykpIHtcbiAgICAgICAgbm9kZS5kYXRhID0gdGV4dC5zbGljZSgwLCAtMSkgKyBuYnNwO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZU5ic3BzID0gKHJvb3QsIHBvcykgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gcG9zLmNvbnRhaW5lcigpO1xuICAgICAgaWYgKCFpc1RleHQkYShjb250YWluZXIpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICBpZiAoaGFzTmJzcChwb3MpKSB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVOYnNwQXRTdGFydChyb290LCBjb250YWluZXIsIGZhbHNlKSB8fCBub3JtYWxpemVOYnNwSW5NaWRkbGVPZlRleHROb2RlKGNvbnRhaW5lcikgfHwgbm9ybWFsaXplTmJzcEF0RW5kKHJvb3QsIGNvbnRhaW5lciwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gc29tZUlmKG5vcm1hbGl6ZWQsIHBvcyk7XG4gICAgICB9IGVsc2UgaWYgKG5lZWRzVG9CZU5ic3Aocm9vdCwgcG9zKSkge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplTmJzcEF0U3RhcnQocm9vdCwgY29udGFpbmVyLCB0cnVlKSB8fCBub3JtYWxpemVOYnNwQXRFbmQocm9vdCwgY29udGFpbmVyLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHNvbWVJZihub3JtYWxpemVkLCBwb3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZU5ic3BzSW5FZGl0b3IgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgcm9vdCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgaWYgKGVkaXRvci5zZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSkge1xuICAgICAgICBub3JtYWxpemVOYnNwcyhyb290LCBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpKS5lYWNoKHBvcyA9PiB7XG4gICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcocG9zLnRvUmFuZ2UoKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBub3JtYWxpemUkMSA9IChub2RlLCBvZmZzZXQsIGNvdW50KSA9PiB7XG4gICAgICBpZiAoY291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZWxtID0gU3VnYXJFbGVtZW50LmZyb21Eb20obm9kZSk7XG4gICAgICBjb25zdCByb290ID0gYW5jZXN0b3IkNChlbG0sIGlzQmxvY2skMikuZ2V0T3IoZWxtKTtcbiAgICAgIGNvbnN0IHdoaXRlc3BhY2UgPSBub2RlLmRhdGEuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBjb3VudCk7XG4gICAgICBjb25zdCBpc0VuZE9mQ29udGVudCA9IG9mZnNldCArIGNvdW50ID49IG5vZGUuZGF0YS5sZW5ndGggJiYgbmVlZHNUb0JlTmJzcFJpZ2h0KHJvb3QsIENhcmV0UG9zaXRpb24obm9kZSwgbm9kZS5kYXRhLmxlbmd0aCkpO1xuICAgICAgY29uc3QgaXNTdGFydE9mQ29udGVudCA9IG9mZnNldCA9PT0gMCAmJiBuZWVkc1RvQmVOYnNwTGVmdChyb290LCBDYXJldFBvc2l0aW9uKG5vZGUsIDApKTtcbiAgICAgIG5vZGUucmVwbGFjZURhdGEob2Zmc2V0LCBjb3VudCwgbm9ybWFsaXplJDQod2hpdGVzcGFjZSwgNCwgaXNTdGFydE9mQ29udGVudCwgaXNFbmRPZkNvbnRlbnQpKTtcbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZVdoaXRlc3BhY2VBZnRlciA9IChub2RlLCBvZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBub2RlLmRhdGEuc2xpY2Uob2Zmc2V0KTtcbiAgICAgIGNvbnN0IHdoaXRlc3BhY2VDb3VudCA9IGNvbnRlbnQubGVuZ3RoIC0gbFRyaW0oY29udGVudCkubGVuZ3RoO1xuICAgICAgbm9ybWFsaXplJDEobm9kZSwgb2Zmc2V0LCB3aGl0ZXNwYWNlQ291bnQpO1xuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplV2hpdGVzcGFjZUJlZm9yZSA9IChub2RlLCBvZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBub2RlLmRhdGEuc2xpY2UoMCwgb2Zmc2V0KTtcbiAgICAgIGNvbnN0IHdoaXRlc3BhY2VDb3VudCA9IGNvbnRlbnQubGVuZ3RoIC0gclRyaW0oY29udGVudCkubGVuZ3RoO1xuICAgICAgbm9ybWFsaXplJDEobm9kZSwgb2Zmc2V0IC0gd2hpdGVzcGFjZUNvdW50LCB3aGl0ZXNwYWNlQ291bnQpO1xuICAgIH07XG4gICAgY29uc3QgbWVyZ2VUZXh0Tm9kZXMgPSAocHJldk5vZGUsIG5leHROb2RlLCBub3JtYWxpemVXaGl0ZXNwYWNlLCBtZXJnZVRvUHJldiA9IHRydWUpID0+IHtcbiAgICAgIGNvbnN0IHdoaXRlc3BhY2VPZmZzZXQgPSByVHJpbShwcmV2Tm9kZS5kYXRhKS5sZW5ndGg7XG4gICAgICBjb25zdCBuZXdOb2RlID0gbWVyZ2VUb1ByZXYgPyBwcmV2Tm9kZSA6IG5leHROb2RlO1xuICAgICAgY29uc3QgcmVtb3ZlTm9kZSA9IG1lcmdlVG9QcmV2ID8gbmV4dE5vZGUgOiBwcmV2Tm9kZTtcbiAgICAgIGlmIChtZXJnZVRvUHJldikge1xuICAgICAgICBuZXdOb2RlLmFwcGVuZERhdGEocmVtb3ZlTm9kZS5kYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld05vZGUuaW5zZXJ0RGF0YSgwLCByZW1vdmVOb2RlLmRhdGEpO1xuICAgICAgfVxuICAgICAgcmVtb3ZlJDUoU3VnYXJFbGVtZW50LmZyb21Eb20ocmVtb3ZlTm9kZSkpO1xuICAgICAgaWYgKG5vcm1hbGl6ZVdoaXRlc3BhY2UpIHtcbiAgICAgICAgbm9ybWFsaXplV2hpdGVzcGFjZUFmdGVyKG5ld05vZGUsIHdoaXRlc3BhY2VPZmZzZXQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld05vZGU7XG4gICAgfTtcblxuICAgIGNvbnN0IG5lZWRzUmVwb3NpdGlvbiA9IChwb3MsIGVsbSkgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gcG9zLmNvbnRhaW5lcigpO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gcG9zLm9mZnNldCgpO1xuICAgICAgcmV0dXJuICFDYXJldFBvc2l0aW9uLmlzVGV4dFBvc2l0aW9uKHBvcykgJiYgY29udGFpbmVyID09PSBlbG0ucGFyZW50Tm9kZSAmJiBvZmZzZXQgPiBDYXJldFBvc2l0aW9uLmJlZm9yZShlbG0pLm9mZnNldCgpO1xuICAgIH07XG4gICAgY29uc3QgcmVwb3NpdGlvbiA9IChlbG0sIHBvcykgPT4gbmVlZHNSZXBvc2l0aW9uKHBvcywgZWxtKSA/IENhcmV0UG9zaXRpb24ocG9zLmNvbnRhaW5lcigpLCBwb3Mub2Zmc2V0KCkgLSAxKSA6IHBvcztcbiAgICBjb25zdCBiZWZvcmVPclN0YXJ0T2YgPSBub2RlID0+IGlzVGV4dCRhKG5vZGUpID8gQ2FyZXRQb3NpdGlvbihub2RlLCAwKSA6IENhcmV0UG9zaXRpb24uYmVmb3JlKG5vZGUpO1xuICAgIGNvbnN0IGFmdGVyT3JFbmRPZiA9IG5vZGUgPT4gaXNUZXh0JGEobm9kZSkgPyBDYXJldFBvc2l0aW9uKG5vZGUsIG5vZGUuZGF0YS5sZW5ndGgpIDogQ2FyZXRQb3NpdGlvbi5hZnRlcihub2RlKTtcbiAgICBjb25zdCBnZXRQcmV2aW91c1NpYmxpbmdDYXJldFBvc2l0aW9uID0gZWxtID0+IHtcbiAgICAgIGlmIChpc0NhcmV0Q2FuZGlkYXRlJDMoZWxtLnByZXZpb3VzU2libGluZykpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoYWZ0ZXJPckVuZE9mKGVsbS5wcmV2aW91c1NpYmxpbmcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlbG0ucHJldmlvdXNTaWJsaW5nID8gbGFzdFBvc2l0aW9uSW4oZWxtLnByZXZpb3VzU2libGluZykgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXROZXh0U2libGluZ0NhcmV0UG9zaXRpb24gPSBlbG0gPT4ge1xuICAgICAgaWYgKGlzQ2FyZXRDYW5kaWRhdGUkMyhlbG0ubmV4dFNpYmxpbmcpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGJlZm9yZU9yU3RhcnRPZihlbG0ubmV4dFNpYmxpbmcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlbG0ubmV4dFNpYmxpbmcgPyBmaXJzdFBvc2l0aW9uSW4oZWxtLm5leHRTaWJsaW5nKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRDYXJldFBvc2l0aW9uQmFja3dhcmRzRnJvbUVsbSA9IChyb290RWxlbWVudCwgZWxtKSA9PiB7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShlbG0ucHJldmlvdXNTaWJsaW5nID8gZWxtLnByZXZpb3VzU2libGluZyA6IGVsbS5wYXJlbnROb2RlKS5iaW5kKG5vZGUgPT4gcHJldlBvc2l0aW9uKHJvb3RFbGVtZW50LCBDYXJldFBvc2l0aW9uLmJlZm9yZShub2RlKSkpLm9yVGh1bmsoKCkgPT4gbmV4dFBvc2l0aW9uKHJvb3RFbGVtZW50LCBDYXJldFBvc2l0aW9uLmFmdGVyKGVsbSkpKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRDYXJldFBvc2l0aW9uRm9yd2FyZHNGcm9tRWxtID0gKHJvb3RFbGVtZW50LCBlbG0pID0+IG5leHRQb3NpdGlvbihyb290RWxlbWVudCwgQ2FyZXRQb3NpdGlvbi5hZnRlcihlbG0pKS5vclRodW5rKCgpID0+IHByZXZQb3NpdGlvbihyb290RWxlbWVudCwgQ2FyZXRQb3NpdGlvbi5iZWZvcmUoZWxtKSkpO1xuICAgIGNvbnN0IGZpbmRDYXJldFBvc2l0aW9uQmFja3dhcmRzID0gKHJvb3RFbGVtZW50LCBlbG0pID0+IGdldFByZXZpb3VzU2libGluZ0NhcmV0UG9zaXRpb24oZWxtKS5vclRodW5rKCgpID0+IGdldE5leHRTaWJsaW5nQ2FyZXRQb3NpdGlvbihlbG0pKS5vclRodW5rKCgpID0+IGZpbmRDYXJldFBvc2l0aW9uQmFja3dhcmRzRnJvbUVsbShyb290RWxlbWVudCwgZWxtKSk7XG4gICAgY29uc3QgZmluZENhcmV0UG9zaXRpb25Gb3J3YXJkID0gKHJvb3RFbGVtZW50LCBlbG0pID0+IGdldE5leHRTaWJsaW5nQ2FyZXRQb3NpdGlvbihlbG0pLm9yVGh1bmsoKCkgPT4gZ2V0UHJldmlvdXNTaWJsaW5nQ2FyZXRQb3NpdGlvbihlbG0pKS5vclRodW5rKCgpID0+IGZpbmRDYXJldFBvc2l0aW9uRm9yd2FyZHNGcm9tRWxtKHJvb3RFbGVtZW50LCBlbG0pKTtcbiAgICBjb25zdCBmaW5kQ2FyZXRQb3NpdGlvbiA9IChmb3J3YXJkLCByb290RWxlbWVudCwgZWxtKSA9PiBmb3J3YXJkID8gZmluZENhcmV0UG9zaXRpb25Gb3J3YXJkKHJvb3RFbGVtZW50LCBlbG0pIDogZmluZENhcmV0UG9zaXRpb25CYWNrd2FyZHMocm9vdEVsZW1lbnQsIGVsbSk7XG4gICAgY29uc3QgZmluZENhcmV0UG9zT3V0c2lkZUVsbUFmdGVyRGVsZXRlID0gKGZvcndhcmQsIHJvb3RFbGVtZW50LCBlbG0pID0+IGZpbmRDYXJldFBvc2l0aW9uKGZvcndhcmQsIHJvb3RFbGVtZW50LCBlbG0pLm1hcChjdXJyeShyZXBvc2l0aW9uLCBlbG0pKTtcbiAgICBjb25zdCBzZXRTZWxlY3Rpb24kMSA9IChlZGl0b3IsIGZvcndhcmQsIHBvcykgPT4ge1xuICAgICAgcG9zLmZvbGQoKCkgPT4ge1xuICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgIH0sIHBvcyA9PiB7XG4gICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHBvcy50b1JhbmdlKCksIGZvcndhcmQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBlcVJhd05vZGUgPSByYXdOb2RlID0+IGVsbSA9PiBlbG0uZG9tID09PSByYXdOb2RlO1xuICAgIGNvbnN0IGlzQmxvY2sgPSAoZWRpdG9yLCBlbG0pID0+IGVsbSAmJiBoYXMkMihlZGl0b3Iuc2NoZW1hLmdldEJsb2NrRWxlbWVudHMoKSwgbmFtZShlbG0pKTtcbiAgICBjb25zdCBwYWRkRW1wdHlCbG9jayA9IGVsbSA9PiB7XG4gICAgICBpZiAoaXNFbXB0eSQyKGVsbSkpIHtcbiAgICAgICAgY29uc3QgYnIgPSBTdWdhckVsZW1lbnQuZnJvbUh0bWwoJzxiciBkYXRhLW1jZS1ib2d1cz1cIjFcIj4nKTtcbiAgICAgICAgZW1wdHkoZWxtKTtcbiAgICAgICAgYXBwZW5kJDEoZWxtLCBicik7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKENhcmV0UG9zaXRpb24uYmVmb3JlKGJyLmRvbSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGRlbGV0ZU5vcm1hbGl6ZWQgPSAoZWxtLCBhZnRlckRlbGV0ZVBvc09wdCwgbm9ybWFsaXplV2hpdGVzcGFjZSkgPT4ge1xuICAgICAgY29uc3QgcHJldlRleHRPcHQgPSBwcmV2U2libGluZyhlbG0pLmZpbHRlcihpc1RleHQkYik7XG4gICAgICBjb25zdCBuZXh0VGV4dE9wdCA9IG5leHRTaWJsaW5nKGVsbSkuZmlsdGVyKGlzVGV4dCRiKTtcbiAgICAgIHJlbW92ZSQ1KGVsbSk7XG4gICAgICByZXR1cm4gbGlmdDMocHJldlRleHRPcHQsIG5leHRUZXh0T3B0LCBhZnRlckRlbGV0ZVBvc09wdCwgKHByZXYsIG5leHQsIHBvcykgPT4ge1xuICAgICAgICBjb25zdCBwcmV2Tm9kZSA9IHByZXYuZG9tLCBuZXh0Tm9kZSA9IG5leHQuZG9tO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBwcmV2Tm9kZS5kYXRhLmxlbmd0aDtcbiAgICAgICAgbWVyZ2VUZXh0Tm9kZXMocHJldk5vZGUsIG5leHROb2RlLCBub3JtYWxpemVXaGl0ZXNwYWNlKTtcbiAgICAgICAgcmV0dXJuIHBvcy5jb250YWluZXIoKSA9PT0gbmV4dE5vZGUgPyBDYXJldFBvc2l0aW9uKHByZXZOb2RlLCBvZmZzZXQpIDogcG9zO1xuICAgICAgfSkub3JUaHVuaygoKSA9PiB7XG4gICAgICAgIGlmIChub3JtYWxpemVXaGl0ZXNwYWNlKSB7XG4gICAgICAgICAgcHJldlRleHRPcHQuZWFjaChlbG0gPT4gbm9ybWFsaXplV2hpdGVzcGFjZUJlZm9yZShlbG0uZG9tLCBlbG0uZG9tLmxlbmd0aCkpO1xuICAgICAgICAgIG5leHRUZXh0T3B0LmVhY2goZWxtID0+IG5vcm1hbGl6ZVdoaXRlc3BhY2VBZnRlcihlbG0uZG9tLCAwKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFmdGVyRGVsZXRlUG9zT3B0O1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBpc0lubGluZUVsZW1lbnQgPSAoZWRpdG9yLCBlbGVtZW50KSA9PiBoYXMkMihlZGl0b3Iuc2NoZW1hLmdldFRleHRJbmxpbmVFbGVtZW50cygpLCBuYW1lKGVsZW1lbnQpKTtcbiAgICBjb25zdCBkZWxldGVFbGVtZW50JDIgPSAoZWRpdG9yLCBmb3J3YXJkLCBlbG0sIG1vdmVDYXJldCA9IHRydWUpID0+IHtcbiAgICAgIGNvbnN0IGFmdGVyRGVsZXRlUG9zID0gZmluZENhcmV0UG9zT3V0c2lkZUVsbUFmdGVyRGVsZXRlKGZvcndhcmQsIGVkaXRvci5nZXRCb2R5KCksIGVsbS5kb20pO1xuICAgICAgY29uc3QgcGFyZW50QmxvY2sgPSBhbmNlc3RvciQ0KGVsbSwgY3VycnkoaXNCbG9jaywgZWRpdG9yKSwgZXFSYXdOb2RlKGVkaXRvci5nZXRCb2R5KCkpKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRBZnRlckRlbGV0ZVBvcyA9IGRlbGV0ZU5vcm1hbGl6ZWQoZWxtLCBhZnRlckRlbGV0ZVBvcywgaXNJbmxpbmVFbGVtZW50KGVkaXRvciwgZWxtKSk7XG4gICAgICBpZiAoZWRpdG9yLmRvbS5pc0VtcHR5KGVkaXRvci5nZXRCb2R5KCkpKSB7XG4gICAgICAgIGVkaXRvci5zZXRDb250ZW50KCcnKTtcbiAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRDdXJzb3JMb2NhdGlvbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50QmxvY2suYmluZChwYWRkRW1wdHlCbG9jaykuZm9sZCgoKSA9PiB7XG4gICAgICAgICAgaWYgKG1vdmVDYXJldCkge1xuICAgICAgICAgICAgc2V0U2VsZWN0aW9uJDEoZWRpdG9yLCBmb3J3YXJkLCBub3JtYWxpemVkQWZ0ZXJEZWxldGVQb3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgcGFkZFBvcyA9PiB7XG4gICAgICAgICAgaWYgKG1vdmVDYXJldCkge1xuICAgICAgICAgICAgc2V0U2VsZWN0aW9uJDEoZWRpdG9yLCBmb3J3YXJkLCBPcHRpb25hbC5zb21lKHBhZGRQb3MpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBzdHJvbmdSdGwgPSAvW1xcdTA1OTEtXFx1MDdGRlxcdUZCMUQtXFx1RkRGRlxcdUZFNzAtXFx1RkVGQ10vO1xuICAgIGNvbnN0IGhhc1N0cm9uZ1J0bCA9IHRleHQgPT4gc3Ryb25nUnRsLnRlc3QodGV4dCk7XG5cbiAgICBjb25zdCBpc0lubGluZVRhcmdldCA9IChlZGl0b3IsIGVsbSkgPT4gaXMkMShTdWdhckVsZW1lbnQuZnJvbURvbShlbG0pLCBnZXRJbmxpbmVCb3VuZGFyeVNlbGVjdG9yKGVkaXRvcikpICYmICFpc1RyYW5zcGFyZW50QmxvY2soZWRpdG9yLnNjaGVtYSwgZWxtKSAmJiBlZGl0b3IuZG9tLmlzRWRpdGFibGUoZWxtKTtcbiAgICBjb25zdCBpc1J0bCA9IGVsZW1lbnQgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgcmV0dXJuIERPTVV0aWxzLkRPTS5nZXRTdHlsZShlbGVtZW50LCAnZGlyZWN0aW9uJywgdHJ1ZSkgPT09ICdydGwnIHx8IGhhc1N0cm9uZ1J0bCgoX2EgPSBlbGVtZW50LnRleHRDb250ZW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJyk7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kSW5saW5lUGFyZW50cyA9IChpc0lubGluZVRhcmdldCwgcm9vdE5vZGUsIHBvcykgPT4gZmlsdGVyJDUoRE9NVXRpbHMuRE9NLmdldFBhcmVudHMocG9zLmNvbnRhaW5lcigpLCAnKicsIHJvb3ROb2RlKSwgaXNJbmxpbmVUYXJnZXQpO1xuICAgIGNvbnN0IGZpbmRSb290SW5saW5lID0gKGlzSW5saW5lVGFyZ2V0LCByb290Tm9kZSwgcG9zKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnRzID0gZmluZElubGluZVBhcmVudHMoaXNJbmxpbmVUYXJnZXQsIHJvb3ROb2RlLCBwb3MpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20ocGFyZW50c1twYXJlbnRzLmxlbmd0aCAtIDFdKTtcbiAgICB9O1xuICAgIGNvbnN0IGhhc1NhbWVQYXJlbnRCbG9jayA9IChyb290Tm9kZSwgbm9kZTEsIG5vZGUyKSA9PiB7XG4gICAgICBjb25zdCBibG9jazEgPSBnZXRQYXJlbnRCbG9jayQzKG5vZGUxLCByb290Tm9kZSk7XG4gICAgICBjb25zdCBibG9jazIgPSBnZXRQYXJlbnRCbG9jayQzKG5vZGUyLCByb290Tm9kZSk7XG4gICAgICByZXR1cm4gaXNOb25OdWxsYWJsZShibG9jazEpICYmIGJsb2NrMSA9PT0gYmxvY2syO1xuICAgIH07XG4gICAgY29uc3QgaXNBdFp3c3AgPSBwb3MgPT4gaXNCZWZvcmVJbmxpbmUocG9zKSB8fCBpc0FmdGVySW5saW5lKHBvcyk7XG4gICAgY29uc3Qgbm9ybWFsaXplUG9zaXRpb24gPSAoZm9yd2FyZCwgcG9zKSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBwb3MuY29udGFpbmVyKCksIG9mZnNldCA9IHBvcy5vZmZzZXQoKTtcbiAgICAgIGlmIChmb3J3YXJkKSB7XG4gICAgICAgIGlmIChpc0NhcmV0Q29udGFpbmVySW5saW5lKGNvbnRhaW5lcikpIHtcbiAgICAgICAgICBpZiAoaXNUZXh0JGEoY29udGFpbmVyLm5leHRTaWJsaW5nKSkge1xuICAgICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24oY29udGFpbmVyLm5leHRTaWJsaW5nLCAwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24uYWZ0ZXIoY29udGFpbmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGlzQmVmb3JlSW5saW5lKHBvcykgPyBDYXJldFBvc2l0aW9uKGNvbnRhaW5lciwgb2Zmc2V0ICsgMSkgOiBwb3M7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc0NhcmV0Q29udGFpbmVySW5saW5lKGNvbnRhaW5lcikpIHtcbiAgICAgICAgICBpZiAoaXNUZXh0JGEoY29udGFpbmVyLnByZXZpb3VzU2libGluZykpIHtcbiAgICAgICAgICAgIHJldHVybiBDYXJldFBvc2l0aW9uKGNvbnRhaW5lci5wcmV2aW91c1NpYmxpbmcsIGNvbnRhaW5lci5wcmV2aW91c1NpYmxpbmcuZGF0YS5sZW5ndGgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gQ2FyZXRQb3NpdGlvbi5iZWZvcmUoY29udGFpbmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGlzQWZ0ZXJJbmxpbmUocG9zKSA/IENhcmV0UG9zaXRpb24oY29udGFpbmVyLCBvZmZzZXQgLSAxKSA6IHBvcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplRm9yd2FyZHMgPSBjdXJyeShub3JtYWxpemVQb3NpdGlvbiwgdHJ1ZSk7XG4gICAgY29uc3Qgbm9ybWFsaXplQmFja3dhcmRzID0gY3Vycnkobm9ybWFsaXplUG9zaXRpb24sIGZhbHNlKTtcblxuICAgIGNvbnN0IGV4ZWNDb21tYW5kSWdub3JlSW5wdXRFdmVudHMgPSAoZWRpdG9yLCBjb21tYW5kKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dEJsb2NrZXIgPSBlID0+IGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICBlZGl0b3Iub24oJ2JlZm9yZWlucHV0IGlucHV0JywgaW5wdXRCbG9ja2VyLCB0cnVlKTtcbiAgICAgIGVkaXRvci5nZXREb2MoKS5leGVjQ29tbWFuZChjb21tYW5kKTtcbiAgICAgIGVkaXRvci5vZmYoJ2JlZm9yZWlucHV0IGlucHV0JywgaW5wdXRCbG9ja2VyKTtcbiAgICB9O1xuICAgIGNvbnN0IGV4ZWNFZGl0b3JEZWxldGVDb21tYW5kID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnZGVsZXRlJyk7XG4gICAgfTtcbiAgICBjb25zdCBleGVjTmF0aXZlRGVsZXRlQ29tbWFuZCA9IGVkaXRvciA9PiBleGVjQ29tbWFuZElnbm9yZUlucHV0RXZlbnRzKGVkaXRvciwgJ0RlbGV0ZScpO1xuICAgIGNvbnN0IGV4ZWNOYXRpdmVGb3J3YXJkRGVsZXRlQ29tbWFuZCA9IGVkaXRvciA9PiBleGVjQ29tbWFuZElnbm9yZUlucHV0RXZlbnRzKGVkaXRvciwgJ0ZvcndhcmREZWxldGUnKTtcbiAgICBjb25zdCBpc0JlZm9yZVJvb3QgPSByb290Tm9kZSA9PiBlbG0gPT4gaXMkMihwYXJlbnQoZWxtKSwgcm9vdE5vZGUsIGVxKTtcbiAgICBjb25zdCBpc1RleHRCbG9ja09yTGlzdEl0ZW0gPSBlbGVtZW50ID0+IGlzVGV4dEJsb2NrJDIoZWxlbWVudCkgfHwgaXNMaXN0SXRlbSQxKGVsZW1lbnQpO1xuICAgIGNvbnN0IGdldFBhcmVudEJsb2NrJDIgPSAocm9vdE5vZGUsIGVsbSkgPT4ge1xuICAgICAgaWYgKGNvbnRhaW5zKHJvb3ROb2RlLCBlbG0pKSB7XG4gICAgICAgIHJldHVybiBjbG9zZXN0JDQoZWxtLCBpc1RleHRCbG9ja09yTGlzdEl0ZW0sIGlzQmVmb3JlUm9vdChyb290Tm9kZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHBhZGRFbXB0eUJvZHkgPSAoZWRpdG9yLCBtb3ZlU2VsZWN0aW9uID0gdHJ1ZSkgPT4ge1xuICAgICAgaWYgKGVkaXRvci5kb20uaXNFbXB0eShlZGl0b3IuZ2V0Qm9keSgpKSkge1xuICAgICAgICBlZGl0b3Iuc2V0Q29udGVudCgnJywgeyBub19zZWxlY3Rpb246ICFtb3ZlU2VsZWN0aW9uIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgd2lsbERlbGV0ZUxhc3RQb3NpdGlvbkluRWxlbWVudCA9IChmb3J3YXJkLCBmcm9tUG9zLCBlbG0pID0+IGxpZnQyKGZpcnN0UG9zaXRpb25JbihlbG0pLCBsYXN0UG9zaXRpb25JbihlbG0pLCAoZmlyc3RQb3MsIGxhc3RQb3MpID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRGaXJzdFBvcyA9IG5vcm1hbGl6ZVBvc2l0aW9uKHRydWUsIGZpcnN0UG9zKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRMYXN0UG9zID0gbm9ybWFsaXplUG9zaXRpb24oZmFsc2UsIGxhc3RQb3MpO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEZyb21Qb3MgPSBub3JtYWxpemVQb3NpdGlvbihmYWxzZSwgZnJvbVBvcyk7XG4gICAgICBpZiAoZm9yd2FyZCkge1xuICAgICAgICByZXR1cm4gbmV4dFBvc2l0aW9uKGVsbSwgbm9ybWFsaXplZEZyb21Qb3MpLmV4aXN0cyhuZXh0UG9zID0+IG5leHRQb3MuaXNFcXVhbChub3JtYWxpemVkTGFzdFBvcykgJiYgZnJvbVBvcy5pc0VxdWFsKG5vcm1hbGl6ZWRGaXJzdFBvcykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHByZXZQb3NpdGlvbihlbG0sIG5vcm1hbGl6ZWRGcm9tUG9zKS5leGlzdHMocHJldlBvcyA9PiBwcmV2UG9zLmlzRXF1YWwobm9ybWFsaXplZEZpcnN0UG9zKSAmJiBmcm9tUG9zLmlzRXF1YWwobm9ybWFsaXplZExhc3RQb3MpKTtcbiAgICAgIH1cbiAgICB9KS5nZXRPcih0cnVlKTtcbiAgICBjb25zdCBmcmVlZmFsbFJ0bCA9IHJvb3QgPT4ge1xuICAgICAgY29uc3QgY2hpbGQgPSBpc0NvbW1lbnQkMShyb290KSA/IHByZXZTaWJsaW5nKHJvb3QpIDogbGFzdENoaWxkKHJvb3QpO1xuICAgICAgcmV0dXJuIGNoaWxkLmJpbmQoZnJlZWZhbGxSdGwpLm9yVGh1bmsoKCkgPT4gT3B0aW9uYWwuc29tZShyb290KSk7XG4gICAgfTtcbiAgICBjb25zdCBkZWxldGVSYW5nZUNvbnRlbnRzID0gKGVkaXRvciwgcm5nLCByb290LCBtb3ZlU2VsZWN0aW9uID0gdHJ1ZSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgcm5nLmRlbGV0ZUNvbnRlbnRzKCk7XG4gICAgICBjb25zdCBsYXN0Tm9kZSA9IGZyZWVmYWxsUnRsKHJvb3QpLmdldE9yKHJvb3QpO1xuICAgICAgY29uc3QgbGFzdEJsb2NrID0gU3VnYXJFbGVtZW50LmZyb21Eb20oKF9hID0gZWRpdG9yLmRvbS5nZXRQYXJlbnQobGFzdE5vZGUuZG9tLCBlZGl0b3IuZG9tLmlzQmxvY2spKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiByb290LmRvbSk7XG4gICAgICBpZiAobGFzdEJsb2NrLmRvbSA9PT0gZWRpdG9yLmdldEJvZHkoKSkge1xuICAgICAgICBwYWRkRW1wdHlCb2R5KGVkaXRvciwgbW92ZVNlbGVjdGlvbik7XG4gICAgICB9IGVsc2UgaWYgKGlzRW1wdHkkMihsYXN0QmxvY2spKSB7XG4gICAgICAgIGZpbGxXaXRoUGFkZGluZ0JyKGxhc3RCbG9jayk7XG4gICAgICAgIGlmIChtb3ZlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRDdXJzb3JMb2NhdGlvbihsYXN0QmxvY2suZG9tLCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFlcShyb290LCBsYXN0QmxvY2spKSB7XG4gICAgICAgIGNvbnN0IGFkZGl0aW9uYWxDbGVhbnVwTm9kZXMgPSBpcyQyKHBhcmVudChsYXN0QmxvY2spLCByb290KSA/IFtdIDogc2libGluZ3MobGFzdEJsb2NrKTtcbiAgICAgICAgZWFjaCRlKGFkZGl0aW9uYWxDbGVhbnVwTm9kZXMuY29uY2F0KGNoaWxkcmVuJDEocm9vdCkpLCBub2RlID0+IHtcbiAgICAgICAgICBpZiAoIWVxKG5vZGUsIGxhc3RCbG9jaykgJiYgIWNvbnRhaW5zKG5vZGUsIGxhc3RCbG9jaykgJiYgaXNFbXB0eSQyKG5vZGUpKSB7XG4gICAgICAgICAgICByZW1vdmUkNShub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBpc1Jvb3RGcm9tRWxlbWVudCA9IHJvb3QgPT4gY3VyID0+IGVxKHJvb3QsIGN1cik7XG4gICAgY29uc3QgZ2V0VGFibGVDZWxscyA9IHRhYmxlID0+IGRlc2NlbmRhbnRzKHRhYmxlLCAndGQsdGgnKTtcbiAgICBjb25zdCBnZXRUYWJsZURldGFpbHNGcm9tUmFuZ2UgPSAocm5nLCBpc1Jvb3QpID0+IHtcbiAgICAgIGNvbnN0IGdldFRhYmxlID0gbm9kZSA9PiBnZXRDbG9zZXN0VGFibGUoU3VnYXJFbGVtZW50LmZyb21Eb20obm9kZSksIGlzUm9vdCk7XG4gICAgICBjb25zdCBzdGFydFRhYmxlID0gZ2V0VGFibGUocm5nLnN0YXJ0Q29udGFpbmVyKTtcbiAgICAgIGNvbnN0IGVuZFRhYmxlID0gZ2V0VGFibGUocm5nLmVuZENvbnRhaW5lcik7XG4gICAgICBjb25zdCBpc1N0YXJ0SW5UYWJsZSA9IHN0YXJ0VGFibGUuaXNTb21lKCk7XG4gICAgICBjb25zdCBpc0VuZEluVGFibGUgPSBlbmRUYWJsZS5pc1NvbWUoKTtcbiAgICAgIGNvbnN0IGlzU2FtZVRhYmxlID0gbGlmdDIoc3RhcnRUYWJsZSwgZW5kVGFibGUsIGVxKS5nZXRPcihmYWxzZSk7XG4gICAgICBjb25zdCBpc011bHRpVGFibGUgPSAhaXNTYW1lVGFibGUgJiYgaXNTdGFydEluVGFibGUgJiYgaXNFbmRJblRhYmxlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnRUYWJsZSxcbiAgICAgICAgZW5kVGFibGUsXG4gICAgICAgIGlzU3RhcnRJblRhYmxlLFxuICAgICAgICBpc0VuZEluVGFibGUsXG4gICAgICAgIGlzU2FtZVRhYmxlLFxuICAgICAgICBpc011bHRpVGFibGVcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHRhYmxlQ2VsbFJuZyA9IChzdGFydCwgZW5kKSA9PiAoe1xuICAgICAgc3RhcnQsXG4gICAgICBlbmRcbiAgICB9KTtcbiAgICBjb25zdCB0YWJsZVNlbGVjdGlvbiA9IChybmcsIHRhYmxlLCBjZWxscykgPT4gKHtcbiAgICAgIHJuZyxcbiAgICAgIHRhYmxlLFxuICAgICAgY2VsbHNcbiAgICB9KTtcbiAgICBjb25zdCBkZWxldGVBY3Rpb24gPSBBZHQuZ2VuZXJhdGUoW1xuICAgICAge1xuICAgICAgICBzaW5nbGVDZWxsVGFibGU6IFtcbiAgICAgICAgICAncm5nJyxcbiAgICAgICAgICAnY2VsbCdcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHsgZnVsbFRhYmxlOiBbJ3RhYmxlJ10gfSxcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFRhYmxlOiBbXG4gICAgICAgICAgJ2NlbGxzJyxcbiAgICAgICAgICAnb3V0c2lkZURldGFpbHMnXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG11bHRpVGFibGU6IFtcbiAgICAgICAgICAnc3RhcnRUYWJsZUNlbGxzJyxcbiAgICAgICAgICAnZW5kVGFibGVDZWxscycsXG4gICAgICAgICAgJ2JldHdlZW5SbmcnXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdKTtcbiAgICBjb25zdCBnZXRDbG9zZXN0Q2VsbCQxID0gKGNvbnRhaW5lciwgaXNSb290KSA9PiBjbG9zZXN0JDMoU3VnYXJFbGVtZW50LmZyb21Eb20oY29udGFpbmVyKSwgJ3RkLHRoJywgaXNSb290KTtcbiAgICBjb25zdCBpc0V4cGFuZGVkQ2VsbFJuZyA9IGNlbGxSbmcgPT4gIWVxKGNlbGxSbmcuc3RhcnQsIGNlbGxSbmcuZW5kKTtcbiAgICBjb25zdCBnZXRUYWJsZUZyb21DZWxsUm5nID0gKGNlbGxSbmcsIGlzUm9vdCkgPT4gZ2V0Q2xvc2VzdFRhYmxlKGNlbGxSbmcuc3RhcnQsIGlzUm9vdCkuYmluZChzdGFydFBhcmVudFRhYmxlID0+IGdldENsb3Nlc3RUYWJsZShjZWxsUm5nLmVuZCwgaXNSb290KS5iaW5kKGVuZFBhcmVudFRhYmxlID0+IHNvbWVJZihlcShzdGFydFBhcmVudFRhYmxlLCBlbmRQYXJlbnRUYWJsZSksIHN0YXJ0UGFyZW50VGFibGUpKSk7XG4gICAgY29uc3QgaXNTaW5nbGVDZWxsVGFibGUgPSAoY2VsbFJuZywgaXNSb290KSA9PiAhaXNFeHBhbmRlZENlbGxSbmcoY2VsbFJuZykgJiYgZ2V0VGFibGVGcm9tQ2VsbFJuZyhjZWxsUm5nLCBpc1Jvb3QpLmV4aXN0cyh0YWJsZSA9PiB7XG4gICAgICBjb25zdCByb3dzID0gdGFibGUuZG9tLnJvd3M7XG4gICAgICByZXR1cm4gcm93cy5sZW5ndGggPT09IDEgJiYgcm93c1swXS5jZWxscy5sZW5ndGggPT09IDE7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0Q2VsbFJuZyA9IChybmcsIGlzUm9vdCkgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRDZWxsID0gZ2V0Q2xvc2VzdENlbGwkMShybmcuc3RhcnRDb250YWluZXIsIGlzUm9vdCk7XG4gICAgICBjb25zdCBlbmRDZWxsID0gZ2V0Q2xvc2VzdENlbGwkMShybmcuZW5kQ29udGFpbmVyLCBpc1Jvb3QpO1xuICAgICAgcmV0dXJuIGxpZnQyKHN0YXJ0Q2VsbCwgZW5kQ2VsbCwgdGFibGVDZWxsUm5nKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldENlbGxSYW5nZUZyb21TdGFydFRhYmxlID0gaXNSb290ID0+IHN0YXJ0Q2VsbCA9PiBnZXRDbG9zZXN0VGFibGUoc3RhcnRDZWxsLCBpc1Jvb3QpLmJpbmQodGFibGUgPT4gbGFzdCQzKGdldFRhYmxlQ2VsbHModGFibGUpKS5tYXAoZW5kQ2VsbCA9PiB0YWJsZUNlbGxSbmcoc3RhcnRDZWxsLCBlbmRDZWxsKSkpO1xuICAgIGNvbnN0IGdldENlbGxSYW5nZUZyb21FbmRUYWJsZSA9IGlzUm9vdCA9PiBlbmRDZWxsID0+IGdldENsb3Nlc3RUYWJsZShlbmRDZWxsLCBpc1Jvb3QpLmJpbmQodGFibGUgPT4gaGVhZChnZXRUYWJsZUNlbGxzKHRhYmxlKSkubWFwKHN0YXJ0Q2VsbCA9PiB0YWJsZUNlbGxSbmcoc3RhcnRDZWxsLCBlbmRDZWxsKSkpO1xuICAgIGNvbnN0IGdldFRhYmxlU2VsZWN0aW9uRnJvbUNlbGxSbmcgPSBpc1Jvb3QgPT4gY2VsbFJuZyA9PiBnZXRUYWJsZUZyb21DZWxsUm5nKGNlbGxSbmcsIGlzUm9vdCkubWFwKHRhYmxlID0+IHRhYmxlU2VsZWN0aW9uKGNlbGxSbmcsIHRhYmxlLCBnZXRUYWJsZUNlbGxzKHRhYmxlKSkpO1xuICAgIGNvbnN0IGdldFRhYmxlU2VsZWN0aW9ucyA9IChjZWxsUm5nLCBzZWxlY3Rpb25EZXRhaWxzLCBybmcsIGlzUm9vdCkgPT4ge1xuICAgICAgaWYgKHJuZy5jb2xsYXBzZWQgfHwgIWNlbGxSbmcuZm9yYWxsKGlzRXhwYW5kZWRDZWxsUm5nKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb25EZXRhaWxzLmlzU2FtZVRhYmxlKSB7XG4gICAgICAgIGNvbnN0IHNhbWVUYWJsZVNlbGVjdGlvbiA9IGNlbGxSbmcuYmluZChnZXRUYWJsZVNlbGVjdGlvbkZyb21DZWxsUm5nKGlzUm9vdCkpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgc3RhcnQ6IHNhbWVUYWJsZVNlbGVjdGlvbixcbiAgICAgICAgICBlbmQ6IHNhbWVUYWJsZVNlbGVjdGlvblxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IGdldENsb3Nlc3RDZWxsJDEocm5nLnN0YXJ0Q29udGFpbmVyLCBpc1Jvb3QpO1xuICAgICAgICBjb25zdCBlbmRDZWxsID0gZ2V0Q2xvc2VzdENlbGwkMShybmcuZW5kQ29udGFpbmVyLCBpc1Jvb3QpO1xuICAgICAgICBjb25zdCBzdGFydFRhYmxlU2VsZWN0aW9uID0gc3RhcnRDZWxsLmJpbmQoZ2V0Q2VsbFJhbmdlRnJvbVN0YXJ0VGFibGUoaXNSb290KSkuYmluZChnZXRUYWJsZVNlbGVjdGlvbkZyb21DZWxsUm5nKGlzUm9vdCkpO1xuICAgICAgICBjb25zdCBlbmRUYWJsZVNlbGVjdGlvbiA9IGVuZENlbGwuYmluZChnZXRDZWxsUmFuZ2VGcm9tRW5kVGFibGUoaXNSb290KSkuYmluZChnZXRUYWJsZVNlbGVjdGlvbkZyb21DZWxsUm5nKGlzUm9vdCkpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgc3RhcnQ6IHN0YXJ0VGFibGVTZWxlY3Rpb24sXG4gICAgICAgICAgZW5kOiBlbmRUYWJsZVNlbGVjdGlvblxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdldENlbGxJbmRleCA9IChjZWxscywgY2VsbCkgPT4gZmluZEluZGV4JDIoY2VsbHMsIHggPT4gZXEoeCwgY2VsbCkpO1xuICAgIGNvbnN0IGdldFNlbGVjdGVkQ2VsbHMgPSB0YWJsZVNlbGVjdGlvbiA9PiBsaWZ0MihnZXRDZWxsSW5kZXgodGFibGVTZWxlY3Rpb24uY2VsbHMsIHRhYmxlU2VsZWN0aW9uLnJuZy5zdGFydCksIGdldENlbGxJbmRleCh0YWJsZVNlbGVjdGlvbi5jZWxscywgdGFibGVTZWxlY3Rpb24ucm5nLmVuZCksIChzdGFydEluZGV4LCBlbmRJbmRleCkgPT4gdGFibGVTZWxlY3Rpb24uY2VsbHMuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXggKyAxKSk7XG4gICAgY29uc3QgaXNTaW5nbGVDZWxsVGFibGVDb250ZW50U2VsZWN0ZWQgPSAob3B0Q2VsbFJuZywgcm5nLCBpc1Jvb3QpID0+IG9wdENlbGxSbmcuZXhpc3RzKGNlbGxSbmcgPT4gaXNTaW5nbGVDZWxsVGFibGUoY2VsbFJuZywgaXNSb290KSAmJiBoYXNBbGxDb250ZW50c1NlbGVjdGVkKGNlbGxSbmcuc3RhcnQsIHJuZykpO1xuICAgIGNvbnN0IHVuc2VsZWN0Q2VsbHMgPSAocm5nLCBzZWxlY3Rpb25EZXRhaWxzKSA9PiB7XG4gICAgICBjb25zdCB7c3RhcnRUYWJsZSwgZW5kVGFibGV9ID0gc2VsZWN0aW9uRGV0YWlscztcbiAgICAgIGNvbnN0IG90aGVyQ29udGVudFJuZyA9IHJuZy5jbG9uZVJhbmdlKCk7XG4gICAgICBzdGFydFRhYmxlLmVhY2godGFibGUgPT4gb3RoZXJDb250ZW50Um5nLnNldFN0YXJ0QWZ0ZXIodGFibGUuZG9tKSk7XG4gICAgICBlbmRUYWJsZS5lYWNoKHRhYmxlID0+IG90aGVyQ29udGVudFJuZy5zZXRFbmRCZWZvcmUodGFibGUuZG9tKSk7XG4gICAgICByZXR1cm4gb3RoZXJDb250ZW50Um5nO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlU2luZ2xlVGFibGUgPSAoY2VsbFJuZywgc2VsZWN0aW9uRGV0YWlscywgcm5nLCBpc1Jvb3QpID0+IGdldFRhYmxlU2VsZWN0aW9ucyhjZWxsUm5nLCBzZWxlY3Rpb25EZXRhaWxzLCBybmcsIGlzUm9vdCkuYmluZCgoe3N0YXJ0LCBlbmR9KSA9PiBzdGFydC5vcihlbmQpKS5iaW5kKHRhYmxlU2VsZWN0aW9uID0+IHtcbiAgICAgIGNvbnN0IHtpc1NhbWVUYWJsZX0gPSBzZWxlY3Rpb25EZXRhaWxzO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxscyA9IGdldFNlbGVjdGVkQ2VsbHModGFibGVTZWxlY3Rpb24pLmdldE9yKFtdKTtcbiAgICAgIGlmIChpc1NhbWVUYWJsZSAmJiB0YWJsZVNlbGVjdGlvbi5jZWxscy5sZW5ndGggPT09IHNlbGVjdGVkQ2VsbHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGRlbGV0ZUFjdGlvbi5mdWxsVGFibGUodGFibGVTZWxlY3Rpb24udGFibGUpKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRDZWxscy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChpc1NhbWVUYWJsZSkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGRlbGV0ZUFjdGlvbi5wYXJ0aWFsVGFibGUoc2VsZWN0ZWRDZWxscywgT3B0aW9uYWwubm9uZSgpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgb3RoZXJDb250ZW50Um5nID0gdW5zZWxlY3RDZWxscyhybmcsIHNlbGVjdGlvbkRldGFpbHMpO1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGRlbGV0ZUFjdGlvbi5wYXJ0aWFsVGFibGUoc2VsZWN0ZWRDZWxscywgT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgICAuLi5zZWxlY3Rpb25EZXRhaWxzLFxuICAgICAgICAgICAgcm5nOiBvdGhlckNvbnRlbnRSbmdcbiAgICAgICAgICB9KSkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZU11bHRpVGFibGUgPSAoY2VsbFJuZywgc2VsZWN0aW9uRGV0YWlscywgcm5nLCBpc1Jvb3QpID0+IGdldFRhYmxlU2VsZWN0aW9ucyhjZWxsUm5nLCBzZWxlY3Rpb25EZXRhaWxzLCBybmcsIGlzUm9vdCkuYmluZCgoe3N0YXJ0LCBlbmR9KSA9PiB7XG4gICAgICBjb25zdCBzdGFydFRhYmxlU2VsZWN0ZWRDZWxscyA9IHN0YXJ0LmJpbmQoZ2V0U2VsZWN0ZWRDZWxscykuZ2V0T3IoW10pO1xuICAgICAgY29uc3QgZW5kVGFibGVTZWxlY3RlZENlbGxzID0gZW5kLmJpbmQoZ2V0U2VsZWN0ZWRDZWxscykuZ2V0T3IoW10pO1xuICAgICAgaWYgKHN0YXJ0VGFibGVTZWxlY3RlZENlbGxzLmxlbmd0aCA+IDAgJiYgZW5kVGFibGVTZWxlY3RlZENlbGxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3Qgb3RoZXJDb250ZW50Um5nID0gdW5zZWxlY3RDZWxscyhybmcsIHNlbGVjdGlvbkRldGFpbHMpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShkZWxldGVBY3Rpb24ubXVsdGlUYWJsZShzdGFydFRhYmxlU2VsZWN0ZWRDZWxscywgZW5kVGFibGVTZWxlY3RlZENlbGxzLCBvdGhlckNvbnRlbnRSbmcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0QWN0aW9uRnJvbVJhbmdlID0gKHJvb3QsIHJuZykgPT4ge1xuICAgICAgY29uc3QgaXNSb290ID0gaXNSb290RnJvbUVsZW1lbnQocm9vdCk7XG4gICAgICBjb25zdCBvcHRDZWxsUm5nID0gZ2V0Q2VsbFJuZyhybmcsIGlzUm9vdCk7XG4gICAgICBjb25zdCBzZWxlY3Rpb25EZXRhaWxzID0gZ2V0VGFibGVEZXRhaWxzRnJvbVJhbmdlKHJuZywgaXNSb290KTtcbiAgICAgIGlmIChpc1NpbmdsZUNlbGxUYWJsZUNvbnRlbnRTZWxlY3RlZChvcHRDZWxsUm5nLCBybmcsIGlzUm9vdCkpIHtcbiAgICAgICAgcmV0dXJuIG9wdENlbGxSbmcubWFwKGNlbGxSbmcgPT4gZGVsZXRlQWN0aW9uLnNpbmdsZUNlbGxUYWJsZShybmcsIGNlbGxSbmcuc3RhcnQpKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uRGV0YWlscy5pc011bHRpVGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZU11bHRpVGFibGUob3B0Q2VsbFJuZywgc2VsZWN0aW9uRGV0YWlscywgcm5nLCBpc1Jvb3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVNpbmdsZVRhYmxlKG9wdENlbGxSbmcsIHNlbGVjdGlvbkRldGFpbHMsIHJuZywgaXNSb290KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY2xlYW5DZWxscyA9IGNlbGxzID0+IGVhY2gkZShjZWxscywgY2VsbCA9PiB7XG4gICAgICByZW1vdmUkYShjZWxsLCAnY29udGVudGVkaXRhYmxlJyk7XG4gICAgICBmaWxsV2l0aFBhZGRpbmdCcihjZWxsKTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRPdXRzaWRlQmxvY2sgPSAoZWRpdG9yLCBjb250YWluZXIpID0+IE9wdGlvbmFsLmZyb20oZWRpdG9yLmRvbS5nZXRQYXJlbnQoY29udGFpbmVyLCBlZGl0b3IuZG9tLmlzQmxvY2spKS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIGNvbnN0IGhhbmRsZUVtcHR5QmxvY2sgPSAoZWRpdG9yLCBzdGFydEluVGFibGUsIGVtcHR5QmxvY2spID0+IHtcbiAgICAgIGVtcHR5QmxvY2suZWFjaChibG9jayA9PiB7XG4gICAgICAgIGlmIChzdGFydEluVGFibGUpIHtcbiAgICAgICAgICByZW1vdmUkNShibG9jayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsbFdpdGhQYWRkaW5nQnIoYmxvY2spO1xuICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Q3Vyc29yTG9jYXRpb24oYmxvY2suZG9tLCAwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBkZWxldGVDb250ZW50SW5zaWRlQ2VsbCA9IChlZGl0b3IsIGNlbGwsIHJuZywgaXNGaXJzdENlbGxJblNlbGVjdGlvbikgPT4ge1xuICAgICAgY29uc3QgaW5zaWRlVGFibGVSbmcgPSBybmcuY2xvbmVSYW5nZSgpO1xuICAgICAgaWYgKGlzRmlyc3RDZWxsSW5TZWxlY3Rpb24pIHtcbiAgICAgICAgaW5zaWRlVGFibGVSbmcuc2V0U3RhcnQocm5nLnN0YXJ0Q29udGFpbmVyLCBybmcuc3RhcnRPZmZzZXQpO1xuICAgICAgICBpbnNpZGVUYWJsZVJuZy5zZXRFbmRBZnRlcihjZWxsLmRvbS5sYXN0Q2hpbGQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5zaWRlVGFibGVSbmcuc2V0U3RhcnRCZWZvcmUoY2VsbC5kb20uZmlyc3RDaGlsZCk7XG4gICAgICAgIGluc2lkZVRhYmxlUm5nLnNldEVuZChybmcuZW5kQ29udGFpbmVyLCBybmcuZW5kT2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZUNlbGxDb250ZW50cyhlZGl0b3IsIGluc2lkZVRhYmxlUm5nLCBjZWxsLCBmYWxzZSkuZWFjaChhY3Rpb24gPT4gYWN0aW9uKCkpO1xuICAgIH07XG4gICAgY29uc3QgY29sbGFwc2VBbmRSZXN0b3JlQ2VsbFNlbGVjdGlvbiA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZENlbGxzID0gZ2V0Q2VsbHNGcm9tRWRpdG9yKGVkaXRvcik7XG4gICAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKSk7XG4gICAgICBpZiAoaXNUYWJsZUNlbGwkMyhzZWxlY3RlZE5vZGUuZG9tKSAmJiBpc0VtcHR5JDIoc2VsZWN0ZWROb2RlKSkge1xuICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldEN1cnNvckxvY2F0aW9uKHNlbGVjdGVkTm9kZS5kb20sIDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5jb2xsYXBzZSh0cnVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzZWxlY3RlZENlbGxzLmxlbmd0aCA+IDEgJiYgZXhpc3RzKHNlbGVjdGVkQ2VsbHMsIGNlbGwgPT4gZXEoY2VsbCwgc2VsZWN0ZWROb2RlKSkpIHtcbiAgICAgICAgc2V0JDMoc2VsZWN0ZWROb2RlLCAnZGF0YS1tY2Utc2VsZWN0ZWQnLCAnMScpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZW1wdHlTaW5nbGVUYWJsZUNlbGxzID0gKGVkaXRvciwgY2VsbHMsIG91dHNpZGVEZXRhaWxzKSA9PiBPcHRpb25hbC5zb21lKCgpID0+IHtcbiAgICAgIGNvbnN0IGVkaXRvclJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBjb25zdCBjZWxsc1RvQ2xlYW4gPSBvdXRzaWRlRGV0YWlscy5iaW5kKCh7cm5nLCBpc1N0YXJ0SW5UYWJsZX0pID0+IHtcbiAgICAgICAgY29uc3Qgb3V0c2lkZUJsb2NrID0gZ2V0T3V0c2lkZUJsb2NrKGVkaXRvciwgaXNTdGFydEluVGFibGUgPyBybmcuZW5kQ29udGFpbmVyIDogcm5nLnN0YXJ0Q29udGFpbmVyKTtcbiAgICAgICAgcm5nLmRlbGV0ZUNvbnRlbnRzKCk7XG4gICAgICAgIGhhbmRsZUVtcHR5QmxvY2soZWRpdG9yLCBpc1N0YXJ0SW5UYWJsZSwgb3V0c2lkZUJsb2NrLmZpbHRlcihpc0VtcHR5JDIpKTtcbiAgICAgICAgY29uc3QgZW5kUG9pbnRDZWxsID0gaXNTdGFydEluVGFibGUgPyBjZWxsc1swXSA6IGNlbGxzW2NlbGxzLmxlbmd0aCAtIDFdO1xuICAgICAgICBkZWxldGVDb250ZW50SW5zaWRlQ2VsbChlZGl0b3IsIGVuZFBvaW50Q2VsbCwgZWRpdG9yUm5nLCBpc1N0YXJ0SW5UYWJsZSk7XG4gICAgICAgIGlmICghaXNFbXB0eSQyKGVuZFBvaW50Q2VsbCkpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShpc1N0YXJ0SW5UYWJsZSA/IGNlbGxzLnNsaWNlKDEpIDogY2VsbHMuc2xpY2UoMCwgLTEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9KS5nZXRPcihjZWxscyk7XG4gICAgICBjbGVhbkNlbGxzKGNlbGxzVG9DbGVhbik7XG4gICAgICBjb2xsYXBzZUFuZFJlc3RvcmVDZWxsU2VsZWN0aW9uKGVkaXRvcik7XG4gICAgfSk7XG4gICAgY29uc3QgZW1wdHlNdWx0aVRhYmxlQ2VsbHMgPSAoZWRpdG9yLCBzdGFydFRhYmxlQ2VsbHMsIGVuZFRhYmxlQ2VsbHMsIGJldHdlZW5SbmcpID0+IE9wdGlvbmFsLnNvbWUoKCkgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IHN0YXJ0VGFibGVDZWxsc1swXTtcbiAgICAgIGNvbnN0IGVuZENlbGwgPSBlbmRUYWJsZUNlbGxzW2VuZFRhYmxlQ2VsbHMubGVuZ3RoIC0gMV07XG4gICAgICBkZWxldGVDb250ZW50SW5zaWRlQ2VsbChlZGl0b3IsIHN0YXJ0Q2VsbCwgcm5nLCB0cnVlKTtcbiAgICAgIGRlbGV0ZUNvbnRlbnRJbnNpZGVDZWxsKGVkaXRvciwgZW5kQ2VsbCwgcm5nLCBmYWxzZSk7XG4gICAgICBjb25zdCBzdGFydFRhYmxlQ2VsbHNUb0NsZWFuID0gaXNFbXB0eSQyKHN0YXJ0Q2VsbCkgPyBzdGFydFRhYmxlQ2VsbHMgOiBzdGFydFRhYmxlQ2VsbHMuc2xpY2UoMSk7XG4gICAgICBjb25zdCBlbmRUYWJsZUNlbGxzVG9DbGVhbiA9IGlzRW1wdHkkMihlbmRDZWxsKSA/IGVuZFRhYmxlQ2VsbHMgOiBlbmRUYWJsZUNlbGxzLnNsaWNlKDAsIC0xKTtcbiAgICAgIGNsZWFuQ2VsbHMoc3RhcnRUYWJsZUNlbGxzVG9DbGVhbi5jb25jYXQoZW5kVGFibGVDZWxsc1RvQ2xlYW4pKTtcbiAgICAgIGJldHdlZW5SbmcuZGVsZXRlQ29udGVudHMoKTtcbiAgICAgIGNvbGxhcHNlQW5kUmVzdG9yZUNlbGxTZWxlY3Rpb24oZWRpdG9yKTtcbiAgICB9KTtcbiAgICBjb25zdCBkZWxldGVDZWxsQ29udGVudHMgPSAoZWRpdG9yLCBybmcsIGNlbGwsIG1vdmVTZWxlY3Rpb24gPSB0cnVlKSA9PiBPcHRpb25hbC5zb21lKCgpID0+IHtcbiAgICAgIGRlbGV0ZVJhbmdlQ29udGVudHMoZWRpdG9yLCBybmcsIGNlbGwsIG1vdmVTZWxlY3Rpb24pO1xuICAgIH0pO1xuICAgIGNvbnN0IGRlbGV0ZVRhYmxlRWxlbWVudCA9IChlZGl0b3IsIHRhYmxlKSA9PiBPcHRpb25hbC5zb21lKCgpID0+IGRlbGV0ZUVsZW1lbnQkMihlZGl0b3IsIGZhbHNlLCB0YWJsZSkpO1xuICAgIGNvbnN0IGRlbGV0ZUNlbGxSYW5nZSA9IChlZGl0b3IsIHJvb3RFbG0sIHJuZykgPT4gZ2V0QWN0aW9uRnJvbVJhbmdlKHJvb3RFbG0sIHJuZykuYmluZChhY3Rpb24gPT4gYWN0aW9uLmZvbGQoY3VycnkoZGVsZXRlQ2VsbENvbnRlbnRzLCBlZGl0b3IpLCBjdXJyeShkZWxldGVUYWJsZUVsZW1lbnQsIGVkaXRvciksIGN1cnJ5KGVtcHR5U2luZ2xlVGFibGVDZWxscywgZWRpdG9yKSwgY3VycnkoZW1wdHlNdWx0aVRhYmxlQ2VsbHMsIGVkaXRvcikpKTtcbiAgICBjb25zdCBkZWxldGVDYXB0aW9uUmFuZ2UgPSAoZWRpdG9yLCBjYXB0aW9uKSA9PiBlbXB0eUVsZW1lbnQoZWRpdG9yLCBjYXB0aW9uKTtcbiAgICBjb25zdCBkZWxldGVUYWJsZVJhbmdlID0gKGVkaXRvciwgcm9vdEVsbSwgcm5nLCBzdGFydEVsbSkgPT4gZ2V0UGFyZW50Q2FwdGlvbihyb290RWxtLCBzdGFydEVsbSkuZm9sZCgoKSA9PiBkZWxldGVDZWxsUmFuZ2UoZWRpdG9yLCByb290RWxtLCBybmcpLCBjYXB0aW9uID0+IGRlbGV0ZUNhcHRpb25SYW5nZShlZGl0b3IsIGNhcHRpb24pKTtcbiAgICBjb25zdCBkZWxldGVSYW5nZSQzID0gKGVkaXRvciwgc3RhcnRFbG0sIHNlbGVjdGVkQ2VsbHMpID0+IHtcbiAgICAgIGNvbnN0IHJvb3ROb2RlID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgcmV0dXJuIHNlbGVjdGVkQ2VsbHMubGVuZ3RoICE9PSAwID8gZW1wdHlTaW5nbGVUYWJsZUNlbGxzKGVkaXRvciwgc2VsZWN0ZWRDZWxscywgT3B0aW9uYWwubm9uZSgpKSA6IGRlbGV0ZVRhYmxlUmFuZ2UoZWRpdG9yLCByb290Tm9kZSwgcm5nLCBzdGFydEVsbSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRQYXJlbnRDZWxsID0gKHJvb3RFbG0sIGVsbSkgPT4gZmluZCQyKHBhcmVudHNBbmRTZWxmKGVsbSwgcm9vdEVsbSksIGlzVGFibGVDZWxsJDIpO1xuICAgIGNvbnN0IGdldFBhcmVudENhcHRpb24gPSAocm9vdEVsbSwgZWxtKSA9PiBmaW5kJDIocGFyZW50c0FuZFNlbGYoZWxtLCByb290RWxtKSwgaXNUYWcoJ2NhcHRpb24nKSk7XG4gICAgY29uc3QgZGVsZXRlQmV0d2VlbkNlbGxzID0gKGVkaXRvciwgcm9vdEVsbSwgZm9yd2FyZCwgZnJvbUNlbGwsIGZyb20pID0+IG5hdmlnYXRlKGZvcndhcmQsIGVkaXRvci5nZXRCb2R5KCksIGZyb20pLmJpbmQodG8gPT4gZ2V0UGFyZW50Q2VsbChyb290RWxtLCBTdWdhckVsZW1lbnQuZnJvbURvbSh0by5nZXROb2RlKCkpKS5iaW5kKHRvQ2VsbCA9PiBlcSh0b0NlbGwsIGZyb21DZWxsKSA/IE9wdGlvbmFsLm5vbmUoKSA6IE9wdGlvbmFsLnNvbWUobm9vcCkpKTtcbiAgICBjb25zdCBlbXB0eUVsZW1lbnQgPSAoZWRpdG9yLCBlbG0pID0+IE9wdGlvbmFsLnNvbWUoKCkgPT4ge1xuICAgICAgZmlsbFdpdGhQYWRkaW5nQnIoZWxtKTtcbiAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Q3Vyc29yTG9jYXRpb24oZWxtLmRvbSwgMCk7XG4gICAgfSk7XG4gICAgY29uc3QgaXNEZWxldGVPZkxhc3RDaGFyUG9zID0gKGZyb21DYXB0aW9uLCBmb3J3YXJkLCBmcm9tLCB0bykgPT4gZmlyc3RQb3NpdGlvbkluKGZyb21DYXB0aW9uLmRvbSkuYmluZChmaXJzdCA9PiBsYXN0UG9zaXRpb25Jbihmcm9tQ2FwdGlvbi5kb20pLm1hcChsYXN0ID0+IGZvcndhcmQgPyBmcm9tLmlzRXF1YWwoZmlyc3QpICYmIHRvLmlzRXF1YWwobGFzdCkgOiBmcm9tLmlzRXF1YWwobGFzdCkgJiYgdG8uaXNFcXVhbChmaXJzdCkpKS5nZXRPcih0cnVlKTtcbiAgICBjb25zdCBlbXB0eUNhcmV0Q2FwdGlvbiA9IChlZGl0b3IsIGVsbSkgPT4gZW1wdHlFbGVtZW50KGVkaXRvciwgZWxtKTtcbiAgICBjb25zdCB2YWxpZGF0ZUNhcmV0Q2FwdGlvbiA9IChyb290RWxtLCBmcm9tQ2FwdGlvbiwgdG8pID0+IGdldFBhcmVudENhcHRpb24ocm9vdEVsbSwgU3VnYXJFbGVtZW50LmZyb21Eb20odG8uZ2V0Tm9kZSgpKSkuZm9sZCgoKSA9PiBPcHRpb25hbC5zb21lKG5vb3ApLCB0b0NhcHRpb24gPT4gc29tZUlmKCFlcSh0b0NhcHRpb24sIGZyb21DYXB0aW9uKSwgbm9vcCkpO1xuICAgIGNvbnN0IGRlbGV0ZUNhcmV0SW5zaWRlQ2FwdGlvbiA9IChlZGl0b3IsIHJvb3RFbG0sIGZvcndhcmQsIGZyb21DYXB0aW9uLCBmcm9tKSA9PiBuYXZpZ2F0ZShmb3J3YXJkLCBlZGl0b3IuZ2V0Qm9keSgpLCBmcm9tKS5mb2xkKCgpID0+IE9wdGlvbmFsLnNvbWUobm9vcCksIHRvID0+IGlzRGVsZXRlT2ZMYXN0Q2hhclBvcyhmcm9tQ2FwdGlvbiwgZm9yd2FyZCwgZnJvbSwgdG8pID8gZW1wdHlDYXJldENhcHRpb24oZWRpdG9yLCBmcm9tQ2FwdGlvbikgOiB2YWxpZGF0ZUNhcmV0Q2FwdGlvbihyb290RWxtLCBmcm9tQ2FwdGlvbiwgdG8pKTtcbiAgICBjb25zdCBkZWxldGVDYXJldENlbGxzID0gKGVkaXRvciwgZm9yd2FyZCwgcm9vdEVsbSwgc3RhcnRFbG0pID0+IHtcbiAgICAgIGNvbnN0IGZyb20gPSBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpO1xuICAgICAgcmV0dXJuIGdldFBhcmVudENlbGwocm9vdEVsbSwgc3RhcnRFbG0pLmJpbmQoZnJvbUNlbGwgPT4gaXNFbXB0eSQyKGZyb21DZWxsKSA/IGVtcHR5RWxlbWVudChlZGl0b3IsIGZyb21DZWxsKSA6IGRlbGV0ZUJldHdlZW5DZWxscyhlZGl0b3IsIHJvb3RFbG0sIGZvcndhcmQsIGZyb21DZWxsLCBmcm9tKSk7XG4gICAgfTtcbiAgICBjb25zdCBkZWxldGVDYXJldENhcHRpb24gPSAoZWRpdG9yLCBmb3J3YXJkLCByb290RWxtLCBmcm9tQ2FwdGlvbikgPT4ge1xuICAgICAgY29uc3QgZnJvbSA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQoZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSk7XG4gICAgICByZXR1cm4gaXNFbXB0eSQyKGZyb21DYXB0aW9uKSA/IGVtcHR5RWxlbWVudChlZGl0b3IsIGZyb21DYXB0aW9uKSA6IGRlbGV0ZUNhcmV0SW5zaWRlQ2FwdGlvbihlZGl0b3IsIHJvb3RFbG0sIGZvcndhcmQsIGZyb21DYXB0aW9uLCBmcm9tKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzTmVhclRhYmxlID0gKGZvcndhcmQsIHBvcykgPT4gZm9yd2FyZCA/IGlzQmVmb3JlVGFibGUocG9zKSA6IGlzQWZ0ZXJUYWJsZShwb3MpO1xuICAgIGNvbnN0IGlzQmVmb3JlT3JBZnRlclRhYmxlID0gKGVkaXRvciwgZm9yd2FyZCkgPT4ge1xuICAgICAgY29uc3QgZnJvbVBvcyA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQoZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSk7XG4gICAgICByZXR1cm4gaXNOZWFyVGFibGUoZm9yd2FyZCwgZnJvbVBvcykgfHwgZnJvbVBvc2l0aW9uKGZvcndhcmQsIGVkaXRvci5nZXRCb2R5KCksIGZyb21Qb3MpLmV4aXN0cyhwb3MgPT4gaXNOZWFyVGFibGUoZm9yd2FyZCwgcG9zKSk7XG4gICAgfTtcbiAgICBjb25zdCBkZWxldGVDYXJldCQzID0gKGVkaXRvciwgZm9yd2FyZCwgc3RhcnRFbG0pID0+IHtcbiAgICAgIGNvbnN0IHJvb3RFbG0gPSBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKTtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRDYXB0aW9uKHJvb3RFbG0sIHN0YXJ0RWxtKS5mb2xkKCgpID0+IGRlbGV0ZUNhcmV0Q2VsbHMoZWRpdG9yLCBmb3J3YXJkLCByb290RWxtLCBzdGFydEVsbSkub3JUaHVuaygoKSA9PiBzb21lSWYoaXNCZWZvcmVPckFmdGVyVGFibGUoZWRpdG9yLCBmb3J3YXJkKSwgbm9vcCkpLCBmcm9tQ2FwdGlvbiA9PiBkZWxldGVDYXJldENhcHRpb24oZWRpdG9yLCBmb3J3YXJkLCByb290RWxtLCBmcm9tQ2FwdGlvbikpO1xuICAgIH07XG4gICAgY29uc3QgYmFja3NwYWNlRGVsZXRlJGEgPSAoZWRpdG9yLCBmb3J3YXJkKSA9PiB7XG4gICAgICBjb25zdCBzdGFydEVsbSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5zZWxlY3Rpb24uZ2V0U3RhcnQodHJ1ZSkpO1xuICAgICAgY29uc3QgY2VsbHMgPSBnZXRDZWxsc0Zyb21FZGl0b3IoZWRpdG9yKTtcbiAgICAgIHJldHVybiBlZGl0b3Iuc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkgJiYgY2VsbHMubGVuZ3RoID09PSAwID8gZGVsZXRlQ2FyZXQkMyhlZGl0b3IsIGZvcndhcmQsIHN0YXJ0RWxtKSA6IGRlbGV0ZVJhbmdlJDMoZWRpdG9yLCBzdGFydEVsbSwgY2VsbHMpO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRDb250ZW50RWRpdGFibGVSb290JDEgPSAocm9vdCwgbm9kZSkgPT4ge1xuICAgICAgbGV0IHRlbXBOb2RlID0gbm9kZTtcbiAgICAgIHdoaWxlICh0ZW1wTm9kZSAmJiB0ZW1wTm9kZSAhPT0gcm9vdCkge1xuICAgICAgICBpZiAoaXNDb250ZW50RWRpdGFibGVUcnVlJDModGVtcE5vZGUpIHx8IGlzQ29udGVudEVkaXRhYmxlRmFsc2UkYih0ZW1wTm9kZSkpIHtcbiAgICAgICAgICByZXR1cm4gdGVtcE5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgdGVtcE5vZGUgPSB0ZW1wTm9kZS5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIGNvbnN0IGludGVybmFsQXR0cmlidXRlc1ByZWZpeGVzID0gW1xuICAgICAgJ2RhdGEtZXBob3gtJyxcbiAgICAgICdkYXRhLW1jZS0nLFxuICAgICAgJ2RhdGEtYWxsb3ktJyxcbiAgICAgICdkYXRhLXNub29rZXItJyxcbiAgICAgICdfJ1xuICAgIF07XG4gICAgY29uc3QgZWFjaCQ5ID0gVG9vbHMuZWFjaDtcbiAgICBjb25zdCBFbGVtZW50VXRpbHMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IGludGVybmFsQXR0cmlidXRlcyA9IG5ldyBTZXQoZWRpdG9yLnNlcmlhbGl6ZXIuZ2V0VGVtcEF0dHJzKCkpO1xuICAgICAgY29uc3QgY29tcGFyZSA9IChub2RlMSwgbm9kZTIpID0+IHtcbiAgICAgICAgaWYgKG5vZGUxLm5vZGVOYW1lICE9PSBub2RlMi5ub2RlTmFtZSB8fCBub2RlMS5ub2RlVHlwZSAhPT0gbm9kZTIubm9kZVR5cGUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ2V0QXR0cmlicyA9IG5vZGUgPT4ge1xuICAgICAgICAgIGNvbnN0IGF0dHJpYnMgPSB7fTtcbiAgICAgICAgICBlYWNoJDkoZG9tLmdldEF0dHJpYnMobm9kZSksIGF0dHIgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGF0dHIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChuYW1lICE9PSAnc3R5bGUnICYmICFpc0F0dHJpYnV0ZUludGVybmFsKG5hbWUpKSB7XG4gICAgICAgICAgICAgIGF0dHJpYnNbbmFtZV0gPSBkb20uZ2V0QXR0cmliKG5vZGUsIG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBhdHRyaWJzO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjb21wYXJlT2JqZWN0cyA9IChvYmoxLCBvYmoyKSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIG9iajEpIHtcbiAgICAgICAgICAgIGlmIChoYXMkMihvYmoxLCBuYW1lKSkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG9iajJbbmFtZV07XG4gICAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKG9iajFbbmFtZV0gIT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRlbGV0ZSBvYmoyW25hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gb2JqMikge1xuICAgICAgICAgICAgaWYgKGhhcyQyKG9iajIsIG5hbWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChpc0VsZW1lbnQkNihub2RlMSkgJiYgaXNFbGVtZW50JDYobm9kZTIpKSB7XG4gICAgICAgICAgaWYgKCFjb21wYXJlT2JqZWN0cyhnZXRBdHRyaWJzKG5vZGUxKSwgZ2V0QXR0cmlicyhub2RlMikpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghY29tcGFyZU9iamVjdHMoZG9tLnBhcnNlU3R5bGUoZG9tLmdldEF0dHJpYihub2RlMSwgJ3N0eWxlJykpLCBkb20ucGFyc2VTdHlsZShkb20uZ2V0QXR0cmliKG5vZGUyLCAnc3R5bGUnKSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhaXNCb29rbWFya05vZGUkMShub2RlMSkgJiYgIWlzQm9va21hcmtOb2RlJDEobm9kZTIpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzQXR0cmlidXRlSW50ZXJuYWwgPSBhdHRyaWJ1dGVOYW1lID0+IGV4aXN0cyhpbnRlcm5hbEF0dHJpYnV0ZXNQcmVmaXhlcywgdmFsdWUgPT4gc3RhcnRzV2l0aChhdHRyaWJ1dGVOYW1lLCB2YWx1ZSkpIHx8IGludGVybmFsQXR0cmlidXRlcy5oYXMoYXR0cmlidXRlTmFtZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21wYXJlLFxuICAgICAgICBpc0F0dHJpYnV0ZUludGVybmFsXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCB0cmF2ZXJzZSA9IChyb290LCBmbikgPT4ge1xuICAgICAgbGV0IG5vZGUgPSByb290O1xuICAgICAgd2hpbGUgKG5vZGUgPSBub2RlLndhbGsoKSkge1xuICAgICAgICBmbihub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1hdGNoTm9kZSQxID0gKG5vZGVGaWx0ZXJzLCBhdHRyaWJ1dGVGaWx0ZXJzLCBub2RlLCBtYXRjaGVzKSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gbm9kZS5uYW1lO1xuICAgICAgZm9yIChsZXQgbmkgPSAwLCBubCA9IG5vZGVGaWx0ZXJzLmxlbmd0aDsgbmkgPCBubDsgbmkrKykge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBub2RlRmlsdGVyc1tuaV07XG4gICAgICAgIGlmIChmaWx0ZXIubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgIGNvbnN0IG1hdGNoID0gbWF0Y2hlcy5ub2Rlc1tuYW1lXTtcbiAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIG1hdGNoLm5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1hdGNoZXMubm9kZXNbbmFtZV0gPSB7XG4gICAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgICAgbm9kZXM6IFtub2RlXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgZm9yIChsZXQgYWkgPSAwLCBhbCA9IGF0dHJpYnV0ZUZpbHRlcnMubGVuZ3RoOyBhaSA8IGFsOyBhaSsrKSB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyID0gYXR0cmlidXRlRmlsdGVyc1thaV07XG4gICAgICAgICAgY29uc3QgYXR0ck5hbWUgPSBmaWx0ZXIubmFtZTtcbiAgICAgICAgICBpZiAoYXR0ck5hbWUgaW4gbm9kZS5hdHRyaWJ1dGVzLm1hcCkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBtYXRjaGVzLmF0dHJpYnV0ZXNbYXR0ck5hbWVdO1xuICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgIG1hdGNoLm5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXRjaGVzLmF0dHJpYnV0ZXNbYXR0ck5hbWVdID0ge1xuICAgICAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgICAgICBub2RlczogW25vZGVdXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBmaW5kTWF0Y2hpbmdOb2RlcyA9IChub2RlRmlsdGVycywgYXR0cmlidXRlRmlsdGVycywgbm9kZSkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IHtcbiAgICAgICAgbm9kZXM6IHt9LFxuICAgICAgICBhdHRyaWJ1dGVzOiB7fVxuICAgICAgfTtcbiAgICAgIGlmIChub2RlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgdHJhdmVyc2Uobm9kZSwgY2hpbGROb2RlID0+IHtcbiAgICAgICAgICBtYXRjaE5vZGUkMShub2RlRmlsdGVycywgYXR0cmlidXRlRmlsdGVycywgY2hpbGROb2RlLCBtYXRjaGVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWF0Y2hlcztcbiAgICB9O1xuICAgIGNvbnN0IHJ1bkZpbHRlcnMgPSAobWF0Y2hlcywgYXJncykgPT4ge1xuICAgICAgY29uc3QgcnVuID0gKG1hdGNoUmVjb3JkLCBmaWx0ZXJpbmdBdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGVhY2gkZChtYXRjaFJlY29yZCwgbWF0Y2ggPT4ge1xuICAgICAgICAgIGNvbnN0IG5vZGVzID0gZnJvbShtYXRjaC5ub2Rlcyk7XG4gICAgICAgICAgZWFjaCRlKG1hdGNoLmZpbHRlci5jYWxsYmFja3MsIGNhbGxiYWNrID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBub2Rlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlTWF0Y2hlcyA9IGZpbHRlcmluZ0F0dHJpYnV0ZXMgPyBub2RlLmF0dHIobWF0Y2guZmlsdGVyLm5hbWUpICE9PSB1bmRlZmluZWQgOiBub2RlLm5hbWUgPT09IG1hdGNoLmZpbHRlci5uYW1lO1xuICAgICAgICAgICAgICBpZiAoIXZhbHVlTWF0Y2hlcyB8fCBpc051bGxhYmxlKG5vZGUucGFyZW50KSkge1xuICAgICAgICAgICAgICAgIG5vZGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2sobm9kZXMsIG1hdGNoLmZpbHRlci5uYW1lLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgcnVuKG1hdGNoZXMubm9kZXMsIGZhbHNlKTtcbiAgICAgIHJ1bihtYXRjaGVzLmF0dHJpYnV0ZXMsIHRydWUpO1xuICAgIH07XG4gICAgY29uc3QgZmlsdGVyJDIgPSAobm9kZUZpbHRlcnMsIGF0dHJpYnV0ZUZpbHRlcnMsIG5vZGUsIGFyZ3MgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGZpbmRNYXRjaGluZ05vZGVzKG5vZGVGaWx0ZXJzLCBhdHRyaWJ1dGVGaWx0ZXJzLCBub2RlKTtcbiAgICAgIHJ1bkZpbHRlcnMobWF0Y2hlcywgYXJncyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHBhZGRFbXB0eU5vZGUgPSAoc2V0dGluZ3MsIGFyZ3MsIGlzQmxvY2ssIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IGJyUHJlZmVycmVkID0gc2V0dGluZ3MucGFkX2VtcHR5X3dpdGhfYnIgfHwgYXJncy5pbnNlcnQ7XG4gICAgICBpZiAoYnJQcmVmZXJyZWQgJiYgaXNCbG9jayhub2RlKSkge1xuICAgICAgICBjb25zdCBhc3ROb2RlID0gbmV3IEFzdE5vZGUoJ2JyJywgMSk7XG4gICAgICAgIGlmIChhcmdzLmluc2VydCkge1xuICAgICAgICAgIGFzdE5vZGUuYXR0cignZGF0YS1tY2UtYm9ndXMnLCAnMScpO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUuZW1wdHkoKS5hcHBlbmQoYXN0Tm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLmVtcHR5KCkuYXBwZW5kKG5ldyBBc3ROb2RlKCcjdGV4dCcsIDMpKS52YWx1ZSA9IG5ic3A7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc1BhZGRlZFdpdGhOYnNwID0gbm9kZSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICByZXR1cm4gaGFzT25seUNoaWxkKG5vZGUsICcjdGV4dCcpICYmICgoX2EgPSBub2RlID09PSBudWxsIHx8IG5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG5vZGUuZmlyc3RDaGlsZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSA9PT0gbmJzcDtcbiAgICB9O1xuICAgIGNvbnN0IGhhc09ubHlDaGlsZCA9IChub2RlLCBuYW1lKSA9PiB7XG4gICAgICBjb25zdCBmaXJzdENoaWxkID0gbm9kZSA9PT0gbnVsbCB8fCBub2RlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgICByZXR1cm4gaXNOb25OdWxsYWJsZShmaXJzdENoaWxkKSAmJiBmaXJzdENoaWxkID09PSBub2RlLmxhc3RDaGlsZCAmJiBmaXJzdENoaWxkLm5hbWUgPT09IG5hbWU7XG4gICAgfTtcbiAgICBjb25zdCBpc1BhZGRlZCA9IChzY2hlbWEsIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHJ1bGUgPSBzY2hlbWEuZ2V0RWxlbWVudFJ1bGUobm9kZS5uYW1lKTtcbiAgICAgIHJldHVybiAocnVsZSA9PT0gbnVsbCB8fCBydWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBydWxlLnBhZGRFbXB0eSkgPT09IHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBpc0VtcHR5ID0gKHNjaGVtYSwgbm9uRW1wdHlFbGVtZW50cywgd2hpdGVzcGFjZUVsZW1lbnRzLCBub2RlKSA9PiBub2RlLmlzRW1wdHkobm9uRW1wdHlFbGVtZW50cywgd2hpdGVzcGFjZUVsZW1lbnRzLCBub2RlID0+IGlzUGFkZGVkKHNjaGVtYSwgbm9kZSkpO1xuICAgIGNvbnN0IGlzTGluZUJyZWFrTm9kZSA9IChub2RlLCBpc0Jsb2NrKSA9PiBpc05vbk51bGxhYmxlKG5vZGUpICYmIChpc0Jsb2NrKG5vZGUpIHx8IG5vZGUubmFtZSA9PT0gJ2JyJyk7XG4gICAgY29uc3QgZmluZENsb3Nlc3RFZGl0aW5nSG9zdCA9IHNjb3BlID0+IHtcbiAgICAgIGxldCBlZGl0YWJsZU5vZGU7XG4gICAgICBmb3IgKGxldCBub2RlID0gc2NvcGU7IG5vZGU7IG5vZGUgPSBub2RlLnBhcmVudCkge1xuICAgICAgICBjb25zdCBjb250ZW50RWRpdGFibGUgPSBub2RlLmF0dHIoJ2NvbnRlbnRlZGl0YWJsZScpO1xuICAgICAgICBpZiAoY29udGVudEVkaXRhYmxlID09PSAnZmFsc2UnKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpIHtcbiAgICAgICAgICBlZGl0YWJsZU5vZGUgPSBub2RlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShlZGl0YWJsZU5vZGUpO1xuICAgIH07XG5cbiAgICBjb25zdCByZW1vdmVPclVud3JhcEludmFsaWROb2RlID0gKG5vZGUsIHNjaGVtYSwgb3JpZ2luYWxOb2RlUGFyZW50ID0gbm9kZS5wYXJlbnQpID0+IHtcbiAgICAgIGlmIChzY2hlbWEuZ2V0U3BlY2lhbEVsZW1lbnRzKClbbm9kZS5uYW1lXSkge1xuICAgICAgICBub2RlLmVtcHR5KCkucmVtb3ZlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4oKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZE5vZGUgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAob3JpZ2luYWxOb2RlUGFyZW50ICYmICFzY2hlbWEuaXNWYWxpZENoaWxkKG9yaWdpbmFsTm9kZVBhcmVudC5uYW1lLCBjaGlsZE5vZGUubmFtZSkpIHtcbiAgICAgICAgICAgIHJlbW92ZU9yVW53cmFwSW52YWxpZE5vZGUoY2hpbGROb2RlLCBzY2hlbWEsIG9yaWdpbmFsTm9kZVBhcmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5vZGUudW53cmFwKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjbGVhbkludmFsaWROb2RlcyA9IChub2Rlcywgc2NoZW1hLCByb290Tm9kZSwgb25DcmVhdGUgPSBub29wKSA9PiB7XG4gICAgICBjb25zdCB0ZXh0QmxvY2tFbGVtZW50cyA9IHNjaGVtYS5nZXRUZXh0QmxvY2tFbGVtZW50cygpO1xuICAgICAgY29uc3Qgbm9uRW1wdHlFbGVtZW50cyA9IHNjaGVtYS5nZXROb25FbXB0eUVsZW1lbnRzKCk7XG4gICAgICBjb25zdCB3aGl0ZXNwYWNlRWxlbWVudHMgPSBzY2hlbWEuZ2V0V2hpdGVzcGFjZUVsZW1lbnRzKCk7XG4gICAgICBjb25zdCBub25TcGxpdHRhYmxlRWxlbWVudHMgPSBUb29scy5tYWtlTWFwKCd0cix0ZCx0aCx0Ym9keSx0aGVhZCx0Zm9vdCx0YWJsZSxzdW1tYXJ5Jyk7XG4gICAgICBjb25zdCBmaXhlZCA9IG5ldyBTZXQoKTtcbiAgICAgIGNvbnN0IGlzU3BsaXR0YWJsZUVsZW1lbnQgPSBub2RlID0+IG5vZGUgIT09IHJvb3ROb2RlICYmICFub25TcGxpdHRhYmxlRWxlbWVudHNbbm9kZS5uYW1lXTtcbiAgICAgIGZvciAobGV0IG5pID0gMDsgbmkgPCBub2Rlcy5sZW5ndGg7IG5pKyspIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW25pXTtcbiAgICAgICAgbGV0IHBhcmVudDtcbiAgICAgICAgbGV0IG5ld1BhcmVudDtcbiAgICAgICAgbGV0IHRlbXBOb2RlO1xuICAgICAgICBpZiAoIW5vZGUucGFyZW50IHx8IGZpeGVkLmhhcyhub2RlKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ZXh0QmxvY2tFbGVtZW50c1tub2RlLm5hbWVdICYmIG5vZGUucGFyZW50Lm5hbWUgPT09ICdsaScpIHtcbiAgICAgICAgICBsZXQgc2libGluZyA9IG5vZGUubmV4dDtcbiAgICAgICAgICB3aGlsZSAoc2libGluZykge1xuICAgICAgICAgICAgaWYgKHRleHRCbG9ja0VsZW1lbnRzW3NpYmxpbmcubmFtZV0pIHtcbiAgICAgICAgICAgICAgc2libGluZy5uYW1lID0gJ2xpJztcbiAgICAgICAgICAgICAgZml4ZWQuYWRkKHNpYmxpbmcpO1xuICAgICAgICAgICAgICBub2RlLnBhcmVudC5pbnNlcnQoc2libGluZywgbm9kZS5wYXJlbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaWJsaW5nID0gc2libGluZy5uZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBub2RlLnVud3JhcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBbbm9kZV07XG4gICAgICAgIGZvciAocGFyZW50ID0gbm9kZS5wYXJlbnQ7IHBhcmVudCAmJiAhc2NoZW1hLmlzVmFsaWRDaGlsZChwYXJlbnQubmFtZSwgbm9kZS5uYW1lKSAmJiBpc1NwbGl0dGFibGVFbGVtZW50KHBhcmVudCk7IHBhcmVudCA9IHBhcmVudC5wYXJlbnQpIHtcbiAgICAgICAgICBwYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGlmIChzY2hlbWEuaXNWYWxpZENoaWxkKHBhcmVudC5uYW1lLCBub2RlLm5hbWUpKSB7XG4gICAgICAgICAgICBwYXJlbnRzLnJldmVyc2UoKTtcbiAgICAgICAgICAgIG5ld1BhcmVudCA9IHBhcmVudHNbMF0uY2xvbmUoKTtcbiAgICAgICAgICAgIG9uQ3JlYXRlKG5ld1BhcmVudCk7XG4gICAgICAgICAgICBsZXQgY3VycmVudE5vZGUgPSBuZXdQYXJlbnQ7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICAgIGlmIChzY2hlbWEuaXNWYWxpZENoaWxkKGN1cnJlbnROb2RlLm5hbWUsIHBhcmVudHNbaV0ubmFtZSkgJiYgaSA+IDApIHtcbiAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IHBhcmVudHNbaV0uY2xvbmUoKTtcbiAgICAgICAgICAgICAgICBvbkNyZWF0ZSh0ZW1wTm9kZSk7XG4gICAgICAgICAgICAgICAgY3VycmVudE5vZGUuYXBwZW5kKHRlbXBOb2RlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IGN1cnJlbnROb2RlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGZvciAobGV0IGNoaWxkTm9kZSA9IHBhcmVudHNbaV0uZmlyc3RDaGlsZDsgY2hpbGROb2RlICYmIGNoaWxkTm9kZSAhPT0gcGFyZW50c1tpICsgMV07KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dE5vZGUgPSBjaGlsZE5vZGUubmV4dDtcbiAgICAgICAgICAgICAgICB0ZW1wTm9kZS5hcHBlbmQoY2hpbGROb2RlKTtcbiAgICAgICAgICAgICAgICBjaGlsZE5vZGUgPSBuZXh0Tm9kZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjdXJyZW50Tm9kZSA9IHRlbXBOb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0VtcHR5KHNjaGVtYSwgbm9uRW1wdHlFbGVtZW50cywgd2hpdGVzcGFjZUVsZW1lbnRzLCBuZXdQYXJlbnQpKSB7XG4gICAgICAgICAgICAgIHBhcmVudC5pbnNlcnQobmV3UGFyZW50LCBwYXJlbnRzWzBdLCB0cnVlKTtcbiAgICAgICAgICAgICAgcGFyZW50Lmluc2VydChub2RlLCBuZXdQYXJlbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGFyZW50Lmluc2VydChub2RlLCBwYXJlbnRzWzBdLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudHNbMF07XG4gICAgICAgICAgICBpZiAoaXNFbXB0eShzY2hlbWEsIG5vbkVtcHR5RWxlbWVudHMsIHdoaXRlc3BhY2VFbGVtZW50cywgcGFyZW50KSB8fCBoYXNPbmx5Q2hpbGQocGFyZW50LCAnYnInKSkge1xuICAgICAgICAgICAgICBwYXJlbnQuZW1wdHkoKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVtb3ZlT3JVbndyYXBJbnZhbGlkTm9kZShub2RlLCBzY2hlbWEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChub2RlLnBhcmVudCkge1xuICAgICAgICAgIGlmIChub2RlLm5hbWUgPT09ICdsaScpIHtcbiAgICAgICAgICAgIGxldCBzaWJsaW5nID0gbm9kZS5wcmV2O1xuICAgICAgICAgICAgaWYgKHNpYmxpbmcgJiYgKHNpYmxpbmcubmFtZSA9PT0gJ3VsJyB8fCBzaWJsaW5nLm5hbWUgPT09ICdvbCcpKSB7XG4gICAgICAgICAgICAgIHNpYmxpbmcuYXBwZW5kKG5vZGUpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNpYmxpbmcgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICBpZiAoc2libGluZyAmJiAoc2libGluZy5uYW1lID09PSAndWwnIHx8IHNpYmxpbmcubmFtZSA9PT0gJ29sJykgJiYgc2libGluZy5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgIHNpYmxpbmcuaW5zZXJ0KG5vZGUsIHNpYmxpbmcuZmlyc3RDaGlsZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgd3JhcHBlciA9IG5ldyBBc3ROb2RlKCd1bCcsIDEpO1xuICAgICAgICAgICAgb25DcmVhdGUod3JhcHBlcik7XG4gICAgICAgICAgICBub2RlLndyYXAod3JhcHBlcik7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNjaGVtYS5pc1ZhbGlkQ2hpbGQobm9kZS5wYXJlbnQubmFtZSwgJ2RpdicpICYmIHNjaGVtYS5pc1ZhbGlkQ2hpbGQoJ2RpdicsIG5vZGUubmFtZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZXIgPSBuZXcgQXN0Tm9kZSgnZGl2JywgMSk7XG4gICAgICAgICAgICBvbkNyZWF0ZSh3cmFwcGVyKTtcbiAgICAgICAgICAgIG5vZGUud3JhcCh3cmFwcGVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVtb3ZlT3JVbndyYXBJbnZhbGlkTm9kZShub2RlLCBzY2hlbWEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaGFzQ2xvc2VzdCA9IChub2RlLCBwYXJlbnROYW1lKSA9PiB7XG4gICAgICBsZXQgdGVtcE5vZGUgPSBub2RlO1xuICAgICAgd2hpbGUgKHRlbXBOb2RlKSB7XG4gICAgICAgIGlmICh0ZW1wTm9kZS5uYW1lID09PSBwYXJlbnROYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGVtcE5vZGUgPSB0ZW1wTm9kZS5wYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBjb25zdCBpc0ludmFsaWQgPSAoc2NoZW1hLCBub2RlLCBwYXJlbnQgPSBub2RlLnBhcmVudCkgPT4ge1xuICAgICAgaWYgKHBhcmVudCAmJiBzY2hlbWEuY2hpbGRyZW5bbm9kZS5uYW1lXSAmJiAhc2NoZW1hLmlzVmFsaWRDaGlsZChwYXJlbnQubmFtZSwgbm9kZS5uYW1lKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAocGFyZW50ICYmIG5vZGUubmFtZSA9PT0gJ2EnICYmIGhhc0Nsb3Nlc3QocGFyZW50LCAnYScpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGVSYW5nZSA9IChzYywgc28sIGVjLCBlbykgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHJuZy5zZXRTdGFydChzYywgc28pO1xuICAgICAgcm5nLnNldEVuZChlYywgZW8pO1xuICAgICAgcmV0dXJuIHJuZztcbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZUJsb2NrU2VsZWN0aW9uUmFuZ2UgPSBybmcgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRQb3MgPSBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KHJuZyk7XG4gICAgICBjb25zdCBlbmRQb3MgPSBDYXJldFBvc2l0aW9uLmZyb21SYW5nZUVuZChybmcpO1xuICAgICAgY29uc3Qgcm9vdE5vZGUgPSBybmcuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XG4gICAgICByZXR1cm4gZnJvbVBvc2l0aW9uKGZhbHNlLCByb290Tm9kZSwgZW5kUG9zKS5tYXAobmV3RW5kUG9zID0+IHtcbiAgICAgICAgaWYgKCFpc0luU2FtZUJsb2NrKHN0YXJ0UG9zLCBlbmRQb3MsIHJvb3ROb2RlKSAmJiBpc0luU2FtZUJsb2NrKHN0YXJ0UG9zLCBuZXdFbmRQb3MsIHJvb3ROb2RlKSkge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVSYW5nZShzdGFydFBvcy5jb250YWluZXIoKSwgc3RhcnRQb3Mub2Zmc2V0KCksIG5ld0VuZFBvcy5jb250YWluZXIoKSwgbmV3RW5kUG9zLm9mZnNldCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcm5nO1xuICAgICAgICB9XG4gICAgICB9KS5nZXRPcihybmcpO1xuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplID0gcm5nID0+IHJuZy5jb2xsYXBzZWQgPyBybmcgOiBub3JtYWxpemVCbG9ja1NlbGVjdGlvblJhbmdlKHJuZyk7XG5cbiAgICBjb25zdCBoYXNPbmx5T25lQ2hpbGQkMSA9IG5vZGUgPT4ge1xuICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUobm9kZS5maXJzdENoaWxkKSAmJiBub2RlLmZpcnN0Q2hpbGQgPT09IG5vZGUubGFzdENoaWxkO1xuICAgIH07XG4gICAgY29uc3QgaXNQYWRkaW5nTm9kZSA9IG5vZGUgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUubmFtZSA9PT0gJ2JyJyB8fCBub2RlLnZhbHVlID09PSBuYnNwO1xuICAgIH07XG4gICAgY29uc3QgaXNQYWRkZWRFbXB0eUJsb2NrID0gKHNjaGVtYSwgbm9kZSkgPT4ge1xuICAgICAgY29uc3QgYmxvY2tFbGVtZW50cyA9IHNjaGVtYS5nZXRCbG9ja0VsZW1lbnRzKCk7XG4gICAgICByZXR1cm4gYmxvY2tFbGVtZW50c1tub2RlLm5hbWVdICYmIGhhc09ubHlPbmVDaGlsZCQxKG5vZGUpICYmIGlzUGFkZGluZ05vZGUobm9kZS5maXJzdENoaWxkKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzRW1wdHlGcmFnbWVudEVsZW1lbnQgPSAoc2NoZW1hLCBub2RlKSA9PiB7XG4gICAgICBjb25zdCBub25FbXB0eUVsZW1lbnRzID0gc2NoZW1hLmdldE5vbkVtcHR5RWxlbWVudHMoKTtcbiAgICAgIHJldHVybiBpc05vbk51bGxhYmxlKG5vZGUpICYmIChub2RlLmlzRW1wdHkobm9uRW1wdHlFbGVtZW50cykgfHwgaXNQYWRkZWRFbXB0eUJsb2NrKHNjaGVtYSwgbm9kZSkpO1xuICAgIH07XG4gICAgY29uc3QgaXNMaXN0RnJhZ21lbnQgPSAoc2NoZW1hLCBmcmFnbWVudCkgPT4ge1xuICAgICAgbGV0IGZpcnN0Q2hpbGQgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuICAgICAgbGV0IGxhc3RDaGlsZCA9IGZyYWdtZW50Lmxhc3RDaGlsZDtcbiAgICAgIGlmIChmaXJzdENoaWxkICYmIGZpcnN0Q2hpbGQubmFtZSA9PT0gJ21ldGEnKSB7XG4gICAgICAgIGZpcnN0Q2hpbGQgPSBmaXJzdENoaWxkLm5leHQ7XG4gICAgICB9XG4gICAgICBpZiAobGFzdENoaWxkICYmIGxhc3RDaGlsZC5hdHRyKCdpZCcpID09PSAnbWNlX21hcmtlcicpIHtcbiAgICAgICAgbGFzdENoaWxkID0gbGFzdENoaWxkLnByZXY7XG4gICAgICB9XG4gICAgICBpZiAoaXNFbXB0eUZyYWdtZW50RWxlbWVudChzY2hlbWEsIGxhc3RDaGlsZCkpIHtcbiAgICAgICAgbGFzdENoaWxkID0gbGFzdENoaWxkID09PSBudWxsIHx8IGxhc3RDaGlsZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGFzdENoaWxkLnByZXY7XG4gICAgICB9XG4gICAgICBpZiAoIWZpcnN0Q2hpbGQgfHwgZmlyc3RDaGlsZCAhPT0gbGFzdENoaWxkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmaXJzdENoaWxkLm5hbWUgPT09ICd1bCcgfHwgZmlyc3RDaGlsZC5uYW1lID09PSAnb2wnO1xuICAgIH07XG4gICAgY29uc3QgY2xlYW51cERvbUZyYWdtZW50ID0gZG9tRnJhZ21lbnQgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSBkb21GcmFnbWVudC5maXJzdENoaWxkO1xuICAgICAgY29uc3QgbGFzdENoaWxkID0gZG9tRnJhZ21lbnQubGFzdENoaWxkO1xuICAgICAgaWYgKGZpcnN0Q2hpbGQgJiYgZmlyc3RDaGlsZC5ub2RlTmFtZSA9PT0gJ01FVEEnKSB7XG4gICAgICAgIChfYSA9IGZpcnN0Q2hpbGQucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJlbW92ZUNoaWxkKGZpcnN0Q2hpbGQpO1xuICAgICAgfVxuICAgICAgaWYgKGxhc3RDaGlsZCAmJiBsYXN0Q2hpbGQuaWQgPT09ICdtY2VfbWFya2VyJykge1xuICAgICAgICAoX2IgPSBsYXN0Q2hpbGQucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnJlbW92ZUNoaWxkKGxhc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZG9tRnJhZ21lbnQ7XG4gICAgfTtcbiAgICBjb25zdCB0b0RvbUZyYWdtZW50ID0gKGRvbSwgc2VyaWFsaXplciwgZnJhZ21lbnQpID0+IHtcbiAgICAgIGNvbnN0IGh0bWwgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZShmcmFnbWVudCk7XG4gICAgICBjb25zdCBkb21GcmFnbWVudCA9IGRvbS5jcmVhdGVGcmFnbWVudChodG1sKTtcbiAgICAgIHJldHVybiBjbGVhbnVwRG9tRnJhZ21lbnQoZG9tRnJhZ21lbnQpO1xuICAgIH07XG4gICAgY29uc3QgbGlzdEl0ZW1zID0gZWxtID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIHJldHVybiBmaWx0ZXIkNSgoX2EgPSBlbG0gPT09IG51bGwgfHwgZWxtID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbG0uY2hpbGROb2RlcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10sIGNoaWxkID0+IHtcbiAgICAgICAgcmV0dXJuIGNoaWxkLm5vZGVOYW1lID09PSAnTEknO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBpc1BhZGRpbmcgPSBub2RlID0+IHtcbiAgICAgIHJldHVybiBub2RlLmRhdGEgPT09IG5ic3AgfHwgaXNCciQ2KG5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgaXNMaXN0SXRlbVBhZGRlZCA9IG5vZGUgPT4ge1xuICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUobm9kZSA9PT0gbnVsbCB8fCBub2RlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBub2RlLmZpcnN0Q2hpbGQpICYmIG5vZGUuZmlyc3RDaGlsZCA9PT0gbm9kZS5sYXN0Q2hpbGQgJiYgaXNQYWRkaW5nKG5vZGUuZmlyc3RDaGlsZCk7XG4gICAgfTtcbiAgICBjb25zdCBpc0VtcHR5T3JQYWRkZWQgPSBlbG0gPT4ge1xuICAgICAgcmV0dXJuICFlbG0uZmlyc3RDaGlsZCB8fCBpc0xpc3RJdGVtUGFkZGVkKGVsbSk7XG4gICAgfTtcbiAgICBjb25zdCB0cmltTGlzdEl0ZW1zID0gZWxtcyA9PiB7XG4gICAgICByZXR1cm4gZWxtcy5sZW5ndGggPiAwICYmIGlzRW1wdHlPclBhZGRlZChlbG1zW2VsbXMubGVuZ3RoIC0gMV0pID8gZWxtcy5zbGljZSgwLCAtMSkgOiBlbG1zO1xuICAgIH07XG4gICAgY29uc3QgZ2V0UGFyZW50TGkgPSAoZG9tLCBub2RlKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnRCbG9jayA9IGRvbS5nZXRQYXJlbnQobm9kZSwgZG9tLmlzQmxvY2spO1xuICAgICAgcmV0dXJuIHBhcmVudEJsb2NrICYmIHBhcmVudEJsb2NrLm5vZGVOYW1lID09PSAnTEknID8gcGFyZW50QmxvY2sgOiBudWxsO1xuICAgIH07XG4gICAgY29uc3QgaXNQYXJlbnRCbG9ja0xpID0gKGRvbSwgbm9kZSkgPT4ge1xuICAgICAgcmV0dXJuICEhZ2V0UGFyZW50TGkoZG9tLCBub2RlKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNwbGl0ID0gKHBhcmVudE5vZGUsIHJuZykgPT4ge1xuICAgICAgY29uc3QgYmVmb3JlUm5nID0gcm5nLmNsb25lUmFuZ2UoKTtcbiAgICAgIGNvbnN0IGFmdGVyUm5nID0gcm5nLmNsb25lUmFuZ2UoKTtcbiAgICAgIGJlZm9yZVJuZy5zZXRTdGFydEJlZm9yZShwYXJlbnROb2RlKTtcbiAgICAgIGFmdGVyUm5nLnNldEVuZEFmdGVyKHBhcmVudE5vZGUpO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgYmVmb3JlUm5nLmNsb25lQ29udGVudHMoKSxcbiAgICAgICAgYWZ0ZXJSbmcuY2xvbmVDb250ZW50cygpXG4gICAgICBdO1xuICAgIH07XG4gICAgY29uc3QgZmluZEZpcnN0SW4gPSAobm9kZSwgcm9vdE5vZGUpID0+IHtcbiAgICAgIGNvbnN0IGNhcmV0UG9zID0gQ2FyZXRQb3NpdGlvbi5iZWZvcmUobm9kZSk7XG4gICAgICBjb25zdCBjYXJldFdhbGtlciA9IENhcmV0V2Fsa2VyKHJvb3ROb2RlKTtcbiAgICAgIGNvbnN0IG5ld0NhcmV0UG9zID0gY2FyZXRXYWxrZXIubmV4dChjYXJldFBvcyk7XG4gICAgICByZXR1cm4gbmV3Q2FyZXRQb3MgPyBuZXdDYXJldFBvcy50b1JhbmdlKCkgOiBudWxsO1xuICAgIH07XG4gICAgY29uc3QgZmluZExhc3RPZiA9IChub2RlLCByb290Tm9kZSkgPT4ge1xuICAgICAgY29uc3QgY2FyZXRQb3MgPSBDYXJldFBvc2l0aW9uLmFmdGVyKG5vZGUpO1xuICAgICAgY29uc3QgY2FyZXRXYWxrZXIgPSBDYXJldFdhbGtlcihyb290Tm9kZSk7XG4gICAgICBjb25zdCBuZXdDYXJldFBvcyA9IGNhcmV0V2Fsa2VyLnByZXYoY2FyZXRQb3MpO1xuICAgICAgcmV0dXJuIG5ld0NhcmV0UG9zID8gbmV3Q2FyZXRQb3MudG9SYW5nZSgpIDogbnVsbDtcbiAgICB9O1xuICAgIGNvbnN0IGluc2VydE1pZGRsZSA9ICh0YXJnZXQsIGVsbXMsIHJvb3ROb2RlLCBybmcpID0+IHtcbiAgICAgIGNvbnN0IHBhcnRzID0gZ2V0U3BsaXQodGFyZ2V0LCBybmcpO1xuICAgICAgY29uc3QgcGFyZW50RWxtID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgICBpZiAocGFyZW50RWxtKSB7XG4gICAgICAgIHBhcmVudEVsbS5pbnNlcnRCZWZvcmUocGFydHNbMF0sIHRhcmdldCk7XG4gICAgICAgIFRvb2xzLmVhY2goZWxtcywgbGkgPT4ge1xuICAgICAgICAgIHBhcmVudEVsbS5pbnNlcnRCZWZvcmUobGksIHRhcmdldCk7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXJlbnRFbG0uaW5zZXJ0QmVmb3JlKHBhcnRzWzFdLCB0YXJnZXQpO1xuICAgICAgICBwYXJlbnRFbG0ucmVtb3ZlQ2hpbGQodGFyZ2V0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmaW5kTGFzdE9mKGVsbXNbZWxtcy5sZW5ndGggLSAxXSwgcm9vdE5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0QmVmb3JlJDIgPSAodGFyZ2V0LCBlbG1zLCByb290Tm9kZSkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50RWxtID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgICBpZiAocGFyZW50RWxtKSB7XG4gICAgICAgIFRvb2xzLmVhY2goZWxtcywgZWxtID0+IHtcbiAgICAgICAgICBwYXJlbnRFbG0uaW5zZXJ0QmVmb3JlKGVsbSwgdGFyZ2V0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmluZEZpcnN0SW4odGFyZ2V0LCByb290Tm9kZSk7XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnRBZnRlciQyID0gKHRhcmdldCwgZWxtcywgcm9vdE5vZGUsIGRvbSkgPT4ge1xuICAgICAgZG9tLmluc2VydEFmdGVyKGVsbXMucmV2ZXJzZSgpLCB0YXJnZXQpO1xuICAgICAgcmV0dXJuIGZpbmRMYXN0T2YoZWxtc1swXSwgcm9vdE5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0QXRDYXJldCQxID0gKHNlcmlhbGl6ZXIsIGRvbSwgcm5nLCBmcmFnbWVudCkgPT4ge1xuICAgICAgY29uc3QgZG9tRnJhZ21lbnQgPSB0b0RvbUZyYWdtZW50KGRvbSwgc2VyaWFsaXplciwgZnJhZ21lbnQpO1xuICAgICAgY29uc3QgbGlUYXJnZXQgPSBnZXRQYXJlbnRMaShkb20sIHJuZy5zdGFydENvbnRhaW5lcik7XG4gICAgICBjb25zdCBsaUVsbXMgPSB0cmltTGlzdEl0ZW1zKGxpc3RJdGVtcyhkb21GcmFnbWVudC5maXJzdENoaWxkKSk7XG4gICAgICBjb25zdCBCRUdJTk5JTkcgPSAxLCBFTkQgPSAyO1xuICAgICAgY29uc3Qgcm9vdE5vZGUgPSBkb20uZ2V0Um9vdCgpO1xuICAgICAgY29uc3QgaXNBdCA9IGxvY2F0aW9uID0+IHtcbiAgICAgICAgY29uc3QgY2FyZXRQb3MgPSBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KHJuZyk7XG4gICAgICAgIGNvbnN0IGNhcmV0V2Fsa2VyID0gQ2FyZXRXYWxrZXIoZG9tLmdldFJvb3QoKSk7XG4gICAgICAgIGNvbnN0IG5ld1BvcyA9IGxvY2F0aW9uID09PSBCRUdJTk5JTkcgPyBjYXJldFdhbGtlci5wcmV2KGNhcmV0UG9zKSA6IGNhcmV0V2Fsa2VyLm5leHQoY2FyZXRQb3MpO1xuICAgICAgICBjb25zdCBuZXdQb3NOb2RlID0gbmV3UG9zID09PSBudWxsIHx8IG5ld1BvcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbmV3UG9zLmdldE5vZGUoKTtcbiAgICAgICAgcmV0dXJuIG5ld1Bvc05vZGUgPyBnZXRQYXJlbnRMaShkb20sIG5ld1Bvc05vZGUpICE9PSBsaVRhcmdldCA6IHRydWU7XG4gICAgICB9O1xuICAgICAgaWYgKCFsaVRhcmdldCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoaXNBdChCRUdJTk5JTkcpKSB7XG4gICAgICAgIHJldHVybiBpbnNlcnRCZWZvcmUkMihsaVRhcmdldCwgbGlFbG1zLCByb290Tm9kZSk7XG4gICAgICB9IGVsc2UgaWYgKGlzQXQoRU5EKSkge1xuICAgICAgICByZXR1cm4gaW5zZXJ0QWZ0ZXIkMihsaVRhcmdldCwgbGlFbG1zLCByb290Tm9kZSwgZG9tKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnNlcnRNaWRkbGUobGlUYXJnZXQsIGxpRWxtcywgcm9vdE5vZGUsIHJuZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG1lcmdlYWJsZVdyYXBwZWRFbGVtZW50cyA9IFsncHJlJ107XG4gICAgY29uc3Qgc2hvdWxkUGFzdGVDb250ZW50T25seSA9IChkb20sIGZyYWdtZW50LCBwYXJlbnROb2RlLCByb290KSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBmaXJzdE5vZGUgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuICAgICAgY29uc3QgbGFzdE5vZGUgPSBmcmFnbWVudC5sYXN0Q2hpbGQ7XG4gICAgICBjb25zdCBsYXN0ID0gbGFzdE5vZGUuYXR0cignZGF0YS1tY2UtdHlwZScpID09PSAnYm9va21hcmsnID8gbGFzdE5vZGUucHJldiA6IGxhc3ROb2RlO1xuICAgICAgY29uc3QgaXNQYXN0aW5nU2luZ2xlRWxlbWVudCA9IGZpcnN0Tm9kZSA9PT0gbGFzdDtcbiAgICAgIGNvbnN0IGlzV3JhcHBlZEVsZW1lbnQgPSBjb250YWlucyQyKG1lcmdlYWJsZVdyYXBwZWRFbGVtZW50cywgZmlyc3ROb2RlLm5hbWUpO1xuICAgICAgaWYgKGlzUGFzdGluZ1NpbmdsZUVsZW1lbnQgJiYgaXNXcmFwcGVkRWxlbWVudCkge1xuICAgICAgICBjb25zdCBpc0NvbnRlbnRFZGl0YWJsZSA9IGZpcnN0Tm9kZS5hdHRyKCdjb250ZW50ZWRpdGFibGUnKSAhPT0gJ2ZhbHNlJztcbiAgICAgICAgY29uc3QgaXNQYXN0aW5nSW5UaGVTYW1lQmxvY2tUYWcgPSAoKF9hID0gZG9tLmdldFBhcmVudChwYXJlbnROb2RlLCBkb20uaXNCbG9jaykpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSA9PT0gZmlyc3ROb2RlLm5hbWU7XG4gICAgICAgIGNvbnN0IGlzUGFzdGluZ0luQ29udGVudEVkaXRhYmxlID0gT3B0aW9uYWwuZnJvbShnZXRDb250ZW50RWRpdGFibGVSb290JDEocm9vdCwgcGFyZW50Tm9kZSkpLmZvcmFsbChpc0NvbnRlbnRFZGl0YWJsZVRydWUkMyk7XG4gICAgICAgIHJldHVybiBpc0NvbnRlbnRFZGl0YWJsZSAmJiBpc1Bhc3RpbmdJblRoZVNhbWVCbG9ja1RhZyAmJiBpc1Bhc3RpbmdJbkNvbnRlbnRFZGl0YWJsZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlzVGFibGVDZWxsID0gaXNUYWJsZUNlbGwkMztcbiAgICBjb25zdCBpc1RhYmxlQ2VsbENvbnRlbnRTZWxlY3RlZCA9IChkb20sIHJuZywgY2VsbCkgPT4ge1xuICAgICAgaWYgKGlzTm9uTnVsbGFibGUoY2VsbCkpIHtcbiAgICAgICAgY29uc3QgZW5kQ2VsbCA9IGRvbS5nZXRQYXJlbnQocm5nLmVuZENvbnRhaW5lciwgaXNUYWJsZUNlbGwpO1xuICAgICAgICByZXR1cm4gY2VsbCA9PT0gZW5kQ2VsbCAmJiBoYXNBbGxDb250ZW50c1NlbGVjdGVkKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGNlbGwpLCBybmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdmFsaWRJbnNlcnRpb24gPSAoZWRpdG9yLCB2YWx1ZSwgcGFyZW50Tm9kZSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgaWYgKHBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLW1jZS1ib2d1cycpID09PSAnYWxsJykge1xuICAgICAgICAoX2EgPSBwYXJlbnROb2RlLnBhcmVudE5vZGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pbnNlcnRCZWZvcmUoZWRpdG9yLmRvbS5jcmVhdGVGcmFnbWVudCh2YWx1ZSksIHBhcmVudE5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHBhcmVudE5vZGUuZmlyc3RDaGlsZDtcbiAgICAgICAgY29uc3Qgbm9kZTIgPSBwYXJlbnROb2RlLmxhc3RDaGlsZDtcbiAgICAgICAgaWYgKCFub2RlIHx8IG5vZGUgPT09IG5vZGUyICYmIG5vZGUubm9kZU5hbWUgPT09ICdCUicpIHtcbiAgICAgICAgICBlZGl0b3IuZG9tLnNldEhUTUwocGFyZW50Tm9kZSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Q29udGVudCh2YWx1ZSwgeyBub19ldmVudHM6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHRyaW1CcnNGcm9tVGFibGVDZWxsID0gKGRvbSwgZWxtKSA9PiB7XG4gICAgICBPcHRpb25hbC5mcm9tKGRvbS5nZXRQYXJlbnQoZWxtLCAndGQsdGgnKSkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKS5lYWNoKHRyaW1CbG9ja1RyYWlsaW5nQnIpO1xuICAgIH07XG4gICAgY29uc3QgcmVkdWNlSW5saW5lVGV4dEVsZW1lbnRzID0gKGVkaXRvciwgbWVyZ2UpID0+IHtcbiAgICAgIGNvbnN0IHRleHRJbmxpbmVFbGVtZW50cyA9IGVkaXRvci5zY2hlbWEuZ2V0VGV4dElubGluZUVsZW1lbnRzKCk7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgaWYgKG1lcmdlKSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgICBjb25zdCBlbGVtZW50VXRpbHMgPSBFbGVtZW50VXRpbHMoZWRpdG9yKTtcbiAgICAgICAgVG9vbHMuZWFjaChkb20uc2VsZWN0KCcqW2RhdGEtbWNlLWZyYWdtZW50XScpLCBub2RlID0+IHtcbiAgICAgICAgICBjb25zdCBpc0lubGluZSA9IGlzTm9uTnVsbGFibGUodGV4dElubGluZUVsZW1lbnRzW25vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pO1xuICAgICAgICAgIGlmIChpc0lubGluZSAmJiBoYXNJbmhlcml0YWJsZVN0eWxlcyhkb20sIG5vZGUpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnRFbGVtZW50OyBpc05vbk51bGxhYmxlKHBhcmVudE5vZGUpICYmIHBhcmVudE5vZGUgIT09IHJvb3Q7IHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc3R5bGVDb25mbGljdCA9IGhhc1N0eWxlQ29uZmxpY3QoZG9tLCBub2RlLCBwYXJlbnROb2RlKTtcbiAgICAgICAgICAgICAgaWYgKHN0eWxlQ29uZmxpY3QpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZWxlbWVudFV0aWxzLmNvbXBhcmUocGFyZW50Tm9kZSwgbm9kZSkpIHtcbiAgICAgICAgICAgICAgICBkb20ucmVtb3ZlKG5vZGUsIHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1hcmtGcmFnbWVudEVsZW1lbnRzID0gZnJhZ21lbnQgPT4ge1xuICAgICAgbGV0IG5vZGUgPSBmcmFnbWVudDtcbiAgICAgIHdoaWxlIChub2RlID0gbm9kZS53YWxrKCkpIHtcbiAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gMSkge1xuICAgICAgICAgIG5vZGUuYXR0cignZGF0YS1tY2UtZnJhZ21lbnQnLCAnMScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB1bm1hcmtGcmFnbWVudEVsZW1lbnRzID0gZWxtID0+IHtcbiAgICAgIFRvb2xzLmVhY2goZWxtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyksIGVsbSA9PiB7XG4gICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbWNlLWZyYWdtZW50Jyk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzUGFydE9mRnJhZ21lbnQgPSBub2RlID0+IHtcbiAgICAgIHJldHVybiAhIW5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLW1jZS1mcmFnbWVudCcpO1xuICAgIH07XG4gICAgY29uc3QgY2FuSGF2ZUNoaWxkcmVuID0gKGVkaXRvciwgbm9kZSkgPT4ge1xuICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUobm9kZSkgJiYgIWVkaXRvci5zY2hlbWEuZ2V0Vm9pZEVsZW1lbnRzKClbbm9kZS5ub2RlTmFtZV07XG4gICAgfTtcbiAgICBjb25zdCBtb3ZlU2VsZWN0aW9uVG9NYXJrZXIgPSAoZWRpdG9yLCBtYXJrZXIpID0+IHtcbiAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgbGV0IG5leHRSbmc7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgIGlmICghbWFya2VyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNlbGVjdGlvbi5zY3JvbGxJbnRvVmlldyhtYXJrZXIpO1xuICAgICAgY29uc3QgcGFyZW50RWRpdGFibGVFbG0gPSBnZXRDb250ZW50RWRpdGFibGVSb290JDEoZWRpdG9yLmdldEJvZHkoKSwgbWFya2VyKTtcbiAgICAgIGlmIChwYXJlbnRFZGl0YWJsZUVsbSAmJiBkb20uZ2V0Q29udGVudEVkaXRhYmxlKHBhcmVudEVkaXRhYmxlRWxtKSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICBkb20ucmVtb3ZlKG1hcmtlcik7XG4gICAgICAgIHNlbGVjdGlvbi5zZWxlY3QocGFyZW50RWRpdGFibGVFbG0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgcm5nID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgY29uc3Qgbm9kZSA9IG1hcmtlci5wcmV2aW91c1NpYmxpbmc7XG4gICAgICBpZiAoaXNUZXh0JGEobm9kZSkpIHtcbiAgICAgICAgcm5nLnNldFN0YXJ0KG5vZGUsIChfYiA9IChfYSA9IG5vZGUubm9kZVZhbHVlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAwKTtcbiAgICAgICAgY29uc3Qgbm9kZTIgPSBtYXJrZXIubmV4dFNpYmxpbmc7XG4gICAgICAgIGlmIChpc1RleHQkYShub2RlMikpIHtcbiAgICAgICAgICBub2RlLmFwcGVuZERhdGEobm9kZTIuZGF0YSk7XG4gICAgICAgICAgKF9jID0gbm9kZTIucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnJlbW92ZUNoaWxkKG5vZGUyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm5nLnNldFN0YXJ0QmVmb3JlKG1hcmtlcik7XG4gICAgICAgIHJuZy5zZXRFbmRCZWZvcmUobWFya2VyKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpbmROZXh0Q2FyZXRSbmcgPSBybmcgPT4ge1xuICAgICAgICBsZXQgY2FyZXRQb3MgPSBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KHJuZyk7XG4gICAgICAgIGNvbnN0IGNhcmV0V2Fsa2VyID0gQ2FyZXRXYWxrZXIoZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICAgIGNhcmV0UG9zID0gY2FyZXRXYWxrZXIubmV4dChjYXJldFBvcyk7XG4gICAgICAgIHJldHVybiBjYXJldFBvcyA9PT0gbnVsbCB8fCBjYXJldFBvcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2FyZXRQb3MudG9SYW5nZSgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHBhcmVudEJsb2NrID0gZG9tLmdldFBhcmVudChtYXJrZXIsIGRvbS5pc0Jsb2NrKTtcbiAgICAgIGRvbS5yZW1vdmUobWFya2VyKTtcbiAgICAgIGlmIChwYXJlbnRCbG9jayAmJiBkb20uaXNFbXB0eShwYXJlbnRCbG9jaykpIHtcbiAgICAgICAgY29uc3QgaXNDZWxsID0gaXNUYWJsZUNlbGwocGFyZW50QmxvY2spO1xuICAgICAgICBlbXB0eShTdWdhckVsZW1lbnQuZnJvbURvbShwYXJlbnRCbG9jaykpO1xuICAgICAgICBybmcuc2V0U3RhcnQocGFyZW50QmxvY2ssIDApO1xuICAgICAgICBybmcuc2V0RW5kKHBhcmVudEJsb2NrLCAwKTtcbiAgICAgICAgaWYgKCFpc0NlbGwgJiYgIWlzUGFydE9mRnJhZ21lbnQocGFyZW50QmxvY2spICYmIChuZXh0Um5nID0gZmluZE5leHRDYXJldFJuZyhybmcpKSkge1xuICAgICAgICAgIHJuZyA9IG5leHRSbmc7XG4gICAgICAgICAgZG9tLnJlbW92ZShwYXJlbnRCbG9jayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9tLmFkZChwYXJlbnRCbG9jaywgZG9tLmNyZWF0ZSgnYnInLCBpc0NlbGwgPyB7fSA6IHsgJ2RhdGEtbWNlLWJvZ3VzJzogJzEnIH0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgIH07XG4gICAgY29uc3QgZGVsZXRlU2VsZWN0ZWRDb250ZW50ID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBybmcgPSBub3JtYWxpemUoZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSk7XG4gICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgY29uc3Qgc3RhcnRDZWxsID0gZG9tLmdldFBhcmVudChybmcuc3RhcnRDb250YWluZXIsIGlzVGFibGVDZWxsKTtcbiAgICAgIGlmIChpc1RhYmxlQ2VsbENvbnRlbnRTZWxlY3RlZChkb20sIHJuZywgc3RhcnRDZWxsKSkge1xuICAgICAgICBkZWxldGVDZWxsQ29udGVudHMoZWRpdG9yLCBybmcsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKHN0YXJ0Q2VsbCkpO1xuICAgICAgfSBlbHNlIGlmIChybmcuc3RhcnRDb250YWluZXIgPT09IHJuZy5lbmRDb250YWluZXIgJiYgcm5nLmVuZE9mZnNldCAtIHJuZy5zdGFydE9mZnNldCA9PT0gMSAmJiBpc1RleHQkYShybmcuc3RhcnRDb250YWluZXIuY2hpbGROb2Rlc1tybmcuc3RhcnRPZmZzZXRdKSkge1xuICAgICAgICBybmcuZGVsZXRlQ29udGVudHMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkaXRvci5nZXREb2MoKS5leGVjQ29tbWFuZCgnRGVsZXRlJywgZmFsc2UpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZmluZE1hcmtlck5vZGUgPSBzY29wZSA9PiB7XG4gICAgICBmb3IgKGxldCBtYXJrZXJOb2RlID0gc2NvcGU7IG1hcmtlck5vZGU7IG1hcmtlck5vZGUgPSBtYXJrZXJOb2RlLndhbGsoKSkge1xuICAgICAgICBpZiAobWFya2VyTm9kZS5hdHRyKCdpZCcpID09PSAnbWNlX21hcmtlcicpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShtYXJrZXJOb2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGluc2VydEh0bWxBdENhcmV0ID0gKGVkaXRvciwgdmFsdWUsIGRldGFpbHMpID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uO1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IHBhcnNlciA9IGVkaXRvci5wYXJzZXI7XG4gICAgICBjb25zdCBtZXJnZSA9IGRldGFpbHMubWVyZ2U7XG4gICAgICBjb25zdCBzZXJpYWxpemVyID0gSHRtbFNlcmlhbGl6ZXIoeyB2YWxpZGF0ZTogdHJ1ZSB9LCBlZGl0b3Iuc2NoZW1hKTtcbiAgICAgIGNvbnN0IGJvb2ttYXJrSHRtbCA9ICc8c3BhbiBpZD1cIm1jZV9tYXJrZXJcIiBkYXRhLW1jZS10eXBlPVwiYm9va21hcmtcIj4mI3hGRUZGOzwvc3Bhbj4nO1xuICAgICAgaWYgKHZhbHVlLmluZGV4T2YoJ3skY2FyZXR9JykgPT09IC0xKSB7XG4gICAgICAgIHZhbHVlICs9ICd7JGNhcmV0fSc7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xce1xcJGNhcmV0XFx9LywgYm9va21hcmtIdG1sKTtcbiAgICAgIGxldCBybmcgPSBzZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBjb25zdCBjYXJldEVsZW1lbnQgPSBybmcuc3RhcnRDb250YWluZXI7XG4gICAgICBjb25zdCBib2R5ID0gZWRpdG9yLmdldEJvZHkoKTtcbiAgICAgIGlmIChjYXJldEVsZW1lbnQgPT09IGJvZHkgJiYgc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkpIHtcbiAgICAgICAgaWYgKGRvbS5pc0Jsb2NrKGJvZHkuZmlyc3RDaGlsZCkgJiYgY2FuSGF2ZUNoaWxkcmVuKGVkaXRvciwgYm9keS5maXJzdENoaWxkKSAmJiBkb20uaXNFbXB0eShib2R5LmZpcnN0Q2hpbGQpKSB7XG4gICAgICAgICAgcm5nID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgICAgIHJuZy5zZXRTdGFydChib2R5LmZpcnN0Q2hpbGQsIDApO1xuICAgICAgICAgIHJuZy5zZXRFbmQoYm9keS5maXJzdENoaWxkLCAwKTtcbiAgICAgICAgICBzZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkpIHtcbiAgICAgICAgZGVsZXRlU2VsZWN0ZWRDb250ZW50KGVkaXRvcik7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJlbnROb2RlID0gc2VsZWN0aW9uLmdldE5vZGUoKTtcbiAgICAgIGNvbnN0IHBhcnNlckFyZ3MgPSB7XG4gICAgICAgIGNvbnRleHQ6IHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgZGF0YTogZGV0YWlscy5kYXRhLFxuICAgICAgICBpbnNlcnQ6IHRydWVcbiAgICAgIH07XG4gICAgICBjb25zdCBmcmFnbWVudCA9IHBhcnNlci5wYXJzZSh2YWx1ZSwgcGFyc2VyQXJncyk7XG4gICAgICBpZiAoZGV0YWlscy5wYXN0ZSA9PT0gdHJ1ZSAmJiBpc0xpc3RGcmFnbWVudChlZGl0b3Iuc2NoZW1hLCBmcmFnbWVudCkgJiYgaXNQYXJlbnRCbG9ja0xpKGRvbSwgcGFyZW50Tm9kZSkpIHtcbiAgICAgICAgcm5nID0gaW5zZXJ0QXRDYXJldCQxKHNlcmlhbGl6ZXIsIGRvbSwgc2VsZWN0aW9uLmdldFJuZygpLCBmcmFnbWVudCk7XG4gICAgICAgIGlmIChybmcpIHtcbiAgICAgICAgICBzZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKGRldGFpbHMucGFzdGUgPT09IHRydWUgJiYgc2hvdWxkUGFzdGVDb250ZW50T25seShkb20sIGZyYWdtZW50LCBwYXJlbnROb2RlLCBlZGl0b3IuZ2V0Qm9keSgpKSkge1xuICAgICAgICAoX2EgPSBmcmFnbWVudC5maXJzdENoaWxkKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudW53cmFwKCk7XG4gICAgICB9XG4gICAgICBtYXJrRnJhZ21lbnRFbGVtZW50cyhmcmFnbWVudCk7XG4gICAgICBsZXQgbm9kZSA9IGZyYWdtZW50Lmxhc3RDaGlsZDtcbiAgICAgIGlmIChub2RlICYmIG5vZGUuYXR0cignaWQnKSA9PT0gJ21jZV9tYXJrZXInKSB7XG4gICAgICAgIGNvbnN0IG1hcmtlciA9IG5vZGU7XG4gICAgICAgIGZvciAobm9kZSA9IG5vZGUucHJldjsgbm9kZTsgbm9kZSA9IG5vZGUud2Fsayh0cnVlKSkge1xuICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09IDMgfHwgIWRvbS5pc0Jsb2NrKG5vZGUubmFtZSkpIHtcbiAgICAgICAgICAgIGlmIChub2RlLnBhcmVudCAmJiBlZGl0b3Iuc2NoZW1hLmlzVmFsaWRDaGlsZChub2RlLnBhcmVudC5uYW1lLCAnc3BhbicpKSB7XG4gICAgICAgICAgICAgIG5vZGUucGFyZW50Lmluc2VydChtYXJrZXIsIG5vZGUsIG5vZGUubmFtZSA9PT0gJ2JyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVkaXRvci5fc2VsZWN0aW9uT3ZlcnJpZGVzLnNob3dCbG9ja0NhcmV0Q29udGFpbmVyKHBhcmVudE5vZGUpO1xuICAgICAgaWYgKCFwYXJzZXJBcmdzLmludmFsaWQpIHtcbiAgICAgICAgdmFsdWUgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZShmcmFnbWVudCk7XG4gICAgICAgIHZhbGlkSW5zZXJ0aW9uKGVkaXRvciwgdmFsdWUsIHBhcmVudE5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRDb250ZW50KGJvb2ttYXJrSHRtbCk7XG4gICAgICAgIGxldCBwYXJlbnROb2RlID0gc2VsZWN0aW9uLmdldE5vZGUoKTtcbiAgICAgICAgbGV0IHRlbXBOb2RlO1xuICAgICAgICBjb25zdCByb290Tm9kZSA9IGVkaXRvci5nZXRCb2R5KCk7XG4gICAgICAgIGlmIChpc0RvY3VtZW50JDEocGFyZW50Tm9kZSkpIHtcbiAgICAgICAgICBwYXJlbnROb2RlID0gdGVtcE5vZGUgPSByb290Tm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZW1wTm9kZSA9IHBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHRlbXBOb2RlICYmIHRlbXBOb2RlICE9PSByb290Tm9kZSkge1xuICAgICAgICAgIHBhcmVudE5vZGUgPSB0ZW1wTm9kZTtcbiAgICAgICAgICB0ZW1wTm9kZSA9IHRlbXBOb2RlLnBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSBwYXJlbnROb2RlID09PSByb290Tm9kZSA/IHJvb3ROb2RlLmlubmVySFRNTCA6IGRvbS5nZXRPdXRlckhUTUwocGFyZW50Tm9kZSk7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBwYXJzZXIucGFyc2UodmFsdWUpO1xuICAgICAgICBjb25zdCBtYXJrZXJOb2RlID0gZmluZE1hcmtlck5vZGUocm9vdCk7XG4gICAgICAgIGNvbnN0IGVkaXRpbmdIb3N0ID0gbWFya2VyTm9kZS5iaW5kKGZpbmRDbG9zZXN0RWRpdGluZ0hvc3QpLmdldE9yKHJvb3QpO1xuICAgICAgICBtYXJrZXJOb2RlLmVhY2gobWFya2VyID0+IG1hcmtlci5yZXBsYWNlKGZyYWdtZW50KSk7XG4gICAgICAgIGNvbnN0IHRvRXh0cmFjdCA9IGZyYWdtZW50LmNoaWxkcmVuKCk7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IChfYiA9IGZyYWdtZW50LnBhcmVudCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogcm9vdDtcbiAgICAgICAgZnJhZ21lbnQudW53cmFwKCk7XG4gICAgICAgIGNvbnN0IGludmFsaWRDaGlsZHJlbiA9IGZpbHRlciQ1KHRvRXh0cmFjdCwgbm9kZSA9PiBpc0ludmFsaWQoZWRpdG9yLnNjaGVtYSwgbm9kZSwgcGFyZW50KSk7XG4gICAgICAgIGNsZWFuSW52YWxpZE5vZGVzKGludmFsaWRDaGlsZHJlbiwgZWRpdG9yLnNjaGVtYSwgZWRpdGluZ0hvc3QpO1xuICAgICAgICBmaWx0ZXIkMihwYXJzZXIuZ2V0Tm9kZUZpbHRlcnMoKSwgcGFyc2VyLmdldEF0dHJpYnV0ZUZpbHRlcnMoKSwgcm9vdCk7XG4gICAgICAgIHZhbHVlID0gc2VyaWFsaXplci5zZXJpYWxpemUocm9vdCk7XG4gICAgICAgIGlmIChwYXJlbnROb2RlID09PSByb290Tm9kZSkge1xuICAgICAgICAgIGRvbS5zZXRIVE1MKHJvb3ROb2RlLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9tLnNldE91dGVySFRNTChwYXJlbnROb2RlLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlZHVjZUlubGluZVRleHRFbGVtZW50cyhlZGl0b3IsIG1lcmdlKTtcbiAgICAgIG1vdmVTZWxlY3Rpb25Ub01hcmtlcihlZGl0b3IsIGRvbS5nZXQoJ21jZV9tYXJrZXInKSk7XG4gICAgICB1bm1hcmtGcmFnbWVudEVsZW1lbnRzKGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgdHJpbUJyc0Zyb21UYWJsZUNlbGwoZG9tLCBzZWxlY3Rpb24uZ2V0U3RhcnQoKSk7XG4gICAgICB1cGRhdGVDYXJldChlZGl0b3Iuc2NoZW1hLCBlZGl0b3IuZ2V0Qm9keSgpLCBzZWxlY3Rpb24uZ2V0U3RhcnQoKSk7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzVHJlZU5vZGUgPSBjb250ZW50ID0+IGNvbnRlbnQgaW5zdGFuY2VvZiBBc3ROb2RlO1xuXG4gICAgY29uc3QgbW92ZVNlbGVjdGlvbiA9IGVkaXRvciA9PiB7XG4gICAgICBpZiAoaGFzRm9jdXMoZWRpdG9yKSkge1xuICAgICAgICBmaXJzdFBvc2l0aW9uSW4oZWRpdG9yLmdldEJvZHkoKSkuZWFjaChwb3MgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBwb3MuZ2V0Tm9kZSgpO1xuICAgICAgICAgIGNvbnN0IGNhcmV0UG9zID0gaXNUYWJsZSQyKG5vZGUpID8gZmlyc3RQb3NpdGlvbkluKG5vZGUpLmdldE9yKHBvcykgOiBwb3M7XG4gICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcoY2FyZXRQb3MudG9SYW5nZSgpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXRFZGl0b3JIdG1sID0gKGVkaXRvciwgaHRtbCwgbm9TZWxlY3Rpb24pID0+IHtcbiAgICAgIGVkaXRvci5kb20uc2V0SFRNTChlZGl0b3IuZ2V0Qm9keSgpLCBodG1sKTtcbiAgICAgIGlmIChub1NlbGVjdGlvbiAhPT0gdHJ1ZSkge1xuICAgICAgICBtb3ZlU2VsZWN0aW9uKGVkaXRvcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXRDb250ZW50U3RyaW5nID0gKGVkaXRvciwgYm9keSwgY29udGVudCwgYXJncykgPT4ge1xuICAgICAgaWYgKGNvbnRlbnQubGVuZ3RoID09PSAwIHx8IC9eXFxzKyQvLnRlc3QoY29udGVudCkpIHtcbiAgICAgICAgY29uc3QgcGFkZCA9ICc8YnIgZGF0YS1tY2UtYm9ndXM9XCIxXCI+JztcbiAgICAgICAgaWYgKGJvZHkubm9kZU5hbWUgPT09ICdUQUJMRScpIHtcbiAgICAgICAgICBjb250ZW50ID0gJzx0cj48dGQ+JyArIHBhZGQgKyAnPC90ZD48L3RyPic7XG4gICAgICAgIH0gZWxzZSBpZiAoL14oVUx8T0wpJC8udGVzdChib2R5Lm5vZGVOYW1lKSkge1xuICAgICAgICAgIGNvbnRlbnQgPSAnPGxpPicgKyBwYWRkICsgJzwvbGk+JztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb3JjZWRSb290QmxvY2tOYW1lID0gZ2V0Rm9yY2VkUm9vdEJsb2NrKGVkaXRvcik7XG4gICAgICAgIGlmIChlZGl0b3Iuc2NoZW1hLmlzVmFsaWRDaGlsZChib2R5Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIGZvcmNlZFJvb3RCbG9ja05hbWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICBjb250ZW50ID0gcGFkZDtcbiAgICAgICAgICBjb250ZW50ID0gZWRpdG9yLmRvbS5jcmVhdGVIVE1MKGZvcmNlZFJvb3RCbG9ja05hbWUsIGdldEZvcmNlZFJvb3RCbG9ja0F0dHJzKGVkaXRvciksIGNvbnRlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKCFjb250ZW50KSB7XG4gICAgICAgICAgY29udGVudCA9IHBhZGQ7XG4gICAgICAgIH1cbiAgICAgICAgc2V0RWRpdG9ySHRtbChlZGl0b3IsIGNvbnRlbnQsIGFyZ3Mubm9fc2VsZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgIGh0bWw6IGNvbnRlbnRcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhcmdzLmZvcm1hdCAhPT0gJ3JhdycpIHtcbiAgICAgICAgICBjb250ZW50ID0gSHRtbFNlcmlhbGl6ZXIoeyB2YWxpZGF0ZTogZmFsc2UgfSwgZWRpdG9yLnNjaGVtYSkuc2VyaWFsaXplKGVkaXRvci5wYXJzZXIucGFyc2UoY29udGVudCwge1xuICAgICAgICAgICAgaXNSb290Q29udGVudDogdHJ1ZSxcbiAgICAgICAgICAgIGluc2VydDogdHJ1ZVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0cmltbWVkSHRtbCA9IGlzV3NQcmVzZXJ2ZUVsZW1lbnQoU3VnYXJFbGVtZW50LmZyb21Eb20oYm9keSkpID8gY29udGVudCA6IFRvb2xzLnRyaW0oY29udGVudCk7XG4gICAgICAgIHNldEVkaXRvckh0bWwoZWRpdG9yLCB0cmltbWVkSHRtbCwgYXJncy5ub19zZWxlY3Rpb24pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IHRyaW1tZWRIdG1sLFxuICAgICAgICAgIGh0bWw6IHRyaW1tZWRIdG1sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXRDb250ZW50VHJlZSA9IChlZGl0b3IsIGJvZHksIGNvbnRlbnQsIGFyZ3MpID0+IHtcbiAgICAgIGZpbHRlciQyKGVkaXRvci5wYXJzZXIuZ2V0Tm9kZUZpbHRlcnMoKSwgZWRpdG9yLnBhcnNlci5nZXRBdHRyaWJ1dGVGaWx0ZXJzKCksIGNvbnRlbnQpO1xuICAgICAgY29uc3QgaHRtbCA9IEh0bWxTZXJpYWxpemVyKHsgdmFsaWRhdGU6IGZhbHNlIH0sIGVkaXRvci5zY2hlbWEpLnNlcmlhbGl6ZShjb250ZW50KTtcbiAgICAgIGNvbnN0IHRyaW1tZWRIdG1sID0gaXNXc1ByZXNlcnZlRWxlbWVudChTdWdhckVsZW1lbnQuZnJvbURvbShib2R5KSkgPyBodG1sIDogVG9vbHMudHJpbShodG1sKTtcbiAgICAgIHNldEVkaXRvckh0bWwoZWRpdG9yLCB0cmltbWVkSHRtbCwgYXJncy5ub19zZWxlY3Rpb24pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgaHRtbDogdHJpbW1lZEh0bWxcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBzZXRDb250ZW50SW50ZXJuYWwgPSAoZWRpdG9yLCBjb250ZW50LCBhcmdzKSA9PiB7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShlZGl0b3IuZ2V0Qm9keSgpKS5tYXAoYm9keSA9PiB7XG4gICAgICAgIGlmIChpc1RyZWVOb2RlKGNvbnRlbnQpKSB7XG4gICAgICAgICAgcmV0dXJuIHNldENvbnRlbnRUcmVlKGVkaXRvciwgYm9keSwgY29udGVudCwgYXJncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHNldENvbnRlbnRTdHJpbmcoZWRpdG9yLCBib2R5LCBjb250ZW50LCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgfSkuZ2V0T3Ioe1xuICAgICAgICBjb250ZW50LFxuICAgICAgICBodG1sOiBpc1RyZWVOb2RlKGFyZ3MuY29udGVudCkgPyAnJyA6IGFyZ3MuY29udGVudFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFuY2VzdG9yJDEgPSAoc2NvcGUsIHByZWRpY2F0ZSwgaXNSb290KSA9PiBhbmNlc3RvciQ0KHNjb3BlLCBwcmVkaWNhdGUsIGlzUm9vdCkuaXNTb21lKCk7XG4gICAgY29uc3Qgc2libGluZyA9IChzY29wZSwgcHJlZGljYXRlKSA9PiBzaWJsaW5nJDEoc2NvcGUsIHByZWRpY2F0ZSkuaXNTb21lKCk7XG5cbiAgICBjb25zdCBlbnN1cmVJc1Jvb3QgPSBpc1Jvb3QgPT4gaXNGdW5jdGlvbihpc1Jvb3QpID8gaXNSb290IDogbmV2ZXI7XG4gICAgY29uc3QgYW5jZXN0b3IgPSAoc2NvcGUsIHRyYW5zZm9ybSwgaXNSb290KSA9PiB7XG4gICAgICBsZXQgZWxlbWVudCA9IHNjb3BlLmRvbTtcbiAgICAgIGNvbnN0IHN0b3AgPSBlbnN1cmVJc1Jvb3QoaXNSb290KTtcbiAgICAgIHdoaWxlIChlbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgZWwgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlbGVtZW50KTtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm0oZWwpO1xuICAgICAgICBpZiAodHJhbnNmb3JtZWQuaXNTb21lKCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtZWQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RvcChlbCkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGNsb3Nlc3QkMSA9IChzY29wZSwgdHJhbnNmb3JtLCBpc1Jvb3QpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0cmFuc2Zvcm0oc2NvcGUpO1xuICAgICAgY29uc3Qgc3RvcCA9IGVuc3VyZUlzUm9vdChpc1Jvb3QpO1xuICAgICAgcmV0dXJuIGN1cnJlbnQub3JUaHVuaygoKSA9PiBzdG9wKHNjb3BlKSA/IE9wdGlvbmFsLm5vbmUoKSA6IGFuY2VzdG9yKHNjb3BlLCB0cmFuc2Zvcm0sIHN0b3ApKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNFcSQzID0gaXNFcSQ1O1xuICAgIGNvbnN0IG1hdGNoZXNVbkluaGVyaXRlZEZvcm1hdFNlbGVjdG9yID0gKGVkLCBub2RlLCBuYW1lKSA9PiB7XG4gICAgICBjb25zdCBmb3JtYXRMaXN0ID0gZWQuZm9ybWF0dGVyLmdldChuYW1lKTtcbiAgICAgIGlmIChmb3JtYXRMaXN0KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybWF0TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGZvcm1hdExpc3RbaV07XG4gICAgICAgICAgaWYgKGlzU2VsZWN0b3JGb3JtYXQoZm9ybWF0KSAmJiBmb3JtYXQuaW5oZXJpdCA9PT0gZmFsc2UgJiYgZWQuZG9tLmlzKG5vZGUsIGZvcm1hdC5zZWxlY3RvcikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgY29uc3QgbWF0Y2hQYXJlbnRzID0gKGVkaXRvciwgbm9kZSwgbmFtZSwgdmFycywgc2ltaWxhcikgPT4ge1xuICAgICAgY29uc3Qgcm9vdCA9IGVkaXRvci5kb20uZ2V0Um9vdCgpO1xuICAgICAgaWYgKG5vZGUgPT09IHJvb3QpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2hlZE5vZGUgPSBlZGl0b3IuZG9tLmdldFBhcmVudChub2RlLCBlbG0gPT4ge1xuICAgICAgICBpZiAobWF0Y2hlc1VuSW5oZXJpdGVkRm9ybWF0U2VsZWN0b3IoZWRpdG9yLCBlbG0sIG5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsbS5wYXJlbnROb2RlID09PSByb290IHx8ICEhbWF0Y2hOb2RlKGVkaXRvciwgZWxtLCBuYW1lLCB2YXJzLCB0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuICEhbWF0Y2hOb2RlKGVkaXRvciwgbWF0Y2hlZE5vZGUsIG5hbWUsIHZhcnMsIHNpbWlsYXIpO1xuICAgIH07XG4gICAgY29uc3QgbWF0Y2hOYW1lID0gKGRvbSwgbm9kZSwgZm9ybWF0KSA9PiB7XG4gICAgICBpZiAoaXNJbmxpbmVGb3JtYXQoZm9ybWF0KSAmJiBpc0VxJDMobm9kZSwgZm9ybWF0LmlubGluZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNCbG9ja0Zvcm1hdChmb3JtYXQpICYmIGlzRXEkMyhub2RlLCBmb3JtYXQuYmxvY2spKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzU2VsZWN0b3JGb3JtYXQoZm9ybWF0KSkge1xuICAgICAgICByZXR1cm4gaXNFbGVtZW50JDYobm9kZSkgJiYgZG9tLmlzKG5vZGUsIGZvcm1hdC5zZWxlY3Rvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBjb25zdCBtYXRjaEl0ZW1zID0gKGRvbSwgbm9kZSwgZm9ybWF0LCBpdGVtTmFtZSwgc2ltaWxhciwgdmFycykgPT4ge1xuICAgICAgY29uc3QgaXRlbXMgPSBmb3JtYXRbaXRlbU5hbWVdO1xuICAgICAgY29uc3QgbWF0Y2hBdHRyaWJ1dGVzID0gaXRlbU5hbWUgPT09ICdhdHRyaWJ1dGVzJztcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGZvcm1hdC5vbm1hdGNoKSkge1xuICAgICAgICByZXR1cm4gZm9ybWF0Lm9ubWF0Y2gobm9kZSwgZm9ybWF0LCBpdGVtTmFtZSk7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbXMpIHtcbiAgICAgICAgaWYgKCFpc0FycmF5TGlrZShpdGVtcykpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBpdGVtcykge1xuICAgICAgICAgICAgaWYgKGhhcyQyKGl0ZW1zLCBrZXkpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbWF0Y2hBdHRyaWJ1dGVzID8gZG9tLmdldEF0dHJpYihub2RlLCBrZXkpIDogZ2V0U3R5bGUoZG9tLCBub2RlLCBrZXkpO1xuICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZFZhbHVlID0gcmVwbGFjZVZhcnMoaXRlbXNba2V5XSwgdmFycyk7XG4gICAgICAgICAgICAgIGNvbnN0IGlzRW1wdHlWYWx1ZSA9IGlzTnVsbGFibGUodmFsdWUpIHx8IGlzRW1wdHkkMyh2YWx1ZSk7XG4gICAgICAgICAgICAgIGlmIChpc0VtcHR5VmFsdWUgJiYgaXNOdWxsYWJsZShleHBlY3RlZFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzaW1pbGFyICYmIGlzRW1wdHlWYWx1ZSAmJiAhZm9ybWF0LmV4YWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICgoIXNpbWlsYXIgfHwgZm9ybWF0LmV4YWN0KSAmJiAhaXNFcSQzKHZhbHVlLCBub3JtYWxpemVTdHlsZVZhbHVlKGV4cGVjdGVkVmFsdWUsIGtleSkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChtYXRjaEF0dHJpYnV0ZXMgPyBkb20uZ2V0QXR0cmliKG5vZGUsIGl0ZW1zW2ldKSA6IGdldFN0eWxlKGRvbSwgbm9kZSwgaXRlbXNbaV0pKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBtYXRjaE5vZGUgPSAoZWQsIG5vZGUsIG5hbWUsIHZhcnMsIHNpbWlsYXIpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdExpc3QgPSBlZC5mb3JtYXR0ZXIuZ2V0KG5hbWUpO1xuICAgICAgY29uc3QgZG9tID0gZWQuZG9tO1xuICAgICAgaWYgKGZvcm1hdExpc3QgJiYgaXNFbGVtZW50JDYobm9kZSkpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtYXRMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0ID0gZm9ybWF0TGlzdFtpXTtcbiAgICAgICAgICBpZiAobWF0Y2hOYW1lKGVkLmRvbSwgbm9kZSwgZm9ybWF0KSAmJiBtYXRjaEl0ZW1zKGRvbSwgbm9kZSwgZm9ybWF0LCAnYXR0cmlidXRlcycsIHNpbWlsYXIsIHZhcnMpICYmIG1hdGNoSXRlbXMoZG9tLCBub2RlLCBmb3JtYXQsICdzdHlsZXMnLCBzaW1pbGFyLCB2YXJzKSkge1xuICAgICAgICAgICAgY29uc3QgY2xhc3NlcyA9IGZvcm1hdC5jbGFzc2VzO1xuICAgICAgICAgICAgaWYgKGNsYXNzZXMpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCBjbGFzc2VzLmxlbmd0aDsgeCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFlZC5kb20uaGFzQ2xhc3Mobm9kZSwgcmVwbGFjZVZhcnMoY2xhc3Nlc1t4XSwgdmFycykpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIGNvbnN0IG1hdGNoJDIgPSAoZWRpdG9yLCBuYW1lLCB2YXJzLCBub2RlLCBzaW1pbGFyKSA9PiB7XG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICByZXR1cm4gbWF0Y2hQYXJlbnRzKGVkaXRvciwgbm9kZSwgbmFtZSwgdmFycywgc2ltaWxhcik7XG4gICAgICB9XG4gICAgICBub2RlID0gZWRpdG9yLnNlbGVjdGlvbi5nZXROb2RlKCk7XG4gICAgICBpZiAobWF0Y2hQYXJlbnRzKGVkaXRvciwgbm9kZSwgbmFtZSwgdmFycywgc2ltaWxhcikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydE5vZGUgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KCk7XG4gICAgICBpZiAoc3RhcnROb2RlICE9PSBub2RlKSB7XG4gICAgICAgIGlmIChtYXRjaFBhcmVudHMoZWRpdG9yLCBzdGFydE5vZGUsIG5hbWUsIHZhcnMsIHNpbWlsYXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IG1hdGNoQWxsID0gKGVkaXRvciwgbmFtZXMsIHZhcnMpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZWRGb3JtYXROYW1lcyA9IFtdO1xuICAgICAgY29uc3QgY2hlY2tlZE1hcCA9IHt9O1xuICAgICAgY29uc3Qgc3RhcnRFbGVtZW50ID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCgpO1xuICAgICAgZWRpdG9yLmRvbS5nZXRQYXJlbnQoc3RhcnRFbGVtZW50LCBub2RlID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IG5hbWUgPSBuYW1lc1tpXTtcbiAgICAgICAgICBpZiAoIWNoZWNrZWRNYXBbbmFtZV0gJiYgbWF0Y2hOb2RlKGVkaXRvciwgbm9kZSwgbmFtZSwgdmFycykpIHtcbiAgICAgICAgICAgIGNoZWNrZWRNYXBbbmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgbWF0Y2hlZEZvcm1hdE5hbWVzLnB1c2gobmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCBlZGl0b3IuZG9tLmdldFJvb3QoKSk7XG4gICAgICByZXR1cm4gbWF0Y2hlZEZvcm1hdE5hbWVzO1xuICAgIH07XG4gICAgY29uc3QgY2xvc2VzdCA9IChlZGl0b3IsIG5hbWVzKSA9PiB7XG4gICAgICBjb25zdCBpc1Jvb3QgPSBlbG0gPT4gZXEoZWxtLCBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKSk7XG4gICAgICBjb25zdCBtYXRjaCA9IChlbG0sIG5hbWUpID0+IG1hdGNoTm9kZShlZGl0b3IsIGVsbS5kb20sIG5hbWUpID8gT3B0aW9uYWwuc29tZShuYW1lKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKGVkaXRvci5zZWxlY3Rpb24uZ2V0U3RhcnQodHJ1ZSkpLmJpbmQocmF3RWxtID0+IGNsb3Nlc3QkMShTdWdhckVsZW1lbnQuZnJvbURvbShyYXdFbG0pLCBlbG0gPT4gZmluZE1hcChuYW1lcywgbmFtZSA9PiBtYXRjaChlbG0sIG5hbWUpKSwgaXNSb290KSkuZ2V0T3JOdWxsKCk7XG4gICAgfTtcbiAgICBjb25zdCBjYW5BcHBseSA9IChlZGl0b3IsIG5hbWUpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdExpc3QgPSBlZGl0b3IuZm9ybWF0dGVyLmdldChuYW1lKTtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBpZiAoZm9ybWF0TGlzdCAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRWRpdGFibGUoKSkge1xuICAgICAgICBjb25zdCBzdGFydE5vZGUgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KCk7XG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBnZXRQYXJlbnRzJDIoZG9tLCBzdGFydE5vZGUpO1xuICAgICAgICBmb3IgKGxldCB4ID0gZm9ybWF0TGlzdC5sZW5ndGggLSAxOyB4ID49IDA7IHgtLSkge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGZvcm1hdExpc3RbeF07XG4gICAgICAgICAgaWYgKCFpc1NlbGVjdG9yRm9ybWF0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBpID0gcGFyZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKGRvbS5pcyhwYXJlbnRzW2ldLCBmb3JtYXQuc2VsZWN0b3IpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgY29uc3QgbWF0Y2hBbGxPbk5vZGUgPSAoZWRpdG9yLCBub2RlLCBmb3JtYXROYW1lcykgPT4gZm9sZGwoZm9ybWF0TmFtZXMsIChhY2MsIG5hbWUpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoU2ltaWxhciA9IGlzVmFyaWFibGVGb3JtYXROYW1lKGVkaXRvciwgbmFtZSk7XG4gICAgICBpZiAoZWRpdG9yLmZvcm1hdHRlci5tYXRjaE5vZGUobm9kZSwgbmFtZSwge30sIG1hdGNoU2ltaWxhcikpIHtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoW25hbWVdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgWldTUCA9IFpXU1AkMTtcbiAgICBjb25zdCBpbXBvcnROb2RlID0gKG93bmVyRG9jdW1lbnQsIG5vZGUpID0+IHtcbiAgICAgIHJldHVybiBvd25lckRvY3VtZW50LmltcG9ydE5vZGUobm9kZSwgdHJ1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRFbXB0eUNhcmV0Q29udGFpbmVycyA9IG5vZGUgPT4ge1xuICAgICAgY29uc3Qgbm9kZXMgPSBbXTtcbiAgICAgIGxldCB0ZW1wTm9kZSA9IG5vZGU7XG4gICAgICB3aGlsZSAodGVtcE5vZGUpIHtcbiAgICAgICAgaWYgKGlzVGV4dCRhKHRlbXBOb2RlKSAmJiB0ZW1wTm9kZS5kYXRhICE9PSBaV1NQIHx8IHRlbXBOb2RlLmNoaWxkTm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNFbGVtZW50JDYodGVtcE5vZGUpKSB7XG4gICAgICAgICAgbm9kZXMucHVzaCh0ZW1wTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGVtcE5vZGUgPSB0ZW1wTm9kZS5maXJzdENoaWxkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5vZGVzO1xuICAgIH07XG4gICAgY29uc3QgaXNDYXJldENvbnRhaW5lckVtcHR5ID0gbm9kZSA9PiB7XG4gICAgICByZXR1cm4gZ2V0RW1wdHlDYXJldENvbnRhaW5lcnMobm9kZSkubGVuZ3RoID4gMDtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRGaXJzdFRleHROb2RlID0gbm9kZSA9PiB7XG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICBjb25zdCB3YWxrZXIgPSBuZXcgRG9tVHJlZVdhbGtlcihub2RlLCBub2RlKTtcbiAgICAgICAgZm9yIChsZXQgdGVtcE5vZGUgPSB3YWxrZXIuY3VycmVudCgpOyB0ZW1wTm9kZTsgdGVtcE5vZGUgPSB3YWxrZXIubmV4dCgpKSB7XG4gICAgICAgICAgaWYgKGlzVGV4dCRhKHRlbXBOb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVDYXJldENvbnRhaW5lciA9IGZpbGwgPT4ge1xuICAgICAgY29uc3QgY2FyZXRDb250YWluZXIgPSBTdWdhckVsZW1lbnQuZnJvbVRhZygnc3BhbicpO1xuICAgICAgc2V0QWxsJDEoY2FyZXRDb250YWluZXIsIHtcbiAgICAgICAgJ2lkJzogQ0FSRVRfSUQsXG4gICAgICAgICdkYXRhLW1jZS1ib2d1cyc6ICcxJyxcbiAgICAgICAgJ2RhdGEtbWNlLXR5cGUnOiAnZm9ybWF0LWNhcmV0J1xuICAgICAgfSk7XG4gICAgICBpZiAoZmlsbCkge1xuICAgICAgICBhcHBlbmQkMShjYXJldENvbnRhaW5lciwgU3VnYXJFbGVtZW50LmZyb21UZXh0KFpXU1ApKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYXJldENvbnRhaW5lcjtcbiAgICB9O1xuICAgIGNvbnN0IHRyaW1ad3NwRnJvbUNhcmV0Q29udGFpbmVyID0gY2FyZXRDb250YWluZXJOb2RlID0+IHtcbiAgICAgIGNvbnN0IHRleHROb2RlID0gZmluZEZpcnN0VGV4dE5vZGUoY2FyZXRDb250YWluZXJOb2RlKTtcbiAgICAgIGlmICh0ZXh0Tm9kZSAmJiB0ZXh0Tm9kZS5kYXRhLmNoYXJBdCgwKSA9PT0gWldTUCkge1xuICAgICAgICB0ZXh0Tm9kZS5kZWxldGVEYXRhKDAsIDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRleHROb2RlO1xuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlQ2FyZXRDb250YWluZXJOb2RlID0gKGVkaXRvciwgbm9kZSwgbW92ZUNhcmV0ID0gdHJ1ZSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbSwgc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgIGlmIChpc0NhcmV0Q29udGFpbmVyRW1wdHkobm9kZSkpIHtcbiAgICAgICAgZGVsZXRlRWxlbWVudCQyKGVkaXRvciwgZmFsc2UsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5vZGUpLCBtb3ZlQ2FyZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgcm5nID0gc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgICBjb25zdCBibG9jayA9IGRvbS5nZXRQYXJlbnQobm9kZSwgZG9tLmlzQmxvY2spO1xuICAgICAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IHJuZy5zdGFydENvbnRhaW5lcjtcbiAgICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSBybmcuc3RhcnRPZmZzZXQ7XG4gICAgICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IHJuZy5lbmRDb250YWluZXI7XG4gICAgICAgIGNvbnN0IGVuZE9mZnNldCA9IHJuZy5lbmRPZmZzZXQ7XG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gdHJpbVp3c3BGcm9tQ2FyZXRDb250YWluZXIobm9kZSk7XG4gICAgICAgIGRvbS5yZW1vdmUobm9kZSwgdHJ1ZSk7XG4gICAgICAgIGlmIChzdGFydENvbnRhaW5lciA9PT0gdGV4dE5vZGUgJiYgc3RhcnRPZmZzZXQgPiAwKSB7XG4gICAgICAgICAgcm5nLnNldFN0YXJ0KHRleHROb2RlLCBzdGFydE9mZnNldCAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbmRDb250YWluZXIgPT09IHRleHROb2RlICYmIGVuZE9mZnNldCA+IDApIHtcbiAgICAgICAgICBybmcuc2V0RW5kKHRleHROb2RlLCBlbmRPZmZzZXQgLSAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmxvY2sgJiYgZG9tLmlzRW1wdHkoYmxvY2spKSB7XG4gICAgICAgICAgZmlsbFdpdGhQYWRkaW5nQnIoU3VnYXJFbGVtZW50LmZyb21Eb20oYmxvY2spKTtcbiAgICAgICAgfVxuICAgICAgICBzZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVDYXJldENvbnRhaW5lciA9IChlZGl0b3IsIG5vZGUsIG1vdmVDYXJldCA9IHRydWUpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb20sIHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3Rpb247XG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgbm9kZSA9IGdldFBhcmVudENhcmV0Q29udGFpbmVyKGVkaXRvci5nZXRCb2R5KCksIHNlbGVjdGlvbi5nZXRTdGFydCgpKTtcbiAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgd2hpbGUgKG5vZGUgPSBkb20uZ2V0KENBUkVUX0lEKSkge1xuICAgICAgICAgICAgcmVtb3ZlQ2FyZXRDb250YWluZXJOb2RlKGVkaXRvciwgbm9kZSwgbW92ZUNhcmV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZUNhcmV0Q29udGFpbmVyTm9kZShlZGl0b3IsIG5vZGUsIG1vdmVDYXJldCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnRDYXJldENvbnRhaW5lck5vZGUgPSAoZWRpdG9yLCBjYXJldENvbnRhaW5lciwgZm9ybWF0Tm9kZSkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBibG9jayA9IGRvbS5nZXRQYXJlbnQoZm9ybWF0Tm9kZSwgY3VycnkoaXNUZXh0QmxvY2skMSwgZWRpdG9yLnNjaGVtYSkpO1xuICAgICAgaWYgKGJsb2NrICYmIGRvbS5pc0VtcHR5KGJsb2NrKSkge1xuICAgICAgICAoX2EgPSBmb3JtYXROb2RlLnBhcmVudE5vZGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZXBsYWNlQ2hpbGQoY2FyZXRDb250YWluZXIsIGZvcm1hdE5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVtb3ZlVHJhaWxpbmdCcihTdWdhckVsZW1lbnQuZnJvbURvbShmb3JtYXROb2RlKSk7XG4gICAgICAgIGlmIChkb20uaXNFbXB0eShmb3JtYXROb2RlKSkge1xuICAgICAgICAgIChfYiA9IGZvcm1hdE5vZGUucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnJlcGxhY2VDaGlsZChjYXJldENvbnRhaW5lciwgZm9ybWF0Tm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9tLmluc2VydEFmdGVyKGNhcmV0Q29udGFpbmVyLCBmb3JtYXROb2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYXBwZW5kTm9kZSA9IChwYXJlbnROb2RlLCBub2RlKSA9PiB7XG4gICAgICBwYXJlbnROb2RlLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnRGb3JtYXROb2Rlc0ludG9DYXJldENvbnRhaW5lciA9IChmb3JtYXROb2RlcywgY2FyZXRDb250YWluZXIpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGNvbnN0IGlubmVyTW9zdEZvcm1hdE5vZGUgPSBmb2xkcihmb3JtYXROb2RlcywgKHBhcmVudE5vZGUsIGZvcm1hdE5vZGUpID0+IHtcbiAgICAgICAgcmV0dXJuIGFwcGVuZE5vZGUocGFyZW50Tm9kZSwgZm9ybWF0Tm9kZS5jbG9uZU5vZGUoZmFsc2UpKTtcbiAgICAgIH0sIGNhcmV0Q29udGFpbmVyKTtcbiAgICAgIGNvbnN0IGRvYyA9IChfYSA9IGlubmVyTW9zdEZvcm1hdE5vZGUub3duZXJEb2N1bWVudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZG9jdW1lbnQ7XG4gICAgICByZXR1cm4gYXBwZW5kTm9kZShpbm5lck1vc3RGb3JtYXROb2RlLCBkb2MuY3JlYXRlVGV4dE5vZGUoWldTUCkpO1xuICAgIH07XG4gICAgY29uc3QgY2xlYW5Gb3JtYXROb2RlID0gKGVkaXRvciwgY2FyZXRDb250YWluZXIsIGZvcm1hdE5vZGUsIG5hbWUsIHZhcnMsIHNpbWlsYXIpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGVkaXRvci5mb3JtYXR0ZXI7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgY29uc3QgdmFsaWRGb3JtYXRzID0gZmlsdGVyJDUoa2V5cyhmb3JtYXR0ZXIuZ2V0KCkpLCBmb3JtYXROYW1lID0+IGZvcm1hdE5hbWUgIT09IG5hbWUgJiYgIWNvbnRhaW5zJDEoZm9ybWF0TmFtZSwgJ3JlbW92ZWZvcm1hdCcpKTtcbiAgICAgIGNvbnN0IG1hdGNoZWRGb3JtYXRzID0gbWF0Y2hBbGxPbk5vZGUoZWRpdG9yLCBmb3JtYXROb2RlLCB2YWxpZEZvcm1hdHMpO1xuICAgICAgY29uc3QgdW5pcXVlRm9ybWF0cyA9IGZpbHRlciQ1KG1hdGNoZWRGb3JtYXRzLCBmbXROYW1lID0+ICFhcmVTaW1pbGFyRm9ybWF0cyhlZGl0b3IsIGZtdE5hbWUsIG5hbWUpKTtcbiAgICAgIGlmICh1bmlxdWVGb3JtYXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgY2xvbmVkRm9ybWF0Tm9kZSA9IGZvcm1hdE5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcbiAgICAgICAgZG9tLmFkZChjYXJldENvbnRhaW5lciwgY2xvbmVkRm9ybWF0Tm9kZSk7XG4gICAgICAgIGZvcm1hdHRlci5yZW1vdmUobmFtZSwgdmFycywgY2xvbmVkRm9ybWF0Tm9kZSwgc2ltaWxhcik7XG4gICAgICAgIGRvbS5yZW1vdmUoY2xvbmVkRm9ybWF0Tm9kZSk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGNsb25lZEZvcm1hdE5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5Q2FyZXRGb3JtYXQgPSAoZWRpdG9yLCBuYW1lLCB2YXJzKSA9PiB7XG4gICAgICBsZXQgY2FyZXRDb250YWluZXI7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uO1xuICAgICAgY29uc3QgZm9ybWF0TGlzdCA9IGVkaXRvci5mb3JtYXR0ZXIuZ2V0KG5hbWUpO1xuICAgICAgaWYgKCFmb3JtYXRMaXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlbGVjdGlvblJuZyA9IHNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIGxldCBvZmZzZXQgPSBzZWxlY3Rpb25Sbmcuc3RhcnRPZmZzZXQ7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBzZWxlY3Rpb25Sbmcuc3RhcnRDb250YWluZXI7XG4gICAgICBjb25zdCB0ZXh0ID0gY29udGFpbmVyLm5vZGVWYWx1ZTtcbiAgICAgIGNhcmV0Q29udGFpbmVyID0gZ2V0UGFyZW50Q2FyZXRDb250YWluZXIoZWRpdG9yLmdldEJvZHkoKSwgc2VsZWN0aW9uLmdldFN0YXJ0KCkpO1xuICAgICAgY29uc3Qgd29yZGNoYXJSZWdleCA9IC9bXlxcc1xcdTAwYTBcXHUwMGFkXFx1MjAwYlxcdWZlZmZdLztcbiAgICAgIGlmICh0ZXh0ICYmIG9mZnNldCA+IDAgJiYgb2Zmc2V0IDwgdGV4dC5sZW5ndGggJiYgd29yZGNoYXJSZWdleC50ZXN0KHRleHQuY2hhckF0KG9mZnNldCkpICYmIHdvcmRjaGFyUmVnZXgudGVzdCh0ZXh0LmNoYXJBdChvZmZzZXQgLSAxKSkpIHtcbiAgICAgICAgY29uc3QgYm9va21hcmsgPSBzZWxlY3Rpb24uZ2V0Qm9va21hcmsoKTtcbiAgICAgICAgc2VsZWN0aW9uUm5nLmNvbGxhcHNlKHRydWUpO1xuICAgICAgICBsZXQgcm5nID0gZXhwYW5kUm5nKGVkaXRvci5kb20sIHNlbGVjdGlvblJuZywgZm9ybWF0TGlzdCk7XG4gICAgICAgIHJuZyA9IHNwbGl0KHJuZyk7XG4gICAgICAgIGVkaXRvci5mb3JtYXR0ZXIuYXBwbHkobmFtZSwgdmFycywgcm5nKTtcbiAgICAgICAgc2VsZWN0aW9uLm1vdmVUb0Jvb2ttYXJrKGJvb2ttYXJrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB0ZXh0Tm9kZSA9IGNhcmV0Q29udGFpbmVyID8gZmluZEZpcnN0VGV4dE5vZGUoY2FyZXRDb250YWluZXIpIDogbnVsbDtcbiAgICAgICAgaWYgKCFjYXJldENvbnRhaW5lciB8fCAodGV4dE5vZGUgPT09IG51bGwgfHwgdGV4dE5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRleHROb2RlLmRhdGEpICE9PSBaV1NQKSB7XG4gICAgICAgICAgY2FyZXRDb250YWluZXIgPSBpbXBvcnROb2RlKGVkaXRvci5nZXREb2MoKSwgY3JlYXRlQ2FyZXRDb250YWluZXIodHJ1ZSkuZG9tKTtcbiAgICAgICAgICB0ZXh0Tm9kZSA9IGNhcmV0Q29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgc2VsZWN0aW9uUm5nLmluc2VydE5vZGUoY2FyZXRDb250YWluZXIpO1xuICAgICAgICAgIG9mZnNldCA9IDE7XG4gICAgICAgICAgZWRpdG9yLmZvcm1hdHRlci5hcHBseShuYW1lLCB2YXJzLCBjYXJldENvbnRhaW5lcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWRpdG9yLmZvcm1hdHRlci5hcHBseShuYW1lLCB2YXJzLCBjYXJldENvbnRhaW5lcik7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZWN0aW9uLnNldEN1cnNvckxvY2F0aW9uKHRleHROb2RlLCBvZmZzZXQpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlQ2FyZXRGb3JtYXQgPSAoZWRpdG9yLCBuYW1lLCB2YXJzLCBzaW1pbGFyKSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgIGxldCBoYXNDb250ZW50QWZ0ZXIgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGZvcm1hdExpc3QgPSBlZGl0b3IuZm9ybWF0dGVyLmdldChuYW1lKTtcbiAgICAgIGlmICghZm9ybWF0TGlzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBybmcgPSBzZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBybmcuc3RhcnRDb250YWluZXI7XG4gICAgICBjb25zdCBvZmZzZXQgPSBybmcuc3RhcnRPZmZzZXQ7XG4gICAgICBsZXQgbm9kZSA9IGNvbnRhaW5lcjtcbiAgICAgIGlmIChpc1RleHQkYShjb250YWluZXIpKSB7XG4gICAgICAgIGlmIChvZmZzZXQgIT09IGNvbnRhaW5lci5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgIGhhc0NvbnRlbnRBZnRlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcbiAgICAgIGxldCBmb3JtYXROb2RlO1xuICAgICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgaWYgKG1hdGNoTm9kZShlZGl0b3IsIG5vZGUsIG5hbWUsIHZhcnMsIHNpbWlsYXIpKSB7XG4gICAgICAgICAgZm9ybWF0Tm9kZSA9IG5vZGU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgICBoYXNDb250ZW50QWZ0ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudHMucHVzaChub2RlKTtcbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIGlmICghZm9ybWF0Tm9kZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoaGFzQ29udGVudEFmdGVyKSB7XG4gICAgICAgIGNvbnN0IGJvb2ttYXJrID0gc2VsZWN0aW9uLmdldEJvb2ttYXJrKCk7XG4gICAgICAgIHJuZy5jb2xsYXBzZSh0cnVlKTtcbiAgICAgICAgbGV0IGV4cGFuZGVkUm5nID0gZXhwYW5kUm5nKGRvbSwgcm5nLCBmb3JtYXRMaXN0LCB0cnVlKTtcbiAgICAgICAgZXhwYW5kZWRSbmcgPSBzcGxpdChleHBhbmRlZFJuZyk7XG4gICAgICAgIGVkaXRvci5mb3JtYXR0ZXIucmVtb3ZlKG5hbWUsIHZhcnMsIGV4cGFuZGVkUm5nLCBzaW1pbGFyKTtcbiAgICAgICAgc2VsZWN0aW9uLm1vdmVUb0Jvb2ttYXJrKGJvb2ttYXJrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNhcmV0Q29udGFpbmVyID0gZ2V0UGFyZW50Q2FyZXRDb250YWluZXIoZWRpdG9yLmdldEJvZHkoKSwgZm9ybWF0Tm9kZSk7XG4gICAgICAgIGNvbnN0IG5ld0NhcmV0Q29udGFpbmVyID0gY3JlYXRlQ2FyZXRDb250YWluZXIoZmFsc2UpLmRvbTtcbiAgICAgICAgaW5zZXJ0Q2FyZXRDb250YWluZXJOb2RlKGVkaXRvciwgbmV3Q2FyZXRDb250YWluZXIsIGNhcmV0Q29udGFpbmVyICE9PSBudWxsICYmIGNhcmV0Q29udGFpbmVyICE9PSB2b2lkIDAgPyBjYXJldENvbnRhaW5lciA6IGZvcm1hdE5vZGUpO1xuICAgICAgICBjb25zdCBjbGVhbmVkRm9ybWF0Tm9kZSA9IGNsZWFuRm9ybWF0Tm9kZShlZGl0b3IsIG5ld0NhcmV0Q29udGFpbmVyLCBmb3JtYXROb2RlLCBuYW1lLCB2YXJzLCBzaW1pbGFyKTtcbiAgICAgICAgY29uc3QgY2FyZXRUZXh0Tm9kZSA9IGluc2VydEZvcm1hdE5vZGVzSW50b0NhcmV0Q29udGFpbmVyKHBhcmVudHMuY29uY2F0KGNsZWFuZWRGb3JtYXROb2RlLnRvQXJyYXkoKSksIG5ld0NhcmV0Q29udGFpbmVyKTtcbiAgICAgICAgaWYgKGNhcmV0Q29udGFpbmVyKSB7XG4gICAgICAgICAgcmVtb3ZlQ2FyZXRDb250YWluZXJOb2RlKGVkaXRvciwgY2FyZXRDb250YWluZXIsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBzZWxlY3Rpb24uc2V0Q3Vyc29yTG9jYXRpb24oY2FyZXRUZXh0Tm9kZSwgMSk7XG4gICAgICAgIGlmIChkb20uaXNFbXB0eShmb3JtYXROb2RlKSkge1xuICAgICAgICAgIGRvbS5yZW1vdmUoZm9ybWF0Tm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGRpc2FibGVDYXJldENvbnRhaW5lciA9IChlZGl0b3IsIGtleUNvZGUsIG1vdmVDYXJldCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbiwgYm9keSA9IGVkaXRvci5nZXRCb2R5KCk7XG4gICAgICByZW1vdmVDYXJldENvbnRhaW5lcihlZGl0b3IsIG51bGwsIG1vdmVDYXJldCk7XG4gICAgICBpZiAoKGtleUNvZGUgPT09IDggfHwga2V5Q29kZSA9PT0gNDYpICYmIHNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpICYmIHNlbGVjdGlvbi5nZXRTdGFydCgpLmlubmVySFRNTCA9PT0gWldTUCkge1xuICAgICAgICByZW1vdmVDYXJldENvbnRhaW5lcihlZGl0b3IsIGdldFBhcmVudENhcmV0Q29udGFpbmVyKGJvZHksIHNlbGVjdGlvbi5nZXRTdGFydCgpKSk7XG4gICAgICB9XG4gICAgICBpZiAoa2V5Q29kZSA9PT0gMzcgfHwga2V5Q29kZSA9PT0gMzkpIHtcbiAgICAgICAgcmVtb3ZlQ2FyZXRDb250YWluZXIoZWRpdG9yLCBnZXRQYXJlbnRDYXJldENvbnRhaW5lcihib2R5LCBzZWxlY3Rpb24uZ2V0U3RhcnQoKSkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZW5kc1dpdGhOYnNwID0gZWxlbWVudCA9PiBpc1RleHQkYShlbGVtZW50KSAmJiBlbmRzV2l0aChlbGVtZW50LmRhdGEsIG5ic3ApO1xuICAgIGNvbnN0IHNldHVwJHUgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLm9uKCdtb3VzZXVwIGtleWRvd24nLCBlID0+IHtcbiAgICAgICAgZGlzYWJsZUNhcmV0Q29udGFpbmVyKGVkaXRvciwgZS5rZXlDb2RlLCBlbmRzV2l0aE5ic3AoZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKS5lbmRDb250YWluZXIpKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlQ2FyZXRGb3JtYXQgPSBmb3JtYXROb2RlcyA9PiB7XG4gICAgICBjb25zdCBjYXJldENvbnRhaW5lciA9IGNyZWF0ZUNhcmV0Q29udGFpbmVyKGZhbHNlKTtcbiAgICAgIGNvbnN0IGlubmVyTW9zdCA9IGluc2VydEZvcm1hdE5vZGVzSW50b0NhcmV0Q29udGFpbmVyKGZvcm1hdE5vZGVzLCBjYXJldENvbnRhaW5lci5kb20pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2FyZXRDb250YWluZXIsXG4gICAgICAgIGNhcmV0UG9zaXRpb246IENhcmV0UG9zaXRpb24oaW5uZXJNb3N0LCAwKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHJlcGxhY2VXaXRoQ2FyZXRGb3JtYXQgPSAodGFyZ2V0Tm9kZSwgZm9ybWF0Tm9kZXMpID0+IHtcbiAgICAgIGNvbnN0IHtjYXJldENvbnRhaW5lciwgY2FyZXRQb3NpdGlvbn0gPSBjcmVhdGVDYXJldEZvcm1hdChmb3JtYXROb2Rlcyk7XG4gICAgICBiZWZvcmUkMyhTdWdhckVsZW1lbnQuZnJvbURvbSh0YXJnZXROb2RlKSwgY2FyZXRDb250YWluZXIpO1xuICAgICAgcmVtb3ZlJDUoU3VnYXJFbGVtZW50LmZyb21Eb20odGFyZ2V0Tm9kZSkpO1xuICAgICAgcmV0dXJuIGNhcmV0UG9zaXRpb247XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVDYXJldEZvcm1hdEF0U3RhcnQkMSA9IChybmcsIGZvcm1hdE5vZGVzKSA9PiB7XG4gICAgICBjb25zdCB7Y2FyZXRDb250YWluZXIsIGNhcmV0UG9zaXRpb259ID0gY3JlYXRlQ2FyZXRGb3JtYXQoZm9ybWF0Tm9kZXMpO1xuICAgICAgcm5nLmluc2VydE5vZGUoY2FyZXRDb250YWluZXIuZG9tKTtcbiAgICAgIHJldHVybiBjYXJldFBvc2l0aW9uO1xuICAgIH07XG4gICAgY29uc3QgaXNGb3JtYXRFbGVtZW50ID0gKGVkaXRvciwgZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgaW5saW5lRWxlbWVudHMgPSBlZGl0b3Iuc2NoZW1hLmdldFRleHRJbmxpbmVFbGVtZW50cygpO1xuICAgICAgcmV0dXJuIGhhcyQyKGlubGluZUVsZW1lbnRzLCBuYW1lKGVsZW1lbnQpKSAmJiAhaXNDYXJldE5vZGUoZWxlbWVudC5kb20pICYmICFpc0JvZ3VzJDIoZWxlbWVudC5kb20pO1xuICAgIH07XG4gICAgY29uc3QgaXNFbXB0eUNhcmV0Rm9ybWF0RWxlbWVudCA9IGVsZW1lbnQgPT4ge1xuICAgICAgcmV0dXJuIGlzQ2FyZXROb2RlKGVsZW1lbnQuZG9tKSAmJiBpc0NhcmV0Q29udGFpbmVyRW1wdHkoZWxlbWVudC5kb20pO1xuICAgIH07XG5cbiAgICBjb25zdCBwb3N0UHJvY2Vzc0hvb2tzID0ge307XG4gICAgY29uc3QgaXNQcmUgPSBtYXRjaE5vZGVOYW1lcyhbJ3ByZSddKTtcbiAgICBjb25zdCBhZGRQb3N0UHJvY2Vzc0hvb2sgPSAobmFtZSwgaG9vaykgPT4ge1xuICAgICAgY29uc3QgaG9va3MgPSBwb3N0UHJvY2Vzc0hvb2tzW25hbWVdO1xuICAgICAgaWYgKCFob29rcykge1xuICAgICAgICBwb3N0UHJvY2Vzc0hvb2tzW25hbWVdID0gW107XG4gICAgICB9XG4gICAgICBwb3N0UHJvY2Vzc0hvb2tzW25hbWVdLnB1c2goaG9vayk7XG4gICAgfTtcbiAgICBjb25zdCBwb3N0UHJvY2VzcyQxID0gKG5hbWUsIGVkaXRvcikgPT4ge1xuICAgICAgaWYgKGhhcyQyKHBvc3RQcm9jZXNzSG9va3MsIG5hbWUpKSB7XG4gICAgICAgIGVhY2gkZShwb3N0UHJvY2Vzc0hvb2tzW25hbWVdLCBob29rID0+IHtcbiAgICAgICAgICBob29rKGVkaXRvcik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgYWRkUG9zdFByb2Nlc3NIb29rKCdwcmUnLCBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIGNvbnN0IGhhc1ByZVNpYmxpbmcgPSBibG9ja3MgPT4gcHJlID0+IHtcbiAgICAgICAgY29uc3QgcHJldiA9IHByZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgIHJldHVybiBpc1ByZShwcmV2KSAmJiBjb250YWlucyQyKGJsb2NrcywgcHJldik7XG4gICAgICB9O1xuICAgICAgY29uc3Qgam9pblByZSA9IChwcmUxLCBwcmUyKSA9PiB7XG4gICAgICAgIGNvbnN0IHNQcmUyID0gU3VnYXJFbGVtZW50LmZyb21Eb20ocHJlMik7XG4gICAgICAgIGNvbnN0IGRvYyA9IGRvY3VtZW50T3JPd25lcihzUHJlMikuZG9tO1xuICAgICAgICByZW1vdmUkNShzUHJlMik7XG4gICAgICAgIGFwcGVuZChTdWdhckVsZW1lbnQuZnJvbURvbShwcmUxKSwgW1xuICAgICAgICAgIFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdicicsIGRvYyksXG4gICAgICAgICAgU3VnYXJFbGVtZW50LmZyb21UYWcoJ2JyJywgZG9jKSxcbiAgICAgICAgICAuLi5jaGlsZHJlbiQxKHNQcmUyKVxuICAgICAgICBdKTtcbiAgICAgIH07XG4gICAgICBpZiAoIXJuZy5jb2xsYXBzZWQpIHtcbiAgICAgICAgY29uc3QgYmxvY2tzID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRTZWxlY3RlZEJsb2NrcygpO1xuICAgICAgICBjb25zdCBwcmVCbG9ja3MgPSBmaWx0ZXIkNShmaWx0ZXIkNShibG9ja3MsIGlzUHJlKSwgaGFzUHJlU2libGluZyhibG9ja3MpKTtcbiAgICAgICAgZWFjaCRlKHByZUJsb2NrcywgcHJlID0+IHtcbiAgICAgICAgICBqb2luUHJlKHByZS5wcmV2aW91c1NpYmxpbmcsIHByZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgbGlzdEl0ZW1TdHlsZXMgPSBbXG4gICAgICAnZm9udFdlaWdodCcsXG4gICAgICAnZm9udFN0eWxlJyxcbiAgICAgICdjb2xvcicsXG4gICAgICAnZm9udFNpemUnLFxuICAgICAgJ2ZvbnRGYW1pbHknXG4gICAgXTtcbiAgICBjb25zdCBoYXNMaXN0U3R5bGVzID0gZm10ID0+IGlzT2JqZWN0KGZtdC5zdHlsZXMpICYmIGV4aXN0cyhrZXlzKGZtdC5zdHlsZXMpLCBuYW1lID0+IGNvbnRhaW5zJDIobGlzdEl0ZW1TdHlsZXMsIG5hbWUpKTtcbiAgICBjb25zdCBmaW5kRXhwYW5kZWRMaXN0SXRlbUZvcm1hdCA9IGZvcm1hdHMgPT4gZmluZCQyKGZvcm1hdHMsIGZtdCA9PiBpc0lubGluZUZvcm1hdChmbXQpICYmIGZtdC5pbmxpbmUgPT09ICdzcGFuJyAmJiBoYXNMaXN0U3R5bGVzKGZtdCkpO1xuICAgIGNvbnN0IGdldEV4cGFuZGVkTGlzdEl0ZW1Gb3JtYXQgPSAoZm9ybWF0dGVyLCBmb3JtYXQpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdExpc3QgPSBmb3JtYXR0ZXIuZ2V0KGZvcm1hdCk7XG4gICAgICByZXR1cm4gaXNBcnJheSQxKGZvcm1hdExpc3QpID8gZmluZEV4cGFuZGVkTGlzdEl0ZW1Gb3JtYXQoZm9ybWF0TGlzdCkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBpc1JuZ1N0YXJ0QXRTdGFydE9mRWxlbWVudCA9IChybmcsIGVsbSkgPT4gcHJldlBvc2l0aW9uKGVsbSwgQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChybmcpKS5pc05vbmUoKTtcbiAgICBjb25zdCBpc1JuZ0VuZEF0RW5kT2ZFbGVtZW50ID0gKHJuZywgZWxtKSA9PiB7XG4gICAgICByZXR1cm4gbmV4dFBvc2l0aW9uKGVsbSwgQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VFbmQocm5nKSkuZXhpc3RzKHBvcyA9PiAhaXNCciQ2KHBvcy5nZXROb2RlKCkpIHx8IG5leHRQb3NpdGlvbihlbG0sIHBvcykuaXNTb21lKCkpID09PSBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IGlzRWRpdGFibGVMaXN0SXRlbSA9IGRvbSA9PiBlbG0gPT4gaXNMaXN0SXRlbSQyKGVsbSkgJiYgZG9tLmlzRWRpdGFibGUoZWxtKTtcbiAgICBjb25zdCBnZXRGdWxseVNlbGVjdGVkQmxvY2tzID0gc2VsZWN0aW9uID0+IHtcbiAgICAgIGNvbnN0IGJsb2NrcyA9IHNlbGVjdGlvbi5nZXRTZWxlY3RlZEJsb2NrcygpO1xuICAgICAgY29uc3Qgcm5nID0gc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGlmIChibG9ja3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBpc1JuZ1N0YXJ0QXRTdGFydE9mRWxlbWVudChybmcsIGJsb2Nrc1swXSkgJiYgaXNSbmdFbmRBdEVuZE9mRWxlbWVudChybmcsIGJsb2Nrc1swXSkgPyBibG9ja3MgOiBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZpcnN0ID0gaGVhZChibG9ja3MpLmZpbHRlcihlbG0gPT4gaXNSbmdTdGFydEF0U3RhcnRPZkVsZW1lbnQocm5nLCBlbG0pKS50b0FycmF5KCk7XG4gICAgICAgIGNvbnN0IGxhc3QgPSBsYXN0JDMoYmxvY2tzKS5maWx0ZXIoZWxtID0+IGlzUm5nRW5kQXRFbmRPZkVsZW1lbnQocm5nLCBlbG0pKS50b0FycmF5KCk7XG4gICAgICAgIGNvbnN0IG1pZGRsZSA9IGJsb2Nrcy5zbGljZSgxLCAtMSk7XG4gICAgICAgIHJldHVybiBmaXJzdC5jb25jYXQobWlkZGxlKS5jb25jYXQobGFzdCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRGdWxseVNlbGVjdGVkTGlzdEl0ZW1zID0gc2VsZWN0aW9uID0+IGZpbHRlciQ1KGdldEZ1bGx5U2VsZWN0ZWRCbG9ja3Moc2VsZWN0aW9uKSwgaXNFZGl0YWJsZUxpc3RJdGVtKHNlbGVjdGlvbi5kb20pKTtcbiAgICBjb25zdCBnZXRQYXJ0aWFsbHlTZWxlY3RlZExpc3RJdGVtcyA9IHNlbGVjdGlvbiA9PiBmaWx0ZXIkNShzZWxlY3Rpb24uZ2V0U2VsZWN0ZWRCbG9ja3MoKSwgaXNFZGl0YWJsZUxpc3RJdGVtKHNlbGVjdGlvbi5kb20pKTtcblxuICAgIGNvbnN0IGVhY2gkOCA9IFRvb2xzLmVhY2g7XG4gICAgY29uc3QgaXNFbGVtZW50Tm9kZSA9IG5vZGUgPT4gaXNFbGVtZW50JDYobm9kZSkgJiYgIWlzQm9va21hcmtOb2RlJDEobm9kZSkgJiYgIWlzQ2FyZXROb2RlKG5vZGUpICYmICFpc0JvZ3VzJDIobm9kZSk7XG4gICAgY29uc3QgZmluZEVsZW1lbnRTaWJsaW5nID0gKG5vZGUsIHNpYmxpbmdOYW1lKSA9PiB7XG4gICAgICBmb3IgKGxldCBzaWJsaW5nID0gbm9kZTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmdbc2libGluZ05hbWVdKSB7XG4gICAgICAgIGlmIChpc1RleHQkYShzaWJsaW5nKSAmJiBpc05vdEVtcHR5KHNpYmxpbmcuZGF0YSkpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNFbGVtZW50JDYoc2libGluZykgJiYgIWlzQm9va21hcmtOb2RlJDEoc2libGluZykpIHtcbiAgICAgICAgICByZXR1cm4gc2libGluZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfTtcbiAgICBjb25zdCBtZXJnZVNpYmxpbmdzTm9kZXMgPSAoZWRpdG9yLCBwcmV2LCBuZXh0KSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50VXRpbHMgPSBFbGVtZW50VXRpbHMoZWRpdG9yKTtcbiAgICAgIGNvbnN0IGlzUHJldkVkaXRhYmxlID0gaXNFbGVtZW50JDYocHJldikgJiYgaXNFZGl0YWJsZSQyKHByZXYpO1xuICAgICAgY29uc3QgaXNOZXh0RWRpdGFibGUgPSBpc0VsZW1lbnQkNihuZXh0KSAmJiBpc0VkaXRhYmxlJDIobmV4dCk7XG4gICAgICBpZiAoaXNQcmV2RWRpdGFibGUgJiYgaXNOZXh0RWRpdGFibGUpIHtcbiAgICAgICAgY29uc3QgcHJldlNpYmxpbmcgPSBmaW5kRWxlbWVudFNpYmxpbmcocHJldiwgJ3ByZXZpb3VzU2libGluZycpO1xuICAgICAgICBjb25zdCBuZXh0U2libGluZyA9IGZpbmRFbGVtZW50U2libGluZyhuZXh0LCAnbmV4dFNpYmxpbmcnKTtcbiAgICAgICAgaWYgKGVsZW1lbnRVdGlscy5jb21wYXJlKHByZXZTaWJsaW5nLCBuZXh0U2libGluZykpIHtcbiAgICAgICAgICBmb3IgKGxldCBzaWJsaW5nID0gcHJldlNpYmxpbmcubmV4dFNpYmxpbmc7IHNpYmxpbmcgJiYgc2libGluZyAhPT0gbmV4dFNpYmxpbmc7KSB7XG4gICAgICAgICAgICBjb25zdCB0bXBTaWJsaW5nID0gc2libGluZztcbiAgICAgICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgcHJldlNpYmxpbmcuYXBwZW5kQ2hpbGQodG1wU2libGluZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVkaXRvci5kb20ucmVtb3ZlKG5leHRTaWJsaW5nKTtcbiAgICAgICAgICBUb29scy5lYWNoKFRvb2xzLmdyZXAobmV4dFNpYmxpbmcuY2hpbGROb2RlcyksIG5vZGUgPT4ge1xuICAgICAgICAgICAgcHJldlNpYmxpbmcuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHByZXZTaWJsaW5nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9O1xuICAgIGNvbnN0IG1lcmdlU2libGluZ3MgPSAoZWRpdG9yLCBmb3JtYXQsIHZhcnMsIG5vZGUpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGlmIChub2RlICYmIGZvcm1hdC5tZXJnZV9zaWJsaW5ncyAhPT0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgbmV3Tm9kZSA9IChfYSA9IG1lcmdlU2libGluZ3NOb2RlcyhlZGl0b3IsIGdldE5vbldoaXRlU3BhY2VTaWJsaW5nKG5vZGUpLCBub2RlKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbm9kZTtcbiAgICAgICAgbWVyZ2VTaWJsaW5nc05vZGVzKGVkaXRvciwgbmV3Tm9kZSwgZ2V0Tm9uV2hpdGVTcGFjZVNpYmxpbmcobmV3Tm9kZSwgdHJ1ZSkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY2xlYXJDaGlsZFN0eWxlcyA9IChkb20sIGZvcm1hdCwgbm9kZSkgPT4ge1xuICAgICAgaWYgKGZvcm1hdC5jbGVhcl9jaGlsZF9zdHlsZXMpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSBmb3JtYXQubGlua3MgPyAnKjpub3QoYSknIDogJyonO1xuICAgICAgICBlYWNoJDgoZG9tLnNlbGVjdChzZWxlY3Rvciwgbm9kZSksIGNoaWxkTm9kZSA9PiB7XG4gICAgICAgICAgaWYgKGlzRWxlbWVudE5vZGUoY2hpbGROb2RlKSAmJiBpc0VkaXRhYmxlJDIoY2hpbGROb2RlKSkge1xuICAgICAgICAgICAgZWFjaCQ4KGZvcm1hdC5zdHlsZXMsIChfdmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgZG9tLnNldFN0eWxlKGNoaWxkTm9kZSwgbmFtZSwgJycpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHByb2Nlc3NDaGlsZEVsZW1lbnRzID0gKG5vZGUsIGZpbHRlciwgcHJvY2VzcykgPT4ge1xuICAgICAgZWFjaCQ4KG5vZGUuY2hpbGROb2Rlcywgbm9kZSA9PiB7XG4gICAgICAgIGlmIChpc0VsZW1lbnROb2RlKG5vZGUpKSB7XG4gICAgICAgICAgaWYgKGZpbHRlcihub2RlKSkge1xuICAgICAgICAgICAgcHJvY2Vzcyhub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5vZGUuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgICAgICBwcm9jZXNzQ2hpbGRFbGVtZW50cyhub2RlLCBmaWx0ZXIsIHByb2Nlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCB1bndyYXBFbXB0eVNwYW4gPSAoZG9tLCBub2RlKSA9PiB7XG4gICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gJ1NQQU4nICYmIGRvbS5nZXRBdHRyaWJzKG5vZGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkb20ucmVtb3ZlKG5vZGUsIHRydWUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaGFzU3R5bGUgPSAoZG9tLCBuYW1lKSA9PiBub2RlID0+ICEhKG5vZGUgJiYgZ2V0U3R5bGUoZG9tLCBub2RlLCBuYW1lKSk7XG4gICAgY29uc3QgYXBwbHlTdHlsZSA9IChkb20sIG5hbWUsIHZhbHVlKSA9PiBub2RlID0+IHtcbiAgICAgIGRvbS5zZXRTdHlsZShub2RlLCBuYW1lLCB2YWx1ZSk7XG4gICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoJ3N0eWxlJykgPT09ICcnKSB7XG4gICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgfVxuICAgICAgdW53cmFwRW1wdHlTcGFuKGRvbSwgbm9kZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbW92ZVJlc3VsdCA9IEFkdC5nZW5lcmF0ZShbXG4gICAgICB7IGtlZXA6IFtdIH0sXG4gICAgICB7IHJlbmFtZTogWyduYW1lJ10gfSxcbiAgICAgIHsgcmVtb3ZlZDogW10gfVxuICAgIF0pO1xuICAgIGNvbnN0IE1DRV9BVFRSX1JFID0gL14oc3JjfGhyZWZ8c3R5bGUpJC87XG4gICAgY29uc3QgZWFjaCQ3ID0gVG9vbHMuZWFjaDtcbiAgICBjb25zdCBpc0VxJDIgPSBpc0VxJDU7XG4gICAgY29uc3QgaXNUYWJsZUNlbGxPclJvdyA9IG5vZGUgPT4gL14oVFJ8VEh8VEQpJC8udGVzdChub2RlLm5vZGVOYW1lKTtcbiAgICBjb25zdCBpc0NoaWxkT2ZJbmxpbmVQYXJlbnQgPSAoZG9tLCBub2RlLCBwYXJlbnQpID0+IGRvbS5pc0NoaWxkT2Yobm9kZSwgcGFyZW50KSAmJiBub2RlICE9PSBwYXJlbnQgJiYgIWRvbS5pc0Jsb2NrKHBhcmVudCk7XG4gICAgY29uc3QgZ2V0Q29udGFpbmVyID0gKGVkLCBybmcsIHN0YXJ0KSA9PiB7XG4gICAgICBsZXQgY29udGFpbmVyID0gcm5nW3N0YXJ0ID8gJ3N0YXJ0Q29udGFpbmVyJyA6ICdlbmRDb250YWluZXInXTtcbiAgICAgIGxldCBvZmZzZXQgPSBybmdbc3RhcnQgPyAnc3RhcnRPZmZzZXQnIDogJ2VuZE9mZnNldCddO1xuICAgICAgaWYgKGlzRWxlbWVudCQ2KGNvbnRhaW5lcikpIHtcbiAgICAgICAgY29uc3QgbGFzdElkeCA9IGNvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmICghc3RhcnQgJiYgb2Zmc2V0KSB7XG4gICAgICAgICAgb2Zmc2V0LS07XG4gICAgICAgIH1cbiAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLmNoaWxkTm9kZXNbb2Zmc2V0ID4gbGFzdElkeCA/IGxhc3RJZHggOiBvZmZzZXRdO1xuICAgICAgfVxuICAgICAgaWYgKGlzVGV4dCRhKGNvbnRhaW5lcikgJiYgc3RhcnQgJiYgb2Zmc2V0ID49IGNvbnRhaW5lci5kYXRhLmxlbmd0aCkge1xuICAgICAgICBjb250YWluZXIgPSBuZXcgRG9tVHJlZVdhbGtlcihjb250YWluZXIsIGVkLmdldEJvZHkoKSkubmV4dCgpIHx8IGNvbnRhaW5lcjtcbiAgICAgIH1cbiAgICAgIGlmIChpc1RleHQkYShjb250YWluZXIpICYmICFzdGFydCAmJiBvZmZzZXQgPT09IDApIHtcbiAgICAgICAgY29udGFpbmVyID0gbmV3IERvbVRyZWVXYWxrZXIoY29udGFpbmVyLCBlZC5nZXRCb2R5KCkpLnByZXYoKSB8fCBjb250YWluZXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGFpbmVyO1xuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplVGFibGVTZWxlY3Rpb24gPSAobm9kZSwgc3RhcnQpID0+IHtcbiAgICAgIGNvbnN0IHByb3AgPSBzdGFydCA/ICdmaXJzdENoaWxkJyA6ICdsYXN0Q2hpbGQnO1xuICAgICAgY29uc3QgY2hpbGROb2RlID0gbm9kZVtwcm9wXTtcbiAgICAgIGlmIChpc1RhYmxlQ2VsbE9yUm93KG5vZGUpICYmIGNoaWxkTm9kZSkge1xuICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gJ1RSJykge1xuICAgICAgICAgIHJldHVybiBjaGlsZE5vZGVbcHJvcF0gfHwgY2hpbGROb2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBjaGlsZE5vZGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlO1xuICAgIH07XG4gICAgY29uc3Qgd3JhcCQxID0gKGRvbSwgbm9kZSwgbmFtZSwgYXR0cnMpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGNvbnN0IHdyYXBwZXIgPSBkb20uY3JlYXRlKG5hbWUsIGF0dHJzKTtcbiAgICAgIChfYSA9IG5vZGUucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmluc2VydEJlZm9yZSh3cmFwcGVyLCBub2RlKTtcbiAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9O1xuICAgIGNvbnN0IHdyYXBXaXRoU2libGluZ3MgPSAoZG9tLCBub2RlLCBuZXh0LCBuYW1lLCBhdHRycykgPT4ge1xuICAgICAgY29uc3Qgc3RhcnQgPSBTdWdhckVsZW1lbnQuZnJvbURvbShub2RlKTtcbiAgICAgIGNvbnN0IHdyYXBwZXIgPSBTdWdhckVsZW1lbnQuZnJvbURvbShkb20uY3JlYXRlKG5hbWUsIGF0dHJzKSk7XG4gICAgICBjb25zdCBzaWJsaW5ncyA9IG5leHQgPyBuZXh0U2libGluZ3Moc3RhcnQpIDogcHJldlNpYmxpbmdzKHN0YXJ0KTtcbiAgICAgIGFwcGVuZCh3cmFwcGVyLCBzaWJsaW5ncyk7XG4gICAgICBpZiAobmV4dCkge1xuICAgICAgICBiZWZvcmUkMyhzdGFydCwgd3JhcHBlcik7XG4gICAgICAgIHByZXBlbmQod3JhcHBlciwgc3RhcnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWZ0ZXIkNChzdGFydCwgd3JhcHBlcik7XG4gICAgICAgIGFwcGVuZCQxKHdyYXBwZXIsIHN0YXJ0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3cmFwcGVyLmRvbTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQ29sb3JGb3JtYXRBbmRBbmNob3IgPSAobm9kZSwgZm9ybWF0KSA9PiBmb3JtYXQubGlua3MgJiYgbm9kZS5ub2RlTmFtZSA9PT0gJ0EnO1xuICAgIGNvbnN0IHJlbW92ZU5vZGUgPSAoZWQsIG5vZGUsIGZvcm1hdCkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgIGxldCByb290QmxvY2tFbG07XG4gICAgICBjb25zdCBkb20gPSBlZC5kb207XG4gICAgICBjb25zdCBmb3JjZWRSb290QmxvY2sgPSBnZXRGb3JjZWRSb290QmxvY2soZWQpO1xuICAgICAgaWYgKGlzQmxvY2tGb3JtYXQoZm9ybWF0KSkge1xuICAgICAgICBpZiAocGFyZW50Tm9kZSA9PT0gZG9tLmdldFJvb3QoKSkge1xuICAgICAgICAgIGlmICghZm9ybWF0Lmxpc3RfYmxvY2sgfHwgIWlzRXEkMihub2RlLCBmb3JtYXQubGlzdF9ibG9jaykpIHtcbiAgICAgICAgICAgIGVhY2gkZShmcm9tKG5vZGUuY2hpbGROb2RlcyksIG5vZGUgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXNWYWxpZChlZCwgZm9yY2VkUm9vdEJsb2NrLCBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyb290QmxvY2tFbG0pIHtcbiAgICAgICAgICAgICAgICAgIHJvb3RCbG9ja0VsbSA9IHdyYXAkMShkb20sIG5vZGUsIGZvcmNlZFJvb3RCbG9jayk7XG4gICAgICAgICAgICAgICAgICBkb20uc2V0QXR0cmlicyhyb290QmxvY2tFbG0sIGdldEZvcmNlZFJvb3RCbG9ja0F0dHJzKGVkKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJvb3RCbG9ja0VsbS5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcm9vdEJsb2NrRWxtID0gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNNaXhlZEZvcm1hdChmb3JtYXQpICYmICFpc0VxJDIoZm9ybWF0LmlubGluZSwgbm9kZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZG9tLnJlbW92ZShub2RlLCB0cnVlKTtcbiAgICB9O1xuICAgIGNvbnN0IHByb2Nlc3NGb3JtYXRBdHRyT3JTdHlsZSA9IChuYW1lLCB2YWx1ZSwgdmFycykgPT4ge1xuICAgICAgaWYgKGlzTnVtYmVyKG5hbWUpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogdmFsdWUsXG4gICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICB2YWx1ZTogcmVwbGFjZVZhcnModmFsdWUsIHZhcnMpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVFbXB0eVN0eWxlQXR0cmlidXRlSWZOZWVkZWQgPSAoZG9tLCBlbG0pID0+IHtcbiAgICAgIGlmIChkb20uZ2V0QXR0cmliKGVsbSwgJ3N0eWxlJykgPT09ICcnKSB7XG4gICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XG4gICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbWNlLXN0eWxlJyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVTdHlsZXMgPSAoZG9tLCBlbG0sIGZvcm1hdCwgdmFycywgY29tcGFyZU5vZGUpID0+IHtcbiAgICAgIGxldCBzdHlsZXNNb2RpZmllZCA9IGZhbHNlO1xuICAgICAgZWFjaCQ3KGZvcm1hdC5zdHlsZXMsICh2YWx1ZSwgbmFtZSkgPT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgbmFtZTogc3R5bGVOYW1lLFxuICAgICAgICAgIHZhbHVlOiBzdHlsZVZhbHVlXG4gICAgICAgIH0gPSBwcm9jZXNzRm9ybWF0QXR0ck9yU3R5bGUobmFtZSwgdmFsdWUsIHZhcnMpO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkU3R5bGVWYWx1ZSA9IG5vcm1hbGl6ZVN0eWxlVmFsdWUoc3R5bGVWYWx1ZSwgc3R5bGVOYW1lKTtcbiAgICAgICAgaWYgKGZvcm1hdC5yZW1vdmVfc2ltaWxhciB8fCBpc051bGwoc3R5bGVWYWx1ZSkgfHwgIWlzRWxlbWVudCQ2KGNvbXBhcmVOb2RlKSB8fCBpc0VxJDIoZ2V0U3R5bGUoZG9tLCBjb21wYXJlTm9kZSwgc3R5bGVOYW1lKSwgbm9ybWFsaXplZFN0eWxlVmFsdWUpKSB7XG4gICAgICAgICAgZG9tLnNldFN0eWxlKGVsbSwgc3R5bGVOYW1lLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgc3R5bGVzTW9kaWZpZWQgPSB0cnVlO1xuICAgICAgfSk7XG4gICAgICBpZiAoc3R5bGVzTW9kaWZpZWQpIHtcbiAgICAgICAgcmVtb3ZlRW1wdHlTdHlsZUF0dHJpYnV0ZUlmTmVlZGVkKGRvbSwgZWxtKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZUxpc3RTdHlsZUZvcm1hdHMgPSAoZWRpdG9yLCBuYW1lLCB2YXJzKSA9PiB7XG4gICAgICBpZiAobmFtZSA9PT0gJ3JlbW92ZWZvcm1hdCcpIHtcbiAgICAgICAgZWFjaCRlKGdldFBhcnRpYWxseVNlbGVjdGVkTGlzdEl0ZW1zKGVkaXRvci5zZWxlY3Rpb24pLCBsaSA9PiB7XG4gICAgICAgICAgZWFjaCRlKGxpc3RJdGVtU3R5bGVzLCBuYW1lID0+IGVkaXRvci5kb20uc2V0U3R5bGUobGksIG5hbWUsICcnKSk7XG4gICAgICAgICAgcmVtb3ZlRW1wdHlTdHlsZUF0dHJpYnV0ZUlmTmVlZGVkKGVkaXRvci5kb20sIGxpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZXRFeHBhbmRlZExpc3RJdGVtRm9ybWF0KGVkaXRvci5mb3JtYXR0ZXIsIG5hbWUpLmVhY2gobGlGbXQgPT4ge1xuICAgICAgICAgIGVhY2gkZShnZXRQYXJ0aWFsbHlTZWxlY3RlZExpc3RJdGVtcyhlZGl0b3Iuc2VsZWN0aW9uKSwgbGkgPT4gcmVtb3ZlU3R5bGVzKGVkaXRvci5kb20sIGxpLCBsaUZtdCwgdmFycywgbnVsbCkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZU5vZGVGb3JtYXRJbnRlcm5hbCA9IChlZCwgZm9ybWF0LCB2YXJzLCBub2RlLCBjb21wYXJlTm9kZSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWQuZG9tO1xuICAgICAgY29uc3QgZWxlbWVudFV0aWxzID0gRWxlbWVudFV0aWxzKGVkKTtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IGVkLnNjaGVtYTtcbiAgICAgIGlmIChpc0lubGluZUZvcm1hdChmb3JtYXQpICYmIGlzVHJhbnNwYXJlbnRFbGVtZW50TmFtZShzY2hlbWEsIGZvcm1hdC5pbmxpbmUpICYmIGlzVHJhbnNwYXJlbnRCbG9jayhzY2hlbWEsIG5vZGUpICYmIG5vZGUucGFyZW50RWxlbWVudCA9PT0gZWQuZ2V0Qm9keSgpKSB7XG4gICAgICAgIHJlbW92ZU5vZGUoZWQsIG5vZGUsIGZvcm1hdCk7XG4gICAgICAgIHJldHVybiByZW1vdmVSZXN1bHQucmVtb3ZlZCgpO1xuICAgICAgfVxuICAgICAgaWYgKCFmb3JtYXQuY2VGYWxzZU92ZXJyaWRlICYmIG5vZGUgJiYgZG9tLmdldENvbnRlbnRFZGl0YWJsZVBhcmVudChub2RlKSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICByZXR1cm4gcmVtb3ZlUmVzdWx0LmtlZXAoKTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlICYmICFtYXRjaE5hbWUoZG9tLCBub2RlLCBmb3JtYXQpICYmICFpc0NvbG9yRm9ybWF0QW5kQW5jaG9yKG5vZGUsIGZvcm1hdCkpIHtcbiAgICAgICAgcmV0dXJuIHJlbW92ZVJlc3VsdC5rZWVwKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBlbG0gPSBub2RlO1xuICAgICAgY29uc3QgcHJlc2VydmVBdHRyaWJ1dGVzID0gZm9ybWF0LnByZXNlcnZlX2F0dHJpYnV0ZXM7XG4gICAgICBpZiAoaXNJbmxpbmVGb3JtYXQoZm9ybWF0KSAmJiBmb3JtYXQucmVtb3ZlID09PSAnYWxsJyAmJiBpc0FycmF5JDEocHJlc2VydmVBdHRyaWJ1dGVzKSkge1xuICAgICAgICBjb25zdCBhdHRyc1RvUHJlc2VydmUgPSBmaWx0ZXIkNShkb20uZ2V0QXR0cmlicyhlbG0pLCBhdHRyID0+IGNvbnRhaW5zJDIocHJlc2VydmVBdHRyaWJ1dGVzLCBhdHRyLm5hbWUudG9Mb3dlckNhc2UoKSkpO1xuICAgICAgICBkb20ucmVtb3ZlQWxsQXR0cmlicyhlbG0pO1xuICAgICAgICBlYWNoJGUoYXR0cnNUb1ByZXNlcnZlLCBhdHRyID0+IGRvbS5zZXRBdHRyaWIoZWxtLCBhdHRyLm5hbWUsIGF0dHIudmFsdWUpKTtcbiAgICAgICAgaWYgKGF0dHJzVG9QcmVzZXJ2ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHJlbW92ZVJlc3VsdC5yZW5hbWUoJ3NwYW4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvcm1hdC5yZW1vdmUgIT09ICdhbGwnKSB7XG4gICAgICAgIHJlbW92ZVN0eWxlcyhkb20sIGVsbSwgZm9ybWF0LCB2YXJzLCBjb21wYXJlTm9kZSk7XG4gICAgICAgIGVhY2gkNyhmb3JtYXQuYXR0cmlidXRlcywgKHZhbHVlLCBuYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgbmFtZTogYXR0ck5hbWUsXG4gICAgICAgICAgICB2YWx1ZTogYXR0clZhbHVlXG4gICAgICAgICAgfSA9IHByb2Nlc3NGb3JtYXRBdHRyT3JTdHlsZShuYW1lLCB2YWx1ZSwgdmFycyk7XG4gICAgICAgICAgaWYgKGZvcm1hdC5yZW1vdmVfc2ltaWxhciB8fCBpc051bGwoYXR0clZhbHVlKSB8fCAhaXNFbGVtZW50JDYoY29tcGFyZU5vZGUpIHx8IGlzRXEkMihkb20uZ2V0QXR0cmliKGNvbXBhcmVOb2RlLCBhdHRyTmFtZSksIGF0dHJWYWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChhdHRyTmFtZSA9PT0gJ2NsYXNzJykge1xuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBkb20uZ2V0QXR0cmliKGVsbSwgYXR0ck5hbWUpO1xuICAgICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlT3V0ID0gJyc7XG4gICAgICAgICAgICAgICAgZWFjaCRlKGN1cnJlbnRWYWx1ZS5zcGxpdCgvXFxzKy8pLCBjbHMgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKC9tY2VcXC1cXHcrLy50ZXN0KGNscykpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVPdXQgKz0gKHZhbHVlT3V0ID8gJyAnIDogJycpICsgY2xzO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZU91dCkge1xuICAgICAgICAgICAgICAgICAgZG9tLnNldEF0dHJpYihlbG0sIGF0dHJOYW1lLCB2YWx1ZU91dCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoTUNFX0FUVFJfUkUudGVzdChhdHRyTmFtZSkpIHtcbiAgICAgICAgICAgICAgZWxtLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1tY2UtJyArIGF0dHJOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhdHRyTmFtZSA9PT0gJ3N0eWxlJyAmJiBtYXRjaE5vZGVOYW1lcyhbJ2xpJ10pKGVsbSkgJiYgZG9tLmdldFN0eWxlKGVsbSwgJ2xpc3Qtc3R5bGUtdHlwZScpID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgZWxtLnJlbW92ZUF0dHJpYnV0ZShhdHRyTmFtZSk7XG4gICAgICAgICAgICAgIGRvbS5zZXRTdHlsZShlbG0sICdsaXN0LXN0eWxlLXR5cGUnLCAnbm9uZScpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYXR0ck5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgICAgICAgICAgZWxtLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3NOYW1lJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbG0ucmVtb3ZlQXR0cmlidXRlKGF0dHJOYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoJDcoZm9ybWF0LmNsYXNzZXMsIHZhbHVlID0+IHtcbiAgICAgICAgICB2YWx1ZSA9IHJlcGxhY2VWYXJzKHZhbHVlLCB2YXJzKTtcbiAgICAgICAgICBpZiAoIWlzRWxlbWVudCQ2KGNvbXBhcmVOb2RlKSB8fCBkb20uaGFzQ2xhc3MoY29tcGFyZU5vZGUsIHZhbHVlKSkge1xuICAgICAgICAgICAgZG9tLnJlbW92ZUNsYXNzKGVsbSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGF0dHJzID0gZG9tLmdldEF0dHJpYnMoZWxtKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGF0dHJOYW1lID0gYXR0cnNbaV0ubm9kZU5hbWU7XG4gICAgICAgICAgaWYgKCFlbGVtZW50VXRpbHMuaXNBdHRyaWJ1dGVJbnRlcm5hbChhdHRyTmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiByZW1vdmVSZXN1bHQua2VlcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvcm1hdC5yZW1vdmUgIT09ICdub25lJykge1xuICAgICAgICByZW1vdmVOb2RlKGVkLCBlbG0sIGZvcm1hdCk7XG4gICAgICAgIHJldHVybiByZW1vdmVSZXN1bHQucmVtb3ZlZCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlbW92ZVJlc3VsdC5rZWVwKCk7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kRm9ybWF0Um9vdCA9IChlZGl0b3IsIGNvbnRhaW5lciwgbmFtZSwgdmFycywgc2ltaWxhcikgPT4ge1xuICAgICAgbGV0IGZvcm1hdFJvb3Q7XG4gICAgICBpZiAoY29udGFpbmVyLnBhcmVudE5vZGUpIHtcbiAgICAgICAgZWFjaCRlKGdldFBhcmVudHMkMihlZGl0b3IuZG9tLCBjb250YWluZXIucGFyZW50Tm9kZSkucmV2ZXJzZSgpLCBwYXJlbnQgPT4ge1xuICAgICAgICAgIGlmICghZm9ybWF0Um9vdCAmJiBpc0VsZW1lbnQkNihwYXJlbnQpICYmIHBhcmVudC5pZCAhPT0gJ19zdGFydCcgJiYgcGFyZW50LmlkICE9PSAnX2VuZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IG1hdGNoTm9kZShlZGl0b3IsIHBhcmVudCwgbmFtZSwgdmFycywgc2ltaWxhcik7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ICYmIGZvcm1hdC5zcGxpdCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgZm9ybWF0Um9vdCA9IHBhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1hdFJvb3Q7XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVOb2RlRm9ybWF0RnJvbUNsb25lID0gKGVkaXRvciwgZm9ybWF0LCB2YXJzLCBjbG9uZSkgPT4gcmVtb3ZlTm9kZUZvcm1hdEludGVybmFsKGVkaXRvciwgZm9ybWF0LCB2YXJzLCBjbG9uZSwgY2xvbmUpLmZvbGQoY29uc3RhbnQoY2xvbmUpLCBuZXdOYW1lID0+IHtcbiAgICAgIGNvbnN0IGZyYWdtZW50ID0gZWRpdG9yLmRvbS5jcmVhdGVGcmFnbWVudCgpO1xuICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoY2xvbmUpO1xuICAgICAgcmV0dXJuIGVkaXRvci5kb20ucmVuYW1lKGNsb25lLCBuZXdOYW1lKTtcbiAgICB9LCBjb25zdGFudChudWxsKSk7XG4gICAgY29uc3Qgd3JhcEFuZFNwbGl0ID0gKGVkaXRvciwgZm9ybWF0TGlzdCwgZm9ybWF0Um9vdCwgY29udGFpbmVyLCB0YXJnZXQsIHNwbGl0LCBmb3JtYXQsIHZhcnMpID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICBsZXQgbGFzdENsb25lO1xuICAgICAgbGV0IGZpcnN0Q2xvbmU7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgaWYgKGZvcm1hdFJvb3QpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0Um9vdFBhcmVudCA9IGZvcm1hdFJvb3QucGFyZW50Tm9kZTtcbiAgICAgICAgZm9yIChsZXQgcGFyZW50ID0gY29udGFpbmVyLnBhcmVudE5vZGU7IHBhcmVudCAmJiBwYXJlbnQgIT09IGZvcm1hdFJvb3RQYXJlbnQ7IHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgbGV0IGNsb25lID0gZG9tLmNsb25lKHBhcmVudCwgZmFsc2UpO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybWF0TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmUgPSByZW1vdmVOb2RlRm9ybWF0RnJvbUNsb25lKGVkaXRvciwgZm9ybWF0TGlzdFtpXSwgdmFycywgY2xvbmUpO1xuICAgICAgICAgICAgaWYgKGNsb25lID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2xvbmUpIHtcbiAgICAgICAgICAgIGlmIChsYXN0Q2xvbmUpIHtcbiAgICAgICAgICAgICAgY2xvbmUuYXBwZW5kQ2hpbGQobGFzdENsb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZmlyc3RDbG9uZSkge1xuICAgICAgICAgICAgICBmaXJzdENsb25lID0gY2xvbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0Q2xvbmUgPSBjbG9uZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNwbGl0ICYmICghZm9ybWF0Lm1peGVkIHx8ICFkb20uaXNCbG9jayhmb3JtYXRSb290KSkpIHtcbiAgICAgICAgICBjb250YWluZXIgPSAoX2EgPSBkb20uc3BsaXQoZm9ybWF0Um9vdCwgY29udGFpbmVyKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYXN0Q2xvbmUgJiYgZmlyc3RDbG9uZSkge1xuICAgICAgICAgIChfYiA9IHRhcmdldC5wYXJlbnROb2RlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaW5zZXJ0QmVmb3JlKGxhc3RDbG9uZSwgdGFyZ2V0KTtcbiAgICAgICAgICBmaXJzdENsb25lLmFwcGVuZENoaWxkKHRhcmdldCk7XG4gICAgICAgICAgaWYgKGlzSW5saW5lRm9ybWF0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIG1lcmdlU2libGluZ3MoZWRpdG9yLCBmb3JtYXQsIHZhcnMsIGxhc3RDbG9uZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGFpbmVyO1xuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlRm9ybWF0SW50ZXJuYWwgPSAoZWQsIG5hbWUsIHZhcnMsIG5vZGUsIHNpbWlsYXIpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdExpc3QgPSBlZC5mb3JtYXR0ZXIuZ2V0KG5hbWUpO1xuICAgICAgY29uc3QgZm9ybWF0ID0gZm9ybWF0TGlzdFswXTtcbiAgICAgIGNvbnN0IGRvbSA9IGVkLmRvbTtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGVkLnNlbGVjdGlvbjtcbiAgICAgIGNvbnN0IHNwbGl0VG9Gb3JtYXRSb290ID0gY29udGFpbmVyID0+IHtcbiAgICAgICAgY29uc3QgZm9ybWF0Um9vdCA9IGZpbmRGb3JtYXRSb290KGVkLCBjb250YWluZXIsIG5hbWUsIHZhcnMsIHNpbWlsYXIpO1xuICAgICAgICByZXR1cm4gd3JhcEFuZFNwbGl0KGVkLCBmb3JtYXRMaXN0LCBmb3JtYXRSb290LCBjb250YWluZXIsIGNvbnRhaW5lciwgdHJ1ZSwgZm9ybWF0LCB2YXJzKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1JlbW92ZUJvb2ttYXJrTm9kZSA9IG5vZGUgPT4gaXNCb29rbWFya05vZGUkMShub2RlKSAmJiBpc0VsZW1lbnQkNihub2RlKSAmJiAobm9kZS5pZCA9PT0gJ19zdGFydCcgfHwgbm9kZS5pZCA9PT0gJ19lbmQnKTtcbiAgICAgIGNvbnN0IHJlbW92ZUZvcm1hdE9uTm9kZSA9IG5vZGUgPT4gZXhpc3RzKGZvcm1hdExpc3QsIGZtdCA9PiByZW1vdmVOb2RlRm9ybWF0KGVkLCBmbXQsIHZhcnMsIG5vZGUsIG5vZGUpKTtcbiAgICAgIGNvbnN0IHByb2Nlc3MgPSBub2RlID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBmcm9tKG5vZGUuY2hpbGROb2Rlcyk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSByZW1vdmVGb3JtYXRPbk5vZGUobm9kZSk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnROb2RlTWF0Y2hlcyA9IHJlbW92ZWQgfHwgZXhpc3RzKGZvcm1hdExpc3QsIGYgPT4gbWF0Y2hOYW1lKGRvbSwgbm9kZSwgZikpO1xuICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICBpZiAoIWN1cnJlbnROb2RlTWF0Y2hlcyAmJiBpc05vbk51bGxhYmxlKHBhcmVudE5vZGUpICYmIHNob3VsZEV4cGFuZFRvU2VsZWN0b3IoZm9ybWF0KSkge1xuICAgICAgICAgIHJlbW92ZUZvcm1hdE9uTm9kZShwYXJlbnROb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0LmRlZXApIHtcbiAgICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIHByb2Nlc3MoY2hpbGRyZW5baV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZXh0RGVjb3JhdGlvbnMgPSBbXG4gICAgICAgICAgJ3VuZGVybGluZScsXG4gICAgICAgICAgJ2xpbmUtdGhyb3VnaCcsXG4gICAgICAgICAgJ292ZXJsaW5lJ1xuICAgICAgICBdO1xuICAgICAgICBlYWNoJGUodGV4dERlY29yYXRpb25zLCBkZWNvcmF0aW9uID0+IHtcbiAgICAgICAgICBpZiAoaXNFbGVtZW50JDYobm9kZSkgJiYgZWQuZG9tLmdldFN0eWxlKG5vZGUsICd0ZXh0LWRlY29yYXRpb24nKSA9PT0gZGVjb3JhdGlvbiAmJiBub2RlLnBhcmVudE5vZGUgJiYgZ2V0VGV4dERlY29yYXRpb24oZG9tLCBub2RlLnBhcmVudE5vZGUpID09PSBkZWNvcmF0aW9uKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlRm9ybWF0KGVkLCB7XG4gICAgICAgICAgICAgIGRlZXA6IGZhbHNlLFxuICAgICAgICAgICAgICBleGFjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgaW5saW5lOiAnc3BhbicsXG4gICAgICAgICAgICAgIHN0eWxlczogeyB0ZXh0RGVjb3JhdGlvbjogZGVjb3JhdGlvbiB9XG4gICAgICAgICAgICB9LCB1bmRlZmluZWQsIG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdW53cmFwID0gc3RhcnQgPT4ge1xuICAgICAgICBjb25zdCBub2RlID0gZG9tLmdldChzdGFydCA/ICdfc3RhcnQnIDogJ19lbmQnKTtcbiAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICBsZXQgb3V0ID0gbm9kZVtzdGFydCA/ICdmaXJzdENoaWxkJyA6ICdsYXN0Q2hpbGQnXTtcbiAgICAgICAgICBpZiAoaXNSZW1vdmVCb29rbWFya05vZGUob3V0KSkge1xuICAgICAgICAgICAgb3V0ID0gb3V0W3N0YXJ0ID8gJ2ZpcnN0Q2hpbGQnIDogJ2xhc3RDaGlsZCddO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNUZXh0JGEob3V0KSAmJiBvdXQuZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIG91dCA9IHN0YXJ0ID8gbm9kZS5wcmV2aW91c1NpYmxpbmcgfHwgbm9kZS5uZXh0U2libGluZyA6IG5vZGUubmV4dFNpYmxpbmcgfHwgbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRvbS5yZW1vdmUobm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlbW92ZVJuZ1N0eWxlID0gcm5nID0+IHtcbiAgICAgICAgbGV0IHN0YXJ0Q29udGFpbmVyO1xuICAgICAgICBsZXQgZW5kQ29udGFpbmVyO1xuICAgICAgICBsZXQgZXhwYW5kZWRSbmcgPSBleHBhbmRSbmcoZG9tLCBybmcsIGZvcm1hdExpc3QsIHJuZy5jb2xsYXBzZWQpO1xuICAgICAgICBpZiAoZm9ybWF0LnNwbGl0KSB7XG4gICAgICAgICAgZXhwYW5kZWRSbmcgPSBzcGxpdChleHBhbmRlZFJuZyk7XG4gICAgICAgICAgc3RhcnRDb250YWluZXIgPSBnZXRDb250YWluZXIoZWQsIGV4cGFuZGVkUm5nLCB0cnVlKTtcbiAgICAgICAgICBlbmRDb250YWluZXIgPSBnZXRDb250YWluZXIoZWQsIGV4cGFuZGVkUm5nKTtcbiAgICAgICAgICBpZiAoc3RhcnRDb250YWluZXIgIT09IGVuZENvbnRhaW5lcikge1xuICAgICAgICAgICAgc3RhcnRDb250YWluZXIgPSBub3JtYWxpemVUYWJsZVNlbGVjdGlvbihzdGFydENvbnRhaW5lciwgdHJ1ZSk7XG4gICAgICAgICAgICBlbmRDb250YWluZXIgPSBub3JtYWxpemVUYWJsZVNlbGVjdGlvbihlbmRDb250YWluZXIsIGZhbHNlKTtcbiAgICAgICAgICAgIGlmIChpc0NoaWxkT2ZJbmxpbmVQYXJlbnQoZG9tLCBzdGFydENvbnRhaW5lciwgZW5kQ29udGFpbmVyKSkge1xuICAgICAgICAgICAgICBjb25zdCBtYXJrZXIgPSBPcHRpb25hbC5mcm9tKHN0YXJ0Q29udGFpbmVyLmZpcnN0Q2hpbGQpLmdldE9yKHN0YXJ0Q29udGFpbmVyKTtcbiAgICAgICAgICAgICAgc3BsaXRUb0Zvcm1hdFJvb3Qod3JhcFdpdGhTaWJsaW5ncyhkb20sIG1hcmtlciwgdHJ1ZSwgJ3NwYW4nLCB7XG4gICAgICAgICAgICAgICAgJ2lkJzogJ19zdGFydCcsXG4gICAgICAgICAgICAgICAgJ2RhdGEtbWNlLXR5cGUnOiAnYm9va21hcmsnXG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgdW53cmFwKHRydWUpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNDaGlsZE9mSW5saW5lUGFyZW50KGRvbSwgZW5kQ29udGFpbmVyLCBzdGFydENvbnRhaW5lcikpIHtcbiAgICAgICAgICAgICAgY29uc3QgbWFya2VyID0gT3B0aW9uYWwuZnJvbShlbmRDb250YWluZXIubGFzdENoaWxkKS5nZXRPcihlbmRDb250YWluZXIpO1xuICAgICAgICAgICAgICBzcGxpdFRvRm9ybWF0Um9vdCh3cmFwV2l0aFNpYmxpbmdzKGRvbSwgbWFya2VyLCBmYWxzZSwgJ3NwYW4nLCB7XG4gICAgICAgICAgICAgICAgJ2lkJzogJ19lbmQnLFxuICAgICAgICAgICAgICAgICdkYXRhLW1jZS10eXBlJzogJ2Jvb2ttYXJrJ1xuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIHVud3JhcChmYWxzZSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyID0gd3JhcCQxKGRvbSwgc3RhcnRDb250YWluZXIsICdzcGFuJywge1xuICAgICAgICAgICAgICAnaWQnOiAnX3N0YXJ0JyxcbiAgICAgICAgICAgICAgJ2RhdGEtbWNlLXR5cGUnOiAnYm9va21hcmsnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVuZENvbnRhaW5lciA9IHdyYXAkMShkb20sIGVuZENvbnRhaW5lciwgJ3NwYW4nLCB7XG4gICAgICAgICAgICAgICdpZCc6ICdfZW5kJyxcbiAgICAgICAgICAgICAgJ2RhdGEtbWNlLXR5cGUnOiAnYm9va21hcmsnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1JuZyA9IGRvbS5jcmVhdGVSbmcoKTtcbiAgICAgICAgICAgIG5ld1JuZy5zZXRTdGFydEFmdGVyKHN0YXJ0Q29udGFpbmVyKTtcbiAgICAgICAgICAgIG5ld1JuZy5zZXRFbmRCZWZvcmUoZW5kQ29udGFpbmVyKTtcbiAgICAgICAgICAgIHdhbGskMyhkb20sIG5ld1JuZywgbm9kZXMgPT4ge1xuICAgICAgICAgICAgICBlYWNoJGUobm9kZXMsIG4gPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXNCb29rbWFya05vZGUkMShuKSAmJiAhaXNCb29rbWFya05vZGUkMShuLnBhcmVudE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICBzcGxpdFRvRm9ybWF0Um9vdChuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzcGxpdFRvRm9ybWF0Um9vdChzdGFydENvbnRhaW5lcik7XG4gICAgICAgICAgICBzcGxpdFRvRm9ybWF0Um9vdChlbmRDb250YWluZXIpO1xuICAgICAgICAgICAgc3RhcnRDb250YWluZXIgPSB1bndyYXAodHJ1ZSk7XG4gICAgICAgICAgICBlbmRDb250YWluZXIgPSB1bndyYXAoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhcnRDb250YWluZXIgPSBlbmRDb250YWluZXIgPSBzcGxpdFRvRm9ybWF0Um9vdChzdGFydENvbnRhaW5lcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGV4cGFuZGVkUm5nLnN0YXJ0Q29udGFpbmVyID0gc3RhcnRDb250YWluZXIucGFyZW50Tm9kZSA/IHN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUgOiBzdGFydENvbnRhaW5lcjtcbiAgICAgICAgICBleHBhbmRlZFJuZy5zdGFydE9mZnNldCA9IGRvbS5ub2RlSW5kZXgoc3RhcnRDb250YWluZXIpO1xuICAgICAgICAgIGV4cGFuZGVkUm5nLmVuZENvbnRhaW5lciA9IGVuZENvbnRhaW5lci5wYXJlbnROb2RlID8gZW5kQ29udGFpbmVyLnBhcmVudE5vZGUgOiBlbmRDb250YWluZXI7XG4gICAgICAgICAgZXhwYW5kZWRSbmcuZW5kT2Zmc2V0ID0gZG9tLm5vZGVJbmRleChlbmRDb250YWluZXIpICsgMTtcbiAgICAgICAgfVxuICAgICAgICB3YWxrJDMoZG9tLCBleHBhbmRlZFJuZywgbm9kZXMgPT4ge1xuICAgICAgICAgIGVhY2gkZShub2RlcywgcHJvY2Vzcyk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGlmIChub2RlKSB7XG4gICAgICAgIGlmIChpc05vZGUobm9kZSkpIHtcbiAgICAgICAgICBjb25zdCBybmcgPSBkb20uY3JlYXRlUm5nKCk7XG4gICAgICAgICAgcm5nLnNldFN0YXJ0QmVmb3JlKG5vZGUpO1xuICAgICAgICAgIHJuZy5zZXRFbmRBZnRlcihub2RlKTtcbiAgICAgICAgICByZW1vdmVSbmdTdHlsZShybmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbW92ZVJuZ1N0eWxlKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGZpcmVGb3JtYXRSZW1vdmUoZWQsIG5hbWUsIG5vZGUsIHZhcnMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpIHx8ICFpc0lubGluZUZvcm1hdChmb3JtYXQpIHx8IGdldENlbGxzRnJvbUVkaXRvcihlZCkubGVuZ3RoKSB7XG4gICAgICAgIHByZXNlcnZlU2VsZWN0aW9uKGVkLCAoKSA9PiBydW5PblJhbmdlcyhlZCwgcmVtb3ZlUm5nU3R5bGUpLCBzdGFydE5vZGUgPT4gaXNJbmxpbmVGb3JtYXQoZm9ybWF0KSAmJiBtYXRjaCQyKGVkLCBuYW1lLCB2YXJzLCBzdGFydE5vZGUpKTtcbiAgICAgICAgZWQubm9kZUNoYW5nZWQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZUNhcmV0Rm9ybWF0KGVkLCBuYW1lLCB2YXJzLCBzaW1pbGFyKTtcbiAgICAgIH1cbiAgICAgIHJlbW92ZUxpc3RTdHlsZUZvcm1hdHMoZWQsIG5hbWUsIHZhcnMpO1xuICAgICAgZmlyZUZvcm1hdFJlbW92ZShlZCwgbmFtZSwgbm9kZSwgdmFycyk7XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVGb3JtYXQkMSA9IChlZCwgbmFtZSwgdmFycywgbm9kZSwgc2ltaWxhcikgPT4ge1xuICAgICAgaWYgKG5vZGUgfHwgZWQuc2VsZWN0aW9uLmlzRWRpdGFibGUoKSkge1xuICAgICAgICByZW1vdmVGb3JtYXRJbnRlcm5hbChlZCwgbmFtZSwgdmFycywgbm9kZSwgc2ltaWxhcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVOb2RlRm9ybWF0ID0gKGVkaXRvciwgZm9ybWF0LCB2YXJzLCBub2RlLCBjb21wYXJlTm9kZSkgPT4ge1xuICAgICAgcmV0dXJuIHJlbW92ZU5vZGVGb3JtYXRJbnRlcm5hbChlZGl0b3IsIGZvcm1hdCwgdmFycywgbm9kZSwgY29tcGFyZU5vZGUpLmZvbGQobmV2ZXIsIG5ld05hbWUgPT4ge1xuICAgICAgICBlZGl0b3IuZG9tLnJlbmFtZShub2RlLCBuZXdOYW1lKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LCBhbHdheXMpO1xuICAgIH07XG5cbiAgICBjb25zdCBlYWNoJDYgPSBUb29scy5lYWNoO1xuICAgIGNvbnN0IG1lcmdlVGV4dERlY29yYXRpb25zQW5kQ29sb3IgPSAoZG9tLCBmb3JtYXQsIHZhcnMsIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHByb2Nlc3NUZXh0RGVjb3JhdGlvbnNBbmRDb2xvciA9IG4gPT4ge1xuICAgICAgICBpZiAoaXNFbGVtZW50JDYobikgJiYgaXNFbGVtZW50JDYobi5wYXJlbnROb2RlKSAmJiBpc0VkaXRhYmxlJDIobikpIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnRUZXh0RGVjb3JhdGlvbiA9IGdldFRleHREZWNvcmF0aW9uKGRvbSwgbi5wYXJlbnROb2RlKTtcbiAgICAgICAgICBpZiAoZG9tLmdldFN0eWxlKG4sICdjb2xvcicpICYmIHBhcmVudFRleHREZWNvcmF0aW9uKSB7XG4gICAgICAgICAgICBkb20uc2V0U3R5bGUobiwgJ3RleHQtZGVjb3JhdGlvbicsIHBhcmVudFRleHREZWNvcmF0aW9uKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRvbS5nZXRTdHlsZShuLCAndGV4dC1kZWNvcmF0aW9uJykgPT09IHBhcmVudFRleHREZWNvcmF0aW9uKSB7XG4gICAgICAgICAgICBkb20uc2V0U3R5bGUobiwgJ3RleHQtZGVjb3JhdGlvbicsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChmb3JtYXQuc3R5bGVzICYmIChmb3JtYXQuc3R5bGVzLmNvbG9yIHx8IGZvcm1hdC5zdHlsZXMudGV4dERlY29yYXRpb24pKSB7XG4gICAgICAgIFRvb2xzLndhbGsobm9kZSwgcHJvY2Vzc1RleHREZWNvcmF0aW9uc0FuZENvbG9yLCAnY2hpbGROb2RlcycpO1xuICAgICAgICBwcm9jZXNzVGV4dERlY29yYXRpb25zQW5kQ29sb3Iobm9kZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBtZXJnZUJhY2tncm91bmRDb2xvckFuZEZvbnRTaXplID0gKGRvbSwgZm9ybWF0LCB2YXJzLCBub2RlKSA9PiB7XG4gICAgICBpZiAoZm9ybWF0LnN0eWxlcyAmJiBmb3JtYXQuc3R5bGVzLmJhY2tncm91bmRDb2xvcikge1xuICAgICAgICBjb25zdCBoYXNGb250U2l6ZSA9IGhhc1N0eWxlKGRvbSwgJ2ZvbnRTaXplJyk7XG4gICAgICAgIHByb2Nlc3NDaGlsZEVsZW1lbnRzKG5vZGUsIGVsbSA9PiBoYXNGb250U2l6ZShlbG0pICYmIGlzRWRpdGFibGUkMihlbG0pLCBhcHBseVN0eWxlKGRvbSwgJ2JhY2tncm91bmRDb2xvcicsIHJlcGxhY2VWYXJzKGZvcm1hdC5zdHlsZXMuYmFja2dyb3VuZENvbG9yLCB2YXJzKSkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbWVyZ2VTdWJTdXAgPSAoZG9tLCBmb3JtYXQsIHZhcnMsIG5vZGUpID0+IHtcbiAgICAgIGlmIChpc0lubGluZUZvcm1hdChmb3JtYXQpICYmIChmb3JtYXQuaW5saW5lID09PSAnc3ViJyB8fCBmb3JtYXQuaW5saW5lID09PSAnc3VwJykpIHtcbiAgICAgICAgY29uc3QgaGFzRm9udFNpemUgPSBoYXNTdHlsZShkb20sICdmb250U2l6ZScpO1xuICAgICAgICBwcm9jZXNzQ2hpbGRFbGVtZW50cyhub2RlLCBlbG0gPT4gaGFzRm9udFNpemUoZWxtKSAmJiBpc0VkaXRhYmxlJDIoZWxtKSwgYXBwbHlTdHlsZShkb20sICdmb250U2l6ZScsICcnKSk7XG4gICAgICAgIGNvbnN0IGludmVyc2VUYWdEZXNjZW5kYW50cyA9IGZpbHRlciQ1KGRvbS5zZWxlY3QoZm9ybWF0LmlubGluZSA9PT0gJ3N1cCcgPyAnc3ViJyA6ICdzdXAnLCBub2RlKSwgaXNFZGl0YWJsZSQyKTtcbiAgICAgICAgZG9tLnJlbW92ZShpbnZlcnNlVGFnRGVzY2VuZGFudHMsIHRydWUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbWVyZ2VXaXRoQ2hpbGRyZW4gPSAoZWRpdG9yLCBmb3JtYXRMaXN0LCB2YXJzLCBub2RlKSA9PiB7XG4gICAgICBlYWNoJDYoZm9ybWF0TGlzdCwgZm9ybWF0ID0+IHtcbiAgICAgICAgaWYgKGlzSW5saW5lRm9ybWF0KGZvcm1hdCkpIHtcbiAgICAgICAgICBlYWNoJDYoZWRpdG9yLmRvbS5zZWxlY3QoZm9ybWF0LmlubGluZSwgbm9kZSksIGNoaWxkID0+IHtcbiAgICAgICAgICAgIGlmIChpc0VsZW1lbnROb2RlKGNoaWxkKSkge1xuICAgICAgICAgICAgICByZW1vdmVOb2RlRm9ybWF0KGVkaXRvciwgZm9ybWF0LCB2YXJzLCBjaGlsZCwgZm9ybWF0LmV4YWN0ID8gY2hpbGQgOiBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjbGVhckNoaWxkU3R5bGVzKGVkaXRvci5kb20sIGZvcm1hdCwgbm9kZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG1lcmdlV2l0aFBhcmVudHMgPSAoZWRpdG9yLCBmb3JtYXQsIG5hbWUsIHZhcnMsIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICBpZiAobWF0Y2hOb2RlKGVkaXRvciwgcGFyZW50Tm9kZSwgbmFtZSwgdmFycykpIHtcbiAgICAgICAgaWYgKHJlbW92ZU5vZGVGb3JtYXQoZWRpdG9yLCBmb3JtYXQsIHZhcnMsIG5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm9ybWF0Lm1lcmdlX3dpdGhfcGFyZW50cyAmJiBwYXJlbnROb2RlKSB7XG4gICAgICAgIGVkaXRvci5kb20uZ2V0UGFyZW50KHBhcmVudE5vZGUsIHBhcmVudCA9PiB7XG4gICAgICAgICAgaWYgKG1hdGNoTm9kZShlZGl0b3IsIHBhcmVudCwgbmFtZSwgdmFycykpIHtcbiAgICAgICAgICAgIHJlbW92ZU5vZGVGb3JtYXQoZWRpdG9yLCBmb3JtYXQsIHZhcnMsIG5vZGUpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBlYWNoJDUgPSBUb29scy5lYWNoO1xuICAgIGNvbnN0IGNhbkZvcm1hdEJSID0gKGVkaXRvciwgZm9ybWF0LCBub2RlLCBwYXJlbnROYW1lKSA9PiB7XG4gICAgICBpZiAoY2FuRm9ybWF0RW1wdHlMaW5lcyhlZGl0b3IpICYmIGlzSW5saW5lRm9ybWF0KGZvcm1hdCkgJiYgbm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkQlJQYXJlbnRFbGVtZW50cyA9IGdldFRleHRSb290QmxvY2tFbGVtZW50cyhlZGl0b3Iuc2NoZW1hKTtcbiAgICAgICAgY29uc3QgaGFzQ2FyZXROb2RlU2libGluZyA9IHNpYmxpbmcoU3VnYXJFbGVtZW50LmZyb21Eb20obm9kZSksIHNpYmxpbmcgPT4gaXNDYXJldE5vZGUoc2libGluZy5kb20pKTtcbiAgICAgICAgcmV0dXJuIGhhc05vbk51bGxhYmxlS2V5KHZhbGlkQlJQYXJlbnRFbGVtZW50cywgcGFyZW50TmFtZSkgJiYgaXNFbXB0eSQyKFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5vZGUucGFyZW50Tm9kZSksIGZhbHNlKSAmJiAhaGFzQ2FyZXROb2RlU2libGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5U3R5bGVzID0gKGRvbSwgZWxtLCBmb3JtYXQsIHZhcnMpID0+IHtcbiAgICAgIGVhY2gkNShmb3JtYXQuc3R5bGVzLCAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgZG9tLnNldFN0eWxlKGVsbSwgbmFtZSwgcmVwbGFjZVZhcnModmFsdWUsIHZhcnMpKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZvcm1hdC5zdHlsZXMpIHtcbiAgICAgICAgY29uc3Qgc3R5bGVWYWwgPSBkb20uZ2V0QXR0cmliKGVsbSwgJ3N0eWxlJyk7XG4gICAgICAgIGlmIChzdHlsZVZhbCkge1xuICAgICAgICAgIGRvbS5zZXRBdHRyaWIoZWxtLCAnZGF0YS1tY2Utc3R5bGUnLCBzdHlsZVZhbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5Rm9ybWF0QWN0aW9uID0gKGVkLCBuYW1lLCB2YXJzLCBub2RlKSA9PiB7XG4gICAgICBjb25zdCBmb3JtYXRMaXN0ID0gZWQuZm9ybWF0dGVyLmdldChuYW1lKTtcbiAgICAgIGNvbnN0IGZvcm1hdCA9IGZvcm1hdExpc3RbMF07XG4gICAgICBjb25zdCBpc0NvbGxhcHNlZCA9ICFub2RlICYmIGVkLnNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpO1xuICAgICAgY29uc3QgZG9tID0gZWQuZG9tO1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZWQuc2VsZWN0aW9uO1xuICAgICAgY29uc3Qgc2V0RWxlbWVudEZvcm1hdCA9IChlbG0sIGZtdCA9IGZvcm1hdCkgPT4ge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihmbXQub25mb3JtYXQpKSB7XG4gICAgICAgICAgZm10Lm9uZm9ybWF0KGVsbSwgZm10LCB2YXJzLCBub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBhcHBseVN0eWxlcyhkb20sIGVsbSwgZm10LCB2YXJzKTtcbiAgICAgICAgZWFjaCQ1KGZtdC5hdHRyaWJ1dGVzLCAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgICBkb20uc2V0QXR0cmliKGVsbSwgbmFtZSwgcmVwbGFjZVZhcnModmFsdWUsIHZhcnMpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2gkNShmbXQuY2xhc3NlcywgdmFsdWUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gcmVwbGFjZVZhcnModmFsdWUsIHZhcnMpO1xuICAgICAgICAgIGlmICghZG9tLmhhc0NsYXNzKGVsbSwgbmV3VmFsdWUpKSB7XG4gICAgICAgICAgICBkb20uYWRkQ2xhc3MoZWxtLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBhcHBseU5vZGVTdHlsZSA9IChmb3JtYXRMaXN0LCBub2RlKSA9PiB7XG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgICBlYWNoJDUoZm9ybWF0TGlzdCwgZm9ybWF0ID0+IHtcbiAgICAgICAgICBpZiAoIWlzU2VsZWN0b3JGb3JtYXQoZm9ybWF0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZG9tLmdldENvbnRlbnRFZGl0YWJsZShub2RlKSA9PT0gJ2ZhbHNlJyAmJiAhZm9ybWF0LmNlRmFsc2VPdmVycmlkZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc05vbk51bGxhYmxlKGZvcm1hdC5jb2xsYXBzZWQpICYmIGZvcm1hdC5jb2xsYXBzZWQgIT09IGlzQ29sbGFwc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRvbS5pcyhub2RlLCBmb3JtYXQuc2VsZWN0b3IpICYmICFpc0NhcmV0Tm9kZShub2RlKSkge1xuICAgICAgICAgICAgc2V0RWxlbWVudEZvcm1hdChub2RlLCBmb3JtYXQpO1xuICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBjcmVhdGVXcmFwRWxlbWVudCA9IHdyYXBOYW1lID0+IHtcbiAgICAgICAgaWYgKGlzU3RyaW5nKHdyYXBOYW1lKSkge1xuICAgICAgICAgIGNvbnN0IHdyYXBFbG0gPSBkb20uY3JlYXRlKHdyYXBOYW1lKTtcbiAgICAgICAgICBzZXRFbGVtZW50Rm9ybWF0KHdyYXBFbG0pO1xuICAgICAgICAgIHJldHVybiB3cmFwRWxtO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgYXBwbHlSbmdTdHlsZSA9IChkb20sIHJuZywgbm9kZVNwZWNpZmljKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1dyYXBwZXJzID0gW107XG4gICAgICAgIGxldCBjb250ZW50RWRpdGFibGUgPSB0cnVlO1xuICAgICAgICBjb25zdCB3cmFwTmFtZSA9IGZvcm1hdC5pbmxpbmUgfHwgZm9ybWF0LmJsb2NrO1xuICAgICAgICBjb25zdCB3cmFwRWxtID0gY3JlYXRlV3JhcEVsZW1lbnQod3JhcE5hbWUpO1xuICAgICAgICBjb25zdCBpc01hdGNoaW5nV3JhcHBpbmdCbG9jayA9IG5vZGUgPT4gaXNXcmFwcGluZ0Jsb2NrRm9ybWF0KGZvcm1hdCkgJiYgbWF0Y2hOb2RlKGVkLCBub2RlLCBuYW1lLCB2YXJzKTtcbiAgICAgICAgY29uc3QgY2FuUmVuYW1lQmxvY2sgPSAobm9kZSwgcGFyZW50TmFtZSwgaXNFZGl0YWJsZURlc2NlbmRhbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBpc1ZhbGlkQmxvY2tGb3JtYXRGb3JOb2RlID0gaXNOb25XcmFwcGluZ0Jsb2NrRm9ybWF0KGZvcm1hdCkgJiYgaXNUZXh0QmxvY2skMShlZC5zY2hlbWEsIG5vZGUpICYmIGlzVmFsaWQoZWQsIHBhcmVudE5hbWUsIHdyYXBOYW1lKTtcbiAgICAgICAgICByZXR1cm4gaXNFZGl0YWJsZURlc2NlbmRhbnQgJiYgaXNWYWxpZEJsb2NrRm9ybWF0Rm9yTm9kZTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2FuV3JhcE5vZGUgPSAobm9kZSwgcGFyZW50TmFtZSwgaXNFZGl0YWJsZURlc2NlbmRhbnQsIGlzV3JhcHBhYmxlTm9uZWRpdGFibGVFbG0pID0+IHtcbiAgICAgICAgICBjb25zdCBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBjb25zdCBpc1ZhbGlkV3JhcE5vZGUgPSBpc1ZhbGlkKGVkLCB3cmFwTmFtZSwgbm9kZU5hbWUpICYmIGlzVmFsaWQoZWQsIHBhcmVudE5hbWUsIHdyYXBOYW1lKTtcbiAgICAgICAgICBjb25zdCBpc1p3c3AgPSAhbm9kZVNwZWNpZmljICYmIGlzVGV4dCRhKG5vZGUpICYmIGlzWndzcCQxKG5vZGUuZGF0YSk7XG4gICAgICAgICAgY29uc3QgaXNDYXJldCA9IGlzQ2FyZXROb2RlKG5vZGUpO1xuICAgICAgICAgIGNvbnN0IGlzQ29ycmVjdEZvcm1hdEZvck5vZGUgPSAhaXNJbmxpbmVGb3JtYXQoZm9ybWF0KSB8fCAhZG9tLmlzQmxvY2sobm9kZSk7XG4gICAgICAgICAgcmV0dXJuIChpc0VkaXRhYmxlRGVzY2VuZGFudCB8fCBpc1dyYXBwYWJsZU5vbmVkaXRhYmxlRWxtKSAmJiBpc1ZhbGlkV3JhcE5vZGUgJiYgIWlzWndzcCAmJiAhaXNDYXJldCAmJiBpc0NvcnJlY3RGb3JtYXRGb3JOb2RlO1xuICAgICAgICB9O1xuICAgICAgICB3YWxrJDMoZG9tLCBybmcsIG5vZGVzID0+IHtcbiAgICAgICAgICBsZXQgY3VycmVudFdyYXBFbG07XG4gICAgICAgICAgY29uc3QgcHJvY2VzcyA9IG5vZGUgPT4ge1xuICAgICAgICAgICAgbGV0IGhhc0NvbnRlbnRFZGl0YWJsZVN0YXRlID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgbGFzdENvbnRlbnRFZGl0YWJsZSA9IGNvbnRlbnRFZGl0YWJsZTtcbiAgICAgICAgICAgIGxldCBpc1dyYXBwYWJsZU5vbmVkaXRhYmxlRWxtID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50TmFtZSA9IHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRFZGl0YWJsZVZhbHVlID0gZG9tLmdldENvbnRlbnRFZGl0YWJsZShub2RlKTtcbiAgICAgICAgICAgIGlmIChpc05vbk51bGxhYmxlKGNvbnRlbnRFZGl0YWJsZVZhbHVlKSkge1xuICAgICAgICAgICAgICBsYXN0Q29udGVudEVkaXRhYmxlID0gY29udGVudEVkaXRhYmxlO1xuICAgICAgICAgICAgICBjb250ZW50RWRpdGFibGUgPSBjb250ZW50RWRpdGFibGVWYWx1ZSA9PT0gJ3RydWUnO1xuICAgICAgICAgICAgICBoYXNDb250ZW50RWRpdGFibGVTdGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgIGlzV3JhcHBhYmxlTm9uZWRpdGFibGVFbG0gPSBpc1dyYXBwYWJsZU5vbmVkaXRhYmxlKGVkLCBub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGlzRWRpdGFibGVEZXNjZW5kYW50ID0gY29udGVudEVkaXRhYmxlICYmICFoYXNDb250ZW50RWRpdGFibGVTdGF0ZTtcbiAgICAgICAgICAgIGlmIChpc0JyJDYobm9kZSkgJiYgIWNhbkZvcm1hdEJSKGVkLCBmb3JtYXQsIG5vZGUsIHBhcmVudE5hbWUpKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRXcmFwRWxtID0gbnVsbDtcbiAgICAgICAgICAgICAgaWYgKGlzQmxvY2tGb3JtYXQoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGRvbS5yZW1vdmUobm9kZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzTWF0Y2hpbmdXcmFwcGluZ0Jsb2NrKG5vZGUpKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRXcmFwRWxtID0gbnVsbDtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNhblJlbmFtZUJsb2NrKG5vZGUsIHBhcmVudE5hbWUsIGlzRWRpdGFibGVEZXNjZW5kYW50KSkge1xuICAgICAgICAgICAgICBjb25zdCBlbG0gPSBkb20ucmVuYW1lKG5vZGUsIHdyYXBOYW1lKTtcbiAgICAgICAgICAgICAgc2V0RWxlbWVudEZvcm1hdChlbG0pO1xuICAgICAgICAgICAgICBuZXdXcmFwcGVycy5wdXNoKGVsbSk7XG4gICAgICAgICAgICAgIGN1cnJlbnRXcmFwRWxtID0gbnVsbDtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU2VsZWN0b3JGb3JtYXQoZm9ybWF0KSkge1xuICAgICAgICAgICAgICBsZXQgZm91bmQgPSBhcHBseU5vZGVTdHlsZShmb3JtYXRMaXN0LCBub2RlKTtcbiAgICAgICAgICAgICAgaWYgKCFmb3VuZCAmJiBpc05vbk51bGxhYmxlKHBhcmVudE5vZGUpICYmIHNob3VsZEV4cGFuZFRvU2VsZWN0b3IoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGZvdW5kID0gYXBwbHlOb2RlU3R5bGUoZm9ybWF0TGlzdCwgcGFyZW50Tm9kZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCFpc0lubGluZUZvcm1hdChmb3JtYXQpIHx8IGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFdyYXBFbG0gPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzTm9uTnVsbGFibGUod3JhcEVsbSkgJiYgY2FuV3JhcE5vZGUobm9kZSwgcGFyZW50TmFtZSwgaXNFZGl0YWJsZURlc2NlbmRhbnQsIGlzV3JhcHBhYmxlTm9uZWRpdGFibGVFbG0pKSB7XG4gICAgICAgICAgICAgIGlmICghY3VycmVudFdyYXBFbG0pIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50V3JhcEVsbSA9IGRvbS5jbG9uZSh3cmFwRWxtLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY3VycmVudFdyYXBFbG0sIG5vZGUpO1xuICAgICAgICAgICAgICAgIG5ld1dyYXBwZXJzLnB1c2goY3VycmVudFdyYXBFbG0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChpc1dyYXBwYWJsZU5vbmVkaXRhYmxlRWxtICYmIGhhc0NvbnRlbnRFZGl0YWJsZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY29udGVudEVkaXRhYmxlID0gbGFzdENvbnRlbnRFZGl0YWJsZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjdXJyZW50V3JhcEVsbS5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRXcmFwRWxtID0gbnVsbDtcbiAgICAgICAgICAgICAgZWFjaCRlKGZyb20obm9kZS5jaGlsZE5vZGVzKSwgcHJvY2Vzcyk7XG4gICAgICAgICAgICAgIGlmIChoYXNDb250ZW50RWRpdGFibGVTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnRlbnRFZGl0YWJsZSA9IGxhc3RDb250ZW50RWRpdGFibGU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY3VycmVudFdyYXBFbG0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgZWFjaCRlKG5vZGVzLCBwcm9jZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChmb3JtYXQubGlua3MgPT09IHRydWUpIHtcbiAgICAgICAgICBlYWNoJGUobmV3V3JhcHBlcnMsIG5vZGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvY2VzcyA9IG5vZGUgPT4ge1xuICAgICAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gJ0EnKSB7XG4gICAgICAgICAgICAgICAgc2V0RWxlbWVudEZvcm1hdChub2RlLCBmb3JtYXQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVhY2gkZShmcm9tKG5vZGUuY2hpbGROb2RlcyksIHByb2Nlc3MpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHByb2Nlc3Mobm9kZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWFjaCRlKG5ld1dyYXBwZXJzLCBub2RlID0+IHtcbiAgICAgICAgICBjb25zdCBnZXRDaGlsZENvdW50ID0gbm9kZSA9PiB7XG4gICAgICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICAgICAgZWFjaCRlKG5vZGUuY2hpbGROb2Rlcywgbm9kZSA9PiB7XG4gICAgICAgICAgICAgIGlmICghaXNFbXB0eVRleHROb2RlJDEobm9kZSkgJiYgIWlzQm9va21hcmtOb2RlJDEobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBjb3VudDtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IG1lcmdlU3R5bGVzID0gbm9kZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZEVsZW1lbnQgPSBmaW5kJDIobm9kZS5jaGlsZE5vZGVzLCBpc0VsZW1lbnROb2RlJDEpLmZpbHRlcihjaGlsZCA9PiBkb20uZ2V0Q29udGVudEVkaXRhYmxlKGNoaWxkKSAhPT0gJ2ZhbHNlJyAmJiBtYXRjaE5hbWUoZG9tLCBjaGlsZCwgZm9ybWF0KSk7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRFbGVtZW50Lm1hcChjaGlsZCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNsb25lID0gZG9tLmNsb25lKGNoaWxkLCBmYWxzZSk7XG4gICAgICAgICAgICAgIHNldEVsZW1lbnRGb3JtYXQoY2xvbmUpO1xuICAgICAgICAgICAgICBkb20ucmVwbGFjZShjbG9uZSwgbm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgIGRvbS5yZW1vdmUoY2hpbGQsIHRydWUpO1xuICAgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgICAgICAgICB9KS5nZXRPcihub2RlKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGNoaWxkQ291bnQgPSBnZXRDaGlsZENvdW50KG5vZGUpO1xuICAgICAgICAgIGlmICgobmV3V3JhcHBlcnMubGVuZ3RoID4gMSB8fCAhZG9tLmlzQmxvY2sobm9kZSkpICYmIGNoaWxkQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIGRvbS5yZW1vdmUobm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0lubGluZUZvcm1hdChmb3JtYXQpIHx8IGlzQmxvY2tGb3JtYXQoZm9ybWF0KSAmJiBmb3JtYXQud3JhcHBlcikge1xuICAgICAgICAgICAgaWYgKCFmb3JtYXQuZXhhY3QgJiYgY2hpbGRDb3VudCA9PT0gMSkge1xuICAgICAgICAgICAgICBub2RlID0gbWVyZ2VTdHlsZXMobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtZXJnZVdpdGhDaGlsZHJlbihlZCwgZm9ybWF0TGlzdCwgdmFycywgbm9kZSk7XG4gICAgICAgICAgICBtZXJnZVdpdGhQYXJlbnRzKGVkLCBmb3JtYXQsIG5hbWUsIHZhcnMsIG5vZGUpO1xuICAgICAgICAgICAgbWVyZ2VCYWNrZ3JvdW5kQ29sb3JBbmRGb250U2l6ZShkb20sIGZvcm1hdCwgdmFycywgbm9kZSk7XG4gICAgICAgICAgICBtZXJnZVRleHREZWNvcmF0aW9uc0FuZENvbG9yKGRvbSwgZm9ybWF0LCB2YXJzLCBub2RlKTtcbiAgICAgICAgICAgIG1lcmdlU3ViU3VwKGRvbSwgZm9ybWF0LCB2YXJzLCBub2RlKTtcbiAgICAgICAgICAgIG1lcmdlU2libGluZ3MoZWQsIGZvcm1hdCwgdmFycywgbm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCB0YXJnZXROb2RlID0gaXNOb2RlKG5vZGUpID8gbm9kZSA6IHNlbGVjdGlvbi5nZXROb2RlKCk7XG4gICAgICBpZiAoZG9tLmdldENvbnRlbnRFZGl0YWJsZSh0YXJnZXROb2RlKSA9PT0gJ2ZhbHNlJyAmJiAhaXNXcmFwcGFibGVOb25lZGl0YWJsZShlZCwgdGFyZ2V0Tm9kZSkpIHtcbiAgICAgICAgbm9kZSA9IHRhcmdldE5vZGU7XG4gICAgICAgIGFwcGx5Tm9kZVN0eWxlKGZvcm1hdExpc3QsIG5vZGUpO1xuICAgICAgICBmaXJlRm9ybWF0QXBwbHkoZWQsIG5hbWUsIG5vZGUsIHZhcnMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZm9ybWF0KSB7XG4gICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgaWYgKGlzTm9kZShub2RlKSkge1xuICAgICAgICAgICAgaWYgKCFhcHBseU5vZGVTdHlsZShmb3JtYXRMaXN0LCBub2RlKSkge1xuICAgICAgICAgICAgICBjb25zdCBybmcgPSBkb20uY3JlYXRlUm5nKCk7XG4gICAgICAgICAgICAgIHJuZy5zZXRTdGFydEJlZm9yZShub2RlKTtcbiAgICAgICAgICAgICAgcm5nLnNldEVuZEFmdGVyKG5vZGUpO1xuICAgICAgICAgICAgICBhcHBseVJuZ1N0eWxlKGRvbSwgZXhwYW5kUm5nKGRvbSwgcm5nLCBmb3JtYXRMaXN0KSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFwcGx5Um5nU3R5bGUoZG9tLCBub2RlLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFpc0NvbGxhcHNlZCB8fCAhaXNJbmxpbmVGb3JtYXQoZm9ybWF0KSB8fCBnZXRDZWxsc0Zyb21FZGl0b3IoZWQpLmxlbmd0aCkge1xuICAgICAgICAgICAgc2VsZWN0aW9uLnNldFJuZyhub3JtYWxpemUoc2VsZWN0aW9uLmdldFJuZygpKSk7XG4gICAgICAgICAgICBwcmVzZXJ2ZVNlbGVjdGlvbihlZCwgKCkgPT4ge1xuICAgICAgICAgICAgICBydW5PblJhbmdlcyhlZCwgKHNlbGVjdGlvblJuZywgZmFrZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkUm5nID0gZmFrZSA/IHNlbGVjdGlvblJuZyA6IGV4cGFuZFJuZyhkb20sIHNlbGVjdGlvblJuZywgZm9ybWF0TGlzdCk7XG4gICAgICAgICAgICAgICAgYXBwbHlSbmdTdHlsZShkb20sIGV4cGFuZGVkUm5nLCBmYWxzZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgYWx3YXlzKTtcbiAgICAgICAgICAgIGVkLm5vZGVDaGFuZ2VkKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFwcGx5Q2FyZXRGb3JtYXQoZWQsIG5hbWUsIHZhcnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBnZXRFeHBhbmRlZExpc3RJdGVtRm9ybWF0KGVkLmZvcm1hdHRlciwgbmFtZSkuZWFjaChsaUZtdCA9PiB7XG4gICAgICAgICAgICBlYWNoJGUoZ2V0RnVsbHlTZWxlY3RlZExpc3RJdGVtcyhlZC5zZWxlY3Rpb24pLCBsaSA9PiBhcHBseVN0eWxlcyhkb20sIGxpLCBsaUZtdCwgdmFycykpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHBvc3RQcm9jZXNzJDEobmFtZSwgZWQpO1xuICAgICAgfVxuICAgICAgZmlyZUZvcm1hdEFwcGx5KGVkLCBuYW1lLCBub2RlLCB2YXJzKTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5Rm9ybWF0JDEgPSAoZWRpdG9yLCBuYW1lLCB2YXJzLCBub2RlKSA9PiB7XG4gICAgICBpZiAobm9kZSB8fCBlZGl0b3Iuc2VsZWN0aW9uLmlzRWRpdGFibGUoKSkge1xuICAgICAgICBhcHBseUZvcm1hdEFjdGlvbihlZGl0b3IsIG5hbWUsIHZhcnMsIG5vZGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBoYXNWYXJzID0gdmFsdWUgPT4gaGFzJDIodmFsdWUsICd2YXJzJyk7XG4gICAgY29uc3Qgc2V0dXAkdCA9IChyZWdpc3RlcmVkRm9ybWF0TGlzdGVuZXJzLCBlZGl0b3IpID0+IHtcbiAgICAgIHJlZ2lzdGVyZWRGb3JtYXRMaXN0ZW5lcnMuc2V0KHt9KTtcbiAgICAgIGVkaXRvci5vbignTm9kZUNoYW5nZScsIGUgPT4ge1xuICAgICAgICB1cGRhdGVBbmRGaXJlQ2hhbmdlQ2FsbGJhY2tzKGVkaXRvciwgZS5lbGVtZW50LCByZWdpc3RlcmVkRm9ybWF0TGlzdGVuZXJzLmdldCgpKTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdGb3JtYXRBcHBseSBGb3JtYXRSZW1vdmUnLCBlID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IE9wdGlvbmFsLmZyb20oZS5ub2RlKS5tYXAobm9kZU9yUmFuZ2UgPT4gaXNOb2RlKG5vZGVPclJhbmdlKSA/IG5vZGVPclJhbmdlIDogbm9kZU9yUmFuZ2Uuc3RhcnRDb250YWluZXIpLmJpbmQobm9kZSA9PiBpc0VsZW1lbnQkNihub2RlKSA/IE9wdGlvbmFsLnNvbWUobm9kZSkgOiBPcHRpb25hbC5mcm9tKG5vZGUucGFyZW50RWxlbWVudCkpLmdldE9yVGh1bmsoKCkgPT4gZmFsbGJhY2tFbGVtZW50KGVkaXRvcikpO1xuICAgICAgICB1cGRhdGVBbmRGaXJlQ2hhbmdlQ2FsbGJhY2tzKGVkaXRvciwgZWxlbWVudCwgcmVnaXN0ZXJlZEZvcm1hdExpc3RlbmVycy5nZXQoKSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZhbGxiYWNrRWxlbWVudCA9IGVkaXRvciA9PiBlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KCk7XG4gICAgY29uc3QgbWF0Y2hpbmdOb2RlID0gKGVkaXRvciwgcGFyZW50cywgZm9ybWF0LCBzaW1pbGFyLCB2YXJzKSA9PiB7XG4gICAgICBjb25zdCBpc01hdGNoaW5nTm9kZSA9IG5vZGUgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaGluZ0Zvcm1hdCA9IGVkaXRvci5mb3JtYXR0ZXIubWF0Y2hOb2RlKG5vZGUsIGZvcm1hdCwgdmFycyAhPT0gbnVsbCAmJiB2YXJzICE9PSB2b2lkIDAgPyB2YXJzIDoge30sIHNpbWlsYXIpO1xuICAgICAgICByZXR1cm4gIWlzVW5kZWZpbmVkKG1hdGNoaW5nRm9ybWF0KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1VuYWJsZVRvTWF0Y2ggPSBub2RlID0+IHtcbiAgICAgICAgaWYgKG1hdGNoZXNVbkluaGVyaXRlZEZvcm1hdFNlbGVjdG9yKGVkaXRvciwgbm9kZSwgZm9ybWF0KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghc2ltaWxhcikge1xuICAgICAgICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUoZWRpdG9yLmZvcm1hdHRlci5tYXRjaE5vZGUobm9kZSwgZm9ybWF0LCB2YXJzLCB0cnVlKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gZmluZFVudGlsJDEocGFyZW50cywgaXNNYXRjaGluZ05vZGUsIGlzVW5hYmxlVG9NYXRjaCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRQYXJlbnRzID0gKGVkaXRvciwgZWxtKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZWxtICE9PSBudWxsICYmIGVsbSAhPT0gdm9pZCAwID8gZWxtIDogZmFsbGJhY2tFbGVtZW50KGVkaXRvcik7XG4gICAgICByZXR1cm4gZmlsdGVyJDUoZ2V0UGFyZW50cyQyKGVkaXRvci5kb20sIGVsZW1lbnQpLCBub2RlID0+IGlzRWxlbWVudCQ2KG5vZGUpICYmICFpc0JvZ3VzJDIobm9kZSkpO1xuICAgIH07XG4gICAgY29uc3QgdXBkYXRlQW5kRmlyZUNoYW5nZUNhbGxiYWNrcyA9IChlZGl0b3IsIGVsbSwgcmVnaXN0ZXJlZENhbGxiYWNrcykgPT4ge1xuICAgICAgY29uc3QgcGFyZW50cyA9IGdldFBhcmVudHMoZWRpdG9yLCBlbG0pO1xuICAgICAgZWFjaCRkKHJlZ2lzdGVyZWRDYWxsYmFja3MsIChkYXRhLCBmb3JtYXQpID0+IHtcbiAgICAgICAgY29uc3QgcnVuSWZDaGFuZ2VkID0gc3BlYyA9PiB7XG4gICAgICAgICAgY29uc3QgbWF0Y2ggPSBtYXRjaGluZ05vZGUoZWRpdG9yLCBwYXJlbnRzLCBmb3JtYXQsIHNwZWMuc2ltaWxhciwgaGFzVmFycyhzcGVjKSA/IHNwZWMudmFycyA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgY29uc3QgaXNTZXQgPSBtYXRjaC5pc1NvbWUoKTtcbiAgICAgICAgICBpZiAoc3BlYy5zdGF0ZS5nZXQoKSAhPT0gaXNTZXQpIHtcbiAgICAgICAgICAgIHNwZWMuc3RhdGUuc2V0KGlzU2V0KTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBtYXRjaC5nZXRPcihlbG0pO1xuICAgICAgICAgICAgaWYgKGhhc1ZhcnMoc3BlYykpIHtcbiAgICAgICAgICAgICAgc3BlYy5jYWxsYmFjayhpc1NldCwge1xuICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgZm9ybWF0LFxuICAgICAgICAgICAgICAgIHBhcmVudHNcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlYWNoJGUoc3BlYy5jYWxsYmFja3MsIGNhbGxiYWNrID0+IGNhbGxiYWNrKGlzU2V0LCB7XG4gICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgICAgICAgcGFyZW50c1xuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBlYWNoJGUoW1xuICAgICAgICAgIGRhdGEud2l0aFNpbWlsYXIsXG4gICAgICAgICAgZGF0YS53aXRob3V0U2ltaWxhclxuICAgICAgICBdLCBydW5JZkNoYW5nZWQpO1xuICAgICAgICBlYWNoJGUoZGF0YS53aXRoVmFycywgcnVuSWZDaGFuZ2VkKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYWRkTGlzdGVuZXJzID0gKGVkaXRvciwgcmVnaXN0ZXJlZEZvcm1hdExpc3RlbmVycywgZm9ybWF0cywgY2FsbGJhY2ssIHNpbWlsYXIsIHZhcnMpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdENoYW5nZUl0ZW1zID0gcmVnaXN0ZXJlZEZvcm1hdExpc3RlbmVycy5nZXQoKTtcbiAgICAgIGVhY2gkZShmb3JtYXRzLnNwbGl0KCcsJyksIGZvcm1hdCA9PiB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gZ2V0JGEoZm9ybWF0Q2hhbmdlSXRlbXMsIGZvcm1hdCkuZ2V0T3JUaHVuaygoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYmFzZSA9IHtcbiAgICAgICAgICAgIHdpdGhTaW1pbGFyOiB7XG4gICAgICAgICAgICAgIHN0YXRlOiBDZWxsKGZhbHNlKSxcbiAgICAgICAgICAgICAgc2ltaWxhcjogdHJ1ZSxcbiAgICAgICAgICAgICAgY2FsbGJhY2tzOiBbXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdpdGhvdXRTaW1pbGFyOiB7XG4gICAgICAgICAgICAgIHN0YXRlOiBDZWxsKGZhbHNlKSxcbiAgICAgICAgICAgICAgc2ltaWxhcjogZmFsc2UsXG4gICAgICAgICAgICAgIGNhbGxiYWNrczogW11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3aXRoVmFyczogW11cbiAgICAgICAgICB9O1xuICAgICAgICAgIGZvcm1hdENoYW5nZUl0ZW1zW2Zvcm1hdF0gPSBiYXNlO1xuICAgICAgICAgIHJldHVybiBiYXNlO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZ2V0Q3VycmVudCA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJlbnRzID0gZ2V0UGFyZW50cyhlZGl0b3IpO1xuICAgICAgICAgIHJldHVybiBtYXRjaGluZ05vZGUoZWRpdG9yLCBwYXJlbnRzLCBmb3JtYXQsIHNpbWlsYXIsIHZhcnMpLmlzU29tZSgpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFycykpIHtcbiAgICAgICAgICBjb25zdCB0b0FwcGVuZFRvID0gc2ltaWxhciA/IGdyb3VwLndpdGhTaW1pbGFyIDogZ3JvdXAud2l0aG91dFNpbWlsYXI7XG4gICAgICAgICAgdG9BcHBlbmRUby5jYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgaWYgKHRvQXBwZW5kVG8uY2FsbGJhY2tzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgdG9BcHBlbmRUby5zdGF0ZS5zZXQoZ2V0Q3VycmVudCgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JvdXAud2l0aFZhcnMucHVzaCh7XG4gICAgICAgICAgICBzdGF0ZTogQ2VsbChnZXRDdXJyZW50KCkpLFxuICAgICAgICAgICAgc2ltaWxhcixcbiAgICAgICAgICAgIHZhcnMsXG4gICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyZWRGb3JtYXRMaXN0ZW5lcnMuc2V0KGZvcm1hdENoYW5nZUl0ZW1zKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZUxpc3RlbmVycyA9IChyZWdpc3RlcmVkRm9ybWF0TGlzdGVuZXJzLCBmb3JtYXRzLCBjYWxsYmFjaykgPT4ge1xuICAgICAgY29uc3QgZm9ybWF0Q2hhbmdlSXRlbXMgPSByZWdpc3RlcmVkRm9ybWF0TGlzdGVuZXJzLmdldCgpO1xuICAgICAgZWFjaCRlKGZvcm1hdHMuc3BsaXQoJywnKSwgZm9ybWF0ID0+IGdldCRhKGZvcm1hdENoYW5nZUl0ZW1zLCBmb3JtYXQpLmVhY2goZ3JvdXAgPT4ge1xuICAgICAgICBmb3JtYXRDaGFuZ2VJdGVtc1tmb3JtYXRdID0ge1xuICAgICAgICAgIHdpdGhTaW1pbGFyOiB7XG4gICAgICAgICAgICAuLi5ncm91cC53aXRoU2ltaWxhcixcbiAgICAgICAgICAgIGNhbGxiYWNrczogZmlsdGVyJDUoZ3JvdXAud2l0aFNpbWlsYXIuY2FsbGJhY2tzLCBjYiA9PiBjYiAhPT0gY2FsbGJhY2spXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aXRob3V0U2ltaWxhcjoge1xuICAgICAgICAgICAgLi4uZ3JvdXAud2l0aG91dFNpbWlsYXIsXG4gICAgICAgICAgICBjYWxsYmFja3M6IGZpbHRlciQ1KGdyb3VwLndpdGhvdXRTaW1pbGFyLmNhbGxiYWNrcywgY2IgPT4gY2IgIT09IGNhbGxiYWNrKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgd2l0aFZhcnM6IGZpbHRlciQ1KGdyb3VwLndpdGhWYXJzLCBpdGVtID0+IGl0ZW0uY2FsbGJhY2sgIT09IGNhbGxiYWNrKVxuICAgICAgICB9O1xuICAgICAgfSkpO1xuICAgICAgcmVnaXN0ZXJlZEZvcm1hdExpc3RlbmVycy5zZXQoZm9ybWF0Q2hhbmdlSXRlbXMpO1xuICAgIH07XG4gICAgY29uc3QgZm9ybWF0Q2hhbmdlZEludGVybmFsID0gKGVkaXRvciwgcmVnaXN0ZXJlZEZvcm1hdExpc3RlbmVycywgZm9ybWF0cywgY2FsbGJhY2ssIHNpbWlsYXIsIHZhcnMpID0+IHtcbiAgICAgIGFkZExpc3RlbmVycyhlZGl0b3IsIHJlZ2lzdGVyZWRGb3JtYXRMaXN0ZW5lcnMsIGZvcm1hdHMsIGNhbGxiYWNrLCBzaW1pbGFyLCB2YXJzKTtcbiAgICAgIHJldHVybiB7IHVuYmluZDogKCkgPT4gcmVtb3ZlTGlzdGVuZXJzKHJlZ2lzdGVyZWRGb3JtYXRMaXN0ZW5lcnMsIGZvcm1hdHMsIGNhbGxiYWNrKSB9O1xuICAgIH07XG5cbiAgICBjb25zdCB0b2dnbGUgPSAoZWRpdG9yLCBuYW1lLCB2YXJzLCBub2RlKSA9PiB7XG4gICAgICBjb25zdCBmbXQgPSBlZGl0b3IuZm9ybWF0dGVyLmdldChuYW1lKTtcbiAgICAgIGlmIChmbXQpIHtcbiAgICAgICAgaWYgKG1hdGNoJDIoZWRpdG9yLCBuYW1lLCB2YXJzLCBub2RlKSAmJiAoISgndG9nZ2xlJyBpbiBmbXRbMF0pIHx8IGZtdFswXS50b2dnbGUpKSB7XG4gICAgICAgICAgcmVtb3ZlRm9ybWF0JDEoZWRpdG9yLCBuYW1lLCB2YXJzLCBub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcHBseUZvcm1hdCQxKGVkaXRvciwgbmFtZSwgdmFycywgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZXhwbG9kZSQxID0gVG9vbHMuZXhwbG9kZTtcbiAgICBjb25zdCBjcmVhdGUkOCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcnMgPSB7fTtcbiAgICAgIGNvbnN0IGFkZEZpbHRlciA9IChuYW1lLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBlYWNoJGUoZXhwbG9kZSQxKG5hbWUpLCBuYW1lID0+IHtcbiAgICAgICAgICBpZiAoIWhhcyQyKGZpbHRlcnMsIG5hbWUpKSB7XG4gICAgICAgICAgICBmaWx0ZXJzW25hbWVdID0ge1xuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICBjYWxsYmFja3M6IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaWx0ZXJzW25hbWVdLmNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0RmlsdGVycyA9ICgpID0+IHZhbHVlcyhmaWx0ZXJzKTtcbiAgICAgIGNvbnN0IHJlbW92ZUZpbHRlciA9IChuYW1lLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBlYWNoJGUoZXhwbG9kZSQxKG5hbWUpLCBuYW1lID0+IHtcbiAgICAgICAgICBpZiAoaGFzJDIoZmlsdGVycywgbmFtZSkpIHtcbiAgICAgICAgICAgIGlmIChpc05vbk51bGxhYmxlKGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBmaWx0ZXJzW25hbWVdO1xuICAgICAgICAgICAgICBjb25zdCBuZXdDYWxsYmFja3MgPSBmaWx0ZXIkNShmaWx0ZXIuY2FsbGJhY2tzLCBjID0+IGMgIT09IGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgaWYgKG5ld0NhbGxiYWNrcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLmNhbGxiYWNrcyA9IG5ld0NhbGxiYWNrcztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgZmlsdGVyc1tuYW1lXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGVsZXRlIGZpbHRlcnNbbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhZGRGaWx0ZXIsXG4gICAgICAgIGdldEZpbHRlcnMsXG4gICAgICAgIHJlbW92ZUZpbHRlclxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVtb3ZlQXR0cnMgPSAobm9kZSwgbmFtZXMpID0+IHtcbiAgICAgIGVhY2gkZShuYW1lcywgbmFtZSA9PiB7XG4gICAgICAgIG5vZGUuYXR0cihuYW1lLCBudWxsKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYWRkRm9udFRvU3BhbnNGaWx0ZXIgPSAoZG9tUGFyc2VyLCBzdHlsZXMsIGZvbnRTaXplcykgPT4ge1xuICAgICAgZG9tUGFyc2VyLmFkZE5vZGVGaWx0ZXIoJ2ZvbnQnLCBub2RlcyA9PiB7XG4gICAgICAgIGVhY2gkZShub2Rlcywgbm9kZSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJvcHMgPSBzdHlsZXMucGFyc2Uobm9kZS5hdHRyKCdzdHlsZScpKTtcbiAgICAgICAgICBjb25zdCBjb2xvciA9IG5vZGUuYXR0cignY29sb3InKTtcbiAgICAgICAgICBjb25zdCBmYWNlID0gbm9kZS5hdHRyKCdmYWNlJyk7XG4gICAgICAgICAgY29uc3Qgc2l6ZSA9IG5vZGUuYXR0cignc2l6ZScpO1xuICAgICAgICAgIGlmIChjb2xvcikge1xuICAgICAgICAgICAgcHJvcHMuY29sb3IgPSBjb2xvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZhY2UpIHtcbiAgICAgICAgICAgIHByb3BzWydmb250LWZhbWlseSddID0gZmFjZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNpemUpIHtcbiAgICAgICAgICAgIHRvSW50KHNpemUpLmVhY2gobnVtID0+IHtcbiAgICAgICAgICAgICAgcHJvcHNbJ2ZvbnQtc2l6ZSddID0gZm9udFNpemVzW251bSAtIDFdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5vZGUubmFtZSA9ICdzcGFuJztcbiAgICAgICAgICBub2RlLmF0dHIoJ3N0eWxlJywgc3R5bGVzLnNlcmlhbGl6ZShwcm9wcykpO1xuICAgICAgICAgIHJlbW92ZUF0dHJzKG5vZGUsIFtcbiAgICAgICAgICAgICdjb2xvcicsXG4gICAgICAgICAgICAnZmFjZScsXG4gICAgICAgICAgICAnc2l6ZSdcbiAgICAgICAgICBdKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFkZFN0cmlrZUZpbHRlciA9IChkb21QYXJzZXIsIHNjaGVtYSwgc3R5bGVzKSA9PiB7XG4gICAgICBkb21QYXJzZXIuYWRkTm9kZUZpbHRlcignc3RyaWtlJywgbm9kZXMgPT4ge1xuICAgICAgICBjb25zdCBjb252ZXJ0VG9TVGFnID0gc2NoZW1hLnR5cGUgIT09ICdodG1sNCc7XG4gICAgICAgIGVhY2gkZShub2Rlcywgbm9kZSA9PiB7XG4gICAgICAgICAgaWYgKGNvbnZlcnRUb1NUYWcpIHtcbiAgICAgICAgICAgIG5vZGUubmFtZSA9ICdzJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBzdHlsZXMucGFyc2Uobm9kZS5hdHRyKCdzdHlsZScpKTtcbiAgICAgICAgICAgIHByb3BzWyd0ZXh0LWRlY29yYXRpb24nXSA9ICdsaW5lLXRocm91Z2gnO1xuICAgICAgICAgICAgbm9kZS5uYW1lID0gJ3NwYW4nO1xuICAgICAgICAgICAgbm9kZS5hdHRyKCdzdHlsZScsIHN0eWxlcy5zZXJpYWxpemUocHJvcHMpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBhZGRGaWx0ZXJzID0gKGRvbVBhcnNlciwgc2V0dGluZ3MsIHNjaGVtYSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3Qgc3R5bGVzID0gU3R5bGVzKCk7XG4gICAgICBpZiAoc2V0dGluZ3MuY29udmVydF9mb250c190b19zcGFucykge1xuICAgICAgICBhZGRGb250VG9TcGFuc0ZpbHRlcihkb21QYXJzZXIsIHN0eWxlcywgVG9vbHMuZXhwbG9kZSgoX2EgPSBzZXR0aW5ncy5mb250X3NpemVfbGVnYWN5X3ZhbHVlcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJycpKTtcbiAgICAgIH1cbiAgICAgIGFkZFN0cmlrZUZpbHRlcihkb21QYXJzZXIsIHNjaGVtYSwgc3R5bGVzKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyJDUgPSAoZG9tUGFyc2VyLCBzZXR0aW5ncywgc2NoZW1hKSA9PiB7XG4gICAgICBpZiAoc2V0dGluZ3MuaW5saW5lX3N0eWxlcykge1xuICAgICAgICBhZGRGaWx0ZXJzKGRvbVBhcnNlciwgc2V0dGluZ3MsIHNjaGVtYSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGFkZE5vZGVGaWx0ZXIgPSAoc2V0dGluZ3MsIGh0bWxQYXJzZXIsIHNjaGVtYSkgPT4ge1xuICAgICAgaHRtbFBhcnNlci5hZGROb2RlRmlsdGVyKCdicicsIChub2RlcywgXywgYXJncykgPT4ge1xuICAgICAgICBjb25zdCBibG9ja0VsZW1lbnRzID0gVG9vbHMuZXh0ZW5kKHt9LCBzY2hlbWEuZ2V0QmxvY2tFbGVtZW50cygpKTtcbiAgICAgICAgY29uc3Qgbm9uRW1wdHlFbGVtZW50cyA9IHNjaGVtYS5nZXROb25FbXB0eUVsZW1lbnRzKCk7XG4gICAgICAgIGNvbnN0IHdoaXRlc3BhY2VFbGVtZW50cyA9IHNjaGVtYS5nZXRXaGl0ZXNwYWNlRWxlbWVudHMoKTtcbiAgICAgICAgYmxvY2tFbGVtZW50cy5ib2R5ID0gMTtcbiAgICAgICAgY29uc3QgaXNCbG9jayA9IG5vZGUgPT4gbm9kZS5uYW1lIGluIGJsb2NrRWxlbWVudHMgfHwgaXNUcmFuc3BhcmVudEFzdEJsb2NrKHNjaGVtYSwgbm9kZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gbm9kZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgbGV0IG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgICBsZXQgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG4gICAgICAgICAgaWYgKHBhcmVudCAmJiBpc0Jsb2NrKHBhcmVudCkgJiYgbm9kZSA9PT0gcGFyZW50Lmxhc3RDaGlsZCkge1xuICAgICAgICAgICAgbGV0IHByZXYgPSBub2RlLnByZXY7XG4gICAgICAgICAgICB3aGlsZSAocHJldikge1xuICAgICAgICAgICAgICBjb25zdCBwcmV2TmFtZSA9IHByZXYubmFtZTtcbiAgICAgICAgICAgICAgaWYgKHByZXZOYW1lICE9PSAnc3BhbicgfHwgcHJldi5hdHRyKCdkYXRhLW1jZS10eXBlJykgIT09ICdib29rbWFyaycpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldk5hbWUgPT09ICdicicpIHtcbiAgICAgICAgICAgICAgICAgIG5vZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwcmV2ID0gcHJldi5wcmV2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgaWYgKGlzRW1wdHkoc2NoZW1hLCBub25FbXB0eUVsZW1lbnRzLCB3aGl0ZXNwYWNlRWxlbWVudHMsIHBhcmVudCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50UnVsZSA9IHNjaGVtYS5nZXRFbGVtZW50UnVsZShwYXJlbnQubmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRSdWxlKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFJ1bGUucmVtb3ZlRW1wdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50UnVsZS5wYWRkRW1wdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZEVtcHR5Tm9kZShzZXR0aW5ncywgYXJncywgaXNCbG9jaywgcGFyZW50KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGxhc3RQYXJlbnQgPSBub2RlO1xuICAgICAgICAgICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQuZmlyc3RDaGlsZCA9PT0gbGFzdFBhcmVudCAmJiBwYXJlbnQubGFzdENoaWxkID09PSBsYXN0UGFyZW50KSB7XG4gICAgICAgICAgICAgIGxhc3RQYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgICAgICAgIGlmIChibG9ja0VsZW1lbnRzW3BhcmVudC5uYW1lXSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGFzdFBhcmVudCA9PT0gcGFyZW50KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gbmV3IEFzdE5vZGUoJyN0ZXh0JywgMyk7XG4gICAgICAgICAgICAgIHRleHROb2RlLnZhbHVlID0gbmJzcDtcbiAgICAgICAgICAgICAgbm9kZS5yZXBsYWNlKHRleHROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBibG9iVXJpVG9CbG9iID0gdXJsID0+IGZldGNoKHVybCkudGhlbihyZXMgPT4gcmVzLm9rID8gcmVzLmJsb2IoKSA6IFByb21pc2UucmVqZWN0KCkpLmNhdGNoKCgpID0+IFByb21pc2UucmVqZWN0KHtcbiAgICAgIG1lc3NhZ2U6IGBDYW5ub3QgY29udmVydCAkeyB1cmwgfSB0byBCbG9iLiBSZXNvdXJjZSBtaWdodCBub3QgZXhpc3Qgb3IgaXMgaW5hY2Nlc3NpYmxlLmAsXG4gICAgICB1cmlUeXBlOiAnYmxvYidcbiAgICB9KSk7XG4gICAgY29uc3QgZXh0cmFjdEJhc2U2NERhdGEgPSBkYXRhID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSAvKFthLXowLTkrXFwvPVxcc10rKS9pLmV4ZWMoZGF0YSk7XG4gICAgICByZXR1cm4gbWF0Y2hlcyA/IG1hdGNoZXNbMV0gOiAnJztcbiAgICB9O1xuICAgIGNvbnN0IHBhcnNlRGF0YVVyaSA9IHVyaSA9PiB7XG4gICAgICBjb25zdCBbdHlwZSwgLi4ucmVzdF0gPSB1cmkuc3BsaXQoJywnKTtcbiAgICAgIGNvbnN0IGRhdGEgPSByZXN0LmpvaW4oJywnKTtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSAvZGF0YTooW14vXStcXC9bXjtdKykoOy4rKT8vLmV4ZWModHlwZSk7XG4gICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICBjb25zdCBiYXNlNjRFbmNvZGVkID0gbWF0Y2hlc1syXSA9PT0gJztiYXNlNjQnO1xuICAgICAgICBjb25zdCBleHRyYWN0ZWREYXRhID0gYmFzZTY0RW5jb2RlZCA/IGV4dHJhY3RCYXNlNjREYXRhKGRhdGEpIDogZGVjb2RlVVJJQ29tcG9uZW50KGRhdGEpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgdHlwZTogbWF0Y2hlc1sxXSxcbiAgICAgICAgICBkYXRhOiBleHRyYWN0ZWREYXRhLFxuICAgICAgICAgIGJhc2U2NEVuY29kZWRcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYnVpbGRCbG9iID0gKHR5cGUsIGRhdGEsIGJhc2U2NEVuY29kZWQgPSB0cnVlKSA9PiB7XG4gICAgICBsZXQgc3RyID0gZGF0YTtcbiAgICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc3RyID0gYXRvYihkYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGFyciA9IG5ldyBVaW50OEFycmF5KHN0ci5sZW5ndGgpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXJyW2ldID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShuZXcgQmxvYihbYXJyXSwgeyB0eXBlIH0pKTtcbiAgICB9O1xuICAgIGNvbnN0IGRhdGFVcmlUb0Jsb2IgPSB1cmkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcGFyc2VEYXRhVXJpKHVyaSkuYmluZCgoe3R5cGUsIGRhdGEsIGJhc2U2NEVuY29kZWR9KSA9PiBidWlsZEJsb2IodHlwZSwgZGF0YSwgYmFzZTY0RW5jb2RlZCkpLmZvbGQoKCkgPT4gcmVqZWN0KCdJbnZhbGlkIGRhdGEgVVJJJyksIHJlc29sdmUpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCB1cmlUb0Jsb2IgPSB1cmwgPT4ge1xuICAgICAgaWYgKHN0YXJ0c1dpdGgodXJsLCAnYmxvYjonKSkge1xuICAgICAgICByZXR1cm4gYmxvYlVyaVRvQmxvYih1cmwpO1xuICAgICAgfSBlbHNlIGlmIChzdGFydHNXaXRoKHVybCwgJ2RhdGE6JykpIHtcbiAgICAgICAgcmV0dXJuIGRhdGFVcmlUb0Jsb2IodXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnVW5rbm93biBVUkkgZm9ybWF0Jyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBibG9iVG9EYXRhVXJpID0gYmxvYiA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdCk7XG4gICAgICAgIH07XG4gICAgICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICByZWplY3QoKF9hID0gcmVhZGVyLmVycm9yKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubWVzc2FnZSk7XG4gICAgICAgIH07XG4gICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGxldCBjb3VudCQxID0gMDtcbiAgICBjb25zdCB1bmlxdWVJZCQxID0gcHJlZml4ID0+IHtcbiAgICAgIHJldHVybiAocHJlZml4IHx8ICdibG9iaWQnKSArIGNvdW50JDErKztcbiAgICB9O1xuICAgIGNvbnN0IHByb2Nlc3NEYXRhVXJpID0gKGRhdGFVcmksIGJhc2U2NE9ubHksIGdlbmVyYXRlQmxvYkluZm8pID0+IHtcbiAgICAgIHJldHVybiBwYXJzZURhdGFVcmkoZGF0YVVyaSkuYmluZCgoe2RhdGEsIHR5cGUsIGJhc2U2NEVuY29kZWR9KSA9PiB7XG4gICAgICAgIGlmIChiYXNlNjRPbmx5ICYmICFiYXNlNjRFbmNvZGVkKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBiYXNlNjQgPSBiYXNlNjRFbmNvZGVkID8gZGF0YSA6IGJ0b2EoZGF0YSk7XG4gICAgICAgICAgcmV0dXJuIGdlbmVyYXRlQmxvYkluZm8oYmFzZTY0LCB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVCbG9iSW5mbyQxID0gKGJsb2JDYWNoZSwgYmxvYiwgYmFzZTY0KSA9PiB7XG4gICAgICBjb25zdCBibG9iSW5mbyA9IGJsb2JDYWNoZS5jcmVhdGUodW5pcXVlSWQkMSgpLCBibG9iLCBiYXNlNjQpO1xuICAgICAgYmxvYkNhY2hlLmFkZChibG9iSW5mbyk7XG4gICAgICByZXR1cm4gYmxvYkluZm87XG4gICAgfTtcbiAgICBjb25zdCBkYXRhVXJpVG9CbG9iSW5mbyA9IChibG9iQ2FjaGUsIGRhdGFVcmksIGJhc2U2NE9ubHkgPSBmYWxzZSkgPT4ge1xuICAgICAgcmV0dXJuIHByb2Nlc3NEYXRhVXJpKGRhdGFVcmksIGJhc2U2NE9ubHksIChiYXNlNjQsIHR5cGUpID0+IE9wdGlvbmFsLmZyb20oYmxvYkNhY2hlLmdldEJ5RGF0YShiYXNlNjQsIHR5cGUpKS5vclRodW5rKCgpID0+IGJ1aWxkQmxvYih0eXBlLCBiYXNlNjQpLm1hcChibG9iID0+IGNyZWF0ZUJsb2JJbmZvJDEoYmxvYkNhY2hlLCBibG9iLCBiYXNlNjQpKSkpO1xuICAgIH07XG4gICAgY29uc3QgaW1hZ2VUb0Jsb2JJbmZvID0gKGJsb2JDYWNoZSwgaW1hZ2VTcmMpID0+IHtcbiAgICAgIGNvbnN0IGludmFsaWREYXRhVXJpID0gKCkgPT4gUHJvbWlzZS5yZWplY3QoJ0ludmFsaWQgZGF0YSBVUkknKTtcbiAgICAgIGlmIChzdGFydHNXaXRoKGltYWdlU3JjLCAnYmxvYjonKSkge1xuICAgICAgICBjb25zdCBibG9iSW5mbyA9IGJsb2JDYWNoZS5nZXRCeVVyaShpbWFnZVNyYyk7XG4gICAgICAgIGlmIChpc05vbk51bGxhYmxlKGJsb2JJbmZvKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYmxvYkluZm8pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB1cmlUb0Jsb2IoaW1hZ2VTcmMpLnRoZW4oYmxvYiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvRGF0YVVyaShibG9iKS50aGVuKGRhdGFVcmkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc0RhdGFVcmkoZGF0YVVyaSwgZmFsc2UsIGJhc2U2NCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoY3JlYXRlQmxvYkluZm8kMShibG9iQ2FjaGUsIGJsb2IsIGJhc2U2NCkpO1xuICAgICAgICAgICAgICB9KS5nZXRPclRodW5rKGludmFsaWREYXRhVXJpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0c1dpdGgoaW1hZ2VTcmMsICdkYXRhOicpKSB7XG4gICAgICAgIHJldHVybiBkYXRhVXJpVG9CbG9iSW5mbyhibG9iQ2FjaGUsIGltYWdlU3JjKS5mb2xkKGludmFsaWREYXRhVXJpLCBibG9iSW5mbyA9PiBQcm9taXNlLnJlc29sdmUoYmxvYkluZm8pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnVW5rbm93biBpbWFnZSBkYXRhIGZvcm1hdCcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBpc0JvZ3VzSW1hZ2UgPSBpbWcgPT4gaXNOb25OdWxsYWJsZShpbWcuYXR0cignZGF0YS1tY2UtYm9ndXMnKSk7XG4gICAgY29uc3QgaXNJbnRlcm5hbEltYWdlU291cmNlID0gaW1nID0+IGltZy5hdHRyKCdzcmMnKSA9PT0gRW52LnRyYW5zcGFyZW50U3JjIHx8IGlzTm9uTnVsbGFibGUoaW1nLmF0dHIoJ2RhdGEtbWNlLXBsYWNlaG9sZGVyJykpO1xuICAgIGNvbnN0IHJlZ2lzdGVyQmFzZTY0SW1hZ2VGaWx0ZXIgPSAocGFyc2VyLCBzZXR0aW5ncykgPT4ge1xuICAgICAgY29uc3Qge2Jsb2JfY2FjaGU6IGJsb2JDYWNoZX0gPSBzZXR0aW5ncztcbiAgICAgIGlmIChibG9iQ2FjaGUpIHtcbiAgICAgICAgY29uc3QgcHJvY2Vzc0ltYWdlID0gaW1nID0+IHtcbiAgICAgICAgICBjb25zdCBpbnB1dFNyYyA9IGltZy5hdHRyKCdzcmMnKTtcbiAgICAgICAgICBpZiAoaXNJbnRlcm5hbEltYWdlU291cmNlKGltZykgfHwgaXNCb2d1c0ltYWdlKGltZykgfHwgaXNOdWxsYWJsZShpbnB1dFNyYykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGF0YVVyaVRvQmxvYkluZm8oYmxvYkNhY2hlLCBpbnB1dFNyYywgdHJ1ZSkuZWFjaChibG9iSW5mbyA9PiB7XG4gICAgICAgICAgICBpbWcuYXR0cignc3JjJywgYmxvYkluZm8uYmxvYlVyaSgpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgcGFyc2VyLmFkZEF0dHJpYnV0ZUZpbHRlcignc3JjJywgbm9kZXMgPT4gZWFjaCRlKG5vZGVzLCBwcm9jZXNzSW1hZ2UpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyJDQgPSAocGFyc2VyLCBzZXR0aW5ncykgPT4ge1xuICAgICAgY29uc3Qgc2NoZW1hID0gcGFyc2VyLnNjaGVtYTtcbiAgICAgIGlmIChzZXR0aW5ncy5yZW1vdmVfdHJhaWxpbmdfYnJzKSB7XG4gICAgICAgIGFkZE5vZGVGaWx0ZXIoc2V0dGluZ3MsIHBhcnNlciwgc2NoZW1hKTtcbiAgICAgIH1cbiAgICAgIHBhcnNlci5hZGRBdHRyaWJ1dGVGaWx0ZXIoJ2hyZWYnLCBub2RlcyA9PiB7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBhcHBlbmRSZWwgPSByZWwgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcnRzID0gcmVsLnNwbGl0KCcgJykuZmlsdGVyKHAgPT4gcC5sZW5ndGggPiAwKTtcbiAgICAgICAgICByZXR1cm4gcGFydHMuY29uY2F0KFsnbm9vcGVuZXInXSkuc29ydCgpLmpvaW4oJyAnKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWRkTm9PcGVuZXIgPSByZWwgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld1JlbCA9IHJlbCA/IFRvb2xzLnRyaW0ocmVsKSA6ICcnO1xuICAgICAgICAgIGlmICghL1xcYihub29wZW5lcilcXGIvZy50ZXN0KG5ld1JlbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHBlbmRSZWwobmV3UmVsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ld1JlbDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmICghc2V0dGluZ3MuYWxsb3dfdW5zYWZlX2xpbmtfdGFyZ2V0KSB7XG4gICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICAgICAgaWYgKG5vZGUubmFtZSA9PT0gJ2EnICYmIG5vZGUuYXR0cigndGFyZ2V0JykgPT09ICdfYmxhbmsnKSB7XG4gICAgICAgICAgICAgIG5vZGUuYXR0cigncmVsJywgYWRkTm9PcGVuZXIobm9kZS5hdHRyKCdyZWwnKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoIXNldHRpbmdzLmFsbG93X2h0bWxfaW5fbmFtZWRfYW5jaG9yKSB7XG4gICAgICAgIHBhcnNlci5hZGRBdHRyaWJ1dGVGaWx0ZXIoJ2lkLG5hbWUnLCBub2RlcyA9PiB7XG4gICAgICAgICAgbGV0IGkgPSBub2Rlcy5sZW5ndGgsIHNpYmxpbmcsIHByZXZTaWJsaW5nLCBwYXJlbnQsIG5vZGU7XG4gICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICAgICAgaWYgKG5vZGUubmFtZSA9PT0gJ2EnICYmIG5vZGUuZmlyc3RDaGlsZCAmJiAhbm9kZS5hdHRyKCdocmVmJykpIHtcbiAgICAgICAgICAgICAgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG4gICAgICAgICAgICAgIHNpYmxpbmcgPSBub2RlLmxhc3RDaGlsZDtcbiAgICAgICAgICAgICAgd2hpbGUgKHNpYmxpbmcgJiYgcGFyZW50KSB7XG4gICAgICAgICAgICAgICAgcHJldlNpYmxpbmcgPSBzaWJsaW5nLnByZXY7XG4gICAgICAgICAgICAgICAgcGFyZW50Lmluc2VydChzaWJsaW5nLCBub2RlKTtcbiAgICAgICAgICAgICAgICBzaWJsaW5nID0gcHJldlNpYmxpbmc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHNldHRpbmdzLmZpeF9saXN0X2VsZW1lbnRzKSB7XG4gICAgICAgIHBhcnNlci5hZGROb2RlRmlsdGVyKCd1bCxvbCcsIG5vZGVzID0+IHtcbiAgICAgICAgICBsZXQgaSA9IG5vZGVzLmxlbmd0aCwgbm9kZSwgcGFyZW50Tm9kZTtcbiAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgICBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnQ7XG4gICAgICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiAocGFyZW50Tm9kZS5uYW1lID09PSAndWwnIHx8IHBhcmVudE5vZGUubmFtZSA9PT0gJ29sJykpIHtcbiAgICAgICAgICAgICAgaWYgKG5vZGUucHJldiAmJiBub2RlLnByZXYubmFtZSA9PT0gJ2xpJykge1xuICAgICAgICAgICAgICAgIG5vZGUucHJldi5hcHBlbmQobm9kZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGkgPSBuZXcgQXN0Tm9kZSgnbGknLCAxKTtcbiAgICAgICAgICAgICAgICBsaS5hdHRyKCdzdHlsZScsICdsaXN0LXN0eWxlLXR5cGU6IG5vbmUnKTtcbiAgICAgICAgICAgICAgICBub2RlLndyYXAobGkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbGlkQ2xhc3NlcyA9IHNjaGVtYS5nZXRWYWxpZENsYXNzZXMoKTtcbiAgICAgIGlmIChzZXR0aW5ncy52YWxpZGF0ZSAmJiB2YWxpZENsYXNzZXMpIHtcbiAgICAgICAgcGFyc2VyLmFkZEF0dHJpYnV0ZUZpbHRlcignY2xhc3MnLCBub2RlcyA9PiB7XG4gICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGNsYXp6ID0gKF9hID0gbm9kZS5hdHRyKCdjbGFzcycpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IFRvb2xzLmV4cGxvZGUoY2xhenosICcgJyk7XG4gICAgICAgICAgICBsZXQgY2xhc3NWYWx1ZSA9ICcnO1xuICAgICAgICAgICAgZm9yIChsZXQgY2kgPSAwOyBjaSA8IGNsYXNzTGlzdC5sZW5ndGg7IGNpKyspIHtcbiAgICAgICAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gY2xhc3NMaXN0W2NpXTtcbiAgICAgICAgICAgICAgbGV0IHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGxldCB2YWxpZENsYXNzZXNNYXAgPSB2YWxpZENsYXNzZXNbJyonXTtcbiAgICAgICAgICAgICAgaWYgKHZhbGlkQ2xhc3Nlc01hcCAmJiB2YWxpZENsYXNzZXNNYXBbY2xhc3NOYW1lXSkge1xuICAgICAgICAgICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YWxpZENsYXNzZXNNYXAgPSB2YWxpZENsYXNzZXNbbm9kZS5uYW1lXTtcbiAgICAgICAgICAgICAgaWYgKCF2YWxpZCAmJiB2YWxpZENsYXNzZXNNYXAgJiYgdmFsaWRDbGFzc2VzTWFwW2NsYXNzTmFtZV0pIHtcbiAgICAgICAgICAgICAgICB2YWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNsYXNzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzVmFsdWUgKz0gJyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjbGFzc1ZhbHVlICs9IGNsYXNzTmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjbGFzc1ZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICBjbGFzc1ZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUuYXR0cignY2xhc3MnLCBjbGFzc1ZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmVnaXN0ZXJCYXNlNjRJbWFnZUZpbHRlcihwYXJzZXIsIHNldHRpbmdzKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgICdAYmFiZWwvaGVscGVycyAtIHR5cGVvZic7XG4gICAgICByZXR1cm4gX3R5cGVvZiA9ICdmdW5jdGlvbicgPT0gdHlwZW9mIFN5bWJvbCAmJiAnc3ltYm9sJyA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICAgIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogJiYgJ2Z1bmN0aW9uJyA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/ICdzeW1ib2wnIDogdHlwZW9mIG9iajtcbiAgICAgIH0sIF90eXBlb2Yob2JqKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICd1bmRlZmluZWQnIHx8ICFSZWZsZWN0LmNvbnN0cnVjdClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICh0eXBlb2YgUHJveHkgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7XG4gICAgICBpZiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpKSB7XG4gICAgICAgIF9jb25zdHJ1Y3QgPSBSZWZsZWN0LmNvbnN0cnVjdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgICAgICB2YXIgYSA9IFtudWxsXTtcbiAgICAgICAgICBhLnB1c2guYXBwbHkoYSwgYXJncyk7XG4gICAgICAgICAgdmFyIENvbnN0cnVjdG9yID0gRnVuY3Rpb24uYmluZC5hcHBseShQYXJlbnQsIGEpO1xuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgICAgICAgIGlmIChDbGFzcylcbiAgICAgICAgICAgIF9zZXRQcm90b3R5cGVPZihpbnN0YW5jZSwgQ2xhc3MucHJvdG90eXBlKTtcbiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gICAgICByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKVxuICAgICAgICByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gICAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlclsnQEBpdGVyYXRvciddICE9IG51bGwpXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gICAgICBpZiAoIW8pXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICh0eXBlb2YgbyA9PT0gJ3N0cmluZycpXG4gICAgICAgIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICAgICAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICAgICAgaWYgKG4gPT09ICdPYmplY3QnICYmIG8uY29uc3RydWN0b3IpXG4gICAgICAgIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICBpZiAobiA9PT0gJ01hcCcgfHwgbiA9PT0gJ1NldCcpXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICAgICAgaWYgKG4gPT09ICdBcmd1bWVudHMnIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKVxuICAgICAgICByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgICAgIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKVxuICAgICAgICBsZW4gPSBhcnIubGVuZ3RoO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKVxuICAgICAgICBhcnIyW2ldID0gYXJyW2ldO1xuICAgICAgcmV0dXJuIGFycjI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4nKTtcbiAgICB9XG4gICAgdmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0Lmhhc093blByb3BlcnR5LCBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiwgaXNGcm96ZW4gPSBPYmplY3QuaXNGcm96ZW4sIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mLCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAgIHZhciBmcmVlemUgPSBPYmplY3QuZnJlZXplLCBzZWFsID0gT2JqZWN0LnNlYWwsIGNyZWF0ZSQ3ID0gT2JqZWN0LmNyZWF0ZTtcbiAgICB2YXIgX3JlZiA9IHR5cGVvZiBSZWZsZWN0ICE9PSAndW5kZWZpbmVkJyAmJiBSZWZsZWN0LCBhcHBseSA9IF9yZWYuYXBwbHksIGNvbnN0cnVjdCA9IF9yZWYuY29uc3RydWN0O1xuICAgIGlmICghYXBwbHkpIHtcbiAgICAgIGFwcGx5ID0gZnVuY3Rpb24gYXBwbHkoZnVuLCB0aGlzVmFsdWUsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGZ1bi5hcHBseSh0aGlzVmFsdWUsIGFyZ3MpO1xuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKCFmcmVlemUpIHtcbiAgICAgIGZyZWV6ZSA9IGZ1bmN0aW9uIGZyZWV6ZSh4KSB7XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKCFzZWFsKSB7XG4gICAgICBzZWFsID0gZnVuY3Rpb24gc2VhbCh4KSB7XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKCFjb25zdHJ1Y3QpIHtcbiAgICAgIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIGNvbnN0cnVjdChGdW5jLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiBfY29uc3RydWN0KEZ1bmMsIF90b0NvbnN1bWFibGVBcnJheShhcmdzKSk7XG4gICAgICB9O1xuICAgIH1cbiAgICB2YXIgYXJyYXlGb3JFYWNoID0gdW5hcHBseShBcnJheS5wcm90b3R5cGUuZm9yRWFjaCk7XG4gICAgdmFyIGFycmF5UG9wID0gdW5hcHBseShBcnJheS5wcm90b3R5cGUucG9wKTtcbiAgICB2YXIgYXJyYXlQdXNoID0gdW5hcHBseShBcnJheS5wcm90b3R5cGUucHVzaCk7XG4gICAgdmFyIHN0cmluZ1RvTG93ZXJDYXNlID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlKTtcbiAgICB2YXIgc3RyaW5nTWF0Y2ggPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUubWF0Y2gpO1xuICAgIHZhciBzdHJpbmdSZXBsYWNlID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xuICAgIHZhciBzdHJpbmdJbmRleE9mID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLmluZGV4T2YpO1xuICAgIHZhciBzdHJpbmdUcmltID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLnRyaW0pO1xuICAgIHZhciByZWdFeHBUZXN0ID0gdW5hcHBseShSZWdFeHAucHJvdG90eXBlLnRlc3QpO1xuICAgIHZhciB0eXBlRXJyb3JDcmVhdGUgPSB1bmNvbnN0cnVjdChUeXBlRXJyb3IpO1xuICAgIGZ1bmN0aW9uIHVuYXBwbHkoZnVuYykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0aGlzQXJnKSB7XG4gICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncyk7XG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiB1bmNvbnN0cnVjdChmdW5jKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdChmdW5jLCBhcmdzKTtcbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZFRvU2V0KHNldCwgYXJyYXkpIHtcbiAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICBzZXRQcm90b3R5cGVPZihzZXQsIG51bGwpO1xuICAgICAgfVxuICAgICAgdmFyIGwgPSBhcnJheS5sZW5ndGg7XG4gICAgICB3aGlsZSAobC0tKSB7XG4gICAgICAgIHZhciBlbGVtZW50ID0gYXJyYXlbbF07XG4gICAgICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB2YXIgbGNFbGVtZW50ID0gc3RyaW5nVG9Mb3dlckNhc2UoZWxlbWVudCk7XG4gICAgICAgICAgaWYgKGxjRWxlbWVudCAhPT0gZWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKCFpc0Zyb3plbihhcnJheSkpIHtcbiAgICAgICAgICAgICAgYXJyYXlbbF0gPSBsY0VsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50ID0gbGNFbGVtZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXRbZWxlbWVudF0gPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xvbmUob2JqZWN0KSB7XG4gICAgICB2YXIgbmV3T2JqZWN0ID0gY3JlYXRlJDcobnVsbCk7XG4gICAgICB2YXIgcHJvcGVydHk7XG4gICAgICBmb3IgKHByb3BlcnR5IGluIG9iamVjdCkge1xuICAgICAgICBpZiAoYXBwbHkoaGFzT3duUHJvcGVydHksIG9iamVjdCwgW3Byb3BlcnR5XSkpIHtcbiAgICAgICAgICBuZXdPYmplY3RbcHJvcGVydHldID0gb2JqZWN0W3Byb3BlcnR5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld09iamVjdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbG9va3VwR2V0dGVyKG9iamVjdCwgcHJvcCkge1xuICAgICAgd2hpbGUgKG9iamVjdCAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgZGVzYyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3ApO1xuICAgICAgICBpZiAoZGVzYykge1xuICAgICAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuYXBwbHkoZGVzYy5nZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIGRlc2MudmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmFwcGx5KGRlc2MudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvYmplY3QgPSBnZXRQcm90b3R5cGVPZihvYmplY3QpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZmFsbGJhY2tWYWx1ZShlbGVtZW50KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignZmFsbGJhY2sgdmFsdWUgZm9yJywgZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbGxiYWNrVmFsdWU7XG4gICAgfVxuICAgIHZhciBodG1sJDEgPSBmcmVlemUoW1xuICAgICAgJ2EnLFxuICAgICAgJ2FiYnInLFxuICAgICAgJ2Fjcm9ueW0nLFxuICAgICAgJ2FkZHJlc3MnLFxuICAgICAgJ2FyZWEnLFxuICAgICAgJ2FydGljbGUnLFxuICAgICAgJ2FzaWRlJyxcbiAgICAgICdhdWRpbycsXG4gICAgICAnYicsXG4gICAgICAnYmRpJyxcbiAgICAgICdiZG8nLFxuICAgICAgJ2JpZycsXG4gICAgICAnYmxpbmsnLFxuICAgICAgJ2Jsb2NrcXVvdGUnLFxuICAgICAgJ2JvZHknLFxuICAgICAgJ2JyJyxcbiAgICAgICdidXR0b24nLFxuICAgICAgJ2NhbnZhcycsXG4gICAgICAnY2FwdGlvbicsXG4gICAgICAnY2VudGVyJyxcbiAgICAgICdjaXRlJyxcbiAgICAgICdjb2RlJyxcbiAgICAgICdjb2wnLFxuICAgICAgJ2NvbGdyb3VwJyxcbiAgICAgICdjb250ZW50JyxcbiAgICAgICdkYXRhJyxcbiAgICAgICdkYXRhbGlzdCcsXG4gICAgICAnZGQnLFxuICAgICAgJ2RlY29yYXRvcicsXG4gICAgICAnZGVsJyxcbiAgICAgICdkZXRhaWxzJyxcbiAgICAgICdkZm4nLFxuICAgICAgJ2RpYWxvZycsXG4gICAgICAnZGlyJyxcbiAgICAgICdkaXYnLFxuICAgICAgJ2RsJyxcbiAgICAgICdkdCcsXG4gICAgICAnZWxlbWVudCcsXG4gICAgICAnZW0nLFxuICAgICAgJ2ZpZWxkc2V0JyxcbiAgICAgICdmaWdjYXB0aW9uJyxcbiAgICAgICdmaWd1cmUnLFxuICAgICAgJ2ZvbnQnLFxuICAgICAgJ2Zvb3RlcicsXG4gICAgICAnZm9ybScsXG4gICAgICAnaDEnLFxuICAgICAgJ2gyJyxcbiAgICAgICdoMycsXG4gICAgICAnaDQnLFxuICAgICAgJ2g1JyxcbiAgICAgICdoNicsXG4gICAgICAnaGVhZCcsXG4gICAgICAnaGVhZGVyJyxcbiAgICAgICdoZ3JvdXAnLFxuICAgICAgJ2hyJyxcbiAgICAgICdodG1sJyxcbiAgICAgICdpJyxcbiAgICAgICdpbWcnLFxuICAgICAgJ2lucHV0JyxcbiAgICAgICdpbnMnLFxuICAgICAgJ2tiZCcsXG4gICAgICAnbGFiZWwnLFxuICAgICAgJ2xlZ2VuZCcsXG4gICAgICAnbGknLFxuICAgICAgJ21haW4nLFxuICAgICAgJ21hcCcsXG4gICAgICAnbWFyaycsXG4gICAgICAnbWFycXVlZScsXG4gICAgICAnbWVudScsXG4gICAgICAnbWVudWl0ZW0nLFxuICAgICAgJ21ldGVyJyxcbiAgICAgICduYXYnLFxuICAgICAgJ25vYnInLFxuICAgICAgJ29sJyxcbiAgICAgICdvcHRncm91cCcsXG4gICAgICAnb3B0aW9uJyxcbiAgICAgICdvdXRwdXQnLFxuICAgICAgJ3AnLFxuICAgICAgJ3BpY3R1cmUnLFxuICAgICAgJ3ByZScsXG4gICAgICAncHJvZ3Jlc3MnLFxuICAgICAgJ3EnLFxuICAgICAgJ3JwJyxcbiAgICAgICdydCcsXG4gICAgICAncnVieScsXG4gICAgICAncycsXG4gICAgICAnc2FtcCcsXG4gICAgICAnc2VjdGlvbicsXG4gICAgICAnc2VsZWN0JyxcbiAgICAgICdzaGFkb3cnLFxuICAgICAgJ3NtYWxsJyxcbiAgICAgICdzb3VyY2UnLFxuICAgICAgJ3NwYWNlcicsXG4gICAgICAnc3BhbicsXG4gICAgICAnc3RyaWtlJyxcbiAgICAgICdzdHJvbmcnLFxuICAgICAgJ3N0eWxlJyxcbiAgICAgICdzdWInLFxuICAgICAgJ3N1bW1hcnknLFxuICAgICAgJ3N1cCcsXG4gICAgICAndGFibGUnLFxuICAgICAgJ3Rib2R5JyxcbiAgICAgICd0ZCcsXG4gICAgICAndGVtcGxhdGUnLFxuICAgICAgJ3RleHRhcmVhJyxcbiAgICAgICd0Zm9vdCcsXG4gICAgICAndGgnLFxuICAgICAgJ3RoZWFkJyxcbiAgICAgICd0aW1lJyxcbiAgICAgICd0cicsXG4gICAgICAndHJhY2snLFxuICAgICAgJ3R0JyxcbiAgICAgICd1JyxcbiAgICAgICd1bCcsXG4gICAgICAndmFyJyxcbiAgICAgICd2aWRlbycsXG4gICAgICAnd2JyJ1xuICAgIF0pO1xuICAgIHZhciBzdmckMSA9IGZyZWV6ZShbXG4gICAgICAnc3ZnJyxcbiAgICAgICdhJyxcbiAgICAgICdhbHRnbHlwaCcsXG4gICAgICAnYWx0Z2x5cGhkZWYnLFxuICAgICAgJ2FsdGdseXBoaXRlbScsXG4gICAgICAnYW5pbWF0ZWNvbG9yJyxcbiAgICAgICdhbmltYXRlbW90aW9uJyxcbiAgICAgICdhbmltYXRldHJhbnNmb3JtJyxcbiAgICAgICdjaXJjbGUnLFxuICAgICAgJ2NsaXBwYXRoJyxcbiAgICAgICdkZWZzJyxcbiAgICAgICdkZXNjJyxcbiAgICAgICdlbGxpcHNlJyxcbiAgICAgICdmaWx0ZXInLFxuICAgICAgJ2ZvbnQnLFxuICAgICAgJ2cnLFxuICAgICAgJ2dseXBoJyxcbiAgICAgICdnbHlwaHJlZicsXG4gICAgICAnaGtlcm4nLFxuICAgICAgJ2ltYWdlJyxcbiAgICAgICdsaW5lJyxcbiAgICAgICdsaW5lYXJncmFkaWVudCcsXG4gICAgICAnbWFya2VyJyxcbiAgICAgICdtYXNrJyxcbiAgICAgICdtZXRhZGF0YScsXG4gICAgICAnbXBhdGgnLFxuICAgICAgJ3BhdGgnLFxuICAgICAgJ3BhdHRlcm4nLFxuICAgICAgJ3BvbHlnb24nLFxuICAgICAgJ3BvbHlsaW5lJyxcbiAgICAgICdyYWRpYWxncmFkaWVudCcsXG4gICAgICAncmVjdCcsXG4gICAgICAnc3RvcCcsXG4gICAgICAnc3R5bGUnLFxuICAgICAgJ3N3aXRjaCcsXG4gICAgICAnc3ltYm9sJyxcbiAgICAgICd0ZXh0JyxcbiAgICAgICd0ZXh0cGF0aCcsXG4gICAgICAndGl0bGUnLFxuICAgICAgJ3RyZWYnLFxuICAgICAgJ3RzcGFuJyxcbiAgICAgICd2aWV3JyxcbiAgICAgICd2a2VybidcbiAgICBdKTtcbiAgICB2YXIgc3ZnRmlsdGVycyA9IGZyZWV6ZShbXG4gICAgICAnZmVCbGVuZCcsXG4gICAgICAnZmVDb2xvck1hdHJpeCcsXG4gICAgICAnZmVDb21wb25lbnRUcmFuc2ZlcicsXG4gICAgICAnZmVDb21wb3NpdGUnLFxuICAgICAgJ2ZlQ29udm9sdmVNYXRyaXgnLFxuICAgICAgJ2ZlRGlmZnVzZUxpZ2h0aW5nJyxcbiAgICAgICdmZURpc3BsYWNlbWVudE1hcCcsXG4gICAgICAnZmVEaXN0YW50TGlnaHQnLFxuICAgICAgJ2ZlRmxvb2QnLFxuICAgICAgJ2ZlRnVuY0EnLFxuICAgICAgJ2ZlRnVuY0InLFxuICAgICAgJ2ZlRnVuY0cnLFxuICAgICAgJ2ZlRnVuY1InLFxuICAgICAgJ2ZlR2F1c3NpYW5CbHVyJyxcbiAgICAgICdmZUltYWdlJyxcbiAgICAgICdmZU1lcmdlJyxcbiAgICAgICdmZU1lcmdlTm9kZScsXG4gICAgICAnZmVNb3JwaG9sb2d5JyxcbiAgICAgICdmZU9mZnNldCcsXG4gICAgICAnZmVQb2ludExpZ2h0JyxcbiAgICAgICdmZVNwZWN1bGFyTGlnaHRpbmcnLFxuICAgICAgJ2ZlU3BvdExpZ2h0JyxcbiAgICAgICdmZVRpbGUnLFxuICAgICAgJ2ZlVHVyYnVsZW5jZSdcbiAgICBdKTtcbiAgICB2YXIgc3ZnRGlzYWxsb3dlZCA9IGZyZWV6ZShbXG4gICAgICAnYW5pbWF0ZScsXG4gICAgICAnY29sb3ItcHJvZmlsZScsXG4gICAgICAnY3Vyc29yJyxcbiAgICAgICdkaXNjYXJkJyxcbiAgICAgICdmZWRyb3BzaGFkb3cnLFxuICAgICAgJ2ZvbnQtZmFjZScsXG4gICAgICAnZm9udC1mYWNlLWZvcm1hdCcsXG4gICAgICAnZm9udC1mYWNlLW5hbWUnLFxuICAgICAgJ2ZvbnQtZmFjZS1zcmMnLFxuICAgICAgJ2ZvbnQtZmFjZS11cmknLFxuICAgICAgJ2ZvcmVpZ25vYmplY3QnLFxuICAgICAgJ2hhdGNoJyxcbiAgICAgICdoYXRjaHBhdGgnLFxuICAgICAgJ21lc2gnLFxuICAgICAgJ21lc2hncmFkaWVudCcsXG4gICAgICAnbWVzaHBhdGNoJyxcbiAgICAgICdtZXNocm93JyxcbiAgICAgICdtaXNzaW5nLWdseXBoJyxcbiAgICAgICdzY3JpcHQnLFxuICAgICAgJ3NldCcsXG4gICAgICAnc29saWRjb2xvcicsXG4gICAgICAndW5rbm93bicsXG4gICAgICAndXNlJ1xuICAgIF0pO1xuICAgIHZhciBtYXRoTWwkMSA9IGZyZWV6ZShbXG4gICAgICAnbWF0aCcsXG4gICAgICAnbWVuY2xvc2UnLFxuICAgICAgJ21lcnJvcicsXG4gICAgICAnbWZlbmNlZCcsXG4gICAgICAnbWZyYWMnLFxuICAgICAgJ21nbHlwaCcsXG4gICAgICAnbWknLFxuICAgICAgJ21sYWJlbGVkdHInLFxuICAgICAgJ21tdWx0aXNjcmlwdHMnLFxuICAgICAgJ21uJyxcbiAgICAgICdtbycsXG4gICAgICAnbW92ZXInLFxuICAgICAgJ21wYWRkZWQnLFxuICAgICAgJ21waGFudG9tJyxcbiAgICAgICdtcm9vdCcsXG4gICAgICAnbXJvdycsXG4gICAgICAnbXMnLFxuICAgICAgJ21zcGFjZScsXG4gICAgICAnbXNxcnQnLFxuICAgICAgJ21zdHlsZScsXG4gICAgICAnbXN1YicsXG4gICAgICAnbXN1cCcsXG4gICAgICAnbXN1YnN1cCcsXG4gICAgICAnbXRhYmxlJyxcbiAgICAgICdtdGQnLFxuICAgICAgJ210ZXh0JyxcbiAgICAgICdtdHInLFxuICAgICAgJ211bmRlcicsXG4gICAgICAnbXVuZGVyb3ZlcidcbiAgICBdKTtcbiAgICB2YXIgbWF0aE1sRGlzYWxsb3dlZCA9IGZyZWV6ZShbXG4gICAgICAnbWFjdGlvbicsXG4gICAgICAnbWFsaWduZ3JvdXAnLFxuICAgICAgJ21hbGlnbm1hcmsnLFxuICAgICAgJ21sb25nZGl2JyxcbiAgICAgICdtc2NhcnJpZXMnLFxuICAgICAgJ21zY2FycnknLFxuICAgICAgJ21zZ3JvdXAnLFxuICAgICAgJ21zdGFjaycsXG4gICAgICAnbXNsaW5lJyxcbiAgICAgICdtc3JvdycsXG4gICAgICAnc2VtYW50aWNzJyxcbiAgICAgICdhbm5vdGF0aW9uJyxcbiAgICAgICdhbm5vdGF0aW9uLXhtbCcsXG4gICAgICAnbXByZXNjcmlwdHMnLFxuICAgICAgJ25vbmUnXG4gICAgXSk7XG4gICAgdmFyIHRleHQgPSBmcmVlemUoWycjdGV4dCddKTtcbiAgICB2YXIgaHRtbCA9IGZyZWV6ZShbXG4gICAgICAnYWNjZXB0JyxcbiAgICAgICdhY3Rpb24nLFxuICAgICAgJ2FsaWduJyxcbiAgICAgICdhbHQnLFxuICAgICAgJ2F1dG9jYXBpdGFsaXplJyxcbiAgICAgICdhdXRvY29tcGxldGUnLFxuICAgICAgJ2F1dG9waWN0dXJlaW5waWN0dXJlJyxcbiAgICAgICdhdXRvcGxheScsXG4gICAgICAnYmFja2dyb3VuZCcsXG4gICAgICAnYmdjb2xvcicsXG4gICAgICAnYm9yZGVyJyxcbiAgICAgICdjYXB0dXJlJyxcbiAgICAgICdjZWxscGFkZGluZycsXG4gICAgICAnY2VsbHNwYWNpbmcnLFxuICAgICAgJ2NoZWNrZWQnLFxuICAgICAgJ2NpdGUnLFxuICAgICAgJ2NsYXNzJyxcbiAgICAgICdjbGVhcicsXG4gICAgICAnY29sb3InLFxuICAgICAgJ2NvbHMnLFxuICAgICAgJ2NvbHNwYW4nLFxuICAgICAgJ2NvbnRyb2xzJyxcbiAgICAgICdjb250cm9sc2xpc3QnLFxuICAgICAgJ2Nvb3JkcycsXG4gICAgICAnY3Jvc3NvcmlnaW4nLFxuICAgICAgJ2RhdGV0aW1lJyxcbiAgICAgICdkZWNvZGluZycsXG4gICAgICAnZGVmYXVsdCcsXG4gICAgICAnZGlyJyxcbiAgICAgICdkaXNhYmxlZCcsXG4gICAgICAnZGlzYWJsZXBpY3R1cmVpbnBpY3R1cmUnLFxuICAgICAgJ2Rpc2FibGVyZW1vdGVwbGF5YmFjaycsXG4gICAgICAnZG93bmxvYWQnLFxuICAgICAgJ2RyYWdnYWJsZScsXG4gICAgICAnZW5jdHlwZScsXG4gICAgICAnZW50ZXJrZXloaW50JyxcbiAgICAgICdmYWNlJyxcbiAgICAgICdmb3InLFxuICAgICAgJ2hlYWRlcnMnLFxuICAgICAgJ2hlaWdodCcsXG4gICAgICAnaGlkZGVuJyxcbiAgICAgICdoaWdoJyxcbiAgICAgICdocmVmJyxcbiAgICAgICdocmVmbGFuZycsXG4gICAgICAnaWQnLFxuICAgICAgJ2lucHV0bW9kZScsXG4gICAgICAnaW50ZWdyaXR5JyxcbiAgICAgICdpc21hcCcsXG4gICAgICAna2luZCcsXG4gICAgICAnbGFiZWwnLFxuICAgICAgJ2xhbmcnLFxuICAgICAgJ2xpc3QnLFxuICAgICAgJ2xvYWRpbmcnLFxuICAgICAgJ2xvb3AnLFxuICAgICAgJ2xvdycsXG4gICAgICAnbWF4JyxcbiAgICAgICdtYXhsZW5ndGgnLFxuICAgICAgJ21lZGlhJyxcbiAgICAgICdtZXRob2QnLFxuICAgICAgJ21pbicsXG4gICAgICAnbWlubGVuZ3RoJyxcbiAgICAgICdtdWx0aXBsZScsXG4gICAgICAnbXV0ZWQnLFxuICAgICAgJ25hbWUnLFxuICAgICAgJ25vbmNlJyxcbiAgICAgICdub3NoYWRlJyxcbiAgICAgICdub3ZhbGlkYXRlJyxcbiAgICAgICdub3dyYXAnLFxuICAgICAgJ29wZW4nLFxuICAgICAgJ29wdGltdW0nLFxuICAgICAgJ3BhdHRlcm4nLFxuICAgICAgJ3BsYWNlaG9sZGVyJyxcbiAgICAgICdwbGF5c2lubGluZScsXG4gICAgICAncG9zdGVyJyxcbiAgICAgICdwcmVsb2FkJyxcbiAgICAgICdwdWJkYXRlJyxcbiAgICAgICdyYWRpb2dyb3VwJyxcbiAgICAgICdyZWFkb25seScsXG4gICAgICAncmVsJyxcbiAgICAgICdyZXF1aXJlZCcsXG4gICAgICAncmV2JyxcbiAgICAgICdyZXZlcnNlZCcsXG4gICAgICAncm9sZScsXG4gICAgICAncm93cycsXG4gICAgICAncm93c3BhbicsXG4gICAgICAnc3BlbGxjaGVjaycsXG4gICAgICAnc2NvcGUnLFxuICAgICAgJ3NlbGVjdGVkJyxcbiAgICAgICdzaGFwZScsXG4gICAgICAnc2l6ZScsXG4gICAgICAnc2l6ZXMnLFxuICAgICAgJ3NwYW4nLFxuICAgICAgJ3NyY2xhbmcnLFxuICAgICAgJ3N0YXJ0JyxcbiAgICAgICdzcmMnLFxuICAgICAgJ3NyY3NldCcsXG4gICAgICAnc3RlcCcsXG4gICAgICAnc3R5bGUnLFxuICAgICAgJ3N1bW1hcnknLFxuICAgICAgJ3RhYmluZGV4JyxcbiAgICAgICd0aXRsZScsXG4gICAgICAndHJhbnNsYXRlJyxcbiAgICAgICd0eXBlJyxcbiAgICAgICd1c2VtYXAnLFxuICAgICAgJ3ZhbGlnbicsXG4gICAgICAndmFsdWUnLFxuICAgICAgJ3dpZHRoJyxcbiAgICAgICd4bWxucycsXG4gICAgICAnc2xvdCdcbiAgICBdKTtcbiAgICB2YXIgc3ZnID0gZnJlZXplKFtcbiAgICAgICdhY2NlbnQtaGVpZ2h0JyxcbiAgICAgICdhY2N1bXVsYXRlJyxcbiAgICAgICdhZGRpdGl2ZScsXG4gICAgICAnYWxpZ25tZW50LWJhc2VsaW5lJyxcbiAgICAgICdhc2NlbnQnLFxuICAgICAgJ2F0dHJpYnV0ZW5hbWUnLFxuICAgICAgJ2F0dHJpYnV0ZXR5cGUnLFxuICAgICAgJ2F6aW11dGgnLFxuICAgICAgJ2Jhc2VmcmVxdWVuY3knLFxuICAgICAgJ2Jhc2VsaW5lLXNoaWZ0JyxcbiAgICAgICdiZWdpbicsXG4gICAgICAnYmlhcycsXG4gICAgICAnYnknLFxuICAgICAgJ2NsYXNzJyxcbiAgICAgICdjbGlwJyxcbiAgICAgICdjbGlwcGF0aHVuaXRzJyxcbiAgICAgICdjbGlwLXBhdGgnLFxuICAgICAgJ2NsaXAtcnVsZScsXG4gICAgICAnY29sb3InLFxuICAgICAgJ2NvbG9yLWludGVycG9sYXRpb24nLFxuICAgICAgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycsXG4gICAgICAnY29sb3ItcHJvZmlsZScsXG4gICAgICAnY29sb3ItcmVuZGVyaW5nJyxcbiAgICAgICdjeCcsXG4gICAgICAnY3knLFxuICAgICAgJ2QnLFxuICAgICAgJ2R4JyxcbiAgICAgICdkeScsXG4gICAgICAnZGlmZnVzZWNvbnN0YW50JyxcbiAgICAgICdkaXJlY3Rpb24nLFxuICAgICAgJ2Rpc3BsYXknLFxuICAgICAgJ2Rpdmlzb3InLFxuICAgICAgJ2R1cicsXG4gICAgICAnZWRnZW1vZGUnLFxuICAgICAgJ2VsZXZhdGlvbicsXG4gICAgICAnZW5kJyxcbiAgICAgICdmaWxsJyxcbiAgICAgICdmaWxsLW9wYWNpdHknLFxuICAgICAgJ2ZpbGwtcnVsZScsXG4gICAgICAnZmlsdGVyJyxcbiAgICAgICdmaWx0ZXJ1bml0cycsXG4gICAgICAnZmxvb2QtY29sb3InLFxuICAgICAgJ2Zsb29kLW9wYWNpdHknLFxuICAgICAgJ2ZvbnQtZmFtaWx5JyxcbiAgICAgICdmb250LXNpemUnLFxuICAgICAgJ2ZvbnQtc2l6ZS1hZGp1c3QnLFxuICAgICAgJ2ZvbnQtc3RyZXRjaCcsXG4gICAgICAnZm9udC1zdHlsZScsXG4gICAgICAnZm9udC12YXJpYW50JyxcbiAgICAgICdmb250LXdlaWdodCcsXG4gICAgICAnZngnLFxuICAgICAgJ2Z5JyxcbiAgICAgICdnMScsXG4gICAgICAnZzInLFxuICAgICAgJ2dseXBoLW5hbWUnLFxuICAgICAgJ2dseXBocmVmJyxcbiAgICAgICdncmFkaWVudHVuaXRzJyxcbiAgICAgICdncmFkaWVudHRyYW5zZm9ybScsXG4gICAgICAnaGVpZ2h0JyxcbiAgICAgICdocmVmJyxcbiAgICAgICdpZCcsXG4gICAgICAnaW1hZ2UtcmVuZGVyaW5nJyxcbiAgICAgICdpbicsXG4gICAgICAnaW4yJyxcbiAgICAgICdrJyxcbiAgICAgICdrMScsXG4gICAgICAnazInLFxuICAgICAgJ2szJyxcbiAgICAgICdrNCcsXG4gICAgICAna2VybmluZycsXG4gICAgICAna2V5cG9pbnRzJyxcbiAgICAgICdrZXlzcGxpbmVzJyxcbiAgICAgICdrZXl0aW1lcycsXG4gICAgICAnbGFuZycsXG4gICAgICAnbGVuZ3RoYWRqdXN0JyxcbiAgICAgICdsZXR0ZXItc3BhY2luZycsXG4gICAgICAna2VybmVsbWF0cml4JyxcbiAgICAgICdrZXJuZWx1bml0bGVuZ3RoJyxcbiAgICAgICdsaWdodGluZy1jb2xvcicsXG4gICAgICAnbG9jYWwnLFxuICAgICAgJ21hcmtlci1lbmQnLFxuICAgICAgJ21hcmtlci1taWQnLFxuICAgICAgJ21hcmtlci1zdGFydCcsXG4gICAgICAnbWFya2VyaGVpZ2h0JyxcbiAgICAgICdtYXJrZXJ1bml0cycsXG4gICAgICAnbWFya2Vyd2lkdGgnLFxuICAgICAgJ21hc2tjb250ZW50dW5pdHMnLFxuICAgICAgJ21hc2t1bml0cycsXG4gICAgICAnbWF4JyxcbiAgICAgICdtYXNrJyxcbiAgICAgICdtZWRpYScsXG4gICAgICAnbWV0aG9kJyxcbiAgICAgICdtb2RlJyxcbiAgICAgICdtaW4nLFxuICAgICAgJ25hbWUnLFxuICAgICAgJ251bW9jdGF2ZXMnLFxuICAgICAgJ29mZnNldCcsXG4gICAgICAnb3BlcmF0b3InLFxuICAgICAgJ29wYWNpdHknLFxuICAgICAgJ29yZGVyJyxcbiAgICAgICdvcmllbnQnLFxuICAgICAgJ29yaWVudGF0aW9uJyxcbiAgICAgICdvcmlnaW4nLFxuICAgICAgJ292ZXJmbG93JyxcbiAgICAgICdwYWludC1vcmRlcicsXG4gICAgICAncGF0aCcsXG4gICAgICAncGF0aGxlbmd0aCcsXG4gICAgICAncGF0dGVybmNvbnRlbnR1bml0cycsXG4gICAgICAncGF0dGVybnRyYW5zZm9ybScsXG4gICAgICAncGF0dGVybnVuaXRzJyxcbiAgICAgICdwb2ludHMnLFxuICAgICAgJ3ByZXNlcnZlYWxwaGEnLFxuICAgICAgJ3ByZXNlcnZlYXNwZWN0cmF0aW8nLFxuICAgICAgJ3ByaW1pdGl2ZXVuaXRzJyxcbiAgICAgICdyJyxcbiAgICAgICdyeCcsXG4gICAgICAncnknLFxuICAgICAgJ3JhZGl1cycsXG4gICAgICAncmVmeCcsXG4gICAgICAncmVmeScsXG4gICAgICAncmVwZWF0Y291bnQnLFxuICAgICAgJ3JlcGVhdGR1cicsXG4gICAgICAncmVzdGFydCcsXG4gICAgICAncmVzdWx0JyxcbiAgICAgICdyb3RhdGUnLFxuICAgICAgJ3NjYWxlJyxcbiAgICAgICdzZWVkJyxcbiAgICAgICdzaGFwZS1yZW5kZXJpbmcnLFxuICAgICAgJ3NwZWN1bGFyY29uc3RhbnQnLFxuICAgICAgJ3NwZWN1bGFyZXhwb25lbnQnLFxuICAgICAgJ3NwcmVhZG1ldGhvZCcsXG4gICAgICAnc3RhcnRvZmZzZXQnLFxuICAgICAgJ3N0ZGRldmlhdGlvbicsXG4gICAgICAnc3RpdGNodGlsZXMnLFxuICAgICAgJ3N0b3AtY29sb3InLFxuICAgICAgJ3N0b3Atb3BhY2l0eScsXG4gICAgICAnc3Ryb2tlLWRhc2hhcnJheScsXG4gICAgICAnc3Ryb2tlLWRhc2hvZmZzZXQnLFxuICAgICAgJ3N0cm9rZS1saW5lY2FwJyxcbiAgICAgICdzdHJva2UtbGluZWpvaW4nLFxuICAgICAgJ3N0cm9rZS1taXRlcmxpbWl0JyxcbiAgICAgICdzdHJva2Utb3BhY2l0eScsXG4gICAgICAnc3Ryb2tlJyxcbiAgICAgICdzdHJva2Utd2lkdGgnLFxuICAgICAgJ3N0eWxlJyxcbiAgICAgICdzdXJmYWNlc2NhbGUnLFxuICAgICAgJ3N5c3RlbWxhbmd1YWdlJyxcbiAgICAgICd0YWJpbmRleCcsXG4gICAgICAndGFyZ2V0eCcsXG4gICAgICAndGFyZ2V0eScsXG4gICAgICAndHJhbnNmb3JtJyxcbiAgICAgICd0cmFuc2Zvcm0tb3JpZ2luJyxcbiAgICAgICd0ZXh0LWFuY2hvcicsXG4gICAgICAndGV4dC1kZWNvcmF0aW9uJyxcbiAgICAgICd0ZXh0LXJlbmRlcmluZycsXG4gICAgICAndGV4dGxlbmd0aCcsXG4gICAgICAndHlwZScsXG4gICAgICAndTEnLFxuICAgICAgJ3UyJyxcbiAgICAgICd1bmljb2RlJyxcbiAgICAgICd2YWx1ZXMnLFxuICAgICAgJ3ZpZXdib3gnLFxuICAgICAgJ3Zpc2liaWxpdHknLFxuICAgICAgJ3ZlcnNpb24nLFxuICAgICAgJ3ZlcnQtYWR2LXknLFxuICAgICAgJ3ZlcnQtb3JpZ2luLXgnLFxuICAgICAgJ3ZlcnQtb3JpZ2luLXknLFxuICAgICAgJ3dpZHRoJyxcbiAgICAgICd3b3JkLXNwYWNpbmcnLFxuICAgICAgJ3dyYXAnLFxuICAgICAgJ3dyaXRpbmctbW9kZScsXG4gICAgICAneGNoYW5uZWxzZWxlY3RvcicsXG4gICAgICAneWNoYW5uZWxzZWxlY3RvcicsXG4gICAgICAneCcsXG4gICAgICAneDEnLFxuICAgICAgJ3gyJyxcbiAgICAgICd4bWxucycsXG4gICAgICAneScsXG4gICAgICAneTEnLFxuICAgICAgJ3kyJyxcbiAgICAgICd6JyxcbiAgICAgICd6b29tYW5kcGFuJ1xuICAgIF0pO1xuICAgIHZhciBtYXRoTWwgPSBmcmVlemUoW1xuICAgICAgJ2FjY2VudCcsXG4gICAgICAnYWNjZW50dW5kZXInLFxuICAgICAgJ2FsaWduJyxcbiAgICAgICdiZXZlbGxlZCcsXG4gICAgICAnY2xvc2UnLFxuICAgICAgJ2NvbHVtbnNhbGlnbicsXG4gICAgICAnY29sdW1ubGluZXMnLFxuICAgICAgJ2NvbHVtbnNwYW4nLFxuICAgICAgJ2Rlbm9tYWxpZ24nLFxuICAgICAgJ2RlcHRoJyxcbiAgICAgICdkaXInLFxuICAgICAgJ2Rpc3BsYXknLFxuICAgICAgJ2Rpc3BsYXlzdHlsZScsXG4gICAgICAnZW5jb2RpbmcnLFxuICAgICAgJ2ZlbmNlJyxcbiAgICAgICdmcmFtZScsXG4gICAgICAnaGVpZ2h0JyxcbiAgICAgICdocmVmJyxcbiAgICAgICdpZCcsXG4gICAgICAnbGFyZ2VvcCcsXG4gICAgICAnbGVuZ3RoJyxcbiAgICAgICdsaW5ldGhpY2tuZXNzJyxcbiAgICAgICdsc3BhY2UnLFxuICAgICAgJ2xxdW90ZScsXG4gICAgICAnbWF0aGJhY2tncm91bmQnLFxuICAgICAgJ21hdGhjb2xvcicsXG4gICAgICAnbWF0aHNpemUnLFxuICAgICAgJ21hdGh2YXJpYW50JyxcbiAgICAgICdtYXhzaXplJyxcbiAgICAgICdtaW5zaXplJyxcbiAgICAgICdtb3ZhYmxlbGltaXRzJyxcbiAgICAgICdub3RhdGlvbicsXG4gICAgICAnbnVtYWxpZ24nLFxuICAgICAgJ29wZW4nLFxuICAgICAgJ3Jvd2FsaWduJyxcbiAgICAgICdyb3dsaW5lcycsXG4gICAgICAncm93c3BhY2luZycsXG4gICAgICAncm93c3BhbicsXG4gICAgICAncnNwYWNlJyxcbiAgICAgICdycXVvdGUnLFxuICAgICAgJ3NjcmlwdGxldmVsJyxcbiAgICAgICdzY3JpcHRtaW5zaXplJyxcbiAgICAgICdzY3JpcHRzaXplbXVsdGlwbGllcicsXG4gICAgICAnc2VsZWN0aW9uJyxcbiAgICAgICdzZXBhcmF0b3InLFxuICAgICAgJ3NlcGFyYXRvcnMnLFxuICAgICAgJ3N0cmV0Y2h5JyxcbiAgICAgICdzdWJzY3JpcHRzaGlmdCcsXG4gICAgICAnc3Vwc2NyaXB0c2hpZnQnLFxuICAgICAgJ3N5bW1ldHJpYycsXG4gICAgICAndm9mZnNldCcsXG4gICAgICAnd2lkdGgnLFxuICAgICAgJ3htbG5zJ1xuICAgIF0pO1xuICAgIHZhciB4bWwgPSBmcmVlemUoW1xuICAgICAgJ3hsaW5rOmhyZWYnLFxuICAgICAgJ3htbDppZCcsXG4gICAgICAneGxpbms6dGl0bGUnLFxuICAgICAgJ3htbDpzcGFjZScsXG4gICAgICAneG1sbnM6eGxpbmsnXG4gICAgXSk7XG4gICAgdmFyIE1VU1RBQ0hFX0VYUFIgPSBzZWFsKC9cXHtcXHtbXFx3XFxXXSp8W1xcd1xcV10qXFx9XFx9L2dtKTtcbiAgICB2YXIgRVJCX0VYUFIgPSBzZWFsKC88JVtcXHdcXFddKnxbXFx3XFxXXSolPi9nbSk7XG4gICAgdmFyIERBVEFfQVRUUiA9IHNlYWwoL15kYXRhLVtcXC1cXHcuXFx1MDBCNy1cXHVGRkZGXS8pO1xuICAgIHZhciBBUklBX0FUVFIgPSBzZWFsKC9eYXJpYS1bXFwtXFx3XSskLyk7XG4gICAgdmFyIElTX0FMTE9XRURfVVJJID0gc2VhbCgvXig/Oig/Oig/OmZ8aHQpdHBzP3xtYWlsdG98dGVsfGNhbGx0b3xjaWR8eG1wcCk6fFteYS16XXxbYS16Ky5cXC1dKyg/OlteYS16Ky5cXC06XXwkKSkvaSk7XG4gICAgdmFyIElTX1NDUklQVF9PUl9EQVRBID0gc2VhbCgvXig/OlxcdytzY3JpcHR8ZGF0YSk6L2kpO1xuICAgIHZhciBBVFRSX1dISVRFU1BBQ0UgPSBzZWFsKC9bXFx1MDAwMC1cXHUwMDIwXFx1MDBBMFxcdTE2ODBcXHUxODBFXFx1MjAwMC1cXHUyMDI5XFx1MjA1RlxcdTMwMDBdL2cpO1xuICAgIHZhciBET0NUWVBFX05BTUUgPSBzZWFsKC9eaHRtbCQvaSk7XG4gICAgdmFyIGdldEdsb2JhbCA9IGZ1bmN0aW9uIGdldEdsb2JhbCgpIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiB3aW5kb3c7XG4gICAgfTtcbiAgICB2YXIgX2NyZWF0ZVRydXN0ZWRUeXBlc1BvbGljeSA9IGZ1bmN0aW9uIF9jcmVhdGVUcnVzdGVkVHlwZXNQb2xpY3kodHJ1c3RlZFR5cGVzLCBkb2N1bWVudCkge1xuICAgICAgaWYgKF90eXBlb2YodHJ1c3RlZFR5cGVzKSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3kgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB2YXIgc3VmZml4ID0gbnVsbDtcbiAgICAgIHZhciBBVFRSX05BTUUgPSAnZGF0YS10dC1wb2xpY3ktc3VmZml4JztcbiAgICAgIGlmIChkb2N1bWVudC5jdXJyZW50U2NyaXB0ICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuaGFzQXR0cmlidXRlKEFUVFJfTkFNRSkpIHtcbiAgICAgICAgc3VmZml4ID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5nZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKTtcbiAgICAgIH1cbiAgICAgIHZhciBwb2xpY3lOYW1lID0gJ2RvbXB1cmlmeScgKyAoc3VmZml4ID8gJyMnICsgc3VmZml4IDogJycpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3kocG9saWN5TmFtZSwge1xuICAgICAgICAgIGNyZWF0ZUhUTUw6IGZ1bmN0aW9uIGNyZWF0ZUhUTUwoaHRtbCkge1xuICAgICAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdUcnVzdGVkVHlwZXMgcG9saWN5ICcgKyBwb2xpY3lOYW1lICsgJyBjb3VsZCBub3QgYmUgY3JlYXRlZC4nKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiBjcmVhdGVET01QdXJpZnkoKSB7XG4gICAgICB2YXIgd2luZG93ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBnZXRHbG9iYWwoKTtcbiAgICAgIHZhciBET01QdXJpZnkgPSBmdW5jdGlvbiBET01QdXJpZnkocm9vdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRE9NUHVyaWZ5KHJvb3QpO1xuICAgICAgfTtcbiAgICAgIERPTVB1cmlmeS52ZXJzaW9uID0gJzIuMy44JztcbiAgICAgIERPTVB1cmlmeS5yZW1vdmVkID0gW107XG4gICAgICBpZiAoIXdpbmRvdyB8fCAhd2luZG93LmRvY3VtZW50IHx8IHdpbmRvdy5kb2N1bWVudC5ub2RlVHlwZSAhPT0gOSkge1xuICAgICAgICBET01QdXJpZnkuaXNTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIERPTVB1cmlmeTtcbiAgICAgIH1cbiAgICAgIHZhciBvcmlnaW5hbERvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICAgICAgdmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICAgICAgdmFyIERvY3VtZW50RnJhZ21lbnQgPSB3aW5kb3cuRG9jdW1lbnRGcmFnbWVudCwgSFRNTFRlbXBsYXRlRWxlbWVudCA9IHdpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50LCBOb2RlID0gd2luZG93Lk5vZGUsIEVsZW1lbnQgPSB3aW5kb3cuRWxlbWVudCwgTm9kZUZpbHRlciA9IHdpbmRvdy5Ob2RlRmlsdGVyLCBfd2luZG93JE5hbWVkTm9kZU1hcCA9IHdpbmRvdy5OYW1lZE5vZGVNYXAsIE5hbWVkTm9kZU1hcCA9IF93aW5kb3ckTmFtZWROb2RlTWFwID09PSB2b2lkIDAgPyB3aW5kb3cuTmFtZWROb2RlTWFwIHx8IHdpbmRvdy5Nb3pOYW1lZEF0dHJNYXAgOiBfd2luZG93JE5hbWVkTm9kZU1hcCwgSFRNTEZvcm1FbGVtZW50ID0gd2luZG93LkhUTUxGb3JtRWxlbWVudCwgRE9NUGFyc2VyID0gd2luZG93LkRPTVBhcnNlciwgdHJ1c3RlZFR5cGVzID0gd2luZG93LnRydXN0ZWRUeXBlcztcbiAgICAgIHZhciBFbGVtZW50UHJvdG90eXBlID0gRWxlbWVudC5wcm90b3R5cGU7XG4gICAgICB2YXIgY2xvbmVOb2RlID0gbG9va3VwR2V0dGVyKEVsZW1lbnRQcm90b3R5cGUsICdjbG9uZU5vZGUnKTtcbiAgICAgIHZhciBnZXROZXh0U2libGluZyA9IGxvb2t1cEdldHRlcihFbGVtZW50UHJvdG90eXBlLCAnbmV4dFNpYmxpbmcnKTtcbiAgICAgIHZhciBnZXRDaGlsZE5vZGVzID0gbG9va3VwR2V0dGVyKEVsZW1lbnRQcm90b3R5cGUsICdjaGlsZE5vZGVzJyk7XG4gICAgICB2YXIgZ2V0UGFyZW50Tm9kZSA9IGxvb2t1cEdldHRlcihFbGVtZW50UHJvdG90eXBlLCAncGFyZW50Tm9kZScpO1xuICAgICAgaWYgKHR5cGVvZiBIVE1MVGVtcGxhdGVFbGVtZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgICAgIGlmICh0ZW1wbGF0ZS5jb250ZW50ICYmIHRlbXBsYXRlLmNvbnRlbnQub3duZXJEb2N1bWVudCkge1xuICAgICAgICAgIGRvY3VtZW50ID0gdGVtcGxhdGUuY29udGVudC5vd25lckRvY3VtZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgdHJ1c3RlZFR5cGVzUG9saWN5ID0gX2NyZWF0ZVRydXN0ZWRUeXBlc1BvbGljeSh0cnVzdGVkVHlwZXMsIG9yaWdpbmFsRG9jdW1lbnQpO1xuICAgICAgdmFyIGVtcHR5SFRNTCA9IHRydXN0ZWRUeXBlc1BvbGljeSA/IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKCcnKSA6ICcnO1xuICAgICAgdmFyIF9kb2N1bWVudCA9IGRvY3VtZW50LCBpbXBsZW1lbnRhdGlvbiA9IF9kb2N1bWVudC5pbXBsZW1lbnRhdGlvbiwgY3JlYXRlTm9kZUl0ZXJhdG9yID0gX2RvY3VtZW50LmNyZWF0ZU5vZGVJdGVyYXRvciwgY3JlYXRlRG9jdW1lbnRGcmFnbWVudCA9IF9kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50LCBnZXRFbGVtZW50c0J5VGFnTmFtZSA9IF9kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZTtcbiAgICAgIHZhciBpbXBvcnROb2RlID0gb3JpZ2luYWxEb2N1bWVudC5pbXBvcnROb2RlO1xuICAgICAgdmFyIGRvY3VtZW50TW9kZSA9IHt9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZG9jdW1lbnRNb2RlID0gY2xvbmUoZG9jdW1lbnQpLmRvY3VtZW50TW9kZSA/IGRvY3VtZW50LmRvY3VtZW50TW9kZSA6IHt9O1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgfVxuICAgICAgdmFyIGhvb2tzID0ge307XG4gICAgICBET01QdXJpZnkuaXNTdXBwb3J0ZWQgPSB0eXBlb2YgZ2V0UGFyZW50Tm9kZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpbXBsZW1lbnRhdGlvbiAmJiB0eXBlb2YgaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudE1vZGUgIT09IDk7XG4gICAgICB2YXIgTVVTVEFDSEVfRVhQUiQxID0gTVVTVEFDSEVfRVhQUiwgRVJCX0VYUFIkMSA9IEVSQl9FWFBSLCBEQVRBX0FUVFIkMSA9IERBVEFfQVRUUiwgQVJJQV9BVFRSJDEgPSBBUklBX0FUVFIsIElTX1NDUklQVF9PUl9EQVRBJDEgPSBJU19TQ1JJUFRfT1JfREFUQSwgQVRUUl9XSElURVNQQUNFJDEgPSBBVFRSX1dISVRFU1BBQ0U7XG4gICAgICB2YXIgSVNfQUxMT1dFRF9VUkkkMSA9IElTX0FMTE9XRURfVVJJO1xuICAgICAgdmFyIEFMTE9XRURfVEFHUyA9IG51bGw7XG4gICAgICB2YXIgREVGQVVMVF9BTExPV0VEX1RBR1MgPSBhZGRUb1NldCh7fSwgW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShodG1sJDEpLCBfdG9Db25zdW1hYmxlQXJyYXkoc3ZnJDEpLCBfdG9Db25zdW1hYmxlQXJyYXkoc3ZnRmlsdGVycyksIF90b0NvbnN1bWFibGVBcnJheShtYXRoTWwkMSksIF90b0NvbnN1bWFibGVBcnJheSh0ZXh0KSkpO1xuICAgICAgdmFyIEFMTE9XRURfQVRUUiA9IG51bGw7XG4gICAgICB2YXIgREVGQVVMVF9BTExPV0VEX0FUVFIgPSBhZGRUb1NldCh7fSwgW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShodG1sKSwgX3RvQ29uc3VtYWJsZUFycmF5KHN2ZyksIF90b0NvbnN1bWFibGVBcnJheShtYXRoTWwpLCBfdG9Db25zdW1hYmxlQXJyYXkoeG1sKSkpO1xuICAgICAgdmFyIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HID0gT2JqZWN0LnNlYWwoT2JqZWN0LmNyZWF0ZShudWxsLCB7XG4gICAgICAgIHRhZ05hbWVDaGVjazoge1xuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICB9LFxuICAgICAgICBhdHRyaWJ1dGVOYW1lQ2hlY2s6IHtcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzOiB7XG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgICB2YXIgRk9SQklEX1RBR1MgPSBudWxsO1xuICAgICAgdmFyIEZPUkJJRF9BVFRSID0gbnVsbDtcbiAgICAgIHZhciBBTExPV19BUklBX0FUVFIgPSB0cnVlO1xuICAgICAgdmFyIEFMTE9XX0RBVEFfQVRUUiA9IHRydWU7XG4gICAgICB2YXIgQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFMgPSBmYWxzZTtcbiAgICAgIHZhciBTQUZFX0ZPUl9URU1QTEFURVMgPSBmYWxzZTtcbiAgICAgIHZhciBXSE9MRV9ET0NVTUVOVCA9IGZhbHNlO1xuICAgICAgdmFyIFNFVF9DT05GSUcgPSBmYWxzZTtcbiAgICAgIHZhciBGT1JDRV9CT0RZID0gZmFsc2U7XG4gICAgICB2YXIgUkVUVVJOX0RPTSA9IGZhbHNlO1xuICAgICAgdmFyIFJFVFVSTl9ET01fRlJBR01FTlQgPSBmYWxzZTtcbiAgICAgIHZhciBSRVRVUk5fVFJVU1RFRF9UWVBFID0gZmFsc2U7XG4gICAgICB2YXIgU0FOSVRJWkVfRE9NID0gdHJ1ZTtcbiAgICAgIHZhciBLRUVQX0NPTlRFTlQgPSB0cnVlO1xuICAgICAgdmFyIElOX1BMQUNFID0gZmFsc2U7XG4gICAgICB2YXIgVVNFX1BST0ZJTEVTID0ge307XG4gICAgICB2YXIgRk9SQklEX0NPTlRFTlRTID0gbnVsbDtcbiAgICAgIHZhciBERUZBVUxUX0ZPUkJJRF9DT05URU5UUyA9IGFkZFRvU2V0KHt9LCBbXG4gICAgICAgICdhbm5vdGF0aW9uLXhtbCcsXG4gICAgICAgICdhdWRpbycsXG4gICAgICAgICdjb2xncm91cCcsXG4gICAgICAgICdkZXNjJyxcbiAgICAgICAgJ2ZvcmVpZ25vYmplY3QnLFxuICAgICAgICAnaGVhZCcsXG4gICAgICAgICdpZnJhbWUnLFxuICAgICAgICAnbWF0aCcsXG4gICAgICAgICdtaScsXG4gICAgICAgICdtbicsXG4gICAgICAgICdtbycsXG4gICAgICAgICdtcycsXG4gICAgICAgICdtdGV4dCcsXG4gICAgICAgICdub2VtYmVkJyxcbiAgICAgICAgJ25vZnJhbWVzJyxcbiAgICAgICAgJ25vc2NyaXB0JyxcbiAgICAgICAgJ3BsYWludGV4dCcsXG4gICAgICAgICdzY3JpcHQnLFxuICAgICAgICAnc3R5bGUnLFxuICAgICAgICAnc3ZnJyxcbiAgICAgICAgJ3RlbXBsYXRlJyxcbiAgICAgICAgJ3RoZWFkJyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ3ZpZGVvJyxcbiAgICAgICAgJ3htcCdcbiAgICAgIF0pO1xuICAgICAgdmFyIERBVEFfVVJJX1RBR1MgPSBudWxsO1xuICAgICAgdmFyIERFRkFVTFRfREFUQV9VUklfVEFHUyA9IGFkZFRvU2V0KHt9LCBbXG4gICAgICAgICdhdWRpbycsXG4gICAgICAgICd2aWRlbycsXG4gICAgICAgICdpbWcnLFxuICAgICAgICAnc291cmNlJyxcbiAgICAgICAgJ2ltYWdlJyxcbiAgICAgICAgJ3RyYWNrJ1xuICAgICAgXSk7XG4gICAgICB2YXIgVVJJX1NBRkVfQVRUUklCVVRFUyA9IG51bGw7XG4gICAgICB2YXIgREVGQVVMVF9VUklfU0FGRV9BVFRSSUJVVEVTID0gYWRkVG9TZXQoe30sIFtcbiAgICAgICAgJ2FsdCcsXG4gICAgICAgICdjbGFzcycsXG4gICAgICAgICdmb3InLFxuICAgICAgICAnaWQnLFxuICAgICAgICAnbGFiZWwnLFxuICAgICAgICAnbmFtZScsXG4gICAgICAgICdwYXR0ZXJuJyxcbiAgICAgICAgJ3BsYWNlaG9sZGVyJyxcbiAgICAgICAgJ3JvbGUnLFxuICAgICAgICAnc3VtbWFyeScsXG4gICAgICAgICd0aXRsZScsXG4gICAgICAgICd2YWx1ZScsXG4gICAgICAgICdzdHlsZScsXG4gICAgICAgICd4bWxucydcbiAgICAgIF0pO1xuICAgICAgdmFyIE1BVEhNTF9OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCc7XG4gICAgICB2YXIgU1ZHX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG4gICAgICB2YXIgSFRNTF9OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCc7XG4gICAgICB2YXIgTkFNRVNQQUNFID0gSFRNTF9OQU1FU1BBQ0U7XG4gICAgICB2YXIgSVNfRU1QVFlfSU5QVVQgPSBmYWxzZTtcbiAgICAgIHZhciBQQVJTRVJfTUVESUFfVFlQRTtcbiAgICAgIHZhciBTVVBQT1JURURfUEFSU0VSX01FRElBX1RZUEVTID0gW1xuICAgICAgICAnYXBwbGljYXRpb24veGh0bWwreG1sJyxcbiAgICAgICAgJ3RleHQvaHRtbCdcbiAgICAgIF07XG4gICAgICB2YXIgREVGQVVMVF9QQVJTRVJfTUVESUFfVFlQRSA9ICd0ZXh0L2h0bWwnO1xuICAgICAgdmFyIHRyYW5zZm9ybUNhc2VGdW5jO1xuICAgICAgdmFyIENPTkZJRyA9IG51bGw7XG4gICAgICB2YXIgZm9ybUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7XG4gICAgICB2YXIgaXNSZWdleE9yRnVuY3Rpb24gPSBmdW5jdGlvbiBpc1JlZ2V4T3JGdW5jdGlvbih0ZXN0VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRlc3RWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCB8fCB0ZXN0VmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbjtcbiAgICAgIH07XG4gICAgICB2YXIgX3BhcnNlQ29uZmlnID0gZnVuY3Rpb24gX3BhcnNlQ29uZmlnKGNmZykge1xuICAgICAgICBpZiAoQ09ORklHICYmIENPTkZJRyA9PT0gY2ZnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2ZnIHx8IF90eXBlb2YoY2ZnKSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBjZmcgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBjZmcgPSBjbG9uZShjZmcpO1xuICAgICAgICBBTExPV0VEX1RBR1MgPSAnQUxMT1dFRF9UQUdTJyBpbiBjZmcgPyBhZGRUb1NldCh7fSwgY2ZnLkFMTE9XRURfVEFHUykgOiBERUZBVUxUX0FMTE9XRURfVEFHUztcbiAgICAgICAgQUxMT1dFRF9BVFRSID0gJ0FMTE9XRURfQVRUUicgaW4gY2ZnID8gYWRkVG9TZXQoe30sIGNmZy5BTExPV0VEX0FUVFIpIDogREVGQVVMVF9BTExPV0VEX0FUVFI7XG4gICAgICAgIFVSSV9TQUZFX0FUVFJJQlVURVMgPSAnQUREX1VSSV9TQUZFX0FUVFInIGluIGNmZyA/IGFkZFRvU2V0KGNsb25lKERFRkFVTFRfVVJJX1NBRkVfQVRUUklCVVRFUyksIGNmZy5BRERfVVJJX1NBRkVfQVRUUikgOiBERUZBVUxUX1VSSV9TQUZFX0FUVFJJQlVURVM7XG4gICAgICAgIERBVEFfVVJJX1RBR1MgPSAnQUREX0RBVEFfVVJJX1RBR1MnIGluIGNmZyA/IGFkZFRvU2V0KGNsb25lKERFRkFVTFRfREFUQV9VUklfVEFHUyksIGNmZy5BRERfREFUQV9VUklfVEFHUykgOiBERUZBVUxUX0RBVEFfVVJJX1RBR1M7XG4gICAgICAgIEZPUkJJRF9DT05URU5UUyA9ICdGT1JCSURfQ09OVEVOVFMnIGluIGNmZyA/IGFkZFRvU2V0KHt9LCBjZmcuRk9SQklEX0NPTlRFTlRTKSA6IERFRkFVTFRfRk9SQklEX0NPTlRFTlRTO1xuICAgICAgICBGT1JCSURfVEFHUyA9ICdGT1JCSURfVEFHUycgaW4gY2ZnID8gYWRkVG9TZXQoe30sIGNmZy5GT1JCSURfVEFHUykgOiB7fTtcbiAgICAgICAgRk9SQklEX0FUVFIgPSAnRk9SQklEX0FUVFInIGluIGNmZyA/IGFkZFRvU2V0KHt9LCBjZmcuRk9SQklEX0FUVFIpIDoge307XG4gICAgICAgIFVTRV9QUk9GSUxFUyA9ICdVU0VfUFJPRklMRVMnIGluIGNmZyA/IGNmZy5VU0VfUFJPRklMRVMgOiBmYWxzZTtcbiAgICAgICAgQUxMT1dfQVJJQV9BVFRSID0gY2ZnLkFMTE9XX0FSSUFfQVRUUiAhPT0gZmFsc2U7XG4gICAgICAgIEFMTE9XX0RBVEFfQVRUUiA9IGNmZy5BTExPV19EQVRBX0FUVFIgIT09IGZhbHNlO1xuICAgICAgICBBTExPV19VTktOT1dOX1BST1RPQ09MUyA9IGNmZy5BTExPV19VTktOT1dOX1BST1RPQ09MUyB8fCBmYWxzZTtcbiAgICAgICAgU0FGRV9GT1JfVEVNUExBVEVTID0gY2ZnLlNBRkVfRk9SX1RFTVBMQVRFUyB8fCBmYWxzZTtcbiAgICAgICAgV0hPTEVfRE9DVU1FTlQgPSBjZmcuV0hPTEVfRE9DVU1FTlQgfHwgZmFsc2U7XG4gICAgICAgIFJFVFVSTl9ET00gPSBjZmcuUkVUVVJOX0RPTSB8fCBmYWxzZTtcbiAgICAgICAgUkVUVVJOX0RPTV9GUkFHTUVOVCA9IGNmZy5SRVRVUk5fRE9NX0ZSQUdNRU5UIHx8IGZhbHNlO1xuICAgICAgICBSRVRVUk5fVFJVU1RFRF9UWVBFID0gY2ZnLlJFVFVSTl9UUlVTVEVEX1RZUEUgfHwgZmFsc2U7XG4gICAgICAgIEZPUkNFX0JPRFkgPSBjZmcuRk9SQ0VfQk9EWSB8fCBmYWxzZTtcbiAgICAgICAgU0FOSVRJWkVfRE9NID0gY2ZnLlNBTklUSVpFX0RPTSAhPT0gZmFsc2U7XG4gICAgICAgIEtFRVBfQ09OVEVOVCA9IGNmZy5LRUVQX0NPTlRFTlQgIT09IGZhbHNlO1xuICAgICAgICBJTl9QTEFDRSA9IGNmZy5JTl9QTEFDRSB8fCBmYWxzZTtcbiAgICAgICAgSVNfQUxMT1dFRF9VUkkkMSA9IGNmZy5BTExPV0VEX1VSSV9SRUdFWFAgfHwgSVNfQUxMT1dFRF9VUkkkMTtcbiAgICAgICAgTkFNRVNQQUNFID0gY2ZnLk5BTUVTUEFDRSB8fCBIVE1MX05BTUVTUEFDRTtcbiAgICAgICAgaWYgKGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORyAmJiBpc1JlZ2V4T3JGdW5jdGlvbihjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSkge1xuICAgICAgICAgIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayA9IGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2s7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORyAmJiBpc1JlZ2V4T3JGdW5jdGlvbihjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKSkge1xuICAgICAgICAgIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayA9IGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2s7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORyAmJiB0eXBlb2YgY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzID0gY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cztcbiAgICAgICAgfVxuICAgICAgICBQQVJTRVJfTUVESUFfVFlQRSA9IFNVUFBPUlRFRF9QQVJTRVJfTUVESUFfVFlQRVMuaW5kZXhPZihjZmcuUEFSU0VSX01FRElBX1RZUEUpID09PSAtMSA/IFBBUlNFUl9NRURJQV9UWVBFID0gREVGQVVMVF9QQVJTRVJfTUVESUFfVFlQRSA6IFBBUlNFUl9NRURJQV9UWVBFID0gY2ZnLlBBUlNFUl9NRURJQV9UWVBFO1xuICAgICAgICB0cmFuc2Zvcm1DYXNlRnVuYyA9IFBBUlNFUl9NRURJQV9UWVBFID09PSAnYXBwbGljYXRpb24veGh0bWwreG1sJyA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH0gOiBzdHJpbmdUb0xvd2VyQ2FzZTtcbiAgICAgICAgaWYgKFNBRkVfRk9SX1RFTVBMQVRFUykge1xuICAgICAgICAgIEFMTE9XX0RBVEFfQVRUUiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChSRVRVUk5fRE9NX0ZSQUdNRU5UKSB7XG4gICAgICAgICAgUkVUVVJOX0RPTSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFVTRV9QUk9GSUxFUykge1xuICAgICAgICAgIEFMTE9XRURfVEFHUyA9IGFkZFRvU2V0KHt9LCBfdG9Db25zdW1hYmxlQXJyYXkodGV4dCkpO1xuICAgICAgICAgIEFMTE9XRURfQVRUUiA9IFtdO1xuICAgICAgICAgIGlmIChVU0VfUFJPRklMRVMuaHRtbCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBodG1sJDEpO1xuICAgICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBodG1sKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFVTRV9QUk9GSUxFUy5zdmcgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgc3ZnJDEpO1xuICAgICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBzdmcpO1xuICAgICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCB4bWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoVVNFX1BST0ZJTEVTLnN2Z0ZpbHRlcnMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgc3ZnRmlsdGVycyk7XG4gICAgICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIHN2Zyk7XG4gICAgICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIHhtbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChVU0VfUFJPRklMRVMubWF0aE1sID09PSB0cnVlKSB7XG4gICAgICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIG1hdGhNbCQxKTtcbiAgICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgbWF0aE1sKTtcbiAgICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgeG1sKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNmZy5BRERfVEFHUykge1xuICAgICAgICAgIGlmIChBTExPV0VEX1RBR1MgPT09IERFRkFVTFRfQUxMT1dFRF9UQUdTKSB7XG4gICAgICAgICAgICBBTExPV0VEX1RBR1MgPSBjbG9uZShBTExPV0VEX1RBR1MpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIGNmZy5BRERfVEFHUyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNmZy5BRERfQVRUUikge1xuICAgICAgICAgIGlmIChBTExPV0VEX0FUVFIgPT09IERFRkFVTFRfQUxMT1dFRF9BVFRSKSB7XG4gICAgICAgICAgICBBTExPV0VEX0FUVFIgPSBjbG9uZShBTExPV0VEX0FUVFIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIGNmZy5BRERfQVRUUik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNmZy5BRERfVVJJX1NBRkVfQVRUUikge1xuICAgICAgICAgIGFkZFRvU2V0KFVSSV9TQUZFX0FUVFJJQlVURVMsIGNmZy5BRERfVVJJX1NBRkVfQVRUUik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNmZy5GT1JCSURfQ09OVEVOVFMpIHtcbiAgICAgICAgICBpZiAoRk9SQklEX0NPTlRFTlRTID09PSBERUZBVUxUX0ZPUkJJRF9DT05URU5UUykge1xuICAgICAgICAgICAgRk9SQklEX0NPTlRFTlRTID0gY2xvbmUoRk9SQklEX0NPTlRFTlRTKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWRkVG9TZXQoRk9SQklEX0NPTlRFTlRTLCBjZmcuRk9SQklEX0NPTlRFTlRTKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoS0VFUF9DT05URU5UKSB7XG4gICAgICAgICAgQUxMT1dFRF9UQUdTWycjdGV4dCddID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoV0hPTEVfRE9DVU1FTlQpIHtcbiAgICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIFtcbiAgICAgICAgICAgICdodG1sJyxcbiAgICAgICAgICAgICdoZWFkJyxcbiAgICAgICAgICAgICdib2R5J1xuICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBTExPV0VEX1RBR1MudGFibGUpIHtcbiAgICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIFsndGJvZHknXSk7XG4gICAgICAgICAgZGVsZXRlIEZPUkJJRF9UQUdTLnRib2R5O1xuICAgICAgICB9XG4gICAgICAgIGlmIChmcmVlemUpIHtcbiAgICAgICAgICBmcmVlemUoY2ZnKTtcbiAgICAgICAgfVxuICAgICAgICBDT05GSUcgPSBjZmc7XG4gICAgICB9O1xuICAgICAgdmFyIE1BVEhNTF9URVhUX0lOVEVHUkFUSU9OX1BPSU5UUyA9IGFkZFRvU2V0KHt9LCBbXG4gICAgICAgICdtaScsXG4gICAgICAgICdtbycsXG4gICAgICAgICdtbicsXG4gICAgICAgICdtcycsXG4gICAgICAgICdtdGV4dCdcbiAgICAgIF0pO1xuICAgICAgdmFyIEhUTUxfSU5URUdSQVRJT05fUE9JTlRTID0gYWRkVG9TZXQoe30sIFtcbiAgICAgICAgJ2ZvcmVpZ25vYmplY3QnLFxuICAgICAgICAnZGVzYycsXG4gICAgICAgICd0aXRsZScsXG4gICAgICAgICdhbm5vdGF0aW9uLXhtbCdcbiAgICAgIF0pO1xuICAgICAgdmFyIENPTU1PTl9TVkdfQU5EX0hUTUxfRUxFTUVOVFMgPSBhZGRUb1NldCh7fSwgW1xuICAgICAgICAndGl0bGUnLFxuICAgICAgICAnc3R5bGUnLFxuICAgICAgICAnZm9udCcsXG4gICAgICAgICdhJyxcbiAgICAgICAgJ3NjcmlwdCdcbiAgICAgIF0pO1xuICAgICAgdmFyIEFMTF9TVkdfVEFHUyA9IGFkZFRvU2V0KHt9LCBzdmckMSk7XG4gICAgICBhZGRUb1NldChBTExfU1ZHX1RBR1MsIHN2Z0ZpbHRlcnMpO1xuICAgICAgYWRkVG9TZXQoQUxMX1NWR19UQUdTLCBzdmdEaXNhbGxvd2VkKTtcbiAgICAgIHZhciBBTExfTUFUSE1MX1RBR1MgPSBhZGRUb1NldCh7fSwgbWF0aE1sJDEpO1xuICAgICAgYWRkVG9TZXQoQUxMX01BVEhNTF9UQUdTLCBtYXRoTWxEaXNhbGxvd2VkKTtcbiAgICAgIHZhciBfY2hlY2tWYWxpZE5hbWVzcGFjZSA9IGZ1bmN0aW9uIF9jaGVja1ZhbGlkTmFtZXNwYWNlKGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gICAgICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQudGFnTmFtZSkge1xuICAgICAgICAgIHBhcmVudCA9IHtcbiAgICAgICAgICAgIG5hbWVzcGFjZVVSSTogSFRNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgICB0YWdOYW1lOiAndGVtcGxhdGUnXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGFnTmFtZSA9IHN0cmluZ1RvTG93ZXJDYXNlKGVsZW1lbnQudGFnTmFtZSk7XG4gICAgICAgIHZhciBwYXJlbnRUYWdOYW1lID0gc3RyaW5nVG9Mb3dlckNhc2UocGFyZW50LnRhZ05hbWUpO1xuICAgICAgICBpZiAoZWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0UpIHtcbiAgICAgICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgICAgIHJldHVybiB0YWdOYW1lID09PSAnc3ZnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IE1BVEhNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgICAgIHJldHVybiB0YWdOYW1lID09PSAnc3ZnJyAmJiAocGFyZW50VGFnTmFtZSA9PT0gJ2Fubm90YXRpb24teG1sJyB8fCBNQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFNbcGFyZW50VGFnTmFtZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gQm9vbGVhbihBTExfU1ZHX1RBR1NbdGFnTmFtZV0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0gTUFUSE1MX05BTUVTUEFDRSkge1xuICAgICAgICAgIGlmIChwYXJlbnQubmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09ICdtYXRoJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0UpIHtcbiAgICAgICAgICAgIHJldHVybiB0YWdOYW1lID09PSAnbWF0aCcgJiYgSFRNTF9JTlRFR1JBVElPTl9QT0lOVFNbcGFyZW50VGFnTmFtZV07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBCb29sZWFuKEFMTF9NQVRITUxfVEFHU1t0YWdOYW1lXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQubmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgICAgIGlmIChwYXJlbnQubmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFICYmICFIVE1MX0lOVEVHUkFUSU9OX1BPSU5UU1twYXJlbnRUYWdOYW1lXSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gTUFUSE1MX05BTUVTUEFDRSAmJiAhTUFUSE1MX1RFWFRfSU5URUdSQVRJT05fUE9JTlRTW3BhcmVudFRhZ05hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAhQUxMX01BVEhNTF9UQUdTW3RhZ05hbWVdICYmIChDT01NT05fU1ZHX0FORF9IVE1MX0VMRU1FTlRTW3RhZ05hbWVdIHx8ICFBTExfU1ZHX1RBR1NbdGFnTmFtZV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG4gICAgICB2YXIgX2ZvcmNlUmVtb3ZlID0gZnVuY3Rpb24gX2ZvcmNlUmVtb3ZlKG5vZGUpIHtcbiAgICAgICAgYXJyYXlQdXNoKERPTVB1cmlmeS5yZW1vdmVkLCB7IGVsZW1lbnQ6IG5vZGUgfSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5vZGUub3V0ZXJIVE1MID0gZW1wdHlIVE1MO1xuICAgICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdmFyIF9yZW1vdmVBdHRyaWJ1dGUgPSBmdW5jdGlvbiBfcmVtb3ZlQXR0cmlidXRlKG5hbWUsIG5vZGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhcnJheVB1c2goRE9NUHVyaWZ5LnJlbW92ZWQsIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTogbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpLFxuICAgICAgICAgICAgZnJvbTogbm9kZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgYXJyYXlQdXNoKERPTVB1cmlmeS5yZW1vdmVkLCB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6IG51bGwsXG4gICAgICAgICAgICBmcm9tOiBub2RlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgIGlmIChuYW1lID09PSAnaXMnICYmICFBTExPV0VEX0FUVFJbbmFtZV0pIHtcbiAgICAgICAgICBpZiAoUkVUVVJOX0RPTSB8fCBSRVRVUk5fRE9NX0ZSQUdNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBfZm9yY2VSZW1vdmUobm9kZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsICcnKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB2YXIgX2luaXREb2N1bWVudCA9IGZ1bmN0aW9uIF9pbml0RG9jdW1lbnQoZGlydHkpIHtcbiAgICAgICAgdmFyIGRvYztcbiAgICAgICAgdmFyIGxlYWRpbmdXaGl0ZXNwYWNlO1xuICAgICAgICBpZiAoRk9SQ0VfQk9EWSkge1xuICAgICAgICAgIGRpcnR5ID0gJzxyZW1vdmU+PC9yZW1vdmU+JyArIGRpcnR5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBtYXRjaGVzID0gc3RyaW5nTWF0Y2goZGlydHksIC9eW1xcclxcblxcdCBdKy8pO1xuICAgICAgICAgIGxlYWRpbmdXaGl0ZXNwYWNlID0gbWF0Y2hlcyAmJiBtYXRjaGVzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChQQVJTRVJfTUVESUFfVFlQRSA9PT0gJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcpIHtcbiAgICAgICAgICBkaXJ0eSA9ICc8aHRtbCB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIj48aGVhZD48L2hlYWQ+PGJvZHk+JyArIGRpcnR5ICsgJzwvYm9keT48L2h0bWw+JztcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGlydHlQYXlsb2FkID0gdHJ1c3RlZFR5cGVzUG9saWN5ID8gdHJ1c3RlZFR5cGVzUG9saWN5LmNyZWF0ZUhUTUwoZGlydHkpIDogZGlydHk7XG4gICAgICAgIGlmIChOQU1FU1BBQ0UgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoZGlydHlQYXlsb2FkLCBQQVJTRVJfTUVESUFfVFlQRSk7XG4gICAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRvYyB8fCAhZG9jLmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgICAgIGRvYyA9IGltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50KE5BTUVTUEFDRSwgJ3RlbXBsYXRlJywgbnVsbCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRvYy5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MID0gSVNfRU1QVFlfSU5QVVQgPyAnJyA6IGRpcnR5UGF5bG9hZDtcbiAgICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBib2R5ID0gZG9jLmJvZHkgfHwgZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgaWYgKGRpcnR5ICYmIGxlYWRpbmdXaGl0ZXNwYWNlKSB7XG4gICAgICAgICAgYm9keS5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobGVhZGluZ1doaXRlc3BhY2UpLCBib2R5LmNoaWxkTm9kZXNbMF0gfHwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE5BTUVTUEFDRSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0RWxlbWVudHNCeVRhZ05hbWUuY2FsbChkb2MsIFdIT0xFX0RPQ1VNRU5UID8gJ2h0bWwnIDogJ2JvZHknKVswXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gV0hPTEVfRE9DVU1FTlQgPyBkb2MuZG9jdW1lbnRFbGVtZW50IDogYm9keTtcbiAgICAgIH07XG4gICAgICB2YXIgX2NyZWF0ZUl0ZXJhdG9yID0gZnVuY3Rpb24gX2NyZWF0ZUl0ZXJhdG9yKHJvb3QpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU5vZGVJdGVyYXRvci5jYWxsKHJvb3Qub3duZXJEb2N1bWVudCB8fCByb290LCByb290LCBOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCB8IE5vZGVGaWx0ZXIuU0hPV19DT01NRU5UIHwgTm9kZUZpbHRlci5TSE9XX1RFWFQsIG51bGwsIGZhbHNlKTtcbiAgICAgIH07XG4gICAgICB2YXIgX2lzQ2xvYmJlcmVkID0gZnVuY3Rpb24gX2lzQ2xvYmJlcmVkKGVsbSkge1xuICAgICAgICByZXR1cm4gZWxtIGluc3RhbmNlb2YgSFRNTEZvcm1FbGVtZW50ICYmICh0eXBlb2YgZWxtLm5vZGVOYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgZWxtLnRleHRDb250ZW50ICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgZWxtLnJlbW92ZUNoaWxkICE9PSAnZnVuY3Rpb24nIHx8ICEoZWxtLmF0dHJpYnV0ZXMgaW5zdGFuY2VvZiBOYW1lZE5vZGVNYXApIHx8IHR5cGVvZiBlbG0ucmVtb3ZlQXR0cmlidXRlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBlbG0uc2V0QXR0cmlidXRlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBlbG0ubmFtZXNwYWNlVVJJICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgZWxtLmluc2VydEJlZm9yZSAhPT0gJ2Z1bmN0aW9uJyk7XG4gICAgICB9O1xuICAgICAgdmFyIF9pc05vZGUgPSBmdW5jdGlvbiBfaXNOb2RlKG9iamVjdCkge1xuICAgICAgICByZXR1cm4gX3R5cGVvZihOb2RlKSA9PT0gJ29iamVjdCcgPyBvYmplY3QgaW5zdGFuY2VvZiBOb2RlIDogb2JqZWN0ICYmIF90eXBlb2Yob2JqZWN0KSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iamVjdC5ub2RlVHlwZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIG9iamVjdC5ub2RlTmFtZSA9PT0gJ3N0cmluZyc7XG4gICAgICB9O1xuICAgICAgdmFyIF9leGVjdXRlSG9vayA9IGZ1bmN0aW9uIF9leGVjdXRlSG9vayhlbnRyeVBvaW50LCBjdXJyZW50Tm9kZSwgZGF0YSkge1xuICAgICAgICBpZiAoIWhvb2tzW2VudHJ5UG9pbnRdKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGFycmF5Rm9yRWFjaChob29rc1tlbnRyeVBvaW50XSwgZnVuY3Rpb24gKGhvb2spIHtcbiAgICAgICAgICBob29rLmNhbGwoRE9NUHVyaWZ5LCBjdXJyZW50Tm9kZSwgZGF0YSwgQ09ORklHKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgdmFyIF9zYW5pdGl6ZUVsZW1lbnRzID0gZnVuY3Rpb24gX3Nhbml0aXplRWxlbWVudHMoY3VycmVudE5vZGUpIHtcbiAgICAgICAgdmFyIGNvbnRlbnQ7XG4gICAgICAgIF9leGVjdXRlSG9vaygnYmVmb3JlU2FuaXRpemVFbGVtZW50cycsIGN1cnJlbnROb2RlLCBudWxsKTtcbiAgICAgICAgaWYgKF9pc0Nsb2JiZXJlZChjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWdFeHBUZXN0KC9bXFx1MDA4MC1cXHVGRkZGXS8sIGN1cnJlbnROb2RlLm5vZGVOYW1lKSkge1xuICAgICAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRhZ05hbWUgPSB0cmFuc2Zvcm1DYXNlRnVuYyhjdXJyZW50Tm9kZS5ub2RlTmFtZSk7XG4gICAgICAgIF9leGVjdXRlSG9vaygndXBvblNhbml0aXplRWxlbWVudCcsIGN1cnJlbnROb2RlLCB7XG4gICAgICAgICAgdGFnTmFtZTogdGFnTmFtZSxcbiAgICAgICAgICBhbGxvd2VkVGFnczogQUxMT1dFRF9UQUdTXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY3VycmVudE5vZGUuaGFzQ2hpbGROb2RlcygpICYmICFfaXNOb2RlKGN1cnJlbnROb2RlLmZpcnN0RWxlbWVudENoaWxkKSAmJiAoIV9pc05vZGUoY3VycmVudE5vZGUuY29udGVudCkgfHwgIV9pc05vZGUoY3VycmVudE5vZGUuY29udGVudC5maXJzdEVsZW1lbnRDaGlsZCkpICYmIHJlZ0V4cFRlc3QoLzxbL1xcd10vZywgY3VycmVudE5vZGUuaW5uZXJIVE1MKSAmJiByZWdFeHBUZXN0KC88Wy9cXHddL2csIGN1cnJlbnROb2RlLnRleHRDb250ZW50KSkge1xuICAgICAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhZ05hbWUgPT09ICdzZWxlY3QnICYmIHJlZ0V4cFRlc3QoLzx0ZW1wbGF0ZS9pLCBjdXJyZW50Tm9kZS5pbm5lckhUTUwpKSB7XG4gICAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUFMTE9XRURfVEFHU1t0YWdOYW1lXSB8fCBGT1JCSURfVEFHU1t0YWdOYW1lXSkge1xuICAgICAgICAgIGlmICghRk9SQklEX1RBR1NbdGFnTmFtZV0gJiYgX2Jhc2ljQ3VzdG9tRWxlbWVudFRlc3QodGFnTmFtZSkpIHtcbiAgICAgICAgICAgIGlmIChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAgJiYgcmVnRXhwVGVzdChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2ssIHRhZ05hbWUpKVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKHRhZ05hbWUpKVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChLRUVQX0NPTlRFTlQgJiYgIUZPUkJJRF9DT05URU5UU1t0YWdOYW1lXSkge1xuICAgICAgICAgICAgdmFyIHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKSB8fCBjdXJyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgICAgICAgICAgdmFyIGNoaWxkTm9kZXMgPSBnZXRDaGlsZE5vZGVzKGN1cnJlbnROb2RlKSB8fCBjdXJyZW50Tm9kZS5jaGlsZE5vZGVzO1xuICAgICAgICAgICAgaWYgKGNoaWxkTm9kZXMgJiYgcGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICB2YXIgY2hpbGRDb3VudCA9IGNoaWxkTm9kZXMubGVuZ3RoO1xuICAgICAgICAgICAgICBmb3IgKHZhciBpID0gY2hpbGRDb3VudCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2xvbmVOb2RlKGNoaWxkTm9kZXNbaV0sIHRydWUpLCBnZXROZXh0U2libGluZyhjdXJyZW50Tm9kZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRWxlbWVudCAmJiAhX2NoZWNrVmFsaWROYW1lc3BhY2UoY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHRhZ05hbWUgPT09ICdub3NjcmlwdCcgfHwgdGFnTmFtZSA9PT0gJ25vZW1iZWQnKSAmJiByZWdFeHBUZXN0KC88XFwvbm8oc2NyaXB0fGVtYmVkKS9pLCBjdXJyZW50Tm9kZS5pbm5lckhUTUwpKSB7XG4gICAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoU0FGRV9GT1JfVEVNUExBVEVTICYmIGN1cnJlbnROb2RlLm5vZGVUeXBlID09PSAzKSB7XG4gICAgICAgICAgY29udGVudCA9IGN1cnJlbnROb2RlLnRleHRDb250ZW50O1xuICAgICAgICAgIGNvbnRlbnQgPSBzdHJpbmdSZXBsYWNlKGNvbnRlbnQsIE1VU1RBQ0hFX0VYUFIkMSwgJyAnKTtcbiAgICAgICAgICBjb250ZW50ID0gc3RyaW5nUmVwbGFjZShjb250ZW50LCBFUkJfRVhQUiQxLCAnICcpO1xuICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS50ZXh0Q29udGVudCAhPT0gY29udGVudCkge1xuICAgICAgICAgICAgYXJyYXlQdXNoKERPTVB1cmlmeS5yZW1vdmVkLCB7IGVsZW1lbnQ6IGN1cnJlbnROb2RlLmNsb25lTm9kZSgpIH0pO1xuICAgICAgICAgICAgY3VycmVudE5vZGUudGV4dENvbnRlbnQgPSBjb250ZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfZXhlY3V0ZUhvb2soJ2FmdGVyU2FuaXRpemVFbGVtZW50cycsIGN1cnJlbnROb2RlLCBudWxsKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfTtcbiAgICAgIHZhciBfaXNWYWxpZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uIF9pc1ZhbGlkQXR0cmlidXRlKGxjVGFnLCBsY05hbWUsIHZhbHVlKSB7XG4gICAgICAgIGlmIChTQU5JVElaRV9ET00gJiYgKGxjTmFtZSA9PT0gJ2lkJyB8fCBsY05hbWUgPT09ICduYW1lJykgJiYgKHZhbHVlIGluIGRvY3VtZW50IHx8IHZhbHVlIGluIGZvcm1FbGVtZW50KSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQUxMT1dfREFUQV9BVFRSICYmICFGT1JCSURfQVRUUltsY05hbWVdICYmIHJlZ0V4cFRlc3QoREFUQV9BVFRSJDEsIGxjTmFtZSkpO1xuICAgICAgICBlbHNlIGlmIChBTExPV19BUklBX0FUVFIgJiYgcmVnRXhwVGVzdChBUklBX0FUVFIkMSwgbGNOYW1lKSk7XG4gICAgICAgIGVsc2UgaWYgKCFBTExPV0VEX0FUVFJbbGNOYW1lXSB8fCBGT1JCSURfQVRUUltsY05hbWVdKSB7XG4gICAgICAgICAgaWYgKF9iYXNpY0N1c3RvbUVsZW1lbnRUZXN0KGxjVGFnKSAmJiAoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwICYmIHJlZ0V4cFRlc3QoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrLCBsY1RhZykgfHwgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKGxjVGFnKSkgJiYgKENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCAmJiByZWdFeHBUZXN0KENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaywgbGNOYW1lKSB8fCBDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2sobGNOYW1lKSkgfHwgbGNOYW1lID09PSAnaXMnICYmIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyAmJiAoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwICYmIHJlZ0V4cFRlc3QoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrLCB2YWx1ZSkgfHwgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKHZhbHVlKSkpO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChVUklfU0FGRV9BVFRSSUJVVEVTW2xjTmFtZV0pO1xuICAgICAgICBlbHNlIGlmIChyZWdFeHBUZXN0KElTX0FMTE9XRURfVVJJJDEsIHN0cmluZ1JlcGxhY2UodmFsdWUsIEFUVFJfV0hJVEVTUEFDRSQxLCAnJykpKTtcbiAgICAgICAgZWxzZSBpZiAoKGxjTmFtZSA9PT0gJ3NyYycgfHwgbGNOYW1lID09PSAneGxpbms6aHJlZicgfHwgbGNOYW1lID09PSAnaHJlZicpICYmIGxjVGFnICE9PSAnc2NyaXB0JyAmJiBzdHJpbmdJbmRleE9mKHZhbHVlLCAnZGF0YTonKSA9PT0gMCAmJiBEQVRBX1VSSV9UQUdTW2xjVGFnXSk7XG4gICAgICAgIGVsc2UgaWYgKEFMTE9XX1VOS05PV05fUFJPVE9DT0xTICYmICFyZWdFeHBUZXN0KElTX1NDUklQVF9PUl9EQVRBJDEsIHN0cmluZ1JlcGxhY2UodmFsdWUsIEFUVFJfV0hJVEVTUEFDRSQxLCAnJykpKTtcbiAgICAgICAgZWxzZSBpZiAoIXZhbHVlKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfTtcbiAgICAgIHZhciBfYmFzaWNDdXN0b21FbGVtZW50VGVzdCA9IGZ1bmN0aW9uIF9iYXNpY0N1c3RvbUVsZW1lbnRUZXN0KHRhZ05hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRhZ05hbWUuaW5kZXhPZignLScpID4gMDtcbiAgICAgIH07XG4gICAgICB2YXIgX3Nhbml0aXplQXR0cmlidXRlcyA9IGZ1bmN0aW9uIF9zYW5pdGl6ZUF0dHJpYnV0ZXMoY3VycmVudE5vZGUpIHtcbiAgICAgICAgdmFyIGF0dHI7XG4gICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgdmFyIGxjTmFtZTtcbiAgICAgICAgdmFyIGw7XG4gICAgICAgIF9leGVjdXRlSG9vaygnYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzJywgY3VycmVudE5vZGUsIG51bGwpO1xuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IGN1cnJlbnROb2RlLmF0dHJpYnV0ZXM7XG4gICAgICAgIGlmICghYXR0cmlidXRlcykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaG9va0V2ZW50ID0ge1xuICAgICAgICAgIGF0dHJOYW1lOiAnJyxcbiAgICAgICAgICBhdHRyVmFsdWU6ICcnLFxuICAgICAgICAgIGtlZXBBdHRyOiB0cnVlLFxuICAgICAgICAgIGFsbG93ZWRBdHRyaWJ1dGVzOiBBTExPV0VEX0FUVFJcbiAgICAgICAgfTtcbiAgICAgICAgbCA9IGF0dHJpYnV0ZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAobC0tKSB7XG4gICAgICAgICAgYXR0ciA9IGF0dHJpYnV0ZXNbbF07XG4gICAgICAgICAgdmFyIF9hdHRyID0gYXR0ciwgbmFtZSA9IF9hdHRyLm5hbWUsIG5hbWVzcGFjZVVSSSA9IF9hdHRyLm5hbWVzcGFjZVVSSTtcbiAgICAgICAgICB2YWx1ZSA9IG5hbWUgPT09ICd2YWx1ZScgPyBhdHRyLnZhbHVlIDogc3RyaW5nVHJpbShhdHRyLnZhbHVlKTtcbiAgICAgICAgICBsY05hbWUgPSB0cmFuc2Zvcm1DYXNlRnVuYyhuYW1lKTtcbiAgICAgICAgICB2YXIgaW5pdFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgaG9va0V2ZW50LmF0dHJOYW1lID0gbGNOYW1lO1xuICAgICAgICAgIGhvb2tFdmVudC5hdHRyVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICBob29rRXZlbnQua2VlcEF0dHIgPSB0cnVlO1xuICAgICAgICAgIGhvb2tFdmVudC5mb3JjZUtlZXBBdHRyID0gdW5kZWZpbmVkO1xuICAgICAgICAgIF9leGVjdXRlSG9vaygndXBvblNhbml0aXplQXR0cmlidXRlJywgY3VycmVudE5vZGUsIGhvb2tFdmVudCk7XG4gICAgICAgICAgdmFsdWUgPSBob29rRXZlbnQuYXR0clZhbHVlO1xuICAgICAgICAgIGlmIChob29rRXZlbnQuZm9yY2VLZWVwQXR0cikge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaG9va0V2ZW50LmtlZXBBdHRyKSB7XG4gICAgICAgICAgICBfcmVtb3ZlQXR0cmlidXRlKG5hbWUsIGN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVnRXhwVGVzdCgvXFwvPi9pLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChTQUZFX0ZPUl9URU1QTEFURVMpIHtcbiAgICAgICAgICAgIHZhbHVlID0gc3RyaW5nUmVwbGFjZSh2YWx1ZSwgTVVTVEFDSEVfRVhQUiQxLCAnICcpO1xuICAgICAgICAgICAgdmFsdWUgPSBzdHJpbmdSZXBsYWNlKHZhbHVlLCBFUkJfRVhQUiQxLCAnICcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgbGNUYWcgPSB0cmFuc2Zvcm1DYXNlRnVuYyhjdXJyZW50Tm9kZS5ub2RlTmFtZSk7XG4gICAgICAgICAgaWYgKCFfaXNWYWxpZEF0dHJpYnV0ZShsY1RhZywgbGNOYW1lLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gaW5pdFZhbHVlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpZiAobmFtZXNwYWNlVVJJKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudE5vZGUuc2V0QXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3VycmVudE5vZGUuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgICAgICBfcmVtb3ZlQXR0cmlidXRlKG5hbWUsIGN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX2V4ZWN1dGVIb29rKCdhZnRlclNhbml0aXplQXR0cmlidXRlcycsIGN1cnJlbnROb2RlLCBudWxsKTtcbiAgICAgIH07XG4gICAgICB2YXIgX3Nhbml0aXplU2hhZG93RE9NID0gZnVuY3Rpb24gX3Nhbml0aXplU2hhZG93RE9NKGZyYWdtZW50KSB7XG4gICAgICAgIHZhciBzaGFkb3dOb2RlO1xuICAgICAgICB2YXIgc2hhZG93SXRlcmF0b3IgPSBfY3JlYXRlSXRlcmF0b3IoZnJhZ21lbnQpO1xuICAgICAgICBfZXhlY3V0ZUhvb2soJ2JlZm9yZVNhbml0aXplU2hhZG93RE9NJywgZnJhZ21lbnQsIG51bGwpO1xuICAgICAgICB3aGlsZSAoc2hhZG93Tm9kZSA9IHNoYWRvd0l0ZXJhdG9yLm5leHROb2RlKCkpIHtcbiAgICAgICAgICBfZXhlY3V0ZUhvb2soJ3Vwb25TYW5pdGl6ZVNoYWRvd05vZGUnLCBzaGFkb3dOb2RlLCBudWxsKTtcbiAgICAgICAgICBpZiAoX3Nhbml0aXplRWxlbWVudHMoc2hhZG93Tm9kZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2hhZG93Tm9kZS5jb250ZW50IGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgICAgICAgX3Nhbml0aXplU2hhZG93RE9NKHNoYWRvd05vZGUuY29udGVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9zYW5pdGl6ZUF0dHJpYnV0ZXMoc2hhZG93Tm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgX2V4ZWN1dGVIb29rKCdhZnRlclNhbml0aXplU2hhZG93RE9NJywgZnJhZ21lbnQsIG51bGwpO1xuICAgICAgfTtcbiAgICAgIERPTVB1cmlmeS5zYW5pdGl6ZSA9IGZ1bmN0aW9uIChkaXJ0eSwgY2ZnKSB7XG4gICAgICAgIHZhciBib2R5O1xuICAgICAgICB2YXIgaW1wb3J0ZWROb2RlO1xuICAgICAgICB2YXIgY3VycmVudE5vZGU7XG4gICAgICAgIHZhciBvbGROb2RlO1xuICAgICAgICB2YXIgcmV0dXJuTm9kZTtcbiAgICAgICAgSVNfRU1QVFlfSU5QVVQgPSAhZGlydHk7XG4gICAgICAgIGlmIChJU19FTVBUWV9JTlBVVCkge1xuICAgICAgICAgIGRpcnR5ID0gJzwhLS0+JztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGRpcnR5ICE9PSAnc3RyaW5nJyAmJiAhX2lzTm9kZShkaXJ0eSkpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGRpcnR5LnRvU3RyaW5nICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyB0eXBlRXJyb3JDcmVhdGUoJ3RvU3RyaW5nIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRpcnR5ID0gZGlydHkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGlydHkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIHRocm93IHR5cGVFcnJvckNyZWF0ZSgnZGlydHkgaXMgbm90IGEgc3RyaW5nLCBhYm9ydGluZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIURPTVB1cmlmeS5pc1N1cHBvcnRlZCkge1xuICAgICAgICAgIGlmIChfdHlwZW9mKHdpbmRvdy50b1N0YXRpY0hUTUwpID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygd2luZG93LnRvU3RhdGljSFRNTCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkaXJ0eSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy50b1N0YXRpY0hUTUwoZGlydHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF9pc05vZGUoZGlydHkpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB3aW5kb3cudG9TdGF0aWNIVE1MKGRpcnR5Lm91dGVySFRNTCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBkaXJ0eTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIVNFVF9DT05GSUcpIHtcbiAgICAgICAgICBfcGFyc2VDb25maWcoY2ZnKTtcbiAgICAgICAgfVxuICAgICAgICBET01QdXJpZnkucmVtb3ZlZCA9IFtdO1xuICAgICAgICBpZiAodHlwZW9mIGRpcnR5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIElOX1BMQUNFID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElOX1BMQUNFKSB7XG4gICAgICAgICAgaWYgKGRpcnR5Lm5vZGVOYW1lKSB7XG4gICAgICAgICAgICB2YXIgdGFnTmFtZSA9IHRyYW5zZm9ybUNhc2VGdW5jKGRpcnR5Lm5vZGVOYW1lKTtcbiAgICAgICAgICAgIGlmICghQUxMT1dFRF9UQUdTW3RhZ05hbWVdIHx8IEZPUkJJRF9UQUdTW3RhZ05hbWVdKSB7XG4gICAgICAgICAgICAgIHRocm93IHR5cGVFcnJvckNyZWF0ZSgncm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkaXJ0eSBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgICAgICBib2R5ID0gX2luaXREb2N1bWVudCgnPCEtLS0tPicpO1xuICAgICAgICAgIGltcG9ydGVkTm9kZSA9IGJvZHkub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKGRpcnR5LCB0cnVlKTtcbiAgICAgICAgICBpZiAoaW1wb3J0ZWROb2RlLm5vZGVUeXBlID09PSAxICYmIGltcG9ydGVkTm9kZS5ub2RlTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgICAgICAgICBib2R5ID0gaW1wb3J0ZWROb2RlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaW1wb3J0ZWROb2RlLm5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICAgICAgICAgIGJvZHkgPSBpbXBvcnRlZE5vZGU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoaW1wb3J0ZWROb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFSRVRVUk5fRE9NICYmICFTQUZFX0ZPUl9URU1QTEFURVMgJiYgIVdIT0xFX0RPQ1VNRU5UICYmIGRpcnR5LmluZGV4T2YoJzwnKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVzdGVkVHlwZXNQb2xpY3kgJiYgUkVUVVJOX1RSVVNURURfVFlQRSA/IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKGRpcnR5KSA6IGRpcnR5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBib2R5ID0gX2luaXREb2N1bWVudChkaXJ0eSk7XG4gICAgICAgICAgaWYgKCFib2R5KSB7XG4gICAgICAgICAgICByZXR1cm4gUkVUVVJOX0RPTSA/IG51bGwgOiBSRVRVUk5fVFJVU1RFRF9UWVBFID8gZW1wdHlIVE1MIDogJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChib2R5ICYmIEZPUkNFX0JPRFkpIHtcbiAgICAgICAgICBfZm9yY2VSZW1vdmUoYm9keS5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbm9kZUl0ZXJhdG9yID0gX2NyZWF0ZUl0ZXJhdG9yKElOX1BMQUNFID8gZGlydHkgOiBib2R5KTtcbiAgICAgICAgd2hpbGUgKGN1cnJlbnROb2RlID0gbm9kZUl0ZXJhdG9yLm5leHROb2RlKCkpIHtcbiAgICAgICAgICBpZiAoY3VycmVudE5vZGUubm9kZVR5cGUgPT09IDMgJiYgY3VycmVudE5vZGUgPT09IG9sZE5vZGUpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoX3Nhbml0aXplRWxlbWVudHMoY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGN1cnJlbnROb2RlLmNvbnRlbnQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSB7XG4gICAgICAgICAgICBfc2FuaXRpemVTaGFkb3dET00oY3VycmVudE5vZGUuY29udGVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9zYW5pdGl6ZUF0dHJpYnV0ZXMoY3VycmVudE5vZGUpO1xuICAgICAgICAgIG9sZE5vZGUgPSBjdXJyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICBvbGROb2RlID0gbnVsbDtcbiAgICAgICAgaWYgKElOX1BMQUNFKSB7XG4gICAgICAgICAgcmV0dXJuIGRpcnR5O1xuICAgICAgICB9XG4gICAgICAgIGlmIChSRVRVUk5fRE9NKSB7XG4gICAgICAgICAgaWYgKFJFVFVSTl9ET01fRlJBR01FTlQpIHtcbiAgICAgICAgICAgIHJldHVybk5vZGUgPSBjcmVhdGVEb2N1bWVudEZyYWdtZW50LmNhbGwoYm9keS5vd25lckRvY3VtZW50KTtcbiAgICAgICAgICAgIHdoaWxlIChib2R5LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuTm9kZS5hcHBlbmRDaGlsZChib2R5LmZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm5Ob2RlID0gYm9keTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKEFMTE9XRURfQVRUUi5zaGFkb3dyb290KSB7XG4gICAgICAgICAgICByZXR1cm5Ob2RlID0gaW1wb3J0Tm9kZS5jYWxsKG9yaWdpbmFsRG9jdW1lbnQsIHJldHVybk5vZGUsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmV0dXJuTm9kZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc2VyaWFsaXplZEhUTUwgPSBXSE9MRV9ET0NVTUVOVCA/IGJvZHkub3V0ZXJIVE1MIDogYm9keS5pbm5lckhUTUw7XG4gICAgICAgIGlmIChXSE9MRV9ET0NVTUVOVCAmJiBBTExPV0VEX1RBR1NbJyFkb2N0eXBlJ10gJiYgYm9keS5vd25lckRvY3VtZW50ICYmIGJvZHkub3duZXJEb2N1bWVudC5kb2N0eXBlICYmIGJvZHkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUgJiYgcmVnRXhwVGVzdChET0NUWVBFX05BTUUsIGJvZHkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUpKSB7XG4gICAgICAgICAgc2VyaWFsaXplZEhUTUwgPSAnPCFET0NUWVBFICcgKyBib2R5Lm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lICsgJz5cXG4nICsgc2VyaWFsaXplZEhUTUw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFNBRkVfRk9SX1RFTVBMQVRFUykge1xuICAgICAgICAgIHNlcmlhbGl6ZWRIVE1MID0gc3RyaW5nUmVwbGFjZShzZXJpYWxpemVkSFRNTCwgTVVTVEFDSEVfRVhQUiQxLCAnICcpO1xuICAgICAgICAgIHNlcmlhbGl6ZWRIVE1MID0gc3RyaW5nUmVwbGFjZShzZXJpYWxpemVkSFRNTCwgRVJCX0VYUFIkMSwgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1c3RlZFR5cGVzUG9saWN5ICYmIFJFVFVSTl9UUlVTVEVEX1RZUEUgPyB0cnVzdGVkVHlwZXNQb2xpY3kuY3JlYXRlSFRNTChzZXJpYWxpemVkSFRNTCkgOiBzZXJpYWxpemVkSFRNTDtcbiAgICAgIH07XG4gICAgICBET01QdXJpZnkuc2V0Q29uZmlnID0gZnVuY3Rpb24gKGNmZykge1xuICAgICAgICBfcGFyc2VDb25maWcoY2ZnKTtcbiAgICAgICAgU0VUX0NPTkZJRyA9IHRydWU7XG4gICAgICB9O1xuICAgICAgRE9NUHVyaWZ5LmNsZWFyQ29uZmlnID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBDT05GSUcgPSBudWxsO1xuICAgICAgICBTRVRfQ09ORklHID0gZmFsc2U7XG4gICAgICB9O1xuICAgICAgRE9NUHVyaWZ5LmlzVmFsaWRBdHRyaWJ1dGUgPSBmdW5jdGlvbiAodGFnLCBhdHRyLCB2YWx1ZSkge1xuICAgICAgICBpZiAoIUNPTkZJRykge1xuICAgICAgICAgIF9wYXJzZUNvbmZpZyh7fSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxjVGFnID0gdHJhbnNmb3JtQ2FzZUZ1bmModGFnKTtcbiAgICAgICAgdmFyIGxjTmFtZSA9IHRyYW5zZm9ybUNhc2VGdW5jKGF0dHIpO1xuICAgICAgICByZXR1cm4gX2lzVmFsaWRBdHRyaWJ1dGUobGNUYWcsIGxjTmFtZSwgdmFsdWUpO1xuICAgICAgfTtcbiAgICAgIERPTVB1cmlmeS5hZGRIb29rID0gZnVuY3Rpb24gKGVudHJ5UG9pbnQsIGhvb2tGdW5jdGlvbikge1xuICAgICAgICBpZiAodHlwZW9mIGhvb2tGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBob29rc1tlbnRyeVBvaW50XSA9IGhvb2tzW2VudHJ5UG9pbnRdIHx8IFtdO1xuICAgICAgICBhcnJheVB1c2goaG9va3NbZW50cnlQb2ludF0sIGhvb2tGdW5jdGlvbik7XG4gICAgICB9O1xuICAgICAgRE9NUHVyaWZ5LnJlbW92ZUhvb2sgPSBmdW5jdGlvbiAoZW50cnlQb2ludCkge1xuICAgICAgICBpZiAoaG9va3NbZW50cnlQb2ludF0pIHtcbiAgICAgICAgICByZXR1cm4gYXJyYXlQb3AoaG9va3NbZW50cnlQb2ludF0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgRE9NUHVyaWZ5LnJlbW92ZUhvb2tzID0gZnVuY3Rpb24gKGVudHJ5UG9pbnQpIHtcbiAgICAgICAgaWYgKGhvb2tzW2VudHJ5UG9pbnRdKSB7XG4gICAgICAgICAgaG9va3NbZW50cnlQb2ludF0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIERPTVB1cmlmeS5yZW1vdmVBbGxIb29rcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaG9va3MgPSB7fTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gRE9NUHVyaWZ5O1xuICAgIH1cbiAgICB2YXIgcHVyaWZ5ID0gY3JlYXRlRE9NUHVyaWZ5KCk7XG5cbiAgICBjb25zdCBlYWNoJDQgPSBUb29scy5lYWNoLCB0cmltID0gVG9vbHMudHJpbTtcbiAgICBjb25zdCBxdWVyeVBhcnRzID0gW1xuICAgICAgJ3NvdXJjZScsXG4gICAgICAncHJvdG9jb2wnLFxuICAgICAgJ2F1dGhvcml0eScsXG4gICAgICAndXNlckluZm8nLFxuICAgICAgJ3VzZXInLFxuICAgICAgJ3Bhc3N3b3JkJyxcbiAgICAgICdob3N0JyxcbiAgICAgICdwb3J0JyxcbiAgICAgICdyZWxhdGl2ZScsXG4gICAgICAncGF0aCcsXG4gICAgICAnZGlyZWN0b3J5JyxcbiAgICAgICdmaWxlJyxcbiAgICAgICdxdWVyeScsXG4gICAgICAnYW5jaG9yJ1xuICAgIF07XG4gICAgY29uc3QgREVGQVVMVF9QT1JUUyA9IHtcbiAgICAgIGZ0cDogMjEsXG4gICAgICBodHRwOiA4MCxcbiAgICAgIGh0dHBzOiA0NDMsXG4gICAgICBtYWlsdG86IDI1XG4gICAgfTtcbiAgICBjb25zdCBzYWZlU3ZnRGF0YVVybEVsZW1lbnRzID0gW1xuICAgICAgJ2ltZycsXG4gICAgICAndmlkZW8nXG4gICAgXTtcbiAgICBjb25zdCBibG9ja1N2Z0RhdGFVcmlzID0gKGFsbG93U3ZnRGF0YVVybHMsIHRhZ05hbWUpID0+IHtcbiAgICAgIGlmIChpc05vbk51bGxhYmxlKGFsbG93U3ZnRGF0YVVybHMpKSB7XG4gICAgICAgIHJldHVybiAhYWxsb3dTdmdEYXRhVXJscztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpc05vbk51bGxhYmxlKHRhZ05hbWUpID8gIWNvbnRhaW5zJDIoc2FmZVN2Z0RhdGFVcmxFbGVtZW50cywgdGFnTmFtZSkgOiB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZGVjb2RlVXJpID0gZW5jb2RlZFVyaSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVuY29kZWRVcmkpO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgcmV0dXJuIHVuZXNjYXBlKGVuY29kZWRVcmkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNJbnZhbGlkVXJpID0gKHNldHRpbmdzLCB1cmksIHRhZ05hbWUpID0+IHtcbiAgICAgIGNvbnN0IGRlY29kZWRVcmkgPSBkZWNvZGVVcmkodXJpKS5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgICAgaWYgKHNldHRpbmdzLmFsbG93X3NjcmlwdF91cmxzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoLygoamF2YXx2YilzY3JpcHR8bWh0bWwpOi9pLnRlc3QoZGVjb2RlZFVyaSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHNldHRpbmdzLmFsbG93X2h0bWxfZGF0YV91cmxzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoL15kYXRhOmltYWdlXFwvL2kudGVzdChkZWNvZGVkVXJpKSkge1xuICAgICAgICByZXR1cm4gYmxvY2tTdmdEYXRhVXJpcyhzZXR0aW5ncy5hbGxvd19zdmdfZGF0YV91cmxzLCB0YWdOYW1lKSAmJiAvXmRhdGE6aW1hZ2VcXC9zdmdcXCt4bWwvaS50ZXN0KGRlY29kZWRVcmkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIC9eZGF0YTovaS50ZXN0KGRlY29kZWRVcmkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY2xhc3MgVVJJIHtcbiAgICAgIHN0YXRpYyBwYXJzZURhdGFVcmkodXJpKSB7XG4gICAgICAgIGxldCB0eXBlO1xuICAgICAgICBjb25zdCB1cmlDb21wb25lbnRzID0gZGVjb2RlVVJJQ29tcG9uZW50KHVyaSkuc3BsaXQoJywnKTtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IC9kYXRhOihbXjtdKykvLmV4ZWModXJpQ29tcG9uZW50c1swXSk7XG4gICAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgICAgdHlwZSA9IG1hdGNoZXNbMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIGRhdGE6IHVyaUNvbXBvbmVudHNbMV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHN0YXRpYyBpc0RvbVNhZmUodXJpLCBjb250ZXh0LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYWxsb3dfc2NyaXB0X3VybHMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBkZWNvZGVkVXJpID0gRW50aXRpZXMuZGVjb2RlKHVyaSkucmVwbGFjZSgvW1xcc1xcdTAwMDAtXFx1MDAxRl0rL2csICcnKTtcbiAgICAgICAgICByZXR1cm4gIWlzSW52YWxpZFVyaShvcHRpb25zLCBkZWNvZGVkVXJpLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RhdGljIGdldERvY3VtZW50QmFzZVVybChsb2MpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBsZXQgYmFzZVVybDtcbiAgICAgICAgaWYgKGxvYy5wcm90b2NvbC5pbmRleE9mKCdodHRwJykgIT09IDAgJiYgbG9jLnByb3RvY29sICE9PSAnZmlsZTonKSB7XG4gICAgICAgICAgYmFzZVVybCA9IChfYSA9IGxvYy5ocmVmKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBiYXNlVXJsID0gbG9jLnByb3RvY29sICsgJy8vJyArIGxvYy5ob3N0ICsgbG9jLnBhdGhuYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmICgvXlteOl0rOlxcL1xcL1xcLz9bXlxcL10rXFwvLy50ZXN0KGJhc2VVcmwpKSB7XG4gICAgICAgICAgYmFzZVVybCA9IGJhc2VVcmwucmVwbGFjZSgvW1xcPyNdLiokLywgJycpLnJlcGxhY2UoL1tcXC9cXFxcXVteXFwvXSskLywgJycpO1xuICAgICAgICAgIGlmICghL1tcXC9cXFxcXSQvLnRlc3QoYmFzZVVybCkpIHtcbiAgICAgICAgICAgIGJhc2VVcmwgKz0gJy8nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmFzZVVybDtcbiAgICAgIH1cbiAgICAgIGNvbnN0cnVjdG9yKHVybCwgc2V0dGluZ3MgPSB7fSkge1xuICAgICAgICB0aGlzLnBhdGggPSAnJztcbiAgICAgICAgdGhpcy5kaXJlY3RvcnkgPSAnJztcbiAgICAgICAgdXJsID0gdHJpbSh1cmwpO1xuICAgICAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgICAgIGNvbnN0IGJhc2VVcmkgPSBzZXR0aW5ncy5iYXNlX3VyaTtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmICgvXihbXFx3XFwtXSspOihbXlxcL117Mn0pL2kudGVzdCh1cmwpIHx8IC9eXFxzKiMvLnRlc3QodXJsKSkge1xuICAgICAgICAgIHNlbGYuc291cmNlID0gdXJsO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc1Byb3RvY29sUmVsYXRpdmUgPSB1cmwuaW5kZXhPZignLy8nKSA9PT0gMDtcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCcvJykgPT09IDAgJiYgIWlzUHJvdG9jb2xSZWxhdGl2ZSkge1xuICAgICAgICAgIHVybCA9IChiYXNlVXJpID8gYmFzZVVyaS5wcm90b2NvbCB8fCAnaHR0cCcgOiAnaHR0cCcpICsgJzovL21jZV9ob3N0JyArIHVybDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIS9eW1xcd1xcLV0qOj9cXC9cXC8vLnRlc3QodXJsKSkge1xuICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSBiYXNlVXJpID8gYmFzZVVyaS5wYXRoIDogbmV3IFVSSShkb2N1bWVudC5sb2NhdGlvbi5ocmVmKS5kaXJlY3Rvcnk7XG4gICAgICAgICAgaWYgKChiYXNlVXJpID09PSBudWxsIHx8IGJhc2VVcmkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJhc2VVcmkucHJvdG9jb2wpID09PSAnJykge1xuICAgICAgICAgICAgdXJsID0gJy8vbWNlX2hvc3QnICsgc2VsZi50b0Fic1BhdGgoYmFzZVVybCwgdXJsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSAvKFteIz9dKikoWyM/XT8uKikvLmV4ZWModXJsKTtcbiAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICB1cmwgPSAoYmFzZVVyaSAmJiBiYXNlVXJpLnByb3RvY29sIHx8ICdodHRwJykgKyAnOi8vbWNlX2hvc3QnICsgc2VsZi50b0Fic1BhdGgoYmFzZVVybCwgbWF0Y2hbMV0pICsgbWF0Y2hbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVybCA9IHVybC5yZXBsYWNlKC9AQC9nLCAnKG1jZV9hdCknKTtcbiAgICAgICAgY29uc3QgdXJsTWF0Y2ggPSAvXig/Oig/IVteOkBdKzpbXjpAXFwvXSpAKShbXjpcXC8/Iy5dKyk6KT8oPzpcXC9cXC8pPygoPzooKFteOkBcXC9dKik6PyhbXjpAXFwvXSopKT9AKT8oXFxbW2EtekEtWjAtOTouJV0rXFxdfFteOlxcLz8jXSopKD86OihcXGQqKSk/KSgoKFxcLyg/OltePyNdKD8hW14/I1xcL10qXFwuW14/I1xcLy5dKyg/Ols/I118JCkpKSpcXC8/KT8oW14/I1xcL10qKSkoPzpcXD8oW14jXSopKT8oPzojKC4qKSk/KS8uZXhlYyh1cmwpO1xuICAgICAgICBpZiAodXJsTWF0Y2gpIHtcbiAgICAgICAgICBlYWNoJDQocXVlcnlQYXJ0cywgKHYsIGkpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXJ0ID0gdXJsTWF0Y2hbaV07XG4gICAgICAgICAgICBpZiAocGFydCkge1xuICAgICAgICAgICAgICBwYXJ0ID0gcGFydC5yZXBsYWNlKC9cXChtY2VfYXRcXCkvZywgJ0BAJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmW3ZdID0gcGFydDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmFzZVVyaSkge1xuICAgICAgICAgIGlmICghc2VsZi5wcm90b2NvbCkge1xuICAgICAgICAgICAgc2VsZi5wcm90b2NvbCA9IGJhc2VVcmkucHJvdG9jb2w7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghc2VsZi51c2VySW5mbykge1xuICAgICAgICAgICAgc2VsZi51c2VySW5mbyA9IGJhc2VVcmkudXNlckluZm87XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghc2VsZi5wb3J0ICYmIHNlbGYuaG9zdCA9PT0gJ21jZV9ob3N0Jykge1xuICAgICAgICAgICAgc2VsZi5wb3J0ID0gYmFzZVVyaS5wb3J0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXNlbGYuaG9zdCB8fCBzZWxmLmhvc3QgPT09ICdtY2VfaG9zdCcpIHtcbiAgICAgICAgICAgIHNlbGYuaG9zdCA9IGJhc2VVcmkuaG9zdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2VsZi5zb3VyY2UgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm90b2NvbFJlbGF0aXZlKSB7XG4gICAgICAgICAgc2VsZi5wcm90b2NvbCA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRQYXRoKHBhdGgpIHtcbiAgICAgICAgY29uc3QgcGF0aE1hdGNoID0gL14oLio/KVxcLz8oXFx3Kyk/JC8uZXhlYyhwYXRoKTtcbiAgICAgICAgaWYgKHBhdGhNYXRjaCkge1xuICAgICAgICAgIHRoaXMucGF0aCA9IHBhdGhNYXRjaFswXTtcbiAgICAgICAgICB0aGlzLmRpcmVjdG9yeSA9IHBhdGhNYXRjaFsxXTtcbiAgICAgICAgICB0aGlzLmZpbGUgPSBwYXRoTWF0Y2hbMl07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zb3VyY2UgPSAnJztcbiAgICAgICAgdGhpcy5nZXRVUkkoKTtcbiAgICAgIH1cbiAgICAgIHRvUmVsYXRpdmUodXJpKSB7XG4gICAgICAgIGlmICh1cmkgPT09ICcuLycpIHtcbiAgICAgICAgICByZXR1cm4gdXJpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlVXJpID0gbmV3IFVSSSh1cmksIHsgYmFzZV91cmk6IHRoaXMgfSk7XG4gICAgICAgIGlmIChyZWxhdGl2ZVVyaS5ob3N0ICE9PSAnbWNlX2hvc3QnICYmIHRoaXMuaG9zdCAhPT0gcmVsYXRpdmVVcmkuaG9zdCAmJiByZWxhdGl2ZVVyaS5ob3N0IHx8IHRoaXMucG9ydCAhPT0gcmVsYXRpdmVVcmkucG9ydCB8fCB0aGlzLnByb3RvY29sICE9PSByZWxhdGl2ZVVyaS5wcm90b2NvbCAmJiByZWxhdGl2ZVVyaS5wcm90b2NvbCAhPT0gJycpIHtcbiAgICAgICAgICByZXR1cm4gcmVsYXRpdmVVcmkuZ2V0VVJJKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHUgPSB0aGlzLmdldFVSSSgpLCB1dSA9IHJlbGF0aXZlVXJpLmdldFVSSSgpO1xuICAgICAgICBpZiAodHUgPT09IHV1IHx8IHR1LmNoYXJBdCh0dS5sZW5ndGggLSAxKSA9PT0gJy8nICYmIHR1LnN1YnN0cigwLCB0dS5sZW5ndGggLSAxKSA9PT0gdXUpIHtcbiAgICAgICAgICByZXR1cm4gdHU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG91dHB1dCA9IHRoaXMudG9SZWxQYXRoKHRoaXMucGF0aCwgcmVsYXRpdmVVcmkucGF0aCk7XG4gICAgICAgIGlmIChyZWxhdGl2ZVVyaS5xdWVyeSkge1xuICAgICAgICAgIG91dHB1dCArPSAnPycgKyByZWxhdGl2ZVVyaS5xdWVyeTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVsYXRpdmVVcmkuYW5jaG9yKSB7XG4gICAgICAgICAgb3V0cHV0ICs9ICcjJyArIHJlbGF0aXZlVXJpLmFuY2hvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgfVxuICAgICAgdG9BYnNvbHV0ZSh1cmksIG5vSG9zdCkge1xuICAgICAgICBjb25zdCBhYnNvbHV0ZVVyaSA9IG5ldyBVUkkodXJpLCB7IGJhc2VfdXJpOiB0aGlzIH0pO1xuICAgICAgICByZXR1cm4gYWJzb2x1dGVVcmkuZ2V0VVJJKG5vSG9zdCAmJiB0aGlzLmlzU2FtZU9yaWdpbihhYnNvbHV0ZVVyaSkpO1xuICAgICAgfVxuICAgICAgaXNTYW1lT3JpZ2luKHVyaSkge1xuICAgICAgICBpZiAodGhpcy5ob3N0ID09IHVyaS5ob3N0ICYmIHRoaXMucHJvdG9jb2wgPT0gdXJpLnByb3RvY29sKSB7XG4gICAgICAgICAgaWYgKHRoaXMucG9ydCA9PSB1cmkucG9ydCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGRlZmF1bHRQb3J0ID0gdGhpcy5wcm90b2NvbCA/IERFRkFVTFRfUE9SVFNbdGhpcy5wcm90b2NvbF0gOiBudWxsO1xuICAgICAgICAgIGlmIChkZWZhdWx0UG9ydCAmJiAodGhpcy5wb3J0IHx8IGRlZmF1bHRQb3J0KSA9PSAodXJpLnBvcnQgfHwgZGVmYXVsdFBvcnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdG9SZWxQYXRoKGJhc2UsIHBhdGgpIHtcbiAgICAgICAgbGV0IGJyZWFrUG9pbnQgPSAwLCBvdXQgPSAnJywgaSwgbDtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEJhc2UgPSBiYXNlLnN1YnN0cmluZygwLCBiYXNlLmxhc3RJbmRleE9mKCcvJykpLnNwbGl0KCcvJyk7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gcGF0aC5zcGxpdCgnLycpO1xuICAgICAgICBpZiAobm9ybWFsaXplZEJhc2UubGVuZ3RoID49IGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBub3JtYWxpemVkQmFzZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpID49IGl0ZW1zLmxlbmd0aCB8fCBub3JtYWxpemVkQmFzZVtpXSAhPT0gaXRlbXNbaV0pIHtcbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGkgKyAxO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRCYXNlLmxlbmd0aCA8IGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpID49IG5vcm1hbGl6ZWRCYXNlLmxlbmd0aCB8fCBub3JtYWxpemVkQmFzZVtpXSAhPT0gaXRlbXNbaV0pIHtcbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGkgKyAxO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJyZWFrUG9pbnQgPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gbm9ybWFsaXplZEJhc2UubGVuZ3RoIC0gKGJyZWFrUG9pbnQgLSAxKTsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIG91dCArPSAnLi4vJztcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSBicmVha1BvaW50IC0gMSwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIGlmIChpICE9PSBicmVha1BvaW50IC0gMSkge1xuICAgICAgICAgICAgb3V0ICs9ICcvJyArIGl0ZW1zW2ldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gaXRlbXNbaV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgICB9XG4gICAgICB0b0Fic1BhdGgoYmFzZSwgcGF0aCkge1xuICAgICAgICBsZXQgbmIgPSAwO1xuICAgICAgICBjb25zdCB0ciA9IC9cXC8kLy50ZXN0KHBhdGgpID8gJy8nIDogJyc7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRCYXNlID0gYmFzZS5zcGxpdCgnLycpO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IHBhdGguc3BsaXQoJy8nKTtcbiAgICAgICAgY29uc3QgYmFzZVBhcnRzID0gW107XG4gICAgICAgIGVhY2gkNChub3JtYWxpemVkQmFzZSwgayA9PiB7XG4gICAgICAgICAgaWYgKGspIHtcbiAgICAgICAgICAgIGJhc2VQYXJ0cy5wdXNoKGspO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gbm9ybWFsaXplZFBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBpZiAobm9ybWFsaXplZFBhdGhbaV0ubGVuZ3RoID09PSAwIHx8IG5vcm1hbGl6ZWRQYXRoW2ldID09PSAnLicpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobm9ybWFsaXplZFBhdGhbaV0gPT09ICcuLicpIHtcbiAgICAgICAgICAgIG5iKys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5iID4gMCkge1xuICAgICAgICAgICAgbmItLTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXRoUGFydHMucHVzaChub3JtYWxpemVkUGF0aFtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaSA9IGJhc2VQYXJ0cy5sZW5ndGggLSBuYjtcbiAgICAgICAgbGV0IG91dFBhdGg7XG4gICAgICAgIGlmIChpIDw9IDApIHtcbiAgICAgICAgICBvdXRQYXRoID0gcmV2ZXJzZShwYXRoUGFydHMpLmpvaW4oJy8nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRQYXRoID0gYmFzZVBhcnRzLnNsaWNlKDAsIGkpLmpvaW4oJy8nKSArICcvJyArIHJldmVyc2UocGF0aFBhcnRzKS5qb2luKCcvJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG91dFBhdGguaW5kZXhPZignLycpICE9PSAwKSB7XG4gICAgICAgICAgb3V0UGF0aCA9ICcvJyArIG91dFBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyICYmIG91dFBhdGgubGFzdEluZGV4T2YoJy8nKSAhPT0gb3V0UGF0aC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgb3V0UGF0aCArPSB0cjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0UGF0aDtcbiAgICAgIH1cbiAgICAgIGdldFVSSShub1Byb3RvSG9zdCA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBzO1xuICAgICAgICBpZiAoIXRoaXMuc291cmNlIHx8IG5vUHJvdG9Ib3N0KSB7XG4gICAgICAgICAgcyA9ICcnO1xuICAgICAgICAgIGlmICghbm9Qcm90b0hvc3QpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb3RvY29sKSB7XG4gICAgICAgICAgICAgIHMgKz0gdGhpcy5wcm90b2NvbCArICc6Ly8nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcyArPSAnLy8nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMudXNlckluZm8pIHtcbiAgICAgICAgICAgICAgcyArPSB0aGlzLnVzZXJJbmZvICsgJ0AnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaG9zdCkge1xuICAgICAgICAgICAgICBzICs9IHRoaXMuaG9zdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgICAgICAgICAgcyArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLnBhdGgpIHtcbiAgICAgICAgICAgIHMgKz0gdGhpcy5wYXRoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5xdWVyeSkge1xuICAgICAgICAgICAgcyArPSAnPycgKyB0aGlzLnF1ZXJ5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5hbmNob3IpIHtcbiAgICAgICAgICAgIHMgKz0gJyMnICsgdGhpcy5hbmNob3I7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc291cmNlID0gcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyZWRVcmxBdHRycyA9IFRvb2xzLm1ha2VNYXAoJ3NyYyxocmVmLGRhdGEsYmFja2dyb3VuZCxhY3Rpb24sZm9ybWFjdGlvbixwb3N0ZXIseGxpbms6aHJlZicpO1xuICAgIGNvbnN0IGludGVybmFsRWxlbWVudEF0dHIgPSAnZGF0YS1tY2UtdHlwZSc7XG4gICAgbGV0IHVpZCA9IDA7XG4gICAgY29uc3QgcHJvY2Vzc05vZGUgPSAobm9kZSwgc2V0dGluZ3MsIHNjaGVtYSwgZXZ0KSA9PiB7XG4gICAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgICBjb25zdCB2YWxpZGF0ZSA9IHNldHRpbmdzLnZhbGlkYXRlO1xuICAgICAgY29uc3Qgc3BlY2lhbEVsZW1lbnRzID0gc2NoZW1hLmdldFNwZWNpYWxFbGVtZW50cygpO1xuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IENPTU1FTlQgJiYgIXNldHRpbmdzLmFsbG93X2NvbmRpdGlvbmFsX2NvbW1lbnRzICYmIC9eXFxbaWYvaS50ZXN0KChfYSA9IG5vZGUubm9kZVZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJykpIHtcbiAgICAgICAgbm9kZS5ub2RlVmFsdWUgPSAnICcgKyBub2RlLm5vZGVWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxjVGFnTmFtZSA9IChfYiA9IGV2dCA9PT0gbnVsbCB8fCBldnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV2dC50YWdOYW1lKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gRUxFTUVOVCB8fCBsY1RhZ05hbWUgPT09ICdib2R5Jykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBlbGVtZW50ID0gU3VnYXJFbGVtZW50LmZyb21Eb20obm9kZSk7XG4gICAgICBjb25zdCBpc0ludGVybmFsRWxlbWVudCA9IGhhcyQxKGVsZW1lbnQsIGludGVybmFsRWxlbWVudEF0dHIpO1xuICAgICAgY29uc3QgYm9ndXMgPSBnZXQkOShlbGVtZW50LCAnZGF0YS1tY2UtYm9ndXMnKTtcbiAgICAgIGlmICghaXNJbnRlcm5hbEVsZW1lbnQgJiYgaXNTdHJpbmcoYm9ndXMpKSB7XG4gICAgICAgIGlmIChib2d1cyA9PT0gJ2FsbCcpIHtcbiAgICAgICAgICByZW1vdmUkNShlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bndyYXAoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcnVsZSA9IHNjaGVtYS5nZXRFbGVtZW50UnVsZShsY1RhZ05hbWUpO1xuICAgICAgaWYgKHZhbGlkYXRlICYmICFydWxlKSB7XG4gICAgICAgIGlmIChoYXMkMihzcGVjaWFsRWxlbWVudHMsIGxjVGFnTmFtZSkpIHtcbiAgICAgICAgICByZW1vdmUkNShlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bndyYXAoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzTm9uTnVsbGFibGUoZXZ0KSkge1xuICAgICAgICAgIGV2dC5hbGxvd2VkVGFnc1tsY1RhZ05hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHZhbGlkYXRlICYmIHJ1bGUgJiYgIWlzSW50ZXJuYWxFbGVtZW50KSB7XG4gICAgICAgIGVhY2gkZSgoX2MgPSBydWxlLmF0dHJpYnV0ZXNGb3JjZWQpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IFtdLCBhdHRyID0+IHtcbiAgICAgICAgICBzZXQkMyhlbGVtZW50LCBhdHRyLm5hbWUsIGF0dHIudmFsdWUgPT09ICd7JHVpZH0nID8gYG1jZV8keyB1aWQrKyB9YCA6IGF0dHIudmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaCRlKChfZCA9IHJ1bGUuYXR0cmlidXRlc0RlZmF1bHQpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IFtdLCBhdHRyID0+IHtcbiAgICAgICAgICBpZiAoIWhhcyQxKGVsZW1lbnQsIGF0dHIubmFtZSkpIHtcbiAgICAgICAgICAgIHNldCQzKGVsZW1lbnQsIGF0dHIubmFtZSwgYXR0ci52YWx1ZSA9PT0gJ3skdWlkfScgPyBgbWNlXyR7IHVpZCsrIH1gIDogYXR0ci52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHJ1bGUuYXR0cmlidXRlc1JlcXVpcmVkICYmICFleGlzdHMocnVsZS5hdHRyaWJ1dGVzUmVxdWlyZWQsIGF0dHIgPT4gaGFzJDEoZWxlbWVudCwgYXR0cikpKSB7XG4gICAgICAgICAgdW53cmFwKGVsZW1lbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocnVsZS5yZW1vdmVFbXB0eUF0dHJzICYmIGhhc05vbmUoZWxlbWVudCkpIHtcbiAgICAgICAgICB1bndyYXAoZWxlbWVudCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChydWxlLm91dHB1dE5hbWUgJiYgcnVsZS5vdXRwdXROYW1lICE9PSBsY1RhZ05hbWUpIHtcbiAgICAgICAgICBtdXRhdGUoZWxlbWVudCwgcnVsZS5vdXRwdXROYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2hvdWxkS2VlcEF0dHJpYnV0ZSA9IChzZXR0aW5ncywgc2NoZW1hLCB0YWdOYW1lLCBhdHRyTmFtZSwgYXR0clZhbHVlKSA9PiAhKGF0dHJOYW1lIGluIGZpbHRlcmVkVXJsQXR0cnMgJiYgaXNJbnZhbGlkVXJpKHNldHRpbmdzLCBhdHRyVmFsdWUsIHRhZ05hbWUpKSAmJiAoIXNldHRpbmdzLnZhbGlkYXRlIHx8IHNjaGVtYS5pc1ZhbGlkKHRhZ05hbWUsIGF0dHJOYW1lKSB8fCBzdGFydHNXaXRoKGF0dHJOYW1lLCAnZGF0YS0nKSB8fCBzdGFydHNXaXRoKGF0dHJOYW1lLCAnYXJpYS0nKSk7XG4gICAgY29uc3QgaXNSZXF1aXJlZEF0dHJpYnV0ZU9mSW50ZXJuYWxFbGVtZW50ID0gKGVsZSwgYXR0ck5hbWUpID0+IGVsZS5oYXNBdHRyaWJ1dGUoaW50ZXJuYWxFbGVtZW50QXR0cikgJiYgKGF0dHJOYW1lID09PSAnaWQnIHx8IGF0dHJOYW1lID09PSAnY2xhc3MnIHx8IGF0dHJOYW1lID09PSAnc3R5bGUnKTtcbiAgICBjb25zdCBpc0Jvb2xlYW5BdHRyaWJ1dGUgPSAoYXR0ck5hbWUsIHNjaGVtYSkgPT4gYXR0ck5hbWUgaW4gc2NoZW1hLmdldEJvb2xBdHRycygpO1xuICAgIGNvbnN0IGZpbHRlckF0dHJpYnV0ZXMgPSAoZWxlLCBzZXR0aW5ncywgc2NoZW1hKSA9PiB7XG4gICAgICBjb25zdCB7YXR0cmlidXRlc30gPSBlbGU7XG4gICAgICBmb3IgKGxldCBpID0gYXR0cmlidXRlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBhdHRyID0gYXR0cmlidXRlc1tpXTtcbiAgICAgICAgY29uc3QgYXR0ck5hbWUgPSBhdHRyLm5hbWU7XG4gICAgICAgIGNvbnN0IGF0dHJWYWx1ZSA9IGF0dHIudmFsdWU7XG4gICAgICAgIGlmICghc2hvdWxkS2VlcEF0dHJpYnV0ZShzZXR0aW5ncywgc2NoZW1hLCBlbGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpLCBhdHRyTmFtZSwgYXR0clZhbHVlKSAmJiAhaXNSZXF1aXJlZEF0dHJpYnV0ZU9mSW50ZXJuYWxFbGVtZW50KGVsZSwgYXR0ck5hbWUpKSB7XG4gICAgICAgICAgZWxlLnJlbW92ZUF0dHJpYnV0ZShhdHRyTmFtZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuQXR0cmlidXRlKGF0dHJOYW1lLCBzY2hlbWEpKSB7XG4gICAgICAgICAgZWxlLnNldEF0dHJpYnV0ZShhdHRyTmFtZSwgYXR0ck5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cFB1cmlmeSA9IChzZXR0aW5ncywgc2NoZW1hKSA9PiB7XG4gICAgICBjb25zdCBwdXJpZnkkMSA9IHB1cmlmeSgpO1xuICAgICAgcHVyaWZ5JDEuYWRkSG9vaygndXBvblNhbml0aXplRWxlbWVudCcsIChlbGUsIGV2dCkgPT4ge1xuICAgICAgICBwcm9jZXNzTm9kZShlbGUsIHNldHRpbmdzLCBzY2hlbWEsIGV2dCk7XG4gICAgICB9KTtcbiAgICAgIHB1cmlmeSQxLmFkZEhvb2soJ3Vwb25TYW5pdGl6ZUF0dHJpYnV0ZScsIChlbGUsIGV2dCkgPT4ge1xuICAgICAgICBjb25zdCB0YWdOYW1lID0gZWxlLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3Qge2F0dHJOYW1lLCBhdHRyVmFsdWV9ID0gZXZ0O1xuICAgICAgICBldnQua2VlcEF0dHIgPSBzaG91bGRLZWVwQXR0cmlidXRlKHNldHRpbmdzLCBzY2hlbWEsIHRhZ05hbWUsIGF0dHJOYW1lLCBhdHRyVmFsdWUpO1xuICAgICAgICBpZiAoZXZ0LmtlZXBBdHRyKSB7XG4gICAgICAgICAgZXZ0LmFsbG93ZWRBdHRyaWJ1dGVzW2F0dHJOYW1lXSA9IHRydWU7XG4gICAgICAgICAgaWYgKGlzQm9vbGVhbkF0dHJpYnV0ZShhdHRyTmFtZSwgc2NoZW1hKSkge1xuICAgICAgICAgICAgZXZ0LmF0dHJWYWx1ZSA9IGF0dHJOYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2V0dGluZ3MuYWxsb3dfc3ZnX2RhdGFfdXJscyAmJiBzdGFydHNXaXRoKGF0dHJWYWx1ZSwgJ2RhdGE6aW1hZ2Uvc3ZnK3htbCcpKSB7XG4gICAgICAgICAgICBldnQuZm9yY2VLZWVwQXR0ciA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzUmVxdWlyZWRBdHRyaWJ1dGVPZkludGVybmFsRWxlbWVudChlbGUsIGF0dHJOYW1lKSkge1xuICAgICAgICAgIGV2dC5mb3JjZUtlZXBBdHRyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcHVyaWZ5JDE7XG4gICAgfTtcbiAgICBjb25zdCBnZXRQdXJpZnlDb25maWcgPSAoc2V0dGluZ3MsIG1pbWVUeXBlKSA9PiB7XG4gICAgICBjb25zdCBiYXNlUHVyaWZ5Q29uZmlnID0ge1xuICAgICAgICBJTl9QTEFDRTogdHJ1ZSxcbiAgICAgICAgQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFM6IHRydWUsXG4gICAgICAgIEFMTE9XRURfVEFHUzogW1xuICAgICAgICAgICcjY29tbWVudCcsXG4gICAgICAgICAgJyNjZGF0YS1zZWN0aW9uJyxcbiAgICAgICAgICAnYm9keSdcbiAgICAgICAgXSxcbiAgICAgICAgQUxMT1dFRF9BVFRSOiBbXVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHsgLi4uYmFzZVB1cmlmeUNvbmZpZyB9O1xuICAgICAgY29uZmlnLlBBUlNFUl9NRURJQV9UWVBFID0gbWltZVR5cGU7XG4gICAgICBpZiAoc2V0dGluZ3MuYWxsb3dfc2NyaXB0X3VybHMpIHtcbiAgICAgICAgY29uZmlnLkFMTE9XRURfVVJJX1JFR0VYUCA9IC8uKi87XG4gICAgICB9IGVsc2UgaWYgKHNldHRpbmdzLmFsbG93X2h0bWxfZGF0YV91cmxzKSB7XG4gICAgICAgIGNvbmZpZy5BTExPV0VEX1VSSV9SRUdFWFAgPSAvXig/IShcXHcrc2NyaXB0fG1odG1sKTopL2k7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH07XG4gICAgY29uc3QgZ2V0U2FuaXRpemVyID0gKHNldHRpbmdzLCBzY2hlbWEpID0+IHtcbiAgICAgIGlmIChzZXR0aW5ncy5zYW5pdGl6ZSkge1xuICAgICAgICBjb25zdCBwdXJpZnkgPSBzZXR1cFB1cmlmeShzZXR0aW5ncywgc2NoZW1hKTtcbiAgICAgICAgcmV0dXJuIChib2R5LCBtaW1lVHlwZSkgPT4ge1xuICAgICAgICAgIHB1cmlmeS5zYW5pdGl6ZShib2R5LCBnZXRQdXJpZnlDb25maWcoc2V0dGluZ3MsIG1pbWVUeXBlKSk7XG4gICAgICAgICAgcHVyaWZ5LnJlbW92ZWQgPSBbXTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoYm9keSwgXykgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vZGVJdGVyYXRvciA9IGRvY3VtZW50LmNyZWF0ZU5vZGVJdGVyYXRvcihib2R5LCBOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCB8IE5vZGVGaWx0ZXIuU0hPV19DT01NRU5UIHwgTm9kZUZpbHRlci5TSE9XX1RFWFQpO1xuICAgICAgICAgIGxldCBub2RlO1xuICAgICAgICAgIHdoaWxlIChub2RlID0gbm9kZUl0ZXJhdG9yLm5leHROb2RlKCkpIHtcbiAgICAgICAgICAgIHByb2Nlc3NOb2RlKG5vZGUsIHNldHRpbmdzLCBzY2hlbWEpO1xuICAgICAgICAgICAgaWYgKGlzRWxlbWVudCQ2KG5vZGUpKSB7XG4gICAgICAgICAgICAgIGZpbHRlckF0dHJpYnV0ZXMobm9kZSwgc2V0dGluZ3MsIHNjaGVtYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBtYWtlTWFwID0gVG9vbHMubWFrZU1hcCwgZXh0ZW5kJDEgPSBUb29scy5leHRlbmQ7XG4gICAgY29uc3QgdHJhbnNmZXJDaGlsZHJlbiA9IChwYXJlbnQsIG5hdGl2ZVBhcmVudCwgc3BlY2lhbEVsZW1lbnRzKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnROYW1lID0gcGFyZW50Lm5hbWU7XG4gICAgICBjb25zdCBpc1NwZWNpYWwgPSBwYXJlbnROYW1lIGluIHNwZWNpYWxFbGVtZW50cyAmJiBwYXJlbnROYW1lICE9PSAndGl0bGUnICYmIHBhcmVudE5hbWUgIT09ICd0ZXh0YXJlYSc7XG4gICAgICBjb25zdCBjaGlsZE5vZGVzID0gbmF0aXZlUGFyZW50LmNoaWxkTm9kZXM7XG4gICAgICBmb3IgKGxldCBuaSA9IDAsIG5sID0gY2hpbGROb2Rlcy5sZW5ndGg7IG5pIDwgbmw7IG5pKyspIHtcbiAgICAgICAgY29uc3QgbmF0aXZlQ2hpbGQgPSBjaGlsZE5vZGVzW25pXTtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBuZXcgQXN0Tm9kZShuYXRpdmVDaGlsZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBuYXRpdmVDaGlsZC5ub2RlVHlwZSk7XG4gICAgICAgIGlmIChpc0VsZW1lbnQkNihuYXRpdmVDaGlsZCkpIHtcbiAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gbmF0aXZlQ2hpbGQuYXR0cmlidXRlcztcbiAgICAgICAgICBmb3IgKGxldCBhaSA9IDAsIGFsID0gYXR0cmlidXRlcy5sZW5ndGg7IGFpIDwgYWw7IGFpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dHIgPSBhdHRyaWJ1dGVzW2FpXTtcbiAgICAgICAgICAgIGNoaWxkLmF0dHIoYXR0ci5uYW1lLCBhdHRyLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaXNUZXh0JGEobmF0aXZlQ2hpbGQpKSB7XG4gICAgICAgICAgY2hpbGQudmFsdWUgPSBuYXRpdmVDaGlsZC5kYXRhO1xuICAgICAgICAgIGlmIChpc1NwZWNpYWwpIHtcbiAgICAgICAgICAgIGNoaWxkLnJhdyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzQ29tbWVudChuYXRpdmVDaGlsZCkgfHwgaXNDRGF0YShuYXRpdmVDaGlsZCkgfHwgaXNQaShuYXRpdmVDaGlsZCkpIHtcbiAgICAgICAgICBjaGlsZC52YWx1ZSA9IG5hdGl2ZUNoaWxkLmRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgdHJhbnNmZXJDaGlsZHJlbihjaGlsZCwgbmF0aXZlQ2hpbGQsIHNwZWNpYWxFbGVtZW50cyk7XG4gICAgICAgIHBhcmVudC5hcHBlbmQoY2hpbGQpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgd2Fsa1RyZWUgPSAocm9vdCwgcHJlcHJvY2Vzc29ycywgcG9zdHByb2Nlc3NvcnMpID0+IHtcbiAgICAgIGNvbnN0IHRyYXZlcnNlT3JkZXIgPSBbXTtcbiAgICAgIGZvciAobGV0IG5vZGUgPSByb290LCBsYXN0Tm9kZSA9IG5vZGU7IG5vZGU7IGxhc3ROb2RlID0gbm9kZSwgbm9kZSA9IG5vZGUud2FsaygpKSB7XG4gICAgICAgIGNvbnN0IHRlbXBOb2RlID0gbm9kZTtcbiAgICAgICAgZWFjaCRlKHByZXByb2Nlc3NvcnMsIHByZXByb2Nlc3MgPT4gcHJlcHJvY2Vzcyh0ZW1wTm9kZSkpO1xuICAgICAgICBpZiAoaXNOdWxsYWJsZSh0ZW1wTm9kZS5wYXJlbnQpICYmIHRlbXBOb2RlICE9PSByb290KSB7XG4gICAgICAgICAgbm9kZSA9IGxhc3ROb2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyYXZlcnNlT3JkZXIucHVzaCh0ZW1wTm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSB0cmF2ZXJzZU9yZGVyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0cmF2ZXJzZU9yZGVyW2ldO1xuICAgICAgICBlYWNoJGUocG9zdHByb2Nlc3NvcnMsIHBvc3Rwcm9jZXNzID0+IHBvc3Rwcm9jZXNzKG5vZGUpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHdoaXRlc3BhY2VDbGVhbmVyID0gKHJvb3QsIHNjaGVtYSwgc2V0dGluZ3MsIGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlID0gc2V0dGluZ3MudmFsaWRhdGU7XG4gICAgICBjb25zdCBub25FbXB0eUVsZW1lbnRzID0gc2NoZW1hLmdldE5vbkVtcHR5RWxlbWVudHMoKTtcbiAgICAgIGNvbnN0IHdoaXRlc3BhY2VFbGVtZW50cyA9IHNjaGVtYS5nZXRXaGl0ZXNwYWNlRWxlbWVudHMoKTtcbiAgICAgIGNvbnN0IGJsb2NrRWxlbWVudHMgPSBleHRlbmQkMShtYWtlTWFwKCdzY3JpcHQsc3R5bGUsaGVhZCxodG1sLGJvZHksdGl0bGUsbWV0YSxwYXJhbScpLCBzY2hlbWEuZ2V0QmxvY2tFbGVtZW50cygpKTtcbiAgICAgIGNvbnN0IHRleHRSb290QmxvY2tFbGVtZW50cyA9IGdldFRleHRSb290QmxvY2tFbGVtZW50cyhzY2hlbWEpO1xuICAgICAgY29uc3QgYWxsV2hpdGVTcGFjZVJlZ0V4cCA9IC9bIFxcdFxcclxcbl0rL2c7XG4gICAgICBjb25zdCBzdGFydFdoaXRlU3BhY2VSZWdFeHAgPSAvXlsgXFx0XFxyXFxuXSsvO1xuICAgICAgY29uc3QgZW5kV2hpdGVTcGFjZVJlZ0V4cCA9IC9bIFxcdFxcclxcbl0rJC87XG4gICAgICBjb25zdCBoYXNXaGl0ZXNwYWNlUGFyZW50ID0gbm9kZSA9PiB7XG4gICAgICAgIGxldCB0ZW1wTm9kZSA9IG5vZGUucGFyZW50O1xuICAgICAgICB3aGlsZSAoaXNOb25OdWxsYWJsZSh0ZW1wTm9kZSkpIHtcbiAgICAgICAgICBpZiAodGVtcE5vZGUubmFtZSBpbiB3aGl0ZXNwYWNlRWxlbWVudHMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZW1wTm9kZSA9IHRlbXBOb2RlLnBhcmVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzVGV4dFJvb3RCbG9ja0VtcHR5ID0gbm9kZSA9PiB7XG4gICAgICAgIGxldCB0ZW1wTm9kZSA9IG5vZGU7XG4gICAgICAgIHdoaWxlIChpc05vbk51bGxhYmxlKHRlbXBOb2RlKSkge1xuICAgICAgICAgIGlmICh0ZW1wTm9kZS5uYW1lIGluIHRleHRSb290QmxvY2tFbGVtZW50cykge1xuICAgICAgICAgICAgcmV0dXJuIGlzRW1wdHkoc2NoZW1hLCBub25FbXB0eUVsZW1lbnRzLCB3aGl0ZXNwYWNlRWxlbWVudHMsIHRlbXBOb2RlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGVtcE5vZGUgPSB0ZW1wTm9kZS5wYXJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0Jsb2NrID0gbm9kZSA9PiBub2RlLm5hbWUgaW4gYmxvY2tFbGVtZW50cyB8fCBpc1RyYW5zcGFyZW50QXN0QmxvY2soc2NoZW1hLCBub2RlKTtcbiAgICAgIGNvbnN0IGlzQXRFZGdlT2ZCbG9jayA9IChub2RlLCBzdGFydCkgPT4ge1xuICAgICAgICBjb25zdCBuZWlnaGJvdXIgPSBzdGFydCA/IG5vZGUucHJldiA6IG5vZGUubmV4dDtcbiAgICAgICAgaWYgKGlzTm9uTnVsbGFibGUobmVpZ2hib3VyKSB8fCBpc051bGxhYmxlKG5vZGUucGFyZW50KSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNCbG9jayhub2RlLnBhcmVudCkgJiYgKG5vZGUucGFyZW50ICE9PSByb290IHx8IGFyZ3MuaXNSb290Q29udGVudCA9PT0gdHJ1ZSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcHJlcHJvY2VzcyA9IG5vZGUgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChub2RlLnR5cGUgPT09IDMpIHtcbiAgICAgICAgICBpZiAoIWhhc1doaXRlc3BhY2VQYXJlbnQobm9kZSkpIHtcbiAgICAgICAgICAgIGxldCB0ZXh0ID0gKF9hID0gbm9kZS52YWx1ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKGFsbFdoaXRlU3BhY2VSZWdFeHAsICcgJyk7XG4gICAgICAgICAgICBpZiAoaXNMaW5lQnJlYWtOb2RlKG5vZGUucHJldiwgaXNCbG9jaykgfHwgaXNBdEVkZ2VPZkJsb2NrKG5vZGUsIHRydWUpKSB7XG4gICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2Uoc3RhcnRXaGl0ZVNwYWNlUmVnRXhwLCAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5vZGUudmFsdWUgPSB0ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBvc3Rwcm9jZXNzID0gbm9kZSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gMSkge1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnRSdWxlID0gc2NoZW1hLmdldEVsZW1lbnRSdWxlKG5vZGUubmFtZSk7XG4gICAgICAgICAgaWYgKHZhbGlkYXRlICYmIGVsZW1lbnRSdWxlKSB7XG4gICAgICAgICAgICBjb25zdCBpc05vZGVFbXB0eSA9IGlzRW1wdHkoc2NoZW1hLCBub25FbXB0eUVsZW1lbnRzLCB3aGl0ZXNwYWNlRWxlbWVudHMsIG5vZGUpO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnRSdWxlLnBhZGRJbkVtcHR5QmxvY2sgJiYgaXNOb2RlRW1wdHkgJiYgaXNUZXh0Um9vdEJsb2NrRW1wdHkobm9kZSkpIHtcbiAgICAgICAgICAgICAgcGFkZEVtcHR5Tm9kZShzZXR0aW5ncywgYXJncywgaXNCbG9jaywgbm9kZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnRSdWxlLnJlbW92ZUVtcHR5ICYmIGlzTm9kZUVtcHR5KSB7XG4gICAgICAgICAgICAgIGlmIChpc0Jsb2NrKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlLnVud3JhcCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnRSdWxlLnBhZGRFbXB0eSAmJiAoaXNOb2RlRW1wdHkgfHwgaXNQYWRkZWRXaXRoTmJzcChub2RlKSkpIHtcbiAgICAgICAgICAgICAgcGFkZEVtcHR5Tm9kZShzZXR0aW5ncywgYXJncywgaXNCbG9jaywgbm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gMykge1xuICAgICAgICAgIGlmICghaGFzV2hpdGVzcGFjZVBhcmVudChub2RlKSkge1xuICAgICAgICAgICAgbGV0IHRleHQgPSAoX2EgPSBub2RlLnZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgICAgICAgIGlmIChub2RlLm5leHQgJiYgaXNCbG9jayhub2RlLm5leHQpIHx8IGlzQXRFZGdlT2ZCbG9jayhub2RlLCBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZShlbmRXaGl0ZVNwYWNlUmVnRXhwLCAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5vZGUudmFsdWUgPSB0ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHByZXByb2Nlc3MsXG4gICAgICAgIHBvc3Rwcm9jZXNzXG4gICAgICBdO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Um9vdEJsb2NrTmFtZSA9IChzZXR0aW5ncywgYXJncykgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgbmFtZSA9IChfYSA9IGFyZ3MuZm9yY2VkX3Jvb3RfYmxvY2spICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHNldHRpbmdzLmZvcmNlZF9yb290X2Jsb2NrO1xuICAgICAgaWYgKG5hbWUgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gJ3AnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBEb21QYXJzZXIgPSAoc2V0dGluZ3MgPSB7fSwgc2NoZW1hID0gU2NoZW1hKCkpID0+IHtcbiAgICAgIGNvbnN0IG5vZGVGaWx0ZXJSZWdpc3RyeSA9IGNyZWF0ZSQ4KCk7XG4gICAgICBjb25zdCBhdHRyaWJ1dGVGaWx0ZXJSZWdpc3RyeSA9IGNyZWF0ZSQ4KCk7XG4gICAgICBjb25zdCBkZWZhdWx0ZWRTZXR0aW5ncyA9IHtcbiAgICAgICAgdmFsaWRhdGU6IHRydWUsXG4gICAgICAgIHJvb3RfbmFtZTogJ2JvZHknLFxuICAgICAgICBzYW5pdGl6ZTogdHJ1ZSxcbiAgICAgICAgLi4uc2V0dGluZ3NcbiAgICAgIH07XG4gICAgICBjb25zdCBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICBjb25zdCBzYW5pdGl6ZSA9IGdldFNhbml0aXplcihkZWZhdWx0ZWRTZXR0aW5ncywgc2NoZW1hKTtcbiAgICAgIGNvbnN0IHBhcnNlQW5kU2FuaXRpemVXaXRoQ29udGV4dCA9IChodG1sLCByb290TmFtZSwgZm9ybWF0ID0gJ2h0bWwnKSA9PiB7XG4gICAgICAgIGNvbnN0IG1pbWVUeXBlID0gZm9ybWF0ID09PSAneGh0bWwnID8gJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcgOiAndGV4dC9odG1sJztcbiAgICAgICAgY29uc3QgaXNTcGVjaWFsUm9vdCA9IGhhcyQyKHNjaGVtYS5nZXRTcGVjaWFsRWxlbWVudHMoKSwgcm9vdE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBpc1NwZWNpYWxSb290ID8gYDwkeyByb290TmFtZSB9PiR7IGh0bWwgfTwvJHsgcm9vdE5hbWUgfT5gIDogaHRtbDtcbiAgICAgICAgY29uc3Qgd3JhcHBlZEh0bWwgPSBmb3JtYXQgPT09ICd4aHRtbCcgPyBgPGh0bWwgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI+PGhlYWQ+PC9oZWFkPjxib2R5PiR7IGNvbnRlbnQgfTwvYm9keT48L2h0bWw+YCA6IGA8Ym9keT4keyBjb250ZW50IH08L2JvZHk+YDtcbiAgICAgICAgY29uc3QgYm9keSA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcod3JhcHBlZEh0bWwsIG1pbWVUeXBlKS5ib2R5O1xuICAgICAgICBzYW5pdGl6ZShib2R5LCBtaW1lVHlwZSk7XG4gICAgICAgIHJldHVybiBpc1NwZWNpYWxSb290ID8gYm9keS5maXJzdENoaWxkIDogYm9keTtcbiAgICAgIH07XG4gICAgICBjb25zdCBhZGROb2RlRmlsdGVyID0gbm9kZUZpbHRlclJlZ2lzdHJ5LmFkZEZpbHRlcjtcbiAgICAgIGNvbnN0IGdldE5vZGVGaWx0ZXJzID0gbm9kZUZpbHRlclJlZ2lzdHJ5LmdldEZpbHRlcnM7XG4gICAgICBjb25zdCByZW1vdmVOb2RlRmlsdGVyID0gbm9kZUZpbHRlclJlZ2lzdHJ5LnJlbW92ZUZpbHRlcjtcbiAgICAgIGNvbnN0IGFkZEF0dHJpYnV0ZUZpbHRlciA9IGF0dHJpYnV0ZUZpbHRlclJlZ2lzdHJ5LmFkZEZpbHRlcjtcbiAgICAgIGNvbnN0IGdldEF0dHJpYnV0ZUZpbHRlcnMgPSBhdHRyaWJ1dGVGaWx0ZXJSZWdpc3RyeS5nZXRGaWx0ZXJzO1xuICAgICAgY29uc3QgcmVtb3ZlQXR0cmlidXRlRmlsdGVyID0gYXR0cmlidXRlRmlsdGVyUmVnaXN0cnkucmVtb3ZlRmlsdGVyO1xuICAgICAgY29uc3QgZmluZEludmFsaWRDaGlsZHJlbiA9IChub2RlLCBpbnZhbGlkQ2hpbGRyZW4pID0+IHtcbiAgICAgICAgaWYgKGlzSW52YWxpZChzY2hlbWEsIG5vZGUpKSB7XG4gICAgICAgICAgaW52YWxpZENoaWxkcmVuLnB1c2gobm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBpc1dyYXBwYWJsZU5vZGUgPSAoYmxvY2tFbGVtZW50cywgbm9kZSkgPT4ge1xuICAgICAgICBjb25zdCBpc0ludGVybmFsRWxlbWVudCA9IGlzU3RyaW5nKG5vZGUuYXR0cihpbnRlcm5hbEVsZW1lbnRBdHRyKSk7XG4gICAgICAgIGNvbnN0IGlzSW5saW5lRWxlbWVudCA9IG5vZGUudHlwZSA9PT0gMSAmJiAoIWhhcyQyKGJsb2NrRWxlbWVudHMsIG5vZGUubmFtZSkgJiYgIWlzVHJhbnNwYXJlbnRBc3RCbG9jayhzY2hlbWEsIG5vZGUpKTtcbiAgICAgICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gMyB8fCBpc0lubGluZUVsZW1lbnQgJiYgIWlzSW50ZXJuYWxFbGVtZW50O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkZFJvb3RCbG9ja3MgPSAocm9vdE5vZGUsIHJvb3RCbG9ja05hbWUpID0+IHtcbiAgICAgICAgY29uc3QgYmxvY2tFbGVtZW50cyA9IGV4dGVuZCQxKG1ha2VNYXAoJ3NjcmlwdCxzdHlsZSxoZWFkLGh0bWwsYm9keSx0aXRsZSxtZXRhLHBhcmFtJyksIHNjaGVtYS5nZXRCbG9ja0VsZW1lbnRzKCkpO1xuICAgICAgICBjb25zdCBzdGFydFdoaXRlU3BhY2VSZWdFeHAgPSAvXlsgXFx0XFxyXFxuXSsvO1xuICAgICAgICBjb25zdCBlbmRXaGl0ZVNwYWNlUmVnRXhwID0gL1sgXFx0XFxyXFxuXSskLztcbiAgICAgICAgbGV0IG5vZGUgPSByb290Tm9kZS5maXJzdENoaWxkLCByb290QmxvY2tOb2RlID0gbnVsbDtcbiAgICAgICAgY29uc3QgdHJpbSA9IHJvb3RCbG9jayA9PiB7XG4gICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICBpZiAocm9vdEJsb2NrKSB7XG4gICAgICAgICAgICBub2RlID0gcm9vdEJsb2NrLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICBpZiAobm9kZSAmJiBub2RlLnR5cGUgPT09IDMpIHtcbiAgICAgICAgICAgICAgbm9kZS52YWx1ZSA9IChfYSA9IG5vZGUudmFsdWUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZXBsYWNlKHN0YXJ0V2hpdGVTcGFjZVJlZ0V4cCwgJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9kZSA9IHJvb3RCbG9jay5sYXN0Q2hpbGQ7XG4gICAgICAgICAgICBpZiAobm9kZSAmJiBub2RlLnR5cGUgPT09IDMpIHtcbiAgICAgICAgICAgICAgbm9kZS52YWx1ZSA9IChfYiA9IG5vZGUudmFsdWUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5yZXBsYWNlKGVuZFdoaXRlU3BhY2VSZWdFeHAsICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmICghc2NoZW1hLmlzVmFsaWRDaGlsZChyb290Tm9kZS5uYW1lLCByb290QmxvY2tOYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IG5vZGUubmV4dDtcbiAgICAgICAgICBpZiAoaXNXcmFwcGFibGVOb2RlKGJsb2NrRWxlbWVudHMsIG5vZGUpKSB7XG4gICAgICAgICAgICBpZiAoIXJvb3RCbG9ja05vZGUpIHtcbiAgICAgICAgICAgICAgcm9vdEJsb2NrTm9kZSA9IG5ldyBBc3ROb2RlKHJvb3RCbG9ja05hbWUsIDEpO1xuICAgICAgICAgICAgICByb290QmxvY2tOb2RlLmF0dHIoZGVmYXVsdGVkU2V0dGluZ3MuZm9yY2VkX3Jvb3RfYmxvY2tfYXR0cnMpO1xuICAgICAgICAgICAgICByb290Tm9kZS5pbnNlcnQocm9vdEJsb2NrTm9kZSwgbm9kZSk7XG4gICAgICAgICAgICAgIHJvb3RCbG9ja05vZGUuYXBwZW5kKG5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm9vdEJsb2NrTm9kZS5hcHBlbmQobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyaW0ocm9vdEJsb2NrTm9kZSk7XG4gICAgICAgICAgICByb290QmxvY2tOb2RlID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgbm9kZSA9IG5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgdHJpbShyb290QmxvY2tOb2RlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBwYXJzZSA9IChodG1sLCBhcmdzID0ge30pID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCB2YWxpZGF0ZSA9IGRlZmF1bHRlZFNldHRpbmdzLnZhbGlkYXRlO1xuICAgICAgICBjb25zdCByb290TmFtZSA9IChfYSA9IGFyZ3MuY29udGV4dCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZGVmYXVsdGVkU2V0dGluZ3Mucm9vdF9uYW1lO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gcGFyc2VBbmRTYW5pdGl6ZVdpdGhDb250ZXh0KGh0bWwsIHJvb3ROYW1lLCBhcmdzLmZvcm1hdCk7XG4gICAgICAgIHVwZGF0ZUNoaWxkcmVuKHNjaGVtYSwgZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHJvb3ROb2RlID0gbmV3IEFzdE5vZGUocm9vdE5hbWUsIDExKTtcbiAgICAgICAgdHJhbnNmZXJDaGlsZHJlbihyb290Tm9kZSwgZWxlbWVudCwgc2NoZW1hLmdldFNwZWNpYWxFbGVtZW50cygpKTtcbiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgY29uc3QgW3doaXRlc3BhY2VQcmUsIHdoaXRlc3BhY2VQb3N0XSA9IHdoaXRlc3BhY2VDbGVhbmVyKHJvb3ROb2RlLCBzY2hlbWEsIGRlZmF1bHRlZFNldHRpbmdzLCBhcmdzKTtcbiAgICAgICAgY29uc3QgaW52YWxpZENoaWxkcmVuID0gW107XG4gICAgICAgIGNvbnN0IGludmFsaWRGaW5kZXIgPSB2YWxpZGF0ZSA/IG5vZGUgPT4gZmluZEludmFsaWRDaGlsZHJlbihub2RlLCBpbnZhbGlkQ2hpbGRyZW4pIDogbm9vcDtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHtcbiAgICAgICAgICBub2Rlczoge30sXG4gICAgICAgICAgYXR0cmlidXRlczoge31cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbWF0Y2hGaW5kZXIgPSBub2RlID0+IG1hdGNoTm9kZSQxKGdldE5vZGVGaWx0ZXJzKCksIGdldEF0dHJpYnV0ZUZpbHRlcnMoKSwgbm9kZSwgbWF0Y2hlcyk7XG4gICAgICAgIHdhbGtUcmVlKHJvb3ROb2RlLCBbXG4gICAgICAgICAgd2hpdGVzcGFjZVByZSxcbiAgICAgICAgICBtYXRjaEZpbmRlclxuICAgICAgICBdLCBbXG4gICAgICAgICAgd2hpdGVzcGFjZVBvc3QsXG4gICAgICAgICAgaW52YWxpZEZpbmRlclxuICAgICAgICBdKTtcbiAgICAgICAgaW52YWxpZENoaWxkcmVuLnJldmVyc2UoKTtcbiAgICAgICAgaWYgKHZhbGlkYXRlICYmIGludmFsaWRDaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKGFyZ3MuY29udGV4dCkge1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBwYXNzOiB0b3BMZXZlbENoaWxkcmVuLFxuICAgICAgICAgICAgICBmYWlsOiBvdGhlckNoaWxkcmVuXG4gICAgICAgICAgICB9ID0gcGFydGl0aW9uJDIoaW52YWxpZENoaWxkcmVuLCBjaGlsZCA9PiBjaGlsZC5wYXJlbnQgPT09IHJvb3ROb2RlKTtcbiAgICAgICAgICAgIGNsZWFuSW52YWxpZE5vZGVzKG90aGVyQ2hpbGRyZW4sIHNjaGVtYSwgcm9vdE5vZGUsIG1hdGNoRmluZGVyKTtcbiAgICAgICAgICAgIGFyZ3MuaW52YWxpZCA9IHRvcExldmVsQ2hpbGRyZW4ubGVuZ3RoID4gMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xlYW5JbnZhbGlkTm9kZXMoaW52YWxpZENoaWxkcmVuLCBzY2hlbWEsIHJvb3ROb2RlLCBtYXRjaEZpbmRlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvb3RCbG9ja05hbWUgPSBnZXRSb290QmxvY2tOYW1lKGRlZmF1bHRlZFNldHRpbmdzLCBhcmdzKTtcbiAgICAgICAgaWYgKHJvb3RCbG9ja05hbWUgJiYgKHJvb3ROb2RlLm5hbWUgPT09ICdib2R5JyB8fCBhcmdzLmlzUm9vdENvbnRlbnQpKSB7XG4gICAgICAgICAgYWRkUm9vdEJsb2Nrcyhyb290Tm9kZSwgcm9vdEJsb2NrTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhcmdzLmludmFsaWQpIHtcbiAgICAgICAgICBydW5GaWx0ZXJzKG1hdGNoZXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb290Tm9kZTtcbiAgICAgIH07XG4gICAgICBjb25zdCBleHBvcnRzID0ge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGFkZEF0dHJpYnV0ZUZpbHRlcixcbiAgICAgICAgZ2V0QXR0cmlidXRlRmlsdGVycyxcbiAgICAgICAgcmVtb3ZlQXR0cmlidXRlRmlsdGVyLFxuICAgICAgICBhZGROb2RlRmlsdGVyLFxuICAgICAgICBnZXROb2RlRmlsdGVycyxcbiAgICAgICAgcmVtb3ZlTm9kZUZpbHRlcixcbiAgICAgICAgcGFyc2VcbiAgICAgIH07XG4gICAgICByZWdpc3RlciQ0KGV4cG9ydHMsIGRlZmF1bHRlZFNldHRpbmdzKTtcbiAgICAgIHJlZ2lzdGVyJDUoZXhwb3J0cywgZGVmYXVsdGVkU2V0dGluZ3MsIHNjaGVtYSk7XG4gICAgICByZXR1cm4gZXhwb3J0cztcbiAgICB9O1xuXG4gICAgY29uc3Qgc2VyaWFsaXplQ29udGVudCA9IGNvbnRlbnQgPT4gaXNUcmVlTm9kZShjb250ZW50KSA/IEh0bWxTZXJpYWxpemVyKHsgdmFsaWRhdGU6IGZhbHNlIH0pLnNlcmlhbGl6ZShjb250ZW50KSA6IGNvbnRlbnQ7XG4gICAgY29uc3Qgd2l0aFNlcmlhbGl6ZWRDb250ZW50ID0gKGNvbnRlbnQsIGZpcmVFdmVudCwgc2FuaXRpemUpID0+IHtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRDb250ZW50ID0gc2VyaWFsaXplQ29udGVudChjb250ZW50KTtcbiAgICAgIGNvbnN0IGV2ZW50QXJncyA9IGZpcmVFdmVudChzZXJpYWxpemVkQ29udGVudCk7XG4gICAgICBpZiAoZXZlbnRBcmdzLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybiBldmVudEFyZ3M7XG4gICAgICB9IGVsc2UgaWYgKGlzVHJlZU5vZGUoY29udGVudCkpIHtcbiAgICAgICAgaWYgKGV2ZW50QXJncy5jb250ZW50ICE9PSBzZXJpYWxpemVkQ29udGVudCkge1xuICAgICAgICAgIGNvbnN0IHJvb3ROb2RlID0gRG9tUGFyc2VyKHtcbiAgICAgICAgICAgIHZhbGlkYXRlOiBmYWxzZSxcbiAgICAgICAgICAgIGZvcmNlZF9yb290X2Jsb2NrOiBmYWxzZSxcbiAgICAgICAgICAgIHNhbml0aXplXG4gICAgICAgICAgfSkucGFyc2UoZXZlbnRBcmdzLmNvbnRlbnQsIHsgY29udGV4dDogY29udGVudC5uYW1lIH0pO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5ldmVudEFyZ3MsXG4gICAgICAgICAgICBjb250ZW50OiByb290Tm9kZVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmV2ZW50QXJncyxcbiAgICAgICAgICAgIGNvbnRlbnRcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZXZlbnRBcmdzO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcHJlUHJvY2Vzc0dldENvbnRlbnQgPSAoZWRpdG9yLCBhcmdzKSA9PiB7XG4gICAgICBpZiAoYXJncy5ub19ldmVudHMpIHtcbiAgICAgICAgcmV0dXJuIFJlc3VsdC52YWx1ZShhcmdzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGV2ZW50QXJncyA9IGZpcmVCZWZvcmVHZXRDb250ZW50KGVkaXRvciwgYXJncyk7XG4gICAgICAgIGlmIChldmVudEFyZ3MuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKGZpcmVHZXRDb250ZW50KGVkaXRvciwge1xuICAgICAgICAgICAgY29udGVudDogJycsXG4gICAgICAgICAgICAuLi5ldmVudEFyZ3NcbiAgICAgICAgICB9KS5jb250ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUmVzdWx0LnZhbHVlKGV2ZW50QXJncyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHBvc3RQcm9jZXNzR2V0Q29udGVudCA9IChlZGl0b3IsIGNvbnRlbnQsIGFyZ3MpID0+IHtcbiAgICAgIGlmIChhcmdzLm5vX2V2ZW50cykge1xuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NlZEV2ZW50QXJncyA9IHdpdGhTZXJpYWxpemVkQ29udGVudChjb250ZW50LCBjb250ZW50ID0+IGZpcmVHZXRDb250ZW50KGVkaXRvciwge1xuICAgICAgICAgIC4uLmFyZ3MsXG4gICAgICAgICAgY29udGVudFxuICAgICAgICB9KSwgc2hvdWxkU2FuaXRpemVYc3MoZWRpdG9yKSk7XG4gICAgICAgIHJldHVybiBwcm9jZXNzZWRFdmVudEFyZ3MuY29udGVudDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHByZVByb2Nlc3NTZXRDb250ZW50ID0gKGVkaXRvciwgYXJncykgPT4ge1xuICAgICAgaWYgKGFyZ3Mubm9fZXZlbnRzKSB7XG4gICAgICAgIHJldHVybiBSZXN1bHQudmFsdWUoYXJncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwcm9jZXNzZWRFdmVudEFyZ3MgPSB3aXRoU2VyaWFsaXplZENvbnRlbnQoYXJncy5jb250ZW50LCBjb250ZW50ID0+IGZpcmVCZWZvcmVTZXRDb250ZW50KGVkaXRvciwge1xuICAgICAgICAgIC4uLmFyZ3MsXG4gICAgICAgICAgY29udGVudFxuICAgICAgICB9KSwgc2hvdWxkU2FuaXRpemVYc3MoZWRpdG9yKSk7XG4gICAgICAgIGlmIChwcm9jZXNzZWRFdmVudEFyZ3MuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICBmaXJlU2V0Q29udGVudChlZGl0b3IsIHByb2Nlc3NlZEV2ZW50QXJncyk7XG4gICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvcih1bmRlZmluZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBSZXN1bHQudmFsdWUocHJvY2Vzc2VkRXZlbnRBcmdzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcG9zdFByb2Nlc3NTZXRDb250ZW50ID0gKGVkaXRvciwgY29udGVudCwgYXJncykgPT4ge1xuICAgICAgaWYgKCFhcmdzLm5vX2V2ZW50cykge1xuICAgICAgICBmaXJlU2V0Q29udGVudChlZGl0b3IsIHtcbiAgICAgICAgICAuLi5hcmdzLFxuICAgICAgICAgIGNvbnRlbnRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHRhYmxlTW9kZWwgPSAoZWxlbWVudCwgd2lkdGgsIHJvd3MpID0+ICh7XG4gICAgICBlbGVtZW50LFxuICAgICAgd2lkdGgsXG4gICAgICByb3dzXG4gICAgfSk7XG4gICAgY29uc3QgdGFibGVSb3cgPSAoZWxlbWVudCwgY2VsbHMpID0+ICh7XG4gICAgICBlbGVtZW50LFxuICAgICAgY2VsbHNcbiAgICB9KTtcbiAgICBjb25zdCBjZWxsUG9zaXRpb24gPSAoeCwgeSkgPT4gKHtcbiAgICAgIHgsXG4gICAgICB5XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0U3BhbiA9ICh0ZCwga2V5KSA9PiB7XG4gICAgICByZXR1cm4gZ2V0T3B0KHRkLCBrZXkpLmJpbmQodG9JbnQpLmdldE9yKDEpO1xuICAgIH07XG4gICAgY29uc3QgZmlsbG91dCA9ICh0YWJsZSwgeCwgeSwgdHIsIHRkKSA9PiB7XG4gICAgICBjb25zdCByb3dzcGFuID0gZ2V0U3Bhbih0ZCwgJ3Jvd3NwYW4nKTtcbiAgICAgIGNvbnN0IGNvbHNwYW4gPSBnZXRTcGFuKHRkLCAnY29sc3BhbicpO1xuICAgICAgY29uc3Qgcm93cyA9IHRhYmxlLnJvd3M7XG4gICAgICBmb3IgKGxldCB5MiA9IHk7IHkyIDwgeSArIHJvd3NwYW47IHkyKyspIHtcbiAgICAgICAgaWYgKCFyb3dzW3kyXSkge1xuICAgICAgICAgIHJvd3NbeTJdID0gdGFibGVSb3coZGVlcCQxKHRyKSwgW10pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IHgyID0geDsgeDIgPCB4ICsgY29sc3BhbjsgeDIrKykge1xuICAgICAgICAgIGNvbnN0IGNlbGxzID0gcm93c1t5Ml0uY2VsbHM7XG4gICAgICAgICAgY2VsbHNbeDJdID0geTIgPT09IHkgJiYgeDIgPT09IHggPyB0ZCA6IHNoYWxsb3ckMSh0ZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNlbGxFeGlzdHMgPSAodGFibGUsIHgsIHkpID0+IHtcbiAgICAgIGNvbnN0IHJvd3MgPSB0YWJsZS5yb3dzO1xuICAgICAgY29uc3QgY2VsbHMgPSByb3dzW3ldID8gcm93c1t5XS5jZWxscyA6IFtdO1xuICAgICAgcmV0dXJuICEhY2VsbHNbeF07XG4gICAgfTtcbiAgICBjb25zdCBza2lwQ2VsbHNYID0gKHRhYmxlLCB4LCB5KSA9PiB7XG4gICAgICB3aGlsZSAoY2VsbEV4aXN0cyh0YWJsZSwgeCwgeSkpIHtcbiAgICAgICAgeCsrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgICBjb25zdCBnZXRXaWR0aCA9IHJvd3MgPT4ge1xuICAgICAgcmV0dXJuIGZvbGRsKHJvd3MsIChhY2MsIHJvdykgPT4ge1xuICAgICAgICByZXR1cm4gcm93LmNlbGxzLmxlbmd0aCA+IGFjYyA/IHJvdy5jZWxscy5sZW5ndGggOiBhY2M7XG4gICAgICB9LCAwKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRFbGVtZW50UG9zID0gKHRhYmxlLCBlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCByb3dzID0gdGFibGUucm93cztcbiAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgcm93cy5sZW5ndGg7IHkrKykge1xuICAgICAgICBjb25zdCBjZWxscyA9IHJvd3NbeV0uY2VsbHM7XG4gICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgY2VsbHMubGVuZ3RoOyB4KyspIHtcbiAgICAgICAgICBpZiAoZXEoY2VsbHNbeF0sIGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShjZWxsUG9zaXRpb24oeCwgeSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGV4dHJhY3RSb3dzID0gKHRhYmxlLCBzeCwgc3ksIGV4LCBleSkgPT4ge1xuICAgICAgY29uc3QgbmV3Um93cyA9IFtdO1xuICAgICAgY29uc3Qgcm93cyA9IHRhYmxlLnJvd3M7XG4gICAgICBmb3IgKGxldCB5ID0gc3k7IHkgPD0gZXk7IHkrKykge1xuICAgICAgICBjb25zdCBjZWxscyA9IHJvd3NbeV0uY2VsbHM7XG4gICAgICAgIGNvbnN0IHNsaWNlID0gc3ggPCBleCA/IGNlbGxzLnNsaWNlKHN4LCBleCArIDEpIDogY2VsbHMuc2xpY2UoZXgsIHN4ICsgMSk7XG4gICAgICAgIG5ld1Jvd3MucHVzaCh0YWJsZVJvdyhyb3dzW3ldLmVsZW1lbnQsIHNsaWNlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3Um93cztcbiAgICB9O1xuICAgIGNvbnN0IHN1YlRhYmxlID0gKHRhYmxlLCBzdGFydFBvcywgZW5kUG9zKSA9PiB7XG4gICAgICBjb25zdCBzeCA9IHN0YXJ0UG9zLngsIHN5ID0gc3RhcnRQb3MueTtcbiAgICAgIGNvbnN0IGV4ID0gZW5kUG9zLngsIGV5ID0gZW5kUG9zLnk7XG4gICAgICBjb25zdCBuZXdSb3dzID0gc3kgPCBleSA/IGV4dHJhY3RSb3dzKHRhYmxlLCBzeCwgc3ksIGV4LCBleSkgOiBleHRyYWN0Um93cyh0YWJsZSwgc3gsIGV5LCBleCwgc3kpO1xuICAgICAgcmV0dXJuIHRhYmxlTW9kZWwodGFibGUuZWxlbWVudCwgZ2V0V2lkdGgobmV3Um93cyksIG5ld1Jvd3MpO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlRG9tVGFibGUgPSAodGFibGUsIHJvd3MpID0+IHtcbiAgICAgIGNvbnN0IHRhYmxlRWxlbWVudCA9IHNoYWxsb3ckMSh0YWJsZS5lbGVtZW50KTtcbiAgICAgIGNvbnN0IHRhYmxlQm9keSA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCd0Ym9keScpO1xuICAgICAgYXBwZW5kKHRhYmxlQm9keSwgcm93cyk7XG4gICAgICBhcHBlbmQkMSh0YWJsZUVsZW1lbnQsIHRhYmxlQm9keSk7XG4gICAgICByZXR1cm4gdGFibGVFbGVtZW50O1xuICAgIH07XG4gICAgY29uc3QgbW9kZWxSb3dzVG9Eb21Sb3dzID0gdGFibGUgPT4ge1xuICAgICAgcmV0dXJuIG1hcCQzKHRhYmxlLnJvd3MsIHJvdyA9PiB7XG4gICAgICAgIGNvbnN0IGNlbGxzID0gbWFwJDMocm93LmNlbGxzLCBjZWxsID0+IHtcbiAgICAgICAgICBjb25zdCB0ZCA9IGRlZXAkMShjZWxsKTtcbiAgICAgICAgICByZW1vdmUkYSh0ZCwgJ2NvbHNwYW4nKTtcbiAgICAgICAgICByZW1vdmUkYSh0ZCwgJ3Jvd3NwYW4nKTtcbiAgICAgICAgICByZXR1cm4gdGQ7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0ciA9IHNoYWxsb3ckMShyb3cuZWxlbWVudCk7XG4gICAgICAgIGFwcGVuZCh0ciwgY2VsbHMpO1xuICAgICAgICByZXR1cm4gdHI7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21Eb20gPSB0YWJsZUVsbSA9PiB7XG4gICAgICBjb25zdCB0YWJsZSA9IHRhYmxlTW9kZWwoc2hhbGxvdyQxKHRhYmxlRWxtKSwgMCwgW10pO1xuICAgICAgZWFjaCRlKGRlc2NlbmRhbnRzKHRhYmxlRWxtLCAndHInKSwgKHRyLCB5KSA9PiB7XG4gICAgICAgIGVhY2gkZShkZXNjZW5kYW50cyh0ciwgJ3RkLHRoJyksICh0ZCwgeCkgPT4ge1xuICAgICAgICAgIGZpbGxvdXQodGFibGUsIHNraXBDZWxsc1godGFibGUsIHgsIHkpLCB5LCB0ciwgdGQpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRhYmxlTW9kZWwodGFibGUuZWxlbWVudCwgZ2V0V2lkdGgodGFibGUucm93cyksIHRhYmxlLnJvd3MpO1xuICAgIH07XG4gICAgY29uc3QgdG9Eb20gPSB0YWJsZSA9PiB7XG4gICAgICByZXR1cm4gY3JlYXRlRG9tVGFibGUodGFibGUsIG1vZGVsUm93c1RvRG9tUm93cyh0YWJsZSkpO1xuICAgIH07XG4gICAgY29uc3Qgc3Vic2VjdGlvbiA9ICh0YWJsZSwgc3RhcnRFbGVtZW50LCBlbmRFbGVtZW50KSA9PiB7XG4gICAgICByZXR1cm4gZmluZEVsZW1lbnRQb3ModGFibGUsIHN0YXJ0RWxlbWVudCkuYmluZChzdGFydFBvcyA9PiB7XG4gICAgICAgIHJldHVybiBmaW5kRWxlbWVudFBvcyh0YWJsZSwgZW5kRWxlbWVudCkubWFwKGVuZFBvcyA9PiB7XG4gICAgICAgICAgcmV0dXJuIHN1YlRhYmxlKHRhYmxlLCBzdGFydFBvcywgZW5kUG9zKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmluZFBhcmVudExpc3RDb250YWluZXIgPSBwYXJlbnRzID0+IGZpbmQkMihwYXJlbnRzLCBlbG0gPT4gbmFtZShlbG0pID09PSAndWwnIHx8IG5hbWUoZWxtKSA9PT0gJ29sJyk7XG4gICAgY29uc3QgZ2V0RnVsbHlTZWxlY3RlZExpc3RXcmFwcGVycyA9IChwYXJlbnRzLCBybmcpID0+IGZpbmQkMihwYXJlbnRzLCBlbG0gPT4gbmFtZShlbG0pID09PSAnbGknICYmIGhhc0FsbENvbnRlbnRzU2VsZWN0ZWQoZWxtLCBybmcpKS5mb2xkKGNvbnN0YW50KFtdKSwgX2xpID0+IGZpbmRQYXJlbnRMaXN0Q29udGFpbmVyKHBhcmVudHMpLm1hcChsaXN0Q29udCA9PiB7XG4gICAgICBjb25zdCBsaXN0RWxtID0gU3VnYXJFbGVtZW50LmZyb21UYWcobmFtZShsaXN0Q29udCkpO1xuICAgICAgY29uc3QgbGlzdFN0eWxlcyA9IGZpbHRlciQ0KGdldEFsbFJhdyhsaXN0Q29udCksIChfc3R5bGUsIG5hbWUpID0+IHN0YXJ0c1dpdGgobmFtZSwgJ2xpc3Qtc3R5bGUnKSk7XG4gICAgICBzZXRBbGwobGlzdEVsbSwgbGlzdFN0eWxlcyk7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBTdWdhckVsZW1lbnQuZnJvbVRhZygnbGknKSxcbiAgICAgICAgbGlzdEVsbVxuICAgICAgXTtcbiAgICB9KS5nZXRPcihbXSkpO1xuICAgIGNvbnN0IHdyYXAgPSAoaW5uZXJFbG0sIGVsbXMpID0+IHtcbiAgICAgIGNvbnN0IHdyYXBwZWQgPSBmb2xkbChlbG1zLCAoYWNjLCBlbG0pID0+IHtcbiAgICAgICAgYXBwZW5kJDEoZWxtLCBhY2MpO1xuICAgICAgICByZXR1cm4gZWxtO1xuICAgICAgfSwgaW5uZXJFbG0pO1xuICAgICAgcmV0dXJuIGVsbXMubGVuZ3RoID4gMCA/IGZyb21FbGVtZW50cyhbd3JhcHBlZF0pIDogd3JhcHBlZDtcbiAgICB9O1xuICAgIGNvbnN0IGRpcmVjdExpc3RXcmFwcGVycyA9IGNvbW1vbkFuY2hvckNvbnRhaW5lciA9PiB7XG4gICAgICBpZiAoaXNMaXN0SXRlbSQxKGNvbW1vbkFuY2hvckNvbnRhaW5lcikpIHtcbiAgICAgICAgcmV0dXJuIHBhcmVudChjb21tb25BbmNob3JDb250YWluZXIpLmZpbHRlcihpc0xpc3QpLmZvbGQoY29uc3RhbnQoW10pLCBsaXN0RWxtID0+IFtcbiAgICAgICAgICBjb21tb25BbmNob3JDb250YWluZXIsXG4gICAgICAgICAgbGlzdEVsbVxuICAgICAgICBdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpc0xpc3QoY29tbW9uQW5jaG9yQ29udGFpbmVyKSA/IFtjb21tb25BbmNob3JDb250YWluZXJdIDogW107XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRXcmFwRWxlbWVudHMgPSAocm9vdE5vZGUsIHJuZykgPT4ge1xuICAgICAgY29uc3QgY29tbW9uQW5jaG9yQ29udGFpbmVyID0gU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKTtcbiAgICAgIGNvbnN0IHBhcmVudHMgPSBwYXJlbnRzQW5kU2VsZihjb21tb25BbmNob3JDb250YWluZXIsIHJvb3ROb2RlKTtcbiAgICAgIGNvbnN0IHdyYXBFbGVtZW50cyA9IGZpbHRlciQ1KHBhcmVudHMsIGlzV3JhcEVsZW1lbnQpO1xuICAgICAgY29uc3QgbGlzdFdyYXBwZXJzID0gZ2V0RnVsbHlTZWxlY3RlZExpc3RXcmFwcGVycyhwYXJlbnRzLCBybmcpO1xuICAgICAgY29uc3QgYWxsV3JhcHBlcnMgPSB3cmFwRWxlbWVudHMuY29uY2F0KGxpc3RXcmFwcGVycy5sZW5ndGggPyBsaXN0V3JhcHBlcnMgOiBkaXJlY3RMaXN0V3JhcHBlcnMoY29tbW9uQW5jaG9yQ29udGFpbmVyKSk7XG4gICAgICByZXR1cm4gbWFwJDMoYWxsV3JhcHBlcnMsIHNoYWxsb3ckMSk7XG4gICAgfTtcbiAgICBjb25zdCBlbXB0eUZyYWdtZW50ID0gKCkgPT4gZnJvbUVsZW1lbnRzKFtdKTtcbiAgICBjb25zdCBnZXRGcmFnbWVudEZyb21SYW5nZSA9IChyb290Tm9kZSwgcm5nKSA9PiB3cmFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJuZy5jbG9uZUNvbnRlbnRzKCkpLCBnZXRXcmFwRWxlbWVudHMocm9vdE5vZGUsIHJuZykpO1xuICAgIGNvbnN0IGdldFBhcmVudFRhYmxlID0gKHJvb3RFbG0sIGNlbGwpID0+IGFuY2VzdG9yJDMoY2VsbCwgJ3RhYmxlJywgY3VycnkoZXEsIHJvb3RFbG0pKTtcbiAgICBjb25zdCBnZXRUYWJsZUZyYWdtZW50ID0gKHJvb3ROb2RlLCBzZWxlY3RlZFRhYmxlQ2VsbHMpID0+IGdldFBhcmVudFRhYmxlKHJvb3ROb2RlLCBzZWxlY3RlZFRhYmxlQ2VsbHNbMF0pLmJpbmQodGFibGVFbG0gPT4ge1xuICAgICAgY29uc3QgZmlyc3RDZWxsID0gc2VsZWN0ZWRUYWJsZUNlbGxzWzBdO1xuICAgICAgY29uc3QgbGFzdENlbGwgPSBzZWxlY3RlZFRhYmxlQ2VsbHNbc2VsZWN0ZWRUYWJsZUNlbGxzLmxlbmd0aCAtIDFdO1xuICAgICAgY29uc3QgZnVsbFRhYmxlTW9kZWwgPSBmcm9tRG9tKHRhYmxlRWxtKTtcbiAgICAgIHJldHVybiBzdWJzZWN0aW9uKGZ1bGxUYWJsZU1vZGVsLCBmaXJzdENlbGwsIGxhc3RDZWxsKS5tYXAoc2VjdGlvbmVkVGFibGVNb2RlbCA9PiBmcm9tRWxlbWVudHMoW3RvRG9tKHNlY3Rpb25lZFRhYmxlTW9kZWwpXSkpO1xuICAgIH0pLmdldE9yVGh1bmsoZW1wdHlGcmFnbWVudCk7XG4gICAgY29uc3QgZ2V0U2VsZWN0aW9uRnJhZ21lbnQgPSAocm9vdE5vZGUsIHJhbmdlcykgPT4gcmFuZ2VzLmxlbmd0aCA+IDAgJiYgcmFuZ2VzWzBdLmNvbGxhcHNlZCA/IGVtcHR5RnJhZ21lbnQoKSA6IGdldEZyYWdtZW50RnJvbVJhbmdlKHJvb3ROb2RlLCByYW5nZXNbMF0pO1xuICAgIGNvbnN0IHJlYWQkMyA9IChyb290Tm9kZSwgcmFuZ2VzKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZENlbGxzID0gZ2V0Q2VsbHNGcm9tRWxlbWVudE9yUmFuZ2VzKHJhbmdlcywgcm9vdE5vZGUpO1xuICAgICAgcmV0dXJuIHNlbGVjdGVkQ2VsbHMubGVuZ3RoID4gMCA/IGdldFRhYmxlRnJhZ21lbnQocm9vdE5vZGUsIHNlbGVjdGVkQ2VsbHMpIDogZ2V0U2VsZWN0aW9uRnJhZ21lbnQocm9vdE5vZGUsIHJhbmdlcyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzQ29sbGFwc2libGVXaGl0ZXNwYWNlID0gKHRleHQsIGluZGV4KSA9PiBpbmRleCA+PSAwICYmIGluZGV4IDwgdGV4dC5sZW5ndGggJiYgaXNXaGl0ZVNwYWNlKHRleHQuY2hhckF0KGluZGV4KSk7XG4gICAgY29uc3QgZ2V0SW5uZXJUZXh0ID0gYmluID0+IHtcbiAgICAgIHJldHVybiB0cmltJDEoYmluLmlubmVyVGV4dCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRDb250ZXh0Tm9kZU5hbWUgPSBwYXJlbnRCbG9ja09wdCA9PiBwYXJlbnRCbG9ja09wdC5tYXAoYmxvY2sgPT4gYmxvY2subm9kZU5hbWUpLmdldE9yKCdkaXYnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGdldFRleHRDb250ZW50ID0gZWRpdG9yID0+IE9wdGlvbmFsLmZyb20oZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSkubWFwKHJuZyA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBwYXJlbnRCbG9ja09wdCA9IE9wdGlvbmFsLmZyb20oZWRpdG9yLmRvbS5nZXRQYXJlbnQocm5nLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLCBlZGl0b3IuZG9tLmlzQmxvY2spKTtcbiAgICAgIGNvbnN0IGJvZHkgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgY29uc3QgY29udGV4dE5vZGVOYW1lID0gZ2V0Q29udGV4dE5vZGVOYW1lKHBhcmVudEJsb2NrT3B0KTtcbiAgICAgIGNvbnN0IHJhbmdlQ29udGVudENsb25lID0gU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLmNsb25lQ29udGVudHMoKSk7XG4gICAgICBjbGVhbnVwQm9ndXNFbGVtZW50cyhyYW5nZUNvbnRlbnRDbG9uZSk7XG4gICAgICBjbGVhbnVwSW5wdXROYW1lcyhyYW5nZUNvbnRlbnRDbG9uZSk7XG4gICAgICBjb25zdCBiaW4gPSBlZGl0b3IuZG9tLmFkZChib2R5LCBjb250ZXh0Tm9kZU5hbWUsIHtcbiAgICAgICAgJ2RhdGEtbWNlLWJvZ3VzJzogJ2FsbCcsXG4gICAgICAgICdzdHlsZSc6ICdvdmVyZmxvdzogaGlkZGVuOyBvcGFjaXR5OiAwOydcbiAgICAgIH0sIHJhbmdlQ29udGVudENsb25lLmRvbSk7XG4gICAgICBjb25zdCB0ZXh0ID0gZ2V0SW5uZXJUZXh0KGJpbik7XG4gICAgICBjb25zdCBub25SZW5kZXJlZFRleHQgPSB0cmltJDEoKF9hID0gYmluLnRleHRDb250ZW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJyk7XG4gICAgICBlZGl0b3IuZG9tLnJlbW92ZShiaW4pO1xuICAgICAgaWYgKGlzQ29sbGFwc2libGVXaGl0ZXNwYWNlKG5vblJlbmRlcmVkVGV4dCwgMCkgfHwgaXNDb2xsYXBzaWJsZVdoaXRlc3BhY2Uobm9uUmVuZGVyZWRUZXh0LCBub25SZW5kZXJlZFRleHQubGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgY29uc3QgcGFyZW50QmxvY2sgPSBwYXJlbnRCbG9ja09wdC5nZXRPcihib2R5KTtcbiAgICAgICAgY29uc3QgcGFyZW50QmxvY2tUZXh0ID0gZ2V0SW5uZXJUZXh0KHBhcmVudEJsb2NrKTtcbiAgICAgICAgY29uc3QgdGV4dEluZGV4ID0gcGFyZW50QmxvY2tUZXh0LmluZGV4T2YodGV4dCk7XG4gICAgICAgIGlmICh0ZXh0SW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgaGFzUHJvY2VlZGluZ1NwYWNlID0gaXNDb2xsYXBzaWJsZVdoaXRlc3BhY2UocGFyZW50QmxvY2tUZXh0LCB0ZXh0SW5kZXggLSAxKTtcbiAgICAgICAgICBjb25zdCBoYXNUcmFpbGluZ1NwYWNlID0gaXNDb2xsYXBzaWJsZVdoaXRlc3BhY2UocGFyZW50QmxvY2tUZXh0LCB0ZXh0SW5kZXggKyB0ZXh0Lmxlbmd0aCk7XG4gICAgICAgICAgcmV0dXJuIChoYXNQcm9jZWVkaW5nU3BhY2UgPyAnICcgOiAnJykgKyB0ZXh0ICsgKGhhc1RyYWlsaW5nU3BhY2UgPyAnICcgOiAnJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgfVxuICAgIH0pLmdldE9yKCcnKTtcbiAgICBjb25zdCBnZXRTZXJpYWxpemVkQ29udGVudCA9IChlZGl0b3IsIGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCksIHRtcEVsbSA9IGVkaXRvci5kb20uY3JlYXRlKCdib2R5Jyk7XG4gICAgICBjb25zdCBzZWwgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFNlbCgpO1xuICAgICAgY29uc3QgcmFuZ2VzID0gcHJvY2Vzc1JhbmdlcyhlZGl0b3IsIGdldFJhbmdlcyQxKHNlbCkpO1xuICAgICAgY29uc3QgZnJhZ21lbnQgPSBhcmdzLmNvbnRleHR1YWwgPyByZWFkJDMoU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSksIHJhbmdlcykuZG9tIDogcm5nLmNsb25lQ29udGVudHMoKTtcbiAgICAgIGlmIChmcmFnbWVudCkge1xuICAgICAgICB0bXBFbG0uYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVkaXRvci5zZWxlY3Rpb24uc2VyaWFsaXplci5zZXJpYWxpemUodG1wRWxtLCBhcmdzKTtcbiAgICB9O1xuICAgIGNvbnN0IGV4dHJhY3RTZWxlY3RlZENvbnRlbnQgPSAoZWRpdG9yLCBhcmdzKSA9PiB7XG4gICAgICBpZiAoYXJncy5mb3JtYXQgPT09ICd0ZXh0Jykge1xuICAgICAgICByZXR1cm4gZ2V0VGV4dENvbnRlbnQoZWRpdG9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBnZXRTZXJpYWxpemVkQ29udGVudChlZGl0b3IsIGFyZ3MpO1xuICAgICAgICBpZiAoYXJncy5mb3JtYXQgPT09ICd0cmVlJykge1xuICAgICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBlZGl0b3Iuc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkgPyAnJyA6IGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldHVwQXJncyQzID0gKGFyZ3MsIGZvcm1hdCkgPT4gKHtcbiAgICAgIC4uLmFyZ3MsXG4gICAgICBmb3JtYXQsXG4gICAgICBnZXQ6IHRydWUsXG4gICAgICBzZWxlY3Rpb246IHRydWUsXG4gICAgICBnZXRJbm5lcjogdHJ1ZVxuICAgIH0pO1xuICAgIGNvbnN0IGdldFNlbGVjdGVkQ29udGVudEludGVybmFsID0gKGVkaXRvciwgZm9ybWF0LCBhcmdzID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRlZEFyZ3MgPSBzZXR1cEFyZ3MkMyhhcmdzLCBmb3JtYXQpO1xuICAgICAgcmV0dXJuIHByZVByb2Nlc3NHZXRDb250ZW50KGVkaXRvciwgZGVmYXVsdGVkQXJncykuZm9sZChpZGVudGl0eSwgdXBkYXRlZEFyZ3MgPT4ge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZXh0cmFjdFNlbGVjdGVkQ29udGVudChlZGl0b3IsIHVwZGF0ZWRBcmdzKTtcbiAgICAgICAgcmV0dXJuIHBvc3RQcm9jZXNzR2V0Q29udGVudChlZGl0b3IsIGNvbnRlbnQsIHVwZGF0ZWRBcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBLRUVQID0gMCwgSU5TRVJUID0gMSwgREVMRVRFID0gMjtcbiAgICBjb25zdCBkaWZmID0gKGxlZnQsIHJpZ2h0KSA9PiB7XG4gICAgICBjb25zdCBzaXplID0gbGVmdC5sZW5ndGggKyByaWdodC5sZW5ndGggKyAyO1xuICAgICAgY29uc3QgdkRvd24gPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgICBjb25zdCB2VXAgPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgICBjb25zdCBzbmFrZSA9IChzdGFydCwgZW5kLCBkaWFnKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgZW5kLFxuICAgICAgICAgIGRpYWdcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCBidWlsZFNjcmlwdCA9IChzdGFydDEsIGVuZDEsIHN0YXJ0MiwgZW5kMiwgc2NyaXB0KSA9PiB7XG4gICAgICAgIGNvbnN0IG1pZGRsZSA9IGdldE1pZGRsZVNuYWtlKHN0YXJ0MSwgZW5kMSwgc3RhcnQyLCBlbmQyKTtcbiAgICAgICAgaWYgKG1pZGRsZSA9PT0gbnVsbCB8fCBtaWRkbGUuc3RhcnQgPT09IGVuZDEgJiYgbWlkZGxlLmRpYWcgPT09IGVuZDEgLSBlbmQyIHx8IG1pZGRsZS5lbmQgPT09IHN0YXJ0MSAmJiBtaWRkbGUuZGlhZyA9PT0gc3RhcnQxIC0gc3RhcnQyKSB7XG4gICAgICAgICAgbGV0IGkgPSBzdGFydDE7XG4gICAgICAgICAgbGV0IGogPSBzdGFydDI7XG4gICAgICAgICAgd2hpbGUgKGkgPCBlbmQxIHx8IGogPCBlbmQyKSB7XG4gICAgICAgICAgICBpZiAoaSA8IGVuZDEgJiYgaiA8IGVuZDIgJiYgbGVmdFtpXSA9PT0gcmlnaHRbal0pIHtcbiAgICAgICAgICAgICAgc2NyaXB0LnB1c2goW1xuICAgICAgICAgICAgICAgIEtFRVAsXG4gICAgICAgICAgICAgICAgbGVmdFtpXVxuICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgKytpO1xuICAgICAgICAgICAgICArK2o7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoZW5kMSAtIHN0YXJ0MSA+IGVuZDIgLSBzdGFydDIpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHQucHVzaChbXG4gICAgICAgICAgICAgICAgICBERUxFVEUsXG4gICAgICAgICAgICAgICAgICBsZWZ0W2ldXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgKytpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNjcmlwdC5wdXNoKFtcbiAgICAgICAgICAgICAgICAgIElOU0VSVCxcbiAgICAgICAgICAgICAgICAgIHJpZ2h0W2pdXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgKytqO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1aWxkU2NyaXB0KHN0YXJ0MSwgbWlkZGxlLnN0YXJ0LCBzdGFydDIsIG1pZGRsZS5zdGFydCAtIG1pZGRsZS5kaWFnLCBzY3JpcHQpO1xuICAgICAgICAgIGZvciAobGV0IGkyID0gbWlkZGxlLnN0YXJ0OyBpMiA8IG1pZGRsZS5lbmQ7ICsraTIpIHtcbiAgICAgICAgICAgIHNjcmlwdC5wdXNoKFtcbiAgICAgICAgICAgICAgS0VFUCxcbiAgICAgICAgICAgICAgbGVmdFtpMl1cbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBidWlsZFNjcmlwdChtaWRkbGUuZW5kLCBlbmQxLCBtaWRkbGUuZW5kIC0gbWlkZGxlLmRpYWcsIGVuZDIsIHNjcmlwdCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBidWlsZFNuYWtlID0gKHN0YXJ0LCBkaWFnLCBlbmQxLCBlbmQyKSA9PiB7XG4gICAgICAgIGxldCBlbmQgPSBzdGFydDtcbiAgICAgICAgd2hpbGUgKGVuZCAtIGRpYWcgPCBlbmQyICYmIGVuZCA8IGVuZDEgJiYgbGVmdFtlbmRdID09PSByaWdodFtlbmQgLSBkaWFnXSkge1xuICAgICAgICAgICsrZW5kO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzbmFrZShzdGFydCwgZW5kLCBkaWFnKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRNaWRkbGVTbmFrZSA9IChzdGFydDEsIGVuZDEsIHN0YXJ0MiwgZW5kMikgPT4ge1xuICAgICAgICBjb25zdCBtID0gZW5kMSAtIHN0YXJ0MTtcbiAgICAgICAgY29uc3QgbiA9IGVuZDIgLSBzdGFydDI7XG4gICAgICAgIGlmIChtID09PSAwIHx8IG4gPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWx0YSA9IG0gLSBuO1xuICAgICAgICBjb25zdCBzdW0gPSBuICsgbTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gKHN1bSAlIDIgPT09IDAgPyBzdW0gOiBzdW0gKyAxKSAvIDI7XG4gICAgICAgIHZEb3duWzEgKyBvZmZzZXRdID0gc3RhcnQxO1xuICAgICAgICB2VXBbMSArIG9mZnNldF0gPSBlbmQxICsgMTtcbiAgICAgICAgbGV0IGQsIGssIGksIHgsIHk7XG4gICAgICAgIGZvciAoZCA9IDA7IGQgPD0gb2Zmc2V0OyArK2QpIHtcbiAgICAgICAgICBmb3IgKGsgPSAtZDsgayA8PSBkOyBrICs9IDIpIHtcbiAgICAgICAgICAgIGkgPSBrICsgb2Zmc2V0O1xuICAgICAgICAgICAgaWYgKGsgPT09IC1kIHx8IGsgIT09IGQgJiYgdkRvd25baSAtIDFdIDwgdkRvd25baSArIDFdKSB7XG4gICAgICAgICAgICAgIHZEb3duW2ldID0gdkRvd25baSArIDFdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdkRvd25baV0gPSB2RG93bltpIC0gMV0gKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeCA9IHZEb3duW2ldO1xuICAgICAgICAgICAgeSA9IHggLSBzdGFydDEgKyBzdGFydDIgLSBrO1xuICAgICAgICAgICAgd2hpbGUgKHggPCBlbmQxICYmIHkgPCBlbmQyICYmIGxlZnRbeF0gPT09IHJpZ2h0W3ldKSB7XG4gICAgICAgICAgICAgIHZEb3duW2ldID0gKyt4O1xuICAgICAgICAgICAgICArK3k7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVsdGEgJSAyICE9PSAwICYmIGRlbHRhIC0gZCA8PSBrICYmIGsgPD0gZGVsdGEgKyBkKSB7XG4gICAgICAgICAgICAgIGlmICh2VXBbaSAtIGRlbHRhXSA8PSB2RG93bltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBidWlsZFNuYWtlKHZVcFtpIC0gZGVsdGFdLCBrICsgc3RhcnQxIC0gc3RhcnQyLCBlbmQxLCBlbmQyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGsgPSBkZWx0YSAtIGQ7IGsgPD0gZGVsdGEgKyBkOyBrICs9IDIpIHtcbiAgICAgICAgICAgIGkgPSBrICsgb2Zmc2V0IC0gZGVsdGE7XG4gICAgICAgICAgICBpZiAoayA9PT0gZGVsdGEgLSBkIHx8IGsgIT09IGRlbHRhICsgZCAmJiB2VXBbaSArIDFdIDw9IHZVcFtpIC0gMV0pIHtcbiAgICAgICAgICAgICAgdlVwW2ldID0gdlVwW2kgKyAxXSAtIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2VXBbaV0gPSB2VXBbaSAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeCA9IHZVcFtpXSAtIDE7XG4gICAgICAgICAgICB5ID0geCAtIHN0YXJ0MSArIHN0YXJ0MiAtIGs7XG4gICAgICAgICAgICB3aGlsZSAoeCA+PSBzdGFydDEgJiYgeSA+PSBzdGFydDIgJiYgbGVmdFt4XSA9PT0gcmlnaHRbeV0pIHtcbiAgICAgICAgICAgICAgdlVwW2ldID0geC0tO1xuICAgICAgICAgICAgICB5LS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVsdGEgJSAyID09PSAwICYmIC1kIDw9IGsgJiYgayA8PSBkKSB7XG4gICAgICAgICAgICAgIGlmICh2VXBbaV0gPD0gdkRvd25baSArIGRlbHRhXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBidWlsZFNuYWtlKHZVcFtpXSwgayArIHN0YXJ0MSAtIHN0YXJ0MiwgZW5kMSwgZW5kMik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2NyaXB0ID0gW107XG4gICAgICBidWlsZFNjcmlwdCgwLCBsZWZ0Lmxlbmd0aCwgMCwgcmlnaHQubGVuZ3RoLCBzY3JpcHQpO1xuICAgICAgcmV0dXJuIHNjcmlwdDtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0T3V0ZXJIdG1sID0gZWxtID0+IHtcbiAgICAgIGlmIChpc0VsZW1lbnQkNihlbG0pKSB7XG4gICAgICAgIHJldHVybiBlbG0ub3V0ZXJIVE1MO1xuICAgICAgfSBlbHNlIGlmIChpc1RleHQkYShlbG0pKSB7XG4gICAgICAgIHJldHVybiBFbnRpdGllcy5lbmNvZGVSYXcoZWxtLmRhdGEsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNDb21tZW50KGVsbSkpIHtcbiAgICAgICAgcmV0dXJuICc8IS0tJyArIGVsbS5kYXRhICsgJy0tPic7XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVGcmFnbWVudCA9IGh0bWwgPT4ge1xuICAgICAgbGV0IG5vZGU7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGNvbnN0IGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICBpZiAoaHRtbCkge1xuICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChub2RlID0gY29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmcmFnO1xuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0QXQgPSAoZWxtLCBodG1sLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudChodG1sKTtcbiAgICAgIGlmIChlbG0uaGFzQ2hpbGROb2RlcygpICYmIGluZGV4IDwgZWxtLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGVsbS5jaGlsZE5vZGVzW2luZGV4XTtcbiAgICAgICAgZWxtLmluc2VydEJlZm9yZShmcmFnbWVudCwgdGFyZ2V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsbS5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVBdCA9IChlbG0sIGluZGV4KSA9PiB7XG4gICAgICBpZiAoZWxtLmhhc0NoaWxkTm9kZXMoKSAmJiBpbmRleCA8IGVsbS5jaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBlbG0uY2hpbGROb2Rlc1tpbmRleF07XG4gICAgICAgIGVsbS5yZW1vdmVDaGlsZCh0YXJnZXQpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYXBwbHlEaWZmID0gKGRpZmYsIGVsbSkgPT4ge1xuICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgIGVhY2gkZShkaWZmLCBhY3Rpb24gPT4ge1xuICAgICAgICBpZiAoYWN0aW9uWzBdID09PSBLRUVQKSB7XG4gICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfSBlbHNlIGlmIChhY3Rpb25bMF0gPT09IElOU0VSVCkge1xuICAgICAgICAgIGluc2VydEF0KGVsbSwgYWN0aW9uWzFdLCBpbmRleCk7XG4gICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfSBlbHNlIGlmIChhY3Rpb25bMF0gPT09IERFTEVURSkge1xuICAgICAgICAgIHJlbW92ZUF0KGVsbSwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlYWQkMiA9IGVsbSA9PiB7XG4gICAgICByZXR1cm4gZmlsdGVyJDUobWFwJDMoZnJvbShlbG0uY2hpbGROb2RlcyksIGdldE91dGVySHRtbCksIGl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS5sZW5ndGggPiAwO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCB3cml0ZSA9IChmcmFnbWVudHMsIGVsbSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudEZyYWdtZW50cyA9IG1hcCQzKGZyb20oZWxtLmNoaWxkTm9kZXMpLCBnZXRPdXRlckh0bWwpO1xuICAgICAgYXBwbHlEaWZmKGRpZmYoY3VycmVudEZyYWdtZW50cywgZnJhZ21lbnRzKSwgZWxtKTtcbiAgICAgIHJldHVybiBlbG07XG4gICAgfTtcblxuICAgIGNvbnN0IGxhenlUZW1wRG9jdW1lbnQgPSBjYWNoZWQoKCkgPT4gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCd1bmRvJykpO1xuICAgIGNvbnN0IGhhc0lmcmFtZXMgPSBodG1sID0+IHtcbiAgICAgIHJldHVybiBodG1sLmluZGV4T2YoJzwvaWZyYW1lPicpICE9PSAtMTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUZyYWdtZW50ZWRMZXZlbCA9IGZyYWdtZW50cyA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnZnJhZ21lbnRlZCcsXG4gICAgICAgIGZyYWdtZW50cyxcbiAgICAgICAgY29udGVudDogJycsXG4gICAgICAgIGJvb2ttYXJrOiBudWxsLFxuICAgICAgICBiZWZvcmVCb29rbWFyazogbnVsbFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUNvbXBsZXRlTGV2ZWwgPSBjb250ZW50ID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdjb21wbGV0ZScsXG4gICAgICAgIGZyYWdtZW50czogbnVsbCxcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgYm9va21hcms6IG51bGwsXG4gICAgICAgIGJlZm9yZUJvb2ttYXJrOiBudWxsXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlRnJvbUVkaXRvciA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBmcmFnbWVudHMgPSByZWFkJDIoZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBjb25zdCB0cmltbWVkRnJhZ21lbnRzID0gYmluZCQzKGZyYWdtZW50cywgaHRtbCA9PiB7XG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSB0cmltSW50ZXJuYWwoZWRpdG9yLnNlcmlhbGl6ZXIsIGh0bWwpO1xuICAgICAgICByZXR1cm4gdHJpbW1lZC5sZW5ndGggPiAwID8gW3RyaW1tZWRdIDogW107XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB0cmltbWVkRnJhZ21lbnRzLmpvaW4oJycpO1xuICAgICAgcmV0dXJuIGhhc0lmcmFtZXMoY29udGVudCkgPyBjcmVhdGVGcmFnbWVudGVkTGV2ZWwodHJpbW1lZEZyYWdtZW50cykgOiBjcmVhdGVDb21wbGV0ZUxldmVsKGNvbnRlbnQpO1xuICAgIH07XG4gICAgY29uc3QgYXBwbHlUb0VkaXRvciA9IChlZGl0b3IsIGxldmVsLCBiZWZvcmUpID0+IHtcbiAgICAgIGNvbnN0IGJvb2ttYXJrID0gYmVmb3JlID8gbGV2ZWwuYmVmb3JlQm9va21hcmsgOiBsZXZlbC5ib29rbWFyaztcbiAgICAgIGlmIChsZXZlbC50eXBlID09PSAnZnJhZ21lbnRlZCcpIHtcbiAgICAgICAgd3JpdGUobGV2ZWwuZnJhZ21lbnRzLCBlZGl0b3IuZ2V0Qm9keSgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkaXRvci5zZXRDb250ZW50KGxldmVsLmNvbnRlbnQsIHtcbiAgICAgICAgICBmb3JtYXQ6ICdyYXcnLFxuICAgICAgICAgIG5vX3NlbGVjdGlvbjogaXNOb25OdWxsYWJsZShib29rbWFyaykgJiYgaXNQYXRoQm9va21hcmsoYm9va21hcmspID8gIWJvb2ttYXJrLmlzRmFrZUNhcmV0IDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChib29rbWFyaykge1xuICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLm1vdmVUb0Jvb2ttYXJrKGJvb2ttYXJrKTtcbiAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ2V0TGV2ZWxDb250ZW50ID0gbGV2ZWwgPT4ge1xuICAgICAgcmV0dXJuIGxldmVsLnR5cGUgPT09ICdmcmFnbWVudGVkJyA/IGxldmVsLmZyYWdtZW50cy5qb2luKCcnKSA6IGxldmVsLmNvbnRlbnQ7XG4gICAgfTtcbiAgICBjb25zdCBnZXRDbGVhbkxldmVsQ29udGVudCA9IGxldmVsID0+IHtcbiAgICAgIGNvbnN0IGVsbSA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdib2R5JywgbGF6eVRlbXBEb2N1bWVudCgpKTtcbiAgICAgIHNldCQxKGVsbSwgZ2V0TGV2ZWxDb250ZW50KGxldmVsKSk7XG4gICAgICBlYWNoJGUoZGVzY2VuZGFudHMoZWxtLCAnKltkYXRhLW1jZS1ib2d1c10nKSwgdW53cmFwKTtcbiAgICAgIHJldHVybiBnZXQkNihlbG0pO1xuICAgIH07XG4gICAgY29uc3QgaGFzRXF1YWxDb250ZW50ID0gKGxldmVsMSwgbGV2ZWwyKSA9PiBnZXRMZXZlbENvbnRlbnQobGV2ZWwxKSA9PT0gZ2V0TGV2ZWxDb250ZW50KGxldmVsMik7XG4gICAgY29uc3QgaGFzRXF1YWxDbGVhbmVkQ29udGVudCA9IChsZXZlbDEsIGxldmVsMikgPT4gZ2V0Q2xlYW5MZXZlbENvbnRlbnQobGV2ZWwxKSA9PT0gZ2V0Q2xlYW5MZXZlbENvbnRlbnQobGV2ZWwyKTtcbiAgICBjb25zdCBpc0VxJDEgPSAobGV2ZWwxLCBsZXZlbDIpID0+IHtcbiAgICAgIGlmICghbGV2ZWwxIHx8ICFsZXZlbDIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChoYXNFcXVhbENvbnRlbnQobGV2ZWwxLCBsZXZlbDIpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGhhc0VxdWFsQ2xlYW5lZENvbnRlbnQobGV2ZWwxLCBsZXZlbDIpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBpc1VubG9ja2VkID0gbG9ja3MgPT4gbG9ja3MuZ2V0KCkgPT09IDA7XG5cbiAgICBjb25zdCBzZXRUeXBpbmcgPSAodW5kb01hbmFnZXIsIHR5cGluZywgbG9ja3MpID0+IHtcbiAgICAgIGlmIChpc1VubG9ja2VkKGxvY2tzKSkge1xuICAgICAgICB1bmRvTWFuYWdlci50eXBpbmcgPSB0eXBpbmc7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBlbmRUeXBpbmcgPSAodW5kb01hbmFnZXIsIGxvY2tzKSA9PiB7XG4gICAgICBpZiAodW5kb01hbmFnZXIudHlwaW5nKSB7XG4gICAgICAgIHNldFR5cGluZyh1bmRvTWFuYWdlciwgZmFsc2UsIGxvY2tzKTtcbiAgICAgICAgdW5kb01hbmFnZXIuYWRkKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBlbmRUeXBpbmdMZXZlbElnbm9yZUxvY2tzID0gdW5kb01hbmFnZXIgPT4ge1xuICAgICAgaWYgKHVuZG9NYW5hZ2VyLnR5cGluZykge1xuICAgICAgICB1bmRvTWFuYWdlci50eXBpbmcgPSBmYWxzZTtcbiAgICAgICAgdW5kb01hbmFnZXIuYWRkKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGJlZm9yZUNoYW5nZSQxID0gKGVkaXRvciwgbG9ja3MsIGJlZm9yZUJvb2ttYXJrKSA9PiB7XG4gICAgICBpZiAoaXNVbmxvY2tlZChsb2NrcykpIHtcbiAgICAgICAgYmVmb3JlQm9va21hcmsuc2V0KGdldFVuZG9Cb29rbWFyayhlZGl0b3Iuc2VsZWN0aW9uKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhZGRVbmRvTGV2ZWwkMSA9IChlZGl0b3IsIHVuZG9NYW5hZ2VyLCBpbmRleCwgbG9ja3MsIGJlZm9yZUJvb2ttYXJrLCBsZXZlbCwgZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRMZXZlbCA9IGNyZWF0ZUZyb21FZGl0b3IoZWRpdG9yKTtcbiAgICAgIGNvbnN0IG5ld0xldmVsID0gVG9vbHMuZXh0ZW5kKGxldmVsIHx8IHt9LCBjdXJyZW50TGV2ZWwpO1xuICAgICAgaWYgKCFpc1VubG9ja2VkKGxvY2tzKSB8fCBlZGl0b3IucmVtb3ZlZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxhc3RMZXZlbCA9IHVuZG9NYW5hZ2VyLmRhdGFbaW5kZXguZ2V0KCldO1xuICAgICAgaWYgKGVkaXRvci5kaXNwYXRjaCgnQmVmb3JlQWRkVW5kbycsIHtcbiAgICAgICAgICBsZXZlbDogbmV3TGV2ZWwsXG4gICAgICAgICAgbGFzdExldmVsLFxuICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50XG4gICAgICAgIH0pLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKGxhc3RMZXZlbCAmJiBpc0VxJDEobGFzdExldmVsLCBuZXdMZXZlbCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAodW5kb01hbmFnZXIuZGF0YVtpbmRleC5nZXQoKV0pIHtcbiAgICAgICAgYmVmb3JlQm9va21hcmsuZ2V0KCkuZWFjaChibSA9PiB7XG4gICAgICAgICAgdW5kb01hbmFnZXIuZGF0YVtpbmRleC5nZXQoKV0uYmVmb3JlQm9va21hcmsgPSBibTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjdXN0b21VbmRvUmVkb0xldmVscyA9IGdldEN1c3RvbVVuZG9SZWRvTGV2ZWxzKGVkaXRvcik7XG4gICAgICBpZiAoY3VzdG9tVW5kb1JlZG9MZXZlbHMpIHtcbiAgICAgICAgaWYgKHVuZG9NYW5hZ2VyLmRhdGEubGVuZ3RoID4gY3VzdG9tVW5kb1JlZG9MZXZlbHMpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHVuZG9NYW5hZ2VyLmRhdGEubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICB1bmRvTWFuYWdlci5kYXRhW2ldID0gdW5kb01hbmFnZXIuZGF0YVtpICsgMV07XG4gICAgICAgICAgfVxuICAgICAgICAgIHVuZG9NYW5hZ2VyLmRhdGEubGVuZ3RoLS07XG4gICAgICAgICAgaW5kZXguc2V0KHVuZG9NYW5hZ2VyLmRhdGEubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV3TGV2ZWwuYm9va21hcmsgPSBnZXRVbmRvQm9va21hcmsoZWRpdG9yLnNlbGVjdGlvbik7XG4gICAgICBpZiAoaW5kZXguZ2V0KCkgPCB1bmRvTWFuYWdlci5kYXRhLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgdW5kb01hbmFnZXIuZGF0YS5sZW5ndGggPSBpbmRleC5nZXQoKSArIDE7XG4gICAgICB9XG4gICAgICB1bmRvTWFuYWdlci5kYXRhLnB1c2gobmV3TGV2ZWwpO1xuICAgICAgaW5kZXguc2V0KHVuZG9NYW5hZ2VyLmRhdGEubGVuZ3RoIC0gMSk7XG4gICAgICBjb25zdCBhcmdzID0ge1xuICAgICAgICBsZXZlbDogbmV3TGV2ZWwsXG4gICAgICAgIGxhc3RMZXZlbCxcbiAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnRcbiAgICAgIH07XG4gICAgICBpZiAoaW5kZXguZ2V0KCkgPiAwKSB7XG4gICAgICAgIGVkaXRvci5zZXREaXJ0eSh0cnVlKTtcbiAgICAgICAgZWRpdG9yLmRpc3BhdGNoKCdBZGRVbmRvJywgYXJncyk7XG4gICAgICAgIGVkaXRvci5kaXNwYXRjaCgnY2hhbmdlJywgYXJncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ0FkZFVuZG8nLCBhcmdzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdMZXZlbDtcbiAgICB9O1xuICAgIGNvbnN0IGNsZWFyJDEgPSAoZWRpdG9yLCB1bmRvTWFuYWdlciwgaW5kZXgpID0+IHtcbiAgICAgIHVuZG9NYW5hZ2VyLmRhdGEgPSBbXTtcbiAgICAgIGluZGV4LnNldCgwKTtcbiAgICAgIHVuZG9NYW5hZ2VyLnR5cGluZyA9IGZhbHNlO1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdDbGVhclVuZG9zJyk7XG4gICAgfTtcbiAgICBjb25zdCBleHRyYSQxID0gKGVkaXRvciwgdW5kb01hbmFnZXIsIGluZGV4LCBjYWxsYmFjazEsIGNhbGxiYWNrMikgPT4ge1xuICAgICAgaWYgKHVuZG9NYW5hZ2VyLnRyYW5zYWN0KGNhbGxiYWNrMSkpIHtcbiAgICAgICAgY29uc3QgYm9va21hcmsgPSB1bmRvTWFuYWdlci5kYXRhW2luZGV4LmdldCgpXS5ib29rbWFyaztcbiAgICAgICAgY29uc3QgbGFzdExldmVsID0gdW5kb01hbmFnZXIuZGF0YVtpbmRleC5nZXQoKSAtIDFdO1xuICAgICAgICBhcHBseVRvRWRpdG9yKGVkaXRvciwgbGFzdExldmVsLCB0cnVlKTtcbiAgICAgICAgaWYgKHVuZG9NYW5hZ2VyLnRyYW5zYWN0KGNhbGxiYWNrMikpIHtcbiAgICAgICAgICB1bmRvTWFuYWdlci5kYXRhW2luZGV4LmdldCgpIC0gMV0uYmVmb3JlQm9va21hcmsgPSBib29rbWFyaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVkbyQxID0gKGVkaXRvciwgaW5kZXgsIGRhdGEpID0+IHtcbiAgICAgIGxldCBsZXZlbDtcbiAgICAgIGlmIChpbmRleC5nZXQoKSA8IGRhdGEubGVuZ3RoIC0gMSkge1xuICAgICAgICBpbmRleC5zZXQoaW5kZXguZ2V0KCkgKyAxKTtcbiAgICAgICAgbGV2ZWwgPSBkYXRhW2luZGV4LmdldCgpXTtcbiAgICAgICAgYXBwbHlUb0VkaXRvcihlZGl0b3IsIGxldmVsLCBmYWxzZSk7XG4gICAgICAgIGVkaXRvci5zZXREaXJ0eSh0cnVlKTtcbiAgICAgICAgZWRpdG9yLmRpc3BhdGNoKCdSZWRvJywgeyBsZXZlbCB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZXZlbDtcbiAgICB9O1xuICAgIGNvbnN0IHVuZG8kMSA9IChlZGl0b3IsIHVuZG9NYW5hZ2VyLCBsb2NrcywgaW5kZXgpID0+IHtcbiAgICAgIGxldCBsZXZlbDtcbiAgICAgIGlmICh1bmRvTWFuYWdlci50eXBpbmcpIHtcbiAgICAgICAgdW5kb01hbmFnZXIuYWRkKCk7XG4gICAgICAgIHVuZG9NYW5hZ2VyLnR5cGluZyA9IGZhbHNlO1xuICAgICAgICBzZXRUeXBpbmcodW5kb01hbmFnZXIsIGZhbHNlLCBsb2Nrcyk7XG4gICAgICB9XG4gICAgICBpZiAoaW5kZXguZ2V0KCkgPiAwKSB7XG4gICAgICAgIGluZGV4LnNldChpbmRleC5nZXQoKSAtIDEpO1xuICAgICAgICBsZXZlbCA9IHVuZG9NYW5hZ2VyLmRhdGFbaW5kZXguZ2V0KCldO1xuICAgICAgICBhcHBseVRvRWRpdG9yKGVkaXRvciwgbGV2ZWwsIHRydWUpO1xuICAgICAgICBlZGl0b3Iuc2V0RGlydHkodHJ1ZSk7XG4gICAgICAgIGVkaXRvci5kaXNwYXRjaCgnVW5kbycsIHsgbGV2ZWwgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGV2ZWw7XG4gICAgfTtcbiAgICBjb25zdCByZXNldCQxID0gdW5kb01hbmFnZXIgPT4ge1xuICAgICAgdW5kb01hbmFnZXIuY2xlYXIoKTtcbiAgICAgIHVuZG9NYW5hZ2VyLmFkZCgpO1xuICAgIH07XG4gICAgY29uc3QgaGFzVW5kbyQxID0gKGVkaXRvciwgdW5kb01hbmFnZXIsIGluZGV4KSA9PiBpbmRleC5nZXQoKSA+IDAgfHwgdW5kb01hbmFnZXIudHlwaW5nICYmIHVuZG9NYW5hZ2VyLmRhdGFbMF0gJiYgIWlzRXEkMShjcmVhdGVGcm9tRWRpdG9yKGVkaXRvciksIHVuZG9NYW5hZ2VyLmRhdGFbMF0pO1xuICAgIGNvbnN0IGhhc1JlZG8kMSA9ICh1bmRvTWFuYWdlciwgaW5kZXgpID0+IGluZGV4LmdldCgpIDwgdW5kb01hbmFnZXIuZGF0YS5sZW5ndGggLSAxICYmICF1bmRvTWFuYWdlci50eXBpbmc7XG4gICAgY29uc3QgdHJhbnNhY3QkMSA9ICh1bmRvTWFuYWdlciwgbG9ja3MsIGNhbGxiYWNrKSA9PiB7XG4gICAgICBlbmRUeXBpbmcodW5kb01hbmFnZXIsIGxvY2tzKTtcbiAgICAgIHVuZG9NYW5hZ2VyLmJlZm9yZUNoYW5nZSgpO1xuICAgICAgdW5kb01hbmFnZXIuaWdub3JlKGNhbGxiYWNrKTtcbiAgICAgIHJldHVybiB1bmRvTWFuYWdlci5hZGQoKTtcbiAgICB9O1xuICAgIGNvbnN0IGlnbm9yZSQxID0gKGxvY2tzLCBjYWxsYmFjaykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9ja3Muc2V0KGxvY2tzLmdldCgpICsgMSk7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBsb2Nrcy5zZXQobG9ja3MuZ2V0KCkgLSAxKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgYWRkVmlzdWFsSW50ZXJuYWwgPSAoZWRpdG9yLCBlbG0pID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBzY29wZSA9IGlzTm9uTnVsbGFibGUoZWxtKSA/IGVsbSA6IGVkaXRvci5nZXRCb2R5KCk7XG4gICAgICBlYWNoJGUoZG9tLnNlbGVjdCgndGFibGUsYScsIHNjb3BlKSwgbWF0Y2hlZEVsbSA9PiB7XG4gICAgICAgIHN3aXRjaCAobWF0Y2hlZEVsbS5ub2RlTmFtZSkge1xuICAgICAgICBjYXNlICdUQUJMRSc6XG4gICAgICAgICAgY29uc3QgY2xzID0gZ2V0VmlzdWFsQWlkc1RhYmxlQ2xhc3MoZWRpdG9yKTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRvbS5nZXRBdHRyaWIobWF0Y2hlZEVsbSwgJ2JvcmRlcicpO1xuICAgICAgICAgIGlmICgoIXZhbHVlIHx8IHZhbHVlID09PSAnMCcpICYmIGVkaXRvci5oYXNWaXN1YWwpIHtcbiAgICAgICAgICAgIGRvbS5hZGRDbGFzcyhtYXRjaGVkRWxtLCBjbHMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2xhc3MobWF0Y2hlZEVsbSwgY2xzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0EnOlxuICAgICAgICAgIGlmICghZG9tLmdldEF0dHJpYihtYXRjaGVkRWxtLCAnaHJlZicpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRvbS5nZXRBdHRyaWIobWF0Y2hlZEVsbSwgJ25hbWUnKSB8fCBtYXRjaGVkRWxtLmlkO1xuICAgICAgICAgICAgY29uc3QgY2xzID0gZ2V0VmlzdWFsQWlkc0FuY2hvckNsYXNzKGVkaXRvcik7XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgZWRpdG9yLmhhc1Zpc3VhbCkge1xuICAgICAgICAgICAgICBkb20uYWRkQ2xhc3MobWF0Y2hlZEVsbSwgY2xzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyhtYXRjaGVkRWxtLCBjbHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ1Zpc3VhbEFpZCcsIHtcbiAgICAgICAgZWxlbWVudDogZWxtLFxuICAgICAgICBoYXNWaXN1YWw6IGVkaXRvci5oYXNWaXN1YWxcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBtYWtlUGxhaW5BZGFwdG9yID0gZWRpdG9yID0+ICh7XG4gICAgICBpbml0OiB7IGJpbmRFdmVudHM6IG5vb3AgfSxcbiAgICAgIHVuZG9NYW5hZ2VyOiB7XG4gICAgICAgIGJlZm9yZUNoYW5nZTogKGxvY2tzLCBiZWZvcmVCb29rbWFyaykgPT4gYmVmb3JlQ2hhbmdlJDEoZWRpdG9yLCBsb2NrcywgYmVmb3JlQm9va21hcmspLFxuICAgICAgICBhZGQ6ICh1bmRvTWFuYWdlciwgaW5kZXgsIGxvY2tzLCBiZWZvcmVCb29rbWFyaywgbGV2ZWwsIGV2ZW50KSA9PiBhZGRVbmRvTGV2ZWwkMShlZGl0b3IsIHVuZG9NYW5hZ2VyLCBpbmRleCwgbG9ja3MsIGJlZm9yZUJvb2ttYXJrLCBsZXZlbCwgZXZlbnQpLFxuICAgICAgICB1bmRvOiAodW5kb01hbmFnZXIsIGxvY2tzLCBpbmRleCkgPT4gdW5kbyQxKGVkaXRvciwgdW5kb01hbmFnZXIsIGxvY2tzLCBpbmRleCksXG4gICAgICAgIHJlZG86IChpbmRleCwgZGF0YSkgPT4gcmVkbyQxKGVkaXRvciwgaW5kZXgsIGRhdGEpLFxuICAgICAgICBjbGVhcjogKHVuZG9NYW5hZ2VyLCBpbmRleCkgPT4gY2xlYXIkMShlZGl0b3IsIHVuZG9NYW5hZ2VyLCBpbmRleCksXG4gICAgICAgIHJlc2V0OiB1bmRvTWFuYWdlciA9PiByZXNldCQxKHVuZG9NYW5hZ2VyKSxcbiAgICAgICAgaGFzVW5kbzogKHVuZG9NYW5hZ2VyLCBpbmRleCkgPT4gaGFzVW5kbyQxKGVkaXRvciwgdW5kb01hbmFnZXIsIGluZGV4KSxcbiAgICAgICAgaGFzUmVkbzogKHVuZG9NYW5hZ2VyLCBpbmRleCkgPT4gaGFzUmVkbyQxKHVuZG9NYW5hZ2VyLCBpbmRleCksXG4gICAgICAgIHRyYW5zYWN0OiAodW5kb01hbmFnZXIsIGxvY2tzLCBjYWxsYmFjaykgPT4gdHJhbnNhY3QkMSh1bmRvTWFuYWdlciwgbG9ja3MsIGNhbGxiYWNrKSxcbiAgICAgICAgaWdub3JlOiAobG9ja3MsIGNhbGxiYWNrKSA9PiBpZ25vcmUkMShsb2NrcywgY2FsbGJhY2spLFxuICAgICAgICBleHRyYTogKHVuZG9NYW5hZ2VyLCBpbmRleCwgY2FsbGJhY2sxLCBjYWxsYmFjazIpID0+IGV4dHJhJDEoZWRpdG9yLCB1bmRvTWFuYWdlciwgaW5kZXgsIGNhbGxiYWNrMSwgY2FsbGJhY2syKVxuICAgICAgfSxcbiAgICAgIGZvcm1hdHRlcjoge1xuICAgICAgICBtYXRjaDogKG5hbWUsIHZhcnMsIG5vZGUsIHNpbWlsYXIpID0+IG1hdGNoJDIoZWRpdG9yLCBuYW1lLCB2YXJzLCBub2RlLCBzaW1pbGFyKSxcbiAgICAgICAgbWF0Y2hBbGw6IChuYW1lcywgdmFycykgPT4gbWF0Y2hBbGwoZWRpdG9yLCBuYW1lcywgdmFycyksXG4gICAgICAgIG1hdGNoTm9kZTogKG5vZGUsIG5hbWUsIHZhcnMsIHNpbWlsYXIpID0+IG1hdGNoTm9kZShlZGl0b3IsIG5vZGUsIG5hbWUsIHZhcnMsIHNpbWlsYXIpLFxuICAgICAgICBjYW5BcHBseTogbmFtZSA9PiBjYW5BcHBseShlZGl0b3IsIG5hbWUpLFxuICAgICAgICBjbG9zZXN0OiBuYW1lcyA9PiBjbG9zZXN0KGVkaXRvciwgbmFtZXMpLFxuICAgICAgICBhcHBseTogKG5hbWUsIHZhcnMsIG5vZGUpID0+IGFwcGx5Rm9ybWF0JDEoZWRpdG9yLCBuYW1lLCB2YXJzLCBub2RlKSxcbiAgICAgICAgcmVtb3ZlOiAobmFtZSwgdmFycywgbm9kZSwgc2ltaWxhcikgPT4gcmVtb3ZlRm9ybWF0JDEoZWRpdG9yLCBuYW1lLCB2YXJzLCBub2RlLCBzaW1pbGFyKSxcbiAgICAgICAgdG9nZ2xlOiAobmFtZSwgdmFycywgbm9kZSkgPT4gdG9nZ2xlKGVkaXRvciwgbmFtZSwgdmFycywgbm9kZSksXG4gICAgICAgIGZvcm1hdENoYW5nZWQ6IChyZWdpc3RlcmVkRm9ybWF0TGlzdGVuZXJzLCBmb3JtYXRzLCBjYWxsYmFjaywgc2ltaWxhciwgdmFycykgPT4gZm9ybWF0Q2hhbmdlZEludGVybmFsKGVkaXRvciwgcmVnaXN0ZXJlZEZvcm1hdExpc3RlbmVycywgZm9ybWF0cywgY2FsbGJhY2ssIHNpbWlsYXIsIHZhcnMpXG4gICAgICB9LFxuICAgICAgZWRpdG9yOiB7XG4gICAgICAgIGdldENvbnRlbnQ6IGFyZ3MgPT4gZ2V0Q29udGVudEludGVybmFsKGVkaXRvciwgYXJncyksXG4gICAgICAgIHNldENvbnRlbnQ6IChjb250ZW50LCBhcmdzKSA9PiBzZXRDb250ZW50SW50ZXJuYWwoZWRpdG9yLCBjb250ZW50LCBhcmdzKSxcbiAgICAgICAgaW5zZXJ0Q29udGVudDogKHZhbHVlLCBkZXRhaWxzKSA9PiBpbnNlcnRIdG1sQXRDYXJldChlZGl0b3IsIHZhbHVlLCBkZXRhaWxzKSxcbiAgICAgICAgYWRkVmlzdWFsOiBlbG0gPT4gYWRkVmlzdWFsSW50ZXJuYWwoZWRpdG9yLCBlbG0pXG4gICAgICB9LFxuICAgICAgc2VsZWN0aW9uOiB7IGdldENvbnRlbnQ6IChmb3JtYXQsIGFyZ3MpID0+IGdldFNlbGVjdGVkQ29udGVudEludGVybmFsKGVkaXRvciwgZm9ybWF0LCBhcmdzKSB9LFxuICAgICAgYXV0b2NvbXBsZXRlcjoge1xuICAgICAgICBhZGREZWNvcmF0aW9uOiByYW5nZSA9PiBjcmVhdGUkOShlZGl0b3IsIHJhbmdlKSxcbiAgICAgICAgcmVtb3ZlRGVjb3JhdGlvbjogKCkgPT4gcmVtb3ZlJDIoZWRpdG9yLCBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKSlcbiAgICAgIH0sXG4gICAgICByYXc6IHsgZ2V0TW9kZWw6ICgpID0+IE9wdGlvbmFsLm5vbmUoKSB9XG4gICAgfSk7XG4gICAgY29uc3QgbWFrZVJ0Y0FkYXB0b3IgPSBydGNFZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdFZhcnMgPSB2YXJzID0+IGlzT2JqZWN0KHZhcnMpID8gdmFycyA6IHt9O1xuICAgICAgY29uc3Qge2luaXQsIHVuZG9NYW5hZ2VyLCBmb3JtYXR0ZXIsIGVkaXRvciwgc2VsZWN0aW9uLCBhdXRvY29tcGxldGVyLCByYXd9ID0gcnRjRWRpdG9yO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5pdDogeyBiaW5kRXZlbnRzOiBpbml0LmJpbmRFdmVudHMgfSxcbiAgICAgICAgdW5kb01hbmFnZXI6IHtcbiAgICAgICAgICBiZWZvcmVDaGFuZ2U6IHVuZG9NYW5hZ2VyLmJlZm9yZUNoYW5nZSxcbiAgICAgICAgICBhZGQ6IHVuZG9NYW5hZ2VyLmFkZCxcbiAgICAgICAgICB1bmRvOiB1bmRvTWFuYWdlci51bmRvLFxuICAgICAgICAgIHJlZG86IHVuZG9NYW5hZ2VyLnJlZG8sXG4gICAgICAgICAgY2xlYXI6IHVuZG9NYW5hZ2VyLmNsZWFyLFxuICAgICAgICAgIHJlc2V0OiB1bmRvTWFuYWdlci5yZXNldCxcbiAgICAgICAgICBoYXNVbmRvOiB1bmRvTWFuYWdlci5oYXNVbmRvLFxuICAgICAgICAgIGhhc1JlZG86IHVuZG9NYW5hZ2VyLmhhc1JlZG8sXG4gICAgICAgICAgdHJhbnNhY3Q6IChfdW5kb01hbmFnZXIsIF9sb2NrcywgZm4pID0+IHVuZG9NYW5hZ2VyLnRyYW5zYWN0KGZuKSxcbiAgICAgICAgICBpZ25vcmU6IChfbG9ja3MsIGNhbGxiYWNrKSA9PiB1bmRvTWFuYWdlci5pZ25vcmUoY2FsbGJhY2spLFxuICAgICAgICAgIGV4dHJhOiAoX3VuZG9NYW5hZ2VyLCBfaW5kZXgsIGNhbGxiYWNrMSwgY2FsbGJhY2syKSA9PiB1bmRvTWFuYWdlci5leHRyYShjYWxsYmFjazEsIGNhbGxiYWNrMilcbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0dGVyOiB7XG4gICAgICAgICAgbWF0Y2g6IChuYW1lLCB2YXJzLCBfbm9kZSwgc2ltaWxhcikgPT4gZm9ybWF0dGVyLm1hdGNoKG5hbWUsIGRlZmF1bHRWYXJzKHZhcnMpLCBzaW1pbGFyKSxcbiAgICAgICAgICBtYXRjaEFsbDogZm9ybWF0dGVyLm1hdGNoQWxsLFxuICAgICAgICAgIG1hdGNoTm9kZTogZm9ybWF0dGVyLm1hdGNoTm9kZSxcbiAgICAgICAgICBjYW5BcHBseTogbmFtZSA9PiBmb3JtYXR0ZXIuY2FuQXBwbHkobmFtZSksXG4gICAgICAgICAgY2xvc2VzdDogbmFtZXMgPT4gZm9ybWF0dGVyLmNsb3Nlc3QobmFtZXMpLFxuICAgICAgICAgIGFwcGx5OiAobmFtZSwgdmFycywgX25vZGUpID0+IGZvcm1hdHRlci5hcHBseShuYW1lLCBkZWZhdWx0VmFycyh2YXJzKSksXG4gICAgICAgICAgcmVtb3ZlOiAobmFtZSwgdmFycywgX25vZGUsIF9zaW1pbGFyKSA9PiBmb3JtYXR0ZXIucmVtb3ZlKG5hbWUsIGRlZmF1bHRWYXJzKHZhcnMpKSxcbiAgICAgICAgICB0b2dnbGU6IChuYW1lLCB2YXJzLCBfbm9kZSkgPT4gZm9ybWF0dGVyLnRvZ2dsZShuYW1lLCBkZWZhdWx0VmFycyh2YXJzKSksXG4gICAgICAgICAgZm9ybWF0Q2hhbmdlZDogKF9yZmwsIGZvcm1hdHMsIGNhbGxiYWNrLCBzaW1pbGFyLCB2YXJzKSA9PiBmb3JtYXR0ZXIuZm9ybWF0Q2hhbmdlZChmb3JtYXRzLCBjYWxsYmFjaywgc2ltaWxhciwgdmFycylcbiAgICAgICAgfSxcbiAgICAgICAgZWRpdG9yOiB7XG4gICAgICAgICAgZ2V0Q29udGVudDogYXJncyA9PiBlZGl0b3IuZ2V0Q29udGVudChhcmdzKSxcbiAgICAgICAgICBzZXRDb250ZW50OiAoY29udGVudCwgYXJncykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogZWRpdG9yLnNldENvbnRlbnQoY29udGVudCwgYXJncyksXG4gICAgICAgICAgICAgIGh0bWw6ICcnXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5zZXJ0Q29udGVudDogKGNvbnRlbnQsIF9kZXRhaWxzKSA9PiB7XG4gICAgICAgICAgICBlZGl0b3IuaW5zZXJ0Q29udGVudChjb250ZW50KTtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFkZFZpc3VhbDogZWRpdG9yLmFkZFZpc3VhbFxuICAgICAgICB9LFxuICAgICAgICBzZWxlY3Rpb246IHsgZ2V0Q29udGVudDogKF9mb3JtYXQsIGFyZ3MpID0+IHNlbGVjdGlvbi5nZXRDb250ZW50KGFyZ3MpIH0sXG4gICAgICAgIGF1dG9jb21wbGV0ZXI6IHtcbiAgICAgICAgICBhZGREZWNvcmF0aW9uOiBhdXRvY29tcGxldGVyLmFkZERlY29yYXRpb24sXG4gICAgICAgICAgcmVtb3ZlRGVjb3JhdGlvbjogYXV0b2NvbXBsZXRlci5yZW1vdmVEZWNvcmF0aW9uXG4gICAgICAgIH0sXG4gICAgICAgIHJhdzogeyBnZXRNb2RlbDogKCkgPT4gT3B0aW9uYWwuc29tZShyYXcuZ2V0UmF3TW9kZWwoKSkgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG1ha2VOb29wQWRhcHRvciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IG51bCA9IGNvbnN0YW50KG51bGwpO1xuICAgICAgY29uc3QgZW1wdHkgPSBjb25zdGFudCgnJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbml0OiB7IGJpbmRFdmVudHM6IG5vb3AgfSxcbiAgICAgICAgdW5kb01hbmFnZXI6IHtcbiAgICAgICAgICBiZWZvcmVDaGFuZ2U6IG5vb3AsXG4gICAgICAgICAgYWRkOiBudWwsXG4gICAgICAgICAgdW5kbzogbnVsLFxuICAgICAgICAgIHJlZG86IG51bCxcbiAgICAgICAgICBjbGVhcjogbm9vcCxcbiAgICAgICAgICByZXNldDogbm9vcCxcbiAgICAgICAgICBoYXNVbmRvOiBuZXZlcixcbiAgICAgICAgICBoYXNSZWRvOiBuZXZlcixcbiAgICAgICAgICB0cmFuc2FjdDogbnVsLFxuICAgICAgICAgIGlnbm9yZTogbm9vcCxcbiAgICAgICAgICBleHRyYTogbm9vcFxuICAgICAgICB9LFxuICAgICAgICBmb3JtYXR0ZXI6IHtcbiAgICAgICAgICBtYXRjaDogbmV2ZXIsXG4gICAgICAgICAgbWF0Y2hBbGw6IGNvbnN0YW50KFtdKSxcbiAgICAgICAgICBtYXRjaE5vZGU6IGNvbnN0YW50KHVuZGVmaW5lZCksXG4gICAgICAgICAgY2FuQXBwbHk6IG5ldmVyLFxuICAgICAgICAgIGNsb3Nlc3Q6IGVtcHR5LFxuICAgICAgICAgIGFwcGx5OiBub29wLFxuICAgICAgICAgIHJlbW92ZTogbm9vcCxcbiAgICAgICAgICB0b2dnbGU6IG5vb3AsXG4gICAgICAgICAgZm9ybWF0Q2hhbmdlZDogY29uc3RhbnQoeyB1bmJpbmQ6IG5vb3AgfSlcbiAgICAgICAgfSxcbiAgICAgICAgZWRpdG9yOiB7XG4gICAgICAgICAgZ2V0Q29udGVudDogZW1wdHksXG4gICAgICAgICAgc2V0Q29udGVudDogY29uc3RhbnQoe1xuICAgICAgICAgICAgY29udGVudDogJycsXG4gICAgICAgICAgICBodG1sOiAnJ1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGluc2VydENvbnRlbnQ6IGNvbnN0YW50KCcnKSxcbiAgICAgICAgICBhZGRWaXN1YWw6IG5vb3BcbiAgICAgICAgfSxcbiAgICAgICAgc2VsZWN0aW9uOiB7IGdldENvbnRlbnQ6IGVtcHR5IH0sXG4gICAgICAgIGF1dG9jb21wbGV0ZXI6IHtcbiAgICAgICAgICBhZGREZWNvcmF0aW9uOiBub29wLFxuICAgICAgICAgIHJlbW92ZURlY29yYXRpb246IG5vb3BcbiAgICAgICAgfSxcbiAgICAgICAgcmF3OiB7IGdldE1vZGVsOiBjb25zdGFudChPcHRpb25hbC5ub25lKCkpIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBpc1J0YyA9IGVkaXRvciA9PiBoYXMkMihlZGl0b3IucGx1Z2lucywgJ3J0YycpO1xuICAgIGNvbnN0IGdldFJ0Y1NldHVwID0gZWRpdG9yID0+IGdldCRhKGVkaXRvci5wbHVnaW5zLCAncnRjJykuYmluZChydGNQbHVnaW4gPT4gT3B0aW9uYWwuZnJvbShydGNQbHVnaW4uc2V0dXApKTtcbiAgICBjb25zdCBzZXR1cCRzID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGVkaXRvckNhc3QgPSBlZGl0b3I7XG4gICAgICByZXR1cm4gZ2V0UnRjU2V0dXAoZWRpdG9yKS5mb2xkKCgpID0+IHtcbiAgICAgICAgZWRpdG9yQ2FzdC5ydGNJbnN0YW5jZSA9IG1ha2VQbGFpbkFkYXB0b3IoZWRpdG9yKTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH0sIHNldHVwID0+IHtcbiAgICAgICAgZWRpdG9yQ2FzdC5ydGNJbnN0YW5jZSA9IG1ha2VOb29wQWRhcHRvcigpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSgoKSA9PiBzZXR1cCgpLnRoZW4ocnRjRWRpdG9yID0+IHtcbiAgICAgICAgICBlZGl0b3JDYXN0LnJ0Y0luc3RhbmNlID0gbWFrZVJ0Y0FkYXB0b3IocnRjRWRpdG9yKTtcbiAgICAgICAgICByZXR1cm4gcnRjRWRpdG9yLnJ0Yy5pc1JlbW90ZTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRSdGNJbnN0YW5jZVdpdGhGYWxsYmFjayA9IGVkaXRvciA9PiBlZGl0b3IucnRjSW5zdGFuY2UgPyBlZGl0b3IucnRjSW5zdGFuY2UgOiBtYWtlUGxhaW5BZGFwdG9yKGVkaXRvcik7XG4gICAgY29uc3QgZ2V0UnRjSW5zdGFuY2VXaXRoRXJyb3IgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgcnRjSW5zdGFuY2UgPSBlZGl0b3IucnRjSW5zdGFuY2U7XG4gICAgICBpZiAoIXJ0Y0luc3RhbmNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGdldCBSVEMgaW5zdGFuY2Ugbm90IHlldCBpbml0aWFsaXplZC4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBydGNJbnN0YW5jZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGJlZm9yZUNoYW5nZSA9IChlZGl0b3IsIGxvY2tzLCBiZWZvcmVCb29rbWFyaykgPT4ge1xuICAgICAgZ2V0UnRjSW5zdGFuY2VXaXRoRXJyb3IoZWRpdG9yKS51bmRvTWFuYWdlci5iZWZvcmVDaGFuZ2UobG9ja3MsIGJlZm9yZUJvb2ttYXJrKTtcbiAgICB9O1xuICAgIGNvbnN0IGFkZFVuZG9MZXZlbCA9IChlZGl0b3IsIHVuZG9NYW5hZ2VyLCBpbmRleCwgbG9ja3MsIGJlZm9yZUJvb2ttYXJrLCBsZXZlbCwgZXZlbnQpID0+IGdldFJ0Y0luc3RhbmNlV2l0aEVycm9yKGVkaXRvcikudW5kb01hbmFnZXIuYWRkKHVuZG9NYW5hZ2VyLCBpbmRleCwgbG9ja3MsIGJlZm9yZUJvb2ttYXJrLCBsZXZlbCwgZXZlbnQpO1xuICAgIGNvbnN0IHVuZG8gPSAoZWRpdG9yLCB1bmRvTWFuYWdlciwgbG9ja3MsIGluZGV4KSA9PiBnZXRSdGNJbnN0YW5jZVdpdGhFcnJvcihlZGl0b3IpLnVuZG9NYW5hZ2VyLnVuZG8odW5kb01hbmFnZXIsIGxvY2tzLCBpbmRleCk7XG4gICAgY29uc3QgcmVkbyA9IChlZGl0b3IsIGluZGV4LCBkYXRhKSA9PiBnZXRSdGNJbnN0YW5jZVdpdGhFcnJvcihlZGl0b3IpLnVuZG9NYW5hZ2VyLnJlZG8oaW5kZXgsIGRhdGEpO1xuICAgIGNvbnN0IGNsZWFyID0gKGVkaXRvciwgdW5kb01hbmFnZXIsIGluZGV4KSA9PiB7XG4gICAgICBnZXRSdGNJbnN0YW5jZVdpdGhFcnJvcihlZGl0b3IpLnVuZG9NYW5hZ2VyLmNsZWFyKHVuZG9NYW5hZ2VyLCBpbmRleCk7XG4gICAgfTtcbiAgICBjb25zdCByZXNldCA9IChlZGl0b3IsIHVuZG9NYW5hZ2VyKSA9PiB7XG4gICAgICBnZXRSdGNJbnN0YW5jZVdpdGhFcnJvcihlZGl0b3IpLnVuZG9NYW5hZ2VyLnJlc2V0KHVuZG9NYW5hZ2VyKTtcbiAgICB9O1xuICAgIGNvbnN0IGhhc1VuZG8gPSAoZWRpdG9yLCB1bmRvTWFuYWdlciwgaW5kZXgpID0+IGdldFJ0Y0luc3RhbmNlV2l0aEVycm9yKGVkaXRvcikudW5kb01hbmFnZXIuaGFzVW5kbyh1bmRvTWFuYWdlciwgaW5kZXgpO1xuICAgIGNvbnN0IGhhc1JlZG8gPSAoZWRpdG9yLCB1bmRvTWFuYWdlciwgaW5kZXgpID0+IGdldFJ0Y0luc3RhbmNlV2l0aEVycm9yKGVkaXRvcikudW5kb01hbmFnZXIuaGFzUmVkbyh1bmRvTWFuYWdlciwgaW5kZXgpO1xuICAgIGNvbnN0IHRyYW5zYWN0ID0gKGVkaXRvciwgdW5kb01hbmFnZXIsIGxvY2tzLCBjYWxsYmFjaykgPT4gZ2V0UnRjSW5zdGFuY2VXaXRoRXJyb3IoZWRpdG9yKS51bmRvTWFuYWdlci50cmFuc2FjdCh1bmRvTWFuYWdlciwgbG9ja3MsIGNhbGxiYWNrKTtcbiAgICBjb25zdCBpZ25vcmUgPSAoZWRpdG9yLCBsb2NrcywgY2FsbGJhY2spID0+IHtcbiAgICAgIGdldFJ0Y0luc3RhbmNlV2l0aEVycm9yKGVkaXRvcikudW5kb01hbmFnZXIuaWdub3JlKGxvY2tzLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICBjb25zdCBleHRyYSA9IChlZGl0b3IsIHVuZG9NYW5hZ2VyLCBpbmRleCwgY2FsbGJhY2sxLCBjYWxsYmFjazIpID0+IHtcbiAgICAgIGdldFJ0Y0luc3RhbmNlV2l0aEVycm9yKGVkaXRvcikudW5kb01hbmFnZXIuZXh0cmEodW5kb01hbmFnZXIsIGluZGV4LCBjYWxsYmFjazEsIGNhbGxiYWNrMik7XG4gICAgfTtcbiAgICBjb25zdCBtYXRjaEZvcm1hdCA9IChlZGl0b3IsIG5hbWUsIHZhcnMsIG5vZGUsIHNpbWlsYXIpID0+IGdldFJ0Y0luc3RhbmNlV2l0aEVycm9yKGVkaXRvcikuZm9ybWF0dGVyLm1hdGNoKG5hbWUsIHZhcnMsIG5vZGUsIHNpbWlsYXIpO1xuICAgIGNvbnN0IG1hdGNoQWxsRm9ybWF0cyA9IChlZGl0b3IsIG5hbWVzLCB2YXJzKSA9PiBnZXRSdGNJbnN0YW5jZVdpdGhFcnJvcihlZGl0b3IpLmZvcm1hdHRlci5tYXRjaEFsbChuYW1lcywgdmFycyk7XG4gICAgY29uc3QgbWF0Y2hOb2RlRm9ybWF0ID0gKGVkaXRvciwgbm9kZSwgbmFtZSwgdmFycywgc2ltaWxhcikgPT4gZ2V0UnRjSW5zdGFuY2VXaXRoRXJyb3IoZWRpdG9yKS5mb3JtYXR0ZXIubWF0Y2hOb2RlKG5vZGUsIG5hbWUsIHZhcnMsIHNpbWlsYXIpO1xuICAgIGNvbnN0IGNhbkFwcGx5Rm9ybWF0ID0gKGVkaXRvciwgbmFtZSkgPT4gZ2V0UnRjSW5zdGFuY2VXaXRoRXJyb3IoZWRpdG9yKS5mb3JtYXR0ZXIuY2FuQXBwbHkobmFtZSk7XG4gICAgY29uc3QgY2xvc2VzdEZvcm1hdCA9IChlZGl0b3IsIG5hbWVzKSA9PiBnZXRSdGNJbnN0YW5jZVdpdGhFcnJvcihlZGl0b3IpLmZvcm1hdHRlci5jbG9zZXN0KG5hbWVzKTtcbiAgICBjb25zdCBhcHBseUZvcm1hdCA9IChlZGl0b3IsIG5hbWUsIHZhcnMsIG5vZGUpID0+IHtcbiAgICAgIGdldFJ0Y0luc3RhbmNlV2l0aEVycm9yKGVkaXRvcikuZm9ybWF0dGVyLmFwcGx5KG5hbWUsIHZhcnMsIG5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlRm9ybWF0ID0gKGVkaXRvciwgbmFtZSwgdmFycywgbm9kZSwgc2ltaWxhcikgPT4ge1xuICAgICAgZ2V0UnRjSW5zdGFuY2VXaXRoRXJyb3IoZWRpdG9yKS5mb3JtYXR0ZXIucmVtb3ZlKG5hbWUsIHZhcnMsIG5vZGUsIHNpbWlsYXIpO1xuICAgIH07XG4gICAgY29uc3QgdG9nZ2xlRm9ybWF0ID0gKGVkaXRvciwgbmFtZSwgdmFycywgbm9kZSkgPT4ge1xuICAgICAgZ2V0UnRjSW5zdGFuY2VXaXRoRXJyb3IoZWRpdG9yKS5mb3JtYXR0ZXIudG9nZ2xlKG5hbWUsIHZhcnMsIG5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgZm9ybWF0Q2hhbmdlZCA9IChlZGl0b3IsIHJlZ2lzdGVyZWRGb3JtYXRMaXN0ZW5lcnMsIGZvcm1hdHMsIGNhbGxiYWNrLCBzaW1pbGFyLCB2YXJzKSA9PiBnZXRSdGNJbnN0YW5jZVdpdGhFcnJvcihlZGl0b3IpLmZvcm1hdHRlci5mb3JtYXRDaGFuZ2VkKHJlZ2lzdGVyZWRGb3JtYXRMaXN0ZW5lcnMsIGZvcm1hdHMsIGNhbGxiYWNrLCBzaW1pbGFyLCB2YXJzKTtcbiAgICBjb25zdCBnZXRDb250ZW50JDIgPSAoZWRpdG9yLCBhcmdzKSA9PiBnZXRSdGNJbnN0YW5jZVdpdGhGYWxsYmFjayhlZGl0b3IpLmVkaXRvci5nZXRDb250ZW50KGFyZ3MpO1xuICAgIGNvbnN0IHNldENvbnRlbnQkMiA9IChlZGl0b3IsIGNvbnRlbnQsIGFyZ3MpID0+IGdldFJ0Y0luc3RhbmNlV2l0aEZhbGxiYWNrKGVkaXRvcikuZWRpdG9yLnNldENvbnRlbnQoY29udGVudCwgYXJncyk7XG4gICAgY29uc3QgaW5zZXJ0Q29udGVudCQxID0gKGVkaXRvciwgdmFsdWUsIGRldGFpbHMpID0+IGdldFJ0Y0luc3RhbmNlV2l0aEZhbGxiYWNrKGVkaXRvcikuZWRpdG9yLmluc2VydENvbnRlbnQodmFsdWUsIGRldGFpbHMpO1xuICAgIGNvbnN0IGdldFNlbGVjdGVkQ29udGVudCA9IChlZGl0b3IsIGZvcm1hdCwgYXJncykgPT4gZ2V0UnRjSW5zdGFuY2VXaXRoRXJyb3IoZWRpdG9yKS5zZWxlY3Rpb24uZ2V0Q29udGVudChmb3JtYXQsIGFyZ3MpO1xuICAgIGNvbnN0IGFkZFZpc3VhbCQxID0gKGVkaXRvciwgZWxtKSA9PiBnZXRSdGNJbnN0YW5jZVdpdGhFcnJvcihlZGl0b3IpLmVkaXRvci5hZGRWaXN1YWwoZWxtKTtcbiAgICBjb25zdCBiaW5kRXZlbnRzID0gZWRpdG9yID0+IGdldFJ0Y0luc3RhbmNlV2l0aEVycm9yKGVkaXRvcikuaW5pdC5iaW5kRXZlbnRzKCk7XG4gICAgY29uc3QgYWRkQXV0b2NvbXBsZXRlckRlY29yYXRpb24gPSAoZWRpdG9yLCByYW5nZSkgPT4gZ2V0UnRjSW5zdGFuY2VXaXRoRXJyb3IoZWRpdG9yKS5hdXRvY29tcGxldGVyLmFkZERlY29yYXRpb24ocmFuZ2UpO1xuICAgIGNvbnN0IHJlbW92ZUF1dG9jb21wbGV0ZXJEZWNvcmF0aW9uID0gZWRpdG9yID0+IGdldFJ0Y0luc3RhbmNlV2l0aEVycm9yKGVkaXRvcikuYXV0b2NvbXBsZXRlci5yZW1vdmVEZWNvcmF0aW9uKCk7XG5cbiAgICBjb25zdCBnZXRDb250ZW50JDEgPSAoZWRpdG9yLCBhcmdzID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdCA9IGFyZ3MuZm9ybWF0ID8gYXJncy5mb3JtYXQgOiAnaHRtbCc7XG4gICAgICByZXR1cm4gZ2V0U2VsZWN0ZWRDb250ZW50KGVkaXRvciwgZm9ybWF0LCBhcmdzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVtb3ZlRW1wdHkgPSB0ZXh0ID0+IHtcbiAgICAgIGlmICh0ZXh0LmRvbS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmVtb3ZlJDUodGV4dCk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0ZXh0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHdhbGtQYXN0Qm9va21hcmsgPSAobm9kZSwgc3RhcnQpID0+IG5vZGUuZmlsdGVyKGVsbSA9PiBCb29rbWFya01hbmFnZXIuaXNCb29rbWFya05vZGUoZWxtLmRvbSkpLmJpbmQoc3RhcnQgPyBuZXh0U2libGluZyA6IHByZXZTaWJsaW5nKTtcbiAgICBjb25zdCBtZXJnZSQxID0gKG91dGVyLCBpbm5lciwgcm5nLCBzdGFydCkgPT4ge1xuICAgICAgY29uc3Qgb3V0ZXJFbG0gPSBvdXRlci5kb207XG4gICAgICBjb25zdCBpbm5lckVsbSA9IGlubmVyLmRvbTtcbiAgICAgIGNvbnN0IG9sZExlbmd0aCA9IHN0YXJ0ID8gb3V0ZXJFbG0ubGVuZ3RoIDogaW5uZXJFbG0ubGVuZ3RoO1xuICAgICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgIG1lcmdlVGV4dE5vZGVzKG91dGVyRWxtLCBpbm5lckVsbSwgZmFsc2UsICFzdGFydCk7XG4gICAgICAgIHJuZy5zZXRTdGFydChpbm5lckVsbSwgb2xkTGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lcmdlVGV4dE5vZGVzKGlubmVyRWxtLCBvdXRlckVsbSwgZmFsc2UsICFzdGFydCk7XG4gICAgICAgIHJuZy5zZXRFbmQoaW5uZXJFbG0sIG9sZExlbmd0aCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBub3JtYWxpemVUZXh0SWZSZXF1aXJlZCA9IChpbm5lciwgc3RhcnQpID0+IHtcbiAgICAgIHBhcmVudChpbm5lcikuZWFjaChyb290ID0+IHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGlubmVyLmRvbTtcbiAgICAgICAgaWYgKHN0YXJ0ICYmIG5lZWRzVG9CZU5ic3BMZWZ0KHJvb3QsIENhcmV0UG9zaXRpb24odGV4dCwgMCkpKSB7XG4gICAgICAgICAgbm9ybWFsaXplV2hpdGVzcGFjZUFmdGVyKHRleHQsIDApO1xuICAgICAgICB9IGVsc2UgaWYgKCFzdGFydCAmJiBuZWVkc1RvQmVOYnNwUmlnaHQocm9vdCwgQ2FyZXRQb3NpdGlvbih0ZXh0LCB0ZXh0Lmxlbmd0aCkpKSB7XG4gICAgICAgICAgbm9ybWFsaXplV2hpdGVzcGFjZUJlZm9yZSh0ZXh0LCB0ZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbWVyZ2VBbmROb3JtYWxpemVUZXh0ID0gKG91dGVyTm9kZSwgaW5uZXJOb2RlLCBybmcsIHN0YXJ0KSA9PiB7XG4gICAgICBvdXRlck5vZGUuYmluZChvdXRlciA9PiB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZXIgPSBzdGFydCA/IG5vcm1hbGl6ZVdoaXRlc3BhY2VCZWZvcmUgOiBub3JtYWxpemVXaGl0ZXNwYWNlQWZ0ZXI7XG4gICAgICAgIG5vcm1hbGl6ZXIob3V0ZXIuZG9tLCBzdGFydCA/IG91dGVyLmRvbS5sZW5ndGggOiAwKTtcbiAgICAgICAgcmV0dXJuIGlubmVyTm9kZS5maWx0ZXIoaXNUZXh0JGIpLm1hcChpbm5lciA9PiBtZXJnZSQxKG91dGVyLCBpbm5lciwgcm5nLCBzdGFydCkpO1xuICAgICAgfSkub3JUaHVuaygoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlubmVyVGV4dE5vZGUgPSB3YWxrUGFzdEJvb2ttYXJrKGlubmVyTm9kZSwgc3RhcnQpLm9yKGlubmVyTm9kZSkuZmlsdGVyKGlzVGV4dCRiKTtcbiAgICAgICAgcmV0dXJuIGlubmVyVGV4dE5vZGUubWFwKGlubmVyID0+IG5vcm1hbGl6ZVRleHRJZlJlcXVpcmVkKGlubmVyLCBzdGFydCkpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBybmdTZXRDb250ZW50ID0gKHJuZywgZnJhZ21lbnQpID0+IHtcbiAgICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSBPcHRpb25hbC5mcm9tKGZyYWdtZW50LmZpcnN0Q2hpbGQpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgICBjb25zdCBsYXN0Q2hpbGQgPSBPcHRpb25hbC5mcm9tKGZyYWdtZW50Lmxhc3RDaGlsZCkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICAgIHJuZy5kZWxldGVDb250ZW50cygpO1xuICAgICAgcm5nLmluc2VydE5vZGUoZnJhZ21lbnQpO1xuICAgICAgY29uc3QgcHJldlRleHQgPSBmaXJzdENoaWxkLmJpbmQocHJldlNpYmxpbmcpLmZpbHRlcihpc1RleHQkYikuYmluZChyZW1vdmVFbXB0eSk7XG4gICAgICBjb25zdCBuZXh0VGV4dCA9IGxhc3RDaGlsZC5iaW5kKG5leHRTaWJsaW5nKS5maWx0ZXIoaXNUZXh0JGIpLmJpbmQocmVtb3ZlRW1wdHkpO1xuICAgICAgbWVyZ2VBbmROb3JtYWxpemVUZXh0KHByZXZUZXh0LCBmaXJzdENoaWxkLCBybmcsIHRydWUpO1xuICAgICAgbWVyZ2VBbmROb3JtYWxpemVUZXh0KG5leHRUZXh0LCBsYXN0Q2hpbGQsIHJuZywgZmFsc2UpO1xuICAgICAgcm5nLmNvbGxhcHNlKGZhbHNlKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldHVwQXJncyQyID0gKGFyZ3MsIGNvbnRlbnQpID0+ICh7XG4gICAgICBmb3JtYXQ6ICdodG1sJyxcbiAgICAgIC4uLmFyZ3MsXG4gICAgICBzZXQ6IHRydWUsXG4gICAgICBzZWxlY3Rpb246IHRydWUsXG4gICAgICBjb250ZW50XG4gICAgfSk7XG4gICAgY29uc3QgY2xlYW5Db250ZW50ID0gKGVkaXRvciwgYXJncykgPT4ge1xuICAgICAgaWYgKGFyZ3MuZm9ybWF0ICE9PSAncmF3Jykge1xuICAgICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgICBjb25zdCBjb250ZXh0QmxvY2sgPSBlZGl0b3IuZG9tLmdldFBhcmVudChybmcuY29tbW9uQW5jZXN0b3JDb250YWluZXIsIGVkaXRvci5kb20uaXNCbG9jayk7XG4gICAgICAgIGNvbnN0IGNvbnRleHRBcmdzID0gY29udGV4dEJsb2NrID8geyBjb250ZXh0OiBjb250ZXh0QmxvY2subm9kZU5hbWUudG9Mb3dlckNhc2UoKSB9IDoge307XG4gICAgICAgIGNvbnN0IG5vZGUgPSBlZGl0b3IucGFyc2VyLnBhcnNlKGFyZ3MuY29udGVudCwge1xuICAgICAgICAgIGZvcmNlZF9yb290X2Jsb2NrOiBmYWxzZSxcbiAgICAgICAgICAuLi5jb250ZXh0QXJncyxcbiAgICAgICAgICAuLi5hcmdzXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gSHRtbFNlcmlhbGl6ZXIoeyB2YWxpZGF0ZTogZmFsc2UgfSwgZWRpdG9yLnNjaGVtYSkuc2VyaWFsaXplKG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFyZ3MuY29udGVudDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldENvbnRlbnQkMSA9IChlZGl0b3IsIGNvbnRlbnQsIGFyZ3MgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdGVkQXJncyA9IHNldHVwQXJncyQyKGFyZ3MsIGNvbnRlbnQpO1xuICAgICAgcHJlUHJvY2Vzc1NldENvbnRlbnQoZWRpdG9yLCBkZWZhdWx0ZWRBcmdzKS5lYWNoKHVwZGF0ZWRBcmdzID0+IHtcbiAgICAgICAgY29uc3QgY2xlYW5lZENvbnRlbnQgPSBjbGVhbkNvbnRlbnQoZWRpdG9yLCB1cGRhdGVkQXJncyk7XG4gICAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICAgIHJuZ1NldENvbnRlbnQocm5nLCBybmcuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNsZWFuZWRDb250ZW50KSk7XG4gICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG4gICAgICAgIHNjcm9sbFJhbmdlSW50b1ZpZXcoZWRpdG9yLCBybmcpO1xuICAgICAgICBwb3N0UHJvY2Vzc1NldENvbnRlbnQoZWRpdG9yLCBjbGVhbmVkQ29udGVudCwgdXBkYXRlZEFyZ3MpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGRlbGV0ZUZyb21DYWxsYmFja01hcCA9IChjYWxsYmFja01hcCwgc2VsZWN0b3IsIGNhbGxiYWNrKSA9PiB7XG4gICAgICBpZiAoaGFzJDIoY2FsbGJhY2tNYXAsIHNlbGVjdG9yKSkge1xuICAgICAgICBjb25zdCBuZXdDYWxsYmFja3MgPSBmaWx0ZXIkNShjYWxsYmFja01hcFtzZWxlY3Rvcl0sIGNiID0+IGNiICE9PSBjYWxsYmFjayk7XG4gICAgICAgIGlmIChuZXdDYWxsYmFja3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgZGVsZXRlIGNhbGxiYWNrTWFwW3NlbGVjdG9yXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFja01hcFtzZWxlY3Rvcl0gPSBuZXdDYWxsYmFja3M7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBTZWxlY3RvckNoYW5nZWQgPSAoZG9tLCBlZGl0b3IpID0+IHtcbiAgICAgIGxldCBzZWxlY3RvckNoYW5nZWREYXRhO1xuICAgICAgbGV0IGN1cnJlbnRTZWxlY3RvcnM7XG4gICAgICBjb25zdCBmaW5kTWF0Y2hpbmdOb2RlID0gKHNlbGVjdG9yLCBub2RlcykgPT4gZmluZCQyKG5vZGVzLCBub2RlID0+IGRvbS5pcyhub2RlLCBzZWxlY3RvcikpO1xuICAgICAgY29uc3QgZ2V0UGFyZW50cyA9IGVsZW0gPT4gZG9tLmdldFBhcmVudHMoZWxlbSwgdW5kZWZpbmVkLCBkb20uZ2V0Um9vdCgpKTtcbiAgICAgIGNvbnN0IHNldHVwID0gKCkgPT4ge1xuICAgICAgICBzZWxlY3RvckNoYW5nZWREYXRhID0ge307XG4gICAgICAgIGN1cnJlbnRTZWxlY3RvcnMgPSB7fTtcbiAgICAgICAgZWRpdG9yLm9uKCdOb2RlQ2hhbmdlJywgZSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IGUuZWxlbWVudDtcbiAgICAgICAgICBjb25zdCBwYXJlbnRzID0gZ2V0UGFyZW50cyhub2RlKTtcbiAgICAgICAgICBjb25zdCBtYXRjaGVkU2VsZWN0b3JzID0ge307XG4gICAgICAgICAgZWFjaCRkKHNlbGVjdG9yQ2hhbmdlZERhdGEsIChjYWxsYmFja3MsIHNlbGVjdG9yKSA9PiB7XG4gICAgICAgICAgICBmaW5kTWF0Y2hpbmdOb2RlKHNlbGVjdG9yLCBwYXJlbnRzKS5lYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRTZWxlY3RvcnNbc2VsZWN0b3JdKSB7XG4gICAgICAgICAgICAgICAgZWFjaCRlKGNhbGxiYWNrcywgY2FsbGJhY2sgPT4ge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2sodHJ1ZSwge1xuICAgICAgICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50c1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdG9yc1tzZWxlY3Rvcl0gPSBjYWxsYmFja3M7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbWF0Y2hlZFNlbGVjdG9yc1tzZWxlY3Rvcl0gPSBjYWxsYmFja3M7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBlYWNoJGQoY3VycmVudFNlbGVjdG9ycywgKGNhbGxiYWNrcywgc2VsZWN0b3IpID0+IHtcbiAgICAgICAgICAgIGlmICghbWF0Y2hlZFNlbGVjdG9yc1tzZWxlY3Rvcl0pIHtcbiAgICAgICAgICAgICAgZGVsZXRlIGN1cnJlbnRTZWxlY3RvcnNbc2VsZWN0b3JdO1xuICAgICAgICAgICAgICBlYWNoJGUoY2FsbGJhY2tzLCBjYWxsYmFjayA9PiB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZmFsc2UsIHtcbiAgICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgICBzZWxlY3RvcixcbiAgICAgICAgICAgICAgICAgIHBhcmVudHNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNlbGVjdG9yQ2hhbmdlZFdpdGhVbmJpbmQ6IChzZWxlY3RvciwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICBpZiAoIXNlbGVjdG9yQ2hhbmdlZERhdGEpIHtcbiAgICAgICAgICAgIHNldHVwKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghc2VsZWN0b3JDaGFuZ2VkRGF0YVtzZWxlY3Rvcl0pIHtcbiAgICAgICAgICAgIHNlbGVjdG9yQ2hhbmdlZERhdGFbc2VsZWN0b3JdID0gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlbGVjdG9yQ2hhbmdlZERhdGFbc2VsZWN0b3JdLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgIGZpbmRNYXRjaGluZ05vZGUoc2VsZWN0b3IsIGdldFBhcmVudHMoZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCgpKSkuZWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBjdXJyZW50U2VsZWN0b3JzW3NlbGVjdG9yXSA9IHNlbGVjdG9yQ2hhbmdlZERhdGFbc2VsZWN0b3JdO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB1bmJpbmQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgZGVsZXRlRnJvbUNhbGxiYWNrTWFwKHNlbGVjdG9yQ2hhbmdlZERhdGEsIHNlbGVjdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIGRlbGV0ZUZyb21DYWxsYmFja01hcChjdXJyZW50U2VsZWN0b3JzLCBzZWxlY3RvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGlzQXR0YWNoZWRUb0RvbSA9IG5vZGUgPT4ge1xuICAgICAgcmV0dXJuICEhKG5vZGUgJiYgbm9kZS5vd25lckRvY3VtZW50KSAmJiBjb250YWlucyhTdWdhckVsZW1lbnQuZnJvbURvbShub2RlLm93bmVyRG9jdW1lbnQpLCBTdWdhckVsZW1lbnQuZnJvbURvbShub2RlKSk7XG4gICAgfTtcbiAgICBjb25zdCBpc1ZhbGlkUmFuZ2UgPSBybmcgPT4ge1xuICAgICAgaWYgKCFybmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGlzQXR0YWNoZWRUb0RvbShybmcuc3RhcnRDb250YWluZXIpICYmIGlzQXR0YWNoZWRUb0RvbShybmcuZW5kQ29udGFpbmVyKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IEVkaXRvclNlbGVjdGlvbiA9IChkb20sIHdpbiwgc2VyaWFsaXplciwgZWRpdG9yKSA9PiB7XG4gICAgICBsZXQgc2VsZWN0ZWRSYW5nZTtcbiAgICAgIGxldCBleHBsaWNpdFJhbmdlO1xuICAgICAgY29uc3Qge3NlbGVjdG9yQ2hhbmdlZFdpdGhVbmJpbmR9ID0gU2VsZWN0b3JDaGFuZ2VkKGRvbSwgZWRpdG9yKTtcbiAgICAgIGNvbnN0IHNldEN1cnNvckxvY2F0aW9uID0gKG5vZGUsIG9mZnNldCkgPT4ge1xuICAgICAgICBjb25zdCBybmcgPSBkb20uY3JlYXRlUm5nKCk7XG4gICAgICAgIGlmIChpc05vbk51bGxhYmxlKG5vZGUpICYmIGlzTm9uTnVsbGFibGUob2Zmc2V0KSkge1xuICAgICAgICAgIHJuZy5zZXRTdGFydChub2RlLCBvZmZzZXQpO1xuICAgICAgICAgIHJuZy5zZXRFbmQobm9kZSwgb2Zmc2V0KTtcbiAgICAgICAgICBzZXRSbmcocm5nKTtcbiAgICAgICAgICBjb2xsYXBzZShmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbW92ZUVuZFBvaW50KGRvbSwgcm5nLCBlZGl0b3IuZ2V0Qm9keSgpLCB0cnVlKTtcbiAgICAgICAgICBzZXRSbmcocm5nKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldENvbnRlbnQgPSBhcmdzID0+IGdldENvbnRlbnQkMShlZGl0b3IsIGFyZ3MpO1xuICAgICAgY29uc3Qgc2V0Q29udGVudCA9IChjb250ZW50LCBhcmdzKSA9PiBzZXRDb250ZW50JDEoZWRpdG9yLCBjb250ZW50LCBhcmdzKTtcbiAgICAgIGNvbnN0IGdldFN0YXJ0JDEgPSByZWFsID0+IGdldFN0YXJ0KGVkaXRvci5nZXRCb2R5KCksIGdldFJuZyQxKCksIHJlYWwpO1xuICAgICAgY29uc3QgZ2V0RW5kID0gcmVhbCA9PiBnZXRFbmQkMShlZGl0b3IuZ2V0Qm9keSgpLCBnZXRSbmckMSgpLCByZWFsKTtcbiAgICAgIGNvbnN0IGdldEJvb2ttYXJrID0gKHR5cGUsIG5vcm1hbGl6ZWQpID0+IGJvb2ttYXJrTWFuYWdlci5nZXRCb29rbWFyayh0eXBlLCBub3JtYWxpemVkKTtcbiAgICAgIGNvbnN0IG1vdmVUb0Jvb2ttYXJrID0gYm9va21hcmsgPT4gYm9va21hcmtNYW5hZ2VyLm1vdmVUb0Jvb2ttYXJrKGJvb2ttYXJrKTtcbiAgICAgIGNvbnN0IHNlbGVjdCQxID0gKG5vZGUsIGNvbnRlbnQpID0+IHtcbiAgICAgICAgc2VsZWN0KGRvbSwgbm9kZSwgY29udGVudCkuZWFjaChzZXRSbmcpO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0NvbGxhcHNlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgcm5nID0gZ2V0Um5nJDEoKSwgc2VsID0gZ2V0U2VsKCk7XG4gICAgICAgIGlmICghcm5nIHx8IHJuZy5pdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChybmcuY29tcGFyZUVuZFBvaW50cykge1xuICAgICAgICAgIHJldHVybiBybmcuY29tcGFyZUVuZFBvaW50cygnU3RhcnRUb0VuZCcsIHJuZykgPT09IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFzZWwgfHwgcm5nLmNvbGxhcHNlZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0VkaXRhYmxlID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBybmcgPSBnZXRSbmckMSgpO1xuICAgICAgICBjb25zdCBmYWtlU2VsZWN0ZWRFbGVtZW50cyA9IGVkaXRvci5nZXRCb2R5KCkucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbWNlLXNlbGVjdGVkPVwiMVwiXScpO1xuICAgICAgICBpZiAoZmFrZVNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJldHVybiBmb3JhbGwoZmFrZVNlbGVjdGVkRWxlbWVudHMsIGVsID0+IGRvbS5pc0VkaXRhYmxlKGVsLnBhcmVudEVsZW1lbnQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChybmcuc3RhcnRDb250YWluZXIgPT09IHJuZy5lbmRDb250YWluZXIpIHtcbiAgICAgICAgICByZXR1cm4gZG9tLmlzRWRpdGFibGUocm5nLnN0YXJ0Q29udGFpbmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZG9tLmlzRWRpdGFibGUocm5nLnN0YXJ0Q29udGFpbmVyKSAmJiBkb20uaXNFZGl0YWJsZShybmcuZW5kQ29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbGxhcHNlID0gdG9TdGFydCA9PiB7XG4gICAgICAgIGNvbnN0IHJuZyA9IGdldFJuZyQxKCk7XG4gICAgICAgIHJuZy5jb2xsYXBzZSghIXRvU3RhcnQpO1xuICAgICAgICBzZXRSbmcocm5nKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRTZWwgPSAoKSA9PiB3aW4uZ2V0U2VsZWN0aW9uID8gd2luLmdldFNlbGVjdGlvbigpIDogd2luLmRvY3VtZW50LnNlbGVjdGlvbjtcbiAgICAgIGNvbnN0IGdldFJuZyQxID0gKCkgPT4ge1xuICAgICAgICBsZXQgcm5nO1xuICAgICAgICBjb25zdCB0cnlDb21wYXJlQm91bmRhcnlQb2ludHMgPSAoaG93LCBzb3VyY2VSYW5nZSwgZGVzdGluYXRpb25SYW5nZSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlUmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKGhvdywgZGVzdGluYXRpb25SYW5nZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGRvYyA9IHdpbi5kb2N1bWVudDtcbiAgICAgICAgaWYgKGlzTm9uTnVsbGFibGUoZWRpdG9yLmJvb2ttYXJrKSAmJiAhaGFzRm9jdXMoZWRpdG9yKSkge1xuICAgICAgICAgIGNvbnN0IGJvb2ttYXJrID0gZ2V0Um5nKGVkaXRvcik7XG4gICAgICAgICAgaWYgKGJvb2ttYXJrLmlzU29tZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gYm9va21hcmsubWFwKHIgPT4gcHJvY2Vzc1JhbmdlcyhlZGl0b3IsIFtyXSlbMF0pLmdldE9yKGRvYy5jcmVhdGVSYW5nZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBnZXRTZWwoKTtcbiAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmICFpc1Jlc3RyaWN0ZWROb2RlKHNlbGVjdGlvbi5hbmNob3JOb2RlKSkge1xuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xuICAgICAgICAgICAgICBybmcgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJuZyA9IGRvYy5jcmVhdGVSYW5nZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm5nID0gcHJvY2Vzc1JhbmdlcyhlZGl0b3IsIFtybmddKVswXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFybmcpIHtcbiAgICAgICAgICBybmcgPSBkb2MuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNEb2N1bWVudCQxKHJuZy5zdGFydENvbnRhaW5lcikgJiYgcm5nLmNvbGxhcHNlZCkge1xuICAgICAgICAgIGNvbnN0IGVsbSA9IGRvbS5nZXRSb290KCk7XG4gICAgICAgICAgcm5nLnNldFN0YXJ0KGVsbSwgMCk7XG4gICAgICAgICAgcm5nLnNldEVuZChlbG0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxlY3RlZFJhbmdlICYmIGV4cGxpY2l0UmFuZ2UpIHtcbiAgICAgICAgICBpZiAodHJ5Q29tcGFyZUJvdW5kYXJ5UG9pbnRzKHJuZy5TVEFSVF9UT19TVEFSVCwgcm5nLCBzZWxlY3RlZFJhbmdlKSA9PT0gMCAmJiB0cnlDb21wYXJlQm91bmRhcnlQb2ludHMocm5nLkVORF9UT19FTkQsIHJuZywgc2VsZWN0ZWRSYW5nZSkgPT09IDApIHtcbiAgICAgICAgICAgIHJuZyA9IGV4cGxpY2l0UmFuZ2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgZXhwbGljaXRSYW5nZSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBybmc7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0Um5nID0gKHJuZywgZm9yd2FyZCkgPT4ge1xuICAgICAgICBpZiAoIWlzVmFsaWRSYW5nZShybmcpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbCA9IGdldFNlbCgpO1xuICAgICAgICBjb25zdCBldnQgPSBlZGl0b3IuZGlzcGF0Y2goJ1NldFNlbGVjdGlvblJhbmdlJywge1xuICAgICAgICAgIHJhbmdlOiBybmcsXG4gICAgICAgICAgZm9yd2FyZFxuICAgICAgICB9KTtcbiAgICAgICAgcm5nID0gZXZ0LnJhbmdlO1xuICAgICAgICBpZiAoc2VsKSB7XG4gICAgICAgICAgZXhwbGljaXRSYW5nZSA9IHJuZztcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICAgICAgc2VsLmFkZFJhbmdlKHJuZyk7XG4gICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZvcndhcmQgPT09IGZhbHNlICYmIHNlbC5leHRlbmQpIHtcbiAgICAgICAgICAgIHNlbC5jb2xsYXBzZShybmcuZW5kQ29udGFpbmVyLCBybmcuZW5kT2Zmc2V0KTtcbiAgICAgICAgICAgIHNlbC5leHRlbmQocm5nLnN0YXJ0Q29udGFpbmVyLCBybmcuc3RhcnRPZmZzZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxlY3RlZFJhbmdlID0gc2VsLnJhbmdlQ291bnQgPiAwID8gc2VsLmdldFJhbmdlQXQoMCkgOiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcm5nLmNvbGxhcHNlZCAmJiBybmcuc3RhcnRDb250YWluZXIgPT09IHJuZy5lbmRDb250YWluZXIgJiYgKHNlbCA9PT0gbnVsbCB8fCBzZWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbC5zZXRCYXNlQW5kRXh0ZW50KSkge1xuICAgICAgICAgIGlmIChybmcuZW5kT2Zmc2V0IC0gcm5nLnN0YXJ0T2Zmc2V0IDwgMikge1xuICAgICAgICAgICAgaWYgKHJuZy5zdGFydENvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHJuZy5zdGFydENvbnRhaW5lci5jaGlsZE5vZGVzW3JuZy5zdGFydE9mZnNldF07XG4gICAgICAgICAgICAgIGlmIChub2RlICYmIG5vZGUubm9kZU5hbWUgPT09ICdJTUcnKSB7XG4gICAgICAgICAgICAgICAgc2VsLnNldEJhc2VBbmRFeHRlbnQocm5nLnN0YXJ0Q29udGFpbmVyLCBybmcuc3RhcnRPZmZzZXQsIHJuZy5lbmRDb250YWluZXIsIHJuZy5lbmRPZmZzZXQpO1xuICAgICAgICAgICAgICAgIGlmIChzZWwuYW5jaG9yTm9kZSAhPT0gcm5nLnN0YXJ0Q29udGFpbmVyIHx8IHNlbC5mb2N1c05vZGUgIT09IHJuZy5lbmRDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgIHNlbC5zZXRCYXNlQW5kRXh0ZW50KG5vZGUsIDAsIG5vZGUsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ0FmdGVyU2V0U2VsZWN0aW9uUmFuZ2UnLCB7XG4gICAgICAgICAgcmFuZ2U6IHJuZyxcbiAgICAgICAgICBmb3J3YXJkXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldE5vZGUgPSBlbG0gPT4ge1xuICAgICAgICBzZXRDb250ZW50KGRvbS5nZXRPdXRlckhUTUwoZWxtKSk7XG4gICAgICAgIHJldHVybiBlbG07XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0Tm9kZSQxID0gKCkgPT4gZ2V0Tm9kZShlZGl0b3IuZ2V0Qm9keSgpLCBnZXRSbmckMSgpKTtcbiAgICAgIGNvbnN0IGdldFNlbGVjdGVkQmxvY2tzJDEgPSAoc3RhcnRFbG0sIGVuZEVsbSkgPT4gZ2V0U2VsZWN0ZWRCbG9ja3MoZG9tLCBnZXRSbmckMSgpLCBzdGFydEVsbSwgZW5kRWxtKTtcbiAgICAgIGNvbnN0IGlzRm9yd2FyZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsID0gZ2V0U2VsKCk7XG4gICAgICAgIGNvbnN0IGFuY2hvck5vZGUgPSBzZWwgPT09IG51bGwgfHwgc2VsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWwuYW5jaG9yTm9kZTtcbiAgICAgICAgY29uc3QgZm9jdXNOb2RlID0gc2VsID09PSBudWxsIHx8IHNlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsLmZvY3VzTm9kZTtcbiAgICAgICAgaWYgKCFzZWwgfHwgIWFuY2hvck5vZGUgfHwgIWZvY3VzTm9kZSB8fCBpc1Jlc3RyaWN0ZWROb2RlKGFuY2hvck5vZGUpIHx8IGlzUmVzdHJpY3RlZE5vZGUoZm9jdXNOb2RlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFuY2hvclJhbmdlID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgICBjb25zdCBmb2N1c1JhbmdlID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGFuY2hvclJhbmdlLnNldFN0YXJ0KGFuY2hvck5vZGUsIHNlbC5hbmNob3JPZmZzZXQpO1xuICAgICAgICAgIGFuY2hvclJhbmdlLmNvbGxhcHNlKHRydWUpO1xuICAgICAgICAgIGZvY3VzUmFuZ2Uuc2V0U3RhcnQoZm9jdXNOb2RlLCBzZWwuZm9jdXNPZmZzZXQpO1xuICAgICAgICAgIGZvY3VzUmFuZ2UuY29sbGFwc2UodHJ1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYW5jaG9yUmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKGFuY2hvclJhbmdlLlNUQVJUX1RPX1NUQVJULCBmb2N1c1JhbmdlKSA8PSAwO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgcm5nID0gZ2V0Um5nJDEoKTtcbiAgICAgICAgY29uc3Qgc2VsID0gZ2V0U2VsKCk7XG4gICAgICAgIGlmICghaGFzTXVsdGlwbGVSYW5nZXMoc2VsKSAmJiBoYXNBbnlSYW5nZXMoZWRpdG9yKSkge1xuICAgICAgICAgIGNvbnN0IG5vcm1SbmcgPSBub3JtYWxpemUkMihkb20sIHJuZyk7XG4gICAgICAgICAgbm9ybVJuZy5lYWNoKG5vcm1SbmcgPT4ge1xuICAgICAgICAgICAgc2V0Um5nKG5vcm1SbmcsIGlzRm9yd2FyZCgpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gbm9ybVJuZy5nZXRPcihybmcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBybmc7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VsZWN0b3JDaGFuZ2VkID0gKHNlbGVjdG9yLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBzZWxlY3RvckNoYW5nZWRXaXRoVW5iaW5kKHNlbGVjdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiBleHBvcnRzO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldFNjcm9sbENvbnRhaW5lciA9ICgpID0+IHtcbiAgICAgICAgbGV0IHNjcm9sbENvbnRhaW5lcjtcbiAgICAgICAgbGV0IG5vZGUgPSBkb20uZ2V0Um9vdCgpO1xuICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlLm5vZGVOYW1lICE9PSAnQk9EWScpIHtcbiAgICAgICAgICBpZiAobm9kZS5zY3JvbGxIZWlnaHQgPiBub2RlLmNsaWVudEhlaWdodCkge1xuICAgICAgICAgICAgc2Nyb2xsQ29udGFpbmVyID0gbm9kZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY3JvbGxDb250YWluZXI7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2Nyb2xsSW50b1ZpZXcgPSAoZWxtLCBhbGlnblRvVG9wKSA9PiB7XG4gICAgICAgIGlmIChpc05vbk51bGxhYmxlKGVsbSkpIHtcbiAgICAgICAgICBzY3JvbGxFbGVtZW50SW50b1ZpZXcoZWRpdG9yLCBlbG0sIGFsaWduVG9Ub3ApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjcm9sbFJhbmdlSW50b1ZpZXcoZWRpdG9yLCBnZXRSbmckMSgpLCBhbGlnblRvVG9wKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBsYWNlQ2FyZXRBdCA9IChjbGllbnRYLCBjbGllbnRZKSA9PiBzZXRSbmcoZnJvbVBvaW50KGNsaWVudFgsIGNsaWVudFksIGVkaXRvci5nZXREb2MoKSkpO1xuICAgICAgY29uc3QgZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBybmcgPSBnZXRSbmckMSgpO1xuICAgICAgICByZXR1cm4gcm5nLmNvbGxhcHNlZCA/IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQocm5nKS5nZXRDbGllbnRSZWN0cygpWzBdIDogcm5nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICAgIHdpbiA9IHNlbGVjdGVkUmFuZ2UgPSBleHBsaWNpdFJhbmdlID0gbnVsbDtcbiAgICAgICAgY29udHJvbFNlbGVjdGlvbi5kZXN0cm95KCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZXhwYW5kID0gKG9wdGlvbnMgPSB7IHR5cGU6ICd3b3JkJyB9KSA9PiBzZXRSbmcoUmFuZ2VVdGlscyhkb20pLmV4cGFuZChnZXRSbmckMSgpLCBvcHRpb25zKSk7XG4gICAgICBjb25zdCBleHBvcnRzID0ge1xuICAgICAgICBkb20sXG4gICAgICAgIHdpbixcbiAgICAgICAgc2VyaWFsaXplcixcbiAgICAgICAgZWRpdG9yLFxuICAgICAgICBleHBhbmQsXG4gICAgICAgIGNvbGxhcHNlLFxuICAgICAgICBzZXRDdXJzb3JMb2NhdGlvbixcbiAgICAgICAgZ2V0Q29udGVudCxcbiAgICAgICAgc2V0Q29udGVudCxcbiAgICAgICAgZ2V0Qm9va21hcmssXG4gICAgICAgIG1vdmVUb0Jvb2ttYXJrLFxuICAgICAgICBzZWxlY3Q6IHNlbGVjdCQxLFxuICAgICAgICBpc0NvbGxhcHNlZCxcbiAgICAgICAgaXNFZGl0YWJsZSxcbiAgICAgICAgaXNGb3J3YXJkLFxuICAgICAgICBzZXROb2RlLFxuICAgICAgICBnZXROb2RlOiBnZXROb2RlJDEsXG4gICAgICAgIGdldFNlbCxcbiAgICAgICAgc2V0Um5nLFxuICAgICAgICBnZXRSbmc6IGdldFJuZyQxLFxuICAgICAgICBnZXRTdGFydDogZ2V0U3RhcnQkMSxcbiAgICAgICAgZ2V0RW5kLFxuICAgICAgICBnZXRTZWxlY3RlZEJsb2NrczogZ2V0U2VsZWN0ZWRCbG9ja3MkMSxcbiAgICAgICAgbm9ybWFsaXplLFxuICAgICAgICBzZWxlY3RvckNoYW5nZWQsXG4gICAgICAgIHNlbGVjdG9yQ2hhbmdlZFdpdGhVbmJpbmQsXG4gICAgICAgIGdldFNjcm9sbENvbnRhaW5lcixcbiAgICAgICAgc2Nyb2xsSW50b1ZpZXcsXG4gICAgICAgIHBsYWNlQ2FyZXRBdCxcbiAgICAgICAgZ2V0Qm91bmRpbmdDbGllbnRSZWN0LFxuICAgICAgICBkZXN0cm95XG4gICAgICB9O1xuICAgICAgY29uc3QgYm9va21hcmtNYW5hZ2VyID0gQm9va21hcmtNYW5hZ2VyKGV4cG9ydHMpO1xuICAgICAgY29uc3QgY29udHJvbFNlbGVjdGlvbiA9IENvbnRyb2xTZWxlY3Rpb24oZXhwb3J0cywgZWRpdG9yKTtcbiAgICAgIGV4cG9ydHMuYm9va21hcmtNYW5hZ2VyID0gYm9va21hcmtNYW5hZ2VyO1xuICAgICAgZXhwb3J0cy5jb250cm9sU2VsZWN0aW9uID0gY29udHJvbFNlbGVjdGlvbjtcbiAgICAgIHJldHVybiBleHBvcnRzO1xuICAgIH07XG5cbiAgICBjb25zdCByZWdpc3RlciQzID0gKGh0bWxQYXJzZXIsIHNldHRpbmdzLCBkb20pID0+IHtcbiAgICAgIGh0bWxQYXJzZXIuYWRkQXR0cmlidXRlRmlsdGVyKCdkYXRhLW1jZS10YWJpbmRleCcsIChub2RlcywgbmFtZSkgPT4ge1xuICAgICAgICBsZXQgaSA9IG5vZGVzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgICBub2RlLmF0dHIoJ3RhYmluZGV4Jywgbm9kZS5hdHRyKCdkYXRhLW1jZS10YWJpbmRleCcpKTtcbiAgICAgICAgICBub2RlLmF0dHIobmFtZSwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaHRtbFBhcnNlci5hZGRBdHRyaWJ1dGVGaWx0ZXIoJ3NyYyxocmVmLHN0eWxlJywgKG5vZGVzLCBuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGludGVybmFsTmFtZSA9ICdkYXRhLW1jZS0nICsgbmFtZTtcbiAgICAgICAgY29uc3QgdXJsQ29udmVydGVyID0gc2V0dGluZ3MudXJsX2NvbnZlcnRlcjtcbiAgICAgICAgY29uc3QgdXJsQ29udmVydGVyU2NvcGUgPSBzZXR0aW5ncy51cmxfY29udmVydGVyX3Njb3BlO1xuICAgICAgICBsZXQgaSA9IG5vZGVzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgICBsZXQgdmFsdWUgPSBub2RlLmF0dHIoaW50ZXJuYWxOYW1lKTtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbm9kZS5hdHRyKG5hbWUsIHZhbHVlLmxlbmd0aCA+IDAgPyB2YWx1ZSA6IG51bGwpO1xuICAgICAgICAgICAgbm9kZS5hdHRyKGludGVybmFsTmFtZSwgbnVsbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gbm9kZS5hdHRyKG5hbWUpO1xuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdzdHlsZScpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBkb20uc2VyaWFsaXplU3R5bGUoZG9tLnBhcnNlU3R5bGUodmFsdWUpLCBub2RlLm5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh1cmxDb252ZXJ0ZXIpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSB1cmxDb252ZXJ0ZXIuY2FsbCh1cmxDb252ZXJ0ZXJTY29wZSwgdmFsdWUsIG5hbWUsIG5vZGUubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlLmF0dHIobmFtZSwgdmFsdWUubGVuZ3RoID4gMCA/IHZhbHVlIDogbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGh0bWxQYXJzZXIuYWRkQXR0cmlidXRlRmlsdGVyKCdjbGFzcycsIG5vZGVzID0+IHtcbiAgICAgICAgbGV0IGkgPSBub2Rlcy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgbGV0IHZhbHVlID0gbm9kZS5hdHRyKCdjbGFzcycpO1xuICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8oPzpefFxccyltY2UtaXRlbS1cXHcrKD8hXFxTKS9nLCAnJyk7XG4gICAgICAgICAgICBub2RlLmF0dHIoJ2NsYXNzJywgdmFsdWUubGVuZ3RoID4gMCA/IHZhbHVlIDogbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGh0bWxQYXJzZXIuYWRkQXR0cmlidXRlRmlsdGVyKCdkYXRhLW1jZS10eXBlJywgKG5vZGVzLCBuYW1lLCBhcmdzKSA9PiB7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICAgIGlmIChub2RlLmF0dHIoJ2RhdGEtbWNlLXR5cGUnKSA9PT0gJ2Jvb2ttYXJrJyAmJiAhYXJncy5jbGVhbnVwKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNDaGlsZHJlbiA9IE9wdGlvbmFsLmZyb20obm9kZS5maXJzdENoaWxkKS5leGlzdHMoZmlyc3RDaGlsZCA9PiB7XG4gICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgcmV0dXJuICFpc1p3c3AkMSgoX2EgPSBmaXJzdENoaWxkLnZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChoYXNDaGlsZHJlbikge1xuICAgICAgICAgICAgICBub2RlLnVud3JhcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaHRtbFBhcnNlci5hZGROb2RlRmlsdGVyKCdub3NjcmlwdCcsIG5vZGVzID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBsZXQgaSA9IG5vZGVzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpXS5maXJzdENoaWxkO1xuICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICBub2RlLnZhbHVlID0gRW50aXRpZXMuZGVjb2RlKChfYSA9IG5vZGUudmFsdWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaHRtbFBhcnNlci5hZGROb2RlRmlsdGVyKCdzY3JpcHQsc3R5bGUnLCAobm9kZXMsIG5hbWUpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCB0cmltID0gdmFsdWUgPT4ge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC8oPCEtLVxcW0NEQVRBXFxbfFxcXVxcXS0tPikvZywgJ1xcbicpLnJlcGxhY2UoL15bXFxyXFxuXSp8W1xcclxcbl0qJC9nLCAnJykucmVwbGFjZSgvXlxccyooKDwhLS0pPyhcXHMqXFwvXFwvKT9cXHMqPCFcXFtDREFUQVxcW3woPCEtLVxccyopP1xcL1xcKlxccyo8IVxcW0NEQVRBXFxbXFxzKlxcKlxcL3woXFwvXFwvKT9cXHMqPCEtLXxcXC9cXCpcXHMqPCEtLVxccypcXCpcXC8pXFxzKltcXHJcXG5dKi9naSwgJycpLnJlcGxhY2UoL1xccyooXFwvXFwqXFxzKlxcXVxcXT5cXHMqXFwqXFwvKC0tPik/fFxccypcXC9cXC9cXHMqXFxdXFxdPigtLT4pP3xcXC9cXC9cXHMqKC0tPik/fFxcXVxcXT58XFwvXFwqXFxzKi0tPlxccypcXCpcXC98XFxzKi0tPlxccyopXFxzKiQvZywgJycpO1xuICAgICAgICB9O1xuICAgICAgICBsZXQgaSA9IG5vZGVzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgICBjb25zdCBmaXJzdENoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gKF9hID0gZmlyc3RDaGlsZCA9PT0gbnVsbCB8fCBmaXJzdENoaWxkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBmaXJzdENoaWxkLnZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ3NjcmlwdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBub2RlLmF0dHIoJ3R5cGUnKTtcbiAgICAgICAgICAgIGlmICh0eXBlKSB7XG4gICAgICAgICAgICAgIG5vZGUuYXR0cigndHlwZScsIHR5cGUgPT09ICdtY2Utbm8vdHlwZScgPyBudWxsIDogdHlwZS5yZXBsYWNlKC9ebWNlXFwtLywgJycpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5lbGVtZW50X2Zvcm1hdCA9PT0gJ3hodG1sJyAmJiBmaXJzdENoaWxkICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgZmlyc3RDaGlsZC52YWx1ZSA9ICcvLyA8IVtDREFUQVtcXG4nICsgdHJpbSh2YWx1ZSkgKyAnXFxuLy8gXV0+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNldHRpbmdzLmVsZW1lbnRfZm9ybWF0ID09PSAneGh0bWwnICYmIGZpcnN0Q2hpbGQgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBmaXJzdENoaWxkLnZhbHVlID0gJzwhLS1cXG4nICsgdHJpbSh2YWx1ZSkgKyAnXFxuLS0+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaHRtbFBhcnNlci5hZGROb2RlRmlsdGVyKCcjY29tbWVudCcsIG5vZGVzID0+IHtcbiAgICAgICAgbGV0IGkgPSBub2Rlcy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBub2RlLnZhbHVlO1xuICAgICAgICAgIGlmIChzZXR0aW5ncy5wcmVzZXJ2ZV9jZGF0YSAmJiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhbHVlLmluZGV4T2YoJ1tDREFUQVsnKSkgPT09IDApIHtcbiAgICAgICAgICAgIG5vZGUubmFtZSA9ICcjY2RhdGEnO1xuICAgICAgICAgICAgbm9kZS50eXBlID0gNDtcbiAgICAgICAgICAgIG5vZGUudmFsdWUgPSBkb20uZGVjb2RlKHZhbHVlLnJlcGxhY2UoL15cXFtDREFUQVxcW3xcXF1cXF0kL2csICcnKSk7XG4gICAgICAgICAgfSBlbHNlIGlmICgodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhbHVlLmluZGV4T2YoJ21jZTpwcm90ZWN0ZWQgJykpID09PSAwKSB7XG4gICAgICAgICAgICBub2RlLm5hbWUgPSAnI3RleHQnO1xuICAgICAgICAgICAgbm9kZS50eXBlID0gMztcbiAgICAgICAgICAgIG5vZGUucmF3ID0gdHJ1ZTtcbiAgICAgICAgICAgIG5vZGUudmFsdWUgPSB1bmVzY2FwZSh2YWx1ZSkuc3Vic3RyKDE0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaHRtbFBhcnNlci5hZGROb2RlRmlsdGVyKCd4bWw6bmFtZXNwYWNlLGlucHV0JywgKG5vZGVzLCBuYW1lKSA9PiB7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09IDcpIHtcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChuYW1lID09PSAnaW5wdXQnICYmICFub2RlLmF0dHIoJ3R5cGUnKSkge1xuICAgICAgICAgICAgICBub2RlLmF0dHIoJ3R5cGUnLCAndGV4dCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBodG1sUGFyc2VyLmFkZEF0dHJpYnV0ZUZpbHRlcignZGF0YS1tY2UtdHlwZScsIG5vZGVzID0+IHtcbiAgICAgICAgZWFjaCRlKG5vZGVzLCBub2RlID0+IHtcbiAgICAgICAgICBpZiAobm9kZS5hdHRyKCdkYXRhLW1jZS10eXBlJykgPT09ICdmb3JtYXQtY2FyZXQnKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5pc0VtcHR5KGh0bWxQYXJzZXIuc2NoZW1hLmdldE5vbkVtcHR5RWxlbWVudHMoKSkpIHtcbiAgICAgICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5vZGUudW53cmFwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgaHRtbFBhcnNlci5hZGRBdHRyaWJ1dGVGaWx0ZXIoJ2RhdGEtbWNlLXNyYyxkYXRhLW1jZS1ocmVmLGRhdGEtbWNlLXN0eWxlLCcgKyAnZGF0YS1tY2Utc2VsZWN0ZWQsZGF0YS1tY2UtZXhwYW5kbyxkYXRhLW1jZS1ibG9jaywnICsgJ2RhdGEtbWNlLXR5cGUsZGF0YS1tY2UtcmVzaXplLGRhdGEtbWNlLXBsYWNlaG9sZGVyJywgKG5vZGVzLCBuYW1lKSA9PiB7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgbm9kZXNbaV0uYXR0cihuYW1lLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoc2V0dGluZ3MucmVtb3ZlX3RyYWlsaW5nX2Jycykge1xuICAgICAgICBhZGROb2RlRmlsdGVyKHNldHRpbmdzLCBodG1sUGFyc2VyLCBodG1sUGFyc2VyLnNjaGVtYSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB0cmltVHJhaWxpbmdCciA9IHJvb3ROb2RlID0+IHtcbiAgICAgIGNvbnN0IGlzQnIgPSBub2RlID0+IHtcbiAgICAgICAgcmV0dXJuIChub2RlID09PSBudWxsIHx8IG5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG5vZGUubmFtZSkgPT09ICdicic7XG4gICAgICB9O1xuICAgICAgY29uc3QgYnJOb2RlMSA9IHJvb3ROb2RlLmxhc3RDaGlsZDtcbiAgICAgIGlmIChpc0JyKGJyTm9kZTEpKSB7XG4gICAgICAgIGNvbnN0IGJyTm9kZTIgPSBick5vZGUxLnByZXY7XG4gICAgICAgIGlmIChpc0JyKGJyTm9kZTIpKSB7XG4gICAgICAgICAgYnJOb2RlMS5yZW1vdmUoKTtcbiAgICAgICAgICBick5vZGUyLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHByZVByb2Nlc3MkMSA9IChlZGl0b3IsIG5vZGUsIGFyZ3MpID0+IHtcbiAgICAgIGxldCBvbGREb2M7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgbGV0IGNsb25lZE5vZGUgPSBub2RlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgIGNvbnN0IGltcGwgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbjtcbiAgICAgIGlmIChpbXBsLmNyZWF0ZUhUTUxEb2N1bWVudCkge1xuICAgICAgICBjb25zdCBkb2MgPSBpbXBsLmNyZWF0ZUhUTUxEb2N1bWVudCgnJyk7XG4gICAgICAgIFRvb2xzLmVhY2goY2xvbmVkTm9kZS5ub2RlTmFtZSA9PT0gJ0JPRFknID8gY2xvbmVkTm9kZS5jaGlsZE5vZGVzIDogW2Nsb25lZE5vZGVdLCBub2RlID0+IHtcbiAgICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChkb2MuaW1wb3J0Tm9kZShub2RlLCB0cnVlKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY2xvbmVkTm9kZS5ub2RlTmFtZSAhPT0gJ0JPRFknKSB7XG4gICAgICAgICAgY2xvbmVkTm9kZSA9IGRvYy5ib2R5LmZpcnN0Q2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xvbmVkTm9kZSA9IGRvYy5ib2R5O1xuICAgICAgICB9XG4gICAgICAgIG9sZERvYyA9IGRvbS5kb2M7XG4gICAgICAgIGRvbS5kb2MgPSBkb2M7XG4gICAgICB9XG4gICAgICBmaXJlUHJlUHJvY2VzcyhlZGl0b3IsIHtcbiAgICAgICAgLi4uYXJncyxcbiAgICAgICAgbm9kZTogY2xvbmVkTm9kZVxuICAgICAgfSk7XG4gICAgICBpZiAob2xkRG9jKSB7XG4gICAgICAgIGRvbS5kb2MgPSBvbGREb2M7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xvbmVkTm9kZTtcbiAgICB9O1xuICAgIGNvbnN0IHNob3VsZEZpcmVFdmVudCA9IChlZGl0b3IsIGFyZ3MpID0+IHtcbiAgICAgIHJldHVybiBpc05vbk51bGxhYmxlKGVkaXRvcikgJiYgZWRpdG9yLmhhc0V2ZW50TGlzdGVuZXJzKCdQcmVQcm9jZXNzJykgJiYgIWFyZ3Mubm9fZXZlbnRzO1xuICAgIH07XG4gICAgY29uc3QgcHJvY2VzcyQxID0gKGVkaXRvciwgbm9kZSwgYXJncykgPT4ge1xuICAgICAgcmV0dXJuIHNob3VsZEZpcmVFdmVudChlZGl0b3IsIGFyZ3MpID8gcHJlUHJvY2VzcyQxKGVkaXRvciwgbm9kZSwgYXJncykgOiBub2RlO1xuICAgIH07XG5cbiAgICBjb25zdCBhZGRUZW1wQXR0ciA9IChodG1sUGFyc2VyLCB0ZW1wQXR0cnMsIG5hbWUpID0+IHtcbiAgICAgIGlmIChUb29scy5pbkFycmF5KHRlbXBBdHRycywgbmFtZSkgPT09IC0xKSB7XG4gICAgICAgIGh0bWxQYXJzZXIuYWRkQXR0cmlidXRlRmlsdGVyKG5hbWUsIChub2RlcywgbmFtZSkgPT4ge1xuICAgICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIG5vZGVzW2ldLmF0dHIobmFtZSwgbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGVtcEF0dHJzLnB1c2gobmFtZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBwb3N0UHJvY2VzcyA9IChlZGl0b3IsIGFyZ3MsIGNvbnRlbnQpID0+IHtcbiAgICAgIGlmICghYXJncy5ub19ldmVudHMgJiYgZWRpdG9yKSB7XG4gICAgICAgIGNvbnN0IG91dEFyZ3MgPSBmaXJlUG9zdFByb2Nlc3MoZWRpdG9yLCB7XG4gICAgICAgICAgLi4uYXJncyxcbiAgICAgICAgICBjb250ZW50XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gb3V0QXJncy5jb250ZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRIdG1sRnJvbU5vZGUgPSAoZG9tLCBub2RlLCBhcmdzKSA9PiB7XG4gICAgICBjb25zdCBodG1sID0gdHJpbSQxKGFyZ3MuZ2V0SW5uZXIgPyBub2RlLmlubmVySFRNTCA6IGRvbS5nZXRPdXRlckhUTUwobm9kZSkpO1xuICAgICAgcmV0dXJuIGFyZ3Muc2VsZWN0aW9uIHx8IGlzV3NQcmVzZXJ2ZUVsZW1lbnQoU3VnYXJFbGVtZW50LmZyb21Eb20obm9kZSkpID8gaHRtbCA6IFRvb2xzLnRyaW0oaHRtbCk7XG4gICAgfTtcbiAgICBjb25zdCBwYXJzZUh0bWwgPSAoaHRtbFBhcnNlciwgaHRtbCwgYXJncykgPT4ge1xuICAgICAgY29uc3QgcGFyc2VyQXJncyA9IGFyZ3Muc2VsZWN0aW9uID8ge1xuICAgICAgICBmb3JjZWRfcm9vdF9ibG9jazogZmFsc2UsXG4gICAgICAgIC4uLmFyZ3NcbiAgICAgIH0gOiBhcmdzO1xuICAgICAgY29uc3Qgcm9vdE5vZGUgPSBodG1sUGFyc2VyLnBhcnNlKGh0bWwsIHBhcnNlckFyZ3MpO1xuICAgICAgdHJpbVRyYWlsaW5nQnIocm9vdE5vZGUpO1xuICAgICAgcmV0dXJuIHJvb3ROb2RlO1xuICAgIH07XG4gICAgY29uc3Qgc2VyaWFsaXplTm9kZSA9IChzZXR0aW5ncywgc2NoZW1hLCBub2RlKSA9PiB7XG4gICAgICBjb25zdCBodG1sU2VyaWFsaXplciA9IEh0bWxTZXJpYWxpemVyKHNldHRpbmdzLCBzY2hlbWEpO1xuICAgICAgcmV0dXJuIGh0bWxTZXJpYWxpemVyLnNlcmlhbGl6ZShub2RlKTtcbiAgICB9O1xuICAgIGNvbnN0IHRvSHRtbCA9IChlZGl0b3IsIHNldHRpbmdzLCBzY2hlbWEsIHJvb3ROb2RlLCBhcmdzKSA9PiB7XG4gICAgICBjb25zdCBjb250ZW50ID0gc2VyaWFsaXplTm9kZShzZXR0aW5ncywgc2NoZW1hLCByb290Tm9kZSk7XG4gICAgICByZXR1cm4gcG9zdFByb2Nlc3MoZWRpdG9yLCBhcmdzLCBjb250ZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IERvbVNlcmlhbGl6ZXJJbXBsID0gKHNldHRpbmdzLCBlZGl0b3IpID0+IHtcbiAgICAgIGNvbnN0IHRlbXBBdHRycyA9IFsnZGF0YS1tY2Utc2VsZWN0ZWQnXTtcbiAgICAgIGNvbnN0IGRlZmF1bHRlZFNldHRpbmdzID0ge1xuICAgICAgICBlbnRpdHlfZW5jb2Rpbmc6ICduYW1lZCcsXG4gICAgICAgIHJlbW92ZV90cmFpbGluZ19icnM6IHRydWUsXG4gICAgICAgIHBhZF9lbXB0eV93aXRoX2JyOiBmYWxzZSxcbiAgICAgICAgLi4uc2V0dGluZ3NcbiAgICAgIH07XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IgJiYgZWRpdG9yLmRvbSA/IGVkaXRvci5kb20gOiBET01VdGlscy5ET007XG4gICAgICBjb25zdCBzY2hlbWEgPSBlZGl0b3IgJiYgZWRpdG9yLnNjaGVtYSA/IGVkaXRvci5zY2hlbWEgOiBTY2hlbWEoZGVmYXVsdGVkU2V0dGluZ3MpO1xuICAgICAgY29uc3QgaHRtbFBhcnNlciA9IERvbVBhcnNlcihkZWZhdWx0ZWRTZXR0aW5ncywgc2NoZW1hKTtcbiAgICAgIHJlZ2lzdGVyJDMoaHRtbFBhcnNlciwgZGVmYXVsdGVkU2V0dGluZ3MsIGRvbSk7XG4gICAgICBjb25zdCBzZXJpYWxpemUgPSAobm9kZSwgcGFyc2VyQXJncyA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB7XG4gICAgICAgICAgZm9ybWF0OiAnaHRtbCcsXG4gICAgICAgICAgLi4ucGFyc2VyQXJnc1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0YXJnZXROb2RlID0gcHJvY2VzcyQxKGVkaXRvciwgbm9kZSwgYXJncyk7XG4gICAgICAgIGNvbnN0IGh0bWwgPSBnZXRIdG1sRnJvbU5vZGUoZG9tLCB0YXJnZXROb2RlLCBhcmdzKTtcbiAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSBwYXJzZUh0bWwoaHRtbFBhcnNlciwgaHRtbCwgYXJncyk7XG4gICAgICAgIHJldHVybiBhcmdzLmZvcm1hdCA9PT0gJ3RyZWUnID8gcm9vdE5vZGUgOiB0b0h0bWwoZWRpdG9yLCBkZWZhdWx0ZWRTZXR0aW5ncywgc2NoZW1hLCByb290Tm9kZSwgYXJncyk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBhZGROb2RlRmlsdGVyOiBodG1sUGFyc2VyLmFkZE5vZGVGaWx0ZXIsXG4gICAgICAgIGFkZEF0dHJpYnV0ZUZpbHRlcjogaHRtbFBhcnNlci5hZGRBdHRyaWJ1dGVGaWx0ZXIsXG4gICAgICAgIHNlcmlhbGl6ZTogc2VyaWFsaXplLFxuICAgICAgICBhZGRSdWxlczogc2NoZW1hLmFkZFZhbGlkRWxlbWVudHMsXG4gICAgICAgIHNldFJ1bGVzOiBzY2hlbWEuc2V0VmFsaWRFbGVtZW50cyxcbiAgICAgICAgYWRkVGVtcEF0dHI6IGN1cnJ5KGFkZFRlbXBBdHRyLCBodG1sUGFyc2VyLCB0ZW1wQXR0cnMpLFxuICAgICAgICBnZXRUZW1wQXR0cnM6IGNvbnN0YW50KHRlbXBBdHRycyksXG4gICAgICAgIGdldE5vZGVGaWx0ZXJzOiBodG1sUGFyc2VyLmdldE5vZGVGaWx0ZXJzLFxuICAgICAgICBnZXRBdHRyaWJ1dGVGaWx0ZXJzOiBodG1sUGFyc2VyLmdldEF0dHJpYnV0ZUZpbHRlcnMsXG4gICAgICAgIHJlbW92ZU5vZGVGaWx0ZXI6IGh0bWxQYXJzZXIucmVtb3ZlTm9kZUZpbHRlcixcbiAgICAgICAgcmVtb3ZlQXR0cmlidXRlRmlsdGVyOiBodG1sUGFyc2VyLnJlbW92ZUF0dHJpYnV0ZUZpbHRlclxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgRG9tU2VyaWFsaXplciA9IChzZXR0aW5ncywgZWRpdG9yKSA9PiB7XG4gICAgICBjb25zdCBkb21TZXJpYWxpemVyID0gRG9tU2VyaWFsaXplckltcGwoc2V0dGluZ3MsIGVkaXRvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzY2hlbWE6IGRvbVNlcmlhbGl6ZXIuc2NoZW1hLFxuICAgICAgICBhZGROb2RlRmlsdGVyOiBkb21TZXJpYWxpemVyLmFkZE5vZGVGaWx0ZXIsXG4gICAgICAgIGFkZEF0dHJpYnV0ZUZpbHRlcjogZG9tU2VyaWFsaXplci5hZGRBdHRyaWJ1dGVGaWx0ZXIsXG4gICAgICAgIHNlcmlhbGl6ZTogZG9tU2VyaWFsaXplci5zZXJpYWxpemUsXG4gICAgICAgIGFkZFJ1bGVzOiBkb21TZXJpYWxpemVyLmFkZFJ1bGVzLFxuICAgICAgICBzZXRSdWxlczogZG9tU2VyaWFsaXplci5zZXRSdWxlcyxcbiAgICAgICAgYWRkVGVtcEF0dHI6IGRvbVNlcmlhbGl6ZXIuYWRkVGVtcEF0dHIsXG4gICAgICAgIGdldFRlbXBBdHRyczogZG9tU2VyaWFsaXplci5nZXRUZW1wQXR0cnMsXG4gICAgICAgIGdldE5vZGVGaWx0ZXJzOiBkb21TZXJpYWxpemVyLmdldE5vZGVGaWx0ZXJzLFxuICAgICAgICBnZXRBdHRyaWJ1dGVGaWx0ZXJzOiBkb21TZXJpYWxpemVyLmdldEF0dHJpYnV0ZUZpbHRlcnMsXG4gICAgICAgIHJlbW92ZU5vZGVGaWx0ZXI6IGRvbVNlcmlhbGl6ZXIucmVtb3ZlTm9kZUZpbHRlcixcbiAgICAgICAgcmVtb3ZlQXR0cmlidXRlRmlsdGVyOiBkb21TZXJpYWxpemVyLnJlbW92ZUF0dHJpYnV0ZUZpbHRlclxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGVmYXVsdEZvcm1hdCQxID0gJ2h0bWwnO1xuICAgIGNvbnN0IHNldHVwQXJncyQxID0gKGFyZ3MsIGZvcm1hdCkgPT4gKHtcbiAgICAgIC4uLmFyZ3MsXG4gICAgICBmb3JtYXQsXG4gICAgICBnZXQ6IHRydWUsXG4gICAgICBnZXRJbm5lcjogdHJ1ZVxuICAgIH0pO1xuICAgIGNvbnN0IGdldENvbnRlbnQgPSAoZWRpdG9yLCBhcmdzID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdCA9IGFyZ3MuZm9ybWF0ID8gYXJncy5mb3JtYXQgOiBkZWZhdWx0Rm9ybWF0JDE7XG4gICAgICBjb25zdCBkZWZhdWx0ZWRBcmdzID0gc2V0dXBBcmdzJDEoYXJncywgZm9ybWF0KTtcbiAgICAgIHJldHVybiBwcmVQcm9jZXNzR2V0Q29udGVudChlZGl0b3IsIGRlZmF1bHRlZEFyZ3MpLmZvbGQoaWRlbnRpdHksIHVwZGF0ZWRBcmdzID0+IHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IGdldENvbnRlbnQkMihlZGl0b3IsIHVwZGF0ZWRBcmdzKTtcbiAgICAgICAgcmV0dXJuIHBvc3RQcm9jZXNzR2V0Q29udGVudChlZGl0b3IsIGNvbnRlbnQsIHVwZGF0ZWRBcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBkZWZhdWx0Rm9ybWF0ID0gJ2h0bWwnO1xuICAgIGNvbnN0IHNldHVwQXJncyA9IChhcmdzLCBjb250ZW50KSA9PiAoe1xuICAgICAgZm9ybWF0OiBkZWZhdWx0Rm9ybWF0LFxuICAgICAgLi4uYXJncyxcbiAgICAgIHNldDogdHJ1ZSxcbiAgICAgIGNvbnRlbnRcbiAgICB9KTtcbiAgICBjb25zdCBzZXRDb250ZW50ID0gKGVkaXRvciwgY29udGVudCwgYXJncyA9IHt9KSA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0ZWRBcmdzID0gc2V0dXBBcmdzKGFyZ3MsIGNvbnRlbnQpO1xuICAgICAgcmV0dXJuIHByZVByb2Nlc3NTZXRDb250ZW50KGVkaXRvciwgZGVmYXVsdGVkQXJncykubWFwKHVwZGF0ZWRBcmdzID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gc2V0Q29udGVudCQyKGVkaXRvciwgdXBkYXRlZEFyZ3MuY29udGVudCwgdXBkYXRlZEFyZ3MpO1xuICAgICAgICBwb3N0UHJvY2Vzc1NldENvbnRlbnQoZWRpdG9yLCByZXN1bHQuaHRtbCwgdXBkYXRlZEFyZ3MpO1xuICAgICAgICByZXR1cm4gcmVzdWx0LmNvbnRlbnQ7XG4gICAgICB9KS5nZXRPcihjb250ZW50KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVtb3ZlZE9wdGlvbnMgPSAoJ2F1dG9yZXNpemVfb25faW5pdCxjb250ZW50X2VkaXRhYmxlX3N0YXRlLHBhZGRfZW1wdHlfd2l0aF9icixibG9ja19lbGVtZW50cywnICsgJ2Jvb2xlYW5fYXR0cmlidXRlcyxlZGl0b3JfZGVzZWxlY3RvcixlZGl0b3Jfc2VsZWN0b3IsZWxlbWVudHMsZmlsZV9icm93c2VyX2NhbGxiYWNrX3R5cGVzLGZpbGVwaWNrZXJfdmFsaWRhdG9yX2hhbmRsZXIsJyArICdmb3JjZV9oZXhfc3R5bGVfY29sb3JzLGZvcmNlX3BfbmV3bGluZXMsZ2Vja29fc3BlbGxjaGVjayxpbWFnZXNfZGF0YWltZ19maWx0ZXIsbWVkaWFfc2NyaXB0cyxtb2RlLG1vdmVfY2FyZXRfYmVmb3JlX29uX2VudGVyX2VsZW1lbnRzLCcgKyAnbm9uX2VtcHR5X2VsZW1lbnRzLHNlbGZfY2xvc2luZ19lbGVtZW50cyxzaG9ydF9lbmRlZF9lbGVtZW50cyxzcGVjaWFsLHNwZWxsY2hlY2tlcl9zZWxlY3RfbGFuZ3VhZ2VzLHNwZWxsY2hlY2tlcl93aGl0ZWxpc3QsJyArICd0YWJfZm9jdXMsdGFiZm9jdXNfZWxlbWVudHMsdGFibGVfcmVzcG9uc2l2ZV93aWR0aCx0ZXh0X2Jsb2NrX2VsZW1lbnRzLHRleHRfaW5saW5lX2VsZW1lbnRzLHRvb2xiYXJfZHJhd2VyLHR5cGVzLHZhbGlkYXRlLHdoaXRlc3BhY2VfZWxlbWVudHMsJyArICdwYXN0ZV9lbmFibGVfZGVmYXVsdF9maWx0ZXJzLHBhc3RlX2ZpbHRlcl9kcm9wLHBhc3RlX3dvcmRfdmFsaWRfZWxlbWVudHMscGFzdGVfcmV0YWluX3N0eWxlX3Byb3BlcnRpZXMscGFzdGVfY29udmVydF93b3JkX2Zha2VfbGlzdHMnKS5zcGxpdCgnLCcpO1xuICAgIGNvbnN0IGRlcHJlY2F0ZWRPcHRpb25zID0gJ3RlbXBsYXRlX2NkYXRlX2NsYXNzZXMsdGVtcGxhdGVfbWRhdGVfY2xhc3Nlcyx0ZW1wbGF0ZV9zZWxlY3RlZF9jb250ZW50X2NsYXNzZXMsdGVtcGxhdGVfcHJldmlld19yZXBsYWNlX3ZhbHVlcyx0ZW1wbGF0ZV9yZXBsYWNlX3ZhbHVlcyx0ZW1wbGF0ZXMsdGVtcGxhdGVfY2RhdGVfZm9ybWF0LHRlbXBsYXRlX21kYXRlX2Zvcm1hdCcuc3BsaXQoJywnKTtcbiAgICBjb25zdCByZW1vdmVkUGx1Z2lucyA9ICdiYmNvZGUsY29sb3JwaWNrZXIsY29udGV4dG1lbnUsZnVsbHBhZ2UsbGVnYWN5b3V0cHV0LHNwZWxsY2hlY2tlcix0ZXh0Y29sb3InLnNwbGl0KCcsJyk7XG4gICAgY29uc3QgZGVwcmVjYXRlZFBsdWdpbnMgPSBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICd0ZW1wbGF0ZScsXG4gICAgICAgIHJlcGxhY2VkV2l0aDogJ0FkdmFuY2VkIFRlbXBsYXRlJ1xuICAgICAgfSxcbiAgICAgIHsgbmFtZTogJ3J0YycgfVxuICAgIF07XG4gICAgY29uc3QgZ2V0TWF0Y2hpbmdPcHRpb25zID0gKG9wdGlvbnMsIHNlYXJjaGluZ0ZvcikgPT4ge1xuICAgICAgY29uc3Qgc2V0dGluZ05hbWVzID0gZmlsdGVyJDUoc2VhcmNoaW5nRm9yLCBzZXR0aW5nID0+IGhhcyQyKG9wdGlvbnMsIHNldHRpbmcpKTtcbiAgICAgIHJldHVybiBzb3J0KHNldHRpbmdOYW1lcyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRSZW1vdmVkT3B0aW9ucyA9IG9wdGlvbnMgPT4ge1xuICAgICAgY29uc3Qgc2V0dGluZ05hbWVzID0gZ2V0TWF0Y2hpbmdPcHRpb25zKG9wdGlvbnMsIHJlbW92ZWRPcHRpb25zKTtcbiAgICAgIGNvbnN0IGZvcmNlZFJvb3RCbG9jayA9IG9wdGlvbnMuZm9yY2VkX3Jvb3RfYmxvY2s7XG4gICAgICBpZiAoZm9yY2VkUm9vdEJsb2NrID09PSBmYWxzZSB8fCBmb3JjZWRSb290QmxvY2sgPT09ICcnKSB7XG4gICAgICAgIHNldHRpbmdOYW1lcy5wdXNoKCdmb3JjZWRfcm9vdF9ibG9jayAoZmFsc2Ugb25seSknKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzb3J0KHNldHRpbmdOYW1lcyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXREZXByZWNhdGVkT3B0aW9ucyA9IG9wdGlvbnMgPT4gZ2V0TWF0Y2hpbmdPcHRpb25zKG9wdGlvbnMsIGRlcHJlY2F0ZWRPcHRpb25zKTtcbiAgICBjb25zdCBnZXRNYXRjaGluZ1BsdWdpbnMgPSAob3B0aW9ucywgc2VhcmNoaW5nRm9yKSA9PiB7XG4gICAgICBjb25zdCBwbHVnaW5zID0gVG9vbHMubWFrZU1hcChvcHRpb25zLnBsdWdpbnMsICcgJyk7XG4gICAgICBjb25zdCBoYXNQbHVnaW4gPSBwbHVnaW4gPT4gaGFzJDIocGx1Z2lucywgcGx1Z2luKTtcbiAgICAgIGNvbnN0IHBsdWdpbk5hbWVzID0gZmlsdGVyJDUoc2VhcmNoaW5nRm9yLCBoYXNQbHVnaW4pO1xuICAgICAgcmV0dXJuIHNvcnQocGx1Z2luTmFtZXMpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0UmVtb3ZlZFBsdWdpbnMgPSBvcHRpb25zID0+IGdldE1hdGNoaW5nUGx1Z2lucyhvcHRpb25zLCByZW1vdmVkUGx1Z2lucyk7XG4gICAgY29uc3QgZ2V0RGVwcmVjYXRlZFBsdWdpbnMgPSBvcHRpb25zID0+IGdldE1hdGNoaW5nUGx1Z2lucyhvcHRpb25zLCBkZXByZWNhdGVkUGx1Z2lucy5tYXAoZW50cnkgPT4gZW50cnkubmFtZSkpO1xuICAgIGNvbnN0IGxvZ1JlbW92ZWRXYXJuaW5ncyA9IChyYXdPcHRpb25zLCBub3JtYWxpemVkT3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgcmVtb3ZlZE9wdGlvbnMgPSBnZXRSZW1vdmVkT3B0aW9ucyhyYXdPcHRpb25zKTtcbiAgICAgIGNvbnN0IHJlbW92ZWRQbHVnaW5zID0gZ2V0UmVtb3ZlZFBsdWdpbnMobm9ybWFsaXplZE9wdGlvbnMpO1xuICAgICAgY29uc3QgaGFzUmVtb3ZlZFBsdWdpbnMgPSByZW1vdmVkUGx1Z2lucy5sZW5ndGggPiAwO1xuICAgICAgY29uc3QgaGFzUmVtb3ZlZE9wdGlvbnMgPSByZW1vdmVkT3B0aW9ucy5sZW5ndGggPiAwO1xuICAgICAgY29uc3QgaXNMZWdhY3lNb2JpbGVUaGVtZSA9IG5vcm1hbGl6ZWRPcHRpb25zLnRoZW1lID09PSAnbW9iaWxlJztcbiAgICAgIGlmIChoYXNSZW1vdmVkUGx1Z2lucyB8fCBoYXNSZW1vdmVkT3B0aW9ucyB8fCBpc0xlZ2FjeU1vYmlsZVRoZW1lKSB7XG4gICAgICAgIGNvbnN0IGxpc3RKb2luZXIgPSAnXFxuLSAnO1xuICAgICAgICBjb25zdCB0aGVtZXNNZXNzYWdlID0gaXNMZWdhY3lNb2JpbGVUaGVtZSA/IGBcXG5cXG5UaGVtZXM6JHsgbGlzdEpvaW5lciB9bW9iaWxlYCA6ICcnO1xuICAgICAgICBjb25zdCBwbHVnaW5zTWVzc2FnZSA9IGhhc1JlbW92ZWRQbHVnaW5zID8gYFxcblxcblBsdWdpbnM6JHsgbGlzdEpvaW5lciB9JHsgcmVtb3ZlZFBsdWdpbnMuam9pbihsaXN0Sm9pbmVyKSB9YCA6ICcnO1xuICAgICAgICBjb25zdCBvcHRpb25zTWVzc2FnZSA9IGhhc1JlbW92ZWRPcHRpb25zID8gYFxcblxcbk9wdGlvbnM6JHsgbGlzdEpvaW5lciB9JHsgcmVtb3ZlZE9wdGlvbnMuam9pbihsaXN0Sm9pbmVyKSB9YCA6ICcnO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgZGVwcmVjYXRlZCBmZWF0dXJlcyBhcmUgY3VycmVudGx5IGVuYWJsZWQgYW5kIGhhdmUgYmVlbiByZW1vdmVkIGluIFRpbnlNQ0UgNi4wLiBUaGVzZSBmZWF0dXJlcyB3aWxsIG5vIGxvbmdlciB3b3JrIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBUaW55TUNFIGNvbmZpZ3VyYXRpb24uICcgKyAnU2VlIGh0dHBzOi8vd3d3LnRpbnkuY2xvdWQvZG9jcy90aW55bWNlLzYvbWlncmF0aW9uLWZyb20tNXgvIGZvciBtb3JlIGluZm9ybWF0aW9uLicgKyB0aGVtZXNNZXNzYWdlICsgcGx1Z2luc01lc3NhZ2UgKyBvcHRpb25zTWVzc2FnZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRQbHVnaW5EZXNjcmlwdGlvbiA9IG5hbWUgPT4gZmluZCQyKGRlcHJlY2F0ZWRQbHVnaW5zLCBlbnRyeSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKS5mb2xkKCgpID0+IG5hbWUsIGVudHJ5ID0+IHtcbiAgICAgIGlmIChlbnRyeS5yZXBsYWNlZFdpdGgpIHtcbiAgICAgICAgcmV0dXJuIGAkeyBuYW1lIH0sIHJlcGxhY2VkIGJ5ICR7IGVudHJ5LnJlcGxhY2VkV2l0aCB9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGxvZ0RlcHJlY2F0ZWRXYXJuaW5ncyA9IChyYXdPcHRpb25zLCBub3JtYWxpemVkT3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZGVwcmVjYXRlZE9wdGlvbnMgPSBnZXREZXByZWNhdGVkT3B0aW9ucyhyYXdPcHRpb25zKTtcbiAgICAgIGNvbnN0IGRlcHJlY2F0ZWRQbHVnaW5zID0gZ2V0RGVwcmVjYXRlZFBsdWdpbnMobm9ybWFsaXplZE9wdGlvbnMpO1xuICAgICAgY29uc3QgaGFzRGVwcmVjYXRlZFBsdWdpbnMgPSBkZXByZWNhdGVkUGx1Z2lucy5sZW5ndGggPiAwO1xuICAgICAgY29uc3QgaGFzRGVwcmVjYXRlZE9wdGlvbnMgPSBkZXByZWNhdGVkT3B0aW9ucy5sZW5ndGggPiAwO1xuICAgICAgaWYgKGhhc0RlcHJlY2F0ZWRQbHVnaW5zIHx8IGhhc0RlcHJlY2F0ZWRPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGxpc3RKb2luZXIgPSAnXFxuLSAnO1xuICAgICAgICBjb25zdCBwbHVnaW5zTWVzc2FnZSA9IGhhc0RlcHJlY2F0ZWRQbHVnaW5zID8gYFxcblxcblBsdWdpbnM6JHsgbGlzdEpvaW5lciB9JHsgZGVwcmVjYXRlZFBsdWdpbnMubWFwKGdldFBsdWdpbkRlc2NyaXB0aW9uKS5qb2luKGxpc3RKb2luZXIpIH1gIDogJyc7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNNZXNzYWdlID0gaGFzRGVwcmVjYXRlZE9wdGlvbnMgPyBgXFxuXFxuT3B0aW9uczokeyBsaXN0Sm9pbmVyIH0keyBkZXByZWNhdGVkT3B0aW9ucy5qb2luKGxpc3RKb2luZXIpIH1gIDogJyc7XG4gICAgICAgIGNvbnNvbGUud2FybignVGhlIGZvbGxvd2luZyBkZXByZWNhdGVkIGZlYXR1cmVzIGFyZSBjdXJyZW50bHkgZW5hYmxlZCBidXQgd2lsbCBiZSByZW1vdmVkIHNvb24uJyArIHBsdWdpbnNNZXNzYWdlICsgb3B0aW9uc01lc3NhZ2UpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbG9nV2FybmluZ3MgPSAocmF3T3B0aW9ucywgbm9ybWFsaXplZE9wdGlvbnMpID0+IHtcbiAgICAgIGxvZ1JlbW92ZWRXYXJuaW5ncyhyYXdPcHRpb25zLCBub3JtYWxpemVkT3B0aW9ucyk7XG4gICAgICBsb2dEZXByZWNhdGVkV2FybmluZ3MocmF3T3B0aW9ucywgbm9ybWFsaXplZE9wdGlvbnMpO1xuICAgIH07XG5cbiAgICBjb25zdCBET00kOCA9IERPTVV0aWxzLkRPTTtcbiAgICBjb25zdCByZXN0b3JlT3JpZ2luYWxTdHlsZXMgPSBlZGl0b3IgPT4ge1xuICAgICAgRE9NJDguc2V0U3R5bGUoZWRpdG9yLmlkLCAnZGlzcGxheScsIGVkaXRvci5vcmdEaXNwbGF5KTtcbiAgICB9O1xuICAgIGNvbnN0IHNhZmVEZXN0cm95ID0geCA9PiBPcHRpb25hbC5mcm9tKHgpLmVhY2goeCA9PiB4LmRlc3Ryb3koKSk7XG4gICAgY29uc3QgY2xlYXJEb21SZWZlcmVuY2VzID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGVkID0gZWRpdG9yO1xuICAgICAgZWQuY29udGVudEFyZWFDb250YWluZXIgPSBlZC5mb3JtRWxlbWVudCA9IGVkLmNvbnRhaW5lciA9IGVkLmVkaXRvckNvbnRhaW5lciA9IG51bGw7XG4gICAgICBlZC5ib2R5RWxlbWVudCA9IGVkLmNvbnRlbnREb2N1bWVudCA9IGVkLmNvbnRlbnRXaW5kb3cgPSBudWxsO1xuICAgICAgZWQuaWZyYW1lRWxlbWVudCA9IGVkLnRhcmdldEVsbSA9IG51bGw7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uO1xuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICBjb25zdCBkb20gPSBzZWxlY3Rpb24uZG9tO1xuICAgICAgICBlZC5zZWxlY3Rpb24gPSBzZWxlY3Rpb24ud2luID0gc2VsZWN0aW9uLmRvbSA9IGRvbS5kb2MgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVzdG9yZUZvcm0gPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZm9ybSA9IGVkaXRvci5mb3JtRWxlbWVudDtcbiAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgIGlmIChmb3JtLl9tY2VPbGRTdWJtaXQpIHtcbiAgICAgICAgICBmb3JtLnN1Ym1pdCA9IGZvcm0uX21jZU9sZFN1Ym1pdDtcbiAgICAgICAgICBkZWxldGUgZm9ybS5fbWNlT2xkU3VibWl0O1xuICAgICAgICB9XG4gICAgICAgIERPTSQ4LnVuYmluZChmb3JtLCAnc3VibWl0IHJlc2V0JywgZWRpdG9yLmZvcm1FdmVudERlbGVnYXRlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSQxID0gZWRpdG9yID0+IHtcbiAgICAgIGlmICghZWRpdG9yLnJlbW92ZWQpIHtcbiAgICAgICAgY29uc3Qge19zZWxlY3Rpb25PdmVycmlkZXMsIGVkaXRvclVwbG9hZH0gPSBlZGl0b3I7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZWRpdG9yLmdldEVsZW1lbnQoKTtcbiAgICAgICAgaWYgKGJvZHkpIHtcbiAgICAgICAgICBlZGl0b3Iuc2F2ZSh7IGlzX3JlbW92aW5nOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVkaXRvci5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgZWRpdG9yLnVuYmluZEFsbE5hdGl2ZUV2ZW50cygpO1xuICAgICAgICBpZiAoZWRpdG9yLmhhc0hpZGRlbklucHV0ICYmIGlzTm9uTnVsbGFibGUoZWxlbWVudCA9PT0gbnVsbCB8fCBlbGVtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbGVtZW50Lm5leHRTaWJsaW5nKSkge1xuICAgICAgICAgIERPTSQ4LnJlbW92ZShlbGVtZW50Lm5leHRTaWJsaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBmaXJlUmVtb3ZlKGVkaXRvcik7XG4gICAgICAgIGVkaXRvci5lZGl0b3JNYW5hZ2VyLnJlbW92ZShlZGl0b3IpO1xuICAgICAgICBpZiAoIWVkaXRvci5pbmxpbmUgJiYgYm9keSkge1xuICAgICAgICAgIHJlc3RvcmVPcmlnaW5hbFN0eWxlcyhlZGl0b3IpO1xuICAgICAgICB9XG4gICAgICAgIGZpcmVEZXRhY2goZWRpdG9yKTtcbiAgICAgICAgRE9NJDgucmVtb3ZlKGVkaXRvci5nZXRDb250YWluZXIoKSk7XG4gICAgICAgIHNhZmVEZXN0cm95KF9zZWxlY3Rpb25PdmVycmlkZXMpO1xuICAgICAgICBzYWZlRGVzdHJveShlZGl0b3JVcGxvYWQpO1xuICAgICAgICBlZGl0b3IuZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZGVzdHJveSA9IChlZGl0b3IsIGF1dG9tYXRpYykgPT4ge1xuICAgICAgY29uc3Qge3NlbGVjdGlvbiwgZG9tfSA9IGVkaXRvcjtcbiAgICAgIGlmIChlZGl0b3IuZGVzdHJveWVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghYXV0b21hdGljICYmICFlZGl0b3IucmVtb3ZlZCkge1xuICAgICAgICBlZGl0b3IucmVtb3ZlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghYXV0b21hdGljKSB7XG4gICAgICAgIGVkaXRvci5lZGl0b3JNYW5hZ2VyLm9mZignYmVmb3JldW5sb2FkJywgZWRpdG9yLl9iZWZvcmVVbmxvYWQpO1xuICAgICAgICBpZiAoZWRpdG9yLnRoZW1lICYmIGVkaXRvci50aGVtZS5kZXN0cm95KSB7XG4gICAgICAgICAgZWRpdG9yLnRoZW1lLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICBzYWZlRGVzdHJveShzZWxlY3Rpb24pO1xuICAgICAgICBzYWZlRGVzdHJveShkb20pO1xuICAgICAgfVxuICAgICAgcmVzdG9yZUZvcm0oZWRpdG9yKTtcbiAgICAgIGNsZWFyRG9tUmVmZXJlbmNlcyhlZGl0b3IpO1xuICAgICAgZWRpdG9yLmRlc3Ryb3llZCA9IHRydWU7XG4gICAgfTtcblxuICAgIGNvbnN0IENyZWF0ZUljb25NYW5hZ2VyID0gKCkgPT4ge1xuICAgICAgY29uc3QgbG9va3VwID0ge307XG4gICAgICBjb25zdCBhZGQgPSAoaWQsIGljb25QYWNrKSA9PiB7XG4gICAgICAgIGxvb2t1cFtpZF0gPSBpY29uUGFjaztcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXQgPSBpZCA9PiB7XG4gICAgICAgIGlmIChsb29rdXBbaWRdKSB7XG4gICAgICAgICAgcmV0dXJuIGxvb2t1cFtpZF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHsgaWNvbnM6IHt9IH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBoYXMgPSBpZCA9PiBoYXMkMihsb29rdXAsIGlkKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFkZCxcbiAgICAgICAgZ2V0LFxuICAgICAgICBoYXNcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBJY29uTWFuYWdlciA9IENyZWF0ZUljb25NYW5hZ2VyKCk7XG5cbiAgICBjb25zdCBNb2RlbE1hbmFnZXIgPSBBZGRPbk1hbmFnZXIuTW9kZWxNYW5hZ2VyO1xuXG4gICAgY29uc3QgZ2V0UHJvcCA9IChwcm9wTmFtZSwgZWxtKSA9PiB7XG4gICAgICBjb25zdCByYXdFbG0gPSBlbG0uZG9tO1xuICAgICAgcmV0dXJuIHJhd0VsbVtwcm9wTmFtZV07XG4gICAgfTtcbiAgICBjb25zdCBnZXRDb21wdXRlZFNpemVQcm9wID0gKHByb3BOYW1lLCBlbG0pID0+IHBhcnNlSW50KGdldCQ3KGVsbSwgcHJvcE5hbWUpLCAxMCk7XG4gICAgY29uc3QgZ2V0Q2xpZW50V2lkdGggPSBjdXJyeShnZXRQcm9wLCAnY2xpZW50V2lkdGgnKTtcbiAgICBjb25zdCBnZXRDbGllbnRIZWlnaHQgPSBjdXJyeShnZXRQcm9wLCAnY2xpZW50SGVpZ2h0Jyk7XG4gICAgY29uc3QgZ2V0TWFyZ2luVG9wID0gY3VycnkoZ2V0Q29tcHV0ZWRTaXplUHJvcCwgJ21hcmdpbi10b3AnKTtcbiAgICBjb25zdCBnZXRNYXJnaW5MZWZ0ID0gY3VycnkoZ2V0Q29tcHV0ZWRTaXplUHJvcCwgJ21hcmdpbi1sZWZ0Jyk7XG4gICAgY29uc3QgZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID0gZWxtID0+IGVsbS5kb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgaXNJbnNpZGVFbGVtZW50Q29udGVudEFyZWEgPSAoYm9keUVsbSwgY2xpZW50WCwgY2xpZW50WSkgPT4ge1xuICAgICAgY29uc3QgY2xpZW50V2lkdGggPSBnZXRDbGllbnRXaWR0aChib2R5RWxtKTtcbiAgICAgIGNvbnN0IGNsaWVudEhlaWdodCA9IGdldENsaWVudEhlaWdodChib2R5RWxtKTtcbiAgICAgIHJldHVybiBjbGllbnRYID49IDAgJiYgY2xpZW50WSA+PSAwICYmIGNsaWVudFggPD0gY2xpZW50V2lkdGggJiYgY2xpZW50WSA8PSBjbGllbnRIZWlnaHQ7XG4gICAgfTtcbiAgICBjb25zdCB0cmFuc3Bvc2UgPSAoaW5saW5lLCBlbG0sIGNsaWVudFgsIGNsaWVudFkpID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxtKTtcbiAgICAgIGNvbnN0IGRlbHRhWCA9IGlubGluZSA/IGNsaWVudFJlY3QubGVmdCArIGVsbS5kb20uY2xpZW50TGVmdCArIGdldE1hcmdpbkxlZnQoZWxtKSA6IDA7XG4gICAgICBjb25zdCBkZWx0YVkgPSBpbmxpbmUgPyBjbGllbnRSZWN0LnRvcCArIGVsbS5kb20uY2xpZW50VG9wICsgZ2V0TWFyZ2luVG9wKGVsbSkgOiAwO1xuICAgICAgY29uc3QgeCA9IGNsaWVudFggLSBkZWx0YVg7XG4gICAgICBjb25zdCB5ID0gY2xpZW50WSAtIGRlbHRhWTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBpc1hZSW5Db250ZW50QXJlYSA9IChlZGl0b3IsIGNsaWVudFgsIGNsaWVudFkpID0+IHtcbiAgICAgIGNvbnN0IGJvZHlFbG0gPSBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKTtcbiAgICAgIGNvbnN0IHRhcmdldEVsbSA9IGVkaXRvci5pbmxpbmUgPyBib2R5RWxtIDogZG9jdW1lbnRFbGVtZW50KGJvZHlFbG0pO1xuICAgICAgY29uc3QgdHJhbnNwb3NlZFBvaW50ID0gdHJhbnNwb3NlKGVkaXRvci5pbmxpbmUsIHRhcmdldEVsbSwgY2xpZW50WCwgY2xpZW50WSk7XG4gICAgICByZXR1cm4gaXNJbnNpZGVFbGVtZW50Q29udGVudEFyZWEodGFyZ2V0RWxtLCB0cmFuc3Bvc2VkUG9pbnQueCwgdHJhbnNwb3NlZFBvaW50LnkpO1xuICAgIH07XG4gICAgY29uc3QgZnJvbURvbVNhZmUgPSBub2RlID0+IE9wdGlvbmFsLmZyb20obm9kZSkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBpc0VkaXRvckF0dGFjaGVkVG9Eb20gPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgcmF3Q29udGFpbmVyID0gZWRpdG9yLmlubGluZSA/IGVkaXRvci5nZXRCb2R5KCkgOiBlZGl0b3IuZ2V0Q29udGVudEFyZWFDb250YWluZXIoKTtcbiAgICAgIHJldHVybiBmcm9tRG9tU2FmZShyYXdDb250YWluZXIpLm1hcChpbkJvZHkpLmdldE9yKGZhbHNlKTtcbiAgICB9O1xuXG4gICAgdmFyIE5vdGlmaWNhdGlvbk1hbmFnZXJJbXBsID0gKCkgPT4ge1xuICAgICAgY29uc3QgdW5pbXBsZW1lbnRlZCA9ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVtZSBkaWQgbm90IHByb3ZpZGUgYSBOb3RpZmljYXRpb25NYW5hZ2VyIGltcGxlbWVudGF0aW9uLicpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wZW46IHVuaW1wbGVtZW50ZWQsXG4gICAgICAgIGNsb3NlOiB1bmltcGxlbWVudGVkLFxuICAgICAgICBnZXRBcmdzOiB1bmltcGxlbWVudGVkXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBOb3RpZmljYXRpb25NYW5hZ2VyID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBbXTtcbiAgICAgIGNvbnN0IGdldEltcGxlbWVudGF0aW9uID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB0aGVtZSA9IGVkaXRvci50aGVtZTtcbiAgICAgICAgcmV0dXJuIHRoZW1lICYmIHRoZW1lLmdldE5vdGlmaWNhdGlvbk1hbmFnZXJJbXBsID8gdGhlbWUuZ2V0Tm90aWZpY2F0aW9uTWFuYWdlckltcGwoKSA6IE5vdGlmaWNhdGlvbk1hbmFnZXJJbXBsKCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0VG9wTm90aWZpY2F0aW9uID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShub3RpZmljYXRpb25zWzBdKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0VxdWFsID0gKGEsIGIpID0+IHtcbiAgICAgICAgcmV0dXJuIGEudHlwZSA9PT0gYi50eXBlICYmIGEudGV4dCA9PT0gYi50ZXh0ICYmICFhLnByb2dyZXNzQmFyICYmICFhLnRpbWVvdXQgJiYgIWIucHJvZ3Jlc3NCYXIgJiYgIWIudGltZW91dDtcbiAgICAgIH07XG4gICAgICBjb25zdCByZXBvc2l0aW9uID0gKCkgPT4ge1xuICAgICAgICBlYWNoJGUobm90aWZpY2F0aW9ucywgbm90aWZpY2F0aW9uID0+IHtcbiAgICAgICAgICBub3RpZmljYXRpb24ucmVwb3NpdGlvbigpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBhZGROb3RpZmljYXRpb24gPSBub3RpZmljYXRpb24gPT4ge1xuICAgICAgICBub3RpZmljYXRpb25zLnB1c2gobm90aWZpY2F0aW9uKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjbG9zZU5vdGlmaWNhdGlvbiA9IG5vdGlmaWNhdGlvbiA9PiB7XG4gICAgICAgIGZpbmRJbmRleCQyKG5vdGlmaWNhdGlvbnMsIG90aGVyTm90aWZpY2F0aW9uID0+IHtcbiAgICAgICAgICByZXR1cm4gb3RoZXJOb3RpZmljYXRpb24gPT09IG5vdGlmaWNhdGlvbjtcbiAgICAgICAgfSkuZWFjaChpbmRleCA9PiB7XG4gICAgICAgICAgbm90aWZpY2F0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBvcGVuID0gKHNwZWMsIGZpcmVFdmVudCA9IHRydWUpID0+IHtcbiAgICAgICAgaWYgKGVkaXRvci5yZW1vdmVkIHx8ICFpc0VkaXRvckF0dGFjaGVkVG9Eb20oZWRpdG9yKSkge1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlyZUV2ZW50KSB7XG4gICAgICAgICAgZWRpdG9yLmRpc3BhdGNoKCdCZWZvcmVPcGVuTm90aWZpY2F0aW9uJywgeyBub3RpZmljYXRpb246IHNwZWMgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbmQkMihub3RpZmljYXRpb25zLCBub3RpZmljYXRpb24gPT4ge1xuICAgICAgICAgIHJldHVybiBpc0VxdWFsKGdldEltcGxlbWVudGF0aW9uKCkuZ2V0QXJncyhub3RpZmljYXRpb24pLCBzcGVjKTtcbiAgICAgICAgfSkuZ2V0T3JUaHVuaygoKSA9PiB7XG4gICAgICAgICAgZWRpdG9yLmVkaXRvck1hbmFnZXIuc2V0QWN0aXZlKGVkaXRvcik7XG4gICAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uID0gZ2V0SW1wbGVtZW50YXRpb24oKS5vcGVuKHNwZWMsICgpID0+IHtcbiAgICAgICAgICAgIGNsb3NlTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbik7XG4gICAgICAgICAgICByZXBvc2l0aW9uKCk7XG4gICAgICAgICAgICBnZXRUb3BOb3RpZmljYXRpb24oKS5mb2xkKCgpID0+IGVkaXRvci5mb2N1cygpLCB0b3AgPT4gZm9jdXMkMShTdWdhckVsZW1lbnQuZnJvbURvbSh0b3AuZ2V0RWwoKSkpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhZGROb3RpZmljYXRpb24obm90aWZpY2F0aW9uKTtcbiAgICAgICAgICByZXBvc2l0aW9uKCk7XG4gICAgICAgICAgZWRpdG9yLmRpc3BhdGNoKCdPcGVuTm90aWZpY2F0aW9uJywgeyBub3RpZmljYXRpb246IHsgLi4ubm90aWZpY2F0aW9uIH0gfSk7XG4gICAgICAgICAgcmV0dXJuIG5vdGlmaWNhdGlvbjtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgY2xvc2UgPSAoKSA9PiB7XG4gICAgICAgIGdldFRvcE5vdGlmaWNhdGlvbigpLmVhY2gobm90aWZpY2F0aW9uID0+IHtcbiAgICAgICAgICBnZXRJbXBsZW1lbnRhdGlvbigpLmNsb3NlKG5vdGlmaWNhdGlvbik7XG4gICAgICAgICAgY2xvc2VOb3RpZmljYXRpb24obm90aWZpY2F0aW9uKTtcbiAgICAgICAgICByZXBvc2l0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldE5vdGlmaWNhdGlvbnMgPSBjb25zdGFudChub3RpZmljYXRpb25zKTtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyRXZlbnRzID0gZWRpdG9yID0+IHtcbiAgICAgICAgZWRpdG9yLm9uKCdTa2luTG9hZGVkJywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNlcnZpY2VNZXNzYWdlID0gZ2V0U2VydmljZU1lc3NhZ2UoZWRpdG9yKTtcbiAgICAgICAgICBpZiAoc2VydmljZU1lc3NhZ2UpIHtcbiAgICAgICAgICAgIG9wZW4oe1xuICAgICAgICAgICAgICB0ZXh0OiBzZXJ2aWNlTWVzc2FnZSxcbiAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICAgICAgICB0aW1lb3V0OiAwXG4gICAgICAgICAgICB9LCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcG9zaXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVkaXRvci5vbignc2hvdyBSZXNpemVFZGl0b3IgUmVzaXplV2luZG93IE5vZGVDaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlcG9zaXRpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLm9uKCdyZW1vdmUnLCAoKSA9PiB7XG4gICAgICAgICAgZWFjaCRlKG5vdGlmaWNhdGlvbnMuc2xpY2UoKSwgbm90aWZpY2F0aW9uID0+IHtcbiAgICAgICAgICAgIGdldEltcGxlbWVudGF0aW9uKCkuY2xvc2Uobm90aWZpY2F0aW9uKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgcmVnaXN0ZXJFdmVudHMoZWRpdG9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wZW4sXG4gICAgICAgIGNsb3NlLFxuICAgICAgICBnZXROb3RpZmljYXRpb25zXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBQbHVnaW5NYW5hZ2VyID0gQWRkT25NYW5hZ2VyLlBsdWdpbk1hbmFnZXI7XG5cbiAgICBjb25zdCBUaGVtZU1hbmFnZXIgPSBBZGRPbk1hbmFnZXIuVGhlbWVNYW5hZ2VyO1xuXG4gICAgdmFyIFdpbmRvd01hbmFnZXJJbXBsID0gKCkgPT4ge1xuICAgICAgY29uc3QgdW5pbXBsZW1lbnRlZCA9ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVtZSBkaWQgbm90IHByb3ZpZGUgYSBXaW5kb3dNYW5hZ2VyIGltcGxlbWVudGF0aW9uLicpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wZW46IHVuaW1wbGVtZW50ZWQsXG4gICAgICAgIG9wZW5Vcmw6IHVuaW1wbGVtZW50ZWQsXG4gICAgICAgIGFsZXJ0OiB1bmltcGxlbWVudGVkLFxuICAgICAgICBjb25maXJtOiB1bmltcGxlbWVudGVkLFxuICAgICAgICBjbG9zZTogdW5pbXBsZW1lbnRlZFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgV2luZG93TWFuYWdlciA9IGVkaXRvciA9PiB7XG4gICAgICBsZXQgZGlhbG9ncyA9IFtdO1xuICAgICAgY29uc3QgZ2V0SW1wbGVtZW50YXRpb24gPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRoZW1lID0gZWRpdG9yLnRoZW1lO1xuICAgICAgICByZXR1cm4gdGhlbWUgJiYgdGhlbWUuZ2V0V2luZG93TWFuYWdlckltcGwgPyB0aGVtZS5nZXRXaW5kb3dNYW5hZ2VySW1wbCgpIDogV2luZG93TWFuYWdlckltcGwoKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBmdW5jQmluZCA9IChzY29wZSwgZikgPT4ge1xuICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICByZXR1cm4gZiA/IGYuYXBwbHkoc2NvcGUsIGFyZ3MpIDogdW5kZWZpbmVkO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZpcmVPcGVuRXZlbnQgPSBkaWFsb2cgPT4ge1xuICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ09wZW5XaW5kb3cnLCB7IGRpYWxvZyB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBmaXJlQ2xvc2VFdmVudCA9IGRpYWxvZyA9PiB7XG4gICAgICAgIGVkaXRvci5kaXNwYXRjaCgnQ2xvc2VXaW5kb3cnLCB7IGRpYWxvZyB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBhZGREaWFsb2cgPSBkaWFsb2cgPT4ge1xuICAgICAgICBkaWFsb2dzLnB1c2goZGlhbG9nKTtcbiAgICAgICAgZmlyZU9wZW5FdmVudChkaWFsb2cpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNsb3NlRGlhbG9nID0gZGlhbG9nID0+IHtcbiAgICAgICAgZmlyZUNsb3NlRXZlbnQoZGlhbG9nKTtcbiAgICAgICAgZGlhbG9ncyA9IGZpbHRlciQ1KGRpYWxvZ3MsIG90aGVyRGlhbG9nID0+IHtcbiAgICAgICAgICByZXR1cm4gb3RoZXJEaWFsb2cgIT09IGRpYWxvZztcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChkaWFsb2dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0VG9wRGlhbG9nID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShkaWFsb2dzW2RpYWxvZ3MubGVuZ3RoIC0gMV0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHN0b3JlU2VsZWN0aW9uQW5kT3BlbkRpYWxvZyA9IG9wZW5EaWFsb2cgPT4ge1xuICAgICAgICBlZGl0b3IuZWRpdG9yTWFuYWdlci5zZXRBY3RpdmUoZWRpdG9yKTtcbiAgICAgICAgc3RvcmUoZWRpdG9yKTtcbiAgICAgICAgZWRpdG9yLnVpLnNob3coKTtcbiAgICAgICAgY29uc3QgZGlhbG9nID0gb3BlbkRpYWxvZygpO1xuICAgICAgICBhZGREaWFsb2coZGlhbG9nKTtcbiAgICAgICAgcmV0dXJuIGRpYWxvZztcbiAgICAgIH07XG4gICAgICBjb25zdCBvcGVuID0gKGFyZ3MsIHBhcmFtcykgPT4ge1xuICAgICAgICByZXR1cm4gc3RvcmVTZWxlY3Rpb25BbmRPcGVuRGlhbG9nKCgpID0+IGdldEltcGxlbWVudGF0aW9uKCkub3BlbihhcmdzLCBwYXJhbXMsIGNsb3NlRGlhbG9nKSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgb3BlblVybCA9IGFyZ3MgPT4ge1xuICAgICAgICByZXR1cm4gc3RvcmVTZWxlY3Rpb25BbmRPcGVuRGlhbG9nKCgpID0+IGdldEltcGxlbWVudGF0aW9uKCkub3BlblVybChhcmdzLCBjbG9zZURpYWxvZykpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFsZXJ0ID0gKG1lc3NhZ2UsIGNhbGxiYWNrLCBzY29wZSkgPT4ge1xuICAgICAgICBjb25zdCB3aW5kb3dNYW5hZ2VySW1wbCA9IGdldEltcGxlbWVudGF0aW9uKCk7XG4gICAgICAgIHdpbmRvd01hbmFnZXJJbXBsLmFsZXJ0KG1lc3NhZ2UsIGZ1bmNCaW5kKHNjb3BlID8gc2NvcGUgOiB3aW5kb3dNYW5hZ2VySW1wbCwgY2FsbGJhY2spKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjb25maXJtID0gKG1lc3NhZ2UsIGNhbGxiYWNrLCBzY29wZSkgPT4ge1xuICAgICAgICBjb25zdCB3aW5kb3dNYW5hZ2VySW1wbCA9IGdldEltcGxlbWVudGF0aW9uKCk7XG4gICAgICAgIHdpbmRvd01hbmFnZXJJbXBsLmNvbmZpcm0obWVzc2FnZSwgZnVuY0JpbmQoc2NvcGUgPyBzY29wZSA6IHdpbmRvd01hbmFnZXJJbXBsLCBjYWxsYmFjaykpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNsb3NlID0gKCkgPT4ge1xuICAgICAgICBnZXRUb3BEaWFsb2coKS5lYWNoKGRpYWxvZyA9PiB7XG4gICAgICAgICAgZ2V0SW1wbGVtZW50YXRpb24oKS5jbG9zZShkaWFsb2cpO1xuICAgICAgICAgIGNsb3NlRGlhbG9nKGRpYWxvZyk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGVkaXRvci5vbigncmVtb3ZlJywgKCkgPT4ge1xuICAgICAgICBlYWNoJGUoZGlhbG9ncywgZGlhbG9nID0+IHtcbiAgICAgICAgICBnZXRJbXBsZW1lbnRhdGlvbigpLmNsb3NlKGRpYWxvZyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcGVuLFxuICAgICAgICBvcGVuVXJsLFxuICAgICAgICBhbGVydCxcbiAgICAgICAgY29uZmlybSxcbiAgICAgICAgY2xvc2VcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGRpc3BsYXlOb3RpZmljYXRpb24gPSAoZWRpdG9yLCBtZXNzYWdlKSA9PiB7XG4gICAgICBlZGl0b3Iubm90aWZpY2F0aW9uTWFuYWdlci5vcGVuKHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgdGV4dDogbWVzc2FnZVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBkaXNwbGF5RXJyb3IgPSAoZWRpdG9yLCBtZXNzYWdlKSA9PiB7XG4gICAgICBpZiAoZWRpdG9yLl9za2luTG9hZGVkKSB7XG4gICAgICAgIGRpc3BsYXlOb3RpZmljYXRpb24oZWRpdG9yLCBtZXNzYWdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkaXRvci5vbignU2tpbkxvYWRlZCcsICgpID0+IHtcbiAgICAgICAgICBkaXNwbGF5Tm90aWZpY2F0aW9uKGVkaXRvciwgbWVzc2FnZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdXBsb2FkRXJyb3IgPSAoZWRpdG9yLCBtZXNzYWdlKSA9PiB7XG4gICAgICBkaXNwbGF5RXJyb3IoZWRpdG9yLCBJMThuLnRyYW5zbGF0ZShbXG4gICAgICAgICdGYWlsZWQgdG8gdXBsb2FkIGltYWdlOiB7MH0nLFxuICAgICAgICBtZXNzYWdlXG4gICAgICBdKSk7XG4gICAgfTtcbiAgICBjb25zdCBsb2dFcnJvciA9IChlZGl0b3IsIGVycm9yVHlwZSwgbXNnKSA9PiB7XG4gICAgICBmaXJlRXJyb3IoZWRpdG9yLCBlcnJvclR5cGUsIHsgbWVzc2FnZTogbXNnIH0pO1xuICAgICAgY29uc29sZS5lcnJvcihtc2cpO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlTG9hZEVycm9yID0gKHR5cGUsIHVybCwgbmFtZSkgPT4gbmFtZSA/IGBGYWlsZWQgdG8gbG9hZCAkeyB0eXBlIH06ICR7IG5hbWUgfSBmcm9tIHVybCAkeyB1cmwgfWAgOiBgRmFpbGVkIHRvIGxvYWQgJHsgdHlwZSB9IHVybDogJHsgdXJsIH1gO1xuICAgIGNvbnN0IHBsdWdpbkxvYWRFcnJvciA9IChlZGl0b3IsIHVybCwgbmFtZSkgPT4ge1xuICAgICAgbG9nRXJyb3IoZWRpdG9yLCAnUGx1Z2luTG9hZEVycm9yJywgY3JlYXRlTG9hZEVycm9yKCdwbHVnaW4nLCB1cmwsIG5hbWUpKTtcbiAgICB9O1xuICAgIGNvbnN0IGljb25zTG9hZEVycm9yID0gKGVkaXRvciwgdXJsLCBuYW1lKSA9PiB7XG4gICAgICBsb2dFcnJvcihlZGl0b3IsICdJY29uc0xvYWRFcnJvcicsIGNyZWF0ZUxvYWRFcnJvcignaWNvbnMnLCB1cmwsIG5hbWUpKTtcbiAgICB9O1xuICAgIGNvbnN0IGxhbmd1YWdlTG9hZEVycm9yID0gKGVkaXRvciwgdXJsLCBuYW1lKSA9PiB7XG4gICAgICBsb2dFcnJvcihlZGl0b3IsICdMYW5ndWFnZUxvYWRFcnJvcicsIGNyZWF0ZUxvYWRFcnJvcignbGFuZ3VhZ2UnLCB1cmwsIG5hbWUpKTtcbiAgICB9O1xuICAgIGNvbnN0IHRoZW1lTG9hZEVycm9yID0gKGVkaXRvciwgdXJsLCBuYW1lKSA9PiB7XG4gICAgICBsb2dFcnJvcihlZGl0b3IsICdUaGVtZUxvYWRFcnJvcicsIGNyZWF0ZUxvYWRFcnJvcigndGhlbWUnLCB1cmwsIG5hbWUpKTtcbiAgICB9O1xuICAgIGNvbnN0IG1vZGVsTG9hZEVycm9yID0gKGVkaXRvciwgdXJsLCBuYW1lKSA9PiB7XG4gICAgICBsb2dFcnJvcihlZGl0b3IsICdNb2RlbExvYWRFcnJvcicsIGNyZWF0ZUxvYWRFcnJvcignbW9kZWwnLCB1cmwsIG5hbWUpKTtcbiAgICB9O1xuICAgIGNvbnN0IHBsdWdpbkluaXRFcnJvciA9IChlZGl0b3IsIG5hbWUsIGVycikgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IEkxOG4udHJhbnNsYXRlKFtcbiAgICAgICAgJ0ZhaWxlZCB0byBpbml0aWFsaXplIHBsdWdpbjogezB9JyxcbiAgICAgICAgbmFtZVxuICAgICAgXSk7XG4gICAgICBmaXJlRXJyb3IoZWRpdG9yLCAnUGx1Z2luTG9hZEVycm9yJywgeyBtZXNzYWdlIH0pO1xuICAgICAgaW5pdEVycm9yKG1lc3NhZ2UsIGVycik7XG4gICAgICBkaXNwbGF5RXJyb3IoZWRpdG9yLCBtZXNzYWdlKTtcbiAgICB9O1xuICAgIGNvbnN0IGluaXRFcnJvciA9IChtZXNzYWdlLCAuLi54KSA9PiB7XG4gICAgICBjb25zdCBjb25zb2xlID0gd2luZG93LmNvbnNvbGU7XG4gICAgICBpZiAoY29uc29sZSkge1xuICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSwgLi4ueCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2cobWVzc2FnZSwgLi4ueCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaXNDb250ZW50Q3NzU2tpbk5hbWUgPSB1cmwgPT4gL15bYS16MC05XFwtXSskL2kudGVzdCh1cmwpO1xuICAgIGNvbnN0IGdldENvbnRlbnRDc3NVcmxzID0gZWRpdG9yID0+IHtcbiAgICAgIHJldHVybiB0cmFuc2Zvcm1Ub1VybHMoZWRpdG9yLCBnZXRDb250ZW50Q3NzKGVkaXRvcikpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Rm9udENzc1VybHMgPSBlZGl0b3IgPT4ge1xuICAgICAgcmV0dXJuIHRyYW5zZm9ybVRvVXJscyhlZGl0b3IsIGdldEZvbnRDc3MoZWRpdG9yKSk7XG4gICAgfTtcbiAgICBjb25zdCB0cmFuc2Zvcm1Ub1VybHMgPSAoZWRpdG9yLCBjc3NMaW5rcykgPT4ge1xuICAgICAgY29uc3Qgc2tpblVybCA9IGVkaXRvci5lZGl0b3JNYW5hZ2VyLmJhc2VVUkwgKyAnL3NraW5zL2NvbnRlbnQnO1xuICAgICAgY29uc3Qgc3VmZml4ID0gZWRpdG9yLmVkaXRvck1hbmFnZXIuc3VmZml4O1xuICAgICAgY29uc3QgY29udGVudENzc0ZpbGUgPSBgY29udGVudCR7IHN1ZmZpeCB9LmNzc2A7XG4gICAgICByZXR1cm4gbWFwJDMoY3NzTGlua3MsIHVybCA9PiB7XG4gICAgICAgIGlmIChpc0NvbnRlbnRDc3NTa2luTmFtZSh1cmwpICYmICFlZGl0b3IuaW5saW5lKSB7XG4gICAgICAgICAgcmV0dXJuIGAkeyBza2luVXJsIH0vJHsgdXJsIH0vJHsgY29udGVudENzc0ZpbGUgfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGVkaXRvci5kb2N1bWVudEJhc2VVUkkudG9BYnNvbHV0ZSh1cmwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGVuZENvbnRlbnRDc3NGcm9tU2V0dGluZ3MgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmNvbnRlbnRDU1MgPSBlZGl0b3IuY29udGVudENTUy5jb25jYXQoZ2V0Q29udGVudENzc1VybHMoZWRpdG9yKSwgZ2V0Rm9udENzc1VybHMoZWRpdG9yKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldEFsbEltYWdlcyA9IGVsbSA9PiB7XG4gICAgICByZXR1cm4gZWxtID8gZnJvbShlbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpKSA6IFtdO1xuICAgIH07XG4gICAgY29uc3QgSW1hZ2VTY2FubmVyID0gKHVwbG9hZFN0YXR1cywgYmxvYkNhY2hlKSA9PiB7XG4gICAgICBjb25zdCBjYWNoZWRQcm9taXNlcyA9IHt9O1xuICAgICAgY29uc3QgZmluZEFsbCA9IChlbG0sIHByZWRpY2F0ZSA9IGFsd2F5cykgPT4ge1xuICAgICAgICBjb25zdCBpbWFnZXMgPSBmaWx0ZXIkNShnZXRBbGxJbWFnZXMoZWxtKSwgaW1nID0+IHtcbiAgICAgICAgICBjb25zdCBzcmMgPSBpbWcuc3JjO1xuICAgICAgICAgIGlmIChpbWcuaGFzQXR0cmlidXRlKCdkYXRhLW1jZS1ib2d1cycpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbWcuaGFzQXR0cmlidXRlKCdkYXRhLW1jZS1wbGFjZWhvbGRlcicpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghc3JjIHx8IHNyYyA9PT0gRW52LnRyYW5zcGFyZW50U3JjKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGFydHNXaXRoKHNyYywgJ2Jsb2I6JykpIHtcbiAgICAgICAgICAgIHJldHVybiAhdXBsb2FkU3RhdHVzLmlzVXBsb2FkZWQoc3JjKSAmJiBwcmVkaWNhdGUoaW1nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YXJ0c1dpdGgoc3JjLCAnZGF0YTonKSkge1xuICAgICAgICAgICAgcmV0dXJuIHByZWRpY2F0ZShpbWcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IG1hcCQzKGltYWdlcywgaW1nID0+IHtcbiAgICAgICAgICBjb25zdCBpbWFnZVNyYyA9IGltZy5zcmM7XG4gICAgICAgICAgaWYgKGhhcyQyKGNhY2hlZFByb21pc2VzLCBpbWFnZVNyYykpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRQcm9taXNlc1tpbWFnZVNyY10udGhlbihpbWFnZUluZm8gPT4ge1xuICAgICAgICAgICAgICBpZiAoaXNTdHJpbmcoaW1hZ2VJbmZvKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbWFnZUluZm87XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGltYWdlOiBpbWcsXG4gICAgICAgICAgICAgICAgICBibG9iSW5mbzogaW1hZ2VJbmZvLmJsb2JJbmZvXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1Byb21pc2UgPSBpbWFnZVRvQmxvYkluZm8oYmxvYkNhY2hlLCBpbWFnZVNyYykudGhlbihibG9iSW5mbyA9PiB7XG4gICAgICAgICAgICAgIGRlbGV0ZSBjYWNoZWRQcm9taXNlc1tpbWFnZVNyY107XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaW1hZ2U6IGltZyxcbiAgICAgICAgICAgICAgICBibG9iSW5mb1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgICBkZWxldGUgY2FjaGVkUHJvbWlzZXNbaW1hZ2VTcmNdO1xuICAgICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNhY2hlZFByb21pc2VzW2ltYWdlU3JjXSA9IG5ld1Byb21pc2U7XG4gICAgICAgICAgICByZXR1cm4gbmV3UHJvbWlzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7IGZpbmRBbGwgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgVXBsb2FkU3RhdHVzID0gKCkgPT4ge1xuICAgICAgY29uc3QgUEVORElORyA9IDEsIFVQTE9BREVEID0gMjtcbiAgICAgIGxldCBibG9iVXJpU3RhdHVzZXMgPSB7fTtcbiAgICAgIGNvbnN0IGNyZWF0ZVN0YXR1cyA9IChzdGF0dXMsIHJlc3VsdFVyaSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICByZXN1bHRVcmlcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCBoYXNCbG9iVXJpID0gYmxvYlVyaSA9PiB7XG4gICAgICAgIHJldHVybiBibG9iVXJpIGluIGJsb2JVcmlTdGF0dXNlcztcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRSZXN1bHRVcmkgPSBibG9iVXJpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYmxvYlVyaVN0YXR1c2VzW2Jsb2JVcmldO1xuICAgICAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0LnJlc3VsdFVyaSA6IG51bGw7XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNQZW5kaW5nID0gYmxvYlVyaSA9PiB7XG4gICAgICAgIHJldHVybiBoYXNCbG9iVXJpKGJsb2JVcmkpID8gYmxvYlVyaVN0YXR1c2VzW2Jsb2JVcmldLnN0YXR1cyA9PT0gUEVORElORyA6IGZhbHNlO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzVXBsb2FkZWQgPSBibG9iVXJpID0+IHtcbiAgICAgICAgcmV0dXJuIGhhc0Jsb2JVcmkoYmxvYlVyaSkgPyBibG9iVXJpU3RhdHVzZXNbYmxvYlVyaV0uc3RhdHVzID09PSBVUExPQURFRCA6IGZhbHNlO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG1hcmtQZW5kaW5nID0gYmxvYlVyaSA9PiB7XG4gICAgICAgIGJsb2JVcmlTdGF0dXNlc1tibG9iVXJpXSA9IGNyZWF0ZVN0YXR1cyhQRU5ESU5HLCBudWxsKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBtYXJrVXBsb2FkZWQgPSAoYmxvYlVyaSwgcmVzdWx0VXJpKSA9PiB7XG4gICAgICAgIGJsb2JVcmlTdGF0dXNlc1tibG9iVXJpXSA9IGNyZWF0ZVN0YXR1cyhVUExPQURFRCwgcmVzdWx0VXJpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZW1vdmVGYWlsZWQgPSBibG9iVXJpID0+IHtcbiAgICAgICAgZGVsZXRlIGJsb2JVcmlTdGF0dXNlc1tibG9iVXJpXTtcbiAgICAgIH07XG4gICAgICBjb25zdCBkZXN0cm95ID0gKCkgPT4ge1xuICAgICAgICBibG9iVXJpU3RhdHVzZXMgPSB7fTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBoYXNCbG9iVXJpLFxuICAgICAgICBnZXRSZXN1bHRVcmksXG4gICAgICAgIGlzUGVuZGluZyxcbiAgICAgICAgaXNVcGxvYWRlZCxcbiAgICAgICAgbWFya1BlbmRpbmcsXG4gICAgICAgIG1hcmtVcGxvYWRlZCxcbiAgICAgICAgcmVtb3ZlRmFpbGVkLFxuICAgICAgICBkZXN0cm95XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGNvbnN0IHNlZWQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBybmQgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiA0Mjk0OTY3Mjk1KS50b1N0cmluZygzNik7XG4gICAgICB9O1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICByZXR1cm4gJ3MnICsgbm93LnRvU3RyaW5nKDM2KSArIHJuZCgpICsgcm5kKCkgKyBybmQoKTtcbiAgICB9O1xuICAgIGNvbnN0IHV1aWQgPSBwcmVmaXggPT4ge1xuICAgICAgcmV0dXJuIHByZWZpeCArIGNvdW50KysgKyBzZWVkKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IEJsb2JDYWNoZSA9ICgpID0+IHtcbiAgICAgIGxldCBjYWNoZSA9IFtdO1xuICAgICAgY29uc3QgbWltZVRvRXh0ID0gbWltZSA9PiB7XG4gICAgICAgIGNvbnN0IG1pbWVzID0ge1xuICAgICAgICAgICdpbWFnZS9qcGVnJzogJ2pwZycsXG4gICAgICAgICAgJ2ltYWdlL2pwZyc6ICdqcGcnLFxuICAgICAgICAgICdpbWFnZS9naWYnOiAnZ2lmJyxcbiAgICAgICAgICAnaW1hZ2UvcG5nJzogJ3BuZycsXG4gICAgICAgICAgJ2ltYWdlL2FwbmcnOiAnYXBuZycsXG4gICAgICAgICAgJ2ltYWdlL2F2aWYnOiAnYXZpZicsXG4gICAgICAgICAgJ2ltYWdlL3N2Zyt4bWwnOiAnc3ZnJyxcbiAgICAgICAgICAnaW1hZ2Uvd2VicCc6ICd3ZWJwJyxcbiAgICAgICAgICAnaW1hZ2UvYm1wJzogJ2JtcCcsXG4gICAgICAgICAgJ2ltYWdlL3RpZmYnOiAndGlmZidcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1pbWVzW21pbWUudG9Mb3dlckNhc2UoKV0gfHwgJ2RhdCc7XG4gICAgICB9O1xuICAgICAgY29uc3QgY3JlYXRlID0gKG8sIGJsb2IsIGJhc2U2NCwgbmFtZSwgZmlsZW5hbWUpID0+IHtcbiAgICAgICAgaWYgKGlzU3RyaW5nKG8pKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBvO1xuICAgICAgICAgIHJldHVybiB0b0Jsb2JJbmZvKHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGZpbGVuYW1lLFxuICAgICAgICAgICAgYmxvYjogYmxvYixcbiAgICAgICAgICAgIGJhc2U2NDogYmFzZTY0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QobykpIHtcbiAgICAgICAgICByZXR1cm4gdG9CbG9iSW5mbyhvKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gaW5wdXQgdHlwZScpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgdG9CbG9iSW5mbyA9IG8gPT4ge1xuICAgICAgICBpZiAoIW8uYmxvYiB8fCAhby5iYXNlNjQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Jsb2IgYW5kIGJhc2U2NCByZXByZXNlbnRhdGlvbnMgb2YgdGhlIGltYWdlIGFyZSByZXF1aXJlZCBmb3IgQmxvYkluZm8gdG8gYmUgY3JlYXRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkID0gby5pZCB8fCB1dWlkKCdibG9iaWQnKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IG8ubmFtZSB8fCBpZDtcbiAgICAgICAgY29uc3QgYmxvYiA9IG8uYmxvYjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZDogY29uc3RhbnQoaWQpLFxuICAgICAgICAgIG5hbWU6IGNvbnN0YW50KG5hbWUpLFxuICAgICAgICAgIGZpbGVuYW1lOiBjb25zdGFudChvLmZpbGVuYW1lIHx8IG5hbWUgKyAnLicgKyBtaW1lVG9FeHQoYmxvYi50eXBlKSksXG4gICAgICAgICAgYmxvYjogY29uc3RhbnQoYmxvYiksXG4gICAgICAgICAgYmFzZTY0OiBjb25zdGFudChvLmJhc2U2NCksXG4gICAgICAgICAgYmxvYlVyaTogY29uc3RhbnQoby5ibG9iVXJpIHx8IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYikpLFxuICAgICAgICAgIHVyaTogY29uc3RhbnQoby51cmkpXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uc3QgYWRkID0gYmxvYkluZm8gPT4ge1xuICAgICAgICBpZiAoIWdldChibG9iSW5mby5pZCgpKSkge1xuICAgICAgICAgIGNhY2hlLnB1c2goYmxvYkluZm8pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgZmluZEZpcnN0ID0gcHJlZGljYXRlID0+IGZpbmQkMihjYWNoZSwgcHJlZGljYXRlKS5nZXRPclVuZGVmaW5lZCgpO1xuICAgICAgY29uc3QgZ2V0ID0gaWQgPT4gZmluZEZpcnN0KGNhY2hlZEJsb2JJbmZvID0+IGNhY2hlZEJsb2JJbmZvLmlkKCkgPT09IGlkKTtcbiAgICAgIGNvbnN0IGdldEJ5VXJpID0gYmxvYlVyaSA9PiBmaW5kRmlyc3QoYmxvYkluZm8gPT4gYmxvYkluZm8uYmxvYlVyaSgpID09PSBibG9iVXJpKTtcbiAgICAgIGNvbnN0IGdldEJ5RGF0YSA9IChiYXNlNjQsIHR5cGUpID0+IGZpbmRGaXJzdChibG9iSW5mbyA9PiBibG9iSW5mby5iYXNlNjQoKSA9PT0gYmFzZTY0ICYmIGJsb2JJbmZvLmJsb2IoKS50eXBlID09PSB0eXBlKTtcbiAgICAgIGNvbnN0IHJlbW92ZUJ5VXJpID0gYmxvYlVyaSA9PiB7XG4gICAgICAgIGNhY2hlID0gZmlsdGVyJDUoY2FjaGUsIGJsb2JJbmZvID0+IHtcbiAgICAgICAgICBpZiAoYmxvYkluZm8uYmxvYlVyaSgpID09PSBibG9iVXJpKSB7XG4gICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGJsb2JJbmZvLmJsb2JVcmkoKSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBkZXN0cm95ID0gKCkgPT4ge1xuICAgICAgICBlYWNoJGUoY2FjaGUsIGNhY2hlZEJsb2JJbmZvID0+IHtcbiAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGNhY2hlZEJsb2JJbmZvLmJsb2JVcmkoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjYWNoZSA9IFtdO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNyZWF0ZSxcbiAgICAgICAgYWRkLFxuICAgICAgICBnZXQsXG4gICAgICAgIGdldEJ5VXJpLFxuICAgICAgICBnZXRCeURhdGEsXG4gICAgICAgIGZpbmRGaXJzdCxcbiAgICAgICAgcmVtb3ZlQnlVcmksXG4gICAgICAgIGRlc3Ryb3lcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IFVwbG9hZGVyID0gKHVwbG9hZFN0YXR1cywgc2V0dGluZ3MpID0+IHtcbiAgICAgIGNvbnN0IHBlbmRpbmdQcm9taXNlcyA9IHt9O1xuICAgICAgY29uc3QgcGF0aEpvaW4gPSAocGF0aDEsIHBhdGgyKSA9PiB7XG4gICAgICAgIGlmIChwYXRoMSkge1xuICAgICAgICAgIHJldHVybiBwYXRoMS5yZXBsYWNlKC9cXC8kLywgJycpICsgJy8nICsgcGF0aDIucmVwbGFjZSgvXlxcLy8sICcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF0aDI7XG4gICAgICB9O1xuICAgICAgY29uc3QgZGVmYXVsdEhhbmRsZXIgPSAoYmxvYkluZm8sIHByb2dyZXNzKSA9PiBuZXcgUHJvbWlzZSgoc3VjY2VzcywgZmFpbHVyZSkgPT4ge1xuICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgeGhyLm9wZW4oJ1BPU1QnLCBzZXR0aW5ncy51cmwpO1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gc2V0dGluZ3MuY3JlZGVudGlhbHM7XG4gICAgICAgIHhoci51cGxvYWQub25wcm9ncmVzcyA9IGUgPT4ge1xuICAgICAgICAgIHByb2dyZXNzKGUubG9hZGVkIC8gZS50b3RhbCAqIDEwMCk7XG4gICAgICAgIH07XG4gICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgIGZhaWx1cmUoJ0ltYWdlIHVwbG9hZCBmYWlsZWQgZHVlIHRvIGEgWEhSIFRyYW5zcG9ydCBlcnJvci4gQ29kZTogJyArIHhoci5zdGF0dXMpO1xuICAgICAgICB9O1xuICAgICAgICB4aHIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgIGlmICh4aHIuc3RhdHVzIDwgMjAwIHx8IHhoci5zdGF0dXMgPj0gMzAwKSB7XG4gICAgICAgICAgICBmYWlsdXJlKCdIVFRQIEVycm9yOiAnICsgeGhyLnN0YXR1cyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgIGlmICghanNvbiB8fCAhaXNTdHJpbmcoanNvbi5sb2NhdGlvbikpIHtcbiAgICAgICAgICAgIGZhaWx1cmUoJ0ludmFsaWQgSlNPTjogJyArIHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdWNjZXNzKHBhdGhKb2luKHNldHRpbmdzLmJhc2VQYXRoLCBqc29uLmxvY2F0aW9uKSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGJsb2JJbmZvLmJsb2IoKSwgYmxvYkluZm8uZmlsZW5hbWUoKSk7XG4gICAgICAgIHhoci5zZW5kKGZvcm1EYXRhKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdXBsb2FkSGFuZGxlciA9IGlzRnVuY3Rpb24oc2V0dGluZ3MuaGFuZGxlcikgPyBzZXR0aW5ncy5oYW5kbGVyIDogZGVmYXVsdEhhbmRsZXI7XG4gICAgICBjb25zdCBub1VwbG9hZCA9ICgpID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICByZXNvbHZlKFtdKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaGFuZGxlclN1Y2Nlc3MgPSAoYmxvYkluZm8sIHVybCkgPT4gKHtcbiAgICAgICAgdXJsLFxuICAgICAgICBibG9iSW5mbyxcbiAgICAgICAgc3RhdHVzOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGhhbmRsZXJGYWlsdXJlID0gKGJsb2JJbmZvLCBlcnJvcikgPT4gKHtcbiAgICAgICAgdXJsOiAnJyxcbiAgICAgICAgYmxvYkluZm8sXG4gICAgICAgIHN0YXR1czogZmFsc2UsXG4gICAgICAgIGVycm9yXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc29sdmVQZW5kaW5nID0gKGJsb2JVcmksIHJlc3VsdCkgPT4ge1xuICAgICAgICBUb29scy5lYWNoKHBlbmRpbmdQcm9taXNlc1tibG9iVXJpXSwgcmVzb2x2ZSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICAgICAgZGVsZXRlIHBlbmRpbmdQcm9taXNlc1tibG9iVXJpXTtcbiAgICAgIH07XG4gICAgICBjb25zdCB1cGxvYWRCbG9iSW5mbyA9IChibG9iSW5mbywgaGFuZGxlciwgb3Blbk5vdGlmaWNhdGlvbikgPT4ge1xuICAgICAgICB1cGxvYWRTdGF0dXMubWFya1BlbmRpbmcoYmxvYkluZm8uYmxvYlVyaSgpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGxldCBub3RpZmljYXRpb247XG4gICAgICAgICAgbGV0IHByb2dyZXNzO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBjbG9zZU5vdGlmaWNhdGlvbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG5vdGlmaWNhdGlvbikge1xuICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbi5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHByb2dyZXNzID0gbm9vcDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB1cmwgPT4ge1xuICAgICAgICAgICAgICBjbG9zZU5vdGlmaWNhdGlvbigpO1xuICAgICAgICAgICAgICB1cGxvYWRTdGF0dXMubWFya1VwbG9hZGVkKGJsb2JJbmZvLmJsb2JVcmkoKSwgdXJsKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZVBlbmRpbmcoYmxvYkluZm8uYmxvYlVyaSgpLCBoYW5kbGVyU3VjY2VzcyhibG9iSW5mbywgdXJsKSk7XG4gICAgICAgICAgICAgIHJlc29sdmUoaGFuZGxlclN1Y2Nlc3MoYmxvYkluZm8sIHVybCkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGZhaWx1cmUgPSBlcnJvciA9PiB7XG4gICAgICAgICAgICAgIGNsb3NlTm90aWZpY2F0aW9uKCk7XG4gICAgICAgICAgICAgIHVwbG9hZFN0YXR1cy5yZW1vdmVGYWlsZWQoYmxvYkluZm8uYmxvYlVyaSgpKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZVBlbmRpbmcoYmxvYkluZm8uYmxvYlVyaSgpLCBoYW5kbGVyRmFpbHVyZShibG9iSW5mbywgZXJyb3IpKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZShoYW5kbGVyRmFpbHVyZShibG9iSW5mbywgZXJyb3IpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBwcm9ncmVzcyA9IHBlcmNlbnQgPT4ge1xuICAgICAgICAgICAgICBpZiAocGVyY2VudCA8IDAgfHwgcGVyY2VudCA+IDEwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBPcHRpb25hbC5mcm9tKG5vdGlmaWNhdGlvbikub3JUaHVuaygoKSA9PiBPcHRpb25hbC5mcm9tKG9wZW5Ob3RpZmljYXRpb24pLm1hcChhcHBseSQxKSkuZWFjaChuID0+IHtcbiAgICAgICAgICAgICAgICBub3RpZmljYXRpb24gPSBuO1xuICAgICAgICAgICAgICAgIG4ucHJvZ3Jlc3NCYXIudmFsdWUocGVyY2VudCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGhhbmRsZXIoYmxvYkluZm8sIHByb2dyZXNzKS50aGVuKHN1Y2Nlc3MsIGVyciA9PiB7XG4gICAgICAgICAgICAgIGZhaWx1cmUoaXNTdHJpbmcoZXJyKSA/IHsgbWVzc2FnZTogZXJyIH0gOiBlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIHJlc29sdmUoaGFuZGxlckZhaWx1cmUoYmxvYkluZm8sIGV4KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0RlZmF1bHRIYW5kbGVyID0gaGFuZGxlciA9PiBoYW5kbGVyID09PSBkZWZhdWx0SGFuZGxlcjtcbiAgICAgIGNvbnN0IHBlbmRpbmdVcGxvYWRCbG9iSW5mbyA9IGJsb2JJbmZvID0+IHtcbiAgICAgICAgY29uc3QgYmxvYlVyaSA9IGJsb2JJbmZvLmJsb2JVcmkoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIHBlbmRpbmdQcm9taXNlc1tibG9iVXJpXSA9IHBlbmRpbmdQcm9taXNlc1tibG9iVXJpXSB8fCBbXTtcbiAgICAgICAgICBwZW5kaW5nUHJvbWlzZXNbYmxvYlVyaV0ucHVzaChyZXNvbHZlKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdXBsb2FkQmxvYnMgPSAoYmxvYkluZm9zLCBvcGVuTm90aWZpY2F0aW9uKSA9PiB7XG4gICAgICAgIGJsb2JJbmZvcyA9IFRvb2xzLmdyZXAoYmxvYkluZm9zLCBibG9iSW5mbyA9PiAhdXBsb2FkU3RhdHVzLmlzVXBsb2FkZWQoYmxvYkluZm8uYmxvYlVyaSgpKSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChUb29scy5tYXAoYmxvYkluZm9zLCBibG9iSW5mbyA9PiB1cGxvYWRTdGF0dXMuaXNQZW5kaW5nKGJsb2JJbmZvLmJsb2JVcmkoKSkgPyBwZW5kaW5nVXBsb2FkQmxvYkluZm8oYmxvYkluZm8pIDogdXBsb2FkQmxvYkluZm8oYmxvYkluZm8sIHVwbG9hZEhhbmRsZXIsIG9wZW5Ob3RpZmljYXRpb24pKSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdXBsb2FkID0gKGJsb2JJbmZvcywgb3Blbk5vdGlmaWNhdGlvbikgPT4gIXNldHRpbmdzLnVybCAmJiBpc0RlZmF1bHRIYW5kbGVyKHVwbG9hZEhhbmRsZXIpID8gbm9VcGxvYWQoKSA6IHVwbG9hZEJsb2JzKGJsb2JJbmZvcywgb3Blbk5vdGlmaWNhdGlvbik7XG4gICAgICByZXR1cm4geyB1cGxvYWQgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb3Blbk5vdGlmaWNhdGlvbiA9IGVkaXRvciA9PiAoKSA9PiBlZGl0b3Iubm90aWZpY2F0aW9uTWFuYWdlci5vcGVuKHtcbiAgICAgIHRleHQ6IGVkaXRvci50cmFuc2xhdGUoJ0ltYWdlIHVwbG9hZGluZy4uLicpLFxuICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgdGltZW91dDogLTEsXG4gICAgICBwcm9ncmVzc0JhcjogdHJ1ZVxuICAgIH0pO1xuICAgIGNvbnN0IGNyZWF0ZVVwbG9hZGVyID0gKGVkaXRvciwgdXBsb2FkU3RhdHVzKSA9PiBVcGxvYWRlcih1cGxvYWRTdGF0dXMsIHtcbiAgICAgIHVybDogZ2V0SW1hZ2VVcGxvYWRVcmwoZWRpdG9yKSxcbiAgICAgIGJhc2VQYXRoOiBnZXRJbWFnZVVwbG9hZEJhc2VQYXRoKGVkaXRvciksXG4gICAgICBjcmVkZW50aWFsczogZ2V0SW1hZ2VzVXBsb2FkQ3JlZGVudGlhbHMoZWRpdG9yKSxcbiAgICAgIGhhbmRsZXI6IGdldEltYWdlc1VwbG9hZEhhbmRsZXIoZWRpdG9yKVxuICAgIH0pO1xuICAgIGNvbnN0IEltYWdlVXBsb2FkZXIgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgdXBsb2FkU3RhdHVzID0gVXBsb2FkU3RhdHVzKCk7XG4gICAgICBjb25zdCB1cGxvYWRlciA9IGNyZWF0ZVVwbG9hZGVyKGVkaXRvciwgdXBsb2FkU3RhdHVzKTtcbiAgICAgIHJldHVybiB7IHVwbG9hZDogKGJsb2JJbmZvcywgc2hvd05vdGlmaWNhdGlvbiA9IHRydWUpID0+IHVwbG9hZGVyLnVwbG9hZChibG9iSW5mb3MsIHNob3dOb3RpZmljYXRpb24gPyBvcGVuTm90aWZpY2F0aW9uKGVkaXRvcikgOiB1bmRlZmluZWQpIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGlzRW1wdHlGb3JQYWRkaW5nID0gKGVkaXRvciwgZWxlbWVudCkgPT4gZWRpdG9yLmRvbS5pc0VtcHR5KGVsZW1lbnQuZG9tKSAmJiBpc05vbk51bGxhYmxlKGVkaXRvci5zY2hlbWEuZ2V0VGV4dEJsb2NrRWxlbWVudHMoKVtuYW1lKGVsZW1lbnQpXSk7XG4gICAgY29uc3QgYWRkUGFkZGluZ1RvRW1wdHkgPSBlZGl0b3IgPT4gZWxlbWVudCA9PiB7XG4gICAgICBpZiAoaXNFbXB0eUZvclBhZGRpbmcoZWRpdG9yLCBlbGVtZW50KSkge1xuICAgICAgICBhcHBlbmQkMShlbGVtZW50LCBTdWdhckVsZW1lbnQuZnJvbUh0bWwoJzxiciBkYXRhLW1jZS1ib2d1cz1cIjFcIiAvPicpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IEVkaXRvclVwbG9hZCA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBibG9iQ2FjaGUgPSBCbG9iQ2FjaGUoKTtcbiAgICAgIGxldCB1cGxvYWRlciwgaW1hZ2VTY2FubmVyO1xuICAgICAgY29uc3QgdXBsb2FkU3RhdHVzID0gVXBsb2FkU3RhdHVzKCk7XG4gICAgICBjb25zdCB1cmxGaWx0ZXJzID0gW107XG4gICAgICBjb25zdCBhbGl2ZUd1YXJkID0gY2FsbGJhY2sgPT4ge1xuICAgICAgICByZXR1cm4gcmVzdWx0ID0+IHtcbiAgICAgICAgICBpZiAoZWRpdG9yLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjYWNoZUludmFsaWRhdG9yID0gdXJsID0+IHVybCArICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgIGNvbnN0IHJlcGxhY2VTdHJpbmcgPSAoY29udGVudCwgc2VhcmNoLCByZXBsYWNlKSA9PiB7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBpbmRleCA9IGNvbnRlbnQuaW5kZXhPZihzZWFyY2gsIGluZGV4KTtcbiAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoMCwgaW5kZXgpICsgcmVwbGFjZSArIGNvbnRlbnQuc3Vic3RyKGluZGV4ICsgc2VhcmNoLmxlbmd0aCk7XG4gICAgICAgICAgICBpbmRleCArPSByZXBsYWNlLmxlbmd0aCAtIHNlYXJjaC5sZW5ndGggKyAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoaW5kZXggIT09IC0xKTtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVwbGFjZUltYWdlVXJsID0gKGNvbnRlbnQsIHRhcmdldFVybCwgcmVwbGFjZW1lbnRVcmwpID0+IHtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRTdHJpbmcgPSBgc3JjPVwiJHsgcmVwbGFjZW1lbnRVcmwgfVwiJHsgcmVwbGFjZW1lbnRVcmwgPT09IEVudi50cmFuc3BhcmVudFNyYyA/ICcgZGF0YS1tY2UtcGxhY2Vob2xkZXI9XCIxXCInIDogJycgfWA7XG4gICAgICAgIGNvbnRlbnQgPSByZXBsYWNlU3RyaW5nKGNvbnRlbnQsIGBzcmM9XCIkeyB0YXJnZXRVcmwgfVwiYCwgcmVwbGFjZW1lbnRTdHJpbmcpO1xuICAgICAgICBjb250ZW50ID0gcmVwbGFjZVN0cmluZyhjb250ZW50LCAnZGF0YS1tY2Utc3JjPVwiJyArIHRhcmdldFVybCArICdcIicsICdkYXRhLW1jZS1zcmM9XCInICsgcmVwbGFjZW1lbnRVcmwgKyAnXCInKTtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVwbGFjZVVybEluVW5kb1N0YWNrID0gKHRhcmdldFVybCwgcmVwbGFjZW1lbnRVcmwpID0+IHtcbiAgICAgICAgZWFjaCRlKGVkaXRvci51bmRvTWFuYWdlci5kYXRhLCBsZXZlbCA9PiB7XG4gICAgICAgICAgaWYgKGxldmVsLnR5cGUgPT09ICdmcmFnbWVudGVkJykge1xuICAgICAgICAgICAgbGV2ZWwuZnJhZ21lbnRzID0gbWFwJDMobGV2ZWwuZnJhZ21lbnRzLCBmcmFnbWVudCA9PiByZXBsYWNlSW1hZ2VVcmwoZnJhZ21lbnQsIHRhcmdldFVybCwgcmVwbGFjZW1lbnRVcmwpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV2ZWwuY29udGVudCA9IHJlcGxhY2VJbWFnZVVybChsZXZlbC5jb250ZW50LCB0YXJnZXRVcmwsIHJlcGxhY2VtZW50VXJsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlcGxhY2VJbWFnZVVyaUluVmlldyA9IChpbWFnZSwgcmVzdWx0VXJpKSA9PiB7XG4gICAgICAgIGNvbnN0IHNyYyA9IGVkaXRvci5jb252ZXJ0VVJMKHJlc3VsdFVyaSwgJ3NyYycpO1xuICAgICAgICByZXBsYWNlVXJsSW5VbmRvU3RhY2soaW1hZ2Uuc3JjLCByZXN1bHRVcmkpO1xuICAgICAgICBzZXRBbGwkMShTdWdhckVsZW1lbnQuZnJvbURvbShpbWFnZSksIHtcbiAgICAgICAgICAnc3JjJzogc2hvdWxkUmV1c2VGaWxlTmFtZShlZGl0b3IpID8gY2FjaGVJbnZhbGlkYXRvcihyZXN1bHRVcmkpIDogcmVzdWx0VXJpLFxuICAgICAgICAgICdkYXRhLW1jZS1zcmMnOiBzcmNcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdXBsb2FkSW1hZ2VzID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXVwbG9hZGVyKSB7XG4gICAgICAgICAgdXBsb2FkZXIgPSBjcmVhdGVVcGxvYWRlcihlZGl0b3IsIHVwbG9hZFN0YXR1cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjYW5Gb3JJbWFnZXMoKS50aGVuKGFsaXZlR3VhcmQoaW1hZ2VJbmZvcyA9PiB7XG4gICAgICAgICAgY29uc3QgYmxvYkluZm9zID0gbWFwJDMoaW1hZ2VJbmZvcywgaW1hZ2VJbmZvID0+IGltYWdlSW5mby5ibG9iSW5mbyk7XG4gICAgICAgICAgcmV0dXJuIHVwbG9hZGVyLnVwbG9hZChibG9iSW5mb3MsIG9wZW5Ob3RpZmljYXRpb24oZWRpdG9yKSkudGhlbihhbGl2ZUd1YXJkKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbWFnZXNUb1JlbW92ZSA9IFtdO1xuICAgICAgICAgICAgbGV0IHNob3VsZERpc3BhdGNoQ2hhbmdlID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFJlc3VsdCA9IG1hcCQzKHJlc3VsdCwgKHVwbG9hZEluZm8sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHtibG9iSW5mbywgaW1hZ2V9ID0gaW1hZ2VJbmZvc1tpbmRleF07XG4gICAgICAgICAgICAgIGxldCByZW1vdmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmICh1cGxvYWRJbmZvLnN0YXR1cyAmJiBzaG91bGRSZXBsYWNlQmxvYlVyaXMoZWRpdG9yKSkge1xuICAgICAgICAgICAgICAgIGlmICh1cGxvYWRJbmZvLnVybCAmJiAhY29udGFpbnMkMShpbWFnZS5zcmMsIHVwbG9hZEluZm8udXJsKSkge1xuICAgICAgICAgICAgICAgICAgc2hvdWxkRGlzcGF0Y2hDaGFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBibG9iQ2FjaGUucmVtb3ZlQnlVcmkoaW1hZ2Uuc3JjKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNSdGMoZWRpdG9yKSkgOyBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJlcGxhY2VJbWFnZVVyaUluVmlldyhpbWFnZSwgdXBsb2FkSW5mby51cmwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh1cGxvYWRJbmZvLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVwbG9hZEluZm8uZXJyb3IucmVtb3ZlKSB7XG4gICAgICAgICAgICAgICAgICByZXBsYWNlVXJsSW5VbmRvU3RhY2soaW1hZ2Uuc3JjLCBFbnYudHJhbnNwYXJlbnRTcmMpO1xuICAgICAgICAgICAgICAgICAgaW1hZ2VzVG9SZW1vdmUucHVzaChpbWFnZSk7XG4gICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdXBsb2FkRXJyb3IoZWRpdG9yLCB1cGxvYWRJbmZvLmVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZWxlbWVudDogaW1hZ2UsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiB1cGxvYWRJbmZvLnN0YXR1cyxcbiAgICAgICAgICAgICAgICB1cGxvYWRVcmk6IHVwbG9hZEluZm8udXJsLFxuICAgICAgICAgICAgICAgIGJsb2JJbmZvLFxuICAgICAgICAgICAgICAgIHJlbW92ZWRcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGltYWdlc1RvUmVtb3ZlLmxlbmd0aCA+IDAgJiYgIWlzUnRjKGVkaXRvcikpIHtcbiAgICAgICAgICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBlYWNoJGUoZnJvbURvbSQxKGltYWdlc1RvUmVtb3ZlKSwgc3VnYXJFbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudE9wdCA9IHBhcmVudChzdWdhckVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgcmVtb3ZlJDUoc3VnYXJFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgIHBhcmVudE9wdC5lYWNoKGFkZFBhZGRpbmdUb0VtcHR5KGVkaXRvcikpO1xuICAgICAgICAgICAgICAgICAgYmxvYkNhY2hlLnJlbW92ZUJ5VXJpKHN1Z2FyRWxlbWVudC5kb20uc3JjKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZERpc3BhdGNoQ2hhbmdlKSB7XG4gICAgICAgICAgICAgIGVkaXRvci51bmRvTWFuYWdlci5kaXNwYXRjaENoYW5nZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkUmVzdWx0O1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVwbG9hZEltYWdlc0F1dG8gPSAoKSA9PiBpc0F1dG9tYXRpY1VwbG9hZHNFbmFibGVkKGVkaXRvcikgPyB1cGxvYWRJbWFnZXMoKSA6IFByb21pc2UucmVzb2x2ZShbXSk7XG4gICAgICBjb25zdCBpc1ZhbGlkRGF0YVVyaUltYWdlID0gaW1nRWxtID0+IGZvcmFsbCh1cmxGaWx0ZXJzLCBmaWx0ZXIgPT4gZmlsdGVyKGltZ0VsbSkpO1xuICAgICAgY29uc3QgYWRkRmlsdGVyID0gZmlsdGVyID0+IHtcbiAgICAgICAgdXJsRmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2NhbkZvckltYWdlcyA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFpbWFnZVNjYW5uZXIpIHtcbiAgICAgICAgICBpbWFnZVNjYW5uZXIgPSBJbWFnZVNjYW5uZXIodXBsb2FkU3RhdHVzLCBibG9iQ2FjaGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbWFnZVNjYW5uZXIuZmluZEFsbChlZGl0b3IuZ2V0Qm9keSgpLCBpc1ZhbGlkRGF0YVVyaUltYWdlKS50aGVuKGFsaXZlR3VhcmQocmVzdWx0ID0+IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZFJlc3VsdCA9IGZpbHRlciQ1KHJlc3VsdCwgcmVzdWx0SXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNTdHJpbmcocmVzdWx0SXRlbSkpIHtcbiAgICAgICAgICAgICAgZGlzcGxheUVycm9yKGVkaXRvciwgcmVzdWx0SXRlbSk7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0SXRlbS51cmlUeXBlID09PSAnYmxvYicpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGlzUnRjKGVkaXRvcikpIDsgZWxzZSB7XG4gICAgICAgICAgICBlYWNoJGUoZmlsdGVyZWRSZXN1bHQsIHJlc3VsdEl0ZW0gPT4ge1xuICAgICAgICAgICAgICByZXBsYWNlVXJsSW5VbmRvU3RhY2socmVzdWx0SXRlbS5pbWFnZS5zcmMsIHJlc3VsdEl0ZW0uYmxvYkluZm8uYmxvYlVyaSgpKTtcbiAgICAgICAgICAgICAgcmVzdWx0SXRlbS5pbWFnZS5zcmMgPSByZXN1bHRJdGVtLmJsb2JJbmZvLmJsb2JVcmkoKTtcbiAgICAgICAgICAgICAgcmVzdWx0SXRlbS5pbWFnZS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbWNlLXNyYycpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmaWx0ZXJlZFJlc3VsdDtcbiAgICAgICAgfSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICAgIGJsb2JDYWNoZS5kZXN0cm95KCk7XG4gICAgICAgIHVwbG9hZFN0YXR1cy5kZXN0cm95KCk7XG4gICAgICAgIGltYWdlU2Nhbm5lciA9IHVwbG9hZGVyID0gbnVsbDtcbiAgICAgIH07XG4gICAgICBjb25zdCByZXBsYWNlQmxvYlVyaXMgPSBjb250ZW50ID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZSgvc3JjPVwiKGJsb2I6W15cIl0rKVwiL2csIChtYXRjaCwgYmxvYlVyaSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdFVyaSA9IHVwbG9hZFN0YXR1cy5nZXRSZXN1bHRVcmkoYmxvYlVyaSk7XG4gICAgICAgICAgaWYgKHJlc3VsdFVyaSkge1xuICAgICAgICAgICAgcmV0dXJuICdzcmM9XCInICsgcmVzdWx0VXJpICsgJ1wiJztcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGJsb2JJbmZvID0gYmxvYkNhY2hlLmdldEJ5VXJpKGJsb2JVcmkpO1xuICAgICAgICAgIGlmICghYmxvYkluZm8pIHtcbiAgICAgICAgICAgIGJsb2JJbmZvID0gZm9sZGwoZWRpdG9yLmVkaXRvck1hbmFnZXIuZ2V0KCksIChyZXN1bHQsIGVkaXRvcikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0IHx8IGVkaXRvci5lZGl0b3JVcGxvYWQgJiYgZWRpdG9yLmVkaXRvclVwbG9hZC5ibG9iQ2FjaGUuZ2V0QnlVcmkoYmxvYlVyaSk7XG4gICAgICAgICAgICB9LCB1bmRlZmluZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYmxvYkluZm8pIHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBibG9iSW5mby5ibG9iKCk7XG4gICAgICAgICAgICByZXR1cm4gJ3NyYz1cImRhdGE6JyArIGJsb2IudHlwZSArICc7YmFzZTY0LCcgKyBibG9iSW5mby5iYXNlNjQoKSArICdcIic7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLm9uKCdTZXRDb250ZW50JywgKCkgPT4ge1xuICAgICAgICBpZiAoaXNBdXRvbWF0aWNVcGxvYWRzRW5hYmxlZChlZGl0b3IpKSB7XG4gICAgICAgICAgdXBsb2FkSW1hZ2VzQXV0bygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjYW5Gb3JJbWFnZXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ1Jhd1NhdmVDb250ZW50JywgZSA9PiB7XG4gICAgICAgIGUuY29udGVudCA9IHJlcGxhY2VCbG9iVXJpcyhlLmNvbnRlbnQpO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ0dldENvbnRlbnQnLCBlID0+IHtcbiAgICAgICAgaWYgKGUuc291cmNlX3ZpZXcgfHwgZS5mb3JtYXQgPT09ICdyYXcnIHx8IGUuZm9ybWF0ID09PSAndHJlZScpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZS5jb250ZW50ID0gcmVwbGFjZUJsb2JVcmlzKGUuY29udGVudCk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignUG9zdFJlbmRlcicsICgpID0+IHtcbiAgICAgICAgZWRpdG9yLnBhcnNlci5hZGROb2RlRmlsdGVyKCdpbWcnLCBpbWFnZXMgPT4ge1xuICAgICAgICAgIGVhY2gkZShpbWFnZXMsIGltZyA9PiB7XG4gICAgICAgICAgICBjb25zdCBzcmMgPSBpbWcuYXR0cignc3JjJyk7XG4gICAgICAgICAgICBpZiAoIXNyYyB8fCBibG9iQ2FjaGUuZ2V0QnlVcmkoc3JjKSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHRVcmkgPSB1cGxvYWRTdGF0dXMuZ2V0UmVzdWx0VXJpKHNyYyk7XG4gICAgICAgICAgICBpZiAocmVzdWx0VXJpKSB7XG4gICAgICAgICAgICAgIGltZy5hdHRyKCdzcmMnLCByZXN1bHRVcmkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmxvYkNhY2hlLFxuICAgICAgICBhZGRGaWx0ZXIsXG4gICAgICAgIHVwbG9hZEltYWdlcyxcbiAgICAgICAgdXBsb2FkSW1hZ2VzQXV0byxcbiAgICAgICAgc2NhbkZvckltYWdlcyxcbiAgICAgICAgZGVzdHJveVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0JDEgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IHNjaGVtYVR5cGUgPSBlZGl0b3Iuc2NoZW1hLnR5cGU7XG4gICAgICBjb25zdCBmb3JtYXRzID0ge1xuICAgICAgICB2YWxpZ250b3A6IFt7XG4gICAgICAgICAgICBzZWxlY3RvcjogJ3RkLHRoJyxcbiAgICAgICAgICAgIHN0eWxlczogeyB2ZXJ0aWNhbEFsaWduOiAndG9wJyB9XG4gICAgICAgICAgfV0sXG4gICAgICAgIHZhbGlnbm1pZGRsZTogW3tcbiAgICAgICAgICAgIHNlbGVjdG9yOiAndGQsdGgnLFxuICAgICAgICAgICAgc3R5bGVzOiB7IHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnIH1cbiAgICAgICAgICB9XSxcbiAgICAgICAgdmFsaWduYm90dG9tOiBbe1xuICAgICAgICAgICAgc2VsZWN0b3I6ICd0ZCx0aCcsXG4gICAgICAgICAgICBzdHlsZXM6IHsgdmVydGljYWxBbGlnbjogJ2JvdHRvbScgfVxuICAgICAgICAgIH1dLFxuICAgICAgICBhbGlnbmxlZnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWxlY3RvcjogJ2ZpZ3VyZS5pbWFnZScsXG4gICAgICAgICAgICBjb2xsYXBzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgY2xhc3NlczogJ2FsaWduLWxlZnQnLFxuICAgICAgICAgICAgY2VGYWxzZU92ZXJyaWRlOiB0cnVlLFxuICAgICAgICAgICAgcHJldmlldzogJ2ZvbnQtZmFtaWx5IGZvbnQtc2l6ZSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnZmlndXJlLHAsaDEsaDIsaDMsaDQsaDUsaDYsdGQsdGgsdHIsZGl2LHVsLG9sLGxpLHByZScsXG4gICAgICAgICAgICBzdHlsZXM6IHsgdGV4dEFsaWduOiAnbGVmdCcgfSxcbiAgICAgICAgICAgIGluaGVyaXQ6IGZhbHNlLFxuICAgICAgICAgICAgcHJldmlldzogZmFsc2VcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnaW1nLGF1ZGlvLHZpZGVvJyxcbiAgICAgICAgICAgIGNvbGxhcHNlZDogZmFsc2UsXG4gICAgICAgICAgICBzdHlsZXM6IHsgZmxvYXQ6ICdsZWZ0JyB9LFxuICAgICAgICAgICAgcHJldmlldzogJ2ZvbnQtZmFtaWx5IGZvbnQtc2l6ZSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiAndGFibGUnLFxuICAgICAgICAgICAgY29sbGFwc2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHN0eWxlczoge1xuICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiAnMHB4JyxcbiAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICdhdXRvJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uZm9ybWF0OiB0YWJsZSA9PiB7XG4gICAgICAgICAgICAgIGRvbS5zZXRTdHlsZSh0YWJsZSwgJ2Zsb2F0JywgbnVsbCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJldmlldzogJ2ZvbnQtZmFtaWx5IGZvbnQtc2l6ZSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnLm1jZS1wcmV2aWV3LW9iamVjdCxbZGF0YS1lcGhveC1lbWJlZC1pcmldJyxcbiAgICAgICAgICAgIGNlRmFsc2VPdmVycmlkZTogdHJ1ZSxcbiAgICAgICAgICAgIHN0eWxlczogeyBmbG9hdDogJ2xlZnQnIH1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGFsaWduY2VudGVyOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VsZWN0b3I6ICdmaWd1cmUscCxoMSxoMixoMyxoNCxoNSxoNix0ZCx0aCx0cixkaXYsdWwsb2wsbGkscHJlJyxcbiAgICAgICAgICAgIHN0eWxlczogeyB0ZXh0QWxpZ246ICdjZW50ZXInIH0sXG4gICAgICAgICAgICBpbmhlcml0OiBmYWxzZSxcbiAgICAgICAgICAgIHByZXZpZXc6ICdmb250LWZhbWlseSBmb250LXNpemUnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWxlY3RvcjogJ2ZpZ3VyZS5pbWFnZScsXG4gICAgICAgICAgICBjb2xsYXBzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgY2xhc3NlczogJ2FsaWduLWNlbnRlcicsXG4gICAgICAgICAgICBjZUZhbHNlT3ZlcnJpZGU6IHRydWUsXG4gICAgICAgICAgICBwcmV2aWV3OiAnZm9udC1mYW1pbHkgZm9udC1zaXplJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VsZWN0b3I6ICdpbWcsYXVkaW8sdmlkZW8nLFxuICAgICAgICAgICAgY29sbGFwc2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHN0eWxlczoge1xuICAgICAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiAnYXV0bycsXG4gICAgICAgICAgICAgIG1hcmdpblJpZ2h0OiAnYXV0bydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmV2aWV3OiBmYWxzZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VsZWN0b3I6ICd0YWJsZScsXG4gICAgICAgICAgICBjb2xsYXBzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgc3R5bGVzOiB7XG4gICAgICAgICAgICAgIG1hcmdpbkxlZnQ6ICdhdXRvJyxcbiAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICdhdXRvJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZXZpZXc6ICdmb250LWZhbWlseSBmb250LXNpemUnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWxlY3RvcjogJy5tY2UtcHJldmlldy1vYmplY3QnLFxuICAgICAgICAgICAgY2VGYWxzZU92ZXJyaWRlOiB0cnVlLFxuICAgICAgICAgICAgc3R5bGVzOiB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6ICd0YWJsZScsXG4gICAgICAgICAgICAgIG1hcmdpbkxlZnQ6ICdhdXRvJyxcbiAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICdhdXRvJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZXZpZXc6IGZhbHNlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWxlY3RvcjogJ1tkYXRhLWVwaG94LWVtYmVkLWlyaV0nLFxuICAgICAgICAgICAgY2VGYWxzZU92ZXJyaWRlOiB0cnVlLFxuICAgICAgICAgICAgc3R5bGVzOiB7XG4gICAgICAgICAgICAgIG1hcmdpbkxlZnQ6ICdhdXRvJyxcbiAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICdhdXRvJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZXZpZXc6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBhbGlnbnJpZ2h0OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VsZWN0b3I6ICdmaWd1cmUuaW1hZ2UnLFxuICAgICAgICAgICAgY29sbGFwc2VkOiBmYWxzZSxcbiAgICAgICAgICAgIGNsYXNzZXM6ICdhbGlnbi1yaWdodCcsXG4gICAgICAgICAgICBjZUZhbHNlT3ZlcnJpZGU6IHRydWUsXG4gICAgICAgICAgICBwcmV2aWV3OiAnZm9udC1mYW1pbHkgZm9udC1zaXplJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VsZWN0b3I6ICdmaWd1cmUscCxoMSxoMixoMyxoNCxoNSxoNix0ZCx0aCx0cixkaXYsdWwsb2wsbGkscHJlJyxcbiAgICAgICAgICAgIHN0eWxlczogeyB0ZXh0QWxpZ246ICdyaWdodCcgfSxcbiAgICAgICAgICAgIGluaGVyaXQ6IGZhbHNlLFxuICAgICAgICAgICAgcHJldmlldzogJ2ZvbnQtZmFtaWx5IGZvbnQtc2l6ZSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnaW1nLGF1ZGlvLHZpZGVvJyxcbiAgICAgICAgICAgIGNvbGxhcHNlZDogZmFsc2UsXG4gICAgICAgICAgICBzdHlsZXM6IHsgZmxvYXQ6ICdyaWdodCcgfSxcbiAgICAgICAgICAgIHByZXZpZXc6ICdmb250LWZhbWlseSBmb250LXNpemUnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWxlY3RvcjogJ3RhYmxlJyxcbiAgICAgICAgICAgIGNvbGxhcHNlZDogZmFsc2UsXG4gICAgICAgICAgICBzdHlsZXM6IHtcbiAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICcwcHgnLFxuICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiAnYXV0bydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbmZvcm1hdDogdGFibGUgPT4ge1xuICAgICAgICAgICAgICBkb20uc2V0U3R5bGUodGFibGUsICdmbG9hdCcsIG51bGwpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZXZpZXc6ICdmb250LWZhbWlseSBmb250LXNpemUnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWxlY3RvcjogJy5tY2UtcHJldmlldy1vYmplY3QsW2RhdGEtZXBob3gtZW1iZWQtaXJpXScsXG4gICAgICAgICAgICBjZUZhbHNlT3ZlcnJpZGU6IHRydWUsXG4gICAgICAgICAgICBzdHlsZXM6IHsgZmxvYXQ6ICdyaWdodCcgfSxcbiAgICAgICAgICAgIHByZXZpZXc6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBhbGlnbmp1c3RpZnk6IFt7XG4gICAgICAgICAgICBzZWxlY3RvcjogJ2ZpZ3VyZSxwLGgxLGgyLGgzLGg0LGg1LGg2LHRkLHRoLHRyLGRpdix1bCxvbCxsaSxwcmUnLFxuICAgICAgICAgICAgc3R5bGVzOiB7IHRleHRBbGlnbjogJ2p1c3RpZnknIH0sXG4gICAgICAgICAgICBpbmhlcml0OiBmYWxzZSxcbiAgICAgICAgICAgIHByZXZpZXc6ICdmb250LWZhbWlseSBmb250LXNpemUnXG4gICAgICAgICAgfV0sXG4gICAgICAgIGJvbGQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbmxpbmU6ICdzdHJvbmcnLFxuICAgICAgICAgICAgcmVtb3ZlOiAnYWxsJyxcbiAgICAgICAgICAgIHByZXNlcnZlX2F0dHJpYnV0ZXM6IFtcbiAgICAgICAgICAgICAgJ2NsYXNzJyxcbiAgICAgICAgICAgICAgJ3N0eWxlJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5saW5lOiAnc3BhbicsXG4gICAgICAgICAgICBzdHlsZXM6IHsgZm9udFdlaWdodDogJ2JvbGQnIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlubGluZTogJ2InLFxuICAgICAgICAgICAgcmVtb3ZlOiAnYWxsJyxcbiAgICAgICAgICAgIHByZXNlcnZlX2F0dHJpYnV0ZXM6IFtcbiAgICAgICAgICAgICAgJ2NsYXNzJyxcbiAgICAgICAgICAgICAgJ3N0eWxlJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgaXRhbGljOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5saW5lOiAnZW0nLFxuICAgICAgICAgICAgcmVtb3ZlOiAnYWxsJyxcbiAgICAgICAgICAgIHByZXNlcnZlX2F0dHJpYnV0ZXM6IFtcbiAgICAgICAgICAgICAgJ2NsYXNzJyxcbiAgICAgICAgICAgICAgJ3N0eWxlJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5saW5lOiAnc3BhbicsXG4gICAgICAgICAgICBzdHlsZXM6IHsgZm9udFN0eWxlOiAnaXRhbGljJyB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbmxpbmU6ICdpJyxcbiAgICAgICAgICAgIHJlbW92ZTogJ2FsbCcsXG4gICAgICAgICAgICBwcmVzZXJ2ZV9hdHRyaWJ1dGVzOiBbXG4gICAgICAgICAgICAgICdjbGFzcycsXG4gICAgICAgICAgICAgICdzdHlsZSdcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHVuZGVybGluZTogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlubGluZTogJ3NwYW4nLFxuICAgICAgICAgICAgc3R5bGVzOiB7IHRleHREZWNvcmF0aW9uOiAndW5kZXJsaW5lJyB9LFxuICAgICAgICAgICAgZXhhY3Q6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlubGluZTogJ3UnLFxuICAgICAgICAgICAgcmVtb3ZlOiAnYWxsJyxcbiAgICAgICAgICAgIHByZXNlcnZlX2F0dHJpYnV0ZXM6IFtcbiAgICAgICAgICAgICAgJ2NsYXNzJyxcbiAgICAgICAgICAgICAgJ3N0eWxlJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgc3RyaWtldGhyb3VnaDogKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBzcGFuID0ge1xuICAgICAgICAgICAgaW5saW5lOiAnc3BhbicsXG4gICAgICAgICAgICBzdHlsZXM6IHsgdGV4dERlY29yYXRpb246ICdsaW5lLXRocm91Z2gnIH0sXG4gICAgICAgICAgICBleGFjdDogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3Qgc3RyaWtlID0ge1xuICAgICAgICAgICAgaW5saW5lOiAnc3RyaWtlJyxcbiAgICAgICAgICAgIHJlbW92ZTogJ2FsbCcsXG4gICAgICAgICAgICBwcmVzZXJ2ZV9hdHRyaWJ1dGVzOiBbXG4gICAgICAgICAgICAgICdjbGFzcycsXG4gICAgICAgICAgICAgICdzdHlsZSdcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IHMgPSB7XG4gICAgICAgICAgICBpbmxpbmU6ICdzJyxcbiAgICAgICAgICAgIHJlbW92ZTogJ2FsbCcsXG4gICAgICAgICAgICBwcmVzZXJ2ZV9hdHRyaWJ1dGVzOiBbXG4gICAgICAgICAgICAgICdjbGFzcycsXG4gICAgICAgICAgICAgICdzdHlsZSdcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBzY2hlbWFUeXBlICE9PSAnaHRtbDQnID8gW1xuICAgICAgICAgICAgcyxcbiAgICAgICAgICAgIHNwYW4sXG4gICAgICAgICAgICBzdHJpa2VcbiAgICAgICAgICBdIDogW1xuICAgICAgICAgICAgc3BhbixcbiAgICAgICAgICAgIHMsXG4gICAgICAgICAgICBzdHJpa2VcbiAgICAgICAgICBdO1xuICAgICAgICB9KSgpLFxuICAgICAgICBmb3JlY29sb3I6IHtcbiAgICAgICAgICBpbmxpbmU6ICdzcGFuJyxcbiAgICAgICAgICBzdHlsZXM6IHsgY29sb3I6ICcldmFsdWUnIH0sXG4gICAgICAgICAgbGlua3M6IHRydWUsXG4gICAgICAgICAgcmVtb3ZlX3NpbWlsYXI6IHRydWUsXG4gICAgICAgICAgY2xlYXJfY2hpbGRfc3R5bGVzOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGhpbGl0ZWNvbG9yOiB7XG4gICAgICAgICAgaW5saW5lOiAnc3BhbicsXG4gICAgICAgICAgc3R5bGVzOiB7IGJhY2tncm91bmRDb2xvcjogJyV2YWx1ZScgfSxcbiAgICAgICAgICBsaW5rczogdHJ1ZSxcbiAgICAgICAgICByZW1vdmVfc2ltaWxhcjogdHJ1ZSxcbiAgICAgICAgICBjbGVhcl9jaGlsZF9zdHlsZXM6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgZm9udG5hbWU6IHtcbiAgICAgICAgICBpbmxpbmU6ICdzcGFuJyxcbiAgICAgICAgICB0b2dnbGU6IGZhbHNlLFxuICAgICAgICAgIHN0eWxlczogeyBmb250RmFtaWx5OiAnJXZhbHVlJyB9LFxuICAgICAgICAgIGNsZWFyX2NoaWxkX3N0eWxlczogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBmb250c2l6ZToge1xuICAgICAgICAgIGlubGluZTogJ3NwYW4nLFxuICAgICAgICAgIHRvZ2dsZTogZmFsc2UsXG4gICAgICAgICAgc3R5bGVzOiB7IGZvbnRTaXplOiAnJXZhbHVlJyB9LFxuICAgICAgICAgIGNsZWFyX2NoaWxkX3N0eWxlczogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBsaW5laGVpZ2h0OiB7XG4gICAgICAgICAgc2VsZWN0b3I6ICdoMSxoMixoMyxoNCxoNSxoNixwLGxpLHRkLHRoLGRpdicsXG4gICAgICAgICAgc3R5bGVzOiB7IGxpbmVIZWlnaHQ6ICcldmFsdWUnIH1cbiAgICAgICAgfSxcbiAgICAgICAgZm9udHNpemVfY2xhc3M6IHtcbiAgICAgICAgICBpbmxpbmU6ICdzcGFuJyxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7IGNsYXNzOiAnJXZhbHVlJyB9XG4gICAgICAgIH0sXG4gICAgICAgIGJsb2NrcXVvdGU6IHtcbiAgICAgICAgICBibG9jazogJ2Jsb2NrcXVvdGUnLFxuICAgICAgICAgIHdyYXBwZXI6IHRydWUsXG4gICAgICAgICAgcmVtb3ZlOiAnYWxsJ1xuICAgICAgICB9LFxuICAgICAgICBzdWJzY3JpcHQ6IHsgaW5saW5lOiAnc3ViJyB9LFxuICAgICAgICBzdXBlcnNjcmlwdDogeyBpbmxpbmU6ICdzdXAnIH0sXG4gICAgICAgIGNvZGU6IHsgaW5saW5lOiAnY29kZScgfSxcbiAgICAgICAgbGluazoge1xuICAgICAgICAgIGlubGluZTogJ2EnLFxuICAgICAgICAgIHNlbGVjdG9yOiAnYScsXG4gICAgICAgICAgcmVtb3ZlOiAnYWxsJyxcbiAgICAgICAgICBzcGxpdDogdHJ1ZSxcbiAgICAgICAgICBkZWVwOiB0cnVlLFxuICAgICAgICAgIG9ubWF0Y2g6IChub2RlLCBfZm10LCBfaXRlbU5hbWUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpc0VsZW1lbnQkNihub2RlKSAmJiBub2RlLmhhc0F0dHJpYnV0ZSgnaHJlZicpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25mb3JtYXQ6IChlbG0sIF9mbXQsIHZhcnMpID0+IHtcbiAgICAgICAgICAgIFRvb2xzLmVhY2godmFycywgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgZG9tLnNldEF0dHJpYihlbG0sIGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBsYW5nOiB7XG4gICAgICAgICAgaW5saW5lOiAnc3BhbicsXG4gICAgICAgICAgY2xlYXJfY2hpbGRfc3R5bGVzOiB0cnVlLFxuICAgICAgICAgIHJlbW92ZV9zaW1pbGFyOiB0cnVlLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICdsYW5nJzogJyV2YWx1ZScsXG4gICAgICAgICAgICAnZGF0YS1tY2UtbGFuZyc6IHZhcnMgPT4ge1xuICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgIHJldHVybiAoX2EgPSB2YXJzID09PSBudWxsIHx8IHZhcnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhcnMuY3VzdG9tVmFsdWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZW1vdmVmb3JtYXQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWxlY3RvcjogJ2Isc3Ryb25nLGVtLGksZm9udCx1LHN0cmlrZSxzLHN1YixzdXAsZGZuLGNvZGUsc2FtcCxrYmQsdmFyLGNpdGUsbWFyayxxLGRlbCxpbnMsc21hbGwnLFxuICAgICAgICAgICAgcmVtb3ZlOiAnYWxsJyxcbiAgICAgICAgICAgIHNwbGl0OiB0cnVlLFxuICAgICAgICAgICAgZXhwYW5kOiBmYWxzZSxcbiAgICAgICAgICAgIGJsb2NrX2V4cGFuZDogdHJ1ZSxcbiAgICAgICAgICAgIGRlZXA6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnc3BhbicsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXG4gICAgICAgICAgICAgICdzdHlsZScsXG4gICAgICAgICAgICAgICdjbGFzcydcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICByZW1vdmU6ICdlbXB0eScsXG4gICAgICAgICAgICBzcGxpdDogdHJ1ZSxcbiAgICAgICAgICAgIGV4cGFuZDogZmFsc2UsXG4gICAgICAgICAgICBkZWVwOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWxlY3RvcjogJyonLFxuICAgICAgICAgICAgYXR0cmlidXRlczogW1xuICAgICAgICAgICAgICAnc3R5bGUnLFxuICAgICAgICAgICAgICAnY2xhc3MnXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgc3BsaXQ6IGZhbHNlLFxuICAgICAgICAgICAgZXhwYW5kOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZXA6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgICBUb29scy5lYWNoKCdwIGgxIGgyIGgzIGg0IGg1IGg2IGRpdiBhZGRyZXNzIHByZSBkdCBkZCBzYW1wJy5zcGxpdCgvXFxzLyksIG5hbWUgPT4ge1xuICAgICAgICBmb3JtYXRzW25hbWVdID0ge1xuICAgICAgICAgIGJsb2NrOiBuYW1lLFxuICAgICAgICAgIHJlbW92ZTogJ2FsbCdcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZvcm1hdHM7XG4gICAgfTtcblxuICAgIGNvbnN0IGdlbmVyaWNCYXNlID0ge1xuICAgICAgcmVtb3ZlX3NpbWlsYXI6IHRydWUsXG4gICAgICBpbmhlcml0OiBmYWxzZVxuICAgIH07XG4gICAgY29uc3QgY2VsbEJhc2UgPSB7XG4gICAgICBzZWxlY3RvcjogJ3RkLHRoJyxcbiAgICAgIC4uLmdlbmVyaWNCYXNlXG4gICAgfTtcbiAgICBjb25zdCBjZWxsRm9ybWF0cyA9IHtcbiAgICAgIHRhYmxlY2VsbGJhY2tncm91bmRjb2xvcjoge1xuICAgICAgICBzdHlsZXM6IHsgYmFja2dyb3VuZENvbG9yOiAnJXZhbHVlJyB9LFxuICAgICAgICAuLi5jZWxsQmFzZVxuICAgICAgfSxcbiAgICAgIHRhYmxlY2VsbHZlcnRpY2FsYWxpZ246IHtcbiAgICAgICAgc3R5bGVzOiB7ICd2ZXJ0aWNhbC1hbGlnbic6ICcldmFsdWUnIH0sXG4gICAgICAgIC4uLmNlbGxCYXNlXG4gICAgICB9LFxuICAgICAgdGFibGVjZWxsYm9yZGVyY29sb3I6IHtcbiAgICAgICAgc3R5bGVzOiB7IGJvcmRlckNvbG9yOiAnJXZhbHVlJyB9LFxuICAgICAgICAuLi5jZWxsQmFzZVxuICAgICAgfSxcbiAgICAgIHRhYmxlY2VsbGNsYXNzOiB7XG4gICAgICAgIGNsYXNzZXM6IFsnJXZhbHVlJ10sXG4gICAgICAgIC4uLmNlbGxCYXNlXG4gICAgICB9LFxuICAgICAgdGFibGVjbGFzczoge1xuICAgICAgICBzZWxlY3RvcjogJ3RhYmxlJyxcbiAgICAgICAgY2xhc3NlczogWycldmFsdWUnXSxcbiAgICAgICAgLi4uZ2VuZXJpY0Jhc2VcbiAgICAgIH0sXG4gICAgICB0YWJsZWNlbGxib3JkZXJzdHlsZToge1xuICAgICAgICBzdHlsZXM6IHsgYm9yZGVyU3R5bGU6ICcldmFsdWUnIH0sXG4gICAgICAgIC4uLmNlbGxCYXNlXG4gICAgICB9LFxuICAgICAgdGFibGVjZWxsYm9yZGVyd2lkdGg6IHtcbiAgICAgICAgc3R5bGVzOiB7IGJvcmRlcldpZHRoOiAnJXZhbHVlJyB9LFxuICAgICAgICAuLi5jZWxsQmFzZVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ2V0ID0gY29uc3RhbnQoY2VsbEZvcm1hdHMpO1xuXG4gICAgY29uc3QgRm9ybWF0UmVnaXN0cnkgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZm9ybWF0cyA9IHt9O1xuICAgICAgY29uc3QgZ2V0JDIgPSBuYW1lID0+IGlzTm9uTnVsbGFibGUobmFtZSkgPyBmb3JtYXRzW25hbWVdIDogZm9ybWF0cztcbiAgICAgIGNvbnN0IGhhcyA9IG5hbWUgPT4gaGFzJDIoZm9ybWF0cywgbmFtZSk7XG4gICAgICBjb25zdCByZWdpc3RlciA9IChuYW1lLCBmb3JtYXQpID0+IHtcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICBpZiAoIWlzU3RyaW5nKG5hbWUpKSB7XG4gICAgICAgICAgICBlYWNoJGQobmFtZSwgKGZvcm1hdCwgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICByZWdpc3RlcihuYW1lLCBmb3JtYXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaXNBcnJheSQxKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgZm9ybWF0ID0gW2Zvcm1hdF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlYWNoJGUoZm9ybWF0LCBmb3JtYXQgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQoZm9ybWF0LmRlZXApKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0LmRlZXAgPSAhaXNTZWxlY3RvckZvcm1hdChmb3JtYXQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChmb3JtYXQuc3BsaXQpKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0LnNwbGl0ID0gIWlzU2VsZWN0b3JGb3JtYXQoZm9ybWF0KSB8fCBpc0lubGluZUZvcm1hdChmb3JtYXQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChmb3JtYXQucmVtb3ZlKSAmJiBpc1NlbGVjdG9yRm9ybWF0KGZvcm1hdCkgJiYgIWlzSW5saW5lRm9ybWF0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQucmVtb3ZlID0gJ25vbmUnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChpc1NlbGVjdG9yRm9ybWF0KGZvcm1hdCkgJiYgaXNJbmxpbmVGb3JtYXQoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGZvcm1hdC5taXhlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9ybWF0LmJsb2NrX2V4cGFuZCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGlzU3RyaW5nKGZvcm1hdC5jbGFzc2VzKSkge1xuICAgICAgICAgICAgICAgIGZvcm1hdC5jbGFzc2VzID0gZm9ybWF0LmNsYXNzZXMuc3BsaXQoL1xccysvKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3JtYXRzW25hbWVdID0gZm9ybWF0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHVucmVnaXN0ZXIgPSBuYW1lID0+IHtcbiAgICAgICAgaWYgKG5hbWUgJiYgZm9ybWF0c1tuYW1lXSkge1xuICAgICAgICAgIGRlbGV0ZSBmb3JtYXRzW25hbWVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtYXRzO1xuICAgICAgfTtcbiAgICAgIHJlZ2lzdGVyKGdldCQxKGVkaXRvcikpO1xuICAgICAgcmVnaXN0ZXIoZ2V0KCkpO1xuICAgICAgcmVnaXN0ZXIoZ2V0Rm9ybWF0cyhlZGl0b3IpKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdldDogZ2V0JDIsXG4gICAgICAgIGhhcyxcbiAgICAgICAgcmVnaXN0ZXIsXG4gICAgICAgIHVucmVnaXN0ZXJcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGVhY2gkMyA9IFRvb2xzLmVhY2g7XG4gICAgY29uc3QgZG9tID0gRE9NVXRpbHMuRE9NO1xuICAgIGNvbnN0IGlzUHJldmlld0l0ZW0gPSBpdGVtID0+IGlzTm9uTnVsbGFibGUoaXRlbSkgJiYgaXNPYmplY3QoaXRlbSk7XG4gICAgY29uc3QgcGFyc2VkU2VsZWN0b3JUb0h0bWwgPSAoYW5jZXN0cnksIGVkaXRvcikgPT4ge1xuICAgICAgY29uc3Qgc2NoZW1hID0gZWRpdG9yICYmIGVkaXRvci5zY2hlbWEgfHwgU2NoZW1hKHt9KTtcbiAgICAgIGNvbnN0IGRlY29yYXRlID0gKGVsbSwgaXRlbSkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5jbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBkb20uYWRkQ2xhc3MoZWxtLCBpdGVtLmNsYXNzZXMuam9pbignICcpKTtcbiAgICAgICAgfVxuICAgICAgICBkb20uc2V0QXR0cmlicyhlbG0sIGl0ZW0uYXR0cnMpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNyZWF0ZUVsZW1lbnQgPSBzSXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBpc1N0cmluZyhzSXRlbSkgPyB7XG4gICAgICAgICAgbmFtZTogc0l0ZW0sXG4gICAgICAgICAgY2xhc3NlczogW10sXG4gICAgICAgICAgYXR0cnM6IHt9XG4gICAgICAgIH0gOiBzSXRlbTtcbiAgICAgICAgY29uc3QgZWxtID0gZG9tLmNyZWF0ZShpdGVtLm5hbWUpO1xuICAgICAgICBkZWNvcmF0ZShlbG0sIGl0ZW0pO1xuICAgICAgICByZXR1cm4gZWxtO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldFJlcXVpcmVkUGFyZW50ID0gKGVsbSwgY2FuZGlkYXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsbVJ1bGUgPSBzY2hlbWEuZ2V0RWxlbWVudFJ1bGUoZWxtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBjb25zdCBwYXJlbnRzUmVxdWlyZWQgPSBlbG1SdWxlID09PSBudWxsIHx8IGVsbVJ1bGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVsbVJ1bGUucGFyZW50c1JlcXVpcmVkO1xuICAgICAgICBpZiAocGFyZW50c1JlcXVpcmVkICYmIHBhcmVudHNSZXF1aXJlZC5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlICYmIGNvbnRhaW5zJDIocGFyZW50c1JlcXVpcmVkLCBjYW5kaWRhdGUpID8gY2FuZGlkYXRlIDogcGFyZW50c1JlcXVpcmVkWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHdyYXBJbkh0bWwgPSAoZWxtLCBhbmNlc3RvcnMsIHNpYmxpbmdzKSA9PiB7XG4gICAgICAgIGxldCBwYXJlbnRDYW5kaWRhdGU7XG4gICAgICAgIGNvbnN0IGFuY2VzdG9yID0gYW5jZXN0b3JzWzBdO1xuICAgICAgICBjb25zdCBhbmNlc3Rvck5hbWUgPSBpc1ByZXZpZXdJdGVtKGFuY2VzdG9yKSA/IGFuY2VzdG9yLm5hbWUgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHBhcmVudFJlcXVpcmVkID0gZ2V0UmVxdWlyZWRQYXJlbnQoZWxtLCBhbmNlc3Rvck5hbWUpO1xuICAgICAgICBpZiAocGFyZW50UmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAoYW5jZXN0b3JOYW1lID09PSBwYXJlbnRSZXF1aXJlZCkge1xuICAgICAgICAgICAgcGFyZW50Q2FuZGlkYXRlID0gYW5jZXN0b3I7XG4gICAgICAgICAgICBhbmNlc3RvcnMgPSBhbmNlc3RvcnMuc2xpY2UoMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcmVudENhbmRpZGF0ZSA9IHBhcmVudFJlcXVpcmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChhbmNlc3Rvcikge1xuICAgICAgICAgIHBhcmVudENhbmRpZGF0ZSA9IGFuY2VzdG9yO1xuICAgICAgICAgIGFuY2VzdG9ycyA9IGFuY2VzdG9ycy5zbGljZSgxKTtcbiAgICAgICAgfSBlbHNlIGlmICghc2libGluZ3MpIHtcbiAgICAgICAgICByZXR1cm4gZWxtO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHBhcmVudENhbmRpZGF0ZSA/IGNyZWF0ZUVsZW1lbnQocGFyZW50Q2FuZGlkYXRlKSA6IGRvbS5jcmVhdGUoJ2RpdicpO1xuICAgICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoZWxtKTtcbiAgICAgICAgaWYgKHNpYmxpbmdzKSB7XG4gICAgICAgICAgVG9vbHMuZWFjaChzaWJsaW5ncywgc2libGluZyA9PiB7XG4gICAgICAgICAgICBjb25zdCBzaWJsaW5nRWxtID0gY3JlYXRlRWxlbWVudChzaWJsaW5nKTtcbiAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoc2libGluZ0VsbSwgZWxtKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnRTaWJsaW5ncyA9IGlzUHJldmlld0l0ZW0ocGFyZW50Q2FuZGlkYXRlKSA/IHBhcmVudENhbmRpZGF0ZS5zaWJsaW5ncyA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHdyYXBJbkh0bWwocGFyZW50LCBhbmNlc3RvcnMsIHBhcmVudFNpYmxpbmdzKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBmcmFnbWVudCA9IGRvbS5jcmVhdGUoJ2RpdicpO1xuICAgICAgaWYgKGFuY2VzdHJ5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGFuY2VzdHJ5WzBdO1xuICAgICAgICBjb25zdCBlbG0gPSBjcmVhdGVFbGVtZW50KGl0ZW0pO1xuICAgICAgICBjb25zdCBzaWJsaW5ncyA9IGlzUHJldmlld0l0ZW0oaXRlbSkgPyBpdGVtLnNpYmxpbmdzIDogdW5kZWZpbmVkO1xuICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZCh3cmFwSW5IdG1sKGVsbSwgYW5jZXN0cnkuc2xpY2UoMSksIHNpYmxpbmdzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnJhZ21lbnQ7XG4gICAgfTtcbiAgICBjb25zdCBwYXJzZVNlbGVjdG9ySXRlbSA9IGl0ZW0gPT4ge1xuICAgICAgaXRlbSA9IFRvb2xzLnRyaW0oaXRlbSk7XG4gICAgICBsZXQgdGFnTmFtZSA9ICdkaXYnO1xuICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICBuYW1lOiB0YWdOYW1lLFxuICAgICAgICBjbGFzc2VzOiBbXSxcbiAgICAgICAgYXR0cnM6IHt9LFxuICAgICAgICBzZWxlY3RvcjogaXRlbVxuICAgICAgfTtcbiAgICAgIGlmIChpdGVtICE9PSAnKicpIHtcbiAgICAgICAgdGFnTmFtZSA9IGl0ZW0ucmVwbGFjZSgvKD86KFsjXFwuXXw6Oj8pKFtcXHdcXC1dKyl8KFxcWykoW15cXF1dKylcXF0/KS9nLCAoJDAsICQxLCAkMiwgJDMsICQ0KSA9PiB7XG4gICAgICAgICAgc3dpdGNoICgkMSkge1xuICAgICAgICAgIGNhc2UgJyMnOlxuICAgICAgICAgICAgb2JqLmF0dHJzLmlkID0gJDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICcuJzpcbiAgICAgICAgICAgIG9iai5jbGFzc2VzLnB1c2goJDIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnOic6XG4gICAgICAgICAgICBpZiAoVG9vbHMuaW5BcnJheSgnY2hlY2tlZCBkaXNhYmxlZCBlbmFibGVkIHJlYWQtb25seSByZXF1aXJlZCcuc3BsaXQoJyAnKSwgJDIpICE9PSAtMSkge1xuICAgICAgICAgICAgICBvYmouYXR0cnNbJDJdID0gJDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCQzID09PSAnWycpIHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSAkNC5tYXRjaCgvKFtcXHdcXC1dKykoPzpcXD1cXFwiKFteXFxcIl0rKSk/Lyk7XG4gICAgICAgICAgICBpZiAobSkge1xuICAgICAgICAgICAgICBvYmouYXR0cnNbbVsxXV0gPSBtWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgb2JqLm5hbWUgPSB0YWdOYW1lIHx8ICdkaXYnO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICAgIGNvbnN0IHBhcnNlU2VsZWN0b3IgPSBzZWxlY3RvciA9PiB7XG4gICAgICBpZiAoIWlzU3RyaW5nKHNlbGVjdG9yKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLnNwbGl0KC9cXHMqLFxccyovKVswXTtcbiAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3IucmVwbGFjZSgvXFxzKih+XFwrfH58XFwrfD4pXFxzKi9nLCAnJDEnKTtcbiAgICAgIHJldHVybiBUb29scy5tYXAoc2VsZWN0b3Iuc3BsaXQoLyg/Oj58XFxzKyg/IVteXFxbXFxdXStcXF0pKS8pLCBpdGVtID0+IHtcbiAgICAgICAgY29uc3Qgc2libGluZ3MgPSBUb29scy5tYXAoaXRlbS5zcGxpdCgvKD86flxcK3x+fFxcKykvKSwgcGFyc2VTZWxlY3Rvckl0ZW0pO1xuICAgICAgICBjb25zdCBvYmogPSBzaWJsaW5ncy5wb3AoKTtcbiAgICAgICAgaWYgKHNpYmxpbmdzLmxlbmd0aCkge1xuICAgICAgICAgIG9iai5zaWJsaW5ncyA9IHNpYmxpbmdzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9KS5yZXZlcnNlKCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRDc3NUZXh0ID0gKGVkaXRvciwgZm9ybWF0KSA9PiB7XG4gICAgICBsZXQgcHJldmlld0NzcyA9ICcnO1xuICAgICAgbGV0IHByZXZpZXdTdHlsZXMgPSBnZXRQcmV2aWV3U3R5bGVzKGVkaXRvcik7XG4gICAgICBpZiAocHJldmlld1N0eWxlcyA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVtb3ZlVmFycyA9IHZhbCA9PiB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyh2YWwpID8gdmFsLnJlcGxhY2UoLyUoXFx3KykvZywgJycpIDogJyc7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0Q29tcHV0ZWRTdHlsZSA9IChuYW1lLCBlbG0pID0+IHtcbiAgICAgICAgcmV0dXJuIGRvbS5nZXRTdHlsZShlbG0gIT09IG51bGwgJiYgZWxtICE9PSB2b2lkIDAgPyBlbG0gOiBlZGl0b3IuZ2V0Qm9keSgpLCBuYW1lLCB0cnVlKTtcbiAgICAgIH07XG4gICAgICBpZiAoaXNTdHJpbmcoZm9ybWF0KSkge1xuICAgICAgICBjb25zdCBmb3JtYXRzID0gZWRpdG9yLmZvcm1hdHRlci5nZXQoZm9ybWF0KTtcbiAgICAgICAgaWYgKCFmb3JtYXRzKSB7XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGZvcm1hdCA9IGZvcm1hdHNbMF07XG4gICAgICB9XG4gICAgICBpZiAoJ3ByZXZpZXcnIGluIGZvcm1hdCkge1xuICAgICAgICBjb25zdCBwcmV2aWV3ID0gZm9ybWF0LnByZXZpZXc7XG4gICAgICAgIGlmIChwcmV2aWV3ID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aWV3U3R5bGVzID0gcHJldmlldyB8fCBwcmV2aWV3U3R5bGVzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgbmFtZSA9IGZvcm1hdC5ibG9jayB8fCBmb3JtYXQuaW5saW5lIHx8ICdzcGFuJztcbiAgICAgIGxldCBwcmV2aWV3RnJhZztcbiAgICAgIGNvbnN0IGl0ZW1zID0gcGFyc2VTZWxlY3Rvcihmb3JtYXQuc2VsZWN0b3IpO1xuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKCFpdGVtc1swXS5uYW1lKSB7XG4gICAgICAgICAgaXRlbXNbMF0ubmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgbmFtZSA9IGZvcm1hdC5zZWxlY3RvcjtcbiAgICAgICAgcHJldmlld0ZyYWcgPSBwYXJzZWRTZWxlY3RvclRvSHRtbChpdGVtcywgZWRpdG9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZXZpZXdGcmFnID0gcGFyc2VkU2VsZWN0b3JUb0h0bWwoW25hbWVdLCBlZGl0b3IpO1xuICAgICAgfVxuICAgICAgY29uc3QgcHJldmlld0VsbSA9IGRvbS5zZWxlY3QobmFtZSwgcHJldmlld0ZyYWcpWzBdIHx8IHByZXZpZXdGcmFnLmZpcnN0Q2hpbGQ7XG4gICAgICBlYWNoJDMoZm9ybWF0LnN0eWxlcywgKHZhbHVlLCBuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gcmVtb3ZlVmFycyh2YWx1ZSk7XG4gICAgICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgICAgIGRvbS5zZXRTdHlsZShwcmV2aWV3RWxtLCBuYW1lLCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWFjaCQzKGZvcm1hdC5hdHRyaWJ1dGVzLCAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSByZW1vdmVWYXJzKHZhbHVlKTtcbiAgICAgICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICAgICAgZG9tLnNldEF0dHJpYihwcmV2aWV3RWxtLCBuYW1lLCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWFjaCQzKGZvcm1hdC5jbGFzc2VzLCB2YWx1ZSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gcmVtb3ZlVmFycyh2YWx1ZSk7XG4gICAgICAgIGlmICghZG9tLmhhc0NsYXNzKHByZXZpZXdFbG0sIG5ld1ZhbHVlKSkge1xuICAgICAgICAgIGRvbS5hZGRDbGFzcyhwcmV2aWV3RWxtLCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdQcmV2aWV3Rm9ybWF0cycpO1xuICAgICAgZG9tLnNldFN0eWxlcyhwcmV2aWV3RnJhZywge1xuICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgbGVmdDogLTY1NTM1XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5nZXRCb2R5KCkuYXBwZW5kQ2hpbGQocHJldmlld0ZyYWcpO1xuICAgICAgY29uc3QgcmF3UGFyZW50Rm9udFNpemUgPSBnZXRDb21wdXRlZFN0eWxlKCdmb250U2l6ZScpO1xuICAgICAgY29uc3QgcGFyZW50Rm9udFNpemUgPSAvcHgkLy50ZXN0KHJhd1BhcmVudEZvbnRTaXplKSA/IHBhcnNlSW50KHJhd1BhcmVudEZvbnRTaXplLCAxMCkgOiAwO1xuICAgICAgZWFjaCQzKHByZXZpZXdTdHlsZXMuc3BsaXQoJyAnKSwgbmFtZSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGdldENvbXB1dGVkU3R5bGUobmFtZSwgcHJldmlld0VsbSk7XG4gICAgICAgIGlmIChuYW1lID09PSAnYmFja2dyb3VuZC1jb2xvcicgJiYgL3RyYW5zcGFyZW50fHJnYmFcXHMqXFwoW14pXSssXFxzKjBcXCkvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUgPSBnZXRDb21wdXRlZFN0eWxlKG5hbWUpO1xuICAgICAgICAgIGlmIChyZ2JhVG9IZXhTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkgPT09ICcjZmZmZmZmJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZSA9PT0gJ2NvbG9yJykge1xuICAgICAgICAgIGlmIChyZ2JhVG9IZXhTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkgPT09ICcjMDAwMDAwJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZSA9PT0gJ2ZvbnQtc2l6ZScpIHtcbiAgICAgICAgICBpZiAoL2VtfCUkLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKHBhcmVudEZvbnRTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG51bVZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSkgLyAoLyUkLy50ZXN0KHZhbHVlKSA/IDEwMCA6IDEpO1xuICAgICAgICAgICAgdmFsdWUgPSBudW1WYWx1ZSAqIHBhcmVudEZvbnRTaXplICsgJ3B4JztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWUgPT09ICdib3JkZXInICYmIHZhbHVlKSB7XG4gICAgICAgICAgcHJldmlld0NzcyArPSAncGFkZGluZzowIDJweDsnO1xuICAgICAgICB9XG4gICAgICAgIHByZXZpZXdDc3MgKz0gbmFtZSArICc6JyArIHZhbHVlICsgJzsnO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ0FmdGVyUHJldmlld0Zvcm1hdHMnKTtcbiAgICAgIGRvbS5yZW1vdmUocHJldmlld0ZyYWcpO1xuICAgICAgcmV0dXJuIHByZXZpZXdDc3M7XG4gICAgfTtcblxuICAgIGNvbnN0IHNldHVwJHIgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmFkZFNob3J0Y3V0KCdtZXRhK2InLCAnJywgJ0JvbGQnKTtcbiAgICAgIGVkaXRvci5hZGRTaG9ydGN1dCgnbWV0YStpJywgJycsICdJdGFsaWMnKTtcbiAgICAgIGVkaXRvci5hZGRTaG9ydGN1dCgnbWV0YSt1JywgJycsICdVbmRlcmxpbmUnKTtcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDY7IGkrKykge1xuICAgICAgICBlZGl0b3IuYWRkU2hvcnRjdXQoJ2FjY2VzcysnICsgaSwgJycsIFtcbiAgICAgICAgICAnRm9ybWF0QmxvY2snLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICdoJyArIGlcbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgICBlZGl0b3IuYWRkU2hvcnRjdXQoJ2FjY2Vzcys3JywgJycsIFtcbiAgICAgICAgJ0Zvcm1hdEJsb2NrJyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgICdwJ1xuICAgICAgXSk7XG4gICAgICBlZGl0b3IuYWRkU2hvcnRjdXQoJ2FjY2Vzcys4JywgJycsIFtcbiAgICAgICAgJ0Zvcm1hdEJsb2NrJyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgICdkaXYnXG4gICAgICBdKTtcbiAgICAgIGVkaXRvci5hZGRTaG9ydGN1dCgnYWNjZXNzKzknLCAnJywgW1xuICAgICAgICAnRm9ybWF0QmxvY2snLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgJ2FkZHJlc3MnXG4gICAgICBdKTtcbiAgICB9O1xuXG4gICAgY29uc3QgRm9ybWF0dGVyID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdHMgPSBGb3JtYXRSZWdpc3RyeShlZGl0b3IpO1xuICAgICAgY29uc3QgZm9ybWF0Q2hhbmdlU3RhdGUgPSBDZWxsKHt9KTtcbiAgICAgIHNldHVwJHIoZWRpdG9yKTtcbiAgICAgIHNldHVwJHUoZWRpdG9yKTtcbiAgICAgIGlmICghaXNSdGMoZWRpdG9yKSkge1xuICAgICAgICBzZXR1cCR0KGZvcm1hdENoYW5nZVN0YXRlLCBlZGl0b3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0OiBmb3JtYXRzLmdldCxcbiAgICAgICAgaGFzOiBmb3JtYXRzLmhhcyxcbiAgICAgICAgcmVnaXN0ZXI6IGZvcm1hdHMucmVnaXN0ZXIsXG4gICAgICAgIHVucmVnaXN0ZXI6IGZvcm1hdHMudW5yZWdpc3RlcixcbiAgICAgICAgYXBwbHk6IChuYW1lLCB2YXJzLCBub2RlKSA9PiB7XG4gICAgICAgICAgYXBwbHlGb3JtYXQoZWRpdG9yLCBuYW1lLCB2YXJzLCBub2RlKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVtb3ZlOiAobmFtZSwgdmFycywgbm9kZSwgc2ltaWxhcikgPT4ge1xuICAgICAgICAgIHJlbW92ZUZvcm1hdChlZGl0b3IsIG5hbWUsIHZhcnMsIG5vZGUsIHNpbWlsYXIpO1xuICAgICAgICB9LFxuICAgICAgICB0b2dnbGU6IChuYW1lLCB2YXJzLCBub2RlKSA9PiB7XG4gICAgICAgICAgdG9nZ2xlRm9ybWF0KGVkaXRvciwgbmFtZSwgdmFycywgbm9kZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1hdGNoOiAobmFtZSwgdmFycywgbm9kZSwgc2ltaWxhcikgPT4gbWF0Y2hGb3JtYXQoZWRpdG9yLCBuYW1lLCB2YXJzLCBub2RlLCBzaW1pbGFyKSxcbiAgICAgICAgY2xvc2VzdDogbmFtZXMgPT4gY2xvc2VzdEZvcm1hdChlZGl0b3IsIG5hbWVzKSxcbiAgICAgICAgbWF0Y2hBbGw6IChuYW1lcywgdmFycykgPT4gbWF0Y2hBbGxGb3JtYXRzKGVkaXRvciwgbmFtZXMsIHZhcnMpLFxuICAgICAgICBtYXRjaE5vZGU6IChub2RlLCBuYW1lLCB2YXJzLCBzaW1pbGFyKSA9PiBtYXRjaE5vZGVGb3JtYXQoZWRpdG9yLCBub2RlLCBuYW1lLCB2YXJzLCBzaW1pbGFyKSxcbiAgICAgICAgY2FuQXBwbHk6IG5hbWUgPT4gY2FuQXBwbHlGb3JtYXQoZWRpdG9yLCBuYW1lKSxcbiAgICAgICAgZm9ybWF0Q2hhbmdlZDogKGZvcm1hdHMsIGNhbGxiYWNrLCBzaW1pbGFyLCB2YXJzKSA9PiBmb3JtYXRDaGFuZ2VkKGVkaXRvciwgZm9ybWF0Q2hhbmdlU3RhdGUsIGZvcm1hdHMsIGNhbGxiYWNrLCBzaW1pbGFyLCB2YXJzKSxcbiAgICAgICAgZ2V0Q3NzVGV4dDogY3VycnkoZ2V0Q3NzVGV4dCwgZWRpdG9yKVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2hvdWxkSWdub3JlQ29tbWFuZCA9IGNtZCA9PiB7XG4gICAgICBzd2l0Y2ggKGNtZC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlICd1bmRvJzpcbiAgICAgIGNhc2UgJ3JlZG8nOlxuICAgICAgY2FzZSAnbWNlZm9jdXMnOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyRXZlbnRzID0gKGVkaXRvciwgdW5kb01hbmFnZXIsIGxvY2tzKSA9PiB7XG4gICAgICBjb25zdCBpc0ZpcnN0VHlwZWRDaGFyYWN0ZXIgPSBDZWxsKGZhbHNlKTtcbiAgICAgIGNvbnN0IGFkZE5vblR5cGluZ1VuZG9MZXZlbCA9IGUgPT4ge1xuICAgICAgICBzZXRUeXBpbmcodW5kb01hbmFnZXIsIGZhbHNlLCBsb2Nrcyk7XG4gICAgICAgIHVuZG9NYW5hZ2VyLmFkZCh7fSwgZSk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLm9uKCdpbml0JywgKCkgPT4ge1xuICAgICAgICB1bmRvTWFuYWdlci5hZGQoKTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdCZWZvcmVFeGVjQ29tbWFuZCcsIGUgPT4ge1xuICAgICAgICBjb25zdCBjbWQgPSBlLmNvbW1hbmQ7XG4gICAgICAgIGlmICghc2hvdWxkSWdub3JlQ29tbWFuZChjbWQpKSB7XG4gICAgICAgICAgZW5kVHlwaW5nKHVuZG9NYW5hZ2VyLCBsb2Nrcyk7XG4gICAgICAgICAgdW5kb01hbmFnZXIuYmVmb3JlQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdFeGVjQ29tbWFuZCcsIGUgPT4ge1xuICAgICAgICBjb25zdCBjbWQgPSBlLmNvbW1hbmQ7XG4gICAgICAgIGlmICghc2hvdWxkSWdub3JlQ29tbWFuZChjbWQpKSB7XG4gICAgICAgICAgYWRkTm9uVHlwaW5nVW5kb0xldmVsKGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignT2JqZWN0UmVzaXplU3RhcnQgY3V0JywgKCkgPT4ge1xuICAgICAgICB1bmRvTWFuYWdlci5iZWZvcmVDaGFuZ2UoKTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdTYXZlQ29udGVudCBPYmplY3RSZXNpemVkIGJsdXInLCBhZGROb25UeXBpbmdVbmRvTGV2ZWwpO1xuICAgICAgZWRpdG9yLm9uKCdkcmFnZW5kJywgYWRkTm9uVHlwaW5nVW5kb0xldmVsKTtcbiAgICAgIGVkaXRvci5vbigna2V5dXAnLCBlID0+IHtcbiAgICAgICAgY29uc3Qga2V5Q29kZSA9IGUua2V5Q29kZTtcbiAgICAgICAgaWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNNZXRhID0gRW52Lm9zLmlzTWFjT1MoKSAmJiBlLmtleSA9PT0gJ01ldGEnO1xuICAgICAgICBpZiAoa2V5Q29kZSA+PSAzMyAmJiBrZXlDb2RlIDw9IDM2IHx8IGtleUNvZGUgPj0gMzcgJiYga2V5Q29kZSA8PSA0MCB8fCBrZXlDb2RlID09PSA0NSB8fCBlLmN0cmxLZXkgfHwgaXNNZXRhKSB7XG4gICAgICAgICAgYWRkTm9uVHlwaW5nVW5kb0xldmVsKCk7XG4gICAgICAgICAgZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleUNvZGUgPT09IDQ2IHx8IGtleUNvZGUgPT09IDgpIHtcbiAgICAgICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGaXJzdFR5cGVkQ2hhcmFjdGVyLmdldCgpICYmIHVuZG9NYW5hZ2VyLnR5cGluZyAmJiAhaXNFcSQxKGNyZWF0ZUZyb21FZGl0b3IoZWRpdG9yKSwgdW5kb01hbmFnZXIuZGF0YVswXSkpIHtcbiAgICAgICAgICBpZiAoIWVkaXRvci5pc0RpcnR5KCkpIHtcbiAgICAgICAgICAgIGVkaXRvci5zZXREaXJ0eSh0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWRpdG9yLmRpc3BhdGNoKCdUeXBpbmdVbmRvJyk7XG4gICAgICAgICAgaXNGaXJzdFR5cGVkQ2hhcmFjdGVyLnNldChmYWxzZSk7XG4gICAgICAgICAgZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdrZXlkb3duJywgZSA9PiB7XG4gICAgICAgIGNvbnN0IGtleUNvZGUgPSBlLmtleUNvZGU7XG4gICAgICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXlDb2RlID49IDMzICYmIGtleUNvZGUgPD0gMzYgfHwga2V5Q29kZSA+PSAzNyAmJiBrZXlDb2RlIDw9IDQwIHx8IGtleUNvZGUgPT09IDQ1KSB7XG4gICAgICAgICAgaWYgKHVuZG9NYW5hZ2VyLnR5cGluZykge1xuICAgICAgICAgICAgYWRkTm9uVHlwaW5nVW5kb0xldmVsKGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbW9kS2V5ID0gZS5jdHJsS2V5ICYmICFlLmFsdEtleSB8fCBlLm1ldGFLZXk7XG4gICAgICAgIGlmICgoa2V5Q29kZSA8IDE2IHx8IGtleUNvZGUgPiAyMCkgJiYga2V5Q29kZSAhPT0gMjI0ICYmIGtleUNvZGUgIT09IDkxICYmICF1bmRvTWFuYWdlci50eXBpbmcgJiYgIW1vZEtleSkge1xuICAgICAgICAgIHVuZG9NYW5hZ2VyLmJlZm9yZUNoYW5nZSgpO1xuICAgICAgICAgIHNldFR5cGluZyh1bmRvTWFuYWdlciwgdHJ1ZSwgbG9ja3MpO1xuICAgICAgICAgIHVuZG9NYW5hZ2VyLmFkZCh7fSwgZSk7XG4gICAgICAgICAgaXNGaXJzdFR5cGVkQ2hhcmFjdGVyLnNldCh0cnVlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGFzT25seU1ldGFPckN0cmxNb2RpZmllciA9IEVudi5vcy5pc01hY09TKCkgPyBlLm1ldGFLZXkgOiBlLmN0cmxLZXkgJiYgIWUuYWx0S2V5O1xuICAgICAgICBpZiAoaGFzT25seU1ldGFPckN0cmxNb2RpZmllcikge1xuICAgICAgICAgIHVuZG9NYW5hZ2VyLmJlZm9yZUNoYW5nZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignbW91c2Vkb3duJywgZSA9PiB7XG4gICAgICAgIGlmICh1bmRvTWFuYWdlci50eXBpbmcpIHtcbiAgICAgICAgICBhZGROb25UeXBpbmdVbmRvTGV2ZWwoZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgaXNJbnNlcnRSZXBsYWNlbWVudFRleHQgPSBldmVudCA9PiBldmVudC5pbnB1dFR5cGUgPT09ICdpbnNlcnRSZXBsYWNlbWVudFRleHQnO1xuICAgICAgY29uc3QgaXNJbnNlcnRUZXh0RGF0YU51bGwgPSBldmVudCA9PiBldmVudC5pbnB1dFR5cGUgPT09ICdpbnNlcnRUZXh0JyAmJiBldmVudC5kYXRhID09PSBudWxsO1xuICAgICAgY29uc3QgaXNJbnNlcnRGcm9tUGFzdGVPckRyb3AgPSBldmVudCA9PiBldmVudC5pbnB1dFR5cGUgPT09ICdpbnNlcnRGcm9tUGFzdGUnIHx8IGV2ZW50LmlucHV0VHlwZSA9PT0gJ2luc2VydEZyb21Ecm9wJztcbiAgICAgIGVkaXRvci5vbignaW5wdXQnLCBlID0+IHtcbiAgICAgICAgaWYgKGUuaW5wdXRUeXBlICYmIChpc0luc2VydFJlcGxhY2VtZW50VGV4dChlKSB8fCBpc0luc2VydFRleHREYXRhTnVsbChlKSB8fCBpc0luc2VydEZyb21QYXN0ZU9yRHJvcChlKSkpIHtcbiAgICAgICAgICBhZGROb25UeXBpbmdVbmRvTGV2ZWwoZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdBZGRVbmRvIFVuZG8gUmVkbyBDbGVhclVuZG9zJywgZSA9PiB7XG4gICAgICAgIGlmICghZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIGVkaXRvci5ub2RlQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFkZEtleWJvYXJkU2hvcnRjdXRzID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5hZGRTaG9ydGN1dCgnbWV0YSt6JywgJycsICdVbmRvJyk7XG4gICAgICBlZGl0b3IuYWRkU2hvcnRjdXQoJ21ldGEreSxtZXRhK3NoaWZ0K3onLCAnJywgJ1JlZG8nKTtcbiAgICB9O1xuXG4gICAgY29uc3QgVW5kb01hbmFnZXIgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgYmVmb3JlQm9va21hcmsgPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBsb2NrcyA9IENlbGwoMCk7XG4gICAgICBjb25zdCBpbmRleCA9IENlbGwoMCk7XG4gICAgICBjb25zdCB1bmRvTWFuYWdlciA9IHtcbiAgICAgICAgZGF0YTogW10sXG4gICAgICAgIHR5cGluZzogZmFsc2UsXG4gICAgICAgIGJlZm9yZUNoYW5nZTogKCkgPT4ge1xuICAgICAgICAgIGJlZm9yZUNoYW5nZShlZGl0b3IsIGxvY2tzLCBiZWZvcmVCb29rbWFyayk7XG4gICAgICAgIH0sXG4gICAgICAgIGFkZDogKGxldmVsLCBldmVudCkgPT4ge1xuICAgICAgICAgIHJldHVybiBhZGRVbmRvTGV2ZWwoZWRpdG9yLCB1bmRvTWFuYWdlciwgaW5kZXgsIGxvY2tzLCBiZWZvcmVCb29rbWFyaywgbGV2ZWwsIGV2ZW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgZGlzcGF0Y2hDaGFuZ2U6ICgpID0+IHtcbiAgICAgICAgICBlZGl0b3Iuc2V0RGlydHkodHJ1ZSk7XG4gICAgICAgICAgY29uc3QgbGV2ZWwgPSBjcmVhdGVGcm9tRWRpdG9yKGVkaXRvcik7XG4gICAgICAgICAgbGV2ZWwuYm9va21hcmsgPSBnZXRVbmRvQm9va21hcmsoZWRpdG9yLnNlbGVjdGlvbik7XG4gICAgICAgICAgZWRpdG9yLmRpc3BhdGNoKCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICBsZXZlbCxcbiAgICAgICAgICAgIGxhc3RMZXZlbDogZ2V0JGIodW5kb01hbmFnZXIuZGF0YSwgaW5kZXguZ2V0KCkpLmdldE9yVW5kZWZpbmVkKClcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgdW5kbzogKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB1bmRvKGVkaXRvciwgdW5kb01hbmFnZXIsIGxvY2tzLCBpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZG86ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVkbyhlZGl0b3IsIGluZGV4LCB1bmRvTWFuYWdlci5kYXRhKTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcbiAgICAgICAgICBjbGVhcihlZGl0b3IsIHVuZG9NYW5hZ2VyLCBpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlc2V0OiAoKSA9PiB7XG4gICAgICAgICAgcmVzZXQoZWRpdG9yLCB1bmRvTWFuYWdlcik7XG4gICAgICAgIH0sXG4gICAgICAgIGhhc1VuZG86ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gaGFzVW5kbyhlZGl0b3IsIHVuZG9NYW5hZ2VyLCBpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIGhhc1JlZG86ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gaGFzUmVkbyhlZGl0b3IsIHVuZG9NYW5hZ2VyLCBpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zYWN0OiBjYWxsYmFjayA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRyYW5zYWN0KGVkaXRvciwgdW5kb01hbmFnZXIsIGxvY2tzLCBjYWxsYmFjayk7XG4gICAgICAgIH0sXG4gICAgICAgIGlnbm9yZTogY2FsbGJhY2sgPT4ge1xuICAgICAgICAgIGlnbm9yZShlZGl0b3IsIGxvY2tzLCBjYWxsYmFjayk7XG4gICAgICAgIH0sXG4gICAgICAgIGV4dHJhOiAoY2FsbGJhY2sxLCBjYWxsYmFjazIpID0+IHtcbiAgICAgICAgICBleHRyYShlZGl0b3IsIHVuZG9NYW5hZ2VyLCBpbmRleCwgY2FsbGJhY2sxLCBjYWxsYmFjazIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKCFpc1J0YyhlZGl0b3IpKSB7XG4gICAgICAgIHJlZ2lzdGVyRXZlbnRzKGVkaXRvciwgdW5kb01hbmFnZXIsIGxvY2tzKTtcbiAgICAgIH1cbiAgICAgIGFkZEtleWJvYXJkU2hvcnRjdXRzKGVkaXRvcik7XG4gICAgICByZXR1cm4gdW5kb01hbmFnZXI7XG4gICAgfTtcblxuICAgIGNvbnN0IG5vblR5cGluZ0tleWNvZGVzID0gW1xuICAgICAgOSxcbiAgICAgIDI3LFxuICAgICAgVksuSE9NRSxcbiAgICAgIFZLLkVORCxcbiAgICAgIDE5LFxuICAgICAgMjAsXG4gICAgICA0NCxcbiAgICAgIDE0NCxcbiAgICAgIDE0NSxcbiAgICAgIDMzLFxuICAgICAgMzQsXG4gICAgICA0NSxcbiAgICAgIDE2LFxuICAgICAgMTcsXG4gICAgICAxOCxcbiAgICAgIDkxLFxuICAgICAgOTIsXG4gICAgICA5MyxcbiAgICAgIFZLLkRPV04sXG4gICAgICBWSy5VUCxcbiAgICAgIFZLLkxFRlQsXG4gICAgICBWSy5SSUdIVFxuICAgIF0uY29uY2F0KEVudi5icm93c2VyLmlzRmlyZWZveCgpID8gWzIyNF0gOiBbXSk7XG4gICAgY29uc3QgcGxhY2Vob2xkZXJBdHRyID0gJ2RhdGEtbWNlLXBsYWNlaG9sZGVyJztcbiAgICBjb25zdCBpc0tleWJvYXJkRXZlbnQgPSBlID0+IGUudHlwZSA9PT0gJ2tleWRvd24nIHx8IGUudHlwZSA9PT0gJ2tleXVwJztcbiAgICBjb25zdCBpc0RlbGV0ZUV2ZW50ID0gZSA9PiB7XG4gICAgICBjb25zdCBrZXlDb2RlID0gZS5rZXlDb2RlO1xuICAgICAgcmV0dXJuIGtleUNvZGUgPT09IFZLLkJBQ0tTUEFDRSB8fCBrZXlDb2RlID09PSBWSy5ERUxFVEU7XG4gICAgfTtcbiAgICBjb25zdCBpc05vblR5cGluZ0tleWJvYXJkRXZlbnQgPSBlID0+IHtcbiAgICAgIGlmIChpc0tleWJvYXJkRXZlbnQoZSkpIHtcbiAgICAgICAgY29uc3Qga2V5Q29kZSA9IGUua2V5Q29kZTtcbiAgICAgICAgcmV0dXJuICFpc0RlbGV0ZUV2ZW50KGUpICYmIChWSy5tZXRhS2V5UHJlc3NlZChlKSB8fCBlLmFsdEtleSB8fCBrZXlDb2RlID49IDExMiAmJiBrZXlDb2RlIDw9IDEyMyB8fCBjb250YWlucyQyKG5vblR5cGluZ0tleWNvZGVzLCBrZXlDb2RlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc1R5cGluZ0tleWJvYXJkRXZlbnQgPSBlID0+IGlzS2V5Ym9hcmRFdmVudChlKSAmJiAhKGlzRGVsZXRlRXZlbnQoZSkgfHwgZS50eXBlID09PSAna2V5dXAnICYmIGUua2V5Q29kZSA9PT0gMjI5KTtcbiAgICBjb25zdCBpc1Zpc3VhbGx5RW1wdHkgPSAoZG9tLCByb290RWxtLCBmb3JjZWRSb290QmxvY2spID0+IHtcbiAgICAgIGlmIChpc0VtcHR5JDIoU3VnYXJFbGVtZW50LmZyb21Eb20ocm9vdEVsbSksIGZhbHNlKSkge1xuICAgICAgICBjb25zdCBmaXJzdEVsZW1lbnQgPSByb290RWxtLmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgICBpZiAoIWZpcnN0RWxlbWVudCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGRvbS5nZXRTdHlsZShyb290RWxtLmZpcnN0RWxlbWVudENoaWxkLCAncGFkZGluZy1sZWZ0JykgfHwgZG9tLmdldFN0eWxlKHJvb3RFbG0uZmlyc3RFbGVtZW50Q2hpbGQsICdwYWRkaW5nLXJpZ2h0JykpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZvcmNlZFJvb3RCbG9jayA9PT0gZmlyc3RFbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldHVwJHEgPSBlZGl0b3IgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IHJvb3RCbG9jayA9IGdldEZvcmNlZFJvb3RCbG9jayhlZGl0b3IpO1xuICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSAoX2EgPSBnZXRQbGFjZWhvbGRlcihlZGl0b3IpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgIGNvbnN0IHVwZGF0ZVBsYWNlaG9sZGVyID0gKGUsIGluaXRpYWwpID0+IHtcbiAgICAgICAgaWYgKGlzTm9uVHlwaW5nS2V5Ym9hcmRFdmVudChlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBib2R5ID0gZWRpdG9yLmdldEJvZHkoKTtcbiAgICAgICAgY29uc3Qgc2hvd1BsYWNlaG9sZGVyID0gaXNUeXBpbmdLZXlib2FyZEV2ZW50KGUpID8gZmFsc2UgOiBpc1Zpc3VhbGx5RW1wdHkoZG9tLCBib2R5LCByb290QmxvY2spO1xuICAgICAgICBjb25zdCBpc1BsYWNlaG9sZGVyU2hvd24gPSBkb20uZ2V0QXR0cmliKGJvZHksIHBsYWNlaG9sZGVyQXR0cikgIT09ICcnO1xuICAgICAgICBpZiAoaXNQbGFjZWhvbGRlclNob3duICE9PSBzaG93UGxhY2Vob2xkZXIgfHwgaW5pdGlhbCkge1xuICAgICAgICAgIGRvbS5zZXRBdHRyaWIoYm9keSwgcGxhY2Vob2xkZXJBdHRyLCBzaG93UGxhY2Vob2xkZXIgPyBwbGFjZWhvbGRlciA6IG51bGwpO1xuICAgICAgICAgIGRvbS5zZXRBdHRyaWIoYm9keSwgJ2FyaWEtcGxhY2Vob2xkZXInLCBzaG93UGxhY2Vob2xkZXIgPyBwbGFjZWhvbGRlciA6IG51bGwpO1xuICAgICAgICAgIGZpcmVQbGFjZWhvbGRlclRvZ2dsZShlZGl0b3IsIHNob3dQbGFjZWhvbGRlcik7XG4gICAgICAgICAgZWRpdG9yLm9uKHNob3dQbGFjZWhvbGRlciA/ICdrZXlkb3duJyA6ICdrZXl1cCcsIHVwZGF0ZVBsYWNlaG9sZGVyKTtcbiAgICAgICAgICBlZGl0b3Iub2ZmKHNob3dQbGFjZWhvbGRlciA/ICdrZXl1cCcgOiAna2V5ZG93bicsIHVwZGF0ZVBsYWNlaG9sZGVyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChpc05vdEVtcHR5KHBsYWNlaG9sZGVyKSkge1xuICAgICAgICBlZGl0b3Iub24oJ2luaXQnLCBlID0+IHtcbiAgICAgICAgICB1cGRhdGVQbGFjZWhvbGRlcihlLCB0cnVlKTtcbiAgICAgICAgICBlZGl0b3Iub24oJ2NoYW5nZSBTZXRDb250ZW50IEV4ZWNDb21tYW5kJywgdXBkYXRlUGxhY2Vob2xkZXIpO1xuICAgICAgICAgIGVkaXRvci5vbigncGFzdGUnLCBlID0+IERlbGF5LnNldEVkaXRvclRpbWVvdXQoZWRpdG9yLCAoKSA9PiB1cGRhdGVQbGFjZWhvbGRlcihlKSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgYmxvY2tQb3NpdGlvbiA9IChibG9jaywgcG9zaXRpb24pID0+ICh7XG4gICAgICBibG9jayxcbiAgICAgIHBvc2l0aW9uXG4gICAgfSk7XG4gICAgY29uc3QgYmxvY2tCb3VuZGFyeSA9IChmcm9tLCB0bykgPT4gKHtcbiAgICAgIGZyb20sXG4gICAgICB0b1xuICAgIH0pO1xuICAgIGNvbnN0IGdldEJsb2NrUG9zaXRpb24gPSAocm9vdE5vZGUsIHBvcykgPT4ge1xuICAgICAgY29uc3Qgcm9vdEVsbSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJvb3ROb2RlKTtcbiAgICAgIGNvbnN0IGNvbnRhaW5lckVsbSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHBvcy5jb250YWluZXIoKSk7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50QmxvY2skMihyb290RWxtLCBjb250YWluZXJFbG0pLm1hcChibG9jayA9PiBibG9ja1Bvc2l0aW9uKGJsb2NrLCBwb3MpKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzRGlmZmVyZW50QmxvY2tzID0gYmxvY2tCb3VuZGFyeSA9PiAhZXEoYmxvY2tCb3VuZGFyeS5mcm9tLmJsb2NrLCBibG9ja0JvdW5kYXJ5LnRvLmJsb2NrKTtcbiAgICBjb25zdCBnZXRDbG9zZXN0SG9zdCA9IChyb290LCBzY29wZSkgPT4ge1xuICAgICAgY29uc3QgaXNSb290ID0gbm9kZSA9PiBlcShub2RlLCByb290KTtcbiAgICAgIGNvbnN0IGlzSG9zdCA9IG5vZGUgPT4gaXNUYWJsZUNlbGwkMihub2RlKSB8fCBpc0NvbnRlbnRFZGl0YWJsZVRydWUkMyhub2RlLmRvbSk7XG4gICAgICByZXR1cm4gY2xvc2VzdCQ0KHNjb3BlLCBpc0hvc3QsIGlzUm9vdCkuZmlsdGVyKGlzRWxlbWVudCQ3KS5nZXRPcihyb290KTtcbiAgICB9O1xuICAgIGNvbnN0IGhhc1NhbWVIb3N0ID0gKHJvb3ROb2RlLCBibG9ja0JvdW5kYXJ5KSA9PiB7XG4gICAgICBjb25zdCByb290ID0gU3VnYXJFbGVtZW50LmZyb21Eb20ocm9vdE5vZGUpO1xuICAgICAgcmV0dXJuIGVxKGdldENsb3Nlc3RIb3N0KHJvb3QsIGJsb2NrQm91bmRhcnkuZnJvbS5ibG9jayksIGdldENsb3Nlc3RIb3N0KHJvb3QsIGJsb2NrQm91bmRhcnkudG8uYmxvY2spKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzRWRpdGFibGUkMSA9IGJsb2NrQm91bmRhcnkgPT4gaXNDb250ZW50RWRpdGFibGVGYWxzZSRiKGJsb2NrQm91bmRhcnkuZnJvbS5ibG9jay5kb20pID09PSBmYWxzZSAmJiBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJGIoYmxvY2tCb3VuZGFyeS50by5ibG9jay5kb20pID09PSBmYWxzZTtcbiAgICBjb25zdCBoYXNWYWxpZEJsb2NrcyA9IGJsb2NrQm91bmRhcnkgPT4ge1xuICAgICAgY29uc3QgaXNWYWxpZEJsb2NrID0gYmxvY2sgPT4gaXNUZXh0QmxvY2skMihibG9jaykgfHwgaGFzQmxvY2tBdHRyKGJsb2NrLmRvbSk7XG4gICAgICByZXR1cm4gaXNWYWxpZEJsb2NrKGJsb2NrQm91bmRhcnkuZnJvbS5ibG9jaykgJiYgaXNWYWxpZEJsb2NrKGJsb2NrQm91bmRhcnkudG8uYmxvY2spO1xuICAgIH07XG4gICAgY29uc3Qgc2tpcExhc3RCciA9IChyb290Tm9kZSwgZm9yd2FyZCwgYmxvY2tQb3NpdGlvbikgPT4ge1xuICAgICAgaWYgKGlzQnIkNihibG9ja1Bvc2l0aW9uLnBvc2l0aW9uLmdldE5vZGUoKSkgJiYgIWlzRW1wdHkkMihibG9ja1Bvc2l0aW9uLmJsb2NrKSkge1xuICAgICAgICByZXR1cm4gcG9zaXRpb25JbihmYWxzZSwgYmxvY2tQb3NpdGlvbi5ibG9jay5kb20pLmJpbmQobGFzdFBvc2l0aW9uSW5CbG9jayA9PiB7XG4gICAgICAgICAgaWYgKGxhc3RQb3NpdGlvbkluQmxvY2suaXNFcXVhbChibG9ja1Bvc2l0aW9uLnBvc2l0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Qb3NpdGlvbihmb3J3YXJkLCByb290Tm9kZSwgbGFzdFBvc2l0aW9uSW5CbG9jaykuYmluZCh0byA9PiBnZXRCbG9ja1Bvc2l0aW9uKHJvb3ROb2RlLCB0bykpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShibG9ja1Bvc2l0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLmdldE9yKGJsb2NrUG9zaXRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGJsb2NrUG9zaXRpb247XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZWFkRnJvbVJhbmdlID0gKHJvb3ROb2RlLCBmb3J3YXJkLCBybmcpID0+IHtcbiAgICAgIGNvbnN0IGZyb21CbG9ja1BvcyA9IGdldEJsb2NrUG9zaXRpb24ocm9vdE5vZGUsIENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQocm5nKSk7XG4gICAgICBjb25zdCB0b0Jsb2NrUG9zID0gZnJvbUJsb2NrUG9zLmJpbmQoYmxvY2tQb3MgPT4gZnJvbVBvc2l0aW9uKGZvcndhcmQsIHJvb3ROb2RlLCBibG9ja1Bvcy5wb3NpdGlvbikuYmluZCh0byA9PiBnZXRCbG9ja1Bvc2l0aW9uKHJvb3ROb2RlLCB0bykubWFwKGJsb2NrUG9zID0+IHNraXBMYXN0QnIocm9vdE5vZGUsIGZvcndhcmQsIGJsb2NrUG9zKSkpKTtcbiAgICAgIHJldHVybiBsaWZ0Mihmcm9tQmxvY2tQb3MsIHRvQmxvY2tQb3MsIGJsb2NrQm91bmRhcnkpLmZpbHRlcihibG9ja0JvdW5kYXJ5ID0+IGlzRGlmZmVyZW50QmxvY2tzKGJsb2NrQm91bmRhcnkpICYmIGhhc1NhbWVIb3N0KHJvb3ROb2RlLCBibG9ja0JvdW5kYXJ5KSAmJiBpc0VkaXRhYmxlJDEoYmxvY2tCb3VuZGFyeSkgJiYgaGFzVmFsaWRCbG9ja3MoYmxvY2tCb3VuZGFyeSkpO1xuICAgIH07XG4gICAgY29uc3QgcmVhZCQxID0gKHJvb3ROb2RlLCBmb3J3YXJkLCBybmcpID0+IHJuZy5jb2xsYXBzZWQgPyByZWFkRnJvbVJhbmdlKHJvb3ROb2RlLCBmb3J3YXJkLCBybmcpIDogT3B0aW9uYWwubm9uZSgpO1xuXG4gICAgY29uc3QgZ2V0Q2hpbGRyZW5VbnRpbEJsb2NrQm91bmRhcnkgPSBibG9jayA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGNoaWxkcmVuJDEoYmxvY2spO1xuICAgICAgcmV0dXJuIGZpbmRJbmRleCQyKGNoaWxkcmVuLCBpc0Jsb2NrJDIpLmZvbGQoY29uc3RhbnQoY2hpbGRyZW4pLCBpbmRleCA9PiBjaGlsZHJlbi5zbGljZSgwLCBpbmRleCkpO1xuICAgIH07XG4gICAgY29uc3QgZXh0cmFjdENoaWxkcmVuID0gYmxvY2sgPT4ge1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBnZXRDaGlsZHJlblVudGlsQmxvY2tCb3VuZGFyeShibG9jayk7XG4gICAgICBlYWNoJGUoY2hpbGRyZW4sIHJlbW92ZSQ1KTtcbiAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZUVtcHR5Um9vdCA9IChyb290Tm9kZSwgYmxvY2spID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudHMgPSBwYXJlbnRzQW5kU2VsZihibG9jaywgcm9vdE5vZGUpO1xuICAgICAgcmV0dXJuIGZpbmQkMihwYXJlbnRzLnJldmVyc2UoKSwgZWxlbWVudCA9PiBpc0VtcHR5JDIoZWxlbWVudCkpLmVhY2gocmVtb3ZlJDUpO1xuICAgIH07XG4gICAgY29uc3QgaXNFbXB0eUJlZm9yZSA9IGVsID0+IGZpbHRlciQ1KHByZXZTaWJsaW5ncyhlbCksIGVsID0+ICFpc0VtcHR5JDIoZWwpKS5sZW5ndGggPT09IDA7XG4gICAgY29uc3QgbmVzdGVkQmxvY2tNZXJnZSA9IChyb290Tm9kZSwgZnJvbUJsb2NrLCB0b0Jsb2NrLCBpbnNlcnRpb25Qb2ludCkgPT4ge1xuICAgICAgaWYgKGlzRW1wdHkkMih0b0Jsb2NrKSkge1xuICAgICAgICBmaWxsV2l0aFBhZGRpbmdCcih0b0Jsb2NrKTtcbiAgICAgICAgcmV0dXJuIGZpcnN0UG9zaXRpb25Jbih0b0Jsb2NrLmRvbSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNFbXB0eUJlZm9yZShpbnNlcnRpb25Qb2ludCkgJiYgaXNFbXB0eSQyKGZyb21CbG9jaykpIHtcbiAgICAgICAgYmVmb3JlJDMoaW5zZXJ0aW9uUG9pbnQsIFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdicicpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gcHJldlBvc2l0aW9uKHRvQmxvY2suZG9tLCBDYXJldFBvc2l0aW9uLmJlZm9yZShpbnNlcnRpb25Qb2ludC5kb20pKTtcbiAgICAgIGVhY2gkZShleHRyYWN0Q2hpbGRyZW4oZnJvbUJsb2NrKSwgY2hpbGQgPT4ge1xuICAgICAgICBiZWZvcmUkMyhpbnNlcnRpb25Qb2ludCwgY2hpbGQpO1xuICAgICAgfSk7XG4gICAgICByZW1vdmVFbXB0eVJvb3Qocm9vdE5vZGUsIGZyb21CbG9jayk7XG4gICAgICByZXR1cm4gcG9zaXRpb247XG4gICAgfTtcbiAgICBjb25zdCBzaWRlbG9uZ0Jsb2NrTWVyZ2UgPSAocm9vdE5vZGUsIGZyb21CbG9jaywgdG9CbG9jaykgPT4ge1xuICAgICAgaWYgKGlzRW1wdHkkMih0b0Jsb2NrKSkge1xuICAgICAgICBpZiAoaXNFbXB0eSQyKGZyb21CbG9jaykpIHtcbiAgICAgICAgICBjb25zdCBnZXRJbmxpbmVUb0Jsb2NrRGVzY2VuZGFudHMgPSBlbCA9PiB7XG4gICAgICAgICAgICBjb25zdCBoZWxwZXIgPSAobm9kZSwgZWxlbWVudHMpID0+IGZpcnN0Q2hpbGQobm9kZSkuZm9sZCgoKSA9PiBlbGVtZW50cywgY2hpbGQgPT4gaXNJbmxpbmUkMShjaGlsZCkgPyBoZWxwZXIoY2hpbGQsIGVsZW1lbnRzLmNvbmNhdChzaGFsbG93JDEoY2hpbGQpKSkgOiBlbGVtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gaGVscGVyKGVsLCBbXSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBuZXdGcm9tQmxvY2tEZXNjZW5kYW50cyA9IGZvbGRyKGdldElubGluZVRvQmxvY2tEZXNjZW5kYW50cyh0b0Jsb2NrKSwgKGVsZW1lbnQsIGRlc2NlbmRhbnQpID0+IHtcbiAgICAgICAgICAgIHdyYXAkMihlbGVtZW50LCBkZXNjZW5kYW50KTtcbiAgICAgICAgICAgIHJldHVybiBkZXNjZW5kYW50O1xuICAgICAgICAgIH0sIGNyZWF0ZVBhZGRpbmdCcigpKTtcbiAgICAgICAgICBlbXB0eShmcm9tQmxvY2spO1xuICAgICAgICAgIGFwcGVuZCQxKGZyb21CbG9jaywgbmV3RnJvbUJsb2NrRGVzY2VuZGFudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZSQ1KHRvQmxvY2spO1xuICAgICAgICByZXR1cm4gZmlyc3RQb3NpdGlvbkluKGZyb21CbG9jay5kb20pO1xuICAgICAgfVxuICAgICAgY29uc3QgcG9zaXRpb24gPSBsYXN0UG9zaXRpb25Jbih0b0Jsb2NrLmRvbSk7XG4gICAgICBlYWNoJGUoZXh0cmFjdENoaWxkcmVuKGZyb21CbG9jayksIGNoaWxkID0+IHtcbiAgICAgICAgYXBwZW5kJDEodG9CbG9jaywgY2hpbGQpO1xuICAgICAgfSk7XG4gICAgICByZW1vdmVFbXB0eVJvb3Qocm9vdE5vZGUsIGZyb21CbG9jayk7XG4gICAgICByZXR1cm4gcG9zaXRpb247XG4gICAgfTtcbiAgICBjb25zdCBmaW5kSW5zZXJ0aW9uUG9pbnQgPSAodG9CbG9jaywgYmxvY2spID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudHNBbmRTZWxmJDEgPSBwYXJlbnRzQW5kU2VsZihibG9jaywgdG9CbG9jayk7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShwYXJlbnRzQW5kU2VsZiQxW3BhcmVudHNBbmRTZWxmJDEubGVuZ3RoIC0gMV0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0SW5zZXJ0aW9uUG9pbnQgPSAoZnJvbUJsb2NrLCB0b0Jsb2NrKSA9PiBjb250YWlucyh0b0Jsb2NrLCBmcm9tQmxvY2spID8gZmluZEluc2VydGlvblBvaW50KHRvQmxvY2ssIGZyb21CbG9jaykgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgY29uc3QgdHJpbUJyID0gKGZpcnN0LCBibG9jaykgPT4ge1xuICAgICAgcG9zaXRpb25JbihmaXJzdCwgYmxvY2suZG9tKS5iaW5kKHBvc2l0aW9uID0+IE9wdGlvbmFsLmZyb20ocG9zaXRpb24uZ2V0Tm9kZSgpKSkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKS5maWx0ZXIoaXNCciQ1KS5lYWNoKHJlbW92ZSQ1KTtcbiAgICB9O1xuICAgIGNvbnN0IG1lcmdlQmxvY2tJbnRvID0gKHJvb3ROb2RlLCBmcm9tQmxvY2ssIHRvQmxvY2spID0+IHtcbiAgICAgIHRyaW1Ccih0cnVlLCBmcm9tQmxvY2spO1xuICAgICAgdHJpbUJyKGZhbHNlLCB0b0Jsb2NrKTtcbiAgICAgIHJldHVybiBnZXRJbnNlcnRpb25Qb2ludChmcm9tQmxvY2ssIHRvQmxvY2spLmZvbGQoY3Vycnkoc2lkZWxvbmdCbG9ja01lcmdlLCByb290Tm9kZSwgZnJvbUJsb2NrLCB0b0Jsb2NrKSwgY3VycnkobmVzdGVkQmxvY2tNZXJnZSwgcm9vdE5vZGUsIGZyb21CbG9jaywgdG9CbG9jaykpO1xuICAgIH07XG4gICAgY29uc3QgbWVyZ2VCbG9ja3MgPSAocm9vdE5vZGUsIGZvcndhcmQsIGJsb2NrMSwgYmxvY2syKSA9PiBmb3J3YXJkID8gbWVyZ2VCbG9ja0ludG8ocm9vdE5vZGUsIGJsb2NrMiwgYmxvY2sxKSA6IG1lcmdlQmxvY2tJbnRvKHJvb3ROb2RlLCBibG9jazEsIGJsb2NrMik7XG5cbiAgICBjb25zdCBiYWNrc3BhY2VEZWxldGUkOSA9IChlZGl0b3IsIGZvcndhcmQpID0+IHtcbiAgICAgIGNvbnN0IHJvb3ROb2RlID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IHJlYWQkMShyb290Tm9kZS5kb20sIGZvcndhcmQsIGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpLm1hcChibG9ja0JvdW5kYXJ5ID0+ICgpID0+IHtcbiAgICAgICAgbWVyZ2VCbG9ja3Mocm9vdE5vZGUsIGZvcndhcmQsIGJsb2NrQm91bmRhcnkuZnJvbS5ibG9jaywgYmxvY2tCb3VuZGFyeS50by5ibG9jaykuZWFjaChwb3MgPT4ge1xuICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHBvcy50b1JhbmdlKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgIH07XG5cbiAgICBjb25zdCBkZWxldGVSYW5nZU1lcmdlQmxvY2tzID0gKHJvb3ROb2RlLCBzZWxlY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IHNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIHJldHVybiBsaWZ0MihnZXRQYXJlbnRCbG9jayQyKHJvb3ROb2RlLCBTdWdhckVsZW1lbnQuZnJvbURvbShybmcuc3RhcnRDb250YWluZXIpKSwgZ2V0UGFyZW50QmxvY2skMihyb290Tm9kZSwgU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLmVuZENvbnRhaW5lcikpLCAoYmxvY2sxLCBibG9jazIpID0+IHtcbiAgICAgICAgaWYgKCFlcShibG9jazEsIGJsb2NrMikpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSgoKSA9PiB7XG4gICAgICAgICAgICBybmcuZGVsZXRlQ29udGVudHMoKTtcbiAgICAgICAgICAgIG1lcmdlQmxvY2tzKHJvb3ROb2RlLCB0cnVlLCBibG9jazEsIGJsb2NrMikuZWFjaChwb3MgPT4ge1xuICAgICAgICAgICAgICBzZWxlY3Rpb24uc2V0Um5nKHBvcy50b1JhbmdlKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfSkuZ2V0T3IoT3B0aW9uYWwubm9uZSgpKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzUmF3Tm9kZUluVGFibGUgPSAocm9vdCwgcmF3Tm9kZSkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJhd05vZGUpO1xuICAgICAgY29uc3QgaXNSb290ID0gY3VycnkoZXEsIHJvb3QpO1xuICAgICAgcmV0dXJuIGFuY2VzdG9yJDQobm9kZSwgaXNUYWJsZUNlbGwkMiwgaXNSb290KS5pc1NvbWUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzU2VsZWN0aW9uSW5UYWJsZSA9IChyb290LCBybmcpID0+IGlzUmF3Tm9kZUluVGFibGUocm9vdCwgcm5nLnN0YXJ0Q29udGFpbmVyKSB8fCBpc1Jhd05vZGVJblRhYmxlKHJvb3QsIHJuZy5lbmRDb250YWluZXIpO1xuICAgIGNvbnN0IGlzRXZlcnl0aGluZ1NlbGVjdGVkID0gKHJvb3QsIHJuZykgPT4ge1xuICAgICAgY29uc3Qgbm9QcmV2aW91cyA9IHByZXZQb3NpdGlvbihyb290LmRvbSwgQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChybmcpKS5pc05vbmUoKTtcbiAgICAgIGNvbnN0IG5vTmV4dCA9IG5leHRQb3NpdGlvbihyb290LmRvbSwgQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VFbmQocm5nKSkuaXNOb25lKCk7XG4gICAgICByZXR1cm4gIWlzU2VsZWN0aW9uSW5UYWJsZShyb290LCBybmcpICYmIG5vUHJldmlvdXMgJiYgbm9OZXh0O1xuICAgIH07XG4gICAgY29uc3QgZW1wdHlFZGl0b3IgPSBlZGl0b3IgPT4ge1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoKCkgPT4ge1xuICAgICAgICBlZGl0b3Iuc2V0Q29udGVudCgnJyk7XG4gICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Q3Vyc29yTG9jYXRpb24oKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZGVsZXRlUmFuZ2UkMiA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCByb290Tm9kZSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIHJldHVybiBpc0V2ZXJ5dGhpbmdTZWxlY3RlZChyb290Tm9kZSwgcm5nKSA/IGVtcHR5RWRpdG9yKGVkaXRvcikgOiBkZWxldGVSYW5nZU1lcmdlQmxvY2tzKHJvb3ROb2RlLCBlZGl0b3Iuc2VsZWN0aW9uKTtcbiAgICB9O1xuICAgIGNvbnN0IGJhY2tzcGFjZURlbGV0ZSQ4ID0gKGVkaXRvciwgX2ZvcndhcmQpID0+IGVkaXRvci5zZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSA/IE9wdGlvbmFsLm5vbmUoKSA6IGRlbGV0ZVJhbmdlJDIoZWRpdG9yKTtcblxuICAgIGNvbnN0IHNob3dDYXJldCA9IChkaXJlY3Rpb24sIGVkaXRvciwgbm9kZSwgYmVmb3JlLCBzY3JvbGxJbnRvVmlldykgPT4gT3B0aW9uYWwuZnJvbShlZGl0b3IuX3NlbGVjdGlvbk92ZXJyaWRlcy5zaG93Q2FyZXQoZGlyZWN0aW9uLCBub2RlLCBiZWZvcmUsIHNjcm9sbEludG9WaWV3KSk7XG4gICAgY29uc3QgZ2V0Tm9kZVJhbmdlID0gbm9kZSA9PiB7XG4gICAgICBjb25zdCBybmcgPSBub2RlLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHJuZy5zZWxlY3ROb2RlKG5vZGUpO1xuICAgICAgcmV0dXJuIHJuZztcbiAgICB9O1xuICAgIGNvbnN0IHNlbGVjdE5vZGUgPSAoZWRpdG9yLCBub2RlKSA9PiB7XG4gICAgICBjb25zdCBlID0gZWRpdG9yLmRpc3BhdGNoKCdCZWZvcmVPYmplY3RTZWxlY3RlZCcsIHsgdGFyZ2V0OiBub2RlIH0pO1xuICAgICAgaWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGdldE5vZGVSYW5nZShub2RlKSk7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJDYXJldEF0UmFuZ2UgPSAoZWRpdG9yLCByYW5nZSwgc2Nyb2xsSW50b1ZpZXcpID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRSYW5nZSA9IG5vcm1hbGl6ZVJhbmdlKDEsIGVkaXRvci5nZXRCb2R5KCksIHJhbmdlKTtcbiAgICAgIGNvbnN0IGNhcmV0UG9zaXRpb24gPSBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KG5vcm1hbGl6ZWRSYW5nZSk7XG4gICAgICBjb25zdCBjYXJldFBvc2l0aW9uTm9kZSA9IGNhcmV0UG9zaXRpb24uZ2V0Tm9kZSgpO1xuICAgICAgaWYgKGlzSW5saW5lRmFrZUNhcmV0VGFyZ2V0KGNhcmV0UG9zaXRpb25Ob2RlKSkge1xuICAgICAgICByZXR1cm4gc2hvd0NhcmV0KDEsIGVkaXRvciwgY2FyZXRQb3NpdGlvbk5vZGUsICFjYXJldFBvc2l0aW9uLmlzQXRFbmQoKSwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2FyZXRQb3NpdGlvbkJlZm9yZU5vZGUgPSBjYXJldFBvc2l0aW9uLmdldE5vZGUodHJ1ZSk7XG4gICAgICBpZiAoaXNJbmxpbmVGYWtlQ2FyZXRUYXJnZXQoY2FyZXRQb3NpdGlvbkJlZm9yZU5vZGUpKSB7XG4gICAgICAgIHJldHVybiBzaG93Q2FyZXQoMSwgZWRpdG9yLCBjYXJldFBvc2l0aW9uQmVmb3JlTm9kZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNlUm9vdCA9IGdldENvbnRlbnRFZGl0YWJsZVJvb3QkMShlZGl0b3IuZG9tLmdldFJvb3QoKSwgY2FyZXRQb3NpdGlvbi5nZXROb2RlKCkpO1xuICAgICAgaWYgKGlzSW5saW5lRmFrZUNhcmV0VGFyZ2V0KGNlUm9vdCkpIHtcbiAgICAgICAgcmV0dXJuIHNob3dDYXJldCgxLCBlZGl0b3IsIGNlUm9vdCwgZmFsc2UsIHNjcm9sbEludG9WaWV3KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJSYW5nZUNhcmV0ID0gKGVkaXRvciwgcmFuZ2UsIHNjcm9sbEludG9WaWV3KSA9PiByYW5nZS5jb2xsYXBzZWQgPyByZW5kZXJDYXJldEF0UmFuZ2UoZWRpdG9yLCByYW5nZSwgc2Nyb2xsSW50b1ZpZXcpLmdldE9yKHJhbmdlKSA6IHJhbmdlO1xuXG4gICAgY29uc3QgaXNCZWZvcmVCb3VuZGFyeSA9IHBvcyA9PiBpc0JlZm9yZUNvbnRlbnRFZGl0YWJsZUZhbHNlKHBvcykgfHwgaXNCZWZvcmVNZWRpYShwb3MpO1xuICAgIGNvbnN0IGlzQWZ0ZXJCb3VuZGFyeSA9IHBvcyA9PiBpc0FmdGVyQ29udGVudEVkaXRhYmxlRmFsc2UocG9zKSB8fCBpc0FmdGVyTWVkaWEocG9zKTtcbiAgICBjb25zdCB0cmltRW1wdHlUZXh0Tm9kZSA9IChkb20sIG5vZGUpID0+IHtcbiAgICAgIGlmIChpc1RleHQkYShub2RlKSAmJiBub2RlLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRvbS5yZW1vdmUobm9kZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBkZWxldGVDb250ZW50QW5kU2hvd0NhcmV0ID0gKGVkaXRvciwgcmFuZ2UsIG5vZGUsIGRpcmVjdGlvbiwgZm9yd2FyZCwgcGVla0NhcmV0UG9zaXRpb24pID0+IHtcbiAgICAgIHNob3dDYXJldChkaXJlY3Rpb24sIGVkaXRvciwgcGVla0NhcmV0UG9zaXRpb24uZ2V0Tm9kZSghZm9yd2FyZCksIGZvcndhcmQsIHRydWUpLmVhY2goY2FyZXRSYW5nZSA9PiB7XG4gICAgICAgIGlmIChyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICAgICAgICBjb25zdCBkZWxldGVSYW5nZSA9IHJhbmdlLmNsb25lUmFuZ2UoKTtcbiAgICAgICAgICBpZiAoZm9yd2FyZCkge1xuICAgICAgICAgICAgZGVsZXRlUmFuZ2Uuc2V0RW5kKGNhcmV0UmFuZ2Uuc3RhcnRDb250YWluZXIsIGNhcmV0UmFuZ2Uuc3RhcnRPZmZzZXQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGVSYW5nZS5zZXRTdGFydChjYXJldFJhbmdlLmVuZENvbnRhaW5lciwgY2FyZXRSYW5nZS5lbmRPZmZzZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGVSYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcoY2FyZXRSYW5nZSk7XG4gICAgICB9KTtcbiAgICAgIHRyaW1FbXB0eVRleHROb2RlKGVkaXRvci5kb20sIG5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgZGVsZXRlQm91bmRhcnlUZXh0ID0gKGVkaXRvciwgZm9yd2FyZCkgPT4ge1xuICAgICAgY29uc3QgcmFuZ2UgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgaWYgKCFpc1RleHQkYShyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcikpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGZvcndhcmQgPyBIRGlyZWN0aW9uLkZvcndhcmRzIDogSERpcmVjdGlvbi5CYWNrd2FyZHM7XG4gICAgICBjb25zdCBjYXJldFdhbGtlciA9IENhcmV0V2Fsa2VyKGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgY29uc3QgZ2V0TmV4dFBvc0ZuID0gY3VycnkoZ2V0VmlzdWFsQ2FyZXRQb3NpdGlvbiwgZm9yd2FyZCA/IGNhcmV0V2Fsa2VyLm5leHQgOiBjYXJldFdhbGtlci5wcmV2KTtcbiAgICAgIGNvbnN0IGlzQmVmb3JlRm4gPSBmb3J3YXJkID8gaXNCZWZvcmVCb3VuZGFyeSA6IGlzQWZ0ZXJCb3VuZGFyeTtcbiAgICAgIGNvbnN0IGNhcmV0UG9zaXRpb24gPSBnZXROb3JtYWxpemVkUmFuZ2VFbmRQb2ludChkaXJlY3Rpb24sIGVkaXRvci5nZXRCb2R5KCksIHJhbmdlKTtcbiAgICAgIGNvbnN0IG5leHRDYXJldFBvc2l0aW9uID0gZ2V0TmV4dFBvc0ZuKGNhcmV0UG9zaXRpb24pO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZE5leHRDYXJldFBvc2l0aW9uID0gbmV4dENhcmV0UG9zaXRpb24gPyBub3JtYWxpemVQb3NpdGlvbihmb3J3YXJkLCBuZXh0Q2FyZXRQb3NpdGlvbikgOiBuZXh0Q2FyZXRQb3NpdGlvbjtcbiAgICAgIGlmICghbm9ybWFsaXplZE5leHRDYXJldFBvc2l0aW9uIHx8ICFpc01vdmVJbnNpZGVTYW1lQmxvY2soY2FyZXRQb3NpdGlvbiwgbm9ybWFsaXplZE5leHRDYXJldFBvc2l0aW9uKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIGlmIChpc0JlZm9yZUZuKG5vcm1hbGl6ZWROZXh0Q2FyZXRQb3NpdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoKCkgPT4gZGVsZXRlQ29udGVudEFuZFNob3dDYXJldChlZGl0b3IsIHJhbmdlLCBjYXJldFBvc2l0aW9uLmdldE5vZGUoKSwgZGlyZWN0aW9uLCBmb3J3YXJkLCBub3JtYWxpemVkTmV4dENhcmV0UG9zaXRpb24pKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBlZWtDYXJldFBvc2l0aW9uID0gZ2V0TmV4dFBvc0ZuKG5vcm1hbGl6ZWROZXh0Q2FyZXRQb3NpdGlvbik7XG4gICAgICBpZiAocGVla0NhcmV0UG9zaXRpb24gJiYgaXNCZWZvcmVGbihwZWVrQ2FyZXRQb3NpdGlvbikpIHtcbiAgICAgICAgaWYgKGlzTW92ZUluc2lkZVNhbWVCbG9jayhub3JtYWxpemVkTmV4dENhcmV0UG9zaXRpb24sIHBlZWtDYXJldFBvc2l0aW9uKSkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKCgpID0+IGRlbGV0ZUNvbnRlbnRBbmRTaG93Q2FyZXQoZWRpdG9yLCByYW5nZSwgY2FyZXRQb3NpdGlvbi5nZXROb2RlKCksIGRpcmVjdGlvbiwgZm9yd2FyZCwgcGVla0NhcmV0UG9zaXRpb24pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGJhY2tzcGFjZURlbGV0ZSQ3ID0gKGVkaXRvciwgZm9yd2FyZCkgPT4gZGVsZXRlQm91bmRhcnlUZXh0KGVkaXRvciwgZm9yd2FyZCk7XG5cbiAgICBjb25zdCBnZXRFZGdlQ2VmUG9zaXRpb24gPSAoZWRpdG9yLCBhdFN0YXJ0KSA9PiB7XG4gICAgICBjb25zdCByb290ID0gZWRpdG9yLmdldEJvZHkoKTtcbiAgICAgIHJldHVybiBhdFN0YXJ0ID8gZmlyc3RQb3NpdGlvbkluKHJvb3QpLmZpbHRlcihpc0JlZm9yZUNvbnRlbnRFZGl0YWJsZUZhbHNlKSA6IGxhc3RQb3NpdGlvbkluKHJvb3QpLmZpbHRlcihpc0FmdGVyQ29udGVudEVkaXRhYmxlRmFsc2UpO1xuICAgIH07XG4gICAgY29uc3QgaXNDZWZBdEVkZ2VTZWxlY3RlZCA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgcmV0dXJuICFybmcuY29sbGFwc2VkICYmIChnZXRFZGdlQ2VmUG9zaXRpb24oZWRpdG9yLCB0cnVlKS5leGlzdHMocG9zID0+IHBvcy5pc0VxdWFsKENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQocm5nKSkpIHx8IGdldEVkZ2VDZWZQb3NpdGlvbihlZGl0b3IsIGZhbHNlKS5leGlzdHMocG9zID0+IHBvcy5pc0VxdWFsKENhcmV0UG9zaXRpb24uZnJvbVJhbmdlRW5kKHJuZykpKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzQ29tcG91bmRFbGVtZW50ID0gbm9kZSA9PiBpc05vbk51bGxhYmxlKG5vZGUpICYmIChpc1RhYmxlQ2VsbCQyKFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5vZGUpKSB8fCBpc0xpc3RJdGVtJDEoU3VnYXJFbGVtZW50LmZyb21Eb20obm9kZSkpKTtcbiAgICBjb25zdCBEZWxldGVBY3Rpb24gPSBBZHQuZ2VuZXJhdGUoW1xuICAgICAgeyByZW1vdmU6IFsnZWxlbWVudCddIH0sXG4gICAgICB7IG1vdmVUb0VsZW1lbnQ6IFsnZWxlbWVudCddIH0sXG4gICAgICB7IG1vdmVUb1Bvc2l0aW9uOiBbJ3Bvc2l0aW9uJ10gfVxuICAgIF0pO1xuICAgIGNvbnN0IGlzQXRDb250ZW50RWRpdGFibGVCbG9ja0NhcmV0ID0gKGZvcndhcmQsIGZyb20pID0+IHtcbiAgICAgIGNvbnN0IGVsbSA9IGZyb20uZ2V0Tm9kZSghZm9yd2FyZCk7XG4gICAgICBjb25zdCBjYXJldExvY2F0aW9uID0gZm9yd2FyZCA/ICdhZnRlcicgOiAnYmVmb3JlJztcbiAgICAgIHJldHVybiBpc0VsZW1lbnQkNihlbG0pICYmIGVsbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWNlLWNhcmV0JykgPT09IGNhcmV0TG9jYXRpb247XG4gICAgfTtcbiAgICBjb25zdCBpc0RlbGV0ZUZyb21DZWZEaWZmZXJlbnRCbG9ja3MgPSAocm9vdCwgZm9yd2FyZCwgZnJvbSwgdG8pID0+IHtcbiAgICAgIGNvbnN0IGluU2FtZUJsb2NrID0gZWxtID0+IGlzSW5saW5lJDEoU3VnYXJFbGVtZW50LmZyb21Eb20oZWxtKSkgJiYgIWlzSW5TYW1lQmxvY2soZnJvbSwgdG8sIHJvb3QpO1xuICAgICAgcmV0dXJuIGdldFJlbGF0aXZlQ2VmRWxtKCFmb3J3YXJkLCBmcm9tKS5mb2xkKCgpID0+IGdldFJlbGF0aXZlQ2VmRWxtKGZvcndhcmQsIHRvKS5mb2xkKG5ldmVyLCBpblNhbWVCbG9jayksIGluU2FtZUJsb2NrKTtcbiAgICB9O1xuICAgIGNvbnN0IGRlbGV0ZUVtcHR5QmxvY2tPck1vdmVUb0NlZiA9IChyb290LCBmb3J3YXJkLCBmcm9tLCB0bykgPT4ge1xuICAgICAgY29uc3QgdG9DZWZFbG0gPSB0by5nZXROb2RlKCFmb3J3YXJkKTtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRCbG9jayQyKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJvb3QpLCBTdWdhckVsZW1lbnQuZnJvbURvbShmcm9tLmdldE5vZGUoKSkpLm1hcChibG9ja0VsbSA9PiBpc0VtcHR5JDIoYmxvY2tFbG0pID8gRGVsZXRlQWN0aW9uLnJlbW92ZShibG9ja0VsbS5kb20pIDogRGVsZXRlQWN0aW9uLm1vdmVUb0VsZW1lbnQodG9DZWZFbG0pKS5vclRodW5rKCgpID0+IE9wdGlvbmFsLnNvbWUoRGVsZXRlQWN0aW9uLm1vdmVUb0VsZW1lbnQodG9DZWZFbG0pKSk7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kQ2VmUG9zaXRpb24gPSAocm9vdCwgZm9yd2FyZCwgZnJvbSkgPT4gZnJvbVBvc2l0aW9uKGZvcndhcmQsIHJvb3QsIGZyb20pLmJpbmQodG8gPT4ge1xuICAgICAgaWYgKGlzQ29tcG91bmRFbGVtZW50KHRvLmdldE5vZGUoKSkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNEZWxldGVGcm9tQ2VmRGlmZmVyZW50QmxvY2tzKHJvb3QsIGZvcndhcmQsIGZyb20sIHRvKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIGlmIChmb3J3YXJkICYmIGlzQ29udGVudEVkaXRhYmxlRmFsc2UkYih0by5nZXROb2RlKCkpKSB7XG4gICAgICAgIHJldHVybiBkZWxldGVFbXB0eUJsb2NrT3JNb3ZlVG9DZWYocm9vdCwgZm9yd2FyZCwgZnJvbSwgdG8pO1xuICAgICAgfSBlbHNlIGlmICghZm9yd2FyZCAmJiBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJGIodG8uZ2V0Tm9kZSh0cnVlKSkpIHtcbiAgICAgICAgcmV0dXJuIGRlbGV0ZUVtcHR5QmxvY2tPck1vdmVUb0NlZihyb290LCBmb3J3YXJkLCBmcm9tLCB0byk7XG4gICAgICB9IGVsc2UgaWYgKGZvcndhcmQgJiYgaXNBZnRlckNvbnRlbnRFZGl0YWJsZUZhbHNlKGZyb20pKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKERlbGV0ZUFjdGlvbi5tb3ZlVG9Qb3NpdGlvbih0bykpO1xuICAgICAgfSBlbHNlIGlmICghZm9yd2FyZCAmJiBpc0JlZm9yZUNvbnRlbnRFZGl0YWJsZUZhbHNlKGZyb20pKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKERlbGV0ZUFjdGlvbi5tb3ZlVG9Qb3NpdGlvbih0bykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBnZXRDb250ZW50RWRpdGFibGVCbG9ja0FjdGlvbiA9IChmb3J3YXJkLCBlbG0pID0+IHtcbiAgICAgIGlmIChpc051bGxhYmxlKGVsbSkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH0gZWxzZSBpZiAoZm9yd2FyZCAmJiBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJGIoZWxtLm5leHRTaWJsaW5nKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShEZWxldGVBY3Rpb24ubW92ZVRvRWxlbWVudChlbG0ubmV4dFNpYmxpbmcpKTtcbiAgICAgIH0gZWxzZSBpZiAoIWZvcndhcmQgJiYgaXNDb250ZW50RWRpdGFibGVGYWxzZSRiKGVsbS5wcmV2aW91c1NpYmxpbmcpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKERlbGV0ZUFjdGlvbi5tb3ZlVG9FbGVtZW50KGVsbS5wcmV2aW91c1NpYmxpbmcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBza2lwTW92ZVRvQWN0aW9uRnJvbUlubGluZUNlZlRvQ29udGVudCA9IChyb290LCBmcm9tLCBkZWxldGVBY3Rpb24pID0+IGRlbGV0ZUFjdGlvbi5mb2xkKGVsbSA9PiBPcHRpb25hbC5zb21lKERlbGV0ZUFjdGlvbi5yZW1vdmUoZWxtKSksIGVsbSA9PiBPcHRpb25hbC5zb21lKERlbGV0ZUFjdGlvbi5tb3ZlVG9FbGVtZW50KGVsbSkpLCB0byA9PiB7XG4gICAgICBpZiAoaXNJblNhbWVCbG9jayhmcm9tLCB0bywgcm9vdCkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKERlbGV0ZUFjdGlvbi5tb3ZlVG9Qb3NpdGlvbih0bykpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGdldENvbnRlbnRFZGl0YWJsZUFjdGlvbiA9IChyb290LCBmb3J3YXJkLCBmcm9tKSA9PiB7XG4gICAgICBpZiAoaXNBdENvbnRlbnRFZGl0YWJsZUJsb2NrQ2FyZXQoZm9yd2FyZCwgZnJvbSkpIHtcbiAgICAgICAgcmV0dXJuIGdldENvbnRlbnRFZGl0YWJsZUJsb2NrQWN0aW9uKGZvcndhcmQsIGZyb20uZ2V0Tm9kZSghZm9yd2FyZCkpLm9yVGh1bmsoKCkgPT4gZmluZENlZlBvc2l0aW9uKHJvb3QsIGZvcndhcmQsIGZyb20pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmaW5kQ2VmUG9zaXRpb24ocm9vdCwgZm9yd2FyZCwgZnJvbSkuYmluZChkZWxldGVBY3Rpb24gPT4gc2tpcE1vdmVUb0FjdGlvbkZyb21JbmxpbmVDZWZUb0NvbnRlbnQocm9vdCwgZnJvbSwgZGVsZXRlQWN0aW9uKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZWFkID0gKHJvb3QsIGZvcndhcmQsIHJuZykgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFJhbmdlID0gbm9ybWFsaXplUmFuZ2UoZm9yd2FyZCA/IDEgOiAtMSwgcm9vdCwgcm5nKTtcbiAgICAgIGNvbnN0IGZyb20gPSBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KG5vcm1hbGl6ZWRSYW5nZSk7XG4gICAgICBjb25zdCByb290RWxlbWVudCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJvb3QpO1xuICAgICAgaWYgKCFmb3J3YXJkICYmIGlzQWZ0ZXJDb250ZW50RWRpdGFibGVGYWxzZShmcm9tKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShEZWxldGVBY3Rpb24ucmVtb3ZlKGZyb20uZ2V0Tm9kZSh0cnVlKSkpO1xuICAgICAgfSBlbHNlIGlmIChmb3J3YXJkICYmIGlzQmVmb3JlQ29udGVudEVkaXRhYmxlRmFsc2UoZnJvbSkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoRGVsZXRlQWN0aW9uLnJlbW92ZShmcm9tLmdldE5vZGUoKSkpO1xuICAgICAgfSBlbHNlIGlmICghZm9yd2FyZCAmJiBpc0JlZm9yZUNvbnRlbnRFZGl0YWJsZUZhbHNlKGZyb20pICYmIGlzQWZ0ZXJCcihyb290RWxlbWVudCwgZnJvbSkpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRQcmV2aW91c0JyKHJvb3RFbGVtZW50LCBmcm9tKS5tYXAoYnIgPT4gRGVsZXRlQWN0aW9uLnJlbW92ZShici5nZXROb2RlKCkpKTtcbiAgICAgIH0gZWxzZSBpZiAoZm9yd2FyZCAmJiBpc0FmdGVyQ29udGVudEVkaXRhYmxlRmFsc2UoZnJvbSkgJiYgaXNCZWZvcmVCciQxKHJvb3RFbGVtZW50LCBmcm9tKSkge1xuICAgICAgICByZXR1cm4gZmluZE5leHRCcihyb290RWxlbWVudCwgZnJvbSkubWFwKGJyID0+IERlbGV0ZUFjdGlvbi5yZW1vdmUoYnIuZ2V0Tm9kZSgpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZ2V0Q29udGVudEVkaXRhYmxlQWN0aW9uKHJvb3QsIGZvcndhcmQsIGZyb20pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBkZWxldGVFbGVtZW50JDEgPSAoZWRpdG9yLCBmb3J3YXJkKSA9PiBlbGVtZW50ID0+IHtcbiAgICAgIGVkaXRvci5fc2VsZWN0aW9uT3ZlcnJpZGVzLmhpZGVGYWtlQ2FyZXQoKTtcbiAgICAgIGRlbGV0ZUVsZW1lbnQkMihlZGl0b3IsIGZvcndhcmQsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsZW1lbnQpKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgY29uc3QgbW92ZVRvRWxlbWVudCA9IChlZGl0b3IsIGZvcndhcmQpID0+IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgcG9zID0gZm9yd2FyZCA/IENhcmV0UG9zaXRpb24uYmVmb3JlKGVsZW1lbnQpIDogQ2FyZXRQb3NpdGlvbi5hZnRlcihlbGVtZW50KTtcbiAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHBvcy50b1JhbmdlKCkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBtb3ZlVG9Qb3NpdGlvbiA9IGVkaXRvciA9PiBwb3MgPT4ge1xuICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcocG9zLnRvUmFuZ2UoKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEFuY2VzdG9yQ2UgPSAoZWRpdG9yLCBub2RlKSA9PiBPcHRpb25hbC5mcm9tKGdldENvbnRlbnRFZGl0YWJsZVJvb3QkMShlZGl0b3IuZ2V0Qm9keSgpLCBub2RlKSk7XG4gICAgY29uc3QgYmFja3NwYWNlRGVsZXRlQ2FyZXQgPSAoZWRpdG9yLCBmb3J3YXJkKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKTtcbiAgICAgIHJldHVybiBnZXRBbmNlc3RvckNlKGVkaXRvciwgc2VsZWN0ZWROb2RlKS5maWx0ZXIoaXNDb250ZW50RWRpdGFibGVGYWxzZSRiKS5mb2xkKCgpID0+IHJlYWQoZWRpdG9yLmdldEJvZHkoKSwgZm9yd2FyZCwgZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSkubWFwKGRlbGV0ZUFjdGlvbiA9PiAoKSA9PiBkZWxldGVBY3Rpb24uZm9sZChkZWxldGVFbGVtZW50JDEoZWRpdG9yLCBmb3J3YXJkKSwgbW92ZVRvRWxlbWVudChlZGl0b3IsIGZvcndhcmQpLCBtb3ZlVG9Qb3NpdGlvbihlZGl0b3IpKSksICgpID0+IE9wdGlvbmFsLnNvbWUobm9vcCkpO1xuICAgIH07XG4gICAgY29uc3QgZGVsZXRlT2Zmc2NyZWVuU2VsZWN0aW9uID0gcm9vdEVsZW1lbnQgPT4ge1xuICAgICAgZWFjaCRlKGRlc2NlbmRhbnRzKHJvb3RFbGVtZW50LCAnLm1jZS1vZmZzY3JlZW4tc2VsZWN0aW9uJyksIHJlbW92ZSQ1KTtcbiAgICB9O1xuICAgIGNvbnN0IGJhY2tzcGFjZURlbGV0ZVJhbmdlID0gKGVkaXRvciwgZm9yd2FyZCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0ZWROb2RlID0gZWRpdG9yLnNlbGVjdGlvbi5nZXROb2RlKCk7XG4gICAgICBpZiAoaXNDb250ZW50RWRpdGFibGVGYWxzZSRiKHNlbGVjdGVkTm9kZSkgJiYgIWlzVGFibGVDZWxsJDMoc2VsZWN0ZWROb2RlKSkge1xuICAgICAgICBjb25zdCBoYXNDZWZBbmNlc3RvciA9IGdldEFuY2VzdG9yQ2UoZWRpdG9yLCBzZWxlY3RlZE5vZGUucGFyZW50Tm9kZSkuZmlsdGVyKGlzQ29udGVudEVkaXRhYmxlRmFsc2UkYik7XG4gICAgICAgIHJldHVybiBoYXNDZWZBbmNlc3Rvci5mb2xkKCgpID0+IE9wdGlvbmFsLnNvbWUoKCkgPT4ge1xuICAgICAgICAgIGRlbGV0ZU9mZnNjcmVlblNlbGVjdGlvbihTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKSk7XG4gICAgICAgICAgZGVsZXRlRWxlbWVudCQyKGVkaXRvciwgZm9yd2FyZCwgU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLnNlbGVjdGlvbi5nZXROb2RlKCkpKTtcbiAgICAgICAgICBwYWRkRW1wdHlCb2R5KGVkaXRvcik7XG4gICAgICAgIH0pLCAoKSA9PiBPcHRpb25hbC5zb21lKG5vb3ApKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0NlZkF0RWRnZVNlbGVjdGVkKGVkaXRvcikpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoKCkgPT4ge1xuICAgICAgICAgIGRlbGV0ZVJhbmdlQ29udGVudHMoZWRpdG9yLCBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpLCBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IHBhZGRFbXB0eUVsZW1lbnQgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbSwgc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgIGNvbnN0IGNlUm9vdCA9IGdldENvbnRlbnRFZGl0YWJsZVJvb3QkMShlZGl0b3IuZ2V0Qm9keSgpLCBzZWxlY3Rpb24uZ2V0Tm9kZSgpKTtcbiAgICAgIGlmIChpc0NvbnRlbnRFZGl0YWJsZVRydWUkMyhjZVJvb3QpICYmIGRvbS5pc0Jsb2NrKGNlUm9vdCkgJiYgZG9tLmlzRW1wdHkoY2VSb290KSkge1xuICAgICAgICBjb25zdCBiciA9IGRvbS5jcmVhdGUoJ2JyJywgeyAnZGF0YS1tY2UtYm9ndXMnOiAnMScgfSk7XG4gICAgICAgIGRvbS5zZXRIVE1MKGNlUm9vdCwgJycpO1xuICAgICAgICBjZVJvb3QuYXBwZW5kQ2hpbGQoYnIpO1xuICAgICAgICBzZWxlY3Rpb24uc2V0Um5nKENhcmV0UG9zaXRpb24uYmVmb3JlKGJyKS50b1JhbmdlKCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBiYWNrc3BhY2VEZWxldGUkNiA9IChlZGl0b3IsIGZvcndhcmQpID0+IHtcbiAgICAgIGlmIChlZGl0b3Iuc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkpIHtcbiAgICAgICAgcmV0dXJuIGJhY2tzcGFjZURlbGV0ZUNhcmV0KGVkaXRvciwgZm9yd2FyZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYmFja3NwYWNlRGVsZXRlUmFuZ2UoZWRpdG9yLCBmb3J3YXJkKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZGVsZXRlQ2FyZXQkMiA9IChlZGl0b3IsIGZvcndhcmQpID0+IHtcbiAgICAgIGNvbnN0IGZyb21Qb3MgPSBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpO1xuICAgICAgcmV0dXJuIGZyb21Qb3NpdGlvbihmb3J3YXJkLCBlZGl0b3IuZ2V0Qm9keSgpLCBmcm9tUG9zKS5maWx0ZXIocG9zID0+IGZvcndhcmQgPyBpc0JlZm9yZUltYWdlQmxvY2socG9zKSA6IGlzQWZ0ZXJJbWFnZUJsb2NrKHBvcykpLmJpbmQocG9zID0+IGdldENoaWxkTm9kZUF0UmVsYXRpdmVPZmZzZXQoZm9yd2FyZCA/IDAgOiAtMSwgcG9zKSkubWFwKGVsbSA9PiAoKSA9PiBlZGl0b3Iuc2VsZWN0aW9uLnNlbGVjdChlbG0pKTtcbiAgICB9O1xuICAgIGNvbnN0IGJhY2tzcGFjZURlbGV0ZSQ1ID0gKGVkaXRvciwgZm9yd2FyZCkgPT4gZWRpdG9yLnNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpID8gZGVsZXRlQ2FyZXQkMihlZGl0b3IsIGZvcndhcmQpIDogT3B0aW9uYWwubm9uZSgpO1xuXG4gICAgY29uc3QgaXNUZXh0JDIgPSBpc1RleHQkYTtcbiAgICBjb25zdCBzdGFydHNXaXRoQ2FyZXRDb250YWluZXIgPSBub2RlID0+IGlzVGV4dCQyKG5vZGUpICYmIG5vZGUuZGF0YVswXSA9PT0gWldTUCQxO1xuICAgIGNvbnN0IGVuZHNXaXRoQ2FyZXRDb250YWluZXIgPSBub2RlID0+IGlzVGV4dCQyKG5vZGUpICYmIG5vZGUuZGF0YVtub2RlLmRhdGEubGVuZ3RoIC0gMV0gPT09IFpXU1AkMTtcbiAgICBjb25zdCBjcmVhdGVad3NwID0gbm9kZSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBkb2MgPSAoX2EgPSBub2RlLm93bmVyRG9jdW1lbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGRvY3VtZW50O1xuICAgICAgcmV0dXJuIGRvYy5jcmVhdGVUZXh0Tm9kZShaV1NQJDEpO1xuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0QmVmb3JlJDEgPSBub2RlID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGlmIChpc1RleHQkMihub2RlLnByZXZpb3VzU2libGluZykpIHtcbiAgICAgICAgaWYgKGVuZHNXaXRoQ2FyZXRDb250YWluZXIobm9kZS5wcmV2aW91c1NpYmxpbmcpKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGUucHJldmlvdXNTaWJsaW5nLmFwcGVuZERhdGEoWldTUCQxKTtcbiAgICAgICAgICByZXR1cm4gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNUZXh0JDIobm9kZSkpIHtcbiAgICAgICAgaWYgKHN0YXJ0c1dpdGhDYXJldENvbnRhaW5lcihub2RlKSkge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGUuaW5zZXJ0RGF0YSgwLCBaV1NQJDEpO1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZXdOb2RlID0gY3JlYXRlWndzcChub2RlKTtcbiAgICAgICAgKF9hID0gbm9kZS5wYXJlbnROb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIG5vZGUpO1xuICAgICAgICByZXR1cm4gbmV3Tm9kZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGluc2VydEFmdGVyJDEgPSBub2RlID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICBpZiAoaXNUZXh0JDIobm9kZS5uZXh0U2libGluZykpIHtcbiAgICAgICAgaWYgKHN0YXJ0c1dpdGhDYXJldENvbnRhaW5lcihub2RlLm5leHRTaWJsaW5nKSkge1xuICAgICAgICAgIHJldHVybiBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGUubmV4dFNpYmxpbmcuaW5zZXJ0RGF0YSgwLCBaV1NQJDEpO1xuICAgICAgICAgIHJldHVybiBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzVGV4dCQyKG5vZGUpKSB7XG4gICAgICAgIGlmIChlbmRzV2l0aENhcmV0Q29udGFpbmVyKG5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZS5hcHBlbmREYXRhKFpXU1AkMSk7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5ld05vZGUgPSBjcmVhdGVad3NwKG5vZGUpO1xuICAgICAgICBpZiAobm9kZS5uZXh0U2libGluZykge1xuICAgICAgICAgIChfYSA9IG5vZGUucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmluc2VydEJlZm9yZShuZXdOb2RlLCBub2RlLm5leHRTaWJsaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAoX2IgPSBub2RlLnBhcmVudE5vZGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5hcHBlbmRDaGlsZChuZXdOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3Tm9kZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGluc2VydElubGluZSA9IChiZWZvcmUsIG5vZGUpID0+IGJlZm9yZSA/IGluc2VydEJlZm9yZSQxKG5vZGUpIDogaW5zZXJ0QWZ0ZXIkMShub2RlKTtcbiAgICBjb25zdCBpbnNlcnRJbmxpbmVCZWZvcmUgPSBjdXJyeShpbnNlcnRJbmxpbmUsIHRydWUpO1xuICAgIGNvbnN0IGluc2VydElubGluZUFmdGVyID0gY3VycnkoaW5zZXJ0SW5saW5lLCBmYWxzZSk7XG5cbiAgICBjb25zdCBpbnNlcnRJbmxpbmVQb3MgPSAocG9zLCBiZWZvcmUpID0+IHtcbiAgICAgIGlmIChpc1RleHQkYShwb3MuY29udGFpbmVyKCkpKSB7XG4gICAgICAgIHJldHVybiBpbnNlcnRJbmxpbmUoYmVmb3JlLCBwb3MuY29udGFpbmVyKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGluc2VydElubGluZShiZWZvcmUsIHBvcy5nZXROb2RlKCkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNQb3NDYXJldENvbnRhaW5lciA9IChwb3MsIGNhcmV0KSA9PiB7XG4gICAgICBjb25zdCBjYXJldE5vZGUgPSBjYXJldC5nZXQoKTtcbiAgICAgIHJldHVybiBjYXJldE5vZGUgJiYgcG9zLmNvbnRhaW5lcigpID09PSBjYXJldE5vZGUgJiYgaXNDYXJldENvbnRhaW5lcklubGluZShjYXJldE5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyQ2FyZXQgPSAoY2FyZXQsIGxvY2F0aW9uKSA9PiBsb2NhdGlvbi5mb2xkKGVsZW1lbnQgPT4ge1xuICAgICAgcmVtb3ZlJDMoY2FyZXQuZ2V0KCkpO1xuICAgICAgY29uc3QgdGV4dCA9IGluc2VydElubGluZUJlZm9yZShlbGVtZW50KTtcbiAgICAgIGNhcmV0LnNldCh0ZXh0KTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKENhcmV0UG9zaXRpb24odGV4dCwgdGV4dC5sZW5ndGggLSAxKSk7XG4gICAgfSwgZWxlbWVudCA9PiBmaXJzdFBvc2l0aW9uSW4oZWxlbWVudCkubWFwKHBvcyA9PiB7XG4gICAgICBpZiAoIWlzUG9zQ2FyZXRDb250YWluZXIocG9zLCBjYXJldCkpIHtcbiAgICAgICAgcmVtb3ZlJDMoY2FyZXQuZ2V0KCkpO1xuICAgICAgICBjb25zdCB0ZXh0ID0gaW5zZXJ0SW5saW5lUG9zKHBvcywgdHJ1ZSk7XG4gICAgICAgIGNhcmV0LnNldCh0ZXh0KTtcbiAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24odGV4dCwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBub2RlID0gY2FyZXQuZ2V0KCk7XG4gICAgICAgIHJldHVybiBDYXJldFBvc2l0aW9uKG5vZGUsIDEpO1xuICAgICAgfVxuICAgIH0pLCBlbGVtZW50ID0+IGxhc3RQb3NpdGlvbkluKGVsZW1lbnQpLm1hcChwb3MgPT4ge1xuICAgICAgaWYgKCFpc1Bvc0NhcmV0Q29udGFpbmVyKHBvcywgY2FyZXQpKSB7XG4gICAgICAgIHJlbW92ZSQzKGNhcmV0LmdldCgpKTtcbiAgICAgICAgY29uc3QgdGV4dCA9IGluc2VydElubGluZVBvcyhwb3MsIGZhbHNlKTtcbiAgICAgICAgY2FyZXQuc2V0KHRleHQpO1xuICAgICAgICByZXR1cm4gQ2FyZXRQb3NpdGlvbih0ZXh0LCB0ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGNhcmV0LmdldCgpO1xuICAgICAgICByZXR1cm4gQ2FyZXRQb3NpdGlvbihub2RlLCBub2RlLmxlbmd0aCAtIDEpO1xuICAgICAgfVxuICAgIH0pLCBlbGVtZW50ID0+IHtcbiAgICAgIHJlbW92ZSQzKGNhcmV0LmdldCgpKTtcbiAgICAgIGNvbnN0IHRleHQgPSBpbnNlcnRJbmxpbmVBZnRlcihlbGVtZW50KTtcbiAgICAgIGNhcmV0LnNldCh0ZXh0KTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKENhcmV0UG9zaXRpb24odGV4dCwgMSkpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZXZhbHVhdGVVbnRpbCA9IChmbnMsIGFyZ3MpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZuc1tpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc1NvbWUoKSkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IExvY2F0aW9uID0gQWR0LmdlbmVyYXRlKFtcbiAgICAgIHsgYmVmb3JlOiBbJ2VsZW1lbnQnXSB9LFxuICAgICAgeyBzdGFydDogWydlbGVtZW50J10gfSxcbiAgICAgIHsgZW5kOiBbJ2VsZW1lbnQnXSB9LFxuICAgICAgeyBhZnRlcjogWydlbGVtZW50J10gfVxuICAgIF0pO1xuICAgIGNvbnN0IHJlc2NvcGUkMSA9IChyb290Tm9kZSwgbm9kZSkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50QmxvY2sgPSBnZXRQYXJlbnRCbG9jayQzKG5vZGUsIHJvb3ROb2RlKTtcbiAgICAgIHJldHVybiBwYXJlbnRCbG9jayA/IHBhcmVudEJsb2NrIDogcm9vdE5vZGU7XG4gICAgfTtcbiAgICBjb25zdCBiZWZvcmUgPSAoaXNJbmxpbmVUYXJnZXQsIHJvb3ROb2RlLCBwb3MpID0+IHtcbiAgICAgIGNvbnN0IG5Qb3MgPSBub3JtYWxpemVGb3J3YXJkcyhwb3MpO1xuICAgICAgY29uc3Qgc2NvcGUgPSByZXNjb3BlJDEocm9vdE5vZGUsIG5Qb3MuY29udGFpbmVyKCkpO1xuICAgICAgcmV0dXJuIGZpbmRSb290SW5saW5lKGlzSW5saW5lVGFyZ2V0LCBzY29wZSwgblBvcykuZm9sZCgoKSA9PiBuZXh0UG9zaXRpb24oc2NvcGUsIG5Qb3MpLmJpbmQoY3VycnkoZmluZFJvb3RJbmxpbmUsIGlzSW5saW5lVGFyZ2V0LCBzY29wZSkpLm1hcChpbmxpbmUgPT4gTG9jYXRpb24uYmVmb3JlKGlubGluZSkpLCBPcHRpb25hbC5ub25lKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzTm90SW5zaWRlRm9ybWF0Q2FyZXRDb250YWluZXIgPSAocm9vdE5vZGUsIGVsbSkgPT4gZ2V0UGFyZW50Q2FyZXRDb250YWluZXIocm9vdE5vZGUsIGVsbSkgPT09IG51bGw7XG4gICAgY29uc3QgZmluZEluc2lkZVJvb3RJbmxpbmUgPSAoaXNJbmxpbmVUYXJnZXQsIHJvb3ROb2RlLCBwb3MpID0+IGZpbmRSb290SW5saW5lKGlzSW5saW5lVGFyZ2V0LCByb290Tm9kZSwgcG9zKS5maWx0ZXIoY3VycnkoaXNOb3RJbnNpZGVGb3JtYXRDYXJldENvbnRhaW5lciwgcm9vdE5vZGUpKTtcbiAgICBjb25zdCBzdGFydCQxID0gKGlzSW5saW5lVGFyZ2V0LCByb290Tm9kZSwgcG9zKSA9PiB7XG4gICAgICBjb25zdCBuUG9zID0gbm9ybWFsaXplQmFja3dhcmRzKHBvcyk7XG4gICAgICByZXR1cm4gZmluZEluc2lkZVJvb3RJbmxpbmUoaXNJbmxpbmVUYXJnZXQsIHJvb3ROb2RlLCBuUG9zKS5iaW5kKGlubGluZSA9PiB7XG4gICAgICAgIGNvbnN0IHByZXZQb3MgPSBwcmV2UG9zaXRpb24oaW5saW5lLCBuUG9zKTtcbiAgICAgICAgcmV0dXJuIHByZXZQb3MuaXNOb25lKCkgPyBPcHRpb25hbC5zb21lKExvY2F0aW9uLnN0YXJ0KGlubGluZSkpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBlbmQgPSAoaXNJbmxpbmVUYXJnZXQsIHJvb3ROb2RlLCBwb3MpID0+IHtcbiAgICAgIGNvbnN0IG5Qb3MgPSBub3JtYWxpemVGb3J3YXJkcyhwb3MpO1xuICAgICAgcmV0dXJuIGZpbmRJbnNpZGVSb290SW5saW5lKGlzSW5saW5lVGFyZ2V0LCByb290Tm9kZSwgblBvcykuYmluZChpbmxpbmUgPT4ge1xuICAgICAgICBjb25zdCBuZXh0UG9zID0gbmV4dFBvc2l0aW9uKGlubGluZSwgblBvcyk7XG4gICAgICAgIHJldHVybiBuZXh0UG9zLmlzTm9uZSgpID8gT3B0aW9uYWwuc29tZShMb2NhdGlvbi5lbmQoaW5saW5lKSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFmdGVyID0gKGlzSW5saW5lVGFyZ2V0LCByb290Tm9kZSwgcG9zKSA9PiB7XG4gICAgICBjb25zdCBuUG9zID0gbm9ybWFsaXplQmFja3dhcmRzKHBvcyk7XG4gICAgICBjb25zdCBzY29wZSA9IHJlc2NvcGUkMShyb290Tm9kZSwgblBvcy5jb250YWluZXIoKSk7XG4gICAgICByZXR1cm4gZmluZFJvb3RJbmxpbmUoaXNJbmxpbmVUYXJnZXQsIHNjb3BlLCBuUG9zKS5mb2xkKCgpID0+IHByZXZQb3NpdGlvbihzY29wZSwgblBvcykuYmluZChjdXJyeShmaW5kUm9vdElubGluZSwgaXNJbmxpbmVUYXJnZXQsIHNjb3BlKSkubWFwKGlubGluZSA9PiBMb2NhdGlvbi5hZnRlcihpbmxpbmUpKSwgT3B0aW9uYWwubm9uZSk7XG4gICAgfTtcbiAgICBjb25zdCBpc1ZhbGlkTG9jYXRpb24gPSBsb2NhdGlvbiA9PiAhaXNSdGwoZ2V0RWxlbWVudChsb2NhdGlvbikpO1xuICAgIGNvbnN0IHJlYWRMb2NhdGlvbiA9IChpc0lubGluZVRhcmdldCwgcm9vdE5vZGUsIHBvcykgPT4ge1xuICAgICAgY29uc3QgbG9jYXRpb24gPSBldmFsdWF0ZVVudGlsKFtcbiAgICAgICAgYmVmb3JlLFxuICAgICAgICBzdGFydCQxLFxuICAgICAgICBlbmQsXG4gICAgICAgIGFmdGVyXG4gICAgICBdLCBbXG4gICAgICAgIGlzSW5saW5lVGFyZ2V0LFxuICAgICAgICByb290Tm9kZSxcbiAgICAgICAgcG9zXG4gICAgICBdKTtcbiAgICAgIHJldHVybiBsb2NhdGlvbi5maWx0ZXIoaXNWYWxpZExvY2F0aW9uKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEVsZW1lbnQgPSBsb2NhdGlvbiA9PiBsb2NhdGlvbi5mb2xkKGlkZW50aXR5LCBpZGVudGl0eSwgaWRlbnRpdHksIGlkZW50aXR5KTtcbiAgICBjb25zdCBnZXROYW1lID0gbG9jYXRpb24gPT4gbG9jYXRpb24uZm9sZChjb25zdGFudCgnYmVmb3JlJyksIGNvbnN0YW50KCdzdGFydCcpLCBjb25zdGFudCgnZW5kJyksIGNvbnN0YW50KCdhZnRlcicpKTtcbiAgICBjb25zdCBvdXRzaWRlID0gbG9jYXRpb24gPT4gbG9jYXRpb24uZm9sZChMb2NhdGlvbi5iZWZvcmUsIExvY2F0aW9uLmJlZm9yZSwgTG9jYXRpb24uYWZ0ZXIsIExvY2F0aW9uLmFmdGVyKTtcbiAgICBjb25zdCBpbnNpZGUgPSBsb2NhdGlvbiA9PiBsb2NhdGlvbi5mb2xkKExvY2F0aW9uLnN0YXJ0LCBMb2NhdGlvbi5zdGFydCwgTG9jYXRpb24uZW5kLCBMb2NhdGlvbi5lbmQpO1xuICAgIGNvbnN0IGlzRXEgPSAobG9jYXRpb24xLCBsb2NhdGlvbjIpID0+IGdldE5hbWUobG9jYXRpb24xKSA9PT0gZ2V0TmFtZShsb2NhdGlvbjIpICYmIGdldEVsZW1lbnQobG9jYXRpb24xKSA9PT0gZ2V0RWxlbWVudChsb2NhdGlvbjIpO1xuICAgIGNvbnN0IGJldHdlZW5JbmxpbmVzID0gKGZvcndhcmQsIGlzSW5saW5lVGFyZ2V0LCByb290Tm9kZSwgZnJvbSwgdG8sIGxvY2F0aW9uKSA9PiBsaWZ0MihmaW5kUm9vdElubGluZShpc0lubGluZVRhcmdldCwgcm9vdE5vZGUsIGZyb20pLCBmaW5kUm9vdElubGluZShpc0lubGluZVRhcmdldCwgcm9vdE5vZGUsIHRvKSwgKGZyb21JbmxpbmUsIHRvSW5saW5lKSA9PiB7XG4gICAgICBpZiAoZnJvbUlubGluZSAhPT0gdG9JbmxpbmUgJiYgaGFzU2FtZVBhcmVudEJsb2NrKHJvb3ROb2RlLCBmcm9tSW5saW5lLCB0b0lubGluZSkpIHtcbiAgICAgICAgcmV0dXJuIExvY2F0aW9uLmFmdGVyKGZvcndhcmQgPyBmcm9tSW5saW5lIDogdG9JbmxpbmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgICAgfVxuICAgIH0pLmdldE9yKGxvY2F0aW9uKTtcbiAgICBjb25zdCBza2lwTm9Nb3ZlbWVudCA9IChmcm9tTG9jYXRpb24sIHRvTG9jYXRpb24pID0+IGZyb21Mb2NhdGlvbi5mb2xkKGFsd2F5cywgZnJvbUxvY2F0aW9uID0+ICFpc0VxKGZyb21Mb2NhdGlvbiwgdG9Mb2NhdGlvbikpO1xuICAgIGNvbnN0IGZpbmRMb2NhdGlvblRyYXZlcnNlID0gKGZvcndhcmQsIGlzSW5saW5lVGFyZ2V0LCByb290Tm9kZSwgZnJvbUxvY2F0aW9uLCBwb3MpID0+IHtcbiAgICAgIGNvbnN0IGZyb20gPSBub3JtYWxpemVQb3NpdGlvbihmb3J3YXJkLCBwb3MpO1xuICAgICAgY29uc3QgdG8gPSBmcm9tUG9zaXRpb24oZm9yd2FyZCwgcm9vdE5vZGUsIGZyb20pLm1hcChjdXJyeShub3JtYWxpemVQb3NpdGlvbiwgZm9yd2FyZCkpO1xuICAgICAgY29uc3QgbG9jYXRpb24gPSB0by5mb2xkKCgpID0+IGZyb21Mb2NhdGlvbi5tYXAob3V0c2lkZSksIHRvID0+IHJlYWRMb2NhdGlvbihpc0lubGluZVRhcmdldCwgcm9vdE5vZGUsIHRvKS5tYXAoY3VycnkoYmV0d2VlbklubGluZXMsIGZvcndhcmQsIGlzSW5saW5lVGFyZ2V0LCByb290Tm9kZSwgZnJvbSwgdG8pKS5maWx0ZXIoY3Vycnkoc2tpcE5vTW92ZW1lbnQsIGZyb21Mb2NhdGlvbikpKTtcbiAgICAgIHJldHVybiBsb2NhdGlvbi5maWx0ZXIoaXNWYWxpZExvY2F0aW9uKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRMb2NhdGlvblNpbXBsZSA9IChmb3J3YXJkLCBsb2NhdGlvbikgPT4ge1xuICAgICAgaWYgKGZvcndhcmQpIHtcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uLmZvbGQoY29tcG9zZShPcHRpb25hbC5zb21lLCBMb2NhdGlvbi5zdGFydCksIE9wdGlvbmFsLm5vbmUsIGNvbXBvc2UoT3B0aW9uYWwuc29tZSwgTG9jYXRpb24uYWZ0ZXIpLCBPcHRpb25hbC5ub25lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBsb2NhdGlvbi5mb2xkKE9wdGlvbmFsLm5vbmUsIGNvbXBvc2UoT3B0aW9uYWwuc29tZSwgTG9jYXRpb24uYmVmb3JlKSwgT3B0aW9uYWwubm9uZSwgY29tcG9zZShPcHRpb25hbC5zb21lLCBMb2NhdGlvbi5lbmQpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRMb2NhdGlvbiQxID0gKGZvcndhcmQsIGlzSW5saW5lVGFyZ2V0LCByb290Tm9kZSwgcG9zKSA9PiB7XG4gICAgICBjb25zdCBmcm9tID0gbm9ybWFsaXplUG9zaXRpb24oZm9yd2FyZCwgcG9zKTtcbiAgICAgIGNvbnN0IGZyb21Mb2NhdGlvbiA9IHJlYWRMb2NhdGlvbihpc0lubGluZVRhcmdldCwgcm9vdE5vZGUsIGZyb20pO1xuICAgICAgcmV0dXJuIHJlYWRMb2NhdGlvbihpc0lubGluZVRhcmdldCwgcm9vdE5vZGUsIGZyb20pLmJpbmQoY3VycnkoZmluZExvY2F0aW9uU2ltcGxlLCBmb3J3YXJkKSkub3JUaHVuaygoKSA9PiBmaW5kTG9jYXRpb25UcmF2ZXJzZShmb3J3YXJkLCBpc0lubGluZVRhcmdldCwgcm9vdE5vZGUsIGZyb21Mb2NhdGlvbiwgcG9zKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhc1NlbGVjdGlvbk1vZGlmeUFwaSA9IGVkaXRvciA9PiB7XG4gICAgICByZXR1cm4gaXNGdW5jdGlvbihlZGl0b3Iuc2VsZWN0aW9uLmdldFNlbCgpLm1vZGlmeSk7XG4gICAgfTtcbiAgICBjb25zdCBtb3ZlUmVsID0gKGZvcndhcmQsIHNlbGVjdGlvbiwgcG9zKSA9PiB7XG4gICAgICBjb25zdCBkZWx0YSA9IGZvcndhcmQgPyAxIDogLTE7XG4gICAgICBzZWxlY3Rpb24uc2V0Um5nKENhcmV0UG9zaXRpb24ocG9zLmNvbnRhaW5lcigpLCBwb3Mub2Zmc2V0KCkgKyBkZWx0YSkudG9SYW5nZSgpKTtcbiAgICAgIHNlbGVjdGlvbi5nZXRTZWwoKS5tb2RpZnkoJ21vdmUnLCBmb3J3YXJkID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJywgJ3dvcmQnKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgY29uc3QgbW92ZUJ5V29yZCA9IChmb3J3YXJkLCBlZGl0b3IpID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBjb25zdCBwb3MgPSBmb3J3YXJkID8gQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VFbmQocm5nKSA6IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQocm5nKTtcbiAgICAgIGlmICghaGFzU2VsZWN0aW9uTW9kaWZ5QXBpKGVkaXRvcikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChmb3J3YXJkICYmIGlzQmVmb3JlSW5saW5lKHBvcykpIHtcbiAgICAgICAgcmV0dXJuIG1vdmVSZWwodHJ1ZSwgZWRpdG9yLnNlbGVjdGlvbiwgcG9zKTtcbiAgICAgIH0gZWxzZSBpZiAoIWZvcndhcmQgJiYgaXNBZnRlcklubGluZShwb3MpKSB7XG4gICAgICAgIHJldHVybiBtb3ZlUmVsKGZhbHNlLCBlZGl0b3Iuc2VsZWN0aW9uLCBwb3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgQnJlYWtUeXBlO1xuICAgIChmdW5jdGlvbiAoQnJlYWtUeXBlKSB7XG4gICAgICBCcmVha1R5cGVbQnJlYWtUeXBlWydCciddID0gMF0gPSAnQnInO1xuICAgICAgQnJlYWtUeXBlW0JyZWFrVHlwZVsnQmxvY2snXSA9IDFdID0gJ0Jsb2NrJztcbiAgICAgIEJyZWFrVHlwZVtCcmVha1R5cGVbJ1dyYXAnXSA9IDJdID0gJ1dyYXAnO1xuICAgICAgQnJlYWtUeXBlW0JyZWFrVHlwZVsnRW9sJ10gPSAzXSA9ICdFb2wnO1xuICAgIH0oQnJlYWtUeXBlIHx8IChCcmVha1R5cGUgPSB7fSkpKTtcbiAgICBjb25zdCBmbGlwID0gKGRpcmVjdGlvbiwgcG9zaXRpb25zKSA9PiBkaXJlY3Rpb24gPT09IEhEaXJlY3Rpb24uQmFja3dhcmRzID8gcmV2ZXJzZShwb3NpdGlvbnMpIDogcG9zaXRpb25zO1xuICAgIGNvbnN0IHdhbGskMSA9IChkaXJlY3Rpb24sIGNhcmV0V2Fsa2VyLCBwb3MpID0+IGRpcmVjdGlvbiA9PT0gSERpcmVjdGlvbi5Gb3J3YXJkcyA/IGNhcmV0V2Fsa2VyLm5leHQocG9zKSA6IGNhcmV0V2Fsa2VyLnByZXYocG9zKTtcbiAgICBjb25zdCBnZXRCcmVha1R5cGUgPSAoc2NvcGUsIGRpcmVjdGlvbiwgY3VycmVudFBvcywgbmV4dFBvcykgPT4ge1xuICAgICAgaWYgKGlzQnIkNihuZXh0UG9zLmdldE5vZGUoZGlyZWN0aW9uID09PSBIRGlyZWN0aW9uLkZvcndhcmRzKSkpIHtcbiAgICAgICAgcmV0dXJuIEJyZWFrVHlwZS5CcjtcbiAgICAgIH0gZWxzZSBpZiAoaXNJblNhbWVCbG9jayhjdXJyZW50UG9zLCBuZXh0UG9zKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIEJyZWFrVHlwZS5CbG9jaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBCcmVha1R5cGUuV3JhcDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdldFBvc2l0aW9uc1VudGlsID0gKHByZWRpY2F0ZSwgZGlyZWN0aW9uLCBzY29wZSwgc3RhcnQpID0+IHtcbiAgICAgIGNvbnN0IGNhcmV0V2Fsa2VyID0gQ2FyZXRXYWxrZXIoc2NvcGUpO1xuICAgICAgbGV0IGN1cnJlbnRQb3MgPSBzdGFydDtcbiAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IFtdO1xuICAgICAgd2hpbGUgKGN1cnJlbnRQb3MpIHtcbiAgICAgICAgY29uc3QgbmV4dFBvcyA9IHdhbGskMShkaXJlY3Rpb24sIGNhcmV0V2Fsa2VyLCBjdXJyZW50UG9zKTtcbiAgICAgICAgaWYgKCFuZXh0UG9zKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQnIkNihuZXh0UG9zLmdldE5vZGUoZmFsc2UpKSkge1xuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IEhEaXJlY3Rpb24uRm9yd2FyZHMpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHBvc2l0aW9uczogZmxpcChkaXJlY3Rpb24sIHBvc2l0aW9ucykuY29uY2F0KFtuZXh0UG9zXSksXG4gICAgICAgICAgICAgIGJyZWFrVHlwZTogQnJlYWtUeXBlLkJyLFxuICAgICAgICAgICAgICBicmVha0F0OiBPcHRpb25hbC5zb21lKG5leHRQb3MpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBwb3NpdGlvbnM6IGZsaXAoZGlyZWN0aW9uLCBwb3NpdGlvbnMpLFxuICAgICAgICAgICAgICBicmVha1R5cGU6IEJyZWFrVHlwZS5CcixcbiAgICAgICAgICAgICAgYnJlYWtBdDogT3B0aW9uYWwuc29tZShuZXh0UG9zKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFuZXh0UG9zLmlzVmlzaWJsZSgpKSB7XG4gICAgICAgICAgY3VycmVudFBvcyA9IG5leHRQb3M7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZWRpY2F0ZShjdXJyZW50UG9zLCBuZXh0UG9zKSkge1xuICAgICAgICAgIGNvbnN0IGJyZWFrVHlwZSA9IGdldEJyZWFrVHlwZShzY29wZSwgZGlyZWN0aW9uLCBjdXJyZW50UG9zLCBuZXh0UG9zKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcG9zaXRpb25zOiBmbGlwKGRpcmVjdGlvbiwgcG9zaXRpb25zKSxcbiAgICAgICAgICAgIGJyZWFrVHlwZSxcbiAgICAgICAgICAgIGJyZWFrQXQ6IE9wdGlvbmFsLnNvbWUobmV4dFBvcylcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHBvc2l0aW9ucy5wdXNoKG5leHRQb3MpO1xuICAgICAgICBjdXJyZW50UG9zID0gbmV4dFBvcztcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBvc2l0aW9uczogZmxpcChkaXJlY3Rpb24sIHBvc2l0aW9ucyksXG4gICAgICAgIGJyZWFrVHlwZTogQnJlYWtUeXBlLkVvbCxcbiAgICAgICAgYnJlYWtBdDogT3B0aW9uYWwubm9uZSgpXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZ2V0QWRqYWNlbnRMaW5lUG9zaXRpb25zID0gKGRpcmVjdGlvbiwgZ2V0UG9zaXRpb25zVW50aWxCcmVhaywgc2NvcGUsIHN0YXJ0KSA9PiBnZXRQb3NpdGlvbnNVbnRpbEJyZWFrKHNjb3BlLCBzdGFydCkuYnJlYWtBdC5tYXAocG9zID0+IHtcbiAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IGdldFBvc2l0aW9uc1VudGlsQnJlYWsoc2NvcGUsIHBvcykucG9zaXRpb25zO1xuICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gSERpcmVjdGlvbi5CYWNrd2FyZHMgPyBwb3NpdGlvbnMuY29uY2F0KHBvcykgOiBbcG9zXS5jb25jYXQocG9zaXRpb25zKTtcbiAgICB9KS5nZXRPcihbXSk7XG4gICAgY29uc3QgZmluZENsb3Nlc3RIb3Jpem9udGFsUG9zaXRpb25Gcm9tUG9pbnQgPSAocG9zaXRpb25zLCB4KSA9PiBmb2xkbChwb3NpdGlvbnMsIChhY2MsIG5ld1BvcykgPT4gYWNjLmZvbGQoKCkgPT4gT3B0aW9uYWwuc29tZShuZXdQb3MpLCBsYXN0UG9zID0+IGxpZnQyKGhlYWQobGFzdFBvcy5nZXRDbGllbnRSZWN0cygpKSwgaGVhZChuZXdQb3MuZ2V0Q2xpZW50UmVjdHMoKSksIChsYXN0UmVjdCwgbmV3UmVjdCkgPT4ge1xuICAgICAgY29uc3QgbGFzdERpc3QgPSBNYXRoLmFicyh4IC0gbGFzdFJlY3QubGVmdCk7XG4gICAgICBjb25zdCBuZXdEaXN0ID0gTWF0aC5hYnMoeCAtIG5ld1JlY3QubGVmdCk7XG4gICAgICByZXR1cm4gbmV3RGlzdCA8PSBsYXN0RGlzdCA/IG5ld1BvcyA6IGxhc3RQb3M7XG4gICAgfSkub3IoYWNjKSksIE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgY29uc3QgZmluZENsb3Nlc3RIb3Jpem9udGFsUG9zaXRpb24gPSAocG9zaXRpb25zLCBwb3MpID0+IGhlYWQocG9zLmdldENsaWVudFJlY3RzKCkpLmJpbmQodGFyZ2V0UmVjdCA9PiBmaW5kQ2xvc2VzdEhvcml6b250YWxQb3NpdGlvbkZyb21Qb2ludChwb3NpdGlvbnMsIHRhcmdldFJlY3QubGVmdCkpO1xuICAgIGNvbnN0IGdldFBvc2l0aW9uc1VudGlsUHJldmlvdXNMaW5lID0gY3VycnkoZ2V0UG9zaXRpb25zVW50aWwsIENhcmV0UG9zaXRpb24uaXNBYm92ZSwgLTEpO1xuICAgIGNvbnN0IGdldFBvc2l0aW9uc1VudGlsTmV4dExpbmUgPSBjdXJyeShnZXRQb3NpdGlvbnNVbnRpbCwgQ2FyZXRQb3NpdGlvbi5pc0JlbG93LCAxKTtcbiAgICBjb25zdCBnZXRQb3NpdGlvbnNBYm92ZSA9IGN1cnJ5KGdldEFkamFjZW50TGluZVBvc2l0aW9ucywgLTEsIGdldFBvc2l0aW9uc1VudGlsUHJldmlvdXNMaW5lKTtcbiAgICBjb25zdCBnZXRQb3NpdGlvbnNCZWxvdyA9IGN1cnJ5KGdldEFkamFjZW50TGluZVBvc2l0aW9ucywgMSwgZ2V0UG9zaXRpb25zVW50aWxOZXh0TGluZSk7XG4gICAgY29uc3QgaXNBdEZpcnN0TGluZSA9IChzY29wZSwgcG9zKSA9PiBnZXRQb3NpdGlvbnNVbnRpbFByZXZpb3VzTGluZShzY29wZSwgcG9zKS5icmVha0F0LmlzTm9uZSgpO1xuICAgIGNvbnN0IGlzQXRMYXN0TGluZSA9IChzY29wZSwgcG9zKSA9PiBnZXRQb3NpdGlvbnNVbnRpbE5leHRMaW5lKHNjb3BlLCBwb3MpLmJyZWFrQXQuaXNOb25lKCk7XG4gICAgY29uc3QgZ2V0Rmlyc3RMaW5lUG9zaXRpb25zID0gc2NvcGUgPT4gZmlyc3RQb3NpdGlvbkluKHNjb3BlKS5tYXAocG9zID0+IFtwb3NdLmNvbmNhdChnZXRQb3NpdGlvbnNVbnRpbE5leHRMaW5lKHNjb3BlLCBwb3MpLnBvc2l0aW9ucykpLmdldE9yKFtdKTtcbiAgICBjb25zdCBnZXRMYXN0TGluZVBvc2l0aW9ucyA9IHNjb3BlID0+IGxhc3RQb3NpdGlvbkluKHNjb3BlKS5tYXAocG9zID0+IGdldFBvc2l0aW9uc1VudGlsUHJldmlvdXNMaW5lKHNjb3BlLCBwb3MpLnBvc2l0aW9ucy5jb25jYXQocG9zKSkuZ2V0T3IoW10pO1xuICAgIGNvbnN0IGdldENsb3Nlc3RQb3NpdGlvbkFib3ZlID0gKHNjb3BlLCBwb3MpID0+IGZpbmRDbG9zZXN0SG9yaXpvbnRhbFBvc2l0aW9uKGdldFBvc2l0aW9uc0Fib3ZlKHNjb3BlLCBwb3MpLCBwb3MpO1xuICAgIGNvbnN0IGdldENsb3Nlc3RQb3NpdGlvbkJlbG93ID0gKHNjb3BlLCBwb3MpID0+IGZpbmRDbG9zZXN0SG9yaXpvbnRhbFBvc2l0aW9uKGdldFBvc2l0aW9uc0JlbG93KHNjb3BlLCBwb3MpLCBwb3MpO1xuXG4gICAgY29uc3QgaXNDb250ZW50RWRpdGFibGVGYWxzZSQ0ID0gaXNDb250ZW50RWRpdGFibGVGYWxzZSRiO1xuICAgIGNvbnN0IGRpc3RhbmNlVG9SZWN0TGVmdCQxID0gKGNsaWVudFJlY3QsIGNsaWVudFgpID0+IE1hdGguYWJzKGNsaWVudFJlY3QubGVmdCAtIGNsaWVudFgpO1xuICAgIGNvbnN0IGRpc3RhbmNlVG9SZWN0UmlnaHQkMSA9IChjbGllbnRSZWN0LCBjbGllbnRYKSA9PiBNYXRoLmFicyhjbGllbnRSZWN0LnJpZ2h0IC0gY2xpZW50WCk7XG4gICAgY29uc3QgaXNOb2RlQ2xpZW50UmVjdCA9IHJlY3QgPT4gaGFzTm9uTnVsbGFibGVLZXkocmVjdCwgJ25vZGUnKTtcbiAgICBjb25zdCBmaW5kQ2xvc2VzdENsaWVudFJlY3QgPSAoY2xpZW50UmVjdHMsIGNsaWVudFgpID0+IHJlZHVjZShjbGllbnRSZWN0cywgKG9sZENsaWVudFJlY3QsIGNsaWVudFJlY3QpID0+IHtcbiAgICAgIGNvbnN0IG9sZERpc3RhbmNlID0gTWF0aC5taW4oZGlzdGFuY2VUb1JlY3RMZWZ0JDEob2xkQ2xpZW50UmVjdCwgY2xpZW50WCksIGRpc3RhbmNlVG9SZWN0UmlnaHQkMShvbGRDbGllbnRSZWN0LCBjbGllbnRYKSk7XG4gICAgICBjb25zdCBuZXdEaXN0YW5jZSA9IE1hdGgubWluKGRpc3RhbmNlVG9SZWN0TGVmdCQxKGNsaWVudFJlY3QsIGNsaWVudFgpLCBkaXN0YW5jZVRvUmVjdFJpZ2h0JDEoY2xpZW50UmVjdCwgY2xpZW50WCkpO1xuICAgICAgaWYgKG5ld0Rpc3RhbmNlID09PSBvbGREaXN0YW5jZSAmJiBpc05vZGVDbGllbnRSZWN0KGNsaWVudFJlY3QpICYmIGlzQ29udGVudEVkaXRhYmxlRmFsc2UkNChjbGllbnRSZWN0Lm5vZGUpKSB7XG4gICAgICAgIHJldHVybiBjbGllbnRSZWN0O1xuICAgICAgfVxuICAgICAgaWYgKG5ld0Rpc3RhbmNlIDwgb2xkRGlzdGFuY2UpIHtcbiAgICAgICAgcmV0dXJuIGNsaWVudFJlY3Q7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2xkQ2xpZW50UmVjdDtcbiAgICB9KTtcblxuICAgIGNvbnN0IGdldE5vZGVDbGllbnRSZWN0cyA9IG5vZGUgPT4ge1xuICAgICAgY29uc3QgdG9BcnJheVdpdGhOb2RlID0gY2xpZW50UmVjdHMgPT4ge1xuICAgICAgICByZXR1cm4gbWFwJDMoY2xpZW50UmVjdHMsIHJlY3QgPT4ge1xuICAgICAgICAgIGNvbnN0IGNsaWVudFJlY3QgPSBjbG9uZSQxKHJlY3QpO1xuICAgICAgICAgIGNsaWVudFJlY3Qubm9kZSA9IG5vZGU7XG4gICAgICAgICAgcmV0dXJuIGNsaWVudFJlY3Q7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGlmIChpc0VsZW1lbnQkNihub2RlKSkge1xuICAgICAgICByZXR1cm4gdG9BcnJheVdpdGhOb2RlKG5vZGUuZ2V0Q2xpZW50UmVjdHMoKSk7XG4gICAgICB9IGVsc2UgaWYgKGlzVGV4dCRhKG5vZGUpKSB7XG4gICAgICAgIGNvbnN0IHJuZyA9IG5vZGUub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICBybmcuc2V0U3RhcnQobm9kZSwgMCk7XG4gICAgICAgIHJuZy5zZXRFbmQobm9kZSwgbm9kZS5kYXRhLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiB0b0FycmF5V2l0aE5vZGUocm5nLmdldENsaWVudFJlY3RzKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ2V0Q2xpZW50UmVjdHMgPSBub2RlcyA9PiBiaW5kJDMobm9kZXMsIGdldE5vZGVDbGllbnRSZWN0cyk7XG5cbiAgICB2YXIgVkRpcmVjdGlvbjtcbiAgICAoZnVuY3Rpb24gKFZEaXJlY3Rpb24pIHtcbiAgICAgIFZEaXJlY3Rpb25bVkRpcmVjdGlvblsnVXAnXSA9IC0xXSA9ICdVcCc7XG4gICAgICBWRGlyZWN0aW9uW1ZEaXJlY3Rpb25bJ0Rvd24nXSA9IDFdID0gJ0Rvd24nO1xuICAgIH0oVkRpcmVjdGlvbiB8fCAoVkRpcmVjdGlvbiA9IHt9KSkpO1xuICAgIGNvbnN0IGZpbmRVbnRpbCA9IChkaXJlY3Rpb24sIHJvb3QsIHByZWRpY2F0ZUZuLCBub2RlKSA9PiB7XG4gICAgICBsZXQgY3VycmVudE5vZGUgPSBub2RlO1xuICAgICAgd2hpbGUgKGN1cnJlbnROb2RlID0gZmluZE5vZGUoY3VycmVudE5vZGUsIGRpcmVjdGlvbiwgaXNFZGl0YWJsZUNhcmV0Q2FuZGlkYXRlJDEsIHJvb3QpKSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGVGbihjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHdhbGtVbnRpbCA9IChkaXJlY3Rpb24sIGlzQWJvdmVGbiwgaXNCZWZsb3dGbiwgcm9vdCwgcHJlZGljYXRlRm4sIGNhcmV0UG9zaXRpb24pID0+IHtcbiAgICAgIGxldCBsaW5lID0gMDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgY29uc3QgYWRkID0gbm9kZSA9PiB7XG4gICAgICAgIGxldCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzKFtub2RlXSk7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09IC0xKSB7XG4gICAgICAgICAgY2xpZW50UmVjdHMgPSBjbGllbnRSZWN0cy5yZXZlcnNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGllbnRSZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGNsaWVudFJlY3QgPSBjbGllbnRSZWN0c1tpXTtcbiAgICAgICAgICBpZiAoaXNCZWZsb3dGbihjbGllbnRSZWN0LCB0YXJnZXRDbGllbnRSZWN0KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCAmJiBpc0Fib3ZlRm4oY2xpZW50UmVjdCwgbGFzdCQyKHJlc3VsdCkpKSB7XG4gICAgICAgICAgICBsaW5lKys7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNsaWVudFJlY3QubGluZSA9IGxpbmU7XG4gICAgICAgICAgaWYgKHByZWRpY2F0ZUZuKGNsaWVudFJlY3QpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0LnB1c2goY2xpZW50UmVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHRhcmdldENsaWVudFJlY3QgPSBsYXN0JDIoY2FyZXRQb3NpdGlvbi5nZXRDbGllbnRSZWN0cygpKTtcbiAgICAgIGlmICghdGFyZ2V0Q2xpZW50UmVjdCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgY29uc3Qgbm9kZSA9IGNhcmV0UG9zaXRpb24uZ2V0Tm9kZSgpO1xuICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgYWRkKG5vZGUpO1xuICAgICAgICBmaW5kVW50aWwoZGlyZWN0aW9uLCByb290LCBhZGQsIG5vZGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIGNvbnN0IGFib3ZlTGluZU51bWJlciA9IChsaW5lTnVtYmVyLCBjbGllbnRSZWN0KSA9PiBjbGllbnRSZWN0LmxpbmUgPiBsaW5lTnVtYmVyO1xuICAgIGNvbnN0IGlzTGluZU51bWJlciA9IChsaW5lTnVtYmVyLCBjbGllbnRSZWN0KSA9PiBjbGllbnRSZWN0LmxpbmUgPT09IGxpbmVOdW1iZXI7XG4gICAgY29uc3QgdXBVbnRpbCA9IGN1cnJ5KHdhbGtVbnRpbCwgVkRpcmVjdGlvbi5VcCwgaXNBYm92ZSQxLCBpc0JlbG93JDEpO1xuICAgIGNvbnN0IGRvd25VbnRpbCA9IGN1cnJ5KHdhbGtVbnRpbCwgVkRpcmVjdGlvbi5Eb3duLCBpc0JlbG93JDEsIGlzQWJvdmUkMSk7XG4gICAgY29uc3QgZ2V0TGFzdENsaWVudFJlY3QgPSBjYXJldFBvc2l0aW9uID0+IHtcbiAgICAgIHJldHVybiBsYXN0JDIoY2FyZXRQb3NpdGlvbi5nZXRDbGllbnRSZWN0cygpKTtcbiAgICB9O1xuICAgIGNvbnN0IHBvc2l0aW9uc1VudGlsID0gKGRpcmVjdGlvbiwgcm9vdCwgcHJlZGljYXRlRm4sIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IGNhcmV0V2Fsa2VyID0gQ2FyZXRXYWxrZXIocm9vdCk7XG4gICAgICBsZXQgd2Fsa0ZuO1xuICAgICAgbGV0IGlzQmVsb3dGbjtcbiAgICAgIGxldCBpc0Fib3ZlRm47XG4gICAgICBsZXQgY2FyZXRQb3NpdGlvbjtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgbGV0IGxpbmUgPSAwO1xuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gMSkge1xuICAgICAgICB3YWxrRm4gPSBjYXJldFdhbGtlci5uZXh0O1xuICAgICAgICBpc0JlbG93Rm4gPSBpc0JlbG93JDE7XG4gICAgICAgIGlzQWJvdmVGbiA9IGlzQWJvdmUkMTtcbiAgICAgICAgY2FyZXRQb3NpdGlvbiA9IENhcmV0UG9zaXRpb24uYWZ0ZXIobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YWxrRm4gPSBjYXJldFdhbGtlci5wcmV2O1xuICAgICAgICBpc0JlbG93Rm4gPSBpc0Fib3ZlJDE7XG4gICAgICAgIGlzQWJvdmVGbiA9IGlzQmVsb3ckMTtcbiAgICAgICAgY2FyZXRQb3NpdGlvbiA9IENhcmV0UG9zaXRpb24uYmVmb3JlKG5vZGUpO1xuICAgICAgfVxuICAgICAgY29uc3QgdGFyZ2V0Q2xpZW50UmVjdCA9IGdldExhc3RDbGllbnRSZWN0KGNhcmV0UG9zaXRpb24pO1xuICAgICAgZG8ge1xuICAgICAgICBpZiAoIWNhcmV0UG9zaXRpb24uaXNWaXNpYmxlKCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWN0ID0gZ2V0TGFzdENsaWVudFJlY3QoY2FyZXRQb3NpdGlvbik7XG4gICAgICAgIGlmIChpc0Fib3ZlRm4ocmVjdCwgdGFyZ2V0Q2xpZW50UmVjdCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDAgJiYgaXNCZWxvd0ZuKHJlY3QsIGxhc3QkMihyZXN1bHQpKSkge1xuICAgICAgICAgIGxpbmUrKztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbGllbnRSZWN0ID0gY2xvbmUkMShyZWN0KTtcbiAgICAgICAgY2xpZW50UmVjdC5wb3NpdGlvbiA9IGNhcmV0UG9zaXRpb247XG4gICAgICAgIGNsaWVudFJlY3QubGluZSA9IGxpbmU7XG4gICAgICAgIGlmIChwcmVkaWNhdGVGbihjbGllbnRSZWN0KSkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnB1c2goY2xpZW50UmVjdCk7XG4gICAgICB9IHdoaWxlIChjYXJldFBvc2l0aW9uID0gd2Fsa0ZuKGNhcmV0UG9zaXRpb24pKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBjb25zdCBpc0Fib3ZlTGluZSA9IGxpbmVOdW1iZXIgPT4gY2xpZW50UmVjdCA9PiBhYm92ZUxpbmVOdW1iZXIobGluZU51bWJlciwgY2xpZW50UmVjdCk7XG4gICAgY29uc3QgaXNMaW5lID0gbGluZU51bWJlciA9PiBjbGllbnRSZWN0ID0+IGlzTGluZU51bWJlcihsaW5lTnVtYmVyLCBjbGllbnRSZWN0KTtcblxuICAgIGNvbnN0IG1vdmVUb1JhbmdlID0gKGVkaXRvciwgcm5nKSA9PiB7XG4gICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgc2Nyb2xsUmFuZ2VJbnRvVmlldyhlZGl0b3IsIGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyUmFuZ2VDYXJldE9wdCA9IChlZGl0b3IsIHJhbmdlLCBzY3JvbGxJbnRvVmlldykgPT4gT3B0aW9uYWwuc29tZShyZW5kZXJSYW5nZUNhcmV0KGVkaXRvciwgcmFuZ2UsIHNjcm9sbEludG9WaWV3KSk7XG4gICAgY29uc3QgbW92ZUhvcml6b250YWxseSA9IChlZGl0b3IsIGRpcmVjdGlvbiwgcmFuZ2UsIGlzQmVmb3JlLCBpc0FmdGVyLCBpc0VsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGZvcndhcmRzID0gZGlyZWN0aW9uID09PSBIRGlyZWN0aW9uLkZvcndhcmRzO1xuICAgICAgY29uc3QgY2FyZXRXYWxrZXIgPSBDYXJldFdhbGtlcihlZGl0b3IuZ2V0Qm9keSgpKTtcbiAgICAgIGNvbnN0IGdldE5leHRQb3NGbiA9IGN1cnJ5KGdldFZpc3VhbENhcmV0UG9zaXRpb24sIGZvcndhcmRzID8gY2FyZXRXYWxrZXIubmV4dCA6IGNhcmV0V2Fsa2VyLnByZXYpO1xuICAgICAgY29uc3QgaXNCZWZvcmVGbiA9IGZvcndhcmRzID8gaXNCZWZvcmUgOiBpc0FmdGVyO1xuICAgICAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGdldFNlbGVjdGVkTm9kZShyYW5nZSk7XG4gICAgICAgIGlmIChpc0VsZW1lbnQobm9kZSkpIHtcbiAgICAgICAgICByZXR1cm4gc2hvd0NhcmV0KGRpcmVjdGlvbiwgZWRpdG9yLCBub2RlLCBkaXJlY3Rpb24gPT09IEhEaXJlY3Rpb24uQmFja3dhcmRzLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNDZWZBdEVkZ2VTZWxlY3RlZChlZGl0b3IpKSB7XG4gICAgICAgICAgY29uc3QgbmV3UmFuZ2UgPSByYW5nZS5jbG9uZVJhbmdlKCk7XG4gICAgICAgICAgbmV3UmFuZ2UuY29sbGFwc2UoZGlyZWN0aW9uID09PSBIRGlyZWN0aW9uLkJhY2t3YXJkcyk7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20obmV3UmFuZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBjYXJldFBvc2l0aW9uID0gZ2V0Tm9ybWFsaXplZFJhbmdlRW5kUG9pbnQoZGlyZWN0aW9uLCBlZGl0b3IuZ2V0Qm9keSgpLCByYW5nZSk7XG4gICAgICBpZiAoaXNCZWZvcmVGbihjYXJldFBvc2l0aW9uKSkge1xuICAgICAgICByZXR1cm4gc2VsZWN0Tm9kZShlZGl0b3IsIGNhcmV0UG9zaXRpb24uZ2V0Tm9kZSghZm9yd2FyZHMpKTtcbiAgICAgIH1cbiAgICAgIGxldCBuZXh0Q2FyZXRQb3NpdGlvbiA9IGdldE5leHRQb3NGbihjYXJldFBvc2l0aW9uKTtcbiAgICAgIGNvbnN0IHJhbmdlSXNJbkNvbnRhaW5lckJsb2NrID0gaXNSYW5nZUluQ2FyZXRDb250YWluZXJCbG9jayhyYW5nZSk7XG4gICAgICBpZiAoIW5leHRDYXJldFBvc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiByYW5nZUlzSW5Db250YWluZXJCbG9jayA/IE9wdGlvbmFsLnNvbWUocmFuZ2UpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dENhcmV0UG9zaXRpb24gPSBub3JtYWxpemVQb3NpdGlvbihmb3J3YXJkcywgbmV4dENhcmV0UG9zaXRpb24pO1xuICAgICAgfVxuICAgICAgaWYgKGlzQmVmb3JlRm4obmV4dENhcmV0UG9zaXRpb24pKSB7XG4gICAgICAgIHJldHVybiBzaG93Q2FyZXQoZGlyZWN0aW9uLCBlZGl0b3IsIG5leHRDYXJldFBvc2l0aW9uLmdldE5vZGUoIWZvcndhcmRzKSwgZm9yd2FyZHMsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBlZWtDYXJldFBvc2l0aW9uID0gZ2V0TmV4dFBvc0ZuKG5leHRDYXJldFBvc2l0aW9uKTtcbiAgICAgIGlmIChwZWVrQ2FyZXRQb3NpdGlvbiAmJiBpc0JlZm9yZUZuKHBlZWtDYXJldFBvc2l0aW9uKSkge1xuICAgICAgICBpZiAoaXNNb3ZlSW5zaWRlU2FtZUJsb2NrKG5leHRDYXJldFBvc2l0aW9uLCBwZWVrQ2FyZXRQb3NpdGlvbikpIHtcbiAgICAgICAgICByZXR1cm4gc2hvd0NhcmV0KGRpcmVjdGlvbiwgZWRpdG9yLCBwZWVrQ2FyZXRQb3NpdGlvbi5nZXROb2RlKCFmb3J3YXJkcyksIGZvcndhcmRzLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyYW5nZUlzSW5Db250YWluZXJCbG9jaykge1xuICAgICAgICByZXR1cm4gcmVuZGVyUmFuZ2VDYXJldE9wdChlZGl0b3IsIG5leHRDYXJldFBvc2l0aW9uLnRvUmFuZ2UoKSwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IG1vdmVWZXJ0aWNhbGx5ID0gKGVkaXRvciwgZGlyZWN0aW9uLCByYW5nZSwgaXNCZWZvcmUsIGlzQWZ0ZXIsIGlzRWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgY2FyZXRQb3NpdGlvbiA9IGdldE5vcm1hbGl6ZWRSYW5nZUVuZFBvaW50KGRpcmVjdGlvbiwgZWRpdG9yLmdldEJvZHkoKSwgcmFuZ2UpO1xuICAgICAgY29uc3QgY2FyZXRDbGllbnRSZWN0ID0gbGFzdCQyKGNhcmV0UG9zaXRpb24uZ2V0Q2xpZW50UmVjdHMoKSk7XG4gICAgICBjb25zdCBmb3J3YXJkcyA9IGRpcmVjdGlvbiA9PT0gVkRpcmVjdGlvbi5Eb3duO1xuICAgICAgY29uc3Qgcm9vdCA9IGVkaXRvci5nZXRCb2R5KCk7XG4gICAgICBpZiAoIWNhcmV0Q2xpZW50UmVjdCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGlzQ2VmQXRFZGdlU2VsZWN0ZWQoZWRpdG9yKSkge1xuICAgICAgICBjb25zdCBjYXJldFBvc2l0aW9uID0gZm9yd2FyZHMgPyBDYXJldFBvc2l0aW9uLmZyb21SYW5nZUVuZChyYW5nZSkgOiBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KHJhbmdlKTtcbiAgICAgICAgY29uc3QgZ2V0Q2xvc2VzdEZuID0gIWZvcndhcmRzID8gZ2V0Q2xvc2VzdFBvc2l0aW9uQWJvdmUgOiBnZXRDbG9zZXN0UG9zaXRpb25CZWxvdztcbiAgICAgICAgcmV0dXJuIGdldENsb3Nlc3RGbihyb290LCBjYXJldFBvc2l0aW9uKS5vclRodW5rKCgpID0+IE9wdGlvbmFsLmZyb20oY2FyZXRQb3NpdGlvbikpLm1hcChwb3MgPT4gcG9zLnRvUmFuZ2UoKSk7XG4gICAgICB9XG4gICAgICBjb25zdCB3YWxrZXJGbiA9IGZvcndhcmRzID8gZG93blVudGlsIDogdXBVbnRpbDtcbiAgICAgIGNvbnN0IGxpbmVQb3NpdGlvbnMgPSB3YWxrZXJGbihyb290LCBpc0Fib3ZlTGluZSgxKSwgY2FyZXRQb3NpdGlvbik7XG4gICAgICBjb25zdCBuZXh0TGluZVBvc2l0aW9ucyA9IGZpbHRlciQ1KGxpbmVQb3NpdGlvbnMsIGlzTGluZSgxKSk7XG4gICAgICBjb25zdCBjbGllbnRYID0gY2FyZXRDbGllbnRSZWN0LmxlZnQ7XG4gICAgICBjb25zdCBuZXh0TGluZVJlY3QgPSBmaW5kQ2xvc2VzdENsaWVudFJlY3QobmV4dExpbmVQb3NpdGlvbnMsIGNsaWVudFgpO1xuICAgICAgaWYgKG5leHRMaW5lUmVjdCAmJiBpc0VsZW1lbnQobmV4dExpbmVSZWN0Lm5vZGUpKSB7XG4gICAgICAgIGNvbnN0IGRpc3QxID0gTWF0aC5hYnMoY2xpZW50WCAtIG5leHRMaW5lUmVjdC5sZWZ0KTtcbiAgICAgICAgY29uc3QgZGlzdDIgPSBNYXRoLmFicyhjbGllbnRYIC0gbmV4dExpbmVSZWN0LnJpZ2h0KTtcbiAgICAgICAgcmV0dXJuIHNob3dDYXJldChkaXJlY3Rpb24sIGVkaXRvciwgbmV4dExpbmVSZWN0Lm5vZGUsIGRpc3QxIDwgZGlzdDIsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIGxldCBjdXJyZW50Tm9kZTtcbiAgICAgIGlmIChpc0JlZm9yZShjYXJldFBvc2l0aW9uKSkge1xuICAgICAgICBjdXJyZW50Tm9kZSA9IGNhcmV0UG9zaXRpb24uZ2V0Tm9kZSgpO1xuICAgICAgfSBlbHNlIGlmIChpc0FmdGVyKGNhcmV0UG9zaXRpb24pKSB7XG4gICAgICAgIGN1cnJlbnROb2RlID0gY2FyZXRQb3NpdGlvbi5nZXROb2RlKHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudE5vZGUgPSBnZXRTZWxlY3RlZE5vZGUocmFuZ2UpO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnROb2RlKSB7XG4gICAgICAgIGNvbnN0IGNhcmV0UG9zaXRpb25zID0gcG9zaXRpb25zVW50aWwoZGlyZWN0aW9uLCByb290LCBpc0Fib3ZlTGluZSgxKSwgY3VycmVudE5vZGUpO1xuICAgICAgICBsZXQgY2xvc2VzdE5leHRMaW5lUmVjdCA9IGZpbmRDbG9zZXN0Q2xpZW50UmVjdChmaWx0ZXIkNShjYXJldFBvc2l0aW9ucywgaXNMaW5lKDEpKSwgY2xpZW50WCk7XG4gICAgICAgIGlmIChjbG9zZXN0TmV4dExpbmVSZWN0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlbmRlclJhbmdlQ2FyZXRPcHQoZWRpdG9yLCBjbG9zZXN0TmV4dExpbmVSZWN0LnBvc2l0aW9uLnRvUmFuZ2UoKSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGNsb3Nlc3ROZXh0TGluZVJlY3QgPSBsYXN0JDIoZmlsdGVyJDUoY2FyZXRQb3NpdGlvbnMsIGlzTGluZSgwKSkpO1xuICAgICAgICBpZiAoY2xvc2VzdE5leHRMaW5lUmVjdCkge1xuICAgICAgICAgIHJldHVybiByZW5kZXJSYW5nZUNhcmV0T3B0KGVkaXRvciwgY2xvc2VzdE5leHRMaW5lUmVjdC5wb3NpdGlvbi50b1JhbmdlKCksIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5leHRMaW5lUG9zaXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZ2V0TGluZUVuZFBvaW50KGVkaXRvciwgZm9yd2FyZHMpLmZpbHRlcihmb3J3YXJkcyA/IGlzQWZ0ZXIgOiBpc0JlZm9yZSkubWFwKHBvcyA9PiByZW5kZXJSYW5nZUNhcmV0KGVkaXRvciwgcG9zLnRvUmFuZ2UoKSwgZmFsc2UpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRMaW5lRW5kUG9pbnQgPSAoZWRpdG9yLCBmb3J3YXJkKSA9PiB7XG4gICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgY29uc3QgZnJvbSA9IGZvcndhcmQgPyBDYXJldFBvc2l0aW9uLmZyb21SYW5nZUVuZChybmcpIDogQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChybmcpO1xuICAgICAgY29uc3QgaG9zdCA9IGdldEVkaXRpbmdIb3N0KGZyb20uY29udGFpbmVyKCksIGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgaWYgKGZvcndhcmQpIHtcbiAgICAgICAgY29uc3QgbGluZUluZm8gPSBnZXRQb3NpdGlvbnNVbnRpbE5leHRMaW5lKGhvc3QsIGZyb20pO1xuICAgICAgICByZXR1cm4gbGFzdCQzKGxpbmVJbmZvLnBvc2l0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsaW5lSW5mbyA9IGdldFBvc2l0aW9uc1VudGlsUHJldmlvdXNMaW5lKGhvc3QsIGZyb20pO1xuICAgICAgICByZXR1cm4gaGVhZChsaW5lSW5mby5wb3NpdGlvbnMpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbW92ZVRvTGluZUVuZFBvaW50JDMgPSAoZWRpdG9yLCBmb3J3YXJkLCBpc0VsZW1lbnRQb3NpdGlvbikgPT4gZ2V0TGluZUVuZFBvaW50KGVkaXRvciwgZm9yd2FyZCkuZmlsdGVyKGlzRWxlbWVudFBvc2l0aW9uKS5leGlzdHMocG9zID0+IHtcbiAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHBvcy50b1JhbmdlKCkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICBjb25zdCBzZXRDYXJldFBvc2l0aW9uID0gKGVkaXRvciwgcG9zKSA9PiB7XG4gICAgICBjb25zdCBybmcgPSBlZGl0b3IuZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgcm5nLnNldFN0YXJ0KHBvcy5jb250YWluZXIoKSwgcG9zLm9mZnNldCgpKTtcbiAgICAgIHJuZy5zZXRFbmQocG9zLmNvbnRhaW5lcigpLCBwb3Mub2Zmc2V0KCkpO1xuICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcocm5nKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldFNlbGVjdGVkID0gKHN0YXRlLCBlbG0pID0+IHtcbiAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICBlbG0uc2V0QXR0cmlidXRlKCdkYXRhLW1jZS1zZWxlY3RlZCcsICdpbmxpbmUtYm91bmRhcnknKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbWNlLXNlbGVjdGVkJyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJDYXJldExvY2F0aW9uID0gKGVkaXRvciwgY2FyZXQsIGxvY2F0aW9uKSA9PiByZW5kZXJDYXJldChjYXJldCwgbG9jYXRpb24pLm1hcChwb3MgPT4ge1xuICAgICAgc2V0Q2FyZXRQb3NpdGlvbihlZGl0b3IsIHBvcyk7XG4gICAgICByZXR1cm4gbG9jYXRpb247XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0UG9zaXRpb25Gcm9tUmFuZ2UgPSAocmFuZ2UsIHJvb3QsIGZvcndhcmQpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChyYW5nZSk7XG4gICAgICBpZiAocmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgICAgIHJldHVybiBzdGFydDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVuZCA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlRW5kKHJhbmdlKTtcbiAgICAgICAgcmV0dXJuIGZvcndhcmQgPyBwcmV2UG9zaXRpb24ocm9vdCwgZW5kKS5nZXRPcihlbmQpIDogbmV4dFBvc2l0aW9uKHJvb3QsIHN0YXJ0KS5nZXRPcihzdGFydCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBmaW5kTG9jYXRpb24gPSAoZWRpdG9yLCBjYXJldCwgZm9yd2FyZCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdE5vZGUgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgY29uc3QgZnJvbSA9IGdldFBvc2l0aW9uRnJvbVJhbmdlKGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCksIHJvb3ROb2RlLCBmb3J3YXJkKTtcbiAgICAgIGNvbnN0IGlzSW5saW5lVGFyZ2V0JDEgPSBjdXJyeShpc0lubGluZVRhcmdldCwgZWRpdG9yKTtcbiAgICAgIGNvbnN0IGxvY2F0aW9uID0gZmluZExvY2F0aW9uJDEoZm9yd2FyZCwgaXNJbmxpbmVUYXJnZXQkMSwgcm9vdE5vZGUsIGZyb20pO1xuICAgICAgcmV0dXJuIGxvY2F0aW9uLmJpbmQobG9jYXRpb24gPT4gcmVuZGVyQ2FyZXRMb2NhdGlvbihlZGl0b3IsIGNhcmV0LCBsb2NhdGlvbikpO1xuICAgIH07XG4gICAgY29uc3QgdG9nZ2xlSW5saW5lcyA9IChpc0lubGluZVRhcmdldCwgZG9tLCBlbG1zKSA9PiB7XG4gICAgICBjb25zdCBpbmxpbmVCb3VuZGFyaWVzID0gbWFwJDMoZGVzY2VuZGFudHMoU3VnYXJFbGVtZW50LmZyb21Eb20oZG9tLmdldFJvb3QoKSksICcqW2RhdGEtbWNlLXNlbGVjdGVkPVwiaW5saW5lLWJvdW5kYXJ5XCJdJyksIGUgPT4gZS5kb20pO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRJbmxpbmVzID0gZmlsdGVyJDUoaW5saW5lQm91bmRhcmllcywgaXNJbmxpbmVUYXJnZXQpO1xuICAgICAgY29uc3QgdGFyZ2V0SW5saW5lcyA9IGZpbHRlciQ1KGVsbXMsIGlzSW5saW5lVGFyZ2V0KTtcbiAgICAgIGVhY2gkZShkaWZmZXJlbmNlKHNlbGVjdGVkSW5saW5lcywgdGFyZ2V0SW5saW5lcyksIGN1cnJ5KHNldFNlbGVjdGVkLCBmYWxzZSkpO1xuICAgICAgZWFjaCRlKGRpZmZlcmVuY2UodGFyZ2V0SW5saW5lcywgc2VsZWN0ZWRJbmxpbmVzKSwgY3Vycnkoc2V0U2VsZWN0ZWQsIHRydWUpKTtcbiAgICB9O1xuICAgIGNvbnN0IHNhZmVSZW1vdmVDYXJldENvbnRhaW5lciA9IChlZGl0b3IsIGNhcmV0KSA9PiB7XG4gICAgICBjb25zdCBjYXJldFZhbHVlID0gY2FyZXQuZ2V0KCk7XG4gICAgICBpZiAoZWRpdG9yLnNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpICYmICFlZGl0b3IuY29tcG9zaW5nICYmIGNhcmV0VmFsdWUpIHtcbiAgICAgICAgY29uc3QgcG9zID0gQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKTtcbiAgICAgICAgaWYgKENhcmV0UG9zaXRpb24uaXNUZXh0UG9zaXRpb24ocG9zKSAmJiAhaXNBdFp3c3AocG9zKSkge1xuICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oZWRpdG9yLCByZW1vdmVBbmRSZXBvc2l0aW9uKGNhcmV0VmFsdWUsIHBvcykpO1xuICAgICAgICAgIGNhcmV0LnNldChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVuZGVySW5zaWRlSW5saW5lQ2FyZXQgPSAoaXNJbmxpbmVUYXJnZXQsIGVkaXRvciwgY2FyZXQsIGVsbXMpID0+IHtcbiAgICAgIGlmIChlZGl0b3Iuc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkpIHtcbiAgICAgICAgY29uc3QgaW5saW5lcyA9IGZpbHRlciQ1KGVsbXMsIGlzSW5saW5lVGFyZ2V0KTtcbiAgICAgICAgZWFjaCRlKGlubGluZXMsIF9pbmxpbmUgPT4ge1xuICAgICAgICAgIGNvbnN0IHBvcyA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQoZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSk7XG4gICAgICAgICAgcmVhZExvY2F0aW9uKGlzSW5saW5lVGFyZ2V0LCBlZGl0b3IuZ2V0Qm9keSgpLCBwb3MpLmJpbmQobG9jYXRpb24gPT4gcmVuZGVyQ2FyZXRMb2NhdGlvbihlZGl0b3IsIGNhcmV0LCBsb2NhdGlvbikpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1vdmUkMyA9IChlZGl0b3IsIGNhcmV0LCBmb3J3YXJkKSA9PiBpc0lubGluZUJvdW5kYXJpZXNFbmFibGVkKGVkaXRvcikgPyBmaW5kTG9jYXRpb24oZWRpdG9yLCBjYXJldCwgZm9yd2FyZCkuaXNTb21lKCkgOiBmYWxzZTtcbiAgICBjb25zdCBtb3ZlV29yZCA9IChmb3J3YXJkLCBlZGl0b3IsIF9jYXJldCkgPT4gaXNJbmxpbmVCb3VuZGFyaWVzRW5hYmxlZChlZGl0b3IpID8gbW92ZUJ5V29yZChmb3J3YXJkLCBlZGl0b3IpIDogZmFsc2U7XG4gICAgY29uc3Qgc2V0dXBTZWxlY3RlZFN0YXRlID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGNhcmV0ID0gQ2VsbChudWxsKTtcbiAgICAgIGNvbnN0IGlzSW5saW5lVGFyZ2V0JDEgPSBjdXJyeShpc0lubGluZVRhcmdldCwgZWRpdG9yKTtcbiAgICAgIGVkaXRvci5vbignTm9kZUNoYW5nZScsIGUgPT4ge1xuICAgICAgICBpZiAoaXNJbmxpbmVCb3VuZGFyaWVzRW5hYmxlZChlZGl0b3IpKSB7XG4gICAgICAgICAgdG9nZ2xlSW5saW5lcyhpc0lubGluZVRhcmdldCQxLCBlZGl0b3IuZG9tLCBlLnBhcmVudHMpO1xuICAgICAgICAgIHNhZmVSZW1vdmVDYXJldENvbnRhaW5lcihlZGl0b3IsIGNhcmV0KTtcbiAgICAgICAgICByZW5kZXJJbnNpZGVJbmxpbmVDYXJldChpc0lubGluZVRhcmdldCQxLCBlZGl0b3IsIGNhcmV0LCBlLnBhcmVudHMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjYXJldDtcbiAgICB9O1xuICAgIGNvbnN0IG1vdmVOZXh0V29yZCA9IGN1cnJ5KG1vdmVXb3JkLCB0cnVlKTtcbiAgICBjb25zdCBtb3ZlUHJldldvcmQgPSBjdXJyeShtb3ZlV29yZCwgZmFsc2UpO1xuICAgIGNvbnN0IG1vdmVUb0xpbmVFbmRQb2ludCQyID0gKGVkaXRvciwgZm9yd2FyZCwgY2FyZXQpID0+IHtcbiAgICAgIGlmIChpc0lubGluZUJvdW5kYXJpZXNFbmFibGVkKGVkaXRvcikpIHtcbiAgICAgICAgY29uc3QgbGluZVBvaW50ID0gZ2V0TGluZUVuZFBvaW50KGVkaXRvciwgZm9yd2FyZCkuZ2V0T3JUaHVuaygoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgICAgICByZXR1cm4gZm9yd2FyZCA/IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlRW5kKHJuZykgOiBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KHJuZyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVhZExvY2F0aW9uKGN1cnJ5KGlzSW5saW5lVGFyZ2V0LCBlZGl0b3IpLCBlZGl0b3IuZ2V0Qm9keSgpLCBsaW5lUG9pbnQpLmV4aXN0cyhsb2MgPT4ge1xuICAgICAgICAgIGNvbnN0IG91dHNpZGVMb2MgPSBvdXRzaWRlKGxvYyk7XG4gICAgICAgICAgcmV0dXJuIHJlbmRlckNhcmV0KGNhcmV0LCBvdXRzaWRlTG9jKS5leGlzdHMocG9zID0+IHtcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oZWRpdG9yLCBwb3MpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCByYW5nZUZyb21Qb3NpdGlvbnMgPSAoZnJvbSwgdG8pID0+IHtcbiAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHJhbmdlLnNldFN0YXJ0KGZyb20uY29udGFpbmVyKCksIGZyb20ub2Zmc2V0KCkpO1xuICAgICAgcmFuZ2Uuc2V0RW5kKHRvLmNvbnRhaW5lcigpLCB0by5vZmZzZXQoKSk7XG4gICAgICByZXR1cm4gcmFuZ2U7XG4gICAgfTtcbiAgICBjb25zdCBoYXNPbmx5VHdvT3JMZXNzUG9zaXRpb25zTGVmdCA9IGVsbSA9PiBsaWZ0MihmaXJzdFBvc2l0aW9uSW4oZWxtKSwgbGFzdFBvc2l0aW9uSW4oZWxtKSwgKGZpcnN0UG9zLCBsYXN0UG9zKSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkRmlyc3RQb3MgPSBub3JtYWxpemVQb3NpdGlvbih0cnVlLCBmaXJzdFBvcyk7XG4gICAgICBjb25zdCBub3JtYWxpemVkTGFzdFBvcyA9IG5vcm1hbGl6ZVBvc2l0aW9uKGZhbHNlLCBsYXN0UG9zKTtcbiAgICAgIHJldHVybiBuZXh0UG9zaXRpb24oZWxtLCBub3JtYWxpemVkRmlyc3RQb3MpLmZvcmFsbChwb3MgPT4gcG9zLmlzRXF1YWwobm9ybWFsaXplZExhc3RQb3MpKTtcbiAgICB9KS5nZXRPcih0cnVlKTtcbiAgICBjb25zdCBzZXRDYXJldExvY2F0aW9uID0gKGVkaXRvciwgY2FyZXQpID0+IGxvY2F0aW9uID0+IHJlbmRlckNhcmV0KGNhcmV0LCBsb2NhdGlvbikubWFwKHBvcyA9PiAoKSA9PiBzZXRDYXJldFBvc2l0aW9uKGVkaXRvciwgcG9zKSk7XG4gICAgY29uc3QgZGVsZXRlRnJvbVRvID0gKGVkaXRvciwgY2FyZXQsIGZyb20sIHRvKSA9PiB7XG4gICAgICBjb25zdCByb290Tm9kZSA9IGVkaXRvci5nZXRCb2R5KCk7XG4gICAgICBjb25zdCBpc0lubGluZVRhcmdldCQxID0gY3VycnkoaXNJbmxpbmVUYXJnZXQsIGVkaXRvcik7XG4gICAgICBlZGl0b3IudW5kb01hbmFnZXIuaWdub3JlKCgpID0+IHtcbiAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcocmFuZ2VGcm9tUG9zaXRpb25zKGZyb20sIHRvKSk7XG4gICAgICAgIGV4ZWNOYXRpdmVEZWxldGVDb21tYW5kKGVkaXRvcik7XG4gICAgICAgIHJlYWRMb2NhdGlvbihpc0lubGluZVRhcmdldCQxLCByb290Tm9kZSwgQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKSkubWFwKGluc2lkZSkuYmluZChzZXRDYXJldExvY2F0aW9uKGVkaXRvciwgY2FyZXQpKS5lYWNoKGNhbGwpO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlc2NvcGUgPSAocm9vdE5vZGUsIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudEJsb2NrID0gZ2V0UGFyZW50QmxvY2skMyhub2RlLCByb290Tm9kZSk7XG4gICAgICByZXR1cm4gcGFyZW50QmxvY2sgPyBwYXJlbnRCbG9jayA6IHJvb3ROb2RlO1xuICAgIH07XG4gICAgY29uc3QgYmFja3NwYWNlRGVsZXRlQ29sbGFwc2VkID0gKGVkaXRvciwgY2FyZXQsIGZvcndhcmQsIGZyb20pID0+IHtcbiAgICAgIGNvbnN0IHJvb3ROb2RlID0gcmVzY29wZShlZGl0b3IuZ2V0Qm9keSgpLCBmcm9tLmNvbnRhaW5lcigpKTtcbiAgICAgIGNvbnN0IGlzSW5saW5lVGFyZ2V0JDEgPSBjdXJyeShpc0lubGluZVRhcmdldCwgZWRpdG9yKTtcbiAgICAgIGNvbnN0IGZyb21Mb2NhdGlvbiA9IHJlYWRMb2NhdGlvbihpc0lubGluZVRhcmdldCQxLCByb290Tm9kZSwgZnJvbSk7XG4gICAgICBjb25zdCBsb2NhdGlvbiA9IGZyb21Mb2NhdGlvbi5iaW5kKGxvY2F0aW9uID0+IHtcbiAgICAgICAgaWYgKGZvcndhcmQpIHtcbiAgICAgICAgICByZXR1cm4gbG9jYXRpb24uZm9sZChjb25zdGFudChPcHRpb25hbC5zb21lKGluc2lkZShsb2NhdGlvbikpKSwgT3B0aW9uYWwubm9uZSwgY29uc3RhbnQoT3B0aW9uYWwuc29tZShvdXRzaWRlKGxvY2F0aW9uKSkpLCBPcHRpb25hbC5ub25lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbG9jYXRpb24uZm9sZChPcHRpb25hbC5ub25lLCBjb25zdGFudChPcHRpb25hbC5zb21lKG91dHNpZGUobG9jYXRpb24pKSksIE9wdGlvbmFsLm5vbmUsIGNvbnN0YW50KE9wdGlvbmFsLnNvbWUoaW5zaWRlKGxvY2F0aW9uKSkpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbG9jYXRpb24ubWFwKHNldENhcmV0TG9jYXRpb24oZWRpdG9yLCBjYXJldCkpLmdldE9yVGh1bmsoKCkgPT4ge1xuICAgICAgICBjb25zdCB0b1Bvc2l0aW9uID0gbmF2aWdhdGUoZm9yd2FyZCwgcm9vdE5vZGUsIGZyb20pO1xuICAgICAgICBjb25zdCB0b0xvY2F0aW9uID0gdG9Qb3NpdGlvbi5iaW5kKHBvcyA9PiByZWFkTG9jYXRpb24oaXNJbmxpbmVUYXJnZXQkMSwgcm9vdE5vZGUsIHBvcykpO1xuICAgICAgICByZXR1cm4gbGlmdDIoZnJvbUxvY2F0aW9uLCB0b0xvY2F0aW9uLCAoKSA9PiBmaW5kUm9vdElubGluZShpc0lubGluZVRhcmdldCQxLCByb290Tm9kZSwgZnJvbSkuYmluZChlbG0gPT4ge1xuICAgICAgICAgIGlmIChoYXNPbmx5VHdvT3JMZXNzUG9zaXRpb25zTGVmdChlbG0pKSB7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSgoKSA9PiB7XG4gICAgICAgICAgICAgIGRlbGV0ZUVsZW1lbnQkMihlZGl0b3IsIGZvcndhcmQsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsbSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSkuZ2V0T3JUaHVuaygoKSA9PiB0b0xvY2F0aW9uLmJpbmQoKCkgPT4gdG9Qb3NpdGlvbi5tYXAodG8gPT4ge1xuICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoZm9yd2FyZCkge1xuICAgICAgICAgICAgICBkZWxldGVGcm9tVG8oZWRpdG9yLCBjYXJldCwgZnJvbSwgdG8pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGVsZXRlRnJvbVRvKGVkaXRvciwgY2FyZXQsIHRvLCBmcm9tKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9KSkpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBiYWNrc3BhY2VEZWxldGUkNCA9IChlZGl0b3IsIGNhcmV0LCBmb3J3YXJkKSA9PiB7XG4gICAgICBpZiAoZWRpdG9yLnNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpICYmIGlzSW5saW5lQm91bmRhcmllc0VuYWJsZWQoZWRpdG9yKSkge1xuICAgICAgICBjb25zdCBmcm9tID0gQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKTtcbiAgICAgICAgcmV0dXJuIGJhY2tzcGFjZURlbGV0ZUNvbGxhcHNlZChlZGl0b3IsIGNhcmV0LCBmb3J3YXJkLCBmcm9tKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhc011bHRpcGxlQ2hpbGRyZW4gPSBlbG0gPT4gY2hpbGROb2Rlc0NvdW50KGVsbSkgPiAxO1xuICAgIGNvbnN0IGdldFBhcmVudHNVbnRpbCA9IChlZGl0b3IsIHByZWQpID0+IHtcbiAgICAgIGNvbnN0IHJvb3RFbG0gPSBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKTtcbiAgICAgIGNvbnN0IHN0YXJ0RWxtID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCgpKTtcbiAgICAgIGNvbnN0IHBhcmVudHMgPSBwYXJlbnRzQW5kU2VsZihzdGFydEVsbSwgcm9vdEVsbSk7XG4gICAgICByZXR1cm4gZmluZEluZGV4JDIocGFyZW50cywgcHJlZCkuZm9sZChjb25zdGFudChwYXJlbnRzKSwgaW5kZXggPT4gcGFyZW50cy5zbGljZSgwLCBpbmRleCkpO1xuICAgIH07XG4gICAgY29uc3QgaGFzT25seU9uZUNoaWxkID0gZWxtID0+IGNoaWxkTm9kZXNDb3VudChlbG0pID09PSAxO1xuICAgIGNvbnN0IGdldFBhcmVudElubGluZXNVbnRpbE11bHRpY2hpbGRJbmxpbmUgPSBlZGl0b3IgPT4gZ2V0UGFyZW50c1VudGlsKGVkaXRvciwgZWxtID0+IGlzQmxvY2skMihlbG0pIHx8IGhhc011bHRpcGxlQ2hpbGRyZW4oZWxtKSk7XG4gICAgY29uc3QgZ2V0UGFyZW50SW5saW5lcyA9IGVkaXRvciA9PiBnZXRQYXJlbnRzVW50aWwoZWRpdG9yLCBpc0Jsb2NrJDIpO1xuICAgIGNvbnN0IGdldEZvcm1hdE5vZGVzID0gKGVkaXRvciwgcGFyZW50SW5saW5lcykgPT4ge1xuICAgICAgY29uc3QgaXNGb3JtYXRFbGVtZW50JDEgPSBjdXJyeShpc0Zvcm1hdEVsZW1lbnQsIGVkaXRvcik7XG4gICAgICByZXR1cm4gYmluZCQzKHBhcmVudElubGluZXMsIGVsbSA9PiBpc0Zvcm1hdEVsZW1lbnQkMShlbG0pID8gW2VsbS5kb21dIDogW10pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Rm9ybWF0Tm9kZXNBdFN0YXJ0ID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudElubGluZXMgPSBnZXRQYXJlbnRJbmxpbmVzKGVkaXRvcik7XG4gICAgICByZXR1cm4gZ2V0Rm9ybWF0Tm9kZXMoZWRpdG9yLCBwYXJlbnRJbmxpbmVzKTtcbiAgICB9O1xuICAgIGNvbnN0IGRlbGV0ZUxhc3RQb3NpdGlvbiA9IChmb3J3YXJkLCBlZGl0b3IsIHRhcmdldCwgcGFyZW50SW5saW5lcykgPT4ge1xuICAgICAgY29uc3QgZm9ybWF0Tm9kZXMgPSBnZXRGb3JtYXROb2RlcyhlZGl0b3IsIHBhcmVudElubGluZXMpO1xuICAgICAgaWYgKGZvcm1hdE5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkZWxldGVFbGVtZW50JDIoZWRpdG9yLCBmb3J3YXJkLCB0YXJnZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcG9zID0gcmVwbGFjZVdpdGhDYXJldEZvcm1hdCh0YXJnZXQuZG9tLCBmb3JtYXROb2Rlcyk7XG4gICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHBvcy50b1JhbmdlKCkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZGVsZXRlQ2FyZXQkMSA9IChlZGl0b3IsIGZvcndhcmQpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudElubGluZXMgPSBmaWx0ZXIkNShnZXRQYXJlbnRJbmxpbmVzVW50aWxNdWx0aWNoaWxkSW5saW5lKGVkaXRvciksIGhhc09ubHlPbmVDaGlsZCk7XG4gICAgICByZXR1cm4gbGFzdCQzKHBhcmVudElubGluZXMpLmJpbmQodGFyZ2V0ID0+IHtcbiAgICAgICAgY29uc3QgZnJvbVBvcyA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQoZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSk7XG4gICAgICAgIGlmICh3aWxsRGVsZXRlTGFzdFBvc2l0aW9uSW5FbGVtZW50KGZvcndhcmQsIGZyb21Qb3MsIHRhcmdldC5kb20pICYmICFpc0VtcHR5Q2FyZXRGb3JtYXRFbGVtZW50KHRhcmdldCkpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSgoKSA9PiBkZWxldGVMYXN0UG9zaXRpb24oZm9yd2FyZCwgZWRpdG9yLCB0YXJnZXQsIHBhcmVudElubGluZXMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQnJJbkVtcHR5RWxlbWVudCA9IChlZGl0b3IsIGVsbSkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50RWxtID0gZWxtLnBhcmVudEVsZW1lbnQ7XG4gICAgICByZXR1cm4gaXNCciQ2KGVsbSkgJiYgIWlzTnVsbChwYXJlbnRFbG0pICYmIGVkaXRvci5kb20uaXNFbXB0eShwYXJlbnRFbG0pO1xuICAgIH07XG4gICAgY29uc3QgaXNFbXB0eUNhcmV0ID0gZWxtID0+IGlzRW1wdHlDYXJldEZvcm1hdEVsZW1lbnQoU3VnYXJFbGVtZW50LmZyb21Eb20oZWxtKSk7XG4gICAgY29uc3QgY3JlYXRlQ2FyZXRGb3JtYXRBdFN0YXJ0ID0gKGVkaXRvciwgZm9ybWF0Tm9kZXMpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0RWxtID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCgpO1xuICAgICAgY29uc3QgcG9zID0gaXNCckluRW1wdHlFbGVtZW50KGVkaXRvciwgc3RhcnRFbG0pIHx8IGlzRW1wdHlDYXJldChzdGFydEVsbSkgPyByZXBsYWNlV2l0aENhcmV0Rm9ybWF0KHN0YXJ0RWxtLCBmb3JtYXROb2RlcykgOiBjcmVhdGVDYXJldEZvcm1hdEF0U3RhcnQkMShlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpLCBmb3JtYXROb2Rlcyk7XG4gICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhwb3MudG9SYW5nZSgpKTtcbiAgICB9O1xuICAgIGNvbnN0IHVwZGF0ZUNhcmV0Rm9ybWF0ID0gKGVkaXRvciwgdXBkYXRlRm9ybWF0cykgPT4ge1xuICAgICAgY29uc3QgbWlzc2luZ0Zvcm1hdHMgPSBkaWZmZXJlbmNlKHVwZGF0ZUZvcm1hdHMsIGdldEZvcm1hdE5vZGVzQXRTdGFydChlZGl0b3IpKTtcbiAgICAgIGlmIChtaXNzaW5nRm9ybWF0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNyZWF0ZUNhcmV0Rm9ybWF0QXRTdGFydChlZGl0b3IsIG1pc3NpbmdGb3JtYXRzKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJhbmdlU3RhcnRzQXRUZXh0Q29udGFpbmVyID0gcm5nID0+IGlzVGV4dCRhKHJuZy5zdGFydENvbnRhaW5lcik7XG4gICAgY29uc3QgcmFuZ2VTdGFydHNBdFN0YXJ0T2ZUZXh0Q29udGFpbmVyID0gcm5nID0+IHJuZy5zdGFydE9mZnNldCA9PT0gMCAmJiByYW5nZVN0YXJ0c0F0VGV4dENvbnRhaW5lcihybmcpO1xuICAgIGNvbnN0IHJhbmdlU3RhcnRQYXJlbnRJc0Zvcm1hdEVsZW1lbnQgPSAoZWRpdG9yLCBybmcpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0UGFyZW50ID0gcm5nLnN0YXJ0Q29udGFpbmVyLnBhcmVudEVsZW1lbnQ7XG4gICAgICByZXR1cm4gIWlzTnVsbChzdGFydFBhcmVudCkgJiYgaXNGb3JtYXRFbGVtZW50KGVkaXRvciwgU3VnYXJFbGVtZW50LmZyb21Eb20oc3RhcnRQYXJlbnQpKTtcbiAgICB9O1xuICAgIGNvbnN0IHJhbmdlU3RhcnRBbmRFbmRIYXZlU2FtZVBhcmVudCA9IHJuZyA9PiB7XG4gICAgICBjb25zdCBzdGFydFBhcmVudCA9IHJuZy5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgICAgY29uc3QgZW5kUGFyZW50ID0gcm5nLmVuZENvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgICAgcmV0dXJuICFpc051bGwoc3RhcnRQYXJlbnQpICYmICFpc051bGwoZW5kUGFyZW50KSAmJiBzdGFydFBhcmVudC5pc0VxdWFsTm9kZShlbmRQYXJlbnQpO1xuICAgIH07XG4gICAgY29uc3QgcmFuZ2VFbmRzQXRFbmRPZkVuZENvbnRhaW5lciA9IHJuZyA9PiB7XG4gICAgICBjb25zdCBlbmRDb250YWluZXIgPSBybmcuZW5kQ29udGFpbmVyO1xuICAgICAgcmV0dXJuIHJuZy5lbmRPZmZzZXQgPT09IChpc1RleHQkYShlbmRDb250YWluZXIpID8gZW5kQ29udGFpbmVyLmxlbmd0aCA6IGVuZENvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCk7XG4gICAgfTtcbiAgICBjb25zdCByYW5nZUVuZHNBdEVuZE9mU3RhcnRDb250YWluZXIgPSBybmcgPT4gcmFuZ2VTdGFydEFuZEVuZEhhdmVTYW1lUGFyZW50KHJuZykgJiYgcmFuZ2VFbmRzQXRFbmRPZkVuZENvbnRhaW5lcihybmcpO1xuICAgIGNvbnN0IHJhbmdlRW5kc0FmdGVyRW5kT2ZTdGFydENvbnRhaW5lciA9IHJuZyA9PiAhcm5nLmVuZENvbnRhaW5lci5pc0VxdWFsTm9kZShybmcuY29tbW9uQW5jZXN0b3JDb250YWluZXIpO1xuICAgIGNvbnN0IHJhbmdlRW5kc0F0T3JBZnRlckVuZE9mU3RhcnRDb250YWluZXIgPSBybmcgPT4gcmFuZ2VFbmRzQXRFbmRPZlN0YXJ0Q29udGFpbmVyKHJuZykgfHwgcmFuZ2VFbmRzQWZ0ZXJFbmRPZlN0YXJ0Q29udGFpbmVyKHJuZyk7XG4gICAgY29uc3QgcmVxdWlyZXNEZWxldGVSYW5nZU92ZXJyaWRlID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICByZXR1cm4gcmFuZ2VTdGFydHNBdFN0YXJ0T2ZUZXh0Q29udGFpbmVyKHJuZykgJiYgcmFuZ2VTdGFydFBhcmVudElzRm9ybWF0RWxlbWVudChlZGl0b3IsIHJuZykgJiYgcmFuZ2VFbmRzQXRPckFmdGVyRW5kT2ZTdGFydENvbnRhaW5lcihybmcpO1xuICAgIH07XG4gICAgY29uc3QgZGVsZXRlUmFuZ2UkMSA9IGVkaXRvciA9PiB7XG4gICAgICBpZiAocmVxdWlyZXNEZWxldGVSYW5nZU92ZXJyaWRlKGVkaXRvcikpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0Tm9kZXMgPSBnZXRGb3JtYXROb2Rlc0F0U3RhcnQoZWRpdG9yKTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoKCkgPT4ge1xuICAgICAgICAgIGV4ZWNOYXRpdmVEZWxldGVDb21tYW5kKGVkaXRvcik7XG4gICAgICAgICAgdXBkYXRlQ2FyZXRGb3JtYXQoZWRpdG9yLCBmb3JtYXROb2Rlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGJhY2tzcGFjZURlbGV0ZSQzID0gKGVkaXRvciwgZm9yd2FyZCkgPT4gZWRpdG9yLnNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpID8gZGVsZXRlQ2FyZXQkMShlZGl0b3IsIGZvcndhcmQpIDogZGVsZXRlUmFuZ2UkMShlZGl0b3IpO1xuICAgIGNvbnN0IGhhc0FuY2VzdG9ySW5saW5lQ2FyZXQgPSBlbG0gPT4gYW5jZXN0b3IkMShlbG0sIG5vZGUgPT4gaXNDYXJldE5vZGUobm9kZS5kb20pLCBpc0Jsb2NrJDIpO1xuICAgIGNvbnN0IGhhc0FuY2VzdG9ySW5saW5lQ2FyZXRBdFN0YXJ0ID0gZWRpdG9yID0+IGhhc0FuY2VzdG9ySW5saW5lQ2FyZXQoU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCgpKSk7XG4gICAgY29uc3QgcmVxdWlyZXNSZWZyZXNoQ2FyZXRPdmVycmlkZSA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgcmV0dXJuIHJuZy5jb2xsYXBzZWQgJiYgKHJhbmdlU3RhcnRzQXRUZXh0Q29udGFpbmVyKHJuZykgfHwgZWRpdG9yLmRvbS5pc0VtcHR5KHJuZy5zdGFydENvbnRhaW5lcikpICYmICFoYXNBbmNlc3RvcklubGluZUNhcmV0QXRTdGFydChlZGl0b3IpO1xuICAgIH07XG4gICAgY29uc3QgcmVmcmVzaENhcmV0ID0gZWRpdG9yID0+IHtcbiAgICAgIGlmIChyZXF1aXJlc1JlZnJlc2hDYXJldE92ZXJyaWRlKGVkaXRvcikpIHtcbiAgICAgICAgY3JlYXRlQ2FyZXRGb3JtYXRBdFN0YXJ0KGVkaXRvciwgW10pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIGNvbnN0IGRlbGV0ZUVsZW1lbnQgPSAoZWRpdG9yLCBmb3J3YXJkLCBlbGVtZW50KSA9PiB7XG4gICAgICBpZiAoaXNOb25OdWxsYWJsZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSgoKSA9PiB7XG4gICAgICAgICAgZWRpdG9yLl9zZWxlY3Rpb25PdmVycmlkZXMuaGlkZUZha2VDYXJldCgpO1xuICAgICAgICAgIGRlbGV0ZUVsZW1lbnQkMihlZGl0b3IsIGZvcndhcmQsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsZW1lbnQpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZGVsZXRlQ2FyZXQgPSAoZWRpdG9yLCBmb3J3YXJkKSA9PiB7XG4gICAgICBjb25zdCBpc05lYXJNZWRpYSA9IGZvcndhcmQgPyBpc0JlZm9yZU1lZGlhIDogaXNBZnRlck1lZGlhO1xuICAgICAgY29uc3QgZGlyZWN0aW9uID0gZm9yd2FyZCA/IEhEaXJlY3Rpb24uRm9yd2FyZHMgOiBIRGlyZWN0aW9uLkJhY2t3YXJkcztcbiAgICAgIGNvbnN0IGZyb21Qb3MgPSBnZXROb3JtYWxpemVkUmFuZ2VFbmRQb2ludChkaXJlY3Rpb24sIGVkaXRvci5nZXRCb2R5KCksIGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpO1xuICAgICAgaWYgKGlzTmVhck1lZGlhKGZyb21Qb3MpKSB7XG4gICAgICAgIHJldHVybiBkZWxldGVFbGVtZW50KGVkaXRvciwgZm9yd2FyZCwgZnJvbVBvcy5nZXROb2RlKCFmb3J3YXJkKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShub3JtYWxpemVQb3NpdGlvbihmb3J3YXJkLCBmcm9tUG9zKSkuZmlsdGVyKHBvcyA9PiBpc05lYXJNZWRpYShwb3MpICYmIGlzTW92ZUluc2lkZVNhbWVCbG9jayhmcm9tUG9zLCBwb3MpKS5iaW5kKHBvcyA9PiBkZWxldGVFbGVtZW50KGVkaXRvciwgZm9yd2FyZCwgcG9zLmdldE5vZGUoIWZvcndhcmQpKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBkZWxldGVSYW5nZSA9IChlZGl0b3IsIGZvcndhcmQpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkTm9kZSA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Tm9kZSgpO1xuICAgICAgcmV0dXJuIGlzTWVkaWEkMihzZWxlY3RlZE5vZGUpID8gZGVsZXRlRWxlbWVudChlZGl0b3IsIGZvcndhcmQsIHNlbGVjdGVkTm9kZSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBiYWNrc3BhY2VEZWxldGUkMiA9IChlZGl0b3IsIGZvcndhcmQpID0+IGVkaXRvci5zZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSA/IGRlbGV0ZUNhcmV0KGVkaXRvciwgZm9yd2FyZCkgOiBkZWxldGVSYW5nZShlZGl0b3IsIGZvcndhcmQpO1xuXG4gICAgY29uc3QgaXNFZGl0YWJsZSA9IHRhcmdldCA9PiBjbG9zZXN0JDQodGFyZ2V0LCBlbG0gPT4gaXNDb250ZW50RWRpdGFibGVUcnVlJDMoZWxtLmRvbSkgfHwgaXNDb250ZW50RWRpdGFibGVGYWxzZSRiKGVsbS5kb20pKS5leGlzdHMoZWxtID0+IGlzQ29udGVudEVkaXRhYmxlVHJ1ZSQzKGVsbS5kb20pKTtcbiAgICBjb25zdCBwYXJzZUluZGVudFZhbHVlID0gdmFsdWUgPT4gdG9JbnQodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHZvaWQgMCA/IHZhbHVlIDogJycpLmdldE9yKDApO1xuICAgIGNvbnN0IGdldEluZGVudFN0eWxlTmFtZSA9ICh1c2VNYXJnaW4sIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGluZGVudFN0eWxlTmFtZSA9IHVzZU1hcmdpbiB8fCBpc1RhYmxlJDEoZWxlbWVudCkgPyAnbWFyZ2luJyA6ICdwYWRkaW5nJztcbiAgICAgIGNvbnN0IHN1ZmZpeCA9IGdldCQ3KGVsZW1lbnQsICdkaXJlY3Rpb24nKSA9PT0gJ3J0bCcgPyAnLXJpZ2h0JyA6ICctbGVmdCc7XG4gICAgICByZXR1cm4gaW5kZW50U3R5bGVOYW1lICsgc3VmZml4O1xuICAgIH07XG4gICAgY29uc3QgaW5kZW50RWxlbWVudCA9IChkb20sIGNvbW1hbmQsIHVzZU1hcmdpbiwgdmFsdWUsIHVuaXQsIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGluZGVudFN0eWxlTmFtZSA9IGdldEluZGVudFN0eWxlTmFtZSh1c2VNYXJnaW4sIFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsZW1lbnQpKTtcbiAgICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gcGFyc2VJbmRlbnRWYWx1ZShkb20uZ2V0U3R5bGUoZWxlbWVudCwgaW5kZW50U3R5bGVOYW1lKSk7XG4gICAgICBpZiAoY29tbWFuZCA9PT0gJ291dGRlbnQnKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlVmFsdWUgPSBNYXRoLm1heCgwLCBwYXJzZWRWYWx1ZSAtIHZhbHVlKTtcbiAgICAgICAgZG9tLnNldFN0eWxlKGVsZW1lbnQsIGluZGVudFN0eWxlTmFtZSwgc3R5bGVWYWx1ZSA/IHN0eWxlVmFsdWUgKyB1bml0IDogJycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3R5bGVWYWx1ZSA9IHBhcnNlZFZhbHVlICsgdmFsdWUgKyB1bml0O1xuICAgICAgICBkb20uc2V0U3R5bGUoZWxlbWVudCwgaW5kZW50U3R5bGVOYW1lLCBzdHlsZVZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHZhbGlkYXRlQmxvY2tzID0gKGVkaXRvciwgYmxvY2tzKSA9PiBmb3JhbGwoYmxvY2tzLCBibG9jayA9PiB7XG4gICAgICBjb25zdCBpbmRlbnRTdHlsZU5hbWUgPSBnZXRJbmRlbnRTdHlsZU5hbWUoc2hvdWxkSW5kZW50VXNlTWFyZ2luKGVkaXRvciksIGJsb2NrKTtcbiAgICAgIGNvbnN0IGludGVudFZhbHVlID0gZ2V0UmF3KGJsb2NrLCBpbmRlbnRTdHlsZU5hbWUpLm1hcChwYXJzZUluZGVudFZhbHVlKS5nZXRPcigwKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRFZGl0YWJsZSA9IGVkaXRvci5kb20uZ2V0Q29udGVudEVkaXRhYmxlKGJsb2NrLmRvbSk7XG4gICAgICByZXR1cm4gY29udGVudEVkaXRhYmxlICE9PSAnZmFsc2UnICYmIGludGVudFZhbHVlID4gMDtcbiAgICB9KTtcbiAgICBjb25zdCBjYW5PdXRkZW50ID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGJsb2NrcyA9IGdldEJsb2Nrc1RvSW5kZW50KGVkaXRvcik7XG4gICAgICByZXR1cm4gIWVkaXRvci5tb2RlLmlzUmVhZE9ubHkoKSAmJiAoYmxvY2tzLmxlbmd0aCA+IDEgfHwgdmFsaWRhdGVCbG9ja3MoZWRpdG9yLCBibG9ja3MpKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzTGlzdENvbXBvbmVudCA9IGVsID0+IGlzTGlzdChlbCkgfHwgaXNMaXN0SXRlbSQxKGVsKTtcbiAgICBjb25zdCBwYXJlbnRJc0xpc3RDb21wb25lbnQgPSBlbCA9PiBwYXJlbnQoZWwpLmV4aXN0cyhpc0xpc3RDb21wb25lbnQpO1xuICAgIGNvbnN0IGdldEJsb2Nrc1RvSW5kZW50ID0gZWRpdG9yID0+IGZpbHRlciQ1KGZyb21Eb20kMShlZGl0b3Iuc2VsZWN0aW9uLmdldFNlbGVjdGVkQmxvY2tzKCkpLCBlbCA9PiAhaXNMaXN0Q29tcG9uZW50KGVsKSAmJiAhcGFyZW50SXNMaXN0Q29tcG9uZW50KGVsKSAmJiBpc0VkaXRhYmxlKGVsKSk7XG4gICAgY29uc3QgaGFuZGxlID0gKGVkaXRvciwgY29tbWFuZCkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGNvbnN0IHtkb219ID0gZWRpdG9yO1xuICAgICAgY29uc3QgaW5kZW50YXRpb24gPSBnZXRJbmRlbnRhdGlvbihlZGl0b3IpO1xuICAgICAgY29uc3QgaW5kZW50VW5pdCA9IChfYiA9IChfYSA9IC9bYS16JV0rJC9pLmV4ZWMoaW5kZW50YXRpb24pKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbMF0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICdweCc7XG4gICAgICBjb25zdCBpbmRlbnRWYWx1ZSA9IHBhcnNlSW5kZW50VmFsdWUoaW5kZW50YXRpb24pO1xuICAgICAgY29uc3QgdXNlTWFyZ2luID0gc2hvdWxkSW5kZW50VXNlTWFyZ2luKGVkaXRvcik7XG4gICAgICBlYWNoJGUoZ2V0QmxvY2tzVG9JbmRlbnQoZWRpdG9yKSwgYmxvY2sgPT4ge1xuICAgICAgICBpbmRlbnRFbGVtZW50KGRvbSwgY29tbWFuZCwgdXNlTWFyZ2luLCBpbmRlbnRWYWx1ZSwgaW5kZW50VW5pdCwgYmxvY2suZG9tKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW5kZW50ID0gZWRpdG9yID0+IGhhbmRsZShlZGl0b3IsICdpbmRlbnQnKTtcbiAgICBjb25zdCBvdXRkZW50ID0gZWRpdG9yID0+IGhhbmRsZShlZGl0b3IsICdvdXRkZW50Jyk7XG5cbiAgICBjb25zdCBiYWNrc3BhY2VEZWxldGUkMSA9IGVkaXRvciA9PiB7XG4gICAgICBpZiAoZWRpdG9yLnNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpICYmIGNhbk91dGRlbnQoZWRpdG9yKSkge1xuICAgICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgICBjb25zdCBwb3MgPSBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KHJuZyk7XG4gICAgICAgIGNvbnN0IGJsb2NrID0gZG9tLmdldFBhcmVudChybmcuc3RhcnRDb250YWluZXIsIGRvbS5pc0Jsb2NrKTtcbiAgICAgICAgaWYgKGJsb2NrICE9PSBudWxsICYmIGlzQXRTdGFydE9mQmxvY2soU3VnYXJFbGVtZW50LmZyb21Eb20oYmxvY2spLCBwb3MpKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoKCkgPT4gb3V0ZGVudChlZGl0b3IpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmluZEFjdGlvbiA9IChlZGl0b3IsIGNhcmV0LCBmb3J3YXJkKSA9PiBmaW5kTWFwKFtcbiAgICAgIGJhY2tzcGFjZURlbGV0ZSQxLFxuICAgICAgYmFja3NwYWNlRGVsZXRlJDYsXG4gICAgICBiYWNrc3BhY2VEZWxldGUkNyxcbiAgICAgIChlZGl0b3IsIGZvcndhcmQpID0+IGJhY2tzcGFjZURlbGV0ZSQ0KGVkaXRvciwgY2FyZXQsIGZvcndhcmQpLFxuICAgICAgYmFja3NwYWNlRGVsZXRlJDksXG4gICAgICBiYWNrc3BhY2VEZWxldGUkYSxcbiAgICAgIGJhY2tzcGFjZURlbGV0ZSQ1LFxuICAgICAgYmFja3NwYWNlRGVsZXRlJDIsXG4gICAgICBiYWNrc3BhY2VEZWxldGUkOCxcbiAgICAgIGJhY2tzcGFjZURlbGV0ZSQzXG4gICAgXSwgaXRlbSA9PiBpdGVtKGVkaXRvciwgZm9yd2FyZCkpLmZpbHRlcihfID0+IGVkaXRvci5zZWxlY3Rpb24uaXNFZGl0YWJsZSgpKTtcbiAgICBjb25zdCBkZWxldGVDb21tYW5kID0gKGVkaXRvciwgY2FyZXQpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRBY3Rpb24oZWRpdG9yLCBjYXJldCwgZmFsc2UpO1xuICAgICAgcmVzdWx0LmZvbGQoKCkgPT4ge1xuICAgICAgICBleGVjTmF0aXZlRGVsZXRlQ29tbWFuZChlZGl0b3IpO1xuICAgICAgICBwYWRkRW1wdHlCb2R5KGVkaXRvcik7XG4gICAgICB9LCBjYWxsKTtcbiAgICB9O1xuICAgIGNvbnN0IGZvcndhcmREZWxldGVDb21tYW5kID0gKGVkaXRvciwgY2FyZXQpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRBY3Rpb24oZWRpdG9yLCBjYXJldCwgdHJ1ZSk7XG4gICAgICByZXN1bHQuZm9sZCgoKSA9PiBleGVjTmF0aXZlRm9yd2FyZERlbGV0ZUNvbW1hbmQoZWRpdG9yKSwgY2FsbCk7XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cCRwID0gKGVkaXRvciwgY2FyZXQpID0+IHtcbiAgICAgIGVkaXRvci5hZGRDb21tYW5kKCdkZWxldGUnLCAoKSA9PiB7XG4gICAgICAgIGRlbGV0ZUNvbW1hbmQoZWRpdG9yLCBjYXJldCk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5hZGRDb21tYW5kKCdmb3J3YXJkRGVsZXRlJywgKCkgPT4ge1xuICAgICAgICBmb3J3YXJkRGVsZXRlQ29tbWFuZChlZGl0b3IsIGNhcmV0KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBTSUdOSUZJQ0FOVF9NT1ZFID0gNTtcbiAgICBjb25zdCBMT05HUFJFU1NfREVMQVkgPSA0MDA7XG4gICAgY29uc3QgZ2V0VG91Y2ggPSBldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnQudG91Y2hlcyA9PT0gdW5kZWZpbmVkIHx8IGV2ZW50LnRvdWNoZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShldmVudC50b3VjaGVzWzBdKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzRmFyRW5vdWdoID0gKHRvdWNoLCBkYXRhKSA9PiB7XG4gICAgICBjb25zdCBkaXN0WCA9IE1hdGguYWJzKHRvdWNoLmNsaWVudFggLSBkYXRhLngpO1xuICAgICAgY29uc3QgZGlzdFkgPSBNYXRoLmFicyh0b3VjaC5jbGllbnRZIC0gZGF0YS55KTtcbiAgICAgIHJldHVybiBkaXN0WCA+IFNJR05JRklDQU5UX01PVkUgfHwgZGlzdFkgPiBTSUdOSUZJQ0FOVF9NT1ZFO1xuICAgIH07XG4gICAgY29uc3Qgc2V0dXAkbyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBzdGFydERhdGEgPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBsb25ncHJlc3NGaXJlZCA9IENlbGwoZmFsc2UpO1xuICAgICAgY29uc3QgZGVib3VuY2VMb25ncHJlc3MgPSBsYXN0JDEoZSA9PiB7XG4gICAgICAgIGVkaXRvci5kaXNwYXRjaCgnbG9uZ3ByZXNzJywge1xuICAgICAgICAgIC4uLmUsXG4gICAgICAgICAgdHlwZTogJ2xvbmdwcmVzcydcbiAgICAgICAgfSk7XG4gICAgICAgIGxvbmdwcmVzc0ZpcmVkLnNldCh0cnVlKTtcbiAgICAgIH0sIExPTkdQUkVTU19ERUxBWSk7XG4gICAgICBlZGl0b3Iub24oJ3RvdWNoc3RhcnQnLCBlID0+IHtcbiAgICAgICAgZ2V0VG91Y2goZSkuZWFjaCh0b3VjaCA9PiB7XG4gICAgICAgICAgZGVib3VuY2VMb25ncHJlc3MuY2FuY2VsKCk7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIHg6IHRvdWNoLmNsaWVudFgsXG4gICAgICAgICAgICB5OiB0b3VjaC5jbGllbnRZLFxuICAgICAgICAgICAgdGFyZ2V0OiBlLnRhcmdldFxuICAgICAgICAgIH07XG4gICAgICAgICAgZGVib3VuY2VMb25ncHJlc3MudGhyb3R0bGUoZSk7XG4gICAgICAgICAgbG9uZ3ByZXNzRmlyZWQuc2V0KGZhbHNlKTtcbiAgICAgICAgICBzdGFydERhdGEuc2V0KGRhdGEpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHRydWUpO1xuICAgICAgZWRpdG9yLm9uKCd0b3VjaG1vdmUnLCBlID0+IHtcbiAgICAgICAgZGVib3VuY2VMb25ncHJlc3MuY2FuY2VsKCk7XG4gICAgICAgIGdldFRvdWNoKGUpLmVhY2godG91Y2ggPT4ge1xuICAgICAgICAgIHN0YXJ0RGF0YS5vbihkYXRhID0+IHtcbiAgICAgICAgICAgIGlmIChpc0ZhckVub3VnaCh0b3VjaCwgZGF0YSkpIHtcbiAgICAgICAgICAgICAgc3RhcnREYXRhLmNsZWFyKCk7XG4gICAgICAgICAgICAgIGxvbmdwcmVzc0ZpcmVkLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgIGVkaXRvci5kaXNwYXRjaCgnbG9uZ3ByZXNzY2FuY2VsJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgdHJ1ZSk7XG4gICAgICBlZGl0b3Iub24oJ3RvdWNoZW5kIHRvdWNoY2FuY2VsJywgZSA9PiB7XG4gICAgICAgIGRlYm91bmNlTG9uZ3ByZXNzLmNhbmNlbCgpO1xuICAgICAgICBpZiAoZS50eXBlID09PSAndG91Y2hjYW5jZWwnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN0YXJ0RGF0YS5nZXQoKS5maWx0ZXIoZGF0YSA9PiBkYXRhLnRhcmdldC5pc0VxdWFsTm9kZShlLnRhcmdldCkpLmVhY2goKCkgPT4ge1xuICAgICAgICAgIGlmIChsb25ncHJlc3NGaXJlZC5nZXQoKSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ3RhcCcsIHtcbiAgICAgICAgICAgICAgLi4uZSxcbiAgICAgICAgICAgICAgdHlwZTogJ3RhcCdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LCB0cnVlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNCbG9ja0VsZW1lbnQgPSAoYmxvY2tFbGVtZW50cywgbm9kZSkgPT4gaGFzJDIoYmxvY2tFbGVtZW50cywgbm9kZS5ub2RlTmFtZSk7XG4gICAgY29uc3QgaXNWYWxpZFRhcmdldCA9IChzY2hlbWEsIG5vZGUpID0+IHtcbiAgICAgIGlmIChpc1RleHQkYShub2RlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoaXNFbGVtZW50JDYobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuICFpc0Jsb2NrRWxlbWVudChzY2hlbWEuZ2V0QmxvY2tFbGVtZW50cygpLCBub2RlKSAmJiAhaXNCb29rbWFya05vZGUkMShub2RlKSAmJiAhaXNUcmFuc3BhcmVudEJsb2NrKHNjaGVtYSwgbm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoYXNCbG9ja1BhcmVudCA9IChibG9ja0VsZW1lbnRzLCByb290LCBub2RlKSA9PiB7XG4gICAgICByZXR1cm4gZXhpc3RzKHBhcmVudHMoU3VnYXJFbGVtZW50LmZyb21Eb20obm9kZSksIFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJvb3QpKSwgZWxtID0+IHtcbiAgICAgICAgcmV0dXJuIGlzQmxvY2tFbGVtZW50KGJsb2NrRWxlbWVudHMsIGVsbS5kb20pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzaG91bGRSZW1vdmVUZXh0Tm9kZSA9IChibG9ja0VsZW1lbnRzLCBub2RlKSA9PiB7XG4gICAgICBpZiAoaXNUZXh0JGEobm9kZSkpIHtcbiAgICAgICAgaWYgKG5vZGUuZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICgvXlxccyskLy50ZXN0KG5vZGUuZGF0YSkgJiYgKCFub2RlLm5leHRTaWJsaW5nIHx8IGlzQmxvY2tFbGVtZW50KGJsb2NrRWxlbWVudHMsIG5vZGUubmV4dFNpYmxpbmcpKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVSb290QmxvY2sgPSBlZGl0b3IgPT4gZWRpdG9yLmRvbS5jcmVhdGUoZ2V0Rm9yY2VkUm9vdEJsb2NrKGVkaXRvciksIGdldEZvcmNlZFJvb3RCbG9ja0F0dHJzKGVkaXRvcikpO1xuICAgIGNvbnN0IGFkZFJvb3RCbG9ja3MgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbSwgc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IGVkaXRvci5zY2hlbWE7XG4gICAgICBjb25zdCBibG9ja0VsZW1lbnRzID0gc2NoZW1hLmdldEJsb2NrRWxlbWVudHMoKTtcbiAgICAgIGNvbnN0IHN0YXJ0Tm9kZSA9IHNlbGVjdGlvbi5nZXRTdGFydCgpO1xuICAgICAgY29uc3Qgcm9vdE5vZGUgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgbGV0IHJvb3RCbG9ja05vZGU7XG4gICAgICBsZXQgdGVtcE5vZGU7XG4gICAgICBsZXQgd3JhcHBlZCA9IGZhbHNlO1xuICAgICAgY29uc3QgZm9yY2VkUm9vdEJsb2NrID0gZ2V0Rm9yY2VkUm9vdEJsb2NrKGVkaXRvcik7XG4gICAgICBpZiAoIXN0YXJ0Tm9kZSB8fCAhaXNFbGVtZW50JDYoc3RhcnROb2RlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCByb290Tm9kZU5hbWUgPSByb290Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKCFzY2hlbWEuaXNWYWxpZENoaWxkKHJvb3ROb2RlTmFtZSwgZm9yY2VkUm9vdEJsb2NrLnRvTG93ZXJDYXNlKCkpIHx8IGhhc0Jsb2NrUGFyZW50KGJsb2NrRWxlbWVudHMsIHJvb3ROb2RlLCBzdGFydE5vZGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJuZyA9IHNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIGNvbnN0IHtzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQsIGVuZENvbnRhaW5lciwgZW5kT2Zmc2V0fSA9IHJuZztcbiAgICAgIGNvbnN0IHJlc3RvcmVTZWxlY3Rpb24gPSBoYXNGb2N1cyhlZGl0b3IpO1xuICAgICAgbGV0IG5vZGUgPSByb290Tm9kZS5maXJzdENoaWxkO1xuICAgICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgaWYgKGlzRWxlbWVudCQ2KG5vZGUpKSB7XG4gICAgICAgICAgdXBkYXRlRWxlbWVudChzY2hlbWEsIG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1ZhbGlkVGFyZ2V0KHNjaGVtYSwgbm9kZSkpIHtcbiAgICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlVGV4dE5vZGUoYmxvY2tFbGVtZW50cywgbm9kZSkpIHtcbiAgICAgICAgICAgIHRlbXBOb2RlID0gbm9kZTtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgZG9tLnJlbW92ZSh0ZW1wTm9kZSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFyb290QmxvY2tOb2RlKSB7XG4gICAgICAgICAgICByb290QmxvY2tOb2RlID0gY3JlYXRlUm9vdEJsb2NrKGVkaXRvcik7XG4gICAgICAgICAgICByb290Tm9kZS5pbnNlcnRCZWZvcmUocm9vdEJsb2NrTm9kZSwgbm9kZSk7XG4gICAgICAgICAgICB3cmFwcGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGVtcE5vZGUgPSBub2RlO1xuICAgICAgICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgICAgIHJvb3RCbG9ja05vZGUuYXBwZW5kQ2hpbGQodGVtcE5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvb3RCbG9ja05vZGUgPSBudWxsO1xuICAgICAgICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAod3JhcHBlZCAmJiByZXN0b3JlU2VsZWN0aW9uKSB7XG4gICAgICAgIHJuZy5zZXRTdGFydChzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQpO1xuICAgICAgICBybmcuc2V0RW5kKGVuZENvbnRhaW5lciwgZW5kT2Zmc2V0KTtcbiAgICAgICAgc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGluc2VydEVtcHR5TGluZSA9IChlZGl0b3IsIHJvb3QsIGluc2VydEJsb2NrKSA9PiB7XG4gICAgICBjb25zdCBibG9jayA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGNyZWF0ZVJvb3RCbG9jayhlZGl0b3IpKTtcbiAgICAgIGNvbnN0IGJyID0gY3JlYXRlUGFkZGluZ0JyKCk7XG4gICAgICBhcHBlbmQkMShibG9jaywgYnIpO1xuICAgICAgaW5zZXJ0QmxvY2socm9vdCwgYmxvY2spO1xuICAgICAgY29uc3Qgcm5nID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHJuZy5zZXRTdGFydEJlZm9yZShici5kb20pO1xuICAgICAgcm5nLnNldEVuZEJlZm9yZShici5kb20pO1xuICAgICAgcmV0dXJuIHJuZztcbiAgICB9O1xuICAgIGNvbnN0IHNldHVwJG4gPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLm9uKCdOb2RlQ2hhbmdlJywgY3VycnkoYWRkUm9vdEJsb2NrcywgZWRpdG9yKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhc0NsYXNzID0gY2hlY2tDbGFzc05hbWUgPT4gbm9kZSA9PiAoJyAnICsgbm9kZS5hdHRyKCdjbGFzcycpICsgJyAnKS5pbmRleE9mKGNoZWNrQ2xhc3NOYW1lKSAhPT0gLTE7XG4gICAgY29uc3QgcmVwbGFjZU1hdGNoV2l0aFNwYW4gPSAoZWRpdG9yLCBjb250ZW50LCBjbHMpID0+IHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IGFyZ3VtZW50cywgaW5kZXggPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMl07XG4gICAgICAgIGNvbnN0IHByZXZDaGFyID0gaW5kZXggPiAwID8gY29udGVudC5jaGFyQXQoaW5kZXggLSAxKSA6ICcnO1xuICAgICAgICBpZiAocHJldkNoYXIgPT09ICdcIicpIHtcbiAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXZDaGFyID09PSAnPicpIHtcbiAgICAgICAgICBjb25zdCBmaW5kU3RhcnRUYWdJbmRleCA9IGNvbnRlbnQubGFzdEluZGV4T2YoJzwnLCBpbmRleCk7XG4gICAgICAgICAgaWYgKGZpbmRTdGFydFRhZ0luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgY29uc3QgdGFnSHRtbCA9IGNvbnRlbnQuc3Vic3RyaW5nKGZpbmRTdGFydFRhZ0luZGV4LCBpbmRleCk7XG4gICAgICAgICAgICBpZiAodGFnSHRtbC5pbmRleE9mKCdjb250ZW50ZWRpdGFibGU9XCJmYWxzZVwiJykgIT09IC0xKSB7XG4gICAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIicgKyBjbHMgKyAnXCIgZGF0YS1tY2UtY29udGVudD1cIicgKyBlZGl0b3IuZG9tLmVuY29kZShhcmdzWzBdKSArICdcIj4nICsgZWRpdG9yLmRvbS5lbmNvZGUodHlwZW9mIGFyZ3NbMV0gPT09ICdzdHJpbmcnID8gYXJnc1sxXSA6IGFyZ3NbMF0pICsgJzwvc3Bhbj4nO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbnZlcnRSZWdFeHBzVG9Ob25FZGl0YWJsZSA9IChlZGl0b3IsIG5vbkVkaXRhYmxlUmVnRXhwcywgZSkgPT4ge1xuICAgICAgbGV0IGkgPSBub25FZGl0YWJsZVJlZ0V4cHMubGVuZ3RoLCBjb250ZW50ID0gZS5jb250ZW50O1xuICAgICAgaWYgKGUuZm9ybWF0ID09PSAncmF3Jykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2Uobm9uRWRpdGFibGVSZWdFeHBzW2ldLCByZXBsYWNlTWF0Y2hXaXRoU3BhbihlZGl0b3IsIGNvbnRlbnQsIGdldE5vbkVkaXRhYmxlQ2xhc3MoZWRpdG9yKSkpO1xuICAgICAgfVxuICAgICAgZS5jb250ZW50ID0gY29udGVudDtcbiAgICB9O1xuICAgIGNvbnN0IHNldHVwJG0gPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgY29udGVudEVkaXRhYmxlQXR0ck5hbWUgPSAnY29udGVudGVkaXRhYmxlJztcbiAgICAgIGNvbnN0IGVkaXRDbGFzcyA9ICcgJyArIFRvb2xzLnRyaW0oZ2V0RWRpdGFibGVDbGFzcyhlZGl0b3IpKSArICcgJztcbiAgICAgIGNvbnN0IG5vbkVkaXRDbGFzcyA9ICcgJyArIFRvb2xzLnRyaW0oZ2V0Tm9uRWRpdGFibGVDbGFzcyhlZGl0b3IpKSArICcgJztcbiAgICAgIGNvbnN0IGhhc0VkaXRDbGFzcyA9IGhhc0NsYXNzKGVkaXRDbGFzcyk7XG4gICAgICBjb25zdCBoYXNOb25FZGl0Q2xhc3MgPSBoYXNDbGFzcyhub25FZGl0Q2xhc3MpO1xuICAgICAgY29uc3Qgbm9uRWRpdGFibGVSZWdFeHBzID0gZ2V0Tm9uRWRpdGFibGVSZWdFeHBzKGVkaXRvcik7XG4gICAgICBpZiAobm9uRWRpdGFibGVSZWdFeHBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZWRpdG9yLm9uKCdCZWZvcmVTZXRDb250ZW50JywgZSA9PiB7XG4gICAgICAgICAgY29udmVydFJlZ0V4cHNUb05vbkVkaXRhYmxlKGVkaXRvciwgbm9uRWRpdGFibGVSZWdFeHBzLCBlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlZGl0b3IucGFyc2VyLmFkZEF0dHJpYnV0ZUZpbHRlcignY2xhc3MnLCBub2RlcyA9PiB7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICAgIGlmIChoYXNFZGl0Q2xhc3Mobm9kZSkpIHtcbiAgICAgICAgICAgIG5vZGUuYXR0cihjb250ZW50RWRpdGFibGVBdHRyTmFtZSwgJ3RydWUnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc05vbkVkaXRDbGFzcyhub2RlKSkge1xuICAgICAgICAgICAgbm9kZS5hdHRyKGNvbnRlbnRFZGl0YWJsZUF0dHJOYW1lLCAnZmFsc2UnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLnNlcmlhbGl6ZXIuYWRkQXR0cmlidXRlRmlsdGVyKGNvbnRlbnRFZGl0YWJsZUF0dHJOYW1lLCBub2RlcyA9PiB7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICAgIGlmICghaGFzRWRpdENsYXNzKG5vZGUpICYmICFoYXNOb25FZGl0Q2xhc3Mobm9kZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobm9uRWRpdGFibGVSZWdFeHBzLmxlbmd0aCA+IDAgJiYgbm9kZS5hdHRyKCdkYXRhLW1jZS1jb250ZW50JykpIHtcbiAgICAgICAgICAgIG5vZGUubmFtZSA9ICcjdGV4dCc7XG4gICAgICAgICAgICBub2RlLnR5cGUgPSAzO1xuICAgICAgICAgICAgbm9kZS5yYXcgPSB0cnVlO1xuICAgICAgICAgICAgbm9kZS52YWx1ZSA9IG5vZGUuYXR0cignZGF0YS1tY2UtY29udGVudCcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBub2RlLmF0dHIoY29udGVudEVkaXRhYmxlQXR0ck5hbWUsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZpbmRCbG9ja0NhcmV0Q29udGFpbmVyID0gZWRpdG9yID0+IGRlc2NlbmRhbnQoU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSksICcqW2RhdGEtbWNlLWNhcmV0XScpLm1hcChlbG0gPT4gZWxtLmRvbSkuZ2V0T3JOdWxsKCk7XG4gICAgY29uc3Qgc2hvd0Jsb2NrQ2FyZXRDb250YWluZXIgPSAoZWRpdG9yLCBibG9ja0NhcmV0Q29udGFpbmVyKSA9PiB7XG4gICAgICBpZiAoYmxvY2tDYXJldENvbnRhaW5lci5oYXNBdHRyaWJ1dGUoJ2RhdGEtbWNlLWNhcmV0JykpIHtcbiAgICAgICAgc2hvd0NhcmV0Q29udGFpbmVyQmxvY2soYmxvY2tDYXJldENvbnRhaW5lcik7XG4gICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpO1xuICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNjcm9sbEludG9WaWV3KGJsb2NrQ2FyZXRDb250YWluZXIpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaGFuZGxlQmxvY2tDb250YWluZXIgPSAoZWRpdG9yLCBlKSA9PiB7XG4gICAgICBjb25zdCBibG9ja0NhcmV0Q29udGFpbmVyID0gZmluZEJsb2NrQ2FyZXRDb250YWluZXIoZWRpdG9yKTtcbiAgICAgIGlmICghYmxvY2tDYXJldENvbnRhaW5lcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZS50eXBlID09PSAnY29tcG9zaXRpb25zdGFydCcpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBzaG93QmxvY2tDYXJldENvbnRhaW5lcihlZGl0b3IsIGJsb2NrQ2FyZXRDb250YWluZXIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoaGFzQ29udGVudChibG9ja0NhcmV0Q29udGFpbmVyKSkge1xuICAgICAgICBzaG93QmxvY2tDYXJldENvbnRhaW5lcihlZGl0b3IsIGJsb2NrQ2FyZXRDb250YWluZXIpO1xuICAgICAgICBlZGl0b3IudW5kb01hbmFnZXIuYWRkKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cCRsID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5vbigna2V5dXAgY29tcG9zaXRpb25zdGFydCcsIGN1cnJ5KGhhbmRsZUJsb2NrQ29udGFpbmVyLCBlZGl0b3IpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNDb250ZW50RWRpdGFibGVGYWxzZSQzID0gaXNDb250ZW50RWRpdGFibGVGYWxzZSRiO1xuICAgIGNvbnN0IG1vdmVUb0NlRmFsc2VIb3Jpem9udGFsbHkgPSAoZGlyZWN0aW9uLCBlZGl0b3IsIHJhbmdlKSA9PiBtb3ZlSG9yaXpvbnRhbGx5KGVkaXRvciwgZGlyZWN0aW9uLCByYW5nZSwgaXNCZWZvcmVDb250ZW50RWRpdGFibGVGYWxzZSwgaXNBZnRlckNvbnRlbnRFZGl0YWJsZUZhbHNlLCBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJDMpO1xuICAgIGNvbnN0IG1vdmVUb0NlRmFsc2VWZXJ0aWNhbGx5ID0gKGRpcmVjdGlvbiwgZWRpdG9yLCByYW5nZSkgPT4ge1xuICAgICAgY29uc3QgaXNCZWZvcmUgPSBjYXJldFBvc2l0aW9uID0+IGlzQmVmb3JlQ29udGVudEVkaXRhYmxlRmFsc2UoY2FyZXRQb3NpdGlvbikgfHwgaXNCZWZvcmVUYWJsZShjYXJldFBvc2l0aW9uKTtcbiAgICAgIGNvbnN0IGlzQWZ0ZXIgPSBjYXJldFBvc2l0aW9uID0+IGlzQWZ0ZXJDb250ZW50RWRpdGFibGVGYWxzZShjYXJldFBvc2l0aW9uKSB8fCBpc0FmdGVyVGFibGUoY2FyZXRQb3NpdGlvbik7XG4gICAgICByZXR1cm4gbW92ZVZlcnRpY2FsbHkoZWRpdG9yLCBkaXJlY3Rpb24sIHJhbmdlLCBpc0JlZm9yZSwgaXNBZnRlciwgaXNDb250ZW50RWRpdGFibGVGYWxzZSQzKTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZVRleHRCbG9jayA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCB0ZXh0QmxvY2sgPSBlZGl0b3IuZG9tLmNyZWF0ZShnZXRGb3JjZWRSb290QmxvY2soZWRpdG9yKSk7XG4gICAgICB0ZXh0QmxvY2suaW5uZXJIVE1MID0gJzxiciBkYXRhLW1jZS1ib2d1cz1cIjFcIj4nO1xuICAgICAgcmV0dXJuIHRleHRCbG9jaztcbiAgICB9O1xuICAgIGNvbnN0IGV4aXRQcmVCbG9jayA9IChlZGl0b3IsIGRpcmVjdGlvbiwgcmFuZ2UpID0+IHtcbiAgICAgIGNvbnN0IGNhcmV0V2Fsa2VyID0gQ2FyZXRXYWxrZXIoZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBjb25zdCBnZXRWaXN1YWxDYXJldFBvc2l0aW9uJDEgPSBjdXJyeShnZXRWaXN1YWxDYXJldFBvc2l0aW9uLCBkaXJlY3Rpb24gPT09IDEgPyBjYXJldFdhbGtlci5uZXh0IDogY2FyZXRXYWxrZXIucHJldik7XG4gICAgICBpZiAocmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgICAgIGNvbnN0IHByZSA9IGVkaXRvci5kb20uZ2V0UGFyZW50KHJhbmdlLnN0YXJ0Q29udGFpbmVyLCAnUFJFJyk7XG4gICAgICAgIGlmICghcHJlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhcmV0UG9zID0gZ2V0VmlzdWFsQ2FyZXRQb3NpdGlvbiQxKENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQocmFuZ2UpKTtcbiAgICAgICAgaWYgKCFjYXJldFBvcykge1xuICAgICAgICAgIGNvbnN0IG5ld0Jsb2NrID0gU3VnYXJFbGVtZW50LmZyb21Eb20oY3JlYXRlVGV4dEJsb2NrKGVkaXRvcikpO1xuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IDEpIHtcbiAgICAgICAgICAgIGFmdGVyJDQoU3VnYXJFbGVtZW50LmZyb21Eb20ocHJlKSwgbmV3QmxvY2spO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiZWZvcmUkMyhTdWdhckVsZW1lbnQuZnJvbURvbShwcmUpLCBuZXdCbG9jayk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0KG5ld0Jsb2NrLmRvbSwgdHJ1ZSk7XG4gICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5jb2xsYXBzZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRIb3Jpem9udGFsUmFuZ2UgPSAoZWRpdG9yLCBmb3J3YXJkKSA9PiB7XG4gICAgICBjb25zdCBkaXJlY3Rpb24gPSBmb3J3YXJkID8gSERpcmVjdGlvbi5Gb3J3YXJkcyA6IEhEaXJlY3Rpb24uQmFja3dhcmRzO1xuICAgICAgY29uc3QgcmFuZ2UgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgcmV0dXJuIG1vdmVUb0NlRmFsc2VIb3Jpem9udGFsbHkoZGlyZWN0aW9uLCBlZGl0b3IsIHJhbmdlKS5vclRodW5rKCgpID0+IHtcbiAgICAgICAgZXhpdFByZUJsb2NrKGVkaXRvciwgZGlyZWN0aW9uLCByYW5nZSk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFZlcnRpY2FsUmFuZ2UgPSAoZWRpdG9yLCBkb3duKSA9PiB7XG4gICAgICBjb25zdCBkaXJlY3Rpb24gPSBkb3duID8gMSA6IC0xO1xuICAgICAgY29uc3QgcmFuZ2UgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgcmV0dXJuIG1vdmVUb0NlRmFsc2VWZXJ0aWNhbGx5KGRpcmVjdGlvbiwgZWRpdG9yLCByYW5nZSkub3JUaHVuaygoKSA9PiB7XG4gICAgICAgIGV4aXRQcmVCbG9jayhlZGl0b3IsIGRpcmVjdGlvbiwgcmFuZ2UpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBmbGlwRGlyZWN0aW9uID0gKHNlbGVjdGlvbiwgZm9yd2FyZCkgPT4ge1xuICAgICAgY29uc3QgZWxtID0gZm9yd2FyZCA/IHNlbGVjdGlvbi5nZXRFbmQodHJ1ZSkgOiBzZWxlY3Rpb24uZ2V0U3RhcnQodHJ1ZSk7XG4gICAgICByZXR1cm4gaXNSdGwoZWxtKSA/ICFmb3J3YXJkIDogZm9yd2FyZDtcbiAgICB9O1xuICAgIGNvbnN0IG1vdmVIJDIgPSAoZWRpdG9yLCBmb3J3YXJkKSA9PiBnZXRIb3Jpem9udGFsUmFuZ2UoZWRpdG9yLCBmbGlwRGlyZWN0aW9uKGVkaXRvci5zZWxlY3Rpb24sIGZvcndhcmQpKS5leGlzdHMobmV3UmFuZ2UgPT4ge1xuICAgICAgbW92ZVRvUmFuZ2UoZWRpdG9yLCBuZXdSYW5nZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICBjb25zdCBtb3ZlViQ0ID0gKGVkaXRvciwgZG93bikgPT4gZ2V0VmVydGljYWxSYW5nZShlZGl0b3IsIGRvd24pLmV4aXN0cyhuZXdSYW5nZSA9PiB7XG4gICAgICBtb3ZlVG9SYW5nZShlZGl0b3IsIG5ld1JhbmdlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICAgIGNvbnN0IG1vdmVUb0xpbmVFbmRQb2ludCQxID0gKGVkaXRvciwgZm9yd2FyZCkgPT4ge1xuICAgICAgY29uc3QgaXNDZWZQb3NpdGlvbiA9IGZvcndhcmQgPyBpc0FmdGVyQ29udGVudEVkaXRhYmxlRmFsc2UgOiBpc0JlZm9yZUNvbnRlbnRFZGl0YWJsZUZhbHNlO1xuICAgICAgcmV0dXJuIG1vdmVUb0xpbmVFbmRQb2ludCQzKGVkaXRvciwgZm9yd2FyZCwgaXNDZWZQb3NpdGlvbik7XG4gICAgfTtcbiAgICBjb25zdCBzZWxlY3RUb0VuZFBvaW50ID0gKGVkaXRvciwgZm9yd2FyZCkgPT4gZ2V0RWRnZUNlZlBvc2l0aW9uKGVkaXRvciwgIWZvcndhcmQpLm1hcChwb3MgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gcG9zLnRvUmFuZ2UoKTtcbiAgICAgIGNvbnN0IGN1clJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBpZiAoZm9yd2FyZCkge1xuICAgICAgICBybmcuc2V0U3RhcnQoY3VyUm5nLnN0YXJ0Q29udGFpbmVyLCBjdXJSbmcuc3RhcnRPZmZzZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm5nLnNldEVuZChjdXJSbmcuZW5kQ29udGFpbmVyLCBjdXJSbmcuZW5kT2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBybmc7XG4gICAgfSkuZXhpc3RzKHJuZyA9PiB7XG4gICAgICBtb3ZlVG9SYW5nZShlZGl0b3IsIHJuZyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGlzVGFyZ2V0ID0gbm9kZSA9PiBjb250YWlucyQyKFsnZmlnY2FwdGlvbiddLCBuYW1lKG5vZGUpKTtcbiAgICBjb25zdCBnZXRDbG9zZXN0VGFyZ2V0QmxvY2sgPSAocG9zLCByb290KSA9PiB7XG4gICAgICBjb25zdCBpc1Jvb3QgPSBjdXJyeShlcSwgcm9vdCk7XG4gICAgICByZXR1cm4gY2xvc2VzdCQ0KFN1Z2FyRWxlbWVudC5mcm9tRG9tKHBvcy5jb250YWluZXIoKSksIGlzQmxvY2skMiwgaXNSb290KS5maWx0ZXIoaXNUYXJnZXQpO1xuICAgIH07XG4gICAgY29uc3QgaXNBdEZpcnN0T3JMYXN0TGluZSA9IChyb290LCBmb3J3YXJkLCBwb3MpID0+IGZvcndhcmQgPyBpc0F0TGFzdExpbmUocm9vdC5kb20sIHBvcykgOiBpc0F0Rmlyc3RMaW5lKHJvb3QuZG9tLCBwb3MpO1xuICAgIGNvbnN0IG1vdmVDYXJldFRvTmV3RW1wdHlMaW5lID0gKGVkaXRvciwgZm9yd2FyZCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgY29uc3QgcG9zID0gQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKTtcbiAgICAgIHJldHVybiBnZXRDbG9zZXN0VGFyZ2V0QmxvY2socG9zLCByb290KS5leGlzdHMoKCkgPT4ge1xuICAgICAgICBpZiAoaXNBdEZpcnN0T3JMYXN0TGluZShyb290LCBmb3J3YXJkLCBwb3MpKSB7XG4gICAgICAgICAgY29uc3QgaW5zZXJ0Rm4gPSBmb3J3YXJkID8gYXBwZW5kJDEgOiBwcmVwZW5kO1xuICAgICAgICAgIGNvbnN0IHJuZyA9IGluc2VydEVtcHR5TGluZShlZGl0b3IsIHJvb3QsIGluc2VydEZuKTtcbiAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBtb3ZlViQzID0gKGVkaXRvciwgZm9yd2FyZCkgPT4ge1xuICAgICAgaWYgKGVkaXRvci5zZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSkge1xuICAgICAgICByZXR1cm4gbW92ZUNhcmV0VG9OZXdFbXB0eUxpbmUoZWRpdG9yLCBmb3J3YXJkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgbW92ZVVwID0gKGVkaXRvciwgZGV0YWlscywgc3VtbWFyeSkgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIGNvbnN0IHBvcyA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQocm5nKTtcbiAgICAgIGNvbnN0IHJvb3QgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgaWYgKHJvb3QuZmlyc3RDaGlsZCA9PT0gZGV0YWlscyAmJiBpc0F0Rmlyc3RMaW5lKHN1bW1hcnksIHBvcykpIHtcbiAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdJbnNlcnROZXdCbG9ja0JlZm9yZScpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1vdmVEb3duID0gKGVkaXRvciwgZGV0YWlscykgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIGNvbnN0IHBvcyA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQocm5nKTtcbiAgICAgIGNvbnN0IHJvb3QgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgaWYgKHJvb3QubGFzdENoaWxkID09PSBkZXRhaWxzICYmIGlzQXRMYXN0TGluZShkZXRhaWxzLCBwb3MpKSB7XG4gICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnSW5zZXJ0TmV3QmxvY2tBZnRlcicpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1vdmUkMiA9IChlZGl0b3IsIGZvcndhcmQpID0+IHtcbiAgICAgIGlmIChmb3J3YXJkKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKGVkaXRvci5kb20uZ2V0UGFyZW50KGVkaXRvci5zZWxlY3Rpb24uZ2V0Tm9kZSgpLCAnZGV0YWlscycpKS5tYXAoZGV0YWlscyA9PiBtb3ZlRG93bihlZGl0b3IsIGRldGFpbHMpKS5nZXRPcihmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShlZGl0b3IuZG9tLmdldFBhcmVudChlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKSwgJ3N1bW1hcnknKSkuYmluZChzdW1tYXJ5ID0+IE9wdGlvbmFsLmZyb20oZWRpdG9yLmRvbS5nZXRQYXJlbnQoc3VtbWFyeSwgJ2RldGFpbHMnKSkubWFwKGRldGFpbHMgPT4gbW92ZVVwKGVkaXRvciwgZGV0YWlscywgc3VtbWFyeSkpKS5nZXRPcihmYWxzZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBtb3ZlViQyID0gKGVkaXRvciwgZm9yd2FyZCkgPT4gbW92ZSQyKGVkaXRvciwgZm9yd2FyZCk7XG5cbiAgICBjb25zdCBiYXNlS2V5UGF0dGVybiA9IHtcbiAgICAgIHNoaWZ0S2V5OiBmYWxzZSxcbiAgICAgIGFsdEtleTogZmFsc2UsXG4gICAgICBjdHJsS2V5OiBmYWxzZSxcbiAgICAgIG1ldGFLZXk6IGZhbHNlLFxuICAgICAga2V5Q29kZTogMFxuICAgIH07XG4gICAgY29uc3QgZGVmYXVsdFBhdHRlcm5zID0gcGF0dGVybnMgPT4gbWFwJDMocGF0dGVybnMsIHBhdHRlcm4gPT4gKHtcbiAgICAgIC4uLmJhc2VLZXlQYXR0ZXJuLFxuICAgICAgLi4ucGF0dGVyblxuICAgIH0pKTtcbiAgICBjb25zdCBkZWZhdWx0RGVsYXllZFBhdHRlcm5zID0gcGF0dGVybnMgPT4gbWFwJDMocGF0dGVybnMsIHBhdHRlcm4gPT4gKHtcbiAgICAgIC4uLmJhc2VLZXlQYXR0ZXJuLFxuICAgICAgLi4ucGF0dGVyblxuICAgIH0pKTtcbiAgICBjb25zdCBtYXRjaGVzRXZlbnQgPSAocGF0dGVybiwgZXZ0KSA9PiBldnQua2V5Q29kZSA9PT0gcGF0dGVybi5rZXlDb2RlICYmIGV2dC5zaGlmdEtleSA9PT0gcGF0dGVybi5zaGlmdEtleSAmJiBldnQuYWx0S2V5ID09PSBwYXR0ZXJuLmFsdEtleSAmJiBldnQuY3RybEtleSA9PT0gcGF0dGVybi5jdHJsS2V5ICYmIGV2dC5tZXRhS2V5ID09PSBwYXR0ZXJuLm1ldGFLZXk7XG4gICAgY29uc3QgbWF0Y2gkMSA9IChwYXR0ZXJucywgZXZ0KSA9PiBiaW5kJDMoZGVmYXVsdFBhdHRlcm5zKHBhdHRlcm5zKSwgcGF0dGVybiA9PiBtYXRjaGVzRXZlbnQocGF0dGVybiwgZXZ0KSA/IFtwYXR0ZXJuXSA6IFtdKTtcbiAgICBjb25zdCBtYXRjaERlbGF5ZWQgPSAocGF0dGVybnMsIGV2dCkgPT4gYmluZCQzKGRlZmF1bHREZWxheWVkUGF0dGVybnMocGF0dGVybnMpLCBwYXR0ZXJuID0+IG1hdGNoZXNFdmVudChwYXR0ZXJuLCBldnQpID8gW3BhdHRlcm5dIDogW10pO1xuICAgIGNvbnN0IGFjdGlvbiA9IChmLCAuLi54KSA9PiAoKSA9PiBmLmFwcGx5KG51bGwsIHgpO1xuICAgIGNvbnN0IGV4ZWN1dGUgPSAocGF0dGVybnMsIGV2dCkgPT4gZmluZCQyKG1hdGNoJDEocGF0dGVybnMsIGV2dCksIHBhdHRlcm4gPT4gcGF0dGVybi5hY3Rpb24oKSk7XG4gICAgY29uc3QgZXhlY3V0ZVdpdGhEZWxheWVkQWN0aW9uID0gKHBhdHRlcm5zLCBldnQpID0+IGZpbmRNYXAobWF0Y2hEZWxheWVkKHBhdHRlcm5zLCBldnQpLCBwYXR0ZXJuID0+IHBhdHRlcm4uYWN0aW9uKCkpO1xuXG4gICAgY29uc3QgbW92ZUgkMSA9IChlZGl0b3IsIGZvcndhcmQpID0+IHtcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGZvcndhcmQgPyBIRGlyZWN0aW9uLkZvcndhcmRzIDogSERpcmVjdGlvbi5CYWNrd2FyZHM7XG4gICAgICBjb25zdCByYW5nZSA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICByZXR1cm4gbW92ZUhvcml6b250YWxseShlZGl0b3IsIGRpcmVjdGlvbiwgcmFuZ2UsIGlzQmVmb3JlTWVkaWEsIGlzQWZ0ZXJNZWRpYSwgaXNNZWRpYSQyKS5leGlzdHMobmV3UmFuZ2UgPT4ge1xuICAgICAgICBtb3ZlVG9SYW5nZShlZGl0b3IsIG5ld1JhbmdlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG1vdmVWJDEgPSAoZWRpdG9yLCBkb3duKSA9PiB7XG4gICAgICBjb25zdCBkaXJlY3Rpb24gPSBkb3duID8gMSA6IC0xO1xuICAgICAgY29uc3QgcmFuZ2UgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgcmV0dXJuIG1vdmVWZXJ0aWNhbGx5KGVkaXRvciwgZGlyZWN0aW9uLCByYW5nZSwgaXNCZWZvcmVNZWRpYSwgaXNBZnRlck1lZGlhLCBpc01lZGlhJDIpLmV4aXN0cyhuZXdSYW5nZSA9PiB7XG4gICAgICAgIG1vdmVUb1JhbmdlKGVkaXRvciwgbmV3UmFuZ2UpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbW92ZVRvTGluZUVuZFBvaW50ID0gKGVkaXRvciwgZm9yd2FyZCkgPT4ge1xuICAgICAgY29uc3QgaXNOZWFyTWVkaWEgPSBmb3J3YXJkID8gaXNBZnRlck1lZGlhIDogaXNCZWZvcmVNZWRpYTtcbiAgICAgIHJldHVybiBtb3ZlVG9MaW5lRW5kUG9pbnQkMyhlZGl0b3IsIGZvcndhcmQsIGlzTmVhck1lZGlhKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYWR0ID0gQWR0LmdlbmVyYXRlKFtcbiAgICAgIHsgbm9uZTogWydjdXJyZW50J10gfSxcbiAgICAgIHsgZmlyc3Q6IFsnY3VycmVudCddIH0sXG4gICAgICB7XG4gICAgICAgIG1pZGRsZTogW1xuICAgICAgICAgICdjdXJyZW50JyxcbiAgICAgICAgICAndGFyZ2V0J1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgeyBsYXN0OiBbJ2N1cnJlbnQnXSB9XG4gICAgXSk7XG4gICAgY29uc3Qgbm9uZSA9IGN1cnJlbnQgPT4gYWR0Lm5vbmUoY3VycmVudCk7XG4gICAgY29uc3QgQ2VsbExvY2F0aW9uID0ge1xuICAgICAgLi4uYWR0LFxuICAgICAgbm9uZVxuICAgIH07XG5cbiAgICBjb25zdCBmaXJzdExheWVyID0gKHNjb3BlLCBzZWxlY3RvcikgPT4ge1xuICAgICAgcmV0dXJuIGZpbHRlckZpcnN0TGF5ZXIoc2NvcGUsIHNlbGVjdG9yLCBhbHdheXMpO1xuICAgIH07XG4gICAgY29uc3QgZmlsdGVyRmlyc3RMYXllciA9IChzY29wZSwgc2VsZWN0b3IsIHByZWRpY2F0ZSkgPT4ge1xuICAgICAgcmV0dXJuIGJpbmQkMyhjaGlsZHJlbiQxKHNjb3BlKSwgeCA9PiB7XG4gICAgICAgIGlmIChpcyQxKHgsIHNlbGVjdG9yKSkge1xuICAgICAgICAgIHJldHVybiBwcmVkaWNhdGUoeCkgPyBbeF0gOiBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmlsdGVyRmlyc3RMYXllcih4LCBzZWxlY3RvciwgcHJlZGljYXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxvb2t1cCQxID0gKHRhZ3MsIGVsZW1lbnQsIGlzUm9vdCA9IG5ldmVyKSA9PiB7XG4gICAgICBpZiAoaXNSb290KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICBpZiAoY29udGFpbnMkMih0YWdzLCBuYW1lKGVsZW1lbnQpKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShlbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzUm9vdE9yVXBwZXJUYWJsZSA9IGVsbSA9PiBpcyQxKGVsbSwgJ3RhYmxlJykgfHwgaXNSb290KGVsbSk7XG4gICAgICByZXR1cm4gYW5jZXN0b3IkMyhlbGVtZW50LCB0YWdzLmpvaW4oJywnKSwgaXNSb290T3JVcHBlclRhYmxlKTtcbiAgICB9O1xuICAgIGNvbnN0IGNlbGwgPSAoZWxlbWVudCwgaXNSb290KSA9PiBsb29rdXAkMShbXG4gICAgICAndGQnLFxuICAgICAgJ3RoJ1xuICAgIF0sIGVsZW1lbnQsIGlzUm9vdCk7XG4gICAgY29uc3QgY2VsbHMgPSBhbmNlc3RvciA9PiBmaXJzdExheWVyKGFuY2VzdG9yLCAndGgsdGQnKTtcbiAgICBjb25zdCB0YWJsZSA9IChlbGVtZW50LCBpc1Jvb3QpID0+IGNsb3Nlc3QkMyhlbGVtZW50LCAndGFibGUnLCBpc1Jvb3QpO1xuXG4gICAgY29uc3Qgd2FsayA9IChhbGwsIGN1cnJlbnQsIGluZGV4LCBkaXJlY3Rpb24sIGlzRWxpZ2libGUgPSBhbHdheXMpID0+IHtcbiAgICAgIGNvbnN0IGZvcndhcmRzID0gZGlyZWN0aW9uID09PSAxO1xuICAgICAgaWYgKCFmb3J3YXJkcyAmJiBpbmRleCA8PSAwKSB7XG4gICAgICAgIHJldHVybiBDZWxsTG9jYXRpb24uZmlyc3QoYWxsWzBdKTtcbiAgICAgIH0gZWxzZSBpZiAoZm9yd2FyZHMgJiYgaW5kZXggPj0gYWxsLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgcmV0dXJuIENlbGxMb2NhdGlvbi5sYXN0KGFsbFthbGwubGVuZ3RoIC0gMV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBpbmRleCArIGRpcmVjdGlvbjtcbiAgICAgICAgY29uc3QgZWxlbSA9IGFsbFtuZXdJbmRleF07XG4gICAgICAgIHJldHVybiBpc0VsaWdpYmxlKGVsZW0pID8gQ2VsbExvY2F0aW9uLm1pZGRsZShjdXJyZW50LCBlbGVtKSA6IHdhbGsoYWxsLCBjdXJyZW50LCBuZXdJbmRleCwgZGlyZWN0aW9uLCBpc0VsaWdpYmxlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGRldGVjdCA9IChjdXJyZW50LCBpc1Jvb3QpID0+IHtcbiAgICAgIHJldHVybiB0YWJsZShjdXJyZW50LCBpc1Jvb3QpLmJpbmQodGFibGUgPT4ge1xuICAgICAgICBjb25zdCBhbGwgPSBjZWxscyh0YWJsZSk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZmluZEluZGV4JDIoYWxsLCB4ID0+IGVxKGN1cnJlbnQsIHgpKTtcbiAgICAgICAgcmV0dXJuIGluZGV4Lm1hcChpbmRleCA9PiAoe1xuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIGFsbFxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG5leHQgPSAoY3VycmVudCwgaXNFbGlnaWJsZSwgaXNSb290KSA9PiB7XG4gICAgICBjb25zdCBkZXRlY3Rpb24gPSBkZXRlY3QoY3VycmVudCwgaXNSb290KTtcbiAgICAgIHJldHVybiBkZXRlY3Rpb24uZm9sZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBDZWxsTG9jYXRpb24ubm9uZShjdXJyZW50KTtcbiAgICAgIH0sIGluZm8gPT4ge1xuICAgICAgICByZXR1cm4gd2FsayhpbmZvLmFsbCwgY3VycmVudCwgaW5mby5pbmRleCwgMSwgaXNFbGlnaWJsZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHByZXYgPSAoY3VycmVudCwgaXNFbGlnaWJsZSwgaXNSb290KSA9PiB7XG4gICAgICBjb25zdCBkZXRlY3Rpb24gPSBkZXRlY3QoY3VycmVudCwgaXNSb290KTtcbiAgICAgIHJldHVybiBkZXRlY3Rpb24uZm9sZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBDZWxsTG9jYXRpb24ubm9uZSgpO1xuICAgICAgfSwgaW5mbyA9PiB7XG4gICAgICAgIHJldHVybiB3YWxrKGluZm8uYWxsLCBjdXJyZW50LCBpbmZvLmluZGV4LCAtMSwgaXNFbGlnaWJsZSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGVmbGF0ZSA9IChyZWN0LCBkZWx0YSkgPT4gKHtcbiAgICAgIGxlZnQ6IHJlY3QubGVmdCAtIGRlbHRhLFxuICAgICAgdG9wOiByZWN0LnRvcCAtIGRlbHRhLFxuICAgICAgcmlnaHQ6IHJlY3QucmlnaHQgKyBkZWx0YSAqIDIsXG4gICAgICBib3R0b206IHJlY3QuYm90dG9tICsgZGVsdGEgKiAyLFxuICAgICAgd2lkdGg6IHJlY3Qud2lkdGggKyBkZWx0YSxcbiAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQgKyBkZWx0YVxuICAgIH0pO1xuICAgIGNvbnN0IGdldENvcm5lcnMgPSAoZ2V0WUF4aXNWYWx1ZSwgdGRzKSA9PiBiaW5kJDModGRzLCB0ZCA9PiB7XG4gICAgICBjb25zdCByZWN0ID0gZGVmbGF0ZShjbG9uZSQxKHRkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSwgLTEpO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIHg6IHJlY3QubGVmdCxcbiAgICAgICAgICB5OiBnZXRZQXhpc1ZhbHVlKHJlY3QpLFxuICAgICAgICAgIGNlbGw6IHRkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB4OiByZWN0LnJpZ2h0LFxuICAgICAgICAgIHk6IGdldFlBeGlzVmFsdWUocmVjdCksXG4gICAgICAgICAgY2VsbDogdGRcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9KTtcbiAgICBjb25zdCBmaW5kQ2xvc2VzdENvcm5lciA9IChjb3JuZXJzLCB4LCB5KSA9PiBmb2xkbChjb3JuZXJzLCAoYWNjLCBuZXdDb3JuZXIpID0+IGFjYy5mb2xkKCgpID0+IE9wdGlvbmFsLnNvbWUobmV3Q29ybmVyKSwgb2xkQ29ybmVyID0+IHtcbiAgICAgIGNvbnN0IG9sZERpc3QgPSBNYXRoLnNxcnQoTWF0aC5hYnMob2xkQ29ybmVyLnggLSB4KSArIE1hdGguYWJzKG9sZENvcm5lci55IC0geSkpO1xuICAgICAgY29uc3QgbmV3RGlzdCA9IE1hdGguc3FydChNYXRoLmFicyhuZXdDb3JuZXIueCAtIHgpICsgTWF0aC5hYnMobmV3Q29ybmVyLnkgLSB5KSk7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShuZXdEaXN0IDwgb2xkRGlzdCA/IG5ld0Nvcm5lciA6IG9sZENvcm5lcik7XG4gICAgfSksIE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgY29uc3QgZ2V0Q2xvc2VzdENlbGwgPSAoZ2V0WUF4aXNWYWx1ZSwgaXNUYXJnZXRDb3JuZXIsIHRhYmxlLCB4LCB5KSA9PiB7XG4gICAgICBjb25zdCBjZWxscyA9IGRlc2NlbmRhbnRzKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHRhYmxlKSwgJ3RkLHRoLGNhcHRpb24nKS5tYXAoZSA9PiBlLmRvbSk7XG4gICAgICBjb25zdCBjb3JuZXJzID0gZmlsdGVyJDUoZ2V0Q29ybmVycyhnZXRZQXhpc1ZhbHVlLCBjZWxscyksIGNvcm5lciA9PiBpc1RhcmdldENvcm5lcihjb3JuZXIsIHkpKTtcbiAgICAgIHJldHVybiBmaW5kQ2xvc2VzdENvcm5lcihjb3JuZXJzLCB4LCB5KS5tYXAoY29ybmVyID0+IGNvcm5lci5jZWxsKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEJvdHRvbVZhbHVlID0gcmVjdCA9PiByZWN0LmJvdHRvbTtcbiAgICBjb25zdCBnZXRUb3BWYWx1ZSA9IHJlY3QgPT4gcmVjdC50b3A7XG4gICAgY29uc3QgaXNBYm92ZSA9IChjb3JuZXIsIHkpID0+IGNvcm5lci55IDwgeTtcbiAgICBjb25zdCBpc0JlbG93ID0gKGNvcm5lciwgeSkgPT4gY29ybmVyLnkgPiB5O1xuICAgIGNvbnN0IGdldENsb3Nlc3RDZWxsQWJvdmUgPSBjdXJyeShnZXRDbG9zZXN0Q2VsbCwgZ2V0Qm90dG9tVmFsdWUsIGlzQWJvdmUpO1xuICAgIGNvbnN0IGdldENsb3Nlc3RDZWxsQmVsb3cgPSBjdXJyeShnZXRDbG9zZXN0Q2VsbCwgZ2V0VG9wVmFsdWUsIGlzQmVsb3cpO1xuICAgIGNvbnN0IGZpbmRDbG9zZXN0UG9zaXRpb25JbkFib3ZlQ2VsbCA9ICh0YWJsZSwgcG9zKSA9PiBoZWFkKHBvcy5nZXRDbGllbnRSZWN0cygpKS5iaW5kKHJlY3QgPT4gZ2V0Q2xvc2VzdENlbGxBYm92ZSh0YWJsZSwgcmVjdC5sZWZ0LCByZWN0LnRvcCkpLmJpbmQoY2VsbCA9PiBmaW5kQ2xvc2VzdEhvcml6b250YWxQb3NpdGlvbihnZXRMYXN0TGluZVBvc2l0aW9ucyhjZWxsKSwgcG9zKSk7XG4gICAgY29uc3QgZmluZENsb3Nlc3RQb3NpdGlvbkluQmVsb3dDZWxsID0gKHRhYmxlLCBwb3MpID0+IGxhc3QkMyhwb3MuZ2V0Q2xpZW50UmVjdHMoKSkuYmluZChyZWN0ID0+IGdldENsb3Nlc3RDZWxsQmVsb3codGFibGUsIHJlY3QubGVmdCwgcmVjdC50b3ApKS5iaW5kKGNlbGwgPT4gZmluZENsb3Nlc3RIb3Jpem9udGFsUG9zaXRpb24oZ2V0Rmlyc3RMaW5lUG9zaXRpb25zKGNlbGwpLCBwb3MpKTtcblxuICAgIGNvbnN0IGhhc05leHRCcmVhayA9IChnZXRQb3NpdGlvbnNVbnRpbCwgc2NvcGUsIGxpbmVJbmZvKSA9PiBsaW5lSW5mby5icmVha0F0LmV4aXN0cyhicmVha1BvcyA9PiBnZXRQb3NpdGlvbnNVbnRpbChzY29wZSwgYnJlYWtQb3MpLmJyZWFrQXQuaXNTb21lKCkpO1xuICAgIGNvbnN0IHN0YXJ0c1dpdGhXcmFwQnJlYWsgPSBsaW5lSW5mbyA9PiBsaW5lSW5mby5icmVha1R5cGUgPT09IEJyZWFrVHlwZS5XcmFwICYmIGxpbmVJbmZvLnBvc2l0aW9ucy5sZW5ndGggPT09IDA7XG4gICAgY29uc3Qgc3RhcnRzV2l0aEJyQnJlYWsgPSBsaW5lSW5mbyA9PiBsaW5lSW5mby5icmVha1R5cGUgPT09IEJyZWFrVHlwZS5CciAmJiBsaW5lSW5mby5wb3NpdGlvbnMubGVuZ3RoID09PSAxO1xuICAgIGNvbnN0IGlzQXRUYWJsZUNlbGxMaW5lID0gKGdldFBvc2l0aW9uc1VudGlsLCBzY29wZSwgcG9zKSA9PiB7XG4gICAgICBjb25zdCBsaW5lSW5mbyA9IGdldFBvc2l0aW9uc1VudGlsKHNjb3BlLCBwb3MpO1xuICAgICAgaWYgKHN0YXJ0c1dpdGhXcmFwQnJlYWsobGluZUluZm8pIHx8ICFpc0JyJDYocG9zLmdldE5vZGUoKSkgJiYgc3RhcnRzV2l0aEJyQnJlYWsobGluZUluZm8pKSB7XG4gICAgICAgIHJldHVybiAhaGFzTmV4dEJyZWFrKGdldFBvc2l0aW9uc1VudGlsLCBzY29wZSwgbGluZUluZm8pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGxpbmVJbmZvLmJyZWFrQXQuaXNOb25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc0F0Rmlyc3RUYWJsZUNlbGxMaW5lID0gY3VycnkoaXNBdFRhYmxlQ2VsbExpbmUsIGdldFBvc2l0aW9uc1VudGlsUHJldmlvdXNMaW5lKTtcbiAgICBjb25zdCBpc0F0TGFzdFRhYmxlQ2VsbExpbmUgPSBjdXJyeShpc0F0VGFibGVDZWxsTGluZSwgZ2V0UG9zaXRpb25zVW50aWxOZXh0TGluZSk7XG4gICAgY29uc3QgaXNDYXJldEF0U3RhcnRPckVuZE9mVGFibGUgPSAoZm9yd2FyZCwgcm5nLCB0YWJsZSkgPT4ge1xuICAgICAgY29uc3QgY2FyZXRQb3MgPSBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KHJuZyk7XG4gICAgICByZXR1cm4gcG9zaXRpb25JbighZm9yd2FyZCwgdGFibGUpLmV4aXN0cyhwb3MgPT4gcG9zLmlzRXF1YWwoY2FyZXRQb3MpKTtcbiAgICB9O1xuICAgIGNvbnN0IG5hdmlnYXRlSG9yaXpvbnRhbGx5ID0gKGVkaXRvciwgZm9yd2FyZCwgdGFibGUsIF90ZCkgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGZvcndhcmQgPyAxIDogLTE7XG4gICAgICBpZiAoaXNGYWtlQ2FyZXRUYWJsZUJyb3dzZXIoKSAmJiBpc0NhcmV0QXRTdGFydE9yRW5kT2ZUYWJsZShmb3J3YXJkLCBybmcsIHRhYmxlKSkge1xuICAgICAgICBzaG93Q2FyZXQoZGlyZWN0aW9uLCBlZGl0b3IsIHRhYmxlLCAhZm9yd2FyZCwgZmFsc2UpLmVhY2gobmV3Um5nID0+IHtcbiAgICAgICAgICBtb3ZlVG9SYW5nZShlZGl0b3IsIG5ld1JuZyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IGdldENsb3Nlc3RBYm92ZVBvc2l0aW9uID0gKHJvb3QsIHRhYmxlLCBzdGFydCkgPT4gZmluZENsb3Nlc3RQb3NpdGlvbkluQWJvdmVDZWxsKHRhYmxlLCBzdGFydCkub3JUaHVuaygoKSA9PiBoZWFkKHN0YXJ0LmdldENsaWVudFJlY3RzKCkpLmJpbmQocmVjdCA9PiBmaW5kQ2xvc2VzdEhvcml6b250YWxQb3NpdGlvbkZyb21Qb2ludChnZXRQb3NpdGlvbnNBYm92ZShyb290LCBDYXJldFBvc2l0aW9uLmJlZm9yZSh0YWJsZSkpLCByZWN0LmxlZnQpKSkuZ2V0T3IoQ2FyZXRQb3NpdGlvbi5iZWZvcmUodGFibGUpKTtcbiAgICBjb25zdCBnZXRDbG9zZXN0QmVsb3dQb3NpdGlvbiA9IChyb290LCB0YWJsZSwgc3RhcnQpID0+IGZpbmRDbG9zZXN0UG9zaXRpb25JbkJlbG93Q2VsbCh0YWJsZSwgc3RhcnQpLm9yVGh1bmsoKCkgPT4gaGVhZChzdGFydC5nZXRDbGllbnRSZWN0cygpKS5iaW5kKHJlY3QgPT4gZmluZENsb3Nlc3RIb3Jpem9udGFsUG9zaXRpb25Gcm9tUG9pbnQoZ2V0UG9zaXRpb25zQmVsb3cocm9vdCwgQ2FyZXRQb3NpdGlvbi5hZnRlcih0YWJsZSkpLCByZWN0LmxlZnQpKSkuZ2V0T3IoQ2FyZXRQb3NpdGlvbi5hZnRlcih0YWJsZSkpO1xuICAgIGNvbnN0IGdldFRhYmxlID0gKHByZXZpb3VzLCBwb3MpID0+IHtcbiAgICAgIGNvbnN0IG5vZGUgPSBwb3MuZ2V0Tm9kZShwcmV2aW91cyk7XG4gICAgICByZXR1cm4gaXNUYWJsZSQyKG5vZGUpID8gT3B0aW9uYWwuc29tZShub2RlKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckJsb2NrID0gKGRvd24sIGVkaXRvciwgdGFibGUpID0+IHtcbiAgICAgIGVkaXRvci51bmRvTWFuYWdlci50cmFuc2FjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGluc2VydEZuID0gZG93biA/IGFmdGVyJDQgOiBiZWZvcmUkMztcbiAgICAgICAgY29uc3Qgcm5nID0gaW5zZXJ0RW1wdHlMaW5lKGVkaXRvciwgU3VnYXJFbGVtZW50LmZyb21Eb20odGFibGUpLCBpbnNlcnRGbik7XG4gICAgICAgIG1vdmVUb1JhbmdlKGVkaXRvciwgcm5nKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbW92ZUNhcmV0ID0gKGVkaXRvciwgZG93biwgcG9zKSA9PiB7XG4gICAgICBjb25zdCB0YWJsZSA9IGRvd24gPyBnZXRUYWJsZSh0cnVlLCBwb3MpIDogZ2V0VGFibGUoZmFsc2UsIHBvcyk7XG4gICAgICBjb25zdCBsYXN0ID0gZG93biA9PT0gZmFsc2U7XG4gICAgICB0YWJsZS5mb2xkKCgpID0+IG1vdmVUb1JhbmdlKGVkaXRvciwgcG9zLnRvUmFuZ2UoKSksIHRhYmxlID0+IHBvc2l0aW9uSW4obGFzdCwgZWRpdG9yLmdldEJvZHkoKSkuZmlsdGVyKGxhc3RQb3MgPT4gbGFzdFBvcy5pc0VxdWFsKHBvcykpLmZvbGQoKCkgPT4gbW92ZVRvUmFuZ2UoZWRpdG9yLCBwb3MudG9SYW5nZSgpKSwgXyA9PiByZW5kZXJCbG9jayhkb3duLCBlZGl0b3IsIHRhYmxlKSkpO1xuICAgIH07XG4gICAgY29uc3QgbmF2aWdhdGVWZXJ0aWNhbGx5ID0gKGVkaXRvciwgZG93biwgdGFibGUsIHRkKSA9PiB7XG4gICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgY29uc3QgcG9zID0gQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChybmcpO1xuICAgICAgY29uc3Qgcm9vdCA9IGVkaXRvci5nZXRCb2R5KCk7XG4gICAgICBpZiAoIWRvd24gJiYgaXNBdEZpcnN0VGFibGVDZWxsTGluZSh0ZCwgcG9zKSkge1xuICAgICAgICBjb25zdCBuZXdQb3MgPSBnZXRDbG9zZXN0QWJvdmVQb3NpdGlvbihyb290LCB0YWJsZSwgcG9zKTtcbiAgICAgICAgbW92ZUNhcmV0KGVkaXRvciwgZG93biwgbmV3UG9zKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGRvd24gJiYgaXNBdExhc3RUYWJsZUNlbGxMaW5lKHRkLCBwb3MpKSB7XG4gICAgICAgIGNvbnN0IG5ld1BvcyA9IGdldENsb3Nlc3RCZWxvd1Bvc2l0aW9uKHJvb3QsIHRhYmxlLCBwb3MpO1xuICAgICAgICBtb3ZlQ2FyZXQoZWRpdG9yLCBkb3duLCBuZXdQb3MpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1vdmUkMSA9IChlZGl0b3IsIGZvcndhcmQsIG1vdmVyKSA9PiBPcHRpb25hbC5mcm9tKGVkaXRvci5kb20uZ2V0UGFyZW50KGVkaXRvci5zZWxlY3Rpb24uZ2V0Tm9kZSgpLCAndGQsdGgnKSkuYmluZCh0ZCA9PiBPcHRpb25hbC5mcm9tKGVkaXRvci5kb20uZ2V0UGFyZW50KHRkLCAndGFibGUnKSkubWFwKHRhYmxlID0+IG1vdmVyKGVkaXRvciwgZm9yd2FyZCwgdGFibGUsIHRkKSkpLmdldE9yKGZhbHNlKTtcbiAgICBjb25zdCBtb3ZlSCA9IChlZGl0b3IsIGZvcndhcmQpID0+IG1vdmUkMShlZGl0b3IsIGZvcndhcmQsIG5hdmlnYXRlSG9yaXpvbnRhbGx5KTtcbiAgICBjb25zdCBtb3ZlViA9IChlZGl0b3IsIGZvcndhcmQpID0+IG1vdmUkMShlZGl0b3IsIGZvcndhcmQsIG5hdmlnYXRlVmVydGljYWxseSk7XG4gICAgY29uc3QgZ2V0Q2VsbEZpcnN0Q3Vyc29yUG9zaXRpb24gPSBjZWxsID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IFNpbVNlbGVjdGlvbi5leGFjdChjZWxsLCAwLCBjZWxsLCAwKTtcbiAgICAgIHJldHVybiB0b05hdGl2ZShzZWxlY3Rpb24pO1xuICAgIH07XG4gICAgY29uc3QgdGFiR28gPSAoZWRpdG9yLCBpc1Jvb3QsIGNlbGwpID0+IHtcbiAgICAgIHJldHVybiBjZWxsLmZvbGQoT3B0aW9uYWwubm9uZSwgT3B0aW9uYWwubm9uZSwgKF9jdXJyZW50LCBuZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiBmaXJzdChuZXh0KS5tYXAoY2VsbCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGdldENlbGxGaXJzdEN1cnNvclBvc2l0aW9uKGNlbGwpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIGN1cnJlbnQgPT4ge1xuICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZVRhYmxlSW5zZXJ0Um93QWZ0ZXInKTtcbiAgICAgICAgcmV0dXJuIHRhYkZvcndhcmQoZWRpdG9yLCBpc1Jvb3QsIGN1cnJlbnQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCB0YWJGb3J3YXJkID0gKGVkaXRvciwgaXNSb290LCBjZWxsKSA9PiB0YWJHbyhlZGl0b3IsIGlzUm9vdCwgbmV4dChjZWxsLCBpc0VkaXRhYmxlJDMpKTtcbiAgICBjb25zdCB0YWJCYWNrd2FyZCA9IChlZGl0b3IsIGlzUm9vdCwgY2VsbCkgPT4gdGFiR28oZWRpdG9yLCBpc1Jvb3QsIHByZXYoY2VsbCwgaXNFZGl0YWJsZSQzKSk7XG4gICAgY29uc3QgaGFuZGxlVGFiID0gKGVkaXRvciwgZm9yd2FyZCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdEVsZW1lbnRzID0gW1xuICAgICAgICAndGFibGUnLFxuICAgICAgICAnbGknLFxuICAgICAgICAnZGwnXG4gICAgICBdO1xuICAgICAgY29uc3QgYm9keSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgY29uc3QgaXNSb290ID0gZWxlbWVudCA9PiB7XG4gICAgICAgIGNvbnN0IG5hbWUkMSA9IG5hbWUoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBlcShlbGVtZW50LCBib2R5KSB8fCBjb250YWlucyQyKHJvb3RFbGVtZW50cywgbmFtZSQxKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgY29uc3QgY29udGFpbmVyID0gU3VnYXJFbGVtZW50LmZyb21Eb20oIWZvcndhcmQgPyBybmcuc3RhcnRDb250YWluZXIgOiBybmcuZW5kQ29udGFpbmVyKTtcbiAgICAgIHJldHVybiBjZWxsKGNvbnRhaW5lciwgaXNSb290KS5tYXAoY2VsbCA9PiB7XG4gICAgICAgIHRhYmxlKGNlbGwsIGlzUm9vdCkuZWFjaCh0YWJsZSA9PiB7XG4gICAgICAgICAgZWRpdG9yLm1vZGVsLnRhYmxlLmNsZWFyU2VsZWN0ZWRDZWxscyh0YWJsZS5kb20pO1xuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5jb2xsYXBzZSghZm9yd2FyZCk7XG4gICAgICAgIGNvbnN0IG5hdmlnYXRpb24gPSAhZm9yd2FyZCA/IHRhYkJhY2t3YXJkIDogdGFiRm9yd2FyZDtcbiAgICAgICAgY29uc3Qgcm5nID0gbmF2aWdhdGlvbihlZGl0b3IsIGlzUm9vdCwgY2VsbCk7XG4gICAgICAgIHJuZy5lYWNoKHJhbmdlID0+IHtcbiAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhyYW5nZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pLmdldE9yKGZhbHNlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZXhlY3V0ZUtleWRvd25PdmVycmlkZSQ0ID0gKGVkaXRvciwgY2FyZXQsIGV2dCkgPT4ge1xuICAgICAgY29uc3QgaXNNYWMgPSBFbnYub3MuaXNNYWNPUygpIHx8IEVudi5vcy5pc2lPUygpO1xuICAgICAgZXhlY3V0ZShbXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5SSUdIVCxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlSCQyLCBlZGl0b3IsIHRydWUpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5MRUZULFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKG1vdmVIJDIsIGVkaXRvciwgZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5VUCxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlViQ0LCBlZGl0b3IsIGZhbHNlKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuRE9XTixcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlViQ0LCBlZGl0b3IsIHRydWUpXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmlzTWFjID8gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleUNvZGU6IFZLLlVQLFxuICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb24oc2VsZWN0VG9FbmRQb2ludCwgZWRpdG9yLCBmYWxzZSksXG4gICAgICAgICAgICBtZXRhS2V5OiB0cnVlLFxuICAgICAgICAgICAgc2hpZnRLZXk6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleUNvZGU6IFZLLkRPV04sXG4gICAgICAgICAgICBhY3Rpb246IGFjdGlvbihzZWxlY3RUb0VuZFBvaW50LCBlZGl0b3IsIHRydWUpLFxuICAgICAgICAgICAgbWV0YUtleTogdHJ1ZSxcbiAgICAgICAgICAgIHNoaWZ0S2V5OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICBdIDogW10sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5SSUdIVCxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlSCwgZWRpdG9yLCB0cnVlKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuTEVGVCxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlSCwgZWRpdG9yLCBmYWxzZSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLlVQLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKG1vdmVWLCBlZGl0b3IsIGZhbHNlKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuRE9XTixcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlViwgZWRpdG9yLCB0cnVlKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuVVAsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24obW92ZVYsIGVkaXRvciwgZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5VUCxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlViQyLCBlZGl0b3IsIGZhbHNlKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuRE9XTixcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlViQyLCBlZGl0b3IsIHRydWUpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5SSUdIVCxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlSCQxLCBlZGl0b3IsIHRydWUpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5MRUZULFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKG1vdmVIJDEsIGVkaXRvciwgZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5VUCxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlViQxLCBlZGl0b3IsIGZhbHNlKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuRE9XTixcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlViQxLCBlZGl0b3IsIHRydWUpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5SSUdIVCxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlJDMsIGVkaXRvciwgY2FyZXQsIHRydWUpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5MRUZULFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKG1vdmUkMywgZWRpdG9yLCBjYXJldCwgZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5SSUdIVCxcbiAgICAgICAgICBjdHJsS2V5OiAhaXNNYWMsXG4gICAgICAgICAgYWx0S2V5OiBpc01hYyxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlTmV4dFdvcmQsIGVkaXRvciwgY2FyZXQpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5MRUZULFxuICAgICAgICAgIGN0cmxLZXk6ICFpc01hYyxcbiAgICAgICAgICBhbHRLZXk6IGlzTWFjLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKG1vdmVQcmV2V29yZCwgZWRpdG9yLCBjYXJldClcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLlVQLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKG1vdmVWJDMsIGVkaXRvciwgZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5ET1dOLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKG1vdmVWJDMsIGVkaXRvciwgdHJ1ZSlcbiAgICAgICAgfVxuICAgICAgXSwgZXZ0KS5lYWNoKF8gPT4ge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2V0dXAkayA9IChlZGl0b3IsIGNhcmV0KSA9PiB7XG4gICAgICBlZGl0b3Iub24oJ2tleWRvd24nLCBldnQgPT4ge1xuICAgICAgICBpZiAoIWV2dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIGV4ZWN1dGVLZXlkb3duT3ZlcnJpZGUkNChlZGl0b3IsIGNhcmV0LCBldnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcG9pbnQgPSAoY29udGFpbmVyLCBvZmZzZXQpID0+ICh7XG4gICAgICBjb250YWluZXIsXG4gICAgICBvZmZzZXRcbiAgICB9KTtcblxuICAgIGNvbnN0IERPTSQ3ID0gRE9NVXRpbHMuRE9NO1xuICAgIGNvbnN0IGFsd2F5c05leHQgPSBzdGFydE5vZGUgPT4gbm9kZSA9PiBzdGFydE5vZGUgPT09IG5vZGUgPyAtMSA6IDA7XG4gICAgY29uc3QgaXNCb3VuZGFyeSA9IGRvbSA9PiBub2RlID0+IGRvbS5pc0Jsb2NrKG5vZGUpIHx8IGNvbnRhaW5zJDIoW1xuICAgICAgJ0JSJyxcbiAgICAgICdJTUcnLFxuICAgICAgJ0hSJyxcbiAgICAgICdJTlBVVCdcbiAgICBdLCBub2RlLm5vZGVOYW1lKSB8fCBkb20uZ2V0Q29udGVudEVkaXRhYmxlKG5vZGUpID09PSAnZmFsc2UnO1xuICAgIGNvbnN0IHRleHRCZWZvcmUgPSAobm9kZSwgb2Zmc2V0LCByb290Tm9kZSkgPT4ge1xuICAgICAgaWYgKGlzVGV4dCRhKG5vZGUpICYmIG9mZnNldCA+PSAwKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHBvaW50KG5vZGUsIG9mZnNldCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdGV4dFNlZWtlciA9IFRleHRTZWVrZXIoRE9NJDcpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbSh0ZXh0U2Vla2VyLmJhY2t3YXJkcyhub2RlLCBvZmZzZXQsIGFsd2F5c05leHQobm9kZSksIHJvb3ROb2RlKSkubWFwKHByZXYgPT4gcG9pbnQocHJldi5jb250YWluZXIsIHByZXYuY29udGFpbmVyLmRhdGEubGVuZ3RoKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB0ZXh0QWZ0ZXIgPSAobm9kZSwgb2Zmc2V0LCByb290Tm9kZSkgPT4ge1xuICAgICAgaWYgKGlzVGV4dCRhKG5vZGUpICYmIG9mZnNldCA+PSBub2RlLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShwb2ludChub2RlLCBvZmZzZXQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRleHRTZWVrZXIgPSBUZXh0U2Vla2VyKERPTSQ3KTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20odGV4dFNlZWtlci5mb3J3YXJkcyhub2RlLCBvZmZzZXQsIGFsd2F5c05leHQobm9kZSksIHJvb3ROb2RlKSkubWFwKHByZXYgPT4gcG9pbnQocHJldi5jb250YWluZXIsIDApKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNjYW5MZWZ0ID0gKG5vZGUsIG9mZnNldCwgcm9vdE5vZGUpID0+IHtcbiAgICAgIGlmICghaXNUZXh0JGEobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRleHQgPSBub2RlLmRhdGE7XG4gICAgICBpZiAob2Zmc2V0ID49IDAgJiYgb2Zmc2V0IDw9IHRleHQubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHBvaW50KG5vZGUsIG9mZnNldCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdGV4dFNlZWtlciA9IFRleHRTZWVrZXIoRE9NJDcpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbSh0ZXh0U2Vla2VyLmJhY2t3YXJkcyhub2RlLCBvZmZzZXQsIGFsd2F5c05leHQobm9kZSksIHJvb3ROb2RlKSkuYmluZChwcmV2ID0+IHtcbiAgICAgICAgICBjb25zdCBwcmV2VGV4dCA9IHByZXYuY29udGFpbmVyLmRhdGE7XG4gICAgICAgICAgcmV0dXJuIHNjYW5MZWZ0KHByZXYuY29udGFpbmVyLCBvZmZzZXQgKyBwcmV2VGV4dC5sZW5ndGgsIHJvb3ROb2RlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzY2FuUmlnaHQgPSAobm9kZSwgb2Zmc2V0LCByb290Tm9kZSkgPT4ge1xuICAgICAgaWYgKCFpc1RleHQkYShub2RlKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgdGV4dCA9IG5vZGUuZGF0YTtcbiAgICAgIGlmIChvZmZzZXQgPD0gdGV4dC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUocG9pbnQobm9kZSwgb2Zmc2V0KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0ZXh0U2Vla2VyID0gVGV4dFNlZWtlcihET00kNyk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKHRleHRTZWVrZXIuZm9yd2FyZHMobm9kZSwgb2Zmc2V0LCBhbHdheXNOZXh0KG5vZGUpLCByb290Tm9kZSkpLmJpbmQobmV4dCA9PiBzY2FuUmlnaHQobmV4dC5jb250YWluZXIsIG9mZnNldCAtIHRleHQubGVuZ3RoLCByb290Tm9kZSkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVwZWF0TGVmdCA9IChkb20sIG5vZGUsIG9mZnNldCwgcHJvY2Vzcywgcm9vdE5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaCA9IFRleHRTZWVrZXIoZG9tLCBpc0JvdW5kYXJ5KGRvbSkpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oc2VhcmNoLmJhY2t3YXJkcyhub2RlLCBvZmZzZXQsIHByb2Nlc3MsIHJvb3ROb2RlKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzVmFsaWRUZXh0UmFuZ2UgPSBybmcgPT4gcm5nLmNvbGxhcHNlZCAmJiBpc1RleHQkYShybmcuc3RhcnRDb250YWluZXIpO1xuICAgIGNvbnN0IGdldFRleHQgPSBybmcgPT4gdHJpbSQxKHJuZy50b1N0cmluZygpLnJlcGxhY2UoL1xcdTAwQTAvZywgJyAnKSk7XG4gICAgY29uc3QgaXNXaGl0ZXNwYWNlID0gY2hyID0+IGNociAhPT0gJycgJiYgJyBcXHhBMFxcZlxcblxcclxcdFxceDBCJy5pbmRleE9mKGNocikgIT09IC0xO1xuXG4gICAgY29uc3Qgc3RyaXBUcmlnZ2VyID0gKHRleHQsIHRyaWdnZXIpID0+IHRleHQuc3Vic3RyaW5nKHRyaWdnZXIubGVuZ3RoKTtcbiAgICBjb25zdCBmaW5kVHJpZ2dlciA9ICh0ZXh0LCBpbmRleCwgdHJpZ2dlcikgPT4ge1xuICAgICAgbGV0IGk7XG4gICAgICBjb25zdCBmaXJzdENoYXIgPSB0cmlnZ2VyLmNoYXJBdCgwKTtcbiAgICAgIGZvciAoaSA9IGluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgY2hhciA9IHRleHQuY2hhckF0KGkpO1xuICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNoYXIpKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlyc3RDaGFyID09PSBjaGFyICYmIGNvbnRhaW5zJDEodGV4dCwgdHJpZ2dlciwgaSwgaW5kZXgpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGkpO1xuICAgIH07XG4gICAgY29uc3QgZmluZFN0YXJ0ID0gKGRvbSwgaW5pdFJhbmdlLCB0cmlnZ2VyLCBtaW5DaGFycyA9IDApID0+IHtcbiAgICAgIGlmICghaXNWYWxpZFRleHRSYW5nZShpbml0UmFuZ2UpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBidWZmZXIgPSB7XG4gICAgICAgIHRleHQ6ICcnLFxuICAgICAgICBvZmZzZXQ6IDBcbiAgICAgIH07XG4gICAgICBjb25zdCBmaW5kVHJpZ2dlckluZGV4ID0gKGVsZW1lbnQsIG9mZnNldCwgdGV4dCkgPT4ge1xuICAgICAgICBidWZmZXIudGV4dCA9IHRleHQgKyBidWZmZXIudGV4dDtcbiAgICAgICAgYnVmZmVyLm9mZnNldCArPSBvZmZzZXQ7XG4gICAgICAgIHJldHVybiBmaW5kVHJpZ2dlcihidWZmZXIudGV4dCwgYnVmZmVyLm9mZnNldCwgdHJpZ2dlcikuZ2V0T3Iob2Zmc2V0KTtcbiAgICAgIH07XG4gICAgICBjb25zdCByb290ID0gZG9tLmdldFBhcmVudChpbml0UmFuZ2Uuc3RhcnRDb250YWluZXIsIGRvbS5pc0Jsb2NrKSB8fCBkb20uZ2V0Um9vdCgpO1xuICAgICAgcmV0dXJuIHJlcGVhdExlZnQoZG9tLCBpbml0UmFuZ2Uuc3RhcnRDb250YWluZXIsIGluaXRSYW5nZS5zdGFydE9mZnNldCwgZmluZFRyaWdnZXJJbmRleCwgcm9vdCkuYmluZChzcG90ID0+IHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBpbml0UmFuZ2UuY2xvbmVSYW5nZSgpO1xuICAgICAgICByYW5nZS5zZXRTdGFydChzcG90LmNvbnRhaW5lciwgc3BvdC5vZmZzZXQpO1xuICAgICAgICByYW5nZS5zZXRFbmQoaW5pdFJhbmdlLmVuZENvbnRhaW5lciwgaW5pdFJhbmdlLmVuZE9mZnNldCk7XG4gICAgICAgIGlmIChyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRleHQgPSBnZXRUZXh0KHJhbmdlKTtcbiAgICAgICAgY29uc3QgdHJpZ2dlckluZGV4ID0gdGV4dC5sYXN0SW5kZXhPZih0cmlnZ2VyKTtcbiAgICAgICAgaWYgKHRyaWdnZXJJbmRleCAhPT0gMCB8fCBzdHJpcFRyaWdnZXIodGV4dCwgdHJpZ2dlcikubGVuZ3RoIDwgbWluQ2hhcnMpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgIHRleHQ6IHN0cmlwVHJpZ2dlcih0ZXh0LCB0cmlnZ2VyKSxcbiAgICAgICAgICAgIHJhbmdlLFxuICAgICAgICAgICAgdHJpZ2dlclxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldENvbnRleHQgPSAoZG9tLCBpbml0UmFuZ2UsIHRyaWdnZXIsIG1pbkNoYXJzID0gMCkgPT4gZGV0ZWN0JDEoU3VnYXJFbGVtZW50LmZyb21Eb20oaW5pdFJhbmdlLnN0YXJ0Q29udGFpbmVyKSkuZm9sZCgoKSA9PiBmaW5kU3RhcnQoZG9tLCBpbml0UmFuZ2UsIHRyaWdnZXIsIG1pbkNoYXJzKSwgZWxtID0+IHtcbiAgICAgIGNvbnN0IHJhbmdlID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZShlbG0uZG9tKTtcbiAgICAgIGNvbnN0IHRleHQgPSBnZXRUZXh0KHJhbmdlKTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgcmFuZ2UsXG4gICAgICAgIHRleHQ6IHN0cmlwVHJpZ2dlcih0ZXh0LCB0cmlnZ2VyKSxcbiAgICAgICAgdHJpZ2dlclxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBpc1RleHQkMSA9IG5vZGUgPT4gbm9kZS5ub2RlVHlwZSA9PT0gVEVYVDtcbiAgICBjb25zdCBpc0VsZW1lbnQgPSBub2RlID0+IG5vZGUubm9kZVR5cGUgPT09IEVMRU1FTlQ7XG4gICAgY29uc3QgdG9MYXN0ID0gbm9kZSA9PiB7XG4gICAgICBpZiAoaXNUZXh0JDEobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHBvaW50KG5vZGUsIG5vZGUuZGF0YS5sZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBub2RlLmNoaWxkTm9kZXM7XG4gICAgICAgIHJldHVybiBjaGlsZHJlbi5sZW5ndGggPiAwID8gdG9MYXN0KGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdKSA6IHBvaW50KG5vZGUsIGNoaWxkcmVuLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB0b0xlYWYgPSAobm9kZSwgb2Zmc2V0KSA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IG5vZGUuY2hpbGROb2RlcztcbiAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwICYmIG9mZnNldCA8IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdG9MZWFmKGNoaWxkcmVuW29mZnNldF0sIDApO1xuICAgICAgfSBlbHNlIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwICYmIGlzRWxlbWVudChub2RlKSAmJiBjaGlsZHJlbi5sZW5ndGggPT09IG9mZnNldCkge1xuICAgICAgICByZXR1cm4gdG9MYXN0KGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwb2ludChub2RlLCBvZmZzZXQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBpc1ByZXZpb3VzQ2hhckNvbnRlbnQgPSAoZG9tLCBsZWFmKSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCByb290ID0gKF9hID0gZG9tLmdldFBhcmVudChsZWFmLmNvbnRhaW5lciwgZG9tLmlzQmxvY2spKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBkb20uZ2V0Um9vdCgpO1xuICAgICAgcmV0dXJuIHJlcGVhdExlZnQoZG9tLCBsZWFmLmNvbnRhaW5lciwgbGVhZi5vZmZzZXQsIChfZWxlbWVudCwgb2Zmc2V0KSA9PiBvZmZzZXQgPT09IDAgPyAtMSA6IG9mZnNldCwgcm9vdCkuZmlsdGVyKHNwb3QgPT4ge1xuICAgICAgICBjb25zdCBjaGFyID0gc3BvdC5jb250YWluZXIuZGF0YS5jaGFyQXQoc3BvdC5vZmZzZXQgLSAxKTtcbiAgICAgICAgcmV0dXJuICFpc1doaXRlc3BhY2UoY2hhcik7XG4gICAgICB9KS5pc1NvbWUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzU3RhcnRPZldvcmQgPSBkb20gPT4gcm5nID0+IHtcbiAgICAgIGNvbnN0IGxlYWYgPSB0b0xlYWYocm5nLnN0YXJ0Q29udGFpbmVyLCBybmcuc3RhcnRPZmZzZXQpO1xuICAgICAgcmV0dXJuICFpc1ByZXZpb3VzQ2hhckNvbnRlbnQoZG9tLCBsZWFmKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFRyaWdnZXJDb250ZXh0ID0gKGRvbSwgaW5pdFJhbmdlLCBkYXRhYmFzZSkgPT4gZmluZE1hcChkYXRhYmFzZS50cmlnZ2VycywgdHJpZ2dlciA9PiBnZXRDb250ZXh0KGRvbSwgaW5pdFJhbmdlLCB0cmlnZ2VyKSk7XG4gICAgY29uc3QgbG9va3VwID0gKGVkaXRvciwgZ2V0RGF0YWJhc2UpID0+IHtcbiAgICAgIGNvbnN0IGRhdGFiYXNlID0gZ2V0RGF0YWJhc2UoKTtcbiAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICByZXR1cm4gZ2V0VHJpZ2dlckNvbnRleHQoZWRpdG9yLmRvbSwgcm5nLCBkYXRhYmFzZSkuYmluZChjb250ZXh0ID0+IGxvb2t1cFdpdGhDb250ZXh0KGVkaXRvciwgZ2V0RGF0YWJhc2UsIGNvbnRleHQpKTtcbiAgICB9O1xuICAgIGNvbnN0IGxvb2t1cFdpdGhDb250ZXh0ID0gKGVkaXRvciwgZ2V0RGF0YWJhc2UsIGNvbnRleHQsIGZldGNoT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBkYXRhYmFzZSA9IGdldERhdGFiYXNlKCk7XG4gICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgY29uc3Qgc3RhcnRUZXh0ID0gKF9hID0gcm5nLnN0YXJ0Q29udGFpbmVyLm5vZGVWYWx1ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgICBjb25zdCBhdXRvY29tcGxldGVycyA9IGZpbHRlciQ1KGRhdGFiYXNlLmxvb2t1cEJ5VHJpZ2dlcihjb250ZXh0LnRyaWdnZXIpLCBhdXRvY29tcGxldGVyID0+IGNvbnRleHQudGV4dC5sZW5ndGggPj0gYXV0b2NvbXBsZXRlci5taW5DaGFycyAmJiBhdXRvY29tcGxldGVyLm1hdGNoZXMuZ2V0T3JUaHVuaygoKSA9PiBpc1N0YXJ0T2ZXb3JkKGVkaXRvci5kb20pKShjb250ZXh0LnJhbmdlLCBzdGFydFRleHQsIGNvbnRleHQudGV4dCkpO1xuICAgICAgaWYgKGF1dG9jb21wbGV0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgbG9va3VwRGF0YSA9IFByb21pc2UuYWxsKG1hcCQzKGF1dG9jb21wbGV0ZXJzLCBhYyA9PiB7XG4gICAgICAgIGNvbnN0IGZldGNoUmVzdWx0ID0gYWMuZmV0Y2goY29udGV4dC50ZXh0LCBhYy5tYXhSZXN1bHRzLCBmZXRjaE9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gZmV0Y2hSZXN1bHQudGhlbihyZXN1bHRzID0+ICh7XG4gICAgICAgICAgbWF0Y2hUZXh0OiBjb250ZXh0LnRleHQsXG4gICAgICAgICAgaXRlbXM6IHJlc3VsdHMsXG4gICAgICAgICAgY29sdW1uczogYWMuY29sdW1ucyxcbiAgICAgICAgICBvbkFjdGlvbjogYWMub25BY3Rpb24sXG4gICAgICAgICAgaGlnaGxpZ2h0T246IGFjLmhpZ2hsaWdodE9uXG4gICAgICAgIH0pKTtcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgbG9va3VwRGF0YSxcbiAgICAgICAgY29udGV4dFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHZhciBTaW1wbGVSZXN1bHRUeXBlO1xuICAgIChmdW5jdGlvbiAoU2ltcGxlUmVzdWx0VHlwZSkge1xuICAgICAgU2ltcGxlUmVzdWx0VHlwZVtTaW1wbGVSZXN1bHRUeXBlWydFcnJvciddID0gMF0gPSAnRXJyb3InO1xuICAgICAgU2ltcGxlUmVzdWx0VHlwZVtTaW1wbGVSZXN1bHRUeXBlWydWYWx1ZSddID0gMV0gPSAnVmFsdWUnO1xuICAgIH0oU2ltcGxlUmVzdWx0VHlwZSB8fCAoU2ltcGxlUmVzdWx0VHlwZSA9IHt9KSkpO1xuICAgIGNvbnN0IGZvbGQkMSA9IChyZXMsIG9uRXJyb3IsIG9uVmFsdWUpID0+IHJlcy5zdHlwZSA9PT0gU2ltcGxlUmVzdWx0VHlwZS5FcnJvciA/IG9uRXJyb3IocmVzLnNlcnJvcikgOiBvblZhbHVlKHJlcy5zdmFsdWUpO1xuICAgIGNvbnN0IHBhcnRpdGlvbiA9IHJlc3VsdHMgPT4ge1xuICAgICAgY29uc3QgdmFsdWVzID0gW107XG4gICAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICAgIGVhY2gkZShyZXN1bHRzLCBvYmogPT4ge1xuICAgICAgICBmb2xkJDEob2JqLCBlcnIgPT4gZXJyb3JzLnB1c2goZXJyKSwgdmFsID0+IHZhbHVlcy5wdXNoKHZhbCkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIGVycm9yc1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG1hcEVycm9yID0gKHJlcywgZikgPT4ge1xuICAgICAgaWYgKHJlcy5zdHlwZSA9PT0gU2ltcGxlUmVzdWx0VHlwZS5FcnJvcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0eXBlOiBTaW1wbGVSZXN1bHRUeXBlLkVycm9yLFxuICAgICAgICAgIHNlcnJvcjogZihyZXMuc2Vycm9yKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1hcCA9IChyZXMsIGYpID0+IHtcbiAgICAgIGlmIChyZXMuc3R5cGUgPT09IFNpbXBsZVJlc3VsdFR5cGUuVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdHlwZTogU2ltcGxlUmVzdWx0VHlwZS5WYWx1ZSxcbiAgICAgICAgICBzdmFsdWU6IGYocmVzLnN2YWx1ZSlcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBiaW5kJDEgPSAocmVzLCBmKSA9PiB7XG4gICAgICBpZiAocmVzLnN0eXBlID09PSBTaW1wbGVSZXN1bHRUeXBlLlZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmKHJlcy5zdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGJpbmRFcnJvciA9IChyZXMsIGYpID0+IHtcbiAgICAgIGlmIChyZXMuc3R5cGUgPT09IFNpbXBsZVJlc3VsdFR5cGUuRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGYocmVzLnNlcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc3ZhbHVlID0gdiA9PiAoe1xuICAgICAgc3R5cGU6IFNpbXBsZVJlc3VsdFR5cGUuVmFsdWUsXG4gICAgICBzdmFsdWU6IHZcbiAgICB9KTtcbiAgICBjb25zdCBzZXJyb3IgPSBlID0+ICh7XG4gICAgICBzdHlwZTogU2ltcGxlUmVzdWx0VHlwZS5FcnJvcixcbiAgICAgIHNlcnJvcjogZVxuICAgIH0pO1xuICAgIGNvbnN0IHRvUmVzdWx0ID0gcmVzID0+IGZvbGQkMShyZXMsIFJlc3VsdC5lcnJvciwgUmVzdWx0LnZhbHVlKTtcbiAgICBjb25zdCBmcm9tUmVzdWx0ID0gcmVzID0+IHJlcy5mb2xkKHNlcnJvciwgc3ZhbHVlKTtcbiAgICBjb25zdCBTaW1wbGVSZXN1bHQgPSB7XG4gICAgICBmcm9tUmVzdWx0LFxuICAgICAgdG9SZXN1bHQsXG4gICAgICBzdmFsdWUsXG4gICAgICBwYXJ0aXRpb24sXG4gICAgICBzZXJyb3IsXG4gICAgICBiaW5kOiBiaW5kJDEsXG4gICAgICBiaW5kRXJyb3IsXG4gICAgICBtYXAsXG4gICAgICBtYXBFcnJvcixcbiAgICAgIGZvbGQ6IGZvbGQkMVxuICAgIH07XG5cbiAgICBjb25zdCBmb3JtYXRPYmogPSBpbnB1dCA9PiB7XG4gICAgICByZXR1cm4gaXNPYmplY3QoaW5wdXQpICYmIGtleXMoaW5wdXQpLmxlbmd0aCA+IDEwMCA/ICcgcmVtb3ZlZCBkdWUgdG8gc2l6ZScgOiBKU09OLnN0cmluZ2lmeShpbnB1dCwgbnVsbCwgMik7XG4gICAgfTtcbiAgICBjb25zdCBmb3JtYXRFcnJvcnMgPSBlcnJvcnMgPT4ge1xuICAgICAgY29uc3QgZXMgPSBlcnJvcnMubGVuZ3RoID4gMTAgPyBlcnJvcnMuc2xpY2UoMCwgMTApLmNvbmNhdChbe1xuICAgICAgICAgIHBhdGg6IFtdLFxuICAgICAgICAgIGdldEVycm9ySW5mbzogY29uc3RhbnQoJy4uLiAob25seSBzaG93aW5nIGZpcnN0IHRlbiBmYWlsdXJlcyknKVxuICAgICAgICB9XSkgOiBlcnJvcnM7XG4gICAgICByZXR1cm4gbWFwJDMoZXMsIGUgPT4ge1xuICAgICAgICByZXR1cm4gJ0ZhaWxlZCBwYXRoOiAoJyArIGUucGF0aC5qb2luKCcgPiAnKSArICcpXFxuJyArIGUuZ2V0RXJyb3JJbmZvKCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbnUgPSAocGF0aCwgZ2V0RXJyb3JJbmZvKSA9PiB7XG4gICAgICByZXR1cm4gU2ltcGxlUmVzdWx0LnNlcnJvcihbe1xuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgZ2V0RXJyb3JJbmZvXG4gICAgICAgIH1dKTtcbiAgICB9O1xuICAgIGNvbnN0IG1pc3NpbmdSZXF1aXJlZCA9IChwYXRoLCBrZXksIG9iaikgPT4gbnUocGF0aCwgKCkgPT4gJ0NvdWxkIG5vdCBmaW5kIHZhbGlkICpyZXF1aXJlZCogdmFsdWUgZm9yIFwiJyArIGtleSArICdcIiBpbiAnICsgZm9ybWF0T2JqKG9iaikpO1xuICAgIGNvbnN0IG1pc3NpbmdLZXkgPSAocGF0aCwga2V5KSA9PiBudShwYXRoLCAoKSA9PiAnQ2hvaWNlIHNjaGVtYSBkaWQgbm90IGNvbnRhaW4gY2hvaWNlIGtleTogXCInICsga2V5ICsgJ1wiJyk7XG4gICAgY29uc3QgbWlzc2luZ0JyYW5jaCA9IChwYXRoLCBicmFuY2hlcywgYnJhbmNoKSA9PiBudShwYXRoLCAoKSA9PiAnVGhlIGNob3NlbiBzY2hlbWE6IFwiJyArIGJyYW5jaCArICdcIiBkaWQgbm90IGV4aXN0IGluIGJyYW5jaGVzOiAnICsgZm9ybWF0T2JqKGJyYW5jaGVzKSk7XG4gICAgY29uc3QgY3VzdG9tID0gKHBhdGgsIGVycikgPT4gbnUocGF0aCwgY29uc3RhbnQoZXJyKSk7XG5cbiAgICBjb25zdCBjaG9vc2VGcm9tID0gKHBhdGgsIGlucHV0LCBicmFuY2hlcywgY2gpID0+IHtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IGdldCRhKGJyYW5jaGVzLCBjaCk7XG4gICAgICByZXR1cm4gZmllbGRzLmZvbGQoKCkgPT4gbWlzc2luZ0JyYW5jaChwYXRoLCBicmFuY2hlcywgY2gpLCB2cCA9PiB2cC5leHRyYWN0KHBhdGguY29uY2F0KFsnYnJhbmNoOiAnICsgY2hdKSwgaW5wdXQpKTtcbiAgICB9O1xuICAgIGNvbnN0IGNob29zZSQxID0gKGtleSwgYnJhbmNoZXMpID0+IHtcbiAgICAgIGNvbnN0IGV4dHJhY3QgPSAocGF0aCwgaW5wdXQpID0+IHtcbiAgICAgICAgY29uc3QgY2hvaWNlID0gZ2V0JGEoaW5wdXQsIGtleSk7XG4gICAgICAgIHJldHVybiBjaG9pY2UuZm9sZCgoKSA9PiBtaXNzaW5nS2V5KHBhdGgsIGtleSksIGNob3NlbiA9PiBjaG9vc2VGcm9tKHBhdGgsIGlucHV0LCBicmFuY2hlcywgY2hvc2VuKSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdG9TdHJpbmcgPSAoKSA9PiAnY2hvb3NlT24oJyArIGtleSArICcpLiBQb3NzaWJsZSB2YWx1ZXM6ICcgKyBrZXlzKGJyYW5jaGVzKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4dHJhY3QsXG4gICAgICAgIHRvU3RyaW5nXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBzaGFsbG93ID0gKG9sZCwgbnUpID0+IHtcbiAgICAgIHJldHVybiBudTtcbiAgICB9O1xuICAgIGNvbnN0IGRlZXAgPSAob2xkLCBudSkgPT4ge1xuICAgICAgY29uc3QgYm90aE9iamVjdHMgPSBpc1BsYWluT2JqZWN0KG9sZCkgJiYgaXNQbGFpbk9iamVjdChudSk7XG4gICAgICByZXR1cm4gYm90aE9iamVjdHMgPyBkZWVwTWVyZ2Uob2xkLCBudSkgOiBudTtcbiAgICB9O1xuICAgIGNvbnN0IGJhc2VNZXJnZSA9IG1lcmdlciA9PiB7XG4gICAgICByZXR1cm4gKC4uLm9iamVjdHMpID0+IHtcbiAgICAgICAgaWYgKG9iamVjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBtZXJnZSB6ZXJvIG9iamVjdHNgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXQgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBvYmplY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgY29uc3QgY3VyT2JqZWN0ID0gb2JqZWN0c1tqXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjdXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChoYXMkMihjdXJPYmplY3QsIGtleSkpIHtcbiAgICAgICAgICAgICAgcmV0W2tleV0gPSBtZXJnZXIocmV0W2tleV0sIGN1ck9iamVjdFtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBkZWVwTWVyZ2UgPSBiYXNlTWVyZ2UoZGVlcCk7XG4gICAgY29uc3QgbWVyZ2UgPSBiYXNlTWVyZ2Uoc2hhbGxvdyk7XG5cbiAgICBjb25zdCByZXF1aXJlZCA9ICgpID0+ICh7XG4gICAgICB0YWc6ICdyZXF1aXJlZCcsXG4gICAgICBwcm9jZXNzOiB7fVxuICAgIH0pO1xuICAgIGNvbnN0IGRlZmF1bHRlZFRodW5rID0gZmFsbGJhY2tUaHVuayA9PiAoe1xuICAgICAgdGFnOiAnZGVmYXVsdGVkVGh1bmsnLFxuICAgICAgcHJvY2VzczogZmFsbGJhY2tUaHVua1xuICAgIH0pO1xuICAgIGNvbnN0IGRlZmF1bHRlZCQxID0gZmFsbGJhY2sgPT4gZGVmYXVsdGVkVGh1bmsoY29uc3RhbnQoZmFsbGJhY2spKTtcbiAgICBjb25zdCBhc09wdGlvbiA9ICgpID0+ICh7XG4gICAgICB0YWc6ICdvcHRpb24nLFxuICAgICAgcHJvY2Vzczoge31cbiAgICB9KTtcblxuICAgIGNvbnN0IG1lcmdlVmFsdWVzID0gKHZhbHVlcywgYmFzZSkgPT4gdmFsdWVzLmxlbmd0aCA+IDAgPyBTaW1wbGVSZXN1bHQuc3ZhbHVlKGRlZXBNZXJnZShiYXNlLCBtZXJnZS5hcHBseSh1bmRlZmluZWQsIHZhbHVlcykpKSA6IFNpbXBsZVJlc3VsdC5zdmFsdWUoYmFzZSk7XG4gICAgY29uc3QgbWVyZ2VFcnJvcnMgPSBlcnJvcnMgPT4gY29tcG9zZShTaW1wbGVSZXN1bHQuc2Vycm9yLCBmbGF0dGVuKShlcnJvcnMpO1xuICAgIGNvbnN0IGNvbnNvbGlkYXRlT2JqID0gKG9iamVjdHMsIGJhc2UpID0+IHtcbiAgICAgIGNvbnN0IHBhcnRpdGlvbiA9IFNpbXBsZVJlc3VsdC5wYXJ0aXRpb24ob2JqZWN0cyk7XG4gICAgICByZXR1cm4gcGFydGl0aW9uLmVycm9ycy5sZW5ndGggPiAwID8gbWVyZ2VFcnJvcnMocGFydGl0aW9uLmVycm9ycykgOiBtZXJnZVZhbHVlcyhwYXJ0aXRpb24udmFsdWVzLCBiYXNlKTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbnNvbGlkYXRlQXJyID0gb2JqZWN0cyA9PiB7XG4gICAgICBjb25zdCBwYXJ0aXRpb25zID0gU2ltcGxlUmVzdWx0LnBhcnRpdGlvbihvYmplY3RzKTtcbiAgICAgIHJldHVybiBwYXJ0aXRpb25zLmVycm9ycy5sZW5ndGggPiAwID8gbWVyZ2VFcnJvcnMocGFydGl0aW9ucy5lcnJvcnMpIDogU2ltcGxlUmVzdWx0LnN2YWx1ZShwYXJ0aXRpb25zLnZhbHVlcyk7XG4gICAgfTtcbiAgICBjb25zdCBSZXN1bHRDb21iaW5lID0ge1xuICAgICAgY29uc29saWRhdGVPYmosXG4gICAgICBjb25zb2xpZGF0ZUFyclxuICAgIH07XG5cbiAgICBjb25zdCBmaWVsZCQxID0gKGtleSwgbmV3S2V5LCBwcmVzZW5jZSwgcHJvcCkgPT4gKHtcbiAgICAgIHRhZzogJ2ZpZWxkJyxcbiAgICAgIGtleSxcbiAgICAgIG5ld0tleSxcbiAgICAgIHByZXNlbmNlLFxuICAgICAgcHJvcFxuICAgIH0pO1xuICAgIGNvbnN0IGN1c3RvbUZpZWxkJDEgPSAobmV3S2V5LCBpbnN0YW50aWF0b3IpID0+ICh7XG4gICAgICB0YWc6ICdjdXN0b20nLFxuICAgICAgbmV3S2V5LFxuICAgICAgaW5zdGFudGlhdG9yXG4gICAgfSk7XG4gICAgY29uc3QgZm9sZCA9ICh2YWx1ZSwgaWZGaWVsZCwgaWZDdXN0b20pID0+IHtcbiAgICAgIHN3aXRjaCAodmFsdWUudGFnKSB7XG4gICAgICBjYXNlICdmaWVsZCc6XG4gICAgICAgIHJldHVybiBpZkZpZWxkKHZhbHVlLmtleSwgdmFsdWUubmV3S2V5LCB2YWx1ZS5wcmVzZW5jZSwgdmFsdWUucHJvcCk7XG4gICAgICBjYXNlICdjdXN0b20nOlxuICAgICAgICByZXR1cm4gaWZDdXN0b20odmFsdWUubmV3S2V5LCB2YWx1ZS5pbnN0YW50aWF0b3IpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB2YWx1ZSA9IHZhbGlkYXRvciA9PiB7XG4gICAgICBjb25zdCBleHRyYWN0ID0gKHBhdGgsIHZhbCkgPT4ge1xuICAgICAgICByZXR1cm4gU2ltcGxlUmVzdWx0LmJpbmRFcnJvcih2YWxpZGF0b3IodmFsKSwgZXJyID0+IGN1c3RvbShwYXRoLCBlcnIpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCB0b1N0cmluZyA9IGNvbnN0YW50KCd2YWwnKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4dHJhY3QsXG4gICAgICAgIHRvU3RyaW5nXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgYW55VmFsdWUkMSA9IHZhbHVlKFNpbXBsZVJlc3VsdC5zdmFsdWUpO1xuXG4gICAgY29uc3QgcmVxdWlyZWRBY2Nlc3MgPSAocGF0aCwgb2JqLCBrZXksIGJ1bmRsZSkgPT4gZ2V0JGEob2JqLCBrZXkpLmZvbGQoKCkgPT4gbWlzc2luZ1JlcXVpcmVkKHBhdGgsIGtleSwgb2JqKSwgYnVuZGxlKTtcbiAgICBjb25zdCBmYWxsYmFja0FjY2VzcyA9IChvYmosIGtleSwgZmFsbGJhY2ssIGJ1bmRsZSkgPT4ge1xuICAgICAgY29uc3QgdiA9IGdldCRhKG9iaiwga2V5KS5nZXRPclRodW5rKCgpID0+IGZhbGxiYWNrKG9iaikpO1xuICAgICAgcmV0dXJuIGJ1bmRsZSh2KTtcbiAgICB9O1xuICAgIGNvbnN0IG9wdGlvbkFjY2VzcyA9IChvYmosIGtleSwgYnVuZGxlKSA9PiBidW5kbGUoZ2V0JGEob2JqLCBrZXkpKTtcbiAgICBjb25zdCBvcHRpb25EZWZhdWx0ZWRBY2Nlc3MgPSAob2JqLCBrZXksIGZhbGxiYWNrLCBidW5kbGUpID0+IHtcbiAgICAgIGNvbnN0IG9wdCA9IGdldCRhKG9iaiwga2V5KS5tYXAodmFsID0+IHZhbCA9PT0gdHJ1ZSA/IGZhbGxiYWNrKG9iaikgOiB2YWwpO1xuICAgICAgcmV0dXJuIGJ1bmRsZShvcHQpO1xuICAgIH07XG4gICAgY29uc3QgZXh0cmFjdEZpZWxkID0gKGZpZWxkLCBwYXRoLCBvYmosIGtleSwgcHJvcCkgPT4ge1xuICAgICAgY29uc3QgYnVuZGxlID0gYXYgPT4gcHJvcC5leHRyYWN0KHBhdGguY29uY2F0KFtrZXldKSwgYXYpO1xuICAgICAgY29uc3QgYnVuZGxlQXNPcHRpb24gPSBvcHRWYWx1ZSA9PiBvcHRWYWx1ZS5mb2xkKCgpID0+IFNpbXBsZVJlc3VsdC5zdmFsdWUoT3B0aW9uYWwubm9uZSgpKSwgb3YgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwcm9wLmV4dHJhY3QocGF0aC5jb25jYXQoW2tleV0pLCBvdik7XG4gICAgICAgIHJldHVybiBTaW1wbGVSZXN1bHQubWFwKHJlc3VsdCwgT3B0aW9uYWwuc29tZSk7XG4gICAgICB9KTtcbiAgICAgIHN3aXRjaCAoZmllbGQudGFnKSB7XG4gICAgICBjYXNlICdyZXF1aXJlZCc6XG4gICAgICAgIHJldHVybiByZXF1aXJlZEFjY2VzcyhwYXRoLCBvYmosIGtleSwgYnVuZGxlKTtcbiAgICAgIGNhc2UgJ2RlZmF1bHRlZFRodW5rJzpcbiAgICAgICAgcmV0dXJuIGZhbGxiYWNrQWNjZXNzKG9iaiwga2V5LCBmaWVsZC5wcm9jZXNzLCBidW5kbGUpO1xuICAgICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgICAgcmV0dXJuIG9wdGlvbkFjY2VzcyhvYmosIGtleSwgYnVuZGxlQXNPcHRpb24pO1xuICAgICAgY2FzZSAnZGVmYXVsdGVkT3B0aW9uVGh1bmsnOlxuICAgICAgICByZXR1cm4gb3B0aW9uRGVmYXVsdGVkQWNjZXNzKG9iaiwga2V5LCBmaWVsZC5wcm9jZXNzLCBidW5kbGVBc09wdGlvbik7XG4gICAgICBjYXNlICdtZXJnZVdpdGhUaHVuayc6IHtcbiAgICAgICAgICByZXR1cm4gZmFsbGJhY2tBY2Nlc3Mob2JqLCBrZXksIGNvbnN0YW50KHt9KSwgdiA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkZWVwTWVyZ2UoZmllbGQucHJvY2VzcyhvYmopLCB2KTtcbiAgICAgICAgICAgIHJldHVybiBidW5kbGUocmVzdWx0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZXh0cmFjdEZpZWxkcyA9IChwYXRoLCBvYmosIGZpZWxkcykgPT4ge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9IHt9O1xuICAgICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICBmb2xkKGZpZWxkLCAoa2V5LCBuZXdLZXksIHByZXNlbmNlLCBwcm9wKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdEZpZWxkKHByZXNlbmNlLCBwYXRoLCBvYmosIGtleSwgcHJvcCk7XG4gICAgICAgICAgU2ltcGxlUmVzdWx0LmZvbGQocmVzdWx0LCBlcnIgPT4ge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2goLi4uZXJyKTtcbiAgICAgICAgICB9LCByZXMgPT4ge1xuICAgICAgICAgICAgc3VjY2Vzc1tuZXdLZXldID0gcmVzO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCAobmV3S2V5LCBpbnN0YW50aWF0b3IpID0+IHtcbiAgICAgICAgICBzdWNjZXNzW25ld0tleV0gPSBpbnN0YW50aWF0b3Iob2JqKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXJyb3JzLmxlbmd0aCA+IDAgPyBTaW1wbGVSZXN1bHQuc2Vycm9yKGVycm9ycykgOiBTaW1wbGVSZXN1bHQuc3ZhbHVlKHN1Y2Nlc3MpO1xuICAgIH07XG4gICAgY29uc3Qgb2JqT2YgPSB2YWx1ZXMgPT4ge1xuICAgICAgY29uc3QgZXh0cmFjdCA9IChwYXRoLCBvKSA9PiBleHRyYWN0RmllbGRzKHBhdGgsIG8sIHZhbHVlcyk7XG4gICAgICBjb25zdCB0b1N0cmluZyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZmllbGRTdHJpbmdzID0gbWFwJDModmFsdWVzLCB2YWx1ZSA9PiBmb2xkKHZhbHVlLCAoa2V5LCBfb2tleSwgX3ByZXNlbmNlLCBwcm9wKSA9PiBrZXkgKyAnIC0+ICcgKyBwcm9wLnRvU3RyaW5nKCksIChuZXdLZXksIF9pbnN0YW50aWF0b3IpID0+ICdzdGF0ZSgnICsgbmV3S2V5ICsgJyknKSk7XG4gICAgICAgIHJldHVybiAnb2Jqe1xcbicgKyBmaWVsZFN0cmluZ3Muam9pbignXFxuJykgKyAnfSc7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXh0cmFjdCxcbiAgICAgICAgdG9TdHJpbmdcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBhcnJPZiA9IHByb3AgPT4ge1xuICAgICAgY29uc3QgZXh0cmFjdCA9IChwYXRoLCBhcnJheSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gbWFwJDMoYXJyYXksIChhLCBpKSA9PiBwcm9wLmV4dHJhY3QocGF0aC5jb25jYXQoWydbJyArIGkgKyAnXSddKSwgYSkpO1xuICAgICAgICByZXR1cm4gUmVzdWx0Q29tYmluZS5jb25zb2xpZGF0ZUFycihyZXN1bHRzKTtcbiAgICAgIH07XG4gICAgICBjb25zdCB0b1N0cmluZyA9ICgpID0+ICdhcnJheSgnICsgcHJvcC50b1N0cmluZygpICsgJyknO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXh0cmFjdCxcbiAgICAgICAgdG9TdHJpbmdcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHZhbHVlT2YgPSB2YWxpZGF0b3IgPT4gdmFsdWUodiA9PiB2YWxpZGF0b3IodikuZm9sZChTaW1wbGVSZXN1bHQuc2Vycm9yLCBTaW1wbGVSZXN1bHQuc3ZhbHVlKSk7XG4gICAgY29uc3QgZXh0cmFjdFZhbHVlID0gKGxhYmVsLCBwcm9wLCBvYmopID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IHByb3AuZXh0cmFjdChbbGFiZWxdLCBvYmopO1xuICAgICAgcmV0dXJuIFNpbXBsZVJlc3VsdC5tYXBFcnJvcihyZXMsIGVycnMgPT4gKHtcbiAgICAgICAgaW5wdXQ6IG9iaixcbiAgICAgICAgZXJyb3JzOiBlcnJzXG4gICAgICB9KSk7XG4gICAgfTtcbiAgICBjb25zdCBhc1JhdyA9IChsYWJlbCwgcHJvcCwgb2JqKSA9PiBTaW1wbGVSZXN1bHQudG9SZXN1bHQoZXh0cmFjdFZhbHVlKGxhYmVsLCBwcm9wLCBvYmopKTtcbiAgICBjb25zdCBmb3JtYXRFcnJvciA9IGVyckluZm8gPT4ge1xuICAgICAgcmV0dXJuICdFcnJvcnM6IFxcbicgKyBmb3JtYXRFcnJvcnMoZXJySW5mby5lcnJvcnMpLmpvaW4oJ1xcbicpICsgJ1xcblxcbklucHV0IG9iamVjdDogJyArIGZvcm1hdE9iaihlcnJJbmZvLmlucHV0KTtcbiAgICB9O1xuICAgIGNvbnN0IGNob29zZSA9IChrZXksIGJyYW5jaGVzKSA9PiBjaG9vc2UkMShrZXksIG1hcCQyKGJyYW5jaGVzLCBvYmpPZikpO1xuXG4gICAgY29uc3QgYW55VmFsdWUgPSBjb25zdGFudChhbnlWYWx1ZSQxKTtcbiAgICBjb25zdCB0eXBlZFZhbHVlID0gKHZhbGlkYXRvciwgZXhwZWN0ZWRUeXBlKSA9PiB2YWx1ZShhID0+IHtcbiAgICAgIGNvbnN0IGFjdHVhbFR5cGUgPSB0eXBlb2YgYTtcbiAgICAgIHJldHVybiB2YWxpZGF0b3IoYSkgPyBTaW1wbGVSZXN1bHQuc3ZhbHVlKGEpIDogU2ltcGxlUmVzdWx0LnNlcnJvcihgRXhwZWN0ZWQgdHlwZTogJHsgZXhwZWN0ZWRUeXBlIH0gYnV0IGdvdDogJHsgYWN0dWFsVHlwZSB9YCk7XG4gICAgfSk7XG4gICAgY29uc3QgbnVtYmVyID0gdHlwZWRWYWx1ZShpc051bWJlciwgJ251bWJlcicpO1xuICAgIGNvbnN0IHN0cmluZyA9IHR5cGVkVmFsdWUoaXNTdHJpbmcsICdzdHJpbmcnKTtcbiAgICBjb25zdCBib29sZWFuID0gdHlwZWRWYWx1ZShpc0Jvb2xlYW4sICdib29sZWFuJyk7XG4gICAgY29uc3QgZnVuY3Rpb25Qcm9jZXNzb3IgPSB0eXBlZFZhbHVlKGlzRnVuY3Rpb24sICdmdW5jdGlvbicpO1xuXG4gICAgY29uc3QgZmllbGQgPSBmaWVsZCQxO1xuICAgIGNvbnN0IGN1c3RvbUZpZWxkID0gY3VzdG9tRmllbGQkMTtcbiAgICBjb25zdCB2YWxpZGF0ZUVudW0gPSB2YWx1ZXMgPT4gdmFsdWVPZih2YWx1ZSA9PiBjb250YWlucyQyKHZhbHVlcywgdmFsdWUpID8gUmVzdWx0LnZhbHVlKHZhbHVlKSA6IFJlc3VsdC5lcnJvcihgVW5zdXBwb3J0ZWQgdmFsdWU6IFwiJHsgdmFsdWUgfVwiLCBjaG9vc2Ugb25lIG9mIFwiJHsgdmFsdWVzLmpvaW4oJywgJykgfVwiLmApKTtcbiAgICBjb25zdCByZXF1aXJlZE9mID0gKGtleSwgc2NoZW1hKSA9PiBmaWVsZChrZXksIGtleSwgcmVxdWlyZWQoKSwgc2NoZW1hKTtcbiAgICBjb25zdCByZXF1aXJlZFN0cmluZyA9IGtleSA9PiByZXF1aXJlZE9mKGtleSwgc3RyaW5nKTtcbiAgICBjb25zdCByZXF1aXJlZEZ1bmN0aW9uID0ga2V5ID0+IHJlcXVpcmVkT2Yoa2V5LCBmdW5jdGlvblByb2Nlc3Nvcik7XG4gICAgY29uc3QgcmVxdWlyZWRBcnJheU9mID0gKGtleSwgc2NoZW1hKSA9PiBmaWVsZChrZXksIGtleSwgcmVxdWlyZWQoKSwgYXJyT2Yoc2NoZW1hKSk7XG4gICAgY29uc3Qgb3B0aW9uT2YgPSAoa2V5LCBzY2hlbWEpID0+IGZpZWxkKGtleSwga2V5LCBhc09wdGlvbigpLCBzY2hlbWEpO1xuICAgIGNvbnN0IG9wdGlvblN0cmluZyA9IGtleSA9PiBvcHRpb25PZihrZXksIHN0cmluZyk7XG4gICAgY29uc3Qgb3B0aW9uRnVuY3Rpb24gPSBrZXkgPT4gb3B0aW9uT2Yoa2V5LCBmdW5jdGlvblByb2Nlc3Nvcik7XG4gICAgY29uc3QgZGVmYXVsdGVkID0gKGtleSwgZmFsbGJhY2spID0+IGZpZWxkKGtleSwga2V5LCBkZWZhdWx0ZWQkMShmYWxsYmFjayksIGFueVZhbHVlKCkpO1xuICAgIGNvbnN0IGRlZmF1bHRlZE9mID0gKGtleSwgZmFsbGJhY2ssIHNjaGVtYSkgPT4gZmllbGQoa2V5LCBrZXksIGRlZmF1bHRlZCQxKGZhbGxiYWNrKSwgc2NoZW1hKTtcbiAgICBjb25zdCBkZWZhdWx0ZWROdW1iZXIgPSAoa2V5LCBmYWxsYmFjaykgPT4gZGVmYXVsdGVkT2Yoa2V5LCBmYWxsYmFjaywgbnVtYmVyKTtcbiAgICBjb25zdCBkZWZhdWx0ZWRTdHJpbmcgPSAoa2V5LCBmYWxsYmFjaykgPT4gZGVmYXVsdGVkT2Yoa2V5LCBmYWxsYmFjaywgc3RyaW5nKTtcbiAgICBjb25zdCBkZWZhdWx0ZWRTdHJpbmdFbnVtID0gKGtleSwgZmFsbGJhY2ssIHZhbHVlcykgPT4gZGVmYXVsdGVkT2Yoa2V5LCBmYWxsYmFjaywgdmFsaWRhdGVFbnVtKHZhbHVlcykpO1xuICAgIGNvbnN0IGRlZmF1bHRlZEJvb2xlYW4gPSAoa2V5LCBmYWxsYmFjaykgPT4gZGVmYXVsdGVkT2Yoa2V5LCBmYWxsYmFjaywgYm9vbGVhbik7XG4gICAgY29uc3QgZGVmYXVsdGVkRnVuY3Rpb24gPSAoa2V5LCBmYWxsYmFjaykgPT4gZGVmYXVsdGVkT2Yoa2V5LCBmYWxsYmFjaywgZnVuY3Rpb25Qcm9jZXNzb3IpO1xuICAgIGNvbnN0IGRlZmF1bHRlZEFycmF5T2YgPSAoa2V5LCBmYWxsYmFjaywgc2NoZW1hKSA9PiBkZWZhdWx0ZWRPZihrZXksIGZhbGxiYWNrLCBhcnJPZihzY2hlbWEpKTtcblxuICAgIGNvbnN0IHR5cGUgPSByZXF1aXJlZFN0cmluZygndHlwZScpO1xuICAgIGNvbnN0IGZldGNoJDEgPSByZXF1aXJlZEZ1bmN0aW9uKCdmZXRjaCcpO1xuICAgIGNvbnN0IG9uQWN0aW9uID0gcmVxdWlyZWRGdW5jdGlvbignb25BY3Rpb24nKTtcbiAgICBjb25zdCBvblNldHVwID0gZGVmYXVsdGVkRnVuY3Rpb24oJ29uU2V0dXAnLCAoKSA9PiBub29wKTtcbiAgICBjb25zdCBvcHRpb25hbFRleHQgPSBvcHRpb25TdHJpbmcoJ3RleHQnKTtcbiAgICBjb25zdCBvcHRpb25hbEljb24gPSBvcHRpb25TdHJpbmcoJ2ljb24nKTtcbiAgICBjb25zdCBvcHRpb25hbFRvb2x0aXAgPSBvcHRpb25TdHJpbmcoJ3Rvb2x0aXAnKTtcbiAgICBjb25zdCBvcHRpb25hbExhYmVsID0gb3B0aW9uU3RyaW5nKCdsYWJlbCcpO1xuICAgIGNvbnN0IGFjdGl2ZSA9IGRlZmF1bHRlZEJvb2xlYW4oJ2FjdGl2ZScsIGZhbHNlKTtcbiAgICBjb25zdCBlbmFibGVkID0gZGVmYXVsdGVkQm9vbGVhbignZW5hYmxlZCcsIHRydWUpO1xuICAgIGNvbnN0IHByaW1hcnkgPSBkZWZhdWx0ZWRCb29sZWFuKCdwcmltYXJ5JywgZmFsc2UpO1xuICAgIGNvbnN0IGRlZmF1bHRlZENvbHVtbnMgPSBudW0gPT4gZGVmYXVsdGVkKCdjb2x1bW5zJywgbnVtKTtcbiAgICBjb25zdCBkZWZhdWx0ZWRUeXBlID0gdHlwZSA9PiBkZWZhdWx0ZWRTdHJpbmcoJ3R5cGUnLCB0eXBlKTtcblxuICAgIGNvbnN0IGF1dG9jb21wbGV0ZXJTY2hlbWEgPSBvYmpPZihbXG4gICAgICB0eXBlLFxuICAgICAgcmVxdWlyZWRTdHJpbmcoJ3RyaWdnZXInKSxcbiAgICAgIGRlZmF1bHRlZE51bWJlcignbWluQ2hhcnMnLCAxKSxcbiAgICAgIGRlZmF1bHRlZENvbHVtbnMoMSksXG4gICAgICBkZWZhdWx0ZWROdW1iZXIoJ21heFJlc3VsdHMnLCAxMCksXG4gICAgICBvcHRpb25GdW5jdGlvbignbWF0Y2hlcycpLFxuICAgICAgZmV0Y2gkMSxcbiAgICAgIG9uQWN0aW9uLFxuICAgICAgZGVmYXVsdGVkQXJyYXlPZignaGlnaGxpZ2h0T24nLCBbXSwgc3RyaW5nKVxuICAgIF0pO1xuICAgIGNvbnN0IGNyZWF0ZUF1dG9jb21wbGV0ZXIgPSBzcGVjID0+IGFzUmF3KCdBdXRvY29tcGxldGVyJywgYXV0b2NvbXBsZXRlclNjaGVtYSwge1xuICAgICAgdHJpZ2dlcjogc3BlYy5jaCxcbiAgICAgIC4uLnNwZWNcbiAgICB9KTtcblxuICAgIGNvbnN0IGJhc2VUb29sYmFyQnV0dG9uRmllbGRzID0gW1xuICAgICAgZW5hYmxlZCxcbiAgICAgIG9wdGlvbmFsVG9vbHRpcCxcbiAgICAgIG9wdGlvbmFsSWNvbixcbiAgICAgIG9wdGlvbmFsVGV4dCxcbiAgICAgIG9uU2V0dXBcbiAgICBdO1xuXG4gICAgY29uc3QgYmFzZVRvb2xiYXJUb2dnbGVCdXR0b25GaWVsZHMgPSBbYWN0aXZlXS5jb25jYXQoYmFzZVRvb2xiYXJCdXR0b25GaWVsZHMpO1xuXG4gICAgY29uc3QgY29udGV4dEJhckZpZWxkcyA9IFtcbiAgICAgIGRlZmF1bHRlZEZ1bmN0aW9uKCdwcmVkaWNhdGUnLCBuZXZlciksXG4gICAgICBkZWZhdWx0ZWRTdHJpbmdFbnVtKCdzY29wZScsICdub2RlJywgW1xuICAgICAgICAnbm9kZScsXG4gICAgICAgICdlZGl0b3InXG4gICAgICBdKSxcbiAgICAgIGRlZmF1bHRlZFN0cmluZ0VudW0oJ3Bvc2l0aW9uJywgJ3NlbGVjdGlvbicsIFtcbiAgICAgICAgJ25vZGUnLFxuICAgICAgICAnc2VsZWN0aW9uJyxcbiAgICAgICAgJ2xpbmUnXG4gICAgICBdKVxuICAgIF07XG5cbiAgICBjb25zdCBjb250ZXh0QnV0dG9uRmllbGRzID0gYmFzZVRvb2xiYXJCdXR0b25GaWVsZHMuY29uY2F0KFtcbiAgICAgIGRlZmF1bHRlZFR5cGUoJ2NvbnRleHRmb3JtYnV0dG9uJyksXG4gICAgICBwcmltYXJ5LFxuICAgICAgb25BY3Rpb24sXG4gICAgICBjdXN0b21GaWVsZCgnb3JpZ2luYWwnLCBpZGVudGl0eSlcbiAgICBdKTtcbiAgICBjb25zdCBjb250ZXh0VG9nZ2xlQnV0dG9uRmllbGRzID0gYmFzZVRvb2xiYXJUb2dnbGVCdXR0b25GaWVsZHMuY29uY2F0KFtcbiAgICAgIGRlZmF1bHRlZFR5cGUoJ2NvbnRleHRmb3JtYnV0dG9uJyksXG4gICAgICBwcmltYXJ5LFxuICAgICAgb25BY3Rpb24sXG4gICAgICBjdXN0b21GaWVsZCgnb3JpZ2luYWwnLCBpZGVudGl0eSlcbiAgICBdKTtcbiAgICBjb25zdCBsYXVuY2hCdXR0b25GaWVsZHMgPSBiYXNlVG9vbGJhckJ1dHRvbkZpZWxkcy5jb25jYXQoW2RlZmF1bHRlZFR5cGUoJ2NvbnRleHRmb3JtYnV0dG9uJyldKTtcbiAgICBjb25zdCBsYXVuY2hUb2dnbGVCdXR0b25GaWVsZHMgPSBiYXNlVG9vbGJhclRvZ2dsZUJ1dHRvbkZpZWxkcy5jb25jYXQoW2RlZmF1bHRlZFR5cGUoJ2NvbnRleHRmb3JtdG9nZ2xlYnV0dG9uJyldKTtcbiAgICBjb25zdCB0b2dnbGVPck5vcm1hbCA9IGNob29zZSgndHlwZScsIHtcbiAgICAgIGNvbnRleHRmb3JtYnV0dG9uOiBjb250ZXh0QnV0dG9uRmllbGRzLFxuICAgICAgY29udGV4dGZvcm10b2dnbGVidXR0b246IGNvbnRleHRUb2dnbGVCdXR0b25GaWVsZHNcbiAgICB9KTtcbiAgICBvYmpPZihbXG4gICAgICBkZWZhdWx0ZWRUeXBlKCdjb250ZXh0Zm9ybScpLFxuICAgICAgZGVmYXVsdGVkRnVuY3Rpb24oJ2luaXRWYWx1ZScsIGNvbnN0YW50KCcnKSksXG4gICAgICBvcHRpb25hbExhYmVsLFxuICAgICAgcmVxdWlyZWRBcnJheU9mKCdjb21tYW5kcycsIHRvZ2dsZU9yTm9ybWFsKSxcbiAgICAgIG9wdGlvbk9mKCdsYXVuY2gnLCBjaG9vc2UoJ3R5cGUnLCB7XG4gICAgICAgIGNvbnRleHRmb3JtYnV0dG9uOiBsYXVuY2hCdXR0b25GaWVsZHMsXG4gICAgICAgIGNvbnRleHRmb3JtdG9nZ2xlYnV0dG9uOiBsYXVuY2hUb2dnbGVCdXR0b25GaWVsZHNcbiAgICAgIH0pKVxuICAgIF0uY29uY2F0KGNvbnRleHRCYXJGaWVsZHMpKTtcblxuICAgIGNvbnN0IHJlZ2lzdGVyJDIgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgcG9wdXBzID0gZWRpdG9yLnVpLnJlZ2lzdHJ5LmdldEFsbCgpLnBvcHVwcztcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSBtYXAkMihwb3B1cHMsIHBvcHVwID0+IGNyZWF0ZUF1dG9jb21wbGV0ZXIocG9wdXApLmZvbGQoZXJyID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdEVycm9yKGVycikpO1xuICAgICAgfSwgaWRlbnRpdHkpKTtcbiAgICAgIGNvbnN0IHRyaWdnZXJzID0gc3RyaW5nQXJyYXkobWFwVG9BcnJheShkYXRhc2V0LCB2ID0+IHYudHJpZ2dlcikpO1xuICAgICAgY29uc3QgZGF0YXNldFZhbHVlcyA9IHZhbHVlcyhkYXRhc2V0KTtcbiAgICAgIGNvbnN0IGxvb2t1cEJ5VHJpZ2dlciA9IHRyaWdnZXIgPT4gZmlsdGVyJDUoZGF0YXNldFZhbHVlcywgZHYgPT4gZHYudHJpZ2dlciA9PT0gdHJpZ2dlcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhc2V0LFxuICAgICAgICB0cmlnZ2VycyxcbiAgICAgICAgbG9va3VwQnlUcmlnZ2VyXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBzZXR1cEVkaXRvcklucHV0ID0gKGVkaXRvciwgYXBpKSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGUgPSBsYXN0JDEoYXBpLmxvYWQsIDUwKTtcbiAgICAgIGVkaXRvci5vbigna2V5cHJlc3MgY29tcG9zaXRpb25lbmQnLCBlID0+IHtcbiAgICAgICAgaWYgKGUud2hpY2ggPT09IDI3KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZS50aHJvdHRsZSgpO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ2tleWRvd24nLCBlID0+IHtcbiAgICAgICAgY29uc3Qga2V5Q29kZSA9IGUud2hpY2g7XG4gICAgICAgIGlmIChrZXlDb2RlID09PSA4KSB7XG4gICAgICAgICAgdXBkYXRlLnRocm90dGxlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgICBhcGkuY2FuY2VsSWZOZWNlc3NhcnkoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ3JlbW92ZScsIHVwZGF0ZS5jYW5jZWwpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0dXAkaiA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBhY3RpdmVBdXRvY29tcGxldGVyID0gdmFsdWUkMigpO1xuICAgICAgY29uc3QgdWlBY3RpdmUgPSBDZWxsKGZhbHNlKTtcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gYWN0aXZlQXV0b2NvbXBsZXRlci5pc1NldDtcbiAgICAgIGNvbnN0IGNhbmNlbElmTmVjZXNzYXJ5ID0gKCkgPT4ge1xuICAgICAgICBpZiAoaXNBY3RpdmUoKSkge1xuICAgICAgICAgIHJlbW92ZUF1dG9jb21wbGV0ZXJEZWNvcmF0aW9uKGVkaXRvcik7XG4gICAgICAgICAgZmlyZUF1dG9jb21wbGV0ZXJFbmQoZWRpdG9yKTtcbiAgICAgICAgICB1aUFjdGl2ZS5zZXQoZmFsc2UpO1xuICAgICAgICAgIGFjdGl2ZUF1dG9jb21wbGV0ZXIuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbW1lbmNlSWZOZWNlc3NhcnkgPSBjb250ZXh0ID0+IHtcbiAgICAgICAgaWYgKCFpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgYWRkQXV0b2NvbXBsZXRlckRlY29yYXRpb24oZWRpdG9yLCBjb250ZXh0LnJhbmdlKTtcbiAgICAgICAgICBhY3RpdmVBdXRvY29tcGxldGVyLnNldCh7XG4gICAgICAgICAgICB0cmlnZ2VyOiBjb250ZXh0LnRyaWdnZXIsXG4gICAgICAgICAgICBtYXRjaExlbmd0aDogY29udGV4dC50ZXh0Lmxlbmd0aFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0QXV0b2NvbXBsZXRlcnMgPSBjYWNoZWQoKCkgPT4gcmVnaXN0ZXIkMihlZGl0b3IpKTtcbiAgICAgIGNvbnN0IGRvTG9va3VwID0gZmV0Y2hPcHRpb25zID0+IGFjdGl2ZUF1dG9jb21wbGV0ZXIuZ2V0KCkubWFwKGFjID0+IGdldENvbnRleHQoZWRpdG9yLmRvbSwgZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSwgYWMudHJpZ2dlcikuYmluZChuZXdDb250ZXh0ID0+IGxvb2t1cFdpdGhDb250ZXh0KGVkaXRvciwgZ2V0QXV0b2NvbXBsZXRlcnMsIG5ld0NvbnRleHQsIGZldGNoT3B0aW9ucykpKS5nZXRPclRodW5rKCgpID0+IGxvb2t1cChlZGl0b3IsIGdldEF1dG9jb21wbGV0ZXJzKSk7XG4gICAgICBjb25zdCBsb2FkID0gZmV0Y2hPcHRpb25zID0+IHtcbiAgICAgICAgZG9Mb29rdXAoZmV0Y2hPcHRpb25zKS5mb2xkKGNhbmNlbElmTmVjZXNzYXJ5LCBsb29rdXBJbmZvID0+IHtcbiAgICAgICAgICBjb21tZW5jZUlmTmVjZXNzYXJ5KGxvb2t1cEluZm8uY29udGV4dCk7XG4gICAgICAgICAgbG9va3VwSW5mby5sb29rdXBEYXRhLnRoZW4obG9va3VwRGF0YSA9PiB7XG4gICAgICAgICAgICBhY3RpdmVBdXRvY29tcGxldGVyLmdldCgpLm1hcChhYyA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBsb29rdXBJbmZvLmNvbnRleHQ7XG4gICAgICAgICAgICAgIGlmIChhYy50cmlnZ2VyID09PSBjb250ZXh0LnRyaWdnZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC50ZXh0Lmxlbmd0aCAtIGFjLm1hdGNoTGVuZ3RoID49IDEwKSB7XG4gICAgICAgICAgICAgICAgICBjYW5jZWxJZk5lY2Vzc2FyeSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBhY3RpdmVBdXRvY29tcGxldGVyLnNldCh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmFjLFxuICAgICAgICAgICAgICAgICAgICBtYXRjaExlbmd0aDogY29udGV4dC50ZXh0Lmxlbmd0aFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBpZiAodWlBY3RpdmUuZ2V0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlyZUF1dG9jb21wbGV0ZXJVcGRhdGUoZWRpdG9yLCB7IGxvb2t1cERhdGEgfSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1aUFjdGl2ZS5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGZpcmVBdXRvY29tcGxldGVyU3RhcnQoZWRpdG9yLCB7IGxvb2t1cERhdGEgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLmFkZENvbW1hbmQoJ21jZUF1dG9jb21wbGV0ZXJSZWxvYWQnLCAoX3VpLCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBmZXRjaE9wdGlvbnMgPSBpc09iamVjdCh2YWx1ZSkgPyB2YWx1ZS5mZXRjaE9wdGlvbnMgOiB7fTtcbiAgICAgICAgbG9hZChmZXRjaE9wdGlvbnMpO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3IuYWRkQ29tbWFuZCgnbWNlQXV0b2NvbXBsZXRlckNsb3NlJywgY2FuY2VsSWZOZWNlc3NhcnkpO1xuICAgICAgc2V0dXBFZGl0b3JJbnB1dChlZGl0b3IsIHtcbiAgICAgICAgY2FuY2VsSWZOZWNlc3NhcnksXG4gICAgICAgIGxvYWRcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBicm93c2VyJDEgPSBkZXRlY3QkMigpLmJyb3dzZXI7XG4gICAgY29uc3QgaXNTYWZhcmkgPSBicm93c2VyJDEuaXNTYWZhcmkoKTtcbiAgICBjb25zdCBlbXB0eU5vZGVDb250ZW50cyA9IG5vZGUgPT4gZmlsbFdpdGhQYWRkaW5nQnIoU3VnYXJFbGVtZW50LmZyb21Eb20obm9kZSkpO1xuICAgIGNvbnN0IGlzRW50aXJlTm9kZVNlbGVjdGVkID0gKHJuZywgbm9kZSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgcmV0dXJuIHJuZy5zdGFydE9mZnNldCA9PT0gMCAmJiBybmcuZW5kT2Zmc2V0ID09PSAoKF9hID0gbm9kZS50ZXh0Q29udGVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRQYXJlbnREZXRhaWxzRWxlbWVudEF0UG9zID0gKGRvbSwgcG9zKSA9PiBPcHRpb25hbC5mcm9tKGRvbS5nZXRQYXJlbnQocG9zLmNvbnRhaW5lcigpLCAnZGV0YWlscycpKTtcbiAgICBjb25zdCBpc0luRGV0YWlsc0VsZW1lbnQgPSAoZG9tLCBwb3MpID0+IGdldFBhcmVudERldGFpbHNFbGVtZW50QXRQb3MoZG9tLCBwb3MpLmlzU29tZSgpO1xuICAgIGNvbnN0IGdldERldGFpbHNFbGVtZW50cyA9IChkb20sIHJuZykgPT4ge1xuICAgICAgY29uc3Qgc3RhcnREZXRhaWxzID0gT3B0aW9uYWwuZnJvbShkb20uZ2V0UGFyZW50KHJuZy5zdGFydENvbnRhaW5lciwgJ2RldGFpbHMnKSk7XG4gICAgICBjb25zdCBlbmREZXRhaWxzID0gT3B0aW9uYWwuZnJvbShkb20uZ2V0UGFyZW50KHJuZy5lbmRDb250YWluZXIsICdkZXRhaWxzJykpO1xuICAgICAgaWYgKHN0YXJ0RGV0YWlscy5pc1NvbWUoKSB8fCBlbmREZXRhaWxzLmlzU29tZSgpKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0U3VtbWFyeSA9IHN0YXJ0RGV0YWlscy5iaW5kKGRldGFpbHMgPT4gT3B0aW9uYWwuZnJvbShkb20uc2VsZWN0KCdzdW1tYXJ5JywgZGV0YWlscylbMF0pKTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgIHN0YXJ0U3VtbWFyeSxcbiAgICAgICAgICBzdGFydERldGFpbHMsXG4gICAgICAgICAgZW5kRGV0YWlsc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc0NhcmV0SW5UaGVCZWdpbm5pbmdPZiA9IChjYXJldFBvcywgZWxlbWVudCkgPT4gZmlyc3RQb3NpdGlvbkluKGVsZW1lbnQpLmV4aXN0cyhwb3MgPT4gcG9zLmlzRXF1YWwoY2FyZXRQb3MpKTtcbiAgICBjb25zdCBpc0NhcmV0SW5UaGVFbmRPZiA9IChjYXJldFBvcywgZWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIGxhc3RQb3NpdGlvbkluKGVsZW1lbnQpLmV4aXN0cyhwb3MgPT4ge1xuICAgICAgICBpZiAoaXNCciQ2KHBvcy5nZXROb2RlKCkpKSB7XG4gICAgICAgICAgcmV0dXJuIHByZXZQb3NpdGlvbihlbGVtZW50LCBwb3MpLmV4aXN0cyhwb3MyID0+IHBvczIuaXNFcXVhbChjYXJldFBvcykpIHx8IHBvcy5pc0VxdWFsKGNhcmV0UG9zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcG9zLmlzRXF1YWwoY2FyZXRQb3MpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQ2FyZXRBdFN0YXJ0T2ZTdW1tYXJ5ID0gKGNhcmV0UG9zLCBkZXRhaWxzRWxlbWVudHMpID0+IGRldGFpbHNFbGVtZW50cy5zdGFydFN1bW1hcnkuZXhpc3RzKHN1bW1hcnkgPT4gaXNDYXJldEluVGhlQmVnaW5uaW5nT2YoY2FyZXRQb3MsIHN1bW1hcnkpKTtcbiAgICBjb25zdCBpc0NhcmV0QXRFbmRPZlN1bW1hcnkgPSAoY2FyZXRQb3MsIGRldGFpbHNFbGVtZW50cykgPT4gZGV0YWlsc0VsZW1lbnRzLnN0YXJ0U3VtbWFyeS5leGlzdHMoc3VtbWFyeSA9PiBpc0NhcmV0SW5UaGVFbmRPZihjYXJldFBvcywgc3VtbWFyeSkpO1xuICAgIGNvbnN0IGlzQ2FyZXRJbkZpcnN0UG9zaXRpb25JbkJvZHkgPSAoY2FyZXRQb3MsIGRldGFpbHNFbGVtZW50cykgPT4gZGV0YWlsc0VsZW1lbnRzLnN0YXJ0RGV0YWlscy5leGlzdHMoZGV0YWlscyA9PiBwcmV2UG9zaXRpb24oZGV0YWlscywgY2FyZXRQb3MpLmZvcmFsbChwb3MgPT4gZGV0YWlsc0VsZW1lbnRzLnN0YXJ0U3VtbWFyeS5leGlzdHMoc3VtbWFyeSA9PiAhc3VtbWFyeS5jb250YWlucyhjYXJldFBvcy5jb250YWluZXIoKSkgJiYgc3VtbWFyeS5jb250YWlucyhwb3MuY29udGFpbmVyKCkpKSkpO1xuICAgIGNvbnN0IGlzQ2FyZXRJbkxhc3RQb3NpdGlvbkluQm9keSA9IChyb290LCBjYXJldFBvcywgZGV0YWlsc0VsZW1lbnRzKSA9PiBkZXRhaWxzRWxlbWVudHMuc3RhcnREZXRhaWxzLmV4aXN0cyhkZXRhaWxzID0+IG5leHRQb3NpdGlvbihyb290LCBjYXJldFBvcykuZm9yYWxsKHBvcyA9PiAhZGV0YWlscy5jb250YWlucyhwb3MuY29udGFpbmVyKCkpKSk7XG4gICAgY29uc3Qgc2V0Q2FyZXRUb1Bvc2l0aW9uID0gKGVkaXRvciwgcG9zaXRpb24pID0+IHtcbiAgICAgIGNvbnN0IG5vZGUgPSBwb3NpdGlvbi5nZXROb2RlKCk7XG4gICAgICBpZiAoIWlzVW5kZWZpbmVkKG5vZGUpKSB7XG4gICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Q3Vyc29yTG9jYXRpb24obm9kZSwgcG9zaXRpb24ub2Zmc2V0KCkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbW92ZUNhcmV0VG9EZXRhaWxzUG9zID0gKGVkaXRvciwgcG9zLCBmb3J3YXJkKSA9PiB7XG4gICAgICBjb25zdCBkZXRhaWxzID0gZWRpdG9yLmRvbS5nZXRQYXJlbnQocG9zLmNvbnRhaW5lcigpLCAnZGV0YWlscycpO1xuICAgICAgaWYgKGRldGFpbHMgJiYgIWRldGFpbHMub3Blbikge1xuICAgICAgICBjb25zdCBzdW1tYXJ5ID0gZWRpdG9yLmRvbS5zZWxlY3QoJ3N1bW1hcnknLCBkZXRhaWxzKVswXTtcbiAgICAgICAgaWYgKHN1bW1hcnkpIHtcbiAgICAgICAgICBjb25zdCBuZXdQb3MgPSBmb3J3YXJkID8gZmlyc3RQb3NpdGlvbkluKHN1bW1hcnkpIDogbGFzdFBvc2l0aW9uSW4oc3VtbWFyeSk7XG4gICAgICAgICAgbmV3UG9zLmVhY2gocG9zID0+IHNldENhcmV0VG9Qb3NpdGlvbihlZGl0b3IsIHBvcykpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRDYXJldFRvUG9zaXRpb24oZWRpdG9yLCBwb3MpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNQYXJ0aWFsRGVsZXRlID0gKHJuZywgZGV0YWlsc0VsZW1lbnRzKSA9PiB7XG4gICAgICBjb25zdCBjb250YWluc1N0YXJ0ID0gZWxlbWVudCA9PiBlbGVtZW50LmNvbnRhaW5zKHJuZy5zdGFydENvbnRhaW5lcik7XG4gICAgICBjb25zdCBjb250YWluc0VuZCA9IGVsZW1lbnQgPT4gZWxlbWVudC5jb250YWlucyhybmcuZW5kQ29udGFpbmVyKTtcbiAgICAgIGNvbnN0IHN0YXJ0SW5TdW1tYXJ5ID0gZGV0YWlsc0VsZW1lbnRzLnN0YXJ0U3VtbWFyeS5leGlzdHMoY29udGFpbnNTdGFydCk7XG4gICAgICBjb25zdCBlbmRJblN1bW1hcnkgPSBkZXRhaWxzRWxlbWVudHMuc3RhcnRTdW1tYXJ5LmV4aXN0cyhjb250YWluc0VuZCk7XG4gICAgICBjb25zdCBpc1BhcnRpYWxseVNlbGVjdGVkRGV0YWlsc0VsZW1lbnRzID0gZGV0YWlsc0VsZW1lbnRzLnN0YXJ0RGV0YWlscy5mb3JhbGwoc3RhcnREZXRhaWxzID0+IGRldGFpbHNFbGVtZW50cy5lbmREZXRhaWxzLmZvcmFsbChlbmREZXRhaWxzID0+IHN0YXJ0RGV0YWlscyAhPT0gZW5kRGV0YWlscykpO1xuICAgICAgY29uc3QgaXNJblBhcnRpYWxseVNlbGVjdGVkU3VtbWFyeSA9IChzdGFydEluU3VtbWFyeSB8fCBlbmRJblN1bW1hcnkpICYmICEoc3RhcnRJblN1bW1hcnkgJiYgZW5kSW5TdW1tYXJ5KTtcbiAgICAgIHJldHVybiBpc0luUGFydGlhbGx5U2VsZWN0ZWRTdW1tYXJ5IHx8IGlzUGFydGlhbGx5U2VsZWN0ZWREZXRhaWxzRWxlbWVudHM7XG4gICAgfTtcbiAgICBjb25zdCBzaG91bGRQcmV2ZW50RGVsZXRlSW50b0RldGFpbHMgPSAoZWRpdG9yLCBmb3J3YXJkLCBncmFudWxhcml0eSkgPT4ge1xuICAgICAgY29uc3Qge2RvbSwgc2VsZWN0aW9ufSA9IGVkaXRvcjtcbiAgICAgIGNvbnN0IHJvb3QgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgaWYgKGdyYW51bGFyaXR5ID09PSAnY2hhcmFjdGVyJykge1xuICAgICAgICBjb25zdCBjYXJldFBvcyA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQoc2VsZWN0aW9uLmdldFJuZygpKTtcbiAgICAgICAgY29uc3QgcGFyZW50QmxvY2sgPSBkb20uZ2V0UGFyZW50KGNhcmV0UG9zLmNvbnRhaW5lcigpLCBkb20uaXNCbG9jayk7XG4gICAgICAgIGNvbnN0IHBhcmVudERldGFpbHNBdENhcmV0ID0gZ2V0UGFyZW50RGV0YWlsc0VsZW1lbnRBdFBvcyhkb20sIGNhcmV0UG9zKTtcbiAgICAgICAgY29uc3QgaW5FbXB0eVBhcmVudEJsb2NrID0gcGFyZW50QmxvY2sgJiYgZG9tLmlzRW1wdHkocGFyZW50QmxvY2spO1xuICAgICAgICBjb25zdCBpc0ZpcnN0QmxvY2sgPSBpc051bGwocGFyZW50QmxvY2sgPT09IG51bGwgfHwgcGFyZW50QmxvY2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmVudEJsb2NrLnByZXZpb3VzU2libGluZyk7XG4gICAgICAgIGNvbnN0IGlzTGFzdEJsb2NrID0gaXNOdWxsKHBhcmVudEJsb2NrID09PSBudWxsIHx8IHBhcmVudEJsb2NrID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJlbnRCbG9jay5uZXh0U2libGluZyk7XG4gICAgICAgIGlmIChpbkVtcHR5UGFyZW50QmxvY2spIHtcbiAgICAgICAgICBjb25zdCBmaXJzdE9yTGFzdCA9IGZvcndhcmQgPyBpc0xhc3RCbG9jayA6IGlzRmlyc3RCbG9jaztcbiAgICAgICAgICBpZiAoZmlyc3RPckxhc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzQmVmb3JlQWZ0ZXJEZXRhaWxzID0gbmF2aWdhdGUoIWZvcndhcmQsIHJvb3QsIGNhcmV0UG9zKS5leGlzdHMocG9zID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGlzSW5EZXRhaWxzRWxlbWVudChkb20sIHBvcykgJiYgIWVxdWFscyhwYXJlbnREZXRhaWxzQXRDYXJldCwgZ2V0UGFyZW50RGV0YWlsc0VsZW1lbnRBdFBvcyhkb20sIHBvcykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoaXNCZWZvcmVBZnRlckRldGFpbHMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuYXZpZ2F0ZShmb3J3YXJkLCByb290LCBjYXJldFBvcykuZm9sZChuZXZlciwgcG9zID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJlbnREZXRhaWxzQXROZXdQb3MgPSBnZXRQYXJlbnREZXRhaWxzRWxlbWVudEF0UG9zKGRvbSwgcG9zKTtcbiAgICAgICAgICBpZiAoaXNJbkRldGFpbHNFbGVtZW50KGRvbSwgcG9zKSAmJiAhZXF1YWxzKHBhcmVudERldGFpbHNBdENhcmV0LCBwYXJlbnREZXRhaWxzQXROZXdQb3MpKSB7XG4gICAgICAgICAgICBpZiAoIWZvcndhcmQpIHtcbiAgICAgICAgICAgICAgbW92ZUNhcmV0VG9EZXRhaWxzUG9zKGVkaXRvciwgcG9zLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyZW50QmxvY2sgJiYgaW5FbXB0eVBhcmVudEJsb2NrKSB7XG4gICAgICAgICAgICAgIGlmIChmb3J3YXJkICYmIGlzRmlyc3RCbG9jaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFmb3J3YXJkICYmIGlzTGFzdEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbW92ZUNhcmV0VG9EZXRhaWxzUG9zKGVkaXRvciwgcG9zLCBmb3J3YXJkKTtcbiAgICAgICAgICAgICAgZWRpdG9yLmRvbS5yZW1vdmUocGFyZW50QmxvY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2hvdWxkUHJldmVudERlbGV0ZVN1bW1hcnlBY3Rpb24gPSAoZWRpdG9yLCBkZXRhaWxFbGVtZW50cywgZm9yd2FyZCwgZ3JhbnVsYXJpdHkpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3Rpb247XG4gICAgICBjb25zdCBybmcgPSBzZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBjb25zdCBjYXJldFBvcyA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQocm5nKTtcbiAgICAgIGNvbnN0IHJvb3QgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgaWYgKGdyYW51bGFyaXR5ID09PSAnc2VsZWN0aW9uJykge1xuICAgICAgICByZXR1cm4gaXNQYXJ0aWFsRGVsZXRlKHJuZywgZGV0YWlsRWxlbWVudHMpO1xuICAgICAgfSBlbHNlIGlmIChmb3J3YXJkKSB7XG4gICAgICAgIHJldHVybiBpc0NhcmV0QXRFbmRPZlN1bW1hcnkoY2FyZXRQb3MsIGRldGFpbEVsZW1lbnRzKSB8fCBpc0NhcmV0SW5MYXN0UG9zaXRpb25JbkJvZHkocm9vdCwgY2FyZXRQb3MsIGRldGFpbEVsZW1lbnRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpc0NhcmV0QXRTdGFydE9mU3VtbWFyeShjYXJldFBvcywgZGV0YWlsRWxlbWVudHMpIHx8IGlzQ2FyZXRJbkZpcnN0UG9zaXRpb25JbkJvZHkoY2FyZXRQb3MsIGRldGFpbEVsZW1lbnRzKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNob3VsZFByZXZlbnREZWxldGVBY3Rpb24gPSAoZWRpdG9yLCBmb3J3YXJkLCBncmFudWxhcml0eSkgPT4gZ2V0RGV0YWlsc0VsZW1lbnRzKGVkaXRvci5kb20sIGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpLmZvbGQoKCkgPT4gc2hvdWxkUHJldmVudERlbGV0ZUludG9EZXRhaWxzKGVkaXRvciwgZm9yd2FyZCwgZ3JhbnVsYXJpdHkpLCBkZXRhaWxzRWxlbWVudHMgPT4gc2hvdWxkUHJldmVudERlbGV0ZVN1bW1hcnlBY3Rpb24oZWRpdG9yLCBkZXRhaWxzRWxlbWVudHMsIGZvcndhcmQsIGdyYW51bGFyaXR5KSB8fCBzaG91bGRQcmV2ZW50RGVsZXRlSW50b0RldGFpbHMoZWRpdG9yLCBmb3J3YXJkLCBncmFudWxhcml0eSkpO1xuICAgIGNvbnN0IGhhbmRsZURlbGV0ZUFjdGlvblNhZmFyaSA9IChlZGl0b3IsIGZvcndhcmQsIGdyYW51bGFyaXR5KSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uO1xuICAgICAgY29uc3Qgbm9kZSA9IHNlbGVjdGlvbi5nZXROb2RlKCk7XG4gICAgICBjb25zdCBybmcgPSBzZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBjb25zdCBjYXJldFBvcyA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQocm5nKTtcbiAgICAgIGlmIChpc1N1bW1hcnkobm9kZSkpIHtcbiAgICAgICAgaWYgKGdyYW51bGFyaXR5ID09PSAnc2VsZWN0aW9uJyAmJiBpc0VudGlyZU5vZGVTZWxlY3RlZChybmcsIG5vZGUpIHx8IHdpbGxEZWxldGVMYXN0UG9zaXRpb25JbkVsZW1lbnQoZm9yd2FyZCwgY2FyZXRQb3MsIG5vZGUpKSB7XG4gICAgICAgICAgZW1wdHlOb2RlQ29udGVudHMobm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlbCA9IHNlbGVjdGlvbi5nZXRTZWwoKTtcbiAgICAgICAgICAgIGxldCB7YW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0LCBmb2N1c05vZGUsIGZvY3VzT2Zmc2V0fSA9IHNlbCAhPT0gbnVsbCAmJiBzZWwgIT09IHZvaWQgMCA/IHNlbCA6IHt9O1xuICAgICAgICAgICAgY29uc3QgYXBwbHlTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpc05vbk51bGxhYmxlKGFuY2hvck5vZGUpICYmIGlzTm9uTnVsbGFibGUoYW5jaG9yT2Zmc2V0KSAmJiBpc05vbk51bGxhYmxlKGZvY3VzTm9kZSkgJiYgaXNOb25OdWxsYWJsZShmb2N1c09mZnNldCkpIHtcbiAgICAgICAgICAgICAgICBzZWwgPT09IG51bGwgfHwgc2VsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWwuc2V0QmFzZUFuZEV4dGVudChhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQsIGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlU2VsZWN0aW9uID0gKCkgPT4ge1xuICAgICAgICAgICAgICBhbmNob3JOb2RlID0gc2VsID09PSBudWxsIHx8IHNlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsLmFuY2hvck5vZGU7XG4gICAgICAgICAgICAgIGFuY2hvck9mZnNldCA9IHNlbCA9PT0gbnVsbCB8fCBzZWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbC5hbmNob3JPZmZzZXQ7XG4gICAgICAgICAgICAgIGZvY3VzTm9kZSA9IHNlbCA9PT0gbnVsbCB8fCBzZWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbC5mb2N1c05vZGU7XG4gICAgICAgICAgICAgIGZvY3VzT2Zmc2V0ID0gc2VsID09PSBudWxsIHx8IHNlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsLmZvY3VzT2Zmc2V0O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGFwcGVuZEFsbENoaWxkTm9kZXMgPSAoZnJvbSwgdG8pID0+IHtcbiAgICAgICAgICAgICAgZWFjaCRlKGZyb20uY2hpbGROb2RlcywgY2hpbGQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc05vZGUoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICB0by5hcHBlbmRDaGlsZChjaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBlZGl0b3IuZG9tLmNyZWF0ZSgnc3BhbicsIHsgJ2RhdGEtbWNlLWJvZ3VzJzogJzEnIH0pO1xuICAgICAgICAgICAgYXBwZW5kQWxsQ2hpbGROb2Rlcyhub2RlLCBjb250YWluZXIpO1xuICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgICAgICAgICAgYXBwbHlTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIGlmIChncmFudWxhcml0eSA9PT0gJ3dvcmQnIHx8IGdyYW51bGFyaXR5ID09PSAnbGluZScpIHtcbiAgICAgICAgICAgICAgc2VsID09PSBudWxsIHx8IHNlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsLm1vZGlmeSgnZXh0ZW5kJywgZm9yd2FyZCA/ICdyaWdodCcgOiAnbGVmdCcsIGdyYW51bGFyaXR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkgJiYgaXNFbnRpcmVOb2RlU2VsZWN0ZWQoc2VsZWN0aW9uLmdldFJuZygpLCBjb250YWluZXIpKSB7XG4gICAgICAgICAgICAgIGVtcHR5Tm9kZUNvbnRlbnRzKG5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKGZvcndhcmQgPyAnRm9yd2FyZERlbGV0ZScgOiAnRGVsZXRlJyk7XG4gICAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICBhcHBlbmRBbGxDaGlsZE5vZGVzKGNvbnRhaW5lciwgbm9kZSk7XG4gICAgICAgICAgICAgIGFwcGx5U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlZGl0b3IuZG9tLnJlbW92ZShjb250YWluZXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYmFja3NwYWNlRGVsZXRlID0gKGVkaXRvciwgZm9yd2FyZCwgZ3JhbnVsYXJpdHkpID0+IHNob3VsZFByZXZlbnREZWxldGVBY3Rpb24oZWRpdG9yLCBmb3J3YXJkLCBncmFudWxhcml0eSkgfHwgaXNTYWZhcmkgJiYgaGFuZGxlRGVsZXRlQWN0aW9uU2FmYXJpKGVkaXRvciwgZm9yd2FyZCwgZ3JhbnVsYXJpdHkpID8gT3B0aW9uYWwuc29tZShub29wKSA6IE9wdGlvbmFsLm5vbmUoKTtcblxuICAgIGNvbnN0IGNyZWF0ZUFuZEZpcmVJbnB1dEV2ZW50ID0gZXZlbnRUeXBlID0+IChlZGl0b3IsIGlucHV0VHlwZSwgc3BlY2lmaWNzID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGVkaXRvci5nZXRCb2R5KCk7XG4gICAgICBjb25zdCBvdmVycmlkZXMgPSB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICBpc0NvbXBvc2luZzogZmFsc2UsXG4gICAgICAgIGRldGFpbDogMCxcbiAgICAgICAgdmlldzogbnVsbCxcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICBjdXJyZW50VGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgIGV2ZW50UGhhc2U6IEV2ZW50LkFUX1RBUkdFVCxcbiAgICAgICAgb3JpZ2luYWxUYXJnZXQ6IHRhcmdldCxcbiAgICAgICAgZXhwbGljaXRPcmlnaW5hbFRhcmdldDogdGFyZ2V0LFxuICAgICAgICBpc1RydXN0ZWQ6IGZhbHNlLFxuICAgICAgICBzcmNFbGVtZW50OiB0YXJnZXQsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBwcmV2ZW50RGVmYXVsdDogbm9vcCxcbiAgICAgICAgaW5wdXRUeXBlXG4gICAgICB9O1xuICAgICAgY29uc3QgaW5wdXQgPSBjbG9uZSQzKG5ldyBJbnB1dEV2ZW50KGV2ZW50VHlwZSkpO1xuICAgICAgcmV0dXJuIGVkaXRvci5kaXNwYXRjaChldmVudFR5cGUsIHtcbiAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgIC4uLm92ZXJyaWRlcyxcbiAgICAgICAgLi4uc3BlY2lmaWNzXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVJbnB1dEV2ZW50ID0gY3JlYXRlQW5kRmlyZUlucHV0RXZlbnQoJ2lucHV0Jyk7XG4gICAgY29uc3QgZmlyZUJlZm9yZUlucHV0RXZlbnQgPSBjcmVhdGVBbmRGaXJlSW5wdXRFdmVudCgnYmVmb3JlaW5wdXQnKTtcblxuICAgIGNvbnN0IHBsYXRmb3JtJDIgPSBkZXRlY3QkMigpO1xuICAgIGNvbnN0IG9zID0gcGxhdGZvcm0kMi5vcztcbiAgICBjb25zdCBpc01hY09TT3JpT1MgPSBvcy5pc01hY09TKCkgfHwgb3MuaXNpT1MoKTtcbiAgICBjb25zdCBicm93c2VyID0gcGxhdGZvcm0kMi5icm93c2VyO1xuICAgIGNvbnN0IGlzRmlyZWZveCA9IGJyb3dzZXIuaXNGaXJlZm94KCk7XG4gICAgY29uc3QgZXhlY3V0ZUtleWRvd25PdmVycmlkZSQzID0gKGVkaXRvciwgY2FyZXQsIGV2dCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXRUeXBlID0gZXZ0LmtleUNvZGUgPT09IFZLLkJBQ0tTUEFDRSA/ICdkZWxldGVDb250ZW50QmFja3dhcmQnIDogJ2RlbGV0ZUNvbnRlbnRGb3J3YXJkJztcbiAgICAgIGNvbnN0IGlzQ29sbGFwc2VkID0gZWRpdG9yLnNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpO1xuICAgICAgY29uc3QgdW5tb2RpZmllZEdyYW51bGFyaXR5ID0gaXNDb2xsYXBzZWQgPyAnY2hhcmFjdGVyJyA6ICdzZWxlY3Rpb24nO1xuICAgICAgY29uc3QgZ2V0TW9kaWZpZWRHcmFudWxhcml0eSA9IGlzV29yZCA9PiB7XG4gICAgICAgIGlmIChpc0NvbGxhcHNlZCkge1xuICAgICAgICAgIHJldHVybiBpc1dvcmQgPyAnd29yZCcgOiAnbGluZSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuICdzZWxlY3Rpb24nO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZXhlY3V0ZVdpdGhEZWxheWVkQWN0aW9uKFtcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLkJBQ0tTUEFDRSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihiYWNrc3BhY2VEZWxldGUkMSwgZWRpdG9yKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuQkFDS1NQQUNFLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKGJhY2tzcGFjZURlbGV0ZSQ2LCBlZGl0b3IsIGZhbHNlKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuREVMRVRFLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKGJhY2tzcGFjZURlbGV0ZSQ2LCBlZGl0b3IsIHRydWUpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5CQUNLU1BBQ0UsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlJDcsIGVkaXRvciwgZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5ERUxFVEUsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlJDcsIGVkaXRvciwgdHJ1ZSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLkJBQ0tTUEFDRSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihiYWNrc3BhY2VEZWxldGUkNCwgZWRpdG9yLCBjYXJldCwgZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5ERUxFVEUsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlJDQsIGVkaXRvciwgY2FyZXQsIHRydWUpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5CQUNLU1BBQ0UsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlJGEsIGVkaXRvciwgZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5ERUxFVEUsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlJGEsIGVkaXRvciwgdHJ1ZSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLkJBQ0tTUEFDRSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihiYWNrc3BhY2VEZWxldGUsIGVkaXRvciwgZmFsc2UsIHVubW9kaWZpZWRHcmFudWxhcml0eSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLkRFTEVURSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihiYWNrc3BhY2VEZWxldGUsIGVkaXRvciwgdHJ1ZSwgdW5tb2RpZmllZEdyYW51bGFyaXR5KVxuICAgICAgICB9LFxuICAgICAgICAuLi5pc01hY09TT3JpT1MgPyBbXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5Q29kZTogVksuQkFDS1NQQUNFLFxuICAgICAgICAgICAgYWx0S2V5OiB0cnVlLFxuICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlLCBlZGl0b3IsIGZhbHNlLCBnZXRNb2RpZmllZEdyYW51bGFyaXR5KHRydWUpKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5Q29kZTogVksuREVMRVRFLFxuICAgICAgICAgICAgYWx0S2V5OiB0cnVlLFxuICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlLCBlZGl0b3IsIHRydWUsIGdldE1vZGlmaWVkR3JhbnVsYXJpdHkodHJ1ZSkpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXlDb2RlOiBWSy5CQUNLU1BBQ0UsXG4gICAgICAgICAgICBtZXRhS2V5OiB0cnVlLFxuICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlLCBlZGl0b3IsIGZhbHNlLCBnZXRNb2RpZmllZEdyYW51bGFyaXR5KGZhbHNlKSlcbiAgICAgICAgICB9XG4gICAgICAgIF0gOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5Q29kZTogVksuQkFDS1NQQUNFLFxuICAgICAgICAgICAgY3RybEtleTogdHJ1ZSxcbiAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uKGJhY2tzcGFjZURlbGV0ZSwgZWRpdG9yLCBmYWxzZSwgZ2V0TW9kaWZpZWRHcmFudWxhcml0eSh0cnVlKSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleUNvZGU6IFZLLkRFTEVURSxcbiAgICAgICAgICAgIGN0cmxLZXk6IHRydWUsXG4gICAgICAgICAgICBhY3Rpb246IGFjdGlvbihiYWNrc3BhY2VEZWxldGUsIGVkaXRvciwgdHJ1ZSwgZ2V0TW9kaWZpZWRHcmFudWxhcml0eSh0cnVlKSlcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5CQUNLU1BBQ0UsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlJDUsIGVkaXRvciwgZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5ERUxFVEUsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlJDUsIGVkaXRvciwgdHJ1ZSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLkJBQ0tTUEFDRSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihiYWNrc3BhY2VEZWxldGUkMiwgZWRpdG9yLCBmYWxzZSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLkRFTEVURSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihiYWNrc3BhY2VEZWxldGUkMiwgZWRpdG9yLCB0cnVlKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuQkFDS1NQQUNFLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKGJhY2tzcGFjZURlbGV0ZSQ4LCBlZGl0b3IsIGZhbHNlKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuREVMRVRFLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKGJhY2tzcGFjZURlbGV0ZSQ4LCBlZGl0b3IsIHRydWUpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5CQUNLU1BBQ0UsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlJDksIGVkaXRvciwgZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5ERUxFVEUsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlJDksIGVkaXRvciwgdHJ1ZSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLkJBQ0tTUEFDRSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihiYWNrc3BhY2VEZWxldGUkMywgZWRpdG9yLCBmYWxzZSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLkRFTEVURSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihiYWNrc3BhY2VEZWxldGUkMywgZWRpdG9yLCB0cnVlKVxuICAgICAgICB9XG4gICAgICBdLCBldnQpLmZpbHRlcihfID0+IGVkaXRvci5zZWxlY3Rpb24uaXNFZGl0YWJsZSgpKS5lYWNoKGFwcGx5QWN0aW9uID0+IHtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGJlZm9yZUlucHV0ID0gZmlyZUJlZm9yZUlucHV0RXZlbnQoZWRpdG9yLCBpbnB1dFR5cGUpO1xuICAgICAgICBpZiAoIWJlZm9yZUlucHV0LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgYXBwbHlBY3Rpb24oKTtcbiAgICAgICAgICBmaXJlSW5wdXRFdmVudChlZGl0b3IsIGlucHV0VHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZXhlY3V0ZUtleXVwT3ZlcnJpZGUgPSAoZWRpdG9yLCBldnQsIGlzQmFja3NwYWNlS2V5ZG93bikgPT4gZXhlY3V0ZShbXG4gICAgICB7XG4gICAgICAgIGtleUNvZGU6IFZLLkJBQ0tTUEFDRSxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24ocGFkZEVtcHR5RWxlbWVudCwgZWRpdG9yKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5Q29kZTogVksuREVMRVRFLFxuICAgICAgICBhY3Rpb246IGFjdGlvbihwYWRkRW1wdHlFbGVtZW50LCBlZGl0b3IpXG4gICAgICB9LFxuICAgICAgLi4uaXNNYWNPU09yaU9TID8gW1xuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuQkFDS1NQQUNFLFxuICAgICAgICAgIGFsdEtleTogdHJ1ZSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihyZWZyZXNoQ2FyZXQsIGVkaXRvcilcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLkRFTEVURSxcbiAgICAgICAgICBhbHRLZXk6IHRydWUsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24ocmVmcmVzaENhcmV0LCBlZGl0b3IpXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmlzQmFja3NwYWNlS2V5ZG93biA/IFt7XG4gICAgICAgICAgICBrZXlDb2RlOiBpc0ZpcmVmb3ggPyAyMjQgOiA5MSxcbiAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uKHJlZnJlc2hDYXJldCwgZWRpdG9yKVxuICAgICAgICAgIH1dIDogW11cbiAgICAgIF0gOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5CQUNLU1BBQ0UsXG4gICAgICAgICAgY3RybEtleTogdHJ1ZSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihyZWZyZXNoQ2FyZXQsIGVkaXRvcilcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLkRFTEVURSxcbiAgICAgICAgICBjdHJsS2V5OiB0cnVlLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKHJlZnJlc2hDYXJldCwgZWRpdG9yKVxuICAgICAgICB9XG4gICAgICBdXG4gICAgXSwgZXZ0KTtcbiAgICBjb25zdCBzZXR1cCRpID0gKGVkaXRvciwgY2FyZXQpID0+IHtcbiAgICAgIGxldCBpc0JhY2tzcGFjZUtleWRvd24gPSBmYWxzZTtcbiAgICAgIGVkaXRvci5vbigna2V5ZG93bicsIGV2dCA9PiB7XG4gICAgICAgIGlzQmFja3NwYWNlS2V5ZG93biA9IGV2dC5rZXlDb2RlID09PSBWSy5CQUNLU1BBQ0U7XG4gICAgICAgIGlmICghZXZ0LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgZXhlY3V0ZUtleWRvd25PdmVycmlkZSQzKGVkaXRvciwgY2FyZXQsIGV2dCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdrZXl1cCcsIGV2dCA9PiB7XG4gICAgICAgIGlmICghZXZ0LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgZXhlY3V0ZUtleXVwT3ZlcnJpZGUoZWRpdG9yLCBldnQsIGlzQmFja3NwYWNlS2V5ZG93bik7XG4gICAgICAgIH1cbiAgICAgICAgaXNCYWNrc3BhY2VLZXlkb3duID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmlyc3ROb25XaGl0ZVNwYWNlTm9kZVNpYmxpbmcgPSBub2RlID0+IHtcbiAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgIGlmIChpc0VsZW1lbnQkNihub2RlKSB8fCBpc1RleHQkYShub2RlKSAmJiBub2RlLmRhdGEgJiYgL1tcXHJcXG5cXHNdLy50ZXN0KG5vZGUuZGF0YSkpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgY29uc3QgbW92ZVRvQ2FyZXRQb3NpdGlvbiA9IChlZGl0b3IsIHJvb3QpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBtb3ZlQ2FyZXRCZWZvcmVPbkVudGVyRWxlbWVudHNNYXAgPSBlZGl0b3Iuc2NoZW1hLmdldE1vdmVDYXJldEJlZm9yZU9uRW50ZXJFbGVtZW50cygpO1xuICAgICAgaWYgKCFyb290KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICgvXihMSXxEVHxERCkkLy50ZXN0KHJvb3Qubm9kZU5hbWUpKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSBmaXJzdE5vbldoaXRlU3BhY2VOb2RlU2libGluZyhyb290LmZpcnN0Q2hpbGQpO1xuICAgICAgICBpZiAoZmlyc3RDaGlsZCAmJiAvXihVTHxPTHxETCkkLy50ZXN0KGZpcnN0Q2hpbGQubm9kZU5hbWUpKSB7XG4gICAgICAgICAgcm9vdC5pbnNlcnRCZWZvcmUoZG9tLmRvYy5jcmVhdGVUZXh0Tm9kZShuYnNwKSwgcm9vdC5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3Qgcm5nID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgcm9vdC5ub3JtYWxpemUoKTtcbiAgICAgIGlmIChyb290Lmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICBjb25zdCB3YWxrZXIgPSBuZXcgRG9tVHJlZVdhbGtlcihyb290LCByb290KTtcbiAgICAgICAgbGV0IGxhc3ROb2RlID0gcm9vdDtcbiAgICAgICAgbGV0IG5vZGU7XG4gICAgICAgIHdoaWxlIChub2RlID0gd2Fsa2VyLmN1cnJlbnQoKSkge1xuICAgICAgICAgIGlmIChpc1RleHQkYShub2RlKSkge1xuICAgICAgICAgICAgcm5nLnNldFN0YXJ0KG5vZGUsIDApO1xuICAgICAgICAgICAgcm5nLnNldEVuZChub2RlLCAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobW92ZUNhcmV0QmVmb3JlT25FbnRlckVsZW1lbnRzTWFwW25vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICAgIHJuZy5zZXRTdGFydEJlZm9yZShub2RlKTtcbiAgICAgICAgICAgIHJuZy5zZXRFbmRCZWZvcmUobm9kZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgbGFzdE5vZGUgPSBub2RlO1xuICAgICAgICAgIG5vZGUgPSB3YWxrZXIubmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgIHJuZy5zZXRTdGFydChsYXN0Tm9kZSwgMCk7XG4gICAgICAgICAgcm5nLnNldEVuZChsYXN0Tm9kZSwgMCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc0JyJDYocm9vdCkpIHtcbiAgICAgICAgICBpZiAocm9vdC5uZXh0U2libGluZyAmJiBkb20uaXNCbG9jayhyb290Lm5leHRTaWJsaW5nKSkge1xuICAgICAgICAgICAgcm5nLnNldFN0YXJ0QmVmb3JlKHJvb3QpO1xuICAgICAgICAgICAgcm5nLnNldEVuZEJlZm9yZShyb290KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm5nLnNldFN0YXJ0QWZ0ZXIocm9vdCk7XG4gICAgICAgICAgICBybmcuc2V0RW5kQWZ0ZXIocm9vdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJuZy5zZXRTdGFydChyb290LCAwKTtcbiAgICAgICAgICBybmcuc2V0RW5kKHJvb3QsIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgc2Nyb2xsUmFuZ2VJbnRvVmlldyhlZGl0b3IsIHJuZyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRFZGl0YWJsZVJvb3QgPSAoZG9tLCBub2RlKSA9PiB7XG4gICAgICBjb25zdCByb290ID0gZG9tLmdldFJvb3QoKTtcbiAgICAgIGxldCBlZGl0YWJsZVJvb3Q7XG4gICAgICBsZXQgcGFyZW50ID0gbm9kZTtcbiAgICAgIHdoaWxlIChwYXJlbnQgIT09IHJvb3QgJiYgcGFyZW50ICYmIGRvbS5nZXRDb250ZW50RWRpdGFibGUocGFyZW50KSAhPT0gJ2ZhbHNlJykge1xuICAgICAgICBpZiAoZG9tLmdldENvbnRlbnRFZGl0YWJsZShwYXJlbnQpID09PSAndHJ1ZScpIHtcbiAgICAgICAgICBlZGl0YWJsZVJvb3QgPSBwYXJlbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyZW50ICE9PSByb290ID8gZWRpdGFibGVSb290IDogcm9vdDtcbiAgICB9O1xuICAgIGNvbnN0IGdldFBhcmVudEJsb2NrJDEgPSBlZGl0b3IgPT4ge1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oZWRpdG9yLmRvbS5nZXRQYXJlbnQoZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCh0cnVlKSwgZWRpdG9yLmRvbS5pc0Jsb2NrKSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRQYXJlbnRCbG9ja05hbWUgPSBlZGl0b3IgPT4ge1xuICAgICAgcmV0dXJuIGdldFBhcmVudEJsb2NrJDEoZWRpdG9yKS5mb2xkKGNvbnN0YW50KCcnKSwgcGFyZW50QmxvY2sgPT4ge1xuICAgICAgICByZXR1cm4gcGFyZW50QmxvY2subm9kZU5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaXNMaXN0SXRlbVBhcmVudEJsb2NrID0gZWRpdG9yID0+IHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRCbG9jayQxKGVkaXRvcikuZmlsdGVyKGVsbSA9PiB7XG4gICAgICAgIHJldHVybiBpc0xpc3RJdGVtJDEoU3VnYXJFbGVtZW50LmZyb21Eb20oZWxtKSk7XG4gICAgICB9KS5pc1NvbWUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGVtcHR5QmxvY2sgPSBlbG0gPT4ge1xuICAgICAgZWxtLmlubmVySFRNTCA9ICc8YnIgZGF0YS1tY2UtYm9ndXM9XCIxXCI+JztcbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5QXR0cmlidXRlcyA9IChlZGl0b3IsIG5vZGUsIGZvcmNlZFJvb3RCbG9ja0F0dHJzKSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgT3B0aW9uYWwuZnJvbShmb3JjZWRSb290QmxvY2tBdHRycy5zdHlsZSkubWFwKGRvbS5wYXJzZVN0eWxlKS5lYWNoKGF0dHJTdHlsZXMgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50U3R5bGVzID0gZ2V0QWxsUmF3KFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5vZGUpKTtcbiAgICAgICAgY29uc3QgbmV3U3R5bGVzID0ge1xuICAgICAgICAgIC4uLmN1cnJlbnRTdHlsZXMsXG4gICAgICAgICAgLi4uYXR0clN0eWxlc1xuICAgICAgICB9O1xuICAgICAgICBkb20uc2V0U3R5bGVzKG5vZGUsIG5ld1N0eWxlcyk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGF0dHJDbGFzc2VzT3B0ID0gT3B0aW9uYWwuZnJvbShmb3JjZWRSb290QmxvY2tBdHRycy5jbGFzcykubWFwKGF0dHJDbGFzc2VzID0+IGF0dHJDbGFzc2VzLnNwbGl0KC9cXHMrLykpO1xuICAgICAgY29uc3QgY3VycmVudENsYXNzZXNPcHQgPSBPcHRpb25hbC5mcm9tKG5vZGUuY2xhc3NOYW1lKS5tYXAoY3VycmVudENsYXNzZXMgPT4gZmlsdGVyJDUoY3VycmVudENsYXNzZXMuc3BsaXQoL1xccysvKSwgY2xhenogPT4gY2xhenogIT09ICcnKSk7XG4gICAgICBsaWZ0MihhdHRyQ2xhc3Nlc09wdCwgY3VycmVudENsYXNzZXNPcHQsIChhdHRyQ2xhc3NlcywgY3VycmVudENsYXNzZXMpID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRDbGFzc2VzID0gZmlsdGVyJDUoY3VycmVudENsYXNzZXMsIGNsYXp6ID0+ICFjb250YWlucyQyKGF0dHJDbGFzc2VzLCBjbGF6eikpO1xuICAgICAgICBjb25zdCBuZXdDbGFzc2VzID0gW1xuICAgICAgICAgIC4uLmF0dHJDbGFzc2VzLFxuICAgICAgICAgIC4uLmZpbHRlcmVkQ2xhc3Nlc1xuICAgICAgICBdO1xuICAgICAgICBkb20uc2V0QXR0cmliKG5vZGUsICdjbGFzcycsIG5ld0NsYXNzZXMuam9pbignICcpKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYXBwbGllZEF0dHJzID0gW1xuICAgICAgICAnc3R5bGUnLFxuICAgICAgICAnY2xhc3MnXG4gICAgICBdO1xuICAgICAgY29uc3QgcmVtYWluaW5nQXR0cnMgPSBmaWx0ZXIkNChmb3JjZWRSb290QmxvY2tBdHRycywgKF8sIGF0dHJzKSA9PiAhY29udGFpbnMkMihhcHBsaWVkQXR0cnMsIGF0dHJzKSk7XG4gICAgICBkb20uc2V0QXR0cmlicyhub2RlLCByZW1haW5pbmdBdHRycyk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRGb3JjZWRCbG9ja0F0dHJzID0gKGVkaXRvciwgbm9kZSkgPT4ge1xuICAgICAgY29uc3QgZm9yY2VkUm9vdEJsb2NrTmFtZSA9IGdldEZvcmNlZFJvb3RCbG9jayhlZGl0b3IpO1xuICAgICAgaWYgKGZvcmNlZFJvb3RCbG9ja05hbWUudG9Mb3dlckNhc2UoKSA9PT0gbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY29uc3QgZm9yY2VkUm9vdEJsb2NrQXR0cnMgPSBnZXRGb3JjZWRSb290QmxvY2tBdHRycyhlZGl0b3IpO1xuICAgICAgICBhcHBseUF0dHJpYnV0ZXMoZWRpdG9yLCBub2RlLCBmb3JjZWRSb290QmxvY2tBdHRycyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVOZXdCbG9jayA9IChlZGl0b3IsIGNvbnRhaW5lciwgcGFyZW50QmxvY2ssIGVkaXRhYmxlUm9vdCwga2VlcFN0eWxlcyA9IHRydWUsIG5hbWUpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBzY2hlbWEgPSBlZGl0b3Iuc2NoZW1hO1xuICAgICAgY29uc3QgbmV3QmxvY2tOYW1lID0gZ2V0Rm9yY2VkUm9vdEJsb2NrKGVkaXRvcik7XG4gICAgICBjb25zdCBwYXJlbnRCbG9ja05hbWUgPSBwYXJlbnRCbG9jayA/IHBhcmVudEJsb2NrLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgOiAnJztcbiAgICAgIGxldCBub2RlID0gY29udGFpbmVyO1xuICAgICAgY29uc3QgdGV4dElubGluZUVsZW1lbnRzID0gc2NoZW1hLmdldFRleHRJbmxpbmVFbGVtZW50cygpO1xuICAgICAgbGV0IGJsb2NrO1xuICAgICAgaWYgKG5hbWUgfHwgcGFyZW50QmxvY2tOYW1lID09PSAnVEFCTEUnIHx8IHBhcmVudEJsb2NrTmFtZSA9PT0gJ0hSJykge1xuICAgICAgICBibG9jayA9IGRvbS5jcmVhdGUobmFtZSB8fCBuZXdCbG9ja05hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmxvY2sgPSBwYXJlbnRCbG9jay5jbG9uZU5vZGUoZmFsc2UpO1xuICAgICAgfVxuICAgICAgbGV0IGNhcmV0Tm9kZSA9IGJsb2NrO1xuICAgICAgaWYgKCFrZWVwU3R5bGVzKSB7XG4gICAgICAgIGRvbS5zZXRBdHRyaWIoYmxvY2ssICdzdHlsZScsIG51bGwpO1xuICAgICAgICBkb20uc2V0QXR0cmliKGJsb2NrLCAnY2xhc3MnLCBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBpZiAodGV4dElubGluZUVsZW1lbnRzW25vZGUubm9kZU5hbWVdKSB7XG4gICAgICAgICAgICBpZiAoaXNDYXJldE5vZGUobm9kZSkgfHwgaXNCb29rbWFya05vZGUkMShub2RlKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNsb25lZE5vZGUgPSBub2RlLmNsb25lTm9kZShmYWxzZSk7XG4gICAgICAgICAgICBkb20uc2V0QXR0cmliKGNsb25lZE5vZGUsICdpZCcsICcnKTtcbiAgICAgICAgICAgIGlmIChibG9jay5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICAgICAgY2xvbmVkTm9kZS5hcHBlbmRDaGlsZChibG9jay5maXJzdENoaWxkKTtcbiAgICAgICAgICAgICAgYmxvY2suYXBwZW5kQ2hpbGQoY2xvbmVkTm9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjYXJldE5vZGUgPSBjbG9uZWROb2RlO1xuICAgICAgICAgICAgICBibG9jay5hcHBlbmRDaGlsZChjbG9uZWROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKChub2RlID0gbm9kZS5wYXJlbnROb2RlKSAmJiBub2RlICE9PSBlZGl0YWJsZVJvb3QpO1xuICAgICAgfVxuICAgICAgc2V0Rm9yY2VkQmxvY2tBdHRycyhlZGl0b3IsIGJsb2NrKTtcbiAgICAgIGVtcHR5QmxvY2soY2FyZXROb2RlKTtcbiAgICAgIHJldHVybiBibG9jaztcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0RGV0YWlsc1Jvb3QgPSAoZWRpdG9yLCBlbGVtZW50KSA9PiBlZGl0b3IuZG9tLmdldFBhcmVudChlbGVtZW50LCBpc0RldGFpbHMpO1xuICAgIGNvbnN0IGlzQXREZXRhaWxzRWRnZSA9IChyb290LCBlbGVtZW50LCBpc1RleHRCbG9jaykgPT4ge1xuICAgICAgbGV0IG5vZGUgPSBlbGVtZW50O1xuICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPT0gcm9vdCAmJiBpc051bGwobm9kZS5uZXh0U2libGluZykpIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnRFbGVtZW50O1xuICAgICAgICBpZiAoIXBhcmVudCB8fCAhaXNUZXh0QmxvY2socGFyZW50KSkge1xuICAgICAgICAgIHJldHVybiBpc0RldGFpbHMocGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgY29uc3QgaXNMYXN0RW1wdHlCbG9ja0luRGV0YWlscyA9IChlZGl0b3IsIHNoaWZ0S2V5LCBlbGVtZW50KSA9PiAhc2hpZnRLZXkgJiYgZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBnZXRGb3JjZWRSb290QmxvY2soZWRpdG9yKSAmJiBlZGl0b3IuZG9tLmlzRW1wdHkoZWxlbWVudCkgJiYgaXNBdERldGFpbHNFZGdlKGVkaXRvci5nZXRCb2R5KCksIGVsZW1lbnQsIGVsID0+IGhhcyQyKGVkaXRvci5zY2hlbWEuZ2V0VGV4dEJsb2NrRWxlbWVudHMoKSwgZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkpO1xuICAgIGNvbnN0IGluc2VydE5ld0xpbmUgPSAoZWRpdG9yLCBjcmVhdGVOZXdCbG9jaywgcGFyZW50QmxvY2spID0+IHtcbiAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgY29uc3QgbmV3QmxvY2sgPSBjcmVhdGVOZXdCbG9jayhnZXRGb3JjZWRSb290QmxvY2soZWRpdG9yKSk7XG4gICAgICBjb25zdCByb290ID0gZ2V0RGV0YWlsc1Jvb3QoZWRpdG9yLCBwYXJlbnRCbG9jayk7XG4gICAgICBpZiAoIXJvb3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWRpdG9yLmRvbS5pbnNlcnRBZnRlcihuZXdCbG9jaywgcm9vdCk7XG4gICAgICBtb3ZlVG9DYXJldFBvc2l0aW9uKGVkaXRvciwgbmV3QmxvY2spO1xuICAgICAgaWYgKCgoX2MgPSAoX2IgPSAoX2EgPSBwYXJlbnRCbG9jay5wYXJlbnRFbGVtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2hpbGROb2RlcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmxlbmd0aCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogMCkgPiAxKSB7XG4gICAgICAgIGVkaXRvci5kb20ucmVtb3ZlKHBhcmVudEJsb2NrKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaGFzRmlyc3RDaGlsZCA9IChlbG0sIG5hbWUpID0+IHtcbiAgICAgIHJldHVybiBlbG0uZmlyc3RDaGlsZCAmJiBlbG0uZmlyc3RDaGlsZC5ub2RlTmFtZSA9PT0gbmFtZTtcbiAgICB9O1xuICAgIGNvbnN0IGlzRmlyc3RDaGlsZCA9IGVsbSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICByZXR1cm4gKChfYSA9IGVsbS5wYXJlbnROb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZmlyc3RDaGlsZCkgPT09IGVsbTtcbiAgICB9O1xuICAgIGNvbnN0IGhhc1BhcmVudCA9IChlbG0sIHBhcmVudE5hbWUpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBlbG0gPT09IG51bGwgfHwgZWxtID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbG0ucGFyZW50Tm9kZTtcbiAgICAgIHJldHVybiBpc05vbk51bGxhYmxlKHBhcmVudE5vZGUpICYmIHBhcmVudE5vZGUubm9kZU5hbWUgPT09IHBhcmVudE5hbWU7XG4gICAgfTtcbiAgICBjb25zdCBpc0xpc3RCbG9jayA9IGVsbSA9PiB7XG4gICAgICByZXR1cm4gaXNOb25OdWxsYWJsZShlbG0pICYmIC9eKE9MfFVMfExJKSQvLnRlc3QoZWxtLm5vZGVOYW1lKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzTGlzdEl0ZW0gPSBlbG0gPT4ge1xuICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUoZWxtKSAmJiAvXihMSXxEVHxERCkkLy50ZXN0KGVsbS5ub2RlTmFtZSk7XG4gICAgfTtcbiAgICBjb25zdCBpc05lc3RlZExpc3QgPSBlbG0gPT4ge1xuICAgICAgcmV0dXJuIGlzTGlzdEJsb2NrKGVsbSkgJiYgaXNMaXN0QmxvY2soZWxtLnBhcmVudE5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Q29udGFpbmVyQmxvY2sgPSBjb250YWluZXJCbG9jayA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXJCbG9ja1BhcmVudCA9IGNvbnRhaW5lckJsb2NrLnBhcmVudE5vZGU7XG4gICAgICByZXR1cm4gaXNMaXN0SXRlbShjb250YWluZXJCbG9ja1BhcmVudCkgPyBjb250YWluZXJCbG9ja1BhcmVudCA6IGNvbnRhaW5lckJsb2NrO1xuICAgIH07XG4gICAgY29uc3QgaXNGaXJzdE9yTGFzdExpID0gKGNvbnRhaW5lckJsb2NrLCBwYXJlbnRCbG9jaywgZmlyc3QpID0+IHtcbiAgICAgIGxldCBub2RlID0gY29udGFpbmVyQmxvY2tbZmlyc3QgPyAnZmlyc3RDaGlsZCcgOiAnbGFzdENoaWxkJ107XG4gICAgICB3aGlsZSAobm9kZSkge1xuICAgICAgICBpZiAoaXNFbGVtZW50JDYobm9kZSkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZVtmaXJzdCA/ICduZXh0U2libGluZycgOiAncHJldmlvdXNTaWJsaW5nJ107XG4gICAgICB9XG4gICAgICByZXR1cm4gbm9kZSA9PT0gcGFyZW50QmxvY2s7XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnQkNCA9IChlZGl0b3IsIGNyZWF0ZU5ld0Jsb2NrLCBjb250YWluZXJCbG9jaywgcGFyZW50QmxvY2ssIG5ld0Jsb2NrTmFtZSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBjb25zdCBjb250YWluZXJQYXJlbnQgPSBjb250YWluZXJCbG9jay5wYXJlbnROb2RlO1xuICAgICAgaWYgKGNvbnRhaW5lckJsb2NrID09PSBlZGl0b3IuZ2V0Qm9keSgpIHx8ICFjb250YWluZXJQYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGlzTmVzdGVkTGlzdChjb250YWluZXJCbG9jaykpIHtcbiAgICAgICAgbmV3QmxvY2tOYW1lID0gJ0xJJztcbiAgICAgIH1cbiAgICAgIGxldCBuZXdCbG9jayA9IGNyZWF0ZU5ld0Jsb2NrKG5ld0Jsb2NrTmFtZSk7XG4gICAgICBpZiAoaXNGaXJzdE9yTGFzdExpKGNvbnRhaW5lckJsb2NrLCBwYXJlbnRCbG9jaywgdHJ1ZSkgJiYgaXNGaXJzdE9yTGFzdExpKGNvbnRhaW5lckJsb2NrLCBwYXJlbnRCbG9jaywgZmFsc2UpKSB7XG4gICAgICAgIGlmIChoYXNQYXJlbnQoY29udGFpbmVyQmxvY2ssICdMSScpKSB7XG4gICAgICAgICAgY29uc3QgY29udGFpbmVyQmxvY2tQYXJlbnQgPSBnZXRDb250YWluZXJCbG9jayhjb250YWluZXJCbG9jayk7XG4gICAgICAgICAgZG9tLmluc2VydEFmdGVyKG5ld0Jsb2NrLCBjb250YWluZXJCbG9ja1BhcmVudCk7XG4gICAgICAgICAgaWYgKGlzRmlyc3RDaGlsZChjb250YWluZXJCbG9jaykpIHtcbiAgICAgICAgICAgIGRvbS5yZW1vdmUoY29udGFpbmVyQmxvY2tQYXJlbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb20ucmVtb3ZlKGNvbnRhaW5lckJsb2NrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9tLnJlcGxhY2UobmV3QmxvY2ssIGNvbnRhaW5lckJsb2NrKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0ZpcnN0T3JMYXN0TGkoY29udGFpbmVyQmxvY2ssIHBhcmVudEJsb2NrLCB0cnVlKSkge1xuICAgICAgICBpZiAoaGFzUGFyZW50KGNvbnRhaW5lckJsb2NrLCAnTEknKSkge1xuICAgICAgICAgIGRvbS5pbnNlcnRBZnRlcihuZXdCbG9jaywgZ2V0Q29udGFpbmVyQmxvY2soY29udGFpbmVyQmxvY2spKTtcbiAgICAgICAgICBuZXdCbG9jay5hcHBlbmRDaGlsZChkb20uZG9jLmNyZWF0ZVRleHROb2RlKCcgJykpO1xuICAgICAgICAgIG5ld0Jsb2NrLmFwcGVuZENoaWxkKGNvbnRhaW5lckJsb2NrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250YWluZXJQYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld0Jsb2NrLCBjb250YWluZXJCbG9jayk7XG4gICAgICAgIH1cbiAgICAgICAgZG9tLnJlbW92ZShwYXJlbnRCbG9jayk7XG4gICAgICB9IGVsc2UgaWYgKGlzRmlyc3RPckxhc3RMaShjb250YWluZXJCbG9jaywgcGFyZW50QmxvY2ssIGZhbHNlKSkge1xuICAgICAgICBkb20uaW5zZXJ0QWZ0ZXIobmV3QmxvY2ssIGdldENvbnRhaW5lckJsb2NrKGNvbnRhaW5lckJsb2NrKSk7XG4gICAgICAgIGRvbS5yZW1vdmUocGFyZW50QmxvY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGFpbmVyQmxvY2sgPSBnZXRDb250YWluZXJCbG9jayhjb250YWluZXJCbG9jayk7XG4gICAgICAgIGNvbnN0IHRtcFJuZyA9IHJuZy5jbG9uZVJhbmdlKCk7XG4gICAgICAgIHRtcFJuZy5zZXRTdGFydEFmdGVyKHBhcmVudEJsb2NrKTtcbiAgICAgICAgdG1wUm5nLnNldEVuZEFmdGVyKGNvbnRhaW5lckJsb2NrKTtcbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSB0bXBSbmcuZXh0cmFjdENvbnRlbnRzKCk7XG4gICAgICAgIGlmIChuZXdCbG9ja05hbWUgPT09ICdMSScgJiYgaGFzRmlyc3RDaGlsZChmcmFnbWVudCwgJ0xJJykpIHtcbiAgICAgICAgICBuZXdCbG9jayA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgZG9tLmluc2VydEFmdGVyKGZyYWdtZW50LCBjb250YWluZXJCbG9jayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9tLmluc2VydEFmdGVyKGZyYWdtZW50LCBjb250YWluZXJCbG9jayk7XG4gICAgICAgICAgZG9tLmluc2VydEFmdGVyKG5ld0Jsb2NrLCBjb250YWluZXJCbG9jayk7XG4gICAgICAgIH1cbiAgICAgICAgZG9tLnJlbW92ZShwYXJlbnRCbG9jayk7XG4gICAgICB9XG4gICAgICBtb3ZlVG9DYXJldFBvc2l0aW9uKGVkaXRvciwgbmV3QmxvY2spO1xuICAgIH07XG5cbiAgICBjb25zdCB0cmltWndzcCA9IGZyYWdtZW50ID0+IHtcbiAgICAgIGVhY2gkZShkZXNjZW5kYW50cyQxKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGZyYWdtZW50KSwgaXNUZXh0JGIpLCB0ZXh0ID0+IHtcbiAgICAgICAgY29uc3QgcmF3Tm9kZSA9IHRleHQuZG9tO1xuICAgICAgICByYXdOb2RlLm5vZGVWYWx1ZSA9IHRyaW0kMShyYXdOb2RlLmRhdGEpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBpc1dpdGhpbk5vbkVkaXRhYmxlTGlzdCA9IChlZGl0b3IsIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudExpc3QgPSBlZGl0b3IuZG9tLmdldFBhcmVudChub2RlLCAnb2wsdWwsZGwnKTtcbiAgICAgIHJldHVybiBwYXJlbnRMaXN0ICE9PSBudWxsICYmIGVkaXRvci5kb20uZ2V0Q29udGVudEVkaXRhYmxlUGFyZW50KHBhcmVudExpc3QpID09PSAnZmFsc2UnO1xuICAgIH07XG4gICAgY29uc3QgaXNFbXB0eUFuY2hvciA9IChkb20sIGVsbSkgPT4ge1xuICAgICAgcmV0dXJuIGVsbSAmJiBlbG0ubm9kZU5hbWUgPT09ICdBJyAmJiBkb20uaXNFbXB0eShlbG0pO1xuICAgIH07XG4gICAgY29uc3QgY29udGFpbmVyQW5kU2libGluZ05hbWUgPSAoY29udGFpbmVyLCBub2RlTmFtZSkgPT4ge1xuICAgICAgcmV0dXJuIGNvbnRhaW5lci5ub2RlTmFtZSA9PT0gbm9kZU5hbWUgfHwgY29udGFpbmVyLnByZXZpb3VzU2libGluZyAmJiBjb250YWluZXIucHJldmlvdXNTaWJsaW5nLm5vZGVOYW1lID09PSBub2RlTmFtZTtcbiAgICB9O1xuICAgIGNvbnN0IGNhblNwbGl0QmxvY2sgPSAoZG9tLCBub2RlKSA9PiB7XG4gICAgICByZXR1cm4gaXNOb25OdWxsYWJsZShub2RlKSAmJiBkb20uaXNCbG9jayhub2RlKSAmJiAhL14oVER8VEh8Q0FQVElPTnxGT1JNKSQvLnRlc3Qobm9kZS5ub2RlTmFtZSkgJiYgIS9eKGZpeGVkfGFic29sdXRlKS9pLnRlc3Qobm9kZS5zdHlsZS5wb3NpdGlvbikgJiYgZG9tLmlzRWRpdGFibGUobm9kZS5wYXJlbnROb2RlKSAmJiBkb20uZ2V0Q29udGVudEVkaXRhYmxlKG5vZGUpICE9PSAnZmFsc2UnO1xuICAgIH07XG4gICAgY29uc3QgdHJpbUlubGluZUVsZW1lbnRzT25MZWZ0U2lkZU9mQmxvY2sgPSAoZG9tLCBub25FbXB0eUVsZW1lbnRzTWFwLCBibG9jaykgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgZmlyc3RDaGlsZHMgPSBbXTtcbiAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IGN1cnJlbnROb2RlID0gYmxvY2s7XG4gICAgICB3aGlsZSAoY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgIGlmIChkb20uaXNCbG9jayhjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRWxlbWVudCQ2KGN1cnJlbnROb2RlKSAmJiAhbm9uRW1wdHlFbGVtZW50c01hcFtjdXJyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICAgIGZpcnN0Q2hpbGRzLnB1c2goY3VycmVudE5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgaSA9IGZpcnN0Q2hpbGRzLmxlbmd0aDtcbiAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgY3VycmVudE5vZGUgPSBmaXJzdENoaWxkc1tpXTtcbiAgICAgICAgaWYgKCFjdXJyZW50Tm9kZS5oYXNDaGlsZE5vZGVzKCkgfHwgY3VycmVudE5vZGUuZmlyc3RDaGlsZCA9PT0gY3VycmVudE5vZGUubGFzdENoaWxkICYmICgoX2EgPSBjdXJyZW50Tm9kZS5maXJzdENoaWxkKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eubm9kZVZhbHVlKSA9PT0gJycpIHtcbiAgICAgICAgICBkb20ucmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaXNFbXB0eUFuY2hvcihkb20sIGN1cnJlbnROb2RlKSkge1xuICAgICAgICAgICAgZG9tLnJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBub3JtYWxpemVad3NwT2Zmc2V0ID0gKHN0YXJ0LCBjb250YWluZXIsIG9mZnNldCkgPT4ge1xuICAgICAgaWYgKCFpc1RleHQkYShjb250YWluZXIpKSB7XG4gICAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0KSB7XG4gICAgICAgIHJldHVybiBvZmZzZXQgPT09IDEgJiYgY29udGFpbmVyLmRhdGEuY2hhckF0KG9mZnNldCAtIDEpID09PSBaV1NQJDEgPyAwIDogb2Zmc2V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9mZnNldCA9PT0gY29udGFpbmVyLmRhdGEubGVuZ3RoIC0gMSAmJiBjb250YWluZXIuZGF0YS5jaGFyQXQob2Zmc2V0KSA9PT0gWldTUCQxID8gY29udGFpbmVyLmRhdGEubGVuZ3RoIDogb2Zmc2V0O1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaW5jbHVkZVp3c3BJblJhbmdlID0gcm5nID0+IHtcbiAgICAgIGNvbnN0IG5ld1JuZyA9IHJuZy5jbG9uZVJhbmdlKCk7XG4gICAgICBuZXdSbmcuc2V0U3RhcnQocm5nLnN0YXJ0Q29udGFpbmVyLCBub3JtYWxpemVad3NwT2Zmc2V0KHRydWUsIHJuZy5zdGFydENvbnRhaW5lciwgcm5nLnN0YXJ0T2Zmc2V0KSk7XG4gICAgICBuZXdSbmcuc2V0RW5kKHJuZy5lbmRDb250YWluZXIsIG5vcm1hbGl6ZVp3c3BPZmZzZXQoZmFsc2UsIHJuZy5lbmRDb250YWluZXIsIHJuZy5lbmRPZmZzZXQpKTtcbiAgICAgIHJldHVybiBuZXdSbmc7XG4gICAgfTtcbiAgICBjb25zdCB0cmltTGVhZGluZ0xpbmVCcmVha3MgPSBub2RlID0+IHtcbiAgICAgIGxldCBjdXJyZW50Tm9kZSA9IG5vZGU7XG4gICAgICBkbyB7XG4gICAgICAgIGlmIChpc1RleHQkYShjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICBjdXJyZW50Tm9kZS5kYXRhID0gY3VycmVudE5vZGUuZGF0YS5yZXBsYWNlKC9eW1xcclxcbl0rLywgJycpO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuZmlyc3RDaGlsZDtcbiAgICAgIH0gd2hpbGUgKGN1cnJlbnROb2RlKTtcbiAgICB9O1xuICAgIGNvbnN0IHdyYXBTZWxmQW5kU2libGluZ3NJbkRlZmF1bHRCbG9jayA9IChlZGl0b3IsIG5ld0Jsb2NrTmFtZSwgcm5nLCBjb250YWluZXIsIG9mZnNldCkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBlZGl0YWJsZVJvb3QgPSAoX2EgPSBnZXRFZGl0YWJsZVJvb3QoZG9tLCBjb250YWluZXIpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBkb20uZ2V0Um9vdCgpO1xuICAgICAgbGV0IHBhcmVudEJsb2NrID0gZG9tLmdldFBhcmVudChjb250YWluZXIsIGRvbS5pc0Jsb2NrKTtcbiAgICAgIGlmICghcGFyZW50QmxvY2sgfHwgIWNhblNwbGl0QmxvY2soZG9tLCBwYXJlbnRCbG9jaykpIHtcbiAgICAgICAgcGFyZW50QmxvY2sgPSBwYXJlbnRCbG9jayB8fCBlZGl0YWJsZVJvb3Q7XG4gICAgICAgIGlmICghcGFyZW50QmxvY2suaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgICAgY29uc3QgbmV3QmxvY2sgPSBkb20uY3JlYXRlKG5ld0Jsb2NrTmFtZSk7XG4gICAgICAgICAgc2V0Rm9yY2VkQmxvY2tBdHRycyhlZGl0b3IsIG5ld0Jsb2NrKTtcbiAgICAgICAgICBwYXJlbnRCbG9jay5hcHBlbmRDaGlsZChuZXdCbG9jayk7XG4gICAgICAgICAgcm5nLnNldFN0YXJ0KG5ld0Jsb2NrLCAwKTtcbiAgICAgICAgICBybmcuc2V0RW5kKG5ld0Jsb2NrLCAwKTtcbiAgICAgICAgICByZXR1cm4gbmV3QmxvY2s7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5vZGUgPSBjb250YWluZXI7XG4gICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSAhPT0gcGFyZW50QmxvY2spIHtcbiAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdGFydE5vZGU7XG4gICAgICAgIHdoaWxlIChub2RlICYmICFkb20uaXNCbG9jayhub2RlKSkge1xuICAgICAgICAgIHN0YXJ0Tm9kZSA9IG5vZGU7XG4gICAgICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0Tm9kZU5hbWUgPSAoX2IgPSBzdGFydE5vZGUgPT09IG51bGwgfHwgc3RhcnROb2RlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGFydE5vZGUucGFyZW50RWxlbWVudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLm5vZGVOYW1lO1xuICAgICAgICBpZiAoc3RhcnROb2RlICYmIHN0YXJ0Tm9kZU5hbWUgJiYgZWRpdG9yLnNjaGVtYS5pc1ZhbGlkQ2hpbGQoc3RhcnROb2RlTmFtZSwgbmV3QmxvY2tOYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgY29uc3Qgc3RhcnROb2RlUGFyZW50ID0gc3RhcnROb2RlLnBhcmVudE5vZGU7XG4gICAgICAgICAgY29uc3QgbmV3QmxvY2sgPSBkb20uY3JlYXRlKG5ld0Jsb2NrTmFtZSk7XG4gICAgICAgICAgc2V0Rm9yY2VkQmxvY2tBdHRycyhlZGl0b3IsIG5ld0Jsb2NrKTtcbiAgICAgICAgICBzdGFydE5vZGVQYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld0Jsb2NrLCBzdGFydE5vZGUpO1xuICAgICAgICAgIG5vZGUgPSBzdGFydE5vZGU7XG4gICAgICAgICAgd2hpbGUgKG5vZGUgJiYgIWRvbS5pc0Jsb2NrKG5vZGUpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgICAgICAgIG5ld0Jsb2NrLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICAgICAgbm9kZSA9IG5leHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJuZy5zZXRTdGFydChjb250YWluZXIsIG9mZnNldCk7XG4gICAgICAgICAgcm5nLnNldEVuZChjb250YWluZXIsIG9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgfTtcbiAgICBjb25zdCBhZGRCclRvQmxvY2tJZk5lZWRlZCA9IChkb20sIGJsb2NrKSA9PiB7XG4gICAgICBibG9jay5ub3JtYWxpemUoKTtcbiAgICAgIGNvbnN0IGxhc3RDaGlsZCA9IGJsb2NrLmxhc3RDaGlsZDtcbiAgICAgIGlmICghbGFzdENoaWxkIHx8IGlzRWxlbWVudCQ2KGxhc3RDaGlsZCkgJiYgL14obGVmdHxyaWdodCkkL2dpLnRlc3QoZG9tLmdldFN0eWxlKGxhc3RDaGlsZCwgJ2Zsb2F0JywgdHJ1ZSkpKSB7XG4gICAgICAgIGRvbS5hZGQoYmxvY2ssICdicicpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2hvdWxkRW5kQ29udGFpbmVyID0gKGVkaXRvciwgY29udGFpbmVyKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25WYWx1ZSA9IHNob3VsZEVuZENvbnRhaW5lck9uRW1wdHlCbG9jayhlZGl0b3IpO1xuICAgICAgaWYgKGlzTnVsbGFibGUoY29udGFpbmVyKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKG9wdGlvblZhbHVlKSkge1xuICAgICAgICByZXR1cm4gY29udGFpbnMkMihUb29scy5leHBsb2RlKG9wdGlvblZhbHVlKSwgY29udGFpbmVyLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvblZhbHVlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0JDMgPSAoZWRpdG9yLCBldnQpID0+IHtcbiAgICAgIGxldCBjb250YWluZXI7XG4gICAgICBsZXQgb2Zmc2V0O1xuICAgICAgbGV0IHBhcmVudEJsb2NrTmFtZTtcbiAgICAgIGxldCBjb250YWluZXJCbG9jaztcbiAgICAgIGxldCBpc0FmdGVyTGFzdE5vZGVJbkNvbnRhaW5lciA9IGZhbHNlO1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IGVkaXRvci5zY2hlbWEsIG5vbkVtcHR5RWxlbWVudHNNYXAgPSBzY2hlbWEuZ2V0Tm9uRW1wdHlFbGVtZW50cygpO1xuICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIGNvbnN0IG5ld0Jsb2NrTmFtZSA9IGdldEZvcmNlZFJvb3RCbG9jayhlZGl0b3IpO1xuICAgICAgY29uc3Qgc3RhcnQgPSBTdWdhckVsZW1lbnQuZnJvbURvbShybmcuc3RhcnRDb250YWluZXIpO1xuICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZCQxKHN0YXJ0LCBybmcuc3RhcnRPZmZzZXQpO1xuICAgICAgY29uc3QgaXNDZWYgPSBjaGlsZC5leGlzdHMoZWxlbWVudCA9PiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpICYmICFpc0VkaXRhYmxlJDMoZWxlbWVudCkpO1xuICAgICAgY29uc3QgY29sbGFwc2VkQW5kQ2VmID0gcm5nLmNvbGxhcHNlZCAmJiBpc0NlZjtcbiAgICAgIGNvbnN0IGNyZWF0ZU5ld0Jsb2NrJDEgPSBuYW1lID0+IHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU5ld0Jsb2NrKGVkaXRvciwgY29udGFpbmVyLCBwYXJlbnRCbG9jaywgZWRpdGFibGVSb290LCBzaG91bGRLZWVwU3R5bGVzKGVkaXRvciksIG5hbWUpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzQ2FyZXRBdFN0YXJ0T3JFbmRPZkJsb2NrID0gc3RhcnQgPT4ge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkT2Zmc2V0ID0gbm9ybWFsaXplWndzcE9mZnNldChzdGFydCwgY29udGFpbmVyLCBvZmZzZXQpO1xuICAgICAgICBpZiAoaXNUZXh0JGEoY29udGFpbmVyKSAmJiAoc3RhcnQgPyBub3JtYWxpemVkT2Zmc2V0ID4gMCA6IG5vcm1hbGl6ZWRPZmZzZXQgPCBjb250YWluZXIuZGF0YS5sZW5ndGgpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250YWluZXIucGFyZW50Tm9kZSA9PT0gcGFyZW50QmxvY2sgJiYgaXNBZnRlckxhc3ROb2RlSW5Db250YWluZXIgJiYgIXN0YXJ0KSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0ICYmIGlzRWxlbWVudCQ2KGNvbnRhaW5lcikgJiYgY29udGFpbmVyID09PSBwYXJlbnRCbG9jay5maXJzdENoaWxkKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRhaW5lckFuZFNpYmxpbmdOYW1lKGNvbnRhaW5lciwgJ1RBQkxFJykgfHwgY29udGFpbmVyQW5kU2libGluZ05hbWUoY29udGFpbmVyLCAnSFInKSkge1xuICAgICAgICAgIHJldHVybiBpc0FmdGVyTGFzdE5vZGVJbkNvbnRhaW5lciAmJiAhc3RhcnQgfHwgIWlzQWZ0ZXJMYXN0Tm9kZUluQ29udGFpbmVyICYmIHN0YXJ0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHdhbGtlciA9IG5ldyBEb21UcmVlV2Fsa2VyKGNvbnRhaW5lciwgcGFyZW50QmxvY2spO1xuICAgICAgICBpZiAoaXNUZXh0JGEoY29udGFpbmVyKSkge1xuICAgICAgICAgIGlmIChzdGFydCAmJiBub3JtYWxpemVkT2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICB3YWxrZXIucHJldigpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXN0YXJ0ICYmIG5vcm1hbGl6ZWRPZmZzZXQgPT09IGNvbnRhaW5lci5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgd2Fsa2VyLm5leHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5vZGU7XG4gICAgICAgIHdoaWxlIChub2RlID0gd2Fsa2VyLmN1cnJlbnQoKSkge1xuICAgICAgICAgIGlmIChpc0VsZW1lbnQkNihub2RlKSkge1xuICAgICAgICAgICAgaWYgKCFub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1tY2UtYm9ndXMnKSkge1xuICAgICAgICAgICAgICBjb25zdCBuYW1lID0gbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICBpZiAobm9uRW1wdHlFbGVtZW50c01hcFtuYW1lXSAmJiBuYW1lICE9PSAnYnInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1RleHQkYShub2RlKSAmJiAhaXNXaGl0ZXNwYWNlVGV4dChub2RlLmRhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGFydCkge1xuICAgICAgICAgICAgd2Fsa2VyLnByZXYoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2Fsa2VyLm5leHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgICAgY29uc3QgaW5zZXJ0TmV3QmxvY2tBZnRlciA9ICgpID0+IHtcbiAgICAgICAgbGV0IGJsb2NrO1xuICAgICAgICBpZiAoL14oSFsxLTZdfFBSRXxGSUdVUkUpJC8udGVzdChwYXJlbnRCbG9ja05hbWUpICYmIGNvbnRhaW5lckJsb2NrTmFtZSAhPT0gJ0hHUk9VUCcpIHtcbiAgICAgICAgICBibG9jayA9IGNyZWF0ZU5ld0Jsb2NrJDEobmV3QmxvY2tOYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBibG9jayA9IGNyZWF0ZU5ld0Jsb2NrJDEoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvdWxkRW5kQ29udGFpbmVyKGVkaXRvciwgY29udGFpbmVyQmxvY2spICYmIGNhblNwbGl0QmxvY2soZG9tLCBjb250YWluZXJCbG9jaykgJiYgZG9tLmlzRW1wdHkocGFyZW50QmxvY2ssIHVuZGVmaW5lZCwgeyBpbmNsdWRlWndzcDogdHJ1ZSB9KSkge1xuICAgICAgICAgIGJsb2NrID0gZG9tLnNwbGl0KGNvbnRhaW5lckJsb2NrLCBwYXJlbnRCbG9jayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9tLmluc2VydEFmdGVyKGJsb2NrLCBwYXJlbnRCbG9jayk7XG4gICAgICAgIH1cbiAgICAgICAgbW92ZVRvQ2FyZXRQb3NpdGlvbihlZGl0b3IsIGJsb2NrKTtcbiAgICAgICAgcmV0dXJuIGJsb2NrO1xuICAgICAgfTtcbiAgICAgIG5vcm1hbGl6ZSQyKGRvbSwgcm5nKS5lYWNoKG5vcm1SbmcgPT4ge1xuICAgICAgICBybmcuc2V0U3RhcnQobm9ybVJuZy5zdGFydENvbnRhaW5lciwgbm9ybVJuZy5zdGFydE9mZnNldCk7XG4gICAgICAgIHJuZy5zZXRFbmQobm9ybVJuZy5lbmRDb250YWluZXIsIG5vcm1SbmcuZW5kT2Zmc2V0KTtcbiAgICAgIH0pO1xuICAgICAgY29udGFpbmVyID0gcm5nLnN0YXJ0Q29udGFpbmVyO1xuICAgICAgb2Zmc2V0ID0gcm5nLnN0YXJ0T2Zmc2V0O1xuICAgICAgY29uc3Qgc2hpZnRLZXkgPSAhIShldnQgJiYgZXZ0LnNoaWZ0S2V5KTtcbiAgICAgIGNvbnN0IGN0cmxLZXkgPSAhIShldnQgJiYgZXZ0LmN0cmxLZXkpO1xuICAgICAgaWYgKGlzRWxlbWVudCQ2KGNvbnRhaW5lcikgJiYgY29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKSAmJiAhY29sbGFwc2VkQW5kQ2VmKSB7XG4gICAgICAgIGlzQWZ0ZXJMYXN0Tm9kZUluQ29udGFpbmVyID0gb2Zmc2V0ID4gY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLmNoaWxkTm9kZXNbTWF0aC5taW4ob2Zmc2V0LCBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGggLSAxKV0gfHwgY29udGFpbmVyO1xuICAgICAgICBpZiAoaXNBZnRlckxhc3ROb2RlSW5Db250YWluZXIgJiYgaXNUZXh0JGEoY29udGFpbmVyKSkge1xuICAgICAgICAgIG9mZnNldCA9IGNvbnRhaW5lci5kYXRhLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBlZGl0YWJsZVJvb3QgPSBnZXRFZGl0YWJsZVJvb3QoZG9tLCBjb250YWluZXIpO1xuICAgICAgaWYgKCFlZGl0YWJsZVJvb3QgfHwgaXNXaXRoaW5Ob25FZGl0YWJsZUxpc3QoZWRpdG9yLCBjb250YWluZXIpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghc2hpZnRLZXkpIHtcbiAgICAgICAgY29udGFpbmVyID0gd3JhcFNlbGZBbmRTaWJsaW5nc0luRGVmYXVsdEJsb2NrKGVkaXRvciwgbmV3QmxvY2tOYW1lLCBybmcsIGNvbnRhaW5lciwgb2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGxldCBwYXJlbnRCbG9jayA9IGRvbS5nZXRQYXJlbnQoY29udGFpbmVyLCBkb20uaXNCbG9jaykgfHwgZG9tLmdldFJvb3QoKTtcbiAgICAgIGNvbnRhaW5lckJsb2NrID0gaXNOb25OdWxsYWJsZShwYXJlbnRCbG9jayA9PT0gbnVsbCB8fCBwYXJlbnRCbG9jayA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyZW50QmxvY2sucGFyZW50Tm9kZSkgPyBkb20uZ2V0UGFyZW50KHBhcmVudEJsb2NrLnBhcmVudE5vZGUsIGRvbS5pc0Jsb2NrKSA6IG51bGw7XG4gICAgICBwYXJlbnRCbG9ja05hbWUgPSBwYXJlbnRCbG9jayA/IHBhcmVudEJsb2NrLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgOiAnJztcbiAgICAgIGNvbnN0IGNvbnRhaW5lckJsb2NrTmFtZSA9IGNvbnRhaW5lckJsb2NrID8gY29udGFpbmVyQmxvY2subm9kZU5hbWUudG9VcHBlckNhc2UoKSA6ICcnO1xuICAgICAgaWYgKGNvbnRhaW5lckJsb2NrTmFtZSA9PT0gJ0xJJyAmJiAhY3RybEtleSkge1xuICAgICAgICBjb25zdCBsaUJsb2NrID0gY29udGFpbmVyQmxvY2s7XG4gICAgICAgIHBhcmVudEJsb2NrID0gbGlCbG9jaztcbiAgICAgICAgY29udGFpbmVyQmxvY2sgPSBsaUJsb2NrLnBhcmVudE5vZGU7XG4gICAgICAgIHBhcmVudEJsb2NrTmFtZSA9IGNvbnRhaW5lckJsb2NrTmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0VsZW1lbnQkNihjb250YWluZXJCbG9jaykgJiYgaXNMYXN0RW1wdHlCbG9ja0luRGV0YWlscyhlZGl0b3IsIHNoaWZ0S2V5LCBwYXJlbnRCbG9jaykpIHtcbiAgICAgICAgcmV0dXJuIGluc2VydE5ld0xpbmUoZWRpdG9yLCBjcmVhdGVOZXdCbG9jayQxLCBwYXJlbnRCbG9jayk7XG4gICAgICB9XG4gICAgICBpZiAoL14oTEl8RFR8REQpJC8udGVzdChwYXJlbnRCbG9ja05hbWUpICYmIGlzRWxlbWVudCQ2KGNvbnRhaW5lckJsb2NrKSkge1xuICAgICAgICBpZiAoZG9tLmlzRW1wdHkocGFyZW50QmxvY2spKSB7XG4gICAgICAgICAgaW5zZXJ0JDQoZWRpdG9yLCBjcmVhdGVOZXdCbG9jayQxLCBjb250YWluZXJCbG9jaywgcGFyZW50QmxvY2ssIG5ld0Jsb2NrTmFtZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWNvbGxhcHNlZEFuZENlZiAmJiAocGFyZW50QmxvY2sgPT09IGVkaXRvci5nZXRCb2R5KCkgfHwgIWNhblNwbGl0QmxvY2soZG9tLCBwYXJlbnRCbG9jaykpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcmVudEJsb2NrUGFyZW50ID0gcGFyZW50QmxvY2sucGFyZW50Tm9kZTtcbiAgICAgIGxldCBuZXdCbG9jaztcbiAgICAgIGlmIChjb2xsYXBzZWRBbmRDZWYpIHtcbiAgICAgICAgbmV3QmxvY2sgPSBjcmVhdGVOZXdCbG9jayQxKG5ld0Jsb2NrTmFtZSk7XG4gICAgICAgIGNoaWxkLmZvbGQoKCkgPT4ge1xuICAgICAgICAgIGFwcGVuZCQxKHN0YXJ0LCBTdWdhckVsZW1lbnQuZnJvbURvbShuZXdCbG9jaykpO1xuICAgICAgICB9LCBjaGlsZCA9PiB7XG4gICAgICAgICAgYmVmb3JlJDMoY2hpbGQsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5ld0Jsb2NrKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldEN1cnNvckxvY2F0aW9uKG5ld0Jsb2NrLCAwKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNDYXJldENvbnRhaW5lckJsb2NrJDEocGFyZW50QmxvY2spKSB7XG4gICAgICAgIG5ld0Jsb2NrID0gc2hvd0NhcmV0Q29udGFpbmVyQmxvY2socGFyZW50QmxvY2spO1xuICAgICAgICBpZiAoZG9tLmlzRW1wdHkocGFyZW50QmxvY2spKSB7XG4gICAgICAgICAgZW1wdHlCbG9jayhwYXJlbnRCbG9jayk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Rm9yY2VkQmxvY2tBdHRycyhlZGl0b3IsIG5ld0Jsb2NrKTtcbiAgICAgICAgbW92ZVRvQ2FyZXRQb3NpdGlvbihlZGl0b3IsIG5ld0Jsb2NrKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNDYXJldEF0U3RhcnRPckVuZE9mQmxvY2soZmFsc2UpKSB7XG4gICAgICAgIG5ld0Jsb2NrID0gaW5zZXJ0TmV3QmxvY2tBZnRlcigpO1xuICAgICAgfSBlbHNlIGlmIChpc0NhcmV0QXRTdGFydE9yRW5kT2ZCbG9jayh0cnVlKSAmJiBwYXJlbnRCbG9ja1BhcmVudCkge1xuICAgICAgICBuZXdCbG9jayA9IHBhcmVudEJsb2NrUGFyZW50Lmluc2VydEJlZm9yZShjcmVhdGVOZXdCbG9jayQxKCksIHBhcmVudEJsb2NrKTtcbiAgICAgICAgY29uc3QgaXNOZWFyQ2hpbGRyZW4gPSBoYXNDaGlsZE5vZGVzKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJuZy5zdGFydENvbnRhaW5lcikpICYmIHJuZy5jb2xsYXBzZWQ7XG4gICAgICAgIG1vdmVUb0NhcmV0UG9zaXRpb24oZWRpdG9yLCBjb250YWluZXJBbmRTaWJsaW5nTmFtZShwYXJlbnRCbG9jaywgJ0hSJykgfHwgaXNOZWFyQ2hpbGRyZW4gPyBuZXdCbG9jayA6IHBhcmVudEJsb2NrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRtcFJuZyA9IGluY2x1ZGVad3NwSW5SYW5nZShybmcpLmNsb25lUmFuZ2UoKTtcbiAgICAgICAgdG1wUm5nLnNldEVuZEFmdGVyKHBhcmVudEJsb2NrKTtcbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSB0bXBSbmcuZXh0cmFjdENvbnRlbnRzKCk7XG4gICAgICAgIHRyaW1ad3NwKGZyYWdtZW50KTtcbiAgICAgICAgdHJpbUxlYWRpbmdMaW5lQnJlYWtzKGZyYWdtZW50KTtcbiAgICAgICAgbmV3QmxvY2sgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuICAgICAgICBkb20uaW5zZXJ0QWZ0ZXIoZnJhZ21lbnQsIHBhcmVudEJsb2NrKTtcbiAgICAgICAgdHJpbUlubGluZUVsZW1lbnRzT25MZWZ0U2lkZU9mQmxvY2soZG9tLCBub25FbXB0eUVsZW1lbnRzTWFwLCBuZXdCbG9jayk7XG4gICAgICAgIGFkZEJyVG9CbG9ja0lmTmVlZGVkKGRvbSwgcGFyZW50QmxvY2spO1xuICAgICAgICBpZiAoZG9tLmlzRW1wdHkocGFyZW50QmxvY2spKSB7XG4gICAgICAgICAgZW1wdHlCbG9jayhwYXJlbnRCbG9jayk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3QmxvY2subm9ybWFsaXplKCk7XG4gICAgICAgIGlmIChkb20uaXNFbXB0eShuZXdCbG9jaykpIHtcbiAgICAgICAgICBkb20ucmVtb3ZlKG5ld0Jsb2NrKTtcbiAgICAgICAgICBpbnNlcnROZXdCbG9ja0FmdGVyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0Rm9yY2VkQmxvY2tBdHRycyhlZGl0b3IsIG5ld0Jsb2NrKTtcbiAgICAgICAgICBtb3ZlVG9DYXJldFBvc2l0aW9uKGVkaXRvciwgbmV3QmxvY2spO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkb20uc2V0QXR0cmliKG5ld0Jsb2NrLCAnaWQnLCAnJyk7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ05ld0Jsb2NrJywgeyBuZXdCbG9jayB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZha2VFdmVudE5hbWUkMSA9ICdpbnNlcnRQYXJhZ3JhcGgnO1xuICAgIGNvbnN0IGJsb2NrYnJlYWsgPSB7XG4gICAgICBpbnNlcnQ6IGluc2VydCQzLFxuICAgICAgZmFrZUV2ZW50TmFtZTogZmFrZUV2ZW50TmFtZSQxXG4gICAgfTtcblxuICAgIGNvbnN0IGhhc1JpZ2h0U2lkZUNvbnRlbnQgPSAoc2NoZW1hLCBjb250YWluZXIsIHBhcmVudEJsb2NrKSA9PiB7XG4gICAgICBjb25zdCB3YWxrZXIgPSBuZXcgRG9tVHJlZVdhbGtlcihjb250YWluZXIsIHBhcmVudEJsb2NrKTtcbiAgICAgIGxldCBub2RlO1xuICAgICAgY29uc3Qgbm9uRW1wdHlFbGVtZW50c01hcCA9IHNjaGVtYS5nZXROb25FbXB0eUVsZW1lbnRzKCk7XG4gICAgICB3aGlsZSAobm9kZSA9IHdhbGtlci5uZXh0KCkpIHtcbiAgICAgICAgaWYgKG5vbkVtcHR5RWxlbWVudHNNYXBbbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSB8fCBpc1RleHQkYShub2RlKSAmJiBub2RlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgY29uc3QgbW92ZVNlbGVjdGlvblRvQnIgPSAoZWRpdG9yLCBickVsbSwgZXh0cmFCcikgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLmRvbS5jcmVhdGVSbmcoKTtcbiAgICAgIGlmICghZXh0cmFCcikge1xuICAgICAgICBybmcuc2V0U3RhcnRBZnRlcihickVsbSk7XG4gICAgICAgIHJuZy5zZXRFbmRBZnRlcihickVsbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBybmcuc2V0U3RhcnRCZWZvcmUoYnJFbG0pO1xuICAgICAgICBybmcuc2V0RW5kQmVmb3JlKGJyRWxtKTtcbiAgICAgIH1cbiAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG4gICAgICBzY3JvbGxSYW5nZUludG9WaWV3KGVkaXRvciwgcm5nKTtcbiAgICB9O1xuICAgIGNvbnN0IGluc2VydEJyQXRDYXJldCA9IChlZGl0b3IsIGV2dCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBybmcgPSBzZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBsZXQgYnJFbG07XG4gICAgICBsZXQgZXh0cmFCciA9IGZhbHNlO1xuICAgICAgbm9ybWFsaXplJDIoZG9tLCBybmcpLmVhY2gobm9ybVJuZyA9PiB7XG4gICAgICAgIHJuZy5zZXRTdGFydChub3JtUm5nLnN0YXJ0Q29udGFpbmVyLCBub3JtUm5nLnN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgcm5nLnNldEVuZChub3JtUm5nLmVuZENvbnRhaW5lciwgbm9ybVJuZy5lbmRPZmZzZXQpO1xuICAgICAgfSk7XG4gICAgICBsZXQgb2Zmc2V0ID0gcm5nLnN0YXJ0T2Zmc2V0O1xuICAgICAgbGV0IGNvbnRhaW5lciA9IHJuZy5zdGFydENvbnRhaW5lcjtcbiAgICAgIGlmIChpc0VsZW1lbnQkNihjb250YWluZXIpICYmIGNvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgY29uc3QgaXNBZnRlckxhc3ROb2RlSW5Db250YWluZXIgPSBvZmZzZXQgPiBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGggLSAxO1xuICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIuY2hpbGROb2Rlc1tNYXRoLm1pbihvZmZzZXQsIGNvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCAtIDEpXSB8fCBjb250YWluZXI7XG4gICAgICAgIGlmIChpc0FmdGVyTGFzdE5vZGVJbkNvbnRhaW5lciAmJiBpc1RleHQkYShjb250YWluZXIpKSB7XG4gICAgICAgICAgb2Zmc2V0ID0gY29udGFpbmVyLmRhdGEubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9mZnNldCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCBwYXJlbnRCbG9jayA9IGRvbS5nZXRQYXJlbnQoY29udGFpbmVyLCBkb20uaXNCbG9jayk7XG4gICAgICBjb25zdCBjb250YWluZXJCbG9jayA9IHBhcmVudEJsb2NrICYmIHBhcmVudEJsb2NrLnBhcmVudE5vZGUgPyBkb20uZ2V0UGFyZW50KHBhcmVudEJsb2NrLnBhcmVudE5vZGUsIGRvbS5pc0Jsb2NrKSA6IG51bGw7XG4gICAgICBjb25zdCBjb250YWluZXJCbG9ja05hbWUgPSBjb250YWluZXJCbG9jayA/IGNvbnRhaW5lckJsb2NrLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgOiAnJztcbiAgICAgIGNvbnN0IGlzQ29udHJvbEtleSA9ICEhKGV2dCAmJiBldnQuY3RybEtleSk7XG4gICAgICBpZiAoY29udGFpbmVyQmxvY2tOYW1lID09PSAnTEknICYmICFpc0NvbnRyb2xLZXkpIHtcbiAgICAgICAgcGFyZW50QmxvY2sgPSBjb250YWluZXJCbG9jaztcbiAgICAgIH1cbiAgICAgIGlmIChpc1RleHQkYShjb250YWluZXIpICYmIG9mZnNldCA+PSBjb250YWluZXIuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKCFoYXNSaWdodFNpZGVDb250ZW50KGVkaXRvci5zY2hlbWEsIGNvbnRhaW5lciwgcGFyZW50QmxvY2sgfHwgZG9tLmdldFJvb3QoKSkpIHtcbiAgICAgICAgICBickVsbSA9IGRvbS5jcmVhdGUoJ2JyJyk7XG4gICAgICAgICAgcm5nLmluc2VydE5vZGUoYnJFbG0pO1xuICAgICAgICAgIHJuZy5zZXRTdGFydEFmdGVyKGJyRWxtKTtcbiAgICAgICAgICBybmcuc2V0RW5kQWZ0ZXIoYnJFbG0pO1xuICAgICAgICAgIGV4dHJhQnIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBickVsbSA9IGRvbS5jcmVhdGUoJ2JyJyk7XG4gICAgICByYW5nZUluc2VydE5vZGUoZG9tLCBybmcsIGJyRWxtKTtcbiAgICAgIG1vdmVTZWxlY3Rpb25Ub0JyKGVkaXRvciwgYnJFbG0sIGV4dHJhQnIpO1xuICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLmFkZCgpO1xuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0QnJCZWZvcmUgPSAoZWRpdG9yLCBpbmxpbmUpID0+IHtcbiAgICAgIGNvbnN0IGJyID0gU3VnYXJFbGVtZW50LmZyb21UYWcoJ2JyJyk7XG4gICAgICBiZWZvcmUkMyhTdWdhckVsZW1lbnQuZnJvbURvbShpbmxpbmUpLCBicik7XG4gICAgICBlZGl0b3IudW5kb01hbmFnZXIuYWRkKCk7XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnRCckFmdGVyID0gKGVkaXRvciwgaW5saW5lKSA9PiB7XG4gICAgICBpZiAoIWhhc0JyQWZ0ZXIoZWRpdG9yLmdldEJvZHkoKSwgaW5saW5lKSkge1xuICAgICAgICBhZnRlciQ0KFN1Z2FyRWxlbWVudC5mcm9tRG9tKGlubGluZSksIFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdicicpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJyID0gU3VnYXJFbGVtZW50LmZyb21UYWcoJ2JyJyk7XG4gICAgICBhZnRlciQ0KFN1Z2FyRWxlbWVudC5mcm9tRG9tKGlubGluZSksIGJyKTtcbiAgICAgIG1vdmVTZWxlY3Rpb25Ub0JyKGVkaXRvciwgYnIuZG9tLCBmYWxzZSk7XG4gICAgICBlZGl0b3IudW5kb01hbmFnZXIuYWRkKCk7XG4gICAgfTtcbiAgICBjb25zdCBpc0JlZm9yZUJyID0gcG9zID0+IHtcbiAgICAgIHJldHVybiBpc0JyJDYocG9zLmdldE5vZGUoKSk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNCckFmdGVyID0gKHJvb3ROb2RlLCBzdGFydE5vZGUpID0+IHtcbiAgICAgIGlmIChpc0JlZm9yZUJyKENhcmV0UG9zaXRpb24uYWZ0ZXIoc3RhcnROb2RlKSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV4dFBvc2l0aW9uKHJvb3ROb2RlLCBDYXJldFBvc2l0aW9uLmFmdGVyKHN0YXJ0Tm9kZSkpLm1hcChwb3MgPT4ge1xuICAgICAgICAgIHJldHVybiBpc0JyJDYocG9zLmdldE5vZGUoKSk7XG4gICAgICAgIH0pLmdldE9yKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlzQW5jaG9yTGluayA9IGVsbSA9PiB7XG4gICAgICByZXR1cm4gZWxtICYmIGVsbS5ub2RlTmFtZSA9PT0gJ0EnICYmICdocmVmJyBpbiBlbG07XG4gICAgfTtcbiAgICBjb25zdCBpc0luc2lkZUFuY2hvciA9IGxvY2F0aW9uID0+IHtcbiAgICAgIHJldHVybiBsb2NhdGlvbi5mb2xkKG5ldmVyLCBpc0FuY2hvckxpbmssIGlzQW5jaG9yTGluaywgbmV2ZXIpO1xuICAgIH07XG4gICAgY29uc3QgcmVhZElubGluZUFuY2hvckxvY2F0aW9uID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGlzSW5saW5lVGFyZ2V0JDEgPSBjdXJyeShpc0lubGluZVRhcmdldCwgZWRpdG9yKTtcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKTtcbiAgICAgIHJldHVybiByZWFkTG9jYXRpb24oaXNJbmxpbmVUYXJnZXQkMSwgZWRpdG9yLmdldEJvZHkoKSwgcG9zaXRpb24pLmZpbHRlcihpc0luc2lkZUFuY2hvcik7XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnRCck91dHNpZGVBbmNob3IgPSAoZWRpdG9yLCBsb2NhdGlvbikgPT4ge1xuICAgICAgbG9jYXRpb24uZm9sZChub29wLCBjdXJyeShpbnNlcnRCckJlZm9yZSwgZWRpdG9yKSwgY3VycnkoaW5zZXJ0QnJBZnRlciwgZWRpdG9yKSwgbm9vcCk7XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnQkMiA9IChlZGl0b3IsIGV2dCkgPT4ge1xuICAgICAgY29uc3QgYW5jaG9yTG9jYXRpb24gPSByZWFkSW5saW5lQW5jaG9yTG9jYXRpb24oZWRpdG9yKTtcbiAgICAgIGlmIChhbmNob3JMb2NhdGlvbi5pc1NvbWUoKSkge1xuICAgICAgICBhbmNob3JMb2NhdGlvbi5lYWNoKGN1cnJ5KGluc2VydEJyT3V0c2lkZUFuY2hvciwgZWRpdG9yKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnNlcnRCckF0Q2FyZXQoZWRpdG9yLCBldnQpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZmFrZUV2ZW50TmFtZSA9ICdpbnNlcnRMaW5lQnJlYWsnO1xuICAgIGNvbnN0IGxpbmVicmVhayA9IHtcbiAgICAgIGluc2VydDogaW5zZXJ0JDIsXG4gICAgICBmYWtlRXZlbnROYW1lXG4gICAgfTtcblxuICAgIGNvbnN0IG1hdGNoZXNTZWxlY3RvciA9IChlZGl0b3IsIHNlbGVjdG9yKSA9PiB7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50QmxvY2skMShlZGl0b3IpLmZpbHRlcihwYXJlbnRCbG9jayA9PiB7XG4gICAgICAgIHJldHVybiBzZWxlY3Rvci5sZW5ndGggPiAwICYmIGlzJDEoU3VnYXJFbGVtZW50LmZyb21Eb20ocGFyZW50QmxvY2spLCBzZWxlY3Rvcik7XG4gICAgICB9KS5pc1NvbWUoKTtcbiAgICB9O1xuICAgIGNvbnN0IHNob3VsZEluc2VydEJyID0gZWRpdG9yID0+IHtcbiAgICAgIHJldHVybiBtYXRjaGVzU2VsZWN0b3IoZWRpdG9yLCBnZXRCck5ld0xpbmVTZWxlY3RvcihlZGl0b3IpKTtcbiAgICB9O1xuICAgIGNvbnN0IHNob3VsZEJsb2NrTmV3TGluZSQxID0gZWRpdG9yID0+IHtcbiAgICAgIHJldHVybiBtYXRjaGVzU2VsZWN0b3IoZWRpdG9yLCBnZXROb05ld0xpbmVTZWxlY3RvcihlZGl0b3IpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbmV3TGluZUFjdGlvbiA9IEFkdC5nZW5lcmF0ZShbXG4gICAgICB7IGJyOiBbXSB9LFxuICAgICAgeyBibG9jazogW10gfSxcbiAgICAgIHsgbm9uZTogW10gfVxuICAgIF0pO1xuICAgIGNvbnN0IHNob3VsZEJsb2NrTmV3TGluZSA9IChlZGl0b3IsIF9zaGlmdEtleSkgPT4ge1xuICAgICAgcmV0dXJuIHNob3VsZEJsb2NrTmV3TGluZSQxKGVkaXRvcik7XG4gICAgfTtcbiAgICBjb25zdCBpbkxpc3RCbG9jayA9IHJlcXVpcmVkU3RhdGUgPT4ge1xuICAgICAgcmV0dXJuIChlZGl0b3IsIF9zaGlmdEtleSkgPT4ge1xuICAgICAgICByZXR1cm4gaXNMaXN0SXRlbVBhcmVudEJsb2NrKGVkaXRvcikgPT09IHJlcXVpcmVkU3RhdGU7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgaW5CbG9jayA9IChibG9ja05hbWUsIHJlcXVpcmVkU3RhdGUpID0+IChlZGl0b3IsIF9zaGlmdEtleSkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGUgPSBnZXRQYXJlbnRCbG9ja05hbWUoZWRpdG9yKSA9PT0gYmxvY2tOYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICByZXR1cm4gc3RhdGUgPT09IHJlcXVpcmVkU3RhdGU7XG4gICAgfTtcbiAgICBjb25zdCBpbkNlZkJsb2NrID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGVkaXRhYmxlUm9vdCA9IGdldEVkaXRhYmxlUm9vdChlZGl0b3IuZG9tLCBlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KCkpO1xuICAgICAgcmV0dXJuIGlzTnVsbGFibGUoZWRpdGFibGVSb290KTtcbiAgICB9O1xuICAgIGNvbnN0IGluUHJlQmxvY2sgPSByZXF1aXJlZFN0YXRlID0+IGluQmxvY2soJ3ByZScsIHJlcXVpcmVkU3RhdGUpO1xuICAgIGNvbnN0IGluU3VtbWFyeUJsb2NrID0gKCkgPT4gaW5CbG9jaygnc3VtbWFyeScsIHRydWUpO1xuICAgIGNvbnN0IHNob3VsZFB1dEJySW5QcmUgPSByZXF1aXJlZFN0YXRlID0+IHtcbiAgICAgIHJldHVybiAoZWRpdG9yLCBfc2hpZnRLZXkpID0+IHtcbiAgICAgICAgcmV0dXJuIHNob3VsZFB1dEJySW5QcmUkMShlZGl0b3IpID09PSByZXF1aXJlZFN0YXRlO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGluQnJDb250ZXh0ID0gKGVkaXRvciwgX3NoaWZ0S2V5KSA9PiB7XG4gICAgICByZXR1cm4gc2hvdWxkSW5zZXJ0QnIoZWRpdG9yKTtcbiAgICB9O1xuICAgIGNvbnN0IGhhc1NoaWZ0S2V5ID0gKF9lZGl0b3IsIHNoaWZ0S2V5KSA9PiB7XG4gICAgICByZXR1cm4gc2hpZnRLZXk7XG4gICAgfTtcbiAgICBjb25zdCBjYW5JbnNlcnRJbnRvRWRpdGFibGVSb290ID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGZvcmNlZFJvb3RCbG9jayA9IGdldEZvcmNlZFJvb3RCbG9jayhlZGl0b3IpO1xuICAgICAgY29uc3Qgcm9vdEVkaXRhYmxlID0gZ2V0RWRpdGFibGVSb290KGVkaXRvci5kb20sIGVkaXRvci5zZWxlY3Rpb24uZ2V0U3RhcnQoKSk7XG4gICAgICByZXR1cm4gaXNOb25OdWxsYWJsZShyb290RWRpdGFibGUpICYmIGVkaXRvci5zY2hlbWEuaXNWYWxpZENoaWxkKHJvb3RFZGl0YWJsZS5ub2RlTmFtZSwgZm9yY2VkUm9vdEJsb2NrKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzSW5Sb290V2l0aEVtcHR5T3JDRUYgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLnN0YXJ0Q29udGFpbmVyKTtcbiAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGQkMShzdGFydCwgcm5nLnN0YXJ0T2Zmc2V0KTtcbiAgICAgIGNvbnN0IGlzQ2VmT3B0ID0gY2hpbGQubWFwKGVsZW1lbnQgPT4gaXNIVE1MRWxlbWVudChlbGVtZW50KSAmJiAhaXNFZGl0YWJsZSQzKGVsZW1lbnQpKTtcbiAgICAgIHJldHVybiBybmcuY29sbGFwc2VkICYmIGlzQ2VmT3B0LmdldE9yKHRydWUpO1xuICAgIH07XG4gICAgY29uc3QgbWF0Y2ggPSAocHJlZGljYXRlcywgYWN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gKGVkaXRvciwgc2hpZnRLZXkpID0+IHtcbiAgICAgICAgY29uc3QgaXNNYXRjaCA9IGZvbGRsKHByZWRpY2F0ZXMsIChyZXMsIHApID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzICYmIHAoZWRpdG9yLCBzaGlmdEtleSk7XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICByZXR1cm4gaXNNYXRjaCA/IE9wdGlvbmFsLnNvbWUoYWN0aW9uKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBnZXRBY3Rpb24gPSAoZWRpdG9yLCBldnQpID0+IHtcbiAgICAgIHJldHVybiBldmFsdWF0ZVVudGlsKFtcbiAgICAgICAgbWF0Y2goW3Nob3VsZEJsb2NrTmV3TGluZV0sIG5ld0xpbmVBY3Rpb24ubm9uZSgpKSxcbiAgICAgICAgbWF0Y2goW1xuICAgICAgICAgIGluUHJlQmxvY2sodHJ1ZSksXG4gICAgICAgICAgaW5DZWZCbG9ja1xuICAgICAgICBdLCBuZXdMaW5lQWN0aW9uLm5vbmUoKSksXG4gICAgICAgIG1hdGNoKFtpblN1bW1hcnlCbG9jaygpXSwgbmV3TGluZUFjdGlvbi5icigpKSxcbiAgICAgICAgbWF0Y2goW1xuICAgICAgICAgIGluUHJlQmxvY2sodHJ1ZSksXG4gICAgICAgICAgc2hvdWxkUHV0QnJJblByZShmYWxzZSksXG4gICAgICAgICAgaGFzU2hpZnRLZXlcbiAgICAgICAgXSwgbmV3TGluZUFjdGlvbi5icigpKSxcbiAgICAgICAgbWF0Y2goW1xuICAgICAgICAgIGluUHJlQmxvY2sodHJ1ZSksXG4gICAgICAgICAgc2hvdWxkUHV0QnJJblByZShmYWxzZSlcbiAgICAgICAgXSwgbmV3TGluZUFjdGlvbi5ibG9jaygpKSxcbiAgICAgICAgbWF0Y2goW1xuICAgICAgICAgIGluUHJlQmxvY2sodHJ1ZSksXG4gICAgICAgICAgc2hvdWxkUHV0QnJJblByZSh0cnVlKSxcbiAgICAgICAgICBoYXNTaGlmdEtleVxuICAgICAgICBdLCBuZXdMaW5lQWN0aW9uLmJsb2NrKCkpLFxuICAgICAgICBtYXRjaChbXG4gICAgICAgICAgaW5QcmVCbG9jayh0cnVlKSxcbiAgICAgICAgICBzaG91bGRQdXRCckluUHJlKHRydWUpXG4gICAgICAgIF0sIG5ld0xpbmVBY3Rpb24uYnIoKSksXG4gICAgICAgIG1hdGNoKFtcbiAgICAgICAgICBpbkxpc3RCbG9jayh0cnVlKSxcbiAgICAgICAgICBoYXNTaGlmdEtleVxuICAgICAgICBdLCBuZXdMaW5lQWN0aW9uLmJyKCkpLFxuICAgICAgICBtYXRjaChbaW5MaXN0QmxvY2sodHJ1ZSldLCBuZXdMaW5lQWN0aW9uLmJsb2NrKCkpLFxuICAgICAgICBtYXRjaChbaW5CckNvbnRleHRdLCBuZXdMaW5lQWN0aW9uLmJyKCkpLFxuICAgICAgICBtYXRjaChbaGFzU2hpZnRLZXldLCBuZXdMaW5lQWN0aW9uLmJyKCkpLFxuICAgICAgICBtYXRjaChbY2FuSW5zZXJ0SW50b0VkaXRhYmxlUm9vdF0sIG5ld0xpbmVBY3Rpb24uYmxvY2soKSksXG4gICAgICAgIG1hdGNoKFtpc0luUm9vdFdpdGhFbXB0eU9yQ0VGXSwgbmV3TGluZUFjdGlvbi5ibG9jaygpKVxuICAgICAgXSwgW1xuICAgICAgICBlZGl0b3IsXG4gICAgICAgICEhKGV2dCAmJiBldnQuc2hpZnRLZXkpXG4gICAgICBdKS5nZXRPcihuZXdMaW5lQWN0aW9uLm5vbmUoKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGluc2VydEJyZWFrID0gKGJyZWFrVHlwZSwgZWRpdG9yLCBldnQpID0+IHtcbiAgICAgIGlmICghZWRpdG9yLnNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpKSB7XG4gICAgICAgIGV4ZWNFZGl0b3JEZWxldGVDb21tYW5kKGVkaXRvcik7XG4gICAgICB9XG4gICAgICBpZiAoaXNOb25OdWxsYWJsZShldnQpKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gZmlyZUJlZm9yZUlucHV0RXZlbnQoZWRpdG9yLCBicmVha1R5cGUuZmFrZUV2ZW50TmFtZSk7XG4gICAgICAgIGlmIChldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWtUeXBlLmluc2VydChlZGl0b3IsIGV2dCk7XG4gICAgICBpZiAoaXNOb25OdWxsYWJsZShldnQpKSB7XG4gICAgICAgIGZpcmVJbnB1dEV2ZW50KGVkaXRvciwgYnJlYWtUeXBlLmZha2VFdmVudE5hbWUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0JDEgPSAoZWRpdG9yLCBldnQpID0+IHtcbiAgICAgIGNvbnN0IGJyID0gKCkgPT4gaW5zZXJ0QnJlYWsobGluZWJyZWFrLCBlZGl0b3IsIGV2dCk7XG4gICAgICBjb25zdCBibG9jayA9ICgpID0+IGluc2VydEJyZWFrKGJsb2NrYnJlYWssIGVkaXRvciwgZXZ0KTtcbiAgICAgIGNvbnN0IGxvZ2ljYWxBY3Rpb24gPSBnZXRBY3Rpb24oZWRpdG9yLCBldnQpO1xuICAgICAgc3dpdGNoIChnZXROZXdsaW5lQmVoYXZpb3IoZWRpdG9yKSkge1xuICAgICAgY2FzZSAnbGluZWJyZWFrJzpcbiAgICAgICAgbG9naWNhbEFjdGlvbi5mb2xkKGJyLCBiciwgbm9vcCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYmxvY2snOlxuICAgICAgICBsb2dpY2FsQWN0aW9uLmZvbGQoYmxvY2ssIGJsb2NrLCBub29wKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpbnZlcnQnOlxuICAgICAgICBsb2dpY2FsQWN0aW9uLmZvbGQoYmxvY2ssIGJyLCBub29wKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBsb2dpY2FsQWN0aW9uLmZvbGQoYnIsIGJsb2NrLCBub29wKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHBsYXRmb3JtJDEgPSBkZXRlY3QkMigpO1xuICAgIGNvbnN0IGlzSU9TU2FmYXJpID0gcGxhdGZvcm0kMS5vcy5pc2lPUygpICYmIHBsYXRmb3JtJDEuYnJvd3Nlci5pc1NhZmFyaSgpO1xuICAgIGNvbnN0IGhhbmRsZUVudGVyS2V5RXZlbnQgPSAoZWRpdG9yLCBldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlbmRUeXBpbmdMZXZlbElnbm9yZUxvY2tzKGVkaXRvci51bmRvTWFuYWdlcik7XG4gICAgICBlZGl0b3IudW5kb01hbmFnZXIudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICBpbnNlcnQkMShlZGl0b3IsIGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaXNDYXJldEFmdGVyS29yZWFuQ2hhcmFjdGVyID0gcm5nID0+IHtcbiAgICAgIGlmICghcm5nLmNvbGxhcHNlZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IHJuZy5zdGFydENvbnRhaW5lcjtcbiAgICAgIGlmIChpc1RleHQkYShzdGFydENvbnRhaW5lcikpIHtcbiAgICAgICAgY29uc3Qga29yZWFuQ2hhclJlZ2V4ID0gL15bXFx1QUMwMC1cXHVEN0FGXFx1MTEwMC1cXHUxMUZGXFx1MzEzMC1cXHUzMThGXFx1QTk2MC1cXHVBOTdGXFx1RDdCMC1cXHVEN0ZGXSQvO1xuICAgICAgICBjb25zdCBjaGFyID0gc3RhcnRDb250YWluZXIuZGF0YS5jaGFyQXQocm5nLnN0YXJ0T2Zmc2V0IC0gMSk7XG4gICAgICAgIHJldHVybiBrb3JlYW5DaGFyUmVnZXgudGVzdChjaGFyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldHVwJGggPSBlZGl0b3IgPT4ge1xuICAgICAgbGV0IGlPU1NhZmFyaUtleWRvd25Cb29rbWFyayA9IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIGNvbnN0IGlPU1NhZmFyaUtleWRvd25PdmVycmlkZSA9IGVkaXRvciA9PiB7XG4gICAgICAgIGlPU1NhZmFyaUtleWRvd25Cb29rbWFyayA9IE9wdGlvbmFsLnNvbWUoZWRpdG9yLnNlbGVjdGlvbi5nZXRCb29rbWFyaygpKTtcbiAgICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLmFkZCgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlPU1NhZmFyaUtleXVwT3ZlcnJpZGUgPSAoZWRpdG9yLCBldmVudCkgPT4ge1xuICAgICAgICBlZGl0b3IudW5kb01hbmFnZXIudW5kbygpO1xuICAgICAgICBpT1NTYWZhcmlLZXlkb3duQm9va21hcmsuZm9sZChub29wLCBiID0+IGVkaXRvci5zZWxlY3Rpb24ubW92ZVRvQm9va21hcmsoYikpO1xuICAgICAgICBoYW5kbGVFbnRlcktleUV2ZW50KGVkaXRvciwgZXZlbnQpO1xuICAgICAgICBpT1NTYWZhcmlLZXlkb3duQm9va21hcmsgPSBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLm9uKCdrZXlkb3duJywgZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gVksuRU5URVIpIHtcbiAgICAgICAgICBpZiAoaXNJT1NTYWZhcmkgJiYgaXNDYXJldEFmdGVyS29yZWFuQ2hhcmFjdGVyKGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpKSB7XG4gICAgICAgICAgICBpT1NTYWZhcmlLZXlkb3duT3ZlcnJpZGUoZWRpdG9yKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlRW50ZXJLZXlFdmVudChlZGl0b3IsIGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdrZXl1cCcsIGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IFZLLkVOVEVSKSB7XG4gICAgICAgICAgaU9TU2FmYXJpS2V5ZG93bkJvb2ttYXJrLmVhY2goKCkgPT4gaU9TU2FmYXJpS2V5dXBPdmVycmlkZShlZGl0b3IsIGV2ZW50KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBleGVjdXRlS2V5ZG93bk92ZXJyaWRlJDIgPSAoZWRpdG9yLCBjYXJldCwgZXZ0KSA9PiB7XG4gICAgICBjb25zdCBpc01hYyA9IEVudi5vcy5pc01hY09TKCkgfHwgRW52Lm9zLmlzaU9TKCk7XG4gICAgICBleGVjdXRlKFtcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLkVORCxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlVG9MaW5lRW5kUG9pbnQkMSwgZWRpdG9yLCB0cnVlKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuSE9NRSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlVG9MaW5lRW5kUG9pbnQkMSwgZWRpdG9yLCBmYWxzZSlcbiAgICAgICAgfSxcbiAgICAgICAgLi4uIWlzTWFjID8gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleUNvZGU6IFZLLkhPTUUsXG4gICAgICAgICAgICBhY3Rpb246IGFjdGlvbihzZWxlY3RUb0VuZFBvaW50LCBlZGl0b3IsIGZhbHNlKSxcbiAgICAgICAgICAgIGN0cmxLZXk6IHRydWUsXG4gICAgICAgICAgICBzaGlmdEtleTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5Q29kZTogVksuRU5ELFxuICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb24oc2VsZWN0VG9FbmRQb2ludCwgZWRpdG9yLCB0cnVlKSxcbiAgICAgICAgICAgIGN0cmxLZXk6IHRydWUsXG4gICAgICAgICAgICBzaGlmdEtleTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgXSA6IFtdLFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuRU5ELFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKG1vdmVUb0xpbmVFbmRQb2ludCwgZWRpdG9yLCB0cnVlKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuSE9NRSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlVG9MaW5lRW5kUG9pbnQsIGVkaXRvciwgZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5FTkQsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24obW92ZVRvTGluZUVuZFBvaW50JDIsIGVkaXRvciwgdHJ1ZSwgY2FyZXQpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5IT01FLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKG1vdmVUb0xpbmVFbmRQb2ludCQyLCBlZGl0b3IsIGZhbHNlLCBjYXJldClcbiAgICAgICAgfVxuICAgICAgXSwgZXZ0KS5lYWNoKF8gPT4ge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2V0dXAkZyA9IChlZGl0b3IsIGNhcmV0KSA9PiB7XG4gICAgICBlZGl0b3Iub24oJ2tleWRvd24nLCBldnQgPT4ge1xuICAgICAgICBpZiAoIWV2dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIGV4ZWN1dGVLZXlkb3duT3ZlcnJpZGUkMihlZGl0b3IsIGNhcmV0LCBldnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0dXAkZiA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3Iub24oJ2lucHV0JywgZSA9PiB7XG4gICAgICAgIGlmICghZS5pc0NvbXBvc2luZykge1xuICAgICAgICAgIG5vcm1hbGl6ZU5ic3BzSW5FZGl0b3IoZWRpdG9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHBsYXRmb3JtID0gZGV0ZWN0JDIoKTtcbiAgICBjb25zdCBleGVjdXRlS2V5dXBBY3Rpb24gPSAoZWRpdG9yLCBjYXJldCwgZXZ0KSA9PiB7XG4gICAgICBleGVjdXRlKFtcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLlBBR0VfVVAsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24obW92ZVRvTGluZUVuZFBvaW50JDIsIGVkaXRvciwgZmFsc2UsIGNhcmV0KVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuUEFHRV9ET1dOLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKG1vdmVUb0xpbmVFbmRQb2ludCQyLCBlZGl0b3IsIHRydWUsIGNhcmV0KVxuICAgICAgICB9XG4gICAgICBdLCBldnQpO1xuICAgIH07XG4gICAgY29uc3Qgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uID0gZSA9PiBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGlzUGFnZVVwRG93biA9IGV2dCA9PiBldnQua2V5Q29kZSA9PT0gVksuUEFHRV9VUCB8fCBldnQua2V5Q29kZSA9PT0gVksuUEFHRV9ET1dOO1xuICAgIGNvbnN0IHNldE5vZGVDaGFuZ2VCbG9ja2VyID0gKGJsb2NrZWQsIGVkaXRvciwgYmxvY2spID0+IHtcbiAgICAgIGlmIChibG9jayAmJiAhYmxvY2tlZC5nZXQoKSkge1xuICAgICAgICBlZGl0b3Iub24oJ05vZGVDaGFuZ2UnLCBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24sIHRydWUpO1xuICAgICAgfSBlbHNlIGlmICghYmxvY2sgJiYgYmxvY2tlZC5nZXQoKSkge1xuICAgICAgICBlZGl0b3Iub2ZmKCdOb2RlQ2hhbmdlJywgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKTtcbiAgICAgIH1cbiAgICAgIGJsb2NrZWQuc2V0KGJsb2NrKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldHVwJGUgPSAoZWRpdG9yLCBjYXJldCkgPT4ge1xuICAgICAgaWYgKHBsYXRmb3JtLm9zLmlzTWFjT1MoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBibG9ja2VkID0gQ2VsbChmYWxzZSk7XG4gICAgICBlZGl0b3Iub24oJ2tleWRvd24nLCBldnQgPT4ge1xuICAgICAgICBpZiAoaXNQYWdlVXBEb3duKGV2dCkpIHtcbiAgICAgICAgICBzZXROb2RlQ2hhbmdlQmxvY2tlcihibG9ja2VkLCBlZGl0b3IsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbigna2V5dXAnLCBldnQgPT4ge1xuICAgICAgICBpZiAoIWV2dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIGV4ZWN1dGVLZXl1cEFjdGlvbihlZGl0b3IsIGNhcmV0LCBldnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1BhZ2VVcERvd24oZXZ0KSAmJiBibG9ja2VkLmdldCgpKSB7XG4gICAgICAgICAgc2V0Tm9kZUNoYW5nZUJsb2NrZXIoYmxvY2tlZCwgZWRpdG9yLCBmYWxzZSk7XG4gICAgICAgICAgZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBpbnNlcnRUZXh0QXRQb3NpdGlvbiA9ICh0ZXh0LCBwb3MpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHBvcy5jb250YWluZXIoKTtcbiAgICAgIGNvbnN0IG9mZnNldCA9IHBvcy5vZmZzZXQoKTtcbiAgICAgIGlmIChpc1RleHQkYShjb250YWluZXIpKSB7XG4gICAgICAgIGNvbnRhaW5lci5pbnNlcnREYXRhKG9mZnNldCwgdGV4dCk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKENhcmV0UG9zaXRpb24oY29udGFpbmVyLCBvZmZzZXQgKyB0ZXh0Lmxlbmd0aCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGdldEVsZW1lbnRGcm9tUG9zaXRpb24ocG9zKS5tYXAoZWxtID0+IHtcbiAgICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IFN1Z2FyRWxlbWVudC5mcm9tVGV4dCh0ZXh0KTtcbiAgICAgICAgICBpZiAocG9zLmlzQXRFbmQoKSkge1xuICAgICAgICAgICAgYWZ0ZXIkNChlbG0sIHRleHROb2RlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYmVmb3JlJDMoZWxtLCB0ZXh0Tm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBDYXJldFBvc2l0aW9uKHRleHROb2RlLmRvbSwgdGV4dC5sZW5ndGgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGluc2VydE5ic3BBdFBvc2l0aW9uID0gY3VycnkoaW5zZXJ0VGV4dEF0UG9zaXRpb24sIG5ic3ApO1xuICAgIGNvbnN0IGluc2VydFNwYWNlQXRQb3NpdGlvbiA9IGN1cnJ5KGluc2VydFRleHRBdFBvc2l0aW9uLCAnICcpO1xuXG4gICAgY29uc3QgaW5zZXJ0U3BhY2VPck5ic3BBdFBvc2l0aW9uID0gKHJvb3QsIHBvcykgPT4gbmVlZHNUb0hhdmVOYnNwKHJvb3QsIHBvcykgPyBpbnNlcnROYnNwQXRQb3NpdGlvbihwb3MpIDogaW5zZXJ0U3BhY2VBdFBvc2l0aW9uKHBvcyk7XG4gICAgY29uc3QgbG9jYXRpb25Ub0NhcmV0UG9zaXRpb24gPSByb290ID0+IGxvY2F0aW9uID0+IGxvY2F0aW9uLmZvbGQoZWxlbWVudCA9PiBwcmV2UG9zaXRpb24ocm9vdC5kb20sIENhcmV0UG9zaXRpb24uYmVmb3JlKGVsZW1lbnQpKSwgZWxlbWVudCA9PiBmaXJzdFBvc2l0aW9uSW4oZWxlbWVudCksIGVsZW1lbnQgPT4gbGFzdFBvc2l0aW9uSW4oZWxlbWVudCksIGVsZW1lbnQgPT4gbmV4dFBvc2l0aW9uKHJvb3QuZG9tLCBDYXJldFBvc2l0aW9uLmFmdGVyKGVsZW1lbnQpKSk7XG4gICAgY29uc3QgaW5zZXJ0SW5saW5lQm91bmRhcnlTcGFjZU9yTmJzcCA9IChyb290LCBwb3MpID0+IGNoZWNrUG9zID0+IG5lZWRzVG9IYXZlTmJzcChyb290LCBjaGVja1BvcykgPyBpbnNlcnROYnNwQXRQb3NpdGlvbihwb3MpIDogaW5zZXJ0U3BhY2VBdFBvc2l0aW9uKHBvcyk7XG4gICAgY29uc3Qgc2V0U2VsZWN0aW9uID0gZWRpdG9yID0+IHBvcyA9PiB7XG4gICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhwb3MudG9SYW5nZSgpKTtcbiAgICAgIGVkaXRvci5ub2RlQ2hhbmdlZCgpO1xuICAgIH07XG4gICAgY29uc3QgaXNJbnNpZGVTdW1tYXJ5ID0gKGRvbVV0aWxzLCBub2RlKSA9PiBkb21VdGlscy5pc0VkaXRhYmxlKGRvbVV0aWxzLmdldFBhcmVudChub2RlLCAnc3VtbWFyeScpKTtcbiAgICBjb25zdCBpbnNlcnRTcGFjZU9yTmJzcEF0U2VsZWN0aW9uID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHBvcyA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQoZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSk7XG4gICAgICBjb25zdCByb290ID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBpZiAoZWRpdG9yLnNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpKSB7XG4gICAgICAgIGNvbnN0IGlzSW5saW5lVGFyZ2V0JDEgPSBjdXJyeShpc0lubGluZVRhcmdldCwgZWRpdG9yKTtcbiAgICAgICAgY29uc3QgY2FyZXRQb3NpdGlvbiA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQoZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSk7XG4gICAgICAgIHJldHVybiByZWFkTG9jYXRpb24oaXNJbmxpbmVUYXJnZXQkMSwgZWRpdG9yLmdldEJvZHkoKSwgY2FyZXRQb3NpdGlvbikuYmluZChsb2NhdGlvblRvQ2FyZXRQb3NpdGlvbihyb290KSkubWFwKGNoZWNrUG9zID0+ICgpID0+IGluc2VydElubGluZUJvdW5kYXJ5U3BhY2VPck5ic3Aocm9vdCwgcG9zKShjaGVja1BvcykuZWFjaChzZXRTZWxlY3Rpb24oZWRpdG9yKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGluc2VydFNwYWNlSW5TdW1tYXJ5QXRTZWxlY3Rpb25PbkZpcmVmb3ggPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgaW5zZXJ0U3BhY2VUaHVuayA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgICBpZiAoIWVkaXRvci5zZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSkge1xuICAgICAgICAgIGVkaXRvci5nZXREb2MoKS5leGVjQ29tbWFuZCgnRGVsZXRlJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zID0gQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKTtcbiAgICAgICAgaW5zZXJ0U3BhY2VPck5ic3BBdFBvc2l0aW9uKHJvb3QsIHBvcykuZWFjaChzZXRTZWxlY3Rpb24oZWRpdG9yKSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHNvbWVJZihFbnYuYnJvd3Nlci5pc0ZpcmVmb3goKSAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRWRpdGFibGUoKSAmJiBpc0luc2lkZVN1bW1hcnkoZWRpdG9yLmRvbSwgZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKS5zdGFydENvbnRhaW5lciksIGluc2VydFNwYWNlVGh1bmspO1xuICAgIH07XG5cbiAgICBjb25zdCBleGVjdXRlS2V5ZG93bk92ZXJyaWRlJDEgPSAoZWRpdG9yLCBldnQpID0+IHtcbiAgICAgIGV4ZWN1dGVXaXRoRGVsYXllZEFjdGlvbihbXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5TUEFDRUJBUixcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihpbnNlcnRTcGFjZU9yTmJzcEF0U2VsZWN0aW9uLCBlZGl0b3IpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5TUEFDRUJBUixcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihpbnNlcnRTcGFjZUluU3VtbWFyeUF0U2VsZWN0aW9uT25GaXJlZm94LCBlZGl0b3IpXG4gICAgICAgIH1cbiAgICAgIF0sIGV2dCkuZWFjaChhcHBseUFjdGlvbiA9PiB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBldmVudCA9IGZpcmVCZWZvcmVJbnB1dEV2ZW50KGVkaXRvciwgJ2luc2VydFRleHQnLCB7IGRhdGE6ICcgJyB9KTtcbiAgICAgICAgaWYgKCFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIGFwcGx5QWN0aW9uKCk7XG4gICAgICAgICAgZmlyZUlucHV0RXZlbnQoZWRpdG9yLCAnaW5zZXJ0VGV4dCcsIHsgZGF0YTogJyAnIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHNldHVwJGQgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLm9uKCdrZXlkb3duJywgZXZ0ID0+IHtcbiAgICAgICAgaWYgKCFldnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICBleGVjdXRlS2V5ZG93bk92ZXJyaWRlJDEoZWRpdG9yLCBldnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgdGFibGVUYWJOYXZpZ2F0aW9uID0gZWRpdG9yID0+IHtcbiAgICAgIGlmIChoYXNUYWJsZVRhYk5hdmlnYXRpb24oZWRpdG9yKSkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleUNvZGU6IFZLLlRBQixcbiAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uKGhhbmRsZVRhYiwgZWRpdG9yLCB0cnVlKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5Q29kZTogVksuVEFCLFxuICAgICAgICAgICAgc2hpZnRLZXk6IHRydWUsXG4gICAgICAgICAgICBhY3Rpb246IGFjdGlvbihoYW5kbGVUYWIsIGVkaXRvciwgZmFsc2UpXG4gICAgICAgICAgfVxuICAgICAgICBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZXhlY3V0ZUtleWRvd25PdmVycmlkZSA9IChlZGl0b3IsIGV2dCkgPT4ge1xuICAgICAgZXhlY3V0ZShbLi4udGFibGVUYWJOYXZpZ2F0aW9uKGVkaXRvcildLCBldnQpLmVhY2goXyA9PiB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cCRjID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5vbigna2V5ZG93bicsIGV2dCA9PiB7XG4gICAgICAgIGlmICghZXZ0LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgZXhlY3V0ZUtleWRvd25PdmVycmlkZShlZGl0b3IsIGV2dCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBzZXR1cCRiID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5hZGRTaG9ydGN1dCgnTWV0YStQJywgJycsICdtY2VQcmludCcpO1xuICAgICAgc2V0dXAkaihlZGl0b3IpO1xuICAgICAgaWYgKGlzUnRjKGVkaXRvcikpIHtcbiAgICAgICAgcmV0dXJuIENlbGwobnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjYXJldCA9IHNldHVwU2VsZWN0ZWRTdGF0ZShlZGl0b3IpO1xuICAgICAgICBzZXR1cCRsKGVkaXRvcik7XG4gICAgICAgIHNldHVwJGsoZWRpdG9yLCBjYXJldCk7XG4gICAgICAgIHNldHVwJGkoZWRpdG9yLCBjYXJldCk7XG4gICAgICAgIHNldHVwJGgoZWRpdG9yKTtcbiAgICAgICAgc2V0dXAkZChlZGl0b3IpO1xuICAgICAgICBzZXR1cCRmKGVkaXRvcik7XG4gICAgICAgIHNldHVwJGMoZWRpdG9yKTtcbiAgICAgICAgc2V0dXAkZyhlZGl0b3IsIGNhcmV0KTtcbiAgICAgICAgc2V0dXAkZShlZGl0b3IsIGNhcmV0KTtcbiAgICAgICAgcmV0dXJuIGNhcmV0O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjbGFzcyBOb2RlQ2hhbmdlIHtcbiAgICAgIGNvbnN0cnVjdG9yKGVkaXRvcikge1xuICAgICAgICB0aGlzLmxhc3RQYXRoID0gW107XG4gICAgICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yO1xuICAgICAgICBsZXQgbGFzdFJuZztcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmICghKCdvbnNlbGVjdGlvbmNoYW5nZScgaW4gZWRpdG9yLmdldERvYygpKSkge1xuICAgICAgICAgIGVkaXRvci5vbignTm9kZUNoYW5nZSBjbGljayBtb3VzZXVwIGtleXVwIGZvY3VzJywgZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuYXRpdmVSbmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgICAgICAgY29uc3QgZmFrZVJuZyA9IHtcbiAgICAgICAgICAgICAgc3RhcnRDb250YWluZXI6IG5hdGl2ZVJuZy5zdGFydENvbnRhaW5lcixcbiAgICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IG5hdGl2ZVJuZy5zdGFydE9mZnNldCxcbiAgICAgICAgICAgICAgZW5kQ29udGFpbmVyOiBuYXRpdmVSbmcuZW5kQ29udGFpbmVyLFxuICAgICAgICAgICAgICBlbmRPZmZzZXQ6IG5hdGl2ZVJuZy5lbmRPZmZzZXRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoZS50eXBlID09PSAnbm9kZWNoYW5nZScgfHwgIWlzRXEkNChmYWtlUm5nLCBsYXN0Um5nKSkge1xuICAgICAgICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ1NlbGVjdGlvbkNoYW5nZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdFJuZyA9IGZha2VSbmc7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yLm9uKCdjb250ZXh0bWVudScsICgpID0+IHtcbiAgICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ1NlbGVjdGlvbkNoYW5nZScpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLm9uKCdTZWxlY3Rpb25DaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhcnRFbG0gPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KHRydWUpO1xuICAgICAgICAgIGlmICghc3RhcnRFbG0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGhhc0FueVJhbmdlcyhlZGl0b3IpICYmICFzZWxmLmlzU2FtZUVsZW1lbnRQYXRoKHN0YXJ0RWxtKSAmJiBlZGl0b3IuZG9tLmlzQ2hpbGRPZihzdGFydEVsbSwgZWRpdG9yLmdldEJvZHkoKSkpIHtcbiAgICAgICAgICAgIGVkaXRvci5ub2RlQ2hhbmdlZCh7IHNlbGVjdGlvbkNoYW5nZTogdHJ1ZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBlZGl0b3Iub24oJ21vdXNldXAnLCBlID0+IHtcbiAgICAgICAgICBpZiAoIWUuaXNEZWZhdWx0UHJldmVudGVkKCkgJiYgaGFzQW55UmFuZ2VzKGVkaXRvcikpIHtcbiAgICAgICAgICAgIGlmIChlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKS5ub2RlTmFtZSA9PT0gJ0lNRycpIHtcbiAgICAgICAgICAgICAgRGVsYXkuc2V0RWRpdG9yVGltZW91dChlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgbm9kZUNoYW5nZWQoYXJncyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgICAgbGV0IG5vZGU7XG4gICAgICAgIGlmICh0aGlzLmVkaXRvci5pbml0aWFsaXplZCAmJiBzZWxlY3Rpb24gJiYgIXNob3VsZERpc2FibGVOb2RlQ2hhbmdlKHRoaXMuZWRpdG9yKSAmJiAhdGhpcy5lZGl0b3IubW9kZS5pc1JlYWRPbmx5KCkpIHtcbiAgICAgICAgICBjb25zdCByb290ID0gdGhpcy5lZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgICAgIG5vZGUgPSBzZWxlY3Rpb24uZ2V0U3RhcnQodHJ1ZSkgfHwgcm9vdDtcbiAgICAgICAgICBpZiAobm9kZS5vd25lckRvY3VtZW50ICE9PSB0aGlzLmVkaXRvci5nZXREb2MoKSB8fCAhdGhpcy5lZGl0b3IuZG9tLmlzQ2hpbGRPZihub2RlLCByb290KSkge1xuICAgICAgICAgICAgbm9kZSA9IHJvb3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcbiAgICAgICAgICB0aGlzLmVkaXRvci5kb20uZ2V0UGFyZW50KG5vZGUsIG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKG5vZGUgPT09IHJvb3QpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmVkaXRvci5kaXNwYXRjaCgnTm9kZUNoYW5nZScsIHtcbiAgICAgICAgICAgIC4uLmFyZ3MsXG4gICAgICAgICAgICBlbGVtZW50OiBub2RlLFxuICAgICAgICAgICAgcGFyZW50c1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpc1NhbWVFbGVtZW50UGF0aChzdGFydEVsbSkge1xuICAgICAgICBsZXQgaTtcbiAgICAgICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYXRoID0gcmV2ZXJzZShlZGl0b3IuZG9tLmdldFBhcmVudHMoc3RhcnRFbG0sIGFsd2F5cywgZWRpdG9yLmdldEJvZHkoKSkpO1xuICAgICAgICBpZiAoY3VycmVudFBhdGgubGVuZ3RoID09PSB0aGlzLmxhc3RQYXRoLmxlbmd0aCkge1xuICAgICAgICAgIGZvciAoaSA9IGN1cnJlbnRQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UGF0aFtpXSAhPT0gdGhpcy5sYXN0UGF0aFtpXSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGkgPT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RQYXRoID0gY3VycmVudFBhdGg7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sYXN0UGF0aCA9IGN1cnJlbnRQYXRoO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaW1hZ2VJZCA9IGdlbmVyYXRlJDEoJ2ltYWdlJyk7XG4gICAgY29uc3QgZ2V0RHJhZ0ltYWdlID0gdHJhbnNmZXIgPT4ge1xuICAgICAgY29uc3QgZHQgPSB0cmFuc2ZlcjtcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKGR0W2ltYWdlSWRdKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldERyYWdJbWFnZSA9ICh0cmFuc2ZlciwgaW1hZ2VEYXRhKSA9PiB7XG4gICAgICBjb25zdCBkdCA9IHRyYW5zZmVyO1xuICAgICAgZHRbaW1hZ2VJZF0gPSBpbWFnZURhdGE7XG4gICAgfTtcblxuICAgIGNvbnN0IGV2ZW50SWQgPSBnZW5lcmF0ZSQxKCdldmVudCcpO1xuICAgIGNvbnN0IGdldEV2ZW50ID0gdHJhbnNmZXIgPT4ge1xuICAgICAgY29uc3QgZHQgPSB0cmFuc2ZlcjtcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKGR0W2V2ZW50SWRdKTtcbiAgICB9O1xuICAgIGNvbnN0IG1rU2V0RXZlbnRGbiA9IHR5cGUgPT4gdHJhbnNmZXIgPT4ge1xuICAgICAgY29uc3QgZHQgPSB0cmFuc2ZlcjtcbiAgICAgIGR0W2V2ZW50SWRdID0gdHlwZTtcbiAgICB9O1xuICAgIGNvbnN0IHNldEV2ZW50ID0gKHRyYW5zZmVyLCB0eXBlKSA9PiBta1NldEV2ZW50Rm4odHlwZSkodHJhbnNmZXIpO1xuICAgIGNvbnN0IHNldERyYWdzdGFydEV2ZW50ID0gbWtTZXRFdmVudEZuKDApO1xuICAgIGNvbnN0IHNldERyb3BFdmVudCA9IG1rU2V0RXZlbnRGbigyKTtcbiAgICBjb25zdCBzZXREcmFnZW5kRXZlbnQgPSBta1NldEV2ZW50Rm4oMSk7XG4gICAgY29uc3QgY2hlY2tFdmVudCA9IGV4cGVjdGVkVHlwZSA9PiB0cmFuc2ZlciA9PiB7XG4gICAgICBjb25zdCBkdCA9IHRyYW5zZmVyO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oZHRbZXZlbnRJZF0pLmV4aXN0cyh0eXBlID0+IHR5cGUgPT09IGV4cGVjdGVkVHlwZSk7XG4gICAgfTtcbiAgICBjb25zdCBpc0luRHJhZ1N0YXJ0RXZlbnQgPSBjaGVja0V2ZW50KDApO1xuXG4gICAgY29uc3QgY3JlYXRlRW1wdHlGaWxlTGlzdCA9ICgpID0+IE9iamVjdC5mcmVlemUoe1xuICAgICAgbGVuZ3RoOiAwLFxuICAgICAgaXRlbTogXyA9PiBudWxsXG4gICAgfSk7XG5cbiAgICBjb25zdCBtb2RlSWQgPSBnZW5lcmF0ZSQxKCdtb2RlJyk7XG4gICAgY29uc3QgZ2V0TW9kZSA9IHRyYW5zZmVyID0+IHtcbiAgICAgIGNvbnN0IGR0ID0gdHJhbnNmZXI7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShkdFttb2RlSWRdKTtcbiAgICB9O1xuICAgIGNvbnN0IG1rU2V0TW9kZUZuID0gbW9kZSA9PiB0cmFuc2ZlciA9PiB7XG4gICAgICBjb25zdCBkdCA9IHRyYW5zZmVyO1xuICAgICAgZHRbbW9kZUlkXSA9IG1vZGU7XG4gICAgfTtcbiAgICBjb25zdCBzZXRNb2RlJDEgPSAodHJhbnNmZXIsIG1vZGUpID0+IG1rU2V0TW9kZUZuKG1vZGUpKHRyYW5zZmVyKTtcbiAgICBjb25zdCBzZXRSZWFkV3JpdGVNb2RlID0gbWtTZXRNb2RlRm4oMCk7XG4gICAgY29uc3Qgc2V0UmVhZE9ubHlNb2RlID0gbWtTZXRNb2RlRm4oMik7XG4gICAgY29uc3Qgc2V0UHJvdGVjdGVkTW9kZSA9IG1rU2V0TW9kZUZuKDEpO1xuICAgIGNvbnN0IGNoZWNrTW9kZSA9IGV4cGVjdGVkTW9kZSA9PiB0cmFuc2ZlciA9PiB7XG4gICAgICBjb25zdCBkdCA9IHRyYW5zZmVyO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oZHRbbW9kZUlkXSkuZXhpc3RzKG1vZGUgPT4gbW9kZSA9PT0gZXhwZWN0ZWRNb2RlKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzSW5SZWFkV3JpdGVNb2RlID0gY2hlY2tNb2RlKDApO1xuICAgIGNvbnN0IGlzSW5Qcm90ZWN0ZWRNb2RlID0gY2hlY2tNb2RlKDEpO1xuXG4gICAgY29uc3Qgbm9ybWFsaXplSXRlbXMgPSAoZGF0YVRyYW5zZmVyLCBpdGVtc0ltcGwpID0+ICh7XG4gICAgICAuLi5pdGVtc0ltcGwsXG4gICAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gaXRlbXNJbXBsLmxlbmd0aDtcbiAgICAgIH0sXG4gICAgICBhZGQ6IChkYXRhLCB0eXBlKSA9PiB7XG4gICAgICAgIGlmIChpc0luUmVhZFdyaXRlTW9kZShkYXRhVHJhbnNmZXIpKSB7XG4gICAgICAgICAgaWYgKGlzU3RyaW5nKGRhdGEpKSB7XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHR5cGUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBpdGVtc0ltcGwuYWRkKGRhdGEsIHR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXNJbXBsLmFkZChkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlOiBpZHggPT4ge1xuICAgICAgICBpZiAoaXNJblJlYWRXcml0ZU1vZGUoZGF0YVRyYW5zZmVyKSkge1xuICAgICAgICAgIGl0ZW1zSW1wbC5yZW1vdmUoaWR4KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICAgIGlmIChpc0luUmVhZFdyaXRlTW9kZShkYXRhVHJhbnNmZXIpKSB7XG4gICAgICAgICAgaXRlbXNJbXBsLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHZhbGlkRHJvcEVmZmVjdHMgPSBbXG4gICAgICAnbm9uZScsXG4gICAgICAnY29weScsXG4gICAgICAnbGluaycsXG4gICAgICAnbW92ZSdcbiAgICBdO1xuICAgIGNvbnN0IHZhbGlkRWZmZWN0QWxsb3dlZHMgPSBbXG4gICAgICAnbm9uZScsXG4gICAgICAnY29weScsXG4gICAgICAnY29weUxpbmsnLFxuICAgICAgJ2NvcHlNb3ZlJyxcbiAgICAgICdsaW5rJyxcbiAgICAgICdsaW5rTW92ZScsXG4gICAgICAnbW92ZScsXG4gICAgICAnYWxsJyxcbiAgICAgICd1bmluaXRpYWxpemVkJ1xuICAgIF07XG4gICAgY29uc3QgY3JlYXRlRGF0YVRyYW5zZmVyID0gKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YVRyYW5zZmVySW1wbCA9IG5ldyB3aW5kb3cuRGF0YVRyYW5zZmVyKCk7XG4gICAgICBsZXQgZHJvcEVmZmVjdCA9ICdtb3ZlJztcbiAgICAgIGxldCBlZmZlY3RBbGxvd2VkID0gJ2FsbCc7XG4gICAgICBjb25zdCBkYXRhVHJhbnNmZXIgPSB7XG4gICAgICAgIGdldCBkcm9wRWZmZWN0KCkge1xuICAgICAgICAgIHJldHVybiBkcm9wRWZmZWN0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQgZHJvcEVmZmVjdChlZmZlY3QpIHtcbiAgICAgICAgICBpZiAoY29udGFpbnMkMih2YWxpZERyb3BFZmZlY3RzLCBlZmZlY3QpKSB7XG4gICAgICAgICAgICBkcm9wRWZmZWN0ID0gZWZmZWN0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGVmZmVjdEFsbG93ZWQoKSB7XG4gICAgICAgICAgcmV0dXJuIGVmZmVjdEFsbG93ZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldCBlZmZlY3RBbGxvd2VkKGFsbG93ZWQpIHtcbiAgICAgICAgICBpZiAoaXNJbkRyYWdTdGFydEV2ZW50KGRhdGFUcmFuc2ZlcikgJiYgY29udGFpbnMkMih2YWxpZEVmZmVjdEFsbG93ZWRzLCBhbGxvd2VkKSkge1xuICAgICAgICAgICAgZWZmZWN0QWxsb3dlZCA9IGFsbG93ZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXQgaXRlbXMoKSB7XG4gICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZUl0ZW1zKGRhdGFUcmFuc2ZlciwgZGF0YVRyYW5zZmVySW1wbC5pdGVtcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBmaWxlcygpIHtcbiAgICAgICAgICBpZiAoaXNJblByb3RlY3RlZE1vZGUoZGF0YVRyYW5zZmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5RmlsZUxpc3QoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGFUcmFuc2ZlckltcGwuZmlsZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXQgdHlwZXMoKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGFUcmFuc2ZlckltcGwudHlwZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldERyYWdJbWFnZTogKGltYWdlLCB4LCB5KSA9PiB7XG4gICAgICAgICAgaWYgKGlzSW5SZWFkV3JpdGVNb2RlKGRhdGFUcmFuc2ZlcikpIHtcbiAgICAgICAgICAgIHNldERyYWdJbWFnZShkYXRhVHJhbnNmZXIsIHtcbiAgICAgICAgICAgICAgaW1hZ2UsXG4gICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgIHlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGF0YVRyYW5zZmVySW1wbC5zZXREcmFnSW1hZ2UoaW1hZ2UsIHgsIHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2V0RGF0YTogZm9ybWF0ID0+IHtcbiAgICAgICAgICBpZiAoaXNJblByb3RlY3RlZE1vZGUoZGF0YVRyYW5zZmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YVRyYW5zZmVySW1wbC5nZXREYXRhKGZvcm1hdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzZXREYXRhOiAoZm9ybWF0LCBkYXRhKSA9PiB7XG4gICAgICAgICAgaWYgKGlzSW5SZWFkV3JpdGVNb2RlKGRhdGFUcmFuc2ZlcikpIHtcbiAgICAgICAgICAgIGRhdGFUcmFuc2ZlckltcGwuc2V0RGF0YShmb3JtYXQsIGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJEYXRhOiBmb3JtYXQgPT4ge1xuICAgICAgICAgIGlmIChpc0luUmVhZFdyaXRlTW9kZShkYXRhVHJhbnNmZXIpKSB7XG4gICAgICAgICAgICBkYXRhVHJhbnNmZXJJbXBsLmNsZWFyRGF0YShmb3JtYXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNldFJlYWRXcml0ZU1vZGUoZGF0YVRyYW5zZmVyKTtcbiAgICAgIHJldHVybiBkYXRhVHJhbnNmZXI7XG4gICAgfTtcbiAgICBjb25zdCBjbG9uZURhdGFUcmFuc2ZlciA9IG9yaWdpbmFsID0+IHtcbiAgICAgIGNvbnN0IGNsb25lID0gY3JlYXRlRGF0YVRyYW5zZmVyKCk7XG4gICAgICBjb25zdCBvcmlnaW5hbE1vZGUgPSBnZXRNb2RlKG9yaWdpbmFsKTtcbiAgICAgIHNldFJlYWRPbmx5TW9kZShvcmlnaW5hbCk7XG4gICAgICBzZXREcmFnc3RhcnRFdmVudChjbG9uZSk7XG4gICAgICBjbG9uZS5kcm9wRWZmZWN0ID0gb3JpZ2luYWwuZHJvcEVmZmVjdDtcbiAgICAgIGNsb25lLmVmZmVjdEFsbG93ZWQgPSBvcmlnaW5hbC5lZmZlY3RBbGxvd2VkO1xuICAgICAgZ2V0RHJhZ0ltYWdlKG9yaWdpbmFsKS5lYWNoKGltYWdlRGF0YSA9PiBjbG9uZS5zZXREcmFnSW1hZ2UoaW1hZ2VEYXRhLmltYWdlLCBpbWFnZURhdGEueCwgaW1hZ2VEYXRhLnkpKTtcbiAgICAgIGVhY2gkZShvcmlnaW5hbC50eXBlcywgdHlwZSA9PiB7XG4gICAgICAgIGlmICh0eXBlICE9PSAnRmlsZXMnKSB7XG4gICAgICAgICAgY2xvbmUuc2V0RGF0YSh0eXBlLCBvcmlnaW5hbC5nZXREYXRhKHR5cGUpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBlYWNoJGUob3JpZ2luYWwuZmlsZXMsIGZpbGUgPT4gY2xvbmUuaXRlbXMuYWRkKGZpbGUpKTtcbiAgICAgIGdldEV2ZW50KG9yaWdpbmFsKS5lYWNoKHR5cGUgPT4ge1xuICAgICAgICBzZXRFdmVudChjbG9uZSwgdHlwZSk7XG4gICAgICB9KTtcbiAgICAgIG9yaWdpbmFsTW9kZS5lYWNoKG1vZGUgPT4ge1xuICAgICAgICBzZXRNb2RlJDEob3JpZ2luYWwsIG1vZGUpO1xuICAgICAgICBzZXRNb2RlJDEoY2xvbmUsIG1vZGUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gY2xvbmU7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldEh0bWxEYXRhID0gZGF0YVRyYW5zZmVyID0+IHtcbiAgICAgIGNvbnN0IGh0bWwgPSBkYXRhVHJhbnNmZXIuZ2V0RGF0YSgndGV4dC9odG1sJyk7XG4gICAgICByZXR1cm4gaHRtbCA9PT0gJycgPyBPcHRpb25hbC5ub25lKCkgOiBPcHRpb25hbC5zb21lKGh0bWwpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0SHRtbERhdGEgPSAoZGF0YVRyYW5zZmVyLCBodG1sKSA9PiBkYXRhVHJhbnNmZXIuc2V0RGF0YSgndGV4dC9odG1sJywgaHRtbCk7XG5cbiAgICBjb25zdCBpbnRlcm5hbE1pbWVUeXBlID0gJ3gtdGlueW1jZS9odG1sJztcbiAgICBjb25zdCBpbnRlcm5hbEh0bWxNaW1lID0gY29uc3RhbnQoaW50ZXJuYWxNaW1lVHlwZSk7XG4gICAgY29uc3QgaW50ZXJuYWxNYXJrID0gJzwhLS0gJyArIGludGVybmFsTWltZVR5cGUgKyAnIC0tPic7XG4gICAgY29uc3QgbWFyayA9IGh0bWwgPT4gaW50ZXJuYWxNYXJrICsgaHRtbDtcbiAgICBjb25zdCB1bm1hcmsgPSBodG1sID0+IGh0bWwucmVwbGFjZShpbnRlcm5hbE1hcmssICcnKTtcbiAgICBjb25zdCBpc01hcmtlZCA9IGh0bWwgPT4gaHRtbC5pbmRleE9mKGludGVybmFsTWFyaykgIT09IC0xO1xuXG4gICAgY29uc3QgaXNQbGFpblRleHQgPSB0ZXh0ID0+IHtcbiAgICAgIHJldHVybiAhLzwoPzpcXC8/KD8hKD86ZGl2fHB8YnJ8c3Bhbik+KVxcdyt8KD86KD8hKD86c3BhbiBzdHlsZT1cIndoaXRlLXNwYWNlOlxccz9wcmU7P1wiPil8YnJcXHM/XFwvPikpXFx3K1xcc1tePl0rKT4vaS50ZXN0KHRleHQpO1xuICAgIH07XG4gICAgY29uc3Qgb3BlbkNvbnRhaW5lciA9IChyb290VGFnLCByb290QXR0cnMpID0+IHtcbiAgICAgIGxldCB0YWcgPSAnPCcgKyByb290VGFnO1xuICAgICAgY29uc3QgYXR0cnMgPSBtYXBUb0FycmF5KHJvb3RBdHRycywgKHZhbHVlLCBrZXkpID0+IGtleSArICc9XCInICsgRW50aXRpZXMuZW5jb2RlQWxsUmF3KHZhbHVlKSArICdcIicpO1xuICAgICAgaWYgKGF0dHJzLmxlbmd0aCkge1xuICAgICAgICB0YWcgKz0gJyAnICsgYXR0cnMuam9pbignICcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRhZyArICc+JztcbiAgICB9O1xuICAgIGNvbnN0IHRvQmxvY2tFbGVtZW50cyA9ICh0ZXh0LCByb290VGFnLCByb290QXR0cnMpID0+IHtcbiAgICAgIGNvbnN0IGJsb2NrcyA9IHRleHQuc3BsaXQoL1xcblxcbi8pO1xuICAgICAgY29uc3QgdGFnT3BlbiA9IG9wZW5Db250YWluZXIocm9vdFRhZywgcm9vdEF0dHJzKTtcbiAgICAgIGNvbnN0IHRhZ0Nsb3NlID0gJzwvJyArIHJvb3RUYWcgKyAnPic7XG4gICAgICBjb25zdCBwYXJhZ3JhcGhzID0gbWFwJDMoYmxvY2tzLCBwID0+IHtcbiAgICAgICAgcmV0dXJuIHAuc3BsaXQoL1xcbi8pLmpvaW4oJzxiciAvPicpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBzdGl0Y2ggPSBwID0+IHtcbiAgICAgICAgcmV0dXJuIHRhZ09wZW4gKyBwICsgdGFnQ2xvc2U7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHBhcmFncmFwaHMubGVuZ3RoID09PSAxID8gcGFyYWdyYXBoc1swXSA6IG1hcCQzKHBhcmFncmFwaHMsIHN0aXRjaCkuam9pbignJyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHBhc3RlQmluRGVmYXVsdENvbnRlbnQgPSAnJU1DRVBBU1RFQklOJSc7XG4gICAgY29uc3QgY3JlYXRlJDYgPSAoZWRpdG9yLCBsYXN0Um5nQ2VsbCkgPT4ge1xuICAgICAgY29uc3Qge2RvbSwgc2VsZWN0aW9ufSA9IGVkaXRvcjtcbiAgICAgIGNvbnN0IGJvZHkgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgbGFzdFJuZ0NlbGwuc2V0KHNlbGVjdGlvbi5nZXRSbmcoKSk7XG4gICAgICBjb25zdCBwYXN0ZUJpbkVsbSA9IGRvbS5hZGQoZWRpdG9yLmdldEJvZHkoKSwgJ2RpdicsIHtcbiAgICAgICAgJ2lkJzogJ21jZXBhc3RlYmluJyxcbiAgICAgICAgJ2NsYXNzJzogJ21jZS1wYXN0ZWJpbicsXG4gICAgICAgICdjb250ZW50RWRpdGFibGUnOiB0cnVlLFxuICAgICAgICAnZGF0YS1tY2UtYm9ndXMnOiAnYWxsJyxcbiAgICAgICAgJ3N0eWxlJzogJ3Bvc2l0aW9uOiBmaXhlZDsgdG9wOiA1MCU7IHdpZHRoOiAxMHB4OyBoZWlnaHQ6IDEwcHg7IG92ZXJmbG93OiBoaWRkZW47IG9wYWNpdHk6IDAnXG4gICAgICB9LCBwYXN0ZUJpbkRlZmF1bHRDb250ZW50KTtcbiAgICAgIGlmIChFbnYuYnJvd3Nlci5pc0ZpcmVmb3goKSkge1xuICAgICAgICBkb20uc2V0U3R5bGUocGFzdGVCaW5FbG0sICdsZWZ0JywgZG9tLmdldFN0eWxlKGJvZHksICdkaXJlY3Rpb24nLCB0cnVlKSA9PT0gJ3J0bCcgPyA2NTUzNSA6IC02NTUzNSk7XG4gICAgICB9XG4gICAgICBkb20uYmluZChwYXN0ZUJpbkVsbSwgJ2JlZm9yZWRlYWN0aXZhdGUgZm9jdXNpbiBmb2N1c291dCcsIGUgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfSk7XG4gICAgICBwYXN0ZUJpbkVsbS5mb2N1cygpO1xuICAgICAgc2VsZWN0aW9uLnNlbGVjdChwYXN0ZUJpbkVsbSwgdHJ1ZSk7XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmUgPSAoZWRpdG9yLCBsYXN0Um5nQ2VsbCkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGlmIChnZXRFbChlZGl0b3IpKSB7XG4gICAgICAgIGxldCBwYXN0ZUJpbkNsb25lO1xuICAgICAgICBjb25zdCBsYXN0Um5nID0gbGFzdFJuZ0NlbGwuZ2V0KCk7XG4gICAgICAgIHdoaWxlIChwYXN0ZUJpbkNsb25lID0gZ2V0RWwoZWRpdG9yKSkge1xuICAgICAgICAgIGRvbS5yZW1vdmUocGFzdGVCaW5DbG9uZSk7XG4gICAgICAgICAgZG9tLnVuYmluZChwYXN0ZUJpbkNsb25lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGFzdFJuZykge1xuICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKGxhc3RSbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsYXN0Um5nQ2VsbC5zZXQobnVsbCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRFbCA9IGVkaXRvciA9PiBlZGl0b3IuZG9tLmdldCgnbWNlcGFzdGViaW4nKTtcbiAgICBjb25zdCBpc1Bhc3RlQmluID0gZWxtID0+IGlzTm9uTnVsbGFibGUoZWxtKSAmJiBlbG0uaWQgPT09ICdtY2VwYXN0ZWJpbic7XG4gICAgY29uc3QgZ2V0SHRtbCA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgY29uc3QgY29weUFuZFJlbW92ZSA9ICh0b0VsbSwgZnJvbUVsbSkgPT4ge1xuICAgICAgICB0b0VsbS5hcHBlbmRDaGlsZChmcm9tRWxtKTtcbiAgICAgICAgZG9tLnJlbW92ZShmcm9tRWxtLCB0cnVlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBbcGFzdGVCaW5FbG0sIC4uLnBhc3RlQmluQ2xvbmVzXSA9IGZpbHRlciQ1KGVkaXRvci5nZXRCb2R5KCkuY2hpbGROb2RlcywgaXNQYXN0ZUJpbik7XG4gICAgICBlYWNoJGUocGFzdGVCaW5DbG9uZXMsIHBhc3RlQmluQ2xvbmUgPT4ge1xuICAgICAgICBjb3B5QW5kUmVtb3ZlKHBhc3RlQmluRWxtLCBwYXN0ZUJpbkNsb25lKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGlydHlXcmFwcGVycyA9IGRvbS5zZWxlY3QoJ2RpdltpZD1tY2VwYXN0ZWJpbl0nLCBwYXN0ZUJpbkVsbSk7XG4gICAgICBmb3IgKGxldCBpID0gZGlydHlXcmFwcGVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBjbGVhbldyYXBwZXIgPSBkb20uY3JlYXRlKCdkaXYnKTtcbiAgICAgICAgcGFzdGVCaW5FbG0uaW5zZXJ0QmVmb3JlKGNsZWFuV3JhcHBlciwgZGlydHlXcmFwcGVyc1tpXSk7XG4gICAgICAgIGNvcHlBbmRSZW1vdmUoY2xlYW5XcmFwcGVyLCBkaXJ0eVdyYXBwZXJzW2ldKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXN0ZUJpbkVsbSA/IHBhc3RlQmluRWxtLmlubmVySFRNTCA6ICcnO1xuICAgIH07XG4gICAgY29uc3QgaXNEZWZhdWx0UGFzdGVCaW5Db250ZW50ID0gY29udGVudCA9PiBjb250ZW50ID09PSBwYXN0ZUJpbkRlZmF1bHRDb250ZW50O1xuICAgIGNvbnN0IFBhc3RlQmluID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGxhc3RSbmcgPSBDZWxsKG51bGwpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3JlYXRlOiAoKSA9PiBjcmVhdGUkNihlZGl0b3IsIGxhc3RSbmcpLFxuICAgICAgICByZW1vdmU6ICgpID0+IHJlbW92ZShlZGl0b3IsIGxhc3RSbmcpLFxuICAgICAgICBnZXRFbDogKCkgPT4gZ2V0RWwoZWRpdG9yKSxcbiAgICAgICAgZ2V0SHRtbDogKCkgPT4gZ2V0SHRtbChlZGl0b3IpLFxuICAgICAgICBnZXRMYXN0Um5nOiBsYXN0Um5nLmdldFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmlsdGVyJDEgPSAoY29udGVudCwgaXRlbXMpID0+IHtcbiAgICAgIFRvb2xzLmVhY2goaXRlbXMsIHYgPT4ge1xuICAgICAgICBpZiAoaXMkNCh2LCBSZWdFeHApKSB7XG4gICAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSh2LCAnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSh2WzBdLCB2WzFdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9O1xuICAgIGNvbnN0IGlubmVyVGV4dCA9IGh0bWwgPT4ge1xuICAgICAgY29uc3Qgc2NoZW1hID0gU2NoZW1hKCk7XG4gICAgICBjb25zdCBkb21QYXJzZXIgPSBEb21QYXJzZXIoe30sIHNjaGVtYSk7XG4gICAgICBsZXQgdGV4dCA9ICcnO1xuICAgICAgY29uc3Qgdm9pZEVsZW1lbnRzID0gc2NoZW1hLmdldFZvaWRFbGVtZW50cygpO1xuICAgICAgY29uc3QgaWdub3JlRWxlbWVudHMgPSBUb29scy5tYWtlTWFwKCdzY3JpcHQgbm9zY3JpcHQgc3R5bGUgdGV4dGFyZWEgdmlkZW8gYXVkaW8gaWZyYW1lIG9iamVjdCcsICcgJyk7XG4gICAgICBjb25zdCBibG9ja0VsZW1lbnRzID0gc2NoZW1hLmdldEJsb2NrRWxlbWVudHMoKTtcbiAgICAgIGNvbnN0IHdhbGsgPSBub2RlID0+IHtcbiAgICAgICAgY29uc3QgbmFtZSA9IG5vZGUubmFtZSwgY3VycmVudE5vZGUgPSBub2RlO1xuICAgICAgICBpZiAobmFtZSA9PT0gJ2JyJykge1xuICAgICAgICAgIHRleHQgKz0gJ1xcbic7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lID09PSAnd2JyJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodm9pZEVsZW1lbnRzW25hbWVdKSB7XG4gICAgICAgICAgdGV4dCArPSAnICc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlnbm9yZUVsZW1lbnRzW25hbWVdKSB7XG4gICAgICAgICAgdGV4dCArPSAnICc7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnR5cGUgPT09IDMpIHtcbiAgICAgICAgICB0ZXh0ICs9IG5vZGUudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEobm9kZS5uYW1lIGluIHNjaGVtYS5nZXRWb2lkRWxlbWVudHMoKSkpIHtcbiAgICAgICAgICBsZXQgY3VycmVudE5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgaWYgKGN1cnJlbnROb2RlKSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIHdhbGsoY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgfSB3aGlsZSAoY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5uZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJsb2NrRWxlbWVudHNbbmFtZV0gJiYgY3VycmVudE5vZGUubmV4dCkge1xuICAgICAgICAgIHRleHQgKz0gJ1xcbic7XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICdwJykge1xuICAgICAgICAgICAgdGV4dCArPSAnXFxuJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBodG1sID0gZmlsdGVyJDEoaHRtbCwgWy88IVxcW1teXFxdXStcXF0+L2ddKTtcbiAgICAgIHdhbGsoZG9tUGFyc2VyLnBhcnNlKGh0bWwpKTtcbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH07XG4gICAgY29uc3QgdHJpbUh0bWwgPSBodG1sID0+IHtcbiAgICAgIGNvbnN0IHRyaW1TcGFjZXMgPSAoYWxsLCBzMSwgczIpID0+IHtcbiAgICAgICAgaWYgKCFzMSAmJiAhczIpIHtcbiAgICAgICAgICByZXR1cm4gJyAnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuYnNwO1xuICAgICAgfTtcbiAgICAgIGh0bWwgPSBmaWx0ZXIkMShodG1sLCBbXG4gICAgICAgIC9eW1xcc1xcU10qPGJvZHlbXj5dKj5cXHMqfFxccyo8XFwvYm9keVtePl0qPltcXHNcXFNdKiQvaWcsXG4gICAgICAgIC88IS0tU3RhcnRGcmFnbWVudC0tPnw8IS0tRW5kRnJhZ21lbnQtLT4vZyxcbiAgICAgICAgW1xuICAgICAgICAgIC8oID8pPHNwYW4gY2xhc3M9XCJBcHBsZS1jb252ZXJ0ZWQtc3BhY2VcIj5cXHUwMGEwPFxcL3NwYW4+KCA/KS9nLFxuICAgICAgICAgIHRyaW1TcGFjZXNcbiAgICAgICAgXSxcbiAgICAgICAgLzxiciBjbGFzcz1cIkFwcGxlLWludGVyY2hhbmdlLW5ld2xpbmVcIj4vZyxcbiAgICAgICAgLzxicj4kL2lcbiAgICAgIF0pO1xuICAgICAgcmV0dXJuIGh0bWw7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVJZEdlbmVyYXRvciA9IHByZWZpeCA9PiB7XG4gICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHByZWZpeCArIGNvdW50Kys7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZ2V0SW1hZ2VNaW1lVHlwZSA9IGV4dCA9PiB7XG4gICAgICBjb25zdCBsb3dlckV4dCA9IGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgbWltZU92ZXJyaWRlcyA9IHtcbiAgICAgICAganBnOiAnanBlZycsXG4gICAgICAgIGpwZTogJ2pwZWcnLFxuICAgICAgICBqZmk6ICdqcGVnJyxcbiAgICAgICAgamlmOiAnanBlZycsXG4gICAgICAgIGpmaWY6ICdqcGVnJyxcbiAgICAgICAgcGpwZWc6ICdqcGVnJyxcbiAgICAgICAgcGpwOiAnanBlZycsXG4gICAgICAgIHN2ZzogJ3N2Zyt4bWwnXG4gICAgICB9O1xuICAgICAgcmV0dXJuIFRvb2xzLmhhc093bihtaW1lT3ZlcnJpZGVzLCBsb3dlckV4dCkgPyAnaW1hZ2UvJyArIG1pbWVPdmVycmlkZXNbbG93ZXJFeHRdIDogJ2ltYWdlLycgKyBsb3dlckV4dDtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJlUHJvY2VzcyA9IChlZGl0b3IsIGh0bWwpID0+IHtcbiAgICAgIGNvbnN0IHBhcnNlciA9IERvbVBhcnNlcih7IHNhbml0aXplOiBzaG91bGRTYW5pdGl6ZVhzcyhlZGl0b3IpIH0sIGVkaXRvci5zY2hlbWEpO1xuICAgICAgcGFyc2VyLmFkZE5vZGVGaWx0ZXIoJ21ldGEnLCBub2RlcyA9PiB7XG4gICAgICAgIFRvb2xzLmVhY2gobm9kZXMsIG5vZGUgPT4ge1xuICAgICAgICAgIG5vZGUucmVtb3ZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBmcmFnbWVudCA9IHBhcnNlci5wYXJzZShodG1sLCB7XG4gICAgICAgIGZvcmNlZF9yb290X2Jsb2NrOiBmYWxzZSxcbiAgICAgICAgaXNSb290Q29udGVudDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gSHRtbFNlcmlhbGl6ZXIoeyB2YWxpZGF0ZTogdHJ1ZSB9LCBlZGl0b3Iuc2NoZW1hKS5zZXJpYWxpemUoZnJhZ21lbnQpO1xuICAgIH07XG4gICAgY29uc3QgcHJvY2Vzc1Jlc3VsdCA9IChjb250ZW50LCBjYW5jZWxsZWQpID0+ICh7XG4gICAgICBjb250ZW50LFxuICAgICAgY2FuY2VsbGVkXG4gICAgfSk7XG4gICAgY29uc3QgcG9zdFByb2Nlc3NGaWx0ZXIgPSAoZWRpdG9yLCBodG1sLCBpbnRlcm5hbCkgPT4ge1xuICAgICAgY29uc3QgdGVtcEJvZHkgPSBlZGl0b3IuZG9tLmNyZWF0ZSgnZGl2JywgeyBzdHlsZTogJ2Rpc3BsYXk6bm9uZScgfSwgaHRtbCk7XG4gICAgICBjb25zdCBwb3N0UHJvY2Vzc0FyZ3MgPSBmaXJlUGFzdGVQb3N0UHJvY2VzcyhlZGl0b3IsIHRlbXBCb2R5LCBpbnRlcm5hbCk7XG4gICAgICByZXR1cm4gcHJvY2Vzc1Jlc3VsdChwb3N0UHJvY2Vzc0FyZ3Mubm9kZS5pbm5lckhUTUwsIHBvc3RQcm9jZXNzQXJncy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSk7XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXJDb250ZW50ID0gKGVkaXRvciwgY29udGVudCwgaW50ZXJuYWwpID0+IHtcbiAgICAgIGNvbnN0IHByZVByb2Nlc3NBcmdzID0gZmlyZVBhc3RlUHJlUHJvY2VzcyhlZGl0b3IsIGNvbnRlbnQsIGludGVybmFsKTtcbiAgICAgIGNvbnN0IGZpbHRlcmVkQ29udGVudCA9IHByZVByb2Nlc3MoZWRpdG9yLCBwcmVQcm9jZXNzQXJncy5jb250ZW50KTtcbiAgICAgIGlmIChlZGl0b3IuaGFzRXZlbnRMaXN0ZW5lcnMoJ1Bhc3RlUG9zdFByb2Nlc3MnKSAmJiAhcHJlUHJvY2Vzc0FyZ3MuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuIHBvc3RQcm9jZXNzRmlsdGVyKGVkaXRvciwgZmlsdGVyZWRDb250ZW50LCBpbnRlcm5hbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcHJvY2Vzc1Jlc3VsdChmaWx0ZXJlZENvbnRlbnQsIHByZVByb2Nlc3NBcmdzLmlzRGVmYXVsdFByZXZlbnRlZCgpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHByb2Nlc3MgPSAoZWRpdG9yLCBodG1sLCBpbnRlcm5hbCkgPT4ge1xuICAgICAgcmV0dXJuIGZpbHRlckNvbnRlbnQoZWRpdG9yLCBodG1sLCBpbnRlcm5hbCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHBhc3RlSHRtbCQxID0gKGVkaXRvciwgaHRtbCkgPT4ge1xuICAgICAgZWRpdG9yLmluc2VydENvbnRlbnQoaHRtbCwge1xuICAgICAgICBtZXJnZTogc2hvdWxkUGFzdGVNZXJnZUZvcm1hdHMoZWRpdG9yKSxcbiAgICAgICAgcGFzdGU6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBpc0Fic29sdXRlVXJsID0gdXJsID0+IC9eaHR0cHM/OlxcL1xcL1tcXHdcXC1cXC8rPS4sITs6JiVAXn4oKXt9PyNdKyQvaS50ZXN0KHVybCk7XG4gICAgY29uc3QgaXNJbWFnZVVybCA9IChlZGl0b3IsIHVybCkgPT4ge1xuICAgICAgcmV0dXJuIGlzQWJzb2x1dGVVcmwodXJsKSAmJiBleGlzdHMoZ2V0QWxsb3dlZEltYWdlRmlsZVR5cGVzKGVkaXRvciksIHR5cGUgPT4gZW5kc1dpdGgodXJsLnRvTG93ZXJDYXNlKCksIGAuJHsgdHlwZS50b0xvd2VyQ2FzZSgpIH1gKSk7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVJbWFnZSA9IChlZGl0b3IsIHVybCwgcGFzdGVIdG1sRm4pID0+IHtcbiAgICAgIGVkaXRvci51bmRvTWFuYWdlci5leHRyYSgoKSA9PiB7XG4gICAgICAgIHBhc3RlSHRtbEZuKGVkaXRvciwgdXJsKTtcbiAgICAgIH0sICgpID0+IHtcbiAgICAgICAgZWRpdG9yLmluc2VydENvbnRlbnQoJzxpbWcgc3JjPVwiJyArIHVybCArICdcIj4nKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVMaW5rID0gKGVkaXRvciwgdXJsLCBwYXN0ZUh0bWxGbikgPT4ge1xuICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLmV4dHJhKCgpID0+IHtcbiAgICAgICAgcGFzdGVIdG1sRm4oZWRpdG9yLCB1cmwpO1xuICAgICAgfSwgKCkgPT4ge1xuICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZUluc2VydExpbmsnLCBmYWxzZSwgdXJsKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBsaW5rU2VsZWN0aW9uID0gKGVkaXRvciwgaHRtbCwgcGFzdGVIdG1sRm4pID0+ICFlZGl0b3Iuc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkgJiYgaXNBYnNvbHV0ZVVybChodG1sKSA/IGNyZWF0ZUxpbmsoZWRpdG9yLCBodG1sLCBwYXN0ZUh0bWxGbikgOiBmYWxzZTtcbiAgICBjb25zdCBpbnNlcnRJbWFnZSA9IChlZGl0b3IsIGh0bWwsIHBhc3RlSHRtbEZuKSA9PiBpc0ltYWdlVXJsKGVkaXRvciwgaHRtbCkgPyBjcmVhdGVJbWFnZShlZGl0b3IsIGh0bWwsIHBhc3RlSHRtbEZuKSA6IGZhbHNlO1xuICAgIGNvbnN0IHNtYXJ0SW5zZXJ0Q29udGVudCA9IChlZGl0b3IsIGh0bWwpID0+IHtcbiAgICAgIFRvb2xzLmVhY2goW1xuICAgICAgICBsaW5rU2VsZWN0aW9uLFxuICAgICAgICBpbnNlcnRJbWFnZSxcbiAgICAgICAgcGFzdGVIdG1sJDFcbiAgICAgIF0sIGFjdGlvbiA9PiB7XG4gICAgICAgIHJldHVybiAhYWN0aW9uKGVkaXRvciwgaHRtbCwgcGFzdGVIdG1sJDEpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnRDb250ZW50ID0gKGVkaXRvciwgaHRtbCwgcGFzdGVBc1RleHQpID0+IHtcbiAgICAgIGlmIChwYXN0ZUFzVGV4dCB8fCAhaXNTbWFydFBhc3RlRW5hYmxlZChlZGl0b3IpKSB7XG4gICAgICAgIHBhc3RlSHRtbCQxKGVkaXRvciwgaHRtbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbWFydEluc2VydENvbnRlbnQoZWRpdG9yLCBodG1sKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdW5pcXVlSWQgPSBjcmVhdGVJZEdlbmVyYXRvcignbWNlY2xpcCcpO1xuICAgIGNvbnN0IGNyZWF0ZVBhc3RlRGF0YVRyYW5zZmVyID0gaHRtbCA9PiB7XG4gICAgICBjb25zdCBkYXRhVHJhbnNmZXIgPSBjcmVhdGVEYXRhVHJhbnNmZXIoKTtcbiAgICAgIHNldEh0bWxEYXRhKGRhdGFUcmFuc2ZlciwgaHRtbCk7XG4gICAgICBzZXRSZWFkT25seU1vZGUoZGF0YVRyYW5zZmVyKTtcbiAgICAgIHJldHVybiBkYXRhVHJhbnNmZXI7XG4gICAgfTtcbiAgICBjb25zdCBkb1Bhc3RlID0gKGVkaXRvciwgY29udGVudCwgaW50ZXJuYWwsIHBhc3RlQXNUZXh0LCBzaG91bGRTaW11bGF0ZUlucHV0RXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IHByb2Nlc3MoZWRpdG9yLCBjb250ZW50LCBpbnRlcm5hbCk7XG4gICAgICBpZiAoIXJlcy5jYW5jZWxsZWQpIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IHJlcy5jb250ZW50O1xuICAgICAgICBjb25zdCBkb1Bhc3RlQWN0aW9uID0gKCkgPT4gaW5zZXJ0Q29udGVudChlZGl0b3IsIGNvbnRlbnQsIHBhc3RlQXNUZXh0KTtcbiAgICAgICAgaWYgKHNob3VsZFNpbXVsYXRlSW5wdXRFdmVudCkge1xuICAgICAgICAgIGNvbnN0IGFyZ3MgPSBmaXJlQmVmb3JlSW5wdXRFdmVudChlZGl0b3IsICdpbnNlcnRGcm9tUGFzdGUnLCB7IGRhdGFUcmFuc2ZlcjogY3JlYXRlUGFzdGVEYXRhVHJhbnNmZXIoY29udGVudCkgfSk7XG4gICAgICAgICAgaWYgKCFhcmdzLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgICBkb1Bhc3RlQWN0aW9uKCk7XG4gICAgICAgICAgICBmaXJlSW5wdXRFdmVudChlZGl0b3IsICdpbnNlcnRGcm9tUGFzdGUnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9QYXN0ZUFjdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBwYXN0ZUh0bWwgPSAoZWRpdG9yLCBodG1sLCBpbnRlcm5hbEZsYWcsIHNob3VsZFNpbXVsYXRlSW5wdXRFdmVudCkgPT4ge1xuICAgICAgY29uc3QgaW50ZXJuYWwgPSBpbnRlcm5hbEZsYWcgPyBpbnRlcm5hbEZsYWcgOiBpc01hcmtlZChodG1sKTtcbiAgICAgIGRvUGFzdGUoZWRpdG9yLCB1bm1hcmsoaHRtbCksIGludGVybmFsLCBmYWxzZSwgc2hvdWxkU2ltdWxhdGVJbnB1dEV2ZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IHBhc3RlVGV4dCA9IChlZGl0b3IsIHRleHQsIHNob3VsZFNpbXVsYXRlSW5wdXRFdmVudCkgPT4ge1xuICAgICAgY29uc3QgZW5jb2RlZFRleHQgPSBlZGl0b3IuZG9tLmVuY29kZSh0ZXh0KS5yZXBsYWNlKC9cXHJcXG4vZywgJ1xcbicpO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFRleHQgPSBub3JtYWxpemUkNChlbmNvZGVkVGV4dCwgZ2V0UGFzdGVUYWJTcGFjZXMoZWRpdG9yKSk7XG4gICAgICBjb25zdCBodG1sID0gdG9CbG9ja0VsZW1lbnRzKG5vcm1hbGl6ZWRUZXh0LCBnZXRGb3JjZWRSb290QmxvY2soZWRpdG9yKSwgZ2V0Rm9yY2VkUm9vdEJsb2NrQXR0cnMoZWRpdG9yKSk7XG4gICAgICBkb1Bhc3RlKGVkaXRvciwgaHRtbCwgZmFsc2UsIHRydWUsIHNob3VsZFNpbXVsYXRlSW5wdXRFdmVudCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXREYXRhVHJhbnNmZXJJdGVtcyA9IGRhdGFUcmFuc2ZlciA9PiB7XG4gICAgICBjb25zdCBpdGVtcyA9IHt9O1xuICAgICAgaWYgKGRhdGFUcmFuc2ZlciAmJiBkYXRhVHJhbnNmZXIudHlwZXMpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhVHJhbnNmZXIudHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IGRhdGFUcmFuc2Zlci50eXBlc1tpXTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaXRlbXNbY29udGVudFR5cGVdID0gZGF0YVRyYW5zZmVyLmdldERhdGEoY29udGVudFR5cGUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICBpdGVtc1tjb250ZW50VHlwZV0gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVtcztcbiAgICB9O1xuICAgIGNvbnN0IGhhc0NvbnRlbnRUeXBlID0gKGNsaXBib2FyZENvbnRlbnQsIG1pbWVUeXBlKSA9PiBtaW1lVHlwZSBpbiBjbGlwYm9hcmRDb250ZW50ICYmIGNsaXBib2FyZENvbnRlbnRbbWltZVR5cGVdLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgaGFzSHRtbE9yVGV4dCA9IGNvbnRlbnQgPT4gaGFzQ29udGVudFR5cGUoY29udGVudCwgJ3RleHQvaHRtbCcpIHx8IGhhc0NvbnRlbnRUeXBlKGNvbnRlbnQsICd0ZXh0L3BsYWluJyk7XG4gICAgY29uc3QgZXh0cmFjdEZpbGVuYW1lID0gKGVkaXRvciwgc3RyKSA9PiB7XG4gICAgICBjb25zdCBtID0gc3RyLm1hdGNoKC8oW1xcc1xcU10rPykoPzpcXC5bYS16MC05Ll0rKSQvaSk7XG4gICAgICByZXR1cm4gaXNOb25OdWxsYWJsZShtKSA/IGVkaXRvci5kb20uZW5jb2RlKG1bMV0pIDogdW5kZWZpbmVkO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlQmxvYkluZm8gPSAoZWRpdG9yLCBibG9iQ2FjaGUsIGZpbGUsIGJhc2U2NCkgPT4ge1xuICAgICAgY29uc3QgaWQgPSB1bmlxdWVJZCgpO1xuICAgICAgY29uc3QgdXNlRmlsZU5hbWUgPSBzaG91bGRSZXVzZUZpbGVOYW1lKGVkaXRvcikgJiYgaXNOb25OdWxsYWJsZShmaWxlLm5hbWUpO1xuICAgICAgY29uc3QgbmFtZSA9IHVzZUZpbGVOYW1lID8gZXh0cmFjdEZpbGVuYW1lKGVkaXRvciwgZmlsZS5uYW1lKSA6IGlkO1xuICAgICAgY29uc3QgZmlsZW5hbWUgPSB1c2VGaWxlTmFtZSA/IGZpbGUubmFtZSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGJsb2JJbmZvID0gYmxvYkNhY2hlLmNyZWF0ZShpZCwgZmlsZSwgYmFzZTY0LCBuYW1lLCBmaWxlbmFtZSk7XG4gICAgICBibG9iQ2FjaGUuYWRkKGJsb2JJbmZvKTtcbiAgICAgIHJldHVybiBibG9iSW5mbztcbiAgICB9O1xuICAgIGNvbnN0IHBhc3RlSW1hZ2UgPSAoZWRpdG9yLCBpbWFnZUl0ZW0pID0+IHtcbiAgICAgIHBhcnNlRGF0YVVyaShpbWFnZUl0ZW0udXJpKS5lYWNoKCh7ZGF0YSwgdHlwZSwgYmFzZTY0RW5jb2RlZH0pID0+IHtcbiAgICAgICAgY29uc3QgYmFzZTY0ID0gYmFzZTY0RW5jb2RlZCA/IGRhdGEgOiBidG9hKGRhdGEpO1xuICAgICAgICBjb25zdCBmaWxlID0gaW1hZ2VJdGVtLmZpbGU7XG4gICAgICAgIGNvbnN0IGJsb2JDYWNoZSA9IGVkaXRvci5lZGl0b3JVcGxvYWQuYmxvYkNhY2hlO1xuICAgICAgICBjb25zdCBleGlzdGluZ0Jsb2JJbmZvID0gYmxvYkNhY2hlLmdldEJ5RGF0YShiYXNlNjQsIHR5cGUpO1xuICAgICAgICBjb25zdCBibG9iSW5mbyA9IGV4aXN0aW5nQmxvYkluZm8gIT09IG51bGwgJiYgZXhpc3RpbmdCbG9iSW5mbyAhPT0gdm9pZCAwID8gZXhpc3RpbmdCbG9iSW5mbyA6IGNyZWF0ZUJsb2JJbmZvKGVkaXRvciwgYmxvYkNhY2hlLCBmaWxlLCBiYXNlNjQpO1xuICAgICAgICBwYXN0ZUh0bWwoZWRpdG9yLCBgPGltZyBzcmM9XCIkeyBibG9iSW5mby5ibG9iVXJpKCkgfVwiPmAsIGZhbHNlLCB0cnVlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaXNDbGlwYm9hcmRFdmVudCA9IGV2ZW50ID0+IGV2ZW50LnR5cGUgPT09ICdwYXN0ZSc7XG4gICAgY29uc3QgcmVhZEZpbGVzQXNEYXRhVXJpcyA9IGl0ZW1zID0+IFByb21pc2UuYWxsKG1hcCQzKGl0ZW1zLCBmaWxlID0+IHtcbiAgICAgIHJldHVybiBibG9iVG9EYXRhVXJpKGZpbGUpLnRoZW4odXJpID0+ICh7XG4gICAgICAgIGZpbGUsXG4gICAgICAgIHVyaVxuICAgICAgfSkpO1xuICAgIH0pKTtcbiAgICBjb25zdCBpc0ltYWdlID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGFsbG93ZWRFeHRlbnNpb25zID0gZ2V0QWxsb3dlZEltYWdlRmlsZVR5cGVzKGVkaXRvcik7XG4gICAgICByZXR1cm4gZmlsZSA9PiBzdGFydHNXaXRoKGZpbGUudHlwZSwgJ2ltYWdlLycpICYmIGV4aXN0cyhhbGxvd2VkRXh0ZW5zaW9ucywgZXh0ZW5zaW9uID0+IHtcbiAgICAgICAgcmV0dXJuIGdldEltYWdlTWltZVR5cGUoZXh0ZW5zaW9uKSA9PT0gZmlsZS50eXBlO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRJbWFnZXNGcm9tRGF0YVRyYW5zZmVyID0gKGVkaXRvciwgZGF0YVRyYW5zZmVyKSA9PiB7XG4gICAgICBjb25zdCBpdGVtcyA9IGRhdGFUcmFuc2Zlci5pdGVtcyA/IGJpbmQkMyhmcm9tKGRhdGFUcmFuc2Zlci5pdGVtcyksIGl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS5raW5kID09PSAnZmlsZScgPyBbaXRlbS5nZXRBc0ZpbGUoKV0gOiBbXTtcbiAgICAgIH0pIDogW107XG4gICAgICBjb25zdCBmaWxlcyA9IGRhdGFUcmFuc2Zlci5maWxlcyA/IGZyb20oZGF0YVRyYW5zZmVyLmZpbGVzKSA6IFtdO1xuICAgICAgcmV0dXJuIGZpbHRlciQ1KGl0ZW1zLmxlbmd0aCA+IDAgPyBpdGVtcyA6IGZpbGVzLCBpc0ltYWdlKGVkaXRvcikpO1xuICAgIH07XG4gICAgY29uc3QgcGFzdGVJbWFnZURhdGEgPSAoZWRpdG9yLCBlLCBybmcpID0+IHtcbiAgICAgIGNvbnN0IGRhdGFUcmFuc2ZlciA9IGlzQ2xpcGJvYXJkRXZlbnQoZSkgPyBlLmNsaXBib2FyZERhdGEgOiBlLmRhdGFUcmFuc2ZlcjtcbiAgICAgIGlmIChzaG91bGRQYXN0ZURhdGFJbWFnZXMoZWRpdG9yKSAmJiBkYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgY29uc3QgaW1hZ2VzID0gZ2V0SW1hZ2VzRnJvbURhdGFUcmFuc2ZlcihlZGl0b3IsIGRhdGFUcmFuc2Zlcik7XG4gICAgICAgIGlmIChpbWFnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICByZWFkRmlsZXNBc0RhdGFVcmlzKGltYWdlcykudGhlbihmaWxlUmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBpZiAocm5nKSB7XG4gICAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlYWNoJGUoZmlsZVJlc3VsdHMsIHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgIHBhc3RlSW1hZ2UoZWRpdG9yLCByZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQnJva2VuQW5kcm9pZENsaXBib2FyZEV2ZW50ID0gZSA9PiB7XG4gICAgICB2YXIgX2EsIF9iO1xuICAgICAgcmV0dXJuIEVudi5vcy5pc0FuZHJvaWQoKSAmJiAoKF9iID0gKF9hID0gZS5jbGlwYm9hcmREYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaXRlbXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5sZW5ndGgpID09PSAwO1xuICAgIH07XG4gICAgY29uc3QgaXNLZXlib2FyZFBhc3RlRXZlbnQgPSBlID0+IFZLLm1ldGFLZXlQcmVzc2VkKGUpICYmIGUua2V5Q29kZSA9PT0gODYgfHwgZS5zaGlmdEtleSAmJiBlLmtleUNvZGUgPT09IDQ1O1xuICAgIGNvbnN0IGluc2VydENsaXBib2FyZENvbnRlbnQgPSAoZWRpdG9yLCBjbGlwYm9hcmRDb250ZW50LCBodG1sLCBwbGFpblRleHRNb2RlLCBzaG91bGRTaW11bGF0ZUlucHV0RXZlbnQpID0+IHtcbiAgICAgIGxldCBjb250ZW50ID0gdHJpbUh0bWwoaHRtbCk7XG4gICAgICBjb25zdCBpc0ludGVybmFsID0gaGFzQ29udGVudFR5cGUoY2xpcGJvYXJkQ29udGVudCwgaW50ZXJuYWxIdG1sTWltZSgpKSB8fCBpc01hcmtlZChodG1sKTtcbiAgICAgIGNvbnN0IGlzUGxhaW5UZXh0SHRtbCA9ICFpc0ludGVybmFsICYmIGlzUGxhaW5UZXh0KGNvbnRlbnQpO1xuICAgICAgY29uc3QgaXNBYnNvbHV0ZVVybCQxID0gaXNBYnNvbHV0ZVVybChjb250ZW50KTtcbiAgICAgIGlmIChpc0RlZmF1bHRQYXN0ZUJpbkNvbnRlbnQoY29udGVudCkgfHwgIWNvbnRlbnQubGVuZ3RoIHx8IGlzUGxhaW5UZXh0SHRtbCAmJiAhaXNBYnNvbHV0ZVVybCQxKSB7XG4gICAgICAgIHBsYWluVGV4dE1vZGUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHBsYWluVGV4dE1vZGUgfHwgaXNBYnNvbHV0ZVVybCQxKSB7XG4gICAgICAgIGlmIChoYXNDb250ZW50VHlwZShjbGlwYm9hcmRDb250ZW50LCAndGV4dC9wbGFpbicpICYmIGlzUGxhaW5UZXh0SHRtbCkge1xuICAgICAgICAgIGNvbnRlbnQgPSBjbGlwYm9hcmRDb250ZW50Wyd0ZXh0L3BsYWluJ107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGVudCA9IGlubmVyVGV4dChjb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzRGVmYXVsdFBhc3RlQmluQ29udGVudChjb250ZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocGxhaW5UZXh0TW9kZSkge1xuICAgICAgICBwYXN0ZVRleHQoZWRpdG9yLCBjb250ZW50LCBzaG91bGRTaW11bGF0ZUlucHV0RXZlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFzdGVIdG1sKGVkaXRvciwgY29udGVudCwgaXNJbnRlcm5hbCwgc2hvdWxkU2ltdWxhdGVJbnB1dEV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyRXZlbnRIYW5kbGVycyA9IChlZGl0b3IsIHBhc3RlQmluLCBwYXN0ZUZvcm1hdCkgPT4ge1xuICAgICAgbGV0IGtleWJvYXJkUGFzdGVQbGFpblRleHRTdGF0ZTtcbiAgICAgIGNvbnN0IGdldExhc3RSbmcgPSAoKSA9PiBwYXN0ZUJpbi5nZXRMYXN0Um5nKCkgfHwgZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIGVkaXRvci5vbigna2V5ZG93bicsIGUgPT4ge1xuICAgICAgICBpZiAoaXNLZXlib2FyZFBhc3RlRXZlbnQoZSkgJiYgIWUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICBrZXlib2FyZFBhc3RlUGxhaW5UZXh0U3RhdGUgPSBlLnNoaWZ0S2V5ICYmIGUua2V5Q29kZSA9PT0gODY7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdwYXN0ZScsIGUgPT4ge1xuICAgICAgICBpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSB8fCBpc0Jyb2tlbkFuZHJvaWRDbGlwYm9hcmRFdmVudChlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwbGFpblRleHRNb2RlID0gcGFzdGVGb3JtYXQuZ2V0KCkgPT09ICd0ZXh0JyB8fCBrZXlib2FyZFBhc3RlUGxhaW5UZXh0U3RhdGU7XG4gICAgICAgIGtleWJvYXJkUGFzdGVQbGFpblRleHRTdGF0ZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjbGlwYm9hcmRDb250ZW50ID0gZ2V0RGF0YVRyYW5zZmVySXRlbXMoZS5jbGlwYm9hcmREYXRhKTtcbiAgICAgICAgaWYgKCFoYXNIdG1sT3JUZXh0KGNsaXBib2FyZENvbnRlbnQpICYmIHBhc3RlSW1hZ2VEYXRhKGVkaXRvciwgZSwgZ2V0TGFzdFJuZygpKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzQ29udGVudFR5cGUoY2xpcGJvYXJkQ29udGVudCwgJ3RleHQvaHRtbCcpKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGluc2VydENsaXBib2FyZENvbnRlbnQoZWRpdG9yLCBjbGlwYm9hcmRDb250ZW50LCBjbGlwYm9hcmRDb250ZW50Wyd0ZXh0L2h0bWwnXSwgcGxhaW5UZXh0TW9kZSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFzQ29udGVudFR5cGUoY2xpcGJvYXJkQ29udGVudCwgJ3RleHQvcGxhaW4nKSAmJiBoYXNDb250ZW50VHlwZShjbGlwYm9hcmRDb250ZW50LCAndGV4dC91cmktbGlzdCcpKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGluc2VydENsaXBib2FyZENvbnRlbnQoZWRpdG9yLCBjbGlwYm9hcmRDb250ZW50LCBjbGlwYm9hcmRDb250ZW50Wyd0ZXh0L3BsYWluJ10sIHBsYWluVGV4dE1vZGUsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhc3RlQmluLmNyZWF0ZSgpO1xuICAgICAgICAgIERlbGF5LnNldEVkaXRvclRpbWVvdXQoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBodG1sID0gcGFzdGVCaW4uZ2V0SHRtbCgpO1xuICAgICAgICAgICAgcGFzdGVCaW4ucmVtb3ZlKCk7XG4gICAgICAgICAgICBpbnNlcnRDbGlwYm9hcmRDb250ZW50KGVkaXRvciwgY2xpcGJvYXJkQ29udGVudCwgaHRtbCwgcGxhaW5UZXh0TW9kZSwgZmFsc2UpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyRGF0YUltYWdlRmlsdGVyID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGlzV2ViS2l0RmFrZVVybCA9IHNyYyA9PiBzdGFydHNXaXRoKHNyYywgJ3dlYmtpdC1mYWtlLXVybCcpO1xuICAgICAgY29uc3QgaXNEYXRhVXJpID0gc3JjID0+IHN0YXJ0c1dpdGgoc3JjLCAnZGF0YTonKTtcbiAgICAgIGNvbnN0IGlzUGFzdGVJbnNlcnQgPSBhcmdzID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKChfYSA9IGFyZ3MuZGF0YSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnBhc3RlKSA9PT0gdHJ1ZTtcbiAgICAgIH07XG4gICAgICBlZGl0b3IucGFyc2VyLmFkZE5vZGVGaWx0ZXIoJ2ltZycsIChub2RlcywgbmFtZSwgYXJncykgPT4ge1xuICAgICAgICBpZiAoIXNob3VsZFBhc3RlRGF0YUltYWdlcyhlZGl0b3IpICYmIGlzUGFzdGVJbnNlcnQoYXJncykpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IG5vZGUuYXR0cignc3JjJyk7XG4gICAgICAgICAgICBpZiAoaXNTdHJpbmcoc3JjKSAmJiAhbm9kZS5hdHRyKCdkYXRhLW1jZS1vYmplY3QnKSAmJiBzcmMgIT09IEVudi50cmFuc3BhcmVudFNyYykge1xuICAgICAgICAgICAgICBpZiAoaXNXZWJLaXRGYWtlVXJsKHNyYykpIHtcbiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZSgpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzaG91bGRBbGxvd0h0bWxEYXRhVXJscyhlZGl0b3IpICYmIGlzRGF0YVVyaShzcmMpKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlckV2ZW50c0FuZEZpbHRlcnMgPSAoZWRpdG9yLCBwYXN0ZUJpbiwgcGFzdGVGb3JtYXQpID0+IHtcbiAgICAgIHJlZ2lzdGVyRXZlbnRIYW5kbGVycyhlZGl0b3IsIHBhc3RlQmluLCBwYXN0ZUZvcm1hdCk7XG4gICAgICByZWdpc3RlckRhdGFJbWFnZUZpbHRlcihlZGl0b3IpO1xuICAgIH07XG5cbiAgICBjb25zdCB0b2dnbGVQbGFpblRleHRQYXN0ZSA9IChlZGl0b3IsIHBhc3RlRm9ybWF0KSA9PiB7XG4gICAgICBpZiAocGFzdGVGb3JtYXQuZ2V0KCkgPT09ICd0ZXh0Jykge1xuICAgICAgICBwYXN0ZUZvcm1hdC5zZXQoJ2h0bWwnKTtcbiAgICAgICAgZmlyZVBhc3RlUGxhaW5UZXh0VG9nZ2xlKGVkaXRvciwgZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFzdGVGb3JtYXQuc2V0KCd0ZXh0Jyk7XG4gICAgICAgIGZpcmVQYXN0ZVBsYWluVGV4dFRvZ2dsZShlZGl0b3IsIHRydWUpO1xuICAgICAgfVxuICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlciQxID0gKGVkaXRvciwgcGFzdGVGb3JtYXQpID0+IHtcbiAgICAgIGVkaXRvci5hZGRDb21tYW5kKCdtY2VUb2dnbGVQbGFpblRleHRQYXN0ZScsICgpID0+IHtcbiAgICAgICAgdG9nZ2xlUGxhaW5UZXh0UGFzdGUoZWRpdG9yLCBwYXN0ZUZvcm1hdCk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5hZGRDb21tYW5kKCdtY2VJbnNlcnRDbGlwYm9hcmRDb250ZW50JywgKHVpLCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUuaHRtbCkge1xuICAgICAgICAgIHBhc3RlSHRtbChlZGl0b3IsIHZhbHVlLmh0bWwsIHZhbHVlLmludGVybmFsLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlLnRleHQpIHtcbiAgICAgICAgICBwYXN0ZVRleHQoZWRpdG9yLCB2YWx1ZS50ZXh0LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBzZXRIdG1sNUNsaXBib2FyZCA9IChjbGlwYm9hcmREYXRhLCBodG1sLCB0ZXh0KSA9PiB7XG4gICAgICBpZiAoY2xpcGJvYXJkRGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsaXBib2FyZERhdGEuY2xlYXJEYXRhKCk7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YS5zZXREYXRhKCd0ZXh0L2h0bWwnLCBodG1sKTtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhLnNldERhdGEoJ3RleHQvcGxhaW4nLCB0ZXh0KTtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhLnNldERhdGEoaW50ZXJuYWxIdG1sTWltZSgpLCBodG1sKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2V0Q2xpcGJvYXJkRGF0YSA9IChldnQsIGRhdGEsIGZhbGxiYWNrLCBkb25lKSA9PiB7XG4gICAgICBpZiAoc2V0SHRtbDVDbGlwYm9hcmQoZXZ0LmNsaXBib2FyZERhdGEsIGRhdGEuaHRtbCwgZGF0YS50ZXh0KSkge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmFsbGJhY2soZGF0YS5odG1sLCBkb25lKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZhbGxiYWNrID0gZWRpdG9yID0+IChodG1sLCBkb25lKSA9PiB7XG4gICAgICBjb25zdCB7ZG9tLCBzZWxlY3Rpb259ID0gZWRpdG9yO1xuICAgICAgY29uc3Qgb3V0ZXIgPSBkb20uY3JlYXRlKCdkaXYnLCB7XG4gICAgICAgICdjb250ZW50ZWRpdGFibGUnOiAnZmFsc2UnLFxuICAgICAgICAnZGF0YS1tY2UtYm9ndXMnOiAnYWxsJ1xuICAgICAgfSk7XG4gICAgICBjb25zdCBpbm5lciA9IGRvbS5jcmVhdGUoJ2RpdicsIHsgY29udGVudGVkaXRhYmxlOiAndHJ1ZScgfSwgaHRtbCk7XG4gICAgICBkb20uc2V0U3R5bGVzKG91dGVyLCB7XG4gICAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgICB0b3A6ICcwJyxcbiAgICAgICAgbGVmdDogJy0zMDAwcHgnLFxuICAgICAgICB3aWR0aDogJzEwMDBweCcsXG4gICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICAgICAgfSk7XG4gICAgICBvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7XG4gICAgICBkb20uYWRkKGVkaXRvci5nZXRCb2R5KCksIG91dGVyKTtcbiAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgaW5uZXIuZm9jdXMoKTtcbiAgICAgIGNvbnN0IG9mZnNjcmVlblJhbmdlID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgb2Zmc2NyZWVuUmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGlubmVyKTtcbiAgICAgIHNlbGVjdGlvbi5zZXRSbmcob2Zmc2NyZWVuUmFuZ2UpO1xuICAgICAgRGVsYXkuc2V0RWRpdG9yVGltZW91dChlZGl0b3IsICgpID0+IHtcbiAgICAgICAgc2VsZWN0aW9uLnNldFJuZyhyYW5nZSk7XG4gICAgICAgIGRvbS5yZW1vdmUob3V0ZXIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCAwKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldERhdGEgPSBlZGl0b3IgPT4gKHtcbiAgICAgIGh0bWw6IG1hcmsoZWRpdG9yLnNlbGVjdGlvbi5nZXRDb250ZW50KHsgY29udGV4dHVhbDogdHJ1ZSB9KSksXG4gICAgICB0ZXh0OiBlZGl0b3Iuc2VsZWN0aW9uLmdldENvbnRlbnQoeyBmb3JtYXQ6ICd0ZXh0JyB9KVxuICAgIH0pO1xuICAgIGNvbnN0IGlzVGFibGVTZWxlY3Rpb24gPSBlZGl0b3IgPT4gISFlZGl0b3IuZG9tLmdldFBhcmVudChlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KCksICd0ZFtkYXRhLW1jZS1zZWxlY3RlZF0sdGhbZGF0YS1tY2Utc2VsZWN0ZWRdJywgZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgY29uc3QgaGFzU2VsZWN0ZWRDb250ZW50ID0gZWRpdG9yID0+ICFlZGl0b3Iuc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkgfHwgaXNUYWJsZVNlbGVjdGlvbihlZGl0b3IpO1xuICAgIGNvbnN0IGN1dCA9IGVkaXRvciA9PiBldnQgPT4ge1xuICAgICAgaWYgKCFldnQuaXNEZWZhdWx0UHJldmVudGVkKCkgJiYgaGFzU2VsZWN0ZWRDb250ZW50KGVkaXRvcikpIHtcbiAgICAgICAgc2V0Q2xpcGJvYXJkRGF0YShldnQsIGdldERhdGEoZWRpdG9yKSwgZmFsbGJhY2soZWRpdG9yKSwgKCkgPT4ge1xuICAgICAgICAgIGlmIChFbnYuYnJvd3Nlci5pc0Nocm9taXVtKCkgfHwgRW52LmJyb3dzZXIuaXNGaXJlZm94KCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICAgICAgICBEZWxheS5zZXRFZGl0b3JUaW1lb3V0KGVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ0RlbGV0ZScpO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnRGVsZXRlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNvcHkgPSBlZGl0b3IgPT4gZXZ0ID0+IHtcbiAgICAgIGlmICghZXZ0LmlzRGVmYXVsdFByZXZlbnRlZCgpICYmIGhhc1NlbGVjdGVkQ29udGVudChlZGl0b3IpKSB7XG4gICAgICAgIHNldENsaXBib2FyZERhdGEoZXZ0LCBnZXREYXRhKGVkaXRvciksIGZhbGxiYWNrKGVkaXRvciksIG5vb3ApO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXIgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLm9uKCdjdXQnLCBjdXQoZWRpdG9yKSk7XG4gICAgICBlZGl0b3Iub24oJ2NvcHknLCBjb3B5KGVkaXRvcikpO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRDYXJldFJhbmdlRnJvbUV2ZW50ID0gKGVkaXRvciwgZSkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIHJldHVybiBSYW5nZVV0aWxzLmdldENhcmV0UmFuZ2VGcm9tUG9pbnQoKF9hID0gZS5jbGllbnRYKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwLCAoX2IgPSBlLmNsaWVudFkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDAsIGVkaXRvci5nZXREb2MoKSk7XG4gICAgfTtcbiAgICBjb25zdCBpc1BsYWluVGV4dEZpbGVVcmwgPSBjb250ZW50ID0+IHtcbiAgICAgIGNvbnN0IHBsYWluVGV4dENvbnRlbnQgPSBjb250ZW50Wyd0ZXh0L3BsYWluJ107XG4gICAgICByZXR1cm4gcGxhaW5UZXh0Q29udGVudCA/IHBsYWluVGV4dENvbnRlbnQuaW5kZXhPZignZmlsZTovLycpID09PSAwIDogZmFsc2U7XG4gICAgfTtcbiAgICBjb25zdCBzZXRGb2N1c2VkUmFuZ2UgPSAoZWRpdG9yLCBybmcpID0+IHtcbiAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgaWYgKHJuZykge1xuICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaGFzSW1hZ2UgPSBkYXRhVHJhbnNmZXIgPT4gZXhpc3RzKGRhdGFUcmFuc2Zlci5maWxlcywgZmlsZSA9PiAvXmltYWdlXFwvLy50ZXN0KGZpbGUudHlwZSkpO1xuICAgIGNvbnN0IG5lZWRzQ3VzdG9tSW50ZXJuYWxEcm9wID0gKGRvbSwgc2NoZW1hLCB0YXJnZXQsIGRyb3BDb250ZW50KSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnRUcmFuc3BhcmVudCA9IGRvbS5nZXRQYXJlbnQodGFyZ2V0LCBub2RlID0+IGlzVHJhbnNwYXJlbnRCbG9jayhzY2hlbWEsIG5vZGUpKTtcbiAgICAgIGNvbnN0IGluU3VtbWFyeSA9ICFpc051bGwoZG9tLmdldFBhcmVudCh0YXJnZXQsICdzdW1tYXJ5JykpO1xuICAgICAgaWYgKGluU3VtbWFyeSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAocGFyZW50VHJhbnNwYXJlbnQgJiYgaGFzJDIoZHJvcENvbnRlbnQsICd0ZXh0L2h0bWwnKSkge1xuICAgICAgICBjb25zdCBmcmFnbWVudCA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoZHJvcENvbnRlbnRbJ3RleHQvaHRtbCddLCAndGV4dC9odG1sJykuYm9keTtcbiAgICAgICAgcmV0dXJuICFpc051bGwoZnJhZ21lbnQucXVlcnlTZWxlY3RvcihwYXJlbnRUcmFuc3BhcmVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cFN1bW1hcnlEZWxldGVCeURyYWdGaXggPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLm9uKCdpbnB1dCcsIGUgPT4ge1xuICAgICAgICBjb25zdCBoYXNOb1N1bW1hcnkgPSBlbCA9PiBpc051bGwoZWwucXVlcnlTZWxlY3Rvcignc3VtbWFyeScpKTtcbiAgICAgICAgaWYgKGUuaW5wdXRUeXBlID09PSAnZGVsZXRlQnlEcmFnJykge1xuICAgICAgICAgIGNvbnN0IGJyb2tlbkRldGFpbEVsZW1lbnRzID0gZmlsdGVyJDUoZWRpdG9yLmRvbS5zZWxlY3QoJ2RldGFpbHMnKSwgaGFzTm9TdW1tYXJ5KTtcbiAgICAgICAgICBlYWNoJGUoYnJva2VuRGV0YWlsRWxlbWVudHMsIGRldGFpbHMgPT4ge1xuICAgICAgICAgICAgaWYgKGlzQnIkNihkZXRhaWxzLmZpcnN0Q2hpbGQpKSB7XG4gICAgICAgICAgICAgIGRldGFpbHMuZmlyc3RDaGlsZC5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN1bW1hcnkgPSBlZGl0b3IuZG9tLmNyZWF0ZSgnc3VtbWFyeScpO1xuICAgICAgICAgICAgc3VtbWFyeS5hcHBlbmRDaGlsZChjcmVhdGVQYWRkaW5nQnIoKS5kb20pO1xuICAgICAgICAgICAgZGV0YWlscy5wcmVwZW5kKHN1bW1hcnkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHNldHVwJGEgPSAoZWRpdG9yLCBkcmFnZ2luZ0ludGVybmFsbHlTdGF0ZSkgPT4ge1xuICAgICAgaWYgKHNob3VsZFBhc3RlQmxvY2tEcm9wKGVkaXRvcikpIHtcbiAgICAgICAgZWRpdG9yLm9uKCdkcmFnZW5kIGRyYWdvdmVyIGRyYWdnZXN0dXJlIGRyYWdkcm9wIGRyb3AgZHJhZycsIGUgPT4ge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghc2hvdWxkUGFzdGVEYXRhSW1hZ2VzKGVkaXRvcikpIHtcbiAgICAgICAgZWRpdG9yLm9uKCdkcm9wJywgZSA9PiB7XG4gICAgICAgICAgY29uc3QgZGF0YVRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXI7XG4gICAgICAgICAgaWYgKGRhdGFUcmFuc2ZlciAmJiBoYXNJbWFnZShkYXRhVHJhbnNmZXIpKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGVkaXRvci5vbignZHJvcCcsIGUgPT4ge1xuICAgICAgICBpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBybmcgPSBnZXRDYXJldFJhbmdlRnJvbUV2ZW50KGVkaXRvciwgZSk7XG4gICAgICAgIGlmIChpc051bGxhYmxlKHJuZykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZHJvcENvbnRlbnQgPSBnZXREYXRhVHJhbnNmZXJJdGVtcyhlLmRhdGFUcmFuc2Zlcik7XG4gICAgICAgIGNvbnN0IGludGVybmFsID0gaGFzQ29udGVudFR5cGUoZHJvcENvbnRlbnQsIGludGVybmFsSHRtbE1pbWUoKSk7XG4gICAgICAgIGlmICgoIWhhc0h0bWxPclRleHQoZHJvcENvbnRlbnQpIHx8IGlzUGxhaW5UZXh0RmlsZVVybChkcm9wQ29udGVudCkpICYmIHBhc3RlSW1hZ2VEYXRhKGVkaXRvciwgZSwgcm5nKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnRlcm5hbENvbnRlbnQgPSBkcm9wQ29udGVudFtpbnRlcm5hbEh0bWxNaW1lKCldO1xuICAgICAgICBjb25zdCBjb250ZW50ID0gaW50ZXJuYWxDb250ZW50IHx8IGRyb3BDb250ZW50Wyd0ZXh0L2h0bWwnXSB8fCBkcm9wQ29udGVudFsndGV4dC9wbGFpbiddO1xuICAgICAgICBjb25zdCBuZWVkc0ludGVybmFsRHJvcCA9IG5lZWRzQ3VzdG9tSW50ZXJuYWxEcm9wKGVkaXRvci5kb20sIGVkaXRvci5zY2hlbWEsIHJuZy5zdGFydENvbnRhaW5lciwgZHJvcENvbnRlbnQpO1xuICAgICAgICBjb25zdCBpc0ludGVybmFsRHJvcCA9IGRyYWdnaW5nSW50ZXJuYWxseVN0YXRlLmdldCgpO1xuICAgICAgICBpZiAoaXNJbnRlcm5hbERyb3AgJiYgIW5lZWRzSW50ZXJuYWxEcm9wKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIERlbGF5LnNldEVkaXRvclRpbWVvdXQoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICBlZGl0b3IudW5kb01hbmFnZXIudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxDb250ZW50IHx8IGlzSW50ZXJuYWxEcm9wICYmIG5lZWRzSW50ZXJuYWxEcm9wKSB7XG4gICAgICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdEZWxldGUnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzZXRGb2N1c2VkUmFuZ2UoZWRpdG9yLCBybmcpO1xuICAgICAgICAgICAgICBjb25zdCB0cmltbWVkQ29udGVudCA9IHRyaW1IdG1sKGNvbnRlbnQpO1xuICAgICAgICAgICAgICBpZiAoZHJvcENvbnRlbnRbJ3RleHQvaHRtbCddKSB7XG4gICAgICAgICAgICAgICAgcGFzdGVIdG1sKGVkaXRvciwgdHJpbW1lZENvbnRlbnQsIGludGVybmFsLCB0cnVlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXN0ZVRleHQoZWRpdG9yLCB0cmltbWVkQ29udGVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignZHJhZ3N0YXJ0JywgX2UgPT4ge1xuICAgICAgICBkcmFnZ2luZ0ludGVybmFsbHlTdGF0ZS5zZXQodHJ1ZSk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignZHJhZ292ZXIgZHJhZ2VuZCcsIGUgPT4ge1xuICAgICAgICBpZiAoc2hvdWxkUGFzdGVEYXRhSW1hZ2VzKGVkaXRvcikgJiYgIWRyYWdnaW5nSW50ZXJuYWxseVN0YXRlLmdldCgpKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHNldEZvY3VzZWRSYW5nZShlZGl0b3IsIGdldENhcmV0UmFuZ2VGcm9tRXZlbnQoZWRpdG9yLCBlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGUudHlwZSA9PT0gJ2RyYWdlbmQnKSB7XG4gICAgICAgICAgZHJhZ2dpbmdJbnRlcm5hbGx5U3RhdGUuc2V0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzZXR1cFN1bW1hcnlEZWxldGVCeURyYWdGaXgoZWRpdG9yKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0dXAkOSA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBwcm9jZXNzRXZlbnQgPSBmID0+IGUgPT4ge1xuICAgICAgICBmKGVkaXRvciwgZSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcHJlUHJvY2VzcyA9IGdldFBhc3RlUHJlUHJvY2VzcyhlZGl0b3IpO1xuICAgICAgaWYgKGlzRnVuY3Rpb24ocHJlUHJvY2VzcykpIHtcbiAgICAgICAgZWRpdG9yLm9uKCdQYXN0ZVByZVByb2Nlc3MnLCBwcm9jZXNzRXZlbnQocHJlUHJvY2VzcykpO1xuICAgICAgfVxuICAgICAgY29uc3QgcG9zdFByb2Nlc3MgPSBnZXRQYXN0ZVBvc3RQcm9jZXNzKGVkaXRvcik7XG4gICAgICBpZiAoaXNGdW5jdGlvbihwb3N0UHJvY2VzcykpIHtcbiAgICAgICAgZWRpdG9yLm9uKCdQYXN0ZVBvc3RQcm9jZXNzJywgcHJvY2Vzc0V2ZW50KHBvc3RQcm9jZXNzKSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGFkZFByZVByb2Nlc3NGaWx0ZXIgPSAoZWRpdG9yLCBmaWx0ZXJGdW5jKSA9PiB7XG4gICAgICBlZGl0b3Iub24oJ1Bhc3RlUHJlUHJvY2VzcycsIGUgPT4ge1xuICAgICAgICBlLmNvbnRlbnQgPSBmaWx0ZXJGdW5jKGVkaXRvciwgZS5jb250ZW50LCBlLmludGVybmFsKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmdiUmVnRXhwID0gL3JnYlxccypcXChcXHMqKFswLTldKylcXHMqLFxccyooWzAtOV0rKVxccyosXFxzKihbMC05XSspXFxzKlxcKS9naTtcbiAgICBjb25zdCByZ2JUb0hleCA9IHZhbHVlID0+IFRvb2xzLnRyaW0odmFsdWUpLnJlcGxhY2UocmdiUmVnRXhwLCByZ2JhVG9IZXhTdHJpbmcpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgcmVtb3ZlV2ViS2l0U3R5bGVzID0gKGVkaXRvciwgY29udGVudCwgaW50ZXJuYWwpID0+IHtcbiAgICAgIGNvbnN0IHdlYktpdFN0eWxlc09wdGlvbiA9IGdldFBhc3RlV2Via2l0U3R5bGVzKGVkaXRvcik7XG4gICAgICBpZiAoaW50ZXJuYWwgfHwgd2ViS2l0U3R5bGVzT3B0aW9uID09PSAnYWxsJyB8fCAhc2hvdWxkUGFzdGVSZW1vdmVXZWJLaXRTdHlsZXMoZWRpdG9yKSkge1xuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHdlYktpdFN0eWxlcyA9IHdlYktpdFN0eWxlc09wdGlvbiA/IHdlYktpdFN0eWxlc09wdGlvbi5zcGxpdCgvWywgXS8pIDogW107XG4gICAgICBpZiAod2ViS2l0U3R5bGVzICYmIHdlYktpdFN0eWxlc09wdGlvbiAhPT0gJ25vbmUnKSB7XG4gICAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb20sIG5vZGUgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKTtcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvKDxbXj5dKykgc3R5bGU9XCIoW15cIl0qKVwiKFtePl0qPikvZ2ksIChhbGwsIGJlZm9yZSwgdmFsdWUsIGFmdGVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgaW5wdXRTdHlsZXMgPSBkb20ucGFyc2VTdHlsZShkb20uZGVjb2RlKHZhbHVlKSk7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0U3R5bGVzID0ge307XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB3ZWJLaXRTdHlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSBpbnB1dFN0eWxlc1t3ZWJLaXRTdHlsZXNbaV1dO1xuICAgICAgICAgICAgbGV0IGNvbXBhcmVJbnB1dCA9IGlucHV0VmFsdWU7XG4gICAgICAgICAgICBsZXQgY3VycmVudFZhbHVlID0gZG9tLmdldFN0eWxlKG5vZGUsIHdlYktpdFN0eWxlc1tpXSwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAoL2NvbG9yLy50ZXN0KHdlYktpdFN0eWxlc1tpXSkpIHtcbiAgICAgICAgICAgICAgY29tcGFyZUlucHV0ID0gcmdiVG9IZXgoY29tcGFyZUlucHV0KTtcbiAgICAgICAgICAgICAgY3VycmVudFZhbHVlID0gcmdiVG9IZXgoY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT09IGNvbXBhcmVJbnB1dCkge1xuICAgICAgICAgICAgICBvdXRwdXRTdHlsZXNbd2ViS2l0U3R5bGVzW2ldXSA9IGlucHV0VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG91dHB1dFN0eWxlID0gZG9tLnNlcmlhbGl6ZVN0eWxlKG91dHB1dFN0eWxlcywgJ3NwYW4nKTtcbiAgICAgICAgICBpZiAob3V0cHV0U3R5bGUpIHtcbiAgICAgICAgICAgIHJldHVybiBiZWZvcmUgKyAnIHN0eWxlPVwiJyArIG91dHB1dFN0eWxlICsgJ1wiJyArIGFmdGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYmVmb3JlICsgYWZ0ZXI7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvKDxbXj5dKykgc3R5bGU9XCIoW15cIl0qKVwiKFtePl0qPikvZ2ksICckMSQzJyk7XG4gICAgICB9XG4gICAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlKC8oPFtePl0rKSBkYXRhLW1jZS1zdHlsZT1cIihbXlwiXSspXCIoW14+XSo+KS9naSwgKGFsbCwgYmVmb3JlLCB2YWx1ZSwgYWZ0ZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIGJlZm9yZSArICcgc3R5bGU9XCInICsgdmFsdWUgKyAnXCInICsgYWZ0ZXI7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH07XG4gICAgY29uc3Qgc2V0dXAkOCA9IGVkaXRvciA9PiB7XG4gICAgICBpZiAoRW52LmJyb3dzZXIuaXNDaHJvbWl1bSgpIHx8IEVudi5icm93c2VyLmlzU2FmYXJpKCkpIHtcbiAgICAgICAgYWRkUHJlUHJvY2Vzc0ZpbHRlcihlZGl0b3IsIHJlbW92ZVdlYktpdFN0eWxlcyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHNldHVwJDcgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZHJhZ2dpbmdJbnRlcm5hbGx5U3RhdGUgPSBDZWxsKGZhbHNlKTtcbiAgICAgIGNvbnN0IHBhc3RlRm9ybWF0ID0gQ2VsbChpc1Bhc3RlQXNUZXh0RW5hYmxlZChlZGl0b3IpID8gJ3RleHQnIDogJ2h0bWwnKTtcbiAgICAgIGNvbnN0IHBhc3RlQmluID0gUGFzdGVCaW4oZWRpdG9yKTtcbiAgICAgIHNldHVwJDgoZWRpdG9yKTtcbiAgICAgIHJlZ2lzdGVyJDEoZWRpdG9yLCBwYXN0ZUZvcm1hdCk7XG4gICAgICBzZXR1cCQ5KGVkaXRvcik7XG4gICAgICBlZGl0b3Iub24oJ1ByZUluaXQnLCAoKSA9PiB7XG4gICAgICAgIHJlZ2lzdGVyKGVkaXRvcik7XG4gICAgICAgIHNldHVwJGEoZWRpdG9yLCBkcmFnZ2luZ0ludGVybmFsbHlTdGF0ZSk7XG4gICAgICAgIHJlZ2lzdGVyRXZlbnRzQW5kRmlsdGVycyhlZGl0b3IsIHBhc3RlQmluLCBwYXN0ZUZvcm1hdCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJldmVudFN1bW1hcnlUb2dnbGUgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLm9uKCdjbGljaycsIGUgPT4ge1xuICAgICAgICBpZiAoZWRpdG9yLmRvbS5nZXRQYXJlbnQoZS50YXJnZXQsICdkZXRhaWxzJykpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZmlsdGVyRGV0YWlscyA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IucGFyc2VyLmFkZE5vZGVGaWx0ZXIoJ2RldGFpbHMnLCBlbG1zID0+IHtcbiAgICAgICAgY29uc3QgaW5pdGlhbFN0YXRlT3B0aW9uID0gZ2V0RGV0YWlsc0luaXRpYWxTdGF0ZShlZGl0b3IpO1xuICAgICAgICBlYWNoJGUoZWxtcywgZGV0YWlscyA9PiB7XG4gICAgICAgICAgaWYgKGluaXRpYWxTdGF0ZU9wdGlvbiA9PT0gJ2V4cGFuZGVkJykge1xuICAgICAgICAgICAgZGV0YWlscy5hdHRyKCdvcGVuJywgJ29wZW4nKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGluaXRpYWxTdGF0ZU9wdGlvbiA9PT0gJ2NvbGxhcHNlZCcpIHtcbiAgICAgICAgICAgIGRldGFpbHMuYXR0cignb3BlbicsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5zZXJpYWxpemVyLmFkZE5vZGVGaWx0ZXIoJ2RldGFpbHMnLCBlbG1zID0+IHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZFN0YXRlT3B0aW9uID0gZ2V0RGV0YWlsc1NlcmlhbGl6ZWRTdGF0ZShlZGl0b3IpO1xuICAgICAgICBlYWNoJGUoZWxtcywgZGV0YWlscyA9PiB7XG4gICAgICAgICAgaWYgKHNlcmlhbGl6ZWRTdGF0ZU9wdGlvbiA9PT0gJ2V4cGFuZGVkJykge1xuICAgICAgICAgICAgZGV0YWlscy5hdHRyKCdvcGVuJywgJ29wZW4nKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNlcmlhbGl6ZWRTdGF0ZU9wdGlvbiA9PT0gJ2NvbGxhcHNlZCcpIHtcbiAgICAgICAgICAgIGRldGFpbHMuYXR0cignb3BlbicsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHNldHVwJDYgPSBlZGl0b3IgPT4ge1xuICAgICAgcHJldmVudFN1bW1hcnlUb2dnbGUoZWRpdG9yKTtcbiAgICAgIGZpbHRlckRldGFpbHMoZWRpdG9yKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNCciA9IGlzQnIkNjtcbiAgICBjb25zdCBpc1RleHQgPSBpc1RleHQkYTtcbiAgICBjb25zdCBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJDIgPSBlbG0gPT4gaXNDb250ZW50RWRpdGFibGVGYWxzZSRiKGVsbS5kb20pO1xuICAgIGNvbnN0IGlzQ29udGVudEVkaXRhYmxlVHJ1ZSA9IGVsbSA9PiBpc0NvbnRlbnRFZGl0YWJsZVRydWUkMyhlbG0uZG9tKTtcbiAgICBjb25zdCBpc1Jvb3QgPSByb290Tm9kZSA9PiBlbG0gPT4gZXEoU3VnYXJFbGVtZW50LmZyb21Eb20ocm9vdE5vZGUpLCBlbG0pO1xuICAgIGNvbnN0IGdldENsb3Nlc3RTY29wZSA9IChub2RlLCByb290Tm9kZSkgPT4gY2xvc2VzdCQ0KFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5vZGUpLCBlbG0gPT4gaXNDb250ZW50RWRpdGFibGVUcnVlKGVsbSkgfHwgaXNCbG9jayQyKGVsbSksIGlzUm9vdChyb290Tm9kZSkpLmdldE9yKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJvb3ROb2RlKSkuZG9tO1xuICAgIGNvbnN0IGdldENsb3Nlc3RDZWYgPSAobm9kZSwgcm9vdE5vZGUpID0+IGNsb3Nlc3QkNChTdWdhckVsZW1lbnQuZnJvbURvbShub2RlKSwgaXNDb250ZW50RWRpdGFibGVGYWxzZSQyLCBpc1Jvb3Qocm9vdE5vZGUpKTtcbiAgICBjb25zdCBmaW5kRWRnZUNhcmV0Q2FuZGlkYXRlID0gKHN0YXJ0Tm9kZSwgc2NvcGUsIGZvcndhcmQpID0+IHtcbiAgICAgIGNvbnN0IHdhbGtlciA9IG5ldyBEb21UcmVlV2Fsa2VyKHN0YXJ0Tm9kZSwgc2NvcGUpO1xuICAgICAgY29uc3QgbmV4dCA9IGZvcndhcmQgPyB3YWxrZXIubmV4dC5iaW5kKHdhbGtlcikgOiB3YWxrZXIucHJldi5iaW5kKHdhbGtlcik7XG4gICAgICBsZXQgcmVzdWx0ID0gc3RhcnROb2RlO1xuICAgICAgZm9yIChsZXQgY3VycmVudCA9IGZvcndhcmQgPyBzdGFydE5vZGUgOiBuZXh0KCk7IGN1cnJlbnQgJiYgIWlzQnIoY3VycmVudCk7IGN1cnJlbnQgPSBuZXh0KCkpIHtcbiAgICAgICAgaWYgKGlzQ2FyZXRDYW5kaWRhdGUkMyhjdXJyZW50KSkge1xuICAgICAgICAgIHJlc3VsdCA9IGN1cnJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kQ2xvc2VzdEJsb2NrUmFuZ2UgPSAoc3RhcnRSbmcsIHJvb3ROb2RlKSA9PiB7XG4gICAgICBjb25zdCBzdGFydFBvcyA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQoc3RhcnRSbmcpO1xuICAgICAgY29uc3QgY2xpY2tOb2RlID0gc3RhcnRQb3MuZ2V0Tm9kZSgpO1xuICAgICAgY29uc3Qgc2NvcGUgPSBnZXRDbG9zZXN0U2NvcGUoY2xpY2tOb2RlLCByb290Tm9kZSk7XG4gICAgICBjb25zdCBzdGFydE5vZGUgPSBmaW5kRWRnZUNhcmV0Q2FuZGlkYXRlKGNsaWNrTm9kZSwgc2NvcGUsIGZhbHNlKTtcbiAgICAgIGNvbnN0IGVuZE5vZGUgPSBmaW5kRWRnZUNhcmV0Q2FuZGlkYXRlKGNsaWNrTm9kZSwgc2NvcGUsIHRydWUpO1xuICAgICAgY29uc3Qgcm5nID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIGdldENsb3Nlc3RDZWYoc3RhcnROb2RlLCBzY29wZSkuZm9sZCgoKSA9PiB7XG4gICAgICAgIGlmIChpc1RleHQoc3RhcnROb2RlKSkge1xuICAgICAgICAgIHJuZy5zZXRTdGFydChzdGFydE5vZGUsIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJuZy5zZXRTdGFydEJlZm9yZShzdGFydE5vZGUpO1xuICAgICAgICB9XG4gICAgICB9LCBjZWYgPT4gcm5nLnNldFN0YXJ0QmVmb3JlKGNlZi5kb20pKTtcbiAgICAgIGdldENsb3Nlc3RDZWYoZW5kTm9kZSwgc2NvcGUpLmZvbGQoKCkgPT4ge1xuICAgICAgICBpZiAoaXNUZXh0KGVuZE5vZGUpKSB7XG4gICAgICAgICAgcm5nLnNldEVuZChlbmROb2RlLCBlbmROb2RlLmRhdGEubGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBybmcuc2V0RW5kQWZ0ZXIoZW5kTm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0sIGNlZiA9PiBybmcuc2V0RW5kQWZ0ZXIoY2VmLmRvbSkpO1xuICAgICAgcmV0dXJuIHJuZztcbiAgICB9O1xuICAgIGNvbnN0IG9uVHJpcGxlQ2xpY2tTZWxlY3QgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZmluZENsb3Nlc3RCbG9ja1JhbmdlKGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCksIGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcobm9ybWFsaXplKHJuZykpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0dXAkNSA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3Iub24oJ21vdXNlZG93bicsIGUgPT4ge1xuICAgICAgICBpZiAoZS5kZXRhaWwgPj0gMykge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBvblRyaXBsZUNsaWNrU2VsZWN0KGVkaXRvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB2YXIgRmFrZUNhcmV0UG9zaXRpb247XG4gICAgKGZ1bmN0aW9uIChGYWtlQ2FyZXRQb3NpdGlvbikge1xuICAgICAgRmFrZUNhcmV0UG9zaXRpb25bJ0JlZm9yZSddID0gJ2JlZm9yZSc7XG4gICAgICBGYWtlQ2FyZXRQb3NpdGlvblsnQWZ0ZXInXSA9ICdhZnRlcic7XG4gICAgfShGYWtlQ2FyZXRQb3NpdGlvbiB8fCAoRmFrZUNhcmV0UG9zaXRpb24gPSB7fSkpKTtcbiAgICBjb25zdCBkaXN0YW5jZVRvUmVjdExlZnQgPSAoY2xpZW50UmVjdCwgY2xpZW50WCkgPT4gTWF0aC5hYnMoY2xpZW50UmVjdC5sZWZ0IC0gY2xpZW50WCk7XG4gICAgY29uc3QgZGlzdGFuY2VUb1JlY3RSaWdodCA9IChjbGllbnRSZWN0LCBjbGllbnRYKSA9PiBNYXRoLmFicyhjbGllbnRSZWN0LnJpZ2h0IC0gY2xpZW50WCk7XG4gICAgY29uc3QgaXNJbnNpZGVZID0gKGNsaWVudFksIGNsaWVudFJlY3QpID0+IGNsaWVudFkgPj0gY2xpZW50UmVjdC50b3AgJiYgY2xpZW50WSA8PSBjbGllbnRSZWN0LmJvdHRvbTtcbiAgICBjb25zdCBjb2xsaWRlc1kgPSAocjEsIHIyKSA9PiByMS50b3AgPCByMi5ib3R0b20gJiYgcjEuYm90dG9tID4gcjIudG9wO1xuICAgIGNvbnN0IGlzT3ZlcmxhcHBpbmcgPSAocjEsIHIyKSA9PiB7XG4gICAgICBjb25zdCBvdmVybGFwID0gb3ZlcmxhcFkocjEsIHIyKSAvIE1hdGgubWluKHIxLmhlaWdodCwgcjIuaGVpZ2h0KTtcbiAgICAgIHJldHVybiBjb2xsaWRlc1kocjEsIHIyKSAmJiBvdmVybGFwID4gMC41O1xuICAgIH07XG4gICAgY29uc3Qgc3BsaXRSZWN0c1BlckF4aXMgPSAocmVjdHMsIHkpID0+IHtcbiAgICAgIGNvbnN0IGludGVyc2VjdGluZ1JlY3RzID0gZmlsdGVyJDUocmVjdHMsIHJlY3QgPT4gaXNJbnNpZGVZKHksIHJlY3QpKTtcbiAgICAgIHJldHVybiBib3VuZGluZ0NsaWVudFJlY3RGcm9tUmVjdHMoaW50ZXJzZWN0aW5nUmVjdHMpLmZvbGQoKCkgPT4gW1xuICAgICAgICBbXSxcbiAgICAgICAgcmVjdHNcbiAgICAgIF0sIGJvdW5kaW5nUmVjdCA9PiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBwYXNzOiBob3Jpem9udGFsLFxuICAgICAgICAgIGZhaWw6IHZlcnRpY2FsXG4gICAgICAgIH0gPSBwYXJ0aXRpb24kMihyZWN0cywgcmVjdCA9PiBpc092ZXJsYXBwaW5nKHJlY3QsIGJvdW5kaW5nUmVjdCkpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIGhvcml6b250YWwsXG4gICAgICAgICAgdmVydGljYWxcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgY2xpZW50SW5mbyA9IChyZWN0LCBjbGllbnRYKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlOiByZWN0Lm5vZGUsXG4gICAgICAgIHBvc2l0aW9uOiBkaXN0YW5jZVRvUmVjdExlZnQocmVjdCwgY2xpZW50WCkgPCBkaXN0YW5jZVRvUmVjdFJpZ2h0KHJlY3QsIGNsaWVudFgpID8gRmFrZUNhcmV0UG9zaXRpb24uQmVmb3JlIDogRmFrZUNhcmV0UG9zaXRpb24uQWZ0ZXJcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBob3Jpem9udGFsRGlzdGFuY2UgPSAocmVjdCwgeCwgX3kpID0+IHggPiByZWN0LmxlZnQgJiYgeCA8IHJlY3QucmlnaHQgPyAwIDogTWF0aC5taW4oTWF0aC5hYnMocmVjdC5sZWZ0IC0geCksIE1hdGguYWJzKHJlY3QucmlnaHQgLSB4KSk7XG4gICAgY29uc3QgY2xvc2VzdENoaWxkQ2FyZXRDYW5kaWRhdGVOb2RlUmVjdCA9IChjaGlsZHJlbiwgY2xpZW50WCwgY2xpZW50WSkgPT4ge1xuICAgICAgY29uc3QgY2FyZXRDYW5kaWRhdGVSZWN0ID0gcmVjdCA9PiB7XG4gICAgICAgIGlmIChpc0NhcmV0Q2FuZGlkYXRlJDMocmVjdC5ub2RlKSkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHJlY3QpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRWxlbWVudCQ2KHJlY3Qubm9kZSkpIHtcbiAgICAgICAgICByZXR1cm4gY2xvc2VzdENoaWxkQ2FyZXRDYW5kaWRhdGVOb2RlUmVjdChmcm9tKHJlY3Qubm9kZS5jaGlsZE5vZGVzKSwgY2xpZW50WCwgY2xpZW50WSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldENsb3Nlc3RUZXh0Tm9kZSA9IChyZWN0cywgZGlzdGFuY2UpID0+IHtcbiAgICAgICAgaWYgKHJlY3RzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgY29uc3QgcjEgPSBjYXJldENhbmRpZGF0ZVJlY3QocmVjdHNbMF0pLmdldE9yKHJlY3RzWzBdKTtcbiAgICAgICAgICBjb25zdCByMiA9IGNhcmV0Q2FuZGlkYXRlUmVjdChyZWN0c1sxXSkuZ2V0T3IocmVjdHNbMV0pO1xuICAgICAgICAgIGNvbnN0IGRlbHRhRGlzdGFuY2UgPSBNYXRoLmFicyhkaXN0YW5jZShyMSwgY2xpZW50WCwgY2xpZW50WSkgLSBkaXN0YW5jZShyMiwgY2xpZW50WCwgY2xpZW50WSkpO1xuICAgICAgICAgIGlmIChkZWx0YURpc3RhbmNlIDwgMikge1xuICAgICAgICAgICAgaWYgKGlzVGV4dCRhKHIxLm5vZGUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHIxKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNUZXh0JGEocjIubm9kZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUocjIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZpbmRDbG9zZXN0Q2FyZXRDYW5kaWRhdGVOb2RlUmVjdCA9IChyZWN0cywgZGlzdGFuY2UpID0+IHtcbiAgICAgICAgY29uc3Qgc29ydGVkUmVjdHMgPSBzb3J0KHJlY3RzLCAocjEsIHIyKSA9PiBkaXN0YW5jZShyMSwgY2xpZW50WCwgY2xpZW50WSkgLSBkaXN0YW5jZShyMiwgY2xpZW50WCwgY2xpZW50WSkpO1xuICAgICAgICByZXR1cm4gZ2V0Q2xvc2VzdFRleHROb2RlKHNvcnRlZFJlY3RzLCBkaXN0YW5jZSkub3JUaHVuaygoKSA9PiBmaW5kTWFwKHNvcnRlZFJlY3RzLCBjYXJldENhbmRpZGF0ZVJlY3QpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBbaG9yaXpvbnRhbFJlY3RzLCB2ZXJ0aWNhbFJlY3RzXSA9IHNwbGl0UmVjdHNQZXJBeGlzKGdldENsaWVudFJlY3RzKGNoaWxkcmVuKSwgY2xpZW50WSk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBhc3M6IGFib3ZlLFxuICAgICAgICBmYWlsOiBiZWxvd1xuICAgICAgfSA9IHBhcnRpdGlvbiQyKHZlcnRpY2FsUmVjdHMsIHJlY3QgPT4gcmVjdC50b3AgPCBjbGllbnRZKTtcbiAgICAgIHJldHVybiBmaW5kQ2xvc2VzdENhcmV0Q2FuZGlkYXRlTm9kZVJlY3QoaG9yaXpvbnRhbFJlY3RzLCBob3Jpem9udGFsRGlzdGFuY2UpLm9yVGh1bmsoKCkgPT4gZmluZENsb3Nlc3RDYXJldENhbmRpZGF0ZU5vZGVSZWN0KGJlbG93LCBkaXN0YW5jZVRvUmVjdEVkZ2VGcm9tWFkpKS5vclRodW5rKCgpID0+IGZpbmRDbG9zZXN0Q2FyZXRDYW5kaWRhdGVOb2RlUmVjdChhYm92ZSwgZGlzdGFuY2VUb1JlY3RFZGdlRnJvbVhZKSk7XG4gICAgfTtcbiAgICBjb25zdCB0cmF2ZXJzZVVwID0gKHJvb3RFbG0sIHNjb3BlLCBjbGllbnRYLCBjbGllbnRZKSA9PiB7XG4gICAgICBjb25zdCBoZWxwZXIgPSAoc2NvcGUsIHByZXZTY29wZSkgPT4ge1xuICAgICAgICBjb25zdCBpc0RyYWdHaG9zdENvbnRhaW5lciA9IG5vZGUgPT4gaXNFbGVtZW50JDYobm9kZSkgJiYgbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJ21jZS1kcmFnLWNvbnRhaW5lcicpO1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVzV2l0aG91dEdob3N0ID0gZmlsdGVyJDUoc2NvcGUuZG9tLmNoaWxkTm9kZXMsIG5vdChpc0RyYWdHaG9zdENvbnRhaW5lcikpO1xuICAgICAgICByZXR1cm4gcHJldlNjb3BlLmZvbGQoKCkgPT4gY2xvc2VzdENoaWxkQ2FyZXRDYW5kaWRhdGVOb2RlUmVjdChjaGlsZE5vZGVzV2l0aG91dEdob3N0LCBjbGllbnRYLCBjbGllbnRZKSwgcHJldlNjb3BlID0+IHtcbiAgICAgICAgICBjb25zdCB1bmNoZWNrZWRDaGlsZHJlbiA9IGZpbHRlciQ1KGNoaWxkTm9kZXNXaXRob3V0R2hvc3QsIG5vZGUgPT4gbm9kZSAhPT0gcHJldlNjb3BlLmRvbSk7XG4gICAgICAgICAgcmV0dXJuIGNsb3Nlc3RDaGlsZENhcmV0Q2FuZGlkYXRlTm9kZVJlY3QodW5jaGVja2VkQ2hpbGRyZW4sIGNsaWVudFgsIGNsaWVudFkpO1xuICAgICAgICB9KS5vclRodW5rKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJlbnQgPSBlcShzY29wZSwgcm9vdEVsbSkgPyBPcHRpb25hbC5ub25lKCkgOiBwYXJlbnRFbGVtZW50KHNjb3BlKTtcbiAgICAgICAgICByZXR1cm4gcGFyZW50LmJpbmQobmV3U2NvcGUgPT4gaGVscGVyKG5ld1Njb3BlLCBPcHRpb25hbC5zb21lKHNjb3BlKSkpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gaGVscGVyKHNjb3BlLCBPcHRpb25hbC5ub25lKCkpO1xuICAgIH07XG4gICAgY29uc3QgY2xvc2VzdENhcmV0Q2FuZGlkYXRlTm9kZVJlY3QgPSAocm9vdCwgY2xpZW50WCwgY2xpZW50WSkgPT4ge1xuICAgICAgY29uc3Qgcm9vdEVsbSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJvb3QpO1xuICAgICAgY29uc3Qgb3duZXJEb2MgPSBkb2N1bWVudE9yT3duZXIocm9vdEVsbSk7XG4gICAgICBjb25zdCBlbGVtZW50QXRQb2ludCA9IFN1Z2FyRWxlbWVudC5mcm9tUG9pbnQob3duZXJEb2MsIGNsaWVudFgsIGNsaWVudFkpLmZpbHRlcihlbG0gPT4gY29udGFpbnMocm9vdEVsbSwgZWxtKSk7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudEF0UG9pbnQuZ2V0T3Iocm9vdEVsbSk7XG4gICAgICByZXR1cm4gdHJhdmVyc2VVcChyb290RWxtLCBlbGVtZW50LCBjbGllbnRYLCBjbGllbnRZKTtcbiAgICB9O1xuICAgIGNvbnN0IGNsb3Nlc3RGYWtlQ2FyZXRDYW5kaWRhdGUgPSAocm9vdCwgY2xpZW50WCwgY2xpZW50WSkgPT4gY2xvc2VzdENhcmV0Q2FuZGlkYXRlTm9kZVJlY3Qocm9vdCwgY2xpZW50WCwgY2xpZW50WSkuZmlsdGVyKHJlY3QgPT4gaXNGYWtlQ2FyZXRUYXJnZXQocmVjdC5ub2RlKSkubWFwKHJlY3QgPT4gY2xpZW50SW5mbyhyZWN0LCBjbGllbnRYKSk7XG5cbiAgICBjb25zdCBnZXRBYnNvbHV0ZVBvc2l0aW9uID0gZWxtID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICBjb25zdCBjbGllbnRSZWN0ID0gZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgZG9jID0gZWxtLm93bmVyRG9jdW1lbnQ7XG4gICAgICBjb25zdCBkb2NFbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICAgIGNvbnN0IHdpbiA9IGRvYy5kZWZhdWx0VmlldztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgKyAoKF9hID0gd2luID09PSBudWxsIHx8IHdpbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2luLnNjcm9sbFkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDApIC0gZG9jRWxlbS5jbGllbnRUb3AsXG4gICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCArICgoX2IgPSB3aW4gPT09IG51bGwgfHwgd2luID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3aW4uc2Nyb2xsWCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogMCkgLSBkb2NFbGVtLmNsaWVudExlZnRcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBnZXRCb2R5UG9zaXRpb24gPSBlZGl0b3IgPT4gZWRpdG9yLmlubGluZSA/IGdldEFic29sdXRlUG9zaXRpb24oZWRpdG9yLmdldEJvZHkoKSkgOiB7XG4gICAgICBsZWZ0OiAwLFxuICAgICAgdG9wOiAwXG4gICAgfTtcbiAgICBjb25zdCBnZXRTY3JvbGxQb3NpdGlvbiA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBib2R5ID0gZWRpdG9yLmdldEJvZHkoKTtcbiAgICAgIHJldHVybiBlZGl0b3IuaW5saW5lID8ge1xuICAgICAgICBsZWZ0OiBib2R5LnNjcm9sbExlZnQsXG4gICAgICAgIHRvcDogYm9keS5zY3JvbGxUb3BcbiAgICAgIH0gOiB7XG4gICAgICAgIGxlZnQ6IDAsXG4gICAgICAgIHRvcDogMFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEJvZHlTY3JvbGwgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgYm9keSA9IGVkaXRvci5nZXRCb2R5KCksIGRvY0VsbSA9IGVkaXRvci5nZXREb2MoKS5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICBjb25zdCBpbmxpbmVTY3JvbGwgPSB7XG4gICAgICAgIGxlZnQ6IGJvZHkuc2Nyb2xsTGVmdCxcbiAgICAgICAgdG9wOiBib2R5LnNjcm9sbFRvcFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGlmcmFtZVNjcm9sbCA9IHtcbiAgICAgICAgbGVmdDogYm9keS5zY3JvbGxMZWZ0IHx8IGRvY0VsbS5zY3JvbGxMZWZ0LFxuICAgICAgICB0b3A6IGJvZHkuc2Nyb2xsVG9wIHx8IGRvY0VsbS5zY3JvbGxUb3BcbiAgICAgIH07XG4gICAgICByZXR1cm4gZWRpdG9yLmlubGluZSA/IGlubGluZVNjcm9sbCA6IGlmcmFtZVNjcm9sbDtcbiAgICB9O1xuICAgIGNvbnN0IGdldE1vdXNlUG9zaXRpb24gPSAoZWRpdG9yLCBldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldC5vd25lckRvY3VtZW50ICE9PSBlZGl0b3IuZ2V0RG9jKCkpIHtcbiAgICAgICAgY29uc3QgaWZyYW1lUG9zaXRpb24gPSBnZXRBYnNvbHV0ZVBvc2l0aW9uKGVkaXRvci5nZXRDb250ZW50QXJlYUNvbnRhaW5lcigpKTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsUG9zaXRpb24gPSBnZXRCb2R5U2Nyb2xsKGVkaXRvcik7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGVmdDogZXZlbnQucGFnZVggLSBpZnJhbWVQb3NpdGlvbi5sZWZ0ICsgc2Nyb2xsUG9zaXRpb24ubGVmdCxcbiAgICAgICAgICB0b3A6IGV2ZW50LnBhZ2VZIC0gaWZyYW1lUG9zaXRpb24udG9wICsgc2Nyb2xsUG9zaXRpb24udG9wXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiBldmVudC5wYWdlWCxcbiAgICAgICAgdG9wOiBldmVudC5wYWdlWVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNhbGN1bGF0ZVBvc2l0aW9uID0gKGJvZHlQb3NpdGlvbiwgc2Nyb2xsUG9zaXRpb24sIG1vdXNlUG9zaXRpb24pID0+ICh7XG4gICAgICBwYWdlWDogbW91c2VQb3NpdGlvbi5sZWZ0IC0gYm9keVBvc2l0aW9uLmxlZnQgKyBzY3JvbGxQb3NpdGlvbi5sZWZ0LFxuICAgICAgcGFnZVk6IG1vdXNlUG9zaXRpb24udG9wIC0gYm9keVBvc2l0aW9uLnRvcCArIHNjcm9sbFBvc2l0aW9uLnRvcFxuICAgIH0pO1xuICAgIGNvbnN0IGNhbGMgPSAoZWRpdG9yLCBldmVudCkgPT4gY2FsY3VsYXRlUG9zaXRpb24oZ2V0Qm9keVBvc2l0aW9uKGVkaXRvciksIGdldFNjcm9sbFBvc2l0aW9uKGVkaXRvciksIGdldE1vdXNlUG9zaXRpb24oZWRpdG9yLCBldmVudCkpO1xuXG4gICAgY29uc3QgZ2V0VGFyZ2V0UHJvcHMgPSB0YXJnZXQgPT4gKHtcbiAgICAgIHRhcmdldCxcbiAgICAgIHNyY0VsZW1lbnQ6IHRhcmdldFxuICAgIH0pO1xuICAgIGNvbnN0IG1ha2VEbmRFdmVudEZyb21Nb3VzZUV2ZW50ID0gKHR5cGUsIG1vdXNlRXZlbnQsIHRhcmdldCwgZGF0YVRyYW5zZmVyKSA9PiAoe1xuICAgICAgLi4ubW91c2VFdmVudCxcbiAgICAgIGRhdGFUcmFuc2ZlcixcbiAgICAgIHR5cGUsXG4gICAgICAuLi5nZXRUYXJnZXRQcm9wcyh0YXJnZXQpXG4gICAgfSk7XG4gICAgY29uc3QgbWFrZURuZEV2ZW50ID0gKHR5cGUsIHRhcmdldCwgZGF0YVRyYW5zZmVyKSA9PiB7XG4gICAgICBjb25zdCBmYWlsID0gZGllKCdGdW5jdGlvbiBub3Qgc3VwcG9ydGVkIG9uIHNpbXVsYXRlZCBldmVudC4nKTtcbiAgICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxCdWJibGU6IGZhbHNlLFxuICAgICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgICAgICBjb21wb3NlZDogZmFsc2UsXG4gICAgICAgIGN1cnJlbnRUYXJnZXQ6IG51bGwsXG4gICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGZhbHNlLFxuICAgICAgICBldmVudFBoYXNlOiAwLFxuICAgICAgICBpc1RydXN0ZWQ6IHRydWUsXG4gICAgICAgIHJldHVyblZhbHVlOiBmYWxzZSxcbiAgICAgICAgdGltZVN0YW1wOiAwLFxuICAgICAgICB0eXBlLFxuICAgICAgICBjb21wb3NlZFBhdGg6IGZhaWwsXG4gICAgICAgIGluaXRFdmVudDogZmFpbCxcbiAgICAgICAgcHJldmVudERlZmF1bHQ6IG5vb3AsXG4gICAgICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogbm9vcCxcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiBub29wLFxuICAgICAgICBBVF9UQVJHRVQ6IHdpbmRvdy5FdmVudC5BVF9UQVJHRVQsXG4gICAgICAgIEJVQkJMSU5HX1BIQVNFOiB3aW5kb3cuRXZlbnQuQlVCQkxJTkdfUEhBU0UsXG4gICAgICAgIENBUFRVUklOR19QSEFTRTogd2luZG93LkV2ZW50LkNBUFRVUklOR19QSEFTRSxcbiAgICAgICAgTk9ORTogd2luZG93LkV2ZW50Lk5PTkUsXG4gICAgICAgIGFsdEtleTogZmFsc2UsXG4gICAgICAgIGJ1dHRvbjogMCxcbiAgICAgICAgYnV0dG9uczogMCxcbiAgICAgICAgY2xpZW50WDogMCxcbiAgICAgICAgY2xpZW50WTogMCxcbiAgICAgICAgY3RybEtleTogZmFsc2UsXG4gICAgICAgIG1ldGFLZXk6IGZhbHNlLFxuICAgICAgICBtb3ZlbWVudFg6IDAsXG4gICAgICAgIG1vdmVtZW50WTogMCxcbiAgICAgICAgb2Zmc2V0WDogMCxcbiAgICAgICAgb2Zmc2V0WTogMCxcbiAgICAgICAgcGFnZVg6IDAsXG4gICAgICAgIHBhZ2VZOiAwLFxuICAgICAgICByZWxhdGVkVGFyZ2V0OiBudWxsLFxuICAgICAgICBzY3JlZW5YOiAwLFxuICAgICAgICBzY3JlZW5ZOiAwLFxuICAgICAgICBzaGlmdEtleTogZmFsc2UsXG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IDAsXG4gICAgICAgIGRldGFpbDogMCxcbiAgICAgICAgdmlldzogbnVsbCxcbiAgICAgICAgd2hpY2g6IDAsXG4gICAgICAgIGluaXRVSUV2ZW50OiBmYWlsLFxuICAgICAgICBpbml0TW91c2VFdmVudDogZmFpbCxcbiAgICAgICAgZ2V0TW9kaWZpZXJTdGF0ZTogZmFpbCxcbiAgICAgICAgZGF0YVRyYW5zZmVyLFxuICAgICAgICAuLi5nZXRUYXJnZXRQcm9wcyh0YXJnZXQpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGV2ZW50O1xuICAgIH07XG4gICAgY29uc3QgbWFrZURhdGFUcmFuc2ZlckNvcHlGb3JEcmFnRXZlbnQgPSAoZGF0YVRyYW5zZmVyLCBldmVudFR5cGUpID0+IHtcbiAgICAgIGNvbnN0IGNvcHkgPSBjbG9uZURhdGFUcmFuc2ZlcihkYXRhVHJhbnNmZXIpO1xuICAgICAgaWYgKGV2ZW50VHlwZSA9PT0gJ2RyYWdzdGFydCcpIHtcbiAgICAgICAgc2V0RHJhZ3N0YXJ0RXZlbnQoY29weSk7XG4gICAgICAgIHNldFJlYWRXcml0ZU1vZGUoY29weSk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2Ryb3AnKSB7XG4gICAgICAgIHNldERyb3BFdmVudChjb3B5KTtcbiAgICAgICAgc2V0UmVhZE9ubHlNb2RlKGNvcHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0RHJhZ2VuZEV2ZW50KGNvcHkpO1xuICAgICAgICBzZXRQcm90ZWN0ZWRNb2RlKGNvcHkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfTtcbiAgICBjb25zdCBtYWtlRHJhZ0V2ZW50ID0gKHR5cGUsIHRhcmdldCwgZGF0YVRyYW5zZmVyLCBtb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBkYXRhVHJhbnNmZXJGb3JEaXNwYXRjaCA9IG1ha2VEYXRhVHJhbnNmZXJDb3B5Rm9yRHJhZ0V2ZW50KGRhdGFUcmFuc2ZlciwgdHlwZSk7XG4gICAgICByZXR1cm4gaXNVbmRlZmluZWQobW91c2VFdmVudCkgPyBtYWtlRG5kRXZlbnQodHlwZSwgdGFyZ2V0LCBkYXRhVHJhbnNmZXJGb3JEaXNwYXRjaCkgOiBtYWtlRG5kRXZlbnRGcm9tTW91c2VFdmVudCh0eXBlLCBtb3VzZUV2ZW50LCB0YXJnZXQsIGRhdGFUcmFuc2ZlckZvckRpc3BhdGNoKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2Nyb2xsUGl4ZWxzUGVySW50ZXJ2YWwgPSAzMjtcbiAgICBjb25zdCBzY3JvbGxJbnRlcnZhbFZhbHVlID0gMTAwO1xuICAgIGNvbnN0IG1vdXNlUmFuZ2VUb1RyaWdnZXJTY3JvbGxJbnNpZGVFZGl0b3IgPSA4O1xuICAgIGNvbnN0IG1vdXNlUmFuZ2VUb1RyaWdnZXJTY3JvbGxPdXRzaWRlRWRpdG9yID0gMTY7XG4gICAgY29uc3QgaXNDb250ZW50RWRpdGFibGVGYWxzZSQxID0gaXNDb250ZW50RWRpdGFibGVGYWxzZSRiO1xuICAgIGNvbnN0IGlzQ29udGVudEVkaXRhYmxlID0gb3IoaXNDb250ZW50RWRpdGFibGVGYWxzZSQxLCBpc0NvbnRlbnRFZGl0YWJsZVRydWUkMyk7XG4gICAgY29uc3QgaXNEcmFnZ2FibGUgPSAoZG9tLCByb290RWxtLCBlbG0pID0+IGlzQ29udGVudEVkaXRhYmxlRmFsc2UkMShlbG0pICYmIGVsbSAhPT0gcm9vdEVsbSAmJiBkb20uaXNFZGl0YWJsZShlbG0ucGFyZW50RWxlbWVudCk7XG4gICAgY29uc3QgaXNWYWxpZERyb3BUYXJnZXQgPSAoZWRpdG9yLCB0YXJnZXRFbGVtZW50LCBkcmFnRWxlbWVudCkgPT4ge1xuICAgICAgaWYgKGlzTnVsbGFibGUodGFyZ2V0RWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0YXJnZXRFbGVtZW50ID09PSBkcmFnRWxlbWVudCB8fCBlZGl0b3IuZG9tLmlzQ2hpbGRPZih0YXJnZXRFbGVtZW50LCBkcmFnRWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVkaXRvci5kb20uaXNFZGl0YWJsZSh0YXJnZXRFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUdob3N0ID0gKGVkaXRvciwgZWxtLCB3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgY29uc3QgY2xvbmVkRWxtID0gZWxtLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgIGRvbS5zZXRTdHlsZXMoY2xvbmVkRWxtLCB7XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHRcbiAgICAgIH0pO1xuICAgICAgZG9tLnNldEF0dHJpYihjbG9uZWRFbG0sICdkYXRhLW1jZS1zZWxlY3RlZCcsIG51bGwpO1xuICAgICAgY29uc3QgZ2hvc3RFbG0gPSBkb20uY3JlYXRlKCdkaXYnLCB7XG4gICAgICAgICdjbGFzcyc6ICdtY2UtZHJhZy1jb250YWluZXInLFxuICAgICAgICAnZGF0YS1tY2UtYm9ndXMnOiAnYWxsJyxcbiAgICAgICAgJ3Vuc2VsZWN0YWJsZSc6ICdvbicsXG4gICAgICAgICdjb250ZW50ZWRpdGFibGUnOiAnZmFsc2UnXG4gICAgICB9KTtcbiAgICAgIGRvbS5zZXRTdHlsZXMoZ2hvc3RFbG0sIHtcbiAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgIG9wYWNpdHk6IDAuNSxcbiAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICBib3JkZXI6IDAsXG4gICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgIG1hcmdpbjogMCxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgfSk7XG4gICAgICBkb20uc2V0U3R5bGVzKGNsb25lZEVsbSwge1xuICAgICAgICBtYXJnaW46IDAsXG4gICAgICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnXG4gICAgICB9KTtcbiAgICAgIGdob3N0RWxtLmFwcGVuZENoaWxkKGNsb25lZEVsbSk7XG4gICAgICByZXR1cm4gZ2hvc3RFbG07XG4gICAgfTtcbiAgICBjb25zdCBhcHBlbmRHaG9zdFRvQm9keSA9IChnaG9zdEVsbSwgYm9keUVsbSkgPT4ge1xuICAgICAgaWYgKGdob3N0RWxtLnBhcmVudE5vZGUgIT09IGJvZHlFbG0pIHtcbiAgICAgICAgYm9keUVsbS5hcHBlbmRDaGlsZChnaG9zdEVsbSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzY3JvbGxFZGl0b3IgPSAoZGlyZWN0aW9uLCBhbW91bnQpID0+IHdpbiA9PiAoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gZGlyZWN0aW9uID09PSAnbGVmdCcgPyB3aW4uc2Nyb2xsWCA6IHdpbi5zY3JvbGxZO1xuICAgICAgd2luLnNjcm9sbCh7XG4gICAgICAgIFtkaXJlY3Rpb25dOiBjdXJyZW50ICsgYW1vdW50LFxuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCdcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2Nyb2xsTGVmdCA9IHNjcm9sbEVkaXRvcignbGVmdCcsIC1zY3JvbGxQaXhlbHNQZXJJbnRlcnZhbCk7XG4gICAgY29uc3Qgc2Nyb2xsUmlnaHQgPSBzY3JvbGxFZGl0b3IoJ2xlZnQnLCBzY3JvbGxQaXhlbHNQZXJJbnRlcnZhbCk7XG4gICAgY29uc3Qgc2Nyb2xsVXAgPSBzY3JvbGxFZGl0b3IoJ3RvcCcsIC1zY3JvbGxQaXhlbHNQZXJJbnRlcnZhbCk7XG4gICAgY29uc3Qgc2Nyb2xsRG93biA9IHNjcm9sbEVkaXRvcigndG9wJywgc2Nyb2xsUGl4ZWxzUGVySW50ZXJ2YWwpO1xuICAgIGNvbnN0IG1vdmVHaG9zdCA9IChnaG9zdEVsbSwgcG9zaXRpb24sIHdpZHRoLCBoZWlnaHQsIG1heFgsIG1heFksIG1vdXNlWSwgbW91c2VYLCBjb250ZW50QXJlYUNvbnRhaW5lciwgd2luLCBzdGF0ZSwgbW91c2VFdmVudE9yaWdpbmF0ZWRGcm9tV2l0aGluVGhlRWRpdG9yKSA9PiB7XG4gICAgICBsZXQgb3ZlcmZsb3dYID0gMCwgb3ZlcmZsb3dZID0gMDtcbiAgICAgIGdob3N0RWxtLnN0eWxlLmxlZnQgPSBwb3NpdGlvbi5wYWdlWCArICdweCc7XG4gICAgICBnaG9zdEVsbS5zdHlsZS50b3AgPSBwb3NpdGlvbi5wYWdlWSArICdweCc7XG4gICAgICBpZiAocG9zaXRpb24ucGFnZVggKyB3aWR0aCA+IG1heFgpIHtcbiAgICAgICAgb3ZlcmZsb3dYID0gcG9zaXRpb24ucGFnZVggKyB3aWR0aCAtIG1heFg7XG4gICAgICB9XG4gICAgICBpZiAocG9zaXRpb24ucGFnZVkgKyBoZWlnaHQgPiBtYXhZKSB7XG4gICAgICAgIG92ZXJmbG93WSA9IHBvc2l0aW9uLnBhZ2VZICsgaGVpZ2h0IC0gbWF4WTtcbiAgICAgIH1cbiAgICAgIGdob3N0RWxtLnN0eWxlLndpZHRoID0gd2lkdGggLSBvdmVyZmxvd1ggKyAncHgnO1xuICAgICAgZ2hvc3RFbG0uc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0IC0gb3ZlcmZsb3dZICsgJ3B4JztcbiAgICAgIGNvbnN0IGNsaWVudEhlaWdodCA9IGNvbnRlbnRBcmVhQ29udGFpbmVyLmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IGNsaWVudFdpZHRoID0gY29udGVudEFyZWFDb250YWluZXIuY2xpZW50V2lkdGg7XG4gICAgICBjb25zdCBvdXRlck1vdXNlWSA9IG1vdXNlWSArIGNvbnRlbnRBcmVhQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICAgIGNvbnN0IG91dGVyTW91c2VYID0gbW91c2VYICsgY29udGVudEFyZWFDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgIHN0YXRlLm9uKHN0YXRlID0+IHtcbiAgICAgICAgc3RhdGUuaW50ZXJ2YWxJZC5jbGVhcigpO1xuICAgICAgICBpZiAoc3RhdGUuZHJhZ2dpbmcgJiYgbW91c2VFdmVudE9yaWdpbmF0ZWRGcm9tV2l0aGluVGhlRWRpdG9yKSB7XG4gICAgICAgICAgaWYgKG1vdXNlWSArIG1vdXNlUmFuZ2VUb1RyaWdnZXJTY3JvbGxJbnNpZGVFZGl0b3IgPj0gY2xpZW50SGVpZ2h0KSB7XG4gICAgICAgICAgICBzdGF0ZS5pbnRlcnZhbElkLnNldChzY3JvbGxEb3duKHdpbikpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobW91c2VZIC0gbW91c2VSYW5nZVRvVHJpZ2dlclNjcm9sbEluc2lkZUVkaXRvciA8PSAwKSB7XG4gICAgICAgICAgICBzdGF0ZS5pbnRlcnZhbElkLnNldChzY3JvbGxVcCh3aW4pKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG1vdXNlWCArIG1vdXNlUmFuZ2VUb1RyaWdnZXJTY3JvbGxJbnNpZGVFZGl0b3IgPj0gY2xpZW50V2lkdGgpIHtcbiAgICAgICAgICAgIHN0YXRlLmludGVydmFsSWQuc2V0KHNjcm9sbFJpZ2h0KHdpbikpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobW91c2VYIC0gbW91c2VSYW5nZVRvVHJpZ2dlclNjcm9sbEluc2lkZUVkaXRvciA8PSAwKSB7XG4gICAgICAgICAgICBzdGF0ZS5pbnRlcnZhbElkLnNldChzY3JvbGxMZWZ0KHdpbikpO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3V0ZXJNb3VzZVkgKyBtb3VzZVJhbmdlVG9UcmlnZ2VyU2Nyb2xsT3V0c2lkZUVkaXRvciA+PSB3aW5kb3cuaW5uZXJIZWlnaHQpIHtcbiAgICAgICAgICAgIHN0YXRlLmludGVydmFsSWQuc2V0KHNjcm9sbERvd24od2luZG93KSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChvdXRlck1vdXNlWSAtIG1vdXNlUmFuZ2VUb1RyaWdnZXJTY3JvbGxPdXRzaWRlRWRpdG9yIDw9IDApIHtcbiAgICAgICAgICAgIHN0YXRlLmludGVydmFsSWQuc2V0KHNjcm9sbFVwKHdpbmRvdykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3V0ZXJNb3VzZVggKyBtb3VzZVJhbmdlVG9UcmlnZ2VyU2Nyb2xsT3V0c2lkZUVkaXRvciA+PSB3aW5kb3cuaW5uZXJXaWR0aCkge1xuICAgICAgICAgICAgc3RhdGUuaW50ZXJ2YWxJZC5zZXQoc2Nyb2xsUmlnaHQod2luZG93KSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChvdXRlck1vdXNlWCAtIG1vdXNlUmFuZ2VUb1RyaWdnZXJTY3JvbGxPdXRzaWRlRWRpdG9yIDw9IDApIHtcbiAgICAgICAgICAgIHN0YXRlLmludGVydmFsSWQuc2V0KHNjcm9sbExlZnQod2luZG93KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZUVsZW1lbnQgPSBlbG0gPT4ge1xuICAgICAgaWYgKGVsbSAmJiBlbG0ucGFyZW50Tm9kZSkge1xuICAgICAgICBlbG0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbG0pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlRWxlbWVudFdpdGhQYWRkaW5nID0gKGRvbSwgZWxtKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnRCbG9jayA9IGRvbS5nZXRQYXJlbnQoZWxtLnBhcmVudE5vZGUsIGRvbS5pc0Jsb2NrKTtcbiAgICAgIHJlbW92ZUVsZW1lbnQoZWxtKTtcbiAgICAgIGlmIChwYXJlbnRCbG9jayAmJiBwYXJlbnRCbG9jayAhPT0gZG9tLmdldFJvb3QoKSAmJiBkb20uaXNFbXB0eShwYXJlbnRCbG9jaykpIHtcbiAgICAgICAgZmlsbFdpdGhQYWRkaW5nQnIoU3VnYXJFbGVtZW50LmZyb21Eb20ocGFyZW50QmxvY2spKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlzTGVmdE1vdXNlQnV0dG9uUHJlc3NlZCA9IGUgPT4gZS5idXR0b24gPT09IDA7XG4gICAgY29uc3QgYXBwbHlSZWxQb3MgPSAoc3RhdGUsIHBvc2l0aW9uKSA9PiAoe1xuICAgICAgcGFnZVg6IHBvc2l0aW9uLnBhZ2VYIC0gc3RhdGUucmVsWCxcbiAgICAgIHBhZ2VZOiBwb3NpdGlvbi5wYWdlWSArIDVcbiAgICB9KTtcbiAgICBjb25zdCBzdGFydCA9IChzdGF0ZSwgZWRpdG9yKSA9PiBlID0+IHtcbiAgICAgIGlmIChpc0xlZnRNb3VzZUJ1dHRvblByZXNzZWQoZSkpIHtcbiAgICAgICAgY29uc3QgY2VFbG0gPSBmaW5kJDIoZWRpdG9yLmRvbS5nZXRQYXJlbnRzKGUudGFyZ2V0KSwgaXNDb250ZW50RWRpdGFibGUpLmdldE9yKG51bGwpO1xuICAgICAgICBpZiAoaXNOb25OdWxsYWJsZShjZUVsbSkgJiYgaXNEcmFnZ2FibGUoZWRpdG9yLmRvbSwgZWRpdG9yLmdldEJvZHkoKSwgY2VFbG0pKSB7XG4gICAgICAgICAgY29uc3QgZWxtUG9zID0gZWRpdG9yLmRvbS5nZXRQb3MoY2VFbG0pO1xuICAgICAgICAgIGNvbnN0IGJvZHlFbG0gPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgICAgIGNvbnN0IGRvY0VsbSA9IGVkaXRvci5nZXREb2MoKS5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgICAgc3RhdGUuc2V0KHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IGNlRWxtLFxuICAgICAgICAgICAgZGF0YVRyYW5zZmVyOiBjcmVhdGVEYXRhVHJhbnNmZXIoKSxcbiAgICAgICAgICAgIGRyYWdnaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIHNjcmVlblg6IGUuc2NyZWVuWCxcbiAgICAgICAgICAgIHNjcmVlblk6IGUuc2NyZWVuWSxcbiAgICAgICAgICAgIG1heFg6IChlZGl0b3IuaW5saW5lID8gYm9keUVsbS5zY3JvbGxXaWR0aCA6IGRvY0VsbS5vZmZzZXRXaWR0aCkgLSAyLFxuICAgICAgICAgICAgbWF4WTogKGVkaXRvci5pbmxpbmUgPyBib2R5RWxtLnNjcm9sbEhlaWdodCA6IGRvY0VsbS5vZmZzZXRIZWlnaHQpIC0gMixcbiAgICAgICAgICAgIHJlbFg6IGUucGFnZVggLSBlbG1Qb3MueCxcbiAgICAgICAgICAgIHJlbFk6IGUucGFnZVkgLSBlbG1Qb3MueSxcbiAgICAgICAgICAgIHdpZHRoOiBjZUVsbS5vZmZzZXRXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogY2VFbG0ub2Zmc2V0SGVpZ2h0LFxuICAgICAgICAgICAgZ2hvc3Q6IGNyZWF0ZUdob3N0KGVkaXRvciwgY2VFbG0sIGNlRWxtLm9mZnNldFdpZHRoLCBjZUVsbS5vZmZzZXRIZWlnaHQpLFxuICAgICAgICAgICAgaW50ZXJ2YWxJZDogcmVwZWF0YWJsZShzY3JvbGxJbnRlcnZhbFZhbHVlKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBwbGFjZUNhcmV0QXQgPSAoZWRpdG9yLCBjbGllbnRYLCBjbGllbnRZKSA9PiB7XG4gICAgICBlZGl0b3IuX3NlbGVjdGlvbk92ZXJyaWRlcy5oaWRlRmFrZUNhcmV0KCk7XG4gICAgICBjbG9zZXN0RmFrZUNhcmV0Q2FuZGlkYXRlKGVkaXRvci5nZXRCb2R5KCksIGNsaWVudFgsIGNsaWVudFkpLmZvbGQoKCkgPT4gZWRpdG9yLnNlbGVjdGlvbi5wbGFjZUNhcmV0QXQoY2xpZW50WCwgY2xpZW50WSksIGNhcmV0SW5mbyA9PiB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gZWRpdG9yLl9zZWxlY3Rpb25PdmVycmlkZXMuc2hvd0NhcmV0KDEsIGNhcmV0SW5mby5ub2RlLCBjYXJldEluZm8ucG9zaXRpb24gPT09IEZha2VDYXJldFBvc2l0aW9uLkJlZm9yZSwgZmFsc2UpO1xuICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhyYW5nZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5wbGFjZUNhcmV0QXQoY2xpZW50WCwgY2xpZW50WSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZGlzcGF0Y2hEcmFnRXZlbnQgPSAoZWRpdG9yLCB0eXBlLCB0YXJnZXQsIGRhdGFUcmFuc2ZlciwgbW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKHR5cGUgPT09ICdkcmFnc3RhcnQnKSB7XG4gICAgICAgIHNldEh0bWxEYXRhKGRhdGFUcmFuc2ZlciwgZWRpdG9yLmRvbS5nZXRPdXRlckhUTUwodGFyZ2V0KSk7XG4gICAgICB9XG4gICAgICBjb25zdCBldmVudCA9IG1ha2VEcmFnRXZlbnQodHlwZSwgdGFyZ2V0LCBkYXRhVHJhbnNmZXIsIG1vdXNlRXZlbnQpO1xuICAgICAgY29uc3QgYXJncyA9IGVkaXRvci5kaXNwYXRjaCh0eXBlLCBldmVudCk7XG4gICAgICByZXR1cm4gYXJncztcbiAgICB9O1xuICAgIGNvbnN0IG1vdmUgPSAoc3RhdGUsIGVkaXRvcikgPT4ge1xuICAgICAgY29uc3QgdGhyb3R0bGVkUGxhY2VDYXJldEF0ID0gZmlyc3QkMSgoY2xpZW50WCwgY2xpZW50WSkgPT4gcGxhY2VDYXJldEF0KGVkaXRvciwgY2xpZW50WCwgY2xpZW50WSksIDApO1xuICAgICAgZWRpdG9yLm9uKCdyZW1vdmUnLCB0aHJvdHRsZWRQbGFjZUNhcmV0QXQuY2FuY2VsKTtcbiAgICAgIGNvbnN0IHN0YXRlXyA9IHN0YXRlO1xuICAgICAgcmV0dXJuIGUgPT4gc3RhdGUub24oc3RhdGUgPT4ge1xuICAgICAgICBjb25zdCBtb3ZlbWVudCA9IE1hdGgubWF4KE1hdGguYWJzKGUuc2NyZWVuWCAtIHN0YXRlLnNjcmVlblgpLCBNYXRoLmFicyhlLnNjcmVlblkgLSBzdGF0ZS5zY3JlZW5ZKSk7XG4gICAgICAgIGlmICghc3RhdGUuZHJhZ2dpbmcgJiYgbW92ZW1lbnQgPiAxMCkge1xuICAgICAgICAgIGNvbnN0IGFyZ3MgPSBkaXNwYXRjaERyYWdFdmVudChlZGl0b3IsICdkcmFnc3RhcnQnLCBzdGF0ZS5lbGVtZW50LCBzdGF0ZS5kYXRhVHJhbnNmZXIsIGUpO1xuICAgICAgICAgIGlmIChpc05vbk51bGxhYmxlKGFyZ3MuZGF0YVRyYW5zZmVyKSkge1xuICAgICAgICAgICAgc3RhdGUuZGF0YVRyYW5zZmVyID0gYXJncy5kYXRhVHJhbnNmZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhcmdzLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0YXRlLmRyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUuZHJhZ2dpbmcpIHtcbiAgICAgICAgICBjb25zdCBtb3VzZUV2ZW50T3JpZ2luYXRlZEZyb21XaXRoaW5UaGVFZGl0b3IgPSBlLmN1cnJlbnRUYXJnZXQgPT09IGVkaXRvci5nZXREb2MoKS5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0UG9zID0gYXBwbHlSZWxQb3Moc3RhdGUsIGNhbGMoZWRpdG9yLCBlKSk7XG4gICAgICAgICAgYXBwZW5kR2hvc3RUb0JvZHkoc3RhdGUuZ2hvc3QsIGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgICAgIG1vdmVHaG9zdChzdGF0ZS5naG9zdCwgdGFyZ2V0UG9zLCBzdGF0ZS53aWR0aCwgc3RhdGUuaGVpZ2h0LCBzdGF0ZS5tYXhYLCBzdGF0ZS5tYXhZLCBlLmNsaWVudFksIGUuY2xpZW50WCwgZWRpdG9yLmdldENvbnRlbnRBcmVhQ29udGFpbmVyKCksIGVkaXRvci5nZXRXaW4oKSwgc3RhdGVfLCBtb3VzZUV2ZW50T3JpZ2luYXRlZEZyb21XaXRoaW5UaGVFZGl0b3IpO1xuICAgICAgICAgIHRocm90dGxlZFBsYWNlQ2FyZXRBdC50aHJvdHRsZShlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0UmF3VGFyZ2V0ID0gc2VsZWN0aW9uID0+IHtcbiAgICAgIGNvbnN0IHNlbCA9IHNlbGVjdGlvbi5nZXRTZWwoKTtcbiAgICAgIGlmIChpc05vbk51bGxhYmxlKHNlbCkpIHtcbiAgICAgICAgY29uc3Qgcm5nID0gc2VsLmdldFJhbmdlQXQoMCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyID0gcm5nLnN0YXJ0Q29udGFpbmVyO1xuICAgICAgICByZXR1cm4gaXNUZXh0JGEoc3RhcnRDb250YWluZXIpID8gc3RhcnRDb250YWluZXIucGFyZW50Tm9kZSA6IHN0YXJ0Q29udGFpbmVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBkcm9wID0gKHN0YXRlLCBlZGl0b3IpID0+IGUgPT4ge1xuICAgICAgc3RhdGUub24oc3RhdGUgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHN0YXRlLmludGVydmFsSWQuY2xlYXIoKTtcbiAgICAgICAgaWYgKHN0YXRlLmRyYWdnaW5nKSB7XG4gICAgICAgICAgaWYgKGlzVmFsaWREcm9wVGFyZ2V0KGVkaXRvciwgZ2V0UmF3VGFyZ2V0KGVkaXRvci5zZWxlY3Rpb24pLCBzdGF0ZS5lbGVtZW50KSkge1xuICAgICAgICAgICAgY29uc3QgZHJvcFRhcmdldCA9IChfYSA9IGVkaXRvci5nZXREb2MoKS5lbGVtZW50RnJvbVBvaW50KGUuY2xpZW50WCwgZS5jbGllbnRZKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZWRpdG9yLmdldEJvZHkoKTtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBkaXNwYXRjaERyYWdFdmVudChlZGl0b3IsICdkcm9wJywgZHJvcFRhcmdldCwgc3RhdGUuZGF0YVRyYW5zZmVyLCBlKTtcbiAgICAgICAgICAgIGlmICghYXJncy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgICAgICBlZGl0b3IudW5kb01hbmFnZXIudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlbW92ZUVsZW1lbnRXaXRoUGFkZGluZyhlZGl0b3IuZG9tLCBzdGF0ZS5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBnZXRIdG1sRGF0YShzdGF0ZS5kYXRhVHJhbnNmZXIpLmVhY2goY29udGVudCA9PiBlZGl0b3IuaW5zZXJ0Q29udGVudChjb250ZW50KSk7XG4gICAgICAgICAgICAgICAgZWRpdG9yLl9zZWxlY3Rpb25PdmVycmlkZXMuaGlkZUZha2VDYXJldCgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZGlzcGF0Y2hEcmFnRXZlbnQoZWRpdG9yLCAnZHJhZ2VuZCcsIGVkaXRvci5nZXRCb2R5KCksIHN0YXRlLmRhdGFUcmFuc2ZlciwgZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmVtb3ZlRHJhZ1N0YXRlKHN0YXRlKTtcbiAgICB9O1xuICAgIGNvbnN0IHN0b3BEcmFnZ2luZyA9IChzdGF0ZSwgZWRpdG9yLCBlKSA9PiB7XG4gICAgICBzdGF0ZS5vbihzdGF0ZSA9PiB7XG4gICAgICAgIHN0YXRlLmludGVydmFsSWQuY2xlYXIoKTtcbiAgICAgICAgaWYgKHN0YXRlLmRyYWdnaW5nKSB7XG4gICAgICAgICAgZS5mb2xkKCgpID0+IGRpc3BhdGNoRHJhZ0V2ZW50KGVkaXRvciwgJ2RyYWdlbmQnLCBzdGF0ZS5lbGVtZW50LCBzdGF0ZS5kYXRhVHJhbnNmZXIpLCBtb3VzZUV2ZW50ID0+IGRpc3BhdGNoRHJhZ0V2ZW50KGVkaXRvciwgJ2RyYWdlbmQnLCBzdGF0ZS5lbGVtZW50LCBzdGF0ZS5kYXRhVHJhbnNmZXIsIG1vdXNlRXZlbnQpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZW1vdmVEcmFnU3RhdGUoc3RhdGUpO1xuICAgIH07XG4gICAgY29uc3Qgc3RvcCA9IChzdGF0ZSwgZWRpdG9yKSA9PiBlID0+IHN0b3BEcmFnZ2luZyhzdGF0ZSwgZWRpdG9yLCBPcHRpb25hbC5zb21lKGUpKTtcbiAgICBjb25zdCByZW1vdmVEcmFnU3RhdGUgPSBzdGF0ZSA9PiB7XG4gICAgICBzdGF0ZS5vbihzdGF0ZSA9PiB7XG4gICAgICAgIHN0YXRlLmludGVydmFsSWQuY2xlYXIoKTtcbiAgICAgICAgcmVtb3ZlRWxlbWVudChzdGF0ZS5naG9zdCk7XG4gICAgICB9KTtcbiAgICAgIHN0YXRlLmNsZWFyKCk7XG4gICAgfTtcbiAgICBjb25zdCBiaW5kRmFrZURyYWdFdmVudHMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgc3RhdGUgPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBwYWdlRG9tID0gRE9NVXRpbHMuRE9NO1xuICAgICAgY29uc3Qgcm9vdERvY3VtZW50ID0gZG9jdW1lbnQ7XG4gICAgICBjb25zdCBkcmFnU3RhcnRIYW5kbGVyID0gc3RhcnQoc3RhdGUsIGVkaXRvcik7XG4gICAgICBjb25zdCBkcmFnSGFuZGxlciA9IG1vdmUoc3RhdGUsIGVkaXRvcik7XG4gICAgICBjb25zdCBkcm9wSGFuZGxlciA9IGRyb3Aoc3RhdGUsIGVkaXRvcik7XG4gICAgICBjb25zdCBkcmFnRW5kSGFuZGxlciA9IHN0b3Aoc3RhdGUsIGVkaXRvcik7XG4gICAgICBlZGl0b3Iub24oJ21vdXNlZG93bicsIGRyYWdTdGFydEhhbmRsZXIpO1xuICAgICAgZWRpdG9yLm9uKCdtb3VzZW1vdmUnLCBkcmFnSGFuZGxlcik7XG4gICAgICBlZGl0b3Iub24oJ21vdXNldXAnLCBkcm9wSGFuZGxlcik7XG4gICAgICBwYWdlRG9tLmJpbmQocm9vdERvY3VtZW50LCAnbW91c2Vtb3ZlJywgZHJhZ0hhbmRsZXIpO1xuICAgICAgcGFnZURvbS5iaW5kKHJvb3REb2N1bWVudCwgJ21vdXNldXAnLCBkcmFnRW5kSGFuZGxlcik7XG4gICAgICBlZGl0b3Iub24oJ3JlbW92ZScsICgpID0+IHtcbiAgICAgICAgcGFnZURvbS51bmJpbmQocm9vdERvY3VtZW50LCAnbW91c2Vtb3ZlJywgZHJhZ0hhbmRsZXIpO1xuICAgICAgICBwYWdlRG9tLnVuYmluZChyb290RG9jdW1lbnQsICdtb3VzZXVwJywgZHJhZ0VuZEhhbmRsZXIpO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ2tleWRvd24nLCBlID0+IHtcbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gVksuRVNDKSB7XG4gICAgICAgICAgc3RvcERyYWdnaW5nKHN0YXRlLCBlZGl0b3IsIE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYmxvY2tVbnN1cHBvcnRlZEZpbGVEcm9wID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHByZXZlbnRGaWxlRHJvcCA9IGUgPT4ge1xuICAgICAgICBpZiAoIWUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICBjb25zdCBkYXRhVHJhbnNmZXIgPSBlLmRhdGFUcmFuc2ZlcjtcbiAgICAgICAgICBpZiAoZGF0YVRyYW5zZmVyICYmIChjb250YWlucyQyKGRhdGFUcmFuc2Zlci50eXBlcywgJ0ZpbGVzJykgfHwgZGF0YVRyYW5zZmVyLmZpbGVzLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBpZiAoZS50eXBlID09PSAnZHJvcCcpIHtcbiAgICAgICAgICAgICAgZGlzcGxheUVycm9yKGVkaXRvciwgJ0Ryb3BwZWQgZmlsZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBwcmV2ZW50RmlsZURyb3BJZlVJRWxlbWVudCA9IGUgPT4ge1xuICAgICAgICBpZiAoaXNVSUVsZW1lbnQoZWRpdG9yLCBlLnRhcmdldCkpIHtcbiAgICAgICAgICBwcmV2ZW50RmlsZURyb3AoZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBzZXR1cCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgcGFnZURvbSA9IERPTVV0aWxzLkRPTTtcbiAgICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgICAgY29uc3QgZG9jID0gZG9jdW1lbnQ7XG4gICAgICAgIGNvbnN0IGVkaXRvclJvb3QgPSBlZGl0b3IuaW5saW5lID8gZWRpdG9yLmdldEJvZHkoKSA6IGVkaXRvci5nZXREb2MoKTtcbiAgICAgICAgY29uc3QgZXZlbnROYW1lcyA9IFtcbiAgICAgICAgICAnZHJvcCcsXG4gICAgICAgICAgJ2RyYWdvdmVyJ1xuICAgICAgICBdO1xuICAgICAgICBlYWNoJGUoZXZlbnROYW1lcywgbmFtZSA9PiB7XG4gICAgICAgICAgcGFnZURvbS5iaW5kKGRvYywgbmFtZSwgcHJldmVudEZpbGVEcm9wSWZVSUVsZW1lbnQpO1xuICAgICAgICAgIGRvbS5iaW5kKGVkaXRvclJvb3QsIG5hbWUsIHByZXZlbnRGaWxlRHJvcCk7XG4gICAgICAgIH0pO1xuICAgICAgICBlZGl0b3Iub24oJ3JlbW92ZScsICgpID0+IHtcbiAgICAgICAgICBlYWNoJGUoZXZlbnROYW1lcywgbmFtZSA9PiB7XG4gICAgICAgICAgICBwYWdlRG9tLnVuYmluZChkb2MsIG5hbWUsIHByZXZlbnRGaWxlRHJvcElmVUlFbGVtZW50KTtcbiAgICAgICAgICAgIGRvbS51bmJpbmQoZWRpdG9yUm9vdCwgbmFtZSwgcHJldmVudEZpbGVEcm9wKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLm9uKCdpbml0JywgKCkgPT4ge1xuICAgICAgICBEZWxheS5zZXRFZGl0b3JUaW1lb3V0KGVkaXRvciwgc2V0dXAsIDApO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBpbml0JDIgPSBlZGl0b3IgPT4ge1xuICAgICAgYmluZEZha2VEcmFnRXZlbnRzKGVkaXRvcik7XG4gICAgICBpZiAoc2hvdWxkQmxvY2tVbnN1cHBvcnRlZERyb3AoZWRpdG9yKSkge1xuICAgICAgICBibG9ja1Vuc3VwcG9ydGVkRmlsZURyb3AoZWRpdG9yKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0dXAkNCA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCByZW5kZXJGb2N1c0NhcmV0ID0gZmlyc3QkMSgoKSA9PiB7XG4gICAgICAgIGlmICghZWRpdG9yLnJlbW92ZWQgJiYgZWRpdG9yLmdldEJvZHkoKS5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICAgICAgaWYgKHJuZy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhcmV0UmFuZ2UgPSByZW5kZXJSYW5nZUNhcmV0KGVkaXRvciwgcm5nLCBmYWxzZSk7XG4gICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhjYXJldFJhbmdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIDApO1xuICAgICAgZWRpdG9yLm9uKCdmb2N1cycsICgpID0+IHtcbiAgICAgICAgcmVuZGVyRm9jdXNDYXJldC50aHJvdHRsZSgpO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ2JsdXInLCAoKSA9PiB7XG4gICAgICAgIHJlbmRlckZvY3VzQ2FyZXQuY2FuY2VsKCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0dXAkMyA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3Iub24oJ2luaXQnLCAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5vbignZm9jdXNpbicsIGUgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0O1xuICAgICAgICAgIGlmIChpc01lZGlhJDIodGFyZ2V0KSkge1xuICAgICAgICAgICAgY29uc3QgY2VSb290ID0gZ2V0Q29udGVudEVkaXRhYmxlUm9vdCQxKGVkaXRvci5nZXRCb2R5KCksIHRhcmdldCk7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gaXNDb250ZW50RWRpdGFibGVGYWxzZSRiKGNlUm9vdCkgPyBjZVJvb3QgOiB0YXJnZXQ7XG4gICAgICAgICAgICBpZiAoZWRpdG9yLnNlbGVjdGlvbi5nZXROb2RlKCkgIT09IG5vZGUpIHtcbiAgICAgICAgICAgICAgc2VsZWN0Tm9kZShlZGl0b3IsIG5vZGUpLmVhY2gocm5nID0+IGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJuZykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNDb250ZW50RWRpdGFibGVGYWxzZSA9IGlzQ29udGVudEVkaXRhYmxlRmFsc2UkYjtcbiAgICBjb25zdCBnZXRDb250ZW50RWRpdGFibGVSb290ID0gKGVkaXRvciwgbm9kZSkgPT4gZ2V0Q29udGVudEVkaXRhYmxlUm9vdCQxKGVkaXRvci5nZXRCb2R5KCksIG5vZGUpO1xuICAgIGNvbnN0IFNlbGVjdGlvbk92ZXJyaWRlcyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uLCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgY29uc3Qgcm9vdE5vZGUgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgY29uc3QgZmFrZUNhcmV0ID0gRmFrZUNhcmV0KGVkaXRvciwgcm9vdE5vZGUsIGRvbS5pc0Jsb2NrLCAoKSA9PiBoYXNGb2N1cyhlZGl0b3IpKTtcbiAgICAgIGNvbnN0IHJlYWxTZWxlY3Rpb25JZCA9ICdzZWwtJyArIGRvbS51bmlxdWVJZCgpO1xuICAgICAgY29uc3QgZWxlbWVudFNlbGVjdGlvbkF0dHIgPSAnZGF0YS1tY2Utc2VsZWN0ZWQnO1xuICAgICAgbGV0IHNlbGVjdGVkRWxlbWVudDtcbiAgICAgIGNvbnN0IGlzRmFrZVNlbGVjdGlvbkVsZW1lbnQgPSBub2RlID0+IGlzTm9uTnVsbGFibGUobm9kZSkgJiYgZG9tLmhhc0NsYXNzKG5vZGUsICdtY2Utb2Zmc2NyZWVuLXNlbGVjdGlvbicpO1xuICAgICAgY29uc3QgaXNGYWtlU2VsZWN0aW9uVGFyZ2V0RWxlbWVudCA9IG5vZGUgPT4gbm9kZSAhPT0gcm9vdE5vZGUgJiYgKGlzQ29udGVudEVkaXRhYmxlRmFsc2Uobm9kZSkgfHwgaXNNZWRpYSQyKG5vZGUpKSAmJiBkb20uaXNDaGlsZE9mKG5vZGUsIHJvb3ROb2RlKSAmJiBkb20uaXNFZGl0YWJsZShub2RlLnBhcmVudE5vZGUpO1xuICAgICAgY29uc3Qgc2V0UmFuZ2UgPSByYW5nZSA9PiB7XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgIHNlbGVjdGlvbi5zZXRSbmcocmFuZ2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2hvd0NhcmV0ID0gKGRpcmVjdGlvbiwgbm9kZSwgYmVmb3JlLCBzY3JvbGxJbnRvVmlldyA9IHRydWUpID0+IHtcbiAgICAgICAgY29uc3QgZSA9IGVkaXRvci5kaXNwYXRjaCgnU2hvd0NhcmV0Jywge1xuICAgICAgICAgIHRhcmdldDogbm9kZSxcbiAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICAgYmVmb3JlXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY3JvbGxJbnRvVmlldykge1xuICAgICAgICAgIHNlbGVjdGlvbi5zY3JvbGxJbnRvVmlldyhub2RlLCBkaXJlY3Rpb24gPT09IC0xKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFrZUNhcmV0LnNob3coYmVmb3JlLCBub2RlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzaG93QmxvY2tDYXJldENvbnRhaW5lciA9IGJsb2NrQ2FyZXRDb250YWluZXIgPT4ge1xuICAgICAgICBpZiAoYmxvY2tDYXJldENvbnRhaW5lci5oYXNBdHRyaWJ1dGUoJ2RhdGEtbWNlLWNhcmV0JykpIHtcbiAgICAgICAgICBzaG93Q2FyZXRDb250YWluZXJCbG9jayhibG9ja0NhcmV0Q29udGFpbmVyKTtcbiAgICAgICAgICBzZWxlY3Rpb24uc2Nyb2xsSW50b1ZpZXcoYmxvY2tDYXJldENvbnRhaW5lcik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCByZWdpc3RlckV2ZW50cyA9ICgpID0+IHtcbiAgICAgICAgZWRpdG9yLm9uKCdjbGljaycsIGUgPT4ge1xuICAgICAgICAgIGlmICghZG9tLmlzRWRpdGFibGUoZS50YXJnZXQpKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBlZGl0b3Iub24oJ2JsdXIgTmV3QmxvY2snLCByZW1vdmVFbGVtZW50U2VsZWN0aW9uKTtcbiAgICAgICAgZWRpdG9yLm9uKCdSZXNpemVXaW5kb3cgRnVsbHNjcmVlblN0YXRlQ2hhbmdlZCcsIGZha2VDYXJldC5yZXBvc2l0aW9uKTtcbiAgICAgICAgZWRpdG9yLm9uKCd0YXAnLCBlID0+IHtcbiAgICAgICAgICBjb25zdCB0YXJnZXRFbG0gPSBlLnRhcmdldDtcbiAgICAgICAgICBjb25zdCBjb250ZW50RWRpdGFibGVSb290ID0gZ2V0Q29udGVudEVkaXRhYmxlUm9vdChlZGl0b3IsIHRhcmdldEVsbSk7XG4gICAgICAgICAgaWYgKGlzQ29udGVudEVkaXRhYmxlRmFsc2UoY29udGVudEVkaXRhYmxlUm9vdCkpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHNlbGVjdE5vZGUoZWRpdG9yLCBjb250ZW50RWRpdGFibGVSb290KS5lYWNoKHNldEVsZW1lbnRTZWxlY3Rpb24pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNGYWtlU2VsZWN0aW9uVGFyZ2V0RWxlbWVudCh0YXJnZXRFbG0pKSB7XG4gICAgICAgICAgICBzZWxlY3ROb2RlKGVkaXRvciwgdGFyZ2V0RWxtKS5lYWNoKHNldEVsZW1lbnRTZWxlY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgIGVkaXRvci5vbignbW91c2Vkb3duJywgZSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0RWxtID0gZS50YXJnZXQ7XG4gICAgICAgICAgaWYgKHRhcmdldEVsbSAhPT0gcm9vdE5vZGUgJiYgdGFyZ2V0RWxtLm5vZGVOYW1lICE9PSAnSFRNTCcgJiYgIWRvbS5pc0NoaWxkT2YodGFyZ2V0RWxtLCByb290Tm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFpc1hZSW5Db250ZW50QXJlYShlZGl0b3IsIGUuY2xpZW50WCwgZS5jbGllbnRZKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZW1vdmVFbGVtZW50U2VsZWN0aW9uKCk7XG4gICAgICAgICAgaGlkZUZha2VDYXJldCgpO1xuICAgICAgICAgIGNvbnN0IGNsb3Nlc3RDb250ZW50RWRpdGFibGUgPSBnZXRDb250ZW50RWRpdGFibGVSb290KGVkaXRvciwgdGFyZ2V0RWxtKTtcbiAgICAgICAgICBpZiAoaXNDb250ZW50RWRpdGFibGVGYWxzZShjbG9zZXN0Q29udGVudEVkaXRhYmxlKSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgc2VsZWN0Tm9kZShlZGl0b3IsIGNsb3Nlc3RDb250ZW50RWRpdGFibGUpLmVhY2goc2V0RWxlbWVudFNlbGVjdGlvbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsb3Nlc3RGYWtlQ2FyZXRDYW5kaWRhdGUocm9vdE5vZGUsIGUuY2xpZW50WCwgZS5jbGllbnRZKS5lYWNoKGNhcmV0SW5mbyA9PiB7XG4gICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBzaG93Q2FyZXQoMSwgY2FyZXRJbmZvLm5vZGUsIGNhcmV0SW5mby5wb3NpdGlvbiA9PT0gRmFrZUNhcmV0UG9zaXRpb24uQmVmb3JlLCBmYWxzZSk7XG4gICAgICAgICAgICAgIHNldFJhbmdlKHJhbmdlKTtcbiAgICAgICAgICAgICAgaWYgKGlzRWxlbWVudCQ2KGNsb3Nlc3RDb250ZW50RWRpdGFibGUpKSB7XG4gICAgICAgICAgICAgICAgY2xvc2VzdENvbnRlbnRFZGl0YWJsZS5mb2N1cygpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVkaXRvci5nZXRCb2R5KCkuZm9jdXMoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLm9uKCdrZXlwcmVzcycsIGUgPT4ge1xuICAgICAgICAgIGlmIChWSy5tb2RpZmllclByZXNzZWQoZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzQ29udGVudEVkaXRhYmxlRmFsc2Uoc2VsZWN0aW9uLmdldE5vZGUoKSkpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBlZGl0b3Iub24oJ0dldFNlbGVjdGlvblJhbmdlJywgZSA9PiB7XG4gICAgICAgICAgbGV0IHJuZyA9IGUucmFuZ2U7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKCFzZWxlY3RlZEVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBybmcgPSBybmcuY2xvbmVSYW5nZSgpO1xuICAgICAgICAgICAgcm5nLnNlbGVjdE5vZGUoc2VsZWN0ZWRFbGVtZW50KTtcbiAgICAgICAgICAgIGUucmFuZ2UgPSBybmc7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLm9uKCdTZXRTZWxlY3Rpb25SYW5nZScsIGUgPT4ge1xuICAgICAgICAgIGUucmFuZ2UgPSBub3JtYWxpemVWb2lkRWxlbWVudFNlbGVjdGlvbihlLnJhbmdlKTtcbiAgICAgICAgICBjb25zdCBybmcgPSBzZXRFbGVtZW50U2VsZWN0aW9uKGUucmFuZ2UsIGUuZm9yd2FyZCk7XG4gICAgICAgICAgaWYgKHJuZykge1xuICAgICAgICAgICAgZS5yYW5nZSA9IHJuZztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBpc1Bhc3RlQmluID0gbm9kZSA9PiBpc0VsZW1lbnQkNihub2RlKSAmJiBub2RlLmlkID09PSAnbWNlcGFzdGViaW4nO1xuICAgICAgICBlZGl0b3Iub24oJ0FmdGVyU2V0U2VsZWN0aW9uUmFuZ2UnLCBlID0+IHtcbiAgICAgICAgICBjb25zdCBybmcgPSBlLnJhbmdlO1xuICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHJuZy5zdGFydENvbnRhaW5lci5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgIGlmICghaXNSYW5nZUluQ2FyZXRDb250YWluZXIocm5nKSAmJiAhaXNQYXN0ZUJpbihwYXJlbnQpKSB7XG4gICAgICAgICAgICBoaWRlRmFrZUNhcmV0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaXNGYWtlU2VsZWN0aW9uRWxlbWVudChwYXJlbnQpKSB7XG4gICAgICAgICAgICByZW1vdmVFbGVtZW50U2VsZWN0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaW5pdCQyKGVkaXRvcik7XG4gICAgICAgIHNldHVwJDQoZWRpdG9yKTtcbiAgICAgICAgc2V0dXAkMyhlZGl0b3IpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzV2l0aGluQ2FyZXRDb250YWluZXIgPSBub2RlID0+IGlzQ2FyZXRDb250YWluZXIkMihub2RlKSB8fCBzdGFydHNXaXRoQ2FyZXRDb250YWluZXIkMShub2RlKSB8fCBlbmRzV2l0aENhcmV0Q29udGFpbmVyJDEobm9kZSk7XG4gICAgICBjb25zdCBpc1JhbmdlSW5DYXJldENvbnRhaW5lciA9IHJuZyA9PiBpc1dpdGhpbkNhcmV0Q29udGFpbmVyKHJuZy5zdGFydENvbnRhaW5lcikgfHwgaXNXaXRoaW5DYXJldENvbnRhaW5lcihybmcuZW5kQ29udGFpbmVyKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZVZvaWRFbGVtZW50U2VsZWN0aW9uID0gcm5nID0+IHtcbiAgICAgICAgY29uc3Qgdm9pZEVsZW1lbnRzID0gZWRpdG9yLnNjaGVtYS5nZXRWb2lkRWxlbWVudHMoKTtcbiAgICAgICAgY29uc3QgbmV3Um5nID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IHJuZy5zdGFydENvbnRhaW5lcjtcbiAgICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSBybmcuc3RhcnRPZmZzZXQ7XG4gICAgICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IHJuZy5lbmRDb250YWluZXI7XG4gICAgICAgIGNvbnN0IGVuZE9mZnNldCA9IHJuZy5lbmRPZmZzZXQ7XG4gICAgICAgIGlmIChoYXMkMih2b2lkRWxlbWVudHMsIHN0YXJ0Q29udGFpbmVyLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICBuZXdSbmcuc2V0U3RhcnRCZWZvcmUoc3RhcnRDb250YWluZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdSbmcuc2V0U3RhcnRBZnRlcihzdGFydENvbnRhaW5lcik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1JuZy5zZXRTdGFydChzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXMkMih2b2lkRWxlbWVudHMsIGVuZENvbnRhaW5lci5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgIGlmIChlbmRPZmZzZXQgPT09IDApIHtcbiAgICAgICAgICAgIG5ld1JuZy5zZXRFbmRCZWZvcmUoZW5kQ29udGFpbmVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3Um5nLnNldEVuZEFmdGVyKGVuZENvbnRhaW5lcik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1JuZy5zZXRFbmQoZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdSbmc7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0dXBPZmZzY3JlZW5TZWxlY3Rpb24gPSAobm9kZSwgdGFyZ2V0Q2xvbmUpID0+IHtcbiAgICAgICAgY29uc3QgYm9keSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgICBjb25zdCBkb2MgPSBlZGl0b3IuZ2V0RG9jKCk7XG4gICAgICAgIGNvbnN0IHJlYWxTZWxlY3Rpb25Db250YWluZXIgPSBkZXNjZW5kYW50KGJvZHksICcjJyArIHJlYWxTZWxlY3Rpb25JZCkuZ2V0T3JUaHVuaygoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3Q29udGFpbmVyID0gU3VnYXJFbGVtZW50LmZyb21IdG1sKCc8ZGl2IGRhdGEtbWNlLWJvZ3VzPVwiYWxsXCIgY2xhc3M9XCJtY2Utb2Zmc2NyZWVuLXNlbGVjdGlvblwiPjwvZGl2PicsIGRvYyk7XG4gICAgICAgICAgc2V0JDMobmV3Q29udGFpbmVyLCAnaWQnLCByZWFsU2VsZWN0aW9uSWQpO1xuICAgICAgICAgIGFwcGVuZCQxKGJvZHksIG5ld0NvbnRhaW5lcik7XG4gICAgICAgICAgcmV0dXJuIG5ld0NvbnRhaW5lcjtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG5ld1JhbmdlID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgICBlbXB0eShyZWFsU2VsZWN0aW9uQ29udGFpbmVyKTtcbiAgICAgICAgYXBwZW5kKHJlYWxTZWxlY3Rpb25Db250YWluZXIsIFtcbiAgICAgICAgICBTdWdhckVsZW1lbnQuZnJvbVRleHQobmJzcCwgZG9jKSxcbiAgICAgICAgICBTdWdhckVsZW1lbnQuZnJvbURvbSh0YXJnZXRDbG9uZSksXG4gICAgICAgICAgU3VnYXJFbGVtZW50LmZyb21UZXh0KG5ic3AsIGRvYylcbiAgICAgICAgXSk7XG4gICAgICAgIG5ld1JhbmdlLnNldFN0YXJ0KHJlYWxTZWxlY3Rpb25Db250YWluZXIuZG9tLmZpcnN0Q2hpbGQsIDEpO1xuICAgICAgICBuZXdSYW5nZS5zZXRFbmQocmVhbFNlbGVjdGlvbkNvbnRhaW5lci5kb20ubGFzdENoaWxkLCAwKTtcbiAgICAgICAgc2V0QWxsKHJlYWxTZWxlY3Rpb25Db250YWluZXIsIHsgdG9wOiBkb20uZ2V0UG9zKG5vZGUsIGVkaXRvci5nZXRCb2R5KCkpLnkgKyAncHgnIH0pO1xuICAgICAgICBmb2N1cyQxKHJlYWxTZWxlY3Rpb25Db250YWluZXIpO1xuICAgICAgICBjb25zdCBzZWwgPSBzZWxlY3Rpb24uZ2V0U2VsKCk7XG4gICAgICAgIGlmIChzZWwpIHtcbiAgICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgICAgc2VsLmFkZFJhbmdlKG5ld1JhbmdlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3UmFuZ2U7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VsZWN0RWxlbWVudCA9IGVsbSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldENsb25lID0gZWxtLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgY29uc3QgZSA9IGVkaXRvci5kaXNwYXRjaCgnT2JqZWN0U2VsZWN0ZWQnLCB7XG4gICAgICAgICAgdGFyZ2V0OiBlbG0sXG4gICAgICAgICAgdGFyZ2V0Q2xvbmVcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmFuZ2UgPSBzZXR1cE9mZnNjcmVlblNlbGVjdGlvbihlbG0sIGUudGFyZ2V0Q2xvbmUpO1xuICAgICAgICBjb25zdCBub2RlRWxtID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWxtKTtcbiAgICAgICAgZWFjaCRlKGRlc2NlbmRhbnRzKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpLCBgKlskeyBlbGVtZW50U2VsZWN0aW9uQXR0ciB9XWApLCBlbG0gPT4ge1xuICAgICAgICAgIGlmICghZXEobm9kZUVsbSwgZWxtKSkge1xuICAgICAgICAgICAgcmVtb3ZlJGEoZWxtLCBlbGVtZW50U2VsZWN0aW9uQXR0cik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFkb20uZ2V0QXR0cmliKGVsbSwgZWxlbWVudFNlbGVjdGlvbkF0dHIpKSB7XG4gICAgICAgICAgZWxtLnNldEF0dHJpYnV0ZShlbGVtZW50U2VsZWN0aW9uQXR0ciwgJzEnKTtcbiAgICAgICAgfVxuICAgICAgICBzZWxlY3RlZEVsZW1lbnQgPSBlbG07XG4gICAgICAgIGhpZGVGYWtlQ2FyZXQoKTtcbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldEVsZW1lbnRTZWxlY3Rpb24gPSAocmFuZ2UsIGZvcndhcmQpID0+IHtcbiAgICAgICAgaWYgKCFyYW5nZSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICAgICAgICBpZiAoIWlzUmFuZ2VJbkNhcmV0Q29udGFpbmVyKHJhbmdlKSkge1xuICAgICAgICAgICAgY29uc3QgZGlyID0gZm9yd2FyZCA/IDEgOiAtMTtcbiAgICAgICAgICAgIGNvbnN0IGNhcmV0UG9zaXRpb24gPSBnZXROb3JtYWxpemVkUmFuZ2VFbmRQb2ludChkaXIsIHJvb3ROb2RlLCByYW5nZSk7XG4gICAgICAgICAgICBjb25zdCBiZWZvcmVOb2RlID0gY2FyZXRQb3NpdGlvbi5nZXROb2RlKCFmb3J3YXJkKTtcbiAgICAgICAgICAgIGlmIChpc05vbk51bGxhYmxlKGJlZm9yZU5vZGUpKSB7XG4gICAgICAgICAgICAgIGlmIChpc0Zha2VDYXJldFRhcmdldChiZWZvcmVOb2RlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaG93Q2FyZXQoZGlyLCBiZWZvcmVOb2RlLCBmb3J3YXJkID8gIWNhcmV0UG9zaXRpb24uaXNBdEVuZCgpIDogZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoaXNDYXJldENvbnRhaW5lcklubGluZShiZWZvcmVOb2RlKSAmJiBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJGIoYmVmb3JlTm9kZS5uZXh0U2libGluZykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBybmcgPSBkb20uY3JlYXRlUm5nKCk7XG4gICAgICAgICAgICAgICAgcm5nLnNldFN0YXJ0KGJlZm9yZU5vZGUsIDApO1xuICAgICAgICAgICAgICAgIHJuZy5zZXRFbmQoYmVmb3JlTm9kZSwgMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJuZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWZ0ZXJOb2RlID0gY2FyZXRQb3NpdGlvbi5nZXROb2RlKGZvcndhcmQpO1xuICAgICAgICAgICAgaWYgKGlzTm9uTnVsbGFibGUoYWZ0ZXJOb2RlKSkge1xuICAgICAgICAgICAgICBpZiAoaXNGYWtlQ2FyZXRUYXJnZXQoYWZ0ZXJOb2RlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaG93Q2FyZXQoZGlyLCBhZnRlck5vZGUsIGZvcndhcmQgPyBmYWxzZSA6ICFjYXJldFBvc2l0aW9uLmlzQXRFbmQoKSwgZmFsc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChpc0NhcmV0Q29udGFpbmVySW5saW5lKGFmdGVyTm9kZSkgJiYgaXNDb250ZW50RWRpdGFibGVGYWxzZSRiKGFmdGVyTm9kZS5wcmV2aW91c1NpYmxpbmcpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm5nID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgICAgICAgICAgIHJuZy5zZXRTdGFydChhZnRlck5vZGUsIDEpO1xuICAgICAgICAgICAgICAgIHJuZy5zZXRFbmQoYWZ0ZXJOb2RlLCAxKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm5nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdGFydENvbnRhaW5lciA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyO1xuICAgICAgICBsZXQgc3RhcnRPZmZzZXQgPSByYW5nZS5zdGFydE9mZnNldDtcbiAgICAgICAgY29uc3QgZW5kT2Zmc2V0ID0gcmFuZ2UuZW5kT2Zmc2V0O1xuICAgICAgICBpZiAoaXNUZXh0JGEoc3RhcnRDb250YWluZXIpICYmIHN0YXJ0T2Zmc2V0ID09PSAwICYmIGlzQ29udGVudEVkaXRhYmxlRmFsc2Uoc3RhcnRDb250YWluZXIucGFyZW50Tm9kZSkpIHtcbiAgICAgICAgICBzdGFydENvbnRhaW5lciA9IHN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICAgICAgc3RhcnRPZmZzZXQgPSBkb20ubm9kZUluZGV4KHN0YXJ0Q29udGFpbmVyKTtcbiAgICAgICAgICBzdGFydENvbnRhaW5lciA9IHN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VsZW1lbnQkNihzdGFydENvbnRhaW5lcikpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5kT2Zmc2V0ID09PSBzdGFydE9mZnNldCArIDEgJiYgc3RhcnRDb250YWluZXIgPT09IHJhbmdlLmVuZENvbnRhaW5lcikge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBzdGFydENvbnRhaW5lci5jaGlsZE5vZGVzW3N0YXJ0T2Zmc2V0XTtcbiAgICAgICAgICBpZiAoaXNGYWtlU2VsZWN0aW9uVGFyZ2V0RWxlbWVudChub2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdEVsZW1lbnQobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlbW92ZUVsZW1lbnRTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnQpIHtcbiAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGVsZW1lbnRTZWxlY3Rpb25BdHRyKTtcbiAgICAgICAgfVxuICAgICAgICBkZXNjZW5kYW50KFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpLCAnIycgKyByZWFsU2VsZWN0aW9uSWQpLmVhY2gocmVtb3ZlJDUpO1xuICAgICAgICBzZWxlY3RlZEVsZW1lbnQgPSBudWxsO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICAgIGZha2VDYXJldC5kZXN0cm95KCk7XG4gICAgICAgIHNlbGVjdGVkRWxlbWVudCA9IG51bGw7XG4gICAgICB9O1xuICAgICAgY29uc3QgaGlkZUZha2VDYXJldCA9ICgpID0+IHtcbiAgICAgICAgZmFrZUNhcmV0LmhpZGUoKTtcbiAgICAgIH07XG4gICAgICBpZiAoIWlzUnRjKGVkaXRvcikpIHtcbiAgICAgICAgcmVnaXN0ZXJFdmVudHMoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNob3dDYXJldCxcbiAgICAgICAgc2hvd0Jsb2NrQ2FyZXRDb250YWluZXIsXG4gICAgICAgIGhpZGVGYWtlQ2FyZXQsXG4gICAgICAgIGRlc3Ryb3lcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGdldE5vcm1hbGl6ZWRUZXh0T2Zmc2V0ID0gKGNvbnRhaW5lciwgb2Zmc2V0KSA9PiB7XG4gICAgICBsZXQgbm9ybWFsaXplZE9mZnNldCA9IG9mZnNldDtcbiAgICAgIGZvciAobGV0IG5vZGUgPSBjb250YWluZXIucHJldmlvdXNTaWJsaW5nOyBpc1RleHQkYShub2RlKTsgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICAgIG5vcm1hbGl6ZWRPZmZzZXQgKz0gbm9kZS5kYXRhLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBub3JtYWxpemVkT2Zmc2V0O1xuICAgIH07XG4gICAgY29uc3QgZ2VuZXJhdGVQYXRoID0gKGRvbSwgcm9vdCwgbm9kZSwgb2Zmc2V0LCBub3JtYWxpemVkKSA9PiB7XG4gICAgICBpZiAoaXNUZXh0JGEobm9kZSkgJiYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gbm9kZS5kYXRhLmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgY29uc3QgcCA9IG5vcm1hbGl6ZWQgJiYgaXNUZXh0JGEobm9kZSkgPyBbZ2V0Tm9ybWFsaXplZFRleHRPZmZzZXQobm9kZSwgb2Zmc2V0KV0gOiBbb2Zmc2V0XTtcbiAgICAgIGxldCBjdXJyZW50ID0gbm9kZTtcbiAgICAgIHdoaWxlIChjdXJyZW50ICE9PSByb290ICYmIGN1cnJlbnQucGFyZW50Tm9kZSkge1xuICAgICAgICBwLnB1c2goZG9tLm5vZGVJbmRleChjdXJyZW50LCBub3JtYWxpemVkKSk7XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudE5vZGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gY3VycmVudCA9PT0gcm9vdCA/IHAucmV2ZXJzZSgpIDogW107XG4gICAgfTtcbiAgICBjb25zdCBnZW5lcmF0ZVBhdGhSYW5nZSA9IChkb20sIHJvb3QsIHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5vZGUsIGVuZE9mZnNldCwgbm9ybWFsaXplZCA9IGZhbHNlKSA9PiB7XG4gICAgICBjb25zdCBzdGFydCA9IGdlbmVyYXRlUGF0aChkb20sIHJvb3QsIHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIG5vcm1hbGl6ZWQpO1xuICAgICAgY29uc3QgZW5kID0gZ2VuZXJhdGVQYXRoKGRvbSwgcm9vdCwgZW5kTm9kZSwgZW5kT2Zmc2V0LCBub3JtYWxpemVkKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBlbmRcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCByZXNvbHZlUGF0aCA9IChyb290LCBwYXRoKSA9PiB7XG4gICAgICBjb25zdCBub2RlUGF0aCA9IHBhdGguc2xpY2UoKTtcbiAgICAgIGNvbnN0IG9mZnNldCA9IG5vZGVQYXRoLnBvcCgpO1xuICAgICAgaWYgKCFpc051bWJlcihvZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXNvbHZlZE5vZGUgPSBmb2xkbChub2RlUGF0aCwgKG9wdE5vZGUsIGluZGV4KSA9PiBvcHROb2RlLmJpbmQobm9kZSA9PiBPcHRpb25hbC5mcm9tKG5vZGUuY2hpbGROb2Rlc1tpbmRleF0pKSwgT3B0aW9uYWwuc29tZShyb290KSk7XG4gICAgICAgIHJldHVybiByZXNvbHZlZE5vZGUuYmluZChub2RlID0+IHtcbiAgICAgICAgICBpZiAoaXNUZXh0JGEobm9kZSkgJiYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gbm9kZS5kYXRhLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgb2Zmc2V0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVzb2x2ZVBhdGhSYW5nZSA9IChyb290LCByYW5nZSkgPT4gcmVzb2x2ZVBhdGgocm9vdCwgcmFuZ2Uuc3RhcnQpLmJpbmQoKHtcbiAgICAgIG5vZGU6IHN0YXJ0Tm9kZSxcbiAgICAgIG9mZnNldDogc3RhcnRPZmZzZXRcbiAgICB9KSA9PiByZXNvbHZlUGF0aChyb290LCByYW5nZS5lbmQpLm1hcCgoe1xuICAgICAgbm9kZTogZW5kTm9kZSxcbiAgICAgIG9mZnNldDogZW5kT2Zmc2V0XG4gICAgfSkgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHJuZy5zZXRTdGFydChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgICAgIHJuZy5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgICAgIHJldHVybiBybmc7XG4gICAgfSkpO1xuICAgIGNvbnN0IGdlbmVyYXRlUGF0aFJhbmdlRnJvbVJhbmdlID0gKGRvbSwgcm9vdCwgcmFuZ2UsIG5vcm1hbGl6ZWQgPSBmYWxzZSkgPT4gZ2VuZXJhdGVQYXRoUmFuZ2UoZG9tLCByb290LCByYW5nZS5zdGFydENvbnRhaW5lciwgcmFuZ2Uuc3RhcnRPZmZzZXQsIHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0LCBub3JtYWxpemVkKTtcblxuICAgIGNvbnN0IGNsZWFuRW1wdHlOb2RlcyA9IChkb20sIG5vZGUsIGlzUm9vdCkgPT4ge1xuICAgICAgaWYgKG5vZGUgJiYgZG9tLmlzRW1wdHkobm9kZSkgJiYgIWlzUm9vdChub2RlKSkge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICAgIGRvbS5yZW1vdmUobm9kZSwgaXNUZXh0JGEobm9kZS5maXJzdENoaWxkKSAmJiBpc1doaXRlc3BhY2VUZXh0KG5vZGUuZmlyc3RDaGlsZC5kYXRhKSk7XG4gICAgICAgIGNsZWFuRW1wdHlOb2Rlcyhkb20sIHBhcmVudCwgaXNSb290KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGRlbGV0ZVJuZyA9IChkb20sIHJuZywgaXNSb290LCBjbGVhbiA9IHRydWUpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0UGFyZW50ID0gcm5nLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICBjb25zdCBlbmRQYXJlbnQgPSBybmcuZW5kQ29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICBybmcuZGVsZXRlQ29udGVudHMoKTtcbiAgICAgIGlmIChjbGVhbiAmJiAhaXNSb290KHJuZy5zdGFydENvbnRhaW5lcikpIHtcbiAgICAgICAgaWYgKGlzVGV4dCRhKHJuZy5zdGFydENvbnRhaW5lcikgJiYgcm5nLnN0YXJ0Q29udGFpbmVyLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgZG9tLnJlbW92ZShybmcuc3RhcnRDb250YWluZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1RleHQkYShybmcuZW5kQ29udGFpbmVyKSAmJiBybmcuZW5kQ29udGFpbmVyLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgZG9tLnJlbW92ZShybmcuZW5kQ29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgICAgICBjbGVhbkVtcHR5Tm9kZXMoZG9tLCBzdGFydFBhcmVudCwgaXNSb290KTtcbiAgICAgICAgaWYgKHN0YXJ0UGFyZW50ICE9PSBlbmRQYXJlbnQpIHtcbiAgICAgICAgICBjbGVhbkVtcHR5Tm9kZXMoZG9tLCBlbmRQYXJlbnQsIGlzUm9vdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdldFBhcmVudEJsb2NrID0gKGVkaXRvciwgcm5nKSA9PiBPcHRpb25hbC5mcm9tKGVkaXRvci5kb20uZ2V0UGFyZW50KHJuZy5zdGFydENvbnRhaW5lciwgZWRpdG9yLmRvbS5pc0Jsb2NrKSk7XG4gICAgY29uc3QgcmVzb2x2ZUZyb21EeW5hbWljUGF0dGVybnMgPSAocGF0dGVyblNldCwgYmxvY2ssIGJlZm9yZVRleHQpID0+IHtcbiAgICAgIGNvbnN0IGR5bmFtaWNQYXR0ZXJucyA9IHBhdHRlcm5TZXQuZHluYW1pY1BhdHRlcm5zTG9va3VwKHtcbiAgICAgICAgdGV4dDogYmVmb3JlVGV4dCxcbiAgICAgICAgYmxvY2tcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucGF0dGVyblNldCxcbiAgICAgICAgYmxvY2tQYXR0ZXJuczogZ2V0QmxvY2tQYXR0ZXJucyhkeW5hbWljUGF0dGVybnMpLmNvbmNhdChwYXR0ZXJuU2V0LmJsb2NrUGF0dGVybnMpLFxuICAgICAgICBpbmxpbmVQYXR0ZXJuczogZ2V0SW5saW5lUGF0dGVybnMoZHluYW1pY1BhdHRlcm5zKS5jb25jYXQocGF0dGVyblNldC5pbmxpbmVQYXR0ZXJucylcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBnZXRCZWZvcmVUZXh0ID0gKGRvbSwgYmxvY2ssIG5vZGUsIG9mZnNldCkgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgcm5nLnNldFN0YXJ0KGJsb2NrLCAwKTtcbiAgICAgIHJuZy5zZXRFbmQobm9kZSwgb2Zmc2V0KTtcbiAgICAgIHJldHVybiBybmcudG9TdHJpbmcoKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3RhcnRzV2l0aFNpbmdsZVNwYWNlID0gcyA9PiAvXlxcc1teXFxzXS8udGVzdChzKTtcbiAgICBjb25zdCBzdHJpcFBhdHRlcm4gPSAoZG9tLCBibG9jaywgcGF0dGVybikgPT4ge1xuICAgICAgY29uc3QgZmlyc3RUZXh0Tm9kZSA9IHRleHRBZnRlcihibG9jaywgMCwgYmxvY2spO1xuICAgICAgZmlyc3RUZXh0Tm9kZS5lYWNoKHNwb3QgPT4ge1xuICAgICAgICBjb25zdCBub2RlID0gc3BvdC5jb250YWluZXI7XG4gICAgICAgIHNjYW5SaWdodChub2RlLCBwYXR0ZXJuLnN0YXJ0Lmxlbmd0aCwgYmxvY2spLmVhY2goZW5kID0+IHtcbiAgICAgICAgICBjb25zdCBybmcgPSBkb20uY3JlYXRlUm5nKCk7XG4gICAgICAgICAgcm5nLnNldFN0YXJ0KG5vZGUsIDApO1xuICAgICAgICAgIHJuZy5zZXRFbmQoZW5kLmNvbnRhaW5lciwgZW5kLm9mZnNldCk7XG4gICAgICAgICAgZGVsZXRlUm5nKGRvbSwgcm5nLCBlID0+IGUgPT09IGJsb2NrKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRleHQgPSBTdWdhckVsZW1lbnQuZnJvbURvbShub2RlKTtcbiAgICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSBnZXQkMyh0ZXh0KTtcbiAgICAgICAgaWYgKHN0YXJ0c1dpdGhTaW5nbGVTcGFjZSh0ZXh0Q29udGVudCkpIHtcbiAgICAgICAgICBzZXQodGV4dCwgdGV4dENvbnRlbnQuc2xpY2UoMSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5UGF0dGVybiQxID0gKGVkaXRvciwgbWF0Y2gpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBwYXR0ZXJuID0gbWF0Y2gucGF0dGVybjtcbiAgICAgIGNvbnN0IHJuZyA9IHJlc29sdmVQYXRoUmFuZ2UoZG9tLmdldFJvb3QoKSwgbWF0Y2gucmFuZ2UpLmdldE9yRGllKCdVbmFibGUgdG8gcmVzb2x2ZSBwYXRoIHJhbmdlJyk7XG4gICAgICBjb25zdCBpc0Jsb2NrRm9ybWF0TmFtZSA9IChuYW1lLCBmb3JtYXR0ZXIpID0+IHtcbiAgICAgICAgY29uc3QgZm9ybWF0U2V0ID0gZm9ybWF0dGVyLmdldChuYW1lKTtcbiAgICAgICAgcmV0dXJuIGlzQXJyYXkkMShmb3JtYXRTZXQpICYmIGhlYWQoZm9ybWF0U2V0KS5leGlzdHMoZm9ybWF0ID0+IGhhcyQyKGZvcm1hdCwgJ2Jsb2NrJykpO1xuICAgICAgfTtcbiAgICAgIGdldFBhcmVudEJsb2NrKGVkaXRvciwgcm5nKS5lYWNoKGJsb2NrID0+IHtcbiAgICAgICAgaWYgKHBhdHRlcm4udHlwZSA9PT0gJ2Jsb2NrLWZvcm1hdCcpIHtcbiAgICAgICAgICBpZiAoaXNCbG9ja0Zvcm1hdE5hbWUocGF0dGVybi5mb3JtYXQsIGVkaXRvci5mb3JtYXR0ZXIpKSB7XG4gICAgICAgICAgICBlZGl0b3IudW5kb01hbmFnZXIudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICAgICAgICBzdHJpcFBhdHRlcm4oZWRpdG9yLmRvbSwgYmxvY2ssIHBhdHRlcm4pO1xuICAgICAgICAgICAgICBlZGl0b3IuZm9ybWF0dGVyLmFwcGx5KHBhdHRlcm4uZm9ybWF0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXR0ZXJuLnR5cGUgPT09ICdibG9jay1jb21tYW5kJykge1xuICAgICAgICAgIGVkaXRvci51bmRvTWFuYWdlci50cmFuc2FjdCgoKSA9PiB7XG4gICAgICAgICAgICBzdHJpcFBhdHRlcm4oZWRpdG9yLmRvbSwgYmxvY2ssIHBhdHRlcm4pO1xuICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKHBhdHRlcm4uY21kLCBmYWxzZSwgcGF0dGVybi52YWx1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBzb3J0UGF0dGVybnMkMSA9IHBhdHRlcm5zID0+IHNvcnQocGF0dGVybnMsIChhLCBiKSA9PiBiLnN0YXJ0Lmxlbmd0aCAtIGEuc3RhcnQubGVuZ3RoKTtcbiAgICBjb25zdCBmaW5kUGF0dGVybiQxID0gKHBhdHRlcm5zLCB0ZXh0KSA9PiB7XG4gICAgICBjb25zdCBzb3J0ZWRQYXR0ZXJucyA9IHNvcnRQYXR0ZXJucyQxKHBhdHRlcm5zKTtcbiAgICAgIGNvbnN0IG51VGV4dCA9IHRleHQucmVwbGFjZShuYnNwLCAnICcpO1xuICAgICAgcmV0dXJuIGZpbmQkMihzb3J0ZWRQYXR0ZXJucywgcGF0dGVybiA9PiB0ZXh0LmluZGV4T2YocGF0dGVybi5zdGFydCkgPT09IDAgfHwgbnVUZXh0LmluZGV4T2YocGF0dGVybi5zdGFydCkgPT09IDApO1xuICAgIH07XG4gICAgY29uc3QgZmluZFBhdHRlcm5zJDEgPSAoZWRpdG9yLCBibG9jaywgcGF0dGVyblNldCwgbm9ybWFsaXplZE1hdGNoZXMpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBmb3JjZWRSb290QmxvY2sgPSBnZXRGb3JjZWRSb290QmxvY2soZWRpdG9yKTtcbiAgICAgIGlmICghZG9tLmlzKGJsb2NrLCBmb3JjZWRSb290QmxvY2spKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJsb2NrVGV4dCA9IChfYSA9IGJsb2NrLnRleHRDb250ZW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgIHJldHVybiBmaW5kUGF0dGVybiQxKHBhdHRlcm5TZXQuYmxvY2tQYXR0ZXJucywgYmxvY2tUZXh0KS5tYXAocGF0dGVybiA9PiB7XG4gICAgICAgIGlmIChUb29scy50cmltKGJsb2NrVGV4dCkubGVuZ3RoID09PSBwYXR0ZXJuLnN0YXJ0Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICAgIHBhdHRlcm4sXG4gICAgICAgICAgICByYW5nZTogZ2VuZXJhdGVQYXRoUmFuZ2UoZG9tLCBkb20uZ2V0Um9vdCgpLCBibG9jaywgMCwgYmxvY2ssIDAsIG5vcm1hbGl6ZWRNYXRjaGVzKVxuICAgICAgICAgIH1dO1xuICAgICAgfSkuZ2V0T3IoW10pO1xuICAgIH07XG4gICAgY29uc3QgYXBwbHlNYXRjaGVzJDEgPSAoZWRpdG9yLCBtYXRjaGVzKSA9PiB7XG4gICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYm9va21hcmsgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldEJvb2ttYXJrKCk7XG4gICAgICBlYWNoJGUobWF0Y2hlcywgbWF0Y2ggPT4gYXBwbHlQYXR0ZXJuJDEoZWRpdG9yLCBtYXRjaCkpO1xuICAgICAgZWRpdG9yLnNlbGVjdGlvbi5tb3ZlVG9Cb29rbWFyayhib29rbWFyayk7XG4gICAgfTtcblxuICAgIGNvbnN0IG5ld01hcmtlciA9IChkb20sIGlkKSA9PiBkb20uY3JlYXRlKCdzcGFuJywge1xuICAgICAgJ2RhdGEtbWNlLXR5cGUnOiAnYm9va21hcmsnLFxuICAgICAgaWRcbiAgICB9KTtcbiAgICBjb25zdCByYW5nZUZyb21NYXJrZXIgPSAoZG9tLCBtYXJrZXIpID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGRvbS5jcmVhdGVSbmcoKTtcbiAgICAgIHJuZy5zZXRTdGFydEFmdGVyKG1hcmtlci5zdGFydCk7XG4gICAgICBybmcuc2V0RW5kQmVmb3JlKG1hcmtlci5lbmQpO1xuICAgICAgcmV0dXJuIHJuZztcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZU1hcmtlciA9IChkb20sIG1hcmtlclByZWZpeCwgcGF0aFJhbmdlKSA9PiB7XG4gICAgICBjb25zdCBybmcgPSByZXNvbHZlUGF0aFJhbmdlKGRvbS5nZXRSb290KCksIHBhdGhSYW5nZSkuZ2V0T3JEaWUoJ1VuYWJsZSB0byByZXNvbHZlIHBhdGggcmFuZ2UnKTtcbiAgICAgIGNvbnN0IHN0YXJ0Tm9kZSA9IHJuZy5zdGFydENvbnRhaW5lcjtcbiAgICAgIGNvbnN0IGVuZE5vZGUgPSBybmcuZW5kQ29udGFpbmVyO1xuICAgICAgY29uc3QgdGV4dEVuZCA9IHJuZy5lbmRPZmZzZXQgPT09IDAgPyBlbmROb2RlIDogZW5kTm9kZS5zcGxpdFRleHQocm5nLmVuZE9mZnNldCk7XG4gICAgICBjb25zdCB0ZXh0U3RhcnQgPSBybmcuc3RhcnRPZmZzZXQgPT09IDAgPyBzdGFydE5vZGUgOiBzdGFydE5vZGUuc3BsaXRUZXh0KHJuZy5zdGFydE9mZnNldCk7XG4gICAgICBjb25zdCBzdGFydFBhcmVudE5vZGUgPSB0ZXh0U3RhcnQucGFyZW50Tm9kZTtcbiAgICAgIGNvbnN0IGVuZFBhcmVudE5vZGUgPSB0ZXh0RW5kLnBhcmVudE5vZGU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmVmaXg6IG1hcmtlclByZWZpeCxcbiAgICAgICAgZW5kOiBlbmRQYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdNYXJrZXIoZG9tLCBtYXJrZXJQcmVmaXggKyAnLWVuZCcpLCB0ZXh0RW5kKSxcbiAgICAgICAgc3RhcnQ6IHN0YXJ0UGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3TWFya2VyKGRvbSwgbWFya2VyUHJlZml4ICsgJy1zdGFydCcpLCB0ZXh0U3RhcnQpXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlTWFya2VyID0gKGRvbSwgbWFya2VyLCBpc1Jvb3QpID0+IHtcbiAgICAgIGNsZWFuRW1wdHlOb2Rlcyhkb20sIGRvbS5nZXQobWFya2VyLnByZWZpeCArICctZW5kJyksIGlzUm9vdCk7XG4gICAgICBjbGVhbkVtcHR5Tm9kZXMoZG9tLCBkb20uZ2V0KG1hcmtlci5wcmVmaXggKyAnLXN0YXJ0JyksIGlzUm9vdCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzUmVwbGFjZW1lbnRQYXR0ZXJuID0gcGF0dGVybiA9PiBwYXR0ZXJuLnN0YXJ0Lmxlbmd0aCA9PT0gMDtcbiAgICBjb25zdCBtYXRjaGVzUGF0dGVybiA9IHBhdHRlcm5Db250ZW50ID0+IChlbGVtZW50LCBvZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSBlbGVtZW50LmRhdGE7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgb2Zmc2V0KTtcbiAgICAgIGNvbnN0IHN0YXJ0RW5kSW5kZXggPSBzZWFyY2hUZXh0Lmxhc3RJbmRleE9mKHBhdHRlcm5Db250ZW50LmNoYXJBdChwYXR0ZXJuQ29udGVudC5sZW5ndGggLSAxKSk7XG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gc2VhcmNoVGV4dC5sYXN0SW5kZXhPZihwYXR0ZXJuQ29udGVudCk7XG4gICAgICBpZiAoc3RhcnRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXggKyBwYXR0ZXJuQ29udGVudC5sZW5ndGg7XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0RW5kSW5kZXggIT09IC0xKSB7XG4gICAgICAgIHJldHVybiBzdGFydEVuZEluZGV4ICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRQYXR0ZXJuU3RhcnRGcm9tU3BvdCA9IChkb20sIHBhdHRlcm4sIGJsb2NrLCBzcG90KSA9PiB7XG4gICAgICBjb25zdCBzdGFydFBhdHRlcm4gPSBwYXR0ZXJuLnN0YXJ0O1xuICAgICAgY29uc3Qgc3RhcnRTcG90ID0gcmVwZWF0TGVmdChkb20sIHNwb3QuY29udGFpbmVyLCBzcG90Lm9mZnNldCwgbWF0Y2hlc1BhdHRlcm4oc3RhcnRQYXR0ZXJuKSwgYmxvY2spO1xuICAgICAgcmV0dXJuIHN0YXJ0U3BvdC5iaW5kKHNwb3QgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCBzdGFydFBhdHRlcm5JbmRleCA9IChfYiA9IChfYSA9IGJsb2NrLnRleHRDb250ZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaW5kZXhPZihzdGFydFBhdHRlcm4pKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAtMTtcbiAgICAgICAgY29uc3QgaXNDb21wbGV0ZU1hdGNoID0gc3RhcnRQYXR0ZXJuSW5kZXggIT09IC0xICYmIHNwb3Qub2Zmc2V0ID49IHN0YXJ0UGF0dGVybkluZGV4ICsgc3RhcnRQYXR0ZXJuLmxlbmd0aDtcbiAgICAgICAgaWYgKGlzQ29tcGxldGVNYXRjaCkge1xuICAgICAgICAgIGNvbnN0IHJuZyA9IGRvbS5jcmVhdGVSbmcoKTtcbiAgICAgICAgICBybmcuc2V0U3RhcnQoc3BvdC5jb250YWluZXIsIHNwb3Qub2Zmc2V0IC0gc3RhcnRQYXR0ZXJuLmxlbmd0aCk7XG4gICAgICAgICAgcm5nLnNldEVuZChzcG90LmNvbnRhaW5lciwgc3BvdC5vZmZzZXQpO1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHJuZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gc3BvdC5vZmZzZXQgLSBzdGFydFBhdHRlcm4ubGVuZ3RoO1xuICAgICAgICAgIHJldHVybiBzY2FuTGVmdChzcG90LmNvbnRhaW5lciwgb2Zmc2V0LCBibG9jaykubWFwKG5leHRTcG90ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJuZyA9IGRvbS5jcmVhdGVSbmcoKTtcbiAgICAgICAgICAgIHJuZy5zZXRTdGFydChuZXh0U3BvdC5jb250YWluZXIsIG5leHRTcG90Lm9mZnNldCk7XG4gICAgICAgICAgICBybmcuc2V0RW5kKHNwb3QuY29udGFpbmVyLCBzcG90Lm9mZnNldCk7XG4gICAgICAgICAgICByZXR1cm4gcm5nO1xuICAgICAgICAgIH0pLmZpbHRlcihybmcgPT4gcm5nLnRvU3RyaW5nKCkgPT09IHN0YXJ0UGF0dGVybikub3JUaHVuaygoKSA9PiBmaW5kUGF0dGVyblN0YXJ0RnJvbVNwb3QoZG9tLCBwYXR0ZXJuLCBibG9jaywgcG9pbnQoc3BvdC5jb250YWluZXIsIDApKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZmluZFBhdHRlcm5TdGFydCA9IChkb20sIHBhdHRlcm4sIG5vZGUsIG9mZnNldCwgYmxvY2ssIHJlcXVpcmVHYXAgPSBmYWxzZSkgPT4ge1xuICAgICAgaWYgKHBhdHRlcm4uc3RhcnQubGVuZ3RoID09PSAwICYmICFyZXF1aXJlR2FwKSB7XG4gICAgICAgIGNvbnN0IHJuZyA9IGRvbS5jcmVhdGVSbmcoKTtcbiAgICAgICAgcm5nLnNldFN0YXJ0KG5vZGUsIG9mZnNldCk7XG4gICAgICAgIHJuZy5zZXRFbmQobm9kZSwgb2Zmc2V0KTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUocm5nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0ZXh0QmVmb3JlKG5vZGUsIG9mZnNldCwgYmxvY2spLmJpbmQoc3BvdCA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gZmluZFBhdHRlcm5TdGFydEZyb21TcG90KGRvbSwgcGF0dGVybiwgYmxvY2ssIHNwb3QpO1xuICAgICAgICByZXR1cm4gc3RhcnQuYmluZChzdGFydFJhbmdlID0+IHtcbiAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgaWYgKHJlcXVpcmVHYXApIHtcbiAgICAgICAgICAgIGlmIChzdGFydFJhbmdlLmVuZENvbnRhaW5lciA9PT0gc3BvdC5jb250YWluZXIgJiYgc3RhcnRSYW5nZS5lbmRPZmZzZXQgPT09IHNwb3Qub2Zmc2V0KSB7XG4gICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNwb3Qub2Zmc2V0ID09PSAwICYmICgoX2EgPSBzdGFydFJhbmdlLmVuZENvbnRhaW5lci50ZXh0Q29udGVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPT09IHN0YXJ0UmFuZ2UuZW5kT2Zmc2V0KSB7XG4gICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHN0YXJ0UmFuZ2UpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZmluZFBhdHRlcm4gPSAoZWRpdG9yLCBibG9jaywgZGV0YWlscywgbm9ybWFsaXplZE1hdGNoZXMpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCByb290ID0gZG9tLmdldFJvb3QoKTtcbiAgICAgIGNvbnN0IHBhdHRlcm4gPSBkZXRhaWxzLnBhdHRlcm47XG4gICAgICBjb25zdCBlbmROb2RlID0gZGV0YWlscy5wb3NpdGlvbi5jb250YWluZXI7XG4gICAgICBjb25zdCBlbmRPZmZzZXQgPSBkZXRhaWxzLnBvc2l0aW9uLm9mZnNldDtcbiAgICAgIHJldHVybiBzY2FuTGVmdChlbmROb2RlLCBlbmRPZmZzZXQgLSBkZXRhaWxzLnBhdHRlcm4uZW5kLmxlbmd0aCwgYmxvY2spLmJpbmQoc3BvdCA9PiB7XG4gICAgICAgIGNvbnN0IGVuZFBhdGhSbmcgPSBnZW5lcmF0ZVBhdGhSYW5nZShkb20sIHJvb3QsIHNwb3QuY29udGFpbmVyLCBzcG90Lm9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0LCBub3JtYWxpemVkTWF0Y2hlcyk7XG4gICAgICAgIGlmIChpc1JlcGxhY2VtZW50UGF0dGVybihwYXR0ZXJuKSkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgIG1hdGNoZXM6IFt7XG4gICAgICAgICAgICAgICAgcGF0dGVybixcbiAgICAgICAgICAgICAgICBzdGFydFJuZzogZW5kUGF0aFJuZyxcbiAgICAgICAgICAgICAgICBlbmRSbmc6IGVuZFBhdGhSbmdcbiAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICBwb3NpdGlvbjogc3BvdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdHNPcHQgPSBmaW5kUGF0dGVybnNSZWMoZWRpdG9yLCBkZXRhaWxzLnJlbWFpbmluZ1BhdHRlcm5zLCBzcG90LmNvbnRhaW5lciwgc3BvdC5vZmZzZXQsIGJsb2NrLCBub3JtYWxpemVkTWF0Y2hlcyk7XG4gICAgICAgICAgY29uc3QgcmVzdWx0cyA9IHJlc3VsdHNPcHQuZ2V0T3Ioe1xuICAgICAgICAgICAgbWF0Y2hlczogW10sXG4gICAgICAgICAgICBwb3NpdGlvbjogc3BvdFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHBvcyA9IHJlc3VsdHMucG9zaXRpb247XG4gICAgICAgICAgY29uc3Qgc3RhcnQgPSBmaW5kUGF0dGVyblN0YXJ0KGRvbSwgcGF0dGVybiwgcG9zLmNvbnRhaW5lciwgcG9zLm9mZnNldCwgYmxvY2ssIHJlc3VsdHNPcHQuaXNOb25lKCkpO1xuICAgICAgICAgIHJldHVybiBzdGFydC5tYXAoc3RhcnRSbmcgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRQYXRoUm5nID0gZ2VuZXJhdGVQYXRoUmFuZ2VGcm9tUmFuZ2UoZG9tLCByb290LCBzdGFydFJuZywgbm9ybWFsaXplZE1hdGNoZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgbWF0Y2hlczogcmVzdWx0cy5tYXRjaGVzLmNvbmNhdChbe1xuICAgICAgICAgICAgICAgICAgcGF0dGVybixcbiAgICAgICAgICAgICAgICAgIHN0YXJ0Um5nOiBzdGFydFBhdGhSbmcsXG4gICAgICAgICAgICAgICAgICBlbmRSbmc6IGVuZFBhdGhSbmdcbiAgICAgICAgICAgICAgICB9XSksXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBwb2ludChzdGFydFJuZy5zdGFydENvbnRhaW5lciwgc3RhcnRSbmcuc3RhcnRPZmZzZXQpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRQYXR0ZXJuc1JlYyA9IChlZGl0b3IsIHBhdHRlcm5zLCBub2RlLCBvZmZzZXQsIGJsb2NrLCBub3JtYWxpemVkTWF0Y2hlcykgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIHJldHVybiB0ZXh0QmVmb3JlKG5vZGUsIG9mZnNldCwgZG9tLmdldFJvb3QoKSkuYmluZChlbmRTcG90ID0+IHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGdldEJlZm9yZVRleHQoZG9tLCBibG9jaywgbm9kZSwgb2Zmc2V0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXR0ZXJucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHBhdHRlcm4gPSBwYXR0ZXJuc1tpXTtcbiAgICAgICAgICBpZiAoIWVuZHNXaXRoKHRleHQsIHBhdHRlcm4uZW5kKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHBhdHRlcm5zV2l0aG91dEN1cnJlbnQgPSBwYXR0ZXJucy5zbGljZSgpO1xuICAgICAgICAgIHBhdHRlcm5zV2l0aG91dEN1cnJlbnQuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRQYXR0ZXJuKGVkaXRvciwgYmxvY2ssIHtcbiAgICAgICAgICAgIHBhdHRlcm4sXG4gICAgICAgICAgICByZW1haW5pbmdQYXR0ZXJuczogcGF0dGVybnNXaXRob3V0Q3VycmVudCxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBlbmRTcG90XG4gICAgICAgICAgfSwgbm9ybWFsaXplZE1hdGNoZXMpO1xuICAgICAgICAgIGlmIChyZXN1bHQuaXNOb25lKCkgJiYgb2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbmRQYXR0ZXJuc1JlYyhlZGl0b3IsIHBhdHRlcm5zLCBub2RlLCBvZmZzZXQgLSAxLCBibG9jaywgbm9ybWFsaXplZE1hdGNoZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0LmlzU29tZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBhcHBseVBhdHRlcm4gPSAoZWRpdG9yLCBwYXR0ZXJuLCBwYXR0ZXJuUmFuZ2UpID0+IHtcbiAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHBhdHRlcm5SYW5nZSk7XG4gICAgICBpZiAocGF0dGVybi50eXBlID09PSAnaW5saW5lLWZvcm1hdCcpIHtcbiAgICAgICAgZWFjaCRlKHBhdHRlcm4uZm9ybWF0LCBmb3JtYXQgPT4ge1xuICAgICAgICAgIGVkaXRvci5mb3JtYXR0ZXIuYXBwbHkoZm9ybWF0KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQocGF0dGVybi5jbWQsIGZhbHNlLCBwYXR0ZXJuLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5UmVwbGFjZW1lbnRQYXR0ZXJuID0gKGVkaXRvciwgcGF0dGVybiwgbWFya2VyLCBpc1Jvb3QpID0+IHtcbiAgICAgIGNvbnN0IG1hcmtlclJhbmdlID0gcmFuZ2VGcm9tTWFya2VyKGVkaXRvci5kb20sIG1hcmtlcik7XG4gICAgICBkZWxldGVSbmcoZWRpdG9yLmRvbSwgbWFya2VyUmFuZ2UsIGlzUm9vdCk7XG4gICAgICBhcHBseVBhdHRlcm4oZWRpdG9yLCBwYXR0ZXJuLCBtYXJrZXJSYW5nZSk7XG4gICAgfTtcbiAgICBjb25zdCBhcHBseVBhdHRlcm5XaXRoQ29udGVudCA9IChlZGl0b3IsIHBhdHRlcm4sIHN0YXJ0TWFya2VyLCBlbmRNYXJrZXIsIGlzUm9vdCkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IG1hcmtlckVuZFJhbmdlID0gcmFuZ2VGcm9tTWFya2VyKGRvbSwgZW5kTWFya2VyKTtcbiAgICAgIGNvbnN0IG1hcmtlclN0YXJ0UmFuZ2UgPSByYW5nZUZyb21NYXJrZXIoZG9tLCBzdGFydE1hcmtlcik7XG4gICAgICBkZWxldGVSbmcoZG9tLCBtYXJrZXJTdGFydFJhbmdlLCBpc1Jvb3QpO1xuICAgICAgZGVsZXRlUm5nKGRvbSwgbWFya2VyRW5kUmFuZ2UsIGlzUm9vdCk7XG4gICAgICBjb25zdCBwYXR0ZXJuTWFya2VyID0ge1xuICAgICAgICBwcmVmaXg6IHN0YXJ0TWFya2VyLnByZWZpeCxcbiAgICAgICAgc3RhcnQ6IHN0YXJ0TWFya2VyLmVuZCxcbiAgICAgICAgZW5kOiBlbmRNYXJrZXIuc3RhcnRcbiAgICAgIH07XG4gICAgICBjb25zdCBwYXR0ZXJuUmFuZ2UgPSByYW5nZUZyb21NYXJrZXIoZG9tLCBwYXR0ZXJuTWFya2VyKTtcbiAgICAgIGFwcGx5UGF0dGVybihlZGl0b3IsIHBhdHRlcm4sIHBhdHRlcm5SYW5nZSk7XG4gICAgfTtcbiAgICBjb25zdCBhZGRNYXJrZXJzID0gKGRvbSwgbWF0Y2hlcykgPT4ge1xuICAgICAgY29uc3QgbWFya2VyUHJlZml4ID0gZ2VuZXJhdGUkMSgnbWNlX3RleHRwYXR0ZXJuJyk7XG4gICAgICBjb25zdCBtYXRjaGVzV2l0aEVuZHMgPSBmb2xkcihtYXRjaGVzLCAoYWNjLCBtYXRjaCkgPT4ge1xuICAgICAgICBjb25zdCBlbmRNYXJrZXIgPSBjcmVhdGVNYXJrZXIoZG9tLCBtYXJrZXJQcmVmaXggKyBgX2VuZCR7IGFjYy5sZW5ndGggfWAsIG1hdGNoLmVuZFJuZyk7XG4gICAgICAgIHJldHVybiBhY2MuY29uY2F0KFt7XG4gICAgICAgICAgICAuLi5tYXRjaCxcbiAgICAgICAgICAgIGVuZE1hcmtlclxuICAgICAgICAgIH1dKTtcbiAgICAgIH0sIFtdKTtcbiAgICAgIHJldHVybiBmb2xkcihtYXRjaGVzV2l0aEVuZHMsIChhY2MsIG1hdGNoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkeCA9IG1hdGNoZXNXaXRoRW5kcy5sZW5ndGggLSBhY2MubGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3Qgc3RhcnRNYXJrZXIgPSBpc1JlcGxhY2VtZW50UGF0dGVybihtYXRjaC5wYXR0ZXJuKSA/IG1hdGNoLmVuZE1hcmtlciA6IGNyZWF0ZU1hcmtlcihkb20sIG1hcmtlclByZWZpeCArIGBfc3RhcnQkeyBpZHggfWAsIG1hdGNoLnN0YXJ0Um5nKTtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoW3tcbiAgICAgICAgICAgIC4uLm1hdGNoLFxuICAgICAgICAgICAgc3RhcnRNYXJrZXJcbiAgICAgICAgICB9XSk7XG4gICAgICB9LCBbXSk7XG4gICAgfTtcbiAgICBjb25zdCBzb3J0UGF0dGVybnMgPSBwYXR0ZXJucyA9PiBzb3J0KHBhdHRlcm5zLCAoYSwgYikgPT4gYi5lbmQubGVuZ3RoIC0gYS5lbmQubGVuZ3RoKTtcbiAgICBjb25zdCBnZXRCZXN0TWF0Y2hlcyA9IChtYXRjaGVzLCBtYXRjaGVzV2l0aFNvcnRlZFBhdHRlcm5zKSA9PiB7XG4gICAgICBjb25zdCBoYXNTYW1lTWF0Y2hlcyA9IGZvcmFsbChtYXRjaGVzLCBtYXRjaCA9PiBleGlzdHMobWF0Y2hlc1dpdGhTb3J0ZWRQYXR0ZXJucywgc29ydGVkTWF0Y2ggPT4gbWF0Y2gucGF0dGVybi5zdGFydCA9PT0gc29ydGVkTWF0Y2gucGF0dGVybi5zdGFydCAmJiBtYXRjaC5wYXR0ZXJuLmVuZCA9PT0gc29ydGVkTWF0Y2gucGF0dGVybi5lbmQpKTtcbiAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gbWF0Y2hlc1dpdGhTb3J0ZWRQYXR0ZXJucy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGhhc1NhbWVNYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuIG1hdGNoZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1hdGNoZXNXaXRoU29ydGVkUGF0dGVybnM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXRjaGVzLmxlbmd0aCA+IG1hdGNoZXNXaXRoU29ydGVkUGF0dGVybnMubGVuZ3RoID8gbWF0Y2hlcyA6IG1hdGNoZXNXaXRoU29ydGVkUGF0dGVybnM7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kUGF0dGVybnMgPSAoZWRpdG9yLCBibG9jaywgbm9kZSwgb2Zmc2V0LCBwYXR0ZXJuU2V0LCBub3JtYWxpemVkTWF0Y2hlcykgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGZpbmRQYXR0ZXJuc1JlYyhlZGl0b3IsIHBhdHRlcm5TZXQuaW5saW5lUGF0dGVybnMsIG5vZGUsIG9mZnNldCwgYmxvY2ssIG5vcm1hbGl6ZWRNYXRjaGVzKS5mb2xkKCgpID0+IFtdLCByZXN1bHQgPT4gcmVzdWx0Lm1hdGNoZXMpO1xuICAgICAgY29uc3QgbWF0Y2hlc1dpdGhTb3J0ZWRQYXR0ZXJucyA9IGZpbmRQYXR0ZXJuc1JlYyhlZGl0b3IsIHNvcnRQYXR0ZXJucyhwYXR0ZXJuU2V0LmlubGluZVBhdHRlcm5zKSwgbm9kZSwgb2Zmc2V0LCBibG9jaywgbm9ybWFsaXplZE1hdGNoZXMpLmZvbGQoKCkgPT4gW10sIHJlc3VsdCA9PiByZXN1bHQubWF0Y2hlcyk7XG4gICAgICByZXR1cm4gZ2V0QmVzdE1hdGNoZXMobWF0Y2hlcywgbWF0Y2hlc1dpdGhTb3J0ZWRQYXR0ZXJucyk7XG4gICAgfTtcbiAgICBjb25zdCBhcHBseU1hdGNoZXMgPSAoZWRpdG9yLCBtYXRjaGVzKSA9PiB7XG4gICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IGJvb2ttYXJrID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRCb29rbWFyaygpO1xuICAgICAgY29uc3QgbWF0Y2hlc1dpdGhNYXJrZXJzID0gYWRkTWFya2Vycyhkb20sIG1hdGNoZXMpO1xuICAgICAgZWFjaCRlKG1hdGNoZXNXaXRoTWFya2VycywgbWF0Y2ggPT4ge1xuICAgICAgICBjb25zdCBibG9jayA9IGRvbS5nZXRQYXJlbnQobWF0Y2guc3RhcnRNYXJrZXIuc3RhcnQsIGRvbS5pc0Jsb2NrKTtcbiAgICAgICAgY29uc3QgaXNSb290ID0gbm9kZSA9PiBub2RlID09PSBibG9jaztcbiAgICAgICAgaWYgKGlzUmVwbGFjZW1lbnRQYXR0ZXJuKG1hdGNoLnBhdHRlcm4pKSB7XG4gICAgICAgICAgYXBwbHlSZXBsYWNlbWVudFBhdHRlcm4oZWRpdG9yLCBtYXRjaC5wYXR0ZXJuLCBtYXRjaC5lbmRNYXJrZXIsIGlzUm9vdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXBwbHlQYXR0ZXJuV2l0aENvbnRlbnQoZWRpdG9yLCBtYXRjaC5wYXR0ZXJuLCBtYXRjaC5zdGFydE1hcmtlciwgbWF0Y2guZW5kTWFya2VyLCBpc1Jvb3QpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZU1hcmtlcihkb20sIG1hdGNoLmVuZE1hcmtlciwgaXNSb290KTtcbiAgICAgICAgcmVtb3ZlTWFya2VyKGRvbSwgbWF0Y2guc3RhcnRNYXJrZXIsIGlzUm9vdCk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5zZWxlY3Rpb24ubW92ZVRvQm9va21hcmsoYm9va21hcmspO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVFbnRlciA9IChlZGl0b3IsIHBhdHRlcm5TZXQpID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50QmxvY2soZWRpdG9yLCBybmcpLm1hcChibG9jayA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5tYXgoMCwgcm5nLnN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgY29uc3QgZHluYW1pY1BhdHRlcm5TZXQgPSByZXNvbHZlRnJvbUR5bmFtaWNQYXR0ZXJucyhwYXR0ZXJuU2V0LCBibG9jaywgKF9hID0gYmxvY2sudGV4dENvbnRlbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnKTtcbiAgICAgICAgY29uc3QgaW5saW5lTWF0Y2hlcyA9IGZpbmRQYXR0ZXJucyhlZGl0b3IsIGJsb2NrLCBybmcuc3RhcnRDb250YWluZXIsIG9mZnNldCwgZHluYW1pY1BhdHRlcm5TZXQsIHRydWUpO1xuICAgICAgICBjb25zdCBibG9ja01hdGNoZXMgPSBmaW5kUGF0dGVybnMkMShlZGl0b3IsIGJsb2NrLCBkeW5hbWljUGF0dGVyblNldCwgdHJ1ZSk7XG4gICAgICAgIGlmIChibG9ja01hdGNoZXMubGVuZ3RoID4gMCB8fCBpbmxpbmVNYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBlZGl0b3IudW5kb01hbmFnZXIuYWRkKCk7XG4gICAgICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLmV4dHJhKCgpID0+IHtcbiAgICAgICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnbWNlSW5zZXJ0TmV3TGluZScpO1xuICAgICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgIGVkaXRvci5pbnNlcnRDb250ZW50KHplcm9XaWR0aCk7XG4gICAgICAgICAgICBhcHBseU1hdGNoZXMoZWRpdG9yLCBpbmxpbmVNYXRjaGVzKTtcbiAgICAgICAgICAgIGFwcGx5TWF0Y2hlcyQxKGVkaXRvciwgYmxvY2tNYXRjaGVzKTtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IHNwb3QgPSB0ZXh0QmVmb3JlKHJhbmdlLnN0YXJ0Q29udGFpbmVyLCByYW5nZS5zdGFydE9mZnNldCwgZWRpdG9yLmRvbS5nZXRSb290KCkpO1xuICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VJbnNlcnROZXdMaW5lJyk7XG4gICAgICAgICAgICBzcG90LmVhY2gocyA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBzLmNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgaWYgKG5vZGUuZGF0YS5jaGFyQXQocy5vZmZzZXQgLSAxKSA9PT0gemVyb1dpZHRoKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5kZWxldGVEYXRhKHMub2Zmc2V0IC0gMSwgMSk7XG4gICAgICAgICAgICAgICAgY2xlYW5FbXB0eU5vZGVzKGVkaXRvci5kb20sIG5vZGUucGFyZW50Tm9kZSwgZSA9PiBlID09PSBlZGl0b3IuZG9tLmdldFJvb3QoKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pLmdldE9yKGZhbHNlKTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZUlubGluZUtleSA9IChlZGl0b3IsIHBhdHRlcm5TZXQpID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBnZXRQYXJlbnRCbG9jayhlZGl0b3IsIHJuZykubWFwKGJsb2NrID0+IHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5tYXgoMCwgcm5nLnN0YXJ0T2Zmc2V0IC0gMSk7XG4gICAgICAgIGNvbnN0IGJlZm9yZVRleHQgPSBnZXRCZWZvcmVUZXh0KGVkaXRvci5kb20sIGJsb2NrLCBybmcuc3RhcnRDb250YWluZXIsIG9mZnNldCk7XG4gICAgICAgIGNvbnN0IGR5bmFtaWNQYXR0ZXJuU2V0ID0gcmVzb2x2ZUZyb21EeW5hbWljUGF0dGVybnMocGF0dGVyblNldCwgYmxvY2ssIGJlZm9yZVRleHQpO1xuICAgICAgICBjb25zdCBpbmxpbmVNYXRjaGVzID0gZmluZFBhdHRlcm5zKGVkaXRvciwgYmxvY2ssIHJuZy5zdGFydENvbnRhaW5lciwgb2Zmc2V0LCBkeW5hbWljUGF0dGVyblNldCwgZmFsc2UpO1xuICAgICAgICBpZiAoaW5saW5lTWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgICAgICAgIGFwcGx5TWF0Y2hlcyhlZGl0b3IsIGlubGluZU1hdGNoZXMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGNoZWNrS2V5RXZlbnQgPSAoY29kZXMsIGV2ZW50LCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZShjb2Rlc1tpXSwgZXZlbnQpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IGNoZWNrS2V5Q29kZSA9IChjb2RlcywgZXZlbnQpID0+IGNoZWNrS2V5RXZlbnQoY29kZXMsIGV2ZW50LCAoY29kZSwgZXZlbnQpID0+IHtcbiAgICAgIHJldHVybiBjb2RlID09PSBldmVudC5rZXlDb2RlICYmICFWSy5tb2RpZmllclByZXNzZWQoZXZlbnQpO1xuICAgIH0pO1xuICAgIGNvbnN0IGNoZWNrQ2hhckNvZGUgPSAoY2hhcnMsIGV2ZW50KSA9PiBjaGVja0tleUV2ZW50KGNoYXJzLCBldmVudCwgKGNociwgZXZlbnQpID0+IHtcbiAgICAgIHJldHVybiBjaHIuY2hhckNvZGVBdCgwKSA9PT0gZXZlbnQuY2hhckNvZGU7XG4gICAgfSk7XG5cbiAgICBjb25zdCBzZXR1cCQyID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGNoYXJDb2RlcyA9IFtcbiAgICAgICAgJywnLFxuICAgICAgICAnLicsXG4gICAgICAgICc7JyxcbiAgICAgICAgJzonLFxuICAgICAgICAnIScsXG4gICAgICAgICc/J1xuICAgICAgXTtcbiAgICAgIGNvbnN0IGtleUNvZGVzID0gWzMyXTtcbiAgICAgIGNvbnN0IGdldFBhdHRlcm5TZXQgPSAoKSA9PiBjcmVhdGVQYXR0ZXJuU2V0KGdldFRleHRQYXR0ZXJucyhlZGl0b3IpLCBnZXRUZXh0UGF0dGVybnNMb29rdXAoZWRpdG9yKSk7XG4gICAgICBjb25zdCBoYXNEeW5hbWljUGF0dGVybnMgPSAoKSA9PiBoYXNUZXh0UGF0dGVybnNMb29rdXAoZWRpdG9yKTtcbiAgICAgIGVkaXRvci5vbigna2V5ZG93bicsIGUgPT4ge1xuICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAxMyAmJiAhVksubW9kaWZpZXJQcmVzc2VkKGUpICYmIGVkaXRvci5zZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSkge1xuICAgICAgICAgIGNvbnN0IHBhdHRlcm5TZXQgPSBnZXRQYXR0ZXJuU2V0KCk7XG4gICAgICAgICAgY29uc3QgaGFzUGF0dGVybnMgPSBwYXR0ZXJuU2V0LmlubGluZVBhdHRlcm5zLmxlbmd0aCA+IDAgfHwgcGF0dGVyblNldC5ibG9ja1BhdHRlcm5zLmxlbmd0aCA+IDAgfHwgaGFzRHluYW1pY1BhdHRlcm5zKCk7XG4gICAgICAgICAgaWYgKGhhc1BhdHRlcm5zICYmIGhhbmRsZUVudGVyKGVkaXRvciwgcGF0dGVyblNldCkpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIHRydWUpO1xuICAgICAgY29uc3QgaGFuZGxlSW5saW5lVHJpZ2dlciA9ICgpID0+IHtcbiAgICAgICAgaWYgKGVkaXRvci5zZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSkge1xuICAgICAgICAgIGNvbnN0IHBhdHRlcm5TZXQgPSBnZXRQYXR0ZXJuU2V0KCk7XG4gICAgICAgICAgY29uc3QgaGFzUGF0dGVybnMgPSBwYXR0ZXJuU2V0LmlubGluZVBhdHRlcm5zLmxlbmd0aCA+IDAgfHwgaGFzRHluYW1pY1BhdHRlcm5zKCk7XG4gICAgICAgICAgaWYgKGhhc1BhdHRlcm5zKSB7XG4gICAgICAgICAgICBoYW5kbGVJbmxpbmVLZXkoZWRpdG9yLCBwYXR0ZXJuU2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBlZGl0b3Iub24oJ2tleXVwJywgZSA9PiB7XG4gICAgICAgIGlmIChjaGVja0tleUNvZGUoa2V5Q29kZXMsIGUpKSB7XG4gICAgICAgICAgaGFuZGxlSW5saW5lVHJpZ2dlcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbigna2V5cHJlc3MnLCBlID0+IHtcbiAgICAgICAgaWYgKGNoZWNrQ2hhckNvZGUoY2hhckNvZGVzLCBlKSkge1xuICAgICAgICAgIERlbGF5LnNldEVkaXRvclRpbWVvdXQoZWRpdG9yLCBoYW5kbGVJbmxpbmVUcmlnZ2VyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNldHVwJDEgPSBlZGl0b3IgPT4ge1xuICAgICAgc2V0dXAkMihlZGl0b3IpO1xuICAgIH07XG5cbiAgICBjb25zdCBRdWlya3MgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZWFjaCA9IFRvb2xzLmVhY2g7XG4gICAgICBjb25zdCBCQUNLU1BBQ0UgPSBWSy5CQUNLU1BBQ0UsIERFTEVURSA9IFZLLkRFTEVURSwgZG9tID0gZWRpdG9yLmRvbSwgc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbiwgcGFyc2VyID0gZWRpdG9yLnBhcnNlcjtcbiAgICAgIGNvbnN0IGJyb3dzZXIgPSBFbnYuYnJvd3NlcjtcbiAgICAgIGNvbnN0IGlzR2Vja28gPSBicm93c2VyLmlzRmlyZWZveCgpO1xuICAgICAgY29uc3QgaXNXZWJLaXQgPSBicm93c2VyLmlzQ2hyb21pdW0oKSB8fCBicm93c2VyLmlzU2FmYXJpKCk7XG4gICAgICBjb25zdCBpc2lPUyA9IEVudi5kZXZpY2VUeXBlLmlzaVBob25lKCkgfHwgRW52LmRldmljZVR5cGUuaXNpUGFkKCk7XG4gICAgICBjb25zdCBpc01hYyA9IEVudi5vcy5pc01hY09TKCkgfHwgRW52Lm9zLmlzaU9TKCk7XG4gICAgICBjb25zdCBzZXRFZGl0b3JDb21tYW5kU3RhdGUgPSAoY21kLCBzdGF0ZSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGVkaXRvci5nZXREb2MoKS5leGVjQ29tbWFuZChjbWQsIGZhbHNlLCBTdHJpbmcoc3RhdGUpKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzRGVmYXVsdFByZXZlbnRlZCA9IGUgPT4ge1xuICAgICAgICByZXR1cm4gZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBlbXB0eUVkaXRvcldoZW5EZWxldGluZyA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplUm5nID0gcm5nID0+IHtcbiAgICAgICAgICBjb25zdCBib2R5ID0gZG9tLmNyZWF0ZSgnYm9keScpO1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnRzID0gcm5nLmNsb25lQ29udGVudHMoKTtcbiAgICAgICAgICBib2R5LmFwcGVuZENoaWxkKGNvbnRlbnRzKTtcbiAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uLnNlcmlhbGl6ZXIuc2VyaWFsaXplKGJvZHksIHsgZm9ybWF0OiAnaHRtbCcgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFsbENvbnRlbnRzU2VsZWN0ZWQgPSBybmcgPT4ge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHNlcmlhbGl6ZVJuZyhybmcpO1xuICAgICAgICAgIGNvbnN0IGFsbFJuZyA9IGRvbS5jcmVhdGVSbmcoKTtcbiAgICAgICAgICBhbGxSbmcuc2VsZWN0Tm9kZShlZGl0b3IuZ2V0Qm9keSgpKTtcbiAgICAgICAgICBjb25zdCBhbGxTZWxlY3Rpb24gPSBzZXJpYWxpemVSbmcoYWxsUm5nKTtcbiAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uID09PSBhbGxTZWxlY3Rpb247XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGhhc1ByZXNlcnZlZEVtcHR5RWxlbWVudHMgPSBlbG0gPT4ge1xuICAgICAgICAgIGNvbnN0IHNjb3BlID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWxtKTtcbiAgICAgICAgICBjb25zdCBpc0VkaXRhYmxlSG9zdCA9IGVsbSA9PiBwYXJlbnRFbGVtZW50KGVsbSkuZXhpc3RzKGVsbSA9PiAhaXNFZGl0YWJsZSQzKGVsbSkpO1xuICAgICAgICAgIHJldHVybiBleGlzdHMoZGVzY2VuZGFudHMoc2NvcGUsICdbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXScpLCBpc0VkaXRhYmxlSG9zdCk7XG4gICAgICAgIH07XG4gICAgICAgIGVkaXRvci5vbigna2V5ZG93bicsIGUgPT4ge1xuICAgICAgICAgIGNvbnN0IGtleUNvZGUgPSBlLmtleUNvZGU7XG4gICAgICAgICAgaWYgKCFpc0RlZmF1bHRQcmV2ZW50ZWQoZSkgJiYgKGtleUNvZGUgPT09IERFTEVURSB8fCBrZXlDb2RlID09PSBCQUNLU1BBQ0UpICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFZGl0YWJsZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBpc0NvbGxhcHNlZCA9IGVkaXRvci5zZWxlY3Rpb24uaXNDb2xsYXBzZWQoKTtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgICAgICAgaWYgKGlzQ29sbGFwc2VkICYmICghZG9tLmlzRW1wdHkoYm9keSkgfHwgaGFzUHJlc2VydmVkRW1wdHlFbGVtZW50cyhib2R5KSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0NvbGxhcHNlZCAmJiAhYWxsQ29udGVudHNTZWxlY3RlZChlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlZGl0b3Iuc2V0Q29udGVudCgnJyk7XG4gICAgICAgICAgICBpZiAoYm9keS5maXJzdENoaWxkICYmIGRvbS5pc0Jsb2NrKGJvZHkuZmlyc3RDaGlsZCkpIHtcbiAgICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRDdXJzb3JMb2NhdGlvbihib2R5LmZpcnN0Q2hpbGQsIDApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRDdXJzb3JMb2NhdGlvbihib2R5LCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVkaXRvci5ub2RlQ2hhbmdlZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VsZWN0QWxsID0gKCkgPT4ge1xuICAgICAgICBlZGl0b3Iuc2hvcnRjdXRzLmFkZCgnbWV0YSthJywgbnVsbCwgJ1NlbGVjdEFsbCcpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRvY3VtZW50RWxlbWVudEVkaXRpbmdGb2N1cyA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFlZGl0b3IuaW5saW5lKSB7XG4gICAgICAgICAgZG9tLmJpbmQoZWRpdG9yLmdldERvYygpLCAnbW91c2Vkb3duIG1vdXNldXAnLCBlID0+IHtcbiAgICAgICAgICAgIGxldCBybmc7XG4gICAgICAgICAgICBpZiAoZS50YXJnZXQgPT09IGVkaXRvci5nZXREb2MoKS5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgcm5nID0gc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgICAgICAgICBlZGl0b3IuZ2V0Qm9keSgpLmZvY3VzKCk7XG4gICAgICAgICAgICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZWRvd24nKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQ2FyZXRDb250YWluZXIkMihybmcuc3RhcnRDb250YWluZXIpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5wbGFjZUNhcmV0QXQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5zZXRSbmcocm5nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVtb3ZlSHJPbkJhY2tzcGFjZSA9ICgpID0+IHtcbiAgICAgICAgZWRpdG9yLm9uKCdrZXlkb3duJywgZSA9PiB7XG4gICAgICAgICAgaWYgKCFpc0RlZmF1bHRQcmV2ZW50ZWQoZSkgJiYgZS5rZXlDb2RlID09PSBCQUNLU1BBQ0UpIHtcbiAgICAgICAgICAgIGlmICghZWRpdG9yLmdldEJvZHkoKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaHInKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpICYmIHNlbGVjdGlvbi5nZXRSbmcoKS5zdGFydE9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgICBjb25zdCBub2RlID0gc2VsZWN0aW9uLmdldE5vZGUoKTtcbiAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNTaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgICAgICAgIGlmIChub2RlLm5vZGVOYW1lID09PSAnSFInKSB7XG4gICAgICAgICAgICAgICAgZG9tLnJlbW92ZShub2RlKTtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChwcmV2aW91c1NpYmxpbmcgJiYgcHJldmlvdXNTaWJsaW5nLm5vZGVOYW1lICYmIHByZXZpb3VzU2libGluZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaHInKSB7XG4gICAgICAgICAgICAgICAgZG9tLnJlbW92ZShwcmV2aW91c1NpYmxpbmcpO1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZm9jdXNCb2R5ID0gKCkgPT4ge1xuICAgICAgICBpZiAoIVJhbmdlLnByb3RvdHlwZS5nZXRDbGllbnRSZWN0cykge1xuICAgICAgICAgIGVkaXRvci5vbignbW91c2Vkb3duJywgZSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlzRGVmYXVsdFByZXZlbnRlZChlKSAmJiBlLnRhcmdldC5ub2RlTmFtZSA9PT0gJ0hUTUwnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgICAgICAgICBib2R5LmJsdXIoKTtcbiAgICAgICAgICAgICAgRGVsYXkuc2V0RWRpdG9yVGltZW91dChlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgICBib2R5LmZvY3VzKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VsZWN0Q29udHJvbEVsZW1lbnRzID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB2aXN1YWxBaWRzQW5jaG9yQ2xhc3MgPSBnZXRWaXN1YWxBaWRzQW5jaG9yQ2xhc3MoZWRpdG9yKTtcbiAgICAgICAgZWRpdG9yLm9uKCdjbGljaycsIGUgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0O1xuICAgICAgICAgIGlmICgvXihJTUd8SFIpJC8udGVzdCh0YXJnZXQubm9kZU5hbWUpICYmIGRvbS5pc0VkaXRhYmxlKHRhcmdldC5wYXJlbnROb2RlKSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3QodGFyZ2V0KTtcbiAgICAgICAgICAgIGVkaXRvci5ub2RlQ2hhbmdlZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGFyZ2V0Lm5vZGVOYW1lID09PSAnQScgJiYgZG9tLmhhc0NsYXNzKHRhcmdldCwgdmlzdWFsQWlkc0FuY2hvckNsYXNzKSAmJiB0YXJnZXQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDAgJiYgZG9tLmlzRWRpdGFibGUodGFyZ2V0LnBhcmVudE5vZGUpKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBzZWxlY3Rpb24uc2VsZWN0KHRhcmdldCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZW1vdmVTdHlsZXNXaGVuRGVsZXRpbmdBY3Jvc3NCbG9ja0VsZW1lbnRzID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBnZXRBdHRyaWJ1dGVBcHBseUZ1bmN0aW9uID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gZG9tLmdldEF0dHJpYnMoc2VsZWN0aW9uLmdldFN0YXJ0KCkuY2xvbmVOb2RlKGZhbHNlKSk7XG4gICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHNlbGVjdGlvbi5nZXRTdGFydCgpO1xuICAgICAgICAgICAgaWYgKHRhcmdldCAhPT0gZWRpdG9yLmdldEJvZHkoKSkge1xuICAgICAgICAgICAgICBkb20uc2V0QXR0cmliKHRhcmdldCwgJ3N0eWxlJywgbnVsbCk7XG4gICAgICAgICAgICAgIGVhY2godGVtcGxhdGUsIGF0dHIgPT4ge1xuICAgICAgICAgICAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGVOb2RlKGF0dHIuY2xvbmVOb2RlKHRydWUpKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaXNTZWxlY3Rpb25BY3Jvc3NFbGVtZW50cyA9ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gIXNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpICYmIGRvbS5nZXRQYXJlbnQoc2VsZWN0aW9uLmdldFN0YXJ0KCksIGRvbS5pc0Jsb2NrKSAhPT0gZG9tLmdldFBhcmVudChzZWxlY3Rpb24uZ2V0RW5kKCksIGRvbS5pc0Jsb2NrKTtcbiAgICAgICAgfTtcbiAgICAgICAgZWRpdG9yLm9uKCdrZXlwcmVzcycsIGUgPT4ge1xuICAgICAgICAgIGxldCBhcHBseUF0dHJpYnV0ZXM7XG4gICAgICAgICAgaWYgKCFpc0RlZmF1bHRQcmV2ZW50ZWQoZSkgJiYgKGUua2V5Q29kZSA9PT0gOCB8fCBlLmtleUNvZGUgPT09IDQ2KSAmJiBpc1NlbGVjdGlvbkFjcm9zc0VsZW1lbnRzKCkpIHtcbiAgICAgICAgICAgIGFwcGx5QXR0cmlidXRlcyA9IGdldEF0dHJpYnV0ZUFwcGx5RnVuY3Rpb24oKTtcbiAgICAgICAgICAgIGVkaXRvci5nZXREb2MoKS5leGVjQ29tbWFuZCgnZGVsZXRlJywgZmFsc2UpO1xuICAgICAgICAgICAgYXBwbHlBdHRyaWJ1dGVzKCk7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRvbS5iaW5kKGVkaXRvci5nZXREb2MoKSwgJ2N1dCcsIGUgPT4ge1xuICAgICAgICAgIGlmICghaXNEZWZhdWx0UHJldmVudGVkKGUpICYmIGlzU2VsZWN0aW9uQWNyb3NzRWxlbWVudHMoKSkge1xuICAgICAgICAgICAgY29uc3QgYXBwbHlBdHRyaWJ1dGVzID0gZ2V0QXR0cmlidXRlQXBwbHlGdW5jdGlvbigpO1xuICAgICAgICAgICAgRGVsYXkuc2V0RWRpdG9yVGltZW91dChlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgYXBwbHlBdHRyaWJ1dGVzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRpc2FibGVCYWNrc3BhY2VJbnRvQVRhYmxlID0gKCkgPT4ge1xuICAgICAgICBlZGl0b3Iub24oJ2tleWRvd24nLCBlID0+IHtcbiAgICAgICAgICBpZiAoIWlzRGVmYXVsdFByZXZlbnRlZChlKSAmJiBlLmtleUNvZGUgPT09IEJBQ0tTUEFDRSkge1xuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpICYmIHNlbGVjdGlvbi5nZXRSbmcoKS5zdGFydE9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c1NpYmxpbmcgPSBzZWxlY3Rpb24uZ2V0Tm9kZSgpLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgICAgaWYgKHByZXZpb3VzU2libGluZyAmJiBwcmV2aW91c1NpYmxpbmcubm9kZU5hbWUgJiYgcHJldmlvdXNTaWJsaW5nLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICd0YWJsZScpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZW1vdmVCbG9ja1F1b3RlT25CYWNrU3BhY2UgPSAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5vbigna2V5ZG93bicsIGUgPT4ge1xuICAgICAgICAgIGlmIChpc0RlZmF1bHRQcmV2ZW50ZWQoZSkgfHwgZS5rZXlDb2RlICE9PSBWSy5CQUNLU1BBQ0UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHJuZyA9IHNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBybmcuc3RhcnRDb250YWluZXI7XG4gICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcm5nLnN0YXJ0T2Zmc2V0O1xuICAgICAgICAgIGNvbnN0IHJvb3QgPSBkb20uZ2V0Um9vdCgpO1xuICAgICAgICAgIGxldCBwYXJlbnQgPSBjb250YWluZXI7XG4gICAgICAgICAgaWYgKCFybmcuY29sbGFwc2VkIHx8IG9mZnNldCAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3aGlsZSAocGFyZW50LnBhcmVudE5vZGUgJiYgcGFyZW50LnBhcmVudE5vZGUuZmlyc3RDaGlsZCA9PT0gcGFyZW50ICYmIHBhcmVudC5wYXJlbnROb2RlICE9PSByb290KSB7XG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBhcmVudC5ub2RlTmFtZSA9PT0gJ0JMT0NLUVVPVEUnKSB7XG4gICAgICAgICAgICBlZGl0b3IuZm9ybWF0dGVyLnRvZ2dsZSgnYmxvY2txdW90ZScsIHVuZGVmaW5lZCwgcGFyZW50KTtcbiAgICAgICAgICAgIHJuZyA9IGRvbS5jcmVhdGVSbmcoKTtcbiAgICAgICAgICAgIHJuZy5zZXRTdGFydChjb250YWluZXIsIDApO1xuICAgICAgICAgICAgcm5nLnNldEVuZChjb250YWluZXIsIDApO1xuICAgICAgICAgICAgc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0R2Vja29FZGl0aW5nT3B0aW9ucyA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2V0T3B0cyA9ICgpID0+IHtcbiAgICAgICAgICBzZXRFZGl0b3JDb21tYW5kU3RhdGUoJ1N0eWxlV2l0aENTUycsIGZhbHNlKTtcbiAgICAgICAgICBzZXRFZGl0b3JDb21tYW5kU3RhdGUoJ2VuYWJsZUlubGluZVRhYmxlRWRpdGluZycsIGZhbHNlKTtcbiAgICAgICAgICBpZiAoIWdldE9iamVjdFJlc2l6aW5nKGVkaXRvcikpIHtcbiAgICAgICAgICAgIHNldEVkaXRvckNvbW1hbmRTdGF0ZSgnZW5hYmxlT2JqZWN0UmVzaXppbmcnLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAoIWlzUmVhZE9ubHkkMShlZGl0b3IpKSB7XG4gICAgICAgICAgZWRpdG9yLm9uKCdCZWZvcmVFeGVjQ29tbWFuZCBtb3VzZWRvd24nLCBzZXRPcHRzKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkZEJyQWZ0ZXJMYXN0TGlua3MgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpeExpbmtzID0gKCkgPT4ge1xuICAgICAgICAgIGVhY2goZG9tLnNlbGVjdCgnYTpub3QoW2RhdGEtbWNlLWJsb2NrXSknKSwgbm9kZSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBsZXQgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgICAgIGNvbnN0IHJvb3QgPSBkb20uZ2V0Um9vdCgpO1xuICAgICAgICAgICAgaWYgKChwYXJlbnROb2RlID09PSBudWxsIHx8IHBhcmVudE5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmVudE5vZGUubGFzdENoaWxkKSA9PT0gbm9kZSkge1xuICAgICAgICAgICAgICB3aGlsZSAocGFyZW50Tm9kZSAmJiAhZG9tLmlzQmxvY2socGFyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoKChfYSA9IHBhcmVudE5vZGUucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxhc3RDaGlsZCkgIT09IHBhcmVudE5vZGUgfHwgcGFyZW50Tm9kZSA9PT0gcm9vdCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRvbS5hZGQocGFyZW50Tm9kZSwgJ2JyJywgeyAnZGF0YS1tY2UtYm9ndXMnOiAxIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBlZGl0b3Iub24oJ1NldENvbnRlbnQgRXhlY0NvbW1hbmQnLCBlID0+IHtcbiAgICAgICAgICBpZiAoZS50eXBlID09PSAnc2V0Y29udGVudCcgfHwgZS5jb21tYW5kID09PSAnbWNlSW5zZXJ0TGluaycpIHtcbiAgICAgICAgICAgIGZpeExpbmtzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXREZWZhdWx0QmxvY2tUeXBlID0gKCkgPT4ge1xuICAgICAgICBlZGl0b3Iub24oJ2luaXQnLCAoKSA9PiB7XG4gICAgICAgICAgc2V0RWRpdG9yQ29tbWFuZFN0YXRlKCdEZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yJywgZ2V0Rm9yY2VkUm9vdEJsb2NrKGVkaXRvcikpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0FsbENvbnRlbnRTZWxlY3RlZCA9IGVkaXRvciA9PiB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgICByZXR1cm4gcm5nLnN0YXJ0Q29udGFpbmVyID09PSBybmcuZW5kQ29udGFpbmVyICYmIHJuZy5zdGFydENvbnRhaW5lciA9PT0gYm9keSAmJiBybmcuc3RhcnRPZmZzZXQgPT09IDAgJiYgcm5nLmVuZE9mZnNldCA9PT0gYm9keS5jaGlsZE5vZGVzLmxlbmd0aDtcbiAgICAgIH07XG4gICAgICBjb25zdCBub3JtYWxpemVTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5vbigna2V5dXAgZm9jdXNpbiBtb3VzZXVwJywgZSA9PiB7XG4gICAgICAgICAgaWYgKCFWSy5tb2RpZmllclByZXNzZWQoZSkgJiYgIWlzQWxsQ29udGVudFNlbGVjdGVkKGVkaXRvcikpIHtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5ub3JtYWxpemUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNob3dCcm9rZW5JbWFnZUljb24gPSAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5jb250ZW50U3R5bGVzLnB1c2goJ2ltZzotbW96LWJyb2tlbiB7JyArICctbW96LWZvcmNlLWJyb2tlbi1pbWFnZS1pY29uOjE7JyArICdtaW4td2lkdGg6MjRweDsnICsgJ21pbi1oZWlnaHQ6MjRweCcgKyAnfScpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3RvcmVGb2N1c09uS2V5RG93biA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFlZGl0b3IuaW5saW5lKSB7XG4gICAgICAgICAgZWRpdG9yLm9uKCdrZXlkb3duJywgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgICAgICAgICAgZWRpdG9yLmdldFdpbigpLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBib2R5SGVpZ2h0ID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWVkaXRvci5pbmxpbmUpIHtcbiAgICAgICAgICBlZGl0b3IuY29udGVudFN0eWxlcy5wdXNoKCdib2R5IHttaW4taGVpZ2h0OiAxNTBweH0nKTtcbiAgICAgICAgICBlZGl0b3Iub24oJ2NsaWNrJywgZSA9PiB7XG4gICAgICAgICAgICBsZXQgcm5nO1xuICAgICAgICAgICAgaWYgKGUudGFyZ2V0Lm5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICAgICAgICAgICAgcm5nID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgICAgICAgICAgZWRpdG9yLmdldEJvZHkoKS5mb2N1cygpO1xuICAgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLm5vcm1hbGl6ZSgpO1xuICAgICAgICAgICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGJsb2NrQ21kQXJyb3dOYXZpZ2F0aW9uID0gKCkgPT4ge1xuICAgICAgICBpZiAoaXNNYWMpIHtcbiAgICAgICAgICBlZGl0b3Iub24oJ2tleWRvd24nLCBlID0+IHtcbiAgICAgICAgICAgIGlmIChWSy5tZXRhS2V5UHJlc3NlZChlKSAmJiAhZS5zaGlmdEtleSAmJiAoZS5rZXlDb2RlID09PSAzNyB8fCBlLmtleUNvZGUgPT09IDM5KSkge1xuICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0U2VsKCk7XG4gICAgICAgICAgICAgIHNlbGVjdGlvbi5tb2RpZnkoJ21vdmUnLCBlLmtleUNvZGUgPT09IDM3ID8gJ2JhY2t3YXJkJyA6ICdmb3J3YXJkJywgJ2xpbmVib3VuZGFyeScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgdGFwTGlua3NBbmRJbWFnZXMgPSAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5vbignY2xpY2snLCBlID0+IHtcbiAgICAgICAgICBsZXQgZWxtID0gZS50YXJnZXQ7XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKGVsbS50YWdOYW1lID09PSAnQScpIHtcbiAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSB3aGlsZSAoZWxtID0gZWxtLnBhcmVudE5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLmNvbnRlbnRTdHlsZXMucHVzaCgnLm1jZS1jb250ZW50LWJvZHkgey13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZX0nKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBibG9ja0Zvcm1TdWJtaXRJbnNpZGVFZGl0b3IgPSAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5vbignaW5pdCcsICgpID0+IHtcbiAgICAgICAgICBlZGl0b3IuZG9tLmJpbmQoZWRpdG9yLmdldEJvZHkoKSwgJ3N1Ym1pdCcsIGUgPT4ge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZW1vdmVBcHBsZUludGVyY2hhbmdlQnJzID0gKCkgPT4ge1xuICAgICAgICBwYXJzZXIuYWRkTm9kZUZpbHRlcignYnInLCBub2RlcyA9PiB7XG4gICAgICAgICAgbGV0IGkgPSBub2Rlcy5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgaWYgKG5vZGVzW2ldLmF0dHIoJ2NsYXNzJykgPT09ICdBcHBsZS1pbnRlcmNoYW5nZS1uZXdsaW5lJykge1xuICAgICAgICAgICAgICBub2Rlc1tpXS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlZnJlc2hDb250ZW50RWRpdGFibGUgPSBub29wO1xuICAgICAgY29uc3QgaXNIaWRkZW4gPSAoKSA9PiB7XG4gICAgICAgIGlmICghaXNHZWNrbyB8fCBlZGl0b3IucmVtb3ZlZCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWwgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFNlbCgpO1xuICAgICAgICByZXR1cm4gIXNlbCB8fCAhc2VsLnJhbmdlQ291bnQgfHwgc2VsLnJhbmdlQ291bnQgPT09IDA7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0dXBSdGMgPSAoKSA9PiB7XG4gICAgICAgIGlmIChpc1dlYktpdCkge1xuICAgICAgICAgIGRvY3VtZW50RWxlbWVudEVkaXRpbmdGb2N1cygpO1xuICAgICAgICAgIHNlbGVjdENvbnRyb2xFbGVtZW50cygpO1xuICAgICAgICAgIGJsb2NrRm9ybVN1Ym1pdEluc2lkZUVkaXRvcigpO1xuICAgICAgICAgIHNlbGVjdEFsbCgpO1xuICAgICAgICAgIGlmIChpc2lPUykge1xuICAgICAgICAgICAgcmVzdG9yZUZvY3VzT25LZXlEb3duKCk7XG4gICAgICAgICAgICBib2R5SGVpZ2h0KCk7XG4gICAgICAgICAgICB0YXBMaW5rc0FuZEltYWdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNHZWNrbykge1xuICAgICAgICAgIGZvY3VzQm9keSgpO1xuICAgICAgICAgIHNldEdlY2tvRWRpdGluZ09wdGlvbnMoKTtcbiAgICAgICAgICBzaG93QnJva2VuSW1hZ2VJY29uKCk7XG4gICAgICAgICAgYmxvY2tDbWRBcnJvd05hdmlnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGRyb3BEcmFnRW5kRXZlbnQgPSAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5vbignZHJvcCcsIGV2ZW50ID0+IHtcbiAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IChfYSA9IGV2ZW50LmRhdGFUcmFuc2ZlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldERhdGEoJ3RleHQvaHRtbCcpO1xuICAgICAgICAgIGlmIChpc1N0cmluZyhkYXRhKSAmJiAvXjxpbWdbXj5dKj4kLy50ZXN0KGRhdGEpKSB7XG4gICAgICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ2RyYWdlbmQnLCBuZXcgd2luZG93LkRyYWdFdmVudCgnZHJhZ2VuZCcsIGV2ZW50KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXR1cCA9ICgpID0+IHtcbiAgICAgICAgcmVtb3ZlQmxvY2tRdW90ZU9uQmFja1NwYWNlKCk7XG4gICAgICAgIGVtcHR5RWRpdG9yV2hlbkRlbGV0aW5nKCk7XG4gICAgICAgIGlmICghRW52LndpbmRvd3NQaG9uZSkge1xuICAgICAgICAgIG5vcm1hbGl6ZVNlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1dlYktpdCkge1xuICAgICAgICAgIGRvY3VtZW50RWxlbWVudEVkaXRpbmdGb2N1cygpO1xuICAgICAgICAgIHNlbGVjdENvbnRyb2xFbGVtZW50cygpO1xuICAgICAgICAgIHNldERlZmF1bHRCbG9ja1R5cGUoKTtcbiAgICAgICAgICBibG9ja0Zvcm1TdWJtaXRJbnNpZGVFZGl0b3IoKTtcbiAgICAgICAgICBkaXNhYmxlQmFja3NwYWNlSW50b0FUYWJsZSgpO1xuICAgICAgICAgIHJlbW92ZUFwcGxlSW50ZXJjaGFuZ2VCcnMoKTtcbiAgICAgICAgICBpZiAoaXNpT1MpIHtcbiAgICAgICAgICAgIHJlc3RvcmVGb2N1c09uS2V5RG93bigpO1xuICAgICAgICAgICAgYm9keUhlaWdodCgpO1xuICAgICAgICAgICAgdGFwTGlua3NBbmRJbWFnZXMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0QWxsKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0dlY2tvKSB7XG4gICAgICAgICAgcmVtb3ZlSHJPbkJhY2tzcGFjZSgpO1xuICAgICAgICAgIGZvY3VzQm9keSgpO1xuICAgICAgICAgIHJlbW92ZVN0eWxlc1doZW5EZWxldGluZ0Fjcm9zc0Jsb2NrRWxlbWVudHMoKTtcbiAgICAgICAgICBzZXRHZWNrb0VkaXRpbmdPcHRpb25zKCk7XG4gICAgICAgICAgYWRkQnJBZnRlckxhc3RMaW5rcygpO1xuICAgICAgICAgIHNob3dCcm9rZW5JbWFnZUljb24oKTtcbiAgICAgICAgICBibG9ja0NtZEFycm93TmF2aWdhdGlvbigpO1xuICAgICAgICAgIGRpc2FibGVCYWNrc3BhY2VJbnRvQVRhYmxlKCk7XG4gICAgICAgICAgZHJvcERyYWdFbmRFdmVudCgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKGlzUnRjKGVkaXRvcikpIHtcbiAgICAgICAgc2V0dXBSdGMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldHVwKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWZyZXNoQ29udGVudEVkaXRhYmxlLFxuICAgICAgICBpc0hpZGRlblxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgRE9NJDYgPSBET01VdGlscy5ET007XG4gICAgY29uc3QgYXBwZW5kU3R5bGUgPSAoZWRpdG9yLCB0ZXh0KSA9PiB7XG4gICAgICBjb25zdCBib2R5ID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBnZXRTdHlsZUNvbnRhaW5lcihnZXRSb290Tm9kZShib2R5KSk7XG4gICAgICBjb25zdCBzdHlsZSA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdzdHlsZScpO1xuICAgICAgc2V0JDMoc3R5bGUsICd0eXBlJywgJ3RleHQvY3NzJyk7XG4gICAgICBhcHBlbmQkMShzdHlsZSwgU3VnYXJFbGVtZW50LmZyb21UZXh0KHRleHQpKTtcbiAgICAgIGFwcGVuZCQxKGNvbnRhaW5lciwgc3R5bGUpO1xuICAgICAgZWRpdG9yLm9uKCdyZW1vdmUnLCAoKSA9PiB7XG4gICAgICAgIHJlbW92ZSQ1KHN0eWxlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Um9vdE5hbWUgPSBlZGl0b3IgPT4gZWRpdG9yLmlubGluZSA/IGVkaXRvci5nZXRFbGVtZW50KCkubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCByZW1vdmVVbmRlZmluZWQgPSBvYmogPT4gZmlsdGVyJDQob2JqLCB2ID0+IGlzVW5kZWZpbmVkKHYpID09PSBmYWxzZSk7XG4gICAgY29uc3QgbWtQYXJzZXJTZXR0aW5ncyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBnZXRPcHRpb24gPSBlZGl0b3Iub3B0aW9ucy5nZXQ7XG4gICAgICBjb25zdCBibG9iQ2FjaGUgPSBlZGl0b3IuZWRpdG9yVXBsb2FkLmJsb2JDYWNoZTtcbiAgICAgIHJldHVybiByZW1vdmVVbmRlZmluZWQoe1xuICAgICAgICBhbGxvd19jb25kaXRpb25hbF9jb21tZW50czogZ2V0T3B0aW9uKCdhbGxvd19jb25kaXRpb25hbF9jb21tZW50cycpLFxuICAgICAgICBhbGxvd19odG1sX2RhdGFfdXJsczogZ2V0T3B0aW9uKCdhbGxvd19odG1sX2RhdGFfdXJscycpLFxuICAgICAgICBhbGxvd19zdmdfZGF0YV91cmxzOiBnZXRPcHRpb24oJ2FsbG93X3N2Z19kYXRhX3VybHMnKSxcbiAgICAgICAgYWxsb3dfaHRtbF9pbl9uYW1lZF9hbmNob3I6IGdldE9wdGlvbignYWxsb3dfaHRtbF9pbl9uYW1lZF9hbmNob3InKSxcbiAgICAgICAgYWxsb3dfc2NyaXB0X3VybHM6IGdldE9wdGlvbignYWxsb3dfc2NyaXB0X3VybHMnKSxcbiAgICAgICAgYWxsb3dfdW5zYWZlX2xpbmtfdGFyZ2V0OiBnZXRPcHRpb24oJ2FsbG93X3Vuc2FmZV9saW5rX3RhcmdldCcpLFxuICAgICAgICBjb252ZXJ0X2ZvbnRzX3RvX3NwYW5zOiBnZXRPcHRpb24oJ2NvbnZlcnRfZm9udHNfdG9fc3BhbnMnKSxcbiAgICAgICAgZml4X2xpc3RfZWxlbWVudHM6IGdldE9wdGlvbignZml4X2xpc3RfZWxlbWVudHMnKSxcbiAgICAgICAgZm9udF9zaXplX2xlZ2FjeV92YWx1ZXM6IGdldE9wdGlvbignZm9udF9zaXplX2xlZ2FjeV92YWx1ZXMnKSxcbiAgICAgICAgZm9yY2VkX3Jvb3RfYmxvY2s6IGdldE9wdGlvbignZm9yY2VkX3Jvb3RfYmxvY2snKSxcbiAgICAgICAgZm9yY2VkX3Jvb3RfYmxvY2tfYXR0cnM6IGdldE9wdGlvbignZm9yY2VkX3Jvb3RfYmxvY2tfYXR0cnMnKSxcbiAgICAgICAgcHJlc2VydmVfY2RhdGE6IGdldE9wdGlvbigncHJlc2VydmVfY2RhdGEnKSxcbiAgICAgICAgaW5saW5lX3N0eWxlczogZ2V0T3B0aW9uKCdpbmxpbmVfc3R5bGVzJyksXG4gICAgICAgIHJvb3RfbmFtZTogZ2V0Um9vdE5hbWUoZWRpdG9yKSxcbiAgICAgICAgc2FuaXRpemU6IGdldE9wdGlvbigneHNzX3Nhbml0aXphdGlvbicpLFxuICAgICAgICB2YWxpZGF0ZTogdHJ1ZSxcbiAgICAgICAgYmxvYl9jYWNoZTogYmxvYkNhY2hlLFxuICAgICAgICBkb2N1bWVudDogZWRpdG9yLmdldERvYygpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG1rU2NoZW1hU2V0dGluZ3MgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZ2V0T3B0aW9uID0gZWRpdG9yLm9wdGlvbnMuZ2V0O1xuICAgICAgcmV0dXJuIHJlbW92ZVVuZGVmaW5lZCh7XG4gICAgICAgIGN1c3RvbV9lbGVtZW50czogZ2V0T3B0aW9uKCdjdXN0b21fZWxlbWVudHMnKSxcbiAgICAgICAgZXh0ZW5kZWRfdmFsaWRfZWxlbWVudHM6IGdldE9wdGlvbignZXh0ZW5kZWRfdmFsaWRfZWxlbWVudHMnKSxcbiAgICAgICAgaW52YWxpZF9lbGVtZW50czogZ2V0T3B0aW9uKCdpbnZhbGlkX2VsZW1lbnRzJyksXG4gICAgICAgIGludmFsaWRfc3R5bGVzOiBnZXRPcHRpb24oJ2ludmFsaWRfc3R5bGVzJyksXG4gICAgICAgIHNjaGVtYTogZ2V0T3B0aW9uKCdzY2hlbWEnKSxcbiAgICAgICAgdmFsaWRfY2hpbGRyZW46IGdldE9wdGlvbigndmFsaWRfY2hpbGRyZW4nKSxcbiAgICAgICAgdmFsaWRfY2xhc3NlczogZ2V0T3B0aW9uKCd2YWxpZF9jbGFzc2VzJyksXG4gICAgICAgIHZhbGlkX2VsZW1lbnRzOiBnZXRPcHRpb24oJ3ZhbGlkX2VsZW1lbnRzJyksXG4gICAgICAgIHZhbGlkX3N0eWxlczogZ2V0T3B0aW9uKCd2YWxpZF9zdHlsZXMnKSxcbiAgICAgICAgdmVyaWZ5X2h0bWw6IGdldE9wdGlvbigndmVyaWZ5X2h0bWwnKSxcbiAgICAgICAgcGFkZF9lbXB0eV9ibG9ja19pbmxpbmVfY2hpbGRyZW46IGdldE9wdGlvbignZm9ybWF0X2VtcHR5X2xpbmVzJylcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbWtTZXJpYWxpemVyU2V0dGluZ3MgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZ2V0T3B0aW9uID0gZWRpdG9yLm9wdGlvbnMuZ2V0O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubWtQYXJzZXJTZXR0aW5ncyhlZGl0b3IpLFxuICAgICAgICAuLi5ta1NjaGVtYVNldHRpbmdzKGVkaXRvciksXG4gICAgICAgIC4uLnJlbW92ZVVuZGVmaW5lZCh7XG4gICAgICAgICAgcmVtb3ZlX3RyYWlsaW5nX2JyczogZ2V0T3B0aW9uKCdyZW1vdmVfdHJhaWxpbmdfYnJzJyksXG4gICAgICAgICAgcGFkX2VtcHR5X3dpdGhfYnI6IGdldE9wdGlvbigncGFkX2VtcHR5X3dpdGhfYnInKSxcbiAgICAgICAgICB1cmxfY29udmVydGVyOiBnZXRPcHRpb24oJ3VybF9jb252ZXJ0ZXInKSxcbiAgICAgICAgICB1cmxfY29udmVydGVyX3Njb3BlOiBnZXRPcHRpb24oJ3VybF9jb252ZXJ0ZXJfc2NvcGUnKSxcbiAgICAgICAgICBlbGVtZW50X2Zvcm1hdDogZ2V0T3B0aW9uKCdlbGVtZW50X2Zvcm1hdCcpLFxuICAgICAgICAgIGVudGl0aWVzOiBnZXRPcHRpb24oJ2VudGl0aWVzJyksXG4gICAgICAgICAgZW50aXR5X2VuY29kaW5nOiBnZXRPcHRpb24oJ2VudGl0eV9lbmNvZGluZycpLFxuICAgICAgICAgIGluZGVudDogZ2V0T3B0aW9uKCdpbmRlbnQnKSxcbiAgICAgICAgICBpbmRlbnRfYWZ0ZXI6IGdldE9wdGlvbignaW5kZW50X2FmdGVyJyksXG4gICAgICAgICAgaW5kZW50X2JlZm9yZTogZ2V0T3B0aW9uKCdpbmRlbnRfYmVmb3JlJylcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVQYXJzZXIgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgcGFyc2VyID0gRG9tUGFyc2VyKG1rUGFyc2VyU2V0dGluZ3MoZWRpdG9yKSwgZWRpdG9yLnNjaGVtYSk7XG4gICAgICBwYXJzZXIuYWRkQXR0cmlidXRlRmlsdGVyKCdzcmMsaHJlZixzdHlsZSx0YWJpbmRleCcsIChub2RlcywgbmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgICBjb25zdCBpbnRlcm5hbE5hbWUgPSAnZGF0YS1tY2UtJyArIG5hbWU7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICAgIGxldCB2YWx1ZSA9IG5vZGUuYXR0cihuYW1lKTtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgIW5vZGUuYXR0cihpbnRlcm5hbE5hbWUpKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUuaW5kZXhPZignZGF0YTonKSA9PT0gMCB8fCB2YWx1ZS5pbmRleE9mKCdibG9iOicpID09PSAwKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdzdHlsZScpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBkb20uc2VyaWFsaXplU3R5bGUoZG9tLnBhcnNlU3R5bGUodmFsdWUpLCBub2RlLm5hbWUpO1xuICAgICAgICAgICAgICBpZiAoIXZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBub2RlLmF0dHIoaW50ZXJuYWxOYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgIG5vZGUuYXR0cihuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICd0YWJpbmRleCcpIHtcbiAgICAgICAgICAgICAgbm9kZS5hdHRyKGludGVybmFsTmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgICBub2RlLmF0dHIobmFtZSwgbnVsbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBub2RlLmF0dHIoaW50ZXJuYWxOYW1lLCBlZGl0b3IuY29udmVydFVSTCh2YWx1ZSwgbmFtZSwgbm9kZS5uYW1lKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHBhcnNlci5hZGROb2RlRmlsdGVyKCdzY3JpcHQnLCBub2RlcyA9PiB7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSBub2RlLmF0dHIoJ3R5cGUnKSB8fCAnbm8vdHlwZSc7XG4gICAgICAgICAgaWYgKHR5cGUuaW5kZXhPZignbWNlLScpICE9PSAwKSB7XG4gICAgICAgICAgICBub2RlLmF0dHIoJ3R5cGUnLCAnbWNlLScgKyB0eXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHNob3VsZFByZXNlcnZlQ0RhdGEoZWRpdG9yKSkge1xuICAgICAgICBwYXJzZXIuYWRkTm9kZUZpbHRlcignI2NkYXRhJywgbm9kZXMgPT4ge1xuICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICBsZXQgaSA9IG5vZGVzLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgICBub2RlLnR5cGUgPSA4O1xuICAgICAgICAgICAgbm9kZS5uYW1lID0gJyNjb21tZW50JztcbiAgICAgICAgICAgIG5vZGUudmFsdWUgPSAnW0NEQVRBWycgKyBlZGl0b3IuZG9tLmVuY29kZSgoX2EgPSBub2RlLnZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJykgKyAnXV0nO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBwYXJzZXIuYWRkTm9kZUZpbHRlcigncCxoMSxoMixoMyxoNCxoNSxoNixkaXYnLCBub2RlcyA9PiB7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBub25FbXB0eUVsZW1lbnRzID0gZWRpdG9yLnNjaGVtYS5nZXROb25FbXB0eUVsZW1lbnRzKCk7XG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgaWYgKG5vZGUuaXNFbXB0eShub25FbXB0eUVsZW1lbnRzKSAmJiBub2RlLmdldEFsbCgnYnInKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIG5vZGUuYXBwZW5kKG5ldyBBc3ROb2RlKCdicicsIDEpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHBhcnNlcjtcbiAgICB9O1xuICAgIGNvbnN0IGF1dG9Gb2N1cyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBhdXRvRm9jdXMgPSBnZXRBdXRvRm9jdXMoZWRpdG9yKTtcbiAgICAgIGlmIChhdXRvRm9jdXMpIHtcbiAgICAgICAgRGVsYXkuc2V0RWRpdG9yVGltZW91dChlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICBsZXQgZm9jdXNFZGl0b3I7XG4gICAgICAgICAgaWYgKGF1dG9Gb2N1cyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgZm9jdXNFZGl0b3IgPSBlZGl0b3I7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvY3VzRWRpdG9yID0gZWRpdG9yLmVkaXRvck1hbmFnZXIuZ2V0KGF1dG9Gb2N1cyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmb2N1c0VkaXRvciAmJiAhZm9jdXNFZGl0b3IuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICBmb2N1c0VkaXRvci5mb2N1cygpO1xuICAgICAgICAgICAgZm9jdXNFZGl0b3Iuc2VsZWN0aW9uLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAxMDApO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbW92ZVNlbGVjdGlvblRvRmlyc3RDYXJldFBvc2l0aW9uID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHJvb3QgPSBlZGl0b3IuZG9tLmdldFJvb3QoKTtcbiAgICAgIGlmICghZWRpdG9yLmlubGluZSAmJiAoIWhhc0FueVJhbmdlcyhlZGl0b3IpIHx8IGVkaXRvci5zZWxlY3Rpb24uZ2V0U3RhcnQodHJ1ZSkgPT09IHJvb3QpKSB7XG4gICAgICAgIGZpcnN0UG9zaXRpb25Jbihyb290KS5lYWNoKHBvcyA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHBvcy5nZXROb2RlKCk7XG4gICAgICAgICAgY29uc3QgY2FyZXRQb3MgPSBpc1RhYmxlJDIobm9kZSkgPyBmaXJzdFBvc2l0aW9uSW4obm9kZSkuZ2V0T3IocG9zKSA6IHBvcztcbiAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhjYXJldFBvcy50b1JhbmdlKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGluaXRFZGl0b3IgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmJpbmRQZW5kaW5nRXZlbnREZWxlZ2F0ZXMoKTtcbiAgICAgIGVkaXRvci5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgICBmaXJlSW5pdChlZGl0b3IpO1xuICAgICAgZWRpdG9yLmZvY3VzKHRydWUpO1xuICAgICAgbW92ZVNlbGVjdGlvblRvRmlyc3RDYXJldFBvc2l0aW9uKGVkaXRvcik7XG4gICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoeyBpbml0aWFsOiB0cnVlIH0pO1xuICAgICAgY29uc3QgaW5pdEluc3RhbmNlQ2FsbGJhY2sgPSBnZXRJbml0SW5zdGFuY2VDYWxsYmFjayhlZGl0b3IpO1xuICAgICAgaWYgKGlzRnVuY3Rpb24oaW5pdEluc3RhbmNlQ2FsbGJhY2spKSB7XG4gICAgICAgIGluaXRJbnN0YW5jZUNhbGxiYWNrLmNhbGwoZWRpdG9yLCBlZGl0b3IpO1xuICAgICAgfVxuICAgICAgYXV0b0ZvY3VzKGVkaXRvcik7XG4gICAgfTtcbiAgICBjb25zdCBnZXRTdHlsZVNoZWV0TG9hZGVyJDEgPSBlZGl0b3IgPT4gZWRpdG9yLmlubGluZSA/IGVkaXRvci51aS5zdHlsZVNoZWV0TG9hZGVyIDogZWRpdG9yLmRvbS5zdHlsZVNoZWV0TG9hZGVyO1xuICAgIGNvbnN0IG1ha2VTdHlsZXNoZWV0TG9hZGluZ1Byb21pc2VzID0gKGVkaXRvciwgY3NzLCBmcmFtZWRGb250cykgPT4ge1xuICAgICAgY29uc3QgcHJvbWlzZXMgPSBbZ2V0U3R5bGVTaGVldExvYWRlciQxKGVkaXRvcikubG9hZEFsbChjc3MpXTtcbiAgICAgIGlmIChlZGl0b3IuaW5saW5lKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlcy5jb25jYXQoW2VkaXRvci51aS5zdHlsZVNoZWV0TG9hZGVyLmxvYWRBbGwoZnJhbWVkRm9udHMpXSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBsb2FkQ29udGVudENzcyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBzdHlsZVNoZWV0TG9hZGVyID0gZ2V0U3R5bGVTaGVldExvYWRlciQxKGVkaXRvcik7XG4gICAgICBjb25zdCBmb250Q3NzID0gZ2V0Rm9udENzcyhlZGl0b3IpO1xuICAgICAgY29uc3QgY3NzID0gZWRpdG9yLmNvbnRlbnRDU1M7XG4gICAgICBjb25zdCByZW1vdmVDc3MgPSAoKSA9PiB7XG4gICAgICAgIHN0eWxlU2hlZXRMb2FkZXIudW5sb2FkQWxsKGNzcyk7XG4gICAgICAgIGlmICghZWRpdG9yLmlubGluZSkge1xuICAgICAgICAgIGVkaXRvci51aS5zdHlsZVNoZWV0TG9hZGVyLnVubG9hZEFsbChmb250Q3NzKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGxvYWRlZCA9ICgpID0+IHtcbiAgICAgICAgaWYgKGVkaXRvci5yZW1vdmVkKSB7XG4gICAgICAgICAgcmVtb3ZlQ3NzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWRpdG9yLm9uKCdyZW1vdmUnLCByZW1vdmVDc3MpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKGVkaXRvci5jb250ZW50U3R5bGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGV0IGNvbnRlbnRDc3NUZXh0ID0gJyc7XG4gICAgICAgIFRvb2xzLmVhY2goZWRpdG9yLmNvbnRlbnRTdHlsZXMsIHN0eWxlID0+IHtcbiAgICAgICAgICBjb250ZW50Q3NzVGV4dCArPSBzdHlsZSArICdcXHJcXG4nO1xuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLmRvbS5hZGRTdHlsZShjb250ZW50Q3NzVGV4dCk7XG4gICAgICB9XG4gICAgICBjb25zdCBhbGxTdHlsZXNoZWV0cyA9IFByb21pc2UuYWxsKG1ha2VTdHlsZXNoZWV0TG9hZGluZ1Byb21pc2VzKGVkaXRvciwgY3NzLCBmb250Q3NzKSkudGhlbihsb2FkZWQpLmNhdGNoKGxvYWRlZCk7XG4gICAgICBjb25zdCBjb250ZW50U3R5bGUgPSBnZXRDb250ZW50U3R5bGUoZWRpdG9yKTtcbiAgICAgIGlmIChjb250ZW50U3R5bGUpIHtcbiAgICAgICAgYXBwZW5kU3R5bGUoZWRpdG9yLCBjb250ZW50U3R5bGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFsbFN0eWxlc2hlZXRzO1xuICAgIH07XG4gICAgY29uc3QgcHJlSW5pdCA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBlZGl0b3IuZ2V0RG9jKCksIGJvZHkgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgZmlyZVByZUluaXQoZWRpdG9yKTtcbiAgICAgIGlmICghc2hvdWxkQnJvd3NlclNwZWxsY2hlY2soZWRpdG9yKSkge1xuICAgICAgICBkb2MuYm9keS5zcGVsbGNoZWNrID0gZmFsc2U7XG4gICAgICAgIERPTSQ2LnNldEF0dHJpYihib2R5LCAnc3BlbGxjaGVjaycsICdmYWxzZScpO1xuICAgICAgfVxuICAgICAgZWRpdG9yLnF1aXJrcyA9IFF1aXJrcyhlZGl0b3IpO1xuICAgICAgZmlyZVBvc3RSZW5kZXIoZWRpdG9yKTtcbiAgICAgIGNvbnN0IGRpcmVjdGlvbmFsaXR5ID0gZ2V0RGlyZWN0aW9uYWxpdHkoZWRpdG9yKTtcbiAgICAgIGlmIChkaXJlY3Rpb25hbGl0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGJvZHkuZGlyID0gZGlyZWN0aW9uYWxpdHk7XG4gICAgICB9XG4gICAgICBjb25zdCBwcm90ZWN0ID0gZ2V0UHJvdGVjdChlZGl0b3IpO1xuICAgICAgaWYgKHByb3RlY3QpIHtcbiAgICAgICAgZWRpdG9yLm9uKCdCZWZvcmVTZXRDb250ZW50JywgZSA9PiB7XG4gICAgICAgICAgVG9vbHMuZWFjaChwcm90ZWN0LCBwYXR0ZXJuID0+IHtcbiAgICAgICAgICAgIGUuY29udGVudCA9IGUuY29udGVudC5yZXBsYWNlKHBhdHRlcm4sIHN0ciA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAnPCEtLW1jZTpwcm90ZWN0ZWQgJyArIGVzY2FwZShzdHIpICsgJy0tPic7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlZGl0b3Iub24oJ1NldENvbnRlbnQnLCAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5hZGRWaXN1YWwoZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignY29tcG9zaXRpb25zdGFydCBjb21wb3NpdGlvbmVuZCcsIGUgPT4ge1xuICAgICAgICBlZGl0b3IuY29tcG9zaW5nID0gZS50eXBlID09PSAnY29tcG9zaXRpb25zdGFydCc7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGxvYWRJbml0aWFsQ29udGVudCA9IGVkaXRvciA9PiB7XG4gICAgICBpZiAoIWlzUnRjKGVkaXRvcikpIHtcbiAgICAgICAgZWRpdG9yLmxvYWQoe1xuICAgICAgICAgIGluaXRpYWw6IHRydWUsXG4gICAgICAgICAgZm9ybWF0OiAnaHRtbCdcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlZGl0b3Iuc3RhcnRDb250ZW50ID0gZWRpdG9yLmdldENvbnRlbnQoeyBmb3JtYXQ6ICdyYXcnIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW5pdEVkaXRvcldpdGhJbml0aWFsQ29udGVudCA9IGVkaXRvciA9PiB7XG4gICAgICBpZiAoZWRpdG9yLnJlbW92ZWQgIT09IHRydWUpIHtcbiAgICAgICAgbG9hZEluaXRpYWxDb250ZW50KGVkaXRvcik7XG4gICAgICAgIGluaXRFZGl0b3IoZWRpdG9yKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHN0YXJ0UHJvZ3Jlc3MgPSBlZGl0b3IgPT4ge1xuICAgICAgbGV0IGNhbmNlbGVkID0gZmFsc2U7XG4gICAgICBjb25zdCBwcm9ncmVzc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKCFjYW5jZWxlZCkge1xuICAgICAgICAgIGVkaXRvci5zZXRQcm9ncmVzc1N0YXRlKHRydWUpO1xuICAgICAgICB9XG4gICAgICB9LCA1MDApO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHByb2dyZXNzVGltZW91dCk7XG4gICAgICAgIGNhbmNlbGVkID0gdHJ1ZTtcbiAgICAgICAgZWRpdG9yLnNldFByb2dyZXNzU3RhdGUoZmFsc2UpO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbnRlbnRCb2R5TG9hZGVkID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldEVsbSA9IGVkaXRvci5nZXRFbGVtZW50KCk7XG4gICAgICBsZXQgZG9jID0gZWRpdG9yLmdldERvYygpO1xuICAgICAgaWYgKGVkaXRvci5pbmxpbmUpIHtcbiAgICAgICAgRE9NJDYuYWRkQ2xhc3ModGFyZ2V0RWxtLCAnbWNlLWNvbnRlbnQtYm9keScpO1xuICAgICAgICBlZGl0b3IuY29udGVudERvY3VtZW50ID0gZG9jID0gZG9jdW1lbnQ7XG4gICAgICAgIGVkaXRvci5jb250ZW50V2luZG93ID0gd2luZG93O1xuICAgICAgICBlZGl0b3IuYm9keUVsZW1lbnQgPSB0YXJnZXRFbG07XG4gICAgICAgIGVkaXRvci5jb250ZW50QXJlYUNvbnRhaW5lciA9IHRhcmdldEVsbTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJvZHkgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgYm9keS5kaXNhYmxlZCA9IHRydWU7XG4gICAgICBlZGl0b3IucmVhZG9ubHkgPSBpc1JlYWRPbmx5JDEoZWRpdG9yKTtcbiAgICAgIGVkaXRvci5fZWRpdGFibGVSb290ID0gaGFzRWRpdGFibGVSb290JDEoZWRpdG9yKTtcbiAgICAgIGlmICghZWRpdG9yLnJlYWRvbmx5ICYmIGVkaXRvci5oYXNFZGl0YWJsZVJvb3QoKSkge1xuICAgICAgICBpZiAoZWRpdG9yLmlubGluZSAmJiBET00kNi5nZXRTdHlsZShib2R5LCAncG9zaXRpb24nLCB0cnVlKSA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgICBib2R5LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgICAgICAgfVxuICAgICAgICBib2R5LmNvbnRlbnRFZGl0YWJsZSA9ICd0cnVlJztcbiAgICAgIH1cbiAgICAgIGJvZHkuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIGVkaXRvci5lZGl0b3JVcGxvYWQgPSBFZGl0b3JVcGxvYWQoZWRpdG9yKTtcbiAgICAgIGVkaXRvci5zY2hlbWEgPSBTY2hlbWEobWtTY2hlbWFTZXR0aW5ncyhlZGl0b3IpKTtcbiAgICAgIGVkaXRvci5kb20gPSBET01VdGlscyhkb2MsIHtcbiAgICAgICAga2VlcF92YWx1ZXM6IHRydWUsXG4gICAgICAgIHVybF9jb252ZXJ0ZXI6IGVkaXRvci5jb252ZXJ0VVJMLFxuICAgICAgICB1cmxfY29udmVydGVyX3Njb3BlOiBlZGl0b3IsXG4gICAgICAgIHVwZGF0ZV9zdHlsZXM6IHRydWUsXG4gICAgICAgIHJvb3RfZWxlbWVudDogZWRpdG9yLmlubGluZSA/IGVkaXRvci5nZXRCb2R5KCkgOiBudWxsLFxuICAgICAgICBjb2xsZWN0OiBlZGl0b3IuaW5saW5lLFxuICAgICAgICBzY2hlbWE6IGVkaXRvci5zY2hlbWEsXG4gICAgICAgIGNvbnRlbnRDc3NDb3JzOiBzaG91bGRVc2VDb250ZW50Q3NzQ29ycyhlZGl0b3IpLFxuICAgICAgICByZWZlcnJlclBvbGljeTogZ2V0UmVmZXJyZXJQb2xpY3koZWRpdG9yKSxcbiAgICAgICAgb25TZXRBdHRyaWI6IGUgPT4ge1xuICAgICAgICAgIGVkaXRvci5kaXNwYXRjaCgnU2V0QXR0cmliJywgZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLnBhcnNlciA9IGNyZWF0ZVBhcnNlcihlZGl0b3IpO1xuICAgICAgZWRpdG9yLnNlcmlhbGl6ZXIgPSBEb21TZXJpYWxpemVyKG1rU2VyaWFsaXplclNldHRpbmdzKGVkaXRvciksIGVkaXRvcik7XG4gICAgICBlZGl0b3Iuc2VsZWN0aW9uID0gRWRpdG9yU2VsZWN0aW9uKGVkaXRvci5kb20sIGVkaXRvci5nZXRXaW4oKSwgZWRpdG9yLnNlcmlhbGl6ZXIsIGVkaXRvcik7XG4gICAgICBlZGl0b3IuYW5ub3RhdG9yID0gQW5ub3RhdG9yKGVkaXRvcik7XG4gICAgICBlZGl0b3IuZm9ybWF0dGVyID0gRm9ybWF0dGVyKGVkaXRvcik7XG4gICAgICBlZGl0b3IudW5kb01hbmFnZXIgPSBVbmRvTWFuYWdlcihlZGl0b3IpO1xuICAgICAgZWRpdG9yLl9ub2RlQ2hhbmdlRGlzcGF0Y2hlciA9IG5ldyBOb2RlQ2hhbmdlKGVkaXRvcik7XG4gICAgICBlZGl0b3IuX3NlbGVjdGlvbk92ZXJyaWRlcyA9IFNlbGVjdGlvbk92ZXJyaWRlcyhlZGl0b3IpO1xuICAgICAgc2V0dXAkbyhlZGl0b3IpO1xuICAgICAgc2V0dXAkNihlZGl0b3IpO1xuICAgICAgc2V0dXAkbShlZGl0b3IpO1xuICAgICAgaWYgKCFpc1J0YyhlZGl0b3IpKSB7XG4gICAgICAgIHNldHVwJDUoZWRpdG9yKTtcbiAgICAgICAgc2V0dXAkMShlZGl0b3IpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2FyZXQgPSBzZXR1cCRiKGVkaXRvcik7XG4gICAgICBzZXR1cCRwKGVkaXRvciwgY2FyZXQpO1xuICAgICAgc2V0dXAkbihlZGl0b3IpO1xuICAgICAgc2V0dXAkcShlZGl0b3IpO1xuICAgICAgc2V0dXAkNyhlZGl0b3IpO1xuICAgICAgY29uc3Qgc2V0dXBSdGNUaHVuayA9IHNldHVwJHMoZWRpdG9yKTtcbiAgICAgIHByZUluaXQoZWRpdG9yKTtcbiAgICAgIHNldHVwUnRjVGh1bmsuZm9sZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbmNlbFByb2dyZXNzID0gc3RhcnRQcm9ncmVzcyhlZGl0b3IpO1xuICAgICAgICBsb2FkQ29udGVudENzcyhlZGl0b3IpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGluaXRFZGl0b3JXaXRoSW5pdGlhbENvbnRlbnQoZWRpdG9yKTtcbiAgICAgICAgICBjYW5jZWxQcm9ncmVzcygpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHNldHVwUnRjID0+IHtcbiAgICAgICAgZWRpdG9yLnNldFByb2dyZXNzU3RhdGUodHJ1ZSk7XG4gICAgICAgIGxvYWRDb250ZW50Q3NzKGVkaXRvcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgc2V0dXBSdGMoKS50aGVuKF9ydGNNb2RlID0+IHtcbiAgICAgICAgICAgIGVkaXRvci5zZXRQcm9ncmVzc1N0YXRlKGZhbHNlKTtcbiAgICAgICAgICAgIGluaXRFZGl0b3JXaXRoSW5pdGlhbENvbnRlbnQoZWRpdG9yKTtcbiAgICAgICAgICAgIGJpbmRFdmVudHMoZWRpdG9yKTtcbiAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgZWRpdG9yLm5vdGlmaWNhdGlvbk1hbmFnZXIub3Blbih7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IFN0cmluZyhlcnIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGluaXRFZGl0b3JXaXRoSW5pdGlhbENvbnRlbnQoZWRpdG9yKTtcbiAgICAgICAgICAgIGJpbmRFdmVudHMoZWRpdG9yKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmlsdGVyID0gYWx3YXlzO1xuICAgIGNvbnN0IGJpbmQgPSAoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIpID0+IGJpbmQkMihlbGVtZW50LCBldmVudCwgZmlsdGVyLCBoYW5kbGVyKTtcblxuICAgIGNvbnN0IERPTSQ1ID0gRE9NVXRpbHMuRE9NO1xuICAgIGNvbnN0IGNyZWF0ZUlmcmFtZUVsZW1lbnQgPSAoaWQsIHRpdGxlLCBjdXN0b21BdHRycywgdGFiaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGlmcmFtZSA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdpZnJhbWUnKTtcbiAgICAgIHRhYmluZGV4LmVhY2godCA9PiBzZXQkMyhpZnJhbWUsICd0YWJpbmRleCcsIHQpKTtcbiAgICAgIHNldEFsbCQxKGlmcmFtZSwgY3VzdG9tQXR0cnMpO1xuICAgICAgc2V0QWxsJDEoaWZyYW1lLCB7XG4gICAgICAgIGlkOiBpZCArICdfaWZyJyxcbiAgICAgICAgZnJhbWVCb3JkZXI6ICcwJyxcbiAgICAgICAgYWxsb3dUcmFuc3BhcmVuY3k6ICd0cnVlJyxcbiAgICAgICAgdGl0bGVcbiAgICAgIH0pO1xuICAgICAgYWRkJDIoaWZyYW1lLCAndG94LWVkaXQtYXJlYV9faWZyYW1lJyk7XG4gICAgICByZXR1cm4gaWZyYW1lO1xuICAgIH07XG4gICAgY29uc3QgZ2V0SWZyYW1lSHRtbCA9IGVkaXRvciA9PiB7XG4gICAgICBsZXQgaWZyYW1lSFRNTCA9IGdldERvY1R5cGUoZWRpdG9yKSArICc8aHRtbD48aGVhZD4nO1xuICAgICAgaWYgKGdldERvY3VtZW50QmFzZVVybChlZGl0b3IpICE9PSBlZGl0b3IuZG9jdW1lbnRCYXNlVXJsKSB7XG4gICAgICAgIGlmcmFtZUhUTUwgKz0gJzxiYXNlIGhyZWY9XCInICsgZWRpdG9yLmRvY3VtZW50QmFzZVVSSS5nZXRVUkkoKSArICdcIiAvPic7XG4gICAgICB9XG4gICAgICBpZnJhbWVIVE1MICs9ICc8bWV0YSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD1VVEYtOFwiIC8+JztcbiAgICAgIGNvbnN0IGJvZHlJZCA9IGdldEJvZHlJZChlZGl0b3IpO1xuICAgICAgY29uc3QgYm9keUNsYXNzID0gZ2V0Qm9keUNsYXNzKGVkaXRvcik7XG4gICAgICBjb25zdCB0cmFuc2xhdGVkQXJpYVRleHQgPSBlZGl0b3IudHJhbnNsYXRlKGdldElmcmFtZUFyaWFUZXh0KGVkaXRvcikpO1xuICAgICAgaWYgKGdldENvbnRlbnRTZWN1cml0eVBvbGljeShlZGl0b3IpKSB7XG4gICAgICAgIGlmcmFtZUhUTUwgKz0gJzxtZXRhIGh0dHAtZXF1aXY9XCJDb250ZW50LVNlY3VyaXR5LVBvbGljeVwiIGNvbnRlbnQ9XCInICsgZ2V0Q29udGVudFNlY3VyaXR5UG9saWN5KGVkaXRvcikgKyAnXCIgLz4nO1xuICAgICAgfVxuICAgICAgaWZyYW1lSFRNTCArPSAnPC9oZWFkPicgKyBgPGJvZHkgaWQ9XCIkeyBib2R5SWQgfVwiIGNsYXNzPVwibWNlLWNvbnRlbnQtYm9keSAkeyBib2R5Q2xhc3MgfVwiIGRhdGEtaWQ9XCIkeyBlZGl0b3IuaWQgfVwiIGFyaWEtbGFiZWw9XCIkeyB0cmFuc2xhdGVkQXJpYVRleHQgfVwiPmAgKyAnPGJyPicgKyAnPC9ib2R5PjwvaHRtbD4nO1xuICAgICAgcmV0dXJuIGlmcmFtZUhUTUw7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVJZnJhbWUgPSAoZWRpdG9yLCBib3hJbmZvKSA9PiB7XG4gICAgICBjb25zdCBpZnJhbWVUaXRsZSA9IGVkaXRvci50cmFuc2xhdGUoJ1JpY2ggVGV4dCBBcmVhJyk7XG4gICAgICBjb25zdCB0YWJpbmRleCA9IGdldE9wdChTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0RWxlbWVudCgpKSwgJ3RhYmluZGV4JykuYmluZCh0b0ludCk7XG4gICAgICBjb25zdCBpZnIgPSBjcmVhdGVJZnJhbWVFbGVtZW50KGVkaXRvci5pZCwgaWZyYW1lVGl0bGUsIGdldElmcmFtZUF0dHJzKGVkaXRvciksIHRhYmluZGV4KS5kb207XG4gICAgICBpZnIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICBpZnIub25sb2FkID0gbnVsbDtcbiAgICAgICAgZWRpdG9yLmRpc3BhdGNoKCdsb2FkJyk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLmNvbnRlbnRBcmVhQ29udGFpbmVyID0gYm94SW5mby5pZnJhbWVDb250YWluZXI7XG4gICAgICBlZGl0b3IuaWZyYW1lRWxlbWVudCA9IGlmcjtcbiAgICAgIGVkaXRvci5pZnJhbWVIVE1MID0gZ2V0SWZyYW1lSHRtbChlZGl0b3IpO1xuICAgICAgRE9NJDUuYWRkKGJveEluZm8uaWZyYW1lQ29udGFpbmVyLCBpZnIpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0dXBJZnJhbWVCb2R5ID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGlmcmFtZSA9IGVkaXRvci5pZnJhbWVFbGVtZW50O1xuICAgICAgY29uc3QgcmVhZHkgPSAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5jb250ZW50RG9jdW1lbnQgPSBpZnJhbWUuY29udGVudERvY3VtZW50O1xuICAgICAgICBjb250ZW50Qm9keUxvYWRlZChlZGl0b3IpO1xuICAgICAgfTtcbiAgICAgIGlmIChzaG91bGRVc2VEb2N1bWVudFdyaXRlKGVkaXRvcikgfHwgRW52LmJyb3dzZXIuaXNGaXJlZm94KCkpIHtcbiAgICAgICAgY29uc3QgZG9jID0gZWRpdG9yLmdldERvYygpO1xuICAgICAgICBkb2Mub3BlbigpO1xuICAgICAgICBkb2Mud3JpdGUoZWRpdG9yLmlmcmFtZUhUTUwpO1xuICAgICAgICBkb2MuY2xvc2UoKTtcbiAgICAgICAgcmVhZHkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGJpbmRlciA9IGJpbmQoU3VnYXJFbGVtZW50LmZyb21Eb20oaWZyYW1lKSwgJ2xvYWQnLCAoKSA9PiB7XG4gICAgICAgICAgYmluZGVyLnVuYmluZCgpO1xuICAgICAgICAgIHJlYWR5KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZnJhbWUuc3JjZG9jID0gZWRpdG9yLmlmcmFtZUhUTUw7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbml0JDEgPSAoZWRpdG9yLCBib3hJbmZvKSA9PiB7XG4gICAgICBjcmVhdGVJZnJhbWUoZWRpdG9yLCBib3hJbmZvKTtcbiAgICAgIGlmIChib3hJbmZvLmVkaXRvckNvbnRhaW5lcikge1xuICAgICAgICBib3hJbmZvLmVkaXRvckNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gZWRpdG9yLm9yZ0Rpc3BsYXk7XG4gICAgICAgIGVkaXRvci5oaWRkZW4gPSBET00kNS5pc0hpZGRlbihib3hJbmZvLmVkaXRvckNvbnRhaW5lcik7XG4gICAgICB9XG4gICAgICBlZGl0b3IuZ2V0RWxlbWVudCgpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICBET00kNS5zZXRBdHRyaWIoZWRpdG9yLmlkLCAnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgICAgZWRpdG9yLmdldEVsZW1lbnQoKS5zdHlsZS52aXNpYmlsaXR5ID0gZWRpdG9yLm9yZ1Zpc2liaWxpdHk7XG4gICAgICBzZXR1cElmcmFtZUJvZHkoZWRpdG9yKTtcbiAgICB9O1xuXG4gICAgY29uc3QgRE9NJDQgPSBET01VdGlscy5ET007XG4gICAgY29uc3QgaW5pdFBsdWdpbiA9IChlZGl0b3IsIGluaXRpYWxpemVkUGx1Z2lucywgcGx1Z2luKSA9PiB7XG4gICAgICBjb25zdCBQbHVnaW4gPSBQbHVnaW5NYW5hZ2VyLmdldChwbHVnaW4pO1xuICAgICAgY29uc3QgcGx1Z2luVXJsID0gUGx1Z2luTWFuYWdlci51cmxzW3BsdWdpbl0gfHwgZWRpdG9yLmRvY3VtZW50QmFzZVVybC5yZXBsYWNlKC9cXC8kLywgJycpO1xuICAgICAgcGx1Z2luID0gVG9vbHMudHJpbShwbHVnaW4pO1xuICAgICAgaWYgKFBsdWdpbiAmJiBUb29scy5pbkFycmF5KGluaXRpYWxpemVkUGx1Z2lucywgcGx1Z2luKSA9PT0gLTEpIHtcbiAgICAgICAgaWYgKGVkaXRvci5wbHVnaW5zW3BsdWdpbl0pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwbHVnaW5JbnN0YW5jZSA9IFBsdWdpbihlZGl0b3IsIHBsdWdpblVybCkgfHwge307XG4gICAgICAgICAgZWRpdG9yLnBsdWdpbnNbcGx1Z2luXSA9IHBsdWdpbkluc3RhbmNlO1xuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHBsdWdpbkluc3RhbmNlLmluaXQpKSB7XG4gICAgICAgICAgICBwbHVnaW5JbnN0YW5jZS5pbml0KGVkaXRvciwgcGx1Z2luVXJsKTtcbiAgICAgICAgICAgIGluaXRpYWxpemVkUGx1Z2lucy5wdXNoKHBsdWdpbik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcGx1Z2luSW5pdEVycm9yKGVkaXRvciwgcGx1Z2luLCBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdHJpbUxlZ2FjeVByZWZpeCA9IG5hbWUgPT4ge1xuICAgICAgcmV0dXJuIG5hbWUucmVwbGFjZSgvXlxcLS8sICcnKTtcbiAgICB9O1xuICAgIGNvbnN0IGluaXRQbHVnaW5zID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGluaXRpYWxpemVkUGx1Z2lucyA9IFtdO1xuICAgICAgZWFjaCRlKGdldFBsdWdpbnMoZWRpdG9yKSwgbmFtZSA9PiB7XG4gICAgICAgIGluaXRQbHVnaW4oZWRpdG9yLCBpbml0aWFsaXplZFBsdWdpbnMsIHRyaW1MZWdhY3lQcmVmaXgobmFtZSkpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBpbml0SWNvbnMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgaWNvblBhY2tOYW1lID0gVG9vbHMudHJpbShnZXRJY29uUGFja05hbWUoZWRpdG9yKSk7XG4gICAgICBjb25zdCBjdXJyZW50SWNvbnMgPSBlZGl0b3IudWkucmVnaXN0cnkuZ2V0QWxsKCkuaWNvbnM7XG4gICAgICBjb25zdCBsb2FkSWNvbnMgPSB7XG4gICAgICAgIC4uLkljb25NYW5hZ2VyLmdldCgnZGVmYXVsdCcpLmljb25zLFxuICAgICAgICAuLi5JY29uTWFuYWdlci5nZXQoaWNvblBhY2tOYW1lKS5pY29uc1xuICAgICAgfTtcbiAgICAgIGVhY2gkZChsb2FkSWNvbnMsIChzdmdEYXRhLCBpY29uKSA9PiB7XG4gICAgICAgIGlmICghaGFzJDIoY3VycmVudEljb25zLCBpY29uKSkge1xuICAgICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRJY29uKGljb24sIHN2Z0RhdGEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGluaXRUaGVtZSA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCB0aGVtZSA9IGdldFRoZW1lKGVkaXRvcik7XG4gICAgICBpZiAoaXNTdHJpbmcodGhlbWUpKSB7XG4gICAgICAgIGNvbnN0IFRoZW1lID0gVGhlbWVNYW5hZ2VyLmdldCh0aGVtZSk7XG4gICAgICAgIGVkaXRvci50aGVtZSA9IFRoZW1lKGVkaXRvciwgVGhlbWVNYW5hZ2VyLnVybHNbdGhlbWVdKSB8fCB7fTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZWRpdG9yLnRoZW1lLmluaXQpKSB7XG4gICAgICAgICAgZWRpdG9yLnRoZW1lLmluaXQoZWRpdG9yLCBUaGVtZU1hbmFnZXIudXJsc1t0aGVtZV0gfHwgZWRpdG9yLmRvY3VtZW50QmFzZVVybC5yZXBsYWNlKC9cXC8kLywgJycpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWRpdG9yLnRoZW1lID0ge307XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbml0TW9kZWwgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgbW9kZWwgPSBnZXRNb2RlbChlZGl0b3IpO1xuICAgICAgY29uc3QgTW9kZWwgPSBNb2RlbE1hbmFnZXIuZ2V0KG1vZGVsKTtcbiAgICAgIGVkaXRvci5tb2RlbCA9IE1vZGVsKGVkaXRvciwgTW9kZWxNYW5hZ2VyLnVybHNbbW9kZWxdKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckZyb21Mb2FkZWRUaGVtZSA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCByZW5kZXIgPSBlZGl0b3IudGhlbWUucmVuZGVyVUk7XG4gICAgICByZXR1cm4gcmVuZGVyID8gcmVuZGVyKCkgOiByZW5kZXJUaGVtZUZhbHNlKGVkaXRvcik7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJGcm9tVGhlbWVGdW5jID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGVsbSA9IGVkaXRvci5nZXRFbGVtZW50KCk7XG4gICAgICBjb25zdCB0aGVtZSA9IGdldFRoZW1lKGVkaXRvcik7XG4gICAgICBjb25zdCBpbmZvID0gdGhlbWUoZWRpdG9yLCBlbG0pO1xuICAgICAgaWYgKGluZm8uZWRpdG9yQ29udGFpbmVyLm5vZGVUeXBlKSB7XG4gICAgICAgIGluZm8uZWRpdG9yQ29udGFpbmVyLmlkID0gaW5mby5lZGl0b3JDb250YWluZXIuaWQgfHwgZWRpdG9yLmlkICsgJ19wYXJlbnQnO1xuICAgICAgfVxuICAgICAgaWYgKGluZm8uaWZyYW1lQ29udGFpbmVyICYmIGluZm8uaWZyYW1lQ29udGFpbmVyLm5vZGVUeXBlKSB7XG4gICAgICAgIGluZm8uaWZyYW1lQ29udGFpbmVyLmlkID0gaW5mby5pZnJhbWVDb250YWluZXIuaWQgfHwgZWRpdG9yLmlkICsgJ19pZnJhbWVjb250YWluZXInO1xuICAgICAgfVxuICAgICAgaW5mby5oZWlnaHQgPSBpbmZvLmlmcmFtZUhlaWdodCA/IGluZm8uaWZyYW1lSGVpZ2h0IDogZWxtLm9mZnNldEhlaWdodDtcbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlVGhlbWVGYWxzZVJlc3VsdCA9IChlbGVtZW50LCBpZnJhbWUpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVkaXRvckNvbnRhaW5lcjogZWxlbWVudCxcbiAgICAgICAgaWZyYW1lQ29udGFpbmVyOiBpZnJhbWUsXG4gICAgICAgIGFwaToge31cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJUaGVtZUZhbHNlSWZyYW1lID0gdGFyZ2V0RWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBpZnJhbWVDb250YWluZXIgPSBET00kNC5jcmVhdGUoJ2RpdicpO1xuICAgICAgRE9NJDQuaW5zZXJ0QWZ0ZXIoaWZyYW1lQ29udGFpbmVyLCB0YXJnZXRFbGVtZW50KTtcbiAgICAgIHJldHVybiBjcmVhdGVUaGVtZUZhbHNlUmVzdWx0KGlmcmFtZUNvbnRhaW5lciwgaWZyYW1lQ29udGFpbmVyKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlclRoZW1lRmFsc2UgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGVkaXRvci5nZXRFbGVtZW50KCk7XG4gICAgICByZXR1cm4gZWRpdG9yLmlubGluZSA/IGNyZWF0ZVRoZW1lRmFsc2VSZXN1bHQobnVsbCkgOiByZW5kZXJUaGVtZUZhbHNlSWZyYW1lKHRhcmdldEVsZW1lbnQpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyVGhlbWVVaSA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBlbG0gPSBlZGl0b3IuZ2V0RWxlbWVudCgpO1xuICAgICAgZWRpdG9yLm9yZ0Rpc3BsYXkgPSBlbG0uc3R5bGUuZGlzcGxheTtcbiAgICAgIGlmIChpc1N0cmluZyhnZXRUaGVtZShlZGl0b3IpKSkge1xuICAgICAgICByZXR1cm4gcmVuZGVyRnJvbUxvYWRlZFRoZW1lKGVkaXRvcik7XG4gICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24oZ2V0VGhlbWUoZWRpdG9yKSkpIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlckZyb21UaGVtZUZ1bmMoZWRpdG9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZW5kZXJUaGVtZUZhbHNlKGVkaXRvcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhdWdtZW50RWRpdG9yVWlBcGkgPSAoZWRpdG9yLCBhcGkpID0+IHtcbiAgICAgIGNvbnN0IHVpQXBpRmFjYWRlID0ge1xuICAgICAgICBzaG93OiBPcHRpb25hbC5mcm9tKGFwaS5zaG93KS5nZXRPcihub29wKSxcbiAgICAgICAgaGlkZTogT3B0aW9uYWwuZnJvbShhcGkuaGlkZSkuZ2V0T3Iobm9vcCksXG4gICAgICAgIGlzRW5hYmxlZDogT3B0aW9uYWwuZnJvbShhcGkuaXNFbmFibGVkKS5nZXRPcihhbHdheXMpLFxuICAgICAgICBzZXRFbmFibGVkOiBzdGF0ZSA9PiB7XG4gICAgICAgICAgaWYgKCFlZGl0b3IubW9kZS5pc1JlYWRPbmx5KCkpIHtcbiAgICAgICAgICAgIE9wdGlvbmFsLmZyb20oYXBpLnNldEVuYWJsZWQpLmVhY2goZiA9PiBmKHN0YXRlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZWRpdG9yLnVpID0ge1xuICAgICAgICAuLi5lZGl0b3IudWksXG4gICAgICAgIC4uLnVpQXBpRmFjYWRlXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgaW5pdCA9IGFzeW5jIGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ1NjcmlwdHNMb2FkZWQnKTtcbiAgICAgIGluaXRJY29ucyhlZGl0b3IpO1xuICAgICAgaW5pdFRoZW1lKGVkaXRvcik7XG4gICAgICBpbml0TW9kZWwoZWRpdG9yKTtcbiAgICAgIGluaXRQbHVnaW5zKGVkaXRvcik7XG4gICAgICBjb25zdCByZW5kZXJJbmZvID0gYXdhaXQgcmVuZGVyVGhlbWVVaShlZGl0b3IpO1xuICAgICAgYXVnbWVudEVkaXRvclVpQXBpKGVkaXRvciwgT3B0aW9uYWwuZnJvbShyZW5kZXJJbmZvLmFwaSkuZ2V0T3Ioe30pKTtcbiAgICAgIGVkaXRvci5lZGl0b3JDb250YWluZXIgPSByZW5kZXJJbmZvLmVkaXRvckNvbnRhaW5lcjtcbiAgICAgIGFwcGVuZENvbnRlbnRDc3NGcm9tU2V0dGluZ3MoZWRpdG9yKTtcbiAgICAgIGlmIChlZGl0b3IuaW5saW5lKSB7XG4gICAgICAgIGNvbnRlbnRCb2R5TG9hZGVkKGVkaXRvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0JDEoZWRpdG9yLCB7XG4gICAgICAgICAgZWRpdG9yQ29udGFpbmVyOiByZW5kZXJJbmZvLmVkaXRvckNvbnRhaW5lcixcbiAgICAgICAgICBpZnJhbWVDb250YWluZXI6IHJlbmRlckluZm8uaWZyYW1lQ29udGFpbmVyXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBET00kMyA9IERPTVV0aWxzLkRPTTtcbiAgICBjb25zdCBoYXNTa2lwTG9hZFByZWZpeCA9IG5hbWUgPT4gbmFtZS5jaGFyQXQoMCkgPT09ICctJztcbiAgICBjb25zdCBsb2FkTGFuZ3VhZ2UgPSAoc2NyaXB0TG9hZGVyLCBlZGl0b3IpID0+IHtcbiAgICAgIGNvbnN0IGxhbmd1YWdlQ29kZSA9IGdldExhbmd1YWdlQ29kZShlZGl0b3IpO1xuICAgICAgY29uc3QgbGFuZ3VhZ2VVcmwgPSBnZXRMYW5ndWFnZVVybChlZGl0b3IpO1xuICAgICAgaWYgKCFJMThuLmhhc0NvZGUobGFuZ3VhZ2VDb2RlKSAmJiBsYW5ndWFnZUNvZGUgIT09ICdlbicpIHtcbiAgICAgICAgY29uc3QgdXJsID0gaXNOb3RFbXB0eShsYW5ndWFnZVVybCkgPyBsYW5ndWFnZVVybCA6IGAkeyBlZGl0b3IuZWRpdG9yTWFuYWdlci5iYXNlVVJMIH0vbGFuZ3MvJHsgbGFuZ3VhZ2VDb2RlIH0uanNgO1xuICAgICAgICBzY3JpcHRMb2FkZXIuYWRkKHVybCkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgIGxhbmd1YWdlTG9hZEVycm9yKGVkaXRvciwgdXJsLCBsYW5ndWFnZUNvZGUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGxvYWRUaGVtZSA9IChlZGl0b3IsIHN1ZmZpeCkgPT4ge1xuICAgICAgY29uc3QgdGhlbWUgPSBnZXRUaGVtZShlZGl0b3IpO1xuICAgICAgaWYgKGlzU3RyaW5nKHRoZW1lKSAmJiAhaGFzU2tpcExvYWRQcmVmaXgodGhlbWUpICYmICFoYXMkMihUaGVtZU1hbmFnZXIudXJscywgdGhlbWUpKSB7XG4gICAgICAgIGNvbnN0IHRoZW1lVXJsID0gZ2V0VGhlbWVVcmwoZWRpdG9yKTtcbiAgICAgICAgY29uc3QgdXJsID0gdGhlbWVVcmwgPyBlZGl0b3IuZG9jdW1lbnRCYXNlVVJJLnRvQWJzb2x1dGUodGhlbWVVcmwpIDogYHRoZW1lcy8keyB0aGVtZSB9L3RoZW1lJHsgc3VmZml4IH0uanNgO1xuICAgICAgICBUaGVtZU1hbmFnZXIubG9hZCh0aGVtZSwgdXJsKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgdGhlbWVMb2FkRXJyb3IoZWRpdG9yLCB1cmwsIHRoZW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBsb2FkTW9kZWwgPSAoZWRpdG9yLCBzdWZmaXgpID0+IHtcbiAgICAgIGNvbnN0IG1vZGVsID0gZ2V0TW9kZWwoZWRpdG9yKTtcbiAgICAgIGlmIChtb2RlbCAhPT0gJ3BsdWdpbicgJiYgIWhhcyQyKE1vZGVsTWFuYWdlci51cmxzLCBtb2RlbCkpIHtcbiAgICAgICAgY29uc3QgbW9kZWxVcmwgPSBnZXRNb2RlbFVybChlZGl0b3IpO1xuICAgICAgICBjb25zdCB1cmwgPSBpc1N0cmluZyhtb2RlbFVybCkgPyBlZGl0b3IuZG9jdW1lbnRCYXNlVVJJLnRvQWJzb2x1dGUobW9kZWxVcmwpIDogYG1vZGVscy8keyBtb2RlbCB9L21vZGVsJHsgc3VmZml4IH0uanNgO1xuICAgICAgICBNb2RlbE1hbmFnZXIubG9hZChtb2RlbCwgdXJsKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgbW9kZWxMb2FkRXJyb3IoZWRpdG9yLCB1cmwsIG1vZGVsKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRJY29uc1VybE1ldGFGcm9tVXJsID0gZWRpdG9yID0+IE9wdGlvbmFsLmZyb20oZ2V0SWNvbnNVcmwoZWRpdG9yKSkuZmlsdGVyKGlzTm90RW1wdHkpLm1hcCh1cmwgPT4gKHtcbiAgICAgIHVybCxcbiAgICAgIG5hbWU6IE9wdGlvbmFsLm5vbmUoKVxuICAgIH0pKTtcbiAgICBjb25zdCBnZXRJY29uc1VybE1ldGFGcm9tTmFtZSA9IChlZGl0b3IsIG5hbWUsIHN1ZmZpeCkgPT4gT3B0aW9uYWwuZnJvbShuYW1lKS5maWx0ZXIobmFtZSA9PiBpc05vdEVtcHR5KG5hbWUpICYmICFJY29uTWFuYWdlci5oYXMobmFtZSkpLm1hcChuYW1lID0+ICh7XG4gICAgICB1cmw6IGAkeyBlZGl0b3IuZWRpdG9yTWFuYWdlci5iYXNlVVJMIH0vaWNvbnMvJHsgbmFtZSB9L2ljb25zJHsgc3VmZml4IH0uanNgLFxuICAgICAgbmFtZTogT3B0aW9uYWwuc29tZShuYW1lKVxuICAgIH0pKTtcbiAgICBjb25zdCBsb2FkSWNvbnMgPSAoc2NyaXB0TG9hZGVyLCBlZGl0b3IsIHN1ZmZpeCkgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdEljb25zVXJsID0gZ2V0SWNvbnNVcmxNZXRhRnJvbU5hbWUoZWRpdG9yLCAnZGVmYXVsdCcsIHN1ZmZpeCk7XG4gICAgICBjb25zdCBjdXN0b21JY29uc1VybCA9IGdldEljb25zVXJsTWV0YUZyb21VcmwoZWRpdG9yKS5vclRodW5rKCgpID0+IGdldEljb25zVXJsTWV0YUZyb21OYW1lKGVkaXRvciwgZ2V0SWNvblBhY2tOYW1lKGVkaXRvciksICcnKSk7XG4gICAgICBlYWNoJGUoY2F0KFtcbiAgICAgICAgZGVmYXVsdEljb25zVXJsLFxuICAgICAgICBjdXN0b21JY29uc1VybFxuICAgICAgXSksIHVybE1ldGEgPT4ge1xuICAgICAgICBzY3JpcHRMb2FkZXIuYWRkKHVybE1ldGEudXJsKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgaWNvbnNMb2FkRXJyb3IoZWRpdG9yLCB1cmxNZXRhLnVybCwgdXJsTWV0YS5uYW1lLmdldE9yVW5kZWZpbmVkKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbG9hZFBsdWdpbnMgPSAoZWRpdG9yLCBzdWZmaXgpID0+IHtcbiAgICAgIGNvbnN0IGxvYWRQbHVnaW4gPSAobmFtZSwgdXJsKSA9PiB7XG4gICAgICAgIFBsdWdpbk1hbmFnZXIubG9hZChuYW1lLCB1cmwpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICBwbHVnaW5Mb2FkRXJyb3IoZWRpdG9yLCB1cmwsIG5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBlYWNoJGQoZ2V0RXh0ZXJuYWxQbHVnaW5zJDEoZWRpdG9yKSwgKHVybCwgbmFtZSkgPT4ge1xuICAgICAgICBsb2FkUGx1Z2luKG5hbWUsIHVybCk7XG4gICAgICAgIGVkaXRvci5vcHRpb25zLnNldCgncGx1Z2lucycsIGdldFBsdWdpbnMoZWRpdG9yKS5jb25jYXQobmFtZSkpO1xuICAgICAgfSk7XG4gICAgICBlYWNoJGUoZ2V0UGx1Z2lucyhlZGl0b3IpLCBwbHVnaW4gPT4ge1xuICAgICAgICBwbHVnaW4gPSBUb29scy50cmltKHBsdWdpbik7XG4gICAgICAgIGlmIChwbHVnaW4gJiYgIVBsdWdpbk1hbmFnZXIudXJsc1twbHVnaW5dICYmICFoYXNTa2lwTG9hZFByZWZpeChwbHVnaW4pKSB7XG4gICAgICAgICAgbG9hZFBsdWdpbihwbHVnaW4sIGBwbHVnaW5zLyR7IHBsdWdpbiB9L3BsdWdpbiR7IHN1ZmZpeCB9LmpzYCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaXNUaGVtZUxvYWRlZCA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCB0aGVtZSA9IGdldFRoZW1lKGVkaXRvcik7XG4gICAgICByZXR1cm4gIWlzU3RyaW5nKHRoZW1lKSB8fCBpc05vbk51bGxhYmxlKFRoZW1lTWFuYWdlci5nZXQodGhlbWUpKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzTW9kZWxMb2FkZWQgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgbW9kZWwgPSBnZXRNb2RlbChlZGl0b3IpO1xuICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUoTW9kZWxNYW5hZ2VyLmdldChtb2RlbCkpO1xuICAgIH07XG4gICAgY29uc3QgbG9hZFNjcmlwdHMgPSAoZWRpdG9yLCBzdWZmaXgpID0+IHtcbiAgICAgIGNvbnN0IHNjcmlwdExvYWRlciA9IFNjcmlwdExvYWRlci5TY3JpcHRMb2FkZXI7XG4gICAgICBjb25zdCBpbml0RWRpdG9yID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWVkaXRvci5yZW1vdmVkICYmIGlzVGhlbWVMb2FkZWQoZWRpdG9yKSAmJiBpc01vZGVsTG9hZGVkKGVkaXRvcikpIHtcbiAgICAgICAgICBpbml0KGVkaXRvcik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBsb2FkVGhlbWUoZWRpdG9yLCBzdWZmaXgpO1xuICAgICAgbG9hZE1vZGVsKGVkaXRvciwgc3VmZml4KTtcbiAgICAgIGxvYWRMYW5ndWFnZShzY3JpcHRMb2FkZXIsIGVkaXRvcik7XG4gICAgICBsb2FkSWNvbnMoc2NyaXB0TG9hZGVyLCBlZGl0b3IsIHN1ZmZpeCk7XG4gICAgICBsb2FkUGx1Z2lucyhlZGl0b3IsIHN1ZmZpeCk7XG4gICAgICBzY3JpcHRMb2FkZXIubG9hZFF1ZXVlKCkudGhlbihpbml0RWRpdG9yLCBpbml0RWRpdG9yKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFN0eWxlU2hlZXRMb2FkZXIgPSAoZWxlbWVudCwgZWRpdG9yKSA9PiBpbnN0YW5jZS5mb3JFbGVtZW50KGVsZW1lbnQsIHtcbiAgICAgIGNvbnRlbnRDc3NDb3JzOiBoYXNDb250ZW50Q3NzQ29ycyhlZGl0b3IpLFxuICAgICAgcmVmZXJyZXJQb2xpY3k6IGdldFJlZmVycmVyUG9saWN5KGVkaXRvcilcbiAgICB9KTtcbiAgICBjb25zdCByZW5kZXIgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgaWQgPSBlZGl0b3IuaWQ7XG4gICAgICBJMThuLnNldENvZGUoZ2V0TGFuZ3VhZ2VDb2RlKGVkaXRvcikpO1xuICAgICAgY29uc3QgcmVhZHlIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICBET00kMy51bmJpbmQod2luZG93LCAncmVhZHknLCByZWFkeUhhbmRsZXIpO1xuICAgICAgICBlZGl0b3IucmVuZGVyKCk7XG4gICAgICB9O1xuICAgICAgaWYgKCFFdmVudFV0aWxzLkV2ZW50LmRvbUxvYWRlZCkge1xuICAgICAgICBET00kMy5iaW5kKHdpbmRvdywgJ3JlYWR5JywgcmVhZHlIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFlZGl0b3IuZ2V0RWxlbWVudCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0RWxlbWVudCgpKTtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gY2xvbmUkNChlbGVtZW50KTtcbiAgICAgIGVkaXRvci5vbigncmVtb3ZlJywgKCkgPT4ge1xuICAgICAgICBlYWNocihlbGVtZW50LmRvbS5hdHRyaWJ1dGVzLCBhdHRyID0+IHJlbW92ZSRhKGVsZW1lbnQsIGF0dHIubmFtZSkpO1xuICAgICAgICBzZXRBbGwkMShlbGVtZW50LCBzbmFwc2hvdCk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci51aS5zdHlsZVNoZWV0TG9hZGVyID0gZ2V0U3R5bGVTaGVldExvYWRlcihlbGVtZW50LCBlZGl0b3IpO1xuICAgICAgaWYgKCFpc0lubGluZShlZGl0b3IpKSB7XG4gICAgICAgIGVkaXRvci5vcmdWaXNpYmlsaXR5ID0gZWRpdG9yLmdldEVsZW1lbnQoKS5zdHlsZS52aXNpYmlsaXR5O1xuICAgICAgICBlZGl0b3IuZ2V0RWxlbWVudCgpLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkaXRvci5pbmxpbmUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgZm9ybSA9IGVkaXRvci5nZXRFbGVtZW50KCkuZm9ybSB8fCBET00kMy5nZXRQYXJlbnQoaWQsICdmb3JtJyk7XG4gICAgICBpZiAoZm9ybSkge1xuICAgICAgICBlZGl0b3IuZm9ybUVsZW1lbnQgPSBmb3JtO1xuICAgICAgICBpZiAoaGFzSGlkZGVuSW5wdXQoZWRpdG9yKSAmJiAhaXNUZXh0YXJlYU9ySW5wdXQoZWRpdG9yLmdldEVsZW1lbnQoKSkpIHtcbiAgICAgICAgICBET00kMy5pbnNlcnRBZnRlcihET00kMy5jcmVhdGUoJ2lucHV0Jywge1xuICAgICAgICAgICAgdHlwZTogJ2hpZGRlbicsXG4gICAgICAgICAgICBuYW1lOiBpZFxuICAgICAgICAgIH0pLCBpZCk7XG4gICAgICAgICAgZWRpdG9yLmhhc0hpZGRlbklucHV0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlZGl0b3IuZm9ybUV2ZW50RGVsZWdhdGUgPSBlID0+IHtcbiAgICAgICAgICBlZGl0b3IuZGlzcGF0Y2goZS50eXBlLCBlKTtcbiAgICAgICAgfTtcbiAgICAgICAgRE9NJDMuYmluZChmb3JtLCAnc3VibWl0IHJlc2V0JywgZWRpdG9yLmZvcm1FdmVudERlbGVnYXRlKTtcbiAgICAgICAgZWRpdG9yLm9uKCdyZXNldCcsICgpID0+IHtcbiAgICAgICAgICBlZGl0b3IucmVzZXRDb250ZW50KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoc2hvdWxkUGF0Y2hTdWJtaXQoZWRpdG9yKSAmJiAhZm9ybS5zdWJtaXQubm9kZVR5cGUgJiYgIWZvcm0uc3VibWl0Lmxlbmd0aCAmJiAhZm9ybS5fbWNlT2xkU3VibWl0KSB7XG4gICAgICAgICAgZm9ybS5fbWNlT2xkU3VibWl0ID0gZm9ybS5zdWJtaXQ7XG4gICAgICAgICAgZm9ybS5zdWJtaXQgPSAoKSA9PiB7XG4gICAgICAgICAgICBlZGl0b3IuZWRpdG9yTWFuYWdlci50cmlnZ2VyU2F2ZSgpO1xuICAgICAgICAgICAgZWRpdG9yLnNldERpcnR5KGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiBmb3JtLl9tY2VPbGRTdWJtaXQoZm9ybSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWRpdG9yLndpbmRvd01hbmFnZXIgPSBXaW5kb3dNYW5hZ2VyKGVkaXRvcik7XG4gICAgICBlZGl0b3Iubm90aWZpY2F0aW9uTWFuYWdlciA9IE5vdGlmaWNhdGlvbk1hbmFnZXIoZWRpdG9yKTtcbiAgICAgIGlmIChpc0VuY29kaW5nWG1sKGVkaXRvcikpIHtcbiAgICAgICAgZWRpdG9yLm9uKCdHZXRDb250ZW50JywgZSA9PiB7XG4gICAgICAgICAgaWYgKGUuc2F2ZSkge1xuICAgICAgICAgICAgZS5jb250ZW50ID0gRE9NJDMuZW5jb2RlKGUuY29udGVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRBZGRGb3JtU3VibWl0VHJpZ2dlcihlZGl0b3IpKSB7XG4gICAgICAgIGVkaXRvci5vbignc3VibWl0JywgKCkgPT4ge1xuICAgICAgICAgIGlmIChlZGl0b3IuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIGVkaXRvci5zYXZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRBZGRVbmxvYWRUcmlnZ2VyKGVkaXRvcikpIHtcbiAgICAgICAgZWRpdG9yLl9iZWZvcmVVbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKGVkaXRvci5pbml0aWFsaXplZCAmJiAhZWRpdG9yLmRlc3Ryb3llZCAmJiAhZWRpdG9yLmlzSGlkZGVuKCkpIHtcbiAgICAgICAgICAgIGVkaXRvci5zYXZlKHtcbiAgICAgICAgICAgICAgZm9ybWF0OiAncmF3JyxcbiAgICAgICAgICAgICAgbm9fZXZlbnRzOiB0cnVlLFxuICAgICAgICAgICAgICBzZXRfZGlydHk6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGVkaXRvci5lZGl0b3JNYW5hZ2VyLm9uKCdCZWZvcmVVbmxvYWQnLCBlZGl0b3IuX2JlZm9yZVVubG9hZCk7XG4gICAgICB9XG4gICAgICBlZGl0b3IuZWRpdG9yTWFuYWdlci5hZGQoZWRpdG9yKTtcbiAgICAgIGxvYWRTY3JpcHRzKGVkaXRvciwgZWRpdG9yLnN1ZmZpeCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNldEVkaXRhYmxlUm9vdCA9IChlZGl0b3IsIHN0YXRlKSA9PiB7XG4gICAgICBpZiAoZWRpdG9yLl9lZGl0YWJsZVJvb3QgIT09IHN0YXRlKSB7XG4gICAgICAgIGVkaXRvci5fZWRpdGFibGVSb290ID0gc3RhdGU7XG4gICAgICAgIGlmICghZWRpdG9yLnJlYWRvbmx5KSB7XG4gICAgICAgICAgZWRpdG9yLmdldEJvZHkoKS5jb250ZW50RWRpdGFibGUgPSBTdHJpbmcoZWRpdG9yLmhhc0VkaXRhYmxlUm9vdCgpKTtcbiAgICAgICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgICAgICBmaXJlRWRpdGFibGVSb290U3RhdGVDaGFuZ2UoZWRpdG9yLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoYXNFZGl0YWJsZVJvb3QgPSBlZGl0b3IgPT4gZWRpdG9yLl9lZGl0YWJsZVJvb3Q7XG5cbiAgICBjb25zdCBzZWN0aW9uUmVzdWx0ID0gKHNlY3Rpb25zLCBzZXR0aW5ncykgPT4gKHtcbiAgICAgIHNlY3Rpb25zOiBjb25zdGFudChzZWN0aW9ucyksXG4gICAgICBvcHRpb25zOiBjb25zdGFudChzZXR0aW5ncylcbiAgICB9KTtcbiAgICBjb25zdCBkZXZpY2VEZXRlY3Rpb24gPSBkZXRlY3QkMigpLmRldmljZVR5cGU7XG4gICAgY29uc3QgaXNQaG9uZSA9IGRldmljZURldGVjdGlvbi5pc1Bob25lKCk7XG4gICAgY29uc3QgaXNUYWJsZXQgPSBkZXZpY2VEZXRlY3Rpb24uaXNUYWJsZXQoKTtcbiAgICBjb25zdCBub3JtYWxpemVQbHVnaW5zID0gcGx1Z2lucyA9PiB7XG4gICAgICBpZiAoaXNOdWxsYWJsZShwbHVnaW5zKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwbHVnaW5OYW1lcyA9IGlzQXJyYXkkMShwbHVnaW5zKSA/IHBsdWdpbnMgOiBwbHVnaW5zLnNwbGl0KC9bICxdLyk7XG4gICAgICAgIGNvbnN0IHRyaW1tZWRQbHVnaW5zID0gbWFwJDMocGx1Z2luTmFtZXMsIHRyaW0kMyk7XG4gICAgICAgIHJldHVybiBmaWx0ZXIkNSh0cmltbWVkUGx1Z2lucywgaXNOb3RFbXB0eSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBleHRyYWN0U2VjdGlvbnMgPSAoa2V5cywgb3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYmlmaWx0ZXIob3B0aW9ucywgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5zJDIoa2V5cywga2V5KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHNlY3Rpb25SZXN1bHQocmVzdWx0LnQsIHJlc3VsdC5mKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNlY3Rpb24gPSAoc2VjdGlvblJlc3VsdCwgbmFtZSwgZGVmYXVsdHMgPSB7fSkgPT4ge1xuICAgICAgY29uc3Qgc2VjdGlvbnMgPSBzZWN0aW9uUmVzdWx0LnNlY3Rpb25zKCk7XG4gICAgICBjb25zdCBzZWN0aW9uT3B0aW9ucyA9IGdldCRhKHNlY3Rpb25zLCBuYW1lKS5nZXRPcih7fSk7XG4gICAgICByZXR1cm4gVG9vbHMuZXh0ZW5kKHt9LCBkZWZhdWx0cywgc2VjdGlvbk9wdGlvbnMpO1xuICAgIH07XG4gICAgY29uc3QgaGFzU2VjdGlvbiA9IChzZWN0aW9uUmVzdWx0LCBuYW1lKSA9PiB7XG4gICAgICByZXR1cm4gaGFzJDIoc2VjdGlvblJlc3VsdC5zZWN0aW9ucygpLCBuYW1lKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNlY3Rpb25Db25maWcgPSAoc2VjdGlvblJlc3VsdCwgbmFtZSkgPT4ge1xuICAgICAgcmV0dXJuIGhhc1NlY3Rpb24oc2VjdGlvblJlc3VsdCwgbmFtZSkgPyBzZWN0aW9uUmVzdWx0LnNlY3Rpb25zKClbbmFtZV0gOiB7fTtcbiAgICB9O1xuICAgIGNvbnN0IGdldE1vYmlsZU92ZXJyaWRlT3B0aW9ucyA9IChtb2JpbGVPcHRpb25zLCBpc1Bob25lKSA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0TW9iaWxlT3B0aW9ucyA9IHtcbiAgICAgICAgdGFibGVfZ3JpZDogZmFsc2UsXG4gICAgICAgIG9iamVjdF9yZXNpemluZzogZmFsc2UsXG4gICAgICAgIHJlc2l6ZTogZmFsc2UsXG4gICAgICAgIHRvb2xiYXJfbW9kZTogZ2V0JGEobW9iaWxlT3B0aW9ucywgJ3Rvb2xiYXJfbW9kZScpLmdldE9yKCdzY3JvbGxpbmcnKSxcbiAgICAgICAgdG9vbGJhcl9zdGlja3k6IGZhbHNlXG4gICAgICB9O1xuICAgICAgY29uc3QgZGVmYXVsdFBob25lT3B0aW9ucyA9IHsgbWVudWJhcjogZmFsc2UgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRlZmF1bHRNb2JpbGVPcHRpb25zLFxuICAgICAgICAuLi5pc1Bob25lID8gZGVmYXVsdFBob25lT3B0aW9ucyA6IHt9XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZ2V0RXh0ZXJuYWxQbHVnaW5zID0gKG92ZXJyaWRlT3B0aW9ucywgb3B0aW9ucykgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgdXNlckRlZmluZWRFeHRlcm5hbFBsdWdpbnMgPSAoX2EgPSBvcHRpb25zLmV4dGVybmFsX3BsdWdpbnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9O1xuICAgICAgaWYgKG92ZXJyaWRlT3B0aW9ucyAmJiBvdmVycmlkZU9wdGlvbnMuZXh0ZXJuYWxfcGx1Z2lucykge1xuICAgICAgICByZXR1cm4gVG9vbHMuZXh0ZW5kKHt9LCBvdmVycmlkZU9wdGlvbnMuZXh0ZXJuYWxfcGx1Z2lucywgdXNlckRlZmluZWRFeHRlcm5hbFBsdWdpbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVzZXJEZWZpbmVkRXh0ZXJuYWxQbHVnaW5zO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY29tYmluZVBsdWdpbnMgPSAoZm9yY2VkUGx1Z2lucywgcGx1Z2lucykgPT4gW1xuICAgICAgLi4ubm9ybWFsaXplUGx1Z2lucyhmb3JjZWRQbHVnaW5zKSxcbiAgICAgIC4uLm5vcm1hbGl6ZVBsdWdpbnMocGx1Z2lucylcbiAgICBdO1xuICAgIGNvbnN0IGdldFBsYXRmb3JtUGx1Z2lucyA9IChpc01vYmlsZURldmljZSwgc2VjdGlvblJlc3VsdCwgZGVza3RvcFBsdWdpbnMsIG1vYmlsZVBsdWdpbnMpID0+IHtcbiAgICAgIGlmIChpc01vYmlsZURldmljZSAmJiBoYXNTZWN0aW9uKHNlY3Rpb25SZXN1bHQsICdtb2JpbGUnKSkge1xuICAgICAgICByZXR1cm4gbW9iaWxlUGx1Z2lucztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkZXNrdG9wUGx1Z2lucztcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gKGlzTW9iaWxlRGV2aWNlLCBzZWN0aW9uUmVzdWx0LCBkZWZhdWx0T3ZlcnJpZGVPcHRpb25zLCBvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBmb3JjZWRQbHVnaW5zID0gbm9ybWFsaXplUGx1Z2lucyhkZWZhdWx0T3ZlcnJpZGVPcHRpb25zLmZvcmNlZF9wbHVnaW5zKTtcbiAgICAgIGNvbnN0IGRlc2t0b3BQbHVnaW5zID0gbm9ybWFsaXplUGx1Z2lucyhvcHRpb25zLnBsdWdpbnMpO1xuICAgICAgY29uc3QgbW9iaWxlQ29uZmlnID0gZ2V0U2VjdGlvbkNvbmZpZyhzZWN0aW9uUmVzdWx0LCAnbW9iaWxlJyk7XG4gICAgICBjb25zdCBtb2JpbGVQbHVnaW5zID0gbW9iaWxlQ29uZmlnLnBsdWdpbnMgPyBub3JtYWxpemVQbHVnaW5zKG1vYmlsZUNvbmZpZy5wbHVnaW5zKSA6IGRlc2t0b3BQbHVnaW5zO1xuICAgICAgY29uc3QgcGxhdGZvcm1QbHVnaW5zID0gZ2V0UGxhdGZvcm1QbHVnaW5zKGlzTW9iaWxlRGV2aWNlLCBzZWN0aW9uUmVzdWx0LCBkZXNrdG9wUGx1Z2lucywgbW9iaWxlUGx1Z2lucyk7XG4gICAgICBjb25zdCBjb21iaW5lZFBsdWdpbnMgPSBjb21iaW5lUGx1Z2lucyhmb3JjZWRQbHVnaW5zLCBwbGF0Zm9ybVBsdWdpbnMpO1xuICAgICAgcmV0dXJuIFRvb2xzLmV4dGVuZChvcHRpb25zLCB7XG4gICAgICAgIGZvcmNlZF9wbHVnaW5zOiBmb3JjZWRQbHVnaW5zLFxuICAgICAgICBwbHVnaW5zOiBjb21iaW5lZFBsdWdpbnNcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaXNPbk1vYmlsZSA9IChpc01vYmlsZURldmljZSwgc2VjdGlvblJlc3VsdCkgPT4ge1xuICAgICAgcmV0dXJuIGlzTW9iaWxlRGV2aWNlICYmIGhhc1NlY3Rpb24oc2VjdGlvblJlc3VsdCwgJ21vYmlsZScpO1xuICAgIH07XG4gICAgY29uc3QgY29tYmluZU9wdGlvbnMgPSAoaXNNb2JpbGVEZXZpY2UsIGlzUGhvbmUsIGRlZmF1bHRPcHRpb25zLCBkZWZhdWx0T3ZlcnJpZGVPcHRpb25zLCBvcHRpb25zKSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBkZXZpY2VPdmVycmlkZU9wdGlvbnMgPSBpc01vYmlsZURldmljZSA/IHsgbW9iaWxlOiBnZXRNb2JpbGVPdmVycmlkZU9wdGlvbnMoKF9hID0gb3B0aW9ucy5tb2JpbGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9LCBpc1Bob25lKSB9IDoge307XG4gICAgICBjb25zdCBzZWN0aW9uUmVzdWx0ID0gZXh0cmFjdFNlY3Rpb25zKFsnbW9iaWxlJ10sIGRlZXBNZXJnZShkZXZpY2VPdmVycmlkZU9wdGlvbnMsIG9wdGlvbnMpKTtcbiAgICAgIGNvbnN0IGV4dGVuZGVkT3B0aW9ucyA9IFRvb2xzLmV4dGVuZChkZWZhdWx0T3B0aW9ucywgZGVmYXVsdE92ZXJyaWRlT3B0aW9ucywgc2VjdGlvblJlc3VsdC5vcHRpb25zKCksIGlzT25Nb2JpbGUoaXNNb2JpbGVEZXZpY2UsIHNlY3Rpb25SZXN1bHQpID8gZ2V0U2VjdGlvbihzZWN0aW9uUmVzdWx0LCAnbW9iaWxlJykgOiB7fSwgeyBleHRlcm5hbF9wbHVnaW5zOiBnZXRFeHRlcm5hbFBsdWdpbnMoZGVmYXVsdE92ZXJyaWRlT3B0aW9ucywgc2VjdGlvblJlc3VsdC5vcHRpb25zKCkpIH0pO1xuICAgICAgcmV0dXJuIHByb2Nlc3NQbHVnaW5zKGlzTW9iaWxlRGV2aWNlLCBzZWN0aW9uUmVzdWx0LCBkZWZhdWx0T3ZlcnJpZGVPcHRpb25zLCBleHRlbmRlZE9wdGlvbnMpO1xuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplT3B0aW9ucyA9IChkZWZhdWx0T3ZlcnJpZGVPcHRpb25zLCBvcHRpb25zKSA9PiBjb21iaW5lT3B0aW9ucyhpc1Bob25lIHx8IGlzVGFibGV0LCBpc1Bob25lLCBvcHRpb25zLCBkZWZhdWx0T3ZlcnJpZGVPcHRpb25zLCBvcHRpb25zKTtcblxuICAgIGNvbnN0IGFkZFZpc3VhbCA9IChlZGl0b3IsIGVsbSkgPT4gYWRkVmlzdWFsJDEoZWRpdG9yLCBlbG0pO1xuXG4gICAgY29uc3QgcmVnaXN0ZXJFeGVjQ29tbWFuZHMkMyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCB0b2dnbGVGb3JtYXQgPSAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgZWRpdG9yLmZvcm1hdHRlci50b2dnbGUobmFtZSwgdmFsdWUpO1xuICAgICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICAgIH07XG4gICAgICBjb25zdCB0b2dnbGVBbGlnbiA9IGFsaWduID0+ICgpID0+IHtcbiAgICAgICAgZWFjaCRlKCdsZWZ0LGNlbnRlcixyaWdodCxqdXN0aWZ5Jy5zcGxpdCgnLCcpLCBuYW1lID0+IHtcbiAgICAgICAgICBpZiAoYWxpZ24gIT09IG5hbWUpIHtcbiAgICAgICAgICAgIGVkaXRvci5mb3JtYXR0ZXIucmVtb3ZlKCdhbGlnbicgKyBuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoYWxpZ24gIT09ICdub25lJykge1xuICAgICAgICAgIHRvZ2dsZUZvcm1hdCgnYWxpZ24nICsgYWxpZ24pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZWRpdG9yLmVkaXRvckNvbW1hbmRzLmFkZENvbW1hbmRzKHtcbiAgICAgICAgSnVzdGlmeUxlZnQ6IHRvZ2dsZUFsaWduKCdsZWZ0JyksXG4gICAgICAgIEp1c3RpZnlDZW50ZXI6IHRvZ2dsZUFsaWduKCdjZW50ZXInKSxcbiAgICAgICAgSnVzdGlmeVJpZ2h0OiB0b2dnbGVBbGlnbigncmlnaHQnKSxcbiAgICAgICAgSnVzdGlmeUZ1bGw6IHRvZ2dsZUFsaWduKCdqdXN0aWZ5JyksXG4gICAgICAgIEp1c3RpZnlOb25lOiB0b2dnbGVBbGlnbignbm9uZScpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyUXVlcnlTdGF0ZUNvbW1hbmRzJDEgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgYWxpZ25TdGF0ZXMgPSBuYW1lID0+ICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSBzZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSA/IFtlZGl0b3IuZG9tLmdldFBhcmVudChzZWxlY3Rpb24uZ2V0Tm9kZSgpLCBlZGl0b3IuZG9tLmlzQmxvY2spXSA6IHNlbGVjdGlvbi5nZXRTZWxlY3RlZEJsb2NrcygpO1xuICAgICAgICByZXR1cm4gZXhpc3RzKG5vZGVzLCBub2RlID0+IGlzTm9uTnVsbGFibGUoZWRpdG9yLmZvcm1hdHRlci5tYXRjaE5vZGUobm9kZSwgbmFtZSkpKTtcbiAgICAgIH07XG4gICAgICBlZGl0b3IuZWRpdG9yQ29tbWFuZHMuYWRkQ29tbWFuZHMoe1xuICAgICAgICBKdXN0aWZ5TGVmdDogYWxpZ25TdGF0ZXMoJ2FsaWdubGVmdCcpLFxuICAgICAgICBKdXN0aWZ5Q2VudGVyOiBhbGlnblN0YXRlcygnYWxpZ25jZW50ZXInKSxcbiAgICAgICAgSnVzdGlmeVJpZ2h0OiBhbGlnblN0YXRlcygnYWxpZ25yaWdodCcpLFxuICAgICAgICBKdXN0aWZ5RnVsbDogYWxpZ25TdGF0ZXMoJ2FsaWduanVzdGlmeScpXG4gICAgICB9LCAnc3RhdGUnKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyQ29tbWFuZHMkYiA9IGVkaXRvciA9PiB7XG4gICAgICByZWdpc3RlckV4ZWNDb21tYW5kcyQzKGVkaXRvcik7XG4gICAgICByZWdpc3RlclF1ZXJ5U3RhdGVDb21tYW5kcyQxKGVkaXRvcik7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlZ2lzdGVyQ29tbWFuZHMkYSA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IuZWRpdG9yQ29tbWFuZHMuYWRkQ29tbWFuZHMoe1xuICAgICAgICAnQ3V0LENvcHksUGFzdGUnOiBjb21tYW5kID0+IHtcbiAgICAgICAgICBjb25zdCBkb2MgPSBlZGl0b3IuZ2V0RG9jKCk7XG4gICAgICAgICAgbGV0IGZhaWxlZDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZG9jLmV4ZWNDb21tYW5kKGNvbW1hbmQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY29tbWFuZCA9PT0gJ3Bhc3RlJyAmJiAhZG9jLnF1ZXJ5Q29tbWFuZEVuYWJsZWQoY29tbWFuZCkpIHtcbiAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmYWlsZWQgfHwgIWRvYy5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoY29tbWFuZCkpIHtcbiAgICAgICAgICAgIGxldCBtc2cgPSBlZGl0b3IudHJhbnNsYXRlKGBZb3VyIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGNsaXBib2FyZC4gYCArICdQbGVhc2UgdXNlIHRoZSBDdHJsK1gvQy9WIGtleWJvYXJkIHNob3J0Y3V0cyBpbnN0ZWFkLicpO1xuICAgICAgICAgICAgaWYgKEVudi5vcy5pc01hY09TKCkgfHwgRW52Lm9zLmlzaU9TKCkpIHtcbiAgICAgICAgICAgICAgbXNnID0gbXNnLnJlcGxhY2UoL0N0cmxcXCsvZywgJ1xcdTIzMTgrJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlZGl0b3Iubm90aWZpY2F0aW9uTWFuYWdlci5vcGVuKHtcbiAgICAgICAgICAgICAgdGV4dDogbXNnLFxuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCB0cmltT3JQYWRMZWZ0UmlnaHQgPSAoZG9tLCBybmcsIGh0bWwpID0+IHtcbiAgICAgIGNvbnN0IHJvb3QgPSBTdWdhckVsZW1lbnQuZnJvbURvbShkb20uZ2V0Um9vdCgpKTtcbiAgICAgIGlmIChuZWVkc1RvQmVOYnNwTGVmdChyb290LCBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KHJuZykpKSB7XG4gICAgICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoL14gLywgJyZuYnNwOycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvXiZuYnNwOy8sICcgJyk7XG4gICAgICB9XG4gICAgICBpZiAobmVlZHNUb0JlTmJzcFJpZ2h0KHJvb3QsIENhcmV0UG9zaXRpb24uZnJvbVJhbmdlRW5kKHJuZykpKSB7XG4gICAgICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoLygmbmJzcDt8ICkoPGJyKCBcXC8pPik/JC8sICcmbmJzcDsnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoLyZuYnNwOyg8YnIoIFxcLyk/Pik/JC8sICcgJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaHRtbDtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJvY2Vzc1ZhbHVlJDEgPSB2YWx1ZSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBkZXRhaWxzID0gVG9vbHMuZXh0ZW5kKHtcbiAgICAgICAgICBwYXN0ZTogdmFsdWUucGFzdGUsXG4gICAgICAgICAgZGF0YTogeyBwYXN0ZTogdmFsdWUucGFzdGUgfVxuICAgICAgICB9LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogdmFsdWUuY29udGVudCxcbiAgICAgICAgICBkZXRhaWxzXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiB2YWx1ZSxcbiAgICAgICAgZGV0YWlsczoge31cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCB0cmltT3JQYWQgPSAoZWRpdG9yLCB2YWx1ZSkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBpZiAoL14gfCAkLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdHJpbU9yUGFkTGVmdFJpZ2h0KGRvbSwgc2VsZWN0aW9uLmdldFJuZygpLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnRBdENhcmV0ID0gKGVkaXRvciwgdmFsdWUpID0+IHtcbiAgICAgIGlmIChlZGl0b3Iuc2VsZWN0aW9uLmlzRWRpdGFibGUoKSkge1xuICAgICAgICBjb25zdCB7Y29udGVudCwgZGV0YWlsc30gPSBwcm9jZXNzVmFsdWUkMSh2YWx1ZSk7XG4gICAgICAgIHByZVByb2Nlc3NTZXRDb250ZW50KGVkaXRvciwge1xuICAgICAgICAgIC4uLmRldGFpbHMsXG4gICAgICAgICAgY29udGVudDogdHJpbU9yUGFkKGVkaXRvciwgY29udGVudCksXG4gICAgICAgICAgZm9ybWF0OiAnaHRtbCcsXG4gICAgICAgICAgc2V0OiBmYWxzZSxcbiAgICAgICAgICBzZWxlY3Rpb246IHRydWVcbiAgICAgICAgfSkuZWFjaChhcmdzID0+IHtcbiAgICAgICAgICBjb25zdCBpbnNlcnRlZENvbnRlbnQgPSBpbnNlcnRDb250ZW50JDEoZWRpdG9yLCBhcmdzLmNvbnRlbnQsIGRldGFpbHMpO1xuICAgICAgICAgIHBvc3RQcm9jZXNzU2V0Q29udGVudChlZGl0b3IsIGluc2VydGVkQ29udGVudCwgYXJncyk7XG4gICAgICAgICAgZWRpdG9yLmFkZFZpc3VhbCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmVnaXN0ZXJDb21tYW5kcyQ5ID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5lZGl0b3JDb21tYW5kcy5hZGRDb21tYW5kcyh7XG4gICAgICAgIG1jZUNsZWFudXA6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBibSA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Qm9va21hcmsoKTtcbiAgICAgICAgICBlZGl0b3Iuc2V0Q29udGVudChlZGl0b3IuZ2V0Q29udGVudCgpKTtcbiAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLm1vdmVUb0Jvb2ttYXJrKGJtKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5zZXJ0SW1hZ2U6IChfY29tbWFuZCwgX3VpLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGluc2VydEF0Q2FyZXQoZWRpdG9yLCBlZGl0b3IuZG9tLmNyZWF0ZUhUTUwoJ2ltZycsIHsgc3JjOiB2YWx1ZSB9KSk7XG4gICAgICAgIH0sXG4gICAgICAgIGluc2VydEhvcml6b250YWxSdWxlOiAoKSA9PiB7XG4gICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VJbnNlcnRDb250ZW50JywgZmFsc2UsICc8aHI+Jyk7XG4gICAgICAgIH0sXG4gICAgICAgIGluc2VydFRleHQ6IChfY29tbWFuZCwgX3VpLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGluc2VydEF0Q2FyZXQoZWRpdG9yLCBlZGl0b3IuZG9tLmVuY29kZSh2YWx1ZSkpO1xuICAgICAgICB9LFxuICAgICAgICBpbnNlcnRIVE1MOiAoX2NvbW1hbmQsIF91aSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpbnNlcnRBdENhcmV0KGVkaXRvciwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBtY2VJbnNlcnRDb250ZW50OiAoX2NvbW1hbmQsIF91aSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpbnNlcnRBdENhcmV0KGVkaXRvciwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBtY2VTZXRDb250ZW50OiAoX2NvbW1hbmQsIF91aSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBlZGl0b3Iuc2V0Q29udGVudCh2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1jZVJlcGxhY2VDb250ZW50OiAoX2NvbW1hbmQsIF91aSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZUluc2VydENvbnRlbnQnLCBmYWxzZSwgdmFsdWUucmVwbGFjZSgvXFx7XFwkc2VsZWN0aW9uXFx9L2csIGVkaXRvci5zZWxlY3Rpb24uZ2V0Q29udGVudCh7IGZvcm1hdDogJ3RleHQnIH0pKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1jZU5ld0RvY3VtZW50OiAoKSA9PiB7XG4gICAgICAgICAgZWRpdG9yLnNldENvbnRlbnQoZ2V0TmV3RG9jdW1lbnRDb250ZW50KGVkaXRvcikpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGVnYWN5UHJvcE5hbWVzID0ge1xuICAgICAgJ2ZvbnQtc2l6ZSc6ICdzaXplJyxcbiAgICAgICdmb250LWZhbWlseSc6ICdmYWNlJ1xuICAgIH07XG4gICAgY29uc3QgaXNGb250ID0gaXNUYWcoJ2ZvbnQnKTtcbiAgICBjb25zdCBnZXRTcGVjaWZpZWRGb250UHJvcCA9IChwcm9wTmFtZSwgcm9vdEVsbSwgZWxtKSA9PiB7XG4gICAgICBjb25zdCBnZXRQcm9wZXJ0eSA9IGVsbSA9PiBnZXRSYXcoZWxtLCBwcm9wTmFtZSkub3JUaHVuaygoKSA9PiB7XG4gICAgICAgIGlmIChpc0ZvbnQoZWxtKSkge1xuICAgICAgICAgIHJldHVybiBnZXQkYShsZWdhY3lQcm9wTmFtZXMsIHByb3BOYW1lKS5iaW5kKGxlZ2FjeVByb3BOYW1lID0+IGdldE9wdChlbG0sIGxlZ2FjeVByb3BOYW1lKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBpc1Jvb3QgPSBlbG0gPT4gZXEoU3VnYXJFbGVtZW50LmZyb21Eb20ocm9vdEVsbSksIGVsbSk7XG4gICAgICByZXR1cm4gY2xvc2VzdCQxKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsbSksIGVsbSA9PiBnZXRQcm9wZXJ0eShlbG0pLCBpc1Jvb3QpO1xuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplRm9udEZhbWlseSA9IGZvbnRGYW1pbHkgPT4gZm9udEZhbWlseS5yZXBsYWNlKC9bXFwnXFxcIlxcXFxdL2csICcnKS5yZXBsYWNlKC8sXFxzKy9nLCAnLCcpO1xuICAgIGNvbnN0IGdldENvbXB1dGVkRm9udFByb3AgPSAocHJvcE5hbWUsIGVsbSkgPT4gT3B0aW9uYWwuZnJvbShET01VdGlscy5ET00uZ2V0U3R5bGUoZWxtLCBwcm9wTmFtZSwgdHJ1ZSkpO1xuICAgIGNvbnN0IGdldEZvbnRQcm9wID0gcHJvcE5hbWUgPT4gKHJvb3RFbG0sIGVsbSkgPT4gT3B0aW9uYWwuZnJvbShlbG0pLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSkuZmlsdGVyKGlzRWxlbWVudCQ3KS5iaW5kKGVsZW1lbnQgPT4gZ2V0U3BlY2lmaWVkRm9udFByb3AocHJvcE5hbWUsIHJvb3RFbG0sIGVsZW1lbnQuZG9tKS5vcihnZXRDb21wdXRlZEZvbnRQcm9wKHByb3BOYW1lLCBlbGVtZW50LmRvbSkpKS5nZXRPcignJyk7XG4gICAgY29uc3QgZ2V0Rm9udFNpemUgPSBnZXRGb250UHJvcCgnZm9udC1zaXplJyk7XG4gICAgY29uc3QgZ2V0Rm9udEZhbWlseSA9IGNvbXBvc2Uobm9ybWFsaXplRm9udEZhbWlseSwgZ2V0Rm9udFByb3AoJ2ZvbnQtZmFtaWx5JykpO1xuXG4gICAgY29uc3QgZmluZEZpcnN0Q2FyZXRFbGVtZW50ID0gZWRpdG9yID0+IGZpcnN0UG9zaXRpb25JbihlZGl0b3IuZ2V0Qm9keSgpKS5iaW5kKGNhcmV0ID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGNhcmV0LmNvbnRhaW5lcigpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oaXNUZXh0JGEoY29udGFpbmVyKSA/IGNvbnRhaW5lci5wYXJlbnROb2RlIDogY29udGFpbmVyKTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRDYXJldEVsZW1lbnQgPSBlZGl0b3IgPT4gT3B0aW9uYWwuZnJvbShlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKS5iaW5kKHJuZyA9PiB7XG4gICAgICBjb25zdCByb290ID0gZWRpdG9yLmdldEJvZHkoKTtcbiAgICAgIGNvbnN0IGF0U3RhcnRPZk5vZGUgPSBybmcuc3RhcnRDb250YWluZXIgPT09IHJvb3QgJiYgcm5nLnN0YXJ0T2Zmc2V0ID09PSAwO1xuICAgICAgcmV0dXJuIGF0U3RhcnRPZk5vZGUgPyBPcHRpb25hbC5ub25lKCkgOiBPcHRpb25hbC5mcm9tKGVkaXRvci5zZWxlY3Rpb24uZ2V0U3RhcnQodHJ1ZSkpO1xuICAgIH0pO1xuICAgIGNvbnN0IGJpbmRSYW5nZSA9IChlZGl0b3IsIGJpbmRlcikgPT4gZ2V0Q2FyZXRFbGVtZW50KGVkaXRvcikub3JUaHVuayhjdXJyeShmaW5kRmlyc3RDYXJldEVsZW1lbnQsIGVkaXRvcikpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSkuZmlsdGVyKGlzRWxlbWVudCQ3KS5iaW5kKGJpbmRlcik7XG4gICAgY29uc3QgbWFwUmFuZ2UgPSAoZWRpdG9yLCBtYXBwZXIpID0+IGJpbmRSYW5nZShlZGl0b3IsIGNvbXBvc2UxKE9wdGlvbmFsLnNvbWUsIG1hcHBlcikpO1xuXG4gICAgY29uc3QgZnJvbUZvbnRTaXplTnVtYmVyID0gKGVkaXRvciwgdmFsdWUpID0+IHtcbiAgICAgIGlmICgvXlswLTkuXSskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICBjb25zdCBmb250U2l6ZU51bWJlciA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgICAgIGlmIChmb250U2l6ZU51bWJlciA+PSAxICYmIGZvbnRTaXplTnVtYmVyIDw9IDcpIHtcbiAgICAgICAgICBjb25zdCBmb250U2l6ZXMgPSBnZXRGb250U3R5bGVWYWx1ZXMoZWRpdG9yKTtcbiAgICAgICAgICBjb25zdCBmb250Q2xhc3NlcyA9IGdldEZvbnRTaXplQ2xhc3NlcyhlZGl0b3IpO1xuICAgICAgICAgIGlmIChmb250Q2xhc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9udENsYXNzZXNbZm9udFNpemVOdW1iZXIgLSAxXSB8fCB2YWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZvbnRTaXplc1tmb250U2l6ZU51bWJlciAtIDFdIHx8IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZUZvbnROYW1lcyA9IGZvbnQgPT4ge1xuICAgICAgY29uc3QgZm9udHMgPSBmb250LnNwbGl0KC9cXHMqLFxccyovKTtcbiAgICAgIHJldHVybiBtYXAkMyhmb250cywgZm9udCA9PiB7XG4gICAgICAgIGlmIChmb250LmluZGV4T2YoJyAnKSAhPT0gLTEgJiYgIShzdGFydHNXaXRoKGZvbnQsICdcIicpIHx8IHN0YXJ0c1dpdGgoZm9udCwgYCdgKSkpIHtcbiAgICAgICAgICByZXR1cm4gYCckeyBmb250IH0nYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZm9udDtcbiAgICAgICAgfVxuICAgICAgfSkuam9pbignLCcpO1xuICAgIH07XG4gICAgY29uc3QgZm9udE5hbWVBY3Rpb24gPSAoZWRpdG9yLCB2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgZm9udCA9IGZyb21Gb250U2l6ZU51bWJlcihlZGl0b3IsIHZhbHVlKTtcbiAgICAgIGVkaXRvci5mb3JtYXR0ZXIudG9nZ2xlKCdmb250bmFtZScsIHsgdmFsdWU6IG5vcm1hbGl6ZUZvbnROYW1lcyhmb250KSB9KTtcbiAgICAgIGVkaXRvci5ub2RlQ2hhbmdlZCgpO1xuICAgIH07XG4gICAgY29uc3QgZm9udE5hbWVRdWVyeSA9IGVkaXRvciA9PiBtYXBSYW5nZShlZGl0b3IsIGVsbSA9PiBnZXRGb250RmFtaWx5KGVkaXRvci5nZXRCb2R5KCksIGVsbS5kb20pKS5nZXRPcignJyk7XG4gICAgY29uc3QgZm9udFNpemVBY3Rpb24gPSAoZWRpdG9yLCB2YWx1ZSkgPT4ge1xuICAgICAgZWRpdG9yLmZvcm1hdHRlci50b2dnbGUoJ2ZvbnRzaXplJywgeyB2YWx1ZTogZnJvbUZvbnRTaXplTnVtYmVyKGVkaXRvciwgdmFsdWUpIH0pO1xuICAgICAgZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG4gICAgfTtcbiAgICBjb25zdCBmb250U2l6ZVF1ZXJ5ID0gZWRpdG9yID0+IG1hcFJhbmdlKGVkaXRvciwgZWxtID0+IGdldEZvbnRTaXplKGVkaXRvci5nZXRCb2R5KCksIGVsbS5kb20pKS5nZXRPcignJyk7XG5cbiAgICBjb25zdCBsaW5lSGVpZ2h0UXVlcnkgPSBlZGl0b3IgPT4gbWFwUmFuZ2UoZWRpdG9yLCBlbG0gPT4ge1xuICAgICAgY29uc3Qgcm9vdCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgY29uc3Qgc3BlY2lmaWVkU3R5bGUgPSBjbG9zZXN0JDEoZWxtLCBlbG0gPT4gZ2V0UmF3KGVsbSwgJ2xpbmUtaGVpZ2h0JyksIGN1cnJ5KGVxLCByb290KSk7XG4gICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gcGFyc2VGbG9hdChnZXQkNyhlbG0sICdsaW5lLWhlaWdodCcpKTtcbiAgICAgICAgY29uc3QgZm9udFNpemUgPSBwYXJzZUZsb2F0KGdldCQ3KGVsbSwgJ2ZvbnQtc2l6ZScpKTtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5lSGVpZ2h0IC8gZm9udFNpemUpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBzcGVjaWZpZWRTdHlsZS5nZXRPclRodW5rKGNvbXB1dGVkU3R5bGUpO1xuICAgIH0pLmdldE9yKCcnKTtcbiAgICBjb25zdCBsaW5lSGVpZ2h0QWN0aW9uID0gKGVkaXRvciwgbGluZUhlaWdodCkgPT4ge1xuICAgICAgZWRpdG9yLmZvcm1hdHRlci50b2dnbGUoJ2xpbmVoZWlnaHQnLCB7IHZhbHVlOiBTdHJpbmcobGluZUhlaWdodCkgfSk7XG4gICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVnaXN0ZXJFeGVjQ29tbWFuZHMkMiA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCB0b2dnbGVGb3JtYXQgPSAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgZWRpdG9yLmZvcm1hdHRlci50b2dnbGUobmFtZSwgdmFsdWUpO1xuICAgICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICAgIH07XG4gICAgICBlZGl0b3IuZWRpdG9yQ29tbWFuZHMuYWRkQ29tbWFuZHMoe1xuICAgICAgICAnQm9sZCxJdGFsaWMsVW5kZXJsaW5lLFN0cmlrZXRocm91Z2gsU3VwZXJzY3JpcHQsU3Vic2NyaXB0JzogY29tbWFuZCA9PiB7XG4gICAgICAgICAgdG9nZ2xlRm9ybWF0KGNvbW1hbmQpO1xuICAgICAgICB9LFxuICAgICAgICAnRm9yZUNvbG9yLEhpbGl0ZUNvbG9yJzogKGNvbW1hbmQsIF91aSwgdmFsdWUpID0+IHtcbiAgICAgICAgICB0b2dnbGVGb3JtYXQoY29tbWFuZCwgeyB2YWx1ZSB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgJ0JhY2tDb2xvcic6IChfY29tbWFuZCwgX3VpLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIHRvZ2dsZUZvcm1hdCgnaGlsaXRlY29sb3InLCB7IHZhbHVlIH0pO1xuICAgICAgICB9LFxuICAgICAgICAnRm9udE5hbWUnOiAoX2NvbW1hbmQsIF91aSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBmb250TmFtZUFjdGlvbihlZGl0b3IsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ0ZvbnRTaXplJzogKF9jb21tYW5kLCBfdWksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgZm9udFNpemVBY3Rpb24oZWRpdG9yLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgICdMaW5lSGVpZ2h0JzogKF9jb21tYW5kLCBfdWksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgbGluZUhlaWdodEFjdGlvbihlZGl0b3IsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ0xhbmcnOiAoY29tbWFuZCwgX3VpLCBsYW5nKSA9PiB7XG4gICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgIHRvZ2dsZUZvcm1hdChjb21tYW5kLCB7XG4gICAgICAgICAgICB2YWx1ZTogbGFuZy5jb2RlLFxuICAgICAgICAgICAgY3VzdG9tVmFsdWU6IChfYSA9IGxhbmcuY3VzdG9tQ29kZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbnVsbFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAnUmVtb3ZlRm9ybWF0JzogY29tbWFuZCA9PiB7XG4gICAgICAgICAgZWRpdG9yLmZvcm1hdHRlci5yZW1vdmUoY29tbWFuZCk7XG4gICAgICAgIH0sXG4gICAgICAgICdtY2VCbG9ja1F1b3RlJzogKCkgPT4ge1xuICAgICAgICAgIHRvZ2dsZUZvcm1hdCgnYmxvY2txdW90ZScpO1xuICAgICAgICB9LFxuICAgICAgICAnRm9ybWF0QmxvY2snOiAoX2NvbW1hbmQsIF91aSwgdmFsdWUpID0+IHtcbiAgICAgICAgICB0b2dnbGVGb3JtYXQoaXNTdHJpbmcodmFsdWUpID8gdmFsdWUgOiAncCcpO1xuICAgICAgICB9LFxuICAgICAgICAnbWNlVG9nZ2xlRm9ybWF0JzogKF9jb21tYW5kLCBfdWksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgdG9nZ2xlRm9ybWF0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlclF1ZXJ5VmFsdWVDb21tYW5kcyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBpc0Zvcm1hdE1hdGNoID0gbmFtZSA9PiBlZGl0b3IuZm9ybWF0dGVyLm1hdGNoKG5hbWUpO1xuICAgICAgZWRpdG9yLmVkaXRvckNvbW1hbmRzLmFkZENvbW1hbmRzKHtcbiAgICAgICAgJ0JvbGQsSXRhbGljLFVuZGVybGluZSxTdHJpa2V0aHJvdWdoLFN1cGVyc2NyaXB0LFN1YnNjcmlwdCc6IGNvbW1hbmQgPT4gaXNGb3JtYXRNYXRjaChjb21tYW5kKSxcbiAgICAgICAgJ21jZUJsb2NrUXVvdGUnOiAoKSA9PiBpc0Zvcm1hdE1hdGNoKCdibG9ja3F1b3RlJylcbiAgICAgIH0sICdzdGF0ZScpO1xuICAgICAgZWRpdG9yLmVkaXRvckNvbW1hbmRzLmFkZFF1ZXJ5VmFsdWVIYW5kbGVyKCdGb250TmFtZScsICgpID0+IGZvbnROYW1lUXVlcnkoZWRpdG9yKSk7XG4gICAgICBlZGl0b3IuZWRpdG9yQ29tbWFuZHMuYWRkUXVlcnlWYWx1ZUhhbmRsZXIoJ0ZvbnRTaXplJywgKCkgPT4gZm9udFNpemVRdWVyeShlZGl0b3IpKTtcbiAgICAgIGVkaXRvci5lZGl0b3JDb21tYW5kcy5hZGRRdWVyeVZhbHVlSGFuZGxlcignTGluZUhlaWdodCcsICgpID0+IGxpbmVIZWlnaHRRdWVyeShlZGl0b3IpKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyQ29tbWFuZHMkOCA9IGVkaXRvciA9PiB7XG4gICAgICByZWdpc3RlckV4ZWNDb21tYW5kcyQyKGVkaXRvcik7XG4gICAgICByZWdpc3RlclF1ZXJ5VmFsdWVDb21tYW5kcyhlZGl0b3IpO1xuICAgIH07XG5cbiAgICBjb25zdCByZWdpc3RlckNvbW1hbmRzJDcgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmVkaXRvckNvbW1hbmRzLmFkZENvbW1hbmRzKHtcbiAgICAgICAgbWNlQWRkVW5kb0xldmVsOiAoKSA9PiB7XG4gICAgICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLmFkZCgpO1xuICAgICAgICB9LFxuICAgICAgICBtY2VFbmRVbmRvTGV2ZWw6ICgpID0+IHtcbiAgICAgICAgICBlZGl0b3IudW5kb01hbmFnZXIuYWRkKCk7XG4gICAgICAgIH0sXG4gICAgICAgIFVuZG86ICgpID0+IHtcbiAgICAgICAgICBlZGl0b3IudW5kb01hbmFnZXIudW5kbygpO1xuICAgICAgICB9LFxuICAgICAgICBSZWRvOiAoKSA9PiB7XG4gICAgICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLnJlZG8oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlZ2lzdGVyQ29tbWFuZHMkNiA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IuZWRpdG9yQ29tbWFuZHMuYWRkQ29tbWFuZHMoe1xuICAgICAgICBJbmRlbnQ6ICgpID0+IHtcbiAgICAgICAgICBpbmRlbnQoZWRpdG9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgT3V0ZGVudDogKCkgPT4ge1xuICAgICAgICAgIG91dGRlbnQoZWRpdG9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBlZGl0b3IuZWRpdG9yQ29tbWFuZHMuYWRkQ29tbWFuZHMoeyBPdXRkZW50OiAoKSA9PiBjYW5PdXRkZW50KGVkaXRvcikgfSwgJ3N0YXRlJyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlZ2lzdGVyQ29tbWFuZHMkNSA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBhcHBseUxpbmtUb1NlbGVjdGlvbiA9IChfY29tbWFuZCwgX3VpLCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBsaW5rRGV0YWlscyA9IGlzU3RyaW5nKHZhbHVlKSA/IHsgaHJlZjogdmFsdWUgfSA6IHZhbHVlO1xuICAgICAgICBjb25zdCBhbmNob3IgPSBlZGl0b3IuZG9tLmdldFBhcmVudChlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKSwgJ2EnKTtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGxpbmtEZXRhaWxzKSAmJiBpc1N0cmluZyhsaW5rRGV0YWlscy5ocmVmKSkge1xuICAgICAgICAgIGxpbmtEZXRhaWxzLmhyZWYgPSBsaW5rRGV0YWlscy5ocmVmLnJlcGxhY2UoLyAvZywgJyUyMCcpO1xuICAgICAgICAgIGlmICghYW5jaG9yIHx8ICFsaW5rRGV0YWlscy5ocmVmKSB7XG4gICAgICAgICAgICBlZGl0b3IuZm9ybWF0dGVyLnJlbW92ZSgnbGluaycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGlua0RldGFpbHMuaHJlZikge1xuICAgICAgICAgICAgZWRpdG9yLmZvcm1hdHRlci5hcHBseSgnbGluaycsIGxpbmtEZXRhaWxzLCBhbmNob3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGVkaXRvci5lZGl0b3JDb21tYW5kcy5hZGRDb21tYW5kcyh7XG4gICAgICAgIHVubGluazogKCkgPT4ge1xuICAgICAgICAgIGlmIChlZGl0b3Iuc2VsZWN0aW9uLmlzRWRpdGFibGUoKSkge1xuICAgICAgICAgICAgaWYgKGVkaXRvci5zZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSkge1xuICAgICAgICAgICAgICBjb25zdCBlbG0gPSBlZGl0b3IuZG9tLmdldFBhcmVudChlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KCksICdhJyk7XG4gICAgICAgICAgICAgIGlmIChlbG0pIHtcbiAgICAgICAgICAgICAgICBlZGl0b3IuZG9tLnJlbW92ZShlbG0sIHRydWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVkaXRvci5mb3JtYXR0ZXIucmVtb3ZlKCdsaW5rJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtY2VJbnNlcnRMaW5rOiBhcHBseUxpbmtUb1NlbGVjdGlvbixcbiAgICAgICAgY3JlYXRlTGluazogYXBwbHlMaW5rVG9TZWxlY3Rpb25cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZWdpc3RlckV4ZWNDb21tYW5kcyQxID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5lZGl0b3JDb21tYW5kcy5hZGRDb21tYW5kcyh7XG4gICAgICAgICdJbnNlcnRVbm9yZGVyZWRMaXN0LEluc2VydE9yZGVyZWRMaXN0JzogY29tbWFuZCA9PiB7XG4gICAgICAgICAgZWRpdG9yLmdldERvYygpLmV4ZWNDb21tYW5kKGNvbW1hbmQpO1xuICAgICAgICAgIGNvbnN0IGxpc3RFbG0gPSBlZGl0b3IuZG9tLmdldFBhcmVudChlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKSwgJ29sLHVsJyk7XG4gICAgICAgICAgaWYgKGxpc3RFbG0pIHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RQYXJlbnQgPSBsaXN0RWxtLnBhcmVudE5vZGU7XG4gICAgICAgICAgICBpZiAobGlzdFBhcmVudCAmJiAvXihIWzEtNl18UHxBRERSRVNTfFBSRSkkLy50ZXN0KGxpc3RQYXJlbnQubm9kZU5hbWUpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGJtID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRCb29rbWFyaygpO1xuICAgICAgICAgICAgICBlZGl0b3IuZG9tLnNwbGl0KGxpc3RQYXJlbnQsIGxpc3RFbG0pO1xuICAgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLm1vdmVUb0Jvb2ttYXJrKGJtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXJRdWVyeVN0YXRlQ29tbWFuZHMgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmVkaXRvckNvbW1hbmRzLmFkZENvbW1hbmRzKHtcbiAgICAgICAgJ0luc2VydFVub3JkZXJlZExpc3QsSW5zZXJ0T3JkZXJlZExpc3QnOiBjb21tYW5kID0+IHtcbiAgICAgICAgICBjb25zdCBsaXN0ID0gZWRpdG9yLmRvbS5nZXRQYXJlbnQoZWRpdG9yLnNlbGVjdGlvbi5nZXROb2RlKCksICd1bCxvbCcpO1xuICAgICAgICAgIHJldHVybiBsaXN0ICYmIChjb21tYW5kID09PSAnaW5zZXJ0dW5vcmRlcmVkbGlzdCcgJiYgbGlzdC50YWdOYW1lID09PSAnVUwnIHx8IGNvbW1hbmQgPT09ICdpbnNlcnRvcmRlcmVkbGlzdCcgJiYgbGlzdC50YWdOYW1lID09PSAnT0wnKTtcbiAgICAgICAgfVxuICAgICAgfSwgJ3N0YXRlJyk7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlckNvbW1hbmRzJDQgPSBlZGl0b3IgPT4ge1xuICAgICAgcmVnaXN0ZXJFeGVjQ29tbWFuZHMkMShlZGl0b3IpO1xuICAgICAgcmVnaXN0ZXJRdWVyeVN0YXRlQ29tbWFuZHMoZWRpdG9yKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0VG9wUGFyZW50QmxvY2sgPSAoZWRpdG9yLCBub2RlLCByb290LCBjb250YWluZXIpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBzZWxlY3RvciA9IG5vZGUgPT4gZG9tLmlzQmxvY2sobm9kZSkgJiYgbm9kZS5wYXJlbnRFbGVtZW50ID09PSByb290O1xuICAgICAgY29uc3QgdG9wUGFyZW50QmxvY2sgPSBzZWxlY3Rvcihub2RlKSA/IG5vZGUgOiBkb20uZ2V0UGFyZW50KGNvbnRhaW5lciwgc2VsZWN0b3IsIHJvb3QpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20odG9wUGFyZW50QmxvY2spLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnQgPSAoZWRpdG9yLCBiZWZvcmUpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgY29uc3Qgbm9kZSA9IGJlZm9yZSA/IGVkaXRvci5zZWxlY3Rpb24uZ2V0U3RhcnQoKSA6IGVkaXRvci5zZWxlY3Rpb24uZ2V0RW5kKCk7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBiZWZvcmUgPyBybmcuc3RhcnRDb250YWluZXIgOiBybmcuZW5kQ29udGFpbmVyO1xuICAgICAgY29uc3Qgcm9vdCA9IGdldEVkaXRhYmxlUm9vdChkb20sIGNvbnRhaW5lcik7XG4gICAgICBpZiAoIXJvb3QgfHwgIXJvb3QuaXNDb250ZW50RWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5zZXJ0Rm4gPSBiZWZvcmUgPyBiZWZvcmUkMyA6IGFmdGVyJDQ7XG4gICAgICBjb25zdCBuZXdCbG9ja05hbWUgPSBnZXRGb3JjZWRSb290QmxvY2soZWRpdG9yKTtcbiAgICAgIGdldFRvcFBhcmVudEJsb2NrKGVkaXRvciwgbm9kZSwgcm9vdCwgY29udGFpbmVyKS5lYWNoKHBhcmVudEJsb2NrID0+IHtcbiAgICAgICAgY29uc3QgbmV3QmxvY2sgPSBjcmVhdGVOZXdCbG9jayhlZGl0b3IsIGNvbnRhaW5lciwgcGFyZW50QmxvY2suZG9tLCByb290LCBmYWxzZSwgbmV3QmxvY2tOYW1lKTtcbiAgICAgICAgaW5zZXJ0Rm4ocGFyZW50QmxvY2ssIFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5ld0Jsb2NrKSk7XG4gICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Q3Vyc29yTG9jYXRpb24obmV3QmxvY2ssIDApO1xuICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ05ld0Jsb2NrJywgeyBuZXdCbG9jayB9KTtcbiAgICAgICAgZmlyZUlucHV0RXZlbnQoZWRpdG9yLCAnaW5zZXJ0UGFyYWdyYXBoJyk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGluc2VydEJlZm9yZSA9IGVkaXRvciA9PiBpbnNlcnQoZWRpdG9yLCB0cnVlKTtcbiAgICBjb25zdCBpbnNlcnRBZnRlciA9IGVkaXRvciA9PiBpbnNlcnQoZWRpdG9yLCBmYWxzZSk7XG5cbiAgICBjb25zdCByZWdpc3RlckNvbW1hbmRzJDMgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmVkaXRvckNvbW1hbmRzLmFkZENvbW1hbmRzKHtcbiAgICAgICAgSW5zZXJ0TmV3QmxvY2tCZWZvcmU6ICgpID0+IHtcbiAgICAgICAgICBpbnNlcnRCZWZvcmUoZWRpdG9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgSW5zZXJ0TmV3QmxvY2tBZnRlcjogKCkgPT4ge1xuICAgICAgICAgIGluc2VydEFmdGVyKGVkaXRvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZWdpc3RlckNvbW1hbmRzJDIgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmVkaXRvckNvbW1hbmRzLmFkZENvbW1hbmRzKHtcbiAgICAgICAgaW5zZXJ0UGFyYWdyYXBoOiAoKSA9PiB7XG4gICAgICAgICAgaW5zZXJ0QnJlYWsoYmxvY2ticmVhaywgZWRpdG9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgbWNlSW5zZXJ0TmV3TGluZTogKF9jb21tYW5kLCBfdWksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgaW5zZXJ0JDEoZWRpdG9yLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIEluc2VydExpbmVCcmVhazogKF9jb21tYW5kLCBfdWksIF92YWx1ZSkgPT4ge1xuICAgICAgICAgIGluc2VydEJyZWFrKGxpbmVicmVhaywgZWRpdG9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlZ2lzdGVyQ29tbWFuZHMkMSA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IuZWRpdG9yQ29tbWFuZHMuYWRkQ29tbWFuZHMoe1xuICAgICAgICBtY2VTZWxlY3ROb2RlRGVwdGg6IChfY29tbWFuZCwgX3VpLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgICAgICBlZGl0b3IuZG9tLmdldFBhcmVudChlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKSwgbm9kZSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNFbGVtZW50JDYobm9kZSkgJiYgY291bnRlcisrID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNlbGVjdChub2RlKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1jZVNlbGVjdE5vZGU6IChfY29tbWFuZCwgX3VpLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0KHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2VsZWN0QWxsOiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWRpdGluZ0hvc3QgPSBlZGl0b3IuZG9tLmdldFBhcmVudChlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KCksIGlzQ29udGVudEVkaXRhYmxlVHJ1ZSQzKTtcbiAgICAgICAgICBpZiAoZWRpdGluZ0hvc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5kb20uY3JlYXRlUm5nKCk7XG4gICAgICAgICAgICBybmcuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRpbmdIb3N0KTtcbiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVnaXN0ZXJFeGVjQ29tbWFuZHMgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmVkaXRvckNvbW1hbmRzLmFkZENvbW1hbmRzKHtcbiAgICAgICAgbWNlUmVtb3ZlTm9kZTogKF9jb21tYW5kLCBfdWksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDAgPyB2YWx1ZSA6IGVkaXRvci5zZWxlY3Rpb24uZ2V0Tm9kZSgpO1xuICAgICAgICAgIGlmIChub2RlICE9PSBlZGl0b3IuZ2V0Qm9keSgpKSB7XG4gICAgICAgICAgICBjb25zdCBibSA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Qm9va21hcmsoKTtcbiAgICAgICAgICAgIGVkaXRvci5kb20ucmVtb3ZlKG5vZGUsIHRydWUpO1xuICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5tb3ZlVG9Cb29rbWFyayhibSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtY2VQcmludDogKCkgPT4ge1xuICAgICAgICAgIGVkaXRvci5nZXRXaW4oKS5wcmludCgpO1xuICAgICAgICB9LFxuICAgICAgICBtY2VGb2N1czogKF9jb21tYW5kLCBfdWksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgZm9jdXMoZWRpdG9yLCB2YWx1ZSA9PT0gdHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1jZVRvZ2dsZVZpc3VhbEFpZDogKCkgPT4ge1xuICAgICAgICAgIGVkaXRvci5oYXNWaXN1YWwgPSAhZWRpdG9yLmhhc1Zpc3VhbDtcbiAgICAgICAgICBlZGl0b3IuYWRkVmlzdWFsKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXJDb21tYW5kcyA9IGVkaXRvciA9PiB7XG4gICAgICByZWdpc3RlckNvbW1hbmRzJGIoZWRpdG9yKTtcbiAgICAgIHJlZ2lzdGVyQ29tbWFuZHMkYShlZGl0b3IpO1xuICAgICAgcmVnaXN0ZXJDb21tYW5kcyQ3KGVkaXRvcik7XG4gICAgICByZWdpc3RlckNvbW1hbmRzJDEoZWRpdG9yKTtcbiAgICAgIHJlZ2lzdGVyQ29tbWFuZHMkOShlZGl0b3IpO1xuICAgICAgcmVnaXN0ZXJDb21tYW5kcyQ1KGVkaXRvcik7XG4gICAgICByZWdpc3RlckNvbW1hbmRzJDYoZWRpdG9yKTtcbiAgICAgIHJlZ2lzdGVyQ29tbWFuZHMkMyhlZGl0b3IpO1xuICAgICAgcmVnaXN0ZXJDb21tYW5kcyQyKGVkaXRvcik7XG4gICAgICByZWdpc3RlckNvbW1hbmRzJDQoZWRpdG9yKTtcbiAgICAgIHJlZ2lzdGVyQ29tbWFuZHMkOChlZGl0b3IpO1xuICAgICAgcmVnaXN0ZXJFeGVjQ29tbWFuZHMoZWRpdG9yKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2VsZWN0aW9uU2FmZUNvbW1hbmRzID0gWyd0b2dnbGV2aWV3J107XG4gICAgY29uc3QgaXNTZWxlY3Rpb25TYWZlQ29tbWFuZCA9IGNvbW1hbmQgPT4gY29udGFpbnMkMihzZWxlY3Rpb25TYWZlQ29tbWFuZHMsIGNvbW1hbmQudG9Mb3dlckNhc2UoKSk7XG4gICAgY2xhc3MgRWRpdG9yQ29tbWFuZHMge1xuICAgICAgY29uc3RydWN0b3IoZWRpdG9yKSB7XG4gICAgICAgIHRoaXMuY29tbWFuZHMgPSB7XG4gICAgICAgICAgc3RhdGU6IHt9LFxuICAgICAgICAgIGV4ZWM6IHt9LFxuICAgICAgICAgIHZhbHVlOiB7fVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjtcbiAgICAgIH1cbiAgICAgIGV4ZWNDb21tYW5kKGNvbW1hbmQsIHVpID0gZmFsc2UsIHZhbHVlLCBhcmdzKSB7XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgICAgICBjb25zdCBsb3dlckNhc2VDb21tYW5kID0gY29tbWFuZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBza2lwRm9jdXMgPSBhcmdzID09PSBudWxsIHx8IGFyZ3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFyZ3Muc2tpcF9mb2N1cztcbiAgICAgICAgaWYgKGVkaXRvci5yZW1vdmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlckNhc2VDb21tYW5kICE9PSAnbWNlZm9jdXMnKSB7XG4gICAgICAgICAgaWYgKCEvXihtY2VBZGRVbmRvTGV2ZWx8bWNlRW5kVW5kb0xldmVsKSQvaS50ZXN0KGxvd2VyQ2FzZUNvbW1hbmQpICYmICFza2lwRm9jdXMpIHtcbiAgICAgICAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN0b3JlKGVkaXRvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50QXJncyA9IGVkaXRvci5kaXNwYXRjaCgnQmVmb3JlRXhlY0NvbW1hbmQnLCB7XG4gICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICB1aSxcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGV2ZW50QXJncy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmdW5jID0gdGhpcy5jb21tYW5kcy5leGVjW2xvd2VyQ2FzZUNvbW1hbmRdO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihmdW5jKSkge1xuICAgICAgICAgIGZ1bmMobG93ZXJDYXNlQ29tbWFuZCwgdWksIHZhbHVlKTtcbiAgICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ0V4ZWNDb21tYW5kJywge1xuICAgICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICAgIHVpLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBxdWVyeUNvbW1hbmRTdGF0ZShjb21tYW5kKSB7XG4gICAgICAgIGlmICghaXNTZWxlY3Rpb25TYWZlQ29tbWFuZChjb21tYW5kKSAmJiB0aGlzLmVkaXRvci5xdWlya3MuaXNIaWRkZW4oKSB8fCB0aGlzLmVkaXRvci5yZW1vdmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxvd2VyQ2FzZUNvbW1hbmQgPSBjb21tYW5kLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGZ1bmMgPSB0aGlzLmNvbW1hbmRzLnN0YXRlW2xvd2VyQ2FzZUNvbW1hbmRdO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihmdW5jKSkge1xuICAgICAgICAgIHJldHVybiBmdW5jKGxvd2VyQ2FzZUNvbW1hbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHF1ZXJ5Q29tbWFuZFZhbHVlKGNvbW1hbmQpIHtcbiAgICAgICAgaWYgKCFpc1NlbGVjdGlvblNhZmVDb21tYW5kKGNvbW1hbmQpICYmIHRoaXMuZWRpdG9yLnF1aXJrcy5pc0hpZGRlbigpIHx8IHRoaXMuZWRpdG9yLnJlbW92ZWQpIHtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbG93ZXJDYXNlQ29tbWFuZCA9IGNvbW1hbmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgZnVuYyA9IHRoaXMuY29tbWFuZHMudmFsdWVbbG93ZXJDYXNlQ29tbWFuZF07XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGZ1bmMpKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmMobG93ZXJDYXNlQ29tbWFuZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgICAgYWRkQ29tbWFuZHMoY29tbWFuZExpc3QsIHR5cGUgPSAnZXhlYycpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZHMgPSB0aGlzLmNvbW1hbmRzO1xuICAgICAgICBlYWNoJGQoY29tbWFuZExpc3QsIChjYWxsYmFjaywgY29tbWFuZCkgPT4ge1xuICAgICAgICAgIGVhY2gkZShjb21tYW5kLnRvTG93ZXJDYXNlKCkuc3BsaXQoJywnKSwgY29tbWFuZCA9PiB7XG4gICAgICAgICAgICBjb21tYW5kc1t0eXBlXVtjb21tYW5kXSA9IGNhbGxiYWNrO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGFkZENvbW1hbmQoY29tbWFuZCwgY2FsbGJhY2ssIHNjb3BlKSB7XG4gICAgICAgIGNvbnN0IGxvd2VyQ2FzZUNvbW1hbmQgPSBjb21tYW5kLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHMuZXhlY1tsb3dlckNhc2VDb21tYW5kXSA9IChfY29tbWFuZCwgdWksIHZhbHVlKSA9PiBjYWxsYmFjay5jYWxsKHNjb3BlICE9PSBudWxsICYmIHNjb3BlICE9PSB2b2lkIDAgPyBzY29wZSA6IHRoaXMuZWRpdG9yLCB1aSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgcXVlcnlDb21tYW5kU3VwcG9ydGVkKGNvbW1hbmQpIHtcbiAgICAgICAgY29uc3QgbG93ZXJDYXNlQ29tbWFuZCA9IGNvbW1hbmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKHRoaXMuY29tbWFuZHMuZXhlY1tsb3dlckNhc2VDb21tYW5kXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYWRkUXVlcnlTdGF0ZUhhbmRsZXIoY29tbWFuZCwgY2FsbGJhY2ssIHNjb3BlKSB7XG4gICAgICAgIHRoaXMuY29tbWFuZHMuc3RhdGVbY29tbWFuZC50b0xvd2VyQ2FzZSgpXSA9ICgpID0+IGNhbGxiYWNrLmNhbGwoc2NvcGUgIT09IG51bGwgJiYgc2NvcGUgIT09IHZvaWQgMCA/IHNjb3BlIDogdGhpcy5lZGl0b3IpO1xuICAgICAgfVxuICAgICAgYWRkUXVlcnlWYWx1ZUhhbmRsZXIoY29tbWFuZCwgY2FsbGJhY2ssIHNjb3BlKSB7XG4gICAgICAgIHRoaXMuY29tbWFuZHMudmFsdWVbY29tbWFuZC50b0xvd2VyQ2FzZSgpXSA9ICgpID0+IGNhbGxiYWNrLmNhbGwoc2NvcGUgIT09IG51bGwgJiYgc2NvcGUgIT09IHZvaWQgMCA/IHNjb3BlIDogdGhpcy5lZGl0b3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGludGVybmFsQ29udGVudEVkaXRhYmxlQXR0ciA9ICdkYXRhLW1jZS1jb250ZW50ZWRpdGFibGUnO1xuICAgIGNvbnN0IHRvZ2dsZUNsYXNzID0gKGVsbSwgY2xzLCBzdGF0ZSkgPT4ge1xuICAgICAgaWYgKGhhcyhlbG0sIGNscykgJiYgIXN0YXRlKSB7XG4gICAgICAgIHJlbW92ZSQ3KGVsbSwgY2xzKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUpIHtcbiAgICAgICAgYWRkJDIoZWxtLCBjbHMpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2V0RWRpdG9yQ29tbWFuZFN0YXRlID0gKGVkaXRvciwgY21kLCBzdGF0ZSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZWRpdG9yLmdldERvYygpLmV4ZWNDb21tYW5kKGNtZCwgZmFsc2UsIFN0cmluZyhzdGF0ZSkpO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldENvbnRlbnRFZGl0YWJsZSA9IChlbG0sIHN0YXRlKSA9PiB7XG4gICAgICBlbG0uZG9tLmNvbnRlbnRFZGl0YWJsZSA9IHN0YXRlID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9O1xuICAgIGNvbnN0IHN3aXRjaE9mZkNvbnRlbnRFZGl0YWJsZVRydWUgPSBlbG0gPT4ge1xuICAgICAgZWFjaCRlKGRlc2NlbmRhbnRzKGVsbSwgJypbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXScpLCBlbG0gPT4ge1xuICAgICAgICBzZXQkMyhlbG0sIGludGVybmFsQ29udGVudEVkaXRhYmxlQXR0ciwgJ3RydWUnKTtcbiAgICAgICAgc2V0Q29udGVudEVkaXRhYmxlKGVsbSwgZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzd2l0Y2hPbkNvbnRlbnRFZGl0YWJsZVRydWUgPSBlbG0gPT4ge1xuICAgICAgZWFjaCRlKGRlc2NlbmRhbnRzKGVsbSwgYCpbJHsgaW50ZXJuYWxDb250ZW50RWRpdGFibGVBdHRyIH09XCJ0cnVlXCJdYCksIGVsbSA9PiB7XG4gICAgICAgIHJlbW92ZSRhKGVsbSwgaW50ZXJuYWxDb250ZW50RWRpdGFibGVBdHRyKTtcbiAgICAgICAgc2V0Q29udGVudEVkaXRhYmxlKGVsbSwgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZUZha2VTZWxlY3Rpb24gPSBlZGl0b3IgPT4ge1xuICAgICAgT3B0aW9uYWwuZnJvbShlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKSkuZWFjaChlbG0gPT4ge1xuICAgICAgICBlbG0ucmVtb3ZlQXR0cmlidXRlKCdkYXRhLW1jZS1zZWxlY3RlZCcpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZXN0b3JlRmFrZVNlbGVjdGlvbiA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKTtcbiAgICB9O1xuICAgIGNvbnN0IHRvZ2dsZVJlYWRPbmx5ID0gKGVkaXRvciwgc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGJvZHkgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKTtcbiAgICAgIHRvZ2dsZUNsYXNzKGJvZHksICdtY2UtY29udGVudC1yZWFkb25seScsIHN0YXRlKTtcbiAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLmNvbnRyb2xTZWxlY3Rpb24uaGlkZVJlc2l6ZVJlY3QoKTtcbiAgICAgICAgZWRpdG9yLl9zZWxlY3Rpb25PdmVycmlkZXMuaGlkZUZha2VDYXJldCgpO1xuICAgICAgICByZW1vdmVGYWtlU2VsZWN0aW9uKGVkaXRvcik7XG4gICAgICAgIGVkaXRvci5yZWFkb25seSA9IHRydWU7XG4gICAgICAgIHNldENvbnRlbnRFZGl0YWJsZShib2R5LCBmYWxzZSk7XG4gICAgICAgIHN3aXRjaE9mZkNvbnRlbnRFZGl0YWJsZVRydWUoYm9keSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGl0b3IucmVhZG9ubHkgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVkaXRvci5oYXNFZGl0YWJsZVJvb3QoKSkge1xuICAgICAgICAgIHNldENvbnRlbnRFZGl0YWJsZShib2R5LCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2hPbkNvbnRlbnRFZGl0YWJsZVRydWUoYm9keSk7XG4gICAgICAgIHNldEVkaXRvckNvbW1hbmRTdGF0ZShlZGl0b3IsICdTdHlsZVdpdGhDU1MnLCBmYWxzZSk7XG4gICAgICAgIHNldEVkaXRvckNvbW1hbmRTdGF0ZShlZGl0b3IsICdlbmFibGVJbmxpbmVUYWJsZUVkaXRpbmcnLCBmYWxzZSk7XG4gICAgICAgIHNldEVkaXRvckNvbW1hbmRTdGF0ZShlZGl0b3IsICdlbmFibGVPYmplY3RSZXNpemluZycsIGZhbHNlKTtcbiAgICAgICAgaWYgKGhhc0VkaXRvck9yVWlGb2N1cyhlZGl0b3IpKSB7XG4gICAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdG9yZUZha2VTZWxlY3Rpb24oZWRpdG9yKTtcbiAgICAgICAgZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc1JlYWRPbmx5ID0gZWRpdG9yID0+IGVkaXRvci5yZWFkb25seTtcbiAgICBjb25zdCByZWdpc3RlckZpbHRlcnMgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLnBhcnNlci5hZGRBdHRyaWJ1dGVGaWx0ZXIoJ2NvbnRlbnRlZGl0YWJsZScsIG5vZGVzID0+IHtcbiAgICAgICAgaWYgKGlzUmVhZE9ubHkoZWRpdG9yKSkge1xuICAgICAgICAgIGVhY2gkZShub2Rlcywgbm9kZSA9PiB7XG4gICAgICAgICAgICBub2RlLmF0dHIoaW50ZXJuYWxDb250ZW50RWRpdGFibGVBdHRyLCBub2RlLmF0dHIoJ2NvbnRlbnRlZGl0YWJsZScpKTtcbiAgICAgICAgICAgIG5vZGUuYXR0cignY29udGVudGVkaXRhYmxlJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLnNlcmlhbGl6ZXIuYWRkQXR0cmlidXRlRmlsdGVyKGludGVybmFsQ29udGVudEVkaXRhYmxlQXR0ciwgbm9kZXMgPT4ge1xuICAgICAgICBpZiAoaXNSZWFkT25seShlZGl0b3IpKSB7XG4gICAgICAgICAgZWFjaCRlKG5vZGVzLCBub2RlID0+IHtcbiAgICAgICAgICAgIG5vZGUuYXR0cignY29udGVudGVkaXRhYmxlJywgbm9kZS5hdHRyKGludGVybmFsQ29udGVudEVkaXRhYmxlQXR0cikpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5zZXJpYWxpemVyLmFkZFRlbXBBdHRyKGludGVybmFsQ29udGVudEVkaXRhYmxlQXR0cik7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlclJlYWRPbmx5Q29udGVudEZpbHRlcnMgPSBlZGl0b3IgPT4ge1xuICAgICAgaWYgKGVkaXRvci5zZXJpYWxpemVyKSB7XG4gICAgICAgIHJlZ2lzdGVyRmlsdGVycyhlZGl0b3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWRpdG9yLm9uKCdQcmVJbml0JywgKCkgPT4ge1xuICAgICAgICAgIHJlZ2lzdGVyRmlsdGVycyhlZGl0b3IpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlzQ2xpY2tFdmVudCA9IGUgPT4gZS50eXBlID09PSAnY2xpY2snO1xuICAgIGNvbnN0IGFsbG93ZWRFdmVudHMgPSBbJ2NvcHknXTtcbiAgICBjb25zdCBpc1JlYWRPbmx5QWxsb3dlZEV2ZW50ID0gZSA9PiBjb250YWlucyQyKGFsbG93ZWRFdmVudHMsIGUudHlwZSk7XG4gICAgY29uc3QgZ2V0QW5jaG9ySHJlZk9wdCA9IChlZGl0b3IsIGVsbSkgPT4ge1xuICAgICAgY29uc3QgaXNSb290ID0gZWxtID0+IGVxKGVsbSwgU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSkpO1xuICAgICAgcmV0dXJuIGNsb3Nlc3QkMyhlbG0sICdhJywgaXNSb290KS5iaW5kKGEgPT4gZ2V0T3B0KGEsICdocmVmJykpO1xuICAgIH07XG4gICAgY29uc3QgcHJvY2Vzc1JlYWRvbmx5RXZlbnRzID0gKGVkaXRvciwgZSkgPT4ge1xuICAgICAgaWYgKGlzQ2xpY2tFdmVudChlKSAmJiAhVksubWV0YUtleVByZXNzZWQoZSkpIHtcbiAgICAgICAgY29uc3QgZWxtID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZS50YXJnZXQpO1xuICAgICAgICBnZXRBbmNob3JIcmVmT3B0KGVkaXRvciwgZWxtKS5lYWNoKGhyZWYgPT4ge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBpZiAoL14jLy50ZXN0KGhyZWYpKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRFbCA9IGVkaXRvci5kb20uc2VsZWN0KGAkeyBocmVmIH0sW25hbWU9XCIkeyByZW1vdmVMZWFkaW5nKGhyZWYsICcjJykgfVwiXWApO1xuICAgICAgICAgICAgaWYgKHRhcmdldEVsLmxlbmd0aCkge1xuICAgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNjcm9sbEludG9WaWV3KHRhcmdldEVsWzBdLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2luZG93Lm9wZW4oaHJlZiwgJ19ibGFuaycsICdyZWw9bm9vcGVuZXIgbm9yZWZlcnJlcixtZW51YmFyPXllcyx0b29sYmFyPXllcyxsb2NhdGlvbj15ZXMsc3RhdHVzPXllcyxyZXNpemFibGU9eWVzLHNjcm9sbGJhcnM9eWVzJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoaXNSZWFkT25seUFsbG93ZWRFdmVudChlKSkge1xuICAgICAgICBlZGl0b3IuZGlzcGF0Y2goZS50eXBlLCBlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyUmVhZE9ubHlTZWxlY3Rpb25CbG9ja2VycyA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3Iub24oJ1Nob3dDYXJldCcsIGUgPT4ge1xuICAgICAgICBpZiAoaXNSZWFkT25seShlZGl0b3IpKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignT2JqZWN0U2VsZWN0ZWQnLCBlID0+IHtcbiAgICAgICAgaWYgKGlzUmVhZE9ubHkoZWRpdG9yKSkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG5hdGl2ZUV2ZW50cyA9IFRvb2xzLm1ha2VNYXAoJ2ZvY3VzIGJsdXIgZm9jdXNpbiBmb2N1c291dCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIGJlZm9yZXBhc3RlIHBhc3RlIGN1dCBjb3B5IHNlbGVjdGlvbmNoYW5nZSAnICsgJ21vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSB3aGVlbCBrZXlkb3duIGtleXByZXNzIGtleXVwIGlucHV0IGJlZm9yZWlucHV0IGNvbnRleHRtZW51IGRyYWdzdGFydCBkcmFnZW5kIGRyYWdvdmVyICcgKyAnZHJhZ2dlc3R1cmUgZHJhZ2Ryb3AgZHJvcCBkcmFnIHN1Ym1pdCAnICsgJ2NvbXBvc2l0aW9uc3RhcnQgY29tcG9zaXRpb25lbmQgY29tcG9zaXRpb251cGRhdGUgdG91Y2hzdGFydCB0b3VjaG1vdmUgdG91Y2hlbmQgdG91Y2hjYW5jZWwnLCAnICcpO1xuICAgIGNsYXNzIEV2ZW50RGlzcGF0Y2hlciB7XG4gICAgICBzdGF0aWMgaXNOYXRpdmUobmFtZSkge1xuICAgICAgICByZXR1cm4gISFuYXRpdmVFdmVudHNbbmFtZS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzKSB7XG4gICAgICAgIHRoaXMuYmluZGluZ3MgPSB7fTtcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzIHx8IHt9O1xuICAgICAgICB0aGlzLnNjb3BlID0gdGhpcy5zZXR0aW5ncy5zY29wZSB8fCB0aGlzO1xuICAgICAgICB0aGlzLnRvZ2dsZUV2ZW50ID0gdGhpcy5zZXR0aW5ncy50b2dnbGVFdmVudCB8fCBuZXZlcjtcbiAgICAgIH1cbiAgICAgIGZpcmUobmFtZSwgYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChuYW1lLCBhcmdzKTtcbiAgICAgIH1cbiAgICAgIGRpc3BhdGNoKG5hbWUsIGFyZ3MpIHtcbiAgICAgICAgY29uc3QgbGNOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBldmVudCA9IG5vcm1hbGl6ZSQzKGxjTmFtZSwgYXJncyAhPT0gbnVsbCAmJiBhcmdzICE9PSB2b2lkIDAgPyBhcmdzIDoge30sIHRoaXMuc2NvcGUpO1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5iZWZvcmVGaXJlKSB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5iZWZvcmVGaXJlKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuYmluZGluZ3NbbGNOYW1lXTtcbiAgICAgICAgaWYgKGhhbmRsZXJzKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBoYW5kbGVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gaGFuZGxlcnNbaV07XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sucmVtb3ZlZCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjYWxsYmFjay5vbmNlKSB7XG4gICAgICAgICAgICAgIHRoaXMub2ZmKGxjTmFtZSwgY2FsbGJhY2suZnVuYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2suZnVuYy5jYWxsKHRoaXMuc2NvcGUsIGV2ZW50KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICB9XG4gICAgICBvbihuYW1lLCBjYWxsYmFjaywgcHJlcGVuZCwgZXh0cmEpIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrID09PSBmYWxzZSkge1xuICAgICAgICAgIGNhbGxiYWNrID0gbmV2ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY29uc3Qgd3JhcHBlZENhbGxiYWNrID0ge1xuICAgICAgICAgICAgZnVuYzogY2FsbGJhY2ssXG4gICAgICAgICAgICByZW1vdmVkOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKGV4dHJhKSB7XG4gICAgICAgICAgICBUb29scy5leHRlbmQod3JhcHBlZENhbGxiYWNrLCBleHRyYSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG5hbWVzID0gbmFtZS50b0xvd2VyQ2FzZSgpLnNwbGl0KCcgJyk7XG4gICAgICAgICAgbGV0IGkgPSBuYW1lcy5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudE5hbWUgPSBuYW1lc1tpXTtcbiAgICAgICAgICAgIGxldCBoYW5kbGVycyA9IHRoaXMuYmluZGluZ3NbY3VycmVudE5hbWVdO1xuICAgICAgICAgICAgaWYgKCFoYW5kbGVycykge1xuICAgICAgICAgICAgICBoYW5kbGVycyA9IFtdO1xuICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUV2ZW50KGN1cnJlbnROYW1lLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcmVwZW5kKSB7XG4gICAgICAgICAgICAgIGhhbmRsZXJzID0gW1xuICAgICAgICAgICAgICAgIHdyYXBwZWRDYWxsYmFjayxcbiAgICAgICAgICAgICAgICAuLi5oYW5kbGVyc1xuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaGFuZGxlcnMgPSBbXG4gICAgICAgICAgICAgICAgLi4uaGFuZGxlcnMsXG4gICAgICAgICAgICAgICAgd3JhcHBlZENhbGxiYWNrXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmJpbmRpbmdzW2N1cnJlbnROYW1lXSA9IGhhbmRsZXJzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIG9mZihuYW1lLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgIGNvbnN0IG5hbWVzID0gbmFtZS50b0xvd2VyQ2FzZSgpLnNwbGl0KCcgJyk7XG4gICAgICAgICAgbGV0IGkgPSBuYW1lcy5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudE5hbWUgPSBuYW1lc1tpXTtcbiAgICAgICAgICAgIGxldCBoYW5kbGVycyA9IHRoaXMuYmluZGluZ3NbY3VycmVudE5hbWVdO1xuICAgICAgICAgICAgaWYgKCFjdXJyZW50TmFtZSkge1xuICAgICAgICAgICAgICBlYWNoJGQodGhpcy5iaW5kaW5ncywgKF92YWx1ZSwgYmluZGluZ05hbWUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUV2ZW50KGJpbmRpbmdOYW1lLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuYmluZGluZ3NbYmluZGluZ05hbWVdO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFuZGxlcnMpIHtcbiAgICAgICAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGhhbmRsZXJzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRIYW5kbGVycyA9IHBhcnRpdGlvbiQyKGhhbmRsZXJzLCBoYW5kbGVyID0+IGhhbmRsZXIuZnVuYyA9PT0gY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIGhhbmRsZXJzID0gZmlsdGVyZWRIYW5kbGVycy5mYWlsO1xuICAgICAgICAgICAgICAgIHRoaXMuYmluZGluZ3NbY3VycmVudE5hbWVdID0gaGFuZGxlcnM7XG4gICAgICAgICAgICAgICAgZWFjaCRlKGZpbHRlcmVkSGFuZGxlcnMucGFzcywgaGFuZGxlciA9PiB7XG4gICAgICAgICAgICAgICAgICBoYW5kbGVyLnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICghaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVFdmVudChuYW1lLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuYmluZGluZ3NbY3VycmVudE5hbWVdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVhY2gkZCh0aGlzLmJpbmRpbmdzLCAoX3ZhbHVlLCBuYW1lKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZUV2ZW50KG5hbWUsIGZhbHNlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmJpbmRpbmdzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBvbmNlKG5hbWUsIGNhbGxiYWNrLCBwcmVwZW5kKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9uKG5hbWUsIGNhbGxiYWNrLCBwcmVwZW5kLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBoYXMobmFtZSkge1xuICAgICAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBiaW5kaW5nID0gdGhpcy5iaW5kaW5nc1tuYW1lXTtcbiAgICAgICAgcmV0dXJuICEoIWJpbmRpbmcgfHwgYmluZGluZy5sZW5ndGggPT09IDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGdldEV2ZW50RGlzcGF0Y2hlciA9IG9iaiA9PiB7XG4gICAgICBpZiAoIW9iai5fZXZlbnREaXNwYXRjaGVyKSB7XG4gICAgICAgIG9iai5fZXZlbnREaXNwYXRjaGVyID0gbmV3IEV2ZW50RGlzcGF0Y2hlcih7XG4gICAgICAgICAgc2NvcGU6IG9iaixcbiAgICAgICAgICB0b2dnbGVFdmVudDogKG5hbWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAoRXZlbnREaXNwYXRjaGVyLmlzTmF0aXZlKG5hbWUpICYmIG9iai50b2dnbGVOYXRpdmVFdmVudCkge1xuICAgICAgICAgICAgICBvYmoudG9nZ2xlTmF0aXZlRXZlbnQobmFtZSwgc3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqLl9ldmVudERpc3BhdGNoZXI7XG4gICAgfTtcbiAgICBjb25zdCBPYnNlcnZhYmxlID0ge1xuICAgICAgZmlyZShuYW1lLCBhcmdzLCBidWJibGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2gobmFtZSwgYXJncywgYnViYmxlKTtcbiAgICAgIH0sXG4gICAgICBkaXNwYXRjaChuYW1lLCBhcmdzLCBidWJibGUpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmIChzZWxmLnJlbW92ZWQgJiYgbmFtZSAhPT0gJ3JlbW92ZScgJiYgbmFtZSAhPT0gJ2RldGFjaCcpIHtcbiAgICAgICAgICByZXR1cm4gbm9ybWFsaXplJDMobmFtZS50b0xvd2VyQ2FzZSgpLCBhcmdzICE9PSBudWxsICYmIGFyZ3MgIT09IHZvaWQgMCA/IGFyZ3MgOiB7fSwgc2VsZik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlzcGF0Y2hlckFyZ3MgPSBnZXRFdmVudERpc3BhdGNoZXIoc2VsZikuZGlzcGF0Y2gobmFtZSwgYXJncyk7XG4gICAgICAgIGlmIChidWJibGUgIT09IGZhbHNlICYmIHNlbGYucGFyZW50KSB7XG4gICAgICAgICAgbGV0IHBhcmVudCA9IHNlbGYucGFyZW50KCk7XG4gICAgICAgICAgd2hpbGUgKHBhcmVudCAmJiAhZGlzcGF0Y2hlckFyZ3MuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICAgICAgcGFyZW50LmRpc3BhdGNoKG5hbWUsIGRpc3BhdGNoZXJBcmdzLCBmYWxzZSk7XG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50ID8gcGFyZW50LnBhcmVudCgpIDogdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlzcGF0Y2hlckFyZ3M7XG4gICAgICB9LFxuICAgICAgb24obmFtZSwgY2FsbGJhY2ssIHByZXBlbmQpIHtcbiAgICAgICAgcmV0dXJuIGdldEV2ZW50RGlzcGF0Y2hlcih0aGlzKS5vbihuYW1lLCBjYWxsYmFjaywgcHJlcGVuZCk7XG4gICAgICB9LFxuICAgICAgb2ZmKG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBnZXRFdmVudERpc3BhdGNoZXIodGhpcykub2ZmKG5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIH0sXG4gICAgICBvbmNlKG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBnZXRFdmVudERpc3BhdGNoZXIodGhpcykub25jZShuYW1lLCBjYWxsYmFjayk7XG4gICAgICB9LFxuICAgICAgaGFzRXZlbnRMaXN0ZW5lcnMobmFtZSkge1xuICAgICAgICByZXR1cm4gZ2V0RXZlbnREaXNwYXRjaGVyKHRoaXMpLmhhcyhuYW1lKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgRE9NJDIgPSBET01VdGlscy5ET007XG4gICAgbGV0IGN1c3RvbUV2ZW50Um9vdERlbGVnYXRlcztcbiAgICBjb25zdCBnZXRFdmVudFRhcmdldCA9IChlZGl0b3IsIGV2ZW50TmFtZSkgPT4ge1xuICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gJ3NlbGVjdGlvbmNoYW5nZScpIHtcbiAgICAgICAgcmV0dXJuIGVkaXRvci5nZXREb2MoKTtcbiAgICAgIH1cbiAgICAgIGlmICghZWRpdG9yLmlubGluZSAmJiAvXig/Om1vdXNlfHRvdWNofGNsaWNrfGNvbnRleHRtZW51fGRyb3B8ZHJhZ292ZXJ8ZHJhZ2VuZCkvLnRlc3QoZXZlbnROYW1lKSkge1xuICAgICAgICByZXR1cm4gZWRpdG9yLmdldERvYygpLmRvY3VtZW50RWxlbWVudDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV2ZW50Um9vdCA9IGdldEV2ZW50Um9vdChlZGl0b3IpO1xuICAgICAgaWYgKGV2ZW50Um9vdCkge1xuICAgICAgICBpZiAoIWVkaXRvci5ldmVudFJvb3QpIHtcbiAgICAgICAgICBlZGl0b3IuZXZlbnRSb290ID0gRE9NJDIuc2VsZWN0KGV2ZW50Um9vdClbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVkaXRvci5ldmVudFJvb3Q7XG4gICAgICB9XG4gICAgICByZXR1cm4gZWRpdG9yLmdldEJvZHkoKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzTGlzdGVuaW5nID0gZWRpdG9yID0+ICFlZGl0b3IuaGlkZGVuICYmICFpc1JlYWRPbmx5KGVkaXRvcik7XG4gICAgY29uc3QgZmlyZUV2ZW50ID0gKGVkaXRvciwgZXZlbnROYW1lLCBlKSA9PiB7XG4gICAgICBpZiAoaXNMaXN0ZW5pbmcoZWRpdG9yKSkge1xuICAgICAgICBlZGl0b3IuZGlzcGF0Y2goZXZlbnROYW1lLCBlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNSZWFkT25seShlZGl0b3IpKSB7XG4gICAgICAgIHByb2Nlc3NSZWFkb25seUV2ZW50cyhlZGl0b3IsIGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYmluZEV2ZW50RGVsZWdhdGUgPSAoZWRpdG9yLCBldmVudE5hbWUpID0+IHtcbiAgICAgIGlmICghZWRpdG9yLmRlbGVnYXRlcykge1xuICAgICAgICBlZGl0b3IuZGVsZWdhdGVzID0ge307XG4gICAgICB9XG4gICAgICBpZiAoZWRpdG9yLmRlbGVnYXRlc1tldmVudE5hbWVdIHx8IGVkaXRvci5yZW1vdmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV2ZW50Um9vdEVsbSA9IGdldEV2ZW50VGFyZ2V0KGVkaXRvciwgZXZlbnROYW1lKTtcbiAgICAgIGlmIChnZXRFdmVudFJvb3QoZWRpdG9yKSkge1xuICAgICAgICBpZiAoIWN1c3RvbUV2ZW50Um9vdERlbGVnYXRlcykge1xuICAgICAgICAgIGN1c3RvbUV2ZW50Um9vdERlbGVnYXRlcyA9IHt9O1xuICAgICAgICAgIGVkaXRvci5lZGl0b3JNYW5hZ2VyLm9uKCdyZW1vdmVFZGl0b3InLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWVkaXRvci5lZGl0b3JNYW5hZ2VyLmFjdGl2ZUVkaXRvcikge1xuICAgICAgICAgICAgICBpZiAoY3VzdG9tRXZlbnRSb290RGVsZWdhdGVzKSB7XG4gICAgICAgICAgICAgICAgZWFjaCRkKGN1c3RvbUV2ZW50Um9vdERlbGVnYXRlcywgKF92YWx1ZSwgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgZWRpdG9yLmRvbS51bmJpbmQoZ2V0RXZlbnRUYXJnZXQoZWRpdG9yLCBuYW1lKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY3VzdG9tRXZlbnRSb290RGVsZWdhdGVzID0gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXN0b21FdmVudFJvb3REZWxlZ2F0ZXNbZXZlbnROYW1lXSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWxlZ2F0ZSA9IGUgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0O1xuICAgICAgICAgIGNvbnN0IGVkaXRvcnMgPSBlZGl0b3IuZWRpdG9yTWFuYWdlci5nZXQoKTtcbiAgICAgICAgICBsZXQgaSA9IGVkaXRvcnMubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBlZGl0b3JzW2ldLmdldEJvZHkoKTtcbiAgICAgICAgICAgIGlmIChib2R5ID09PSB0YXJnZXQgfHwgRE9NJDIuaXNDaGlsZE9mKHRhcmdldCwgYm9keSkpIHtcbiAgICAgICAgICAgICAgZmlyZUV2ZW50KGVkaXRvcnNbaV0sIGV2ZW50TmFtZSwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjdXN0b21FdmVudFJvb3REZWxlZ2F0ZXNbZXZlbnROYW1lXSA9IGRlbGVnYXRlO1xuICAgICAgICBET00kMi5iaW5kKGV2ZW50Um9vdEVsbSwgZXZlbnROYW1lLCBkZWxlZ2F0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBkZWxlZ2F0ZSA9IGUgPT4ge1xuICAgICAgICAgIGZpcmVFdmVudChlZGl0b3IsIGV2ZW50TmFtZSwgZSk7XG4gICAgICAgIH07XG4gICAgICAgIERPTSQyLmJpbmQoZXZlbnRSb290RWxtLCBldmVudE5hbWUsIGRlbGVnYXRlKTtcbiAgICAgICAgZWRpdG9yLmRlbGVnYXRlc1tldmVudE5hbWVdID0gZGVsZWdhdGU7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBFZGl0b3JPYnNlcnZhYmxlID0ge1xuICAgICAgLi4uT2JzZXJ2YWJsZSxcbiAgICAgIGJpbmRQZW5kaW5nRXZlbnREZWxlZ2F0ZXMoKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBUb29scy5lYWNoKHNlbGYuX3BlbmRpbmdOYXRpdmVFdmVudHMsIG5hbWUgPT4ge1xuICAgICAgICAgIGJpbmRFdmVudERlbGVnYXRlKHNlbGYsIG5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB0b2dnbGVOYXRpdmVFdmVudChuYW1lLCBzdGF0ZSkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKG5hbWUgPT09ICdmb2N1cycgfHwgbmFtZSA9PT0gJ2JsdXInKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLnJlbW92ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgaWYgKHNlbGYuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIGJpbmRFdmVudERlbGVnYXRlKHNlbGYsIG5hbWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXNlbGYuX3BlbmRpbmdOYXRpdmVFdmVudHMpIHtcbiAgICAgICAgICAgICAgc2VsZi5fcGVuZGluZ05hdGl2ZUV2ZW50cyA9IFtuYW1lXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbGYuX3BlbmRpbmdOYXRpdmVFdmVudHMucHVzaChuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZi5pbml0aWFsaXplZCAmJiBzZWxmLmRlbGVnYXRlcykge1xuICAgICAgICAgIHNlbGYuZG9tLnVuYmluZChnZXRFdmVudFRhcmdldChzZWxmLCBuYW1lKSwgbmFtZSwgc2VsZi5kZWxlZ2F0ZXNbbmFtZV0pO1xuICAgICAgICAgIGRlbGV0ZSBzZWxmLmRlbGVnYXRlc1tuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVuYmluZEFsbE5hdGl2ZUV2ZW50cygpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBzZWxmLmdldEJvZHkoKTtcbiAgICAgICAgY29uc3QgZG9tID0gc2VsZi5kb207XG4gICAgICAgIGlmIChzZWxmLmRlbGVnYXRlcykge1xuICAgICAgICAgIGVhY2gkZChzZWxmLmRlbGVnYXRlcywgKHZhbHVlLCBuYW1lKSA9PiB7XG4gICAgICAgICAgICBzZWxmLmRvbS51bmJpbmQoZ2V0RXZlbnRUYXJnZXQoc2VsZiwgbmFtZSksIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBkZWxldGUgc2VsZi5kZWxlZ2F0ZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzZWxmLmlubGluZSAmJiBib2R5ICYmIGRvbSkge1xuICAgICAgICAgIGJvZHkub25sb2FkID0gbnVsbDtcbiAgICAgICAgICBkb20udW5iaW5kKHNlbGYuZ2V0V2luKCkpO1xuICAgICAgICAgIGRvbS51bmJpbmQoc2VsZi5nZXREb2MoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRvbSkge1xuICAgICAgICAgIGRvbS51bmJpbmQoYm9keSk7XG4gICAgICAgICAgZG9tLnVuYmluZChzZWxmLmdldENvbnRhaW5lcigpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBzdHJpbmdMaXN0UHJvY2Vzc29yID0gdmFsdWUgPT4ge1xuICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlOiB2YWx1ZS5zcGxpdCgvWyAsXS8pLFxuICAgICAgICAgIHZhbGlkOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXlPZih2YWx1ZSwgaXNTdHJpbmcpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgdmFsaWQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgIG1lc3NhZ2U6IGBUaGUgdmFsdWUgbXVzdCBiZSBhIHN0cmluZ1tdIG9yIGEgY29tbWEvc3BhY2Ugc2VwYXJhdGVkIHN0cmluZy5gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRCdWlsdEluUHJvY2Vzc29yID0gdHlwZSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0b3IgPSAoKCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgICAgIHJldHVybiBpc0FycmF5JDE7XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgIHJldHVybiBpc0Jvb2xlYW47XG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICByZXR1cm4gaXNGdW5jdGlvbjtcbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICByZXR1cm4gaXNOdW1iZXI7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgcmV0dXJuIGlzT2JqZWN0O1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgIHJldHVybiBpc1N0cmluZztcbiAgICAgICAgY2FzZSAnc3RyaW5nW10nOlxuICAgICAgICAgIHJldHVybiBzdHJpbmdMaXN0UHJvY2Vzc29yO1xuICAgICAgICBjYXNlICdvYmplY3RbXSc6XG4gICAgICAgICAgcmV0dXJuIHZhbCA9PiBpc0FycmF5T2YodmFsLCBpc09iamVjdCk7XG4gICAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgICAgcmV0dXJuIHZhbCA9PiBpcyQ0KHZhbCwgUmVnRXhwKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gYWx3YXlzO1xuICAgICAgICB9XG4gICAgICB9KSgpO1xuICAgICAgcmV0dXJuIHZhbHVlID0+IHByb2Nlc3NWYWx1ZSh2YWx1ZSwgdmFsaWRhdG9yLCBgVGhlIHZhbHVlIG11c3QgYmUgYSAkeyB0eXBlIH0uYCk7XG4gICAgfTtcbiAgICBjb25zdCBpc0J1aWx0SW5TcGVjID0gc3BlYyA9PiBpc1N0cmluZyhzcGVjLnByb2Nlc3Nvcik7XG4gICAgY29uc3QgZ2V0RXJyb3JNZXNzYWdlID0gKG1lc3NhZ2UsIHJlc3VsdCkgPT4ge1xuICAgICAgY29uc3QgYWRkaXRpb25hbFRleHQgPSBpc0VtcHR5JDMocmVzdWx0Lm1lc3NhZ2UpID8gJycgOiBgLiAkeyByZXN1bHQubWVzc2FnZSB9YDtcbiAgICAgIHJldHVybiBtZXNzYWdlICsgYWRkaXRpb25hbFRleHQ7XG4gICAgfTtcbiAgICBjb25zdCBpc1ZhbGlkUmVzdWx0ID0gcmVzdWx0ID0+IHJlc3VsdC52YWxpZDtcbiAgICBjb25zdCBwcm9jZXNzVmFsdWUgPSAodmFsdWUsIHByb2Nlc3NvciwgbWVzc2FnZSA9ICcnKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBwcm9jZXNzb3IodmFsdWUpO1xuICAgICAgaWYgKGlzQm9vbGVhbihyZXN1bHQpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQgPyB7XG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHZhbGlkOiB0cnVlXG4gICAgICAgIH0gOiB7XG4gICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgIG1lc3NhZ2VcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBwcm9jZXNzRGVmYXVsdFZhbHVlID0gKG5hbWUsIGRlZmF1bHRWYWx1ZSwgcHJvY2Vzc29yKSA9PiB7XG4gICAgICBpZiAoIWlzVW5kZWZpbmVkKGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcHJvY2Vzc1ZhbHVlKGRlZmF1bHRWYWx1ZSwgcHJvY2Vzc29yKTtcbiAgICAgICAgaWYgKGlzVmFsaWRSZXN1bHQocmVzdWx0KSkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQudmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihnZXRFcnJvck1lc3NhZ2UoYEludmFsaWQgZGVmYXVsdCB2YWx1ZSBwYXNzZWQgZm9yIHRoZSBcIiR7IG5hbWUgfVwiIG9wdGlvbmAsIHJlc3VsdCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlJDUgPSAoZWRpdG9yLCBpbml0aWFsT3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgcmVnaXN0cnkgPSB7fTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHt9O1xuICAgICAgY29uc3Qgc2V0VmFsdWUgPSAobmFtZSwgdmFsdWUsIHByb2Nlc3NvcikgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwcm9jZXNzVmFsdWUodmFsdWUsIHByb2Nlc3Nvcik7XG4gICAgICAgIGlmIChpc1ZhbGlkUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgICAgICB2YWx1ZXNbbmFtZV0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGdldEVycm9yTWVzc2FnZShgSW52YWxpZCB2YWx1ZSBwYXNzZWQgZm9yIHRoZSAkeyBuYW1lIH0gb3B0aW9uYCwgcmVzdWx0KSk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVnaXN0ZXIgPSAobmFtZSwgc3BlYykgPT4ge1xuICAgICAgICBjb25zdCBwcm9jZXNzb3IgPSBpc0J1aWx0SW5TcGVjKHNwZWMpID8gZ2V0QnVpbHRJblByb2Nlc3NvcihzcGVjLnByb2Nlc3NvcikgOiBzcGVjLnByb2Nlc3NvcjtcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gcHJvY2Vzc0RlZmF1bHRWYWx1ZShuYW1lLCBzcGVjLmRlZmF1bHQsIHByb2Nlc3Nvcik7XG4gICAgICAgIHJlZ2lzdHJ5W25hbWVdID0ge1xuICAgICAgICAgIC4uLnNwZWMsXG4gICAgICAgICAgZGVmYXVsdDogZGVmYXVsdFZhbHVlLFxuICAgICAgICAgIHByb2Nlc3NvclxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpbml0VmFsdWUgPSBnZXQkYSh2YWx1ZXMsIG5hbWUpLm9yVGh1bmsoKCkgPT4gZ2V0JGEoaW5pdGlhbE9wdGlvbnMsIG5hbWUpKTtcbiAgICAgICAgaW5pdFZhbHVlLmVhY2godmFsdWUgPT4gc2V0VmFsdWUobmFtZSwgdmFsdWUsIHByb2Nlc3NvcikpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzUmVnaXN0ZXJlZCA9IG5hbWUgPT4gaGFzJDIocmVnaXN0cnksIG5hbWUpO1xuICAgICAgY29uc3QgZ2V0ID0gbmFtZSA9PiBnZXQkYSh2YWx1ZXMsIG5hbWUpLm9yVGh1bmsoKCkgPT4gZ2V0JGEocmVnaXN0cnksIG5hbWUpLm1hcChzcGVjID0+IHNwZWMuZGVmYXVsdCkpLmdldE9yVW5kZWZpbmVkKCk7XG4gICAgICBjb25zdCBzZXQgPSAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgaWYgKCFpc1JlZ2lzdGVyZWQobmFtZSkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFwiJHsgbmFtZSB9XCIgaXMgbm90IGEgcmVnaXN0ZXJlZCBvcHRpb24uIEVuc3VyZSB0aGUgb3B0aW9uIGhhcyBiZWVuIHJlZ2lzdGVyZWQgYmVmb3JlIHNldHRpbmcgYSB2YWx1ZS5gKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3BlYyA9IHJlZ2lzdHJ5W25hbWVdO1xuICAgICAgICAgIGlmIChzcGVjLmltbXV0YWJsZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgXCIkeyBuYW1lIH1cIiBpcyBhbiBpbW11dGFibGUgb3B0aW9uIGFuZCBjYW5ub3QgYmUgdXBkYXRlZGApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0VmFsdWUobmFtZSwgdmFsdWUsIHNwZWMucHJvY2Vzc29yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCB1bnNldCA9IG5hbWUgPT4ge1xuICAgICAgICBjb25zdCByZWdpc3RlcmVkID0gaXNSZWdpc3RlcmVkKG5hbWUpO1xuICAgICAgICBpZiAocmVnaXN0ZXJlZCkge1xuICAgICAgICAgIGRlbGV0ZSB2YWx1ZXNbbmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlZ2lzdGVyZWQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNTZXQgPSBuYW1lID0+IGhhcyQyKHZhbHVlcywgbmFtZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWdpc3RlcixcbiAgICAgICAgaXNSZWdpc3RlcmVkLFxuICAgICAgICBnZXQsXG4gICAgICAgIHNldCxcbiAgICAgICAgdW5zZXQsXG4gICAgICAgIGlzU2V0XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBkZWZhdWx0TW9kZXMgPSBbXG4gICAgICAnZGVzaWduJyxcbiAgICAgICdyZWFkb25seSdcbiAgICBdO1xuICAgIGNvbnN0IHN3aXRjaFRvTW9kZSA9IChlZGl0b3IsIGFjdGl2ZU1vZGUsIGF2YWlsYWJsZU1vZGVzLCBtb2RlKSA9PiB7XG4gICAgICBjb25zdCBvbGRNb2RlID0gYXZhaWxhYmxlTW9kZXNbYWN0aXZlTW9kZS5nZXQoKV07XG4gICAgICBjb25zdCBuZXdNb2RlID0gYXZhaWxhYmxlTW9kZXNbbW9kZV07XG4gICAgICB0cnkge1xuICAgICAgICBuZXdNb2RlLmFjdGl2YXRlKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYHByb2JsZW0gd2hpbGUgYWN0aXZhdGluZyBlZGl0b3IgbW9kZSAkeyBtb2RlIH06YCwgZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG9sZE1vZGUuZGVhY3RpdmF0ZSgpO1xuICAgICAgaWYgKG9sZE1vZGUuZWRpdG9yUmVhZE9ubHkgIT09IG5ld01vZGUuZWRpdG9yUmVhZE9ubHkpIHtcbiAgICAgICAgdG9nZ2xlUmVhZE9ubHkoZWRpdG9yLCBuZXdNb2RlLmVkaXRvclJlYWRPbmx5KTtcbiAgICAgIH1cbiAgICAgIGFjdGl2ZU1vZGUuc2V0KG1vZGUpO1xuICAgICAgZmlyZVN3aXRjaE1vZGUoZWRpdG9yLCBtb2RlKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldE1vZGUgPSAoZWRpdG9yLCBhdmFpbGFibGVNb2RlcywgYWN0aXZlTW9kZSwgbW9kZSkgPT4ge1xuICAgICAgaWYgKG1vZGUgPT09IGFjdGl2ZU1vZGUuZ2V0KCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmICghaGFzJDIoYXZhaWxhYmxlTW9kZXMsIG1vZGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRWRpdG9yIG1vZGUgJyR7IG1vZGUgfScgaXMgaW52YWxpZGApO1xuICAgICAgfVxuICAgICAgaWYgKGVkaXRvci5pbml0aWFsaXplZCkge1xuICAgICAgICBzd2l0Y2hUb01vZGUoZWRpdG9yLCBhY3RpdmVNb2RlLCBhdmFpbGFibGVNb2RlcywgbW9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGl0b3Iub24oJ2luaXQnLCAoKSA9PiBzd2l0Y2hUb01vZGUoZWRpdG9yLCBhY3RpdmVNb2RlLCBhdmFpbGFibGVNb2RlcywgbW9kZSkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXJNb2RlID0gKGF2YWlsYWJsZU1vZGVzLCBtb2RlLCBhcGkpID0+IHtcbiAgICAgIGlmIChjb250YWlucyQyKGRlZmF1bHRNb2RlcywgbW9kZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcnJpZGUgZGVmYXVsdCBtb2RlICR7IG1vZGUgfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYXZhaWxhYmxlTW9kZXMsXG4gICAgICAgIFttb2RlXToge1xuICAgICAgICAgIC4uLmFwaSxcbiAgICAgICAgICBkZWFjdGl2YXRlOiAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhcGkuZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBwcm9ibGVtIHdoaWxlIGRlYWN0aXZhdGluZyBlZGl0b3IgbW9kZSAkeyBtb2RlIH06YCwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGUkNCA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBhY3RpdmVNb2RlID0gQ2VsbCgnZGVzaWduJyk7XG4gICAgICBjb25zdCBhdmFpbGFibGVNb2RlcyA9IENlbGwoe1xuICAgICAgICBkZXNpZ246IHtcbiAgICAgICAgICBhY3RpdmF0ZTogbm9vcCxcbiAgICAgICAgICBkZWFjdGl2YXRlOiBub29wLFxuICAgICAgICAgIGVkaXRvclJlYWRPbmx5OiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICByZWFkb25seToge1xuICAgICAgICAgIGFjdGl2YXRlOiBub29wLFxuICAgICAgICAgIGRlYWN0aXZhdGU6IG5vb3AsXG4gICAgICAgICAgZWRpdG9yUmVhZE9ubHk6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZWdpc3RlclJlYWRPbmx5Q29udGVudEZpbHRlcnMoZWRpdG9yKTtcbiAgICAgIHJlZ2lzdGVyUmVhZE9ubHlTZWxlY3Rpb25CbG9ja2VycyhlZGl0b3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNSZWFkT25seTogKCkgPT4gaXNSZWFkT25seShlZGl0b3IpLFxuICAgICAgICBzZXQ6IG1vZGUgPT4gc2V0TW9kZShlZGl0b3IsIGF2YWlsYWJsZU1vZGVzLmdldCgpLCBhY3RpdmVNb2RlLCBtb2RlKSxcbiAgICAgICAgZ2V0OiAoKSA9PiBhY3RpdmVNb2RlLmdldCgpLFxuICAgICAgICByZWdpc3RlcjogKG1vZGUsIGFwaSkgPT4ge1xuICAgICAgICAgIGF2YWlsYWJsZU1vZGVzLnNldChyZWdpc3Rlck1vZGUoYXZhaWxhYmxlTW9kZXMuZ2V0KCksIG1vZGUsIGFwaSkpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBlYWNoJDIgPSBUb29scy5lYWNoLCBleHBsb2RlID0gVG9vbHMuZXhwbG9kZTtcbiAgICBjb25zdCBrZXlDb2RlTG9va3VwID0ge1xuICAgICAgZjE6IDExMixcbiAgICAgIGYyOiAxMTMsXG4gICAgICBmMzogMTE0LFxuICAgICAgZjQ6IDExNSxcbiAgICAgIGY1OiAxMTYsXG4gICAgICBmNjogMTE3LFxuICAgICAgZjc6IDExOCxcbiAgICAgIGY4OiAxMTksXG4gICAgICBmOTogMTIwLFxuICAgICAgZjEwOiAxMjEsXG4gICAgICBmMTE6IDEyMixcbiAgICAgIGYxMjogMTIzXG4gICAgfTtcbiAgICBjb25zdCBtb2RpZmllck5hbWVzID0gVG9vbHMubWFrZU1hcCgnYWx0LGN0cmwsc2hpZnQsbWV0YSxhY2Nlc3MnKTtcbiAgICBjb25zdCBpc01vZGlmaWVyID0ga2V5ID0+IGtleSBpbiBtb2RpZmllck5hbWVzO1xuICAgIGNvbnN0IHBhcnNlU2hvcnRjdXQgPSBwYXR0ZXJuID0+IHtcbiAgICAgIGNvbnN0IHNob3J0Y3V0ID0ge307XG4gICAgICBjb25zdCBpc01hYyA9IEVudi5vcy5pc01hY09TKCkgfHwgRW52Lm9zLmlzaU9TKCk7XG4gICAgICBlYWNoJDIoZXhwbG9kZShwYXR0ZXJuLnRvTG93ZXJDYXNlKCksICcrJyksIHZhbHVlID0+IHtcbiAgICAgICAgaWYgKGlzTW9kaWZpZXIodmFsdWUpKSB7XG4gICAgICAgICAgc2hvcnRjdXRbdmFsdWVdID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoL15bMC05XXsyLH0kLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgc2hvcnRjdXQua2V5Q29kZSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNob3J0Y3V0LmNoYXJDb2RlID0gdmFsdWUuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgICAgIHNob3J0Y3V0LmtleUNvZGUgPSBrZXlDb2RlTG9va3VwW3ZhbHVlXSB8fCB2YWx1ZS50b1VwcGVyQ2FzZSgpLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGlkID0gW3Nob3J0Y3V0LmtleUNvZGVdO1xuICAgICAgbGV0IGtleTtcbiAgICAgIGZvciAoa2V5IGluIG1vZGlmaWVyTmFtZXMpIHtcbiAgICAgICAgaWYgKHNob3J0Y3V0W2tleV0pIHtcbiAgICAgICAgICBpZC5wdXNoKGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2hvcnRjdXRba2V5XSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzaG9ydGN1dC5pZCA9IGlkLmpvaW4oJywnKTtcbiAgICAgIGlmIChzaG9ydGN1dC5hY2Nlc3MpIHtcbiAgICAgICAgc2hvcnRjdXQuYWx0ID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzTWFjKSB7XG4gICAgICAgICAgc2hvcnRjdXQuY3RybCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2hvcnRjdXQuc2hpZnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc2hvcnRjdXQubWV0YSkge1xuICAgICAgICBpZiAoaXNNYWMpIHtcbiAgICAgICAgICBzaG9ydGN1dC5tZXRhID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzaG9ydGN1dC5jdHJsID0gdHJ1ZTtcbiAgICAgICAgICBzaG9ydGN1dC5tZXRhID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzaG9ydGN1dDtcbiAgICB9O1xuICAgIGNsYXNzIFNob3J0Y3V0cyB7XG4gICAgICBjb25zdHJ1Y3RvcihlZGl0b3IpIHtcbiAgICAgICAgdGhpcy5zaG9ydGN1dHMgPSB7fTtcbiAgICAgICAgdGhpcy5wZW5kaW5nUGF0dGVybnMgPSBbXTtcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBlZGl0b3Iub24oJ2tleXVwIGtleXByZXNzIGtleWRvd24nLCBlID0+IHtcbiAgICAgICAgICBpZiAoKHNlbGYuaGFzTW9kaWZpZXIoZSkgfHwgc2VsZi5pc0Z1bmN0aW9uS2V5KGUpKSAmJiAhZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgICAgZWFjaCQyKHNlbGYuc2hvcnRjdXRzLCBzaG9ydGN1dCA9PiB7XG4gICAgICAgICAgICAgIGlmIChzZWxmLm1hdGNoU2hvcnRjdXQoZSwgc2hvcnRjdXQpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5wZW5kaW5nUGF0dGVybnMgPSBzaG9ydGN1dC5zdWJwYXR0ZXJucy5zbGljZSgwKTtcbiAgICAgICAgICAgICAgICBpZiAoZS50eXBlID09PSAna2V5ZG93bicpIHtcbiAgICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0ZVNob3J0Y3V0QWN0aW9uKHNob3J0Y3V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHNlbGYubWF0Y2hTaG9ydGN1dChlLCBzZWxmLnBlbmRpbmdQYXR0ZXJuc1swXSkpIHtcbiAgICAgICAgICAgICAgaWYgKHNlbGYucGVuZGluZ1BhdHRlcm5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChlLnR5cGUgPT09ICdrZXlkb3duJykge1xuICAgICAgICAgICAgICAgICAgc2VsZi5leGVjdXRlU2hvcnRjdXRBY3Rpb24oc2VsZi5wZW5kaW5nUGF0dGVybnNbMF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzZWxmLnBlbmRpbmdQYXR0ZXJucy5zaGlmdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhZGQocGF0dGVybiwgZGVzYywgY21kRnVuYywgc2NvcGUpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGZ1bmMgPSBzZWxmLm5vcm1hbGl6ZUNvbW1hbmRGdW5jKGNtZEZ1bmMpO1xuICAgICAgICBlYWNoJDIoZXhwbG9kZShUb29scy50cmltKHBhdHRlcm4pKSwgcGF0dGVybiA9PiB7XG4gICAgICAgICAgY29uc3Qgc2hvcnRjdXQgPSBzZWxmLmNyZWF0ZVNob3J0Y3V0KHBhdHRlcm4sIGRlc2MsIGZ1bmMsIHNjb3BlKTtcbiAgICAgICAgICBzZWxmLnNob3J0Y3V0c1tzaG9ydGN1dC5pZF0gPSBzaG9ydGN1dDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmVtb3ZlKHBhdHRlcm4pIHtcbiAgICAgICAgY29uc3Qgc2hvcnRjdXQgPSB0aGlzLmNyZWF0ZVNob3J0Y3V0KHBhdHRlcm4pO1xuICAgICAgICBpZiAodGhpcy5zaG9ydGN1dHNbc2hvcnRjdXQuaWRdKSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuc2hvcnRjdXRzW3Nob3J0Y3V0LmlkXTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBub3JtYWxpemVDb21tYW5kRnVuYyhjbWRGdW5jKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBjbWQgPSBjbWRGdW5jO1xuICAgICAgICBpZiAodHlwZW9mIGNtZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgc2VsZi5lZGl0b3IuZXhlY0NvbW1hbmQoY21kLCBmYWxzZSwgbnVsbCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChUb29scy5pc0FycmF5KGNtZCkpIHtcbiAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgc2VsZi5lZGl0b3IuZXhlY0NvbW1hbmQoY21kWzBdLCBjbWRbMV0sIGNtZFsyXSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gY21kO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjcmVhdGVTaG9ydGN1dChwYXR0ZXJuLCBkZXNjLCBjbWRGdW5jLCBzY29wZSkge1xuICAgICAgICBjb25zdCBzaG9ydGN1dHMgPSBUb29scy5tYXAoZXhwbG9kZShwYXR0ZXJuLCAnPicpLCBwYXJzZVNob3J0Y3V0KTtcbiAgICAgICAgc2hvcnRjdXRzW3Nob3J0Y3V0cy5sZW5ndGggLSAxXSA9IFRvb2xzLmV4dGVuZChzaG9ydGN1dHNbc2hvcnRjdXRzLmxlbmd0aCAtIDFdLCB7XG4gICAgICAgICAgZnVuYzogY21kRnVuYyxcbiAgICAgICAgICBzY29wZTogc2NvcGUgfHwgdGhpcy5lZGl0b3JcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBUb29scy5leHRlbmQoc2hvcnRjdXRzWzBdLCB7XG4gICAgICAgICAgZGVzYzogdGhpcy5lZGl0b3IudHJhbnNsYXRlKGRlc2MpLFxuICAgICAgICAgIHN1YnBhdHRlcm5zOiBzaG9ydGN1dHMuc2xpY2UoMSlcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBoYXNNb2RpZmllcihlKSB7XG4gICAgICAgIHJldHVybiBlLmFsdEtleSB8fCBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5O1xuICAgICAgfVxuICAgICAgaXNGdW5jdGlvbktleShlKSB7XG4gICAgICAgIHJldHVybiBlLnR5cGUgPT09ICdrZXlkb3duJyAmJiBlLmtleUNvZGUgPj0gMTEyICYmIGUua2V5Q29kZSA8PSAxMjM7XG4gICAgICB9XG4gICAgICBtYXRjaFNob3J0Y3V0KGUsIHNob3J0Y3V0KSB7XG4gICAgICAgIGlmICghc2hvcnRjdXQpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3J0Y3V0LmN0cmwgIT09IGUuY3RybEtleSB8fCBzaG9ydGN1dC5tZXRhICE9PSBlLm1ldGFLZXkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3J0Y3V0LmFsdCAhPT0gZS5hbHRLZXkgfHwgc2hvcnRjdXQuc2hpZnQgIT09IGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gc2hvcnRjdXQua2V5Q29kZSB8fCBlLmNoYXJDb2RlICYmIGUuY2hhckNvZGUgPT09IHNob3J0Y3V0LmNoYXJDb2RlKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGV4ZWN1dGVTaG9ydGN1dEFjdGlvbihzaG9ydGN1dCkge1xuICAgICAgICByZXR1cm4gc2hvcnRjdXQuZnVuYyA/IHNob3J0Y3V0LmZ1bmMuY2FsbChzaG9ydGN1dC5zY29wZSkgOiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNyZWF0ZSQzID0gKCkgPT4ge1xuICAgICAgY29uc3QgYnV0dG9ucyA9IHt9O1xuICAgICAgY29uc3QgbWVudUl0ZW1zID0ge307XG4gICAgICBjb25zdCBwb3B1cHMgPSB7fTtcbiAgICAgIGNvbnN0IGljb25zID0ge307XG4gICAgICBjb25zdCBjb250ZXh0TWVudXMgPSB7fTtcbiAgICAgIGNvbnN0IGNvbnRleHRUb29sYmFycyA9IHt9O1xuICAgICAgY29uc3Qgc2lkZWJhcnMgPSB7fTtcbiAgICAgIGNvbnN0IHZpZXdzID0ge307XG4gICAgICBjb25zdCBhZGQgPSAoY29sbGVjdGlvbiwgdHlwZSkgPT4gKG5hbWUsIHNwZWMpID0+IHtcbiAgICAgICAgY29sbGVjdGlvbltuYW1lLnRvTG93ZXJDYXNlKCldID0ge1xuICAgICAgICAgIC4uLnNwZWMsXG4gICAgICAgICAgdHlwZVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkZEljb24gPSAobmFtZSwgc3ZnRGF0YSkgPT4gaWNvbnNbbmFtZS50b0xvd2VyQ2FzZSgpXSA9IHN2Z0RhdGE7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhZGRCdXR0b246IGFkZChidXR0b25zLCAnYnV0dG9uJyksXG4gICAgICAgIGFkZEdyb3VwVG9vbGJhckJ1dHRvbjogYWRkKGJ1dHRvbnMsICdncm91cHRvb2xiYXJidXR0b24nKSxcbiAgICAgICAgYWRkVG9nZ2xlQnV0dG9uOiBhZGQoYnV0dG9ucywgJ3RvZ2dsZWJ1dHRvbicpLFxuICAgICAgICBhZGRNZW51QnV0dG9uOiBhZGQoYnV0dG9ucywgJ21lbnVidXR0b24nKSxcbiAgICAgICAgYWRkU3BsaXRCdXR0b246IGFkZChidXR0b25zLCAnc3BsaXRidXR0b24nKSxcbiAgICAgICAgYWRkTWVudUl0ZW06IGFkZChtZW51SXRlbXMsICdtZW51aXRlbScpLFxuICAgICAgICBhZGROZXN0ZWRNZW51SXRlbTogYWRkKG1lbnVJdGVtcywgJ25lc3RlZG1lbnVpdGVtJyksXG4gICAgICAgIGFkZFRvZ2dsZU1lbnVJdGVtOiBhZGQobWVudUl0ZW1zLCAndG9nZ2xlbWVudWl0ZW0nKSxcbiAgICAgICAgYWRkQXV0b2NvbXBsZXRlcjogYWRkKHBvcHVwcywgJ2F1dG9jb21wbGV0ZXInKSxcbiAgICAgICAgYWRkQ29udGV4dE1lbnU6IGFkZChjb250ZXh0TWVudXMsICdjb250ZXh0bWVudScpLFxuICAgICAgICBhZGRDb250ZXh0VG9vbGJhcjogYWRkKGNvbnRleHRUb29sYmFycywgJ2NvbnRleHR0b29sYmFyJyksXG4gICAgICAgIGFkZENvbnRleHRGb3JtOiBhZGQoY29udGV4dFRvb2xiYXJzLCAnY29udGV4dGZvcm0nKSxcbiAgICAgICAgYWRkU2lkZWJhcjogYWRkKHNpZGViYXJzLCAnc2lkZWJhcicpLFxuICAgICAgICBhZGRWaWV3OiBhZGQodmlld3MsICd2aWV3cycpLFxuICAgICAgICBhZGRJY29uLFxuICAgICAgICBnZXRBbGw6ICgpID0+ICh7XG4gICAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgICBtZW51SXRlbXMsXG4gICAgICAgICAgaWNvbnMsXG4gICAgICAgICAgcG9wdXBzLFxuICAgICAgICAgIGNvbnRleHRNZW51cyxcbiAgICAgICAgICBjb250ZXh0VG9vbGJhcnMsXG4gICAgICAgICAgc2lkZWJhcnMsXG4gICAgICAgICAgdmlld3NcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gKCkgPT4ge1xuICAgICAgY29uc3QgYnJpZGdlID0gY3JlYXRlJDMoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFkZEF1dG9jb21wbGV0ZXI6IGJyaWRnZS5hZGRBdXRvY29tcGxldGVyLFxuICAgICAgICBhZGRCdXR0b246IGJyaWRnZS5hZGRCdXR0b24sXG4gICAgICAgIGFkZENvbnRleHRGb3JtOiBicmlkZ2UuYWRkQ29udGV4dEZvcm0sXG4gICAgICAgIGFkZENvbnRleHRNZW51OiBicmlkZ2UuYWRkQ29udGV4dE1lbnUsXG4gICAgICAgIGFkZENvbnRleHRUb29sYmFyOiBicmlkZ2UuYWRkQ29udGV4dFRvb2xiYXIsXG4gICAgICAgIGFkZEljb246IGJyaWRnZS5hZGRJY29uLFxuICAgICAgICBhZGRNZW51QnV0dG9uOiBicmlkZ2UuYWRkTWVudUJ1dHRvbixcbiAgICAgICAgYWRkTWVudUl0ZW06IGJyaWRnZS5hZGRNZW51SXRlbSxcbiAgICAgICAgYWRkTmVzdGVkTWVudUl0ZW06IGJyaWRnZS5hZGROZXN0ZWRNZW51SXRlbSxcbiAgICAgICAgYWRkU2lkZWJhcjogYnJpZGdlLmFkZFNpZGViYXIsXG4gICAgICAgIGFkZFNwbGl0QnV0dG9uOiBicmlkZ2UuYWRkU3BsaXRCdXR0b24sXG4gICAgICAgIGFkZFRvZ2dsZUJ1dHRvbjogYnJpZGdlLmFkZFRvZ2dsZUJ1dHRvbixcbiAgICAgICAgYWRkR3JvdXBUb29sYmFyQnV0dG9uOiBicmlkZ2UuYWRkR3JvdXBUb29sYmFyQnV0dG9uLFxuICAgICAgICBhZGRUb2dnbGVNZW51SXRlbTogYnJpZGdlLmFkZFRvZ2dsZU1lbnVJdGVtLFxuICAgICAgICBhZGRWaWV3OiBicmlkZ2UuYWRkVmlldyxcbiAgICAgICAgZ2V0QWxsOiBicmlkZ2UuZ2V0QWxsXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBET00kMSA9IERPTVV0aWxzLkRPTTtcbiAgICBjb25zdCBleHRlbmQgPSBUb29scy5leHRlbmQsIGVhY2gkMSA9IFRvb2xzLmVhY2g7XG4gICAgY2xhc3MgRWRpdG9yIHtcbiAgICAgIGNvbnN0cnVjdG9yKGlkLCBvcHRpb25zLCBlZGl0b3JNYW5hZ2VyKSB7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IHt9O1xuICAgICAgICB0aGlzLmNvbnRlbnRDU1MgPSBbXTtcbiAgICAgICAgdGhpcy5jb250ZW50U3R5bGVzID0gW107XG4gICAgICAgIHRoaXMubG9hZGVkQ1NTID0ge307XG4gICAgICAgIHRoaXMuaXNOb3REaXJ0eSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbXBvc2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhhc0hpZGRlbklucHV0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaWZyYW1lRWxlbWVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZWFkb25seSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFydENvbnRlbnQgPSAnJztcbiAgICAgICAgdGhpcy5fcGVuZGluZ05hdGl2ZUV2ZW50cyA9IFtdO1xuICAgICAgICB0aGlzLl9za2luTG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2VkaXRhYmxlUm9vdCA9IHRydWU7XG4gICAgICAgIHRoaXMuZWRpdG9yTWFuYWdlciA9IGVkaXRvck1hbmFnZXI7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRCYXNlVXJsID0gZWRpdG9yTWFuYWdlci5kb2N1bWVudEJhc2VVUkw7XG4gICAgICAgIGV4dGVuZCh0aGlzLCBFZGl0b3JPYnNlcnZhYmxlKTtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgdGhpcy5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZE9wdGlvbnMgPSBub3JtYWxpemVPcHRpb25zKGVkaXRvck1hbmFnZXIuZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBjcmVhdGUkNShzZWxmLCBub3JtYWxpemVkT3B0aW9ucyk7XG4gICAgICAgIHJlZ2lzdGVyJDcoc2VsZik7XG4gICAgICAgIGNvbnN0IGdldE9wdGlvbiA9IHRoaXMub3B0aW9ucy5nZXQ7XG4gICAgICAgIGlmIChnZXRPcHRpb24oJ2RlcHJlY2F0aW9uX3dhcm5pbmdzJykpIHtcbiAgICAgICAgICBsb2dXYXJuaW5ncyhvcHRpb25zLCBub3JtYWxpemVkT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3VmZml4ID0gZ2V0T3B0aW9uKCdzdWZmaXgnKTtcbiAgICAgICAgaWYgKHN1ZmZpeCkge1xuICAgICAgICAgIGVkaXRvck1hbmFnZXIuc3VmZml4ID0gc3VmZml4O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3VmZml4ID0gZWRpdG9yTWFuYWdlci5zdWZmaXg7XG4gICAgICAgIGNvbnN0IGJhc2VVcmwgPSBnZXRPcHRpb24oJ2Jhc2VfdXJsJyk7XG4gICAgICAgIGlmIChiYXNlVXJsKSB7XG4gICAgICAgICAgZWRpdG9yTWFuYWdlci5fc2V0QmFzZVVybChiYXNlVXJsKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJhc2VVcmkgPSBlZGl0b3JNYW5hZ2VyLmJhc2VVUkk7XG4gICAgICAgIGNvbnN0IHJlZmVycmVyUG9saWN5ID0gZ2V0UmVmZXJyZXJQb2xpY3koc2VsZik7XG4gICAgICAgIGlmIChyZWZlcnJlclBvbGljeSkge1xuICAgICAgICAgIFNjcmlwdExvYWRlci5TY3JpcHRMb2FkZXIuX3NldFJlZmVycmVyUG9saWN5KHJlZmVycmVyUG9saWN5KTtcbiAgICAgICAgICBET01VdGlscy5ET00uc3R5bGVTaGVldExvYWRlci5fc2V0UmVmZXJyZXJQb2xpY3kocmVmZXJyZXJQb2xpY3kpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRlbnRDc3NDb3JzID0gaGFzQ29udGVudENzc0NvcnMoc2VsZik7XG4gICAgICAgIGlmIChpc05vbk51bGxhYmxlKGNvbnRlbnRDc3NDb3JzKSkge1xuICAgICAgICAgIERPTVV0aWxzLkRPTS5zdHlsZVNoZWV0TG9hZGVyLl9zZXRDb250ZW50Q3NzQ29ycyhjb250ZW50Q3NzQ29ycyk7XG4gICAgICAgIH1cbiAgICAgICAgQWRkT25NYW5hZ2VyLmxhbmd1YWdlTG9hZCA9IGdldE9wdGlvbignbGFuZ3VhZ2VfbG9hZCcpO1xuICAgICAgICBBZGRPbk1hbmFnZXIuYmFzZVVSTCA9IGVkaXRvck1hbmFnZXIuYmFzZVVSTDtcbiAgICAgICAgdGhpcy5zZXREaXJ0eShmYWxzZSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRCYXNlVVJJID0gbmV3IFVSSShnZXREb2N1bWVudEJhc2VVcmwoc2VsZiksIHsgYmFzZV91cmk6IHRoaXMuYmFzZVVyaSB9KTtcbiAgICAgICAgdGhpcy5iYXNlVVJJID0gdGhpcy5iYXNlVXJpO1xuICAgICAgICB0aGlzLmlubGluZSA9IGlzSW5saW5lKHNlbGYpO1xuICAgICAgICB0aGlzLmhhc1Zpc3VhbCA9IGlzVmlzdWFsQWlkc0VuYWJsZWQoc2VsZik7XG4gICAgICAgIHRoaXMuc2hvcnRjdXRzID0gbmV3IFNob3J0Y3V0cyh0aGlzKTtcbiAgICAgICAgdGhpcy5lZGl0b3JDb21tYW5kcyA9IG5ldyBFZGl0b3JDb21tYW5kcyh0aGlzKTtcbiAgICAgICAgcmVnaXN0ZXJDb21tYW5kcyh0aGlzKTtcbiAgICAgICAgY29uc3QgY2FjaGVTdWZmaXggPSBnZXRPcHRpb24oJ2NhY2hlX3N1ZmZpeCcpO1xuICAgICAgICBpZiAoY2FjaGVTdWZmaXgpIHtcbiAgICAgICAgICBFbnYuY2FjaGVTdWZmaXggPSBjYWNoZVN1ZmZpeC5yZXBsYWNlKC9eW1xcP1xcJl0rLywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudWkgPSB7XG4gICAgICAgICAgcmVnaXN0cnk6IHJlZ2lzdHJ5KCksXG4gICAgICAgICAgc3R5bGVTaGVldExvYWRlcjogdW5kZWZpbmVkLFxuICAgICAgICAgIHNob3c6IG5vb3AsXG4gICAgICAgICAgaGlkZTogbm9vcCxcbiAgICAgICAgICBzZXRFbmFibGVkOiBub29wLFxuICAgICAgICAgIGlzRW5hYmxlZDogYWx3YXlzXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubW9kZSA9IGNyZWF0ZSQ0KHNlbGYpO1xuICAgICAgICBlZGl0b3JNYW5hZ2VyLmRpc3BhdGNoKCdTZXR1cEVkaXRvcicsIHsgZWRpdG9yOiB0aGlzIH0pO1xuICAgICAgICBjb25zdCBzZXR1cENhbGxiYWNrID0gZ2V0U2V0dXBDYWxsYmFjayhzZWxmKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oc2V0dXBDYWxsYmFjaykpIHtcbiAgICAgICAgICBzZXR1cENhbGxiYWNrLmNhbGwoc2VsZiwgc2VsZik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgcmVuZGVyKHRoaXMpO1xuICAgICAgfVxuICAgICAgZm9jdXMoc2tpcEZvY3VzKSB7XG4gICAgICAgIHRoaXMuZXhlY0NvbW1hbmQoJ21jZUZvY3VzJywgZmFsc2UsIHNraXBGb2N1cyk7XG4gICAgICB9XG4gICAgICBoYXNGb2N1cygpIHtcbiAgICAgICAgcmV0dXJuIGhhc0ZvY3VzKHRoaXMpO1xuICAgICAgfVxuICAgICAgdHJhbnNsYXRlKHRleHQpIHtcbiAgICAgICAgcmV0dXJuIEkxOG4udHJhbnNsYXRlKHRleHQpO1xuICAgICAgfVxuICAgICAgZ2V0UGFyYW0obmFtZSwgZGVmYXVsdFZhbCwgdHlwZSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBpZiAoIW9wdGlvbnMuaXNSZWdpc3RlcmVkKG5hbWUpKSB7XG4gICAgICAgICAgaWYgKGlzTm9uTnVsbGFibGUodHlwZSkpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucmVnaXN0ZXIobmFtZSwge1xuICAgICAgICAgICAgICBwcm9jZXNzb3I6IHR5cGUsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZmF1bHRWYWxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zLnJlZ2lzdGVyKG5hbWUsIHtcbiAgICAgICAgICAgICAgcHJvY2Vzc29yOiBhbHdheXMsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZmF1bHRWYWxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIW9wdGlvbnMuaXNTZXQobmFtZSkgJiYgIWlzVW5kZWZpbmVkKGRlZmF1bHRWYWwpID8gZGVmYXVsdFZhbCA6IG9wdGlvbnMuZ2V0KG5hbWUpO1xuICAgICAgfVxuICAgICAgaGFzUGx1Z2luKG5hbWUsIGxvYWRlZCkge1xuICAgICAgICBjb25zdCBoYXNQbHVnaW4gPSBjb250YWlucyQyKGdldFBsdWdpbnModGhpcyksIG5hbWUpO1xuICAgICAgICBpZiAoaGFzUGx1Z2luKSB7XG4gICAgICAgICAgcmV0dXJuIGxvYWRlZCA/IFBsdWdpbk1hbmFnZXIuZ2V0KG5hbWUpICE9PSB1bmRlZmluZWQgOiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbm9kZUNoYW5nZWQoYXJncykge1xuICAgICAgICB0aGlzLl9ub2RlQ2hhbmdlRGlzcGF0Y2hlci5ub2RlQ2hhbmdlZChhcmdzKTtcbiAgICAgIH1cbiAgICAgIGFkZENvbW1hbmQobmFtZSwgY2FsbGJhY2ssIHNjb3BlKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHMuYWRkQ29tbWFuZChuYW1lLCBjYWxsYmFjaywgc2NvcGUpO1xuICAgICAgfVxuICAgICAgYWRkUXVlcnlTdGF0ZUhhbmRsZXIobmFtZSwgY2FsbGJhY2ssIHNjb3BlKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHMuYWRkUXVlcnlTdGF0ZUhhbmRsZXIobmFtZSwgY2FsbGJhY2ssIHNjb3BlKTtcbiAgICAgIH1cbiAgICAgIGFkZFF1ZXJ5VmFsdWVIYW5kbGVyKG5hbWUsIGNhbGxiYWNrLCBzY29wZSkge1xuICAgICAgICB0aGlzLmVkaXRvckNvbW1hbmRzLmFkZFF1ZXJ5VmFsdWVIYW5kbGVyKG5hbWUsIGNhbGxiYWNrLCBzY29wZSk7XG4gICAgICB9XG4gICAgICBhZGRTaG9ydGN1dChwYXR0ZXJuLCBkZXNjLCBjbWRGdW5jLCBzY29wZSkge1xuICAgICAgICB0aGlzLnNob3J0Y3V0cy5hZGQocGF0dGVybiwgZGVzYywgY21kRnVuYywgc2NvcGUpO1xuICAgICAgfVxuICAgICAgZXhlY0NvbW1hbmQoY21kLCB1aSwgdmFsdWUsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yQ29tbWFuZHMuZXhlY0NvbW1hbmQoY21kLCB1aSwgdmFsdWUsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcXVlcnlDb21tYW5kU3RhdGUoY21kKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvckNvbW1hbmRzLnF1ZXJ5Q29tbWFuZFN0YXRlKGNtZCk7XG4gICAgICB9XG4gICAgICBxdWVyeUNvbW1hbmRWYWx1ZShjbWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yQ29tbWFuZHMucXVlcnlDb21tYW5kVmFsdWUoY21kKTtcbiAgICAgIH1cbiAgICAgIHF1ZXJ5Q29tbWFuZFN1cHBvcnRlZChjbWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yQ29tbWFuZHMucXVlcnlDb21tYW5kU3VwcG9ydGVkKGNtZCk7XG4gICAgICB9XG4gICAgICBzaG93KCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKHNlbGYuaGlkZGVuKSB7XG4gICAgICAgICAgc2VsZi5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICBpZiAoc2VsZi5pbmxpbmUpIHtcbiAgICAgICAgICAgIHNlbGYuZ2V0Qm9keSgpLmNvbnRlbnRFZGl0YWJsZSA9ICd0cnVlJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgRE9NJDEuc2hvdyhzZWxmLmdldENvbnRhaW5lcigpKTtcbiAgICAgICAgICAgIERPTSQxLmhpZGUoc2VsZi5pZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlbGYubG9hZCgpO1xuICAgICAgICAgIHNlbGYuZGlzcGF0Y2goJ3Nob3cnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaGlkZSgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmICghc2VsZi5oaWRkZW4pIHtcbiAgICAgICAgICBzZWxmLnNhdmUoKTtcbiAgICAgICAgICBpZiAoc2VsZi5pbmxpbmUpIHtcbiAgICAgICAgICAgIHNlbGYuZ2V0Qm9keSgpLmNvbnRlbnRFZGl0YWJsZSA9ICdmYWxzZSc7XG4gICAgICAgICAgICBpZiAoc2VsZiA9PT0gc2VsZi5lZGl0b3JNYW5hZ2VyLmZvY3VzZWRFZGl0b3IpIHtcbiAgICAgICAgICAgICAgc2VsZi5lZGl0b3JNYW5hZ2VyLmZvY3VzZWRFZGl0b3IgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBET00kMS5oaWRlKHNlbGYuZ2V0Q29udGFpbmVyKCkpO1xuICAgICAgICAgICAgRE9NJDEuc2V0U3R5bGUoc2VsZi5pZCwgJ2Rpc3BsYXknLCBzZWxmLm9yZ0Rpc3BsYXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxmLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgc2VsZi5kaXNwYXRjaCgnaGlkZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpc0hpZGRlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGlkZGVuO1xuICAgICAgfVxuICAgICAgc2V0UHJvZ3Jlc3NTdGF0ZShzdGF0ZSwgdGltZSkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoKCdQcm9ncmVzc1N0YXRlJywge1xuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIHRpbWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBsb2FkKGFyZ3MgPSB7fSkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgZWxtID0gc2VsZi5nZXRFbGVtZW50KCk7XG4gICAgICAgIGlmIChzZWxmLnJlbW92ZWQpIHtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsbSkge1xuICAgICAgICAgIGNvbnN0IGxvYWRBcmdzID0ge1xuICAgICAgICAgICAgLi4uYXJncyxcbiAgICAgICAgICAgIGxvYWQ6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gaXNUZXh0YXJlYU9ySW5wdXQoZWxtKSA/IGVsbS52YWx1ZSA6IGVsbS5pbm5lckhUTUw7XG4gICAgICAgICAgY29uc3QgaHRtbCA9IHNlbGYuc2V0Q29udGVudCh2YWx1ZSwgbG9hZEFyZ3MpO1xuICAgICAgICAgIGlmICghbG9hZEFyZ3Mubm9fZXZlbnRzKSB7XG4gICAgICAgICAgICBzZWxmLmRpc3BhdGNoKCdMb2FkQ29udGVudCcsIHtcbiAgICAgICAgICAgICAgLi4ubG9hZEFyZ3MsXG4gICAgICAgICAgICAgIGVsZW1lbnQ6IGVsbVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBodG1sO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2F2ZShhcmdzID0ge30pIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBlbG0gPSBzZWxmLmdldEVsZW1lbnQoKTtcbiAgICAgICAgaWYgKCFlbG0gfHwgIXNlbGYuaW5pdGlhbGl6ZWQgfHwgc2VsZi5yZW1vdmVkKSB7XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdldEFyZ3MgPSB7XG4gICAgICAgICAgLi4uYXJncyxcbiAgICAgICAgICBzYXZlOiB0cnVlLFxuICAgICAgICAgIGVsZW1lbnQ6IGVsbVxuICAgICAgICB9O1xuICAgICAgICBsZXQgaHRtbCA9IHNlbGYuZ2V0Q29udGVudChnZXRBcmdzKTtcbiAgICAgICAgY29uc3Qgc2F2ZUFyZ3MgPSB7XG4gICAgICAgICAgLi4uZ2V0QXJncyxcbiAgICAgICAgICBjb250ZW50OiBodG1sXG4gICAgICAgIH07XG4gICAgICAgIGlmICghc2F2ZUFyZ3Mubm9fZXZlbnRzKSB7XG4gICAgICAgICAgc2VsZi5kaXNwYXRjaCgnU2F2ZUNvbnRlbnQnLCBzYXZlQXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNhdmVBcmdzLmZvcm1hdCA9PT0gJ3JhdycpIHtcbiAgICAgICAgICBzZWxmLmRpc3BhdGNoKCdSYXdTYXZlQ29udGVudCcsIHNhdmVBcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBodG1sID0gc2F2ZUFyZ3MuY29udGVudDtcbiAgICAgICAgaWYgKCFpc1RleHRhcmVhT3JJbnB1dChlbG0pKSB7XG4gICAgICAgICAgaWYgKGFyZ3MuaXNfcmVtb3ZpbmcgfHwgIXNlbGYuaW5saW5lKSB7XG4gICAgICAgICAgICBlbG0uaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZm9ybSA9IERPTSQxLmdldFBhcmVudChzZWxmLmlkLCAnZm9ybScpO1xuICAgICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICBlYWNoJDEoZm9ybS5lbGVtZW50cywgZWxtID0+IHtcbiAgICAgICAgICAgICAgaWYgKGVsbS5uYW1lID09PSBzZWxmLmlkKSB7XG4gICAgICAgICAgICAgICAgZWxtLnZhbHVlID0gaHRtbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbG0udmFsdWUgPSBodG1sO1xuICAgICAgICB9XG4gICAgICAgIHNhdmVBcmdzLmVsZW1lbnQgPSBnZXRBcmdzLmVsZW1lbnQgPSBlbG0gPSBudWxsO1xuICAgICAgICBpZiAoc2F2ZUFyZ3Muc2V0X2RpcnR5ICE9PSBmYWxzZSkge1xuICAgICAgICAgIHNlbGYuc2V0RGlydHkoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBodG1sO1xuICAgICAgfVxuICAgICAgc2V0Q29udGVudChjb250ZW50LCBhcmdzKSB7XG4gICAgICAgIHJldHVybiBzZXRDb250ZW50KHRoaXMsIGNvbnRlbnQsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgZ2V0Q29udGVudChhcmdzKSB7XG4gICAgICAgIHJldHVybiBnZXRDb250ZW50KHRoaXMsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgaW5zZXJ0Q29udGVudChjb250ZW50LCBhcmdzKSB7XG4gICAgICAgIGlmIChhcmdzKSB7XG4gICAgICAgICAgY29udGVudCA9IGV4dGVuZCh7IGNvbnRlbnQgfSwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5leGVjQ29tbWFuZCgnbWNlSW5zZXJ0Q29udGVudCcsIGZhbHNlLCBjb250ZW50KTtcbiAgICAgIH1cbiAgICAgIHJlc2V0Q29udGVudChpbml0aWFsQ29udGVudCkge1xuICAgICAgICBpZiAoaW5pdGlhbENvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNldENvbnRlbnQodGhpcywgdGhpcy5zdGFydENvbnRlbnQsIHsgZm9ybWF0OiAncmF3JyB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRDb250ZW50KHRoaXMsIGluaXRpYWxDb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVuZG9NYW5hZ2VyLnJlc2V0KCk7XG4gICAgICAgIHRoaXMuc2V0RGlydHkoZmFsc2UpO1xuICAgICAgICB0aGlzLm5vZGVDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgICBpc0RpcnR5KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNOb3REaXJ0eTtcbiAgICAgIH1cbiAgICAgIHNldERpcnR5KHN0YXRlKSB7XG4gICAgICAgIGNvbnN0IG9sZFN0YXRlID0gIXRoaXMuaXNOb3REaXJ0eTtcbiAgICAgICAgdGhpcy5pc05vdERpcnR5ID0gIXN0YXRlO1xuICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUgIT09IG9sZFN0YXRlKSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaCgnZGlydHknKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZ2V0Q29udGFpbmVyKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKCFzZWxmLmNvbnRhaW5lcikge1xuICAgICAgICAgIHNlbGYuY29udGFpbmVyID0gc2VsZi5lZGl0b3JDb250YWluZXIgfHwgRE9NJDEuZ2V0KHNlbGYuaWQgKyAnX3BhcmVudCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmLmNvbnRhaW5lcjtcbiAgICAgIH1cbiAgICAgIGdldENvbnRlbnRBcmVhQ29udGFpbmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50QXJlYUNvbnRhaW5lcjtcbiAgICAgIH1cbiAgICAgIGdldEVsZW1lbnQoKSB7XG4gICAgICAgIGlmICghdGhpcy50YXJnZXRFbG0pIHtcbiAgICAgICAgICB0aGlzLnRhcmdldEVsbSA9IERPTSQxLmdldCh0aGlzLmlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50YXJnZXRFbG07XG4gICAgICB9XG4gICAgICBnZXRXaW4oKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBpZiAoIXNlbGYuY29udGVudFdpbmRvdykge1xuICAgICAgICAgIGNvbnN0IGVsbSA9IHNlbGYuaWZyYW1lRWxlbWVudDtcbiAgICAgICAgICBpZiAoZWxtKSB7XG4gICAgICAgICAgICBzZWxmLmNvbnRlbnRXaW5kb3cgPSBlbG0uY29udGVudFdpbmRvdztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGYuY29udGVudFdpbmRvdztcbiAgICAgIH1cbiAgICAgIGdldERvYygpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmICghc2VsZi5jb250ZW50RG9jdW1lbnQpIHtcbiAgICAgICAgICBjb25zdCB3aW4gPSBzZWxmLmdldFdpbigpO1xuICAgICAgICAgIGlmICh3aW4pIHtcbiAgICAgICAgICAgIHNlbGYuY29udGVudERvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZi5jb250ZW50RG9jdW1lbnQ7XG4gICAgICB9XG4gICAgICBnZXRCb2R5KCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmdldERvYygpO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gdGhpcy5ib2R5RWxlbWVudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZG9jID09PSBudWxsIHx8IGRvYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZG9jLmJvZHkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG51bGw7XG4gICAgICB9XG4gICAgICBjb252ZXJ0VVJMKHVybCwgbmFtZSwgZWxtKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzLCBnZXRPcHRpb24gPSBzZWxmLm9wdGlvbnMuZ2V0O1xuICAgICAgICBjb25zdCB1cmxDb252ZXJ0ZXJDYWxsYmFjayA9IGdldFVybENvbnZlcnRlckNhbGxiYWNrKHNlbGYpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih1cmxDb252ZXJ0ZXJDYWxsYmFjaykpIHtcbiAgICAgICAgICByZXR1cm4gdXJsQ29udmVydGVyQ2FsbGJhY2suY2FsbChzZWxmLCB1cmwsIGVsbSwgdHJ1ZSwgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFnZXRPcHRpb24oJ2NvbnZlcnRfdXJscycpIHx8IGVsbSA9PT0gJ2xpbmsnIHx8IGlzT2JqZWN0KGVsbSkgJiYgZWxtLm5vZGVOYW1lID09PSAnTElOSycgfHwgdXJsLmluZGV4T2YoJ2ZpbGU6JykgPT09IDAgfHwgdXJsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiB1cmw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldE9wdGlvbigncmVsYXRpdmVfdXJscycpKSB7XG4gICAgICAgICAgcmV0dXJuIHNlbGYuZG9jdW1lbnRCYXNlVVJJLnRvUmVsYXRpdmUodXJsKTtcbiAgICAgICAgfVxuICAgICAgICB1cmwgPSBzZWxmLmRvY3VtZW50QmFzZVVSSS50b0Fic29sdXRlKHVybCwgZ2V0T3B0aW9uKCdyZW1vdmVfc2NyaXB0X2hvc3QnKSk7XG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgICB9XG4gICAgICBhZGRWaXN1YWwoZWxtKSB7XG4gICAgICAgIGFkZFZpc3VhbCh0aGlzLCBlbG0pO1xuICAgICAgfVxuICAgICAgc2V0RWRpdGFibGVSb290KHN0YXRlKSB7XG4gICAgICAgIHNldEVkaXRhYmxlUm9vdCh0aGlzLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICBoYXNFZGl0YWJsZVJvb3QoKSB7XG4gICAgICAgIHJldHVybiBoYXNFZGl0YWJsZVJvb3QodGhpcyk7XG4gICAgICB9XG4gICAgICByZW1vdmUoKSB7XG4gICAgICAgIHJlbW92ZSQxKHRoaXMpO1xuICAgICAgfVxuICAgICAgZGVzdHJveShhdXRvbWF0aWMpIHtcbiAgICAgICAgZGVzdHJveSh0aGlzLCBhdXRvbWF0aWMpO1xuICAgICAgfVxuICAgICAgdXBsb2FkSW1hZ2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JVcGxvYWQudXBsb2FkSW1hZ2VzKCk7XG4gICAgICB9XG4gICAgICBfc2NhbkZvckltYWdlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yVXBsb2FkLnNjYW5Gb3JJbWFnZXMoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBET00gPSBET01VdGlscy5ET007XG4gICAgY29uc3QgZWFjaCA9IFRvb2xzLmVhY2g7XG4gICAgbGV0IGJvdW5kR2xvYmFsRXZlbnRzID0gZmFsc2U7XG4gICAgbGV0IGJlZm9yZVVubG9hZERlbGVnYXRlO1xuICAgIGxldCBlZGl0b3JzID0gW107XG4gICAgY29uc3QgZ2xvYmFsRXZlbnREZWxlZ2F0ZSA9IGUgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9IGUudHlwZTtcbiAgICAgIGVhY2goRWRpdG9yTWFuYWdlci5nZXQoKSwgZWRpdG9yID0+IHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ3Njcm9sbCc6XG4gICAgICAgICAgZWRpdG9yLmRpc3BhdGNoKCdTY3JvbGxXaW5kb3cnLCBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncmVzaXplJzpcbiAgICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ1Jlc2l6ZVdpbmRvdycsIGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHRvZ2dsZUdsb2JhbEV2ZW50cyA9IHN0YXRlID0+IHtcbiAgICAgIGlmIChzdGF0ZSAhPT0gYm91bmRHbG9iYWxFdmVudHMpIHtcbiAgICAgICAgY29uc3QgRE9NID0gRE9NVXRpbHMuRE9NO1xuICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICBET00uYmluZCh3aW5kb3csICdyZXNpemUnLCBnbG9iYWxFdmVudERlbGVnYXRlKTtcbiAgICAgICAgICBET00uYmluZCh3aW5kb3csICdzY3JvbGwnLCBnbG9iYWxFdmVudERlbGVnYXRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBET00udW5iaW5kKHdpbmRvdywgJ3Jlc2l6ZScsIGdsb2JhbEV2ZW50RGVsZWdhdGUpO1xuICAgICAgICAgIERPTS51bmJpbmQod2luZG93LCAnc2Nyb2xsJywgZ2xvYmFsRXZlbnREZWxlZ2F0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYm91bmRHbG9iYWxFdmVudHMgPSBzdGF0ZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZUVkaXRvckZyb21MaXN0ID0gdGFyZ2V0RWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IG9sZEVkaXRvcnMgPSBlZGl0b3JzO1xuICAgICAgZWRpdG9ycyA9IGZpbHRlciQ1KGVkaXRvcnMsIGVkaXRvciA9PiB7XG4gICAgICAgIHJldHVybiB0YXJnZXRFZGl0b3IgIT09IGVkaXRvcjtcbiAgICAgIH0pO1xuICAgICAgaWYgKEVkaXRvck1hbmFnZXIuYWN0aXZlRWRpdG9yID09PSB0YXJnZXRFZGl0b3IpIHtcbiAgICAgICAgRWRpdG9yTWFuYWdlci5hY3RpdmVFZGl0b3IgPSBlZGl0b3JzLmxlbmd0aCA+IDAgPyBlZGl0b3JzWzBdIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChFZGl0b3JNYW5hZ2VyLmZvY3VzZWRFZGl0b3IgPT09IHRhcmdldEVkaXRvcikge1xuICAgICAgICBFZGl0b3JNYW5hZ2VyLmZvY3VzZWRFZGl0b3IgPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9sZEVkaXRvcnMubGVuZ3RoICE9PSBlZGl0b3JzLmxlbmd0aDtcbiAgICB9O1xuICAgIGNvbnN0IHB1cmdlRGVzdHJveWVkRWRpdG9yID0gZWRpdG9yID0+IHtcbiAgICAgIGlmIChlZGl0b3IgJiYgZWRpdG9yLmluaXRpYWxpemVkICYmICEoZWRpdG9yLmdldENvbnRhaW5lcigpIHx8IGVkaXRvci5nZXRCb2R5KCkpLnBhcmVudE5vZGUpIHtcbiAgICAgICAgcmVtb3ZlRWRpdG9yRnJvbUxpc3QoZWRpdG9yKTtcbiAgICAgICAgZWRpdG9yLnVuYmluZEFsbE5hdGl2ZUV2ZW50cygpO1xuICAgICAgICBlZGl0b3IuZGVzdHJveSh0cnVlKTtcbiAgICAgICAgZWRpdG9yLnJlbW92ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNRdWlya3NNb2RlID0gZG9jdW1lbnQuY29tcGF0TW9kZSAhPT0gJ0NTUzFDb21wYXQnO1xuICAgIGNvbnN0IEVkaXRvck1hbmFnZXIgPSB7XG4gICAgICAuLi5PYnNlcnZhYmxlLFxuICAgICAgYmFzZVVSSTogbnVsbCxcbiAgICAgIGJhc2VVUkw6IG51bGwsXG4gICAgICBkZWZhdWx0T3B0aW9uczoge30sXG4gICAgICBkb2N1bWVudEJhc2VVUkw6IG51bGwsXG4gICAgICBzdWZmaXg6IG51bGwsXG4gICAgICBtYWpvclZlcnNpb246ICc2JyxcbiAgICAgIG1pbm9yVmVyc2lvbjogJzcuMCcsXG4gICAgICByZWxlYXNlRGF0ZTogJzIwMjMtMDgtMzAnLFxuICAgICAgaTE4bjogSTE4bixcbiAgICAgIGFjdGl2ZUVkaXRvcjogbnVsbCxcbiAgICAgIGZvY3VzZWRFZGl0b3I6IG51bGwsXG4gICAgICBzZXR1cCgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBiYXNlVVJMID0gJyc7XG4gICAgICAgIGxldCBzdWZmaXggPSAnJztcbiAgICAgICAgbGV0IGRvY3VtZW50QmFzZVVSTCA9IFVSSS5nZXREb2N1bWVudEJhc2VVcmwoZG9jdW1lbnQubG9jYXRpb24pO1xuICAgICAgICBpZiAoL15bXjpdKzpcXC9cXC9cXC8/W15cXC9dK1xcLy8udGVzdChkb2N1bWVudEJhc2VVUkwpKSB7XG4gICAgICAgICAgZG9jdW1lbnRCYXNlVVJMID0gZG9jdW1lbnRCYXNlVVJMLnJlcGxhY2UoL1tcXD8jXS4qJC8sICcnKS5yZXBsYWNlKC9bXFwvXFxcXF1bXlxcL10rJC8sICcnKTtcbiAgICAgICAgICBpZiAoIS9bXFwvXFxcXF0kLy50ZXN0KGRvY3VtZW50QmFzZVVSTCkpIHtcbiAgICAgICAgICAgIGRvY3VtZW50QmFzZVVSTCArPSAnLyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZUluaXQgPSB3aW5kb3cudGlueW1jZSB8fCB3aW5kb3cudGlueU1DRVByZUluaXQ7XG4gICAgICAgIGlmIChwcmVJbml0KSB7XG4gICAgICAgICAgYmFzZVVSTCA9IHByZUluaXQuYmFzZSB8fCBwcmVJbml0LmJhc2VVUkw7XG4gICAgICAgICAgc3VmZml4ID0gcHJlSW5pdC5zdWZmaXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IHNjcmlwdHNbaV0uc3JjIHx8ICcnO1xuICAgICAgICAgICAgaWYgKHNyYyA9PT0gJycpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzcmNTY3JpcHQgPSBzcmMuc3Vic3RyaW5nKHNyYy5sYXN0SW5kZXhPZignLycpKTtcbiAgICAgICAgICAgIGlmICgvdGlueW1jZShcXC5mdWxsfFxcLmpxdWVyeXwpKFxcLm1pbnxcXC5kZXZ8KVxcLmpzLy50ZXN0KHNyYykpIHtcbiAgICAgICAgICAgICAgaWYgKHNyY1NjcmlwdC5pbmRleE9mKCcubWluJykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgc3VmZml4ID0gJy5taW4nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJhc2VVUkwgPSBzcmMuc3Vic3RyaW5nKDAsIHNyYy5sYXN0SW5kZXhPZignLycpKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghYmFzZVVSTCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0KSB7XG4gICAgICAgICAgICBjb25zdCBzcmMgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYztcbiAgICAgICAgICAgIGlmIChzcmMuaW5kZXhPZignLm1pbicpICE9PSAtMSkge1xuICAgICAgICAgICAgICBzdWZmaXggPSAnLm1pbic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiYXNlVVJMID0gc3JjLnN1YnN0cmluZygwLCBzcmMubGFzdEluZGV4T2YoJy8nKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNlbGYuYmFzZVVSTCA9IG5ldyBVUkkoZG9jdW1lbnRCYXNlVVJMKS50b0Fic29sdXRlKGJhc2VVUkwpO1xuICAgICAgICBzZWxmLmRvY3VtZW50QmFzZVVSTCA9IGRvY3VtZW50QmFzZVVSTDtcbiAgICAgICAgc2VsZi5iYXNlVVJJID0gbmV3IFVSSShzZWxmLmJhc2VVUkwpO1xuICAgICAgICBzZWxmLnN1ZmZpeCA9IHN1ZmZpeDtcbiAgICAgICAgc2V0dXAkdihzZWxmKTtcbiAgICAgIH0sXG4gICAgICBvdmVycmlkZURlZmF1bHRzKGRlZmF1bHRPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGJhc2VVcmwgPSBkZWZhdWx0T3B0aW9ucy5iYXNlX3VybDtcbiAgICAgICAgaWYgKGJhc2VVcmwpIHtcbiAgICAgICAgICB0aGlzLl9zZXRCYXNlVXJsKGJhc2VVcmwpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1ZmZpeCA9IGRlZmF1bHRPcHRpb25zLnN1ZmZpeDtcbiAgICAgICAgaWYgKHN1ZmZpeCkge1xuICAgICAgICAgIHRoaXMuc3VmZml4ID0gc3VmZml4O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgICAgICAgY29uc3QgcGx1Z2luQmFzZVVybHMgPSBkZWZhdWx0T3B0aW9ucy5wbHVnaW5fYmFzZV91cmxzO1xuICAgICAgICBpZiAocGx1Z2luQmFzZVVybHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGVhY2gkZChwbHVnaW5CYXNlVXJscywgKHBsdWdpbkJhc2VVcmwsIHBsdWdpbk5hbWUpID0+IHtcbiAgICAgICAgICAgIEFkZE9uTWFuYWdlci5QbHVnaW5NYW5hZ2VyLnVybHNbcGx1Z2luTmFtZV0gPSBwbHVnaW5CYXNlVXJsO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaW5pdChvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICBjb25zdCBpbnZhbGlkSW5saW5lVGFyZ2V0cyA9IFRvb2xzLm1ha2VNYXAoJ2FyZWEgYmFzZSBiYXNlZm9udCBiciBjb2wgZnJhbWUgaHIgaW1nIGlucHV0IGlzaW5kZXggbGluayBtZXRhIHBhcmFtIGVtYmVkIHNvdXJjZSB3YnIgdHJhY2sgJyArICdjb2xncm91cCBvcHRpb24gdGFibGUgdGJvZHkgdGZvb3QgdGhlYWQgdHIgdGggdGQgc2NyaXB0IG5vc2NyaXB0IHN0eWxlIHRleHRhcmVhIHZpZGVvIGF1ZGlvIGlmcmFtZSBvYmplY3QgbWVudScsICcgJyk7XG4gICAgICAgIGNvbnN0IGlzSW52YWxpZElubGluZVRhcmdldCA9IChvcHRpb25zLCBlbG0pID0+IG9wdGlvbnMuaW5saW5lICYmIGVsbS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgaW4gaW52YWxpZElubGluZVRhcmdldHM7XG4gICAgICAgIGNvbnN0IGNyZWF0ZUlkID0gZWxtID0+IHtcbiAgICAgICAgICBsZXQgaWQgPSBlbG0uaWQ7XG4gICAgICAgICAgaWYgKCFpZCkge1xuICAgICAgICAgICAgaWQgPSBnZXQkYShlbG0sICduYW1lJykuZmlsdGVyKG5hbWUgPT4gIURPTS5nZXQobmFtZSkpLmdldE9yVGh1bmsoRE9NLnVuaXF1ZUlkKTtcbiAgICAgICAgICAgIGVsbS5zZXRBdHRyaWJ1dGUoJ2lkJywgaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGV4ZWNDYWxsYmFjayA9IG5hbWUgPT4ge1xuICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gb3B0aW9uc1tuYW1lXTtcbiAgICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjYWxsYmFjay5hcHBseShzZWxmLCBbXSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZpbmRUYXJnZXRzID0gb3B0aW9ucyA9PiB7XG4gICAgICAgICAgaWYgKEVudi5icm93c2VyLmlzSUUoKSB8fCBFbnYuYnJvd3Nlci5pc0VkZ2UoKSkge1xuICAgICAgICAgICAgaW5pdEVycm9yKCdUaW55TUNFIGRvZXMgbm90IHN1cHBvcnQgdGhlIGJyb3dzZXIgeW91IGFyZSB1c2luZy4gRm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQnICsgJyBicm93c2VycyBwbGVhc2Ugc2VlOiBodHRwczovL3d3dy50aW55LmNsb3VkL2RvY3MvdGlueW1jZS82L3N1cHBvcnQvI3N1cHBvcnRlZHdlYmJyb3dzZXJzJyk7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1F1aXJrc01vZGUpIHtcbiAgICAgICAgICAgIGluaXRFcnJvcignRmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIGVkaXRvciBhcyB0aGUgZG9jdW1lbnQgaXMgbm90IGluIHN0YW5kYXJkcyBtb2RlLiAnICsgJ1RpbnlNQ0UgcmVxdWlyZXMgc3RhbmRhcmRzIG1vZGUuJyk7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmluZyhvcHRpb25zLnNlbGVjdG9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIERPTS5zZWxlY3Qob3B0aW9ucy5zZWxlY3Rvcik7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc05vbk51bGxhYmxlKG9wdGlvbnMudGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIFtvcHRpb25zLnRhcmdldF07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGxldCBwcm92aWRlUmVzdWx0cyA9IGVkaXRvcnMgPT4ge1xuICAgICAgICAgIHJlc3VsdCA9IGVkaXRvcnM7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGluaXRFZGl0b3JzID0gKCkgPT4ge1xuICAgICAgICAgIGxldCBpbml0Q291bnQgPSAwO1xuICAgICAgICAgIGNvbnN0IGVkaXRvcnMgPSBbXTtcbiAgICAgICAgICBsZXQgdGFyZ2V0cztcbiAgICAgICAgICBjb25zdCBjcmVhdGVFZGl0b3IgPSAoaWQsIG9wdGlvbnMsIHRhcmdldEVsbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWRpdG9yID0gbmV3IEVkaXRvcihpZCwgb3B0aW9ucywgc2VsZik7XG4gICAgICAgICAgICBlZGl0b3JzLnB1c2goZWRpdG9yKTtcbiAgICAgICAgICAgIGVkaXRvci5vbignaW5pdCcsICgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCsraW5pdENvdW50ID09PSB0YXJnZXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHByb3ZpZGVSZXN1bHRzKGVkaXRvcnMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVkaXRvci50YXJnZXRFbG0gPSBlZGl0b3IudGFyZ2V0RWxtIHx8IHRhcmdldEVsbTtcbiAgICAgICAgICAgIGVkaXRvci5yZW5kZXIoKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIERPTS51bmJpbmQod2luZG93LCAncmVhZHknLCBpbml0RWRpdG9ycyk7XG4gICAgICAgICAgZXhlY0NhbGxiYWNrKCdvbnBhZ2Vsb2FkJyk7XG4gICAgICAgICAgdGFyZ2V0cyA9IHVuaXF1ZSQxKGZpbmRUYXJnZXRzKG9wdGlvbnMpKTtcbiAgICAgICAgICBUb29scy5lYWNoKHRhcmdldHMsIGVsbSA9PiB7XG4gICAgICAgICAgICBwdXJnZURlc3Ryb3llZEVkaXRvcihzZWxmLmdldChlbG0uaWQpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0YXJnZXRzID0gVG9vbHMuZ3JlcCh0YXJnZXRzLCBlbG0gPT4ge1xuICAgICAgICAgICAgcmV0dXJuICFzZWxmLmdldChlbG0uaWQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICh0YXJnZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcHJvdmlkZVJlc3VsdHMoW10pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlYWNoKHRhcmdldHMsIGVsbSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpc0ludmFsaWRJbmxpbmVUYXJnZXQob3B0aW9ucywgZWxtKSkge1xuICAgICAgICAgICAgICAgIGluaXRFcnJvcignQ291bGQgbm90IGluaXRpYWxpemUgaW5saW5lIGVkaXRvciBvbiBpbnZhbGlkIGlubGluZSB0YXJnZXQgZWxlbWVudCcsIGVsbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3JlYXRlRWRpdG9yKGNyZWF0ZUlkKGVsbSksIG9wdGlvbnMsIGVsbSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgRE9NLmJpbmQod2luZG93LCAncmVhZHknLCBpbml0RWRpdG9ycyk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb3ZpZGVSZXN1bHRzID0gZWRpdG9ycyA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoZWRpdG9ycyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZ2V0KGlkKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGVkaXRvcnMuc2xpY2UoMCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcoaWQpKSB7XG4gICAgICAgICAgcmV0dXJuIGZpbmQkMihlZGl0b3JzLCBlZGl0b3IgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGVkaXRvci5pZCA9PT0gaWQ7XG4gICAgICAgICAgfSkuZ2V0T3IobnVsbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaWQpKSB7XG4gICAgICAgICAgcmV0dXJuIGVkaXRvcnNbaWRdID8gZWRpdG9yc1tpZF0gOiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYWRkKGVkaXRvcikge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgZXhpc3RpbmdFZGl0b3IgPSBzZWxmLmdldChlZGl0b3IuaWQpO1xuICAgICAgICBpZiAoZXhpc3RpbmdFZGl0b3IgPT09IGVkaXRvcikge1xuICAgICAgICAgIHJldHVybiBlZGl0b3I7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4aXN0aW5nRWRpdG9yID09PSBudWxsKSB7XG4gICAgICAgICAgZWRpdG9ycy5wdXNoKGVkaXRvcik7XG4gICAgICAgIH1cbiAgICAgICAgdG9nZ2xlR2xvYmFsRXZlbnRzKHRydWUpO1xuICAgICAgICBzZWxmLmFjdGl2ZUVkaXRvciA9IGVkaXRvcjtcbiAgICAgICAgc2VsZi5kaXNwYXRjaCgnQWRkRWRpdG9yJywgeyBlZGl0b3IgfSk7XG4gICAgICAgIGlmICghYmVmb3JlVW5sb2FkRGVsZWdhdGUpIHtcbiAgICAgICAgICBiZWZvcmVVbmxvYWREZWxlZ2F0ZSA9IGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBzZWxmLmRpc3BhdGNoKCdCZWZvcmVVbmxvYWQnKTtcbiAgICAgICAgICAgIGlmIChldmVudC5yZXR1cm5WYWx1ZSkge1xuICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIGUucmV0dXJuVmFsdWUgPSBldmVudC5yZXR1cm5WYWx1ZTtcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnJldHVyblZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGJlZm9yZVVubG9hZERlbGVnYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWRpdG9yO1xuICAgICAgfSxcbiAgICAgIGNyZWF0ZUVkaXRvcihpZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGQobmV3IEVkaXRvcihpZCwgb3B0aW9ucywgdGhpcykpO1xuICAgICAgfSxcbiAgICAgIHJlbW92ZShzZWxlY3Rvcikge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IGVkaXRvcjtcbiAgICAgICAgaWYgKCFzZWxlY3Rvcikge1xuICAgICAgICAgIGZvciAobGV0IGkgPSBlZGl0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBzZWxmLnJlbW92ZShlZGl0b3JzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1N0cmluZyhzZWxlY3RvcikpIHtcbiAgICAgICAgICBlYWNoKERPTS5zZWxlY3Qoc2VsZWN0b3IpLCBlbG0gPT4ge1xuICAgICAgICAgICAgZWRpdG9yID0gc2VsZi5nZXQoZWxtLmlkKTtcbiAgICAgICAgICAgIGlmIChlZGl0b3IpIHtcbiAgICAgICAgICAgICAgc2VsZi5yZW1vdmUoZWRpdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yID0gc2VsZWN0b3I7XG4gICAgICAgIGlmIChpc051bGwoc2VsZi5nZXQoZWRpdG9yLmlkKSkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVtb3ZlRWRpdG9yRnJvbUxpc3QoZWRpdG9yKSkge1xuICAgICAgICAgIHNlbGYuZGlzcGF0Y2goJ1JlbW92ZUVkaXRvcicsIHsgZWRpdG9yIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlZGl0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBiZWZvcmVVbmxvYWREZWxlZ2F0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yLnJlbW92ZSgpO1xuICAgICAgICB0b2dnbGVHbG9iYWxFdmVudHMoZWRpdG9ycy5sZW5ndGggPiAwKTtcbiAgICAgICAgcmV0dXJuIGVkaXRvcjtcbiAgICAgIH0sXG4gICAgICBleGVjQ29tbWFuZChjbWQsIHVpLCB2YWx1ZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBlZGl0b3JJZCA9IGlzT2JqZWN0KHZhbHVlKSA/IChfYSA9IHZhbHVlLmlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB2YWx1ZS5pbmRleCA6IHZhbHVlO1xuICAgICAgICBzd2l0Y2ggKGNtZCkge1xuICAgICAgICBjYXNlICdtY2VBZGRFZGl0b3InOiB7XG4gICAgICAgICAgICBpZiAoIXNlbGYuZ2V0KGVkaXRvcklkKSkge1xuICAgICAgICAgICAgICBjb25zdCBlZGl0b3JPcHRpb25zID0gdmFsdWUub3B0aW9ucztcbiAgICAgICAgICAgICAgbmV3IEVkaXRvcihlZGl0b3JJZCwgZWRpdG9yT3B0aW9ucywgc2VsZikucmVuZGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ21jZVJlbW92ZUVkaXRvcic6IHtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvciA9IHNlbGYuZ2V0KGVkaXRvcklkKTtcbiAgICAgICAgICAgIGlmIChlZGl0b3IpIHtcbiAgICAgICAgICAgICAgZWRpdG9yLnJlbW92ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICdtY2VUb2dnbGVFZGl0b3InOiB7XG4gICAgICAgICAgICBjb25zdCBlZGl0b3IgPSBzZWxmLmdldChlZGl0b3JJZCk7XG4gICAgICAgICAgICBpZiAoIWVkaXRvcikge1xuICAgICAgICAgICAgICBzZWxmLmV4ZWNDb21tYW5kKCdtY2VBZGRFZGl0b3InLCBmYWxzZSwgdmFsdWUpO1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlZGl0b3IuaXNIaWRkZW4oKSkge1xuICAgICAgICAgICAgICBlZGl0b3Iuc2hvdygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZWRpdG9yLmhpZGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5hY3RpdmVFZGl0b3IpIHtcbiAgICAgICAgICByZXR1cm4gc2VsZi5hY3RpdmVFZGl0b3IuZXhlY0NvbW1hbmQoY21kLCB1aSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sXG4gICAgICB0cmlnZ2VyU2F2ZTogKCkgPT4ge1xuICAgICAgICBlYWNoKGVkaXRvcnMsIGVkaXRvciA9PiB7XG4gICAgICAgICAgZWRpdG9yLnNhdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgYWRkSTE4bjogKGNvZGUsIGl0ZW1zKSA9PiB7XG4gICAgICAgIEkxOG4uYWRkKGNvZGUsIGl0ZW1zKTtcbiAgICAgIH0sXG4gICAgICB0cmFuc2xhdGU6IHRleHQgPT4ge1xuICAgICAgICByZXR1cm4gSTE4bi50cmFuc2xhdGUodGV4dCk7XG4gICAgICB9LFxuICAgICAgc2V0QWN0aXZlKGVkaXRvcikge1xuICAgICAgICBjb25zdCBhY3RpdmVFZGl0b3IgPSB0aGlzLmFjdGl2ZUVkaXRvcjtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlRWRpdG9yICE9PSBlZGl0b3IpIHtcbiAgICAgICAgICBpZiAoYWN0aXZlRWRpdG9yKSB7XG4gICAgICAgICAgICBhY3RpdmVFZGl0b3IuZGlzcGF0Y2goJ2RlYWN0aXZhdGUnLCB7IHJlbGF0ZWRUYXJnZXQ6IGVkaXRvciB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWRpdG9yLmRpc3BhdGNoKCdhY3RpdmF0ZScsIHsgcmVsYXRlZFRhcmdldDogYWN0aXZlRWRpdG9yIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aXZlRWRpdG9yID0gZWRpdG9yO1xuICAgICAgfSxcbiAgICAgIF9zZXRCYXNlVXJsKGJhc2VVcmwpIHtcbiAgICAgICAgdGhpcy5iYXNlVVJMID0gbmV3IFVSSSh0aGlzLmRvY3VtZW50QmFzZVVSTCkudG9BYnNvbHV0ZShiYXNlVXJsLnJlcGxhY2UoL1xcLyskLywgJycpKTtcbiAgICAgICAgdGhpcy5iYXNlVVJJID0gbmV3IFVSSSh0aGlzLmJhc2VVUkwpO1xuICAgICAgfVxuICAgIH07XG4gICAgRWRpdG9yTWFuYWdlci5zZXR1cCgpO1xuXG4gICAgY29uc3Qgc2V0dXAgPSAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhVmFsdWUgPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBGYWtlQ2xpcGJvYXJkSXRlbSA9IGl0ZW1zID0+ICh7XG4gICAgICAgIGl0ZW1zLFxuICAgICAgICB0eXBlczoga2V5cyhpdGVtcyksXG4gICAgICAgIGdldFR5cGU6IHR5cGUgPT4gZ2V0JGEoaXRlbXMsIHR5cGUpLmdldE9yVW5kZWZpbmVkKClcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgd3JpdGUgPSBkYXRhID0+IHtcbiAgICAgICAgZGF0YVZhbHVlLnNldChkYXRhKTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZWFkID0gKCkgPT4gZGF0YVZhbHVlLmdldCgpLmdldE9yVW5kZWZpbmVkKCk7XG4gICAgICBjb25zdCBjbGVhciA9IGRhdGFWYWx1ZS5jbGVhcjtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIEZha2VDbGlwYm9hcmRJdGVtLFxuICAgICAgICB3cml0ZSxcbiAgICAgICAgcmVhZCxcbiAgICAgICAgY2xlYXJcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBGYWtlQ2xpcGJvYXJkID0gc2V0dXAoKTtcblxuICAgIGNvbnN0IG1pbiA9IE1hdGgubWluLCBtYXggPSBNYXRoLm1heCwgcm91bmQgPSBNYXRoLnJvdW5kO1xuICAgIGNvbnN0IHJlbGF0aXZlUG9zaXRpb24gPSAocmVjdCwgdGFyZ2V0UmVjdCwgcmVsKSA9PiB7XG4gICAgICBsZXQgeCA9IHRhcmdldFJlY3QueDtcbiAgICAgIGxldCB5ID0gdGFyZ2V0UmVjdC55O1xuICAgICAgY29uc3QgdyA9IHJlY3QudztcbiAgICAgIGNvbnN0IGggPSByZWN0Lmg7XG4gICAgICBjb25zdCB0YXJnZXRXID0gdGFyZ2V0UmVjdC53O1xuICAgICAgY29uc3QgdGFyZ2V0SCA9IHRhcmdldFJlY3QuaDtcbiAgICAgIGNvbnN0IHJlbENoYXJzID0gKHJlbCB8fCAnJykuc3BsaXQoJycpO1xuICAgICAgaWYgKHJlbENoYXJzWzBdID09PSAnYicpIHtcbiAgICAgICAgeSArPSB0YXJnZXRIO1xuICAgICAgfVxuICAgICAgaWYgKHJlbENoYXJzWzFdID09PSAncicpIHtcbiAgICAgICAgeCArPSB0YXJnZXRXO1xuICAgICAgfVxuICAgICAgaWYgKHJlbENoYXJzWzBdID09PSAnYycpIHtcbiAgICAgICAgeSArPSByb3VuZCh0YXJnZXRIIC8gMik7XG4gICAgICB9XG4gICAgICBpZiAocmVsQ2hhcnNbMV0gPT09ICdjJykge1xuICAgICAgICB4ICs9IHJvdW5kKHRhcmdldFcgLyAyKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWxDaGFyc1szXSA9PT0gJ2InKSB7XG4gICAgICAgIHkgLT0gaDtcbiAgICAgIH1cbiAgICAgIGlmIChyZWxDaGFyc1s0XSA9PT0gJ3InKSB7XG4gICAgICAgIHggLT0gdztcbiAgICAgIH1cbiAgICAgIGlmIChyZWxDaGFyc1szXSA9PT0gJ2MnKSB7XG4gICAgICAgIHkgLT0gcm91bmQoaCAvIDIpO1xuICAgICAgfVxuICAgICAgaWYgKHJlbENoYXJzWzRdID09PSAnYycpIHtcbiAgICAgICAgeCAtPSByb3VuZCh3IC8gMik7XG4gICAgICB9XG4gICAgICByZXR1cm4gY3JlYXRlJDIoeCwgeSwgdywgaCk7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kQmVzdFJlbGF0aXZlUG9zaXRpb24gPSAocmVjdCwgdGFyZ2V0UmVjdCwgY29uc3RyYWluUmVjdCwgcmVscykgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBvcyA9IHJlbGF0aXZlUG9zaXRpb24ocmVjdCwgdGFyZ2V0UmVjdCwgcmVsc1tpXSk7XG4gICAgICAgIGlmIChwb3MueCA+PSBjb25zdHJhaW5SZWN0LnggJiYgcG9zLnggKyBwb3MudyA8PSBjb25zdHJhaW5SZWN0LncgKyBjb25zdHJhaW5SZWN0LnggJiYgcG9zLnkgPj0gY29uc3RyYWluUmVjdC55ICYmIHBvcy55ICsgcG9zLmggPD0gY29uc3RyYWluUmVjdC5oICsgY29uc3RyYWluUmVjdC55KSB7XG4gICAgICAgICAgcmV0dXJuIHJlbHNbaV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgY29uc3QgaW5mbGF0ZSA9IChyZWN0LCB3LCBoKSA9PiB7XG4gICAgICByZXR1cm4gY3JlYXRlJDIocmVjdC54IC0gdywgcmVjdC55IC0gaCwgcmVjdC53ICsgdyAqIDIsIHJlY3QuaCArIGggKiAyKTtcbiAgICB9O1xuICAgIGNvbnN0IGludGVyc2VjdCA9IChyZWN0LCBjcm9wUmVjdCkgPT4ge1xuICAgICAgY29uc3QgeDEgPSBtYXgocmVjdC54LCBjcm9wUmVjdC54KTtcbiAgICAgIGNvbnN0IHkxID0gbWF4KHJlY3QueSwgY3JvcFJlY3QueSk7XG4gICAgICBjb25zdCB4MiA9IG1pbihyZWN0LnggKyByZWN0LncsIGNyb3BSZWN0LnggKyBjcm9wUmVjdC53KTtcbiAgICAgIGNvbnN0IHkyID0gbWluKHJlY3QueSArIHJlY3QuaCwgY3JvcFJlY3QueSArIGNyb3BSZWN0LmgpO1xuICAgICAgaWYgKHgyIC0geDEgPCAwIHx8IHkyIC0geTEgPCAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWF0ZSQyKHgxLCB5MSwgeDIgLSB4MSwgeTIgLSB5MSk7XG4gICAgfTtcbiAgICBjb25zdCBjbGFtcCA9IChyZWN0LCBjbGFtcFJlY3QsIGZpeGVkU2l6ZSkgPT4ge1xuICAgICAgbGV0IHgxID0gcmVjdC54O1xuICAgICAgbGV0IHkxID0gcmVjdC55O1xuICAgICAgbGV0IHgyID0gcmVjdC54ICsgcmVjdC53O1xuICAgICAgbGV0IHkyID0gcmVjdC55ICsgcmVjdC5oO1xuICAgICAgY29uc3QgY3gyID0gY2xhbXBSZWN0LnggKyBjbGFtcFJlY3QudztcbiAgICAgIGNvbnN0IGN5MiA9IGNsYW1wUmVjdC55ICsgY2xhbXBSZWN0Lmg7XG4gICAgICBjb25zdCB1bmRlcmZsb3dYMSA9IG1heCgwLCBjbGFtcFJlY3QueCAtIHgxKTtcbiAgICAgIGNvbnN0IHVuZGVyZmxvd1kxID0gbWF4KDAsIGNsYW1wUmVjdC55IC0geTEpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3dYMiA9IG1heCgwLCB4MiAtIGN4Mik7XG4gICAgICBjb25zdCBvdmVyZmxvd1kyID0gbWF4KDAsIHkyIC0gY3kyKTtcbiAgICAgIHgxICs9IHVuZGVyZmxvd1gxO1xuICAgICAgeTEgKz0gdW5kZXJmbG93WTE7XG4gICAgICBpZiAoZml4ZWRTaXplKSB7XG4gICAgICAgIHgyICs9IHVuZGVyZmxvd1gxO1xuICAgICAgICB5MiArPSB1bmRlcmZsb3dZMTtcbiAgICAgICAgeDEgLT0gb3ZlcmZsb3dYMjtcbiAgICAgICAgeTEgLT0gb3ZlcmZsb3dZMjtcbiAgICAgIH1cbiAgICAgIHgyIC09IG92ZXJmbG93WDI7XG4gICAgICB5MiAtPSBvdmVyZmxvd1kyO1xuICAgICAgcmV0dXJuIGNyZWF0ZSQyKHgxLCB5MSwgeDIgLSB4MSwgeTIgLSB5MSk7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGUkMiA9ICh4LCB5LCB3LCBoKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICB3LFxuICAgICAgICBoXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZnJvbUNsaWVudFJlY3QgPSBjbGllbnRSZWN0ID0+IHtcbiAgICAgIHJldHVybiBjcmVhdGUkMihjbGllbnRSZWN0LmxlZnQsIGNsaWVudFJlY3QudG9wLCBjbGllbnRSZWN0LndpZHRoLCBjbGllbnRSZWN0LmhlaWdodCk7XG4gICAgfTtcbiAgICBjb25zdCBSZWN0ID0ge1xuICAgICAgaW5mbGF0ZSxcbiAgICAgIHJlbGF0aXZlUG9zaXRpb24sXG4gICAgICBmaW5kQmVzdFJlbGF0aXZlUG9zaXRpb24sXG4gICAgICBpbnRlcnNlY3QsXG4gICAgICBjbGFtcCxcbiAgICAgIGNyZWF0ZTogY3JlYXRlJDIsXG4gICAgICBmcm9tQ2xpZW50UmVjdFxuICAgIH07XG5cbiAgICBjb25zdCBhd2FpdGVyID0gKHJlc29sdmVDYiwgcmVqZWN0Q2IsIHRpbWVvdXQgPSAxMDAwKSA9PiB7XG4gICAgICBsZXQgZG9uZSA9IGZhbHNlO1xuICAgICAgbGV0IHRpbWVyID0gbnVsbDtcbiAgICAgIGNvbnN0IGNvbXBsZXRlID0gY29tcGxldGVyID0+ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIGlmICh0aW1lciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29tcGxldGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzb2x2ZSA9IGNvbXBsZXRlKHJlc29sdmVDYik7XG4gICAgICBjb25zdCByZWplY3QgPSBjb21wbGV0ZShyZWplY3RDYik7XG4gICAgICBjb25zdCBzdGFydCA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmICghZG9uZSAmJiB0aW1lciA9PT0gbnVsbCkge1xuICAgICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QuYXBwbHkobnVsbCwgYXJncyksIHRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIHJlc29sdmUsXG4gICAgICAgIHJlamVjdFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZSQxID0gKCkgPT4ge1xuICAgICAgY29uc3QgdGFza3MgPSB7fTtcbiAgICAgIGNvbnN0IHJlc3VsdEZucyA9IHt9O1xuICAgICAgY29uc3QgbG9hZCA9IChpZCwgdXJsKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvYWRFcnJNc2cgPSBgU2NyaXB0IGF0IFVSTCBcIiR7IHVybCB9XCIgZmFpbGVkIHRvIGxvYWRgO1xuICAgICAgICBjb25zdCBydW5FcnJNc2cgPSBgU2NyaXB0IGF0IFVSTCBcIiR7IHVybCB9XCIgZGlkIG5vdCBjYWxsIFxcYHRpbnltY2UuUmVzb3VyY2UuYWRkKCckeyBpZCB9JywgZGF0YSlcXGAgd2l0aGluIDEgc2Vjb25kYDtcbiAgICAgICAgaWYgKHRhc2tzW2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRhc2tzW2lkXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB0YXNrID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd2FpdGVyID0gYXdhaXRlcihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgcmVzdWx0Rm5zW2lkXSA9IHdhaXRlci5yZXNvbHZlO1xuICAgICAgICAgICAgU2NyaXB0TG9hZGVyLlNjcmlwdExvYWRlci5sb2FkU2NyaXB0KHVybCkudGhlbigoKSA9PiB3YWl0ZXIuc3RhcnQocnVuRXJyTXNnKSwgKCkgPT4gd2FpdGVyLnJlamVjdChsb2FkRXJyTXNnKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGFza3NbaWRdID0gdGFzaztcbiAgICAgICAgICByZXR1cm4gdGFzaztcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkZCA9IChpZCwgZGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0Rm5zW2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVzdWx0Rm5zW2lkXShkYXRhKTtcbiAgICAgICAgICBkZWxldGUgcmVzdWx0Rm5zW2lkXTtcbiAgICAgICAgfVxuICAgICAgICB0YXNrc1tpZF0gPSBQcm9taXNlLnJlc29sdmUoZGF0YSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdW5sb2FkID0gaWQgPT4ge1xuICAgICAgICBkZWxldGUgdGFza3NbaWRdO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxvYWQsXG4gICAgICAgIGFkZCxcbiAgICAgICAgdW5sb2FkXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgUmVzb3VyY2UgPSBjcmVhdGUkMSgpO1xuXG4gICAgY29uc3QgY3JlYXRlID0gKCkgPT4gKCgpID0+IHtcbiAgICAgIGxldCBkYXRhID0ge307XG4gICAgICBsZXQga2V5cyA9IFtdO1xuICAgICAgY29uc3Qgc3RvcmFnZSA9IHtcbiAgICAgICAgZ2V0SXRlbToga2V5ID0+IHtcbiAgICAgICAgICBjb25zdCBpdGVtID0gZGF0YVtrZXldO1xuICAgICAgICAgIHJldHVybiBpdGVtID8gaXRlbSA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIHNldEl0ZW06IChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgZGF0YVtrZXldID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAga2V5OiBpbmRleCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGtleXNbaW5kZXhdO1xuICAgICAgICB9LFxuICAgICAgICByZW1vdmVJdGVtOiBrZXkgPT4ge1xuICAgICAgICAgIGtleXMgPSBrZXlzLmZpbHRlcihrID0+IGsgPT09IGtleSk7XG4gICAgICAgICAgZGVsZXRlIGRhdGFba2V5XTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcbiAgICAgICAgICBrZXlzID0gW107XG4gICAgICAgICAgZGF0YSA9IHt9O1xuICAgICAgICB9LFxuICAgICAgICBsZW5ndGg6IDBcbiAgICAgIH07XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3RvcmFnZSwgJ2xlbmd0aCcsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiBrZXlzLmxlbmd0aCxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHN0b3JhZ2U7XG4gICAgfSkoKTtcblxuICAgIGxldCBsb2NhbFN0b3JhZ2U7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRlc3QgPSAnX19zdG9yYWdlX3Rlc3RfXyc7XG4gICAgICBsb2NhbFN0b3JhZ2UgPSB3aW5kb3cubG9jYWxTdG9yYWdlO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGVzdCwgdGVzdCk7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0ZXN0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2NhbFN0b3JhZ2UgPSBjcmVhdGUoKTtcbiAgICB9XG4gICAgdmFyIExvY2FsU3RvcmFnZSA9IGxvY2FsU3RvcmFnZTtcblxuICAgIGNvbnN0IHB1YmxpY0FwaSA9IHtcbiAgICAgIGdlb206IHsgUmVjdCB9LFxuICAgICAgdXRpbDoge1xuICAgICAgICBEZWxheSxcbiAgICAgICAgVG9vbHMsXG4gICAgICAgIFZLLFxuICAgICAgICBVUkksXG4gICAgICAgIEV2ZW50RGlzcGF0Y2hlcixcbiAgICAgICAgT2JzZXJ2YWJsZSxcbiAgICAgICAgSTE4bixcbiAgICAgICAgTG9jYWxTdG9yYWdlLFxuICAgICAgICBJbWFnZVVwbG9hZGVyXG4gICAgICB9LFxuICAgICAgZG9tOiB7XG4gICAgICAgIEV2ZW50VXRpbHMsXG4gICAgICAgIFRyZWVXYWxrZXI6IERvbVRyZWVXYWxrZXIsXG4gICAgICAgIFRleHRTZWVrZXIsXG4gICAgICAgIERPTVV0aWxzLFxuICAgICAgICBTY3JpcHRMb2FkZXIsXG4gICAgICAgIFJhbmdlVXRpbHMsXG4gICAgICAgIFNlcmlhbGl6ZXI6IERvbVNlcmlhbGl6ZXIsXG4gICAgICAgIFN0eWxlU2hlZXRMb2FkZXIsXG4gICAgICAgIENvbnRyb2xTZWxlY3Rpb24sXG4gICAgICAgIEJvb2ttYXJrTWFuYWdlcixcbiAgICAgICAgU2VsZWN0aW9uOiBFZGl0b3JTZWxlY3Rpb24sXG4gICAgICAgIEV2ZW50OiBFdmVudFV0aWxzLkV2ZW50XG4gICAgICB9LFxuICAgICAgaHRtbDoge1xuICAgICAgICBTdHlsZXMsXG4gICAgICAgIEVudGl0aWVzLFxuICAgICAgICBOb2RlOiBBc3ROb2RlLFxuICAgICAgICBTY2hlbWEsXG4gICAgICAgIERvbVBhcnNlcixcbiAgICAgICAgV3JpdGVyLFxuICAgICAgICBTZXJpYWxpemVyOiBIdG1sU2VyaWFsaXplclxuICAgICAgfSxcbiAgICAgIEVudixcbiAgICAgIEFkZE9uTWFuYWdlcixcbiAgICAgIEFubm90YXRvcixcbiAgICAgIEZvcm1hdHRlcixcbiAgICAgIFVuZG9NYW5hZ2VyLFxuICAgICAgRWRpdG9yQ29tbWFuZHMsXG4gICAgICBXaW5kb3dNYW5hZ2VyLFxuICAgICAgTm90aWZpY2F0aW9uTWFuYWdlcixcbiAgICAgIEVkaXRvck9ic2VydmFibGUsXG4gICAgICBTaG9ydGN1dHMsXG4gICAgICBFZGl0b3IsXG4gICAgICBGb2N1c01hbmFnZXIsXG4gICAgICBFZGl0b3JNYW5hZ2VyLFxuICAgICAgRE9NOiBET01VdGlscy5ET00sXG4gICAgICBTY3JpcHRMb2FkZXI6IFNjcmlwdExvYWRlci5TY3JpcHRMb2FkZXIsXG4gICAgICBQbHVnaW5NYW5hZ2VyLFxuICAgICAgVGhlbWVNYW5hZ2VyLFxuICAgICAgTW9kZWxNYW5hZ2VyLFxuICAgICAgSWNvbk1hbmFnZXIsXG4gICAgICBSZXNvdXJjZSxcbiAgICAgIEZha2VDbGlwYm9hcmQsXG4gICAgICB0cmltOiBUb29scy50cmltLFxuICAgICAgaXNBcnJheTogVG9vbHMuaXNBcnJheSxcbiAgICAgIGlzOiBUb29scy5pcyxcbiAgICAgIHRvQXJyYXk6IFRvb2xzLnRvQXJyYXksXG4gICAgICBtYWtlTWFwOiBUb29scy5tYWtlTWFwLFxuICAgICAgZWFjaDogVG9vbHMuZWFjaCxcbiAgICAgIG1hcDogVG9vbHMubWFwLFxuICAgICAgZ3JlcDogVG9vbHMuZ3JlcCxcbiAgICAgIGluQXJyYXk6IFRvb2xzLmluQXJyYXksXG4gICAgICBleHRlbmQ6IFRvb2xzLmV4dGVuZCxcbiAgICAgIHdhbGs6IFRvb2xzLndhbGssXG4gICAgICByZXNvbHZlOiBUb29scy5yZXNvbHZlLFxuICAgICAgZXhwbG9kZTogVG9vbHMuZXhwbG9kZSxcbiAgICAgIF9hZGRDYWNoZVN1ZmZpeDogVG9vbHMuX2FkZENhY2hlU3VmZml4XG4gICAgfTtcbiAgICBjb25zdCB0aW55bWNlID0gVG9vbHMuZXh0ZW5kKEVkaXRvck1hbmFnZXIsIHB1YmxpY0FwaSk7XG5cbiAgICBjb25zdCBleHBvcnRUb01vZHVsZUxvYWRlcnMgPSB0aW55bWNlID0+IHtcbiAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gdGlueW1jZTtcbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBleHBvcnRUb1dpbmRvd0dsb2JhbCA9IHRpbnltY2UgPT4ge1xuICAgICAgd2luZG93LnRpbnltY2UgPSB0aW55bWNlO1xuICAgICAgd2luZG93LnRpbnlNQ0UgPSB0aW55bWNlO1xuICAgIH07XG4gICAgZXhwb3J0VG9XaW5kb3dHbG9iYWwodGlueW1jZSk7XG4gICAgZXhwb3J0VG9Nb2R1bGVMb2FkZXJzKHRpbnltY2UpO1xuXG59KSgpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jbGFzcyBQdWxzYXJUaW55bWNlQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yICgkaHRtbCkge1xuICAgICAgICB0aGlzLiRodG1sID0gJGh0bWw7XG5cbiAgICAgICAgY29uc3QgZnMgPSByZXF1aXJlKCdmcycpLFxuICAgICAgICAgICAgICB0aW55bWNlID0gcmVxdWlyZSgndGlueW1jZS90aW55bWNlJyk7XG5cbiAgICAgICAgLyogRGVmYXVsdCBpY29ucyBhcmUgcmVxdWlyZWQuIEFmdGVyIHRoYXQsIGltcG9ydCBjdXN0b20gaWNvbnMgaWYgYXBwbGljYWJsZSAqL1xuICAgICAgICByZXF1aXJlKCd0aW55bWNlL2ljb25zL2RlZmF1bHQnKTtcblxuICAgICAgICAvKiBSZXF1aXJlZCBUaW55TUNFIGNvbXBvbmVudHMgKi9cbiAgICAgICAgcmVxdWlyZSgndGlueW1jZS90aGVtZXMvc2lsdmVyJyk7XG4gICAgICAgIHJlcXVpcmUoJ3RpbnltY2UvbW9kZWxzL2RvbScpO1xuXG4gICAgICAgIC8qIEltcG9ydCBhIHNraW4gKGNhbiBiZSBhIGN1c3RvbSBza2luIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQpICovXG4gICAgICAgIHJlcXVpcmUoJ3RpbnltY2Uvc2tpbnMvdWkvb3hpZGUvc2tpbi5jc3MnKTtcblxuICAgICAgICAvKiBJbXBvcnQgcGx1Z2lucyAtIGluY2x1ZGUgdGhlIHJlbGV2YW50IHBsdWdpbiBpbiB0aGUgJ3BsdWdpbnMnIG9wdGlvbi4gKi9cbiAgICAgICAgcmVxdWlyZSgndGlueW1jZS9wbHVnaW5zL2Fkdmxpc3QnKTtcbiAgICAgICAgcmVxdWlyZSgndGlueW1jZS9wbHVnaW5zL2NvZGUnKTtcbiAgICAgICAgcmVxdWlyZSgndGlueW1jZS9wbHVnaW5zL2Vtb3RpY29ucycpO1xuICAgICAgICByZXF1aXJlKCd0aW55bWNlL3BsdWdpbnMvZW1vdGljb25zL2pzL2Vtb2ppcycpO1xuICAgICAgICByZXF1aXJlKCd0aW55bWNlL3BsdWdpbnMvbGluaycpO1xuICAgICAgICByZXF1aXJlKCd0aW55bWNlL3BsdWdpbnMvbGlzdHMnKTtcbiAgICAgICAgcmVxdWlyZSgndGlueW1jZS9wbHVnaW5zL3RhYmxlJyk7XG5cbiAgICAgICAgLyogY29udGVudCBVSSBDU1MgaXMgcmVxdWlyZWQgKi9cbiAgICAgICAgdGhpcy5jb250ZW50VWlTa2luQ3NzID0gZnMucmVhZEZpbGVTeW5jKCdub2RlX21vZHVsZXMvdGlueW1jZS9za2lucy91aS9veGlkZS9jb250ZW50LmNzcycsIHsgZW5jb2Rpbmc6ICdVVEYtOCcgfSk7XG5cbiAgICAgICAgLyogVGhlIGRlZmF1bHQgY29udGVudCBDU1MgY2FuIGJlIGNoYW5nZWQgb3IgcmVwbGFjZWQgd2l0aCBhcHByb3ByaWF0ZSBDU1MgZm9yIHRoZSBlZGl0b3IgY29udGVudC4gKi9cbiAgICAgICAgdGhpcy5jb250ZW50Q3NzID0gZnMucmVhZEZpbGVTeW5jKCdub2RlX21vZHVsZXMvdGlueW1jZS9za2lucy9jb250ZW50L2RlZmF1bHQvY29udGVudC5jc3MnLCB7IGVuY29kaW5nOiAnVVRGLTgnIH0pO1xuICAgIH1cblxuICAgIGluaXQgKCkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuJGh0bWwgPT09ICd1bmRlZmluZWQnIHx8ICF0aGlzLiRodG1sLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCckaHRtbCBtdXN0IGJlIHBhc3NlZCB0byBQdWxzYXJUaW55bWNlQ29tcG9uZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAvKiBJbml0aWFsaXplIFRpbnlNQ0UgKi9cbiAgICAgICAgdGlueW1jZS5pbml0KHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiAndGV4dGFyZWEuanMtdGlueW1jZScsXG4gICAgICAgICAgICAvKiBBbGwgcGx1Z2lucyBuZWVkIHRvIGJlIGltcG9ydGVkIGFuZCBhZGRlZCB0byB0aGUgcGx1Z2lucyBvcHRpb24uICovXG4gICAgICAgICAgICBwbHVnaW5zOiAnYWR2bGlzdCBjb2RlIGVtb3RpY29ucyBsaW5rIGxpc3RzIHRhYmxlJyxcbiAgICAgICAgICAgIHRvb2xiYXI6ICdib2xkIGl0YWxpYyB8IGJ1bGxpc3QgbnVtbGlzdCB8IGxpbmsgZW1vdGljb25zJyxcbiAgICAgICAgICAgIHNraW46IGZhbHNlLFxuICAgICAgICAgICAgY29udGVudF9jc3M6IGZhbHNlLFxuICAgICAgICAgICAgY29udGVudF9zdHlsZTogdGhpcy5jb250ZW50VWlTa2luQ3NzLnRvU3RyaW5nKCkgKyAnXFxuJyArIHRoaXMuY29udGVudENzcy50b1N0cmluZygpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQdWxzYXJUaW55bWNlQ29tcG9uZW50OyIsIndpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IHJlcXVpcmUoJ2pxdWVyeScpO1xuXG52YXIgUHVsc2FyVGlueW1jZUNvbXBvbmVudCA9IHJlcXVpcmUoJy4vUHVsc2FyVGlueW1jZUNvbXBvbmVudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBQdWxzYXJUaW55bWNlQ29tcG9uZW50XG59OyJdfQ== +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1jc3MvYnJvd3Nlci5qcyIsIi9Vc2Vycy9wYXVsc3RhbnRvbi9Mb2NhbGhvc3QvcHVsc2FyLXBvbHlyZXBvL2NvbXBvbmVudHMvcHVsc2FyLXRpbnltY2Uvbm9kZV9tb2R1bGVzL2pxdWVyeS9kaXN0L2pxdWVyeS5qcyIsIi9Vc2Vycy9wYXVsc3RhbnRvbi9Mb2NhbGhvc3QvcHVsc2FyLXBvbHlyZXBvL2NvbXBvbmVudHMvcHVsc2FyLXRpbnltY2Uvbm9kZV9tb2R1bGVzL3RpbnltY2UvaWNvbnMvZGVmYXVsdC9pY29ucy5qcyIsIm5vZGVfbW9kdWxlcy90aW55bWNlL2ljb25zL2RlZmF1bHQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvdGlueW1jZS9tb2RlbHMvZG9tL2luZGV4LmpzIiwiL1VzZXJzL3BhdWxzdGFudG9uL0xvY2FsaG9zdC9wdWxzYXItcG9seXJlcG8vY29tcG9uZW50cy9wdWxzYXItdGlueW1jZS9ub2RlX21vZHVsZXMvdGlueW1jZS9tb2RlbHMvZG9tL21vZGVsLmpzIiwibm9kZV9tb2R1bGVzL3RpbnltY2UvcGx1Z2lucy9hZHZsaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3RpbnltY2UvcGx1Z2lucy9hZHZsaXN0L3BsdWdpbi5qcyIsIm5vZGVfbW9kdWxlcy90aW55bWNlL3BsdWdpbnMvY29kZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy90aW55bWNlL3BsdWdpbnMvY29kZS9wbHVnaW4uanMiLCJub2RlX21vZHVsZXMvdGlueW1jZS9wbHVnaW5zL2Vtb3RpY29ucy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy90aW55bWNlL3BsdWdpbnMvZW1vdGljb25zL2pzL2Vtb2ppcy5qcyIsIm5vZGVfbW9kdWxlcy90aW55bWNlL3BsdWdpbnMvZW1vdGljb25zL3BsdWdpbi5qcyIsIm5vZGVfbW9kdWxlcy90aW55bWNlL3BsdWdpbnMvbGluay9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy90aW55bWNlL3BsdWdpbnMvbGluay9wbHVnaW4uanMiLCJub2RlX21vZHVsZXMvdGlueW1jZS9wbHVnaW5zL2xpc3RzL2luZGV4LmpzIiwiL1VzZXJzL3BhdWxzdGFudG9uL0xvY2FsaG9zdC9wdWxzYXItcG9seXJlcG8vY29tcG9uZW50cy9wdWxzYXItdGlueW1jZS9ub2RlX21vZHVsZXMvdGlueW1jZS9wbHVnaW5zL2xpc3RzL3BsdWdpbi5qcyIsIm5vZGVfbW9kdWxlcy90aW55bWNlL3BsdWdpbnMvdGFibGUvaW5kZXguanMiLCIvVXNlcnMvcGF1bHN0YW50b24vTG9jYWxob3N0L3B1bHNhci1wb2x5cmVwby9jb21wb25lbnRzL3B1bHNhci10aW55bWNlL25vZGVfbW9kdWxlcy90aW55bWNlL3BsdWdpbnMvdGFibGUvcGx1Z2luLmpzIiwibm9kZV9tb2R1bGVzL3RpbnltY2UvdGhlbWVzL3NpbHZlci9pbmRleC5qcyIsIi9Vc2Vycy9wYXVsc3RhbnRvbi9Mb2NhbGhvc3QvcHVsc2FyLXBvbHlyZXBvL2NvbXBvbmVudHMvcHVsc2FyLXRpbnltY2Uvbm9kZV9tb2R1bGVzL3RpbnltY2UvdGhlbWVzL3NpbHZlci90aGVtZS5qcyIsIi9Vc2Vycy9wYXVsc3RhbnRvbi9Mb2NhbGhvc3QvcHVsc2FyLXBvbHlyZXBvL2NvbXBvbmVudHMvcHVsc2FyLXRpbnltY2Uvbm9kZV9tb2R1bGVzL3RpbnltY2UvdGlueW1jZS5qcyIsIi9Vc2Vycy9wYXVsc3RhbnRvbi9Mb2NhbGhvc3QvcHVsc2FyLXBvbHlyZXBvL2NvbXBvbmVudHMvcHVsc2FyLXRpbnltY2Uvc2tpbnMvdWkvcHVsc2FyL3NraW4uY3NzIiwic3JjL1B1bHNhclRpbnltY2VDb21wb25lbnQuanMiLCJzcmMvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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RCxPQUFPLElBQUksS0FBSyxFQUFFLFdBQVc7R0FDNUIsSUFBSSxLQUFLO0lBQ1IsT0FBTyxRQUFRLElBQUksRUFBRSxJQUFJLEVBQUU7SUFDM0IsUUFBUSxJQUFJLEVBQUUsSUFBSSxHQUFHLE9BQU8sRUFBRTtJQUM5QixRQUFRLElBQUksRUFBRSxJQUFJLEdBQUcsWUFBWSxFQUFFO0lBQ25DLFNBQVMsTUFBTSxPQUFPO0lBQ3RCLFNBQVMsS0FBSyxHQUFHLEtBQUssT0FBTyxHQUFHLENBQUMsQ0FBQzs7O0dBR25DLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQzs7O0dBR25CLE1BQU0sTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7O0dBRS9CLEtBQUssS0FBSyxJQUFJLEtBQUssS0FBSyxHQUFHO0lBQzFCLEtBQUssS0FBSyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzlCOzs7R0FHRCxNQUFNLFFBQVEsTUFBTSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUk7SUFDdkMsS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssS0FBSyxJQUFJLElBQUksTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEtBQUssSUFBSSxHQUFHO0tBQ3RFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7S0FDbEMsTUFBTSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0tBQzFCO0lBQ0Q7OztHQUdELE1BQU0sUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRztJQUMxQyxLQUFLLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sR0FBRztLQUM5QyxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0tBQ25DO0lBQ0Q7OztHQUdELE9BQU8sSUFBSSxPQUFPLENBQUM7R0FDbkIsRUFBRSxDQUFD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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNubEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6dENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BOzs7O0FBSUEsQ0FBQyxZQUFZO0lBQ1QsWUFBWSxDQUFDOztJQUViLElBQUksV0FBVyxPQUFPLEtBQUssTUFBTSxRQUFRLENBQUMsdUJBQXVCLENBQUMsQ0FBQzs7SUFFbkUsTUFBTSxXQUFXLCtCQUErQjtNQUM5QyxJQUFJLEVBQUUsQ0FBQztNQUNQLElBQUksU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLFVBQVUsQ0FBQyxFQUFFO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDO09BQ2IsTUFBTTtRQUNMLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssTUFBTSxXQUFXLEtBQUssQ0FBQztPQUNqRztLQUNGLENBQUM7SUFDRixNQUFNLFNBQVMsS0FBSztNQUNsQixNQUFNLElBQUksT0FBTyxDQUFDLENBQUM7TUFDbkIsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ2QsT0FBTyxNQUFNLENBQUM7T0FDZixNQUFNLElBQUksQ0FBQyxLQUFLLFFBQVEsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUM3QyxPQUFPLE9BQU8sQ0FBQztPQUNoQixNQUFNLElBQUksQ0FBQyxLQUFLLFFBQVEsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxjQUFjLEtBQUssY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDdEYsT0FBTyxRQUFRLENBQUM7T0FDakIsTUFBTTtRQUNMLE9BQU8sQ0FBQyxDQUFDO09BQ1Y7S0FDRixDQUFDO0lBQ0YsTUFBTSxXQUFXLFFBQVEsU0FBUyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDO0lBQ3pELE1BQU0sZUFBZSxRQUFRLFNBQVMsT0FBTyxLQUFLLEtBQUssSUFBSSxDQUFDO0lBQzVELE1BQU0sV0FBVyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEMsTUFBTSxXQUFXLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxNQUFNLFVBQVUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sWUFBWSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUMsTUFBTSxhQUFhLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssU0FBUyxDQUFDO0lBQ3RELE1BQU0sZ0JBQWdCLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsTUFBTSxhQUFhLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM1QyxNQUFNLFdBQVcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztJQUV4QyxNQUFNLE9BQU8sTUFBTTtLQUNsQixDQUFDO0lBQ0YsTUFBTSxXQUFXLFNBQVM7TUFDeEIsT0FBTyxNQUFNO1FBQ1gsT0FBTyxLQUFLLENBQUM7T0FDZCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sZUFBZSxVQUFVO01BQzdCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNoQixDQUFDO0lBQ0YsbUJBQW1CLGNBQWMsRUFBRTtNQUNqQyxPQUFPLENBQUMsV0FBVyxLQUFLO1FBQ3RCLE1BQU0sTUFBTSxXQUFXLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztPQUM1QixDQUFDO0tBQ0g7SUFDRCxNQUFNLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLE1BQU0sUUFBUSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7O0lBRTlCLGVBQWU7TUFDYixXQUFXLGFBQWE7UUFDdEIsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO09BQ3BCO01BQ0QsV0FBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ2xDO01BQ0QsV0FBVyxHQUFHO1FBQ1osT0FBTyxRQUFRLGNBQWMsQ0FBQztPQUMvQjtNQUNELElBQUksaUJBQWlCO1FBQ25CLElBQUksSUFBSSxJQUFJLEVBQUU7VUFDWixPQUFPLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDO1NBQzNCLE1BQU07VUFDTCxPQUFPLE1BQU0sRUFBRSxDQUFDO1NBQ2pCO09BQ0Y7TUFDRCxNQUFNLEdBQUc7UUFDUCxPQUFPLElBQUksSUFBSSxDQUFDO09BQ2pCO01BQ0QsTUFBTSxHQUFHO1FBQ1AsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDO09BQ2xCO01BQ0QsR0FBRyxTQUFTO1FBQ1YsSUFBSSxJQUFJLElBQUksRUFBRTtVQUNaLE9BQU8sUUFBUSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQztTQUMxQyxNQUFNO1VBQ0wsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO1NBQ3hCO09BQ0Y7TUFDRCxJQUFJLFNBQVM7UUFDWCxJQUFJLElBQUksSUFBSSxFQUFFO1VBQ1osT0FBTyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQztTQUMzQixNQUFNO1VBQ0wsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO1NBQ3hCO09BQ0Y7TUFDRCxNQUFNLFlBQVk7UUFDaEIsT0FBTyxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQztPQUMxQztNQUNELE1BQU0sWUFBWTtRQUNoQixPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUM7T0FDM0M7TUFDRCxNQUFNLFlBQVk7UUFDaEIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFO1VBQ3RDLE9BQU8sSUFBSSxDQUFDO1NBQ2IsTUFBTTtVQUNMLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztTQUN4QjtPQUNGO01BQ0QsS0FBSyxjQUFjO1FBQ2pCLE9BQU8sSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLEdBQUcsV0FBVyxDQUFDO09BQzVDO01BQ0QsRUFBRSxjQUFjO1FBQ2QsT0FBTyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsV0FBVyxDQUFDO09BQ3RDO01BQ0QsVUFBVSxRQUFRO1FBQ2hCLE9BQU8sSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLEdBQUcsS0FBSyxFQUFFLENBQUM7T0FDeEM7TUFDRCxPQUFPLFFBQVE7UUFDYixPQUFPLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztPQUNsQztNQUNELFFBQVEsVUFBVTtRQUNoQixJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7VUFDYixNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssQ0FBQyxHQUFHLE9BQU8sR0FBRyx5QkFBeUIsQ0FBQyxDQUFDO1NBQy9GLE1BQU07VUFDTCxPQUFPLElBQUksTUFBTSxDQUFDO1NBQ25CO09BQ0Y7TUFDRCxXQUFXLFFBQVE7UUFDakIsT0FBTyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN0RTtNQUNELFNBQVMsR0FBRztRQUNWLE9BQU8sSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO09BQ3JDO01BQ0QsY0FBYyxHQUFHO1FBQ2YsT0FBTyxJQUFJLE1BQU0sQ0FBQztPQUNuQjtNQUNELElBQUksU0FBUztRQUNYLElBQUksSUFBSSxJQUFJLEVBQUU7VUFDWixNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQztTQUNwQjtPQUNGO01BQ0QsT0FBTyxHQUFHO1FBQ1IsT0FBTyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO09BQ3JDO01BQ0QsUUFBUSxHQUFHO1FBQ1QsT0FBTyxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7T0FDdEQ7S0FDRjtJQUNELFFBQVEsY0FBYyxHQUFHLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDOztJQUU3QyxNQUFNLGNBQWMsS0FBSyxVQUFVLE1BQU0sQ0FBQztJQUMxQyxNQUFNLGdCQUFnQixLQUFLLFVBQVUsUUFBUSxDQUFDO0lBQzlDLE1BQU0sYUFBYSxLQUFLLFVBQVUsS0FBSyxDQUFDO0lBQ3hDLE1BQU0sYUFBYSxXQUFXLGFBQWEsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4RCxNQUFNLGFBQWEsV0FBVyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sU0FBUyxjQUFjO01BQzNCLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0MsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7VUFDZCxPQUFPLElBQUksQ0FBQztTQUNiO09BQ0Y7TUFDRCxPQUFPLEtBQUssQ0FBQztLQUNkLENBQUM7SUFDRixNQUFNLE1BQU0sV0FBVztNQUNyQixNQUFNLE1BQU0sRUFBRSxPQUFPLENBQUM7TUFDdEIsTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ3pCLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzVCLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDaEI7TUFDRCxPQUFPLENBQUMsQ0FBQztLQUNWLENBQUM7SUFDRixNQUFNLFNBQVMsV0FBVztNQUN4QixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzdDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUNUO0tBQ0YsQ0FBQztJQUNGLE1BQU0sV0FBVyxjQUFjO01BQzdCLE1BQU0sSUFBSSxFQUFFLENBQUM7TUFDYixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzdDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO1VBQ2QsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDWDtPQUNGO01BQ0QsT0FBTyxDQUFDLENBQUM7S0FDVixDQUFDO0lBQ0YsTUFBTSxVQUFVLFdBQVc7TUFDekIsSUFBSSxFQUFFLE9BQU8sS0FBSyxDQUFDLEVBQUU7UUFDbkIsT0FBTyxFQUFFLENBQUM7T0FDWCxNQUFNO1FBQ0wsSUFBSSxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLElBQUksRUFBRSxDQUFDO1FBQ2IsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNmLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7VUFDN0MsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUNoQixNQUFNLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ2xCLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRTtZQUNwQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNkLFFBQVEsRUFBRSxDQUFDO1dBQ1o7VUFDRCxVQUFVLElBQUksQ0FBQztVQUNmLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2Y7UUFDRCxJQUFJLEtBQUssT0FBTyxLQUFLLENBQUMsRUFBRTtVQUN0QixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNmO1FBQ0QsT0FBTyxDQUFDLENBQUM7T0FDVjtLQUNGLENBQUM7SUFDRixNQUFNLFFBQVEsZ0JBQWdCO01BQzVCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsVUFBVTtRQUNuQixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3BCLENBQUMsQ0FBQztNQUNILE9BQU8sR0FBRyxDQUFDO0tBQ1osQ0FBQztJQUNGLE1BQU0sWUFBWSxxQkFBcUI7TUFDckMsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM3QyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtVQUNkLE9BQU8sUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7VUFDdEIsTUFBTTtTQUNQO09BQ0Y7TUFDRCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7S0FDeEIsQ0FBQztJQUNGLE1BQU0sT0FBTyxjQUFjO01BQ3pCLE9BQU8sU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDbkMsQ0FBQztJQUNGLE1BQU0sVUFBVSxNQUFNO01BQ3BCLE1BQU0sSUFBSSxFQUFFLENBQUM7TUFDYixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7VUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLEdBQUcsNEJBQTRCLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDOUU7UUFDRCxVQUFVLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDNUI7TUFDRCxPQUFPLENBQUMsQ0FBQztLQUNWLENBQUM7SUFDRixNQUFNLE9BQU8sV0FBVyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sVUFBVSxNQUFNO01BQ3BCLE1BQU0sSUFBSSxXQUFXLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDbEMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztNQUNaLE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0sUUFBUSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxHQUFHLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7SUFDMUYsTUFBTSxPQUFPLE1BQU0sS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoQyxNQUFNLE9BQU8sTUFBTSxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sU0FBUyxvQkFBb0I7TUFDakMsTUFBTSxJQUFJLEVBQUUsQ0FBQztNQUNiLE1BQU0sZUFBZSxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUM1RyxLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzdDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRTtVQUNwQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNYO09BQ0Y7TUFDRCxPQUFPLENBQUMsQ0FBQztLQUNWLENBQUM7O0lBRUYsTUFBTSxPQUFPLFdBQVcsYUFBYSxZQUFZLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEcsTUFBTSxTQUFTLFdBQVcsYUFBYSxZQUFZLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sRUFBRSxJQUFJLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN4SCxNQUFNLFFBQVEsZUFBZSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQzs7SUFFM0gsTUFBTSxVQUFVLENBQUMsQ0FBQzs7SUFFbEIsTUFBTSxXQUFXLGlCQUFpQjtNQUNoQyxNQUFNLE1BQU0sS0FBSyxJQUFJLFFBQVEsQ0FBQztNQUM5QixNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDckMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDO01BQ3JCLElBQUksQ0FBQyxHQUFHLGNBQWMsRUFBRSxJQUFJLEdBQUcsV0FBVyxPQUFPLEdBQUcsQ0FBQyxFQUFFO1FBQ3JELE1BQU0sVUFBVSx1Q0FBdUMsQ0FBQztRQUN4RCxPQUFPLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztPQUMxQjtNQUNELE9BQU8sU0FBUyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDckMsQ0FBQztJQUNGLE1BQU0sVUFBVSxnQkFBZ0I7TUFDOUIsTUFBTSxNQUFNLEtBQUssSUFBSSxRQUFRLENBQUM7TUFDOUIsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ3BDLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3hCLENBQUM7SUFDRixNQUFNLFdBQVcsaUJBQWlCO01BQ2hDLE1BQU0sTUFBTSxLQUFLLElBQUksUUFBUSxDQUFDO01BQzlCLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN0QyxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN4QixDQUFDO0lBQ0YsTUFBTSxZQUFZLFFBQVE7TUFDeEIsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO09BQ3JEO01BQ0QsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7S0FDdEIsQ0FBQztJQUNGLE1BQU0sWUFBWSxrQkFBa0IsUUFBUSxLQUFLLENBQUMsTUFBTSxJQUFJLGlCQUFpQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEcsTUFBTSxlQUFlO01BQ25CLFFBQVE7TUFDUixPQUFPO01BQ1AsUUFBUTtNQUNSLFNBQVMsU0FBUztNQUNsQixTQUFTO0tBQ1YsQ0FBQzs7SUFFRixNQUFNLE9BQU8sdUJBQXVCO01BQ2xDLE1BQU0sTUFBTSxPQUFPLElBQUksQ0FBQztNQUN4QixJQUFJLEdBQUcsU0FBUyxLQUFLLE9BQU8sRUFBRTtRQUM1QixPQUFPLEtBQUssQ0FBQztPQUNkLE1BQU07UUFDTCxNQUFNLE9BQU8sR0FBRyxDQUFDO1FBQ2pCLElBQUksSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFO1VBQzlCLE9BQU8sSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDL0IsTUFBTSxJQUFJLElBQUksa0JBQWtCLEtBQUssU0FBUyxFQUFFO1VBQy9DLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN6QyxNQUFNLElBQUksSUFBSSxzQkFBc0IsS0FBSyxTQUFTLEVBQUU7VUFDbkQsT0FBTyxJQUFJLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzdDLE1BQU0sSUFBSSxJQUFJLG1CQUFtQixLQUFLLFNBQVMsRUFBRTtVQUNoRCxPQUFPLElBQUksbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDMUMsTUFBTTtVQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNuRDtPQUNGO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLEtBQUssWUFBWSxFQUFFLElBQUksS0FBSyxFQUFFLElBQUksQ0FBQztJQUN6QyxNQUFNLFdBQVcsWUFBWTtNQUMzQixNQUFNLEtBQUssRUFBRSxJQUFJLENBQUM7TUFDbEIsTUFBTSxLQUFLLEVBQUUsSUFBSSxDQUFDO01BQ2xCLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDNUMsQ0FBQztJQUNGLE1BQU0sS0FBSyxJQUFJLENBQUM7O0lBRWhCLElBQUksb0JBQW9CLG9DQUFvQztNQUMxRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUU7UUFDaEIsT0FBTyxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztPQUM3QixNQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUM5QyxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEIsTUFBTTtRQUNMLE9BQU8sUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7T0FDbkM7S0FDRixDQUFDOztJQUVGLE9BQU8sTUFBTSxLQUFLLFdBQVcsR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7O0lBRXBFLE1BQU0sT0FBTyxXQUFXO01BQ3RCLE1BQU0sSUFBSSxPQUFPLElBQUksU0FBUyxDQUFDO01BQy9CLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztLQUN4QixDQUFDO0lBQ0YsTUFBTSxPQUFPLFdBQVcsT0FBTyxJQUFJLFNBQVMsQ0FBQztJQUM3QyxNQUFNLFNBQVMsS0FBSyxXQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkQsTUFBTSxjQUFjLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxNQUFNLFFBQVEsT0FBTyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDOztJQUU1RCxNQUFNLFNBQVMsV0FBVyxRQUFRLEtBQUssQ0FBQyxPQUFPLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLFFBQVEsQ0FBQyxDQUFDO0lBQzFGLE1BQU0sZ0JBQWdCLFdBQVcsUUFBUSxLQUFLLENBQUMsT0FBTyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxRQUFRLENBQUMsQ0FBQztJQUNwRyxNQUFNLGNBQWMsV0FBVyxRQUFRLEtBQUssQ0FBQyxPQUFPLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLFFBQVEsQ0FBQyxDQUFDO0lBQ2hHLE1BQU0sV0FBVyxXQUFXLEdBQUcsQ0FBQyxPQUFPLElBQUksV0FBVyxFQUFFLFlBQVksUUFBUSxDQUFDLENBQUM7SUFDOUUsTUFBTSxRQUFRLG9CQUFvQjtNQUNoQyxNQUFNLEtBQUssT0FBTyxJQUFJLFdBQVcsQ0FBQztNQUNsQyxPQUFPLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxRQUFRLENBQUMsQ0FBQztLQUMzRCxDQUFDO0lBQ0YsTUFBTSxhQUFhLFdBQVcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxNQUFNLFlBQVksV0FBVyxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxXQUFXLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQzs7SUFFL0UsTUFBTSxhQUFhLDhCQUE4QjtNQUMvQyxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUM7TUFDeEIsTUFBTSxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDO01BQ2pELE9BQU8sT0FBTyxXQUFXLEVBQUU7UUFDekIsVUFBVSxPQUFPLFdBQVcsQ0FBQztRQUM3QixNQUFNLEtBQUssWUFBWSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7VUFDakIsT0FBTyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMxQixNQUFNLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1VBQ25CLE1BQU07U0FDUDtPQUNGO01BQ0QsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO0tBQ3hCLENBQUM7SUFDRixNQUFNLFVBQVUsOEJBQThCO01BQzVDLE1BQU0sS0FBSyxhQUFhLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNoQyxPQUFPLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNwRSxDQUFDOztJQUVGLE1BQU0sV0FBVyxxQkFBcUI7TUFDcEMsTUFBTSxXQUFXLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNoQyxRQUFRLEtBQUssQ0FBQyxLQUFLO1FBQ2pCLENBQUMsSUFBSSxhQUFhLENBQUMsT0FBTyxJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztPQUM3QyxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxRQUFRLHFCQUFxQjtNQUNqQyxNQUFNLFVBQVUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3BDLE9BQU8sS0FBSyxDQUFDLE1BQU07UUFDakIsTUFBTSxXQUFXLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxRQUFRLEtBQUssQ0FBQyxLQUFLO1VBQ2pCLFFBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDdEIsQ0FBQyxDQUFDO09BQ0osRUFBRSxLQUFLO1FBQ04sUUFBUSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztPQUN0QixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxXQUFXLHFCQUFxQjtNQUNwQyxNQUFNLElBQUksWUFBWSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7S0FDckMsQ0FBQzs7SUFFRixNQUFNLFNBQVMsc0JBQXNCO01BQ25DLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSztRQUNwQixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3JCLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFNBQVMsc0JBQXNCO01BQ25DLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSztRQUNwQixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3JCLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxRQUFRLFdBQVc7TUFDdkIsT0FBTyxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7TUFDN0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTO1FBQ2pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztPQUNmLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFNBQVMsV0FBVztNQUN4QixNQUFNLE1BQU0sT0FBTyxJQUFJLENBQUM7TUFDeEIsSUFBSSxHQUFHLFdBQVcsS0FBSyxJQUFJLEVBQUU7UUFDM0IsR0FBRyxXQUFXLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUNqQztLQUNGLENBQUM7O0lBRUYsSUFBSSxXQUFXLE9BQU8sS0FBSyxNQUFNLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDOztJQUVwRSxJQUFJLFdBQVcsT0FBTyxLQUFLLE1BQU0sUUFBUSxDQUFDLHdCQUF3QixDQUFDLENBQUM7O0lBRXBFLElBQUksV0FBVyxPQUFPLEtBQUssTUFBTSxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQzs7SUFFN0QsTUFBTSxVQUFVLFNBQVMsR0FBRyxDQUFDLEtBQUssRUFBRSxZQUFZLFFBQVEsQ0FBQyxDQUFDOztJQUUxRCxNQUFNLE9BQU8sTUFBTSxLQUFLLENBQUM7SUFDekIsTUFBTSxPQUFPLFlBQVk7TUFDdkIsTUFBTSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUN4QixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2hELE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ1Q7S0FDRixDQUFDO0lBQ0YsTUFBTSxTQUFTLEtBQUssVUFBVTtNQUM1QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0saUJBQWlCLGdDQUFnQztNQUNyRCxJQUFJLENBQUMsR0FBRyxFQUFFLFVBQVU7UUFDbEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3ZDLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFNBQVMsZUFBZTtNQUM1QixNQUFNLElBQUksRUFBRSxDQUFDO01BQ2IsY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzNDLE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQzs7SUFFRixNQUFNLFNBQVMscUJBQXFCO01BQ2xDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDMUQsR0FBRyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQztPQUNuQyxNQUFNO1FBQ0wsT0FBTyxNQUFNLENBQUMscUNBQXFDLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztPQUNuRDtLQUNGLENBQUM7SUFDRixNQUFNLFNBQVMsb0JBQW9CO01BQ2pDLE1BQU0sTUFBTSxPQUFPLElBQUksQ0FBQztNQUN4QixJQUFJLENBQUMsS0FBSyxFQUFFLFVBQVU7UUFDcEIsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDbkIsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sVUFBVSxXQUFXLEtBQUssQ0FBQyxPQUFPLElBQUksV0FBVyxFQUFFLGVBQWU7TUFDdEUsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUM7TUFDNUIsT0FBTyxHQUFHLENBQUM7S0FDWixFQUFFLEVBQUUsQ0FBQyxDQUFDOztJQUVQLE1BQU0sUUFBUSxzQkFBc0IsWUFBWSxRQUFRLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLE1BQU0sT0FBTyxZQUFZLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsTUFBTSxZQUFZLG1CQUFtQjtNQUNuQyxNQUFNLEtBQUssWUFBWSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDckMsTUFBTSxhQUFhLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUNyQyxNQUFNLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO01BQ3ZCLE9BQU8sRUFBRSxDQUFDO0tBQ1gsQ0FBQztJQUNGLE1BQU0sU0FBUyxtQkFBbUI7TUFDaEMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDcEMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztNQUNwQixNQUFNLGFBQWEsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQ3RDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7TUFDdkIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQ2pCLE9BQU8sRUFBRSxDQUFDO0tBQ1gsQ0FBQzs7SUFFRixJQUFJLFdBQVcsT0FBTyxLQUFLLE1BQU0sUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUM7O0lBRWxFLElBQUksV0FBVyxPQUFPLEtBQUssTUFBTSxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQzs7SUFFaEUsTUFBTSxnQkFBZ0IsUUFBUSxRQUFRLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsWUFBWSxFQUFFLEtBQUssSUFBSSxDQUFDO0lBQ2xHLE1BQU0saUJBQWlCLFNBQVMsUUFBUSxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQztJQUN6RixNQUFNLGVBQWUsUUFBUSxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sWUFBWSxRQUFRLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUM7SUFDckUsTUFBTSxhQUFhLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsRCxNQUFNLGFBQWEsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sV0FBVyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsTUFBTSxpQkFBaUIsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sZUFBZSxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDakQsTUFBTSxrQkFBa0IsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsTUFBTSxlQUFlLFFBQVE7TUFDM0IsSUFBSSxFQUFFLENBQUM7TUFDUCxPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksV0FBVyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLE1BQU0sSUFBSSxDQUFDO0tBQzdGLENBQUM7SUFDRixNQUFNLGNBQWMsa0JBQWtCLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsSUFBSSxNQUFNLE9BQU8scUJBQXFCLEVBQUUsQ0FBQztJQUNuSCxNQUFNLFVBQVUseUJBQXlCLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsSUFBSSxhQUFhLENBQUM7SUFDL0YsTUFBTSxTQUFTLGtCQUFrQixhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxTQUFTLElBQUksTUFBTSxPQUFPLGdCQUFnQixFQUFFLENBQUM7SUFDekcsTUFBTSxZQUFZLGVBQWU7TUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNmLE9BQU8sS0FBSyxDQUFDO09BQ2Q7TUFDRCxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDO0tBQ3JFLENBQUM7SUFDRixNQUFNLFlBQVksNkJBQTZCO01BQzdDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUMvQixJQUFJLGFBQWEsSUFBSSxHQUFHLE9BQU8sQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLENBQUMsT0FBTyxHQUFHLENBQUMsRUFBRTtRQUMvRSxPQUFPLEtBQUssQ0FBQztPQUNkO01BQ0QsT0FBTyxLQUFLLENBQUM7S0FDZCxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsY0FBYyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDOztJQUV0RSxNQUFNLFNBQVMsUUFBUSxVQUFVLE1BQU0sUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUQsTUFBTSxhQUFhLFVBQVU7TUFDM0IsTUFBTSxpQkFBaUIsTUFBTSxRQUFRLFNBQVMsQ0FBQztNQUMvQyxjQUFjLENBQUMscUJBQXFCLEVBQUU7UUFDcEMsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsSUFBSTtPQUNkLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLG9CQUFvQixNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN4RCxNQUFNLHFCQUFxQixNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN2RCxNQUFNLDBCQUEwQixNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQzs7SUFFbEUsTUFBTSxrQkFBa0IseUJBQXlCO01BQy9DLE1BQU0sTUFBTSxNQUFNLElBQUksQ0FBQztNQUN2QixNQUFNLGdCQUFnQixNQUFNLE9BQU8saUJBQWlCLEVBQUUsQ0FBQztNQUN2RCxNQUFNLFdBQVcsR0FBRyxlQUFlLEVBQUUsQ0FBQztNQUN0QyxNQUFNLFlBQVksa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDN0MsTUFBTSxhQUFhLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ25ELElBQUksSUFBSSxDQUFDO01BQ1QsSUFBSSxTQUFTLENBQUM7TUFDZCxJQUFJLGlCQUFpQixLQUFLLENBQUM7TUFDM0IsWUFBWSxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7TUFDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLFdBQVcsRUFBRSxhQUFhLENBQUMsRUFBRTtRQUNuRCxRQUFRLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztPQUNqQztNQUNELE9BQU8sT0FBTyxXQUFXLFdBQVcsRUFBRTtRQUNwQyxNQUFNLFdBQVcsSUFBSSxTQUFTLENBQUM7UUFDL0IsSUFBSSxDQUFDLGNBQWMsS0FBSyxRQUFRLEtBQUssTUFBTSxJQUFJLElBQUksYUFBYSxDQUFDLGVBQWUsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxFQUFFO1VBQ2pHLGlCQUFpQixJQUFJLENBQUM7U0FDdkI7UUFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLEVBQUU7VUFDaEMsUUFBUSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDM0IsWUFBWSxJQUFJLENBQUM7U0FDbEIsTUFBTTtVQUNMLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDZCxZQUFZLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUM5QyxRQUFRLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztXQUNqQztVQUNELFNBQVMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdCO09BQ0Y7TUFDRCxJQUFJLENBQUMsY0FBYyxJQUFJLFNBQVMsRUFBRTtRQUNoQyxTQUFTLFlBQVksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxrQkFBa0IsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3BFO01BQ0QsT0FBTyxRQUFRLENBQUM7S0FDakIsQ0FBQzs7SUFFRixNQUFNLFFBQVEsUUFBUSxJQUFJLENBQUM7SUFDM0IsTUFBTSxZQUFZLHNCQUFzQjtNQUN0QyxNQUFNLHlCQUF5QixjQUFjO1FBQzNDLE1BQU0sU0FBUyxVQUFVLFdBQVcsQ0FBQztRQUNyQyxJQUFJLE1BQU0sRUFBRTtVQUNWLFFBQVEsS0FBSyxDQUFDLFNBQVMsRUFBRSxRQUFRO1lBQy9CLE1BQU0sYUFBYSxDQUFDLElBQUksRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1dBQzFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsS0FBSyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7T0FDMUIsQ0FBQztNQUNGLE1BQU0sWUFBWSxLQUFLLE9BQU8sQ0FBQyxnQ0FBZ0MsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUN2RSxNQUFNLFdBQVcsZUFBZSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztNQUM3QyxNQUFNLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztNQUNqQyxNQUFNLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUN6QixNQUFNLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN6QixNQUFNLFdBQVcsTUFBTSxnQkFBZ0IsRUFBRSxDQUFDO01BQzFDLEtBQUssSUFBSSxPQUFPLFFBQVEsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLElBQUksV0FBVyxFQUFFO1FBQ2pFLElBQUksSUFBSSxTQUFTLEtBQUssSUFBSSxJQUFJLE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7VUFDdEQsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDbkIsTUFBTTtTQUNQO09BQ0Y7TUFDRCxJQUFJLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUNqQyxLQUFLLFlBQVksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDbkM7TUFDRCxLQUFLLFlBQVksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDbEMsTUFBTSxTQUFTLEVBQUUsY0FBYyxDQUFDO01BQ2hDLElBQUksTUFBTSxJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRTtRQUMzQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUNoQztNQUNELEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQ2pCLElBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO1FBQy9CLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ3BCO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLHNCQUFzQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsTUFBTSxvQkFBb0IsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sZ0JBQWdCLGtCQUFrQjtNQUN0QyxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzdCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDcEIsTUFBTSxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2xDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7T0FDckU7S0FDRixDQUFDO0lBQ0YsTUFBTSxlQUFlLFFBQVE7TUFDM0IsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMzQixNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO09BQ3BCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLGtDQUFrQztNQUN0RCxJQUFJLFdBQVcsS0FBSyxRQUFRLEVBQUU7UUFDNUIsTUFBTSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztPQUMvQixNQUFNO1FBQ0wsTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztPQUN0RDtLQUNGLENBQUM7O0lBRUYsTUFBTSxxQkFBcUIsdUJBQXVCO01BQ2hELElBQUksWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQzNCLE9BQU87VUFDTCxTQUFTO1VBQ1QsTUFBTTtTQUNQLENBQUM7T0FDSDtNQUNELE1BQU0sT0FBTyxRQUFRLFFBQVEsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDakQsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDdEIsT0FBTztVQUNMLFdBQVcsSUFBSTtVQUNmLFFBQVEsTUFBTSxJQUFJLFNBQVMsV0FBVyxPQUFPLEdBQUcsSUFBSSxLQUFLLE9BQU8sR0FBRyxDQUFDO1NBQ3JFLENBQUM7T0FDSCxNQUFNLElBQUksSUFBSSxnQkFBZ0IsSUFBSSxZQUFZLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxFQUFFO1FBQ3JFLE9BQU87VUFDTCxXQUFXLElBQUksZ0JBQWdCO1VBQy9CLFFBQVEsSUFBSSxnQkFBZ0IsS0FBSyxPQUFPO1NBQ3pDLENBQUM7T0FDSCxNQUFNLElBQUksSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLElBQUksWUFBWSxDQUFDLEVBQUU7UUFDN0QsT0FBTztVQUNMLFdBQVcsSUFBSSxZQUFZO1VBQzNCLFFBQVEsQ0FBQztTQUNWLENBQUM7T0FDSDtNQUNELE9BQU87UUFDTCxTQUFTO1FBQ1QsTUFBTTtPQUNQLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsT0FBTztNQUM1QixNQUFNLFNBQVMsR0FBRyxXQUFXLEVBQUUsQ0FBQztNQUNoQyxNQUFNLGFBQWEsa0JBQWtCLENBQUMsR0FBRyxlQUFlLEVBQUUsR0FBRyxZQUFZLENBQUMsQ0FBQztNQUMzRSxNQUFNLFNBQVMsQ0FBQyxVQUFVLFVBQVUsRUFBRSxVQUFVLE9BQU8sQ0FBQyxDQUFDO01BQ3pELE1BQU0sV0FBVyxrQkFBa0IsQ0FBQyxHQUFHLGFBQWEsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDO01BQ3JFLE1BQU0sT0FBTyxDQUFDLFFBQVEsVUFBVSxFQUFFLFFBQVEsT0FBTyxDQUFDLENBQUM7TUFDbkQsT0FBTyxNQUFNLENBQUM7S0FDZixDQUFDOztJQUVGLE1BQU0sWUFBWTtNQUNoQixJQUFJO01BQ0osSUFBSTtNQUNKLElBQUk7S0FDTCxDQUFDO0lBQ0YsTUFBTSxlQUFlLFNBQVMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sZ0JBQWdCLGtCQUFrQjtNQUN0QyxNQUFNLGlCQUFpQixJQUFJLElBQUksTUFBTSxVQUFVLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUMvRCxPQUFPLE1BQU0sSUFBSSxVQUFVLENBQUMsY0FBYyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztLQUN2RyxDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsZ0NBQWdDLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxjQUFjLE9BQU8sS0FBSyxDQUFDLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVUsQ0FBQztJQUMxSixNQUFNLGVBQWUsY0FBYyxRQUFRLENBQUMsVUFBVSxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNuRyxNQUFNLHNCQUFzQixVQUFVO01BQ3BDLE1BQU0sYUFBYSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDekMsTUFBTSxpQkFBaUIsTUFBTSxVQUFVLGtCQUFrQixFQUFFLENBQUM7TUFDNUQsSUFBSSxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLEVBQUU7UUFDcEQsT0FBTyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7T0FDakMsTUFBTTtRQUNMLE9BQU8sUUFBUSxDQUFDLGNBQWMsRUFBRSxPQUFPO1VBQ3JDLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFVBQVUsS0FBSyxHQUFHLENBQUM7U0FDOUMsQ0FBQyxDQUFDO09BQ0o7S0FDRixDQUFDO0lBQ0YsTUFBTSwyQkFBMkIsa0JBQWtCO01BQ2pELE1BQU0sZ0JBQWdCLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPO1FBQzlDLE1BQU0sV0FBVyxNQUFNLElBQUksVUFBVSxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEYsT0FBTyxRQUFRLEdBQUcsUUFBUSxHQUFHLEdBQUcsQ0FBQztPQUNsQyxDQUFDLENBQUM7TUFDSCxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUM5QixDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsVUFBVTtNQUNyQyxNQUFNLGlCQUFpQixNQUFNLFVBQVUsa0JBQWtCLEVBQUUsQ0FBQztNQUM1RCxPQUFPLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7S0FDbkYsQ0FBQztJQUNGLE1BQU0scUJBQXFCLFVBQVUsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzFGLE1BQU0sd0JBQXdCLGlCQUFpQjtNQUM3QyxNQUFNLGtCQUFrQixNQUFNLElBQUksV0FBVyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztNQUM1RCxPQUFPLGVBQWUsT0FBTyxHQUFHLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxRQUFRLEVBQUUsQ0FBQztLQUMzRSxDQUFDO0lBQ0YsTUFBTSxhQUFhLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLFlBQVksTUFBTSxhQUFhLENBQUMsSUFBSSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMvSixNQUFNLHFCQUFxQixpQkFBaUI7TUFDMUMsTUFBTSxlQUFlLE1BQU0sSUFBSSxXQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sSUFBSSxRQUFRLENBQUMsQ0FBQztNQUNwRSxNQUFNLGNBQWMsSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPLFVBQVUsQ0FBQyxNQUFNLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQzlFLE9BQU8sV0FBVyxNQUFNLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0tBQzVDLENBQUM7SUFDRixNQUFNLHlCQUF5QixpQkFBaUI7TUFDOUMsTUFBTSxjQUFjLE1BQU0sSUFBSSxXQUFXLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUN6RixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUMxQixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsVUFBVTtNQUNqQyxNQUFNLFlBQVksc0JBQXNCLENBQUMsTUFBTSxFQUFFLE1BQU0sVUFBVSxTQUFTLEVBQUUsQ0FBQyxDQUFDO01BQzlFLE1BQU0sa0JBQWtCLFFBQVEsQ0FBQyxNQUFNLFVBQVUsa0JBQWtCLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztNQUNuRixPQUFPLFNBQVMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztLQUNwRCxDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsVUFBVTtNQUNyQyxNQUFNLGdCQUFnQixnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUMvQyxPQUFPLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztLQUNsRCxDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsbUJBQW1CO01BQzVDLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsc0JBQXNCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUN2RixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUMxQixDQUFDOztJQUVGLE1BQU0sZUFBZSxRQUFRLFNBQVMsS0FBSyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUM7SUFDNUQsTUFBTSxTQUFTLHVCQUF1QixTQUFTLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxTQUFTLEtBQUssUUFBUSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEosTUFBTSxzQkFBc0IscUJBQXFCLE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JHLE1BQU0sbUNBQW1DLFVBQVU7TUFDakQsTUFBTSxhQUFhLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUN6QyxPQUFPLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztLQUNoRCxDQUFDO0lBQ0YsTUFBTSwwQkFBMEIscUJBQXFCO01BQ25ELE1BQU0sYUFBYSxNQUFNLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztNQUM3RCxPQUFPLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztLQUNoRCxDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsK0JBQStCO01BQzFELE1BQU0sY0FBYyxNQUFNLFVBQVUsUUFBUSxFQUFFLENBQUM7TUFDL0MsaUJBQWlCLENBQUM7UUFDaEIsU0FBUyxNQUFNLElBQUksV0FBVyxDQUFDLFdBQVcsQ0FBQztRQUMzQyxTQUFTLFdBQVc7T0FDckIsQ0FBQyxDQUFDO01BQ0gsTUFBTSxHQUFHLENBQUMsWUFBWSxFQUFFLGlCQUFpQixDQUFDLENBQUM7TUFDM0MsT0FBTyxNQUFNLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0tBQzFELENBQUM7O0lBRUYsTUFBTSxlQUFlLHFCQUFxQjtNQUN4QyxNQUFNLE1BQU0sS0FBSyxJQUFJLFFBQVEsQ0FBQztNQUM5QixNQUFNLFdBQVcsR0FBRyx1QkFBdUIsRUFBRSxDQUFDO01BQzlDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVztRQUMxQixRQUFRLFlBQVksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO09BQ25DLENBQUMsQ0FBQztNQUNILE9BQU8sWUFBWSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDdkMsQ0FBQzs7SUFFRixNQUFNLGdCQUFnQiw2QkFBNkIsTUFBTSxTQUFTLENBQUMsY0FBYyxFQUFFO01BQ2pGLE1BQU07TUFDTixPQUFPO0tBQ1IsQ0FBQyxDQUFDOztJQUVILE1BQU0sUUFBUSxLQUFLLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sT0FBTyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDakMsTUFBTSxhQUFhLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sWUFBWSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV0QyxNQUFNLGNBQWMsT0FBTyxHQUFHLE1BQU0sS0FBSyxTQUFTLElBQUksVUFBVSxDQUFDLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxDQUFDOztJQUU3RixNQUFNLGNBQWMsMEJBQTBCO01BQzVDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDcEIsT0FBTyxNQUFNLENBQUMsb0NBQW9DLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RHLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLEdBQUcsS0FBSyxDQUFDLENBQUM7T0FDekQ7TUFDRCxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNwQixHQUFHLE1BQU0sWUFBWSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztPQUN4QztLQUNGLENBQUM7SUFDRixNQUFNLE1BQU0sOEJBQThCO01BQ3hDLE1BQU0sTUFBTSxPQUFPLElBQUksQ0FBQztNQUN4QixXQUFXLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNuQyxDQUFDOztJQUVGLE1BQU0sY0FBYyxtQkFBbUI7TUFDckMsUUFBUSxDQUFDLE1BQU0sS0FBSyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUM7S0FDbkMsQ0FBQztJQUNGLE1BQU0sZUFBZSxZQUFZO01BQy9CLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDM0M7S0FDRixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsa0JBQWtCO01BQ3ZDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQzlDLENBQUM7SUFDRixNQUFNLGdCQUFnQixxQkFBcUI7TUFDekMsTUFBTSxVQUFVO1FBQ2QsTUFBTSxZQUFZLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO1FBQzNDLE1BQU0sWUFBWSxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztPQUN4QyxDQUFDO01BQ0YsUUFBUSxDQUFDLE9BQU8sS0FBSyxFQUFFLE9BQU8sS0FBSyxDQUFDLENBQUM7TUFDckMsT0FBTyxPQUFPLENBQUM7S0FDaEIsQ0FBQztJQUNGLE1BQU0saUJBQWlCLHdCQUF3QjtNQUM3QyxNQUFNLFdBQVcsRUFBRSxDQUFDO01BQ3BCLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzdCLFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO09BQ3JEO01BQ0QsT0FBTyxRQUFRLENBQUM7S0FDakIsQ0FBQztJQUNGLE1BQU0sbUJBQW1CLHFCQUFxQjtNQUM1QyxLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM1QyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7T0FDbEQ7TUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxXQUFXO1FBQzdCLE1BQU0sQ0FBQyxPQUFPLEtBQUssRUFBRSxLQUFLLGVBQWUsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxPQUFPLEtBQUssRUFBRSxLQUFLLGVBQWUsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxPQUFPLEtBQUssRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDO09BQ3JDLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLG1CQUFtQixvQkFBb0I7TUFDM0MsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtRQUN6QyxPQUFPLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxLQUFLLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQztPQUNyRDtNQUNELE1BQU0sQ0FBQyxPQUFPLEtBQUssRUFBRSxLQUFLLGVBQWUsQ0FBQyxDQUFDO0tBQzVDLENBQUM7SUFDRixNQUFNLGFBQWEsMEJBQTBCO01BQzNDLE1BQU0sT0FBTyxZQUFZLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDL0MsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNuQixNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQ3RCLE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQztJQUNGLE1BQU0sYUFBYSxtQkFBbUI7TUFDcEMsUUFBUSxDQUFDLE9BQU8sS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzdCLE9BQU8sS0FBSyxHQUFHLElBQUksQ0FBQztLQUNyQixDQUFDO0lBQ0YsTUFBTSxlQUFlLHdCQUF3QjtNQUMzQyxNQUFNLFVBQVUsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUM7TUFDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVztRQUM1QixNQUFNLE9BQU8sVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLGVBQWUsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ3BFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUIsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ2xDLENBQUMsQ0FBQztNQUNILE9BQU8sT0FBTyxDQUFDO0tBQ2hCLENBQUM7SUFDRixNQUFNLFlBQVksd0JBQXdCO01BQ3hDLE1BQU0sV0FBVyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDO01BQ3pFLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUN2QixnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDbEMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztNQUMvQixPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQzlCLENBQUM7SUFDRixNQUFNLGNBQWMsb0JBQW9CO01BQ3RDLE1BQU0sT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFLGlCQUFpQjtRQUMzQyxPQUFPLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ3JHLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDUCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsT0FBTyxLQUFLLENBQUMsQ0FBQztLQUNoRCxDQUFDOztJQUVGLE1BQU0sU0FBUyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckMsTUFBTSxvQkFBb0IsTUFBTSxVQUFVLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5RCxNQUFNLG1CQUFtQixNQUFNLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDOztJQUU1RCxNQUFNLGFBQWEsU0FBUyxLQUFLLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDNUMsTUFBTSxhQUFhLFNBQVMsS0FBSyxXQUFXLENBQUM7SUFDN0MsTUFBTSxtQkFBbUIsTUFBTTtNQUM3QixNQUFNLGFBQWEsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQ2hDLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUM7TUFDNUUsT0FBTyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzNCLENBQUM7SUFDRixNQUFNLGNBQWMsMkJBQTJCLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUztNQUN6RixLQUFLO01BQ0wsT0FBTyxLQUFLO01BQ1osVUFBVTtNQUNWLFNBQVMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO01BQzdCLGdCQUFnQixPQUFPLENBQUMsRUFBRSxDQUFDO01BQzNCLGdCQUFnQixPQUFPLENBQUMsSUFBSSxDQUFDO01BQzdCLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQztLQUNyQixDQUFDLENBQUMsQ0FBQzs7SUFFSixNQUFNLGNBQWMsd0JBQXdCO01BQzFDLFFBQVEsV0FBVztXQUNkLFFBQVE7UUFDWCxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ2QsTUFBTTtXQUNILFNBQVM7UUFDWixLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ2QsTUFBTTtXQUNILFNBQVM7UUFDWixLQUFLLE1BQU0sR0FBRyxDQUFDLENBQUM7T0FDakI7TUFDRCxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUM7S0FDcEIsQ0FBQzs7SUFFRixNQUFNLHNCQUFzQixvQkFBb0I7TUFDOUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxTQUFTLENBQUM7TUFDbEMsTUFBTSxlQUFlLEdBQUcsRUFBRSxHQUFHLE1BQU0sZUFBZSxFQUFFLENBQUM7S0FDdEQsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLFNBQVM7TUFDbkMsS0FBSyxlQUFlLEdBQUcsTUFBTSxDQUFDLEtBQUssZUFBZSxFQUFFLGlCQUFpQixHQUFHLEtBQUssT0FBTyxDQUFDLENBQUM7S0FDdkYsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLG9CQUFvQjtNQUM5QyxNQUFNLFFBQVEsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7TUFDbkMsTUFBTSxVQUFVLFNBQVMsS0FBSyxNQUFNLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxNQUFNLENBQUM7TUFDL0QsTUFBTSxRQUFRLFNBQVMsS0FBSyxNQUFNLEdBQUcsS0FBSyxDQUFDO01BQzNDLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDdkksQ0FBQztJQUNGLE1BQU0sbUJBQW1CLFdBQVc7TUFDbEMsTUFBTSxDQUFDLE9BQU8sRUFBRSxjQUFjO1FBQzVCLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU07VUFDekMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUNmLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1dBQzVCO1NBQ0YsRUFBRSxpQkFBaUIsbUJBQW1CLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7T0FDaEUsQ0FBQyxDQUFDO01BQ0gsT0FBTyxPQUFPLENBQUM7S0FDaEIsQ0FBQzs7SUFFRixNQUFNLE9BQU8sV0FBVztNQUN0QixJQUFJLFFBQVEsT0FBTyxDQUFDO01BQ3BCLE1BQU0sTUFBTSxNQUFNO1FBQ2hCLE9BQU8sS0FBSyxDQUFDO09BQ2QsQ0FBQztNQUNGLE1BQU0sTUFBTSxLQUFLO1FBQ2YsUUFBUSxDQUFDLENBQUM7T0FDWCxDQUFDO01BQ0YsT0FBTztRQUNMLEdBQUc7UUFDSCxHQUFHO09BQ0osQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxZQUFZLGdEQUFnRCxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU07TUFDM0csYUFBYSxLQUFLLENBQUMsYUFBYTtRQUM5QixJQUFJLEVBQUUsQ0FBQyxTQUFTLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRTtVQUM3QixjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMxQjtPQUNGLENBQUMsQ0FBQztNQUNILE1BQU0sbUJBQW1CLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLGNBQWMsSUFBSSxFQUFFLENBQUMsQ0FBQztNQUN4RSxhQUFhLEtBQUssQ0FBQyxhQUFhO1FBQzlCLElBQUksRUFBRSxDQUFDLFNBQVMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO1VBQzNCLGNBQWMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzNCO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxtQkFBbUIsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLFNBQVMsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDckksT0FBTyxnQkFBZ0IsUUFBUSxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0tBQzVELEVBQUUsUUFBUSxTQUFTLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRSxNQUFNLFlBQVksZ0RBQWdELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVztNQUNoRyxNQUFNLFNBQVMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLFNBQVMsR0FBRyxTQUFTLENBQUM7TUFDdkQsTUFBTSxXQUFXLEtBQUssR0FBRyxDQUFDLENBQUM7TUFDM0IsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDakUsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxhQUFhLDBCQUEwQjtNQUMzQyxNQUFNLGlCQUFpQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDbkMsTUFBTSxlQUFlLENBQUMsQ0FBQztNQUN2QixPQUFPLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUztRQUN6QixZQUFZLElBQUk7UUFDaEIsU0FBUyxTQUFTLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDO09BQ3RFLENBQUMsQ0FBQyxDQUFDO0tBQ0wsQ0FBQzs7SUFFRixNQUFNLG9CQUFvQixxQkFBcUI7TUFDN0MsTUFBTSxvQkFBb0IsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDcEQsT0FBTyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsU0FBUztRQUNyQyxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDNUMsT0FBTyxZQUFZLFFBQVEsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQztPQUNuRSxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIscUJBQXFCO01BQzVDLE1BQU0sb0JBQW9CLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ3BELE9BQU8sV0FBVyxDQUFDLE1BQU0sZ0JBQWdCLEVBQUUsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7S0FDekUsQ0FBQztJQUNGLE1BQU0saUJBQWlCLHFCQUFxQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRSxXQUFXO01BQ3hGLE1BQU0sa0JBQWtCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO01BQ3pELE9BQU8sZUFBZSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDakcsQ0FBQyxDQUFDO0lBQ0gsTUFBTSx3QkFBd0IsMEJBQTBCO01BQ3RELE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFLFNBQVMsV0FBVyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQ2pGLENBQUM7SUFDRixNQUFNLG1CQUFtQixVQUFVO01BQ2pDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxZQUFZLFFBQVEsQ0FBQyxDQUFDO01BQ2xGLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRSxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLGlCQUFpQjtRQUN2SSxLQUFLO1FBQ0wsR0FBRztPQUNKLENBQUMsQ0FBQyxDQUFDO0tBQ0wsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLGdDQUFnQztNQUN0RCxNQUFNLFlBQVksVUFBVSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO01BQzlELE1BQU0sQ0FBQyxTQUFTLEVBQUUsWUFBWTtRQUM1QixxQkFBcUIsQ0FBQyxRQUFRLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNyRCxNQUFNLGdCQUFnQixjQUFjLENBQUMsTUFBTSxFQUFFLFFBQVEsUUFBUSxDQUFDLENBQUM7UUFDL0QsTUFBTSxDQUFDLGFBQWEsRUFBRSxnQkFBZ0I7VUFDcEMsYUFBYSxDQUFDLE1BQU0sRUFBRSxXQUFXLEtBQUssUUFBUSxHQUFHLFlBQVksR0FBRyxhQUFhLEVBQUUsWUFBWSxJQUFJLENBQUMsQ0FBQztTQUNsRyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsUUFBUSxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDM0MsTUFBTSxDQUFDLFFBQVEsV0FBVyxDQUFDLENBQUM7T0FDN0IsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLHVCQUF1Qix5QkFBeUI7TUFDcEQsTUFBTSxRQUFRLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO01BQ3BELE1BQU0sVUFBVSxPQUFPLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUNwRCxJQUFJLFlBQVksS0FBSyxDQUFDO01BQ3RCLElBQUksS0FBSyxPQUFPLElBQUksT0FBTyxPQUFPLEVBQUU7UUFDbEMsTUFBTSxXQUFXLE1BQU0sVUFBVSxZQUFZLEVBQUUsQ0FBQztRQUNoRCxlQUFlLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM1QyxhQUFhLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1QyxNQUFNLFVBQVUsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sVUFBVSxPQUFPLENBQUMsY0FBYyxDQUFDLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkUsTUFBTSxZQUFZLEVBQUUsQ0FBQztRQUNyQixZQUFZLElBQUksQ0FBQztPQUNsQjtNQUNELE9BQU8sU0FBUyxDQUFDO0tBQ2xCLENBQUM7SUFDRixNQUFNLG9CQUFvQix5QkFBeUIsQ0FBQyxnQ0FBZ0MsQ0FBQyxNQUFNLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDMUksTUFBTSxzQkFBc0IsVUFBVSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDMUUsTUFBTSx1QkFBdUIsVUFBVSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUUsTUFBTSx1QkFBdUIsVUFBVSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7O0lBRTVFLE1BQU0sWUFBWSxRQUFRLENBQUM7SUFDM0IsTUFBTSxTQUFTLFFBQVEsSUFBSSxLQUFLLFNBQVMsQ0FBQzs7SUFFMUMsTUFBTSxhQUFhLDhCQUE4QixVQUFVLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7O0lBRS9GLE1BQU0sV0FBVyxxQkFBcUIsVUFBVSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7O0lBRTdFLElBQUksV0FBVyxPQUFPLEtBQUssTUFBTSxRQUFRLENBQUMsNkJBQTZCLENBQUMsQ0FBQzs7SUFFekUsTUFBTSxRQUFRLFFBQVEsSUFBSSxDQUFDO0lBQzNCLE1BQU0saUJBQWlCLE9BQU87TUFDNUIsTUFBTSxXQUFXLEVBQUUsQ0FBQztNQUNwQixNQUFNLGdCQUFnQixTQUFTO1FBQzdCLElBQUksWUFBWSxHQUFHLENBQUMsS0FBSyxHQUFHLGdCQUFnQixHQUFHLGNBQWMsQ0FBQyxDQUFDO1FBQy9ELElBQUksU0FBUyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsR0FBRyxXQUFXLENBQUMsQ0FBQztRQUN0RCxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRTtVQUN4QixNQUFNLGFBQWEsS0FBSyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsaUJBQWlCLFVBQVUsRUFBRSxDQUFDLENBQUM7VUFDekUsSUFBSSxTQUFTLGNBQWMsRUFBRSxFQUFFO1lBQzdCLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsV0FBVyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDM0QsSUFBSSxLQUFLLEVBQUU7Y0FDVCxTQUFTLGFBQWEsQ0FBQyxVQUFVLEVBQUUsU0FBUyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzthQUNsRSxNQUFNO2NBQ0wsS0FBSyxZQUFZLENBQUMsVUFBVSxFQUFFLFNBQVMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFDN0Q7V0FDRixNQUFNO1lBQ0wsU0FBUyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7V0FDbkM7VUFDRCxZQUFZLFVBQVUsQ0FBQztVQUN2QixTQUFTLENBQUMsQ0FBQztTQUNaO1FBQ0QsUUFBUSxDQUFDLEtBQUssR0FBRyxnQkFBZ0IsR0FBRyxjQUFjLENBQUMsR0FBRyxTQUFTLENBQUM7UUFDaEUsUUFBUSxDQUFDLEtBQUssR0FBRyxhQUFhLEdBQUcsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO09BQ3hELENBQUM7TUFDRixhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDcEIsSUFBSSxDQUFDLEdBQUcsVUFBVSxFQUFFO1FBQ2xCLGFBQWEsRUFBRSxDQUFDO09BQ2pCO01BQ0QsT0FBTyxRQUFRLENBQUM7S0FDakIsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLFlBQVk7TUFDbEMsTUFBTSxrQkFBa0IsU0FBUztRQUMvQixNQUFNLFlBQVksYUFBYTtVQUM3QixJQUFJLEVBQUUsQ0FBQztVQUNQLElBQUksT0FBTyxDQUFDLEtBQUssU0FBUyxXQUFXLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQztVQUMxRixJQUFJLE1BQU0sQ0FBQyxDQUFDO1VBQ1osT0FBTyxJQUFJLEVBQUU7WUFDWCxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7Y0FDdEIsT0FBTyxHQUFHLENBQUM7YUFDWjtZQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxhQUFhLENBQUMsZUFBZSxDQUFDLEtBQUssVUFBVSxFQUFFO2NBQ3pFLEdBQUcsRUFBRSxDQUFDO2FBQ1A7WUFDRCxPQUFPLElBQUksWUFBWSxDQUFDO1dBQ3pCO1VBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNYLENBQUM7UUFDRixJQUFJLFlBQVksUUFBUSxDQUFDLEtBQUssR0FBRyxnQkFBZ0IsR0FBRyxjQUFjLENBQUMsQ0FBQztRQUNwRSxJQUFJLFNBQVMsUUFBUSxDQUFDLEtBQUssR0FBRyxhQUFhLEdBQUcsV0FBVyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLFNBQVMsRUFBRTtVQUNkLE9BQU87U0FDUjtRQUNELElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsV0FBVyxFQUFFO1VBQ2hELE1BQU0sT0FBTyxTQUFTLENBQUM7VUFDdkIsU0FBUyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7VUFDOUIsWUFBWSxTQUFTLFdBQVcsQ0FBQztVQUNqQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUNuQixJQUFJLENBQUMsU0FBUyxjQUFjLEVBQUUsSUFBSSxLQUFLLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMxRCxTQUFTLFlBQVksQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1dBQzNDO1NBQ0Y7UUFDRCxRQUFRLENBQUMsS0FBSyxHQUFHLGdCQUFnQixHQUFHLGNBQWMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUNoRSxRQUFRLENBQUMsS0FBSyxHQUFHLGFBQWEsR0FBRyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7T0FDeEQsQ0FBQztNQUNGLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN0QixlQUFlLEVBQUUsQ0FBQztNQUNsQixNQUFNLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztNQUM5QixHQUFHLFNBQVMsQ0FBQyxRQUFRLGVBQWUsRUFBRSxRQUFRLFlBQVksQ0FBQyxDQUFDO01BQzVELElBQUksUUFBUSxhQUFhLEVBQUU7UUFDekIsR0FBRyxPQUFPLENBQUMsUUFBUSxhQUFhLEVBQUUsUUFBUSxVQUFVLENBQUMsQ0FBQztPQUN2RDtNQUNELE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzVCLENBQUM7O0lBRUYsTUFBTSwrQkFBK0IsWUFBWTtNQUMvQyxRQUFRLFFBQVE7V0FDWCxJQUFJO1FBQ1AsT0FBTyxjQUFjLENBQUM7V0FDbkIsSUFBSTtRQUNQLE9BQU8sY0FBYyxDQUFDO1dBQ25CLElBQUk7UUFDUCxPQUFPLGNBQWMsQ0FBQztPQUN2QjtLQUNGLENBQUM7O0lBRUYsTUFBTSxrQkFBa0IscUJBQXFCO01BQzNDLE1BQU0sT0FBTyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUM7TUFDMUUsR0FBRyxTQUFTLENBQUMsRUFBRSxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzNDLENBQUM7SUFDRixNQUFNLGFBQWEsZ0JBQWdCO01BQ2pDLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxnQkFBZ0I7UUFDbkMsR0FBRyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQzlCLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGtCQUFrQixxQkFBcUI7TUFDM0MsVUFBVSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO01BQzFDLFFBQVEsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNO1FBQ3hDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztPQUNoRCxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSx3QkFBd0IscUJBQXFCO01BQ2pELGVBQWUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ2pDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ2xDLENBQUM7SUFDRixNQUFNLGVBQWUsMEJBQTBCO01BQzdDLFFBQVEsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUNsRSxDQUFDO0lBQ0YsTUFBTSxXQUFXLGtCQUFrQixhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sT0FBTyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7SUFDM0csTUFBTSxrQkFBa0IsOEJBQThCO01BQ3BELElBQUksWUFBWSxHQUFHLENBQUMsS0FBSyxHQUFHLGdCQUFnQixHQUFHLGNBQWMsQ0FBQyxDQUFDO01BQy9ELE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsR0FBRyxXQUFXLENBQUMsQ0FBQztNQUN4RCxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUN4QixZQUFZLFNBQVMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLFdBQVcsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO09BQ2xHO01BQ0QsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxZQUFZLENBQUMsRUFBRTtRQUN6QyxZQUFZLFNBQVMsWUFBWSxDQUFDO09BQ25DO01BQ0QsTUFBTSxvQkFBb0IsUUFBUTtRQUNoQyxPQUFPLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFdBQVcsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1VBQ3BFLE9BQU8sSUFBSSxXQUFXLENBQUM7U0FDeEI7UUFDRCxPQUFPLElBQUksQ0FBQztPQUNiLENBQUM7TUFDRixNQUFNLHNCQUFzQix3QkFBd0I7UUFDbEQsSUFBSSxFQUFFLENBQUM7UUFDUCxNQUFNLFNBQVMsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDckUsTUFBTSxNQUFNLE9BQU8sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3RDLElBQUksSUFBSSxDQUFDO1FBQ1QsT0FBTyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFO1VBQzNCLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksWUFBWSxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLE1BQU0sQ0FBQyxDQUFDLEVBQUU7WUFDekksT0FBTyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUM1QjtTQUNGO1FBQ0QsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCLENBQUM7TUFDRixJQUFJLEtBQUssSUFBSSxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDcEMsSUFBSSxNQUFNLENBQUMsU0FBUyxZQUFZLENBQUMsRUFBRTtVQUNqQyxZQUFZLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3BFLE1BQU07VUFDTCxJQUFJLFNBQVMsV0FBVyxLQUFLLElBQUksSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLFNBQVMsV0FBVyxDQUFDLEVBQUU7WUFDM0UsWUFBWSxTQUFTLFdBQVcsQ0FBQztXQUNsQztVQUNELE9BQU8sU0FBUyxnQkFBZ0IsS0FBSyxJQUFJLEtBQUssUUFBUSxDQUFDLE1BQU0sRUFBRSxTQUFTLGdCQUFnQixDQUFDLElBQUksWUFBWSxDQUFDLFNBQVMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFO1lBQ3JJLFlBQVksU0FBUyxnQkFBZ0IsQ0FBQztXQUN2QztTQUNGO09BQ0Y7TUFDRCxJQUFJLENBQUMsS0FBSyxJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUNyQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLFlBQVksQ0FBQyxFQUFFO1VBQ2pDLFlBQVksbUJBQW1CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDbkUsTUFBTTtVQUNMLElBQUksU0FBUyxXQUFXLEtBQUssSUFBSSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxXQUFXLENBQUMsRUFBRTtZQUMzRSxZQUFZLFNBQVMsV0FBVyxDQUFDO1dBQ2xDO1VBQ0QsT0FBTyxTQUFTLFlBQVksS0FBSyxJQUFJLEtBQUssUUFBUSxDQUFDLE1BQU0sRUFBRSxTQUFTLFlBQVksQ0FBQyxJQUFJLFlBQVksQ0FBQyxTQUFTLFlBQVksQ0FBQyxDQUFDLEVBQUU7WUFDekgsWUFBWSxTQUFTLFlBQVksQ0FBQztXQUNuQztTQUNGO09BQ0Y7TUFDRCxPQUFPLFNBQVMsV0FBVyxLQUFLLElBQUksRUFBRTtRQUNwQyxNQUFNLFNBQVMsU0FBUyxXQUFXLENBQUM7UUFDcEMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1VBQ2xDLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxXQUFXLEtBQUssQ0FBQyxNQUFNLFNBQVMsQ0FBQyxFQUFFO1VBQ3JDLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBQ0QsWUFBWSxNQUFNLENBQUM7T0FDcEI7TUFDRCxPQUFPLFNBQVMsQ0FBQztLQUNsQixDQUFDO0lBQ0YsTUFBTSx3QkFBd0IsdUJBQXVCO01BQ25ELE1BQU0sYUFBYSxFQUFFLENBQUM7TUFDdEIsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLE1BQU0sWUFBWSxlQUFlLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDM0QsTUFBTSxVQUFVLGVBQWUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztNQUMxRCxJQUFJLEtBQUssQ0FBQztNQUNWLE1BQU0sV0FBVyxFQUFFLENBQUM7TUFDcEIsS0FBSyxJQUFJLE9BQU8sU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLElBQUksWUFBWSxFQUFFO1FBQ3hELFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRTtVQUNwQixNQUFNO1NBQ1A7T0FDRjtNQUNELFFBQVEsS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRO1FBQzlCLElBQUksRUFBRSxDQUFDO1FBQ1AsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO1VBQzdCLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQ3RCLFFBQVEsSUFBSSxDQUFDO1VBQ2IsT0FBTztTQUNSO1FBQ0QsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7VUFDbkMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDZCxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUNsQjtVQUNELFFBQVEsSUFBSSxDQUFDO1VBQ2IsT0FBTztTQUNSO1FBQ0QsTUFBTSxjQUFjLElBQUksWUFBWSxDQUFDO1FBQ3JDLElBQUksUUFBUSxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUU7VUFDakMsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUU7WUFDM0csUUFBUSxJQUFJLENBQUM7WUFDYixPQUFPO1dBQ1I7U0FDRjtRQUNELElBQUksQ0FBQyxLQUFLLEVBQUU7VUFDVixRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQ3hCLENBQUMsS0FBSyxJQUFJLFdBQVcsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztVQUN6RixVQUFVLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN4QjtRQUNELEtBQUssWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ3pCLENBQUMsQ0FBQztNQUNILE9BQU8sVUFBVSxDQUFDO0tBQ25CLENBQUM7SUFDRixNQUFNLHFCQUFxQixzQkFBc0I7TUFDL0MsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO01BQ3RELElBQUksY0FBYyxNQUFNLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxDQUFDO01BQzFELGNBQWMsV0FBVyxLQUFLLElBQUksR0FBRyxFQUFFLEdBQUcsV0FBVyxDQUFDO01BQ3RELE9BQU8sUUFBUSxLQUFLLFdBQVcsQ0FBQztLQUNqQyxDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsbUJBQW1CO01BQzVDLE1BQU0sUUFBUSxNQUFNLFVBQVUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzlDLE1BQU0sYUFBYSxlQUFlLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQzFFLElBQUksUUFBUSxDQUFDLFlBQVksUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFlBQVksUUFBUSxDQUFDLEtBQUssd0JBQXdCLENBQUMsQ0FBQyxFQUFFO1FBQ25HLE9BQU8sS0FBSyx3QkFBd0IsQ0FBQztPQUN0QyxNQUFNO1FBQ0wsT0FBTyxLQUFLLENBQUM7T0FDZDtLQUNGLENBQUM7SUFDRixNQUFNLFlBQVksOEJBQThCO01BQzlDLE1BQU0sTUFBTSxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7TUFDdEMsSUFBSSxlQUFlLElBQUksQ0FBQztNQUN4QixNQUFNLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ3pFLE1BQU0sTUFBTSxNQUFNLElBQUksQ0FBQztNQUN2QixJQUFJLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxVQUFVLFFBQVEsRUFBRSxDQUFDLEtBQUssT0FBTyxFQUFFO1FBQ2xFLE9BQU87T0FDUjtNQUNELFdBQVcsUUFBUSxZQUFZLEVBQUUsQ0FBQztNQUNsQyxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUU7UUFDckIsZUFBZSxJQUFJLENBQUM7T0FDckI7TUFDRCxNQUFNLFdBQVcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ3JDLE1BQU0scUJBQXFCLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLE1BQU0sSUFBSSxXQUFXLENBQUMsQ0FBQztNQUNyRyxRQUFRLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxTQUFTO1FBQ3pDLElBQUksU0FBUyxDQUFDO1FBQ2QsTUFBTSxVQUFVLEtBQUssZ0JBQWdCLENBQUM7UUFDdEMsTUFBTSxTQUFTLEtBQUssV0FBVyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7VUFDM0IsSUFBSSxPQUFPLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQy9HLFlBQVksT0FBTyxDQUFDO1lBQ3BCLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ3hDLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1dBQzVCLE1BQU07WUFDTCxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sYUFBYSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0QyxTQUFTLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztXQUN6QztVQUNELFlBQVksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQ3ZCLFFBQVE7WUFDUixjQUFjO1lBQ2QsZUFBZTtZQUNmLGFBQWE7WUFDYixZQUFZO1lBQ1osU0FBUztZQUNULGVBQWU7WUFDZixnQkFBZ0I7WUFDaEIsY0FBYztZQUNkLGFBQWE7V0FDZCxDQUFDLENBQUM7VUFDSCxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1VBQzlDLHNCQUFzQixDQUFDLE1BQU0sSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQy9DO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztLQUNwRCxDQUFDO0lBQ0YsTUFBTSxlQUFlLGtCQUFrQjtNQUNyQyxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsTUFBTSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDO0tBQy9HLENBQUM7SUFDRixNQUFNLG1CQUFtQix1QkFBdUI7TUFDOUMsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNqRSxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO01BQzNELE9BQU8sV0FBVyxLQUFLLEtBQUssQ0FBQztLQUM5QixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsZ0JBQWdCO01BQ3JDLE9BQU8sSUFBSSxVQUFVLEtBQUssSUFBSSxVQUFVLENBQUM7S0FDMUMsQ0FBQztJQUNGLE1BQU0sY0FBYyx1QkFBdUI7TUFDekMsT0FBTyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztLQUMxRyxDQUFDO0lBQ0YsTUFBTSx5QkFBeUIsb0JBQW9CO01BQ2pELElBQUksSUFBSSxDQUFDO01BQ1QsSUFBSSxVQUFVLFNBQVMsWUFBWSxDQUFDO01BQ3BDLElBQUksV0FBVyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLEVBQUU7UUFDeEMsTUFBTSxZQUFZLE9BQU8sQ0FBQztRQUMxQixPQUFPLE9BQU8sU0FBUyxXQUFXLEVBQUU7VUFDbEMsU0FBUyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDN0I7UUFDRCxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztPQUN2QjtNQUNELFVBQVUsU0FBUyxnQkFBZ0IsQ0FBQztNQUNwQyxJQUFJLFdBQVcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQ3hDLE1BQU0sWUFBWSxPQUFPLENBQUM7UUFDMUIsT0FBTyxPQUFPLFNBQVMsVUFBVSxFQUFFO1VBQ2pDLFNBQVMsYUFBYSxDQUFDLElBQUksRUFBRSxTQUFTLFdBQVcsQ0FBQyxDQUFDO1NBQ3BEO1FBQ0QsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7T0FDdkI7S0FDRixDQUFDO0lBQ0YsTUFBTSxlQUFlLG9DQUFvQztNQUN2RCxJQUFJLElBQUksU0FBUyxLQUFLLFFBQVEsRUFBRTtRQUM5QixNQUFNLFVBQVUsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbEQscUJBQXFCLENBQUMsTUFBTSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25ELGFBQWEsQ0FBQyxNQUFNLEVBQUUsNEJBQTRCLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7T0FDeEUsTUFBTTtRQUNMLHFCQUFxQixDQUFDLE1BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoRCxhQUFhLENBQUMsTUFBTSxFQUFFLDRCQUE0QixDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQ3JFO0tBQ0YsQ0FBQztJQUNGLE1BQU0sbUJBQW1CLG9DQUFvQztNQUMzRCxJQUFJLFVBQVUsUUFBUSxDQUFDLHVCQUF1QjtRQUM1QyxJQUFJLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1VBQzFCLFNBQVMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQ3RCLElBQUksU0FBUyxPQUFPLEtBQUssQ0FBQyxFQUFFO1lBQzFCLElBQUksZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7V0FDL0I7U0FDRjtPQUNGLENBQUMsQ0FBQztNQUNILElBQUksSUFBSSxTQUFTLEtBQUssUUFBUSxFQUFFO1FBQzlCLE1BQU0sVUFBVSxNQUFNLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsRCxxQkFBcUIsQ0FBQyxNQUFNLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkQsYUFBYSxDQUFDLE1BQU0sRUFBRSw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztPQUN4RSxNQUFNO1FBQ0wscUJBQXFCLENBQUMsTUFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELGFBQWEsQ0FBQyxNQUFNLEVBQUUsNEJBQTRCLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDckU7S0FDRixDQUFDO0lBQ0YsTUFBTSxzQkFBc0IsaURBQWlEO01BQzNFLE1BQU0sZUFBZSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7TUFDNUMsSUFBSSxZQUFZLElBQUksVUFBVSxTQUFTLEtBQUssUUFBUSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDaEgsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDOUIsTUFBTTtRQUNMLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sV0FBVyxjQUFjLENBQUMsTUFBTSxVQUFVLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDM0QsTUFBTSxXQUFXLFlBQVksR0FBRztVQUM5QixVQUFVO1VBQ1YsR0FBRyxLQUFLO1NBQ1QsR0FBRyxLQUFLLENBQUM7UUFDVixNQUFNLGlCQUFpQixZQUFZLElBQUksWUFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLGdCQUFnQixHQUFHLFlBQVksQ0FBQztRQUNsRyxRQUFRLEtBQUssQ0FBQyxRQUFRLEVBQUUsT0FBTztVQUM3QixjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDL0MsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztPQUNwRDtLQUNGLENBQUM7SUFDRixNQUFNLHFCQUFxQixVQUFVO01BQ25DLE9BQU8saUJBQWlCLElBQUksTUFBTSxDQUFDO0tBQ3BDLENBQUM7SUFDRixNQUFNLG1CQUFtQiwwQ0FBMEM7TUFDakUsSUFBSSxVQUFVLEtBQUssTUFBTSxRQUFRLEVBQUUsRUFBRTtRQUNuQyxPQUFPO09BQ1I7TUFDRCxJQUFJLFVBQVUsRUFBRTtRQUNkLElBQUksVUFBVSxTQUFTLEtBQUssUUFBUSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUU7VUFDaEcsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDOUIsTUFBTTtVQUNMLE1BQU0sV0FBVyxjQUFjLENBQUMsTUFBTSxVQUFVLE9BQU8sRUFBRSxDQUFDLENBQUM7VUFDM0QsSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDNUIsVUFBVSxVQUFVLFFBQVEsQ0FBQyx1QkFBdUI7Y0FDbEQsSUFBSSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDMUIsU0FBUyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3RCLElBQUksU0FBUyxPQUFPLEtBQUssQ0FBQyxFQUFFO2tCQUMxQixVQUFVLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUNyQztlQUNGO2FBQ0YsQ0FBQyxDQUFDO1dBQ0o7VUFDRCxxQkFBcUIsQ0FBQyxNQUFNLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7VUFDdEQsTUFBTSxVQUFVLE1BQU0sSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1VBQ3hELHNCQUFzQixDQUFDLE1BQU0sSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1VBQzVDLE1BQU0sVUFBVSxPQUFPLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7VUFDbkQsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7VUFDcEMsYUFBYSxDQUFDLE1BQU0sRUFBRSw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUN4RTtPQUNGLE1BQU07UUFDTCxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNwQyxhQUFhLENBQUMsTUFBTSxFQUFFLDRCQUE0QixDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO09BQzNFO0tBQ0YsQ0FBQztJQUNGLE1BQU0sYUFBYSwrQkFBK0I7TUFDaEQsTUFBTSxhQUFhLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUN6QyxJQUFJLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRTtRQUMvQyxPQUFPO09BQ1I7TUFDRCxNQUFNLG1CQUFtQixtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNyRCxNQUFNLFNBQVMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sR0FBRyxFQUFFLENBQUM7TUFDaEQsSUFBSSxnQkFBZ0IsT0FBTyxHQUFHLENBQUMsRUFBRTtRQUMvQixtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztPQUM3RSxNQUFNO1FBQ0wsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7T0FDeEQ7S0FDRixDQUFDOztJQUVGLE1BQU0sTUFBTSxRQUFRLElBQUksQ0FBQztJQUN6QixNQUFNLGdCQUFnQixlQUFlO01BQ25DLE1BQU0sYUFBYSxJQUFJLGNBQWMsQ0FBQztNQUN0QyxJQUFJLFVBQVUsSUFBSSxVQUFVLFNBQVMsS0FBSyxJQUFJLElBQUksVUFBVSxXQUFXLEtBQUssSUFBSSxFQUFFO1FBQ2hGLE1BQU0sVUFBVSxVQUFVLGdCQUFnQixDQUFDO1FBQzNDLElBQUksT0FBTyxJQUFJLE9BQU8sU0FBUyxLQUFLLElBQUksRUFBRTtVQUN4QyxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUMxQixJQUFJLFNBQVMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUU7WUFDOUIsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7V0FDeEI7U0FDRixNQUFNO1VBQ0wsR0FBRyxTQUFTLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNuRDtPQUNGO01BQ0QsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDMUIsTUFBTSxVQUFVLFVBQVUsZ0JBQWdCLENBQUM7UUFDM0MsSUFBSSxPQUFPLElBQUksT0FBTyxTQUFTLEtBQUssSUFBSSxFQUFFO1VBQ3hDLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzNCO09BQ0Y7S0FDRixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsa0JBQWtCO01BQ3ZDLE1BQU0sUUFBUSxRQUFRLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztNQUMxRCxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUTtRQUMzQixhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQzFCLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSx5QkFBeUIsa0NBQWtDO01BQy9ELElBQUksT0FBTyxHQUFHLGVBQWUsQ0FBQztNQUM5QixNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUM7TUFDL0IsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxHQUFHLE1BQU0sR0FBRyxJQUFJLEtBQUssT0FBTyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRTtRQUM5RSxPQUFPLElBQUksQ0FBQztPQUNiO01BQ0QsTUFBTSxpQkFBaUIsTUFBTSxPQUFPLG9CQUFvQixFQUFFLENBQUM7TUFDM0QsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDbkIsT0FBTyxRQUFRLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7T0FDdkM7TUFDRCxNQUFNLFNBQVMsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ3hDLElBQUksU0FBUyxFQUFFO1FBQ2IsSUFBSSxTQUFTLENBQUMsTUFBTSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7VUFDL0IsTUFBTSxLQUFLLEVBQUUsQ0FBQztTQUNmO09BQ0Y7TUFDRCxNQUFNLFNBQVMsU0FBUyxHQUFHLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNoRixPQUFPLE9BQU8sTUFBTSxFQUFFLEVBQUU7UUFDdEIsSUFBSSxJQUFJLFNBQVMsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLGNBQWMsRUFBRSxFQUFFO1VBQ25ELE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLGNBQWMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxFQUFFO1VBQ2pDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssT0FBTyxHQUFHLENBQUMsRUFBRTtVQUM5QyxPQUFPLElBQUksQ0FBQztTQUNiO09BQ0Y7TUFDRCxPQUFPLElBQUksQ0FBQztLQUNiLENBQUM7SUFDRixNQUFNLHVCQUF1QixjQUFjO01BQ3pDLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQztNQUNsQyxPQUFPLFVBQVUsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1RixDQUFDO0lBQ0YsTUFBTSx5QkFBeUIsY0FBYztNQUMzQyxJQUFJLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRTtRQUNsQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUNsQztLQUNGLENBQUM7SUFDRixNQUFNLGVBQWUseUJBQXlCO01BQzVDLElBQUksSUFBSSxDQUFDO01BQ1QsTUFBTSxZQUFZLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxLQUFLLFdBQVcsR0FBRyxLQUFLLENBQUM7TUFDOUUsc0JBQXNCLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQ3JDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRTtRQUNsQyxPQUFPLE9BQU8sT0FBTyxXQUFXLEVBQUU7VUFDaEMsU0FBUyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDN0I7T0FDRjtLQUNGLENBQUM7SUFDRixNQUFNLGtCQUFrQix5QkFBeUI7TUFDL0MsSUFBSSxRQUFRLENBQUM7TUFDYixNQUFNLEtBQUssT0FBTyxXQUFXLENBQUM7TUFDOUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFO1FBQzlELE9BQU87T0FDUjtNQUNELElBQUksVUFBVSxDQUFDLEtBQUssVUFBVSxDQUFDLEVBQUU7UUFDL0IsV0FBVyxLQUFLLFVBQVUsQ0FBQztPQUM1QjtNQUNELElBQUksRUFBRSxLQUFLLEtBQUssVUFBVSxFQUFFO1FBQzFCLElBQUksSUFBSSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsRUFBRTtVQUM1QixHQUFHLE9BQU8sQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7U0FDaEM7T0FDRjtNQUNELE1BQU0sT0FBTyxLQUFLLFVBQVUsQ0FBQztNQUM3QixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxjQUFjLEVBQUUsRUFBRTtRQUNqRCxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUNsQjtNQUNELElBQUksU0FBUyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUU7UUFDL0IsS0FBSyxDQUFDLFlBQVksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7T0FDcEM7TUFDRCxZQUFZLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztNQUNsQyxJQUFJLFFBQVEsRUFBRTtRQUNaLEtBQUssWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO09BQzdCO01BQ0QsTUFBTSxhQUFhLFFBQVEsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxZQUFZLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO01BQ3hGLE1BQU0sY0FBYyxVQUFVLEdBQUcsR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7TUFDakYsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDcEIsTUFBTSxDQUFDLFdBQVcsRUFBRSxRQUFRO1FBQzFCLElBQUksU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssR0FBRyxRQUFRLEVBQUUsRUFBRTtVQUNsRCxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNsQjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLG1CQUFtQiwwQkFBMEI7TUFDakQsS0FBSyxDQUFDLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDbEMsZUFBZSxDQUFDLE1BQU0sSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztNQUMxQyxNQUFNLFVBQVUsa0JBQWtCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQzdDLENBQUM7SUFDRixNQUFNLGVBQWUsK0JBQStCO01BQ2xELE1BQU0sTUFBTSxNQUFNLElBQUksQ0FBQztNQUN2QixJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3JCLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDeEMsTUFBTTtRQUNMLE1BQU0sV0FBVyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsZUFBZSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkMsTUFBTSxVQUFVLE9BQU8sQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztPQUNwRDtLQUNGLENBQUM7SUFDRixNQUFNLGdCQUFnQiwrQkFBK0I7TUFDbkQsTUFBTSxXQUFXLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNyQyxlQUFlLENBQUMsTUFBTSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzFDLE1BQU0sbUJBQW1CLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUNuRCxNQUFNLFVBQVUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FDM0MsQ0FBQztJQUNGLE1BQU0scUNBQXFDLHVCQUF1QjtNQUNoRSxNQUFNLE1BQU0sTUFBTSxJQUFJLEVBQUUsWUFBWSxNQUFNLFVBQVUsQ0FBQztNQUNyRCxNQUFNLG9CQUFvQixTQUFTLFNBQVMsRUFBRSxDQUFDO01BQy9DLE1BQU0sT0FBTyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztNQUM5RCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsU0FBUyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDM0QsSUFBSSxFQUFFLEVBQUU7UUFDTixNQUFNLEtBQUssRUFBRSxjQUFjLENBQUM7UUFDNUIsSUFBSSxFQUFFLEtBQUssTUFBTSxRQUFRLEVBQUUsSUFBSSxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1VBQ2pELE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLE1BQU0sY0FBYyxDQUFDLFNBQVMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMvQyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsc0JBQXNCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hHLElBQUksT0FBTyxJQUFJLE9BQU8sS0FBSyxFQUFFLEVBQUU7VUFDN0IsTUFBTSxZQUFZLFNBQVMsQ0FBQyxNQUFNO1lBQ2hDLElBQUksU0FBUyxFQUFFO2NBQ2IsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQ3hDLE1BQU07Y0FDTCxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDcEIsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7ZUFDOUIsTUFBTTtnQkFDTCxhQUFhLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7ZUFDekM7YUFDRjtXQUNGLENBQUMsQ0FBQztVQUNILE9BQU8sSUFBSSxDQUFDO1NBQ2IsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFO1VBQ25CLElBQUksQ0FBQyxTQUFTLElBQUksR0FBRyxZQUFZLEtBQUssQ0FBQyxJQUFJLEdBQUcsVUFBVSxLQUFLLENBQUMsRUFBRTtZQUM5RCxNQUFNLFlBQVksU0FBUyxDQUFDLE1BQU07Y0FDaEMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDOUIsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUM7V0FDYjtTQUNGO09BQ0Y7TUFDRCxPQUFPLEtBQUssQ0FBQztLQUNkLENBQUM7SUFDRixNQUFNLGNBQWMsc0JBQXNCO01BQ3hDLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxLQUFLLFdBQVcsRUFBRSxHQUFHLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUN2RSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUNsQixJQUFJLFdBQVcsSUFBSSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUMzQyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztPQUN6QjtLQUNGLENBQUM7SUFDRixNQUFNLCtCQUErQix1QkFBdUI7TUFDMUQsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLE1BQU0sb0JBQW9CLE1BQU0sVUFBVSxTQUFTLEVBQUUsQ0FBQztNQUN0RCxNQUFNLE9BQU8scUJBQXFCLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUM7TUFDOUQsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ2xFLElBQUksS0FBSyxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQy9CLE1BQU0sTUFBTSxjQUFjLENBQUMsTUFBTSxVQUFVLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDdEQsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRyxJQUFJLE9BQU8sRUFBRTtVQUNYLE1BQU0sbUJBQW1CLFdBQVcsVUFBVSxDQUFDO1lBQzdDLElBQUk7WUFDSixJQUFJO1lBQ0osU0FBUztXQUNWLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7VUFDbEIsTUFBTSxXQUFXLFFBQVEsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDO1VBQzNDLE1BQU0sY0FBYyxPQUFPLENBQUMsWUFBWSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7VUFDdkYsTUFBTSxZQUFZLE9BQU8sQ0FBQyxZQUFZLFFBQVEsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1VBQ2hHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtZQUN2QyxPQUFPLEtBQUssQ0FBQztXQUNkO1VBQ0QsTUFBTSxZQUFZLFNBQVMsQ0FBQyxNQUFNO1lBQ2hDLE1BQU0sYUFBYSxPQUFPLFdBQVcsQ0FBQztZQUN0QyxXQUFXLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5QixzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDeEMsTUFBTSxVQUFVLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdkMsTUFBTSxVQUFVLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztXQUN0QyxDQUFDLENBQUM7VUFDSCxPQUFPLElBQUksQ0FBQztTQUNiO09BQ0Y7TUFDRCxPQUFPLEtBQUssQ0FBQztLQUNkLENBQUM7SUFDRixNQUFNLHVCQUF1Qix1QkFBdUI7TUFDbEQsT0FBTyxrQ0FBa0MsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUksNEJBQTRCLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ2pILENBQUM7SUFDRixNQUFNLG1CQUFtQixVQUFVO01BQ2pDLE1BQU0sb0JBQW9CLE1BQU0sVUFBVSxTQUFTLEVBQUUsQ0FBQztNQUN0RCxNQUFNLE9BQU8scUJBQXFCLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUM7TUFDOUQsTUFBTSxrQkFBa0IsTUFBTSxJQUFJLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDbEYsT0FBTyxlQUFlLElBQUksb0JBQW9CLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7S0FDbkUsQ0FBQztJQUNGLE1BQU0sdUJBQXVCLFVBQVU7TUFDckMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUM1QixNQUFNLFlBQVksU0FBUyxDQUFDLE1BQU07VUFDaEMsTUFBTSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7VUFDN0IsY0FBYyxDQUFDLE1BQU0sSUFBSSxFQUFFLE1BQU0sUUFBUSxFQUFFLENBQUMsQ0FBQztTQUM5QyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztPQUNiO01BQ0QsT0FBTyxLQUFLLENBQUM7S0FDZCxDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsdUJBQXVCO01BQzdDLE1BQU0sWUFBWSxNQUFNLFVBQVUsQ0FBQztNQUNuQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsTUFBTSxFQUFFLFNBQVMsUUFBUSxFQUFFLENBQUMsS0FBSyxTQUFTLFlBQVksRUFBRSxHQUFHLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0tBQ3BLLENBQUM7SUFDRixNQUFNLFVBQVUsVUFBVTtNQUN4QixNQUFNLEdBQUcsQ0FBQyxhQUFhLEVBQUUsS0FBSztRQUM1QixNQUFNLE1BQU0sQ0FBQyxRQUFRLFlBQVksRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsS0FBSyxlQUFlLEtBQUssZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUU7VUFDN0UsY0FBYyxDQUFDLE1BQU0sSUFBSSxFQUFFLE1BQU0sUUFBUSxFQUFFLENBQUMsQ0FBQztTQUM5QztPQUNGLENBQUMsQ0FBQztNQUNILE1BQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxVQUFVLEVBQUU7VUFDcEMsSUFBSSxlQUFlLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ2xDLENBQUMsZUFBZSxFQUFFLENBQUM7V0FDcEI7U0FDRixNQUFNLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxPQUFPLEVBQUU7VUFDeEMsSUFBSSxlQUFlLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2pDLENBQUMsZUFBZSxFQUFFLENBQUM7V0FDcEI7U0FDRjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxNQUFNLFdBQVc7TUFDckIsaUJBQWlCLGFBQWE7UUFDNUIsZUFBZSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztPQUNwQztLQUNGLENBQUMsQ0FBQzs7SUFFSCxNQUFNLGFBQWEsb0JBQW9CO01BQ3JDLE1BQU0sYUFBYSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDekMsSUFBSSxVQUFVLEtBQUssSUFBSSxJQUFJLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRTtRQUN0RSxPQUFPO09BQ1I7TUFDRCxNQUFNLFlBQVksU0FBUyxDQUFDLE1BQU07UUFDaEMsSUFBSSxRQUFRLENBQUMsTUFBTSxPQUFPLENBQUMsRUFBRTtVQUMzQixNQUFNLElBQUksVUFBVSxDQUFDLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQyxDQUFDO1NBQ2pEO1FBQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxNQUFNLENBQUMsRUFBRTtVQUMxQixJQUFJLENBQUMsTUFBTSxNQUFNLEVBQUUsVUFBVSxNQUFNLElBQUksVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0RTtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSx3QkFBd0IsT0FBTztNQUNuQyxNQUFNLFFBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDM0MsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFLLEVBQUUsYUFBYTtRQUNyQyxNQUFNLFlBQVksSUFBSSxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzRSxPQUFPLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7T0FDcEMsQ0FBQyxDQUFDO01BQ0gsT0FBTyxLQUFLLENBQUMsTUFBTSxFQUFFLFlBQVksR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUM5QyxDQUFDO0lBQ0YsTUFBTSwwQkFBMEIsU0FBUztNQUN2QyxLQUFLLEVBQUUsQ0FBQztNQUNSLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtRQUNiLE9BQU8sRUFBRSxDQUFDO09BQ1gsTUFBTTtRQUNMLE1BQU0sWUFBWSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQzdCLE1BQU0sV0FBVyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDeEMsTUFBTSxPQUFPLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sT0FBTyxNQUFNLGFBQWEsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztRQUNoRSxPQUFPLElBQUksR0FBRyxJQUFJLENBQUM7T0FDcEI7S0FDRixDQUFDO0lBQ0YsTUFBTSxjQUFjLE9BQU8sVUFBVSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsTUFBTSxjQUFjLE9BQU8sVUFBVSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsTUFBTSxZQUFZLE9BQU8sVUFBVSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUMsTUFBTSxpQkFBaUIsU0FBUztNQUM5QixJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNwQixPQUFPLENBQUMsQ0FBQztPQUNWLE1BQU0sSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDN0IsT0FBTyxDQUFDLENBQUM7T0FDVixNQUFNLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQzdCLE9BQU8sQ0FBQyxDQUFDO09BQ1YsTUFBTSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUMzQixPQUFPLENBQUMsQ0FBQztPQUNWLE1BQU07UUFDTCxPQUFPLENBQUMsQ0FBQztPQUNWO0tBQ0YsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLFNBQVM7TUFDL0IsUUFBUSxjQUFjLENBQUMsS0FBSyxDQUFDO1dBQ3hCLENBQUM7UUFDSixPQUFPLFFBQVEsS0FBSyxDQUFDO1VBQ25CLGVBQWUsUUFBUSxLQUFLLEVBQUU7VUFDOUIsS0FBSztTQUNOLENBQUMsQ0FBQztXQUNBLENBQUM7UUFDSixPQUFPLFFBQVEsS0FBSyxDQUFDO1VBQ25CLGVBQWUsUUFBUSxLQUFLLENBQUMsYUFBYSxDQUFDO1VBQzNDLE9BQU8scUJBQXFCLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtTQUMvQyxDQUFDLENBQUM7V0FDQSxDQUFDO1FBQ0osT0FBTyxRQUFRLEtBQUssQ0FBQztVQUNuQixlQUFlLFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQztVQUMzQyxPQUFPLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7U0FDL0MsQ0FBQyxDQUFDO1dBQ0EsQ0FBQztRQUNKLE9BQU8sUUFBUSxLQUFLLENBQUM7VUFDbkIsZUFBZSxRQUFRLEtBQUssRUFBRTtVQUM5QixPQUFPLEVBQUU7U0FDVixDQUFDLENBQUM7V0FDQSxDQUFDO1FBQ0osT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sY0FBYyxVQUFVO01BQzVCLE1BQU0sUUFBUSxRQUFRLENBQUMsTUFBTSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDekMsSUFBSSxJQUFJLENBQUMsTUFBTSxjQUFjLEVBQUUsYUFBYSxDQUFDLEVBQUU7UUFDN0MsT0FBTyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztPQUN2QyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sY0FBYyxFQUFFLGFBQWEsQ0FBQyxFQUFFO1FBQ3BELE9BQU8sdUJBQXVCLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO09BQ3JELE1BQU07UUFDTCxPQUFPLE1BQU0sTUFBTSxDQUFDO09BQ3JCO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLE9BQU8sVUFBVTtNQUNyQixNQUFNLGNBQWMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksdUJBQXVCLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxFQUFFO1FBQzFFLE9BQU87T0FDUjtNQUNELE1BQU0sY0FBYyxLQUFLLENBQUM7UUFDeEIsT0FBTyxpQkFBaUI7UUFDeEIsTUFBTTtVQUNKLE1BQU0sT0FBTztVQUNiLE9BQU8sQ0FBQztjQUNKLE1BQU0sT0FBTztjQUNiLE1BQU0sT0FBTztjQUNiLE9BQU8sc0JBQXNCO2NBQzdCLFdBQVcsU0FBUzthQUNyQixDQUFDO1NBQ0w7UUFDRCxhQUFhO1VBQ1gsT0FBTyxXQUFXLENBQUM7WUFDakIsT0FBTyxNQUFNLElBQUksVUFBVSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDO1lBQ3RELGVBQWUsUUFBUSxLQUFLLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxXQUFXLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztXQUNsRixDQUFDO1NBQ0g7UUFDRCxTQUFTO1VBQ1A7WUFDRSxNQUFNLFFBQVE7WUFDZCxNQUFNLFFBQVE7WUFDZCxNQUFNLFFBQVE7V0FDZjtVQUNEO1lBQ0UsTUFBTSxRQUFRO1lBQ2QsTUFBTSxNQUFNO1lBQ1osTUFBTSxNQUFNO1lBQ1osU0FBUyxJQUFJO1dBQ2Q7U0FDRjtRQUNELFVBQVUsT0FBTztVQUNmLE1BQU0sT0FBTyxHQUFHLFFBQVEsRUFBRSxDQUFDO1VBQzNCLGVBQWUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVTtZQUN6QyxNQUFNLFlBQVksQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFO2NBQ3pDLE9BQU8sRUFBRSxPQUFPLE1BQU0sTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFLEdBQUcsTUFBTSxNQUFNLEVBQUU7Y0FDMUQsUUFBUSxFQUFFLG1CQUFtQixNQUFNLGNBQWMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFO2FBQzlELENBQUMsQ0FBQztXQUNKLENBQUMsQ0FBQztVQUNILEdBQUcsTUFBTSxFQUFFLENBQUM7U0FDYjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSx3QkFBd0Isc0JBQXNCLE1BQU07TUFDeEQsTUFBTSxhQUFhLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUN6QyxPQUFPLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLFNBQVMsS0FBSyxRQUFRLENBQUM7S0FDdEUsQ0FBQztJQUNGLE1BQU0saUJBQWlCLFVBQVU7TUFDL0IsTUFBTSxXQUFXLENBQUMsY0FBYyxFQUFFLE1BQU07UUFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQ2QsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sYUFBYSxVQUFVO01BQzNCLE1BQU0sR0FBRyxDQUFDLG1CQUFtQixFQUFFLEtBQUs7UUFDbEMsTUFBTSxNQUFNLENBQUMsUUFBUSxZQUFZLEVBQUUsQ0FBQztRQUNwQyxJQUFJLEdBQUcsS0FBSyxRQUFRLEVBQUU7VUFDcEIsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDN0IsTUFBTSxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7VUFDNUIsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDOUI7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxnQkFBZ0I7UUFDdkQsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7T0FDbEMsQ0FBQyxDQUFDO01BQ0gsTUFBTSxXQUFXLENBQUMsbUJBQW1CLEVBQUUsZ0JBQWdCO1FBQ3JELFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQ2xDLENBQUMsQ0FBQztNQUNILE1BQU0sV0FBVyxDQUFDLHNCQUFzQixFQUFFLGdCQUFnQjtRQUN4RCxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztPQUNsQyxDQUFDLENBQUM7TUFDSCxNQUFNLFdBQVcsQ0FBQyxZQUFZLEVBQUUsTUFBTTtRQUNwQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUM5QixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDdkIsTUFBTSxXQUFXLENBQUMsZUFBZSxFQUFFLGdCQUFnQjtRQUNqRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtVQUNwQixVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzVCO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxxQkFBcUIsQ0FBQyxxQkFBcUIsRUFBRSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUN4RixNQUFNLHFCQUFxQixDQUFDLG1CQUFtQixFQUFFLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ3RGLE1BQU0scUJBQXFCLENBQUMsc0JBQXNCLEVBQUUscUJBQXFCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDMUYsQ0FBQzs7SUFFRixJQUFJLFNBQVMsT0FBTyxLQUFLLE1BQU0sUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUM7O0lBRTdELE1BQU0sYUFBYSxRQUFRLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztJQUMzQyxNQUFNLFVBQVUsY0FBYyxVQUFVLE9BQU8sS0FBSyxDQUFDLENBQUM7SUFDdEQsTUFBTSxzQkFBc0IsUUFBUTtNQUNsQyxNQUFNLGlCQUFpQixxQkFBcUI7UUFDMUMsTUFBTSxLQUFLLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksT0FBTyxFQUFFO1VBQ1gsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNoQyxNQUFNO1VBQ0wsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDakI7T0FDRixDQUFDO01BQ0YsTUFBTSxVQUFVLGtCQUFrQjtRQUNoQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUNwQixPQUFPO1lBQ0wsR0FBRyxNQUFNO1lBQ1QsSUFBSTtXQUNMLENBQUM7U0FDSCxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7VUFDaEQsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztVQUM3QixPQUFPLEVBQUUsQ0FBQztTQUNYLE1BQU07VUFDTCxPQUFPLE1BQU0sQ0FBQztTQUNmO09BQ0YsQ0FBQztNQUNGLE1BQU0sYUFBYSxLQUFLLENBQUMsSUFBSSxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDdkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUN4QixjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7T0FDNUI7S0FDRixDQUFDO0lBQ0YsTUFBTSxVQUFVLFVBQVU7TUFDeEIsTUFBTSxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU07UUFDekIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDO1FBQ3hCLE1BQU0sY0FBYyxDQUFDLE9BQU8sRUFBRSxTQUFTLE1BQU0sQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO09BQzVFLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxjQUFjLFVBQVU7TUFDNUIsTUFBTSxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUs7UUFDeEIsSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksSUFBSSxRQUFRLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRTtVQUM1RCxPQUFPO1NBQ1I7UUFDRCxNQUFNLFlBQVksU0FBUyxDQUFDLE1BQU07VUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMzRSxDQUFDLGVBQWUsRUFBRSxDQUFDO1dBQ3BCO1NBQ0YsQ0FBQyxDQUFDO09BQ0osQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sUUFBUSxVQUFVO01BQ3RCLElBQUksaUJBQWlCLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDN0IsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQ3JCO01BQ0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ2pCLENBQUM7O0lBRUYsTUFBTSwyQkFBMkIsc0JBQXNCLE9BQU87TUFDNUQsTUFBTSxzQkFBc0IsS0FBSztRQUMvQixHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMzQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLE1BQU0sVUFBVSxXQUFXLEVBQUUsQ0FBQyxDQUFDO09BQzlGLENBQUM7TUFDRixHQUFHLFdBQVcsQ0FBQyxNQUFNLFVBQVUsV0FBVyxFQUFFLENBQUMsQ0FBQztNQUM5QyxPQUFPLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0tBQzFELENBQUM7SUFDRixNQUFNLGFBQWEsVUFBVTtNQUMzQixNQUFNLE9BQU8sV0FBVyxNQUFNLE1BQU0sWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQzFELElBQUksQ0FBQyxNQUFNLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUNoQyxNQUFNLEdBQUcsU0FBUyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUU7VUFDNUMsTUFBTSxjQUFjO1VBQ3BCLFFBQVEsS0FBSztVQUNiLFNBQVMsZUFBZTtVQUN4QixVQUFVLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztVQUNuQyxTQUFTLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7U0FDaEQsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxHQUFHLFNBQVMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFO1VBQzVDLE1BQU0sZ0JBQWdCO1VBQ3RCLFFBQVEsS0FBSztVQUNiLFNBQVMsYUFBYTtVQUN0QixVQUFVLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztVQUNyQyxTQUFTLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7U0FDaEQsQ0FBQyxDQUFDO09BQ0o7S0FDRixDQUFDOztJQUVGLE1BQU0seUJBQXlCLHNCQUFzQixPQUFPO01BQzFELE1BQU0sb0JBQW9CLEtBQUssR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztNQUMxSCxPQUFPLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0tBQ3hELENBQUM7SUFDRixNQUFNLFdBQVcsVUFBVTtNQUN6QixNQUFNLGlCQUFpQjtRQUNyQixNQUFNLG9CQUFvQjtRQUMxQixNQUFNLGNBQWM7UUFDcEIsVUFBVSxNQUFNLE1BQU0sWUFBWSxDQUFDLGNBQWMsQ0FBQztRQUNsRCxTQUFTLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7T0FDOUMsQ0FBQztNQUNGLE1BQU0sR0FBRyxTQUFTLFlBQVksQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7TUFDNUQsTUFBTSxHQUFHLFNBQVMsZUFBZSxDQUFDLE9BQU8sRUFBRTtRQUN6QyxRQUFRLFFBQVE7VUFDZCxNQUFNLGFBQWEsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztVQUMvQyxPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNsRDtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsSUFBSSxTQUFTLE1BQU07TUFDakIsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVU7UUFDOUIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsTUFBTSxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO1VBQ2xDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztVQUNkLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNwQixNQUFNO1VBQ0wsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3hCO1FBQ0QsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25CLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUNwQixDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sRUFBRSxDQUFDOztDQUVaLEdBQUcsQ0FBQzs7OztBQ2w5REw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7Ozs7QUFJQSxDQUFDLFlBQVk7SUFDVCxZQUFZLENBQUM7O0lBRWIsSUFBSSxXQUFXLE9BQU8sS0FBSyxNQUFNLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDOztJQUVuRSxNQUFNLFdBQVcsK0JBQStCO01BQzlDLElBQUksRUFBRSxDQUFDO01BQ1AsSUFBSSxTQUFTLENBQUMsQ0FBQyxFQUFFLFdBQVcsVUFBVSxDQUFDLEVBQUU7UUFDdkMsT0FBTyxJQUFJLENBQUM7T0FDYixNQUFNO1FBQ0wsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxNQUFNLFdBQVcsS0FBSyxDQUFDO09BQ2pHO0tBQ0YsQ0FBQztJQUNGLE1BQU0sU0FBUyxLQUFLO01BQ2xCLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQztNQUNuQixJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDZCxPQUFPLE1BQU0sQ0FBQztPQUNmLE1BQU0sSUFBSSxDQUFDLEtBQUssUUFBUSxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQzdDLE9BQU8sT0FBTyxDQUFDO09BQ2hCLE1BQU0sSUFBSSxDQUFDLEtBQUssUUFBUSxJQUFJLFFBQVEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLGNBQWMsS0FBSyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUN0RixPQUFPLFFBQVEsQ0FBQztPQUNqQixNQUFNO1FBQ0wsT0FBTyxDQUFDLENBQUM7T0FDVjtLQUNGLENBQUM7SUFDRixNQUFNLFdBQVcsUUFBUSxTQUFTLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUM7SUFDekQsTUFBTSxlQUFlLFFBQVEsU0FBUyxPQUFPLEtBQUssS0FBSyxJQUFJLENBQUM7SUFDNUQsTUFBTSxPQUFPLEtBQUssS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLE1BQU0sV0FBVyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEMsTUFBTSxVQUFVLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxNQUFNLFlBQVksWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sY0FBYyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsTUFBTSxhQUFhLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssU0FBUyxDQUFDO0lBQ3RELE1BQU0sZ0JBQWdCLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsTUFBTSxhQUFhLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM1QyxNQUFNLFdBQVcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztJQUV4QyxNQUFNLE9BQU8sTUFBTTtLQUNsQixDQUFDO0lBQ0YsTUFBTSxXQUFXLGNBQWMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsTUFBTSxXQUFXLFNBQVM7TUFDeEIsT0FBTyxNQUFNO1FBQ1gsT0FBTyxLQUFLLENBQUM7T0FDZCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sV0FBVyxLQUFLO01BQ3BCLE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0sZUFBZSxVQUFVO01BQzdCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNoQixDQUFDO0lBQ0YsbUJBQW1CLGNBQWMsRUFBRTtNQUNqQyxPQUFPLENBQUMsV0FBVyxLQUFLO1FBQ3RCLE1BQU0sTUFBTSxXQUFXLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztPQUM1QixDQUFDO0tBQ0g7SUFDRCxNQUFNLE9BQU8sS0FBSztNQUNoQixDQUFDLEVBQUUsQ0FBQztLQUNMLENBQUM7SUFDRixNQUFNLFFBQVEsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLE1BQU0sU0FBUyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7O0lBRTlCLGVBQWU7TUFDYixXQUFXLGFBQWE7UUFDdEIsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO09BQ3BCO01BQ0QsV0FBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ2xDO01BQ0QsV0FBVyxHQUFHO1FBQ1osT0FBTyxRQUFRLGNBQWMsQ0FBQztPQUMvQjtNQUNELElBQUksaUJBQWlCO1FBQ25CLElBQUksSUFBSSxJQUFJLEVBQUU7VUFDWixPQUFPLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDO1NBQzNCLE1BQU07VUFDTCxPQUFPLE1BQU0sRUFBRSxDQUFDO1NBQ2pCO09BQ0Y7TUFDRCxNQUFNLEdBQUc7UUFDUCxPQUFPLElBQUksSUFBSSxDQUFDO09BQ2pCO01BQ0QsTUFBTSxHQUFHO1FBQ1AsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDO09BQ2xCO01BQ0QsR0FBRyxTQUFTO1FBQ1YsSUFBSSxJQUFJLElBQUksRUFBRTtVQUNaLE9BQU8sUUFBUSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQztTQUMxQyxNQUFNO1VBQ0wsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO1NBQ3hCO09BQ0Y7TUFDRCxJQUFJLFNBQVM7UUFDWCxJQUFJLElBQUksSUFBSSxFQUFFO1VBQ1osT0FBTyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQztTQUMzQixNQUFNO1VBQ0wsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO1NBQ3hCO09BQ0Y7TUFDRCxNQUFNLFlBQVk7UUFDaEIsT0FBTyxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQztPQUMxQztNQUNELE1BQU0sWUFBWTtRQUNoQixPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUM7T0FDM0M7TUFDRCxNQUFNLFlBQVk7UUFDaEIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFO1VBQ3RDLE9BQU8sSUFBSSxDQUFDO1NBQ2IsTUFBTTtVQUNMLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztTQUN4QjtPQUNGO01BQ0QsS0FBSyxjQUFjO1FBQ2pCLE9BQU8sSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLEdBQUcsV0FBVyxDQUFDO09BQzVDO01BQ0QsRUFBRSxjQUFjO1FBQ2QsT0FBTyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsV0FBVyxDQUFDO09BQ3RDO01BQ0QsVUFBVSxRQUFRO1FBQ2hCLE9BQU8sSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLEdBQUcsS0FBSyxFQUFFLENBQUM7T0FDeEM7TUFDRCxPQUFPLFFBQVE7UUFDYixPQUFPLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztPQUNsQztNQUNELFFBQVEsVUFBVTtRQUNoQixJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7VUFDYixNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssQ0FBQyxHQUFHLE9BQU8sR0FBRyx5QkFBeUIsQ0FBQyxDQUFDO1NBQy9GLE1BQU07VUFDTCxPQUFPLElBQUksTUFBTSxDQUFDO1NBQ25CO09BQ0Y7TUFDRCxXQUFXLFFBQVE7UUFDakIsT0FBTyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN0RTtNQUNELFNBQVMsR0FBRztRQUNWLE9BQU8sSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO09BQ3JDO01BQ0QsY0FBYyxHQUFHO1FBQ2YsT0FBTyxJQUFJLE1BQU0sQ0FBQztPQUNuQjtNQUNELElBQUksU0FBUztRQUNYLElBQUksSUFBSSxJQUFJLEVBQUU7VUFDWixNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQztTQUNwQjtPQUNGO01BQ0QsT0FBTyxHQUFHO1FBQ1IsT0FBTyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO09BQ3JDO01BQ0QsUUFBUSxHQUFHO1FBQ1QsT0FBTyxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7T0FDdEQ7S0FDRjtJQUNELFFBQVEsY0FBYyxHQUFHLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDOztJQUU3QyxNQUFNLE9BQU8sTUFBTSxLQUFLLENBQUM7SUFDekIsTUFBTSxpQkFBaUIsTUFBTSxlQUFlLENBQUM7SUFDN0MsTUFBTSxTQUFTLFlBQVk7TUFDekIsTUFBTSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUN4QixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2hELE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ1Q7S0FDRixDQUFDO0lBQ0YsTUFBTSxTQUFTLEtBQUssVUFBVTtNQUM1QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0saUJBQWlCLGdDQUFnQztNQUNyRCxNQUFNLENBQUMsR0FBRyxFQUFFLFVBQVU7UUFDcEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3ZDLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFdBQVcsZUFBZTtNQUM5QixNQUFNLElBQUksRUFBRSxDQUFDO01BQ2IsY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzNDLE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0sYUFBYSxZQUFZO01BQzdCLE1BQU0sSUFBSSxFQUFFLENBQUM7TUFDYixNQUFNLENBQUMsR0FBRyxFQUFFLGlCQUFpQjtRQUMzQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7T0FDeEIsQ0FBQyxDQUFDO01BQ0gsT0FBTyxDQUFDLENBQUM7S0FDVixDQUFDO0lBQ0YsTUFBTSxTQUFTLE9BQU87TUFDcEIsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQ2xDLENBQUM7SUFDRixNQUFNLE9BQU8sT0FBTztNQUNsQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO0tBQ3pCLENBQUM7SUFDRixNQUFNLFFBQVEsY0FBYztNQUMxQixPQUFPLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztLQUNsRSxDQUFDO0lBQ0YsTUFBTSxNQUFNLGNBQWMsY0FBYyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sb0JBQW9CLGNBQWMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUM7SUFDckcsTUFBTSxZQUFZLEtBQUs7TUFDckIsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDakIsSUFBSSxjQUFjLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7VUFDN0IsT0FBTyxLQUFLLENBQUM7U0FDZDtPQUNGO01BQ0QsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDOztJQUVGLE1BQU0sZ0JBQWdCLEtBQUssVUFBVSxRQUFRLENBQUM7SUFDOUMsTUFBTSxhQUFhLEtBQUssVUFBVSxLQUFLLENBQUM7SUFDeEMsTUFBTSxhQUFhLFdBQVcsYUFBYSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sV0FBVyxXQUFXLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkQsTUFBTSxTQUFTLGNBQWM7TUFDM0IsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM3QyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtVQUNkLE9BQU8sSUFBSSxDQUFDO1NBQ2I7T0FDRjtNQUNELE9BQU8sS0FBSyxDQUFDO0tBQ2QsQ0FBQztJQUNGLE1BQU0sUUFBUSxZQUFZO01BQ3hCLE1BQU0sSUFBSSxFQUFFLENBQUM7TUFDYixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM1QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUNkO01BQ0QsT0FBTyxDQUFDLENBQUM7S0FDVixDQUFDO0lBQ0YsTUFBTSxNQUFNLFdBQVc7TUFDckIsTUFBTSxNQUFNLEVBQUUsT0FBTyxDQUFDO01BQ3RCLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUN6QixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM1QixNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ2hCO01BQ0QsT0FBTyxDQUFDLENBQUM7S0FDVixDQUFDO0lBQ0YsTUFBTSxPQUFPLFdBQVc7TUFDdEIsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM3QyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDVDtLQUNGLENBQUM7SUFDRixNQUFNLFFBQVEsV0FBVztNQUN2QixLQUFLLElBQUksSUFBSSxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN2QyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDVDtLQUNGLENBQUM7SUFDRixNQUFNLFlBQVksY0FBYztNQUM5QixNQUFNLE9BQU8sRUFBRSxDQUFDO01BQ2hCLE1BQU0sT0FBTyxFQUFFLENBQUM7TUFDaEIsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM3QyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLE1BQU0sTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7UUFDckMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDYjtNQUNELE9BQU87UUFDTCxJQUFJO1FBQ0osSUFBSTtPQUNMLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxTQUFTLGNBQWM7TUFDM0IsTUFBTSxJQUFJLEVBQUUsQ0FBQztNQUNiLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0MsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7VUFDZCxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNYO09BQ0Y7TUFDRCxPQUFPLENBQUMsQ0FBQztLQUNWLENBQUM7SUFDRixNQUFNLFFBQVEsZ0JBQWdCO01BQzVCLEtBQUssQ0FBQyxFQUFFLEVBQUUsVUFBVTtRQUNsQixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3BCLENBQUMsQ0FBQztNQUNILE9BQU8sR0FBRyxDQUFDO0tBQ1osQ0FBQztJQUNGLE1BQU0sUUFBUSxnQkFBZ0I7TUFDNUIsSUFBSSxDQUFDLEVBQUUsRUFBRSxVQUFVO1FBQ2pCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDcEIsQ0FBQyxDQUFDO01BQ0gsT0FBTyxHQUFHLENBQUM7S0FDWixDQUFDO0lBQ0YsTUFBTSxZQUFZLHFCQUFxQjtNQUNyQyxLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzdDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO1VBQ2QsT0FBTyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtVQUN0QixNQUFNO1NBQ1A7T0FDRjtNQUNELE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztLQUN4QixDQUFDO0lBQ0YsTUFBTSxPQUFPLGNBQWM7TUFDekIsT0FBTyxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNuQyxDQUFDO0lBQ0YsTUFBTSxZQUFZLE1BQU07TUFDdEIsTUFBTSxJQUFJLEVBQUUsQ0FBQztNQUNiLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtVQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixHQUFHLENBQUMsR0FBRyw0QkFBNEIsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUM5RTtRQUNELFVBQVUsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUM1QjtNQUNELE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0sT0FBTyxXQUFXLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsTUFBTSxTQUFTLGNBQWM7TUFDM0IsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRTtRQUM3QyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7VUFDdkIsT0FBTyxLQUFLLENBQUM7U0FDZDtPQUNGO01BQ0QsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxjQUFjLFdBQVc7TUFDN0IsTUFBTSxJQUFJLEVBQUUsQ0FBQztNQUNiLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0MsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUN4QjtNQUNELE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0sUUFBUSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxHQUFHLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7SUFDMUYsTUFBTSxPQUFPLE1BQU0sS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoQyxNQUFNLE9BQU8sTUFBTSxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sVUFBVSxZQUFZO01BQzFCLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbkMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO1VBQ2QsT0FBTyxDQUFDLENBQUM7U0FDVjtPQUNGO01BQ0QsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO0tBQ3hCLENBQUM7O0lBRUYsTUFBTSxVQUFVLENBQUMsQ0FBQztJQUNsQixNQUFNLFdBQVcsQ0FBQyxDQUFDO0lBQ25CLE1BQU0sb0JBQW9CLEVBQUUsQ0FBQztJQUM3QixNQUFNLFVBQVUsQ0FBQyxDQUFDO0lBQ2xCLE1BQU0sT0FBTyxDQUFDLENBQUM7O0lBRWYsTUFBTSxXQUFXLGlCQUFpQjtNQUNoQyxNQUFNLE1BQU0sS0FBSyxJQUFJLFFBQVEsQ0FBQztNQUM5QixNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDckMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDO01BQ3JCLElBQUksQ0FBQyxHQUFHLGNBQWMsRUFBRSxJQUFJLEdBQUcsV0FBVyxPQUFPLEdBQUcsQ0FBQyxFQUFFO1FBQ3JELE1BQU0sVUFBVSx1Q0FBdUMsQ0FBQztRQUN4RCxPQUFPLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztPQUMxQjtNQUNELE9BQU8sU0FBUyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDckMsQ0FBQztJQUNGLE1BQU0sVUFBVSxnQkFBZ0I7TUFDOUIsTUFBTSxNQUFNLEtBQUssSUFBSSxRQUFRLENBQUM7TUFDOUIsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ3BDLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3hCLENBQUM7SUFDRixNQUFNLFdBQVcsaUJBQWlCO01BQ2hDLE1BQU0sTUFBTSxLQUFLLElBQUksUUFBUSxDQUFDO01BQzlCLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN0QyxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN4QixDQUFDO0lBQ0YsTUFBTSxZQUFZLFFBQVE7TUFDeEIsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO09BQ3JEO01BQ0QsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7S0FDdEIsQ0FBQztJQUNGLE1BQU0sWUFBWSxrQkFBa0IsUUFBUSxLQUFLLENBQUMsTUFBTSxJQUFJLGlCQUFpQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEcsTUFBTSxlQUFlO01BQ25CLFFBQVE7TUFDUixPQUFPO01BQ1AsUUFBUTtNQUNSLFNBQVMsU0FBUztNQUNsQixTQUFTO0tBQ1YsQ0FBQzs7SUFFRixNQUFNLE9BQU8sdUJBQXVCO01BQ2xDLE1BQU0sTUFBTSxPQUFPLElBQUksQ0FBQztNQUN4QixJQUFJLEdBQUcsU0FBUyxLQUFLLE9BQU8sRUFBRTtRQUM1QixPQUFPLEtBQUssQ0FBQztPQUNkLE1BQU07UUFDTCxNQUFNLE9BQU8sR0FBRyxDQUFDO1FBQ2pCLElBQUksSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFO1VBQzlCLE9BQU8sSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDL0IsTUFBTSxJQUFJLElBQUksa0JBQWtCLEtBQUssU0FBUyxFQUFFO1VBQy9DLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN6QyxNQUFNLElBQUksSUFBSSxzQkFBc0IsS0FBSyxTQUFTLEVBQUU7VUFDbkQsT0FBTyxJQUFJLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzdDLE1BQU0sSUFBSSxJQUFJLG1CQUFtQixLQUFLLFNBQVMsRUFBRTtVQUNoRCxPQUFPLElBQUksbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDMUMsTUFBTTtVQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNuRDtPQUNGO0tBQ0YsQ0FBQztJQUNGLE1BQU0saUJBQWlCLE9BQU8sR0FBRyxTQUFTLEtBQUssT0FBTyxJQUFJLEdBQUcsU0FBUyxLQUFLLFFBQVEsSUFBSSxHQUFHLFNBQVMsS0FBSyxpQkFBaUIsSUFBSSxHQUFHLGtCQUFrQixLQUFLLENBQUMsQ0FBQztJQUN6SixNQUFNLFFBQVEscUJBQXFCO01BQ2pDLE1BQU0sT0FBTyxLQUFLLEtBQUssU0FBUyxHQUFHLFFBQVEsR0FBRyxLQUFLLElBQUksQ0FBQztNQUN4RCxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQUksaUJBQWlCLENBQUMsUUFBUSxDQUFDLEVBQUUsWUFBWSxRQUFRLENBQUMsQ0FBQztLQUMvRixDQUFDO0lBQ0YsTUFBTSxNQUFNLHFCQUFxQjtNQUMvQixNQUFNLE9BQU8sS0FBSyxLQUFLLFNBQVMsR0FBRyxRQUFRLEdBQUcsS0FBSyxJQUFJLENBQUM7TUFDeEQsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsR0FBRyxRQUFRLEtBQUssQ0FBQyxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxRQUFRLENBQUMsQ0FBQztLQUN2SCxDQUFDOztJQUVGLE1BQU0sS0FBSyxZQUFZLEVBQUUsSUFBSSxLQUFLLEVBQUUsSUFBSSxDQUFDO0lBQ3pDLE1BQU0sT0FBTyxJQUFJLENBQUM7O0lBRWxCLE9BQU8sTUFBTSxLQUFLLFdBQVcsR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7O0lBRXBFLE1BQU0sT0FBTyxXQUFXO01BQ3RCLE1BQU0sSUFBSSxPQUFPLElBQUksU0FBUyxDQUFDO01BQy9CLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztLQUN4QixDQUFDO0lBQ0YsTUFBTSxPQUFPLFdBQVcsT0FBTyxJQUFJLFNBQVMsQ0FBQztJQUM3QyxNQUFNLFNBQVMsS0FBSyxXQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkQsTUFBTSxZQUFZLFdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssVUFBVSxDQUFDO0lBQ3ZGLE1BQU0sWUFBWSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEMsTUFBTSxTQUFTLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixNQUFNLGFBQWEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0scUJBQXFCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sUUFBUSxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUM7O0lBRTFELE1BQU0sUUFBUSxXQUFXLFlBQVksUUFBUSxDQUFDLE9BQU8sSUFBSSxjQUFjLENBQUMsQ0FBQztJQUN6RSxNQUFNLGtCQUFrQixPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sU0FBUyxXQUFXLFFBQVEsS0FBSyxDQUFDLE9BQU8sSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksUUFBUSxDQUFDLENBQUM7SUFDMUYsTUFBTSxVQUFVLHFCQUFxQjtNQUNuQyxNQUFNLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7TUFDakQsSUFBSSxNQUFNLE9BQU8sSUFBSSxDQUFDO01BQ3RCLE1BQU0sTUFBTSxFQUFFLENBQUM7TUFDZixPQUFPLEdBQUcsV0FBVyxLQUFLLElBQUksSUFBSSxHQUFHLFdBQVcsS0FBSyxTQUFTLEVBQUU7UUFDOUQsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxZQUFZLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNaLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtVQUNwQixNQUFNO1NBQ1AsTUFBTTtVQUNMLE1BQU0sU0FBUyxDQUFDO1NBQ2pCO09BQ0Y7TUFDRCxPQUFPLEdBQUcsQ0FBQztLQUNaLENBQUM7SUFDRixNQUFNLGNBQWMsV0FBVyxRQUFRLEtBQUssQ0FBQyxPQUFPLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksUUFBUSxDQUFDLENBQUM7SUFDcEcsTUFBTSxjQUFjLFdBQVcsUUFBUSxLQUFLLENBQUMsT0FBTyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxRQUFRLENBQUMsQ0FBQztJQUNoRyxNQUFNLGFBQWEsV0FBVyxHQUFHLENBQUMsT0FBTyxJQUFJLFdBQVcsRUFBRSxZQUFZLFFBQVEsQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sVUFBVSxvQkFBb0I7TUFDbEMsTUFBTSxLQUFLLE9BQU8sSUFBSSxXQUFXLENBQUM7TUFDbEMsT0FBTyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksUUFBUSxDQUFDLENBQUM7S0FDM0QsQ0FBQztJQUNGLE1BQU0sYUFBYSxXQUFXLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7O0lBRWxELE1BQU0sZUFBZSxPQUFPLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUM7SUFDbkYsTUFBTSxZQUFZLFVBQVUsQ0FBQyxPQUFPLFVBQVUsYUFBYSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksVUFBVSxZQUFZLENBQUMsQ0FBQztJQUN2RyxNQUFNLGNBQWMsU0FBUyxHQUFHLEtBQUssWUFBWSxRQUFRLENBQUMsQ0FBQyxJQUFJLFlBQVksRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDO0lBQ2pHLE1BQU0sZ0JBQWdCLEtBQUs7TUFDekIsTUFBTSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUN6QixPQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO0tBQzdELENBQUM7SUFDRixNQUFNLGdCQUFnQixLQUFLLFlBQVksUUFBUSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQzs7SUFFNUQsTUFBTSxTQUFTLFdBQVc7TUFDeEIsTUFBTSxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLElBQUksV0FBVyxHQUFHLE9BQU8sSUFBSSxDQUFDO01BQ25FLElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsY0FBYyxLQUFLLElBQUksRUFBRTtRQUNuRSxPQUFPLEtBQUssQ0FBQztPQUNkO01BQ0QsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDO01BQzlCLE9BQU8sYUFBYSxDQUFDLFlBQVksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0tBQ3JILENBQUM7O0lBRUYsSUFBSSxvQkFBb0Isb0NBQW9DO01BQzFELElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRTtRQUNoQixPQUFPLFFBQVEsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO09BQzdCLE1BQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQzlDLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN4QixNQUFNO1FBQ0wsT0FBTyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztPQUNuQztLQUNGLENBQUM7O0lBRUYsTUFBTSxhQUFhLDhCQUE4QjtNQUMvQyxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUM7TUFDeEIsTUFBTSxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDO01BQ2pELE9BQU8sT0FBTyxXQUFXLEVBQUU7UUFDekIsVUFBVSxPQUFPLFdBQVcsQ0FBQztRQUM3QixNQUFNLEtBQUssWUFBWSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7VUFDakIsT0FBTyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMxQixNQUFNLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1VBQ25CLE1BQU07U0FDUDtPQUNGO01BQ0QsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO0tBQ3hCLENBQUM7SUFDRixNQUFNLFlBQVksOEJBQThCO01BQzlDLE1BQU0sS0FBSyxhQUFhLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNoQyxPQUFPLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNwRSxDQUFDO0lBQ0YsTUFBTSxVQUFVLHNCQUFzQjtNQUNwQyxNQUFNLE9BQU8sUUFBUSxTQUFTLENBQUMsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUMzRCxNQUFNLFNBQVMsSUFBSSxDQUFDLEtBQUssSUFBSSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDaEQsT0FBTyxNQUFNLElBQUksQ0FBQyxZQUFZLFFBQVEsQ0FBQyxDQUFDO0tBQ3pDLENBQUM7O0lBRUYsTUFBTSxXQUFXLDZCQUE2QixVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoRyxNQUFNLFVBQVUscUJBQXFCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDNUUsTUFBTSxhQUFhLHFCQUFxQixHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdELE1BQU0sWUFBWSw2QkFBNkI7TUFDN0MsTUFBTSxLQUFLLHVCQUF1QixJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQzFELE9BQU8saUJBQWlCLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ2pFLENBQUM7O0lBRUYsTUFBTSxVQUFVLFVBQVUsU0FBUyxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sYUFBYSxVQUFVLGlCQUFpQixLQUFLLEtBQUs7TUFDdEQsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDbkIsT0FBTyxPQUFPLElBQUksa0JBQWtCLENBQUM7T0FDdEMsTUFBTTtRQUNMLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFlBQVksUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDO09BQ25HO0tBQ0YsQ0FBQztJQUNGLE1BQU0sV0FBVyxXQUFXLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQzs7SUFFeEQsTUFBTSxjQUFjLE9BQU8sR0FBRyxTQUFTLFlBQVksRUFBRSxDQUFDO0lBQ3RELE1BQU0sVUFBVSxVQUFVLFlBQVksUUFBUSxDQUFDLE1BQU0sUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNqRSxNQUFNLFlBQVksVUFBVSxXQUFXLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEUsTUFBTSxpQkFBaUIsUUFBUSxJQUFJLEdBQUcsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNuRSxNQUFNLGNBQWMsUUFBUSxlQUFlLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztJQUM1RSxNQUFNLG9CQUFvQixVQUFVLFlBQVksUUFBUSxDQUFDLE1BQU0sVUFBVSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3RGLE1BQU0sa0JBQWtCLFVBQVUsWUFBWSxRQUFRLENBQUMsTUFBTSxVQUFVLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbEYsTUFBTSxzQkFBc0IsUUFBUSxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7O0lBRXZGLE1BQU0sYUFBYSxzQkFBc0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM5RSxNQUFNLGdCQUFnQixzQkFBc0I7TUFDMUMsSUFBSSxTQUFTLEVBQUUsQ0FBQztNQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUs7UUFDM0IsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7VUFDaEIsU0FBUyxNQUFNLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0I7UUFDRCxTQUFTLE1BQU0sT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztPQUNyRCxDQUFDLENBQUM7TUFDSCxPQUFPLE1BQU0sQ0FBQztLQUNmLENBQUM7O0lBRUYsTUFBTSxhQUFhLHFCQUFxQixVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLE1BQU0sY0FBYyxxQkFBcUIsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQzs7SUFFaEUsTUFBTSxTQUFTLHFCQUFxQjtNQUNsQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQzFELEdBQUcsYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7T0FDbkMsTUFBTTtRQUNMLE9BQU8sTUFBTSxDQUFDLHFDQUFxQyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsRyxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7T0FDbkQ7S0FDRixDQUFDO0lBQ0YsTUFBTSxRQUFRLHlCQUF5QjtNQUNyQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ2pDLENBQUM7SUFDRixNQUFNLFNBQVMsb0JBQW9CO01BQ2pDLE1BQU0sTUFBTSxPQUFPLElBQUksQ0FBQztNQUN4QixNQUFNLENBQUMsS0FBSyxFQUFFLFVBQVU7UUFDdEIsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDbkIsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sUUFBUSxrQkFBa0I7TUFDOUIsTUFBTSxJQUFJLE9BQU8sSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDeEMsT0FBTyxDQUFDLEtBQUssSUFBSSxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUM7S0FDbkMsQ0FBQztJQUNGLE1BQU0sU0FBUyxrQkFBa0IsUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sV0FBVyxrQkFBa0I7TUFDakMsT0FBTyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2xDLENBQUM7SUFDRixNQUFNLFFBQVEsV0FBVyxLQUFLLENBQUMsT0FBTyxJQUFJLFdBQVcsRUFBRSxlQUFlO01BQ3BFLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDO01BQzVCLE9BQU8sR0FBRyxDQUFDO0tBQ1osRUFBRSxFQUFFLENBQUMsQ0FBQzs7SUFFUCxNQUFNLEtBQUssV0FBVyxhQUFhLFlBQVksS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5RixNQUFNLE1BQU0sT0FBTztNQUNqQixNQUFNLElBQUksRUFBRSxDQUFDO01BQ2IsTUFBTSxPQUFPLEtBQUs7UUFDaEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDWCxDQUFDO01BQ0YsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNuQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUNuQjtNQUNELE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0sUUFBUSxlQUFlLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO0lBQzNILE1BQU0sVUFBVSxPQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sU0FBUyxVQUFVLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDOztJQUVoRSxNQUFNLGtCQUFrQixtQkFBbUI7TUFDekMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUNoQyxDQUFDOztJQUVGLE1BQU0sYUFBYSx3QkFBd0IsTUFBTSxLQUFLLEVBQUUsSUFBSSxHQUFHLE9BQU8sSUFBSSxNQUFNLE9BQU8sSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssTUFBTSxDQUFDO0lBQy9JLE1BQU0sZ0JBQWdCLGlCQUFpQjtNQUNyQyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsZUFBZSxDQUFDLEdBQUcsRUFBRSxNQUFNLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUM1RSxDQUFDO0lBQ0YsTUFBTSxhQUFhLGlCQUFpQjtNQUNsQyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ25DLENBQUM7SUFDRixNQUFNLFFBQVEsS0FBSyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6QyxNQUFNLE9BQU8sS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sYUFBYSxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNyQyxNQUFNLFVBQVUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxNQUFNLFFBQVEsUUFBUSxRQUFRLEVBQUUsS0FBSztNQUNuQyxNQUFNLE1BQU0sUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztNQUNuQyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxHQUFHLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzFELENBQUM7SUFDRixNQUFNLFVBQVUsU0FBUztNQUN2QixNQUFNLE1BQU0sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQzlCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLEdBQUcsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDMUQsQ0FBQzs7SUFFRixNQUFNLGNBQWMsT0FBTyxHQUFHLE1BQU0sS0FBSyxTQUFTLElBQUksVUFBVSxDQUFDLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxDQUFDOztJQUU3RixNQUFNLGNBQWMsMEJBQTBCO01BQzVDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDcEIsT0FBTyxNQUFNLENBQUMsb0NBQW9DLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RHLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLEdBQUcsS0FBSyxDQUFDLENBQUM7T0FDekQ7TUFDRCxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNwQixHQUFHLE1BQU0sWUFBWSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztPQUN4QztLQUNGLENBQUM7SUFDRixNQUFNLGlCQUFpQixtQkFBbUI7TUFDeEMsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDcEIsR0FBRyxNQUFNLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztPQUNwQztLQUNGLENBQUM7SUFDRixNQUFNLFFBQVEsOEJBQThCO01BQzFDLE1BQU0sTUFBTSxPQUFPLElBQUksQ0FBQztNQUN4QixXQUFXLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNuQyxDQUFDO0lBQ0YsTUFBTSxRQUFRLHVCQUF1QjtNQUNuQyxNQUFNLE1BQU0sT0FBTyxJQUFJLENBQUM7TUFDeEIsTUFBTSxTQUFTLE1BQU0saUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDNUMsTUFBTSxJQUFJLE1BQU0saUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDNUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDNUUsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLG1CQUFtQixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxNQUFNLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUMxRyxNQUFNLFNBQVMsdUJBQXVCO01BQ3BDLE1BQU0sTUFBTSxPQUFPLElBQUksQ0FBQztNQUN4QixNQUFNLE1BQU0saUJBQWlCLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQzdDLE9BQU8sUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3JELENBQUM7SUFDRixNQUFNLFdBQVcsdUJBQXVCO01BQ3RDLE1BQU0sTUFBTSxPQUFPLElBQUksQ0FBQztNQUN4QixjQUFjLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQzlCLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtRQUM5QyxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQzVCO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLGVBQWUsYUFBYSxXQUFXLENBQUMsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7SUFFeEgsTUFBTSxhQUFhLHFCQUFxQjtNQUN0QyxPQUFPLGdCQUFnQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDbEQsQ0FBQztJQUNGLE1BQU0sbUJBQW1CLGdDQUFnQztNQUN2RCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSztRQUNsQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUU7VUFDckIsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDaEMsTUFBTTtVQUNMLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUNqRDtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxtQkFBbUI7TUFDdkIsT0FBTztNQUNQLE9BQU87TUFDUCxPQUFPO01BQ1AsVUFBVTtLQUNYLENBQUM7SUFDRixNQUFNLGlCQUFpQixjQUFjLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM1RSxNQUFNLE9BQU8sb0JBQW9CO01BQy9CLElBQUk7TUFDSixPQUFPO0tBQ1IsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxTQUFTLGdDQUFnQztNQUM3QyxPQUFPO01BQ1AsT0FBTztNQUNQLE9BQU87S0FDUixDQUFDLENBQUM7SUFDSCxNQUFNLFdBQVcsdURBQXVEO01BQ3RFLE9BQU87TUFDUCxPQUFPO01BQ1AsT0FBTztNQUNQLEdBQUc7TUFDSCxNQUFNO01BQ04sUUFBUTtLQUNULENBQUMsQ0FBQztJQUNILE1BQU0sWUFBWSw4QkFBOEI7TUFDOUMsT0FBTztNQUNQLEtBQUs7TUFDTCxPQUFPO0tBQ1IsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxTQUFTLCtDQUErQztNQUM1RCxRQUFRO01BQ1IsUUFBUTtNQUNSLFNBQVM7TUFDVCxTQUFTO0tBQ1YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxZQUFZLCtCQUErQjtNQUMvQyxPQUFPO01BQ1AsT0FBTztNQUNQLE1BQU07S0FDUCxDQUFDLENBQUM7SUFDSCxNQUFNLFdBQVcsdUJBQXVCO01BQ3RDLE9BQU87TUFDUCxPQUFPO0tBQ1IsQ0FBQyxDQUFDOztJQUVILE1BQU0sU0FBUyxnQkFBZ0IsU0FBUyxLQUFLLEtBQUs7TUFDaEQsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDbkIsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCO01BQ0QsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO1FBQ2pDLE9BQU8sUUFBUSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7T0FDL0I7TUFDRCxNQUFNLHFCQUFxQixPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ3BFLE9BQU8sUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0tBQzlELENBQUM7SUFDRixNQUFNLE9BQU8scUJBQXFCLE1BQU0sQ0FBQztNQUN2QyxJQUFJO01BQ0osSUFBSTtLQUNMLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BCLE1BQU0sUUFBUSxZQUFZLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEQsTUFBTSxVQUFVLFlBQVk7TUFDMUIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQzlCLE9BQU8sVUFBVSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztPQUNwQyxNQUFNO1FBQ0wsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFLGVBQWUsVUFBVSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO09BQ3BGO0tBQ0YsQ0FBQztJQUNGLE1BQU0sUUFBUSxxQkFBcUIsU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdkUsTUFBTSxPQUFPLFlBQVksVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwRCxNQUFNLGVBQWUsWUFBWSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7O0lBRTVHLE1BQU0sc0JBQXNCLHVCQUF1QixHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU87TUFDbkUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssVUFBVSxFQUFFO1FBQzVCLE1BQU0sUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVU7VUFDeEMsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1VBQ2hELE9BQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDbkMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztPQUMxQyxNQUFNO1FBQ0wsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUTtVQUN0QyxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7VUFDakQsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1VBQ2pELE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDdkMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxTQUFTLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztPQUNqRDtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sbUJBQW1CLFNBQVMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVTtNQUM1RCxNQUFNLGFBQWEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ2hDLE9BQU8sY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLFVBQVUsR0FBRyxPQUFPLENBQUM7S0FDMUQsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEIsTUFBTSxjQUFjLFNBQVM7TUFDM0IsTUFBTSxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUMzQixNQUFNLGlCQUFpQixZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDM0MsTUFBTSxRQUFRO1FBQ1osR0FBRyxjQUFjO1FBQ2pCLEdBQUcsTUFBTTtPQUNWLENBQUM7TUFDRixPQUFPLG1CQUFtQixDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0tBQ3JELENBQUM7O0lBRUYsTUFBTSxrQkFBa0IsMEJBQTBCLENBQUM7SUFDbkQsTUFBTSw0QkFBNEIsU0FBUyxNQUFNLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLFFBQVEsS0FBSyxDQUFDLFlBQVksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsV0FBVyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDOztJQUU3TCxNQUFNLE1BQU0saUJBQWlCO01BQzNCLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7S0FDM0IsQ0FBQztJQUNGLE1BQU0sUUFBUSw0QkFBNEIsUUFBUSxLQUFLLENBQUMsU0FBUyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUYsTUFBTSxXQUFXLGlDQUFpQztNQUNoRCxNQUFNLFdBQVcsV0FBVyxDQUFDLFNBQVMsRUFBRSxVQUFVO1FBQ2hELE9BQU8sVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQyxDQUFDO09BQ3pDLENBQUMsQ0FBQztNQUNILE9BQU8sUUFBUSxPQUFPLEdBQUcsQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7S0FDM0UsQ0FBQztJQUNGLE1BQU0sY0FBYywwQkFBMEI7TUFDNUMsTUFBTSxNQUFNLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxLQUFLO1FBQ25DLE9BQU8sQ0FBQyxNQUFNLENBQUM7T0FDaEIsQ0FBQyxDQUFDO01BQ0gsT0FBTyxNQUFNLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQy9CLENBQUM7SUFDRixNQUFNLGtCQUFrQixXQUFXO01BQ2pDLE1BQU0sZUFBZSxFQUFFLENBQUM7TUFDeEIsSUFBSSxRQUFRLENBQUMsQ0FBQztNQUNkLElBQUksQ0FBQyxPQUFPLE1BQU0sRUFBRSxVQUFVO1FBQzVCLE1BQU0sVUFBVSxNQUFNLFFBQVEsQ0FBQztRQUMvQixLQUFLLENBQUMsT0FBTyxFQUFFLGVBQWU7VUFDNUIsTUFBTSxXQUFXLEtBQUssR0FBRyxXQUFXLENBQUM7VUFDckMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDdkUsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxPQUFPLENBQUM7T0FDbEIsQ0FBQyxDQUFDO01BQ0gsT0FBTyxZQUFZLENBQUM7S0FDckIsQ0FBQztJQUNGLE1BQU0sYUFBYSxRQUFRO01BQ3pCLE1BQU0sU0FBUyxFQUFFLENBQUM7TUFDbEIsTUFBTSxRQUFRLEVBQUUsQ0FBQztNQUNqQixNQUFNLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDeEUsTUFBTSxnQkFBZ0IsUUFBUSxLQUFLLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQ3pFLElBQUksVUFBVSxDQUFDLENBQUM7TUFDaEIsSUFBSSxhQUFhLENBQUMsQ0FBQztNQUNuQixJQUFJLFdBQVcsQ0FBQyxDQUFDO01BQ2pCLE1BQU07OztPQUdMLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLE9BQU8sUUFBUSxLQUFLLFVBQVUsQ0FBQyxDQUFDO01BQy9ELElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVztRQUNwQixNQUFNLGFBQWEsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxPQUFPLE1BQU0sRUFBRSxXQUFXO1VBQzdCLElBQUksUUFBUSxDQUFDLENBQUM7VUFDZCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO1lBQ2pELEtBQUssRUFBRSxDQUFDO1dBQ1Q7VUFDRCxNQUFNLFdBQVcsaUJBQWlCLENBQUMsYUFBYSxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQztVQUNwRSxNQUFNLFVBQVUsUUFBUSxDQUFDLE9BQU8sUUFBUSxFQUFFLE9BQU8sUUFBUSxFQUFFLE9BQU8sUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7VUFDdkcsS0FBSyxJQUFJLHlCQUF5QixDQUFDLEVBQUUsc0JBQXNCLEdBQUcsT0FBTyxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsRUFBRTtZQUN2RyxLQUFLLElBQUksc0JBQXNCLENBQUMsRUFBRSxtQkFBbUIsR0FBRyxPQUFPLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxFQUFFO2NBQzlGLE1BQU0sY0FBYyxRQUFRLEdBQUcsbUJBQW1CLENBQUM7Y0FDbkQsTUFBTSxpQkFBaUIsS0FBSyxHQUFHLHNCQUFzQixDQUFDO2NBQ3RELE1BQU0sU0FBUyxHQUFHLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDO2NBQ2hELE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUM7Y0FDekIsYUFBYSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3ZEO1dBQ0Y7VUFDRCxVQUFVLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMxQixDQUFDLENBQUM7UUFDSCxPQUFPLEVBQUUsQ0FBQztRQUNWLEtBQUssS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLFFBQVEsRUFBRSxDQUFDO09BQ1osQ0FBQyxDQUFDO01BQ0gsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXO1FBQzdELE1BQU0sVUFBVSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsTUFBTSxhQUFhLFFBQVEsQ0FBQyxPQUFPLFFBQVEsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM5RCxPQUFPO1VBQ0wsV0FBVyxDQUFDLFVBQVUsQ0FBQztVQUN2QixPQUFPO1NBQ1IsQ0FBQztPQUNILENBQUMsV0FBVyxDQUFDLE9BQU87UUFDbkIsV0FBVyxFQUFFO1FBQ2IsU0FBUyxFQUFFO09BQ1osQ0FBQyxDQUFDLENBQUM7TUFDSixNQUFNLFNBQVMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztNQUN6QyxPQUFPO1FBQ0wsTUFBTSxNQUFNO1FBQ1osTUFBTTtRQUNOLEtBQUssS0FBSztRQUNWLE9BQU87UUFDUCxTQUFTO09BQ1YsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFlBQVksU0FBUztNQUN6QixNQUFNLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQ2hDLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3pCLENBQUM7SUFDRixNQUFNLFlBQVksYUFBYSxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sY0FBYyxhQUFhLE1BQU0sQ0FBQyxTQUFTLFFBQVEsQ0FBQyxDQUFDO0lBQzNELE1BQU0sYUFBYSxhQUFhLElBQUksQ0FBQyxTQUFTLFFBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ25FLE1BQU0sY0FBYyw0QkFBNEIsUUFBUSxLQUFLLENBQUMsU0FBUyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUM5RixNQUFNLFlBQVk7TUFDaEIsU0FBUztNQUNULFVBQVUsVUFBVTtNQUNwQixLQUFLO01BQ0wsUUFBUTtNQUNSLFdBQVc7TUFDWCxTQUFTO01BQ1QsV0FBVztNQUNYLFVBQVU7TUFDVixXQUFXO0tBQ1osQ0FBQzs7SUFFRixJQUFJLFdBQVcsT0FBTyxLQUFLLE1BQU0sUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7O0lBRWhFLE1BQU0sc0JBQXNCLG9CQUFvQjtNQUM5QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQ3ZDLElBQUksZUFBZSxDQUFDO01BQ3BCLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDckMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRCxJQUFJLFdBQVcsQ0FBQyxlQUFlLENBQUMsRUFBRTtVQUNoQyxrQkFBa0IsWUFBWSxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxlQUFlLEtBQUssWUFBWSxFQUFFO1VBQ3BDLE9BQU8sRUFBRSxDQUFDO1NBQ1g7T0FDRjtNQUNELE9BQU8sZUFBZSxDQUFDO0tBQ3hCLENBQUM7SUFDRixNQUFNLFdBQVcsdUJBQXVCO01BQ3RDLFFBQVEsS0FBSyxDQUFDLG1CQUFtQixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUztRQUNyRCxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7VUFDbEIsTUFBTSxVQUFVLE9BQU8sQ0FBQyxPQUFPLEdBQUcsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNuRDtPQUNGLENBQUMsQ0FBQztNQUNILElBQUksSUFBSSxFQUFFO1FBQ1IsTUFBTSxVQUFVLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztPQUNqRDtLQUNGLENBQUM7SUFDRixNQUFNLFlBQVksdUJBQXVCO01BQ3ZDLFFBQVEsS0FBSyxDQUFDLG1CQUFtQixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUztRQUNyRCxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7VUFDbEIsTUFBTSxVQUFVLE9BQU8sQ0FBQyxRQUFRLEdBQUcsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNwRDtPQUNGLENBQUMsQ0FBQztNQUNILElBQUksSUFBSSxFQUFFO1FBQ1IsTUFBTSxVQUFVLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztPQUNsRDtLQUNGLENBQUM7O0lBRUYsTUFBTSxvQkFBb0IseUJBQXlCO01BQ2pELE1BQU0sU0FBUyxDQUFDLGVBQWUsRUFBRTtRQUMvQixHQUFHLElBQUk7UUFDUCxLQUFLO09BQ04sQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLFdBQVcsa0JBQWtCLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sVUFBVSw2QkFBNkIsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdEYsTUFBTSxxQkFBcUIsaUNBQWlDO01BQzFELE1BQU0sZUFBZSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDL0QsTUFBTSxlQUFlLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUMvRCxNQUFNLGNBQWMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sR0FBRyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDbkUsTUFBTSxjQUFjLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEdBQUcsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ25FLE9BQU8sSUFBSSxHQUFHLFlBQVksR0FBRyxZQUFZLEdBQUcsV0FBVyxHQUFHLFdBQVcsQ0FBQztLQUN2RSxDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsd0JBQXdCO01BQ2pELE1BQU0sTUFBTSxPQUFPLElBQUksQ0FBQztNQUN4QixNQUFNLFFBQVEsR0FBRyxzQkFBc0IsRUFBRSxNQUFNLElBQUksR0FBRyxZQUFZLENBQUM7TUFDbkUsT0FBTyxTQUFTLEtBQUssWUFBWSxHQUFHLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNqRyxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsV0FBVyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7O0lBRTVFLE1BQU0sV0FBVyxhQUFhLENBQUM7O0lBRS9CLElBQUksV0FBVyxPQUFPLEtBQUssTUFBTSxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7O0lBRXpELE1BQU0sc0JBQXNCLDRJQUE0SSxDQUFDO0lBQ3pLLE1BQU0sMEJBQTBCLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSztNQUM1QyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDNUIsT0FBTztRQUNMLE9BQU8sSUFBSTtRQUNYLE9BQU8sSUFBSTtPQUNaLENBQUM7S0FDSCxDQUFDLENBQUM7SUFDSCxNQUFNLDBCQUEwQixHQUFHLENBQUM7TUFDbEMsT0FBTztNQUNQLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixPQUFPO01BQ1AsT0FBTztNQUNQLFFBQVE7TUFDUixNQUFNO01BQ04sUUFBUTtLQUNULEVBQUUsUUFBUTtNQUNULE9BQU87UUFDTCxPQUFPLElBQUk7UUFDWCxPQUFPLElBQUksWUFBWSxFQUFFO09BQzFCLENBQUM7S0FDSCxDQUFDLENBQUM7SUFDSCxNQUFNLGVBQWUsTUFBTSxDQUFDO0lBQzVCLE1BQU0sc0JBQXNCLFVBQVU7TUFDcEMsSUFBSSxFQUFFLENBQUM7TUFDUCxNQUFNLE1BQU0sTUFBTSxJQUFJLENBQUM7TUFDdkIsTUFBTSxjQUFjLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxNQUFNLFVBQVUsU0FBUyxFQUFFLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLFFBQVEsRUFBRSxDQUFDO01BQ3JJLE9BQU8sUUFBUSxDQUFDLFlBQVksUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0tBQzNELENBQUM7SUFDRixNQUFNLHlCQUF5QiwyQkFBMkI7TUFDeEQsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzdELE9BQU8sYUFBYSxDQUFDO09BQ3RCLE1BQU0sSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDakMsT0FBTztVQUNMLEdBQUcsYUFBYTtVQUNoQixPQUFPLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztTQUNuQyxDQUFDO09BQ0gsTUFBTTtRQUNMLE9BQU87VUFDTCxHQUFHLGFBQWE7VUFDaEIsT0FBTyxZQUFZO1NBQ3BCLENBQUM7T0FDSDtLQUNGLENBQUM7SUFDRixNQUFNLDZCQUE2QiwrQkFBK0I7TUFDaEUsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUM1RCxPQUFPLGlCQUFpQixDQUFDO09BQzFCLE1BQU0sSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDakMsT0FBTztVQUNMLEdBQUcsaUJBQWlCO1VBQ3BCLE9BQU8sbUJBQW1CLENBQUMsTUFBTSxDQUFDO1NBQ25DLENBQUM7T0FDSCxNQUFNO1FBQ0wsT0FBTztVQUNMLEdBQUcsaUJBQWlCO1VBQ3BCLE9BQU8sWUFBWTtTQUNwQixDQUFDO09BQ0g7S0FDRixDQUFDO0lBQ0YsTUFBTSxTQUFTLFFBQVEsVUFBVSxNQUFNLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFELE1BQU0sV0FBVyxVQUFVO01BQ3pCLE1BQU0saUJBQWlCLE1BQU0sUUFBUSxTQUFTLENBQUM7TUFDL0MsY0FBYyxDQUFDLHFCQUFxQixFQUFFO1FBQ3BDLFdBQVcsVUFBVTtRQUNyQixTQUFTLHVCQUF1QjtPQUNqQyxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMscUJBQXFCLEVBQUU7UUFDcEMsV0FBVyxVQUFVO1FBQ3JCLFNBQVMsdUJBQXVCO09BQ2pDLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxtQkFBbUIsRUFBRTtRQUNsQyxXQUFXLFNBQVM7UUFDcEIsU0FBUyxJQUFJO09BQ2QsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLGtCQUFrQixFQUFFO1FBQ2pDLFdBQVcsU0FBUztRQUNwQixTQUFTLElBQUk7T0FDZCxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsY0FBYyxFQUFFO1FBQzdCLFdBQVcsU0FBUztRQUNwQixTQUFTLElBQUk7T0FDZCxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsMEJBQTBCLEVBQUU7UUFDekMsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsSUFBSTtPQUNkLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxZQUFZLEVBQUU7UUFDM0IsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsQ0FBQyxRQUFRLFdBQVcsUUFBUSxFQUFFO09BQ3hDLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyx1QkFBdUIsRUFBRTtRQUN0QyxXQUFXLFVBQVU7UUFDckIsU0FBUyxFQUFFO09BQ1osQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLHNCQUFzQixFQUFFO1FBQ3JDLFdBQVcsVUFBVTtRQUNyQixTQUFTLEVBQUU7T0FDWixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsa0JBQWtCLEVBQUU7UUFDakMsV0FBVyxVQUFVO1FBQ3JCLFNBQVMsRUFBRTtPQUNaLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxlQUFlLEVBQUU7UUFDOUIsV0FBVyxRQUFRO1FBQ25CLFNBQVMsbUJBQW1CO09BQzdCLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyw0QkFBNEIsRUFBRTtRQUMzQyxXQUFXLFVBQVU7UUFDckIsU0FBUyxFQUFFO09BQ1osQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLHdCQUF3QixFQUFFO1FBQ3ZDLFdBQVcsVUFBVTtRQUNyQixTQUFTLEVBQUU7T0FDWixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDdkQsTUFBTSx1QkFBdUIsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDM0QsTUFBTSx1QkFBdUIsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDM0QsTUFBTSxxQkFBcUIsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDdkQsTUFBTSxvQkFBb0IsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDckQsTUFBTSxzQkFBc0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sdUJBQXVCLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sZUFBZSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUMsTUFBTSxxQkFBcUIsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDeEQsTUFBTSxtQkFBbUIsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDekQsTUFBTSxrQkFBa0IsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDdkQsTUFBTSxvQkFBb0IsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDckQsTUFBTSxhQUFhLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMzQyxNQUFNLDZCQUE2QixNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUN4RSxNQUFNLHlCQUF5QixNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUNoRSxNQUFNLGlCQUFpQixVQUFVLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU8sQ0FBQztJQUN4RSxNQUFNLHFCQUFxQixVQUFVLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxLQUFLLFlBQVksQ0FBQztJQUNqRixNQUFNLG1CQUFtQixVQUFVO01BQ2pDLE1BQU0sVUFBVSxNQUFNLFFBQVEsQ0FBQztNQUMvQixNQUFNLGdCQUFnQixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO01BQzFELE9BQU8sT0FBTyxNQUFNLENBQUMsc0JBQXNCLENBQUMsR0FBRyxhQUFhLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0tBQzlHLENBQUM7SUFDRixNQUFNLHVCQUF1QixVQUFVO01BQ3JDLE1BQU0sVUFBVSxNQUFNLFFBQVEsQ0FBQztNQUMvQixNQUFNLG9CQUFvQixPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO01BQ2xFLE9BQU8sT0FBTyxNQUFNLENBQUMsMEJBQTBCLENBQUMsR0FBRyxpQkFBaUIsR0FBRywwQkFBMEIsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztLQUM5SCxDQUFDOztJQUVGLE1BQU0sV0FBVyxvQkFBb0I7TUFDbkMsT0FBTyxNQUFNLE9BQU8sSUFBSSxNQUFNLFNBQVMsSUFBSSxNQUFNLE9BQU8sR0FBRyxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksTUFBTSxVQUFVLElBQUksTUFBTSxJQUFJLElBQUksTUFBTSxTQUFTLElBQUksTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLE1BQU0sVUFBVSxDQUFDO0tBQzNMLENBQUM7SUFDRixNQUFNLGdCQUFnQix1QkFBdUI7TUFDM0MsSUFBSSxTQUFTLElBQUksQ0FBQztNQUNsQixNQUFNLGlCQUFpQixLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQy9DLEtBQUssSUFBSSxJQUFJLE1BQU0sU0FBUyxFQUFFLENBQUMsSUFBSSxNQUFNLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN4RCxLQUFLLElBQUksSUFBSSxNQUFNLFNBQVMsRUFBRSxDQUFDLElBQUksTUFBTSxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUU7VUFDeEQsU0FBUyxNQUFNLElBQUksU0FBUyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzVFO09BQ0Y7TUFDRCxPQUFPLE1BQU0sR0FBRyxRQUFRLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO0tBQ3pELENBQUM7O0lBRUYsTUFBTSxZQUFZLHNCQUFzQjtNQUN0QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sT0FBTyxFQUFFLE9BQU8sT0FBTyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLEdBQUcsT0FBTyxRQUFRLEdBQUcsQ0FBQyxFQUFFLE9BQU8sSUFBSSxHQUFHLE9BQU8sUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sT0FBTyxHQUFHLE9BQU8sUUFBUSxHQUFHLENBQUMsRUFBRSxPQUFPLE9BQU8sR0FBRyxPQUFPLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25RLENBQUM7SUFDRixNQUFNLFlBQVksc0NBQXNDO01BQ3RELE1BQU0sY0FBYyxTQUFTLFNBQVMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO01BQ2pFLE1BQU0sZUFBZSxTQUFTLFNBQVMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO01BQ25FLE9BQU8sV0FBVyxLQUFLLENBQUMsTUFBTTtRQUM1QixPQUFPLFlBQVksSUFBSSxDQUFDLE1BQU07VUFDNUIsT0FBTyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzFCLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFdBQVcsc0NBQXNDO01BQ3JELE9BQU8sU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVO1FBQ2hFLE9BQU8sYUFBYSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztPQUN6QyxDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sU0FBUyx3QkFBd0I7TUFDckMsTUFBTSxZQUFZLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUN0QyxPQUFPLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3pDLENBQUM7SUFDRixNQUFNLGVBQWUsU0FBUyxVQUFVLENBQUM7O0lBRXpDLE1BQU0sU0FBUyxxQkFBcUI7TUFDbEMsTUFBTSxXQUFXLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNoQyxRQUFRLEtBQUssQ0FBQyxLQUFLO1FBQ2pCLENBQUMsSUFBSSxhQUFhLENBQUMsT0FBTyxJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztPQUM3QyxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxVQUFVLHFCQUFxQjtNQUNuQyxNQUFNLFVBQVUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3BDLE9BQU8sS0FBSyxDQUFDLE1BQU07UUFDakIsTUFBTSxXQUFXLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxRQUFRLEtBQUssQ0FBQyxLQUFLO1VBQ2pCLFFBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDdEIsQ0FBQyxDQUFDO09BQ0osRUFBRSxLQUFLO1FBQ04sTUFBTSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztPQUNwQixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxVQUFVLHFCQUFxQjtNQUNuQyxNQUFNLGVBQWUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3hDLFlBQVksS0FBSyxDQUFDLE1BQU07UUFDdEIsUUFBUSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztPQUMzQixFQUFFLEtBQUs7UUFDTixNQUFNLElBQUksYUFBYSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDN0MsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sV0FBVyxxQkFBcUI7TUFDcEMsTUFBTSxJQUFJLFlBQVksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO0tBQ3JDLENBQUM7SUFDRixNQUFNLE9BQU8sc0JBQXNCO01BQ2pDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDekIsUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztLQUM1QixDQUFDOztJQUVGLE1BQU0sUUFBUSxzQkFBc0I7TUFDbEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVO1FBQ3ZCLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDZixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxTQUFTLHNCQUFzQjtNQUNuQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUs7UUFDbEIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztPQUNyQixDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sU0FBUyxXQUFXO01BQ3hCLE1BQU0sTUFBTSxPQUFPLElBQUksQ0FBQztNQUN4QixJQUFJLEdBQUcsV0FBVyxLQUFLLElBQUksRUFBRTtRQUMzQixHQUFHLFdBQVcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO09BQ2pDO0tBQ0YsQ0FBQztJQUNGLE1BQU0sU0FBUyxXQUFXO01BQ3hCLE1BQU0sV0FBVyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDckMsSUFBSSxRQUFRLE9BQU8sR0FBRyxDQUFDLEVBQUU7UUFDdkIsS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztPQUMxQjtNQUNELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUNqQixDQUFDOztJQUVGLE1BQU0sWUFBWSxjQUFjO01BQzlCLE1BQU0sTUFBTSxXQUFXO1FBQ3JCLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUU7VUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLEdBQUcsSUFBSSxHQUFHLGNBQWMsR0FBRyxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUM7U0FDM0U7UUFDRCxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO09BQ3JDLENBQUM7TUFDRixNQUFNLFlBQVksV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7TUFDbEcsTUFBTSxNQUFNLG9CQUFvQjtRQUM5QixJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1VBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxHQUFHLGNBQWMsR0FBRyxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUM7U0FDL0U7UUFDRCxPQUFPLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztPQUMvQixDQUFDO01BQ0YsT0FBTztRQUNMLEdBQUc7UUFDSCxTQUFTO1FBQ1QsR0FBRztPQUNKLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sTUFBTSxTQUFTLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDOztJQUV4RCxJQUFJLGdCQUFnQjtNQUNsQixNQUFNO01BQ04sR0FBRztNQUNILEtBQUs7TUFDTCxTQUFTO01BQ1QsT0FBTztNQUNQLFlBQVk7TUFDWixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixLQUFLO01BQ0wsU0FBUztNQUNULElBQUk7TUFDSixJQUFJO01BQ0osSUFBSTtNQUNKLE9BQU87TUFDUCxPQUFPO01BQ1AsT0FBTztNQUNQLE9BQU87TUFDUCxTQUFTO01BQ1QsSUFBSTtNQUNKLElBQUk7TUFDSixJQUFJO01BQ0osSUFBSTtNQUNKLElBQUk7TUFDSixJQUFJO01BQ0osSUFBSTtNQUNKLElBQUk7TUFDSixJQUFJO01BQ0osWUFBWTtNQUNaLEtBQUs7TUFDTCxTQUFTO0tBQ1YsQ0FBQzs7SUFFRixJQUFJLGNBQWMsTUFBTTtNQUN0QixNQUFNLFVBQVUsV0FBVztRQUN6QixPQUFPLFlBQVksUUFBUSxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztPQUMzRCxDQUFDO01BQ0YsTUFBTSxXQUFXLFdBQVcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7TUFDekQsTUFBTSxhQUFhLFdBQVc7UUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtVQUN2QixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssTUFBTSxFQUFFO1VBQzVCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLFFBQVEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7T0FDL0MsQ0FBQztNQUNGLE1BQU0sYUFBYSxXQUFXO1FBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7VUFDdkIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE9BQU8sUUFBUSxDQUFDO1VBQ2QsSUFBSTtVQUNKLEtBQUs7VUFDTCxJQUFJO1VBQ0osT0FBTztTQUNSLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7T0FDbkIsQ0FBQztNQUNGLE1BQU0sZ0JBQWdCLFdBQVcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxPQUFPLENBQUM7TUFDckcsTUFBTSxrQkFBa0Isb0JBQW9CO1FBQzFDLE9BQU8sT0FBTyxJQUFJLHdCQUF3QixDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7T0FDdkQsQ0FBQztNQUNGLE1BQU0sbUJBQW1CLHlCQUF5QjtRQUNoRCxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7T0FDekIsQ0FBQztNQUNGLE1BQU0sWUFBWSxXQUFXO1FBQzNCLE1BQU0sTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUIsT0FBTyxRQUFRLENBQUM7VUFDZCxRQUFRO1VBQ1IsVUFBVTtVQUNWLFFBQVE7VUFDUixVQUFVO1VBQ1YsU0FBUztVQUNULE9BQU87VUFDUCxPQUFPO1VBQ1AsVUFBVTtVQUNWLEtBQUs7U0FDTixFQUFFLEdBQUcsQ0FBQyxDQUFDO09BQ1QsQ0FBQztNQUNGLE1BQU0sY0FBYyxXQUFXLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7TUFDOUYsT0FBTztRQUNMLElBQUksUUFBUSxDQUFDO1VBQ1gsVUFBVSxRQUFRO1VBQ2xCLFNBQVMsU0FBUztVQUNsQixXQUFXLFVBQVU7VUFDckIsS0FBSyxPQUFPO1NBQ2IsQ0FBQztRQUNGLE1BQU0sUUFBUSxDQUFDO1VBQ2IsVUFBVSxXQUFXO1VBQ3JCLFdBQVcsYUFBYTtTQUN6QixDQUFDO1FBQ0YsUUFBUSxRQUFRLENBQUM7VUFDZixLQUFLLEtBQUs7VUFDVixRQUFRLE1BQU07VUFDZCxLQUFLLEtBQUs7VUFDVixRQUFRLFFBQVE7U0FDakIsQ0FBQztRQUNGLE9BQU8sUUFBUSxDQUFDO1VBQ2QsS0FBSyxLQUFLO1VBQ1YsS0FBSyxLQUFLO1VBQ1YsUUFBUSxRQUFRO1VBQ2hCLFFBQVEsZ0JBQWdCO1NBQ3pCLENBQUM7UUFDRixRQUFRLFFBQVEsQ0FBQztVQUNmLFFBQVEsTUFBTTtVQUNkLE9BQU8sT0FBTztVQUNkLFVBQVUsS0FBSztVQUNmLFFBQVEsUUFBUTtVQUNoQixXQUFXLE1BQU07VUFDakIsU0FBUyxPQUFPO1VBQ2hCLE1BQU0sSUFBSTtTQUNYLENBQUM7UUFDRixRQUFRLFFBQVEsQ0FBQztVQUNmLFFBQVEsTUFBTTtVQUNkLFFBQVEsTUFBTTtTQUNmLENBQUM7UUFDRixRQUFRLFFBQVEsQ0FBQztVQUNmLElBQUksWUFBWSxRQUFRO1VBQ3hCLE9BQU8sT0FBTztVQUNkLE1BQU0sWUFBWSxTQUFTO1NBQzVCLENBQUM7UUFDRixPQUFPLFFBQVEsQ0FBQztVQUNkLGVBQWU7VUFDZixhQUFhLFdBQVc7VUFDeEIsYUFBYSxXQUFXO1NBQ3pCLENBQUM7UUFDRixVQUFVLFFBQVEsQ0FBQztVQUNqQixVQUFVLFVBQVU7VUFDcEIsTUFBTSxJQUFJO1VBQ1YsUUFBUSxNQUFNO1VBQ2QsUUFBUTtVQUNSLFFBQVEsTUFBTTtVQUNkLFdBQVcsU0FBUztVQUNwQixXQUFXLFNBQVM7VUFDcEIsU0FBUztVQUNULFdBQVc7VUFDWCxTQUFTLEdBQUc7VUFDWixTQUFTLEdBQUc7VUFDWixVQUFVO1VBQ1YsVUFBVTtVQUNWLGFBQWE7U0FDZCxDQUFDO1FBQ0YsSUFBSSxFQUFFO1FBQ04sSUFBSSxJQUFJO09BQ1QsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxNQUFNLGlDQUFpQztNQUMzQyxNQUFNLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3pCLE1BQU0sT0FBTyxRQUFRLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUMvQixPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztLQUN0QyxDQUFDO0lBQ0YsTUFBTSxTQUFTLDhCQUE4QjtNQUMzQyxPQUFPLFFBQVEsT0FBTyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztLQUN6RixDQUFDO0lBQ0YsTUFBTSxZQUFZLGdDQUFnQztNQUNoRCxNQUFNLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNuQyxPQUFPLEtBQUssQ0FBQyxJQUFJLEVBQUUsVUFBVTtRQUMzQixNQUFNLFVBQVUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsQyxPQUFPLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQzVDLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDWCxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsMEJBQTBCO01BQzlDLE9BQU8sS0FBSyxLQUFLLENBQUMsS0FBSztRQUNyQixPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQzFDLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxjQUFjLE1BQU0sQ0FBQzs7SUFFM0IsTUFBTSxXQUFXLFdBQVcsRUFBRSxDQUFDO0lBQy9CLE1BQU0sWUFBWSxvQkFBb0I7TUFDcEMsT0FBTyxXQUFXLENBQUMsUUFBUSxFQUFFLHdCQUF3QjtRQUNuRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztPQUN0QixFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQ2QsQ0FBQzs7SUFFRixNQUFNLGNBQWMsYUFBYTtNQUMvQixPQUFPLFFBQVEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDckMsQ0FBQztJQUNGLE1BQU0sYUFBYSx5QkFBeUI7TUFDMUMsTUFBTSxPQUFPLFdBQVcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDOUMsT0FBTyxJQUFJLE9BQU8sR0FBRyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztLQUNoRSxDQUFDO0lBQ0YsTUFBTSxXQUFXLDREQUE0RDtNQUMzRSxPQUFPLFVBQVUsQ0FBQyxTQUFTLEVBQUUscUJBQXFCLENBQUMsS0FBSyxDQUFDLFNBQVM7UUFDaEUsT0FBTyxVQUFVLENBQUMsU0FBUyxFQUFFLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxRQUFRO1VBQzlELE9BQU8sU0FBUyxDQUFDLFdBQVcsRUFBRTtZQUM1QixLQUFLO1lBQ0wsSUFBSTtXQUNMLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFDZCxPQUFPO2NBQ0wsS0FBSztjQUNMLElBQUk7Y0FDSixLQUFLO2FBQ04sQ0FBQztXQUNILENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxXQUFXLHlCQUF5QjtNQUN4QyxPQUFPLFVBQVUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDeEMsQ0FBQztJQUNGLE1BQU0sY0FBYyw0REFBNEQ7TUFDOUUsT0FBTyxRQUFRLENBQUMsU0FBUyxFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxTQUFTO1FBQ3BGLE1BQU0sU0FBUyxZQUFZO1VBQ3pCLE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNoQyxDQUFDO1FBQ0YsTUFBTSxrQkFBa0IseUJBQXlCLENBQUM7UUFDbEQsTUFBTSxnQkFBZ0IsUUFBUSxDQUFDLEtBQUssTUFBTSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNyRSxNQUFNLGVBQWUsUUFBUSxDQUFDLEtBQUssS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuRSxPQUFPLGFBQWEsS0FBSyxDQUFDLE1BQU07VUFDOUIsT0FBTyxZQUFZLEtBQUssQ0FBQyxNQUFNO1lBQzdCLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxNQUFNLEVBQUUsS0FBSyxNQUFNLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO1dBQ3BGLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxVQUFVLFNBQVMsR0FBRyxDQUFDLEtBQUssRUFBRSxZQUFZLFFBQVEsQ0FBQyxDQUFDOztJQUUxRCxNQUFNLGNBQWMsbUJBQW1CLENBQUM7SUFDeEMsTUFBTSxzQkFBc0IsS0FBSyxHQUFHLFdBQVcsR0FBRyxPQUFPLEdBQUcsV0FBVyxHQUFHLEdBQUcsQ0FBQztJQUM5RSxNQUFNLG1CQUFtQix5QkFBeUIsQ0FBQztJQUNuRCxNQUFNLDJCQUEyQixLQUFLLEdBQUcsZ0JBQWdCLEdBQUcsT0FBTyxHQUFHLGdCQUFnQixHQUFHLEdBQUcsQ0FBQztJQUM3RixNQUFNLGtCQUFrQix3QkFBd0IsQ0FBQztJQUNqRCxNQUFNLDBCQUEwQixLQUFLLEdBQUcsZUFBZSxHQUFHLE9BQU8sR0FBRyxlQUFlLEdBQUcsR0FBRyxDQUFDO0lBQzFGLE1BQU0sV0FBVztNQUNmLFVBQVUsV0FBVztNQUNyQixrQkFBa0IsbUJBQW1CO01BQ3JDLGVBQWUsZ0JBQWdCO01BQy9CLHVCQUF1Qix3QkFBd0I7TUFDL0MsY0FBYyxlQUFlO01BQzdCLHNCQUFzQix1QkFBdUI7S0FDOUMsQ0FBQzs7SUFFRixNQUFNLDJCQUEyQixXQUFXLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLHNCQUFzQixDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JLLE1BQU0sMkJBQTJCLFlBQVksc0JBQXNCO01BQ2pFLE1BQU0sV0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDaEMsTUFBTSxPQUFPLFFBQVEsS0FBSyxLQUFLLElBQUksUUFBUSxLQUFLLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7TUFDM0csT0FBTyxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUMxQyxDQUFDO0lBQ0YsTUFBTSw0QkFBNEIsd0JBQXdCLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDNUUsTUFBTSxtQkFBbUIsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0QsTUFBTSx3QkFBd0IsVUFBVSxPQUFPLENBQUMsTUFBTSxNQUFNLE1BQU0saUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZGLE1BQU0sdUJBQXVCLHdCQUF3QjtNQUNuRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDM0MsTUFBTSxVQUFVLE9BQU8sS0FBSyxDQUFDLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO01BQzVFLE9BQU8sS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsRUFBRSxXQUFXLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNqTCxDQUFDOztJQUVGLE1BQU0sc0JBQXNCO01BQzFCO1FBQ0UsTUFBTSxNQUFNO1FBQ1osT0FBTyxFQUFFO09BQ1Y7TUFDRDtRQUNFLE1BQU0sS0FBSztRQUNYLE9BQU8sS0FBSztPQUNiO01BQ0Q7UUFDRSxNQUFNLFFBQVE7UUFDZCxPQUFPLFFBQVE7T0FDaEI7TUFDRDtRQUNFLE1BQU0sUUFBUTtRQUNkLE9BQU8sUUFBUTtPQUNoQjtLQUNGLENBQUM7O0lBRUYsTUFBTSxZQUFZLFVBQVUsRUFBRSxPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUQsTUFBTSxpQkFBaUIsa0NBQWtDLENBQUM7SUFDMUQsTUFBTSxnQkFBZ0IsMkNBQTJDLENBQUM7SUFDbEUsTUFBTSxjQUFjLE9BQU8sY0FBYyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksYUFBYSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0UsTUFBTSxlQUFlLE9BQU8sYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDbEUsTUFBTSxlQUFlLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDLEVBQUUsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7SUFDN0csTUFBTSxRQUFRLGFBQWE7TUFDekIsTUFBTSxNQUFNLFNBQVMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQ25DLE9BQU8sQ0FBQyxHQUFHLE9BQU8sS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLGFBQWEsRUFBRSxDQUFDO0tBQzNELENBQUM7SUFDRixNQUFNLFdBQVcsY0FBYztNQUM3QixNQUFNLFFBQVEsS0FBSyxDQUFDLFVBQVUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUM7TUFDdkYsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDekIsQ0FBQzs7SUFFRixNQUFNLFdBQVcsd0RBQXdELENBQUM7SUFDMUUsTUFBTSxZQUFZLCtFQUErRSxDQUFDO0lBQ2xHLE1BQU0sYUFBYSw4QkFBOEI7TUFDL0MsR0FBRztNQUNILEtBQUs7TUFDTCxJQUFJO01BQ0osS0FBSztLQUNOLENBQUMsQ0FBQztJQUNILE1BQU0sbUJBQW1CLDZCQUE2QjtNQUNwRCxNQUFNLElBQUksUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztNQUM1QixNQUFNLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztNQUM5QixNQUFNLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztNQUM3QixNQUFNLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQzVCLE9BQU8sVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQy9CLENBQUM7SUFDRixNQUFNLGFBQWEsY0FBYztNQUMvQixJQUFJLFVBQVUsS0FBSyxhQUFhLEVBQUU7UUFDaEMsT0FBTyxRQUFRLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUM5QztNQUNELE1BQU0sV0FBVyxRQUFRLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztNQUMzQyxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUU7UUFDckIsT0FBTyxRQUFRLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO09BQ3BGO01BQ0QsTUFBTSxZQUFZLFNBQVMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO01BQzdDLElBQUksU0FBUyxLQUFLLElBQUksRUFBRTtRQUN0QixPQUFPLFFBQVEsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDaEc7TUFDRCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7S0FDeEIsQ0FBQzs7SUFFRixNQUFNLFdBQVcsU0FBUyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNO01BQzVHLE1BQU0sU0FBUyxRQUFRLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUNoRCxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUM7TUFDbEIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ2pCLE1BQU0sZ0JBQWdCLE1BQU0sV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzlDLGFBQWEsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxNQUFNLEVBQUUsTUFBTSxPQUFPLENBQUMsQ0FBQztNQUMzRCxhQUFhLFVBQVUsR0FBRyxTQUFTLENBQUM7TUFDcEMsYUFBYSxVQUFVLEdBQUcsS0FBSyxDQUFDO01BQ2hDLGFBQWEsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ25DLE1BQU0sT0FBTyxhQUFhLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDO01BQ3pELE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDbEIsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNsQixNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2xCLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDbEIsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDekMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxrQkFBa0IsU0FBUyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzs7SUFFdEcsTUFBTSxPQUFPLFdBQVc7TUFDdEIsSUFBSSxRQUFRLE9BQU8sQ0FBQztNQUNwQixNQUFNLE1BQU0sTUFBTTtRQUNoQixPQUFPLEtBQUssQ0FBQztPQUNkLENBQUM7TUFDRixNQUFNLE1BQU0sS0FBSztRQUNmLFFBQVEsQ0FBQyxDQUFDO09BQ1gsQ0FBQztNQUNGLE9BQU87UUFDTCxHQUFHO1FBQ0gsR0FBRztPQUNKLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sWUFBWSxZQUFZO01BQzVCLE1BQU0sVUFBVSxJQUFJLENBQUMsUUFBUSxLQUFLLEVBQUUsQ0FBQyxDQUFDO01BQ3RDLE1BQU0sU0FBUyxNQUFNLE9BQU8sSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUNsRCxNQUFNLFFBQVEsTUFBTTtRQUNsQixNQUFNLEVBQUUsQ0FBQztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQztPQUM5QixDQUFDO01BQ0YsTUFBTSxRQUFRLE1BQU0sT0FBTyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7TUFDM0MsTUFBTSxNQUFNLE1BQU0sT0FBTyxJQUFJLEVBQUUsQ0FBQztNQUNoQyxNQUFNLE1BQU0sS0FBSztRQUNmLE1BQU0sRUFBRSxDQUFDO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUMvQixDQUFDO01BQ0YsT0FBTztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsR0FBRztRQUNILEdBQUc7T0FDSixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sYUFBYSxNQUFNLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQzs7SUFFcEQsTUFBTSxnQkFBZ0IscUNBQXFDO01BQ3pELE9BQU8sT0FBTztRQUNaLE1BQU0sZ0JBQWdCLFVBQVUsRUFBRSxDQUFDO1FBQ25DLE1BQU0sU0FBUyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEMsTUFBTSxPQUFPLE1BQU07VUFDakIsTUFBTSxnQkFBZ0IscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7VUFDcEQsTUFBTSxZQUFZLFFBQVEsTUFBTSxVQUFVLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxPQUFPLFdBQVcsRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1VBQ3ZHLElBQUksTUFBTSxFQUFFO1lBQ1YsR0FBRyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDakQsYUFBYSxJQUFJLENBQUMsTUFBTSxVQUFVLGNBQWMsQ0FBQyxVQUFVLEVBQUUsU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7V0FDckcsTUFBTTtZQUNMLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNoRCxhQUFhLElBQUksQ0FBQyxNQUFNLFVBQVUsY0FBYyxDQUFDLFVBQVUsRUFBRSxHQUFHLFVBQVUsRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUFPLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztXQUM3RztTQUNGLENBQUM7UUFDRixNQUFNLFlBQVksR0FBRyxJQUFJLEVBQUUsR0FBRyxNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEQsT0FBTyxhQUFhLE1BQU0sQ0FBQztPQUM1QixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sY0FBYyxRQUFRLGlCQUFpQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1RCxNQUFNLGlCQUFpQixTQUFTLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUTtNQUNqRCxNQUFNLE9BQU8sSUFBSSxLQUFLLElBQUksSUFBSSxNQUFNLElBQUksRUFBRSxDQUFDO01BQzNDLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3JCLE9BQU87VUFDTCxJQUFJO1VBQ0osT0FBTyxjQUFjLENBQUMsSUFBSSxLQUFLLENBQUM7U0FDakMsQ0FBQztPQUNILE1BQU07UUFDTCxPQUFPO1VBQ0wsSUFBSTtVQUNKLE9BQU8sSUFBSSxNQUFNO1NBQ2xCLENBQUM7T0FDSDtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0saUJBQWlCLHFDQUFxQyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVE7TUFDN0UsTUFBTSxPQUFPLElBQUksS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDO01BQ3JDLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3JCLE9BQU87VUFDTCxNQUFNLGdCQUFnQjtVQUN0QixJQUFJO1VBQ0osaUJBQWlCLE1BQU0sY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDO1NBQzNFLENBQUM7T0FDSCxNQUFNO1FBQ0wsT0FBTztVQUNMLElBQUk7VUFDSixNQUFNLGdCQUFnQjtVQUN0QixVQUFVLE1BQU0sUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDO1VBQ3BDLFNBQVMsYUFBYSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxNQUFNLENBQUM7U0FDbkQsQ0FBQztPQUNIO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxzQkFBc0IsbUJBQW1CLFNBQVM7TUFDdEQsTUFBTSxZQUFZLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUN6RSxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVE7TUFDaEQsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDckIsT0FBTyxDQUFDO1lBQ0osR0FBRyxJQUFJO1lBQ1AsTUFBTSxjQUFjLENBQUMsSUFBSSxLQUFLLENBQUM7V0FDaEMsQ0FBQyxDQUFDO09BQ04sTUFBTTtRQUNMLE9BQU8sVUFBVSxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7T0FDN0M7S0FDRixDQUFDLENBQUM7SUFDSCxNQUFNLDRCQUE0QixxQ0FBcUMsWUFBWSxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDN0ksTUFBTSxpQkFBaUIsOEJBQThCO01BQ25ELE1BQU0sV0FBVyxHQUFHLENBQUMsU0FBUyxFQUFFLFVBQVU7UUFDeEMsTUFBTSxLQUFLLE1BQU07UUFDakIsT0FBTyxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssTUFBTSxDQUFDLE1BQU07UUFDeEMsTUFBTSxZQUFZO09BQ25CLENBQUMsQ0FBQyxDQUFDO01BQ0osT0FBTyxDQUFDO1VBQ0osTUFBTSxlQUFlO1VBQ3JCLFdBQVcsYUFBYTtVQUN4QixVQUFVO1lBQ1IsUUFBUSxRQUFRLE9BQU8sR0FBRyxDQUFDLEdBQUcsUUFBUSxHQUFHLFNBQVM7WUFDbEQsbUJBQW1CLEtBQUs7V0FDekI7VUFDRCxVQUFVLFFBQVE7WUFDaEIsTUFBTSxRQUFRLElBQUksTUFBTSxLQUFLLFFBQVEsR0FBRyxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUM7WUFDeEQsTUFBTSxZQUFZLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQztXQUN6RTtTQUNGLENBQUMsQ0FBQztLQUNOLENBQUM7SUFDRixNQUFNLGtCQUFrQixVQUFVLE1BQU07TUFDdEMsTUFBTSxjQUFjLE1BQU0sa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztNQUNoRSxNQUFNLFVBQVUsV0FBVyxLQUFLLFFBQVEsR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDO01BQzdELE1BQU0sWUFBWSxDQUFDLGlCQUFpQixFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQztLQUNqRSxDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsVUFBVSxNQUFNO01BQ3pDLE1BQU0sY0FBYyxNQUFNLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLENBQUM7TUFDaEUsTUFBTSxVQUFVLFdBQVcsS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztNQUNuRCxNQUFNLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUM7S0FDakUsQ0FBQzs7SUFFRixNQUFNLGlCQUFpQixVQUFVO01BQy9CLE1BQU0sVUFBVSxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUN6RCxJQUFJLE9BQU8sT0FBTyxHQUFHLENBQUMsRUFBRTtRQUN0QixPQUFPLFFBQVEsS0FBSyxDQUFDO1VBQ25CLE1BQU0sT0FBTztVQUNiLE1BQU0sU0FBUztVQUNmLE9BQU8sT0FBTztVQUNkLE9BQU8sT0FBTztTQUNmLENBQUMsQ0FBQztPQUNKO01BQ0QsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO0tBQ3hCLENBQUM7SUFDRixNQUFNLFdBQVc7TUFDZjtRQUNFLE1BQU0sT0FBTztRQUNiLE1BQU0sT0FBTztRQUNiLE9BQU8sT0FBTztPQUNmO01BQ0Q7UUFDRSxNQUFNLFFBQVE7UUFDZCxNQUFNLE9BQU87UUFDYixPQUFPLFFBQVE7T0FDaEI7TUFDRDtRQUNFLE1BQU0sVUFBVTtRQUNoQixNQUFNLFNBQVM7UUFDZixPQUFPLFdBQVc7UUFDbEIsT0FBTztVQUNMO1lBQ0UsTUFBTSxNQUFNO1lBQ1osT0FBTyxJQUFJO1dBQ1o7VUFDRDtZQUNFLE1BQU0sYUFBYTtZQUNuQixPQUFPLElBQUk7V0FDWjtTQUNGO09BQ0Y7TUFDRDtRQUNFLE1BQU0sT0FBTztRQUNiLE1BQU0sU0FBUztRQUNmLE9BQU8sT0FBTztRQUNkLE9BQU87VUFDTDtZQUNFLE1BQU0sTUFBTTtZQUNaLE9BQU8sRUFBRTtXQUNWO1VBQ0Q7WUFDRSxNQUFNLEtBQUs7WUFDWCxPQUFPLEtBQUs7V0FDYjtVQUNEO1lBQ0UsTUFBTSxRQUFRO1lBQ2QsT0FBTyxLQUFLO1dBQ2I7VUFDRDtZQUNFLE1BQU0sV0FBVztZQUNqQixPQUFPLFVBQVU7V0FDbEI7VUFDRDtZQUNFLE1BQU0sY0FBYztZQUNwQixPQUFPLFVBQVU7V0FDbEI7U0FDRjtPQUNGO01BQ0Q7UUFDRSxNQUFNLFFBQVE7UUFDZCxNQUFNLFNBQVM7UUFDZixPQUFPLGtCQUFrQjtRQUN6QixPQUFPO1VBQ0w7WUFDRSxNQUFNLE1BQU07WUFDWixPQUFPLEVBQUU7V0FDVjtVQUNEO1lBQ0UsTUFBTSxNQUFNO1lBQ1osT0FBTyxNQUFNO1dBQ2Q7VUFDRDtZQUNFLE1BQU0sUUFBUTtZQUNkLE9BQU8sUUFBUTtXQUNoQjtVQUNEO1lBQ0UsTUFBTSxPQUFPO1lBQ2IsT0FBTyxPQUFPO1dBQ2Y7U0FDRjtPQUNGO01BQ0Q7UUFDRSxNQUFNLFFBQVE7UUFDZCxNQUFNLFNBQVM7UUFDZixPQUFPLGdCQUFnQjtRQUN2QixPQUFPLG1CQUFtQjtPQUMzQjtLQUNGLENBQUM7SUFDRixNQUFNLGFBQWEsVUFBVSxRQUFRLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7O0lBRS9FLE1BQU0saUJBQWlCLHdCQUF3QjtNQUM3QyxNQUFNLG1CQUFtQixDQUFDO1VBQ3RCLE1BQU0sV0FBVztVQUNqQixPQUFPLEVBQUU7U0FDVixDQUFDLENBQUM7TUFDTCxNQUFNLGNBQWM7UUFDbEI7VUFDRSxNQUFNLGFBQWE7VUFDbkIsTUFBTSxTQUFTO1VBQ2YsT0FBTyxjQUFjO1VBQ3JCLE9BQU8sZ0JBQWdCLE9BQU8sQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUM3RTtRQUNEO1VBQ0UsTUFBTSxhQUFhO1VBQ25CLE1BQU0sWUFBWTtVQUNsQixPQUFPLGNBQWM7U0FDdEI7UUFDRDtVQUNFLE1BQU0saUJBQWlCO1VBQ3ZCLE1BQU0sWUFBWTtVQUNsQixPQUFPLGtCQUFrQjtTQUMxQjtPQUNGLENBQUM7TUFDRixNQUFNLGNBQWM7UUFDbEIsTUFBTSxhQUFhO1FBQ25CLE1BQU0sT0FBTztRQUNiLE9BQU8sY0FBYztPQUN0QixDQUFDO01BQ0YsTUFBTSxRQUFRLFVBQVUsS0FBSyxNQUFNLEdBQUcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLFdBQVcsQ0FBQztNQUN0RixPQUFPO1FBQ0wsT0FBTyxVQUFVO1FBQ2pCLE1BQU0sVUFBVTtRQUNoQixLQUFLO09BQ04sQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxTQUFTLHFCQUFxQjtNQUNsQyxNQUFNLE1BQU0sTUFBTSxJQUFJLENBQUM7TUFDdkIsTUFBTSxZQUFZLGlCQUFpQjtRQUNqQyxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ3JDLENBQUM7TUFDRixNQUFNLFdBQVcsaUJBQWlCO1FBQ2hDLEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDcEMsQ0FBQztNQUNGLE1BQU0sWUFBWSx1QkFBdUI7UUFDdkMsSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFO1VBQ2hCLE1BQU0sVUFBVSxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDckUsTUFBTTtVQUNMLE1BQU0sVUFBVSxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDeEQ7T0FDRixDQUFDO01BQ0YsT0FBTztRQUNMLFNBQVM7UUFDVCxRQUFRO1FBQ1IsU0FBUztPQUNWLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUM7O0lBRS9CLE1BQU0sZUFBZSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsTUFBTSxtQkFBbUIsZ0NBQWdDO01BQ3ZELElBQUksV0FBVyxJQUFJLGFBQWEsRUFBRTtRQUNoQyxPQUFPLGNBQWMsQ0FBQztPQUN2QixNQUFNLElBQUksV0FBVyxFQUFFO1FBQ3RCLE9BQU8sU0FBUyxDQUFDO09BQ2xCLE1BQU07UUFDTCxPQUFPLE9BQU8sQ0FBQztPQUNoQjtLQUNGLENBQUM7SUFDRixNQUFNLGVBQWUsT0FBTztNQUMxQixNQUFNLGNBQWMsR0FBRyxRQUFRLEtBQUssT0FBTyxDQUFDO01BQzVDLE1BQU0sZ0JBQWdCLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzlELElBQUksR0FBRyxRQUFRLEtBQUssT0FBTyxFQUFFO1FBQzNCLE9BQU8sRUFBRSxNQUFNLFFBQVEsRUFBRSxDQUFDO09BQzNCLE1BQU0sSUFBSSxXQUFXLElBQUksYUFBYSxFQUFFO1FBQ3ZDLE9BQU87VUFDTCxNQUFNLFFBQVE7VUFDZCxTQUFTLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUM7U0FDdEQsQ0FBQztPQUNILE1BQU07UUFDTCxPQUFPLEVBQUUsTUFBTSxNQUFNLEVBQUUsQ0FBQztPQUN6QjtLQUNGLENBQUM7SUFDRixNQUFNLHFCQUFxQixTQUFTO01BQ2xDLE1BQU0sY0FBYyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsWUFBWSxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQztNQUN0RSxJQUFJLFdBQVcsT0FBTyxLQUFLLENBQUMsRUFBRTtRQUM1QixPQUFPLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzVCLE1BQU0sSUFBSSxXQUFXLE9BQU8sS0FBSyxLQUFLLE9BQU8sRUFBRTtRQUM5QyxPQUFPLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzVCLE1BQU07UUFDTCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEI7S0FDRixDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsUUFBUTtNQUNoQyxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDMUQsTUFBTSxZQUFZLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDL0MsTUFBTSxZQUFZLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDL0MsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFNBQVMsRUFBRTtRQUM1QixPQUFPLFFBQVEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQzlCLE1BQU07UUFDTCxNQUFNLFVBQVUsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMzQyxJQUFJLFNBQVMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRTtVQUN2QyxPQUFPLFFBQVEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2hDLE1BQU0sSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLE9BQU8sSUFBSSxTQUFTLEVBQUU7VUFDOUMsT0FBTyxRQUFRLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNoQyxNQUFNO1VBQ0wsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO1NBQ3hCO09BQ0Y7S0FDRixDQUFDOztJQUVGLE1BQU0sU0FBUyxLQUFLO01BQ2xCLElBQUksU0FBUyxLQUFLLENBQUM7TUFDbkIsSUFBSSxDQUFDLENBQUM7TUFDTixPQUFPLENBQUMsT0FBTyxLQUFLO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEVBQUU7VUFDWCxTQUFTLElBQUksQ0FBQztVQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3pCO1FBQ0QsT0FBTyxDQUFDLENBQUM7T0FDVixDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLGtCQUFrQix3QkFBd0IsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4SCxNQUFNLGVBQWUsa0NBQWtDO01BQ3JELE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxVQUFVLEVBQUUsVUFBVTtRQUM5QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sZUFBZSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7T0FDbEYsQ0FBQyxDQUFDO01BQ0gsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUMzQixPQUFPLE1BQU0sQ0FBQyxLQUFLLE9BQU8sR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDeEMsQ0FBQztJQUNGLE1BQU0sYUFBYSx3QkFBd0IsTUFBTSxTQUFTLENBQUM7SUFDM0QsTUFBTSxlQUFlLHdCQUF3QixNQUFNLFdBQVcsQ0FBQztJQUMvRCxNQUFNLFVBQVUsdUJBQXVCLFlBQVksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQy9FLE1BQU0sc0JBQXNCLHFCQUFxQixlQUFlLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sU0FBUyxDQUFDLENBQUM7SUFDckgsTUFBTSxjQUFjLHNCQUFzQixNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsbUJBQW1CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdEcsTUFBTSxxQkFBcUIsdUJBQXVCLFVBQVUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLFdBQVcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzdJLE1BQU0sdUJBQXVCLHVCQUF1QixZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxXQUFXLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7O0lBRW5JLE1BQU0sV0FBVyxTQUFTO01BQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO09BQzNDO01BQ0QsSUFBSSxLQUFLLE9BQU8sS0FBSyxDQUFDLEVBQUU7UUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO09BQ3BEO01BQ0QsTUFBTSxlQUFlLEVBQUUsQ0FBQztNQUN4QixNQUFNLE1BQU0sRUFBRSxDQUFDO01BQ2YsSUFBSSxDQUFDLEtBQUssRUFBRSxrQkFBa0I7UUFDNUIsTUFBTSxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixJQUFJLE1BQU0sT0FBTyxLQUFLLENBQUMsRUFBRTtVQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7U0FDbkQ7UUFDRCxNQUFNLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxFQUFFO1VBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLEdBQUcsR0FBRyxDQUFDLENBQUM7U0FDbEQsTUFBTSxJQUFJLEdBQUcsS0FBSyxNQUFNLEVBQUU7VUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1NBQzFELE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtVQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7U0FDcEQ7UUFDRCxZQUFZLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEtBQUs7VUFDdEIsTUFBTSxZQUFZLElBQUksT0FBTyxDQUFDO1VBQzlCLElBQUksU0FBUyxLQUFLLEtBQUssT0FBTyxFQUFFO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLEdBQUcsR0FBRyxHQUFHLGFBQWEsR0FBRyxLQUFLLE9BQU8sR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQztXQUNuSTtVQUNELE1BQU0sUUFBUSxZQUFZO1lBQ3hCLE1BQU0sYUFBYSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEMsSUFBSSxZQUFZLE9BQU8sS0FBSyxVQUFVLE9BQU8sRUFBRTtjQUM3QyxNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxHQUFHLFlBQVksS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksR0FBRyxVQUFVLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ2xJO1lBQ0QsTUFBTSxVQUFVLE1BQU0sQ0FBQyxZQUFZLEVBQUUsVUFBVTtjQUM3QyxPQUFPLFFBQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDckMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLE9BQU8sRUFBRTtjQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsK0RBQStELEdBQUcsVUFBVSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsY0FBYyxHQUFHLFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDcko7WUFDRCxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztXQUN4QyxDQUFDO1VBQ0YsT0FBTztZQUNMLE1BQU0sQ0FBQyxXQUFXLEtBQUs7Y0FDckIsSUFBSSxRQUFRLE9BQU8sS0FBSyxLQUFLLE9BQU8sRUFBRTtnQkFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsR0FBRyxLQUFLLE9BQU8sR0FBRyxRQUFRLEdBQUcsUUFBUSxPQUFPLENBQUMsQ0FBQztlQUM3RztjQUNELE1BQU0sU0FBUyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7Y0FDL0IsT0FBTyxNQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDakM7WUFDRCxLQUFLO1lBQ0wsS0FBSyxTQUFTO2NBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNqQixZQUFZO2dCQUNaLGFBQWEsR0FBRztnQkFDaEIsUUFBUSxJQUFJO2VBQ2IsQ0FBQyxDQUFDO2FBQ0o7V0FDRixDQUFDO1NBQ0gsQ0FBQztPQUNILENBQUMsQ0FBQztNQUNILE9BQU8sR0FBRyxDQUFDO0tBQ1osQ0FBQztJQUNGLE1BQU0sTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDOztJQUV6QixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUM7TUFDdkIsRUFBRSxNQUFNLEVBQUUsRUFBRTtNQUNaLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO01BQ25CO1FBQ0UsTUFBTTtVQUNKLE9BQU87VUFDUCxNQUFNO1NBQ1A7T0FDRjtNQUNEO1FBQ0UsUUFBUTtVQUNOLE1BQU07VUFDTixPQUFPO1VBQ1AsTUFBTTtTQUNQO09BQ0Y7TUFDRDtRQUNFLE9BQU87VUFDTCxNQUFNO1VBQ04sT0FBTztTQUNSO09BQ0Y7S0FDRixDQUFDLENBQUM7SUFDSCxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRTs7SUFFYixNQUFNLGdCQUFnQixtQkFBbUI7TUFDdkMsTUFBTSxRQUFRLFNBQVMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQ3pDLE1BQU0sVUFBVSxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3ZDLE9BQU8sT0FBTyxLQUFLLENBQUMsaUJBQWlCO1FBQ25DLE1BQU0sbUJBQW1CLGFBQWEsQ0FBQyxhQUFhLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqRSxNQUFNLGNBQWMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDekMsTUFBTSxjQUFjLGdCQUFnQixJQUFJLEdBQUcsZ0JBQWdCLFFBQVEsQ0FBQztRQUNwRSxNQUFNLGVBQWUsS0FBSyxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDL0QsT0FBTyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztPQUN4QyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNkLENBQUM7SUFDRixNQUFNLGNBQWMsYUFBYSxDQUFDOztJQUVsQyxNQUFNLFdBQVcsU0FBUyxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDcEYsTUFBTSx3QkFBd0IsT0FBTztNQUNuQyxNQUFNLFVBQVUsWUFBWSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDMUMsT0FBTztRQUNMLGFBQWEsTUFBTSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN0RCxhQUFhLE1BQU0sQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDdEQsYUFBYSxNQUFNLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDcEUsaUJBQWlCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO09BQzdFLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsUUFBUTtNQUM5QixNQUFNLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3pCLE1BQU0saUJBQWlCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3JDLElBQUksQ0FBQyxjQUFjLEVBQUUsU0FBUztRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE9BQU87VUFDMUIsTUFBTSxDQUFDLEtBQUssRUFBRSx3QkFBd0I7WUFDcEMsTUFBTSxrQkFBa0IsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RDLElBQUksZUFBZSxLQUFLLEVBQUUsSUFBSSxHQUFHLEtBQUssT0FBTyxFQUFFO2NBQzdDLElBQUksZUFBZSxLQUFLLFNBQVMsRUFBRTtnQkFDakMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztlQUNwQjthQUNGO1dBQ0YsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO09BQ0osQ0FBQyxDQUFDO01BQ0gsT0FBTyxRQUFRLENBQUM7S0FDakIsQ0FBQztJQUNGLE1BQU0sZUFBZSxzQ0FBc0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sVUFBVSxVQUFVLENBQUMsR0FBRyxFQUFFLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3SixNQUFNLGdCQUFnQixLQUFLLENBQUMsWUFBWSxFQUFFO01BQ3hDLE1BQU07TUFDTixRQUFRO01BQ1IsT0FBTztLQUNSLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDWixNQUFNLGdCQUFnQixLQUFLLENBQUMsWUFBWSxFQUFFO01BQ3hDLEtBQUs7TUFDTCxRQUFRO01BQ1IsUUFBUTtLQUNULEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDYixNQUFNLDBCQUEwQiw0QkFBNEI7TUFDMUQsTUFBTSxRQUFRLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3ZDLE1BQU0sUUFBUSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUMzQyxNQUFNLDJCQUEyQixPQUFPO1FBQ3RDLGFBQWEsS0FBSyxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNuRCxhQUFhLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0QsaUJBQWlCLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztPQUN0RSxDQUFDLENBQUM7TUFDSCxNQUFNLGNBQWM7UUFDbEIsUUFBUSxFQUFFO1FBQ1YsT0FBTyxNQUFNO1FBQ2IsYUFBYSxFQUFFO1FBQ2YsYUFBYSxFQUFFO1FBQ2YsU0FBUyxLQUFLO1FBQ2QsT0FBTyxFQUFFO1FBQ1QsT0FBTyxFQUFFO1FBQ1QsUUFBUSxFQUFFO09BQ1gsQ0FBQztNQUNGLE1BQU0sWUFBWSxNQUFNO1FBQ3RCLE1BQU0sY0FBYyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDMUMsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxXQUFXLEVBQUU7VUFDN0MsT0FBTyxFQUFFLFFBQVEsV0FBVyxFQUFFLENBQUM7U0FDaEM7UUFDRCxPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDeEUsQ0FBQztNQUNGLE1BQU0sV0FBVyxjQUFjLEdBQUcsd0JBQXdCLEVBQUUsR0FBRyxFQUFFLENBQUM7TUFDbEUsTUFBTSw0QkFBNEIsTUFBTTtRQUN0QyxNQUFNLFVBQVUsS0FBSyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEksTUFBTSxVQUFVLEtBQUssQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xJLE9BQU87VUFDTCxHQUFHLE9BQU87VUFDVixHQUFHLE9BQU87U0FDWCxDQUFDO09BQ0gsQ0FBQztNQUNGLE1BQU0sT0FBTztRQUNYLEdBQUcsV0FBVztRQUNkLEdBQUcsS0FBSztRQUNSLEdBQUcsS0FBSztRQUNSLEdBQUcsUUFBUTtRQUNYLEdBQUcsU0FBUyxFQUFFO1FBQ2QsR0FBRyx5QkFBeUIsRUFBRTtPQUMvQixDQUFDO01BQ0YsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxhQUFhLE9BQU8sS0FBSyxDQUFDLFlBQVksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTO01BQ3RFLE1BQU0sU0FBUyxFQUFFLFdBQVcsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztNQUNqRCxPQUFPLFdBQVcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDbkMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDYixNQUFNLDhCQUE4QixpQ0FBaUM7TUFDbkUsTUFBTSxZQUFZLGNBQWM7UUFDOUIsTUFBTSxpQkFBaUIsTUFBTSxDQUFDLFlBQVksUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksY0FBYyxPQUFPLEVBQUUsRUFBRTtVQUN6RCxPQUFPLGNBQWMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2pDO1FBQ0QsT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLElBQUksbUJBQW1CLENBQUMsTUFBTSxJQUFJLEVBQUUsR0FBRyxFQUFFLGNBQWMsQ0FBQyxJQUFJLG1CQUFtQixDQUFDLE1BQU0sSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7T0FDckosQ0FBQztNQUNGLE1BQU0sTUFBTSxNQUFNLElBQUksQ0FBQztNQUN2QixNQUFNLGNBQWMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztNQUNyTSxNQUFNLGNBQWMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxJQUFJLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7TUFDL00sT0FBTztRQUNMLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUM7UUFDaEUsUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQztRQUNuRSxhQUFhLFdBQVcsS0FBSyxJQUFJLElBQUksV0FBVyxLQUFLLEtBQUssQ0FBQyxHQUFHLFdBQVcsR0FBRyxFQUFFO1FBQzlFLGFBQWEsV0FBVyxLQUFLLElBQUksSUFBSSxXQUFXLEtBQUssS0FBSyxDQUFDLEdBQUcsV0FBVyxHQUFHLEVBQUU7UUFDOUUsUUFBUSxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUMzQixTQUFTLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDdEMsT0FBTyxhQUFhLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztRQUNqQyxHQUFHLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO09BQ3BELENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSw0QkFBNEIsb0NBQW9DO01BQ3BFLE1BQU0sTUFBTSxNQUFNLElBQUksQ0FBQztNQUN2QixPQUFPO1FBQ0wsUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQztRQUNuRSxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sVUFBVSxDQUFDLEdBQUcsQ0FBQztRQUNyQixPQUFPLGFBQWEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO1FBQ2pDLEdBQUcsaUJBQWlCLEdBQUcscUJBQXFCLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtPQUN2RCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sNkJBQTZCLDhDQUE4QztNQUMvRSxNQUFNLE1BQU0sTUFBTSxJQUFJLENBQUM7TUFDdkIsTUFBTSxTQUFTLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ2xDLE1BQU0sV0FBVyxvQkFBb0IsR0FBRyxTQUFTLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztNQUNuRyxPQUFPO1FBQ0wsT0FBTyxRQUFRLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztRQUNoQyxRQUFRLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDO1FBQ2hDLE9BQU8sR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQztRQUNuQyxVQUFVLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDM0IsT0FBTyxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUN2QyxRQUFRLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1FBQ25DLFFBQVEsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7UUFDbkMsR0FBRyxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO09BQ3pELENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sbUJBQW1CLGtCQUFrQjtNQUN6QyxNQUFNLFlBQVksU0FBUyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDN0MsTUFBTSxXQUFXLFNBQVMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQ2hELE1BQU0sV0FBVyxNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0YsT0FBTyxHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVM7UUFDNUIsU0FBUyxJQUFJLFFBQVEsSUFBSTtRQUN6QixRQUFRLFNBQVMsWUFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsSUFBSSxDQUFDO09BQ2xGLENBQUMsQ0FBQyxDQUFDO0tBQ0wsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLCtDQUErQztNQUN6RSxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN6QixRQUFRLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQztPQUN6QztNQUNELElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3pCLFFBQVEsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDO09BQ3pDO01BQ0QsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDMUIsUUFBUSxTQUFTLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUM7T0FDdkQ7TUFDRCxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN6QixXQUFXLFNBQVMsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQztPQUN4RDtLQUNGLENBQUM7SUFDRixNQUFNLHdCQUF3QixrQ0FBa0M7TUFDOUQsSUFBSSxZQUFZLENBQUMsaUJBQWlCLENBQUMsRUFBRTtRQUNuQyxRQUFRLFVBQVUsQ0FBQywwQkFBMEIsRUFBRSxJQUFJLGdCQUFnQixDQUFDLENBQUM7T0FDdEU7TUFDRCxJQUFJLFlBQVksQ0FBQyxhQUFhLENBQUMsRUFBRTtRQUMvQixRQUFRLFVBQVUsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLFlBQVksQ0FBQyxDQUFDO09BQzlEO01BQ0QsSUFBSSxZQUFZLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDL0IsUUFBUSxVQUFVLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxZQUFZLENBQUMsQ0FBQztPQUM5RDtNQUNELElBQUksWUFBWSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1FBQy9CLFFBQVEsVUFBVSxDQUFDLHNCQUFzQixFQUFFLFdBQVcsQ0FBQyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUM7T0FDM0U7S0FDRixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIscUNBQXFDO01BQzVELE1BQU0sZUFBZSxLQUFLLE9BQU8sS0FBSyxDQUFDLENBQUM7TUFDeEMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRO1FBQ2xCLE1BQU0sVUFBVSxJQUFJLFFBQVEsQ0FBQztRQUM3QixNQUFNLDZCQUE2QixZQUFZLEdBQUcsTUFBTSxHQUFHLFVBQVUsQ0FBQztRQUN0RSxNQUFNLFdBQVcsV0FBVyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELE1BQU0sY0FBYyxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sV0FBVyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1RixtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO1FBQzdFLElBQUksa0JBQWtCLENBQUMsTUFBTSxDQUFDLEVBQUU7VUFDOUIscUJBQXFCLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO1NBQ25FO1FBQ0QsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7VUFDeEIsUUFBUSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQztTQUN4QztRQUNELElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1VBQ3hCLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksT0FBTyxDQUFDLENBQUM7U0FDekM7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsa0JBQWtCO01BQzdDLE1BQU0sWUFBWSxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRTtRQUM1QyxNQUFNLElBQUksU0FBUztRQUNuQixXQUFXLElBQUk7T0FDaEIsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLGtDQUFrQztNQUN0RCxNQUFNLGVBQWUsUUFBUSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO01BQzVFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxDQUFDLEVBQUU7UUFDL0MsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUztVQUM1QixNQUFNLGdCQUFnQixnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7VUFDckQsTUFBTSxnQkFBZ0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLEdBQUcsS0FBSyxPQUFPLElBQUksR0FBRyxLQUFLLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQy9HLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7VUFDeEQsSUFBSSxhQUFhLElBQUksR0FBRyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsRUFBRTtZQUMvQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7V0FDekU7VUFDRCxJQUFJLGlCQUFpQixFQUFFO1lBQ3JCLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztXQUNwQztVQUNELGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRTtZQUNuQyxXQUFXLGlCQUFpQjtZQUM1QixPQUFPLGFBQWE7V0FDckIsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO09BQ0o7S0FDRixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsaUNBQWlDO01BQ3hELE1BQU0sT0FBTyxHQUFHLFFBQVEsRUFBRSxDQUFDO01BQzNCLEdBQUcsTUFBTSxFQUFFLENBQUM7TUFDWixNQUFNLFlBQVksU0FBUyxDQUFDLE1BQU07UUFDaEMsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVDLE1BQU0sTUFBTSxFQUFFLENBQUM7T0FDaEIsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sWUFBWSxtQkFBbUI7TUFDbkMsTUFBTSxZQUFZLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxRQUFRLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxJQUFJLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUN2TCxPQUFPLGVBQWUsQ0FBQyxTQUFTLFNBQVMsRUFBRSxDQUFDLENBQUM7S0FDOUMsQ0FBQztJQUNGLE1BQU0sU0FBUyxVQUFVO01BQ3ZCLE1BQU0sUUFBUSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUM1QyxJQUFJLEtBQUssT0FBTyxLQUFLLENBQUMsRUFBRTtRQUN0QixPQUFPO09BQ1I7TUFDRCxNQUFNLE9BQU8sU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztNQUN0QyxNQUFNLGlCQUFpQjtRQUNyQixNQUFNLFVBQVU7UUFDaEIsTUFBTTtVQUNKO1lBQ0UsT0FBTyxTQUFTO1lBQ2hCLE1BQU0sU0FBUztZQUNmLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQztXQUMxQjtVQUNELGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO1NBQy9CO09BQ0YsQ0FBQztNQUNGLE1BQU0sY0FBYztRQUNsQixNQUFNLE9BQU87UUFDYixPQUFPLENBQUM7WUFDSixNQUFNLE1BQU07WUFDWixTQUFTLENBQUM7WUFDVixPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUM7V0FDMUIsQ0FBQztPQUNMLENBQUM7TUFDRixNQUFNLGNBQWMsS0FBSyxDQUFDO1FBQ3hCLE9BQU8saUJBQWlCO1FBQ3hCLE1BQU0sUUFBUTtRQUNkLE1BQU0sa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsY0FBYyxHQUFHLFdBQVc7UUFDL0QsU0FBUztVQUNQO1lBQ0UsTUFBTSxRQUFRO1lBQ2QsTUFBTSxRQUFRO1lBQ2QsTUFBTSxRQUFRO1dBQ2Y7VUFDRDtZQUNFLE1BQU0sUUFBUTtZQUNkLE1BQU0sTUFBTTtZQUNaLE1BQU0sTUFBTTtZQUNaLFNBQVMsSUFBSTtXQUNkO1NBQ0Y7UUFDRCxhQUFhLElBQUk7UUFDakIsVUFBVSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUM7T0FDdkQsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLGVBQWUsVUFBVTtNQUM3QixNQUFNLFVBQVUsY0FBYyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO01BQ3hELElBQUksT0FBTyxPQUFPLEdBQUcsQ0FBQyxFQUFFO1FBQ3RCLE9BQU8sUUFBUSxLQUFLLENBQUM7VUFDbkIsTUFBTSxPQUFPO1VBQ2IsTUFBTSxTQUFTO1VBQ2YsT0FBTyxPQUFPO1VBQ2QsT0FBTyxPQUFPO1NBQ2YsQ0FBQyxDQUFDO09BQ0o7TUFDRCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7S0FDeEIsQ0FBQztJQUNGLE1BQU0sZUFBZTtNQUNuQjtRQUNFLE1BQU0sU0FBUztRQUNmLE1BQU0sTUFBTTtRQUNaLE9BQU8sVUFBVTtRQUNqQixPQUFPO1VBQ0w7WUFDRSxNQUFNLFFBQVE7WUFDZCxPQUFPLFFBQVE7V0FDaEI7VUFDRDtZQUNFLE1BQU0sTUFBTTtZQUNaLE9BQU8sTUFBTTtXQUNkO1VBQ0Q7WUFDRSxNQUFNLFFBQVE7WUFDZCxPQUFPLFFBQVE7V0FDaEI7U0FDRjtPQUNGO01BQ0Q7UUFDRSxNQUFNLFNBQVM7UUFDZixNQUFNLE9BQU87UUFDYixPQUFPLFdBQVc7UUFDbEIsT0FBTztVQUNMO1lBQ0UsTUFBTSxNQUFNO1lBQ1osT0FBTyxFQUFFO1dBQ1Y7VUFDRDtZQUNFLE1BQU0sTUFBTTtZQUNaLE9BQU8sTUFBTTtXQUNkO1VBQ0Q7WUFDRSxNQUFNLFFBQVE7WUFDZCxPQUFPLFFBQVE7V0FDaEI7VUFDRDtZQUNFLE1BQU0sT0FBTztZQUNiLE9BQU8sT0FBTztXQUNmO1NBQ0Y7T0FDRjtNQUNEO1FBQ0UsT0FBTyxRQUFRO1FBQ2YsTUFBTSxRQUFRO1FBQ2QsTUFBTSxPQUFPO09BQ2Q7S0FDRixDQUFDO0lBQ0YsTUFBTSxhQUFhLFVBQVUsWUFBWSxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDOztJQUVqRixNQUFNLG9CQUFvQixrQ0FBa0M7TUFDMUQsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDekIsUUFBUSxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksTUFBTSxDQUFDLENBQUM7T0FDekM7TUFDRCxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUMxQixRQUFRLFNBQVMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQztPQUN2RDtLQUNGLENBQUM7SUFDRixNQUFNLHNCQUFzQixrQ0FBa0M7TUFDNUQsSUFBSSxZQUFZLENBQUMsaUJBQWlCLENBQUMsRUFBRTtRQUNuQyxRQUFRLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLGdCQUFnQixDQUFDLENBQUM7T0FDN0Q7TUFDRCxJQUFJLFlBQVksQ0FBQyxhQUFhLENBQUMsRUFBRTtRQUMvQixRQUFRLFNBQVMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxZQUFZLENBQUMsQ0FBQztPQUNyRDtNQUNELElBQUksWUFBWSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1FBQy9CLFFBQVEsU0FBUyxDQUFDLGNBQWMsRUFBRSxJQUFJLFlBQVksQ0FBQyxDQUFDO09BQ3JEO0tBQ0YsQ0FBQztJQUNGLE1BQU0saUJBQWlCLG9DQUFvQztNQUN6RCxNQUFNLGNBQWMsSUFBSSxPQUFPLEtBQUssQ0FBQyxDQUFDO01BQ3RDLE1BQU0sNkJBQTZCLFdBQVcsR0FBRyxNQUFNLEdBQUcsVUFBVSxDQUFDO01BQ3JFLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVTtRQUNuQixNQUFNLFdBQVcsV0FBVyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELGlCQUFpQixDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztRQUM5RCxJQUFJLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1VBQzdCLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztTQUNqRTtRQUNELElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1VBQ3ZCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksTUFBTSxDQUFDLENBQUM7U0FDdEM7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsa0JBQWtCO01BQzNDLE1BQU0sWUFBWSxDQUFDLGlCQUFpQixFQUFFLEtBQUssRUFBRTtRQUMzQyxNQUFNLElBQUksS0FBSztRQUNmLFdBQVcsSUFBSTtPQUNoQixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxlQUFlLGlDQUFpQztNQUNwRCxNQUFNLGVBQWUsUUFBUSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO01BQzVFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUMxQixNQUFNLGVBQWUsR0FBRyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvQyxNQUFNLGdCQUFnQixZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDbkUsSUFBSSxhQUFhLEVBQUU7VUFDakIsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELElBQUksWUFBWSxFQUFFO1VBQ2hCLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNsQztRQUNELEtBQUssQ0FBQyxZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLEVBQUU7VUFDdEYsV0FBVyxZQUFZO1VBQ3ZCLE9BQU8sYUFBYTtTQUNyQixDQUFDLENBQUMsQ0FBQztPQUNMO0tBQ0YsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLGdDQUFnQztNQUN0RCxNQUFNLE9BQU8sR0FBRyxRQUFRLEVBQUUsQ0FBQztNQUMzQixHQUFHLE1BQU0sRUFBRSxDQUFDO01BQ1osTUFBTSxZQUFZLFNBQVMsQ0FBQyxNQUFNO1FBQ2hDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQyxNQUFNLE1BQU0sRUFBRSxDQUFDO09BQ2hCLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFNBQVMsVUFBVTtNQUN2QixNQUFNLE9BQU8sb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxTQUFTLENBQUMsQ0FBQztNQUNoRixJQUFJLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtRQUNyQixPQUFPO09BQ1I7TUFDRCxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQUksRUFBRSxVQUFVLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxNQUFNLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDL0csTUFBTSxPQUFPLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUN2QyxNQUFNLGlCQUFpQjtRQUNyQixNQUFNLFVBQVU7UUFDaEIsTUFBTTtVQUNKO1lBQ0UsT0FBTyxTQUFTO1lBQ2hCLE1BQU0sU0FBUztZQUNmLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQztXQUMxQjtVQUNELGNBQWMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO1NBQzlCO09BQ0YsQ0FBQztNQUNGLE1BQU0sY0FBYztRQUNsQixNQUFNLE9BQU87UUFDYixPQUFPLENBQUM7WUFDSixNQUFNLE1BQU07WUFDWixTQUFTLENBQUM7WUFDVixPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUM7V0FDMUIsQ0FBQztPQUNMLENBQUM7TUFDRixNQUFNLGNBQWMsS0FBSyxDQUFDO1FBQ3hCLE9BQU8sZ0JBQWdCO1FBQ3ZCLE1BQU0sUUFBUTtRQUNkLE1BQU0saUJBQWlCLENBQUMsTUFBTSxDQUFDLEdBQUcsY0FBYyxHQUFHLFdBQVc7UUFDOUQsU0FBUztVQUNQO1lBQ0UsTUFBTSxRQUFRO1lBQ2QsTUFBTSxRQUFRO1lBQ2QsTUFBTSxRQUFRO1dBQ2Y7VUFDRDtZQUNFLE1BQU0sUUFBUTtZQUNkLE1BQU0sTUFBTTtZQUNaLE1BQU0sTUFBTTtZQUNaLFNBQVMsSUFBSTtXQUNkO1NBQ0Y7UUFDRCxhQUFhLElBQUk7UUFDakIsVUFBVSxLQUFLLENBQUMsZUFBZSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUM7T0FDdEUsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLFdBQVcscUNBQXFDO01BQ3BELE1BQU0sbUJBQW1CLENBQUMsY0FBYyxHQUFHLEVBQUUsR0FBRztRQUM5QztVQUNFLE1BQU0sT0FBTztVQUNiLE1BQU0sTUFBTTtVQUNaLE9BQU8sTUFBTTtVQUNiLFdBQVcsU0FBUztTQUNyQjtRQUNEO1VBQ0UsTUFBTSxPQUFPO1VBQ2IsTUFBTSxNQUFNO1VBQ1osT0FBTyxNQUFNO1VBQ2IsV0FBVyxTQUFTO1NBQ3JCO09BQ0YsQ0FBQztNQUNGLE1BQU0sY0FBYztRQUNsQjtVQUNFLE1BQU0sT0FBTztVQUNiLE1BQU0sT0FBTztVQUNiLE9BQU8sT0FBTztTQUNmO1FBQ0Q7VUFDRSxNQUFNLE9BQU87VUFDYixNQUFNLFFBQVE7VUFDZCxPQUFPLFFBQVE7U0FDaEI7T0FDRixDQUFDO01BQ0YsTUFBTSxrQkFBa0Isb0JBQW9CLENBQUMsTUFBTSxDQUFDLEdBQUc7UUFDckQ7VUFDRSxNQUFNLE9BQU87VUFDYixNQUFNLGFBQWE7VUFDbkIsT0FBTyxjQUFjO1VBQ3JCLFdBQVcsU0FBUztTQUNyQjtRQUNEO1VBQ0UsTUFBTSxPQUFPO1VBQ2IsTUFBTSxhQUFhO1VBQ25CLE9BQU8sY0FBYztVQUNyQixXQUFXLFNBQVM7U0FDckI7UUFDRDtVQUNFLE1BQU0sT0FBTztVQUNiLE1BQU0sUUFBUTtVQUNkLE9BQU8sY0FBYztTQUN0QjtRQUNEO1VBQ0UsTUFBTSxPQUFPO1VBQ2IsT0FBTyxTQUFTO1VBQ2hCLE9BQU8sQ0FBQztjQUNKLE1BQU0sVUFBVTtjQUNoQixNQUFNLFNBQVM7Y0FDZixPQUFPLGNBQWM7YUFDdEIsQ0FBQztTQUNMO09BQ0YsR0FBRyxFQUFFLENBQUM7TUFDUCxNQUFNLGdCQUFnQixDQUFDO1VBQ25CLE1BQU0sU0FBUztVQUNmLE1BQU0sT0FBTztVQUNiLE9BQU8sV0FBVztVQUNsQixPQUFPO1lBQ0w7Y0FDRSxNQUFNLE1BQU07Y0FDWixPQUFPLEVBQUU7YUFDVjtZQUNEO2NBQ0UsTUFBTSxNQUFNO2NBQ1osT0FBTyxNQUFNO2FBQ2Q7WUFDRDtjQUNFLE1BQU0sUUFBUTtjQUNkLE9BQU8sUUFBUTthQUNoQjtZQUNEO2NBQ0UsTUFBTSxPQUFPO2NBQ2IsT0FBTyxPQUFPO2FBQ2Y7V0FDRjtTQUNGLENBQUMsQ0FBQztNQUNMLE1BQU0sZ0JBQWdCLE9BQU8sT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDO1VBQ3hDLE1BQU0sU0FBUztVQUNmLE1BQU0sT0FBTztVQUNiLE9BQU8sT0FBTztVQUNkLE9BQU8sT0FBTztTQUNmLENBQUMsR0FBRyxFQUFFLENBQUM7TUFDVixPQUFPLGdCQUFnQixPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDakgsQ0FBQzs7SUFFRixNQUFNLFlBQVksMkJBQTJCO01BQzNDLElBQUksR0FBRyxRQUFRLEtBQUssSUFBSSxJQUFJLEdBQUcsUUFBUSxLQUFLLElBQUksRUFBRTtRQUNoRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUU7VUFDMUMsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNoQyxNQUFNO1VBQ0wsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzFCO09BQ0YsTUFBTTtRQUNMLElBQUksR0FBRyxTQUFTLEVBQUU7VUFDaEIsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLFNBQVMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1dBQzlDO1NBQ0Y7T0FDRjtLQUNGLENBQUM7SUFDRixNQUFNLHFCQUFxQiwrQ0FBK0M7TUFDeEUsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLE1BQU0sUUFBUSxFQUFFLENBQUM7TUFDakIsTUFBTSxTQUFTLEVBQUUsQ0FBQztNQUNsQixNQUFNLHVCQUF1QixrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUN4RCxNQUFNLHdCQUF3QixtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUMxRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUU7UUFDNUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUM7T0FDMUI7TUFDRCxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQztNQUN6QyxJQUFJLG9CQUFvQixFQUFFO1FBQ3hCLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDO09BQ3hDLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUU7UUFDM0MsS0FBSyxNQUFNLEdBQUcsY0FBYyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUM7T0FDMUM7TUFDRCxJQUFJLG9CQUFvQixFQUFFO1FBQ3hCLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQztRQUNsRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQztPQUMxRCxNQUFNO1FBQ0wsS0FBSyxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDM0IsS0FBSyxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUM7UUFDckMsS0FBSyxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUM7T0FDdEM7TUFDRCxJQUFJLG9CQUFvQixJQUFJLFFBQVEsU0FBUyxFQUFFO1FBQzdDLE1BQU0sYUFBYSxFQUFFLENBQUM7UUFDdEIsSUFBSSxpQkFBaUIsT0FBTyxFQUFFO1VBQzVCLFVBQVUsQ0FBQyxjQUFjLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQztTQUN2RDtRQUNELElBQUksaUJBQWlCLFlBQVksRUFBRTtVQUNqQyxVQUFVLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQztTQUNwRDtRQUNELElBQUkscUJBQXFCLElBQUksaUJBQWlCLFlBQVksRUFBRTtVQUMxRCxVQUFVLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxZQUFZLENBQUM7U0FDL0M7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1VBQzFCLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxTQUFTLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNqRCxTQUFTLENBQUMsR0FBRyxFQUFFLFFBQVEsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1dBQ2xEO1NBQ0Y7T0FDRjtNQUNELElBQUkscUJBQXFCLEVBQUU7UUFDekIsTUFBTSxVQUFVLElBQUksQ0FBQztRQUNyQixNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBRyxPQUFPLGdCQUFnQixDQUFDO1FBQ3JELE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxPQUFPLFlBQVksQ0FBQztRQUM3QyxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsT0FBTyxZQUFZLENBQUM7T0FDOUM7TUFDRCxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUU7UUFDdEIsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7UUFDM0IsR0FBRyxNQUFNO09BQ1YsQ0FBQyxDQUFDO01BQ0gsR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFO1FBQ3ZCLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxDQUFDO1FBQy9CLEdBQUcsS0FBSztPQUNULENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLG9CQUFvQixvQ0FBb0M7TUFDNUQsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLE1BQU0sT0FBTyxHQUFHLFFBQVEsRUFBRSxDQUFDO01BQzNCLE1BQU0sZUFBZSxRQUFRLENBQUMsSUFBSSxFQUFFLGdCQUFnQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7TUFDNUUsR0FBRyxNQUFNLEVBQUUsQ0FBQztNQUNaLElBQUksSUFBSSxNQUFNLEtBQUssRUFBRSxFQUFFO1FBQ3JCLE9BQU8sSUFBSSxNQUFNLENBQUM7T0FDbkI7TUFDRCxNQUFNLFlBQVksU0FBUyxDQUFDLE1BQU07UUFDaEMsSUFBSSxDQUFDLFFBQVEsRUFBRTtVQUNiLE1BQU0sT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3ZDLE1BQU0sT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3ZDLE1BQU0sWUFBWSxDQUFDLGdCQUFnQixFQUFFLEtBQUssRUFBRTtZQUMxQyxJQUFJO1lBQ0osU0FBUyxJQUFJO1dBQ2QsQ0FBQyxDQUFDO1VBQ0gsV0FBVyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUMzSjtRQUNELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRTtVQUMxQixNQUFNLDJCQUEyQjtZQUMvQixRQUFRLEdBQUcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDO1lBQ25DLGFBQWEsR0FBRyxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUM7WUFDN0MsYUFBYSxHQUFHLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQztXQUM5QyxDQUFDO1VBQ0Ysa0JBQWtCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztVQUNyRSxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3RELElBQUksVUFBVSxJQUFJLENBQUMsSUFBSSxRQUFRLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxRQUFRLEVBQUU7WUFDOUQsTUFBTSxZQUFZLENBQUMsdUJBQXVCLENBQUMsQ0FBQztXQUM3QztVQUNELFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksTUFBTSxDQUFDLENBQUM7U0FDeEM7UUFDRCxNQUFNLE1BQU0sRUFBRSxDQUFDO1FBQ2YsTUFBTSxVQUFVLEVBQUUsQ0FBQztRQUNuQixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUU7VUFDMUIsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztVQUNyRCxNQUFNLGdCQUFnQixlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7VUFDdEUsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRTtZQUNsQyxXQUFXLGVBQWU7WUFDMUIsT0FBTyxhQUFhO1dBQ3JCLENBQUMsQ0FBQztTQUNKO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sT0FBTyw0QkFBNEI7TUFDdkMsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLElBQUksUUFBUSxDQUFDO01BQ2IsSUFBSSxPQUFPLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO01BQ3hFLElBQUksY0FBYyxFQUFFO1FBQ2xCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUNoQixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDaEIsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsRUFBRTtVQUMvQixJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7VUFDdEIsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1VBQ3RCLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1NBQzNCO09BQ0YsTUFBTTtRQUNMLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxVQUFVLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDakYsSUFBSSxRQUFRLEVBQUU7VUFDWixPQUFPLDJCQUEyQixDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUNuRixNQUFNO1VBQ0wsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMvQixJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDdEIsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1dBQzNCO1NBQ0Y7T0FDRjtNQUNELE1BQU0sVUFBVSxjQUFjLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUMxRCxJQUFJLE9BQU8sT0FBTyxHQUFHLENBQUMsRUFBRTtRQUN0QixJQUFJLElBQUksTUFBTSxFQUFFO1VBQ2QsSUFBSSxNQUFNLEdBQUcsSUFBSSxNQUFNLFFBQVEsQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNoRTtPQUNGO01BQ0QsTUFBTSxlQUFlO1FBQ25CLE1BQU0sTUFBTTtRQUNaLFNBQVMsQ0FBQztRQUNWLE9BQU8sUUFBUSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsY0FBYyxDQUFDO09BQ2pELENBQUM7TUFDRixNQUFNLGtCQUFrQixPQUFPO1FBQzdCLE1BQU0sT0FBTztRQUNiLE9BQU8sQ0FBQyxZQUFZLENBQUM7T0FDdEIsQ0FBQyxDQUFDO01BQ0gsTUFBTSxlQUFlLE9BQU87UUFDMUIsTUFBTSxVQUFVO1FBQ2hCLE1BQU07VUFDSjtZQUNFLE9BQU8sU0FBUztZQUNoQixNQUFNLFNBQVM7WUFDZixPQUFPLENBQUMsWUFBWSxDQUFDO1dBQ3RCO1VBQ0QsY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUM7U0FDaEM7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLGFBQWEsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEdBQUcsWUFBWSxFQUFFLEdBQUcsZUFBZSxFQUFFLENBQUM7TUFDcEYsTUFBTSxjQUFjLEtBQUssQ0FBQztRQUN4QixPQUFPLGtCQUFrQjtRQUN6QixNQUFNLFFBQVE7UUFDZCxNQUFNLFVBQVU7UUFDaEIsVUFBVSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUM7UUFDMUQsU0FBUztVQUNQO1lBQ0UsTUFBTSxRQUFRO1lBQ2QsTUFBTSxRQUFRO1lBQ2QsTUFBTSxRQUFRO1dBQ2Y7VUFDRDtZQUNFLE1BQU0sUUFBUTtZQUNkLE1BQU0sTUFBTTtZQUNaLE1BQU0sTUFBTTtZQUNaLFNBQVMsSUFBSTtXQUNkO1NBQ0Y7UUFDRCxhQUFhLElBQUk7T0FDbEIsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLG1CQUFtQixVQUFVO01BQ2pDLE1BQU0sWUFBWSxLQUFLO1FBQ3JCLElBQUksbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRTtVQUNsRCxDQUFDLEVBQUUsQ0FBQztTQUNMO09BQ0YsQ0FBQztNQUNGLE1BQU0sQ0FBQztRQUNMLGVBQWUsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO1FBQ3pDLGtCQUFrQixLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztRQUN2QyxtQkFBbUIsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7UUFDeEMsc0JBQXNCLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztPQUNoRCxFQUFFLGdCQUFnQixNQUFNLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3BFLENBQUM7O0lBRUYsTUFBTSxRQUFRLHFCQUFxQixPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQzs7SUFFckUsTUFBTSxZQUFZLFFBQVEsQ0FBQztJQUMzQixNQUFNLGFBQWEsaUJBQWlCO01BQ2xDLE1BQU0sVUFBVSxnQkFBZ0IsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUMxRixNQUFNLGtCQUFrQixRQUFRLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztNQUNyRixPQUFPLGFBQWEsT0FBTyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7S0FDNUgsQ0FBQztJQUNGLE1BQU0sV0FBVyxvQ0FBb0M7TUFDbkQsSUFBSSxhQUFhLE9BQU8sSUFBSSxDQUFDLEVBQUU7UUFDN0IsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCLE1BQU07UUFDTCxPQUFPLFdBQVcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxzQkFBc0IsRUFBRSxRQUFRLHFCQUFxQixDQUFDLElBQUksQ0FBQyxXQUFXO1VBQ3RHLE1BQU07VUFDTixPQUFPLGFBQWE7U0FDckIsQ0FBQyxDQUFDLENBQUM7T0FDTDtLQUNGLENBQUM7O0lBRUYsTUFBTSxTQUFTLFNBQVM7TUFDdEIsU0FBUyxJQUFJO01BQ2IsVUFBVSxRQUFRLEtBQUssRUFBRTtNQUN6QixZQUFZLFFBQVEsS0FBSyxFQUFFO01BQzNCLFdBQVcsQ0FBQyxJQUFJLENBQUM7S0FDbEIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxVQUFVLGlDQUFpQztNQUMvQyxTQUFTLElBQUk7TUFDYixVQUFVLFFBQVEsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQztNQUNsRCxZQUFZLFVBQVUsQ0FBQyxhQUFhLENBQUM7TUFDckMsV0FBVyxTQUFTLENBQUMsYUFBYSxDQUFDO0tBQ3BDLENBQUMsQ0FBQzs7SUFFSCxNQUFNLHNCQUFzQixVQUFVO01BQ3BDLE1BQU0sVUFBVSxJQUFJLENBQUMsUUFBUSxLQUFLLEVBQUUsQ0FBQyxDQUFDO01BQ3RDLE1BQU0saUJBQWlCLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUNoQyxJQUFJLG1CQUFtQixRQUFRLEtBQUssRUFBRSxDQUFDO01BQ3ZDLE1BQU0sWUFBWSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7TUFDbkMsTUFBTSx5QkFBeUIsT0FBTyxnQkFBZ0IsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUN4RixNQUFNLFdBQVcsTUFBTSx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUMvRixNQUFNLFNBQVMsTUFBTSx5QkFBeUIsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7TUFDM0YsTUFBTSxjQUFjLE1BQU0sUUFBUSxFQUFFLEtBQUssQ0FBQyxzQkFBc0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLDBCQUEwQjtRQUN2SixJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUU7VUFDNUIsSUFBSSxTQUFTLENBQUMsa0JBQWtCLENBQUMsRUFBRTtZQUNqQyxPQUFPLFFBQVEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7V0FDbEQsTUFBTTtZQUNMLE9BQU8sUUFBUSxLQUFLLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7V0FDOUY7U0FDRjtRQUNELE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN4QixDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ0wsTUFBTSxzQkFBc0IsV0FBVztRQUNyQyxNQUFNLFdBQVcsS0FBSyxDQUFDLE9BQU8sUUFBUSxDQUFDLENBQUM7UUFDeEMsT0FBTyxRQUFRLElBQUksQ0FBQyxTQUFTO1VBQzNCLE1BQU0sWUFBWSxTQUFTLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztVQUM3QyxNQUFNLGdCQUFnQixPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7VUFDNUQsTUFBTSxTQUFTLEtBQUssQ0FBQyxhQUFhLEVBQUUsZUFBZTtZQUNqRCxJQUFJLElBQUksU0FBUyxFQUFFO2NBQ2pCLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQztjQUNqQixJQUFJLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtnQkFDckIsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDO2VBQ3BCLE1BQU0sSUFBSSxJQUFJLE9BQU8sR0FBRyxJQUFJLFFBQVEsSUFBSSxTQUFTLEtBQUssUUFBUSxFQUFFO2dCQUMvRCxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUM7ZUFDbkI7YUFDRjtZQUNELE9BQU8sR0FBRyxDQUFDO1dBQ1osRUFBRTtZQUNELE9BQU8sS0FBSztZQUNaLFNBQVMsS0FBSztZQUNkLFFBQVEsS0FBSztXQUNkLENBQUMsQ0FBQztVQUNILE9BQU87WUFDTCxXQUFXLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFO1lBQzFELGFBQWEsb0JBQW9CLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUU7WUFDOUQsTUFBTTtXQUNQLENBQUM7U0FDSCxDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxlQUFlLE1BQU07UUFDekIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQyxtQkFBbUIsT0FBTyxJQUFJLEVBQUUsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLGNBQWMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDbEMsQ0FBQztNQUNGLE1BQU0sZUFBZSxXQUFXO1FBQzlCLE9BQU8sRUFBRSxDQUFDO1FBQ1YsY0FBYyxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNELE9BQU8sTUFBTTtVQUNYLGNBQWMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksRUFBRSxFQUFFLEtBQUssQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDdEUsQ0FBQztPQUNILENBQUM7TUFDRixNQUFNLFVBQVUscUJBQXFCLFlBQVksQ0FBQyxNQUFNLE9BQU8sSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNO1FBQy9FLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO09BQ3ZCLEVBQUUsV0FBVztRQUNaLEdBQUcsV0FBVyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sVUFBVSxXQUFXLEVBQUUsQ0FBQyxDQUFDO09BQ3ZFLENBQUMsQ0FBQyxDQUFDO01BQ0osTUFBTSxvQkFBb0IsK0JBQStCLFlBQVksQ0FBQyxNQUFNLE9BQU8sSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNO1FBQ25HLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO09BQ3RCLEVBQUUsV0FBVztRQUNaLEdBQUcsV0FBVyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sVUFBVSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO09BQ2xDLENBQUMsQ0FBQyxDQUFDO01BQ0osTUFBTSx1QkFBdUIsaUJBQWlCLGdCQUFnQixPQUFPLENBQUMsV0FBVyxPQUFPLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO01BQ2hILE1BQU0sZUFBZSxPQUFPLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxLQUFLLENBQUMsQ0FBQztNQUNyRCxNQUFNLG1CQUFtQixPQUFPLE9BQU8sQ0FBQyxHQUFHLEVBQUUsV0FBVyxTQUFTLENBQUMsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDO01BQ3BGLE1BQU0sZ0JBQWdCLGlCQUFpQixPQUFPLE9BQU8sQ0FBQyxHQUFHLEVBQUUsV0FBVyxTQUFTLENBQUMsT0FBTyxRQUFRLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO01BQ3pJLE1BQU0sbUJBQW1CLG9CQUFvQixPQUFPLE9BQU8sQ0FBQyxHQUFHLEVBQUUsV0FBVyxTQUFTLENBQUMsT0FBTyxRQUFRLENBQUMsSUFBSSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO01BQ3ZJLE1BQU0seUJBQXlCLHFDQUFxQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLEVBQUUsV0FBVyxTQUFTLENBQUMsT0FBTyxRQUFRLENBQUMsSUFBSSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsSUFBSSxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO01BQ3JNLE1BQU0sbUJBQW1CLE9BQU8sT0FBTyxDQUFDLEdBQUcsRUFBRSxZQUFZLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7TUFDOUYsTUFBTSxxQkFBcUIsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLFlBQVksc0JBQXNCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztNQUNsRyxNQUFNLDBCQUEwQixPQUFPO1FBQ3JDLE9BQU8saUJBQWlCLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxXQUFXO1VBQzlDLE1BQU0sV0FBVyxLQUFLLENBQUMsT0FBTyxRQUFRLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7VUFDM0QsT0FBTyxRQUFRLE9BQU8sQ0FBQyxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztTQUMxRCxDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxzQkFBc0IseUJBQXlCLE9BQU87UUFDMUQsT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsV0FBVyxTQUFTLENBQUMsT0FBTyxRQUFRLENBQUMsRUFBRSxNQUFNLE1BQU0sa0JBQWtCLENBQUMsT0FBTyxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUM7T0FDOUgsQ0FBQztNQUNGLE1BQU0seUJBQXlCLG1CQUFtQixDQUFDLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQ2hGLE1BQU0sNEJBQTRCLG1CQUFtQixDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO01BQy9FLE1BQU0sR0FBRyxDQUFDLDRDQUE0QyxFQUFFLFlBQVksQ0FBQyxDQUFDO01BQ3RFLE9BQU87UUFDTCxZQUFZO1FBQ1osZ0JBQWdCO1FBQ2hCLGFBQWE7UUFDYixnQkFBZ0I7UUFDaEIsc0JBQXNCO1FBQ3RCLGdCQUFnQjtRQUNoQixrQkFBa0I7UUFDbEIsWUFBWTtRQUNaLHVCQUF1QjtRQUN2QixzQkFBc0I7UUFDdEIseUJBQXlCO1FBQ3pCLFNBQVMsT0FBTyxJQUFJO09BQ3JCLENBQUM7S0FDSCxDQUFDOztJQUVGLElBQUksU0FBUyxPQUFPLEtBQUssTUFBTSxRQUFRLENBQUMsdUJBQXVCLENBQUMsQ0FBQzs7SUFFakUsTUFBTSxnQkFBZ0Isc0JBQXNCLENBQUM7SUFDN0MsTUFBTSxlQUFlLGFBQWEsR0FBRyxNQUFNLENBQUM7SUFDNUMsTUFBTSxrQkFBa0IsYUFBYSxHQUFHLFNBQVMsQ0FBQztJQUNsRCxNQUFNLFVBQVUsUUFBUTtNQUN0QixJQUFJLEVBQUUsQ0FBQztNQUNQLE1BQU0sUUFBUSxDQUFDLEtBQUssTUFBTSxLQUFLLEVBQUUsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7TUFDdkUsT0FBTyxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsUUFBUSxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2xFLENBQUM7SUFDRixNQUFNLFVBQVUsTUFBTSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDNUMsTUFBTSxhQUFhLE1BQU0sT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDOztJQUVsRCxNQUFNLG9CQUFvQixVQUFVLE9BQU87TUFDekMsTUFBTSxjQUFjLE1BQU07UUFDeEIsR0FBRyxXQUFXLENBQUMsTUFBTSxVQUFVLFdBQVcsRUFBRSxDQUFDLENBQUM7T0FDL0MsQ0FBQztNQUNGLE1BQU0sR0FBRyxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztNQUNyQyxXQUFXLEVBQUUsQ0FBQztNQUNkLE9BQU8sTUFBTTtRQUNYLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztPQUN2QyxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sYUFBYSw4QkFBOEI7TUFDL0MsTUFBTSxHQUFHLFNBQVMsY0FBYyxDQUFDLE9BQU8sRUFBRTtRQUN4QyxTQUFTLE9BQU87UUFDaEIsTUFBTSxPQUFPO1FBQ2IsU0FBUyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7UUFDbEMsT0FBTyxZQUFZLFFBQVEsQ0FBQyx1RUFBdUUsQ0FBQztPQUNyRyxDQUFDLENBQUM7TUFDSCxNQUFNLE1BQU0sV0FBVyxNQUFNLE1BQU0sWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ3pELE1BQU0sd0JBQXdCLGdCQUFnQjtRQUM1QyxJQUFJLE1BQU0sc0JBQXNCLENBQUMsSUFBSSxRQUFRLENBQUMsRUFBRTtVQUM5QyxNQUFNLEdBQUcsU0FBUyxVQUFVLENBQUMsSUFBSSxFQUFFO1lBQ2pDLEdBQUcsSUFBSTtZQUNQLFVBQVUsVUFBVSxDQUFDLElBQUksU0FBUyxDQUFDLEdBQUcsSUFBSSxTQUFTLEdBQUcsR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDO1dBQ3hFLENBQUMsQ0FBQztTQUNKO09BQ0YsQ0FBQztNQUNGLE1BQU0sOEJBQThCLGdCQUFnQjtRQUNsRCxJQUFJLE1BQU0sc0JBQXNCLENBQUMsSUFBSSxRQUFRLENBQUMsRUFBRTtVQUM5QyxNQUFNLEdBQUcsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7WUFDdkMsR0FBRyxJQUFJO1lBQ1AsVUFBVSxVQUFVLENBQUMsSUFBSSxTQUFTLENBQUMsR0FBRyxJQUFJLFNBQVMsR0FBRyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUM7V0FDeEUsQ0FBQyxDQUFDO1NBQ0o7T0FDRixDQUFDO01BQ0YscUJBQXFCLENBQUMsWUFBWSxFQUFFO1FBQ2xDLFNBQVMsa0JBQWtCO1FBQzNCLFNBQVMsZUFBZTtRQUN4QixNQUFNLE9BQU87UUFDYixTQUFTLGdCQUFnQixhQUFhO09BQ3ZDLENBQUMsQ0FBQztNQUNILHFCQUFxQixDQUFDLGFBQWEsRUFBRTtRQUNuQyxTQUFTLGNBQWM7UUFDdkIsU0FBUyxnQkFBZ0I7UUFDekIsTUFBTSxvQkFBb0I7UUFDMUIsU0FBUyxnQkFBZ0IsYUFBYTtPQUN2QyxDQUFDLENBQUM7TUFDSCxxQkFBcUIsQ0FBQyxnQkFBZ0IsRUFBRTtRQUN0QyxTQUFTLGlCQUFpQjtRQUMxQixTQUFTLG1CQUFtQjtRQUM1QixNQUFNLHVCQUF1QjtRQUM3QixTQUFTLGdCQUFnQixpQkFBaUI7T0FDM0MsQ0FBQyxDQUFDO01BQ0gscUJBQXFCLENBQUMsaUJBQWlCLEVBQUU7UUFDdkMsU0FBUyxhQUFhO1FBQ3RCLFNBQVMsb0JBQW9CO1FBQzdCLE1BQU0sbUJBQW1CO1FBQ3pCLFNBQVMsZ0JBQWdCLGlCQUFpQjtPQUMzQyxDQUFDLENBQUM7TUFDSCxxQkFBcUIsQ0FBQyxpQkFBaUIsRUFBRTtRQUN2QyxTQUFTLFlBQVk7UUFDckIsU0FBUyxvQkFBb0I7UUFDN0IsTUFBTSxtQkFBbUI7UUFDekIsU0FBUyxnQkFBZ0IsbUJBQW1CO09BQzdDLENBQUMsQ0FBQztNQUNILHFCQUFxQixDQUFDLHNCQUFzQixFQUFFO1FBQzVDLFNBQVMsbUJBQW1CO1FBQzVCLFNBQVMseUJBQXlCO1FBQ2xDLE1BQU0sd0JBQXdCO1FBQzlCLFNBQVMsZ0JBQWdCLGlCQUFpQjtPQUMzQyxDQUFDLENBQUM7TUFDSCxxQkFBcUIsQ0FBQyxxQkFBcUIsRUFBRTtRQUMzQyxTQUFTLGtCQUFrQjtRQUMzQixTQUFTLHdCQUF3QjtRQUNqQyxNQUFNLHdCQUF3QjtRQUM5QixTQUFTLGdCQUFnQixpQkFBaUI7T0FDM0MsQ0FBQyxDQUFDO01BQ0gscUJBQXFCLENBQUMsZ0JBQWdCLEVBQUU7UUFDdEMsU0FBUyxZQUFZO1FBQ3JCLFNBQVMsbUJBQW1CO1FBQzVCLE1BQU0sa0JBQWtCO1FBQ3hCLFNBQVMsZ0JBQWdCLGlCQUFpQjtPQUMzQyxDQUFDLENBQUM7TUFDSCxxQkFBcUIsQ0FBQyxlQUFlLEVBQUU7UUFDckMsU0FBUyxnQkFBZ0I7UUFDekIsU0FBUyxrQkFBa0I7UUFDM0IsTUFBTSxzQkFBc0I7UUFDNUIsU0FBUyxnQkFBZ0IsaUJBQWlCO09BQzNDLENBQUMsQ0FBQztNQUNILHFCQUFxQixDQUFDLHNCQUFzQixFQUFFO1FBQzVDLFNBQVMsc0JBQXNCO1FBQy9CLFNBQVMseUJBQXlCO1FBQ2xDLE1BQU0sNEJBQTRCO1FBQ2xDLFNBQVMsZ0JBQWdCLGNBQWMsQ0FBQyxTQUFTLENBQUM7T0FDbkQsQ0FBQyxDQUFDO01BQ0gscUJBQXFCLENBQUMscUJBQXFCLEVBQUU7UUFDM0MsU0FBUyxxQkFBcUI7UUFDOUIsU0FBUyx3QkFBd0I7UUFDakMsTUFBTSwyQkFBMkI7UUFDakMsU0FBUyxnQkFBZ0IsY0FBYyxDQUFDLFFBQVEsQ0FBQztPQUNsRCxDQUFDLENBQUM7TUFDSCxxQkFBcUIsQ0FBQyxnQkFBZ0IsRUFBRTtRQUN0QyxTQUFTLGVBQWU7UUFDeEIsU0FBUyxtQkFBbUI7UUFDNUIsTUFBTSxxQkFBcUI7UUFDM0IsU0FBUyxnQkFBZ0IsY0FBYyxDQUFDLE9BQU8sQ0FBQztPQUNqRCxDQUFDLENBQUM7TUFDSCxxQkFBcUIsQ0FBQyxhQUFhLEVBQUU7UUFDbkMsU0FBUyxTQUFTO1FBQ2xCLFNBQVMsZ0JBQWdCO1FBQ3pCLE1BQU0sU0FBUztRQUNmLFNBQVMsZ0JBQWdCLGlCQUFpQjtPQUMzQyxDQUFDLENBQUM7TUFDSCxxQkFBcUIsQ0FBQyxjQUFjLEVBQUU7UUFDcEMsU0FBUyxVQUFVO1FBQ25CLFNBQVMsaUJBQWlCO1FBQzFCLE1BQU0sZUFBZTtRQUNyQixTQUFTLGdCQUFnQixpQkFBaUI7T0FDM0MsQ0FBQyxDQUFDO01BQ0gscUJBQXFCLENBQUMscUJBQXFCLEVBQUU7UUFDM0MsU0FBUyxrQkFBa0I7UUFDM0IsU0FBUyx3QkFBd0I7UUFDakMsTUFBTSxrQkFBa0I7UUFDeEIsU0FBUyxnQkFBZ0IsaUJBQWlCLENBQUMsT0FBTyxDQUFDO09BQ3BELENBQUMsQ0FBQztNQUNILHFCQUFxQixDQUFDLG9CQUFvQixFQUFFO1FBQzFDLFNBQVMsaUJBQWlCO1FBQzFCLFNBQVMsdUJBQXVCO1FBQ2hDLE1BQU0saUJBQWlCO1FBQ3ZCLFNBQVMsZ0JBQWdCLGlCQUFpQixDQUFDLE9BQU8sQ0FBQztPQUNwRCxDQUFDLENBQUM7TUFDSCxxQkFBcUIsQ0FBQyxhQUFhLEVBQUU7UUFDbkMsU0FBUyxZQUFZO1FBQ3JCLFNBQVMsZ0JBQWdCO1FBQ3pCLE1BQU0sWUFBWTtRQUNsQixTQUFTLGdCQUFnQixjQUFjLENBQUMsT0FBTyxDQUFDO09BQ2pELENBQUMsQ0FBQztNQUNILHFCQUFxQixDQUFDLGNBQWMsRUFBRTtRQUNwQyxTQUFTLGFBQWE7UUFDdEIsU0FBUyxpQkFBaUI7UUFDMUIsTUFBTSxrQkFBa0I7UUFDeEIsU0FBUyxnQkFBZ0IsY0FBYyxDQUFDLE9BQU8sQ0FBQztPQUNqRCxDQUFDLENBQUM7TUFDSCxxQkFBcUIsQ0FBQyxxQkFBcUIsRUFBRTtRQUMzQyxTQUFTLHFCQUFxQjtRQUM5QixTQUFTLHdCQUF3QjtRQUNqQyxNQUFNLHFCQUFxQjtRQUMzQixTQUFTLGdCQUFnQix1QkFBdUIsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDO09BQ3hFLENBQUMsQ0FBQztNQUNILHFCQUFxQixDQUFDLG9CQUFvQixFQUFFO1FBQzFDLFNBQVMsb0JBQW9CO1FBQzdCLFNBQVMsdUJBQXVCO1FBQ2hDLE1BQU0sb0JBQW9CO1FBQzFCLFNBQVMsZ0JBQWdCLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUM7T0FDdkUsQ0FBQyxDQUFDO01BQ0gscUJBQXFCLENBQUMsbUJBQW1CLEVBQUU7UUFDekMsU0FBUyxjQUFjO1FBQ3ZCLFNBQVMsc0JBQXNCO1FBQy9CLE1BQU0sT0FBTztRQUNiLFNBQVMsaUJBQWlCLENBQUMsTUFBTSxDQUFDO09BQ25DLENBQUMsQ0FBQztNQUNILE1BQU0saUJBQWlCLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO01BQ2pFLElBQUksY0FBYyxPQUFPLEtBQUssQ0FBQyxJQUFJLE1BQU0sc0JBQXNCLENBQUMscUJBQXFCLENBQUMsRUFBRTtRQUN0RixNQUFNLEdBQUcsU0FBUyxjQUFjLENBQUMsWUFBWSxFQUFFO1VBQzdDLE1BQU0sZUFBZTtVQUNyQixTQUFTLGNBQWM7VUFDdkIsT0FBTyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxTQUFTLE1BQU0sWUFBWSxDQUFDLHFCQUFxQixFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztVQUN4SSxTQUFTLGdCQUFnQixhQUFhO1NBQ3ZDLENBQUMsQ0FBQztPQUNKO01BQ0QsTUFBTSxxQkFBcUIsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7TUFDcEUsSUFBSSxrQkFBa0IsT0FBTyxLQUFLLENBQUMsSUFBSSxNQUFNLHNCQUFzQixDQUFDLHlCQUF5QixDQUFDLEVBQUU7UUFDOUYsTUFBTSxHQUFHLFNBQVMsY0FBYyxDQUFDLGdCQUFnQixFQUFFO1VBQ2pELE1BQU0sb0JBQW9CO1VBQzFCLFNBQVMsYUFBYTtVQUN0QixPQUFPLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLE1BQU0sWUFBWSxDQUFDLHlCQUF5QixFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztVQUNwSixTQUFTLGdCQUFnQixpQkFBaUI7U0FDM0MsQ0FBQyxDQUFDO09BQ0o7TUFDRCxJQUFJLE1BQU0sc0JBQXNCLENBQUMsd0JBQXdCLENBQUMsRUFBRTtRQUMxRCxNQUFNLEdBQUcsU0FBUyxjQUFjLENBQUMsaUJBQWlCLEVBQUU7VUFDbEQsTUFBTSxnQkFBZ0I7VUFDdEIsU0FBUyxnQkFBZ0I7VUFDekIsT0FBTyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsd0JBQXdCLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUM7VUFDdEksU0FBUyxnQkFBZ0IsaUJBQWlCO1NBQzNDLENBQUMsQ0FBQztRQUNILE1BQU0sR0FBRyxTQUFTLGNBQWMsQ0FBQyxzQkFBc0IsRUFBRTtVQUN2RCxNQUFNLGNBQWM7VUFDcEIsU0FBUyxjQUFjO1VBQ3ZCLE9BQU8seUJBQXlCLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxFQUFFLHNCQUFzQixFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztVQUMzSSxTQUFTLGdCQUFnQixpQkFBaUI7U0FDM0MsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxHQUFHLFNBQVMsY0FBYyxDQUFDLHNCQUFzQixFQUFFO1VBQ3ZELE1BQU0sY0FBYztVQUNwQixTQUFTLGNBQWM7VUFDdkIsT0FBTyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1VBQzNJLFNBQVMsZ0JBQWdCLGlCQUFpQjtTQUMzQyxDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsU0FBUyxjQUFjLENBQUMsMEJBQTBCLEVBQUU7VUFDM0QsTUFBTSx1QkFBdUI7VUFDN0IsU0FBUyxrQkFBa0I7VUFDM0IsT0FBTyxZQUFZLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxFQUFFLGtCQUFrQixDQUFDLENBQUM7VUFDM0csU0FBUyxnQkFBZ0IsaUJBQWlCO1NBQzNDLENBQUMsQ0FBQztRQUNILE1BQU0sR0FBRyxTQUFTLGNBQWMsQ0FBQyxzQkFBc0IsRUFBRTtVQUN2RCxNQUFNLG1CQUFtQjtVQUN6QixTQUFTLGNBQWM7VUFDdkIsT0FBTyxZQUFZLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1VBQ25HLFNBQVMsZ0JBQWdCLGlCQUFpQjtTQUMzQyxDQUFDLENBQUM7T0FDSjtNQUNELDJCQUEyQixDQUFDLGNBQWMsRUFBRTtRQUMxQyxTQUFTLGVBQWU7UUFDeEIsTUFBTSxlQUFlO1FBQ3JCLFNBQVMsdUJBQXVCO1FBQ2hDLFNBQVMsZ0JBQWdCLHdCQUF3QjtPQUNsRCxDQUFDLENBQUM7TUFDSCwyQkFBMkIsQ0FBQyxnQkFBZ0IsRUFBRTtRQUM1QyxTQUFTLFlBQVk7UUFDckIsTUFBTSxrQkFBa0I7UUFDeEIsU0FBUyxpQkFBaUI7UUFDMUIsVUFBVSxlQUFlLENBQUMsTUFBTSxDQUFDO1FBQ2pDLFNBQVMsZ0JBQWdCLHVCQUF1QjtPQUNqRCxDQUFDLENBQUM7TUFDSCwyQkFBMkIsQ0FBQyxnQkFBZ0IsRUFBRTtRQUM1QyxTQUFTLGVBQWU7UUFDeEIsTUFBTSxtQkFBbUI7UUFDekIsU0FBUyxpQkFBaUI7UUFDMUIsVUFBVSxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7UUFDcEMsU0FBUyxnQkFBZ0IsMEJBQTBCO09BQ3BELENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGNBQWMsVUFBVTtNQUM1QixNQUFNLGtCQUFrQixTQUFTLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sUUFBUSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLElBQUksV0FBVyxDQUFDLEtBQUssV0FBVyxDQUFDLENBQUM7TUFDOUksTUFBTSxVQUFVLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNuQyxJQUFJLE9BQU8sT0FBTyxHQUFHLENBQUMsRUFBRTtRQUN0QixNQUFNLEdBQUcsU0FBUyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUU7VUFDNUMsV0FBVyxlQUFlO1VBQzFCLE9BQU8sT0FBTztVQUNkLE9BQU8sTUFBTTtVQUNiLFVBQVUsTUFBTTtTQUNqQixDQUFDLENBQUM7T0FDSjtLQUNGLENBQUM7O0lBRUYsTUFBTSxrQkFBa0IsVUFBVSxPQUFPO01BQ3ZDLE1BQU0sY0FBYyxNQUFNO1FBQ3hCLEdBQUcsV0FBVyxDQUFDLE1BQU0sVUFBVSxXQUFXLEVBQUUsQ0FBQyxDQUFDO09BQy9DLENBQUM7TUFDRixNQUFNLEdBQUcsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDckMsV0FBVyxFQUFFLENBQUM7TUFDZCxPQUFPLE1BQU07UUFDWCxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7T0FDdkMsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLGVBQWUsOEJBQThCO01BQ2pELE1BQU0sTUFBTSxXQUFXLE1BQU0sTUFBTSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDekQsTUFBTSxzQkFBc0IsZ0JBQWdCO1FBQzFDLElBQUksTUFBTSxzQkFBc0IsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxFQUFFO1VBQzlDLE1BQU0sR0FBRyxTQUFTLFlBQVksQ0FBQyxJQUFJLEVBQUU7WUFDbkMsR0FBRyxJQUFJO1lBQ1AsVUFBVSxVQUFVLENBQUMsSUFBSSxTQUFTLENBQUMsR0FBRyxJQUFJLFNBQVMsR0FBRyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUM7V0FDeEUsQ0FBQyxDQUFDO1VBQ0gsT0FBTyxJQUFJLENBQUM7U0FDYixNQUFNO1VBQ0wsT0FBTyxLQUFLLENBQUM7U0FDZDtPQUNGLENBQUM7TUFDRixNQUFNLDRCQUE0QixnQkFBZ0I7UUFDaEQsSUFBSSxNQUFNLHNCQUFzQixDQUFDLElBQUksUUFBUSxDQUFDLEVBQUU7VUFDOUMsTUFBTSxHQUFHLFNBQVMsa0JBQWtCLENBQUMsSUFBSSxFQUFFO1lBQ3pDLEdBQUcsSUFBSTtZQUNQLFVBQVUsVUFBVSxDQUFDLElBQUksU0FBUyxDQUFDLEdBQUcsSUFBSSxTQUFTLEdBQUcsR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDO1dBQ3hFLENBQUMsQ0FBQztTQUNKO09BQ0YsQ0FBQztNQUNGLE1BQU0sb0JBQW9CLFFBQVE7UUFDaEMsTUFBTSxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFO1VBQzFDLE1BQU0sSUFBSSxRQUFRO1VBQ2xCLFNBQVMsSUFBSSxXQUFXO1NBQ3pCLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLGtCQUFrQjtRQUN0QixtQkFBbUIsQ0FBQyxzQkFBc0IsRUFBRTtVQUMxQyxNQUFNLG1CQUFtQjtVQUN6QixNQUFNLHdCQUF3QjtVQUM5QixTQUFTLHlCQUF5QjtVQUNsQyxTQUFTLGdCQUFnQixpQkFBaUI7U0FDM0MsQ0FBQztRQUNGLG1CQUFtQixDQUFDLHFCQUFxQixFQUFFO1VBQ3pDLE1BQU0sa0JBQWtCO1VBQ3hCLE1BQU0sd0JBQXdCO1VBQzlCLFNBQVMsd0JBQXdCO1VBQ2pDLFNBQVMsZ0JBQWdCLGlCQUFpQjtTQUMzQyxDQUFDO1FBQ0YsbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUU7VUFDcEMsTUFBTSxZQUFZO1VBQ2xCLE1BQU0sa0JBQWtCO1VBQ3hCLFNBQVMsbUJBQW1CO1VBQzVCLFNBQVMsZ0JBQWdCLGlCQUFpQjtTQUMzQyxDQUFDO1FBQ0YsbUJBQW1CLENBQUMsZUFBZSxFQUFFO1VBQ25DLE1BQU0sZ0JBQWdCO1VBQ3RCLE1BQU0sc0JBQXNCO1VBQzVCLFNBQVMsa0JBQWtCO1VBQzNCLFNBQVMsZ0JBQWdCLGlCQUFpQjtTQUMzQyxDQUFDO1FBQ0YsbUJBQW1CLENBQUMsYUFBYSxFQUFFO1VBQ2pDLE1BQU0sU0FBUztVQUNmLE1BQU0sU0FBUztVQUNmLFNBQVMsZ0JBQWdCO1VBQ3pCLFNBQVMsZ0JBQWdCLGlCQUFpQjtTQUMzQyxDQUFDO1FBQ0YsbUJBQW1CLENBQUMsY0FBYyxFQUFFO1VBQ2xDLE1BQU0sVUFBVTtVQUNoQixNQUFNLGVBQWU7VUFDckIsU0FBUyxpQkFBaUI7VUFDMUIsU0FBUyxnQkFBZ0IsaUJBQWlCO1NBQzNDLENBQUM7UUFDRixtQkFBbUIsQ0FBQyxxQkFBcUIsRUFBRTtVQUN6QyxNQUFNLGtCQUFrQjtVQUN4QixNQUFNLGtCQUFrQjtVQUN4QixTQUFTLHdCQUF3QjtVQUNqQyxTQUFTLGdCQUFnQixpQkFBaUIsQ0FBQyxPQUFPLENBQUM7U0FDcEQsQ0FBQztRQUNGLG1CQUFtQixDQUFDLG9CQUFvQixFQUFFO1VBQ3hDLE1BQU0saUJBQWlCO1VBQ3ZCLE1BQU0saUJBQWlCO1VBQ3ZCLFNBQVMsdUJBQXVCO1VBQ2hDLFNBQVMsZ0JBQWdCLGlCQUFpQixDQUFDLE9BQU8sQ0FBQztTQUNwRCxDQUFDO09BQ0gsQ0FBQztNQUNGLE1BQU0scUJBQXFCO1FBQ3pCLG1CQUFtQixDQUFDLHlCQUF5QixFQUFFO1VBQzdDLE1BQU0sc0JBQXNCO1VBQzVCLE1BQU0sNEJBQTRCO1VBQ2xDLFNBQVMseUJBQXlCO1VBQ2xDLFNBQVMsZ0JBQWdCLGNBQWMsQ0FBQyxTQUFTLENBQUM7U0FDbkQsQ0FBQztRQUNGLG1CQUFtQixDQUFDLHdCQUF3QixFQUFFO1VBQzVDLE1BQU0scUJBQXFCO1VBQzNCLE1BQU0sMkJBQTJCO1VBQ2pDLFNBQVMsd0JBQXdCO1VBQ2pDLFNBQVMsZ0JBQWdCLGNBQWMsQ0FBQyxRQUFRLENBQUM7U0FDbEQsQ0FBQztRQUNGLG1CQUFtQixDQUFDLG1CQUFtQixFQUFFO1VBQ3ZDLE1BQU0sZUFBZTtVQUNyQixNQUFNLHFCQUFxQjtVQUMzQixTQUFTLG1CQUFtQjtVQUM1QixTQUFTLGdCQUFnQixjQUFjLENBQUMsT0FBTyxDQUFDO1NBQ2pELENBQUM7UUFDRixtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRTtVQUNwQyxNQUFNLFlBQVk7VUFDbEIsTUFBTSxZQUFZO1VBQ2xCLFNBQVMsZ0JBQWdCO1VBQ3pCLFNBQVMsZ0JBQWdCLGNBQWMsQ0FBQyxPQUFPLENBQUM7U0FDakQsQ0FBQztRQUNGLG1CQUFtQixDQUFDLGlCQUFpQixFQUFFO1VBQ3JDLE1BQU0sYUFBYTtVQUNuQixNQUFNLGtCQUFrQjtVQUN4QixTQUFTLGlCQUFpQjtVQUMxQixTQUFTLGdCQUFnQixjQUFjLENBQUMsT0FBTyxDQUFDO1NBQ2pELENBQUM7UUFDRixtQkFBbUIsQ0FBQyx3QkFBd0IsRUFBRTtVQUM1QyxNQUFNLHFCQUFxQjtVQUMzQixNQUFNLHFCQUFxQjtVQUMzQixTQUFTLHdCQUF3QjtVQUNqQyxTQUFTLGdCQUFnQix1QkFBdUIsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDO1NBQ3hFLENBQUM7UUFDRixtQkFBbUIsQ0FBQyx1QkFBdUIsRUFBRTtVQUMzQyxNQUFNLG9CQUFvQjtVQUMxQixNQUFNLG9CQUFvQjtVQUMxQixTQUFTLHVCQUF1QjtVQUNoQyxTQUFTLGdCQUFnQix1QkFBdUIsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDO1NBQ3ZFLENBQUM7T0FDSCxDQUFDO01BQ0YsTUFBTSxtQkFBbUI7UUFDdkIsbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUU7VUFDcEMsTUFBTSxpQkFBaUI7VUFDdkIsTUFBTSx1QkFBdUI7VUFDN0IsU0FBUyxtQkFBbUI7VUFDNUIsU0FBUyxnQkFBZ0IsaUJBQWlCO1NBQzNDLENBQUM7UUFDRixtQkFBbUIsQ0FBQyxpQkFBaUIsRUFBRTtVQUNyQyxNQUFNLGFBQWE7VUFDbkIsTUFBTSxtQkFBbUI7VUFDekIsU0FBUyxvQkFBb0I7VUFDN0IsU0FBUyxnQkFBZ0IsaUJBQWlCO1NBQzNDLENBQUM7UUFDRixtQkFBbUIsQ0FBQyxpQkFBaUIsRUFBRTtVQUNyQyxNQUFNLFlBQVk7VUFDbEIsTUFBTSxtQkFBbUI7VUFDekIsU0FBUyxvQkFBb0I7VUFDN0IsU0FBUyxnQkFBZ0IsbUJBQW1CO1NBQzdDLENBQUM7T0FDSCxDQUFDO01BQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUN6QixNQUFNLEdBQUcsU0FBUyxZQUFZLENBQUMsYUFBYSxFQUFFO1VBQzVDLE1BQU0sT0FBTztVQUNiLE1BQU0sT0FBTztVQUNiLFVBQVUsR0FBRyxDQUFDLHNCQUFzQixDQUFDO1VBQ3JDLFNBQVMsZUFBZSxDQUFDLE1BQU0sQ0FBQztTQUNqQyxDQUFDLENBQUM7T0FDSixNQUFNO1FBQ0wsTUFBTSxHQUFHLFNBQVMsa0JBQWtCLENBQUMsYUFBYSxFQUFFO1VBQ2xELE1BQU0sT0FBTztVQUNiLE1BQU0sT0FBTztVQUNiLGlCQUFpQixNQUFNLENBQUM7Y0FDcEIsTUFBTSxlQUFlO2NBQ3JCLFdBQVcsYUFBYTtjQUN4QixVQUFVLGlCQUFpQjthQUM1QixDQUFDO1VBQ0osU0FBUyxlQUFlLENBQUMsTUFBTSxDQUFDO1NBQ2pDLENBQUMsQ0FBQztPQUNKO01BQ0QsTUFBTSxHQUFHLFNBQVMsWUFBWSxDQUFDLG1CQUFtQixFQUFFO1FBQ2xELE1BQU0sY0FBYztRQUNwQixNQUFNLE9BQU87UUFDYixVQUFVLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQztRQUNyQyxTQUFTLGVBQWUsQ0FBQyxNQUFNLENBQUM7T0FDakMsQ0FBQyxDQUFDO01BQ0gsbUJBQW1CLENBQUMsWUFBWSxFQUFFO1FBQ2hDLE1BQU0sa0JBQWtCO1FBQ3hCLFNBQVMsZ0JBQWdCLGFBQWE7UUFDdEMsU0FBUyxlQUFlO09BQ3pCLENBQUMsQ0FBQztNQUNILG1CQUFtQixDQUFDLGFBQWEsRUFBRTtRQUNqQyxNQUFNLGNBQWM7UUFDcEIsTUFBTSxvQkFBb0I7UUFDMUIsU0FBUyxnQkFBZ0IsYUFBYTtRQUN0QyxTQUFTLGdCQUFnQjtPQUMxQixDQUFDLENBQUM7TUFDSCxJQUFJLFFBQVEsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLEVBQUU7UUFDbkMsTUFBTSxHQUFHLFNBQVMsa0JBQWtCLENBQUMsS0FBSyxFQUFFO1VBQzFDLE1BQU0sZ0JBQWdCO1VBQ3RCLE1BQU0sS0FBSztVQUNYLGlCQUFpQixRQUFRLENBQUMseUlBQXlJLENBQUM7U0FDckssQ0FBQyxDQUFDO09BQ0o7TUFDRCxJQUFJLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsRUFBRTtRQUN0QyxNQUFNLEdBQUcsU0FBUyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7VUFDN0MsTUFBTSxnQkFBZ0I7VUFDdEIsTUFBTSxRQUFRO1VBQ2QsaUJBQWlCLFFBQVEsQ0FBQyxnSkFBZ0osQ0FBQztTQUM1SyxDQUFDLENBQUM7T0FDSjtNQUNELElBQUksUUFBUSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxFQUFFO1FBQ3BDLE1BQU0sR0FBRyxTQUFTLGtCQUFrQixDQUFDLE1BQU0sRUFBRTtVQUMzQyxNQUFNLGdCQUFnQjtVQUN0QixNQUFNLE1BQU07VUFDWixpQkFBaUIsUUFBUSxDQUFDLGdEQUFnRCxDQUFDO1NBQzVFLENBQUMsQ0FBQztPQUNKO01BQ0QsTUFBTSxHQUFHLFNBQVMsZUFBZSxDQUFDLE9BQU8sRUFBRTtRQUN6QyxRQUFRLE1BQU07VUFDWixnQkFBZ0IsYUFBYSxFQUFFLENBQUM7VUFDaEMsT0FBTyxnQkFBZ0IsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVztZQUM5RCxJQUFJLElBQUksQ0FBQyxPQUFPLFFBQVEsQ0FBQyxLQUFLLFNBQVMsRUFBRTtjQUN2QyxPQUFPLHdCQUF3QixDQUFDO2FBQ2pDLE1BQU07Y0FDTCxPQUFPLHlEQUF5RCxDQUFDO2FBQ2xFO1dBQ0YsQ0FBQyxDQUFDO1NBQ0o7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLGlCQUFpQixjQUFjLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUNqRSxJQUFJLGNBQWMsT0FBTyxLQUFLLENBQUMsSUFBSSxNQUFNLHNCQUFzQixDQUFDLHFCQUFxQixDQUFDLEVBQUU7UUFDdEYsTUFBTSxHQUFHLFNBQVMsa0JBQWtCLENBQUMsWUFBWSxFQUFFO1VBQ2pELE1BQU0sZUFBZTtVQUNyQixNQUFNLGNBQWM7VUFDcEIsaUJBQWlCLE1BQU0sY0FBYyxDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFNBQVMsTUFBTSxZQUFZLENBQUMscUJBQXFCLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1VBQzdJLFNBQVMsZ0JBQWdCLGFBQWE7U0FDdkMsQ0FBQyxDQUFDO09BQ0o7TUFDRCxNQUFNLHFCQUFxQixjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUNwRSxJQUFJLGtCQUFrQixPQUFPLEtBQUssQ0FBQyxJQUFJLE1BQU0sc0JBQXNCLENBQUMseUJBQXlCLENBQUMsRUFBRTtRQUM5RixNQUFNLEdBQUcsU0FBUyxrQkFBa0IsQ0FBQyxnQkFBZ0IsRUFBRTtVQUNyRCxNQUFNLG9CQUFvQjtVQUMxQixNQUFNLGFBQWE7VUFDbkIsaUJBQWlCLE1BQU0sY0FBYyxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLE1BQU0sWUFBWSxDQUFDLHlCQUF5QixFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztVQUN6SixTQUFTLGdCQUFnQixpQkFBaUI7U0FDM0MsQ0FBQyxDQUFDO09BQ0o7TUFDRCxJQUFJLE1BQU0sc0JBQXNCLENBQUMsd0JBQXdCLENBQUMsRUFBRTtRQUMxRCxNQUFNLEdBQUcsU0FBUyxrQkFBa0IsQ0FBQyxpQkFBaUIsRUFBRTtVQUN0RCxNQUFNLGdCQUFnQjtVQUN0QixNQUFNLGdCQUFnQjtVQUN0QixpQkFBaUIsTUFBTSxjQUFjLENBQUMsTUFBTSxFQUFFLG1CQUFtQixFQUFFLHdCQUF3QixFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1VBQzNJLFNBQVMsZ0JBQWdCLGlCQUFpQjtTQUMzQyxDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsU0FBUyxrQkFBa0IsQ0FBQyxzQkFBc0IsRUFBRTtVQUMzRCxNQUFNLGNBQWM7VUFDcEIsTUFBTSxjQUFjO1VBQ3BCLGlCQUFpQixNQUFNLGNBQWMsQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1VBQ2hKLFNBQVMsZ0JBQWdCLGlCQUFpQjtTQUMzQyxDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsU0FBUyxrQkFBa0IsQ0FBQyxzQkFBc0IsRUFBRTtVQUMzRCxNQUFNLGNBQWM7VUFDcEIsTUFBTSxjQUFjO1VBQ3BCLGlCQUFpQixNQUFNLGNBQWMsQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1VBQ2hKLFNBQVMsZ0JBQWdCLGlCQUFpQjtTQUMzQyxDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsU0FBUyxrQkFBa0IsQ0FBQywwQkFBMEIsRUFBRTtVQUMvRCxNQUFNLHVCQUF1QjtVQUM3QixNQUFNLGtCQUFrQjtVQUN4QixpQkFBaUIsTUFBTSxjQUFjLENBQUMsTUFBTSxFQUFFLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxFQUFFLGtCQUFrQixDQUFDO1VBQ3JHLFNBQVMsZ0JBQWdCLGlCQUFpQjtTQUMzQyxDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsU0FBUyxrQkFBa0IsQ0FBQyxzQkFBc0IsRUFBRTtVQUMzRCxNQUFNLG1CQUFtQjtVQUN6QixNQUFNLGNBQWM7VUFDcEIsaUJBQWlCLE1BQU0sY0FBYyxDQUFDLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxjQUFjLENBQUM7VUFDN0YsU0FBUyxnQkFBZ0IsaUJBQWlCO1NBQzNDLENBQUMsQ0FBQztPQUNKO01BQ0QseUJBQXlCLENBQUMsY0FBYyxFQUFFO1FBQ3hDLE1BQU0sZUFBZTtRQUNyQixNQUFNLGVBQWU7UUFDckIsU0FBUyx1QkFBdUI7UUFDaEMsU0FBUyxnQkFBZ0Isd0JBQXdCO09BQ2xELENBQUMsQ0FBQztNQUNILHlCQUF5QixDQUFDLGdCQUFnQixFQUFFO1FBQzFDLE1BQU0sWUFBWTtRQUNsQixNQUFNLGtCQUFrQjtRQUN4QixTQUFTLGlCQUFpQjtRQUMxQixVQUFVLGVBQWUsQ0FBQyxNQUFNLENBQUM7UUFDakMsU0FBUyxnQkFBZ0IsdUJBQXVCO09BQ2pELENBQUMsQ0FBQztNQUNILHlCQUF5QixDQUFDLGdCQUFnQixFQUFFO1FBQzFDLE1BQU0sZUFBZTtRQUNyQixNQUFNLG1CQUFtQjtRQUN6QixTQUFTLGlCQUFpQjtRQUMxQixVQUFVLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztRQUNwQyxTQUFTLGdCQUFnQix1QkFBdUI7T0FDakQsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLFNBQVMsVUFBVTtNQUN2QixNQUFNLG1CQUFtQixtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNyRCxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDakIsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDekIsWUFBWSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO01BQ3ZDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztNQUNyQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDckIsQ0FBQztJQUNGLElBQUksV0FBVyxNQUFNO01BQ25CLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztLQUMvQixDQUFDOztJQUVGLFFBQVEsRUFBRSxDQUFDOztDQUVkLEdBQUcsQ0FBQzs7OztBQ3I0R0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7Ozs7QUFJQSxDQUFDLFlBQVk7SUFDVCxZQUFZLENBQUM7O0lBRWIsTUFBTSxtQkFBbUIsTUFBTSxlQUFlLENBQUM7SUFDL0MsTUFBTSxXQUFXLCtCQUErQjtNQUM5QyxJQUFJLEVBQUUsQ0FBQztNQUNQLElBQUksU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLFVBQVUsQ0FBQyxFQUFFO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDO09BQ2IsTUFBTTtRQUNMLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssTUFBTSxXQUFXLEtBQUssQ0FBQztPQUNqRztLQUNGLENBQUM7SUFDRixNQUFNLFNBQVMsS0FBSztNQUNsQixNQUFNLElBQUksT0FBTyxDQUFDLENBQUM7TUFDbkIsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ2QsT0FBTyxNQUFNLENBQUM7T0FDZixNQUFNLElBQUksQ0FBQyxLQUFLLFFBQVEsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUM3QyxPQUFPLE9BQU8sQ0FBQztPQUNoQixNQUFNLElBQUksQ0FBQyxLQUFLLFFBQVEsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxjQUFjLEtBQUssY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDdEYsT0FBTyxRQUFRLENBQUM7T0FDakIsTUFBTTtRQUNMLE9BQU8sQ0FBQyxDQUFDO09BQ1Y7S0FDRixDQUFDO0lBQ0YsTUFBTSxXQUFXLFFBQVEsU0FBUyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDO0lBQ3pELE1BQU0sZUFBZSxRQUFRLFNBQVMsT0FBTyxLQUFLLEtBQUssSUFBSSxDQUFDO0lBQzVELE1BQU0sT0FBTyxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixNQUFNLE9BQU8sd0JBQXdCLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxjQUFjLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0lBQ2xJLE1BQU0sV0FBVyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEMsTUFBTSxXQUFXLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxNQUFNLGdCQUFnQixTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxNQUFNLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLE1BQU0sWUFBWSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUMsTUFBTSxjQUFjLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwQyxNQUFNLGFBQWEsS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxTQUFTLENBQUM7SUFDdEQsTUFBTSxnQkFBZ0IsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxNQUFNLGFBQWEsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sV0FBVyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEMsTUFBTSxZQUFZLGlCQUFpQjtNQUNqQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNsQixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1VBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbkIsT0FBTyxLQUFLLENBQUM7V0FDZDtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7T0FDYjtNQUNELE9BQU8sS0FBSyxDQUFDO0tBQ2QsQ0FBQzs7SUFFRixNQUFNLE9BQU8sTUFBTTtLQUNsQixDQUFDO0lBQ0YsTUFBTSxRQUFRLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQztJQUM3QixNQUFNLFVBQVUsWUFBWTtNQUMxQixPQUFPLENBQUMsT0FBTyxLQUFLO1FBQ2xCLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO09BQ2pDLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxXQUFXLGNBQWMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsTUFBTSxhQUFhLFNBQVM7TUFDMUIsT0FBTyxNQUFNO1FBQ1gsT0FBTyxLQUFLLENBQUM7T0FDZCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sV0FBVyxLQUFLO01BQ3BCLE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0sZUFBZSxVQUFVO01BQzdCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNoQixDQUFDO0lBQ0YsbUJBQW1CLGNBQWMsRUFBRTtNQUNqQyxPQUFPLENBQUMsV0FBVyxLQUFLO1FBQ3RCLE1BQU0sTUFBTSxXQUFXLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztPQUM1QixDQUFDO0tBQ0g7SUFDRCxNQUFNLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLE1BQU0sTUFBTSxPQUFPO01BQ2pCLE9BQU8sTUFBTTtRQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDdEIsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFVBQVUsS0FBSztNQUNuQixPQUFPLENBQUMsRUFBRSxDQUFDO0tBQ1osQ0FBQztJQUNGLE1BQU0sUUFBUSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsTUFBTSxTQUFTLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7SUFFaEMsZUFBZTtNQUNiLFdBQVcsYUFBYTtRQUN0QixJQUFJLElBQUksR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7T0FDcEI7TUFDRCxXQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDbEM7TUFDRCxXQUFXLEdBQUc7UUFDWixPQUFPLFFBQVEsY0FBYyxDQUFDO09BQy9CO01BQ0QsSUFBSSxpQkFBaUI7UUFDbkIsSUFBSSxJQUFJLElBQUksRUFBRTtVQUNaLE9BQU8sTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLENBQUM7U0FDM0IsTUFBTTtVQUNMLE9BQU8sTUFBTSxFQUFFLENBQUM7U0FDakI7T0FDRjtNQUNELE1BQU0sR0FBRztRQUNQLE9BQU8sSUFBSSxJQUFJLENBQUM7T0FDakI7TUFDRCxNQUFNLEdBQUc7UUFDUCxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUM7T0FDbEI7TUFDRCxHQUFHLFNBQVM7UUFDVixJQUFJLElBQUksSUFBSSxFQUFFO1VBQ1osT0FBTyxRQUFRLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQzFDLE1BQU07VUFDTCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7U0FDeEI7T0FDRjtNQUNELElBQUksU0FBUztRQUNYLElBQUksSUFBSSxJQUFJLEVBQUU7VUFDWixPQUFPLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDO1NBQzNCLE1BQU07VUFDTCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7U0FDeEI7T0FDRjtNQUNELE1BQU0sWUFBWTtRQUNoQixPQUFPLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDO09BQzFDO01BQ0QsTUFBTSxZQUFZO1FBQ2hCLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQztPQUMzQztNQUNELE1BQU0sWUFBWTtRQUNoQixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUU7VUFDdEMsT0FBTyxJQUFJLENBQUM7U0FDYixNQUFNO1VBQ0wsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO1NBQ3hCO09BQ0Y7TUFDRCxLQUFLLGNBQWM7UUFDakIsT0FBTyxJQUFJLElBQUksR0FBRyxJQUFJLE1BQU0sR0FBRyxXQUFXLENBQUM7T0FDNUM7TUFDRCxFQUFFLGNBQWM7UUFDZCxPQUFPLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxXQUFXLENBQUM7T0FDdEM7TUFDRCxVQUFVLFFBQVE7UUFDaEIsT0FBTyxJQUFJLElBQUksR0FBRyxJQUFJLE1BQU0sR0FBRyxLQUFLLEVBQUUsQ0FBQztPQUN4QztNQUNELE9BQU8sUUFBUTtRQUNiLE9BQU8sSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssRUFBRSxDQUFDO09BQ2xDO01BQ0QsUUFBUSxVQUFVO1FBQ2hCLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRTtVQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxDQUFDLEdBQUcsT0FBTyxHQUFHLHlCQUF5QixDQUFDLENBQUM7U0FDL0YsTUFBTTtVQUNMLE9BQU8sSUFBSSxNQUFNLENBQUM7U0FDbkI7T0FDRjtNQUNELFdBQVcsUUFBUTtRQUNqQixPQUFPLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3RFO01BQ0QsU0FBUyxHQUFHO1FBQ1YsT0FBTyxJQUFJLElBQUksR0FBRyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7T0FDckM7TUFDRCxjQUFjLEdBQUc7UUFDZixPQUFPLElBQUksTUFBTSxDQUFDO09BQ25CO01BQ0QsSUFBSSxTQUFTO1FBQ1gsSUFBSSxJQUFJLElBQUksRUFBRTtVQUNaLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDO1NBQ3BCO09BQ0Y7TUFDRCxPQUFPLEdBQUc7UUFDUixPQUFPLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7T0FDckM7TUFDRCxRQUFRLEdBQUc7UUFDVCxPQUFPLElBQUksSUFBSSxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztPQUN0RDtLQUNGO0lBQ0QsUUFBUSxjQUFjLEdBQUcsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7O0lBRTdDLE1BQU0sY0FBYyxLQUFLLFVBQVUsTUFBTSxDQUFDO0lBQzFDLE1BQU0sZ0JBQWdCLEtBQUssVUFBVSxRQUFRLENBQUM7SUFDOUMsTUFBTSxhQUFhLEtBQUssVUFBVSxLQUFLLENBQUM7SUFDeEMsTUFBTSxhQUFhLFdBQVcsYUFBYSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sVUFBVSxXQUFXO01BQ3pCLE1BQU0sSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLEdBQUcsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdEQsQ0FBQztJQUNGLE1BQU0sYUFBYSxXQUFXLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckQsTUFBTSxTQUFTLGNBQWM7TUFDM0IsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM3QyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtVQUNkLE9BQU8sSUFBSSxDQUFDO1NBQ2I7T0FDRjtNQUNELE9BQU8sS0FBSyxDQUFDO0tBQ2QsQ0FBQztJQUNGLE1BQU0sVUFBVSxZQUFZO01BQzFCLE1BQU0sSUFBSSxFQUFFLENBQUM7TUFDYixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM1QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUNkO01BQ0QsT0FBTyxDQUFDLENBQUM7S0FDVixDQUFDO0lBQ0YsTUFBTSxVQUFVLGlCQUFpQjtNQUMvQixNQUFNLElBQUksRUFBRSxDQUFDO01BQ2IsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRTtRQUMzQyxNQUFNLElBQUksV0FBVyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDWDtNQUNELE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0sUUFBUSxXQUFXO01BQ3ZCLE1BQU0sTUFBTSxFQUFFLE9BQU8sQ0FBQztNQUN0QixNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDekIsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDNUIsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUNoQjtNQUNELE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0sU0FBUyxXQUFXO01BQ3hCLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0MsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ1Q7S0FDRixDQUFDO0lBQ0YsTUFBTSxRQUFRLFdBQVc7TUFDdkIsS0FBSyxJQUFJLElBQUksRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdkMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ1Q7S0FDRixDQUFDO0lBQ0YsTUFBTSxjQUFjLGNBQWM7TUFDaEMsTUFBTSxPQUFPLEVBQUUsQ0FBQztNQUNoQixNQUFNLE9BQU8sRUFBRSxDQUFDO01BQ2hCLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0MsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixNQUFNLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ2I7TUFDRCxPQUFPO1FBQ0wsSUFBSTtRQUNKLElBQUk7T0FDTCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sV0FBVyxjQUFjO01BQzdCLE1BQU0sSUFBSSxFQUFFLENBQUM7TUFDYixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzdDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO1VBQ2QsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDWDtPQUNGO01BQ0QsT0FBTyxDQUFDLENBQUM7S0FDVixDQUFDO0lBQ0YsTUFBTSxRQUFRLGdCQUFnQjtNQUM1QixLQUFLLENBQUMsRUFBRSxFQUFFLFVBQVU7UUFDbEIsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUNwQixDQUFDLENBQUM7TUFDSCxPQUFPLEdBQUcsQ0FBQztLQUNaLENBQUM7SUFDRixNQUFNLFFBQVEsZ0JBQWdCO01BQzVCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsVUFBVTtRQUNuQixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3BCLENBQUMsQ0FBQztNQUNILE9BQU8sR0FBRyxDQUFDO0tBQ1osQ0FBQztJQUNGLE1BQU0sWUFBWSxxQkFBcUI7TUFDckMsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM3QyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtVQUNkLE9BQU8sUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7VUFDdEIsTUFBTTtTQUNQO09BQ0Y7TUFDRCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7S0FDeEIsQ0FBQztJQUNGLE1BQU0sU0FBUyxjQUFjO01BQzNCLE9BQU8sU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDbkMsQ0FBQztJQUNGLE1BQU0sY0FBYyxjQUFjO01BQ2hDLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0MsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7VUFDZCxPQUFPLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pCO09BQ0Y7TUFDRCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7S0FDeEIsQ0FBQztJQUNGLE1BQU0sVUFBVSxNQUFNO01BQ3BCLE1BQU0sSUFBSSxFQUFFLENBQUM7TUFDYixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7VUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLEdBQUcsNEJBQTRCLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDOUU7UUFDRCxVQUFVLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDNUI7TUFDRCxPQUFPLENBQUMsQ0FBQztLQUNWLENBQUM7SUFDRixNQUFNLFNBQVMsV0FBVyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sU0FBUyxjQUFjO01BQzNCLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDN0MsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO1VBQ3ZCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7T0FDRjtNQUNELE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQztJQUNGLE1BQU0sVUFBVSxNQUFNO01BQ3BCLE1BQU0sSUFBSSxXQUFXLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDbEMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztNQUNaLE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0sYUFBYSxZQUFZLFFBQVEsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRSxNQUFNLGNBQWMsV0FBVztNQUM3QixNQUFNLElBQUksRUFBRSxDQUFDO01BQ2IsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM3QyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3hCO01BQ0QsT0FBTyxDQUFDLENBQUM7S0FDVixDQUFDO0lBQ0YsTUFBTSxTQUFTLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixNQUFNLE9BQU8sb0JBQW9CO01BQy9CLE1BQU0sT0FBTyxXQUFXLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDckMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7TUFDdEIsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxRQUFRLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLEdBQUcsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztJQUMxRixNQUFNLE9BQU8sTUFBTSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sU0FBUyxNQUFNLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUMsTUFBTSxPQUFPLFVBQVUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssS0FBSyxHQUFHLEtBQUssV0FBVyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUUsTUFBTSxVQUFVLFlBQVk7TUFDMUIsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNuQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUU7VUFDZCxPQUFPLENBQUMsQ0FBQztTQUNWO09BQ0Y7TUFDRCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7S0FDeEIsQ0FBQzs7SUFFRixNQUFNLE9BQU8sTUFBTSxLQUFLLENBQUM7SUFDekIsTUFBTSxtQkFBbUIsTUFBTSxlQUFlLENBQUM7SUFDL0MsTUFBTSxPQUFPLFlBQVk7TUFDdkIsTUFBTSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUN4QixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2hELE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ1Q7S0FDRixDQUFDO0lBQ0YsTUFBTSxRQUFRLFlBQVk7TUFDeEIsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLFdBQVc7UUFDOUIsR0FBRyxDQUFDO1FBQ0osR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztPQUNYLENBQUMsQ0FBQyxDQUFDO0tBQ0wsQ0FBQztJQUNGLE1BQU0sV0FBVyxZQUFZO01BQzNCLE1BQU0sSUFBSSxFQUFFLENBQUM7TUFDYixJQUFJLENBQUMsR0FBRyxFQUFFLFVBQVU7UUFDbEIsTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUM7T0FDdEIsQ0FBQyxDQUFDO01BQ0gsT0FBTyxDQUFDLENBQUM7S0FDVixDQUFDO0lBQ0YsTUFBTSxTQUFTLEtBQUssVUFBVTtNQUM1QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0saUJBQWlCLGdDQUFnQztNQUNyRCxJQUFJLENBQUMsR0FBRyxFQUFFLFVBQVU7UUFDbEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3ZDLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFdBQVcsZUFBZTtNQUM5QixNQUFNLElBQUksRUFBRSxDQUFDO01BQ2IsTUFBTSxJQUFJLEVBQUUsQ0FBQztNQUNiLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNoRCxPQUFPO1FBQ0wsQ0FBQztRQUNELENBQUM7T0FDRixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sV0FBVyxlQUFlO01BQzlCLE1BQU0sSUFBSSxFQUFFLENBQUM7TUFDYixjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDM0MsT0FBTyxDQUFDLENBQUM7S0FDVixDQUFDO0lBQ0YsTUFBTSxhQUFhLFlBQVk7TUFDN0IsTUFBTSxJQUFJLEVBQUUsQ0FBQztNQUNiLElBQUksQ0FBQyxHQUFHLEVBQUUsaUJBQWlCO1FBQ3pCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztPQUN4QixDQUFDLENBQUM7TUFDSCxPQUFPLENBQUMsQ0FBQztLQUNWLENBQUM7SUFDRixNQUFNLFNBQVMsZUFBZTtNQUM1QixNQUFNLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ3hCLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxNQUFNLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7VUFDbkIsT0FBTyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6QjtPQUNGO01BQ0QsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO0tBQ3hCLENBQUM7SUFDRixNQUFNLFNBQVMsT0FBTztNQUNwQixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDbEMsQ0FBQztJQUNGLE1BQU0sUUFBUSxjQUFjO01BQzFCLE9BQU8sS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO0tBQ3BFLENBQUM7SUFDRixNQUFNLFFBQVEsY0FBYyxnQkFBZ0IsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM1RCxNQUFNLG9CQUFvQixjQUFjLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDOztJQUV2RyxNQUFNLE9BQU8sV0FBVyxhQUFhLFlBQVksS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRyxNQUFNLFNBQVMsV0FBVyxhQUFhLFlBQVksS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxFQUFFLElBQUksR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3hILE1BQU0sTUFBTSxPQUFPO01BQ2pCLE1BQU0sSUFBSSxFQUFFLENBQUM7TUFDYixNQUFNLE9BQU8sS0FBSztRQUNoQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUNYLENBQUM7TUFDRixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ25CO01BQ0QsT0FBTyxDQUFDLENBQUM7S0FDVixDQUFDO0lBQ0YsTUFBTSxXQUFXLE9BQU87TUFDdEIsTUFBTSxJQUFJLEVBQUUsQ0FBQztNQUNiLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbkMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUU7VUFDZCxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7U0FDdEIsTUFBTTtVQUNMLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztTQUN4QjtPQUNGO01BQ0QsT0FBTyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6QixDQUFDO0lBQ0YsTUFBTSxRQUFRLGVBQWUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7SUFDM0gsTUFBTSxRQUFRLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7SUFDN0osTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7SUFDaEcsTUFBTSxTQUFTLFVBQVUsQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7O0lBRWhFLE1BQU0sV0FBVyxpQkFBaUI7TUFDaEMsT0FBTyxHQUFHLEdBQUcsTUFBTSxDQUFDO0tBQ3JCLENBQUM7SUFDRixNQUFNLGtCQUFrQixtQkFBbUI7TUFDekMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUNoQyxDQUFDOztJQUVGLE1BQU0sYUFBYSx3QkFBd0IsTUFBTSxLQUFLLEVBQUUsSUFBSSxHQUFHLE9BQU8sSUFBSSxNQUFNLE9BQU8sSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssTUFBTSxDQUFDO0lBQy9JLE1BQU0sZ0JBQWdCLGlCQUFpQjtNQUNyQyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsZUFBZSxDQUFDLEdBQUcsRUFBRSxNQUFNLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUM1RSxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsaUJBQWlCO01BQ3RDLE9BQU8sUUFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUM1RCxDQUFDO0lBQ0YsTUFBTSxhQUFhLGNBQWMsUUFBUSxDQUFDLFVBQVU7TUFDbEQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztNQUN2QyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUNkLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxPQUFPLElBQUksR0FBRyxDQUFDO09BQzdELE1BQU07UUFDTCxPQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0YsQ0FBQztJQUNGLE1BQU0sYUFBYSxpQkFBaUI7TUFDbEMsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztLQUNuQyxDQUFDO0lBQ0YsTUFBTSxXQUFXLGlCQUFpQjtNQUNoQyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLENBQUM7S0FDNUQsQ0FBQztJQUNGLE1BQU0sUUFBUSxLQUFLLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sU0FBUyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbkMsTUFBTSxhQUFhLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sVUFBVSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVwQyxNQUFNLGdCQUFnQixPQUFPLEdBQUcsTUFBTSxLQUFLLFNBQVMsSUFBSSxVQUFVLENBQUMsR0FBRyxNQUFNLGlCQUFpQixDQUFDLENBQUM7O0lBRS9GLE1BQU0sYUFBYSxpQkFBaUI7TUFDbEMsTUFBTSxNQUFNLEtBQUssSUFBSSxRQUFRLENBQUM7TUFDOUIsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQ3JDLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQztNQUNyQixJQUFJLENBQUMsR0FBRyxjQUFjLEVBQUUsSUFBSSxHQUFHLFdBQVcsT0FBTyxHQUFHLENBQUMsRUFBRTtRQUNyRCxNQUFNLFVBQVUsdUNBQXVDLENBQUM7UUFDeEQsT0FBTyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7T0FDMUI7TUFDRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25DLENBQUM7SUFDRixNQUFNLFVBQVUsZ0JBQWdCO01BQzlCLE1BQU0sTUFBTSxLQUFLLElBQUksUUFBUSxDQUFDO01BQzlCLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNwQyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QixDQUFDO0lBQ0YsTUFBTSxXQUFXLGlCQUFpQjtNQUNoQyxNQUFNLE1BQU0sS0FBSyxJQUFJLFFBQVEsQ0FBQztNQUM5QixNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDdEMsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDdEIsQ0FBQztJQUNGLE1BQU0sVUFBVSxRQUFRO01BQ3RCLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1FBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztPQUNyRDtNQUNELE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO0tBQ3RCLENBQUM7SUFDRixNQUFNLFlBQVksa0JBQWtCLFFBQVEsS0FBSyxDQUFDLE1BQU0sSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xHLE1BQU0sZUFBZTtNQUNuQixVQUFVLFVBQVU7TUFDcEIsT0FBTztNQUNQLFFBQVE7TUFDUixPQUFPO01BQ1AsU0FBUztLQUNWLENBQUM7O0lBRUYsTUFBTSxTQUFTLE9BQU8sTUFBTSxLQUFLLFdBQVcsR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7O0lBRW5GLE1BQU0sU0FBUyxrQkFBa0I7TUFDL0IsSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO01BQy9ELEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxPQUFPLElBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ3RFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ2pCO01BQ0QsT0FBTyxDQUFDLENBQUM7S0FDVixDQUFDO0lBQ0YsTUFBTSxVQUFVLGNBQWM7TUFDNUIsTUFBTSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQzNCLE9BQU8sTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztLQUM3QixDQUFDOztJQUVGLE1BQU0sU0FBUyxpQkFBaUI7TUFDOUIsT0FBTyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzdCLENBQUM7SUFDRixNQUFNLGFBQWEsaUJBQWlCO01BQ2xDLE1BQU0sU0FBUyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQ25DLElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFO1FBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLGdDQUFnQyxDQUFDLENBQUM7T0FDMUQ7TUFDRCxPQUFPLE1BQU0sQ0FBQztLQUNmLENBQUM7O0lBRUYsTUFBTSxtQkFBbUIsTUFBTSxlQUFlLENBQUM7SUFDL0MsTUFBTSxrQkFBa0IsU0FBUztNQUMvQixPQUFPLFVBQVUsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDekMsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLEtBQUs7TUFDekIsTUFBTSxRQUFRLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUN0RCxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxlQUFlLENBQUMsS0FBSyxDQUFDLFVBQVUsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLGtCQUFrQixLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQztLQUM1SSxDQUFDOztJQUVGLE1BQU0sV0FBVyxDQUFDLENBQUM7SUFDbkIsTUFBTSxvQkFBb0IsRUFBRSxDQUFDO0lBQzdCLE1BQU0sVUFBVSxDQUFDLENBQUM7SUFDbEIsTUFBTSxPQUFPLENBQUMsQ0FBQzs7SUFFZixNQUFNLFNBQVMsV0FBVztNQUN4QixNQUFNLElBQUksT0FBTyxJQUFJLFNBQVMsQ0FBQztNQUMvQixPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7S0FDeEIsQ0FBQztJQUNGLE1BQU0sU0FBUyxXQUFXLE9BQU8sSUFBSSxTQUFTLENBQUM7SUFDL0MsTUFBTSxTQUFTLEtBQUssV0FBVyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JELE1BQU0sZ0JBQWdCLFdBQVcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLGFBQWEsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO0lBQ3BGLE1BQU0sY0FBYyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEMsTUFBTSxTQUFTLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixNQUFNLGFBQWEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0scUJBQXFCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sUUFBUSxPQUFPLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUM7O0lBRTlELE1BQU0sS0FBSyx1QkFBdUI7TUFDaEMsTUFBTSxNQUFNLE9BQU8sSUFBSSxDQUFDO01BQ3hCLElBQUksR0FBRyxTQUFTLEtBQUssT0FBTyxFQUFFO1FBQzVCLE9BQU8sS0FBSyxDQUFDO09BQ2QsTUFBTTtRQUNMLE1BQU0sT0FBTyxHQUFHLENBQUM7UUFDakIsSUFBSSxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUU7VUFDOUIsT0FBTyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMvQixNQUFNLElBQUksSUFBSSxrQkFBa0IsS0FBSyxTQUFTLEVBQUU7VUFDL0MsT0FBTyxJQUFJLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3pDLE1BQU0sSUFBSSxJQUFJLHNCQUFzQixLQUFLLFNBQVMsRUFBRTtVQUNuRCxPQUFPLElBQUksc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDN0MsTUFBTSxJQUFJLElBQUksbUJBQW1CLEtBQUssU0FBUyxFQUFFO1VBQ2hELE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMxQyxNQUFNO1VBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1NBQ25EO09BQ0Y7S0FDRixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsT0FBTyxHQUFHLFNBQVMsS0FBSyxPQUFPLElBQUksR0FBRyxTQUFTLEtBQUssUUFBUSxJQUFJLEdBQUcsU0FBUyxLQUFLLGlCQUFpQixJQUFJLEdBQUcsa0JBQWtCLEtBQUssQ0FBQyxDQUFDO0lBQ3pKLE1BQU0sUUFBUSxxQkFBcUI7TUFDakMsTUFBTSxPQUFPLEtBQUssS0FBSyxTQUFTLEdBQUcsUUFBUSxHQUFHLEtBQUssSUFBSSxDQUFDO01BQ3hELE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxZQUFZLFFBQVEsQ0FBQyxDQUFDO0tBQ2pHLENBQUM7SUFDRixNQUFNLE1BQU0scUJBQXFCO01BQy9CLE1BQU0sT0FBTyxLQUFLLEtBQUssU0FBUyxHQUFHLFFBQVEsR0FBRyxLQUFLLElBQUksQ0FBQztNQUN4RCxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxHQUFHLFFBQVEsS0FBSyxDQUFDLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLFFBQVEsQ0FBQyxDQUFDO0tBQ3ZILENBQUM7O0lBRUYsTUFBTSxLQUFLLFlBQVksRUFBRSxJQUFJLEtBQUssRUFBRSxJQUFJLENBQUM7SUFDekMsTUFBTSxXQUFXLFlBQVk7TUFDM0IsTUFBTSxLQUFLLEVBQUUsSUFBSSxDQUFDO01BQ2xCLE1BQU0sS0FBSyxFQUFFLElBQUksQ0FBQztNQUNsQixPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQzVDLENBQUM7O0lBRUYsTUFBTSxVQUFVLFdBQVcsWUFBWSxRQUFRLENBQUMsT0FBTyxJQUFJLGNBQWMsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sa0JBQWtCLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEUsTUFBTSxrQkFBa0IsV0FBVyxZQUFZLFFBQVEsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksZ0JBQWdCLENBQUMsQ0FBQztJQUN0RyxNQUFNLGNBQWMsV0FBVyxZQUFZLFFBQVEsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksWUFBWSxDQUFDLENBQUM7SUFDOUYsTUFBTSxTQUFTLFdBQVcsUUFBUSxLQUFLLENBQUMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxRQUFRLENBQUMsQ0FBQztJQUMxRixNQUFNLGFBQWEsV0FBVyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUMsTUFBTSxnQkFBZ0IsV0FBVyxRQUFRLEtBQUssQ0FBQyxPQUFPLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLFFBQVEsQ0FBQyxDQUFDO0lBQ3BHLE1BQU0sVUFBVSxxQkFBcUI7TUFDbkMsTUFBTSxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDO01BQ2pELElBQUksTUFBTSxPQUFPLElBQUksQ0FBQztNQUN0QixNQUFNLE1BQU0sRUFBRSxDQUFDO01BQ2YsT0FBTyxHQUFHLFdBQVcsS0FBSyxJQUFJLElBQUksR0FBRyxXQUFXLEtBQUssU0FBUyxFQUFFO1FBQzlELE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQztRQUNqQyxNQUFNLElBQUksWUFBWSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7VUFDcEIsTUFBTTtTQUNQLE1BQU07VUFDTCxNQUFNLFNBQVMsQ0FBQztTQUNqQjtPQUNGO01BQ0QsT0FBTyxHQUFHLENBQUM7S0FDWixDQUFDO0lBQ0YsTUFBTSxlQUFlLFdBQVcsUUFBUSxLQUFLLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxRQUFRLENBQUMsQ0FBQztJQUNsRyxNQUFNLGNBQWMsV0FBVyxRQUFRLEtBQUssQ0FBQyxPQUFPLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLFFBQVEsQ0FBQyxDQUFDO0lBQ2hHLE1BQU0sV0FBVyxXQUFXLEtBQUssQ0FBQyxPQUFPLElBQUksV0FBVyxFQUFFLFlBQVksUUFBUSxDQUFDLENBQUM7SUFDaEYsTUFBTSxVQUFVLG9CQUFvQjtNQUNsQyxNQUFNLEtBQUssT0FBTyxJQUFJLFdBQVcsQ0FBQztNQUNsQyxPQUFPLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxRQUFRLENBQUMsQ0FBQztLQUMzRCxDQUFDO0lBQ0YsTUFBTSxhQUFhLFdBQVcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRCxNQUFNLE9BQU8sc0JBQXNCO01BQ2pDLE9BQU87TUFDUCxNQUFNO0tBQ1AsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxPQUFPLHFCQUFxQjtNQUNoQyxNQUFNLEtBQUssUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQzdCLE9BQU8sRUFBRSxPQUFPLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxFQUFFLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDMUYsQ0FBQzs7SUFFRixNQUFNLGVBQWUsT0FBTyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxhQUFhLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDO0lBQ25GLE1BQU0sWUFBWSxVQUFVLENBQUMsT0FBTyxVQUFVLGFBQWEsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLFVBQVUsWUFBWSxDQUFDLENBQUM7SUFDdkcsTUFBTSxjQUFjLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQyxNQUFNLGNBQWMsU0FBUyxHQUFHLEtBQUssWUFBWSxRQUFRLENBQUMsQ0FBQyxJQUFJLFlBQVksRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDO0lBQ2pHLE1BQU0sc0JBQXNCLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxZQUFZLFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7SUFDakgsTUFBTSxpQkFBaUIsS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3RELE1BQU0sZ0JBQWdCLEtBQUs7TUFDekIsTUFBTSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUN6QixPQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO0tBQzdELENBQUM7SUFDRixNQUFNLGdCQUFnQixLQUFLLFlBQVksUUFBUSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztJQUM1RCxNQUFNLHlCQUF5QixTQUFTO01BQ3RDLElBQUksV0FBVyxFQUFFLElBQUksYUFBYSxDQUFDLEtBQUssT0FBTyxDQUFDLEVBQUU7UUFDaEQsTUFBTSxLQUFLLFlBQVksUUFBUSxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUM7UUFDOUMsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUksZ0JBQWdCLENBQUMsRUFBRSxDQUFDLEVBQUU7VUFDM0MsSUFBSSxLQUFLLFNBQVMsSUFBSSxLQUFLLGFBQWEsRUFBRTtZQUN4QyxNQUFNLGVBQWUsS0FBSyxhQUFhLEVBQUUsQ0FBQztZQUMxQyxJQUFJLFlBQVksRUFBRTtjQUNoQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUMzQjtXQUNGO1NBQ0Y7T0FDRjtNQUNELE9BQU8sUUFBUSxLQUFLLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQztLQUNwQyxDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsV0FBVyxhQUFhLENBQUMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxDQUFDOztJQUUxRSxNQUFNLFNBQVMsV0FBVztNQUN4QixNQUFNLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sSUFBSSxXQUFXLEdBQUcsT0FBTyxJQUFJLENBQUM7TUFDbkUsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxjQUFjLEtBQUssSUFBSSxFQUFFO1FBQ25FLE9BQU8sS0FBSyxDQUFDO09BQ2Q7TUFDRCxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUM7TUFDOUIsT0FBTyxhQUFhLENBQUMsWUFBWSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7S0FDckgsQ0FBQztJQUNGLE1BQU0sT0FBTyxNQUFNLE9BQU8sQ0FBQyxZQUFZLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzNELE1BQU0sVUFBVSxPQUFPO01BQ3JCLE1BQU0sSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDO01BQ3ZCLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO1FBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztPQUM5QztNQUNELE9BQU8sWUFBWSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDaEMsQ0FBQzs7SUFFRixNQUFNLFNBQVMscUJBQXFCO01BQ2xDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDMUQsR0FBRyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQztPQUNuQyxNQUFNO1FBQ0wsT0FBTyxNQUFNLENBQUMscUNBQXFDLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztPQUNuRDtLQUNGLENBQUM7SUFDRixNQUFNLFFBQVEseUJBQXlCO01BQ3JDLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDakMsQ0FBQztJQUNGLE1BQU0sV0FBVyxvQkFBb0I7TUFDbkMsTUFBTSxNQUFNLE9BQU8sSUFBSSxDQUFDO01BQ3hCLElBQUksQ0FBQyxLQUFLLEVBQUUsVUFBVTtRQUNwQixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUNuQixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxRQUFRLGtCQUFrQjtNQUM5QixNQUFNLElBQUksT0FBTyxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUN4QyxPQUFPLENBQUMsS0FBSyxJQUFJLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQztLQUNuQyxDQUFDO0lBQ0YsTUFBTSxTQUFTLGtCQUFrQixRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEUsTUFBTSxRQUFRLGtCQUFrQjtNQUM5QixNQUFNLE1BQU0sT0FBTyxJQUFJLENBQUM7TUFDeEIsT0FBTyxHQUFHLElBQUksR0FBRyxhQUFhLEdBQUcsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0tBQ2hFLENBQUM7SUFDRixNQUFNLFdBQVcsa0JBQWtCO01BQ2pDLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNsQyxDQUFDO0lBQ0YsTUFBTSxVQUFVLFdBQVcsS0FBSyxDQUFDLE9BQU8sSUFBSSxXQUFXLEVBQUUsZUFBZTtNQUN0RSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQztNQUM1QixPQUFPLEdBQUcsQ0FBQztLQUNaLEVBQUUsRUFBRSxDQUFDLENBQUM7O0lBRVAsTUFBTSxjQUFjLDBCQUEwQjtNQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3BCLE9BQU8sTUFBTSxDQUFDLG9DQUFvQyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0RyxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixHQUFHLEtBQUssQ0FBQyxDQUFDO09BQ3pEO01BQ0QsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDdEIsR0FBRyxNQUFNLFlBQVksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDeEM7S0FDRixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsbUJBQW1CO01BQ3hDLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3RCLEdBQUcsTUFBTSxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7T0FDcEM7S0FDRixDQUFDO0lBQ0YsTUFBTSxRQUFRLDhCQUE4QjtNQUMxQyxNQUFNLE1BQU0sT0FBTyxJQUFJLENBQUM7TUFDeEIsV0FBVyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDbkMsQ0FBQztJQUNGLE1BQU0sU0FBUyxrQkFBa0I7TUFDL0IsTUFBTSxNQUFNLE9BQU8sSUFBSSxDQUFDO01BQ3hCLElBQUksQ0FBQyxHQUFHLEVBQUUsVUFBVTtRQUNsQixXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUN4QixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxhQUFhLGtCQUFrQjtNQUNuQyxNQUFNLE1BQU0sT0FBTyxJQUFJLENBQUM7TUFDeEIsSUFBSSxDQUFDLEdBQUcsRUFBRSxVQUFVO1FBQ2xCLENBQUMsS0FBSyxDQUFDLE1BQU07VUFDWCxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3hCLEVBQUUsU0FBUztVQUNWLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzVCLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFFBQVEsdUJBQXVCO01BQ25DLE1BQU0sTUFBTSxPQUFPLElBQUksQ0FBQztNQUN4QixNQUFNLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUM1QyxNQUFNLElBQUksTUFBTSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUM1QyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUM1RSxDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsbUJBQW1CLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLE1BQU0saUJBQWlCLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzVHLE1BQU0sU0FBUyx1QkFBdUI7TUFDcEMsTUFBTSxNQUFNLE9BQU8sSUFBSSxDQUFDO01BQ3hCLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDN0MsT0FBTyxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDckQsQ0FBQztJQUNGLE1BQU0sWUFBWSxXQUFXO01BQzNCLE1BQU0sTUFBTSxFQUFFLENBQUM7TUFDZixNQUFNLE1BQU0sT0FBTyxJQUFJLENBQUM7TUFDeEIsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDdEIsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLE1BQU0sT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO1VBQ3pDLE1BQU0sV0FBVyxHQUFHLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ25DLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNyQztPQUNGO01BQ0QsT0FBTyxHQUFHLENBQUM7S0FDWixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsMEJBQTBCO01BQy9DLE1BQU0sVUFBVSxZQUFZLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUMxQyxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztNQUNoQyxNQUFNLFFBQVEsTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztNQUN4QyxPQUFPLEtBQUssT0FBTyxFQUFFLENBQUM7S0FDdkIsQ0FBQztJQUNGLE1BQU0sV0FBVyx1QkFBdUI7TUFDdEMsTUFBTSxNQUFNLE9BQU8sSUFBSSxDQUFDO01BQ3hCLGNBQWMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDOUIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ2xELFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7T0FDNUI7S0FDRixDQUFDO0lBQ0YsTUFBTSxTQUFTLEtBQUssQ0FBQyxJQUFJLFlBQVksQ0FBQzs7SUFFdEMsTUFBTSxZQUFZLHFCQUFxQjtNQUNyQyxNQUFNLE1BQU0sZ0JBQWdCO1FBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRTtVQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksR0FBRyx1REFBdUQsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNyRjtRQUNELE1BQU0sTUFBTSxPQUFPLElBQUksQ0FBQztRQUN4QixJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRTtVQUN0QixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQzVCO09BQ0YsQ0FBQztNQUNGLE1BQU0sTUFBTSxXQUFXO1FBQ3JCLE1BQU0sSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7VUFDeEIsTUFBTSxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7VUFDakMsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdCO1FBQ0QsT0FBTyxDQUFDLENBQUM7T0FDVixDQUFDO01BQ0YsTUFBTSxXQUFXLEdBQUcsQ0FBQztNQUNyQixNQUFNLFlBQVkseUJBQXlCLEtBQUssQ0FBQyxVQUFVLEVBQUUsbUJBQW1CO1FBQzlFLE1BQU0sTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO09BQ3pDLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDTixNQUFNLE1BQU0sZ0NBQWdDO1FBQzFDLE1BQU0sdUJBQXVCLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDNUQsTUFBTSxjQUFjLEtBQUssR0FBRyxvQkFBb0IsR0FBRyxLQUFLLEdBQUcsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBQ3BGLE9BQU8sV0FBVyxDQUFDO09BQ3BCLENBQUM7TUFDRixPQUFPO1FBQ0wsR0FBRztRQUNILEdBQUc7UUFDSCxRQUFRO1FBQ1IsU0FBUztRQUNULEdBQUc7T0FDSixDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLFFBQVEsU0FBUyxDQUFDLFFBQVEsRUFBRSxXQUFXO01BQzNDLE1BQU0sTUFBTSxPQUFPLElBQUksQ0FBQztNQUN4QixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLHNCQUFzQixFQUFFLE9BQU8sR0FBRyxHQUFHLGFBQWEsQ0FBQztLQUNoRixDQUFDLENBQUM7SUFDSCxNQUFNLFFBQVEsV0FBVyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxNQUFNLGFBQWEsV0FBVyxLQUFLLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0RCxNQUFNLFdBQVcsb0JBQW9CO01BQ25DLE1BQU0sYUFBYTtRQUNqQixZQUFZO1FBQ1osa0JBQWtCO1FBQ2xCLGFBQWE7UUFDYixnQkFBZ0I7UUFDaEIscUJBQXFCO1FBQ3JCLGVBQWU7T0FDaEIsQ0FBQztNQUNGLE1BQU0sU0FBUyxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO01BQ3JELEtBQUssQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQztLQUM3QyxDQUFDOztJQUVGLE1BQU0sTUFBTSxlQUFlO01BQ3pCLE1BQU0sWUFBWSxVQUFVLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUNuRCxPQUFPO1FBQ0wsSUFBSTtRQUNKLEdBQUc7UUFDSCxTQUFTO09BQ1YsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLGdCQUFnQixHQUFHLENBQUM7O0lBRTFCLE1BQU0sY0FBYyxPQUFPO01BQ3pCLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixFQUFFLENBQUM7TUFDeEMsT0FBTyxhQUFhLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztLQUN6QyxDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsVUFBVTtNQUNuQyxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUU7UUFDbkIsT0FBTyxDQUFDLENBQUM7T0FDVixNQUFNO1FBQ0wsT0FBTyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDaEM7S0FDRixDQUFDO0lBQ0YsTUFBTSxhQUFhLFdBQVc7TUFDNUIsTUFBTSxNQUFNLE9BQU8sSUFBSSxjQUFjLENBQUM7TUFDdEMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDO01BQ3RCLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQztNQUM1QixNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQztNQUNqQyxJQUFJLElBQUksS0FBSyxPQUFPLElBQUksRUFBRTtRQUN4QixPQUFPLGFBQWEsQ0FBQyxJQUFJLFdBQVcsRUFBRSxJQUFJLFVBQVUsQ0FBQyxDQUFDO09BQ3ZEO01BQ0QsTUFBTSxZQUFZLGtCQUFrQixDQUFDLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsWUFBWSxFQUFFLElBQUksVUFBVSxDQUFDLENBQUM7TUFDaEgsTUFBTSxhQUFhLGtCQUFrQixDQUFDLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsWUFBWSxFQUFFLElBQUksV0FBVyxDQUFDLENBQUM7TUFDbEgsTUFBTSxZQUFZLGtCQUFrQixDQUFDLElBQUksVUFBVSxFQUFFLElBQUksVUFBVSxDQUFDLENBQUM7TUFDckUsTUFBTSxhQUFhLGtCQUFrQixDQUFDLElBQUksV0FBVyxFQUFFLElBQUksV0FBVyxDQUFDLENBQUM7TUFDeEUsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxFQUFFLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQztLQUN0RixDQUFDO0lBQ0YsTUFBTSxhQUFhLFdBQVc7TUFDNUIsTUFBTSxNQUFNLE9BQU8sSUFBSSxDQUFDO01BQ3hCLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQztNQUM5QixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUM7TUFDdEIsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFO1FBQ2hCLE9BQU8sYUFBYSxDQUFDLElBQUksV0FBVyxFQUFFLElBQUksVUFBVSxDQUFDLENBQUM7T0FDdkQ7TUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3BCLE9BQU8sYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUM1QjtNQUNELE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3pCLENBQUM7O0lBRUYsTUFBTSxRQUFRLFNBQVMsQ0FBQyxPQUFPLEVBQUUsV0FBVyxPQUFPLElBQUksWUFBWSxDQUFDLENBQUM7SUFDckUsTUFBTSxRQUFRLGdCQUFnQixLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEQsTUFBTSxRQUFRLFdBQVcsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsTUFBTSxhQUFhLFdBQVcsS0FBSyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEQsTUFBTSxTQUFTLG9CQUFvQjtNQUNqQyxNQUFNLGFBQWE7UUFDakIsYUFBYTtRQUNiLG1CQUFtQjtRQUNuQixjQUFjO1FBQ2QsZUFBZTtRQUNmLG9CQUFvQjtRQUNwQixjQUFjO09BQ2YsQ0FBQztNQUNGLE1BQU0sU0FBUyxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO01BQ3JELEtBQUssQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQztLQUM1QyxDQUFDOztJQUVGLE1BQU0sU0FBUyxLQUFLO01BQ2xCLElBQUksU0FBUyxLQUFLLENBQUM7TUFDbkIsSUFBSSxDQUFDLENBQUM7TUFDTixPQUFPLENBQUMsT0FBTyxLQUFLO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEVBQUU7VUFDWCxTQUFTLElBQUksQ0FBQztVQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3pCO1FBQ0QsT0FBTyxDQUFDLENBQUM7T0FDVixDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLGFBQWEsd0NBQXdDO01BQ3pELE1BQU0sU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksQ0FBQztNQUM5RCxNQUFNLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztNQUN2QyxNQUFNLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDO01BQzlDLE1BQU0sVUFBVSxRQUFRLElBQUksVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUM7TUFDM0QsTUFBTSxXQUFXLE1BQU0sSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLElBQUksVUFBVSxDQUFDLDBCQUEwQixDQUFDLENBQUM7TUFDM0YsTUFBTSxVQUFVLFFBQVEsSUFBSSxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUM7TUFDbEQsTUFBTSxhQUFhLE9BQU8sU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxTQUFTLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFLLENBQUM7TUFDM0YsTUFBTSxZQUFZLENBQUMsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDO01BQ3ZELE9BQU87UUFDTCxRQUFRLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDMUIsVUFBVSxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQzlCLFVBQVUsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUM5QixTQUFTLFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFDNUIsU0FBUyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQzVCLFdBQVcsRUFBRSxVQUFVO1FBQ3ZCLE9BQU8sRUFBRSxNQUFNO1FBQ2YsV0FBVyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQ2pDLFdBQVcsVUFBVSxDQUFDLFNBQVMsQ0FBQztPQUNqQyxDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLGFBQWEsZ0JBQWdCO01BQ2pDLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdkMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO1VBQ2IsT0FBTyxDQUFDLENBQUM7U0FDVjtPQUNGO01BQ0QsT0FBTyxTQUFTLENBQUM7S0FDbEIsQ0FBQztJQUNGLE1BQU0sU0FBUyxvQkFBb0I7TUFDakMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDckMsSUFBSSxDQUFDLENBQUMsRUFBRTtRQUNOLE9BQU87VUFDTCxPQUFPLENBQUM7VUFDUixPQUFPLENBQUM7U0FDVCxDQUFDO09BQ0g7TUFDRCxNQUFNLFFBQVEsS0FBSztRQUNqQixPQUFPLE1BQU0sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDMUMsQ0FBQztNQUNGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNqQyxDQUFDO0lBQ0YsTUFBTSxXQUFXLDJCQUEyQjtNQUMxQyxNQUFNLGVBQWUsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztNQUNqRCxJQUFJLGNBQWMsT0FBTyxLQUFLLENBQUMsRUFBRTtRQUMvQixPQUFPLFNBQVMsRUFBRSxDQUFDO09BQ3BCO01BQ0QsT0FBTyxNQUFNLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDO0tBQzdDLENBQUM7SUFDRixNQUFNLFlBQVksTUFBTTtNQUN0QixPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDbkIsQ0FBQztJQUNGLE1BQU0sT0FBTyxrQkFBa0I7TUFDN0IsT0FBTztRQUNMLEtBQUs7UUFDTCxLQUFLO09BQ04sQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFVBQVU7TUFDZCxJQUFJLElBQUk7TUFDUixRQUFRLFFBQVE7TUFDaEIsU0FBUyxTQUFTO0tBQ25CLENBQUM7O0lBRUYsTUFBTSxrQkFBa0IsNkJBQTZCO01BQ25ELE9BQU8sT0FBTyxDQUFDLGFBQWEsT0FBTyxFQUFFLFdBQVc7UUFDOUMsTUFBTSxVQUFVLE9BQU8sTUFBTSxZQUFZLEVBQUUsQ0FBQztRQUM1QyxPQUFPLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVztVQUNqQyxJQUFJLEVBQUUsQ0FBQztVQUNQLE9BQU8sT0FBTyxNQUFNLENBQUMsS0FBSyxPQUFPLE1BQU0sTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztTQUNqRyxDQUFDLElBQUksQ0FBQyxTQUFTO1VBQ2QsU0FBUyxJQUFJLEtBQUs7VUFDbEIsU0FBUyxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3RELENBQUMsQ0FBQyxDQUFDO09BQ0wsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLFdBQVcsMkJBQTJCO01BQzFDLE1BQU0sUUFBUSxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO01BQzlDLE9BQU8sTUFBTSxDQUFDLFVBQVUsRUFBRSxhQUFhO1FBQ3JDLE9BQU8sU0FBUyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7T0FDaEMsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLHlCQUF5QjtNQUM3QyxPQUFPLFFBQVEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXO1FBQ2xELE1BQU0sVUFBVSxPQUFPLE9BQU8sQ0FBQyxPQUFPLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNsRSxPQUFPO1VBQ0wsU0FBUyxPQUFPLEtBQUs7VUFDckIsT0FBTztTQUNSLENBQUM7T0FDSCxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxXQUFXLHFCQUFxQjtNQUNwQyxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNO1FBQ3pDLE1BQU0sVUFBVSxPQUFPLE9BQU8sQ0FBQyxFQUFFLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM3RCxPQUFPO1VBQ0wsU0FBUyxFQUFFLEtBQUs7VUFDaEIsT0FBTztTQUNSLENBQUM7T0FDSCxDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0scUJBQXFCLHFDQUFxQyxDQUFDO0lBQ2pFLE1BQU0sZ0JBQWdCLFVBQVU7TUFDOUIsT0FBTyxZQUFZO1FBQ2pCLE9BQU8sVUFBVSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztPQUNyQyxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sV0FBVztNQUNmO1FBQ0UsTUFBTSxNQUFNO1FBQ1osZ0JBQWdCLENBQUMsZ0NBQWdDLENBQUM7UUFDbEQsUUFBUSxZQUFZO1VBQ2xCLE9BQU8sVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztTQUNqSjtPQUNGO01BQ0Q7UUFDRSxNQUFNLFVBQVU7UUFDaEIsT0FBTyxVQUFVO1FBQ2pCLGdCQUFnQjtVQUNkLGlDQUFpQztVQUNqQyxrQkFBa0I7U0FDbkI7UUFDRCxRQUFRLFlBQVk7VUFDbEIsT0FBTyxVQUFVLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztTQUMvRTtPQUNGO01BQ0Q7UUFDRSxNQUFNLElBQUk7UUFDVixnQkFBZ0I7VUFDZCxnQ0FBZ0M7VUFDaEMsNEJBQTRCO1NBQzdCO1FBQ0QsUUFBUSxZQUFZO1VBQ2xCLE9BQU8sVUFBVSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ3hFO09BQ0Y7TUFDRDtRQUNFLE1BQU0sT0FBTztRQUNiLGdCQUFnQjtVQUNkLGtCQUFrQjtVQUNsQixnQ0FBZ0M7U0FDakM7UUFDRCxRQUFRLGFBQWEsQ0FBQyxPQUFPLENBQUM7T0FDL0I7TUFDRDtRQUNFLE1BQU0sU0FBUztRQUNmLGdCQUFnQixDQUFDLHFDQUFxQyxDQUFDO1FBQ3ZELFFBQVEsYUFBYSxDQUFDLFNBQVMsQ0FBQztPQUNqQztNQUNEO1FBQ0UsTUFBTSxRQUFRO1FBQ2QsZ0JBQWdCO1VBQ2Qsa0JBQWtCO1VBQ2xCLCtCQUErQjtTQUNoQztRQUNELFFBQVEsWUFBWTtVQUNsQixPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7U0FDbkg7T0FDRjtLQUNGLENBQUM7SUFDRixNQUFNLE9BQU87TUFDWDtRQUNFLE1BQU0sU0FBUztRQUNmLFFBQVEsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUM1QixnQkFBZ0IsQ0FBQyx1Q0FBdUMsQ0FBQztPQUMxRDtNQUNEO1FBQ0UsTUFBTSxLQUFLO1FBQ1gsUUFBUSxZQUFZO1VBQ2xCLE9BQU8sVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZFO1FBQ0QsZ0JBQWdCO1VBQ2QscUNBQXFDO1VBQ3JDLDhCQUE4QjtVQUM5QixxQ0FBcUM7U0FDdEM7T0FDRjtNQUNEO1FBQ0UsTUFBTSxTQUFTO1FBQ2YsUUFBUSxhQUFhLENBQUMsU0FBUyxDQUFDO1FBQ2hDLGdCQUFnQixDQUFDLG1DQUFtQyxDQUFDO09BQ3REO01BQ0Q7UUFDRSxNQUFNLE9BQU87UUFDYixRQUFRLGFBQWEsQ0FBQyxVQUFVLENBQUM7UUFDakMsZ0JBQWdCLENBQUMscUNBQXFDLENBQUM7T0FDeEQ7TUFDRDtRQUNFLE1BQU0sT0FBTztRQUNiLFFBQVEsYUFBYSxDQUFDLE9BQU8sQ0FBQztRQUM5QixnQkFBZ0IsRUFBRTtPQUNuQjtNQUNEO1FBQ0UsTUFBTSxTQUFTO1FBQ2YsUUFBUSxhQUFhLENBQUMsT0FBTyxDQUFDO1FBQzlCLGdCQUFnQixFQUFFO09BQ25CO01BQ0Q7UUFDRSxNQUFNLFNBQVM7UUFDZixRQUFRLGFBQWEsQ0FBQyxTQUFTLENBQUM7UUFDaEMsZ0JBQWdCLEVBQUU7T0FDbkI7TUFDRDtRQUNFLE1BQU0sVUFBVTtRQUNoQixRQUFRLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFDN0IsZ0JBQWdCLENBQUMsaUNBQWlDLENBQUM7T0FDcEQ7S0FDRixDQUFDO0lBQ0YsTUFBTSxlQUFlO01BQ25CLFVBQVUsVUFBVSxDQUFDLFFBQVEsQ0FBQztNQUM5QixNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUM7S0FDdkIsQ0FBQzs7SUFFRixNQUFNLE9BQU8sTUFBTSxDQUFDO0lBQ3BCLE1BQU0sV0FBVyxVQUFVLENBQUM7SUFDNUIsTUFBTSxLQUFLLElBQUksQ0FBQztJQUNoQixNQUFNLFFBQVEsT0FBTyxDQUFDO0lBQ3RCLE1BQU0sVUFBVSxTQUFTLENBQUM7SUFDMUIsTUFBTSxTQUFTLFFBQVEsQ0FBQztJQUN4QixNQUFNLFlBQVksTUFBTTtNQUN0QixPQUFPLElBQUksQ0FBQztRQUNWLFNBQVMsU0FBUztRQUNsQixTQUFTLE9BQU8sUUFBUSxFQUFFO09BQzNCLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLE9BQU8sUUFBUTtNQUNuQixNQUFNLFVBQVUsSUFBSSxRQUFRLENBQUM7TUFDN0IsTUFBTSxVQUFVLElBQUksUUFBUSxDQUFDO01BQzdCLE1BQU0sWUFBWSxRQUFRLE1BQU0sT0FBTyxLQUFLLElBQUksQ0FBQztNQUNqRCxPQUFPO1FBQ0wsT0FBTztRQUNQLE9BQU87UUFDUCxRQUFRLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDdkIsWUFBWSxTQUFTLENBQUMsUUFBUSxDQUFDO1FBQy9CLE1BQU0sU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUNuQixTQUFTLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDekIsV0FBVyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQzdCLFVBQVUsU0FBUyxDQUFDLE1BQU0sQ0FBQztPQUM1QixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sVUFBVTtNQUNkLFNBQVMsU0FBUztNQUNsQixJQUFJLElBQUk7TUFDUixNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUM7TUFDdEIsVUFBVSxVQUFVLENBQUMsUUFBUSxDQUFDO01BQzlCLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQztNQUNsQixPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUM7TUFDeEIsU0FBUyxVQUFVLENBQUMsT0FBTyxDQUFDO01BQzVCLFFBQVEsVUFBVSxDQUFDLE1BQU0sQ0FBQztLQUMzQixDQUFDOztJQUVGLE1BQU0sVUFBVSxTQUFTLENBQUM7SUFDMUIsTUFBTSxNQUFNLEtBQUssQ0FBQztJQUNsQixNQUFNLFVBQVUsU0FBUyxDQUFDO0lBQzFCLE1BQU0sUUFBUSxPQUFPLENBQUM7SUFDdEIsTUFBTSxRQUFRLE9BQU8sQ0FBQztJQUN0QixNQUFNLFVBQVUsU0FBUyxDQUFDO0lBQzFCLE1BQU0sVUFBVSxTQUFTLENBQUM7SUFDMUIsTUFBTSxXQUFXLFVBQVUsQ0FBQztJQUM1QixNQUFNLFlBQVksTUFBTTtNQUN0QixPQUFPLElBQUksQ0FBQztRQUNWLFNBQVMsU0FBUztRQUNsQixTQUFTLE9BQU8sUUFBUSxFQUFFO09BQzNCLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLE9BQU8sUUFBUTtNQUNuQixNQUFNLFVBQVUsSUFBSSxRQUFRLENBQUM7TUFDN0IsTUFBTSxVQUFVLElBQUksUUFBUSxDQUFDO01BQzdCLE1BQU0sT0FBTyxRQUFRLE1BQU0sT0FBTyxLQUFLLElBQUksQ0FBQztNQUM1QyxPQUFPO1FBQ0wsT0FBTztRQUNQLE9BQU87UUFDUCxXQUFXLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ2hCLFdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN4QixTQUFTLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDcEIsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3BCLFdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN4QixXQUFXLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDeEIsWUFBWSxJQUFJLENBQUMsUUFBUSxDQUFDO09BQzNCLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxrQkFBa0I7TUFDdEIsU0FBUyxTQUFTO01BQ2xCLElBQUksSUFBSTtNQUNSLFNBQVMsVUFBVSxDQUFDLE9BQU8sQ0FBQztNQUM1QixLQUFLLFVBQVUsQ0FBQyxHQUFHLENBQUM7TUFDcEIsU0FBUyxVQUFVLENBQUMsT0FBTyxDQUFDO01BQzVCLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQztNQUN4QixPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUM7TUFDeEIsU0FBUyxVQUFVLENBQUMsT0FBTyxDQUFDO01BQzVCLFNBQVMsVUFBVSxDQUFDLE9BQU8sQ0FBQztNQUM1QixVQUFVLFVBQVUsQ0FBQyxRQUFRLENBQUM7S0FDL0IsQ0FBQzs7SUFFRixNQUFNLFdBQVcsNkNBQTZDO01BQzVELE1BQU0sV0FBVyxZQUFZLFNBQVMsRUFBRSxDQUFDO01BQ3pDLE1BQU0sT0FBTyxZQUFZLEtBQUssRUFBRSxDQUFDO01BQ2pDLE1BQU0sVUFBVSxnQkFBZ0IsS0FBSyxDQUFDLGlCQUFpQixlQUFlLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLGFBQWEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sUUFBUSxFQUFFLE9BQU8sR0FBRyxDQUFDLENBQUM7TUFDckwsTUFBTSxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxlQUFlLFFBQVEsRUFBRSxlQUFlLEdBQUcsQ0FBQyxDQUFDO01BQ3ZGLE1BQU0sYUFBYSxVQUFVLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7TUFDbEUsT0FBTztRQUNMLE9BQU87UUFDUCxFQUFFO1FBQ0YsVUFBVTtPQUNYLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsRUFBRSxRQUFRLFFBQVEsRUFBRSxDQUFDOztJQUUvQyxNQUFNLGFBQWEsU0FBUyxNQUFNLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQzdELElBQUksV0FBVyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsT0FBTyxDQUFDLFNBQVMsVUFBVSxFQUFFLFFBQVEsS0FBSyxDQUFDLFNBQVMsY0FBYyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUMvSCxNQUFNLFdBQVcsTUFBTSxRQUFRLEVBQUUsQ0FBQzs7SUFFbEMsTUFBTSxVQUFVLDZDQUE2QztNQUMzRCxNQUFNO01BQ04sQ0FBQztNQUNELENBQUM7TUFDRCxJQUFJO01BQ0osT0FBTztNQUNQLElBQUk7TUFDSixHQUFHO0tBQ0osQ0FBQyxDQUFDO0lBQ0gsTUFBTSxpQkFBaUIsWUFBWTtNQUNqQyxNQUFNLFNBQVMsWUFBWSxRQUFRLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLE9BQU8sQ0FBQyxDQUFDLENBQUM7TUFDN0YsTUFBTSxPQUFPLE1BQU0sUUFBUSxnQkFBZ0IsRUFBRSxDQUFDO01BQzlDLE1BQU0sVUFBVSxNQUFNLFFBQVEsZUFBZSxFQUFFLENBQUM7TUFDaEQsTUFBTSxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDcEMsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsUUFBUSxFQUFFLFFBQVEsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQzNGLENBQUM7SUFDRixNQUFNLFNBQVMscUJBQXFCLFlBQVk7TUFDOUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDcEIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO09BQ25DO0tBQ0YsQ0FBQztJQUNGLE1BQU0sU0FBUyxpREFBaUQ7TUFDOUQsTUFBTSxVQUFVLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDeEMsT0FBTyxJQUFJLGlCQUFpQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7TUFDekQsT0FBTyxFQUFFLFFBQVEsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO0tBQ3ZFLENBQUM7SUFDRixNQUFNLFNBQVMscUNBQXFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkcsTUFBTSxZQUFZLHFDQUFxQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JHLE1BQU0sU0FBUyx5Q0FBeUM7TUFDdEQsT0FBTyxJQUFJLG9CQUFvQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FDN0QsQ0FBQzs7SUFFRixNQUFNLFdBQVcscUJBQXFCO01BQ3BDLE1BQU0sV0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDaEMsUUFBUSxLQUFLLENBQUMsS0FBSztRQUNqQixDQUFDLElBQUksYUFBYSxDQUFDLE9BQU8sSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7T0FDN0MsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sVUFBVSxxQkFBcUI7TUFDbkMsTUFBTSxVQUFVLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNwQyxPQUFPLEtBQUssQ0FBQyxNQUFNO1FBQ2pCLE1BQU0sV0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsUUFBUSxLQUFLLENBQUMsS0FBSztVQUNqQixRQUFRLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3RCLENBQUMsQ0FBQztPQUNKLEVBQUUsS0FBSztRQUNOLFFBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7T0FDdEIsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sWUFBWSxxQkFBcUI7TUFDckMsTUFBTSxlQUFlLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUN4QyxZQUFZLEtBQUssQ0FBQyxNQUFNO1FBQ3RCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7T0FDM0IsRUFBRSxLQUFLO1FBQ04sTUFBTSxJQUFJLGFBQWEsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzdDLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFdBQVcscUJBQXFCO01BQ3BDLE1BQU0sSUFBSSxZQUFZLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztLQUNyQyxDQUFDO0lBQ0YsTUFBTSxXQUFXLDRCQUE0QjtNQUMzQyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTTtRQUNoQyxRQUFRLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQzNCLEVBQUUsS0FBSztRQUNOLFFBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7T0FDdEIsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLFdBQVcsc0JBQXNCO01BQ3JDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSztRQUNwQixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3JCLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxRQUFRLFdBQVc7TUFDdkIsT0FBTyxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7TUFDN0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTO1FBQ2pDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztPQUNqQixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxXQUFXLFdBQVc7TUFDMUIsTUFBTSxNQUFNLE9BQU8sSUFBSSxDQUFDO01BQ3hCLElBQUksR0FBRyxXQUFXLEtBQUssSUFBSSxFQUFFO1FBQzNCLEdBQUcsV0FBVyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDakM7S0FDRixDQUFDOztJQUVGLE1BQU0sUUFBUSxRQUFRO01BQ3BCLE1BQU0sTUFBTSxJQUFJLEtBQUssU0FBUyxHQUFHLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQztNQUNyRCxNQUFNLElBQUksR0FBRyxLQUFLLFdBQVcsSUFBSSxHQUFHLGdCQUFnQixXQUFXLENBQUM7TUFDaEUsTUFBTSxJQUFJLEdBQUcsS0FBSyxVQUFVLElBQUksR0FBRyxnQkFBZ0IsVUFBVSxDQUFDO01BQzlELE9BQU8sYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUM1QixDQUFDO0lBQ0YsTUFBTSxLQUFLLGdCQUFnQjtNQUN6QixNQUFNLE1BQU0sSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLElBQUksR0FBRyxRQUFRLENBQUM7TUFDckQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDO01BQzVCLElBQUksR0FBRyxFQUFFO1FBQ1AsR0FBRyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3BCO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLFFBQVEsUUFBUTtNQUNwQixNQUFNLE1BQU0sSUFBSSxLQUFLLFNBQVMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO01BQy9DLElBQUksUUFBUSxFQUFFLFFBQVEsVUFBVSxFQUFFLEVBQUU7UUFDbEMsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCLE1BQU07UUFDTCxPQUFPLFFBQVEsS0FBSyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7T0FDMUM7S0FDRixDQUFDO0lBQ0YsTUFBTSxXQUFXLDBCQUEwQjtNQUN6QyxDQUFDO01BQ0QsQ0FBQztNQUNELEtBQUs7TUFDTCxNQUFNO01BQ04sT0FBTyxDQUFDLEdBQUcsS0FBSztNQUNoQixRQUFRLENBQUMsR0FBRyxNQUFNO0tBQ25CLENBQUMsQ0FBQztJQUNILE1BQU0sY0FBYyxRQUFRO01BQzFCLE1BQU0sTUFBTSxJQUFJLEtBQUssU0FBUyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7TUFDL0MsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDO01BQ3pCLE1BQU0sU0FBUyxLQUFLLENBQUMsWUFBWSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUNoRCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU07UUFDM0IsTUFBTSxPQUFPLEdBQUcsU0FBUyxnQkFBZ0IsQ0FBQztRQUMxQyxNQUFNLFFBQVEsSUFBSSxZQUFZLENBQUM7UUFDL0IsTUFBTSxTQUFTLElBQUksYUFBYSxDQUFDO1FBQ2pDLE9BQU8sUUFBUSxDQUFDLE1BQU0sS0FBSyxFQUFFLE1BQU0sSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztPQUN6RCxFQUFFLGtCQUFrQixRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxTQUFTLEVBQUUsTUFBTSxLQUFLLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxjQUFjLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLGNBQWMsTUFBTSxFQUFFLGNBQWMsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUMzSyxDQUFDOztJQUVGLE1BQU0sY0FBYyxNQUFNLFlBQVksUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztJQUV6RCxNQUFNLFNBQVMscUJBQXFCO01BQ2xDLE1BQU0sUUFBUSxVQUFVLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNuQyxPQUFPLEtBQUssS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLO1FBQ3JDLE1BQU0sU0FBUyxVQUFVLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLE9BQU8sTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN4QyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN6QixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxTQUFTLHlCQUF5QjtNQUN0QyxNQUFNLElBQUksVUFBVSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDcEMsTUFBTSxRQUFRLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDcEMsT0FBTyxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM3QixDQUFDOztJQUVGLE1BQU0sT0FBTyxPQUFPO01BQ2xCLElBQUksRUFBRSxDQUFDO01BQ1AsTUFBTSxVQUFVLEdBQUcsSUFBSSxLQUFLLFFBQVEsR0FBRyxRQUFRLEtBQUssRUFBRSxHQUFHLFFBQVEsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksWUFBWSxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztNQUN4SixPQUFPLE9BQU8sSUFBSSxDQUFDLFlBQVksUUFBUSxDQUFDLENBQUM7S0FDMUMsQ0FBQztJQUNGLE1BQU0sVUFBVSxXQUFXLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQzs7SUFFNUMsSUFBSSwwQkFBMEIsTUFBTSxPQUFPLENBQUM7UUFDeEMsV0FBVyxJQUFJO1FBQ2YsTUFBTSxJQUFJO1FBQ1YsT0FBTyxPQUFPO0tBQ2pCLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFNBQVMsV0FBVztNQUN4QixNQUFNLE1BQU0sV0FBVyxFQUFFLENBQUM7TUFDMUIsTUFBTSxTQUFTLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUMxQixNQUFNLE9BQU8sTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztNQUN6QyxPQUFPLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVTtRQUNyRCxNQUFNLFNBQVMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLFVBQVU7VUFDaEMsTUFBTSxNQUFNLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUMxQixPQUFPO1lBQ0wsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLEtBQUs7WUFDdkIsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLElBQUk7V0FDckIsQ0FBQztTQUNILEVBQUU7VUFDRCxNQUFNLENBQUM7VUFDUCxLQUFLLENBQUM7U0FDUCxDQUFDLENBQUM7UUFDSCxPQUFPLGFBQWEsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLEtBQUssR0FBRyxNQUFNLEtBQUssRUFBRSxDQUFDLElBQUksR0FBRyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFDO09BQzNGLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxVQUFVLDJCQUEyQjtNQUN6QyxLQUFLO01BQ0wsS0FBSztNQUNMLE1BQU07S0FDUCxDQUFDLENBQUM7SUFDSCxNQUFNLE9BQU8sMEJBQTBCO01BQ3JDLENBQUM7TUFDRCxDQUFDO01BQ0QsS0FBSztNQUNMLE1BQU07S0FDUCxDQUFDLENBQUM7SUFDSCxNQUFNLFNBQVMsMEJBQTBCO01BQ3ZDLENBQUM7TUFDRCxDQUFDO01BQ0QsS0FBSztNQUNMLE1BQU07TUFDTixPQUFPLENBQUMsR0FBRyxLQUFLO01BQ2hCLFFBQVEsQ0FBQyxHQUFHLE1BQU07S0FDbkIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxRQUFRLFdBQVc7TUFDdkIsTUFBTSxLQUFLLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUMvQixNQUFNLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQzlCLE1BQU0sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDOUIsT0FBTyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3RDLENBQUM7SUFDRixNQUFNLGFBQWEsV0FBVztNQUM1QixNQUFNLFdBQVcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ2pDLE1BQU0sUUFBUSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDbEMsTUFBTSxTQUFTLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUNuQyxPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssRUFBRSxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDM0QsQ0FBQztJQUNGLE1BQU0sWUFBWSwwQkFBMEI7TUFDMUMsTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDaEQsTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDL0MsTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsTUFBTSxFQUFFLFVBQVUsTUFBTSxDQUFDLENBQUM7TUFDekQsTUFBTSxTQUFTLElBQUksSUFBSSxDQUFDLFFBQVEsT0FBTyxFQUFFLFVBQVUsT0FBTyxDQUFDLENBQUM7TUFDNUQsTUFBTSxRQUFRLEtBQUssR0FBRyxJQUFJLENBQUM7TUFDM0IsTUFBTSxTQUFTLE1BQU0sR0FBRyxHQUFHLENBQUM7TUFDNUIsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDekMsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLDJCQUEyQjtNQUNqRCxPQUFPLEtBQUssQ0FBQyxXQUFXLEVBQUUsWUFBWSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQ3BFLENBQUM7SUFDRixNQUFNLE1BQU0sTUFBTSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7O0lBRXRDLElBQUksV0FBVyxPQUFPLEtBQUssTUFBTSxRQUFRLENBQUMsc0JBQXNCLENBQUMsQ0FBQzs7SUFFbEUsTUFBTSxVQUFVLFNBQVM7TUFDdkIsTUFBTSxjQUFjLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQ3BDLE1BQU0sY0FBYyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDdEMsTUFBTSxlQUFlLE1BQU0sTUFBTSxDQUFDO01BQ2xDLE1BQU0sU0FBUztRQUNiLEtBQUssSUFBSTtRQUNULE9BQU8sS0FBSztRQUNaLE1BQU0sdUJBQXVCLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDM0MsU0FBUyxNQUFNO1FBQ2YsU0FBUyxLQUFLO1FBQ2QsS0FBSyxVQUFVLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxVQUFVLFlBQVk7UUFDdEIsTUFBTSxXQUFXO1FBQ2pCLFFBQVEsV0FBVztRQUNuQixRQUFRLFdBQVc7UUFDbkIsT0FBTyxXQUFXO1FBQ2xCLElBQUksWUFBWTtRQUNoQixZQUFZLFdBQVc7UUFDdkIsU0FBUyxZQUFZO1FBQ3JCLFVBQVUsV0FBVztRQUNyQixNQUFNLE1BQU07VUFDVixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDWDtRQUNELFlBQVksTUFBTSxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUM7T0FDdkMsQ0FBQztNQUNGLE9BQU8sTUFBTSxDQUFDO0tBQ2YsQ0FBQztJQUNGLE1BQU0sVUFBVSxTQUFTO01BQ3ZCLE1BQU0sZUFBZSxNQUFNLE1BQU0sQ0FBQztNQUNsQyxNQUFNLFNBQVM7UUFDYixLQUFLLEtBQUs7UUFDVixPQUFPLEtBQUs7UUFDWixNQUFNLHVCQUF1QixPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzNDLFNBQVMsS0FBSztRQUNkLFNBQVMsTUFBTTtRQUNmLEtBQUssWUFBWTtRQUNqQixVQUFVLFVBQVUsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLE1BQU0sWUFBWTtRQUNsQixRQUFRLEtBQUs7UUFDYixRQUFRLE1BQU07UUFDZCxPQUFPLFFBQVE7UUFDZixJQUFJLFFBQVE7UUFDWixZQUFZLE9BQU87UUFDbkIsU0FBUyxPQUFPO1FBQ2hCLFVBQVUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixNQUFNLElBQUk7UUFDVixZQUFZLFFBQVEsS0FBSztPQUMxQixDQUFDO01BQ0YsT0FBTyxNQUFNLENBQUM7S0FDZixDQUFDO0lBQ0YsTUFBTSxhQUFhLG1CQUFtQixRQUFRLEtBQUssQ0FBQyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRixNQUFNLFNBQVM7TUFDYixPQUFPLE9BQU87TUFDZCxPQUFPLE9BQU87TUFDZCxVQUFVO0tBQ1gsQ0FBQzs7SUFFRixJQUFJLGdCQUFnQixDQUFDO0lBQ3JCLENBQUMsNEJBQTRCO01BQzNCLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztNQUMxRCxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7S0FDM0QsQ0FBQyxnQkFBZ0IsS0FBSyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNoRCxNQUFNLFNBQVMsMkJBQTJCLEdBQUcsTUFBTSxLQUFLLGdCQUFnQixNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDM0gsTUFBTSxjQUFjLFdBQVc7TUFDN0IsTUFBTSxTQUFTLEVBQUUsQ0FBQztNQUNsQixNQUFNLFNBQVMsRUFBRSxDQUFDO01BQ2xCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTztRQUNyQixNQUFNLENBQUMsR0FBRyxFQUFFLE9BQU8sTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO09BQy9ELENBQUMsQ0FBQztNQUNILE9BQU87UUFDTCxNQUFNO1FBQ04sTUFBTTtPQUNQLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxXQUFXLFlBQVk7TUFDM0IsSUFBSSxHQUFHLE1BQU0sS0FBSyxnQkFBZ0IsTUFBTSxFQUFFO1FBQ3hDLE9BQU87VUFDTCxPQUFPLGdCQUFnQixNQUFNO1VBQzdCLFFBQVEsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO1NBQ3RCLENBQUM7T0FDSCxNQUFNO1FBQ0wsT0FBTyxHQUFHLENBQUM7T0FDWjtLQUNGLENBQUM7SUFDRixNQUFNLE1BQU0sWUFBWTtNQUN0QixJQUFJLEdBQUcsTUFBTSxLQUFLLGdCQUFnQixNQUFNLEVBQUU7UUFDeEMsT0FBTztVQUNMLE9BQU8sZ0JBQWdCLE1BQU07VUFDN0IsUUFBUSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7U0FDdEIsQ0FBQztPQUNILE1BQU07UUFDTCxPQUFPLEdBQUcsQ0FBQztPQUNaO0tBQ0YsQ0FBQztJQUNGLE1BQU0sU0FBUyxZQUFZO01BQ3pCLElBQUksR0FBRyxNQUFNLEtBQUssZ0JBQWdCLE1BQU0sRUFBRTtRQUN4QyxPQUFPLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO09BQ3RCLE1BQU07UUFDTCxPQUFPLEdBQUcsQ0FBQztPQUNaO0tBQ0YsQ0FBQztJQUNGLE1BQU0sWUFBWSxZQUFZO01BQzVCLElBQUksR0FBRyxNQUFNLEtBQUssZ0JBQWdCLE1BQU0sRUFBRTtRQUN4QyxPQUFPLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO09BQ3RCLE1BQU07UUFDTCxPQUFPLEdBQUcsQ0FBQztPQUNaO0tBQ0YsQ0FBQztJQUNGLE1BQU0sU0FBUyxNQUFNO01BQ25CLE9BQU8sZ0JBQWdCLE1BQU07TUFDN0IsUUFBUSxDQUFDO0tBQ1YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxTQUFTLE1BQU07TUFDbkIsT0FBTyxnQkFBZ0IsTUFBTTtNQUM3QixRQUFRLENBQUM7S0FDVixDQUFDLENBQUM7SUFDSCxNQUFNLGFBQWEsT0FBTyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDLENBQUM7SUFDbEUsTUFBTSxlQUFlLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELE1BQU0sZUFBZTtNQUNuQixZQUFZLFlBQVk7TUFDeEIsVUFBVSxVQUFVO01BQ3BCLE1BQU07TUFDTixXQUFXLFdBQVc7TUFDdEIsTUFBTTtNQUNOLE1BQU0sTUFBTTtNQUNaLFNBQVM7TUFDVCxHQUFHO01BQ0gsUUFBUTtNQUNSLE1BQU0sTUFBTTtLQUNiLENBQUM7O0lBRUYsTUFBTSxVQUFVLGtDQUFrQztNQUNoRCxLQUFLLE9BQU87TUFDWixHQUFHO01BQ0gsTUFBTTtNQUNOLFFBQVE7TUFDUixJQUFJO0tBQ0wsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxnQkFBZ0IsMkJBQTJCO01BQy9DLEtBQUssUUFBUTtNQUNiLE1BQU07TUFDTixZQUFZO0tBQ2IsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxPQUFPLDhCQUE4QjtNQUN6QyxRQUFRLEtBQUssSUFBSTtXQUNaLE9BQU87UUFDVixPQUFPLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxLQUFLLE9BQU8sRUFBRSxLQUFLLFNBQVMsRUFBRSxLQUFLLEtBQUssQ0FBQyxDQUFDO1dBQ2pFLFFBQVE7UUFDWCxPQUFPLFFBQVEsQ0FBQyxLQUFLLE9BQU8sRUFBRSxLQUFLLGFBQWEsQ0FBQyxDQUFDO09BQ25EO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLFlBQVksYUFBYTtNQUM3QixPQUFPLEVBQUUsQ0FBQztLQUNYLENBQUM7SUFDRixNQUFNLE9BQU8sYUFBYTtNQUN4QixNQUFNLGNBQWMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUM1RCxPQUFPLFdBQVcsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUM5QyxDQUFDO0lBQ0YsTUFBTSxZQUFZLFVBQVU7TUFDMUIsT0FBTyxDQUFDLFVBQVUsS0FBSztRQUNyQixJQUFJLE9BQU8sT0FBTyxLQUFLLENBQUMsRUFBRTtVQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsTUFBTSxNQUFNLEVBQUUsQ0FBQztRQUNmLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7VUFDdkMsTUFBTSxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUM3QixLQUFLLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRTtZQUMzQixJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQUU7Y0FDekIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDN0M7V0FDRjtTQUNGO1FBQ0QsT0FBTyxHQUFHLENBQUM7T0FDWixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sWUFBWSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsTUFBTSxVQUFVLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQzs7SUFFckMsTUFBTSxhQUFhLE9BQU87TUFDeEIsS0FBSyxVQUFVO01BQ2YsU0FBUyxFQUFFO0tBQ1osQ0FBQyxDQUFDO0lBQ0gsTUFBTSxpQkFBaUIsa0JBQWtCO01BQ3ZDLEtBQUssZ0JBQWdCO01BQ3JCLFNBQVMsYUFBYTtLQUN2QixDQUFDLENBQUM7SUFDSCxNQUFNLGNBQWMsWUFBWSxjQUFjLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDckUsTUFBTSxXQUFXLE9BQU87TUFDdEIsS0FBSyxRQUFRO01BQ2IsU0FBUyxFQUFFO0tBQ1osQ0FBQyxDQUFDO0lBQ0gsTUFBTSxpQkFBaUIsY0FBYztNQUNuQyxLQUFLLGdCQUFnQjtNQUNyQixTQUFTLFNBQVM7S0FDbkIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxZQUFZLFFBQVEsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOztJQUUzRCxNQUFNLGdCQUFnQixrQkFBa0IsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLFlBQVksT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvSixNQUFNLGdCQUFnQixVQUFVLE9BQU8sQ0FBQyxZQUFZLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5RSxNQUFNLGlCQUFpQixtQkFBbUI7TUFDeEMsTUFBTSxZQUFZLFlBQVksVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ2xELE9BQU8sU0FBUyxPQUFPLE9BQU8sR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLFNBQVMsT0FBTyxDQUFDLEdBQUcsYUFBYSxDQUFDLFNBQVMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzlHLENBQUM7SUFDRixNQUFNLGlCQUFpQixXQUFXO01BQ2hDLE1BQU0sYUFBYSxZQUFZLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUNuRCxPQUFPLFVBQVUsT0FBTyxPQUFPLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxVQUFVLE9BQU8sQ0FBQyxHQUFHLFlBQVksT0FBTyxDQUFDLFVBQVUsT0FBTyxDQUFDLENBQUM7S0FDakgsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCO01BQ3BCLGNBQWM7TUFDZCxjQUFjO0tBQ2YsQ0FBQzs7SUFFRixNQUFNLFlBQVksU0FBUztNQUN6QixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUcsc0JBQXNCLEdBQUcsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztLQUM5RyxDQUFDO0lBQ0YsTUFBTSxlQUFlLFVBQVU7TUFDN0IsTUFBTSxLQUFLLE1BQU0sT0FBTyxHQUFHLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1VBQ3hELE1BQU0sRUFBRTtVQUNSLGNBQWMsVUFBVSxDQUFDLHVDQUF1QyxDQUFDO1NBQ2xFLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztNQUNmLE9BQU8sS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLO1FBQ3BCLE9BQU8sZ0JBQWdCLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztPQUN6RSxDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sT0FBTyx3QkFBd0I7TUFDbkMsT0FBTyxZQUFZLE9BQU8sQ0FBQyxDQUFDO1VBQ3hCLElBQUk7VUFDSixZQUFZO1NBQ2IsQ0FBQyxDQUFDLENBQUM7S0FDUCxDQUFDO0lBQ0YsTUFBTSxrQkFBa0Isb0JBQW9CLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSw2Q0FBNkMsR0FBRyxHQUFHLEdBQUcsT0FBTyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdJLE1BQU0sYUFBYSxlQUFlLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSw2Q0FBNkMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDOUcsTUFBTSxnQkFBZ0IsNEJBQTRCLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLEdBQUcsK0JBQStCLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDNUosTUFBTSxvQkFBb0IsdUJBQXVCLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxpQ0FBaUMsR0FBRyxXQUFXLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQztJQUM5SSxNQUFNLFNBQVMsZUFBZSxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOztJQUUxRCxNQUFNLFVBQVUsYUFBYTtNQUMzQixNQUFNLFVBQVUsZUFBZTtRQUM3QixPQUFPLFlBQVksVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztPQUN6RSxDQUFDO01BQ0YsTUFBTSxXQUFXLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUNuQyxPQUFPO1FBQ0wsT0FBTztRQUNQLFFBQVE7T0FDVCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sYUFBYSxPQUFPLENBQUMsWUFBWSxPQUFPLENBQUMsQ0FBQzs7SUFFaEQsTUFBTSxpQkFBaUIsNEJBQTRCLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLGVBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZILE1BQU0saUJBQWlCLGdDQUFnQztNQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDMUQsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbEIsQ0FBQztJQUNGLE1BQU0sZUFBZSxzQkFBc0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuRSxNQUFNLHdCQUF3QixnQ0FBZ0M7TUFDNUQsTUFBTSxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO01BQzNFLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3BCLENBQUM7SUFDRixNQUFNLGVBQWUsaUNBQWlDO01BQ3BELE1BQU0sU0FBUyxNQUFNLElBQUksUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztNQUMxRCxNQUFNLGlCQUFpQixZQUFZLFFBQVEsS0FBSyxDQUFDLE1BQU0sWUFBWSxPQUFPLENBQUMsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU07UUFDakcsTUFBTSxTQUFTLElBQUksUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwRCxPQUFPLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEtBQUssQ0FBQyxDQUFDO09BQ2hELENBQUMsQ0FBQztNQUNILFFBQVEsS0FBSyxJQUFJO1dBQ1osVUFBVTtRQUNiLE9BQU8sY0FBYyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1dBQzNDLGdCQUFnQjtRQUNuQixPQUFPLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1dBQ3BELFFBQVE7UUFDWCxPQUFPLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1dBQzNDLHNCQUFzQjtRQUN6QixPQUFPLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7V0FDbkUsZ0JBQWdCLEVBQUU7VUFDbkIsT0FBTyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSztZQUNuRCxNQUFNLFNBQVMsU0FBUyxDQUFDLEtBQUssUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2hELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1dBQ3ZCLENBQUMsQ0FBQztTQUNKO09BQ0Y7S0FDRixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsdUJBQXVCO01BQzNDLE1BQU0sVUFBVSxFQUFFLENBQUM7TUFDbkIsTUFBTSxTQUFTLEVBQUUsQ0FBQztNQUNsQixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRTtRQUMxQixJQUFJLENBQUMsS0FBSyxFQUFFLGlDQUFpQztVQUMzQyxNQUFNLFNBQVMsWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztVQUM1RCxZQUFZLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTztZQUMvQixNQUFNLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1dBQ3JCLEVBQUUsT0FBTztZQUNSLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7V0FDdkIsQ0FBQyxDQUFDO1NBQ0osRUFBRSwwQkFBMEI7VUFDM0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNyQyxDQUFDLENBQUM7T0FDSjtNQUNELE9BQU8sTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLFlBQVksT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFlBQVksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3ZGLENBQUM7SUFDRixNQUFNLGFBQWEsZUFBZTtNQUNoQyxNQUFNLFVBQVUsZUFBZSxXQUFXLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztNQUNoRSxNQUFNLFdBQVcsTUFBTSxXQUFXLEVBQUUsU0FBUyxFQUFFLENBQUM7TUFDaEQsT0FBTztRQUNMLE9BQU87UUFDUCxRQUFRO09BQ1QsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLGFBQWEsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQzdELE1BQU0sWUFBWSxVQUFVO01BQzFCLE1BQU0sV0FBVyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDL0IsTUFBTSxhQUFhLEtBQUssQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCO1FBQy9DLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO09BQzdFLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDUCxNQUFNLFVBQVUsYUFBYTtRQUMzQixNQUFNLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsTUFBTSxRQUFRLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sS0FBSyxPQUFPLEtBQUssQ0FBQyxHQUFHLFFBQVEsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDeEYsQ0FBQztNQUNGLE9BQU87UUFDTCxPQUFPO1FBQ1AsVUFBVSxRQUFRLFNBQVM7T0FDNUIsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFFBQVEsVUFBVTtNQUN0QixNQUFNLFVBQVUsYUFBYSxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztNQUM1RCxNQUFNLFdBQVcsTUFBTTtRQUNyQixNQUFNLGVBQWUsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUUsaUNBQWlDLEdBQUcsR0FBRyxNQUFNLEdBQUcsSUFBSSxTQUFTLEVBQUUsRUFBRSwyQkFBMkIsUUFBUSxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlLLE9BQU8sUUFBUSxHQUFHLFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztPQUNqRCxDQUFDO01BQ0YsT0FBTztRQUNMLE9BQU87UUFDUCxRQUFRO09BQ1QsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFFBQVEsUUFBUTtNQUNwQixNQUFNLFVBQVUsaUJBQWlCO1FBQy9CLE1BQU0sVUFBVSxLQUFLLENBQUMsS0FBSyxFQUFFLFVBQVUsSUFBSSxRQUFRLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RixPQUFPLGFBQWEsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO09BQzlDLENBQUM7TUFDRixNQUFNLFdBQVcsTUFBTSxRQUFRLEdBQUcsSUFBSSxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUM7TUFDeEQsT0FBTztRQUNMLE9BQU87UUFDUCxRQUFRO09BQ1QsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFFBQVEsaUJBQWlCO01BQzdCLE1BQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxRQUFRLENBQUM7TUFDL0MsTUFBTSxVQUFVLGVBQWU7UUFDN0IsTUFBTSxTQUFTLEVBQUUsQ0FBQztRQUNsQixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtVQUN4QixNQUFNLE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1VBQ3BDLElBQUksR0FBRyxNQUFNLEtBQUssZ0JBQWdCLE1BQU0sRUFBRTtZQUN4QyxPQUFPO2NBQ0wsT0FBTyxnQkFBZ0IsTUFBTTtjQUM3QixRQUFRLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQzthQUN0QixDQUFDO1dBQ0g7VUFDRCxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNsQjtRQUNELE9BQU8sYUFBYSxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDN0MsQ0FBQztNQUNGLE1BQU0sV0FBVyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO01BQ3pGLE9BQU87UUFDTCxPQUFPO1FBQ1AsUUFBUTtPQUNULENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxVQUFVLHFCQUFxQjtNQUNuQyxNQUFNLGVBQWUsZ0JBQWdCLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNuRixNQUFNLFVBQVUsYUFBYTtRQUMzQixNQUFNLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sZ0JBQWdCLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakQsT0FBTyxZQUFZLEtBQUssQ0FBQyxhQUFhLEVBQUUsYUFBYTtVQUNuRCxNQUFNLFNBQVMsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNO1lBQ3BDLE9BQU8sT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDNUMsQ0FBQyxDQUFDO1VBQ0gsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDdkMsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sV0FBVyxNQUFNLFFBQVEsR0FBRyxJQUFJLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQztNQUN4RCxPQUFPO1FBQ0wsT0FBTztRQUNQLFFBQVE7T0FDVCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sUUFBUSxzQkFBc0I7TUFDbEMsTUFBTSxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUMvQixNQUFNLFVBQVUsZUFBZSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztNQUN6RCxNQUFNLFdBQVcsTUFBTSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7TUFDekMsT0FBTztRQUNMLE9BQU87UUFDUCxRQUFRO09BQ1QsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFdBQVcsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQzs7SUFFdkMsTUFBTSxXQUFXLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4QyxNQUFNLGFBQWEsNkJBQTZCLE9BQU8sQ0FBQyxLQUFLO01BQzNELE1BQU0sYUFBYSxPQUFPLENBQUMsQ0FBQztNQUM1QixPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLE9BQU8sQ0FBQyxDQUFDLGVBQWUsR0FBRyxZQUFZLEVBQUUsVUFBVSxHQUFHLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUNqSSxDQUFDLENBQUM7SUFDSCxNQUFNLFNBQVMsVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5QyxNQUFNLFNBQVMsVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5QyxNQUFNLFVBQVUsVUFBVSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNqRCxNQUFNLG9CQUFvQixVQUFVLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzdELE1BQU0sb0JBQW9CLE9BQU87TUFDL0IsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDO09BQ2I7TUFDRCxRQUFRLEVBQUUsU0FBUyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7V0FDckMsU0FBUztXQUNULFFBQVE7V0FDUixRQUFRO1dBQ1IsTUFBTTtXQUNOLFFBQVE7V0FDUixNQUFNO1dBQ04sVUFBVTtXQUNWLFdBQVc7V0FDWCxhQUFhO1dBQ2IsYUFBYTtRQUNoQixPQUFPLElBQUksQ0FBQztXQUNULE9BQU87V0FDUCxRQUFRO1FBQ1gsT0FBTyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFcEUsT0FBTyxLQUFLLENBQUM7T0FDZDtLQUNGLENBQUM7SUFDRixNQUFNLGtCQUFrQixPQUFPLENBQUMsS0FBSztNQUNuQyxJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sWUFBWSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDL0IsTUFBTTtRQUNMLE9BQU8sWUFBWSxPQUFPLENBQUMsNkRBQTZELENBQUMsQ0FBQztPQUMzRjtLQUNGLENBQUMsQ0FBQzs7SUFFSCxNQUFNLGFBQWEsK0JBQStCO01BQ2hELE1BQU0sU0FBUyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO01BQ25DLE9BQU8sTUFBTSxLQUFLLENBQUMsTUFBTSxhQUFhLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztLQUN0SCxDQUFDO0lBQ0YsTUFBTSxXQUFXLG1CQUFtQjtNQUNsQyxNQUFNLFVBQVUsaUJBQWlCO1FBQy9CLE1BQU0sU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sTUFBTSxLQUFLLENBQUMsTUFBTSxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFVBQVUsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7T0FDdEcsQ0FBQztNQUNGLE1BQU0sV0FBVyxNQUFNLFdBQVcsR0FBRyxHQUFHLEdBQUcsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQ25GLE9BQU87UUFDTCxPQUFPO1FBQ1AsUUFBUTtPQUNULENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sV0FBVyxNQUFNLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxNQUFNLFVBQVUsYUFBYSxPQUFPLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLE9BQU8sRUFBRSxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDdkcsTUFBTSxRQUFRLHFCQUFxQixPQUFPLENBQUMsS0FBSyxZQUFZLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM3RixNQUFNLGVBQWUsc0JBQXNCO01BQ3pDLE1BQU0sTUFBTSxJQUFJLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQ3ZDLE9BQU8sWUFBWSxTQUFTLENBQUMsR0FBRyxFQUFFLFNBQVM7UUFDekMsT0FBTyxHQUFHO1FBQ1YsUUFBUSxJQUFJO09BQ2IsQ0FBQyxDQUFDLENBQUM7S0FDTCxDQUFDO0lBQ0YsTUFBTSxRQUFRLHNCQUFzQixZQUFZLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFGLE1BQU0sV0FBVyxjQUFjO01BQzdCLE9BQU8sVUFBVSxLQUFLLENBQUMsV0FBVztRQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO09BQ3ZDLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDZCxDQUFDO0lBQ0YsTUFBTSxlQUFlLHNCQUFzQixRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3RSxNQUFNLGNBQWMsV0FBVztNQUM3QixPQUFPLFlBQVksR0FBRyxZQUFZLENBQUMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLG9CQUFvQixHQUFHLFNBQVMsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxDQUFDO0tBQ2pILENBQUM7SUFDRixNQUFNLFdBQVcsbUJBQW1CLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sVUFBVSxrQkFBa0IsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQzs7SUFFdEQsTUFBTSxVQUFVLE9BQU8sQ0FBQztJQUN4QixNQUFNLGNBQWMsYUFBYSxDQUFDO0lBQ2xDLE1BQU0sZUFBZSxVQUFVLE9BQU8sQ0FBQyxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxNQUFNLENBQUMsQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLEVBQUUsa0JBQWtCLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVMLE1BQU0sYUFBYSxPQUFPLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDdEUsTUFBTSxhQUFhLGlCQUFpQixPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1RSxNQUFNLGlCQUFpQixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEQsTUFBTSxpQkFBaUIsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RELE1BQU0scUJBQXFCLGlCQUFpQixPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNsRyxNQUFNLGtCQUFrQixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEQsTUFBTSxtQkFBbUIsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDbkUsTUFBTSxTQUFTLGtCQUFrQixPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxZQUFZLE9BQU8sQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0SixNQUFNLGdCQUFnQixvQkFBb0IsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDNUYsTUFBTSxxQkFBcUIsb0JBQW9CLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3BHLE1BQU0sa0JBQWtCLGlCQUFpQixPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN4RixNQUFNLFdBQVcsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sV0FBVyxpQkFBaUIsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEUsTUFBTSxlQUFlLE9BQU8sUUFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRCxNQUFNLGVBQWUsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELE1BQU0sbUJBQW1CLGlCQUFpQixRQUFRLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzlFLE1BQU0saUJBQWlCLE9BQU8sUUFBUSxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sZ0JBQWdCLGlCQUFpQixRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sY0FBYyxvQkFBb0IsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN4RSxNQUFNLGtCQUFrQixvQkFBb0IsUUFBUSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNoRixNQUFNLFlBQVksbUJBQW1CLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzFGLE1BQU0sY0FBYywyQkFBMkIsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hHLE1BQU0sa0JBQWtCLG1CQUFtQixXQUFXLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5RSxNQUFNLGtCQUFrQixtQkFBbUIsV0FBVyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUUsTUFBTSxzQkFBc0IsMkJBQTJCLFdBQVcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3hHLE1BQU0sbUJBQW1CLG1CQUFtQixXQUFXLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoRixNQUFNLG9CQUFvQixtQkFBbUIsV0FBVyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUMzRixNQUFNLG1CQUFtQixtQkFBbUIsV0FBVyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDeEYsTUFBTSxtQkFBbUIsMkJBQTJCLFdBQVcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzlGLE1BQU0saUJBQWlCLDhCQUE4QixXQUFXLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzs7SUFFbEcsTUFBTSxPQUFPLFdBQVc7TUFDdEIsSUFBSSxRQUFRLE9BQU8sQ0FBQztNQUNwQixNQUFNLE1BQU0sTUFBTTtRQUNoQixPQUFPLEtBQUssQ0FBQztPQUNkLENBQUM7TUFDRixNQUFNLE1BQU0sS0FBSztRQUNmLFFBQVEsQ0FBQyxDQUFDO09BQ1gsQ0FBQztNQUNGLE9BQU87UUFDTCxHQUFHO1FBQ0gsR0FBRztPQUNKLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sYUFBYSxTQUFTO01BQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO09BQzNDO01BQ0QsSUFBSSxLQUFLLE9BQU8sS0FBSyxDQUFDLEVBQUU7UUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO09BQ3BEO01BQ0QsTUFBTSxlQUFlLEVBQUUsQ0FBQztNQUN4QixNQUFNLE1BQU0sRUFBRSxDQUFDO01BQ2YsTUFBTSxDQUFDLEtBQUssRUFBRSxrQkFBa0I7UUFDOUIsTUFBTSxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixJQUFJLE1BQU0sT0FBTyxLQUFLLENBQUMsRUFBRTtVQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7U0FDbkQ7UUFDRCxNQUFNLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxFQUFFO1VBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLEdBQUcsR0FBRyxDQUFDLENBQUM7U0FDbEQsTUFBTSxJQUFJLEdBQUcsS0FBSyxNQUFNLEVBQUU7VUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1NBQzFELE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtVQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7U0FDcEQ7UUFDRCxZQUFZLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEtBQUs7VUFDdEIsTUFBTSxZQUFZLElBQUksT0FBTyxDQUFDO1VBQzlCLElBQUksU0FBUyxLQUFLLEtBQUssT0FBTyxFQUFFO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLEdBQUcsR0FBRyxHQUFHLGFBQWEsR0FBRyxLQUFLLE9BQU8sR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQztXQUNuSTtVQUNELE1BQU0sUUFBUSxZQUFZO1lBQ3hCLE1BQU0sYUFBYSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEMsSUFBSSxZQUFZLE9BQU8sS0FBSyxVQUFVLE9BQU8sRUFBRTtjQUM3QyxNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxHQUFHLFlBQVksS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksR0FBRyxVQUFVLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ2xJO1lBQ0QsTUFBTSxVQUFVLE1BQU0sQ0FBQyxZQUFZLEVBQUUsVUFBVTtjQUM3QyxPQUFPLFVBQVUsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDdkMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLE9BQU8sRUFBRTtjQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsK0RBQStELEdBQUcsVUFBVSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsY0FBYyxHQUFHLFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDcko7WUFDRCxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztXQUN4QyxDQUFDO1VBQ0YsT0FBTztZQUNMLE1BQU0sQ0FBQyxXQUFXLEtBQUs7Y0FDckIsSUFBSSxRQUFRLE9BQU8sS0FBSyxLQUFLLE9BQU8sRUFBRTtnQkFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsR0FBRyxLQUFLLE9BQU8sR0FBRyxRQUFRLEdBQUcsUUFBUSxPQUFPLENBQUMsQ0FBQztlQUM3RztjQUNELE1BQU0sU0FBUyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7Y0FDL0IsT0FBTyxNQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDakM7WUFDRCxLQUFLO1lBQ0wsS0FBSyxTQUFTO2NBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNqQixZQUFZO2dCQUNaLGFBQWEsR0FBRztnQkFDaEIsUUFBUSxJQUFJO2VBQ2IsQ0FBQyxDQUFDO2FBQ0o7V0FDRixDQUFDO1NBQ0gsQ0FBQztPQUNILENBQUMsQ0FBQztNQUNILE9BQU8sR0FBRyxDQUFDO0tBQ1osQ0FBQztJQUNGLE1BQU0sTUFBTSxFQUFFLFVBQVUsVUFBVSxFQUFFLENBQUM7O0lBRXJDLEdBQUcsU0FBUyxDQUFDO01BQ1g7UUFDRSxZQUFZO1VBQ1YsUUFBUTtVQUNSLFFBQVE7U0FDVDtPQUNGO01BQ0Q7UUFDRSxZQUFZO1VBQ1YsUUFBUTtVQUNSLFFBQVE7U0FDVDtPQUNGO01BQ0Q7UUFDRSxhQUFhO1VBQ1gsUUFBUTtVQUNSLFFBQVE7U0FDVDtPQUNGO01BQ0Q7UUFDRSxZQUFZO1VBQ1YsUUFBUTtVQUNSLFFBQVE7U0FDVDtPQUNGO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxjQUFjLFdBQVc7TUFDN0IsTUFBTSxTQUFTLEVBQUUsQ0FBQztNQUNsQixNQUFNLFNBQVMsRUFBRSxDQUFDO01BQ2xCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVTtRQUN4QixNQUFNLEtBQUssQ0FBQyxPQUFPO1VBQ2pCLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2xCLEVBQUUsU0FBUztVQUNWLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3BCLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztNQUNILE9BQU87UUFDTCxNQUFNO1FBQ04sTUFBTTtPQUNQLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sWUFBWSxpQkFBaUI7TUFDakMsTUFBTSxJQUFJLEVBQUUsQ0FBQztNQUNiLElBQUksQ0FBQyxHQUFHLEVBQUUsVUFBVTtRQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRTtVQUMxQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ1Y7T0FDRixDQUFDLENBQUM7TUFDSCxPQUFPLENBQUMsQ0FBQztLQUNWLENBQUM7O0lBRUYsTUFBTSxTQUFTLGlCQUFpQixFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDbEQsTUFBTSxZQUFZLGFBQWE7TUFDN0IsTUFBTSxJQUFJLEVBQUUsQ0FBQztNQUNiLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTTtRQUN0QixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQztPQUN0QixDQUFDLENBQUM7TUFDSCxPQUFPLENBQUMsQ0FBQztLQUNWLENBQUM7O0lBRUYsTUFBTSxVQUFVLGlCQUFpQixTQUFTLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3hELE1BQU0sU0FBUyxnQkFBZ0IsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRCxNQUFNLFVBQVUsYUFBYSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEQsTUFBTSxjQUFjLGtCQUFrQjtNQUNwQyxPQUFPLE1BQU0sT0FBTyxLQUFLLENBQUMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbkgsQ0FBQztJQUNGLE1BQU0sY0FBYyxVQUFVLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzVELE1BQU0sY0FBYyxnQkFBZ0I7TUFDbEMsTUFBTSxhQUFhLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNyQyxPQUFPLFVBQVUsT0FBTyxPQUFPLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxVQUFVLE9BQU8sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxVQUFVLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztLQUM3RyxDQUFDOztJQUVGLE1BQU0sZUFBZSxVQUFVLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ25FLE1BQU0sYUFBYSw4QkFBOEI7TUFDL0MsSUFBSSxVQUFVLEtBQUssSUFBSSxDQUFDO01BQ3hCLE1BQU0sT0FBTyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDbEMsT0FBTyxPQUFPLFdBQVcsRUFBRTtRQUN6QixVQUFVLE9BQU8sV0FBVyxDQUFDO1FBQzdCLE1BQU0sS0FBSyxZQUFZLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxNQUFNLGNBQWMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksV0FBVyxPQUFPLEVBQUUsRUFBRTtVQUN4QixPQUFPLFdBQVcsQ0FBQztTQUNwQixNQUFNLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1VBQ25CLE1BQU07U0FDUDtPQUNGO01BQ0QsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO0tBQ3hCLENBQUM7SUFDRixNQUFNLFlBQVksOEJBQThCO01BQzlDLE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDakMsTUFBTSxPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNsQyxPQUFPLE9BQU8sUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUNsRyxDQUFDOztJQUVGLE1BQU0sV0FBVywrQkFBK0IsRUFBRSxDQUFDLFNBQVMsUUFBUSxFQUFFLGNBQWMsTUFBTSxPQUFPLENBQUMsQ0FBQzs7SUFFbkcsTUFBTSxzQkFBc0I7TUFDMUIsS0FBSyxNQUFNO01BQ1gsT0FBTyxLQUFLO01BQ1osS0FBSyxJQUFJO0tBQ1YsQ0FBQztJQUNGLE1BQU0sT0FBTyxTQUFTO01BQ3BCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDOUcsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsR0FBRyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLG9DQUFvQyxDQUFDLENBQUM7T0FDdEg7TUFDRCxPQUFPO1FBQ0wsR0FBRyxtQkFBbUI7UUFDdEIsR0FBRyxLQUFLO09BQ1QsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFFBQVEsaUJBQWlCLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUgsTUFBTSxNQUFNLGlCQUFpQixDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsUUFBUSxFQUFFLGtCQUFrQixHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdILE1BQU0sU0FBUyxXQUFXLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRztNQUM5QyxLQUFLLE1BQU07TUFDWCxPQUFPLEtBQUs7TUFDWixLQUFLLE9BQU87S0FDYixHQUFHLE9BQU8sQ0FBQztJQUNaLE1BQU0sU0FBUyxZQUFZO01BQ3pCLE1BQU0sTUFBTSxLQUFLLENBQUMsUUFBUSxFQUFFLFdBQVcsT0FBTyxJQUFJLENBQUMsQ0FBQztNQUNwRCxNQUFNLFFBQVEsR0FBRyxDQUFDLFFBQVEsRUFBRSxXQUFXLE9BQU8sTUFBTSxDQUFDLENBQUM7TUFDdEQsTUFBTSxNQUFNLENBQUMsT0FBTyxLQUFLO1FBQ3ZCLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVztVQUMxQixPQUFPLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNwQyxDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsT0FBTztRQUNMLEdBQUc7UUFDSCxLQUFLO1FBQ0wsR0FBRztPQUNKLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sV0FBVyxVQUFVLENBQUM7SUFDNUIsTUFBTSxhQUFhLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxQyxNQUFNLFlBQVksUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sV0FBVyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEMsTUFBTSxjQUFjLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM1QyxNQUFNLFlBQVksUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sWUFBWSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDeEMsTUFBTSxXQUFXLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxNQUFNLFVBQVUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sWUFBWSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDeEMsTUFBTSxVQUFVLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwQyxNQUFNLFdBQVcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sVUFBVSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsTUFBTSxRQUFRLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxNQUFNLFFBQVEsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sU0FBUyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsTUFBTSxRQUFRLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxNQUFNLG1CQUFtQixRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN0RCxNQUFNLGdCQUFnQixRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDaEQsTUFBTSxrQkFBa0IsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDcEQsTUFBTSxjQUFjLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQzs7SUFFNUMsTUFBTSxhQUFhLFFBQVEsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUN2RCxNQUFNLFFBQVEsRUFBRSxLQUFLLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sVUFBVSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEMsTUFBTSxXQUFXLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6QyxNQUFNLFlBQVksVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNDLE1BQU0sVUFBVSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEMsTUFBTSxZQUFZLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4QyxNQUFNLFlBQVksVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNDLE1BQU0sTUFBTSxLQUFLLElBQUksQ0FBQztJQUN0QixNQUFNLFlBQVksVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sZUFBZSxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDakQsTUFBTSxrQkFBa0IsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDdkQsTUFBTSxhQUFhLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM3QyxNQUFNLG9CQUFvQixVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN6RCxNQUFNLG1CQUFtQixVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN2RCxNQUFNLGVBQWUsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sZUFBZSxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDakQsTUFBTSxnQkFBZ0IsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDcEQsTUFBTSxrQkFBa0IsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdEQsTUFBTSxtQkFBbUIsVUFBVSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDL0QsTUFBTSxzQkFBc0IsVUFBVSxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDckUsTUFBTSxlQUFlLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3hELE1BQU0saUJBQWlCLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQzlELE1BQU0sd0JBQXdCLFVBQVUsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sWUFBWSxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDM0MsTUFBTSxhQUFhLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM3QyxNQUFNLGNBQWMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sZ0JBQWdCLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQzs7SUFFaEQsTUFBTSxPQUFPLHNCQUFzQjtNQUNqQyxZQUFZLENBQUMsU0FBUyxFQUFFLFNBQVMsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztLQUN2RCxDQUFDO0lBQ0YsTUFBTSxXQUFXLGtDQUFrQztNQUNqRCxZQUFZLENBQUMsU0FBUyxFQUFFLFNBQVMsUUFBUSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztLQUMvRCxDQUFDO0lBQ0YsTUFBTSxjQUFjLGFBQWE7TUFDL0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0tBQzlCLENBQUM7SUFDRixNQUFNLFdBQVcsOEJBQThCO01BQzdDLFlBQVksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztLQUM1QyxDQUFDO0lBQ0YsTUFBTSxlQUFlLDBDQUEwQztNQUM3RCxNQUFNLE9BQU87UUFDWCxNQUFNO1FBQ04sR0FBRyxVQUFVO09BQ2QsQ0FBQztNQUNGLFNBQVMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3pELENBQUM7SUFDRixNQUFNLDBCQUEwQiw4Q0FBOEM7TUFDNUUsTUFBTSxPQUFPO1FBQ1gsR0FBRyxVQUFVO1FBQ2IsTUFBTTtPQUNQLENBQUM7TUFDRixTQUFTLFVBQVUsRUFBRSxhQUFhLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztLQUM3RCxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsOENBQThDO01BQ2xFLFNBQVMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLGNBQWMsTUFBTSxDQUFDLENBQUM7S0FDekUsQ0FBQzs7SUFFRixNQUFNLFdBQVcsV0FBVyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0MsTUFBTSxRQUFRLHFCQUFxQjtNQUNqQyxPQUFPO1FBQ0wsS0FBSyxJQUFJO1FBQ1QsT0FBTyxJQUFJLENBQUMsRUFBRSxPQUFPLFNBQVMsRUFBRSxDQUFDO09BQ2xDLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxNQUFNLHFCQUFxQjtNQUMvQixPQUFPO1FBQ0wsS0FBSyxJQUFJO1FBQ1QsT0FBTyxJQUFJLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxDQUFDO09BQ2hDLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsUUFBUTtNQUM3QixPQUFPO1FBQ0wsS0FBSyxJQUFJO1FBQ1QsT0FBTyxJQUFJLENBQUM7VUFDVixLQUFLLCtCQUErQjtZQUNsQyxjQUFjLE1BQU0sUUFBUSxFQUFFLENBQUM7V0FDaEM7U0FDRixDQUFDO09BQ0gsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFFBQVEsbUJBQW1CO01BQy9CLE9BQU87UUFDTCxLQUFLLElBQUk7UUFDVCxPQUFPLElBQUksQ0FBQyxFQUFFLEtBQUssT0FBTyxFQUFFLENBQUM7T0FDOUIsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLGlCQUFpQix5QkFBeUI7TUFDOUMsT0FBTztRQUNMLEtBQUssSUFBSTtRQUNULE9BQU8sSUFBSSxDQUFDO1VBQ1YsS0FBSywrQkFBK0I7WUFDbEMsTUFBTSxNQUFNLENBQUMsU0FBUyxFQUFFO2NBQ3RCLFNBQVM7Y0FDVCxjQUFjO2FBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7V0FDbEI7U0FDRixDQUFDO09BQ0gsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFlBQVksUUFBUTtNQUN4QixPQUFPLFdBQVcsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztLQUN4QyxDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsUUFBUTtNQUM5QixPQUFPLFlBQVk7UUFDakIsS0FBSyxJQUFJO1FBQ1QsT0FBTyxJQUFJLENBQUM7VUFDVixLQUFLLCtCQUErQjtZQUNsQyxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLEVBQUU7Y0FDdkMsT0FBTyxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQzthQUNwQztXQUNGO1NBQ0YsQ0FBQztPQUNILENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGdCQUFnQixlQUFlO01BQ25DLE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRSwrQkFBK0I7UUFDaEQsU0FBUyxVQUFVLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYztVQUNyRCxhQUFhLENBQUMsVUFBVSxFQUFFLFVBQVUsUUFBUSxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztTQUNyRSxDQUFDLENBQUM7T0FDSixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsNEJBQTRCO01BQ2pELE1BQU0sTUFBTSxNQUFNLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUN0QyxPQUFPLGFBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDakMsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLGFBQWE7TUFDakMsT0FBTyxLQUFLLENBQUMsSUFBSSxFQUFFLCtCQUErQjtRQUNoRCxNQUFNLEtBQUssY0FBYyxNQUFNLENBQUM7UUFDaEMsTUFBTSxTQUFTLFNBQVMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTTtVQUN4RSxNQUFNLFVBQVUsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sU0FBUyxVQUFVLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztVQUNuRyxPQUFPLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ2pDLENBQUMsQ0FBQztRQUNILENBQUMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO09BQ3RDLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFNBQVMsUUFBUTtNQUNyQixPQUFPLEtBQUssQ0FBQyxJQUFJLEVBQUUsK0JBQStCO1FBQ2hELGNBQWMsSUFBSSxFQUFFLENBQUM7T0FDdEIsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sVUFBVSxRQUFRO01BQ3RCLE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRSwrQkFBK0I7UUFDaEQsY0FBYyxLQUFLLEVBQUUsQ0FBQztPQUN2QixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxjQUFjLGFBQWE7TUFDL0IsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakMsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sZ0JBQWdCLGVBQWUsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sWUFBWSxlQUFlLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNoRCxNQUFNLGlCQUFpQixTQUFTLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQzs7SUFFOUMsTUFBTSxhQUFhLGlCQUFpQjtNQUNsQyxNQUFNLE1BQU0sS0FBSyxJQUFJLFFBQVEsQ0FBQztNQUM5QixNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDckMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDO01BQ3JCLE9BQU8sUUFBUSxDQUFDLFlBQVksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDNUMsQ0FBQzs7SUFFRixNQUFNLFFBQVEsV0FBVyxPQUFPLElBQUksVUFBVSxDQUFDO0lBQy9DLE1BQU0sUUFBUSxzQkFBc0I7TUFDbEMsTUFBTSxRQUFRLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUMvQixNQUFNLFNBQVMsS0FBSyxJQUFJLENBQUM7TUFDekIsTUFBTSxXQUFXLFlBQVksUUFBUSxDQUFDLE1BQU0sdUJBQXVCLEVBQUUsQ0FBQyxDQUFDO01BQ3ZFLE1BQU0sa0JBQWtCLFVBQVUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDcEQsUUFBUSxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQztNQUNwQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDZixRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQzdCLENBQUM7SUFDRixNQUFNLFdBQVcsV0FBVztNQUMxQixNQUFNLFlBQVksWUFBWSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDOUMsTUFBTSxRQUFRLFlBQVksUUFBUSxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUNoRSxRQUFRLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQzNCLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ3pCLENBQUM7O0lBRUYsTUFBTSxVQUFVLHNCQUFzQixZQUFZLFFBQVEsQ0FBQyxRQUFRLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDM0YsTUFBTSxVQUFVLFlBQVksT0FBTyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQzs7SUFFckQsTUFBTSxVQUFVLFdBQVc7TUFDekIsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDekIsT0FBTyxjQUFjLENBQUM7T0FDdkIsTUFBTTtRQUNMLE1BQU0sUUFBUSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7T0FDeEI7S0FDRixDQUFDOztJQUVGLE1BQU0sVUFBVSxRQUFRLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7SUFFdEMsTUFBTSxjQUFjLG1DQUFtQyxFQUFFLENBQUMsVUFBVSxFQUFFLFNBQVMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BILE1BQU0sV0FBVyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsK0JBQStCO1FBQ3JFLE1BQU0sUUFBUSxjQUFjLE1BQU0sQ0FBQztRQUNuQyxNQUFNLGFBQWEsS0FBSyxXQUFXLENBQUM7UUFDcEMsTUFBTSxTQUFTLEtBQUssT0FBTyxDQUFDO1FBQzVCLElBQUksV0FBVyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLEVBQUU7VUFDOUMsT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsa0RBQWtELEdBQUcsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLFlBQVksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsY0FBYyxHQUFHLE9BQU8sRUFBRSxHQUFHLGlCQUFpQixDQUFDLENBQUM7VUFDeE0sT0FBTyxLQUFLLENBQUM7U0FDZCxNQUFNO1VBQ0wsT0FBTyxJQUFJLENBQUM7U0FDYjtPQUNGLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRVAsSUFBSSw2QkFBNkIsTUFBTSxPQUFPLENBQUM7UUFDM0MsV0FBVyxJQUFJO1FBQ2YsUUFBUSxRQUFRO0tBQ25CLENBQUMsQ0FBQzs7SUFFSCxJQUFJLFNBQVMsQ0FBQyxDQUFDO0lBQ2YsTUFBTSxhQUFhLFVBQVU7TUFDM0IsTUFBTSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7TUFDeEIsTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7TUFDNUIsTUFBTSxTQUFTLElBQUksTUFBTSxDQUFDLElBQUksT0FBTyxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUM7TUFDdEQsTUFBTSxFQUFFLENBQUM7TUFDVCxPQUFPLE1BQU0sR0FBRyxHQUFHLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDdEQsQ0FBQzs7SUFFRixNQUFNLFdBQVcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sV0FBVyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7O0lBRTdDLE1BQU0sU0FBUyxRQUFRLEVBQUUsQ0FBQztJQUMxQixNQUFNLFNBQVMsUUFBUSxFQUFFLENBQUM7SUFDMUIsTUFBTSxRQUFRLGlCQUFpQjtNQUM3QixNQUFNLEtBQUssVUFBVSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQztNQUN0QyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO01BQ3BCLE9BQU8sRUFBRSxDQUFDO0tBQ1gsQ0FBQztJQUNGLE1BQU0sWUFBWSxlQUFlO01BQy9CLE1BQU0sZUFBZSxDQUFDLElBQUksSUFBSSxFQUFFLE1BQU0sRUFBRTtRQUN0QyxPQUFPLEdBQUc7UUFDVixVQUFVLElBQUk7T0FDZixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxTQUFTLFFBQVE7TUFDckIsTUFBTSxLQUFLLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7TUFDdkQsT0FBTyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUMxQixDQUFDO0lBQ0YsTUFBTSxhQUFhLFVBQVUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDOztJQUVoRCxNQUFNLFNBQVMsUUFBUSxDQUFDOztJQUV4QixNQUFNLGVBQWUsV0FBVztNQUM5QixNQUFNLGFBQWEsU0FBUyxDQUFDLCtDQUErQyxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksT0FBTyxHQUFHLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxHQUFHLHFCQUFxQixHQUFHLEVBQUUsQ0FBQyxDQUFDO01BQ3JLLE1BQU0sT0FBTyxTQUFTLE1BQU07UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztPQUNwQyxDQUFDO01BQ0YsTUFBTSxPQUFPLFNBQVMsTUFBTTtRQUMxQixPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztPQUNqQyxDQUFDO01BQ0YsT0FBTztRQUNMLFdBQVcsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUM3QixjQUFjLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDbEMsY0FBYyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ2xDLGVBQWUsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUNwQyxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDNUIsYUFBYSxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ2hDLGdCQUFnQixJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3BCLGNBQWMsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNsQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDOUIsaUJBQWlCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUN4QyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDMUIsZUFBZSxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3BDLFVBQVUsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUMxQixVQUFVLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDMUIsYUFBYSxLQUFLO09BQ25CLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxjQUFjLFlBQVksRUFBRSxDQUFDOztJQUVuQyxNQUFNLHFCQUFxQiw2QkFBNkI7TUFDdEQsTUFBTSxXQUFXLFdBQVcsU0FBUyxFQUFFLENBQUM7TUFDeEMsTUFBTSxXQUFXLFFBQVEsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUMzQyxNQUFNLG1CQUFtQixRQUFRLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUMvQyxNQUFNLGFBQWEsUUFBUSxVQUFVLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3hGLENBQUMscUJBQXFCLEdBQUcsT0FBTztRQUM5QixNQUFNLE9BQU87UUFDYixZQUFZLGVBQWUsQ0FBQyxVQUFVLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ2hGLENBQUMsQ0FBQztNQUNILE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLGNBQWMsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0gsTUFBTSxpQkFBaUIsa0JBQWtCO01BQ3ZDLE1BQU0sV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO01BQzlCLE1BQU0sV0FBVyxRQUFRLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDM0MsTUFBTSxtQkFBbUIsUUFBUSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDL0MsTUFBTSxhQUFhLFFBQVEsVUFBVSxDQUFDLGdCQUFnQixHQUFHLENBQUMsRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUN4RixDQUFDLHFCQUFxQixHQUFHLE9BQU87UUFDOUIsTUFBTSxTQUFTO1FBQ2YsWUFBWSxlQUFlLENBQUMsVUFBVSxDQUFDO09BQ3hDLENBQUMsQ0FBQztNQUNILE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLG9CQUFvQjtNQUMxQyxNQUFNLFdBQVcsV0FBVyxTQUFTLEVBQUUsQ0FBQztNQUN4QyxNQUFNLFdBQVcsUUFBUSxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQzNDLE1BQU0sbUJBQW1CLFFBQVEsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQy9DLE1BQU0sYUFBYSxRQUFRLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDeEYsQ0FBQyxxQkFBcUIsR0FBRyxPQUFPO1FBQzlCLE1BQU0sVUFBVTtRQUNoQixZQUFZLGVBQWUsQ0FBQyxVQUFVLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUNqRCxDQUFDLENBQUM7TUFDSCxPQUFPLENBQUMsQ0FBQztLQUNWLENBQUM7O0lBRUYsTUFBTSxhQUFhLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMvQyxNQUFNLFlBQVksUUFBUTtNQUN4QixNQUFNLGVBQWUsQ0FBQyxJQUFJLFFBQVEsSUFBSSxFQUFFLFVBQVUsRUFBRTtRQUNsRCxPQUFPLElBQUksSUFBSTtRQUNmLFVBQVUsSUFBSTtPQUNmLENBQUMsQ0FBQztNQUNILE9BQU8sTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNqQyxDQUFDO0lBQ0YsTUFBTSxZQUFZLFdBQVcsS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzVELE1BQU0sYUFBYSxRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDbkQsTUFBTSxVQUFVLEtBQUssZUFBZSxDQUFDLFlBQVksT0FBTyxLQUFLLENBQUMsQ0FBQyxTQUFTLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOztJQUU1RyxNQUFNLFVBQVUsRUFBRSxNQUFNLE1BQU0sSUFBSSxDQUFDLEVBQUUsV0FBVyxVQUFVLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNyRixNQUFNLE9BQU8sUUFBUSxJQUFJLENBQUM7O0lBRTFCLE1BQU0saUJBQWlCLGVBQWU7TUFDcEMsTUFBTSxTQUFTLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxXQUFXLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNuRCxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQ3BCLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDO09BQzVCLENBQUMsQ0FBQyxDQUFDO01BQ0osTUFBTSxZQUFZLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLFdBQVc7UUFDOUYsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsb0JBQW9CLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQzlGLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDYixPQUFPO1FBQ0wsTUFBTSxHQUFHO1FBQ1QsTUFBTSxLQUFLLENBQUMsU0FBUyxFQUFFLGdCQUFnQjtVQUNyQyxNQUFNLFNBQVMsWUFBWSxJQUFJLENBQUMsU0FBUztZQUN2QyxRQUFRLElBQUksT0FBTztZQUNuQixPQUFPLElBQUksTUFBTSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUM7V0FDcEMsQ0FBQyxDQUFDLENBQUM7VUFDSixPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMzQixDQUFDO09BQ0gsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLGtCQUFrQixTQUFTLEtBQUssS0FBSyxDQUFDO0lBQzVDLE1BQU0sWUFBWSxTQUFTLEtBQUssS0FBSyxDQUFDOztJQUV0QyxNQUFNLGFBQWEsaUJBQWlCO01BQ2xDLE1BQU0sSUFBSSxFQUFFLENBQUM7TUFDYixJQUFJLENBQUMsSUFBSSxFQUFFLGlCQUFpQjtRQUMxQixJQUFJLENBQUMsTUFBTSxFQUFFLHFCQUFxQjtVQUNoQyxNQUFNLFFBQVEsS0FBSyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1VBQzNDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxLQUFLLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2pELENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztNQUNILE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQzs7SUFFRixNQUFNLE9BQU8sTUFBTTtNQUNqQixTQUFTLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLFFBQVE7TUFDaEQsWUFBWSxXQUFXLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxXQUFXO01BQ3pELFFBQVEsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsT0FBTztLQUM5QyxDQUFDLENBQUM7SUFDSCxNQUFNLFFBQVEsaUJBQWlCO01BQzdCLEdBQUcsS0FBSztNQUNSLFlBQVk7UUFDVixHQUFHLEtBQUssV0FBVztRQUNuQixHQUFHLEdBQUcsV0FBVztPQUNsQjtNQUNELFFBQVE7UUFDTixHQUFHLEtBQUssT0FBTztRQUNmLEdBQUcsR0FBRyxPQUFPO09BQ2Q7TUFDRCxTQUFTLEtBQUssUUFBUSxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUM7S0FDM0MsQ0FBQyxDQUFDOztJQUVILE1BQU0sWUFBWSxxQ0FBcUM7TUFDckQsTUFBTSxrQkFBa0IsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO01BQ3ZDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsYUFBYTtRQUM5QixlQUFlLENBQUMsU0FBUyxLQUFLLEVBQUUsQ0FBQyxHQUFHLFNBQVMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztPQUNuRSxDQUFDLENBQUM7TUFDSCxNQUFNLFdBQVcsVUFBVSxDQUFDLGVBQWUsRUFBRSx5QkFBeUI7UUFDcEUsSUFBSTtRQUNKLFlBQVk7T0FDYixDQUFDLENBQUMsQ0FBQztNQUNKLE1BQU0saUJBQWlCLFdBQVcsS0FBSyxDQUFDLE9BQU8sRUFBRSxXQUFXO1FBQzFELEdBQUcsQ0FBQyxhQUFhO1FBQ2pCLEdBQUcsQ0FBQztPQUNMLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztNQUNSLE1BQU0sa0JBQWtCLEtBQUssQ0FBQyxRQUFRLFFBQVEsRUFBRSxVQUFVLENBQUMsYUFBYSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDeEYsTUFBTSxxQkFBcUIsY0FBYyxDQUFDLFFBQVEsV0FBVyxDQUFDLENBQUM7TUFDL0QsTUFBTSxpQkFBaUIsY0FBYyxDQUFDLFFBQVEsT0FBTyxDQUFDLENBQUM7TUFDdkQsT0FBTyxJQUFJLENBQUM7UUFDVixTQUFTLGVBQWU7UUFDeEIsWUFBWSxrQkFBa0I7UUFDOUIsUUFBUSxjQUFjO09BQ3ZCLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxXQUFXLGtDQUFrQztNQUNqRCxJQUFJO1FBQ0YsTUFBTSxTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUUsVUFBVTtVQUNuQyxNQUFNLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1VBQ3hCLE1BQU0sT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7VUFDeEIsTUFBTSxTQUFTLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQ25DLE1BQU0sU0FBUyxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUNuQyxJQUFJLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixHQUFHLEtBQUssR0FBRyw4QkFBOEIsR0FBRyxJQUFJLEdBQUcsc0JBQXNCLEdBQUcsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ2hKO1VBQ0QsSUFBSSxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLEdBQUcsOEJBQThCLEdBQUcsSUFBSSxHQUFHLHNCQUFzQixHQUFHLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUNoSjtVQUNELElBQUksTUFBTSxHQUFHLE1BQU0sRUFBRTtZQUNuQixPQUFPLENBQUMsQ0FBQyxDQUFDO1dBQ1gsTUFBTSxJQUFJLE1BQU0sR0FBRyxNQUFNLEVBQUU7WUFDMUIsT0FBTyxDQUFDLENBQUM7V0FDVixNQUFNO1lBQ0wsT0FBTyxDQUFDLENBQUM7V0FDVjtTQUNGLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDN0IsQ0FBQyxZQUFZO1FBQ1osT0FBTyxNQUFNLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7T0FDNUI7S0FDRixDQUFDOztJQUVGLE1BQU0sWUFBWSx1QkFBdUI7TUFDdkMsT0FBTztNQUNQLE9BQU87S0FDUixDQUFDLENBQUM7SUFDSCxNQUFNLFVBQVUsdUJBQXVCO01BQ3JDLFVBQVUsT0FBTztNQUNqQixPQUFPO0tBQ1IsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxZQUFZLDRCQUE0QixPQUFPLENBQUMsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxRQUFRLENBQUMsQ0FBQztJQUM1SSxNQUFNLGFBQWEsZUFBZSxXQUFXLFNBQVMsQ0FBQzs7SUFFdkQsTUFBTSxpQkFBaUIsb0JBQW9CO01BQ3pDLElBQUk7TUFDSixPQUFPO0tBQ1IsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxpQkFBaUIsc0JBQXNCO01BQzNDLE1BQU0sSUFBSSxFQUFFLENBQUM7TUFDYixNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWE7UUFDOUIsQ0FBQyxDQUFDLFNBQVMsS0FBSyxFQUFFLENBQUMsR0FBRyxTQUFTLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUNoRCxDQUFDLENBQUM7TUFDSCxPQUFPLENBQUMsQ0FBQztLQUNWLENBQUM7SUFDRixNQUFNLGdCQUFnQiw0QkFBNEI7TUFDaEQsTUFBTSxrQkFBa0I7UUFDdEIsR0FBRyxJQUFJO1FBQ1AsR0FBRyxjQUFjLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztPQUNwQyxDQUFDO01BQ0YsT0FBTyxVQUFVLENBQUMsZUFBZSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0tBQ3BELENBQUM7SUFDRixNQUFNLFlBQVksd0NBQXdDO01BQ3hELE1BQU0sY0FBYyxhQUFhLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUMxRCxPQUFPLGFBQWEsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FDL0MsQ0FBQztJQUNGLE1BQU0sV0FBVyxjQUFjO01BQzdCLE1BQU0sVUFBVSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7TUFDbkMsT0FBTyw0QkFBNEIsT0FBTyxLQUFLO1FBQzdDLE1BQU0sT0FBTztVQUNYLFNBQVM7VUFDVCxjQUFjO1NBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2YsSUFBSSxPQUFPLE1BQU0sTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRTtVQUN4QyxjQUFjLEtBQUssRUFBRSxDQUFDO1NBQ3ZCLE1BQU0sSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRTtVQUM3QyxPQUFPLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNwQztPQUNGLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsdUJBQXVCLE1BQU0sTUFBTSxDQUFDLENBQUMsYUFBYSxHQUFHLFNBQVMsR0FBRyxnRkFBZ0YsR0FBRyxtSEFBbUgsR0FBRyxzQkFBc0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25YLE1BQU0sT0FBTyxtQ0FBbUM7TUFDOUMsTUFBTSxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUNwQyxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsT0FBTyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7T0FDN0MsTUFBTTtRQUNMLE9BQU8sUUFBUSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQjtVQUNoRixNQUFNLFdBQVcsS0FBSyxDQUFDLFlBQVksRUFBRSxTQUFTLEtBQUssUUFBUSxDQUFDLENBQUM7VUFDN0QsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDekIsQ0FBQyxDQUFDO09BQ0o7S0FDRixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsNkJBQTZCO01BQ2pELE1BQU0sSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFLHVCQUF1QjtRQUN2RCxNQUFNLFdBQVcsTUFBTSxPQUFPLEtBQUssQ0FBQyxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDN0csT0FBTyxRQUFRLElBQUksQ0FBQyxXQUFXO1VBQzdCLE1BQU0sWUFBWSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7VUFDcEMsTUFBTSxVQUFVLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztVQUN6SSxPQUFPLE1BQU0sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ3pELENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztNQUNILE9BQU8sV0FBVyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUMzQixDQUFDOztJQUVGLE1BQU0sZ0JBQWdCLHNCQUFzQixDQUFDO0lBQzdDLE1BQU0sV0FBVyxLQUFLLENBQUM7TUFDckIsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxDQUFDO1FBQ3hDLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDakIsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7UUFDdkIsU0FBUyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7UUFDeEIsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7UUFDM0IsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUNqQixRQUFRLENBQUMsV0FBVyxDQUFDO09BQ3RCLENBQUMsQ0FBQztNQUNILFVBQVUsQ0FBQyxZQUFZLENBQUM7TUFDeEIsVUFBVSxDQUFDLEtBQUssQ0FBQztNQUNqQixTQUFTLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztNQUN2QixTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztNQUNyQixPQUFPLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxTQUFTLENBQUM7UUFDNUMsQ0FBQyxTQUFTLEVBQUUsR0FBRztVQUNiLFdBQVc7VUFDWCxhQUFhO1VBQ2IsVUFBVTtVQUNWLGlCQUFpQjtTQUNsQjtRQUNELENBQUMsT0FBTyxFQUFFLEdBQUc7VUFDWCxhQUFhO1VBQ2IsVUFBVTtVQUNWLFFBQVE7U0FDVDtRQUNELENBQUMsVUFBVSxFQUFFLEdBQUc7VUFDZCxhQUFhO1VBQ2IsV0FBVztVQUNYLFVBQVU7VUFDVixjQUFjO1NBQ2Y7UUFDRCxDQUFDLEtBQUssRUFBRSxHQUFHO1VBQ1QsYUFBYTtVQUNiLGNBQWM7VUFDZCxXQUFXO1VBQ1gsY0FBYztTQUNmO1FBQ0QsQ0FBQyxlQUFlLEVBQUUsR0FBRztVQUNuQixhQUFhO1VBQ2IsY0FBYztVQUNkLGFBQWE7VUFDYixhQUFhO1NBQ2Q7UUFDRCxDQUFDLFNBQVMsRUFBRSxHQUFHO1VBQ2IsVUFBVTtVQUNWLGFBQWE7VUFDYixrQkFBa0I7U0FDbkI7UUFDRCxDQUFDLFVBQVUsRUFBRSxHQUFHO1VBQ2QsVUFBVTtVQUNWLGFBQWE7VUFDYixrQkFBa0I7U0FDbkI7UUFDRCxDQUFDLFNBQVMsRUFBRSxHQUFHO1VBQ2Isa0JBQWtCO1VBQ2xCLGFBQWE7U0FDZDtRQUNELENBQUMsT0FBTyxFQUFFLEdBQUc7VUFDWCxXQUFXO1VBQ1gsWUFBWTtVQUNaLGFBQWE7U0FDZDtPQUNGLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQztNQUNmLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztLQUM1QixDQUFDLENBQUM7SUFDSCxNQUFNLFNBQVMsUUFBUSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sZUFBZSxXQUFXO01BQzlCLEdBQUcsTUFBTSxJQUFJO01BQ2IsS0FBSyxNQUFNLElBQUk7TUFDZixhQUFhLEtBQUssQ0FBQyxNQUFNLFdBQVcsRUFBRSxRQUFRLElBQUksUUFBUSxDQUFDO0tBQzVELENBQUMsQ0FBQztJQUNILE1BQU0saUJBQWlCLFVBQVUsTUFBTSxnQkFBZ0IsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25GLE1BQU0sV0FBVyxRQUFRLElBQUksT0FBTyxDQUFDOztJQUVyQyxNQUFNLE9BQU8sbUJBQW1CO01BQzlCLE1BQU0sUUFBUSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ25DLE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNwRSxDQUFDO0lBQ0YsTUFBTSxRQUFRLHVCQUF1QjtNQUNuQyxNQUFNLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNoQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQzVCLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDbkMsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxXQUFXLHVCQUF1QjtNQUN0QyxNQUFNLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7TUFDeEQsSUFBSSxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUU7UUFDakIsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztPQUNwQyxNQUFNO1FBQ0wsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztPQUN6QjtNQUNELE9BQU8sS0FBSyxDQUFDO0tBQ2QsQ0FBQzs7SUFFRixNQUFNLFdBQVcsV0FBVyxPQUFPLElBQUksVUFBVSxLQUFLLFNBQVMsQ0FBQztJQUNoRSxNQUFNLFFBQVEsV0FBVyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELE1BQU0sUUFBUSxvQkFBb0IsS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakUsTUFBTSxXQUFXLG9CQUFvQixRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQzs7SUFFdkUsTUFBTSxRQUFRLG9CQUFvQjtNQUNoQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNyQixPQUFPLElBQUksVUFBVSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7T0FDbEMsTUFBTTtRQUNMLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDdkI7S0FDRixDQUFDO0lBQ0YsTUFBTSxhQUFhLFdBQVc7TUFDNUIsTUFBTSxZQUFZLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUM3RSxJQUFJLFNBQVMsT0FBTyxLQUFLLENBQUMsRUFBRTtRQUMxQixRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQzVCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sV0FBVyxvQkFBb0I7TUFDbkMsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDckIsTUFBTSxZQUFZLE9BQU8sSUFBSSxVQUFVLENBQUM7UUFDeEMsU0FBUyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7T0FDekIsTUFBTTtRQUNMLFFBQVEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDMUI7TUFDRCxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDckIsQ0FBQztJQUNGLE1BQU0sTUFBTSxvQkFBb0IsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sSUFBSSxVQUFVLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7SUFFM0YsTUFBTSxRQUFRLHNCQUFzQjtNQUNsQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUs7UUFDbkIsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztPQUNuQixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxXQUFXLHNCQUFzQjtNQUNyQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUs7UUFDbkIsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztPQUN0QixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxTQUFTLHNCQUFzQixNQUFNLENBQUMsT0FBTyxFQUFFLFNBQVMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ25GLE1BQU0sWUFBWSxXQUFXO01BQzNCLE1BQU0sWUFBWSxPQUFPLElBQUksVUFBVSxDQUFDO01BQ3hDLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxTQUFTLE9BQU8sQ0FBQyxDQUFDO01BQ3RDLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDekMsTUFBTSxPQUFPLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtVQUNqQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ2I7T0FDRjtNQUNELE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0sUUFBUSxXQUFXLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDOztJQUVqRixNQUFNLFFBQVEsV0FBVyxPQUFPLElBQUksTUFBTSxDQUFDO0lBQzNDLE1BQU0sUUFBUSxvQkFBb0I7TUFDaEMsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1FBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztPQUM1QztNQUNELE9BQU8sSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0tBQzNCLENBQUM7O0lBRUYsTUFBTSxxQkFBcUIsaUNBQWlDO01BQzFELE1BQU0sZUFBZSxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQzVDLE9BQU8sWUFBWSxJQUFJLENBQUMsVUFBVTtRQUNoQyxNQUFNLGNBQWMsWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM3RCxJQUFJLFdBQVcsRUFBRTtVQUNmLE1BQU0sU0FBUyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1VBQ3RELE1BQU0sU0FBUyxZQUFZLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztVQUM1QyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1VBQ3pCLE9BQU8sTUFBTSxDQUFDO1NBQ2YsTUFBTTtVQUNMLE9BQU8sTUFBTSxDQUFDO1NBQ2Y7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxjQUFjLDhCQUE4QjtNQUNoRCxTQUFTLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTztRQUNuRCxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRTtVQUNuQixRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1VBQ3JCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNmO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sb0JBQW9CLG1CQUFtQjtNQUMzQyxNQUFNLGdCQUFnQixLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ25DLE1BQU0sa0JBQWtCLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUN6QyxNQUFNLENBQUMsZUFBZSxNQUFNLENBQUMsYUFBYSxPQUFPLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztNQUM5RCxPQUFPLGFBQWEsQ0FBQztLQUN0QixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsZ0NBQWdDO01BQ3JELE1BQU0sZUFBZSxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQzVDLE1BQU0sWUFBWSxLQUFLLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO01BQzVDLE1BQU0sWUFBWSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO01BQ2xFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsU0FBUyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7TUFDbEQsT0FBTyxTQUFTLENBQUM7S0FDbEIsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLDBCQUEwQixpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsSixNQUFNLG1CQUFtQixtQkFBbUIsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxpQkFBaUI7TUFDNUYsTUFBTSxlQUFlLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDNUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7TUFDeEMsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDLENBQUM7O0lBRUgsTUFBTSxrQkFBa0Isb0JBQW9CO01BQzFDLE1BQU0sVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDN0IsTUFBTSxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUM3QixNQUFNLFdBQVcsVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztNQUM5QyxNQUFNLFFBQVEsUUFBUSxDQUFDLE1BQU0sRUFBRSxVQUFVO1FBQ3ZDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDN0MsQ0FBQyxFQUFFLENBQUM7TUFDTCxPQUFPO1FBQ0wsUUFBUTtRQUNSLEtBQUs7T0FDTixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0saUJBQWlCLDJCQUEyQjtNQUNoRCxNQUFNOzs7O09BSUwsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7TUFDdkIsTUFBTTs7O09BR0wsR0FBRyxlQUFlLENBQUMsVUFBVSxXQUFXLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztNQUMvRCxNQUFNLGNBQWMsTUFBTTtRQUN4QixNQUFNLENBQUMsYUFBYSxFQUFFLEtBQUssUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25ELFFBQVEsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7T0FDakMsQ0FBQztNQUNGLE1BQU0saUJBQWlCLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUM1QyxNQUFNOzs7T0FHTCxHQUFHLGVBQWUsQ0FBQyxVQUFVLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztNQUN2RCxNQUFNLGVBQWUsTUFBTTtRQUN6QixNQUFNLENBQUMsY0FBYyxFQUFFLEtBQUssUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7T0FDaEMsQ0FBQztNQUNGLE1BQU0sa0JBQWtCLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUN6QyxNQUFNLGtCQUFrQixVQUFVLENBQUMsZUFBZSxFQUFFLFVBQVUsUUFBUSxDQUFDLENBQUM7TUFDeEUsTUFBTSxlQUFlLFVBQVUsQ0FBQyxVQUFVLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQztNQUNyRSxNQUFNLGdCQUFnQixNQUFNO1FBQzFCLEtBQUssQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDL0IsUUFBUSxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztPQUN0QyxDQUFDO01BQ0YsTUFBTSxhQUFhLFFBQVE7UUFDekIsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUN4QixDQUFDO01BQ0YsTUFBTSxpQkFBaUIsTUFBTTtRQUMzQixNQUFNLFdBQVcsVUFBVSxZQUFZLENBQUM7UUFDeEMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO09BQ3ZDLENBQUM7TUFDRixNQUFNLGNBQWMsTUFBTTtRQUN4QixNQUFNLGVBQWUsU0FBUyxDQUFDO1FBQy9CLE1BQU0sUUFBUSxVQUFVLE1BQU0sZUFBZSxFQUFFLENBQUM7UUFDaEQsSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFO1VBQ2pDLEtBQUssQ0FBQyxZQUFZLEVBQUUsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQ3RFO09BQ0YsQ0FBQztNQUNGLFdBQVcsRUFBRSxDQUFDO01BQ2QsYUFBYSxFQUFFLENBQUM7TUFDaEIsWUFBWSxFQUFFLENBQUM7TUFDZixVQUFVLFVBQVUsS0FBSyxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztNQUN0RCxXQUFXLEVBQUUsQ0FBQztNQUNkLE9BQU8sU0FBUyxDQUFDO0tBQ2xCLENBQUM7O0lBRUYsTUFBTSxpQkFBaUIsY0FBYztNQUNuQyxNQUFNLFVBQVUsWUFBWSxRQUFRLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQztNQUNyRCxRQUFRLENBQUMsT0FBTyxFQUFFLFVBQVUsV0FBVyxDQUFDLENBQUM7TUFDekMsS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVLFFBQVEsQ0FBQyxDQUFDO01BQ25DLE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVSxPQUFPLENBQUMsQ0FBQztNQUNuQyxVQUFVLFVBQVUsS0FBSyxDQUFDLFFBQVEsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ3hELE1BQU0sV0FBVyxVQUFVLFlBQVksQ0FBQztNQUN4QyxRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQzVCLFVBQVUsTUFBTSxLQUFLLENBQUMsU0FBUztRQUM3QixLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ3ZCLENBQUMsQ0FBQztNQUNILE9BQU8sT0FBTyxDQUFDO0tBQ2hCLENBQUM7SUFDRixNQUFNLGVBQWUsMkJBQTJCO01BQzlDLElBQUk7UUFDRixNQUFNLElBQUksY0FBYyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNoRCxPQUFPLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ3pCLENBQUMsWUFBWTtRQUNaLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN4QjtLQUNGLENBQUM7SUFDRixNQUFNLG1CQUFtQixjQUFjLFVBQVUsVUFBVSxPQUFPLEVBQUUsSUFBSSxVQUFVLFlBQVksT0FBTyxHQUFHLENBQUMsQ0FBQztJQUMxRyxNQUFNLGNBQWMsOEJBQThCO01BQ2hELE1BQU0sZUFBZSxhQUFhLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxVQUFVLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQ2pJLE1BQU0sT0FBTyxZQUFZLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLGFBQWEsWUFBWSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztNQUNuSixTQUFTLENBQUMsSUFBSSxFQUFFLFVBQVUsSUFBSSxDQUFDLENBQUM7TUFDaEMsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDOztJQUVGLE1BQU0sa0JBQWtCLFFBQVE7TUFDOUIsTUFBTSxhQUFhLEtBQUssQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUN2RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUTtRQUN0QyxNQUFNLFlBQVksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLE9BQU8sYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7T0FDdkQsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sZUFBZSxlQUFlLGNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDOUQsTUFBTSxhQUFhLFFBQVE7TUFDekIsTUFBTSxNQUFNLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNsQyxPQUFPLFlBQVksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDaEMsQ0FBQzs7SUFFRixNQUFNLG1CQUFtQix3QkFBd0I7TUFDL0MsTUFBTSxhQUFhLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN0QyxNQUFNLG1CQUFtQixjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDOUMsTUFBTSxtQkFBbUIsRUFBRSwyQkFBMkIsZ0JBQWdCLEVBQUUsQ0FBQztNQUN6RSxNQUFNLGVBQWUsS0FBSyxPQUFPLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxHQUFHLGdCQUFnQixDQUFDO01BQ2pILE9BQU8sS0FBSyxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztLQUN4QyxDQUFDO0lBQ0YsTUFBTSxZQUFZLHdCQUF3QjtNQUN4QyxNQUFNLGFBQWEsRUFBRSx3QkFBd0IsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7TUFDOUQsT0FBTyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksV0FBVyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7S0FDeEUsQ0FBQztJQUNGLE1BQU0sVUFBVSxxQkFBcUI7TUFDbkMsTUFBTSxRQUFRLE1BQU0sRUFBRSxDQUFDO01BQ3ZCLE1BQU0sWUFBWSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7TUFDcEMsTUFBTSxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUNwQyxNQUFNLFFBQVEsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQy9CLE1BQU0sUUFBUSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDckMsTUFBTSxRQUFRLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUMvQixNQUFNLGdCQUFnQixnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQzNELE1BQU0sT0FBTyxXQUFXLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQ25ELE1BQU0sU0FBUyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztNQUM3QyxNQUFNLGdCQUFnQixJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQztNQUM1QyxNQUFNLFVBQVUsVUFBVTtRQUN4QixTQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUN2QixDQUFDO01BQ0YsTUFBTSxhQUFhLE1BQU07UUFDdkIsU0FBUyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7T0FDcEMsQ0FBQztNQUNGLE1BQU0saUJBQWlCLE1BQU07UUFDM0IsTUFBTSxhQUFhLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxNQUFNLE9BQU8sTUFBTSxDQUFDLFVBQVUsRUFBRSxTQUFTLFNBQVMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDakcsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDekIsQ0FBQztNQUNGLE1BQU0sU0FBUyxhQUFhO1FBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUM7UUFDaEIsTUFBTSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxFQUFFLENBQUMsR0FBRyxNQUFNO1VBQ3RFLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxLQUFLLEVBQUUsR0FBRyxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hHLENBQUM7UUFDRixPQUFPLENBQUMsRUFBRSxDQUFDO09BQ1osQ0FBQztNQUNGLE1BQU0sZ0JBQWdCLGFBQWEsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztNQUN2RSxNQUFNLFVBQVUsTUFBTSxJQUFJLEtBQUssQ0FBQztNQUNoQyxNQUFNLFlBQVksaUJBQWlCLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sVUFBVSxFQUFFLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO01BQzdHLE1BQU0sS0FBSztRQUNULEtBQUssSUFBSSxJQUFJO1FBQ2IsV0FBVyxTQUFTLElBQUk7UUFDeEIsTUFBTTtRQUNOLGFBQWE7UUFDYixJQUFJO1FBQ0osU0FBUztRQUNULE9BQU87UUFDUCxPQUFPO1FBQ1AsVUFBVTtRQUNWLFNBQVMsSUFBSTtRQUNiLGNBQWM7UUFDZCxZQUFZLGFBQWEsSUFBSTtRQUM3QixNQUFNO09BQ1AsQ0FBQztNQUNGLE9BQU8sRUFBRSxDQUFDO0tBQ1gsQ0FBQzs7SUFFRixNQUFNLHFCQUFxQixxQkFBcUI7TUFDOUMsTUFBTSxhQUFhLEtBQUssQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUN2RCxPQUFPLFNBQVMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBVTtRQUN6RixPQUFPLFlBQVksQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ3pDLENBQUMsQ0FBQyxDQUFDO0tBQ0wsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLHlCQUF5QjtNQUM3QyxNQUFNOzs7T0FHTCxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUNyQixNQUFNLGFBQWEsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQ3ZELE1BQU0sZUFBZTtRQUNuQixHQUFHLElBQUk7UUFDUCxRQUFRO1VBQ04sR0FBRyxhQUFhO1VBQ2hCLEdBQUcsVUFBVTtTQUNkO1FBQ0QsVUFBVTtPQUNYLENBQUM7TUFDRixPQUFPLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztLQUN2RCxDQUFDO0lBQ0YsTUFBTSxTQUFTLGVBQWU7TUFDNUIsTUFBTSxVQUFVLFlBQVksU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO01BQ25ELE9BQU8sVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztLQUNoQyxDQUFDO0lBQ0YsTUFBTSxhQUFhLFFBQVE7TUFDekIsTUFBTSxVQUFVLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxTQUFTLENBQUM7UUFDM0QsVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUNyQixRQUFRLENBQUMsS0FBSyxDQUFDO09BQ2hCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNWLE1BQU0sWUFBWSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztNQUN2QyxNQUFNLFVBQVUsVUFBVTtRQUN4QixTQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUN2QixDQUFDO01BQ0YsTUFBTSxhQUFhLE1BQU07UUFDdkIsU0FBUyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztPQUN2QyxDQUFDO01BQ0YsTUFBTSxNQUFNLE9BQU8sSUFBSSxXQUFXLENBQUMsTUFBTSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztNQUNqRSxTQUFTLENBQUMsT0FBTyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDaEMsTUFBTSxLQUFLO1FBQ1QsR0FBRztRQUNILFdBQVcsU0FBUyxJQUFJO1FBQ3hCLFFBQVEsUUFBUSxLQUFLO1FBQ3JCLGVBQWUsS0FBSztRQUNwQixPQUFPO1FBQ1AsVUFBVTtRQUNWLFNBQVMsT0FBTyxFQUFFLENBQUM7UUFDbkIsU0FBUyxPQUFPLFFBQVE7UUFDeEIsSUFBSTtRQUNKLFdBQVcsVUFBVSxDQUFDLFVBQVUsQ0FBQztRQUNqQyxnQkFBZ0IsSUFBSTtRQUNwQixZQUFZLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDMUIsUUFBUSxFQUFFO09BQ1gsQ0FBQztNQUNGLE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ3RCLENBQUM7SUFDRixNQUFNLE9BQU8sVUFBVSxDQUFDO0lBQ3hCLE1BQU0saUJBQWlCLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRCxNQUFNLGVBQWUscUJBQXFCLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU07TUFDMUUsTUFBTSxrQkFBa0IsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRztRQUNwRCxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDYixHQUFHLElBQUk7T0FDUixDQUFDO01BQ0YsT0FBTyxhQUFhLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztLQUM3RCxDQUFDLENBQUM7SUFDSCxNQUFNLFVBQVUsUUFBUSxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM1RCxNQUFNLFVBQVUsU0FBUyxDQUFDOztJQUUxQixJQUFJLG9CQUFvQixvQ0FBb0M7TUFDMUQsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFO1FBQ2hCLE9BQU8sUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7T0FDN0IsTUFBTSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDOUMsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCLE1BQU07UUFDTCxPQUFPLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQ25DO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLGFBQWEsOEJBQThCO01BQy9DLElBQUksVUFBVSxLQUFLLElBQUksQ0FBQztNQUN4QixNQUFNLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7TUFDakQsT0FBTyxPQUFPLFdBQVcsRUFBRTtRQUN6QixVQUFVLE9BQU8sV0FBVyxDQUFDO1FBQzdCLE1BQU0sS0FBSyxZQUFZLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtVQUNqQixPQUFPLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzFCLE1BQU0sSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7VUFDbkIsTUFBTTtTQUNQO09BQ0Y7TUFDRCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7S0FDeEIsQ0FBQztJQUNGLE1BQU0sWUFBWSw4QkFBOEI7TUFDOUMsTUFBTSxLQUFLLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2hDLE9BQU8saUJBQWlCLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ3BFLENBQUM7SUFDRixNQUFNLFVBQVUsc0JBQXNCO01BQ3BDLE1BQU0sT0FBTyxRQUFRLFNBQVMsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQzNELE1BQU0sU0FBUyxNQUFNLENBQUMsS0FBSyxJQUFJLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNsRCxPQUFPLE1BQU0sSUFBSSxDQUFDLFlBQVksUUFBUSxDQUFDLENBQUM7S0FDekMsQ0FBQztJQUNGLE1BQU0sZUFBZSxzQkFBc0I7TUFDekMsTUFBTSxVQUFVLFFBQVE7UUFDdEIsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLFdBQVcsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO1VBQy9DLE1BQU0sUUFBUSxZQUFZLFFBQVEsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3ZELElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BCLE9BQU8sUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7V0FDN0I7VUFDRCxNQUFNLE1BQU0sT0FBTyxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDeEMsSUFBSSxHQUFHLE9BQU8sRUFBRSxFQUFFO1lBQ2hCLE9BQU8sR0FBRyxDQUFDO1dBQ1o7U0FDRjtRQUNELE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN4QixDQUFDO01BQ0YsT0FBTyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztLQUMzQixDQUFDOztJQUVGLE1BQU0sWUFBWSw4QkFBOEIsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDOztJQUU3RixNQUFNLFdBQVcsNkJBQTZCLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlGLE1BQU0sUUFBUSxxQkFBcUIsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUN4RSxNQUFNLGFBQWEscUJBQXFCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0QsTUFBTSxZQUFZLDZCQUE2QjtNQUM3QyxNQUFNLE9BQU8sdUJBQXVCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDMUQsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDbkUsQ0FBQzs7SUFFRixNQUFNLFlBQVksZUFBZSxDQUFDO0lBQ2xDLE1BQU0sU0FBUyxhQUFhO01BQzFCLE1BQU0sWUFBWSxTQUFTLENBQUMsU0FBUyxFQUFFLFFBQVE7UUFDN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUN0QixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsTUFBTSxLQUFLLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0IsT0FBTyxFQUFFLEtBQUssU0FBUyxJQUFJLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO09BQ3ZELENBQUMsQ0FBQztNQUNILE9BQU8sU0FBUyxLQUFLLENBQUMsT0FBTztRQUMzQixNQUFNLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1QixNQUFNLE1BQU0sV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3RELENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFVBQVUsTUFBTTtNQUNwQixNQUFNLFNBQVMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQ3JDLE1BQU0sT0FBTyxRQUFRO1FBQ25CLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQ2hDLENBQUM7TUFDRixNQUFNLFNBQVMsUUFBUTtRQUNyQixRQUFRLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO09BQzNCLENBQUM7TUFDRixPQUFPO1FBQ0wsSUFBSSxNQUFNO1FBQ1YsSUFBSTtRQUNKLE1BQU07T0FDUCxDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLGVBQWUsMEJBQTBCLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsVUFBVSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQy9HLE1BQU0sYUFBYSwwQkFBMEIsU0FBUyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxZQUFZLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDOztJQUVoSixNQUFNLFVBQVUsU0FBUyxDQUFDO0lBQzFCLElBQUksa0JBQWtCLENBQUM7SUFDdkIsQ0FBQyw4QkFBOEI7TUFDN0Isa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO01BQzVELGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztNQUNoRSxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7S0FDbkUsQ0FBQyxrQkFBa0IsS0FBSyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNwRCxNQUFNLGNBQWMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sa0JBQWtCLDhCQUE4QjtNQUNwRCxNQUFNLFdBQVcsRUFBRSxDQUFDO01BQ3BCLE1BQU0sWUFBWSxJQUFJLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztNQUN2QyxPQUFPO1FBQ0wsYUFBYSw0QkFBNEI7VUFDdkMsUUFBUSxLQUFLLENBQUM7WUFDWixTQUFTLEtBQUs7WUFDZCxNQUFNO1lBQ04sT0FBTztXQUNSLENBQUMsQ0FBQztTQUNKO1FBQ0QsaUJBQWlCLDRCQUE0QjtVQUMzQyxRQUFRLEtBQUssQ0FBQztZQUNaLFNBQVMsU0FBUztZQUNsQixNQUFNO1lBQ04sT0FBTztXQUNSLENBQUMsQ0FBQztTQUNKO1FBQ0QsYUFBYSw0QkFBNEI7VUFDdkMsUUFBUSxLQUFLLENBQUM7WUFDWixTQUFTLFdBQVc7WUFDcEIsTUFBTTtZQUNOLE9BQU87V0FDUixDQUFDLENBQUM7U0FDSjtRQUNELG9CQUFvQixtQkFBbUI7VUFDckMsUUFBUSxLQUFLLENBQUM7WUFDWixTQUFTLGtCQUFrQjtZQUMzQixNQUFNO1dBQ1AsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxrQkFBa0IsNEJBQTRCO1VBQzVDLFFBQVEsS0FBSyxDQUFDO1lBQ1osU0FBUyxVQUFVO1lBQ25CLE9BQU87WUFDUCxNQUFNO1dBQ1AsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLE1BQU07VUFDWCxNQUFNLGFBQWEsSUFBSSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7VUFDeEMsSUFBSSxVQUFVLENBQUM7Y0FDWCxXQUFXO2NBQ1gsV0FBVztjQUNYLFVBQVU7Y0FDVixVQUFVLEVBQUU7YUFDYixFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQ2YsT0FBTztXQUNSO1VBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ3JCLE9BQU8sU0FBUztZQUNoQixNQUFNLFVBQVUsR0FBRyxTQUFTO1lBQzVCLFFBQVEsYUFBYSxJQUFJO1lBQ3pCLFVBQVUsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLO2NBQzdCLElBQUksQ0FBQyxVQUFVLENBQUM7a0JBQ1osS0FBSztrQkFDTCxTQUFTO2tCQUNULFVBQVU7aUJBQ1gsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNmLE9BQU8sQ0FBQyxRQUFRLENBQUM7ZUFDbEIsTUFBTTtnQkFDTCxPQUFPLEdBQUcsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztlQUMvRTthQUNGLENBQUM7V0FDSCxDQUFDLENBQUM7U0FDSjtPQUNGLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxlQUFlLGlDQUFpQztNQUNwRCxNQUFNLFNBQVMsS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNO1FBQy9ELE1BQU0sV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sT0FBTyxDQUFDLFFBQVEsRUFBRSxLQUFLLFNBQVMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDLENBQUM7T0FDbEgsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLE9BQU8sQ0FBQyxDQUFDO01BQ3BDLFFBQVEsTUFBTTtXQUNULGtCQUFrQixPQUFPO1FBQzVCLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7V0FDbEIsa0JBQWtCLFFBQVEsRUFBRTtVQUM3QixNQUFNLFNBQVMsZUFBZSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztVQUN6RCxNQUFNLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1VBQ3pCLE1BQU0sTUFBTSxFQUFFLENBQUM7VUFDZixPQUFPLE1BQU0sQ0FBQztTQUNmO1dBQ0Usa0JBQWtCLEtBQUs7UUFDMUIsT0FBTyxJQUFJLENBQUM7T0FDYjtLQUNGLENBQUM7SUFDRixNQUFNLE9BQU87TUFDWCxtQkFBbUI7TUFDbkIsMkJBQTJCO0tBQzVCLENBQUM7SUFDRixNQUFNLFdBQVcsTUFBTTtNQUNyQixNQUFNLE1BQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQztNQUN4QixJQUFJLEdBQUcsTUFBTSxLQUFLLFNBQVMsRUFBRTtRQUMzQixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7T0FDcEgsTUFBTTtRQUNMLE9BQU8sT0FBTyxDQUFDO09BQ2hCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sY0FBYztNQUNsQixhQUFhLElBQUk7TUFDakIsaUJBQWlCLElBQUk7TUFDckIsYUFBYSxJQUFJO01BQ2pCLG9CQUFvQixJQUFJO01BQ3hCLGtCQUFrQixJQUFJO01BQ3RCLE9BQU8sSUFBSTtLQUNaLENBQUM7SUFDRixNQUFNLGVBQWUsaUNBQWlDLFlBQVksQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLE1BQU0sV0FBVyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7O0lBRXpDLE1BQU0sYUFBYSxVQUFVLENBQUM7TUFDNUIsVUFBVSxDQUFDLE1BQU0sQ0FBQztNQUNsQixVQUFVLENBQUMsY0FBYyxDQUFDO0tBQzNCLENBQUMsQ0FBQztJQUNILE1BQU0sYUFBYSxVQUFVLENBQUM7TUFDNUIsVUFBVSxDQUFDLE1BQU0sQ0FBQztNQUNsQixVQUFVLENBQUMsY0FBYyxDQUFDO0tBQzNCLENBQUMsQ0FBQztJQUNILFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxNQUFNLGVBQWUsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7O0lBRXJELE1BQU0sWUFBWSxhQUFhLENBQUMsVUFBVSxFQUFFO01BQzFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7TUFDeEIsVUFBVSxDQUFDLFNBQVMsQ0FBQztLQUN0QixDQUFDLENBQUM7SUFDSCxNQUFNLGNBQWMsTUFBTSxVQUFVLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDaEUsTUFBTSxvQkFBb0IsTUFBTSxhQUFhLENBQUMsU0FBUyxFQUFFLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkksTUFBTSxZQUFZLFlBQVksYUFBYSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDcEYsTUFBTSxvQkFBb0IsZ0NBQWdDO01BQ3hELFFBQVEsRUFBRSxDQUFDO01BQ1gsT0FBTyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEtBQUssTUFBTSxNQUFNLENBQUMsQ0FBQyxPQUFPLEtBQUs7UUFDcEYsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDakMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNOLENBQUM7SUFDRixNQUFNLFlBQVksYUFBYSxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzVGLE1BQU0sb0JBQW9CLGFBQWEsaUJBQWlCLENBQUMsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDckgsTUFBTSxrQkFBa0IsYUFBYSxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDN0YsTUFBTSwwQkFBMEIsYUFBYSxpQkFBaUIsQ0FBQyxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUM3RyxNQUFNLFdBQVcsaUJBQWlCLFdBQVcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdkUsTUFBTSxXQUFXLFFBQVEsV0FBVyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNyRCxNQUFNLFdBQVcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDOztJQUV2QyxNQUFNLE9BQU8scUVBQXFFLFlBQVksS0FBSyxNQUFNO01BQ3ZHLENBQUM7TUFDRCxDQUFDO01BQ0QsTUFBTTtNQUNOLFNBQVM7TUFDVCxTQUFTO01BQ1QsYUFBYSxpQkFBaUI7TUFDOUIsT0FBTyxDQUFDLEdBQUcsV0FBVyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQztNQUN4QyxTQUFTO0tBQ1YsQ0FBQyxDQUFDOztJQUVILE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQztNQUN6QixFQUFFLFdBQVcsRUFBRSxFQUFFO01BQ2pCLEVBQUUsV0FBVyxFQUFFLEVBQUU7TUFDakIsRUFBRSxXQUFXLEVBQUUsRUFBRTtNQUNqQixFQUFFLFdBQVcsRUFBRSxFQUFFO01BQ2pCLEVBQUUsT0FBTyxFQUFFLEVBQUU7TUFDYixFQUFFLE9BQU8sRUFBRSxFQUFFO01BQ2IsRUFBRSxNQUFNLEVBQUUsRUFBRTtNQUNaLEVBQUUsTUFBTSxFQUFFLEVBQUU7S0FDYixDQUFDLENBQUM7SUFDSCxNQUFNLFNBQVMsbUZBQW1GLE9BQU8sS0FBSyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyTCxNQUFNLGVBQWUsbUNBQW1DLE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvSCxNQUFNLGlCQUFpQixpQ0FBaUMsT0FBTyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pILE1BQU0sY0FBYyxLQUFLLFVBQVUsQ0FBQztJQUNwQyxNQUFNLGNBQWMsS0FBSyxVQUFVLENBQUM7SUFDcEMsTUFBTSxjQUFjLEtBQUssVUFBVSxDQUFDO0lBQ3BDLE1BQU0sY0FBYyxLQUFLLFVBQVUsQ0FBQztJQUNwQyxNQUFNLFVBQVUsS0FBSyxNQUFNLENBQUM7SUFDNUIsTUFBTSxVQUFVLEtBQUssTUFBTSxDQUFDO0lBQzVCLE1BQU0sU0FBUyxLQUFLLEtBQUssQ0FBQztJQUMxQixNQUFNLFNBQVMsS0FBSyxLQUFLLENBQUM7O0lBRTFCLE1BQU0sVUFBVSw0QkFBNEI7TUFDMUMsTUFBTSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7TUFDeEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFO1FBQ1gsT0FBTyxHQUFHLENBQUM7T0FDWixNQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRTtRQUNsQixPQUFPLEdBQUcsQ0FBQztPQUNaLE1BQU07UUFDTCxPQUFPLENBQUMsQ0FBQztPQUNWO0tBQ0YsQ0FBQztJQUNGLE1BQU0sUUFBUSxxQkFBcUIsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDOztJQUV2RSxNQUFNLGlCQUFpQix5QkFBeUI7TUFDOUMsUUFBUSxXQUFXO1dBQ2QsQ0FBQztRQUNKLE9BQU8sTUFBTSxFQUFFLENBQUM7V0FDYixDQUFDO1FBQ0osT0FBTyxNQUFNLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQztXQUM1QixDQUFDO1FBQ0osT0FBTyxNQUFNLEVBQUUsQ0FBQztXQUNiLENBQUM7UUFDSixPQUFPLE1BQU0sRUFBRSxHQUFHLE1BQU0sT0FBTyxDQUFDO09BQ2pDO0tBQ0YsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLDBCQUEwQixXQUFXLENBQUM7TUFDOUQsTUFBTTtNQUNOLE9BQU87TUFDUCxLQUFLO01BQ0wsUUFBUTtLQUNULEVBQUUsT0FBTyxLQUFLLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxjQUFjLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RixNQUFNLGVBQWUseUNBQXlDO01BQzVELE1BQU0sbUJBQW1CLGtCQUFrQixXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPO1FBQ3JFLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxLQUFLLElBQUksR0FBRyxLQUFLLFFBQVEsQ0FBQztRQUN6RCxNQUFNLFNBQVMsY0FBYyxHQUFHLFlBQVksSUFBSSxHQUFHLFlBQVksS0FBSyxDQUFDO1FBQ3JFLE1BQU0sYUFBYSxHQUFHLEtBQUssTUFBTSxJQUFJLEdBQUcsS0FBSyxLQUFLLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUM7UUFDekUsTUFBTSxTQUFTLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ2pELE9BQU8sY0FBYyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFLFFBQVEsTUFBTSxDQUFDLENBQUM7T0FDaEgsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDbEIsTUFBTSxlQUFlLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQzFELE1BQU0sY0FBYyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztNQUN4RCxNQUFNLGdCQUFnQixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsUUFBUSxNQUFNLENBQUMsQ0FBQztNQUNoRSxNQUFNLGlCQUFpQixnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxPQUFPLENBQUMsQ0FBQztNQUNuRSxPQUFPLE1BQU0sQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLGFBQWEsR0FBRyxZQUFZLEVBQUUsY0FBYyxHQUFHLFdBQVcsQ0FBQyxDQUFDO0tBQ3RHLENBQUM7O0lBRUYsTUFBTSxnQkFBZ0IsUUFBUSxDQUFDO0lBQy9CLE1BQU0sVUFBVSxVQUFVLE1BQU0sRUFBRSxDQUFDO0lBQ25DLE1BQU0sWUFBWSxxQkFBcUIsTUFBTSxFQUFFLEdBQUcsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLE9BQU8sTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN2RixNQUFNLFVBQVUscUJBQXFCLE1BQU0sRUFBRSxHQUFHLE1BQU0sTUFBTSxHQUFHLE9BQU8sTUFBTSxDQUFDO0lBQzdFLE1BQU0sV0FBVyxxQkFBcUIsTUFBTSxFQUFFLEdBQUcsT0FBTyxPQUFPLENBQUM7SUFDaEUsTUFBTSxXQUFXLFVBQVUsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPLENBQUM7SUFDcEQsTUFBTSxZQUFZLHFCQUFxQixNQUFNLEVBQUUsR0FBRyxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsT0FBTyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ3pGLE1BQU0sY0FBYyxVQUFVLE1BQU0sRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDO0lBQ3RELE1BQU0sY0FBYyxxQkFBcUIsTUFBTSxFQUFFLEdBQUcsT0FBTyxNQUFNLENBQUM7SUFDbEUsTUFBTSxjQUFjLDhCQUE4QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLFVBQVUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUU7TUFDbkssTUFBTSxDQUFDO01BQ1AsS0FBSyxDQUFDO0tBQ1AsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ25CLE1BQU0sY0FBYyw4QkFBOEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sVUFBVSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixDQUFDLE1BQU0sRUFBRTtNQUM1SyxPQUFPLENBQUM7TUFDUixLQUFLLENBQUM7S0FDUCxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDbkIsTUFBTSxjQUFjLDhCQUE4QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsT0FBTyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLENBQUMsTUFBTSxFQUFFO01BQzVLLE1BQU0sQ0FBQztNQUNQLFFBQVEsQ0FBQztLQUNWLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNuQixNQUFNLGNBQWMsOEJBQThCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsT0FBTyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLENBQUMsTUFBTSxFQUFFO01BQ3JMLE9BQU8sQ0FBQztNQUNSLFFBQVEsQ0FBQztLQUNWLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNuQixNQUFNLFVBQVUsOEJBQThCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsT0FBTyxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3hNLE1BQU0sVUFBVSw4QkFBOEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUM1TCxNQUFNLFNBQVMsOEJBQThCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxPQUFPLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDNUwsTUFBTSxTQUFTLDhCQUE4QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLE9BQU8sS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN0TSxNQUFNLFFBQVEsTUFBTTtNQUNsQixXQUFXO01BQ1gsV0FBVztNQUNYLFdBQVc7TUFDWCxXQUFXO01BQ1gsT0FBTztNQUNQLE9BQU87TUFDUCxNQUFNO01BQ04sTUFBTTtLQUNQLENBQUM7SUFDRixNQUFNLFdBQVcsTUFBTTtNQUNyQixXQUFXO01BQ1gsV0FBVztNQUNYLFdBQVc7TUFDWCxXQUFXO01BQ1gsT0FBTztNQUNQLE9BQU87TUFDUCxNQUFNO01BQ04sTUFBTTtLQUNQLENBQUM7SUFDRixNQUFNLGVBQWUsTUFBTTtNQUN6QixXQUFXO01BQ1gsV0FBVztNQUNYLFdBQVc7TUFDWCxXQUFXO01BQ1gsT0FBTztNQUNQLE9BQU87S0FDUixDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsTUFBTTtNQUM1QixXQUFXO01BQ1gsV0FBVztNQUNYLFdBQVc7TUFDWCxXQUFXO01BQ1gsT0FBTztNQUNQLE9BQU87S0FDUixDQUFDO0lBQ0YsTUFBTSxlQUFlLE1BQU07TUFDekIsV0FBVztNQUNYLFdBQVc7TUFDWCxXQUFXO01BQ1gsV0FBVztNQUNYLE9BQU87TUFDUCxPQUFPO0tBQ1IsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLE1BQU07TUFDNUIsV0FBVztNQUNYLFdBQVc7TUFDWCxXQUFXO01BQ1gsV0FBVztNQUNYLE9BQU87TUFDUCxPQUFPO0tBQ1IsQ0FBQzs7SUFFRixNQUFNLGlCQUFpQix1QkFBdUIsT0FBTyxVQUFVLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUMsT0FBTyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4SSxNQUFNLFdBQVcsaUJBQWlCLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSx3QkFBd0I7UUFDakYsTUFBTSxhQUFhLGFBQWEsU0FBUyxDQUFDO1FBQzFDLE1BQU0sV0FBVyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEMsTUFBTSxnQkFBZ0IsT0FBTyxDQUFDO1FBQzlCLE1BQU0saUJBQWlCLGNBQWMsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDL0QsTUFBTSxDQUFDLGNBQWMsRUFBRSxNQUFNO1VBQzNCLE1BQU0sY0FBYyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7VUFDbkMsTUFBTSxnQkFBZ0IsV0FBVyxPQUFPLENBQUM7VUFDekMsTUFBTSxPQUFPLFlBQVksQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxTQUFTLFFBQVEsQ0FBQyxFQUFFLGFBQWEsRUFBRSxhQUFhLEtBQUssQ0FBQyxDQUFDO1VBQ2xJLFdBQVcsVUFBVSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN4QyxDQUFDLENBQUM7T0FDSixDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVQLElBQUksK0JBQStCLE1BQU0sT0FBTyxDQUFDO1FBQzdDLFdBQVcsSUFBSTtRQUNmLFFBQVEsUUFBUTtLQUNuQixDQUFDLENBQUM7O0lBRUgsSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxNQUFNLE1BQU0sRUFBRSxTQUFTLENBQUM7UUFDeEUsZUFBZSxDQUFDLFdBQVcsQ0FBQztRQUM1QixTQUFTLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDO09BQ2hDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFUixNQUFNLGVBQWUsK0JBQStCLGNBQWMsQ0FBQyxhQUFhO01BQzlFLFFBQVEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ3RDLENBQUMsQ0FBQztJQUNILE1BQU0sWUFBWSx3QkFBd0IsU0FBUyxDQUFDLGdDQUFnQztNQUNsRixDQUFDLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztLQUMvQixDQUFDLENBQUM7SUFDSCxNQUFNLFdBQVcsOENBQThDO01BQzdELE1BQU0sZUFBZSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDdkMsTUFBTSxlQUFlLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUM1RSxPQUFPLFFBQVEsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztLQUMvRSxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsNkNBQTZDO01BQ2pFLE1BQU0sZUFBZSxLQUFLLENBQUM7TUFDM0IsTUFBTSxlQUFlLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNwRSxPQUFPLFFBQVEsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztLQUMvRSxDQUFDO0lBQ0YsTUFBTSxVQUFVLGlDQUFpQztNQUMvQyxNQUFNLElBQUksWUFBWSxPQUFPLEtBQUs7UUFDaEMsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxPQUFPLFNBQVMsT0FBTyxDQUFDLEVBQUUsTUFBTSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTTtVQUM5RCxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxHQUFHLEtBQUssR0FBRyxlQUFlLEdBQUcsT0FBTyxDQUFDLENBQUM7U0FDNUcsRUFBRSxRQUFRO1VBQ1QsTUFBTSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7VUFDakQsT0FBTyxXQUFXLE1BQU0sQ0FBQyxTQUFTLEVBQUU7WUFDbEMsU0FBUztZQUNULElBQUksT0FBTztZQUNYLElBQUksTUFBTTtXQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ2pCLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixPQUFPLGtCQUFrQixDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7S0FDcEQsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLFNBQVM7TUFDL0IsS0FBSyxJQUFJO01BQ1QsT0FBTyxTQUFTO0tBQ2pCLENBQUMsQ0FBQztJQUNILE1BQU0sV0FBVyxrRUFBa0U7TUFDakYsTUFBTSxZQUFZLFFBQVEsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7TUFDekYsTUFBTSxjQUFjLEtBQUssQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7TUFDakYsTUFBTSxlQUFlLEtBQUssQ0FBQyxLQUFLLEVBQUUsdUJBQXVCLGNBQWMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztNQUM1RixNQUFNLEtBQUs7UUFDVCxHQUFHLFlBQVk7UUFDZixHQUFHLFdBQVc7UUFDZCxRQUFRLEtBQUssQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDO1FBQ3BDLFFBQVEsUUFBUTtVQUNkLE1BQU0sV0FBVyxZQUFZLENBQUMsSUFBSSxHQUFHLFNBQVMsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7VUFDcEUsT0FBTztZQUNMLEtBQUssSUFBSTtZQUNULE9BQU87Y0FDTCxRQUFRLFFBQVE7Y0FDaEIsRUFBRTtjQUNGLGFBQWEsTUFBTSxDQUFDLE1BQU0sWUFBWSxDQUFDLElBQUksR0FBRyxTQUFTLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO2NBQzdFLGVBQWUsSUFBSTtjQUNuQixLQUFLO2FBQ047V0FDRixDQUFDO1NBQ0g7UUFDRCxRQUFRLFVBQVUsQ0FBQyxZQUFZLENBQUM7UUFDaEMsU0FBUyxnQkFBZ0I7VUFDdkIsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUUsOEJBQThCO1lBQ3BGLE9BQU8sU0FBUyxDQUFDLElBQUksRUFBRSxhQUFhLE9BQU8sRUFBRSxhQUFhLE1BQU0sQ0FBQyxDQUFDO1dBQ25FLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDL0I7UUFDRCxNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDdEIsVUFBVSxRQUFRO1VBQ2hCLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCO1lBQzFDLE1BQU0sWUFBWSxLQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVELE9BQU8sU0FBUyxDQUFDLGFBQWEsT0FBTyxFQUFFLGFBQWEsTUFBTSxDQUFDLENBQUM7V0FDN0QsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDZDtPQUNGLENBQUM7TUFDRixPQUFPLEVBQUUsQ0FBQztLQUNYLENBQUM7O0lBRUYsTUFBTSxXQUFXLGdCQUFnQixPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkQsTUFBTSxlQUFlLFNBQVMsQ0FBQztNQUM3QixVQUFVLENBQUMsUUFBUSxDQUFDO01BQ3BCLFVBQVUsQ0FBQyxNQUFNLENBQUM7TUFDbEIsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7TUFDdkIsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7TUFDckIsU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7TUFDM0IsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7S0FDdkIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxXQUFXLFFBQVE7TUFDdkIsTUFBTSxRQUFRLFlBQVksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDbkYsT0FBTyxRQUFRLENBQUMsS0FBSyxPQUFPLEVBQUUsS0FBSyxLQUFLLEVBQUUsS0FBSyxPQUFPLEVBQUUsS0FBSyxLQUFLLEVBQUUsS0FBSyxNQUFNLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FBQztLQUMvRixDQUFDO0lBQ0YsTUFBTSxhQUFhLFNBQVMsQ0FBQztNQUMzQixVQUFVLENBQUMsV0FBVyxDQUFDO01BQ3ZCLFVBQVUsQ0FBQyxVQUFVLENBQUM7TUFDdEIsVUFBVSxDQUFDLE1BQU0sQ0FBQztNQUNsQixTQUFTLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztNQUN2QixTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztNQUNyQixTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQztNQUMzQixTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztLQUN2QixDQUFDLENBQUM7SUFDSCxNQUFNLGNBQWMsUUFBUTtNQUMxQixNQUFNLFFBQVEsWUFBWSxDQUFDLHNCQUFzQixHQUFHLElBQUksS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNqRixPQUFPLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxVQUFVLEVBQUUsS0FBSyxTQUFTLENBQUMsRUFBRSxLQUFLLEtBQUssRUFBRSxLQUFLLE9BQU8sRUFBRSxLQUFLLEtBQUssRUFBRSxLQUFLLE1BQU0sRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDO0tBQ2pJLENBQUM7SUFDRixNQUFNLFNBQVMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDOztJQUVyQyxNQUFNLFlBQVksUUFBUSxDQUFDO01BQ3pCLFFBQVEsZUFBZTtNQUN2QixNQUFNLFdBQVc7TUFDakIsUUFBUSxlQUFlO0tBQ3hCLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFlBQVkscUJBQXFCLElBQUksQ0FBQztNQUMxQyxTQUFTLEVBQUU7TUFDWCxRQUFRLFNBQVMsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsVUFBVSxVQUFVLEVBQUU7S0FDN0QsQ0FBQyxDQUFDOztJQUVILElBQUksOEJBQThCLE1BQU0sT0FBTyxDQUFDO1FBQzVDLFdBQVcsSUFBSTtRQUNmLFNBQVMsU0FBUztLQUNyQixDQUFDLENBQUM7O0lBRUgsTUFBTSxVQUFVLFdBQVcsT0FBTyxJQUFJLE1BQU0sRUFBRSxDQUFDO0lBQy9DLE1BQU0sU0FBUyxXQUFXLE9BQU8sSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUM3QyxNQUFNLFdBQVcsV0FBVztNQUMxQixNQUFNLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7TUFDdEMsT0FBTyxPQUFPLElBQUksS0FBSyxJQUFJLGNBQWMsQ0FBQztLQUMzQyxDQUFDO0lBQ0YsTUFBTSxXQUFXLENBQUMsT0FBTyxXQUFXLEVBQUUsS0FBSyxRQUFRLEtBQUssQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLFFBQVEsQ0FBQyxDQUFDO0lBQzNHLE1BQU0sU0FBUyxXQUFXLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssT0FBTyxJQUFJLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7O0lBRWxHLE1BQU0sYUFBYSxrQkFBa0I7TUFDbkMsTUFBTSxNQUFNLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUNuQyxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVztRQUM1QyxNQUFNLFdBQVcsUUFBUSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNDLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7T0FDM0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUM1QixPQUFPLEtBQUssQ0FBQyxZQUFZO1FBQ3ZCLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTTtVQUNsRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbkIsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUNWLENBQUMsQ0FBQztNQUNILE9BQU8sTUFBTSxDQUFDO0tBQ2YsQ0FBQzs7SUFFRixNQUFNLGdCQUFnQix3Q0FBd0M7TUFDNUQsTUFBTSxPQUFPLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQztNQUMvQixPQUFPO1FBQ0wsUUFBUTtRQUNSLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3BCLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ2xCLE9BQU8sS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3RCLFFBQVEsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDO09BQ3pCLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxZQUFZLGFBQWE7TUFDN0IsR0FBRyxRQUFRO01BQ1gsVUFBVSxRQUFRLEtBQUssQ0FBQyxRQUFRLFNBQVMsQ0FBQztLQUMzQyxDQUFDLENBQUM7SUFDSCxNQUFNLG1CQUFtQix1QkFBdUI7TUFDOUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztLQUMxQyxDQUFDOztJQUVGLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQztNQUN6QixFQUFFLE1BQU0sRUFBRSxFQUFFO01BQ1o7UUFDRSxVQUFVO1VBQ1IsR0FBRztVQUNILEdBQUc7VUFDSCxPQUFPO1VBQ1AsUUFBUTtTQUNUO09BQ0Y7TUFDRDtRQUNFLE9BQU87VUFDTCxHQUFHO1VBQ0gsR0FBRztVQUNILE9BQU87VUFDUCxRQUFRO1NBQ1Q7T0FDRjtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sd0JBQXdCLDRDQUE0QztNQUN4RSxNQUFNLGVBQWUsUUFBUSxLQUFLLENBQUM7TUFDbkMsTUFBTSxZQUFZLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztNQUNyQyxNQUFNLFlBQVksWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQ3JDLE1BQU0sZ0JBQWdCLFlBQVksTUFBTSxDQUFDO01BQ3pDLE1BQU0saUJBQWlCLFlBQVksT0FBTyxDQUFDO01BQzNDLE1BQU0sZ0JBQWdCLEtBQUssSUFBSSxTQUFTLEdBQUcsYUFBYSxDQUFDLENBQUM7TUFDMUQsTUFBTSxpQkFBaUIsTUFBTSxJQUFJLFNBQVMsR0FBRyxjQUFjLENBQUMsQ0FBQztNQUM3RCxNQUFNLE9BQU8sUUFBUSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7TUFDdEMsTUFBTSxNQUFNLFFBQVEsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQ3JDLE1BQU0sUUFBUSxRQUFRLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztNQUMzQyxNQUFNLFNBQVMsUUFBUSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7TUFDN0MsTUFBTSxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7TUFDN0IsT0FBTyxNQUFNLENBQUMsUUFBUSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLE1BQU0sYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxNQUFNLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxNQUFNLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLE1BQU0sYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ3ZkLENBQUM7SUFDRixNQUFNLGFBQWEsc0JBQXNCLE1BQU0sS0FBSyxDQUFDLE1BQU07TUFDekQsTUFBTSxlQUFlLFFBQVEsS0FBSyxDQUFDO01BQ25DLE9BQU8sYUFBYSxDQUFDLFVBQVUsRUFBRSxRQUFRLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLFFBQVEsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsUUFBUSxLQUFLLEVBQUUsRUFBRSxRQUFRLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDbEksRUFBRSx5QkFBeUI7TUFDMUIsT0FBTyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ3pFLEVBQUUseUJBQXlCO01BQzFCLE9BQU8scUJBQXFCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztLQUN0RSxDQUFDLENBQUM7SUFDSCxNQUFNLFFBQVEscUJBQXFCO01BQ2pDLE1BQU0sTUFBTSxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQ25DLE1BQU0sV0FBVyxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU07UUFDM0MsTUFBTSxTQUFTLEtBQUssRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7T0FDN0QsQ0FBQyxDQUFDO01BQ0gsTUFBTSxRQUFRLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUNsQyxNQUFNLFNBQVMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ25DLE9BQU8sTUFBTSxDQUFDLFFBQVEsS0FBSyxFQUFFLFFBQVEsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztLQUMzRCxDQUFDO0lBQ0YsTUFBTSxXQUFXLHVCQUF1QixTQUFTLEtBQUssQ0FBQyxNQUFNLE1BQU0sS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEVBQUUsWUFBWSxNQUFNLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU07TUFDcEssTUFBTSxNQUFNLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztNQUN4RCxPQUFPLE1BQU0sQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxRQUFRLE1BQU0sRUFBRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0tBQ25FLENBQUMsQ0FBQyxDQUFDO0lBQ0osTUFBTSxjQUFjLGtCQUFrQjtNQUNwQyxNQUFNLE1BQU0sYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUNoQyxNQUFNLGVBQWUsTUFBTTtRQUN6QixNQUFNLGNBQWMsS0FBSyxFQUFFLENBQUM7UUFDNUIsT0FBTyxHQUFHLFVBQVUsQ0FBQyxDQUFDLFdBQVcsS0FBSyxFQUFFLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQztPQUMzRCxDQUFDO01BQ0YsT0FBTyxNQUFNLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO0tBQ3BFLENBQUM7SUFDRixNQUFNLFNBQVMsMENBQTBDLE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkcsS0FBSyxLQUFLLENBQUM7SUFDWCxNQUFNLGFBQWEsS0FBSyxTQUFTLENBQUM7SUFDbEMsTUFBTSxVQUFVLEtBQUssTUFBTSxDQUFDOztJQUU1QixNQUFNLFNBQVMsd0JBQXdCO01BQ3JDLFNBQVM7TUFDVCxNQUFNO0tBQ1AsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxNQUFNLHVCQUF1QixNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDOztJQUU3RCxNQUFNLHFCQUFxQixzQkFBc0IsQ0FBQztJQUNsRCxNQUFNLGlCQUFpQix3QkFBd0I7TUFDN0MsS0FBSyxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxTQUFTLENBQUMsQ0FBQztLQUMvQyxDQUFDO0lBQ0YsTUFBTSxlQUFlLFdBQVcsTUFBTSxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sVUFBVSxXQUFXLFFBQVEsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQzs7SUFFakUsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDO01BQ3pCLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFO01BQ3ZCO1FBQ0UsT0FBTztVQUNMLFlBQVk7VUFDWixVQUFVO1VBQ1YsVUFBVTtVQUNWLFdBQVc7U0FDWjtPQUNGO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxvQkFBb0IsaUJBQWlCO01BQ3pDLE1BQU07Ozs7O09BS0wsR0FBRyxNQUFNLENBQUM7TUFDWCxNQUFNLG9DQUFvQyxHQUFHLEdBQUcsQ0FBQztNQUNqRCxNQUFNLFlBQVksQ0FBQyxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDO01BQ25ELE1BQU0sWUFBWSxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUM7TUFDcEQsTUFBTSxpQkFBaUIsU0FBUyxJQUFJLFNBQVMsQ0FBQztNQUM5QyxNQUFNLGdCQUFnQixLQUFLLElBQUksV0FBVyxJQUFJLEtBQUssSUFBSSxPQUFPLENBQUM7TUFDL0QsTUFBTSxpQkFBaUIsTUFBTSxJQUFJLFlBQVksSUFBSSxNQUFNLElBQUksT0FBTyxDQUFDO01BQ25FLE1BQU0sZUFBZSxhQUFhLElBQUksY0FBYyxDQUFDO01BQ3JELE1BQU0sV0FBVyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLE9BQU8sR0FBRyxXQUFXLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQztNQUNuRixNQUFNLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxPQUFPLEdBQUcsWUFBWSxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUM7TUFDdEYsT0FBTztRQUNMLGNBQWM7UUFDZCxZQUFZO1FBQ1osUUFBUTtRQUNSLFFBQVE7T0FDVCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0saUJBQWlCLG1CQUFtQjtNQUN4QyxNQUFNOzs7OztPQUtMLEdBQUcsUUFBUSxDQUFDO01BQ2IsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLENBQUM7TUFDbEMsTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUM7TUFDcEQsTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUcsTUFBTSxDQUFDLENBQUM7TUFDdEQsTUFBTSxjQUFjLEtBQUssQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzVDLE1BQU0sY0FBYyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztNQUM1QyxNQUFNLGtCQUFrQixJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxFQUFFLFdBQVcsQ0FBQyxHQUFHLFdBQVcsQ0FBQztNQUNqRixNQUFNLG1CQUFtQixJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLFlBQVksQ0FBQyxHQUFHLFdBQVcsQ0FBQztNQUNwRixPQUFPLE1BQU0sQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0tBQzVFLENBQUM7SUFDRixNQUFNLGVBQWUsNEJBQTRCO01BQy9DLE1BQU0sY0FBYyxVQUFVLENBQUMsR0FBRyxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQztNQUN0RCxNQUFNLGdCQUFnQixVQUFVLENBQUMsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztNQUN4RCxNQUFNLFlBQVksWUFBWSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO01BQ3JGLE1BQU0sZ0JBQWdCLFVBQVUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO01BQ3ZELE1BQU0sZ0JBQWdCLFVBQVUsQ0FBQyxNQUFNLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO01BQ3ZELE1BQU0sV0FBVyxjQUFjLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7TUFDeEYsT0FBTztRQUNMLFFBQVE7UUFDUixTQUFTO09BQ1YsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFVBQVUsd0NBQXdDO01BQ3RELE1BQU0sU0FBUyxTQUFTLE9BQU8sQ0FBQztNQUNoQyxNQUFNLGVBQWUsTUFBTSxPQUFPLENBQUM7TUFDbkMsTUFBTSxpQkFBaUIsWUFBWSxDQUFDLFFBQVEsRUFBRSxTQUFTLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztNQUNuRixNQUFNLE9BQU8sU0FBUyxFQUFFLEdBQUcsWUFBWSxLQUFLLENBQUM7TUFDN0MsTUFBTSxPQUFPLFNBQVMsRUFBRSxHQUFHLFlBQVksSUFBSSxDQUFDO01BQzVDLE1BQU0sTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDOUMsTUFBTSxrREFBa0QsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7TUFDbEcsTUFBTSxPQUFPLGNBQWMsSUFBSSxZQUFZLENBQUM7TUFDNUMsTUFBTSxZQUFZLElBQUksR0FBRyxHQUFHLEdBQUcsY0FBYyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztNQUNuRSxNQUFNLGtCQUFrQixTQUFTLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxPQUFPLEdBQUcsQ0FBQyxDQUFDO01BQ3BFLE1BQU0scUJBQXFCLEdBQUcsWUFBWSxDQUFDLFNBQVMsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztNQUNyRixNQUFNLGFBQWE7UUFDakIsTUFBTSxTQUFTO1FBQ2YsU0FBUztRQUNULFFBQVE7UUFDUixXQUFXLFNBQVMsVUFBVTtRQUM5QixXQUFXLFNBQVMsVUFBVTtRQUM5QixTQUFTO1VBQ1AsSUFBSSxNQUFNLFVBQVU7VUFDcEIsS0FBSyxNQUFNLFdBQVc7U0FDdkI7UUFDRCxRQUFRLFNBQVMsTUFBTTtRQUN2QixPQUFPLElBQUk7T0FDWixDQUFDO01BQ0YsT0FBTyxJQUFJLElBQUksU0FBUyxVQUFVLEdBQUcsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7S0FDM0gsQ0FBQztJQUNGLE1BQU0sV0FBVyxpRUFBaUU7TUFDaEYsTUFBTSxhQUFhLFVBQVUsTUFBTSxDQUFDO01BQ3BDLE1BQU0sY0FBYyxVQUFVLE9BQU8sQ0FBQztNQUN0QyxNQUFNLGlCQUFpQix1REFBdUQ7UUFDNUUsTUFBTSxPQUFPLE1BQU0sQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDckUsTUFBTSxnQkFBZ0IsT0FBTyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sYUFBYSxLQUFLLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFLDJEQUEyRDtVQUM5RyxNQUFNLFdBQVcsU0FBUyxLQUFLLFlBQVksR0FBRyxXQUFXLEdBQUcsUUFBUSxJQUFJLFdBQVcsR0FBRyxRQUFRLEdBQUcsQ0FBQyxTQUFTLElBQUksWUFBWSxDQUFDO1VBQzVILE9BQU8sUUFBUSxHQUFHLGFBQWEsR0FBRyxLQUFLLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUMxRixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxNQUFNLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBVTtRQUN0QyxNQUFNLFdBQVcsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztPQUN4QyxFQUFFLEtBQUssTUFBTSxDQUFDO1FBQ2IsTUFBTSxTQUFTO1FBQ2YsV0FBVyxVQUFVLE9BQU87UUFDNUIsVUFBVSxVQUFVLE1BQU07UUFDMUIsV0FBVyxXQUFXLEVBQUU7UUFDeEIsV0FBVyxXQUFXO1FBQ3RCLFNBQVM7VUFDUCxJQUFJLEVBQUU7VUFDTixLQUFLLEVBQUU7U0FDUjtRQUNELFFBQVEsTUFBTTtRQUNkLE9BQU8sU0FBUyxFQUFFO09BQ25CLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUNuQixPQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztLQUNyQyxDQUFDOztJQUVGLE1BQU0sWUFBWSxZQUFZO01BQzVCLE1BQU0sVUFBVSxJQUFJLENBQUMsUUFBUSxLQUFLLEVBQUUsQ0FBQyxDQUFDO01BQ3RDLE1BQU0sU0FBUyxNQUFNLE9BQU8sSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUNsRCxNQUFNLFFBQVEsTUFBTTtRQUNsQixNQUFNLEVBQUUsQ0FBQztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQztPQUM5QixDQUFDO01BQ0YsTUFBTSxRQUFRLE1BQU0sT0FBTyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7TUFDM0MsTUFBTSxNQUFNLE1BQU0sT0FBTyxJQUFJLEVBQUUsQ0FBQztNQUNoQyxNQUFNLE1BQU0sS0FBSztRQUNmLE1BQU0sRUFBRSxDQUFDO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUMvQixDQUFDO01BQ0YsT0FBTztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsR0FBRztRQUNILEdBQUc7T0FDSixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sY0FBYyxNQUFNLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN0RCxNQUFNLGFBQWEsTUFBTSxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDcEQsTUFBTSxVQUFVLE1BQU07TUFDcEIsTUFBTSxVQUFVLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNoQyxNQUFNLEtBQUssS0FBSyxPQUFPLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDdEMsT0FBTztRQUNMLEdBQUcsT0FBTztRQUNWLEVBQUU7T0FDSCxDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLFNBQVMsTUFBTSxDQUFDO0lBQ3RCLE1BQU0sT0FBTyw2QkFBNkIsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xGLE1BQU0sVUFBVSw2QkFBNkIsU0FBUyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3hGLE1BQU0sZUFBZSxjQUFjLENBQUM7O0lBRXBDLE1BQU0sYUFBYTtNQUNqQixLQUFLO01BQ0wsUUFBUTtNQUNSLE9BQU87TUFDUCxNQUFNO0tBQ1AsQ0FBQztJQUNGLE1BQU0sWUFBWSw2QkFBNkIsQ0FBQztJQUNoRCxNQUFNLG9CQUFvQix5QkFBeUIsTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZGLE1BQU0sMkJBQTJCLHlDQUF5QztNQUN4RSxPQUFPLGFBQWEsT0FBTyxDQUFDLFVBQVU7UUFDcEMsTUFBTSxPQUFPLFVBQVUsS0FBSyxDQUFDO1FBQzdCLE9BQU8sSUFBSSxLQUFLLEtBQUssR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUNoRSxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxhQUFhLDRCQUE0QjtNQUM3QyxNQUFNLFFBQVEsU0FBUyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNwRCxPQUFPLE1BQU0sQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCO1FBQzFDLE1BQU0sV0FBVyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxNQUFNLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7T0FDL0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUNiLENBQUM7SUFDRixNQUFNLHdCQUF3QixXQUFXO01BQ3ZDLE1BQU0sTUFBTSxRQUFRO1FBQ2xCLE1BQU0sUUFBUSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25DLE1BQU0sUUFBUSxLQUFLLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQyxPQUFPLFFBQVEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7T0FDcEMsQ0FBQztNQUNGLE1BQU0sUUFBUSxTQUFTO1FBQ3JCLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1VBQzVDLE1BQU0sTUFBTSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7VUFDOUIsT0FBTyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO1NBQ2pELE1BQU07VUFDTCxPQUFPLENBQUMsQ0FBQztTQUNWO09BQ0YsQ0FBQztNQUNGLE1BQU0sUUFBUSxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztNQUN0QyxNQUFNLFdBQVcsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7TUFDNUMsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLGlCQUFpQjtRQUN0QyxNQUFNLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxPQUFPLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUM1QixFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ1AsQ0FBQztJQUNGLE1BQU0sMkJBQTJCLHlCQUF5QjtNQUN4RCxNQUFNLGdCQUFnQixVQUFVLEVBQUUsQ0FBQztNQUNuQyxNQUFNLG1CQUFtQixVQUFVLEVBQUUsQ0FBQztNQUN0QyxJQUFJLEtBQUssQ0FBQztNQUNWLE1BQU0scUJBQXFCLEtBQUs7UUFDOUIsSUFBSSxFQUFFLENBQUM7UUFDUCxNQUFNLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLGNBQWMsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDckYsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDO09BQ3RHLENBQUM7TUFDRixNQUFNLGlCQUFpQixLQUFLO1FBQzFCLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFO1VBQzFDLGFBQWEsTUFBTSxFQUFFLENBQUM7VUFDdEIsZ0JBQWdCLE1BQU0sRUFBRSxDQUFDO1VBQ3pCLE1BQU0sT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO1VBQzlELElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxhQUFhLEVBQUUsRUFBRTtZQUNoRCxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEIsUUFBUSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM3QixRQUFRLENBQUMsT0FBTyxFQUFFLFVBQVUsUUFBUSxDQUFDLENBQUM7V0FDdkM7U0FDRjtPQUNGLENBQUM7TUFDRixNQUFNLGtCQUFrQixJQUFJLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxFQUFFLEtBQUs7UUFDNUQsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRTtVQUN6QixlQUFlLE9BQU8sRUFBRSxDQUFDO1VBQ3pCLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztVQUNsRSxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1NBQ3pFO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxXQUFXLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ2hELHFCQUFxQixDQUFDLE1BQU07UUFDMUIsUUFBUSxVQUFVLENBQUMsY0FBYyxFQUFFLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNsRCxLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztPQUNsQyxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxxQkFBcUIseUJBQXlCO01BQ2xELEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVSxRQUFRLENBQUMsQ0FBQztNQUNuQyxNQUFNLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsV0FBVztRQUN6QyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7T0FDOUIsQ0FBQyxDQUFDO01BQ0gsd0JBQXdCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQy9DLENBQUM7SUFDRixNQUFNLHFCQUFxQixvRUFBb0U7TUFDN0YsTUFBTSxtQkFBbUIsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztNQUN2RixJQUFJLGdCQUFnQixJQUFJLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRTtRQUM5RCxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sT0FBTyxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sdUJBQXVCLFVBQVUsQ0FBQyxNQUFNLEVBQUU7VUFDOUMsR0FBRyxRQUFRO1VBQ1gsSUFBSTtTQUNMLENBQUMsQ0FBQztRQUNILE1BQU0seUJBQXlCLFdBQVcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNGLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxFQUFFO1VBQ2hELFVBQVUsQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztVQUM1QyxJQUFJLGdCQUFnQixFQUFFO1lBQ3BCLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztXQUN6QztVQUNELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNqQjtPQUNGLE1BQU07UUFDTCxRQUFRLENBQUMsT0FBTyxFQUFFLFVBQVUsUUFBUSxDQUFDLENBQUM7T0FDdkM7S0FDRixDQUFDOztJQUVGLE1BQU0sY0FBYyxNQUFNO01BQ3hCLE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQztNQUNwQixRQUFRLFVBQVUsQ0FBQyxDQUFDLENBQUM7S0FDdEIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxTQUFTLDBDQUEwQztNQUN2RCxRQUFRLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO01BQ2hDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDL0IsTUFBTSxhQUFhLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUN4QyxPQUFPLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxPQUFPLENBQUMsQ0FBQztLQUM5RixDQUFDO0lBQ0YsTUFBTSxhQUFhLHVCQUF1QjtNQUN4QyxNQUFNLFlBQVksUUFBUSxRQUFRLENBQUM7TUFDbkMsUUFBUSxDQUFDLE9BQU8sRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDO01BQ2pDLEtBQUssQ0FBQyxPQUFPLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQztLQUM5QixDQUFDO0lBQ0YsTUFBTSxZQUFZLGdDQUFnQztNQUNoRCxNQUFNLG9CQUFvQixPQUFPLGtCQUFrQixDQUFDO01BQ3BELGlCQUFpQixDQUFDLE9BQU8sRUFBRSxRQUFRLFVBQVUsQ0FBQyxDQUFDO0tBQ2hELENBQUM7SUFDRixNQUFNLFdBQVcsZ0NBQWdDO01BQy9DLE1BQU0sbUJBQW1CLE9BQU8saUJBQWlCLENBQUM7TUFDbEQsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFFBQVEsU0FBUyxDQUFDLENBQUM7S0FDOUMsQ0FBQztJQUNGLE1BQU0sYUFBYSxnQ0FBZ0M7TUFDakQsTUFBTSxjQUFjLFVBQVUsQ0FBQyxPQUFPLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztNQUN6RCxPQUFPLFdBQVcsS0FBSyxDQUFDLGNBQWM7UUFDcEMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLE9BQU8sT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sY0FBYyxDQUFDLENBQUM7T0FDdkcsQ0FBQyxDQUFDO01BQ0gsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQ3hDLENBQUM7SUFDRixNQUFNLGVBQWUsdUJBQXVCO01BQzFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxVQUFVLENBQUMsQ0FBQztLQUM3QyxDQUFDOztJQUVGLE1BQU0sZUFBZSx3QkFBd0I7TUFDM0MsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0tBQzFDLENBQUM7SUFDRixNQUFNLFdBQVcsVUFBVSxDQUFDLHdCQUF3QjtNQUNsRCxZQUFZLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQ2pDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7UUFDZCxjQUFjLFFBQVE7UUFDdEIsY0FBYyxNQUFNO09BQ3JCLENBQUMsQ0FBQztLQUNKLENBQUMsQ0FBQztJQUNILE1BQU0sZUFBZSxVQUFVLENBQUMsd0JBQXdCO01BQ3RELFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDbEMsQ0FBQyxDQUFDOztJQUVILE1BQU0sWUFBWSw0QkFBNEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsR0FBRyxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25HLE1BQU0sU0FBUyw2RkFBNkY7TUFDMUcsTUFBTSxvQkFBb0IsU0FBUyxDQUFDLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQ3RGLE1BQU0sbUJBQW1CLFNBQVMsQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDOUUsTUFBTSxZQUFZLE1BQU0sVUFBVSxDQUFDO01BQ25DLE1BQU0sU0FBUyxNQUFNLE9BQU8sQ0FBQztNQUM3QixNQUFNLFVBQVU7UUFDZCxRQUFRLFFBQVEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDO1FBQ25DLE1BQU07UUFDTixZQUFZLE9BQU87UUFDbkIsaUJBQWlCO1FBQ2pCLGdCQUFnQjtRQUNoQixhQUFhO1FBQ2IsVUFBVTtPQUNYLENBQUM7TUFDRixPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNoRCxDQUFDO0lBQ0YsTUFBTSxLQUFLLHlDQUF5QztNQUNsRCxNQUFNLFdBQVcsTUFBTSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQzdELFVBQVUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQ3ZDLFlBQVksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDaEMsVUFBVSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztNQUM5QixTQUFTLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztNQUN0QyxRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztNQUNyQyxPQUFPO1FBQ0wsUUFBUSxRQUFRLE9BQU87UUFDdkIsV0FBVyxRQUFRLFVBQVU7T0FDOUIsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxnQkFBZ0I7TUFDcEIsY0FBYztNQUNkLFdBQVc7TUFDWCxZQUFZO01BQ1osYUFBYTtNQUNiLEtBQUs7TUFDTCxRQUFRO01BQ1IsTUFBTTtNQUNOLE9BQU87TUFDUCxPQUFPO0tBQ1IsQ0FBQztJQUNGLE1BQU0sT0FBTyw0QkFBNEIsZ0JBQWdCLENBQUMsS0FBSztNQUM3RCxNQUFNLGVBQWUsT0FBTyxHQUFHLGFBQWEsQ0FBQztNQUM3QyxNQUFNLGVBQWUsT0FBTyxHQUFHLGFBQWEsQ0FBQztNQUM3QyxNQUFNLGFBQWEsUUFBUSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDMUQsTUFBTSxPQUFPLGtDQUFrQztRQUM3QyxNQUFNLGdCQUFnQixVQUFVLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzlELE9BQU87VUFDTCxRQUFRLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO1VBQ3JDLFdBQVcsTUFBTSxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUM7VUFDM0MsWUFBWSxNQUFNLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQztTQUM5QyxDQUFDO09BQ0gsQ0FBQztNQUNGLE9BQU87UUFDTCxXQUFXLE1BQU0sSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRTtVQUN2QyxLQUFLO1VBQ0wsV0FBVztTQUNaLENBQUM7UUFDRixXQUFXLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUU7VUFDdEMsS0FBSztVQUNMLFlBQVk7U0FDYixDQUFDO1FBQ0YsT0FBTyxNQUFNLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFO1VBQ3ZDLEtBQUs7VUFDTCxhQUFhO1NBQ2QsQ0FBQztRQUNGLFdBQVcsTUFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7VUFDeEMsUUFBUTtVQUNSLFdBQVc7U0FDWixDQUFDO1FBQ0YsV0FBVyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7VUFDdkMsUUFBUTtVQUNSLFlBQVk7U0FDYixDQUFDO1FBQ0YsT0FBTyxNQUFNLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUU7VUFDeEMsUUFBUTtVQUNSLGFBQWE7U0FDZCxDQUFDO1FBQ0YsTUFBTSxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFO1VBQ3RDLGNBQWM7VUFDZCxNQUFNO1NBQ1AsQ0FBQztRQUNGLE1BQU0sTUFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFO1VBQ3ZDLGNBQWM7VUFDZCxPQUFPO1NBQ1IsQ0FBQztRQUNGLGdCQUFnQixNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFO1VBQ3JELEtBQUs7VUFDTCxXQUFXO1VBQ1gsT0FBTztTQUNSLENBQUM7UUFDRixnQkFBZ0IsTUFBTSxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFO1VBQ3RELEtBQUs7VUFDTCxZQUFZO1VBQ1osT0FBTztTQUNSLENBQUM7UUFDRixZQUFZLE1BQU0sSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsRUFBRSxZQUFZLEVBQUU7VUFDdEQsS0FBSztVQUNMLGFBQWE7VUFDYixPQUFPO1NBQ1IsQ0FBQztRQUNGLGdCQUFnQixNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxZQUFZLEVBQUU7VUFDdEQsUUFBUTtVQUNSLFdBQVc7VUFDWCxPQUFPO1NBQ1IsQ0FBQztRQUNGLGdCQUFnQixNQUFNLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDLFlBQVksRUFBRTtVQUN2RCxRQUFRO1VBQ1IsWUFBWTtVQUNaLE9BQU87U0FDUixDQUFDO1FBQ0YsWUFBWSxNQUFNLElBQUksQ0FBQyxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUU7VUFDdkQsUUFBUTtVQUNSLGFBQWE7VUFDYixPQUFPO1NBQ1IsQ0FBQztRQUNGLFdBQVcsTUFBTSxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxFQUFFO1VBQ3RELGNBQWM7VUFDZCxPQUFPO1VBQ1AsT0FBTztTQUNSLENBQUM7UUFDRixXQUFXLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQUU7VUFDckQsY0FBYztVQUNkLE1BQU07VUFDTixPQUFPO1NBQ1IsQ0FBQztPQUNILENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxXQUFXLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7O0lBRXRDLE1BQU0sT0FBTyxRQUFRLENBQUM7O0lBRXRCLE1BQU0sY0FBYyxrQkFBa0IsV0FBVyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDakcsTUFBTSxlQUFlLFdBQVcsS0FBSyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsS0FBSyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQzs7SUFFdEYsSUFBSSxjQUFjLENBQUM7SUFDbkIsQ0FBQywwQkFBMEI7TUFDekIsY0FBYyxDQUFDLGFBQWEsQ0FBQyxHQUFHLGFBQWEsQ0FBQztNQUM5QyxjQUFjLENBQUMsYUFBYSxDQUFDLEdBQUcsYUFBYSxDQUFDO0tBQy9DLENBQUMsY0FBYyxLQUFLLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQzVDLE1BQU0sWUFBWSx5QkFBeUIsQ0FBQztJQUM1QyxNQUFNLG1CQUFtQixNQUFNLFNBQVMsQ0FBQyxFQUFFLEVBQUUsV0FBVyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSx5QkFBeUIsQ0FBQyxLQUFLLGNBQWMsWUFBWSxDQUFDLENBQUM7O0lBRTFKLE1BQU0sV0FBVyxNQUFNLFdBQVcsQ0FBQyxTQUFTLEVBQUU7TUFDNUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztNQUNuQixVQUFVLENBQUMsT0FBTyxDQUFDO01BQ25CLFFBQVEsQ0FBQyxhQUFhLENBQUM7TUFDdkIsUUFBUSxDQUFDLGFBQWEsQ0FBQztLQUN4QixDQUFDLENBQUM7SUFDSCxNQUFNLFFBQVEsd0ZBQXdGO01BQ3BHLE1BQU0sZ0JBQWdCLFVBQVUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUNwRSxNQUFNLFlBQVksSUFBSSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDekQsTUFBTSxZQUFZLElBQUksUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ3pELE1BQU0sTUFBTSxhQUFhLEdBQUcsSUFBSSxRQUFRLEtBQUssQ0FBQyxNQUFNLEVBQUUsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLFNBQVMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO01BQzFKLE1BQU0sTUFBTSxhQUFhLEdBQUcsSUFBSSxRQUFRLEtBQUssQ0FBQyxNQUFNLEVBQUUsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLFNBQVMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO01BQzFKLE1BQU0sSUFBSSxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQ2hDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2hCLENBQUM7O0lBRUYsTUFBTSxjQUFjLG1DQUFtQztNQUNyRCxNQUFNLFVBQVUsVUFBVSxRQUFRLENBQUM7TUFDbkMsTUFBTSxZQUFZLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxRQUFRLENBQUMsQ0FBQztNQUNqRCxNQUFNLFVBQVUsS0FBSyxDQUFDLFNBQVMsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsRUFBRSxlQUFlLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxlQUFlLEVBQUUsRUFBRSxRQUFRLEtBQUssQ0FBQyxVQUFVLFFBQVEsUUFBUSxDQUFDLENBQUMsQ0FBQztNQUN0SyxPQUFPLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN4QixTQUFTO1FBQ1QsUUFBUSxVQUFVLE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNDLFdBQVcsVUFBVSxVQUFVO1FBQy9CLE9BQU87T0FDUixDQUFDLENBQUMsQ0FBQztLQUNMLENBQUM7SUFDRixJQUFJLGdCQUFnQjtNQUNsQixVQUFVLENBQUMsU0FBUyxDQUFDO01BQ3JCLFFBQVEsQ0FBQyxRQUFRLENBQUM7TUFDbEIsU0FBUyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7TUFDMUIsUUFBUSxFQUFFO01BQ1YsUUFBUSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUM7S0FDbkMsQ0FBQzs7SUFFRixNQUFNLGNBQWMsbUNBQW1DO01BQ3JELE1BQU0sTUFBTSxXQUFXLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDNUQsTUFBTSxZQUFZLE1BQU0sQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxVQUFVLE1BQU0sRUFBRSxVQUFVLE9BQU8sQ0FBQyxDQUFDO01BQ2pGLE1BQU0sVUFBVSxLQUFLLENBQUMsU0FBUyxRQUFRLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQztNQUNoSCxPQUFPLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN4QixTQUFTO1FBQ1QsUUFBUSxVQUFVLE9BQU87UUFDekIsV0FBVyxVQUFVLFVBQVU7UUFDL0IsT0FBTztPQUNSLENBQUMsQ0FBQyxDQUFDO0tBQ0wsQ0FBQztJQUNGLElBQUksa0JBQWtCO01BQ3BCLFVBQVUsQ0FBQyxHQUFHLENBQUM7TUFDZixVQUFVLENBQUMsR0FBRyxDQUFDO01BQ2YsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDdEIsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7TUFDckIsU0FBUyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQztNQUMvQixTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztNQUMxQixRQUFRLEVBQUU7TUFDVixRQUFRLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQztLQUNuQyxDQUFDOztJQUVGLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQztNQUN6QixFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtNQUNyQjtRQUNFLFVBQVU7VUFDUixPQUFPO1VBQ1AsWUFBWTtVQUNaLFdBQVc7U0FDWjtPQUNGO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxVQUFVLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLGtDQUFrQyxLQUFLLFVBQVUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDdEgsTUFBTSxhQUFhLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sTUFBTSxVQUFVLEtBQUssQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRixNQUFNLGFBQWEsYUFBYTtNQUM5QixNQUFNLFNBQVMsS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztNQUN6QyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNwQixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsYUFBYTtNQUNqQyxNQUFNLFNBQVMsS0FBSyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztNQUM1QyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNwQixDQUFDO0lBQ0YsTUFBTSxTQUFTLEtBQUssT0FBTyxDQUFDO0lBQzVCLE1BQU0sYUFBYSxLQUFLLFNBQVMsQ0FBQzs7SUFFbEMsTUFBTSxZQUFZLG1DQUFtQztNQUNuRCxNQUFNLE1BQU0sV0FBVyxDQUFDLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQztNQUM3QyxNQUFNLGVBQWUsU0FBUztRQUM1QixNQUFNLGFBQWEsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sWUFBWSxPQUFPLENBQUMsU0FBUyxRQUFRLENBQUMsQ0FBQztRQUM3QyxPQUFPLEVBQUUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7T0FDbEMsQ0FBQztNQUNGLE9BQU8sUUFBUSxLQUFLLENBQUMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3ZHLENBQUM7SUFDRixNQUFNLGVBQWUsbUNBQW1DO01BQ3RELE1BQU0sTUFBTSxPQUFPLENBQUMsU0FBUyxRQUFRLENBQUMsQ0FBQztNQUN2QyxNQUFNLGNBQWMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQy9CLE1BQU0sU0FBUyxTQUFTLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO01BQzNFLE9BQU8sVUFBVSxDQUFDLE1BQU0sRUFBRSxXQUFXLEtBQUssRUFBRSxXQUFXLElBQUksQ0FBQyxDQUFDO0tBQzlELENBQUM7O0lBRUYsTUFBTSxTQUFTLDhCQUE4QjtNQUMzQyxNQUFNLFFBQVEsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUMvQyxPQUFPLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDckQsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLGlEQUFpRCxNQUFNLElBQUksQ0FBQyxPQUFPO01BQ3ZGLE1BQU0sU0FBUztRQUNiLFNBQVM7UUFDVCxHQUFHLE1BQU07T0FDVixDQUFDO01BQ0YsTUFBTSxVQUFVLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUNuSCxNQUFNLFlBQVksSUFBSSxDQUFDLE9BQU8sS0FBSyxFQUFFLE9BQU8sSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7TUFDekUsTUFBTSxhQUFhLFVBQVUsVUFBVSxHQUFHLFlBQVksRUFBRSxHQUFHLFlBQVksRUFBRSxDQUFDO01BQzFFLE1BQU0sYUFBYSxVQUFVLFVBQVUsR0FBRyxlQUFlLEVBQUUsR0FBRyxlQUFlLEVBQUUsQ0FBQztNQUNoRixNQUFNLFVBQVUsS0FBSyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQztNQUN6RyxPQUFPLElBQUksQ0FBQztRQUNWLFNBQVM7UUFDVCxRQUFRLFVBQVUsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDM0MsV0FBVyxVQUFVLFVBQVU7UUFDL0IsT0FBTztPQUNSLENBQUMsQ0FBQztLQUNKLENBQUMsQ0FBQzs7SUFFSCxNQUFNLGNBQWMsbUNBQW1DO01BQ3JELE1BQU0sWUFBWSxZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztNQUM5RCxPQUFPLFVBQVUsS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVO1FBQ25ELE1BQU0sT0FBTyxNQUFNLElBQUksc0JBQXNCLEVBQUUsQ0FBQztRQUNoRCxNQUFNLFVBQVUsTUFBTSxDQUFDLElBQUksS0FBSyxFQUFFLElBQUksSUFBSSxFQUFFLElBQUksTUFBTSxFQUFFLElBQUksT0FBTyxDQUFDLENBQUM7UUFDckUsTUFBTSxPQUFPLFVBQVUsS0FBSyxNQUFNLENBQUMsU0FBUyxRQUFRLENBQUMsQ0FBQztRQUN0RCxPQUFPLGFBQWEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDcEUsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLElBQUksYUFBYTtNQUNmLFVBQVUsQ0FBQyxNQUFNLENBQUM7TUFDbEIsVUFBVSxDQUFDLE1BQU0sQ0FBQztNQUNsQixRQUFRLENBQUMsUUFBUSxDQUFDO01BQ2xCLFFBQVEsRUFBRTtNQUNWLFNBQVMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO01BQzFCLFNBQVMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDO01BQzdCLFFBQVEsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDO0tBQ25DLENBQUM7O0lBRUYsTUFBTSxZQUFZLFFBQVEsQ0FBQztJQUMzQixNQUFNLE9BQU8sTUFBTSxDQUFDOztJQUVwQixNQUFNLFdBQVcsc0NBQXNDO01BQ3JELEtBQUs7TUFDTCxPQUFPO01BQ1AsTUFBTTtNQUNOLE9BQU87S0FDUixDQUFDLENBQUM7SUFDSCxNQUFNLFdBQVcsRUFBRSxRQUFRLFFBQVEsRUFBRSxDQUFDOztJQUV0QyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUM7TUFDekIsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7TUFDdkI7UUFDRSxJQUFJO1VBQ0YsU0FBUztVQUNULFFBQVE7U0FDVDtPQUNGO01BQ0QsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7S0FDdkIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxPQUFPLHNDQUFzQyxPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pGLE1BQU0sYUFBYSxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkUsTUFBTSxTQUFTLEtBQUssT0FBTyxDQUFDO0lBQzVCLE1BQU0sT0FBTyxLQUFLLEdBQUcsQ0FBQztJQUN0QixNQUFNLFVBQVUsS0FBSyxNQUFNLENBQUM7SUFDNUIsTUFBTSxPQUFPO01BQ1gsTUFBTTtNQUNOLElBQUksSUFBSTtNQUNSLE9BQU8sT0FBTztNQUNkLElBQUk7TUFDSixVQUFVLFVBQVU7S0FDckIsQ0FBQzs7SUFFRixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUM7TUFDekIsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7TUFDckI7UUFDRSxVQUFVO1VBQ1IsV0FBVztVQUNYLFlBQVk7U0FDYjtPQUNGO01BQ0Q7UUFDRSxPQUFPO1VBQ0wsT0FBTztVQUNQLFNBQVM7VUFDVCxRQUFRO1VBQ1IsU0FBUztTQUNWO09BQ0Y7S0FDRixDQUFDLENBQUM7SUFDSCxNQUFNLGlCQUFpQixZQUFZLEtBQUssTUFBTSxDQUFDLFFBQVEsTUFBTSxFQUFFLFFBQVEsUUFBUSxFQUFFLFFBQVEsT0FBTyxFQUFFLFFBQVEsUUFBUSxDQUFDLENBQUM7SUFDcEgsTUFBTSxXQUFXLGFBQWEsU0FBUyxNQUFNLENBQUM7TUFDNUMsVUFBVSxPQUFPLFlBQVksUUFBUSxDQUFDLEdBQUcsZUFBZSxDQUFDO01BQ3pELFVBQVUsNEJBQTRCLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQztNQUM5RCxPQUFPLHdDQUF3QyxLQUFLO0tBQ3JELENBQUMsQ0FBQztJQUNILE1BQU0sV0FBVyxLQUFLLFNBQVMsQ0FBQztJQUNoQyxNQUFNLFdBQVcsS0FBSyxTQUFTLENBQUM7SUFDaEMsTUFBTSxRQUFRLEtBQUssTUFBTSxDQUFDO0lBQzFCLE1BQU0sU0FBUyxhQUFhO01BQzFCLE1BQU0sUUFBUSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7TUFDbEMsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDM0IsQ0FBQztJQUNGLE1BQU0sVUFBVSxRQUFRLE9BQU8sQ0FBQztJQUNoQyxNQUFNLGVBQWU7TUFDbkIsUUFBUTtNQUNSLFFBQVE7TUFDUixLQUFLO01BQ0wsY0FBYztNQUNkLE1BQU07TUFDTixPQUFPLE9BQU87S0FDZixDQUFDOztJQUVGLE1BQU0sV0FBVyxlQUFlO01BQzlCLElBQUksS0FBSyxDQUFDLEtBQUs7UUFDYixHQUFHLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzNCLEVBQUUsVUFBVTtRQUNYLEdBQUcsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3hCLEVBQUUsS0FBSztRQUNOLEdBQUcsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDMUIsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sWUFBWSxlQUFlO01BQy9CLElBQUksS0FBSyxDQUFDLEtBQUs7UUFDYixHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ3pCLEVBQUUsVUFBVTtRQUNYLEdBQUcsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3RCLEVBQUUsS0FBSztRQUNOLEdBQUcsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDeEIsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sbUJBQW1CLGdDQUFnQztNQUN2RCxNQUFNLFFBQVEsR0FBRyxTQUFTLFlBQVksRUFBRSxDQUFDO01BQ3pDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7TUFDM0IsU0FBUyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztNQUM3QixPQUFPLEtBQUssQ0FBQztLQUNkLENBQUM7SUFDRixNQUFNLGdCQUFnQiwwQ0FBMEM7TUFDOUQsTUFBTSxNQUFNLEdBQUcsU0FBUyxZQUFZLEVBQUUsQ0FBQztNQUN2QyxHQUFHLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztNQUNqQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztNQUNoQyxPQUFPLEdBQUcsQ0FBQztLQUNaLENBQUM7SUFDRixNQUFNLFNBQVMsU0FBUztNQUN0QixNQUFNLElBQUksS0FBSztNQUNmLEtBQUssSUFBSSxJQUFJO01BQ2IsT0FBTyxJQUFJLE1BQU07TUFDakIsUUFBUSxJQUFJLE9BQU87TUFDbkIsT0FBTyxJQUFJLE1BQU07TUFDakIsUUFBUSxJQUFJLE9BQU87S0FDcEIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxpQkFBaUIsT0FBTztNQUM1QixNQUFNLFFBQVEsR0FBRyxlQUFlLEVBQUUsQ0FBQztNQUNuQyxNQUFNLE9BQU8sS0FBSyxPQUFPLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLHNCQUFzQixFQUFFLENBQUM7TUFDdkUsT0FBTyxJQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxPQUFPLEdBQUcsQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztLQUM5RixDQUFDO0lBQ0YsTUFBTSxjQUFjLE9BQU87TUFDekIsTUFBTSxPQUFPLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQztNQUN6QyxPQUFPLElBQUksTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLE9BQU8sR0FBRyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO0tBQzlGLENBQUM7O0lBRUYsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDO01BQ3pCO1FBQ0UsS0FBSztVQUNILE9BQU87VUFDUCxTQUFTO1VBQ1QsUUFBUTtVQUNSLFNBQVM7U0FDVjtPQUNGO01BQ0Q7UUFDRSxLQUFLO1VBQ0gsT0FBTztVQUNQLFNBQVM7VUFDVCxRQUFRO1VBQ1IsU0FBUztTQUNWO09BQ0Y7S0FDRixDQUFDLENBQUM7SUFDSCxNQUFNLFlBQVksc0JBQXNCLElBQUksQ0FBQyxZQUFZLFFBQVEsQ0FBQyxLQUFLLGVBQWUsQ0FBQyxFQUFFLEtBQUssWUFBWSxFQUFFLFlBQVksUUFBUSxDQUFDLEtBQUssYUFBYSxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsQ0FBQztJQUN2SyxNQUFNLFlBQVksb0JBQW9CLFNBQVMsTUFBTSxDQUFDO01BQ3BELFVBQVUsT0FBTztRQUNmLE9BQU87VUFDTCxLQUFLLFVBQVUsQ0FBQyxHQUFHLENBQUM7VUFDcEIsS0FBSyxRQUFRLEtBQUs7U0FDbkIsQ0FBQztPQUNIO01BQ0QsVUFBVSwyQkFBMkI7UUFDbkMsT0FBTztVQUNMLEtBQUssTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztVQUMvRCxLQUFLLE1BQU0sQ0FBQyxNQUFNLFFBQVEsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztTQUMvRSxDQUFDO09BQ0g7TUFDRCxPQUFPLHFDQUFxQztRQUMxQyxPQUFPO1VBQ0wsS0FBSyxNQUFNLENBQUMsTUFBTSxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1VBQ3RFLEtBQUssTUFBTSxDQUFDLE1BQU0sUUFBUSxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ3RGLENBQUM7T0FDSDtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sYUFBYSxpQkFBaUI7TUFDbEMsTUFBTSxNQUFNLE1BQU0sSUFBSSxFQUFFLENBQUM7TUFDekIsSUFBSSxHQUFHLFVBQVUsRUFBRTtRQUNqQixNQUFNLFdBQVcsTUFBTSxJQUFJLEVBQUUsT0FBTyxDQUFDLE9BQU8sR0FBRyxVQUFVLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDckUsT0FBTyxRQUFRLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLFlBQVksUUFBUSxDQUFDLEdBQUcsYUFBYSxDQUFDLEVBQUUsR0FBRyxVQUFVLEVBQUUsWUFBWSxRQUFRLENBQUMsR0FBRyxlQUFlLENBQUMsRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztPQUMxTSxNQUFNO1FBQ0wsT0FBTyxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO09BQ3ZDO0tBQ0YsQ0FBQztJQUNGLE1BQU0sV0FBVyxvQkFBb0I7TUFDbkMsTUFBTSxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7TUFDekMsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ2hDLENBQUM7SUFDRixNQUFNLGFBQWEsb0JBQW9CO01BQ3JDLE1BQU0sWUFBWSxRQUFRLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQzNDLE9BQU8sU0FBUyxNQUFNLENBQUM7UUFDckIsS0FBSyxxQ0FBcUM7VUFDeEMsTUFBTSxNQUFNLEdBQUcsU0FBUyxZQUFZLEVBQUUsQ0FBQztVQUN2QyxHQUFHLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztVQUNqQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztVQUNoQyxPQUFPLEdBQUcsQ0FBQztTQUNaO1FBQ0QsS0FBSyxxQ0FBcUM7VUFDeEMsTUFBTSxNQUFNLEdBQUcsU0FBUyxZQUFZLEVBQUUsQ0FBQztVQUN2QyxHQUFHLFNBQVMsQ0FBQyxNQUFNLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztVQUNsQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztVQUMvQixPQUFPLEdBQUcsQ0FBQztTQUNaO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLEtBQUssSUFBSSxDQUFDO0lBQ1YsS0FBSyxJQUFJLENBQUM7O0lBRVYsTUFBTSxZQUFZLDhCQUE4QixRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQzs7SUFFNUYsTUFBTSxjQUFjLHFCQUFxQixLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDOztJQUVoRSxNQUFNLFlBQVkscUNBQXFDO01BQ3JELE1BQU0sTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDM0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztNQUNsQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztNQUNqQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztNQUNoQyxPQUFPLEdBQUcsQ0FBQztLQUNaLENBQUM7SUFDRixNQUFNLFFBQVEscUNBQXFDO01BQ2pELE1BQU0sSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDckQsTUFBTSxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksT0FBTyxLQUFLLE9BQU8sQ0FBQztNQUN0RCxPQUFPLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDO0tBQzdCLENBQUM7O0lBRUYsTUFBTSxxQkFBcUIsT0FBTyxRQUFRLEtBQUssQ0FBQyxHQUFHLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDcEUsTUFBTSxZQUFZLGFBQWE7TUFDN0IsSUFBSSxTQUFTLFdBQVcsR0FBRyxDQUFDLEVBQUU7UUFDNUIsTUFBTSxXQUFXLFNBQVMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sVUFBVSxTQUFTLFdBQVcsQ0FBQyxTQUFTLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvRCxPQUFPLFFBQVEsS0FBSyxDQUFDLFFBQVEsT0FBTyxDQUFDLFlBQVksUUFBUSxDQUFDLFFBQVEsZUFBZSxDQUFDLEVBQUUsUUFBUSxZQUFZLEVBQUUsWUFBWSxRQUFRLENBQUMsT0FBTyxhQUFhLENBQUMsRUFBRSxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUM7T0FDM0ssTUFBTTtRQUNMLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN4QjtLQUNGLENBQUM7SUFDRixNQUFNLGFBQWEsYUFBYTtNQUM5QixJQUFJLFNBQVMsV0FBVyxLQUFLLElBQUksSUFBSSxTQUFTLFVBQVUsS0FBSyxJQUFJLEVBQUU7UUFDakUsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7T0FDN0IsTUFBTTtRQUNMLE1BQU0sU0FBUyxZQUFZLFFBQVEsQ0FBQyxTQUFTLFdBQVcsQ0FBQyxDQUFDO1FBQzFELE1BQU0sUUFBUSxZQUFZLFFBQVEsQ0FBQyxTQUFTLFVBQVUsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLGFBQWEsRUFBRSxLQUFLLEVBQUUsU0FBUyxZQUFZLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxRQUFRLE9BQU8sQ0FBQyxNQUFNLEVBQUUsU0FBUyxhQUFhLEVBQUUsS0FBSyxFQUFFLFNBQVMsWUFBWSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7T0FDbE07S0FDRixDQUFDO0lBQ0YsTUFBTSxXQUFXLE9BQU8sa0JBQWtCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkcsTUFBTSxlQUFlLG9CQUFvQjtNQUN2QyxNQUFNLE1BQU0sVUFBVSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztNQUN2QyxPQUFPLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUM1QixDQUFDO0lBQ0YsTUFBTSxjQUFjLG9CQUFvQjtNQUN0QyxNQUFNLE1BQU0sVUFBVSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztNQUN2QyxPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN6QixDQUFDOztJQUVGLE1BQU0sWUFBWSxjQUFjO01BQzlCLE1BQU0sTUFBTSxXQUFXO1FBQ3JCLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUU7VUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLEdBQUcsSUFBSSxHQUFHLGNBQWMsR0FBRyxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUM7U0FDM0U7UUFDRCxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO09BQ3JDLENBQUM7TUFDRixNQUFNLFlBQVksV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7TUFDbEcsTUFBTSxNQUFNLG9CQUFvQjtRQUM5QixJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1VBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxHQUFHLGNBQWMsR0FBRyxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUM7U0FDL0U7UUFDRCxPQUFPLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztPQUMvQixDQUFDO01BQ0YsT0FBTztRQUNMLEdBQUc7UUFDSCxTQUFTO1FBQ1QsR0FBRztPQUNKLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sTUFBTSxTQUFTLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sUUFBUSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDOztJQUUxQyxNQUFNLFFBQVEsc0JBQXNCO01BQ2xDLE9BQU87TUFDUCxNQUFNO0tBQ1AsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxnQkFBZ0IscUJBQXFCO01BQ3pDLE1BQU0sYUFBYSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDckMsSUFBSSxVQUFVLE9BQU8sS0FBSyxDQUFDLEVBQUU7UUFDM0IsT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQy9CLE1BQU0sSUFBSSxNQUFNLEdBQUcsVUFBVSxPQUFPLEVBQUU7UUFDckMsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3JDLE1BQU07UUFDTCxNQUFNLE9BQU8sVUFBVSxDQUFDLFVBQVUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDdEUsT0FBTyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO09BQ3pCO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLGNBQWMscUJBQXFCLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHLGFBQWEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkgsTUFBTSxhQUFhLFVBQVUsTUFBTSxRQUFRLEtBQUssU0FBUyxDQUFDO0lBQzFELE1BQU0scUJBQXFCLHFCQUFxQjtNQUM5QyxNQUFNLGVBQWUsVUFBVSxhQUFhLFdBQVcsQ0FBQyxNQUFNLE1BQU0sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDbkYsT0FBTyxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU87UUFDL0IsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7VUFDbkIsTUFBTSxXQUFXLFdBQVcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1VBQ3JELE1BQU0sWUFBWSxXQUFXLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQztVQUN2RCxPQUFPLFlBQVksTUFBTSxDQUFDLFFBQVEsUUFBUSxFQUFFLFFBQVEsT0FBTyxFQUFFLFNBQVMsUUFBUSxFQUFFLFNBQVMsT0FBTyxDQUFDLENBQUM7U0FDbkcsTUFBTTtVQUNMLE9BQU8sR0FBRyxDQUFDO1NBQ1o7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxjQUFjLG1DQUFtQztNQUNyRCxNQUFNLE1BQU0sV0FBVyxDQUFDLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQztNQUM3QyxNQUFNLFlBQVksWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7TUFDOUQsTUFBTSxlQUFlLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU87UUFDbkUsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7VUFDbkIsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFHLEVBQUUsWUFBWSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU07WUFDL0UsTUFBTSxjQUFjLFlBQVksU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JELFFBQVEsQ0FBQyxHQUFHLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNqQyxNQUFNLE9BQU8sWUFBWSxDQUFDLEdBQUcsRUFBRSxZQUFZLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25GLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN0QixPQUFPLElBQUksQ0FBQztXQUNiLENBQUMsQ0FBQztVQUNILE9BQU8sT0FBTyxLQUFLLENBQUMsV0FBVztZQUM3QixPQUFPLE1BQU0sQ0FBQyxPQUFPLEtBQUssRUFBRSxPQUFPLElBQUksRUFBRSxPQUFPLE1BQU0sRUFBRSxPQUFPLE9BQU8sQ0FBQyxDQUFDO1dBQ3pFLENBQUMsQ0FBQztTQUNKLE1BQU07VUFDTCxNQUFNLGdCQUFnQixLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsSUFBSSxJQUFJLHNCQUFzQixFQUFFLENBQUMsQ0FBQztVQUMzRSxNQUFNLFNBQVM7WUFDYixNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsVUFBVSxLQUFLLEVBQUUsYUFBYSxTQUFTLEtBQUssQ0FBQztZQUN6RSxPQUFPLElBQUksSUFBSSxDQUFDLGFBQWEsVUFBVSxNQUFNLEVBQUUsYUFBYSxTQUFTLE1BQU0sQ0FBQztZQUM1RSxLQUFLLElBQUksSUFBSSxDQUFDLGFBQWEsVUFBVSxJQUFJLEVBQUUsYUFBYSxTQUFTLElBQUksQ0FBQztZQUN0RSxRQUFRLElBQUksSUFBSSxDQUFDLGFBQWEsVUFBVSxPQUFPLEVBQUUsYUFBYSxTQUFTLE9BQU8sQ0FBQztXQUNoRixDQUFDO1VBQ0YsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLEVBQUUsTUFBTSxJQUFJLEVBQUUsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLEVBQUUsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQztTQUNoRztPQUNGLENBQUMsQ0FBQztNQUNILE1BQU0sZ0JBQWdCLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU87UUFDcEUsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7VUFDbkIsT0FBTyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1NBQ3JGLE1BQU07VUFDTCxPQUFPLFFBQVEsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7U0FDckM7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLE9BQU8sYUFBYSxNQUFNLENBQUMsU0FBUyxRQUFRLENBQUMsQ0FBQztNQUNwRCxPQUFPLGFBQWEsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDekUsQ0FBQztJQUNGLElBQUksa0JBQWtCO01BQ3BCLFFBQVEsQ0FBQyxjQUFjLENBQUM7TUFDeEIsVUFBVSxDQUFDLE1BQU0sQ0FBQztNQUNsQixRQUFRLENBQUMsUUFBUSxDQUFDO01BQ2xCLFFBQVEsRUFBRTtNQUNWLFNBQVMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO01BQzFCLFNBQVMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDO01BQzdCLFFBQVEsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDO0tBQ25DLENBQUM7O0lBRUYsTUFBTSxnQkFBZ0IsYUFBYSxDQUFDO0lBQ3BDLE1BQU0sUUFBUSxVQUFVLE1BQU0sRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDO0lBQ2hELE1BQU0sUUFBUSxxQkFBcUIsTUFBTSxFQUFFLEdBQUcsT0FBTyxNQUFNLENBQUM7SUFDNUQsTUFBTSxXQUFXLHFCQUFxQixNQUFNLEVBQUUsR0FBRyxPQUFPLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQztJQUNoRixNQUFNLFdBQVcsVUFBVSxNQUFNLEVBQUUsQ0FBQztJQUNwQyxNQUFNLGNBQWMsOEJBQThCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sVUFBVSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixDQUFDLE1BQU0sRUFBRTtNQUNqSyxNQUFNLENBQUM7TUFDUCxLQUFLLENBQUM7S0FDUCxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDbkIsTUFBTSxjQUFjLDhCQUE4QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLENBQUMsTUFBTSxFQUFFO01BQzFLLE9BQU8sQ0FBQztNQUNSLEtBQUssQ0FBQztLQUNQLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNuQixNQUFNLGNBQWMsOEJBQThCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxPQUFPLFVBQVUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUU7TUFDMUssTUFBTSxDQUFDO01BQ1AsUUFBUSxDQUFDO0tBQ1YsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ25CLE1BQU0sY0FBYyw4QkFBOEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxPQUFPLFVBQVUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUU7TUFDbkwsT0FBTyxDQUFDO01BQ1IsUUFBUSxDQUFDO0tBQ1YsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ25CLE1BQU0sTUFBTSxNQUFNO01BQ2hCLFdBQVc7TUFDWCxXQUFXO01BQ1gsV0FBVztNQUNYLFdBQVc7S0FDWixDQUFDO0lBQ0YsTUFBTSxTQUFTLE1BQU07TUFDbkIsV0FBVztNQUNYLFdBQVc7TUFDWCxXQUFXO01BQ1gsV0FBVztLQUNaLENBQUM7O0lBRUYsTUFBTSxZQUFZLG9DQUFvQztNQUNwRCxNQUFNLFlBQVksS0FBSyxDQUFDLE1BQU0sRUFBRSxXQUFXLEtBQUssUUFBUSxDQUFDLENBQUM7TUFDMUQsTUFBTSxVQUFVLEtBQUssQ0FBQyxTQUFTLFFBQVEsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUSxLQUFLLEVBQUUsQ0FBQyxDQUFDO01BQ3pHLE9BQU8sUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3hCLFNBQVM7UUFDVCxRQUFRLFFBQVEsRUFBRTtRQUNsQixXQUFXLFdBQVcsVUFBVTtRQUNoQyxPQUFPO09BQ1IsQ0FBQyxDQUFDLENBQUM7S0FDTCxDQUFDO0lBQ0YsSUFBSSxnQkFBZ0I7TUFDbEIsVUFBVSxDQUFDLE1BQU0sQ0FBQztNQUNsQixRQUFRLEVBQUU7TUFDVixTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztNQUMxQixRQUFRLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQztLQUNqQyxDQUFDOztJQUVGLElBQUksZUFBZSxRQUFRLENBQUMsTUFBTSxFQUFFO01BQ2xDLFdBQVcsZUFBZTtNQUMxQixNQUFNLFVBQVU7TUFDaEIsU0FBUyxhQUFhO01BQ3RCLFNBQVMsYUFBYTtNQUN0QixXQUFXLGVBQWU7S0FDM0IsQ0FBQyxDQUFDOztJQUVILE1BQU0sbUJBQW1CO01BQ3ZCLGVBQWUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDO01BQ2xDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUU7UUFDakMsS0FBSztRQUNMLFFBQVE7UUFDUixXQUFXO09BQ1osQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLGlCQUFpQjtNQUNyQixTQUFTLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQztNQUM1QixRQUFRLENBQUMsV0FBVyxDQUFDO0tBQ3RCLENBQUM7SUFDRixNQUFNLGtCQUFrQjtNQUN0QixVQUFVLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQztNQUNsQyxXQUFXLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDO0tBQzVDLENBQUM7O0lBRUYsTUFBTSxpQkFBaUIsTUFBTTtNQUMzQixNQUFNLE9BQU8sUUFBUSxnQkFBZ0IsQ0FBQztNQUN0QyxPQUFPLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksWUFBWSxFQUFFLElBQUksYUFBYSxDQUFDLENBQUM7S0FDM0QsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLGFBQWE7TUFDckMsTUFBTSxXQUFXLFVBQVUsQ0FBQyxTQUFTLFFBQVEsQ0FBQyxDQUFDO01BQy9DLE1BQU0sU0FBUyxTQUFTLFFBQVEsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO01BQzdELE9BQU8sVUFBVSxDQUFDLFFBQVEsS0FBSyxFQUFFLFFBQVEsSUFBSSxFQUFFLE1BQU0sTUFBTSxFQUFFLE1BQU0sT0FBTyxDQUFDLENBQUM7S0FDN0UsQ0FBQztJQUNGLE1BQU0sUUFBUSxpRUFBaUU7TUFDN0UsTUFBTSxTQUFTLEdBQUcsQ0FBQyxTQUFTLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztNQUNoRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxRQUFRLEVBQUUsU0FBUyxPQUFPLEVBQUUsU0FBUyxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztLQUNuSSxDQUFDO0lBQ0YsTUFBTSxhQUFhLDJEQUEyRDtNQUM1RSxNQUFNLGtCQUFrQixRQUFRLEtBQUssRUFBRSxDQUFDO01BQ3hDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsZUFBZSxDQUFDLENBQUM7S0FDOUYsQ0FBQztJQUNGLE1BQU0sdUJBQXVCLDRFQUE0RTtNQUN2RyxNQUFNLGVBQWUsWUFBWSxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztNQUMzRixNQUFNLFlBQVksWUFBWSxPQUFPLENBQUM7TUFDdEMsTUFBTSxVQUFVLE1BQU0sUUFBUSxDQUFDO01BQy9CLE1BQU0sY0FBYyxRQUFRLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO01BQzdDLFVBQVUsQ0FBQyxNQUFNO1FBQ2YsS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDcEMsTUFBTSxnQkFBZ0IsTUFBTSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNwRCxLQUFLLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2QyxNQUFNLFNBQVMsU0FBUyxTQUFTLEVBQUUsR0FBRyxjQUFjLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0RixTQUFTLFVBQVUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYTtVQUNsRSxNQUFNLFlBQVksZUFBZSxRQUFRLENBQUMsTUFBTSxTQUFTLFVBQVUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7VUFDbEYsTUFBTSxXQUFXLEtBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFlBQVksV0FBVyxDQUFDLENBQUM7VUFDbkcsUUFBUSxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDcEMsQ0FBQyxDQUFDO1FBQ0gsYUFBYSxLQUFLLENBQUMsTUFBTTtVQUN2QixRQUFRLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQ2pDLEVBQUUsT0FBTztVQUNSLEtBQUssQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ25DLENBQUMsQ0FBQztRQUNILElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUU7VUFDaE0sUUFBUSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztTQUMvQjtPQUNGLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxVQUFVLGlDQUFpQyxPQUFPLFNBQVMsRUFBRSxHQUFHLE9BQU8sR0FBRyxVQUFVLENBQUM7SUFDM0YsTUFBTSxVQUFVLDBDQUEwQztNQUN4RCxNQUFNLFVBQVUsTUFBTSxRQUFRLENBQUM7TUFDL0IsTUFBTSxDQUFDO1FBQ0wsVUFBVTtRQUNWLE1BQU07UUFDTixPQUFPO1FBQ1AsS0FBSztRQUNMLFFBQVE7T0FDVCxFQUFFLFFBQVEsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ3BDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUNqQixRQUFRLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0tBQzVCLENBQUM7O0lBRUYsSUFBSSw0QkFBNEIsTUFBTSxPQUFPLENBQUM7UUFDMUMsV0FBVyxJQUFJO1FBQ2YsVUFBVSxVQUFVO1FBQ3BCLHNCQUFzQixvQkFBb0I7UUFDMUMsU0FBUyxPQUFPO1FBQ2hCLE9BQU8sT0FBTztLQUNqQixDQUFDLENBQUM7O0lBRUgsTUFBTSxTQUFTLE1BQU07TUFDbkIsSUFBSSxRQUFRLEVBQUUsQ0FBQztNQUNmLE1BQU0sTUFBTSxjQUFjO1FBQ3hCLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7T0FDbEIsQ0FBQztNQUNGLE1BQU0sTUFBTSxNQUFNLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDbkMsTUFBTSxRQUFRLE1BQU07UUFDbEIsSUFBSSxhQUFhLENBQUMsRUFBRSxDQUFDLEVBQUU7VUFDckIsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDbEIsTUFBTTtVQUNMLFFBQVEsRUFBRSxDQUFDO1NBQ1o7T0FDRixDQUFDO01BQ0YsT0FBTyxJQUFJLENBQUM7UUFDVixXQUFXLE1BQU0sS0FBSztRQUN0QixLQUFLO1FBQ0wsR0FBRztRQUNILEdBQUc7T0FDSixDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLElBQUksZ0NBQWdDLE1BQU0sT0FBTyxDQUFDO1FBQzlDLFdBQVcsSUFBSTtRQUNmLE1BQU0sTUFBTTtLQUNmLENBQUMsQ0FBQzs7SUFFSCxNQUFNLGNBQWMsUUFBUSxDQUFDO01BQzNCLFFBQVEsY0FBYztNQUN0QixNQUFNLGFBQWE7TUFDbkIsUUFBUSxjQUFjO01BQ3RCLE1BQU0sWUFBWTtNQUNsQixPQUFPLGdCQUFnQjtLQUN4QixDQUFDLENBQUM7O0lBRUgsTUFBTSxjQUFjLFFBQVEsSUFBSSxVQUFVLEVBQUUsWUFBWSxFQUFFLENBQUM7SUFDM0QsTUFBTSxnQkFBZ0IsYUFBYTtNQUNqQyxJQUFJLENBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7TUFDbkMsTUFBTSxXQUFXLFNBQVMsV0FBVyxFQUFFLENBQUM7TUFDeEMsTUFBTSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztLQUNqQyxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsYUFBYTtNQUNqQyxNQUFNLFdBQVcsU0FBUyxXQUFXLEVBQUUsQ0FBQztNQUN4QyxNQUFNLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO01BQ2hDLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztLQUNsQyxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsbUJBQW1CO01BQ3ZDLE1BQU0sVUFBVSxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUNyQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLFFBQVEsQ0FBQyxFQUFFO1FBQzFCLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztPQUN0QjtLQUNGLENBQUM7SUFDRixNQUFNLGdCQUFnQixRQUFRO01BQzVCLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNwQixJQUFJLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN4QyxDQUFDO0lBQ0YsTUFBTSxXQUFXLG1CQUFtQjtNQUNsQyxRQUFRLENBQUMsTUFBTSxRQUFRLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQztLQUN6QyxDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsYUFBYTtNQUNwQyxNQUFNLENBQUMsU0FBUyxXQUFXLEVBQUUsRUFBRSxhQUFhLFFBQVEsQ0FBQyxTQUFTLFFBQVEsQ0FBQyxDQUFDLENBQUM7TUFDekUsS0FBSyxDQUFDLFNBQVMsUUFBUSxDQUFDLENBQUM7TUFDekIsU0FBUyxlQUFlLEVBQUUsQ0FBQztLQUM1QixDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsMkNBQTJDO01BQ2pFLE1BQU0sT0FBTyxTQUFTLFdBQVcsRUFBRSxDQUFDO01BQ3BDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQzVCLE1BQU0sY0FBYyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUMvQyxNQUFNLFVBQVUsVUFBVSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztNQUM5QyxNQUFNLENBQUMsT0FBTyxFQUFFLFFBQVE7UUFDdEIsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLFNBQVMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO09BQzdDLENBQUMsQ0FBQztNQUNILE1BQU0sQ0FBQyxXQUFXLEVBQUUsYUFBYTtRQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1VBQzNCLFNBQVMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztVQUM1QyxRQUFRLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1VBQy9CLElBQUksTUFBTSxDQUFDLFNBQVMsUUFBUSxDQUFDLEVBQUU7WUFDN0IsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1dBQzFCO1NBQ0YsTUFBTTtVQUNMLFFBQVEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDaEM7T0FDRixDQUFDLENBQUM7TUFDSCxTQUFTLGVBQWUsRUFBRSxDQUFDO0tBQzVCLENBQUM7SUFDRixNQUFNLHlCQUF5QiwyQ0FBMkM7TUFDeEUsTUFBTSxPQUFPLFNBQVMsV0FBVyxFQUFFLENBQUM7TUFDcEMsTUFBTSxnQkFBZ0IsTUFBTSxDQUFDLFFBQVEsRUFBRSxRQUFRLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztNQUMzRSxNQUFNLENBQUMsSUFBSSxFQUFFLGFBQWE7UUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLEVBQUU7VUFDekMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzFCO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxjQUFjLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQy9DLE1BQU0sVUFBVSxVQUFVLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO01BQzlDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsZUFBZTtRQUM3QixJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRTtVQUM1QixhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDNUI7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLENBQUMsV0FBVyxFQUFFLGFBQWE7UUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRTtVQUMzQixhQUFhLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ3JDO09BQ0YsQ0FBQyxDQUFDO01BQ0gsU0FBUyxlQUFlLEVBQUUsQ0FBQztLQUM1QixDQUFDOztJQUVGLE1BQU0sU0FBUyxtQkFBbUI7TUFDaEMsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDckMsQ0FBQztJQUNGLE1BQU0sYUFBYSw4QkFBOEI7TUFDL0MsTUFBTSxVQUFVLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQ3JDLFNBQVMsQ0FBQyxNQUFNLFFBQVEsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDO01BQ3pDLElBQUksTUFBTSxDQUFDLE1BQU0sUUFBUSxDQUFDLEVBQUU7UUFDMUIsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO09BQ3RCO01BQ0QsTUFBTSxlQUFlLEVBQUUsQ0FBQztLQUN6QixDQUFDO0lBQ0YsTUFBTSxXQUFXLGFBQWE7TUFDNUIsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQ3pCLFFBQVEsQ0FBQyxTQUFTLFFBQVEsQ0FBQyxDQUFDO01BQzVCLFNBQVMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ2xELENBQUM7SUFDRixNQUFNLFNBQVMsYUFBYTtNQUMxQixNQUFNLFdBQVcsTUFBTSxDQUFDLFNBQVMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLFNBQVMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztNQUNyRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7TUFDcEIsUUFBUSxLQUFLLENBQUMsS0FBSztRQUNqQixDQUFDLGVBQWUsRUFBRSxDQUFDO09BQ3BCLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGlCQUFpQixhQUFhO01BQ2xDLE1BQU0sT0FBTyxTQUFTLFdBQVcsRUFBRSxDQUFDO01BQ3BDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDdkIsS0FBSyxDQUFDLFNBQVMsUUFBUSxDQUFDLENBQUM7TUFDekIsU0FBUyxlQUFlLEVBQUUsQ0FBQztLQUM1QixDQUFDO0lBQ0YsTUFBTSxlQUFlLHdCQUF3QjtNQUMzQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQ2hELENBQUM7SUFDRixNQUFNLG9CQUFvQix3QkFBd0I7TUFDaEQsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztLQUMvQyxDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsa0NBQWtDO01BQ3pELFFBQVEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxRQUFRLENBQUMsQ0FBQztNQUNyQyxNQUFNLGFBQWEsUUFBUSxDQUFDLFNBQVMsUUFBUSxDQUFDLENBQUM7TUFDL0MsTUFBTSxDQUFDLFVBQVUsRUFBRSxTQUFTO1FBQzFCLFNBQVMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7T0FDL0MsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sZUFBZSxhQUFhO01BQ2hDLE1BQU0sYUFBYSxRQUFRLENBQUMsU0FBUyxRQUFRLENBQUMsQ0FBQztNQUMvQyxNQUFNLENBQUMsVUFBVSxFQUFFLFNBQVM7UUFDMUIsU0FBUyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztPQUMvQyxDQUFDLENBQUM7TUFDSCxRQUFRLENBQUMsU0FBUyxRQUFRLENBQUMsQ0FBQztLQUM3QixDQUFDOztJQUVGLE1BQU0sVUFBVSxvQ0FBb0M7TUFDbEQsTUFBTSxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVM7UUFDekIsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO09BQ3pCLENBQUMsQ0FBQztNQUNILE1BQU0sUUFBUSxPQUFPLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUM5QyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQ3ZCLE1BQU0sUUFBUSxPQUFPLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDOUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztNQUN2QixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUNsQixPQUFPLEtBQUssQ0FBQztLQUNkLENBQUM7SUFDRixNQUFNLFNBQVMsb0NBQW9DO01BQ2pELE1BQU0sV0FBVyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDekQsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQ2xDLE9BQU8sUUFBUSxDQUFDO0tBQ2pCLENBQUM7SUFDRixNQUFNLGFBQWEsb0NBQW9DLE1BQU0sSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZILE1BQU0sbUJBQW1CLGlEQUFpRDtNQUN4RSxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQ3hCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztNQUN2QyxXQUFXLEVBQUUsQ0FBQztNQUNkLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDM0IsQ0FBQztJQUNGLE1BQU0sVUFBVSw4QkFBOEI7TUFDNUMsTUFBTSxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVE7UUFDeEIsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQixPQUFPLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDL0IsTUFBTSxNQUFNLEVBQUUsQ0FBQztPQUNoQixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxXQUFXLGdDQUFnQyxNQUFNLE9BQU8sRUFBRSxDQUFDO0lBQ2pFLE1BQU0sV0FBVyx5Q0FBeUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksTUFBTSxJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVEsT0FBTyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3hLLE1BQU0sYUFBYSxnQ0FBZ0MsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUNoRSxNQUFNLFFBQVEscUNBQXFDO01BQ2pELE1BQU0sQ0FBQyxPQUFPLFFBQVEsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU07UUFDekMsUUFBUSxDQUFDLE9BQU8sUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO09BQ2pDLEVBQUUsS0FBSztRQUNOLEtBQUssQ0FBQyxPQUFPLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDakMsQ0FBQyxDQUFDO01BQ0gsS0FBSyxDQUFDLE9BQU8sUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztLQUMxQyxDQUFDO0lBQ0YsTUFBTSxVQUFVLDJCQUEyQjtNQUN6QyxNQUFNLENBQUMsT0FBTyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQyxPQUFPLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxZQUFZLEtBQUssQ0FBQyxPQUFPLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztLQUNuSSxDQUFDO0lBQ0YsTUFBTSxRQUFRLCtCQUErQjtNQUMzQyxNQUFNLE9BQU8sT0FBTyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDN0MsS0FBSyxDQUFDLE9BQU8sUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQzlELEtBQUssQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sb0JBQW9CLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDckUsQ0FBQztJQUNGLE1BQU0sY0FBYyxXQUFXLE1BQU0sQ0FBQztNQUNwQyxLQUFLO01BQ0wsTUFBTTtNQUNOLE9BQU87TUFDUCxRQUFRO0tBQ1QsRUFBRSxPQUFPLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDekMsTUFBTSxVQUFVLCtCQUErQjtNQUM3QyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sUUFBUSxDQUFDLEVBQUU7UUFDakMsUUFBUSxDQUFDLE9BQU8sUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO09BQ3ZDO01BQ0QsT0FBTyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxvQkFBb0IsQ0FBQyxDQUFDO0tBQzdELENBQUM7O0lBRUYsSUFBSSwyQkFBMkIsTUFBTSxPQUFPLENBQUM7UUFDekMsV0FBVyxJQUFJO1FBQ2YsT0FBTyxLQUFLO1FBQ1osU0FBUyxPQUFPO1FBQ2hCLE1BQU0sTUFBTTtRQUNaLGtCQUFrQixnQkFBZ0I7UUFDbEMsT0FBTyxPQUFPO1FBQ2QsUUFBUSxRQUFRO1FBQ2hCLFVBQVUsUUFBUTtRQUNsQixVQUFVLFVBQVU7UUFDcEIsWUFBWSxVQUFVO0tBQ3pCLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFdBQVcsaUNBQWlDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsRUFBRSw4QkFBOEI7UUFDNUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7T0FDL0MsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFUCxJQUFJLDZCQUE2QixNQUFNLE9BQU8sQ0FBQztRQUMzQyxXQUFXLElBQUk7UUFDZixRQUFRLFFBQVE7S0FDbkIsQ0FBQyxDQUFDOztJQUVILElBQUksZ0JBQWdCO01BQ2xCLFNBQVMsQ0FBQyxRQUFRLENBQUM7TUFDbkIsU0FBUyxDQUFDLFNBQVMsQ0FBQztNQUNwQixVQUFVLENBQUMsVUFBVSxDQUFDO01BQ3RCLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztNQUM1QixTQUFTLENBQUMscUJBQXFCLEVBQUUsMEJBQTBCLENBQUM7S0FDN0QsQ0FBQzs7SUFFRixNQUFNLFNBQVMsTUFBTTtNQUNuQixNQUFNLFdBQVcsT0FBTyxFQUFFLENBQUM7TUFDM0IsTUFBTSxZQUFZLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO01BQ2hELE9BQU8sSUFBSSxDQUFDO1FBQ1YsU0FBUztRQUNULFFBQVEsUUFBUSxNQUFNO1FBQ3RCLE9BQU8sUUFBUSxNQUFNO1FBQ3JCLEtBQUssUUFBUSxJQUFJO1FBQ2pCLEtBQUssUUFBUSxJQUFJO09BQ2xCLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsSUFBSSw0QkFBNEIsTUFBTSxPQUFPLENBQUM7UUFDMUMsV0FBVyxJQUFJO1FBQ2YsTUFBTSxNQUFNO0tBQ2YsQ0FBQyxDQUFDOztJQUVILE1BQU0sYUFBYSxRQUFRLENBQUM7TUFDMUIsUUFBUSxhQUFhO01BQ3JCLE1BQU0sWUFBWTtNQUNsQixRQUFRLGFBQWE7TUFDckIsTUFBTSxXQUFXO01BQ2pCLE9BQU8sWUFBWTtLQUNwQixDQUFDLENBQUM7O0lBRUgsTUFBTSxnQkFBZ0IsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbkQsTUFBTSxtQkFBbUIsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDekQsTUFBTSxnQkFBZ0IsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUM7O0lBRW5ELE1BQU0sV0FBVyxTQUFTLENBQUM7TUFDekIsU0FBUyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUM7TUFDL0IsV0FBVyxDQUFDLGtCQUFrQixFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUMxRSxDQUFDLENBQUM7SUFDSCxNQUFNLHFCQUFxQixXQUFXO01BQ3BDLE1BQU0sU0FBUyxZQUFZLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztNQUM1RCxPQUFPO1FBQ0wsQ0FBQyxhQUFhLEVBQUUsR0FBRztVQUNqQixRQUFRLFNBQVMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1VBQ3pDLFdBQVcsbUJBQW1CO1lBQzVCLElBQUksVUFBVSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Y0FDOUIsTUFBTSxTQUFTLFVBQVUsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLE9BQU8sQ0FBQyxJQUFJLE1BQU0sWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLE9BQU8sQ0FBQyxDQUFDO2NBQ3JHLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ1gsTUFBTSxpQkFBaUIsS0FBSyxDQUFDLE1BQU0sVUFBVSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztlQUM5RjthQUNGO1dBQ0Y7U0FDRjtPQUNGLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sV0FBVyxTQUFTLENBQUM7TUFDekIsV0FBVyxDQUFDLGtCQUFrQixFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUM1RSxnQkFBZ0IsQ0FBQyxjQUFjLENBQUM7S0FDakMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxtQkFBbUIsV0FBVztNQUNsQyxNQUFNLFNBQVMsWUFBWSxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDN0QsT0FBTztRQUNMLENBQUMsZ0JBQWdCLEVBQUUsR0FBRztVQUNwQixXQUFXLFdBQVc7WUFDcEIsSUFBSSxVQUFVLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtjQUM5QixNQUFNLGlCQUFpQixLQUFLLENBQUMsTUFBTSxNQUFNLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO2FBQ2pHO1dBQ0Y7U0FDRjtPQUNGLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sV0FBVyxvQ0FBb0M7TUFDbkQsU0FBUyxNQUFNLFFBQVEsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDaEUsQ0FBQztJQUNGLE1BQU0sYUFBYSxvQ0FBb0M7TUFDckQsU0FBUyxNQUFNLFFBQVEsU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDbEUsQ0FBQztJQUNGLE1BQU0sYUFBYSwwQ0FBMEM7TUFDM0QsU0FBUyxNQUFNLFFBQVEsU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3hFLENBQUM7SUFDRixNQUFNLGFBQWEsb0NBQW9DLFNBQVMsTUFBTSxRQUFRLFNBQVMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3hILE1BQU0sYUFBYSxvQ0FBb0MsUUFBUSxDQUFDOztJQUVoRSxJQUFJLDZCQUE2QixNQUFNLE9BQU8sQ0FBQztRQUMzQyxXQUFXLElBQUk7UUFDZixRQUFRLFFBQVE7UUFDaEIsVUFBVSxVQUFVO1FBQ3BCLFVBQVUsVUFBVTtRQUNwQixVQUFVLFVBQVU7UUFDcEIsVUFBVSxVQUFVO0tBQ3ZCLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFdBQVcseUJBQXlCO01BQ3hDLE1BQU0sS0FBSyxTQUFTLFdBQVcsR0FBRztRQUNoQyxhQUFhLENBQUMsZUFBZTtVQUMzQixRQUFRLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNyQyxDQUFDO1FBQ0YsYUFBYSxDQUFDLGVBQWU7VUFDM0IsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDdkMsQ0FBQztPQUNILEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO01BQy9DLE9BQU8sUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ3JCLENBQUM7O0lBRUYsSUFBSSxrQ0FBa0MsTUFBTSxPQUFPLENBQUM7UUFDaEQsV0FBVyxJQUFJO1FBQ2YsUUFBUSxRQUFRO0tBQ25CLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFdBQVcsTUFBTTtNQUNyQixNQUFNLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3hCLE1BQU0sWUFBWSxPQUFPO1FBQ3ZCLE1BQU0sUUFBUTtRQUNkLE9BQU8sSUFBSSxJQUFJLEVBQUU7T0FDbEIsQ0FBQyxDQUFDO01BQ0gsTUFBTSxXQUFXLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUM7TUFDM0MsTUFBTSxRQUFRLE1BQU07UUFDbEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDaEIsQ0FBQztNQUNGLE9BQU8sSUFBSSxDQUFDO1FBQ1YsS0FBSyxJQUFJLElBQUk7UUFDYixLQUFLLElBQUksSUFBSTtRQUNiLFFBQVE7UUFDUixLQUFLO1FBQ0wsU0FBUztPQUNWLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFNBQVMsTUFBTTtNQUNuQixNQUFNLFlBQVksSUFBSSxDQUFDO01BQ3ZCLE9BQU8sSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztLQUM1QixDQUFDO0lBQ0YsTUFBTSxVQUFVLE1BQU07TUFDcEIsTUFBTSxjQUFjLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUM3QixNQUFNLGFBQWEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQzVCLE1BQU0sWUFBWSxPQUFPO1FBQ3ZCLE1BQU0sU0FBUztRQUNmLGFBQWEsV0FBVyxJQUFJLEVBQUU7UUFDOUIsWUFBWSxVQUFVLElBQUksRUFBRTtPQUM3QixDQUFDLENBQUM7TUFDSCxNQUFNLFFBQVEsTUFBTTtRQUNsQixXQUFXLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQixVQUFVLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztPQUNwQixDQUFDO01BQ0YsTUFBTSxTQUFTLGNBQWMsS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxVQUFVLElBQUksRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7TUFDckgsTUFBTSxTQUFTLFNBQVM7UUFDdEIsTUFBTSxxQkFBcUIsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUM3QyxNQUFNLG9CQUFvQixVQUFVLElBQUksRUFBRSxDQUFDO1FBQzNDLE1BQU0saUJBQWlCLEVBQUUsQ0FBQztRQUMxQixNQUFNLGdCQUFnQixFQUFFLENBQUM7UUFDekIsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRO1VBQ3BCLGNBQWMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztVQUNsQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUTtZQUMvQixLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUTtjQUMvQixhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQzVCLENBQUMsQ0FBQztXQUNKLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQztRQUNILFdBQVcsSUFBSSxDQUFDO1VBQ2QsR0FBRyxrQkFBa0I7VUFDckIsR0FBRyxjQUFjO1NBQ2xCLENBQUMsQ0FBQztRQUNILFVBQVUsSUFBSSxDQUFDO1VBQ2IsR0FBRyxpQkFBaUI7VUFDcEIsR0FBRyxhQUFhO1NBQ2pCLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixPQUFPLElBQUksQ0FBQztRQUNWLFNBQVM7UUFDVCxNQUFNO1FBQ04sTUFBTTtRQUNOLEtBQUs7T0FDTixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxTQUFTLFFBQVEsSUFBSSxNQUFNLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDOztJQUV0RCxJQUFJLDhCQUE4QixNQUFNLE9BQU8sQ0FBQztRQUM1QyxXQUFXLElBQUk7UUFDZixRQUFRLFFBQVE7UUFDaEIsU0FBUyxPQUFPO1FBQ2hCLFFBQVEsTUFBTTtRQUNkLE1BQU0sTUFBTTtLQUNmLENBQUMsQ0FBQzs7SUFFSCxNQUFNLGFBQWEsMENBQTBDO01BQzNELE1BQU0sUUFBUSxTQUFTLE1BQU0sQ0FBQztNQUM5QixRQUFRLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDeEIsS0FBSyxTQUFTLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ2hDLFNBQVMsV0FBVyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUN2QyxDQUFDO0lBQ0YsTUFBTSxhQUFhLG9DQUFvQztNQUNyRCxNQUFNLFFBQVEsU0FBUyxNQUFNLENBQUM7TUFDOUIsTUFBTSxNQUFNLEtBQUssV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQ3hDLE9BQU8sUUFBUSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUMzRSxDQUFDO0lBQ0YsTUFBTSxXQUFXLG9DQUFvQztNQUNuRCxNQUFNLFFBQVEsU0FBUyxNQUFNLENBQUM7TUFDOUIsS0FBSyxhQUFhLEtBQUssQ0FBQyxRQUFRO1FBQzlCLFVBQVUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUNsRCxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxhQUFhLG9DQUFvQztNQUNyRCxRQUFRLE1BQU0sRUFBRSxDQUFDO0tBQ2xCLENBQUM7SUFDRixJQUFJLGVBQWU7TUFDakIsUUFBUSxDQUFDLGNBQWMsQ0FBQztNQUN4QixVQUFVLENBQUMsa0JBQWtCLENBQUM7TUFDOUIsVUFBVSxDQUFDLFlBQVksQ0FBQztNQUN4QixVQUFVLENBQUMsVUFBVSxDQUFDO01BQ3RCLFFBQVEsQ0FBQyxTQUFTLEVBQUU7UUFDbEIsVUFBVSxVQUFVO1FBQ3BCLFVBQVUsVUFBVTtRQUNwQixRQUFRLFFBQVE7UUFDaEIsVUFBVSxVQUFVO1FBQ3BCLE9BQU8sT0FBTztPQUNmLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sYUFBYSxxQ0FBcUMsU0FBUyxNQUFNLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1RixNQUFNLGFBQWEsMkNBQTJDO01BQzVELFNBQVMsTUFBTSxTQUFTLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzFDLFNBQVMsV0FBVyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUN2QyxDQUFDO0lBQ0YsTUFBTSxXQUFXLHFDQUFxQztNQUNwRCxTQUFTLE1BQU0sYUFBYSxLQUFLLENBQUMsUUFBUTtRQUN4QyxTQUFTLE1BQU0sU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUMzQyxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsSUFBSSxjQUFjO01BQ2hCLFVBQVUsQ0FBQyxVQUFVLENBQUM7TUFDdEIsU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUM7TUFDM0IsUUFBUSxDQUFDLGNBQWMsQ0FBQztNQUN4QixRQUFRLENBQUMsU0FBUyxFQUFFO1FBQ2xCLFVBQVUsVUFBVTtRQUNwQixVQUFVLFVBQVU7UUFDcEIsUUFBUSxRQUFRO1FBQ2hCLFVBQVUsSUFBSTtRQUNkLE9BQU8sT0FBTyxLQUFLO09BQ3BCLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sV0FBVywwQ0FBMEM7TUFDekQsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDbkIsU0FBUyxXQUFXLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3ZDLENBQUM7SUFDRixNQUFNLFdBQVcsb0NBQW9DLFFBQVEsSUFBSSxFQUFFLENBQUM7SUFDcEUsTUFBTSxXQUFXLG9DQUFvQztNQUNuRCxTQUFTLE1BQU0sYUFBYSxLQUFLLENBQUMsV0FBVztRQUMzQyxJQUFJLFFBQVEsU0FBUyxFQUFFLEVBQUU7VUFDdkIsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdkI7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxXQUFXLG9DQUFvQztNQUNuRCxRQUFRLE1BQU0sRUFBRSxDQUFDO0tBQ2xCLENBQUM7SUFDRixJQUFJLGNBQWM7TUFDaEIsUUFBUSxDQUFDLGNBQWMsQ0FBQztNQUN4QixRQUFRLENBQUMsU0FBUyxFQUFFO1FBQ2xCLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUSxRQUFRO1FBQ2hCLFFBQVE7UUFDUixPQUFPLFFBQVE7T0FDaEIsQ0FBQztLQUNILENBQUM7O0lBRUYsSUFBSSxrQkFBa0I7TUFDcEIsV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sUUFBUSxFQUFFLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRTtRQUN4RCxRQUFRLFdBQVc7UUFDbkIsUUFBUSxXQUFXO1FBQ25CLFNBQVMsWUFBWTtPQUN0QixDQUFDLENBQUM7TUFDSCxTQUFTLENBQUMsWUFBWSxDQUFDO01BQ3ZCLFNBQVMsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDO0tBQy9CLENBQUM7O0lBRUYsTUFBTSxlQUFlLFFBQVEsQ0FBQztNQUM1QixRQUFRLGVBQWU7TUFDdkIsTUFBTSxjQUFjO01BQ3BCLFFBQVEsa0JBQWtCO01BQzFCLE1BQU0sYUFBYTtNQUNuQixPQUFPO1FBQ0wsY0FBYyx1QkFBdUI7VUFDbkMsTUFBTSxRQUFRLFlBQVksU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1VBQzVDLFlBQVksU0FBUyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN6QztPQUNGO01BQ0QsT0FBTyxjQUFjO0tBQ3RCLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFFBQVEscUJBQXFCLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxtQkFBbUIsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlMLE1BQU0sUUFBUSxRQUFRLElBQUksS0FBSyxDQUFDO0lBQ2hDLE1BQU0sVUFBVSxxQkFBcUI7TUFDbkMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO01BQ3JCLEdBQUcsSUFBSSxLQUFLO0tBQ2IsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxtQkFBbUI7TUFDdkIsS0FBSztNQUNMLE9BQU87TUFDUCxLQUFLLEtBQUs7S0FDWCxDQUFDOztJQUVGLE1BQU0sZUFBZSxhQUFhLENBQUM7SUFDbkMsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDO01BQ3pCO1FBQ0UsUUFBUTtVQUNOLFVBQVU7VUFDVixZQUFZO1NBQ2I7T0FDRjtNQUNEO1FBQ0UsVUFBVTtVQUNSLFVBQVU7VUFDVixhQUFhO1NBQ2Q7T0FDRjtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sZ0JBQWdCLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNwRCxNQUFNLGlCQUFpQiwyQ0FBMkM7TUFDaEUsSUFBSSxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxRQUFRLE1BQU0sQ0FBQyxFQUFFO1FBQzNDLE9BQU8sS0FBSyxPQUFPLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO09BQ2pEO01BQ0QsT0FBTyxLQUFLLENBQUMsWUFBWSxFQUFFLFFBQVEsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO1FBQ25ELE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLEdBQUcsUUFBUSxLQUFLLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxnQkFBZ0IsR0FBRyxLQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ2xNLEVBQUUsV0FBVyxPQUFPLFFBQVEsRUFBRSxDQUFDLENBQUM7S0FDbEMsQ0FBQztJQUNGLE1BQU0sT0FBTywyQ0FBMkM7TUFDdEQsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxPQUFPLEtBQUssWUFBWSxFQUFFO1FBQy9ELE9BQU8sY0FBYyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO09BQzlELE1BQU07UUFDTCxPQUFPLEtBQUssT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztPQUNsRDtLQUNGLENBQUM7SUFDRixNQUFNLGFBQWEsMkNBQTJDO01BQzVELE1BQU0sT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7TUFDekQsT0FBTyxJQUFJLEtBQUssQ0FBQyxxQkFBcUI7UUFDcEMsTUFBTSxRQUFRLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLFFBQVEsT0FBTyxFQUFFLFFBQVEsVUFBVSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JILE1BQU0sYUFBYSxLQUFLLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEQsTUFBTSxjQUFjLE1BQU0sQ0FBQyxVQUFVLEVBQUUsS0FBSyxVQUFVLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUN4RixPQUFPLENBQUM7WUFDSixHQUFHLEtBQUs7WUFDUixZQUFZLFdBQVc7V0FDeEIsQ0FBQyxDQUFDO09BQ04sRUFBRSxzQkFBc0I7UUFDdkIsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUU7VUFDM0IsTUFBTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxPQUFPLEVBQUUsUUFBUSxVQUFVLENBQUMsQ0FBQztVQUN4RSxNQUFNLGVBQWUsUUFBUSxVQUFVLFdBQVcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1VBQ25FLE9BQU8sWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzdCLE1BQU07VUFDTCxPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM1QjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGdCQUFnQiw2Q0FBNkMsTUFBTSxDQUFDLFVBQVUsRUFBRSxLQUFLLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ3ZJLE1BQU0sYUFBYSx5QkFBeUI7TUFDMUMsSUFBSSxTQUFTLEtBQUssQ0FBQztNQUNuQixNQUFNLE9BQU8sTUFBTSxNQUFNLENBQUM7TUFDMUIsTUFBTSxVQUFVLE1BQU07UUFDcEIsSUFBSSxNQUFNLEVBQUU7VUFDVixNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxHQUFHLEtBQUssQ0FBQyxDQUFDO1NBQ2hGO1FBQ0QsU0FBUyxJQUFJLENBQUM7UUFDZCxPQUFPLFlBQVksQ0FBQztPQUNyQixDQUFDO01BQ0YsTUFBTSxXQUFXLE1BQU0sWUFBWSxLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUUsWUFBWSxHQUFHLENBQUMsQ0FBQztNQUMzRSxPQUFPO1FBQ0wsTUFBTSxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQ3ZCLFFBQVE7UUFDUixJQUFJO1FBQ0osT0FBTztPQUNSLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsNkNBQTZDO01BQ3BFLE1BQU0sS0FBSyxLQUFLLENBQUMsWUFBWSxFQUFFLGNBQWMsVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ25FLE1BQU0sVUFBVSxhQUFhLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDN0QsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLO1FBQ1osSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFO1VBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsZ0RBQWdELEdBQUcsS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsZ0JBQWdCLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEw7T0FDRixDQUFDLENBQUM7TUFDSCxPQUFPLE9BQU8sQ0FBQztLQUNoQixDQUFDO0lBQ0YsTUFBTSxXQUFXLEtBQUssT0FBTyxDQUFDO0lBQzlCLE1BQU0sV0FBVyxLQUFLLFNBQVMsQ0FBQztJQUNoQyxNQUFNLGNBQWMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDOztJQUU3QyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUM7TUFDekIsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7TUFDdEIsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7TUFDdEIsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7TUFDdEIsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7S0FDcEIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxXQUFXLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxRQUFRLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDNUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEMsTUFBTSxRQUFRLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxNQUFNLFNBQVMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxDQUFDLFlBQVksU0FBUyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDOUgsTUFBTSxlQUFlLFdBQVcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0UsTUFBTSxZQUFZLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEQsTUFBTSxhQUFhLFNBQVMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUQsTUFBTSxlQUFlLEtBQUssQ0FBQztNQUN6QixRQUFRO01BQ1IsT0FBTztNQUNQLEtBQUs7TUFDTCxNQUFNO01BQ04sU0FBUztNQUNULFVBQVU7S0FDWCxDQUFDLENBQUM7SUFDSCxNQUFNLGVBQWUsS0FBSyxDQUFDO01BQ3pCLFFBQVE7TUFDUixPQUFPO01BQ1AsS0FBSztNQUNMLFNBQVM7TUFDVCxVQUFVO0tBQ1gsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxlQUFlLEtBQUssQ0FBQztNQUN6QixRQUFRO01BQ1IsT0FBTztNQUNQLEtBQUs7TUFDTCxNQUFNO01BQ04sU0FBUztNQUNULFVBQVU7S0FDWCxDQUFDLENBQUM7SUFDSCxNQUFNLFlBQVksS0FBSyxDQUFDO01BQ3RCLFFBQVE7TUFDUixZQUFZO01BQ1osS0FBSztNQUNMLFVBQVUsQ0FBQyxNQUFNLENBQUM7TUFDbEIsTUFBTTtNQUNOLFNBQVM7TUFDVCxVQUFVO0tBQ1gsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxjQUFjLFFBQVE7TUFDMUIsT0FBTyxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssRUFBRSxRQUFRLEtBQUssRUFBRSxRQUFRLEtBQUssRUFBRSxRQUFRLEtBQUssQ0FBQyxDQUFDO0tBQzlFLENBQUM7SUFDRixNQUFNLFNBQVMsUUFBUTtNQUNyQixNQUFNLE1BQU0sUUFBUSxJQUFJLEtBQUssQ0FBQztNQUM5QixPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ3RDLENBQUM7SUFDRixNQUFNLFdBQVcsUUFBUTtNQUN2QixPQUFPLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQzFELENBQUM7SUFDRixNQUFNLFVBQVUsZ0NBQWdDLFFBQVE7TUFDdEQsTUFBTSxPQUFPLFlBQVksQ0FBQyxzQkFBc0IsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDcEUsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDN0IsQ0FBQztJQUNGLE1BQU0sV0FBVyxPQUFPLENBQUMsS0FBSyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDdkQsTUFBTSxXQUFXLE9BQU8sQ0FBQyxLQUFLLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN2RCxNQUFNLFdBQVcsT0FBTyxDQUFDLEtBQUssU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sUUFBUSxPQUFPLENBQUMsS0FBSyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDOUMsTUFBTSxXQUFXLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQzs7SUFFeEMsSUFBSSx3QkFBd0IsTUFBTSxPQUFPLENBQUM7UUFDdEMsV0FBVyxJQUFJO1FBQ2YsVUFBVSxRQUFRO1FBQ2xCLFVBQVUsUUFBUTtRQUNsQixVQUFVLFFBQVE7UUFDbEIsT0FBTyxLQUFLO1FBQ1osYUFBYSxXQUFXO1FBQ3hCLE1BQU0sTUFBTTtRQUNaLFVBQVUsUUFBUTtRQUNsQixVQUFVLFFBQVE7S0FDckIsQ0FBQyxDQUFDOztJQUVILE1BQU0sVUFBVSwyQ0FBMkMsU0FBUyxDQUFDLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsS0FBSyxNQUFNLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3JOLE1BQU0sT0FBTywwQkFBMEI7TUFDckMsTUFBTSxZQUFZLEVBQUUsQ0FBQztNQUNyQixNQUFNLFlBQVksRUFBRSxDQUFDO01BQ3JCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUTtRQUNwQixJQUFJLEtBQUssQ0FBQyxRQUFRO1VBQ2hCLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUscUNBQXFDLElBQUksUUFBUSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsSixFQUFFLFFBQVE7VUFDVCxNQUFNLFdBQVcsTUFBTSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztVQUN6QyxTQUFTLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxRQUFRLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDL0csRUFBRSxRQUFRO1VBQ1QsU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxxQ0FBcUMsSUFBSSxRQUFRLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25KLEVBQUUsUUFBUTtVQUNULFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsdUNBQXVDO1lBQzVFLE1BQU0sUUFBUSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztZQUNoQyxPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLFFBQVEsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDbEksQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO09BQ0osQ0FBQyxDQUFDO01BQ0gsT0FBTztRQUNMLFdBQVcsVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUNoQyxXQUFXLFVBQVUsQ0FBQyxTQUFTLENBQUM7T0FDakMsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxhQUFhLGtCQUFrQjtNQUNuQyxNQUFNLElBQUksRUFBRSxDQUFDO01BQ2IsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRO1FBQ3BCLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07VUFDM0IsTUFBTSxJQUFJLGFBQWEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztVQUN6QyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxVQUFVO1lBQ3JCLE1BQU0sWUFBWSxZQUFZLENBQUMsUUFBUSxHQUFHLEVBQUUsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDOUYsT0FBTztjQUNMLEdBQUcsQ0FBQztjQUNKLE1BQU07Y0FDTixTQUFTO2FBQ1YsQ0FBQztXQUNILENBQUM7U0FDSCxDQUFDLENBQUM7T0FDSixDQUFDLENBQUM7TUFDSCxPQUFPLENBQUMsQ0FBQztLQUNWLENBQUM7SUFDRixNQUFNLGdCQUFnQixtQkFBbUI7TUFDdkMsUUFBUSxXQUFXLEVBQUU7TUFDckIsS0FBSztNQUNMLE1BQU0sS0FBSztLQUNaLENBQUMsQ0FBQztJQUNILE1BQU0sZ0JBQWdCLDJCQUEyQjtNQUMvQyxRQUFRLFdBQVcsRUFBRTtNQUNyQixLQUFLO01BQ0wsTUFBTSxLQUFLO01BQ1gsTUFBTTtNQUNOLFdBQVcsRUFBRTtLQUNkLENBQUMsQ0FBQztJQUNILE1BQU0sVUFBVSxTQUFTLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssRUFBRSxRQUFRLEtBQUssRUFBRSxRQUFRLEtBQUssRUFBRSxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxhQUFhLENBQUMsSUFBSSxLQUFLLEVBQUUsSUFBSSxPQUFPLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbE4sTUFBTSxRQUFRLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1QyxNQUFNLGNBQWMsMEJBQTBCLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sZUFBZSw4QkFBOEIsZ0JBQWdCLENBQUMsUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2hJLE1BQU0sVUFBVSxnQ0FBZ0M7TUFDOUMsTUFBTSxNQUFNLE1BQU0sU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ3JDLE9BQU8sU0FBUyxVQUFVLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztLQUN6RCxDQUFDO0lBQ0YsTUFBTSxlQUFlLGdDQUFnQyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLHVCQUF1QixHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQ3JJLE1BQU0sV0FBVyxpQ0FBaUM7TUFDaEQsTUFBTSxJQUFJLEVBQUUsQ0FBQztNQUNiLE1BQU0sT0FBTyxNQUFNLFNBQVMsQ0FBQztNQUM3QixNQUFNLFNBQVMsU0FBUyxVQUFVLEVBQUUsQ0FBQztNQUNyQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU07UUFDckIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQy9DLENBQUMsQ0FBQztNQUNILE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0sY0FBYyx1QkFBdUI7TUFDekMsTUFBTSxTQUFTLFNBQVMsVUFBVSxFQUFFLENBQUM7TUFDckMsT0FBTyxLQUFLLENBQUMsTUFBTSxTQUFTLEVBQUUsY0FBYyxVQUFVLENBQUMsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2hGLENBQUM7SUFDRixNQUFNLGtCQUFrQixVQUFVLElBQUksQ0FBQyxNQUFNLFNBQVMsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sZ0JBQWdCLGlDQUFpQztNQUNyRCxNQUFNLElBQUksRUFBRSxDQUFDO01BQ2IsTUFBTSxPQUFPLE1BQU0sU0FBUyxDQUFDO01BQzdCLE1BQU0sU0FBUyxTQUFTLFVBQVUsRUFBRSxDQUFDO01BQ3JDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTTtRQUNyQixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO09BQzFELENBQUMsQ0FBQztNQUNILE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0sY0FBYyx3QkFBd0I7TUFDMUMsTUFBTSxZQUFZLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUNuQyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLE9BQU87UUFDckMsS0FBSyxFQUFFO1FBQ1AsT0FBTyxPQUFPLEdBQUcsR0FBRyxHQUFHLEVBQUU7T0FDMUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNOLENBQUM7SUFDRixNQUFNLG9CQUFvQixhQUFhLE9BQU8sQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxRQUFRLFdBQVcsQ0FBQyxJQUFJLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7O0lBRTdJLElBQUksMEJBQTBCLE1BQU0sT0FBTyxDQUFDO1FBQ3hDLFdBQVcsSUFBSTtRQUNmLFVBQVUsVUFBVTtRQUNwQixhQUFhLGFBQWE7UUFDMUIsU0FBUyxPQUFPO1FBQ2hCLE9BQU8sS0FBSztRQUNaLGFBQWEsV0FBVztRQUN4QixZQUFZLFlBQVk7UUFDeEIsYUFBYSxXQUFXO1FBQ3hCLG1CQUFtQixpQkFBaUI7UUFDcEMsYUFBYSxXQUFXO1FBQ3hCLGlCQUFpQixlQUFlO1FBQ2hDLFNBQVMsT0FBTztRQUNoQixjQUFjLFlBQVk7UUFDMUIsVUFBVSxRQUFRO1FBQ2xCLGVBQWUsYUFBYTtLQUMvQixDQUFDLENBQUM7O0lBRUgsTUFBTSxPQUFPLGtDQUFrQztNQUM3QyxNQUFNLEtBQUssV0FBVyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztNQUMvRSxPQUFPLEVBQUUsT0FBTyxDQUFDO1FBQ2YsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUNqQixTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUNwQixTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztRQUMzQixRQUFRLENBQUMsY0FBYyxDQUFDO1FBQ3hCLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7T0FDaEMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7S0FDNUIsQ0FBQztJQUNGLE1BQU0sYUFBYSx1REFBdUQ7TUFDeEUsTUFBTSxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7TUFDakQsT0FBTyxZQUFZLENBQUMsS0FBSyxHQUFHLGVBQWUsRUFBRSxTQUFTLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNyRixDQUFDOztJQUVGLE1BQU0sV0FBVyxrQ0FBa0M7TUFDakQsTUFBTSxjQUFjLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNwQyxNQUFNLFNBQVMsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztNQUM5RCxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7S0FDckMsQ0FBQztJQUNGLE1BQU0sY0FBYyw2Q0FBNkM7TUFDL0QsTUFBTSxjQUFjLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNwQyxNQUFNLGNBQWMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQ3ZDLE1BQU0saUJBQWlCLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQ3BELE1BQU0sU0FBUyxVQUFVLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztNQUNyRixNQUFNLE9BQU8sV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7TUFDbkQsTUFBTSxhQUFhLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQztNQUNqRSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUM7S0FDbkUsQ0FBQztJQUNGLE1BQU0sU0FBUyxRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUMsTUFBTSxZQUFZLFFBQVE7TUFDeEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHO1FBQzNCLEdBQUcsSUFBSTtRQUNQLEtBQUssVUFBVSxDQUFDLEtBQUssQ0FBQztPQUN2QixDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLGVBQWUsUUFBUTtNQUMzQixPQUFPLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQztLQUMvQixDQUFDO0lBQ0YsTUFBTSxlQUFlLFNBQVMsQ0FBQztNQUM3QixVQUFVLENBQUMsTUFBTSxDQUFDO01BQ2xCLFVBQVUsQ0FBQyxTQUFTLENBQUM7TUFDckIsVUFBVSxDQUFDLGNBQWMsQ0FBQztNQUMxQixTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztNQUNyQixTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztLQUMzQixDQUFDLENBQUM7SUFDSCxNQUFNLGtCQUFrQixTQUFTLENBQUM7TUFDaEMsVUFBVSxDQUFDLE1BQU0sQ0FBQztNQUNsQixVQUFVLENBQUMsU0FBUyxDQUFDO01BQ3JCLFVBQVUsQ0FBQyxjQUFjLENBQUM7TUFDMUIsVUFBVSxDQUFDLFlBQVksQ0FBQztNQUN4QixTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztNQUNyQixTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztLQUMzQixDQUFDLENBQUM7SUFDSCxNQUFNLFNBQVMsYUFBYTtNQUMxQixNQUFNLFNBQVMsWUFBWSxDQUFDLGVBQWUsR0FBRyxTQUFTLEtBQUssRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7TUFDdkYsTUFBTSxTQUFTLFFBQVEsUUFBUSxDQUFDLE1BQU0sS0FBSyxFQUFFLE1BQU0sYUFBYSxFQUFFLE1BQU0sUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ3hGLE1BQU0sT0FBTyxLQUFLLENBQUMsTUFBTSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDekMsTUFBTSxZQUFZLEtBQUssQ0FBQyxNQUFNLFVBQVUsRUFBRSxVQUFVLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUMxRSxPQUFPO1FBQ0wsTUFBTSxNQUFNLEtBQUs7UUFDakIsY0FBYyxNQUFNLGFBQWE7UUFDakMsTUFBTTtRQUNOLEdBQUcsSUFBSTtRQUNQLEdBQUcsU0FBUztPQUNiLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxZQUFZLGFBQWE7TUFDN0IsTUFBTSxTQUFTLFlBQVksQ0FBQyxlQUFlLEdBQUcsU0FBUyxLQUFLLEVBQUUsZUFBZSxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQzFGLE1BQU0sU0FBUyxRQUFRLFdBQVcsQ0FBQyxNQUFNLEtBQUssRUFBRSxNQUFNLGFBQWEsRUFBRSxNQUFNLFdBQVcsRUFBRSxNQUFNLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUM5RyxNQUFNLFFBQVEsVUFBVSxDQUFDLE1BQU0sS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDLENBQUM7TUFDekQsTUFBTSxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztNQUN6QyxNQUFNLFlBQVksS0FBSyxDQUFDLE1BQU0sVUFBVSxFQUFFLFVBQVUsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQzFFLE9BQU87UUFDTCxNQUFNLE1BQU0sS0FBSztRQUNqQixZQUFZLE1BQU0sV0FBVztRQUM3QixjQUFjLE1BQU0sYUFBYTtRQUNqQyxNQUFNO1FBQ04sS0FBSztRQUNMLEdBQUcsSUFBSTtRQUNQLEdBQUcsU0FBUztPQUNiLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sU0FBUyxVQUFVLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7O0lBRWxILE1BQU0sYUFBYSw2Q0FBNkMsYUFBYSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7O0lBRTlGLElBQUksMkJBQTJCLE1BQU0sT0FBTyxDQUFDO1FBQ3pDLFdBQVcsSUFBSTtRQUNmLFlBQVksVUFBVTtLQUN6QixDQUFDLENBQUM7O0lBRUgsTUFBTSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzs7SUFFM0MsTUFBTSxZQUFZLFFBQVEsQ0FBQztNQUN6QixRQUFRLGFBQWE7TUFDckIsTUFBTSxXQUFXO01BQ2pCLE1BQU0sV0FBVztLQUNsQixDQUFDLENBQUM7O0lBRUgsTUFBTSxpQkFBaUI7TUFDckIsT0FBTztNQUNQLFFBQVE7TUFDUixVQUFVO01BQ1YsUUFBUTtLQUNULENBQUM7SUFDRixNQUFNLFdBQVcsNENBQTRDO01BQzNELE1BQU0sSUFBSSxhQUFhLFNBQVMsRUFBRSxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUM7TUFDdEQsQ0FBQyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztLQUM3QixDQUFDO0lBQ0YsTUFBTSxZQUFZLHVCQUF1QixNQUFNLFVBQVUsS0FBSyxJQUFJLElBQUksVUFBVSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsU0FBUyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzVILE1BQU0sbUJBQW1CLGFBQWEsS0FBSyxDQUFDLFNBQVMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sZ0JBQWdCLGFBQWE7TUFDakMsS0FBSyxDQUFDLFNBQVMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztLQUNsRCxDQUFDO0lBQ0YsTUFBTSxlQUFlLGFBQWE7TUFDaEMsUUFBUSxDQUFDLFNBQVMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQ3pDLENBQUM7SUFDRixNQUFNLGlCQUFpQixhQUFhLEtBQUssQ0FBQyxTQUFTLFFBQVEsRUFBRSxlQUFlLENBQUMsS0FBSyxNQUFNLENBQUM7SUFDekYsTUFBTSxjQUFjLGFBQWE7TUFDL0IsS0FBSyxDQUFDLFNBQVMsUUFBUSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNuRCxDQUFDO0lBQ0YsTUFBTSxhQUFhLGFBQWE7TUFDOUIsS0FBSyxDQUFDLFNBQVMsUUFBUSxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNwRCxDQUFDO0lBQ0YsTUFBTSxVQUFVLDZDQUE2QztNQUMzRCxhQUFhLGFBQWEsS0FBSyxDQUFDLGdCQUFnQjtRQUM5QyxLQUFLLENBQUMsU0FBUyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7T0FDeEMsQ0FBQyxDQUFDO01BQ0gsTUFBTSxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLEdBQUcsYUFBYSxHQUFHLFdBQVcsQ0FBQztNQUM1RSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7TUFDYixhQUFhLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNyQyxDQUFDO0lBQ0YsTUFBTSxTQUFTLDZDQUE2QztNQUMxRCxhQUFhLGFBQWEsS0FBSyxDQUFDLGdCQUFnQjtRQUM5QyxRQUFRLENBQUMsU0FBUyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7T0FDM0MsQ0FBQyxDQUFDO01BQ0gsTUFBTSxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLEdBQUcsWUFBWSxHQUFHLFVBQVUsQ0FBQztNQUMxRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7TUFDYixhQUFhLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNwQyxDQUFDO0lBQ0YsTUFBTSxhQUFhLDhCQUE4QixTQUFTLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvSSxNQUFNLFFBQVEsc0RBQXNEO01BQ2xFLE1BQU0sSUFBSSxRQUFRLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQztNQUN0QyxDQUFDLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0tBQzdCLENBQUM7O0lBRUYsSUFBSSwyQkFBMkIsTUFBTSxPQUFPLENBQUM7UUFDekMsV0FBVyxJQUFJO1FBQ2YsUUFBUSxNQUFNO1FBQ2QsU0FBUyxPQUFPO1FBQ2hCLFlBQVksVUFBVTtRQUN0QixRQUFRLFFBQVE7UUFDaEIsS0FBSyxLQUFLO0tBQ2IsQ0FBQyxDQUFDOztJQUVILE1BQU0sWUFBWSx5QkFBeUIsSUFBSSxDQUFDLEVBQUUsU0FBUyxhQUFhLFNBQVMsRUFBRSxHQUFHLGFBQWEsYUFBYSxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25JLE1BQU0sV0FBVyxpQ0FBaUMsUUFBUSxDQUFDO01BQ3pELEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxnQ0FBZ0MsVUFBVSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztNQUN4RixTQUFTLENBQUMsYUFBYSxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUM7S0FDakQsQ0FBQyxDQUFDOztJQUVILElBQUksNkJBQTZCLE1BQU0sT0FBTyxDQUFDO1FBQzNDLFdBQVcsSUFBSTtRQUNmLFNBQVMsU0FBUztRQUNsQixRQUFRLFFBQVE7S0FDbkIsQ0FBQyxDQUFDOztJQUVILElBQUksZ0JBQWdCO01BQ2xCLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUM7TUFDcEMsU0FBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUM7TUFDNUIsUUFBUSxDQUFDLGNBQWMsQ0FBQztNQUN4QixTQUFTLENBQUMsWUFBWSxDQUFDO01BQ3ZCLFNBQVMsQ0FBQyxXQUFXLENBQUM7S0FDdkIsQ0FBQzs7SUFFRixNQUFNLFlBQVksUUFBUSxDQUFDO01BQ3pCLFFBQVEsYUFBYTtNQUNyQixNQUFNLFdBQVc7TUFDakIsUUFBUSxhQUFhO01BQ3JCLE1BQU0sV0FBVztLQUNsQixDQUFDLENBQUM7O0lBRUgsTUFBTSx1QkFBdUIsc0NBQXNDO01BQ2pFLE1BQU0sY0FBYyxXQUFXLENBQUMsU0FBUyxRQUFRLEVBQUUsR0FBRyxHQUFHLE9BQU8sZUFBZSxDQUFDLENBQUM7TUFDakYsTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLO1FBQ3ZCLE1BQU0sYUFBYSxNQUFNLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLFFBQVEsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLFVBQVUsRUFBRTtVQUNmLFFBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxlQUFlLENBQUMsQ0FBQztVQUNwQyxTQUFTLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVO1lBQy9DLE9BQU8sY0FBYyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7V0FDL0IsQ0FBQyxDQUFDO1NBQ0o7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsZ0NBQWdDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzVHLE1BQU0sY0FBYyx3Q0FBd0M7TUFDMUQsSUFBSSxhQUFhLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUU7UUFDckQsUUFBUSxDQUFDLE1BQU0sUUFBUSxFQUFFLE9BQU8sZUFBZSxDQUFDLENBQUM7UUFDakQsT0FBTyxjQUFjLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztPQUMvQjtLQUNGLENBQUM7SUFDRixNQUFNLFlBQVksd0NBQXdDO01BQ3hELG9CQUFvQixDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUMzRCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1FBQ3RELEtBQUssQ0FBQyxNQUFNLFFBQVEsRUFBRSxPQUFPLGVBQWUsQ0FBQyxDQUFDO1FBQzlDLE9BQU8sWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7T0FDN0I7S0FDRixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsZ0NBQWdDO01BQ3JELFFBQVEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhO1FBQzdDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztPQUNsRCxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsZ0NBQWdDO01BQ3BELE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZO1FBQzNDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztPQUNqRCxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxjQUFjLHVDQUF1QztNQUN6RCxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPO1FBQ3hELE1BQU0sR0FBRyxDQUFDO09BQ1gsRUFBRSxhQUFhO1FBQ2QsU0FBUyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO09BQ2xELENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGNBQWMsMkNBQTJDO01BQzdELE1BQU0sYUFBYSxhQUFhLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQ3JELE1BQU0sYUFBYSxNQUFNLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQ2pELFVBQVUsS0FBSyxDQUFDLEtBQUs7UUFDbkIsU0FBUyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQzFDLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGdCQUFnQiw2Q0FBNkMsR0FBRyxDQUFDLFdBQVcsUUFBUSxFQUFFLE9BQU8sZUFBZSxDQUFDLENBQUM7SUFDcEgsTUFBTSxpQkFBaUIsaUNBQWlDLFVBQVUsQ0FBQyxTQUFTLFFBQVEsRUFBRSxHQUFHLEdBQUcsT0FBTyxlQUFlLENBQUMsS0FBSyxDQUFDLEtBQUssU0FBUyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzlLLE1BQU0sYUFBYSx1Q0FBdUM7TUFDeEQsTUFBTSxRQUFRLFdBQVcsQ0FBQyxTQUFTLFFBQVEsRUFBRSxHQUFHLEdBQUcsT0FBTyxVQUFVLENBQUMsQ0FBQztNQUN0RSxPQUFPLFFBQVEsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxNQUFNLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ2hKLENBQUM7SUFDRixNQUFNLFdBQVcsaUNBQWlDLFVBQVUsQ0FBQyxTQUFTLFFBQVEsRUFBRSxHQUFHLEdBQUcsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssU0FBUyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ25LLE1BQU0sVUFBVSxpQ0FBaUM7TUFDL0MsTUFBTSxRQUFRLFdBQVcsQ0FBQyxTQUFTLFFBQVEsRUFBRSxHQUFHLEdBQUcsT0FBTyxVQUFVLENBQUMsQ0FBQztNQUN0RSxNQUFNLE9BQU8sS0FBSyxPQUFPLEdBQUcsQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7TUFDekYsT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLFNBQVMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztLQUN2RSxDQUFDO0lBQ0YsTUFBTSxhQUFhLHVDQUF1QztNQUN4RCxNQUFNLFFBQVEsV0FBVyxDQUFDLFNBQVMsUUFBUSxFQUFFLEdBQUcsR0FBRyxPQUFPLFVBQVUsQ0FBQyxDQUFDO01BQ3RFLE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBSyxFQUFFLFFBQVEsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLGVBQWUsQ0FBQyxDQUFDLENBQUM7TUFDOUUsT0FBTyxPQUFPLEtBQUssQ0FBQyxZQUFZO1FBQzlCLE1BQU0sT0FBTyxPQUFPLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDM0QsT0FBTyxTQUFTLFVBQVUsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO09BQ2pFLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGNBQWMsZ0NBQWdDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9GLE1BQU0sVUFBVSxnQ0FBZ0MsVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0YsTUFBTSxnQkFBZ0IsaUNBQWlDO01BQ3JELE1BQU0sUUFBUSxXQUFXLENBQUMsU0FBUyxRQUFRLEVBQUUsR0FBRyxHQUFHLE9BQU8sVUFBVSxDQUFDLENBQUM7TUFDdEUsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLFNBQVMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQy9FLENBQUM7O0lBRUYsSUFBSSw2QkFBNkIsTUFBTSxPQUFPLENBQUM7UUFDM0MsV0FBVyxJQUFJO1FBQ2YsZ0JBQWdCLGNBQWM7UUFDOUIsYUFBYSxXQUFXO1FBQ3hCLFdBQVcsU0FBUztRQUNwQixnQkFBZ0IsY0FBYztRQUM5QixlQUFlLGFBQWE7UUFDNUIsYUFBYSxXQUFXO1FBQ3hCLGFBQWEsV0FBVztRQUN4QixlQUFlLGFBQWE7UUFDNUIsZ0JBQWdCLGNBQWM7UUFDOUIsVUFBVSxRQUFRO1FBQ2xCLFNBQVMsT0FBTztRQUNoQixhQUFhLFdBQVc7UUFDeEIsU0FBUyxPQUFPO1FBQ2hCLGVBQWUsYUFBYTtLQUMvQixDQUFDLENBQUM7O0lBRUgsSUFBSSxrQkFBa0I7TUFDcEIsVUFBVSxDQUFDLGdCQUFnQixDQUFDO01BQzVCLFVBQVUsQ0FBQyxXQUFXLENBQUM7TUFDdkIsU0FBUyxDQUFDLGFBQWEsQ0FBQztNQUN4QixTQUFTLENBQUMsZUFBZSxDQUFDO0tBQzNCLENBQUM7O0lBRUYsTUFBTSxlQUFlLFFBQVEsQ0FBQztNQUM1QixRQUFRLGVBQWU7TUFDdkIsTUFBTSxjQUFjO01BQ3BCLE1BQU0sYUFBYTtLQUNwQixDQUFDLENBQUM7O0lBRUgsTUFBTSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEIsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEIsTUFBTSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkIsTUFBTSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEIsTUFBTSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkIsTUFBTSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEIsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsTUFBTSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkIsTUFBTSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7O0lBRWxCLE1BQU0sWUFBWSw4QkFBOEI7TUFDOUMsTUFBTSxTQUFTLE9BQU8sQ0FBQyxNQUFNLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUMvQyxNQUFNLFFBQVEsT0FBTyxDQUFDLE1BQU0sTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQy9DLE9BQU8sTUFBTSxDQUFDLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ2hELENBQUM7SUFDRixNQUFNLFVBQVUsOEJBQThCO01BQzVDLE1BQU0sU0FBUyxPQUFPLENBQUMsTUFBTSxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7TUFDL0MsT0FBTyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ2xDLENBQUM7SUFDRixNQUFNLFlBQVksOEJBQThCO01BQzlDLE1BQU0sU0FBUyxNQUFNLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDdEMsTUFBTSxRQUFRLE1BQU0sTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztNQUN0QyxPQUFPLE1BQU0sQ0FBQyxLQUFLLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztLQUNoRCxDQUFDO0lBQ0YsTUFBTSxVQUFVLDhCQUE4QjtNQUM1QyxNQUFNLFFBQVEsTUFBTSxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ3RDLE9BQU8sTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztLQUNqQyxDQUFDOztJQUVGLE1BQU0sUUFBUSxRQUFRLFNBQVM7TUFDN0IsTUFBTSxNQUFNLEtBQUssSUFBSSxDQUFDO01BQ3RCLE9BQU8sVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0tBQ3BDLENBQUM7SUFDRixNQUFNLE1BQU0sU0FBUyxTQUFTLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqRSxNQUFNLFVBQVUsU0FBUztNQUN2QixNQUFNLE1BQU0sS0FBSyxJQUFJLENBQUM7TUFDdEIsT0FBTyxHQUFHLFNBQVMsS0FBSyxJQUFJLENBQUM7S0FDOUIsQ0FBQztJQUNGLE1BQU0sWUFBWSxTQUFTO01BQ3pCLE1BQU0sTUFBTSxLQUFLLElBQUksQ0FBQztNQUN0QixPQUFPLEdBQUcsUUFBUSxLQUFLLElBQUksQ0FBQztLQUM3QixDQUFDO0lBQ0YsTUFBTSxhQUFhLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQzs7SUFFaEMsTUFBTSxPQUFPLHNCQUFzQjtNQUNqQyxPQUFPO01BQ1AsZ0JBQWdCLE1BQU07S0FDdkIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxTQUFTLHdCQUF3QjtNQUNyQyxNQUFNLGFBQWEsTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7TUFDOUQsT0FBTyxVQUFVLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7S0FDOUMsQ0FBQzs7SUFFRixNQUFNLHNCQUFzQixvQ0FBb0M7TUFDOUQsTUFBTSxXQUFXLFNBQVMsT0FBTyxDQUFDLEtBQUssUUFBUSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUN2RSxJQUFJLENBQUMsUUFBUSxFQUFFO1FBQ2IsUUFBUSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsRUFBRTtVQUNsQyxTQUFTO1VBQ1QsUUFBUTtTQUNULENBQUMsQ0FBQztPQUNKO0tBQ0YsQ0FBQztJQUNGLE1BQU0sUUFBUSxNQUFNO01BQ2xCLE1BQU0sTUFBTSxhQUFhLE1BQU0sQ0FBQyxTQUFTLFFBQVEsQ0FBQyxDQUFDO01BQ25ELE1BQU0sTUFBTSx3QkFBd0I7UUFDbEMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqQyxTQUFTLFVBQVUsRUFBRSxhQUFhLENBQUMsT0FBTyxFQUFFLFNBQVMsUUFBUSxDQUFDLENBQUM7UUFDL0QsTUFBTSxXQUFXLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO09BQ3JELENBQUM7TUFDRixPQUFPO1FBQ0wsR0FBRztRQUNILEdBQUc7T0FDSixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sYUFBYSxNQUFNO01BQ3ZCLE1BQU0sTUFBTSxhQUFhLFlBQVksZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxDQUFDO01BQzFGLE1BQU0sTUFBTSx3QkFBd0I7UUFDbEMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqQyxTQUFTLFVBQVUsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUTtVQUN6RCxZQUFZLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDekMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxXQUFXLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO09BQ3JELENBQUM7TUFDRixPQUFPO1FBQ0wsR0FBRztRQUNILEdBQUc7T0FDSixDQUFDO0tBQ0gsQ0FBQzs7SUFFRixJQUFJLGdCQUFnQixDQUFDO0lBQ3JCLENBQUMsNEJBQTRCO01BQzNCLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxHQUFHLFNBQVMsQ0FBQztNQUM1QyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLGdCQUFnQixDQUFDO01BQzFELGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxHQUFHLE9BQU8sQ0FBQztLQUN6QyxDQUFDLGdCQUFnQixLQUFLLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxFQUFFOztJQUVoRCxNQUFNLFVBQVUsdUVBQXVFO01BQ3JGLE1BQU0sU0FBUyxNQUFNLFVBQVUsT0FBTyxDQUFDO1FBQ3JDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDbEMsV0FBVyxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU8sVUFBVSxDQUFDO1VBQzlELFNBQVM7VUFDVCxnQkFBZ0I7VUFDaEIsT0FBTztTQUNSLEVBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxNQUFNLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDO1FBQzdFLFFBQVEsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1FBQ3ZCLFFBQVEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDO1FBQzVCLFFBQVEsQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDO09BQ3BDLENBQUMsQ0FBQztNQUNILE1BQU0sYUFBYSxvRUFBb0U7UUFDckYsTUFBTSxRQUFRLFFBQVEsQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM3RSxPQUFPLE1BQU0sQ0FBQyxLQUFLLEVBQUUsY0FBYyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7T0FDckgsQ0FBQztNQUNGLE1BQU0sV0FBVywrQkFBK0I7UUFDOUMsTUFBTSxpQkFBaUIsWUFBWSxZQUFZLEtBQUssZ0JBQWdCLFlBQVksR0FBRyxRQUFRLEtBQUssRUFBRSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLCtCQUErQjtVQUMzTCxPQUFPLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztVQUM5QyxjQUFjLEtBQUssRUFBRSxDQUFDO1NBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBQ0osTUFBTSx1QkFBdUIsK0JBQStCO1VBQzFELE1BQU0saUJBQWlCLEtBQUssQ0FBQyxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGNBQWMsTUFBTSxDQUFDLENBQUM7VUFDeEUsSUFBSSxZQUFZLFlBQVksS0FBSyxnQkFBZ0IsbUJBQW1CLElBQUksY0FBYyxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLEVBQUU7WUFDN0gsVUFBVSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsV0FBVztjQUN2QyxPQUFPLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztjQUM5QyxjQUFjLEtBQUssRUFBRSxDQUFDO2FBQ3ZCLENBQUMsQ0FBQztXQUNKO1NBQ0YsQ0FBQztRQUNGLE1BQU0saUJBQWlCO1VBQ3JCLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSwrQkFBK0I7WUFDOUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU07Y0FDM0Ysb0JBQW9CLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO2FBQ2pELEVBQUUsS0FBSztjQUNOLGNBQWMsS0FBSyxFQUFFLENBQUM7YUFDdkIsQ0FBQyxDQUFDO1dBQ0osQ0FBQztVQUNGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSwrQkFBK0I7WUFDNUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUs7Y0FDeEYsY0FBYyxLQUFLLEVBQUUsQ0FBQzthQUN2QixDQUFDLENBQUM7V0FDSixDQUFDO1NBQ0gsQ0FBQztRQUNGLE9BQU8sUUFBUSxDQUFDLGNBQWMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO09BQ2xFLENBQUM7TUFDRixNQUFNLEtBQUs7UUFDVCxNQUFNO1FBQ04sVUFBVTtRQUNWLFFBQVE7T0FDVCxDQUFDO01BQ0YsT0FBTyxFQUFFLENBQUM7S0FDWCxDQUFDOztJQUVGLE1BQU0sV0FBVyxlQUFlO01BQzlCLE1BQU0sU0FBUztRQUNiLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFDcEIsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUNuQixTQUFTLENBQUMsVUFBVSxFQUFFLDRDQUE0QyxDQUFDO1FBQ25FLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLFNBQVMsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDO1FBQ2pDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztPQUMvQixPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO01BQ3hCLE1BQU0sWUFBWSw0QkFBNEI7UUFDNUMsTUFBTSxTQUFTLGFBQWEsbUJBQW1CLEtBQUssQ0FBQyxPQUFPLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BHLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUMxQixDQUFDO01BQ0YsTUFBTSxjQUFjLDhCQUE4QjtRQUNoRCxNQUFNLFdBQVcsV0FBVyxDQUFDLFNBQVMsUUFBUSxFQUFFLGFBQWEsU0FBUyxDQUFDLENBQUM7UUFDeEUsTUFBTSxXQUFXLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxTQUFTLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUUsT0FBTyxRQUFRLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxhQUFhLENBQUMsQ0FBQyxDQUFDO09BQzVELENBQUM7TUFDRixNQUFNLGNBQWMsOEJBQThCLGFBQWEsYUFBYSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLFNBQVMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxTQUFTLENBQUMsQ0FBQyxDQUFDO01BQ2xKLE1BQU0sWUFBWSw0QkFBNEIsU0FBUyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsSUFBSSxhQUFhLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUN2SCxNQUFNLFVBQVUsNkNBQTZDO1FBQzNELFdBQVcsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxVQUFVO1VBQ25ELGFBQWEsYUFBYSxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ25ELENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLGdCQUFnQiwwREFBMEQsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxTQUFTLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLGFBQWEsT0FBTyxHQUFHLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLEVBQUUsVUFBVTtRQUNwTyxhQUFhLGFBQWEsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNsRCxPQUFPLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzVCLENBQUMsQ0FBQztNQUNILE1BQU0sS0FBSyxzREFBc0Q7UUFDL0QsTUFBTSxXQUFXLFdBQVcsQ0FBQyxTQUFTLFFBQVEsRUFBRSxhQUFhLFNBQVMsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sV0FBVyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLFdBQVc7VUFDM0QsTUFBTSxlQUFlLFdBQVcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1VBQy9ELE9BQU8sWUFBWSxLQUFLLENBQUMsYUFBYSxhQUFhLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDNUcsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sY0FBYyw4Q0FBOEM7UUFDaEUsTUFBTSxXQUFXLGFBQWEsT0FBTyxHQUFHLFNBQVMsR0FBRyxPQUFPLENBQUM7UUFDNUQsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7T0FDL0QsQ0FBQztNQUNGLE1BQU0sYUFBYSw4Q0FBOEM7UUFDL0QsTUFBTSxXQUFXLGFBQWEsT0FBTyxHQUFHLFNBQVMsR0FBRyxPQUFPLENBQUM7UUFDNUQsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7T0FDL0QsQ0FBQztNQUNGLE1BQU0sZUFBZSxRQUFRLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDaEcsTUFBTSxzQkFBc0IsOENBQThDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxHQUFHLFVBQVUsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7TUFDMVEsTUFBTSxVQUFVLDhDQUE4QyxhQUFhLFFBQVEsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO01BQzVILE1BQU0sT0FBTyw4Q0FBOEMsYUFBYSxTQUFTLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztNQUMxSCxNQUFNLGtCQUFrQixVQUFVLENBQUM7UUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQztVQUNQLE9BQU87VUFDUCxLQUFLLENBQUMsR0FBRyxDQUFDO1NBQ1gsQ0FBQyxFQUFFLFdBQVcsQ0FBQztRQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQztRQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDO1VBQ1AsVUFBVTtVQUNWLEtBQUssQ0FBQyxLQUFLLENBQUM7U0FDYixDQUFDLEVBQUUsT0FBTyxDQUFDO09BQ2IsQ0FBQyxDQUFDO01BQ0gsTUFBTSxnQkFBZ0IsVUFBVSxDQUFDO1FBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsbUJBQW1CLENBQUM7T0FDdEMsQ0FBQyxDQUFDO01BQ0gsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxRQUFRLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0tBQ3BHLENBQUM7O0lBRUYsSUFBSSxjQUFjLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7O0lBRXpELElBQUksYUFBYSxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDOztJQUV6RCxNQUFNLG1CQUFtQix5Q0FBeUM7TUFDaEUsUUFBUSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztNQUMxQyxPQUFPLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzVCLENBQUM7SUFDRixNQUFNLGlCQUFpQix3Q0FBd0M7TUFDN0QsTUFBTSxZQUFZLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsY0FBYyxNQUFNLENBQUMsQ0FBQztNQUN4RSxPQUFPLFNBQVMsR0FBRyxRQUFRLEtBQUssRUFBRSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDM0YsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLGlDQUFpQyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzs7SUFFakYsTUFBTSxXQUFXO01BQ2YsU0FBUyxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUM7TUFDcEMsU0FBUyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUM7TUFDNUIsU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUM7TUFDM0IsU0FBUyxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQztNQUNuQyxTQUFTLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQztLQUM1QixDQUFDO0lBQ0YsTUFBTSxZQUFZLDhDQUE4QyxhQUFhLFFBQVEsQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFLFNBQVMsUUFBUSxDQUFDLENBQUM7SUFDcEksTUFBTSxvQkFBb0IsOERBQThEO01BQ3RGLE1BQU0sWUFBWSxhQUFhLFNBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLFFBQVEsQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7TUFDcEYsTUFBTSxZQUFZLGFBQWEsU0FBUyxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7TUFDdEQsTUFBTSxXQUFXLGFBQWEsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7TUFDbkQsTUFBTSxXQUFXLFNBQVMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDOUQsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1VBQ3ZGLFNBQVM7VUFDVCxLQUFLLENBQUMsS0FBSyxDQUFDO1NBQ2IsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7S0FDekIsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLDhEQUE4RCxhQUFhLFNBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzVMLElBQUksZ0JBQWdCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sUUFBUSxLQUFLLEVBQUUsQ0FBQyxDQUFDOztJQUUvRyxNQUFNLGFBQWEsTUFBTTtNQUN2QixNQUFNLGFBQWEsT0FBTyxFQUFFLENBQUM7TUFDN0IsTUFBTSxjQUFjLHlCQUF5QjtRQUMzQyxVQUFVLElBQUksQ0FBQztVQUNiLE9BQU87VUFDUCxVQUFVO1NBQ1gsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sYUFBYSxNQUFNLFVBQVUsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDOUQsTUFBTSxnQkFBZ0IsTUFBTSxVQUFVLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO01BQ3BFLE9BQU8sSUFBSSxDQUFDO1FBQ1YsV0FBVyxNQUFNLFVBQVUsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNO1VBQzFDLFNBQVMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDO1VBQzFCLFlBQVksTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDO1NBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUM7VUFDUixTQUFTLEdBQUc7VUFDWixZQUFZLEdBQUc7U0FDaEIsQ0FBQztRQUNGLFdBQVc7UUFDWCxVQUFVO1FBQ1YsYUFBYTtPQUNkLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFNBQVMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7SUFFeEMsSUFBSSwyQkFBMkIsTUFBTSxPQUFPLENBQUM7UUFDekMsV0FBVyxJQUFJO1FBQ2YsVUFBVSxVQUFVO1FBQ3BCLE1BQU0sTUFBTTtLQUNmLENBQUMsQ0FBQzs7SUFFSCxNQUFNLE9BQU8sWUFBWSw4Q0FBOEM7TUFDckUsTUFBTSxPQUFPLFFBQVEsQ0FBQyxTQUFTLFFBQVEsQ0FBQyxDQUFDO01BQ3pDLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztLQUM1RCxDQUFDO0lBQ0YsTUFBTSxTQUFTLHlCQUF5QjtNQUN0QyxNQUFNLFdBQVcsV0FBVyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztNQUNsRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUN2QixDQUFDO0lBQ0YsTUFBTSxTQUFTLHlCQUF5QjtNQUN0QyxNQUFNLFdBQVcsV0FBVyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztNQUNsRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUN2QixDQUFDO0lBQ0YsTUFBTSxPQUFPLFFBQVEsOENBQThDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkgsTUFBTSxNQUFNLG9EQUFvRDtNQUM5RCxNQUFNLFVBQVUsTUFBTSxhQUFhLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxDQUFDLFNBQVMsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUNwSCxPQUFPLE9BQU8sSUFBSSxDQUFDLFlBQVk7UUFDN0IsTUFBTSxhQUFhLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUM7T0FDYixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxVQUFVLElBQUksQ0FBQztJQUNyQixNQUFNLFVBQVUsSUFBSSxDQUFDO0lBQ3JCLE1BQU0sU0FBUyxJQUFJLENBQUM7O0lBRXBCLE1BQU0sYUFBYSxPQUFPLEdBQUcsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLGFBQWEsSUFBSSxDQUFDLENBQUM7SUFDeEUsTUFBTSxZQUFZLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQzs7SUFFdEQsTUFBTSxTQUFTLDJCQUEyQixXQUFXLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVTtNQUN6RixLQUFLO01BQ0wsVUFBVTtLQUNYLENBQUMsQ0FBQyxDQUFDOztJQUVKLE1BQU0sZ0JBQWdCLGtDQUFrQztNQUN0RCxNQUFNLFlBQVksS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQ3RDLE1BQU0sYUFBYSxXQUFXLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQ3BELE1BQU0sVUFBVSxRQUFRLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQ2hELE9BQU8sTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztLQUNuQyxDQUFDO0lBQ0YsTUFBTSxZQUFZLHNCQUFzQixXQUFXLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDOztJQUV4RixNQUFNLFdBQVcsK0JBQStCO01BQzlDLE1BQU0sU0FBUyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUM7TUFDM0MsTUFBTSxZQUFZLEtBQUssR0FBRyxPQUFPLENBQUM7TUFDbEMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsV0FBVztRQUMxQyxNQUFNLFdBQVcsT0FBTyxJQUFJLEdBQUcsT0FBTyxHQUFHLE9BQU8sT0FBTyxDQUFDO1FBQ3hELE9BQU8sUUFBUSxJQUFJLENBQUMsSUFBSSxRQUFRLEdBQUcsTUFBTSxPQUFPLEdBQUcsUUFBUSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN0RyxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsNENBQTRDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSx1QkFBdUI7TUFDNUgsTUFBTSxZQUFZLE1BQU0sS0FBSyxPQUFPLEdBQUcsQ0FBQyxDQUFDO01BQ3pDLE1BQU0sWUFBWSxTQUFTLEdBQUcsTUFBTSxPQUFPLEdBQUcsTUFBTSxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUM7TUFDekUsTUFBTSxZQUFZLE9BQU8sQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDOUQsT0FBTyxRQUFRLEtBQUssQ0FBQztRQUNuQixLQUFLLE1BQU07UUFDWCxRQUFRLFNBQVM7T0FDbEIsQ0FBQyxDQUFDO0tBQ0osQ0FBQyxDQUFDO0lBQ0gsTUFBTSxrQkFBa0IsNENBQTRDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSx1QkFBdUI7TUFDMUgsTUFBTSxTQUFTLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDdEQsTUFBTSxZQUFZLE1BQU0sS0FBSyxPQUFPLEdBQUcsQ0FBQyxDQUFDO01BQ3pDLE1BQU0sWUFBWSxTQUFTLEdBQUcsTUFBTSxPQUFPLEdBQUcsTUFBTSxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUM7TUFDekUsTUFBTSxTQUFTLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUNsRCxPQUFPLFFBQVEsS0FBSyxDQUFDO1FBQ25CLEtBQUssTUFBTTtRQUNYLFFBQVEsTUFBTTtPQUNmLENBQUMsQ0FBQztLQUNKLENBQUMsQ0FBQztJQUNILE1BQU0sZUFBZSxxQ0FBcUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakgsTUFBTSxjQUFjLHFDQUFxQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoSCxNQUFNLFlBQVkscUNBQXFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RyxNQUFNLGNBQWMscUNBQXFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFOUcsTUFBTSxXQUFXO01BQ2YsVUFBVSxDQUFDLFVBQVUsQ0FBQztNQUN0QixTQUFTLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQztNQUNwQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUM7TUFDN0IsU0FBUyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUM7TUFDOUIsUUFBUSxFQUFFO0tBQ1gsQ0FBQztJQUNGLE1BQU0sWUFBWSx1Q0FBdUM7TUFDdkQsVUFBVSxDQUFDLFNBQVMsUUFBUSxFQUFFLFVBQVUsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTO1FBQy9ELFVBQVUsYUFBYSxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQy9DLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGdCQUFnQiwyQkFBMkIsVUFBVSxhQUFhLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsU0FBUyxDQUFDLElBQUksRUFBRSxVQUFVLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDM0ksTUFBTSxZQUFZLHVEQUF1RCxhQUFhLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxVQUFVLFFBQVEsQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDdEwsTUFBTSxXQUFXLFNBQVMsNkNBQTZDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsU0FBUyxDQUFDLEtBQUssQ0FBQyxjQUFjLEtBQUssQ0FBQyxVQUFVLFdBQVcsRUFBRSxVQUFVLE1BQU0sRUFBRSxTQUFTLFdBQVcsRUFBRSxNQUFNLENBQUMsVUFBVSxTQUFTLFFBQVEsQ0FBQyxFQUFFLFNBQVMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxVQUFVLFNBQVMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNULE1BQU0sWUFBWSw2Q0FBNkMsVUFBVSxXQUFXLEdBQUcsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztJQUM3SCxNQUFNLGFBQWEsMkNBQTJDLFVBQVUsU0FBUyxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUM3RyxNQUFNLGFBQWEsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sY0FBYyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDM0MsTUFBTSxjQUFjLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4QyxNQUFNLGNBQWMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sb0JBQW9CLFVBQVUsQ0FBQztNQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO01BQ25ELElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO01BQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO01BQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDUCxPQUFPO1FBQ1AsS0FBSyxDQUFDLEdBQUcsQ0FBQztPQUNYLENBQUMsRUFBRSxTQUFTLENBQUM7TUFDZCxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ1AsVUFBVTtRQUNWLEtBQUssQ0FBQyxHQUFHLENBQUM7T0FDWCxDQUFDLEVBQUUsU0FBUyxDQUFDO01BQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQztLQUM1QyxDQUFDLENBQUM7SUFDSCxNQUFNLGtCQUFrQixVQUFVLENBQUM7TUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxVQUFVLENBQUM7TUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxtQkFBbUIsQ0FBQztLQUN4QyxDQUFDLENBQUM7SUFDSCxJQUFJLGVBQWUsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sUUFBUSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzs7SUFFckgsTUFBTSxJQUFJLHNEQUFzRDtNQUM5RCxNQUFNLG1CQUFtQixhQUFhLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsS0FBSyxVQUFVLENBQUM7TUFDcEgsTUFBTSxjQUFjLGdDQUFnQyxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFVBQVUsT0FBTyxHQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsWUFBWSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQzNRLE9BQU8sYUFBYSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxjQUFjO1FBQ3BFLE1BQU0sUUFBUSxVQUFVLE1BQU0sQ0FBQztRQUMvQixNQUFNLGFBQWEsVUFBVSxXQUFXLENBQUM7UUFDekMsT0FBTyxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztPQUM5QyxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSwwQkFBMEIseUNBQXlDLENBQUMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUseURBQXlEO01BQ3ZLLE1BQU0sV0FBVyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDeEMsT0FBTyxRQUFRLEtBQUssU0FBUyxHQUFHLFFBQVEsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUNwRixDQUFDLENBQUM7SUFDSCxNQUFNLGFBQWEseUNBQXlDLENBQUMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsMERBQTBEO01BQzNKLE1BQU0sV0FBVyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDekMsT0FBTyxRQUFRLEtBQUssU0FBUyxHQUFHLFFBQVEsS0FBSyxFQUFFLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3hFLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFdBQVc7TUFDZixVQUFVLENBQUMsVUFBVSxDQUFDO01BQ3RCLFNBQVMsQ0FBQyxZQUFZLEVBQUUsUUFBUSxLQUFLLENBQUM7TUFDdEMsU0FBUyxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUM7TUFDcEMsaUJBQWlCLENBQUMsVUFBVSxDQUFDO01BQzdCLFNBQVMsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDO01BQ2pDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDO01BQ2hDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUM7TUFDbEMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7S0FDMUIsQ0FBQztJQUNGLE1BQU0sY0FBYywyQkFBMkIsVUFBVSxhQUFhLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsU0FBUyxDQUFDLElBQUksRUFBRSxVQUFVLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDekksTUFBTSxZQUFZLDJDQUEyQyxXQUFXLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxVQUFVLFFBQVEsQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDeEssTUFBTSxZQUFZLG1DQUFtQztNQUNuRCxVQUFVLFdBQVcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sVUFBVSxDQUFDLFNBQVMsUUFBUSxFQUFFLFVBQVUsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVM7UUFDL0csVUFBVSxhQUFhLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDL0MsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sYUFBYSw0QkFBNEIsQ0FBQyxJQUFJLE9BQU8sR0FBRyxVQUFVLEdBQUcsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLElBQUksU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pJLE1BQU0sY0FBYyw0QkFBNEIsQ0FBQyxJQUFJLE9BQU8sR0FBRyxVQUFVLEdBQUcsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLElBQUksU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFJLE1BQU0sV0FBVyxZQUFZLHNEQUFzRCxRQUFRLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLFVBQVUsY0FBYyxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFLFVBQVUsQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNVAsTUFBTSxXQUFXLDJDQUEyQyxVQUFVLFNBQVMsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDM0csTUFBTSxvQkFBb0IsNkNBQTZDO01BQ3JFLE1BQU0sYUFBYSxDQUFDLEdBQUcsVUFBVSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLGNBQWMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7TUFDMUcsTUFBTSxhQUFhLENBQUMsR0FBRyxVQUFVLGdCQUFnQixHQUFHLEtBQUssR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsY0FBYyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztNQUM3RyxPQUFPO1FBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsQ0FBQztRQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsQ0FBQztPQUM5QixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLFVBQVUsQ0FBQztNQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLG1CQUFtQixDQUFDO01BQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxDQUFDO0tBQzlCLENBQUMsQ0FBQztJQUNILElBQUksV0FBVyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLFFBQVEsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7O0lBRW5ILE1BQU0sU0FBUyxtQ0FBbUMsUUFBUSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUztNQUN6SSxRQUFRO01BQ1IsV0FBVztNQUNYLElBQUk7S0FDTCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsTUFBTSxrQkFBa0IsMENBQTBDO01BQ2hFLE1BQU0sTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDN0IsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDO01BQzdCLE1BQU0sY0FBYyxPQUFPLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ2xFLE9BQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7S0FDOUMsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLDBDQUEwQztNQUM5RCxNQUFNLGVBQWUsT0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ3ZFLE1BQU0sZ0JBQWdCLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO01BQ2xELE1BQU0sZUFBZSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDM0QsT0FBTyxNQUFNLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztLQUNuRCxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsMENBQTBDO01BQy9ELE1BQU0sTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDN0IsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDO01BQzdCLE1BQU0sY0FBYyxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ2pFLE9BQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7S0FDOUMsQ0FBQztJQUNGLE1BQU0sZUFBZSwwQ0FBMEM7TUFDN0QsTUFBTSxlQUFlLEtBQUssQ0FBQyxRQUFRLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztNQUN0RSxNQUFNLGdCQUFnQixNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztNQUNsRCxNQUFNLGVBQWUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQzNELE9BQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7S0FDbkQsQ0FBQztJQUNGLE1BQU0sYUFBYSxnQ0FBZ0MsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkcsTUFBTSxZQUFZLGdDQUFnQyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRyxNQUFNLFVBQVUsZ0NBQWdDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlGLE1BQU0sWUFBWSxnQ0FBZ0MsYUFBYSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEcsTUFBTSxhQUFhLGdDQUFnQyxjQUFjLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRyxNQUFNLGNBQWMsZ0NBQWdDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25HLE1BQU0sV0FBVyxnQ0FBZ0MsWUFBWSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUYsTUFBTSxhQUFhLGdDQUFnQyxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFaEcsTUFBTSxXQUFXO01BQ2YsYUFBYSxDQUFDLFdBQVcsRUFBRTtRQUN6QixVQUFVLENBQUMsS0FBSyxDQUFDO1FBQ2pCLFVBQVUsQ0FBQyxNQUFNLENBQUM7T0FDbkIsQ0FBQztNQUNGLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO01BQ3pCLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLEtBQUssQ0FBQztNQUM1QyxTQUFTLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQztLQUNyQyxDQUFDO0lBQ0YsTUFBTSxZQUFZLHFDQUFxQztNQUNyRCxNQUFNLFVBQVUsWUFBWSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU07UUFDckUsTUFBTSxZQUFZLFlBQVksVUFBVSxDQUFDO1FBQ3pDLE9BQU8sVUFBVSxDQUFDLFNBQVMsUUFBUSxFQUFFLFNBQVMsS0FBSyxDQUFDLENBQUM7T0FDdEQsQ0FBQyxDQUFDO01BQ0gsT0FBTyxLQUFLLENBQUMsUUFBUTtRQUNuQixZQUFZLGFBQWEsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUNoRCxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxZQUFZLDZDQUE2QyxNQUFNLENBQUMsU0FBUyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsWUFBWSxRQUFRLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ25LLE1BQU0sV0FBVyx3QkFBd0IsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLFdBQVcsQ0FBQyxHQUFHLEVBQUUsWUFBWSxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDM0csTUFBTSxTQUFTLHFCQUFxQixvQ0FBb0M7TUFDdEUsTUFBTSxPQUFPLFlBQVksT0FBTyxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUM7TUFDcEQsT0FBTyxTQUFTLENBQUMsT0FBTyxFQUFFLFlBQVksVUFBVSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVM7UUFDbEUsTUFBTSxhQUFhLFdBQVcsQ0FBQyxLQUFLLEVBQUUsWUFBWSxVQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ25FLE9BQU8sU0FBUyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVk7VUFDckQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxPQUFPLEVBQUUsWUFBWSxVQUFVLElBQUksQ0FBQyxDQUFDO1VBQ2pFLE9BQU8sU0FBUyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVk7WUFDaEQsTUFBTSxTQUFTLFFBQVEsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDL0MsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQztXQUNoRSxDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7T0FDSixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxXQUFXLE1BQU0sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDL0MsTUFBTSxZQUFZLE1BQU0sQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbEQsTUFBTSxZQUFZLE1BQU0sQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDNUMsTUFBTSxZQUFZLE1BQU0sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDaEQsTUFBTSxvQkFBb0IsVUFBVSxDQUFDO01BQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztNQUM5QyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7TUFDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7TUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7TUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQztLQUM1QyxDQUFDLENBQUM7SUFDSCxNQUFNLGtCQUFrQixVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlFLElBQUksYUFBYSxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLFFBQVEsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7O0lBRXJILE1BQU0sV0FBVztNQUNmLFVBQVUsQ0FBQyxVQUFVLENBQUM7TUFDdEIsU0FBUyxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUM7TUFDcEMsU0FBUyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUM7S0FDOUIsQ0FBQztJQUNGLE1BQU0sVUFBVSwyQ0FBMkMsVUFBVSxhQUFhLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsVUFBVSxRQUFRLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzFLLE1BQU0sVUFBVSxtQ0FBbUM7TUFDakQsVUFBVSxDQUFDLFNBQVMsUUFBUSxFQUFFLFVBQVUsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTO1FBQy9ELFVBQVUsYUFBYSxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQy9DLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFNBQVMsNEJBQTRCLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0YsTUFBTSxXQUFXLDRCQUE0QixVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdGLE1BQU0sZUFBZSxzREFBc0QsVUFBVSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7SUFDckwsTUFBTSxVQUFVLHNEQUFzRCxVQUFVLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztJQUNsTCxNQUFNLG9CQUFvQixVQUFVLENBQUM7TUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNQLE9BQU87UUFDUCxLQUFLLENBQUMsR0FBRyxDQUFDO09BQ1gsQ0FBQyxFQUFFLFlBQVksQ0FBQztNQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ1AsVUFBVTtRQUNWLEtBQUssQ0FBQyxHQUFHLENBQUM7T0FDWCxDQUFDLEVBQUUsT0FBTyxDQUFDO01BQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUM7TUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUM7S0FDNUIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxrQkFBa0IsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxJQUFJLFdBQVcsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxRQUFRLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDOztJQUVqSCxNQUFNLFdBQVc7TUFDZixpQkFBaUIsQ0FBQyxTQUFTLENBQUM7TUFDNUIsaUJBQWlCLENBQUMsU0FBUyxDQUFDO01BQzVCLGlCQUFpQixDQUFDLGNBQWMsQ0FBQztNQUNqQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7TUFDM0IsaUJBQWlCLENBQUMsU0FBUyxDQUFDO01BQzVCLGlCQUFpQixDQUFDLE9BQU8sQ0FBQztNQUMxQixpQkFBaUIsQ0FBQyxZQUFZLENBQUM7TUFDL0IsaUJBQWlCLENBQUMsTUFBTSxDQUFDO01BQ3pCLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztNQUMzQixpQkFBaUIsQ0FBQyxVQUFVLENBQUM7TUFDN0IsU0FBUyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQztNQUNsQyxRQUFRLENBQUMsU0FBUyxDQUFDO0tBQ3BCLENBQUM7SUFDRixNQUFNLGtCQUFrQiw0Q0FBNEM7TUFDbEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxXQUFXLFFBQVEsQ0FBQztNQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ1AsVUFBVTtRQUNWLEtBQUssQ0FBQyxLQUFLLENBQUM7T0FDYixDQUFDLEVBQUUsV0FBVyxRQUFRLENBQUM7TUFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNQLE9BQU87UUFDUCxLQUFLLENBQUMsS0FBSyxDQUFDO09BQ2IsQ0FBQyxFQUFFLFdBQVcsYUFBYSxDQUFDO01BQzdCLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDUCxPQUFPO1FBQ1AsS0FBSyxDQUFDLEdBQUcsQ0FBQztPQUNYLENBQUMsRUFBRSxXQUFXLFdBQVcsQ0FBQztNQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ1AsVUFBVTtRQUNWLEtBQUssQ0FBQyxHQUFHLENBQUM7T0FDWCxDQUFDLEVBQUUsV0FBVyxNQUFNLENBQUM7TUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLEtBQUssQ0FBQztNQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLFdBQVcsT0FBTyxDQUFDO01BQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVyxPQUFPLENBQUM7TUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxXQUFXLFFBQVEsQ0FBQztNQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLFdBQVcsUUFBUSxDQUFDO0tBQ3hDLENBQUM7SUFDRixNQUFNLGdCQUFnQiw0Q0FBNEM7TUFDaEUsR0FBRyxXQUFXLGVBQWUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxHQUFHLEVBQUU7TUFDOUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxXQUFXLFNBQVMsQ0FBQztLQUMxQyxDQUFDO0lBQ0YsSUFBSSxjQUFjLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxlQUFlLFdBQVcsUUFBUSxDQUFDLENBQUM7O0lBRXRILE1BQU0sVUFBVSxXQUFXLE9BQU8sRUFBRSxDQUFDO0lBQ3JDLE1BQU0sU0FBUyxVQUFVLE9BQU8sRUFBRSxDQUFDO0lBQ25DLE1BQU0sT0FBTyxRQUFRLE9BQU8sRUFBRSxDQUFDO0lBQy9CLE1BQU0sV0FBVyxZQUFZLE9BQU8sRUFBRSxDQUFDO0lBQ3ZDLE1BQU0sU0FBUyxVQUFVLE9BQU8sRUFBRSxDQUFDO0lBQ25DLE1BQU0sWUFBWSxhQUFhLE9BQU8sRUFBRSxDQUFDO0lBQ3pDLE1BQU0sT0FBTyxRQUFRLE9BQU8sRUFBRSxDQUFDO0lBQy9CLE1BQU0sVUFBVSxXQUFXLE9BQU8sRUFBRSxDQUFDOztJQUVyQyxJQUFJLGdDQUFnQyxNQUFNLE9BQU8sQ0FBQztRQUM5QyxXQUFXLElBQUk7UUFDZixTQUFTLE9BQU87UUFDaEIsUUFBUSxNQUFNO1FBQ2QsTUFBTSxJQUFJO1FBQ1YsVUFBVSxRQUFRO1FBQ2xCLFFBQVEsTUFBTTtRQUNkLFdBQVcsU0FBUztRQUNwQixNQUFNLElBQUk7UUFDVixTQUFTLE9BQU87S0FDbkIsQ0FBQyxDQUFDOztJQUVILE1BQU0sa0JBQWtCLFlBQVksaUJBQWlCLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQy9FLE1BQU0sU0FBUyxXQUFXLENBQUM7TUFDekIsV0FBVyxNQUFNO01BQ2pCLFVBQVUsZ0JBQWdCO01BQzFCLE1BQU0sUUFBUTtNQUNkLFFBQVE7UUFDTixRQUFRLCtCQUErQjtVQUNyQyxNQUFNLFVBQVUsWUFBWSxRQUFRLENBQUM7VUFDckMsT0FBTyxPQUFPLFNBQVMsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDcEQ7T0FDRjtNQUNELE1BQU07UUFDSixTQUFTLG9DQUFvQztVQUMzQyxTQUFTLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDMUMsU0FBUyxVQUFVLEVBQUUsYUFBYSxDQUFDLFNBQVMsUUFBUSxFQUFFLFNBQVMsUUFBUSxDQUFDLENBQUM7V0FDMUUsRUFBRSxlQUFlO1lBQ2hCLFdBQVcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1dBQzdDLENBQUMsQ0FBQztTQUNKO1FBQ0QsYUFBYSx5REFBeUQ7VUFDcEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM5QixPQUFPLE1BQU0sQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1dBQ3RELE1BQU07WUFDTCxRQUFRLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7V0FDM0M7U0FDRjtPQUNGO01BQ0QsT0FBTyxXQUFXO0tBQ25CLENBQUMsQ0FBQzs7SUFFSCxNQUFNLGVBQWUsa0JBQWtCO01BQ3JDLFVBQVUsQ0FBQyxNQUFNO1FBQ2YsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7T0FDNUUsRUFBRSxNQUFNLFFBQVEsQ0FBQyxDQUFDO0tBQ3BCLENBQUM7SUFDRixNQUFNLFlBQVksa0JBQWtCO01BQ2xDLFVBQVUsQ0FBQyxNQUFNO1FBQ2Ysc0JBQXNCLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNO1VBQ3pDLE9BQU8saUJBQWlCLENBQUMsTUFBTSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1NBQ2pGLENBQUMsQ0FBQztPQUNKLEVBQUUsTUFBTSxRQUFRLENBQUMsQ0FBQztLQUNwQixDQUFDOztJQUVGLE1BQU0saUJBQWlCLG1EQUFtRDtNQUN4RSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDeEIsTUFBTSxRQUFRLGNBQWMsQ0FBQyxTQUFTLFFBQVEsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFNBQVMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO01BQzlHLGFBQWEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDaEMsU0FBUyxlQUFlLEVBQUUsQ0FBQztLQUM1QixDQUFDO0lBQ0YsTUFBTSxTQUFTLHFDQUFxQztNQUNsRCxNQUFNLFFBQVEsU0FBUyxVQUFVLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQ3JELFVBQVUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ3pDLENBQUM7SUFDRixNQUFNLFVBQVUsbURBQW1EO01BQ2pFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUNqQixNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVUsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsYUFBYSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDdkUsQ0FBQztJQUNGLE1BQU0sUUFBUSxrREFBa0Q7TUFDOUQsTUFBTSxXQUFXLGFBQWEsU0FBUyxHQUFHLFNBQVMsR0FBRyxZQUFZLENBQUM7TUFDbkUsT0FBTyxRQUFRLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ2xDLENBQUM7SUFDRixNQUFNLFNBQVMsc0RBQXNEO01BQ25FLE1BQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQ3ZDLENBQUM7SUFDRixNQUFNLFVBQVUsdURBQXVEO01BQ3JFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ3pDLENBQUM7SUFDRixNQUFNLFNBQVMscURBQXFEO01BQ2xFLE1BQU0sV0FBVyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7TUFDckMsTUFBTSxhQUFhLE1BQU0sQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLENBQUMsT0FBTyxRQUFRLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO01BQ2pGLFVBQVUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3pCLENBQUM7SUFDRixNQUFNLFdBQVcsK0JBQStCLFNBQVMsV0FBVyxFQUFFLENBQUM7SUFDdkUsTUFBTSxZQUFZLHFFQUFxRTtNQUNyRixNQUFNLFdBQVcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQ3JDLE9BQU8sUUFBUSxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZO1FBQzVELFFBQVEsS0FBSyxDQUFDLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUs7VUFDekMsTUFBTSxXQUFXLGFBQWEsU0FBUyxHQUFHLGNBQWMsR0FBRyxPQUFPLENBQUM7VUFDbkUsUUFBUSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2pELENBQUMsQ0FBQztRQUNILE9BQU8sUUFBUSxDQUFDO09BQ2pCLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFlBQVksb0VBQW9FO01BQ3BGLE1BQU0sV0FBVyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7TUFDckMsT0FBTyxXQUFXLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLFNBQVMsQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztLQUM5SSxDQUFDOztJQUVGLElBQUksMkJBQTJCLE1BQU0sT0FBTyxDQUFDO1FBQ3pDLFdBQVcsSUFBSTtRQUNmLFFBQVEsTUFBTTtRQUNkLFNBQVMsT0FBTztRQUNoQixRQUFRLE1BQU07UUFDZCxXQUFXLFNBQVM7UUFDcEIsV0FBVyxTQUFTO1FBQ3BCLEtBQUssS0FBSztRQUNWLFVBQVUsUUFBUTtLQUNyQixDQUFDLENBQUM7O0lBRUgsTUFBTSxZQUFZLFFBQVEsQ0FBQztNQUN6QixRQUFRLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzVDLE1BQU0sV0FBVztNQUNqQixNQUFNLFdBQVc7S0FDbEIsQ0FBQyxDQUFDOztJQUVILE1BQU0sV0FBVyx5QkFBeUI7TUFDeEMsTUFBTSxTQUFTLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztNQUN2QyxPQUFPLFFBQVEsQ0FBQztRQUNkLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0IsSUFBSTtRQUNKLFFBQVEsRUFBRSxRQUFRLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtPQUN2QyxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxTQUFTLHlCQUF5QjtNQUN0QyxNQUFNLEtBQUssUUFBUSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztNQUN6QyxPQUFPO1FBQ0wsS0FBSyxJQUFJO1FBQ1QsT0FBTztVQUNMLFFBQVEsRUFBRTtVQUNWLEVBQUU7VUFDRixhQUFhLFVBQVUsQ0FBQyxFQUFFLENBQUM7VUFDM0IsZUFBZSxFQUFFO1VBQ2pCLE9BQU8sT0FBTztTQUNmO09BQ0YsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxVQUFVLDRCQUE0QjtNQUMxQyxJQUFJLENBQUMsV0FBVyxPQUFPLEVBQUU7UUFDdkIsT0FBTyxDQUFDLFNBQVMsUUFBUSxDQUFDLENBQUM7UUFDM0IsV0FBVyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7T0FDaEM7S0FDRixDQUFDO0lBQ0YsTUFBTSxPQUFPLDRCQUE0QjtNQUN2QyxJQUFJLENBQUMsV0FBVyxPQUFPLEVBQUU7UUFDdkIsTUFBTSxDQUFDLFNBQVMsUUFBUSxDQUFDLENBQUM7T0FDM0I7S0FDRixDQUFDO0lBQ0YsTUFBTSxZQUFZLGFBQWEsUUFBUSxDQUFDLFNBQVMsUUFBUSxDQUFDLENBQUM7O0lBRTNELElBQUkseUJBQXlCLE1BQU0sT0FBTyxDQUFDO1FBQ3ZDLFdBQVcsSUFBSTtRQUNmLE9BQU8sT0FBTztRQUNkLE1BQU0sSUFBSTtRQUNWLFdBQVcsU0FBUztLQUN2QixDQUFDLENBQUM7O0lBRUgsTUFBTSxZQUFZLHVCQUF1QjtNQUN2QyxNQUFNLE1BQU0sV0FBVyxPQUFPLEdBQUcsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFVBQVUsSUFBSSxFQUFFLEVBQUUsQ0FBQztNQUN6RSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNsQixDQUFDO0lBQ0YsTUFBTSxXQUFXLGVBQWUsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLCtCQUErQjtRQUN0RixPQUFPLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2hDLGNBQWMsS0FBSyxFQUFFLENBQUM7T0FDdkIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLGNBQWMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSx1QkFBdUI7UUFDaEYsY0FBYyxNQUFNLFFBQVEsRUFBRSxDQUFDO09BQ2hDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7O0lBRWIsSUFBSSwyQkFBMkIsTUFBTSxPQUFPLENBQUM7UUFDekMsV0FBVyxJQUFJO1FBQ2YsU0FBUyxTQUFTO1FBQ2xCLFFBQVEsUUFBUTtLQUNuQixDQUFDLENBQUM7O0lBRUgsSUFBSSxjQUFjO01BQ2hCLFNBQVMsQ0FBQyxTQUFTLENBQUM7TUFDcEIsU0FBUyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUM7TUFDakMsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUM7S0FDM0IsQ0FBQzs7SUFFRixNQUFNLFdBQVcsUUFBUSxDQUFDO01BQ3hCLFFBQVEsV0FBVztNQUNuQixNQUFNLFVBQVU7TUFDaEIsUUFBUSxXQUFXO01BQ25CLE1BQU0sU0FBUztLQUNoQixDQUFDLENBQUM7O0lBRUgsTUFBTSwwQkFBMEIsZ0JBQWdCO01BQzlDLE1BQU0sT0FBTyxNQUFNO1FBQ2pCLE1BQU0sT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEMsTUFBTSxNQUFNLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM3QixNQUFNLE1BQU0sWUFBWSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxNQUFNLFFBQVEsTUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMzQyxNQUFNLFlBQVksTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ25DLE9BQU87VUFDTCxHQUFHO1VBQ0gsR0FBRztVQUNILEtBQUs7VUFDTCxTQUFTO1NBQ1YsQ0FBQztPQUNILENBQUM7TUFDRixPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7S0FDakIsQ0FBQzs7SUFFRixNQUFNLGtCQUFrQiwwQ0FBMEM7TUFDaEUsTUFBTSxXQUFXLFlBQVksS0FBSyxDQUFDO01BQ25DLFFBQVEsT0FBTyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQ3pELENBQUM7SUFDRixNQUFNLGNBQWMsMENBQTBDO01BQzVELFlBQVksWUFBWSxLQUFLLENBQUMsZUFBZTtRQUMzQyxJQUFJLFdBQVcsSUFBSSxFQUFFLEVBQUU7VUFDckIsS0FBSyxDQUFDLFNBQVMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ3ZDLE1BQU07VUFDTCxRQUFRLENBQUMsU0FBUyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDMUM7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxRQUFRLGlEQUFpRDtNQUM3RCxNQUFNLGVBQWUsV0FBVyxJQUFJLEVBQUUsQ0FBQztNQUN2QyxXQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUN2QixXQUFXLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztNQUNsRCxlQUFlLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztNQUN0RCxJQUFJLFlBQVksS0FBSyxLQUFLLEVBQUU7UUFDMUIsWUFBWSxVQUFVLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQzFDO0tBQ0YsQ0FBQztJQUNGLE1BQU0sV0FBVywwQ0FBMEM7TUFDekQsS0FBSyxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQ2pFLENBQUM7SUFDRixNQUFNLEtBQUssMENBQTBDO01BQ25ELEtBQUssQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNuRCxDQUFDO0lBQ0YsTUFBTSxNQUFNLDBDQUEwQztNQUNwRCxLQUFLLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDcEQsQ0FBQztJQUNGLE1BQU0sT0FBTywwQ0FBMEMsV0FBVyxJQUFJLEVBQUUsQ0FBQztJQUN6RSxNQUFNLFNBQVMsMENBQTBDO01BQ3ZELEtBQUssQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLFNBQVMsQ0FBQyxDQUFDO0tBQ3BFLENBQUM7O0lBRUYsSUFBSSwwQkFBMEIsTUFBTSxPQUFPLENBQUM7UUFDeEMsV0FBVyxJQUFJO1FBQ2YsUUFBUSxNQUFNO1FBQ2QsUUFBUSxRQUFRO1FBQ2hCLE1BQU0sSUFBSTtRQUNWLElBQUksRUFBRTtRQUNOLEtBQUssR0FBRztRQUNSLEtBQUssS0FBSztLQUNiLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFlBQVksTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakMsTUFBTSxXQUFXLCtCQUErQjtNQUM5QyxNQUFNLFVBQVUsWUFBWSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDbEUsTUFBTSxPQUFPLFNBQVMsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQzFELE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUN0QixZQUFZLGdCQUFnQixHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUM3QyxDQUFDLElBQUksQ0FBQztPQUNQLENBQUMsQ0FBQyxDQUFDO0tBQ0wsQ0FBQzs7SUFFRixJQUFJLDRCQUE0QixNQUFNLE9BQU8sQ0FBQztRQUMxQyxXQUFXLElBQUk7UUFDZixTQUFTLFNBQVM7UUFDbEIsUUFBUSxRQUFRO0tBQ25CLENBQUMsQ0FBQzs7SUFFSCxNQUFNLGdCQUFnQixpQ0FBaUM7TUFDckQsS0FBSyxDQUFDLFNBQVMsUUFBUSxFQUFFLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQztNQUNqRCxJQUFJLFFBQVEsaUJBQWlCLEVBQUU7UUFDN0IsY0FBYyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7T0FDN0M7S0FDRixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsaUNBQWlDO01BQ3RELEtBQUssQ0FBQyxTQUFTLFFBQVEsRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDbkQsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLGlDQUFpQztNQUNyRCxLQUFLLENBQUMsU0FBUyxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ2xELENBQUM7SUFDRixNQUFNLGlCQUFpQixpQ0FBaUM7TUFDdEQsS0FBSyxDQUFDLFNBQVMsUUFBUSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNuRCxDQUFDOztJQUVGLElBQUksZUFBZTtNQUNqQixTQUFTLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQztNQUM1QixRQUFRLENBQUMsYUFBYSxDQUFDO01BQ3ZCLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUM7TUFDbEMsU0FBUyxDQUFDLFdBQVcsQ0FBQztNQUN0QixXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxNQUFNLEVBQUUsRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFO1FBQ3JELFNBQVM7VUFDUCxTQUFTLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDO1VBQ3BDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDO1NBQ2xDO1FBQ0QsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDNUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDOUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDOUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDakMsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLFdBQVcsUUFBUSxDQUFDO01BQ3hCLFFBQVEsWUFBWTtNQUNwQixNQUFNLFVBQVU7TUFDaEIsUUFBUSxZQUFZO01BQ3BCLE1BQU0sVUFBVTtNQUNoQixPQUFPLHVCQUF1QixDQUFDLEtBQUssQ0FBQztLQUN0QyxDQUFDLENBQUM7O0lBRUgsTUFBTSxnQkFBZ0IsTUFBTTtNQUMxQixNQUFNLFVBQVUsK0JBQStCO1FBQzdDLGNBQWMsS0FBSyxFQUFFLENBQUM7UUFDdEIsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO09BQ3hCLENBQUM7TUFDRixPQUFPO1FBQ0wsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sQ0FBQztRQUN2QixLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7T0FDcEIsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFdBQVcsYUFBYTtNQUM1QixNQUFNLGlCQUFpQixVQUFVLGNBQWMsQ0FBQywrQkFBK0I7UUFDN0UsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xCLGNBQWMsS0FBSyxFQUFFLENBQUM7T0FDdkIsQ0FBQyxDQUFDO01BQ0gsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQ3RCLFNBQVMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUU7UUFDdkMsYUFBYSxFQUFFO09BQ2hCLENBQUMsQ0FBQyxDQUFDO0tBQ0wsQ0FBQzs7SUFFRixNQUFNLGFBQWEsa0JBQWtCLENBQUM7SUFDdEMsTUFBTSxhQUFhLGtCQUFrQixDQUFDO0lBQ3RDLE1BQU0sZUFBZSxvQkFBb0IsQ0FBQztJQUMxQyxNQUFNLFVBQVUsUUFBUTtNQUN0QixJQUFJLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxRQUFRLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUM3RCxJQUFJLENBQUMsUUFBUSxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7VUFDN0IsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEI7UUFDRCxRQUFRLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7T0FDdEM7S0FDRixDQUFDO0lBQ0YsTUFBTSxZQUFZLFFBQVE7TUFDeEIsUUFBUSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQ3RDLENBQUM7SUFDRixNQUFNLFlBQVksaUJBQWlCO01BQ2pDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO1FBQzNCLElBQUk7UUFDSixLQUFLO09BQ04sQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sUUFBUSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckMsTUFBTSxVQUFVLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2QyxNQUFNLFVBQVUsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDOztJQUV6QyxNQUFNLGNBQWMsVUFBVSxNQUFNLFNBQVMsSUFBSSxDQUFDLFlBQVksUUFBUSxVQUFVLEdBQUcsZUFBZSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzSSxNQUFNLGtCQUFrQixZQUFZO01BQ2xDLE1BQU0sRUFBRSxNQUFNLFNBQVMsRUFBRTtNQUN6QixHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLElBQUksS0FBSyxXQUFXLENBQUM7TUFDNUQsV0FBVyxzQkFBc0I7UUFDL0IsSUFBSSxVQUFVLENBQUMsT0FBTyxVQUFVLENBQUMsRUFBRTtVQUNqQyxPQUFPLFVBQVUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDckM7UUFDRCxTQUFTLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQzdCO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxZQUFZLFdBQVc7TUFDM0IsS0FBSyxNQUFNLElBQUk7TUFDZixpQkFBaUI7UUFDZixHQUFHLE1BQU0sZ0JBQWdCO1FBQ3pCLFlBQVk7VUFDVixRQUFRLFdBQVcsQ0FBQyxNQUFNLENBQUM7VUFDM0IsR0FBRyxNQUFNLGdCQUFnQixXQUFXO1VBQ3BDLGlCQUFpQixNQUFNLFdBQVc7VUFDbEMsR0FBRyxNQUFNLFdBQVcsR0FBRyxFQUFFLGlCQUFpQixLQUFLLEVBQUUsR0FBRyxFQUFFO1NBQ3ZEO09BQ0Y7TUFDRCxZQUFZLGdCQUFnQixRQUFRLENBQUMsTUFBTSxlQUFlLEVBQUU7UUFDMUQsTUFBTSxTQUFTLEtBQUssQ0FBQyxRQUFRLE9BQU8sRUFBRSxXQUFXLFFBQVEsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzNGLFFBQVEsT0FBTyxDQUFDO1VBQ2QsUUFBUSxNQUFNLFlBQVk7VUFDMUIsZUFBZSxNQUFNLFlBQVk7VUFDakMsU0FBUyxhQUFhO1lBQ3BCLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztXQUN0QjtTQUNGLENBQUM7UUFDRixNQUFNLE9BQU8sQ0FBQyxFQUFFLE1BQU0sV0FBVyxFQUFFLENBQUM7UUFDcEMsWUFBWSxPQUFPLENBQUM7VUFDbEIsT0FBTztZQUNMLE1BQU0sUUFBUTtZQUNkLGNBQWMsTUFBTSxLQUFLO1dBQzFCO1NBQ0YsQ0FBQztRQUNGLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRTtVQUN6QixHQUFHLGFBQWEsRUFBRTtVQUNsQixLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsT0FBTyxDQUFDO1VBQzNCLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxRQUFRLE1BQU0sQ0FBQztTQUNuQyxDQUFDO09BQ0gsQ0FBQztNQUNGLFlBQVksTUFBTSxXQUFXO01BQzdCLFlBQVksTUFBTSxXQUFXO0tBQzlCLENBQUMsQ0FBQztJQUNILE1BQU0sV0FBVztNQUNmLFVBQVUsQ0FBQyxNQUFNLENBQUM7TUFDbEIsVUFBVSxDQUFDLFlBQVksQ0FBQztNQUN4QixVQUFVLENBQUMsS0FBSyxDQUFDO01BQ2pCLFNBQVMsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDO01BQzlCLFFBQVEsQ0FBQyxVQUFVLENBQUM7TUFDcEIsZ0JBQWdCLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtRQUN2QyxRQUFRO1FBQ1IsUUFBUTtRQUNSLE1BQU07UUFDTixZQUFZO09BQ2IsQ0FBQztNQUNGLFNBQVMsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDO01BQy9CLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7TUFDaEMsUUFBUSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7TUFDOUIsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7S0FDNUIsQ0FBQzs7SUFFRixNQUFNLFlBQVksV0FBVztNQUMzQixLQUFLLE1BQU0sSUFBSTtNQUNmLFlBQVksTUFBTSxXQUFXO01BQzdCLFFBQVEsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUN6QyxDQUFDLENBQUM7SUFDSCxNQUFNLFdBQVc7TUFDZixVQUFVLENBQUMsS0FBSyxDQUFDO01BQ2pCLFVBQVUsQ0FBQyxZQUFZLENBQUM7TUFDeEIsUUFBUSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7S0FDL0IsQ0FBQzs7SUFFRixNQUFNLFVBQVUsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sVUFBVSxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDakMsTUFBTSxRQUFRO1FBQ2QsV0FBVyxVQUFVO1VBQ25CLE9BQU87WUFDTCxZQUFZLFFBQVEsQ0FBQyxDQUFDLFlBQVksT0FBTyxDQUFDO2dCQUN0QyxPQUFPO2tCQUNMLE1BQU0sUUFBUTtrQkFDZCxVQUFVLGNBQWM7b0JBQ3RCLE9BQU8sTUFBTSxLQUFLLENBQUM7bUJBQ3BCO2tCQUNELFVBQVUsSUFBSTtpQkFDZjtlQUNGLENBQUMsQ0FBQyxDQUFDO1dBQ1AsQ0FBQztTQUNIO09BQ0YsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFUCxNQUFNLFVBQVUsVUFBVTtNQUN4QixNQUFNLE9BQU8sV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO01BQ3ZELE1BQU0sYUFBYSxZQUFZLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQztNQUNyRSxNQUFNLGNBQWMsYUFBYSxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVU7UUFDbEYsTUFBTSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkIsT0FBTyxNQUFNLENBQUM7T0FDZixDQUFDLENBQUM7TUFDSCxNQUFNLG9CQUFvQiwrQkFBK0IsTUFBTSxDQUFDLGNBQWMsTUFBTSxPQUFPLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTTtRQUN0SCxJQUFJLE1BQU0sVUFBVSxFQUFFO1VBQ3BCLGNBQWMsVUFBVSxDQUFDLFNBQVMsUUFBUSxDQUFDLENBQUM7VUFDNUMsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO1NBQ3hCLE1BQU07VUFDTCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7U0FDeEI7T0FDRixHQUFHLENBQUM7TUFDTCxPQUFPO1FBQ0wsS0FBSyxNQUFNLElBQUk7UUFDZixVQUFVO1FBQ1YsaUJBQWlCLE1BQU0sZ0JBQWdCO1FBQ3ZDLFFBQVEsUUFBUSxDQUFDO1VBQ2YsY0FBYyxDQUFDLCtCQUErQjtZQUM1QyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXO2NBQ3JDLGNBQWMsS0FBSyxFQUFFLENBQUM7YUFDdkIsQ0FBQyxDQUFDO1dBQ0osQ0FBQztVQUNGLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxPQUFPLENBQUM7VUFDM0IsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLGdDQUFnQztZQUNqRCxJQUFJLE1BQU0sVUFBVSxFQUFFO2NBQ3BCLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUN4QixNQUFNO2NBQ0wsUUFBUSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDM0I7V0FDRixDQUFDO1NBQ0gsQ0FBQztRQUNGLFlBQVksZ0JBQWdCLFFBQVEsQ0FBQyxNQUFNLGlCQUFpQixFQUFFO1VBQzVELFlBQVksT0FBTyxDQUFDO1lBQ2xCLE9BQU87Y0FDTCxNQUFNLFFBQVE7Y0FDZCxjQUFjLE1BQU0sS0FBSzthQUMxQjtXQUNGLENBQUM7VUFDRixRQUFRLE9BQU8sQ0FBQztZQUNkLFFBQVEsTUFBTSxZQUFZO1lBQzFCLFNBQVMsYUFBYTtjQUNwQixTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDdEI7V0FDRixDQUFDO1VBQ0YsTUFBTSxPQUFPLENBQUM7WUFDWixNQUFNLFNBQVM7WUFDZixTQUFTLE1BQU0sVUFBVSxHQUFHLGFBQWE7Y0FDdkMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3hCLEdBQUcsTUFBTSxFQUFFO1lBQ1osUUFBUSxpQkFBaUI7WUFDekIsU0FBUyxpQkFBaUI7WUFDMUIsVUFBVSwrQkFBK0I7Y0FDdkMsSUFBSSxDQUFDLFFBQVEsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxVQUFVLEVBQUU7Z0JBQ3ZELFFBQVEsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUMxQixPQUFPLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2VBQzVCLE1BQU0sSUFBSSxNQUFNLFVBQVUsRUFBRTtnQkFDM0IsY0FBYyxVQUFVLENBQUMsU0FBUyxRQUFRLENBQUMsQ0FBQztnQkFDNUMsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO2VBQ3hCLE1BQU07Z0JBQ0wsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO2VBQ3hCO2FBQ0Y7V0FDRixDQUFDO1NBQ0gsQ0FBQztPQUNILENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxXQUFXO01BQ2YsVUFBVSxDQUFDLEtBQUssQ0FBQztNQUNqQixVQUFVLENBQUMsTUFBTSxDQUFDO01BQ2xCLFVBQVUsQ0FBQyxZQUFZLENBQUM7TUFDeEIsVUFBVSxDQUFDLEtBQUssQ0FBQztNQUNqQixTQUFTLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQztNQUM3QixTQUFTLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQztNQUMvQixnQkFBZ0IsTUFBTSxDQUFDLGtCQUFrQixFQUFFO1FBQ3pDLFlBQVk7UUFDWixRQUFRO1FBQ1IsTUFBTTtPQUNQLENBQUM7TUFDRixTQUFTLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO01BQ2hDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO01BQzVCLFFBQVEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDO0tBQzdCLENBQUM7O0lBRUYsTUFBTSxlQUFlLFFBQVEsQ0FBQyxNQUFNLEVBQUU7TUFDcEMsUUFBUSxRQUFRO01BQ2hCLE1BQU0sUUFBUTtNQUNkLFdBQVcsUUFBUTtLQUNwQixDQUFDLENBQUM7SUFDSCxNQUFNLGdCQUFnQiwyQkFBMkI7TUFDL0MsTUFBTSxVQUFVO01BQ2hCLFVBQVUsR0FBRyxHQUFHLE1BQU0sUUFBUSxLQUFLO01BQ25DLFVBQVU7UUFDUixZQUFZLFlBQVksU0FBUyxXQUFXO1FBQzVDLFNBQVMsWUFBWSxTQUFTLFFBQVE7T0FDdkM7TUFDRCxjQUFjLE1BQU0sYUFBYTtLQUNsQyxDQUFDLENBQUM7SUFDSCxNQUFNLGtCQUFrQiwyQkFBMkI7TUFDakQsTUFBTSxRQUFRO01BQ2QsV0FBVztRQUNULEtBQUssWUFBWSxZQUFZO1FBQzdCLE1BQU0sR0FBRyxHQUFHLE1BQU0sUUFBUSxLQUFLO09BQ2hDO01BQ0Qsa0JBQWtCLFlBQVksaUJBQWlCO01BQy9DLGNBQWMsTUFBTSxhQUFhO0tBQ2xDLENBQUMsQ0FBQztJQUNILE1BQU0sZ0JBQWdCLDJCQUEyQjtNQUMvQyxNQUFNLE1BQU07TUFDWixVQUFVLEdBQUcsR0FBRyxNQUFNLFFBQVEsS0FBSztNQUNuQyxXQUFXLFlBQVksVUFBVTtNQUNqQyxjQUFjLE1BQU0sYUFBYTtLQUNsQyxDQUFDLENBQUM7SUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzlCLFNBQVM7VUFDUCxRQUFRLFFBQVE7WUFDZCxNQUFNLFdBQVcsWUFBWSxDQUFDLGdCQUFnQixFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNwRSxPQUFPLFFBQVEsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1dBQ25DO1NBQ0Y7UUFDRCxNQUFNLE9BQU87UUFDYixNQUFNLE1BQU07UUFDWixVQUFVLGVBQWU7VUFDdkIsT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRztZQUMzQixHQUFHLENBQUM7WUFDSixLQUFLLFVBQVUsQ0FBQyxNQUFNLENBQUM7V0FDeEIsQ0FBQztTQUNIO1FBQ0QsV0FBVyxlQUFlO1VBQ3hCLE9BQU87WUFDTCxNQUFNLENBQUMsS0FBSztZQUNaLGFBQWEsTUFBTSxVQUFVO1lBQzdCLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxNQUFNLFFBQVEsS0FBSyxDQUFDLEVBQUU7V0FDcEQsQ0FBQztTQUNIO09BQ0YsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNQLE1BQU0sV0FBVyxVQUFVLENBQUM7TUFDMUIsVUFBVSxDQUFDLE9BQU8sQ0FBQztNQUNuQixVQUFVLENBQUMsT0FBTyxDQUFDO01BQ25CLFVBQVUsQ0FBQyxLQUFLLENBQUM7TUFDakIsVUFBVSxDQUFDLFlBQVksQ0FBQztNQUN4QixTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztNQUMzQixLQUFLLENBQUMsZ0JBQWdCLEVBQUU7UUFDdEIsWUFBWTtRQUNaLFlBQVk7UUFDWixTQUFTO1FBQ1QsTUFBTTtPQUNQLENBQUM7TUFDRixXQUFXLENBQUMsVUFBVSxFQUFFO1FBQ3RCLE1BQU0sTUFBTTtRQUNaLFdBQVcsSUFBSTtPQUNoQixFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUU7UUFDbEIsTUFBTTtVQUNKLFFBQVEsRUFBRTtVQUNWLFFBQVEsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDO1NBQ2xDO1FBQ0QsUUFBUTtVQUNOLFFBQVEsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDO1VBQ25DLFVBQVUsQ0FBQyxhQUFhLENBQUM7VUFDekIsU0FBUyxDQUFDLGtCQUFrQixFQUFFLFFBQVEsS0FBSyxDQUFDO1NBQzdDO1FBQ0QsTUFBTTtVQUNKLFNBQVMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDO1VBQzVCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDO1NBQ2xDO09BQ0YsQ0FBQyxDQUFDO01BQ0gsV0FBVyxFQUFFO01BQ2IsU0FBUyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUM7TUFDN0IsU0FBUyxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsQ0FBQztNQUNsQyxTQUFTLENBQUMsYUFBYSxDQUFDO01BQ3hCLFNBQVMsQ0FBQyxlQUFlLENBQUM7S0FDM0IsQ0FBQyxDQUFDOztJQUVILE1BQU0sUUFBUSxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQzs7SUFFN0MsTUFBTSwwQkFBMEIsZ0JBQWdCO01BQzlDLE1BQU0sb0JBQW9CLFdBQVcsQ0FBQyxJQUFJLFFBQVEsRUFBRSw2Q0FBNkMsQ0FBQyxDQUFDO01BQ25HLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxPQUFPO1FBQy9CLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksUUFBUSxDQUFDLEVBQUU7VUFDMUIsSUFBSSxVQUFVLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSztZQUN2QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUNqQixDQUFDLENBQUM7U0FDSjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFNBQVMsNENBQTRDO01BQ3pELEtBQUssTUFBTSxJQUFJO01BQ2YsS0FBSyxNQUFNLElBQUk7TUFDZixTQUFTLE1BQU0sUUFBUTtNQUN2QixZQUFZLE9BQU8sQ0FBQyxNQUFNLGVBQWUsRUFBRTtRQUN6QyxZQUFZLE9BQU8sQ0FBQztVQUNsQixnQkFBZ0IsTUFBTSxRQUFRLGFBQWE7VUFDM0MsV0FBVyxNQUFNLFFBQVEsS0FBSztVQUM5QixhQUFhLE1BQU0sWUFBWTtVQUMvQixlQUFlLE1BQU0sY0FBYztTQUNwQyxDQUFDO1FBQ0YsWUFBWSxPQUFPLENBQUM7VUFDbEIsT0FBTztZQUNMLE1BQU0sUUFBUTtZQUNkLGNBQWMsTUFBTSxNQUFNO1dBQzNCO1NBQ0YsQ0FBQztRQUNGLFNBQVMsT0FBTyxDQUFDLEVBQUUsTUFBTSxRQUFRLEtBQUssRUFBRSxDQUFDO1FBQ3pDLE1BQU0sT0FBTyxDQUFDLE1BQU0sU0FBUyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDLENBQUM7T0FDL0QsQ0FBQztNQUNGLFFBQVEsUUFBUSxDQUFDO1FBQ2YsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLDBCQUEwQjtVQUN6QyxNQUFNLFFBQVEsY0FBYyxNQUFNLENBQUM7VUFDbkMsSUFBSSxVQUFVLEVBQUUsU0FBUyxDQUFDLEtBQUssT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQ25ELFlBQVksVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNuQyxjQUFjLEtBQUssRUFBRSxDQUFDO1lBQ3RCLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7Y0FDdEIsSUFBSTtjQUNKLElBQUk7YUFDTCxDQUFDLENBQUM7V0FDSixDQUFDLENBQUM7U0FDSixDQUFDO1FBQ0YsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLDBCQUEwQjtVQUN2QyxNQUFNLE9BQU8sY0FBYyxNQUFNLEtBQUssQ0FBQztVQUN2QyxZQUFZLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDcEMsQ0FBQztRQUNGLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSwwQkFBMEI7VUFDekMsTUFBTSxhQUFhLEdBQUcsY0FBYyxNQUFNLENBQUM7VUFDM0MsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksUUFBUSxFQUFFLE1BQU0sQ0FBQyxLQUFLLGVBQWUsRUFBRTtZQUM1RCx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDckM7U0FDRixDQUFDO09BQ0gsQ0FBQztNQUNGLFVBQVU7TUFDVixZQUFZLE1BQU0sV0FBVztNQUM3QixpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLEVBQUUsRUFBRTtLQUNsRCxDQUFDLENBQUM7O0lBRUgsTUFBTSxPQUFPLFNBQVMsQ0FBQztNQUNyQixNQUFNLE1BQU07TUFDWixjQUFjLFFBQVEsRUFBRTtNQUN4QixZQUFZLE9BQU8sRUFBRTtNQUNyQixTQUFTLE1BQU07S0FDaEIsQ0FBQyxDQUFDOztJQUVILE1BQU0sY0FBYyxPQUFPLFFBQVEsQ0FBQyxHQUFHLEVBQUUsV0FBVztNQUNsRCxHQUFHLENBQUM7TUFDSixHQUFHLENBQUM7S0FDTCxDQUFDLENBQUMsQ0FBQztJQUNKLE1BQU0sUUFBUSxtQ0FBbUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLGVBQWU7TUFDdkksTUFBTSxPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztNQUN2RCxPQUFPLFFBQVEsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ2xELENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDZCxNQUFNLGFBQWEsdUJBQXVCO01BQ3hDLE1BQU0sUUFBUSxFQUFFLENBQUM7TUFDakIsSUFBSSxDQUFDLEtBQUssRUFBRSxxQkFBcUI7UUFDL0IsTUFBTSxDQUFDLFNBQVMsRUFBRSxRQUFRO1VBQ3hCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDcEIsQ0FBQyxDQUFDO09BQ0osQ0FBQyxDQUFDO01BQ0gsTUFBTSxTQUFTLFVBQVUsQ0FBQztNQUMxQixNQUFNLFNBQVMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO01BQ3ZDLE1BQU0sWUFBWSxLQUFLLENBQUMsTUFBTSxFQUFFLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNwSCxPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbkUsQ0FBQzs7SUFFRixNQUFNLFNBQVMsTUFBTTtNQUNuQixNQUFNLGFBQWEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQzVCLE1BQU0sUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDdkIsTUFBTSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUN2QixNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7TUFDMUIsTUFBTSxZQUFZLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUMzQixNQUFNLFFBQVEsTUFBTTtRQUNsQixVQUFVLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQixLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNkLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2QsT0FBTyxNQUFNLEVBQUUsQ0FBQztPQUNqQixDQUFDO01BQ0YsTUFBTSxVQUFVLE1BQU0sT0FBTyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7TUFDN0MsTUFBTSxlQUFlLHFCQUFxQjtRQUN4QyxLQUFLLElBQUksQ0FBQztVQUNSLEdBQUcsS0FBSyxJQUFJLEVBQUU7VUFDZCxDQUFDLFFBQVEsR0FBRztZQUNWLE1BQU0sVUFBVTtZQUNoQixNQUFNLEtBQUs7V0FDWjtTQUNGLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLGNBQWMsd0NBQXdDO1FBQzFELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RCLFVBQVUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVCLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xCLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLE1BQU0sU0FBUyxVQUFVLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzVDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQ25CLENBQUM7TUFDRixNQUFNLG9CQUFvQixhQUFhLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxFQUFFLFdBQVcsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO01BQzVGLE1BQU0saUJBQWlCLHFDQUFxQyxlQUFlLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsdUJBQXVCLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCO1FBQ3JOLGVBQWUsSUFBSTtRQUNuQixnQkFBZ0IsYUFBYTtRQUM3QixnQkFBZ0IsSUFBSTtPQUNyQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDTixNQUFNLG9CQUFvQiwrQkFBK0I7UUFDdkQsTUFBTSxZQUFZLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLGFBQWEsZUFBZSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzlHLE9BQU8sS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRO1VBQ2hELE1BQU0sVUFBVSxPQUFPLENBQUMsU0FBUyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztVQUNoRCxNQUFNLFdBQVcsTUFBTSxDQUFDLE9BQU8sRUFBRSwwQkFBMEIsY0FBYyxDQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUMsQ0FBQyxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQzFPLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzNCLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLFNBQVMsYUFBYSxLQUFLLENBQUMsVUFBVSxJQUFJLEVBQUUsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVE7UUFDekUsTUFBTSxVQUFVLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEQsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7T0FDL0IsQ0FBQyxDQUFDO01BQ0gsTUFBTSxXQUFXLGFBQWEsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksT0FBTyxHQUFHLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQztNQUMzSSxNQUFNLFVBQVUsYUFBYSxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztNQUMzRCxNQUFNLGtCQUFrQixhQUFhLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7TUFDckYsTUFBTSxhQUFhLGFBQWEsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7TUFDOUQsTUFBTSxhQUFhLGFBQWEsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7TUFDbkUsTUFBTSxhQUFhLFFBQVE7UUFDekIsTUFBTSxhQUFhLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDbkMsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQzNDLENBQUM7TUFDRixNQUFNLGFBQWEsTUFBTSxPQUFPLElBQUksRUFBRSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7TUFDN0QsTUFBTSxXQUFXLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztNQUNuQyxPQUFPO1FBQ0wsWUFBWTtRQUNaLFdBQVc7UUFDWCxNQUFNO1FBQ04sT0FBTztRQUNQLFFBQVE7UUFDUixVQUFVO1FBQ1YsVUFBVTtRQUNWLFVBQVU7UUFDVixVQUFVO1FBQ1YsUUFBUTtRQUNSLEtBQUs7UUFDTCxPQUFPO1FBQ1AsaUJBQWlCO09BQ2xCLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxzQkFBc0IsUUFBUSxJQUFJLEtBQUssS0FBSyxVQUFVLEdBQUcsUUFBUSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO0lBQzFHLE1BQU0sZUFBZTtNQUNuQixNQUFNLE1BQU07TUFDWixtQkFBbUI7S0FDcEIsQ0FBQzs7SUFFRixNQUFNLDZCQUE2QixVQUFVLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUM1RSxNQUFNLCtCQUErQixVQUFVLENBQUMsOEJBQThCLENBQUMsQ0FBQzs7SUFFaEYsSUFBSSxlQUFlLENBQUM7SUFDcEIsQ0FBQywyQkFBMkI7TUFDMUIsZUFBZSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLHNCQUFzQixDQUFDO01BQ3RGLGVBQWUsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztNQUNoRixlQUFlLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQztLQUN6RSxDQUFDLGVBQWUsS0FBSyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsRUFBRTs7SUFFOUMsTUFBTSxTQUFTLHdCQUF3QjtNQUNyQyxNQUFNLHFCQUFxQixPQUFPLEVBQUUsQ0FBQztNQUNyQyxNQUFNLGFBQWEsbUNBQW1DLEtBQUssQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCO1FBQ2pGLE1BQU0sYUFBYSxNQUFNLElBQUksT0FBTyxDQUFDO1VBQ25DLEdBQUcsSUFBSTtVQUNQLE9BQU8sSUFBSTtVQUNYLFNBQVMsTUFBTSxRQUFRO1VBQ3ZCLFdBQVcsTUFBTSxVQUFVO1VBQzNCLGFBQWEsd0JBQXdCO1lBQ25DLE1BQU0sZ0JBQWdCO2NBQ3BCLFFBQVE7Y0FDUixRQUFRO2FBQ1QsQ0FBQztZQUNGLFFBQVEsQ0FBQyxRQUFRLEVBQUUsMEJBQTBCLEVBQUUsYUFBYSxDQUFDLENBQUM7V0FDL0Q7VUFDRCxlQUFlLHdCQUF3QjtZQUNyQyxNQUFNLGtCQUFrQjtjQUN0QixRQUFRO2NBQ1IsUUFBUTthQUNULENBQUM7WUFDRixRQUFRLENBQUMsUUFBUSxFQUFFLDRCQUE0QixFQUFFLGVBQWUsQ0FBQyxDQUFDO1dBQ25FO1VBQ0QsY0FBYyxNQUFNLFVBQVUsR0FBRyxVQUFVLEVBQUUsR0FBRyxLQUFLLEVBQUU7U0FDeEQsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLEtBQUssV0FBVyxHQUFHO1VBQzVCLE1BQU0sVUFBVTtVQUNoQixNQUFNLFNBQVMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNoRCxHQUFHO1VBQ0YsTUFBTSxVQUFVO1VBQ2hCLFFBQVEsVUFBVTtTQUNuQixDQUFDO09BQ0gsQ0FBQyxDQUFDO01BQ0gsTUFBTSxlQUFlLFlBQVksS0FBSyxFQUFFLENBQUM7TUFDekMsTUFBTSxRQUFRLGFBQWE7UUFDekIsTUFBTSxlQUFlLFVBQVUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxLQUFLLFFBQVEsRUFBRSxNQUFNLEtBQUssTUFBTSxDQUFDLENBQUM7UUFDbkYsTUFBTSxZQUFZLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLFlBQVksWUFBWSxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sS0FBSyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDL0YsT0FBTyxZQUFZLFdBQVcsRUFBRSxDQUFDO09BQ2xDLENBQUM7TUFDRixNQUFNLGVBQWUsUUFBUSxZQUFZLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO01BQy9ELE1BQU0saUJBQWlCLGtDQUFrQyxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVE7UUFDOUUsSUFBSSxDQUFDLElBQUksVUFBVSxFQUFFLFlBQVksRUFBRSxFQUFFO1VBQ25DLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztTQUN4QjtRQUNELE1BQU0sYUFBYSxZQUFZLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7T0FDL0QsQ0FBQyxDQUFDO01BQ0gsTUFBTSxjQUFjLGNBQWMsS0FBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLEVBQUUscUJBQXFCLE1BQU0sQ0FBQyxJQUFJLE1BQU0sRUFBRSxRQUFRLElBQUksS0FBSyxLQUFLLFdBQVcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2hLLE1BQU0sZ0JBQWdCLFlBQVksVUFBVSxDQUFDO01BQzdDLE1BQU0sdUJBQXVCLHFCQUFxQjtRQUNoRCxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9CLFlBQVksZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxZQUFZLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUTtVQUN4RixJQUFJLE1BQU0sVUFBVSxFQUFFO1lBQ3BCLFlBQVksVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztXQUNwQyxNQUFNO1lBQ0wsUUFBUSxDQUFDLFNBQVMsRUFBRSxJQUFJLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1dBQ2hEO1NBQ0YsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sV0FBVyx1QkFBdUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsTUFBTSxLQUFLLFdBQVcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLEtBQUssVUFBVSxHQUFHLFFBQVEsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUMvSyxNQUFNLGNBQWMsNEJBQTRCO1FBQzlDLE1BQU0sU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdkQsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLO1VBQ2xCLFFBQVEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sUUFBUSxlQUFlLENBQUMsQ0FBQyxDQUFDO1VBQ3JELElBQUksQ0FBQyxNQUFNLFVBQVUsRUFBRTtZQUNyQixTQUFTLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7V0FDaEM7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxvQkFBb0IsYUFBYSxrQkFBa0IsSUFBSSxFQUFFLFdBQVcsQ0FBQyxNQUFNO1FBQy9FLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDYixNQUFNLFFBQVEsV0FBVyxDQUFDLFNBQVMsUUFBUSxFQUFFLENBQUMsQ0FBQyxHQUFHLE1BQU0sUUFBUSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUUsTUFBTSxjQUFjLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBQy9FLE1BQU0sQ0FBQyxXQUFXLEVBQUUsS0FBSztVQUN2QixTQUFTLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZO1lBQ2pELE1BQU0sTUFBTSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQztXQUNuQixDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7UUFDSCxrQkFBa0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLE9BQU8sQ0FBQyxDQUFDO09BQ1YsQ0FBQyxDQUFDO01BQ0gsTUFBTSx1QkFBdUIscUJBQXFCO1FBQ2hELE1BQU0sY0FBYyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVU7VUFDMUIsTUFBTSxXQUFXLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7VUFDckMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUM3QyxDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxpQkFBaUIsNEJBQTRCLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEtBQUssV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsWUFBWTtRQUNqSixJQUFJLFFBQVEsS0FBSyxLQUFLLFVBQVUsRUFBRTtVQUNoQyxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7U0FDeEIsTUFBTTtVQUNMLE1BQU0sYUFBYSxRQUFRLEtBQUssQ0FBQztVQUNqQyxNQUFNLE9BQU8sUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQzVDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSztZQUNoQixLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxRQUFRLGVBQWUsQ0FBQyxDQUFDO1dBQ2pELENBQUMsQ0FBQztVQUNILElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxRQUFRLENBQUMsRUFBRTtZQUMvQixTQUFTLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7V0FDbEQ7VUFDRCxRQUFRLENBQUMsVUFBVSxRQUFRLEVBQUUsQ0FBQyxNQUFNLFFBQVEsZUFBZSxDQUFDLENBQUMsQ0FBQztVQUM5RCxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7VUFDNUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7VUFDcEMsT0FBTyxRQUFRLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNsQztPQUNGLENBQUMsQ0FBQyxDQUFDO01BQ0osSUFBSSx1QkFBdUIsQ0FBQztNQUM1QixDQUFDLG1DQUFtQztRQUNsQyx1QkFBdUIsQ0FBQyx1QkFBdUIsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO1FBQzlGLHVCQUF1QixDQUFDLHVCQUF1QixDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUM7T0FDN0YsQ0FBQyx1QkFBdUIsS0FBSywwQkFBMEIsRUFBRSxDQUFDLENBQUMsRUFBRTtNQUM5RCxNQUFNLGtCQUFrQixtQ0FBbUM7UUFDekQsSUFBSSxRQUFRLEtBQUssS0FBSyxVQUFVLEVBQUU7VUFDaEMsTUFBTSxPQUFPLFNBQVMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxRQUFRLE9BQU8sRUFBRSxDQUFDLENBQUM7VUFDNUQsWUFBWSxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1VBQzFDLE9BQU8sSUFBSSxDQUFDO1NBQ2IsTUFBTTtVQUNMLE9BQU8sUUFBUSxLQUFLLENBQUM7U0FDdEI7T0FDRixDQUFDO01BQ0YsTUFBTSxjQUFjLGtCQUFrQixXQUFXLHVCQUF1QixpQkFBaUIsS0FBSztRQUM1RixJQUFJLElBQUksY0FBYyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQy9ELE9BQU8sUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDNUIsTUFBTTtVQUNMLE1BQU0sUUFBUSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDakMsT0FBTyxZQUFZLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVE7WUFDN0Msb0JBQW9CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3RDLE9BQU8sUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLFlBQVksV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsa0JBQWtCO2NBQ3RHLE1BQU0sYUFBYSxlQUFlLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztjQUN4RSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsUUFBUSxDQUFDLEVBQUU7Z0JBQy9CLFNBQVMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztlQUNsRDtjQUNELE1BQU0sY0FBYyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2NBQ2pFLElBQUksUUFBUSxLQUFLLHVCQUF1QixpQkFBaUIsRUFBRTtnQkFDekQsWUFBWSxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3hDLE9BQU8sY0FBYyxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7ZUFDdEQsTUFBTTtnQkFDTCxZQUFZLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDeEMsT0FBTyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztlQUM1QjthQUNGLENBQUMsQ0FBQyxDQUFDO1dBQ0wsQ0FBQyxDQUFDO1NBQ0o7T0FDRixDQUFDO01BQ0YsTUFBTSxlQUFlLHFCQUFxQjtRQUN4QyxNQUFNLFFBQVEsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sWUFBWSxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRO1VBQy9DLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztVQUN0QyxPQUFPLGNBQWMsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYztZQUNyRSxNQUFNLGVBQWUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ25ELE9BQU8sVUFBVSxDQUFDO1dBQ25CLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLGFBQWEscUJBQXFCO1FBQ3RDLE1BQU0sUUFBUSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsT0FBTyxZQUFZLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVE7VUFDOUMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1VBQ3RDLE9BQU8sY0FBYyxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDdEQsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sVUFBVSxxQkFBcUIsTUFBTSxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsR0FBRyxXQUFXLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSx1QkFBdUIsaUJBQWlCLENBQUMsQ0FBQztNQUNySixNQUFNLFNBQVMscUJBQXFCLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLEdBQUcsWUFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUMzRyxNQUFNLFdBQVcscUJBQXFCLFlBQVksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLE1BQU0sU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sU0FBUyxDQUFDLENBQUMsQ0FBQztNQUN6SSxNQUFNLFlBQVksS0FBSywrQkFBK0I7UUFDcEQsT0FBTyxTQUFTLENBQUMsY0FBYyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxNQUFNLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxTQUFTLFVBQVUsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQzVMLENBQUM7TUFDRixNQUFNLFNBQVMsUUFBUSxDQUFDO1FBQ3RCLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSwyQkFBMkI7VUFDeEMsTUFBTSxPQUFPLGNBQWMsTUFBTSxLQUFLLENBQUM7VUFDdkMsWUFBWSxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ3JELE1BQU0sT0FBTyxjQUFjLE1BQU0sS0FBSyxDQUFDO1lBQ3ZDLFlBQVksVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNwQyxNQUFNLFFBQVEsWUFBWSxDQUFDLGNBQWMsTUFBTSxLQUFLLENBQUMsQ0FBQztZQUN0RCxZQUFZLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsV0FBVyxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztXQUNsRixDQUFDLENBQUM7U0FDSixDQUFDO1FBQ0YsY0FBYyxDQUFDLCtCQUErQjtVQUM1QyxNQUFNLFNBQVMsY0FBYyxNQUFNLE9BQU8sQ0FBQztVQUMzQyxTQUFTLFVBQVUsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQ2xELE1BQU0sWUFBWSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckMsSUFBSSxTQUFTLFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUU7Y0FDNUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUMvQjtZQUNELFdBQVcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixpQkFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBTTtjQUNoRixNQUFNLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDbkMsRUFBRSxJQUFJLENBQUMsQ0FBQztXQUNWLENBQUMsQ0FBQztTQUNKLENBQUM7UUFDRixhQUFhLENBQUMsZ0NBQWdDO1VBQzVDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVc7WUFDL0IsU0FBUyxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sV0FBVyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN0QyxJQUFJLE1BQU0sZ0JBQWdCLEtBQUssZUFBZSxxQkFBcUIsRUFBRTtjQUNuRSxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDMUMsTUFBTSxJQUFJLE1BQU0sZ0JBQWdCLEtBQUssZUFBZSxrQkFBa0IsRUFBRTtjQUN2RSxhQUFhLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ25DO1dBQ0YsQ0FBQyxDQUFDO1NBQ0osQ0FBQztRQUNGLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxtQkFBbUI7VUFDbkQsTUFBTSxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLFNBQVMsRUFBRSxFQUFFLE1BQU0sU0FBUyxDQUFDLENBQUM7U0FDekUsQ0FBQztRQUNGLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxtQkFBbUI7VUFDckQsTUFBTSxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLFNBQVMsRUFBRSxFQUFFLE1BQU0sU0FBUyxDQUFDLENBQUM7U0FDM0UsQ0FBQztRQUNGLEdBQUcsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSwyQkFBMkI7WUFDbkUsTUFBTSxPQUFPLGNBQWMsTUFBTSxLQUFLLENBQUM7WUFDdkMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN4QixXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSx1QkFBdUIsZ0JBQWdCLENBQUMsQ0FBQztZQUNsRSxNQUFNLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDN0IsQ0FBQyxDQUFDLEdBQUcsRUFBRTtPQUNYLENBQUMsQ0FBQztNQUNILE1BQU0sZ0JBQWdCLGFBQWEsWUFBWSxlQUFlLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFZLGVBQWUsQ0FBQyxDQUFDO01BQzVHLE1BQU0sa0JBQWtCLGFBQWE7UUFDbkMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsZUFBZTtVQUMzQyxZQUFZLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ3RDLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLG1CQUFtQixhQUFhO1FBQ3BDLFlBQVksV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1VBQ3hDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUMxQyxDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSwyQkFBMkIsYUFBYSxRQUFRLEtBQUssQ0FBQyxTQUFTLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEtBQUssQ0FBQyxJQUFJLFFBQVEsRUFBRSxNQUFNLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQztNQUM5SSxNQUFNLGtCQUFrQixhQUFhO1FBQ25DLE1BQU0scUJBQXFCLFlBQVksV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGVBQWU7VUFDaEgsTUFBTSxZQUFZLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztVQUM1QyxNQUFNLFdBQVcsTUFBTSxDQUFDLFlBQVksU0FBUyxFQUFFLENBQUMsQ0FBQztVQUNqRCxNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxZQUFZLG9CQUFvQixDQUFDLENBQUMsQ0FBQztVQUM3RSxPQUFPLFlBQVksa0JBQWtCLENBQUMsU0FBUyxFQUFFLEtBQUssY0FBYyxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwRyxDQUFDLElBQUksQ0FBQyxtQkFBbUI7VUFDeEIsT0FBTztVQUNQLGNBQWM7U0FDZixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsa0JBQWtCLEtBQUssQ0FBQyxNQUFNO1VBQzVCLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsZUFBZTtZQUN0RCxNQUFNLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7V0FDckQsQ0FBQyxDQUFDO1NBQ0osRUFBRSxDQUFDLHlCQUF5QixLQUFLO1VBQ2hDLE1BQU0saUJBQWlCLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztTQUM3RCxDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxPQUFPO1FBQ1gsY0FBYyxlQUFlO1FBQzdCLGdCQUFnQjtRQUNoQixlQUFlO09BQ2hCLENBQUM7TUFDRixPQUFPO1FBQ0wsS0FBSyxNQUFNLElBQUk7UUFDZixLQUFLLE1BQU0sSUFBSTtRQUNmLFNBQVMsTUFBTSxRQUFRO1FBQ3ZCLFlBQVksT0FBTyxDQUFDLE1BQU0sZ0JBQWdCLEVBQUU7VUFDMUMsTUFBTSxPQUFPLENBQUM7WUFDWixNQUFNLFNBQVM7WUFDZixTQUFTLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFDM0IsUUFBUSxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQ3pCLFVBQVUsU0FBUyxDQUFDLFFBQVEsQ0FBQztZQUM3QixTQUFTLHlCQUF5QjtjQUNoQyxZQUFZLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDeEMsUUFBUSxDQUFDLFNBQVMsRUFBRSxPQUFPLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO2VBQ25ELENBQUMsQ0FBQzthQUNKO1dBQ0YsQ0FBQztVQUNGLFlBQVksT0FBTyxDQUFDO1lBQ2xCLGdCQUFnQixNQUFNLFFBQVEsYUFBYTtZQUMzQyxXQUFXLE1BQU0sUUFBUSxLQUFLO1dBQy9CLENBQUM7VUFDRixTQUFTLE9BQU8sQ0FBQztZQUNmLE1BQU0sYUFBYTtjQUNqQixPQUFPLFlBQVksZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQy9DO1dBQ0YsQ0FBQztVQUNGLFNBQVMsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUNyQixDQUFDO1FBQ0YsWUFBWSxNQUFNLFdBQVc7UUFDN0IsSUFBSTtRQUNKLE1BQU07T0FDUCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0saUJBQWlCLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQzs7SUFFbkQsTUFBTSxhQUFhLGlDQUFpQztNQUNsRCxPQUFPO01BQ1AsS0FBSztNQUNMLFVBQVU7S0FDWCxDQUFDLENBQUM7SUFDSCxNQUFNLGFBQWEsaUJBQWlCO01BQ2xDLFNBQVMsSUFBSTtNQUNiLE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7TUFDekIsWUFBWSxFQUFFO0tBQ2YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxlQUFlLFNBQVM7TUFDNUIsT0FBTyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7TUFDbkMsTUFBTSxFQUFFLElBQUksRUFBRTtLQUNmLENBQUMsQ0FBQztJQUNILE1BQU0sYUFBYSxNQUFNLENBQUM7TUFDeEIsTUFBTSxZQUFZO01BQ2xCLGNBQWM7UUFDWix1QkFBdUIsQ0FBQyxXQUFXLENBQUM7UUFDcEMsdUJBQXVCLENBQUMsVUFBVSxDQUFDO1FBQ25DLGVBQWUsQ0FBQyxZQUFZLENBQUM7UUFDN0IsZUFBZSxDQUFDLGVBQWUsQ0FBQztRQUNoQyxTQUFTLENBQUMsa0JBQWtCLENBQUM7UUFDN0IsU0FBUyxDQUFDLGdCQUFnQixDQUFDO1FBQzNCLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxlQUFlLHFCQUFxQixDQUFDO1FBQ2xFLGFBQWEsQ0FBQyxNQUFNLEVBQUU7VUFDcEIsVUFBVSxDQUFDLFNBQVMsQ0FBQztVQUNyQixVQUFVLENBQUMsT0FBTyxDQUFDO1VBQ25CLFVBQVUsQ0FBQyxZQUFZLENBQUM7U0FDekIsQ0FBQztRQUNGLFNBQVMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDO1FBQzdCLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQztRQUM1QixTQUFTLENBQUMsbUJBQW1CLENBQUM7UUFDOUIsU0FBUyxDQUFDLFNBQVMsQ0FBQztRQUNwQixpQkFBaUIsRUFBRTtRQUNuQixVQUFVLENBQUMsS0FBSyxDQUFDO1FBQ2pCLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUM7UUFDbEMsU0FBUyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUM7UUFDN0IsS0FBSyxDQUFDLGlCQUFpQixFQUFFO1VBQ3ZCLE1BQU07VUFDTixZQUFZO1VBQ1osU0FBUztVQUNULFNBQVM7U0FDVixDQUFDO1FBQ0YsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7T0FDNUI7TUFDRCxNQUFNO1FBQ0osY0FBYyxpQkFBaUI7VUFDN0IsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDMUI7UUFDRCxrQkFBa0IsaUJBQWlCO1VBQ2pDLElBQUksaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDOUI7UUFDRCxpQkFBaUIsaUJBQWlCO1VBQ2hDLElBQUksZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0I7T0FDRjtNQUNELFNBQVMsTUFBTTtNQUNmLFdBQVc7UUFDVCxVQUFVO1FBQ1YsVUFBVTtRQUNWLFlBQVk7T0FDYjtLQUNGLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFdBQVcsNkRBQTZEO01BQzVFLE1BQU0sV0FBVyxNQUFNLE1BQU0sU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO01BQ3BELE1BQU0sVUFBVSxRQUFRLEtBQUssS0FBSyxZQUFZLEdBQUc7UUFDL0MsU0FBUztVQUNQLE9BQU8sTUFBTSxZQUFZLEVBQUU7VUFDM0IsT0FBTyxNQUFNLGVBQWUsRUFBRTtTQUMvQjtPQUNGLEdBQUcsRUFBRSxDQUFDO01BQ1AsTUFBTSxxQkFBcUIsbUJBQW1CLGVBQWUsT0FBTyxLQUFLLENBQUMsQ0FBQztNQUMzRSxNQUFNLG9CQUFvQixtQkFBbUIsa0JBQWtCLENBQUMsZUFBZSxDQUFDLEdBQUcsT0FBTyxHQUFHLEVBQUUsQ0FBQztNQUNoRyxPQUFPLFVBQVUsT0FBTyxDQUFDO1FBQ3ZCLEtBQUssRUFBRSxLQUFLLEtBQUssRUFBRTtRQUNuQixNQUFNLFFBQVEsS0FBSztRQUNuQixTQUFTLFFBQVEsS0FBSyxRQUFRO1FBQzlCLGlCQUFpQixRQUFRLEtBQUssZ0JBQWdCO1FBQzlDLFdBQVcsUUFBUSxLQUFLLFVBQVU7UUFDbEMsVUFBVSxNQUFNO1VBQ2QsVUFBVSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7VUFDOUIsTUFBTSxTQUFTLElBQUksQ0FBQyxXQUFXLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1VBQ3JELE9BQU8sUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDNUI7UUFDRCxXQUFXLE1BQU07VUFDZixPQUFPLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVCO1FBQ0QsWUFBWSxpQkFBaUI7VUFDM0IsV0FBVyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1NBQzNGO1FBQ0QsZUFBZSwyQ0FBMkM7VUFDeEQsTUFBTSxPQUFPLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQztVQUNuQyxXQUFXLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQ2xDLFFBQVE7Y0FDTixNQUFNLFNBQVM7Y0FDZixJQUFJO2NBQ0osR0FBRyxpQkFBaUIsQ0FBQyxlQUFlLENBQUM7YUFDdEM7V0FDRixDQUFDLENBQUM7U0FDSjtRQUNELGtCQUFrQix5Q0FBeUM7VUFDekQsTUFBTSxPQUFPLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQztVQUNuQyxXQUFXLHFCQUFxQixDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7VUFDaEYsTUFBTSxDQUFDLGVBQWUsRUFBRSxNQUFNO1lBQzVCLE1BQU0saUJBQWlCLGlCQUFpQixDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDNUQsV0FBVyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsY0FBYyxFQUFFO2NBQzNDLFFBQVE7Z0JBQ04sTUFBTSxTQUFTO2dCQUNmLE1BQU0sRUFBRSxlQUFlO2dCQUN2QixHQUFHLGNBQWM7ZUFDbEI7YUFDRixDQUFDLENBQUM7V0FDSixDQUFDLENBQUM7U0FDSjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFlBQVksa0JBQWtCO01BQ2xDLE1BQU0sa0JBQWtCLHdCQUF3QjtRQUM5QyxNQUFNLFVBQVUsTUFBTSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsT0FBTyxPQUFPLE9BQU8sQ0FBQyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztPQUMxRCxDQUFDO01BQ0YsTUFBTSxhQUFhLG9CQUFvQjtRQUNyQyxVQUFVLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDdkMsQ0FBQztNQUNGLE1BQU0sU0FBUyxtQ0FBbUM7UUFDaEQsTUFBTSxZQUFZLFFBQVEsS0FBSyxDQUFDO1FBQ2hDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO09BQzVELENBQUM7TUFDRixNQUFNLG1CQUFtQiw4Q0FBOEM7UUFDckUsTUFBTSxPQUFPLE1BQU0sU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqRCxVQUFVLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLHFCQUFxQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvSCxZQUFZLFNBQVMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxLQUFLLENBQUM7VUFDM0MsTUFBTSxVQUFVO1VBQ2hCLFFBQVEsYUFBYTtVQUNyQixTQUFTO1NBQ1YsQ0FBQyxDQUFDLENBQUM7T0FDTCxDQUFDO01BQ0YsTUFBTSxhQUFhLHNDQUFzQztRQUN2RCxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxRQUFRLEtBQUssQ0FBQyxDQUFDO09BQ3ZFLENBQUM7TUFDRixNQUFNLHVCQUF1QixpREFBaUQ7UUFDNUUsTUFBTSxPQUFPLFFBQVEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDM0UsVUFBVSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9CLFlBQVksU0FBUyxDQUFDLE9BQU8sRUFBRSxRQUFRLEtBQUssQ0FBQztVQUMzQyxNQUFNLE1BQU07VUFDWixJQUFJO1NBQ0wsQ0FBQyxDQUFDLENBQUM7T0FDTCxDQUFDO01BQ0YsTUFBTSxPQUFPLFdBQVc7UUFDdEIsSUFBSSxVQUFVLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtVQUM5QixZQUFZLFNBQVMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1VBQ2hELFVBQVUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzNCO09BQ0YsQ0FBQztNQUNGLE1BQU0sYUFBYSxXQUFXLFVBQVUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQzNELE1BQU0sYUFBYSxXQUFXO1FBQzVCLElBQUksVUFBVSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7VUFDOUIsWUFBWSxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTO1lBQzNDLFFBQVEsS0FBSyxLQUFLO2lCQUNiLE1BQU07Y0FDVCxVQUFVLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsZ0JBQWdCLENBQUMsQ0FBQztjQUM5RCxNQUFNO2lCQUNILFVBQVU7Y0FDYixNQUFNLE9BQU8sTUFBTSxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO2NBQ2pELFdBQVcscUJBQXFCLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRSxDQUFDLENBQUM7Y0FDakYsTUFBTTthQUNQO1dBQ0YsQ0FBQyxDQUFDO1NBQ0o7T0FDRixDQUFDO01BQ0YsTUFBTSxPQUFPO1FBQ1gsVUFBVTtRQUNWLE1BQU07UUFDTixnQkFBZ0I7UUFDaEIsVUFBVTtRQUNWLG9CQUFvQjtRQUNwQixJQUFJO1FBQ0osVUFBVTtRQUNWLFVBQVU7UUFDVixRQUFRLFVBQVUsT0FBTztPQUMxQixDQUFDO01BQ0YsT0FBTztRQUNMLEtBQUssTUFBTSxJQUFJO1FBQ2YsS0FBSyxNQUFNLElBQUk7UUFDZixZQUFZLE9BQU8sQ0FBQyxNQUFNLGlCQUFpQixFQUFFO1VBQzNDLFVBQVUsT0FBTyxDQUFDO1lBQ2hCLFVBQVUsOEJBQThCO2NBQ3RDLE9BQU8sVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQzNFO1lBQ0QsZ0JBQWdCLFdBQVc7Y0FDekIsT0FBTyxNQUFNLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7YUFDNUM7WUFDRCxRQUFRLFdBQVc7Y0FDakIsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDeEI7WUFDRCxTQUFTLFdBQVc7Y0FDbEIsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDeEI7V0FDRixDQUFDO1VBQ0YsWUFBWSxPQUFPLENBQUM7WUFDbEIsT0FBTztjQUNMLE1BQU0sUUFBUTtjQUNkLGNBQWMsUUFBUSxLQUFLLEVBQUU7YUFDOUI7V0FDRixDQUFDO1VBQ0YsU0FBUyxPQUFPLENBQUM7WUFDZixVQUFVO2NBQ1IsR0FBRyxrQkFBa0IsQ0FBQztnQkFDcEIsYUFBYSxJQUFJLFlBQVk7Z0JBQzdCLEdBQUcsTUFBTSwwQkFBMEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7ZUFDckcsQ0FBQztjQUNGLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQ2xCLEdBQUcsTUFBTSwyQkFBMkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3JHLGNBQWMsVUFBVTtlQUN6QixDQUFDO2FBQ0g7V0FDRixDQUFDO1NBQ0gsQ0FBQztRQUNGLFlBQVksTUFBTSxXQUFXO1FBQzdCLElBQUk7T0FDTCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sYUFBYSxNQUFNLENBQUM7TUFDeEIsTUFBTSxZQUFZO01BQ2xCLGNBQWM7UUFDWixVQUFVLENBQUMsVUFBVSxDQUFDO1FBQ3RCLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDbkIsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNuQixjQUFjLENBQUMsVUFBVSxDQUFDO1FBQzFCLEtBQUssQ0FBQyxrQkFBa0IsRUFBRTtVQUN4QixVQUFVO1VBQ1YsWUFBWTtVQUNaLFNBQVM7U0FDVixDQUFDO1FBQ0YsV0FBVyxDQUFDLDJCQUEyQixFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsRixXQUFXLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLFNBQVMsQ0FBQyxZQUFZLEVBQUUsUUFBUSxLQUFLLENBQUM7UUFDdEMsU0FBUyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUM7UUFDL0IsU0FBUyxDQUFDLFlBQVksRUFBRSxRQUFRLEtBQUssQ0FBQztPQUN2QztNQUNELFNBQVMsU0FBUztNQUNsQixNQUFNO1FBQ0osUUFBUSxvQ0FBb0M7VUFDMUMsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN2QztRQUNELGtCQUFrQiw0Q0FBNEM7VUFDNUQsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztTQUN6RDtRQUNELFlBQVksdUNBQXVDO1VBQ2pELElBQUksV0FBVyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDOUM7UUFDRCxzQkFBc0IsK0NBQStDO1VBQ25FLElBQUkscUJBQXFCLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDaEU7UUFDRCxNQUFNLHFCQUFxQjtVQUN6QixJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN0QjtRQUNELFFBQVEscUJBQXFCLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUNuRCxZQUFZLHFCQUFxQixJQUFJLFdBQVcsQ0FBQyxTQUFTLENBQUM7UUFDM0QsWUFBWSw0QkFBNEI7VUFDdEMsSUFBSSxXQUFXLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ25DO1FBQ0QsWUFBWSxxQkFBcUI7VUFDL0IsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDNUI7T0FDRjtLQUNGLENBQUMsQ0FBQzs7SUFFSCxJQUFJLFdBQVcsT0FBTyxLQUFLLE1BQU0sUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7O0lBRWhFLE1BQU0sWUFBWSxVQUFVO01BQzFCLE1BQU0sU0FBUyxRQUFRLENBQUMsTUFBTSxPQUFPLENBQUMsQ0FBQztNQUN2QyxNQUFNLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQztNQUMzQixNQUFNLGFBQWEsUUFBUSxLQUFLLENBQUMsTUFBTSxJQUFJLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUM3RixNQUFNLG1CQUFtQixNQUFNO1FBQzdCLElBQUksR0FBRyxLQUFLLFFBQVEsRUFBRTtVQUNwQixNQUFNLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7VUFDaEQsTUFBTSxZQUFZLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztVQUN2RSxPQUFPO1lBQ0wsSUFBSTtZQUNKLEdBQUcsU0FBUztXQUNiLENBQUM7U0FDSCxNQUFNO1VBQ0wsTUFBTSxPQUFPLE1BQU0sS0FBSyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztVQUNuRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDakI7T0FDRixDQUFDO01BQ0YsT0FBTztRQUNMLEtBQUssTUFBTSxJQUFJO1FBQ2YsS0FBSyxNQUFNLElBQUk7UUFDZixZQUFZLE1BQU0sV0FBVztRQUM3QixNQUFNO1FBQ04sWUFBWSxnQkFBZ0IsUUFBUSxDQUFDLE1BQU0saUJBQWlCLEVBQUU7VUFDNUQsUUFBUSxPQUFPLENBQUMsRUFBRSxDQUFDO1VBQ25CLE1BQU0sT0FBTyxDQUFDO1lBQ1osTUFBTSxXQUFXO1lBQ2pCLFVBQVUsSUFBSTtZQUNkLFVBQVUsSUFBSTtXQUNmLENBQUM7U0FDSCxDQUFDO1FBQ0YsaUJBQWlCLEVBQUUsWUFBWSxnQkFBZ0IsRUFBRSxFQUFFO1FBQ25ELFlBQVksTUFBTSxXQUFXO09BQzlCLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxTQUFTLE1BQU0sQ0FBQztNQUNwQixNQUFNLFFBQVE7TUFDZCxTQUFTLFNBQVM7TUFDbEIsY0FBYztRQUNaLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDO1FBQzNCLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDakIsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7UUFDM0IsZ0JBQWdCLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRTtVQUN6QyxRQUFRO1VBQ1IsTUFBTTtTQUNQLENBQUM7UUFDRixRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ2xCLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDaEIsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7T0FDNUI7S0FDRixDQUFDLENBQUM7O0lBRUgsTUFBTSxTQUFTLFFBQVE7TUFDckIsTUFBTSxNQUFNLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQ3BHLE1BQU0sTUFBTSxlQUFlLFdBQVcsVUFBVSxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7TUFDNUUsTUFBTSxTQUFTLGVBQWUsV0FBVyxVQUFVLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztNQUNqRixNQUFNLFNBQVMsT0FBTztRQUNwQixHQUFHLElBQUk7UUFDUCxHQUFHO09BQ0osQ0FBQyxDQUFDO01BQ0gsT0FBTztRQUNMLEdBQUc7UUFDSCxNQUFNO1FBQ04sTUFBTTtPQUNQLENBQUM7S0FDSCxDQUFDOztJQUVGLElBQUksV0FBVyxPQUFPLEtBQUssTUFBTSxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQzs7SUFFL0QsTUFBTSxlQUFlO01BQ25CLFVBQVUsSUFBSTtNQUNkLFdBQVcsSUFBSTtNQUNmLDZCQUE2QixJQUFJO01BQ2pDLDhCQUE4QixJQUFJO01BQ2xDLHNCQUFzQixJQUFJO01BQzFCLHVCQUF1QixJQUFJO01BQzNCLGtCQUFrQixJQUFJO01BQ3RCLG9CQUFvQixJQUFJO01BQ3hCLHFCQUFxQixJQUFJO01BQ3pCLG9CQUFvQixJQUFJO0tBQ3pCLENBQUM7SUFDRixNQUFNLGtCQUFrQix1QkFBdUIsQ0FBQztJQUNoRCxNQUFNLGNBQWMsU0FBUyxNQUFNLEtBQUssQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0RixNQUFNLGNBQWMsaUJBQWlCO01BQ25DLE1BQU0sU0FBUyxJQUFJLFlBQVksRUFBRSxDQUFDO01BQ2xDLElBQUksUUFBUSxNQUFNLEVBQUUsRUFBRTtRQUNwQixNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvQyxPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQztPQUNqRCxNQUFNO1FBQ0wsT0FBTyxNQUFNLENBQUM7T0FDZjtLQUNGLENBQUM7SUFDRixNQUFNLGFBQWEsaUJBQWlCLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sUUFBUSx3QkFBd0I7TUFDcEMsTUFBTSxRQUFRLFlBQVksRUFBRSxDQUFDO01BQzdCLE9BQU8sVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQy9ELENBQUM7SUFDRixNQUFNLFFBQVEsc0NBQXNDO01BQ2xELE1BQU0sUUFBUSxZQUFZLEVBQUUsQ0FBQztNQUM3QixPQUFPLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQ2hGLENBQUM7SUFDRixNQUFNLG9CQUFvQixZQUFZLFFBQVEsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDL0YsTUFBTSx3QkFBd0IsTUFBTSxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVE7UUFDL0UsS0FBSyxDQUFDLElBQUksUUFBUSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO09BQzFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxNQUFNLGVBQWUseUNBQXlDO01BQzVELElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztNQUNYLE1BQU0saUJBQWlCLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUM7TUFDN0UsTUFBTSxXQUFXLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUM1RyxPQUFPO1FBQ0wsS0FBSztVQUNILEtBQUssSUFBSSxJQUFJO1VBQ2IsWUFBWSxDQUFDLEtBQUssSUFBSSxXQUFXLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtVQUN0RSxTQUFTLElBQUksUUFBUSxPQUFPLENBQUMsY0FBYyxDQUFDO1VBQzVDLFdBQVcsUUFBUTtTQUNwQjtRQUNELFlBQVksUUFBUSxDQUFDO1VBQ25CLEdBQUcsQ0FBQyxLQUFLLElBQUksV0FBVyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7VUFDN0QscUJBQXFCLEVBQUU7U0FDeEIsQ0FBQztPQUNILENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxXQUFXLCtCQUErQixlQUFlLFFBQVEsS0FBSyxFQUFFLEtBQUssWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDOUksTUFBTSxjQUFjLG1DQUFtQztNQUNyRCxNQUFNLFFBQVEsWUFBWSxFQUFFLENBQUM7TUFDN0IsTUFBTSxXQUFXLE1BQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ25GLE9BQU8sWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ3BGLENBQUM7O0lBRUYsTUFBTSxzQkFBc0I7TUFDMUIsU0FBUyxXQUFXO01BQ3BCLE9BQU8sU0FBUztNQUNoQixLQUFLLE9BQU87TUFDWixTQUFTLFNBQVM7TUFDbEIsTUFBTSxTQUFTO01BQ2YsTUFBTSxNQUFNO0tBQ2IsQ0FBQztJQUNGLE1BQU0sWUFBWSxVQUFVO01BQzFCLE1BQU0sZ0JBQWdCLE1BQU0sQ0FBQztRQUMzQixLQUFLO1VBQ0gsS0FBSyxHQUFHO1VBQ1IsV0FBVyxNQUFNLG9CQUFvQixDQUFDLE1BQU0sS0FBSyxDQUFDO1NBQ25EO1FBQ0QsWUFBWSxRQUFRLENBQUMsQ0FBQyxTQUFTLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQzdDLENBQUMsQ0FBQztNQUNILE1BQU0sbUJBQW1CLFlBQVk7UUFDbkMsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxTQUFTLENBQUM7VUFDcEIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRTtTQUNuQztPQUNGLENBQUMsQ0FBQztNQUNILE1BQU0sb0JBQW9CLFlBQVk7UUFDcEMsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxVQUFVLENBQUM7VUFDckIsV0FBVyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztTQUMzQjtPQUNGLENBQUMsQ0FBQztNQUNILE1BQU0sb0JBQW9CLE1BQU0sQ0FBQztRQUMvQixLQUFLO1VBQ0gsS0FBSyxLQUFLO1VBQ1YsU0FBUyxNQUFNLFNBQVMsR0FBRztZQUN6QixrQkFBa0I7WUFDbEIsd0JBQXdCO1dBQ3pCLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQztTQUN6QjtRQUNELFlBQVk7VUFDVjtZQUNFLEtBQUs7Y0FDSCxLQUFLLEtBQUs7Y0FDVixTQUFTLENBQUMsbUJBQW1CLENBQUM7YUFDL0I7WUFDRCxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDbEM7VUFDRCxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7U0FDckI7UUFDRCxZQUFZLFFBQVEsQ0FBQyxDQUFDLFNBQVMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDN0MsQ0FBQyxDQUFDO01BQ0gsTUFBTSxpQkFBaUIsbUJBQW1CO1FBQ3hDLElBQUksSUFBSSxVQUFVLEVBQUUsWUFBWSxFQUFFLEVBQUU7VUFDbEMsaUJBQWlCLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVk7WUFDOUMsU0FBUyxJQUFJLENBQUMsUUFBUSxFQUFFO2NBQ3RCO2dCQUNFLEtBQUs7a0JBQ0gsS0FBSyxLQUFLO2tCQUNWLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQztpQkFDL0I7Z0JBQ0QsWUFBWSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2VBQ3hDO2NBQ0QsaUJBQWlCLENBQUMsT0FBTyxDQUFDO2FBQzNCLENBQUMsQ0FBQztXQUNKLENBQUMsQ0FBQztTQUNKO09BQ0YsQ0FBQztNQUNGLE1BQU0sYUFBYSxnQkFBZ0I7UUFDakMsSUFBSSxJQUFJLFVBQVUsRUFBRSxZQUFZLEVBQUUsRUFBRTtVQUNsQyxNQUFNLFNBQVMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDdkMsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QztPQUNGLENBQUM7TUFDRixNQUFNLE9BQU87UUFDWCxjQUFjO1FBQ2QsVUFBVTtPQUNYLENBQUM7TUFDRixNQUFNLGNBQWMsT0FBTyxDQUFDO1FBQzFCLE1BQU0sS0FBSyxRQUFRLEVBQUU7UUFDckIsTUFBTSxNQUFNLFFBQVEsRUFBRTtRQUN0QixNQUFNLE1BQU0sS0FBSyxDQUFDLFNBQVMsUUFBUSxLQUFLLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7T0FDaEYsQ0FBQyxDQUFDO01BQ0gsTUFBTSxZQUFZLE1BQU0sQ0FBQyxNQUFNLE9BQU8sQ0FBQztRQUNyQyxLQUFLO1VBQ0gsS0FBSyxRQUFRO1VBQ2IsU0FBUztZQUNQLDJCQUEyQjtZQUMzQixZQUFZO1lBQ1osbUJBQW1CO1lBQ25CLGtCQUFrQjtXQUNuQjtTQUNGO1FBQ0QsWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7WUFDM0IsS0FBSyxNQUFNO1lBQ1gsU0FBUyxDQUFDLFVBQVUsQ0FBQztZQUNyQixZQUFZLEVBQUUsY0FBYyxNQUFNLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxFQUFFO1dBQ2xFLEVBQUUsTUFBTSxhQUFhLENBQUMsQ0FBQztRQUMxQixRQUFRLFFBQVE7VUFDZCxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN2QjtPQUNGLENBQUMsQ0FBQyxDQUFDO01BQ0osTUFBTSx1QkFBdUIsV0FBVyxDQUFDLFdBQVcsRUFBRTtRQUNwRCxLQUFLLEtBQUs7UUFDVixTQUFTLENBQUMsd0JBQXdCLENBQUM7T0FDcEMsRUFBRSxNQUFNLGFBQWEsQ0FBQyxDQUFDO01BQ3hCLE1BQU0sdUJBQXVCO1FBQzNCLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMsd0JBQXdCLENBQUM7U0FDcEM7UUFDRCxZQUFZLENBQUMsYUFBYSxPQUFPLEVBQUUsQ0FBQztRQUNwQyxZQUFZLFFBQVEsQ0FBQyxDQUFDLFNBQVMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDN0MsQ0FBQztNQUNGLE1BQU0sYUFBYTtRQUNqQixvQkFBb0I7UUFDcEIsb0JBQW9CO09BQ3JCLENBQUM7TUFDRixPQUFPO1FBQ0wsS0FBSyxNQUFNLElBQUk7UUFDZixLQUFLO1VBQ0gsS0FBSyxLQUFLO1VBQ1YsWUFBWSxFQUFFLE1BQU0sT0FBTyxFQUFFO1VBQzdCLFNBQVMsTUFBTSxNQUFNLElBQUksQ0FBQyxTQUFTO1lBQ2pDLGtCQUFrQjtZQUNsQixzQkFBc0I7WUFDdEIsQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLEVBQUUsQ0FBQztXQUMvQixDQUFDLE1BQU0sQ0FBQztZQUNQLGtCQUFrQjtZQUNsQixzQkFBc0I7V0FDdkIsQ0FBQztTQUNIO1FBQ0QsWUFBWSxRQUFRLENBQUM7VUFDbkIsUUFBUSxPQUFPLENBQUMsRUFBRSxDQUFDO1VBQ25CLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxRQUFRO2NBQ3BELFNBQVMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxNQUFNLENBQUMsQ0FBQzthQUM3QyxDQUFDLENBQUMsQ0FBQztTQUNQLENBQUM7UUFDRixZQUFZLFVBQVUsT0FBTyxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsaUJBQWlCLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sWUFBWSxHQUFHLEVBQUUsR0FBRyxDQUFDLFNBQVMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMxSSxJQUFJO09BQ0wsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLGVBQWUsTUFBTSxDQUFDO01BQzFCLE1BQU0sY0FBYztNQUNwQixTQUFTLFNBQVM7TUFDbEIsY0FBYztRQUNaLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDakIsVUFBVSxDQUFDLFVBQVUsQ0FBQztRQUN0QixRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ2hCLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFDdEIsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUNsQixVQUFVLENBQUMsY0FBYyxDQUFDO1FBQzFCLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQztRQUNqQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDO09BQ3RDO01BQ0QsTUFBTTtRQUNKLGdCQUFnQix5QkFBeUI7VUFDdkMsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsWUFBWSxzQkFBc0I7VUFDaEMsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzdCO09BQ0Y7S0FDRixDQUFDLENBQUM7O0lBRUgsSUFBSSwwQkFBMEIsa0NBQWtDO01BQzlELE1BQU0sa0JBQWtCLE1BQU0sVUFBVSxPQUFPLENBQUM7TUFDaEQsTUFBTSxZQUFZLE1BQU07UUFDdEIsTUFBTSxjQUFjLEtBQUssQ0FBQyxZQUFZLFFBQVEsQ0FBQyxNQUFNLHdCQUF3QixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFdBQVcsTUFBTSxDQUFDLENBQUM7UUFDM0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxXQUFXLE9BQU8sQ0FBQyxDQUFDO1FBQzVELE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLE1BQU0sRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLE9BQU8sRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1FBQzFELE9BQU8sUUFBUSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUMzRCxDQUFDO01BQ0YsTUFBTSxPQUFPLDZCQUE2QjtRQUN4QyxNQUFNLFFBQVEsTUFBTTtVQUNsQixhQUFhLEVBQUUsQ0FBQztVQUNoQixVQUFVLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQ3RDLENBQUM7UUFDRixNQUFNLGVBQWUsT0FBTyxDQUFDLFlBQVksT0FBTyxDQUFDO1VBQy9DLE1BQU0sUUFBUSxLQUFLO1VBQ25CLE9BQU8sVUFBVSxDQUFDO1lBQ2hCLFNBQVM7WUFDVCxPQUFPO1lBQ1AsU0FBUztZQUNULE1BQU07WUFDTixNQUFNO1dBQ1AsRUFBRSxRQUFRLEtBQUssQ0FBQyxHQUFHLFFBQVEsS0FBSyxHQUFHLFNBQVM7VUFDN0MsVUFBVSxRQUFRLFlBQVksS0FBSyxJQUFJO1VBQ3ZDLE1BQU0sUUFBUSxLQUFLO1VBQ25CLGFBQWEsUUFBUSxZQUFZO1VBQ2pDLFVBQVUsS0FBSztVQUNmLGNBQWMsZUFBZSxVQUFVLE1BQU07VUFDN0MscUJBQXFCLGVBQWUsVUFBVSxVQUFVO1NBQ3pELENBQUMsQ0FBQyxDQUFDO1FBQ0osTUFBTSxzQkFBc0IsT0FBTyxDQUFDLFVBQVUsT0FBTyxDQUFDO1VBQ3BELEtBQUs7WUFDSCxLQUFLLEtBQUs7WUFDVixTQUFTLENBQUMsNkJBQTZCLENBQUM7V0FDekM7VUFDRCxVQUFVLGVBQWUsUUFBUTtVQUNqQywyQkFBMkIsRUFBRTtVQUM3QixHQUFHLGVBQWUsT0FBTyxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLDRCQUE0QixFQUFFLEVBQUU7U0FDeEYsQ0FBQyxDQUFDLENBQUM7UUFDSixZQUFZLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3RDLElBQUksUUFBUSxDQUFDLFFBQVEsUUFBUSxDQUFDLElBQUksUUFBUSxRQUFRLEdBQUcsQ0FBQyxFQUFFO1VBQ3RELFFBQVEsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU07WUFDdEMsS0FBSyxFQUFFLENBQUM7V0FDVCxFQUFFLFFBQVEsUUFBUSxDQUFDLENBQUM7U0FDdEI7UUFDRCxNQUFNLGFBQWEsTUFBTTtVQUN2QixNQUFNLG1CQUFtQixPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7VUFDL0MsTUFBTSxrQkFBa0IsRUFBRSxtQkFBbUIsWUFBWSxFQUFFLEVBQUUsQ0FBQztVQUM5RCxNQUFNLG1CQUFtQixNQUFNLG9CQUFvQixpQkFBaUIsRUFBRSxDQUFDO1VBQ3ZFLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssZ0JBQWdCLEVBQUU7WUFDNUMsTUFBTSxTQUFTO2NBQ2IsR0FBRyxlQUFlLFFBQVEsT0FBTyxFQUFFO2NBQ25DLFdBQVcsZUFBZTthQUMzQixDQUFDO1lBQ0YsVUFBVSxpQkFBaUIsQ0FBQyxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1dBQzNGLE1BQU07WUFDTCxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE9BQU87Y0FDdEQsTUFBTSx1QkFBdUIsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztjQUMvRCxNQUFNLGFBQWE7Z0JBQ2pCLE1BQU0sTUFBTTtnQkFDWixNQUFNLElBQUksRUFBRTtnQkFDWixNQUFNLFFBQVEsS0FBSyxDQUFDLFlBQVksUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQy9ELFdBQVcsZUFBZTtnQkFDMUIsU0FBUztrQkFDUCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7a0JBQ3RCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQztpQkFDdkI7ZUFDRixDQUFDO2NBQ0YsVUFBVSxpQkFBaUIsQ0FBQyxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsVUFBVSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7YUFDdkcsQ0FBQyxDQUFDO1dBQ0o7U0FDRixDQUFDO1FBQ0YsTUFBTSxtQkFBbUI7VUFDdkIsS0FBSztVQUNMLFVBQVU7VUFDVixNQUFNLFVBQVU7WUFDZCxZQUFZLFdBQVcsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7V0FDL0M7VUFDRCxRQUFRO1VBQ1IsT0FBTyxNQUFNLFlBQVksUUFBUSxJQUFJO1VBQ3JDLGFBQWE7WUFDWCxPQUFPLFdBQVc7Y0FDaEIsWUFBWSxlQUFlLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ3BEO1dBQ0Y7U0FDRixDQUFDO1FBQ0YsT0FBTyxnQkFBZ0IsQ0FBQztPQUN6QixDQUFDO01BQ0YsTUFBTSxRQUFRLGdCQUFnQjtRQUM1QixZQUFZLE1BQU0sRUFBRSxDQUFDO09BQ3RCLENBQUM7TUFDRixNQUFNLFVBQVUsZ0JBQWdCO1FBQzlCLE9BQU8sWUFBWSxTQUFTLENBQUM7T0FDOUIsQ0FBQztNQUNGLE9BQU87UUFDTCxJQUFJO1FBQ0osS0FBSztRQUNMLE9BQU87T0FDUixDQUFDO0tBQ0gsQ0FBQzs7SUFFRixJQUFJLFdBQVcsT0FBTyxLQUFLLE1BQU0sUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUM7O0lBRWxFLElBQUksV0FBVyxPQUFPLEtBQUssTUFBTSxRQUFRLENBQUMsdUJBQXVCLENBQUMsQ0FBQzs7SUFFbkUsSUFBSSxXQUFXLE9BQU8sS0FBSyxNQUFNLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQzs7SUFFekQsSUFBSSxhQUFhLENBQUM7SUFDbEIsQ0FBQyx1QkFBdUI7TUFDdEIsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztNQUNoQyxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsVUFBVSxDQUFDO01BQ3JDLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxTQUFTLENBQUM7TUFDbkMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLFdBQVcsQ0FBQztLQUN4QyxDQUFDLGFBQWEsS0FBSyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUMxQyxJQUFJLGlCQUFpQixDQUFDO0lBQ3RCLENBQUMsMkJBQTJCO01BQzFCLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7TUFDakMsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztNQUMvQixlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0tBQ3RDLENBQUMsaUJBQWlCLEtBQUssb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDbEQsTUFBTSxXQUFXLFFBQVEsVUFBVSxNQUFNLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVELE1BQU0sZUFBZSxNQUFNLFVBQVUsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDL0QsTUFBTSxhQUFhLFVBQVU7TUFDM0IsTUFBTSxVQUFVLFFBQVEsV0FBVyxRQUFRLEVBQUUsQ0FBQztNQUM5QyxNQUFNLFdBQVcsUUFBUSxXQUFXLFNBQVMsRUFBRSxJQUFJLE9BQU8sQ0FBQztNQUMzRCxNQUFNLGlCQUFpQixNQUFNLFFBQVEsU0FBUyxDQUFDO01BQy9DLE1BQU0seUJBQXlCLFNBQVMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUM7TUFDM0UsTUFBTSwwQkFBMEIsU0FBUyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQzVFLGNBQWMsQ0FBQyxNQUFNLEVBQUU7UUFDckIsV0FBVyxTQUFTLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssS0FBSztRQUN0RCxTQUFTLE9BQU87T0FDakIsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLFVBQVUsRUFBRSxFQUFFLFdBQVcsUUFBUSxFQUFFLENBQUMsQ0FBQztNQUNwRCxjQUFjLENBQUMsUUFBUSxFQUFFO1FBQ3ZCLFdBQVcsdUJBQXVCO1FBQ2xDLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxXQUFXLEVBQUUsYUFBYSxFQUFFLEdBQUcsQ0FBQztPQUN6RCxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsT0FBTyxFQUFFO1FBQ3RCLFdBQVcsdUJBQXVCO1FBQ2xDLFNBQVMsUUFBUSxJQUFJLFNBQVMsQ0FBQyxNQUFNLFdBQVcsRUFBRSxFQUFFLE9BQU8sQ0FBQztPQUM3RCxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsWUFBWSxFQUFFO1FBQzNCLFdBQVcsUUFBUTtRQUNuQixTQUFTLEdBQUc7T0FDYixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsV0FBVyxFQUFFLEVBQUUsV0FBVyxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQ3JELGNBQWMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxXQUFXLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDdEQsY0FBYyxDQUFDLFdBQVcsRUFBRSxFQUFFLFdBQVcsUUFBUSxFQUFFLENBQUMsQ0FBQztNQUNyRCxjQUFjLENBQUMsZUFBZSxFQUFFLEVBQUUsV0FBVyxVQUFVLEVBQUUsQ0FBQyxDQUFDO01BQzNELGNBQWMsQ0FBQyxxQkFBcUIsRUFBRTtRQUNwQyxXQUFXLFNBQVM7UUFDcEIsU0FBUyxLQUFLO09BQ2YsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLHdCQUF3QixFQUFFO1FBQ3ZDLFdBQVcsU0FBUztRQUNwQixTQUFTLEtBQUs7T0FDZixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMscUJBQXFCLEVBQUU7UUFDcEMsV0FBVyxRQUFRO1FBQ25CLFNBQVMseUJBQXlCO09BQ25DLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxxQkFBcUIsRUFBRTtRQUNwQyxXQUFXLFFBQVE7UUFDbkIsU0FBUyxvQ0FBb0MsR0FBRyxtQ0FBbUMsR0FBRyxxQ0FBcUMsR0FBRywyQ0FBMkMsR0FBRyx5Q0FBeUMsR0FBRyw0Q0FBNEMsR0FBRyxpQ0FBaUMsR0FBRyx1Q0FBdUMsR0FBRywyQkFBMkIsR0FBRyxnQkFBZ0IsR0FBRywyQ0FBMkMsR0FBRyxxQ0FBcUMsR0FBRyw4Q0FBOEMsR0FBRyw4Q0FBOEMsR0FBRyxvQ0FBb0MsR0FBRyxvQkFBb0IsR0FBRyxtQ0FBbUM7T0FDaHFCLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxtQkFBbUIsRUFBRTtRQUNsQyxXQUFXLFFBQVE7UUFDbkIsU0FBUyxtQ0FBbUM7T0FDN0MsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLDhCQUE4QixFQUFFO1FBQzdDLFdBQVcsUUFBUTtRQUNuQixTQUFTLElBQUk7T0FDZCxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsZUFBZSxFQUFFO1FBQzlCLFdBQVcsUUFBUTtRQUNuQixTQUFTLGNBQWMsR0FBRyxlQUFlLEdBQUcsZUFBZSxHQUFHLGVBQWUsR0FBRyxlQUFlLEdBQUcsZUFBZSxHQUFHLGVBQWUsR0FBRyxrQkFBa0I7T0FDekosQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLGVBQWUsRUFBRSxFQUFFLFdBQVcsVUFBVSxFQUFFLENBQUMsQ0FBQztNQUMzRCxjQUFjLENBQUMsbUJBQW1CLEVBQUU7UUFDbEMsV0FBVyxRQUFRO1FBQ25CLFNBQVMsRUFBRTtPQUNaLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxTQUFTLEVBQUU7UUFDeEIsV0FBVyxTQUFTLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ3ZELFNBQVMsQ0FBQyxPQUFPO09BQ2xCLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxNQUFNLEVBQUU7UUFDckIsV0FBVyxRQUFRO1FBQ25CLFNBQVMsRUFBRTtPQUNaLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxTQUFTLEVBQUU7UUFDeEIsV0FBVyxTQUFTO1VBQ2xCLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDekQsT0FBTztjQUNMLEtBQUs7Y0FDTCxPQUFPLElBQUk7YUFDWixDQUFDO1dBQ0gsTUFBTTtZQUNMLE9BQU87Y0FDTCxPQUFPLEtBQUs7Y0FDWixTQUFTLHFDQUFxQzthQUMvQyxDQUFDO1dBQ0g7U0FDRjtRQUNELFNBQVMsSUFBSTtPQUNkLENBQUMsQ0FBQztNQUNILE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTztRQUNoQixjQUFjLENBQUMsU0FBUyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLFdBQVcsUUFBUSxFQUFFLENBQUMsQ0FBQztPQUNoRSxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsY0FBYyxFQUFFO1FBQzdCLFdBQVcsUUFBUTtRQUNuQixTQUFTLFFBQVEsR0FBRyxXQUFXLEdBQUcsVUFBVTtPQUM3QyxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsZ0JBQWdCLEVBQUU7UUFDL0IsV0FBVyxRQUFRO1FBQ25CLFNBQVMsRUFBRTtPQUNaLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxrQkFBa0IsRUFBRTtRQUNqQyxXQUFXLFFBQVE7UUFDbkIsU0FBUyxpQkFBaUIsS0FBSztPQUNoQyxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsaUJBQWlCLEVBQUU7UUFDaEMsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsS0FBSztPQUNmLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRTtRQUMvQixXQUFXLFNBQVM7UUFDcEIsU0FBUyxNQUFNLE9BQU87T0FDdkIsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLHVCQUF1QixFQUFFO1FBQ3RDLFdBQVcsUUFBUTtRQUNuQixTQUFTLENBQUM7T0FDWCxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMseUJBQXlCLEVBQUU7UUFDeEMsV0FBVyxRQUFRO1FBQ25CLFNBQVMsRUFBRTtPQUNaLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxnQ0FBZ0MsRUFBRSxFQUFFLFdBQVcsUUFBUSxFQUFFLENBQUMsQ0FBQztNQUMxRSxjQUFjLENBQUMsU0FBUyxFQUFFO1FBQ3hCLFdBQVcsUUFBUTtRQUNuQixTQUFTLFVBQVU7T0FDcEIsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsV0FBVyxVQUFVLEVBQUUsQ0FBQyxDQUFDO01BQ2xFLGNBQWMsQ0FBQywrQkFBK0IsRUFBRSxFQUFFLFdBQVcsVUFBVSxFQUFFLENBQUMsQ0FBQztNQUMzRSxjQUFjLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxXQUFXLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDN0QsY0FBYyxDQUFDLGdCQUFnQixFQUFFO1FBQy9CLFdBQVcsU0FBUztRQUNwQixTQUFTLElBQUk7T0FDZCxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsWUFBWSxFQUFFO1FBQzNCLFdBQVcsc0JBQXNCO1FBQ2pDLFNBQVMsTUFBTTtPQUNoQixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsZUFBZSxFQUFFO1FBQzlCLFdBQVcsc0JBQXNCO1FBQ2pDLFNBQVMsU0FBUztPQUNuQixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsaUJBQWlCLEVBQUU7UUFDaEMsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsS0FBSztPQUNmLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxXQUFXLEVBQUU7UUFDMUIsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsSUFBSTtPQUNkLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxhQUFhLEVBQUU7UUFDNUIsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsSUFBSTtPQUNkLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxVQUFVLEVBQUU7UUFDekIsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsSUFBSTtPQUNkLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxXQUFXLEVBQUU7UUFDMUIsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsSUFBSTtPQUNkLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxRQUFRLEVBQUU7UUFDdkIsV0FBVyxTQUFTLEtBQUssS0FBSyxNQUFNLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQztRQUN4RCxTQUFTLENBQUMsUUFBUSxXQUFXLFFBQVEsRUFBRTtPQUN4QyxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsY0FBYyxFQUFFLEVBQUUsV0FBVyxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQ3hELGNBQWMsQ0FBQyxvQkFBb0IsRUFBRTtRQUNuQyxXQUFXLFNBQVM7UUFDcEIsU0FBUyxNQUFNLFVBQVUsQ0FBQyxNQUFNLENBQUM7T0FDbEMsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sYUFBYSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEMsTUFBTSxrQkFBa0IsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLE1BQU0saUJBQWlCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QyxNQUFNLG9CQUFvQixZQUFZLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDOUQsTUFBTSxxQkFBcUIsWUFBWSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sb0JBQW9CLFlBQVksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUM5RCxNQUFNLHFCQUFxQixZQUFZLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDaEUsTUFBTSxzQkFBc0IsWUFBWSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sMEJBQTBCLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sNkJBQTZCLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sc0JBQXNCLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN0RCxNQUFNLHNCQUFzQixRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUMxRCxNQUFNLGlCQUFpQixRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDaEQsTUFBTSxtQkFBbUIsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDcEQsTUFBTSxxQkFBcUIsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDeEQsTUFBTSx5QkFBeUIsUUFBUSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDbkUsTUFBTSw4QkFBOEIsUUFBUSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFDL0UsTUFBTSxtQkFBbUIsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDckQsTUFBTSx5QkFBeUIsUUFBUSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDakUsTUFBTSxhQUFhLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2QyxNQUFNLGFBQWEsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sd0JBQXdCLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sZ0NBQWdDLFFBQVEsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sOEJBQThCLFFBQVEsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQzdFLE1BQU0scUJBQXFCLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sbUJBQW1CLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sZUFBZSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDNUMsTUFBTSxrQkFBa0IsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2xELE1BQU0scUJBQXFCLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sZUFBZSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0MsTUFBTSxpQkFBaUIsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sY0FBYyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDekMsTUFBTSxZQUFZLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQyxNQUFNLGlCQUFpQixRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDakQsTUFBTSxpQkFBaUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sbUJBQW1CLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvQyxNQUFNLHVCQUF1QixRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUM1RCxNQUFNLGlCQUFpQixVQUFVLE1BQU0sUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxDQUFDO0lBQ3RFLE1BQU0sbUJBQW1CLFVBQVUsTUFBTSxRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFLLENBQUM7SUFDM0UsTUFBTSxhQUFhLFVBQVU7TUFDM0IsTUFBTSxVQUFVLE1BQU0sUUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7TUFDL0MsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDMUIsT0FBTyxPQUFPLENBQUM7T0FDaEIsTUFBTTtRQUNMLElBQUksT0FBTyxFQUFFO1VBQ1gsT0FBTyxNQUFNLGdCQUFnQixXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbkQsTUFBTTtVQUNMLE1BQU0sT0FBTyxNQUFNLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1VBQ3hDLE9BQU8sUUFBUSxRQUFRLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQztTQUMvQztPQUNGO0tBQ0YsQ0FBQztJQUNGLE1BQU0sdUJBQXVCLFVBQVUsTUFBTSxRQUFRLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUYsTUFBTSxtQkFBbUIsVUFBVTtNQUNqQyxNQUFNLFVBQVUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ25DLE1BQU0sa0JBQWtCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUMxQyxNQUFNLHVCQUF1QixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxPQUFPLEdBQUcsQ0FBQyxDQUFDO01BQ3BFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxvQkFBb0IsSUFBSSxlQUFlLElBQUksT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDO0tBQ3JHLENBQUM7SUFDRixNQUFNLDRCQUE0QixVQUFVO01BQzFDLE1BQU0sV0FBVyxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sTUFBTSxRQUFRLElBQUksQ0FBQyxTQUFTLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUM5RSxNQUFNLGVBQWUsUUFBUSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztNQUNsRCxPQUFPLE1BQU0sQ0FBQyxZQUFZLE9BQU8sR0FBRyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7S0FDdEQsQ0FBQztJQUNGLE1BQU0scUJBQXFCLFVBQVUseUJBQXlCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNO01BQ2hGLE1BQU0sVUFBVSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDbkMsT0FBTyxTQUFTLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJLE9BQU8sT0FBTyxHQUFHLENBQUMsQ0FBQztLQUMzRCxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ1gsTUFBTSwwQkFBMEIsVUFBVSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxpQkFBaUIsT0FBTyxDQUFDO0lBQ2xHLE1BQU0sdUJBQXVCLFVBQVU7TUFDckMsSUFBSSxFQUFFLENBQUM7TUFDUCxJQUFJLENBQUMsTUFBTSxPQUFPLEVBQUU7UUFDbEIsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCO01BQ0QsTUFBTSxXQUFXLENBQUMsS0FBSyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7TUFDM0YsSUFBSSxRQUFRLE9BQU8sR0FBRyxDQUFDLEVBQUU7UUFDdkIsT0FBTyxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7T0FDckM7TUFDRCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDcEQsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDMUIsT0FBTyxRQUFRLEtBQUssQ0FBQyxZQUFZLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO09BQ3JEO01BQ0QsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO0tBQ3hCLENBQUM7SUFDRixNQUFNLG9CQUFvQixVQUFVLE1BQU0sT0FBTyxJQUFJLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzRixNQUFNLGlCQUFpQixVQUFVO01BQy9CLE1BQU0saUJBQWlCLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3BELE9BQU8sY0FBYyxXQUFXLENBQUMsTUFBTSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsWUFBWSxRQUFRLENBQUMsTUFBTSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3JILENBQUM7SUFDRixNQUFNLG9CQUFvQixVQUFVLE1BQU0sT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNJLE1BQU0sa0JBQWtCLFVBQVU7TUFDaEMsTUFBTSxrQkFBa0IsTUFBTSxRQUFRLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO01BQzdELE9BQU8sQ0FBQyxlQUFlLElBQUksTUFBTSxPQUFPLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3ZHLENBQUM7SUFDRixNQUFNLGdCQUFnQixVQUFVLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxPQUFPLENBQUM7SUFDeEcsTUFBTSxXQUFXLFVBQVU7TUFDekIsTUFBTSxPQUFPLE1BQU0sUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDeEMsT0FBTyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVM7UUFDMUIsR0FBRyxJQUFJO1FBQ1AsT0FBTyxJQUFJLE1BQU07T0FDbEIsQ0FBQyxDQUFDLENBQUM7S0FDTCxDQUFDOztJQUVGLElBQUksdUJBQXVCLE1BQU0sT0FBTyxDQUFDO1FBQ3JDLFdBQVcsSUFBSTtRQUNmLGdCQUFnQixHQUFHLEVBQUUsT0FBTyxhQUFhLENBQUMsRUFBRTtRQUM1QyxvQkFBb0IsR0FBRyxFQUFFLE9BQU8saUJBQWlCLENBQUMsRUFBRTtRQUNwRCxVQUFVLFVBQVU7UUFDcEIsWUFBWSxVQUFVO1FBQ3RCLFlBQVksVUFBVTtRQUN0QixnQkFBZ0IsY0FBYztRQUM5QixpQkFBaUIsZUFBZTtRQUNoQyxnQkFBZ0IsY0FBYztRQUM5QixtQkFBbUIsaUJBQWlCO1FBQ3BDLG9CQUFvQixrQkFBa0I7UUFDdEMsbUJBQW1CLGlCQUFpQjtRQUNwQyxvQkFBb0Isa0JBQWtCO1FBQ3RDLHFCQUFxQixtQkFBbUI7UUFDeEMseUJBQXlCLHVCQUF1QjtRQUNoRCw0QkFBNEIsMEJBQTBCO1FBQ3RELHNCQUFzQixvQkFBb0I7UUFDMUMscUJBQXFCLG1CQUFtQjtRQUN4QyxxQkFBcUIsbUJBQW1CO1FBQ3hDLGtCQUFrQixnQkFBZ0I7UUFDbEMsb0JBQW9CLGtCQUFrQjtRQUN0QyxrQkFBa0IsZ0JBQWdCO1FBQ2xDLGtCQUFrQixnQkFBZ0I7UUFDbEMsMkJBQTJCLHlCQUF5QjtRQUNwRCxnQkFBZ0IsY0FBYztRQUM5QixtQkFBbUIsaUJBQWlCO1FBQ3BDLGVBQWUsYUFBYTtRQUM1QixnQkFBZ0IsY0FBYztRQUM5QixrQkFBa0Isa0JBQWtCO1FBQ3BDLG1CQUFtQixpQkFBaUI7UUFDcEMsaUJBQWlCLGVBQWU7UUFDaEMsd0JBQXdCLHNCQUFzQjtRQUM5QyxvQkFBb0Isa0JBQWtCO1FBQ3RDLHlCQUF5Qix1QkFBdUI7UUFDaEQsa0JBQWtCLGdCQUFnQjtRQUNsQyxVQUFVLFFBQVE7UUFDbEIsWUFBWSxVQUFVO1FBQ3RCLFlBQVksVUFBVTtRQUN0Qix1QkFBdUIscUJBQXFCO1FBQzVDLG9CQUFvQixrQkFBa0I7UUFDdEMsa0JBQWtCLGdCQUFnQjtRQUNsQyxjQUFjLFlBQVk7UUFDMUIsaUJBQWlCLGVBQWU7UUFDaEMsK0JBQStCLDZCQUE2QjtRQUM1RCw2QkFBNkIsMkJBQTJCO1FBQ3hELGNBQWMsWUFBWTtRQUMxQixnQkFBZ0IsY0FBYztRQUM5QixrQkFBa0IsZ0JBQWdCO1FBQ2xDLGFBQWEsV0FBVztRQUN4QixXQUFXLFNBQVM7UUFDcEIsZ0JBQWdCLGNBQWM7UUFDOUIsZ0JBQWdCLGNBQWM7UUFDOUIsc0JBQXNCLG9CQUFvQjtLQUM3QyxDQUFDLENBQUM7O0lBRUgsTUFBTSx1QkFBdUIsMEJBQTBCLENBQUM7SUFDeEQsTUFBTSxXQUFXLE9BQU8sU0FBUyxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQzdELE1BQU0sU0FBUyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUMsQ0FBQzs7SUFFNUQsTUFBTSxVQUFVLGlCQUFpQjtNQUMvQixNQUFNLG9CQUFvQixhQUFhO1FBQ3JDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7T0FDdkMsQ0FBQztNQUNGLE1BQU0sVUFBVSxNQUFNLEdBQUcsUUFBUSxFQUFFLEtBQUssQ0FBQyxZQUFZLGVBQWUsQ0FBQyxDQUFDO01BQ3RFLE1BQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLO1FBQ3hCLE1BQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUN4QixJQUFJLENBQUMsR0FBRyxTQUFTLEVBQUUsRUFBRTtVQUNuQixPQUFPO1NBQ1I7UUFDRCxJQUFJLEdBQUcsV0FBVyxFQUFFLEVBQUU7VUFDcEIsSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFO1lBQ2xCLE9BQU8sRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUIsQ0FBQyxlQUFlLEVBQUUsQ0FBQztXQUNwQixNQUFNLElBQUksT0FBTyxLQUFLLEVBQUUsRUFBRTtZQUN6QixPQUFPLEVBQUUsS0FBSyxDQUFDLE1BQU07Y0FDbkIsR0FBRyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksZUFBZSxDQUFDLENBQUM7YUFDakQsRUFBRSxRQUFRO2NBQ1QsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQzVCLENBQUMsQ0FBQztZQUNILENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbkIsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1dBQzlCLE1BQU0sSUFBSSxPQUFPLEtBQUssRUFBRSxJQUFJLE9BQU8sS0FBSyxFQUFFLElBQUksT0FBTyxLQUFLLEVBQUUsRUFBRTtZQUM3RCxPQUFPLEVBQUUsS0FBSyxDQUFDLFFBQVE7Y0FDckIsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2NBQzNCLENBQUMsZUFBZSxFQUFFLENBQUM7Y0FDbkIsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO2FBQzlCLENBQUMsQ0FBQztXQUNKO1NBQ0YsTUFBTTtVQUNMLElBQUksT0FBTyxLQUFLLEVBQUUsSUFBSSxPQUFPLEtBQUssRUFBRSxJQUFJLE9BQU8sS0FBSyxFQUFFLEVBQUU7WUFDdEQsR0FBRyxrQkFBa0IsRUFBRSxDQUFDO1dBQ3pCO1NBQ0Y7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLEdBQUcsQ0FBQyxZQUFZLEVBQUUsS0FBSztRQUMzQixJQUFJLEdBQUcsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLG1CQUFtQixFQUFFLElBQUksUUFBUSxDQUFDLFlBQVksUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7VUFDckcsR0FBRyxrQkFBa0IsRUFBRSxDQUFDO1NBQ3pCO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sNEJBQTRCLEVBQUUsT0FBTyxPQUFPLEVBQUUsQ0FBQzs7SUFFckQsSUFBSSxZQUFZLENBQUM7SUFDakIsQ0FBQyx3QkFBd0I7TUFDdkIsWUFBWSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO01BQ3hFLFlBQVksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztLQUMzRSxDQUFDLFlBQVksS0FBSyxlQUFlLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDeEMsSUFBSSxpQkFBaUIsWUFBWSxDQUFDOztJQUVsQyxNQUFNLFdBQVcsa0JBQWtCLENBQUM7SUFDcEMsTUFBTSxrQkFBa0Isc0JBQXNCLENBQUM7SUFDL0MsTUFBTSxhQUFhLFlBQVksQ0FBQztJQUNoQyxNQUFNLGdCQUFnQjtNQUNwQixRQUFRLFFBQVE7TUFDaEIsT0FBTyxVQUFVO0tBQ2xCLENBQUM7SUFDRixNQUFNLGNBQWMsK0JBQStCLENBQUM7SUFDcEQsTUFBTSxvQkFBb0IsK0JBQStCLENBQUM7SUFDMUQsTUFBTSxZQUFZLDJCQUEyQixDQUFDO0lBQzlDLE1BQU0sWUFBWSw0QkFBNEIsQ0FBQztJQUMvQyxNQUFNLGlCQUFpQixnQ0FBZ0MsQ0FBQztJQUN4RCxNQUFNLGFBQWEsNEJBQTRCLENBQUM7SUFDaEQsTUFBTSxpQkFBaUIsZ0NBQWdDLENBQUM7SUFDeEQsTUFBTSxjQUFjLDhCQUE4QixDQUFDO0lBQ25ELE1BQU0saUJBQWlCLGdDQUFnQyxDQUFDO0lBQ3hELE1BQU0sdUJBQXVCLHdDQUF3QyxDQUFDO0lBQ3RFLE1BQU0sb0JBQW9CLHFDQUFxQyxDQUFDO0lBQ2hFLE1BQU0sMkJBQTJCLDZDQUE2QyxDQUFDO0lBQy9FLE1BQU0sMEJBQTBCLDRDQUE0QyxDQUFDO0lBQzdFLE1BQU0sMEJBQTBCLDRDQUE0QyxDQUFDO0lBQzdFLE1BQU0sNkJBQTZCLCtDQUErQyxDQUFDO0lBQ25GLE1BQU0sNkJBQTZCLCtDQUErQyxDQUFDO0lBQ25GLE1BQU0saUJBQWlCLFdBQVcsS0FBSyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztJQUVoRixNQUFNLFVBQVUsV0FBVztNQUN6QixJQUFJLE9BQU8sS0FBSyxPQUFPLEVBQUU7UUFDdkIsT0FBTyxjQUFjLENBQUM7T0FDdkIsTUFBTTtRQUNMLE9BQU8sVUFBVSxDQUFDO09BQ25CO0tBQ0YsQ0FBQztJQUNGLE1BQU0sVUFBVSxZQUFZO01BQzFCLGdCQUFnQixxQkFBcUI7TUFDckMsY0FBYyxtQkFBbUI7TUFDakMsY0FBYyw4QkFBOEI7TUFDNUMsVUFBVSxxQkFBcUI7TUFDL0IsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDO01BQ3RCLFlBQVksaUJBQWlCO0tBQzlCLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFVBQVUsV0FBVztNQUN6QixNQUFNLGNBQWMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ3JDLE9BQU87UUFDTCxnQkFBZ0IsV0FBVyxlQUFlO1FBQzFDLGNBQWMsV0FBVyxhQUFhO1FBQ3RDLE1BQU0sV0FBVyxLQUFLO1FBQ3RCLGNBQWMsV0FBVyxhQUFhO1FBQ3RDLE1BQU0sY0FBYyxDQUFDLE9BQU8sQ0FBQztPQUM5QixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sUUFBUSxnQ0FBZ0M7TUFDNUMsTUFBTSxjQUFjLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUNyQyxPQUFPO1FBQ0wsS0FBSyxLQUFLO1FBQ1YsU0FBUyxPQUFPLENBQUM7VUFDZjtZQUNFLFdBQVcsS0FBSztZQUNoQixDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsT0FBTyxDQUFDO1dBQy9CO1VBQ0QsUUFBUSxHQUFHLENBQUMsV0FBVyxTQUFTLENBQUMsR0FBRyxFQUFFO1NBQ3ZDLENBQUM7T0FDSCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sYUFBYSxDQUFDLElBQUksTUFBTSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxNQUFNLE9BQU8sZ0NBQWdDO01BQzNDLE1BQU0sY0FBYyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDckMsTUFBTSxJQUFJO1FBQ1IsS0FBSyxLQUFLO1FBQ1YsU0FBUyxPQUFPLENBQUMsQ0FBQyxDQUFDLFdBQVcsV0FBVyxDQUFDLENBQUMsQ0FBQztPQUM3QyxDQUFDO01BQ0YsT0FBTztRQUNMLEtBQUssQ0FBQztRQUNOLFNBQVMsT0FBTyxDQUFDLE9BQU8sQ0FBQztPQUMxQixDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLFdBQVcsVUFBVSxDQUFDO01BQzFCLFFBQVEsQ0FBQyxNQUFNLENBQUM7TUFDaEIsU0FBUyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztNQUNoQyxTQUFTLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztNQUM1QixTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQztNQUN6QixTQUFTLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztNQUM3QixTQUFTLENBQUMsWUFBWSxDQUFDO01BQ3ZCLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO01BQ3ZCLFNBQVMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO01BQzNCLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtRQUN2QixZQUFZO1FBQ1osUUFBUTtPQUNULENBQUM7TUFDRixTQUFTLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQztLQUNqQyxDQUFDLENBQUM7SUFDSCxNQUFNLGtCQUFrQixVQUFVLFFBQVEsQ0FBQyxDQUFDLFFBQVEsT0FBTyxDQUFDO1FBQ3hELFNBQVMsQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsYUFBYTtVQUNuRCxNQUFNLFFBQVEsU0FBUyxRQUFRLENBQUM7VUFDaEMsTUFBTSxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztVQUMzQixLQUFLLElBQUksa0JBQWtCLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLENBQUM7U0FDOUM7T0FDRixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsTUFBTSxhQUFhLFdBQVc7TUFDNUIsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDO01BQzFCLEdBQUcsT0FBTyxDQUFDLE1BQU0sZ0JBQWdCLEVBQUUsQ0FBQyxZQUFZLE9BQU8sQ0FBQztVQUNwRCxPQUFPO1lBQ0wsTUFBTSxRQUFRO1lBQ2QsR0FBRyxNQUFNLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM5RCxVQUFVLFNBQVM7Y0FDakIsT0FBTyxLQUFLLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQzthQUM3QjtZQUNELFVBQVUsaUJBQWlCO2NBQ3pCLE1BQU0sVUFBVSxLQUFLLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQztjQUNyQyxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7Z0JBQ3BCLEtBQUssQ0FBQyxLQUFLLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztlQUM1QjthQUNGO1dBQ0Y7VUFDRCxZQUFZLE1BQU0sV0FBVztTQUM5QixDQUFDLENBQUMsQ0FBQztLQUNQLENBQUMsQ0FBQztJQUNILE1BQU0sTUFBTSxXQUFXO01BQ3JCLEtBQUssTUFBTSxJQUFJO01BQ2YsWUFBWTtRQUNWLE1BQU0sTUFBTTtRQUNaLEdBQUcsTUFBTSxnQkFBZ0I7T0FDMUI7TUFDRCxRQUFRLE1BQU0sWUFBWTtNQUMxQixTQUFTLE1BQU0sYUFBYTtLQUM3QixDQUFDLENBQUM7O0lBRUgsTUFBTSxZQUFZLG9CQUFvQjtNQUNwQyxLQUFLLE1BQU0sSUFBSTtNQUNmLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQztNQUNoQixZQUFZLEVBQUU7TUFDZCxZQUFZLFVBQVUsQ0FBQyxNQUFNLENBQUM7TUFDOUIsWUFBWSxNQUFNLFdBQVc7S0FDOUIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxRQUFRLE1BQU0sQ0FBQztNQUNuQixNQUFNLE9BQU87TUFDYixjQUFjLFFBQVEsRUFBRTtNQUN4QixTQUFTLFNBQVM7S0FDbkIsQ0FBQyxDQUFDOztJQUVILE1BQU0sc0JBQXNCLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sbUNBQW1DLFVBQVUsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDOztJQUV0RixNQUFNLG9CQUFvQixvQkFBb0IsQ0FBQztJQUMvQyxNQUFNLG9CQUFvQixlQUFlO01BQ3ZDLE9BQU8sVUFBVSxDQUFDLFdBQVcsUUFBUSxFQUFFLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxXQUFXLFVBQVUsRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7S0FDL0ksQ0FBQztJQUNGLE1BQU0saUJBQWlCLGlCQUFpQixDQUFDO0lBQ3pDLE1BQU0sZUFBZSw4QkFBOEI7TUFDakQsWUFBWSxTQUFTLENBQUMsU0FBUyxFQUFFLGFBQWEsYUFBYSxDQUFDLENBQUM7TUFDN0QsU0FBUyxRQUFRLElBQUksZUFBZSxHQUFHLGFBQWEsZUFBZSxDQUFDO01BQ3BFLFNBQVMsUUFBUSxJQUFJLGFBQWEsR0FBRyxhQUFhLGFBQWEsQ0FBQztLQUNqRSxDQUFDO0lBQ0YsTUFBTSxZQUFZLGFBQWE7TUFDN0IsTUFBTSxlQUFlLFlBQVksU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQ3RELE1BQU0saUJBQWlCLFNBQVMsUUFBUSxJQUFJLGVBQWUsQ0FBQztNQUM1RCxNQUFNLGVBQWUsU0FBUyxRQUFRLElBQUksYUFBYSxDQUFDO01BQ3hELE9BQU87UUFDTCxZQUFZO1FBQ1osY0FBYztRQUNkLFlBQVk7T0FDYixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLHVCQUF1QjtNQUNqRCxNQUFNLENBQUMsTUFBTSxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxTQUFTLFFBQVEsRUFBRSx1QkFBdUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ2hHLENBQUM7SUFDRixNQUFNLHFCQUFxQixRQUFRO01BQ2pDLE1BQU0sa0JBQWtCLGNBQWM7UUFDcEMsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNULE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN4QixDQUFDO01BQ0YsTUFBTSwwQkFBMEIsY0FBYztRQUM1QyxNQUFNLFlBQVk7VUFDaEIsa0JBQWtCLEVBQUUsTUFBTTtVQUMxQixXQUFXLEVBQUUsTUFBTSxJQUFJLEtBQUs7U0FDN0IsQ0FBQztRQUNGLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZ0NBQWdDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDNUQsT0FBTyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUM1QixDQUFDO01BQ0YsTUFBTSwyQkFBMkIsaUJBQWlCLENBQUM7TUFDbkQsT0FBTztRQUNMLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMsZUFBZSxDQUFDO1NBQzNCO1FBQ0QsWUFBWSxDQUFDLEtBQUssT0FBTyxDQUFDO1lBQ3RCLGNBQWM7Y0FDWixpQkFBaUI7Y0FDakIsZUFBZTthQUNoQjtZQUNELGlCQUFpQjtjQUNmLEdBQUcsSUFBSSxZQUFZLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxhQUFhLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2NBQzNGLFFBQVEsUUFBUTtjQUNoQixxQkFBcUIsTUFBTTthQUM1QjtZQUNELGlCQUFpQixRQUFRLENBQUM7Y0FDeEIsTUFBTSxDQUFDLHdCQUF3QixFQUFFO2dCQUMvQixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsYUFBYTtrQkFDMUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO2lCQUN0QyxDQUFDO2dCQUNGLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxtQkFBbUI7a0JBQ2xDLElBQUksRUFBRSxNQUFNLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtvQkFDakMsRUFBRSxLQUFLLEVBQUUsQ0FBQzttQkFDWDtpQkFDRixDQUFDO2VBQ0gsQ0FBQztjQUNGLE1BQU0sT0FBTyxDQUFDO2dCQUNaLE1BQU0sU0FBUztnQkFDZixRQUFRLGVBQWU7Z0JBQ3ZCLFNBQVMsZUFBZTtnQkFDeEIsU0FBUyxlQUFlO2dCQUN4QixTQUFTLHVCQUF1QjtnQkFDaEMsVUFBVSx1QkFBdUI7Z0JBQ2pDLE1BQU0sdUJBQXVCO2dCQUM3QixRQUFRLHVCQUF1QjtlQUNoQyxDQUFDO2FBQ0gsQ0FBQztZQUNGLFlBQVk7Y0FDVixTQUFTO2dCQUNQLHdCQUF3QjtnQkFDeEIsTUFBTSxLQUFLLEVBQUU7ZUFDZDthQUNGO1dBQ0YsQ0FBQyxDQUFDO09BQ04sQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxxQkFBcUIsNkJBQTZCLENBQUM7SUFDekQsTUFBTSxrQkFBa0IsUUFBUTtNQUM5QixJQUFJLEVBQUUsQ0FBQztNQUNQLElBQUksSUFBSSxJQUFJLEVBQUU7UUFDWixPQUFPO1VBQ0wsR0FBRyxJQUFJO1VBQ1AsS0FBSztZQUNILEdBQUcsSUFBSSxJQUFJO1lBQ1gsWUFBWTtjQUNWLEdBQUcsQ0FBQyxLQUFLLElBQUksSUFBSSxXQUFXLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtjQUNqRSxNQUFNLFVBQVUsQ0FBQyw0QkFBNEIsQ0FBQztjQUM5QyxpQkFBaUIsT0FBTzthQUN6QjtXQUNGO1NBQ0YsQ0FBQztPQUNILE1BQU07UUFDTCxPQUFPLElBQUksQ0FBQztPQUNiO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLFFBQVEsd0JBQXdCLFNBQVM7TUFDN0MsTUFBTSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7TUFDMUMsT0FBTyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU07UUFDekIsS0FBSyxNQUFNO1FBQ1gsWUFBWSxDQUFDO09BQ2QsQ0FBQyxDQUFDLENBQUM7S0FDTCxDQUFDO0lBQ0YsTUFBTSxZQUFZLFlBQVk7TUFDNUIsS0FBSztRQUNILEtBQUssS0FBSztRQUNWLFNBQVM7VUFDUCxVQUFVO1VBQ1YsbUJBQW1CO1NBQ3BCO09BQ0Y7TUFDRCxZQUFZLENBQUM7VUFDVCxLQUFLO1lBQ0gsS0FBSyxLQUFLO1lBQ1YsU0FBUyxDQUFDLGNBQWMsQ0FBQztXQUMxQjtVQUNELFlBQVksQ0FBQyxJQUFJLE1BQU0sTUFBTSxDQUFDO2NBQzFCLFlBQVksT0FBTyxLQUFLLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3JDLEtBQUssS0FBSztnQkFDVixTQUFTLENBQUMsbUJBQW1CLENBQUM7ZUFDL0IsRUFBRSxPQUFPLENBQUMsR0FBRyxRQUFRO2FBQ3ZCLENBQUMsQ0FBQztTQUNOLENBQUM7S0FDTCxDQUFDLENBQUM7SUFDSCxNQUFNLGFBQWEsWUFBWTtNQUM3QixLQUFLO1FBQ0gsS0FBSyxLQUFLO1FBQ1YsU0FBUztVQUNQLFVBQVU7VUFDVixnQkFBZ0I7VUFDaEIseUJBQXlCO1VBQ3pCLDRCQUE0QjtTQUM3QjtPQUNGO01BQ0QsWUFBWSxDQUFDLElBQUksTUFBTSxNQUFNLENBQUM7VUFDMUIsWUFBWSxLQUFLLENBQUM7WUFDaEIsS0FBSyxLQUFLO1lBQ1YsU0FBUyxDQUFDLHVCQUF1QixDQUFDO1dBQ25DLEVBQUUsT0FBTyxDQUFDO1NBQ1osQ0FBQyxDQUFDO0tBQ04sQ0FBQyxDQUFDO0lBQ0gsTUFBTSx1QkFBdUIsd0JBQXdCO01BQ25ELE1BQU0sWUFBWSxFQUFFLENBQUM7TUFDckIsSUFBSSxlQUFlLEVBQUUsQ0FBQztNQUN0QixNQUFNLENBQUMsS0FBSyxFQUFFLGFBQWE7UUFDekIsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFO1VBQ3hCLElBQUksWUFBWSxPQUFPLEdBQUcsQ0FBQyxFQUFFO1lBQzNCLFNBQVMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1dBQzlCO1VBQ0QsZUFBZSxFQUFFLENBQUM7VUFDbEIsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUksSUFBSSxXQUFXLElBQUksSUFBSSxXQUFXLE9BQU8sR0FBRyxDQUFDLEVBQUU7WUFDakYsWUFBWSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDekI7U0FDRixNQUFNO1VBQ0wsWUFBWSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekI7T0FDRixDQUFDLENBQUM7TUFDSCxJQUFJLFlBQVksT0FBTyxHQUFHLENBQUMsRUFBRTtRQUMzQixTQUFTLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztPQUM5QjtNQUNELE9BQU8sS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNO1FBQzVCLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMsdUJBQXVCLENBQUM7U0FDbkM7UUFDRCxZQUFZLENBQUM7T0FDZCxDQUFDLENBQUMsQ0FBQztLQUNMLENBQUM7SUFDRixNQUFNLHlCQUF5QixnQ0FBZ0M7TUFDN0QsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO1FBQ3RCLFlBQVksWUFBWTtVQUN0QixNQUFNLGdCQUFnQixLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1VBQzlDLElBQUksT0FBTyxLQUFLLE1BQU0sSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLE9BQU8sS0FBSyxDQUFDO2NBQ1gsS0FBSyxLQUFLO2NBQ1YsU0FBUyxDQUFDLHVCQUF1QixDQUFDO2FBQ25DLEVBQUUsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7V0FDNUIsTUFBTTtZQUNMLE9BQU8sb0JBQW9CLENBQUMsYUFBYSxFQUFFLGNBQWMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLENBQUM7V0FDN0Y7U0FDRjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGdCQUFnQixxQkFBcUIsWUFBWSxJQUFJLE1BQU07TUFDL0QsS0FBSztRQUNILEtBQUssS0FBSztRQUNWLFNBQVM7VUFDUCxVQUFVO1VBQ1YsZ0JBQWdCO1NBQ2pCLE9BQU8sQ0FBQyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7T0FDOUU7TUFDRCxZQUFZLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztLQUNuRSxDQUFDLENBQUM7SUFDSCxNQUFNLGlDQUFpQyxxQkFBcUIsWUFBWSxJQUFJLEtBQUs7TUFDL0UsTUFBTSw0QkFBNEIsVUFBVSxDQUFDLDhCQUE4QixDQUFDLENBQUM7TUFDN0UsT0FBTztRQUNMLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTO1lBQ1AsVUFBVTtZQUNWLGdCQUFnQjtZQUNoQixrQkFBa0I7V0FDbkIsT0FBTyxDQUFDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztVQUM3RSxZQUFZLEVBQUUsSUFBSSx5QkFBeUIsRUFBRTtTQUM5QztRQUNELFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO09BQzFFLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSwrQkFBK0IscUNBQXFDO01BQ3hFLE1BQU0sNEJBQTRCLFVBQVUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO01BQzdFLE9BQU87UUFDTCxLQUFLO1VBQ0gsS0FBSyxLQUFLO1VBQ1YsU0FBUztZQUNQLFVBQVU7WUFDVixnQkFBZ0I7V0FDakIsT0FBTyxDQUFDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztTQUM5RTtRQUNELFlBQVk7VUFDVixrQkFBa0IsQ0FBQztZQUNqQixNQUFNLFFBQVEsVUFBVTtZQUN4QixhQUFhLFdBQVcsWUFBWTtXQUNyQyxDQUFDO1VBQ0Y7WUFDRSxLQUFLO2NBQ0gsS0FBSyxLQUFLO2NBQ1YsU0FBUztnQkFDUCxHQUFHLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUM7Z0JBQ3RFLGtCQUFrQjtlQUNuQjtjQUNELFlBQVksRUFBRSxJQUFJLHlCQUF5QixFQUFFO2FBQzlDO1lBQ0QsWUFBWSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7V0FDMUU7U0FDRjtPQUNGLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSwwQkFBMEIsWUFBWSxZQUFZLElBQUksTUFBTTtNQUNoRSxLQUFLO1FBQ0gsS0FBSyxLQUFLO1FBQ1YsU0FBUztVQUNQLGdCQUFnQjtVQUNoQiw0QkFBNEI7U0FDN0I7T0FDRjtNQUNELFlBQVksQ0FBQyxJQUFJLE1BQU0sTUFBTSxDQUFDLEVBQUUsWUFBWSxTQUFTLG9CQUFvQixDQUFDLEtBQUssRUFBRSxjQUFjLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUN0SSxDQUFDLENBQUM7O0lBRUgsTUFBTSxlQUFlLE1BQU0sTUFBTSxDQUFDLEVBQUUsRUFBRSxRQUFRLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDekYsTUFBTSxjQUFjLFNBQVM7TUFDM0IsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7TUFDbEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDbkIsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO0tBQ3hCLENBQUM7SUFDRixNQUFNLDRDQUE0QyxvREFBb0Q7TUFDcEcsTUFBTSxZQUFZLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO01BQ2pELE9BQU87UUFDTCxLQUFLO1FBQ0wsS0FBSyxTQUFTLElBQUk7UUFDbEIsWUFBWSxTQUFTLFdBQVc7UUFDaEMsS0FBSztPQUNOLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxrQ0FBa0MsaURBQWlEO01BQ3ZGLE1BQU0scUJBQXFCLE1BQU07UUFDL0IsSUFBSSxVQUFVLFNBQVMsS0FBSyxZQUFZLEVBQUU7VUFDeEMsT0FBTyxhQUFhLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3RDLE1BQU07VUFDTCxPQUFPLFVBQVUsV0FBVyxXQUFXLEtBQUssbUJBQW1CLEdBQUcsNEJBQTRCLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLFdBQVcsQ0FBQyxHQUFHLDhCQUE4QixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN4TDtPQUNGLENBQUM7TUFDRixJQUFJLFVBQVUsU0FBUyxLQUFLLE9BQU8sRUFBRTtRQUNuQyxNQUFNLFlBQVksU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLE9BQU87VUFDTCxLQUFLO1VBQ0wsS0FBSyxTQUFTLElBQUk7VUFDbEIsWUFBWSxTQUFTLFdBQVc7VUFDaEMsS0FBSztTQUNOLENBQUM7T0FDSCxNQUFNLElBQUksVUFBVSxTQUFTLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUU7UUFDakUsTUFBTSxZQUFZLGFBQWEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEQsT0FBTztVQUNMLEtBQUs7VUFDTCxLQUFLLFNBQVMsSUFBSTtVQUNsQixZQUFZLFNBQVMsV0FBVztVQUNoQyxLQUFLO1NBQ04sQ0FBQztPQUNILE1BQU0sSUFBSSxVQUFVLFNBQVMsS0FBSyxRQUFRLElBQUksVUFBVSxTQUFTLEtBQUssWUFBWSxFQUFFO1FBQ25GLE1BQU0sWUFBWSxrQkFBa0IsRUFBRSxDQUFDO1FBQ3ZDLE9BQU87VUFDTCxLQUFLO1VBQ0wsS0FBSyxTQUFTLElBQUk7VUFDbEIsWUFBWSxTQUFTLFdBQVc7VUFDaEMsS0FBSztTQUNOLENBQUM7T0FDSCxNQUFNLElBQUksVUFBVSxTQUFTLEtBQUssYUFBYSxJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUU7UUFDdEUsTUFBTSxZQUFZLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxPQUFPO1VBQ0wsS0FBSztVQUNMLEtBQUssU0FBUyxJQUFJO1VBQ2xCLFlBQVksU0FBUyxXQUFXO1VBQ2hDLEtBQUs7U0FDTixDQUFDO09BQ0gsTUFBTTtRQUNMLE9BQU87VUFDTCxLQUFLO1VBQ0wsS0FBSyxLQUFLLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLFNBQVMsQ0FBQztVQUNsRCxZQUFZLFVBQVU7VUFDdEIsS0FBSztTQUNOLENBQUM7T0FDSDtLQUNGLENBQUM7O0lBRUYsTUFBTSxPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxNQUFNLFNBQVMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sUUFBUSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsTUFBTSxTQUFTLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxNQUFNLFFBQVEsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsTUFBTSxVQUFVLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUMsTUFBTSxrQkFBa0IsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUM1RCxNQUFNLFdBQVcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUMsTUFBTSxlQUFlLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUN6RCxNQUFNLGVBQWUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLE1BQU0sZUFBZSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUMsTUFBTSxlQUFlLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxNQUFNLGtCQUFrQixZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEQsTUFBTSxnQkFBZ0IsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLE1BQU0sbUJBQW1CLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNsRCxNQUFNLGlCQUFpQixjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsTUFBTSxTQUFTLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRCxNQUFNLGFBQWEsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuRCxNQUFNLG1CQUFtQixPQUFPLFNBQVMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUQsTUFBTSxnQkFBZ0IsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1QyxNQUFNLG9CQUFvQixpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUQsTUFBTSxnQkFBZ0IsUUFBUSxlQUFlLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVELE1BQU0sZ0JBQWdCLGNBQWMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU0sVUFBVSxDQUFDLENBQUMsR0FBRyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlILE1BQU0saUJBQWlCLGVBQWUsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxDQUFDLE1BQU0sVUFBVSxDQUFDLENBQUMsR0FBRyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7O0lBRXhJLE1BQU0sMEJBQTBCLEtBQUssQ0FBQztNQUNwQyxJQUFJO01BQ0osWUFBWTtLQUNiLENBQUMsQ0FBQztJQUNILE1BQU0sMEJBQTBCLFFBQVEsS0FBSyxDQUFDLG1CQUFtQixFQUFFLHVCQUF1QixFQUFFLElBQUksQ0FBQyxDQUFDOztJQUVsRyxNQUFNLDBCQUEwQixLQUFLLENBQUM7TUFDcEMsYUFBYSxDQUFDLGtCQUFrQixDQUFDO01BQ2pDLE1BQU07TUFDTixPQUFPO01BQ1AsYUFBYTtNQUNiLE9BQU87TUFDUCxZQUFZO01BQ1osWUFBWTtLQUNiLENBQUMsQ0FBQztJQUNILE1BQU0sc0JBQXNCLFFBQVEsS0FBSyxDQUFDLHlCQUF5QixFQUFFLHVCQUF1QixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BHLE1BQU0sMEJBQTBCLFFBQVEsS0FBSyxDQUFDLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLElBQUksQ0FBQyxDQUFDOztJQUVuRyxNQUFNLDBCQUEwQjtNQUM5QixPQUFPO01BQ1AsZUFBZTtNQUNmLFlBQVk7TUFDWixZQUFZO01BQ1osT0FBTztLQUNSLENBQUM7SUFDRixNQUFNLHNCQUFzQixLQUFLLENBQUM7TUFDaEMsSUFBSTtNQUNKLFFBQVE7S0FDVCxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO0lBQ25DLE1BQU0sc0JBQXNCLFFBQVEsS0FBSyxDQUFDLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQzs7SUFFdEYsTUFBTSxnQ0FBZ0MsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDL0UsTUFBTSxxQkFBcUIsS0FBSyxDQUFDLDZCQUE2QixPQUFPLENBQUM7TUFDcEUsSUFBSTtNQUNKLFFBQVE7S0FDVCxDQUFDLENBQUMsQ0FBQztJQUNKLE1BQU0scUJBQXFCLFFBQVEsS0FBSyxDQUFDLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQzs7SUFFbkYsTUFBTSxtQkFBbUI7TUFDdkIsaUJBQWlCLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQztNQUNyQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFO1FBQ25DLE1BQU07UUFDTixRQUFRO09BQ1QsQ0FBQztNQUNGLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUU7UUFDM0MsTUFBTTtRQUNOLFdBQVc7UUFDWCxNQUFNO09BQ1AsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxzQkFBc0IsdUJBQXVCLE9BQU8sQ0FBQztNQUN6RCxhQUFhLENBQUMsbUJBQW1CLENBQUM7TUFDbEMsT0FBTztNQUNQLFFBQVE7TUFDUixXQUFXLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQztLQUNsQyxDQUFDLENBQUM7SUFDSCxNQUFNLDRCQUE0Qiw2QkFBNkIsT0FBTyxDQUFDO01BQ3JFLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQztNQUNsQyxPQUFPO01BQ1AsUUFBUTtNQUNSLFdBQVcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDO0tBQ2xDLENBQUMsQ0FBQztJQUNILE1BQU0scUJBQXFCLHVCQUF1QixPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEcsTUFBTSwyQkFBMkIsNkJBQTZCLE9BQU8sQ0FBQyxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsSCxNQUFNLGlCQUFpQixRQUFRLENBQUMsTUFBTSxFQUFFO01BQ3RDLG1CQUFtQixtQkFBbUI7TUFDdEMseUJBQXlCLHlCQUF5QjtLQUNuRCxDQUFDLENBQUM7SUFDSCxNQUFNLG9CQUFvQixLQUFLLENBQUM7TUFDOUIsYUFBYSxDQUFDLGFBQWEsQ0FBQztNQUM1QixpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQzlDLGFBQWE7TUFDYixlQUFlLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQztNQUMzQyxRQUFRLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUU7UUFDbEMsbUJBQW1CLGtCQUFrQjtRQUNyQyx5QkFBeUIsd0JBQXdCO09BQ2xELENBQUMsQ0FBQztLQUNKLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDNUIsTUFBTSxvQkFBb0IsUUFBUSxLQUFLLENBQUMsYUFBYSxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDOztJQUVoRixNQUFNLHVCQUF1QixLQUFLLENBQUM7TUFDakMsYUFBYSxDQUFDLGdCQUFnQixDQUFDO01BQy9CLGNBQWMsQ0FBQyxPQUFPLENBQUM7S0FDeEIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUM1QixNQUFNLHVCQUF1QixRQUFRLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQzs7SUFFekYsTUFBTSxrQkFBa0I7TUFDdEIsSUFBSTtNQUNKLGNBQWMsQ0FBQyxLQUFLLENBQUM7TUFDckIsWUFBWSxDQUFDLEtBQUssQ0FBQztNQUNuQixnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQztLQUN4QyxDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDOztJQUUvQyxNQUFNLGlCQUFpQjtNQUNyQixJQUFJO01BQ0osTUFBTTtNQUNOLFlBQVk7TUFDWixnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztLQUNwRSxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDOztJQUU3QyxNQUFNLGVBQWUsVUFBVSxDQUFDLE1BQU0sUUFBUSxDQUFDLE1BQU0sRUFBRTtNQUNyRCxXQUFXLGVBQWU7TUFDMUIsVUFBVSxjQUFjO01BQ3hCLGVBQWUsbUJBQW1CO0tBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ0osTUFBTSxzQkFBc0IsS0FBSyxDQUFDO01BQ2hDLElBQUk7TUFDSixlQUFlLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQztNQUMxQyxlQUFlLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQztNQUNoQyxlQUFlLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQztNQUNuQyxlQUFlLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQztLQUN2QyxDQUFDLENBQUM7O0lBRUgsTUFBTSx1QkFBdUI7TUFDM0IsT0FBTztNQUNQLFlBQVk7TUFDWixnQkFBZ0I7TUFDaEIsY0FBYyxDQUFDLFVBQVUsQ0FBQztNQUMxQixhQUFhO0tBQ2QsQ0FBQzs7SUFFRixNQUFNLHFCQUFxQixLQUFLLENBQUM7TUFDL0IsSUFBSTtNQUNKLGFBQWE7TUFDYixlQUFlLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQztNQUN0QyxPQUFPO01BQ1AsaUJBQWlCO0tBQ2xCLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7SUFDaEMsTUFBTSxxQkFBcUIsUUFBUSxLQUFLLENBQUMsY0FBYyxFQUFFLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDOztJQUVuRixNQUFNLHVCQUF1QixLQUFLLENBQUM7TUFDakMsSUFBSTtNQUNKLE1BQU07TUFDTixZQUFZO0tBQ2IsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztJQUNoQyxNQUFNLHVCQUF1QixRQUFRLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQzs7SUFFekYsTUFBTSxhQUFhO01BQ2pCLElBQUk7TUFDSixjQUFjLENBQUMsV0FBVyxDQUFDO01BQzNCLGlCQUFpQjtLQUNsQixDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6RSxNQUFNLG9CQUFvQjtNQUN4QixjQUFjLENBQUMsUUFBUSxDQUFDO01BQ3hCLGNBQWMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFO1FBQzdCLGdCQUFnQixDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQztRQUMzQyxlQUFlLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQztRQUN4QyxhQUFhLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDO09BQ3BDLENBQUM7S0FDSCxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckIsTUFBTSxzQkFBc0IsUUFBUSxDQUFDLFdBQVcsRUFBRTtNQUNoRCxhQUFhLGlCQUFpQjtNQUM5QixhQUFhLGlCQUFpQjtLQUMvQixDQUFDLENBQUM7SUFDSCxNQUFNLHNCQUFzQixRQUFRLEtBQUssQ0FBQyxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLENBQUM7O0lBRXRGLE1BQU0saUJBQWlCLEtBQUssQ0FBQztNQUMzQixJQUFJO01BQ0osT0FBTztNQUNQLGlCQUFpQjtNQUNqQixZQUFZO0tBQ2IsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztJQUNoQyxNQUFNLGlCQUFpQixRQUFRLEtBQUssQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDOztJQUV2RSxNQUFNLHVCQUF1QixLQUFLLENBQUM7TUFDakMsSUFBSTtNQUNKLGVBQWU7TUFDZixPQUFPO01BQ1AsWUFBWTtLQUNiLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7SUFDaEMsTUFBTSx1QkFBdUIsUUFBUSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUM7O0lBRXpGLE1BQU0sdUJBQXVCLEtBQUssQ0FBQztNQUNqQyxJQUFJO01BQ0osWUFBWTtNQUNaLE1BQU07TUFDTixPQUFPO01BQ1AsUUFBUTtLQUNULE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7SUFDaEMsTUFBTSx1QkFBdUIsUUFBUSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUM7O0lBRXpGLE1BQU0sYUFBYSxpQ0FBaUM7TUFDbEQsTUFBTSxnQkFBZ0IsV0FBVyxDQUFDLElBQUksUUFBUSxFQUFFLEdBQUcsR0FBRyxhQUFhLENBQUMsQ0FBQztNQUNyRSxJQUFJLGFBQWEsT0FBTyxHQUFHLENBQUMsRUFBRTtRQUM1QixNQUFNLGVBQWUsV0FBVyxDQUFDLGFBQWEsRUFBRSxLQUFLO1VBQ25ELE1BQU0sVUFBVSxDQUFDLElBQUksc0JBQXNCLEVBQUUsSUFBSSxDQUFDO1VBQ2xELE1BQU0sT0FBTyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksc0JBQXNCLEVBQUUsSUFBSSxDQUFDO1VBQzlELE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztTQUMxQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLE9BQU8sUUFBUSxLQUFLLENBQUM7VUFDbkIsWUFBWSxZQUFZO1VBQ3hCLFNBQVMsSUFBSSxLQUFLLENBQUMsYUFBYSxPQUFPLEdBQUcsWUFBWSxDQUFDO1NBQ3hELENBQUMsQ0FBQztPQUNKLE1BQU07UUFDTCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEI7S0FDRixDQUFDOztJQUVGLE1BQU0sY0FBYyxvQkFBb0IsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0UsTUFBTSxnQkFBZ0IsWUFBWSxXQUFXLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdEYsTUFBTSxtQkFBbUI7TUFDdkIsV0FBVztNQUNYLGFBQWE7S0FDZCxDQUFDOztJQUVGLE1BQU0scUJBQXFCLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzNELE1BQU0sbUJBQW1CLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNwRCxNQUFNLG1CQUFtQixVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7O0lBRXBELE1BQU0sbUJBQW1CLGtDQUFrQztNQUN6RCxTQUFTLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQzdELENBQUM7SUFDRixNQUFNLGdCQUFnQix1Q0FBdUM7TUFDM0QsTUFBTSxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7UUFDbEMsSUFBSSxPQUFPLFVBQVUsRUFBRSxZQUFZLEVBQUUsRUFBRTtVQUNyQyxTQUFTLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDL0I7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLElBQUksK0JBQStCLE1BQU0sT0FBTyxDQUFDO1FBQzdDLFdBQVcsSUFBSTtRQUNmLGtCQUFrQixnQkFBZ0I7UUFDbEMsZUFBZSxhQUFhO0tBQy9CLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFdBQVcsMEJBQTBCO01BQ3pDLE1BQU0sT0FBTyxRQUFRO1FBQ25CLEtBQUssV0FBVyxFQUFFLEtBQUssQ0FBQyxLQUFLO1VBQzNCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUNWLGFBQWEsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztVQUM5QixLQUFLLGFBQWEsRUFBRSxDQUFDO1NBQ3RCLENBQUMsQ0FBQztRQUNILEtBQUssV0FBVyxFQUFFLENBQUM7T0FDcEIsQ0FBQztNQUNGLE1BQU0sT0FBTyxRQUFRO1FBQ25CLElBQUksQ0FBQyxLQUFLLFVBQVUsRUFBRSxFQUFFO1VBQ3RCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1VBQ3ZCLE1BQU0sT0FBTyxhQUFhLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7VUFDckQsTUFBTSxRQUFRLElBQUksVUFBVSxFQUFFLE1BQU0sQ0FBQztZQUNuQyxLQUFLLGFBQWEsV0FBVztZQUM3QixZQUFZLGFBQWEsa0JBQWtCO1lBQzNDLFFBQVEsUUFBUSxDQUFDLGFBQWEsS0FBSyxLQUFLLFFBQVEsR0FBRztjQUNqRCxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsS0FBSztnQkFDdEIsSUFBSSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2VBQzlCLENBQUM7Y0FDRixLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSztnQkFDckIsSUFBSSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2VBQzlCLENBQUM7YUFDSCxHQUFHLEVBQUUsQ0FBQztZQUNQLFlBQVksUUFBUSxDQUFDLENBQUMsU0FBUyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztXQUM3QyxDQUFDLENBQUM7VUFDSCxLQUFLLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztVQUN4QixNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1VBQ3BCLGFBQWEsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztVQUNsQyxXQUFXLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFBUSxhQUFhLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDM0U7T0FDRixDQUFDO01BQ0YsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQ3RCO1VBQ0UsS0FBSyxDQUFDLGdCQUFnQixFQUFFLFFBQVE7WUFDOUIsS0FBSyxXQUFXLENBQUMsTUFBTTtjQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDWixFQUFFLGFBQWEsTUFBTSxDQUFDLENBQUM7V0FDekIsQ0FBQztVQUNGLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRO1lBQzlCLEtBQUssV0FBVyxDQUFDLE1BQU07Y0FDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ1osRUFBRSxhQUFhLE1BQU0sQ0FBQyxDQUFDO1dBQ3pCLENBQUM7VUFDRixLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsbUJBQW1CO1lBQ2xDLE1BQU0sZ0JBQWdCLE9BQU8sQ0FBQztZQUM5QixJQUFJLENBQUMsYUFBYSxVQUFVLEVBQUU7Y0FDNUIsSUFBSSxVQUFVLENBQUMsYUFBYSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsRUFBRTtnQkFDMUQsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2VBQ1o7YUFDRjtXQUNGLENBQUM7VUFDRixhQUFhLENBQUMsUUFBUTtZQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDWixDQUFDO1NBQ0g7UUFDRCxhQUFhLEtBQUssS0FBSyxRQUFRLEdBQUc7VUFDaEMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLFFBQVE7WUFDdkIsSUFBSSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1dBQzlCLENBQUM7VUFDRixLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUTtZQUN4QixJQUFJLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7V0FDOUIsQ0FBQztVQUNGLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxRQUFRO1lBQ3pCLElBQUksQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztXQUM5QixDQUFDO1VBQ0YsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVE7WUFDeEIsSUFBSSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1dBQzlCLENBQUM7U0FDSCxHQUFHO1VBQ0YsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLGVBQWU7WUFDbEMsSUFBSSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1dBQzlCLENBQUM7VUFDRixLQUFLLENBQUMsYUFBYSxFQUFFLEVBQUUsUUFBUTtZQUM3QixJQUFJLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7V0FDOUIsQ0FBQztTQUNIO09BQ0YsQ0FBQyxDQUFDLENBQUM7S0FDTCxDQUFDOztJQUVGLElBQUksaUNBQWlDLE1BQU0sT0FBTyxDQUFDO1FBQy9DLFdBQVcsSUFBSTtRQUNmLFFBQVEsUUFBUTtLQUNuQixDQUFDLENBQUM7O0lBRUgsSUFBSSxvQkFBb0I7TUFDdEIsVUFBVSxDQUFDLFVBQVUsQ0FBQztNQUN0QixVQUFVLENBQUMsWUFBWSxDQUFDO01BQ3hCLFNBQVMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDO01BQzVCLFNBQVMsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUM7TUFDbEMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUM7TUFDdkIsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRTtRQUNwQyxRQUFRO1FBQ1Isa0JBQWtCO09BQ25CLENBQUM7TUFDRixTQUFTLENBQUMsUUFBUSxFQUFFLFNBQVM7UUFDM0IsTUFBTSxTQUFTO1FBQ2YsU0FBUyxJQUFJO1FBQ2IsU0FBUztVQUNQLE9BQU8sVUFBVSxDQUFDO1lBQ2hCLE9BQU87WUFDUCxPQUFPO1lBQ1AsV0FBVztZQUNYLFdBQVc7WUFDWCxXQUFXO1lBQ1gsV0FBVztXQUNaLENBQUM7VUFDRixPQUFPLFVBQVUsQ0FBQztZQUNoQixPQUFPO1lBQ1AsT0FBTztZQUNQLFdBQVc7WUFDWCxXQUFXO1lBQ1gsV0FBVztZQUNYLFdBQVc7V0FDWixDQUFDO1NBQ0g7T0FDRixDQUFDLENBQUM7TUFDSCxTQUFTLENBQUMsUUFBUSxDQUFDO01BQ25CLFNBQVMsQ0FBQyxRQUFRLENBQUM7S0FDcEIsQ0FBQzs7SUFFRixNQUFNLFNBQVMsTUFBTTtNQUNuQixNQUFNLFFBQVEsT0FBTyxFQUFFLENBQUM7TUFDeEIsTUFBTSxRQUFRLE9BQU8sRUFBRSxDQUFDO01BQ3hCLE1BQU0sYUFBYSxNQUFNO1FBQ3ZCLEtBQUssR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO09BQ3hCLENBQUM7TUFDRixNQUFNLGFBQWEsY0FBYztRQUMvQixVQUFVLEVBQUUsQ0FBQztRQUNiLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztPQUNqQyxDQUFDO01BQ0YsTUFBTSxZQUFZLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO01BQ2hELE9BQU8sSUFBSSxDQUFDO1FBQ1YsWUFBWSxLQUFLLElBQUk7UUFDckIsV0FBVyxLQUFLLE1BQU07UUFDdEIsWUFBWSxLQUFLLElBQUk7UUFDckIsY0FBYyxLQUFLLE1BQU07UUFDekIsVUFBVTtRQUNWLFVBQVU7UUFDVixTQUFTO09BQ1YsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixJQUFJLGdDQUFnQyxNQUFNLE9BQU8sQ0FBQztRQUM5QyxXQUFXLElBQUk7UUFDZixNQUFNLE1BQU07S0FDZixDQUFDLENBQUM7O0lBRUgsTUFBTSxjQUFjLFFBQVEsQ0FBQztNQUMzQixRQUFRLGlCQUFpQjtNQUN6QixNQUFNLGFBQWE7TUFDbkIsUUFBUSxpQkFBaUI7TUFDekIsT0FBTyxnQkFBZ0I7TUFDdkIsTUFBTSxlQUFlO0tBQ3RCLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFNBQVMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQzs7SUFFbkUsTUFBTSxrQkFBa0IsaUJBQWlCLENBQUM7SUFDMUMsTUFBTSxxQkFBcUIsS0FBSyxDQUFDLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRSxNQUFNLG9CQUFvQixzQkFBc0I7TUFDOUMsTUFBTSxpQkFBaUIsTUFBTSxPQUFPLGVBQWUsQ0FBQztNQUNwRCxNQUFNLFNBQVMsY0FBYyxRQUFRLENBQUM7TUFDdEMsTUFBTSxjQUFjO1FBQ2xCLE1BQU0sT0FBTyxXQUFXO1FBQ3hCLEdBQUcsTUFBTSxjQUFjO09BQ3hCLENBQUM7TUFDRixJQUFJLFFBQVEsRUFBRTtRQUNaLE1BQU0sQ0FBQyxXQUFXLEVBQUUsS0FBSztVQUN2QixDQUFDLFlBQVksQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQzlDLENBQUMsQ0FBQztPQUNKO01BQ0QsTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLO1FBQ3ZCLENBQUMsWUFBWSxDQUFDLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO09BQ2hELENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLDBCQUEwQixvQkFBb0I7TUFDbEQsTUFBTSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU07UUFDdEIsSUFBSSxNQUFNLEtBQUssV0FBVyxFQUFFLEVBQUU7VUFDNUIsaUJBQWlCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2pDO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxHQUFHLENBQUMsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDbkYsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDdEIsTUFBTSxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztPQUM3QjtLQUNGLENBQUM7SUFDRixNQUFNLGtCQUFrQixNQUFNLFNBQVMsT0FBTyxDQUFDO01BQzdDLFVBQVU7UUFDUixDQUFDLGVBQWUsR0FBRztVQUNqQixRQUFRLGtCQUFrQjtVQUMxQixXQUFXLGdCQUFnQjtZQUN6QixTQUFTLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxTQUFTLENBQUMsQ0FBQztXQUNwQztTQUNGO09BQ0Y7S0FDRixDQUFDLENBQUM7O0lBRUgsTUFBTSxPQUFPLFlBQVksU0FBUyxPQUFPLENBQUM7TUFDeEMsUUFBUTtNQUNSLGNBQWMsc0NBQXNDO0tBQ3JELENBQUMsQ0FBQztJQUNILE1BQU0sU0FBUyxZQUFZLFNBQVMsT0FBTyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMxRCxNQUFNLGNBQWMsWUFBWSxTQUFTLE9BQU8sQ0FBQztNQUMvQyxRQUFRO01BQ1IsY0FBYyxvQkFBb0I7S0FDbkMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxnQkFBZ0IsWUFBWSxTQUFTLE9BQU8sQ0FBQztNQUNqRCxRQUFRO01BQ1IsY0FBYyxvQkFBb0I7TUFDbEMsV0FBVyxLQUFLO0tBQ2pCLENBQUMsQ0FBQztJQUNILE1BQU0sbUJBQW1CO01BQ3ZCLElBQUk7TUFDSixNQUFNO01BQ04sV0FBVztNQUNYLGFBQWE7S0FDZCxDQUFDOztJQUVGLE1BQU0sYUFBYSxnQkFBZ0I7TUFDakMsTUFBTSxNQUFNLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzlCLE9BQU8sS0FBSztRQUNWLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUNSLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxvQkFBb0IseUJBQXlCLGFBQWEsQ0FBQyxRQUFRO01BQ3ZFLE1BQU0sTUFBTSxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ25DLEdBQUcsQ0FBQyxPQUFPO1FBQ1QsTUFBTSxZQUFZLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1VBQ3pCLGFBQWEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzlCO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQyxDQUFDO0lBQ0gsTUFBTSxvQkFBb0IsMkJBQTJCLGFBQWEsQ0FBQyxRQUFRLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7O0lBRTFILE1BQU0sb0JBQW9CLHdCQUF3QixjQUFjLENBQUMsMEJBQTBCO01BQ3pGLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQztNQUN0QyxJQUFJLENBQUMsSUFBSSxnQkFBZ0IsSUFBSSxZQUFZLEtBQUssY0FBYyxpQkFBaUIsRUFBRTtRQUM3RSxJQUFJLElBQUksVUFBVSxFQUFFLFlBQVksRUFBRSxFQUFFO1VBQ2xDLElBQUksQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztTQUM1QjtRQUNELGNBQWMsS0FBSyxFQUFFLENBQUM7T0FDdkI7S0FDRixDQUFDLENBQUM7SUFDSCxNQUFNLHFCQUFxQjtNQUN6QixDQUFDLFNBQVMsRUFBRSxHQUFHO1FBQ2IsV0FBVztRQUNYLHNCQUFzQjtRQUN0QixVQUFVO1FBQ1YsYUFBYTtPQUNkO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLDBCQUEwQixHQUFHLENBQUM7SUFDcEMsTUFBTSxtQkFBbUIsdURBQXVEO01BQzlFLE1BQU0sZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNqQyxPQUFPO1FBQ0wsTUFBTSxNQUFNO1FBQ1osS0FBSyxTQUFTLElBQUk7UUFDbEIsWUFBWSx1QkFBdUIsQ0FBQyxTQUFTLGNBQWMsQ0FBQztRQUM1RCxNQUFNLElBQUksS0FBSztRQUNmLFlBQVksa0JBQWtCO1FBQzlCLFlBQVksSUFBSSxnQkFBZ0I7UUFDaEMsZ0JBQWdCLFFBQVEsQ0FBQztVQUN2QixNQUFNLENBQUMsYUFBYSxFQUFFO1lBQ3BCLGlCQUFpQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUM7WUFDckMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQztZQUN0QyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDO1dBQ3ZDLENBQUM7VUFDRixnQkFBZ0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFFBQVEsSUFBSSxrQkFBa0IsV0FBVyxFQUFFLENBQUM7VUFDN0UsZUFBZSxFQUFFO1VBQ2pCLFNBQVMsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUNyQixPQUFPLENBQUMsSUFBSSxlQUFlLENBQUMsQ0FBQztPQUMvQixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sWUFBWSxXQUFXO01BQzNCLE9BQU8sTUFBTSxNQUFNO01BQ25CLE1BQU07UUFDSixNQUFNLE1BQU0sS0FBSyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzNCLEdBQUcsTUFBTSxLQUFLO09BQ2Y7S0FDRixDQUFDLENBQUM7O0lBRUgsTUFBTSxjQUFjLFVBQVU7TUFDNUIsTUFBTSxRQUFRLFFBQVEsR0FBRyxRQUFRLEVBQUUsSUFBSSxRQUFRLEdBQUcsTUFBTSxFQUFFLENBQUM7TUFDM0QsTUFBTSxNQUFNO1FBQ1YsS0FBSyxRQUFRO1FBQ2IsTUFBTSxRQUFRO1FBQ2QsT0FBTyxRQUFRO1FBQ2YsTUFBTSxRQUFRO1FBQ2QsUUFBUSxjQUFjO09BQ3ZCLENBQUM7TUFDRixNQUFNLFFBQVE7UUFDWixNQUFNLE1BQU07UUFDWixRQUFRLFdBQVc7T0FDcEIsQ0FBQztNQUNGLE1BQU0sVUFBVSxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztNQUNwQyxNQUFNLFdBQVcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDbkMsTUFBTSxVQUFVLEtBQUssQ0FBQyxRQUFRLEVBQUUsV0FBVztRQUN6QyxNQUFNLFNBQVMsT0FBTyxZQUFZLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDNUMsT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUM7T0FDM0QsQ0FBQyxDQUFDO01BQ0gsT0FBTyxLQUFLLEdBQUcsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDckQsQ0FBQzs7SUFFRixNQUFNLGVBQWUsY0FBYyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssUUFBUSxDQUFDLElBQUksRUFBRTtNQUMxRSxLQUFLLEtBQUs7TUFDVixPQUFPO0tBQ1IsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNWLE1BQU0sYUFBYSxTQUFTO01BQzFCLEtBQUs7UUFDSCxLQUFLLEtBQUs7UUFDVixTQUFTLENBQUMsU0FBUyxDQUFDO09BQ3JCO01BQ0QsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQy9DLENBQUMsQ0FBQztJQUNILE1BQU0sYUFBYSxvQkFBb0I7TUFDckMsS0FBSztRQUNILEtBQUssS0FBSztRQUNWLE9BQU87UUFDUCxXQUFXLElBQUk7T0FDaEI7S0FDRixDQUFDLENBQUM7SUFDSCxNQUFNLG1CQUFtQixrQkFBa0I7TUFDekMsS0FBSztRQUNILEtBQUssS0FBSztRQUNWLFNBQVMsQ0FBQyxTQUFTLENBQUM7T0FDckI7TUFDRCxZQUFZLENBQUM7VUFDVCxLQUFLO1lBQ0gsS0FBSyxLQUFLLElBQUk7WUFDZCxRQUFRLEtBQUssT0FBTztXQUNyQjtVQUNELFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUMvQyxDQUFDO0tBQ0wsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxpQkFBaUIsYUFBYTtNQUNsQyxLQUFLO1FBQ0gsS0FBSyxLQUFLO1FBQ1YsU0FBUyxDQUFDLGNBQWMsQ0FBQztPQUMxQjtNQUNELFlBQVksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7S0FDNUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxrQkFBa0IsU0FBUyxZQUFZLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDcEYsTUFBTSxxQkFBcUIsU0FBUyxZQUFZLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDdkYsTUFBTSx1QkFBdUIsU0FBUyxZQUFZLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDeEYsTUFBTSxrQkFBa0IsMkJBQTJCO01BQ2pELE1BQU0saUJBQWlCLFNBQVMsVUFBVSxLQUFLLFVBQVUsR0FBRyxvQkFBb0IsR0FBRyxpQkFBaUIsQ0FBQztNQUNyRyxNQUFNLGFBQWEsU0FBUyxNQUFNLEtBQUssTUFBTSxHQUFHLHVCQUF1QixHQUFHLHdCQUF3QixDQUFDO01BQ25HLE1BQU0saUJBQWlCLE1BQU07UUFDM0IsUUFBUSxTQUFTLE9BQU87YUFDbkIsS0FBSztVQUNSLE9BQU8sdUJBQXVCLENBQUM7YUFDNUIsUUFBUTtVQUNYLE9BQU8sMEJBQTBCLENBQUM7YUFDL0IsUUFBUTtVQUNYLE9BQU8sMEJBQTBCLENBQUM7U0FDbkM7T0FDRixDQUFDO01BQ0YsT0FBTztRQUNMLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTO1lBQ1AsY0FBYztZQUNkLGNBQWM7WUFDZCxVQUFVO1lBQ1YsY0FBYyxFQUFFO1dBQ2pCO1NBQ0Y7UUFDRCxVQUFVO09BQ1gsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLGNBQWMsd0JBQXdCO01BQzFDLEtBQUs7UUFDSCxLQUFLLEtBQUs7UUFDVixPQUFPO1FBQ1AsWUFBWTtVQUNWLEdBQUc7VUFDSCxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztTQUNuQjtPQUNGO0tBQ0YsQ0FBQyxDQUFDOztJQUVILE1BQU0sdUJBQXVCLDJDQUEyQztNQUN0RSxNQUFNLHFCQUFxQixRQUFRLENBQUM7TUFDcEMsTUFBTSxxQkFBcUIsUUFBUSxDQUFDO01BQ3BDLE1BQU0sV0FBVyxJQUFJLFVBQVUsQ0FBQztNQUNoQyxNQUFNLFlBQVksSUFBSSxNQUFNLENBQUM7TUFDN0IsTUFBTSxVQUFVLElBQUksWUFBWSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLGlCQUFpQixNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztNQUNqRyxNQUFNLFNBQVMsTUFBTTtRQUNuQixNQUFNLFNBQVMsVUFBVSxDQUFDO1FBQzFCLE1BQU0sT0FBTyxPQUFPLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQixNQUFNLGFBQWEsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8saUJBQWlCLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sVUFBVTtVQUNkLEtBQUssS0FBSztVQUNWLFVBQVU7VUFDVixTQUFTLENBQUMsTUFBTSxDQUFDO1NBQ2xCLENBQUM7UUFDRixJQUFJLFNBQVMsS0FBSyxrQkFBa0IsRUFBRTtVQUNwQyxPQUFPO1lBQ0wsR0FBRyxPQUFPO1lBQ1YsS0FBSyxRQUFRO1lBQ2IsU0FBUztjQUNQLEdBQUcsT0FBTyxRQUFRO2NBQ2xCLDBCQUEwQjthQUMzQjtZQUNELFdBQVcsSUFBSTtXQUNoQixDQUFDO1NBQ0gsTUFBTSxJQUFJLFNBQVMsS0FBSyxrQkFBa0IsRUFBRTtVQUMzQyxPQUFPO1lBQ0wsR0FBRyxPQUFPO1lBQ1YsU0FBUztjQUNQLEdBQUcsT0FBTyxRQUFRO2NBQ2xCLG9CQUFvQjthQUNyQjtZQUNELFdBQVcsSUFBSTtXQUNoQixDQUFDO1NBQ0gsTUFBTSxJQUFJLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRTtVQUNuQyxPQUFPO1lBQ0wsR0FBRyxPQUFPO1lBQ1YsWUFBWTtjQUNWLEdBQUcsT0FBTyxXQUFXO2NBQ3JCLGtCQUFrQixTQUFTO2FBQzVCO1lBQ0QsUUFBUSxFQUFFLG9CQUFvQixTQUFTLEVBQUU7WUFDekMsV0FBVyxJQUFJO1dBQ2hCLENBQUM7U0FDSCxNQUFNO1VBQ0wsT0FBTyxPQUFPLENBQUM7U0FDaEI7T0FDRixDQUFDO01BQ0YsT0FBTztRQUNMLEtBQUssTUFBTSxFQUFFO1FBQ2IsZUFBZSxFQUFFO09BQ2xCLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSx5QkFBeUIsYUFBYTtNQUMxQyxNQUFNLFdBQVcsU0FBUyxJQUFJLENBQUMsVUFBVTtRQUN2QyxZQUFZO1VBQ1YsT0FBTyxRQUFRLFVBQVUsQ0FBQyxLQUFLLENBQUM7VUFDaEMsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDO1NBQzVCO09BQ0YsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUNkLE9BQU87UUFDTCxLQUFLLEtBQUs7UUFDVixTQUFTO1VBQ1AsUUFBUTtVQUNSLGVBQWU7U0FDaEI7UUFDRCxHQUFHLFFBQVE7T0FDWixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sNEJBQTRCLHlEQUF5RDtNQUN6RixNQUFNLFdBQVc7UUFDZixLQUFLLEtBQUs7UUFDVixTQUFTLENBQUMsU0FBUyxDQUFDO09BQ3JCLENBQUM7TUFDRixNQUFNLGFBQWEsWUFBWSxRQUFRLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO01BQ3BHLE1BQU0sa0JBQWtCLE1BQU0sUUFBUSxLQUFLLENBQUMsRUFBRSxLQUFLLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDL0QsTUFBTSxXQUFXLFdBQVcsR0FBRyxJQUFJLFlBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztNQUMzRyxNQUFNLFlBQVksSUFBSSxVQUFVLENBQUM7TUFDakMsTUFBTSxhQUFhLFFBQVEsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLFVBQVUsRUFBRSxRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFLElBQUksTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7TUFDcEosTUFBTSxVQUFVLElBQUksWUFBWSxLQUFLLENBQUMsTUFBTSxJQUFJLFlBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsUUFBUSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3BJLE1BQU0sV0FBVztRQUNmLEtBQUssc0JBQXNCLENBQUMsSUFBSSxVQUFVLENBQUM7UUFDM0MsZUFBZTtVQUNiLFFBQVE7VUFDUixPQUFPO1VBQ1AsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLGNBQWMsQ0FBQztVQUN4QyxTQUFTO1VBQ1QsSUFBSSxNQUFNO1NBQ1g7T0FDRixDQUFDO01BQ0YsT0FBTyxRQUFRLENBQUM7S0FDakIsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLHdDQUF3QyxlQUFlLFFBQVEsS0FBSyxFQUFFLEtBQUs7TUFDckcsSUFBSSxJQUFJLFFBQVEsS0FBSyxPQUFPLEVBQUU7UUFDNUIsT0FBTyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLENBQUM7T0FDckUsTUFBTTtRQUNMLE9BQU8seUJBQXlCLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztPQUN2RjtLQUNGLENBQUM7O0lBRUYsTUFBTSxtQkFBbUIsMkJBQTJCLEtBQUssQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLE9BQU8sQ0FBQztRQUN0SCxVQUFVLGVBQWUsUUFBUTtRQUNqQyxZQUFZO1VBQ1YsS0FBSyxLQUFLO1VBQ1YsU0FBUyxDQUFDLDhCQUE4QixDQUFDO1NBQzFDO1FBQ0QsbUJBQW1CLEVBQUU7UUFDckIsUUFBUSxTQUFTO1VBQ2YsTUFBTSxTQUFTO1VBQ2YsTUFBTSxJQUFJO1VBQ1YsV0FBVyxFQUFFLG1CQUFtQixZQUFZLEVBQUU7U0FDL0MsQ0FBQztRQUNGLE1BQU0sa0JBQWtCO1FBQ3hCLFFBQVEseUJBQXlCO1VBQy9CLGFBQWEsQ0FBQyxPQUFPO1lBQ25CLFdBQVcsY0FBYyxDQUFDLFNBQVMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFNBQVMsWUFBWSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUM1RixDQUFDLENBQUM7U0FDSjtPQUNGLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQixNQUFNLGFBQWEsUUFBUSxRQUFRLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JELE1BQU0sY0FBYyxxQkFBcUI7TUFDdkMsTUFBTSxhQUFhLFFBQVEsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzVDLE1BQU0sVUFBVSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7TUFDdkMsSUFBSSxTQUFTLE9BQU8sR0FBRyxDQUFDLEVBQUU7UUFDeEIsTUFBTSxvQkFBb0IsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlELE9BQU8sT0FBTyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLDBDQUEwQyxHQUFHLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO09BQ25ILE1BQU07UUFDTCxPQUFPLE9BQU8sQ0FBQztPQUNoQjtLQUNGLENBQUM7SUFDRixNQUFNLHlCQUF5Qix1RkFBdUYsY0FBYyxJQUFJLEtBQUs7TUFDM0ksTUFBTSxZQUFZLG1CQUFtQixDQUFDO1FBQ3BDLE9BQU87UUFDUCxhQUFhLFFBQVEsS0FBSyxFQUFFO1FBQzVCLGFBQWEsT0FBTyxHQUFHLElBQUksS0FBSyxJQUFJLENBQUMsUUFBUSxXQUFXLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUU7UUFDNUYsV0FBVyxJQUFJLEtBQUs7UUFDcEIsYUFBYSxJQUFJLEtBQUs7UUFDdEIsaUJBQWlCLFFBQVEsS0FBSyxFQUFFO1FBQ2hDLFdBQVcsUUFBUSxLQUFLLEVBQUU7UUFDMUIsT0FBTyxRQUFRLEtBQUssRUFBRTtRQUN0QixPQUFPLElBQUksTUFBTTtPQUNsQixFQUFFLGVBQWUsVUFBVSxFQUFFLFdBQVcsRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDO01BQ3RELE9BQU8sZ0JBQWdCLENBQUM7UUFDdEIsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ3JCLFNBQVMsSUFBSSxRQUFRO1FBQ3JCLFFBQVEsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUN0QixVQUFVLFFBQVEsa0JBQWtCLENBQUMsSUFBSSxNQUFNLEVBQUUsSUFBSSxLQUFLLENBQUM7UUFDM0QsU0FBUyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQ3pCLGlCQUFpQixLQUFLO1FBQ3RCLGdCQUFnQixnQkFBZ0IsQ0FBQyxJQUFJLEtBQUssRUFBRSxlQUFlLENBQUM7T0FDN0QsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGVBQWUsVUFBVSxDQUFDLENBQUM7S0FDeEQsQ0FBQzs7SUFFRixNQUFNLFdBQVcsbUJBQW1CLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUTtNQUN2RCxRQUFRLElBQUksS0FBSztXQUNaLGVBQWU7UUFDbEIsT0FBTyxlQUFlLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1dBQ3hELFdBQVc7UUFDZCxPQUFPLFdBQVcsQ0FBQyxJQUFJLElBQUksRUFBRSxJQUFJLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDO1dBQ2xELFVBQVU7UUFDYixNQUFNLGtCQUFrQixJQUFJLEtBQUssT0FBTyxDQUFDLFFBQVEsVUFBVSxDQUFDLE1BQU0sU0FBUyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNoRyxNQUFNLFlBQVksZUFBZSxHQUFHLFFBQVEsS0FBSyxDQUFDLE1BQU0sU0FBUyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM1RixPQUFPLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLEVBQUUsU0FBUyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsQ0FBQztPQUNwRTtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0scUJBQXFCLGlEQUFpRDtNQUMxRSxNQUFNLFNBQVMsY0FBYztRQUMzQixXQUFXLE1BQU0sQ0FBQyxTQUFTLFdBQVcsQ0FBQyxTQUFTLENBQUM7UUFDakQsWUFBWSxTQUFTO1VBQ25CLFNBQVMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1VBQ2pDLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUUsT0FBTztZQUNqRCxTQUFTLFVBQVUsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRO2NBQy9DLElBQUksSUFBSSxjQUFjLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ2pDLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2VBQzdCO2FBQ0YsQ0FBQyxDQUFDO1dBQ0osQ0FBQyxDQUFDO1NBQ0o7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLFlBQVk7UUFDaEIsS0FBSyxzQkFBc0IsQ0FBQyxJQUFJLE1BQU0sQ0FBQztRQUN2QyxlQUFlLENBQUMsUUFBUSxLQUFLLENBQUM7WUFDMUIsS0FBSztjQUNILEtBQUssS0FBSztjQUNWLFNBQVM7Z0JBQ1AsY0FBYztnQkFDZCxpQkFBaUI7ZUFDbEI7YUFDRjtZQUNELFlBQVksUUFBUSxDQUFDLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQztXQUN6QyxDQUFDLENBQUM7T0FDTixDQUFDO01BQ0YsT0FBTyxnQkFBZ0IsQ0FBQztRQUN0QixNQUFNLFNBQVMsQ0FBQztVQUNkLE1BQU0sUUFBUSxLQUFLLEVBQUU7VUFDckIsR0FBRyxJQUFJO1NBQ1IsQ0FBQztRQUNGLFNBQVMsSUFBSSxRQUFRO1FBQ3JCLE1BQU07UUFDTixVQUFVLElBQUksU0FBUztRQUN2QixTQUFTLElBQUksUUFBUTtRQUNyQixpQkFBaUIsS0FBSztRQUN0QixnQkFBZ0IsUUFBUSxLQUFLLENBQUMsTUFBTSxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztPQUMvRCxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsZUFBZSxVQUFVLENBQUMsQ0FBQztLQUN4RCxDQUFDOztJQUVGLE1BQU0sbUJBQW1CLDJGQUEyRixjQUFjLElBQUksS0FBSztNQUN6SSxNQUFNLFNBQVMsY0FBYztRQUMzQixXQUFXLFNBQVM7VUFDbEIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsVUFBVSxNQUFNLFFBQVEsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUN4QyxXQUFXLE1BQU0sQ0FBQyxTQUFTLFdBQVcsQ0FBQyxTQUFTLENBQUM7UUFDakQsWUFBWSxTQUFTLFNBQVMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQztPQUN0RCxDQUFDLENBQUM7TUFDSCxNQUFNLFlBQVksbUJBQW1CLENBQUM7UUFDcEMsT0FBTztRQUNQLGFBQWEsT0FBTyxHQUFHLElBQUksS0FBSyxHQUFHLFFBQVEsS0FBSyxFQUFFO1FBQ2xELGFBQWEsUUFBUSxLQUFLLEVBQUU7UUFDNUIsV0FBVyxJQUFJLEtBQUs7UUFDcEIsYUFBYSxJQUFJLEtBQUs7UUFDdEIsaUJBQWlCLE9BQU8sR0FBRyxJQUFJLFNBQVMsR0FBRyxRQUFRLEtBQUssRUFBRTtRQUMxRCxXQUFXLE9BQU8sR0FBRyxRQUFRLEtBQUssQ0FBQyxlQUFlLENBQUMsa0JBQWtCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUU7UUFDL0YsT0FBTyxRQUFRLEtBQUssRUFBRTtRQUN0QixPQUFPLElBQUksTUFBTTtPQUNsQixFQUFFLGtCQUFrQixFQUFFLFdBQVcsQ0FBQyxDQUFDO01BQ3BDLE9BQU8sU0FBUyxDQUFDLGdCQUFnQixDQUFDO1FBQ2hDLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQztRQUNyQixTQUFTLElBQUksUUFBUTtRQUNyQixNQUFNO1FBQ04sVUFBVSxRQUFRLGtCQUFrQixDQUFDLElBQUksTUFBTSxDQUFDO1FBQ2hELFNBQVMsT0FBTztVQUNkLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1VBQzFCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxpQkFBaUIsS0FBSztRQUN0QixnQkFBZ0IsRUFBRTtPQUNuQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLENBQUMsRUFBRTtRQUMvQyxVQUFVO1VBQ1IsYUFBYSxXQUFXO1VBQ3hCLGlCQUFpQixLQUFLO1VBQ3RCLFVBQVUsSUFBSSxPQUFPO1VBQ3JCLFdBQVcsSUFBSTtTQUNoQjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxVQUFVLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDOztJQUVqRCxNQUFNLFlBQVksVUFBVSxFQUFFLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1RCxNQUFNLGlCQUFpQixrQ0FBa0MsQ0FBQztJQUMxRCxNQUFNLGdCQUFnQiwyQ0FBMkMsQ0FBQztJQUNsRSxNQUFNLGNBQWMsT0FBTyxjQUFjLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxhQUFhLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvRSxNQUFNLGVBQWUsT0FBTyxhQUFhLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNsRSxNQUFNLGVBQWUsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsRUFBRSxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztJQUM3RyxNQUFNLGNBQWMsT0FBTztNQUN6QixNQUFNLFlBQVksR0FBRyxNQUFNLFFBQVEsQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDM0YsT0FBTyxFQUFFLE9BQU8sU0FBUyxFQUFFLENBQUM7S0FDN0IsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLE9BQU87TUFDM0IsTUFBTSxXQUFXLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNsQyxNQUFNLFlBQVksYUFBYSxLQUFLLENBQUMsUUFBUSxNQUFNLENBQUMsQ0FBQztNQUNyRCxPQUFPLFNBQVMsS0FBSyxJQUFJLEdBQUc7UUFDMUIsUUFBUTtRQUNSLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtPQUNMLEdBQUcsU0FBUyxDQUFDO0tBQ2YsQ0FBQztJQUNGLE1BQU0sUUFBUSxhQUFhO01BQ3pCLE1BQU0sTUFBTSxTQUFTLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUNuQyxPQUFPLENBQUMsR0FBRyxPQUFPLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxhQUFhLEVBQUUsQ0FBQztLQUMzRCxDQUFDO0lBQ0YsTUFBTSxXQUFXLGNBQWM7TUFDN0IsTUFBTSxRQUFRLEtBQUssQ0FBQyxVQUFVLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxVQUFVLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDO01BQ3ZGLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3pCLENBQUM7O0lBRUYsTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDO0lBQ3JCLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQztJQUNyQixNQUFNLFVBQVUsSUFBSSxNQUFNLENBQUM7SUFDM0IsTUFBTSxXQUFXLHdEQUF3RCxDQUFDO0lBQzFFLE1BQU0sWUFBWSwrRUFBK0UsQ0FBQztJQUNsRyxNQUFNLGFBQWEsOEJBQThCO01BQy9DLEdBQUc7TUFDSCxLQUFLO01BQ0wsSUFBSTtNQUNKLEtBQUs7S0FDTixDQUFDLENBQUM7SUFDSCxNQUFNLGtCQUFrQixTQUFTO01BQy9CLE1BQU0sTUFBTSxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO01BQ2hDLE9BQU8sR0FBRyxTQUFTLEVBQUUsS0FBSyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDO0tBQzNELENBQUM7SUFDRixNQUFNLFVBQVUsT0FBTztNQUNyQixJQUFJLENBQUMsQ0FBQztNQUNOLElBQUksQ0FBQyxDQUFDO01BQ04sSUFBSSxDQUFDLENBQUM7TUFDTixNQUFNLE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDO01BQ2pDLElBQUksYUFBYSxHQUFHLFdBQVcsR0FBRyxHQUFHLENBQUM7TUFDdEMsSUFBSSxhQUFhLEdBQUcsTUFBTSxHQUFHLEdBQUcsQ0FBQztNQUNqQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3hDLGFBQWEsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDeEMsSUFBSSxVQUFVLEtBQUssQ0FBQyxFQUFFO1FBQ3BCLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFDdEMsT0FBTyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDL0I7TUFDRCxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQztNQUN0QixNQUFNLFNBQVMsVUFBVSxHQUFHLFVBQVUsQ0FBQztNQUN2QyxNQUFNLElBQUksTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDaEQsTUFBTSxRQUFRLFVBQVUsR0FBRyxNQUFNLENBQUM7TUFDbEMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7V0FDbkIsQ0FBQztRQUNKLElBQUksTUFBTSxDQUFDO1FBQ1gsSUFBSSxDQUFDLENBQUM7UUFDTixJQUFJLENBQUMsQ0FBQztRQUNOLE1BQU07V0FDSCxDQUFDO1FBQ0osSUFBSSxDQUFDLENBQUM7UUFDTixJQUFJLE1BQU0sQ0FBQztRQUNYLElBQUksQ0FBQyxDQUFDO1FBQ04sTUFBTTtXQUNILENBQUM7UUFDSixJQUFJLENBQUMsQ0FBQztRQUNOLElBQUksTUFBTSxDQUFDO1FBQ1gsSUFBSSxDQUFDLENBQUM7UUFDTixNQUFNO1dBQ0gsQ0FBQztRQUNKLElBQUksQ0FBQyxDQUFDO1FBQ04sSUFBSSxDQUFDLENBQUM7UUFDTixJQUFJLE1BQU0sQ0FBQztRQUNYLE1BQU07V0FDSCxDQUFDO1FBQ0osSUFBSSxDQUFDLENBQUM7UUFDTixJQUFJLENBQUMsQ0FBQztRQUNOLElBQUksTUFBTSxDQUFDO1FBQ1gsTUFBTTtXQUNILENBQUM7UUFDSixJQUFJLE1BQU0sQ0FBQztRQUNYLElBQUksQ0FBQyxDQUFDO1FBQ04sSUFBSSxDQUFDLENBQUM7UUFDTixNQUFNOztRQUVOLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQztPQUNmO01BQ0QsSUFBSSxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO01BQy9CLElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUMvQixJQUFJLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7TUFDL0IsT0FBTyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDL0IsQ0FBQztJQUNGLE1BQU0sVUFBVSxhQUFhO01BQzNCLE1BQU0sU0FBUyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7TUFDeEMsTUFBTSxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDcEMsTUFBTSxRQUFRLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDdEMsTUFBTSxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDckMsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDeEMsQ0FBQztJQUNGLE1BQU0sbUJBQW1CLDZCQUE2QjtNQUNwRCxNQUFNLElBQUksUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztNQUM1QixNQUFNLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztNQUM5QixNQUFNLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztNQUM3QixNQUFNLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQzVCLE9BQU8sVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQy9CLENBQUM7SUFDRixNQUFNLGFBQWEsY0FBYztNQUMvQixJQUFJLFVBQVUsS0FBSyxhQUFhLEVBQUU7UUFDaEMsT0FBTyxRQUFRLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUM5QztNQUNELE1BQU0sV0FBVyxRQUFRLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztNQUMzQyxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUU7UUFDckIsT0FBTyxRQUFRLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO09BQ3BGO01BQ0QsTUFBTSxZQUFZLFNBQVMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO01BQzdDLElBQUksU0FBUyxLQUFLLElBQUksRUFBRTtRQUN0QixPQUFPLFFBQVEsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDaEc7TUFDRCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7S0FDeEIsQ0FBQztJQUNGLE1BQU0sV0FBVyxRQUFRLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlGLE1BQU0sTUFBTSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7O0lBRXJDLE1BQU0sbUJBQW1CLFVBQVU7TUFDakMsTUFBTSxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDL0IsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLG1CQUFtQjtNQUM3QyxNQUFNLFNBQVMsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDekMsQ0FBQztJQUNGLE1BQU0sbUJBQW1CLFVBQVU7TUFDakMsTUFBTSxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7S0FDakMsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLGVBQWU7TUFDdkMsTUFBTSxTQUFTLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3JDLENBQUM7SUFDRixNQUFNLG9CQUFvQixlQUFlO01BQ3ZDLE1BQU0sU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUNyQyxDQUFDO0lBQ0YsTUFBTSxzQkFBc0Isa0JBQWtCO01BQzVDLE1BQU0sU0FBUyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzFDLENBQUM7SUFDRixNQUFNLHlCQUF5QixtQkFBbUI7TUFDaEQsTUFBTSxTQUFTLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ2xELENBQUM7SUFDRixNQUFNLGtCQUFrQixrQkFBa0IsTUFBTSxTQUFTLENBQUMsYUFBYSxFQUFFO01BQ3ZFLE1BQU0sSUFBSSxTQUFTLFlBQVksRUFBRTtNQUNqQyxRQUFRLElBQUk7S0FDYixDQUFDLENBQUM7SUFDSCxNQUFNLDBCQUEwQixtQkFBbUI7TUFDakQsTUFBTSxTQUFTLENBQUMscUJBQXFCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ25ELENBQUM7O0lBRUYsTUFBTSxtQkFBbUIsVUFBVSxNQUFNO01BQ3ZDLENBQUMsRUFBRSxDQUFDO01BQ0osQ0FBQyxFQUFFLENBQUM7S0FDTCxDQUFDO0lBQ0YsTUFBTSx3QkFBd0IsVUFBVSxZQUFZLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPO01BQ2hGLEdBQUcsV0FBVyxDQUFDLE1BQU0sVUFBVSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0tBQy9DLENBQUMsQ0FBQztJQUNILE1BQU0sc0JBQXNCLGtCQUFrQixPQUFPO01BQ25ELE1BQU0sNEJBQTRCLFVBQVUsRUFBRSxDQUFDO01BQy9DLE1BQU0sT0FBTyxNQUFNO1FBQ2pCLEdBQUcsVUFBVSxDQUFDLE1BQU0sVUFBVSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM1QyxNQUFNLFVBQVUsTUFBTSxVQUFVLGNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQztRQUNwRSx5QkFBeUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO09BQ3hDLENBQUM7TUFDRixNQUFNLFlBQVksR0FBRyxJQUFJLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDeEQsT0FBTyxNQUFNO1FBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pCLHlCQUF5QixNQUFNLEVBQUUsQ0FBQztPQUNuQyxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0scUJBQXFCLGtCQUFrQixPQUFPO01BQ2xELE1BQU0sdUJBQXVCLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ2hFLE1BQU0scUJBQXFCLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNsRSxPQUFPLE1BQU07UUFDWCxvQkFBb0IsRUFBRSxDQUFDO1FBQ3ZCLGtCQUFrQixFQUFFLENBQUM7T0FDdEIsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLGVBQWUsc0JBQXNCLE9BQU87TUFDaEQsTUFBTSxjQUFjLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ2pDLE1BQU0sT0FBTyxNQUFNO1FBQ2pCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNQLE1BQU0sR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztPQUMvQixDQUFDO01BQ0YsTUFBTSxZQUFZLEdBQUcsSUFBSSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ3hELE9BQU8sTUFBTTtRQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QixNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7T0FDaEMsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLHlCQUF5QixVQUFVLFdBQVcsTUFBTTtNQUN4RCxNQUFNLFlBQVksU0FBUyxDQUFDLE1BQU07UUFDaEMsTUFBTSxNQUFNLEVBQUUsQ0FBQztRQUNmLE1BQU0sWUFBWSxDQUFDLGlCQUFpQixFQUFFLEtBQUssRUFBRSxPQUFPLE9BQU8sQ0FBQyxDQUFDO09BQzlELENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLHNCQUFzQixxQkFBcUIsTUFBTSxNQUFNLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQzs7SUFFbkYsSUFBSSxXQUFXLE9BQU8sS0FBSyxNQUFNLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDOztJQUV2RSxNQUFNLGVBQWUsRUFBRSxDQUFDO0lBQ3hCLE1BQU0sYUFBYSxZQUFZLE1BQU0sRUFBRSxLQUFLO01BQzFDLE1BQU0sZ0JBQWdCLFFBQVEsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQ2xELE1BQU0sZUFBZSxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDO01BQzlFLE1BQU0sUUFBUSxRQUFRO1FBQ3BCLE1BQU0sT0FBTyxHQUFHLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDL0IsT0FBTyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7T0FDN0MsQ0FBQztNQUNGLE1BQU0sUUFBUSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7TUFDbEMsTUFBTSxNQUFNLE9BQU87UUFDakIsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLEtBQUssUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksS0FBSyxPQUFPLEdBQUcsR0FBRyxFQUFFO1VBQ3RCLEtBQUssSUFBSSxFQUFFLENBQUM7U0FDYjtRQUNELFFBQVEsUUFBUSxDQUFDLFNBQVMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO09BQ3BELENBQUM7TUFDRixNQUFNLFNBQVMsT0FBTztRQUNwQixLQUFLLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDdEIsQ0FBQztNQUNGLE1BQU0sUUFBUSxNQUFNLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ25DLE9BQU87UUFDTCxHQUFHO1FBQ0gsS0FBSztPQUNOLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsTUFBTSxLQUFLLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTTtNQUNuRSxNQUFNLFlBQVksQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO01BQ2xELE1BQU0sY0FBYyxRQUFRLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUNoRCxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUMzQixNQUFNLGdCQUFnQixRQUFRLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ2hFLFFBQVEsUUFBUSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDLEdBQUcsYUFBYSxHQUFHLElBQUksQ0FBQyxDQUFDO09BQ2xGO01BQ0QsTUFBTSxVQUFVLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDMUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztNQUMzQixPQUFPLE9BQU8sQ0FBQztLQUNoQixDQUFDLENBQUM7SUFDSCxNQUFNLG1CQUFtQixNQUFNLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLFVBQVU7TUFDeEUsTUFBTSxZQUFZO01BQ2xCLE1BQU0sS0FBSztNQUNYLE1BQU0sV0FBVztNQUNqQixPQUFPLEtBQUs7S0FDYixDQUFDLENBQUMsQ0FBQztJQUNKLE1BQU0sV0FBVyxlQUFlO01BQzlCLGFBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzlCLENBQUM7O0lBRUYsTUFBTSxZQUFZLDZCQUE2QjtNQUM3QyxHQUFHO01BQ0gsVUFBVTtNQUNWLEtBQUs7S0FDTixDQUFDLENBQUM7SUFDSCxNQUFNLFVBQVUsY0FBYztNQUM1QixJQUFJLElBQUksQ0FBQyxDQUFDO01BQ1YsSUFBSSxJQUFJLENBQUMsQ0FBQztNQUNWLElBQUksSUFBSSxDQUFDLENBQUM7TUFDVixNQUFNLElBQUksVUFBVSxJQUFJLEdBQUcsR0FBRyxDQUFDO01BQy9CLE1BQU0sSUFBSSxVQUFVLE1BQU0sR0FBRyxHQUFHLENBQUM7TUFDakMsTUFBTSxJQUFJLFVBQVUsS0FBSyxHQUFHLEdBQUcsQ0FBQztNQUNoQyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQzNDLE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDM0MsSUFBSSxNQUFNLEtBQUssTUFBTSxFQUFFO1FBQ3JCLElBQUksTUFBTSxDQUFDO1FBQ1gsT0FBTyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7T0FDakM7TUFDRCxNQUFNLElBQUksQ0FBQyxLQUFLLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQzlELElBQUksQ0FBQyxLQUFLLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQzVDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7TUFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLElBQUksTUFBTSxDQUFDO01BQy9CLElBQUksTUFBTSxDQUFDO01BQ1gsT0FBTyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQzNFLENBQUM7O0lBRUYsTUFBTSxXQUFXLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sV0FBVyxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQyxNQUFNLFdBQVcsU0FBUyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNO01BQzVHLE1BQU0sU0FBUyxRQUFRLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUNoRCxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUM7TUFDbEIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ2pCLE1BQU0sZ0JBQWdCLE1BQU0sV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzlDLGFBQWEsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxNQUFNLEVBQUUsTUFBTSxPQUFPLENBQUMsQ0FBQztNQUMzRCxhQUFhLFVBQVUsR0FBRyxTQUFTLENBQUM7TUFDcEMsYUFBYSxVQUFVLEdBQUcsS0FBSyxDQUFDO01BQ2hDLGFBQWEsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ25DLE1BQU0sT0FBTyxhQUFhLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDO01BQ3pELE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDbEIsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNsQixNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2xCLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDbEIsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDekMsQ0FBQyxDQUFDOztJQUVILE1BQU0sZUFBZSxXQUFXLENBQUM7SUFDakMsTUFBTSxlQUFlLGFBQWEsQ0FBQztJQUNuQyxNQUFNLGVBQWUsQ0FBQyxDQUFDO0lBQ3ZCLE1BQU0sWUFBWSxZQUFZO01BQzVCLE1BQU0sU0FBUyxFQUFFLENBQUM7TUFDbEIsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRTtRQUMzQyxNQUFNLEtBQUssQ0FBQztVQUNWLE1BQU0sUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7VUFDckIsT0FBTyxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO1VBQ3hDLE1BQU0sV0FBVztVQUNqQixNQUFNLFlBQVk7U0FDbkIsQ0FBQyxDQUFDO09BQ0o7TUFDRCxPQUFPLE1BQU0sQ0FBQztLQUNmLENBQUM7SUFDRixNQUFNLFdBQVcsUUFBUSxVQUFVLE1BQU0sUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUQsTUFBTSxnQkFBZ0IsU0FBUyxDQUFDO0lBQ2hDLE1BQU0sYUFBYSxVQUFVO01BQzNCLE1BQU0saUJBQWlCLE1BQU0sUUFBUSxTQUFTLENBQUM7TUFDL0MsTUFBTSxpQkFBaUIsU0FBUztRQUM5QixJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUU7VUFDOUIsT0FBTztZQUNMLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQztZQUN2QixPQUFPLElBQUk7V0FDWixDQUFDO1NBQ0gsTUFBTTtVQUNMLE9BQU87WUFDTCxPQUFPLEtBQUs7WUFDWixTQUFTLDhCQUE4QjtXQUN4QyxDQUFDO1NBQ0g7T0FDRixDQUFDO01BQ0YsTUFBTSxxQkFBcUIsU0FBUztRQUNsQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1VBQ2hDLE9BQU87WUFDTCxLQUFLO1lBQ0wsT0FBTyxJQUFJO1dBQ1osQ0FBQztTQUNILE1BQU07VUFDTCxPQUFPO1lBQ0wsT0FBTyxLQUFLO1lBQ1osU0FBUyw0QkFBNEI7V0FDdEMsQ0FBQztTQUNIO09BQ0YsQ0FBQztNQUNGLGNBQWMsQ0FBQyxXQUFXLEVBQUU7UUFDMUIsV0FBVyxjQUFjO1FBQ3pCLFNBQVM7VUFDUCxTQUFTO1VBQ1QsYUFBYTtVQUNiLFNBQVM7VUFDVCxjQUFjO1VBQ2QsU0FBUztVQUNULFdBQVc7VUFDWCxTQUFTO1VBQ1QsY0FBYztVQUNkLFNBQVM7VUFDVCxZQUFZO1VBQ1osU0FBUztVQUNULE9BQU87VUFDUCxTQUFTO1VBQ1QsUUFBUTtVQUNSLFNBQVM7VUFDVCxLQUFLO1VBQ0wsU0FBUztVQUNULFFBQVE7VUFDUixTQUFTO1VBQ1QsTUFBTTtVQUNOLFNBQVM7VUFDVCxnQkFBZ0I7VUFDaEIsU0FBUztVQUNULFFBQVE7VUFDUixTQUFTO1VBQ1QsVUFBVTtVQUNWLFNBQVM7VUFDVCxhQUFhO1VBQ2IsU0FBUztVQUNULFdBQVc7VUFDWCxTQUFTO1VBQ1QsWUFBWTtVQUNaLFNBQVM7VUFDVCxhQUFhO1VBQ2IsU0FBUztVQUNULE1BQU07VUFDTixTQUFTO1VBQ1QsV0FBVztVQUNYLFNBQVM7VUFDVCxXQUFXO1VBQ1gsU0FBUztVQUNULE9BQU87VUFDUCxTQUFTO1VBQ1QsT0FBTztTQUNSO09BQ0YsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsV0FBVyxjQUFjLEVBQUUsQ0FBQyxDQUFDO01BQ3RFLGNBQWMsQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLFdBQVcsY0FBYyxFQUFFLENBQUMsQ0FBQztNQUN0RSxjQUFjLENBQUMsWUFBWSxFQUFFO1FBQzNCLFdBQVcsa0JBQWtCO1FBQzdCLFNBQVMsUUFBUSxDQUFDLE1BQU0sQ0FBQztPQUMxQixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsdUJBQXVCLEVBQUU7UUFDdEMsV0FBVyxrQkFBa0I7UUFDN0IsU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQztPQUMzQyxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsdUJBQXVCLEVBQUU7UUFDdEMsV0FBVyxrQkFBa0I7UUFDN0IsU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQztPQUMzQyxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsZUFBZSxFQUFFO1FBQzlCLFdBQVcsU0FBUztRQUNwQixTQUFTLElBQUk7T0FDZCxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsMEJBQTBCLEVBQUU7UUFDekMsV0FBVyxRQUFRO1FBQ25CLFNBQVMsYUFBYTtPQUN2QixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsMEJBQTBCLEVBQUU7UUFDekMsV0FBVyxRQUFRO1FBQ25CLFNBQVMsYUFBYTtPQUN2QixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxjQUFjLGdCQUFnQjtNQUNsQyxJQUFJLEVBQUUsS0FBSyxZQUFZLElBQUksTUFBTSxRQUFRLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFO1FBQ3ZFLE9BQU8sUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDakQsTUFBTSxJQUFJLEVBQUUsS0FBSyxZQUFZLElBQUksTUFBTSxRQUFRLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFO1FBQzlFLE9BQU8sUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDakQsTUFBTTtRQUNMLE9BQU8sUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQ3RDO0tBQ0YsQ0FBQztJQUNGLE1BQU0sV0FBVyxTQUFTLEtBQUssU0FBUyxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUgsTUFBTSxjQUFjLGdCQUFnQjtNQUNsQyxNQUFNLGNBQWMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ25ELE1BQU0saUJBQWlCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDNUMsSUFBSSxXQUFXLEtBQUssUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3BDLE9BQU8sY0FBYyxDQUFDO09BQ3ZCLE1BQU07UUFDTCxPQUFPLFdBQVcsQ0FBQztPQUNwQjtLQUNGLENBQUM7SUFDRixNQUFNLGlCQUFpQixTQUFTLEtBQUssU0FBUyxLQUFLO01BQ2pELE1BQU0sVUFBVSxNQUFNO1FBQ3BCLElBQUksRUFBRSxLQUFLLFlBQVksRUFBRTtVQUN2QixPQUFPLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2xELE1BQU0sSUFBSSxFQUFFLEtBQUssWUFBWSxFQUFFO1VBQzlCLE9BQU8sUUFBUSxDQUFDLHVCQUF1QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDbEQsTUFBTTtVQUNMLE9BQU8sUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZDO09BQ0YsQ0FBQztNQUNGLE9BQU8sSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztLQUM5QixDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sNEJBQTRCLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sNEJBQTRCLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDOztJQUV2RSxNQUFNLHlCQUF5QixrQkFBa0IsQ0FBQztJQUNsRCxNQUFNLHlCQUF5QixTQUFTLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDckYsTUFBTSxvQ0FBb0MsU0FBUztNQUNqRCxPQUFPLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUTtRQUM5QixJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUNyQixNQUFNLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1VBQzlDLE9BQU8sTUFBTSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3JELE1BQU07VUFDTCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7U0FDeEI7T0FDRixDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0tBQ2xDLENBQUM7SUFDRixNQUFNLGtCQUFrQixvQkFBb0I7TUFDMUMsTUFBTSxPQUFPLFlBQVksUUFBUSxDQUFDLE1BQU0sVUFBVSxTQUFTLEVBQUUsQ0FBQyxDQUFDO01BQy9ELE1BQU0sY0FBYyxNQUFNLEtBQUssYUFBYSxHQUFHLGlDQUFpQyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDOUcsT0FBTyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3hFLENBQUM7SUFDRixNQUFNLGNBQWMsMkJBQTJCO01BQzdDLE1BQU0sWUFBWSxTQUFTLENBQUMsTUFBTTtRQUNoQyxNQUFNLE1BQU0sRUFBRSxDQUFDO1FBQ2YsTUFBTSxVQUFVLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sWUFBWSxFQUFFLENBQUM7T0FDdEIsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sZUFBZSxvQkFBb0I7TUFDdkMsTUFBTSxZQUFZLFNBQVMsQ0FBQyxNQUFNO1FBQ2hDLE1BQU0sTUFBTSxFQUFFLENBQUM7UUFDZixNQUFNLFVBQVUsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sWUFBWSxFQUFFLENBQUM7T0FDdEIsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sbUJBQW1CLFVBQVU7TUFDakMsTUFBTSxXQUFXLENBQUMsbUJBQW1CLEVBQUUsbUJBQW1CO1FBQ3hELFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ3BDLENBQUMsQ0FBQztNQUNILE1BQU0sV0FBVyxDQUFDLG9CQUFvQixFQUFFLFVBQVU7UUFDaEQsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztPQUM5QixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxzQkFBc0IsYUFBYTtNQUN2QyxNQUFNLE9BQU8sWUFBWSxDQUFDO01BQzFCLE1BQU0sU0FBUztRQUNiLElBQUk7UUFDSixNQUFNLGNBQWM7UUFDcEIsTUFBTSwyQkFBMkI7UUFDakMsT0FBTyxRQUFRO09BQ2hCLENBQUM7TUFDRixNQUFNLFNBQVM7UUFDYixJQUFJO1FBQ0osTUFBTSxjQUFjO1FBQ3BCLE1BQU0sY0FBYztRQUNwQixPQUFPLFFBQVE7T0FDaEIsQ0FBQztNQUNGLE9BQU8sU0FBUyxHQUFHO1FBQ2pCLE1BQU07UUFDTixNQUFNO09BQ1AsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ2QsQ0FBQztJQUNGLE1BQU0sYUFBYSxxQ0FBcUM7TUFDdEQsSUFBSSxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQ3RCLE1BQU0sU0FBUyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxNQUFNLENBQUMsWUFBWTtVQUNqQixRQUFRLEtBQUssQ0FBQyxTQUFTO1lBQ3JCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDeEIsTUFBTSxZQUFZLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3ZELFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztXQUNqQixDQUFDLENBQUM7U0FDSixFQUFFLGVBQWUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO09BQzFELE1BQU0sSUFBSSxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQzdCLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNiLE1BQU0sWUFBWSxDQUFDLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQ2xELE1BQU07UUFDTCxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEIsTUFBTSxZQUFZLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ3hEO0tBQ0YsQ0FBQztJQUNGLE1BQU0sY0FBYywyQkFBMkIsTUFBTSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUgsTUFBTSxhQUFhLDJCQUEyQixZQUFZO01BQ3hELFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0tBQzlDLENBQUM7SUFDRixNQUFNLGVBQWUsb0NBQW9DO01BQ3ZELE1BQU0sS0FBSyxJQUFJLEtBQUssV0FBVyxHQUFHLDRCQUE0QixHQUFHLG9DQUFvQyxDQUFDO01BQ3RHLGNBQWMsWUFBWSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztLQUMxQyxDQUFDO0lBQ0YsTUFBTSxXQUFXLG9CQUFvQixTQUFTO01BQzVDLE1BQU0sZ0JBQWdCLGVBQWUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDdEQsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssWUFBWSxFQUFFLENBQUMsQ0FBQztLQUNqRCxDQUFDO0lBQ0YsTUFBTSwwQkFBMEIsOENBQThDO01BQzVFLE1BQU0sR0FBRyxTQUFTLGVBQWUsQ0FBQyxJQUFJLEVBQUU7UUFDdEMsT0FBTztRQUNQLFNBQVMsT0FBTztRQUNoQixNQUFNLElBQUksS0FBSyxXQUFXLEdBQUcsWUFBWSxHQUFHLG9CQUFvQjtRQUNoRSxRQUFRLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO1FBQ2hDLFNBQVMsY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7UUFDdkMsT0FBTyxVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakYsVUFBVSxtQkFBbUI7VUFDM0IsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNuRDtRQUNELGNBQWMsNEJBQTRCO1VBQ3hDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxZQUFZO1lBQzVDLFNBQVMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hCLG1CQUFtQixDQUFDLE1BQU0sRUFBRTtjQUMxQixJQUFJO2NBQ0osT0FBTyxRQUFRO2FBQ2hCLENBQUMsQ0FBQztXQUNKLENBQUMsQ0FBQztTQUNKO1FBQ0QsU0FBUyxrQkFBa0I7VUFDekIsWUFBWSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1VBQ3BELE1BQU0sVUFBVSxLQUFLO1lBQ25CLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFO2NBQ25CLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMvQztXQUNGLENBQUM7VUFDRixNQUFNLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQztVQUN0QyxPQUFPLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU07WUFDM0UsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUM7V0FDeEMsQ0FBQyxDQUFDO1NBQ0o7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSw0QkFBNEIsMkNBQTJDO01BQzNFLE1BQU0sR0FBRyxTQUFTLGtCQUFrQixDQUFDLElBQUksRUFBRTtRQUN6QyxJQUFJO1FBQ0osTUFBTSxJQUFJLEtBQUssV0FBVyxHQUFHLFlBQVksR0FBRyxvQkFBb0I7UUFDaEUsU0FBUyxPQUFPO1VBQ2QsWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1VBQ3pDLE9BQU8scUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDM0M7UUFDRCxpQkFBaUIsTUFBTSxDQUFDO1lBQ3BCLE1BQU0sZUFBZTtZQUNyQixXQUFXLGFBQWE7WUFDeEIsUUFBUSxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztZQUNoQyxVQUFVLEVBQUUsWUFBWSxNQUFNLEVBQUU7WUFDaEMsVUFBVSxRQUFRO2NBQ2hCLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksTUFBTSxFQUFFLFlBQVk7Z0JBQ2pELFNBQVMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN4QixtQkFBbUIsQ0FBQyxNQUFNLEVBQUU7a0JBQzFCLElBQUk7a0JBQ0osT0FBTyxRQUFRO2lCQUNoQixDQUFDLENBQUM7ZUFDSixDQUFDLENBQUM7YUFDSjtXQUNGLENBQUM7T0FDTCxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsVUFBVSxxQkFBcUI7TUFDdkQsSUFBSSxVQUFVLEtBQUssQ0FBQztNQUNwQixNQUFNLFdBQVcsT0FBTztRQUN0QixNQUFNLE9BQU8sR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUMzQixNQUFNLE1BQU0sSUFBSSxZQUFZLENBQUM7UUFDN0IsSUFBSSxPQUFPLEVBQUU7VUFDWCxRQUFRLENBQUMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztVQUM3QixHQUFHLE1BQU0sRUFBRSxDQUFDO1NBQ2IsTUFBTTtVQUNMLE1BQU0sY0FBYyxNQUFNLENBQUMsTUFBTSxVQUFVLENBQUM7WUFDMUMsNkJBQTZCO1lBQzdCLEdBQUc7V0FDSixDQUFDLENBQUMsQ0FBQztTQUNMO09BQ0YsQ0FBQztNQUNGLE1BQU0sV0FBVyxtQkFBbUI7UUFDbEMsSUFBSSxPQUFPLEtBQUssS0FBSyxXQUFXLEVBQUU7VUFDaEMsVUFBVSxPQUFPLE1BQU0sQ0FBQztTQUN6QjtPQUNGLENBQUM7TUFDRixNQUFNLGNBQWMsRUFBRSxhQUFhLEtBQUssRUFBRSxDQUFDO01BQzNDLE1BQU0sY0FBYyxLQUFLLENBQUM7UUFDeEIsT0FBTyxjQUFjO1FBQ3JCLE1BQU0sUUFBUTtRQUNkLE1BQU07VUFDSixNQUFNLE9BQU87VUFDYixPQUFPLENBQUM7Y0FDSixNQUFNLGFBQWE7Y0FDbkIsTUFBTSxhQUFhO2NBQ25CLE9BQU8sT0FBTzthQUNmLENBQUM7U0FDTDtRQUNELFNBQVM7VUFDUDtZQUNFLE1BQU0sUUFBUTtZQUNkLE1BQU0sUUFBUTtZQUNkLE1BQU0sUUFBUTtXQUNmO1VBQ0Q7WUFDRSxNQUFNLFFBQVE7WUFDZCxNQUFNLE1BQU07WUFDWixNQUFNLE1BQU07WUFDWixTQUFTLElBQUk7V0FDZDtTQUNGO1FBQ0QsV0FBVztRQUNYLFFBQVE7UUFDUixRQUFRO1FBQ1IsU0FBUyxJQUFJO1FBQ2IsVUFBVSxNQUFNO1VBQ2QsUUFBUSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUMzQjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGFBQWEsVUFBVTtNQUMzQixnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUN6QixNQUFNLDBCQUEwQix5QkFBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNsRSxNQUFNLDBCQUEwQix5QkFBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNsRSxNQUFNLGdCQUFnQixJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztNQUNwRCxNQUFNLGdCQUFnQixJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztNQUNwRCx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUM7TUFDdkYsdUJBQXVCLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxDQUFDLENBQUM7TUFDL0YseUJBQXlCLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDO01BQ3pGLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyxDQUFDO0tBQ2xHLENBQUM7O0lBRUYsTUFBTSwwQkFBMEIsa0dBQWtHO01BQ2hJLE1BQU0sV0FBVyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDckMsTUFBTSxrQkFBa0IsT0FBTyxLQUFLLE9BQU8sR0FBRyxRQUFRLEdBQUcsT0FBTyxDQUFDO01BQ2pFLE1BQU0sYUFBYSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUM7TUFDcEksTUFBTSxhQUFhLEVBQUUsVUFBVSxPQUFPLEVBQUUsQ0FBQztNQUN6QyxPQUFPLCtCQUErQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztLQUMxRixDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsK0ZBQStGLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVE7TUFDaEosSUFBSSxJQUFJLEtBQUssS0FBSyxZQUFZLEVBQUU7UUFDOUIsT0FBTyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLFFBQVEsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQyxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ3ROLE1BQU07UUFDTCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEI7S0FDRixDQUFDLENBQUMsQ0FBQzs7SUFFSixNQUFNLHFCQUFxQixzQkFBc0I7TUFDL0MsTUFBTSxjQUFjLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUNyQyxJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUU7UUFDakIsT0FBTztVQUNMLE1BQU0sTUFBTTtVQUNaLFdBQVcsSUFBSTtTQUNoQixDQUFDO09BQ0gsTUFBTSxJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUU7UUFDN0IsT0FBTztVQUNMLE1BQU0sTUFBTTtVQUNaLFVBQVUsR0FBRyxHQUFHLFdBQVcsS0FBSztVQUNoQyxVQUFVO1lBQ1IsWUFBWSxDQUFDO1lBQ2IsU0FBUyxDQUFDO1dBQ1g7U0FDRixDQUFDO09BQ0gsTUFBTTtRQUNMLE1BQU0sV0FBVyxPQUFPLEtBQUssT0FBTyxHQUFHLG1CQUFtQixHQUFHLHVCQUF1QixDQUFDO1FBQ3JGLE9BQU87VUFDTCxNQUFNLFFBQVE7VUFDZCxhQUFhLEdBQUcsR0FBRyxRQUFRO1VBQzNCLGtCQUFrQixRQUFRO1lBQ3hCLE9BQU8sT0FBTyxLQUFLLE9BQU8sR0FBRyxVQUFVLENBQUMsSUFBSSxRQUFRLEVBQUUscUJBQXFCLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO1dBQ2hHO1NBQ0YsQ0FBQztPQUNIO0tBQ0YsQ0FBQztJQUNGLE1BQU0sMkJBQTJCLHNCQUFzQjtNQUNyRCxJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUU7UUFDakIsT0FBTztVQUNMLE1BQU0sTUFBTTtVQUNaLFdBQVcsS0FBSztVQUNoQixVQUFVLHVCQUF1QjtTQUNsQyxDQUFDO09BQ0gsTUFBTSxJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUU7UUFDN0IsT0FBTztVQUNMLE1BQU0sVUFBVTtVQUNoQixVQUFVLEdBQUcsR0FBRyxzQkFBc0I7VUFDdEMsVUFBVTtZQUNSLFlBQVksQ0FBQztZQUNiLFNBQVMsQ0FBQztXQUNYO1NBQ0YsQ0FBQztPQUNILE1BQU07UUFDTCxPQUFPO1VBQ0wsTUFBTSxRQUFRO1VBQ2QsV0FBVztZQUNULEtBQUssT0FBTyxLQUFLLE9BQU8sR0FBRyxvQkFBb0IsR0FBRyx3QkFBd0I7WUFDMUUsTUFBTSxPQUFPLEtBQUssT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsZUFBZSxFQUFFLENBQUM7V0FDekU7U0FDRixDQUFDO09BQ0g7S0FDRixDQUFDOztJQUVGLE1BQU0sd0JBQXdCLHFCQUFxQjtNQUNqRCxNQUFNLFFBQVEsYUFBYSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztNQUM3QyxNQUFNLFVBQVUsU0FBUyxXQUFXLGFBQWEsQ0FBQyxJQUFJLFNBQVMsV0FBVyxDQUFDLENBQUM7TUFDNUUsTUFBTSxVQUFVLE9BQU8sQ0FBQztNQUN4QixNQUFNLFdBQVcsdUJBQXVCLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTO1FBQ2pGLElBQUksU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztPQUMxQixFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxpQkFBaUIsRUFBRSxJQUFJLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsT0FBTyxVQUFVLENBQUMsQ0FBQztNQUM1RyxNQUFNLGFBQWE7UUFDakIsR0FBRyxRQUFRO1FBQ1gsU0FBUyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ3pCLFVBQVUsa0JBQWtCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQztPQUMvQyxDQUFDO01BQ0YsT0FBTztRQUNMLE1BQU0sUUFBUTtRQUNkLE1BQU0sRUFBRSxPQUFPLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUN4QyxLQUFLO1VBQ0gsS0FBSyxLQUFLO1VBQ1YsU0FBUyxDQUFDLG1CQUFtQixDQUFDO1NBQy9CO1FBQ0QsV0FBVyxJQUFJO1FBQ2YsWUFBWSxDQUFDLE9BQU8sT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7T0FDdEQsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLGdCQUFnQixxQkFBcUI7TUFDekMsTUFBTSxrQkFBa0IsSUFBSSxTQUFTLGtCQUFrQixJQUFJLFNBQVMsV0FBVyxnQkFBZ0IsRUFBRSxDQUFDO01BQ2xHLE9BQU8sSUFBSSxTQUFTLE9BQU8sS0FBSyxDQUFDLE1BQU0sV0FBVyxDQUFDLFNBQVMsV0FBVyxVQUFVLENBQUMsSUFBSSxTQUFTLFdBQVcsQ0FBQyxFQUFFLElBQUksU0FBUyxXQUFXLEVBQUUsZUFBZSxDQUFDLEVBQUUsVUFBVSxNQUFNLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDek4sQ0FBQzs7SUFFRixNQUFNLGdCQUFnQixVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDOUMsTUFBTSxtQkFBbUIsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sdUJBQXVCLGFBQWEsY0FBYyxTQUFTLE9BQU8sVUFBVSxVQUFVLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxVQUFVLEdBQUcsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEksTUFBTSxXQUFXLHFCQUFxQjtNQUNwQyxNQUFNLGVBQWUsS0FBSyxRQUFRLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRTtRQUNuRCxHQUFHO1FBQ0gsR0FBRztPQUNKLENBQUMsQ0FBQztNQUNILE1BQU0sY0FBYyxLQUFLLFFBQVEsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUU7UUFDckQsR0FBRztRQUNILEdBQUc7T0FDSixDQUFDLENBQUM7TUFDSCxNQUFNLFVBQVUsV0FBVztRQUN6QixFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ1YsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ2hCLENBQUM7TUFDRixPQUFPLE9BQU8sQ0FBQztRQUNiLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixZQUFZO1lBQ1YsTUFBTSxRQUFRO1lBQ2QsQ0FBQyxZQUFZLEdBQUcsS0FBSztXQUN0QjtTQUNGO1FBQ0QsWUFBWSxRQUFRLENBQUM7VUFDbkIsTUFBTSxDQUFDLDBCQUEwQixFQUFFO1lBQ2pDLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxRQUFRLE1BQU0sQ0FBQztZQUNsQyxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsV0FBVyxDQUFDO1lBQy9CLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLENBQUM7WUFDdkIsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQztXQUN0QixDQUFDO1VBQ0YsUUFBUSxPQUFPLENBQUM7WUFDZCxhQUFhLG1DQUFtQztZQUNoRCxpQkFBaUIsS0FBSztXQUN2QixDQUFDO1VBQ0YsUUFBUSxPQUFPLENBQUMsRUFBRSxTQUFTLFlBQVksRUFBRSxDQUFDO1NBQzNDLENBQUM7T0FDSCxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxZQUFZLG9DQUFvQztNQUNwRCxNQUFNLFFBQVEsRUFBRSxDQUFDO01BQ2pCLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2hDLE1BQU0sTUFBTSxFQUFFLENBQUM7UUFDZixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtVQUNoQyxNQUFNLFFBQVEsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1VBQ3pDLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDakM7UUFDRCxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUNqQjtNQUNELE9BQU8sS0FBSyxDQUFDO0tBQ2QsQ0FBQztJQUNGLE1BQU0sY0FBYyw2REFBNkQ7TUFDL0UsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDaEMsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUU7VUFDbkMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxXQUFXLElBQUksQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDO1NBQ3BFO09BQ0Y7S0FDRixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsU0FBUyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLE1BQU0sZ0JBQWdCLGNBQWMsTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRSxNQUFNLDRCQUE0QixxQkFBcUI7TUFDckQsTUFBTSxVQUFVLEVBQUUsQ0FBQztNQUNuQixNQUFNLGFBQWEsRUFBRSxDQUFDO01BQ3RCLE1BQU0sZUFBZSxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUNyRCxNQUFNLFFBQVEsU0FBUyxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7TUFDM0QsTUFBTSxpQkFBaUIsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUMzQyxNQUFNLFdBQVcsTUFBTSxDQUFDO1FBQ3RCLEtBQUs7VUFDSCxLQUFLLE1BQU07VUFDWCxTQUFTLENBQUMsZ0NBQWdDLENBQUM7U0FDNUM7UUFDRCxZQUFZLENBQUMsY0FBYyxDQUFDO1FBQzVCLFlBQVksUUFBUSxDQUFDLENBQUMsU0FBUyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUM3QyxDQUFDLENBQUM7TUFDSCxPQUFPO1FBQ0wsTUFBTSxRQUFRO1FBQ2QsTUFBTSxFQUFFLE9BQU8sVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1FBQ3hDLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMsbUJBQW1CLENBQUM7U0FDL0I7UUFDRCxXQUFXLElBQUk7UUFDZixZQUFZLENBQUMsT0FBTyxPQUFPLENBQUM7WUFDeEIsS0FBSztjQUNILEtBQUssS0FBSztjQUNWLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQzthQUNyQztZQUNELFlBQVksY0FBYyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxPQUFPLEVBQUUsQ0FBQztZQUMzRCxZQUFZLFFBQVEsQ0FBQztjQUNuQixNQUFNLENBQUMscUJBQXFCLEVBQUU7Z0JBQzVCLGFBQWEsQ0FBQyxLQUFLO2tCQUNqQixTQUFTLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7aUJBQ2xELENBQUM7Z0JBQ0YsYUFBYSxDQUFDLGFBQWEsRUFBRSxhQUFhO2tCQUN4QyxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sQ0FBQztrQkFDM0IsV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztrQkFDbEQsU0FBUyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNuRSxDQUFDO2dCQUNGLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxhQUFhO2tCQUMzQyxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sQ0FBQztrQkFDM0IsSUFBSSxTQUFTLENBQUM7b0JBQ1osU0FBUyxHQUFHLEdBQUcsQ0FBQztvQkFDaEIsWUFBWSxHQUFHLEdBQUcsQ0FBQzttQkFDcEIsQ0FBQyxDQUFDO2tCQUNILElBQUksQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztpQkFDekIsQ0FBQztlQUNILENBQUM7Y0FDRixNQUFNLE9BQU8sQ0FBQztnQkFDWixVQUFVO2tCQUNSLE9BQU87a0JBQ1AsVUFBVTtpQkFDWDtnQkFDRCxNQUFNLFVBQVU7Z0JBQ2hCLFVBQVUsaUJBQWlCO2VBQzVCLENBQUM7YUFDSCxDQUFDO1dBQ0gsQ0FBQyxDQUFDO09BQ04sQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxpQkFBaUI7TUFDckIsYUFBYSx5QkFBeUI7TUFDdEMsYUFBYSxxQkFBcUI7S0FDbkMsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLHFCQUFxQixLQUFLLENBQUMsY0FBYyxFQUFFLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLE1BQU0sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQzs7SUFFOUgsTUFBTSxtQkFBbUIseUNBQXlDLGNBQWMsSUFBSSxFQUFFLGlCQUFpQixLQUFLLEtBQUs7TUFDL0csTUFBTSxRQUFRLGNBQWMsR0FBRyxvQkFBb0IsQ0FBQyxrQkFBa0IsTUFBTSxDQUFDLEdBQUcsa0JBQWtCLENBQUMsa0JBQWtCLE1BQU0sQ0FBQyxDQUFDO01BQzdILE1BQU0sU0FBUyxjQUFjO1FBQzNCLFdBQVcsTUFBTSxDQUFDLFNBQVMsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUNqRCxZQUFZLFNBQVMsU0FBUyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQ3JELGFBQWEsZUFBZTtVQUMxQixVQUFVLENBQUMsU0FBUyxRQUFRLEVBQUUsQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLEVBQUUsZ0JBQWdCLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxpQkFBaUI7WUFDdEcsS0FBSyxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7V0FDckMsQ0FBQyxDQUFDO1NBQ0o7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLFlBQVksbUJBQW1CLENBQUM7UUFDcEMsU0FBUyxRQUFRO1FBQ2pCLGFBQWEsSUFBSSxLQUFLO1FBQ3RCLGFBQWEsSUFBSSxLQUFLO1FBQ3RCLGFBQWEsUUFBUSxLQUFLLEVBQUU7UUFDNUIsV0FBVyxJQUFJLEtBQUs7UUFDcEIsT0FBTyxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDM0IsV0FBVyxRQUFRLEtBQUssRUFBRTtRQUMxQixpQkFBaUIsSUFBSSxTQUFTO09BQy9CLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDcEMsT0FBTyxnQkFBZ0IsQ0FBQztRQUN0QixNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDckIsTUFBTTtRQUNOLFNBQVMsSUFBSSxRQUFRO1FBQ3JCLFVBQVUsSUFBSTtRQUNkLFNBQVMsSUFBSSxRQUFRO1FBQ3JCLGlCQUFpQixJQUFJO1FBQ3JCLGdCQUFnQixFQUFFO09BQ25CLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0tBQ2pELENBQUM7O0lBRUYsTUFBTSxtQkFBbUIseUNBQXlDLGNBQWMsSUFBSSxLQUFLO01BQ3ZGLE1BQU0sU0FBUyxjQUFjO1FBQzNCLFdBQVcsTUFBTSxDQUFDLFNBQVMsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUNqRCxZQUFZLFNBQVMsU0FBUyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDO09BQ3RELENBQUMsQ0FBQztNQUNILE1BQU0sWUFBWSxtQkFBbUIsQ0FBQztRQUNwQyxTQUFTLFFBQVE7UUFDakIsYUFBYSxJQUFJLEtBQUs7UUFDdEIsYUFBYSxJQUFJLEtBQUs7UUFDdEIsYUFBYSxRQUFRLEtBQUssRUFBRTtRQUM1QixXQUFXLElBQUksS0FBSztRQUNwQixPQUFPLFFBQVEsS0FBSyxFQUFFO1FBQ3RCLFdBQVcsUUFBUSxLQUFLLEVBQUU7UUFDMUIsaUJBQWlCLElBQUksU0FBUztPQUMvQixFQUFFLGtCQUFrQixFQUFFLFdBQVcsQ0FBQyxDQUFDO01BQ3BDLE9BQU8sZ0JBQWdCLENBQUM7UUFDdEIsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ3JCLE1BQU07UUFDTixTQUFTLElBQUksUUFBUTtRQUNyQixVQUFVLElBQUksU0FBUztRQUN2QixTQUFTLElBQUksUUFBUTtRQUNyQixpQkFBaUIsS0FBSztRQUN0QixnQkFBZ0IsRUFBRTtPQUNuQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztLQUNqRCxDQUFDOztJQUVGLE1BQU0sc0JBQXNCLFNBQVM7TUFDbkMsTUFBTSxXQUFXO01BQ2pCLEtBQUs7UUFDSCxLQUFLLEtBQUs7UUFDVixTQUFTO1VBQ1AsZUFBZTtVQUNmLGlCQUFpQjtTQUNsQjtPQUNGO01BQ0QsWUFBWSxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7S0FDNUMsQ0FBQyxDQUFDOztJQUVILE1BQU0sdUJBQXVCLHlDQUF5QyxjQUFjLElBQUksS0FBSztNQUMzRixNQUFNLFNBQVMsY0FBYztRQUMzQixXQUFXLFNBQVM7VUFDbEIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsVUFBVSxNQUFNLFFBQVEsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUN4QyxXQUFXLE1BQU0sQ0FBQyxTQUFTLFdBQVcsQ0FBQyxTQUFTLENBQUM7UUFDakQsWUFBWSxTQUFTLFNBQVMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQztPQUN0RCxDQUFDLENBQUM7TUFDSCxNQUFNLFlBQVksbUJBQW1CLENBQUM7UUFDcEMsYUFBYSxJQUFJLEtBQUs7UUFDdEIsYUFBYSxJQUFJLEtBQUs7UUFDdEIsYUFBYSxRQUFRLEtBQUssRUFBRTtRQUM1QixXQUFXLElBQUksS0FBSztRQUNwQixXQUFXLFFBQVEsS0FBSyxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsTUFBTSxDQUFDLENBQUM7UUFDbkUsT0FBTyxRQUFRLEtBQUssRUFBRTtRQUN0QixpQkFBaUIsSUFBSSxTQUFTO1FBQzlCLFNBQVMsUUFBUTtRQUNqQixNQUFNLElBQUksS0FBSztPQUNoQixFQUFFLGtCQUFrQixFQUFFLFdBQVcsQ0FBQyxDQUFDO01BQ3BDLE9BQU8sU0FBUyxDQUFDLGdCQUFnQixDQUFDO1FBQ2hDLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQztRQUNyQixTQUFTLElBQUksUUFBUTtRQUNyQixNQUFNO1FBQ04sVUFBVSxJQUFJLFNBQVM7UUFDdkIsU0FBUyxJQUFJLFFBQVE7UUFDckIsaUJBQWlCLEtBQUs7UUFDdEIsZ0JBQWdCLEVBQUU7T0FDbkIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixDQUFDLEVBQUU7UUFDL0MsVUFBVTtVQUNSLGFBQWEsV0FBVztVQUN4QixpQkFBaUIsS0FBSztVQUN0QixVQUFVLElBQUksT0FBTztTQUN0QjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxlQUFlLHNCQUFzQixDQUFDO0lBQzVDLE1BQU0sY0FBYyxtQkFBbUIsQ0FBQztJQUN4QyxNQUFNLFNBQVMsZ0JBQWdCLENBQUM7SUFDaEMsTUFBTSxTQUFTLGdCQUFnQixDQUFDO0lBQ2hDLE1BQU0sV0FBVyxvQkFBb0IsQ0FBQztJQUN0QyxNQUFNLFFBQVEsbUJBQW1CLENBQUM7SUFDbEMsTUFBTSxPQUFPLGtCQUFrQixDQUFDOztJQUVoQyxNQUFNLGFBQWEsZ0RBQWdELFdBQVcsWUFBWSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUgsTUFBTSxxQkFBcUIsZ0RBQWdELFdBQVcsWUFBWSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7O0lBRWxJLElBQUksNEJBQTRCLE1BQU0sT0FBTyxDQUFDO1FBQzFDLFdBQVcsSUFBSTtRQUNmLFlBQVksVUFBVTtRQUN0QixvQkFBb0Isa0JBQWtCO0tBQ3pDLENBQUMsQ0FBQzs7SUFFSCxJQUFJLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLE1BQU0sTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUU3RSxNQUFNLFNBQVMsTUFBTTtNQUNuQixNQUFNLFVBQVUsRUFBRSxDQUFDO01BQ25CLE1BQU0sZ0JBQWdCLCtCQUErQjtRQUNuRCxNQUFNLFlBQVksSUFBSSxDQUFDLFlBQVksT0FBTyxDQUFDLENBQUM7UUFDNUMsSUFBSSxTQUFTLE9BQU8sS0FBSyxDQUFDLEVBQUU7VUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1NBQzdELE1BQU07VUFDTCxPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDcEM7T0FDRixDQUFDO01BQ0YsTUFBTSxjQUFjLG1DQUFtQztRQUNyRCxPQUFPLGFBQWEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNO1VBQ3hELE1BQU0sVUFBVSxLQUFLLENBQUMsWUFBWSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyw4Q0FBOEMsR0FBRyxJQUFJLENBQUMsQ0FBQztVQUNqSCxNQUFNLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1VBQ2hDLE1BQU0sUUFBUSxTQUFTLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDaEQsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztVQUN0QixPQUFPLEtBQUssQ0FBQztTQUNkLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLGNBQWMsbUNBQW1DO1FBQ3JELE9BQU8sYUFBYSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU07VUFDckQsS0FBSyxDQUFDLFlBQVksT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsOENBQThDLEdBQUcsSUFBSSxDQUFDLENBQUM7VUFDakcsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO1NBQ3hCLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLFlBQVksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQ2pDLE9BQU8sSUFBSSxDQUFDO1FBQ1YsU0FBUztRQUNULFdBQVc7UUFDWCxXQUFXO09BQ1osQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixJQUFJLDZCQUE2QixNQUFNLE9BQU8sQ0FBQztRQUMzQyxXQUFXLElBQUk7UUFDZixNQUFNLE1BQU07S0FDZixDQUFDLENBQUM7O0lBRUgsTUFBTSxXQUFXLFFBQVEsQ0FBQztNQUN4QixRQUFRLGNBQWM7TUFDdEIsTUFBTSxVQUFVO01BQ2hCLE1BQU0sWUFBWTtNQUNsQixPQUFPLGFBQWE7S0FDckIsQ0FBQyxDQUFDOztJQUVILE1BQU0sT0FBTyxVQUFVO01BQ3JCLElBQUksT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO01BQzNCLElBQUksWUFBWSxFQUFFLENBQUM7TUFDbkIsTUFBTSxNQUFNLEtBQUssSUFBSSxDQUFDLGFBQWE7UUFDakMsR0FBRyxDQUFDLFFBQVE7VUFDVixTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDcEIsQ0FBQyxDQUFDO09BQ0osQ0FBQyxDQUFDO01BQ0gsTUFBTSxNQUFNLGFBQWE7UUFDdkIsSUFBSSxPQUFPLEVBQUUsRUFBRTtVQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNqQixNQUFNO1VBQ0wsU0FBUyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDM0I7T0FDRixDQUFDO01BQ0YsTUFBTSxNQUFNLEtBQUs7UUFDZixJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUU7VUFDZCxPQUFPLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3hCLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztVQUNmLFlBQVksRUFBRSxDQUFDO1NBQ2hCO09BQ0YsQ0FBQztNQUNGLE1BQU0sVUFBVSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7TUFDcEMsTUFBTSxNQUFNLE9BQU87UUFDakIsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUNuQixDQUFDO01BQ0YsTUFBTSxPQUFPLE1BQU07UUFDakIsSUFBSSxLQUFLLENBQUMsS0FBSztVQUNiLFVBQVUsQ0FBQyxNQUFNO1lBQ2YsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ1AsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNQLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDWixPQUFPO1FBQ0wsR0FBRztRQUNILEdBQUc7UUFDSCxPQUFPO09BQ1IsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFNBQVMsS0FBSyxJQUFJLENBQUMsWUFBWTtNQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDYixDQUFDLENBQUM7SUFDSCxNQUFNLFlBQVk7TUFDaEIsSUFBSSxJQUFJO01BQ1IsTUFBTSxNQUFNO0tBQ2IsQ0FBQzs7SUFFRixNQUFNLGdCQUFnQixPQUFPO01BQzNCLFVBQVUsQ0FBQyxNQUFNO1FBQ2YsTUFBTSxHQUFHLENBQUM7T0FDWCxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ1AsQ0FBQztJQUNGLE1BQU0sU0FBUyxPQUFPO01BQ3BCLE1BQU0sTUFBTSxZQUFZO1FBQ3RCLEdBQUcsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO09BQ3JDLENBQUM7TUFDRixNQUFNLE1BQU0sT0FBTztRQUNqQixPQUFPLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztPQUN0QyxDQUFDO01BQ0YsTUFBTSxPQUFPLFlBQVk7UUFDdkIsT0FBTyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsS0FBSyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDL0QsQ0FBQztNQUNGLE1BQU0sV0FBVyxXQUFXO1FBQzFCLE9BQU8sTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLEtBQUssQ0FBQyxNQUFNLE9BQU8sVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQzVELENBQUM7TUFDRixNQUFNLFNBQVMsTUFBTTtRQUNuQixPQUFPLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO09BQzFCLENBQUM7TUFDRixNQUFNLFdBQVcsTUFBTTtRQUNyQixJQUFJLFFBQVEsSUFBSSxDQUFDO1FBQ2pCLE9BQU8sTUFBTSxDQUFDLE1BQU07VUFDbEIsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ2xCLFFBQVEsR0FBRyxFQUFFLENBQUM7V0FDZjtVQUNELE9BQU8sS0FBSyxDQUFDO1NBQ2QsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sWUFBWSxHQUFHLENBQUM7TUFDdEIsT0FBTztRQUNMLEdBQUc7UUFDSCxJQUFJO1FBQ0osUUFBUTtRQUNSLE1BQU07UUFDTixRQUFRO1FBQ1IsU0FBUztRQUNULEdBQUc7T0FDSixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sT0FBTyxVQUFVO01BQ3JCLE9BQU8sTUFBTSxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUMxQyxDQUFDO0lBQ0YsTUFBTSxPQUFPLEtBQUs7TUFDaEIsT0FBTyxNQUFNLENBQUMsTUFBTSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3pDLENBQUM7SUFDRixNQUFNLFNBQVM7TUFDYixJQUFJLElBQUk7TUFDUixJQUFJO0tBQ0wsQ0FBQzs7SUFFRixNQUFNLFNBQVMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sYUFBYSxVQUFVLENBQUMsUUFBUSxDQUFDO01BQ3JDLE1BQU0sTUFBTSxFQUFFO01BQ2QsV0FBVyxVQUFVLENBQUM7UUFDcEIsS0FBSyxFQUFFLEtBQUssS0FBSyxFQUFFO1FBQ25CLFlBQVksUUFBUSxDQUFDLENBQUMsV0FBVyxPQUFPLENBQUMsRUFBRSxVQUFVLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRSxRQUFRLFFBQVEsQ0FBQztVQUNmLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztVQUNqQixNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7VUFDbkIsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2hCLENBQUM7T0FDSCxDQUFDO0tBQ0gsQ0FBQyxDQUFDLENBQUM7O0lBRUosTUFBTSxZQUFZLHVCQUF1QjtNQUN2QyxNQUFNLFVBQVUsTUFBTSxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUM5RCxNQUFNLE9BQU8sU0FBUyxDQUFDO01BQ3ZCLE1BQU0sWUFBWSxNQUFNLG1CQUFtQixFQUFFLENBQUM7TUFDOUMsT0FBTyxNQUFNLFFBQVEsS0FBSyxDQUFDLE9BQU87UUFDaEMsSUFBSTtRQUNKLE9BQU87UUFDUCxTQUFTO09BQ1YsQ0FBQyxFQUFFLFlBQVk7UUFDZCxJQUFJO1FBQ0osT0FBTztRQUNQLFNBQVM7UUFDVCxPQUFPO09BQ1IsQ0FBQyxDQUFDLENBQUM7S0FDTCxDQUFDO0lBQ0YsTUFBTSxRQUFRLGlDQUFpQztNQUM3QyxNQUFNLFVBQVUsTUFBTSxNQUFNLENBQUM7TUFDN0IsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUN6QyxDQUFDO0lBQ0YsTUFBTSxRQUFRLDhFQUE4RTtNQUMxRixNQUFNLGFBQWEsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7TUFDdEQsTUFBTSxjQUFjLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDL0MsT0FBTyxVQUFVLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLFFBQVEsUUFBUSxLQUFLLENBQUMsVUFBVSxPQUFPLENBQUM7UUFDaEYsR0FBRyxTQUFTLEtBQUssRUFBRTtRQUNuQixLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDbkIsSUFBSTtRQUNKLGVBQWU7UUFDZixZQUFZLGlCQUFpQjtVQUMzQixNQUFNLE9BQU8sV0FBVyxFQUFFLFNBQVMsRUFBRSxDQUFDO1VBQ3RDLFdBQVcsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1VBQzdDLFVBQVUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzdCO1FBQ0QsZUFBZSwwQkFBMEI7VUFDdkMsTUFBTSxPQUFPLFdBQVcsRUFBRSxTQUFTLEVBQUUsQ0FBQztVQUN0QyxXQUFXLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQ2xDLFFBQVE7Y0FDTixNQUFNLFNBQVM7Y0FDZixJQUFJO2FBQ0w7V0FDRixDQUFDLENBQUM7VUFDSCxVQUFVLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM3QjtRQUNELGtCQUFrQix5Q0FBeUM7VUFDekQsTUFBTSxPQUFPLFdBQVcsRUFBRSxTQUFTLEVBQUUsQ0FBQztVQUN0QyxXQUFXLFNBQVMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztVQUNwRCxNQUFNLENBQUMsZUFBZSxFQUFFLE1BQU07WUFDNUIsV0FBVyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsY0FBYyxFQUFFO2NBQzNDLFFBQVE7Z0JBQ04sTUFBTSxTQUFTO2dCQUNmLE1BQU0sRUFBRSxlQUFlO2VBQ3hCO2FBQ0YsQ0FBQyxDQUFDO1dBQ0osQ0FBQyxDQUFDO1NBQ0o7UUFDRCxVQUFVLE1BQU07VUFDZCxRQUFRLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztVQUMxQixVQUFVLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztVQUMxQixPQUFPLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVCO09BQ0YsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ1AsQ0FBQztJQUNGLE1BQU0sT0FBTyxnRkFBZ0Y7TUFDM0YsTUFBTSxTQUFTLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDMUMsTUFBTSxZQUFZLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztNQUNoRyxPQUFPLFNBQVMsSUFBSSxDQUFDLFNBQVM7UUFDNUIsS0FBSyxLQUFLLENBQUMsTUFBTTtVQUNmLElBQUksVUFBVSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDOUIsVUFBVSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7V0FDM0I7U0FDRixFQUFFLFFBQVE7VUFDVCxVQUFVLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztVQUMxQixVQUFVLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7VUFDL0IsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3JCLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDO09BQ2hCLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFFBQVEscUZBQXFGO01BQ2pHLFVBQVUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQzFCLE9BQU8sTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDN0IsQ0FBQztJQUNGLE1BQU0sY0FBYyx1RUFBdUU7TUFDekYsTUFBTSxVQUFVLFFBQVEsV0FBVyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztNQUN4RCxNQUFNLFVBQVUsVUFBVSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDM0MsTUFBTSxTQUFTLE9BQU8sR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO01BQ3RDLE9BQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0tBQzNGLENBQUM7SUFDRixNQUFNLGFBQWEscUNBQXFDO01BQ3RELE1BQU0sT0FBTyxTQUFTLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQzlELE1BQU0sY0FBYyxLQUFLLENBQUMsT0FBTyxRQUFRLENBQUMsQ0FBQztNQUMzQyxJQUFJLFdBQVcsRUFBRTtRQUNmLEtBQUssQ0FBQyxJQUFJLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDO09BQ3RELE1BQU07UUFDTCxLQUFLLENBQUMsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7T0FDbEM7S0FDRixDQUFDO0lBQ0YsTUFBTSxVQUFVLDZCQUE2QixXQUFXLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVSxJQUFJLEdBQUcsR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsTUFBTSxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxVQUFVLFNBQVMsS0FBSyxDQUFDLE1BQU0sTUFBTSxNQUFNLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDLEVBQUUsY0FBYyxNQUFNLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeFcsTUFBTSxvQkFBb0IsV0FBVztNQUNuQyxVQUFVLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVM7UUFDekMsVUFBVSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztPQUNuQyxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsNkJBQTZCO01BQ2pELE1BQU0sZUFBZSxPQUFPLEVBQUUsQ0FBQztNQUMvQixNQUFNLFNBQVMscUJBQXFCO1FBQ2xDLE1BQU0sU0FBUyxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLFlBQVksS0FBSyxDQUFDLE9BQU8sUUFBUSxDQUFDLENBQUM7UUFDbkMsSUFBSSxNQUFNLFdBQVcsRUFBRTtVQUNyQixVQUFVLENBQUMsTUFBTSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sWUFBWSxDQUFDLENBQUM7U0FDdEQ7UUFDRCxNQUFNLE9BQU8sQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLE9BQU8sS0FBSyxTQUFTLEVBQUU7VUFDdkQsTUFBTSxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2hDO09BQ0YsQ0FBQztNQUNGLE1BQU0sVUFBVSxxQkFBcUI7UUFDbkMsWUFBWSxPQUFPLENBQUMsT0FBTyxRQUFRLENBQUMsQ0FBQztRQUNyQyxJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksTUFBTSxRQUFRLEtBQUssU0FBUyxFQUFFO1VBQ3hELE1BQU0sUUFBUSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNqQztPQUNGLENBQUM7TUFDRixNQUFNLFdBQVcsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztNQUMxQyxPQUFPO1FBQ0wsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsTUFBTSxlQUFlO1VBQzlCLFlBQVk7WUFDVixJQUFJLFlBQVksR0FBRztZQUNuQixNQUFNLFNBQVM7V0FDaEI7U0FDRjtRQUNELFlBQVksZ0JBQWdCLFFBQVEsQ0FBQyxNQUFNLGtCQUFrQixFQUFFO1VBQzdELFlBQVksT0FBTyxDQUFDO1lBQ2xCLE9BQU87Y0FDTCxNQUFNLFFBQVE7Y0FDZCxjQUFjLE9BQU87YUFDdEI7V0FDRixDQUFDO1VBQ0YsVUFBVSxPQUFPLENBQUM7WUFDaEIsTUFBTTtZQUNOLE9BQU87WUFDUCxVQUFVLGdDQUFnQztjQUN4QyxPQUFPLFVBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQzthQUN0RTtZQUNELGdCQUFnQixNQUFNO2NBQ3BCLE9BQU8sUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDO2FBQzlCO1dBQ0YsQ0FBQztVQUNGLFNBQVMsT0FBTyxDQUFDO1lBQ2YsTUFBTSxXQUFXO2NBQ2YsT0FBTyxVQUFVLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsU0FBUyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUM5RTtXQUNGLENBQUM7VUFDRixTQUFTLE9BQU8sQ0FBQztZQUNmLFVBQVU7Y0FDUixHQUFHLGtCQUFrQixDQUFDLEVBQUUsYUFBYSxLQUFLLEVBQUUsQ0FBQztjQUM3QyxHQUFHLGdCQUFnQixDQUFDLEVBQUUsY0FBYyxpQkFBaUIsRUFBRSxDQUFDO2FBQ3pEO1dBQ0YsQ0FBQztTQUNILENBQUM7T0FDSCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLFFBQVE7TUFDOUIsTUFBTSxVQUFVLFFBQVEsV0FBVyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztNQUNyRCxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUM1QixDQUFDOztJQUVGLE1BQU0sZ0JBQWdCLE1BQU07TUFDMUIsU0FBUyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztNQUMvQixnQkFBZ0IsTUFBTSxDQUFDLG1CQUFtQixFQUFFO1FBQzFDLFNBQVM7UUFDVCxTQUFTO1FBQ1QsVUFBVTtRQUNWLFlBQVk7T0FDYixDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLFdBQVcsVUFBVSxDQUFDO01BQzFCLFVBQVUsQ0FBQyxLQUFLLENBQUM7TUFDakIsVUFBVSxDQUFDLE9BQU8sQ0FBQztNQUNuQixTQUFTLENBQUMsUUFBUSxDQUFDO01BQ25CLGlCQUFpQixDQUFDLFdBQVcsQ0FBQztNQUM5QixTQUFTLENBQUMsWUFBWSxFQUFFLFFBQVEsS0FBSyxDQUFDO01BQ3RDLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDL0MsUUFBUSxFQUFFO01BQ1YsS0FBSyxDQUFDLG9CQUFvQixFQUFFO1FBQzFCLFFBQVE7UUFDUixRQUFRO1FBQ1IsTUFBTTtRQUNOLFFBQVE7T0FDVCxDQUFDO01BQ0YsVUFBVSxDQUFDLGFBQWEsQ0FBQztNQUN6QixTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztNQUMzQixRQUFRLENBQUMsVUFBVSxDQUFDO01BQ3BCLFNBQVMsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDO01BQzlCLFNBQVMsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDO01BQy9CLFFBQVEsQ0FBQyxNQUFNLENBQUM7S0FDakIsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzQixNQUFNLFVBQVUsVUFBVSxDQUFDO01BQ3pCLFFBQVEsQ0FBQztRQUNQLFFBQVE7VUFDTixpQkFBaUIsRUFBRTtVQUNuQixTQUFTLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQztTQUM5QjtRQUNELE1BQU0sTUFBTTtRQUNaLFVBQVUsVUFBVTtVQUNsQixPQUFPLEVBQUUsV0FBVyxNQUFNLFVBQVUsRUFBRSxDQUFDO1NBQ3hDO09BQ0YsQ0FBQztNQUNGLFVBQVUsRUFBRTtLQUNiLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFlBQVksMENBQTBDO01BQzFELE1BQU0sYUFBYSxRQUFRLEtBQUssQ0FBQyxNQUFNLElBQUksRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQzdGLE1BQU0sZUFBZSxXQUFXO1FBQzlCLFVBQVUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUztVQUN6QyxVQUFVLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3BDLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLGdCQUFnQiwrQ0FBK0M7UUFDbkUsT0FBTyxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQztPQUM1RixDQUFDO01BQ0YsTUFBTSxTQUFTLGFBQWE7UUFDMUIsTUFBTSxhQUFhLFlBQVksQ0FBQztRQUNoQyxhQUFhLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxlQUFlLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0RixDQUFDO01BQ0YsTUFBTSxPQUFPO1FBQ1gsUUFBUSxRQUFRO1VBQ2QsSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3hCLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLGVBQWUsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUNwRTtTQUNGO1FBQ0QsTUFBTSxRQUFRO1VBQ1osSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3hCLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLGVBQWUscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1dBQzNFO1NBQ0Y7UUFDRCxTQUFTLFFBQVE7VUFDZixNQUFNLGFBQWEsUUFBUSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7VUFDaEUsT0FBTyxVQUFVLEtBQUssQ0FBQyxNQUFNO1lBQzNCLE9BQU8sYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsZUFBZSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDbEYsRUFBRSxlQUFlO1lBQ2hCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGVBQWUscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1dBQ25ILENBQUMsQ0FBQztTQUNKO1FBQ0QsUUFBUSxRQUFRLEtBQUs7UUFDckIsT0FBTyxRQUFRO1VBQ2IsSUFBSSxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2QixhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxlQUFlLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUMzRTtTQUNGO1FBQ0QsaUJBQWlCLFFBQVE7VUFDdkIsSUFBSSxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2QixlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDdkI7U0FDRjtPQUNGLENBQUM7TUFDRixNQUFNLGlCQUFpQixlQUFlO1FBQ3BDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixPQUFPLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzVCLENBQUM7TUFDRixPQUFPO1FBQ0wsS0FBSyxNQUFNLElBQUk7UUFDZixLQUFLLE1BQU0sSUFBSTtRQUNmLFVBQVU7UUFDVixZQUFZLE9BQU8sQ0FBQyxNQUFNLG1CQUFtQixFQUFFO1VBQzdDLFFBQVEsT0FBTyxDQUFDO1lBQ2QsYUFBYSxNQUFNLFlBQVk7WUFDL0IsTUFBTSxFQUFFLE1BQU0sVUFBVSxFQUFFO1dBQzNCLENBQUM7VUFDRixRQUFRLE9BQU8sQ0FBQztZQUNkLFFBQVE7Y0FDTixTQUFTLFdBQVc7Z0JBQ2xCLE9BQU8sYUFBYSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUU7a0JBQ3BDLFFBQVEsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUM7a0JBQ2xDLFNBQVMsTUFBTSxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUM7aUJBQ3JDLENBQUMsQ0FBQztlQUNKO2FBQ0Y7V0FDRixDQUFDO1VBQ0YsTUFBTSxPQUFPLENBQUM7WUFDWixNQUFNLFNBQVM7WUFDZixTQUFTLGNBQWM7WUFDdkIsU0FBUyxjQUFjO1lBQ3ZCLFFBQVEsZUFBZTtjQUNyQixJQUFJLFFBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN6QixNQUFNLFVBQVUsUUFBUSxXQUFXLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUNyRCxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7ZUFDdkIsTUFBTTtnQkFDTCxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztlQUNyQjtjQUNELE9BQU8sUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDNUI7WUFDRCxVQUFVLGVBQWU7Y0FDdkIsSUFBSSxRQUFRLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDekIsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3JCLE9BQU8sUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7ZUFDNUIsTUFBTTtnQkFDTCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7ZUFDeEI7YUFDRjtXQUNGLENBQUM7VUFDRixRQUFRLE9BQU8sQ0FBQyxFQUFFLENBQUM7U0FDcEIsQ0FBQztRQUNGLFFBQVEsUUFBUSxDQUFDLFFBQVEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLFlBQVk7VUFDVixHQUFHLE1BQU0sV0FBVztVQUNwQixDQUFDLFNBQVMsRUFBRSxHQUFHO1lBQ2IsV0FBVztZQUNYLFVBQVU7WUFDVixzQkFBc0I7V0FDdkI7U0FDRjtRQUNELElBQUk7UUFDSixpQkFBaUI7VUFDZixZQUFZO1lBQ1YsaUJBQWlCLE1BQU07WUFDdkIsR0FBRyxNQUFNLEtBQUssS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDbkQsR0FBRyxNQUFNLElBQUksSUFBSSxLQUFLLFFBQVEsR0FBRyxFQUFFLE1BQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFO1dBQ25GO1NBQ0Y7T0FDRixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sV0FBVyxTQUFTLENBQUM7TUFDekIsTUFBTSxVQUFVO01BQ2hCLGNBQWMsUUFBUSxFQUFFO01BQ3hCLFlBQVksT0FBTyxFQUFFO01BQ3JCLFNBQVMsU0FBUztNQUNsQixNQUFNO1FBQ0osTUFBTSxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3JDLFNBQVMsZ0JBQWdCLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQztRQUMzQyxRQUFRLGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDekMsT0FBTyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3ZDLFFBQVEsZ0JBQWdCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQztRQUN6QyxpQkFBaUIsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDO09BQzVEO0tBQ0YsQ0FBQyxDQUFDOztJQUVILE1BQU0scUJBQXFCLGNBQWM7TUFDdkMsUUFBUSxVQUFVLFdBQVc7V0FDeEIsV0FBVyxFQUFFO1VBQ2QsT0FBTyxFQUFFLFVBQVUsUUFBUSxFQUFFLENBQUM7U0FDL0I7ZUFDTTtVQUNMLE9BQU87WUFDTCxVQUFVLFlBQVk7WUFDdEIsVUFBVTtXQUNYLENBQUM7U0FDSDtPQUNGO0tBQ0YsQ0FBQztJQUNGLE1BQU0sdUJBQXVCLHVCQUF1QjtNQUNsRCxNQUFNLFdBQVcsWUFBWSxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQztNQUM1RCxNQUFNLG1CQUFtQixpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7TUFDL0UsUUFBUSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNO1FBQ25DLE1BQU0saUJBQWlCLFFBQVEsV0FBVyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNoRSxnQkFBZ0IsS0FBSyxDQUFDLGlCQUFpQixpQkFBaUIsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLGFBQWEsWUFBWSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDckksQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sMkJBQTJCLHFCQUFxQjtNQUNwRCxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGNBQWM7UUFDcEQsdUJBQXVCLENBQUMsV0FBVyxFQUFFLFVBQVUsUUFBUSxFQUFFLEVBQUUsTUFBTSxVQUFVLEVBQUUsRUFBRSxNQUFNLGlCQUFpQixDQUFDLENBQUM7T0FDekcsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sd0JBQXdCLGVBQWU7TUFDM0MsT0FBTyxVQUFVLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksZUFBZSxDQUFDLEtBQUssQ0FBQyxZQUFZLGVBQWUsQ0FBQyxDQUFDO0tBQzdHLENBQUM7SUFDRixNQUFNLG1CQUFtQixrQkFBa0I7TUFDekMsT0FBTyxHQUFHLENBQUMsY0FBYyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxjQUFjLFFBQVEsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxjQUFjLFFBQVEsRUFBRSxHQUFHLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztLQUMvSixDQUFDO0lBQ0YsTUFBTSx3QkFBd0IsbUNBQW1DO01BQy9ELGNBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWE7UUFDMUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sbUJBQW1CLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELGdCQUFnQixLQUFLLENBQUMsZUFBZTtVQUNuQyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxTQUFTLFFBQVEsRUFBRSxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztTQUN6RyxDQUFDLENBQUM7T0FDSixDQUFDLENBQUM7TUFDSCxLQUFLLENBQUMsUUFBUSxRQUFRLEVBQUUsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ2xELENBQUM7SUFDRixNQUFNLDBCQUEwQixtQ0FBbUM7TUFDakUsS0FBSyxDQUFDLFFBQVEsUUFBUSxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNuRCxDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsYUFBYTtNQUNwQyxjQUFjLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsUUFBUSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztLQUM5RSxDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsZ0JBQWdCO01BQ3ZDLE1BQU0saUJBQWlCLFFBQVEsbUJBQW1CLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQzVFLE9BQU8sY0FBYyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDekcsQ0FBQzs7SUFFRixJQUFJLFNBQVMsQ0FBQztJQUNkLENBQUMscUJBQXFCO01BQ3BCLFNBQVMsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDO01BQzFELFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO0tBQ2pELENBQUMsU0FBUyxLQUFLLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNsQyxNQUFNLDJCQUEyQixtRUFBbUU7TUFDbEcsTUFBTSxxQkFBcUIsU0FBUyxPQUFPLFVBQVUsQ0FBQztNQUN0RCxNQUFNLHlCQUF5QixZQUFZLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxHQUFHO1FBQ3hFLEdBQUcsUUFBUTtRQUNYLFVBQVUsUUFBUSxLQUFLLEVBQUU7UUFDekIsTUFBTSxRQUFRLEtBQUssT0FBTyxFQUFFLEdBQUcsUUFBUSxLQUFLLEVBQUUsR0FBRyxRQUFRLEtBQUs7T0FDL0QsQ0FBQztNQUNGLFFBQVEsSUFBSSxLQUFLO1dBQ1osVUFBVTtRQUNiLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssUUFBUSxLQUFLLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDbEosZ0JBQWdCO1FBQ25CLE9BQU8sb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxRQUFRLEtBQUssQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUMxSyxnQkFBZ0I7UUFDbkIsT0FBTyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLFFBQVEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQzFKLFdBQVc7UUFDZCxPQUFPLHVCQUF1QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssUUFBUSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUN4RixlQUFlO1FBQ2xCLE9BQU8sbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7ZUFDdEU7VUFDTCxPQUFPLE1BQU0sQ0FBQyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQztVQUNwRCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7U0FDeEI7T0FDRjtLQUNGLENBQUM7SUFDRixNQUFNLDBCQUEwQiwrRkFBK0Y7TUFDN0gsTUFBTSxhQUFhLE9BQU8sS0FBSyxDQUFDLENBQUM7TUFDakMsTUFBTSxjQUFjLENBQUMsVUFBVSxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUN2RCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVE7UUFDOUIsUUFBUSxJQUFJLEtBQUs7YUFDWixXQUFXO1VBQ2QsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLFFBQVEsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDcEYsY0FBYztVQUNqQixPQUFPLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ3hFLEdBQUcsQ0FBQztZQUNKLFVBQVUsT0FBTztjQUNmLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2NBQ2hCLGtCQUFrQixDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDckM7V0FDRixFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUU7WUFDaEMsZ0JBQWdCLGdCQUFnQixDQUFDLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQztZQUN6RCxVQUFVO2NBQ1IsU0FBUztjQUNULFdBQVc7YUFDWjtXQUNGLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDRixrQkFBa0I7O1VBRXJCLE9BQU8sdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxRQUFRLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzlMO09BQ0YsQ0FBQyxDQUFDLENBQUM7S0FDTCxDQUFDO0lBQ0YsTUFBTSxvQkFBb0IseUVBQXlFO01BQ2pHLE1BQU0sV0FBVyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDckMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVE7UUFDMUMsTUFBTSxjQUFjLEtBQUssZ0JBQWdCLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUN6RSxNQUFNLGFBQWEsS0FBSyx3QkFBd0IsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUMvRyxJQUFJLElBQUksS0FBSyxLQUFLLGdCQUFnQixJQUFJLElBQUksZ0JBQWdCLEVBQUUsT0FBTyxJQUFJLENBQUMsRUFBRTtVQUN4RSxPQUFPLFVBQVUsQ0FBQztZQUNoQixHQUFHLElBQUk7WUFDUCxTQUFTLEtBQUs7V0FDZixDQUFDLENBQUM7U0FDSixNQUFNO1VBQ0wsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekI7T0FDRixDQUFDLENBQUMsQ0FBQztNQUNKLE1BQU0sYUFBYSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztNQUNsRCxNQUFNLGdCQUFnQixnQkFBZ0IsR0FBRyx5Q0FBeUMsR0FBRywrQkFBK0IsQ0FBQztNQUNySCxPQUFPLGFBQWEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FDbEUsQ0FBQztJQUNGLE1BQU0sdUJBQXVCLGVBQWUsVUFBVSxXQUFXLENBQUMsV0FBVyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbEcsTUFBTSx1QkFBdUIsOENBQThDO01BQ3pFLE1BQU0sV0FBVyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDdEQsTUFBTSxjQUFjLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUNyQyxPQUFPO1FBQ0wsTUFBTSxvQkFBb0IsQ0FBQztVQUN6QixHQUFHLFdBQVc7VUFDZCxRQUFRO1VBQ1IsZ0JBQWdCLGdCQUFnQixjQUFjLENBQUMsT0FBTyxLQUFLLE1BQU0sR0FBRyxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsZUFBZTtjQUNuRyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxXQUFXLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxxQkFBcUIsS0FBSztnQkFDcEUsTUFBTSxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztlQUMvQyxDQUFDLENBQUM7YUFDSixDQUFDLENBQUMsQ0FBQztTQUNQLENBQUM7UUFDRixNQUFNO1VBQ0osU0FBUyxPQUFPLENBQUMsT0FBTyxDQUFDO1VBQ3pCLFdBQVcsU0FBUyxLQUFLLFNBQVMsYUFBYTtTQUNoRDtPQUNGLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sd0JBQXdCLG9CQUFvQjtNQUNoRCxPQUFPLFFBQVEsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxTQUFTLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPO1FBQ3pFLE1BQU0sUUFBUSxHQUFHLFVBQVUsRUFBRSxDQUFDO1FBQzlCLEtBQUssV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDMUIsT0FBTyxLQUFLLENBQUM7T0FDZCxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxhQUFhLDZCQUE2QjtNQUM5QyxNQUFNLG1CQUFtQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDckMsTUFBTSxjQUFjLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUNoQyxNQUFNLGdCQUFnQixPQUFPLENBQUMsVUFBVSxPQUFPLENBQUM7UUFDOUMsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQztTQUMvQjtRQUNELFlBQVksRUFBRTtRQUNkLDJCQUEyQixFQUFFO1FBQzdCLGtCQUFrQixRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwSCxVQUFVLGVBQWUsUUFBUTtPQUNsQyxDQUFDLENBQUMsQ0FBQztNQUNKLE1BQU0sYUFBYSxNQUFNLFVBQVUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO01BQzFELE1BQU0sV0FBVyxXQUFXLElBQUksQ0FBQztNQUNqQyxNQUFNLGtCQUFrQixNQUFNO1FBQzVCLElBQUksVUFBVSxFQUFFLEVBQUU7VUFDaEIsVUFBVSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDaEM7T0FDRixDQUFDO01BQ0YsTUFBTSxVQUFVLE1BQU0sVUFBVSxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxTQUFTO1FBQ3ZFLE9BQU8sS0FBSyxDQUFDLEtBQUssV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDckMsQ0FBQyxDQUFDO01BQ0gsTUFBTSxvQkFBb0IsTUFBTSxNQUFNLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO01BQzVFLE1BQU0sbUJBQW1CLFdBQVc7UUFDbEMsTUFBTSxVQUFVLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxRQUFRLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RSxPQUFPLE1BQU0sQ0FBQyxPQUFPLEVBQUUsU0FBUztVQUM5QixNQUFNLFVBQVUsS0FBSyxNQUFNLENBQUM7VUFDNUIsT0FBTyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQUUseUJBQXlCO1lBQ2hGLE1BQU0sS0FBSyxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7WUFDckMscUJBQXFCLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTO2NBQ2xELE1BQU0sbUJBQW1CO2dCQUN2QixNQUFNLE1BQU0saUJBQWlCLEVBQUU7Z0JBQy9CLFFBQVEsZ0JBQWdCO2tCQUN0QixlQUFlLEVBQUUsQ0FBQztrQkFDbEIsTUFBTSxZQUFZLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztpQkFDdkU7ZUFDRixDQUFDO2NBQ0YsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztjQUMzQixLQUFLLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2NBQzdELGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDN0IsQ0FBQyxDQUFDO1dBQ0osRUFBRSxPQUFPLEVBQUUsY0FBYyxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsS0FBSyxZQUFZLENBQUMsQ0FBQztTQUNuRixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxVQUFVLHVCQUF1QjtRQUNyQyxNQUFNLENBQUMsWUFBWSxRQUFRLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXO1VBQzdELE1BQU0sVUFBVSxPQUFPLENBQUMsVUFBVSxFQUFFLE1BQU0sUUFBUSxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDOUUsVUFBVSxXQUFXLENBQUMsYUFBYSxFQUFFO1lBQ25DLFFBQVE7Y0FDTixNQUFNLE1BQU07Y0FDWixNQUFNLFlBQVksUUFBUSxDQUFDLE1BQU0sUUFBUSxFQUFFLENBQUM7Y0FDNUMsTUFBTSxRQUFRLEtBQUssQ0FBQyxPQUFPLENBQUM7YUFDN0I7V0FDRixFQUFFLG9CQUFvQixDQUFDLCtCQUErQixDQUFDLHFCQUFxQixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsVUFBVSxRQUFRLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQzNLLENBQUMsQ0FBQztRQUNILE9BQU8sRUFBRSxLQUFLLENBQUMsWUFBWSxlQUFlLENBQUMsQ0FBQztPQUM3QyxDQUFDO01BQ0YsTUFBTSxnQkFBZ0IsY0FBYztRQUNsQyxNQUFNLGdCQUFnQixnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRCxJQUFJLGFBQWEsT0FBTyxHQUFHLENBQUMsRUFBRTtVQUM1QixPQUFPLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1NBQ3BDLE1BQU07VUFDTCxlQUFlLEVBQUUsQ0FBQztTQUNuQjtPQUNGLENBQUM7TUFDRixNQUFNLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLFlBQVksS0FBSztRQUNoRCxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixnQkFBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztPQUMzQixDQUFDLENBQUM7TUFDSCxNQUFNLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLFlBQVksS0FBSyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztNQUM5RSxNQUFNLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxNQUFNO1FBQ2xDLGVBQWUsRUFBRSxDQUFDO1FBQ2xCLFdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7T0FDN0IsQ0FBQyxDQUFDO01BQ0gsTUFBTSxxQkFBcUI7UUFDekIsaUJBQWlCO1FBQ2pCLFVBQVU7UUFDVixRQUFRO1FBQ1Isb0JBQW9CLGdCQUFnQixJQUFJO1FBQ3hDLE9BQU87T0FDUixDQUFDO01BQ0YseUJBQXlCLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUM3RCxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsRUFBRSxVQUFVLFVBQVUsRUFBRSxDQUFDOztJQUUvQyxNQUFNLHdCQUF3QjtNQUM1QixTQUFTO01BQ1QsUUFBUTtNQUNSLE1BQU07S0FDUCxDQUFDO0lBQ0YsTUFBTSwyQkFBMkIsU0FBUyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEgsTUFBTSxhQUFhLFFBQVE7TUFDekIsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDdkIsTUFBTSxZQUFZLEtBQUssQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDNUMsTUFBTSxZQUFZLEtBQUssQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDNUMsT0FBTyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsSUFBSSx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztPQUNuRixNQUFNO1FBQ0wsT0FBTyxLQUFLLENBQUM7T0FDZDtLQUNGLENBQUM7SUFDRixNQUFNLFNBQVMsaUJBQWlCO01BQzlCLE1BQU0scUJBQXFCLFNBQVMsQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7TUFDaEUsTUFBTSxZQUFZLGtCQUFrQixPQUFPLEtBQUssQ0FBQyxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztNQUN0SyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVk7UUFDckMsT0FBTztRQUNQLFFBQVEsU0FBUyxNQUFNLENBQUMsQ0FBQyxDQUFDO09BQzNCLENBQUMsQ0FBQyxDQUFDO0tBQ0wsQ0FBQztJQUNGLE1BQU0sd0JBQXdCLDJCQUEyQixhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7SUFDekgsTUFBTSxnQkFBZ0IsTUFBTTtNQUMxQixNQUFNLGtCQUFrQjtRQUN0QixHQUFHLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUM7UUFDMUIsR0FBRyxFQUFFO09BQ04sQ0FBQztNQUNGLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0tBQzVELENBQUM7O0lBRUYsTUFBTSxVQUFVLDZCQUE2QixTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7O0lBRXpGLE1BQU0sa0JBQWtCLGdCQUFnQjtNQUN0QyxJQUFJLE1BQU0sSUFBSSxDQUFDO01BQ2YsTUFBTSxXQUFXLENBQUMsT0FBTyxLQUFLO1FBQzVCLE1BQU0sVUFBVSxDQUFDLE1BQU07VUFDckIsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1VBQ3RCLE1BQU0sSUFBSSxDQUFDO1NBQ1osRUFBRSxLQUFLLENBQUMsQ0FBQztPQUNYLENBQUM7TUFDRixNQUFNLFNBQVMsTUFBTTtRQUNuQixJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7VUFDaEIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQ2xCLE1BQU0sSUFBSSxDQUFDO1NBQ1o7T0FDRixDQUFDO01BQ0YsT0FBTztRQUNMLE1BQU07UUFDTixRQUFRO09BQ1QsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxtQkFBbUIsQ0FBQyxDQUFDO0lBQzNCLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQztJQUM1QixNQUFNLFdBQVcsU0FBUztNQUN4QixNQUFNLE1BQU0sS0FBSyxJQUFJLENBQUM7TUFDdEIsSUFBSSxHQUFHLFFBQVEsS0FBSyxTQUFTLElBQUksR0FBRyxRQUFRLE9BQU8sS0FBSyxDQUFDLEVBQUU7UUFDekQsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCO01BQ0QsT0FBTyxRQUFRLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3RDLENBQUM7SUFDRixNQUFNLGNBQWMsaUJBQWlCO01BQ25DLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLFFBQVEsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO01BQy9DLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLFFBQVEsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO01BQy9DLE9BQU8sS0FBSyxHQUFHLGdCQUFnQixJQUFJLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQztLQUM3RCxDQUFDO0lBQ0YsTUFBTSxVQUFVLFlBQVk7TUFDMUIsTUFBTSxZQUFZLE9BQU8sRUFBRSxDQUFDO01BQzVCLE1BQU0saUJBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUNuQyxNQUFNLGNBQWMsZUFBZSxDQUFDLFNBQVM7UUFDM0MsUUFBUSxhQUFhLENBQUMsU0FBUyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDMUIsRUFBRSxlQUFlLENBQUMsQ0FBQztNQUNwQixNQUFNLG1CQUFtQixTQUFTO1FBQ2hDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVM7VUFDNUIsV0FBVyxPQUFPLEVBQUUsQ0FBQztVQUNyQixNQUFNLE9BQU87WUFDWCxHQUFHLEtBQUssUUFBUTtZQUNoQixHQUFHLEtBQUssUUFBUTtZQUNoQixRQUFRLEtBQUssT0FBTztXQUNyQixDQUFDO1VBQ0YsV0FBVyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7VUFDNUIsY0FBYyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7VUFDMUIsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDckIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCLENBQUM7TUFDRixNQUFNLGtCQUFrQixTQUFTO1FBQy9CLFdBQVcsT0FBTyxFQUFFLENBQUM7UUFDckIsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUztVQUM1QixTQUFTLEdBQUcsQ0FBQyxRQUFRO1lBQ25CLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtjQUM1QixTQUFTLE1BQU0sRUFBRSxDQUFDO2FBQ25CO1dBQ0YsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO1FBQ0gsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCLENBQUM7TUFDRixNQUFNLGlCQUFpQixTQUFTO1FBQzlCLFdBQVcsT0FBTyxFQUFFLENBQUM7UUFDckIsTUFBTSxTQUFTLFFBQVEsRUFBRSxDQUFDLElBQUksT0FBTyxFQUFFLEtBQUssT0FBTyxDQUFDLENBQUM7UUFDckQsT0FBTyxTQUFTLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTO1VBQ2pELElBQUksY0FBYyxJQUFJLEVBQUUsRUFBRTtZQUN4QixLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLE9BQU8sS0FBSyxDQUFDO1dBQ2QsTUFBTTtZQUNMLE9BQU8sUUFBUSxhQUFhLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7V0FDNUM7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxXQUFXLE9BQU8sQ0FBQztRQUN2QjtVQUNFLEtBQUssVUFBVSxFQUFFO1VBQ2pCLE9BQU8sZ0JBQWdCO1NBQ3hCO1FBQ0Q7VUFDRSxLQUFLLFNBQVMsRUFBRTtVQUNoQixPQUFPLGVBQWU7U0FDdkI7UUFDRDtVQUNFLEtBQUssUUFBUSxFQUFFO1VBQ2YsT0FBTyxjQUFjO1NBQ3RCO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxjQUFjLGlCQUFpQixLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUMzRixPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUM7S0FDeEIsQ0FBQzs7SUFFRixNQUFNLGNBQWMsU0FBUztNQUMzQixNQUFNLFFBQVEsS0FBSyxJQUFJLENBQUM7TUFDeEIsT0FBTyxLQUFLLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDakQsT0FBTztRQUNQLFVBQVU7T0FDWCxFQUFFLE1BQU0sQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxPQUFPLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztLQUNoRixDQUFDO0lBQ0YsTUFBTSxVQUFVLDRCQUE0QjtNQUMxQyxNQUFNLFdBQVc7UUFDZixlQUFlLElBQUk7UUFDbkIsR0FBRyxXQUFXO09BQ2YsQ0FBQztNQUNGLE1BQU0sZ0JBQWdCO1FBQ3BCLFlBQVk7UUFDWixXQUFXO1FBQ1gsVUFBVTtRQUNWLGFBQWE7UUFDYixjQUFjO1FBQ2QsV0FBVztRQUNYLFNBQVM7UUFDVCxXQUFXO1FBQ1gsV0FBVztRQUNYLFVBQVU7UUFDVixPQUFPO09BQ1IsQ0FBQztNQUNGLE1BQU0sV0FBVyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDbkMsTUFBTSxlQUFlLEtBQUssQ0FBQyxhQUFhLE9BQU8sQ0FBQztRQUM5QyxhQUFhO1FBQ2IsT0FBTztRQUNQLGFBQWE7UUFDYixRQUFRO1FBQ1IsZUFBZTtRQUNmLGtCQUFrQjtRQUNsQixNQUFNO1FBQ04sV0FBVztRQUNYLFNBQVM7UUFDVCxXQUFXO1FBQ1gsV0FBVztRQUNYLFVBQVU7UUFDVixNQUFNO1FBQ04sT0FBTztPQUNSLENBQUMsRUFBRSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVM7UUFDekMsUUFBUSxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYztVQUNuRCxJQUFJLFVBQVUsRUFBRTtZQUNkLEtBQUssS0FBSyxFQUFFLENBQUM7V0FDZDtTQUNGLENBQUMsQ0FBQztRQUNILE1BQU0sVUFBVSxRQUFRLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkQsSUFBSSxPQUFPLEVBQUU7VUFDWCxLQUFLLEtBQUssRUFBRSxDQUFDO1NBQ2Q7T0FDRixDQUFDLENBQUMsQ0FBQztNQUNKLE1BQU0sZUFBZSxPQUFPLEVBQUUsQ0FBQztNQUMvQixNQUFNLFVBQVUsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUztRQUNoRCxRQUFRLFlBQVksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjO1VBQ3RELElBQUksVUFBVSxFQUFFO1lBQ2QsS0FBSyxLQUFLLEVBQUUsQ0FBQztXQUNkO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxVQUFVLFFBQVEsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0RCxJQUFJLE9BQU8sRUFBRTtVQUNYLEtBQUssS0FBSyxFQUFFLENBQUM7U0FDZDtRQUNELFlBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNO1VBQ2hDLFFBQVEsYUFBYSxDQUFDLFNBQVMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzNDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUNSLENBQUMsQ0FBQztNQUNILE1BQU0sWUFBWSxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTO1FBQ3BELE1BQU0sVUFBVSxRQUFRLGFBQWEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEQsSUFBSSxPQUFPLEVBQUU7VUFDWCxLQUFLLEtBQUssRUFBRSxDQUFDO1NBQ2QsTUFBTSxJQUFJLFFBQVEsY0FBYyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRTtVQUN2RCxLQUFLLFFBQVEsRUFBRSxDQUFDO1NBQ2pCO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxZQUFZLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVM7UUFDcEQsTUFBTSxVQUFVLFFBQVEsYUFBYSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4RCxJQUFJLE9BQU8sRUFBRTtVQUNYLEtBQUssS0FBSyxFQUFFLENBQUM7U0FDZDtPQUNGLENBQUMsQ0FBQztNQUNILE1BQU0sa0JBQWtCLE9BQU8sRUFBRSxDQUFDO01BQ2xDLE1BQU0sYUFBYSxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTO1FBQ3RELE1BQU0sVUFBVSxRQUFRLGFBQWEsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekQsSUFBSSxPQUFPLEVBQUU7VUFDWCxLQUFLLEtBQUssRUFBRSxDQUFDO1NBQ2Q7UUFDRCxlQUFlLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtVQUNuQyxRQUFRLGFBQWEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUMxQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDUixDQUFDLENBQUM7TUFDSCxNQUFNLFNBQVMsTUFBTTtRQUNuQixNQUFNLENBQUMsWUFBWSxFQUFFLEtBQUs7VUFDeEIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNaLENBQUMsQ0FBQztRQUNILFNBQVMsT0FBTyxFQUFFLENBQUM7UUFDbkIsU0FBUyxPQUFPLEVBQUUsQ0FBQztRQUNuQixVQUFVLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLE9BQU8sT0FBTyxFQUFFLENBQUM7UUFDakIsWUFBWSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUIsZUFBZSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7T0FDbEMsQ0FBQztNQUNGLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztLQUNuQixDQUFDOztJQUVGLE1BQU0sU0FBUyx5QkFBeUI7TUFDdEMsTUFBTSxTQUFTLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUMxRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNyQixDQUFDOztJQUVGLE1BQU0sYUFBYSxtQkFBbUI7TUFDcEMsTUFBTSxVQUFVLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUM1QixNQUFNLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQzNCLE1BQU0sT0FBTyxNQUFNO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ25CLENBQUM7TUFDRixNQUFNLE1BQU0sTUFBTTtRQUNoQixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUNsQixDQUFDO01BQ0YsT0FBTztRQUNMLElBQUk7UUFDSixHQUFHO1FBQ0gsV0FBVyxPQUFPLElBQUk7UUFDdEIsT0FBTyxNQUFNLElBQUk7UUFDakIsS0FBSztRQUNMLFdBQVcsTUFBTSxJQUFJO1FBQ3JCLFdBQVcsTUFBTSxJQUFJO09BQ3RCLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxlQUFlLFNBQVM7TUFDNUIsTUFBTSxVQUFVLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUM1QixNQUFNLE9BQU8sTUFBTTtRQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUNuQixDQUFDO01BQ0YsT0FBTztRQUNMLElBQUk7UUFDSixLQUFLLElBQUk7UUFDVCxXQUFXLE9BQU8sSUFBSTtRQUN0QixPQUFPLEtBQUs7UUFDWixLQUFLO1FBQ0wsV0FBVyxHQUFHLENBQUMsMENBQTBDLENBQUM7UUFDMUQsV0FBVyxHQUFHLENBQUMsMENBQTBDLENBQUM7T0FDM0QsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDO01BQ3pCLEVBQUUsU0FBUyxFQUFFLEVBQUU7TUFDZixFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtNQUN2QixFQUFFLFVBQVUsRUFBRSxFQUFFO0tBQ2pCLENBQUMsQ0FBQztJQUNILE1BQU0sbUJBQW1CLHlEQUF5RDtNQUNoRixNQUFNLFVBQVUsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztNQUMxQyxNQUFNLGlCQUFpQixVQUFVLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3BELE9BQU8sT0FBTyxLQUFLLENBQUMsTUFBTTtRQUN4QixNQUFNLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM3QyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7T0FDekIsRUFBRSxlQUFlO1FBQ2hCLE1BQU0sY0FBYyxXQUFXLFlBQVksQ0FBQztRQUM1QyxNQUFNLGVBQWUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM3QixJQUFJLGNBQWMsVUFBVSxFQUFFLEVBQUU7VUFDOUIsTUFBTSxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsV0FBVyxRQUFRLEVBQUUsV0FBVyxRQUFRLENBQUMsQ0FBQztVQUM1RSxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7U0FDeEIsTUFBTSxJQUFJLGNBQWMsTUFBTSxFQUFFLEVBQUU7VUFDakMsTUFBTSxZQUFZLENBQUMsU0FBUyxFQUFFLFdBQVcsUUFBUSxFQUFFLFdBQVcsUUFBUSxDQUFDLENBQUM7VUFDeEUsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1NBQ3pCLE1BQU07VUFDTCxPQUFPLE1BQU0sQ0FBQyxXQUFXLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUM1QyxNQUFNLFlBQVksQ0FBQyxTQUFTLEVBQUUsV0FBVyxRQUFRLEVBQUUsV0FBVyxRQUFRLENBQUMsQ0FBQztZQUN4RSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7V0FDekIsRUFBRSxVQUFVO1lBQ1gsTUFBTSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsV0FBVyxRQUFRLEVBQUUsV0FBVyxRQUFRLENBQUMsQ0FBQztZQUM3RSxPQUFPLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1dBQzdCLENBQUMsQ0FBQztTQUNKO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sMEJBQTBCLDREQUE0RCxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFVBQVUsdUJBQXVCLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqUixNQUFNLGlCQUFpQixpREFBaUQ7TUFDdEUsTUFBTSxTQUFTLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDeEMsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQzlFLENBQUM7SUFDRixNQUFNLFlBQVksa0NBQWtDO01BQ2xELE1BQU0saUJBQWlCLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUM5QyxNQUFNLENBQUMsU0FBUyxFQUFFLFlBQVk7UUFDNUIsTUFBTSxjQUFjLFFBQVEsWUFBWSxDQUFDO1FBQ3pDLE1BQU0sVUFBVSxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO09BQ3pCLENBQUMsQ0FBQztNQUNILE9BQU8sY0FBYyxVQUFVLEVBQUUsQ0FBQztLQUNuQyxDQUFDO0lBQ0YsTUFBTSxzQkFBc0IseUNBQXlDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pKLE1BQU0sd0JBQXdCLG9EQUFvRDtNQUNoRixNQUFNLFNBQVMsTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztNQUMzQyxPQUFPLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDeEYsQ0FBQzs7SUFFRixNQUFNLGVBQWUsMkJBQTJCO01BQzlDLE9BQU87TUFDUCxXQUFXO0tBQ1osQ0FBQyxDQUFDO0lBQ0gsTUFBTSxtQkFBbUIsa0JBQWtCO01BQ3pDLEVBQUU7TUFDRixhQUFhLE9BQU87S0FDckIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxnQkFBZ0IsTUFBTTtNQUMxQixNQUFNLFdBQVcsRUFBRSxDQUFDO01BQ3BCLE1BQU0sYUFBYSwyQkFBMkI7UUFDNUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVO1VBQ3JCLE1BQU0sV0FBVyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7VUFDOUQsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7VUFDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztTQUN4QixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxjQUFjLG9CQUFvQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsWUFBWSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO01BQ3pJLE1BQU0sZUFBZSxRQUFRLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLFVBQVUsQ0FBQyxRQUFRLEVBQUUsV0FBVyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDdkksTUFBTSxPQUFPLCtCQUErQixLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsV0FBVyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO01BQ3hKLE1BQU0sZUFBZSxNQUFNO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEVBQUUsOEJBQThCO1VBQzNDLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsRUFBRTtZQUMzQixPQUFPLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztXQUN6QjtTQUNGLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixPQUFPO1FBQ0wsVUFBVTtRQUNWLFlBQVk7UUFDWixZQUFZO1FBQ1osSUFBSTtPQUNMLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sV0FBVyxNQUFNO01BQ3JCLE1BQU0sU0FBUyxhQUFhLEVBQUUsQ0FBQztNQUMvQixNQUFNLGFBQWEsRUFBRSxDQUFDO01BQ3RCLE1BQU0sWUFBWSxhQUFhO1FBQzdCLE1BQU0sT0FBTyxTQUFTLFFBQVEsQ0FBQztRQUMvQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLFFBQVEsQ0FBQyxDQUFDLENBQUM7T0FDeEUsQ0FBQztNQUNGLE1BQU0sa0JBQWtCLHNCQUFzQjtRQUM1QyxNQUFNLFdBQVcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtVQUMxQixVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDdkIsTUFBTTtVQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxHQUFHLEtBQUssR0FBRyx3QkFBd0IsR0FBRyxPQUFPLENBQUMsUUFBUSxRQUFRLENBQUMsR0FBRyx1QkFBdUIsR0FBRyxPQUFPLENBQUMsU0FBUyxRQUFRLENBQUMsR0FBRyxJQUFJLEdBQUcsNEJBQTRCLElBQUksTUFBTSxDQUFDLFFBQVEsUUFBUSxDQUFDLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLG9CQUFvQixDQUFDLENBQUM7U0FDaFE7T0FDRixDQUFDO01BQ0YsTUFBTSxXQUFXLGFBQWE7UUFDNUIsTUFBTSxRQUFRLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuQyxJQUFJLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRTtVQUN4QyxlQUFlLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ25DO1FBQ0QsTUFBTSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUIsTUFBTSxXQUFXLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUM7T0FDL0IsQ0FBQztNQUNGLE1BQU0sYUFBYSxhQUFhO1FBQzlCLE1BQU0sQ0FBQyxTQUFTLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUztVQUN0QyxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztVQUN6QixNQUFNLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1QixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxTQUFTLFFBQVEsTUFBTSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDakQsTUFBTSxPQUFPLCtCQUErQixNQUFNLEtBQUssQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ25GLE1BQU0sVUFBVSxNQUFNLEtBQUssQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDNUMsT0FBTztRQUNMLElBQUk7UUFDSixNQUFNO1FBQ04sUUFBUTtRQUNSLFVBQVU7UUFDVixPQUFPO09BQ1IsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxZQUFZLFVBQVU7TUFDMUIsTUFBTSxxQ0FBcUMsR0FBRyxNQUFNLElBQUksQ0FBQztNQUN6RCxPQUFPO1FBQ0wsS0FBSyxNQUFNLElBQUk7UUFDZixLQUFLO1VBQ0gsS0FBSyxLQUFLO1VBQ1YsWUFBWTtZQUNWLE1BQU0sY0FBYztZQUNwQixHQUFHLFVBQVU7V0FDZDtVQUNELEdBQUcsb0JBQW9CO1NBQ3hCO1FBQ0QsWUFBWSxNQUFNLFdBQVc7UUFDN0IsWUFBWSxLQUFLLENBQUMsTUFBTSxvQkFBb0IsQ0FBQztRQUM3QyxRQUFRLE1BQU0sT0FBTztRQUNyQixpQkFBaUIsTUFBTSxnQkFBZ0I7UUFDdkMsWUFBWSxNQUFNLFdBQVc7T0FDOUIsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFlBQVksTUFBTSxDQUFDO01BQ3ZCLE1BQU0sV0FBVztNQUNqQixTQUFTLFNBQVM7TUFDbEIsY0FBYztRQUNaLFNBQVMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1FBQzNCLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLENBQUM7UUFDaEMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7UUFDdkIsU0FBUyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztRQUNoQyxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztPQUM1QjtLQUNGLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFdBQVcsUUFBUTtNQUN2QixNQUFNLGNBQWMsTUFBTSxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUN0RixNQUFNLFdBQVcsUUFBUSxFQUFFLENBQUM7TUFDNUIsTUFBTSxTQUFTLHVCQUF1QixRQUFRLEtBQUssQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3BGLE1BQU0sWUFBWSxPQUFPLENBQUMsSUFBSSxRQUFRLEVBQUU7UUFDdEMsY0FBYyxzQkFBc0I7VUFDbEMsT0FBTyxZQUFZLENBQUMsU0FBUyxFQUFFLEtBQUssT0FBTyxFQUFFLFVBQVUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUMvRztPQUNGLENBQUMsQ0FBQztNQUNILE1BQU0sWUFBWTtRQUNoQixXQUFXLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDN0IsY0FBYyw2QkFBNkI7VUFDekMsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUMzRztRQUNELGNBQWMsd0JBQXdCO1VBQ3BDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDeEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1dBQ2pCLEVBQUUsWUFBWTtZQUNiLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsVUFBVTtjQUN4QyxjQUFjLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFO2dCQUNoQyxVQUFVO2dCQUNWLE1BQU0sSUFBSTtnQkFDVixTQUFTLElBQUk7Z0JBQ2IsTUFBTTtlQUNQLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2NBQ25CLE9BQU8sS0FBSyxDQUFDO2FBQ2QsQ0FBQyxDQUFDO1dBQ0osQ0FBQyxDQUFDO1NBQ0o7UUFDRCxlQUFlLDBCQUEwQjtVQUN2QyxTQUFTLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxRQUFRLEVBQUUsY0FBYyxNQUFNLENBQUMsQ0FBQztTQUN2RTtRQUNELFVBQVUsT0FBTztVQUNmLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3RCO1FBQ0QsVUFBVSxRQUFRO1VBQ2hCLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxPQUFPO1FBQ2QsY0FBYyxZQUFZO1FBQzFCLFVBQVUsS0FBSztVQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNSO1FBQ0QsZUFBZSxLQUFLO1VBQ2xCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNYO1FBQ0QsWUFBWSxLQUFLO1VBQ2YsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2Y7UUFDRCxpQkFBaUIsS0FBSztVQUNwQixlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEI7UUFDRCxXQUFXLFdBQVc7VUFDcEIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3RCO1FBQ0QsYUFBYSx1QkFBdUI7VUFDbEMsV0FBVyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNoQztRQUNELGdCQUFnQixzQkFBc0I7VUFDcEMsY0FBYyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNsQztRQUNELGFBQWEsTUFBTTtPQUNwQixDQUFDO01BQ0YsTUFBTSxhQUFhLGFBQWE7UUFDOUIsU0FBUyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLFFBQVEsQ0FBQyxFQUFFO1VBQzlCLFFBQVEsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1VBQzdCLE1BQU0sQ0FBQyxTQUFTLFdBQVcsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1VBQzNDLFNBQVMsYUFBYSxDQUFDLFVBQVUsRUFBRSxFQUFFLFNBQVMsUUFBUSxFQUFFLEVBQUUsUUFBUSxTQUFTLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDeEY7T0FDRixDQUFDO01BQ0YsTUFBTSxrQkFBa0IsYUFBYTtRQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsUUFBUSxDQUFDLEVBQUU7VUFDOUIsTUFBTSxDQUFDLFNBQVMsV0FBVyxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUM7VUFDaEQsUUFBUSxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDaEM7UUFDRCxTQUFTLFdBQVcsRUFBRSxDQUFDO09BQ3hCLENBQUM7TUFDRixNQUFNLE1BQU0sYUFBYTtRQUN2QixNQUFNLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO09BQ3pCLENBQUM7TUFDRixNQUFNLFNBQVMsYUFBYTtRQUMxQixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7T0FDbkIsQ0FBQztNQUNGLE1BQU0sVUFBVSxNQUFNO1FBQ3BCLFNBQVMsT0FBTyxFQUFFLENBQUM7UUFDbkIsUUFBUSxDQUFDLElBQUksUUFBUSxDQUFDLENBQUM7T0FDeEIsQ0FBQztNQUNGLE1BQU0sZ0JBQWdCLFFBQVE7UUFDNUIsTUFBTSxZQUFZLFFBQVEsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDN0MsTUFBTSxDQUFDLFNBQVMsRUFBRSxZQUFZO1VBQzVCLE1BQU0sY0FBYyxRQUFRLFlBQVksQ0FBQztVQUN6QyxNQUFNLFVBQVUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1VBQ3hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNmLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLGNBQWMsV0FBVztRQUM3QixhQUFhLENBQUM7VUFDWixXQUFXLElBQUk7VUFDZixNQUFNLE9BQU87U0FDZCxDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxjQUFjLHVCQUF1QjtRQUN6QyxhQUFhLENBQUM7VUFDWixXQUFXLEtBQUs7VUFDaEIsUUFBUTtVQUNSLE1BQU0sT0FBTztTQUNkLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLGlCQUFpQixzQkFBc0I7UUFDM0MsTUFBTSxZQUFZLFFBQVEsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sU0FBUyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztPQUNwQyxDQUFDO01BQ0YsTUFBTSxXQUFXLE9BQU8sUUFBUSxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLE1BQU0sTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLHNDQUFzQyxHQUFHLEdBQUcsR0FBRyxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sTUFBTSxDQUFDLENBQUM7TUFDL0osTUFBTSxXQUFXLFFBQVE7UUFDdkIsTUFBTSxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO09BQ3RCLENBQUM7TUFDRixVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDakIsT0FBTztRQUNMLElBQUk7UUFDSixTQUFTLElBQUksUUFBUTtRQUNyQixPQUFPO1FBQ1AsR0FBRztRQUNILE1BQU07UUFDTixRQUFRO1FBQ1IsUUFBUTtRQUNSLFVBQVU7UUFDVixlQUFlO1FBQ2YsV0FBVyxXQUFXO1FBQ3RCLFdBQVc7UUFDWCxjQUFjO09BQ2YsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxZQUFZLHNCQUFzQjtNQUN0QyxLQUFLO1FBQ0gsS0FBSyxLQUFLO1FBQ1YsU0FBUztVQUNQLFNBQVM7VUFDVCw0QkFBNEI7U0FDN0I7T0FDRjtNQUNELFlBQVksS0FBSyxDQUFDLElBQUksTUFBTSxFQUFFLFNBQVMsWUFBWSxDQUFDO0tBQ3JELENBQUMsQ0FBQzs7SUFFSCxNQUFNLFdBQVcsVUFBVSxDQUFDO01BQzFCLFNBQVMsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDO01BQ2pDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtRQUN2QixTQUFTO1FBQ1QsWUFBWTtPQUNiLENBQUM7S0FDSCxDQUFDLENBQUM7SUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDO01BQ3pCLFFBQVEsQ0FBQztRQUNQLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsTUFBTSxPQUFPO09BQ2QsQ0FBQztNQUNGLFFBQVEsQ0FBQztRQUNQLFNBQVM7VUFDUCxRQUFRLFFBQVE7WUFDZCxPQUFPO2NBQ0wsS0FBSyxJQUFJLElBQUk7Y0FDYixLQUFLO2dCQUNILEtBQUssTUFBTTtnQkFDWCxRQUFRLEVBQUUsU0FBUyxNQUFNLEVBQUU7Z0JBQzNCLFlBQVksRUFBRSxlQUFlLE1BQU0sRUFBRTtnQkFDckMsV0FBVyxJQUFJLEtBQUs7ZUFDckI7YUFDRixDQUFDO1dBQ0g7U0FDRjtRQUNELFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsTUFBTSxpQkFBaUI7T0FDeEIsQ0FBQztNQUNGLFFBQVEsQ0FBQztRQUNQLFNBQVM7VUFDUCxRQUFRLFFBQVE7WUFDZCxNQUFNLGlCQUFpQixPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNsRCxPQUFPLElBQUksUUFBUSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7V0FDNUM7U0FDRjtRQUNELFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0IsTUFBTSxPQUFPO09BQ2QsQ0FBQztLQUNILENBQUMsQ0FBQzs7SUFFSCxNQUFNLFlBQVksMkNBQTJDO01BQzNELE1BQU0sYUFBYSxPQUFPLENBQUMsTUFBTSxnQkFBZ0IsRUFBRTtRQUNqRCxTQUFTLE9BQU8sQ0FBQztVQUNmLE1BQU0sYUFBYTtZQUNqQixPQUFPLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1dBQzVDO1NBQ0YsQ0FBQztRQUNGLFlBQVksT0FBTyxDQUFDO1VBQ2xCLE9BQU87WUFDTCxNQUFNLFFBQVE7WUFDZCxVQUFVLFNBQVM7Y0FDakIsT0FBTyxTQUFTLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksU0FBUyxDQUFDLENBQUM7YUFDaEU7WUFDRCxVQUFVLGtCQUFrQjtjQUMxQixTQUFTLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVc7Z0JBQzFDLFlBQVksU0FBUyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztlQUN2QyxDQUFDLENBQUM7YUFDSjtXQUNGO1NBQ0YsQ0FBQztPQUNILENBQUMsQ0FBQztNQUNILE1BQU0sU0FBUyxRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsZ0NBQWdDO1VBQ25FLE1BQU0sS0FBSyxRQUFRLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRTtZQUNyQyxPQUFPO1lBQ1AsT0FBTztZQUNQLGlCQUFpQjtXQUNsQixDQUFDLENBQUM7VUFDSCxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUztZQUN2QixNQUFNLEtBQUssVUFBVSxDQUFDLE1BQU0sT0FBTyxDQUFDLENBQUM7WUFDckMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVM7Y0FDdkIsS0FBSyxDQUFDLEtBQUssUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztjQUNoQyxLQUFLLENBQUMsS0FBSyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQ2hDLENBQUMsQ0FBQztZQUNILEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxjQUFjO2NBQ3pDLE1BQU0sZUFBZSxVQUFVLENBQUMsTUFBTSxPQUFPLENBQUMsQ0FBQztjQUMvQyxLQUFLLENBQUMsVUFBVSxRQUFRLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO2NBQzlDLEtBQUssQ0FBQyxLQUFLLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLENBQUMsQ0FBQzthQUN4RCxDQUFDLENBQUM7V0FDSixDQUFDLENBQUM7U0FDSixDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1AsTUFBTSxPQUFPO1FBQ1gsVUFBVSxhQUFhLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztRQUMxRCxVQUFVLGFBQWEsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDO09BQzNELENBQUM7TUFDRixPQUFPO1FBQ0wsS0FBSyxNQUFNLElBQUk7UUFDZixLQUFLLE1BQU0sSUFBSTtRQUNmLFVBQVU7UUFDVixVQUFVO1FBQ1YsTUFBTTtRQUNOLElBQUk7T0FDTCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sWUFBWSxTQUFTLENBQUM7TUFDMUIsTUFBTSxXQUFXO01BQ2pCLGNBQWMsUUFBUSxFQUFFO01BQ3hCLFlBQVksT0FBTyxFQUFFO01BQ3JCLFNBQVMsU0FBUztNQUNsQixNQUFNO1FBQ0osVUFBVSxnQkFBZ0IsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQzdDLFVBQVUsZ0JBQWdCLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQztPQUM5QztLQUNGLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFlBQVkscUJBQXFCLElBQUksQ0FBQztNQUMxQyxZQUFZLE9BQU8sQ0FBQyxDQUFDO1VBQ2pCLEtBQUssU0FBUyxRQUFRO1VBQ3RCLE9BQU8sTUFBTTtTQUNkLENBQUMsQ0FBQztLQUNOLENBQUMsQ0FBQzs7SUFFSCxJQUFJLGlDQUFpQyxNQUFNLE9BQU8sQ0FBQztRQUMvQyxXQUFXLElBQUk7UUFDZixTQUFTLFNBQVM7S0FDckIsQ0FBQyxDQUFDOztJQUVILElBQUksZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7O0lBRWpFLE1BQU0sY0FBYyxRQUFRLENBQUM7TUFDM0IsUUFBUSxhQUFhO01BQ3JCLE1BQU0sYUFBYTtNQUNuQixRQUFRLGlCQUFpQjtLQUMxQixDQUFDLENBQUM7O0lBRUgsSUFBSSxXQUFXLE9BQU8sS0FBSyxNQUFNLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDOztJQUVuRSxNQUFNLHNCQUFzQixtREFBbUQ7TUFDN0UsTUFBTSxPQUFPLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGVBQWUsQ0FBQyxDQUFDO01BQ3BGLE9BQU8sU0FBUyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDL0IsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLG9CQUFvQixtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4RixNQUFNLDBCQUEwQixvREFBb0Q7TUFDbEYsS0FBSyxzQkFBc0IsQ0FBQyxZQUFZLENBQUM7TUFDekMsWUFBWSxNQUFNLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUM3QyxpQkFBaUIsUUFBUSxDQUFDLGVBQWUsQ0FBQztLQUMzQyxDQUFDLENBQUM7SUFDSCxNQUFNLHFCQUFxQixNQUFNLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVELE1BQU0seUJBQXlCLGlCQUFpQjtNQUM5QyxLQUFLLEtBQUs7TUFDVixTQUFTLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztLQUNsRCxDQUFDLENBQUM7SUFDSCxNQUFNLGdCQUFnQiwrQkFBK0IsU0FBUyxNQUFNLE1BQU0sQ0FBQztNQUN6RSxLQUFLO1FBQ0gsS0FBSyxPQUFPO1FBQ1osU0FBUyxDQUFDLFdBQVcsQ0FBQztPQUN2QjtNQUNELFlBQVksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQzFELENBQUMsQ0FBQzs7SUFFSCxNQUFNLGtCQUFrQixVQUFVLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUM1RCxNQUFNLGlCQUFpQixVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDaEQsTUFBTSxrQkFBa0IsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sa0JBQWtCLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNsRCxNQUFNLGtCQUFrQixVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDbEQsTUFBTSxpQkFBaUIsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2hELE1BQU0sbUJBQW1CLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNwRCxNQUFNLHFCQUFxQixVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN4RCxNQUFNLGtCQUFrQixVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7O0lBRWxELE1BQU0sbUJBQW1CLDJDQUEyQztNQUNsRSxNQUFNLFNBQVMsSUFBSSxNQUFNLElBQUksQ0FBQyxTQUFTLGFBQWEsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO01BQ2pGLE1BQU0sWUFBWSxLQUFLLGNBQWM7UUFDbkMsU0FBUyxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsOEJBQThCLENBQUMsS0FBSyxDQUFDLFVBQVU7VUFDeEUsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsNEJBQTRCLENBQUMsQ0FBQyxDQUFDO1NBQ2xFLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLGNBQWMsaUJBQWlCO1FBQ25DLE1BQU0sWUFBWSxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVE7VUFDckMsTUFBTSxXQUFXLFFBQVEsVUFBVSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7VUFDL0MsTUFBTSxjQUFjLElBQUksUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLHdDQUF3QyxHQUFHLFFBQVEsRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7VUFDNUcsTUFBTSxjQUFjLENBQUMsdUNBQXVDLEdBQUcsSUFBSSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7VUFDbEYsTUFBTSxjQUFjO1lBQ2xCLEtBQUssR0FBRztZQUNSLE9BQU8sR0FBRztZQUNWLEtBQUssR0FBRztXQUNULENBQUM7VUFDRixNQUFNLFlBQVksUUFBUSxRQUFRLENBQUMsYUFBYSxFQUFFLFNBQVMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7VUFDL0UsTUFBTSxnQkFBZ0Isa0JBQWtCLFdBQVcsRUFBRSxHQUFHLHVDQUF1QyxHQUFHLEVBQUUsQ0FBQztVQUNyRyxPQUFPLENBQUMsZ0NBQWdDLEdBQUcsYUFBYSxFQUFFLDRDQUE0QyxHQUFHLFFBQVEsYUFBYSxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsU0FBUyxHQUFHLFNBQVMsRUFBRSxjQUFjLEdBQUcsU0FBUyxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUUsR0FBRyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDMU8sQ0FBQyxDQUFDO1FBQ0gsTUFBTSxTQUFTLElBQUksUUFBUSxLQUFLLE1BQU0sSUFBSSxJQUFJLFFBQVEsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUcsTUFBTSxPQUFPLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLG1DQUFtQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDOUYsS0FBSyxDQUFDLElBQUksUUFBUSxFQUFFLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDcEMsQ0FBQztNQUNGLE1BQU0sVUFBVSxTQUFTLENBQUMsOEJBQThCO1FBQ3RELEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDVixJQUFJLENBQUMsa0JBQWtCLFdBQVcsRUFBRSxFQUFFO1VBQ3BDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFO1lBQzlCLE1BQU0sSUFBSSxLQUFLO1lBQ2YsT0FBTyxTQUFTO1dBQ2pCLENBQUMsQ0FBQztTQUNKO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxtQkFBbUI7UUFDdkIsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxtQkFBbUI7VUFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2QsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sQ0FBQztRQUN2QixLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxDQUFDO1FBQ3JCLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLENBQUMsbUJBQW1CO1VBQzVDLFVBQVUsQ0FBQyxJQUFJLFFBQVEsRUFBRSxHQUFHLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxpQkFBaUI7WUFDaEUsUUFBUSxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztXQUN0QyxDQUFDLENBQUM7VUFDSCxLQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ3pCLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxTQUFTLENBQUMsUUFBUTtVQUNsQyxVQUFVLENBQUMsSUFBSSxRQUFRLEVBQUUsR0FBRyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsaUJBQWlCO1lBQ2hFLFFBQVEsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7V0FDdEMsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO1FBQ0gsY0FBYyxDQUFDLFNBQVMsQ0FBQyw4QkFBOEI7VUFDckQsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7WUFDOUIsTUFBTSxJQUFJLEtBQUs7WUFDZixPQUFPLFNBQVM7V0FDakIsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sc0JBQXNCLDJCQUEyQixLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksUUFBUSxFQUFFLHVCQUF1QixDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7TUFDbEksTUFBTSxTQUFTLFNBQVMsTUFBTSxNQUFNLENBQUM7UUFDbkMsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7U0FDN0c7UUFDRCxZQUFZLEVBQUU7UUFDZCxTQUFTLEVBQUUsUUFBUSxRQUFRLEVBQUU7UUFDN0IsWUFBWSxRQUFRLENBQUM7VUFDbkIsU0FBUyxPQUFPLENBQUM7WUFDZixVQUFVLGtCQUFrQixXQUFXO1lBQ3ZDLFlBQVksUUFBUTtjQUNsQixtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsWUFBWTtnQkFDcEMsS0FBSyxDQUFDLFFBQVEsRUFBRSxzQ0FBc0MsQ0FBQyxDQUFDO2dCQUN4RCxLQUFLLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztlQUN4QyxDQUFDLENBQUM7YUFDSjtZQUNELFdBQVcsUUFBUTtjQUNqQixtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsWUFBWTtnQkFDcEMsUUFBUSxDQUFDLFFBQVEsRUFBRSxzQ0FBc0MsQ0FBQyxDQUFDO2dCQUMzRCxRQUFRLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUFDO2VBQ3JDLENBQUMsQ0FBQzthQUNKO1dBQ0YsQ0FBQztVQUNGLGVBQWUsRUFBRTtVQUNqQixTQUFTLE9BQU8sQ0FBQyxFQUFFLENBQUM7VUFDcEIsWUFBWSxPQUFPLENBQUM7WUFDbEIsT0FBTztjQUNMLE1BQU0sUUFBUTtjQUNkLGNBQWMsV0FBVyxNQUFNLENBQUMsRUFBRSxDQUFDO2FBQ3BDO1lBQ0QsWUFBWSxpQkFBaUI7Y0FDM0IsV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztjQUN6QixJQUFJLElBQUksUUFBUSxLQUFLLE1BQU0sRUFBRTtnQkFDM0IsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUMscUJBQXFCLEtBQUs7a0JBQzFFLE1BQU0sWUFBWSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7aUJBQy9DLENBQUMsQ0FBQztlQUNKO2NBQ0QsSUFBSSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQzthQUM3QjtXQUNGLENBQUM7VUFDRixXQUFXLE9BQU8sQ0FBQyxFQUFFLENBQUM7VUFDdEIsTUFBTSxPQUFPLENBQUMsd0JBQXdCLENBQUMsSUFBSSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7VUFDL0QsTUFBTSxDQUFDLG1CQUFtQixFQUFFLGdCQUFnQixDQUFDO1NBQzlDLENBQUM7UUFDRixZQUFZO1VBQ1YsQ0FBQyxTQUFTLEVBQUUsR0FBRztZQUNiLFdBQVc7WUFDWCxzQkFBc0I7WUFDdEIsbUJBQW1CO1dBQ3BCO1NBQ0Y7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO01BQ3JELE9BQU8sbUJBQW1CLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDOUQsQ0FBQzs7SUFFRixNQUFNLGVBQWU7TUFDbkIsT0FBTztNQUNQLFVBQVU7S0FDWCxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsUUFBUTtNQUM1QixNQUFNLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzFCLE9BQU8sVUFBVSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztLQUN2QyxDQUFDO0lBQ0YsTUFBTSxZQUFZLDhCQUE4QjtNQUM5QyxNQUFNLE9BQU8sYUFBYSxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLFFBQVEsQ0FBQyxDQUFDO01BQ3ZFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsYUFBYSxhQUFhLENBQUMsQ0FBQztNQUMzQyxhQUFhLE9BQU8sS0FBSyxDQUFDLGNBQWM7UUFDdEMsSUFBSSxhQUFhLENBQUMsU0FBUyxRQUFRLENBQUMsRUFBRTtVQUNwQyxLQUFLLENBQUMsU0FBUyxRQUFRLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ2pEO1FBQ0QsVUFBVSxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhO1VBQ25ELEtBQUssQ0FBQyxTQUFTLEVBQUUsVUFBVSxVQUFVLENBQUMsQ0FBQztTQUN4QyxDQUFDLENBQUM7UUFDSCxVQUFVLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztPQUMvQixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxjQUFjLGtEQUFrRDtNQUNwRSxNQUFNLE9BQU8sYUFBYSxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLFFBQVEsQ0FBQyxDQUFDO01BQ3ZFLEtBQUssQ0FBQyxJQUFJLEVBQUUsYUFBYSxhQUFhLENBQUMsQ0FBQztNQUN4QyxhQUFhLE9BQU8sS0FBSyxDQUFDLGNBQWM7UUFDdEMsSUFBSSxhQUFhLENBQUMsU0FBUyxRQUFRLENBQUMsRUFBRTtVQUNwQyxLQUFLLENBQUMsU0FBUyxRQUFRLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsVUFBVSxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhO1VBQ25ELEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDeEIsQ0FBQyxDQUFDO1FBQ0gsVUFBVSxVQUFVLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQ3ZDLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFFBQVEsNkNBQTZDLGFBQWEsVUFBVSxLQUFLLENBQUMsTUFBTSxNQUFNLEtBQUssQ0FBQyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixhQUFhLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ25MLE1BQU0sTUFBTSw0Q0FBNEM7TUFDdEQsYUFBYSxPQUFPLEtBQUssQ0FBQyxjQUFjO1FBQ3RDLFVBQVUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO09BQ2xDLENBQUMsQ0FBQztNQUNILE9BQU8sS0FBSyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVM7UUFDbEQsSUFBSSxTQUFTLFVBQVUsRUFBRSxZQUFZLEVBQUUsRUFBRTtVQUN2QyxPQUFPLEtBQUssS0FBSyxDQUFDLE9BQU87WUFDdkIsV0FBVyxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3pELE9BQU8sTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7V0FDMUIsRUFBRSxLQUFLO1lBQ04sU0FBUyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNwQyxPQUFPLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ3hCLENBQUMsQ0FBQztTQUNKLE1BQU07VUFDTCxPQUFPLE1BQU0sTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDNUM7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxZQUFZLDhCQUE4QjtNQUM5QyxNQUFNLE9BQU8sYUFBYSxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLFFBQVEsQ0FBQyxDQUFDO01BQ3ZFLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxhQUFhLGFBQWEsQ0FBQyxDQUFDO0tBQzlDLENBQUM7O0lBRUYsSUFBSSw4QkFBOEIsTUFBTSxPQUFPLENBQUM7UUFDNUMsV0FBVyxJQUFJO1FBQ2YsV0FBVyxTQUFTO1FBQ3BCLGFBQWEsV0FBVztRQUN4QixPQUFPLEtBQUs7UUFDWixLQUFLLEdBQUc7UUFDUixXQUFXLFNBQVM7S0FDdkIsQ0FBQyxDQUFDOztJQUVILE1BQU0sV0FBVyxpQ0FBaUMsYUFBYSxVQUFVLElBQUksQ0FBQyxpQkFBaUIsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsUUFBUSxFQUFFLGFBQWE7UUFDL0ksR0FBRyxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztPQUMzRCxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsZUFBZSxHQUFHLENBQUMsYUFBYSxDQUFDLGFBQWE7UUFDcEUsR0FBRyxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN2RCxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQzs7SUFFeEIsSUFBSSxnQ0FBZ0MsTUFBTSxPQUFPLENBQUM7UUFDOUMsV0FBVyxJQUFJO1FBQ2YsUUFBUSxRQUFRO0tBQ25CLENBQUMsQ0FBQzs7SUFFSCxJQUFJLG1CQUFtQjtNQUNyQixVQUFVLENBQUMsY0FBYyxDQUFDO01BQzFCLFNBQVMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxLQUFLLENBQUM7TUFDbkMsV0FBVyxDQUFDLFFBQVEsRUFBRTtRQUNwQixTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztRQUMxQixTQUFTLENBQUMsY0FBYyxFQUFFLFFBQVEsS0FBSyxDQUFDO1FBQ3hDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1FBQzFCLFNBQVMsQ0FBQyxTQUFTLENBQUM7UUFDcEIsU0FBUyxDQUFDLFdBQVcsQ0FBQztRQUN0QixTQUFTLENBQUMsWUFBWSxDQUFDO09BQ3hCLENBQUM7TUFDRixXQUFXLENBQUMsV0FBVyxFQUFFO1FBQ3ZCLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFDdEIsU0FBUyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUM7UUFDN0IsU0FBUyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQztPQUNsQyxDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLGVBQWUsUUFBUSxDQUFDO01BQzVCLFFBQVEsZ0JBQWdCO01BQ3hCLE1BQU0sY0FBYztNQUNwQixRQUFRLGdCQUFnQjtNQUN4QixNQUFNLGNBQWM7TUFDcEIsT0FBTztRQUNMLFlBQVksYUFBYTtVQUN2QixPQUFPLGFBQWE7WUFDbEIsTUFBTSxJQUFJLFlBQVksU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNDLE9BQU8sTUFBTSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDbEMsQ0FBQztTQUNIO09BQ0Y7S0FDRixDQUFDLENBQUM7O0lBRUgsTUFBTSxZQUFZLE1BQU0sSUFBSSxDQUFDO01BQzNCLFFBQVE7UUFDTix1QkFBdUIsTUFBTTtRQUM3QixlQUFlLE1BQU07UUFDckIsbUJBQW1CLE1BQU07UUFDekIsb0JBQW9CLFdBQVc7T0FDaEM7TUFDRCxZQUFZLEVBQUUsY0FBYyxJQUFJLEVBQUU7S0FDbkMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxXQUFXLE1BQU0sUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFaEUsSUFBSSxpQ0FBaUMsTUFBTSxPQUFPLENBQUM7UUFDL0MsV0FBVyxJQUFJO1FBQ2YsUUFBUSxRQUFRO1FBQ2hCLFNBQVMsU0FBUztLQUNyQixDQUFDLENBQUM7O0lBRUgsTUFBTSxjQUFjLFFBQVEsQ0FBQztNQUMzQixRQUFRLEVBQUU7TUFDVixNQUFNLGFBQWE7TUFDbkIsUUFBUSxpQkFBaUI7S0FDMUIsQ0FBQyxDQUFDOztJQUVILE1BQU0sb0JBQW9CLDJCQUEyQixRQUFRLE9BQU8sQ0FBQztNQUNuRSxLQUFLLElBQUksSUFBSTtNQUNiLFlBQVksSUFBSSxXQUFXO01BQzNCLGFBQWEsWUFBWTtNQUN6QixvQkFBb0IsUUFBUSxDQUFDO1FBQzNCLGdCQUFnQixPQUFPLENBQUMsZUFBZSxVQUFVLFdBQVcsQ0FBQztRQUM3RCxlQUFlLEVBQUU7UUFDakIsV0FBVyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3RCLFdBQVcsT0FBTyxDQUFDLEVBQUUsQ0FBQztPQUN2QixDQUFDO01BQ0YsU0FBUyxJQUFJLFFBQVE7TUFDckIsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUM7TUFDdEMsVUFBVSxlQUFlLFFBQVE7TUFDakMsT0FBTyxRQUFRLE1BQU0sR0FBRyxDQUFDLFlBQVksSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsUUFBUSxLQUFLLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUztRQUNyTCxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDaEMsRUFBRSxJQUFJLFFBQVEsRUFBRSxJQUFJLFFBQVEsRUFBRSxjQUFjLGlCQUFpQixFQUFFLEtBQUssRUFBRSxlQUFlLFVBQVUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxrQkFBa0IsQ0FBQyxJQUFJLFFBQVEsRUFBRSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDbkssT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsRUFBRTtLQUM5QyxDQUFDLENBQUM7O0lBRUgsTUFBTSx3QkFBd0IsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDL0QsTUFBTSx5QkFBeUIsVUFBVSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDakUsTUFBTSx5QkFBeUIsVUFBVSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDakUsTUFBTSxtQkFBbUIsNkRBQTZEO01BQ3BGLE1BQU0sU0FBUyxTQUFTLE1BQU0sTUFBTSxDQUFDO1FBQ25DLFNBQVMsS0FBSztRQUNkLGNBQWMsQ0FBQyxlQUFlLENBQUM7UUFDL0IsTUFBTSxXQUFXO1FBQ2pCLFlBQVksS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM5QyxpQkFBaUIsUUFBUSxDQUFDO1VBQ3hCLFNBQVMsT0FBTyxDQUFDLEVBQUUsVUFBVSxlQUFlLFVBQVUsV0FBVyxFQUFFLENBQUM7VUFDcEUsZUFBZSxFQUFFO1VBQ2pCLFdBQVcsT0FBTyxDQUFDLEVBQUUsQ0FBQztVQUN0QixZQUFZLE9BQU8sQ0FBQztZQUNsQixjQUFjLDJCQUEyQjtZQUN6QyxTQUFTLFFBQVEsYUFBYSxDQUFDLElBQUksUUFBUSxDQUFDO1lBQzVDLFFBQVE7Y0FDTixTQUFTLFFBQVE7Z0JBQ2YsTUFBTSxNQUFNLFlBQVksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4QyxRQUFRLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2VBQ3ZEO2FBQ0Y7WUFDRCxXQUFXO2NBQ1QsZ0JBQWdCLEtBQUs7Y0FDckIsVUFBVSxTQUFTO2dCQUNqQixNQUFNLGFBQWEsWUFBWSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hELElBQUksVUFBVSxPQUFPLEtBQUssQ0FBQyxFQUFFO2tCQUMzQixPQUFPLE1BQU0sS0FBSyxDQUFDLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQ3hDLE1BQU07a0JBQ0wsTUFBTSxPQUFPLFlBQVksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2tCQUMxQyxLQUFLLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLFVBQVUsQ0FBQyxDQUFDO2tCQUM1QyxNQUFNLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLE1BQU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7a0JBQzdHLE9BQU8sTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3pCO2VBQ0Y7YUFDRjtXQUNGLENBQUM7U0FDSCxDQUFDO1FBQ0YsZUFBZSxLQUFLO09BQ3JCLENBQUMsQ0FBQztNQUNILE1BQU0sU0FBUyxJQUFJLE1BQU0sSUFBSSxDQUFDLFNBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxlQUFlLFVBQVUsQ0FBQyxDQUFDLENBQUM7TUFDeEYsTUFBTSxtQkFBbUIscUJBQXFCO1FBQzVDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO09BQ3ZELENBQUM7TUFDRixNQUFNLGVBQWUsaUJBQWlCO1FBQ3BDLGNBQWMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWTtVQUMzQyxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDdEIsbUJBQW1CLFlBQVksQ0FBQyxZQUFZO2NBQzFDLFFBQVEsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxFQUFFLFNBQVM7Z0JBQ25FLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDbEMsUUFBUSxDQUFDLElBQUksV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO2VBQ2xDLENBQUMsQ0FBQzthQUNKLEVBQUUsU0FBUyxDQUFDLENBQUM7V0FDZixNQUFNLElBQUksS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUM3QixnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7V0FDaEMsTUFBTTtZQUNMLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztXQUNuQztTQUNGLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLGlCQUFpQixNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDOUMsS0FBSztVQUNILEtBQUssTUFBTTtVQUNYLFlBQVksRUFBRSxjQUFjLGVBQWUsVUFBVSxVQUFVLENBQUMsY0FBYyxDQUFDLEVBQUU7U0FDbEY7UUFDRCxTQUFTO1VBQ1AsT0FBTyxNQUFNO1lBQ1gsV0FBVztZQUNYLFdBQVc7WUFDWCxPQUFPO1dBQ1I7VUFDRCxPQUFPLE1BQU07WUFDWCxXQUFXO1lBQ1gsV0FBVztZQUNYLE9BQU87V0FDUjtTQUNGO1FBQ0QsWUFBWSxFQUFFO1FBQ2QsT0FBTyxVQUFVLENBQUMsbUJBQW1CLFVBQVUsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxFQUFFLElBQUksV0FBVyxFQUFFLG1CQUFtQixnQkFBZ0IsRUFBRSxDQUFDO1FBQ3pILFNBQVMsbUJBQW1CLGFBQWEsQ0FBQyxJQUFJLFdBQVcsQ0FBQztRQUMxRCxTQUFTLE9BQU87UUFDaEIsWUFBWTtPQUNiLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztNQUNyQixPQUFPLFNBQVMsT0FBTyxDQUFDO1FBQ3RCLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMsaUJBQWlCLENBQUM7U0FDN0I7UUFDRCxZQUFZLE1BQU0sUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pDLEtBQUs7Y0FDSCxLQUFLLEtBQUs7Y0FDVixTQUFTLENBQUMsaUJBQWlCLENBQUM7YUFDN0I7WUFDRCxZQUFZO2NBQ1YsTUFBTTtjQUNOLGNBQWMsT0FBTyxFQUFFO2FBQ3hCO1dBQ0YsQ0FBQyxDQUFDO1FBQ0wsaUJBQWlCLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRTtZQUNuRCxLQUFLLENBQUMscUJBQXFCLEVBQUUsY0FBYztjQUN6QyxjQUFjLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWU7Z0JBQzlDLEtBQUssQ0FBQyxXQUFXLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDLENBQUM7ZUFDaEUsQ0FBQyxDQUFDO2NBQ0gsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxNQUFNLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQzthQUN0RCxDQUFDO1lBQ0YsS0FBSyxDQUFDLHNCQUFzQixFQUFFLGNBQWM7Y0FDMUMsU0FBUyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTO2dCQUNyQyxZQUFZLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQyxDQUFDO2dCQUM3QyxTQUFTLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsTUFBTSxDQUFDLENBQUM7ZUFDakQsQ0FBQyxDQUFDO2FBQ0osQ0FBQztZQUNGLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxlQUFlO2NBQzNDLFNBQVMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVTtnQkFDdEMsU0FBUyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLE1BQU0sQ0FBQyxDQUFDO2VBQ2pELENBQUMsQ0FBQzthQUNKLENBQUM7V0FDSCxDQUFDLENBQUMsQ0FBQztPQUNQLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxZQUFZLFFBQVEsQ0FBQztNQUN6QixRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQzNCLE1BQU0sT0FBTztLQUNkLENBQUMsQ0FBQztJQUNILE1BQU0sV0FBVyxRQUFRLFFBQVEsQ0FBQztNQUNoQyxNQUFNLEVBQUUsR0FBRyxJQUFJLEdBQUcsT0FBTztNQUN6QixXQUFXLFVBQVU7UUFDbkIsTUFBTSxTQUFTLE1BQU0sTUFBTSxRQUFRLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxPQUFPLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTTtVQUNuQyxRQUFRLFFBQVEsQ0FBQztZQUNmLGNBQWMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25FLGNBQWMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xFLGNBQWMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxtQkFBbUI7Y0FDN0MsSUFBSSxHQUFHLFlBQVksSUFBSSxFQUFFLEVBQUU7Z0JBQ3pCLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7ZUFDZDthQUNGLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztXQUNiLENBQUM7U0FDSCxDQUFDLENBQUMsQ0FBQztPQUNMO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxhQUFhLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4QyxNQUFNLFlBQVksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sYUFBYSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDekMsTUFBTSxZQUFZLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxNQUFNLGFBQWEsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sWUFBWSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckMsTUFBTSxhQUFhLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMzQyxNQUFNLFlBQVksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLE1BQU0sWUFBWSxRQUFRLENBQUM7TUFDekIsTUFBTSxPQUFPO01BQ2IsVUFBVSxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDO01BQ25FLFdBQVcsVUFBVTtRQUNuQixPQUFPO1VBQ0wsUUFBUSxRQUFRLENBQUM7WUFDZixjQUFjLENBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQztZQUNoRCxjQUFjLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQztZQUMvQyxjQUFjLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQztZQUM5QyxjQUFjLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQztZQUMvQyxjQUFjLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQztZQUMvQyxjQUFjLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQztXQUM5QyxDQUFDO1NBQ0gsQ0FBQztPQUNIO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxlQUFlLFFBQVEsQ0FBQztNQUM1QixRQUFRLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO01BQ3ZELE1BQU0sVUFBVTtNQUNoQixXQUFXLFVBQVU7UUFDbkIsTUFBTSxjQUFjLE1BQU0sTUFBTSxDQUFDO1FBQ2pDLE1BQU0sUUFBUSxXQUFXLFFBQVEsQ0FBQztRQUNsQyxNQUFNLGVBQWUsK0JBQStCLEtBQUssa0JBQWtCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssYUFBYSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN2SixPQUFPO1VBQ0wsWUFBWSxRQUFRLENBQUM7WUFDbkIsTUFBTSxPQUFPLENBQUM7Y0FDWixNQUFNLFNBQVM7Y0FDZixRQUFRLFlBQVksS0FBSyxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztjQUNsRCxTQUFTLFlBQVksS0FBSyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztjQUNwRCxNQUFNLFlBQVksS0FBSyxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztjQUM5QyxRQUFRLFlBQVksS0FBSyxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQzthQUNuRCxDQUFDO1lBQ0YsUUFBUSxPQUFPLENBQUMsRUFBRSxDQUFDO1dBQ3BCLENBQUM7VUFDRixRQUFRLFFBQVEsQ0FBQztZQUNmLEtBQUssQ0FBQyxVQUFVLEVBQUUsRUFBRSxZQUFZLENBQUM7WUFDakMsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLFlBQVksQ0FBQztZQUNoQyxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsWUFBWSxDQUFDO1lBQ2hDLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxrQkFBa0I7Y0FDbkMsSUFBSSxNQUFNLFlBQVksSUFBSSxFQUFFLEVBQUU7Z0JBQzVCLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7ZUFDNUI7YUFDRixDQUFDO1dBQ0gsQ0FBQztTQUNILENBQUM7T0FDSDtLQUNGLENBQUMsQ0FBQztJQUNILElBQUksY0FBYztNQUNoQixTQUFTO01BQ1QsU0FBUztNQUNULFNBQVM7TUFDVCxTQUFTO01BQ1QsU0FBUztNQUNULFVBQVU7TUFDVixVQUFVO01BQ1YsVUFBVTtNQUNWLFVBQVU7TUFDVixTQUFTO01BQ1QsWUFBWTtLQUNiLENBQUM7O0lBRUYsTUFBTSxxQkFBcUIscUJBQXFCLENBQUM7SUFDakQsTUFBTSxvQkFBb0IsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDekQsTUFBTSxpQkFBaUIsT0FBTyxHQUFHLEtBQUssUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQy9ELE1BQU0saUJBQWlCLGtCQUFrQjtNQUN2QyxNQUFNLE1BQU0sY0FBYyxNQUFNLElBQUksQ0FBQztNQUNyQyxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN2QixNQUFNLGFBQWEsR0FBRyxDQUFDO1FBQ3ZCLE9BQU8sVUFBVSxRQUFRLEtBQUssU0FBUyxJQUFJLFVBQVUsUUFBUSxPQUFPLEtBQUssQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDLFVBQVUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLGFBQWEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUNuTCxNQUFNO1FBQ0wsTUFBTSxhQUFhLEdBQUcsQ0FBQztRQUN2QixPQUFPLFVBQVUsUUFBUSxLQUFLLFNBQVMsR0FBRyxRQUFRLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sYUFBYSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hJO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLElBQUksS0FBSyxFQUFFLElBQUksT0FBTyxFQUFFLElBQUksUUFBUSxFQUFFLElBQUksTUFBTSxDQUFDO0lBQ3ZELE1BQU0sT0FBTyxVQUFVLE1BQU0sTUFBTSxLQUFLLENBQUM7SUFDekMsTUFBTSxPQUFPLFVBQVUsTUFBTSxNQUFNLEtBQUssQ0FBQztJQUN6QyxNQUFNLFFBQVEsVUFBVSxNQUFNLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQztJQUM5QyxNQUFNLFFBQVEsVUFBVSxNQUFNLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQztJQUM5QyxNQUFNLE9BQU8sVUFBVSxNQUFNLE1BQU0sS0FBSyxDQUFDO0lBQ3pDLE1BQU0sT0FBTyxVQUFVLE1BQU0sTUFBTSxLQUFLLENBQUM7SUFDekMsTUFBTSxRQUFRLFVBQVUsTUFBTSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDOUMsTUFBTSxRQUFRLFVBQVUsTUFBTSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDOUMsTUFBTSxRQUFRLHNCQUFzQixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlELE1BQU0sU0FBUyxVQUFVLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25ELE1BQU0sU0FBUyxVQUFVLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25ELE1BQU0sUUFBUSxVQUFVLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0MsTUFBTSxRQUFRLFVBQVUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQyxNQUFNLE9BQU8sVUFBVSxNQUFNLFNBQVMsQ0FBQztJQUN2QyxNQUFNLE9BQU8sVUFBVSxNQUFNLFdBQVcsQ0FBQztJQUN6QyxNQUFNLFlBQVksVUFBVSxNQUFNLFVBQVUsQ0FBQztJQUM3QyxNQUFNLFVBQVUsVUFBVSxNQUFNLFFBQVEsQ0FBQztJQUN6QyxNQUFNLFVBQVUsc0JBQXNCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssU0FBUyxDQUFDO0lBQy9FLE1BQU0sV0FBVyxVQUFVLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUMsTUFBTSxXQUFXLFVBQVUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5QyxNQUFNLFdBQVcsVUFBVSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sV0FBVyxVQUFVLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUMsTUFBTSxlQUFlLFVBQVUsTUFBTSxNQUFNLE1BQU0sSUFBSSxFQUFFLENBQUM7O0lBRXhELE1BQU0sVUFBVSxXQUFXO01BQ3pCLENBQUM7TUFDRCxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxxQkFBcUIsc0JBQXNCO01BQy9DLFFBQVEsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDckQsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLGtCQUFrQjtNQUN0QyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2pFLENBQUM7SUFDRixNQUFNLGFBQWEsa0JBQWtCO01BQ25DLGtCQUFrQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUN6QyxDQUFDO0lBQ0YsTUFBTSxlQUFlLGtCQUFrQjtNQUNyQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2pFLENBQUM7SUFDRixNQUFNLGdCQUFnQixrQkFBa0I7TUFDdEMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNqRSxDQUFDO0lBQ0YsTUFBTSxhQUFhLGtCQUFrQjtNQUNuQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDekMsQ0FBQztJQUNGLE1BQU0sZUFBZSxrQkFBa0I7TUFDckMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNqRSxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0Isa0JBQWtCO01BQ3RDLGtCQUFrQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakUsQ0FBQztJQUNGLE1BQU0sYUFBYSxrQkFBa0I7TUFDbkMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0tBQ3pDLENBQUM7SUFDRixNQUFNLGVBQWUsa0JBQWtCO01BQ3JDLGtCQUFrQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakUsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLGtCQUFrQjtNQUN0QyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2pFLENBQUM7SUFDRixNQUFNLGFBQWEsa0JBQWtCO01BQ25DLGtCQUFrQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUN6QyxDQUFDO0lBQ0YsTUFBTSxlQUFlLGtCQUFrQjtNQUNyQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2pFLENBQUM7O0lBRUYsTUFBTSxXQUFXLDJCQUEyQjtNQUMxQyxJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUU7UUFDZixPQUFPLEtBQUssQ0FBQztPQUNkLE1BQU0sSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFO1FBQ3RCLE9BQU8sR0FBRyxDQUFDO09BQ1osTUFBTSxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUU7UUFDeEIsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDO09BQ2hCLE1BQU07UUFDTCxPQUFPLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7T0FDcEM7S0FDRixDQUFDO0lBQ0YsTUFBTSxhQUFhLDJCQUEyQjtNQUM1QyxJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUU7UUFDZixPQUFPLEtBQUssQ0FBQztPQUNkLE1BQU0sSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFO1FBQ3RCLE9BQU8sR0FBRyxDQUFDO09BQ1osTUFBTSxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUU7UUFDeEIsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDO09BQ2hCLE1BQU07UUFDTCxPQUFPLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7T0FDcEM7S0FDRixDQUFDO0lBQ0YsTUFBTSxXQUFXLHFCQUFxQixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUUsTUFBTSxjQUFjLHNDQUFzQyxTQUFTLEtBQUssQ0FBQyxNQUFNO01BQzdFLE1BQU0sWUFBWSxLQUFLLEdBQUcsR0FBRyxDQUFDO01BQzlCLE1BQU0sYUFBYSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO01BQ3ZELE9BQU8sUUFBUSxDQUFDLEdBQUcsR0FBRyxVQUFVLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDckQsRUFBRSxTQUFTO01BQ1YsTUFBTSxZQUFZLENBQUMsS0FBSyxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUM7TUFDekMsTUFBTSxhQUFhLElBQUksTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQztNQUNoRCxNQUFNLFdBQVcsSUFBSSxNQUFNLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDO01BQ3BELE1BQU0sV0FBVyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUM7TUFDbEQsTUFBTSxXQUFXLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLEdBQUcsVUFBVSxDQUFDLENBQUM7TUFDM0QsTUFBTSxJQUFJLEtBQUssR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDO01BQ2xDLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQzNCLENBQUMsQ0FBQztJQUNILE1BQU0sZUFBZSxxQkFBcUIsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNwRixNQUFNLGNBQWMsUUFBUTtNQUMxQixNQUFNLGlIQUFpSCxHQUFHLElBQUksQ0FBQztNQUMvSCxNQUFNLFNBQVMsVUFBVSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO01BQzFDLE1BQU0sU0FBUyxVQUFVLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7TUFDMUMsSUFBSSxLQUFLLEdBQUcsUUFBUSxFQUFFO1FBQ3BCLE9BQU8sTUFBTSxDQUFDO09BQ2YsTUFBTSxJQUFJLEtBQUssR0FBRyxRQUFRLEVBQUU7UUFDM0IsT0FBTyxNQUFNLENBQUM7T0FDZixNQUFNO1FBQ0wsTUFBTSxTQUFTLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sV0FBVyxRQUFRLENBQUMsTUFBTSxHQUFHLFdBQVcsR0FBRyxLQUFLLEdBQUcsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM5RSxJQUFJLElBQUksSUFBSSxRQUFRLElBQUksR0FBRyxJQUFJLFFBQVEsSUFBSSxHQUFHLEVBQUU7VUFDOUMsT0FBTyxXQUFXLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ3pELE1BQU0sSUFBSSxPQUFPLEVBQUU7VUFDbEIsT0FBTyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM3QixNQUFNO1VBQ0wsT0FBTyxRQUFRLENBQUM7U0FDakI7T0FDRjtLQUNGLENBQUM7SUFDRixNQUFNLHNCQUFzQixRQUFRO01BQ2xDLE1BQU0sbUdBQW1HLEdBQUcsSUFBSSxDQUFDO01BQ2pILElBQUksS0FBSyxHQUFHLEdBQUcsRUFBRTtRQUNmLE9BQU8sVUFBVSxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUM7T0FDdkMsTUFBTSxJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUU7UUFDdEIsT0FBTyxVQUFVLEdBQUcsUUFBUSxHQUFHLGFBQWEsQ0FBQztPQUM5QyxNQUFNO1FBQ0wsT0FBTyxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQztPQUMxQztLQUNGLENBQUM7O0lBRUYsTUFBTSxNQUFNLEtBQUssRUFBRSxRQUFRLE9BQU8sRUFBRSxTQUFTLFFBQVEsRUFBRSxPQUFPLE1BQU0sRUFBRSxRQUFRLE9BQU8sRUFBRSxTQUFTLFFBQVEsQ0FBQztJQUN6RyxNQUFNLFlBQVksYUFBYSxTQUFTLFFBQVEsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO0lBQzdFLE1BQU0sb0JBQW9CLHNCQUFzQixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakUsTUFBTSxnQkFBZ0IsYUFBYTtNQUNqQyxNQUFNLFNBQVMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQ3BDLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3hDLENBQUM7SUFDRixNQUFNLGdCQUFnQixhQUFhO01BQ2pDLE1BQU0sU0FBUyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7TUFDcEMsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDekMsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLGFBQWE7TUFDakMsTUFBTSxTQUFTLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUNwQyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztLQUN2QyxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsYUFBYTtNQUNqQyxNQUFNLFNBQVMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQ3BDLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQzFDLENBQUM7SUFDRixNQUFNLGtCQUFrQixhQUFhO01BQ25DLE1BQU0sU0FBUyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7TUFDcEMsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDekMsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLGFBQWE7TUFDbkMsTUFBTSxTQUFTLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUNwQyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztLQUMxQyxDQUFDO0lBQ0YsTUFBTSxvQkFBb0IseURBQXlELENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLGVBQWUsQ0FBQztJQUMvSSxNQUFNLHFCQUFxQix5QkFBeUI7TUFDbEQsTUFBTSxrQkFBa0IsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQzdDLE1BQU0saUJBQWlCLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUMzQyxNQUFNLG1CQUFtQixpQkFBaUIsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDbEUsTUFBTSxtQkFBbUIsaUJBQWlCLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQ25FLE1BQU0sa0JBQWtCLGlCQUFpQixDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNoRSxPQUFPLGlCQUFpQixDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxDQUFDO0tBQy9FLENBQUM7SUFDRixNQUFNLHFCQUFxQix5QkFBeUI7TUFDbEQsTUFBTSxrQkFBa0IsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQzdDLE1BQU0saUJBQWlCLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUMzQyxNQUFNLG1CQUFtQixpQkFBaUIsQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDakUsTUFBTSxtQkFBbUIsaUJBQWlCLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3BFLE1BQU0sa0JBQWtCLGlCQUFpQixDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQztNQUMvRCxPQUFPLGlCQUFpQixDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxDQUFDO0tBQy9FLENBQUM7O0lBRUYsTUFBTSxxQkFBcUIscUJBQXFCO01BQzlDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDcEQsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLDRCQUE0QjtNQUN0RCxNQUFNLE9BQU87UUFDWCxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDakIsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2pCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNyQixPQUFPLElBQUk7UUFDWCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDbEIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2xCLFdBQVcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUM1QixTQUFTLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDeEIsWUFBWSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQzVCLFlBQVksUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUM1QixVQUFVLGFBQWEsQ0FBQyxRQUFRLENBQUM7UUFDakMsVUFBVSxhQUFhLENBQUMsUUFBUSxDQUFDO1FBQ2pDLGFBQWEsZUFBZSxDQUFDLFFBQVEsQ0FBQztPQUN2QyxDQUFDO01BQ0YsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDMUIsQ0FBQztJQUNGLE1BQU0saUJBQWlCLDZCQUE2QjtNQUNsRCxNQUFNLFNBQVMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztNQUM1RCxNQUFNLFlBQVksTUFBTSxDQUFDO01BQ3pCLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztNQUN4QyxPQUFPLE1BQU0sQ0FBQztLQUNmLENBQUM7SUFDRixNQUFNLGFBQWEsc0JBQXNCO01BQ3ZDLE1BQU0sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDekIsa0JBQWtCLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ25DLENBQUM7SUFDRixNQUFNLGFBQWEsc0JBQXNCO01BQ3ZDLE1BQU0sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDekIsa0JBQWtCLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ25DLENBQUM7SUFDRixNQUFNLFdBQVcsaUNBQWlDO01BQ2hELE1BQU0sSUFBSSxTQUFTLEdBQUcsQ0FBQyxHQUFHLFVBQVUsR0FBRyxRQUFRLENBQUM7TUFDaEQsTUFBTSxTQUFTLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUNqRixrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDckMsT0FBTyxRQUFRLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUM5QixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsYUFBYSxzQkFBc0IsUUFBUSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5RyxNQUFNLHNCQUFzQixrQkFBa0I7TUFDNUMsTUFBTSxNQUFNLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztNQUMzQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM3QixDQUFDO0lBQ0YsTUFBTSxzQkFBc0IsK0NBQStDO01BQ3pFLE1BQU0sWUFBWSxDQUFDLENBQUM7TUFDcEIsTUFBTSxZQUFZLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUM1QyxNQUFNLGdCQUFnQixPQUFPLEtBQUssQ0FBQyxRQUFRLFFBQVEsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUMvRyxNQUFNLGdCQUFnQixPQUFPLEtBQUssQ0FBQyxRQUFRLFFBQVEsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUMvRyxNQUFNLE9BQU87UUFDWCxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDakIsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2pCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNyQixLQUFLO1FBQ0wsWUFBWSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQzVCLFlBQVksUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUM1QixVQUFVLGFBQWEsQ0FBQyxRQUFRLENBQUM7UUFDakMsU0FBUztRQUNULFVBQVUsYUFBYSxDQUFDLFFBQVEsQ0FBQztRQUNqQyxTQUFTO1FBQ1QsYUFBYTtRQUNiLGFBQWE7T0FDZCxDQUFDO01BQ0YsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNsQyxDQUFDO0lBQ0YsTUFBTSx3QkFBd0IsdURBQXVEO01BQ25GLE1BQU0sU0FBUyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDOUUsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztLQUNqRSxDQUFDO0lBQ0YsTUFBTSx5QkFBeUIsa0NBQWtDO01BQy9ELE1BQU0sUUFBUSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDbkMsTUFBTSxNQUFNLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxLQUFLLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDM0ksTUFBTSxjQUFjLEtBQUssQ0FBQyxLQUFLLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUM3QyxLQUFLLENBQUMsS0FBSyxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUM7S0FDeEQsQ0FBQztJQUNGLE1BQU0sV0FBVyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sWUFBWSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxNQUFNLFNBQVMsUUFBUSxLQUFLLENBQUM7SUFDN0IsTUFBTSxXQUFXLFFBQVEsS0FBSyxDQUFDO0lBQy9CLE1BQU0sZ0JBQWdCO01BQ3BCLFlBQVksUUFBUSxLQUFLLEVBQUU7TUFDM0IsT0FBTyxRQUFRLEtBQUssRUFBRTtNQUN0QixhQUFhLFFBQVEsS0FBSyxFQUFFO01BQzVCLFNBQVMsUUFBUSxLQUFLLENBQUMsVUFBVSxDQUFDO01BQ2xDLGdCQUFnQixRQUFRLEtBQUssRUFBRTtNQUMvQixVQUFVLFFBQVEsS0FBSyxFQUFFO01BQ3pCLGVBQWUsUUFBUSxLQUFLLEVBQUU7TUFDOUIsUUFBUSxRQUFRLEtBQUssQ0FBQyxVQUFVLENBQUM7S0FDbEMsQ0FBQzs7SUFFRixJQUFJLCtCQUErQixNQUFNLE9BQU8sQ0FBQztRQUM3QyxXQUFXLElBQUk7UUFDZixjQUFjLGNBQWM7UUFDNUIsVUFBVSxVQUFVO1FBQ3BCLFVBQVUsVUFBVTtRQUNwQixtQkFBbUIsbUJBQW1CO1FBQ3RDLG1CQUFtQixtQkFBbUI7UUFDdEMscUJBQXFCLHFCQUFxQjtRQUMxQyxzQkFBc0Isc0JBQXNCO1FBQzVDLFFBQVEsUUFBUTtRQUNoQixTQUFTLFNBQVM7UUFDbEIsTUFBTSxNQUFNO1FBQ1osUUFBUSxRQUFRO1FBQ2hCLGFBQWEsYUFBYTtLQUM3QixDQUFDLENBQUM7O0lBRUgsTUFBTSxxQkFBcUIscUJBQXFCO01BQzlDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDcEQsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLDJCQUEyQjtNQUNuRCxNQUFNLE9BQU87UUFDWCxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDakIsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2pCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNyQixPQUFPLEdBQUc7UUFDVixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDbEIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2xCLFdBQVcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUM1QixTQUFTLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDeEIsWUFBWSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQzVCLFlBQVksUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUM1QixVQUFVLGFBQWEsQ0FBQyxRQUFRLENBQUM7UUFDakMsVUFBVSxhQUFhLENBQUMsUUFBUSxDQUFDO1FBQ2pDLGFBQWEsZUFBZSxDQUFDLFFBQVEsQ0FBQztPQUN2QyxDQUFDO01BQ0YsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDMUIsQ0FBQztJQUNGLE1BQU0saUJBQWlCLDZCQUE2QjtNQUNsRCxNQUFNLFNBQVMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztNQUMxRCxNQUFNLFlBQVksTUFBTSxDQUFDO01BQ3pCLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztNQUN4QyxPQUFPLE1BQU0sQ0FBQztLQUNmLENBQUM7SUFDRixNQUFNLGFBQWEsc0JBQXNCO01BQ3ZDLE1BQU0sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDekIsa0JBQWtCLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ25DLENBQUM7SUFDRixNQUFNLGFBQWEsc0JBQXNCO01BQ3ZDLE1BQU0sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDekIsa0JBQWtCLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ25DLENBQUM7SUFDRixNQUFNLFdBQVcsaUNBQWlDO01BQ2hELE1BQU0sSUFBSSxTQUFTLEdBQUcsQ0FBQyxHQUFHLFVBQVUsR0FBRyxRQUFRLENBQUM7TUFDaEQsTUFBTSxTQUFTLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUNqRixrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDckMsT0FBTyxRQUFRLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUM5QixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsYUFBYSxzQkFBc0IsUUFBUSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5RyxNQUFNLHNCQUFzQixrQkFBa0I7TUFDNUMsTUFBTSxNQUFNLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztNQUMzQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUs7UUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQztPQUNkLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLG9CQUFvQiwrQ0FBK0M7TUFDdkUsTUFBTSxZQUFZLENBQUMsQ0FBQztNQUNwQixNQUFNLFlBQVksZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQzVDLE1BQU0sZ0JBQWdCLE9BQU8sS0FBSyxDQUFDLFFBQVEsUUFBUSxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQy9HLE1BQU0sZ0JBQWdCLE9BQU8sS0FBSyxDQUFDLFFBQVEsUUFBUSxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQy9HLE1BQU0sT0FBTztRQUNYLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNqQixLQUFLLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDakIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3JCLEtBQUs7UUFDTCxZQUFZLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDNUIsWUFBWSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQzVCLFVBQVUsYUFBYSxDQUFDLFFBQVEsQ0FBQztRQUNqQyxTQUFTO1FBQ1QsVUFBVSxhQUFhLENBQUMsUUFBUSxDQUFDO1FBQ2pDLFNBQVM7UUFDVCxhQUFhO1FBQ2IsYUFBYTtPQUNkLENBQUM7TUFDRixPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2xDLENBQUM7SUFDRixNQUFNLHNCQUFzQix1REFBdUQ7TUFDakYsTUFBTSxTQUFTLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztNQUM1RSxPQUFPLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0tBQ2pFLENBQUM7SUFDRixNQUFNLHlCQUF5QixrQ0FBa0M7TUFDL0QsTUFBTSxRQUFRLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNuQyxNQUFNLE1BQU0sbUJBQW1CLENBQUMsTUFBTSxFQUFFLEtBQUssWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztNQUN6SSxNQUFNLGNBQWMsS0FBSyxDQUFDLEtBQUssUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQzdDLEtBQUssQ0FBQyxLQUFLLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQztLQUN2RCxDQUFDO0lBQ0YsTUFBTSxXQUFXLFFBQVEsS0FBSyxDQUFDO0lBQy9CLE1BQU0sWUFBWSxRQUFRLEtBQUssQ0FBQztJQUNoQyxNQUFNLFNBQVMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxNQUFNLFdBQVcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsTUFBTSxnQkFBZ0I7TUFDcEIsWUFBWSxRQUFRLEtBQUssRUFBRTtNQUMzQixPQUFPLFFBQVEsS0FBSyxDQUFDLFVBQVUsQ0FBQztNQUNoQyxhQUFhLFFBQVEsS0FBSyxFQUFFO01BQzVCLFNBQVMsUUFBUSxLQUFLLEVBQUU7TUFDeEIsZ0JBQWdCLFFBQVEsS0FBSyxFQUFFO01BQy9CLFVBQVUsUUFBUSxLQUFLLENBQUMsVUFBVSxDQUFDO01BQ25DLGVBQWUsUUFBUSxLQUFLLEVBQUU7TUFDOUIsUUFBUSxRQUFRLEtBQUssRUFBRTtLQUN4QixDQUFDOztJQUVGLElBQUksNkJBQTZCLE1BQU0sT0FBTyxDQUFDO1FBQzNDLFdBQVcsSUFBSTtRQUNmLGNBQWMsY0FBYztRQUM1QixVQUFVLFVBQVU7UUFDcEIsVUFBVSxVQUFVO1FBQ3BCLG1CQUFtQixpQkFBaUI7UUFDcEMsbUJBQW1CLG1CQUFtQjtRQUN0QyxxQkFBcUIsbUJBQW1CO1FBQ3hDLHNCQUFzQixzQkFBc0I7UUFDNUMsUUFBUSxRQUFRO1FBQ2hCLFNBQVMsU0FBUztRQUNsQixNQUFNLE1BQU07UUFDWixRQUFRLFFBQVE7UUFDaEIsYUFBYSxhQUFhO0tBQzdCLENBQUMsQ0FBQzs7SUFFSCxNQUFNLG1CQUFtQixxQkFBcUI7TUFDNUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUNwRCxDQUFDO0lBQ0YsTUFBTSxjQUFjLFdBQVc7TUFDN0IsQ0FBQztNQUNELENBQUM7S0FDRixDQUFDLENBQUM7SUFDSCxNQUFNLGVBQWUsNkJBQTZCO01BQ2hELE1BQU0sU0FBUyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUM7TUFDakUsTUFBTSxTQUFTLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQztNQUM5RCxNQUFNLE1BQU0sV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztNQUN4QyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDaEMsT0FBTyxHQUFHLENBQUM7S0FDWixDQUFDO0lBQ0YsTUFBTSxTQUFTLHFEQUFxRDtNQUNsRSxNQUFNLElBQUksU0FBUyxHQUFHLENBQUMsR0FBRyxVQUFVLEdBQUcsUUFBUSxDQUFDO01BQ2hELE1BQU0sU0FBUyxrQkFBa0IsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUNqSSxNQUFNLFNBQVMsQ0FBQyxrQkFBa0IsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUNsSSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO01BQ3hELE9BQU8sUUFBUSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDOUIsQ0FBQztJQUNGLE1BQU0saUJBQWlCLG1DQUFtQyxzQkFBc0IsTUFBTSxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwSixNQUFNLFdBQVcsc0JBQXNCO01BQ3JDLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDeEIsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUN4QixnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ2pELENBQUM7SUFDRixNQUFNLFdBQVcsc0JBQXNCO01BQ3JDLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDeEIsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUN4QixnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ2pELENBQUM7SUFDRixNQUFNLG9CQUFvQixrQkFBa0IsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sdUJBQXVCLGtDQUFrQztNQUM3RCxNQUFNLFFBQVEsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ25DLE1BQU0sT0FBTyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDOUksTUFBTSxPQUFPLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxLQUFLLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztNQUM1SSxNQUFNLGVBQWUsS0FBSyxDQUFDLEtBQUssUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQzlDLE1BQU0sZUFBZSxLQUFLLENBQUMsS0FBSyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDOUMsS0FBSyxDQUFDLEtBQUssUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDO01BQ3pELEtBQUssQ0FBQyxLQUFLLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxHQUFHLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQztLQUN6RCxDQUFDO0lBQ0YsTUFBTSxTQUFTLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN6QyxNQUFNLFVBQVUsY0FBYyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN6QyxNQUFNLE9BQU8sY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sU0FBUyxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sY0FBYztNQUNsQixZQUFZLFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQztNQUN4QyxPQUFPLFFBQVEsS0FBSyxDQUFDLFlBQVksQ0FBQztNQUNsQyxhQUFhLFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQztNQUN6QyxTQUFTLFFBQVEsS0FBSyxDQUFDLFlBQVksQ0FBQztNQUNwQyxnQkFBZ0IsUUFBUSxLQUFLLENBQUMsYUFBYSxDQUFDO01BQzVDLFVBQVUsUUFBUSxLQUFLLENBQUMsWUFBWSxDQUFDO01BQ3JDLGVBQWUsUUFBUSxLQUFLLENBQUMsYUFBYSxDQUFDO01BQzNDLFFBQVEsUUFBUSxLQUFLLENBQUMsWUFBWSxDQUFDO0tBQ3BDLENBQUM7O0lBRUYsSUFBSSx5QkFBeUIsTUFBTSxPQUFPLENBQUM7UUFDdkMsV0FBVyxJQUFJO1FBQ2YsY0FBYyxZQUFZO1FBQzFCLFVBQVUsUUFBUTtRQUNsQixVQUFVLFFBQVE7UUFDbEIsbUJBQW1CLGlCQUFpQjtRQUNwQyxzQkFBc0Isb0JBQW9CO1FBQzFDLFFBQVEsTUFBTTtRQUNkLFNBQVMsT0FBTztRQUNoQixNQUFNLElBQUk7UUFDVixRQUFRLE1BQU07UUFDZCxhQUFhLFdBQVc7S0FDM0IsQ0FBQyxDQUFDOztJQUVILE1BQU0sZUFBZTtNQUNuQixTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztNQUN4QixTQUFTLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztNQUMzQixTQUFTLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztNQUMzQixTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQztNQUN6QixTQUFTLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQztNQUM5QixTQUFTLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQztNQUM1QixTQUFTLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQztNQUM5QixTQUFTLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQztNQUMxQixRQUFRLENBQUMsV0FBVyxDQUFDO01BQ3JCLFVBQVUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRTtRQUNuQyxHQUFHO1VBQ0QsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7VUFDcEIsU0FBUyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7VUFDdEIsV0FBVyxDQUFDLE9BQU8sRUFBRSxRQUFRLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7VUFDbEQsVUFBVSxDQUFDLGlCQUFpQixDQUFDO1VBQzdCLFFBQVEsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDO1NBQ3JDO1FBQ0QsR0FBRztVQUNELFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1VBQ3BCLFNBQVMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO1VBQ3RCLFdBQVcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDO1VBQ2xELFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQztVQUM3QixRQUFRLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQztTQUNuQztRQUNELElBQUk7VUFDRixTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztVQUNwQixTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztVQUN0QixTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztVQUNwQixTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztVQUN0QixXQUFXLENBQUMsT0FBTyxFQUFFLFFBQVEsSUFBSSxDQUFDO1lBQ2hDLEdBQUcsSUFBSSxLQUFLLEtBQUs7WUFDakIsR0FBRyxJQUFJLEtBQUssS0FBSztXQUNsQixDQUFDLENBQUM7VUFDSCxVQUFVLENBQUMsaUJBQWlCLENBQUM7VUFDN0IsUUFBUSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7U0FDL0I7T0FDRixDQUFDLENBQUM7TUFDSCxLQUFLLENBQUMsa0JBQWtCLEVBQUU7UUFDeEIsTUFBTTtRQUNOLFlBQVk7T0FDYixDQUFDO01BQ0YsV0FBVyxDQUFDLGFBQWEsRUFBRSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM5QyxDQUFDOztJQUVGLE1BQU0sV0FBVywyQ0FBMkM7TUFDMUQsTUFBTSxXQUFXLGFBQWEsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDdkUsTUFBTSxjQUFjLGFBQWEsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7TUFDN0UsTUFBTSxjQUFjLGFBQWEsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDekUsTUFBTSxlQUFlLGFBQWEsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7TUFDM0UsTUFBTSxhQUFhLGFBQWEsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7TUFDdkUsTUFBTSxnQkFBZ0IsYUFBYSxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztNQUM3RSxNQUFNLGNBQWMsTUFBTSxNQUFNLENBQUM7TUFDakMsTUFBTSxRQUFRLFdBQVcsUUFBUSxDQUFDO01BQ2xDLE1BQU0sVUFBVSxtQkFBbUI7UUFDakMsS0FBSyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtVQUNoRCxXQUFXO1VBQ1gsWUFBWTtVQUNaLFVBQVU7VUFDVixhQUFhO1VBQ2IsV0FBVztTQUNaLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLFdBQVcsc0JBQXNCO1FBQ3JDLFdBQVcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsTUFBTSxRQUFRLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ3hCLENBQUM7TUFDRixNQUFNLGNBQWMsc0JBQXNCO1FBQ3hDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDM0IsTUFBTSxRQUFRLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixNQUFNLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDNUIsQ0FBQztNQUNGLE1BQU0sYUFBYSxVQUFVO1FBQzNCLEtBQUssU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztPQUNoQyxDQUFDO01BQ0YsTUFBTSxhQUFhLFVBQVU7UUFDM0IsS0FBSyxTQUFTLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQ2hDLENBQUM7TUFDRixNQUFNLFNBQVMsVUFBVTtRQUN2QixNQUFNLGVBQWUsTUFBTTtVQUN6QixPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVM7WUFDN0MsTUFBTSxRQUFRLFdBQVcsTUFBTSxJQUFJLEVBQUUsQ0FBQztZQUN0QyxNQUFNLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1dBQ3ZDLENBQUMsQ0FBQztTQUNKLENBQUM7UUFDRixNQUFNLFVBQVUsTUFBTSxZQUFZLElBQUksRUFBRSxDQUFDO1FBQ3pDLE1BQU0sWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsSUFBSSxPQUFPLEVBQUU7VUFDWCxZQUFZLEVBQUUsQ0FBQztTQUNoQjtPQUNGLENBQUM7TUFDRixNQUFNLGNBQWMsNEJBQTRCO1FBQzlDLGNBQWMsS0FBSyxFQUFFLENBQUM7UUFDdEIsTUFBTSxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixNQUFNLFlBQVksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7T0FDOUMsQ0FBQztNQUNGLE1BQU0sWUFBWSw0QkFBNEI7UUFDNUMsY0FBYyxLQUFLLEVBQUUsQ0FBQztRQUN0QixNQUFNLFVBQVUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDM0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQ2hCLENBQUM7TUFDRixPQUFPO1FBQ0wsS0FBSyxNQUFNLElBQUk7UUFDZixLQUFLLE1BQU0sSUFBSTtRQUNmLFVBQVU7UUFDVixZQUFZLE9BQU8sQ0FBQyxNQUFNLGlCQUFpQixFQUFFO1VBQzNDLE1BQU0sT0FBTyxDQUFDO1lBQ1osTUFBTSxTQUFTO1lBQ2YsU0FBUyxVQUFVO2NBQ2pCLE9BQU8sT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDNUU7V0FDRixDQUFDO1VBQ0YsWUFBWSxPQUFPLENBQUM7WUFDbEIsT0FBTztjQUNMLE1BQU0sUUFBUTtjQUNkLFVBQVUsS0FBSztnQkFDYixPQUFPLFdBQVcsTUFBTSxJQUFJLEVBQUUsQ0FBQztlQUNoQztjQUNELFFBQVE7YUFDVDtXQUNGLENBQUM7VUFDRixTQUFTLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsV0FBVyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7U0FDN0UsQ0FBQztRQUNGLFFBQVEsUUFBUSxDQUFDO1VBQ2YsS0FBSyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsNEJBQTRCO1lBQ3JELFdBQVcsQ0FBQyxNQUFNLEVBQUUsY0FBYyxNQUFNLE1BQU0sQ0FBQyxDQUFDO1dBQ2pELENBQUM7VUFDRixhQUFhLENBQUMsNkJBQTZCO1lBQ3pDLE1BQU0sYUFBYSxXQUFXLGdCQUFnQixFQUFFLENBQUM7WUFDakQsV0FBVyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsQyxNQUFNLFFBQVEsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9CLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdkIsTUFBTSxXQUFXLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyQyxNQUFNLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxXQUFXLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQztXQUNqRSxDQUFDO1VBQ0YsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFLFdBQVcsQ0FBQztVQUNoQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxDQUFDO1VBQzVCLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxXQUFXLENBQUM7VUFDL0IsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsQ0FBQztTQUM1QixDQUFDO1FBQ0YsTUFBTTtVQUNKLFVBQVU7VUFDVixVQUFVO1VBQ1YsUUFBUTtVQUNSLE9BQU87U0FDUjtRQUNELGlCQUFpQixFQUFFLFFBQVEsRUFBRSxVQUFVLFVBQVUsRUFBRSxFQUFFO09BQ3RELENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sU0FBUyxTQUFTLENBQUM7TUFDdkIsTUFBTSxRQUFRO01BQ2QsY0FBYyxZQUFZO01BQzFCLFlBQVksV0FBVztNQUN2QixTQUFTLFFBQVE7TUFDakIsTUFBTTtRQUNKLFVBQVUseUJBQXlCO1VBQ2pDLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztTQUM5QjtRQUNELFlBQVksa0JBQWtCO1VBQzVCLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3pCO1FBQ0QsWUFBWSxrQkFBa0I7VUFDNUIsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDekI7UUFDRCxTQUFTLGtCQUFrQjtVQUN6QixJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN0QjtPQUNGO0tBQ0YsQ0FBQyxDQUFDOztJQUVILE1BQU0sZUFBZSxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNsRCxNQUFNLGVBQWUsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sZ0JBQWdCLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDOztJQUVuRCxNQUFNLGdCQUFnQix5QkFBeUI7TUFDN0MsTUFBTSxXQUFXLE1BQU0sTUFBTSxTQUFTLENBQUM7UUFDckMsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQztVQUMxQyxZQUFZLEVBQUUsTUFBTSxjQUFjLEVBQUU7U0FDckM7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLFFBQVEsTUFBTSxNQUFNLE1BQU0sQ0FBQztRQUMvQixLQUFLO1VBQ0gsS0FBSyxLQUFLO1VBQ1YsU0FBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1VBQ3ZDLFlBQVksRUFBRSxNQUFNLGNBQWMsRUFBRTtTQUNyQztPQUNGLENBQUMsQ0FBQztNQUNILE9BQU8sTUFBTSxPQUFPLENBQUM7UUFDbkIsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7VUFDakMsWUFBWSxFQUFFLE1BQU0sY0FBYyxFQUFFO1NBQ3JDO1FBQ0QsU0FBUyxLQUFLO1FBQ2QsT0FBTztVQUNMLE1BQU0sR0FBRztVQUNULGlCQUFpQixVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsWUFBWTtVQUNWLFFBQVE7VUFDUixLQUFLO1NBQ047UUFDRCxrQkFBa0IsUUFBUSxDQUFDLENBQUMsUUFBUSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNqRCxVQUFVLDJCQUEyQjtVQUNuQyxRQUFRLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDM0M7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sVUFBVSxNQUFNLENBQUM7SUFDdkIsTUFBTSxXQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNELE1BQU0sZ0JBQWdCLFFBQVEsZUFBZSxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7SUFDM0QsTUFBTSxXQUFXLFNBQVM7TUFDeEIsTUFBTSxRQUFRLENBQUMsTUFBTTtRQUNuQixNQUFNLFNBQVMsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sUUFBUSxrQkFBa0I7VUFDOUIsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDbEIsT0FBTyxhQUFhLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUM1RCxDQUFDO1FBQ0YsT0FBTztVQUNMLEtBQUs7VUFDTCxRQUFRLFVBQVUsQ0FBQyxNQUFNLENBQUM7U0FDM0IsQ0FBQztPQUNILEdBQUcsQ0FBQztNQUNMLE1BQU0sT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDMUIsTUFBTSxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUM7TUFDakMsTUFBTSxhQUFhLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxRQUFRLENBQUM7UUFDaEQsTUFBTSxDQUFDO1FBQ1AsT0FBTyxhQUFhLENBQUMsQ0FBQyxDQUFDO09BQ3hCLENBQUMsQ0FBQyxDQUFDO01BQ0osT0FBTyxXQUFXLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ2pFLENBQUM7SUFDRixNQUFNLFdBQVcsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sTUFBTSxDQUFDLENBQUM7SUFDdkUsTUFBTSxTQUFTLHlCQUF5QjtNQUN0QyxLQUFLLE1BQU0sSUFBSTtNQUNmLEtBQUssTUFBTSxJQUFJO01BQ2YsVUFBVTtNQUNWLFlBQVksT0FBTyxDQUFDLE1BQU0sZUFBZSxFQUFFLENBQUMsWUFBWSxPQUFPLENBQUM7VUFDNUQsT0FBTztZQUNMLE1BQU0sUUFBUTtZQUNkLFVBQVUsUUFBUTtjQUNoQixNQUFNLFFBQVEsV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztjQUN4QyxPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUUsc0JBQXNCLFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSztnQkFDOUQsTUFBTSxNQUFNLFNBQVMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxPQUFPLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxLQUFLLENBQUMsQ0FBQyx5RUFBeUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2VBQ2hKLENBQUMsSUFBSSxDQUFDLFlBQVksU0FBUyxDQUFDLENBQUMsQ0FBQzthQUNoQztZQUNELFVBQVUsa0JBQWtCO2NBQzFCLElBQUksQ0FBQyxNQUFNLEVBQUUsbUJBQW1CO2dCQUM5QixPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVc7a0JBQ3pDLFNBQVMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUztvQkFDMUMsWUFBWSxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO21CQUN4QyxDQUFDLENBQUM7aUJBQ0osQ0FBQyxDQUFDO2VBQ0osQ0FBQyxDQUFDO2FBQ0o7V0FDRjtTQUNGLENBQUMsQ0FBQyxDQUFDO01BQ04sTUFBTTtRQUNKLFVBQVUsZUFBZTtVQUN2QixPQUFPLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxXQUFXLENBQUMsQ0FBQztTQUM5RDtPQUNGO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxPQUFPO01BQ1gsVUFBVSxPQUFPLENBQUMsMEJBQTBCLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztNQUMxRSxRQUFRLFFBQVE7S0FDakIsQ0FBQzs7SUFFRixNQUFNLGFBQWEsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sZUFBZSxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDakQsTUFBTSxrQkFBa0IsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDdkQsTUFBTSxrQkFBa0Isa0JBQWtCLENBQUM7SUFDM0MsTUFBTSxpQkFBaUIscURBQXFEO01BQzFFLE1BQU0sZUFBZSxvQkFBb0IsWUFBWSxPQUFPLENBQUM7UUFDM0QsY0FBYyxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQ2pDLFFBQVE7VUFDTixZQUFZLFFBQVE7WUFDbEIsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxNQUFNLEtBQUssRUFBRSxDQUFDLENBQUM7V0FDbEQ7VUFDRCxTQUFTLFFBQVE7WUFDZixRQUFRLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtjQUN6QixNQUFNLEtBQUs7Y0FDWCxPQUFPLFlBQVksU0FBUyxDQUFDLElBQUksQ0FBQzthQUNuQyxDQUFDLENBQUM7V0FDSjtVQUNELFdBQVcsUUFBUTtZQUNqQixRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtjQUMzQixNQUFNLEtBQUs7Y0FDWCxPQUFPLFlBQVksU0FBUyxDQUFDLElBQUksQ0FBQzthQUNuQyxDQUFDLENBQUM7V0FDSjtTQUNGO1FBQ0QsV0FBVztVQUNULFVBQVUsUUFBUTtZQUNoQixNQUFNLFFBQVEsWUFBWSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsTUFBTSxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1lBQ2hHLE9BQU8sTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7V0FDekI7VUFDRCxnQkFBZ0IsS0FBSztTQUN0QjtPQUNGLENBQUMsQ0FBQztNQUNILE1BQU0sa0JBQWtCLDZDQUE2QztRQUNuRSxNQUFNLFdBQVcsU0FBUyxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUN0RCxNQUFNLFNBQVMsU0FBUyxNQUFNLE1BQU0sQ0FBQztVQUNuQyxLQUFLO1lBQ0gsS0FBSyxPQUFPO1lBQ1osWUFBWSxFQUFFLGNBQWMsV0FBVyxFQUFFO1dBQzFDO1VBQ0QsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1QixDQUFDLENBQUM7UUFDSCxNQUFNLFNBQVMsU0FBUyxNQUFNLE1BQU0sQ0FBQztVQUNuQyxJQUFJO1VBQ0osU0FBUyxLQUFLO1VBQ2QsaUJBQWlCO1lBQ2YsTUFBTSxNQUFNO1lBQ1osR0FBRyxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUUsYUFBYSxRQUFRLEVBQUUsR0FBRyxFQUFFO1dBQ25EO1VBQ0QsY0FBYyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztVQUNyQyxpQkFBaUIsUUFBUSxDQUFDO1lBQ3hCLFlBQVksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO1lBQzNCLFdBQVcsT0FBTyxDQUFDLEVBQUUsQ0FBQztXQUN2QixDQUFDO1VBQ0YsWUFBWSxTQUFTO1lBQ25CLElBQUksWUFBWSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7Y0FDakMsTUFBTSxNQUFNLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2NBQ3BDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2Y7V0FDRjtTQUNGLENBQUMsQ0FBQztRQUNILE1BQU0sUUFBUTtVQUNaLE1BQU07VUFDTixNQUFNO1NBQ1AsQ0FBQztRQUNGLE1BQU0sVUFBVSxJQUFJLEtBQUssS0FBSyxHQUFHLENBQUMsU0FBUyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLE1BQU0sUUFBUSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMvRixNQUFNLGFBQWEsS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsT0FBTztVQUNMLEtBQUs7WUFDSCxLQUFLLEtBQUs7WUFDVixZQUFZLEVBQUUsTUFBTSxjQUFjLEVBQUU7V0FDckM7VUFDRCxVQUFVO1NBQ1gsQ0FBQztPQUNILENBQUM7TUFDRixNQUFNLGVBQWUsZ0JBQWdCO1FBQ25DLE1BQU0sTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsWUFBWTtVQUMxQyxJQUFJLENBQUMsUUFBUSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDakMsWUFBWSxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7V0FDakQ7U0FDRixDQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7TUFDRixNQUFNLGdCQUFnQixlQUFlO1FBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQztRQUNwQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUM7UUFDeEIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLFlBQVksU0FBUyxDQUFDLElBQUksRUFBRTtVQUMxQixHQUFHO1VBQ0gsS0FBSztVQUNMLElBQUk7U0FDTCxDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxhQUFhLE1BQU0sQ0FBQztRQUN4QixLQUFLO1VBQ0gsS0FBSyxLQUFLO1VBQ1YsU0FBUyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztVQUNuQyxRQUFRLEVBQUUsb0JBQW9CLE9BQU8sRUFBRTtVQUN2QyxZQUFZLEVBQUUsTUFBTSxjQUFjLEVBQUU7U0FDckM7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLGdCQUFnQixzQkFBc0I7UUFDMUMsVUFBVSxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxXQUFXO1VBQzdDLEtBQUssQ0FBQyxPQUFPLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQztTQUM3RCxDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxVQUFVLE1BQU07UUFDcEIsTUFBTSxRQUFRO1VBQ1osS0FBSyxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7VUFDN0IsT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7VUFDL0IsTUFBTSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7VUFDOUIsS0FBSyxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbkMsQ0FBQztRQUNGLE1BQU0sZUFBZSxlQUFlO1VBQ2xDLE1BQU0sTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7VUFDekIsYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztVQUN6QixXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbEIsQ0FBQztRQUNGLE1BQU0sTUFBTSxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEMsTUFBTSxNQUFNLGlCQUFpQjtVQUMzQixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN4QixDQUFDO1FBQ0YsTUFBTSxjQUFjLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZJLE1BQU0sY0FBYyxPQUFPO1VBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQztVQUNwQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUM7VUFDeEIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDO1VBQ3RCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztVQUMvQixHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7VUFDbkMsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ2xDLENBQUM7UUFDRixNQUFNLGlCQUFpQiwwQkFBMEI7VUFDL0MsTUFBTSxPQUFPLGNBQWMsTUFBTSxDQUFDO1VBQ2xDLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFO1lBQ3ZCLEdBQUcsQ0FBQyxJQUFJLEtBQUssRUFBRSxRQUFRLEtBQUssRUFBRSxDQUFDLENBQUM7V0FDakMsTUFBTTtZQUNMLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUNyQjtTQUNGLENBQUM7UUFDRixNQUFNLGFBQWEsaUJBQWlCO1VBQ2xDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUNsQixNQUFNLE1BQU0sU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1VBQzdCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1VBQ3JDLE1BQU0sTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7VUFDekIsYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztVQUN6QixXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7VUFDakIsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1VBQ3RDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDMUIsQ0FBQztRQUNGLE1BQU0sYUFBYSx1QkFBdUI7VUFDeEMsTUFBTSxNQUFNLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7VUFDaEMsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1VBQzlCLFdBQVcsRUFBRSxLQUFLLENBQUMsT0FBTztZQUN4QixNQUFNLE1BQU0sWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNwQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDdEMsYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztXQUMxQixDQUFDLENBQUM7U0FDSixDQUFDO1FBQ0YsTUFBTSxrQkFBa0IsUUFBUSxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUM7UUFDcEQsTUFBTSxlQUFlLDBCQUEwQjtVQUM3QyxNQUFNLE9BQU8sY0FBYyxNQUFNLENBQUM7VUFDbEMsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekIsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDO1dBQzlCLE1BQU07WUFDTCxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksS0FBSyxFQUFFLElBQUksTUFBTSxDQUFDLENBQUM7V0FDekM7U0FDRixDQUFDO1FBQ0YsTUFBTSxrQkFBa0IsUUFBUTtVQUM5QixPQUFPLFNBQVMsQ0FBQyxlQUFlLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztVQUNsRCxhQUFhLFNBQVMsQ0FBQyxlQUFlLEdBQUcsR0FBRyxHQUFHLGNBQWMsQ0FBQztTQUMvRCxDQUFDLENBQUM7UUFDSCxNQUFNLGFBQWEsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLE1BQU0sZUFBZSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsTUFBTSxjQUFjLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxNQUFNLGFBQWEsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLE9BQU8sU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVU7VUFDckMsS0FBSztZQUNILEtBQUssTUFBTTtZQUNYLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDL0IsWUFBWSxFQUFFLGNBQWMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLEVBQUU7V0FDN0Q7VUFDRCxZQUFZO1lBQ1YsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLFVBQVUsTUFBTSxFQUFFLFVBQVUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDNUgsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLFNBQVMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLFlBQVksTUFBTSxFQUFFLFlBQVksWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDcEksS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLFdBQVcsTUFBTSxFQUFFLFdBQVcsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEksS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLFVBQVUsTUFBTSxFQUFFLFVBQVUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDN0gsVUFBVSxPQUFPLEVBQUU7V0FDcEI7VUFDRCxnQkFBZ0IsUUFBUSxDQUFDO1lBQ3ZCLFlBQVksT0FBTyxDQUFDLEVBQUUsY0FBYyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUMvRCxNQUFNLENBQUMsaUJBQWlCLEVBQUU7Y0FDeEIsS0FBSyxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUM7Y0FDL0IsS0FBSyxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUM7Y0FDbkMsS0FBSyxDQUFDLGVBQWUsRUFBRSxjQUFjLENBQUM7YUFDdkMsQ0FBQztXQUNILENBQUM7U0FDSCxDQUFDLENBQUMsRUFBRTtVQUNILE1BQU07WUFDSixXQUFXLGVBQWU7Y0FDeEIsWUFBWSxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7Y0FDaEQsWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztjQUN4QixhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQzFCO1dBQ0Y7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxrQkFBa0IsTUFBTSxDQUFDO1FBQzdCLE9BQU87UUFDUCxNQUFNLFNBQVM7UUFDZixjQUFjLEVBQUU7UUFDaEIsTUFBTTtVQUNKLFdBQVcscUJBQXFCO1lBQzlCLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztXQUMzQjtTQUNGO1FBQ0QsV0FBVyxFQUFFO09BQ2QsQ0FBQyxDQUFDO01BQ0gsT0FBTyxlQUFlLENBQUM7S0FDeEIsQ0FBQzs7SUFFRixNQUFNLGlCQUFpQiwwQkFBMEI7TUFDL0MsTUFBTSxlQUFlLE1BQU0sTUFBTSxTQUFTLENBQUM7UUFDekMsS0FBSztVQUNILEtBQUssUUFBUTtVQUNiLFlBQVksRUFBRSxNQUFNLGNBQWMsRUFBRTtVQUNwQyxTQUFTLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDM0M7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLFlBQVksTUFBTSxNQUFNLE1BQU0sQ0FBQztRQUNuQyxLQUFLO1VBQ0gsS0FBSyxLQUFLO1VBQ1YsWUFBWSxFQUFFLE1BQU0sY0FBYyxFQUFFO1VBQ3BDLFNBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQztVQUN2QyxXQUFXLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLDJCQUEyQixDQUFDO1NBQzNGO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxZQUFZLGtCQUFrQjtRQUNsQyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUM7UUFDL0IsTUFBTSxNQUFNLE1BQU0sV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksR0FBRyxLQUFLLElBQUksRUFBRTtVQUNoQixPQUFPO1NBQ1I7UUFDRCxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDckIsR0FBRyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEMsTUFBTSxXQUFXLEdBQUcscUJBQXFCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUQsUUFBUSxhQUFhLENBQUMsQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDaEQsUUFBUSxhQUFhLENBQUMsQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDaEQsR0FBRyxVQUFVLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLEdBQUcsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLHFCQUFxQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNELFFBQVEsYUFBYSxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUMxQyxRQUFRLGFBQWEsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDMUMsR0FBRyxVQUFVLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLEdBQUcsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQ25DLENBQUM7TUFDRixNQUFNLGdCQUFnQixpQkFBaUI7UUFDckMsTUFBTSxTQUFTLE1BQU0sV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDO1FBQ2xELE1BQU0sTUFBTSxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyQyxNQUFNLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7T0FDbkMsQ0FBQztNQUNGLE1BQU0sa0JBQWtCLGlCQUFpQjtRQUN2QyxNQUFNLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sU0FBUyxDQUFDLE1BQU0sRUFBRTtVQUN0QixHQUFHLEdBQUcsV0FBVztVQUNqQixHQUFHLEdBQUcsR0FBRyxHQUFHLE1BQU07U0FDbkIsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sVUFBVSxXQUFXO1FBQ3pCLE1BQU0sa0JBQWtCLFVBQVUsQ0FBQztVQUNqQyxHQUFHLENBQUM7VUFDSixHQUFHLENBQUM7U0FDTCxDQUFDLENBQUM7UUFDSCxNQUFNLFdBQVcsMkJBQTJCO1VBQzFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUM1QyxDQUFDO1FBQ0YsTUFBTSxTQUFTLHVDQUF1QztVQUNwRCxTQUFTLENBQUMsUUFBUSxRQUFRLElBQUksRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNoRCxDQUFDO1FBQ0YsTUFBTSxtQkFBbUIsUUFBUSxDQUFDO1VBQ2hDLFNBQVMsT0FBTyxDQUFDLEVBQUUsTUFBTSxRQUFRLEtBQUssRUFBRSxDQUFDO1VBQ3pDLFFBQVEsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUNwQixDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sT0FBTyxDQUFDO1VBQ25CLEtBQUs7WUFDSCxLQUFLLEtBQUs7WUFDVixZQUFZLEVBQUUsTUFBTSxjQUFjLEVBQUU7WUFDcEMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztXQUNsQztVQUNELE9BQU87WUFDTCxNQUFNLElBQUk7WUFDVixlQUFlO1dBQ2hCO1VBQ0QsU0FBUyxLQUFLO1VBQ2QsWUFBWTtZQUNWLFlBQVk7WUFDWixTQUFTO1dBQ1Y7VUFDRCxRQUFRO1VBQ1IsTUFBTTtVQUNOLGdCQUFnQjtTQUNqQixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxzQ0FBc0MsTUFBTSxDQUFDO1FBQ2pELE9BQU87UUFDUCxNQUFNLDZCQUE2QjtRQUNuQyxjQUFjLEVBQUU7UUFDaEIsTUFBTTtVQUNKLFFBQVEsd0JBQXdCO1lBQzlCLGFBQWEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7V0FDNUI7VUFDRCxVQUFVLHdCQUF3QjtZQUNoQyxlQUFlLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1dBQzlCO1NBQ0Y7UUFDRCxXQUFXLEVBQUU7T0FDZCxDQUFDLENBQUM7TUFDSCxPQUFPLG1DQUFtQyxDQUFDO0tBQzVDLENBQUM7O0lBRUYsTUFBTSxjQUFjLHlCQUF5QjtNQUMzQyxNQUFNLFVBQVUsVUFBVTtRQUN4QixNQUFNLFVBQVUsY0FBYyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUMsQ0FBQztRQUM1RixNQUFNLFlBQVksY0FBYyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN0RCxNQUFNLHFCQUFxQixPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQzFELE1BQU0scUJBQXFCLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ3hELE1BQU0sUUFBUTtVQUNaLGFBQWEsSUFBSSxDQUFDLEdBQUcsQ0FBQztVQUN0QixZQUFZLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDcEIsQ0FBQztRQUNGLE1BQU0sWUFBWSxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzdELE1BQU0sYUFBYSxNQUFNLENBQUMsU0FBUyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRCxNQUFNLFNBQVMsTUFBTSxDQUFDLE9BQU8sT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUMsTUFBTSxnQkFBZ0IsNEJBQTRCO1VBQ2hELFVBQVUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVztZQUM3QyxTQUFTLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7V0FDaEMsQ0FBQyxDQUFDO1NBQ0osQ0FBQztRQUNGLE1BQU0sZUFBZSxzQkFBc0I7VUFDekMsTUFBTSxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQ3RDLE9BQU8sVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztXQUM5QixDQUFDLENBQUM7U0FDSixDQUFDO1FBQ0YsTUFBTSxlQUFlLDRCQUE0QjtVQUMvQyxTQUFTLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVU7WUFDM0MsTUFBTSxTQUFTLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7V0FDbEQsQ0FBQyxDQUFDO1NBQ0osQ0FBQztRQUNGLE1BQU0scUJBQXFCLHNCQUFzQjtVQUMvQyxVQUFVLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFdBQVc7WUFDN0MsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1dBQ2xDLENBQUMsQ0FBQztTQUNKLENBQUM7UUFDRixNQUFNLGNBQWMsY0FBYztVQUNoQyxNQUFNLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQzFCLEtBQUssWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDNUIsS0FBSyxXQUFXLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMzQixDQUFDO1FBQ0YsTUFBTSxhQUFhLG9DQUFvQztVQUNyRCxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1VBQ3RCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVTtZQUN4QixNQUFNLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztXQUMvQixDQUFDLENBQUM7U0FDSixDQUFDO1FBQ0YsTUFBTSxrQkFBa0IsTUFBTTtVQUM1QixNQUFNLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztVQUMvQixPQUFPLDBCQUEwQjtZQUMvQixNQUFNLFFBQVEsY0FBYyxNQUFNLE1BQU0sQ0FBQztZQUN6QyxNQUFNLFNBQVMsS0FBSyxXQUFXLElBQUksRUFBRSxDQUFDO1lBQ3RDLE1BQU0sU0FBUyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sU0FBUyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1dBQzNDLENBQUM7U0FDSCxDQUFDO1FBQ0YsTUFBTSxpQkFBaUIsTUFBTTtVQUMzQixNQUFNLFVBQVU7WUFDZCxhQUFhO1lBQ2IsWUFBWTtXQUNiLENBQUM7VUFDRixPQUFPLDBCQUEwQjtZQUMvQixNQUFNLE1BQU0sa0JBQWtCLENBQUMsY0FBYyxNQUFNLE1BQU0sQ0FBQyxDQUFDO1lBQzNELE1BQU0sU0FBUyxLQUFLLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDdkMsTUFBTSxTQUFTLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQixNQUFNLFNBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRSxNQUFNLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQyxDQUFDO1lBQy9ELE1BQU0sU0FBUyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1dBQ3hDLENBQUM7U0FDSCxDQUFDO1FBQ0YsTUFBTSxpQkFBaUIsTUFBTTtVQUMzQixNQUFNLFVBQVU7WUFDZCxhQUFhO1lBQ2IsWUFBWTtZQUNaLGtCQUFrQjtXQUNuQixDQUFDO1VBQ0YsT0FBTywwQkFBMEI7WUFDL0IsTUFBTSxNQUFNLGNBQWMsTUFBTSxJQUFJLENBQUM7WUFDckMsTUFBTSxNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztXQUN6QyxDQUFDO1NBQ0gsQ0FBQztRQUNGLE9BQU87VUFDTCxLQUFLLE1BQU0sSUFBSTtVQUNmLEtBQUssTUFBTSxJQUFJO1VBQ2YsWUFBWTtZQUNWLFVBQVUsT0FBTyxFQUFFO1lBQ25CLFNBQVMsT0FBTyxFQUFFO1lBQ2xCLE1BQU0sT0FBTyxFQUFFO1dBQ2hCO1VBQ0QsWUFBWSxRQUFRLENBQUM7WUFDbkIsTUFBTSxDQUFDLHNCQUFzQixFQUFFO2NBQzdCLEtBQUssQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLENBQUM7Y0FDckMsS0FBSyxDQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUUsQ0FBQztjQUN2QyxLQUFLLENBQUMsWUFBWSxFQUFFLGNBQWMsRUFBRSxDQUFDO2FBQ3RDLENBQUM7WUFDRixTQUFTLE9BQU8sQ0FBQyxFQUFFLE1BQU0sUUFBUSxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3ZELE1BQU0sT0FBTyxDQUFDLEVBQUUsTUFBTSxTQUFTLEVBQUUsQ0FBQztXQUNuQyxDQUFDO1NBQ0gsQ0FBQztPQUNILENBQUM7TUFDRixNQUFNLHVCQUF1QixNQUFNLENBQUM7UUFDbEMsTUFBTSxjQUFjO1FBQ3BCLGNBQWM7VUFDWixVQUFVLENBQUMsS0FBSyxDQUFDO1VBQ2pCLFNBQVMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDO1VBQzdCLFNBQVMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDO1NBQ2hDO1FBQ0QsT0FBTztPQUNSLENBQUMsQ0FBQztNQUNILE9BQU8sb0JBQW9CLENBQUM7S0FDN0IsQ0FBQzs7SUFFRixNQUFNLE9BQU8sTUFBTSxTQUFTLE9BQU8sQ0FBQyxFQUFFLE1BQU0sUUFBUSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzdELE1BQU0sWUFBWSxPQUFPLFNBQVMsT0FBTyxDQUFDLEVBQUUsTUFBTSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDaEUsTUFBTSxVQUFVLFNBQVMsU0FBUyxPQUFPLENBQUMsRUFBRSxNQUFNLFFBQVEsT0FBTyxDQUFDLElBQUksUUFBUSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLFVBQVUsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNKLE1BQU0sbUJBQW1CO01BQ3ZCLElBQUk7TUFDSixTQUFTLFNBQVM7TUFDbEIsT0FBTztLQUNSLENBQUM7O0lBRUYsTUFBTSxhQUFhLEtBQUssQ0FBQztNQUN2QixTQUFTLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQztNQUNqQyxTQUFTLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQztLQUNuQyxDQUFDLENBQUM7SUFDSCxNQUFNLFVBQVUsd0JBQXdCO01BQ3RDLE1BQU0sS0FBSyxZQUFZLENBQUMsd0NBQXdDLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO01BQzdGLE9BQU8sWUFBWSxPQUFPLENBQUM7UUFDekIsT0FBTztVQUNMLE1BQU0sUUFBUTtVQUNkLFVBQVUsUUFBUTtZQUNoQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsTUFBTSxXQUFXLFlBQVksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlDLE9BQU8sRUFBRSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7V0FDakM7VUFDRCxVQUFVLG9CQUFvQjtZQUM1QixNQUFNLFdBQVcsRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVCLFlBQVksU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztXQUN4QztTQUNGO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sV0FBVyxxQ0FBcUMsWUFBWSxPQUFPLENBQUM7TUFDeEUsT0FBTztRQUNMLE1BQU0sUUFBUTtRQUNkLEdBQUcsZUFBZSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3BFLFVBQVUsTUFBTTtRQUNoQixVQUFVLE1BQU07T0FDakI7S0FDRixDQUFDLENBQUM7SUFDSCxNQUFNLGNBQWMsa0NBQWtDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JJLE1BQU0sVUFBVSxtQkFBbUIsV0FBVyxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDOUUsTUFBTSxTQUFTLGdCQUFnQixZQUFZLE9BQU8sQ0FBQztNQUNqRCxPQUFPO1FBQ0wsTUFBTSxRQUFRO1FBQ2QsWUFBWTtPQUNiO0tBQ0YsQ0FBQyxDQUFDOztJQUVILE1BQU0sVUFBVTtNQUNkLDZCQUE2QixHQUFHO01BQ2hDLG1DQUFtQyxlQUFlO01BQ2xELCtCQUErQixHQUFHO01BQ2xDLHFDQUFxQyxpQkFBaUI7TUFDdEQsOEJBQThCLEdBQUc7TUFDakMsb0NBQW9DLGdCQUFnQjtNQUNwRCw2QkFBNkIsR0FBRztNQUNoQyxtQ0FBbUMsZ0JBQWdCO01BQ25ELHlCQUF5QixnQkFBZ0I7TUFDekMscUJBQXFCLGNBQWM7TUFDbkMsc0JBQXNCLGVBQWU7S0FDdEMsQ0FBQztJQUNGLE1BQU0sY0FBYyxxQkFBcUIsT0FBTztNQUM5QyxPQUFPLGlCQUFpQixVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDbEQsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLDJDQUEyQztNQUNuRSxNQUFNLFdBQVcsT0FBTyxNQUFNLEdBQUcsR0FBRyxDQUFDO01BQ3JDLE1BQU0sc0JBQXNCLFdBQVcsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztNQUNsRixNQUFNLGFBQWEsUUFBUTtRQUN6QixRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRTtVQUM5QixNQUFNLFdBQVc7VUFDakIsT0FBTyxJQUFJO1NBQ1osQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sZUFBZSxRQUFRO1FBQzNCLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFO1VBQzlCLE1BQU0sV0FBVztVQUNqQixPQUFPLEtBQUs7U0FDYixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxZQUFZLE1BQU0sQ0FBQyxtQkFBbUIsT0FBTyxDQUFDO1FBQ2xELEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLENBQUM7VUFDN0MsWUFBWSxFQUFFLE1BQU0sY0FBYyxFQUFFO1NBQ3JDO1FBQ0QsVUFBVTtRQUNWLFlBQVk7T0FDYixDQUFDLENBQUMsQ0FBQztNQUNKLE9BQU87UUFDTCxLQUFLLEVBQUUsS0FBSyxLQUFLLEVBQUU7UUFDbkIsWUFBWSxDQUFDLFNBQVMsT0FBTyxFQUFFLENBQUM7UUFDaEMsWUFBWSxRQUFRLENBQUM7VUFDbkIsUUFBUSxDQUFDLFdBQVcsRUFBRSxRQUFRO1lBQzVCLE1BQU0sU0FBUyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQyxNQUFNLGFBQWEsU0FBUyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEQsTUFBTSxTQUFTLFVBQVUsS0FBSyxDQUFDLFdBQVc7Y0FDeEMsTUFBTSxhQUFhLFlBQVksU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2NBQ2xELE9BQU8sVUFBVSxJQUFJLENBQUM7YUFDdkIsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxhQUFhLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztXQUNuRSxFQUFFLG9CQUFvQjtZQUNyQixNQUFNLFVBQVUsdUNBQXVDLENBQUM7WUFDeEQsTUFBTSxTQUFTLFFBQVEsS0FBSyxDQUFDLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RixNQUFNLFNBQVMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsTUFBTSxhQUFhLFNBQVMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hELFVBQVUsS0FBSyxDQUFDLE1BQU07Y0FDcEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQzthQUNsQyxFQUFFLFdBQVc7Y0FDWixZQUFZLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLE1BQU0sTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztjQUMxRCxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZO2dCQUM3QyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7ZUFDekIsQ0FBQyxDQUFDO2FBQ0osQ0FBQyxDQUFDO1dBQ0osQ0FBQztVQUNGLGdCQUFnQixLQUFLLEVBQUU7U0FDeEIsQ0FBQztPQUNILENBQUM7S0FDSCxDQUFDOztJQUVGLElBQUksV0FBVyxPQUFPLEtBQUssTUFBTSxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQzs7SUFFOUQsTUFBTSxvQkFBb0IsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RELE1BQU0scUJBQXFCLFFBQVE7TUFDakMsTUFBTSxZQUFZLE9BQU8sRUFBRSxDQUFDO01BQzVCLE1BQU0sY0FBYyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztNQUN2RCxNQUFNLGVBQWUsT0FBTyxFQUFFLENBQUM7TUFDL0IsT0FBTztRQUNMLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMsbUJBQW1CLENBQUM7U0FDL0I7UUFDRCxZQUFZLFFBQVEsQ0FBQztVQUNuQixNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxhQUFhLENBQUMsYUFBYTtjQUN2RCxXQUFXLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU07Z0JBQ3ZDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRSxRQUFRLElBQUksQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDLElBQUksU0FBUyxFQUFFLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksQ0FBQyxFQUFFLFFBQVEsSUFBSSxFQUFFLElBQUksU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU07a0JBQ2hLLFlBQVksR0FBRyxDQUFDLFVBQVU7b0JBQ3hCLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO21CQUNyQixDQUFDLENBQUM7a0JBQ0gsWUFBWSxNQUFNLEVBQUUsQ0FBQztrQkFDckIsU0FBUyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ25CLENBQUMsQ0FBQztlQUNKLENBQUMsQ0FBQzthQUNKLENBQUMsQ0FBQyxDQUFDO1VBQ04sUUFBUSxDQUFDLFFBQVEsS0FBSyxFQUFFLEVBQUUsTUFBTSxTQUFTLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxZQUFZLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsc0JBQXNCO1lBQ25JLFNBQVMsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztXQUMvRSxDQUFDO1VBQ0YsZ0JBQWdCLEtBQUssRUFBRTtTQUN4QixDQUFDO1FBQ0YsWUFBWSxDQUFDLFdBQVcsT0FBTyxFQUFFLENBQUM7T0FDbkMsQ0FBQztLQUNILENBQUM7O0lBRUYsSUFBSSxXQUFXLE9BQU8sS0FBSyxNQUFNLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDOztJQUVoRSxNQUFNLG9CQUFvQiwrQkFBK0I7TUFDdkQsTUFBTSx3QkFBd0IsUUFBUSxRQUFRLENBQUMsa0JBQWtCLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7TUFDbEcsTUFBTSx1QkFBdUIsUUFBUSxNQUFNLENBQUMscUJBQXFCLEVBQUUsUUFBUSxRQUFRLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUMxSSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztLQUNwRCxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsMkNBQTJDO01BQ2hFLE1BQU0sVUFBVSxXQUFXO1FBQ3pCLEVBQUUsS0FBSyxFQUFFLENBQUM7T0FDWCxDQUFDO01BQ0YsTUFBTSxXQUFXLFdBQVcsY0FBYztRQUN4QyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUs7VUFDbkIsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNiLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLFNBQVMsY0FBYztRQUMzQixJQUFJLEVBQUUsQ0FBQztRQUNQLElBQUksQ0FBQyxTQUFTLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUMvQixNQUFNLGdCQUFnQixFQUFFLE1BQU0sSUFBSSxDQUFDO1VBQ25DLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLGFBQWEsYUFBYSxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNwRztPQUNGLENBQUM7TUFDRixNQUFNLFdBQVcsK0JBQStCO1FBQzlDLE1BQU0sUUFBUSxjQUFjLE1BQU0sSUFBSSxPQUFPLENBQUM7UUFDOUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDO09BQ3JDLENBQUM7TUFDRixNQUFNLGNBQWMsc0JBQXNCO1FBQ3hDLElBQUksS0FBSyxFQUFFO1VBQ1QsWUFBWSxTQUFTLENBQUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7VUFDL0UsUUFBUSxDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsRUFBRSxNQUFNLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQztTQUMzRDtPQUNGLENBQUM7TUFDRixNQUFNLFdBQVcsTUFBTSxDQUFDO1FBQ3RCLEtBQUs7VUFDSCxLQUFLLE9BQU87VUFDWixZQUFZO1lBQ1YsTUFBTSxNQUFNO1lBQ1osUUFBUSxTQUFTO1dBQ2xCO1VBQ0QsUUFBUSxFQUFFLFNBQVMsTUFBTSxFQUFFO1NBQzVCO1FBQ0QsWUFBWSxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUU7WUFDOUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1dBQ2QsQ0FBQyxDQUFDLENBQUM7T0FDUCxDQUFDLENBQUM7TUFDSCxNQUFNLGNBQWMsTUFBTTtRQUN4QixLQUFLLENBQUMsSUFBSTtRQUNWLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMsd0JBQXdCLENBQUM7U0FDcEM7UUFDRCxZQUFZLFFBQVEsQ0FBQztVQUNuQixNQUFNLENBQUMsV0FBVyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7VUFDN0IsZ0JBQWdCLEtBQUssRUFBRTtVQUN2QixTQUFTLE9BQU8sQ0FBQyxFQUFFLENBQUM7VUFDcEIsUUFBUSxPQUFPLENBQUM7WUFDZCxhQUFhLFdBQVc7WUFDeEIsaUJBQWlCLEtBQUs7V0FDdkIsQ0FBQztVQUNGLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRTtZQUN4QixLQUFLLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQztjQUMxQixPQUFPO2NBQ1AsUUFBUSxPQUFPO2FBQ2hCLENBQUMsQ0FBQztZQUNILEtBQUssQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDO2NBQzFCLE9BQU87Y0FDUCxRQUFRLE9BQU87YUFDaEIsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUM7WUFDMUIsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7Y0FDckIsT0FBTztjQUNQLE1BQU07YUFDUCxDQUFDLENBQUM7WUFDSCxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsUUFBUSxDQUFDO1dBQzFCLENBQUM7U0FDSCxDQUFDO1FBQ0YsWUFBWSxDQUFDO1lBQ1QsS0FBSztjQUNILEtBQUssS0FBSztjQUNWLFNBQVMsQ0FBQyxjQUFjLENBQUM7Y0FDekIsUUFBUSxFQUFFO2FBQ1g7WUFDRCxZQUFZO2NBQ1Y7Z0JBQ0UsS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFO2dCQUNqQixZQUFZLENBQUMsTUFBTSxDQUFDLGtCQUFrQixVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO2VBQ3pFO2NBQ0QsTUFBTSxPQUFPLENBQUM7Z0JBQ1osS0FBSztrQkFDSCxLQUFLLFFBQVE7a0JBQ2IsUUFBUSxFQUFFLFVBQVUsVUFBVSxFQUFFO2tCQUNoQyxTQUFTO29CQUNQLFlBQVk7b0JBQ1osdUJBQXVCO21CQUN4QjtpQkFDRjtnQkFDRCxZQUFZO2tCQUNWLE1BQU0sQ0FBQyxrQkFBa0IsVUFBVSxDQUFDLHFCQUFxQixDQUFDLENBQUM7a0JBQzNELFFBQVEsT0FBTyxFQUFFO2lCQUNsQjtnQkFDRCxRQUFRLFFBQVE7a0JBQ2QsTUFBTSxZQUFZLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2tCQUNyQyxTQUFTLFFBQVEsSUFBSSxNQUFNLEVBQUUsQ0FBQztpQkFDL0I7Z0JBQ0Qsa0JBQWtCLFFBQVEsQ0FBQztrQkFDekIsV0FBVyxPQUFPLENBQUMsRUFBRSxDQUFDO2tCQUN0QixnQkFBZ0IsT0FBTyxDQUFDLGtCQUFrQixXQUFXLENBQUM7a0JBQ3RELGVBQWUsRUFBRTtpQkFDbEIsQ0FBQztlQUNILENBQUM7YUFDSDtXQUNGLENBQUM7T0FDTCxDQUFDLENBQUM7TUFDSCxNQUFNLFNBQVMsSUFBSSxNQUFNLElBQUksQ0FBQyxTQUFTLGFBQWEsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO01BQ2pGLE1BQU0sU0FBUyxTQUFTLE1BQU0sTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLFFBQVEsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO01BQzNFLE9BQU8sbUJBQW1CLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLDRCQUE0QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDaEYsQ0FBQzs7SUFFRixNQUFNLGFBQWEsc0JBQXNCO01BQ3ZDLEtBQUs7UUFDSCxLQUFLLEtBQUs7UUFDVixTQUFTO1VBQ1AsZ0JBQWdCO1VBQ2hCLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxRQUFRLEVBQUUsR0FBRyxDQUFDO1NBQ3ZDO09BQ0Y7TUFDRCxZQUFZLEtBQUssQ0FBQyxJQUFJLE1BQU0sRUFBRSxTQUFTLFlBQVksQ0FBQztLQUNyRCxDQUFDLENBQUM7O0lBRUgsTUFBTSxZQUFZLGNBQWM7TUFDOUIsSUFBSSxRQUFRLElBQUksQ0FBQztNQUNqQixJQUFJLE9BQU8sSUFBSSxDQUFDO01BQ2hCLE1BQU0sU0FBUyxNQUFNO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7VUFDbEIsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1VBQ3BCLFFBQVEsSUFBSSxDQUFDO1VBQ2IsT0FBTyxJQUFJLENBQUM7U0FDYjtPQUNGLENBQUM7TUFDRixNQUFNLFdBQVcsQ0FBQyxVQUFVLEtBQUs7UUFDL0IsT0FBTyxPQUFPLENBQUM7UUFDZixJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtVQUNqQixRQUFRLFVBQVUsQ0FBQyxNQUFNO1lBQ3ZCLE1BQU0sV0FBVyxJQUFJLENBQUM7WUFDdEIsUUFBUSxJQUFJLENBQUM7WUFDYixPQUFPLElBQUksQ0FBQztZQUNaLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztXQUMxQixFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ1Y7T0FDRixDQUFDO01BQ0YsT0FBTztRQUNMLE1BQU07UUFDTixRQUFRO09BQ1QsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFFBQVEsY0FBYztNQUMxQixJQUFJLFFBQVEsSUFBSSxDQUFDO01BQ2pCLE1BQU0sU0FBUyxNQUFNO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7VUFDbEIsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1VBQ3BCLFFBQVEsSUFBSSxDQUFDO1NBQ2Q7T0FDRixDQUFDO01BQ0YsTUFBTSxXQUFXLENBQUMsT0FBTyxLQUFLO1FBQzVCLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO1VBQ2pCLFFBQVEsVUFBVSxDQUFDLE1BQU07WUFDdkIsUUFBUSxJQUFJLENBQUM7WUFDYixFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDdEIsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNWO09BQ0YsQ0FBQztNQUNGLE9BQU87UUFDTCxNQUFNO1FBQ04sUUFBUTtPQUNULENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxPQUFPLGNBQWM7TUFDekIsSUFBSSxRQUFRLElBQUksQ0FBQztNQUNqQixNQUFNLFNBQVMsTUFBTTtRQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO1VBQ2xCLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztVQUNwQixRQUFRLElBQUksQ0FBQztTQUNkO09BQ0YsQ0FBQztNQUNGLE1BQU0sV0FBVyxDQUFDLE9BQU8sS0FBSztRQUM1QixNQUFNLEVBQUUsQ0FBQztRQUNULFFBQVEsVUFBVSxDQUFDLE1BQU07VUFDdkIsUUFBUSxJQUFJLENBQUM7VUFDYixFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDdEIsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUNWLENBQUM7TUFDRixPQUFPO1FBQ0wsTUFBTTtRQUNOLFFBQVE7T0FDVCxDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLGVBQWUsVUFBVSxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDN0QsTUFBTSxjQUFjLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQzNELE1BQU0sbUJBQW1CLFdBQVc7TUFDbEMsT0FBTztRQUNMLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixRQUFRO1lBQ04sT0FBTyxLQUFLO1lBQ1osUUFBUSxLQUFLO1lBQ2IsU0FBUyxNQUFNO1dBQ2hCO1VBQ0QsWUFBWSxFQUFFLFVBQVUsR0FBRyxFQUFFO1VBQzdCLE9BQU87U0FDUjtRQUNELFlBQVksUUFBUSxDQUFDO1VBQ25CLFFBQVEsT0FBTyxDQUFDLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQztVQUNqQyxXQUFXLE9BQU8sQ0FBQyxFQUFFLENBQUM7U0FDdkIsQ0FBQztPQUNILENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxRQUFRLDRCQUE0QjtNQUN4QyxPQUFPO1FBQ0wsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVM7WUFDUCxZQUFZO1lBQ1osR0FBRyxnQkFBZ0IsTUFBTSxDQUFDLEVBQUUsQ0FBQztXQUM5QjtTQUNGO1FBQ0QsWUFBWTtVQUNWLGdCQUFnQixDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7VUFDaEMsSUFBSTtVQUNKLGdCQUFnQixDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDaEM7UUFDRCxZQUFZLFFBQVEsQ0FBQyxDQUFDLGdCQUFnQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUNwRCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sYUFBYSwyQkFBMkI7TUFDNUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUMvQixLQUFLO1VBQ0gsT0FBTyxDQUFDO1VBQ1IsUUFBUTtTQUNUO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sVUFBVSwyQkFBMkI7TUFDekMsTUFBTSxTQUFTLFVBQVUsUUFBUSxDQUFDO01BQ2xDLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsRUFBRTtRQUM3QixVQUFVLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQzdCLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxFQUFFO1FBQ25DLFVBQVUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDOUI7S0FDRixDQUFDO0lBQ0YsTUFBTSxlQUFlLFdBQVc7TUFDOUIsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFO1FBQ3RCLEdBQUcsR0FBRyxZQUFZO1FBQ2xCLEdBQUcsR0FBRyxXQUFXO09BQ2xCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNyQixDQUFDOztJQUVGLE1BQU0sZ0JBQWdCLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNsRCxNQUFNLGVBQWUsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sY0FBYyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDOUMsTUFBTSxnQkFBZ0IsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2xELE1BQU0seUJBQXlCLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sNEJBQTRCLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDOztJQUVyRSxNQUFNLFVBQVUsUUFBUSxFQUFFLFFBQVEsQ0FBQztJQUNuQyxNQUFNLFdBQVcsT0FBTyxTQUFTLEVBQUUsQ0FBQztJQUNwQyxNQUFNLFlBQVksT0FBTyxVQUFVLEVBQUUsQ0FBQztJQUN0QyxNQUFNLG9CQUFvQixRQUFRLElBQUksU0FBUyxDQUFDO0lBQ2hELE1BQU0sYUFBYSxPQUFPLFdBQVcsRUFBRSxDQUFDO0lBQ3hDLE1BQU0sMEJBQTBCLENBQUMsdUNBQXVDLEtBQUssSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsWUFBWSxJQUFJLFlBQVksQ0FBQztJQUNqSSxNQUFNLFlBQVksWUFBWSxHQUFHLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLFFBQVEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0UsTUFBTSxzQkFBc0IsZUFBZTtNQUN6QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUM7TUFDdEIsT0FBTyxRQUFRLEtBQUssQ0FBQyxDQUFDLHdCQUF3QixLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksQ0FBQyxRQUFRLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksVUFBVSxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztLQUMvTixDQUFDO0lBQ0YsTUFBTSxhQUFhLHFDQUFxQztNQUN0RCxNQUFNLFNBQVMsYUFBYSxJQUFJLENBQUM7TUFDakMsUUFBUSxLQUFLLENBQUMsTUFBTSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLE9BQU87UUFDNUQsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sbUJBQW1CLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07VUFDaEUsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDO1VBQzdCLE9BQU8sRUFBRSxDQUFDO1NBQ1gsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNuQyxNQUFNLG1CQUFtQixNQUFNO1VBQzdCLE1BQU0sTUFBTSxNQUFNLGNBQWMsQ0FBQztVQUNqQyxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN0QixJQUFJLGdCQUFnQixFQUFFO2NBQ3BCLFNBQVMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDMUIsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLElBQUksaUJBQWlCLElBQUksYUFBYSxLQUFLLENBQUMsRUFBRTtjQUN4RSxTQUFTLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDO2FBQy9CO1dBQ0Y7U0FDRixDQUFDO1FBQ0YsSUFBSSxRQUFRLEVBQUU7VUFDWixNQUFNLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNuRTtRQUNELEdBQUcsS0FBSyxFQUFFLENBQUM7UUFDWCxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQixHQUFHLE1BQU0sRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDLFFBQVEsRUFBRTtVQUNiLGdCQUFnQixFQUFFLENBQUM7U0FDcEI7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsTUFBTSxDQUFDLGlCQUFpQixFQUFFLFFBQVEsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDekUsTUFBTSxzQkFBc0IsZ0JBQWdCLElBQUksQ0FBQyxZQUFZLFNBQVMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM5RixNQUFNLG1CQUFtQix5QkFBeUI7TUFDaEQsTUFBTSxjQUFjLElBQUksQ0FBQyxXQUFXLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ2hELE9BQU87UUFDTCxVQUFVLG1CQUFtQixXQUFXLElBQUksRUFBRTtRQUM5QyxVQUFVLDBCQUEwQjtVQUNsQyxJQUFJLFdBQVcsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzlCLE1BQU0sZ0JBQWdCLGNBQWMsUUFBUSxDQUFDO1lBQzdDLE1BQU0saUJBQWlCLE1BQU0sS0FBSyxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEUsSUFBSSxNQUFNLEVBQUU7Y0FDVixtQkFBbUIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxhQUFhLFNBQVMsU0FBUyxDQUFDLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQzthQUN4SCxNQUFNO2NBQ0wsY0FBYyxFQUFFLENBQUM7YUFDbEI7V0FDRjtVQUNELFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZCO09BQ0YsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLGVBQWUsMkNBQTJDO01BQzlELE1BQU0sWUFBWSxvQkFBb0IsQ0FBQztNQUN2QyxNQUFNLGNBQWMsSUFBSSxZQUFZLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO01BQ3ZFLE1BQU0seUJBQXlCLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO01BQzFFLE1BQU0sYUFBYTtRQUNqQixHQUFHLElBQUksTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNqRCxHQUFHLFdBQVcsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN4RCxHQUFHLElBQUksVUFBVSxHQUFHLEVBQUUsU0FBUyxpQ0FBaUMsRUFBRSxHQUFHLEVBQUU7T0FDeEUsQ0FBQztNQUNGLE1BQU0sV0FBVyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsSUFBSSxjQUFjLENBQUMsQ0FBQztNQUNuRSxNQUFNLFNBQVMsSUFBSSxNQUFNLElBQUksQ0FBQyxTQUFTLGFBQWEsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO01BQ2pGLE1BQU0sVUFBVSxXQUFXLEtBQUssQ0FBQyxRQUFRLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFO1FBQ3RFLEtBQUssT0FBTyxJQUFJO1FBQ2hCLEtBQUs7VUFDSCxLQUFLLFFBQVE7VUFDYixVQUFVO1VBQ1YsU0FBUztZQUNQLFNBQVM7WUFDVCxHQUFHLFdBQVc7V0FDZjtTQUNGO1FBQ0QsWUFBWSxRQUFRLENBQUM7VUFDbkIsV0FBVyxPQUFPLENBQUMsRUFBRSxDQUFDO1VBQ3RCLFFBQVEsT0FBTyxDQUFDLEVBQUUsQ0FBQztVQUNuQixRQUFRLENBQUMsV0FBVyxFQUFFLFFBQVEsU0FBUyxFQUFFLFFBQVEsU0FBUyxDQUFDO1VBQzNELFNBQVMsT0FBTyxDQUFDO1lBQ2YsVUFBVTtjQUNSLENBQUMseUJBQXlCLEdBQUc7Z0JBQzNCLFdBQVcsbUJBQW1CO2tCQUM1QixPQUFPLFNBQVMsS0FBSyxDQUFDLFlBQVk7b0JBQ2hDLGFBQWEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVTtzQkFDekMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxJQUFJLFFBQVEsRUFBRSxRQUFRLENBQUMsR0FBRyxLQUFLLEdBQUcsUUFBUSxDQUFDO3NCQUN4RCxDQUFDLENBQUMsTUFBTSxFQUFFLDJCQUEyQixDQUFDLENBQUM7cUJBQ3hDLENBQUMsQ0FBQzttQkFDSixDQUFDLENBQUM7aUJBQ0o7ZUFDRjthQUNGO1dBQ0YsQ0FBQztTQUNILENBQUM7T0FDSCxDQUFDLENBQUM7TUFDSCxNQUFNLFNBQVMsU0FBUyxNQUFNLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztNQUN2RSxPQUFPLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ2hGLENBQUM7O0lBRUYsTUFBTSxRQUFRLFNBQVMsSUFBSSxPQUFPLENBQUMscUJBQXFCO01BQ3RELE1BQU0sU0FBUyxNQUFNO1FBQ25CLE9BQU8sRUFBRSxDQUFDO1FBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO09BQ2hCLENBQUM7TUFDRixNQUFNLFlBQVk7UUFDaEIsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU07VUFDekIsT0FBTyxFQUFFLENBQUM7VUFDVixNQUFNLENBQUMsa0NBQWtDLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDO1NBQzVELENBQUM7T0FDSCxDQUFDO01BQ0YsTUFBTSxVQUFVLE1BQU0sTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztNQUN6RCxJQUFJLEtBQUssSUFBSSxTQUFTLEVBQUU7UUFDdEIsTUFBTSxFQUFFLENBQUM7T0FDVjtLQUNGLENBQUMsQ0FBQzs7SUFFSCxNQUFNLHlCQUF5Qiw0REFBNEQ7TUFDekYsTUFBTSxRQUFRLFVBQVUsR0FBRyxJQUFJLENBQUM7TUFDaEMsTUFBTSxTQUFTLFdBQVcsR0FBRyxJQUFJLENBQUM7TUFDbEMsTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxVQUFVLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztNQUNyRCxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLFdBQVcsR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ3RELE9BQU87UUFDTCxNQUFNLElBQUksU0FBUyxFQUFFLEdBQUcsSUFBSTtRQUM1QixLQUFLLEdBQUcsU0FBUyxFQUFFLEdBQUcsSUFBSTtRQUMxQixPQUFPLEtBQUssU0FBUyxFQUFFLEdBQUcsSUFBSTtRQUM5QixRQUFRLE1BQU0sU0FBUyxFQUFFLEdBQUcsSUFBSTtPQUNqQyxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sWUFBWSwwQkFBMEI7TUFDMUMsTUFBTSxTQUFTLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUM1QixNQUFNLFNBQVMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQzVCLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssRUFBRSxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3JELENBQUM7SUFDRixNQUFNLHFCQUFxQix1QkFBdUI7TUFDaEQsTUFBTSxhQUFhLElBQUksQ0FBQyxXQUFXLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ3hELE1BQU0sV0FBVyxNQUFNLENBQUM7UUFDdEIsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQztVQUNwQyxZQUFZLFdBQVcsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1NBQ25FO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxlQUFlLE1BQU0sQ0FBQztRQUMxQixLQUFLO1VBQ0gsS0FBSyxLQUFLO1VBQ1YsU0FBUyxDQUFDLDZCQUE2QixDQUFDO1VBQ3hDLFlBQVksRUFBRSxNQUFNLGNBQWMsRUFBRTtTQUNyQztRQUNELFlBQVksQ0FBQyxRQUFRLE9BQU8sRUFBRSxDQUFDO09BQ2hDLENBQUMsQ0FBQztNQUNILE1BQU0sV0FBVywwQkFBMEI7UUFDekMsTUFBTSxpQkFBaUIsRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7UUFDekMsSUFBSSxLQUFLLEtBQUssQ0FBQyxLQUFLLGNBQWMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdDLElBQUksWUFBWSxLQUFLLENBQUMsS0FBSyxjQUFjLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzRCxJQUFJLGFBQWEsS0FBSyxDQUFDLEtBQUssY0FBYyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0QsVUFBVSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0IsTUFBTSx3QkFBd0IsTUFBTTtVQUNsQyxNQUFNLGlDQUFpQyxHQUFHLGNBQWMsQ0FBQztVQUN6RCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQzNELElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO2NBQ3JCLE1BQU0sSUFBSSxTQUFTLENBQUMsY0FBYyxRQUFRLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO2NBQ3ZFLGNBQWMsS0FBSyxHQUFHLENBQUMsQ0FBQzthQUN6QjtZQUNELE1BQU0sV0FBVyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsY0FBYyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUMsY0FBYyxRQUFRLENBQUMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGNBQWMsS0FBSyxDQUFDLENBQUM7WUFDdEosWUFBWSxPQUFPLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxhQUFhO2NBQ3BELE1BQU0sQ0FBQyxTQUFTLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQzthQUNyQyxDQUFDLENBQUM7V0FDSjtTQUNGLENBQUM7UUFDRixRQUFRLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLGtCQUFrQjtVQUNyRCxNQUFNLE1BQU0sY0FBYyxRQUFRLENBQUM7VUFDbkMsSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ2xDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLENBQUM7WUFDNUIsUUFBUSxDQUFDLGNBQWMsUUFBUSxFQUFFLDBCQUEwQixDQUFDLENBQUM7V0FDOUQ7VUFDRCxxQkFBcUIsRUFBRSxDQUFDO1VBQ3hCLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU87WUFDckIsSUFBSSxjQUFjLFVBQVUsRUFBRSxZQUFZLEVBQUUsRUFBRTtjQUM1QyxLQUFLLENBQUMsY0FBYyxRQUFRLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztjQUMxRCxjQUFjLFlBQVksR0FBRyxHQUFHLElBQUksYUFBYSxDQUFDO2NBQ2xELGNBQWMsYUFBYSxHQUFHLEdBQUcsSUFBSSxjQUFjLENBQUM7Y0FDcEQscUJBQXFCLEVBQUUsQ0FBQzthQUN6QjtXQUNGLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLFNBQVMsRUFBRSxDQUFDO01BQ2xCLElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztNQUN6QyxNQUFNLG9CQUFvQixXQUFXLElBQUksQ0FBQyxNQUFNO1FBQzlDLEtBQUssQ0FBQyxJQUFJO1FBQ1YsTUFBTSxRQUFRLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUMzQixhQUFhLFFBQVEsS0FBSyxDQUFDLENBQUMsWUFBWSxDQUFDO1FBQ3pDLGNBQWMsUUFBUSxLQUFLLENBQUMsQ0FBQyxhQUFhLENBQUM7T0FDNUMsQ0FBQyxDQUFDLENBQUM7TUFDSixPQUFPO1FBQ0wsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQztVQUM3QixNQUFNO1VBQ04sWUFBWSxFQUFFLE1BQU0sY0FBYyxFQUFFO1NBQ3JDO1FBQ0QsWUFBWSxDQUFDLFlBQVksT0FBTyxFQUFFLENBQUM7UUFDbkMsWUFBWSxRQUFRLENBQUM7VUFDbkIsZ0JBQWdCLEtBQUssRUFBRTtVQUN2QixRQUFRLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxVQUFVLElBQUksRUFBRSxFQUFFLFFBQVEsQ0FBQztTQUM5RCxDQUFDO09BQ0gsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxnQkFBZ0IsMkJBQTJCO01BQy9DLE1BQU0sWUFBWSxXQUFXLENBQUM7TUFDOUIsTUFBTSxjQUFjLElBQUksTUFBTSxLQUFLLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7TUFDOUUsTUFBTSxXQUFXLElBQUksTUFBTSxLQUFLLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7TUFDckUsTUFBTSxRQUFRO1FBQ1osS0FBSztVQUNILEtBQUssT0FBTztVQUNaLFNBQVM7WUFDUCxTQUFTO1lBQ1QsR0FBRyxXQUFXO1lBQ2QsR0FBRyxRQUFRO1dBQ1o7U0FDRjtRQUNELFlBQVksQ0FBQyxNQUFNLENBQUMsZUFBZSxVQUFVLFVBQVUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUM7T0FDdEUsQ0FBQztNQUNGLE1BQU0sUUFBUSxLQUFLLENBQUMsSUFBSSxNQUFNLEVBQUUsZUFBZSxZQUFZLENBQUMsQ0FBQztNQUM3RCxPQUFPO1FBQ0wsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQztTQUM3QjtRQUNELFlBQVk7VUFDVixLQUFLO1VBQ0wsR0FBRyxLQUFLO1NBQ1Q7UUFDRCxZQUFZLFFBQVEsQ0FBQztVQUNuQixnQkFBZ0IsS0FBSyxFQUFFO1VBQ3ZCLFNBQVMsT0FBTyxDQUFDLEVBQUUsQ0FBQztVQUNwQixPQUFPLENBQUMsUUFBUSxLQUFLLEVBQUUsQ0FBQztVQUN4QixNQUFNLE9BQU8sQ0FBQyxFQUFFLE1BQU0sU0FBUyxFQUFFLENBQUM7U0FDbkMsQ0FBQztPQUNILENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sK0JBQStCLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzFFLE1BQU0seUJBQXlCLFFBQVEsY0FBYyxDQUFDLDJCQUEyQjtNQUMvRSxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLFdBQVc7UUFDaEMsUUFBUSxDQUFDLElBQUksRUFBRSw0QkFBNEIsRUFBRSxFQUFFLFdBQVcsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNyRSxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztPQUN4QixDQUFDLENBQUM7S0FDSixDQUFDLENBQUM7SUFDSCxNQUFNLDJCQUEyQixVQUFVLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUM1RSxNQUFNLDBCQUEwQjtNQUM5QixDQUFDLFNBQVMsRUFBRSxHQUFHO1FBQ2IsV0FBVztRQUNYLHNCQUFzQjtRQUN0QixVQUFVO1FBQ1YsdUJBQXVCO09BQ3hCO01BQ0QsQ0FBQyxhQUFhLEVBQUUsR0FBRztRQUNqQix1QkFBdUI7UUFDdkIsd0JBQXdCO09BQ3pCO01BQ0QsQ0FBQyxTQUFTLEVBQUUsR0FBRztRQUNiLFVBQVU7UUFDVixzQkFBc0I7UUFDdEIsd0JBQXdCO09BQ3pCO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLG1CQUFtQixRQUFRLEtBQUssQ0FBQyxJQUFJLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7O0lBRTVGLE1BQU0sZUFBZSx5Q0FBeUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtNQUMvRSxLQUFLLE1BQU07TUFDWCxTQUFTO1FBQ1AsVUFBVTtRQUNWLHFCQUFxQjtPQUN0QjtNQUNELFVBQVU7S0FDWCxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ2xCLE1BQU0sdUJBQXVCLDZCQUE2QixZQUFZLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwRyxNQUFNLGdDQUFnQyw2QkFBNkIsWUFBWSxDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsQ0FBQyxTQUFTLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakksTUFBTSxnQkFBZ0IsdUNBQXVDO01BQzNELEtBQUs7UUFDSCxLQUFLLE1BQU07UUFDWCxTQUFTLENBQUMsQ0FBQyxHQUFHLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztPQUN2QztNQUNELFlBQVksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ3hELFlBQVksUUFBUSxDQUFDLENBQUMsU0FBUyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUM3QyxDQUFDLENBQUM7O0lBRUgsTUFBTSxpQkFBaUIsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDdEQsTUFBTSxpQkFBaUIsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDdEQsTUFBTSx1QkFBdUIsbUNBQW1DO01BQzlELE1BQU0sZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNqQyxNQUFNLG9CQUFvQixJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGVBQWUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2hILE1BQU0sb0JBQW9CLElBQUksS0FBSyxJQUFJLENBQUMsWUFBWSxNQUFNLENBQUMsNkJBQTZCLENBQUMsUUFBUSxFQUFFLGVBQWUsVUFBVSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDdEksTUFBTSxzQkFBc0IsY0FBYztRQUN4QyxNQUFNLFdBQVcsWUFBWSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsUUFBUSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekIsUUFBUSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELFFBQVEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDNUIsQ0FBQztNQUNGLE1BQU0sT0FBTyxJQUFJLEtBQUssS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztNQUM1RCxNQUFNLG9CQUFvQixJQUFJLFFBQVEsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsV0FBVztRQUNqRSxNQUFNLG9CQUFvQixlQUFlLFVBQVUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZFLE9BQU87VUFDTCxTQUFTLGlCQUFpQjtVQUMxQixjQUFjLGlCQUFpQjtTQUNoQyxDQUFDO09BQ0gsQ0FBQyxDQUFDO01BQ0gsTUFBTSxXQUFXLFFBQVEsQ0FBQyxjQUFjLEVBQUU7UUFDeEMsS0FBSyxLQUFLO1FBQ1YsU0FBUyxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztPQUN6QyxFQUFFLGVBQWUsVUFBVSxNQUFNLENBQUMsQ0FBQztNQUNwQyxNQUFNLHdCQUF3QixVQUFVLENBQUMsOEJBQThCLENBQUMsQ0FBQztNQUN6RSxNQUFNLGNBQWMsTUFBTSxDQUFDLFFBQVEsT0FBTyxDQUFDO1FBQ3pDLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRTtRQUNwQyxHQUFHLElBQUk7UUFDUCxLQUFLO1VBQ0gsS0FBSyxRQUFRO1VBQ2IsU0FBUztZQUNQLE1BQU07WUFDTixDQUFDLEdBQUcsTUFBTSxFQUFFLFFBQVEsQ0FBQztXQUN0QixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFHLE1BQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1VBQ3pELFlBQVksRUFBRSxHQUFHLGlCQUFpQixFQUFFO1NBQ3JDO1FBQ0QsWUFBWSx1QkFBdUIsQ0FBQztVQUNsQyxpQkFBaUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLEVBQUUsQ0FBQztVQUMxQyxpQkFBaUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLEVBQUUsQ0FBQztVQUMxQyxRQUFRLEtBQUssQ0FBQyxRQUFRLENBQUM7U0FDeEIsQ0FBQztRQUNGLFlBQVksSUFBSTtRQUNoQixhQUFhLElBQUk7UUFDakIsUUFBUSxxQ0FBcUM7VUFDM0MsSUFBSSxJQUFJLFdBQVcsRUFBRTtZQUNuQixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztXQUM3QjtTQUNGO1FBQ0Qsb0JBQW9CLFFBQVEsQ0FBQztVQUMzQixHQUFHLElBQUksbUJBQW1CO1VBQzFCLGdCQUFnQixPQUFPLENBQUMsTUFBTSxJQUFJLFNBQVMsSUFBSSxlQUFlLFVBQVUsV0FBVyxFQUFFLENBQUM7VUFDdEYsZUFBZSxFQUFFO1VBQ2pCLFdBQVcsT0FBTyxDQUFDLEVBQUUsQ0FBQztVQUN0QixTQUFTLE9BQU8sQ0FBQyxFQUFFLENBQUM7VUFDcEIsTUFBTSxDQUFDLGlCQUFpQixFQUFFO1lBQ3hCLGlCQUFpQixDQUFDLElBQUksRUFBRSxhQUFhLENBQUM7WUFDdEMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQztXQUN2QyxDQUFDO1VBQ0YsTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUMsYUFBYSxDQUFDLGVBQWUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3JGLE1BQU0sQ0FBQyxnQ0FBZ0MsRUFBRTtZQUN2QyxLQUFLLENBQUMsY0FBYyxFQUFFLGNBQWM7Y0FDbEMsaUJBQWlCLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlO2dCQUNsRSxTQUFTLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsZUFBZSxVQUFVLFVBQVUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7ZUFDMUYsQ0FBQyxDQUFDO2FBQ0osQ0FBQztZQUNGLEtBQUssQ0FBQyxjQUFjLEVBQUUsY0FBYztjQUNsQyxpQkFBaUIsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWU7Z0JBQ2xFLFNBQVMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLDZCQUE2QixDQUFDLEVBQUUsTUFBTSxLQUFLLEVBQUUsZUFBZSxVQUFVLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztlQUM3RyxDQUFDLENBQUM7YUFDSixDQUFDO1dBQ0gsQ0FBQztTQUNILENBQUM7UUFDRixZQUFZLFNBQVMsQ0FBQyx1QkFBdUIsRUFBRTtVQUM3QyxXQUFXO1lBQ1QsVUFBVTtZQUNWLHNCQUFzQjtZQUN0QixrQkFBa0I7WUFDbEIsd0JBQXdCO1dBQ3pCO1VBQ0QsQ0FBQyxhQUFhLEVBQUUsR0FBRztZQUNqQix1QkFBdUI7WUFDdkIsaUJBQWlCO1lBQ2pCLHFCQUFxQjtXQUN0QjtTQUNGLENBQUM7UUFDRixtQkFBbUIsUUFBUSxDQUFDO1VBQzFCLE1BQU0sT0FBTyxDQUFDO1lBQ1osTUFBTSxTQUFTO1lBQ2YsUUFBUSxtQkFBbUI7WUFDM0IsU0FBUyxtQkFBbUI7V0FDN0IsQ0FBQztVQUNGLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRTtZQUNoQyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsNkJBQTZCO2NBQ3RELG9CQUFvQixDQUFDLG1CQUFtQixDQUFDLENBQUM7Y0FDMUMsRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUNYLENBQUM7WUFDRixLQUFLLENBQUMsZ0NBQWdDLEVBQUUscUJBQXFCO2NBQzNELHdCQUF3QixDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztjQUMxQyxFQUFFLEtBQUssRUFBRSxDQUFDO2FBQ1gsQ0FBQztXQUNILENBQUM7U0FDSCxDQUFDO1FBQ0YsVUFBVSxlQUFlLFFBQVE7UUFDakMsYUFBYSxDQUFDLEdBQUcsTUFBTSxFQUFFLFFBQVEsQ0FBQztRQUNsQyxPQUFPO1VBQ0wsTUFBTTtZQUNKLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLFFBQVEsRUFBRSxJQUFJLFFBQVEsQ0FBQztZQUMxQyxXQUFXLElBQUksV0FBVztZQUMxQixpQkFBaUIscUJBQXFCO1lBQ3RDLGdCQUFnQiwyREFBMkQ7Y0FDekUsWUFBWSxlQUFlLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFlBQVk7Z0JBQzlELHFCQUFxQixDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLENBQUMsQ0FBQztlQUMvRCxDQUFDLENBQUM7YUFDSjtZQUNELG1CQUFtQix1QkFBdUI7V0FDM0M7U0FDRjtRQUNELG9CQUFvQixNQUFNO1VBQ3hCLE9BQU87WUFDTCxtQkFBbUIsd0JBQXdCO2NBQ3pDLFFBQVEsRUFBRSxDQUFDLE9BQU8sRUFBRSxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUM7YUFDckM7V0FDRixDQUFDO1NBQ0g7UUFDRCxPQUFPLFFBQVEsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO09BQ2xELENBQUMsQ0FBQyxDQUFDO01BQ0osT0FBTyxXQUFXLE9BQU8sRUFBRSxDQUFDO0tBQzdCLENBQUM7O0lBRUYsTUFBTSxzQkFBc0IsUUFBUSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsTUFBTSxnQkFBZ0IsUUFBUSxJQUFJLEtBQUssS0FBSyxXQUFXLENBQUM7SUFDeEQsTUFBTSxzQkFBc0IsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDbkUsTUFBTSxjQUFjLEVBQUUsTUFBTSxXQUFXLEVBQUUsQ0FBQztJQUMxQyxNQUFNLG1CQUFtQixzQkFBc0I7TUFDN0MsTUFBTSxZQUFZLEtBQUssQ0FBQyxLQUFLLEVBQUUsZUFBZTtRQUM1QyxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFO1VBQzdCLElBQUksSUFBSSxLQUFLLEVBQUUsRUFBRTtZQUNmLE9BQU8sR0FBRyxDQUFDO1dBQ1osTUFBTSxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUU7WUFDdkIsT0FBTyxHQUFHLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztXQUNoRyxNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLFlBQVksRUFBRSxDQUFDLEVBQUU7WUFDL0MsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ3BELE1BQU07WUFDTCxPQUFPLEdBQUcsQ0FBQztXQUNaO1NBQ0YsTUFBTTtVQUNMLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQzNCO09BQ0YsRUFBRSxFQUFFLENBQUMsQ0FBQztNQUNQLElBQUksU0FBUyxPQUFPLEdBQUcsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxTQUFTLENBQUMsU0FBUyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUMxRSxTQUFTLElBQUksRUFBRSxDQUFDO09BQ2pCO01BQ0QsT0FBTyxTQUFTLENBQUM7S0FDbEIsQ0FBQztJQUNGLE1BQU0sdUJBQXVCLHFCQUFxQjtNQUNoRCxNQUFNLGVBQWUsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO01BQzVDLE1BQU0sT0FBTyxNQUFNLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQzdDLE1BQU0sV0FBVyxTQUFTLENBQUMsSUFBSSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksTUFBTSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQztNQUNyRSxNQUFNLGdCQUFnQixTQUFTLENBQUMsSUFBSSxXQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksTUFBTSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQztNQUMvRSxPQUFPO1FBQ0wsSUFBSTtRQUNKLE9BQU8sUUFBUTtRQUNmLFlBQVksYUFBYTtPQUMxQixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sMEJBQTBCLFFBQVE7TUFDdEMsTUFBTSxZQUFZLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7TUFDM0YsT0FBTyxTQUFTLENBQUMsRUFBRSxPQUFPLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzlDLENBQUM7SUFDRixNQUFNLFNBQVMsc0JBQXNCO01BQ25DLE1BQU0sWUFBWSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQzFGLE9BQU8sS0FBSyxDQUFDLFNBQVMsRUFBRSxlQUFlO1FBQ3JDLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUU7VUFDN0IsTUFBTSxnQkFBZ0IsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDcEQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztVQUMvRCxPQUFPO1lBQ0wsT0FBTyxTQUFTLENBQUMsR0FBRyxNQUFNLEVBQUUsT0FBTyxNQUFNLENBQUM7WUFDMUMsT0FBTztjQUNMLE9BQU8sS0FBSztjQUNaLEdBQUcsR0FBRyxNQUFNO2FBQ2I7WUFDRCxZQUFZLFNBQVMsQ0FBQyxHQUFHLFdBQVcsRUFBRSxPQUFPLFdBQVcsQ0FBQztXQUMxRCxDQUFDO1NBQ0gsTUFBTTtVQUNMLE9BQU87WUFDTCxHQUFHLEdBQUc7WUFDTixPQUFPO2NBQ0wsSUFBSTtjQUNKLEdBQUcsR0FBRyxNQUFNO2FBQ2I7V0FDRixDQUFDO1NBQ0g7T0FDRixFQUFFO1FBQ0QsT0FBTyxFQUFFO1FBQ1QsWUFBWSxFQUFFO1FBQ2QsT0FBTyxFQUFFO09BQ1YsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLHdCQUF3QixZQUFZO01BQ3hDLE9BQU8sUUFBUSxPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQUUsWUFBWSxXQUFXLEVBQUUsQ0FBQyxFQUFFLG1CQUFtQjtRQUNsRixZQUFZLG1CQUFtQjtRQUMvQixhQUFhLGNBQWMsWUFBWTtPQUN4QyxDQUFDLENBQUMsQ0FBQztLQUNMLENBQUM7SUFDRixNQUFNLDBCQUEwQixZQUFZO01BQzFDLE9BQU8sUUFBUSxPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQUUsWUFBWSxXQUFXLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ2hILENBQUM7SUFDRixNQUFNLFFBQVEsOENBQThDO01BQzFELE1BQU0sVUFBVSxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7TUFDM0MsTUFBTSxPQUFPLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxPQUFPLFVBQVUsVUFBVSxFQUFFLENBQUMsQ0FBQztNQUNuRSxJQUFJLElBQUksTUFBTSxPQUFPLEtBQUssQ0FBQyxFQUFFO1FBQzNCLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN4QjtNQUNELE1BQU0scUJBQXFCLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQzNELE1BQU0sV0FBVyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxRQUFRLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLENBQUM7TUFDaEksTUFBTSxvQkFBb0IsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDNUQsTUFBTSxXQUFXLEtBQUssQ0FBQyxJQUFJLE1BQU0sRUFBRSx5QkFBeUIsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7TUFDdkosTUFBTSxRQUFRLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO01BQzdELE9BQU8sUUFBUSxLQUFLLENBQUMsVUFBVSxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUM7S0FDOUUsQ0FBQzs7SUFFRixNQUFNLG1CQUFtQixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2RCxNQUFNLGdCQUFnQixZQUFZLENBQUM7SUFDbkMsTUFBTSxhQUFhLDhDQUE4QyxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVE7TUFDcEYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzNCLE9BQU87VUFDTCxNQUFNLGdCQUFnQjtVQUN0QixNQUFNLElBQUksS0FBSztVQUNmLGlCQUFpQixNQUFNLFVBQVUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLElBQUksTUFBTSxFQUFFLGFBQWEsQ0FBQztTQUNqRixDQUFDO09BQ0gsTUFBTTtRQUNMLE9BQU87VUFDTCxNQUFNLGdCQUFnQjtVQUN0QixNQUFNLElBQUksS0FBSztVQUNmLE9BQU8sSUFBSSxNQUFNO1VBQ2pCLFFBQVEsSUFBSSxNQUFNLEtBQUssYUFBYTtVQUNwQyxVQUFVLE1BQU07WUFDZCxZQUFZLFNBQVMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQztZQUNoRCxRQUFRLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDbEQsUUFBUSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7V0FDOUI7U0FDRixDQUFDO09BQ0g7S0FDRixDQUFDLENBQUM7SUFDSCxNQUFNLGtCQUFrQixrQkFBa0IsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRO01BQy9ELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMzQixPQUFPLGVBQWUsQ0FBQyxJQUFJLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztPQUMzQyxNQUFNO1FBQ0wsT0FBTyxNQUFNLENBQUMsSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQzNDO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxnQkFBZ0Isa0NBQWtDO01BQ3RELE1BQU0scUJBQXFCLFNBQVMsT0FBTyxVQUFVLENBQUM7TUFDdEQsTUFBTSxjQUFjLFdBQVcsS0FBSyxDQUFDLFNBQVMsZUFBZSxDQUFDLElBQUksTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO01BQzNJLE1BQU0sU0FBUyxJQUFJLE1BQU0sSUFBSSxDQUFDLFNBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7TUFDakYsTUFBTSxTQUFTLFNBQVMsTUFBTSxNQUFNLENBQUM7UUFDbkMsS0FBSyxFQUFFO1FBQ1AsU0FBUztVQUNQLFFBQVEsY0FBYyxvQkFBb0IsQ0FBQztZQUN6QyxLQUFLLFVBQVUsSUFBSTtZQUNuQixNQUFNLFdBQVcsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7WUFDeEMsTUFBTSxRQUFRLEtBQUssRUFBRTtZQUNyQixTQUFTLElBQUksTUFBTTtZQUNuQixNQUFNLFFBQVEsS0FBSyxFQUFFO1lBQ3JCLE9BQU8sb0JBQW9CO2NBQ3pCLE1BQU0sUUFBUSxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksS0FBSyxFQUFFLElBQUksTUFBTSxFQUFFLFlBQVksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Y0FDbkYsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsY0FBYyxpQkFBaUIsRUFBRSxTQUFTLEVBQUU7Z0JBQ2hFLGtCQUFrQixLQUFLO2dCQUN2QixRQUFRLFFBQVEsS0FBSyxFQUFFO2VBQ3hCLENBQUMsQ0FBQyxDQUFDO2FBQ0w7WUFDRCxTQUFTLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDekIsUUFBUSxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3RCLFNBQVMsQ0FBQztZQUNWLFNBQVMsUUFBUTtZQUNqQixTQUFTLEVBQUU7WUFDWCxvQkFBb0I7Y0FDbEIsV0FBVyxPQUFPLENBQUMsRUFBRSxDQUFDO2NBQ3RCLFFBQVEsQ0FBQyxXQUFXLElBQUksQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLEVBQUUsUUFBUSxLQUFLLENBQUMsSUFBSSxRQUFRLEVBQUUsYUFBYSxDQUFDLEVBQUUsZ0JBQWdCO2dCQUN4RyxlQUFlLENBQUMsSUFBSSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO2tCQUM3QyxLQUFLLENBQUMsSUFBSSxRQUFRLEVBQUUsYUFBYSxFQUFFLElBQUksTUFBTSxDQUFDLENBQUM7a0JBQy9DLFFBQVEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLEVBQUUsTUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7aUJBQ3JELENBQUMsQ0FBQztlQUNKLENBQUM7YUFDSDtXQUNGLEVBQUUsYUFBYSxFQUFFLFNBQVMsT0FBTyxDQUFDO1NBQ3BDO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxjQUFjO1FBQ2xCLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMsa0JBQWtCLENBQUM7U0FDOUI7UUFDRCxZQUFZLENBQUMsTUFBTSxDQUFDO09BQ3JCLENBQUM7TUFDRixPQUFPLFNBQVMsT0FBTyxDQUFDO1FBQ3RCLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMsaUJBQWlCLENBQUM7U0FDN0I7UUFDRCxZQUFZLE9BQU8sQ0FBQztVQUNsQixNQUFNLFFBQVEsRUFBRTtVQUNoQixDQUFDLFdBQVcsQ0FBQztTQUNkLENBQUM7UUFDRixpQkFBaUIsUUFBUSxDQUFDLENBQUMsU0FBUyxPQUFPLENBQUM7WUFDeEMsVUFBVSxVQUFVLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQztZQUNuQyxZQUFZLFFBQVE7Y0FDbEIsU0FBUyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLFFBQVEsQ0FBQyxDQUFDO2FBQ2xEO1lBQ0QsV0FBVyxRQUFRO2NBQ2pCLFNBQVMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxPQUFPLENBQUMsQ0FBQzthQUNqRDtXQUNGLENBQUMsQ0FBQyxDQUFDO09BQ1AsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLGNBQWMsc0JBQXNCO01BQ3hDLEtBQUs7UUFDSCxLQUFLLEtBQUs7UUFDVixTQUFTLElBQUksUUFBUTtPQUN0QjtNQUNELFlBQVksS0FBSyxDQUFDLElBQUksTUFBTSxFQUFFLFNBQVMsT0FBTyxZQUFZLENBQUM7S0FDNUQsQ0FBQyxDQUFDOztJQUVILE1BQU0sWUFBWSxtQkFBbUI7TUFDbkMsTUFBTSxVQUFVLEtBQUssQ0FBQyxNQUFNLFFBQVEsRUFBRSxXQUFXO1FBQy9DLEtBQUs7VUFDSCxLQUFLLFFBQVE7VUFDYixPQUFPLE1BQU0sTUFBTTtVQUNuQixXQUFXLE1BQU0sS0FBSztTQUN2QjtPQUNGLENBQUMsQ0FBQyxDQUFDO01BQ0osTUFBTSxnQkFBZ0IsTUFBTSxLQUFLLElBQUksQ0FBQyxLQUFLLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQ2hGLE9BQU87UUFDTCxLQUFLLE1BQU0sSUFBSTtRQUNmLEtBQUs7VUFDSCxLQUFLLFFBQVE7VUFDYixTQUFTLE1BQU0sY0FBYztVQUM3QixZQUFZLE1BQU0saUJBQWlCO1NBQ3BDO1FBQ0QsWUFBWSxPQUFPO1FBQ25CLFlBQVksT0FBTyxDQUFDLE1BQU0saUJBQWlCLEVBQUU7VUFDM0MsUUFBUSxPQUFPLENBQUMsRUFBRSxDQUFDO1VBQ25CLFlBQVksT0FBTyxDQUFDO1lBQ2xCLE9BQU87Y0FDTCxNQUFNLFFBQVE7Y0FDZCxVQUFVLFVBQVU7Z0JBQ2xCLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDLENBQUM7ZUFDOUI7Y0FDRCxVQUFVLHNCQUFzQjtnQkFDOUIsTUFBTSxjQUFjLElBQUksQ0FBQyxNQUFNLFFBQVEsQ0FBQyxDQUFDO2dCQUN6QyxNQUFNLFFBQVEsTUFBTSxDQUFDLE1BQU0sUUFBUSxFQUFFLE9BQU8sR0FBRyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUM7Z0JBQ3BFLElBQUksS0FBSyxPQUFPLEVBQUUsRUFBRTtrQkFDbEIsS0FBSyxDQUFDLE1BQU0sUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2lCQUNqQyxNQUFNLElBQUksTUFBTSxRQUFRLElBQUksY0FBYyxLQUFLLENBQUMsQ0FBQyxJQUFJLFFBQVEsS0FBSyxFQUFFLEVBQUU7a0JBQ3JFLFdBQVcsS0FBSyxDQUFDLFNBQVMsS0FBSyxDQUFDLE1BQU0sUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztpQkFDL0Q7ZUFDRjtjQUNELEdBQUcsYUFBYTthQUNqQjtXQUNGLENBQUM7U0FDSCxDQUFDO09BQ0gsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLGFBQWEsTUFBTSxDQUFDO01BQ3hCLE1BQU0sWUFBWTtNQUNsQixjQUFjO1FBQ1osVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUNyQixLQUFLLENBQUMsa0JBQWtCLEVBQUU7VUFDeEIsUUFBUTtVQUNSLFlBQVk7U0FDYixDQUFDO1FBQ0YsU0FBUyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7UUFDOUIsU0FBUyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQztRQUNqQyxRQUFRLENBQUMsTUFBTSxDQUFDO09BQ2pCO01BQ0QsU0FBUyxTQUFTO0tBQ25CLENBQUMsQ0FBQzs7SUFFSCxNQUFNLGtCQUFrQiwyQ0FBMkM7TUFDakUsTUFBTSxvQkFBb0IsS0FBSyxDQUFDLElBQUksTUFBTSxFQUFFLFNBQVM7UUFDbkQsTUFBTSxrQkFBa0IsVUFBVSxDQUFDLElBQUksS0FBSyxDQUFDO1FBQzdDLE9BQU8sSUFBSSxNQUFNO09BQ2xCLENBQUMsQ0FBQyxDQUFDO01BQ0osTUFBTSxTQUFTLElBQUksTUFBTSxJQUFJLENBQUMsU0FBUyxhQUFhLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztNQUNqRixNQUFNLFNBQVMsU0FBUyxNQUFNLE1BQU0sQ0FBQztRQUNuQyxLQUFLLEVBQUU7UUFDUCxHQUFHLFdBQVcsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDaEQsa0JBQWtCLEVBQUUsTUFBTSxJQUFJLEtBQUssRUFBRTtRQUNyQyxTQUFTLGlCQUFpQjtRQUMxQixTQUFTLFVBQVU7UUFDbkIsa0JBQWtCLFFBQVEsQ0FBQztVQUN6QixTQUFTLE9BQU8sQ0FBQyxFQUFFLFVBQVUsTUFBTSxDQUFDLElBQUksUUFBUSxJQUFJLGtCQUFrQixXQUFXLEVBQUUsRUFBRSxDQUFDO1VBQ3RGLFdBQVcsT0FBTyxDQUFDLEVBQUUsQ0FBQztVQUN0QixNQUFNLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsa0JBQWtCO2NBQzFELFFBQVEsQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLEVBQUUsTUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7YUFDM0QsQ0FBQyxDQUFDLENBQUM7U0FDUCxDQUFDO09BQ0gsQ0FBQyxDQUFDO01BQ0gsTUFBTSxVQUFVLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxHQUFHLFFBQVEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUU7UUFDdkYsS0FBSyxLQUFLO1FBQ1YsU0FBUyxDQUFDLDBCQUEwQixDQUFDO09BQ3RDLEVBQUUsa0JBQWtCLE1BQU0sQ0FBQyxDQUFDLENBQUM7TUFDOUIsTUFBTSxhQUFhO1FBQ2pCLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMsaUJBQWlCLENBQUM7U0FDN0I7UUFDRCxZQUFZLE9BQU8sQ0FBQztVQUNsQixDQUFDLE1BQU0sQ0FBQztVQUNSLE9BQU8sUUFBUSxFQUFFO1NBQ2xCLENBQUM7T0FDSCxDQUFDO01BQ0YsT0FBTyxTQUFTLE9BQU8sQ0FBQztRQUN0QixLQUFLO1VBQ0gsS0FBSyxLQUFLO1VBQ1YsU0FBUyxDQUFDLGlCQUFpQixDQUFDO1NBQzdCO1FBQ0QsWUFBWSxPQUFPLENBQUM7VUFDbEIsTUFBTSxRQUFRLEVBQUU7VUFDaEIsQ0FBQyxVQUFVLENBQUM7U0FDYixDQUFDO1FBQ0YsaUJBQWlCLFFBQVEsQ0FBQztVQUN4QixTQUFTLE9BQU8sQ0FBQztZQUNmLFVBQVUsTUFBTSxDQUFDLElBQUksUUFBUSxJQUFJLGtCQUFrQixXQUFXLEVBQUU7WUFDaEUsWUFBWSxRQUFRO2NBQ2xCLFNBQVMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxRQUFRLENBQUMsQ0FBQzthQUNsRDtZQUNELFdBQVcsUUFBUTtjQUNqQixTQUFTLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsT0FBTyxDQUFDLENBQUM7YUFDakQ7V0FDRixDQUFDO1VBQ0YsZUFBZSxFQUFFO1NBQ2xCLENBQUM7T0FDSCxDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sV0FBVyxVQUFVLENBQUM7TUFDMUIsU0FBUyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUM7TUFDakMsU0FBUyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUM7TUFDakMsZUFBZSxDQUFDLGdCQUFnQixDQUFDO01BQ2pDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO01BQ3hCLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO01BQzFCLGdCQUFnQixNQUFNLENBQUMsd0JBQXdCLEVBQUU7UUFDL0MsU0FBUztRQUNULFlBQVk7T0FDYixDQUFDO0tBQ0gsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxXQUFXLDRCQUE0QixPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsV0FBVyxDQUFDLENBQUM7SUFDeEcsTUFBTSxjQUFjLHlCQUF5QixRQUFRLENBQUM7TUFDcEQsU0FBUyxTQUFTO01BQ2xCLE1BQU0sUUFBUTtNQUNkLFdBQVcsVUFBVTtRQUNuQixPQUFPO1VBQ0wsaUJBQWlCLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNO2dCQUM3RSxRQUFRLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVM7a0JBQzVDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUTtvQkFDdkMsSUFBSSxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtzQkFDdkIsTUFBTSxlQUFlLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztxQkFDeEM7bUJBQ0YsQ0FBQyxDQUFDO2lCQUNKLENBQUMsQ0FBQztlQUNKLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNYLENBQUM7T0FDSDtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sVUFBVSxVQUFVLENBQUM7TUFDekIsV0FBVyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUM7TUFDL0IsV0FBVyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUM7TUFDL0IsUUFBUSxDQUFDO1FBQ1AsU0FBUyxNQUFNO1FBQ2YsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixNQUFNLE1BQU07UUFDWixXQUFXLFVBQVU7VUFDbkIsT0FBTztZQUNMLGtCQUFrQixRQUFRLENBQUMsQ0FBQyxRQUFRLE9BQU8sQ0FBQztnQkFDeEMsVUFBVSxNQUFNLE9BQU87Z0JBQ3ZCLGFBQWEsTUFBTSxRQUFRLFVBQVU7Z0JBQ3JDLE1BQU0sRUFBRSxNQUFNLFNBQVMsRUFBRTtlQUMxQixDQUFDLENBQUMsQ0FBQztXQUNQLENBQUM7U0FDSDtPQUNGLENBQUM7S0FDSCxDQUFDLENBQUM7O0lBRUgsTUFBTSxZQUFZLDRDQUE0QztNQUM1RCxLQUFLLE1BQU0sSUFBSTtNQUNmLEtBQUssTUFBTSxJQUFJO01BQ2YsVUFBVTtNQUNWLFlBQVksZ0JBQWdCLFFBQVEsQ0FBQyxNQUFNLHVCQUF1QixFQUFFO1FBQ2xFLFNBQVMsT0FBTyxDQUFDLEVBQUUsTUFBTSxRQUFRLEtBQUssRUFBRSxDQUFDO1FBQ3pDLFlBQVksT0FBTyxDQUFDO1VBQ2xCLE9BQU87WUFDTCxNQUFNLFFBQVE7WUFDZCxVQUFVLFFBQVE7Y0FDaEIsTUFBTSxRQUFRLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO2dCQUN4QyxRQUFRO2dCQUNSLFFBQVE7ZUFDVCxDQUFDLENBQUM7Y0FDSCxPQUFPO2dCQUNMLENBQUMsTUFBTSxXQUFXLEdBQUcsWUFBWSxTQUFTLENBQUMsS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDMUQsQ0FBQyxNQUFNLFdBQVcsR0FBRyxZQUFZLFNBQVMsQ0FBQyxLQUFLLE9BQU8sRUFBRSxDQUFDO2VBQzNELENBQUM7YUFDSDtZQUNELFVBQVUsaUJBQWlCO2NBQ3pCLE1BQU0sUUFBUSxhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtnQkFDeEMsUUFBUTtnQkFDUixRQUFRO2VBQ1QsQ0FBQyxDQUFDO2NBQ0gsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUMsRUFBRTtnQkFDL0MsWUFBWSxTQUFTLENBQUMsS0FBSyxPQUFPLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxXQUFXLENBQUMsQ0FBQyxDQUFDO2VBQ2pFO2NBQ0QsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUMsRUFBRTtnQkFDL0MsWUFBWSxTQUFTLENBQUMsS0FBSyxPQUFPLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxXQUFXLENBQUMsQ0FBQyxDQUFDO2VBQ2pFO2FBQ0Y7V0FDRjtTQUNGLENBQUM7T0FDSCxDQUFDO01BQ0YsTUFBTTtRQUNKLFdBQVcsYUFBYSxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUM7UUFDNUQsV0FBVyxhQUFhLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQztRQUM1RCxTQUFTLGFBQWEsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO09BQ3pEO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxvQkFBb0IsU0FBUyxDQUFDO01BQ2xDLE1BQU0sbUJBQW1CO01BQ3pCLGNBQWMsUUFBUSxFQUFFO01BQ3hCLFlBQVksT0FBTyxFQUFFO01BQ3JCLFNBQVMsU0FBUztNQUNsQixNQUFNO1FBQ0osV0FBVyxxQkFBcUIsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDO1FBQ3pELFdBQVcscUJBQXFCLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUN6RCxTQUFTLHFCQUFxQixJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUM7T0FDdEQ7S0FDRixDQUFDLENBQUM7O0lBRUgsTUFBTSxhQUFhLFFBQVE7TUFDekIsTUFBTSxVQUFVO1FBQ2QsSUFBSSxDQUFDO1FBQ0wsTUFBTSxDQUFDO1FBQ1AsTUFBTSxDQUFDO1FBQ1AsTUFBTSxDQUFDO1FBQ1AsTUFBTSxDQUFDO1FBQ1AsTUFBTSxDQUFDO1FBQ1AsTUFBTSxDQUFDO1FBQ1AsTUFBTSxDQUFDO1FBQ1AsT0FBTyxDQUFDO1FBQ1IsTUFBTSxDQUFDO1FBQ1AsTUFBTSxDQUFDO1FBQ1AsS0FBSyxDQUFDO09BQ1AsQ0FBQztNQUNGLE1BQU0sYUFBYSxRQUFRLElBQUksSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUMvRCxJQUFJLFVBQVUsSUFBSSxNQUFNLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO01BQ3hELElBQUksT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDL0IsVUFBVSxPQUFPLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7T0FDekM7TUFDRCxPQUFPLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBQztLQUM1QixDQUFDO0lBQ0YsTUFBTSxZQUFZLFlBQVk7TUFDNUIsTUFBTSxhQUFhLCtFQUErRSxDQUFDO01BQ25HLE1BQU0sUUFBUSxVQUFVLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUN4QyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7UUFDbEIsTUFBTSxRQUFRLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE9BQU8sTUFBTSxNQUFNLENBQUM7VUFDbEIsS0FBSztVQUNMLElBQUk7U0FDTCxDQUFDLENBQUM7T0FDSixNQUFNO1FBQ0wsT0FBTyxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztPQUMvQjtLQUNGLENBQUM7SUFDRixNQUFNLGNBQWMsZ0JBQWdCO01BQ2xDLE1BQU0sU0FBUztRQUNiLElBQUksRUFBRTtRQUNOLE1BQU0sRUFBRTtRQUNSLE1BQU0sRUFBRTtRQUNSLE1BQU0sSUFBSTtRQUNWLE1BQU0sRUFBRTtRQUNSLE1BQU0sSUFBSTtRQUNWLE1BQU0sQ0FBQztPQUNSLENBQUM7TUFDRixNQUFNLFlBQVksS0FBSyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ3hDLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1FBQ3RCLE9BQU8sUUFBUSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQztPQUNsQyxNQUFNLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2xELElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ3RDLE9BQU8sUUFBUSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQztTQUNsQyxNQUFNO1VBQ0wsT0FBTyxRQUFRLEtBQUssQ0FBQyxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUNyRTtPQUNGLE1BQU07UUFDTCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEI7S0FDRixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsVUFBVSxRQUFRLEtBQUssRUFBRSxDQUFDO0lBQ25ELE1BQU0sc0JBQXNCLGlCQUFpQixRQUFRLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO01BQ3pGLE9BQU8sS0FBSyxHQUFHLEtBQUs7TUFDcEIsSUFBSTtLQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0osTUFBTSxxQkFBcUIsc0NBQXNDO01BQy9ELE1BQU0sU0FBUyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7TUFDeEQsTUFBTSxTQUFTLFNBQVMsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7TUFDdEQsT0FBTyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssbUJBQW1CLENBQUMsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FDM00sQ0FBQzs7SUFFRixNQUFNLGtCQUFrQiw4QkFBOEI7TUFDcEQsSUFBSSxZQUFZLGdCQUFnQixDQUFDO01BQ2pDLE1BQU0sYUFBYSxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7TUFDN0MsTUFBTSxXQUFXLFlBQVksUUFBUSxDQUFDLFFBQVEsRUFBRTtRQUM5QyxLQUFLLE1BQU07UUFDWCxTQUFTO1VBQ1AsVUFBVTtVQUNWLGlCQUFpQixHQUFHLFFBQVE7U0FDN0I7T0FDRixFQUFFLGtCQUFrQixNQUFNLENBQUMsQ0FBQztNQUM3QixNQUFNLFFBQVEsaUJBQWlCLE1BQU0sS0FBSyxDQUFDO1FBQ3pDLEtBQUs7VUFDSCxLQUFLLFFBQVE7VUFDYixTQUFTO1lBQ1AsVUFBVTtZQUNWLFlBQVk7WUFDWixtQkFBbUI7WUFDbkIsa0JBQWtCO1dBQ25CO1VBQ0QsWUFBWSxFQUFFLE9BQU8sa0JBQWtCLFVBQVUsQ0FBQyxJQUFJLE1BQU0sTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUMsRUFBRTtTQUMvRjtRQUNELFlBQVk7VUFDVixRQUFRLENBQUMsTUFBTSxDQUFDO1VBQ2hCLFFBQVEsQ0FBQyxRQUFRLENBQUM7U0FDbkI7UUFDRCxrQkFBa0IsUUFBUSxDQUFDO1VBQ3pCLFNBQVMsT0FBTyxDQUFDLEVBQUUsVUFBVSxNQUFNLENBQUMsSUFBSSxRQUFRLElBQUksa0JBQWtCLFdBQVcsRUFBRSxFQUFFLENBQUM7VUFDdEYsZUFBZSxFQUFFO1VBQ2pCLFdBQVcsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUN2QixDQUFDO09BQ0gsQ0FBQyxDQUFDO01BQ0gsTUFBTSxZQUFZLGVBQWU7UUFDL0IsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQztTQUM3QjtRQUNELFVBQVU7T0FDWCxDQUFDLENBQUM7TUFDSCxNQUFNLGVBQWUsWUFBWSxTQUFTLE1BQU0sTUFBTSxDQUFDO1FBQ3JELFNBQVMsS0FBSztRQUNkLGNBQWMsQ0FBQyxlQUFlLENBQUM7UUFDL0IsaUJBQWlCLFFBQVEsQ0FBQztVQUN4QixTQUFTLE9BQU8sQ0FBQyxFQUFFLFVBQVUsTUFBTSxDQUFDLElBQUksUUFBUSxJQUFJLGtCQUFrQixXQUFXLEVBQUUsRUFBRSxDQUFDO1VBQ3RGLGVBQWUsRUFBRTtVQUNqQixXQUFXLE9BQU8sQ0FBQyxFQUFFLENBQUM7VUFDdEIsTUFBTSxDQUFDLG1CQUFtQixFQUFFO1lBQzFCLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxnQ0FBZ0M7Y0FDL0MsUUFBUSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2FBQy9DLENBQUM7WUFDRixLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsZ0NBQWdDO2NBQzlDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLEVBQUUsTUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7YUFDM0QsQ0FBQztXQUNILENBQUM7U0FDSCxDQUFDO1FBQ0YsZUFBZSxLQUFLO09BQ3JCLENBQUMsQ0FBQztNQUNILE1BQU0sV0FBVyxVQUFVO1FBQ3pCLEtBQUs7VUFDSCxLQUFLLE9BQU87VUFDWixTQUFTLENBQUMsV0FBVyxDQUFDO1NBQ3ZCO1FBQ0QsWUFBWSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7T0FDMUQsQ0FBQyxDQUFDO01BQ0gsTUFBTSxhQUFhLGlCQUFpQixNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDMUQsU0FBUyxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsWUFBWSxDQUFDLElBQUksQ0FBQztPQUNuQixDQUFDLENBQUMsQ0FBQztNQUNKLE1BQU0sY0FBYyxpQkFBaUIsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQzNELFNBQVMsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLFlBQVksQ0FBQyxLQUFLLENBQUM7T0FDcEIsQ0FBQyxDQUFDLENBQUM7TUFDSixPQUFPLGlCQUFpQixPQUFPLENBQUM7UUFDOUIsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQztTQUM3QjtRQUNELFlBQVksQ0FBQztZQUNULEtBQUs7Y0FDSCxLQUFLLEtBQUs7Y0FDVixTQUFTLENBQUMsNEJBQTRCLENBQUM7YUFDeEM7WUFDRCxZQUFZO2NBQ1YsVUFBVTtjQUNWLFdBQVc7Y0FDWCxTQUFTLENBQUM7Z0JBQ1IsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDZCxLQUFLO2VBQ04sQ0FBQzthQUNIO1dBQ0YsQ0FBQztRQUNKLFlBQVksT0FBTztRQUNuQixZQUFZLFFBQVE7UUFDcEIsUUFBUSxJQUFJO1FBQ1osU0FBUyxFQUFFLFdBQVcsWUFBWSxFQUFFO1FBQ3BDLGdCQUFnQiwyQkFBMkI7VUFDekMsU0FBUyxDQUFDLFlBQVksU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQ3JELFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVc7Y0FDOUIsWUFBWSxTQUFTLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQ25ELENBQUMsQ0FBQztXQUNKLENBQUMsQ0FBQztTQUNKO1FBQ0Qsd0JBQXdCLFFBQVEsQ0FBQztVQUMvQixTQUFTLE9BQU8sQ0FBQztZQUNmLFVBQVUsTUFBTSxDQUFDLElBQUksUUFBUSxJQUFJLGtCQUFrQixXQUFXLEVBQUU7WUFDaEUsWUFBWSxRQUFRO2NBQ2xCLGlCQUFpQixVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLFNBQVMsQ0FBQyxLQUFLLENBQUMsU0FBUyxRQUFRLENBQUMsQ0FBQztjQUNuRixpQkFBaUIsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsUUFBUSxDQUFDLENBQUM7Y0FDbkYsaUJBQWlCLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsUUFBUSxDQUFDLENBQUM7YUFDekQ7WUFDRCxXQUFXLFFBQVE7Y0FDakIsaUJBQWlCLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLE9BQU8sQ0FBQyxDQUFDO2NBQ2xGLGlCQUFpQixVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLFNBQVMsQ0FBQyxLQUFLLENBQUMsU0FBUyxPQUFPLENBQUMsQ0FBQztjQUNsRixpQkFBaUIsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxPQUFPLENBQUMsQ0FBQzthQUN4RDtXQUNGLENBQUM7VUFDRixlQUFlLEVBQUU7VUFDakIsTUFBTSxDQUFDLG9CQUFvQixFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSwrQkFBK0I7Y0FDM0UsTUFBTSxXQUFXLGNBQWMsTUFBTSxTQUFTLENBQUM7Y0FDL0MsTUFBTSxhQUFhLFFBQVEsR0FBRyxpQkFBaUIsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLGlCQUFpQixVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7Y0FDOUcsTUFBTSxXQUFXLFFBQVEsR0FBRyxpQkFBaUIsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLGlCQUFpQixVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7Y0FDNUcsTUFBTSxTQUFTLFVBQVUsSUFBSSxDQUFDLFlBQVksU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztjQUMvRCxNQUFNLFNBQVMsUUFBUSxJQUFJLENBQUMsWUFBWSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2NBQzdELFlBQVksa0JBQWtCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQ2hELENBQUMsQ0FBQyxDQUFDO1NBQ1AsQ0FBQztPQUNILENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxlQUFlLDBDQUEwQztNQUM3RCxNQUFNLFlBQVksTUFBTSxNQUFNLE1BQU0sQ0FBQztRQUNuQyxLQUFLO1VBQ0gsS0FBSyxPQUFPO1VBQ1osU0FBUyxDQUFDLFdBQVcsQ0FBQztTQUN2QjtRQUNELFlBQVksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLFVBQVUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUM7T0FDOUQsQ0FBQyxDQUFDO01BQ0gsTUFBTSxXQUFXLE1BQU0sTUFBTSxTQUFTLENBQUM7UUFDckMsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQztVQUM3QixZQUFZLEVBQUUsTUFBTSxjQUFjLEVBQUU7U0FDckM7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLFFBQVEsTUFBTSxNQUFNLE1BQU0sQ0FBQztRQUMvQixLQUFLO1VBQ0gsS0FBSyxLQUFLO1VBQ1YsU0FBUyxDQUFDLG9CQUFvQixDQUFDO1VBQy9CLFlBQVksRUFBRSxNQUFNLGNBQWMsRUFBRTtTQUNyQztPQUNGLENBQUMsQ0FBQztNQUNILE9BQU8sTUFBTSxPQUFPLENBQUM7UUFDbkIsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxZQUFZLENBQUM7VUFDdkIsWUFBWSxFQUFFLE1BQU0sY0FBYyxFQUFFO1NBQ3JDO1FBQ0QsT0FBTztVQUNMLE1BQU0sR0FBRztVQUNULE1BQU0sSUFBSSxJQUFJO1VBQ2QsTUFBTSxJQUFJLElBQUk7VUFDZCxpQkFBaUIsVUFBVSxDQUFDLFdBQVcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDekc7UUFDRCxZQUFZO1VBQ1YsU0FBUztVQUNULFFBQVE7VUFDUixLQUFLO1NBQ047UUFDRCxrQkFBa0IsUUFBUSxDQUFDO1VBQ3pCLGdCQUFnQixLQUFLLEVBQUU7VUFDdkIsUUFBUSxPQUFPLENBQUMsRUFBRSxDQUFDO1NBQ3BCLENBQUM7UUFDRixVQUFVLDZCQUE2QjtVQUNyQyxRQUFRLENBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRTtZQUNuQyxNQUFNLElBQUksS0FBSztZQUNmLEtBQUs7V0FDTixDQUFDLENBQUM7U0FDSjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxjQUFjLDhCQUE4QjtNQUNoRCxNQUFNLFdBQVcsU0FBUztRQUN4QixLQUFLO1VBQ0gsS0FBSyxJQUFJO1VBQ1QsV0FBVyxrQkFBa0IsVUFBVSxDQUFDLElBQUksQ0FBQztTQUM5QztPQUNGLENBQUMsQ0FBQztNQUNILE1BQU0sZUFBZSxXQUFXO1FBQzlCLEtBQUssRUFBRSxLQUFLLE9BQU8sRUFBRTtRQUNyQixZQUFZLENBQUM7WUFDVCxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDbEIsWUFBWSxLQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQztXQUNwQyxDQUFDO09BQ0wsQ0FBQyxDQUFDO01BQ0gsTUFBTSxXQUFXLFNBQVM7UUFDeEIsS0FBSztVQUNILEtBQUssSUFBSTtVQUNULFdBQVcsa0JBQWtCLFVBQVUsQ0FBQyxJQUFJLENBQUM7U0FDOUM7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLFdBQVcsUUFBUTtRQUN2QixLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDbEIsWUFBWSxLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQztPQUNqQyxDQUFDLENBQUM7TUFDSCxNQUFNLGFBQWEsU0FBUztRQUMxQixLQUFLLEVBQUUsS0FBSyxPQUFPLEVBQUU7UUFDckIsWUFBWSxLQUFLLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQztPQUNsQyxDQUFDLENBQUM7TUFDSCxPQUFPO1FBQ0wsS0FBSztVQUNILEtBQUssT0FBTztVQUNaLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQztTQUMvQjtRQUNELFlBQVk7VUFDVixZQUFZLENBQUMsSUFBSSxPQUFPLENBQUM7VUFDekIsVUFBVSxDQUFDLElBQUksTUFBTSxDQUFDO1NBQ3ZCO1FBQ0QsWUFBWSxRQUFRLENBQUM7VUFDbkIsV0FBVyxPQUFPLENBQUMsRUFBRSxDQUFDO1VBQ3RCLFFBQVEsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUNwQixDQUFDO09BQ0gsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxrQkFBa0IsOEJBQThCO01BQ3BELE1BQU0sU0FBUyxJQUFJLE1BQU0sSUFBSSxDQUFDLFNBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7TUFDakYsTUFBTSxzQkFBc0I7UUFDMUIsU0FBUyxPQUFPLENBQUMsRUFBRSxVQUFVLE1BQU0sSUFBSSxTQUFTLElBQUksa0JBQWtCLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFDdEYsZUFBZSxFQUFFO1FBQ2pCLE1BQU0sT0FBTyxDQUFDO1VBQ1osTUFBTSxXQUFXO1VBQ2pCLFVBQVUsSUFBSSxVQUFVLEtBQUssSUFBSTtVQUNqQyxpQkFBaUIsSUFBSSxVQUFVLEtBQUssSUFBSTtVQUN4QyxTQUFTLFFBQVE7WUFDZixJQUFJLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQzVCLE9BQU8sUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDNUI7U0FDRixDQUFDO1FBQ0YsTUFBTSxDQUFDLGtCQUFrQixFQUFFO1VBQ3pCLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxrQkFBa0I7WUFDL0IsUUFBUSxDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsRUFBRSxNQUFNLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQztXQUMzRCxDQUFDO1VBQ0YsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLGtCQUFrQjtZQUNuQyxRQUFRLENBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRSxFQUFFLE1BQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1dBQzNELENBQUM7U0FDSCxDQUFDO1FBQ0YsV0FBVyxPQUFPLENBQUMsRUFBRSxDQUFDO09BQ3ZCLENBQUM7TUFDRixNQUFNLHVCQUF1QixJQUFJLFdBQVcsSUFBSSxDQUFDLE1BQU0sWUFBWSxPQUFPLENBQUM7UUFDekUsU0FBUyxTQUFTO1VBQ2hCLE9BQU8sYUFBYSxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUM7U0FDckM7UUFDRCxjQUFjLGFBQWE7UUFDM0IsV0FBVztVQUNULFVBQVUsU0FBUztZQUNqQixNQUFNLElBQUksWUFBWSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsTUFBTSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9CLE9BQU8sTUFBTSxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1dBQzlFO1VBQ0QsZ0JBQWdCLEVBQUUsZUFBZTtTQUNsQztPQUNGLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztNQUNkLE1BQU0sY0FBYyxJQUFJLFlBQVksS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsYUFBYSxrQkFBa0IsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ25ILE1BQU0sWUFBWSxJQUFJLFVBQVUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDckYsTUFBTSxrQkFBa0I7UUFDdEIsR0FBRyxXQUFXO1FBQ2QsR0FBRyxTQUFTO09BQ2IsQ0FBQztNQUNGLE1BQU0sU0FBUyxTQUFTLE1BQU0sTUFBTSxDQUFDO1FBQ25DLEtBQUssSUFBSSxVQUFVLEtBQUssSUFBSSxHQUFHLFVBQVUsR0FBRyxPQUFPO1FBQ25ELEdBQUcsSUFBSSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzlDLGVBQWU7UUFDZixjQUFjLENBQUMsSUFBSSxVQUFVLENBQUM7UUFDOUIsaUJBQWlCLFFBQVEsQ0FBQyxPQUFPLENBQUM7VUFDaEMsbUJBQW1CO1VBQ25CLG9CQUFvQjtTQUNyQixDQUFDLENBQUM7UUFDSCxlQUFlLEtBQUs7UUFDcEIsU0FBUyxLQUFLO09BQ2YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxhQUFhLElBQUksVUFBVSxHQUFHO1FBQ2xDLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMsbUJBQW1CLENBQUM7U0FDL0I7UUFDRCxZQUFZLENBQUMsTUFBTSxDQUFDO09BQ3JCLEdBQUcsTUFBTSxDQUFDO01BQ1gsTUFBTSxlQUFlLElBQUksS0FBSyxHQUFHLENBQUMsNEJBQTRCLENBQUMsR0FBRyxFQUFFLENBQUM7TUFDckUsTUFBTSxnQkFBZ0IsWUFBWSxPQUFPLENBQUMsSUFBSSxVQUFVLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO01BQzlGLE1BQU0sa0JBQWtCO1FBQ3RCLFNBQVMsT0FBTyxDQUFDO1VBQ2YsVUFBVSxNQUFNLElBQUksU0FBUyxJQUFJLGtCQUFrQixXQUFXLEVBQUU7VUFDaEUsWUFBWSxRQUFRO1lBQ2xCLFNBQVMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxRQUFRLENBQUMsQ0FBQztXQUNsRDtVQUNELFdBQVcsUUFBUTtZQUNqQixTQUFTLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsT0FBTyxDQUFDLENBQUM7V0FDakQ7U0FDRixDQUFDO1FBQ0YsZUFBZSxFQUFFO09BQ2xCLENBQUM7TUFDRixPQUFPLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0tBQ2hGLENBQUM7SUFDRixNQUFNLGNBQWMsMkNBQTJDLGVBQWUsQ0FBQztNQUM3RSxNQUFNLElBQUksS0FBSztNQUNmLFdBQVcsS0FBSztNQUNoQixPQUFPLElBQUksTUFBTTtNQUNqQixXQUFXLElBQUksVUFBVTtNQUN6QixhQUFhLElBQUksWUFBWTtNQUM3QixNQUFNLEtBQUs7TUFDWCxVQUFVLENBQUMsSUFBSSxRQUFRO01BQ3ZCLFdBQVcsZUFBZTtNQUMxQixZQUFZLFFBQVEsS0FBSyxFQUFFO01BQzNCLFdBQVcsSUFBSSxVQUFVO01BQ3pCLE1BQU0sV0FBVztLQUNsQixFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDdkIsTUFBTSxpQkFBaUIsMkNBQTJDLGVBQWUsQ0FBQztNQUNoRixNQUFNLElBQUksS0FBSztNQUNmLFdBQVcsSUFBSTtNQUNmLE9BQU8sSUFBSSxNQUFNO01BQ2pCLFdBQVcsUUFBUSxLQUFLLEVBQUU7TUFDMUIsYUFBYSxJQUFJLFlBQVk7TUFDN0IsTUFBTSxJQUFJO01BQ1YsVUFBVSxDQUFDLElBQUksUUFBUTtNQUN2QixXQUFXLGNBQWM7TUFDekIsWUFBWSxRQUFRLEtBQUssRUFBRTtNQUMzQixXQUFXLElBQUksVUFBVTtNQUN6QixNQUFNLFdBQVc7S0FDbEIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDOztJQUV2QixNQUFNLG1CQUFtQiw0QkFBNEIsV0FBVyxpQkFBaUIsS0FBSyxDQUFDLE1BQU0sU0FBUyxRQUFRLEVBQUUsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzs7SUFFdkksTUFBTSx1QkFBdUIsZUFBZSxXQUFXLFVBQVUsU0FBUyxDQUFDO0lBQzNFLE1BQU0sZUFBZSx1QkFBdUIsV0FBVyxVQUFVLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRixNQUFNLHFCQUFxQiw0QkFBNEI7TUFDckQsTUFBTSxPQUFPLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztNQUN0RCxRQUFRLENBQUMsSUFBSSxFQUFFO1FBQ2IsV0FBVyxlQUFlO1FBQzFCLFdBQVcsYUFBYTtPQUN6QixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxZQUFZLDRCQUE0QjtNQUM1QyxRQUFRLENBQUMsU0FBUyxRQUFRLEVBQUUsV0FBVyxVQUFVLENBQUMsQ0FBQztNQUNuRCxLQUFLLENBQUMsU0FBUyxRQUFRLEVBQUUsV0FBVyxZQUFZLENBQUMsQ0FBQztNQUNsRCxLQUFLLENBQUMsU0FBUyxRQUFRLEVBQUUsb0JBQW9CLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDbkUsTUFBTSxDQUFDLFNBQVMsUUFBUSxDQUFDLENBQUM7S0FDM0IsQ0FBQztJQUNGLE1BQU0sV0FBVyw0QkFBNEI7TUFDM0MsUUFBUSxDQUFDLFNBQVMsUUFBUSxFQUFFLFdBQVcsWUFBWSxDQUFDLENBQUM7TUFDckQsS0FBSyxDQUFDLFNBQVMsUUFBUSxFQUFFLFdBQVcsVUFBVSxDQUFDLENBQUM7TUFDaEQsUUFBUSxDQUFDLFNBQVMsUUFBUSxFQUFFLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7S0FDaEUsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLHlEQUF5RDtNQUNqRixVQUFVLGFBQWEsRUFBRSxDQUFDO01BQzFCLEtBQUssQ0FBQyxTQUFTLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxZQUFZLENBQUMsV0FBVyxFQUFFLFNBQVMsUUFBUSxDQUFDLENBQUMsQ0FBQztNQUMxRyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDM0MsU0FBUyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztNQUNsQyxXQUFXLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUNyQyxXQUFXLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNqQyxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0Isd0RBQXdEO01BQzVFLE1BQU0sT0FBTyxjQUFjLFdBQVcsQ0FBQyxNQUFNLFlBQVksQ0FBQyxXQUFXLEVBQUUsU0FBUyxRQUFRLENBQUMsQ0FBQyxDQUFDO01BQzNGLFVBQVUsYUFBYSxFQUFFLENBQUM7TUFDMUIsS0FBSyxDQUFDLFNBQVMsUUFBUSxFQUFFLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ2xFLE1BQU0sQ0FBQyxTQUFTLFFBQVEsQ0FBQyxDQUFDO01BQzFCLE1BQU0sT0FBTyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDdEQsUUFBUSxDQUFDLElBQUksRUFBRSxXQUFXLGFBQWEsQ0FBQyxDQUFDO01BQ3pDLEtBQUssQ0FBQyxJQUFJLEVBQUUsV0FBVyxlQUFlLENBQUMsQ0FBQztNQUN4QyxTQUFTLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO01BQ2xDLFdBQVcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ3RDLENBQUM7SUFDRixNQUFNLHFCQUFxQix3Q0FBd0M7TUFDakUsTUFBTSxPQUFPLFlBQVksQ0FBQyxXQUFXLEVBQUUsU0FBUyxRQUFRLENBQUMsQ0FBQztNQUMxRCxNQUFNLFdBQVcsSUFBSSxLQUFLLEtBQUssR0FBRyxpQkFBaUIsR0FBRyxhQUFhLENBQUM7TUFDcEUsUUFBUSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDbkUsQ0FBQztJQUNGLE1BQU0sY0FBYyx3Q0FBd0M7TUFDMUQsTUFBTSxPQUFPLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztNQUN0RCxNQUFNLGVBQWUsR0FBRyxDQUFDLElBQUksRUFBRSxXQUFXLGVBQWUsQ0FBQyxDQUFDO01BQzNELE1BQU0sYUFBYSxZQUFZLENBQUMsV0FBVyxFQUFFLFNBQVMsUUFBUSxDQUFDLENBQUM7TUFDaEUsUUFBUSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztNQUNqQyxNQUFNLFdBQVcsWUFBWSxDQUFDLFdBQVcsRUFBRSxTQUFTLFFBQVEsQ0FBQyxDQUFDO01BQzlELE1BQU0sbUJBQW1CLE1BQU07UUFDN0IsS0FBSyxDQUFDLFNBQVMsUUFBUSxFQUFFLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sQ0FBQyxTQUFTLFFBQVEsQ0FBQyxDQUFDO09BQzNCLENBQUM7TUFDRixNQUFNLG9CQUFvQixNQUFNO1FBQzlCLFNBQVMsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7T0FDbkMsQ0FBQztNQUNGLE1BQU0sZUFBZSxZQUFZLEdBQUcsZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUM7TUFDekUsWUFBWSxFQUFFLENBQUM7TUFDZixRQUFRLENBQUMsSUFBSSxFQUFFLFdBQVcsZUFBZSxDQUFDLENBQUM7TUFDM0MsS0FBSyxDQUFDLElBQUksRUFBRSxXQUFXLGFBQWEsQ0FBQyxDQUFDO01BQ3RDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDakMsS0FBSyxDQUFDLFNBQVMsUUFBUSxFQUFFLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQ3RFLFVBQVUsWUFBWSxFQUFFLENBQUM7TUFDekIsV0FBVyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDcEMsQ0FBQztJQUNGLE1BQU0sWUFBWSx3Q0FBd0M7TUFDeEQsSUFBSSxVQUFVLFdBQVcsRUFBRSxFQUFFO1FBQzNCLFFBQVEsQ0FBQyxTQUFTLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sV0FBVyxZQUFZLENBQUMsV0FBVyxFQUFFLFNBQVMsUUFBUSxDQUFDLENBQUM7UUFDOUQsS0FBSyxDQUFDLFNBQVMsUUFBUSxFQUFFLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO09BQ3ZFO0tBQ0YsQ0FBQztJQUNGLE1BQU0sT0FBTyx3Q0FBd0M7TUFDbkQsSUFBSSxDQUFDLFVBQVUsV0FBVyxFQUFFLEVBQUU7UUFDNUIsV0FBVyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7T0FDakQ7S0FDRixDQUFDO0lBQ0YsTUFBTSxTQUFTLHdDQUF3QztNQUNyRCxJQUFJLFVBQVUsV0FBVyxFQUFFLEVBQUU7UUFDM0Isa0JBQWtCLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztPQUN4RDtLQUNGLENBQUM7SUFDRixNQUFNLGtCQUFrQix3Q0FBd0M7TUFDOUQsSUFBSSxVQUFVLFdBQVcsRUFBRSxFQUFFO1FBQzNCLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7T0FDdkQ7S0FDRixDQUFDO0lBQ0YsTUFBTSxXQUFXLHdDQUF3QyxVQUFVLFdBQVcsRUFBRSxDQUFDO0lBQ2pGLE1BQU0sWUFBWSx3Q0FBd0MsVUFBVSxZQUFZLEVBQUUsQ0FBQztJQUNuRixNQUFNLFlBQVkseUNBQXlDO01BQ3pELE1BQU0sT0FBTyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDdEQsT0FBTyxHQUFHLENBQUMsSUFBSSxFQUFFLFdBQVcsYUFBYSxDQUFDLEtBQUssSUFBSSxDQUFDO0tBQ3JELENBQUM7SUFDRixNQUFNLGNBQWMseUNBQXlDO01BQzNELE1BQU0sT0FBTyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDdEQsT0FBTyxHQUFHLENBQUMsSUFBSSxFQUFFLFdBQVcsZUFBZSxDQUFDLEtBQUssSUFBSSxDQUFDO0tBQ3ZELENBQUM7SUFDRixNQUFNLGtCQUFrQix3Q0FBd0MsU0FBUyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsSUFBSSxXQUFXLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3pJLE1BQU0sYUFBYSx3Q0FBd0M7TUFDekQsTUFBTSxJQUFJLFVBQVUsV0FBVyxFQUFFLEdBQUcsa0JBQWtCLEdBQUcsV0FBVyxDQUFDO01BQ3JFLENBQUMsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQ3ZDLENBQUM7SUFDRixNQUFNLGdCQUFnQix3Q0FBd0M7TUFDNUQsSUFBSSxDQUFDLFVBQVUsV0FBVyxFQUFFLEVBQUU7UUFDNUIsUUFBUSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNqQyxLQUFLLENBQUMsU0FBUyxRQUFRLEVBQUUsb0JBQW9CLENBQUMsV0FBVyxDQUFDLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRSxTQUFTLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDMUcsa0JBQWtCLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzNDLFVBQVUsWUFBWSxFQUFFLENBQUM7UUFDekIsV0FBVyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkMsV0FBVyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7T0FDaEM7S0FDRixDQUFDOztJQUVGLElBQUksMkJBQTJCLE1BQU0sT0FBTyxDQUFDO1FBQ3pDLFdBQVcsSUFBSTtRQUNmLFNBQVMsU0FBUztRQUNsQixNQUFNLElBQUk7UUFDVixRQUFRLE1BQU07UUFDZCxpQkFBaUIsZUFBZTtRQUNoQyxVQUFVLFFBQVE7UUFDbEIsV0FBVyxTQUFTO1FBQ3BCLFdBQVcsU0FBUztRQUNwQixhQUFhLFdBQVc7UUFDeEIsaUJBQWlCLGVBQWU7UUFDaEMsWUFBWSxVQUFVO1FBQ3RCLG9CQUFvQixrQkFBa0I7UUFDdEMsZUFBZSxhQUFhO0tBQy9CLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFVBQVUsb0NBQW9DO01BQ2xELE1BQU0sV0FBVyxXQUFXLFNBQVMsQ0FBQztNQUN0QyxPQUFPLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsU0FBUyxDQUFDLFdBQVcsVUFBVSxDQUFDO1FBQ2hDLFFBQVEsRUFBRTtPQUNYLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDUixTQUFTLENBQUMsV0FBVyxZQUFZLENBQUM7UUFDbEMsUUFBUSxNQUFNLENBQUMsV0FBVyxVQUFVLFNBQVMsRUFBRSxLQUFLLENBQUM7T0FDdEQsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sV0FBVyw2QkFBNkIsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxFQUFFLCtCQUErQjtRQUNoSCxNQUFNLE1BQU0sY0FBYyxNQUFNLElBQUksQ0FBQztRQUNyQyxJQUFJLEdBQUcsYUFBYSxLQUFLLFdBQVcsVUFBVSxTQUFTLEVBQUU7VUFDdkQsa0JBQWtCLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1VBQzNDLElBQUksVUFBVSxXQUFXLEVBQUUsRUFBRTtZQUMzQixRQUFRLENBQUMsU0FBUyxRQUFRLEVBQUUsV0FBVyxVQUFVLFNBQVMsQ0FBQyxDQUFDO1dBQzdEO1VBQ0QsTUFBTSxTQUFTLFVBQVUsV0FBVyxFQUFFLEdBQUcsV0FBVyxRQUFRLEdBQUcsV0FBVyxTQUFTLENBQUM7VUFDcEYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ25CO09BQ0YsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFUCxJQUFJLDZCQUE2QixNQUFNLE9BQU8sQ0FBQztRQUMzQyxXQUFXLElBQUk7UUFDZixTQUFTLE9BQU87UUFDaEIsUUFBUSxRQUFRO0tBQ25CLENBQUMsQ0FBQzs7SUFFSCxJQUFJLGdCQUFnQjtNQUNsQixVQUFVLENBQUMsYUFBYSxDQUFDO01BQ3pCLFVBQVUsQ0FBQyxXQUFXLENBQUM7TUFDdkIsVUFBVSxDQUFDLGdCQUFnQixDQUFDO01BQzVCLFVBQVUsQ0FBQyxjQUFjLENBQUM7TUFDMUIsUUFBUSxDQUFDLGtCQUFrQixDQUFDO01BQzVCLFNBQVMsQ0FBQyxVQUFVLENBQUM7TUFDckIsU0FBUyxDQUFDLGVBQWUsQ0FBQztNQUMxQixTQUFTLENBQUMsU0FBUyxDQUFDO01BQ3BCLFNBQVMsQ0FBQyxhQUFhLENBQUM7TUFDeEIsU0FBUyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUM7TUFDNUIsVUFBVSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFO1FBQzNDLE9BQU87VUFDTCxRQUFRLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQztVQUM3QixRQUFRLENBQUMsY0FBYyxFQUFFLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztTQUNyRDtRQUNELFFBQVE7VUFDTixRQUFRLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQztVQUM5QixRQUFRLENBQUMsY0FBYyxFQUFFLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztTQUNyRDtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxTQUFTLFFBQVE7TUFDckIsTUFBTSxRQUFRLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDO01BQ2xDLE1BQU0sWUFBWSxNQUFNLFlBQVksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO01BQ25ELE9BQU8sSUFBSSxDQUFDO1FBQ1YsWUFBWSxNQUFNLEtBQUssSUFBSSxFQUFFLEtBQUssSUFBSTtRQUN0QyxhQUFhLE1BQU0sS0FBSyxJQUFJLEVBQUUsS0FBSyxLQUFLO1FBQ3hDLGNBQWMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLEtBQUssQ0FBQztRQUNyQyxhQUFhLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxJQUFJLENBQUM7UUFDbkMsU0FBUztPQUNWLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsSUFBSSw0QkFBNEIsTUFBTSxPQUFPLENBQUM7UUFDMUMsV0FBVyxJQUFJO1FBQ2YsTUFBTSxNQUFNO0tBQ2YsQ0FBQyxDQUFDOztJQUVILE1BQU0sVUFBVSxRQUFRLENBQUM7TUFDdkIsUUFBUSxhQUFhO01BQ3JCLE1BQU0sU0FBUztNQUNmLFFBQVEsYUFBYTtNQUNyQixNQUFNLFdBQVc7TUFDakIsT0FBTyxZQUFZO0tBQ3BCLENBQUMsQ0FBQzs7SUFFSCxNQUFNLG1CQUFtQixjQUFjO01BQ3JDLFdBQVcsTUFBTSxDQUFDLFNBQVMsV0FBVyxDQUFDLFNBQVMsQ0FBQztNQUNqRCxZQUFZLFNBQVMsU0FBUyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDO01BQ3JELFdBQVcsU0FBUztRQUNsQixNQUFNLE1BQU0sU0FBUyxRQUFRLENBQUM7UUFDOUIsSUFBSSxLQUFLLEVBQUU7VUFDVCxLQUFLLENBQUMsR0FBRyxFQUFFLG1CQUFtQixDQUFDLENBQUM7VUFDaEMsS0FBSyxDQUFDLEdBQUcsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDbEMsTUFBTTtVQUNMLFFBQVEsQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztVQUNuQyxRQUFRLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1NBQy9CO09BQ0Y7TUFDRCxVQUFVLE1BQU0sR0FBRyxDQUFDLFNBQVMsUUFBUSxFQUFFLG1CQUFtQixDQUFDO01BQzNELFNBQVMsUUFBUTtRQUNmLFFBQVEsQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztPQUMvQztNQUNELFNBQVMsUUFBUSxRQUFRLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDO0tBQy9ELENBQUMsQ0FBQztJQUNILE1BQU0sbUJBQW1CLGdDQUFnQyxjQUFjLElBQUksS0FBSztNQUM5RSxPQUFPLG9CQUFvQixDQUFDO1FBQzFCLE1BQU0sSUFBSSxLQUFLO1FBQ2YsTUFBTSxJQUFJLEtBQUs7UUFDZixTQUFTLElBQUksUUFBUTtRQUNyQixZQUFZLElBQUksT0FBTyxPQUFPLEVBQUU7UUFDaEMsSUFBSTtRQUNKLE9BQU8sNEJBQTRCO1VBQ2pDLE1BQU0sZUFBZSxFQUFFLFNBQVMsSUFBSSxPQUFPLE9BQU8sRUFBRSxHQUFHLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO1VBQzdGLElBQUksTUFBTSxDQUFDLFNBQVM7WUFDbEIsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsY0FBYyxpQkFBaUIsRUFBRSxTQUFTLEVBQUU7Y0FDaEUsa0JBQWtCLEtBQUs7Y0FDdkIsUUFBUSxJQUFJLE9BQU87YUFDcEIsQ0FBQyxDQUFDLENBQUM7V0FDTCxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1NBQ2xEO1FBQ0QsU0FBUyxJQUFJLFFBQVE7UUFDckIsUUFBUSxnQkFBZ0I7UUFDeEIsU0FBUyxDQUFDO1FBQ1YsU0FBUyxRQUFRO1FBQ2pCLFNBQVMsRUFBRTtRQUNYLG9CQUFvQixDQUFDLEdBQUcsV0FBVyxHQUFHLENBQUMsV0FBVyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7T0FDckUsRUFBRSxNQUFNLEVBQUUsU0FBUyxPQUFPLENBQUMsQ0FBQztLQUM5QixDQUFDO0lBQ0YsTUFBTSxXQUFXLGlDQUFpQztNQUNoRCxNQUFNLG9CQUFvQixRQUFRLE9BQU87UUFDdkMsTUFBTSxXQUFXLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQztRQUNqQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QixJQUFJLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLFNBQVMsT0FBTyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7VUFDdEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7WUFDcEMsT0FBTyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUM7WUFDdEIsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7Y0FDOUIsTUFBTSxJQUFJLEtBQUs7Y0FDZixPQUFPLElBQUksUUFBUSxJQUFJLEVBQUU7YUFDMUIsQ0FBQyxDQUFDO1dBQ0osQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sbUJBQW1CLFFBQVEsT0FBTztRQUN0QyxHQUFHLFVBQVUsQ0FBQyxJQUFJLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztPQUNuQyxDQUFDO01BQ0YsT0FBTyxXQUFXO1FBQ2hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVE7VUFDM0IsTUFBTSxPQUFPLElBQUksS0FBSyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1VBQzVELE9BQU87WUFDTCxNQUFNLElBQUksS0FBSztZQUNmLFFBQVEsS0FBSztZQUNiLEdBQUcsSUFBSTtZQUNQLFVBQVUsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1lBQ2pDLFNBQVMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1dBQ2hDLENBQUM7U0FDSCxDQUFDLENBQUMsQ0FBQztPQUNMLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sY0FBYyxTQUFTO01BQzNCLEtBQUs7UUFDSCxLQUFLLE1BQU07UUFDWCxTQUFTLENBQUMsaUJBQWlCLENBQUM7UUFDNUIsWUFBWTtVQUNWLFNBQVMsSUFBSTtVQUNiLGNBQWMsSUFBSTtTQUNuQjtPQUNGO01BQ0QsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMzQixDQUFDLENBQUM7SUFDSCxNQUFNLG9CQUFvQixVQUFVLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUM1RCxNQUFNLGtCQUFrQixDQUFDLDREQUE0RCxLQUFLO01BQ3hGLE1BQU0scUJBQXFCLElBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEtBQUssRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7TUFDeEgsTUFBTSxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQztNQUM3QyxrQkFBa0IsS0FBSyxDQUFDLE9BQU8sVUFBVSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUNyRCxPQUFPLE1BQU0sT0FBTyxDQUFDO1FBQ25CLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTO1lBQ1AsdUJBQXVCO1lBQ3ZCLFdBQVc7V0FDWixPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDNUQ7UUFDRCxVQUFVO1FBQ1YsTUFBTSxVQUFVO1FBQ2hCLFFBQVEsVUFBVTtVQUNoQixZQUFZLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztVQUN0QixNQUFNLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQ3hGO1FBQ0QsWUFBWTtVQUNWLENBQUMsT0FBTyxFQUFFLEdBQUc7WUFDWCxpQkFBaUI7WUFDakIsUUFBUTtXQUNUO1NBQ0Y7UUFDRCxrQkFBa0IsUUFBUSxDQUFDO1VBQ3pCLEdBQUcsT0FBTyxHQUFHLENBQUMsV0FBVyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFO1VBQzFDLFFBQVEsT0FBTyxDQUFDO1lBQ2QsYUFBYSxvQkFBb0I7WUFDakMsaUJBQWlCLEtBQUs7WUFDdEIsTUFBTSxFQUFFLE1BQU0sVUFBVSxFQUFFO1dBQzNCLENBQUM7VUFDRixTQUFTLE9BQU8sQ0FBQztZQUNmLFVBQVU7Y0FDUixDQUFDLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRztnQkFDbEMsV0FBVyxtQkFBbUI7a0JBQzVCLENBQUMsT0FBTyxNQUFNLEtBQUssSUFBSSxHQUFHLEdBQUcsUUFBUSxHQUFHLEdBQUcsUUFBUSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQ2hFO2VBQ0Y7YUFDRjtXQUNGLENBQUM7VUFDRixNQUFNLENBQUMsaUJBQWlCLEVBQUU7WUFDeEIsYUFBYSxDQUFDLGVBQWU7Y0FDM0IsVUFBVSxLQUFLLENBQUMsTUFBTTtnQkFDcEIsTUFBTSxTQUFTLEVBQUUsS0FBSyxJQUFJLEdBQUcsR0FBRyxRQUFRLEdBQUcsR0FBRyxRQUFRLElBQUksQ0FBQztnQkFDM0QsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2VBQ2QsQ0FBQyxDQUFDO2FBQ0osQ0FBQztZQUNGLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxjQUFjO2NBQzdCLE1BQU0saUJBQWlCLEVBQUUsTUFBTSxJQUFJLEtBQUssS0FBSyxXQUFXLENBQUM7Y0FDekQsTUFBTSxrQkFBa0IsRUFBRSxNQUFNLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQztjQUMzRCxJQUFJLGNBQWMsRUFBRTtnQkFDbEIsUUFBUSxDQUFDLElBQUksUUFBUSxFQUFFLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxjQUFjO2tCQUNoRSxJQUFJLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxXQUFXO29CQUNwRCxLQUFLLENBQUMsVUFBVSxFQUFFLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxtQkFBbUI7c0JBQ3ZFLE9BQU8sVUFBVSxFQUFFLFNBQVMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsTUFBTSxDQUFDLENBQUM7cUJBQ3BFLENBQUMsQ0FBQzttQkFDSixDQUFDLENBQUM7aUJBQ0osQ0FBQyxDQUFDO2dCQUNILEVBQUUsS0FBSyxFQUFFLENBQUM7ZUFDWCxNQUFNLElBQUksZUFBZSxFQUFFO2dCQUMxQixFQUFFLEtBQUssRUFBRSxDQUFDO2VBQ1g7YUFDRixDQUFDO1dBQ0gsQ0FBQztTQUNILENBQUM7T0FDSCxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxhQUFhLHlDQUF5QyxRQUFRLENBQUMsUUFBUSxFQUFFO01BQzdFLEtBQUssTUFBTTtNQUNYLFNBQVM7UUFDUCxxQkFBcUI7UUFDckIsVUFBVTtPQUNYO01BQ0QsVUFBVTtLQUNYLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDbEIsTUFBTSxxQkFBcUIsNkJBQTZCLFVBQVUsQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hHLE1BQU0seUJBQXlCLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sdUJBQXVCLENBQUMsMkNBQTJDLEtBQUs7TUFDNUUsTUFBTSxxQkFBcUIsU0FBUyxLQUFLLElBQUksQ0FBQyxPQUFPLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ3BILE1BQU0sYUFBYTtRQUNqQjtVQUNFLEtBQUs7WUFDSCxLQUFLLEtBQUs7WUFDVixTQUFTLENBQUMsYUFBYSxDQUFDO1dBQ3pCO1VBQ0QsWUFBWSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsRUFBRSxTQUFTLE9BQU8sVUFBVSxNQUFNLENBQUMsQ0FBQztTQUNwRjtRQUNELFdBQVcsQ0FBQyxTQUFTLE1BQU0sQ0FBQztPQUM3QixDQUFDO01BQ0Ysa0JBQWtCLEtBQUssQ0FBQyxPQUFPO1FBQzdCLFVBQVUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO09BQ3RCLENBQUMsQ0FBQztNQUNILE1BQU0sdUJBQXVCLFVBQVU7UUFDckMsUUFBUSxDQUFDLE1BQU0sUUFBUSxFQUFFLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxnQkFBZ0I7VUFDcEUsTUFBTSxVQUFVLEVBQUUsU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsaUJBQWlCO1lBQzlELE1BQU0sYUFBYSxDQUFDLFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2pELFFBQVEsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQy9CLFFBQVEsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUU7Y0FDbkMsVUFBVSxVQUFVO2NBQ3BCLE1BQU0sU0FBUyxHQUFHO2FBQ25CLENBQUMsQ0FBQztXQUNKLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixPQUFPLE1BQU0sT0FBTyxDQUFDO1FBQ25CLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTO1lBQ1AsNEJBQTRCO1lBQzVCLFdBQVc7V0FDWixPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMscUNBQXFDLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDakU7UUFDRCxVQUFVO1FBQ1YsUUFBUSxvQkFBb0I7UUFDNUIsWUFBWTtVQUNWLENBQUMsT0FBTyxFQUFFLEdBQUc7WUFDWCxzQkFBc0I7WUFDdEIsUUFBUTtXQUNUO1NBQ0Y7UUFDRCxrQkFBa0IsUUFBUSxDQUFDO1VBQ3pCLEdBQUcsT0FBTyxHQUFHLENBQUMsV0FBVyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFO1VBQzFDLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxjQUFjO2NBQzNELE1BQU0sa0JBQWtCLEVBQUUsTUFBTSxJQUFJLEtBQUssS0FBSyxZQUFZLENBQUM7Y0FDM0QsTUFBTSxpQkFBaUIsRUFBRSxNQUFNLElBQUksS0FBSyxLQUFLLFdBQVcsQ0FBQztjQUN6RCxJQUFJLGVBQWUsSUFBSSxVQUFVLEVBQUU7Z0JBQ2pDLEVBQUUsS0FBSyxFQUFFLENBQUM7ZUFDWDtjQUNELElBQUksZUFBZSxJQUFJLGNBQWMsRUFBRTtnQkFDckMsUUFBUSxDQUFDLElBQUksUUFBUSxFQUFFLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxnQkFBZ0I7a0JBQ2xFLElBQUksVUFBVSxFQUFFLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLGlCQUFpQjtvQkFDNUQsSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLGVBQWUsSUFBSSxRQUFRLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxjQUFjLEVBQUU7c0JBQ3RHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO3NCQUMzQixFQUFFLEtBQUssRUFBRSxDQUFDO3FCQUNYLE1BQU0sSUFBSSxjQUFjLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRTtzQkFDMUQsUUFBUSxDQUFDLGFBQWEsUUFBUSxFQUFFLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxvQkFBb0I7d0JBQy9FLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMseUJBQXlCOzBCQUNuRixhQUFhLFVBQVUsRUFBRSxTQUFTLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLFFBQVEsTUFBTSxDQUFDLENBQUM7eUJBQ2hGLENBQUMsQ0FBQzt1QkFDSixDQUFDLENBQUM7c0JBQ0gsRUFBRSxLQUFLLEVBQUUsQ0FBQztxQkFDWDttQkFDRixDQUFDLENBQUM7aUJBQ0osQ0FBQyxDQUFDO2VBQ0o7YUFDRixDQUFDLENBQUMsQ0FBQztTQUNQLENBQUM7T0FDSCxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSwwQkFBMEIsQ0FBQyw2RUFBNkUsS0FBSztNQUNqSCxPQUFPO1FBQ0wsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQywrQkFBK0IsQ0FBQztTQUMzQztRQUNELFlBQVksUUFBUSxJQUFJLENBQUMsUUFBUTtVQUMvQixPQUFPLElBQUksS0FBSyxLQUFLLE1BQU0sR0FBRyxlQUFlLENBQUM7WUFDNUMsTUFBTSxJQUFJO1lBQ1YsVUFBVTtZQUNWLFlBQVk7WUFDWixPQUFPO1lBQ1AsTUFBTTtZQUNOLFNBQVM7V0FDVixDQUFDLEdBQUcsZUFBZSxDQUFDO1lBQ25CLFdBQVcsSUFBSTtZQUNmLFdBQVc7WUFDWCxVQUFVO1lBQ1YsWUFBWTtZQUNaLGtCQUFrQixPQUFPO1lBQ3pCLE1BQU07WUFDTixTQUFTO1dBQ1YsQ0FBQyxDQUFDO1NBQ0osQ0FBQztRQUNGLFlBQVksUUFBUSxDQUFDO1VBQ25CLE9BQU8sT0FBTyxDQUFDO1lBQ2IsV0FBVyxFQUFFLFVBQVUsUUFBUSxFQUFFO1lBQ2pDLGFBQWEsdUNBQXVDO1lBQ3BELFdBQVcscUNBQXFDO1lBQ2hELGNBQWMsd0NBQXdDO1lBQ3RELGdCQUFnQiwwQ0FBMEM7WUFDMUQsVUFBVSxPQUFPO1dBQ2xCLENBQUM7VUFDRixTQUFTLE9BQU8sQ0FBQyxFQUFFLENBQUM7U0FDckIsQ0FBQztPQUNILENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDM0QsTUFBTSxrQkFBa0IsQ0FBQyx1RkFBdUYsS0FBSztNQUNuSCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUM7TUFDN0IsTUFBTSxrQkFBa0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO01BQzFDLE1BQU0sNkJBQTZCLFdBQVcsUUFBUSxJQUFJLENBQUMsUUFBUTtRQUNqRSxPQUFPLElBQUksS0FBSyxLQUFLLE1BQU0sR0FBRyxlQUFlLENBQUM7VUFDNUMsTUFBTSxJQUFJO1VBQ1YsVUFBVTtVQUNWLFlBQVk7VUFDWixPQUFPO1VBQ1AsTUFBTTtVQUNOLFNBQVM7U0FDVixDQUFDLEdBQUcsZUFBZSxDQUFDO1VBQ25CLFdBQVcsSUFBSTtVQUNmLGFBQWEsZUFBZSxJQUFJLEVBQUU7VUFDbEMsVUFBVTtVQUNWLFlBQVk7VUFDWixrQkFBa0IsT0FBTztVQUN6QixNQUFNO1VBQ04sU0FBUztTQUNWLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztNQUNILE1BQU0sa0JBQWtCLFdBQVcsU0FBUyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7TUFDM0QsT0FBTztRQUNMLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMscUJBQXFCLENBQUM7VUFDaEMsWUFBWSxFQUFFLE1BQU0sVUFBVSxFQUFFO1NBQ2pDO1FBQ0QsWUFBWTtVQUNWLG9CQUFvQixDQUFDO1lBQ25CLFNBQVM7WUFDVCxTQUFTLGdCQUFnQjtZQUN6QixZQUFZLFNBQVMsU0FBUyxPQUFPLEtBQUssQ0FBQztZQUMzQyxTQUFTO1dBQ1YsQ0FBQztVQUNGLHVCQUF1QixDQUFDO1lBQ3RCLFFBQVE7WUFDUixXQUFXO1lBQ1gsVUFBVTtZQUNWLFlBQVk7WUFDWixTQUFTLGVBQWU7WUFDeEIsTUFBTTtZQUNOLFNBQVM7V0FDVixDQUFDO1NBQ0g7UUFDRCxZQUFZLFFBQVEsQ0FBQztVQUNuQixNQUFNLENBQUMsaUJBQWlCLEVBQUU7WUFDeEIsYUFBYSxDQUFDLGVBQWU7Y0FDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO2FBQ3JDLENBQUM7WUFDRixLQUFLLENBQUMsa0JBQWtCLEVBQUUsY0FBYztjQUN0QyxNQUFNLGdCQUFnQixHQUFHLEVBQUUsTUFBTSxDQUFDO2NBQ2xDLGVBQWUsSUFBSSxDQUFDLFFBQVEsR0FBRztnQkFDN0IsR0FBRyxlQUFlLElBQUksRUFBRTtnQkFDeEIsSUFBSTtlQUNMLEdBQUcsZUFBZSxJQUFJLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDdEQsQ0FBQztXQUNILENBQUM7VUFDRixRQUFRLE9BQU8sQ0FBQztZQUNkLEdBQUcsU0FBUyxTQUFTLE9BQU8sR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUU7WUFDdEUsYUFBYSwrQkFBK0I7WUFDNUMsV0FBVywyQkFBMkI7Y0FDcEMsTUFBTSxlQUFlLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDMUMsTUFBTSxjQUFjLDBCQUEwQixDQUFDLGVBQWUsQ0FBQyxDQUFDO2NBQ2hFLElBQUksZUFBZSxFQUFFO2dCQUNuQixPQUFPLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztlQUM1QixNQUFNO2dCQUNMLE9BQU8sT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO2VBQzlCO2NBQ0QsU0FBUyxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2FBQzFDO1dBQ0YsQ0FBQztTQUNILENBQUM7T0FDSCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sZUFBZSxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDakQsTUFBTSxhQUFhLHFCQUFxQjtNQUN0QyxNQUFNLGVBQWUsSUFBSSxhQUFhLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNuRCxNQUFNLGlCQUFpQixJQUFJLGVBQWUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3ZELE1BQU0scUJBQXFCLElBQUksbUJBQW1CLENBQUM7TUFDbkQsTUFBTSxjQUFjLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO01BQzdDLE1BQU0saUJBQWlCLElBQUksQ0FBQyxJQUFJLGtCQUFrQixDQUFDLENBQUM7TUFDcEQsTUFBTSxTQUFTLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUNyQyxNQUFNLFdBQVcsNkJBQTZCLElBQUksTUFBTSxJQUFJLENBQUMsUUFBUTtRQUNuRSxPQUFPLElBQUksS0FBSyxLQUFLLE1BQU0sR0FBRyxlQUFlLENBQUM7VUFDNUMsTUFBTSxJQUFJO1VBQ1YsVUFBVTtVQUNWLFlBQVk7VUFDWixTQUFTLElBQUk7VUFDYixNQUFNO1VBQ04sU0FBUztTQUNWLENBQUMsR0FBRyxlQUFlLENBQUM7VUFDbkIsV0FBVyxJQUFJO1VBQ2YsVUFBVTtVQUNWLFlBQVk7VUFDWixXQUFXO1VBQ1gsa0JBQWtCLElBQUk7VUFDdEIsTUFBTTtVQUNOLFNBQVM7U0FDVixDQUFDLENBQUM7T0FDSixDQUFDLENBQUM7TUFDSCxPQUFPO1FBQ0wsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxVQUFVLENBQUM7VUFDckIsWUFBWSxFQUFFLE1BQU0sTUFBTSxFQUFFO1NBQzdCO1FBQ0QsWUFBWSxRQUFRLENBQUMsY0FBYyxJQUFJLEVBQUUsRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDO1FBQzdELFlBQVksUUFBUSxDQUFDO1VBQ25CLE1BQU0sT0FBTyxDQUFDO1lBQ1osTUFBTSxNQUFNO1lBQ1osVUFBVSx1RUFBdUU7WUFDakYsUUFBUSxLQUFLO1dBQ2QsQ0FBQztVQUNGLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsY0FBYztjQUMxRCxNQUFNLGdCQUFnQixHQUFHLEVBQUUsTUFBTSxDQUFDO2NBQ2xDLFdBQVcsSUFBSSxDQUFDLFFBQVEsR0FBRztnQkFDekIsR0FBRyxXQUFXLElBQUksRUFBRTtnQkFDcEIsSUFBSTtlQUNMLEdBQUcsV0FBVyxJQUFJLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7Y0FDakQsY0FBYyxDQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUU7Z0JBQ2hDLFFBQVE7Z0JBQ1IsSUFBSTtlQUNMLENBQUMsQ0FBQzthQUNKLENBQUMsQ0FBQyxDQUFDO1VBQ04sU0FBUyxPQUFPLENBQUM7WUFDZixVQUFVO2NBQ1IsQ0FBQyxDQUFDLG1CQUFtQixHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUc7Z0JBQ2xDLFdBQVcsbUJBQW1CO2tCQUM1QixjQUFjLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUM7a0JBQ2pELFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxLQUFLLENBQUMsT0FBTyxNQUFNLENBQUMsRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDaEY7ZUFDRjthQUNGO1dBQ0YsQ0FBQztVQUNGLFNBQVMsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUNyQixDQUFDO09BQ0gsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxXQUFXLCtCQUErQjtNQUM5QyxNQUFNLFVBQVUsWUFBWSxPQUFPLFFBQVEsQ0FBQztNQUM1QyxNQUFNLFlBQVksT0FBTyxNQUFNLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO01BQzNELE9BQU8sUUFBUSxDQUFDO1FBQ2QsS0FBSyxDQUFDLFlBQVksTUFBTSxFQUFFLFNBQVMsQ0FBQztRQUNwQyxhQUFhLENBQUMsTUFBTSxXQUFXLE9BQU8sRUFBRSxDQUFDO09BQzFDLE9BQU8sQ0FBQyxZQUFZLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sV0FBVyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNoRyxDQUFDOztJQUVGLElBQUksK0JBQStCLE1BQU0sT0FBTyxDQUFDO1FBQzdDLFdBQVcsSUFBSTtRQUNmLFFBQVEsUUFBUTtLQUNuQixDQUFDLENBQUM7O0lBRUgsTUFBTSxXQUFXLFdBQVc7TUFDMUIsTUFBTSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN6QixNQUFNLFlBQVksT0FBTyxFQUFFLE9BQU8sS0FBSyxJQUFJLEVBQUUsS0FBSyxJQUFJLEdBQUcsS0FBSyxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7TUFDNUUsTUFBTSxXQUFXLEtBQUs7UUFDcEIsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDZCxDQUFDO01BQ0YsTUFBTSxTQUFTLE1BQU07UUFDbkIsTUFBTSxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO1VBQ2QsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNaO09BQ0YsQ0FBQztNQUNGLE9BQU8sSUFBSSxDQUFDO1FBQ1YsU0FBUztRQUNULFFBQVE7UUFDUixNQUFNO09BQ1AsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sU0FBUyxRQUFRLElBQUksT0FBTyxRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7SUFFdkQsSUFBSSw4QkFBOEIsTUFBTSxPQUFPLENBQUM7UUFDNUMsV0FBVyxJQUFJO1FBQ2YsVUFBVSxRQUFRO1FBQ2xCLE1BQU0sTUFBTTtLQUNmLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFVBQVUsNkJBQTZCO01BQzNDLE1BQU0sUUFBUSxVQUFVLE9BQU8sQ0FBQztNQUNoQyxNQUFNLFlBQVksSUFBSSxDQUFDLFVBQVUsU0FBUyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUM7TUFDekQsV0FBVyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7TUFDaEMsT0FBTywrQkFBK0I7UUFDcEMsU0FBUyxTQUFTLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzlDLElBQUksS0FBSyxVQUFVLEVBQUU7VUFDbkIsY0FBYyxLQUFLLEVBQUUsQ0FBQztTQUN2QjtPQUNGLENBQUM7S0FDSCxDQUFDO0lBQ0YsSUFBSSxrQkFBa0I7TUFDcEIsVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFO1FBQ3BDLFVBQVU7VUFDUixVQUFVLENBQUMsT0FBTyxDQUFDO1VBQ25CLFNBQVMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDO1VBQzVCLFFBQVEsQ0FBQyxTQUFTLEVBQUU7WUFDbEIsT0FBTyxPQUFPO1lBQ2QsT0FBTyxRQUFRO1dBQ2hCLENBQUM7U0FDSDtPQUNGLENBQUMsQ0FBQztNQUNILFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDO01BQzNCLFFBQVEsQ0FBQyxhQUFhLENBQUM7TUFDdkIsZUFBZSxDQUFDLFVBQVUsQ0FBQztLQUM1QixDQUFDOztJQUVGLE1BQU0sWUFBWSxRQUFRLENBQUM7TUFDekIsUUFBUSxlQUFlO01BQ3ZCLE1BQU0sV0FBVztNQUNqQixRQUFRLGVBQWU7TUFDdkIsT0FBTyxjQUFjO0tBQ3RCLENBQUMsQ0FBQzs7SUFFSCxNQUFNLG1CQUFtQix3QkFBd0I7TUFDL0MsTUFBTSxXQUFXLFlBQVksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzdDLFlBQVksU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztNQUN2QyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDdkIsQ0FBQztJQUNGLE1BQU0saUJBQWlCLGNBQWM7TUFDbkMsTUFBTSxLQUFLLEtBQUssUUFBUSxDQUFDO01BQ3pCLE1BQU0sUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDeEIsTUFBTSxPQUFPLEVBQUUsSUFBSSxDQUFDO01BQ3BCLElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsS0FBSyxRQUFRLEVBQUU7UUFDbEMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztPQUNoQjtLQUNGLENBQUM7SUFDRixNQUFNLGlCQUFpQixTQUFTO01BQzlCLGNBQWMsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLElBQUksa0JBQWtCLENBQUMsS0FBSyxPQUFPLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO0tBQzVGLENBQUM7SUFDRixNQUFNLG9CQUFvQix3QkFBd0I7TUFDaEQsY0FBYyxDQUFDLEtBQUssRUFBRSxpQkFBaUIsSUFBSSxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO0tBQzNGLENBQUM7SUFDRixNQUFNLG9CQUFvQix3QkFBd0I7TUFDaEQsSUFBSSxDQUFDLEtBQUssWUFBWSxFQUFFO1FBQ3RCLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN4QixNQUFNO1FBQ0wsTUFBTSxlQUFlLFlBQVksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELE1BQU0sZUFBZSxLQUFLLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4RCxNQUFNLFlBQVksWUFBWSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsTUFBTSxjQUFjLEtBQUssZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sV0FBVyxRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDLE1BQU07VUFDbkUsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztVQUNyQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsWUFBWSxPQUFPLENBQUMsQ0FBQztTQUMvQyxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN0QjtLQUNGLENBQUM7O0lBRUYsTUFBTSxjQUFjLFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDOztJQUU5RCxNQUFNLFNBQVMseUNBQXlDO01BQ3RELE1BQU0sZUFBZSx1Q0FBdUM7UUFDMUQsTUFBTSxXQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixNQUFNLFVBQVUsUUFBUSxXQUFXLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3JELElBQUksVUFBVSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7VUFDOUIsU0FBUyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQ3pDLFlBQVksZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtjQUMzQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbkIsRUFBRSxNQUFNO2NBQ1AsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLFFBQVEsRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7YUFDakUsQ0FBQyxDQUFDO1dBQ0osQ0FBQyxDQUFDO1NBQ0osTUFBTTtVQUNMLE1BQU0sYUFBYSxXQUFXO1lBQzVCLFNBQVMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7V0FDakQsQ0FBQztVQUNGLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxlQUFlLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNwSDtPQUNGLENBQUM7TUFDRixNQUFNLG9CQUFvQixlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDbEQsTUFBTSxXQUFXLFFBQVEsU0FBUyxLQUFLLElBQUksQ0FBQyxRQUFRO1FBQ2xELE1BQU0sUUFBUSxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQztRQUNqQyxNQUFNLFFBQVEsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLFFBQVEsQ0FBQyxJQUFJLE1BQU0sRUFBRSxRQUFRLElBQUksS0FBSyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDeEYsTUFBTSxXQUFXLFlBQVksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLFFBQVEsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakQsT0FBTyxJQUFJLENBQUM7T0FDYixDQUFDLENBQUM7TUFDSCxNQUFNLGdCQUFnQixlQUFlLFNBQVMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO01BQ3ZFLE1BQU0sd0JBQXdCLGlCQUFpQixDQUFDO01BQ2hELE1BQU0sYUFBYTtRQUNqQixRQUFRLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDbkIsWUFBWSxPQUFPLENBQUM7VUFDbEIsWUFBWSxNQUFNLFdBQVc7VUFDN0IsT0FBTztZQUNMLE1BQU0sU0FBUztZQUNmLFlBQVksUUFBUSxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUM7WUFDdkMsa0JBQWtCLGVBQWU7Y0FDL0IsT0FBTyxVQUFVO2NBQ2pCLE1BQU0sRUFBRTthQUNULENBQUM7WUFDRixVQUFVLGdCQUFnQjtjQUN4QixLQUFLLENBQUMsSUFBSSxRQUFRLEVBQUUsTUFBTSxNQUFNLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ3hEO1lBQ0QsR0FBRyxNQUFNLFlBQVksSUFBSSxDQUFDLEtBQUssTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1dBQ3BFO1NBQ0YsQ0FBQztRQUNGLFNBQVMsT0FBTyxDQUFDO1VBQ2YsUUFBUTtZQUNOLE1BQU0sVUFBVTtZQUNoQixPQUFPLE1BQU0sYUFBYTtZQUMxQixXQUFXLEtBQUs7V0FDakI7VUFDRCxVQUFVLGdDQUFnQztZQUN4QyxNQUFNLFVBQVUsUUFBUSxXQUFXLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzFELE1BQU0sZUFBZSxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNuRCxJQUFJLFlBQVksRUFBRTtjQUNoQixJQUFJLEtBQUssQ0FBQyxTQUFTLFFBQVEsQ0FBQyxPQUFPLElBQUksTUFBTSxTQUFTLEVBQUU7Z0JBQ3RELE1BQU0sZ0JBQWdCLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsWUFBWSxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BJLE1BQU0sV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzVCLE1BQU0sYUFBYSxZQUFZO2tCQUM3QixhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjO29CQUN4QyxhQUFhLEtBQUssQ0FBQyxNQUFNO3NCQUN2QixJQUFJLE1BQU0sTUFBTSxZQUFZLEVBQUU7d0JBQzVCLFlBQVksZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3VCQUN6QztxQkFDRixFQUFFLE1BQU07c0JBQ1AsWUFBWSxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVE7d0JBQzNDLE1BQU0sV0FBVyxZQUFZLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDN0MsT0FBTyxRQUFRLE1BQU0sS0FBSyxFQUFFLE1BQU0sQ0FBQzt1QkFDcEMsQ0FBQyxDQUFDO3NCQUNILFlBQVksZUFBZSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTTt3QkFDcEQsWUFBWSxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQ3hDLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQzt1QkFDeEIsQ0FBQyxDQUFDO3FCQUNKLENBQUMsQ0FBQzttQkFDSixDQUFDLENBQUM7aUJBQ0osQ0FBQztnQkFDRixJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsZUFBZSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7ZUFDM0g7YUFDRjtXQUNGO1VBQ0QsYUFBYSxlQUFlLEVBQUU7U0FDL0IsQ0FBQztRQUNGLE1BQU0sT0FBTyxDQUFDO1VBQ1osTUFBTSxTQUFTO1VBQ2YsUUFBUSwwQkFBMEI7WUFDaEMsWUFBWSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsWUFBWSxlQUFlLENBQUMsQ0FBQztZQUNoRSxPQUFPLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1dBQzVCO1VBQ0QsVUFBVSxRQUFRO1lBQ2hCLE1BQU0sVUFBVSxRQUFRLFdBQVcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDckQsSUFBSSxVQUFVLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtjQUM5QixVQUFVLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztjQUMxQixPQUFPLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVCO1lBQ0QsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO1dBQ3hCO1VBQ0QsTUFBTSwwQkFBMEI7WUFDOUIsWUFBWSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsWUFBWSxjQUFjLENBQUMsQ0FBQztZQUMvRCxPQUFPLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1dBQzVCO1VBQ0QsU0FBUyxRQUFRO1lBQ2YsTUFBTSxVQUFVLFFBQVEsV0FBVyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNyRCxNQUFNLGdCQUFnQixVQUFVLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqRCxJQUFJLGFBQWEsSUFBSSxDQUFDLE1BQU0sV0FBVyxJQUFJLEVBQUUsRUFBRTtjQUM3QyxPQUFPLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsWUFBWSxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVE7Z0JBQ3BHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QyxPQUFPLElBQUksQ0FBQztlQUNiLENBQUMsQ0FBQzthQUNKLE1BQU07Y0FDTCxNQUFNLGVBQWUsWUFBWSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7Y0FDakQsSUFBSSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO2NBQzlCLE1BQU0sVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7Y0FDOUMsSUFBSSxhQUFhLEVBQUU7Z0JBQ2pCLFVBQVUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2VBQzNCO2NBQ0QsT0FBTyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM1QjtXQUNGO1NBQ0YsQ0FBQztRQUNGLFFBQVEsT0FBTyxDQUFDO1VBQ2QsYUFBYSxNQUFNLFFBQVEsVUFBVTtVQUNyQyxNQUFNLEVBQUUsTUFBTSxVQUFVLEVBQUU7U0FDM0IsQ0FBQztRQUNGLFFBQVEsT0FBTyxDQUFDO1VBQ2QsUUFBUTtZQUNOLFNBQVMsV0FBVztjQUNsQixPQUFPLGFBQWEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFO2dCQUNwQyxRQUFRLE1BQU0sUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDO2dCQUNsQyxTQUFTLE1BQU07a0JBQ2IsTUFBTSxrQkFBa0IsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLFFBQVEsQ0FBQyxLQUFLLFFBQVEsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7a0JBQy9GLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUN2QjtlQUNGLENBQUMsQ0FBQzthQUNKO1dBQ0Y7U0FDRixDQUFDO1FBQ0YsTUFBTSxDQUFDLHFCQUFxQixFQUFFO1VBQzVCLGFBQWEsQ0FBQyxpQkFBaUI7WUFDN0IsTUFBTSxrQkFBa0IsSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7V0FDNUQsQ0FBQztVQUNGLGFBQWEsQ0FBQyxrQkFBa0I7WUFDOUIsTUFBTSxrQkFBa0IsSUFBSSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQztXQUMvQyxDQUFDO1VBQ0YsY0FBYyxDQUFDLFFBQVE7WUFDckIsTUFBTSxhQUFhLElBQUksQ0FBQztZQUN4QixXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxlQUFlLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUNsSCxDQUFDO1VBQ0YsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLGNBQWM7WUFDakMsTUFBTSxVQUFVLFFBQVEsV0FBVyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNyRCxnQkFBZ0IsQ0FBQyxNQUFNLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEtBQUssQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztZQUM5QixNQUFNLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsTUFBTSxLQUFLLEVBQUUsWUFBWSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNoRixVQUFVLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQixjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDdEIsQ0FBQztTQUNILE9BQU8sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhO1lBQzVELE1BQU0sVUFBVSxRQUFRLFdBQVcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDMUQsSUFBSSxNQUFNLENBQUMsT0FBTyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUU7Y0FDcEMsVUFBVSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDM0I7V0FDRixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztPQUNiLENBQUM7TUFDRixNQUFNLGFBQWE7UUFDakIsQ0FBQyxlQUFlLEVBQUUsR0FBRztVQUNuQixZQUFZLEtBQUssRUFBRTtVQUNuQixTQUFTLEtBQUssRUFBRTtVQUNoQixxQkFBcUI7U0FDdEI7UUFDRCxHQUFHLE1BQU0sV0FBVztPQUNyQixDQUFDO01BQ0YsT0FBTztRQUNMLEtBQUssTUFBTSxJQUFJO1FBQ2YsS0FBSyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtVQUN6QixpQkFBaUI7WUFDZixRQUFRLFVBQVU7WUFDbEIscUJBQXFCLE1BQU07WUFDM0IsaUJBQWlCLE1BQU07V0FDeEI7U0FDRixDQUFDLENBQUM7UUFDSCxZQUFZO1VBQ1YsR0FBRyxpQkFBaUI7VUFDcEIsR0FBRyxPQUFPLENBQUMsTUFBTSxvQkFBb0IsRUFBRSxVQUFVLENBQUM7U0FDbkQ7UUFDRCxVQUFVO09BQ1gsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxXQUFXLFVBQVUsQ0FBQztNQUMxQixRQUFRLENBQUMsVUFBVSxDQUFDO01BQ3BCLFVBQVUsQ0FBQyxPQUFPLENBQUM7TUFDbkIsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDeEIsU0FBUyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUM7TUFDL0IsU0FBUyxDQUFDLFFBQVEsQ0FBQztNQUNuQixTQUFTLENBQUMsWUFBWSxFQUFFLFFBQVEsS0FBSyxDQUFDO01BQ3RDLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDL0MsU0FBUyxDQUFDLFNBQVMsRUFBRSxRQUFRLEtBQUssRUFBRSxDQUFDO01BQ3JDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO01BQzNCLGNBQWMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFO1FBQzFCLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLFFBQVEsS0FBSyxLQUFLLFNBQVMsSUFBSSxRQUFRLEtBQUssS0FBSyxLQUFLLFNBQVMsR0FBRyxRQUFRLEtBQUssS0FBSyxHQUFHLFFBQVEsTUFBTSxDQUFDO1FBQzlJLFNBQVMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDO1FBQzlCLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUM7T0FDdEMsQ0FBQztNQUNGLFNBQVMsQ0FBQyxZQUFZLENBQUM7TUFDdkIsaUJBQWlCLENBQUMsV0FBVyxDQUFDO01BQzlCLFNBQVMsQ0FBQyxlQUFlLENBQUM7TUFDMUIsU0FBUyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7TUFDN0IsU0FBUyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztNQUNoQyxTQUFTLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztNQUM1QixTQUFTLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztNQUM3QixTQUFTLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQztNQUMvQixTQUFTLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQztNQUNoQyxTQUFTLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztNQUN4QixRQUFRLENBQUMsYUFBYSxDQUFDO01BQ3ZCLEtBQUssQ0FBQyxxQkFBcUIsRUFBRTtRQUMzQixRQUFRO1FBQ1IsWUFBWTtRQUNaLFNBQVM7UUFDVCxNQUFNO1FBQ04sUUFBUTtRQUNSLFFBQVE7T0FDVCxDQUFDO01BQ0YsV0FBVyxDQUFDLG1CQUFtQixFQUFFLE1BQU0sSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUM7TUFDM0QsV0FBVyxDQUFDLFlBQVksRUFBRSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM1QyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5QyxNQUFNLFVBQVUsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQ2pDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzdCLE1BQU0sTUFBTTtRQUNaLFdBQVcsVUFBVTtVQUNuQixPQUFPO1lBQ0wsV0FBVyxJQUFJO1lBQ2YsaUJBQWlCLHdCQUF3QjtjQUN2QyxJQUFJLENBQUMsTUFBTSxXQUFXLElBQUksRUFBRSxFQUFFO2dCQUM1QixNQUFNLGtCQUFrQixJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVM7a0JBQzNDLElBQUksTUFBTSxNQUFNLG1CQUFtQixFQUFFO29CQUNuQyxnQkFBZ0IsQ0FBQyxNQUFNLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7bUJBQzdDO2tCQUNELE1BQU0sQ0FBQyxJQUFJLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEtBQUssUUFBUSxFQUFFLHVCQUF1QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQzFGLENBQUMsQ0FBQztlQUNKLE1BQU07Z0JBQ0wsTUFBTSxrQkFBa0IsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTO2tCQUMzQyxpQkFBaUIsQ0FBQyxNQUFNLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO29CQUN0RCxJQUFJLE1BQU0sTUFBTSxZQUFZLEVBQUU7c0JBQzVCLFlBQVksWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztzQkFDckMsTUFBTSxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDN0IsTUFBTTtzQkFDTCxNQUFNLFdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUM5QjttQkFDRixFQUFFLHlCQUF5QjtvQkFDMUIscUJBQXFCLEVBQUUsQ0FBQztvQkFDeEIsTUFBTSxXQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzttQkFDOUIsQ0FBQyxDQUFDO2lCQUNKLENBQUMsQ0FBQztlQUNKO2FBQ0Y7WUFDRCxXQUFXLGlCQUFpQjtjQUMxQixPQUFPLE1BQU0sa0JBQWtCLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYTtnQkFDckQsUUFBUSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQzdDLE9BQU8sSUFBSSxDQUFDO2VBQ2IsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxTQUFTLGdCQUFnQjtjQUN2QixNQUFNLFdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2NBQzdCLE1BQU0sa0JBQWtCLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUztnQkFDM0MsSUFBSSxNQUFNLE1BQU0sbUJBQW1CLEVBQUU7a0JBQ25DLGdCQUFnQixDQUFDLE1BQU0sTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDN0M7ZUFDRixDQUFDLENBQUM7YUFDSjtXQUNGLENBQUM7U0FDSDtPQUNGLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRVAsTUFBTSxZQUFZLFNBQVMsQ0FBQztNQUMxQixNQUFNLFdBQVc7TUFDakIsY0FBYyxRQUFRLEVBQUU7TUFDeEIsWUFBWSxPQUFPLEVBQUU7TUFDckIsU0FBUyxNQUFNO0tBQ2hCLENBQUMsQ0FBQzs7SUFFSCxNQUFNLE9BQU8sWUFBWTtNQUN2QixNQUFNLFdBQVcsTUFBTTtRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLFNBQVMsRUFBRSxDQUFDLENBQUM7T0FDbEMsQ0FBQztNQUNGLE1BQU0sYUFBYSxLQUFLO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxNQUFNLEtBQUssQ0FBQyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ2pHLENBQUM7TUFDRixNQUFNLGFBQWEsS0FBSztRQUN0QixPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUNqRCxDQUFDO01BQ0YsTUFBTSxZQUFZLEtBQUs7UUFDckIsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDaEQsQ0FBQztNQUNGLE1BQU0sV0FBVyxLQUFLO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ3JELENBQUM7TUFDRixNQUFNLGFBQWEsMEJBQTBCO1FBQzNDLE9BQU8sUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztPQUM1RCxDQUFDO01BQ0YsTUFBTSxjQUFjLHlCQUF5QjtRQUMzQyxPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxZQUFZO1VBQ2hDLElBQUksV0FBVyxLQUFLLENBQUM7VUFDckIsTUFBTSxRQUFRLFVBQVUsQ0FBQyxNQUFNO1lBQzdCLFdBQVcsSUFBSSxDQUFDO1lBQ2hCLFFBQVEsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7V0FDdEMsRUFBRSxPQUFPLENBQUMsQ0FBQztVQUNaLFFBQVEsSUFBSSxDQUFDLFVBQVU7WUFDckIsSUFBSSxDQUFDLFFBQVEsRUFBRTtjQUNiLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztjQUNwQixRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDbEI7V0FDRixDQUFDLENBQUM7U0FDSixDQUFDLENBQUMsQ0FBQztPQUNMLENBQUM7TUFDRixPQUFPO1FBQ0wsR0FBRyxRQUFRO1FBQ1gsUUFBUTtRQUNSLFVBQVU7UUFDVixVQUFVO1FBQ1YsU0FBUztRQUNULFFBQVE7UUFDUixVQUFVO1FBQ1YsV0FBVztPQUNaLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxPQUFPLFVBQVU7TUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUNoQyxDQUFDO0lBQ0YsTUFBTSxRQUFRLFNBQVM7TUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQy9DLENBQUM7SUFDRixNQUFNLFFBQVEsU0FBUztNQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDL0MsQ0FBQztJQUNGLE1BQU0sYUFBYSxVQUFVO01BQzNCLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDbEMsQ0FBQztJQUNGLE1BQU0sYUFBYSxVQUFVO01BQzNCLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQztLQUN2QyxDQUFDO0lBQ0YsTUFBTSxjQUFjLFdBQVc7TUFDN0IsT0FBTyxJQUFJLENBQUMsYUFBYTtRQUN2QixPQUFPLEtBQUssQ0FBQyxTQUFTO1VBQ3BCLFNBQVMsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ2hDLEVBQUUsU0FBUztVQUNWLFNBQVMsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ2hDLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGVBQWU7TUFDbkIsSUFBSSxJQUFJO01BQ1IsSUFBSTtNQUNKLE1BQU0sS0FBSztNQUNYLEtBQUs7TUFDTCxLQUFLO01BQ0wsVUFBVTtNQUNWLFVBQVU7TUFDVixXQUFXO0tBQ1osQ0FBQzs7SUFFRixNQUFNLG1CQUFtQixrQkFBa0Isa0JBQWtCLEVBQUUsMENBQTBDO01BQ3ZHLE1BQU0sU0FBUyxTQUFTLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDbEUsTUFBTSxTQUFTO1FBQ2Isa0JBQWtCLFFBQVEsQ0FBQztVQUN6QixnQkFBZ0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFFBQVEsSUFBSSxrQkFBa0IsV0FBVyxFQUFFLENBQUM7VUFDL0UsZUFBZSxFQUFFO1VBQ2pCLFdBQVcsT0FBTyxDQUFDLEVBQUUsQ0FBQztVQUN0QixNQUFNLENBQUMsY0FBYyxFQUFFO1lBQ3JCLGNBQWMsQ0FBQyxPQUFPLENBQUM7WUFDdkIsY0FBYyxDQUFDLFdBQVcsQ0FBQztXQUM1QixDQUFDO1NBQ0gsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFCLFlBQVk7VUFDVixPQUFPO1lBQ0wsY0FBYztZQUNkLHNCQUFzQjtXQUN2QjtVQUNELFdBQVc7WUFDVCxjQUFjO1lBQ2Qsc0JBQXNCO1dBQ3ZCO1NBQ0Y7UUFDRCxHQUFHLE1BQU07T0FDVixDQUFDO01BQ0YsTUFBTSxXQUFXLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO01BQzVDLE9BQU8sU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7S0FDNUMsQ0FBQztJQUNGLE1BQU0sdUJBQXVCLG1DQUFtQyxrQkFBa0IsRUFBRSxLQUFLO01BQ3ZGLE1BQU0sb0JBQW9CLElBQUksUUFBUSxJQUFJLENBQUMsWUFBWTtRQUNyRCxjQUFjLGtCQUFrQixVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ25ELFNBQVMsa0JBQWtCLFVBQVUsQ0FBQyxPQUFPLENBQUM7T0FDL0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUNkLE1BQU0sTUFBTTtRQUNWLEtBQUssUUFBUTtRQUNiLFNBQVMsQ0FBQyxVQUFVLENBQUM7UUFDckIsWUFBWSxpQkFBaUI7T0FDOUIsQ0FBQztNQUNGLE1BQU0sT0FBTyxJQUFJLEtBQUssSUFBSSxDQUFDLFlBQVksb0JBQW9CLENBQUMsUUFBUSxFQUFFLGtCQUFrQixNQUFNLENBQUMsQ0FBQyxDQUFDO01BQ2pHLE1BQU0sYUFBYSx1QkFBdUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDbkQsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixDQUFDLENBQUM7S0FDN0YsQ0FBQztJQUNGLE1BQU0saUNBQWlDLGNBQWM7TUFDbkQsUUFBUSxVQUFVO1dBQ2IsU0FBUztRQUNaLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztXQUNuQixTQUFTO1FBQ1osT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1dBQ2pCLFdBQVc7O1FBRWQsT0FBTztVQUNMLFlBQVk7VUFDWix1QkFBdUI7U0FDeEIsQ0FBQztPQUNIO0tBQ0YsQ0FBQztJQUNGLE1BQU0sbUJBQW1CLG1DQUFtQyxrQkFBa0IsRUFBRSxFQUFFLGVBQWUsRUFBRSxLQUFLO01BQ3RHLE1BQU0saUJBQWlCLGtCQUFrQixVQUFVLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztNQUMvRCxNQUFNLE9BQU8sSUFBSSxLQUFLLElBQUksQ0FBQyxZQUFZLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxrQkFBa0IsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUNqRyxNQUFNLGFBQWEsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDbkUsTUFBTSxhQUFhLElBQUksV0FBVyxNQUFNLENBQUMsQ0FBQyxJQUFJLFFBQVEsSUFBSSxDQUFDLElBQUksV0FBVyxHQUFHLFdBQVcsR0FBRyxTQUFTLENBQUMsQ0FBQztNQUN0RyxNQUFNLGNBQWMsOEJBQThCLENBQUMsVUFBVSxDQUFDLENBQUM7TUFDL0QsTUFBTSxVQUFVO1FBQ2QsR0FBRyxXQUFXO1FBQ2QsR0FBRyxJQUFJLE9BQU8sRUFBRSxHQUFHLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFO1FBQzVDLEdBQUcsSUFBSSxXQUFXLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUU7UUFDL0MsR0FBRyxZQUFZO09BQ2hCLENBQUM7TUFDRixNQUFNLE1BQU07UUFDVixLQUFLLFFBQVE7UUFDYixPQUFPO1FBQ1AsWUFBWSxFQUFFLE9BQU8sY0FBYyxFQUFFO09BQ3RDLENBQUM7TUFDRixPQUFPLGdCQUFnQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztLQUM3RixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsbUNBQW1DLGtCQUFrQixFQUFFLEVBQUUsZUFBZSxFQUFFLEtBQUs7TUFDcEcsTUFBTSxhQUFhLGdCQUFnQixDQUFDLElBQUksRUFBRSxRQUFRLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQUM7TUFDcEgsT0FBTyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUNsQyxDQUFDO0lBQ0YsTUFBTSxZQUFZLHNCQUFzQixRQUFRO01BQzlDLElBQUksVUFBVSxLQUFLLFFBQVEsRUFBRTtRQUMzQixRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRTtVQUM5QixJQUFJO1VBQ0osT0FBTyxFQUFFO1NBQ1YsQ0FBQyxDQUFDO09BQ0osTUFBTSxJQUFJLFVBQVUsS0FBSyxRQUFRLEVBQUU7UUFDbEMsSUFBSSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztPQUM3QixNQUFNLElBQUksVUFBVSxLQUFLLFFBQVEsRUFBRTtRQUNsQyxJQUFJLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO09BQzdCLE1BQU07UUFDTCxPQUFPLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxVQUFVLENBQUMsQ0FBQztPQUNwRDtLQUNGLENBQUM7SUFDRixNQUFNLHlCQUF5QixzQkFBc0IsVUFBVSxLQUFLLE1BQU0sQ0FBQztJQUMzRSxNQUFNLDJCQUEyQixzQkFBc0IsVUFBVSxLQUFLLFFBQVEsSUFBSSxVQUFVLEtBQUssUUFBUSxJQUFJLFVBQVUsS0FBSyxRQUFRLENBQUM7SUFDckksTUFBTSxxQkFBcUIsc0JBQXNCLFVBQVUsS0FBSyxjQUFjLENBQUM7SUFDL0UsTUFBTSxxQkFBcUIscUJBQXFCO01BQzlDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztNQUNYLE1BQU0sYUFBYSxJQUFJLEtBQUssSUFBSSxDQUFDLFdBQVcsNkJBQTZCLENBQUMsT0FBTyxFQUFFLFNBQVMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ2pILE1BQU0sU0FBUyxRQUFRO1FBQ3JCLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFO1VBQzlCLE1BQU0sSUFBSSxLQUFLO1VBQ2YsT0FBTztZQUNMLFNBQVMsV0FBVztjQUNsQixVQUFVLElBQUksQ0FBQyxXQUFXLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZTtnQkFDakUsU0FBUyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsNkJBQTZCLENBQUMsT0FBTyxFQUFFLFNBQVMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2VBQ3ZGLENBQUMsQ0FBQyxDQUFDO2FBQ0w7V0FDRjtTQUNGLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLGFBQWEsSUFBSSxXQUFXLE1BQU0sQ0FBQyxDQUFDLElBQUksUUFBUSxHQUFHLFdBQVcsR0FBRyxTQUFTLENBQUMsQ0FBQztNQUNsRixNQUFNLGFBQWE7UUFDakIsR0FBRyxJQUFJO1FBQ1AsTUFBTSxDQUFDLEtBQUssSUFBSSxLQUFLLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUMxRCxTQUFTLFVBQVUsS0FBSyxTQUFTO1FBQ2pDLFNBQVMsUUFBUSxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUM7UUFDcEMsU0FBUyxDQUFDLEtBQUssSUFBSSxRQUFRLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSztRQUNuRSxZQUFZLEtBQUs7T0FDbEIsQ0FBQztNQUNGLE1BQU0sb0JBQW9CLFVBQVUsUUFBUSxJQUFJLENBQUMsWUFBWTtRQUMzRCxjQUFjLFNBQVMsVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUMxQyxTQUFTLFNBQVMsVUFBVSxDQUFDLE9BQU8sQ0FBQztPQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQ2QsTUFBTSxvQkFBb0IsOEJBQThCLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsVUFBVSxHQUFHLFdBQVcsQ0FBQyxDQUFDO01BQ2xJLE1BQU0sa0JBQWtCLElBQUksS0FBSyxPQUFPLEVBQUUsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7TUFDakUsTUFBTSxNQUFNO1FBQ1YsS0FBSyxRQUFRO1FBQ2IsU0FBUztVQUNQLEdBQUcsaUJBQWlCLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztVQUMzRSxHQUFHLElBQUksT0FBTyxHQUFHLENBQUMscUJBQXFCLENBQUMsR0FBRyxFQUFFO1VBQzdDLEdBQUcsZUFBZSxHQUFHLENBQUMsMkJBQTJCLENBQUMsR0FBRyxFQUFFO1NBQ3hEO1FBQ0QsWUFBWSxpQkFBaUI7T0FDOUIsQ0FBQztNQUNGLE1BQU0sa0JBQWtCLEVBQUUsQ0FBQztNQUMzQixNQUFNLGlCQUFpQixTQUFTLFVBQVUsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDaEUsTUFBTSx5QkFBeUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO01BQ3RELE1BQU0sV0FBVyx1QkFBdUIsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLFdBQVcsT0FBTyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUN4RixNQUFNLGFBQWE7UUFDakIsR0FBRyxRQUFRO1FBQ1gsR0FBRyxJQUFJLEtBQUssT0FBTyxFQUFFLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUU7T0FDdEQsQ0FBQztNQUNGLE1BQU0saUJBQWlCLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxRQUFRLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztNQUN4SCxPQUFPLE1BQU0sT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0tBQ3RDLENBQUM7SUFDRixNQUFNLHFCQUFxQixpQ0FBaUM7TUFDMUQsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUU7UUFDNUMsTUFBTSxZQUFZLE1BQU0sU0FBUyxDQUFDO1FBQ2xDLE1BQU0saUJBQWlCLElBQUksQ0FBQztRQUM1QixNQUFNLFlBQVk7VUFDaEIsR0FBRyxJQUFJO1VBQ1AsTUFBTSxZQUFZO1VBQ2xCLFFBQVEsUUFBUSxLQUFLLEVBQUU7VUFDdkIsU0FBUyxPQUFPO1lBQ2QsR0FBRyxXQUFXLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQztXQUNiO1VBQ0QsT0FBTyxRQUFRLENBQUMsY0FBYyxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQztTQUM1RCxDQUFDO1FBQ0YsTUFBTSxZQUFZLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5RixPQUFPLFNBQVMsT0FBTyxFQUFFLENBQUM7T0FDM0IsTUFBTSxJQUFJLHdCQUF3QixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsRUFBRTtRQUNyRCxNQUFNLFNBQVMsU0FBUyxDQUFDLElBQUksS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sYUFBYTtVQUNqQixHQUFHLElBQUk7VUFDUCxZQUFZLEtBQUs7U0FDbEIsQ0FBQztRQUNGLE9BQU8sY0FBYyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxPQUFPLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztPQUMzRSxNQUFNLElBQUksa0JBQWtCLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQy9DLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxFQUFFLFNBQVMsT0FBTyxVQUFVLENBQUMsQ0FBQztPQUM3RCxNQUFNO1FBQ0wsT0FBTyxNQUFNLENBQUMsOEJBQThCLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDMUQsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO09BQy9DO0tBQ0YsQ0FBQztJQUNGLE1BQU0scUJBQXFCLDhCQUE4QjtNQUN2RCxNQUFNLFNBQVMsU0FBUyxDQUFDLElBQUksS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQzlDLE9BQU8sZUFBZSxDQUFDLFFBQVEsS0FBSyxFQUFFLEVBQUUsU0FBUyxNQUFNLE1BQU0sQ0FBQztRQUM1RCxTQUFTLE1BQU07UUFDZixHQUFHLGdCQUFnQixDQUFDLElBQUksRUFBRSxRQUFRLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxrQkFBa0IsRUFBRTtVQUNuRSxNQUFNLENBQUMsRUFBRSxDQUFDO1VBQ1YsZ0JBQWdCLEtBQUssRUFBRTtTQUN4QixDQUFDO09BQ0gsQ0FBQyxDQUFDLENBQUM7S0FDTCxDQUFDOztJQUVGLE1BQU0sY0FBYyxFQUFFLE1BQU0sV0FBVyxFQUFFLENBQUM7SUFDMUMsTUFBTSxhQUFhLFdBQVc7TUFDNUIsTUFBTSxVQUFVO01BQ2hCLE9BQU8sTUFBTSxJQUFJO01BQ2pCLE1BQU0sTUFBTSxNQUFNO01BQ2xCLE1BQU0sRUFBRSxRQUFRLE1BQU0sT0FBTyxFQUFFO01BQy9CLFVBQVUsSUFBSTtLQUNmLENBQUMsQ0FBQztJQUNILE1BQU0saUJBQWlCLGlCQUFpQjtNQUN0QyxNQUFNLFVBQVU7TUFDaEIsT0FBTyxHQUFHO01BQ1YsTUFBTSxLQUFLO01BQ1gsTUFBTSxFQUFFLFFBQVEsU0FBUyxFQUFFO01BQzNCLFVBQVUsSUFBSTtLQUNmLENBQUMsQ0FBQztJQUNILE1BQU0sY0FBYyxXQUFXLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDMUQsTUFBTSxvQkFBb0IsbUJBQW1CLFFBQVEsQ0FBQyxPQUFPLEVBQUUsVUFBVSxNQUFNLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQztJQUMvRixNQUFNLGtCQUFrQixtQkFBbUIsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLE1BQU0sZ0JBQWdCLFlBQVksZUFBZSxDQUFDLFFBQVEsRUFBRSxRQUFRLFFBQVEsQ0FBQyxDQUFDO0lBQzlFLE1BQU0sZ0JBQWdCLFlBQVksZUFBZSxDQUFDLFFBQVEsRUFBRSxRQUFRLFFBQVEsQ0FBQyxDQUFDO0lBQzlFLE1BQU0sa0JBQWtCLFlBQVksUUFBUSxLQUFLLENBQUMsUUFBUSxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sY0FBYyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6SCxNQUFNLHFCQUFxQixZQUFZLFFBQVEsS0FBSyxDQUFDLFFBQVEsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLGNBQWMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEksTUFBTSxpQkFBaUIsV0FBVyxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLE1BQU0sZ0JBQWdCLFNBQVM7TUFDN0IsT0FBTyxLQUFLLENBQUMsS0FBSyxFQUFFLFVBQVU7UUFDNUIsTUFBTSxZQUFZLENBQUMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUM7UUFDbkQsT0FBTyxTQUFTLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQzNELEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDUixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IscUJBQXFCO01BQ3pDLE1BQU0sZ0JBQWdCLElBQUksWUFBWSxFQUFFLENBQUM7TUFDekMsT0FBTyxRQUFRLENBQUMsU0FBUyxFQUFFLFFBQVE7UUFDakMsSUFBSSxFQUFFLENBQUM7UUFDUCxNQUFNLE9BQU8sSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssU0FBUyxHQUFHLElBQUksS0FBSyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUM7UUFDbEcsTUFBTSxRQUFRLENBQUMsS0FBSyxJQUFJLE1BQU0sTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDcEUsT0FBTyxVQUFVLENBQUMsSUFBSSxZQUFZLEVBQUUsRUFBRSxhQUFhLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxZQUFZLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztPQUN4RyxDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sV0FBVyxtQ0FBbUM7TUFDbEQsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO01BQ1gsTUFBTSxnQkFBZ0IsWUFBWSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDbkQsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssYUFBYSxLQUFLLElBQUksSUFBSSxhQUFhLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsYUFBYSxLQUFLLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxhQUFhLE1BQU0sQ0FBQztNQUM5TSxNQUFNLE9BQU8sWUFBWSxtQkFBbUIsRUFBRSxDQUFDO01BQy9DLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsWUFBWTtRQUNyQyxNQUFNLFVBQVUsYUFBYSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsWUFBWSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZGLE9BQU8sUUFBUSxLQUFLLE1BQU0sR0FBRyxhQUFhLENBQUM7VUFDekMsT0FBTztVQUNQLGFBQWEsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1VBQzVDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO1lBQzFCLGVBQWUsQ0FBQyxRQUFRLENBQUM7WUFDekIsYUFBYSxDQUFDLFFBQVEsQ0FBQztZQUN2QixrQkFBa0IsQ0FBQyxRQUFRLENBQUM7V0FDN0IsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxHQUFHLE9BQU8sQ0FBQztPQUNkLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFVBQVUsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzNDLE1BQU0saUJBQWlCLGdEQUFnRDtNQUNyRSxNQUFNLHFCQUFxQixTQUFTLE9BQU8sVUFBVSxDQUFDO01BQ3RELE1BQU0sZ0JBQWdCLGFBQWE7UUFDakMsTUFBTSxXQUFXLFlBQVksU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xELFlBQVksYUFBYSxDQUFDLFFBQVEsTUFBTSxFQUFFLElBQUksU0FBUyxDQUFDLENBQUM7T0FDMUQsQ0FBQztNQUNGLE1BQU0sZ0JBQWdCO1FBQ3BCLEdBQUcsV0FBVyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzlELGVBQWUsSUFBSTtRQUNuQixjQUFjLENBQUMsZUFBZSxDQUFDO1FBQy9CLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDO1FBQ3RDLGlCQUFpQjtVQUNmLHFCQUFxQixPQUFPO1VBQzVCLFFBQVEsS0FBSztTQUNkO1FBQ0QsVUFBVSxDQUFDO1FBQ1gsY0FBYyxDQUFDO1FBQ2YsT0FBTyxTQUFTO1VBQ2QsTUFBTSxRQUFRLFFBQVEsQ0FBQyxJQUFJLFNBQVMsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7VUFDM0QsTUFBTSxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsY0FBYyxrQkFBa0IsRUFBRSxTQUFTLEVBQUU7WUFDdEUsa0JBQWtCLEtBQUs7WUFDdkIsUUFBUSxRQUFRLEtBQUssRUFBRTtXQUN4QixDQUFDLENBQUM7VUFDSCxPQUFPLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzNCO1FBQ0QsWUFBWSxRQUFRLFNBQVMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUMxQyxZQUFZLHFCQUFxQjtVQUMvQixJQUFJLElBQUksY0FBYyxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ3BDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDbEM7U0FDRjtRQUNELHFCQUFxQixRQUFRLENBQUM7VUFDNUIsR0FBRyxZQUFZLHFCQUFxQixFQUFFLElBQUksQ0FBQyxXQUFXLFlBQVksT0FBTyxDQUFDO1lBQ3hFLFNBQVMsUUFBUSxhQUFhLENBQUMsSUFBSSxRQUFRLENBQUM7WUFDNUMsY0FBYyxrQ0FBa0M7WUFDaEQsUUFBUTtjQUNOLFdBQVcsZUFBZTtnQkFDeEIsY0FBYyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlO2tCQUM5QyxLQUFLLENBQUMsV0FBVyxRQUFRLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFDeEUsQ0FBQyxDQUFDO2VBQ0o7YUFDRjtZQUNELFdBQVc7Y0FDVCxVQUFVLFNBQVM7Z0JBQ2pCLE1BQU0sV0FBVyxZQUFZLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUMsT0FBTyxZQUFZLEdBQUcsQ0FBQyxhQUFhO2tCQUNsQyxPQUFPLENBQUM7b0JBQ04sTUFBTSxJQUFJLFNBQVM7b0JBQ25CLEtBQUssUUFBUSxNQUFNO21CQUNwQixFQUFFLGNBQWM7b0JBQ2YsSUFBSSxVQUFVLE9BQU8sS0FBSyxTQUFTLEVBQUU7c0JBQ25DLE1BQU0sTUFBTSxNQUFNLE1BQU0sQ0FBQyxVQUFVLFFBQVEsQ0FBQyxDQUFDO3NCQUM3QyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ2hCLE1BQU07c0JBQ0wsTUFBTSxNQUFNLE1BQU0sTUFBTSxDQUFDLFVBQVUsUUFBUSxDQUFDLENBQUM7c0JBQzdDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDaEI7bUJBQ0YsQ0FBQyxDQUFDO2lCQUNKLENBQUMsQ0FBQztlQUNKO2NBQ0QsZ0JBQWdCLEtBQUs7YUFDdEI7V0FDRixDQUFDLENBQUMsUUFBUSxFQUFFO1VBQ2IsU0FBUyxPQUFPLENBQUMsRUFBRSxVQUFVLE1BQU0sQ0FBQyxJQUFJLFFBQVEsSUFBSSxrQkFBa0IsV0FBVyxFQUFFLEVBQUUsQ0FBQztVQUN0RixXQUFXLE9BQU8sQ0FBQyxFQUFFLENBQUM7VUFDdEIsTUFBTSxDQUFDLGlCQUFpQixFQUFFO1lBQ3hCLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxRQUFRO2NBQ3JCLE1BQU0sZUFBZSxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQztjQUN6QyxNQUFNLGVBQWUsWUFBWSxLQUFLLEVBQUUsQ0FBQztjQUN6QyxJQUFJLFlBQVksS0FBSyxZQUFZLEVBQUU7Z0JBQ2pDLEtBQUssQ0FBQyxJQUFJLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztlQUNuQztjQUNELElBQUksSUFBSSxTQUFTLEtBQUssTUFBTSxFQUFFO2dCQUM1QixRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLE1BQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2VBQ3REO2FBQ0YsQ0FBQztZQUNGLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRO2NBQ3RCLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsTUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7Y0FDckQsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3JCLENBQUM7WUFDRixLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsUUFBUTtjQUN6QixRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLE1BQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2NBQ3JELGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyQixDQUFDO1dBQ0gsQ0FBQztTQUNILENBQUM7UUFDRixZQUFZO1VBQ1YsQ0FBQyxLQUFLLEVBQUUsR0FBRztZQUNULFdBQVc7WUFDWCxpQkFBaUI7WUFDakIsY0FBYztXQUNmO1NBQ0Y7UUFDRCxPQUFPO1VBQ0wsZ0JBQWdCLFlBQVksUUFBUSxNQUFNO1VBQzFDLGFBQWEsS0FBSztVQUNsQixvQkFBb0IsS0FBSztTQUMxQjtRQUNELFNBQVMsRUFBRSxXQUFXLDJCQUEyQixFQUFFO1FBQ25ELFVBQVUsU0FBUyxPQUFPLFFBQVE7UUFDbEMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUU7UUFDekMsV0FBVyw4QkFBOEI7VUFDdkMsUUFBUSxDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDMUM7UUFDRCxlQUFlLHdDQUF3QztVQUNyRCxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7VUFDekIsUUFBUSxDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsRUFBRSxNQUFNLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQztTQUMzRDtPQUNGLENBQUM7TUFDRixNQUFNLFNBQVMsU0FBUyxNQUFNLE1BQU0sQ0FBQztRQUNuQyxHQUFHLGFBQWE7UUFDaEIsU0FBUyxTQUFTO09BQ25CLENBQUMsQ0FBQztNQUNILE1BQU0sU0FBUyxJQUFJLE1BQU0sSUFBSSxDQUFDLFNBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7TUFDakYsTUFBTSxXQUFXLGNBQWMsT0FBTyxJQUFJLEVBQUUsUUFBUSxJQUFJLEtBQUssUUFBUSxDQUFDLElBQUksRUFBRTtRQUMxRSxLQUFLLEtBQUs7UUFDVixTQUFTO1VBQ1AsVUFBVTtVQUNWLGdDQUFnQyxHQUFHLElBQUk7U0FDeEM7UUFDRCxZQUFZO1VBQ1YsU0FBUyxrQkFBa0IsVUFBVSxDQUFDLEtBQUssQ0FBQztVQUM1QyxhQUFhLFFBQVE7VUFDckIsR0FBRyxLQUFLLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzFDO09BQ0YsRUFBRSxrQkFBa0IsTUFBTSxDQUFDLENBQUM7TUFDN0IsTUFBTSxpQkFBaUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsUUFBUSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztNQUN0RixNQUFNLFlBQVksTUFBTSxDQUFDO1FBQ3ZCLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMsb0NBQW9DLENBQUM7U0FDaEQ7UUFDRCxZQUFZLENBQUMsY0FBYyxPQUFPLEVBQUUsQ0FBQztPQUN0QyxDQUFDLENBQUM7TUFDSCxNQUFNLGVBQWUsWUFBWSxhQUFhLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQztNQUM5RCxNQUFNLGlCQUFpQixVQUFVLENBQUMsbUJBQW1CLENBQUMsQ0FBQztNQUN2RCxNQUFNLFlBQVksTUFBTSxDQUFDO1FBQ3ZCLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMsa0JBQWtCLENBQUM7U0FDOUI7UUFDRCxZQUFZO1VBQ1YsTUFBTTtVQUNOLFNBQVMsT0FBTyxFQUFFO1NBQ25CO1FBQ0QsWUFBWSxRQUFRLENBQUMsQ0FBQyxTQUFTLE9BQU8sQ0FBQyxFQUFFLFVBQVUsTUFBTSxDQUFDLElBQUksUUFBUSxJQUFJLGtCQUFrQixXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUMvRyxDQUFDLENBQUM7TUFDSCxNQUFNLHFCQUFxQixNQUFNLENBQUMsY0FBYyxDQUFDO1FBQy9DLE1BQU0sSUFBSSxLQUFLO1FBQ2YsTUFBTSxRQUFRLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDN0IsTUFBTSxJQUFJLE1BQU0sTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMxQixTQUFTLElBQUksUUFBUTtRQUNyQixTQUFTLEtBQUs7UUFDZCxZQUFZLFFBQVEsS0FBSyxFQUFFO1FBQzNCLFlBQVksSUFBSTtPQUNqQixFQUFFLGFBQWEsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUM5RixNQUFNLGtCQUFrQixPQUFPO1FBQzdCLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMsNEJBQTRCLENBQUM7U0FDeEM7UUFDRCxZQUFZLE9BQU8sQ0FBQztVQUNsQixDQUFDLFNBQVMsT0FBTyxFQUFFLENBQUM7VUFDcEIsWUFBWSxJQUFJLENBQUMsTUFBTSxrQkFBa0IsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO1NBQzlELENBQUM7T0FDSCxDQUFDLENBQUM7TUFDSCxNQUFNLGdCQUFnQixRQUFRO1FBQzVCLFNBQVMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUztVQUN2QyxNQUFNLGdCQUFnQixZQUFZLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztVQUNuRCxNQUFNLFVBQVU7WUFDZCxXQUFXLElBQUksS0FBSztZQUNwQixHQUFHLGFBQWE7V0FDakIsQ0FBQztVQUNGLFlBQVksS0FBSyxDQUFDLFVBQVU7WUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYztjQUNoQyxZQUFZLFNBQVMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7Y0FDekMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxNQUFNLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQzthQUN0RCxDQUFDLENBQUM7V0FDSixDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsT0FBTyxTQUFTLE9BQU8sQ0FBQztRQUN0QixLQUFLLGtCQUFrQixFQUFFO1FBQ3pCLFlBQVksTUFBTSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUN4RCxpQkFBaUIsUUFBUSxDQUFDO1VBQ3hCLFNBQVMsT0FBTyxDQUFDO1lBQ2YsVUFBVSxNQUFNLENBQUMsSUFBSSxRQUFRLElBQUksa0JBQWtCLFdBQVcsRUFBRTtZQUNoRSxZQUFZLFFBQVE7Y0FDbEIsU0FBUyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLFFBQVEsQ0FBQyxDQUFDO2NBQ2pELGtCQUFrQixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLFFBQVEsQ0FBQyxDQUFDO2FBQ3pEO1lBQ0QsV0FBVyxRQUFRO2NBQ2pCLFNBQVMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxPQUFPLENBQUMsQ0FBQztjQUNoRCxrQkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxPQUFPLENBQUMsQ0FBQzthQUN4RDtXQUNGLENBQUM7VUFDRixlQUFlLEVBQUU7VUFDakIsTUFBTSxDQUFDLGtCQUFrQixFQUFFLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO1NBQ25FLENBQUM7T0FDSCxDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sb0JBQW9CLDhCQUE4QjtNQUN0RCxNQUFNLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxFQUFFLGtCQUFrQixNQUFNLENBQUMsQ0FBQztNQUN4RCxPQUFPLFNBQVMsT0FBTyxDQUFDO1FBQ3RCLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixZQUFZLEVBQUUsTUFBTSxPQUFPLEVBQUU7VUFDN0IsU0FBUztZQUNQLGtCQUFrQjtZQUNsQixzQkFBc0I7WUFDdEIsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO1dBQ3BDO1NBQ0Y7UUFDRCxZQUFZO1VBQ1Y7WUFDRSxLQUFLO2NBQ0gsS0FBSyxLQUFLO2NBQ1YsU0FBUyxDQUFDLHdCQUF3QixDQUFDO2NBQ25DLFdBQVcsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsU0FBUzthQUN4QztZQUNELFlBQVksSUFBSSxJQUFJLEdBQUcsQ0FBQyxNQUFNLE9BQU8sQ0FBQztnQkFDbEMsS0FBSztrQkFDSCxLQUFLLFFBQVE7a0JBQ2IsU0FBUztvQkFDUCxZQUFZO29CQUNaLG1CQUFtQjtvQkFDbkIsa0JBQWtCO21CQUNuQjtrQkFDRCxXQUFXLElBQUk7a0JBQ2YsWUFBWSxFQUFFLE9BQU8sa0JBQWtCLFVBQVUsQ0FBQyxJQUFJLFlBQVksQ0FBQyxFQUFFO2lCQUN0RTtnQkFDRCxRQUFRLFFBQVEsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7a0JBQzlDLE1BQU0sY0FBYztrQkFDcEIsT0FBTyxJQUFJLElBQUk7aUJBQ2hCLENBQUM7Z0JBQ0Ysa0JBQWtCLFFBQVEsQ0FBQyxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztlQUN0RCxDQUFDLENBQUMsR0FBRyxTQUFTO1dBQ2xCO1VBQ0Q7WUFDRSxLQUFLO2NBQ0gsS0FBSyxLQUFLO2NBQ1YsU0FBUyxDQUFDLHdCQUF3QixDQUFDO2NBQ25DLFdBQVcsa0JBQWtCLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQzthQUNuRDtXQUNGO1NBQ0Y7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sUUFBUSxxQkFBcUI7TUFDakMsT0FBTyxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUM7S0FDOUIsQ0FBQztJQUNGLE1BQU0sUUFBUSxXQUFXLE9BQU8sSUFBSSxRQUFRLENBQUM7O0lBRTdDLE1BQU0saUJBQWlCLDBDQUEwQztNQUMvRCxNQUFNLHdCQUF3QixRQUFRO1FBQ3BDLElBQUksUUFBUSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ3pCLE9BQU8sUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDNUIsQ0FBQztNQUNGLE1BQU0sU0FBUyxTQUFTLE1BQU0sTUFBTSxDQUFDO1FBQ25DLFNBQVMsRUFBRSxRQUFRLFFBQVEsRUFBRTtRQUM3QixLQUFLO1VBQ0gsS0FBSyxPQUFPO1VBQ1osU0FBUyxDQUFDLHFCQUFxQixDQUFDO1VBQ2hDLFlBQVksRUFBRSxNQUFNLFVBQVUsRUFBRTtTQUNqQztRQUNELFlBQVksUUFBUSxDQUFDO1VBQ25CLGdCQUFnQixLQUFLLEVBQUU7VUFDdkIsU0FBUyxPQUFPLENBQUM7WUFDZixVQUFVLE1BQU0sQ0FBQyxJQUFJLFFBQVEsSUFBSSxpQkFBaUIsV0FBVyxFQUFFO1lBQy9ELFlBQVksYUFBYTtjQUN2QixhQUFhLENBQUMsU0FBUyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsS0FBSyxDQUFDLE9BQU8sRUFBRSx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7YUFDNUY7WUFDRCxXQUFXLGFBQWE7Y0FDdEIsYUFBYSxDQUFDLFNBQVMsUUFBUSxDQUFDLEtBQUssQ0FBQyxXQUFXLFFBQVEsQ0FBQyxPQUFPLEVBQUUsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO2FBQy9GO1dBQ0YsQ0FBQztVQUNGLFdBQVcsT0FBTyxDQUFDLEVBQUUsQ0FBQztVQUN0QixRQUFRLE9BQU8sQ0FBQyxFQUFFLENBQUM7VUFDbkIsV0FBVyxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO1VBQ3RDLE1BQU0sT0FBTyxDQUFDO1lBQ1osTUFBTSxTQUFTO1lBQ2YsU0FBUyxxQkFBcUI7WUFDOUIsU0FBUyxxQkFBcUI7WUFDOUIsZ0JBQWdCLElBQUk7V0FDckIsQ0FBQztVQUNGLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxrQkFBa0I7Y0FDekQsUUFBUSxDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsRUFBRSxNQUFNLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQzthQUMzRCxDQUFDLENBQUMsQ0FBQztTQUNQLENBQUM7T0FDSCxDQUFDLENBQUM7TUFDSCxNQUFNLFNBQVMsU0FBUyxNQUFNLE1BQU0sQ0FBQztRQUNuQyxLQUFLO1VBQ0gsS0FBSyxNQUFNO1VBQ1gsU0FBUyxDQUFDLHFCQUFxQixDQUFDO1NBQ2pDO1FBQ0QsWUFBWSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsVUFBVSxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM3RCxZQUFZLFFBQVEsQ0FBQyxDQUFDLFdBQVcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDL0MsQ0FBQyxDQUFDO01BQ0gsTUFBTSxXQUFXLGFBQWE7UUFDNUIsTUFBTSxXQUFXLFNBQVMsS0FBSyxTQUFTLEdBQUcsVUFBVSxHQUFHLFlBQVksQ0FBQztRQUNyRSxPQUFPLFFBQVEsQ0FBQyxRQUFRLEVBQUU7VUFDeEIsS0FBSyxNQUFNO1VBQ1gsU0FBUztZQUNQLFVBQVU7WUFDVixxQkFBcUIsR0FBRyxTQUFTO1dBQ2xDO1NBQ0YsRUFBRSxpQkFBaUIsTUFBTSxDQUFDLENBQUM7T0FDN0IsQ0FBQztNQUNGLE1BQU0sV0FBVyxNQUFNLENBQUM7UUFDdEIsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQztTQUNqQztRQUNELFlBQVk7VUFDVixRQUFRLENBQUMsU0FBUyxDQUFDO1VBQ25CLFFBQVEsQ0FBQyxXQUFXLENBQUM7U0FDdEI7T0FDRixDQUFDLENBQUM7TUFDSCxPQUFPLFNBQVMsT0FBTyxDQUFDO1FBQ3RCLEtBQUs7VUFDSCxLQUFLLE9BQU87VUFDWixTQUFTLENBQUMsY0FBYyxDQUFDO1NBQzFCO1FBQ0QsWUFBWTtVQUNWLE1BQU07VUFDTixRQUFRLE9BQU8sRUFBRTtVQUNqQixNQUFNO1NBQ1A7UUFDRCxpQkFBaUIsUUFBUSxDQUFDO1VBQ3hCLFNBQVMsT0FBTyxDQUFDLEVBQUUsVUFBVSxNQUFNLENBQUMsSUFBSSxRQUFRLElBQUksaUJBQWlCLFdBQVcsRUFBRSxFQUFFLENBQUM7VUFDckYsZUFBZSxFQUFFO1NBQ2xCLENBQUM7T0FDSCxDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sa0JBQWtCLFFBQVE7TUFDOUIsSUFBSSxJQUFJLFFBQVEsS0FBSyxjQUFjLEVBQUU7UUFDbkMsT0FBTyxTQUFTLE9BQU8sQ0FBQztVQUN0QixLQUFLO1lBQ0gsS0FBSyxLQUFLO1lBQ1YsU0FBUyxDQUFDLGlCQUFpQixDQUFDO1lBQzVCLFdBQVcsSUFBSSxLQUFLO1dBQ3JCO1NBQ0YsQ0FBQyxDQUFDO09BQ0osTUFBTTtRQUNMLE9BQU8sU0FBUyxPQUFPLENBQUM7VUFDdEIsS0FBSztZQUNILEtBQUssS0FBSztZQUNWLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQztZQUM1QixXQUFXLElBQUksS0FBSztZQUNwQixZQUFZLEVBQUUsTUFBTSxVQUFVLEVBQUU7V0FDakM7VUFDRCxxQkFBcUIsUUFBUSxDQUFDO1lBQzVCLFdBQVcsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN0QixRQUFRLE9BQU8sQ0FBQyxFQUFFLENBQUM7V0FDcEIsQ0FBQztTQUNILENBQUMsQ0FBQztPQUNKO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLFNBQVMsVUFBVTtNQUN2QixPQUFPLHdDQUF3QyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsYUFBYSxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNyTixDQUFDO0lBQ0YsTUFBTSxhQUFhLFVBQVUsd0NBQXdDO01BQ25FLE1BQU0sYUFBYSxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxTQUFTLEVBQUUsQ0FBQyxDQUFDO01BQzFELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ2pFLENBQUM7SUFDRixNQUFNLFlBQVk7TUFDaEIsS0FBSyxNQUFNLENBQUMscUJBQXFCLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxPQUFPLENBQUMsQ0FBQztNQUNuRSxZQUFZLE1BQU0sQ0FBQywyQkFBMkIsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFNBQVMsT0FBTyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDdkcsYUFBYSxNQUFNLENBQUMscUJBQXFCLGlCQUFpQixDQUFDLElBQUksRUFBRSxTQUFTLE9BQU8sVUFBVSxDQUFDLENBQUM7TUFDN0YsT0FBTyxNQUFNLENBQUMsMkJBQTJCLFdBQVcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxPQUFPLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUM3RixVQUFVLE1BQU0sQ0FBQywyQkFBMkIsY0FBYyxDQUFDLElBQUksRUFBRSxTQUFTLE9BQU8sVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ25HLE9BQU8sTUFBTSxDQUFDLHFCQUFxQixhQUFhLENBQUMsSUFBSSxFQUFFLFNBQVMsT0FBTyxDQUFDLENBQUM7TUFDekUsUUFBUSxVQUFVLENBQUMsMkJBQTJCLFlBQVksQ0FBQyxJQUFJLEVBQUUsU0FBUyxPQUFPLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNuRyxRQUFRLE1BQU0sQ0FBQyxxQkFBcUIsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFNBQVMsT0FBTyxVQUFVLENBQUMsQ0FBQztNQUN6RixVQUFVLE1BQU0sQ0FBQywyQkFBMkIsY0FBYyxDQUFDLElBQUksRUFBRSxTQUFTLE9BQU8sVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ25HLFlBQVksTUFBTSxDQUFDLDJCQUEyQixnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxPQUFPLEVBQUUsU0FBUyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDbkgsYUFBYSxNQUFNLENBQUMsMkJBQTJCLGlCQUFpQixDQUFDLElBQUksRUFBRSxTQUFTLE9BQU8sVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ3pHLFVBQVUsTUFBTSxDQUFDLDJCQUEyQixjQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsT0FBTyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDbkcsTUFBTSxNQUFNLENBQUMscUJBQXFCLFVBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxPQUFPLENBQUMsQ0FBQztNQUNyRSxTQUFTLE1BQU0sQ0FBQywyQkFBMkIsYUFBYSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDaEYsV0FBVyxNQUFNLENBQUMsMkJBQTJCLGVBQWUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxPQUFPLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNyRyxXQUFXLE1BQU0sQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLElBQUksRUFBRSxTQUFTLE9BQU8sVUFBVSxDQUFDLENBQUM7TUFDekYsUUFBUSxNQUFNLENBQUMsMkJBQTJCLFlBQVksQ0FBQyxJQUFJLEVBQUUsU0FBUyxPQUFPLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUMvRixVQUFVLE1BQU0sQ0FBQywyQkFBMkIsY0FBYyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDdEcsY0FBYyxNQUFNLENBQUMsa0JBQWtCLENBQUM7TUFDeEMsV0FBVyxNQUFNLENBQUMsZUFBZSxDQUFDO01BQ2xDLGNBQWMsTUFBTSxDQUFDLG1CQUFtQixrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDdkUsT0FBTyxNQUFNLENBQUMscUJBQXFCLFdBQVcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxPQUFPLFVBQVUsQ0FBQyxDQUFDO01BQ2pGLE1BQU0sTUFBTSxDQUFDLHFCQUFxQixVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQzlELE9BQU8sTUFBTSxDQUFDLHFCQUFxQixXQUFXLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ2pFLENBQUM7SUFDRixNQUFNLGNBQWM7TUFDbEIsT0FBTyxpQkFBaUIsSUFBSTtNQUM1QixRQUFRLFVBQVUsQ0FBQyxFQUFFLENBQUM7S0FDdkIsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLDJDQUEyQztNQUNqRSxNQUFNLGVBQWUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFFBQVEsRUFBRSxhQUFhLGFBQWEsY0FBYyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO01BQ25KLE9BQU8sY0FBYyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO0tBQzlELENBQUM7SUFDRixNQUFNLGlCQUFpQix3Q0FBd0MsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTTtNQUNwRyxPQUFPLE1BQU0sQ0FBQyxDQUFDLHNCQUFzQixHQUFHLElBQUksS0FBSyxFQUFFLDRCQUE0QixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDeEYsT0FBTyxJQUFJLENBQUM7S0FDYixFQUFFLFdBQVcsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsTUFBTSx1QkFBdUIsaUNBQWlDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQzs7SUFFdkgsTUFBTSxjQUFjLGNBQWMsQ0FBQztJQUNuQyxNQUFNLFlBQVksVUFBVSxNQUFNLEVBQUUsQ0FBQztJQUNyQyxNQUFNLFVBQVUscUJBQXFCLE1BQU0sRUFBRSxHQUFHLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxPQUFPLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDckYsTUFBTSxZQUFZLHFCQUFxQixNQUFNLEVBQUUsR0FBRyxNQUFNLE1BQU0sR0FBRyxPQUFPLE1BQU0sQ0FBQztJQUMvRSxNQUFNLFNBQVMsVUFBVSxNQUFNLEVBQUUsQ0FBQztJQUNsQyxNQUFNLFNBQVMscUJBQXFCLE1BQU0sRUFBRSxHQUFHLE1BQU0sT0FBTyxHQUFHLE9BQU8sT0FBTyxDQUFDO0lBQzlFLE1BQU0sVUFBVSxxQkFBcUIsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sT0FBTyxHQUFHLENBQUMsQ0FBQztJQUN2RixNQUFNLFlBQVksOEJBQThCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsT0FBTyxlQUFlLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLENBQUMsTUFBTSxFQUFFO01BQ3hMLE9BQU8sQ0FBQztNQUNSLFFBQVEsQ0FBQztLQUNWLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNqQixNQUFNLFlBQVksOEJBQThCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxPQUFPLGVBQWUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUU7TUFDL0ssTUFBTSxDQUFDO01BQ1AsUUFBUSxDQUFDO0tBQ1YsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2pCLE1BQU0sWUFBWSw4QkFBOEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sZUFBZSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixDQUFDLE1BQU0sRUFBRTtNQUMvSyxPQUFPLENBQUM7TUFDUixLQUFLLENBQUM7S0FDUCxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDakIsTUFBTSxZQUFZLDhCQUE4QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLGVBQWUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUU7TUFDdEssTUFBTSxDQUFDO01BQ1AsS0FBSyxDQUFDO0tBQ1AsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2pCLE1BQU0sUUFBUSw4QkFBOEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN6TCxNQUFNLFFBQVEsOEJBQThCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsT0FBTyxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3JNLE1BQU0sT0FBTyw4QkFBOEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxPQUFPLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbk0sTUFBTSxPQUFPLDhCQUE4QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsT0FBTyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3pMLE1BQU0sdUJBQXVCLGlCQUFpQjtNQUM1QyxRQUFRLGFBQWE7V0FDaEIsT0FBTztRQUNWLE9BQU8sS0FBSyxDQUFDO1dBQ1YsV0FBVztRQUNkLE9BQU8sU0FBUyxDQUFDO1dBQ2QsV0FBVztRQUNkLE9BQU8sU0FBUyxDQUFDO1dBQ2QsT0FBTztRQUNWLE9BQU8sS0FBSyxDQUFDO1dBQ1YsV0FBVztRQUNkLE9BQU8sU0FBUyxDQUFDO1dBQ2QsV0FBVztRQUNkLE9BQU8sU0FBUyxDQUFDO1dBQ2QsTUFBTTtRQUNULE9BQU8sSUFBSSxDQUFDO1dBQ1QsTUFBTTtRQUNULE9BQU8sSUFBSSxDQUFDO09BQ2I7S0FDRixDQUFDO0lBQ0YsTUFBTSxXQUFXLDhDQUE4QztNQUM3RCxNQUFNLFNBQVMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQzNFLE9BQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztLQUN6RCxDQUFDO0lBQ0YsTUFBTSxzQkFBc0IsaUJBQWlCO01BQzNDLFFBQVEsYUFBYTtXQUNoQixPQUFPO1FBQ1YsT0FBTyxLQUFLLENBQUM7V0FDVixXQUFXO1FBQ2QsT0FBTyxTQUFTLENBQUM7V0FDZCxXQUFXO1FBQ2QsT0FBTyxTQUFTLENBQUM7V0FDZCxPQUFPO1FBQ1YsT0FBTyxLQUFLLENBQUM7V0FDVixXQUFXO1FBQ2QsT0FBTyxTQUFTLENBQUM7V0FDZCxXQUFXO1FBQ2QsT0FBTyxTQUFTLENBQUM7V0FDZCxNQUFNO1FBQ1QsT0FBTyxJQUFJLENBQUM7V0FDVCxNQUFNO1FBQ1QsT0FBTyxJQUFJLENBQUM7T0FDYjtLQUNGLENBQUM7SUFDRixNQUFNLE9BQU8sOENBQThDO01BQ3pELE1BQU0sU0FBUyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDMUUsT0FBTyxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ3pELENBQUM7O0lBRUYsTUFBTSxxQkFBcUI7TUFDekIsY0FBYyxFQUFFO01BQ2hCLGFBQWEsRUFBRTtNQUNmLFdBQVcsRUFBRTtNQUNiLFlBQVksRUFBRTtNQUNkLE9BQU8sRUFBRTtNQUNULE1BQU0sRUFBRTtNQUNSLFFBQVEsRUFBRTtNQUNWLEtBQUssRUFBRTtLQUNSLENBQUM7SUFDRixNQUFNLHdCQUF3QixrRUFBa0U7TUFDOUYsTUFBTSxhQUFhLEVBQUUsQ0FBQztNQUN0QixNQUFNLFlBQVksRUFBRSxtQkFBbUIsWUFBWSxFQUFFLEVBQUUsQ0FBQztNQUN4RCxNQUFNLHFCQUFxQixPQUFPO1FBQ2hDLE1BQU0sTUFBTTtRQUNaLE1BQU0sbUJBQW1CLENBQUMsV0FBVyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUM1RCxNQUFNLFFBQVEsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDekMsUUFBUSxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQztRQUN4RCxTQUFTO1VBQ1AsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDO1VBQ3hCLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQztTQUN6QjtRQUNELFNBQVM7T0FDVixDQUFDLENBQUM7TUFDSCxNQUFNLGlCQUFpQixPQUFPO1FBQzVCLE1BQU0sU0FBUztRQUNmLFNBQVMsYUFBYSxFQUFFO1FBQ3hCLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQztRQUN6RCxTQUFTO1VBQ1AsT0FBTyxNQUFNO1lBQ1gsV0FBVztZQUNYLFdBQVc7WUFDWCxPQUFPO1dBQ1I7VUFDRCxPQUFPLE1BQU07WUFDWCxXQUFXO1lBQ1gsV0FBVztZQUNYLE9BQU87V0FDUjtTQUNGO1FBQ0QsU0FBUztPQUNWLENBQUMsQ0FBQztNQUNILE9BQU8sTUFBTSx5QkFBeUIsRUFBRSxHQUFHLGtCQUFrQixFQUFFLEdBQUcsY0FBYyxFQUFFLENBQUM7S0FDcEYsQ0FBQztJQUNGLE1BQU0sOEJBQThCLGdGQUFnRjtNQUNsSCxNQUFNLGFBQWEsRUFBRSxDQUFDO01BQ3RCLE1BQU0sWUFBWSxFQUFFLG1CQUFtQixZQUFZLEVBQUUsRUFBRSxDQUFDO01BQ3hELE1BQU0scUJBQXFCLE9BQU87UUFDaEMsTUFBTSxNQUFNO1FBQ1osTUFBTSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sUUFBUSxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUN6QyxRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixDQUFDO1FBQ3hELFNBQVM7VUFDUCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7VUFDcEIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ3JCO1FBQ0QsU0FBUztPQUNWLENBQUMsQ0FBQztNQUNILE1BQU0saUJBQWlCLE1BQU0sTUFBTSxHQUFHO1FBQ3BDLE1BQU0sTUFBTTtRQUNaLE1BQU0sbUJBQW1CLENBQUMsV0FBVyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUM1RCxNQUFNLFFBQVEsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLENBQUMsRUFBRSxrQkFBa0IsQ0FBQztRQUN0RSxTQUFTO1VBQ1AsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDO1VBQ3RCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQztTQUN2QjtRQUNELFNBQVM7T0FDVixHQUFHO1FBQ0YsTUFBTSxTQUFTO1FBQ2YsU0FBUyxtQkFBbUIsRUFBRTtRQUM5QixRQUFRLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLGtCQUFrQixDQUFDO1FBQ3RDLFNBQVM7VUFDUCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7VUFDdEIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDO1NBQ3ZCO1FBQ0QsU0FBUztPQUNWLENBQUM7TUFDRixPQUFPLE1BQU0seUJBQXlCLEVBQUUsR0FBRyxrQkFBa0IsRUFBRSxHQUFHLGNBQWMsRUFBRSxDQUFDO0tBQ3BGLENBQUM7SUFDRixNQUFNLGtCQUFrQixrRUFBa0U7TUFDeEYsTUFBTSxxQkFBcUIsT0FBTztRQUNoQyxNQUFNLE1BQU07UUFDWixNQUFNLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFDNUQsTUFBTSxRQUFRLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3pDLFNBQVM7VUFDUCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7VUFDcEIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ3JCO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxpQkFBaUIsT0FBTztRQUM1QixNQUFNLFNBQVM7UUFDZixTQUFTLGFBQWEsRUFBRTtRQUN4QixTQUFTO1VBQ1AsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDO1VBQ3RCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQztTQUN2QjtPQUNGLENBQUMsQ0FBQztNQUNILE9BQU8sTUFBTSx5QkFBeUIsRUFBRSxHQUFHLGtCQUFrQixFQUFFLEdBQUcsY0FBYyxFQUFFLENBQUM7S0FDcEYsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLHlCQUF5QixPQUFPO01BQ3RELE1BQU0sV0FBVztNQUNqQixNQUFNLFdBQVcsRUFBRTtNQUNuQixjQUFjLE1BQU07UUFDbEIsTUFBTSxNQUFNLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQztRQUN0QyxNQUFNLGdCQUFnQixNQUFNLE1BQU0sTUFBTSxpQkFBaUIsRUFBRSxDQUFDO1FBQzVELElBQUksYUFBYSxPQUFPLEdBQUcsQ0FBQyxFQUFFO1VBQzVCLE1BQU0sWUFBWSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDbkMsTUFBTSxXQUFXLGFBQWEsQ0FBQyxhQUFhLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztVQUN6RCxNQUFNLDBCQUEwQjtZQUM5QixXQUFXLFlBQVksUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUMxQyxVQUFVLFlBQVksUUFBUSxDQUFDLFFBQVEsQ0FBQztXQUN6QyxDQUFDO1VBQ0YsT0FBTyxRQUFRLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsT0FBTyxRQUFRLEtBQUssQ0FBQyxZQUFZLE1BQU0sQ0FBQyxZQUFZLFFBQVEsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxFQUFFLEdBQUcsWUFBWSxFQUFFLFlBQVksUUFBUSxDQUFDLEdBQUcsYUFBYSxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO09BQzVKO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxrQkFBa0IsZUFBZSxZQUFZO01BQ2pELE1BQU0sTUFBTTtNQUNaLE1BQU0sV0FBVyxFQUFFO01BQ25CLE1BQU0sT0FBTztLQUNkLENBQUMsQ0FBQztJQUNILE1BQU0sYUFBYSw4REFBOEQ7TUFDL0UsTUFBTSwyQkFBMkIsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDM0QsTUFBTSxjQUFjLE1BQU0sWUFBWSxRQUFRLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQ2pFLE1BQU0scUJBQXFCLE1BQU0sWUFBWSxRQUFRLENBQUMsTUFBTSx3QkFBd0IsRUFBRSxDQUFDLENBQUM7TUFDeEYsTUFBTSw0QkFBNEIsTUFBTSx3QkFBd0IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO01BQ3BGLE9BQU87UUFDTCxjQUFjLHFCQUFxQixDQUFDLGtCQUFrQixFQUFFLGFBQWEsRUFBRSx5QkFBeUIsQ0FBQztRQUNqRyxvQkFBb0IsMkJBQTJCLENBQUMsTUFBTSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUseUJBQXlCLENBQUM7UUFDbEksUUFBUSxlQUFlLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLHlCQUF5QixDQUFDO1FBQ3JGLFFBQVEsZUFBZSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUM7UUFDNUMsTUFBTSxlQUFlLENBQUMsV0FBVyxDQUFDO09BQ25DLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sY0FBYyxVQUFVLHFCQUFxQjtNQUNqRCxNQUFNLFNBQVMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDekMsTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUN6QixDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsVUFBVSxNQUFNLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sWUFBWSxVQUFVLE1BQU0sV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxRCxNQUFNLGVBQWUsVUFBVSxNQUFNLGNBQWMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDaEUsTUFBTSxzQkFBc0IsV0FBVztNQUNyQyxhQUFhLFdBQVcsQ0FBQyxNQUFNLENBQUM7TUFDaEMsaUJBQWlCLGVBQWUsQ0FBQyxNQUFNLENBQUM7TUFDeEMsV0FBVyxTQUFTLENBQUMsTUFBTSxDQUFDO01BQzVCLGNBQWMsWUFBWSxDQUFDLE1BQU0sQ0FBQztLQUNuQyxDQUFDLENBQUM7O0lBRUgsTUFBTSxtQkFBbUIsVUFBVSxNQUFNLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sa0JBQWtCLFdBQVcsRUFBRSxrQkFBa0IsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDOztJQUVuRixNQUFNLGtCQUFrQixVQUFVO01BQ2hDLE1BQU0sT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDO01BQ3RFLE9BQU87UUFDTCxtQkFBbUIsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUs7UUFDN0MsZ0JBQWdCLElBQUksSUFBSTtRQUN4QixnQkFBZ0IsSUFBSSxJQUFJO09BQ3pCLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0saUJBQWlCLFVBQVUsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sb0JBQW9CLFVBQVUsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sc0JBQXNCO01BQzFCO1FBQ0UsT0FBTyxVQUFVO1FBQ2pCLE9BQU87VUFDTDtZQUNFLE9BQU8sV0FBVztZQUNsQixRQUFRLElBQUk7V0FDYjtVQUNEO1lBQ0UsT0FBTyxXQUFXO1lBQ2xCLFFBQVEsSUFBSTtXQUNiO1VBQ0Q7WUFDRSxPQUFPLFdBQVc7WUFDbEIsUUFBUSxJQUFJO1dBQ2I7VUFDRDtZQUNFLE9BQU8sV0FBVztZQUNsQixRQUFRLElBQUk7V0FDYjtVQUNEO1lBQ0UsT0FBTyxXQUFXO1lBQ2xCLFFBQVEsSUFBSTtXQUNiO1VBQ0Q7WUFDRSxPQUFPLFdBQVc7WUFDbEIsUUFBUSxJQUFJO1dBQ2I7U0FDRjtPQUNGO01BQ0Q7UUFDRSxPQUFPLFFBQVE7UUFDZixPQUFPO1VBQ0w7WUFDRSxPQUFPLE1BQU07WUFDYixRQUFRLE1BQU07V0FDZjtVQUNEO1lBQ0UsT0FBTyxRQUFRO1lBQ2YsUUFBUSxRQUFRO1dBQ2pCO1VBQ0Q7WUFDRSxPQUFPLFdBQVc7WUFDbEIsUUFBUSxXQUFXO1dBQ3BCO1VBQ0Q7WUFDRSxPQUFPLGVBQWU7WUFDdEIsUUFBUSxlQUFlO1dBQ3hCO1VBQ0Q7WUFDRSxPQUFPLGFBQWE7WUFDcEIsUUFBUSxhQUFhO1dBQ3RCO1VBQ0Q7WUFDRSxPQUFPLFdBQVc7WUFDbEIsUUFBUSxXQUFXO1dBQ3BCO1VBQ0Q7WUFDRSxPQUFPLE1BQU07WUFDYixRQUFRLE1BQU07V0FDZjtTQUNGO09BQ0Y7TUFDRDtRQUNFLE9BQU8sUUFBUTtRQUNmLE9BQU87VUFDTDtZQUNFLE9BQU8sV0FBVztZQUNsQixRQUFRLEdBQUc7V0FDWjtVQUNEO1lBQ0UsT0FBTyxZQUFZO1lBQ25CLFFBQVEsWUFBWTtXQUNyQjtVQUNEO1lBQ0UsT0FBTyxLQUFLO1lBQ1osUUFBUSxLQUFLO1dBQ2Q7VUFDRDtZQUNFLE9BQU8sS0FBSztZQUNaLFFBQVEsS0FBSztXQUNkO1NBQ0Y7T0FDRjtNQUNEO1FBQ0UsT0FBTyxPQUFPO1FBQ2QsT0FBTztVQUNMO1lBQ0UsT0FBTyxNQUFNO1lBQ2IsUUFBUSxXQUFXO1dBQ3BCO1VBQ0Q7WUFDRSxPQUFPLFFBQVE7WUFDZixRQUFRLGFBQWE7V0FDdEI7VUFDRDtZQUNFLE9BQU8sT0FBTztZQUNkLFFBQVEsWUFBWTtXQUNyQjtVQUNEO1lBQ0UsT0FBTyxTQUFTO1lBQ2hCLFFBQVEsY0FBYztXQUN2QjtTQUNGO09BQ0Y7S0FDRixDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsVUFBVSxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pELE1BQU0sZ0JBQWdCLFVBQVUsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2RCxNQUFNLGlCQUFpQixVQUFVLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDekQsTUFBTSxtQkFBbUIsVUFBVSxLQUFLLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzdELE1BQU0sYUFBYSxlQUFlLEtBQUssQ0FBQyxXQUFXLEVBQUUsY0FBYztNQUNqRSxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN4QixNQUFNLFNBQVMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDckMsT0FBTztVQUNMLGVBQWUsR0FBRyxjQUFjLE9BQU8sQ0FBQyxNQUFNLGNBQWMsQ0FBQztVQUM3RCxTQUFTLEdBQUcsUUFBUSxPQUFPLENBQUMsQ0FBQztjQUN6QixPQUFPLEdBQUcsTUFBTTtjQUNoQixPQUFPLE1BQU0sUUFBUTthQUN0QixDQUFDLENBQUM7U0FDTixDQUFDO09BQ0gsTUFBTSxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDN0UsTUFBTSxhQUFhLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSyxHQUFHLEdBQUcsTUFBTSxZQUFZLEVBQUUsQ0FBQztRQUMzRSxNQUFNLHVCQUF1QixDQUFDLE9BQU8sR0FBRyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELE9BQU87VUFDTCxlQUFlLEdBQUcsY0FBYyxPQUFPLENBQUMsQ0FBQztjQUNyQyxNQUFNLG9CQUFvQjtjQUMxQixRQUFRLEdBQUc7YUFDWixDQUFDLENBQUM7VUFDTCxTQUFTLEdBQUcsUUFBUSxPQUFPLENBQUMsQ0FBQztjQUN6QixPQUFPLEdBQUcsTUFBTTtjQUNoQixRQUFRLG9CQUFvQjtjQUM1QixNQUFNLEdBQUcsS0FBSzthQUNmLENBQUMsQ0FBQztTQUNOLENBQUM7T0FDSCxNQUFNO1FBQ0wsT0FBTztVQUNMLEdBQUcsR0FBRztVQUNOLFNBQVMsR0FBRyxRQUFRLE9BQU8sQ0FBQyxHQUFHLENBQUM7U0FDakMsQ0FBQztPQUNIO0tBQ0YsRUFBRTtNQUNELGVBQWUsRUFBRTtNQUNqQixTQUFTLEVBQUU7S0FDWixDQUFDLENBQUM7SUFDSCxNQUFNLHdCQUF3Qix5QkFBeUI7TUFDckQsTUFBTSxTQUFTLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztNQUN2QyxNQUFNLGtCQUFrQixpQkFBaUI7UUFDdkMsTUFBTSxDQUFDLGFBQWEsRUFBRSxPQUFPO1VBQzNCLElBQUksQ0FBQyxNQUFNLFVBQVUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUU7WUFDbkMsTUFBTSxVQUFVLFNBQVMsQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1dBQ2pEO1NBQ0YsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLElBQUksTUFBTSxVQUFVLEVBQUU7UUFDcEIsZUFBZSxDQUFDLE1BQU0sY0FBYyxDQUFDLENBQUM7T0FDdkMsTUFBTTtRQUNMLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNO1VBQ3RCLGVBQWUsQ0FBQyxNQUFNLGNBQWMsQ0FBQyxDQUFDO1NBQ3ZDLENBQUMsQ0FBQztPQUNKO01BQ0QsT0FBTyxNQUFNLFFBQVEsQ0FBQztLQUN2QixDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsVUFBVSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWU7TUFDL0UsTUFBTSx3QkFBd0IscUJBQXFCLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO01BQ3pFLE9BQU8sdUJBQXVCLENBQUMsTUFBTSxDQUFDLEdBQUcsbUJBQW1CLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLHFCQUFxQixDQUFDO0tBQ3BILENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7O0lBRTlCLE1BQU0sZ0JBQWdCLFVBQVU7TUFDOUIsTUFBTSxTQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUM1QixPQUFPLE1BQU0sT0FBTyxLQUFLLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQzNELENBQUM7SUFDRixNQUFNLGVBQWUseUNBQXlDO01BQzVELEdBQUcsSUFBSTtNQUNQLE1BQU0sV0FBVztNQUNqQixZQUFZLGFBQWEsQ0FBQyxJQUFJLE9BQU8sQ0FBQztNQUN0QyxpQkFBaUIsYUFBYSxDQUFDLElBQUksT0FBTyxDQUFDO0tBQzVDLENBQUMsQ0FBQztJQUNILE1BQU0sYUFBYSxtREFBbUQ7TUFDcEUsTUFBTSxrQkFBa0IsUUFBUSxZQUFZLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztNQUNqRixNQUFNLGFBQWEsUUFBUTtRQUN6QixNQUFNLFdBQVcsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDLENBQUM7UUFDdEMsT0FBTztVQUNMLEdBQUcsSUFBSTtVQUNQLE1BQU0sU0FBUztVQUNmLGVBQWUsVUFBVSxDQUFDLFFBQVEsQ0FBQztTQUNwQyxDQUFDO09BQ0gsQ0FBQztNQUNGLE1BQU0sZUFBZSxRQUFRO1FBQzNCLE1BQU0sYUFBYSxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQztRQUM1RSxNQUFNLHVCQUF1QixDQUFDLE9BQU8sR0FBRyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sVUFBVTtVQUNkLEdBQUcsSUFBSTtVQUNQLE1BQU0sV0FBVztVQUNqQixRQUFRLG9CQUFvQjtVQUM1QixZQUFZLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQztVQUMvQyxpQkFBaUIsYUFBYSxDQUFDLG9CQUFvQixDQUFDO1NBQ3JELENBQUM7UUFDRixNQUFNLFVBQVUsU0FBUyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvQyxPQUFPLE9BQU8sQ0FBQztPQUNoQixDQUFDO01BQ0YsTUFBTSxXQUFXLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRO1FBQzdDLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ3hCLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pCLE1BQU0sSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUNsQyxPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM5QixNQUFNLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQzlCLE9BQU87WUFDTCxHQUFHLElBQUk7WUFDUCxNQUFNLFdBQVc7V0FDbEIsQ0FBQztTQUNILE1BQU07VUFDTCxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMzQjtPQUNGLENBQUMsQ0FBQztNQUNILE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQzFCLENBQUM7O0lBRUYsTUFBTSxTQUFTLFVBQVU7TUFDdkIsTUFBTSxnQkFBZ0IsVUFBVSxNQUFNLE1BQU0sVUFBVSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDckUsTUFBTSxnQkFBZ0IsVUFBVSxNQUFNO1FBQ3BDLE1BQU0sTUFBTSxNQUFNLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sR0FBRyxLQUFLLFNBQVMsR0FBRyxRQUFRLEtBQUssQ0FBQztVQUN2QyxLQUFLLEdBQUcsT0FBTyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLEdBQUcsS0FBSztVQUNwRSxRQUFRLE1BQU0sSUFBSSxXQUFXLENBQUMsTUFBTSxVQUFVLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNuRSxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN0QixDQUFDO01BQ0YsTUFBTSxrQkFBa0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQ2pDLE1BQU0sZ0JBQWdCLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUMvQixNQUFNLGtCQUFrQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDcEMsTUFBTSxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU07UUFDekIsTUFBTSxVQUFVLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxNQUFNLFdBQVcsVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzNFLGVBQWUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO09BQy9CLENBQUMsQ0FBQztNQUNILE1BQU0sR0FBRyxDQUFDLHVCQUF1QixFQUFFLEtBQUs7UUFDdEMsTUFBTSxnQkFBZ0IsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDaEYsYUFBYSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakMsZUFBZSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztPQUNoQyxDQUFDLENBQUM7TUFDSCxNQUFNLFVBQVUsTUFBTTtRQUNwQixNQUFNLGVBQWUsZUFBZSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsZUFBZSxJQUFJLEVBQUUsQ0FBQztRQUN4RSxNQUFNLGFBQWEsYUFBYSxJQUFJLEVBQUUsQ0FBQztRQUN2QyxPQUFPLFlBQVksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO09BQ3hDLENBQUM7TUFDRixPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7S0FDcEIsQ0FBQzs7SUFFRixNQUFNLFlBQVksUUFBUSxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sT0FBTyxRQUFRLEtBQUssQ0FBQztJQUMzQixNQUFNLDBCQUEwQixTQUFTO01BQ3ZDLE9BQU8sUUFBUTtRQUNiLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ25CLElBQUksSUFBSSxnQkFBZ0IsS0FBSyxLQUFLLEVBQUU7WUFDbEMsT0FBTyxJQUFJLENBQUM7V0FDYjtVQUNELElBQUksSUFBSSxhQUFhLENBQUMsMEJBQTBCLENBQUMsS0FBSyxLQUFLLEVBQUU7WUFDM0QsT0FBTyxJQUFJLENBQUM7V0FDYjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7T0FDZCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sd0JBQXdCLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlELE1BQU0seUJBQXlCLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sV0FBVyxzQ0FBc0M7TUFDckQsSUFBSTtNQUNKLEtBQUs7TUFDTCxHQUFHO01BQ0gsS0FBSztNQUNMLE1BQU07S0FDUCxDQUFDLENBQUM7SUFDSCxNQUFNLCtCQUErQixRQUFRO01BQzNDLElBQUksV0FBVyxJQUFJLENBQUM7TUFDcEIsT0FBTyxXQUFXLFFBQVEsV0FBVyxFQUFFO1FBQ3JDLE1BQU0sUUFBUSxRQUFRLGdCQUFnQixDQUFDO1FBQ3ZDLElBQUksS0FBSyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7VUFDaEMsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN4QztPQUNGO01BQ0QsT0FBTyxLQUFLLENBQUM7S0FDZCxDQUFDO0lBQ0YsTUFBTSxTQUFTLG9CQUFvQjtNQUNqQyxPQUFPLEtBQUssQ0FBQyxXQUFXLENBQUMsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsV0FBVztRQUN6RSxPQUFPLE9BQU8sSUFBSSxDQUFDO09BQ3BCLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGlCQUFpQixPQUFPO01BQzVCLE9BQU8sR0FBRyxVQUFVLElBQUksR0FBRyxZQUFZLENBQUM7S0FDekMsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLE9BQU87TUFDN0IsT0FBTyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDMUMsQ0FBQztJQUNGLE1BQU0sV0FBVyxPQUFPO01BQ3RCLE9BQU8sR0FBRyxJQUFJLEdBQUcsU0FBUyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsS0FBSyxNQUFNLFNBQVMsQ0FBQztLQUMxRSxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsT0FBTztNQUMzQixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDekMsQ0FBQztJQUNGLE1BQU0sV0FBVyxPQUFPO01BQ3RCLE9BQU8sR0FBRyxJQUFJLFlBQVksS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7S0FDL0MsQ0FBQztJQUNGLE1BQU0sYUFBYSxPQUFPO01BQ3hCLE9BQU8sNEJBQTRCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUMxRSxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsT0FBTztNQUMzQixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDekMsQ0FBQztJQUNGLE1BQU0sV0FBVyxPQUFPO01BQ3RCLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLFNBQVMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNqRSxDQUFDO0lBQ0YsTUFBTSxlQUFlLE9BQU87TUFDMUIsSUFBSSxFQUFFLENBQUM7TUFDUCxNQUFNLFdBQVcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ3RDLE1BQU0sU0FBUyxNQUFNO1FBQ25CLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztPQUNuQixDQUFDO01BQ0YsT0FBTyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ2xJLENBQUM7SUFDRixNQUFNLGVBQWUsT0FBTztNQUMxQixNQUFNLFdBQVcsR0FBRyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7TUFDcEMsTUFBTSxhQUFhLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUN2QyxPQUFPLFFBQVEsQ0FBQyxRQUFRLEVBQUUsVUFBVSxHQUFHLFVBQVUsR0FBRyxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzlGLENBQUM7SUFDRixNQUFNLG1CQUFtQixRQUFRO01BQy9CLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7S0FDM0QsQ0FBQztJQUNGLE1BQU0sbUJBQW1CLFFBQVE7TUFDL0IsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztLQUMzRCxDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsT0FBTztNQUMvQixNQUFNLE9BQU8sTUFBTSxDQUFDLGlDQUFpQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQzVELE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQztJQUNGLE1BQU0sV0FBVyxVQUFVO01BQ3pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7S0FDdEMsQ0FBQztJQUNGLE1BQU0sT0FBTyxPQUFPO01BQ2xCLE1BQU0sT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNwQyxPQUFPLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDbEYsQ0FBQztJQUNGLE1BQU0sY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDOztJQUU3QixNQUFNLGNBQWMscUJBQXFCLENBQUM7SUFDMUMsTUFBTSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sWUFBWSxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxTQUFTLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5RCxNQUFNLGVBQWUsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksY0FBYyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDM0YsTUFBTSxxQkFBcUIsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pHLE1BQU0sZ0JBQWdCLE1BQU07TUFDMUIsTUFBTSxrQkFBa0IsUUFBUSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7TUFDdEQsSUFBSSxlQUFlLEtBQUssSUFBSSxFQUFFO1FBQzVCLE9BQU8sRUFBRSxDQUFDO09BQ1g7TUFDRCxJQUFJLE9BQU8sQ0FBQztNQUNaLElBQUk7UUFDRixVQUFVLElBQUksTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO09BQ3ZDLENBQUMsVUFBVTtRQUNWLElBQUksQ0FBQyxZQUFZLFdBQVcsRUFBRTtVQUM1QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLEdBQUcscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUM7VUFDdkUsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELE1BQU0sQ0FBQyxDQUFDO09BQ1Q7TUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDaEMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsV0FBVyxHQUFHLHVCQUF1QixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQy9FLE9BQU8sRUFBRSxDQUFDO09BQ1g7TUFDRCxPQUFPLE9BQU8sQ0FBQztLQUNoQixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsV0FBVztNQUMvQixJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO09BQ3hFO01BQ0QsUUFBUSxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7S0FDeEQsQ0FBQztJQUNGLE1BQU0sYUFBYSxZQUFZO01BQzdCLE1BQU0sVUFBVSxhQUFhLEVBQUUsQ0FBQztNQUNoQyxPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUMzQyxDQUFDO0lBQ0YsTUFBTSxlQUFlLG1CQUFtQjtNQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ25CLE9BQU87T0FDUjtNQUNELE1BQU0sVUFBVSxhQUFhLEVBQUUsQ0FBQztNQUNoQyxNQUFNLFFBQVEsS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQ2pELE1BQU0sa0JBQWtCLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7TUFDOUQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztNQUMzRSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDeEIsQ0FBQzs7SUFFRixNQUFNLFdBQVcsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ2xDLE1BQU0sVUFBVSxTQUFTLEtBQUssQ0FBQyxRQUFRLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDMUUsTUFBTSxZQUFZLFVBQVUsUUFBUSxLQUFLLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN6RSxNQUFNLGlCQUFpQixVQUFVO01BQy9CLE1BQU0sZUFBZSxRQUFRLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUM3RixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLFlBQVksS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztLQUM3SCxDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsc0JBQXNCO01BQzdDLE1BQU0sY0FBYyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDM0MsSUFBSSxTQUFTLENBQUMsV0FBVyxDQUFDLEVBQUU7UUFDMUIsT0FBTyxXQUFXLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDMUQsTUFBTTtRQUNMLE9BQU8sV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3BFO0tBQ0YsQ0FBQztJQUNGLE1BQU0sZUFBZSxzQkFBc0IsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxTQUFTLE1BQU0sR0FBRyxDQUFDLGFBQWE7TUFDMUgsTUFBTSxVQUFVLGlCQUFpQjtRQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1VBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztTQUNoRDtRQUNELElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7U0FDakQ7UUFDRCxNQUFNLElBQUk7VUFDUixLQUFLO1VBQ0wsSUFBSTtTQUNMLENBQUM7UUFDRixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDZCxDQUFDO01BQ0YsTUFBTSxPQUFPO1FBQ1gsUUFBUTtRQUNSLFdBQVcsS0FBSyxVQUFVO1FBQzFCLEdBQUcsUUFBUSxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztPQUN2QyxDQUFDO01BQ0YsTUFBTSxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNKLE1BQU0saUJBQWlCLFNBQVMsUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDdkYsTUFBTSxxQkFBcUIsVUFBVTtNQUNuQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDN0IsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCO01BQ0QsT0FBTyxRQUFRLEtBQUssQ0FBQztRQUNuQixTQUFTLFdBQVcsS0FBSyxDQUFDLE1BQU0sUUFBUSxFQUFFLENBQUM7UUFDM0MsV0FBVyxjQUFjLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLGNBQWMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUN0RCxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsVUFBVSxRQUFRLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzVGLE1BQU0sb0JBQW9CLFdBQVc7TUFDbkMsVUFBVTtNQUNWLFlBQVk7TUFDWixvQkFBb0IsTUFBTSxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7TUFDcEQsc0JBQXNCLE1BQU0sb0JBQW9CLENBQUMsTUFBTSxDQUFDO01BQ3hELGNBQWMsWUFBWSxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQztLQUN6RCxDQUFDLENBQUM7O0lBRUgsTUFBTSxTQUFTLDJEQUEyRDtNQUN4RSxNQUFNLG1CQUFtQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDckMsTUFBTSxVQUFVLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUN4QyxNQUFNLFlBQVk7UUFDaEIsT0FBTyxNQUFNLE1BQU0sR0FBRyxTQUFTLE9BQU8sRUFBRSxNQUFNO1FBQzlDLFdBQVcsTUFBTSxNQUFNLEdBQUcsU0FBUyxPQUFPLEVBQUUsVUFBVTtRQUN0RCxXQUFXLFFBQVEsVUFBVTtRQUM3QixZQUFZLE1BQU0sTUFBTSxLQUFLLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsRUFBRTtRQUNwRSxXQUFXLE1BQU0sUUFBUSxJQUFJO09BQzlCLENBQUM7TUFDRixNQUFNLFdBQVcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDM0MsTUFBTSxTQUFTLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUM5QixNQUFNLGFBQWEsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDL0MsTUFBTSxpQkFBaUIsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQy9DLE1BQU0sb0JBQW9CLE1BQU0sZ0JBQWdCLElBQUksRUFBRSxDQUFDO01BQ3ZELE1BQU0sc0JBQXNCLFNBQVMsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUNqRSxNQUFNLGtCQUFrQjtRQUN0QixRQUFRO1VBQ04sU0FBUztVQUNULFNBQVMsVUFBVSxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxrQkFBa0IsQ0FBQztVQUMxRixRQUFRLE9BQU87U0FDaEI7UUFDRCxRQUFRO1FBQ1IsTUFBTTtRQUNOLFVBQVU7UUFDVixRQUFRLGNBQWM7UUFDdEIsaUJBQWlCO1FBQ2pCLG1CQUFtQjtPQUNwQixDQUFDO01BQ0YsTUFBTSxpQkFBaUI7UUFDckIsR0FBRyxlQUFlO1FBQ2xCLFFBQVE7VUFDTixHQUFHLGVBQWUsT0FBTztVQUN6QixhQUFhLEtBQUssb0JBQW9CLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxjQUFjLENBQUM7VUFDN0QsU0FBUyxTQUFTLE1BQU07U0FDekI7T0FDRixDQUFDO01BQ0YsTUFBTSxrQkFBa0I7UUFDdEIsR0FBRyxlQUFlO1FBQ2xCLFFBQVE7VUFDTixHQUFHLGVBQWUsT0FBTztVQUN6QixhQUFhLEtBQUssb0JBQW9CLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxlQUFlLENBQUM7VUFDOUQsU0FBUyxTQUFTLE9BQU87U0FDMUI7T0FDRixDQUFDO01BQ0YsT0FBTztRQUNMLE9BQU8sY0FBYztRQUNyQixRQUFRLGVBQWU7T0FDeEIsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxVQUFVLHVDQUF1QztNQUNyRCxNQUFNLGlCQUFpQixlQUFlO1FBQ3BDLE1BQU0sQ0FBQztVQUNMLFVBQVU7VUFDVixHQUFHLGFBQWE7U0FDakIsRUFBRSxLQUFLO1VBQ04sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzdCLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLGNBQWMsc0JBQXNCO1FBQ3hDLE1BQU0sQ0FBQztVQUNMLFVBQVU7VUFDVixHQUFHLGFBQWE7U0FDakIsRUFBRSxLQUFLO1VBQ04sQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNuQyxDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxvQkFBb0IsT0FBTyxXQUFXLENBQUMsYUFBYSxFQUFFLEVBQUUsRUFBRSxRQUFRLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztNQUN0RixNQUFNLE1BQU0sV0FBVyxFQUFFLENBQUM7TUFDMUIsTUFBTSxlQUFlLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixDQUFDLENBQUM7TUFDaEUsTUFBTSxjQUFjLElBQUksQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLE9BQU8sY0FBYyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUM1RixNQUFNLGFBQWEsSUFBSSxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsT0FBTyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ3pGLE1BQU0sY0FBYyxJQUFJLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO01BQzlELE1BQU0sWUFBWSxJQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxPQUFPO1FBQzVDLElBQUksR0FBRyxJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUU7VUFDeEIsV0FBVyxDQUFDLGFBQWEsRUFBRSxFQUFFLEVBQUUsUUFBUSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDdEQ7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLGlCQUFpQixPQUFPLFdBQVcsQ0FBQyxhQUFhLEVBQUUsRUFBRSxFQUFFLFFBQVEsWUFBWSxRQUFRLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDekcsTUFBTSxtQkFBbUIsT0FBTztRQUM5QixJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUMsRUFBRTtVQUNwQixXQUFXLENBQUMsYUFBYSxFQUFFLEVBQUUsRUFBRSxRQUFRLFlBQVksUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzVFO09BQ0YsQ0FBQztNQUNGLE1BQU0scUJBQXFCLE1BQU07UUFDL0IsTUFBTSxDQUFDLE1BQU0sY0FBYyxJQUFJLEVBQUUsRUFBRSxjQUFjO1VBQy9DLElBQUksTUFBTSxLQUFLLFVBQVUsRUFBRTtZQUN6QixVQUFVLFNBQVMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxlQUFlLE1BQU0sRUFBRSxDQUFDLENBQUM7V0FDakU7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxpQkFBaUIsT0FBTyxjQUFjLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDaEYsTUFBTSxpQkFBaUIsT0FBTztRQUM1QixXQUFXLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwQyxjQUFjLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7T0FDbkQsQ0FBQztNQUNGLE1BQU0sTUFBTSxXQUFXLENBQUMsWUFBWSxRQUFRLENBQUMsTUFBTSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDbkUsTUFBTSxrQkFBa0IsT0FBTyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTztRQUNwRCxxQkFBcUIsQ0FBQyxNQUFNO1VBQzFCLE1BQU0sSUFBSSxNQUFNLGFBQWEsRUFBRSxDQUFDO1VBQ2hDLElBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ2pDLE1BQU0sc0JBQXNCLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxVQUFVLFFBQVEsQ0FBQyxDQUFDO1lBQzlFLE1BQU0sWUFBWSxtQkFBbUIsSUFBSSxDQUFDLE1BQU07Y0FDOUMsRUFBRSxRQUFRO2NBQ1YsR0FBRyxFQUFFLE9BQU87YUFDYixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNiLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFO2NBQzdDLE1BQU0sU0FBUyxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7Y0FDN0QsY0FBYyxDQUFDLHFCQUFxQixFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDOUM7V0FDRjtTQUNGLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztNQUNILE1BQU0saUJBQWlCLE1BQU0sV0FBVyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDakUsTUFBTSxtQkFBbUIsT0FBTztRQUM5QixJQUFJLEdBQUcsTUFBTSxFQUFFO1VBQ2IsV0FBVyxDQUFDLGFBQWEsRUFBRSxFQUFFLEVBQUUsUUFBUSxZQUFZLFFBQVEsQ0FBQyxNQUFNLGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZGO09BQ0YsQ0FBQztNQUNGLE1BQU0sa0JBQWtCLFNBQVM7UUFDL0IsV0FBVyxDQUFDLGFBQWEsRUFBRSxFQUFFLEVBQUUsUUFBUSxZQUFZLFFBQVEsQ0FBQyxLQUFLLGNBQWMsYUFBYSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7T0FDcEcsQ0FBQztNQUNGLE1BQU0sR0FBRyxDQUFDLFlBQVksRUFBRSxNQUFNO1FBQzVCLE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNuQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDakMsTUFBTSxHQUFHLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDdkMsTUFBTSxHQUFHLENBQUMsV0FBVyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDM0MsTUFBTSxHQUFHLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sR0FBRyxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUMxQyxNQUFNLEdBQUcsQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDMUMsTUFBTSxHQUFHLENBQUMsb0JBQW9CLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNsRCxNQUFNLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7T0FDN0MsQ0FBQyxDQUFDO01BQ0gsTUFBTSxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU07UUFDeEIsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNsQyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUN4QyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUM1QyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDM0MsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUMzQyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUM3QyxXQUFXLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLFlBQVksT0FBTyxFQUFFLENBQUM7UUFDdEIsV0FBVyxPQUFPLEVBQUUsQ0FBQztRQUNyQixVQUFVLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLFNBQVMsT0FBTyxFQUFFLENBQUM7UUFDbkIsZUFBZSxPQUFPLEVBQUUsQ0FBQztPQUMxQixDQUFDLENBQUM7TUFDSCxNQUFNLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTTtRQUN4QixNQUFNLENBQUM7VUFDTCxVQUFVO1VBQ1YsR0FBRyxhQUFhO1NBQ2pCLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDakIsTUFBTSxDQUFDO1VBQ0wsVUFBVTtVQUNWLEdBQUcsYUFBYTtTQUNqQixFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO09BQ3RCLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxVQUFVLFVBQVUsQ0FBQztJQUMzQixNQUFNLFdBQVcsUUFBUSxDQUFDOztJQUUxQixNQUFNLFdBQVcsVUFBVSxDQUFDO01BQzFCLFNBQVMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO01BQ3pCLFVBQVUsQ0FBQyxVQUFVLENBQUM7TUFDdEIsU0FBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUM7TUFDNUIsZ0JBQWdCLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ3RELENBQUMsQ0FBQztJQUNILE1BQU0sbUJBQW1CLE9BQU8sRUFBRSxZQUFZLFFBQVEsQ0FBQyxDQUFDLFNBQVMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEYsTUFBTSxZQUFZLFFBQVEsQ0FBQztNQUN6QixNQUFNLE9BQU87TUFDYixXQUFXLGdCQUFnQjtLQUM1QixDQUFDLENBQUM7SUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN4QyxNQUFNLE9BQU8sVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDOztJQUV0QyxNQUFNLFlBQVksMENBQTBDO01BQzFELE1BQU0sV0FBVyxpQkFBaUI7UUFDaEMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1VBQ2hDLE9BQU8sTUFBTSxDQUFDLDhGQUE4RixDQUFDLENBQUM7VUFDOUcsTUFBTSxJQUFJLEtBQUssQ0FBQyw4RkFBOEYsQ0FBQyxDQUFDO1NBQ2pILEVBQUUsYUFBYTtVQUNkLE1BQU0sWUFBWSxTQUFTLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztVQUNoRCxNQUFNLG1CQUFtQixLQUFLLE9BQU8sQ0FBQztVQUN0QyxNQUFNLGdCQUFnQixnQkFBZ0IsR0FBRyxTQUFTLE9BQU8sQ0FBQztVQUMxRCxNQUFNLGFBQWEsYUFBYSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsYUFBYSxFQUFFLE1BQU0sTUFBTSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztVQUM1RixNQUFNLGdCQUFnQixTQUFTLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1VBQ3hELE1BQU0sQ0FBQyxhQUFhLEVBQUUsUUFBUSxTQUFTLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztVQUNqRSxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsU0FBUyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7VUFDOUQsTUFBTSxhQUFhLFNBQVMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1VBQ2pELE1BQU0sQ0FBQyxVQUFVLEVBQUUsYUFBYTtZQUM5QixNQUFNLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztXQUMzQyxDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxRQUFRLE1BQU0sTUFBTSxHQUFHO1FBQzNCLFlBQVksQ0FBQyxTQUFTLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsQyxZQUFZLEVBQUU7T0FDZixHQUFHO1FBQ0YsWUFBWSxFQUFFO1FBQ2QsVUFBVTtPQUNYLENBQUM7TUFDRixNQUFNLG1CQUFtQixhQUFhLE1BQU0sTUFBTSxHQUFHLFFBQVEsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQ3BILE9BQU87UUFDTCxLQUFLLE1BQU0sSUFBSTtRQUNmLEtBQUssTUFBTSxJQUFJO1FBQ2YsWUFBWSxLQUFLLFdBQVc7UUFDNUIsWUFBWSxPQUFPLENBQUMsTUFBTSxlQUFlLEVBQUUsS0FBSyxXQUFXLENBQUM7UUFDNUQsTUFBTSxFQUFFLFFBQVEsRUFBRTtPQUNuQixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sYUFBYSxTQUFTLENBQUM7TUFDM0IsTUFBTSxJQUFJLEVBQUU7TUFDWixjQUFjLFFBQVEsRUFBRTtNQUN4QixZQUFZLE9BQU8sRUFBRTtNQUNyQixTQUFTLFNBQVM7TUFDbEIsTUFBTTtRQUNKLFVBQVUsdUJBQXVCO1VBQy9CLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUM1QjtPQUNGO0tBQ0YsQ0FBQyxDQUFDOztJQUVILE1BQU0sV0FBVyxVQUFVLENBQUM7TUFDMUIsVUFBVSxDQUFDLEtBQUssQ0FBQztNQUNqQixTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQztNQUN4QixLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUN4QyxDQUFDLENBQUM7SUFDSCxNQUFNLGdCQUFnQixPQUFPLEVBQUUsWUFBWSxRQUFRLENBQUMsQ0FBQyxTQUFTLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLE1BQU0sVUFBVSxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDakMsTUFBTSxRQUFRO1FBQ2QsV0FBVyxhQUFhO09BQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRVAsTUFBTSxZQUFZLDJDQUEyQztNQUMzRCxNQUFNLFlBQVkscUJBQXFCO1FBQ3JDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTTtVQUNwQyxPQUFPLE1BQU0sQ0FBQyw0RkFBNEYsQ0FBQyxDQUFDO1VBQzVHLE1BQU0sSUFBSSxLQUFLLENBQUMsNEZBQTRGLENBQUMsQ0FBQztTQUMvRyxFQUFFLGFBQWE7VUFDZCxTQUFTLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDbEMsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sb0JBQW9CLGFBQWEsTUFBTSxNQUFNLEdBQUcsUUFBUSxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDdEgsTUFBTSxRQUFRLE1BQU0sTUFBTSxHQUFHO1FBQzNCLFlBQVksQ0FBQyxTQUFTLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsQyxZQUFZLEVBQUU7T0FDZixHQUFHO1FBQ0YsWUFBWSxFQUFFO1FBQ2QsVUFBVTtPQUNYLENBQUM7TUFDRixPQUFPO1FBQ0wsS0FBSyxNQUFNLElBQUk7UUFDZixLQUFLLE1BQU0sSUFBSTtRQUNmLFlBQVksS0FBSyxXQUFXO1FBQzVCLFlBQVksT0FBTyxDQUFDLE1BQU0sa0JBQWtCLEVBQUUsS0FBSyxXQUFXLENBQUM7UUFDL0QsTUFBTTtVQUNKLFNBQVM7VUFDVCxTQUFTLElBQUk7U0FDZDtRQUNELGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLE9BQU8sRUFBRSxFQUFFO09BQ25ELENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxVQUFVLFNBQVMsQ0FBQztNQUN4QixNQUFNLFNBQVM7TUFDZixjQUFjLFFBQVEsRUFBRTtNQUN4QixZQUFZLE9BQU8sRUFBRTtNQUNyQixTQUFTLFNBQVM7TUFDbEIsTUFBTTtRQUNKLFdBQVcsMkJBQTJCO1VBQ3BDLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNqQztPQUNGO0tBQ0YsQ0FBQyxDQUFDOztJQUVILE1BQU0sVUFBVSxJQUFJLENBQUM7SUFDckIsTUFBTSxhQUFhLEtBQUssQ0FBQztJQUN6QixNQUFNLGtCQUFrQixVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7O0lBRXZDLElBQUksNEJBQTRCLE1BQU0sT0FBTyxDQUFDO1FBQzFDLFdBQVcsSUFBSTtRQUNmLE9BQU8sT0FBTztRQUNkLFVBQVUsVUFBVTtRQUNwQixlQUFlLGVBQWU7S0FDakMsQ0FBQyxDQUFDOztJQUVILE1BQU0sa0JBQWtCLFdBQVc7TUFDakMsTUFBTSxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQzNELE1BQU0saUJBQWlCLE9BQU8sR0FBRyxRQUFRLEtBQUssRUFBRSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUN6RSxPQUFPLGNBQWMsUUFBUSxDQUFDLE1BQU07UUFDbEMsTUFBTSxTQUFTLFlBQVksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVTtVQUNwQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1VBQ3pCLE1BQU0saUJBQWlCLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztVQUM1QyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7VUFDakIsT0FBTyxjQUFjLENBQUM7U0FDdkIsQ0FBQyxDQUFDO09BQ0osQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sWUFBWSxXQUFXLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRTVHLE1BQU0sU0FBUywrQkFBK0I7TUFDNUMsTUFBTSxPQUFPLFNBQVMsUUFBUSxDQUFDO01BQy9CLEtBQUssQ0FBQyxJQUFJLEVBQUUsY0FBYyxnQkFBZ0IsQ0FBQyxDQUFDO01BQzVDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxhQUFhLENBQUMsQ0FBQztNQUM1QyxLQUFLLENBQUMsSUFBSSxFQUFFLGNBQWMsWUFBWSxDQUFDLENBQUM7TUFDeEMsY0FBYyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDbEMsQ0FBQztJQUNGLE1BQU0sWUFBWSwrQkFBK0I7TUFDL0MsTUFBTSxPQUFPLFNBQVMsUUFBUSxDQUFDO01BQy9CLEtBQUssQ0FBQyxJQUFJLEVBQUUsY0FBYyxnQkFBZ0IsQ0FBQyxDQUFDO01BQzVDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxZQUFZLENBQUMsQ0FBQztNQUMzQyxLQUFLLENBQUMsSUFBSSxFQUFFLGNBQWMsYUFBYSxDQUFDLENBQUM7TUFDekMsY0FBYyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDbEMsQ0FBQztJQUNGLE1BQU0scUJBQXFCLGlCQUFpQixHQUFHLEVBQUUsR0FBRyxNQUFNLE9BQU8sSUFBSSxHQUFHLE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQztJQUMzRixNQUFNLHlCQUF5QixpQkFBaUIsR0FBRyxFQUFFLElBQUksTUFBTSxFQUFFLENBQUM7SUFDbEUsTUFBTSw0QkFBNEIsaUJBQWlCLEdBQUcsT0FBTyxJQUFJLE1BQU0sT0FBTyxDQUFDO0lBQy9FLE1BQU0sbUJBQW1CLDhCQUE4QjtNQUNyRCxVQUFVLEtBQUs7TUFDZixLQUFLO01BQ0wsTUFBTSxRQUFRLE9BQU8sRUFBRSxHQUFHLE1BQU0sRUFBRTtLQUNuQyxDQUFDLENBQUM7SUFDSCxNQUFNLHNCQUFzQiw4QkFBOEI7TUFDeEQsVUFBVSxRQUFRO01BQ2xCLEtBQUs7TUFDTCxTQUFTLE1BQU0sT0FBTyxHQUFHLFFBQVEsT0FBTyxPQUFPO0tBQ2hELENBQUMsQ0FBQztJQUNILE1BQU0sd0JBQXdCLFVBQVU7TUFDdEMsT0FBTyxNQUFNLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7S0FDcEMsQ0FBQztJQUNGLE1BQU0scUJBQXFCLDZCQUE2QjtNQUN0RCxNQUFNLFNBQVMsTUFBTSxJQUFJLENBQUM7TUFDMUIsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLE1BQU0sUUFBUSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUM1QyxPQUFPLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUTtRQUM1QixRQUFRLElBQUk7YUFDUCxRQUFRO1VBQ1gsT0FBTyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsRUFBRSxRQUFRLE9BQU8sQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO2FBQ3JJLEtBQUs7VUFDUixPQUFPLENBQUMsc0JBQXNCLENBQUMsR0FBRyxFQUFFLFFBQVEsT0FBTyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7O1VBRWxJLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztTQUN4QjtPQUNGLENBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0tBQ25DLENBQUM7SUFDRixNQUFNLG9CQUFvQiwwQkFBMEIsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRO01BQ3hFLFFBQVEsSUFBSTtXQUNQLFFBQVE7UUFDWCxPQUFPLHlCQUF5QixDQUFDLEdBQUcsRUFBRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO1dBQ3BELEtBQUs7UUFDUixPQUFPLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO09BQ3JEO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxvQkFBb0IsbUJBQW1CO01BQzNDLE1BQU0sU0FBUyxRQUFRLGFBQWEsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsYUFBYSxTQUFTLGFBQWEsSUFBSSxHQUFHLE9BQU8sRUFBRSxHQUFHLFNBQVMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO01BQ3ZKLE9BQU8sYUFBYSxDQUFDLEdBQUcsT0FBTyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDNUMsQ0FBQztJQUNGLE1BQU0saUJBQWlCLG1CQUFtQjtNQUN4QyxNQUFNLFNBQVMsUUFBUSxhQUFhLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxhQUFhLEdBQUcsRUFBRSxHQUFHLFNBQVMsaUJBQWlCLEdBQUcsU0FBUyxhQUFhLENBQUMsQ0FBQztNQUN2SSxPQUFPLGFBQWEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNyQyxDQUFDO0lBQ0YsTUFBTSxXQUFXLDJCQUEyQixLQUFLLGNBQWMsRUFBRSxJQUFJLENBQUMsT0FBTztNQUMzRSxNQUFNLEtBQUssaUJBQWlCLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQzVDLE9BQU87UUFDTCxLQUFLLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELFVBQVUsR0FBRyxTQUFTO09BQ3ZCLENBQUM7S0FDSCxDQUFDLENBQUM7SUFDSCxNQUFNLGFBQWEsMENBQTBDO01BQzNELE1BQU0sS0FBSyxjQUFjLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQ3pDLE1BQU0sV0FBVyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztNQUNoRSxLQUFLLGNBQWMsQ0FBQztRQUNsQixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDdEIsVUFBVSxLQUFLLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLFFBQVE7UUFDN0MsUUFBUSxRQUFRO1FBQ2hCLFVBQVUsUUFBUSxTQUFTO09BQzVCLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLG1CQUFtQiwwQ0FBMEM7TUFDakUsS0FBSyxjQUFjLEVBQUUsS0FBSyxDQUFDLE1BQU0sVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO0tBQ2hHLENBQUM7SUFDRixNQUFNLG1CQUFtQixzQkFBc0IsS0FBSyxjQUFjLEVBQUUsS0FBSyxDQUFDLFlBQVk7TUFDcEYsSUFBSSxFQUFFLENBQUM7TUFDUCxLQUFLLGdCQUFnQixFQUFFLENBQUM7TUFDeEIsUUFBUSxRQUFRLFNBQVM7V0FDcEIsUUFBUTtRQUNYLE9BQU8sUUFBUSxLQUFLLENBQUMsRUFBRSxPQUFPLFFBQVEsRUFBRSxDQUFDLENBQUM7V0FDdkMsVUFBVTtRQUNiLE1BQU0sZUFBZSxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sWUFBWSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdEMsTUFBTSxjQUFjLENBQUMsS0FBSyxZQUFZLElBQUksVUFBVSxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN6RixPQUFPLFFBQVEsS0FBSyxDQUFDO1VBQ25CLE9BQU8sVUFBVTtVQUNqQixhQUFhLGFBQWEsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFFBQVEsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxRQUFRLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsU0FBUyxFQUFFLEdBQUcsV0FBVyxDQUFDLEVBQUUsS0FBSyxDQUFDLFFBQVEsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxTQUFTLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxRQUFRLE1BQU0sRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsU0FBUyxPQUFPLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQztTQUMvVSxDQUFDLENBQUM7O1FBRUgsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxxQkFBcUIsMkJBQTJCLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssaUJBQWlCLENBQUMsS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxLQUFLLGdCQUFnQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNoTixNQUFNLDBCQUEwQixZQUFZO01BQzFDLFFBQVEsUUFBUSxTQUFTO1dBQ3BCLEtBQUssRUFBRTtVQUNSLE9BQU8sUUFBUSxLQUFLLENBQUM7WUFDbkIsT0FBTyxPQUFPO1lBQ2QsYUFBYSxhQUFhLENBQUMsT0FBTyxFQUFFLFFBQVEsS0FBSyxDQUFDLFFBQVEsTUFBTSxDQUFDLEVBQUUsUUFBUSxLQUFLLENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRSxRQUFRLEtBQUssRUFBRSxFQUFFLFFBQVEsS0FBSyxFQUFFLENBQUM7V0FDbkksQ0FBQyxDQUFDO1NBQ0o7V0FDRSxRQUFRLEVBQUU7VUFDWCxPQUFPLFFBQVEsS0FBSyxDQUFDO1lBQ25CLE9BQU8sT0FBTztZQUNkLGFBQWEsYUFBYSxDQUFDLE9BQU8sRUFBRSxRQUFRLEtBQUssQ0FBQyxRQUFRLE1BQU0sQ0FBQyxFQUFFLFFBQVEsS0FBSyxFQUFFLEVBQUUsUUFBUSxLQUFLLEVBQUUsRUFBRSxRQUFRLEtBQUssQ0FBQyxRQUFRLFFBQVEsQ0FBQyxDQUFDO1dBQ3RJLENBQUMsQ0FBQztTQUNKOztRQUVELE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN4QjtLQUNGLENBQUM7SUFDRixNQUFNLGtCQUFrQiwyQkFBMkI7TUFDakQsTUFBTSxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN4QixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7TUFDckIsTUFBTSxXQUFXLGtCQUFrQixDQUFDLEtBQUssU0FBUyxFQUFFLEVBQUU7UUFDcEQsS0FBSyxNQUFNO1FBQ1gsR0FBRztPQUNKLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDYixJQUFJLFFBQVEsU0FBUyxLQUFLLEtBQUssSUFBSSxRQUFRLFNBQVMsS0FBSyxRQUFRLEVBQUU7UUFDakUsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNqRCxPQUFPLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO09BQzFDLE1BQU07UUFDTCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEI7S0FDRixDQUFDO0lBQ0YsTUFBTSxrQ0FBa0MsMkJBQTJCO01BQ2pFLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07UUFDN0QsT0FBTyxRQUFRLGFBQWEsS0FBSyxDQUFDLEtBQUssUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsZUFBZSxLQUFLO1VBQ2hHLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztVQUNyQixNQUFNLFFBQVEscUJBQXFCLENBQUM7WUFDbEMsS0FBSyxNQUFNO1lBQ1gsR0FBRztXQUNKLENBQUMsQ0FBQztVQUNILE1BQU0sV0FBVyxRQUFRLEtBQUssS0FBSyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztVQUMvSCxPQUFPLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzFDLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFdBQVcsZ0NBQWdDO01BQy9DLE1BQU0sT0FBTyxTQUFTLFFBQVEsQ0FBQztNQUMvQixNQUFNLFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDekQsT0FBTyxRQUFRLEdBQUcsK0JBQStCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNuSCxDQUFDO0lBQ0YsTUFBTSwyQkFBMkIsZ0NBQWdDO01BQy9ELE1BQU0sT0FBTyxTQUFTLFFBQVEsQ0FBQztNQUMvQixPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQzVGLENBQUM7SUFDRixNQUFNLGdCQUFnQix3Q0FBd0M7TUFDNUQsTUFBTSxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN4QixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7TUFDckIsTUFBTSxRQUFRLHFCQUFxQixDQUFDO1FBQ2xDLEtBQUssTUFBTTtRQUNYLEdBQUc7T0FDSixDQUFDLENBQUM7TUFDSCxNQUFNLFdBQVcsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDdEQsSUFBSSxRQUFRLFNBQVMsS0FBSyxRQUFRLElBQUksUUFBUSxTQUFTLEtBQUssS0FBSyxFQUFFO1FBQ2pFLGdCQUFnQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2RCxPQUFPLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO09BQzFDLE1BQU07UUFDTCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEI7S0FDRixDQUFDOztJQUVGLE1BQU0sZ0JBQWdCLDhCQUE4QjtNQUNsRCxLQUFLLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUN2QixNQUFNLENBQUM7UUFDTCxNQUFNO1FBQ04sT0FBTztRQUNQLEtBQUs7UUFDTCxRQUFRO1FBQ1IsVUFBVTtPQUNYLEVBQUUsUUFBUSxRQUFRLENBQUMsU0FBUyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUM5QyxNQUFNLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUM5QixDQUFDO0lBQ0YsTUFBTSxlQUFlLHdDQUF3QztNQUMzRCxNQUFNLFdBQVcsUUFBUSxTQUFTLEtBQUssT0FBTyxDQUFDO01BQy9DLEtBQUssVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQzFCLGdCQUFnQixDQUFDLFNBQVMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQzlDLE1BQU0sU0FBUyxRQUFRLEdBQUcsTUFBTSxTQUFTLEdBQUcsTUFBTSxXQUFXLENBQUM7TUFDOUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ25CLENBQUM7SUFDRixNQUFNLG1CQUFtQixxQ0FBcUMsZ0JBQWdCLEtBQUssS0FBSztNQUN0RixNQUFNLFdBQVcsS0FBSyxDQUFDLGVBQWU7UUFDcEMsV0FBVyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPO1VBQzdDLE1BQU0sWUFBWSxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsUUFBUSxPQUFPLENBQUMsQ0FBQztVQUMzRCxJQUFJLFNBQVMsS0FBSyxLQUFLLFVBQVUsRUFBRSxFQUFFO1lBQ25DLEtBQUssV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVCLElBQUksYUFBYSxJQUFJLENBQUMsU0FBUyxFQUFFO2NBQy9CLEtBQUssQ0FBQyxTQUFTLFFBQVEsRUFBRSxDQUFDLFdBQVcsYUFBYSxDQUFDLENBQUMsQ0FBQztjQUNyRCxXQUFXLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUMvQixNQUFNO2NBQ0wsTUFBTSxTQUFTLFNBQVMsR0FBRyxNQUFNLEdBQUcsU0FBUyxDQUFDO2NBQzlDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7YUFDaEM7V0FDRjtTQUNGLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGtCQUFrQiwrQ0FBK0M7TUFDckUsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzNELFlBQVksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLFlBQVksQ0FBQyxDQUFDO0tBQzNELENBQUM7SUFDRixNQUFNLGFBQWEsK0NBQStDO01BQ2hFLFFBQVEsS0FBSyxNQUFNO1dBQ2QsUUFBUSxFQUFFO1VBQ1gsT0FBTyxhQUFhLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNoRDtXQUNFLFVBQVUsRUFBRTtVQUNiLE9BQU8sWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssWUFBWSxDQUFDLENBQUM7U0FDbEU7V0FDRSxPQUFPLEVBQUU7VUFDVixPQUFPLGVBQWUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDbkU7T0FDRjtLQUNGLENBQUM7SUFDRixNQUFNLGtCQUFrQiw4QkFBOEI7TUFDcEQsTUFBTSxXQUFXLE1BQU0sYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQ2hELGdCQUFnQixDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQ3JELFFBQVEsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUztRQUNqRCxVQUFVLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ3ZELENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGdCQUFnQiw4QkFBOEI7TUFDbEQsTUFBTSxPQUFPLFNBQVMsUUFBUSxDQUFDO01BQy9CLEtBQUssVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQ3ZCLE1BQU0sV0FBVyxNQUFNLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUNoRCx3QkFBd0IsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMseUJBQXlCO1FBQ2pGLFFBQVEscUJBQXFCLE1BQU07YUFDOUIsUUFBUSxFQUFFO1lBQ1gsYUFBYSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDeEMsTUFBTTtXQUNQO2FBQ0UsVUFBVSxFQUFFO1lBQ2IsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixZQUFZLENBQUMsQ0FBQztZQUMxRSxNQUFNO1dBQ1A7U0FDRjtPQUNGLENBQUMsQ0FBQztNQUNILEtBQUssV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3ZCLE1BQU0sV0FBVyxLQUFLLENBQUMsZUFBZTtRQUNwQyxRQUFRLENBQUMsSUFBSSxFQUFFO1VBQ2IsV0FBVyxZQUFZO1VBQ3ZCLFdBQVcsYUFBYTtVQUN4QixXQUFXLGdCQUFnQjtTQUM1QixDQUFDLENBQUM7UUFDSCxXQUFXLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztPQUMvQixDQUFDLENBQUM7TUFDSCxTQUFTLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNyQyxDQUFDO0lBQ0YsTUFBTSxZQUFZLDhCQUE4QjtNQUM5QyxJQUFJLFNBQVMsVUFBVSxFQUFFLFlBQVksRUFBRSxFQUFFO1FBQ3ZDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQzNDO0tBQ0YsQ0FBQztJQUNGLE1BQU0sUUFBUSw4QkFBOEI7TUFDMUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxFQUFFO1FBQ3BCLGFBQWEsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ3pDO0tBQ0YsQ0FBQztJQUNGLE1BQU0sd0JBQXdCLGVBQWUsOEJBQThCO01BQ3pFLE1BQU0sV0FBVyxNQUFNLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUNoRCxNQUFNLFdBQVcsYUFBYSxDQUFDLFNBQVMsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDaEYsUUFBUSxLQUFLLENBQUMsU0FBUztRQUNyQixlQUFlLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQzVELENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGlCQUFpQixxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sb0JBQW9CLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDckUsTUFBTSxhQUFhLDhCQUE4QixLQUFLLFNBQVMsRUFBRSxDQUFDO0lBQ2xFLE1BQU0sV0FBVyxxQ0FBcUMsS0FBSyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUUsTUFBTSxXQUFXLDhCQUE4QixLQUFLLFNBQVMsRUFBRSxDQUFDOztJQUVoRSxJQUFJLDJCQUEyQixNQUFNLE9BQU8sQ0FBQztRQUN6QyxXQUFXLElBQUk7UUFDZixTQUFTLFNBQVM7UUFDbEIsT0FBTyxLQUFLO1FBQ1osVUFBVSxVQUFVO1FBQ3BCLFVBQVUsUUFBUTtRQUNsQixVQUFVLFFBQVE7UUFDbEIsZ0JBQWdCLGNBQWM7UUFDOUIsbUJBQW1CLGlCQUFpQjtLQUN2QyxDQUFDLENBQUM7O0lBRUgsTUFBTSxXQUFXLHlCQUF5QixRQUFRLENBQUM7TUFDakQsV0FBVyxDQUFDLGFBQWEsRUFBRSxFQUFFLCtCQUErQjtRQUMxRCxRQUFRLFdBQVcsS0FBSyxDQUFDLGVBQWU7VUFDdEMsSUFBSSxHQUFHLENBQUMsU0FBUyxRQUFRLEVBQUUsV0FBVyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQ3ZELFFBQVEsQ0FBQyxTQUFTLFFBQVEsRUFBRTtjQUMxQixXQUFXLGdCQUFnQjtjQUMzQixXQUFXLFlBQVk7YUFDeEIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxTQUFTLFNBQVMsVUFBVSxFQUFFLEdBQUcsV0FBVyxRQUFRLEdBQUcsV0FBVyxTQUFTLENBQUM7WUFDbEYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1dBQ25CO1VBQ0QsY0FBYyxLQUFLLEVBQUUsQ0FBQztTQUN2QixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsS0FBSyxDQUFDLFlBQVksRUFBRSxFQUFFLGtCQUFrQjtRQUN0QyxTQUFTLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztPQUMzQyxDQUFDO01BQ0YsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEVBQUUsa0JBQWtCO1FBQy9DLFNBQVMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO09BQzNDLENBQUM7TUFDRixLQUFLLENBQUMsWUFBWSxFQUFFLEVBQUUsa0JBQWtCO1FBQ3RDLEtBQUssQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO09BQ3ZDLENBQUM7S0FDSCxDQUFDLENBQUM7O0lBRUgsSUFBSSw2QkFBNkIsTUFBTSxPQUFPLENBQUM7UUFDM0MsV0FBVyxJQUFJO1FBQ2YsUUFBUSxRQUFRO0tBQ25CLENBQUMsQ0FBQzs7SUFFSCxJQUFJLGdCQUFnQjtNQUNsQixXQUFXLENBQUMsWUFBWSxFQUFFO1FBQ3hCLGNBQWMsQ0FBQyxhQUFhLENBQUM7UUFDN0IsY0FBYyxDQUFDLGNBQWMsQ0FBQztRQUM5QixjQUFjLENBQUMsaUJBQWlCLENBQUM7UUFDakMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDO1FBQy9CLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDbkIsU0FBUyxDQUFDLFNBQVMsQ0FBQztRQUNwQixTQUFTLENBQUMsUUFBUSxDQUFDO1FBQ25CLFNBQVMsQ0FBQyxVQUFVLENBQUM7T0FDdEIsQ0FBQztNQUNGLGlCQUFpQixDQUFDLGNBQWMsRUFBRSxPQUFPO1FBQ3ZDLFFBQVEsR0FBRyxFQUFFO1FBQ2IsY0FBYyxRQUFRLEtBQUssRUFBRTtPQUM5QixDQUFDLENBQUM7TUFDSCxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7UUFDeEIsS0FBSztRQUNMLFFBQVE7T0FDVCxFQUFFLE1BQU0sQ0FBQztNQUNWLFNBQVMsQ0FBQyxVQUFVLENBQUM7TUFDckIsU0FBUyxDQUFDLFlBQVksQ0FBQztLQUN4QixDQUFDOztJQUVGLE1BQU0sU0FBUyxRQUFRO01BQ3JCLE1BQU0sU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDM0IsTUFBTSxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUMzQixNQUFNLGdCQUFnQixPQUFPLEVBQUUsQ0FBQztNQUNoQyxNQUFNLFFBQVEsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLENBQUM7TUFDL0IsTUFBTSxZQUFZLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxJQUFJLEVBQUUsRUFBRSxXQUFXLEdBQUcsT0FBTyxJQUFJLEVBQUUsRUFBRSxTQUFTLEdBQUcsS0FBSyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUNySCxPQUFPLElBQUksQ0FBQztRQUNWLFVBQVUsTUFBTSxJQUFJO1FBQ3BCLFdBQVcsTUFBTSxJQUFJO1FBQ3JCLGVBQWUsYUFBYSxJQUFJO1FBQ2hDLGVBQWUsYUFBYSxJQUFJO1FBQ2hDLGlCQUFpQixhQUFhLE1BQU07UUFDcEMsV0FBVyxPQUFPLElBQUk7UUFDdEIsWUFBWSxPQUFPLElBQUk7UUFDdkIsVUFBVSxLQUFLLElBQUk7UUFDbkIsVUFBVSxLQUFLLElBQUk7UUFDbkIsU0FBUztPQUNWLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsSUFBSSw0QkFBNEIsTUFBTSxPQUFPLENBQUM7UUFDMUMsV0FBVyxJQUFJO1FBQ2YsTUFBTSxNQUFNO0tBQ2YsQ0FBQyxDQUFDOztJQUVILE1BQU0sVUFBVSxRQUFRLENBQUM7TUFDdkIsUUFBUSxhQUFhO01BQ3JCLE1BQU0sU0FBUztNQUNmLFFBQVEsYUFBYTtNQUNyQixNQUFNLFdBQVc7TUFDakIsT0FBTyxZQUFZO0tBQ3BCLENBQUMsQ0FBQzs7SUFFSCxNQUFNLHNCQUFzQixVQUFVLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQzs7SUFFNUUsTUFBTSxhQUFhO01BQ2pCLGFBQWEsd0JBQXdCO01BQ3JDLGNBQWMseUJBQXlCO01BQ3ZDLGlCQUFpQiw0QkFBNEI7S0FDOUMsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLGdDQUFnQyxDQUFDO0lBQzdELE1BQU0sdUJBQXVCLGlDQUFpQyxDQUFDO0lBQy9ELE1BQU0seUJBQXlCLHdCQUF3QjtNQUNyRCxNQUFNLE1BQU0sT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO01BQ3JDLE1BQU0sTUFBTSxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7TUFDekMsTUFBTSxhQUFhLEdBQUcsSUFBSSxZQUFZLENBQUM7TUFDdkMsTUFBTSxZQUFZLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUM3QixNQUFNLGdCQUFnQixZQUFZLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ2xELE1BQU0sWUFBWSxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7TUFDNUMsTUFBTSxlQUFlLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztNQUMxQyxNQUFNLFlBQVksU0FBUyxFQUFFLENBQUM7TUFDOUIsTUFBTSxlQUFlLFNBQVMsR0FBRyxZQUFZLENBQUM7TUFDOUMsTUFBTSxrQkFBa0IsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDO01BQ3BELE1BQU0scUJBQXFCLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztNQUNsRCxNQUFNLGtCQUFrQixlQUFlLElBQUksQ0FBQztNQUM1QyxNQUFNLHFCQUFxQixlQUFlLEdBQUcsa0JBQWtCLENBQUM7TUFDaEUsTUFBTSwwQkFBMEIsSUFBSSxJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQzlFLE1BQU0sNkJBQTZCLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLFNBQVMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ25HLElBQUksdUJBQXVCLElBQUksU0FBUyxHQUFHLGtCQUFrQixFQUFFO1FBQzdELEVBQUUsQ0FBQyxTQUFTLEtBQUssRUFBRSxTQUFTLEdBQUcsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLENBQUM7T0FDekQsTUFBTSxJQUFJLDBCQUEwQixJQUFJLFlBQVksR0FBRyxlQUFlLEVBQUU7UUFDdkUsTUFBTSxJQUFJLFNBQVMsR0FBRyxVQUFVLEdBQUcsWUFBWSxHQUFHLGtCQUFrQixDQUFDO1FBQ3JFLEVBQUUsQ0FBQyxTQUFTLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7T0FDNUI7S0FDRixDQUFDO0lBQ0YsTUFBTSxlQUFlLGtCQUFrQixVQUFVLENBQUMsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEYsTUFBTSwwQkFBMEIsVUFBVTtNQUN4QyxNQUFNLG9CQUFvQixPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUNwSixNQUFNLE1BQU0sTUFBTSxRQUFRLENBQUM7TUFDM0IsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYztRQUNwQyxNQUFNLFVBQVUsVUFBVSxHQUFHLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pELElBQUksT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7VUFDNUIsTUFBTSxjQUFjLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztVQUN0QyxLQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUM7VUFDeEMsS0FBSyxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7U0FDM0QsTUFBTTtVQUNMLFFBQVEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7VUFDdkIsUUFBUSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUMvQjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLHVCQUF1Qix1QkFBdUI7TUFDbEQsSUFBSSxPQUFPLEVBQUU7UUFDWCxRQUFRLENBQUMsUUFBUSxFQUFFLFVBQVUsYUFBYSxDQUFDLENBQUM7UUFDNUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtVQUNkLFVBQVUsZ0JBQWdCO1VBQzFCLFVBQVUsWUFBWTtTQUN2QixDQUFDLENBQUM7T0FDSixNQUFNO1FBQ0wsUUFBUSxDQUFDLFFBQVEsRUFBRSxVQUFVLFlBQVksQ0FBQyxDQUFDO1FBQzNDLEtBQUssQ0FBQyxRQUFRLEVBQUU7VUFDZCxVQUFVLGFBQWE7VUFDdkIsVUFBVSxnQkFBZ0I7U0FDM0IsQ0FBQyxDQUFDO09BQ0o7S0FDRixDQUFDO0lBQ0YsTUFBTSxzQkFBc0Isb0JBQW9CO01BQzlDLE1BQU0sa0JBQWtCLFlBQVksUUFBUSxDQUFDLE1BQU0sYUFBYSxFQUFFLENBQUMsQ0FBQztNQUNwRSxJQUFJLE1BQU0sRUFBRTtRQUNWLEtBQUssQ0FBQyxlQUFlLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUM1QyxRQUFRLENBQUMsZUFBZSxFQUFFLG9CQUFvQixDQUFDLENBQUM7T0FDakQsTUFBTTtRQUNMLEtBQUssQ0FBQyxlQUFlLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUM3QyxRQUFRLENBQUMsZUFBZSxFQUFFLG1CQUFtQixDQUFDLENBQUM7T0FDaEQ7S0FDRixDQUFDO0lBQ0YsTUFBTSxlQUFlLDZCQUE2QjtNQUNoRCxNQUFNLFdBQVcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO01BQ3RDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLEVBQUUsWUFBWSxRQUFRLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztLQUNyTixDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsdUJBQXVCLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsUUFBUSxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekksTUFBTSxVQUFVLHlDQUF5QztNQUN2RCxJQUFJLENBQUMsTUFBTSxPQUFPLEVBQUU7UUFDbEIsSUFBSSxDQUFDLGVBQWUsT0FBTyxrQkFBa0IsRUFBRSxFQUFFO1VBQy9DLE1BQU0sR0FBRyxDQUFDLGNBQWMsRUFBRSxNQUFNO1lBQzlCLFVBQVUsRUFBRSxLQUFLLENBQUMsT0FBTyxNQUFNLENBQUMsQ0FBQztXQUNsQyxDQUFDLENBQUM7U0FDSjtRQUNELE1BQU0sR0FBRyxDQUFDLDJCQUEyQixFQUFFLE1BQU07VUFDM0MsVUFBVSxFQUFFLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQzVDLENBQUMsQ0FBQztRQUNILE1BQU0sR0FBRyxDQUFDLFlBQVksRUFBRSxNQUFNO1VBQzVCLFVBQVUsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUN0RSxDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRSxNQUFNO1VBQ3hDLFVBQVUsRUFBRSxLQUFLLENBQUMsT0FBTyxNQUFNLENBQUMsQ0FBQztTQUNsQyxDQUFDLENBQUM7T0FDSjtNQUNELE1BQU0sR0FBRyxDQUFDLHFCQUFxQixFQUFFLEtBQUs7UUFDcEMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1VBQzFCLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1VBQ3hCLE1BQU0sYUFBYSxNQUFNLFFBQVEsQ0FBQztVQUNsQyxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN6QixzQkFBc0IsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7V0FDdkM7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDLENBQUM7TUFDSCxNQUFNLEdBQUcsQ0FBQyxZQUFZLEVBQUUsTUFBTTtRQUM1QixtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDcEMsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sV0FBVyxjQUFjLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9FLE1BQU0sc0JBQXNCLE1BQU0sQ0FBQyxTQUFTLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxXQUFXLHVCQUF1QixFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4SSxNQUFNLGdCQUFnQiw2QkFBNkI7TUFDakQsTUFBTSxhQUFhLE9BQU8sRUFBRSxDQUFDO01BQzdCLE1BQU0sV0FBVyxlQUFlLFFBQVEsQ0FBQztNQUN6QyxNQUFNLG1CQUFtQixLQUFLO1FBQzVCLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDO09BQzFDLENBQUM7TUFDRixNQUFNLGtCQUFrQixRQUFRO1FBQzlCLElBQUksQ0FBQyxNQUFNLE9BQU8sRUFBRTtVQUNsQix1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMvQjtRQUNELG1CQUFtQixDQUFDLE1BQU0sRUFBRSxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BELElBQUksVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2RCxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsSUFBSSxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDakYsQ0FBQztNQUNGLE1BQU0sdUJBQXVCLE1BQU0sT0FBTyxHQUFHLEVBQUUsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO01BQ3hFLE9BQU87UUFDTCxRQUFRLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDbkIsT0FBTyxPQUFPLENBQUM7VUFDYixZQUFZO1lBQ1YsYUFBYSxRQUFRO2NBQ25CLE1BQU0sZUFBZSxVQUFVLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQztjQUM5QyxNQUFNLFlBQVksTUFBTSxPQUFPLEdBQUcsTUFBTSx3QkFBd0IsRUFBRSxHQUFHLE1BQU0sYUFBYSxFQUFFLENBQUM7Y0FDM0YsT0FBTyxRQUFRLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUs7Z0JBQ3ZDLE1BQU0sTUFBTSxLQUFLLENBQUMsWUFBWSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0MsTUFBTSxzQkFBc0IscUJBQXFCLENBQUMsTUFBTSxFQUFFLElBQUksUUFBUSxDQUFDLENBQUM7Z0JBQ3hFLE9BQU8sbUJBQW1CLEtBQUssQ0FBQyxNQUFNO2tCQUNwQyxNQUFNLFlBQVksR0FBRyxPQUFPLEdBQUcsWUFBWSxDQUFDO2tCQUM1QyxNQUFNLFdBQVcsR0FBRyxFQUFFLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7a0JBQ3hFLE9BQU8sTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztpQkFDdEQsRUFBRSxhQUFhO2tCQUNkLE1BQU0sb0JBQW9CLFNBQVMsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7a0JBQ25FLE1BQU0scUJBQXFCLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsaUJBQWlCLEVBQUUsR0FBRyxpQkFBaUIsRUFBRSxHQUFHLFlBQVksQ0FBQztrQkFDaEgsT0FBTyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsTUFBTSxFQUFFLGlCQUFpQixPQUFPLEdBQUcsWUFBWSxDQUFDLENBQUM7aUJBQzFILENBQUMsQ0FBQztlQUNKLENBQUMsQ0FBQzthQUNKO1lBQ0QsUUFBUSxNQUFNO2NBQ1osZ0JBQWdCLENBQUMsUUFBUSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUM1RDtZQUNELFNBQVMsUUFBUTtjQUNmLGdCQUFnQixDQUFDLFFBQVEsUUFBUSxDQUFDLElBQUksRUFBRTtnQkFDdEMsVUFBVSxnQkFBZ0I7Z0JBQzFCLFVBQVUsWUFBWTtlQUN2QixDQUFDLENBQUMsQ0FBQztjQUNKLFVBQVUsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRO2dCQUM1QixZQUFZLENBQUMsSUFBSSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2pDLFVBQVUsTUFBTSxFQUFFLENBQUM7ZUFDcEIsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxRQUFRLFFBQVE7Y0FDZCxlQUFlLENBQUMsSUFBSSxRQUFRLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLE1BQU0sRUFBRSxVQUFVLElBQUksQ0FBQyxDQUFDO2NBQy9FLGdCQUFnQixDQUFDLFFBQVEsb0JBQW9CLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDN0Q7WUFDRCxVQUFVLE1BQU07Y0FDZCxnQkFBZ0IsQ0FBQyxRQUFRLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3hFO1lBQ0QsR0FBRyxVQUFVO1dBQ2Q7VUFDRCxjQUFjLFFBQVE7WUFDcEIsTUFBTSxzQkFBc0IscUJBQXFCLENBQUMsTUFBTSxFQUFFLElBQUksUUFBUSxDQUFDLENBQUM7WUFDeEUsT0FBTyxtQkFBbUIsS0FBSyxDQUFDLE1BQU07Y0FDcEMsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7Y0FDbEMsTUFBTSxTQUFTLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2NBQzlDLE1BQU0sTUFBTSxtQkFBbUIsRUFBRSxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQzdFLE1BQU0sU0FBUyxtQkFBbUIsT0FBTyxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQ3hGLE9BQU87Z0JBQ0wsUUFBUSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxHQUFHLEVBQUUsbUJBQW1CLE1BQU0sRUFBRSxNQUFNLENBQUM7Z0JBQzdFLGNBQWMsUUFBUSxLQUFLLEVBQUU7ZUFDOUIsQ0FBQzthQUNILEVBQUUsTUFBTTtjQUNQLE1BQU0saUJBQWlCLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztjQUN6QyxPQUFPO2dCQUNMLFFBQVEsY0FBYztnQkFDdEIsY0FBYyxRQUFRLEtBQUssQ0FBQztrQkFDMUIsa0JBQWtCLEVBQUUsUUFBUSxJQUFJLFVBQVU7a0JBQzFDLGNBQWMsVUFBVSxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUk7aUJBQ3pDLENBQUM7ZUFDSCxDQUFDO2FBQ0gsQ0FBQyxDQUFDO1dBQ0o7VUFDRCxPQUFPLENBQUMsZUFBZSxPQUFPLGVBQWUsRUFBRSxDQUFDO1VBQ2hELFVBQVUsZUFBZTtVQUN6QixZQUFZLGVBQWU7U0FDNUIsQ0FBQztRQUNGLEdBQUcsb0JBQW9CO09BQ3hCLENBQUM7S0FDSCxDQUFDOztJQUVGLElBQUksNEJBQTRCLE1BQU0sT0FBTyxDQUFDO1FBQzFDLFdBQVcsSUFBSTtRQUNmLE9BQU8sT0FBTztRQUNkLFVBQVUsUUFBUTtRQUNsQixlQUFlLGFBQWE7S0FDL0IsQ0FBQyxDQUFDOztJQUVILE1BQU0sZUFBZSxRQUFRO01BQzNCLE1BQU0sU0FBUyxJQUFJLE9BQU8sQ0FBQztNQUMzQixNQUFNLGtCQUFrQixJQUFJLE9BQU8sR0FBRyxhQUFhLEdBQUcsZUFBZSxDQUFDO01BQ3RFLE9BQU87UUFDTCxLQUFLLElBQUksSUFBSTtRQUNiLEtBQUssSUFBSSxJQUFJO1FBQ2IsWUFBWSxJQUFJLFdBQVc7UUFDM0IsWUFBWSxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLGdCQUFnQixDQUFDLENBQUM7T0FDcEUsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSwyQkFBMkIsS0FBSyxDQUFDO01BQ3JDLElBQUk7TUFDSixVQUFVLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQztRQUN4QixRQUFRLENBQUM7VUFDUCxNQUFNO1VBQ04sZUFBZSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUM7U0FDakMsQ0FBQztRQUNGLE1BQU07T0FDUCxDQUFDLENBQUM7S0FDSixPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO0lBQ25DLE1BQU0sMkJBQTJCLFFBQVEsS0FBSyxDQUFDLG9CQUFvQixFQUFFLHdCQUF3QixFQUFFLElBQUksQ0FBQyxDQUFDOztJQUVyRyxNQUFNLHVCQUF1QjtNQUMzQixZQUFZLENBQUMsTUFBTSxDQUFDO01BQ3BCLFlBQVksQ0FBQyxTQUFTLENBQUM7TUFDdkIsWUFBWSxDQUFDLE1BQU0sQ0FBQztNQUNwQixXQUFXLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7UUFDakMsT0FBTztRQUNQLEtBQUssQ0FBQyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO09BQ3JDLEVBQUUsS0FBSztRQUNOLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1VBQ2hCLE9BQU8sQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDLEVBQUUsYUFBYSxRQUFRLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO1NBQzlFLE1BQU07VUFDTCxPQUFPLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pCO09BQ0YsQ0FBQyxDQUFDO01BQ0gsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO01BQ3pCLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxNQUFNLElBQUksQ0FBQztLQUN6QyxDQUFDOztJQUVGLE1BQU0sbUJBQW1CLEtBQUssQ0FBQztNQUM3QixJQUFJO01BQ0osR0FBRyxvQkFBb0I7S0FDeEIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxtQkFBbUIsUUFBUSxLQUFLLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDOztJQUU3RSxNQUFNLG9CQUFvQixLQUFLLENBQUM7TUFDOUIsSUFBSTtNQUNKLGVBQWU7TUFDZixZQUFZO01BQ1osWUFBWTtNQUNaLGNBQWM7TUFDZCxPQUFPO01BQ1AsT0FBTztNQUNQLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUU7UUFDdkMsUUFBUTtRQUNSLE9BQU87UUFDUCxhQUFhO09BQ2QsQ0FBQztNQUNGLGdCQUFnQixDQUFDLENBQUMsQ0FBQztNQUNuQixRQUFRO01BQ1IsWUFBWTtLQUNiLENBQUMsQ0FBQztJQUNILE1BQU0sb0JBQW9CLFFBQVEsS0FBSyxDQUFDLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQzs7SUFFaEYsTUFBTSxZQUFZLGtCQUFrQjtNQUNsQyxNQUFNLFdBQVcsaUJBQWlCO1FBQ2hDLE1BQU0sV0FBVyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUs7VUFDakMsTUFBTSxhQUFhO1lBQ2pCLE1BQU0sWUFBWTtZQUNsQixNQUFNLENBQUMsS0FBSztZQUNaLE9BQU8sWUFBWTtjQUNqQixRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO2FBQ3hCO1dBQ0YsQ0FBQztVQUNGLE1BQU0sV0FBVyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFdBQVcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1VBQ25HLE9BQU8sZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxJQUFJLFVBQVUsRUFBRSxRQUFRLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQzFGLENBQUMsQ0FBQztRQUNILFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztPQUMvQixDQUFDO01BQ0YsTUFBTSxPQUFPO1FBQ1gsT0FBTyxNQUFNLFFBQVE7UUFDckIsUUFBUTtPQUNULENBQUM7TUFDRixPQUFPO1FBQ0wsS0FBSyxNQUFNLElBQUk7UUFDZixLQUFLLE1BQU0sSUFBSTtRQUNmLFlBQVksRUFBRTtRQUNkLFlBQVksUUFBUSxDQUFDO1VBQ25CLFNBQVMsT0FBTyxDQUFDLEVBQUUsQ0FBQztVQUNwQixNQUFNLENBQUMsZ0JBQWdCLEVBQUU7WUFDdkIsYUFBYSxDQUFDLGFBQWE7Y0FDekIsTUFBTSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDM0IsQ0FBQztZQUNGLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxjQUFjO2NBQy9CLFVBQVUsQ0FBQyxJQUFJLFFBQVEsRUFBRSxHQUFHLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLGdCQUFnQjtnQkFDdEUsU0FBUyxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsR0FBRyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCO2tCQUNqRSxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsRUFBRTtvQkFDcEMsSUFBSSxVQUFVLEVBQUUsU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsY0FBYztzQkFDekQsSUFBSSxVQUFVLEVBQUUsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsZUFBZTt3QkFDM0QsUUFBUSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7d0JBQzdCLFFBQVEsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUMzQixRQUFRLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQzt1QkFDN0IsQ0FBQyxDQUFDO3FCQUNKLENBQUMsQ0FBQzttQkFDSjtpQkFDRixDQUFDLENBQUM7ZUFDSixDQUFDLENBQUM7YUFDSixDQUFDO1lBQ0YsS0FBSyxDQUFDLFlBQVksRUFBRSxFQUFFLGNBQWM7Y0FDbEMsRUFBRSxNQUFNLFVBQVUsS0FBSyxDQUFDLFFBQVEsSUFBSSxVQUFVLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUTtnQkFDekYsRUFBRSxNQUFNLFNBQVMsS0FBSyxDQUFDLE1BQU0sSUFBSSxVQUFVLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTTtrQkFDbEYsSUFBSSxRQUFRLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDekIsUUFBUSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3BCLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO21CQUN0QjtpQkFDRixDQUFDLENBQUM7ZUFDSixDQUFDLENBQUM7YUFDSixDQUFDO1dBQ0gsQ0FBQztVQUNGLE1BQU0sT0FBTyxDQUFDO1lBQ1osTUFBTSxNQUFNO1lBQ1osVUFBVSxHQUFHLEdBQUcsVUFBVTtZQUMxQixVQUFVLFFBQVE7Y0FDaEIsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7Y0FDdEIsT0FBTyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM1QjtXQUNGLENBQUM7VUFDRixXQUFXLE9BQU8sQ0FBQyxFQUFFLENBQUM7U0FDdkIsQ0FBQztRQUNGLElBQUk7UUFDSixpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLEVBQUUsRUFBRTtPQUNyRCxDQUFDO0tBQ0gsQ0FBQztJQUNGLElBQUksZ0JBQWdCLE1BQU0sQ0FBQztNQUN6QixTQUFTLFNBQVM7TUFDbEIsTUFBTSxnQkFBZ0I7TUFDdEIsY0FBYztRQUNaLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDakIsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUNqQixVQUFVLENBQUMsVUFBVSxDQUFDO1FBQ3RCLFVBQVUsQ0FBQyxXQUFXLENBQUM7UUFDdkIsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUM7T0FDM0I7TUFDRCxNQUFNO1FBQ0osT0FBTyxnQkFBZ0I7VUFDckIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbEI7UUFDRCxVQUFVLHVCQUF1QjtVQUMvQixJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDNUI7T0FDRjtLQUNGLENBQUMsQ0FBQzs7SUFFSCxNQUFNLG1CQUFtQixxQkFBcUIsQ0FBQztJQUMvQyxNQUFNLGdCQUFnQix5SUFBeUksQ0FBQztJQUNoSyxNQUFNLGtCQUFrQixRQUFRO01BQzlCLE9BQU87UUFDTCxLQUFLLElBQUksSUFBSTtRQUNiLEtBQUssSUFBSSxJQUFJO1FBQ2IsWUFBWSxDQUFDO1lBQ1QsS0FBSztjQUNILEtBQUssR0FBRztjQUNSLFlBQVk7Z0JBQ1YsUUFBUSxhQUFhO2dCQUNyQixPQUFPLFVBQVU7Z0JBQ2pCLFVBQVUsUUFBUTtnQkFDbEIsZUFBZSxNQUFNO2VBQ3RCO2NBQ0QsU0FBUyxDQUFDLG9CQUFvQixDQUFDO2NBQy9CLFdBQVcsZ0JBQWdCO2FBQzVCO1dBQ0YsQ0FBQztPQUNMLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sUUFBUSxXQUFXLENBQUM7SUFDMUIsTUFBTSxXQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0MsTUFBTSxjQUFjLFFBQVEsZUFBZSxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7SUFDekQsTUFBTSxTQUFTLFNBQVM7TUFDdEIsTUFBTSxRQUFRLENBQUMsTUFBTTtRQUNuQixNQUFNLFNBQVMsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sT0FBTyxrQkFBa0I7VUFDN0IsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDbEIsT0FBTyxhQUFhLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUN4RCxDQUFDO1FBQ0YsT0FBTztVQUNMLElBQUk7VUFDSixRQUFRLFVBQVUsQ0FBQyxNQUFNLENBQUM7U0FDM0IsQ0FBQztPQUNILEdBQUcsQ0FBQztNQUNMLE1BQU0sT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDMUIsTUFBTSxZQUFZLEtBQUssT0FBTyxFQUFFLENBQUM7TUFDakMsTUFBTSxhQUFhLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxRQUFRLENBQUM7UUFDaEQsTUFBTSxDQUFDO1FBQ1AsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDO09BQ3RCLENBQUMsQ0FBQyxDQUFDO01BQ0osT0FBTyxXQUFXLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQy9ELENBQUM7SUFDRixNQUFNLFNBQVMsd0JBQXdCO01BQ3JDLE1BQU0sZUFBZSxLQUFLLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNsRCxNQUFNLFVBQVUsb0JBQW9CLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQ3BFLE1BQU0sU0FBUyxZQUFZLG9CQUFvQixPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDcEgsTUFBTSxVQUFVLEtBQUsscUJBQXFCO1FBQ3hDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7T0FDeEMsQ0FBQztNQUNGLE1BQU0sWUFBWSxnQkFBZ0IsS0FBSyxDQUFDLElBQUksUUFBUSxFQUFFLGFBQWEsQ0FBQyxLQUFLLE1BQU0sQ0FBQztNQUNoRixNQUFNLFNBQVMsZUFBZTtRQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ3BCLE1BQU0sVUFBVSxJQUFJLFFBQVEsQ0FBQztVQUM3QixRQUFRLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1VBQzdCLFFBQVEsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7VUFDakMsUUFBUSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsRUFBRTtZQUMvQixNQUFNLEdBQUc7WUFDVCxTQUFTLElBQUk7V0FDZCxDQUFDLENBQUM7U0FDSjtPQUNGLENBQUM7TUFDRixNQUFNLFNBQVMsZUFBZTtRQUM1QixJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUNuQixNQUFNLFVBQVUsSUFBSSxRQUFRLENBQUM7VUFDN0IsS0FBSyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7VUFDbEMsS0FBSyxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7VUFDdEMsUUFBUSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsRUFBRTtZQUMvQixNQUFNLEdBQUc7WUFDVCxTQUFTLEtBQUs7V0FDZixDQUFDLENBQUM7U0FDSjtPQUNGLENBQUM7TUFDRixNQUFNLFlBQVksTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztNQUMzQyxNQUFNLFdBQVcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ2hDLE1BQU0sWUFBWSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDcEMsTUFBTSxlQUFlLGFBQWEsU0FBUyxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO01BQ3ZFLE1BQU0sV0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDaEMsTUFBTSxPQUFPO1FBQ1gsWUFBWTtRQUNaLE9BQU87UUFDUCxTQUFTO1FBQ1QsUUFBUTtRQUNSLFlBQVk7UUFDWixRQUFRO09BQ1QsQ0FBQztNQUNGLE9BQU87UUFDTCxLQUFLLE1BQU0sSUFBSTtRQUNmLEtBQUssTUFBTSxJQUFJO1FBQ2YsVUFBVTtRQUNWLFlBQVksS0FBSyxDQUFDLE1BQU0sZUFBZSxDQUFDO1FBQ3hDLElBQUk7T0FDTCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sV0FBVyxLQUFLLENBQUM7TUFDckIsY0FBYyxhQUFhLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQztNQUMvQyxTQUFTLGtCQUFrQixJQUFJLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO01BQy9DLFdBQVcsa0JBQWtCLElBQUksVUFBVSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7TUFDbkQsVUFBVSxrQkFBa0IsSUFBSSxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztNQUNqRCxjQUFjLGFBQWEsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDO01BQy9DLFVBQVUsa0JBQWtCLElBQUksU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7S0FDbEQsRUFBRSxTQUFTLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzVCLE1BQU0sZ0JBQWdCO01BQ3BCLEdBQUcsUUFBUTtNQUNYLEdBQUcsRUFBRSxNQUFNLEVBQUU7S0FDZCxDQUFDOztJQUVGLE1BQU0sZ0JBQWdCLEtBQUssQ0FBQztNQUMxQixZQUFZO01BQ1osZUFBZTtNQUNmLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7TUFDakMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQztNQUNqQyxPQUFPO0tBQ1IsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxnQkFBZ0IsUUFBUSxLQUFLLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQzs7SUFFcEUsTUFBTSxVQUFVLFVBQVU7TUFDeEIsTUFBTSxVQUFVLEdBQUcsTUFBTSxHQUFHLFNBQVMsT0FBTyxFQUFFLENBQUM7TUFDL0MsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRO1FBQzdCLE1BQU0sT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsTUFBTSxXQUFXLE1BQU0sSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLE1BQU0sa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RixNQUFNLEdBQUcsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7VUFDdkMsTUFBTSxJQUFJLEtBQUs7VUFDZixTQUFTLElBQUksUUFBUTtVQUNyQixVQUFVLGFBQWE7WUFDckIsTUFBTSxZQUFZLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNqRCxTQUFTLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1dBQ2pDO1VBQ0QsU0FBUyxhQUFhO1lBQ3BCLFNBQVMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDaEMsTUFBTSxlQUFlLE1BQU0sU0FBUyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUMzRCxNQUFNLEdBQUcsQ0FBQyxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDekMsT0FBTyxNQUFNO2NBQ1gsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLFlBQVksQ0FBQyxDQUFDO2FBQzNDLENBQUM7V0FDSDtTQUNGLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFNBQVMsU0FBUyxFQUFFLFNBQVMsTUFBTSxJQUFJLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3RCxNQUFNLGFBQWEseUJBQXlCO01BQzFDLE1BQU0sUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLFFBQVE7UUFDOUMsTUFBTSxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxNQUFNLFVBQVUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzlDLE9BQU87VUFDTCxJQUFJO1VBQ0osTUFBTTtVQUNOLFNBQVMsT0FBTyxRQUFRO1VBQ3hCLFFBQVEsT0FBTyxPQUFPO1VBQ3RCLFFBQVEsT0FBTyxPQUFPO1NBQ3ZCLENBQUM7T0FDSCxDQUFDLENBQUM7TUFDSCxPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUTtRQUMxQixNQUFNLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsT0FBTyxLQUFLLEtBQUssQ0FBQyxJQUFJLEtBQUssRUFBRTtVQUMzQixLQUFLO1lBQ0gsS0FBSyxLQUFLO1lBQ1YsU0FBUyxDQUFDLG1CQUFtQixDQUFDO1dBQy9CO1VBQ0QsWUFBWSxnQkFBZ0IsY0FBYyxDQUFDO1lBQ3pDLGlCQUFpQixDQUFDLElBQUksRUFBRSxhQUFhLENBQUM7WUFDdEMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQztZQUN0QyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsbUJBQW1CO2NBQ3pDLE1BQU0sT0FBTyxFQUFFLE1BQU0sQ0FBQztjQUN0QixNQUFNLG1CQUFtQixNQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsTUFBTSxLQUFLLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQztjQUM1RSxnQkFBZ0IsS0FBSyxDQUFDLGlCQUFpQjtnQkFDckMsTUFBTSxVQUFVLElBQUksUUFBUSxHQUFHLGFBQWEsT0FBTyxHQUFHLGFBQWEsT0FBTyxDQUFDO2dCQUMzRSxPQUFPLENBQUMsYUFBYSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztlQUMxQyxDQUFDLENBQUM7YUFDSixDQUFDO1dBQ0gsQ0FBQztTQUNILENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGNBQWMsZ0JBQWdCLGFBQWEsT0FBTyxDQUFDLFVBQVU7TUFDakUsS0FBSztRQUNILEtBQUssS0FBSztRQUNWLFNBQVMsQ0FBQyw2QkFBNkIsQ0FBQztPQUN6QztNQUNELFlBQVksVUFBVSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUM7TUFDM0MsZ0JBQWdCLGdCQUFnQixjQUFjLENBQUMsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLGFBQWEsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1SCxDQUFDLENBQUMsQ0FBQztJQUNKLE1BQU0sYUFBYSx3Q0FBd0M7TUFDekQsTUFBTSxZQUFZLFNBQVMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ2hELFNBQVMsS0FBSyxDQUFDLFVBQVU7UUFDdkIsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRCxNQUFNLFlBQVksV0FBVyxLQUFLLElBQUksSUFBSSxXQUFXLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsV0FBVyxZQUFZLEVBQUUsQ0FBQztRQUN0RyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1VBQ3pELFNBQVMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCO1lBQ2pELGFBQWEsU0FBUyxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNqRCxPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QixRQUFRLENBQUMsTUFBTSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbEMseUJBQXlCLENBQUMsT0FBTyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7V0FDdEQsQ0FBQyxDQUFDO1NBQ0o7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSw0QkFBNEIsMkJBQTJCO01BQzNELEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO0tBQ3RDLENBQUM7SUFDRixNQUFNLGdCQUFnQixtQkFBbUI7TUFDdkMsTUFBTSxZQUFZLFNBQVMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ2hELFNBQVMsS0FBSyxDQUFDLFVBQVU7UUFDdkIsTUFBTSxtQkFBbUIsU0FBUyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEQsZ0JBQWdCLEtBQUssQ0FBQyxpQkFBaUI7VUFDckMsSUFBSSxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM1QixJQUFJLGFBQWEsVUFBVSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsRUFBRTtjQUNoRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztjQUN2Qix5QkFBeUIsQ0FBQyxPQUFPLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQzthQUM1RCxNQUFNO2NBQ0wsYUFBYSxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7Y0FDMUMsYUFBYSxTQUFTLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO2NBQzVDLHlCQUF5QixDQUFDLE9BQU8sUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQ3REO1dBQ0YsTUFBTTtZQUNMLGFBQWEsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzFDLGFBQWEsU0FBUyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyQix5QkFBeUIsQ0FBQyxPQUFPLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztXQUN0RDtTQUNGLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGVBQWUsV0FBVztNQUM5QixNQUFNLFlBQVksU0FBUyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDaEQsT0FBTyxTQUFTLEtBQUssQ0FBQyxVQUFVO1FBQzlCLE1BQU0sY0FBYyxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxRSxJQUFJLFdBQVcsRUFBRTtVQUNmLE1BQU0sbUJBQW1CLFNBQVMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1VBQ3RELE9BQU8sZ0JBQWdCLEtBQUssQ0FBQyxpQkFBaUIsTUFBTSxDQUFDLGFBQWEsYUFBYSxDQUFDLGFBQWEsQ0FBQyxFQUFFLFFBQVEsYUFBYSxVQUFVLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4SixNQUFNO1VBQ0wsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO1NBQ3hCO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sVUFBVSxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDM0MsTUFBTSxXQUFXLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM3QyxNQUFNLGdCQUFnQixTQUFTO01BQzdCLEtBQUssSUFBSSxJQUFJO01BQ2IsS0FBSztRQUNILEtBQUssS0FBSztRQUNWLFNBQVMsQ0FBQyxhQUFhLENBQUM7UUFDeEIsWUFBWSxFQUFFLE1BQU0sY0FBYyxFQUFFO09BQ3JDO01BQ0QsWUFBWSxDQUFDO1VBQ1QsS0FBSztZQUNILEtBQUssS0FBSztZQUNWLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQztXQUNqQztVQUNELFlBQVksRUFBRTtVQUNkLFlBQVksUUFBUSxDQUFDO1lBQ25CLFdBQVcsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN0QixRQUFRLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDbkIsT0FBTyxPQUFPLENBQUM7Y0FDYixXQUFXLEVBQUUsVUFBVSxPQUFPLEVBQUU7Y0FDaEMsYUFBYSw2QkFBNkI7Y0FDMUMsV0FBVywyQkFBMkI7Y0FDdEMsZ0JBQWdCLGdDQUFnQztjQUNoRCxjQUFjLDhCQUE4QjtjQUM1QyxVQUFVLFVBQVU7Z0JBQ2xCLE1BQU0sbUJBQW1CLFNBQVMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0RCxnQkFBZ0IsS0FBSyxDQUFDLGFBQWEsYUFBYSxDQUFDLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7ZUFDeEI7Y0FDRCxTQUFTLFVBQVU7Z0JBQ2pCLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7ZUFDeEI7Y0FDRCxhQUFhLFVBQVU7Z0JBQ3JCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7ZUFDakY7Y0FDRCxlQUFlLFVBQVU7Z0JBQ3ZCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2VBQ3BFO2FBQ0YsQ0FBQztZQUNGLFNBQVMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNwQixTQUFTLE9BQU8sQ0FBQztjQUNmLE1BQU0sUUFBUTtnQkFDWixNQUFNLFdBQVcsU0FBUyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2VBQ3ZCO2FBQ0YsQ0FBQztXQUNILENBQUM7U0FDSCxDQUFDO01BQ0osWUFBWSxRQUFRLENBQUM7UUFDbkIsZ0JBQWdCLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDM0IsTUFBTSxDQUFDLHdCQUF3QixFQUFFO1VBQy9CLEtBQUssQ0FBQyxPQUFPLEVBQUUsY0FBYztZQUMzQixLQUFLLENBQUMsSUFBSSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUMsQ0FBQztXQUM5QyxDQUFDO1VBQ0YsS0FBSyxDQUFDLFFBQVEsRUFBRSxlQUFlO1lBQzdCLFFBQVEsQ0FBQyxJQUFJLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztXQUNqQyxDQUFDO1NBQ0gsQ0FBQztPQUNILENBQUM7S0FDSCxDQUFDLENBQUM7O0lBRUgsTUFBTSxRQUFRLDJDQUEyQztNQUN2RCxLQUFLLENBQUMsU0FBUyxRQUFRLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzVDLE1BQU0sT0FBTyxNQUFNLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQ3hELE1BQU0sb0JBQW9CLFFBQVEsQ0FBQztRQUNqQyxNQUFNLE9BQU8sQ0FBQztVQUNaLE1BQU0sU0FBUztVQUNmLE9BQU8sTUFBTSxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUM7VUFDaEMsWUFBWSxNQUFNLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQztTQUN0QyxDQUFDO1FBQ0YsUUFBUSxPQUFPLENBQUMsRUFBRSxDQUFDO09BQ3BCLENBQUMsQ0FBQztNQUNILE1BQU0sWUFBWSxXQUFXLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUM7TUFDdkQsTUFBTSxVQUFVLElBQUksVUFBVSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUNsRCxTQUFTLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7TUFDekMsSUFBSSxPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLE1BQU0sRUFBRTtRQUNqRCxNQUFNLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztPQUN6QjtNQUNELElBQUksQ0FBQyxLQUFLLFVBQVUsRUFBRSxFQUFFO1FBQ3RCLE1BQU0sUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO09BQzNCO01BQ0QsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFTLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUN4RCxDQUFDO0lBQ0YsTUFBTSxVQUFVLDhCQUE4QjtNQUM1QyxRQUFRLENBQUMsU0FBUyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDekMsSUFBSSxLQUFLLFVBQVUsRUFBRSxFQUFFO1FBQ3JCLE1BQU0sVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO09BQzdCO01BQ0QsS0FBSyxNQUFNLEVBQUUsQ0FBQztLQUNmLENBQUM7SUFDRixNQUFNLFlBQVksOENBQThDLGFBQWEsVUFBVSxFQUFFLENBQUM7O0lBRTFGLElBQUksNEJBQTRCLE1BQU0sT0FBTyxDQUFDO1FBQzFDLFdBQVcsSUFBSTtRQUNmLE9BQU8sS0FBSztRQUNaLFNBQVMsT0FBTztRQUNoQixXQUFXLFNBQVM7S0FDdkIsQ0FBQyxDQUFDOztJQUVILElBQUksaUJBQWlCO01BQ25CLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxRQUFRLEtBQUssQ0FBQztNQUMzQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDO01BQy9CLFNBQVMsQ0FBQyxTQUFTLENBQUM7TUFDcEIsU0FBUyxDQUFDLFdBQVcsQ0FBQztLQUN2QixDQUFDOztJQUVGLE1BQU0sU0FBUyxNQUFNO01BQ25CLE1BQU0sVUFBVSxXQUFXLEVBQUUsQ0FBQztNQUM5QixNQUFNLFlBQVksV0FBVztRQUMzQixPQUFPLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7T0FDMUIsQ0FBQztNQUNGLE9BQU8sSUFBSSxDQUFDO1FBQ1YsV0FBVyxPQUFPLE1BQU07UUFDeEIsU0FBUztRQUNULE9BQU8sT0FBTyxNQUFNO1FBQ3BCLFdBQVcsT0FBTyxNQUFNO09BQ3pCLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsSUFBSSw2QkFBNkIsTUFBTSxPQUFPLENBQUM7UUFDM0MsV0FBVyxJQUFJO1FBQ2YsTUFBTSxNQUFNO0tBQ2YsQ0FBQyxDQUFDOztJQUVILE1BQU0sV0FBVyxRQUFRLENBQUM7TUFDeEIsUUFBUSxjQUFjO01BQ3RCLE1BQU0sVUFBVTtNQUNoQixNQUFNLFlBQVk7TUFDbEIsT0FBTyxhQUFhO0tBQ3JCLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFdBQVcsUUFBUTtNQUN2QixNQUFNLGFBQWEsSUFBSSxJQUFJLFdBQVcsS0FBSyxTQUFTLEdBQUcsSUFBSSxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7TUFDaEYsT0FBTyxLQUFLLENBQUMsVUFBVSxFQUFFLGFBQWE7UUFDcEMsSUFBSSxJQUFJLEtBQUssS0FBSyxPQUFPLEVBQUU7VUFDekIsT0FBTyxDQUFDLENBQUM7U0FDVixNQUFNO1VBQ0wsT0FBTztZQUNMLEdBQUcsQ0FBQztZQUNKLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxNQUFNO1dBQ3hCLENBQUM7U0FDSDtPQUNGLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDUixDQUFDO0lBQ0YsTUFBTSxhQUFhLFFBQVEsS0FBSyxVQUFVLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0UsTUFBTSxXQUFXLFFBQVE7TUFDdkIsTUFBTSxPQUFPLFlBQVksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3pDLE1BQU0sYUFBYSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDbEMsTUFBTSxRQUFRLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUM3QixNQUFNLFVBQVUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ2pDLE1BQU0sV0FBVyxVQUFVLE9BQU8sS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztNQUMzRSxPQUFPO1FBQ0wsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2pCLE9BQU87UUFDUCxZQUFZLEtBQUs7UUFDakIsR0FBRyxRQUFRO09BQ1osQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxnQkFBZ0IscUJBQXFCLHlCQUF5QjtNQUNsRSxLQUFLO1FBQ0gsS0FBSyxLQUFLO1FBQ1YsWUFBWTtVQUNWLGNBQWMsaUJBQWlCLFVBQVUsQ0FBQyxZQUFZLENBQUM7VUFDdkQsWUFBWSxHQUFHO1NBQ2hCO1FBQ0QsU0FBUyxDQUFDLDRCQUE0QixDQUFDO09BQ3hDO01BQ0QsWUFBWSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsa0VBQWtFLENBQUMsRUFBRSxDQUFDO0tBQ3BHLENBQUMsQ0FBQztJQUNILE1BQU0scUJBQXFCLFlBQVksU0FBUyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLE9BQU8sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDMUcsTUFBTSx1QkFBdUIsbUJBQW1CO01BQzlDLE1BQU0sZUFBZSxVQUFVLENBQUM7TUFDaEMsTUFBTSxtQkFBbUIsQ0FBQyxTQUFTLEdBQUcsWUFBWSxFQUFFLENBQUMsQ0FBQztNQUN0RCxRQUFRLEtBQUssQ0FBQyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVU7UUFDM0UsSUFBSSxLQUFLLEVBQUU7VUFDVCxNQUFNLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsWUFBWSxLQUFLLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7VUFDekYsS0FBSyxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqQyxNQUFNO1VBQ0wsUUFBUSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztVQUMvQixNQUFNLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxZQUFZO1lBQ2hELEtBQUssQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3RDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztXQUNwQyxDQUFDLENBQUM7U0FDSjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGlCQUFpQiw0Q0FBNEM7TUFDakUsTUFBTSxVQUFVLElBQUksUUFBUSxDQUFDO01BQzdCLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztNQUNwQyxJQUFJLEtBQUssRUFBRTtRQUNULFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELFFBQVEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDN0IsUUFBUSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNqQyxJQUFJLE1BQU0sU0FBUyxFQUFFLEVBQUU7VUFDckIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDMUI7T0FDRixNQUFNO1FBQ0wsTUFBTSxnQkFBZ0IsU0FBUyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLFFBQVEsQ0FBQyxRQUFRLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDaEcsUUFBUSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsS0FBSyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEMsS0FBSyxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdEMsSUFBSSxhQUFhLEVBQUU7VUFDakIsTUFBTSxNQUFNLEVBQUUsQ0FBQztTQUNoQjtPQUNGO0tBQ0YsQ0FBQztJQUNGLE1BQU0saUJBQWlCLFNBQVM7TUFDOUIsS0FBSyxJQUFJLElBQUk7TUFDYixLQUFLO1FBQ0gsS0FBSyxLQUFLO1FBQ1YsWUFBWSxFQUFFLGVBQWUsTUFBTSxFQUFFO1FBQ3JDLFNBQVMsQ0FBQyxjQUFjLENBQUM7UUFDekIsUUFBUSxFQUFFLFNBQVMsTUFBTSxFQUFFO09BQzVCO01BQ0QsWUFBWSxRQUFRLENBQUM7UUFDbkIsU0FBUyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3BCLFFBQVEsT0FBTyxDQUFDLEVBQUUsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNqQyxTQUFTLE9BQU8sQ0FBQyxFQUFFLE1BQU0sUUFBUSxJQUFJLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7T0FDNUQsQ0FBQztNQUNGLFlBQVksRUFBRTtLQUNmLENBQUMsQ0FBQztJQUNILE1BQU0sZUFBZSxTQUFTLEtBQUssS0FBSyxLQUFLLFNBQVMsQ0FBQztJQUN2RCxNQUFNLG1CQUFtQixTQUFTO01BQ2hDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3ZCLE1BQU0sT0FBTyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxhQUFhLEVBQUUsQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUM7UUFDdkYsT0FBTyxJQUFJLElBQUksQ0FBQyxZQUFZLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztPQUMvRyxNQUFNO1FBQ0wsT0FBTyxLQUFLLENBQUM7T0FDZDtLQUNGLENBQUM7SUFDRixNQUFNLFVBQVUsMkNBQTJDO01BQ3pELE1BQU0sZ0JBQWdCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUNsQyxNQUFNLFFBQVEsT0FBTyxFQUFFLENBQUM7TUFDeEIsTUFBTSxhQUFhLEtBQUs7UUFDdEIsSUFBSSxhQUFhLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUU7VUFDL0MsQ0FBQyxlQUFlLEVBQUUsQ0FBQztVQUNuQixrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1VBQ25DLE1BQU0sY0FBYyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDeEM7T0FDRixDQUFDO01BQ0YsSUFBSSxDQUFDLE1BQU0sT0FBTyxFQUFFO1FBQ2xCLE1BQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNO1VBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7VUFDeEQsTUFBTSxHQUFHLENBQUMsbUJBQW1CLEVBQUUsS0FBSztZQUNsQyxJQUFJLENBQUMsUUFBUSxZQUFZLEVBQUUsS0FBSyxVQUFVLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFO2NBQzlELFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNmO1dBQ0YsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO09BQ0o7TUFDRCxNQUFNLFNBQVMsU0FBUztRQUN0QixJQUFJLEtBQUssS0FBSyxhQUFhLElBQUksRUFBRSxFQUFFO1VBQ2pDLGFBQWEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1VBQ3pCLGNBQWMsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLGVBQWUsVUFBVSxDQUFDLENBQUM7VUFDekUsc0JBQXNCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3ZDO09BQ0YsQ0FBQztNQUNGLE1BQU0sR0FBRyxDQUFDLGVBQWUsRUFBRSxLQUFLO1FBQzlCLEtBQUssR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7VUFDcEIsTUFBTSxVQUFVLFFBQVEsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztVQUNqRixLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNwQixNQUFNO1VBQ0wsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7VUFDaEIsS0FBSyxNQUFNLEVBQUUsQ0FBQztTQUNmO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLGFBQWEsV0FBVztNQUM1QixNQUFNLE9BQU87UUFDWCxLQUFLLENBQUM7UUFDTixNQUFNLEVBQUU7T0FDVCxDQUFDO01BQ0YsTUFBTSxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsVUFBVTtRQUM1QixNQUFNLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLE9BQU8sS0FBSyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU07VUFDckMsS0FBSyxDQUFDLE9BQU87VUFDYixNQUFNLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6QixDQUFDLENBQUMsQ0FBQztPQUNMLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDVCxPQUFPLENBQUMsS0FBSyxDQUFDO0tBQ2YsQ0FBQzs7SUFFRixNQUFNLFNBQVMsaUNBQWlDO01BQzlDLE1BQU07TUFDTixLQUFLO01BQ0wsV0FBVztLQUNaLENBQUMsQ0FBQztJQUNILE1BQU0sWUFBWSx1QkFBdUI7TUFDdkMsTUFBTSxTQUFTLFVBQVUsQ0FBQyxLQUFLLEVBQUUsbUJBQW1CO1FBQ2xELE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsT0FBTyxRQUFRLEtBQUssQ0FBQztVQUNuQixTQUFTLElBQUk7VUFDYixPQUFPLE9BQU87VUFDZCxRQUFRLE9BQU8sR0FBRyxLQUFLO1VBQ3ZCLEtBQUs7U0FDTixDQUFDLENBQUM7T0FDSixDQUFDLENBQUM7TUFDSCxNQUFNLFNBQVMsUUFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxDQUFDO01BQzlELE1BQU0sY0FBYyxLQUFLLENBQUMsTUFBTSxFQUFFLGFBQWEsR0FBRyxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ2xFLE1BQU0sUUFBUSxNQUFNLE1BQU0sQ0FBQyxNQUFNLE9BQU8sQ0FBQyxDQUFDO01BQzFDLE9BQU87UUFDTCxNQUFNO1FBQ04sS0FBSztRQUNMLFdBQVc7T0FDWixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sU0FBUyxVQUFVLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxJQUFJLFFBQVEsQ0FBQyxDQUFDO0lBQzdELE1BQU0sVUFBVSxnQ0FBZ0M7TUFDOUMsTUFBTSxPQUFPLE1BQU0sQ0FBQyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO01BQzFDLE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7S0FDdEMsQ0FBQztJQUNGLE1BQU0sV0FBVyw0Q0FBNEM7TUFDM0QsTUFBTSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztNQUNqRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQ2pELENBQUM7SUFDRixNQUFNLFNBQVMsZ0NBQWdDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZGLE1BQU0sU0FBUyx1QkFBdUI7TUFDcEMsTUFBTSxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQzVDLE9BQU8sTUFBTSxNQUFNLE9BQU8sS0FBSyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztLQUM1RSxDQUFDO0lBQ0YsTUFBTSxZQUFZLG1DQUFtQztNQUNuRCxNQUFNLFNBQVMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQzFHLE1BQU0sU0FBUyxNQUFNLE9BQU8sQ0FBQztNQUM3QixNQUFNLFFBQVEsTUFBTSxNQUFNLENBQUM7TUFDM0IsTUFBTSxjQUFjLE1BQU0sWUFBWSxDQUFDO01BQ3ZDLElBQUksS0FBSyxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUMzRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO09BQzVDLE1BQU0sSUFBSSxLQUFLLE9BQU8sSUFBSSxDQUFDLEVBQUU7UUFDNUIsT0FBTyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7T0FDekQsTUFBTTtRQUNMLE9BQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7T0FDM0M7S0FDRixDQUFDOztJQUVGLE1BQU0sY0FBYywyQkFBMkI7TUFDN0MsTUFBTSxVQUFVLEtBQUssQ0FBQyxZQUFZLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNyRCxPQUFPLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDckMsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsY0FBYyxJQUFJLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNySixNQUFNLFlBQVksa0NBQWtDO01BQ2xELE1BQU0sY0FBYyxNQUFNLFlBQVksSUFBSSxFQUFFLENBQUM7TUFDN0MsSUFBSSxXQUFXLE9BQU8sS0FBSyxDQUFDLEVBQUU7UUFDNUIsT0FBTztPQUNSO01BQ0QsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQ3pELE1BQU0sZ0JBQWdCLFFBQVEsV0FBVyxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQztNQUNwRSxLQUFLLENBQUMsT0FBTyxRQUFRLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQy9DLE1BQU0sU0FBUyxXQUFXLE9BQU8sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7TUFDbkQsTUFBTSxjQUFjLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUM1QyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDaEIsV0FBVyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztNQUM3QixNQUFNLGlCQUFpQixLQUFLLENBQUMsT0FBTyxRQUFRLENBQUMsQ0FBQztNQUM5QyxNQUFNLFlBQVksU0FBUyxDQUFDLGNBQWMsRUFBRSxNQUFNLFlBQVksSUFBSSxFQUFFLEVBQUUsUUFBUSxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztNQUNsSCxJQUFJLFNBQVMsTUFBTSxPQUFPLEtBQUssQ0FBQyxFQUFFO1FBQ2hDLFNBQVMsT0FBTyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN6QyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7T0FDakIsTUFBTTtRQUNMLFdBQVcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxPQUFPLENBQUMsQ0FBQztRQUN2QyxXQUFXLENBQUMsU0FBUyxNQUFNLENBQUMsQ0FBQztPQUM5QjtNQUNELFFBQVEsQ0FBQyxPQUFPLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztNQUN4QyxNQUFNLENBQUMsT0FBTyxRQUFRLENBQUMsQ0FBQztNQUN4QixXQUFXLEtBQUssQ0FBQyxRQUFRLE1BQU0sQ0FBQyxDQUFDO0tBQ2xDLENBQUM7O0lBRUYsTUFBTSxXQUFXLFVBQVUsQ0FBQztNQUMxQixLQUFLLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUMzQyxXQUFXLENBQUMsYUFBYSxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQzNDLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFdBQVcsVUFBVSxDQUFDO01BQzFCLFNBQVMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUM7TUFDbkMsY0FBYyxDQUFDLG1CQUFtQixDQUFDO01BQ25DLFVBQVUsQ0FBQyxVQUFVLENBQUM7TUFDdEIsV0FBVyxDQUFDLGdCQUFnQixFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQzdDLFNBQVMsQ0FBQyxVQUFVLENBQUM7TUFDckIsU0FBUyxDQUFDLFVBQVUsQ0FBQztLQUN0QixPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLE1BQU0sVUFBVSxVQUFVLENBQUM7TUFDekIsUUFBUSxDQUFDO1FBQ1AsU0FBUyxPQUFPO1FBQ2hCLFFBQVEsUUFBUSxFQUFFO1FBQ2xCLE1BQU0sU0FBUztPQUNoQixDQUFDO01BQ0YsUUFBUSxDQUFDO1FBQ1AsUUFBUSxRQUFRLEVBQUU7UUFDbEIsTUFBTSxVQUFVO09BQ2pCLENBQUM7TUFDRixRQUFRLENBQUMsRUFBRSxNQUFNLGlCQUFpQixFQUFFLENBQUM7TUFDckMsUUFBUSxDQUFDLEVBQUUsTUFBTSxnQkFBZ0IsRUFBRSxDQUFDO0tBQ3JDLENBQUMsQ0FBQzs7SUFFSCxNQUFNLGFBQWEsVUFBVSxDQUFDLHdCQUF3QjtNQUNwRCxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7S0FDeEMsQ0FBQyxDQUFDOztJQUVILE1BQU0sV0FBVyxVQUFVLENBQUM7TUFDMUIsU0FBUyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7TUFDM0IsVUFBVSxDQUFDLFVBQVUsQ0FBQztNQUN0QixnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7TUFDekIsY0FBYyxDQUFDLFdBQVcsQ0FBQztNQUMzQixXQUFXLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ2xGLFFBQVEsRUFBRTtNQUNWLFNBQVMsQ0FBQyxXQUFXLENBQUM7S0FDdkIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQztNQUN6QixRQUFRLENBQUM7UUFDUCxNQUFNLFFBQVE7UUFDZCxXQUFXLFdBQVc7VUFDcEIsS0FBSyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsTUFBTSxFQUFFLEVBQUU7VUFDaEQsa0JBQWtCLFFBQVEsQ0FBQyxDQUFDLFFBQVEsT0FBTyxDQUFDO2NBQ3hDLGFBQWEsTUFBTSxRQUFRLGFBQWE7Y0FDeEMsTUFBTSxFQUFFLE1BQU0sVUFBVSxFQUFFO2NBQzFCLGlCQUFpQixLQUFLO2NBQ3RCLFdBQVcsTUFBTSxVQUFVO2FBQzVCLENBQUMsQ0FBQyxDQUFDO1NBQ1AsQ0FBQztPQUNILENBQUM7TUFDRixRQUFRLENBQUM7UUFDUCxTQUFTLE9BQU87UUFDaEIsUUFBUSxRQUFRLEVBQUU7UUFDbEIsTUFBTSxTQUFTO1FBQ2YsV0FBVyxVQUFVO1VBQ25CLE9BQU87WUFDTCxtQkFBbUIsUUFBUSxDQUFDLENBQUMsTUFBTSxPQUFPLENBQUM7Z0JBQ3ZDLE1BQU0sUUFBUTtnQkFDZCxVQUFVLFFBQVE7a0JBQ2hCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxNQUFNLENBQUMsQ0FBQztrQkFDckQsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO2lCQUN4QjtlQUNGLENBQUMsQ0FBQyxDQUFDO1dBQ1AsQ0FBQztTQUNIO09BQ0YsQ0FBQztLQUNILENBQUMsQ0FBQzs7SUFFSCxNQUFNLGtCQUFrQixPQUFPLEVBQUUsQ0FBQztJQUNsQyxNQUFNLHdCQUF3Qix1QkFBdUI7TUFDbkQsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDMUIsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztNQUMxQixlQUFlLE1BQU0sRUFBRSxDQUFDO0tBQ3pCLENBQUM7SUFDRixNQUFNLFNBQVMsdUJBQXVCO01BQ3BDLE1BQU0saUJBQWlCLFFBQVEsV0FBVyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO01BQ3JFLElBQUksVUFBVSxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUU7UUFDckMsVUFBVSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7T0FDbEMsTUFBTTtRQUNMLFVBQVUsS0FBSyxDQUFDLGNBQWMsRUFBRSxTQUFTLFFBQVEsRUFBRSxDQUFDLENBQUM7T0FDdEQ7S0FDRixDQUFDO0lBQ0YsTUFBTSxXQUFXLHNDQUFzQztNQUNyRCxNQUFNLFNBQVMsTUFBTSxVQUFVLElBQUksQ0FBQyxXQUFXLE9BQU8sRUFBRSxDQUFDLENBQUM7TUFDMUQsTUFBTSxPQUFPLE1BQU0sU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztNQUNoRCxXQUFXLHFCQUFxQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUU7UUFDOUMsUUFBUTtVQUNOLE1BQU0sU0FBUztVQUNmLFNBQVMsTUFBTTtVQUNmLE9BQU87VUFDUCxXQUFXLEVBQUUsa0JBQWtCLFVBQVUsRUFBRSxFQUFFO1NBQzlDO09BQ0YsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNaLENBQUM7SUFDRixNQUFNLFlBQVksOENBQThDO01BQzlELE9BQU8sVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztNQUNuQyxRQUFRLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDM0MsUUFBUSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDckIsQ0FBQztJQUNGLE1BQU0sY0FBYywwQkFBMEI7TUFDNUMsTUFBTSxlQUFlLE9BQU8sRUFBRSxDQUFDO01BQy9CLE1BQU0sU0FBUyxzQkFBc0I7UUFDbkMsTUFBTSxZQUFZLGVBQWUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxNQUFNLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVTtVQUMzQixTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7VUFDekQsWUFBWSxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQztVQUNsQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2QsTUFBTSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7V0FDekI7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxVQUFVLE1BQU07UUFDcEIsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLGVBQWUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtVQUN2QyxRQUFRLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN4QjtRQUNELFlBQVksT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDLENBQUM7T0FDckMsQ0FBQztNQUNGLE9BQU87UUFDTCxLQUFLO1VBQ0gsS0FBSyxLQUFLO1VBQ1YsWUFBWSxFQUFFLElBQUksWUFBWSxHQUFHLEVBQUU7U0FDcEM7UUFDRCxZQUFZLFFBQVEsQ0FBQztVQUNuQixNQUFNLE9BQU8sQ0FBQztZQUNaLE1BQU0sU0FBUztZQUNmLFVBQVUsUUFBUTtjQUNoQixVQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztjQUN2QixPQUFPLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVCO1dBQ0YsQ0FBQztVQUNGLFVBQVUsT0FBTyxDQUFDO1lBQ2hCLE1BQU07WUFDTixPQUFPO1lBQ1AsVUFBVSxnQ0FBZ0M7Y0FDeEMsT0FBTyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7YUFDckU7WUFDRCxnQkFBZ0IsTUFBTTtjQUNwQixPQUFPLE1BQU0sU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQzthQUMzQztXQUNGLENBQUM7VUFDRixTQUFTLE9BQU8sQ0FBQztZQUNmLFVBQVU7Y0FDUixHQUFHLGtCQUFrQixDQUFDO2dCQUNwQixhQUFhLEtBQUs7Z0JBQ2xCLEdBQUcsTUFBTSwwQkFBMEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7ZUFDckcsQ0FBQztjQUNGLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQ2xCLGNBQWMsTUFBTTtrQkFDbEIsVUFBVSxTQUFTLENBQUMsUUFBUSxXQUFXLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVc7b0JBQ2pGLFFBQVEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLFFBQVEsQ0FBQyxDQUFDO21CQUNqRCxDQUFDLENBQUM7aUJBQ0o7ZUFDRixDQUFDO2FBQ0g7V0FDRixDQUFDO1NBQ0gsQ0FBQztPQUNILENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxZQUFZLDBDQUEwQztNQUMxRCxHQUFHLE1BQU0sT0FBTyxDQUFDO1FBQ2YsR0FBRyxTQUFTLE9BQU8sRUFBRTtRQUNyQixRQUFRLFVBQVU7VUFDaEIsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztTQUMzQjtRQUNELGtCQUFrQixnQkFBZ0IsUUFBUSxDQUFDLEVBQUUsTUFBTSxTQUFTLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxFQUFFLENBQUMsUUFBUSxPQUFPLENBQUM7WUFDdkcsUUFBUTtjQUNOLGdCQUFnQixVQUFVO2dCQUN4QixPQUFPLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2VBQzFDO2FBQ0Y7V0FDRixDQUFDLENBQUMsQ0FBQztPQUNQLENBQUM7TUFDRixNQUFNO1FBQ0osV0FBVyxvQkFBb0I7VUFDN0IsVUFBVSxTQUFTLENBQUMsUUFBUSxXQUFXLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVc7WUFDakYsU0FBUyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1dBQzFELENBQUMsQ0FBQztTQUNKO1FBQ0QsWUFBWSxVQUFVO1VBQ3BCLFVBQVUsU0FBUyxDQUFDLFFBQVEsV0FBVyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXO1lBQ2pGLFFBQVEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLFFBQVEsQ0FBQyxDQUFDO1dBQ2pELENBQUMsQ0FBQztTQUNKO1FBQ0QsUUFBUSxVQUFVO1VBQ2hCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDM0I7UUFDRCx1QkFBdUIsVUFBVTtVQUMvQixxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDMUM7UUFDRCxZQUFZLFVBQVU7VUFDcEIsT0FBTyxVQUFVLFNBQVMsQ0FBQyxRQUFRLFdBQVcsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1NBQzNFO1FBQ0QsUUFBUSxVQUFVO1VBQ2hCLE9BQU8sVUFBVSxPQUFPLENBQUMsUUFBUSxXQUFXLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztTQUN6RTtPQUNGO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSx3QkFBd0IsU0FBUyxDQUFDO01BQ3RDLE1BQU0sdUJBQXVCO01BQzdCLFNBQVMsU0FBUztNQUNsQixjQUFjLFFBQVEsRUFBRTtNQUN4QixZQUFZLE9BQU8sRUFBRTtNQUNyQixNQUFNO1FBQ0osV0FBVywwQkFBMEI7VUFDbkMsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsWUFBWSxrQkFBa0I7VUFDNUIsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDekI7UUFDRCxRQUFRLGtCQUFrQjtVQUN4QixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNyQjtRQUNELHVCQUF1QixrQkFBa0I7VUFDdkMsSUFBSSxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNwQztRQUNELFlBQVksa0JBQWtCLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUNyRCxRQUFRLGtCQUFrQixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUM7T0FDOUM7S0FDRixDQUFDLENBQUM7O0lBRUgsTUFBTSxXQUFXLFVBQVUsQ0FBQztNQUMxQixVQUFVLENBQUMsT0FBTyxDQUFDO01BQ25CLFNBQVMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO01BQzNCLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3BDLENBQUMsQ0FBQztJQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDOUIsTUFBTSxPQUFPO1FBQ2IsTUFBTSxNQUFNO09BQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFUCxNQUFNLFlBQVksNENBQTRDO01BQzVELEtBQUssTUFBTSxJQUFJO01BQ2YsS0FBSyxNQUFNLElBQUk7TUFDZixVQUFVO01BQ1YsWUFBWSxPQUFPLENBQUMsTUFBTSxpQkFBaUIsRUFBRSxDQUFDLE1BQU0sT0FBTyxDQUFDO1VBQ3hELE1BQU0sTUFBTTtVQUNaLFVBQVUsTUFBTSxRQUFRLGFBQWE7U0FDdEMsQ0FBQyxDQUFDLENBQUM7TUFDTixpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLEVBQUUsRUFBRTtLQUNyRCxDQUFDLENBQUM7SUFDSCxNQUFNLGVBQWUsU0FBUyxDQUFDO01BQzdCLE1BQU0sY0FBYztNQUNwQixjQUFjLFFBQVEsRUFBRTtNQUN4QixZQUFZLE9BQU8sRUFBRTtNQUNyQixTQUFTLFNBQVM7S0FDbkIsQ0FBQyxDQUFDOztJQUVILE1BQU0sY0FBYyxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxNQUFNLFlBQVksK0NBQStDO01BQy9ELFNBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLGtCQUFrQjtRQUMzQyxNQUFNLGVBQWUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFDLHdCQUF3QixPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUI7VUFDckUscUJBQXFCLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztTQUNyRixDQUFDLENBQUM7T0FDSixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxZQUFZLHlDQUF5QztNQUN6RCxNQUFNLDJCQUEyQixNQUFNLENBQUMscUJBQXFCLE9BQU8sQ0FBQztRQUNuRSxPQUFPLE1BQU0sTUFBTSxHQUFHLENBQUMsV0FBVztVQUNoQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sZUFBZSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDbkQsQ0FBQztRQUNGLFNBQVM7VUFDUCxPQUFPLE1BQU07WUFDWCxXQUFXO1lBQ1gsV0FBVztXQUNaO1VBQ0QsT0FBTyxNQUFNO1lBQ1gsV0FBVztZQUNYLFdBQVc7V0FDWjtVQUNELGFBQWEsTUFBTTtZQUNqQixXQUFXO1lBQ1gsV0FBVztXQUNaO1VBQ0QsYUFBYSxNQUFNO1lBQ2pCLFdBQVc7WUFDWCxXQUFXO1dBQ1o7U0FDRjtRQUNELFdBQVcsSUFBSSxrQkFBa0I7UUFDakMsVUFBVSxNQUFNLFNBQVM7UUFDekIsMkJBQTJCLEVBQUU7UUFDN0IsU0FBUyxFQUFFLGNBQWMsTUFBTSxRQUFRLHFCQUFxQixFQUFFO1FBQzlELE9BQU87VUFDTCxRQUFRLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1VBQ3RDLFNBQVMsU0FBUyxTQUFTLEVBQUU7U0FDOUI7UUFDRCxXQUFXLGlCQUFpQixNQUFNLENBQUMsS0FBSyxHQUFHLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUM7T0FDMUUsQ0FBQyxDQUFDLENBQUM7TUFDSixPQUFPO1FBQ0wsS0FBSyxNQUFNLElBQUk7UUFDZixLQUFLLE1BQU0sSUFBSTtRQUNmLFVBQVU7UUFDVixZQUFZLE9BQU8sQ0FBQyxNQUFNLHVCQUF1QixFQUFFLENBQUMsUUFBUSxPQUFPLENBQUM7WUFDaEUsUUFBUTtjQUNOLGVBQWUsTUFBTTtnQkFDbkIsT0FBTyxZQUFZLE9BQU8sQ0FBQztrQkFDekIsR0FBRyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtrQkFDaEMsT0FBTyxDQUFDLHdCQUF3QixPQUFPLEVBQUUsQ0FBQztpQkFDM0MsQ0FBQyxDQUFDO2VBQ0o7YUFDRjtXQUNGLENBQUMsQ0FBQyxDQUFDO1FBQ04sTUFBTTtVQUNKLFdBQVcscUJBQXFCO1lBQzlCLE1BQU0sWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxDQUFDLENBQUM7V0FDdEQ7VUFDRCxTQUFTLFdBQVcsU0FBUyxDQUFDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLENBQUM7VUFDeEUsUUFBUSxXQUFXO1lBQ2pCLHdCQUF3QixPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUI7Y0FDckUscUJBQXFCLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2FBQ3JELENBQUMsQ0FBQztXQUNKO1VBQ0QsdUJBQXVCLFdBQVc7WUFDaEMsd0JBQXdCLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixzQkFBc0IsQ0FBQyxDQUFDO1dBQzVGO1VBQ0QsUUFBUSxXQUFXLHdCQUF3QixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7VUFDMUcsWUFBWSxXQUFXO1lBQ3JCLHdCQUF3QixPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUI7Y0FDckUscUJBQXFCLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2FBQ3pELENBQUMsQ0FBQztXQUNKO1VBQ0QsYUFBYSxXQUFXLHdCQUF3QixPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsV0FBVyxDQUFDO1NBQ3hHO1FBQ0QsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLE1BQU0sT0FBTyxFQUFFLEVBQUU7T0FDbkQsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLHVCQUF1QixTQUFTLENBQUM7TUFDckMsTUFBTSxzQkFBc0I7TUFDNUIsY0FBYyxRQUFRLEVBQUU7TUFDeEIsWUFBWSxPQUFPLEVBQUU7TUFDckIsU0FBUyxTQUFTO01BQ2xCLE1BQU07UUFDSixXQUFXLDJCQUEyQjtVQUNwQyxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDakM7UUFDRCxTQUFTLG1CQUFtQjtVQUMxQixJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN2QjtRQUNELFlBQVksbUJBQW1CO1VBQzdCLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzFCO1FBQ0QsUUFBUSxtQkFBbUI7VUFDekIsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdEI7UUFDRCx1QkFBdUIsbUJBQW1CO1VBQ3hDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3RCO1FBQ0QsUUFBUSxtQkFBbUIsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQy9DLGFBQWEsbUJBQW1CLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQztPQUMxRDtLQUNGLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFdBQVcsVUFBVSxDQUFDO01BQzFCLFNBQVMsQ0FBQztRQUNSLGFBQWE7UUFDYixXQUFXO1FBQ1gsZ0JBQWdCO1FBQ2hCLGNBQWM7UUFDZCxzQkFBc0I7T0FDdkIsQ0FBQztNQUNGLFNBQVMsQ0FBQyxVQUFVLENBQUM7TUFDckIsU0FBUyxDQUFDLFVBQVUsQ0FBQztLQUN0QixPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLE1BQU0sVUFBVSxVQUFVLENBQUM7TUFDekIsUUFBUSxDQUFDO1FBQ1AsU0FBUyxPQUFPO1FBQ2hCLFFBQVEsUUFBUSxFQUFFO1FBQ2xCLE1BQU0sU0FBUztPQUNoQixDQUFDO01BQ0YsUUFBUSxDQUFDO1FBQ1AsU0FBUyxPQUFPO1FBQ2hCLFFBQVEsUUFBUSxFQUFFO1FBQ2xCLE1BQU0sVUFBVTtRQUNoQixXQUFXLFVBQVU7VUFDbkIsT0FBTztZQUNMLG1CQUFtQixRQUFRLENBQUM7Y0FDMUIsT0FBTyxPQUFPLENBQUM7Z0JBQ2IsV0FBVyxFQUFFLFVBQVUsUUFBUSxFQUFFO2dCQUNqQyxhQUFhLE1BQU0sUUFBUSxZQUFZO2dCQUN2QyxXQUFXLE1BQU0sUUFBUSxVQUFVO2dCQUNuQyxnQkFBZ0IsTUFBTSxRQUFRLGVBQWU7Z0JBQzdDLGNBQWMsTUFBTSxRQUFRLGFBQWE7Z0JBQ3pDLFVBQVUsUUFBUTtrQkFDaEIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFVBQVU7b0JBQ3RELFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNyQixRQUFRLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzttQkFDeEIsQ0FBQyxDQUFDO2tCQUNILE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUN2QjtnQkFDRCxTQUFTLFFBQVE7a0JBQ2YsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7a0JBQ3JCLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUN2QjtnQkFDRCxhQUFhLFFBQVE7a0JBQ25CLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2lCQUM1RDtlQUNGLENBQUM7Y0FDRixNQUFNLE9BQU8sQ0FBQztnQkFDWixNQUFNLFNBQVM7Z0JBQ2YsVUFBVSxRQUFRO2tCQUNoQixPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxNQUFNLENBQUMsQ0FBQztrQkFDOUQsT0FBTyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDNUI7ZUFDRixDQUFDO2FBQ0gsQ0FBQztXQUNILENBQUM7U0FDSDtPQUNGLENBQUM7TUFDRixRQUFRLENBQUM7UUFDUCxNQUFNLGlCQUFpQjtRQUN2QixXQUFXLFdBQVc7VUFDcEIsa0JBQWtCLFFBQVEsQ0FBQyxDQUFDLFFBQVEsT0FBTyxDQUFDO2NBQ3hDLGFBQWEsTUFBTSxRQUFRLHFCQUFxQjtjQUNoRCxNQUFNLEVBQUUsTUFBTSxTQUFTLEVBQUU7Y0FDekIsaUJBQWlCLEtBQUs7YUFDdkIsQ0FBQyxDQUFDLENBQUM7U0FDUCxDQUFDO09BQ0gsQ0FBQztNQUNGLFFBQVEsQ0FBQyxFQUFFLE1BQU0sZ0JBQWdCLEVBQUUsQ0FBQztLQUNyQyxDQUFDLENBQUM7O0lBRUgsTUFBTSxTQUFTLHFCQUFxQixPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RyxNQUFNLGdCQUFnQixxQkFBcUI7TUFDekMsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVM7UUFDekcsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN6QixPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztPQUMzQixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxVQUFVLHFCQUFxQjtNQUNuQyxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLFlBQVk7UUFDcEQsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVTtVQUNuQyxNQUFNLGNBQWMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ25ELE9BQU8sVUFBVSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUMxQyxDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsVUFBVTtVQUN6RCxJQUFJLE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzlCLFFBQVEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1dBQ3JCO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7T0FDM0IsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sWUFBWSx5Q0FBeUM7TUFDekQsTUFBTSxxQkFBcUIsc0JBQXNCLENBQUM7TUFDbEQsTUFBTSxjQUFjLHFCQUFxQjtRQUN2QyxNQUFNLFFBQVEsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN2RCxNQUFNLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO09BQy9CLENBQUM7TUFDRixPQUFPO1FBQ0wsS0FBSyxNQUFNLElBQUk7UUFDZixLQUFLLE1BQU0sSUFBSTtRQUNmLFVBQVU7UUFDVixZQUFZLE9BQU8sQ0FBQyxNQUFNLHVCQUF1QixFQUFFO1VBQ2pELFFBQVEsT0FBTyxDQUFDO1lBQ2QsUUFBUTtjQUNOLGVBQWUsV0FBVztnQkFDeEIsT0FBTyxZQUFZLE9BQU8sQ0FBQztrQkFDekIsR0FBRyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtrQkFDaEMsT0FBTyxDQUFDLE1BQU0sT0FBTyxDQUFDO3NCQUNsQixHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO3NCQUNqQyxRQUFRLFdBQVc7d0JBQ2pCLElBQUksQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQzt1QkFDbkM7cUJBQ0YsQ0FBQyxDQUFDO2lCQUNOLENBQUMsQ0FBQztlQUNKO2FBQ0Y7V0FDRixDQUFDO1VBQ0YsTUFBTSxDQUFDLHVCQUF1QixFQUFFLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLFdBQVc7Y0FDbEUsYUFBYSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQzthQUNoQyxDQUFDLENBQUMsQ0FBQztTQUNQLENBQUM7UUFDRixNQUFNO1VBQ0osV0FBVyxxQkFBcUI7WUFDOUIsV0FBVyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM3QixPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1dBQzFCO1VBQ0QsU0FBUyxXQUFXLE9BQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO1VBQzVDLFFBQVEsV0FBVyxhQUFhLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQztVQUNqRCxRQUFRLFdBQVcsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUM7U0FDM0M7UUFDRCxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxPQUFPLEVBQUUsRUFBRTtPQUNuRCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLFNBQVMsQ0FBQztNQUNwQyxNQUFNLHFCQUFxQjtNQUMzQixjQUFjLFFBQVEsRUFBRTtNQUN4QixZQUFZLE9BQU8sRUFBRTtNQUNyQixTQUFTLFNBQVM7TUFDbEIsTUFBTTtRQUNKLFdBQVcsMkJBQTJCO1VBQ3BDLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNqQztRQUNELFNBQVMsbUJBQW1CO1VBQzFCLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3ZCO1FBQ0QsUUFBUSxtQkFBbUI7VUFDekIsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdEI7UUFDRCxRQUFRLG1CQUFtQixJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUM7T0FDaEQ7S0FDRixDQUFDLENBQUM7O0lBRUgsTUFBTSwyQkFBMkIsZ0JBQWdCO01BQy9DLE1BQU0sYUFBYSxZQUFZLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUM3RixPQUFPO1FBQ0wsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQztVQUMvQixHQUFHLFVBQVU7U0FDZDtRQUNELFlBQVksQ0FBQyxZQUFZLE1BQU0sTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sWUFBWSxNQUFNO1FBQ3pCLFNBQVMsRUFBRSxjQUFjLHdEQUF3RCxHQUFHLHFDQUFxQyxHQUFHLHVDQUF1QyxHQUFHLG1DQUFtQyxFQUFFO1FBQzNNLGtCQUFrQixRQUFRLENBQUM7VUFDekIsV0FBVyxPQUFPLENBQUMsRUFBRSxDQUFDO1VBQ3RCLFFBQVEsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUNwQixDQUFDO09BQ0gsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLHFCQUFxQixnQkFBZ0IsWUFBWSxPQUFPLENBQUMsd0JBQXdCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUN2RyxNQUFNLHVCQUF1QiwyQkFBMkI7TUFDdEQsTUFBTSxhQUFhLGFBQWEsQ0FBQyxhQUFhO1FBQzVDLE1BQU0sU0FBUyxLQUFLLENBQUMsV0FBVyxXQUFXLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUNqRSxPQUFPLFVBQVUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7T0FDdEMsQ0FBQyxDQUFDO01BQ0gsT0FBTyxRQUFRLENBQUM7UUFDZCxnQkFBZ0IsY0FBYyxDQUFDLFdBQVcsVUFBVSxXQUFXLENBQUM7UUFDaEUsZUFBZSxFQUFFO1FBQ2pCLE1BQU0sT0FBTyxDQUFDO1VBQ1osTUFBTSxRQUFRO1VBQ2QsVUFBVSxXQUFXLFNBQVM7VUFDOUIsVUFBVSxxQkFBcUI7U0FDaEMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO09BQ3ZDLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLDBCQUEwQixlQUFlO01BQzdDLE1BQU0sV0FBVyxXQUFXLGFBQWEsR0FBRyxRQUFRLEdBQUcsU0FBUyxDQUFDO01BQ2pFLE9BQU87UUFDTCxLQUFLLFdBQVcsSUFBSTtRQUNwQixLQUFLO1VBQ0gsS0FBSyxLQUFLO1VBQ1YsU0FBUyxDQUFDLHNCQUFzQixDQUFDO1NBQ2xDO1FBQ0QsT0FBTztVQUNMLGtCQUFrQix3QkFBd0IsQ0FBQztZQUN6QyxPQUFPLFFBQVEsS0FBSyxFQUFFO1lBQ3RCLE9BQU8sRUFBRTtXQUNWLENBQUM7VUFDRixtQkFBbUIsb0JBQW9CLENBQUM7WUFDdEMsTUFBTSxNQUFNO1lBQ1osTUFBTSxRQUFRLEtBQUssQ0FBQyxhQUFhLENBQUM7WUFDbEMsU0FBUyxJQUFJO1lBQ2IsU0FBUyxRQUFRLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQztZQUNqRSxTQUFTLEtBQUs7WUFDZCxZQUFZLFFBQVEsS0FBSyxFQUFFO1lBQzNCLFlBQVksS0FBSztXQUNsQixFQUFFLFFBQVEsS0FBSyxFQUFFLEVBQUUsV0FBVyxVQUFVLENBQUM7U0FDM0M7UUFDRCx3QkFBd0Isb0JBQW9CLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQztPQUNwRSxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sNEJBQTRCLGVBQWU7TUFDL0MsTUFBTSxXQUFXLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDO01BQ3RELE1BQU0sa0JBQWtCLENBQUMsQ0FBQztNQUMxQixNQUFNLFVBQVUsb0JBQW9CLE1BQU0sUUFBUSxDQUFDO1FBQ2pELEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMsc0JBQXNCLENBQUM7U0FDbEM7T0FDRixDQUFDLENBQUM7TUFDSCxPQUFPLG9CQUFvQixPQUFPLENBQUM7UUFDakMsR0FBRyxRQUFRO1FBQ1gsVUFBVSxXQUFXLFFBQVE7UUFDN0IsbUJBQW1CLE1BQU07VUFDdkIsTUFBTSxhQUFhLFdBQVcsZUFBZSxXQUFXLEVBQUUsUUFBUSxDQUFDO1VBQ25FLE1BQU0sZUFBZSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7VUFDNUMsTUFBTSxVQUFVLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztVQUM1QyxNQUFNLFlBQVksVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1VBQ3RDLE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksYUFBYSxFQUFFLFNBQVMsT0FBTyxDQUFDLENBQUM7VUFDcEUsT0FBTyxNQUFNLENBQUMsWUFBWSxFQUFFLEdBQUcsZUFBZSxFQUFFLFNBQVMsRUFBRSxFQUFFLFlBQVksTUFBTSxHQUFHLGVBQWUsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDaEg7UUFDRCxPQUFPO1VBQ0wsR0FBRyxRQUFRLE1BQU07VUFDakIsVUFBVTtZQUNSLEtBQUs7Y0FDSCxLQUFLLEtBQUs7Y0FDVixTQUFTLENBQUMsdUJBQXVCLENBQUM7Y0FDbEMsWUFBWSxXQUFXLFdBQVc7YUFDbkM7V0FDRjtTQUNGO1FBQ0QsWUFBWSxDQUFDLE9BQU8sQ0FBQztRQUNyQixTQUFTLEVBQUUsc0JBQXNCLG1CQUFtQixFQUFFO1FBQ3RELFVBQVUsUUFBUSxXQUFXLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO1FBQ25ELFVBQVUsUUFBUSxXQUFXLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO09BQ3JELENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLDJCQUEyQixlQUFlO01BQzlDLE1BQU0sVUFBVSxtQkFBbUIsTUFBTSxRQUFRLENBQUM7UUFDaEQsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQztTQUNsQztPQUNGLENBQUMsQ0FBQztNQUNILE1BQU0sV0FBVyxtQkFBbUIsTUFBTSxTQUFTLENBQUM7UUFDbEQsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQztTQUNuQztPQUNGLENBQUMsQ0FBQztNQUNILE1BQU0sV0FBVyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztNQUN0RCxPQUFPLG1CQUFtQixPQUFPLENBQUM7UUFDaEMsR0FBRyxRQUFRO1FBQ1gsWUFBWTtVQUNWLE9BQU87VUFDUCxRQUFRO1NBQ1Q7UUFDRCxTQUFTO1VBQ1AsV0FBVyw2QkFBNkI7VUFDeEMsYUFBYSwrQkFBK0I7VUFDNUMsY0FBYyxnQ0FBZ0M7VUFDOUMsZ0JBQWdCLGtDQUFrQztVQUNsRCxzQkFBc0IsbUJBQW1CO1NBQzFDO1FBQ0QsVUFBVSxRQUFRO1VBQ2hCLElBQUksVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLG1CQUFtQixFQUFFLENBQUMsRUFBRSxFQUFFLE1BQU0sUUFBUSxFQUFFLENBQUMsQ0FBQztVQUMxRSxXQUFXLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDbkM7UUFDRCxVQUFVLFFBQVE7VUFDaEIsSUFBSSxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1VBQzFFLFdBQVcsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNwQztPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGdCQUFnQixlQUFlO01BQ25DLE1BQU0sV0FBVyxXQUFXLGFBQWEsR0FBRyxRQUFRLEdBQUcsU0FBUyxDQUFDO01BQ2pFLE9BQU8sT0FBTyxPQUFPLENBQUM7UUFDcEIsS0FBSyxXQUFXLElBQUk7UUFDcEIsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFdBQVcsS0FBSyxLQUFLLGFBQWEsVUFBVSxHQUFHLENBQUMsd0JBQXdCLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDaEg7UUFDRCxZQUFZLENBQUMsT0FBTyxNQUFNLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QyxtQkFBbUIsb0JBQW9CLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQztPQUMvRCxDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sbUJBQW1CO01BQ3ZCLFlBQVk7TUFDWixZQUFZO01BQ1osWUFBWSxDQUFDLFNBQVMsQ0FBQztNQUN2QixtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFO1FBQzdDLFNBQVM7UUFDVCxXQUFXO09BQ1osQ0FBQztNQUNGLGdCQUFnQixDQUFDLFlBQVksRUFBRSxLQUFLLENBQUM7TUFDckMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDO0tBQzdCLENBQUM7SUFDRixNQUFNLHFCQUFxQjtNQUN6QixHQUFHLGdCQUFnQjtNQUNuQixNQUFNO01BQ04sa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDdkMsQ0FBQztJQUNGLE1BQU0scUJBQXFCO01BQ3pCLEdBQUcsZ0JBQWdCO01BQ25CLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUM7TUFDakMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7S0FDN0MsQ0FBQztJQUNGLE1BQU0sMkJBQTJCO01BQy9CLFFBQVEsa0JBQWtCO01BQzFCLGNBQWMsa0JBQWtCO0tBQ2pDLENBQUM7SUFDRixNQUFNLGNBQWM7TUFDbEIsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDckMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLHdCQUF3QixDQUFDLENBQUM7S0FDNUUsQ0FBQztJQUNGLE1BQU0sbUJBQW1CLFFBQVEsQ0FBQyxNQUFNLEVBQUU7TUFDeEMsR0FBRyx3QkFBd0I7TUFDM0IsT0FBTyxXQUFXO0tBQ25CLENBQUMsQ0FBQzs7SUFFSCxNQUFNLGFBQWEsS0FBSyxDQUFDO01BQ3ZCLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLENBQUM7TUFDakQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO01BQzFCLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztLQUMzQixDQUFDLENBQUM7SUFDSCxNQUFNLGFBQWEsUUFBUSxLQUFLLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQzs7SUFFM0QsTUFBTSxlQUFlLHFCQUFxQjtNQUN4QyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7TUFDWCxNQUFNLGlCQUFpQixJQUFJLEtBQUssS0FBSyxjQUFjLENBQUM7TUFDcEQsTUFBTSxhQUFhLElBQUksS0FBSyxJQUFJLENBQUMsV0FBVyw2QkFBNkIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDakgsTUFBTSxZQUFZLE1BQU0sUUFBUTtRQUM5QixNQUFNLFVBQVUsV0FBVztVQUN6QixVQUFVLElBQUksQ0FBQyxXQUFXLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZTtZQUNqRSxTQUFTLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDdkYsQ0FBQyxDQUFDLENBQUM7U0FDTCxDQUFDO1FBQ0YsTUFBTSxZQUFZLFNBQVM7VUFDekIsTUFBTSxNQUFNLElBQUksUUFBUSxDQUFDO1VBQ3pCLElBQUksS0FBSyxFQUFFO1lBQ1QsS0FBSyxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1lBQ2xDLEtBQUssQ0FBQyxHQUFHLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1dBQ2xDLE1BQU07WUFDTCxRQUFRLENBQUMsR0FBRyxFQUFFLHFCQUFxQixDQUFDLENBQUM7WUFDckMsUUFBUSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztXQUMvQjtTQUNGLENBQUM7UUFDRixNQUFNLFdBQVcsTUFBTSxHQUFHLENBQUMsSUFBSSxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQztRQUNoRSxJQUFJLGNBQWMsRUFBRTtVQUNsQixPQUFPLElBQUksU0FBUyxDQUFDO1lBQ25CLE9BQU87WUFDUCxTQUFTO1lBQ1QsUUFBUTtXQUNULENBQUMsQ0FBQztTQUNKO1FBQ0QsSUFBSSxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7VUFDMUIsT0FBTyxJQUFJLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDbkM7T0FDRixDQUFDO01BQ0YsTUFBTSxTQUFTLFNBQVMsRUFBRSxDQUFDO01BQzNCLE1BQU0sYUFBYTtRQUNqQixHQUFHLElBQUk7UUFDUCxNQUFNLGNBQWMsR0FBRyxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxLQUFLLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxLQUFLLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDbkksU0FBUyxJQUFJLFdBQVcsS0FBSyxTQUFTO1FBQ3RDLFlBQVksUUFBUSxLQUFLLENBQUMsSUFBSSxXQUFXLENBQUM7UUFDMUMsU0FBUyxJQUFJLFFBQVE7UUFDckIsTUFBTSxJQUFJLEtBQUs7UUFDZixTQUFTLElBQUk7UUFDYixZQUFZLElBQUksV0FBVztPQUM1QixDQUFDO01BQ0YsTUFBTSxvQkFBb0IsOEJBQThCLENBQUMsQ0FBQyxLQUFLLElBQUksV0FBVyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDO01BQzlILE1BQU0sb0JBQW9CLGNBQWMsR0FBRyxJQUFJLEtBQUssSUFBSSxDQUFDLFNBQVMsVUFBVSxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsU0FBUyxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO01BQzlILE1BQU0sNEJBQTRCLGlCQUFpQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDaEUsTUFBTSxvQkFBb0IsVUFBVSxRQUFRLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsWUFBWTtRQUNqRixjQUFjLFNBQVMsVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUMxQyxTQUFTLFNBQVMsVUFBVSxDQUFDLE9BQU8sQ0FBQztPQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQ2QsTUFBTSxjQUFjLFVBQVUsSUFBSSxDQUFDLFdBQVcsT0FBTyxPQUFPLEVBQUUsQ0FBQyxDQUFDO01BQ2hFLE1BQU0sYUFBYSx1QkFBdUIsQ0FBQztRQUN6QyxXQUFXO1FBQ1gseUJBQXlCO09BQzFCLENBQUMsQ0FBQztNQUNILE1BQU0saUJBQWlCLElBQUksS0FBSyxPQUFPLEVBQUUsSUFBSSx5QkFBeUIsT0FBTyxFQUFFLENBQUM7TUFDaEYsTUFBTSxNQUFNO1FBQ1YsS0FBSyxRQUFRO1FBQ2IsU0FBUyxpQkFBaUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxLQUFLLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsY0FBYyxHQUFHLENBQUMsMkJBQTJCLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxXQUFXLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLEtBQUssS0FBSyxjQUFjLElBQUksSUFBSSxPQUFPLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNwVCxZQUFZLGlCQUFpQjtPQUM5QixDQUFDO01BQ0YsTUFBTSxrQkFBa0IsRUFBRSxDQUFDO01BQzNCLE1BQU0saUJBQWlCLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxRQUFRLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztNQUN4SCxPQUFPLE1BQU0sT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0tBQ3RDLENBQUM7O0lBRUYsTUFBTSxtQkFBbUIscUJBQXFCLFlBQVksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUUsTUFBTSxxQkFBcUIscUJBQXFCO01BQzlDLE9BQU87UUFDTCxLQUFLO1VBQ0gsS0FBSyxLQUFLO1VBQ1YsU0FBUyxDQUFDLDBCQUEwQixDQUFDO1NBQ3RDO1FBQ0QsWUFBWSxLQUFLLENBQUMsSUFBSSxRQUFRLEVBQUUsVUFBVSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7T0FDL0UsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLGtCQUFrQixRQUFRLEVBQUUsV0FBVyxDQUFDO0lBQzlDLE1BQU0sVUFBVSxlQUFlLFFBQVEsRUFBRSxDQUFDO0lBQzFDLE1BQU0sV0FBVyxlQUFlLFNBQVMsRUFBRSxDQUFDO0lBQzVDLE1BQU0sbUJBQW1CLFFBQVE7TUFDL0IsSUFBSSxZQUFZLEtBQUssQ0FBQztNQUN0QixNQUFNLGFBQWEsS0FBSyxDQUFDLElBQUksUUFBUSxFQUFFLFdBQVc7UUFDaEQsSUFBSSxPQUFPLEtBQUssS0FBSyxPQUFPLEVBQUU7VUFDNUIsWUFBWSxJQUFJLENBQUM7VUFDakIsT0FBTyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUMsQ0FBQztTQUNwRCxNQUFNO1VBQ0wsT0FBTyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUMsQ0FBQztTQUNsRDtPQUNGLENBQUMsQ0FBQztNQUNILE9BQU87UUFDTCxLQUFLLElBQUksSUFBSTtRQUNiLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTO1lBQ1AsQ0FBQyxTQUFTLEdBQUcsa0JBQWtCLEdBQUcsbUJBQW1CO1lBQ3JELEdBQUcsT0FBTyxJQUFJLFFBQVEsR0FBRztjQUN2QixrQkFBa0I7Y0FDbEIscUJBQXFCO2FBQ3RCLEdBQUcsRUFBRTtXQUNQO1NBQ0Y7UUFDRCxZQUFZLFFBQVEsQ0FBQztVQUNuQixRQUFRLE9BQU8sQ0FBQyxFQUFFLENBQUM7VUFDbkIsTUFBTSxPQUFPLENBQUM7WUFDWixNQUFNLE1BQU07WUFDWixVQUFVLHFCQUFxQjtZQUMvQixhQUFhLGdCQUFnQixtQkFBbUI7V0FDakQsQ0FBQztTQUNILENBQUM7UUFDRixZQUFZLFNBQVMsR0FBRyxVQUFVLEdBQUc7VUFDbkMsU0FBUyxPQUFPLENBQUM7WUFDZixLQUFLO2NBQ0gsS0FBSyxLQUFLO2NBQ1YsU0FBUyxDQUFDLHdCQUF3QixDQUFDO2FBQ3BDO1lBQ0QsWUFBWSxFQUFFO1dBQ2YsQ0FBQztVQUNGLFNBQVMsT0FBTyxDQUFDO1lBQ2YsS0FBSztjQUNILEtBQUssS0FBSztjQUNWLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQzthQUNsQztZQUNELFlBQVksVUFBVTtXQUN2QixDQUFDO1NBQ0g7T0FDRixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0saUJBQWlCLFFBQVE7TUFDN0IsT0FBTztRQUNMLEtBQUssSUFBSSxJQUFJO1FBQ2IsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQztTQUM1QjtPQUNGLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxZQUFZLDJDQUEyQztNQUMzRCxNQUFNLE9BQU87UUFDWCxTQUFTLFFBQVEsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7UUFDdEQsV0FBVyxTQUFTLE1BQU0sV0FBVyxPQUFPO1FBQzVDLFdBQVcsU0FBUyxNQUFNLFdBQVcsT0FBTztPQUM3QyxDQUFDO01BQ0YsT0FBTztRQUNMLEtBQUssTUFBTSxJQUFJO1FBQ2YsS0FBSyxNQUFNLElBQUk7UUFDZixVQUFVO1FBQ1YsSUFBSTtPQUNMLENBQUM7S0FDSCxDQUFDO0lBQ0YsSUFBSSxPQUFPLFNBQVMsQ0FBQztNQUNuQixNQUFNLGFBQWE7TUFDbkIsY0FBYyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztNQUN4QyxZQUFZO1FBQ1YsUUFBUSxDQUFDO1VBQ1AsU0FBUyxFQUFFLFFBQVEsZ0JBQWdCLEVBQUU7VUFDckMsUUFBUTtZQUNOLFVBQVUsQ0FBQyxTQUFTLENBQUM7WUFDckIsVUFBVSxDQUFDLFdBQVcsQ0FBQztXQUN4QjtVQUNELE1BQU0sUUFBUTtTQUNmLENBQUM7UUFDRixRQUFRLENBQUM7VUFDUCxTQUFTLEVBQUUsUUFBUSxjQUFjLEVBQUU7VUFDbkMsUUFBUSxFQUFFO1VBQ1YsTUFBTSxNQUFNO1NBQ2IsQ0FBQztPQUNIO01BQ0QsU0FBUyxTQUFTO01BQ2xCLE1BQU07UUFDSixTQUFTLGdCQUFnQixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDM0MsV0FBVyxnQkFBZ0IsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQy9DLFdBQVcsZ0JBQWdCLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQztPQUNoRDtLQUNGLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFlBQVksbUNBQW1DO01BQ25ELE9BQU8sVUFBVSxDQUFDLFdBQVcsRUFBRSxrQkFBa0I7UUFDL0MsTUFBTSxxQkFBcUIsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksT0FBTyxDQUFDO1VBQ2xDLEtBQUs7WUFDSCxLQUFLLEtBQUs7WUFDVixTQUFTLENBQUMsVUFBVSxDQUFDO1dBQ3RCO1VBQ0QsWUFBWSxrQkFBa0I7VUFDOUIsWUFBWTtZQUNWLEdBQUcsa0JBQWtCLFFBQVEsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxPQUFPLENBQUM7Z0JBQzFELFNBQVMsa0JBQWtCLFFBQVE7Z0JBQ25DLFNBQVM7ZUFDVixDQUFDLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7V0FDcEI7U0FDRixDQUFDLENBQUMsQ0FBQztPQUNMLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLG9CQUFvQiw0QkFBNEIsYUFBYSxPQUFPLENBQUMsVUFBVTtNQUNuRixLQUFLO1FBQ0gsS0FBSyxLQUFLO1FBQ1YsU0FBUyxDQUFDLCtCQUErQixDQUFDO09BQzNDO01BQ0QsWUFBWSxTQUFTLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUM7TUFDcEQsZ0JBQWdCLGdCQUFnQixjQUFjLENBQUMsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLGFBQWEsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1SCxDQUFDLENBQUMsQ0FBQztJQUNKLE1BQU0saUJBQWlCLGlCQUFpQjtNQUN0QyxPQUFPLE1BQU0sQ0FBQyxhQUFhLGFBQWEsQ0FBQyxhQUFhLENBQUMsRUFBRSxRQUFRLGFBQWEsVUFBVSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ2hILENBQUM7SUFDRixNQUFNLGdCQUFnQixRQUFRO01BQzVCLE1BQU0sVUFBVSxJQUFJLFFBQVEsQ0FBQztNQUM3QixLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztNQUNsQyxLQUFLLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUN2QyxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsUUFBUTtNQUM1QixNQUFNLFVBQVUsSUFBSSxRQUFRLENBQUM7TUFDN0IsUUFBUSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztNQUM3QixRQUFRLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0tBQ2xDLENBQUM7SUFDRixNQUFNLHNCQUFzQixTQUFTLEVBQUUsY0FBYyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sMkJBQTJCLDhCQUE4QjtNQUM3RCxhQUFhLFFBQVEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO1FBQ3RELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtVQUM5QixNQUFNLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQzdCLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUNuRCxDQUFDLENBQUM7T0FDSixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxZQUFZLHlCQUF5Qix3QkFBd0IsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLElBQUksVUFBVSxDQUFDLENBQUM7SUFDekcsTUFBTSxZQUFZLHlCQUF5Qix3QkFBd0IsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLElBQUksVUFBVSxDQUFDLENBQUM7SUFDekcsTUFBTSxZQUFZLGtCQUFrQjtNQUNsQyxNQUFNLFdBQVcsdUJBQXVCO1FBQ3RDLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxJQUFJLFVBQVUsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDeEYsQ0FBQztNQUNGLE1BQU0sWUFBWSxRQUFRO1FBQ3hCLE9BQU8sU0FBUyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztPQUN4RCxDQUFDO01BQ0YsTUFBTSxhQUFhLDRDQUE0QztRQUM3RCxPQUFPLFNBQVMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCO1VBQ3hELE1BQU0scUJBQXFCLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztVQUN6RCxNQUFNLHdCQUF3QixrQkFBa0IsT0FBTyxDQUFDLFdBQVcsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1VBQ3JGLE1BQU0sU0FBUyxhQUFhLFFBQVEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1VBQ25FLElBQUksTUFBTSxFQUFFO1lBQ1YsYUFBYSxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFO2NBQzFCLFlBQVksRUFBRSxDQUFDO2NBQ2YsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO2NBQ3BCLGFBQWEsU0FBUyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztjQUM1QyxTQUFTLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ2hDLE1BQU07Y0FDTCxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7Y0FDcEIsWUFBWSxFQUFFLENBQUM7YUFDaEI7WUFDRCxrQkFBa0IsS0FBSyxDQUFDLFlBQVksU0FBUyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1dBQ3pFO1VBQ0QsT0FBTyxNQUFNLENBQUM7U0FDZixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxPQUFPO1FBQ1gsUUFBUTtRQUNSLFNBQVM7UUFDVCxVQUFVO09BQ1gsQ0FBQztNQUNGLE9BQU87UUFDTCxLQUFLLE1BQU0sSUFBSTtRQUNmLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMsZUFBZSxDQUFDO1VBQzFCLFlBQVksRUFBRSxlQUFlLE1BQU0sRUFBRTtVQUNyQyxRQUFRLEVBQUUsU0FBUyxNQUFNLEVBQUU7U0FDNUI7UUFDRCxZQUFZLEVBQUU7UUFDZCxZQUFZLFFBQVEsQ0FBQztVQUNuQixTQUFTLE9BQU8sQ0FBQyxFQUFFLENBQUM7VUFDcEIsU0FBUyxPQUFPLENBQUM7WUFDZixNQUFNLFFBQVE7Y0FDWixNQUFNLFdBQVcsU0FBUyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7Y0FDMUMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDdkI7V0FDRixDQUFDO1NBQ0gsQ0FBQztRQUNGLElBQUk7T0FDTCxDQUFDO0tBQ0gsQ0FBQztJQUNGLElBQUksY0FBYyxNQUFNLENBQUM7TUFDdkIsU0FBUyxTQUFTO01BQ2xCLE1BQU0sb0JBQW9CO01BQzFCLGNBQWMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7TUFDdkMsTUFBTTtRQUNKLFVBQVUsdUJBQXVCLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7UUFDM0QsWUFBWSxrREFBa0QsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDO1FBQ3JILFdBQVcsZ0JBQWdCLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQztPQUNoRDtLQUNGLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFlBQVksK0JBQStCO01BQy9DLElBQUkseUJBQXlCLEtBQUssQ0FBQztNQUNuQyxNQUFNLE9BQU87UUFDWCxXQUFXLFFBQVE7VUFDakIsT0FBTyxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsWUFBWSxxQ0FBcUM7VUFDL0MsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsVUFBVSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztTQUMxRztRQUNELGVBQWUsZ0JBQWdCO1VBQzdCLE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN4RjtRQUNELGNBQWMsUUFBUTtVQUNwQixPQUFPLE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDaEY7UUFDRCxXQUFXLFFBQVE7VUFDakIsT0FBTyxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsWUFBWSxRQUFRO1VBQ2xCLE9BQU8sT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztTQUNqRDtRQUNELFlBQVksa0JBQWtCO1VBQzVCLE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXO1lBQ3ZELE1BQU0saUJBQWlCLEtBQUssQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUN6RCxPQUFPLFFBQVEsRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1dBQ3RELENBQUMsQ0FBQztTQUNKO1FBQ0QsYUFBYSxvQkFBb0I7VUFDL0IsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsWUFBWTtZQUNqRSxNQUFNLG1CQUFtQixLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7WUFDNUUsVUFBVSxTQUFTLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUM7V0FDakQsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxnQkFBZ0IsUUFBUTtVQUN0QixNQUFNLFVBQVUsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztVQUN6RCxPQUFPLEtBQUssQ0FBQyxXQUFXLE9BQU8sUUFBUSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQzdEO1FBQ0QscUJBQXFCLFFBQVE7VUFDM0IsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVc7WUFDdkQsT0FBTyxDQUFDLE9BQU8sUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1dBQzlELENBQUMsQ0FBQztTQUNKO1FBQ0Qsb0NBQW9DLFFBQVE7VUFDMUMsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVc7WUFDdkQsT0FBTyxDQUFDLE9BQU8sUUFBUSxFQUFFLHNCQUFzQixFQUFFLHlCQUF5QixxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1dBQzNHLENBQUMsQ0FBQztTQUNKO1FBQ0Qsd0JBQXdCLFFBQVE7VUFDOUIsT0FBTyxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsV0FBVyxRQUFRLEtBQUssQ0FBQyxPQUFPLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3RKO1FBQ0QsYUFBYSxRQUFRO1VBQ25CLE9BQU8sT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztTQUNsRDtRQUNELGNBQWMsUUFBUTtVQUNwQixNQUFNLGFBQWEsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7VUFDN0gsVUFBVSxLQUFLLENBQUMsV0FBVztZQUN6QixNQUFNLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztXQUN6QixDQUFDLENBQUM7U0FDSjtRQUNELFlBQVksaUJBQWlCO1VBQzNCLE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXO1lBQ3ZELGFBQWEsU0FBUyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztXQUN4QyxDQUFDLENBQUM7U0FDSjtRQUNELGNBQWMsUUFBUTtVQUNwQixPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsV0FBVztZQUN2RCxhQUFhLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztXQUM5QixDQUFDLENBQUM7U0FDSjtRQUNELFVBQVUsdUJBQXVCO1VBQy9CLE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxXQUFXO1lBQzNELFdBQVcsU0FBUyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztXQUM1QyxDQUFDLENBQUM7U0FDSjtRQUNELFlBQVksZ0JBQWdCO1VBQzFCLE9BQU8sT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsT0FBTyxDQUFDLFdBQVcsV0FBVyxXQUFXLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQzVLO1FBQ0QsV0FBVyxRQUFRO1VBQ2pCLE9BQU8sT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLFdBQVcsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQzdGO1FBQ0QsY0FBYyxRQUFRO1VBQ3BCLHlCQUF5QixJQUFJLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO1VBQzNELElBQUksc0JBQXNCLEVBQUU7WUFDMUIsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUNoQztVQUNELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLG1CQUFtQjtZQUN2RSxNQUFNLFVBQVUsZUFBZSxRQUFRLENBQUM7WUFDeEMsS0FBSyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbEMsS0FBSyxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7V0FDdkMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxjQUFjLFFBQVE7VUFDcEIsSUFBSSxzQkFBc0IsRUFBRTtZQUMxQixJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1dBQ2hDO1VBQ0QsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsbUJBQW1CO1lBQ3ZFLE1BQU0sVUFBVSxlQUFlLFFBQVEsQ0FBQztZQUN4QyxRQUFRLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzdCLFFBQVEsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7V0FDbEMsQ0FBQyxDQUFDO1NBQ0o7T0FDRixDQUFDO01BQ0YsT0FBTztRQUNMLEtBQUssTUFBTSxJQUFJO1FBQ2YsS0FBSyxNQUFNLElBQUk7UUFDZixVQUFVO1FBQ1YsSUFBSTtRQUNKLFlBQVksTUFBTSxXQUFXO09BQzlCLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxjQUFjLFFBQVEsU0FBUyxDQUFDO01BQ3BDLFNBQVMsYUFBYTtNQUN0QixNQUFNLFNBQVM7TUFDZixRQUFRLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBQ2xDLENBQUMsQ0FBQztJQUNILE1BQU0saUJBQWlCLFFBQVE7TUFDN0IsSUFBSSxJQUFJLEtBQUssS0FBSyxhQUFhLFFBQVEsRUFBRTtRQUN2QyxPQUFPLHdCQUF3QixDQUFDO09BQ2pDLE1BQU0sSUFBSSxJQUFJLEtBQUssS0FBSyxhQUFhLFNBQVMsRUFBRTtRQUMvQyxPQUFPLHlCQUF5QixDQUFDO09BQ2xDLE1BQU07UUFDTCxPQUFPLGFBQWEsQ0FBQztPQUN0QjtLQUNGLENBQUM7SUFDRixNQUFNLHNCQUFzQixRQUFRLFNBQVMsQ0FBQztNQUM1QyxTQUFTO1FBQ1AsUUFBUSxRQUFRLFVBQVUsT0FBTyxDQUFDO1VBQ2hDLEtBQUssSUFBSSxJQUFJO1VBQ2IsS0FBSyxJQUFJLElBQUk7VUFDYixnQkFBZ0IsUUFBUSxDQUFDLENBQUMsTUFBTSxPQUFPLENBQUM7Y0FDcEMsTUFBTSxTQUFTO2NBQ2YsVUFBVSxjQUFjO2FBQ3pCLENBQUMsQ0FBQyxDQUFDO1VBQ04sVUFBVSxNQUFNLGFBQWEsQ0FBQztZQUM1QixNQUFNLElBQUksS0FBSztZQUNmLEtBQUssVUFBVSxDQUFDLHVCQUF1QixDQUFDO1lBQ3hDLGNBQWMsS0FBSztZQUNuQixZQUFZLEVBQUU7WUFDZCxXQUFXLElBQUksVUFBVTtZQUN6QixVQUFVLE1BQU07Y0FDZCxJQUFJLFNBQVMsRUFBRSxDQUFDO2NBQ2hCLE9BQU8sUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDNUI7V0FDRixDQUFDO1VBQ0YsV0FBVyxpQ0FBaUM7WUFDMUMsT0FBTyxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1dBQzdCO1VBQ0QsT0FBTyxJQUFJO1NBQ1osQ0FBQztPQUNIO01BQ0QsTUFBTSxrQkFBa0I7TUFDeEIsUUFBUTtRQUNOLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDakIsVUFBVSxDQUFDLFVBQVUsQ0FBQztPQUN2QjtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sY0FBYyxRQUFRLFNBQVMsQ0FBQztNQUNwQyxTQUFTO1FBQ1AsUUFBUSxRQUFRO1VBQ2QsTUFBTSxXQUFXLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUN0QyxNQUFNLGNBQWM7WUFDbEIsTUFBTSxJQUFJLEtBQUs7WUFDZixLQUFLLElBQUksSUFBSTtZQUNiLFVBQVUsTUFBTTtjQUNkLElBQUksU0FBUyxFQUFFLENBQUM7Y0FDaEIsT0FBTyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM1QjtZQUNELFdBQVcsa0JBQWtCLElBQUksaUJBQWlCLENBQUMsS0FBSyxDQUFDO1lBQ3pELGNBQWMsS0FBSztZQUNuQixZQUFZLEVBQUU7WUFDZCxTQUFTLElBQUksUUFBUTtZQUNyQixXQUFXLElBQUksVUFBVTtZQUN6QixnQkFBZ0I7Y0FDZCxhQUFhLElBQUksWUFBWTtjQUM3QixnQkFBZ0IsSUFBSSxlQUFlO2NBQ25DLFlBQVksSUFBSSxXQUFXO2FBQzVCO1lBQ0QsWUFBWSxJQUFJLFdBQVc7V0FDNUIsQ0FBQztVQUNGLE9BQU8sUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzlCO09BQ0Y7TUFDRCxNQUFNLFNBQVM7TUFDZixRQUFRO1FBQ04sVUFBVSxDQUFDLEtBQUssQ0FBQztRQUNqQixVQUFVLENBQUMsVUFBVSxDQUFDO1FBQ3RCLFVBQVUsQ0FBQyxTQUFTLENBQUM7T0FDdEI7S0FDRixDQUFDLENBQUM7SUFDSCxNQUFNLGFBQWEsUUFBUSxTQUFTLENBQUM7TUFDbkMsU0FBUyxFQUFFLFFBQVEsWUFBWSxFQUFFO01BQ2pDLE1BQU0sUUFBUTtNQUNkLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDNUIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxnQkFBZ0IsUUFBUSxTQUFTLENBQUM7TUFDdEMsU0FBUyxFQUFFLFFBQVEsZUFBZSxFQUFFO01BQ3BDLE1BQU0sV0FBVztNQUNqQixRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzVCLENBQUMsQ0FBQztJQUNILE1BQU0sYUFBYSxRQUFRLFNBQVMsQ0FBQztNQUNuQyxNQUFNLFFBQVE7TUFDZCxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzVCLENBQUMsQ0FBQztJQUNILE1BQU0sY0FBYyxRQUFRLFNBQVMsQ0FBQztNQUNwQyxTQUFTLEVBQUUsUUFBUSxhQUFhLEVBQUU7TUFDbEMsTUFBTSxTQUFTO01BQ2YsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM1QixDQUFDLENBQUM7SUFDSCxNQUFNLGVBQWUsUUFBUSxTQUFTLENBQUM7TUFDckMsU0FBUyxFQUFFLFFBQVEsY0FBYyxFQUFFO01BQ25DLE1BQU0sVUFBVTtNQUNoQixRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzVCLENBQUMsQ0FBQztJQUNILE1BQU0sa0JBQWtCLFFBQVEsU0FBUyxDQUFDO01BQ3hDLFNBQVMsV0FBVztNQUNwQixNQUFNLGFBQWE7TUFDbkIsUUFBUSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUNsQyxDQUFDLENBQUM7SUFDSCxNQUFNLHdCQUF3QixTQUFTO01BQ3JDLEtBQUssSUFBSSxJQUFJO01BQ2IsS0FBSztRQUNILEtBQUssS0FBSztRQUNWLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQztPQUNsQztNQUNELFlBQVksSUFBSSxXQUFXO0tBQzVCLENBQUMsQ0FBQztJQUNILE1BQU0sc0JBQXNCLFFBQVEsU0FBUyxDQUFDO01BQzVDLFNBQVMsRUFBRSxRQUFRLHFCQUFxQixFQUFFO01BQzFDLE1BQU0saUJBQWlCO01BQ3ZCLFFBQVEsRUFBRTtLQUNYLENBQUMsQ0FBQztJQUNILElBQUksaUJBQWlCLFNBQVMsQ0FBQztNQUM3QixNQUFNLGdCQUFnQjtNQUN0QixTQUFTLFNBQVM7TUFDbEIsY0FBYztRQUNaLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDakIsVUFBVSxDQUFDLFlBQVksQ0FBQztPQUN6QjtNQUNELFlBQVk7UUFDVixVQUFVO1FBQ1YsV0FBVztRQUNYLFdBQVc7UUFDWCxtQkFBbUI7UUFDbkIsVUFBVTtRQUNWLFdBQVc7UUFDWCxhQUFhO1FBQ2IsWUFBWTtRQUNaLGVBQWU7UUFDZixtQkFBbUI7T0FDcEI7TUFDRCxNQUFNO1FBQ0osV0FBVyxnQkFBZ0I7VUFDekIsT0FBTyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3QjtRQUNELFlBQVksMkNBQTJDO1VBQ3JELElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDbEQ7UUFDRCxlQUFlLHNCQUFzQjtVQUNuQyxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDaEM7UUFDRCxjQUFjLGdCQUFnQjtVQUM1QixPQUFPLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsV0FBVyxnQkFBZ0I7VUFDekIsT0FBTyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3QjtRQUNELFlBQVksZ0JBQWdCO1VBQzFCLE9BQU8sSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDOUI7UUFDRCxZQUFZLHdCQUF3QjtVQUNsQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDL0I7UUFDRCxhQUFhLDBCQUEwQjtVQUNyQyxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDbEM7UUFDRCxnQkFBZ0IsZ0JBQWdCO1VBQzlCLE9BQU8sSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbEM7UUFDRCxxQkFBcUIsZ0JBQWdCO1VBQ25DLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDaEM7UUFDRCxvQ0FBb0MsZ0JBQWdCO1VBQ2xELElBQUksbUNBQW1DLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDL0M7UUFDRCx3QkFBd0IsZ0JBQWdCO1VBQ3RDLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMxQztRQUNELGFBQWEsZ0JBQWdCO1VBQzNCLE9BQU8sSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDL0I7UUFDRCxZQUFZLHVCQUF1QjtVQUNqQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDOUI7UUFDRCxjQUFjLGdCQUFnQjtVQUM1QixJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN6QjtRQUNELGNBQWMsZ0JBQWdCO1VBQzVCLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pCO1FBQ0QsVUFBVSx1QkFBdUI7VUFDL0IsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzVCO1FBQ0QsWUFBWSxzQkFBc0I7VUFDaEMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDcEM7UUFDRCxXQUFXLGdCQUFnQjtVQUN6QixPQUFPLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdCO09BQ0Y7S0FDRixDQUFDLENBQUM7O0lBRUgsTUFBTSxpQkFBaUIsK0NBQStDLENBQUM7SUFDdkUsTUFBTSxlQUFlO01BQ25CLE1BQU07UUFDSixPQUFPLE1BQU07UUFDYixPQUFPLDRFQUE0RTtPQUNwRjtNQUNELE1BQU07UUFDSixPQUFPLE1BQU07UUFDYixPQUFPLGtFQUFrRTtPQUMxRTtNQUNELE1BQU07UUFDSixPQUFPLE1BQU07UUFDYixPQUFPLDhGQUE4RjtPQUN0RztNQUNELFFBQVE7UUFDTixPQUFPLFFBQVE7UUFDZixPQUFPLDZNQUE2TTtPQUNyTjtNQUNELFFBQVE7UUFDTixPQUFPLFFBQVE7UUFDZixPQUFPLDJLQUEySztPQUNuTDtNQUNELE9BQU87UUFDTCxPQUFPLE9BQU87UUFDZCxPQUFPLHlJQUF5STtPQUNqSjtNQUNELE9BQU87UUFDTCxPQUFPLE9BQU87UUFDZCxPQUFPLHVFQUF1RTtPQUMvRTtNQUNELE1BQU07UUFDSixPQUFPLE1BQU07UUFDYixPQUFPLE1BQU07T0FDZDtLQUNGLENBQUM7SUFDRixNQUFNLE9BQU8sNEJBQTRCO01BQ3ZDLE1BQU0sbUJBQW1CLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDbkUsT0FBTztRQUNMLE1BQU0sSUFBSSxNQUFNO1FBQ2hCLFVBQVUsTUFBTSxNQUFNLENBQUMsSUFBSSxNQUFNLEVBQUUsS0FBSztVQUN0QyxNQUFNLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztVQUNqQyxJQUFJLFFBQVEsS0FBSyxFQUFFLE9BQU8sS0FBSyxDQUFDLEVBQUU7WUFDaEMsT0FBTyxFQUFFLENBQUM7V0FDWCxNQUFNLElBQUksTUFBTSxDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixlQUFlLEtBQUssUUFBUSxDQUFDLEVBQUU7WUFDcEYsT0FBTyxFQUFFLENBQUM7V0FDWCxNQUFNLElBQUksUUFBUSxLQUFLLFdBQVcsSUFBSSxRQUFRLEtBQUssR0FBRyxFQUFFO1lBQ3ZELE9BQU8sQ0FBQyxFQUFFLE1BQU0sV0FBVyxFQUFFLENBQUMsQ0FBQztXQUNoQyxNQUFNLElBQUksUUFBUSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDdkMsT0FBTyxDQUFDLFFBQVEsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7V0FDdkMsTUFBTTtZQUNMLE9BQU8sRUFBRSxDQUFDO1dBQ1g7U0FDRixDQUFDO09BQ0gsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLG1CQUFtQixTQUFTO01BQ2hDLE9BQU8sS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDekIsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLHNCQUFzQjtNQUMxQyxNQUFNLGNBQWM7UUFDbEIsR0FBRyxZQUFZO1FBQ2YsR0FBRyxRQUFRLE1BQU07T0FDbEIsQ0FBQztNQUNGLE1BQU0sbUJBQW1CLElBQUksQ0FBQyxRQUFRLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO01BQ3pELE1BQU0sVUFBVSxRQUFRLFFBQVEsS0FBSyxTQUFTLElBQUksUUFBUSxRQUFRLEtBQUssSUFBSSxHQUFHLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLFFBQVEsUUFBUSxLQUFLLEtBQUssR0FBRyxFQUFFLEdBQUcsUUFBUSxRQUFRLENBQUMsQ0FBQztNQUN0TCxNQUFNLGFBQWEsUUFBUSxDQUFDLE9BQU8sRUFBRSxZQUFZO1FBQy9DLE1BQU0sZ0JBQWdCLEtBQUssQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDcEQsSUFBSSxnQkFBZ0IsRUFBRTtVQUNwQixPQUFPLGFBQWEsSUFBSSxLQUFLLENBQUMsUUFBUSxNQUFNLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUM5RixNQUFNO1VBQ0wsT0FBTyxhQUFhLENBQUM7U0FDdEI7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLFFBQVEsS0FBSyxDQUFDLFVBQVUsRUFBRSxZQUFZO1FBQzFDLE1BQU0sV0FBVyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkMsT0FBTyxJQUFJLENBQUM7VUFDVixPQUFPLFFBQVEsTUFBTTtVQUNyQixPQUFPLGdCQUFnQixDQUFDLFFBQVEsTUFBTSxDQUFDO1NBQ3hDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQ3RCLENBQUMsQ0FBQztNQUNILE9BQU8sUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRO1FBQzdCLE1BQU0saUJBQWlCLFFBQVEsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxLQUFLLFdBQVcsQ0FBQztRQUMzRSxPQUFPLElBQUksU0FBUyxFQUFFLE9BQU8sR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksU0FBUyxFQUFFLEVBQUUsY0FBYyxDQUFDLENBQUM7T0FDOUUsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLGlCQUFpQixVQUFVO01BQy9CLE1BQU0sT0FBTyxNQUFNO1FBQ2pCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQztRQUMxQixnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUMxQixDQUFDO01BQ0YsT0FBTyxNQUFNO1FBQ1gsSUFBSSxNQUFNLFlBQVksRUFBRTtVQUN0QixJQUFJLEVBQUUsQ0FBQztTQUNSLE1BQU07VUFDTCxNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDekI7T0FDRixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLGlCQUFpQixNQUFNLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsR0FBRyxFQUFFLENBQUMsQ0FBQzs7SUFFL0YsTUFBTSxpQkFBaUIsNkNBQTZDO01BQ2xFLE1BQU0sR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztNQUNsRSxPQUFPLGdCQUFnQixLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDN0MsQ0FBQztJQUNGLE1BQU0sY0FBYyxxQkFBcUI7TUFDdkMsTUFBTSxZQUFZLE9BQU8sR0FBRyxlQUFlLENBQUM7TUFDNUMsT0FBTyxjQUFjLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsQ0FBQztLQUN0RSxDQUFDO0lBQ0YsTUFBTSx1QkFBdUIscUJBQXFCO01BQ2hELE1BQU0sbUJBQW1CLGNBQWMsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxNQUFNLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUNuRixJQUFJLGdCQUFnQixFQUFFO1FBQ3BCLE1BQU0sbUJBQW1CLE9BQU8sR0FBRyx5QkFBeUIsQ0FBQztRQUM3RCxPQUFPLGNBQWMsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxJQUFJLGlCQUFpQixDQUFDLENBQUM7T0FDaEYsTUFBTTtRQUNMLE9BQU8sT0FBTyxRQUFRLEVBQUUsQ0FBQztPQUMxQjtLQUNGLENBQUM7SUFDRixNQUFNLFdBQVcsc0JBQXNCO01BQ3JDLE1BQU0sVUFBVSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDbkMsSUFBSSxPQUFPLEVBQUU7UUFDWCxNQUFNLFdBQVcsS0FBSyxDQUFDLE9BQU8sSUFBSSxRQUFRLEdBQUcsaUJBQWlCLEdBQUcsVUFBVSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7T0FDNUY7TUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNoRCxPQUFPLE9BQU8sSUFBSSxDQUFDO1VBQ2pCLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDO1VBQzVCLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUM7U0FDdEMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLGlCQUFpQixDQUFDLE1BQU0sRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLENBQUM7T0FDeEYsTUFBTTtRQUNMLE9BQU8sT0FBTyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztPQUNsRDtLQUNGLENBQUM7SUFDRixNQUFNLFNBQVMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0QyxNQUFNLFNBQVMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQzs7SUFFckMsTUFBTSxzQkFBc0IsOEJBQThCO01BQ3hELE1BQU0sZUFBZSx1Q0FBdUM7UUFDMUQsTUFBTSxpQkFBaUIsU0FBUyxPQUFPLFVBQVUsVUFBVSxDQUFDLE9BQU8sTUFBTSxDQUFDLENBQUM7UUFDM0UsSUFBSSxPQUFPLEtBQUssS0FBSyxXQUFXLEVBQUU7VUFDaEMsT0FBTyxRQUFRLEtBQUssQ0FBQztZQUNuQixNQUFNLFdBQVc7WUFDakIsTUFBTSxjQUFjO1dBQ3JCLENBQUMsQ0FBQztTQUNKLE1BQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLEVBQUU7VUFDckMsTUFBTSxRQUFRLE1BQU0sQ0FBQyxPQUFPLGNBQWMsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztVQUNuRixJQUFJLFFBQVEsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksQ0FBQyxFQUFFO1lBQ3ZDLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztXQUN4QixNQUFNO1lBQ0wsT0FBTyxRQUFRLEtBQUssQ0FBQztjQUNuQixNQUFNLGdCQUFnQjtjQUN0QixNQUFNLGNBQWM7Y0FDcEIsU0FBUyxLQUFLLE9BQU8sR0FBRyxDQUFDO2NBQ3pCLGlCQUFpQixNQUFNLE1BQU0sQ0FBQyxPQUFPLGNBQWMsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDNUYsQ0FBQyxDQUFDO1dBQ0o7U0FDRixNQUFNO1VBQ0wsT0FBTyxRQUFRLEtBQUssQ0FBQztZQUNuQixNQUFNLGdCQUFnQjtZQUN0QixNQUFNLGNBQWM7WUFDcEIsTUFBTSxPQUFPLEtBQUs7WUFDbEIsUUFBUSxPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDakMsU0FBUyxDQUFDLE9BQU87WUFDakIsVUFBVSxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFDaEMsR0FBRyxPQUFPLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsT0FBTyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7V0FDekYsQ0FBQyxDQUFDO1NBQ0o7T0FDRixDQUFDO01BQ0YsTUFBTSxXQUFXLDJCQUEyQjtRQUMxQyxNQUFNLFVBQVUsSUFBSSxLQUFLLEtBQUssV0FBVyxJQUFJLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xFLElBQUksUUFBUSxLQUFLLENBQUMsRUFBRTtVQUNsQixPQUFPLE9BQU8sR0FBRyxFQUFFLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUM1RSxNQUFNO1VBQ0wsT0FBTyxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQy9EO09BQ0YsQ0FBQztNQUNGLE1BQU0sZ0JBQWdCLFlBQVk7UUFDaEMsTUFBTSxRQUFRLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUNyQyxNQUFNLFdBQVcsSUFBSSxXQUFXLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxPQUFPLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUSxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO09BQ2xFLENBQUM7TUFDRixNQUFNLFdBQVcsOEJBQThCLG9CQUFvQjtRQUNqRSxNQUFNLFdBQVcsYUFBYSxFQUFFLENBQUM7UUFDakMsTUFBTSxRQUFRLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QyxNQUFNLE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRSxjQUFjLGlCQUFpQixFQUFFLFNBQVMsRUFBRTtVQUNwRSxrQkFBa0IsS0FBSztVQUN2QixRQUFRLFFBQVEsS0FBSyxFQUFFO1NBQ3hCLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUNoQixDQUFDO01BQ0YsT0FBTztRQUNMLGFBQWE7UUFDYixRQUFRO09BQ1QsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLGtCQUFrQiw2QkFBNkI7TUFDbkQsTUFBTSxVQUFVLElBQUksUUFBUSxDQUFDO01BQzdCLE1BQU0sZ0JBQWdCLE9BQU8sS0FBSyxLQUFLLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxLQUFLLFlBQVksQ0FBQyxDQUFDLEVBQUUsSUFBSSxjQUFjLEVBQUUsSUFBSSxjQUFjLENBQUMsQ0FBQyxHQUFHLE9BQU8sUUFBUSxDQUFDO01BQzNKLE9BQU87UUFDTCxPQUFPLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDO1FBQ25ELGFBQWE7T0FDZCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0scUJBQXFCLDZCQUE2QjtNQUN0RCxNQUFNLHNCQUFzQixHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ3hFLE1BQU0sU0FBUyxTQUFTLEVBQUUsY0FBYyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQzVELE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPO1FBQ3hELE1BQU0sT0FBTyxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQ2hDLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLFNBQVMsSUFBSSxDQUFDLEdBQUcsYUFBYSxFQUFFLEVBQUUsQ0FBQyxNQUFNLFVBQVUsV0FBVyxFQUFFLENBQUMsQ0FBQztPQUNuRSxDQUFDLENBQUM7TUFDSCxPQUFPLG9CQUFvQixDQUFDO1FBQzFCLE1BQU0sSUFBSSxLQUFLLE9BQU8sRUFBRSxHQUFHLFFBQVEsS0FBSyxFQUFFLEdBQUcsSUFBSSxLQUFLO1FBQ3RELE1BQU0sSUFBSSxLQUFLO1FBQ2YsU0FBUyxRQUFRLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQztRQUNwQyxNQUFNLFFBQVEsS0FBSyxFQUFFO1FBQ3JCLE9BQU8sS0FBSyxTQUFTLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQztRQUMvQyxPQUFPO1FBQ1AsTUFBTTtRQUNOLFNBQVMsQ0FBQztRQUNWLFNBQVMsUUFBUTtRQUNqQixTQUFTLElBQUksS0FBSyxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUM7UUFDOUMsb0JBQW9CLEVBQUU7T0FDdkIsRUFBRSxVQUFVLEVBQUUsU0FBUyxPQUFPLENBQUMsQ0FBQztLQUNsQyxDQUFDOztJQUVGLE1BQU0sVUFBVSxjQUFjLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUTtNQUN0RCxJQUFJLFFBQVEsSUFBSSxFQUFFLFNBQVMsSUFBSSxDQUFDO01BQ2hDLE1BQU0sU0FBUyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUMvQixJQUFJLE1BQU0sT0FBTyxHQUFHLENBQUMsRUFBRTtRQUNyQixRQUFRLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixTQUFTLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUNwQjtNQUNELE9BQU87UUFDTCxLQUFLO1FBQ0wsTUFBTTtPQUNQLENBQUM7S0FDSCxDQUFDLENBQUM7SUFDSCxNQUFNLDBCQUEwQixTQUFTO01BQ3ZDLE1BQU0sT0FBTztNQUNiLElBQUk7S0FDTCxDQUFDLENBQUM7SUFDSCxJQUFJLFNBQVMsQ0FBQztJQUNkLENBQUMscUJBQXFCO01BQ3BCLFNBQVMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO01BQ3BELFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0tBQzdDLENBQUMsU0FBUyxLQUFLLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNsQyxNQUFNLFFBQVEsMkJBQTJCO01BQ3ZDLElBQUksU0FBUyxLQUFLLFNBQVMsVUFBVSxFQUFFO1FBQ3JDLE9BQU8sVUFBVSxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDaEQsTUFBTTtRQUNMLE9BQU8sVUFBVSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDOUI7S0FDRixDQUFDO0lBQ0YsTUFBTSw0QkFBNEIsb0NBQW9DO01BQ3BFLE1BQU0sYUFBYSxNQUFNLFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO01BQ25ELE1BQU0sT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO01BQ25ELE9BQU87UUFDTCxNQUFNLE9BQU87UUFDYixJQUFJO09BQ0wsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxpQkFBaUI7TUFDckI7UUFDRSxPQUFPLE1BQU07UUFDYixNQUFNLFlBQVk7UUFDbEIsUUFBUSxXQUFXO1FBQ25CLFNBQVMsYUFBYTtPQUN2QjtNQUNEO1FBQ0UsT0FBTyxRQUFRO1FBQ2YsTUFBTSxjQUFjO1FBQ3BCLFFBQVEsYUFBYTtRQUNyQixTQUFTLGVBQWU7T0FDekI7TUFDRDtRQUNFLE9BQU8sT0FBTztRQUNkLE1BQU0sYUFBYTtRQUNuQixRQUFRLFlBQVk7UUFDcEIsU0FBUyxjQUFjO09BQ3hCO01BQ0Q7UUFDRSxPQUFPLFNBQVM7UUFDaEIsTUFBTSxlQUFlO1FBQ3JCLFFBQVEsY0FBYztRQUN0QixTQUFTLGFBQWE7T0FDdkI7S0FDRixDQUFDO0lBQ0YsTUFBTSxZQUFZLFVBQVU7TUFDMUIsTUFBTSxtQkFBbUIsTUFBTSxNQUFNLENBQUMsY0FBYyxFQUFFLFFBQVEsTUFBTSxVQUFVLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUM7TUFDbkcsTUFBTSxnQkFBZ0IsVUFBVSxNQUFNLE1BQU0sVUFBVSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDckUsTUFBTSxnQkFBZ0IsV0FBVyxRQUFRLEtBQUssQ0FBQztNQUMvQyxNQUFNLHVCQUF1QixRQUFRO1FBQ25DLE1BQU0sUUFBUSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sWUFBWSxLQUFLLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxJQUFJLE1BQU0sWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNuRixRQUFRLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7T0FDbEUsQ0FBQztNQUNGLE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztNQUN4RCxNQUFNLFdBQVcsV0FBVyxNQUFNLE1BQU0sQ0FBQyxjQUFjLEVBQUUsUUFBUSxJQUFJLE9BQU8sS0FBSyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxNQUFNLFlBQVksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUM7TUFDaEosT0FBTztRQUNMLFNBQVMsT0FBTztRQUNoQixNQUFNLFFBQVEsS0FBSyxFQUFFO1FBQ3JCLE1BQU0sUUFBUSxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ2pDLGFBQWE7UUFDYixpQkFBaUIsUUFBUSxLQUFLO1FBQzlCLGFBQWE7UUFDYixRQUFRO1FBQ1IsWUFBWSxvQkFBb0I7UUFDaEMsT0FBTztRQUNQLFlBQVksS0FBSztRQUNqQixXQUFXLFFBQVEsQ0FBQyxNQUFNLFVBQVUsU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDO09BQzNELENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsdUJBQXVCLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDMUcsTUFBTSxrQkFBa0IsdUJBQXVCO01BQzdDLE1BQU0sWUFBWSxlQUFlLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUN4RSxNQUFNLEdBQUcsU0FBUyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUU7UUFDNUMsTUFBTSxTQUFTLE9BQU8sVUFBVSxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ25ELFNBQVMscUJBQXFCLENBQUMsTUFBTSxDQUFDO1FBQ3RDLGlCQUFpQixNQUFNLFNBQVMsTUFBTSxjQUFjLENBQUMsU0FBUyxjQUFjLEVBQUUsQ0FBQztPQUNoRixDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sY0FBYyx1QkFBdUI7TUFDekMsTUFBTSxTQUFTLFNBQVMsRUFBRSxDQUFDO01BQzNCLE1BQU0sVUFBVSxLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVMsS0FBSyxPQUFPLENBQUMsQ0FBQztNQUNyRCxPQUFPLFFBQVEsS0FBSyxDQUFDLE1BQU0sVUFBVSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLElBQUksT0FBTyxLQUFLLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxNQUFNLFVBQVUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2pLLE9BQU8sV0FBVztRQUNsQixRQUFRLEdBQUc7T0FDWixDQUFDLENBQUMsQ0FBQztLQUNMLENBQUM7O0lBRUYsTUFBTSxZQUFZLFVBQVU7TUFDMUIsTUFBTSxpQkFBaUIsV0FBVyxDQUFDO01BQ25DLE1BQU0sZ0JBQWdCLFVBQVUsTUFBTSxNQUFNLFVBQVUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3JFLE1BQU0sZ0JBQWdCLFVBQVUsTUFBTTtRQUNwQyxNQUFNLE1BQU0sTUFBTSxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxJQUFJLEdBQUcsRUFBRTtVQUNQLE9BQU8sUUFBUSxLQUFLLENBQUM7WUFDbkIsS0FBSyxHQUFHLE9BQU8sR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxHQUFHLEtBQUs7WUFDcEUsUUFBUSxNQUFNLElBQUksV0FBVyxDQUFDLE1BQU0sVUFBVSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7V0FDbkUsQ0FBQyxDQUFDO1NBQ0osTUFBTTtVQUNMLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztTQUN4QjtPQUNGLENBQUM7TUFDRixNQUFNLHVCQUF1QixRQUFRO1FBQ25DLE1BQU0saUJBQWlCLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxPQUFPLEtBQUssQ0FBQyxDQUFDO1FBQy9ELE1BQU0sT0FBTyxjQUFjLEtBQUssQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEVBQUUsT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQy9FLFFBQVEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztPQUMxQyxDQUFDO01BQ0YsTUFBTSxVQUFVLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsU0FBUyxVQUFVLENBQUMsQ0FBQztNQUN4RixPQUFPO1FBQ0wsU0FBUyxRQUFRO1FBQ2pCLE1BQU0sUUFBUSxLQUFLLENBQUMsY0FBYyxDQUFDO1FBQ25DLE1BQU0sUUFBUSxLQUFLLEVBQUU7UUFDckIsYUFBYTtRQUNiLGlCQUFpQixRQUFRLEtBQUs7UUFDOUIsYUFBYTtRQUNiLFVBQVUsc0JBQXNCLENBQUMsTUFBTSxDQUFDO1FBQ3hDLFlBQVksb0JBQW9CO1FBQ2hDLE9BQU87UUFDUCxZQUFZLEtBQUs7UUFDakIsV0FBVyxRQUFRLENBQUMsTUFBTSxVQUFVLFNBQVMsQ0FBQyxJQUFJLE9BQU8sQ0FBQztPQUMzRCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0scUJBQXFCLHVCQUF1QixrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzNHLE1BQU0sbUJBQW1CLHVCQUF1QjtNQUM5QyxNQUFNLFlBQVksZUFBZSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7TUFDeEUsTUFBTSxHQUFHLFNBQVMsa0JBQWtCLENBQUMsUUFBUSxFQUFFO1FBQzdDLE1BQU0sUUFBUTtRQUNkLFNBQVMscUJBQXFCLENBQUMsTUFBTSxDQUFDO1FBQ3RDLGlCQUFpQixNQUFNLFNBQVMsTUFBTSxjQUFjLENBQUMsU0FBUyxjQUFjLEVBQUUsQ0FBQztPQUNoRixDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sbUJBQW1CO01BQ3ZCLGVBQWU7TUFDZixVQUFVO01BQ1YsUUFBUTtNQUNSLGdCQUFnQjtNQUNoQixZQUFZO0tBQ2IsQ0FBQztJQUNGLE1BQU0sYUFBYSxjQUFjO01BQy9CLE1BQU0sUUFBUSxVQUFVLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUMxQyxPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ2pFLENBQUM7SUFDRixNQUFNLG9CQUFvQixjQUFjO01BQ3RDLE1BQU0scUJBQXFCLE1BQU07UUFDL0IsTUFBTSxRQUFRLFVBQVUsQ0FBQyxVQUFVLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDbkQsT0FBTyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxLQUFLLFFBQVEsQ0FBQyxJQUFJLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUNqRixDQUFDO01BQ0YsT0FBTyxVQUFVLFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksa0JBQWtCLEVBQUUsQ0FBQztLQUMxRSxDQUFDO0lBQ0YsTUFBTSxZQUFZLFVBQVU7TUFDMUIsTUFBTSxhQUFhLGFBQWEsQ0FBQztNQUNqQyxNQUFNLG1CQUFtQixNQUFNO1FBQzdCLE1BQU0sZUFBZSxjQUFjLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQy9FLE1BQU0sYUFBYSxNQUFNLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sUUFBUSxPQUFPLEtBQUssQ0FBQztRQUMzQixNQUFNLE9BQU8sVUFBVSxHQUFHLFVBQVUsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ3hELE1BQU0sV0FBVyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVE7VUFDckMsTUFBTSxTQUFTLElBQUksT0FBTyxDQUFDO1VBQzNCLE9BQU8sTUFBTSxZQUFZLEVBQUUsS0FBSyxJQUFJLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsS0FBSyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ2pILENBQUMsUUFBUSxDQUFDLE1BQU07VUFDZixPQUFPLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQyxPQUFPLFVBQVU7WUFDakIsUUFBUSxJQUFJO1dBQ2IsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO1FBQ0gsT0FBTztVQUNMLFFBQVE7VUFDUixNQUFNLFVBQVU7U0FDakIsQ0FBQztPQUNILENBQUM7TUFDRixNQUFNLGdCQUFnQixRQUFRLFlBQVksUUFBUSxPQUFPLENBQUMsU0FBUyxLQUFLLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQztNQUMxRixNQUFNLGtCQUFrQixNQUFNO1FBQzVCLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFDdEMsT0FBTyxRQUFRLENBQUM7T0FDakIsQ0FBQztNQUNGLE1BQU0sZ0JBQWdCLFFBQVEsTUFBTSxRQUFRLEtBQUssQ0FBQztRQUNoRCxLQUFLLEtBQUs7UUFDVixRQUFRLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsZUFBZSxJQUFJLEVBQUUsR0FBRyxFQUFFO09BQ3BFLENBQUMsQ0FBQztNQUNILE1BQU0sV0FBVyxXQUFXLE1BQU07UUFDaEMsTUFBTSxZQUFZLFNBQVMsQ0FBQyxNQUFNO1VBQ2hDLE1BQU0sTUFBTSxFQUFFLENBQUM7VUFDZixNQUFNLFlBQVksQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLE9BQU8sT0FBTyxDQUFDLENBQUM7U0FDdkQsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sdUJBQXVCLFFBQVE7UUFDbkMsTUFBTSxnQkFBZ0IsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzVDLE1BQU0sT0FBTyxRQUFRLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDO1FBQ2pFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztPQUMxQyxDQUFDO01BQ0YsTUFBTSxVQUFVLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxTQUFTLFVBQVUsQ0FBQyxDQUFDO01BQzlGLE9BQU87UUFDTCxTQUFTLE9BQU87UUFDaEIsTUFBTSxRQUFRLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDL0IsTUFBTSxRQUFRLEtBQUssRUFBRTtRQUNyQixhQUFhO1FBQ2IsZUFBZTtRQUNmLGFBQWE7UUFDYixRQUFRO1FBQ1IsWUFBWSxvQkFBb0I7UUFDaEMsT0FBTztRQUNQLFlBQVksS0FBSztRQUNqQixXQUFXLEtBQUs7T0FDakIsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLHlCQUF5Qix1QkFBdUIsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMvRyxNQUFNLHVCQUF1Qix1QkFBdUI7TUFDbEQsTUFBTSxZQUFZLGVBQWUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO01BQ3hFLE1BQU0sR0FBRyxTQUFTLGtCQUFrQixDQUFDLFlBQVksRUFBRTtRQUNqRCxNQUFNLFNBQVMsT0FBTyxVQUFVLFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFDbkQsU0FBUyxxQkFBcUIsQ0FBQyxNQUFNLENBQUM7UUFDdEMsaUJBQWlCLE1BQU0sU0FBUyxNQUFNLGNBQWMsQ0FBQyxTQUFTLGNBQWMsRUFBRSxDQUFDO09BQ2hGLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxRQUFRO01BQ1osbUJBQW1CO1FBQ2pCLElBQUk7UUFDSixJQUFJO1FBQ0osS0FBSztRQUNMLElBQUk7UUFDSixJQUFJO1FBQ0osS0FBSztRQUNMLElBQUk7UUFDSixLQUFLO1FBQ0wsSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLE1BQU07UUFDTixNQUFNO1FBQ04sSUFBSTtRQUNKLElBQUk7UUFDSixHQUFHO1FBQ0gsSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtPQUNMO01BQ0QsT0FBTztRQUNMLElBQUk7UUFDSixJQUFJO09BQ0w7TUFDRCxVQUFVLENBQUMsR0FBRyxDQUFDO01BQ2YsT0FBTyxDQUFDLEVBQUUsQ0FBQztLQUNaLENBQUM7SUFDRixNQUFNLFVBQVUsQ0FBQyxNQUFNO01BQ3JCLE1BQU0sZ0JBQWdCLFFBQVEsQ0FBQztNQUMvQixNQUFNLGdCQUFnQixPQUFPLEdBQUcsYUFBYSxDQUFDO01BQzlDLE1BQU0sZUFBZSxNQUFNLEdBQUcsYUFBYSxDQUFDO01BQzVDLE1BQU0sTUFBTSxLQUFLLENBQUM7TUFDbEIsTUFBTSxNQUFNLFNBQVMsQ0FBQyxHQUFHLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO01BQ3ZDLE1BQU0seUJBQXlCO1FBQzdCLFVBQVU7UUFDVixhQUFhLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDO1FBQzVELEdBQUcsR0FBRyxhQUFhLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQztRQUN2QyxhQUFhLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQztPQUNsQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDWixNQUFNLFFBQVEsQ0FBQyxRQUFRLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDckQsT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUN6QyxHQUFHLENBQUM7SUFDTCxNQUFNLFNBQVMsb0JBQW9CLE1BQU0sQ0FBQyxRQUFRLEVBQUUsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEcsTUFBTSxRQUFRLHFCQUFxQjtNQUNqQyxNQUFNLFFBQVEsUUFBUSxLQUFLLENBQUMsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUNqRCxPQUFPLEtBQUssS0FBSyxDQUFDLFNBQVM7UUFDekIsTUFBTSxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixNQUFNLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRTtVQUM3QixPQUFPLFFBQVEsS0FBSyxDQUFDO1lBQ25CLEtBQUs7WUFDTCxNQUFNLE9BQU87V0FDZCxDQUFDLENBQUM7U0FDSixNQUFNO1VBQ0wsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO1NBQ3hCO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sWUFBWSxxQkFBcUIsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQzs7SUFFbkcsTUFBTSxPQUFPO01BQ1gsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO01BQ2xCLFFBQVEsVUFBVSxDQUFDLEVBQUUsQ0FBQztNQUN0QixPQUFPLFVBQVUsQ0FBQyxFQUFFLENBQUM7TUFDckIsV0FBVyxVQUFVLENBQUMsQ0FBQyxDQUFDO01BQ3hCLFFBQVEsVUFBVSxDQUFDLEVBQUUsQ0FBQztNQUN0QixNQUFNLFVBQVUsQ0FBQyxFQUFFLENBQUM7TUFDcEIsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDO01BQ2xCLE9BQU8sVUFBVSxDQUFDLEVBQUUsQ0FBQztNQUNyQixNQUFNLFVBQVUsQ0FBQyxFQUFFLENBQUM7TUFDcEIsT0FBTyxVQUFVLENBQUMsRUFBRSxDQUFDO01BQ3JCLE1BQU0sVUFBVSxDQUFDLEVBQUUsQ0FBQztNQUNwQixLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUM7TUFDbkIsUUFBUSxVQUFVLENBQUMsRUFBRSxDQUFDO01BQ3RCLFVBQVUsVUFBVSxDQUFDLEVBQUUsQ0FBQztLQUN6QixDQUFDOztJQUVGLE1BQU0sMkJBQTJCLDZCQUE2QjtNQUM1RCxJQUFJLGNBQWMsUUFBUSxLQUFLLEVBQUUsQ0FBQztNQUNsQyxNQUFNLDBCQUEwQixRQUFRLElBQUksSUFBSSxDQUFDLGFBQWEsWUFBWSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQzFHLE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBTSxFQUFFLHVCQUF1QixFQUFFLE9BQU87UUFDbkUsTUFBTSxPQUFPLEdBQUcsYUFBYSxFQUFFLENBQUM7UUFDaEMsY0FBYyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sVUFBVSxXQUFXLEVBQUUsQ0FBQyxDQUFDO09BQ3JELENBQUMsQ0FBQztNQUNILE1BQU0sU0FBUyxTQUFTLEVBQUUsY0FBYyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQzVELE1BQU0sZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNqQyxNQUFNLGVBQWUsVUFBVSxDQUFDLDRCQUE0QixDQUFDLENBQUM7TUFDOUQsTUFBTSxjQUFjLDZCQUE2QjtRQUMvQyxNQUFNLE9BQU8sdUJBQXVCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEQsTUFBTSxXQUFXLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzQyxNQUFNLGNBQWMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQztRQUN6RCxNQUFNLFdBQVcsV0FBVyxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsSUFBSSxlQUFlLEdBQUcsV0FBVyxDQUFDLENBQUM7UUFDeEYsTUFBTSxTQUFTLFdBQVcsSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLElBQUksYUFBYSxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBQ3BGLElBQUksU0FBUyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNuQyxXQUFXLEtBQUssQ0FBQyxRQUFRO1VBQ3ZCLFlBQVksU0FBUyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztVQUN0QyxJQUFJLFNBQVMsRUFBRTtZQUNiLFFBQVEsS0FBSyxDQUFDLFlBQVksSUFBSSxRQUFRLElBQUksZUFBZSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sS0FBSyxDQUFDLFVBQVUsSUFBSSxRQUFRLElBQUksYUFBYSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1dBQy9EO1NBQ0YsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sV0FBVywwQkFBMEIsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7TUFDOUYsTUFBTSxXQUFXLDBCQUEwQixXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztNQUM5RixNQUFNLGFBQWEsUUFBUSxhQUFhLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxFQUFFLFVBQVU7UUFDbkYsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hCLE9BQU8sUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDNUIsQ0FBQyxDQUFDO01BQ0gsTUFBTSxhQUFhLFFBQVE7UUFDekIsSUFBSSxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsRUFBRTtVQUMxQixVQUFVLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7VUFDdkQsT0FBTyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QixNQUFNO1VBQ0wsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO1NBQ3hCO09BQ0YsQ0FBQztNQUNGLE1BQU0sb0JBQW9CLHFDQUFxQztRQUM3RCxNQUFNLG9CQUFvQixTQUFTLE9BQU8sVUFBVSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEUsTUFBTSxlQUFlLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRCxNQUFNLFVBQVUsWUFBWSxDQUFDLE1BQU0sRUFBRSx1QkFBdUIsRUFBRSxPQUFPO1VBQ25FLFNBQVMsSUFBSSxDQUFDLEdBQUcsYUFBYSxFQUFFLEVBQUUsQ0FBQyxNQUFNLFVBQVUsV0FBVyxFQUFFLENBQUMsQ0FBQztTQUNuRSxDQUFDLENBQUM7UUFDSCxNQUFNLFVBQVUsUUFBUTtVQUN0QixJQUFJLENBQUMsU0FBUyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1dBQ2Q7U0FDRixDQUFDO1FBQ0YsT0FBTyxNQUFNLE9BQU8sQ0FBQztVQUNuQixLQUFLO1lBQ0gsS0FBSyxRQUFRO1lBQ2IsWUFBWTtjQUNWLFNBQVMsaUJBQWlCO2NBQzFCLGNBQWMsaUJBQWlCO2FBQ2hDO1lBQ0QsU0FBUyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7V0FDL0I7VUFDRCxZQUFZLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLFNBQVMsT0FBTyxVQUFVLE1BQU0sQ0FBQyxDQUFDO1VBQzNFLGtCQUFrQixRQUFRLENBQUM7WUFDekIsU0FBUyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxZQUFZLEVBQUU7Y0FDbkIsaUJBQWlCLENBQUM7Z0JBQ2hCLE9BQU87Z0JBQ1AsTUFBTTtlQUNQLEVBQUUsYUFBYSxDQUFDO2NBQ2pCLGlCQUFpQixDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsYUFBYSxDQUFDO2NBQzVDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxjQUFjO2dCQUM3QixJQUFJLEVBQUUsTUFBTSxJQUFJLFFBQVEsS0FBSyxJQUFJLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxJQUFJLFFBQVEsS0FBSyxJQUFJLE1BQU0sRUFBRSxFQUFFO2tCQUNsRixJQUFJLENBQUMsU0FBUyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQy9CLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzttQkFDZjtpQkFDRjtlQUNGLENBQUM7Y0FDRixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxDQUFDO2NBQ3ZCLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLENBQUM7YUFDM0IsQ0FBQztXQUNILENBQUM7VUFDRixZQUFZO1lBQ1YsQ0FBQyxPQUFPLEVBQUUsR0FBRztjQUNYLFlBQVk7Y0FDWixRQUFRO2FBQ1Q7WUFDRCxDQUFDLEtBQUssRUFBRSxHQUFHO2NBQ1QsWUFBWTtjQUNaLHNCQUFzQjthQUN2QjtZQUNELENBQUMsUUFBUSxFQUFFLEdBQUc7Y0FDWixZQUFZO2NBQ1osc0JBQXNCO2FBQ3ZCO1dBQ0Y7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxXQUFXLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLFFBQVEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDM0ksTUFBTSxVQUFVLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLFFBQVEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDekksTUFBTSxXQUFXLE1BQU0sQ0FBQztRQUN0QixLQUFLO1VBQ0gsS0FBSyxLQUFLO1VBQ1YsU0FBUztZQUNQLG1CQUFtQjtZQUNuQixvQkFBb0I7V0FDckI7U0FDRjtRQUNELFlBQVksQ0FBQyxLQUFLLE9BQU8sQ0FBQztZQUN0QixpQkFBaUIsUUFBUSxDQUFDO2NBQ3hCLFNBQVMsT0FBTyxDQUFDLEVBQUUsQ0FBQztjQUNwQixNQUFNLENBQUMsWUFBWSxFQUFFO2dCQUNuQixpQkFBaUIsQ0FBQztrQkFDaEIsT0FBTztrQkFDUCxNQUFNO2lCQUNQLEVBQUUsYUFBYSxDQUFDO2dCQUNqQixpQkFBaUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLGFBQWEsQ0FBQztlQUM3QyxDQUFDO2NBQ0YsTUFBTSxDQUFDLDJCQUEyQixFQUFFO2dCQUNsQyxLQUFLLENBQUMsY0FBYyxFQUFFLGNBQWM7a0JBQ2xDLFlBQVksU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sS0FBSyxDQUFDLENBQUM7aUJBQzVDLENBQUM7Z0JBQ0YsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVE7a0JBQ3hCLElBQUksU0FBUyxDQUFDLFlBQVksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQzVDLENBQUM7Z0JBQ0YsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLFFBQVE7a0JBQ3RCLElBQUksU0FBUyxDQUFDLFlBQVksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQzVDLENBQUM7ZUFDSCxDQUFDO2NBQ0YsTUFBTSxPQUFPLENBQUM7Z0JBQ1osTUFBTSxTQUFTO2dCQUNmLFNBQVMsU0FBUztrQkFDaEIsV0FBVyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7a0JBQ2xDLE9BQU8sUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzVCO2dCQUNELFVBQVUsVUFBVTtnQkFDcEIsTUFBTSxTQUFTO2tCQUNiLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7a0JBQ3RCLE9BQU8sUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzVCO2dCQUNELFFBQVEsU0FBUztrQkFDZixRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2tCQUN0QixPQUFPLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUM1QjtnQkFDRCxRQUFRLGVBQWU7a0JBQ3JCLEVBQUUsSUFBSSxFQUFFLENBQUM7a0JBQ1QsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO2lCQUN4QjtnQkFDRCxTQUFTLGVBQWU7a0JBQ3RCLEVBQUUsSUFBSSxFQUFFLENBQUM7a0JBQ1QsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO2lCQUN4QjtlQUNGLENBQUM7YUFDSCxDQUFDO1dBQ0gsQ0FBQyxDQUFDO1FBQ0wsWUFBWSxRQUFRLENBQUM7VUFDbkIsUUFBUSxPQUFPLENBQUMsRUFBRSxDQUFDO1VBQ25CLE1BQU0sT0FBTyxDQUFDO1lBQ1osTUFBTSxTQUFTO1lBQ2YsU0FBUyxVQUFVO1lBQ25CLFNBQVMsVUFBVTtZQUNuQixVQUFVLFVBQVU7V0FDckIsQ0FBQztVQUNGLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxRQUFRO2NBQ3ZELE1BQU0sQ0FBQztnQkFDTCxRQUFRO2dCQUNSLE9BQU87ZUFDUixFQUFFLFVBQVU7Z0JBQ1gsTUFBTSxhQUFhLFlBQVksUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO2dCQUN0RSxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtrQkFDeEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUNwQjtlQUNGLENBQUMsQ0FBQzthQUNKLENBQUMsQ0FBQyxDQUFDO1NBQ1AsQ0FBQztPQUNILENBQUMsQ0FBQztNQUNILE9BQU87UUFDTCxLQUFLO1VBQ0gsS0FBSyxLQUFLO1VBQ1YsU0FBUyxDQUFDLGtCQUFrQixDQUFDO1NBQzlCO1FBQ0QsWUFBWTtVQUNWLFFBQVEsT0FBTyxFQUFFO1VBQ2pCLFFBQVEsT0FBTyxFQUFFO1VBQ2pCLE9BQU8sT0FBTyxFQUFFO1NBQ2pCO1FBQ0QsWUFBWSxRQUFRLENBQUM7VUFDbkIsUUFBUSxPQUFPLENBQUMsRUFBRSxDQUFDO1VBQ25CLE1BQU0sT0FBTyxDQUFDO1lBQ1osTUFBTSxNQUFNO1lBQ1osYUFBYSxnQkFBZ0IsbUJBQW1CO1lBQ2hELFFBQVEsS0FBSztZQUNiLFVBQVUsNEJBQTRCO1lBQ3RDLFVBQVUsZUFBZTtjQUN2QixJQUFJLFFBQVEsQ0FBQyxXQUFXLFFBQVEsQ0FBQyxFQUFFO2dCQUNqQyxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7ZUFDeEIsTUFBTTtnQkFDTCxPQUFPLENBQUMsV0FBVyxRQUFRLENBQUMsQ0FBQztnQkFDN0IsT0FBTyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztlQUM1QjthQUNGO1dBQ0YsQ0FBQztTQUNILENBQUM7T0FDSCxDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLGtCQUFrQjtNQUN0QixPQUFPLEdBQUc7TUFDVixRQUFRLEdBQUc7TUFDWCxRQUFRLEdBQUc7TUFDWCxRQUFRLEdBQUc7TUFDWCxRQUFRLEdBQUc7TUFDWCxRQUFRLEdBQUc7TUFDWCxRQUFRLEdBQUc7S0FDWixDQUFDO0lBQ0YsTUFBTSxtQkFBbUI7TUFDdkIsWUFBWSxLQUFLO01BQ2pCLFdBQVcsS0FBSztNQUNoQixTQUFTLE1BQU07TUFDZixVQUFVLE1BQU07TUFDaEIsU0FBUyxNQUFNO01BQ2YsV0FBVyxNQUFNO01BQ2pCLFlBQVksTUFBTTtLQUNuQixDQUFDO0lBQ0YsTUFBTSxRQUFRLHVCQUF1QjtNQUNuQyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQ3ZDLE9BQU8sSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztLQUM3QyxDQUFDO0lBQ0YsTUFBTSxPQUFPLHlCQUF5QjtNQUNwQyxJQUFJLFlBQVksS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQy9CLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO09BQ3ZFLE1BQU07UUFDTCxPQUFPLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO09BQzFEO0tBQ0YsQ0FBQztJQUNGLE1BQU0sV0FBVyxZQUFZLEtBQUssQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4RSxNQUFNLFlBQVksVUFBVTtNQUMxQixNQUFNLG1CQUFtQixNQUFNO1FBQzdCLElBQUksV0FBVyxRQUFRLEtBQUssRUFBRSxDQUFDO1FBQy9CLE1BQU0sUUFBUSxPQUFPLEtBQUssQ0FBQztRQUMzQixNQUFNLFdBQVcsTUFBTSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxJQUFJLFFBQVEsRUFBRTtVQUNaLEtBQUssSUFBSSxZQUFZLENBQUMsRUFBRSxRQUFRLE9BQU8sRUFBRSxJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUU7WUFDeEUsTUFBTSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDckMsTUFBTSxTQUFTLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QixXQUFXLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxJQUFJLE9BQU8sS0FBSyxRQUFRLElBQUksSUFBSSxPQUFPLEtBQUssRUFBRSxJQUFJLElBQUksT0FBTyxLQUFLLE1BQU0sQ0FBQyxDQUFDO1dBQzVHO1NBQ0Y7UUFDRCxPQUFPO1VBQ0wsUUFBUTtVQUNSLE1BQU0sUUFBUTtTQUNmLENBQUM7T0FDSCxDQUFDO01BQ0YsTUFBTSxnQkFBZ0IsUUFBUSxZQUFZLFFBQVEsT0FBTyxDQUFDLFNBQVMsS0FBSyxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUM7TUFDMUYsTUFBTSxrQkFBa0IsTUFBTTtRQUM1QixNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sUUFBUSxDQUFDO09BQ2pCLENBQUM7TUFDRixNQUFNLGdCQUFnQixVQUFVLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQztNQUNoRCxNQUFNLFdBQVcsV0FBVyxNQUFNO1FBQ2hDLE1BQU0sWUFBWSxTQUFTLENBQUMsTUFBTTtVQUNoQyxNQUFNLE1BQU0sRUFBRSxDQUFDO1VBQ2YsTUFBTSxZQUFZLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxPQUFPLE9BQU8sQ0FBQyxDQUFDO1NBQ3ZELENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLHVCQUF1QixRQUFRO1FBQ25DLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1QyxNQUFNLE9BQU8sUUFBUSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsS0FBSyxNQUFNLENBQUMsQ0FBQztRQUNuRSxRQUFRLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7T0FDMUMsQ0FBQztNQUNGLE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxNQUFNLENBQUMsQ0FBQztNQUN4RixPQUFPO1FBQ0wsU0FBUyxZQUFZO1FBQ3JCLE1BQU0sUUFBUSxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzNCLE1BQU0sUUFBUSxLQUFLLEVBQUU7UUFDckIsYUFBYTtRQUNiLGFBQWE7UUFDYixlQUFlO1FBQ2YsUUFBUTtRQUNSLFlBQVksb0JBQW9CO1FBQ2hDLE9BQU87UUFDUCxZQUFZLEtBQUs7UUFDakIsV0FBVyxLQUFLO09BQ2pCLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsdUJBQXVCLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDN0csTUFBTSxvQkFBb0IsUUFBUTtNQUNoQyxJQUFJLEVBQUUsQ0FBQztNQUNQLE1BQU0sYUFBYSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7TUFDL0IsTUFBTSxVQUFVO1FBQ2QsSUFBSSxFQUFFLE1BQU0sR0FBRyxFQUFFO1FBQ2pCLElBQUksRUFBRSxNQUFNLEdBQUcsRUFBRTtRQUNqQixJQUFJLEVBQUUsTUFBTSxHQUFHLEVBQUU7UUFDakIsSUFBSSxFQUFFLE1BQU0sR0FBRyxFQUFFO1FBQ2pCLElBQUksRUFBRSxNQUFNLEdBQUcsRUFBRTtRQUNqQixLQUFLLEVBQUUsTUFBTSxHQUFHLEVBQUU7T0FDbkIsQ0FBQztNQUNGLE9BQU8sQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxVQUFVLENBQUM7S0FDekUsQ0FBQztJQUNGLE1BQU0sZUFBZSxFQUFFLENBQUM7SUFDeEIsTUFBTSxlQUFlLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUN6QyxNQUFNLHFCQUFxQixVQUFVO01BQ25DLE1BQU0sa0JBQWtCLE1BQU0sTUFBTSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztNQUNuRSxNQUFNLG1CQUFtQixRQUFRLFFBQVEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLEVBQUUsTUFBTSxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDN0YsT0FBTztRQUNMLGdCQUFnQjtRQUNoQixVQUFVLHVCQUF1QixNQUFNLFlBQVksQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMxRyxhQUFhLDBCQUEwQjtVQUNyQyxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQ1YsbUJBQW1CO1lBQ25CLE9BQU87V0FDUixDQUFDLENBQUM7VUFDSCxNQUFNLGFBQWEsS0FBSyxDQUFDLElBQUksRUFBRTtZQUM3QixtQkFBbUI7WUFDbkIsT0FBTztXQUNSLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsRUFBRTtZQUM3QixtQkFBbUI7WUFDbkIsT0FBTztXQUNSLENBQUMsQ0FBQyxDQUFDO1VBQ0osTUFBTSxRQUFRLFVBQVUsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1VBQ25FLE1BQU0sY0FBYywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztVQUN4RCxNQUFNLE9BQU8sVUFBVSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztVQUN0RixNQUFNLFdBQVcsY0FBYyxDQUFDLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7VUFDckUsT0FBTyxDQUFDLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ2xFO09BQ0YsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLDRCQUE0Qix1QkFBdUIsd0JBQXdCLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2pJLE1BQU0scUJBQXFCLHVCQUF1QjtNQUNoRCxNQUFNLFlBQVksZUFBZSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7TUFDeEUsTUFBTSxHQUFHLFNBQVMsa0JBQWtCLENBQUMsVUFBVSxFQUFFO1FBQy9DLE1BQU0sWUFBWTtRQUNsQixTQUFTLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztRQUN0QyxpQkFBaUIsTUFBTSxTQUFTLE1BQU0sY0FBYyxDQUFDLFNBQVMsY0FBYyxFQUFFLENBQUM7T0FDaEYsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLFVBQVUscUJBQXFCO01BQ25DLE1BQU0saUJBQWlCLFdBQVcsQ0FBQztNQUNuQyxNQUFNLGdCQUFnQixVQUFVLE1BQU0sTUFBTSxVQUFVLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNyRSxNQUFNLGdCQUFnQixVQUFVLE1BQU07UUFDcEMsTUFBTSxNQUFNLE1BQU0sVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsT0FBTyxHQUFHLEtBQUssU0FBUyxHQUFHLFFBQVEsS0FBSyxDQUFDO1VBQ3ZDLEtBQUssR0FBRyxPQUFPLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssR0FBRyxLQUFLO1VBQ3BFLFFBQVEsTUFBTSxJQUFJLFdBQVcsQ0FBQyxNQUFNLFVBQVUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ25FLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3RCLENBQUM7TUFDRixNQUFNLHVCQUF1QixRQUFRO1FBQ25DLE1BQU0saUJBQWlCLE9BQU87VUFDNUIsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdkIsT0FBTyxNQUFNLENBQUMsR0FBRyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7V0FDMUMsTUFBTSxJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLE9BQU8sQ0FBQztnQkFDSixPQUFPLEdBQUcsTUFBTTtnQkFDaEIsUUFBUSxHQUFHLE9BQU87ZUFDbkIsQ0FBQyxDQUFDO1dBQ04sTUFBTTtZQUNMLE9BQU8sRUFBRSxDQUFDO1dBQ1g7U0FDRixDQUFDO1FBQ0YsTUFBTSxpQkFBaUIsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN2RSxNQUFNLGlCQUFpQixXQUFXLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sT0FBTyxjQUFjLEtBQUssQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEVBQUUsT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQy9FLFFBQVEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztPQUMxQyxDQUFDO01BQ0YsT0FBTztRQUNMLFNBQVMsU0FBUztRQUNsQixNQUFNLFFBQVEsS0FBSyxDQUFDLGNBQWMsQ0FBQztRQUNuQyxNQUFNLFFBQVEsS0FBSyxFQUFFO1FBQ3JCLGFBQWE7UUFDYixpQkFBaUIsUUFBUSxLQUFLO1FBQzlCLGFBQWE7UUFDYixVQUFVLHNCQUFzQixDQUFDLE1BQU0sQ0FBQztRQUN4QyxZQUFZLG9CQUFvQjtRQUNoQyxZQUFZLDBCQUEwQixDQUFDLE1BQU0sQ0FBQztRQUM5QyxXQUFXLFFBQVEsQ0FBQyxNQUFNLFVBQVUsU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDO1FBQzFELE9BQU87T0FDUixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0scUJBQXFCLHVCQUF1QjtNQUNoRCxNQUFNLFVBQVU7UUFDZCxNQUFNLFVBQVU7UUFDaEIsR0FBRyxTQUFTLE9BQU87T0FDcEIsQ0FBQztNQUNGLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7S0FDeEUsQ0FBQztJQUNGLE1BQU0sbUJBQW1CLHVCQUF1QjtNQUM5QyxNQUFNLFVBQVU7UUFDZCxNQUFNLFVBQVU7UUFDaEIsR0FBRyxTQUFTLE9BQU87T0FDcEIsQ0FBQztNQUNGLE1BQU0sWUFBWSxlQUFlLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7TUFDL0UsTUFBTSxHQUFHLFNBQVMsa0JBQWtCLENBQUMsUUFBUSxFQUFFO1FBQzdDLE1BQU0sU0FBUztRQUNmLFNBQVMscUJBQXFCLENBQUMsTUFBTSxDQUFDO1FBQ3RDLGlCQUFpQixNQUFNLFNBQVMsTUFBTSxjQUFjLENBQUMsU0FBUyxjQUFjLEVBQUUsQ0FBQztPQUNoRixDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sV0FBVyxVQUFVLENBQUM7TUFDMUIsVUFBVSxDQUFDLGFBQWEsQ0FBQztNQUN6QixVQUFVLENBQUMsT0FBTyxDQUFDO01BQ25CLGVBQWUsQ0FBQyxXQUFXLENBQUM7TUFDNUIsU0FBUyxDQUFDLFlBQVksRUFBRSxRQUFRLEtBQUssQ0FBQztNQUN0QyxTQUFTLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQy9DLFFBQVEsRUFBRTtNQUNWLGVBQWUsQ0FBQyxlQUFlLENBQUM7TUFDaEMsUUFBUSxDQUFDLFVBQVUsQ0FBQztNQUNwQixVQUFVLENBQUMsS0FBSyxDQUFDO01BQ2pCLFNBQVMsQ0FBQyxRQUFRLENBQUM7TUFDbkIsS0FBSyxDQUFDLHlCQUF5QixFQUFFO1FBQy9CLFFBQVE7UUFDUixNQUFNO1FBQ04sUUFBUTtPQUNULENBQUM7TUFDRixTQUFTLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQztNQUM5QixTQUFTLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQztNQUMvQixTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztNQUMzQixRQUFRLENBQUMsTUFBTSxDQUFDO0tBQ2pCLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0IsTUFBTSxZQUFZLFFBQVEsQ0FBQztNQUN6QixTQUFTLE1BQU07TUFDZixRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQzNCLE1BQU0sT0FBTztNQUNiLFVBQVUsTUFBTTtRQUNkLE9BQU8sRUFBRSxrQkFBa0IsUUFBUSxDQUFDLENBQUMsUUFBUSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztPQUM1RDtNQUNELFdBQVcsVUFBVTtRQUNuQixPQUFPO1VBQ0wsS0FBSztZQUNILEtBQUssTUFBTTtZQUNYLFlBQVksRUFBRSxNQUFNLGNBQWMsRUFBRTtXQUNyQztVQUNELFFBQVEsU0FBUztZQUNmLEtBQUssVUFBVSxFQUFFLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7V0FDMUQ7VUFDRCxrQkFBa0IsUUFBUSxDQUFDLENBQUMsUUFBUSxPQUFPLENBQUM7Y0FDeEMsaUJBQWlCLEtBQUs7Y0FDdEIsYUFBYSxNQUFNLFlBQVk7YUFDaEMsQ0FBQyxDQUFDLENBQUM7U0FDUCxDQUFDO09BQ0g7S0FDRixDQUFDLENBQUM7SUFDSCxNQUFNLGFBQWEsUUFBUSxDQUFDO01BQzFCLFNBQVMsTUFBTTtNQUNmLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDM0IsTUFBTSxRQUFRO01BQ2QsVUFBVSxNQUFNO1FBQ2QsT0FBTyxFQUFFLGtCQUFrQixRQUFRLENBQUMsQ0FBQyxRQUFRLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO09BQzVEO01BQ0QsV0FBVyxVQUFVO1FBQ25CLE9BQU87VUFDTCxLQUFLO1lBQ0gsS0FBSyxNQUFNO1lBQ1gsWUFBWSxFQUFFLE1BQU0sY0FBYyxFQUFFO1dBQ3JDO1VBQ0QsUUFBUSxPQUFPO1lBQ2IsR0FBRyxVQUFVLEVBQUUsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUI7Y0FDekQsTUFBTSxVQUFVLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQ3RDLENBQUMsQ0FBQztXQUNKO1NBQ0YsQ0FBQztPQUNIO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQztNQUN6QixTQUFTO01BQ1QsVUFBVTtNQUNWLFFBQVEsQ0FBQztRQUNQLFNBQVM7VUFDUCxRQUFRLFFBQVE7WUFDZCxPQUFPO2NBQ0wsS0FBSyxJQUFJLElBQUk7Y0FDYixLQUFLO2dCQUNILEtBQUssTUFBTTtnQkFDWCxRQUFRLEVBQUUsU0FBUyxNQUFNLEVBQUU7Z0JBQzNCLFlBQVksRUFBRSxlQUFlLE1BQU0sRUFBRTtnQkFDckMsV0FBVyxJQUFJLEtBQUs7ZUFDckI7YUFDRixDQUFDO1dBQ0g7U0FDRjtRQUNELFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsTUFBTSxpQkFBaUI7T0FDeEIsQ0FBQztNQUNGLFFBQVEsQ0FBQztRQUNQLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzdCLE1BQU0sTUFBTTtRQUNaLFVBQVUsVUFBVTtVQUNsQixPQUFPO1lBQ0wsV0FBVyxpQkFBaUI7Y0FDMUIsS0FBSyxVQUFVLEVBQUUsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUI7Z0JBQzNELE1BQU0sY0FBYyxDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7ZUFDbEQsQ0FBQyxDQUFDO2FBQ0o7V0FDRixDQUFDO1NBQ0g7T0FDRixDQUFDO01BQ0YsVUFBVSxFQUFFO0tBQ2IsQ0FBQyxDQUFDOztJQUVILE1BQU0sWUFBWSx5Q0FBeUM7TUFDekQsTUFBTSxlQUFlLFdBQVc7UUFDOUIsU0FBUyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXO1VBQzVDLFlBQVksZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1VBQ3JDLE1BQU0sUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3pCLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLFNBQVMsYUFBYTtRQUMxQixNQUFNLGFBQWEsWUFBWSxDQUFDO1FBQ2hDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGVBQWUscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ2pILENBQUM7TUFDRixNQUFNLFdBQVcsUUFBUTtRQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDYixPQUFPLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzVCLENBQUM7TUFDRixNQUFNLGtCQUFrQixRQUFRO1FBQzlCLE1BQU0sU0FBUyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNwRCxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEIsT0FBTyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUM1QixDQUFDO01BQ0YsTUFBTSxlQUFlO1FBQ25CLEdBQUcsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLGdDQUFnQztZQUN2RCxNQUFNLGlCQUFpQixPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3JFLGNBQWMsS0FBSyxDQUFDLGNBQWM7Y0FDaEMsTUFBTSxlQUFlLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztjQUN4QyxLQUFLLENBQUMsVUFBVSxRQUFRLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO2NBQzlDLEtBQUssQ0FBQyxTQUFTLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLENBQUMsQ0FBQzthQUM1RCxDQUFDLENBQUM7V0FDSixDQUFDLENBQUMsQ0FBQztRQUNOLEdBQUcsUUFBUSxDQUFDLFFBQVEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQ25DLENBQUM7TUFDRixNQUFNLE9BQU87UUFDWCxpQkFBaUIsUUFBUTtVQUN2QixJQUFJLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUN2QjtTQUNGO09BQ0YsQ0FBQztNQUNGLE9BQU87UUFDTCxLQUFLLE1BQU0sSUFBSTtRQUNmLEtBQUssTUFBTSxJQUFJO1FBQ2YsVUFBVTtRQUNWLElBQUk7UUFDSixZQUFZO1VBQ1YsR0FBRyxNQUFNLFdBQVc7VUFDcEIsQ0FBQyxTQUFTLEVBQUUsR0FBRztZQUNiLFdBQVc7WUFDWCxVQUFVO1lBQ1Ysc0JBQXNCO1dBQ3ZCO1NBQ0Y7UUFDRCxRQUFRLFlBQVk7UUFDcEIsWUFBWSxPQUFPLENBQUMsTUFBTSx3QkFBd0IsRUFBRTtVQUNsRCxRQUFRLE9BQU8sQ0FBQztZQUNkLFFBQVE7Y0FDTixTQUFTLFdBQVc7Z0JBQ2xCLE1BQU0sUUFBUSxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDckQsTUFBTSxTQUFTO2tCQUNiLFFBQVEsTUFBTTtvQkFDWixRQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDbkIsUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7bUJBQ3RCO2tCQUNELFNBQVMsTUFBTTtvQkFDYixRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDcEIsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7bUJBQ3ZCO2lCQUNGLENBQUM7Z0JBQ0YsT0FBTyxhQUFhLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztlQUMvQzthQUNGO1dBQ0YsQ0FBQztVQUNGLE1BQU0sT0FBTyxDQUFDO1lBQ1osTUFBTSxTQUFTO1lBQ2YsU0FBUyxlQUFlO1lBQ3hCLFNBQVMsZUFBZTtZQUN4QixRQUFRLFFBQVE7V0FDakIsQ0FBQztVQUNGLFFBQVEsT0FBTyxDQUFDLEVBQUUsQ0FBQztVQUNuQixRQUFRLE9BQU8sQ0FBQztZQUNkLGlCQUFpQixLQUFLO1lBQ3RCLE1BQU0sRUFBRSxNQUFNLFVBQVUsRUFBRTtXQUMzQixDQUFDO1NBQ0gsQ0FBQztRQUNGLGlCQUFpQjtVQUNmLFlBQVk7WUFDVixRQUFRLE1BQU0sS0FBSyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQ25DLGlCQUFpQixJQUFJO1dBQ3RCO1NBQ0Y7T0FDRixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLFNBQVMsQ0FBQztNQUM5QixNQUFNLGVBQWU7TUFDckIsY0FBYyxRQUFRLEVBQUU7TUFDeEIsWUFBWSxPQUFPLEVBQUU7TUFDckIsU0FBUyxTQUFTO01BQ2xCLE1BQU0sRUFBRSxpQkFBaUIsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUU7S0FDdEUsQ0FBQyxDQUFDOztJQUVILE1BQU0sZUFBZSxjQUFjO01BQ2pDLFdBQVcsTUFBTSxDQUFDLFNBQVMsV0FBVyxDQUFDLFNBQVMsQ0FBQztNQUNqRCxZQUFZLFNBQVMsU0FBUyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDO01BQ3JELFNBQVMsUUFBUSxRQUFRLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDO01BQzlELFNBQVMsUUFBUSxRQUFRLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDO0tBQy9ELENBQUMsQ0FBQztJQUNILE1BQU0sZUFBZSxjQUFjO01BQ2pDLFdBQVcsU0FBUztRQUNsQixRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDaEM7TUFDRCxVQUFVLE1BQU0sUUFBUSxLQUFLLENBQUMsU0FBUyxDQUFDO01BQ3hDLFdBQVcsTUFBTSxDQUFDLFNBQVMsV0FBVyxDQUFDLFNBQVMsQ0FBQztNQUNqRCxZQUFZLFNBQVMsU0FBUyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDO01BQ3JELFNBQVMsUUFBUSxRQUFRLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDO01BQzlELFNBQVMsUUFBUSxRQUFRLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDO0tBQy9ELENBQUMsQ0FBQztJQUNILE1BQU0sdUJBQXVCLGlDQUFpQyxPQUFPLElBQUksQ0FBQyxZQUFZO01BQ3BGLGNBQWMsa0JBQWtCLFVBQVUsQ0FBQyxPQUFPLENBQUM7TUFDbkQsU0FBUyxrQkFBa0IsVUFBVSxDQUFDLE9BQU8sQ0FBQztLQUMvQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2QsTUFBTSxtQkFBbUIsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sd0JBQXdCLCtEQUErRDtNQUMzRixNQUFNLG9CQUFvQixPQUFPLElBQUksQ0FBQyxRQUFRLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUMzRyxNQUFNLG9CQUFvQixPQUFPLElBQUksQ0FBQyxRQUFRLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNySCxPQUFPO1FBQ0wsS0FBSztVQUNILEtBQUssUUFBUTtVQUNiLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sT0FBTyxFQUFFLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztVQUMxRSxZQUFZLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQztTQUM5RDtRQUNELFlBQVksdUJBQXVCLENBQUM7VUFDbEMsaUJBQWlCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxFQUFFLENBQUM7VUFDMUMsaUJBQWlCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxFQUFFLENBQUM7U0FDM0MsQ0FBQztRQUNGLFlBQVk7VUFDVixDQUFDLFNBQVMsRUFBRSxHQUFHO1lBQ2IsVUFBVTtZQUNWLHNCQUFzQjtZQUN0Qix3QkFBd0I7V0FDekI7VUFDRCxDQUFDLGFBQWEsRUFBRSxHQUFHO1lBQ2pCLHdCQUF3QjtZQUN4Qiw2QkFBNkI7V0FDOUI7U0FDRjtRQUNELGtCQUFrQixRQUFRLENBQUM7VUFDekIsZ0JBQWdCLGNBQWMsQ0FBQyxrQkFBa0IsV0FBVyxDQUFDO1VBQzdELGVBQWUsRUFBRTtVQUNqQixNQUFNLENBQUMsd0JBQXdCLEVBQUU7WUFDL0IsYUFBYSxDQUFDLGVBQWUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEQsS0FBSyxDQUFDLGNBQWMsRUFBRSxjQUFjO2NBQ2xDLGlCQUFpQixLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZTtnQkFDbEUsU0FBUyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixVQUFVLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2VBQ25GLENBQUMsQ0FBQzthQUNKLENBQUM7WUFDRixLQUFLLENBQUMsY0FBYyxFQUFFLGNBQWM7Y0FDbEMsaUJBQWlCLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlO2dCQUNsRSxTQUFTLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFLE1BQU0sS0FBSyxFQUFFLGtCQUFrQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7ZUFDdEcsQ0FBQyxDQUFDO2FBQ0osQ0FBQztZQUNGLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxnQkFBZ0I7Y0FDakMsRUFBRSxNQUFNLFFBQVEsRUFBRSxDQUFDO2NBQ25CLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQzthQUNoQyxDQUFDO1dBQ0gsQ0FBQztTQUNILE9BQU8sQ0FBQyxVQUFVLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ2hDLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSw4QkFBOEIsa0RBQWtEO01BQ3BGLE1BQU0sa0JBQWtCLFNBQVMsT0FBTyxDQUFDO01BQ3pDLE1BQU0sZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNqQyxNQUFNLGlCQUFpQjtRQUNyQix5QkFBeUIsRUFBRTtRQUMzQixRQUFRLFlBQVk7UUFDcEIsU0FBUyxJQUFJLFFBQVE7T0FDdEIsQ0FBQztNQUNGLE1BQU0sYUFBYSxDQUFDLE1BQU0sQ0FBQyw2QkFBNkIsRUFBRTtVQUN0RCxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsYUFBYSxDQUFDO1VBQ2hELGlCQUFpQixDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUM7U0FDakQsQ0FBQyxDQUFDLENBQUM7TUFDTixPQUFPLHFCQUFxQixPQUFPLENBQUM7UUFDbEMsVUFBVSxlQUFlLFFBQVE7UUFDakMsT0FBTyxNQUFNLE1BQU0sR0FBRyxDQUFDLFdBQVc7VUFDaEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7U0FDakUsQ0FBQztRQUNGLFNBQVMsRUFBRSxjQUFjLG1CQUFtQixFQUFFO1FBQzlDLE9BQU87VUFDTCxRQUFRLHFCQUFxQixDQUFDLElBQUksS0FBSyxFQUFFLElBQUksS0FBSyxFQUFFLElBQUksUUFBUSxFQUFFLFFBQVEsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLGVBQWUsVUFBVSxDQUFDO1VBQ3ZILFNBQVM7WUFDUCxLQUFLO2NBQ0gsS0FBSyxLQUFLO2NBQ1YsU0FBUyxDQUFDLHVCQUF1QixDQUFDO2NBQ2xDLFVBQVU7YUFDWDtXQUNGO1NBQ0Y7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSw0QkFBNEIsOENBQThDO01BQzlFLElBQUksRUFBRSxDQUFDO01BQ1AsTUFBTSxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ2pDLE1BQU0sWUFBWSxxQkFBcUIsQ0FBQyxJQUFJLEtBQUssRUFBRSxJQUFJLEtBQUssRUFBRSxJQUFJLFFBQVEsRUFBRSxRQUFRLEtBQUssRUFBRSxFQUFFLGtCQUFrQixDQUFDLENBQUM7TUFDakgsT0FBTyxNQUFNLE9BQU8sQ0FBQztRQUNuQixLQUFLLFNBQVMsSUFBSTtRQUNsQixZQUFZLFNBQVMsV0FBVztRQUNoQyxZQUFZLHVCQUF1QjtRQUNuQyxrQkFBa0I7VUFDaEIsR0FBRyxRQUFRLENBQUM7WUFDVixNQUFNLENBQUMsdUJBQXVCLEVBQUU7Y0FDOUIsc0JBQXNCLENBQUM7Z0JBQ3JCLFVBQVUsSUFBSSxTQUFTO2dCQUN2QixRQUFRLGNBQWMsT0FBTztlQUM5QixDQUFDO2NBQ0YsaUJBQWlCLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQztjQUNoRCxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsYUFBYSxDQUFDO2FBQ2pELENBQUM7WUFDRixnQkFBZ0IsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFFBQVEsSUFBSSxrQkFBa0IsV0FBVyxFQUFFLENBQUM7WUFDdEYsZUFBZSxFQUFFO1dBQ2xCLE9BQU8sQ0FBQyxjQUFjLHdCQUF3QixDQUFDLENBQUM7VUFDakQsQ0FBQyx3QkFBd0IsR0FBRyxDQUFDLEtBQUssU0FBUyxpQkFBaUIsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztTQUNoSTtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLHNCQUFzQiw4QkFBOEIsdUJBQXVCLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hILE1BQU0sMEJBQTBCLDJDQUEyQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUU7TUFDekcseUJBQXlCLFdBQVcsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUU7TUFDakcsUUFBUSxZQUFZO01BQ3BCLFNBQVMsSUFBSSxRQUFRO0tBQ3RCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUN2QixNQUFNLDRCQUE0Qiw4QkFBOEIsNkJBQTZCLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzVILE1BQU0sZ0NBQWdDLDJDQUEyQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUU7TUFDL0cseUJBQXlCO1FBQ3ZCLFNBQVMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNwQixRQUFRLE9BQU8sQ0FBQztVQUNkLGFBQWEsbUJBQW1CO1VBQ2hDLE1BQU0sRUFBRSxNQUFNLFNBQVMsRUFBRTtVQUN6QixpQkFBaUIsS0FBSztTQUN2QixDQUFDO09BQ0gsT0FBTyxDQUFDLFdBQVcsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztNQUN4RixRQUFRLFlBQVk7TUFDcEIsU0FBUyxJQUFJLFFBQVE7S0FDdEIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3ZCLE1BQU0sZUFBZSxzQ0FBc0MsUUFBUSxNQUFNLEdBQUcsQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLFFBQVEsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVM7TUFDek8sSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ3hDLEVBQUUsSUFBSSxRQUFRLEVBQUUsSUFBSSxRQUFRLEVBQUUsY0FBYyxpQkFBaUIsRUFBRSxJQUFJLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLGtCQUFrQixDQUFDLEVBQUU7TUFDN0csVUFBVSxrQkFBa0IsQ0FBQyxJQUFJLFFBQVEsRUFBRSxJQUFJLFFBQVEsQ0FBQztNQUN4RCxnQkFBZ0IsZ0JBQWdCLGNBQWMsQ0FBQyxJQUFJLFFBQVEsS0FBSyxNQUFNLEdBQUcsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLGVBQWU7VUFDeEcsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsY0FBYyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMscUJBQXFCLEtBQUs7WUFDaEYsTUFBTSxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztXQUMvQyxDQUFDLENBQUM7U0FDSixDQUFDLENBQUMsQ0FBQztLQUNQLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLE1BQU0sb0JBQW9CLDJCQUEyQjtNQUNuRCxNQUFNLFNBQVMsU0FBUztRQUN0QixXQUFXLE1BQU0sQ0FBQyxTQUFTLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDNUMsWUFBWSxTQUFTLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQztRQUNoRCxhQUFhLGVBQWU7VUFDMUIsVUFBVSxDQUFDLElBQUksUUFBUSxFQUFFLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxFQUFFLGdCQUFnQixHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCO1lBQ2pHLEtBQUssQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1dBQ3JDLENBQUMsQ0FBQztTQUNKO1FBQ0QsV0FBVyxTQUFTO1VBQ2xCLEtBQUssQ0FBQyxJQUFJLFFBQVEsRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7VUFDM0MsVUFBVSxDQUFDLElBQUksUUFBUSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVTtZQUM5QyxJQUFJLFVBQVUsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLFFBQVEsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1dBQ3ZGLENBQUMsQ0FBQztTQUNKO1FBQ0QsVUFBVSxNQUFNLFVBQVUsQ0FBQyxJQUFJLFFBQVEsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxVQUFVLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQztRQUMxSCxTQUFTLFFBQVEsVUFBVSxDQUFDLElBQUksUUFBUSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLFVBQVUsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLFFBQVEsQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RLLFNBQVMsUUFBUSxVQUFVLENBQUMsSUFBSSxRQUFRLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksVUFBVSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsUUFBUSxDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDdkssQ0FBQyxDQUFDO01BQ0gsTUFBTSxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ2pDLE1BQU0saUJBQWlCO1FBQ3JCLE1BQU07UUFDTixTQUFTLElBQUksUUFBUTtPQUN0QixDQUFDO01BQ0YsT0FBTyxhQUFhLE9BQU8sQ0FBQztRQUMxQixLQUFLO1VBQ0gsS0FBSyxLQUFLO1VBQ1YsU0FBUyxDQUFDLGtCQUFrQixDQUFDO1VBQzdCLFlBQVk7WUFDVixnQkFBZ0IsS0FBSztZQUNyQixHQUFHLG9CQUFvQixDQUFDLElBQUksUUFBUSxFQUFFLGVBQWUsVUFBVSxDQUFDO1dBQ2pFO1NBQ0Y7UUFDRCxXQUFXLFVBQVU7VUFDbkIsTUFBTSxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztVQUMzQixJQUFJLEdBQUcsVUFBVSxFQUFFLEVBQUU7WUFDbkIsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7V0FDcEI7U0FDRjtRQUNELGVBQWUsZ0JBQWdCO1NBQzlCO1FBQ0QseUJBQXlCLFFBQVEsQ0FBQztVQUNoQyxnQkFBZ0IsWUFBWSxDQUFDLGVBQWUsVUFBVSxXQUFXLENBQUM7VUFDbEUsZUFBZSxFQUFFO1VBQ2pCLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRTtZQUM5QixhQUFhLENBQUMsZUFBZSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwRCxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxNQUFNLENBQUM7WUFDdkMsaUJBQWlCLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQztZQUNoRCxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsYUFBYSxDQUFDO1dBQ2pELENBQUM7VUFDRixXQUFXLE9BQU8sQ0FBQyxFQUFFLENBQUM7U0FDdkIsQ0FBQztRQUNGLFlBQVk7VUFDVixDQUFDLGFBQWEsRUFBRSxHQUFHO1lBQ2pCLHNCQUFzQjtZQUN0Qix1QkFBdUI7V0FDeEI7U0FDRjtRQUNELGFBQWEsbUJBQW1CO1FBQ2hDLFVBQVUsZUFBZSxRQUFRO1FBQ2pDLE9BQU8sWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsZUFBZSxVQUFVLENBQUM7UUFDNUQsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLFFBQVEsRUFBRSxJQUFJLFFBQVEsQ0FBQyxFQUFFO1FBQ3hELFlBQVk7VUFDVixhQUFhLE1BQU0sT0FBTyxDQUFDLHFCQUFxQixDQUFDLElBQUksS0FBSyxFQUFFLElBQUksS0FBSyxFQUFFLFFBQVEsS0FBSyxFQUFFLEVBQUUsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRLE9BQU8sQ0FBQztjQUNuSCxhQUFhLG1CQUFtQjtjQUNoQyxpQkFBaUIsS0FBSzthQUN2QixDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsVUFBVSxDQUFDLENBQUM7VUFDbkMsYUFBYSxNQUFNLE1BQU0sQ0FBQztZQUN4QixLQUFLO2NBQ0gsS0FBSyxRQUFRO2NBQ2IsU0FBUztnQkFDUCxVQUFVO2dCQUNWLDJCQUEyQjtlQUM1QjtjQUNELFdBQVcsS0FBSyxDQUFDLGNBQWMsRUFBRSxlQUFlLFVBQVUsTUFBTSxDQUFDO2FBQ2xFO1lBQ0Qsa0JBQWtCLFFBQVEsQ0FBQztjQUN6QixnQkFBZ0IsWUFBWSxDQUFDLGVBQWUsVUFBVSxXQUFXLENBQUM7Y0FDbEUsZUFBZSxFQUFFO2NBQ2pCLHFCQUFxQixFQUFFO2FBQ3hCLENBQUM7V0FDSCxDQUFDO1VBQ0YsYUFBYSxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLE1BQU0sZUFBZSxVQUFVLFVBQVUsQ0FBQyxzQ0FBc0MsQ0FBQyxFQUFFLENBQUM7U0FDOUg7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0saUJBQWlCO01BQ3JCO1FBQ0UsTUFBTSxTQUFTO1FBQ2YsT0FBTztVQUNMLE1BQU07VUFDTixNQUFNO1NBQ1A7T0FDRjtNQUNEO1FBQ0UsTUFBTSxJQUFJO1FBQ1YsT0FBTztVQUNMLFVBQVU7VUFDVixhQUFhO1NBQ2Q7T0FDRjtNQUNEO1FBQ0UsTUFBTSxRQUFRO1FBQ2QsT0FBTyxDQUFDLFFBQVEsQ0FBQztPQUNsQjtNQUNEO1FBQ0UsTUFBTSxZQUFZO1FBQ2xCLE9BQU87VUFDTCxNQUFNO1VBQ04sUUFBUTtTQUNUO09BQ0Y7TUFDRDtRQUNFLE1BQU0sV0FBVztRQUNqQixPQUFPO1VBQ0wsV0FBVztVQUNYLGFBQWE7VUFDYixZQUFZO1VBQ1osY0FBYztTQUNmO09BQ0Y7TUFDRDtRQUNFLE1BQU0sYUFBYTtRQUNuQixPQUFPO1VBQ0wsU0FBUztVQUNULFFBQVE7U0FDVDtPQUNGO01BQ0Q7UUFDRSxNQUFNLGVBQWU7UUFDckIsT0FBTyxDQUFDLGNBQWMsQ0FBQztPQUN4QjtNQUNEO1FBQ0UsTUFBTSxVQUFVO1FBQ2hCLE9BQU8sQ0FBQyxZQUFZLENBQUM7T0FDdEI7S0FDRixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsMkJBQTJCLDZCQUE2QjtNQUMvRSxNQUFNLFdBQVcsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7TUFDMUYsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUM1QyxDQUFDO0lBQ0YsTUFBTSxRQUFRO01BQ1osUUFBUSxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxrQkFBa0IsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLFNBQVMsT0FBTyxVQUFVLENBQUMsQ0FBQztNQUNuSCxjQUFjLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLGtCQUFrQix5QkFBeUIsQ0FBQyxDQUFDLEVBQUUsU0FBUyxPQUFPLFVBQVUsQ0FBQyxDQUFDO01BQzlILFlBQVksZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUUsa0JBQWtCLGdCQUFnQixDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsS0FBSyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDcEksYUFBYSxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLFNBQVMsT0FBTyxDQUFDLENBQUM7TUFDMUcsb0JBQW9CLGdCQUFnQixDQUFDLHdCQUF3QixFQUFFLDBCQUEwQjtRQUN2RixNQUFNLFVBQVUsTUFBTSxHQUFHLFNBQVMsT0FBTyxFQUFFLFFBQVEsQ0FBQztRQUNwRCxNQUFNLFdBQVcsV0FBVyxlQUFlLENBQUMsTUFBTSxFQUFFO1VBQ2xELE9BQU87VUFDUCxPQUFPO1VBQ1Asb0JBQW9CLEtBQUs7U0FDMUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sYUFBYSxFQUFFLENBQUMsU0FBUyxHQUFHLFNBQVMsT0FBTyxPQUFPLGtCQUFrQixFQUFFLEdBQUcsY0FBYyxZQUFZLEdBQUcsY0FBYyxZQUFZLEVBQUUsQ0FBQztRQUMxSSxRQUFRLGNBQWMsQ0FBQyxNQUFNLENBQUM7YUFDekIsYUFBYSxTQUFTO1VBQ3pCLE9BQU8sMkJBQTJCLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7O1VBRXZFLE1BQU0sSUFBSSxLQUFLLENBQUMsb0VBQW9FLENBQUMsQ0FBQztTQUN2RjtPQUNGLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxjQUFjLDZCQUE2QixLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO01BQ2xGLE9BQU8sTUFBTSxDQUFDLDRCQUE0QixFQUFFLElBQUksQ0FBQyxDQUFDO01BQ2xELE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztLQUN4QixFQUFFLFVBQVUsUUFBUSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdELE1BQU0saUJBQWlCO01BQ3JCLFFBQVEsa0JBQWtCO01BQzFCLFVBQVUsb0JBQW9CO01BQzlCLGVBQWUseUJBQXlCO01BQ3hDLFlBQVksc0JBQXNCO01BQ2xDLFFBQVEsa0JBQWtCO01BQzFCLE9BQU8saUJBQWlCO0tBQ3pCLENBQUM7SUFDRixNQUFNLHVCQUF1QixXQUFXO01BQ3RDLE1BQU0scUJBQXFCLEtBQUssQ0FBQyxjQUFjLEVBQUUsU0FBUztRQUN4RCxNQUFNLFFBQVEsUUFBUSxDQUFDLEtBQUssTUFBTSxFQUFFLFdBQVcsS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDMUcsT0FBTztVQUNMLE1BQU0sS0FBSyxLQUFLO1VBQ2hCLEtBQUs7U0FDTixDQUFDO09BQ0gsQ0FBQyxDQUFDO01BQ0gsT0FBTyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxLQUFLLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3RFLENBQUM7SUFDRixNQUFNLHVCQUF1QixjQUFjO01BQ3pDLE1BQU0sZ0JBQWdCLFVBQVUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQzVDLE9BQU8sS0FBSyxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDcEUsQ0FBQztJQUNGLE1BQU0sNkJBQTZCLFdBQVcsU0FBUyxDQUFDLE9BQU8sRUFBRSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzdHLE1BQU0sZ0JBQWdCLGlCQUFpQjtNQUNyQyxNQUFNLFVBQVUsYUFBYSxRQUFRLENBQUM7TUFDdEMsTUFBTSxVQUFVLGFBQWEsUUFBUSxDQUFDO01BQ3RDLElBQUksT0FBTyxLQUFLLEtBQUssRUFBRTtRQUNyQixPQUFPLEVBQUUsQ0FBQztPQUNYLE1BQU0sSUFBSSxPQUFPLEtBQUssU0FBUyxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7UUFDcEQsT0FBTyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztPQUN0QyxNQUFNLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQzVCLE9BQU8sb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7T0FDdEMsTUFBTSxJQUFJLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQzlDLE9BQU8sT0FBTyxDQUFDO09BQ2hCLE1BQU07UUFDTCxPQUFPLE1BQU0sQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDO1FBQ3BGLE9BQU8sRUFBRSxDQUFDO09BQ1g7S0FDRixDQUFDO0lBQ0YsTUFBTSxlQUFlLDJFQUEyRSxLQUFLLENBQUMsT0FBTyxFQUFFLFdBQVcsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sUUFBUSxLQUFLLENBQUMsTUFBTSxPQUFPLENBQUMsRUFBRSxFQUFFLFVBQVUsS0FBSyxDQUFDLE9BQU8sRUFBRSxNQUFNLEdBQUcsV0FBVyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsY0FBYyxFQUFFLFdBQVcsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLFFBQVE7TUFDMVYsSUFBSSxJQUFJLEtBQUssS0FBSyxvQkFBb0IsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1FBQzdELE9BQU8sS0FBSyxDQUFDLENBQUMsY0FBYyxHQUFHLFdBQVcsRUFBRSxpSEFBaUgsQ0FBQyxDQUFDLENBQUM7UUFDaEssT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCLE1BQU07UUFDTCxPQUFPLFdBQVcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQzdDO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxrQkFBa0IsZ0RBQWdEO01BQ3RFLE1BQU0sZ0JBQWdCLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztNQUNuRCxNQUFNLFNBQVMsS0FBSyxDQUFDLGFBQWEsRUFBRSxTQUFTO1FBQzNDLE1BQU0sUUFBUSxNQUFNLENBQUMsS0FBSyxNQUFNLEVBQUUsZUFBZTtVQUMvQyxPQUFPLFdBQVcsS0FBSyxFQUFFLE9BQU8sS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsYUFBYSxRQUFRLEVBQUUsV0FBVyxFQUFFLGFBQWEsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUN6SyxDQUFDLENBQUM7UUFDSCxPQUFPO1VBQ0wsT0FBTyxRQUFRLEtBQUssQ0FBQyxNQUFNLFVBQVUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO1VBQ2xELEtBQUs7U0FDTixDQUFDO09BQ0gsQ0FBQyxDQUFDO01BQ0gsT0FBTyxRQUFRLENBQUMsTUFBTSxFQUFFLFNBQVMsS0FBSyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztLQUMxRCxDQUFDOztJQUVGLE1BQU0sYUFBYSw0Q0FBNEM7TUFDN0QsTUFBTSxpQkFBaUIsTUFBTSxPQUFPLGVBQWUsQ0FBQztNQUNwRCxNQUFNLGdCQUFnQixXQUFXLFFBQVEsQ0FBQztNQUMxQyxNQUFNLHVCQUF1QixXQUFXLFFBQVEsQ0FBQztNQUNqRCxJQUFJLFNBQVMsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLEVBQUU7UUFDdEMsTUFBTSxXQUFXLGFBQWEsSUFBSSxDQUFDLEtBQUs7VUFDdEMsTUFBTSxTQUFTO1lBQ2IsU0FBUyxDQUFDO1lBQ1YsU0FBUyxvQkFBb0I7WUFDN0Isb0JBQW9CLFdBQVcsbUJBQW1CO1dBQ25ELENBQUM7VUFDRixPQUFPLGVBQWUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDcEUsQ0FBQyxDQUFDO1FBQ0gsY0FBYyxZQUFZLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDO09BQ3RELE1BQU07UUFDTCxjQUFjLFdBQVcsQ0FBQyxjQUFjLEVBQUUsZUFBZSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQzdHO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLFlBQVksUUFBUSxFQUFFLENBQUM7SUFDN0IsTUFBTSxVQUFVLFNBQVMsR0FBRyxNQUFNLEVBQUUsSUFBSSxTQUFTLEdBQUcsUUFBUSxNQUFNLElBQUksRUFBRSxDQUFDO0lBQ3pFLE1BQU0sZ0JBQWdCLG9CQUFvQjtNQUN4QyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUM7TUFDL0IsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLElBQUksZ0JBQWdCLE1BQU0sT0FBTyxFQUFFLENBQUM7TUFDcEMsTUFBTSxnQkFBZ0IsTUFBTSxPQUFPLEVBQUUsZ0JBQWdCLENBQUM7TUFDdEQsTUFBTSx1QkFBdUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLFdBQVcsRUFBRSxhQUFhLFlBQVksQ0FBQyxDQUFDLENBQUM7TUFDdEcsTUFBTSx5QkFBeUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLFlBQVksRUFBRSxhQUFhLGFBQWEsQ0FBQyxDQUFDLENBQUM7TUFDMUcsTUFBTSxlQUFlLE1BQU07UUFDekIsTUFBTSxRQUFRLG9CQUFvQixJQUFJLEVBQUUsQ0FBQztRQUN6QyxJQUFJLEtBQUssS0FBSyxLQUFLLGFBQWEsV0FBVyxJQUFJLEtBQUssSUFBSSxLQUFLLGFBQWEsWUFBWSxFQUFFO1VBQ3RGLG9CQUFvQixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsV0FBVyxFQUFFLGFBQWEsWUFBWSxDQUFDLENBQUMsQ0FBQztVQUM3RixpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMzQjtPQUNGLENBQUM7TUFDRixNQUFNLGlCQUFpQixNQUFNO1FBQzNCLE1BQU0sU0FBUyxNQUFNLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQztRQUMvQyxNQUFNLFFBQVEsc0JBQXNCLElBQUksRUFBRSxDQUFDO1FBQzNDLElBQUksS0FBSyxLQUFLLEtBQUssTUFBTSxZQUFZLElBQUksS0FBSyxJQUFJLEtBQUssTUFBTSxhQUFhLEVBQUU7VUFDMUUsc0JBQXNCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUMsQ0FBQyxDQUFDO1VBQ25GLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzNCO09BQ0YsQ0FBQztNQUNGLE1BQU0sU0FBUyxLQUFLO1FBQ2xCLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztPQUM5QixDQUFDO01BQ0YsR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztNQUNoRCxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQzFDLE1BQU0sY0FBYyxPQUFPLENBQUMsWUFBWSxRQUFRLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztNQUM1RixNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTTtRQUN0QixNQUFNLENBQUMsYUFBYSxFQUFFLEtBQUs7VUFDekIsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNyQyxDQUFDLENBQUM7T0FDSixDQUFDLENBQUM7TUFDSCxNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTTtRQUN0QixNQUFNLENBQUMsYUFBYSxFQUFFLEtBQUs7VUFDekIsUUFBUSxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ2hDLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztNQUNILE1BQU0sR0FBRyxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztNQUN4QyxNQUFNLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTTtRQUN4QixXQUFXLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLEdBQUcsT0FBTyxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDbEQsR0FBRyxPQUFPLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM1QyxnQkFBZ0IsSUFBSSxDQUFDO09BQ3RCLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLHNCQUFzQiw0QkFBNEI7TUFDdEQsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDekIsaUJBQWlCLENBQUMsTUFBTSxPQUFPLFdBQVcsUUFBUSxFQUFFLE1BQU0sUUFBUSxXQUFXLENBQUMsQ0FBQztPQUNoRjtNQUNELFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxTQUFTLFdBQVcsQ0FBQyxDQUFDO0tBQ2xELENBQUM7SUFDRixNQUFNLFdBQVcsd0RBQXdEO01BQ3ZFLE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxDQUFDO01BQ3ZDLE1BQU0sbUJBQW1CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNqQyxNQUFNLGlCQUFpQixNQUFNLGVBQWUsQ0FBQztNQUM3QyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNyQixNQUFNLGNBQWMsWUFBWSxRQUFRLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQztNQUMxRCxNQUFNLFNBQVMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7TUFDN0QsaUJBQWlCLENBQUMsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDLENBQUM7TUFDbEQsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztNQUM1QyxNQUFNLEdBQUcsQ0FBQyxZQUFZLEVBQUUsTUFBTTtRQUM1QixjQUFjLFdBQVcsQ0FBQyxjQUFjLEVBQUUsV0FBVyxRQUFRLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdkYsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ25ELGdCQUFnQixJQUFJLENBQUMsTUFBTSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDakQsY0FBYyxXQUFXLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUM5RSxjQUFjLFNBQVMsQ0FBQyxjQUFjLEVBQUUsV0FBVyxNQUFNLENBQUMsQ0FBQztRQUMzRCxhQUFhLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQy9CLENBQUMsQ0FBQztNQUNILE1BQU0sU0FBUyxjQUFjLFVBQVUsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7TUFDM0csSUFBSSxPQUFPLEVBQUU7UUFDWCxNQUFNLENBQUMsTUFBTSxRQUFRLEVBQUU7VUFDckIsWUFBWSxRQUFRO1VBQ3BCLDhCQUE4QixPQUFPO1NBQ3RDLENBQUMsQ0FBQztRQUNILE1BQU0sUUFBUSxLQUFLLENBQUMsTUFBTTtVQUN4QixNQUFNLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNsQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ1AsTUFBTSxXQUFXLElBQUksQ0FBQyxNQUFNLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQztRQUNoRSxNQUFNLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxPQUFPLENBQUMsQ0FBQztPQUN0QztNQUNELHVCQUF1QixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztNQUN4QyxNQUFNLFdBQVcsQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCO1FBQ2pELGNBQWMsY0FBYyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwRCxNQUFNLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztPQUNsQyxDQUFDLENBQUM7TUFDSCxNQUFNLHFCQUFxQixDQUFDLGVBQWUsRUFBRSxNQUFNO1FBQ2pELElBQUksRUFBRSxDQUFDO1FBQ1AsT0FBTyxDQUFDLEtBQUssY0FBYyxhQUFhLENBQUMsY0FBYyxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO09BQy9GLENBQUMsQ0FBQztNQUNILE1BQU0sV0FBVyxDQUFDLFlBQVksRUFBRSxnQkFBZ0I7UUFDOUMsSUFBSSxjQUFjLFdBQVcsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLEVBQUU7VUFDcEQsTUFBTSxTQUFTLGNBQWMsUUFBUSxDQUFDO1VBQ3RDLE1BQU0sV0FBVyxZQUFZLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztVQUM3RCxNQUFNLENBQUMsYUFBYSxFQUFFLEtBQUs7WUFDekIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztXQUM5QyxDQUFDLENBQUM7VUFDSCxJQUFJLE1BQU0sQ0FBQyxjQUFjLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFO1lBQ3BELE1BQU0sTUFBTSxFQUFFLENBQUM7WUFDZixNQUFNLFlBQVksRUFBRSxDQUFDO1lBQ3JCLGNBQWMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1dBQy9DO1NBQ0Y7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLHFCQUFxQixDQUFDLFlBQVksRUFBRSxNQUFNO1FBQzlDLElBQUksRUFBRSxDQUFDO1FBQ1AsT0FBTyxDQUFDLEtBQUssY0FBYyxVQUFVLENBQUMsY0FBYyxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO09BQzVGLENBQUMsQ0FBQztNQUNILE1BQU0sY0FBYyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDM0MsTUFBTSxnQkFBZ0IsTUFBTTtRQUMxQixjQUFjLGVBQWUsQ0FBQyxNQUFNLE9BQU8sZUFBZSxDQUFDLENBQUM7T0FDN0QsQ0FBQztNQUNGLElBQUksV0FBVyxLQUFLLGFBQWEsUUFBUSxJQUFJLFdBQVcsS0FBSyxhQUFhLFNBQVMsRUFBRTtRQUNuRixNQUFNLEdBQUcsQ0FBQyx5Q0FBeUMsRUFBRSxNQUFNO1VBQ3pELE1BQU0sUUFBUSxNQUFNLE9BQU8sRUFBRSxXQUFXLENBQUM7VUFDekMsSUFBSSxLQUFLLEtBQUssZ0JBQWdCLElBQUksRUFBRSxFQUFFO1lBQ3BDLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7V0FDN0I7U0FDRixDQUFDLENBQUM7T0FDSjtNQUNELE1BQU0sTUFBTTtRQUNWLFlBQVksU0FBUztVQUNuQixpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNuQztRQUNELFdBQVcsTUFBTSxDQUFDLFNBQVMsV0FBVyxDQUFDLGNBQWMsQ0FBQztPQUN2RCxDQUFDO01BQ0YsT0FBTztRQUNMLGlCQUFpQixNQUFNLFFBQVEsSUFBSTtRQUNuQyxpQkFBaUIsY0FBYyxRQUFRLElBQUk7UUFDM0MsR0FBRztPQUNKLENBQUM7S0FDSCxDQUFDOztJQUVGLElBQUksc0JBQXNCLE1BQU0sT0FBTyxDQUFDO1FBQ3BDLFdBQVcsSUFBSTtRQUNmLFFBQVEsUUFBUTtLQUNuQixDQUFDLENBQUM7O0lBRUgsTUFBTSxhQUFhLE9BQU87TUFDeEIsTUFBTSxLQUFLLGtCQUFrQixDQUFDO01BQzlCLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFO1FBQ3JCLE9BQU8sUUFBUSxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUM5QztNQUNELE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztLQUN4QixDQUFDO0lBQ0YsTUFBTSxVQUFVLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ3hELE1BQU0saUJBQWlCLDRCQUE0QjtNQUNqRCxNQUFNLGNBQWMsT0FBTyxPQUFPLENBQUMsT0FBTyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7TUFDdEQsTUFBTSxjQUFjLE9BQU8sT0FBTyxDQUFDLE9BQU8sSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO01BQ3RELE9BQU8sV0FBVyxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNoRCxDQUFDOztJQUVGLE1BQU0sWUFBWSxVQUFVO01BQzFCLE1BQU0sYUFBYSxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDM0MsTUFBTSxZQUFZLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQzdDLE1BQU0sWUFBWSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUM3QyxPQUFPLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsY0FBYyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztLQUMzRixDQUFDO0lBQ0YsTUFBTSx3QkFBd0IsVUFBVTtNQUN0QyxNQUFNLFNBQVMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ2pDLE9BQU8sTUFBTSxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDOUMsQ0FBQztJQUNGLE1BQU0sV0FBVyxVQUFVO01BQ3pCLE1BQU0sWUFBWSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDekMsTUFBTSxXQUFXLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQzNDLE1BQU0sV0FBVyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUMzQyxPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsY0FBYyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztLQUN0RixDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsVUFBVTtNQUNyQyxNQUFNLFFBQVEsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQy9CLE9BQU8sS0FBSyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDNUMsQ0FBQzs7SUFFRixNQUFNLDhCQUE4QixHQUFHLE9BQU8sQ0FBQztJQUMvQyxNQUFNLHdCQUF3QixFQUFFLENBQUM7SUFDakMsTUFBTSxlQUFlLDBEQUEwRDtNQUM3RSxNQUFNLHVCQUF1QixHQUFHLE1BQU0sQ0FBQztNQUN2QyxNQUFNLE1BQU0sUUFBUSxJQUFJLENBQUM7TUFDekIsTUFBTSwyQkFBMkIsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDM0QsTUFBTSxXQUFXLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUN6QyxNQUFNLG9CQUFvQixpQkFBaUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO01BQ3pFLE1BQU0sa0JBQWtCLFNBQVMsT0FBTyxPQUFPLENBQUM7TUFDaEQsTUFBTSxvQkFBb0IsZUFBZSxrQkFBa0IsQ0FBQztNQUM1RCxNQUFNLGNBQWMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQzNDLE1BQU0saUJBQWlCLFdBQVcsS0FBSyxXQUFXLFFBQVEsSUFBSSxXQUFXLEtBQUssV0FBVyxTQUFTLENBQUM7TUFDbkcsTUFBTSxVQUFVLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUM1QixNQUFNLFlBQVksTUFBTSxPQUFPLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxRQUFRLENBQUM7TUFDekQsTUFBTSxvQkFBb0IsV0FBVyxjQUFjLEdBQUcsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsSUFBSSxXQUFXLEVBQUUsT0FBTyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ3RLLE1BQU0sV0FBVyxhQUFhO1FBQzVCLFFBQVEsa0JBQWtCLENBQUMsTUFBTSxDQUFDO2FBQzdCLGVBQWUsS0FBSztVQUN2QixNQUFNLFVBQVUsY0FBYyxXQUFXLENBQUMsTUFBTSxlQUFlLENBQUMsQ0FBQztVQUNqRSxNQUFNLFNBQVMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7VUFDMUMsTUFBTSxnQkFBZ0IsS0FBSyxDQUFDLFNBQVMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO1VBQ3hELE1BQU0sZUFBZSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7VUFDdEMsTUFBTSxZQUFZLFlBQVksRUFBRSxHQUFHLGFBQWEsQ0FBQztVQUNqRCxJQUFJLFNBQVMsRUFBRTtZQUNiLE9BQU8sS0FBSyxDQUFDO1dBQ2QsTUFBTTtZQUNMLE1BQU0sTUFBTSxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkMsTUFBTSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxhQUFhLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDN0QsTUFBTSxlQUFlLFlBQVksT0FBTyxHQUFHLFNBQVMsR0FBRyxhQUFhLENBQUM7WUFDckUsSUFBSSxZQUFZLEVBQUU7Y0FDaEIsT0FBTyxRQUFRLENBQUM7YUFDakIsTUFBTTtjQUNMLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztjQUN4QixNQUFNLHlCQUF5QixTQUFTLE9BQU8sR0FBRyxZQUFZLE9BQU8sR0FBRyxhQUFhLENBQUM7Y0FDdEYsT0FBTyxzQkFBc0IsR0FBRyxRQUFRLEdBQUcsS0FBSyxDQUFDO2FBQ2xEO1dBQ0Y7YUFDRSxlQUFlLE9BQU87VUFDekIsT0FBTyxRQUFRLENBQUM7YUFDYixlQUFlLElBQUk7O1VBRXRCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7T0FDRixDQUFDO01BQ0YsTUFBTSxZQUFZLFFBQVE7UUFDeEIsY0FBYyxHQUFHLENBQUMsYUFBYTtVQUM3QixPQUFPLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1VBQ3BDLGVBQWUsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQ3JDLE1BQU0sY0FBYyxpQkFBaUIsRUFBRSxHQUFHLGNBQWMsWUFBWSxHQUFHLGNBQWMsWUFBWSxDQUFDO1VBQ2xHLEtBQUssQ0FBQyxTQUFTLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDbEQsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sb0JBQW9CLE1BQU07UUFDOUIsY0FBYyxHQUFHLENBQUMsYUFBYTtVQUM3QixNQUFNLFdBQVcsaUJBQWlCLFdBQVcsQ0FBQyxNQUFNO1lBQ2xELE1BQU0sYUFBYSxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRSxPQUFPLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQztXQUNoRSxDQUFDLENBQUM7VUFDSCxLQUFLLENBQUMsU0FBUyxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQztTQUN4RCxDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSx1QkFBdUIsbUJBQW1CO1FBQzlDLGNBQWMsR0FBRyxDQUFDLGFBQWE7VUFDN0IsTUFBTSxVQUFVLGNBQWMsV0FBVyxDQUFDLE1BQU0sZUFBZSxDQUFDLENBQUM7VUFDakUsTUFBTSxTQUFTLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1VBQzFDLE1BQU0sZUFBZSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7VUFDdEMsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sZUFBZSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDdEYsT0FBTztjQUNMLEtBQUssaUJBQWlCLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxRQUFRLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsWUFBWSxPQUFPO2NBQ2hILE1BQU0sWUFBWSxFQUFFO2FBQ3JCLENBQUM7V0FDSCxFQUFFLGdCQUFnQjtZQUNqQixJQUFJLEVBQUUsQ0FBQztZQUNQLE1BQU0sWUFBWSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdEMsTUFBTSxjQUFjLENBQUMsS0FBSyxZQUFZLElBQUksVUFBVSxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN6RixNQUFNLHFCQUFxQixFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEQsTUFBTSxXQUFXLGtCQUFrQixHQUFHLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHLEtBQUssQ0FBQyxTQUFTLFFBQVEsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxZQUFZLEVBQUUsR0FBRyxTQUFTLEVBQUUsR0FBRyxXQUFXLEdBQUcsS0FBSyxDQUFDLFNBQVMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO1lBQ3ZMLE9BQU87Y0FDTCxLQUFLLGlCQUFpQixFQUFFLEdBQUcsUUFBUSxHQUFHLFlBQVksT0FBTztjQUN6RCxNQUFNLGtCQUFrQixHQUFHLFlBQVksRUFBRSxHQUFHLFlBQVksRUFBRSxHQUFHLFNBQVMsRUFBRTthQUN6RSxDQUFDO1dBQ0gsQ0FBQyxDQUFDO1VBQ0gsTUFBTSxpQkFBaUI7WUFDckIsVUFBVSxVQUFVO1lBQ3BCLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSTtZQUM3QixLQUFLLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUk7V0FDNUIsQ0FBQztVQUNGLE1BQU0sa0JBQWtCLGVBQWUsSUFBSSxDQUFDLGdCQUFnQjtZQUMxRCxNQUFNLFNBQVMsS0FBSyxFQUFFLENBQUM7WUFDdkIsTUFBTSxzQkFBc0IsR0FBRyxDQUFDO1lBQ2hDLE1BQU0saUJBQWlCLE1BQU0sV0FBVyxJQUFJLElBQUksR0FBRyxNQUFNLEtBQUssQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUNwRixPQUFPLEVBQUUsT0FBTyxLQUFLLEdBQUcsSUFBSSxFQUFFLENBQUM7V0FDaEMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7VUFDYixNQUFNLENBQUMsTUFBTSxlQUFlLFFBQVEsRUFBRTtZQUNwQyxHQUFHLGNBQWM7WUFDakIsR0FBRyxlQUFlO1dBQ25CLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLG9CQUFvQixxQkFBcUIsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO01BQ2xILE1BQU0scUJBQXFCLE1BQU07UUFDL0IsTUFBTSxDQUFDLGFBQWEsRUFBRSxLQUFLO1VBQ3pCLENBQUMsWUFBWSxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3pDLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLDJDQUEyQyxNQUFNO1FBQ3JELElBQUksQ0FBQyx3QkFBd0IsRUFBRTtVQUM3QixNQUFNLGtDQUFrQyxVQUFVLENBQUMsTUFBTSxlQUFlLFFBQVEsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLE1BQU0sZUFBZSxRQUFRLENBQUMsQ0FBQztVQUNuSSxJQUFJLCtCQUErQixJQUFJLE1BQU0sV0FBVyxHQUFHLHFCQUFxQixJQUFJLE1BQU0sQ0FBQyxNQUFNLGVBQWUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMzSSxLQUFLLENBQUMsTUFBTSxlQUFlLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDN0QsS0FBSyxDQUFDLE1BQU0sZUFBZSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BELFFBQVEsQ0FBQyxNQUFNLGVBQWUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELE1BQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxlQUFlLFFBQVEsQ0FBQyxDQUFDO1lBQ3BELE9BQU8sUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDekIsTUFBTTtZQUNMLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztXQUN4QjtTQUNGLE1BQU07VUFDTCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7U0FDeEI7T0FDRixDQUFDO01BQ0YsTUFBTSxTQUFTLGdCQUFnQjtRQUM3QixJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUU7VUFDaEIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLHdCQUF3QixFQUFFO1VBQzdCLGlCQUFpQixFQUFFLENBQUM7U0FDckI7UUFDRCxNQUFNLGtCQUFrQix3QkFBd0IsR0FBRyxRQUFRLEtBQUssRUFBRSxHQUFHLHdDQUF3QyxFQUFFLENBQUM7UUFDaEgsSUFBSSxjQUFjLEVBQUU7VUFDbEIsY0FBYyxlQUFlLENBQUMsTUFBTSxlQUFlLENBQUMsQ0FBQztTQUN0RDtRQUNELElBQUksQ0FBQyx3QkFBd0IsRUFBRTtVQUM3QixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUN2QztRQUNELElBQUksUUFBUSxFQUFFO1VBQ1osY0FBYyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDakM7UUFDRCxrQkFBa0IsRUFBRSxDQUFDO09BQ3RCLENBQUM7TUFDRixNQUFNLGVBQWUsTUFBTTtRQUN6QixJQUFJLHdCQUF3QixJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUU7VUFDekQsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE9BQU8sY0FBYyxJQUFJLEVBQUUsT0FBTyxDQUFDLE1BQU07VUFDdkMsTUFBTSxjQUFjLGVBQWUsZUFBZSxFQUFFLENBQUM7VUFDckQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztVQUM3QixJQUFJLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFDM0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDO1dBQ2IsTUFBTTtZQUNMLE9BQU8sS0FBSyxDQUFDO1dBQ2Q7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxPQUFPLE1BQU07UUFDakIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsS0FBSyxDQUFDLE1BQU0sZUFBZSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELEdBQUcsU0FBUyxDQUFDLE1BQU0sUUFBUSxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNqRCxNQUFNLENBQUMsYUFBYSxFQUFFLEtBQUs7VUFDekIsUUFBUSxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ2hDLENBQUMsQ0FBQztRQUNILFlBQVksRUFBRSxDQUFDO1FBQ2YsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUU7VUFDekIsTUFBTSxDQUFDLFFBQVEsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN0RixNQUFNO1VBQ0wsTUFBTSxDQUFDLE9BQU8sUUFBUSxDQUFDLENBQUM7U0FDekI7T0FDRixDQUFDO01BQ0YsTUFBTSxPQUFPLE1BQU07UUFDakIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsS0FBSyxDQUFDLE1BQU0sZUFBZSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELEdBQUcsWUFBWSxDQUFDLE1BQU0sUUFBUSxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNwRCxNQUFNLENBQUMsYUFBYSxFQUFFLEtBQUs7VUFDekIsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNyQyxDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxhQUFhLE1BQU07UUFDdkIsTUFBTSxjQUFjLFlBQVksRUFBRSxDQUFDO1FBQ25DLElBQUksV0FBVyxFQUFFO1VBQ2YsTUFBTSxDQUFDLE9BQU8sTUFBTSxDQUFDLENBQUM7U0FDdkI7T0FDRixDQUFDO01BQ0YsT0FBTztRQUNMLFNBQVM7UUFDVCxpQkFBaUI7UUFDakIsSUFBSTtRQUNKLElBQUk7UUFDSixNQUFNO1FBQ04sVUFBVTtRQUNWLGtCQUFrQixrQkFBa0I7T0FDckMsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSx3QkFBd0IsNkJBQTZCO01BQ3pELE1BQU0sU0FBUyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7TUFDaEMsT0FBTztRQUNMLEtBQUssWUFBWSxHQUFHLE1BQU0sRUFBRSxHQUFHLE1BQU0sT0FBTztRQUM1QyxNQUFNO09BQ1AsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLGNBQWMsMkNBQTJDO01BQzdELE1BQU0sbUJBQW1CLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUN4RixNQUFNLGdCQUFnQixLQUFLO1FBQ3pCLE1BQU0sYUFBYSxHQUFHLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUMvRSxNQUFNOzs7U0FHTCxHQUFHLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztRQUMzQixNQUFNLGFBQWEsTUFBTSxPQUFPLEtBQUssVUFBVSxPQUFPLElBQUksTUFBTSxNQUFNLEtBQUssVUFBVSxNQUFNLENBQUM7UUFDNUYsZ0JBQWdCLElBQUksQ0FBQztVQUNuQixHQUFHO1VBQ0gsTUFBTTtTQUNQLENBQUMsQ0FBQztRQUNILElBQUksVUFBVSxFQUFFO1VBQ2QsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzlCO1FBQ0QsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFO1VBQ2xCLElBQUksT0FBTyxLQUFLLEdBQUcsRUFBRTtZQUNuQixFQUFFLE9BQU8sQ0FBQyxPQUFPLE1BQU0sQ0FBQyxDQUFDO1dBQzFCLE1BQU0sSUFBSSxVQUFVLEVBQUU7WUFDckIsRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUNoQixFQUFFLGlCQUFpQixFQUFFLENBQUM7V0FDdkI7U0FDRjtPQUNGLENBQUM7TUFDRixJQUFJLENBQUMsY0FBYyxFQUFFO1FBQ25CLE1BQU0sR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9CLE1BQU0sR0FBRyxDQUFDLFlBQVksRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ2xDO01BQ0QsTUFBTSxHQUFHLENBQUMseUJBQXlCLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUM7TUFDckUsTUFBTSxHQUFHLENBQUMsb0JBQW9CLEVBQUUsS0FBSztRQUNuQyxxQkFBcUIsQ0FBQyxNQUFNLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQy9DLENBQUMsQ0FBQztNQUNILElBQUksY0FBYyxDQUFDLENBQUM7TUFDcEIsTUFBTSxXQUFXLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDNUQsTUFBTSxHQUFHLENBQUMsY0FBYyxFQUFFLE1BQU07UUFDOUIsTUFBTSxhQUFhLEtBQUssRUFBRSxLQUFLLENBQUM7UUFDaEMsSUFBSSxVQUFVLEtBQUssV0FBVyxFQUFFO1VBQzlCLGNBQWMsVUFBVSxDQUFDO1VBQ3pCLFFBQVEsU0FBUyxFQUFFLENBQUM7U0FDckI7UUFDRCxFQUFFLFdBQVcsRUFBRSxDQUFDO09BQ2pCLENBQUMsQ0FBQztNQUNILElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3pCLE1BQU0sR0FBRyxDQUFDLGVBQWUsRUFBRSxTQUFTO1VBQ2xDLEVBQUUsT0FBTyxDQUFDLE9BQU8sUUFBUSxDQUFDLENBQUM7U0FDNUIsQ0FBQyxDQUFDO09BQ0o7TUFDRCxNQUFNLGNBQWMsVUFBVSxFQUFFLENBQUM7TUFDakMsV0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksUUFBUSxDQUFDLE1BQU0sUUFBUSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDcEcsTUFBTSxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU07UUFDeEIsV0FBVyxNQUFNLEVBQUUsQ0FBQztPQUNyQixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxTQUFTLHdEQUF3RDtNQUNyRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUM7TUFDeEIsTUFBTSxpQkFBaUIsT0FBTyxFQUFFLENBQUM7TUFDakMsTUFBTSxZQUFZLFlBQVksUUFBUSxDQUFDLElBQUksV0FBVyxDQUFDLENBQUM7TUFDeEQsTUFBTSxLQUFLLFlBQVksQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7TUFDOUUsTUFBTSxpQkFBaUIsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDaEQsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDckIsTUFBTSxTQUFTLE1BQU07UUFDbkIsSUFBSSxjQUFjLE1BQU0sRUFBRSxFQUFFO1VBQzFCLEVBQUUsS0FBSyxFQUFFLENBQUM7VUFDVixPQUFPO1NBQ1I7UUFDRCxjQUFjLElBQUksQ0FBQyxjQUFjLFVBQVUsQ0FBQyxNQUFNLGVBQWUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLE1BQU0sY0FBYyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0MsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUU7VUFDekIsaUJBQWlCLENBQUMsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDLENBQUM7VUFDaEQsaUJBQWlCLENBQUMsU0FBUyxFQUFFLE1BQU0sUUFBUSxXQUFXLENBQUMsQ0FBQztTQUN6RCxNQUFNO1VBQ0wsWUFBWSxDQUFDLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsWUFBWSxDQUFDLFdBQVcsRUFBRSxNQUFNLFNBQVMsV0FBVyxDQUFDLENBQUM7UUFDdEQsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ25ELGNBQWMsV0FBVyxDQUFDLE1BQU0sZUFBZSxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNyRixFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ1YsV0FBVyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sWUFBWSxFQUFFLENBQUM7T0FDdEIsQ0FBQztNQUNGLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztNQUMxQixNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztNQUMzQixJQUFJLENBQUMsY0FBYyxFQUFFO1FBQ25CLE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMzQixNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztPQUM1QjtNQUNELE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNO1FBQ3RCLElBQUksTUFBTSxTQUFTLEVBQUUsSUFBSSxjQUFjLEVBQUU7VUFDdkMsTUFBTSxFQUFFLENBQUM7U0FDVjtPQUNGLENBQUMsQ0FBQztNQUNILHVCQUF1QixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztNQUN4QyxNQUFNLE1BQU07UUFDVixNQUFNLE1BQU07UUFDWixNQUFNLEVBQUUsS0FBSztRQUNiLFlBQVksU0FBUztVQUNuQixpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNuQztRQUNELFdBQVcsTUFBTSxDQUFDLFNBQVMsV0FBVyxDQUFDLE1BQU0sZUFBZSxDQUFDO09BQzlELENBQUM7TUFDRixPQUFPO1FBQ0wsaUJBQWlCLE1BQU0sZUFBZSxRQUFRLElBQUk7UUFDbEQsR0FBRztPQUNKLENBQUM7S0FDSCxDQUFDOztJQUVGLElBQUksc0JBQXNCLE1BQU0sT0FBTyxDQUFDO1FBQ3BDLFdBQVcsSUFBSTtRQUNmLFFBQVEsTUFBTTtLQUNqQixDQUFDLENBQUM7O0lBRUgsTUFBTSxtQkFBbUIsTUFBTTtNQUM3QixNQUFNLFdBQVcsT0FBTyxFQUFFLENBQUM7TUFDM0IsTUFBTSxVQUFVLE9BQU8sRUFBRSxDQUFDO01BQzFCLE1BQU0sU0FBUyxPQUFPLEVBQUUsQ0FBQztNQUN6QixNQUFNLHNCQUFzQixjQUFjLE1BQU0sTUFBTSxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsZUFBZSxHQUFHLEtBQUssRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLENBQUM7TUFDOUosTUFBTSxtQkFBbUIsTUFBTTtRQUM3QixNQUFNLHNCQUFzQixRQUFRLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0scUJBQXFCLE9BQU8sSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbEUsT0FBTyxtQkFBbUIsS0FBSyxDQUFDLE1BQU0sa0JBQWtCLFFBQVEsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHO1VBQ3RKLEVBQUU7VUFDRixFQUFFO1NBQ0gsQ0FBQyxDQUFDLENBQUM7T0FDTCxDQUFDO01BQ0YsT0FBTztRQUNMLFFBQVE7UUFDUixPQUFPO1FBQ1AsTUFBTTtRQUNOLGdCQUFnQjtRQUNoQixtQkFBbUI7T0FDcEIsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSwwQkFBMEIscUJBQXFCLENBQUM7SUFDdEQsTUFBTSwwQkFBMEIscUJBQXFCLENBQUM7O0lBRXRELE1BQU0sYUFBYSxVQUFVO01BQzNCLE1BQU0sTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDO01BQ3ZDLFVBQVUsTUFBTSxZQUFZLFNBQVMsQ0FBQyxLQUFLLENBQUM7S0FDN0MsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxlQUFlLHdCQUF3QixLQUFLLENBQUMsNEJBQTRCLEVBQUUsY0FBYztNQUM3RixNQUFNLFFBQVEsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDakMsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUNsQyxRQUFRLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLFVBQVUsQ0FBQyxDQUFDO0tBQ2hELENBQUMsQ0FBQztJQUNILE1BQU0sc0JBQXNCLGlDQUFpQztNQUMzRCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sU0FBUyxDQUFDO01BQzNDLE1BQU0sVUFBVSxRQUFRLENBQUMsbUJBQW1CLENBQUM7UUFDM0MsR0FBRyxJQUFJO1FBQ1AsTUFBTSxRQUFRO1FBQ2QsVUFBVSxJQUFJO09BQ2YsQ0FBQyxDQUFDLENBQUM7TUFDSixPQUFPLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN0RixDQUFDO0lBQ0YsTUFBTSw0QkFBNEIsaUNBQWlDO01BQ2pFLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxTQUFTLENBQUM7TUFDM0MsTUFBTSxVQUFVLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztRQUMxQyxHQUFHLElBQUk7UUFDUCxNQUFNLGNBQWM7UUFDcEIsVUFBVSxJQUFJO09BQ2YsQ0FBQyxDQUFDLENBQUM7TUFDSixPQUFPLDZCQUE2QixDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1RixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsVUFBVSxNQUFNLEtBQUssS0FBSyx5QkFBeUIsQ0FBQztJQUMzRSxNQUFNLGNBQWMsMENBQTBDO01BQzVELElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzFCLE9BQU8seUJBQXlCLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO09BQ3hFLE1BQU07UUFDTCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztPQUNsRTtLQUNGLENBQUM7SUFDRixNQUFNLFdBQVcsMkNBQTJDO01BQzFELE1BQU0sV0FBVyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3JHLE1BQU0sVUFBVSxNQUFNLEtBQUssQ0FBQyxRQUFRLEVBQUUsT0FBTyxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7TUFDM0QsTUFBTSxjQUFjLGdCQUFnQixPQUFPLENBQUMsT0FBTyxFQUFFLGVBQWU7UUFDbEUsSUFBSSxNQUFNLFFBQVEsRUFBRTtVQUNsQixPQUFPLFFBQVEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsV0FBVyxDQUFDLENBQUMsQ0FBQztTQUMzRyxNQUFNO1VBQ0wsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO1NBQ3hCO09BQ0YsQ0FBQyxDQUFDO01BQ0gsT0FBTztRQUNMLE9BQU87UUFDUCxXQUFXO09BQ1osQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxrQkFBa0Isb0JBQW9CO01BQzFDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsY0FBYyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDdkYsTUFBTSxXQUFXLE1BQU0sQ0FBQyxLQUFLLE9BQU8sQ0FBQztRQUNuQyxjQUFjO1VBQ1osdUJBQXVCO1VBQ3ZCLG9CQUFvQjtTQUNyQjtRQUNELE1BQU0sR0FBRyxVQUFVLEVBQUU7UUFDckIsZUFBZTtRQUNmLGVBQWUsSUFBSTtRQUNuQixpQkFBaUIsUUFBUSxDQUFDLENBQUMsTUFBTSxPQUFPLENBQUM7WUFDckMsTUFBTSxTQUFTO1lBQ2YsU0FBUyxTQUFTLFFBQVEsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVztjQUMzRCxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7Y0FDckIsT0FBTyxJQUFJLENBQUM7YUFDYixDQUFDO1lBQ0YsUUFBUSxjQUFjO2NBQ3BCLEVBQUUsSUFBSSxFQUFFLENBQUM7Y0FDVCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7YUFDeEI7WUFDRCxTQUFTLGNBQWM7Y0FDckIsRUFBRSxJQUFJLEVBQUUsQ0FBQztjQUNULE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQzthQUN4QjtXQUNGLENBQUMsQ0FBQyxDQUFDO09BQ1AsQ0FBQyxDQUFDLENBQUM7TUFDSixNQUFNLFdBQVcsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztNQUM3RCxPQUFPO1FBQ0w7VUFDRSxPQUFPLFFBQVEsS0FBSyxFQUFFO1VBQ3RCLE9BQU8sQ0FBQyxRQUFRLE9BQU8sRUFBRSxDQUFDO1NBQzNCO1FBQ0Q7VUFDRSxPQUFPLFFBQVEsS0FBSyxFQUFFO1VBQ3RCLE9BQU8sUUFBUSxRQUFRLEVBQUU7U0FDMUI7T0FDRixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLGlDQUFpQyxhQUFhLENBQUM7TUFDdkUsTUFBTSxXQUFXO01BQ2pCLEtBQUssVUFBVSxDQUFDLGlCQUFpQixDQUFDO01BQ2xDLFlBQVksZUFBZSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUM7TUFDM0MsVUFBVSxRQUFRLEtBQUs7TUFDdkIsY0FBYyxJQUFJO01BQ2xCLFNBQVM7S0FDVixDQUFDLENBQUM7SUFDSCxNQUFNLGNBQWM7TUFDbEIsaUJBQWlCO01BQ2pCLGVBQWU7S0FDaEIsQ0FBQzs7SUFFRixNQUFNLG9CQUFvQixxQkFBcUIsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFLElBQUksU0FBUyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsRUFBRSxJQUFJLFNBQVMsQ0FBQztJQUMxRyxNQUFNLGVBQWUsT0FBTztNQUMxQixNQUFNLE9BQU8sR0FBRyxzQkFBc0IsRUFBRSxDQUFDO01BQ3pDLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxJQUFJLENBQUMsRUFBRTtRQUN2QyxNQUFNLFNBQVMsSUFBSSxDQUFDLFlBQVksUUFBUSxDQUFDLEdBQUcsZUFBZSxDQUFDLEVBQUUsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDO1FBQ3ZGLE1BQU0sTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BFLE9BQU8sR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxzQkFBc0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUNwRixNQUFNO1FBQ0wsT0FBTyxJQUFJLENBQUM7T0FDYjtLQUNGLENBQUM7SUFDRixNQUFNLHFCQUFxQixVQUFVO01BQ25DLE1BQU0sTUFBTSxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7TUFDdEMsTUFBTSxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUMvQixJQUFJLE1BQU0sT0FBTyxFQUFFO1FBQ2pCLE1BQU0sU0FBUyxLQUFLLEVBQUUsQ0FBQztRQUN2QixPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxJQUFJLE1BQU0sRUFBRSxJQUFJLE9BQU8sQ0FBQyxDQUFDO09BQ3hGLE1BQU07UUFDTCxNQUFNLFVBQVUsVUFBVSxDQUFDLFlBQVksUUFBUSxDQUFDLE1BQU0sUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25FLE9BQU8sTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLElBQUksTUFBTSxFQUFFLElBQUksT0FBTyxDQUFDLENBQUM7T0FDckY7S0FDRixDQUFDO0lBQ0YsTUFBTSx5QkFBeUIseUJBQXlCLFdBQVcsT0FBTyxDQUFDLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckwsTUFBTSxzQkFBc0IsNENBQTRDO01BQ3RFLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztNQUNoRSxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsY0FBYyxNQUFNLEdBQUcsTUFBTSxFQUFFLGNBQWMsTUFBTSxDQUFDLENBQUM7TUFDNUUsT0FBTztRQUNMLENBQUM7UUFDRCxPQUFPLEtBQUssR0FBRyxDQUFDO09BQ2pCLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsdUZBQXVGO01BQy9HLE1BQU0sWUFBWSxZQUFZLFFBQVEsQ0FBQyxNQUFNLGFBQWEsRUFBRSxDQUFDLENBQUM7TUFDOUQsTUFBTSxTQUFTLFVBQVUsQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQzVFLE1BQU0sWUFBWSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDaEMsTUFBTSw0QkFBNEIsU0FBUyxFQUFFLElBQUksY0FBYyxPQUFPLENBQUM7TUFDdkUsTUFBTSxpQkFBaUIsb0JBQW9CLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztNQUMxRSxJQUFJLE1BQU0sT0FBTyxJQUFJLGNBQWMsRUFBRTtRQUNuQyxPQUFPO1VBQ0wsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLE9BQU8sR0FBRyxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUM7VUFDeEQsUUFBUSxjQUFjLE9BQU87U0FDOUIsQ0FBQztPQUNIO01BQ0QsSUFBSSxNQUFNLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRTtRQUNwQyxPQUFPO1VBQ0wsR0FBRyxjQUFjLEVBQUU7VUFDbkIsUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxNQUFNLEVBQUUsY0FBYyxPQUFPLENBQUM7U0FDOUQsQ0FBQztPQUNIO01BQ0QsTUFBTSxrQkFBa0IsV0FBVyxLQUFLLE1BQU0sR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsY0FBYyxDQUFDO01BQ25GLElBQUksY0FBYyxFQUFFO1FBQ2xCLE9BQU87VUFDTCxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsT0FBTyxHQUFHLE1BQU0sRUFBRSxjQUFjLEVBQUUsQ0FBQztVQUN4RCxRQUFRLElBQUksSUFBSSxDQUFDLGVBQWUsT0FBTyxHQUFHLE1BQU0sRUFBRSxjQUFjLE9BQU8sQ0FBQztTQUN6RSxDQUFDO09BQ0g7TUFDRCxPQUFPO1FBQ0wsR0FBRyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRyxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFDekQsUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxNQUFNLEVBQUUsY0FBYyxPQUFPLENBQUM7T0FDOUQsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLDBCQUEwQix1Q0FBdUMsU0FBUyxDQUFDLEtBQUs7TUFDcEYsTUFBTSxpQkFBaUIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQzNDLE1BQU0saUJBQWlCLEtBQUssQ0FBQyxZQUFZLFFBQVEsQ0FBQyxNQUFNLHdCQUF3QixFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ3JGLE1BQU0sMEJBQTBCLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ25ILE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDL0UsSUFBSSxNQUFNLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixFQUFFO1FBQzdDLE9BQU8sTUFBTSxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsY0FBYyxPQUFPLENBQUMsQ0FBQztPQUNsRSxNQUFNO1FBQ0wsTUFBTSxlQUFlLGVBQWUsT0FBTyxrQkFBa0IsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakgsT0FBTyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO09BQ3hDO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLGVBQWUsRUFBRSxDQUFDO0lBQ3hCLE1BQU0scUJBQXFCO01BQ3pCLGNBQWMsRUFBRTtNQUNoQixhQUFhLEVBQUU7TUFDZixXQUFXLENBQUMscUJBQXFCLENBQUM7TUFDbEMsWUFBWSxDQUFDLHNCQUFzQixDQUFDO01BQ3BDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztNQUN6QixNQUFNLENBQUMsZUFBZSxDQUFDO01BQ3ZCLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztNQUMzQixLQUFLLENBQUMsY0FBYyxDQUFDO01BQ3JCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztLQUMxQixDQUFDO0lBQ0YsTUFBTSxrQkFBa0I7TUFDdEIsbUJBQW1CLFlBQVksRUFBRTtNQUNqQyxrQkFBa0IsVUFBVSxFQUFFO0tBQy9CLENBQUM7SUFDRixNQUFNLDBCQUEwQixrQkFBa0I7TUFDaEQsTUFBTSxNQUFNLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQztNQUN0QyxNQUFNLFNBQVMsSUFBSSxDQUFDLFlBQVksUUFBUSxDQUFDLEdBQUcsZUFBZSxDQUFDLEVBQUUsR0FBRyxZQUFZLENBQUMsQ0FBQztNQUMvRSxPQUFPLEdBQUcsZUFBZSxLQUFLLEdBQUcsYUFBYSxJQUFJLEdBQUcsWUFBWSxLQUFLLEdBQUcsVUFBVSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDckgsQ0FBQztJQUNGLE1BQU0sbUJBQW1CLHVCQUF1QjtNQUM5QyxNQUFNLGtCQUFrQixNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO01BQ2pELEtBQUssQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQ2xDLE1BQU0sU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDdkIsZUFBZSxLQUFLLENBQUMsT0FBTyxLQUFLLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQzFELE9BQU8sTUFBTSxDQUFDO0tBQ2YsQ0FBQztJQUNGLE1BQU0sd0JBQXdCLFlBQVksUUFBUSxLQUFLLE1BQU0sQ0FBQztJQUM5RCxNQUFNLHVCQUF1Qiw0Q0FBNEM7TUFDdkUsTUFBTSxrQkFBa0Isa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDbkQsTUFBTSxzQkFBc0IsSUFBSSxZQUFZLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQzlFLElBQUksdUJBQXVCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO1FBQ3pDLE9BQU8sbUJBQW1CLEdBQUcsUUFBUSxHQUFHLEtBQUssQ0FBQztPQUMvQyxNQUFNLElBQUksbUJBQW1CLEVBQUU7UUFDOUIsT0FBTyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxRQUFRLEVBQUUsRUFBRSxNQUFNO1VBQ3hELE1BQU0sZ0JBQWdCLGlCQUFpQixDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztVQUNqRixPQUFPLGFBQWEsSUFBSSxDQUFDLElBQUksYUFBYSxFQUFFLEdBQUcsSUFBSSxHQUFHLFFBQVEsQ0FBQztTQUNoRSxDQUFDLENBQUM7T0FDSixNQUFNO1FBQ0wsTUFBTSxVQUFVLElBQUksUUFBUSxFQUFFLEtBQUssT0FBTyxHQUFHLE1BQU0sRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDL0UsTUFBTSxtQkFBbUIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLFlBQVksQ0FBQztRQUMxRCxPQUFPLE9BQU8sR0FBRyxnQkFBZ0IsSUFBSSxlQUFlLEVBQUUsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO09BQ3hFO0tBQ0YsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLG9DQUFvQztNQUMxRCxNQUFNLG1CQUFtQixRQUFRLDhDQUE4QztRQUM3RSxNQUFNLFNBQVMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sWUFBWTtVQUNoQixHQUFHLE1BQU07VUFDVCxHQUFHLE1BQU0sRUFBRTtVQUNYLFFBQVEsTUFBTSxPQUFPO1NBQ3RCLENBQUM7UUFDRixPQUFPO1VBQ0wsR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztVQUN0RCxXQUFXLElBQUk7U0FDaEIsQ0FBQztPQUNILENBQUM7TUFDRixNQUFNLGtCQUFrQixRQUFRLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7TUFDaEcsTUFBTSwyQkFBMkI7UUFDL0IsT0FBTyxRQUFRO1VBQ2IsT0FBTztVQUNQLE9BQU87VUFDUCxXQUFXO1VBQ1gsV0FBVztVQUNYLFdBQVc7VUFDWCxXQUFXO1NBQ1osT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixPQUFPLFFBQVE7VUFDYixPQUFPO1VBQ1AsT0FBTztVQUNQLFdBQVc7VUFDWCxXQUFXO1VBQ1gsV0FBVztVQUNYLFdBQVc7U0FDWixPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ2hDLENBQUM7TUFDRixNQUFNLDBCQUEwQjtRQUM5QixPQUFPLFFBQVE7VUFDYixPQUFPO1VBQ1AsV0FBVztVQUNYLFdBQVc7VUFDWCxXQUFXO1VBQ1gsV0FBVztVQUNYLE9BQU87U0FDUixPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLE9BQU8sUUFBUTtVQUNiLE9BQU87VUFDUCxXQUFXO1VBQ1gsV0FBVztVQUNYLFdBQVc7VUFDWCxXQUFXO1VBQ1gsT0FBTztTQUNSLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDaEMsQ0FBQztNQUNGLE9BQU8sTUFBTSxHQUFHLHVCQUF1QixHQUFHLHdCQUF3QixDQUFDO0tBQ3BFLENBQUM7SUFDRixNQUFNLGtCQUFrQixxQ0FBcUM7TUFDM0QsSUFBSSxRQUFRLEtBQUssTUFBTSxFQUFFO1FBQ3ZCLE9BQU87VUFDTCxRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLGtCQUFrQixDQUFDO1VBQ2pELFNBQVM7WUFDUCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDckIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO1dBQ3RCO1VBQ0QsV0FBVyxlQUFlO1NBQzNCLENBQUM7T0FDSCxNQUFNO1FBQ0wsT0FBTztVQUNMLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQztVQUNuRSxTQUFTLGVBQWUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUM7VUFDekQsV0FBVyxlQUFlO1NBQzNCLENBQUM7T0FDSDtLQUNGLENBQUM7O0lBRUYsTUFBTSxrQkFBa0Isc0JBQXNCO01BQzVDLE1BQU0sT0FBTyxRQUFRLENBQUMsVUFBVSxFQUFFLGNBQWMsVUFBVSxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ2hGLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssS0FBSyxnQkFBZ0IsQ0FBQyxDQUFDO01BQ3pFLE9BQU87UUFDTCxpQkFBaUIsSUFBSTtRQUNyQixjQUFjLElBQUk7T0FDbkIsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLCtCQUErQixZQUFZO01BQy9DLElBQUksUUFBUSxPQUFPLElBQUksQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sUUFBUSxDQUFDO09BQ2pCLE1BQU07UUFDTCxNQUFNLG9CQUFvQixTQUFTLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUMvRSxNQUFNLDJCQUEyQixTQUFTLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUN4RixNQUFNLHVCQUF1QixpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1RCxNQUFNLGtCQUFrQixpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxJQUFJLG9CQUFvQixJQUFJLGVBQWUsRUFBRTtVQUMzQyxJQUFJLGVBQWUsSUFBSSxvQkFBb0IsRUFBRTtZQUMzQyxNQUFNLGVBQWUsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEQsTUFBTSxvQkFBb0IsS0FBSyxDQUFDLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxFQUFFLE1BQU07Y0FDM0UsR0FBRyxDQUFDO2NBQ0osVUFBVSxNQUFNO2FBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBQ0osT0FBTyxZQUFZLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1dBQy9DLE1BQU07WUFDTCxPQUFPLG9CQUFvQixHQUFHLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxHQUFHLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1dBQ3hHO1NBQ0YsTUFBTTtVQUNMLE9BQU8sd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDekM7T0FDRjtLQUNGLENBQUM7SUFDRixNQUFNLGtDQUFrQyxZQUFZO01BQ2xELElBQUksUUFBUSxPQUFPLElBQUksQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sUUFBUSxDQUFDO09BQ2pCLE1BQU07UUFDTCxNQUFNLGVBQWUsU0FBUyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDMUUsTUFBTSxlQUFlLFlBQVksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVJLE9BQU8sWUFBWSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztPQUN4RjtLQUNGLENBQUM7SUFDRixNQUFNLGlCQUFpQiw0Q0FBNEM7TUFDakUsTUFBTSxjQUFjLGVBQWUsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7TUFDMUQsSUFBSSxXQUFXLGFBQWEsT0FBTyxHQUFHLENBQUMsRUFBRTtRQUN2QyxPQUFPLFFBQVEsS0FBSyxDQUFDO1VBQ25CLElBQUk7VUFDSixVQUFVLENBQUMsV0FBVyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEMsQ0FBQyxDQUFDO09BQ0osTUFBTTtRQUNMLE1BQU0sZ0JBQWdCLGVBQWUsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUM5RCxJQUFJLGFBQWEsYUFBYSxPQUFPLEdBQUcsQ0FBQyxFQUFFO1VBQ3pDLE9BQU8sUUFBUSxLQUFLLENBQUM7WUFDbkIsSUFBSTtZQUNKLFVBQVUsQ0FBQyxhQUFhLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUMxQyxDQUFDLENBQUM7U0FDSixNQUFNLElBQUksV0FBVyxnQkFBZ0IsT0FBTyxHQUFHLENBQUMsSUFBSSxhQUFhLGdCQUFnQixPQUFPLEdBQUcsQ0FBQyxFQUFFO1VBQzdGLE1BQU0sV0FBVyw0QkFBNEIsQ0FBQyxXQUFXLGdCQUFnQixPQUFPLENBQUMsYUFBYSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7VUFDakgsT0FBTyxRQUFRLEtBQUssQ0FBQztZQUNuQixJQUFJO1lBQ0osUUFBUTtXQUNULENBQUMsQ0FBQztTQUNKLE1BQU07VUFDTCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7U0FDeEI7T0FDRjtLQUNGLENBQUM7SUFDRixNQUFNLGdCQUFnQiwrQkFBK0I7TUFDbkQsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDckIsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCLE1BQU07UUFDTCxPQUFPLFVBQVUsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCO1VBQzNDLElBQUksV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQzdCLE1BQU0sK0JBQStCLEdBQUcsZUFBZSxDQUFDLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQyxDQUFDO1lBQzFGLE1BQU0sV0FBVyxZQUFZLE9BQU8sR0FBRyxDQUFDLEdBQUcsWUFBWSxHQUFHLCtCQUErQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzNHLE9BQU8sUUFBUSxPQUFPLEdBQUcsQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDO2NBQ3pDLE1BQU0sWUFBWTtjQUNsQixRQUFRO2FBQ1QsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7V0FDdEIsTUFBTTtZQUNMLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztXQUN4QjtTQUNGLEVBQUUsTUFBTSxDQUFDLENBQUM7T0FDWjtLQUNGLENBQUM7SUFDRixNQUFNLFdBQVcsb0JBQW9CO01BQ25DLE1BQU0sV0FBVyxZQUFZLFFBQVEsQ0FBQyxNQUFNLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDeEQsTUFBTSxTQUFTLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztNQUMxQyxNQUFNLGdCQUFnQixhQUFhLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztNQUN4RixNQUFNLFlBQVksWUFBWSxRQUFRLENBQUMsTUFBTSxVQUFVLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDbkUsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDNUIsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCO01BQ0QsT0FBTyxjQUFjLENBQUMsU0FBUyxFQUFFLE1BQU0sWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDLFFBQVEsQ0FBQyxNQUFNLGFBQWEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDcEksQ0FBQzs7SUFFRixNQUFNLGFBQWEsK0JBQStCO01BQ2hELE1BQU0sUUFBUSxFQUFFLENBQUM7TUFDakIsTUFBTSxjQUFjLEVBQUUsQ0FBQztNQUN2QixNQUFNLGdCQUFnQixFQUFFLENBQUM7TUFDekIsTUFBTSxpQkFBaUIsRUFBRSxDQUFDO01BQzFCLE1BQU0sY0FBYyxFQUFFLENBQUM7TUFDdkIsTUFBTSxlQUFlLHNCQUFzQjtRQUN6QyxNQUFNLGNBQWMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDN0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUN6QixXQUFXLE9BQU8sSUFBSSxDQUFDLFVBQVU7VUFDL0IsY0FBYyxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUc7WUFDbkMsR0FBRyxXQUFXLE9BQU87WUFDckIsTUFBTSxNQUFNLEtBQUssS0FBSyx5QkFBeUIsR0FBRyxjQUFjLEdBQUcsUUFBUTtZQUMzRSxVQUFVLE1BQU07Y0FDZCxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDdkI7V0FDRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxXQUFXLE1BQU0sS0FBSyxRQUFRLEVBQUU7VUFDbEMsYUFBYSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDakMsTUFBTTtVQUNMLFdBQVcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQztPQUNoQyxDQUFDO01BQ0YsTUFBTSxrQkFBa0Isc0JBQXNCO1FBQzVDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCO1VBQ3ZELElBQUksV0FBVyxNQUFNLEtBQUssUUFBUSxFQUFFO1lBQ2xDLGFBQWEsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1dBQ3BDLE1BQU07WUFDTCxXQUFXLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztXQUNsQztVQUNELFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUM7U0FDbkMsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sU0FBUyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7TUFDckMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPO1FBQ3BCLE1BQU0sYUFBYSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEMsSUFBSSxVQUFVLEtBQUssS0FBSyxhQUFhLEVBQUU7VUFDckMsWUFBWSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUMvQixNQUFNLElBQUksVUFBVSxLQUFLLEtBQUssZ0JBQWdCLEVBQUU7VUFDL0MsZUFBZSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUNsQztPQUNGLENBQUMsQ0FBQztNQUNILE9BQU87UUFDTCxLQUFLO1FBQ0wsV0FBVztRQUNYLGFBQWE7UUFDYixXQUFXO1FBQ1gsY0FBYztPQUNmLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sb0JBQW9CLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN0RCxNQUFNLGlCQUFpQixVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNwRCxNQUFNLG1CQUFtQixVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUMxRCxNQUFNLGdCQUFnQixtQkFBbUIsQ0FBQztJQUMxQyxNQUFNLHVCQUF1QixRQUFRO01BQ25DLE1BQU0sUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDdkIsT0FBTyxVQUFVLE9BQU8sQ0FBQztRQUN2QixLQUFLO1VBQ0gsS0FBSyxLQUFLO1VBQ1YsU0FBUyxDQUFDLFNBQVMsQ0FBQztTQUNyQjtRQUNELDJCQUEyQixFQUFFLE9BQU8saUJBQWlCLEVBQUU7UUFDdkQsUUFBUSxRQUFRO1VBQ2QsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7VUFDZCxVQUFVLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUs7WUFDcEMsUUFBUSxDQUFDLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO1dBQ25DLENBQUMsQ0FBQztVQUNILFFBQVEsQ0FBQyxJQUFJLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztVQUN0QyxRQUFRLENBQUMsSUFBSSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDakM7UUFDRCxrQkFBa0IsUUFBUSxDQUFDO1VBQ3pCLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRTtZQUMvQixXQUFXLENBQUMsYUFBYSxFQUFFLEVBQUUsY0FBYztjQUN6QyxJQUFJLEVBQUUsTUFBTSxJQUFJLGFBQWEsS0FBSyxPQUFPLEVBQUU7Z0JBQ3pDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztnQkFDdEMsUUFBUSxDQUFDLElBQUksUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2VBQ2pDO2FBQ0YsQ0FBQztZQUNGLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjO2NBQ3BDLE1BQU0sT0FBTyxJQUFJLFFBQVEsQ0FBQztjQUMxQixRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2NBQ3hCLE1BQU0sZUFBZSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Y0FDakMsVUFBVSxXQUFXLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxTQUFTLENBQUMsQ0FBQztjQUMvQyxLQUFLLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO2NBQzNCLE1BQU0sV0FBVyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Y0FDN0IsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDO2NBQzFDLFVBQVUsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZTtnQkFDOUMsRUFBRSxNQUFNLE1BQU0sS0FBSyxDQUFDLEtBQUs7a0JBQ3ZCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztrQkFDWCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDckIsQ0FBQyxRQUFRLENBQUMsTUFBTTtrQkFDZixNQUFNLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztrQkFDNUIsT0FBTyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQ3BDLENBQUMsQ0FBQztlQUNKLENBQUMsQ0FBQztjQUNILFVBQVUsQ0FBQyxNQUFNO2dCQUNmLEtBQUssQ0FBQyxJQUFJLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDO2VBQy9DLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDUCxDQUFDO1lBQ0YsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGNBQWM7Y0FDckMsVUFBVSxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlO2dCQUM5QyxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDMUIsS0FBSyxXQUFXO29CQUNoQixPQUFPLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQzttQkFDM0MsQ0FBQyxDQUFDLENBQUMsQ0FBQztlQUNSLENBQUMsQ0FBQztjQUNILFFBQVEsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQy9CLFVBQVUsRUFBRSxNQUFNLGdCQUFnQjtnQkFDbEMsT0FBTyxRQUFRLEtBQUssRUFBRTtlQUN2QixDQUFDLENBQUM7YUFDSixDQUFDO1lBQ0YsS0FBSyxDQUFDLGNBQWMsRUFBRSxlQUFlO2NBQ25DLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRO2dCQUMvQixLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4RCxRQUFRLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2tCQUMvQixVQUFVLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQztrQkFDM0IsT0FBTyxJQUFJLE1BQU07aUJBQ2xCLENBQUMsQ0FBQztlQUNKLENBQUMsQ0FBQzthQUNKLENBQUM7V0FDSCxDQUFDO1VBQ0YsTUFBTSxPQUFPLENBQUM7WUFDWixNQUFNLFNBQVM7WUFDZixVQUFVLFFBQVEsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUUsRUFBRSxLQUFLO2NBQ3JFLElBQUksQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7Y0FDM0IsT0FBTyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM1QixDQUFDO1dBQ0gsQ0FBQztTQUNILENBQUM7UUFDRixVQUFVLE1BQU0sTUFBTSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUM7T0FDeEMsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLGtCQUFrQixxQkFBcUIsQ0FBQztJQUM5QyxNQUFNLGFBQWEsbURBQW1EO01BQ3BFLE1BQU0sWUFBWSxNQUFNLFVBQVUsQ0FBQztNQUNuQyxNQUFNLGtCQUFrQixTQUFTLE9BQU8sQ0FBQztNQUN6QyxNQUFNLFVBQVUsUUFBUSxFQUFFLFdBQVcsUUFBUSxDQUFDO01BQzlDLE1BQU0sY0FBYyxPQUFPLEVBQUUsQ0FBQztNQUM5QixNQUFNLGNBQWMsT0FBTyxFQUFFLENBQUM7TUFDOUIsTUFBTSxzQkFBc0IsT0FBTyxFQUFFLENBQUM7TUFDdEMsTUFBTSxhQUFhLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztRQUM5QyxJQUFJO1FBQ0osVUFBVSxNQUFNO1VBQ2QsTUFBTSxNQUFNLEVBQUUsQ0FBQztVQUNmLE9BQU8sUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDNUI7T0FDRixDQUFDLENBQUMsQ0FBQztNQUNKLE1BQU0sWUFBWSxNQUFNO1FBQ3RCLE1BQU0sV0FBVyxtQkFBbUIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RCxNQUFNLFNBQVMscUJBQXFCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2RCxPQUFPLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQzNFLENBQUM7TUFDRixNQUFNLG1CQUFtQixNQUFNO1FBQzdCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLFNBQVMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO09BQ3pFLENBQUM7TUFDRixNQUFNLHNCQUFzQixRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFdBQVcsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDbkYsTUFBTSwyQkFBMkIsTUFBTTtRQUNyQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRTtVQUN2QixPQUFPLElBQUksQ0FBQztTQUNiLE1BQU07VUFDTCxNQUFNLHVCQUF1QixTQUFTLEVBQUUsQ0FBQztVQUN6QyxNQUFNLGVBQWUsSUFBSSxDQUFDLG1CQUFtQixJQUFJLEVBQUUsRUFBRSxNQUFNLENBQUMsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsV0FBVyxJQUFJLEVBQUUsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1VBQzlJLE9BQU8sb0JBQW9CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDekc7T0FDRixDQUFDO01BQ0YsTUFBTSxRQUFRLE1BQU07UUFDbEIsV0FBVyxNQUFNLEVBQUUsQ0FBQztRQUNwQixXQUFXLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLG1CQUFtQixNQUFNLEVBQUUsQ0FBQztRQUM1QixVQUFVLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztPQUM3QixDQUFDO01BQ0YsTUFBTSw4QkFBOEIsTUFBTTtRQUN4QyxJQUFJLFVBQVUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1VBQ2pDLE1BQU0sZ0JBQWdCLFVBQVUsUUFBUSxDQUFDO1VBQ3pDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUM7VUFDbkMsSUFBSSx3QkFBd0IsRUFBRSxFQUFFO1lBQzlCLEtBQUssQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1dBQ3pDLE1BQU07WUFDTCxXQUFXLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixVQUFVLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztXQUNuQztTQUNGO09BQ0YsQ0FBQztNQUNGLE1BQU0sa0JBQWtCLGdCQUFnQjtRQUN0QyxLQUFLO1VBQ0gsS0FBSyxLQUFLO1VBQ1YsU0FBUyxDQUFDLGlCQUFpQixDQUFDO1NBQzdCO1FBQ0QsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUN6QixZQUFZLFFBQVEsQ0FBQztVQUNuQixNQUFNLE9BQU8sQ0FBQyxFQUFFLE1BQU0sU0FBUyxFQUFFLENBQUM7VUFDbEMsTUFBTSxDQUFDLHdCQUF3QixFQUFFO1lBQy9CLGFBQWEsQ0FBQyxRQUFRO2NBQ3BCLE1BQU0sVUFBVSxJQUFJLENBQUMsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNoRixDQUFDO1lBQ0YsYUFBYSxDQUFDLFNBQVM7Y0FDckIsTUFBTSxVQUFVLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNwQyxDQUFDO1dBQ0gsQ0FBQztTQUNILENBQUM7T0FDSCxDQUFDLENBQUM7TUFDSCxNQUFNLFlBQVksTUFBTSxDQUFDLE1BQU0sVUFBVSxDQUFDLHVCQUF1QixFQUFFLGNBQWM7UUFDL0UsTUFBTSxZQUFZLFlBQVksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDN0MsUUFBUSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLGlCQUFpQixlQUFlLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO09BQzFGLENBQUMsQ0FBQyxDQUFDO01BQ0osTUFBTSw0QkFBNEIscUJBQXFCLGVBQWUsQ0FBQyxNQUFNLEVBQUU7UUFDN0UsU0FBUyxVQUFVO1FBQ25CLFNBQVMsR0FBRyxNQUFNO1FBQ2xCLG9CQUFvQixLQUFLO09BQzFCLEVBQUUsTUFBTSxVQUFVLEVBQUUsUUFBUSxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDL0MsTUFBTSx5QkFBeUIsb0JBQW9CLFdBQVcsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQy9GLE1BQU0sZUFBZSxZQUFZO1FBQy9CLE1BQU0sU0FBUyxHQUFHLE1BQU0sR0FBRyxTQUFTLE9BQU8sRUFBRSxDQUFDO1FBQzlDLE1BQU0sU0FBUyxTQUFTLEVBQUUsQ0FBQztRQUMzQixNQUFNLGFBQWE7VUFDakIsR0FBRyxPQUFPO1VBQ1YsR0FBRyxNQUFNLGVBQWU7U0FDekIsQ0FBQztRQUNGLE1BQU0sY0FBYyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssYUFBYSxVQUFVLEdBQUcsYUFBYSxVQUFVLEdBQUcsYUFBYSxRQUFRLENBQUM7UUFDekgsTUFBTSxhQUFhLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLE9BQU8sR0FBRyxLQUFLLEtBQUssZ0JBQWdCLEdBQUcseUJBQXlCLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxHQUFHLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxlQUFlLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4TCxPQUFPLGFBQWEsQ0FBQztVQUNuQixNQUFNLFdBQVc7VUFDakIsS0FBSyxVQUFVLENBQUMsaUJBQWlCLENBQUM7VUFDbEMsVUFBVTtVQUNWLFVBQVUsUUFBUSxLQUFLO1VBQ3ZCLGNBQWMsSUFBSTtVQUNsQixXQUFXLGVBQWUsVUFBVTtTQUNyQyxDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxZQUFZLHVCQUF1QjtRQUN2QyxNQUFNLFlBQVksUUFBUSxLQUFLLE1BQU0sR0FBRyxlQUFlLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLGVBQWUsUUFBUSxPQUFPLEVBQUUsQ0FBQztRQUNqSCxNQUFNLGVBQWUsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUU7VUFDaEUsYUFBYSxXQUFXLElBQUk7VUFDNUIsY0FBYyxNQUFNLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztVQUM5QyxTQUFTLE1BQU0sV0FBVyxRQUFRLENBQUMsSUFBSSxDQUFDO1NBQ3pDLENBQUMsQ0FBQztRQUNILE9BQU8sU0FBUyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztPQUMzQyxDQUFDO01BQ0YsTUFBTSxnQkFBZ0Isc0JBQXNCO1FBQzFDLG9CQUFvQixPQUFPLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRTtVQUN2QixPQUFPO1NBQ1I7UUFDRCxNQUFNLGNBQWMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sV0FBVyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN4QyxNQUFNLFNBQVMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QyxtQkFBbUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25CLE1BQU0sZ0JBQWdCLFVBQVUsUUFBUSxDQUFDO1FBQ3pDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFO1VBQzlCLFFBQVEsQ0FBQyxhQUFhLEVBQUUsZUFBZSxDQUFDLENBQUM7VUFDekMsV0FBVyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsVUFBVSxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1VBQ3BFLE1BQU07VUFDTixZQUFZO1lBQ1YsU0FBUyxDQUFDLGVBQWUsQ0FBQztZQUMxQixNQUFNLFdBQVc7V0FDbEI7U0FDRixFQUFFLE1BQU0sUUFBUSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksS0FBSyxDQUFDLFdBQVcsTUFBTSxFQUFFLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFDOUMsSUFBSSx3QkFBd0IsRUFBRSxFQUFFO1VBQzlCLEtBQUssQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3pDO09BQ0YsQ0FBQztNQUNGLElBQUksYUFBYSxLQUFLLENBQUM7TUFDdkIsTUFBTSx1QkFBdUIsSUFBSSxDQUFDLE1BQU07UUFDdEMsSUFBSSxDQUFDLE1BQU0sU0FBUyxFQUFFLElBQUksTUFBTSxRQUFRLElBQUksVUFBVSxFQUFFO1VBQ3RELE9BQU87U0FDUjtRQUNELElBQUksR0FBRyxDQUFDLFVBQVUsUUFBUSxFQUFFLGVBQWUsQ0FBQyxFQUFFO1VBQzVDLG9CQUFvQixTQUFTLEVBQUUsQ0FBQztTQUNqQyxNQUFNO1VBQ0wsTUFBTSxTQUFTLFNBQVMsRUFBRSxDQUFDO1VBQzNCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUTtZQUMzQyxhQUFhLENBQUMsSUFBSSxTQUFTLEVBQUUsUUFBUSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO1dBQ3hELENBQUMsQ0FBQztTQUNKO09BQ0YsRUFBRSxFQUFFLENBQUMsQ0FBQztNQUNQLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNO1FBQ3RCLE1BQU0sR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQixNQUFNLEdBQUcsQ0FBQyxpRUFBaUUsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO1FBQzFHLE1BQU0sR0FBRyxDQUFDLDhCQUE4QixFQUFFLG9CQUFvQixTQUFTLENBQUMsQ0FBQztRQUN6RSxNQUFNLEdBQUcsQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMxQyxNQUFNLEdBQUcsQ0FBQyx1QkFBdUIsRUFBRSxLQUFLO1VBQ3RDLE1BQU0sU0FBUyxTQUFTLEVBQUUsQ0FBQztVQUMzQixLQUFLLENBQUMsTUFBTSxZQUFZLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU87WUFDbEQsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDNUQsVUFBVSxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQyxDQUFDO1dBQ3hELENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQztRQUNILE1BQU0sR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNO1VBQzFCLFFBQVEsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU07WUFDdEMsSUFBSSxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFO2NBQ3hFLEtBQUssRUFBRSxDQUFDO2FBQ1Q7V0FDRixFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ1AsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxHQUFHLENBQUMsWUFBWSxFQUFFLE1BQU07VUFDNUIsSUFBSSxNQUFNLEtBQUssV0FBVyxFQUFFLEVBQUU7WUFDNUIsS0FBSyxFQUFFLENBQUM7V0FDVDtTQUNGLENBQUMsQ0FBQztRQUNILE1BQU0sR0FBRyxDQUFDLG9CQUFvQixFQUFFLFNBQVM7VUFDdkMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUNmLEtBQUssRUFBRSxDQUFDO1dBQ1QsTUFBTSxJQUFJLE1BQU0sU0FBUyxFQUFFLEVBQUU7WUFDNUIsb0JBQW9CLFNBQVMsRUFBRSxDQUFDO1dBQ2pDO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxHQUFHLENBQUMsV0FBVyxFQUFFLE1BQU07VUFDM0IsYUFBYSxJQUFJLENBQUM7U0FDbkIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxHQUFHLENBQUMsY0FBYyxFQUFFLE1BQU07VUFDOUIsYUFBYSxLQUFLLENBQUM7U0FDcEIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxHQUFHLENBQUMsWUFBWSxFQUFFLE1BQU07VUFDNUIsTUFBTSxDQUFDLFVBQVUsUUFBUSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3RFLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxhQUFhLFVBQVU7TUFDM0IsTUFBTSxzQkFBc0I7UUFDMUI7VUFDRSxNQUFNLFdBQVc7VUFDakIsTUFBTSxZQUFZO1VBQ2xCLEtBQUssYUFBYTtVQUNsQixNQUFNLFlBQVk7U0FDbkI7UUFDRDtVQUNFLE1BQU0sYUFBYTtVQUNuQixNQUFNLGNBQWM7VUFDcEIsS0FBSyxlQUFlO1VBQ3BCLE1BQU0sY0FBYztTQUNyQjtRQUNEO1VBQ0UsTUFBTSxZQUFZO1VBQ2xCLE1BQU0sYUFBYTtVQUNuQixLQUFLLGNBQWM7VUFDbkIsTUFBTSxhQUFhO1NBQ3BCO1FBQ0Q7VUFDRSxNQUFNLGNBQWM7VUFDcEIsTUFBTSxTQUFTO1VBQ2YsS0FBSyxhQUFhO1VBQ2xCLE1BQU0sZUFBZTtTQUN0QjtPQUNGLENBQUM7TUFDRixNQUFNLENBQUMsbUJBQW1CLEVBQUUsUUFBUTtRQUNsQyxNQUFNLEdBQUcsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFJLEtBQUssRUFBRTtVQUM1QyxTQUFTLElBQUksS0FBSztVQUNsQixNQUFNLElBQUksS0FBSztVQUNmLFVBQVUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDO1VBQy9DLFNBQVMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLElBQUksS0FBSyxDQUFDO1NBQy9DLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztNQUNILE1BQU0sR0FBRyxTQUFTLFVBQVUsQ0FBQyxXQUFXLEVBQUU7UUFDeEMsU0FBUyxjQUFjO1FBQ3ZCLE1BQU0sWUFBWTtRQUNsQixTQUFTLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztRQUN0QyxVQUFVLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUM7T0FDckQsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLHFCQUFxQixrQkFBa0I7TUFDM0MsTUFBTSxlQUFlLE1BQU07UUFDekIsTUFBTSxVQUFVLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sVUFBVSxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7UUFDdkQsTUFBTSxVQUFVLE9BQU8sRUFBRSxDQUFDO1FBQzFCLE9BQU8sS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVO1VBQzlCLE1BQU0sZ0JBQWdCO1VBQ3RCLE1BQU0sSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDO1VBQ3pCLFNBQVMsT0FBTztZQUNkLE1BQU0sWUFBWSxVQUFVO2NBQzFCLElBQUksTUFBTSxFQUFFO2dCQUNWLE9BQU8sR0FBRyxDQUFDLFVBQVUsTUFBTSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDOUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7ZUFDbEI7Y0FDRCxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN2QixDQUFDO1lBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sZ0JBQWdCLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDN0QsT0FBTyxNQUFNO2NBQ1gsT0FBTyxNQUFNLEVBQUUsQ0FBQztjQUNoQixhQUFhLEVBQUUsQ0FBQzthQUNqQixDQUFDO1dBQ0g7VUFDRCxVQUFVLE1BQU0sSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztTQUMvQyxDQUFDLENBQUMsQ0FBQztPQUNMLENBQUM7TUFDRixNQUFNLEdBQUcsU0FBUyxjQUFjLENBQUMsSUFBSSxLQUFLLEVBQUU7UUFDMUMsU0FBUyxJQUFJLEtBQUs7UUFDbEIsTUFBTSxJQUFJLEtBQUs7UUFDZixPQUFPLFlBQVksUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNDLFNBQVMsSUFBSSxlQUFlO09BQzdCLENBQUMsQ0FBQztNQUNILE1BQU0sR0FBRyxTQUFTLGtCQUFrQixDQUFDLElBQUksS0FBSyxFQUFFO1FBQzlDLE1BQU0sZ0JBQWdCO1FBQ3RCLE1BQU0sSUFBSSxLQUFLO1FBQ2YsaUJBQWlCLFlBQVk7UUFDN0IsU0FBUyxJQUFJLFlBQVk7T0FDMUIsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0saUJBQWlCLFdBQVc7TUFDaEMsTUFBTSxZQUFZO01BQ2xCLE1BQU0sYUFBYTtNQUNuQixNQUFNLGFBQWE7TUFDbkIsWUFBWSxvQkFBb0I7TUFDaEMsTUFBTSxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUU7UUFDOUIsT0FBTztRQUNQLFVBQVU7UUFDVixPQUFPO09BQ1IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO01BQ2YsU0FBUyxRQUFRO01BQ2pCLFNBQVMsNkJBQTZCLE1BQU0sVUFBVSxjQUFjLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxPQUFPO01BQ3JILFlBQVksVUFBVSxRQUFRLEtBQUssQ0FBQyxNQUFNLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO01BQzNFLFlBQVksbUJBQW1CLE1BQU0sWUFBWSxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO01BQzdFLGdCQUFnQixxQkFBcUIsQ0FBQyxNQUFNLENBQUM7TUFDN0MsYUFBYSxxQkFBcUIsQ0FBQyxNQUFNLENBQUM7S0FDM0MsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxlQUFlLFVBQVU7TUFDN0IsTUFBTSxjQUFjLFFBQVEsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7TUFDL0QsT0FBTyxXQUFXLElBQUksQ0FBQyxhQUFhO1FBQ2xDLE1BQU0sVUFBVTtRQUNoQixNQUFNLFVBQVU7UUFDaEIsTUFBTSxVQUFVO1FBQ2hCLFlBQVksVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxNQUFNLFNBQVMsV0FBVyxDQUFDLEtBQUssV0FBVyxDQUFDLEdBQUcsS0FBSyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssS0FBSyxFQUFFLENBQUMsR0FBRyxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ25HLFNBQVMsU0FBUyxLQUFLLE1BQU07UUFDN0IsU0FBUyw2QkFBNkI7VUFDcEMsSUFBSSxFQUFFLENBQUM7VUFDUCxPQUFPLE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7WUFDN0QsT0FBTyxLQUFLLEtBQUs7WUFDakIsYUFBYSxDQUFDLEtBQUssS0FBSyxXQUFXLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSTtXQUMzRSxDQUFDLE9BQU8sQ0FBQztTQUNYO1FBQ0QsWUFBWSxVQUFVO1VBQ3BCLE1BQU0sT0FBTyxZQUFZLFFBQVEsQ0FBQyxNQUFNLFVBQVUsUUFBUSxFQUFFLENBQUMsQ0FBQztVQUM5RCxPQUFPLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTztZQUMzRSxNQUFNLFVBQVUsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNwQyxPQUFPLE9BQU8sSUFBSSxDQUFDLFFBQVE7Y0FDekIsTUFBTSxhQUFhLE1BQU0sQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLGVBQWUsRUFBRSxDQUFDO2NBQ2pFLE9BQU87Z0JBQ0wsSUFBSTtnQkFDSixVQUFVO2dCQUNWLE9BQU8sRUFBRTtlQUNWLENBQUM7YUFDSCxDQUFDLENBQUM7V0FDSixDQUFDLENBQUMsQ0FBQztTQUNMO1FBQ0QsWUFBWSxrQkFBa0IsTUFBTSxZQUFZLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUM7UUFDckUsZ0JBQWdCLE9BQU87VUFDckIsTUFBTSxXQUFXLFVBQVUsRUFBRSxDQUFDO1VBQzlCLEdBQUcsVUFBVSxDQUFDLE1BQU0sVUFBVSxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztVQUNuRSxRQUFRLElBQUksQ0FBQyxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1VBQzFFLE9BQU8sZ0JBQWdCLENBQUMsUUFBUSxNQUFNLEVBQUUscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM3RTtRQUNELGFBQWEscUJBQXFCLENBQUMsTUFBTSxDQUFDO09BQzNDLENBQUMsQ0FBQyxDQUFDO0tBQ0wsQ0FBQztJQUNGLE1BQU0sYUFBYSxVQUFVO01BQzNCLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUNuRCxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ3JFLENBQUM7O0lBRUYsTUFBTSxhQUFhLHVCQUF1QjtNQUN4QyxlQUFlLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQ25DLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztNQUN4QyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7TUFDcEMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQ3BDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztLQUN2QyxDQUFDOztJQUVGLE1BQU0sc0JBQXNCLFVBQVUsWUFBWSxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTztNQUM5RSxHQUFHLFdBQVcsQ0FBQyxNQUFNLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxJQUFJLE1BQU0sVUFBVSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0tBQ3RGLENBQUMsQ0FBQztJQUNILE1BQU0sb0JBQW9CLFVBQVU7TUFDbEMsTUFBTSxHQUFHLFNBQVMsVUFBVSxDQUFDLFNBQVMsRUFBRTtRQUN0QyxTQUFTLGlCQUFpQjtRQUMxQixNQUFNLFNBQVM7UUFDZixTQUFTLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztRQUNwQyxVQUFVLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUM7T0FDakQsQ0FBQyxDQUFDO01BQ0gsTUFBTSxHQUFHLFNBQVMsVUFBVSxDQUFDLFFBQVEsRUFBRTtRQUNyQyxTQUFTLGlCQUFpQjtRQUMxQixNQUFNLFFBQVE7UUFDZCxTQUFTLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztRQUN0QyxVQUFVLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7T0FDaEQsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sYUFBYSxVQUFVO01BQzNCLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzNCLENBQUM7O0lBRUYsTUFBTSxtQkFBbUIseUJBQXlCLE9BQU87TUFDdkQsR0FBRyxVQUFVLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDO01BQ2pDLE1BQU0sOEJBQThCLEtBQUs7UUFDdkMsV0FBVyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QixHQUFHLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQ3hCLENBQUM7TUFDRixNQUFNLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO01BQy9ELE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxNQUFNLElBQUksQ0FBQyxzQkFBc0IsRUFBRSwyQkFBMkIsQ0FBQyxFQUFFLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDcEksQ0FBQztJQUNGLE1BQU0sYUFBYSxVQUFVO01BQzNCLE1BQU0sY0FBYyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7TUFDakQsTUFBTSxXQUFXLE1BQU0sTUFBTSxZQUFZLENBQUMseUJBQXlCLENBQUMsQ0FBQztNQUNyRSxNQUFNLEdBQUcsU0FBUyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUU7UUFDOUMsUUFBUSxLQUFLO1FBQ2IsTUFBTSxZQUFZO1FBQ2xCLFNBQVMsZUFBZTtRQUN4QixRQUFRO1FBQ1IsU0FBUyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDO09BQy9DLENBQUMsQ0FBQztNQUNILE1BQU0sR0FBRyxTQUFTLGtCQUFrQixDQUFDLFdBQVcsRUFBRTtRQUNoRCxNQUFNLGVBQWU7UUFDckIsTUFBTSxZQUFZO1FBQ2xCLFFBQVE7UUFDUixTQUFTLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUM7T0FDL0MsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLHVCQUF1QixpQkFBaUIsTUFBTTtNQUNsRCxNQUFNLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDbkQsQ0FBQztJQUNGLE1BQU0sd0JBQXdCLFVBQVU7TUFDdEMsUUFBUSxLQUFLLENBQUM7UUFDWjtVQUNFLE1BQU0sTUFBTTtVQUNaLE1BQU0sTUFBTTtVQUNaLE1BQU0sTUFBTTtTQUNiO1FBQ0Q7VUFDRSxNQUFNLFFBQVE7VUFDZCxNQUFNLFFBQVE7VUFDZCxNQUFNLFFBQVE7U0FDZjtRQUNEO1VBQ0UsTUFBTSxXQUFXO1VBQ2pCLE1BQU0sV0FBVztVQUNqQixNQUFNLFdBQVc7U0FDbEI7UUFDRDtVQUNFLE1BQU0sZUFBZTtVQUNyQixNQUFNLGVBQWU7VUFDckIsTUFBTSxnQkFBZ0I7U0FDdkI7UUFDRDtVQUNFLE1BQU0sV0FBVztVQUNqQixNQUFNLFdBQVc7VUFDakIsTUFBTSxXQUFXO1NBQ2xCO1FBQ0Q7VUFDRSxNQUFNLGFBQWE7VUFDbkIsTUFBTSxhQUFhO1VBQ25CLE1BQU0sYUFBYTtTQUNwQjtPQUNGLEVBQUUsZUFBZTtRQUNoQixNQUFNLEdBQUcsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFHLEtBQUssRUFBRTtVQUMzQyxTQUFTLEdBQUcsS0FBSztVQUNqQixNQUFNLEdBQUcsS0FBSztVQUNkLFNBQVMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO1VBQzdDLFVBQVUsb0JBQW9CLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO1NBQ2pELENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztNQUNILEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzNCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLE1BQU0sR0FBRyxTQUFTLGdCQUFnQixDQUFDLElBQUksRUFBRTtVQUN2QyxNQUFNLElBQUksWUFBWSxFQUFFO1VBQ3hCLFNBQVMsVUFBVSxHQUFHLENBQUM7VUFDdkIsU0FBUyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1VBQ3pDLFVBQVUsb0JBQW9CLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztTQUM3QyxDQUFDLENBQUM7T0FDSjtLQUNGLENBQUM7SUFDRixNQUFNLHlCQUF5QixVQUFVO01BQ3ZDLFFBQVEsS0FBSyxDQUFDO1FBQ1o7VUFDRSxNQUFNLE1BQU07VUFDWixNQUFNLE1BQU07VUFDWixRQUFRLE1BQU07VUFDZCxNQUFNLE1BQU07U0FDYjtRQUNEO1VBQ0UsTUFBTSxNQUFNO1VBQ1osTUFBTSxNQUFNO1VBQ1osUUFBUSxTQUFTO1VBQ2pCLE1BQU0sTUFBTTtTQUNiO1FBQ0Q7VUFDRSxNQUFNLFdBQVc7VUFDakIsTUFBTSxZQUFZO1VBQ2xCLFFBQVEsV0FBVztVQUNuQixNQUFNLFlBQVk7U0FDbkI7UUFDRDtVQUNFLE1BQU0sYUFBYTtVQUNuQixNQUFNLGNBQWM7VUFDcEIsUUFBUSxnQkFBZ0I7VUFDeEIsTUFBTSxjQUFjO1NBQ3JCO1FBQ0Q7VUFDRSxNQUFNLE9BQU87VUFDYixNQUFNLE9BQU87VUFDYixRQUFRLFVBQVU7VUFDbEIsTUFBTSxPQUFPO1NBQ2Q7T0FDRixFQUFFLE9BQU87UUFDUixNQUFNLEdBQUcsU0FBUyxVQUFVLENBQUMsR0FBRyxLQUFLLEVBQUU7VUFDckMsU0FBUyxHQUFHLEtBQUs7VUFDakIsTUFBTSxHQUFHLEtBQUs7VUFDZCxVQUFVLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQztTQUNsRCxDQUFDLENBQUM7T0FDSixDQUFDLENBQUM7TUFDSCxRQUFRLEtBQUssQ0FBQztRQUNaO1VBQ0UsTUFBTSxLQUFLO1VBQ1gsTUFBTSxLQUFLO1VBQ1gsUUFBUSxLQUFLO1VBQ2IsTUFBTSxLQUFLO1NBQ1o7UUFDRDtVQUNFLE1BQU0sT0FBTztVQUNiLE1BQU0sT0FBTztVQUNiLFFBQVEsT0FBTztVQUNmLE1BQU0sT0FBTztTQUNkO1FBQ0Q7VUFDRSxNQUFNLGNBQWM7VUFDcEIsTUFBTSxrQkFBa0I7VUFDeEIsUUFBUSxjQUFjO1VBQ3RCLE1BQU0sbUJBQW1CO1NBQzFCO1FBQ0Q7VUFDRSxNQUFNLFFBQVE7VUFDZCxNQUFNLFFBQVE7VUFDZCxRQUFRLFFBQVE7VUFDaEIsTUFBTSxRQUFRO1NBQ2Y7UUFDRDtVQUNFLE1BQU0sSUFBSTtVQUNWLE1BQU0saUJBQWlCO1VBQ3ZCLFFBQVEsc0JBQXNCO1VBQzlCLE1BQU0saUJBQWlCO1NBQ3hCO09BQ0YsRUFBRSxPQUFPO1FBQ1IsTUFBTSxHQUFHLFNBQVMsVUFBVSxDQUFDLEdBQUcsS0FBSyxFQUFFO1VBQ3JDLFNBQVMsR0FBRyxLQUFLO1VBQ2pCLE1BQU0sR0FBRyxLQUFLO1VBQ2QsU0FBUyxxQkFBcUIsQ0FBQyxNQUFNLENBQUM7VUFDdEMsVUFBVSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUM7U0FDbEQsQ0FBQyxDQUFDO09BQ0osQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sK0JBQStCLFVBQVU7TUFDN0MsUUFBUSxLQUFLLENBQUMsQ0FBQztVQUNYLE1BQU0sWUFBWTtVQUNsQixNQUFNLFlBQVk7VUFDbEIsUUFBUSxlQUFlO1VBQ3ZCLE1BQU0sT0FBTztTQUNkLENBQUMsRUFBRSxPQUFPO1FBQ1gsTUFBTSxHQUFHLFNBQVMsZ0JBQWdCLENBQUMsR0FBRyxLQUFLLEVBQUU7VUFDM0MsU0FBUyxHQUFHLEtBQUs7VUFDakIsTUFBTSxHQUFHLEtBQUs7VUFDZCxVQUFVLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQztVQUNqRCxTQUFTLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQztTQUM5QyxDQUFDLENBQUM7T0FDSixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsVUFBVTtNQUNsQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUM5QixzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUMvQiw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN0QyxDQUFDO0lBQ0YsTUFBTSxzQkFBc0IsVUFBVTtNQUNwQyxRQUFRLEtBQUssQ0FBQztRQUNaO1VBQ0UsTUFBTSxhQUFhO1VBQ25CLE1BQU0sY0FBYztVQUNwQixRQUFRLGdCQUFnQjtVQUN4QixNQUFNLGNBQWM7U0FDckI7UUFDRDtVQUNFLE1BQU0sTUFBTTtVQUNaLE1BQU0sTUFBTTtVQUNaLFFBQVEsTUFBTTtVQUNkLE1BQU0sTUFBTTtVQUNaLFVBQVUsUUFBUTtTQUNuQjtRQUNEO1VBQ0UsTUFBTSxXQUFXO1VBQ2pCLE1BQU0sWUFBWTtVQUNsQixRQUFRLFdBQVc7VUFDbkIsTUFBTSxZQUFZO1VBQ2xCLFVBQVUsUUFBUTtTQUNuQjtRQUNEO1VBQ0UsTUFBTSxPQUFPO1VBQ2IsTUFBTSxVQUFVO1VBQ2hCLFFBQVEsVUFBVTtVQUNsQixNQUFNLE9BQU87VUFDYixVQUFVLFFBQVE7U0FDbkI7T0FDRixFQUFFLFlBQVk7UUFDYixNQUFNLEdBQUcsU0FBUyxZQUFZLENBQUMsUUFBUSxLQUFLLEVBQUU7VUFDNUMsTUFBTSxRQUFRLEtBQUs7VUFDbkIsTUFBTSxRQUFRLEtBQUs7VUFDbkIsVUFBVSxRQUFRLFNBQVM7VUFDM0IsVUFBVSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxPQUFPLENBQUM7U0FDdkQsQ0FBQyxDQUFDO09BQ0osQ0FBQyxDQUFDO01BQ0gsUUFBUSxLQUFLLENBQUM7UUFDWjtVQUNFLE1BQU0sTUFBTTtVQUNaLE1BQU0sTUFBTTtVQUNaLFFBQVEsTUFBTTtVQUNkLE1BQU0sTUFBTTtVQUNaLFVBQVUsUUFBUTtTQUNuQjtRQUNEO1VBQ0UsTUFBTSxRQUFRO1VBQ2QsTUFBTSxRQUFRO1VBQ2QsUUFBUSxRQUFRO1VBQ2hCLE1BQU0sUUFBUTtVQUNkLFVBQVUsUUFBUTtTQUNuQjtRQUNEO1VBQ0UsTUFBTSxXQUFXO1VBQ2pCLE1BQU0sV0FBVztVQUNqQixRQUFRLFdBQVc7VUFDbkIsTUFBTSxXQUFXO1VBQ2pCLFVBQVUsUUFBUTtTQUNuQjtRQUNEO1VBQ0UsTUFBTSxlQUFlO1VBQ3JCLE1BQU0sZUFBZTtVQUNyQixRQUFRLGVBQWU7VUFDdkIsTUFBTSxnQkFBZ0I7U0FDdkI7UUFDRDtVQUNFLE1BQU0sV0FBVztVQUNqQixNQUFNLFdBQVc7VUFDakIsUUFBUSxXQUFXO1VBQ25CLE1BQU0sV0FBVztTQUNsQjtRQUNEO1VBQ0UsTUFBTSxhQUFhO1VBQ25CLE1BQU0sYUFBYTtVQUNuQixRQUFRLGFBQWE7VUFDckIsTUFBTSxhQUFhO1NBQ3BCO1FBQ0Q7VUFDRSxNQUFNLGNBQWM7VUFDcEIsTUFBTSxrQkFBa0I7VUFDeEIsUUFBUSxjQUFjO1VBQ3RCLE1BQU0sbUJBQW1CO1NBQzFCO1FBQ0Q7VUFDRSxNQUFNLEtBQUs7VUFDWCxNQUFNLEtBQUs7VUFDWCxRQUFRLEtBQUs7VUFDYixNQUFNLEtBQUs7VUFDWCxVQUFVLFFBQVE7U0FDbkI7UUFDRDtVQUNFLE1BQU0sT0FBTztVQUNiLE1BQU0sT0FBTztVQUNiLFFBQVEsT0FBTztVQUNmLE1BQU0sT0FBTztVQUNiLFVBQVUsUUFBUTtTQUNuQjtRQUNEO1VBQ0UsTUFBTSxJQUFJO1VBQ1YsTUFBTSxpQkFBaUI7VUFDdkIsUUFBUSxzQkFBc0I7VUFDOUIsTUFBTSxpQkFBaUI7U0FDeEI7T0FDRixFQUFFLFlBQVk7UUFDYixNQUFNLEdBQUcsU0FBUyxZQUFZLENBQUMsUUFBUSxLQUFLLEVBQUU7VUFDNUMsTUFBTSxRQUFRLEtBQUs7VUFDbkIsTUFBTSxRQUFRLEtBQUs7VUFDbkIsVUFBVSxRQUFRLFNBQVM7VUFDM0IsU0FBUyxxQkFBcUIsQ0FBQyxNQUFNLENBQUM7VUFDdEMsVUFBVSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxPQUFPLENBQUM7U0FDdkQsQ0FBQyxDQUFDO09BQ0osQ0FBQyxDQUFDO01BQ0gsTUFBTSxHQUFHLFNBQVMsWUFBWSxDQUFDLFlBQVksRUFBRTtRQUMzQyxNQUFNLE1BQU07UUFDWixNQUFNLFlBQVk7UUFDbEIsU0FBUyxxQkFBcUIsQ0FBQyxNQUFNLENBQUM7UUFDdEMsVUFBVSxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO09BQy9DLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGFBQWEsVUFBVTtNQUMzQixpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUMxQixtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUM3QixDQUFDOztJQUVGLE1BQU0sdUJBQXVCLGtCQUFrQixZQUFZLENBQUMsTUFBTSxFQUFFLG9EQUFvRCxFQUFFLE9BQU87TUFDL0gsR0FBRyxXQUFXLENBQUMsQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFLElBQUksTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ3pFLENBQUMsQ0FBQztJQUNILE1BQU0sc0JBQXNCLFVBQVU7TUFDcEMsTUFBTSxHQUFHLFNBQVMsWUFBWSxDQUFDLE1BQU0sRUFBRTtRQUNyQyxNQUFNLE1BQU07UUFDWixNQUFNLE1BQU07UUFDWixVQUFVLFFBQVE7UUFDbEIsU0FBUyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDO1FBQ2hELFVBQVUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztPQUM5QyxDQUFDLENBQUM7TUFDSCxNQUFNLEdBQUcsU0FBUyxZQUFZLENBQUMsTUFBTSxFQUFFO1FBQ3JDLE1BQU0sTUFBTTtRQUNaLE1BQU0sTUFBTTtRQUNaLFVBQVUsUUFBUTtRQUNsQixTQUFTLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUM7UUFDaEQsVUFBVSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO09BQzlDLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGtCQUFrQixVQUFVO01BQ2hDLE1BQU0sR0FBRyxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7UUFDbkMsU0FBUyxNQUFNO1FBQ2YsTUFBTSxNQUFNO1FBQ1osU0FBUyxLQUFLO1FBQ2QsU0FBUyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDO1FBQ2hELFVBQVUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztPQUM5QyxDQUFDLENBQUM7TUFDSCxNQUFNLEdBQUcsU0FBUyxVQUFVLENBQUMsTUFBTSxFQUFFO1FBQ25DLFNBQVMsTUFBTTtRQUNmLE1BQU0sTUFBTTtRQUNaLFNBQVMsS0FBSztRQUNkLFNBQVMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQztRQUNoRCxVQUFVLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7T0FDOUMsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sYUFBYSxVQUFVO01BQzNCLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQzVCLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN6QixDQUFDOztJQUVGLE1BQU0sd0JBQXdCLFVBQVUsWUFBWSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTztNQUMvRSxHQUFHLFVBQVUsQ0FBQyxNQUFNLFVBQVUsQ0FBQyxDQUFDO0tBQ2pDLENBQUMsQ0FBQztJQUNILE1BQU0sb0JBQW9CLFVBQVU7TUFDbEMsTUFBTSxHQUFHLFNBQVMsa0JBQWtCLENBQUMsV0FBVyxFQUFFO1FBQ2hELE1BQU0sYUFBYTtRQUNuQixTQUFTLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztRQUN0QyxVQUFVLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQztPQUM1RCxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSx3QkFBd0IsVUFBVTtNQUN0QyxNQUFNLEdBQUcsU0FBUyxVQUFVLENBQUMsV0FBVyxFQUFFO1FBQ3hDLFNBQVMsYUFBYTtRQUN0QixNQUFNLGFBQWE7UUFDbkIsVUFBVSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLENBQUM7T0FDNUQsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sYUFBYSxVQUFVO01BQzNCLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQzlCLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzNCLENBQUM7O0lBRUYsTUFBTSxVQUFVLHVCQUF1QjtNQUNyQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDbkIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ25CLFVBQVUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7TUFDOUIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ25CLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNuQixVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDbkIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ25CLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNuQixVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDcEIsQ0FBQzs7SUFFRixNQUFNLGtCQUFrQixVQUFVLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkYsTUFBTSxTQUFTLFFBQVEsVUFBVSxNQUFNLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFELE1BQU0sV0FBVyxVQUFVO01BQ3pCLE1BQU0saUJBQWlCLE1BQU0sUUFBUSxTQUFTLENBQUM7TUFDL0MsY0FBYyxDQUFDLDJCQUEyQixFQUFFO1FBQzFDLFdBQVcsUUFBUTtRQUNuQixTQUFTLEVBQUU7T0FDWixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsOEJBQThCLEVBQUU7UUFDN0MsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsS0FBSztPQUNmLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxhQUFhLEVBQUU7UUFDNUIsV0FBVyxTQUFTO1VBQ2xCLElBQUksS0FBSyxLQUFLLEtBQUssRUFBRTtZQUNuQixPQUFPO2NBQ0wsT0FBTyxFQUFFO2NBQ1QsT0FBTyxJQUFJO2FBQ1osQ0FBQztXQUNILE1BQU0sSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRTtZQUN4RCxPQUFPO2NBQ0wsT0FBTyxlQUFlLENBQUMsS0FBSyxDQUFDO2NBQzdCLE9BQU8sSUFBSTthQUNaLENBQUM7V0FDSCxNQUFNO1lBQ0wsT0FBTztjQUNMLE9BQU8sS0FBSztjQUNaLFNBQVMsNEJBQTRCO2FBQ3RDLENBQUM7V0FDSDtTQUNGO1FBQ0QsU0FBUywyRUFBMkU7T0FDckYsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sdUJBQXVCLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sMEJBQTBCLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sd0JBQXdCLFVBQVUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDO0lBQzVFLE1BQU0saUJBQWlCLFVBQVU7TUFDL0IsTUFBTSxlQUFlLE1BQU0sR0FBRyxTQUFTLE9BQU8sRUFBRSxhQUFhLENBQUM7TUFDOUQsTUFBTSxjQUFjLE1BQU0sUUFBUSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7TUFDdEQsSUFBSSxNQUFNLFFBQVEsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1FBQ3ZDLE9BQU8sV0FBVyxDQUFDO09BQ3BCLE1BQU07UUFDTCxPQUFPLFFBQVEsQ0FBQyxXQUFXLEVBQUUsUUFBUSxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7T0FDakU7S0FDRixDQUFDOztJQUVGLE1BQU0sS0FBSyxXQUFXO01BQ3BCLE1BQU0sV0FBVztNQUNqQixDQUFDO01BQ0QsQ0FBQztLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sWUFBWSxpQkFBaUI7TUFDakMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0tBQ25DLENBQUM7SUFDRixNQUFNLGlCQUFpQixLQUFLLENBQUMsS0FBSyxLQUFLLFdBQVcsSUFBSSxDQUFDLEtBQUssUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRixNQUFNLGFBQWEsS0FBSztNQUN0QixJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNyQixNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsT0FBTyxFQUFFLENBQUMsS0FBSyxNQUFNLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FBQztPQUNyQyxNQUFNO1FBQ0wsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUM3QjtLQUNGLENBQUM7SUFDRixNQUFNLGVBQWUsS0FBSztNQUN4QixJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNyQixNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsT0FBTyxFQUFFLENBQUMsS0FBSyxRQUFRLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQztPQUN6QyxNQUFNO1FBQ0wsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztPQUNqQztLQUNGLENBQUM7SUFDRixNQUFNLGdDQUFnQyxrQkFBa0I7TUFDdEQsTUFBTSxlQUFlLFFBQVEsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDbEQsT0FBTyxTQUFTLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7S0FDdkQsQ0FBQztJQUNGLE1BQU0saUJBQWlCLGVBQWU7TUFDcEMsSUFBSSxDQUFDLEtBQUssS0FBSyxhQUFhLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUFFO1FBQ3RELElBQUksTUFBTSxPQUFPLEVBQUU7VUFDakIsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEIsTUFBTTtVQUNMLE9BQU8sNkJBQTZCLENBQUMsTUFBTSx3QkFBd0IsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pGO09BQ0YsTUFBTTtRQUNMLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDbkM7S0FDRixDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsVUFBVTtNQUNuQyxPQUFPO1FBQ0wsTUFBTSxXQUFXO1FBQ2pCLE1BQU0sWUFBWSxRQUFRLENBQUMsTUFBTSxVQUFVLFFBQVEsRUFBRSxDQUFDO09BQ3ZELENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsV0FBVztNQUMvQixNQUFNLE1BQU07TUFDWixNQUFNLFFBQVEsS0FBSyxDQUFDLFlBQVksUUFBUSxDQUFDLE1BQU0sVUFBVSxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQ3JFLE1BQU0sWUFBWSxRQUFRLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQztLQUM3QyxDQUFDLENBQUM7SUFDSCxNQUFNLGtCQUFrQiwyQkFBMkI7TUFDakQsUUFBUSxVQUFVO1dBQ2IsTUFBTTtRQUNULE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1dBQzFCLE9BQU87UUFDVixPQUFPLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7V0FDOUIsV0FBVztRQUNkLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDbkM7S0FDRixDQUFDOztJQUVGLE1BQU0sZ0JBQWdCLDhEQUE4RDtNQUNsRixNQUFNLFFBQVEsU0FBUyxFQUFFLENBQUM7TUFDMUIsTUFBTSxhQUFhLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO01BQzFELEtBQUssQ0FBQyxLQUFLLEVBQUUsY0FBYyxpQkFBaUIsRUFBRSxTQUFTLEVBQUU7UUFDdkQsa0JBQWtCLEtBQUs7UUFDdkIsUUFBUSxRQUFRLEtBQUssRUFBRTtPQUN4QixDQUFDLElBQUksQ0FBQyxZQUFZO1FBQ2pCLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDbkIsVUFBVSxXQUFXLENBQUMsV0FBVyxFQUFFLEVBQUUsUUFBUSxVQUFVLEVBQUUsRUFBRTtVQUN6RCxNQUFNLEVBQUUsU0FBUyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7VUFDcEMsTUFBTSxRQUFRO1NBQ2YsQ0FBQyxDQUFDO09BQ0osQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLFVBQVU7TUFDZCxPQUFPLE1BQU07UUFDWCxPQUFPO1FBQ1AsV0FBVztRQUNYLFdBQVc7UUFDWCxXQUFXO1FBQ1gsV0FBVztRQUNYLE9BQU87UUFDUCxLQUFLO1FBQ0wsS0FBSztRQUNMLFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7T0FDVjtNQUNELE9BQU8sTUFBTTtRQUNYLE9BQU87UUFDUCxXQUFXO1FBQ1gsV0FBVztRQUNYLFdBQVc7UUFDWCxXQUFXO1FBQ1gsT0FBTztRQUNQLEtBQUs7UUFDTCxLQUFLO1FBQ0wsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztPQUNWO0tBQ0YsQ0FBQztJQUNGLE1BQU0sYUFBYSxFQUFFLENBQUM7SUFDdEIsTUFBTSxtQkFBbUI7TUFDdkIsY0FBYyxFQUFFO01BQ2hCLGFBQWEsRUFBRTtNQUNmLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQztNQUNsQyxZQUFZLENBQUMsc0JBQXNCLENBQUM7TUFDcEMsT0FBTyxDQUFDLGdCQUFnQixDQUFDO01BQ3pCLE1BQU0sQ0FBQyxlQUFlLENBQUM7TUFDdkIsUUFBUSxDQUFDLGlCQUFpQixDQUFDO01BQzNCLEtBQUssQ0FBQyxjQUFjLENBQUM7S0FDdEIsQ0FBQztJQUNGLE1BQU0seUJBQXlCLGVBQWU7TUFDNUMsTUFBTSxZQUFZLE1BQU0sVUFBVSxDQUFDO01BQ25DLElBQUksU0FBUyxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsT0FBTyxHQUFHLENBQUMsRUFBRTtRQUNuRCxPQUFPLEtBQUssQ0FBQztPQUNkLE1BQU07UUFDTCxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsTUFBTSxNQUFNLFNBQVMsT0FBTyxFQUFFLENBQUM7UUFDL0IsTUFBTSxhQUFhLFlBQVksQ0FBQyxNQUFNLE9BQU8sRUFBRSxFQUFFLFlBQVksU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0UsT0FBTyxVQUFVLE9BQU8sQ0FBQyxXQUFXLE9BQU8sS0FBSyxJQUFJLEtBQUssUUFBUSxJQUFJLE9BQU8sTUFBTSxJQUFJLEtBQUssUUFBUSxJQUFJLE9BQU8sSUFBSSxJQUFJLEtBQUssUUFBUSxJQUFJLE9BQU8sT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUM7T0FDeks7S0FDRixDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsVUFBVTtNQUNsQyxNQUFNLG9CQUFvQixNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7TUFDcEQsTUFBTSxpQkFBaUIsTUFBTTtRQUMzQixRQUFRLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxNQUFNO1VBQ3RDLE1BQU0sVUFBVSxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUM1QyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ1Asb0JBQW9CLEVBQUUsQ0FBQztPQUN4QixDQUFDO01BQ0YsTUFBTSxLQUFLLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDO01BQ3hDLE1BQU0sbUJBQW1CLEtBQUs7UUFDNUIsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNuQixDQUFDLHlCQUF5QixFQUFFLENBQUM7T0FDOUIsQ0FBQztNQUNGLE1BQU0sR0FBRyxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUMvQyxNQUFNLHNCQUFzQixNQUFNLG9CQUFvQixFQUFFLENBQUM7TUFDekQsTUFBTSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztNQUNwRCxNQUFNLHVCQUF1QixNQUFNO1FBQ2pDLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN2QyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO09BQzNDLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsMkJBQTJCO01BQy9DLE1BQU0sYUFBYSxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztNQUMxRCxNQUFNLGdCQUFnQixVQUFVLEtBQUssT0FBTyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7TUFDOUQsT0FBTztRQUNMLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLENBQUM7UUFDaEQsT0FBTztRQUNQLFdBQVc7VUFDVCxrQkFBa0IsVUFBVSxFQUFFO1VBQzlCLG1CQUFtQixZQUFZLEVBQUU7U0FDbEM7UUFDRCxHQUFHLFVBQVU7T0FDZCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sT0FBTyxnRkFBZ0Y7TUFDM0YsTUFBTSxhQUFhLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO01BQ3hELEtBQUssQ0FBQyxLQUFLLEVBQUUsY0FBYyxpQkFBaUIsRUFBRSxTQUFTLEVBQUU7UUFDdkQsa0JBQWtCLElBQUk7UUFDdEIsUUFBUSxRQUFRLEtBQUssRUFBRTtPQUN4QixDQUFDLElBQUksQ0FBQyxZQUFZO1FBQ2pCLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDbkIsTUFBTSxrQkFBa0Isb0JBQW9CLEdBQUcsZUFBZSxxQkFBcUIsR0FBRyxlQUFlLGNBQWMsQ0FBQztRQUNwSCxVQUFVLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxFQUFFLFFBQVEsVUFBVSxFQUFFLEVBQUU7VUFDbkUsTUFBTTtZQUNKLFNBQVMsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUMxQixlQUFlO1dBQ2hCO1VBQ0QsTUFBTSxRQUFRO1VBQ2QsTUFBTSxZQUFZO1NBQ25CLEVBQUUsTUFBTSxRQUFRLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxPQUFPLEVBQUUsVUFBVSxLQUFLLE1BQU0sR0FBRyxNQUFNLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pILE1BQU0sU0FBUyxDQUFDLHVCQUF1QixDQUFDLENBQUM7T0FDMUMsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sY0FBYyw4REFBOEQ7TUFDaEYsTUFBTSxZQUFZLFFBQVEsRUFBRSxDQUFDO01BQzdCLE1BQU0sUUFBUSxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUM7TUFDbkMsTUFBTSxVQUFVLFNBQVMsR0FBRyxRQUFRLEVBQUUsQ0FBQztNQUN2QyxNQUFNLFlBQVksU0FBUyxHQUFHLFVBQVUsRUFBRSxDQUFDO01BQzNDLE1BQU0sVUFBVSxTQUFTLFdBQVcsUUFBUSxFQUFFLENBQUM7TUFDL0MsTUFBTSw2QkFBNkIsTUFBTSxFQUFFLFNBQVMsSUFBSSxLQUFLLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDO01BQ3JGLE1BQU0sT0FBTyxNQUFNO1FBQ2pCLE1BQU0sUUFBUSxTQUFTLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDO09BQzFGLENBQUM7TUFDRixJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssS0FBSyxVQUFVLEtBQUssTUFBTSxFQUFFO1FBQy9DLE1BQU0sVUFBVSxNQUFNO1VBQ3BCLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1VBQzFCLElBQUksRUFBRSxDQUFDO1NBQ1IsQ0FBQztRQUNGLElBQUksc0JBQXNCLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFO1VBQ3JDLE9BQU8sRUFBRSxDQUFDO1NBQ1gsTUFBTTtVQUNMLE1BQU0sS0FBSyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1VBQ3hDLE1BQU0sS0FBSyxDQUFDLFVBQVUsRUFBRSxNQUFNLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDdkU7T0FDRixNQUFNO1FBQ0wsSUFBSSxFQUFFLENBQUM7T0FDUjtLQUNGLENBQUM7O0lBRUYsTUFBTSxjQUFjLFFBQVEsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxHQUFHLEdBQUcsSUFBSSxLQUFLLEtBQUssV0FBVyxDQUFDO0lBQ3RGLE1BQU0sWUFBWSxFQUFFLE1BQU0sV0FBVyxFQUFFLENBQUM7SUFDeEMsTUFBTSxrQkFBa0IsUUFBUTtNQUM5QixNQUFNLGlCQUFpQixTQUFTO1FBQzlCLE1BQU0sSUFBSSxLQUFLO1FBQ2YsTUFBTSxJQUFJLEtBQUs7UUFDZixTQUFTLElBQUksUUFBUTtRQUNyQixVQUFVLElBQUksU0FBUztPQUN4QixDQUFDLENBQUM7TUFDSCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNsQixPQUFPLElBQUksQ0FBQztPQUNiLE1BQU07UUFDTCxRQUFRLElBQUksS0FBSzthQUNaLFdBQVc7VUFDZCxPQUFPLFNBQVMsQ0FBQzthQUNkLFNBQVM7VUFDWixPQUFPO1lBQ0wsTUFBTSxnQkFBZ0I7WUFDdEIsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDO1lBQ3ZCLGlCQUFpQixNQUFNO2NBQ3JCLE1BQU0sUUFBUSxJQUFJLGdCQUFnQixFQUFFLENBQUM7Y0FDckMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ25CLE9BQU8sS0FBSyxDQUFDO2VBQ2QsTUFBTTtnQkFDTCxPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUM7ZUFDdEM7YUFDRjtXQUNGLENBQUM7O1VBRUYsTUFBTSxhQUFhLElBQUksQ0FBQztVQUN4QixPQUFPO1lBQ0wsTUFBTSxVQUFVO1lBQ2hCLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQztZQUM3QixVQUFVLEtBQUssQ0FBQyxVQUFVLFNBQVMsQ0FBQztXQUNyQyxDQUFDO1NBQ0g7T0FDRjtLQUNGLENBQUM7SUFDRixNQUFNLHNCQUFzQixvQkFBb0I7TUFDOUMsSUFBSSxVQUFVLE9BQU8sS0FBSyxDQUFDLEVBQUU7UUFDM0IsT0FBTyxFQUFFLENBQUM7T0FDWDtNQUNELE1BQU0sZUFBZSxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDbkUsTUFBTSxTQUFTLFlBQVksS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO01BQzdELE9BQU8sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztLQUNqRSxDQUFDO0lBQ0YsTUFBTSxzQkFBc0IsK0NBQStDO01BQ3pFLE1BQU0sV0FBVyxLQUFLLENBQUMsVUFBVSxFQUFFLGVBQWU7UUFDaEQsT0FBTyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVE7VUFDekQsTUFBTSxRQUFRLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1VBQzNDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNoRCxPQUFPLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQ25ELE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEdBQUcsQ0FBQyxFQUFFO1lBQzdDLE1BQU0sV0FBVyxLQUFLLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQy9DLE9BQU8sbUJBQW1CLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1dBQzNDLE1BQU07WUFDTCxPQUFPLEdBQUcsQ0FBQztXQUNaO1NBQ0YsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUN6QyxFQUFFLEVBQUUsQ0FBQyxDQUFDO01BQ1AsSUFBSSxRQUFRLE9BQU8sR0FBRyxDQUFDLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3JFLFFBQVEsSUFBSSxFQUFFLENBQUM7T0FDaEI7TUFDRCxPQUFPLFFBQVEsQ0FBQztLQUNqQixDQUFDO0lBQ0YsTUFBTSwyQkFBMkIsZUFBZSxDQUFDLFFBQVEsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNGLE1BQU0sZUFBZSxLQUFLLENBQUMsS0FBSyxLQUFLLFdBQVcsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sd0JBQXdCLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLE1BQU0sUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDM0ksTUFBTSxxQkFBcUIsZUFBZSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxVQUFVLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUN4SCxNQUFNLGdCQUFnQixlQUFlO01BQ25DLE1BQU0sV0FBVyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNqRCxNQUFNLGFBQWEscUJBQXFCLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLFdBQVcsR0FBRyxPQUFPLENBQUM7TUFDNUUsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDeEIsTUFBTSxTQUFTLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3QyxNQUFNLGlCQUFpQixPQUFPLENBQUMsWUFBWSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkUsT0FBTyxjQUFjLEdBQUcsTUFBTSxHQUFHLFVBQVUsQ0FBQztPQUM3QyxNQUFNO1FBQ0wsT0FBTyxVQUFVLENBQUM7T0FDbkI7S0FDRixDQUFDO0lBQ0YsTUFBTSxVQUFVLGlDQUFpQztNQUMvQyxNQUFNLFlBQVksUUFBUSxFQUFFLENBQUM7TUFDN0IsTUFBTSxVQUFVLFNBQVMsV0FBVyxRQUFRLENBQUM7TUFDN0MsTUFBTSxjQUFjLE9BQU8sQ0FBQyxVQUFVLE9BQU8sQ0FBQztRQUM1QyxLQUFLLEVBQUUsS0FBSyxLQUFLLEVBQUU7UUFDbkIsUUFBUTtRQUNSLFVBQVUsTUFBTSxNQUFNLE1BQU0sRUFBRTtRQUM5QixRQUFRLE1BQU0sU0FBUyxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7UUFDakQsUUFBUSxNQUFNLFNBQVMsb0JBQW9CLENBQUMsS0FBSyxDQUFDO1FBQ2xELDJCQUEyQixFQUFFO1FBQzdCLGtCQUFrQixRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxlQUFlO2NBQzdGLFVBQVUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2NBQ3ZCLE1BQU0sTUFBTSxFQUFFLENBQUM7YUFDaEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ1gsQ0FBQyxDQUFDLENBQUM7TUFDSixNQUFNLGtCQUFrQixNQUFNLFVBQVUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO01BQzNELE1BQU0sa0JBQWtCLEtBQUs7UUFDM0IsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsRUFBRTtVQUNoQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3BCO1FBQ0QsSUFBSSx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUkscUJBQXFCLENBQUMsTUFBTSxDQUFDLEVBQUU7VUFDeEUsT0FBTztTQUNSO1FBQ0QsTUFBTSxhQUFhLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUMsTUFBTSxZQUFZLE1BQU07VUFDdEIsTUFBTSxrQkFBa0Isa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1VBQ3RELE1BQU0sV0FBVyxNQUFNLEdBQUcsU0FBUyxPQUFPLEVBQUUsQ0FBQztVQUM3QyxNQUFNLGFBQWEsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1VBQzFDLE9BQU8sbUJBQW1CLENBQUMsUUFBUSxhQUFhLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1NBQ2hGLENBQUM7UUFDRixNQUFNLGdCQUFnQixPQUFPLEVBQUUsR0FBRyxXQUFXLEdBQUcsYUFBYSxDQUFDO1FBQzlELGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO09BQ3pFLENBQUM7TUFDRixNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTTtRQUN0QixNQUFNLGFBQWEseURBQXlELElBQUksT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDO1FBQ2xILE1BQU0sR0FBRyxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUN2QyxNQUFNLEdBQUcsQ0FBQyx1QkFBdUIsRUFBRSxlQUFlLENBQUMsQ0FBQztPQUNyRCxDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQztNQUN2QjtRQUNFLFFBQVE7VUFDTixHQUFHO1VBQ0gsR0FBRztTQUNKO09BQ0Y7TUFDRDtRQUNFLFVBQVU7VUFDUixHQUFHO1VBQ0gsR0FBRztTQUNKO09BQ0Y7TUFDRDtRQUNFLE9BQU87VUFDTCxHQUFHO1VBQ0gsR0FBRztTQUNKO09BQ0Y7S0FDRixDQUFDLENBQUM7SUFDSCxNQUFNLFdBQVcsVUFBVSxTQUFTLEtBQUssVUFBVSxDQUFDLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQy9FLE1BQU0sTUFBTSxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUN4RSxNQUFNLFlBQVksV0FBVyxVQUFVLEtBQUssQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLE1BQU0sVUFBVSwyQkFBMkIsS0FBSyxLQUFLLENBQUMsU0FBUyxDQUFDO01BQzlELEdBQUcsQ0FBQyxNQUFNLENBQUM7TUFDWCxRQUFRLENBQUMsTUFBTSxDQUFDO0tBQ2pCLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sYUFBYSwyQkFBMkIsS0FBSyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVILE1BQU0sV0FBVywyQkFBMkIsS0FBSyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDO01BQzdHLEdBQUcsQ0FBQyxNQUFNLENBQUM7TUFDWCxRQUFRLENBQUMsTUFBTSxDQUFDO0tBQ2pCLENBQUMsQ0FBQyxDQUFDO0lBQ0osTUFBTSxjQUFjLG9EQUFvRDtNQUN0RSxNQUFNLEtBQUssVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDOUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQzlDLE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUM7S0FDckYsQ0FBQztJQUNGLE1BQU0sWUFBWSxvREFBb0Q7TUFDcEUsTUFBTSxLQUFLLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQzlDLE1BQU0sS0FBSyxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztNQUM5QyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztNQUN6QyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUN0QyxPQUFPLGFBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDakMsQ0FBQztJQUNGLE1BQU0sV0FBVywyQkFBMkI7TUFDMUMsTUFBTSxZQUFZLEtBQUssS0FBSyxDQUFDLFdBQVc7UUFDdEMsVUFBVSxRQUFRLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDbkMsTUFBTSxRQUFRLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQzdCLEtBQUssUUFBUSxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztPQUM3QixDQUFDLEVBQUUsV0FBVztRQUNiLFVBQVUsUUFBUSxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQ25DLE1BQU0sUUFBUSxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQztRQUMzQyxLQUFLLFFBQVEsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7T0FDMUMsQ0FBQyxFQUFFLFdBQVc7UUFDYixVQUFVLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNoQyxNQUFNLFFBQVEsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDN0IsS0FBSyxRQUFRLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO09BQzdCLENBQUMsQ0FBQyxDQUFDO01BQ0osT0FBTztRQUNMLE9BQU8sUUFBUSxLQUFLLEVBQUU7UUFDdEIsUUFBUSxRQUFRLEtBQUssRUFBRTtRQUN2QixHQUFHLFNBQVM7T0FDYixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sWUFBWSwyQkFBMkIsS0FBSyxLQUFLLENBQUMsVUFBVSxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsVUFBVSxRQUFRLENBQUMsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsVUFBVSxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN2TCxNQUFNLFNBQVMsaURBQWlEO01BQzlELE1BQU0sWUFBWSxpQkFBaUIsZ0JBQWdCO1FBQ2pELE1BQU0sV0FBVyxPQUFPLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN4RCxPQUFPLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQztPQUNoRSxDQUFDO01BQ0YsT0FBTyxZQUFZLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQ25ILENBQUM7SUFDRixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUM7SUFDMUIsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDO0lBQzlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQzs7SUFFeEIsTUFBTSxpQkFBaUIsbUJBQW1CO01BQ3hDLE1BQU0sUUFBUSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ25DLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ3ZELENBQUM7SUFDRixNQUFNLE1BQU0sMEJBQTBCO01BQ3BDLE1BQU0sVUFBVSxTQUFTLFFBQVEsQ0FBQztNQUNsQyxNQUFNLElBQUksY0FBYyxDQUFDLE9BQU8sRUFBRSxTQUFTLFNBQVMsQ0FBQyxDQUFDO01BQ3RELE1BQU0sSUFBSSxjQUFjLENBQUMsT0FBTyxFQUFFLFNBQVMsUUFBUSxDQUFDLENBQUM7TUFDckQsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLEdBQUcsUUFBUSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3BGLENBQUM7SUFDRixNQUFNLE1BQU0sOEJBQThCO01BQ3hDLE1BQU0sVUFBVSxTQUFTLFFBQVEsQ0FBQztNQUNsQyxLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsU0FBUyxFQUFFLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO01BQ25ELEtBQUssQ0FBQyxPQUFPLEVBQUUsU0FBUyxRQUFRLEVBQUUsRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7S0FDbEQsQ0FBQztJQUNGLE1BQU0sUUFBUSwwQkFBMEI7TUFDdEMsTUFBTSxVQUFVLFNBQVMsUUFBUSxDQUFDO01BQ2xDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxTQUFTLENBQUMsQ0FBQztNQUN0QyxRQUFRLENBQUMsT0FBTyxFQUFFLFNBQVMsUUFBUSxDQUFDLENBQUM7S0FDdEMsQ0FBQzs7SUFFRixNQUFNLFlBQVksdUNBQXVDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssRUFBRSxXQUFXLEtBQUssQ0FBQyxPQUFPLEtBQUssR0FBRyxLQUFLLEtBQUssRUFBRSxPQUFPLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDMUssTUFBTSxhQUFhLHVEQUF1RDtNQUN4RSxNQUFNLFdBQVcsU0FBUyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQzlELE1BQU0sT0FBTyxRQUFRLFNBQVMsR0FBRyxlQUFlLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDMUosTUFBTSxhQUFhLE9BQU8sQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3JELEdBQUcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO01BQ3JDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTztRQUN0QixPQUFPLEtBQUssQ0FBQyxVQUFVLEtBQUssRUFBRSxVQUFVLElBQUksQ0FBQztRQUM3QyxPQUFPLFFBQVEsS0FBSyxFQUFFO09BQ3ZCLENBQUMsRUFBRSxZQUFZO1FBQ2QsT0FBTyxPQUFPLE9BQU87UUFDckIsT0FBTyxPQUFPLE1BQU07T0FDckIsQ0FBQyxDQUFDLENBQUM7S0FDTCxDQUFDO0lBQ0YsTUFBTSxXQUFXLHlCQUF5QjtNQUN4QyxLQUFLLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQzVCLENBQUM7SUFDRixNQUFNLG1CQUFtQixxQ0FBcUMsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRO01BQ25GLE1BQU0sU0FBUyxJQUFJLE9BQU8sQ0FBQztNQUMzQixNQUFNLFVBQVUsV0FBVyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxNQUFNLEtBQUssRUFBRSxJQUFJLE1BQU0sSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztNQUMvRixPQUFPLE9BQU8sR0FBRyxRQUFRLEtBQUssQ0FBQztRQUM3QixRQUFRLE1BQU0sQ0FBQyxJQUFJLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztRQUNyRCxPQUFPLElBQUksTUFBTTtPQUNsQixDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztLQUN0QixDQUFDLENBQUM7SUFDSCxNQUFNLGtCQUFrQixtREFBbUQ7TUFDekUsTUFBTSxRQUFRLFFBQVEsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQ2hELE1BQU0sWUFBWSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztNQUNwRSxPQUFPLFNBQVMsUUFBUSxDQUFDLE1BQU07UUFDN0IsTUFBTSxXQUFXLEtBQUssQ0FBQyxLQUFLLEVBQUUsZUFBZTtVQUMzQyxNQUFNLFNBQVMsSUFBSSxPQUFPLENBQUM7VUFDM0IsTUFBTSxTQUFTLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksTUFBTSxLQUFLLEVBQUUsSUFBSSxNQUFNLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7VUFDNUYsT0FBTyxHQUFHLE9BQU8sS0FBSyxDQUFDLE9BQU87WUFDNUIsUUFBUSxRQUFRLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDN0IsTUFBTSxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUM7V0FDMUIsQ0FBQyxFQUFFLGNBQWM7WUFDaEIsTUFBTSxVQUFVLENBQUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDO1lBQy9DLE1BQU0sVUFBVSxDQUFDLFVBQVUsS0FBSyxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUN2RCxJQUFJLE9BQU8sSUFBSSxPQUFPLEVBQUU7Y0FDdEIsT0FBTztnQkFDTCxRQUFRLFFBQVEsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFDN0IsTUFBTSxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUM7ZUFDMUIsQ0FBQzthQUNILE1BQU07Y0FDTCxPQUFPLEdBQUcsQ0FBQzthQUNaO1dBQ0YsQ0FBQyxDQUFDO1NBQ0osRUFBRTtVQUNELFFBQVEsUUFBUSxLQUFLLEVBQUU7VUFDdkIsTUFBTSxRQUFRLEtBQUssRUFBRTtTQUN0QixDQUFDLENBQUM7UUFDSCxPQUFPLFFBQVEsS0FBSyxJQUFJLENBQUMsU0FBUztVQUNoQyxRQUFRLE1BQU0sQ0FBQyxJQUFJLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztVQUNyRCxPQUFPLElBQUksTUFBTTtTQUNsQixDQUFDLENBQUMsQ0FBQztPQUNMLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFdBQVcsbURBQW1EO01BQ2xFLE1BQU0sUUFBUSxRQUFRLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUNoRCxPQUFPLGdCQUFnQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQzFELENBQUM7SUFDRixNQUFNLFdBQVcsMkJBQTJCO01BQzFDLE9BQU8sTUFBTSxDQUFDLElBQUksT0FBTyxFQUFFLElBQUksT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7TUFDdkQsT0FBTyxJQUFJLE1BQU07S0FDbEIsQ0FBQyxDQUFDOztJQUVILE1BQU0sU0FBUyx5Q0FBeUM7TUFDdEQsTUFBTSxTQUFTLFVBQVUsVUFBVSxDQUFDLFNBQVMsUUFBUSxDQUFDLENBQUM7TUFDdkQsSUFBSSxVQUFVLGlCQUFpQixFQUFFO1FBQy9CLE1BQU0sTUFBTSxPQUFPLENBQUMsU0FBUyxRQUFRLENBQUMsQ0FBQztRQUN2QyxNQUFNLFNBQVMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sU0FBUyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakMsTUFBTSxVQUFVLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLE1BQU0sU0FBUyxRQUFRLENBQUMsT0FBTyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZELFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7T0FDNUI7S0FDRixDQUFDOztJQUVGLElBQUksNEJBQTRCLE1BQU0sT0FBTyxDQUFDO1FBQzFDLFdBQVcsSUFBSTtRQUNmLFFBQVEsTUFBTTtLQUNqQixDQUFDLENBQUM7O0lBRUgsTUFBTSxtQkFBbUIsc0JBQXNCLENBQUM7SUFDaEQsTUFBTSxjQUFjLFdBQVc7TUFDN0IsTUFBTSxDQUFDLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVE7UUFDdkQsTUFBTSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFLFVBQVUsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMvRyxRQUFRLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7T0FDbEMsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sZUFBZSxXQUFXO01BQzlCLE1BQU0sQ0FBQyxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRO1FBQ3ZELE1BQU0sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVO1VBQ3JDLEtBQUssQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDdkMsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLE9BQU8sUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7T0FDM0QsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sWUFBWSwyQkFBMkI7TUFDM0MsWUFBWSxVQUFVLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQzNDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUN2QixDQUFDO0lBQ0YsTUFBTSxVQUFVLFdBQVc7TUFDekIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ3JCLE9BQU8sVUFBVSxFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUM1QyxDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsNENBQTRDLFNBQVMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxTQUFTLE9BQU8sQ0FBQztNQUMvRyxLQUFLO1FBQ0gsUUFBUTtVQUNOLFFBQVEsS0FBSztVQUNiLE9BQU8sS0FBSztVQUNaLFNBQVMsTUFBTTtVQUNmLFVBQVUsTUFBTTtVQUNoQixZQUFZLE9BQU87VUFDbkIsV0FBVyxrQkFBa0I7U0FDOUI7UUFDRCxTQUFTLENBQUMsWUFBWSxDQUFDO09BQ3hCO01BQ0QsUUFBUSxhQUFhO0tBQ3RCLENBQUMsQ0FBQyxDQUFDOztJQUVKLElBQUksYUFBYSxXQUFXLENBQUMsT0FBTyxFQUFFO01BQ3BDLFVBQVUsQ0FBQyxlQUFlLENBQUM7TUFDM0IsU0FBUyxDQUFDLFVBQVUsQ0FBQztNQUNyQixVQUFVLENBQUMsVUFBVSxDQUFDO01BQ3RCLFVBQVUsQ0FBQyxTQUFTLENBQUM7TUFDckIsU0FBUyxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUM7TUFDOUIsU0FBUyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUM7S0FDN0IsQ0FBQyxDQUFDOztJQUVILE1BQU0sV0FBVztNQUNmLFNBQVMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDO01BQzVCLFVBQVUsQ0FBQyxjQUFjLENBQUM7TUFDMUIsU0FBUyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUM7TUFDaEMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7TUFDekIsU0FBUyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQztNQUNuQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQztNQUN6QixpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDO01BQ25DLFVBQVU7S0FDWCxDQUFDOztJQUVGLE1BQU0sa0JBQWtCLFVBQVUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFLHlCQUF5QjtNQUMxSSxNQUFNLEtBQUssUUFBUSxLQUFLLE9BQU8sR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO01BQ2pELE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ2xELENBQUMsV0FBVyxDQUFDLE1BQU07TUFDbEIsTUFBTSxXQUFXLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNwQyxPQUFPLFFBQVEsQ0FBQyxRQUFRLEtBQUssRUFBRSxRQUFRLElBQUksQ0FBQyxDQUFDO0tBQzlDLENBQUMsQ0FBQztJQUNILE1BQU0sY0FBYyxrREFBa0Q7TUFDcEUsTUFBTSxTQUFTLFNBQVMsT0FBTyxDQUFDO01BQ2hDLE1BQU0sZ0JBQWdCLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3pELE1BQU0sT0FBTyxLQUFLLENBQUMsYUFBYSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxNQUFNLEdBQUcsU0FBUyxNQUFNLENBQUMsQ0FBQztNQUM1RixNQUFNLE9BQU8sS0FBSyxDQUFDLGFBQWEsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sT0FBTyxHQUFHLFNBQVMsT0FBTyxDQUFDLENBQUM7TUFDN0YsTUFBTSxZQUFZLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDdkMsT0FBTyxNQUFNLEtBQUssQ0FBQyxNQUFNO1FBQ3ZCLE1BQU0sV0FBVyxRQUFRLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNyRCxPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssRUFBRSxRQUFRLElBQUksQ0FBQyxDQUFDO09BQzVDLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU07UUFDOUIsTUFBTSxVQUFVLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25ELE9BQU8sS0FBSyxDQUFDLE9BQU8sS0FBSyxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUM7T0FDekMsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sZUFBZSx5RUFBeUU7TUFDNUYsTUFBTSxXQUFXLFFBQVEsS0FBSyxDQUFDLE1BQU07UUFDbkMsTUFBTSxhQUFhLFNBQVMsQ0FBQyxZQUFZLEVBQUUsS0FBSyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUNsRSxNQUFNLGFBQWEsT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdkQsT0FBTyxLQUFLLENBQUMsVUFBVSxLQUFLLEVBQUUsVUFBVSxJQUFJLENBQUMsQ0FBQztPQUMvQyxFQUFFLFlBQVk7UUFDYixNQUFNLFdBQVcsVUFBVSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdEYsUUFBUSxNQUFNLEtBQUssQ0FBQyxTQUFTO1VBQzNCLFFBQVEsU0FBUyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNyQyxDQUFDLENBQUM7UUFDSCxPQUFPLFFBQVEsTUFBTSxDQUFDO09BQ3ZCLENBQUMsQ0FBQztNQUNILE9BQU8sV0FBVyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztLQUNwRSxDQUFDO0lBQ0YsTUFBTSxTQUFTLDZDQUE2QztNQUMxRCxNQUFNLFNBQVMsVUFBVSxVQUFVLENBQUMsU0FBUyxRQUFRLENBQUMsQ0FBQztNQUN2RCxJQUFJLFVBQVUsaUJBQWlCLEVBQUU7UUFDL0IsTUFBTSxNQUFNLE9BQU8sQ0FBQyxTQUFTLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sU0FBUyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsTUFBTSxTQUFTLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQyxNQUFNLGVBQWUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLE1BQU0sV0FBVyxZQUFZLENBQUMsU0FBUyxFQUFFLFVBQVUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMzRyxNQUFNLFNBQVMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEQsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztPQUM1QjtNQUNELFVBQVUsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDN0MsQ0FBQzs7SUFFRixNQUFNLGdCQUFnQix1QkFBdUI7TUFDM0MsUUFBUSxVQUFVLFVBQVUsRUFBRTtNQUM5QixRQUFRLFVBQVUsQ0FBQyxJQUFJLFFBQVEsQ0FBQztNQUNoQyxPQUFPLFVBQVUsQ0FBQyxJQUFJLFFBQVEsQ0FBQztLQUNoQyxDQUFDLENBQUM7SUFDSCxNQUFNLE9BQU8sdURBQXVEO01BQ2xFLE1BQU0sUUFBUSxTQUFTLE9BQU8sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDaEQsTUFBTSxnQkFBZ0IsU0FBUyxhQUFhLEVBQUUsV0FBVyxDQUFDLE1BQU0sYUFBYSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO01BQ3RHLEtBQUssS0FBSyxDQUFDLE9BQU87UUFDaEIsTUFBTSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO09BQ25ELENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLE9BQU8sK0NBQStDO01BQzFELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ3RCLFVBQVUsTUFBTSxLQUFLLENBQUMsWUFBWTtRQUNoQyxRQUFRLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO09BQy9CLENBQUMsQ0FBQztNQUNILE1BQU0sU0FBUyxVQUFVLFVBQVUsQ0FBQyxTQUFTLFFBQVEsQ0FBQyxDQUFDO01BQ3ZELFNBQVMsTUFBTSxFQUFFLENBQUM7TUFDbEIsVUFBVSxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ3RDLENBQUM7SUFDRixNQUFNLFdBQVcsVUFBVSwyQkFBMkI7TUFDcEQsTUFBTSxtQkFBbUIsUUFBUTtRQUMvQixTQUFTLGFBQWEsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7T0FDekQsQ0FBQztNQUNGLE9BQU8sUUFBUSxDQUFDO1FBQ2QsS0FBSyxDQUFDLFlBQVksRUFBRSxFQUFFLFFBQVE7VUFDNUIsU0FBUyxhQUFhLEVBQUUsS0FBSyxDQUFDLE1BQU0sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUM3RCxDQUFDO1FBQ0YsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQztPQUNuRCxDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sU0FBUyxXQUFXLFFBQVEsQ0FBQztNQUNqQyxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsT0FBTyxVQUFVLENBQUM7TUFDckMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sS0FBSyxDQUFDO01BQzlCLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSwwQkFBMEI7UUFDM0MsT0FBTyxLQUFLLENBQUMsY0FBYyxNQUFNLENBQUMsQ0FBQztPQUNwQyxDQUFDO01BQ0YsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLE9BQU8sVUFBVSxDQUFDO0tBQ3JDLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFlBQVksU0FBUyxRQUFRLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sYUFBYSxhQUFhLGFBQWEsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEtBQUssRUFBRSxFQUFFLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDOztJQUVwRixJQUFJLHlCQUF5QixNQUFNLE9BQU8sQ0FBQztRQUN2QyxXQUFXLElBQUk7UUFDZixTQUFTLFNBQVM7UUFDbEIsVUFBVSxVQUFVO0tBQ3ZCLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFdBQVcsNkNBQTZDLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLCtCQUErQjtRQUM3RyxNQUFNLE1BQU0sY0FBYyxNQUFNLElBQUksQ0FBQztRQUNyQyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUMsRUFBRTtVQUNwQixPQUFPO1NBQ1I7UUFDRCxjQUFjLEtBQUssRUFBRSxDQUFDO1FBQ3RCLE1BQU0sU0FBUyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sWUFBWSxlQUFlLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sVUFBVTtVQUNkLE1BQU0sTUFBTTtVQUNaLFdBQVcsU0FBUyxTQUFTO1VBQzdCLFdBQVcsTUFBTTtVQUNqQixNQUFNLFNBQVM7WUFDYixTQUFTLE9BQU8sRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7V0FDMUQ7U0FDRixDQUFDO1FBQ0YsTUFBTSxVQUFVLGVBQWUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxhQUFhLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDckYsTUFBTSxRQUFRLE1BQU07VUFDbEIsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7VUFDNUIsU0FBUyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUMvQixDQUFDO1FBQ0YsS0FBSyxFQUFFLENBQUM7T0FDVCxDQUFDLENBQUMsQ0FBQztJQUNOLE1BQU0sV0FBVztNQUNmLEdBQUcsUUFBUTtNQUNYLFFBQVEsQ0FBQyxTQUFTLEVBQUUsRUFBRSxVQUFVLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO0tBQ3RELENBQUM7O0lBRUYsTUFBTSxTQUFTLFdBQVcsUUFBUSxDQUFDO01BQ2pDLEtBQUssQ0FBQyxVQUFVLEVBQUUsRUFBRSxPQUFPLFVBQVUsQ0FBQztNQUN0QyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxLQUFLLENBQUM7TUFDL0IsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLE9BQU8sS0FBSyxDQUFDO01BQ2xDLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSwwQkFBMEI7UUFDM0MsT0FBTyxLQUFLLENBQUMsY0FBYyxNQUFNLENBQUMsQ0FBQztPQUNwQyxDQUFDO0tBQ0gsQ0FBQyxDQUFDOztJQUVILE1BQU0sY0FBYyxXQUFXO01BQzdCLE1BQU0sUUFBUSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDekIsT0FBTyxRQUFRLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxRQUFRLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO0tBQ25FLENBQUM7SUFDRixNQUFNLFVBQVUsU0FBUztNQUN2QixNQUFNLE1BQU0sS0FBSyxJQUFJLENBQUM7TUFDdEIsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDO01BQzVCLE9BQU8sT0FBTyxPQUFPLEtBQUssQ0FBQyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO0tBQ3RFLENBQUM7SUFDRixNQUFNLFdBQVcsYUFBYSxhQUFhLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxLQUFLLEVBQUUsRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQzs7SUFFbEYsSUFBSSx5QkFBeUIsTUFBTSxPQUFPLENBQUM7UUFDdkMsV0FBVyxJQUFJO1FBQ2YsU0FBUyxPQUFPO1FBQ2hCLFVBQVUsUUFBUTtLQUNyQixDQUFDLENBQUM7O0lBRUgsTUFBTSxXQUFXLDZDQUE2QztNQUM1RCxNQUFNLG1CQUFtQixPQUFPLEVBQUUsQ0FBQztNQUNuQyxNQUFNLGVBQWUsYUFBYTtRQUNoQyxJQUFJLENBQUMsU0FBUyxFQUFFLGdCQUFnQixJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDL0QsZ0JBQWdCLE1BQU0sRUFBRSxDQUFDO09BQzFCLENBQUM7TUFDRixPQUFPO1FBQ0wsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFLCtCQUErQjtVQUNqRCxjQUFjLEtBQUssRUFBRSxDQUFDO1VBQ3RCLE1BQU0sT0FBTyxNQUFNLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztVQUMzQyxNQUFNLFVBQVU7WUFDZCxNQUFNLElBQUk7WUFDVixXQUFXLElBQUk7WUFDZixXQUFXLElBQUk7WUFDZixNQUFNLFNBQVM7Y0FDYixJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQzFEO1dBQ0YsQ0FBQztVQUNGLE1BQU0sVUFBVSxlQUFlLENBQUMsU0FBUyxFQUFFLFVBQVUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1VBQ3JGLGdCQUFnQixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7VUFDOUIsTUFBTSxRQUFRLE1BQU07WUFDbEIsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUIsU0FBUyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztXQUMvQixDQUFDO1VBQ0YsS0FBSyxFQUFFLENBQUM7U0FDVCxDQUFDO1FBQ0YsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLCtCQUErQjtVQUNoRCxjQUFjLEtBQUssRUFBRSxDQUFDO1VBQ3RCLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsY0FBYyxNQUFNLENBQUMsQ0FBQztTQUN6RSxDQUFDO1FBQ0YsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLCtCQUErQjtVQUMvQyxjQUFjLEtBQUssRUFBRSxDQUFDO1VBQ3RCLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN6QixDQUFDO1FBQ0YsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLFlBQVksQ0FBQztPQUNuQyxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sV0FBVztNQUNmLEdBQUcsUUFBUTtNQUNYLFFBQVEsQ0FBQyxTQUFTLEVBQUUsRUFBRSxVQUFVLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO0tBQ3RELENBQUM7O0lBRUYsTUFBTSxXQUFXLDZDQUE2QztNQUM1RCxHQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixDQUFDO01BQ3BELEdBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLENBQUM7S0FDckQsQ0FBQztJQUNGLE1BQU0sV0FBVztNQUNmLEdBQUcsUUFBUTtNQUNYLFFBQVEsQ0FBQyxTQUFTLEVBQUUsRUFBRSxVQUFVLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO0tBQ3RELENBQUM7O0lBRUYsTUFBTSxRQUFRLFFBQVEsQ0FBQztJQUN2QixNQUFNLFFBQVEsUUFBUSxDQUFDO0lBQ3ZCLE1BQU0sZUFBZSxRQUFRLENBQUM7O0lBRTlCLElBQUksZ0NBQWdDLE1BQU0sT0FBTyxDQUFDO1FBQzlDLFdBQVcsSUFBSTtRQUNmLE9BQU8sS0FBSztRQUNaLE9BQU8sS0FBSztRQUNaLGNBQWMsWUFBWTtLQUM3QixDQUFDLENBQUM7O0lBRUgsTUFBTSxTQUFTLE1BQU07TUFDbkIsSUFBSSxXQUFXLFFBQVEsS0FBSyxFQUFFLENBQUM7TUFDL0IsSUFBSSxZQUFZLFFBQVEsS0FBSyxFQUFFLENBQUM7TUFDaEMsTUFBTSxRQUFRLE1BQU07UUFDbEIsV0FBVyxRQUFRLEtBQUssRUFBRSxDQUFDO1FBQzNCLFlBQVksUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUM3QixDQUFDO01BQ0YsTUFBTSxpQkFBaUIsY0FBYztRQUNuQyxNQUFNLFNBQVMsUUFBUSxJQUFJLENBQUMsT0FBTyxJQUFJLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRCxXQUFXLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLE9BQU8sTUFBTSxDQUFDO09BQ2YsQ0FBQztNQUNGLE1BQU0sU0FBUyxxQkFBcUIsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLGNBQWMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUN6RyxNQUFNLGVBQWUsUUFBUTtRQUMzQixZQUFZLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ2pDLENBQUM7TUFDRixNQUFNLGVBQWUsTUFBTSxTQUFTLENBQUM7TUFDckMsTUFBTSxZQUFZLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUNqQyxPQUFPLElBQUksQ0FBQztRQUNWLFNBQVM7UUFDVCxLQUFLO1FBQ0wsTUFBTTtRQUNOLFlBQVk7UUFDWixZQUFZO09BQ2IsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixJQUFJLHlCQUF5QixNQUFNLE9BQU8sQ0FBQztRQUN2QyxXQUFXLElBQUk7UUFDZixNQUFNLE1BQU07S0FDZixDQUFDLENBQUM7O0lBRUgsTUFBTSxXQUFXLFdBQVcsQ0FBQztNQUMzQixXQUFXLE1BQU07TUFDakIsVUFBVSxnQkFBZ0I7TUFDMUIsTUFBTSxVQUFVO01BQ2hCLFFBQVE7UUFDTixRQUFRLDJCQUEyQjtVQUNqQyxNQUFNLFVBQVUsVUFBVSxRQUFRLENBQUM7VUFDbkMsT0FBTyxPQUFPLFNBQVMsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDaEQ7T0FDRjtNQUNELE9BQU87UUFDTCxNQUFNLFlBQVk7VUFDaEIsUUFBUSxPQUFPLE9BQU87VUFDdEIsT0FBTyxPQUFPLE1BQU07VUFDcEIsUUFBUSxPQUFPLE9BQU87VUFDdEIsT0FBTyxRQUFRLEtBQUssQ0FBQyxPQUFPLE1BQU0sQ0FBQztTQUNwQyxDQUFDO09BQ0g7TUFDRCxPQUFPLFNBQVM7TUFDaEIsTUFBTSxZQUFZO0tBQ25CLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFlBQVksRUFBRSxDQUFDO0lBQ3JCLE1BQU0sYUFBYSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sV0FBVywwQ0FBMEMsV0FBVyxLQUFLLENBQUMsTUFBTSxRQUFRLEtBQUssQ0FBQztNQUM5RixRQUFRLFFBQVEsQ0FBQyxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7TUFDaEQsT0FBTyxhQUFhLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQztNQUNuQyxRQUFRLFFBQVEsQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNwRCxPQUFPLEVBQUUsRUFBRSxFQUFFO0tBQ2QsQ0FBQyxFQUFFLGtCQUFrQjtNQUNwQixNQUFNLGFBQWEsQ0FBQyxHQUFHLFVBQVUsQ0FBQztNQUNsQyxNQUFNLFlBQVksQ0FBQyxHQUFHLFVBQVUsQ0FBQztNQUNqQyxNQUFNLGNBQWMsU0FBUyxDQUFDO01BQzlCLE1BQU0sZUFBZSxTQUFTLENBQUM7TUFDL0IsTUFBTSxPQUFPLGNBQWMsUUFBUSxJQUFJLHNCQUFzQixFQUFFLENBQUM7TUFDaEUsT0FBTyxRQUFRLEtBQUssQ0FBQztRQUNuQixRQUFRLFFBQVEsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDO1FBQ3ZDLE9BQU8sYUFBYSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUM7UUFDL0MsUUFBUSxRQUFRLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN2RixPQUFPLEVBQUUsRUFBRSxFQUFFO09BQ2QsQ0FBQyxDQUFDO0tBQ0osQ0FBQyxDQUFDO0lBQ0gsTUFBTSxpQkFBaUIsbUNBQW1DO01BQ3hELE1BQU0sYUFBYSxpQkFBaUIsT0FBTyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDbkYsT0FBTztRQUNMLGFBQWE7UUFDYixVQUFVLGdCQUFnQjtRQUMxQixTQUFTLGVBQWU7UUFDeEIsVUFBVSxzQkFBc0I7VUFDOUIsTUFBTSxLQUFLLEtBQUssR0FBRyxDQUFDO1VBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtZQUMvQixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNiLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztXQUNkO1NBQ0Y7UUFDRCxVQUFVLElBQUk7T0FDZixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0saUJBQWlCLFNBQVMsTUFBTSxDQUFDLE1BQU0sT0FBTyxDQUFDO01BQ25ELEtBQUs7UUFDSCxLQUFLLEtBQUs7UUFDVixTQUFTLENBQUMsY0FBYyxDQUFDO09BQzFCO01BQ0Qsa0JBQWtCLFFBQVEsQ0FBQztRQUN6QixRQUFRLE9BQU8sQ0FBQztVQUNkLE1BQU0sY0FBYztVQUNwQixjQUFjLFNBQVM7VUFDdkIsS0FBSztTQUNOLENBQUM7UUFDRixXQUFXLE9BQU8sQ0FBQyxFQUFFLENBQUM7T0FDdkIsQ0FBQztNQUNGLFlBQVk7UUFDVixXQUFXO1VBQ1QsVUFBVTtVQUNWLHNCQUFzQjtTQUN2QjtRQUNELFlBQVk7VUFDVixVQUFVO1VBQ1Ysc0JBQXNCO1NBQ3ZCO09BQ0Y7S0FDRixDQUFDLENBQUMsQ0FBQztJQUNKLE1BQU0sVUFBVSxrQkFBa0I7TUFDaEMsTUFBTSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUN2QixNQUFNLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQ3ZCLE1BQU0sWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDOUIsTUFBTSxZQUFZLE9BQU8sRUFBRSxDQUFDO01BQzVCLE1BQU0sYUFBYSxPQUFPLEVBQUUsQ0FBQztNQUM3QixNQUFNLGlCQUFpQixNQUFNO1FBQzNCLE1BQU0sTUFBTSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0IsT0FBTyxRQUFRLENBQUMsVUFBVSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7T0FDbkYsQ0FBQztNQUNGLE1BQU0sa0JBQWtCLE1BQU0sS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsTUFBTSxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUMzRSxNQUFNLHFCQUFxQixNQUFNO1FBQy9CLE1BQU0sTUFBTSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0IsT0FBTyxRQUFRLENBQUMsY0FBYyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7T0FDaEcsQ0FBQztNQUNGLE1BQU0sc0JBQXNCLE1BQU0sS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ25GLE1BQU0sZUFBZSxjQUFjLENBQUMsZUFBZSxFQUFFLFNBQVMsRUFBRSxTQUFTO1FBQ3ZFLFVBQVUsSUFBSSxFQUFFLEtBQUssQ0FBQyxVQUFVO1VBQzlCLE1BQU0sU0FBUyxDQUFDLHFCQUFxQixFQUFFO1lBQ3JDLEtBQUs7WUFDTCxNQUFNO1dBQ1AsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO09BQ0osQ0FBQyxDQUFDO01BQ0gsTUFBTSxtQkFBbUIsY0FBYyxDQUFDLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxVQUFVO1FBQ2pGLFNBQVMsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTO1VBQzVCLE1BQU0sU0FBUyxDQUFDLHFCQUFxQixFQUFFO1lBQ3JDLEtBQUs7WUFDTCxNQUFNO1dBQ1AsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO09BQ0osQ0FBQyxDQUFDO01BQ0gsTUFBTSxhQUFhLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztNQUNoRCxNQUFNLGlCQUFpQixjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztNQUN4RCxNQUFNLFVBQVUsT0FBTyxDQUFDLFVBQVUsT0FBTyxFQUFFLENBQUMsQ0FBQztNQUM3QyxNQUFNLGNBQWMsT0FBTyxDQUFDLGNBQWMsT0FBTyxFQUFFLENBQUMsQ0FBQztNQUNyRCxNQUFNLG1CQUFtQixzQ0FBc0M7UUFDN0QsTUFBTSxXQUFXLElBQUksSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1FBQ2xELFFBQVEsQ0FBQyxRQUFRLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN0QyxNQUFNLGlCQUFpQixXQUFXLENBQUMsWUFBWSxRQUFRLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDO1FBQzNGLE1BQU0sZ0JBQWdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxNQUFNLGdCQUFnQixPQUFPLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3hELElBQUksYUFBYSxJQUFJLGFBQWEsRUFBRTtVQUNsQyxLQUFLLENBQUMsUUFBUSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzVDO09BQ0YsQ0FBQztNQUNGLE1BQU0sU0FBUyx3Q0FBd0M7UUFDckQsTUFBTSxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxRQUFRLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEMsTUFBTSxVQUFVLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxNQUFNLFVBQVUsMEJBQTBCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUM7UUFDckUsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7T0FDcEQsQ0FBQztNQUNGLE1BQU0sY0FBYyxRQUFRLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztNQUN6RSxNQUFNLGtCQUFrQixNQUFNLFNBQVMsSUFBSSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztNQUNoRSxNQUFNLGtCQUFrQixRQUFRLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQ3hGLE1BQU0sc0JBQXNCLE1BQU0sVUFBVSxJQUFJLEVBQUUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO01BQ3pFLElBQUksUUFBUSxFQUFFLFdBQVcsUUFBUSxFQUFFLEVBQUU7UUFDbkMsTUFBTSxHQUFHLENBQUMsc0JBQXNCLEVBQUUsS0FBSztVQUNyQyxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsRUFBRTtZQUNwQixNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDMUIsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDckI7VUFDRCxTQUFTLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1VBQ3ZCLFVBQVUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7VUFDekIsQ0FBQyxXQUFXLEtBQUssQ0FBQyxjQUFjO1lBQzlCLEtBQUssSUFBSSxDQUFDLFVBQVUsY0FBYyxDQUFDLENBQUM7WUFDcEMsS0FBSyxJQUFJLENBQUMsVUFBVSxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3ZDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JCLGVBQWUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1dBQzNCLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQztRQUNILE1BQU0sR0FBRyxDQUFDLHlDQUF5QyxFQUFFLE1BQU07VUFDekQsZUFBZSxFQUFFLENBQUM7VUFDbEIsbUJBQW1CLEVBQUUsQ0FBQztTQUN2QixDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxNQUFNO1VBQ3JDLElBQUksU0FBUyxJQUFJLEVBQUUsRUFBRTtZQUNuQixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3BCLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1dBQ3RCO1VBQ0QsU0FBUyxNQUFNLEVBQUUsQ0FBQztVQUNsQixVQUFVLE1BQU0sRUFBRSxDQUFDO1NBQ3BCLENBQUMsQ0FBQztPQUNKO0tBQ0YsQ0FBQzs7SUFFRixJQUFJLE9BQU8sdXNDQUF1c0MsQ0FBQzs7SUFFbnRDLE1BQU0sV0FBVyxPQUFPLEdBQUcsU0FBUyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxlQUFlLENBQUMsS0FBSyxVQUFVLENBQUM7SUFDMUksTUFBTSxvQkFBb0IsMENBQTBDO01BQ2xFLElBQUksRUFBRSxDQUFDO01BQ1AsTUFBTSxZQUFZLENBQUMsS0FBSyxRQUFRLFVBQVUsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUM7TUFDdEYsTUFBTSxnQkFBZ0IsMEJBQTBCLE1BQU0sT0FBTyxDQUFDO1FBQzVELEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMsMEJBQTBCLENBQUM7VUFDckMsWUFBWTtZQUNWLGNBQWMsS0FBSztZQUNuQixjQUFjLEtBQUssR0FBRyxDQUFDO1dBQ3hCO1NBQ0Y7UUFDRCxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLFFBQVEsUUFBUTtVQUNkLE1BQU0sTUFBTSxFQUFFLENBQUM7VUFDZixNQUFNLFVBQVUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1VBQ2pDLE1BQU0sWUFBWSxFQUFFLENBQUM7U0FDdEI7UUFDRCxrQkFBa0IsUUFBUSxDQUFDO1VBQ3pCLGdCQUFnQixPQUFPLENBQUMsa0JBQWtCLFdBQVcsQ0FBQztVQUN0RCxlQUFlLEVBQUU7U0FDbEIsQ0FBQztPQUNILENBQUMsQ0FBQztNQUNILE1BQU0sZ0JBQWdCLE9BQU87UUFDM0IsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyw2QkFBNkIsQ0FBQztVQUN4QyxZQUFZLEVBQUUsZUFBZSxJQUFJLEVBQUU7U0FDcEM7UUFDRCxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ3pDLENBQUMsQ0FBQztNQUNILE1BQU0saUJBQWlCLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxzQkFBc0I7UUFDL0QsTUFBTSxVQUFVLGFBQWEsQ0FBQyxJQUFJLEtBQUssRUFBRSxJQUFJLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5RCxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7VUFDZixPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUM5QixNQUFNO1VBQ0wsT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUNoQixhQUFhLEVBQUU7WUFDZixPQUFPO1dBQ1IsQ0FBQyxDQUFDO1NBQ0o7T0FDRixFQUFFLEVBQUUsQ0FBQyxDQUFDO01BQ1AsTUFBTSxhQUFhLFdBQVc7UUFDNUIsTUFBTSxVQUFVLEVBQUUsQ0FBQztRQUNuQixJQUFJLElBQUksT0FBTyxPQUFPLENBQUM7UUFDdkIsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7VUFDZCxNQUFNLFNBQVMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQzFCLElBQUksTUFBTSxTQUFTLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzlDLE1BQU0sT0FBTyxlQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxJQUFJLG1CQUFtQixFQUFFLEVBQUU7Y0FDOUIsT0FBTyxLQUFLLENBQUM7Z0JBQ1gsTUFBTSxJQUFJLEtBQUs7Z0JBQ2YsU0FBUyxNQUFNO2VBQ2hCLENBQUMsQ0FBQzthQUNKO1lBQ0QsSUFBSSxJQUFJLHFCQUFxQixFQUFFLEVBQUU7Y0FDL0IsTUFBTTthQUNQO1dBQ0Y7U0FDRjtRQUNELE9BQU8sT0FBTyxDQUFDO09BQ2hCLENBQUM7TUFDRixPQUFPO1FBQ0wsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQztVQUNoQyxZQUFZLEVBQUUsTUFBTSxZQUFZLEVBQUU7U0FDbkM7UUFDRCxZQUFZLFFBQVEsQ0FBQztVQUNuQixNQUFNLE9BQU8sQ0FBQztZQUNaLE1BQU0sTUFBTTtZQUNaLFVBQVUsa0JBQWtCO1dBQzdCLENBQUM7VUFDRixTQUFTLE9BQU8sQ0FBQyxFQUFFLFVBQVUsa0JBQWtCLFdBQVcsRUFBRSxDQUFDO1VBQzdELGVBQWUsRUFBRTtVQUNqQixXQUFXLE9BQU8sQ0FBQyxFQUFFLENBQUM7VUFDdEIsU0FBUyxPQUFPLENBQUMsRUFBRSxDQUFDO1VBQ3BCLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLGFBQWEsQ0FBQyxjQUFjO2NBQ3JELE1BQU0sVUFBVSxJQUFJLENBQUMsU0FBUyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztjQUMzRixNQUFNLEdBQUcsQ0FBQyxZQUFZLEVBQUUsS0FBSztnQkFDM0IsTUFBTSxVQUFVLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN0QyxNQUFNLGNBQWMsT0FBTyxPQUFPLEdBQUcsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3RFLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztlQUNsQyxDQUFDLENBQUM7YUFDSixDQUFDLENBQUMsQ0FBQztTQUNQLENBQUM7UUFDRixZQUFZLEVBQUU7T0FDZixDQUFDO0tBQ0gsQ0FBQzs7SUFFRixJQUFJLFdBQVcsQ0FBQztJQUNoQixDQUFDLHVCQUF1QjtNQUN0QixXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztNQUM5QyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztNQUM5QyxXQUFXLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztLQUN2RCxDQUFDLFdBQVcsS0FBSyxjQUFjLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDdEMsTUFBTSxnQkFBZ0IsK0RBQStEO01BQ25GLE1BQU0sYUFBYSxFQUFFLFFBQVEsY0FBYyxDQUFDLGNBQWMsR0FBRyxNQUFNLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDbkksSUFBSSxVQUFVLEtBQUssV0FBVyxLQUFLLEVBQUU7UUFDbkMsVUFBVSxNQUFNLEdBQUcsY0FBYyxDQUFDLGFBQWEsR0FBRyxNQUFNLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO09BQ3RIO01BQ0QsT0FBTyxVQUFVLENBQUM7S0FDbkIsQ0FBQztJQUNGLE1BQU0sU0FBUyxnQ0FBZ0M7TUFDN0MsTUFBTSxZQUFZLFlBQVksUUFBUSxDQUFDLE1BQU0sYUFBYSxFQUFFLENBQUMsQ0FBQztNQUM5RCxNQUFNLGFBQWEsYUFBYSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztNQUNqRyxJQUFJLENBQUMsVUFBVSxFQUFFLGNBQWM7UUFDN0IsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7VUFDakIsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDckM7T0FDRixDQUFDLENBQUM7TUFDSCxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUMxQixDQUFDOztJQUVGLE1BQU0sZ0JBQWdCLFVBQVU7TUFDOUIsTUFBTSxTQUFTLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNqQyxJQUFJLE1BQU0sS0FBSyxLQUFLLEVBQUU7UUFDcEIsT0FBTyxXQUFXLEtBQUssQ0FBQztPQUN6QixNQUFNLElBQUksTUFBTSxLQUFLLE1BQU0sRUFBRTtRQUM1QixPQUFPLFdBQVcsS0FBSyxDQUFDO09BQ3pCLE1BQU07UUFDTCxPQUFPLFdBQVcsU0FBUyxDQUFDO09BQzdCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLDhCQUE4QjtNQUNwRCxNQUFNLFFBQVEsRUFBRSxDQUFDO01BQ2pCLE1BQU0sUUFBUSxhQUFhLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7TUFDbEQsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7TUFDbEMsT0FBTyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM1QixDQUFDO0lBQ0YsTUFBTSxzQkFBc0IsZ0NBQWdDO01BQzFELE1BQU0sYUFBYSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDekMsSUFBSSxVQUFVLEtBQUssV0FBVyxLQUFLLEVBQUU7UUFDbkMsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCO01BQ0QsTUFBTSxjQUFjLFVBQVUsS0FBSyxXQUFXLEtBQUssR0FBRyw0Q0FBNEMsR0FBRyx3REFBd0QsQ0FBQztNQUM5SixPQUFPLFFBQVEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUU7UUFDN0MsS0FBSyxLQUFLO1FBQ1YsU0FBUyxDQUFDLDhCQUE4QixDQUFDO1FBQ3pDLFlBQVk7VUFDVixTQUFTLGtCQUFrQixVQUFVLENBQUMsUUFBUSxDQUFDO1VBQy9DLGNBQWMsa0JBQWtCLFVBQVUsQ0FBQyxXQUFXLENBQUM7U0FDeEQ7UUFDRCxZQUFZO1VBQ1YsUUFBUSxPQUFPLENBQUM7WUFDZCxNQUFNLE9BQU87WUFDYixrQkFBa0IsS0FBSztZQUN2QixRQUFRLDJCQUEyQixNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUM7WUFDcEUsY0FBYyxhQUFhO1dBQzVCLENBQUM7VUFDRixNQUFNLE9BQU8sQ0FBQztZQUNaLE1BQU0sU0FBUztZQUNmLFFBQVEsTUFBTSxlQUFlLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEQsU0FBUyxNQUFNLGVBQWUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEQsTUFBTSxNQUFNLGVBQWUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0RCxRQUFRLE1BQU0sZUFBZSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztXQUN4RCxDQUFDO1VBQ0YsV0FBVyxPQUFPLENBQUMsRUFBRSxDQUFDO1VBQ3RCLFFBQVEsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUNwQjtPQUNGLEVBQUUsa0JBQWtCLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDL0IsQ0FBQzs7SUFFRixNQUFNLGtCQUFrQixnQ0FBZ0M7TUFDdEQsTUFBTSxtQkFBbUIsdUJBQXVCLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsVUFBVSxDQUFDO1VBQ3JHLE1BQU0sR0FBRyxJQUFJO1VBQ2IsS0FBSyxDQUFDLElBQUksQ0FBQztTQUNaLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLE9BQU8sTUFBTSxPQUFPLENBQUM7UUFDbkIsS0FBSztVQUNILEtBQUssUUFBUTtVQUNiLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQztTQUN0QztRQUNELFlBQVksRUFBRTtRQUNkLGtCQUFrQixRQUFRLENBQUM7VUFDekIsZ0JBQWdCLE9BQU8sQ0FBQyxrQkFBa0IsV0FBVyxDQUFDO1VBQ3RELGVBQWUsRUFBRTtVQUNqQixXQUFXLE9BQU8sQ0FBQyxFQUFFLENBQUM7VUFDdEIsU0FBUyxPQUFPLENBQUMsRUFBRSxDQUFDO1VBQ3BCLFlBQVksT0FBTyxDQUFDO1lBQ2xCLE9BQU87Y0FDTCxNQUFNLFFBQVE7Y0FDZCxjQUFjO2dCQUNaLE1BQU0sT0FBTztnQkFDYixPQUFPO2tCQUNMLE9BQU8sQ0FBQztrQkFDUixZQUFZLENBQUM7aUJBQ2Q7ZUFDRjthQUNGO1dBQ0YsQ0FBQztVQUNGLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRTtZQUN6QixjQUFjLENBQUMsUUFBUTtjQUNyQixNQUFNLGFBQWEsWUFBWSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7Y0FDL0MsTUFBTSxVQUFVLFVBQVUsS0FBSyxLQUFLLE9BQU8sR0FBRyxZQUFZLEdBQUcsT0FBTyxDQUFDO2NBQ3JFLFlBQVksU0FBUyxDQUFDLElBQUksRUFBRTtnQkFDMUIsTUFBTSxPQUFPO2dCQUNiLE9BQU8sVUFBVSxNQUFNO2VBQ3hCLENBQUMsQ0FBQztjQUNILGdCQUFnQixDQUFDLElBQUksRUFBRSxVQUFVLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQzthQUNuRCxDQUFDO1lBQ0YsYUFBYSxDQUFDLFFBQVE7Y0FDcEIsTUFBTSxHQUFHLENBQUMsaUJBQWlCLEVBQUUsS0FBSztnQkFDaEMsTUFBTSxNQUFNLEdBQUcsWUFBWSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNDLFlBQVksU0FBUyxDQUFDLElBQUksRUFBRTtrQkFDMUIsSUFBSTtrQkFDSixPQUFPLENBQUMsVUFBVTtpQkFDbkIsQ0FBQyxDQUFDO2dCQUNILGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztlQUMzQyxDQUFDLENBQUM7YUFDSixDQUFDO1dBQ0gsQ0FBQztTQUNILENBQUM7UUFDRixZQUFZO1VBQ1YsQ0FBQyxTQUFTLEVBQUUsR0FBRztZQUNiLFdBQVc7WUFDWCxzQkFBc0I7WUFDdEIsa0JBQWtCO1dBQ25CO1NBQ0Y7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sa0JBQWtCLGdDQUFnQztNQUN0RCxNQUFNLGlCQUFpQixNQUFNO1FBQzNCLE9BQU87VUFDTCxLQUFLO1lBQ0gsS0FBSyxNQUFNO1lBQ1gsU0FBUyxDQUFDLHlCQUF5QixDQUFDO1dBQ3JDO1VBQ0QsWUFBWSxDQUFDO2NBQ1QsS0FBSztnQkFDSCxLQUFLLEdBQUc7Z0JBQ1IsWUFBWTtrQkFDVixRQUFRLDRIQUE0SDtrQkFDcEksT0FBTyxVQUFVO2tCQUNqQixVQUFVLFFBQVE7a0JBQ2xCLGNBQWMsUUFBUSxVQUFVLENBQUM7b0JBQy9CLGdCQUFnQjtvQkFDaEIsTUFBTTttQkFDUCxDQUFDO2lCQUNIO2dCQUNELFdBQVcsSUFBSSxLQUFLLEVBQUU7ZUFDdkI7Y0FDRCxZQUFZLFFBQVEsQ0FBQyxDQUFDLFFBQVEsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDNUMsQ0FBQztTQUNMLENBQUM7T0FDSCxDQUFDO01BQ0YsTUFBTSwwQkFBMEIsTUFBTTtRQUNwQyxNQUFNLGVBQWUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLE1BQU0sT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDbEMsT0FBTztVQUNMLEtBQUs7WUFDSCxLQUFLLEtBQUs7WUFDVixTQUFTLENBQUMsMEJBQTBCLENBQUM7V0FDdEM7VUFDRCxZQUFZLENBQUMsTUFBTSxDQUFDLFFBQVEsVUFBVSxDQUFDO2NBQ25DLElBQUk7Y0FDSixZQUFZO2FBQ2IsQ0FBQyxDQUFDLENBQUM7U0FDUCxDQUFDO09BQ0gsQ0FBQztNQUNGLE1BQU0sdUJBQXVCLE1BQU07UUFDakMsTUFBTSxhQUFhLEVBQUUsQ0FBQztRQUN0QixJQUFJLE1BQU0sVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1VBQ2pDLFVBQVUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUU7VUFDdkIsVUFBVSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztTQUNuQztRQUNELE9BQU87VUFDTCxLQUFLO1lBQ0gsS0FBSyxLQUFLO1lBQ1YsU0FBUyxDQUFDLGdDQUFnQyxDQUFDO1dBQzVDO1VBQ0QsVUFBVTtTQUNYLENBQUM7T0FDSCxDQUFDO01BQ0YsTUFBTSxvQkFBb0IsTUFBTTtRQUM5QixNQUFNLGFBQWEsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sbUJBQW1CLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RELE1BQU0sMEJBQTBCLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RCxNQUFNLDZCQUE2QixXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEYsTUFBTSwwQkFBMEIsTUFBTTtVQUNwQyxNQUFNLFlBQVksMkNBQTJDLENBQUM7VUFDOUQsTUFBTSxVQUFVLHlDQUF5QyxDQUFDO1VBQzFELE1BQU0sY0FBYyw2Q0FBNkMsQ0FBQztVQUNsRSxJQUFJLGdCQUFnQixFQUFFO1lBQ3BCLE1BQU0sb0JBQW9CLHNDQUFzQyxDQUFDO1lBQ2pFLElBQUksQ0FBQywwQkFBMEIsSUFBSSxDQUFDLHVCQUF1QixFQUFFO2NBQzNELE9BQU87Z0JBQ0wsaUJBQWlCO2dCQUNqQixXQUFXO2VBQ1osQ0FBQzthQUNIO1lBQ0QsSUFBSSwwQkFBMEIsSUFBSSxDQUFDLHVCQUF1QixFQUFFO2NBQzFELE9BQU87Z0JBQ0wsaUJBQWlCO2dCQUNqQixPQUFPO2VBQ1IsQ0FBQzthQUNIO1lBQ0QsT0FBTztjQUNMLGlCQUFpQjtjQUNqQixTQUFTO2FBQ1YsQ0FBQztXQUNIO1VBQ0QsT0FBTyxDQUFDLDBCQUEwQixJQUFJLENBQUMsdUJBQXVCLEdBQUcsT0FBTyxHQUFHLFNBQVMsQ0FBQyxDQUFDO1NBQ3ZGLENBQUM7UUFDRixJQUFJLHVCQUF1QixFQUFFO1VBQzNCLFVBQVUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1NBQ3BFO1FBQ0QsSUFBSSxnQkFBZ0IsRUFBRTtVQUNwQixVQUFVLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUM7U0FDNUM7UUFDRCxJQUFJLDBCQUEwQixFQUFFO1VBQzlCLFVBQVUsS0FBSyxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztTQUN6QztRQUNELElBQUksVUFBVSxPQUFPLEdBQUcsQ0FBQyxFQUFFO1VBQ3pCLE9BQU8sQ0FBQztjQUNKLEtBQUs7Z0JBQ0gsS0FBSyxLQUFLO2dCQUNWLFNBQVM7a0JBQ1AsK0JBQStCO2tCQUMvQixHQUFHLHVCQUF1QixFQUFFO2lCQUM3QjtlQUNGO2NBQ0QsVUFBVTthQUNYLENBQUMsQ0FBQztTQUNOO1FBQ0QsT0FBTyxFQUFFLENBQUM7T0FDWCxDQUFDO01BQ0YsTUFBTSxnQkFBZ0IsTUFBTTtRQUMxQixNQUFNLGFBQWEsaUJBQWlCLEVBQUUsQ0FBQztRQUN2QyxNQUFNLGdCQUFnQixtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUN0RSxPQUFPLFVBQVUsT0FBTyxDQUFDLGFBQWEsUUFBUSxFQUFFLENBQUMsQ0FBQztPQUNuRCxDQUFDO01BQ0YsT0FBTztRQUNMLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMsZUFBZSxDQUFDO1NBQzNCO1FBQ0QsWUFBWSxhQUFhLEVBQUU7T0FDNUIsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxvQkFBb0Isc0JBQXNCLFNBQVMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0lBQ3BILE1BQU0sVUFBVSwyQkFBMkI7TUFDekMsTUFBTSxXQUFXLE1BQU0sT0FBTyxDQUFDO01BQy9CLE1BQU0sT0FBTyxRQUFRLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztNQUN4QyxNQUFNLFNBQVMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxHQUFHLFlBQVksR0FBRyxZQUFZLENBQUM7TUFDckUsTUFBTSxhQUFhLGdCQUFnQixFQUFFLENBQUM7TUFDdEMsTUFBTSxpQkFBaUIsT0FBTyxFQUFFLENBQUM7TUFDakMsTUFBTSx1QkFBdUIsT0FBTyxFQUFFLENBQUM7TUFDdkMsTUFBTSxzQkFBc0IsT0FBTyxFQUFFLENBQUM7TUFDdEMsTUFBTSxXQUFXLFFBQVEsRUFBRSxDQUFDO01BQzVCLE1BQU0sVUFBVSxRQUFRLFdBQVcsUUFBUSxFQUFFLENBQUM7TUFDOUMsTUFBTSxxQkFBcUIsb0JBQW9CLENBQUM7TUFDaEQsTUFBTSxnQkFBZ0IsT0FBTyxHQUFHLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLENBQUM7TUFDMUQsTUFBTSxrQkFBa0IsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDeEQsTUFBTSxjQUFjLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUMzQyxNQUFNLGVBQWUsTUFBTSxDQUFDO1FBQzFCLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMsZUFBZSxDQUFDO1NBQzNCO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxxQkFBcUIsTUFBTSxDQUFDO1FBQ2hDLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMsc0JBQXNCLENBQUM7U0FDbEM7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLGFBQWEsTUFBTSxVQUFVLE9BQU8sSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxjQUFjLFVBQVUsQ0FBQyxDQUFDO01BQzdHLE1BQU0sdUJBQXVCLE1BQU0sTUFBTSxXQUFXLENBQUMsVUFBVSxTQUFTLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLDBCQUEwQixDQUFDLENBQUM7TUFDL0gsTUFBTSxzQkFBc0IsTUFBTSxNQUFNLFdBQVcsQ0FBQyxVQUFVLFFBQVEsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsa0NBQWtDLENBQUMsQ0FBQztNQUNySSxNQUFNLGdCQUFnQixVQUFVLG9CQUFvQixDQUFDLFlBQVksRUFBRSxZQUFZLE9BQU8sQ0FBQyxDQUFDO01BQ3hGLE1BQU0sc0JBQXNCLFVBQVUsb0JBQW9CLENBQUMsbUJBQW1CLEVBQUUsa0JBQWtCLE9BQU8sQ0FBQyxDQUFDO01BQzNHLE1BQU0sY0FBYyxVQUFVLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxjQUFjLFdBQVcsQ0FBQyxDQUFDO01BQ3pGLE1BQU0sZUFBZSxVQUFVLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxjQUFjLFlBQVksQ0FBQyxDQUFDO01BQzVGLE1BQU0sYUFBYSxNQUFNLENBQUM7UUFDeEIsT0FBTyxtQkFBbUI7UUFDMUIsUUFBUSxvQkFBb0I7T0FDN0IsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixDQUFDLENBQUM7TUFDL0MsTUFBTSxpQkFBaUIsTUFBTTtRQUMzQixNQUFNLHdCQUF3QixFQUFFLFlBQVksRUFBRSxDQUFDLFNBQVMsR0FBRyxlQUFlLEdBQUcsY0FBYyxZQUFZLEdBQUcsY0FBYyxZQUFZLEVBQUUsRUFBRSxDQUFDO1FBQ3pJLE1BQU0sY0FBYyxjQUFjLE1BQU0sUUFBUSxDQUFDO1VBQy9DLEtBQUs7WUFDSCxLQUFLLEtBQUs7WUFDVixTQUFTLENBQUMsYUFBYSxDQUFDO1dBQ3pCO1VBQ0QsV0FBVyxVQUFVLE1BQU07VUFDM0IsVUFBVSxNQUFNO1lBQ2QsTUFBTSxNQUFNLEVBQUUsQ0FBQztXQUNoQjtTQUNGLENBQUMsQ0FBQztRQUNILE1BQU0sY0FBYyxjQUFjLE1BQU0sUUFBUSxDQUFDO1VBQy9DLEtBQUs7WUFDSCxLQUFLLEtBQUs7WUFDVixTQUFTLENBQUMsYUFBYSxDQUFDO1dBQ3pCO1VBQ0QsU0FBUyxVQUFVLE1BQU0sT0FBTyxRQUFRO1VBQ3hDLFdBQVcsVUFBVSxNQUFNLE9BQU8sVUFBVTtVQUM1QyxVQUFVLE1BQU07WUFDZCxNQUFNLE1BQU0sRUFBRSxDQUFDO1dBQ2hCO1VBQ0Qsa0JBQWtCLFNBQVM7WUFDekIsdUJBQXVCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1dBQ3hDO1VBQ0QsTUFBTSxXQUFXO1VBQ2pCLFdBQVc7VUFDWCxZQUFZLE1BQU0sVUFBVSxFQUFFLFNBQVMsQ0FBQywrQkFBK0IsQ0FBQztVQUN4RSxHQUFHLHFCQUFxQjtTQUN6QixDQUFDLENBQUM7UUFDSCxNQUFNLHNCQUFzQixjQUFjLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1VBQ25FLEtBQUs7WUFDSCxLQUFLLEtBQUs7WUFDVixTQUFTLENBQUMsc0JBQXNCLENBQUM7V0FDbEM7VUFDRCxXQUFXLFVBQVUsTUFBTSxPQUFPLFVBQVU7VUFDNUMsVUFBVSxNQUFNO1lBQ2QsTUFBTSxNQUFNLEVBQUUsQ0FBQztXQUNoQjtVQUNELE1BQU0sV0FBVztTQUNsQixDQUFDLENBQUM7UUFDSCxNQUFNLHFCQUFxQixrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RCxNQUFNLGFBQWEsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsTUFBTSxhQUFhLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLE1BQU0sc0JBQXNCLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELE1BQU0sZ0JBQWdCLGFBQWEsRUFBRSxDQUFDO1FBQ3RDLE1BQU0saUJBQWlCLGtCQUFrQixJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUM7UUFDdEUsTUFBTSxpQkFBaUIsTUFBTTtVQUMzQixJQUFJLGtCQUFrQixFQUFFO1lBQ3RCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1dBQzlCLE1BQU0sSUFBSSxVQUFVLEVBQUU7WUFDckIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1dBQ3RCLE1BQU07WUFDTCxPQUFPLEVBQUUsQ0FBQztXQUNYO1NBQ0YsQ0FBQztRQUNGLE1BQU0sb0JBQW9CLG1CQUFtQixHQUFHO1VBQzlDLGFBQWE7VUFDYixXQUFXO1NBQ1osR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xCLE9BQU8sY0FBYyxNQUFNLE9BQU8sQ0FBQztVQUNqQyxLQUFLO1lBQ0gsS0FBSyxLQUFLO1lBQ1YsU0FBUyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxjQUFjLEdBQUcsRUFBRSxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUN6RixHQUFHLHFCQUFxQjtXQUN6QjtVQUNELFlBQVksT0FBTyxDQUFDO1lBQ2xCLFVBQVUsR0FBRyxpQkFBaUIsR0FBRyxFQUFFO1lBQ25DLGNBQWMsRUFBRTtZQUNoQixpQkFBaUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxZQUFZLE9BQU8sRUFBRSxDQUFDO1dBQ3pELENBQUM7VUFDRixRQUFRLGVBQWUsQ0FBQyxNQUFNLENBQUM7VUFDL0IsTUFBTTtVQUNOLGlCQUFpQixVQUFVLE1BQU0sT0FBTztTQUN6QyxDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxnQkFBZ0IsTUFBTTtRQUMxQixPQUFPLGNBQWMsTUFBTSxVQUFVLENBQUM7VUFDcEMsS0FBSztZQUNILEtBQUssS0FBSztZQUNWLFNBQVMsQ0FBQyxlQUFlLENBQUM7V0FDM0I7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSx3QkFBd0IsTUFBTTtRQUNsQyxNQUFNLGFBQWEsY0FBYyxNQUFNLE9BQU8sQ0FBQztVQUM3QyxLQUFLO1lBQ0gsS0FBSyxLQUFLO1lBQ1YsU0FBUyxDQUFDLGVBQWUsQ0FBQztXQUMzQjtTQUNGLENBQUMsQ0FBQztRQUNILE1BQU0sY0FBYyxjQUFjLE1BQU0sUUFBUSxDQUFDO1VBQy9DLEtBQUs7WUFDSCxLQUFLLEtBQUs7WUFDVixTQUFTLENBQUMsYUFBYSxDQUFDO1dBQ3pCO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsT0FBTztVQUNMLEtBQUs7WUFDSCxLQUFLLEtBQUs7WUFDVixTQUFTLENBQUMsa0JBQWtCLENBQUM7V0FDOUI7VUFDRCxZQUFZO1lBQ1YsVUFBVTtZQUNWLFdBQVc7V0FDWjtTQUNGLENBQUM7T0FDSCxDQUFDO01BQ0YsTUFBTSxpQkFBaUIsTUFBTTtRQUMzQixNQUFNLGNBQWMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLE1BQU0sb0JBQW9CLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxXQUFXLENBQUMsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLE1BQU0sQ0FBQztRQUM5RixNQUFNLFdBQVc7VUFDZixLQUFLO1lBQ0gsS0FBSyxLQUFLO1lBQ1YsU0FBUztjQUNQLEtBQUs7Y0FDTCxpQkFBaUI7Y0FDakIsaUJBQWlCO2FBQ2xCLE9BQU8sQ0FBQyxhQUFhLENBQUM7WUFDdkIsWUFBWSxFQUFFLEdBQUcsUUFBUSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1dBQzFEO1VBQ0QsWUFBWSxRQUFRLENBQUMsQ0FBQyxXQUFXLE9BQU8sQ0FBQyxFQUFFLFVBQVUsTUFBTSxNQUFNLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM1RixDQUFDO1FBQ0YsTUFBTSxvQkFBb0I7VUFDeEIsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLFFBQVEsS0FBSyxZQUFZLEdBQUcsSUFBSSxFQUFFLEVBQUU7VUFDNUQsUUFBUSxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLEVBQUUsUUFBUTtjQUM1QyxLQUFLLENBQUMsSUFBSSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsS0FBSyxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUM7YUFDaEUsQ0FBQyxDQUFDLENBQUM7U0FDUCxDQUFDO1FBQ0YsTUFBTSxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLGlCQUFpQixHQUFHLGlCQUFpQixHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEYsTUFBTSxlQUFlLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxvQkFBb0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZDLE9BQU87VUFDTCxJQUFJO1VBQ0osWUFBWSxZQUFZO1NBQ3pCLENBQUM7T0FDSCxDQUFDO01BQ0YsTUFBTSxnQkFBZ0IsTUFBTTtRQUMxQixNQUFNLFdBQVc7VUFDZixLQUFLO1lBQ0gsS0FBSyxLQUFLO1lBQ1YsU0FBUztjQUNQLEtBQUs7Y0FDTCxpQkFBaUI7Y0FDakIsdUJBQXVCO2NBQ3ZCLGlCQUFpQjthQUNsQixPQUFPLENBQUMsYUFBYSxDQUFDO1lBQ3ZCLFlBQVksRUFBRSxHQUFHLFFBQVEsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtXQUMxRDtVQUNELFlBQVksUUFBUSxDQUFDLENBQUMsV0FBVyxPQUFPLENBQUM7Y0FDckMsVUFBVSxNQUFNLE1BQU0sU0FBUyxDQUFDLFVBQVUsQ0FBQztjQUMzQyxXQUFXLE1BQU0sYUFBYSxtQkFBbUIsRUFBRTthQUNwRCxDQUFDLENBQUMsQ0FBQztTQUNQLENBQUM7UUFDRixNQUFNLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sZUFBZSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsbUJBQW1CLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN0QyxPQUFPO1VBQ0wsSUFBSTtVQUNKLFlBQVksWUFBWTtTQUN6QixDQUFDO09BQ0gsQ0FBQztNQUNGLE1BQU0sZUFBZSxNQUFNO1FBQ3pCLE1BQU0sYUFBYSxjQUFjLEVBQUUsQ0FBQztRQUNwQyxNQUFNLG1CQUFtQixxQkFBcUIsRUFBRSxDQUFDO1FBQ2pELE1BQU0sZUFBZSxjQUFjLE1BQU0sU0FBUyxDQUFDO1VBQ2pELEtBQUs7WUFDSCxLQUFLLEtBQUs7WUFDVixTQUFTLENBQUMsY0FBYyxDQUFDO1dBQzFCO1VBQ0QsV0FBVyxVQUFVLE1BQU07U0FDNUIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxrQkFBa0IsY0FBYyxNQUFNLFlBQVksQ0FBQyxFQUFFLFdBQVcsVUFBVSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzFGLE1BQU0sWUFBWSxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxVQUFVLE1BQU0sT0FBTyxVQUFVLENBQUMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7UUFDbEosTUFBTSxtQkFBbUIsT0FBTyxDQUFDO1VBQy9CLGVBQWUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUM7VUFDbkMsUUFBUSxHQUFHLEVBQUUsR0FBRyxDQUFDLGdCQUFnQixDQUFDO1VBQ2xDLGVBQWUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7U0FDcEMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxrQkFBa0IsY0FBYyxNQUFNLGdCQUFnQixDQUFDO1VBQzNELFlBQVksT0FBTyxDQUFDO1lBQ2xCLGdCQUFnQjtZQUNoQixRQUFRLEdBQUcsRUFBRSxHQUFHO2NBQ2Qsa0JBQWtCLE9BQU8sRUFBRTtjQUMzQixHQUFHLFNBQVMsUUFBUSxFQUFFO2FBQ3ZCO1dBQ0YsQ0FBQztTQUNILENBQUMsQ0FBQztRQUNILE1BQU0sV0FBVyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxNQUFNLGFBQWE7VUFDakIsTUFBTSxhQUFhO1VBQ25CLEdBQUcsUUFBUSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssS0FBSyxFQUFFLEdBQUcsRUFBRTtVQUN6QyxHQUFHLFFBQVEsR0FBRyxFQUFFLGVBQWUsTUFBTSxFQUFFLEdBQUcsRUFBRTtTQUM3QyxDQUFDO1FBQ0YsTUFBTSxpQkFBaUIsT0FBTyxDQUFDLGNBQWMsT0FBTyxDQUFDO1VBQ25ELEtBQUs7WUFDSCxLQUFLLEtBQUs7WUFDVixTQUFTO2NBQ1AsS0FBSztjQUNMLGFBQWE7YUFDZCxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsb0JBQW9CLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsR0FBRyxDQUFDLDZCQUE2QixDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7WUFDckksUUFBUTtjQUNOLFlBQVksUUFBUTtjQUNwQixHQUFHLFFBQVEsR0FBRztnQkFDWixTQUFTLEdBQUc7Z0JBQ1osUUFBUSxHQUFHO2VBQ1osR0FBRyxFQUFFO2FBQ1A7WUFDRCxVQUFVO1dBQ1g7VUFDRCxZQUFZO1lBQ1YsZUFBZTtZQUNmLEdBQUcsUUFBUSxHQUFHLEVBQUUsR0FBRyxDQUFDLGVBQWUsQ0FBQztZQUNwQyxZQUFZO1dBQ2I7VUFDRCxZQUFZLFFBQVEsQ0FBQztZQUNuQixlQUFlLEVBQUU7WUFDakIsU0FBUyxPQUFPLENBQUMsRUFBRSxjQUFjLHVCQUF1QixFQUFFLENBQUM7WUFDM0QsTUFBTSxPQUFPLENBQUM7Y0FDWixNQUFNLFFBQVE7Y0FDZCxVQUFVLDJOQUEyTjthQUN0TyxDQUFDO1dBQ0gsQ0FBQztTQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0osTUFBTSxhQUFhLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1QyxjQUFjLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQixPQUFPO1VBQ0wsVUFBVTtVQUNWLGNBQWM7U0FDZixDQUFDO09BQ0gsQ0FBQztNQUNGLE1BQU0sZ0JBQWdCLGtCQUFrQjtRQUN0QyxNQUFNLGVBQWUsT0FBTyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDNUQsTUFBTSxjQUFjLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxNQUFNLE9BQU8sRUFBRTtVQUNsQixJQUFJLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxFQUFFO1lBQy9DLEtBQUssQ0FBQyxjQUFjLFFBQVEsRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7V0FDckQ7VUFDRCxJQUFJLGNBQWMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxFQUFFO1lBQ2pELEtBQUssQ0FBQyxjQUFjLFFBQVEsRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7V0FDdkQsTUFBTTtZQUNMLEtBQUssQ0FBQyxjQUFjLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7V0FDbEQ7U0FDRjtRQUNELE9BQU8sWUFBWSxDQUFDO09BQ3JCLENBQUM7TUFDRixNQUFNLDRCQUE0QixrQkFBa0I7UUFDbEQsTUFBTSxZQUFZLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxNQUFNO1VBQ2xELGNBQWMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzdDLENBQUMsQ0FBQztRQUNILE1BQU0sWUFBWSxDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsTUFBTTtVQUNuRCxjQUFjLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUM3QyxDQUFDLENBQUM7UUFDSCxNQUFNLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxrQkFBa0I7VUFDekQsSUFBSSxPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxPQUFPLFVBQVUsRUFBRTtZQUN2RSxjQUFjLG1DQUFtQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1dBQ25FLE1BQU07WUFDTCxjQUFjLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1dBQ3BEO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxxQkFBcUIsQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLGNBQWMsdUJBQXVCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztPQUNqSCxDQUFDO01BQ0YsTUFBTSxtQkFBbUIsVUFBVTtRQUNqQyxNQUFNLGdDQUFnQyxHQUFHLE1BQU0sQ0FBQztRQUNoRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsb0NBQW9DO1VBQ2xFLE1BQU0sR0FBRyxTQUFTLHNCQUFzQixDQUFDLElBQUksRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO1NBQzFFLENBQUMsQ0FBQztRQUNILE1BQU0sc0RBQXNELEdBQUcsTUFBTSxHQUFHLFNBQVMsT0FBTyxFQUFFLENBQUM7UUFDM0YsTUFBTSxhQUFhLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELE1BQU0sY0FBYztVQUNsQixTQUFTO1VBQ1QsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDO1VBQ3ZCLFNBQVMsVUFBVSxDQUFDLE1BQU0sQ0FBQztVQUMzQixTQUFTLFVBQVUsV0FBVyxDQUFDLE1BQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1VBQ3hELG9CQUFvQixXQUFXLEtBQUssYUFBYSxTQUFTO1VBQzFELE9BQU87VUFDUCxTQUFTLFFBQVE7VUFDakIsS0FBSztTQUNOLENBQUM7UUFDRix5QkFBeUIsQ0FBQyxNQUFNLGVBQWUsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDbEQsTUFBTSxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsTUFBTSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDMUQsT0FBTyxDQUFDLE1BQU0sRUFBRSxVQUFVLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsVUFBVSxNQUFNLE9BQU8sUUFBUSxFQUFFLFVBQVUsTUFBTSxDQUFDLENBQUM7UUFDbkUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsTUFBTSxPQUFPLENBQUMsQ0FBQztRQUN2RCxVQUFVLENBQUMsTUFBTSxFQUFFLGVBQWUsRUFBRSxPQUFPLEtBQUssRUFBRSxFQUFFLFdBQVcsVUFBVSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ25GLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQztRQUM5QixNQUFNLE1BQU0sTUFBTSxXQUFXLEVBQUUsQ0FBQztRQUNoQyxNQUFNLFNBQVMsYUFBYSxDQUFDLE1BQU0sZUFBZSxDQUFDLENBQUM7UUFDcEQsTUFBTSxPQUFPO1VBQ1gsWUFBWSxHQUFHO1VBQ2YsTUFBTTtTQUNQLENBQUM7UUFDRixPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFVBQVUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO09BQ3pFLENBQUM7TUFDRixNQUFNLHlCQUF5QixZQUFZO1FBQ3pDLG1CQUFtQixJQUFJLENBQUMsUUFBUSxXQUFXLENBQUMsQ0FBQztRQUM3QyxPQUFPLFFBQVEsQ0FBQztPQUNqQixDQUFDO01BQ0YsTUFBTSxXQUFXLE1BQU07UUFDckIsTUFBTSxTQUFTLFlBQVksRUFBRSxDQUFDO1FBQzlCLE1BQU0sV0FBVyxjQUFjLEVBQUUsQ0FBQztRQUNsQyxNQUFNLFVBQVUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLGFBQWEsRUFBRSxHQUFHLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNGLFVBQVUsU0FBUyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEMsVUFBVSxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxVQUFVLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlCLE1BQU0sU0FBUztVQUNiLE9BQU87VUFDUCxRQUFRO1VBQ1IsTUFBTTtVQUNOLGVBQWUsVUFBVSxpQkFBaUIsRUFBRTtTQUM3QyxDQUFDO1FBQ0YsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUNqQyxDQUFDO01BQ0YsT0FBTztRQUNMLFFBQVE7VUFDTixXQUFXLFVBQVUsTUFBTTtVQUMzQixlQUFlLE1BQU0saUJBQWlCLENBQUMsUUFBUSxFQUFFLG1CQUFtQixDQUFDO1NBQ3RFO1FBQ0QsU0FBUztVQUNQLFdBQVcsVUFBVSxPQUFPO1VBQzVCLGVBQWUsTUFBTSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLENBQUM7U0FDeEU7UUFDRCxRQUFRO09BQ1QsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxhQUFhLG1DQUFtQztNQUNwRCxNQUFNLFVBQVUsTUFBTSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07UUFDdkQsTUFBTSxLQUFLLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0QyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM5QixPQUFPLEVBQUUsQ0FBQztPQUNYLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDYixLQUFLLENBQUMsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ3BELENBQUM7O0lBRUYsTUFBTSxXQUFXLFVBQVUsQ0FBQztNQUMxQixVQUFVLENBQUMsVUFBVSxDQUFDO01BQ3RCLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztNQUMxQixpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDO01BQ25DLFNBQVMsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDO01BQ2pDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO01BQzVCLFNBQVMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO01BQzNCLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ2xDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQztNQUM5Qix1QkFBdUIsQ0FBQyxVQUFVLENBQUM7S0FDcEMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxRQUFRLEVBQUUsUUFBUSxRQUFRLEVBQUUsQ0FBQztJQUNuQyxNQUFNLFVBQVUsVUFBVSxDQUFDO01BQ3pCLFFBQVEsQ0FBQztRQUNQLE1BQU0sWUFBWTtRQUNsQixXQUFXLGtCQUFrQjtVQUMzQixPQUFPO1lBQ0wsWUFBWSxRQUFRLENBQUMsQ0FBQyxRQUFRLE9BQU8sQ0FBQztnQkFDbEMsTUFBTSxPQUFPO2dCQUNiLFdBQVcsVUFBVTtrQkFDbkIsT0FBTyxRQUFRLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDMUQ7Z0JBQ0QsY0FBYyxNQUFNLGVBQWUsU0FBUyxDQUFDLElBQUksS0FBSyxDQUFDLDhFQUE4RSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUMvSyxXQUFXLE1BQU0sY0FBYztlQUNoQyxDQUFDLENBQUMsQ0FBQztXQUNQLENBQUM7U0FDSDtPQUNGLENBQUM7TUFDRixRQUFRLENBQUM7UUFDUCxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLE1BQU0sT0FBTztPQUNkLENBQUM7TUFDRixRQUFRLENBQUM7UUFDUCxTQUFTLEtBQUs7UUFDZCxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLE1BQU0sT0FBTztPQUNkLENBQUM7TUFDRixRQUFRLENBQUM7UUFDUCxTQUFTLEtBQUs7UUFDZCxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLE1BQU0sTUFBTTtPQUNiLENBQUM7TUFDRixRQUFRLENBQUM7UUFDUCxTQUFTLEtBQUs7UUFDZCxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLE1BQU0sUUFBUTtPQUNmLENBQUM7TUFDRixRQUFRLENBQUM7UUFDUCxTQUFTO1VBQ1AsUUFBUSxtQkFBbUI7WUFDekIsR0FBRyxJQUFJO1lBQ1AsS0FBSyxNQUFNLElBQUk7WUFDZixZQUFZLE1BQU0sV0FBVztXQUM5QixDQUFDO1NBQ0g7UUFDRCxRQUFRO1VBQ04sU0FBUyxDQUFDLEtBQUssRUFBRTtZQUNmLEtBQUssS0FBSztZQUNWLFFBQVE7Y0FDTixVQUFVLE9BQU87Y0FDakIsTUFBTSxLQUFLO2NBQ1gsS0FBSyxLQUFLO2NBQ1YsT0FBTyxLQUFLO2NBQ1osUUFBUSxLQUFLO2FBQ2Q7V0FDRixDQUFDO1VBQ0YsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7U0FDNUI7UUFDRCxNQUFNLFNBQVM7T0FDaEIsQ0FBQztLQUNILENBQUMsQ0FBQzs7SUFFSCxNQUFNLFlBQVkseUNBQXlDO01BQ3pELE1BQU0sYUFBYSxPQUFPLEVBQUUsQ0FBQztNQUM3QixNQUFNLGFBQWEsVUFBVTtRQUMzQixVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QixNQUFNLE9BQU8sTUFBTSxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2hELE1BQU0sa0JBQWtCLFNBQVMsUUFBUSxFQUFFLENBQUM7UUFDNUMsTUFBTSxVQUFVLElBQUksVUFBVSxFQUFFLE1BQU0sQ0FBQztVQUNyQyxHQUFHLGVBQWU7VUFDbEIsWUFBWSxlQUFlLFdBQVcsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7VUFDaEUsWUFBWSxRQUFRLENBQUM7WUFDbkIsUUFBUSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ25CLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNO2dCQUMxRCxRQUFRLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLEVBQUUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztlQUM5RCxDQUFDLENBQUMsQ0FBQztXQUNQLENBQUM7U0FDSCxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQ3hCLENBQUM7TUFDRixNQUFNLGFBQWEsVUFBVTtRQUMzQixVQUFVLE1BQU0sRUFBRSxDQUFDO1FBQ25CLE1BQU0sQ0FBQyxNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUMsY0FBYztVQUN4QyxNQUFNLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxXQUFXO1lBQ3RELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztXQUNqQixDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxnQkFBZ0IsVUFBVSxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztNQUNyRSxNQUFNLGtCQUFrQixVQUFVLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQ3BFLE1BQU0sVUFBVSx5QkFBeUI7UUFDdkMsUUFBUSxNQUFNLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO09BQ3JDLENBQUM7TUFDRixNQUFNLFVBQVUsVUFBVTtRQUN4QixRQUFRLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUMxQixDQUFDO01BQ0YsTUFBTSxnQkFBZ0IsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO01BQ2pELE1BQU0sYUFBYTtRQUNqQixHQUFHLE1BQU0sV0FBVztRQUNwQixDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztPQUM1RixDQUFDO01BQ0YsT0FBTztRQUNMLEtBQUssTUFBTSxJQUFJO1FBQ2YsS0FBSyxNQUFNLElBQUk7UUFDZixVQUFVO1FBQ1YsTUFBTTtVQUNKLE1BQU0sVUFBVTtVQUNoQixNQUFNLFVBQVU7VUFDaEIsU0FBUyxhQUFhO1VBQ3RCLFdBQVcsZUFBZTtVQUMxQixPQUFPO1VBQ1AsT0FBTztTQUNSO1FBQ0QsVUFBVTtRQUNWLGlCQUFpQjtVQUNmLFlBQVk7WUFDVixRQUFRLFFBQVE7WUFDaEIsY0FBYyxNQUFNO1dBQ3JCO1NBQ0Y7UUFDRCxZQUFZLE9BQU8sQ0FBQyxNQUFNLGdCQUFnQixFQUFFO1VBQzFDLFNBQVMsT0FBTyxDQUFDLEVBQUUsQ0FBQztVQUNwQixNQUFNLE9BQU8sQ0FBQztZQUNaLE1BQU0sUUFBUTtZQUNkLFNBQVMsTUFBTSxVQUFVO1lBQ3pCLFVBQVUsTUFBTSxTQUFTO1lBQ3pCLGNBQWMsTUFBTSxhQUFhO1lBQ2pDLGNBQWMsTUFBTSxhQUFhO1dBQ2xDLENBQUM7VUFDRixRQUFRLE9BQU8sQ0FBQyxFQUFFLFNBQVMsVUFBVSxJQUFJLEVBQUUsQ0FBQztVQUM1QyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUs7Y0FDdEMsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNqRSxDQUFDLENBQUMsQ0FBQztTQUNQLENBQUM7T0FDSCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sY0FBYyxTQUFTLENBQUM7TUFDNUIsTUFBTSxhQUFhO01BQ25CLGNBQWMsUUFBUSxFQUFFO01BQ3hCLFlBQVksT0FBTyxFQUFFO01BQ3JCLFNBQVMsU0FBUztNQUNsQixNQUFNO1FBQ0osTUFBTSxrQkFBa0I7VUFDdEIsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDbkI7UUFDRCxNQUFNLGtCQUFrQjtVQUN0QixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNuQjtRQUNELFNBQVMsa0JBQWtCLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUMvQyxXQUFXLGtCQUFrQixJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDbkQsU0FBUywrQkFBK0I7VUFDdEMsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ25DO1FBQ0QsU0FBUyxrQkFBa0I7VUFDekIsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdEI7T0FDRjtLQUNGLENBQUMsQ0FBQzs7SUFFSCxNQUFNLDZCQUE2QixLQUFLLENBQUM7TUFDdkMsSUFBSTtNQUNKLE1BQU07S0FDUCxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sb0NBQW9DLE9BQU8sQ0FBQzs7SUFFbEQsTUFBTSx5QkFBeUI7TUFDN0IsYUFBYSxDQUFDLFFBQVEsQ0FBQztNQUN2QixZQUFZO01BQ1osbUJBQW1CLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtRQUNsQyxPQUFPO1FBQ1AsS0FBSztPQUNOLENBQUM7TUFDRixPQUFPO01BQ1AsT0FBTztNQUNQLGdCQUFnQixDQUFDLFlBQVksRUFBRTtRQUM3QixTQUFTO1FBQ1QsV0FBVztPQUNaLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSwyQkFBMkI7TUFDL0IsR0FBRyxzQkFBc0I7TUFDekIsTUFBTTtLQUNQLENBQUM7SUFDRixNQUFNLDJCQUEyQjtNQUMvQixrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7UUFDekIsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO09BQ1QsQ0FBQztNQUNGLEdBQUcsd0JBQXdCO0tBQzVCLENBQUM7SUFDRixNQUFNLHlCQUF5QjtNQUM3QixrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNwQyxZQUFZO01BQ1osZUFBZTtNQUNmLFlBQVk7TUFDWixlQUFlLENBQUMsT0FBTyxFQUFFLDBCQUEwQixDQUFDO01BQ3BELEdBQUcsc0JBQXNCO0tBQzFCLENBQUM7SUFDRixNQUFNLHlCQUF5QjtNQUM3QixHQUFHLHNCQUFzQjtNQUN6QixrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztNQUM1QyxjQUFjLENBQUMsU0FBUyxDQUFDO01BQ3pCLFlBQVk7TUFDWixZQUFZO01BQ1osZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQztLQUNsQyxDQUFDO0lBQ0YsTUFBTSwyQkFBMkIsUUFBUSxDQUFDLE1BQU0sRUFBRTtNQUNoRCxRQUFRLHdCQUF3QjtNQUNoQyxRQUFRLHdCQUF3QjtNQUNoQyxRQUFRLHdCQUF3QjtNQUNoQyxNQUFNLHNCQUFzQjtNQUM1QixjQUFjLHNCQUFzQjtLQUNyQyxDQUFDLENBQUM7O0lBRUgsTUFBTSxvQkFBb0I7TUFDeEIsSUFBSTtNQUNKLE1BQU07TUFDTixrQkFBa0IsQ0FBQyxPQUFPLEVBQUU7UUFDMUIsTUFBTTtRQUNOLE1BQU07UUFDTixPQUFPO1FBQ1AsU0FBUztPQUNWLENBQUM7TUFDRixJQUFJO01BQ0osU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7S0FDckIsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDOztJQUVuRCxNQUFNLGtCQUFrQixjQUFjO01BQ3BDLElBQUk7TUFDSixVQUFVO0tBQ1gsQ0FBQzs7SUFFRixNQUFNLGVBQWU7TUFDbkIsSUFBSTtNQUNKLE1BQU07TUFDTixPQUFPO01BQ1AsYUFBYSxDQUFDLFFBQVEsQ0FBQztNQUN2QixZQUFZO01BQ1osVUFBVTtNQUNWLGdCQUFnQixDQUFDLFlBQVksRUFBRTtRQUM3QixTQUFTO1FBQ1QsV0FBVztRQUNYLFNBQVM7T0FDVixDQUFDO01BQ0YsT0FBTztLQUNSLENBQUM7SUFDRixNQUFNLGVBQWUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDOztJQUV6QyxNQUFNLHNCQUFzQjtNQUMxQixJQUFJO01BQ0osTUFBTTtLQUNQLENBQUM7SUFDRixNQUFNLCtCQUErQixtQkFBbUIsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzs7SUFFakYsTUFBTSxpQkFBaUIsbUJBQW1CLE9BQU8sQ0FBQztNQUNoRCxLQUFLO01BQ0wsT0FBTztLQUNSLENBQUMsQ0FBQztJQUNILE1BQU0saUJBQWlCLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM3QyxNQUFNLHdCQUF3QixPQUFPLENBQUM7O0lBRXRDLE1BQU0sbUJBQW1CLDRCQUE0QixPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekYsTUFBTSxtQkFBbUIsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDakQsTUFBTSwwQkFBMEIsUUFBUSxDQUFDO01BQ3ZDLE9BQU87TUFDUCxNQUFNO01BQ04sSUFBSTtLQUNMLENBQUMsQ0FBQzs7SUFFSCxNQUFNLG1CQUFtQiw0QkFBNEIsT0FBTyxDQUFDLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekcsTUFBTSxtQkFBbUIsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDakQsTUFBTSwwQkFBMEIsTUFBTSxDQUFDOztJQUV2QyxNQUFNLG9CQUFvQiw0QkFBNEIsQ0FBQztJQUN2RCxNQUFNLG9CQUFvQixLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNuRCxNQUFNLDJCQUEyQixNQUFNLENBQUM7O0lBRXhDLE1BQU0scUJBQXFCLG1CQUFtQixPQUFPLENBQUM7TUFDcEQsZUFBZSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUM7TUFDbEMsY0FBYyxDQUFDLFVBQVUsQ0FBQztNQUMxQixjQUFjLENBQUMsV0FBVyxDQUFDO01BQzNCLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUM7S0FDeEMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSx3QkFBd0IsbUJBQW1CLE9BQU8sQ0FBQztNQUN2RCxlQUFlLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQztNQUNsQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7S0FDekIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxxQkFBcUIsT0FBTyxDQUFDLEtBQUssS0FBSyxDQUFDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25MLE1BQU0sNEJBQTRCLE1BQU0sQ0FBQzs7SUFFekMsTUFBTSxpQkFBaUIsNEJBQTRCLENBQUM7SUFDcEQsTUFBTSxpQkFBaUIsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sd0JBQXdCLFFBQVEsRUFBRSxDQUFDOztJQUV6QyxNQUFNLG1CQUFtQixjQUFjO01BQ3JDLElBQUk7TUFDSixjQUFjLENBQUMsU0FBUyxDQUFDO01BQ3pCLFVBQVU7S0FDWCxDQUFDOztJQUVGLE1BQU0sa0JBQWtCO01BQ3RCLElBQUk7TUFDSixjQUFjLENBQUMsTUFBTSxDQUFDO01BQ3RCLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUU7UUFDN0MsY0FBYztRQUNkLFVBQVU7T0FDWCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQzs7SUFFL0MsTUFBTSxlQUFlLDRCQUE0QixPQUFPLENBQUM7TUFDdkQsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQztNQUNqQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDO01BQ25DLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUM7TUFDeEMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQztLQUN0QyxDQUFDLENBQUM7SUFDSCxNQUFNLGVBQWUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sc0JBQXNCLE1BQU0sQ0FBQzs7SUFFbkMsTUFBTSxxQkFBcUIsS0FBSyxDQUFDLG1CQUFtQixPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkYsTUFBTSw0QkFBNEIsS0FBSyxDQUFDO01BQ3RDLGNBQWMsQ0FBQyxLQUFLLENBQUM7TUFDckIsWUFBWSxDQUFDLE1BQU0sQ0FBQztNQUNwQixZQUFZLENBQUMsYUFBYSxDQUFDO01BQzNCLFlBQVksQ0FBQyxjQUFjLENBQUM7S0FDN0IsQ0FBQyxDQUFDOztJQUVILE1BQU0sY0FBYyw0QkFBNEIsT0FBTyxDQUFDO01BQ3RELFlBQVksQ0FBQyxXQUFXLENBQUM7TUFDekIsWUFBWSxDQUFDLGFBQWEsQ0FBQztNQUMzQixnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDO01BQ3BDLE9BQU87S0FDUixDQUFDLENBQUM7SUFDSCxNQUFNLGNBQWMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0scUJBQXFCLE1BQU0sQ0FBQzs7SUFFbEMsTUFBTSxvQkFBb0IsY0FBYztNQUN0QyxJQUFJO01BQ0osS0FBSztNQUNMLFVBQVU7TUFDVixtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFO1FBQ3BDLE9BQU87UUFDUCxRQUFRO1FBQ1IsS0FBSztPQUNOLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sMEJBQTBCO01BQzlCLE1BQU07TUFDTixPQUFPO0tBQ1IsQ0FBQztJQUNGLE1BQU0sMEJBQTBCO01BQzlCLE1BQU07TUFDTixlQUFlLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQyxDQUFDO0tBQ3BFLENBQUM7SUFDRixNQUFNLG9CQUFvQixLQUFLLENBQUM7TUFDOUIsS0FBSyxDQUFDLHVCQUF1QixDQUFDO01BQzlCLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQztLQUMvQixDQUFDLENBQUM7SUFDSCxNQUFNLGdCQUFnQiw0QkFBNEIsT0FBTyxDQUFDO01BQ3hELGVBQWUsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUM7TUFDM0MsT0FBTztLQUNSLENBQUMsQ0FBQztJQUNILE1BQU0sZ0JBQWdCLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMzQyxNQUFNLHVCQUF1QixNQUFNLENBQUM7O0lBRXBDLE1BQU0sa0JBQWtCLDRCQUE0QixPQUFPLENBQUM7TUFDMUQsa0JBQWtCLENBQUMsT0FBTyxFQUFFO1FBQzFCLE1BQU07UUFDTixPQUFPO09BQ1IsQ0FBQztNQUNGLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO01BQzFCLE9BQU87S0FDUixDQUFDLENBQUM7SUFDSCxNQUFNLGtCQUFrQixLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDL0MsTUFBTSx5QkFBeUIsTUFBTSxDQUFDOztJQUV0QyxNQUFNLGtCQUFrQiw0QkFBNEIsT0FBTyxDQUFDO01BQzFELGdCQUFnQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUM7TUFDbkMsT0FBTztLQUNSLENBQUMsQ0FBQztJQUNILE1BQU0sa0JBQWtCLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMvQyxNQUFNLHlCQUF5QixLQUFLLENBQUM7TUFDbkMsY0FBYyxDQUFDLE9BQU8sQ0FBQztNQUN2QixjQUFjLENBQUMsUUFBUSxDQUFDO0tBQ3pCLENBQUMsQ0FBQzs7SUFFSCxNQUFNLGVBQWUsbUJBQW1CLE9BQU8sQ0FBQztNQUM5QyxLQUFLO01BQ0wsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7TUFDekIsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDMUIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxlQUFlLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN6QyxNQUFNLDJCQUEyQixNQUFNLENBQUM7O0lBRXhDLE1BQU0sY0FBYztNQUNsQixJQUFJO01BQ0osZUFBZSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7TUFDakMsZUFBZSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDeEMsQ0FBQztJQUNGLE1BQU0sY0FBYyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7O0lBRXZDLE1BQU0saUJBQWlCLDRCQUE0QixPQUFPLENBQUM7TUFDekQsWUFBWSxDQUFDLGFBQWEsQ0FBQztNQUMzQixnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDO01BQ3BDLE9BQU87S0FDUixDQUFDLENBQUM7SUFDSCxNQUFNLGlCQUFpQixLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDN0MsTUFBTSx3QkFBd0IsTUFBTSxDQUFDOztJQUVyQyxNQUFNLHFCQUFxQjtNQUN6QixrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7UUFDekIsV0FBVztRQUNYLE1BQU07T0FDUCxDQUFDO01BQ0YsS0FBSztNQUNMLGNBQWMsQ0FBQyxJQUFJLENBQUM7TUFDcEIsUUFBUSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQztLQUNuQyxDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsa0JBQWtCLENBQUM7SUFDOUMsTUFBTSxxQkFBcUIsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDckQsTUFBTSwwQkFBMEIsa0JBQWtCLE9BQU8sQ0FBQyxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNO1FBQzdHLE9BQU8sUUFBUSxDQUFDLE1BQU0sRUFBRTtVQUN0QixXQUFXLHVCQUF1QjtVQUNsQyxNQUFNLGtCQUFrQjtTQUN6QixDQUFDLENBQUM7T0FDSixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDUixNQUFNLDBCQUEwQixLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUMvRCxNQUFNLGlCQUFpQixRQUFRLENBQUMsTUFBTSxFQUFFO01BQ3RDLFdBQVcsdUJBQXVCO01BQ2xDLE1BQU0sa0JBQWtCO0tBQ3pCLENBQUMsQ0FBQztJQUNILE1BQU0sYUFBYTtNQUNqQixJQUFJO01BQ0osZUFBZSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUM7TUFDeEMsY0FBYyxDQUFDLGNBQWMsQ0FBQztNQUM5QixjQUFjLENBQUMsZ0JBQWdCLENBQUM7TUFDaEMsZ0JBQWdCLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQztNQUNsRCxZQUFZLENBQUMsbUJBQW1CLENBQUM7S0FDbEMsQ0FBQztJQUNGLE1BQU0sYUFBYSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7O0lBRXJDLE1BQU0saUJBQWlCLDRCQUE0QixPQUFPLENBQUM7TUFDekQsbUJBQW1CLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRTtRQUN0QyxPQUFPO1FBQ1AsT0FBTztRQUNQLE1BQU07T0FDUCxDQUFDO01BQ0YsT0FBTztLQUNSLENBQUMsQ0FBQztJQUNILE1BQU0saUJBQWlCLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM3QyxNQUFNLHdCQUF3QixLQUFLLENBQUM7TUFDbEMsT0FBTztNQUNQLGFBQWE7S0FDZCxDQUFDLENBQUM7O0lBRUgsTUFBTSxtQkFBbUIsUUFBUSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLGFBQWEsTUFBTSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0TyxNQUFNLGFBQWEsVUFBVSxDQUFDLE1BQU0sUUFBUSxDQUFDLE1BQU0sRUFBRTtNQUNuRCxhQUFhLGlCQUFpQjtNQUM5QixLQUFLLEtBQUssQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUNwRCxRQUFRLFlBQVk7TUFDcEIsVUFBVSxjQUFjO01BQ3hCLFlBQVksZ0JBQWdCO01BQzVCLGFBQWEsaUJBQWlCO01BQzlCLFVBQVUsY0FBYztNQUN4QixNQUFNLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO01BQ3ZELFFBQVEsWUFBWTtNQUNwQixPQUFPLFdBQVc7TUFDbEIsU0FBUyxhQUFhO01BQ3RCLFdBQVcsZUFBZTtNQUMxQixXQUFXLGVBQWU7TUFDMUIsUUFBUSxZQUFZO01BQ3BCLFVBQVUsY0FBYztNQUN4QixVQUFVLGNBQWM7TUFDeEIsY0FBYyxrQkFBa0I7TUFDaEMsV0FBVyxlQUFlO01BQzFCLGNBQWMsa0JBQWtCO01BQ2hDLFlBQVksZ0JBQWdCO01BQzVCLE9BQU8sS0FBSyxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7TUFDMUQsT0FBTyxXQUFXO01BQ2xCLE1BQU0sVUFBVTtNQUNoQixPQUFPLFdBQVc7S0FDbkIsQ0FBQyxDQUFDLENBQUM7SUFDSixNQUFNLGNBQWM7TUFDbEIsSUFBSTtNQUNKLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO01BQ3hCLGVBQWUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDO0tBQ3JDLENBQUM7SUFDRixNQUFNLGNBQWMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDOztJQUV2QyxNQUFNLFlBQVk7TUFDaEIsYUFBYSxDQUFDLEtBQUssQ0FBQztNQUNwQixLQUFLO01BQ0wsZUFBZSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUM7S0FDckMsQ0FBQztJQUNGLE1BQU0saUJBQWlCO01BQ3JCLElBQUk7TUFDSixrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDO0tBQ3RDLENBQUM7SUFDRixNQUFNLGlCQUFpQixLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7O0lBRTdDLE1BQU0scUJBQXFCLHdCQUF3QixDQUFDO0lBQ3BELE1BQU0scUJBQXFCLHdCQUF3QixDQUFDO0lBQ3BELE1BQU0sZUFBZSxLQUFLLENBQUM7TUFDekIsY0FBYyxDQUFDLE9BQU8sQ0FBQztNQUN2QixVQUFVLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUU7UUFDbEMsT0FBTyxXQUFXO1FBQ2xCLFVBQVUsY0FBYztPQUN6QixDQUFDLENBQUM7TUFDSCxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQztNQUNqQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLGtCQUFrQixDQUFDO01BQ25ELFNBQVMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO01BQzVCLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUM7TUFDbkMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztNQUNuQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO01BQ25DLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUM7TUFDbEMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztNQUNuQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDO0tBQ3ZDLENBQUMsQ0FBQztJQUNILE1BQU0sZUFBZSxRQUFRLEtBQUssQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDOztJQUVqRSxNQUFNLHdCQUF3QixLQUFLLENBQUM7TUFDbEMsa0JBQWtCLENBQUMsTUFBTSxFQUFFO1FBQ3pCLFFBQVE7UUFDUixRQUFRO09BQ1QsQ0FBQztNQUNGLEdBQUcsa0JBQWtCO0tBQ3RCLENBQUMsQ0FBQztJQUNILE1BQU0sa0JBQWtCLEtBQUssQ0FBQztNQUM1QixjQUFjLENBQUMsT0FBTyxDQUFDO01BQ3ZCLGNBQWMsQ0FBQyxLQUFLLENBQUM7TUFDckIsWUFBWSxDQUFDLFFBQVEsQ0FBQztNQUN0QixZQUFZLENBQUMsT0FBTyxDQUFDO01BQ3JCLGFBQWEsQ0FBQyxTQUFTLEVBQUUscUJBQXFCLENBQUM7TUFDL0MsaUJBQWlCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztNQUNuQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO01BQ25DLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUM7TUFDbEMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQztLQUNyQyxDQUFDLENBQUM7SUFDSCxNQUFNLGtCQUFrQixRQUFRLEtBQUssQ0FBQyxRQUFRLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDOztJQUV2RSxNQUFNLGdCQUFnQixPQUFPO01BQzNCLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztPQUN6RCxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3ZCLE9BQU8sTUFBTSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztPQUNuQyxNQUFNO1FBQ0wsT0FBTyxFQUFFLENBQUM7T0FDWDtLQUNGLENBQUM7O0lBRUYsTUFBTSxjQUFjLE9BQU8sUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDcEUsTUFBTSxpQkFBaUI7TUFDckIsVUFBVSxxQkFBcUI7TUFDL0IsWUFBWSx1QkFBdUI7TUFDbkMsYUFBYSx3QkFBd0I7TUFDckMsVUFBVSxxQkFBcUI7TUFDL0IsT0FBTyxrQkFBa0I7TUFDekIsUUFBUSxtQkFBbUI7TUFDM0IsY0FBYyx5QkFBeUI7TUFDdkMsV0FBVyxzQkFBc0I7TUFDakMsV0FBVyxzQkFBc0I7TUFDakMsUUFBUSx3QkFBd0I7TUFDaEMsU0FBUyxvQkFBb0I7TUFDN0IsTUFBTSxzQkFBc0I7TUFDNUIsVUFBVSxxQkFBcUI7TUFDL0IsVUFBVSxxQkFBcUI7TUFDL0IsY0FBYyx5QkFBeUI7TUFDdkMsWUFBWSx1QkFBdUI7TUFDbkMsZ0JBQWdCLGlDQUFpQztLQUNsRCxDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsUUFBUSxRQUFRLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sZ0JBQWdCLGFBQWEsUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQzs7SUFFbkYsTUFBTSxzQkFBc0IsYUFBYTtNQUN2QyxNQUFNLGFBQWEsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQzVDLE1BQU0sU0FBUyxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQzVILE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3RCLENBQUM7O0lBRUYsTUFBTSxVQUFVLGFBQWE7TUFDM0IsSUFBSSxFQUFFLENBQUM7TUFDUCxNQUFNLGlCQUFpQixRQUFRLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7TUFDekQsTUFBTSxnQkFBZ0IsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7TUFDckQsTUFBTSxjQUFjLENBQUMsS0FBSyxTQUFTLFlBQVksTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7TUFDckYsT0FBTztRQUNMLGNBQWM7UUFDZCxhQUFhO1FBQ2IsV0FBVztPQUNaLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0I7TUFDcEIsTUFBTSx3QkFBd0I7UUFDNUIsTUFBTSxhQUFhLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QyxPQUFPLE9BQU8sQ0FBQyxVQUFVLGVBQWUsRUFBRSxVQUFVLFlBQVksRUFBRSxVQUFVLGNBQWMsQ0FBQyxDQUFDO09BQzdGO01BQ0QsU0FBUyx3QkFBd0I7UUFDL0IsTUFBTSxpQkFBaUIsUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzVELE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO09BQ2hDO01BQ0QsUUFBUSxhQUFhLE9BQU8sQ0FBQyxTQUFTLENBQUM7S0FDeEMsQ0FBQzs7SUFFRixNQUFNLFNBQVMsdUNBQXVDO01BQ3BELE1BQU0sU0FBUyxxQkFBcUI7UUFDbEMsZ0JBQWdCLFlBQVksS0FBSyxDQUFDLGVBQWU7VUFDL0MsTUFBTSxXQUFXLFdBQVcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7VUFDOUMsZUFBZSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDL0IsQ0FBQyxDQUFDO1FBQ0gsZ0JBQWdCLGlCQUFpQixLQUFLLENBQUMsb0JBQW9CO1VBQ3pELE1BQU0sZ0JBQWdCLGdCQUFnQixDQUFDLElBQUksRUFBRSxlQUFlLElBQUksRUFBRSxDQUFDLENBQUM7VUFDcEUsTUFBTSxXQUFXLGdCQUFnQixTQUFTLEdBQUcsU0FBUyxHQUFHLFlBQVksQ0FBQztVQUN0RSxRQUFRLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1NBQ3BDLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixPQUFPLFFBQVEsQ0FBQztRQUNkLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSx3QkFBd0I7VUFDdkMsTUFBTSxnQkFBZ0IsT0FBTyxDQUFDO1VBQzlCLElBQUksQ0FBQyxhQUFhLFVBQVUsRUFBRTtZQUM1QixNQUFNLFVBQVUsZ0JBQWdCLFFBQVEsQ0FBQztZQUN6QyxJQUFJLFVBQVUsQ0FBQyxhQUFhLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRTtjQUMvQyxNQUFNLENBQUMsU0FBUyxFQUFFLGFBQWEsS0FBSyxDQUFDLENBQUM7YUFDdkM7V0FDRjtTQUNGLENBQUM7UUFDRixhQUFhLENBQUMsZUFBZTtVQUMzQixnQkFBZ0IsWUFBWSxLQUFLLENBQUMsV0FBVztZQUMzQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1dBQ3ZCLENBQUMsQ0FBQztTQUNKLENBQUM7T0FDSCxDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLElBQUksZ0NBQWdDLE1BQU0sT0FBTyxDQUFDO1FBQzlDLFdBQVcsSUFBSTtRQUNmLFFBQVEsTUFBTTtLQUNqQixDQUFDLENBQUM7O0lBRUgsTUFBTSxXQUFXLDRDQUE0QyxZQUFZLENBQUM7O0lBRTFFLElBQUksOEJBQThCLE1BQU0sT0FBTyxDQUFDO1FBQzVDLFdBQVcsSUFBSTtRQUNmLFVBQVUsUUFBUTtLQUNyQixDQUFDLENBQUM7O0lBRUgsSUFBSSxtQkFBbUI7TUFDckIsVUFBVSxDQUFDLFNBQVMsQ0FBQztNQUNyQixRQUFRLENBQUMsa0JBQWtCLENBQUM7TUFDNUIsUUFBUSxDQUFDLGFBQWEsQ0FBQztNQUN2QixRQUFRLENBQUMsYUFBYSxDQUFDO01BQ3ZCLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUM7S0FDbkMsQ0FBQzs7SUFFRixNQUFNLE9BQU8sTUFBTTtNQUNqQixNQUFNLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQztNQUNuQyxNQUFNLFFBQVEsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssRUFBRSxDQUFDLENBQUM7TUFDOUMsTUFBTSxZQUFZLE1BQU0sSUFBSSxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ2pELE9BQU87UUFDTCxTQUFTO1FBQ1QsS0FBSyxJQUFJLElBQUk7UUFDYixLQUFLLElBQUksSUFBSTtRQUNiLEtBQUs7T0FDTixDQUFDO0tBQ0gsQ0FBQzs7SUFFRixJQUFJLCtCQUErQixNQUFNLE9BQU8sQ0FBQztRQUM3QyxXQUFXLElBQUk7UUFDZixNQUFNLElBQUk7S0FDYixDQUFDLENBQUM7O0lBRUgsTUFBTSxhQUFhLFFBQVEsQ0FBQztNQUMxQixRQUFRLGdCQUFnQjtNQUN4QixNQUFNLFlBQVk7TUFDbEIsUUFBUSxnQkFBZ0I7TUFDeEIsTUFBTSxjQUFjO01BQ3BCLE9BQU8sZUFBZTtLQUN2QixDQUFDLENBQUM7O0lBRUgsTUFBTSxnQkFBZ0IsVUFBVTtNQUM5QixNQUFNLFNBQVMsRUFBRSxDQUFDO01BQ2xCLE1BQU0sU0FBUyxFQUFFLENBQUM7TUFDbEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxpQkFBaUI7UUFDNUIsS0FBSyxLQUFLLENBQUMsTUFBTTtVQUNmLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25CLEVBQUUsS0FBSztVQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbEIsQ0FBQyxDQUFDO09BQ0osQ0FBQyxDQUFDO01BQ0gsT0FBTyxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDeEUsQ0FBQzs7SUFFRixNQUFNLGtCQUFrQixpQ0FBaUM7TUFDdkQsTUFBTSxVQUFVLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxVQUFVO1FBQzNDLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFFBQVEsQ0FBQztTQUMzQztRQUNELFlBQVksS0FBSyxDQUFDLElBQUksTUFBTSxFQUFFLFFBQVEsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO09BQzNGLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDTCxPQUFPO1FBQ0wsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQztTQUM5QjtRQUNELFlBQVksQ0FBQztZQUNULEtBQUs7Y0FDSCxLQUFLLEtBQUs7Y0FDVixTQUFTLENBQUMsMEJBQTBCLENBQUM7YUFDdEM7WUFDRCxZQUFZLENBQUMsT0FBTyxPQUFPLEVBQUUsQ0FBQztXQUMvQixDQUFDO1FBQ0osWUFBWSxRQUFRLENBQUM7VUFDbkIsTUFBTSxPQUFPLENBQUM7WUFDWixNQUFNLFNBQVM7WUFDZixjQUFjLEdBQUcsQ0FBQyxZQUFZLENBQUM7V0FDaEMsQ0FBQztVQUNGLGdCQUFnQixRQUFRLENBQUMsT0FBTyxDQUFDO1VBQ2pDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7WUFDZixhQUFhLGFBQWEsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTztjQUM3RCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztjQUNuQixPQUFPLEVBQUUsQ0FBQzthQUNYLEVBQUUsUUFBUSxDQUFDO1dBQ2IsQ0FBQztVQUNGLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxjQUFjO2NBQ3hELElBQUksVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLHlCQUF5QixDQUFDLEVBQUUsRUFBRSxVQUFVLFFBQVEsS0FBSyxDQUFDLEVBQUUsTUFBTSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDekcsQ0FBQyxDQUFDLENBQUM7U0FDUCxDQUFDO09BQ0gsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxZQUFZLG9CQUFvQjtNQUNwQyxLQUFLLE1BQU0sSUFBSTtNQUNmLEtBQUssTUFBTSxJQUFJO01BQ2YsWUFBWSxNQUFNLFdBQVc7TUFDN0IsUUFBUSxRQUFRLENBQUMsTUFBTSxPQUFPLENBQUM7TUFDL0IsWUFBWSxPQUFPLENBQUMsTUFBTSxvQkFBb0IsRUFBRTtRQUM5QyxRQUFRLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDbkIsTUFBTSxPQUFPLENBQUM7VUFDWixNQUFNLFdBQVc7VUFDakIsVUFBVSxJQUFJO1VBQ2QsVUFBVSxJQUFJO1NBQ2YsQ0FBQztRQUNGLFlBQVksT0FBTyxDQUFDO1VBQ2xCLE9BQU87WUFDTCxNQUFNLFFBQVE7WUFDZCxjQUFjLE1BQU0sTUFBTTtXQUMzQjtTQUNGLENBQUM7T0FDSCxDQUFDO01BQ0YsaUJBQWlCLE1BQU0sZ0JBQWdCO0tBQ3hDLENBQUMsQ0FBQztJQUNILE1BQU0sWUFBWSxNQUFNLENBQUM7TUFDdkIsTUFBTSxXQUFXO01BQ2pCLGNBQWM7UUFDWixTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQztRQUMzQixVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxPQUFPO1VBQzFDLFlBQVk7WUFDVixRQUFRLEtBQUs7WUFDYixNQUFNLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDeEIsaUJBQWlCLE9BQU87V0FDekI7U0FDRixDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUNoQixRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ2xCLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7UUFDaEMsS0FBSyxDQUFDLHFCQUFxQixFQUFFO1VBQzNCLFFBQVE7VUFDUixNQUFNO1VBQ04sWUFBWTtTQUNiLENBQUM7UUFDRixVQUFVLENBQUMsTUFBTSxDQUFDO09BQ25CO01BQ0QsU0FBUyxTQUFTO0tBQ25CLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFdBQVcsVUFBVSxDQUFDO01BQzFCLFVBQVUsQ0FBQyxNQUFNLENBQUM7TUFDbEIsVUFBVSxDQUFDLEtBQUssQ0FBQztNQUNqQixTQUFTLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDO01BQ2xDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRTtRQUN4QixZQUFZO1FBQ1osTUFBTTtPQUNQLENBQUM7TUFDRixTQUFTLENBQUM7UUFDUixVQUFVO1FBQ1YsZUFBZTtPQUNoQixDQUFDO0tBQ0gsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxXQUFXLEtBQUssQ0FBQztNQUNyQixTQUFTLFNBQVM7TUFDbEIsTUFBTSxNQUFNO01BQ1osTUFBTSxLQUFLO01BQ1gsV0FBVyxhQUFhO1FBQ3RCLE1BQU0sZUFBZSxvQkFBb0I7VUFDdkMsWUFBWSxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1VBQ3pDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLEVBQUU7WUFDN0IsTUFBTTtZQUNOLE1BQU07V0FDUCxDQUFDLENBQUM7U0FDSixDQUFDO1FBQ0YsTUFBTSxjQUFjLG9CQUFvQjtVQUN0QyxZQUFZLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7VUFDdkMsUUFBUSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRTtZQUM1QixNQUFNO1lBQ04sTUFBTTtXQUNQLENBQUMsQ0FBQztTQUNKLENBQUM7UUFDRixPQUFPO1VBQ0wsUUFBUSxVQUFVO1lBQ2hCLE1BQU0sU0FBUyxNQUFNLFVBQVUsRUFBRSxTQUFTLENBQUMsU0FBUyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckUsTUFBTSxlQUFlLFlBQVksY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNoRSxNQUFNLFdBQVcsQ0FBQyxNQUFNO2NBQ3RCLElBQUksWUFBWSxJQUFJLFNBQVMsZUFBZSxFQUFFO2dCQUM1QyxPQUFPLFlBQVksQ0FBQztlQUNyQixNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ3hCLE9BQU8sV0FBVyxDQUFDO2VBQ3BCLE1BQU07Z0JBQ0wsT0FBTyxJQUFJLENBQUM7ZUFDYjthQUNGLEdBQUcsQ0FBQztZQUNMLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7V0FDMUI7VUFDRCxpQkFBaUIsRUFBRSxTQUFTLENBQUMsU0FBUyxRQUFRLFNBQVMsQ0FBQyxFQUFFO1NBQzNELENBQUM7T0FDSDtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDOztJQUV2QyxNQUFNLFlBQVksNENBQTRDO01BQzVELE9BQU8sTUFBTSxJQUFJO01BQ2pCLE9BQU8sTUFBTSxJQUFJO01BQ2pCLFVBQVU7TUFDVixrQkFBa0IsUUFBUTtNQUMxQixtQkFBbUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLEVBQUUsRUFBRTtNQUN0RCxjQUFjLE9BQU8sQ0FBQyxNQUFNLGlCQUFpQixFQUFFO1FBQzdDLFlBQVksT0FBTyxDQUFDO1VBQ2xCLGdCQUFnQixNQUFNLFFBQVEsY0FBYztVQUM1QyxXQUFXLE1BQU0sUUFBUSxTQUFTO1VBQ2xDLGFBQWEsaUJBQWlCO1lBQzVCLEtBQUssQ0FBQyxHQUFHLFFBQVEsRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7V0FDN0M7VUFDRCxlQUFlLGlCQUFpQjtZQUM5QixLQUFLLENBQUMsR0FBRyxRQUFRLEVBQUUsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1dBQzlDO1NBQ0YsQ0FBQztRQUNGLE1BQU0sT0FBTyxDQUFDO1VBQ1osTUFBTSxNQUFNO1VBQ1osWUFBWSxVQUFVO1lBQ3BCLE9BQU8sWUFBWSxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUM7V0FDcEU7VUFDRCxVQUFVLEdBQUcsR0FBRyxNQUFNLFFBQVEsU0FBUztVQUN2QyxlQUFlLElBQUk7U0FDcEIsQ0FBQztPQUNILENBQUM7S0FDSCxDQUFDLENBQUM7SUFDSCxNQUFNLFNBQVMsU0FBUyxDQUFDO01BQ3ZCLE1BQU0sUUFBUTtNQUNkLGNBQWMsUUFBUSxFQUFFO01BQ3hCLFlBQVksT0FBTyxFQUFFO01BQ3JCLFNBQVMsU0FBUztLQUNuQixDQUFDLENBQUM7O0lBRUgsTUFBTSxZQUFZLG9CQUFvQjtNQUNwQyxLQUFLLE1BQU0sSUFBSTtNQUNmLEtBQUssTUFBTSxJQUFJO01BQ2YsWUFBWSxPQUFPLENBQUMsTUFBTSxrQkFBa0IsRUFBRSxDQUFDLFNBQVMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDckUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxFQUFFLEVBQUU7S0FDdEQsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBQztNQUNyQixNQUFNLFNBQVM7TUFDZixjQUFjLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztNQUN2RCxTQUFTLFNBQVM7S0FDbkIsQ0FBQyxDQUFDOztJQUVILE1BQU0sU0FBUyxVQUFVLENBQUM7TUFDeEIsU0FBUyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUM7TUFDOUIsU0FBUyxDQUFDLGFBQWEsQ0FBQztNQUN4QixTQUFTLENBQUMsY0FBYyxDQUFDO01BQ3pCLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO01BQ3JCLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLENBQUM7S0FDbEMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQztNQUN2QixTQUFTLE1BQU07TUFDZixRQUFRO1FBQ04sVUFBVSxDQUFDLEtBQUssQ0FBQztRQUNqQixhQUFhLENBQUMsU0FBUyxFQUFFO1VBQ3ZCLFVBQVUsQ0FBQyxVQUFVLENBQUM7VUFDdEIsVUFBVSxDQUFDLGVBQWUsQ0FBQztTQUM1QixDQUFDO09BQ0g7TUFDRCxNQUFNLFFBQVE7TUFDZCxVQUFVLFVBQVU7UUFDbEIsT0FBTyxFQUFFLE1BQU0sTUFBTSxLQUFLLEVBQUUsQ0FBQztPQUM5QjtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sV0FBVyxRQUFRLENBQUM7TUFDeEIsU0FBUyxPQUFPO01BQ2hCLE1BQU0sU0FBUztLQUNoQixDQUFDLENBQUM7SUFDSCxNQUFNLFFBQVEsVUFBVSxDQUFDO01BQ3ZCLE9BQU87TUFDUCxRQUFRO0tBQ1QsQ0FBQyxDQUFDOztJQUVILE1BQU0sVUFBVSwyQ0FBMkM7TUFDekQsTUFBTSxjQUFjLFVBQVU7UUFDNUIsTUFBTSxXQUFXLFlBQVksU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsV0FBVztVQUNqRCxNQUFNLGVBQWUsTUFBTSxDQUFDLE1BQU0sS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUM7VUFDcEUsWUFBWSxLQUFLLENBQUMsV0FBVztZQUMzQixNQUFNLFFBQVEsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUM3QixNQUFNLENBQUMsTUFBTSxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO2NBQ3RDLEtBQUssQ0FBQyxPQUFPLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUMvQyxDQUFDLENBQUM7WUFDSCxTQUFTLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDOUIsTUFBTSxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztXQUM1QyxDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxjQUFjLHFCQUFxQjtRQUN2QyxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVU7VUFDaEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDbEMsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE9BQU87UUFDTCxLQUFLLE1BQU0sSUFBSTtRQUNmLEtBQUssTUFBTSxJQUFJO1FBQ2YsVUFBVTtRQUNWLFlBQVksS0FBSyxDQUFDLE1BQU0scUJBQXFCLENBQUM7UUFDOUMsUUFBUSxRQUFRLENBQUMsT0FBTyxDQUFDO1VBQ3ZCLE1BQU0sWUFBWSxHQUFHLENBQUMsYUFBYSxDQUFDLDhCQUE4QjtjQUM5RCxXQUFXLENBQUMsT0FBTyxFQUFFLFlBQVksU0FBUyxDQUFDLENBQUM7YUFDN0MsQ0FBQyxDQUFDLEdBQUcsRUFBRTtVQUNWO1lBQ0UsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLDZCQUE2QjtjQUM5QyxNQUFNLFNBQVMsY0FBYyxNQUFNLE9BQU8sQ0FBQztjQUMzQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDckIsQ0FBQztZQUNGLEtBQUssQ0FBQyxVQUFVLEVBQUUsRUFBRSw2QkFBNkI7Y0FDL0MsTUFBTSxTQUFTLGNBQWMsTUFBTSxPQUFPLENBQUM7Y0FDM0MsTUFBTSxhQUFhLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQ3RDLENBQUM7V0FDSDtTQUNGLENBQUMsQ0FBQztRQUNILE1BQU07VUFDSixjQUFjLFdBQVc7WUFDdkIsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsU0FBUyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1dBQ2xHO1VBQ0QsU0FBUyxxQkFBcUI7WUFDNUIsTUFBTSxvQkFBb0IsVUFBVTtjQUNsQyxNQUFNLGFBQWEsWUFBWSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7Y0FDdEQsTUFBTSxTQUFTLE1BQU0sQ0FBQyxVQUFVLEVBQUUsS0FBSyxZQUFZLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQztjQUM1RSxPQUFPLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUN2RSxDQUFDO1lBQ0YsV0FBVyxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1dBQ3pDO1NBQ0Y7T0FDRixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sYUFBYSxTQUFTLENBQUM7TUFDM0IsTUFBTSxZQUFZO01BQ2xCLGNBQWMsTUFBTSxFQUFFO01BQ3RCLFlBQVksS0FBSyxFQUFFO01BQ25CLE9BQU87TUFDUCxNQUFNO1FBQ0osY0FBYyxxQkFBcUIsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDO1FBQy9ELFNBQVMsNkJBQTZCO1VBQ3BDLElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNqQztPQUNGO0tBQ0YsQ0FBQyxDQUFDOztJQUVILE1BQU0saUJBQWlCLG1DQUFtQyxLQUFLLENBQUMsT0FBTyxFQUFFLGFBQWE7TUFDcEYsU0FBUyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztNQUM5QyxNQUFNLE9BQU8sT0FBTyxJQUFJLHNCQUFzQixFQUFFLENBQUM7TUFDakQsU0FBUyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO01BQy9CLE9BQU8sSUFBSSxPQUFPLENBQUM7S0FDcEIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxlQUFlLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVTtNQUMzRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDVCxPQUFPLENBQUMsQ0FBQyxDQUFDO09BQ1gsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDaEIsT0FBTyxDQUFDLENBQUMsQ0FBQztPQUNYLE1BQU07UUFDTCxPQUFPLENBQUMsQ0FBQztPQUNWO0tBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixNQUFNLHNCQUFzQiw4QkFBOEI7TUFDeEQsTUFBTSxvQkFBb0IsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7TUFDdEQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ25FLE1BQU0sVUFBVSxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxLQUFLLE9BQU8sQ0FBQztNQUN2RCxJQUFJLFNBQVMsQ0FBQztNQUNkLElBQUksT0FBTyxFQUFFO1FBQ1gsWUFBWSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDLENBQUM7T0FDMUUsTUFBTTtRQUNMLFlBQVksSUFBSSxJQUFJLENBQUMsaUJBQWlCLGFBQWEsRUFBRSxpQkFBaUIsYUFBYSxDQUFDLENBQUM7T0FDdEY7TUFDRCxNQUFNLGdCQUFnQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDckMsTUFBTSxrQkFBa0IsT0FBTyxJQUFJLFdBQVcsSUFBSSxPQUFPLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUMxRixNQUFNLG1CQUFtQixlQUFlLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLGFBQWEsQ0FBQyxHQUFHLGFBQWEsQ0FBQztNQUNuRyxNQUFNLGtCQUFrQixRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDdkUsTUFBTSxxQkFBcUIsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzdFLE1BQU0sZUFBZSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsZUFBZSxHQUFHLGtCQUFrQixDQUFDO01BQzFFLE1BQU0sZUFBZSxZQUFZLEdBQUcsZ0JBQWdCLENBQUM7TUFDckQsT0FBTyxTQUFTLEdBQUcsWUFBWSxDQUFDO0tBQ2pDLENBQUM7SUFDRixNQUFNLFVBQVUsbUJBQW1CO01BQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sVUFBVSxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUNoRSxDQUFDO0lBQ0YsTUFBTSxtQkFBbUIscUJBQXFCO01BQzVDLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQztNQUN4QyxLQUFLLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUM7S0FDN0MsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLHVDQUF1QztNQUNqRSxRQUFRLENBQUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxVQUFVO1FBQ3JELFVBQVUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsS0FBSyxDQUFDLFdBQVc7VUFDckQsWUFBWSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDL0IsS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDOUIsS0FBSyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDbEMsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1dBQ3hFLENBQUMsS0FBSyxDQUFDLFVBQVU7WUFDaEIsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1dBQ25DLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGFBQWEsVUFBVSxVQUFVLENBQUMsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDckUsTUFBTSxZQUFZLFdBQVc7TUFDM0IsTUFBTSxlQUFlLE9BQU8sRUFBRSxDQUFDO01BQy9CLE1BQU0sY0FBYztRQUNsQixhQUFhLENBQUMsUUFBUTtVQUNwQixNQUFNLFNBQVMsSUFBSSxRQUFRLENBQUM7VUFDNUIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVztZQUNqQyxLQUFLLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN2QyxJQUFJLFVBQVUsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsZUFBZTtjQUNsRSxNQUFNLFVBQVUsY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7Y0FDOUQsTUFBTSxrQkFBa0IsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2NBQzlDLGVBQWUsS0FBSyxDQUFDLFlBQVksTUFBTSxFQUFFLFlBQVksSUFBSSxDQUFDLENBQUM7YUFDNUQsQ0FBQyxDQUFDO1lBQ0gsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztZQUNuRCxRQUFRLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ2hDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdkIscUJBQXFCLENBQUMsTUFBTTtjQUMxQixtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO2FBQ3BELENBQUMsQ0FBQztXQUNKLENBQUMsQ0FBQztTQUNKLENBQUM7UUFDRixLQUFLLENBQUMsWUFBWSxFQUFFLEVBQUUsUUFBUTtVQUM1QixNQUFNLFNBQVMsSUFBSSxRQUFRLENBQUM7VUFDNUIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVztZQUNqQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1dBQ3BELENBQUMsQ0FBQztTQUNKLENBQUM7UUFDRixLQUFLLENBQUMsZUFBZSxFQUFFLGVBQWU7VUFDcEMsTUFBTSxTQUFTLElBQUksUUFBUSxDQUFDO1VBQzVCLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVc7WUFDakMsTUFBTSxXQUFXLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNoRCxLQUFLLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN2QyxNQUFNLFlBQVksTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDNUIsUUFBUSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztZQUNoQyxNQUFNLFlBQVksT0FBTyxJQUFJLHNCQUFzQixFQUFFLE9BQU8sQ0FBQztZQUM3RCxNQUFNLFdBQVcsU0FBUyxPQUFPLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdEQsSUFBSSxRQUFRLEVBQUU7Y0FDWixZQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztjQUM1QixtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO2FBQ3BELE1BQU07Y0FDTCxTQUFTLEtBQUssQ0FBQyxLQUFLO2dCQUNsQixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7ZUFDOUIsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxRQUFRLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ2hDLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1dBQ3hCLENBQUMsQ0FBQztTQUNKLENBQUM7T0FDSCxDQUFDO01BQ0YsTUFBTSxjQUFjLEtBQUssQ0FBQztNQUMxQixPQUFPO1FBQ0wsV0FBVztRQUNYLFdBQVc7T0FDWixDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLDJCQUEyQixzQkFBc0IsQ0FBQztJQUN4RCxNQUFNLHdCQUF3QixtQkFBbUIsQ0FBQztJQUNsRCxNQUFNLGlCQUFpQixpQ0FBaUM7TUFDdEQsTUFBTSxjQUFjLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUM3QixNQUFNLHFCQUFxQixRQUFRO1FBQ2pDLE1BQU0sV0FBVyxZQUFZLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxNQUFNLFlBQVksYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEQsTUFBTSxjQUFjLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDdEMsTUFBTSxVQUFVLFNBQVMsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbEQsV0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7T0FDMUIsQ0FBQztNQUNGLE1BQU0sZ0JBQWdCLFFBQVE7UUFDNUIsTUFBTSxVQUFVLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDbEMsWUFBWSxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQ3RDLENBQUM7TUFDRixNQUFNLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzFCLE1BQU0sVUFBVSxLQUFLLENBQUMsSUFBSSxLQUFLLEVBQUUsT0FBTztRQUN0QyxPQUFPO1VBQ0wsT0FBTyxHQUFHLEtBQUs7VUFDZixLQUFLO1lBQ0gsS0FBSyxLQUFLO1lBQ1YsU0FBUyxDQUFDLDJCQUEyQixDQUFDO1dBQ3ZDO1VBQ0QsWUFBWSxDQUFDLE1BQU0sQ0FBQyxTQUFTLE9BQU8sVUFBVSxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1VBQ3JFLE1BQU0sTUFBTTtZQUNWLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxVQUFVO2dCQUMxQixLQUFLO2tCQUNILEtBQUssS0FBSztrQkFDVixTQUFTLENBQUMsVUFBVSxDQUFDO2lCQUN0QjtnQkFDRCxZQUFZLEtBQUssQ0FBQyxHQUFHLE1BQU0sRUFBRSxRQUFRLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDekYsZ0JBQWdCLFFBQVEsQ0FBQztrQkFDdkIsTUFBTSxPQUFPLENBQUM7b0JBQ1osTUFBTSxTQUFTO29CQUNmLGNBQWMsR0FBRyxDQUFDLFlBQVksQ0FBQzttQkFDaEMsQ0FBQztrQkFDRixNQUFNLENBQUMscUJBQXFCLEVBQUU7b0JBQzVCLGFBQWEsQ0FBQyxhQUFhLENBQUM7b0JBQzVCLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQzttQkFDbEMsQ0FBQztrQkFDRixTQUFTLE9BQU8sQ0FBQztvQkFDZixVQUFVLE9BQU8sQ0FBQztzQkFDaEI7d0JBQ0UsS0FBSyx3QkFBd0I7d0JBQzdCLE9BQU8sRUFBRSxXQUFXLGtCQUFrQixFQUFFO3VCQUN6QztzQkFDRDt3QkFDRSxLQUFLLHFCQUFxQjt3QkFDMUIsT0FBTyxFQUFFLFdBQVcsYUFBYSxFQUFFO3VCQUNwQztxQkFDRixDQUFDO21CQUNILENBQUM7aUJBQ0gsQ0FBQztlQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDUjtTQUNGLENBQUM7T0FDSCxDQUFDLENBQUM7TUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ25DLE9BQU8sVUFBVSxPQUFPLENBQUM7UUFDdkIsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQztTQUM5QjtRQUNELGFBQWEsaUNBQWlDO1VBQzVDLE1BQU0sT0FBTyxZQUFZLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztVQUMzQyxRQUFRLENBQUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFO1lBQ3BDLElBQUk7WUFDSixTQUFTLE1BQU0sSUFBSSxFQUFFO1dBQ3RCLENBQUMsQ0FBQztVQUNILE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xCO1FBQ0QsTUFBTSxPQUFPO1FBQ2IsWUFBWTtVQUNWLFVBQVUsTUFBTSxPQUFPLENBQUM7WUFDdEIsS0FBSztjQUNILEtBQUssS0FBSztjQUNWLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQzthQUNsQztZQUNELFlBQVksQ0FBQyxNQUFNLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLFNBQVM7Y0FDUCxVQUFVLFNBQVM7Y0FDbkIsZUFBZSxtQ0FBbUM7YUFDbkQ7WUFDRCxrQkFBa0IsUUFBUSxDQUFDLENBQUMsV0FBVyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztXQUNyRCxDQUFDO1VBQ0YsVUFBVSxNQUFNLFFBQVEsQ0FBQztZQUN2QixLQUFLO2NBQ0gsS0FBSyxLQUFLO2NBQ1YsU0FBUyxDQUFDLDBCQUEwQixDQUFDO2FBQ3RDO1dBQ0YsQ0FBQztTQUNIO1FBQ0QsYUFBYSxPQUFPLFlBQVk7UUFDaEMsc0JBQXNCLFFBQVEsQ0FBQztVQUM3QixNQUFNLENBQUMsVUFBVSxFQUFFLE9BQU8sWUFBWSxDQUFDO1VBQ3ZDLE1BQU0sT0FBTyxDQUFDLEVBQUUsTUFBTSxTQUFTLEVBQUUsQ0FBQztVQUNsQyxTQUFTLE9BQU8sQ0FBQyxFQUFFLE1BQU0sUUFBUSxJQUFJLENBQUMsVUFBVSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1VBQ3ZFLFFBQVEsQ0FBQyxRQUFRLEtBQUssRUFBRSxFQUFFLFlBQVk7WUFDcEMsUUFBUSxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsd0JBQXdCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNqRSxPQUFPLFdBQVcsSUFBSSxFQUFFLENBQUM7V0FDMUIsRUFBRSxxQkFBcUI7WUFDdEIsV0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkIsUUFBUSxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztXQUMvRCxDQUFDO1NBQ0gsQ0FBQztPQUNILENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxhQUFhLHFEQUFxRDtNQUN0RSxNQUFNLG1CQUFtQixZQUFZO1FBQ25DLE1BQU0sT0FBTyxRQUFRLEtBQUssQ0FBQztRQUMzQixRQUFRLElBQUksS0FBSzthQUNaLFVBQVUsRUFBRTtZQUNiLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7V0FDaEU7aUJBQ007WUFDTCxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxRQUFRLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1dBQ2pFO1NBQ0Y7T0FDRixDQUFDO01BQ0YsTUFBTSxjQUFjLHFCQUFxQixRQUFRLEtBQUssQ0FBQyxFQUFFLFlBQVksTUFBTSxRQUFRLEtBQUssS0FBSyxLQUFLLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDaEgsTUFBTSxpQkFBaUIsRUFBRSxhQUFhLFFBQVEsRUFBRSxDQUFDO01BQ2pELE9BQU87UUFDTCxLQUFLO1VBQ0gsS0FBSyxLQUFLO1VBQ1YsU0FBUyxDQUFDLHdCQUF3QixDQUFDO1VBQ25DLFlBQVk7WUFDVixHQUFHLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM1QyxHQUFHLFNBQVMsR0FBRyxjQUFjLEdBQUcsRUFBRTtXQUNuQztTQUNGO1FBQ0QsWUFBWSxFQUFFO1FBQ2QsWUFBWSxRQUFRLENBQUM7VUFDbkIsZ0JBQWdCLFFBQVEsQ0FBQyxDQUFDLENBQUM7VUFDM0IsVUFBVSxPQUFPLENBQUM7WUFDaEIsU0FBUyxDQUFDLEdBQUcsV0FBVyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxXQUFXO1lBQ1gsZ0JBQWdCO1lBQ2hCLGFBQWEsSUFBSTtXQUNsQixDQUFDO1NBQ0gsQ0FBQztPQUNILENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxtQkFBbUIscURBQXFELFVBQVUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN6SixNQUFNLGtCQUFrQiwrQkFBK0I7TUFDckQsTUFBTSxXQUFXLFVBQVUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQy9FLE9BQU8sV0FBVyxNQUFNLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUN6QyxDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsUUFBUTtNQUMvQixNQUFNLFdBQVc7UUFDZixLQUFLO1VBQ0gsS0FBSyxLQUFLO1VBQ1YsU0FBUyxDQUFDLHdCQUF3QixDQUFDO1NBQ3BDO1FBQ0QsWUFBWSxDQUFDO1lBQ1QsS0FBSztjQUNILEtBQUssS0FBSztjQUNWLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQzthQUNyQztZQUNELFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLEVBQUUsRUFBRTtnQkFDaEMsS0FBSztrQkFDSCxLQUFLLFFBQVE7a0JBQ2IsWUFBWSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUU7aUJBQzlCO2dCQUNELFlBQVksUUFBUSxDQUFDO2tCQUNuQixXQUFXLE9BQU8sQ0FBQyxFQUFFLENBQUM7a0JBQ3RCLFFBQVEsT0FBTyxDQUFDLEVBQUUsQ0FBQztpQkFDcEIsQ0FBQztlQUNILENBQUMsQ0FBQztXQUNOLENBQUM7UUFDSixZQUFZLFFBQVEsQ0FBQyxDQUFDLE1BQU0sT0FBTyxDQUFDO1lBQ2hDLE1BQU0sU0FBUztZQUNmLGNBQWMsR0FBRyxDQUFDLFlBQVksQ0FBQztXQUNoQyxDQUFDLENBQUMsQ0FBQztPQUNQLENBQUM7TUFDRixPQUFPLFdBQVcsTUFBTSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDekMsQ0FBQzs7SUFFRixzQkFBc0I7TUFDcEIseUJBQXlCLENBQUM7TUFDMUIsT0FBTyxVQUFVLFVBQVUsSUFBSSxPQUFPLE1BQU0sSUFBSSxRQUFRLElBQUksT0FBTyxNQUFNLFNBQVMsR0FBRyxlQUFlO1FBQ2xHLE9BQU8sT0FBTyxHQUFHLENBQUM7T0FDbkIsR0FBRyxlQUFlO1FBQ2pCLE9BQU8sR0FBRyxJQUFJLFVBQVUsSUFBSSxPQUFPLE1BQU0sSUFBSSxHQUFHLFlBQVksS0FBSyxNQUFNLElBQUksR0FBRyxLQUFLLE1BQU0sVUFBVSxHQUFHLFFBQVEsR0FBRyxPQUFPLEdBQUcsQ0FBQztPQUM3SCxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNqQjtJQUNELCtCQUErQjtNQUM3QixrQkFBa0IsTUFBTSxlQUFlLElBQUksK0JBQStCO1FBQ3hFLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNoQixPQUFPLENBQUMsQ0FBQztPQUNWLENBQUM7TUFDRixPQUFPLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDOUI7SUFDRCxxQ0FBcUM7TUFDbkMsSUFBSSxPQUFPLE9BQU8sS0FBSyxXQUFXLElBQUksQ0FBQyxPQUFPLFVBQVU7UUFDdEQsT0FBTyxLQUFLLENBQUM7TUFDZixJQUFJLE9BQU8sVUFBVSxLQUFLO1FBQ3hCLE9BQU8sS0FBSyxDQUFDO01BQ2YsSUFBSSxPQUFPLEtBQUssS0FBSyxVQUFVO1FBQzdCLE9BQU8sSUFBSSxDQUFDO01BQ2QsSUFBSTtRQUNGLE9BQU8sVUFBVSxRQUFRLEtBQUssQ0FBQyxPQUFPLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLFlBQVk7U0FDekUsQ0FBQyxDQUFDLENBQUM7UUFDSixPQUFPLElBQUksQ0FBQztPQUNiLENBQUMsVUFBVTtRQUNWLE9BQU8sS0FBSyxDQUFDO09BQ2Q7S0FDRjtJQUNELHlDQUF5QztNQUN2QyxJQUFJLHlCQUF5QixFQUFFLEVBQUU7UUFDL0IsYUFBYSxPQUFPLFVBQVUsQ0FBQztPQUNoQyxNQUFNO1FBQ0wsYUFBYSx5Q0FBeUM7VUFDcEQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDZixDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztVQUN0QixJQUFJLGNBQWMsUUFBUSxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7VUFDakQsSUFBSSxXQUFXLElBQUksV0FBVyxFQUFFLENBQUM7VUFDakMsSUFBSSxLQUFLO1lBQ1AsZUFBZSxDQUFDLFFBQVEsRUFBRSxLQUFLLFVBQVUsQ0FBQyxDQUFDO1VBQzdDLE9BQU8sUUFBUSxDQUFDO1NBQ2pCLENBQUM7T0FDSDtNQUNELE9BQU8sVUFBVSxNQUFNLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQzFDO0lBQ0QsaUNBQWlDO01BQy9CLE9BQU8sa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksMkJBQTJCLENBQUMsR0FBRyxDQUFDLElBQUksa0JBQWtCLEVBQUUsQ0FBQztLQUNySDtJQUNELGlDQUFpQztNQUMvQixJQUFJLEtBQUssUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUNwQixPQUFPLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2pDO0lBQ0QsZ0NBQWdDO01BQzlCLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxNQUFNLFNBQVMsQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSTtRQUM5RixPQUFPLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzNCO0lBQ0QsZ0RBQWdEO01BQzlDLElBQUksQ0FBQyxDQUFDO1FBQ0osT0FBTztNQUNULElBQUksT0FBTyxDQUFDLEtBQUssUUFBUTtRQUN2QixPQUFPLGlCQUFpQixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztNQUN0QyxJQUFJLElBQUksTUFBTSxVQUFVLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDdkQsSUFBSSxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsWUFBWTtRQUNqQyxJQUFJLENBQUMsWUFBWSxLQUFLLENBQUM7TUFDekIsSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLO1FBQzVCLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDdkIsSUFBSSxDQUFDLEtBQUssV0FBVyxJQUFJLDBDQUEwQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8saUJBQWlCLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ3ZDO0lBQ0QscUNBQXFDO01BQ25DLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxPQUFPO1FBQ2pDLE1BQU0sR0FBRyxPQUFPLENBQUM7TUFDbkIsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUU7UUFDakQsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNuQixPQUFPLElBQUksQ0FBQztLQUNiO0lBQ0QsOEJBQThCO01BQzVCLE1BQU0sSUFBSSxTQUFTLENBQUMsc0lBQXNJLENBQUMsQ0FBQztLQUM3SjtJQUNELElBQUksaUJBQWlCLE1BQU0sZUFBZSxFQUFFLGlCQUFpQixNQUFNLGVBQWUsRUFBRSxXQUFXLE1BQU0sU0FBUyxFQUFFLGlCQUFpQixNQUFNLGVBQWUsRUFBRSwyQkFBMkIsTUFBTSx5QkFBeUIsQ0FBQztJQUNuTixJQUFJLFNBQVMsTUFBTSxPQUFPLEVBQUUsT0FBTyxNQUFNLEtBQUssRUFBRSxTQUFTLE1BQU0sT0FBTyxDQUFDO0lBQ3ZFLElBQUksT0FBTyxPQUFPLE9BQU8sS0FBSyxXQUFXLElBQUksT0FBTyxFQUFFLFFBQVEsSUFBSSxNQUFNLEVBQUUsWUFBWSxJQUFJLFVBQVUsQ0FBQztJQUNyRyxJQUFJLENBQUMsS0FBSyxFQUFFO01BQ1YsUUFBUSxxQ0FBcUM7UUFDM0MsT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDbkMsQ0FBQztLQUNIO0lBQ0QsSUFBSSxDQUFDLE1BQU0sRUFBRTtNQUNYLFNBQVMsbUJBQW1CO1FBQzFCLE9BQU8sQ0FBQyxDQUFDO09BQ1YsQ0FBQztLQUNIO0lBQ0QsSUFBSSxDQUFDLElBQUksRUFBRTtNQUNULE9BQU8saUJBQWlCO1FBQ3RCLE9BQU8sQ0FBQyxDQUFDO09BQ1YsQ0FBQztLQUNIO0lBQ0QsSUFBSSxDQUFDLFNBQVMsRUFBRTtNQUNkLFlBQVksK0JBQStCO1FBQ3pDLE9BQU8sVUFBVSxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO09BQ25ELENBQUM7S0FDSDtJQUNELElBQUksZUFBZSxPQUFPLENBQUMsS0FBSyxVQUFVLFFBQVEsQ0FBQyxDQUFDO0lBQ3BELElBQUksV0FBVyxPQUFPLENBQUMsS0FBSyxVQUFVLElBQUksQ0FBQyxDQUFDO0lBQzVDLElBQUksWUFBWSxPQUFPLENBQUMsS0FBSyxVQUFVLEtBQUssQ0FBQyxDQUFDO0lBQzlDLElBQUksb0JBQW9CLE9BQU8sQ0FBQyxNQUFNLFVBQVUsWUFBWSxDQUFDLENBQUM7SUFDOUQsSUFBSSxjQUFjLE9BQU8sQ0FBQyxNQUFNLFVBQVUsTUFBTSxDQUFDLENBQUM7SUFDbEQsSUFBSSxnQkFBZ0IsT0FBTyxDQUFDLE1BQU0sVUFBVSxRQUFRLENBQUMsQ0FBQztJQUN0RCxJQUFJLGdCQUFnQixPQUFPLENBQUMsTUFBTSxVQUFVLFFBQVEsQ0FBQyxDQUFDO0lBQ3RELElBQUksYUFBYSxPQUFPLENBQUMsTUFBTSxVQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ2hELElBQUksYUFBYSxPQUFPLENBQUMsTUFBTSxVQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ2hELElBQUksa0JBQWtCLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3Qyx1QkFBdUI7TUFDckIsT0FBTyxtQkFBbUI7UUFDeEIsS0FBSyxJQUFJLE9BQU8sU0FBUyxPQUFPLEVBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRTtVQUMxRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNsQztRQUNELE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDbkMsQ0FBQztLQUNIO0lBQ0QsMkJBQTJCO01BQ3pCLE9BQU8sWUFBWTtRQUNqQixLQUFLLElBQUksUUFBUSxTQUFTLE9BQU8sRUFBRSxPQUFPLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7VUFDN0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNoQztRQUNELE9BQU8sU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztPQUM5QixDQUFDO0tBQ0g7SUFDRCw4QkFBOEI7TUFDNUIsSUFBSSxjQUFjLEVBQUU7UUFDbEIsY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUMzQjtNQUNELElBQUksSUFBSSxLQUFLLE9BQU8sQ0FBQztNQUNyQixPQUFPLENBQUMsRUFBRSxFQUFFO1FBQ1YsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRTtVQUMvQixJQUFJLFlBQVksaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7VUFDM0MsSUFBSSxTQUFTLEtBQUssT0FBTyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7Y0FDcEIsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQzthQUN0QjtZQUNELFVBQVUsU0FBUyxDQUFDO1dBQ3JCO1NBQ0Y7UUFDRCxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDO09BQ3JCO01BQ0QsT0FBTyxHQUFHLENBQUM7S0FDWjtJQUNELHVCQUF1QjtNQUNyQixJQUFJLFlBQVksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzdCLElBQUksUUFBUSxDQUFDO01BQ2IsS0FBSyxRQUFRLElBQUksTUFBTSxFQUFFO1FBQ3ZCLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO1VBQzdDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDeEM7T0FDRjtNQUNELE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0lBQ0Qsb0NBQW9DO01BQ2xDLE9BQU8sTUFBTSxLQUFLLElBQUksRUFBRTtRQUN0QixJQUFJLE9BQU8sd0JBQXdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xELElBQUksSUFBSSxFQUFFO1VBQ1IsSUFBSSxJQUFJLElBQUksRUFBRTtZQUNaLE9BQU8sT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7V0FDMUI7VUFDRCxJQUFJLE9BQU8sSUFBSSxNQUFNLEtBQUssVUFBVSxFQUFFO1lBQ3BDLE9BQU8sT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUM7V0FDNUI7U0FDRjtRQUNELFNBQVMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQ2pDO01BQ0QsZ0NBQWdDO1FBQzlCLE9BQU8sS0FBSyxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDO09BQ2I7TUFDRCxPQUFPLGFBQWEsQ0FBQztLQUN0QjtJQUNELElBQUksU0FBUyxNQUFNLENBQUM7TUFDbEIsR0FBRztNQUNILE1BQU07TUFDTixTQUFTO01BQ1QsU0FBUztNQUNULE1BQU07TUFDTixTQUFTO01BQ1QsT0FBTztNQUNQLE9BQU87TUFDUCxHQUFHO01BQ0gsS0FBSztNQUNMLEtBQUs7TUFDTCxLQUFLO01BQ0wsT0FBTztNQUNQLFlBQVk7TUFDWixNQUFNO01BQ04sSUFBSTtNQUNKLFFBQVE7TUFDUixRQUFRO01BQ1IsU0FBUztNQUNULFFBQVE7TUFDUixNQUFNO01BQ04sTUFBTTtNQUNOLEtBQUs7TUFDTCxVQUFVO01BQ1YsU0FBUztNQUNULE1BQU07TUFDTixVQUFVO01BQ1YsSUFBSTtNQUNKLFdBQVc7TUFDWCxLQUFLO01BQ0wsU0FBUztNQUNULEtBQUs7TUFDTCxRQUFRO01BQ1IsS0FBSztNQUNMLEtBQUs7TUFDTCxJQUFJO01BQ0osSUFBSTtNQUNKLFNBQVM7TUFDVCxJQUFJO01BQ0osVUFBVTtNQUNWLFlBQVk7TUFDWixRQUFRO01BQ1IsTUFBTTtNQUNOLFFBQVE7TUFDUixNQUFNO01BQ04sSUFBSTtNQUNKLElBQUk7TUFDSixJQUFJO01BQ0osSUFBSTtNQUNKLElBQUk7TUFDSixJQUFJO01BQ0osTUFBTTtNQUNOLFFBQVE7TUFDUixRQUFRO01BQ1IsSUFBSTtNQUNKLE1BQU07TUFDTixHQUFHO01BQ0gsS0FBSztNQUNMLE9BQU87TUFDUCxLQUFLO01BQ0wsS0FBSztNQUNMLE9BQU87TUFDUCxRQUFRO01BQ1IsSUFBSTtNQUNKLE1BQU07TUFDTixLQUFLO01BQ0wsTUFBTTtNQUNOLFNBQVM7TUFDVCxNQUFNO01BQ04sVUFBVTtNQUNWLE9BQU87TUFDUCxLQUFLO01BQ0wsTUFBTTtNQUNOLElBQUk7TUFDSixVQUFVO01BQ1YsUUFBUTtNQUNSLFFBQVE7TUFDUixHQUFHO01BQ0gsU0FBUztNQUNULEtBQUs7TUFDTCxVQUFVO01BQ1YsR0FBRztNQUNILElBQUk7TUFDSixJQUFJO01BQ0osTUFBTTtNQUNOLEdBQUc7TUFDSCxNQUFNO01BQ04sU0FBUztNQUNULFFBQVE7TUFDUixRQUFRO01BQ1IsT0FBTztNQUNQLFFBQVE7TUFDUixRQUFRO01BQ1IsTUFBTTtNQUNOLFFBQVE7TUFDUixRQUFRO01BQ1IsT0FBTztNQUNQLEtBQUs7TUFDTCxTQUFTO01BQ1QsS0FBSztNQUNMLE9BQU87TUFDUCxPQUFPO01BQ1AsSUFBSTtNQUNKLFVBQVU7TUFDVixVQUFVO01BQ1YsT0FBTztNQUNQLElBQUk7TUFDSixPQUFPO01BQ1AsTUFBTTtNQUNOLElBQUk7TUFDSixPQUFPO01BQ1AsSUFBSTtNQUNKLEdBQUc7TUFDSCxJQUFJO01BQ0osS0FBSztNQUNMLE9BQU87TUFDUCxLQUFLO0tBQ04sQ0FBQyxDQUFDO0lBQ0gsSUFBSSxRQUFRLE1BQU0sQ0FBQztNQUNqQixLQUFLO01BQ0wsR0FBRztNQUNILFVBQVU7TUFDVixhQUFhO01BQ2IsY0FBYztNQUNkLGNBQWM7TUFDZCxlQUFlO01BQ2Ysa0JBQWtCO01BQ2xCLFFBQVE7TUFDUixVQUFVO01BQ1YsTUFBTTtNQUNOLE1BQU07TUFDTixTQUFTO01BQ1QsUUFBUTtNQUNSLE1BQU07TUFDTixHQUFHO01BQ0gsT0FBTztNQUNQLFVBQVU7TUFDVixPQUFPO01BQ1AsT0FBTztNQUNQLE1BQU07TUFDTixnQkFBZ0I7TUFDaEIsUUFBUTtNQUNSLE1BQU07TUFDTixVQUFVO01BQ1YsT0FBTztNQUNQLE1BQU07TUFDTixTQUFTO01BQ1QsU0FBUztNQUNULFVBQVU7TUFDVixnQkFBZ0I7TUFDaEIsTUFBTTtNQUNOLE1BQU07TUFDTixPQUFPO01BQ1AsUUFBUTtNQUNSLFFBQVE7TUFDUixNQUFNO01BQ04sVUFBVTtNQUNWLE9BQU87TUFDUCxNQUFNO01BQ04sT0FBTztNQUNQLE1BQU07TUFDTixPQUFPO0tBQ1IsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxhQUFhLE1BQU0sQ0FBQztNQUN0QixTQUFTO01BQ1QsZUFBZTtNQUNmLHFCQUFxQjtNQUNyQixhQUFhO01BQ2Isa0JBQWtCO01BQ2xCLG1CQUFtQjtNQUNuQixtQkFBbUI7TUFDbkIsZ0JBQWdCO01BQ2hCLFNBQVM7TUFDVCxTQUFTO01BQ1QsU0FBUztNQUNULFNBQVM7TUFDVCxTQUFTO01BQ1QsZ0JBQWdCO01BQ2hCLFNBQVM7TUFDVCxTQUFTO01BQ1QsYUFBYTtNQUNiLGNBQWM7TUFDZCxVQUFVO01BQ1YsY0FBYztNQUNkLG9CQUFvQjtNQUNwQixhQUFhO01BQ2IsUUFBUTtNQUNSLGNBQWM7S0FDZixDQUFDLENBQUM7SUFDSCxJQUFJLGdCQUFnQixNQUFNLENBQUM7TUFDekIsU0FBUztNQUNULGVBQWU7TUFDZixRQUFRO01BQ1IsU0FBUztNQUNULGNBQWM7TUFDZCxXQUFXO01BQ1gsa0JBQWtCO01BQ2xCLGdCQUFnQjtNQUNoQixlQUFlO01BQ2YsZUFBZTtNQUNmLGVBQWU7TUFDZixPQUFPO01BQ1AsV0FBVztNQUNYLE1BQU07TUFDTixjQUFjO01BQ2QsV0FBVztNQUNYLFNBQVM7TUFDVCxlQUFlO01BQ2YsUUFBUTtNQUNSLEtBQUs7TUFDTCxZQUFZO01BQ1osU0FBUztNQUNULEtBQUs7S0FDTixDQUFDLENBQUM7SUFDSCxJQUFJLFdBQVcsTUFBTSxDQUFDO01BQ3BCLE1BQU07TUFDTixVQUFVO01BQ1YsUUFBUTtNQUNSLFNBQVM7TUFDVCxPQUFPO01BQ1AsUUFBUTtNQUNSLElBQUk7TUFDSixZQUFZO01BQ1osZUFBZTtNQUNmLElBQUk7TUFDSixJQUFJO01BQ0osT0FBTztNQUNQLFNBQVM7TUFDVCxVQUFVO01BQ1YsT0FBTztNQUNQLE1BQU07TUFDTixJQUFJO01BQ0osUUFBUTtNQUNSLE9BQU87TUFDUCxRQUFRO01BQ1IsTUFBTTtNQUNOLE1BQU07TUFDTixTQUFTO01BQ1QsUUFBUTtNQUNSLEtBQUs7TUFDTCxPQUFPO01BQ1AsS0FBSztNQUNMLFFBQVE7TUFDUixZQUFZO0tBQ2IsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxtQkFBbUIsTUFBTSxDQUFDO01BQzVCLFNBQVM7TUFDVCxhQUFhO01BQ2IsWUFBWTtNQUNaLFVBQVU7TUFDVixXQUFXO01BQ1gsU0FBUztNQUNULFNBQVM7TUFDVCxRQUFRO01BQ1IsUUFBUTtNQUNSLE9BQU87TUFDUCxXQUFXO01BQ1gsWUFBWTtNQUNaLGdCQUFnQjtNQUNoQixhQUFhO01BQ2IsTUFBTTtLQUNQLENBQUMsQ0FBQztJQUNILElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzdCLElBQUksT0FBTyxNQUFNLENBQUM7TUFDaEIsUUFBUTtNQUNSLFFBQVE7TUFDUixPQUFPO01BQ1AsS0FBSztNQUNMLGdCQUFnQjtNQUNoQixjQUFjO01BQ2Qsc0JBQXNCO01BQ3RCLFVBQVU7TUFDVixZQUFZO01BQ1osU0FBUztNQUNULFFBQVE7TUFDUixTQUFTO01BQ1QsYUFBYTtNQUNiLGFBQWE7TUFDYixTQUFTO01BQ1QsTUFBTTtNQUNOLE9BQU87TUFDUCxPQUFPO01BQ1AsT0FBTztNQUNQLE1BQU07TUFDTixTQUFTO01BQ1QsVUFBVTtNQUNWLGNBQWM7TUFDZCxRQUFRO01BQ1IsYUFBYTtNQUNiLFVBQVU7TUFDVixVQUFVO01BQ1YsU0FBUztNQUNULEtBQUs7TUFDTCxVQUFVO01BQ1YseUJBQXlCO01BQ3pCLHVCQUF1QjtNQUN2QixVQUFVO01BQ1YsV0FBVztNQUNYLFNBQVM7TUFDVCxjQUFjO01BQ2QsTUFBTTtNQUNOLEtBQUs7TUFDTCxTQUFTO01BQ1QsUUFBUTtNQUNSLFFBQVE7TUFDUixNQUFNO01BQ04sTUFBTTtNQUNOLFVBQVU7TUFDVixJQUFJO01BQ0osV0FBVztNQUNYLFdBQVc7TUFDWCxPQUFPO01BQ1AsTUFBTTtNQUNOLE9BQU87TUFDUCxNQUFNO01BQ04sTUFBTTtNQUNOLFNBQVM7TUFDVCxNQUFNO01BQ04sS0FBSztNQUNMLEtBQUs7TUFDTCxXQUFXO01BQ1gsT0FBTztNQUNQLFFBQVE7TUFDUixLQUFLO01BQ0wsV0FBVztNQUNYLFVBQVU7TUFDVixPQUFPO01BQ1AsTUFBTTtNQUNOLE9BQU87TUFDUCxTQUFTO01BQ1QsWUFBWTtNQUNaLFFBQVE7TUFDUixNQUFNO01BQ04sU0FBUztNQUNULFNBQVM7TUFDVCxhQUFhO01BQ2IsYUFBYTtNQUNiLFFBQVE7TUFDUixTQUFTO01BQ1QsU0FBUztNQUNULFlBQVk7TUFDWixVQUFVO01BQ1YsS0FBSztNQUNMLFVBQVU7TUFDVixLQUFLO01BQ0wsVUFBVTtNQUNWLE1BQU07TUFDTixNQUFNO01BQ04sU0FBUztNQUNULFlBQVk7TUFDWixPQUFPO01BQ1AsVUFBVTtNQUNWLE9BQU87TUFDUCxNQUFNO01BQ04sT0FBTztNQUNQLE1BQU07TUFDTixTQUFTO01BQ1QsT0FBTztNQUNQLEtBQUs7TUFDTCxRQUFRO01BQ1IsTUFBTTtNQUNOLE9BQU87TUFDUCxTQUFTO01BQ1QsVUFBVTtNQUNWLE9BQU87TUFDUCxXQUFXO01BQ1gsTUFBTTtNQUNOLFFBQVE7TUFDUixRQUFRO01BQ1IsT0FBTztNQUNQLE9BQU87TUFDUCxPQUFPO01BQ1AsTUFBTTtLQUNQLENBQUMsQ0FBQztJQUNILElBQUksTUFBTSxNQUFNLENBQUM7TUFDZixlQUFlO01BQ2YsWUFBWTtNQUNaLFVBQVU7TUFDVixvQkFBb0I7TUFDcEIsUUFBUTtNQUNSLGVBQWU7TUFDZixlQUFlO01BQ2YsU0FBUztNQUNULGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsT0FBTztNQUNQLE1BQU07TUFDTixJQUFJO01BQ0osT0FBTztNQUNQLE1BQU07TUFDTixlQUFlO01BQ2YsV0FBVztNQUNYLFdBQVc7TUFDWCxPQUFPO01BQ1AscUJBQXFCO01BQ3JCLDZCQUE2QjtNQUM3QixlQUFlO01BQ2YsaUJBQWlCO01BQ2pCLElBQUk7TUFDSixJQUFJO01BQ0osR0FBRztNQUNILElBQUk7TUFDSixJQUFJO01BQ0osaUJBQWlCO01BQ2pCLFdBQVc7TUFDWCxTQUFTO01BQ1QsU0FBUztNQUNULEtBQUs7TUFDTCxVQUFVO01BQ1YsV0FBVztNQUNYLEtBQUs7TUFDTCxNQUFNO01BQ04sY0FBYztNQUNkLFdBQVc7TUFDWCxRQUFRO01BQ1IsYUFBYTtNQUNiLGFBQWE7TUFDYixlQUFlO01BQ2YsYUFBYTtNQUNiLFdBQVc7TUFDWCxrQkFBa0I7TUFDbEIsY0FBYztNQUNkLFlBQVk7TUFDWixjQUFjO01BQ2QsYUFBYTtNQUNiLElBQUk7TUFDSixJQUFJO01BQ0osSUFBSTtNQUNKLElBQUk7TUFDSixZQUFZO01BQ1osVUFBVTtNQUNWLGVBQWU7TUFDZixtQkFBbUI7TUFDbkIsUUFBUTtNQUNSLE1BQU07TUFDTixJQUFJO01BQ0osaUJBQWlCO01BQ2pCLElBQUk7TUFDSixLQUFLO01BQ0wsR0FBRztNQUNILElBQUk7TUFDSixJQUFJO01BQ0osSUFBSTtNQUNKLElBQUk7TUFDSixTQUFTO01BQ1QsV0FBVztNQUNYLFlBQVk7TUFDWixVQUFVO01BQ1YsTUFBTTtNQUNOLGNBQWM7TUFDZCxnQkFBZ0I7TUFDaEIsY0FBYztNQUNkLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsT0FBTztNQUNQLFlBQVk7TUFDWixZQUFZO01BQ1osY0FBYztNQUNkLGNBQWM7TUFDZCxhQUFhO01BQ2IsYUFBYTtNQUNiLGtCQUFrQjtNQUNsQixXQUFXO01BQ1gsS0FBSztNQUNMLE1BQU07TUFDTixPQUFPO01BQ1AsUUFBUTtNQUNSLE1BQU07TUFDTixLQUFLO01BQ0wsTUFBTTtNQUNOLFlBQVk7TUFDWixRQUFRO01BQ1IsVUFBVTtNQUNWLFNBQVM7TUFDVCxPQUFPO01BQ1AsUUFBUTtNQUNSLGFBQWE7TUFDYixRQUFRO01BQ1IsVUFBVTtNQUNWLGFBQWE7TUFDYixNQUFNO01BQ04sWUFBWTtNQUNaLHFCQUFxQjtNQUNyQixrQkFBa0I7TUFDbEIsY0FBYztNQUNkLFFBQVE7TUFDUixlQUFlO01BQ2YscUJBQXFCO01BQ3JCLGdCQUFnQjtNQUNoQixHQUFHO01BQ0gsSUFBSTtNQUNKLElBQUk7TUFDSixRQUFRO01BQ1IsTUFBTTtNQUNOLE1BQU07TUFDTixhQUFhO01BQ2IsV0FBVztNQUNYLFNBQVM7TUFDVCxRQUFRO01BQ1IsUUFBUTtNQUNSLE9BQU87TUFDUCxNQUFNO01BQ04saUJBQWlCO01BQ2pCLGtCQUFrQjtNQUNsQixrQkFBa0I7TUFDbEIsY0FBYztNQUNkLGFBQWE7TUFDYixjQUFjO01BQ2QsYUFBYTtNQUNiLFlBQVk7TUFDWixjQUFjO01BQ2Qsa0JBQWtCO01BQ2xCLG1CQUFtQjtNQUNuQixnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLG1CQUFtQjtNQUNuQixnQkFBZ0I7TUFDaEIsUUFBUTtNQUNSLGNBQWM7TUFDZCxPQUFPO01BQ1AsY0FBYztNQUNkLGdCQUFnQjtNQUNoQixVQUFVO01BQ1YsU0FBUztNQUNULFNBQVM7TUFDVCxXQUFXO01BQ1gsa0JBQWtCO01BQ2xCLGFBQWE7TUFDYixpQkFBaUI7TUFDakIsZ0JBQWdCO01BQ2hCLFlBQVk7TUFDWixNQUFNO01BQ04sSUFBSTtNQUNKLElBQUk7TUFDSixTQUFTO01BQ1QsUUFBUTtNQUNSLFNBQVM7TUFDVCxZQUFZO01BQ1osU0FBUztNQUNULFlBQVk7TUFDWixlQUFlO01BQ2YsZUFBZTtNQUNmLE9BQU87TUFDUCxjQUFjO01BQ2QsTUFBTTtNQUNOLGNBQWM7TUFDZCxrQkFBa0I7TUFDbEIsa0JBQWtCO01BQ2xCLEdBQUc7TUFDSCxJQUFJO01BQ0osSUFBSTtNQUNKLE9BQU87TUFDUCxHQUFHO01BQ0gsSUFBSTtNQUNKLElBQUk7TUFDSixHQUFHO01BQ0gsWUFBWTtLQUNiLENBQUMsQ0FBQztJQUNILElBQUksU0FBUyxNQUFNLENBQUM7TUFDbEIsUUFBUTtNQUNSLGFBQWE7TUFDYixPQUFPO01BQ1AsVUFBVTtNQUNWLE9BQU87TUFDUCxjQUFjO01BQ2QsYUFBYTtNQUNiLFlBQVk7TUFDWixZQUFZO01BQ1osT0FBTztNQUNQLEtBQUs7TUFDTCxTQUFTO01BQ1QsY0FBYztNQUNkLFVBQVU7TUFDVixPQUFPO01BQ1AsT0FBTztNQUNQLFFBQVE7TUFDUixNQUFNO01BQ04sSUFBSTtNQUNKLFNBQVM7TUFDVCxRQUFRO01BQ1IsZUFBZTtNQUNmLFFBQVE7TUFDUixRQUFRO01BQ1IsZ0JBQWdCO01BQ2hCLFdBQVc7TUFDWCxVQUFVO01BQ1YsYUFBYTtNQUNiLFNBQVM7TUFDVCxTQUFTO01BQ1QsZUFBZTtNQUNmLFVBQVU7TUFDVixVQUFVO01BQ1YsTUFBTTtNQUNOLFVBQVU7TUFDVixVQUFVO01BQ1YsWUFBWTtNQUNaLFNBQVM7TUFDVCxRQUFRO01BQ1IsUUFBUTtNQUNSLGFBQWE7TUFDYixlQUFlO01BQ2Ysc0JBQXNCO01BQ3RCLFdBQVc7TUFDWCxXQUFXO01BQ1gsWUFBWTtNQUNaLFVBQVU7TUFDVixnQkFBZ0I7TUFDaEIsZ0JBQWdCO01BQ2hCLFdBQVc7TUFDWCxTQUFTO01BQ1QsT0FBTztNQUNQLE9BQU87S0FDUixDQUFDLENBQUM7SUFDSCxJQUFJLE1BQU0sTUFBTSxDQUFDO01BQ2YsWUFBWTtNQUNaLFFBQVE7TUFDUixhQUFhO01BQ2IsV0FBVztNQUNYLGFBQWE7S0FDZCxDQUFDLENBQUM7SUFDSCxJQUFJLGdCQUFnQixJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUN0RCxJQUFJLFdBQVcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDN0MsSUFBSSxZQUFZLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ25ELElBQUksWUFBWSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN2QyxJQUFJLGlCQUFpQixJQUFJLENBQUMsdUZBQXVGLENBQUMsQ0FBQztJQUNuSCxJQUFJLG9CQUFvQixJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUN0RCxJQUFJLGtCQUFrQixJQUFJLENBQUMsNkRBQTZELENBQUMsQ0FBQztJQUMxRixJQUFJLGVBQWUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25DLElBQUksWUFBWSxxQkFBcUI7TUFDbkMsT0FBTyxPQUFPLE1BQU0sS0FBSyxXQUFXLEdBQUcsSUFBSSxHQUFHLE1BQU0sQ0FBQztLQUN0RCxDQUFDO0lBQ0YsSUFBSSw0QkFBNEIsMkRBQTJEO01BQ3pGLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLFFBQVEsSUFBSSxPQUFPLFlBQVksYUFBYSxLQUFLLFVBQVUsRUFBRTtRQUN6RixPQUFPLElBQUksQ0FBQztPQUNiO01BQ0QsSUFBSSxTQUFTLElBQUksQ0FBQztNQUNsQixJQUFJLFlBQVksdUJBQXVCLENBQUM7TUFDeEMsSUFBSSxRQUFRLGNBQWMsSUFBSSxRQUFRLGNBQWMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQzVFLFNBQVMsUUFBUSxjQUFjLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztPQUN6RDtNQUNELElBQUksYUFBYSxXQUFXLElBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7TUFDNUQsSUFBSTtRQUNGLE9BQU8sWUFBWSxhQUFhLENBQUMsVUFBVSxFQUFFO1VBQzNDLFlBQVksMEJBQTBCO1lBQ3BDLE9BQU8sSUFBSSxDQUFDO1dBQ2I7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDLFVBQVU7UUFDVixPQUFPLEtBQUssQ0FBQyxzQkFBc0IsR0FBRyxVQUFVLEdBQUcsd0JBQXdCLENBQUMsQ0FBQztRQUM3RSxPQUFPLElBQUksQ0FBQztPQUNiO0tBQ0YsQ0FBQztJQUNGLDJCQUEyQjtNQUN6QixJQUFJLFNBQVMsU0FBUyxPQUFPLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDO01BQzdGLElBQUksWUFBWSx5QkFBeUI7UUFDdkMsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDOUIsQ0FBQztNQUNGLFNBQVMsUUFBUSxHQUFHLE9BQU8sQ0FBQztNQUM1QixTQUFTLFFBQVEsR0FBRyxFQUFFLENBQUM7TUFDdkIsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sU0FBUyxJQUFJLE1BQU0sU0FBUyxTQUFTLEtBQUssQ0FBQyxFQUFFO1FBQ2pFLFNBQVMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUM5QixPQUFPLFNBQVMsQ0FBQztPQUNsQjtNQUNELElBQUksbUJBQW1CLE1BQU0sU0FBUyxDQUFDO01BQ3ZDLElBQUksV0FBVyxNQUFNLFNBQVMsQ0FBQztNQUMvQixJQUFJLG1CQUFtQixNQUFNLGlCQUFpQixFQUFFLHNCQUFzQixNQUFNLG9CQUFvQixFQUFFLE9BQU8sTUFBTSxLQUFLLEVBQUUsVUFBVSxNQUFNLFFBQVEsRUFBRSxhQUFhLE1BQU0sV0FBVyxFQUFFLHVCQUF1QixNQUFNLGFBQWEsRUFBRSxlQUFlLG9CQUFvQixLQUFLLEtBQUssQ0FBQyxHQUFHLE1BQU0sYUFBYSxJQUFJLE1BQU0sZ0JBQWdCLEdBQUcsb0JBQW9CLEVBQUUsa0JBQWtCLE1BQU0sZ0JBQWdCLEVBQUUsWUFBWSxNQUFNLFVBQVUsRUFBRSxlQUFlLE1BQU0sYUFBYSxDQUFDO01BQzliLElBQUksbUJBQW1CLE9BQU8sVUFBVSxDQUFDO01BQ3pDLElBQUksWUFBWSxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDNUQsSUFBSSxpQkFBaUIsWUFBWSxDQUFDLGdCQUFnQixFQUFFLGFBQWEsQ0FBQyxDQUFDO01BQ25FLElBQUksZ0JBQWdCLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsQ0FBQztNQUNqRSxJQUFJLGdCQUFnQixZQUFZLENBQUMsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLENBQUM7TUFDakUsSUFBSSxPQUFPLG1CQUFtQixLQUFLLFVBQVUsRUFBRTtRQUM3QyxJQUFJLFdBQVcsUUFBUSxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEQsSUFBSSxRQUFRLFFBQVEsSUFBSSxRQUFRLFFBQVEsY0FBYyxFQUFFO1VBQ3RELFdBQVcsUUFBUSxRQUFRLGNBQWMsQ0FBQztTQUMzQztPQUNGO01BQ0QsSUFBSSxxQkFBcUIseUJBQXlCLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDLENBQUM7TUFDbkYsSUFBSSxZQUFZLGtCQUFrQixHQUFHLGtCQUFrQixXQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO01BQzVFLElBQUksWUFBWSxRQUFRLEVBQUUsaUJBQWlCLFNBQVMsZUFBZSxFQUFFLHFCQUFxQixTQUFTLG1CQUFtQixFQUFFLHlCQUF5QixTQUFTLHVCQUF1QixFQUFFLHVCQUF1QixTQUFTLHFCQUFxQixDQUFDO01BQ3pPLElBQUksYUFBYSxnQkFBZ0IsV0FBVyxDQUFDO01BQzdDLElBQUksZUFBZSxFQUFFLENBQUM7TUFDdEIsSUFBSTtRQUNGLGVBQWUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsUUFBUSxhQUFhLEdBQUcsRUFBRSxDQUFDO09BQzFFLENBQUMsVUFBVTtPQUNYO01BQ0QsSUFBSSxRQUFRLEVBQUUsQ0FBQztNQUNmLFNBQVMsWUFBWSxHQUFHLE9BQU8sYUFBYSxLQUFLLFVBQVUsSUFBSSxjQUFjLElBQUksT0FBTyxjQUFjLG1CQUFtQixLQUFLLFdBQVcsSUFBSSxZQUFZLEtBQUssQ0FBQyxDQUFDO01BQ2hLLElBQUksa0JBQWtCLGFBQWEsRUFBRSxhQUFhLFFBQVEsRUFBRSxjQUFjLFNBQVMsRUFBRSxjQUFjLFNBQVMsRUFBRSxzQkFBc0IsaUJBQWlCLEVBQUUsb0JBQW9CLGVBQWUsQ0FBQztNQUMzTCxJQUFJLG1CQUFtQixjQUFjLENBQUM7TUFDdEMsSUFBSSxlQUFlLElBQUksQ0FBQztNQUN4QixJQUFJLHVCQUF1QixRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFFLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNsTSxJQUFJLGVBQWUsSUFBSSxDQUFDO01BQ3hCLElBQUksdUJBQXVCLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQzNKLElBQUksMEJBQTBCLE1BQU0sS0FBSyxDQUFDLE1BQU0sT0FBTyxDQUFDLElBQUksRUFBRTtRQUM1RCxjQUFjO1VBQ1osVUFBVSxJQUFJO1VBQ2QsY0FBYyxLQUFLO1VBQ25CLFlBQVksSUFBSTtVQUNoQixPQUFPLElBQUk7U0FDWjtRQUNELG9CQUFvQjtVQUNsQixVQUFVLElBQUk7VUFDZCxjQUFjLEtBQUs7VUFDbkIsWUFBWSxJQUFJO1VBQ2hCLE9BQU8sSUFBSTtTQUNaO1FBQ0QsZ0NBQWdDO1VBQzlCLFVBQVUsSUFBSTtVQUNkLGNBQWMsS0FBSztVQUNuQixZQUFZLElBQUk7VUFDaEIsT0FBTyxLQUFLO1NBQ2I7T0FDRixDQUFDLENBQUMsQ0FBQztNQUNKLElBQUksY0FBYyxJQUFJLENBQUM7TUFDdkIsSUFBSSxjQUFjLElBQUksQ0FBQztNQUN2QixJQUFJLGtCQUFrQixJQUFJLENBQUM7TUFDM0IsSUFBSSxrQkFBa0IsSUFBSSxDQUFDO01BQzNCLElBQUksMEJBQTBCLEtBQUssQ0FBQztNQUNwQyxJQUFJLHFCQUFxQixLQUFLLENBQUM7TUFDL0IsSUFBSSxpQkFBaUIsS0FBSyxDQUFDO01BQzNCLElBQUksYUFBYSxLQUFLLENBQUM7TUFDdkIsSUFBSSxhQUFhLEtBQUssQ0FBQztNQUN2QixJQUFJLGFBQWEsS0FBSyxDQUFDO01BQ3ZCLElBQUksc0JBQXNCLEtBQUssQ0FBQztNQUNoQyxJQUFJLHNCQUFzQixLQUFLLENBQUM7TUFDaEMsSUFBSSxlQUFlLElBQUksQ0FBQztNQUN4QixJQUFJLGVBQWUsSUFBSSxDQUFDO01BQ3hCLElBQUksV0FBVyxLQUFLLENBQUM7TUFDckIsSUFBSSxlQUFlLEVBQUUsQ0FBQztNQUN0QixJQUFJLGtCQUFrQixJQUFJLENBQUM7TUFDM0IsSUFBSSwwQkFBMEIsUUFBUSxDQUFDLEVBQUUsRUFBRTtRQUN6QyxnQkFBZ0I7UUFDaEIsT0FBTztRQUNQLFVBQVU7UUFDVixNQUFNO1FBQ04sZUFBZTtRQUNmLE1BQU07UUFDTixRQUFRO1FBQ1IsTUFBTTtRQUNOLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixPQUFPO1FBQ1AsU0FBUztRQUNULFVBQVU7UUFDVixVQUFVO1FBQ1YsV0FBVztRQUNYLFFBQVE7UUFDUixPQUFPO1FBQ1AsS0FBSztRQUNMLFVBQVU7UUFDVixPQUFPO1FBQ1AsT0FBTztRQUNQLE9BQU87UUFDUCxLQUFLO09BQ04sQ0FBQyxDQUFDO01BQ0gsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDO01BQ3pCLElBQUksd0JBQXdCLFFBQVEsQ0FBQyxFQUFFLEVBQUU7UUFDdkMsT0FBTztRQUNQLE9BQU87UUFDUCxLQUFLO1FBQ0wsUUFBUTtRQUNSLE9BQU87UUFDUCxPQUFPO09BQ1IsQ0FBQyxDQUFDO01BQ0gsSUFBSSxzQkFBc0IsSUFBSSxDQUFDO01BQy9CLElBQUksOEJBQThCLFFBQVEsQ0FBQyxFQUFFLEVBQUU7UUFDN0MsS0FBSztRQUNMLE9BQU87UUFDUCxLQUFLO1FBQ0wsSUFBSTtRQUNKLE9BQU87UUFDUCxNQUFNO1FBQ04sU0FBUztRQUNULGFBQWE7UUFDYixNQUFNO1FBQ04sU0FBUztRQUNULE9BQU87UUFDUCxPQUFPO1FBQ1AsT0FBTztRQUNQLE9BQU87T0FDUixDQUFDLENBQUM7TUFDSCxJQUFJLG1CQUFtQixvQ0FBb0MsQ0FBQztNQUM1RCxJQUFJLGdCQUFnQiw0QkFBNEIsQ0FBQztNQUNqRCxJQUFJLGlCQUFpQiw4QkFBOEIsQ0FBQztNQUNwRCxJQUFJLFlBQVksY0FBYyxDQUFDO01BQy9CLElBQUksaUJBQWlCLEtBQUssQ0FBQztNQUMzQixJQUFJLGlCQUFpQixDQUFDO01BQ3RCLElBQUksK0JBQStCO1FBQ2pDLHVCQUF1QjtRQUN2QixXQUFXO09BQ1osQ0FBQztNQUNGLElBQUksNEJBQTRCLFdBQVcsQ0FBQztNQUM1QyxJQUFJLGlCQUFpQixDQUFDO01BQ3RCLElBQUksU0FBUyxJQUFJLENBQUM7TUFDbEIsSUFBSSxjQUFjLFFBQVEsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ2pELElBQUksb0JBQW9CLHNDQUFzQztRQUM1RCxPQUFPLFNBQVMsWUFBWSxNQUFNLElBQUksU0FBUyxZQUFZLFFBQVEsQ0FBQztPQUNyRSxDQUFDO01BQ0YsSUFBSSxlQUFlLDJCQUEyQjtRQUM1QyxJQUFJLE1BQU0sSUFBSSxNQUFNLEtBQUssR0FBRyxFQUFFO1VBQzVCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsRUFBRTtVQUNyQyxNQUFNLEVBQUUsQ0FBQztTQUNWO1FBQ0QsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakIsZUFBZSxjQUFjLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxFQUFFLEVBQUUsR0FBRyxhQUFhLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztRQUM3RixlQUFlLGNBQWMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsRUFBRSxHQUFHLGFBQWEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO1FBQzdGLHNCQUFzQixtQkFBbUIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLEdBQUcsa0JBQWtCLENBQUMsR0FBRywyQkFBMkIsQ0FBQztRQUNySixnQkFBZ0IsbUJBQW1CLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsRUFBRSxHQUFHLGtCQUFrQixDQUFDLEdBQUcscUJBQXFCLENBQUM7UUFDbkksa0JBQWtCLGlCQUFpQixJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsRUFBRSxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyx1QkFBdUIsQ0FBQztRQUN6RyxjQUFjLGFBQWEsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsRUFBRSxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4RSxjQUFjLGFBQWEsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsRUFBRSxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4RSxlQUFlLGNBQWMsSUFBSSxHQUFHLEdBQUcsR0FBRyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ2hFLGtCQUFrQixHQUFHLGdCQUFnQixLQUFLLEtBQUssQ0FBQztRQUNoRCxrQkFBa0IsR0FBRyxnQkFBZ0IsS0FBSyxLQUFLLENBQUM7UUFDaEQsMEJBQTBCLEdBQUcsd0JBQXdCLElBQUksS0FBSyxDQUFDO1FBQy9ELHFCQUFxQixHQUFHLG1CQUFtQixJQUFJLEtBQUssQ0FBQztRQUNyRCxpQkFBaUIsR0FBRyxlQUFlLElBQUksS0FBSyxDQUFDO1FBQzdDLGFBQWEsR0FBRyxXQUFXLElBQUksS0FBSyxDQUFDO1FBQ3JDLHNCQUFzQixHQUFHLG9CQUFvQixJQUFJLEtBQUssQ0FBQztRQUN2RCxzQkFBc0IsR0FBRyxvQkFBb0IsSUFBSSxLQUFLLENBQUM7UUFDdkQsYUFBYSxHQUFHLFdBQVcsSUFBSSxLQUFLLENBQUM7UUFDckMsZUFBZSxHQUFHLGFBQWEsS0FBSyxLQUFLLENBQUM7UUFDMUMsZUFBZSxHQUFHLGFBQWEsS0FBSyxLQUFLLENBQUM7UUFDMUMsV0FBVyxHQUFHLFNBQVMsSUFBSSxLQUFLLENBQUM7UUFDakMsbUJBQW1CLEdBQUcsbUJBQW1CLElBQUksZ0JBQWdCLENBQUM7UUFDOUQsWUFBWSxHQUFHLFVBQVUsSUFBSSxjQUFjLENBQUM7UUFDNUMsSUFBSSxHQUFHLHdCQUF3QixJQUFJLGlCQUFpQixDQUFDLEdBQUcsd0JBQXdCLGFBQWEsQ0FBQyxFQUFFO1VBQzlGLHVCQUF1QixhQUFhLEdBQUcsR0FBRyx3QkFBd0IsYUFBYSxDQUFDO1NBQ2pGO1FBQ0QsSUFBSSxHQUFHLHdCQUF3QixJQUFJLGlCQUFpQixDQUFDLEdBQUcsd0JBQXdCLG1CQUFtQixDQUFDLEVBQUU7VUFDcEcsdUJBQXVCLG1CQUFtQixHQUFHLEdBQUcsd0JBQXdCLG1CQUFtQixDQUFDO1NBQzdGO1FBQ0QsSUFBSSxHQUFHLHdCQUF3QixJQUFJLE9BQU8sR0FBRyx3QkFBd0IsK0JBQStCLEtBQUssU0FBUyxFQUFFO1VBQ2xILHVCQUF1QiwrQkFBK0IsR0FBRyxHQUFHLHdCQUF3QiwrQkFBK0IsQ0FBQztTQUNySDtRQUNELG9CQUFvQiw0QkFBNEIsUUFBUSxDQUFDLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxvQkFBb0IseUJBQXlCLEdBQUcsb0JBQW9CLEdBQUcsa0JBQWtCLENBQUM7UUFDbkwsb0JBQW9CLGlCQUFpQixLQUFLLHVCQUF1QixHQUFHLGFBQWE7VUFDL0UsT0FBTyxDQUFDLENBQUM7U0FDVixHQUFHLGlCQUFpQixDQUFDO1FBQ3RCLElBQUksa0JBQWtCLEVBQUU7VUFDdEIsa0JBQWtCLEtBQUssQ0FBQztTQUN6QjtRQUNELElBQUksbUJBQW1CLEVBQUU7VUFDdkIsYUFBYSxJQUFJLENBQUM7U0FDbkI7UUFDRCxJQUFJLFlBQVksRUFBRTtVQUNoQixlQUFlLFFBQVEsQ0FBQyxFQUFFLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztVQUN0RCxlQUFlLEVBQUUsQ0FBQztVQUNsQixJQUFJLFlBQVksS0FBSyxLQUFLLElBQUksRUFBRTtZQUM5QixRQUFRLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQy9CLFFBQVEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDOUI7VUFDRCxJQUFJLFlBQVksSUFBSSxLQUFLLElBQUksRUFBRTtZQUM3QixRQUFRLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzlCLFFBQVEsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDNUIsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztXQUM3QjtVQUNELElBQUksWUFBWSxXQUFXLEtBQUssSUFBSSxFQUFFO1lBQ3BDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDbkMsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM1QixRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1dBQzdCO1VBQ0QsSUFBSSxZQUFZLE9BQU8sS0FBSyxJQUFJLEVBQUU7WUFDaEMsUUFBUSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNqQyxRQUFRLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQy9CLFFBQVEsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7V0FDN0I7U0FDRjtRQUNELElBQUksR0FBRyxTQUFTLEVBQUU7VUFDaEIsSUFBSSxZQUFZLEtBQUssb0JBQW9CLEVBQUU7WUFDekMsZUFBZSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7V0FDcEM7VUFDRCxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUM7U0FDdEM7UUFDRCxJQUFJLEdBQUcsU0FBUyxFQUFFO1VBQ2hCLElBQUksWUFBWSxLQUFLLG9CQUFvQixFQUFFO1lBQ3pDLGVBQWUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1dBQ3BDO1VBQ0QsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDO1NBQ3RDO1FBQ0QsSUFBSSxHQUFHLGtCQUFrQixFQUFFO1VBQ3pCLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLGtCQUFrQixDQUFDLENBQUM7U0FDdEQ7UUFDRCxJQUFJLEdBQUcsZ0JBQWdCLEVBQUU7VUFDdkIsSUFBSSxlQUFlLEtBQUssdUJBQXVCLEVBQUU7WUFDL0Msa0JBQWtCLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztXQUMxQztVQUNELFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsSUFBSSxZQUFZLEVBQUU7VUFDaEIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztTQUM5QjtRQUNELElBQUksY0FBYyxFQUFFO1VBQ2xCLFFBQVEsQ0FBQyxZQUFZLEVBQUU7WUFDckIsTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1dBQ1AsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxJQUFJLFlBQVksTUFBTSxFQUFFO1VBQ3RCLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1VBQ2xDLE9BQU8sV0FBVyxNQUFNLENBQUM7U0FDMUI7UUFDRCxJQUFJLE1BQU0sRUFBRTtVQUNWLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNiO1FBQ0QsU0FBUyxHQUFHLENBQUM7T0FDZCxDQUFDO01BQ0YsSUFBSSxpQ0FBaUMsUUFBUSxDQUFDLEVBQUUsRUFBRTtRQUNoRCxJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osT0FBTztPQUNSLENBQUMsQ0FBQztNQUNILElBQUksMEJBQTBCLFFBQVEsQ0FBQyxFQUFFLEVBQUU7UUFDekMsZUFBZTtRQUNmLE1BQU07UUFDTixPQUFPO1FBQ1AsZ0JBQWdCO09BQ2pCLENBQUMsQ0FBQztNQUNILElBQUksK0JBQStCLFFBQVEsQ0FBQyxFQUFFLEVBQUU7UUFDOUMsT0FBTztRQUNQLE9BQU87UUFDUCxNQUFNO1FBQ04sR0FBRztRQUNILFFBQVE7T0FDVCxDQUFDLENBQUM7TUFDSCxJQUFJLGVBQWUsUUFBUSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztNQUN2QyxRQUFRLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO01BQ25DLFFBQVEsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUM7TUFDdEMsSUFBSSxrQkFBa0IsUUFBUSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztNQUM3QyxRQUFRLENBQUMsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUM7TUFDNUMsSUFBSSx1QkFBdUIsdUNBQXVDO1FBQ2hFLElBQUksU0FBUyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sUUFBUSxFQUFFO1VBQzlCLFNBQVM7WUFDUCxjQUFjLGNBQWM7WUFDNUIsU0FBUyxVQUFVO1dBQ3BCLENBQUM7U0FDSDtRQUNELElBQUksVUFBVSxpQkFBaUIsQ0FBQyxPQUFPLFFBQVEsQ0FBQyxDQUFDO1FBQ2pELElBQUksZ0JBQWdCLGlCQUFpQixDQUFDLE1BQU0sUUFBUSxDQUFDLENBQUM7UUFDdEQsSUFBSSxPQUFPLGFBQWEsS0FBSyxhQUFhLEVBQUU7VUFDMUMsSUFBSSxNQUFNLGFBQWEsS0FBSyxjQUFjLEVBQUU7WUFDMUMsT0FBTyxPQUFPLEtBQUssS0FBSyxDQUFDO1dBQzFCO1VBQ0QsSUFBSSxNQUFNLGFBQWEsS0FBSyxnQkFBZ0IsRUFBRTtZQUM1QyxPQUFPLE9BQU8sS0FBSyxLQUFLLEtBQUssYUFBYSxLQUFLLGdCQUFnQixJQUFJLDhCQUE4QixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7V0FDbkg7VUFDRCxPQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUN2QztRQUNELElBQUksT0FBTyxhQUFhLEtBQUssZ0JBQWdCLEVBQUU7VUFDN0MsSUFBSSxNQUFNLGFBQWEsS0FBSyxjQUFjLEVBQUU7WUFDMUMsT0FBTyxPQUFPLEtBQUssTUFBTSxDQUFDO1dBQzNCO1VBQ0QsSUFBSSxNQUFNLGFBQWEsS0FBSyxhQUFhLEVBQUU7WUFDekMsT0FBTyxPQUFPLEtBQUssTUFBTSxJQUFJLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1dBQ3JFO1VBQ0QsT0FBTyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDMUM7UUFDRCxJQUFJLE9BQU8sYUFBYSxLQUFLLGNBQWMsRUFBRTtVQUMzQyxJQUFJLE1BQU0sYUFBYSxLQUFLLGFBQWEsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3BGLE9BQU8sS0FBSyxDQUFDO1dBQ2Q7VUFDRCxJQUFJLE1BQU0sYUFBYSxLQUFLLGdCQUFnQixJQUFJLENBQUMsOEJBQThCLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDOUYsT0FBTyxLQUFLLENBQUM7V0FDZDtVQUNELE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEtBQUssNEJBQTRCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUN2RztRQUNELE9BQU8sS0FBSyxDQUFDO09BQ2QsQ0FBQztNQUNGLElBQUksZUFBZSw0QkFBNEI7UUFDN0MsU0FBUyxDQUFDLFNBQVMsUUFBUSxFQUFFLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELElBQUk7VUFDRixJQUFJLFdBQVcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25DLENBQUMsVUFBVTtVQUNWLElBQUk7WUFDRixJQUFJLFVBQVUsR0FBRyxTQUFTLENBQUM7V0FDNUIsQ0FBQyxVQUFVO1lBQ1YsSUFBSSxPQUFPLEVBQUUsQ0FBQztXQUNmO1NBQ0Y7T0FDRixDQUFDO01BQ0YsSUFBSSxtQkFBbUIsc0NBQXNDO1FBQzNELElBQUk7VUFDRixTQUFTLENBQUMsU0FBUyxRQUFRLEVBQUU7WUFDM0IsV0FBVyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQztZQUN0QyxNQUFNLElBQUk7V0FDWCxDQUFDLENBQUM7U0FDSixDQUFDLFVBQVU7VUFDVixTQUFTLENBQUMsU0FBUyxRQUFRLEVBQUU7WUFDM0IsV0FBVyxJQUFJO1lBQ2YsTUFBTSxJQUFJO1dBQ1gsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUN4QyxJQUFJLFVBQVUsSUFBSSxtQkFBbUIsRUFBRTtZQUNyQyxJQUFJO2NBQ0YsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3BCLENBQUMsVUFBVTthQUNYO1dBQ0YsTUFBTTtZQUNMLElBQUk7Y0FDRixJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDN0IsQ0FBQyxVQUFVO2FBQ1g7V0FDRjtTQUNGO09BQ0YsQ0FBQztNQUNGLElBQUksZ0JBQWdCLDhCQUE4QjtRQUNoRCxJQUFJLEdBQUcsQ0FBQztRQUNSLElBQUksaUJBQWlCLENBQUM7UUFDdEIsSUFBSSxVQUFVLEVBQUU7VUFDZCxRQUFRLG1CQUFtQixHQUFHLEtBQUssQ0FBQztTQUNyQyxNQUFNO1VBQ0wsSUFBSSxVQUFVLFdBQVcsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7VUFDaEQsb0JBQW9CLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0M7UUFDRCxJQUFJLGlCQUFpQixLQUFLLHVCQUF1QixFQUFFO1VBQ2pELFFBQVEsZ0VBQWdFLEdBQUcsS0FBSyxHQUFHLGdCQUFnQixDQUFDO1NBQ3JHO1FBQ0QsSUFBSSxlQUFlLGtCQUFrQixHQUFHLGtCQUFrQixXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3JGLElBQUksU0FBUyxLQUFLLGNBQWMsRUFBRTtVQUNoQyxJQUFJO1lBQ0YsTUFBTSxJQUFJLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztXQUN4RSxDQUFDLFVBQVU7V0FDWDtTQUNGO1FBQ0QsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLEVBQUU7VUFDaEMsTUFBTSxjQUFjLGVBQWUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1VBQ2pFLElBQUk7WUFDRixHQUFHLGdCQUFnQixVQUFVLEdBQUcsY0FBYyxHQUFHLEVBQUUsR0FBRyxZQUFZLENBQUM7V0FDcEUsQ0FBQyxVQUFVO1dBQ1g7U0FDRjtRQUNELElBQUksT0FBTyxHQUFHLEtBQUssSUFBSSxHQUFHLGdCQUFnQixDQUFDO1FBQzNDLElBQUksS0FBSyxJQUFJLGlCQUFpQixFQUFFO1VBQzlCLElBQUksYUFBYSxDQUFDLFFBQVEsZUFBZSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7U0FDM0Y7UUFDRCxJQUFJLFNBQVMsS0FBSyxjQUFjLEVBQUU7VUFDaEMsT0FBTyxvQkFBb0IsS0FBSyxDQUFDLEdBQUcsRUFBRSxjQUFjLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVFO1FBQ0QsT0FBTyxjQUFjLEdBQUcsR0FBRyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7T0FDcEQsQ0FBQztNQUNGLElBQUksa0JBQWtCLCtCQUErQjtRQUNuRCxPQUFPLGtCQUFrQixLQUFLLENBQUMsSUFBSSxjQUFjLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLGFBQWEsR0FBRyxVQUFVLGFBQWEsR0FBRyxVQUFVLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDekosQ0FBQztNQUNGLElBQUksZUFBZSwyQkFBMkI7UUFDNUMsT0FBTyxHQUFHLFlBQVksZUFBZSxLQUFLLE9BQU8sR0FBRyxTQUFTLEtBQUssUUFBUSxJQUFJLE9BQU8sR0FBRyxZQUFZLEtBQUssUUFBUSxJQUFJLE9BQU8sR0FBRyxZQUFZLEtBQUssVUFBVSxJQUFJLEVBQUUsR0FBRyxXQUFXLFlBQVksWUFBWSxDQUFDLElBQUksT0FBTyxHQUFHLGdCQUFnQixLQUFLLFVBQVUsSUFBSSxPQUFPLEdBQUcsYUFBYSxLQUFLLFVBQVUsSUFBSSxPQUFPLEdBQUcsYUFBYSxLQUFLLFFBQVEsSUFBSSxPQUFPLEdBQUcsYUFBYSxLQUFLLFVBQVUsQ0FBQyxDQUFDO09BQ25YLENBQUM7TUFDRixJQUFJLFVBQVUseUJBQXlCO1FBQ3JDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLFFBQVEsR0FBRyxNQUFNLFlBQVksSUFBSSxHQUFHLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssUUFBUSxJQUFJLE9BQU8sTUFBTSxTQUFTLEtBQUssUUFBUSxJQUFJLE9BQU8sTUFBTSxTQUFTLEtBQUssUUFBUSxDQUFDO09BQ25MLENBQUM7TUFDRixJQUFJLGVBQWUscURBQXFEO1FBQ3RFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUU7VUFDdEIsT0FBTztTQUNSO1FBQ0QsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxnQkFBZ0I7VUFDOUMsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDakQsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLElBQUksb0JBQW9CLHdDQUF3QztRQUM5RCxJQUFJLE9BQU8sQ0FBQztRQUNaLFlBQVksQ0FBQyx3QkFBd0IsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUQsSUFBSSxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUU7VUFDN0IsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1VBQzFCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLFNBQVMsQ0FBQyxFQUFFO1VBQ3ZELFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztVQUMxQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsSUFBSSxVQUFVLGlCQUFpQixDQUFDLFdBQVcsU0FBUyxDQUFDLENBQUM7UUFDdEQsWUFBWSxDQUFDLHFCQUFxQixFQUFFLFdBQVcsRUFBRTtVQUMvQyxTQUFTLE9BQU87VUFDaEIsYUFBYSxZQUFZO1NBQzFCLENBQUMsQ0FBQztRQUNILElBQUksV0FBVyxjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLFFBQVEsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsV0FBVyxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLFdBQVcsWUFBWSxDQUFDLEVBQUU7VUFDbFEsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1VBQzFCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLE9BQU8sS0FBSyxRQUFRLElBQUksVUFBVSxDQUFDLFlBQVksRUFBRSxXQUFXLFVBQVUsQ0FBQyxFQUFFO1VBQzNFLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztVQUMxQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUU7VUFDbEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM3RCxJQUFJLHVCQUF1QixhQUFhLFlBQVksTUFBTSxJQUFJLFVBQVUsQ0FBQyx1QkFBdUIsYUFBYSxFQUFFLE9BQU8sQ0FBQztjQUNySCxPQUFPLEtBQUssQ0FBQztZQUNmLElBQUksdUJBQXVCLGFBQWEsWUFBWSxRQUFRLElBQUksdUJBQXVCLGFBQWEsQ0FBQyxPQUFPLENBQUM7Y0FDM0csT0FBTyxLQUFLLENBQUM7V0FDaEI7VUFDRCxJQUFJLFlBQVksSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM3QyxJQUFJLGFBQWEsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLFdBQVcsV0FBVyxDQUFDO1lBQ3RFLElBQUksYUFBYSxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksV0FBVyxXQUFXLENBQUM7WUFDdEUsSUFBSSxVQUFVLElBQUksVUFBVSxFQUFFO2NBQzVCLElBQUksYUFBYSxVQUFVLE9BQU8sQ0FBQztjQUNuQyxLQUFLLElBQUksSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7Z0JBQ3hDLFVBQVUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7ZUFDdEY7YUFDRjtXQUNGO1VBQ0QsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1VBQzFCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLFdBQVcsWUFBWSxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsRUFBRTtVQUN4RSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7VUFDMUIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELElBQUksQ0FBQyxPQUFPLEtBQUssVUFBVSxJQUFJLE9BQU8sS0FBSyxTQUFTLEtBQUssVUFBVSxDQUFDLHNCQUFzQixFQUFFLFdBQVcsVUFBVSxDQUFDLEVBQUU7VUFDbEgsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1VBQzFCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLGtCQUFrQixJQUFJLFdBQVcsU0FBUyxLQUFLLENBQUMsRUFBRTtVQUNwRCxVQUFVLFdBQVcsWUFBWSxDQUFDO1VBQ2xDLFVBQVUsYUFBYSxDQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUM7VUFDdkQsVUFBVSxhQUFhLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztVQUNsRCxJQUFJLFdBQVcsWUFBWSxLQUFLLE9BQU8sRUFBRTtZQUN2QyxTQUFTLENBQUMsU0FBUyxRQUFRLEVBQUUsRUFBRSxTQUFTLFdBQVcsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLFdBQVcsWUFBWSxHQUFHLE9BQU8sQ0FBQztXQUNuQztTQUNGO1FBQ0QsWUFBWSxDQUFDLHVCQUF1QixFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RCxPQUFPLEtBQUssQ0FBQztPQUNkLENBQUM7TUFDRixJQUFJLG9CQUFvQixpREFBaUQ7UUFDdkUsSUFBSSxZQUFZLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssTUFBTSxDQUFDLEtBQUssS0FBSyxJQUFJLFFBQVEsSUFBSSxLQUFLLElBQUksV0FBVyxDQUFDLEVBQUU7VUFDekcsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELElBQUksZUFBZSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzthQUMzRSxJQUFJLGVBQWUsSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFDeEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUU7VUFDckQsSUFBSSx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsS0FBSyx1QkFBdUIsYUFBYSxZQUFZLE1BQU0sSUFBSSxVQUFVLENBQUMsdUJBQXVCLGFBQWEsRUFBRSxLQUFLLENBQUMsSUFBSSx1QkFBdUIsYUFBYSxZQUFZLFFBQVEsSUFBSSx1QkFBdUIsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssdUJBQXVCLG1CQUFtQixZQUFZLE1BQU0sSUFBSSxVQUFVLENBQUMsdUJBQXVCLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxJQUFJLHVCQUF1QixtQkFBbUIsWUFBWSxRQUFRLElBQUksdUJBQXVCLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksTUFBTSxLQUFLLElBQUksSUFBSSx1QkFBdUIsK0JBQStCLEtBQUssdUJBQXVCLGFBQWEsWUFBWSxNQUFNLElBQUksVUFBVSxDQUFDLHVCQUF1QixhQUFhLEVBQUUsS0FBSyxDQUFDLElBQUksdUJBQXVCLGFBQWEsWUFBWSxRQUFRLElBQUksdUJBQXVCLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7ZUFDNXlCO1lBQ0gsT0FBTyxLQUFLLENBQUM7V0FDZDtTQUNGLE1BQU0sSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2FBQ25DLElBQUksVUFBVSxDQUFDLGdCQUFnQixFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQy9FLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLE1BQU0sS0FBSyxZQUFZLElBQUksTUFBTSxLQUFLLE1BQU0sS0FBSyxLQUFLLEtBQUssUUFBUSxJQUFJLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQzdKLElBQUksdUJBQXVCLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLEVBQUUsYUFBYSxDQUFDLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDOUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ1o7VUFDSCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsT0FBTyxJQUFJLENBQUM7T0FDYixDQUFDO01BQ0YsSUFBSSwwQkFBMEIsMENBQTBDO1FBQ3RFLE9BQU8sT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO09BQ2pDLENBQUM7TUFDRixJQUFJLHNCQUFzQiwwQ0FBMEM7UUFDbEUsSUFBSSxJQUFJLENBQUM7UUFDVCxJQUFJLEtBQUssQ0FBQztRQUNWLElBQUksTUFBTSxDQUFDO1FBQ1gsSUFBSSxDQUFDLENBQUM7UUFDTixZQUFZLENBQUMsMEJBQTBCLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVELElBQUksYUFBYSxXQUFXLFdBQVcsQ0FBQztRQUN4QyxJQUFJLENBQUMsVUFBVSxFQUFFO1VBQ2YsT0FBTztTQUNSO1FBQ0QsSUFBSSxZQUFZO1VBQ2QsVUFBVSxFQUFFO1VBQ1osV0FBVyxFQUFFO1VBQ2IsVUFBVSxJQUFJO1VBQ2QsbUJBQW1CLFlBQVk7U0FDaEMsQ0FBQztRQUNGLElBQUksVUFBVSxPQUFPLENBQUM7UUFDdEIsT0FBTyxDQUFDLEVBQUUsRUFBRTtVQUNWLE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3JCLElBQUksUUFBUSxJQUFJLEVBQUUsT0FBTyxLQUFLLEtBQUssRUFBRSxlQUFlLEtBQUssYUFBYSxDQUFDO1VBQ3ZFLFFBQVEsSUFBSSxLQUFLLE9BQU8sR0FBRyxJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQztVQUMvRCxTQUFTLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1VBQ2pDLElBQUksWUFBWSxLQUFLLENBQUM7VUFDdEIsU0FBUyxTQUFTLEdBQUcsTUFBTSxDQUFDO1VBQzVCLFNBQVMsVUFBVSxHQUFHLEtBQUssQ0FBQztVQUM1QixTQUFTLFNBQVMsR0FBRyxJQUFJLENBQUM7VUFDMUIsU0FBUyxjQUFjLEdBQUcsU0FBUyxDQUFDO1VBQ3BDLFlBQVksQ0FBQyx1QkFBdUIsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7VUFDOUQsUUFBUSxTQUFTLFVBQVUsQ0FBQztVQUM1QixJQUFJLFNBQVMsY0FBYyxFQUFFO1lBQzNCLFNBQVM7V0FDVjtVQUNELElBQUksQ0FBQyxTQUFTLFNBQVMsRUFBRTtZQUN2QixnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDcEMsU0FBUztXQUNWO1VBQ0QsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQzdCLGdCQUFnQixDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNwQyxTQUFTO1dBQ1Y7VUFDRCxJQUFJLGtCQUFrQixFQUFFO1lBQ3RCLFFBQVEsYUFBYSxDQUFDLEtBQUssRUFBRSxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDbkQsUUFBUSxhQUFhLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztXQUMvQztVQUNELElBQUksUUFBUSxpQkFBaUIsQ0FBQyxXQUFXLFNBQVMsQ0FBQyxDQUFDO1VBQ3BELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQzVDLGdCQUFnQixDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNwQyxTQUFTO1dBQ1Y7VUFDRCxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDdkIsSUFBSTtjQUNGLElBQUksWUFBWSxFQUFFO2dCQUNoQixXQUFXLGVBQWUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2VBQ3ZELE1BQU07Z0JBQ0wsV0FBVyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2VBQ3ZDO2FBQ0YsQ0FBQyxVQUFVO2NBQ1YsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2FBQ3JDO1dBQ0Y7U0FDRjtRQUNELFlBQVksQ0FBQyx5QkFBeUIsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDNUQsQ0FBQztNQUNGLElBQUkscUJBQXFCLHNDQUFzQztRQUM3RCxJQUFJLFVBQVUsQ0FBQztRQUNmLElBQUksaUJBQWlCLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQyxZQUFZLENBQUMseUJBQXlCLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3hELE9BQU8sYUFBYSxjQUFjLFNBQVMsRUFBRSxFQUFFO1VBQzdDLFlBQVksQ0FBQyx3QkFBd0IsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7VUFDekQsSUFBSSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNqQyxTQUFTO1dBQ1Y7VUFDRCxJQUFJLFVBQVUsUUFBUSxZQUFZLGdCQUFnQixFQUFFO1lBQ2xELGtCQUFrQixDQUFDLFVBQVUsUUFBUSxDQUFDLENBQUM7V0FDeEM7VUFDRCxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNqQztRQUNELFlBQVksQ0FBQyx3QkFBd0IsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDeEQsQ0FBQztNQUNGLFNBQVMsU0FBUyxHQUFHLHNCQUFzQjtRQUN6QyxJQUFJLElBQUksQ0FBQztRQUNULElBQUksWUFBWSxDQUFDO1FBQ2pCLElBQUksV0FBVyxDQUFDO1FBQ2hCLElBQUksT0FBTyxDQUFDO1FBQ1osSUFBSSxVQUFVLENBQUM7UUFDZixpQkFBaUIsQ0FBQyxLQUFLLENBQUM7UUFDeEIsSUFBSSxjQUFjLEVBQUU7VUFDbEIsUUFBUSxPQUFPLENBQUM7U0FDakI7UUFDRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtVQUNoRCxJQUFJLE9BQU8sS0FBSyxTQUFTLEtBQUssVUFBVSxFQUFFO1lBQ3hDLE1BQU0sZUFBZSxDQUFDLDRCQUE0QixDQUFDLENBQUM7V0FDckQsTUFBTTtZQUNMLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN6QixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtjQUM3QixNQUFNLGVBQWUsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO2FBQzFEO1dBQ0Y7U0FDRjtRQUNELElBQUksQ0FBQyxTQUFTLFlBQVksRUFBRTtVQUMxQixJQUFJLE9BQU8sQ0FBQyxNQUFNLGFBQWEsQ0FBQyxLQUFLLFFBQVEsSUFBSSxPQUFPLE1BQU0sYUFBYSxLQUFLLFVBQVUsRUFBRTtZQUMxRixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtjQUM3QixPQUFPLE1BQU0sYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ25DO1lBQ0QsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Y0FDbEIsT0FBTyxNQUFNLGFBQWEsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDO2FBQzdDO1dBQ0Y7VUFDRCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFBSSxDQUFDLFVBQVUsRUFBRTtVQUNmLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNuQjtRQUNELFNBQVMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtVQUM3QixXQUFXLEtBQUssQ0FBQztTQUNsQjtRQUNELElBQUksUUFBUSxFQUFFO1VBQ1osSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUNsQixJQUFJLFVBQVUsaUJBQWlCLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRTtjQUNsRCxNQUFNLGVBQWUsQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO2FBQ2xGO1dBQ0Y7U0FDRixNQUFNLElBQUksS0FBSyxZQUFZLElBQUksRUFBRTtVQUNoQyxPQUFPLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztVQUNoQyxlQUFlLElBQUksY0FBYyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1VBQzFELElBQUksWUFBWSxTQUFTLEtBQUssQ0FBQyxJQUFJLFlBQVksU0FBUyxLQUFLLE1BQU0sRUFBRTtZQUNuRSxPQUFPLFlBQVksQ0FBQztXQUNyQixNQUFNLElBQUksWUFBWSxTQUFTLEtBQUssTUFBTSxFQUFFO1lBQzNDLE9BQU8sWUFBWSxDQUFDO1dBQ3JCLE1BQU07WUFDTCxJQUFJLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztXQUNoQztTQUNGLE1BQU07VUFDTCxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxjQUFjLElBQUksS0FBSyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDdEYsT0FBTyxrQkFBa0IsSUFBSSxtQkFBbUIsR0FBRyxrQkFBa0IsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztXQUNqRztVQUNELE9BQU8sYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1VBQzVCLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPLFVBQVUsR0FBRyxJQUFJLEdBQUcsbUJBQW1CLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQztXQUNqRTtTQUNGO1FBQ0QsSUFBSSxJQUFJLElBQUksVUFBVSxFQUFFO1VBQ3RCLFlBQVksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsSUFBSSxlQUFlLGVBQWUsQ0FBQyxRQUFRLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzVELE9BQU8sY0FBYyxZQUFZLFNBQVMsRUFBRSxFQUFFO1VBQzVDLElBQUksV0FBVyxTQUFTLEtBQUssQ0FBQyxJQUFJLFdBQVcsS0FBSyxPQUFPLEVBQUU7WUFDekQsU0FBUztXQUNWO1VBQ0QsSUFBSSxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNsQyxTQUFTO1dBQ1Y7VUFDRCxJQUFJLFdBQVcsUUFBUSxZQUFZLGdCQUFnQixFQUFFO1lBQ25ELGtCQUFrQixDQUFDLFdBQVcsUUFBUSxDQUFDLENBQUM7V0FDekM7VUFDRCxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztVQUNqQyxVQUFVLFdBQVcsQ0FBQztTQUN2QjtRQUNELFVBQVUsSUFBSSxDQUFDO1FBQ2YsSUFBSSxRQUFRLEVBQUU7VUFDWixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFBSSxVQUFVLEVBQUU7VUFDZCxJQUFJLG1CQUFtQixFQUFFO1lBQ3ZCLGFBQWEsc0JBQXNCLEtBQUssQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDO1lBQzdELE9BQU8sSUFBSSxXQUFXLEVBQUU7Y0FDdEIsVUFBVSxZQUFZLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQzthQUN6QztXQUNGLE1BQU07WUFDTCxhQUFhLElBQUksQ0FBQztXQUNuQjtVQUNELElBQUksWUFBWSxXQUFXLEVBQUU7WUFDM0IsYUFBYSxVQUFVLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDbEU7VUFDRCxPQUFPLFVBQVUsQ0FBQztTQUNuQjtRQUNELElBQUksaUJBQWlCLGNBQWMsR0FBRyxJQUFJLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQztRQUN0RSxJQUFJLGNBQWMsSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxjQUFjLElBQUksSUFBSSxjQUFjLFFBQVEsSUFBSSxJQUFJLGNBQWMsUUFBUSxLQUFLLElBQUksVUFBVSxDQUFDLFlBQVksRUFBRSxJQUFJLGNBQWMsUUFBUSxLQUFLLENBQUMsRUFBRTtVQUNsTSxpQkFBaUIsWUFBWSxHQUFHLElBQUksY0FBYyxRQUFRLEtBQUssR0FBRyxLQUFLLEdBQUcsY0FBYyxDQUFDO1NBQzFGO1FBQ0QsSUFBSSxrQkFBa0IsRUFBRTtVQUN0QixpQkFBaUIsYUFBYSxDQUFDLGNBQWMsRUFBRSxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUM7VUFDckUsaUJBQWlCLGFBQWEsQ0FBQyxjQUFjLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ2pFO1FBQ0QsT0FBTyxrQkFBa0IsSUFBSSxtQkFBbUIsR0FBRyxrQkFBa0IsV0FBVyxDQUFDLGNBQWMsQ0FBQyxHQUFHLGNBQWMsQ0FBQztPQUNuSCxDQUFDO01BQ0YsU0FBUyxVQUFVLEdBQUcsZUFBZTtRQUNuQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEIsYUFBYSxJQUFJLENBQUM7T0FDbkIsQ0FBQztNQUNGLFNBQVMsWUFBWSxHQUFHLFlBQVk7UUFDbEMsU0FBUyxJQUFJLENBQUM7UUFDZCxhQUFhLEtBQUssQ0FBQztPQUNwQixDQUFDO01BQ0YsU0FBUyxpQkFBaUIsR0FBRyw0QkFBNEI7UUFDdkQsSUFBSSxDQUFDLE1BQU0sRUFBRTtVQUNYLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNsQjtRQUNELElBQUksUUFBUSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxJQUFJLFNBQVMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsT0FBTyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ2hELENBQUM7TUFDRixTQUFTLFFBQVEsR0FBRyxvQ0FBb0M7UUFDdEQsSUFBSSxPQUFPLFlBQVksS0FBSyxVQUFVLEVBQUU7VUFDdEMsT0FBTztTQUNSO1FBQ0QsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztPQUM1QyxDQUFDO01BQ0YsU0FBUyxXQUFXLEdBQUcsc0JBQXNCO1FBQzNDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1VBQ3JCLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQ3BDO09BQ0YsQ0FBQztNQUNGLFNBQVMsWUFBWSxHQUFHLHNCQUFzQjtRQUM1QyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRTtVQUNyQixLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ3hCO09BQ0YsQ0FBQztNQUNGLFNBQVMsZUFBZSxHQUFHLFlBQVk7UUFDckMsUUFBUSxFQUFFLENBQUM7T0FDWixDQUFDO01BQ0YsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFDRCxJQUFJLFNBQVMsZUFBZSxFQUFFLENBQUM7O0lBRS9CLE1BQU0scUJBQXFCLFFBQVEsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7SUFFM0QsTUFBTSxVQUFVLFFBQVEsV0FBVyxRQUFRLEVBQUUsQ0FBQztJQUM5QyxNQUFNLGVBQWUsbUJBQW1CO01BQ3RDLEtBQUs7UUFDSCxLQUFLLEtBQUs7UUFDVixRQUFRLEVBQUUsU0FBUyxNQUFNLEVBQUU7UUFDM0IsU0FBUyxDQUFDLG9CQUFvQixDQUFDO09BQ2hDO01BQ0QsWUFBWTtRQUNWLEtBQUs7UUFDTCxLQUFLO09BQ047S0FDRixDQUFDLENBQUM7SUFDSCxNQUFNLFNBQVMsaUNBQWlDLFdBQVcsTUFBTSxNQUFNLENBQUMsTUFBTSxPQUFPLENBQUM7TUFDcEYsS0FBSztRQUNILEtBQUssUUFBUTtRQUNiLFNBQVM7VUFDUCxZQUFZO1VBQ1osa0JBQWtCO1VBQ2xCLG1CQUFtQjtTQUNwQjtRQUNELFlBQVk7VUFDVixRQUFRLFFBQVE7VUFDaEIsY0FBYyxrQkFBa0IsVUFBVSxDQUFDLE9BQU8sQ0FBQztTQUNwRDtPQUNGO01BQ0QsUUFBUSxPQUFPO01BQ2Ysa0JBQWtCLFFBQVEsQ0FBQyxDQUFDLFdBQVcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDckQsQ0FBQyxDQUFDLENBQUM7SUFDSixNQUFNLFlBQVksTUFBTSxXQUFXLE1BQU0sTUFBTSxDQUFDO01BQzlDLEtBQUs7UUFDSCxLQUFLLEtBQUs7UUFDVixTQUFTLENBQUMsbUJBQW1CLENBQUM7UUFDOUIsV0FBVyxFQUFFO1FBQ2IsUUFBUSxFQUFFLFNBQVMsTUFBTSxFQUFFO09BQzVCO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxlQUFlLGlDQUFpQyxXQUFXLE1BQU0sS0FBSyxDQUFDO01BQzNFLEtBQUs7UUFDSCxLQUFLLEtBQUs7UUFDVixTQUFTLENBQUMsa0JBQWtCLENBQUM7T0FDOUI7TUFDRCxZQUFZLENBQUM7VUFDVCxLQUFLO1lBQ0gsS0FBSyxLQUFLO1lBQ1YsU0FBUyxDQUFDLDBCQUEwQixDQUFDO1dBQ3RDO1VBQ0QsWUFBWSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQyxHQUFHLEdBQUcsa0JBQWtCLENBQUMsa0JBQWtCLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUN6RyxDQUFDO0tBQ0wsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxVQUFVLFdBQVcsV0FBVyxNQUFNLE9BQU8sQ0FBQztNQUNsRCxLQUFLO1FBQ0gsS0FBSyxLQUFLO1FBQ1YsU0FBUyxDQUFDLG9CQUFvQixDQUFDO09BQ2hDO01BQ0QsWUFBWSxPQUFPO0tBQ3BCLENBQUMsQ0FBQztJQUNILE1BQU0sZUFBZSw4QkFBOEI7TUFDakQsU0FBUyxPQUFPLENBQUM7UUFDZixLQUFLO1VBQ0gsS0FBSyxLQUFLO1VBQ1YsU0FBUyxDQUFDLDBCQUEwQixDQUFDO1NBQ3RDO1FBQ0QsWUFBWSxZQUFZO09BQ3pCLENBQUM7TUFDRixTQUFTLE9BQU8sQ0FBQztRQUNmLEtBQUs7VUFDSCxLQUFLLEtBQUs7VUFDVixTQUFTLENBQUMsd0JBQXdCLENBQUM7U0FDcEM7UUFDRCxZQUFZLFVBQVU7T0FDdkIsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLGlCQUFpQixRQUFRO01BQzdCLE1BQU0sY0FBYyxZQUFZLENBQUM7TUFDakMsTUFBTSxlQUFlLFdBQVcsR0FBRyxPQUFPLENBQUM7TUFDM0MsTUFBTSx1QkFBdUIsWUFBWSxHQUFHLFlBQVksQ0FBQztNQUN6RCxNQUFNLGtCQUFrQixXQUFXLEdBQUcsa0JBQWtCLENBQUM7TUFDekQsT0FBTyxXQUFXLE9BQU8sQ0FBQztRQUN4QixVQUFVLElBQUksU0FBUztRQUN2QixVQUFVLFFBQVE7VUFDaEIsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDcEIsT0FBTyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QjtRQUNELGNBQWMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7UUFDekMsY0FBYyxJQUFJLGFBQWE7UUFDL0IsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksYUFBYSxDQUFDO1VBQ2hELFFBQVE7WUFDTixVQUFVLFVBQVU7WUFDcEIsR0FBRyxJQUFJLFlBQVk7V0FDcEI7U0FDRjtRQUNELFlBQVk7VUFDVixJQUFJLE9BQU87VUFDWCxJQUFJLEtBQUs7VUFDVCxHQUFHLElBQUksT0FBTyxRQUFRLEVBQUU7U0FDekI7UUFDRCxPQUFPO1VBQ0wsU0FBUztZQUNQLEtBQUssUUFBUSxDQUFDLENBQUMsWUFBWSxHQUFHLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN0RCxZQUFZLENBQUM7Z0JBQ1QsS0FBSztrQkFDSCxLQUFLLEtBQUs7a0JBQ1YsU0FBUyxPQUFPLEdBQUc7b0JBQ2pCLG9CQUFvQjtvQkFDcEIsb0JBQW9CLEdBQUcsVUFBVTttQkFDbEMsR0FBRyxDQUFDLG9CQUFvQixDQUFDO2lCQUMzQjtlQUNGLENBQUM7V0FDTDtTQUNGO1FBQ0QsZ0JBQWdCLFlBQVk7UUFDNUIsaUJBQWlCLFFBQVEsQ0FBQztVQUN4QixRQUFRLE9BQU8sQ0FBQyxFQUFFLENBQUM7VUFDbkIsTUFBTSxDQUFDLGVBQWUsRUFBRSxJQUFJLGFBQWEsT0FBTyxDQUFDO1lBQy9DLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxlQUFlO2NBQ3BDLFFBQVEsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzFELENBQUM7WUFDRixLQUFLLENBQUMsWUFBWSxFQUFFLEVBQUUsY0FBYztjQUNsQyxJQUFJLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxFQUFFLENBQUMsQ0FBQzthQUM1RixDQUFDO1dBQ0gsQ0FBQyxDQUFDO1VBQ0gsTUFBTSxDQUFDLGFBQWEsRUFBRTtZQUNwQixhQUFhLENBQUMsTUFBTTtjQUNsQixLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUM7YUFDaEMsQ0FBQztZQUNGLGFBQWEsQ0FBQyxNQUFNO2NBQ2xCLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQzthQUNuQyxDQUFDO1dBQ0gsQ0FBQztVQUNGLEdBQUcsSUFBSSxnQkFBZ0I7U0FDeEIsQ0FBQztRQUNGLFlBQVk7VUFDVixDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsZUFBZSxDQUFDO1VBQ2hDLENBQUMsYUFBYSxFQUFFLEdBQUc7WUFDakIsYUFBYTtZQUNiLGVBQWU7WUFDZixzQkFBc0I7V0FDdkI7VUFDRCxDQUFDLGVBQWUsRUFBRSxHQUFHO1lBQ25CLHNCQUFzQjtZQUN0QixlQUFlO1lBQ2YsYUFBYTtXQUNkO1VBQ0QsR0FBRyxJQUFJLFdBQVc7U0FDbkI7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sY0FBYyxzQkFBc0IsTUFBTSxPQUFPLENBQUM7TUFDdEQsS0FBSztRQUNILEtBQUssUUFBUTtRQUNiLFNBQVM7VUFDUCxZQUFZO1VBQ1osa0JBQWtCO1VBQ2xCLG1CQUFtQjtTQUNwQjtRQUNELFlBQVk7VUFDVixRQUFRLFFBQVE7VUFDaEIsY0FBYyxrQkFBa0IsVUFBVSxDQUFDLE9BQU8sQ0FBQztVQUNuRCxTQUFTLGtCQUFrQixVQUFVLENBQUMsT0FBTyxDQUFDO1NBQy9DO09BQ0Y7TUFDRCxrQkFBa0IsUUFBUSxDQUFDLENBQUMsV0FBVyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUNwRCxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtVQUMzQixLQUFLLE1BQU07VUFDWCxTQUFTLENBQUMsVUFBVSxDQUFDO1NBQ3RCLEVBQUUsa0JBQWtCLE1BQU0sQ0FBQyxDQUFDO01BQy9CLFFBQVEsUUFBUTtRQUNkLElBQUksQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7T0FDN0I7S0FDRixDQUFDLENBQUM7SUFDSCxNQUFNLGNBQWMsaURBQWlEO01BQ25FLE1BQU0sbUJBQW1CLFFBQVEsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLFVBQVUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNwRixPQUFPO1FBQ0wsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQztVQUM5QixZQUFZLEVBQUUsR0FBRyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRTtTQUMzRDtRQUNELFlBQVksRUFBRTtRQUNkLFlBQVksUUFBUSxDQUFDLENBQUMsVUFBVSxPQUFPLENBQUM7WUFDcEMsU0FBUyxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQztZQUMxQyxhQUFhLElBQUk7WUFDakIsZ0JBQWdCO1dBQ2pCLENBQUMsQ0FBQyxDQUFDO09BQ1AsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLG1CQUFtQixPQUFPLEVBQUUsS0FBSyxRQUFRLENBQUMsNENBQTRDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakcsTUFBTSxxQkFBcUIsaURBQWlELFNBQVMsT0FBTyxDQUFDO01BQzNGLEtBQUssUUFBUSxDQUFDLHdDQUF3QyxDQUFDO01BQ3ZELFlBQVk7UUFDVixXQUFXLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxrQkFBa0IsQ0FBQztRQUN2RSxnQkFBZ0IsRUFBRTtRQUNsQixXQUFXLENBQUMsa0JBQWtCLENBQUM7T0FDaEM7TUFDRCxxQkFBcUIsUUFBUSxDQUFDLENBQUMsUUFBUSxPQUFPLENBQUM7VUFDM0MsTUFBTSxPQUFPO1VBQ2IsY0FBYyxTQUFTO1VBQ3ZCLFdBQVcsVUFBVTtZQUNuQixPQUFPLFNBQVMsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLENBQUMsU0FBUyxFQUFFLENBQUM7V0FDeEQ7VUFDRCxPQUFPO1lBQ0wsZUFBZSxNQUFNLEVBQUU7WUFDdkIsVUFBVSxnQkFBZ0I7WUFDMUIsU0FBUyxlQUFlO1dBQ3pCO1NBQ0YsQ0FBQyxDQUFDLENBQUM7S0FDUCxDQUFDLENBQUM7SUFDSCxNQUFNLG9CQUFvQix3Q0FBd0M7TUFDaEUsTUFBTSxTQUFTLFdBQVcsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxLQUFLLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7TUFDekcsTUFBTSxVQUFVLFdBQVcsTUFBTSxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO01BQ2pFLE1BQU0sU0FBUyxXQUFXLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7TUFDeEUsTUFBTSxhQUFhLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFVBQVUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO01BQ3JGLE9BQU8sU0FBUyxPQUFPLENBQUM7UUFDdEIsS0FBSyxRQUFRLENBQUMsd0NBQXdDLENBQUM7UUFDdkQsVUFBVTtPQUNYLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxZQUFZLGdDQUFnQyxpQkFBaUIsQ0FBQztNQUNsRSxPQUFPLFNBQVMsT0FBTyxVQUFVLFVBQVUsQ0FBQyxLQUFLLENBQUM7TUFDbEQsV0FBVyxTQUFTLE9BQU8saUJBQWlCLEVBQUU7S0FDL0MsRUFBRSxRQUFRLEVBQUUsU0FBUyxPQUFPLFVBQVUsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sY0FBYywyQ0FBMkM7TUFDN0QsS0FBSztRQUNILEtBQUssS0FBSztRQUNWLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQztRQUNyQyxZQUFZLEVBQUUsY0FBYyxTQUFTLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUMxRCxRQUFRO1VBQ04sTUFBTSxLQUFLO1VBQ1gsT0FBTyxLQUFLO1VBQ1osUUFBUSxLQUFLO1VBQ2IsS0FBSyxDQUFDLEdBQUcsWUFBWSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1VBQ25DLFVBQVUsVUFBVTtTQUNyQjtPQUNGO01BQ0QsWUFBWSxFQUFFO01BQ2QsWUFBWSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsa0VBQWtFLENBQUMsRUFBRSxDQUFDO0tBQ3BHLENBQUMsQ0FBQztJQUNILE1BQU0saUJBQWlCLG1DQUFtQztNQUN4RCxTQUFTLE1BQU0sS0FBSyxZQUFZLEVBQUU7TUFDbEMsU0FBUyxjQUFjO1FBQ3JCLE1BQU0sZUFBZSxVQUFVLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMxRyxXQUFXLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxlQUFlLFdBQVcsQ0FBQyxVQUFVLFFBQVEsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7T0FDaEg7TUFDRCxXQUFXLE1BQU07UUFDZixXQUFXLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO09BQ25DO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxvQkFBb0IsZ0RBQWdEO01BQ3hFLE1BQU0sY0FBYyxxQkFBcUIsUUFBUSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDakUsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBQzVCLEdBQUcsSUFBSTtRQUNQLGNBQWMsQ0FBQztRQUNmLFVBQVUsU0FBUyxPQUFPLFFBQVE7UUFDbEMsaUJBQWlCO1VBQ2YsVUFBVSxPQUFPLENBQUM7WUFDaEIsU0FBUyxDQUFDLEdBQUcsYUFBYSxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQzFDLFdBQVc7WUFDWCxXQUFXO1dBQ1osQ0FBQztVQUNGLE1BQU0sQ0FBQyxFQUFFLENBQUM7VUFDVixHQUFHLElBQUksZ0JBQWdCO1NBQ3hCO1FBQ0QsVUFBVSxRQUFRO1VBQ2hCLElBQUksQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7U0FDN0I7UUFDRCxZQUFZO1FBQ1osWUFBWTtVQUNWLENBQUMsT0FBTyxFQUFFLEdBQUc7WUFDWCxVQUFVLEtBQUssRUFBRTtZQUNqQixTQUFTLEtBQUssRUFBRTtXQUNqQjtVQUNELENBQUMsYUFBYSxFQUFFLEdBQUc7WUFDakIsYUFBYTtZQUNiLFVBQVUsS0FBSyxFQUFFO1lBQ2pCLFVBQVU7WUFDVixlQUFlO1lBQ2Ysc0JBQXNCO1dBQ3ZCO1VBQ0QsQ0FBQyxlQUFlLEVBQUUsR0FBRztZQUNuQixzQkFBc0I7WUFDdEIsZUFBZTtZQUNmLFVBQVU7WUFDVixVQUFVLEtBQUssRUFBRTtZQUNqQixhQUFhO1dBQ2Q7U0FDRjtPQUNGLENBQUMsQ0FBQyxDQUFDO0tBQ0wsQ0FBQztJQUNGLE1BQU0saUJBQWlCLFVBQVUsaUJBQWlCLEVBQUUsS0FBSztNQUN2RCxNQUFNLFdBQVcsVUFBVTtRQUN6QixNQUFNLFFBQVEsS0FBSyxDQUFDLE1BQU0sTUFBTSxFQUFFLFFBQVE7VUFDeEMsTUFBTSxPQUFPLEtBQUssQ0FBQyxjQUFjLEVBQUUsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1VBQ2pFLE9BQU87WUFDTCxHQUFHLElBQUk7WUFDUCxTQUFTLElBQUk7V0FDZCxDQUFDO1NBQ0gsQ0FBQyxDQUFDO1FBQ0gsT0FBTztVQUNMLEdBQUcsTUFBTTtVQUNULEtBQUs7U0FDTixDQUFDO09BQ0gsQ0FBQztNQUNGLE9BQU8sS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVO1FBQzlCLE9BQU8sTUFBTSxLQUFLLEtBQUssTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7T0FDM0QsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sdUJBQXVCLFdBQVcsS0FBSyxDQUFDLE9BQU8sRUFBRSxpQkFBaUI7TUFDdEUsSUFBSSxNQUFNLEtBQUssS0FBSyxNQUFNLEVBQUU7UUFDMUIsTUFBTSxhQUFhLE1BQU0sQ0FBQztRQUMxQixPQUFPLEtBQUssQ0FBQyxVQUFVLE1BQU0sRUFBRSxvQkFBb0I7VUFDakQsUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUM7VUFDbkMsT0FBTyxRQUFRLENBQUM7U0FDakIsRUFBRSxHQUFHLENBQUMsQ0FBQztPQUNUO01BQ0QsT0FBTyxHQUFHLENBQUM7S0FDWixFQUFFLEVBQUUsQ0FBQyxDQUFDOztJQUVQLE1BQU0sbUJBQW1CLDBCQUEwQjtNQUNqRCxhQUFhLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDO01BQ2pDLFlBQVksQ0FBQyxjQUFjLEVBQUUsOEJBQThCO1FBQ3pELFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxRQUFRLEVBQUUsQ0FBQztPQUNoQixDQUFDO01BQ0YsWUFBWSxDQUFDLGVBQWUsRUFBRSw2QkFBNkI7UUFDekQsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztPQUM1QixDQUFDO01BQ0YsS0FBSyxDQUFDLGdCQUFnQixFQUFFLGFBQWEsTUFBTSxVQUFVLEVBQUUsQ0FBQztNQUN4RCxLQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksTUFBTSxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUM1RCxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsNEJBQTRCO01BQ2hELE1BQU0sZUFBZSxrQkFBa0IsS0FBSyxDQUFDLFNBQVMsRUFBRSxXQUFXO1FBQ2pFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsY0FBYztVQUN4QixDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3hDLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztNQUNILE1BQU0sV0FBVyxVQUFVO1FBQ3pCLFVBQVUsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtVQUNqRCxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3JCLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixPQUFPO1FBQ0wsR0FBRyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDO1FBQ3pDLFlBQVksQ0FBQyxlQUFlLEVBQUUsc0JBQXNCO1VBQ2xELElBQUksU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQzFDLENBQUM7T0FDSCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sYUFBYSxxQ0FBcUM7TUFDdEQsTUFBTSxlQUFlLGtCQUFrQixLQUFLLENBQUMsU0FBUyxFQUFFLFdBQVc7UUFDakUsUUFBUSxDQUFDLENBQUMsRUFBRSxjQUFjO1VBQ3hCLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDeEMsQ0FBQyxDQUFDO09BQ0osQ0FBQyxDQUFDO01BQ0gsTUFBTSxXQUFXLFVBQVU7UUFDekIsVUFBVSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMscUJBQXFCO1VBQ3JELENBQUMsQ0FBQyxpQkFBaUIsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3hDLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixPQUFPO1FBQ0wsR0FBRyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDO1FBQ3pDLFlBQVksQ0FBQyxlQUFlLEVBQUUsZUFBZSxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRSxZQUFZLENBQUMsZUFBZSxFQUFFLHNCQUFzQjtVQUNsRCxJQUFJLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQztTQUMxQyxDQUFDO1FBQ0YsWUFBWSxDQUFDLGVBQWUsRUFBRSxpQ0FBaUM7VUFDN0QsTUFBTSxVQUFVLE1BQU0sU0FBUyxVQUFVLEVBQUUsWUFBWSxFQUFFLEdBQUcsTUFBTSxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBUyxDQUFDO1VBQ2xHLE1BQU0sYUFBYSxXQUFXLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDO1VBQzNILE1BQU0sV0FBVyxXQUFXLENBQUMsU0FBUyxRQUFRLENBQUMsQ0FBQztVQUNoRCxNQUFNLFVBQVUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1VBQ25DLElBQUksU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNqQixNQUFNLEtBQUssS0FBSztZQUNoQixPQUFPLEtBQUssTUFBTTtXQUNuQixDQUFDLENBQUM7VUFDSCxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsV0FBVztZQUMxQyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtjQUN2QixPQUFPLEVBQUUsQ0FBQzthQUNYLE1BQU0sSUFBSSxPQUFPLE9BQU8sQ0FBQyxPQUFPLFFBQVEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Y0FDM0UsT0FBTyxFQUFFLENBQUM7YUFDWCxNQUFNO2NBQ0wsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDdkY7V0FDRixDQUFDLENBQUM7U0FDSixDQUFDO1FBQ0YsWUFBWSxDQUFDLGtCQUFrQixFQUFFLHNCQUFzQjtVQUNyRCxJQUFJLFlBQVksQ0FBQyxHQUFHLEVBQUU7WUFDcEIsWUFBWSxLQUFLLEtBQUs7WUFDdEIsWUFBWSxLQUFLLFFBQVE7V0FDMUIsQ0FBQyxDQUFDO1NBQ0osQ0FBQztRQUNGLGFBQWEsQ0FBQyxhQUFhO1VBQ3pCLE1BQU0sTUFBTSxjQUFjLEVBQUUsQ0FBQztVQUM3QixZQUFZLFNBQVMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQ2pELENBQUM7T0FDSCxDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLGFBQWEsdUJBQXVCLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxNQUFNLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM3RixNQUFNLFNBQVMsNkNBQTZDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsVUFBVSxNQUFNLEtBQUssS0FBSyxVQUFVLENBQUMsS0FBSyxDQUFDLGFBQWEsU0FBUyxRQUFRLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ2xMLE1BQU0sbUJBQW1CLGtCQUFrQjtNQUN6QyxNQUFNLGdCQUFnQixLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUNoRSxNQUFNLGVBQWUsV0FBVyxDQUFDLGFBQWEsRUFBRSxVQUFVLE1BQU0sTUFBTSxLQUFLLE9BQU8sQ0FBQyxDQUFDO01BQ3BGLE1BQU0sWUFBWSxtQkFBbUIsU0FBUyxPQUFPLENBQUM7UUFDcEQsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVMsQ0FBQyxDQUFDLG1CQUFtQixHQUFHLElBQUksRUFBRSxDQUFDLENBQUM7U0FDMUM7UUFDRCxZQUFZLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVSxNQUFNLFFBQVEsT0FBTyxFQUFFLENBQUM7T0FDOUQsQ0FBQyxDQUFDO01BQ0gsTUFBTSxlQUFlLFNBQVMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxLQUFLLENBQUMsQ0FBQztNQUMzRCxNQUFNLGFBQWEsU0FBUyxDQUFDLEtBQUssRUFBRSxZQUFZLEtBQUssQ0FBQyxDQUFDO01BQ3ZELE9BQU87UUFDTCxZQUFZO1FBQ1osVUFBVTtPQUNYLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxlQUFlLG1DQUFtQztNQUN0RCxNQUFNLGNBQWMsZ0JBQWdCO1FBQ2xDLE1BQU0sZ0JBQWdCLEtBQUssQ0FBQyxJQUFJLFFBQVEsRUFBRSxVQUFVO1VBQ2xELE1BQU0sWUFBWSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1VBQ3hELE9BQU87WUFDTCxNQUFNLE1BQU0sS0FBSztZQUNqQixPQUFPLE1BQU0sTUFBTTtZQUNuQixTQUFTLFNBQVM7V0FDbkIsQ0FBQztTQUNILENBQUMsQ0FBQztRQUNILE1BQU0sZUFBZSxjQUFjLE1BQU0sQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzNFLE9BQU8sUUFBUSxLQUFLLENBQUM7VUFDbkIsWUFBWTtVQUNaLGFBQWE7U0FDZCxDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsT0FBTztRQUNMLEtBQUssUUFBUSxDQUFDLHdDQUF3QyxDQUFDO1FBQ3ZELFlBQVksRUFBRTtRQUNkLFlBQVksUUFBUSxDQUFDLENBQUMsVUFBVSxPQUFPLENBQUM7WUFDcEMsU0FBUyxDQUFDLEdBQUcsYUFBYSxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQztZQUMzQyxhQUFhLFFBQVE7WUFDckIsV0FBVztZQUNYLGdCQUFnQjtXQUNqQixDQUFDLENBQUMsQ0FBQztPQUNQLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsbUNBQW1DLFlBQVksQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzFHLE1BQU0sb0JBQW9CLG1DQUFtQyxXQUFXLE1BQU0sT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7O0lBRW5JLE1BQU0sZ0JBQWdCLGtCQUFrQjtNQUN0QyxNQUFNLE9BQU8sTUFBTSxRQUFRLEVBQUUsQ0FBQztNQUM5QixJQUFJLElBQUksVUFBVSxFQUFFLFlBQVksRUFBRSxFQUFFO1FBQ2xDLE1BQU0sT0FBTyxTQUFTLFdBQVcsQ0FBQyxNQUFNLGVBQWUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDMUYsT0FBTyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO1VBQzdDLE1BQU0sU0FBUyxNQUFNLFVBQVUsRUFBRSxDQUFDO1VBQ2xDLE1BQU0sY0FBYyxNQUFNLEtBQUssQ0FBQyxLQUFLLFVBQVUsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1VBQ25FLE9BQU8sV0FBVyxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3BELENBQUMsQ0FBQztPQUNKLE1BQU07UUFDTCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEI7S0FDRixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsa0JBQWtCO01BQ3ZDLE1BQU0sT0FBTyxNQUFNLFFBQVEsRUFBRSxDQUFDO01BQzlCLE9BQU8sVUFBVSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxXQUFXLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNqSSxDQUFDO0lBQ0YsTUFBTSxlQUFlLHNDQUFzQztNQUN6RCxNQUFNLFdBQVcsS0FBSztRQUNwQixNQUFNLE9BQU8sTUFBTSxRQUFRLEVBQUUsQ0FBQztRQUM5QixJQUFJLElBQUksVUFBVSxFQUFFLFlBQVksRUFBRSxFQUFFO1VBQ2xDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNUO09BQ0YsQ0FBQztNQUNGLE1BQU0sVUFBVSxNQUFNO1FBQ3BCLE1BQU0sT0FBTyxNQUFNLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE1BQU0sWUFBWSxJQUFJLFVBQVUsRUFBRSxZQUFZLEVBQUUsR0FBRyxNQUFNLGVBQWUsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNsRixNQUFNLG9CQUFvQixZQUFZLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzRCxNQUFNLHVCQUF1QixLQUFLLENBQUMsY0FBYyxFQUFFLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLE9BQU87VUFDTCxHQUFHLGlCQUFpQjtVQUNwQixHQUFHLG9CQUFvQjtTQUN4QixDQUFDO09BQ0gsQ0FBQztNQUNGLE1BQU0sVUFBVSxXQUFXO1FBQ3pCLFFBQVEsQ0FBQyxLQUFLO1VBQ1osTUFBTSxXQUFXLFdBQVcsUUFBUSxFQUFFLENBQUM7VUFDdkMsTUFBTSxhQUFhLFNBQVMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7VUFDaEQsTUFBTSxrQkFBa0IsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztVQUMzRCxNQUFNLE9BQU8sTUFBTSxlQUFlLEVBQUUsQ0FBQztVQUNyQyxZQUFZLFNBQVMsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7VUFDN0MsSUFBSSxDQUFDLGNBQWMsRUFBRSxVQUFVO1lBQzdCLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRTtjQUN4QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0QjtXQUNGLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLGFBQWEsaUJBQWlCO1FBQ2xDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxPQUFPLEdBQUcsU0FBUyxRQUFRLENBQUMsQ0FBQztPQUNoRixDQUFDO01BQ0YsTUFBTSxRQUFRLFFBQVE7UUFDcEIsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsTUFBTSxDQUFDLENBQUM7T0FDbEQsQ0FBQztNQUNGLE1BQU0sUUFBUSxXQUFXO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7VUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3R0FBd0csQ0FBQyxDQUFDO1NBQzNIO1FBQ0QsUUFBUSxDQUFDLFFBQVE7VUFDZixRQUFRLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDN0MsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sVUFBVSxNQUFNO1FBQ3BCLFFBQVEsQ0FBQyxRQUFRO1VBQ2YsSUFBSSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1NBQzlCLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLFVBQVUsUUFBUTtRQUN0QixRQUFRLENBQUMsS0FBSztVQUNaLE1BQU0sT0FBTyxNQUFNLFFBQVEsRUFBRSxDQUFDO1VBQzlCLE1BQU0sWUFBWSxVQUFVLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUM1QyxJQUFJLFNBQVMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRTtZQUMvQyxTQUFTLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWM7Y0FDNUMsVUFBVSxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ3RDLENBQUMsQ0FBQztXQUNKO1NBQ0YsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sU0FBUyxLQUFLO1FBQ2xCLFFBQVEsQ0FBQyxRQUFRO1VBQ2YsTUFBTSxLQUFLLE1BQU0sTUFBTSxFQUFFLENBQUM7VUFDMUIsTUFBTSxhQUFhLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUMvQixNQUFNLG9CQUFvQixjQUFjLENBQUMsVUFBVSxlQUFlLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztVQUM1RixJQUFJLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7VUFDekUsSUFBSSxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsZUFBZSxDQUFDLENBQUM7VUFDdkYsSUFBSSxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsZUFBZSxDQUFDLENBQUM7VUFDdEYsSUFBSSxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQzNELEdBQUcsVUFBVSxlQUFlO1lBQzVCLFNBQVMsaUJBQWlCO1dBQzNCLENBQUMsQ0FBQztVQUNILFdBQVcsUUFBUSxDQUFDLFVBQVUsWUFBWSxDQUFDLENBQUM7U0FDN0MsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sUUFBUSxNQUFNO1FBQ2xCLFFBQVEsQ0FBQyxRQUFRO1VBQ2YsSUFBSSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztTQUM1QixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxjQUFjO1FBQ2xCLE9BQU87UUFDUCxPQUFPO1FBQ1AsVUFBVTtRQUNWLEtBQUs7UUFDTCxLQUFLO1FBQ0wsT0FBTztRQUNQLE9BQU87UUFDUCxNQUFNO1FBQ04sS0FBSztRQUNMLGtCQUFrQixNQUFNLGlCQUFpQjtPQUMxQyxDQUFDO01BQ0YsT0FBTyxXQUFXLENBQUM7S0FDcEIsQ0FBQzs7SUFFRixNQUFNLHVCQUF1QixRQUFRO01BQ25DLFFBQVEsSUFBSTtXQUNQLE9BQU87UUFDVixPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztXQUM3QixRQUFRO1FBQ1gsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUM7O1FBRWhDLE9BQU8sRUFBRSxDQUFDO09BQ1g7S0FDRixDQUFDO0lBQ0YsTUFBTSxlQUFlLGtDQUFrQztNQUNyRCxNQUFNLFdBQVcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQ3RDLE1BQU0saUJBQWlCLFVBQVUsZUFBZSxDQUFDO01BQ2pELE1BQU0sU0FBUyxTQUFTLENBQUMsY0FBYyxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQ3BFLE1BQU0sT0FBTyxlQUFlLENBQUM7UUFDM0IsTUFBTSxjQUFjLEtBQUs7UUFDekIsYUFBYSxjQUFjLFlBQVk7T0FDeEMsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7TUFDeEIsTUFBTSxvQkFBb0IsY0FBYyxDQUFDLGNBQWMsUUFBUSxDQUFDLENBQUM7TUFDakUsTUFBTSxhQUFhLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLENBQUM7TUFDM0QsTUFBTSxTQUFTLE1BQU0sQ0FBQyxpQkFBaUIsT0FBTyxLQUFLLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLFNBQVMsaUJBQWlCLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztNQUM5SCxNQUFNLGVBQWUsVUFBVSxDQUFDLE1BQU0sV0FBVyxFQUFFLGNBQWMsQ0FBQyxNQUFNLE1BQU0sRUFBRSxTQUFTLE9BQU8sVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsT0FBTyxRQUFRLENBQUMsQ0FBQztNQUM5SSxNQUFNLGFBQWEsb0JBQW9CLENBQUMsY0FBYyxLQUFLLENBQUMsQ0FBQztNQUM3RCxNQUFNLE9BQU87UUFDWCxJQUFJLFFBQVE7UUFDWixNQUFNO1FBQ04sSUFBSTtRQUNKLE1BQU07UUFDTixjQUFjLFVBQVU7UUFDeEIsaUJBQWlCLEVBQUU7UUFDbkIsYUFBYSxFQUFFO09BQ2hCLENBQUM7TUFDRixNQUFNLFNBQVMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7TUFDNUUsTUFBTSxjQUFjLENBQUMsTUFBTTtRQUN6QixNQUFNLFVBQVUsTUFBTTtVQUNwQixNQUFNLFlBQVksV0FBVyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7VUFDOUMsT0FBTyxTQUFTLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3pELENBQUM7UUFDRixNQUFNLG1CQUFtQixNQUFNO1VBQzdCLE1BQU0sa0JBQWtCLHdCQUF3QixDQUFDO1VBQ2pELE1BQU0sWUFBWSxZQUFZLFFBQVEsQ0FBQyxNQUFNLFFBQVEsSUFBSSxDQUFDLENBQUM7VUFDM0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLEVBQUU7WUFDcEMsUUFBUSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNoQyxLQUFLLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1dBQ25DLE1BQU07WUFDTCxRQUFRLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ3JDLEtBQUssQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7V0FDOUI7U0FDRixDQUFDO1FBQ0YsT0FBTztVQUNMLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQztVQUMzQixTQUFTLFVBQVUsQ0FBQyxNQUFNLENBQUM7VUFDM0IsU0FBUyxNQUFNLFdBQVcsUUFBUSxDQUFDLE1BQU0sQ0FBQztVQUMxQyxXQUFXLE1BQU0sV0FBVyxVQUFVLENBQUMsTUFBTSxDQUFDO1VBQzlDLGdCQUFnQixPQUFPO1VBQ3ZCLGdCQUFnQjtTQUNqQixDQUFDO09BQ0gsR0FBRyxDQUFDO01BQ0wsTUFBTSxjQUFjLFlBQVksQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7TUFDeEUsT0FBTztRQUNMLE1BQU07UUFDTixXQUFXO09BQ1osQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSwyQkFBMkIsUUFBUTtNQUN2QyxRQUFRLElBQUk7V0FDUCxRQUFRO1FBQ1gsT0FBTyxRQUFRLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDOztRQUU3QyxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEI7S0FDRixDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsK0JBQStCLFlBQVksS0FBSyxLQUFLO01BQzlFLE1BQU0sV0FBVyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDdEMsTUFBTSxnQkFBZ0IsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO01BQ2pELE1BQU0sa0JBQWtCLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO01BQ3JELE1BQU0saUJBQWlCLFVBQVUsZUFBZSxDQUFDO01BQ2pELE1BQU0sYUFBYSx3QkFBd0IsQ0FBQyxjQUFjLEtBQUssQ0FBQyxDQUFDO01BQ2pFLE1BQU0sY0FBYyxxQkFBcUIsUUFBUSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDakUsTUFBTSxZQUFZLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztRQUMxQyxPQUFPLGNBQWMsTUFBTTtRQUMzQixXQUFXLElBQUk7T0FDaEIsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFNBQVMsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDO01BQ3pELE1BQU0sVUFBVSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFDdEMsTUFBTSxjQUFjLEtBQUs7UUFDekIsYUFBYSxjQUFjLFlBQVk7T0FDeEMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO01BQ3JELE1BQU0sc0JBQXNCLGNBQWMsQ0FBQyxjQUFjLFFBQVEsQ0FBQyxDQUFDO01BQ25FLE1BQU0sYUFBYSxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO01BQzdELE1BQU0sZUFBZSxNQUFNLENBQUMsbUJBQW1CLE9BQU8sS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsU0FBUyxtQkFBbUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDakosTUFBTSxlQUFlLFVBQVUsQ0FBQyxNQUFNLFdBQVcsRUFBRTtRQUNqRCxTQUFTLFNBQVM7VUFDaEIsUUFBUSxNQUFNLENBQUMsTUFBTSxFQUFFLGVBQWU7WUFDcEMsTUFBTSxlQUFlLFNBQVMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ25GLE9BQU8sV0FBVyxDQUFDLEtBQUssUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLE9BQU8sVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO1dBQ2pGLENBQUMsQ0FBQztTQUNKO1FBQ0QsV0FBVyxNQUFNO1VBQ2YsUUFBUSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDMUI7UUFDRCxTQUFTLE1BQU0sS0FBSyxZQUFZLEVBQUU7T0FDbkMsRUFBRSxTQUFTLE9BQU8sUUFBUSxDQUFDLENBQUM7TUFDN0IsTUFBTSxjQUFjLG1CQUFtQixDQUFDO01BQ3hDLE1BQU0sU0FBUyxPQUFPLENBQUM7UUFDckIsS0FBSztVQUNILEtBQUssS0FBSztVQUNWLFNBQVM7WUFDUCxZQUFZO1lBQ1osV0FBVztZQUNYLEdBQUcsVUFBVSxRQUFRLEVBQUU7V0FDeEI7VUFDRCxZQUFZO1lBQ1YsTUFBTSxRQUFRO1lBQ2QsQ0FBQyxpQkFBaUIsR0FBRyxhQUFhO1dBQ25DO1NBQ0Y7UUFDRCxZQUFZO1VBQ1YsQ0FBQyxPQUFPLEVBQUUsR0FBRztZQUNYLFVBQVUsS0FBSyxFQUFFO1lBQ2pCLFNBQVMsS0FBSyxFQUFFO1dBQ2pCO1VBQ0QsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLGlCQUFpQixDQUFDO1VBQ2xDLENBQUMsYUFBYSxFQUFFLEdBQUc7WUFDakIsWUFBWTtZQUNaLGlCQUFpQjtXQUNsQjtTQUNGO1FBQ0QsWUFBWSxRQUFRLENBQUM7VUFDbkIsTUFBTSxPQUFPLENBQUM7WUFDWixNQUFNLFFBQVE7WUFDZCxVQUFVLEtBQUs7Y0FDYixJQUFJLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO2NBQ3hCLE9BQU8sUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDNUI7WUFDRCxjQUFjLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxLQUFLLFVBQVUsQ0FBQztZQUNsSCxjQUFjLENBQUM7V0FDaEIsQ0FBQztVQUNGLFVBQVUsT0FBTyxDQUFDO1lBQ2hCLFNBQVMsQ0FBQyxHQUFHLGFBQWEsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUM7WUFDM0MsV0FBVztZQUNYLGFBQWEsVUFBVTtXQUN4QixDQUFDO1VBQ0YsUUFBUSxPQUFPLENBQUMsRUFBRSxDQUFDO1VBQ25CLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLE9BQU8sQ0FBQztZQUM1QyxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUUsZUFBZTtjQUNwQyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN0QixDQUFDO1lBQ0YsS0FBSyxDQUFDLFlBQVksRUFBRSxFQUFFLGNBQWM7Y0FDbEMsSUFBSSxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMseUJBQXlCLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsRUFBRSxDQUFDLENBQUM7YUFDNUYsQ0FBQztXQUNILENBQUMsQ0FBQztVQUNILFFBQVEsT0FBTyxDQUFDLEVBQUUsU0FBUyxNQUFNLFFBQVEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7VUFDekQsU0FBUyxPQUFPLENBQUMsRUFBRSxDQUFDO1VBQ3BCLE1BQU0sQ0FBQyxFQUFFLENBQUM7U0FDWCxDQUFDO1FBQ0YsWUFBWTtVQUNWLFNBQVMsT0FBTyxFQUFFO1VBQ2xCLE9BQU8sT0FBTyxFQUFFO1VBQ2hCLEdBQUcsWUFBWSxJQUFJLENBQUMsYUFBYSxTQUFTLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtTQUMvRDtPQUNGLENBQUMsQ0FBQztNQUNILE1BQU0sbUJBQW1CLE1BQU07UUFDN0IsTUFBTSxrQkFBa0Isd0JBQXdCLENBQUM7UUFDakQsTUFBTSxZQUFZLFlBQVksUUFBUSxDQUFDLE1BQU0sUUFBUSxJQUFJLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUU7VUFDekMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7VUFDbkMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7U0FDckMsTUFBTTtVQUNMLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1VBQ3ZDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1NBQ2pDO09BQ0YsQ0FBQztNQUNGLE1BQU0sY0FBYyxZQUFZLENBQUM7UUFDL0IsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQzNCLFNBQVMsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUMzQixXQUFXLE1BQU0sWUFBWSxJQUFJLENBQUMsYUFBYSxTQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRSxTQUFTLE1BQU0sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2xDLGdCQUFnQixNQUFNO1VBQ3BCLE1BQU0sT0FBTyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztVQUNqQyxPQUFPLFNBQVMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDL0M7UUFDRCxnQkFBZ0I7T0FDakIsRUFBRSxLQUFLLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztNQUM3QixPQUFPO1FBQ0wsTUFBTTtRQUNOLFdBQVc7T0FDWixDQUFDO0tBQ0gsQ0FBQzs7SUFFRixJQUFJLFNBQVMsT0FBTyxLQUFLLE1BQU0sUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7O0lBRTVELE1BQU0sa0JBQWtCLFFBQVE7TUFDOUIsTUFBTSxXQUFXLEtBQUs7UUFDcEIsSUFBSSxJQUFJLFVBQVUsRUFBRSxZQUFZLEVBQUUsRUFBRTtVQUNsQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDVDtPQUNGLENBQUM7TUFDRixNQUFNLFFBQVEsV0FBVztRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1VBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkdBQTJHLENBQUMsQ0FBQztTQUM5SDtRQUNELFFBQVEsQ0FBQyxRQUFRO1VBQ2YsUUFBUSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQzdDLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLFVBQVUsTUFBTTtRQUNwQixRQUFRLENBQUMsUUFBUTtVQUNmLElBQUksQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztTQUM5QixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxRQUFRLE1BQU07UUFDbEIsUUFBUSxDQUFDLFFBQVE7VUFDZixJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1NBQzVCLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLGNBQWMsUUFBUTtRQUMxQixRQUFRLENBQUMsUUFBUTtVQUNmLElBQUksVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDOUQsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE9BQU87UUFDTCxLQUFLO1FBQ0wsT0FBTztRQUNQLEtBQUs7UUFDTCxXQUFXO09BQ1osQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSw0QkFBNEI7TUFDaEMsZUFBZTtNQUNmLFlBQVk7TUFDWixhQUFhO01BQ2IsT0FBTztNQUNQLE9BQU87TUFDUCxTQUFTO0tBQ1YsQ0FBQztJQUNGLE1BQU0scUJBQXFCLFFBQVEsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLHlCQUF5QixRQUFRLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM5RyxNQUFNLGtCQUFrQixRQUFRLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDeEcsTUFBTSxnQkFBZ0IsdUJBQXVCO01BQzNDLFFBQVEsSUFBSSxVQUFVO1dBQ2pCLGVBQWU7UUFDbEIsTUFBTSxjQUFjLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQztRQUNuQyxNQUFNO1dBQ0gsWUFBWTtRQUNmLE1BQU0sV0FBVyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUM7UUFDaEMsTUFBTTtXQUNILGFBQWE7UUFDaEIsTUFBTSxLQUFLLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQztRQUNoRCxNQUFNLFlBQVksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQztRQUM3QyxNQUFNO1dBQ0gsT0FBTztRQUNWLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDWixNQUFNO1dBQ0gsT0FBTztRQUNWLEdBQUcsTUFBTSxDQUFDLElBQUksUUFBUSxDQUFDLENBQUM7UUFDeEIsTUFBTTtXQUNILFNBQVM7UUFDWixHQUFHLFFBQVEsRUFBRSxDQUFDO1FBQ2QsTUFBTTtPQUNQO0tBQ0YsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLDhDQUE4QztNQUNwRSxNQUFNLFdBQVcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQ3RDLE1BQU0sU0FBUyxTQUFTLENBQUMsY0FBYyxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQ3BFLE1BQU0sT0FBTyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztNQUM5QyxNQUFNLFNBQVMsY0FBYyxRQUFRLEtBQUssQ0FBQyxXQUFXO1FBQ3BELElBQUksT0FBTyxPQUFPLEtBQUssQ0FBQyxFQUFFO1VBQ3hCLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztTQUN4QixNQUFNO1VBQ0wsT0FBTyxRQUFRLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1NBQzNFO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxlQUFlLGFBQWEsQ0FBQyxNQUFNLFdBQVcsRUFBRSxjQUFjLENBQUMsTUFBTSxNQUFNLEVBQUUsU0FBUyxPQUFPLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO01BQ3ZILE1BQU0sU0FBUztRQUNiLEdBQUcsY0FBYyxPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFdBQVc7VUFDbkQsVUFBVSxNQUFNLEdBQUcsSUFBSTtVQUN2QixjQUFjLE1BQU0sR0FBRyxJQUFJO1NBQzVCLENBQUMsQ0FBQztRQUNILEdBQUcsY0FBYyxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFVBQVU7VUFDakQsU0FBUyxLQUFLLEdBQUcsSUFBSTtVQUNyQixhQUFhLEtBQUssR0FBRyxJQUFJO1NBQzFCLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLFVBQVUsY0FBYyxNQUFNLE9BQU8sRUFBRSxJQUFJLGNBQWMsT0FBTyxPQUFPLEVBQUUsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxDQUFDO01BQ2hILE1BQU0sWUFBWSxJQUFJLE1BQU0sQ0FBQyxjQUFjLElBQUksRUFBRSxFQUFFLFVBQVUsSUFBSSxNQUFNLENBQUMsTUFBTSxTQUFTLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUNqRyxNQUFNLGVBQWUsQ0FBQyxHQUFHLFNBQVMsU0FBUyxFQUFFLEdBQUcsR0FBRyxTQUFTLEtBQUssRUFBRSxHQUFHLFNBQVMsS0FBSyxHQUFHLEdBQUcsR0FBRyxTQUFTLEtBQUssR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO01BQ3BILE1BQU0seUJBQXlCLFVBQVUsRUFBRSxDQUFDO01BQzVDLE1BQU0sa0JBQWtCO1FBQ3RCLE1BQU0sQ0FBQyxVQUFVLEVBQUU7VUFDakIsYUFBYSxDQUFDLE1BQU07WUFDbEIsTUFBTSxTQUFTLElBQUksQ0FBQyxZQUFZLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSztjQUNoRSxJQUFJLFNBQVMsYUFBYSxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFO2dCQUNwRCxNQUFNLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQztnQkFDeEIsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtrQkFDNUIsYUFBYSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQzFDLE1BQU0sSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUU7a0JBQ2hDLGNBQWMsVUFBVSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDN0M7ZUFDRjthQUNGLENBQUMsQ0FBQztZQUNILHNCQUFzQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7V0FDcEMsQ0FBQztVQUNGLGFBQWEsQ0FBQyxzQkFBc0IsTUFBTSxDQUFDO1NBQzVDLENBQUM7UUFDRixTQUFTLE9BQU8sQ0FBQztVQUNmLFVBQVU7WUFDUixDQUFDLHNCQUFzQixHQUFHO2NBQ3hCLFdBQVcsZ0JBQWdCO2dCQUN6QixVQUFVLENBQUMsSUFBSSxRQUFRLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxhQUFhO2tCQUNuRCxNQUFNLFlBQVksU0FBUyxJQUFJLGNBQWMsQ0FBQztrQkFDOUMsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQzVCLFNBQVMsWUFBWSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQzttQkFDM0M7aUJBQ0YsQ0FBQyxDQUFDO2VBQ0o7YUFDRjtXQUNGO1NBQ0YsQ0FBQztPQUNILENBQUM7TUFDRixNQUFNLE9BQU87UUFDWCxJQUFJLFFBQVE7UUFDWixNQUFNO1FBQ04sSUFBSTtRQUNKLE1BQU07UUFDTixjQUFjLE9BQU87UUFDckIsZUFBZTtRQUNmLGFBQWEsTUFBTTtPQUNwQixDQUFDO01BQ0YsTUFBTSxTQUFTLGlCQUFpQixDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQ2hGLE1BQU0sY0FBYyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDNUMsT0FBTztRQUNMLE1BQU07UUFDTixXQUFXO09BQ1osQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxVQUFVLGFBQWE7TUFDM0IsTUFBTSxrQkFBa0IsU0FBUyxPQUFPLENBQUM7TUFDekMsTUFBTSxPQUFPLHVCQUF1QjtRQUNsQyxNQUFNLGNBQWMsTUFBTTtVQUN4QixXQUFXLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztVQUM5QixRQUFRLEVBQUUsQ0FBQztTQUNaLENBQUM7UUFDRixNQUFNLGlCQUFpQixNQUFNLENBQUMsa0JBQWtCLENBQUM7VUFDL0MsTUFBTSxhQUFhO1VBQ25CLE1BQU0sSUFBSTtVQUNWLFNBQVMsSUFBSTtVQUNiLFlBQVksUUFBUSxLQUFLLENBQUMsU0FBUyxDQUFDO1VBQ3BDLE9BQU8sS0FBSztVQUNaLFNBQVMsSUFBSTtVQUNiLE1BQU0sUUFBUSxLQUFLLEVBQUU7U0FDdEIsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN6QixNQUFNLFlBQVksU0FBUyxFQUFFLENBQUM7UUFDOUIsTUFBTSxZQUFZLE1BQU0sQ0FBQyxXQUFXLEVBQUUsZUFBZSxVQUFVLENBQUMsQ0FBQztRQUNqRSxNQUFNLGNBQWMsT0FBTyxDQUFDLGNBQWMsQ0FBQztVQUN6QyxVQUFVLE1BQU0sZUFBZSxRQUFRLEVBQUU7VUFDekMsUUFBUSxZQUFZLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQztVQUMxQyxNQUFNLFlBQVksQ0FBQyxPQUFPLEVBQUUsZUFBZSxVQUFVLENBQUM7VUFDdEQsUUFBUSxRQUFRLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLGNBQWMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDM0UsVUFBVSxXQUFXO1VBQ3JCLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztVQUNsQyxpQkFBaUIsRUFBRTtVQUNuQixhQUFhLEVBQUU7VUFDZixjQUFjLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQztVQUNuRCxZQUFZLEVBQUU7U0FDZixDQUFDLENBQUMsQ0FBQztRQUNKLFdBQVcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sb0JBQW9CLGNBQWMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFELFFBQVEsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7T0FDbkMsQ0FBQztNQUNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztLQUNqQixDQUFDOztJQUVGLE1BQU0sVUFBVSxhQUFhO01BQzNCLE1BQU0sa0JBQWtCLFNBQVMsT0FBTyxDQUFDO01BQ3pDLE1BQU0sT0FBTyx1QkFBdUI7UUFDbEMsTUFBTSxjQUFjLFNBQVM7VUFDM0IsV0FBVyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7VUFDaEMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2pCLENBQUM7UUFDRixNQUFNLGVBQWUsTUFBTSxDQUFDLGtCQUFrQixDQUFDO1VBQzdDLE1BQU0sS0FBSztVQUNYLE1BQU0sS0FBSztVQUNYLFNBQVMsSUFBSTtVQUNiLFlBQVksUUFBUSxLQUFLLENBQUMsU0FBUyxDQUFDO1VBQ3BDLE9BQU8sS0FBSztVQUNaLFNBQVMsSUFBSTtVQUNiLE1BQU0sUUFBUSxLQUFLLEVBQUU7U0FDdEIsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN6QixNQUFNLFdBQVcsa0JBQWtCLENBQUM7VUFDbEMsTUFBTSxJQUFJO1VBQ1YsTUFBTSxJQUFJO1VBQ1YsU0FBUyxLQUFLO1VBQ2QsWUFBWSxRQUFRLEtBQUssQ0FBQyxXQUFXLENBQUM7VUFDdEMsT0FBTyxLQUFLO1VBQ1osU0FBUyxJQUFJO1VBQ2IsTUFBTSxRQUFRLEtBQUssRUFBRTtTQUN0QixFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN4QixNQUFNLFlBQVksU0FBUyxFQUFFLENBQUM7UUFDOUIsTUFBTSxZQUFZLE1BQU0sQ0FBQyxNQUFNLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxlQUFlLFVBQVUsQ0FBQyxDQUFDO1FBQzlFLE1BQU0sZ0JBQWdCLE9BQU8sQ0FBQyxjQUFjLENBQUM7VUFDM0MsVUFBVSxNQUFNLGVBQWUsUUFBUSxFQUFFO1VBQ3pDLFFBQVEsWUFBWSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7VUFDMUMsTUFBTSxZQUFZLENBQUMsT0FBTyxFQUFFLGVBQWUsVUFBVSxDQUFDO1VBQ3RELFFBQVEsUUFBUSxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUU7WUFDN0MsUUFBUTtZQUNSLFlBQVksT0FBTyxFQUFFO1dBQ3RCLENBQUMsQ0FBQyxDQUFDO1VBQ0osVUFBVSxNQUFNLFdBQVcsQ0FBQyxLQUFLLENBQUM7VUFDbEMsY0FBYyxDQUFDLG9CQUFvQixDQUFDO1VBQ3BDLGlCQUFpQixFQUFFO1VBQ25CLGFBQWEsRUFBRTtVQUNmLGNBQWM7WUFDWixLQUFLLENBQUMsZUFBZSxFQUFFLE1BQU0sV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hELEtBQUssQ0FBQyxlQUFlLEVBQUUsTUFBTSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDaEQ7VUFDRCxZQUFZLEVBQUU7U0FDZixDQUFDLENBQUMsQ0FBQztRQUNKLFdBQVcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sa0JBQWtCLFlBQVksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hELFFBQVEsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO09BQ2pDLENBQUM7TUFDRixPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7S0FDakIsQ0FBQzs7SUFFRixNQUFNLGVBQWUscUJBQXFCLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25GLE1BQU0seUJBQXlCLFVBQVUsT0FBTyxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUscUJBQXFCLENBQUMsQ0FBQztJQUN4SCxNQUFNLDZCQUE2QixtREFBbUQ7TUFDcEYsSUFBSSxlQUFlLElBQUksb0JBQW9CLEVBQUU7UUFDM0MsT0FBTyxFQUFFLENBQUM7T0FDWCxNQUFNO1FBQ0wsT0FBTyxDQUFDLE9BQU8sT0FBTyxDQUFDO1lBQ25CLFlBQVk7Y0FDVixhQUFhLE1BQU0sUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksUUFBUSxDQUFDLE1BQU0sd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FDL0YsYUFBYSx3QkFBd0I7Y0FDckMsY0FBYyx5QkFBeUI7Y0FDdkMsaUJBQWlCLDRCQUE0QjthQUM5QztZQUNELE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDZCxjQUFjLFFBQVE7Y0FDcEIsTUFBTSxzQkFBc0IscUJBQXFCLENBQUMsTUFBTSxFQUFFLElBQUksUUFBUSxDQUFDLENBQUM7Y0FDeEUsT0FBTyxtQkFBbUIsSUFBSSxDQUFDLE1BQU07Z0JBQ25DLE1BQU0saUJBQWlCLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDekMsT0FBTztrQkFDTCxRQUFRLGNBQWM7a0JBQ3RCLGNBQWMsUUFBUSxLQUFLLENBQUM7b0JBQzFCLGtCQUFrQixFQUFFLFFBQVEsSUFBSSxVQUFVO29CQUMxQyxjQUFjLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJO21CQUN6QyxDQUFDO2lCQUNILENBQUM7ZUFDSCxDQUFDLFdBQVcsQ0FBQyxPQUFPO2dCQUNuQixRQUFRLEdBQUcsRUFBRTtnQkFDYixjQUFjLFFBQVEsS0FBSyxFQUFFO2VBQzlCLENBQUMsQ0FBQyxDQUFDO2FBQ0w7V0FDRixDQUFDLENBQUMsQ0FBQztPQUNQO0tBQ0YsQ0FBQztJQUNGLE1BQU0sUUFBUSxVQUFVO01BQ3RCLE1BQU0sU0FBUyxNQUFNLE9BQU8sQ0FBQztNQUM3QixNQUFNLG9CQUFvQixlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDbEQsTUFBTSxjQUFjLE9BQU8sQ0FBQyxNQUFNLFdBQVcsT0FBTyxDQUFDLENBQUM7TUFDdEQsTUFBTSxnQkFBZ0IsT0FBTyxDQUFDLE1BQU0sV0FBVyxPQUFPLENBQUMsQ0FBQztNQUN4RCxNQUFNLE9BQU8saUNBQWlDO1FBQzVDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUU7VUFDeEIsSUFBSSxNQUFNLE9BQU8sS0FBSyxTQUFTLEVBQUU7WUFDL0IsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxXQUFXLE1BQU0sT0FBTyxRQUFRLGFBQWEsRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztXQUM3RyxNQUFNLElBQUksTUFBTSxPQUFPLEtBQUssUUFBUSxFQUFFO1lBQ3JDLE9BQU8sc0JBQXNCLENBQUMsTUFBTSxFQUFFLE1BQU0sV0FBVyxNQUFNLE9BQU8sUUFBUSxtQkFBbUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztXQUN6SCxNQUFNLElBQUksTUFBTSxPQUFPLEtBQUssUUFBUSxFQUFFO1lBQ3JDLE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE1BQU0sV0FBVyxNQUFNLE9BQU8sUUFBUSxPQUFPLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7V0FDdkc7U0FDRjtRQUNELE9BQU8sZUFBZSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztPQUM3QyxDQUFDO01BQ0YsTUFBTSxVQUFVLHlCQUF5QixrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDakYsTUFBTSxxQkFBcUIseUJBQXlCO1FBQ2xELE1BQU0sVUFBVSxZQUFZO1VBQzFCLE1BQU0sU0FBUyxlQUFlLENBQUMsUUFBUSxFQUFFO1lBQ3ZDLGFBQWEsTUFBTTtjQUNqQixXQUFXLEtBQUssQ0FBQyxNQUFNLE9BQU8sQ0FBQyxDQUFDO2NBQ2hDLFdBQVcsQ0FBQyxNQUFNLFlBQVksQ0FBQyxDQUFDO2FBQ2pDO1dBQ0YsRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLE9BQU8sQ0FBQyxDQUFDO1VBQ3JDLFdBQVcsS0FBSyxDQUFDLE1BQU0sT0FBTyxDQUFDLENBQUM7VUFDaEMsT0FBTyxNQUFNLFlBQVksQ0FBQztTQUMzQixDQUFDO1FBQ0YsT0FBTyxhQUFhLFFBQVEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7T0FDL0MsQ0FBQztNQUNGLE1BQU0sa0JBQWtCLHlCQUF5QjtRQUMvQyxNQUFNLFVBQVUsa0RBQWtEO1VBQ2hFLE1BQU0sY0FBYyxtQkFBbUIsQ0FBQztVQUN4QyxNQUFNLGFBQWE7WUFDakIsYUFBYTtZQUNiLFdBQVc7WUFDWCxnQkFBZ0IsUUFBUTtXQUN6QixDQUFDO1VBQ0YsTUFBTSxTQUFTLFlBQVksQ0FBQyxVQUFVLEVBQUU7WUFDdEMsUUFBUSxhQUFhLE9BQU87WUFDNUIsYUFBYSxNQUFNO2NBQ2pCLFdBQVcsS0FBSyxDQUFDLE1BQU0sT0FBTyxDQUFDLENBQUM7Y0FDaEMsV0FBVyxDQUFDLE1BQU0sWUFBWSxDQUFDLENBQUM7YUFDakM7V0FDRixFQUFFLE1BQU0sV0FBVyxPQUFPLENBQUMsQ0FBQztVQUM3QixXQUFXLEtBQUssQ0FBQyxNQUFNLE9BQU8sQ0FBQyxDQUFDO1VBQ2hDLE1BQU0sWUFBWSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7VUFDeEMsT0FBTyxNQUFNLFlBQVksQ0FBQztTQUMzQixDQUFDO1FBQ0YsT0FBTyxhQUFhLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7T0FDNUMsQ0FBQztNQUNGLE1BQU0sbUJBQW1CLGlEQUFpRDtRQUN4RSxNQUFNLFVBQVUsa0RBQWtEO1VBQ2hFLE1BQU0sY0FBYyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsYUFBYSxDQUFDLENBQUM7VUFDckUsTUFBTSxlQUFlLE9BQU8sRUFBRSxDQUFDO1VBQy9CLE1BQU0sdUJBQXVCLE1BQU0sV0FBVyxNQUFNLE9BQU8sT0FBTyxrQkFBa0IsRUFBRSxDQUFDO1VBQ3ZGLE1BQU0sYUFBYTtZQUNqQixhQUFhO1lBQ2IsV0FBVztZQUNYLGdCQUFnQixRQUFRO1dBQ3pCLENBQUM7VUFDRixNQUFNLGlCQUFpQixNQUFNLFlBQVksR0FBRyxDQUFDLFVBQVU7WUFDckQsVUFBVSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7V0FDekIsQ0FBQyxDQUFDO1VBQ0gsTUFBTSxXQUFXLGtCQUFrQixDQUFDLFVBQVUsRUFBRTtZQUM5QyxRQUFRLGFBQWEsT0FBTztZQUM1QixhQUFhLE1BQU07Y0FDakIsWUFBWSxHQUFHLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQztjQUNqQyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7Y0FDM0MsWUFBWSxNQUFNLEVBQUUsQ0FBQztjQUNyQixXQUFXLENBQUMsUUFBUSxZQUFZLENBQUMsQ0FBQzthQUNuQztXQUNGLEVBQUUsTUFBTSxXQUFXLE1BQU0sRUFBRSxZQUFZLFVBQVUsQ0FBQyxDQUFDO1VBQ3BELE1BQU0sbUJBQW1CLE9BQU8sQ0FBQyxVQUFVLE9BQU8sQ0FBQztZQUNqRCxVQUFVLE1BQU0sV0FBVyxNQUFNLE9BQU8sUUFBUTtZQUNoRCxLQUFLO2NBQ0gsS0FBSyxLQUFLO2NBQ1YsU0FBUyxFQUFFO2FBQ1o7WUFDRCwyQkFBMkIsWUFBWSxXQUFXLEdBQUcsRUFBRSxPQUFPLGlCQUFpQixFQUFFLEdBQUcsRUFBRTtZQUN0RixHQUFHLG9CQUFvQixHQUFHLEVBQUUsR0FBRyxFQUFFLDRCQUE0QixFQUFFLEVBQUU7WUFDakUsa0JBQWtCLFFBQVEsQ0FBQztjQUN6QixNQUFNLENBQUMsOEJBQThCLEVBQUUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxnQkFBZ0I7a0JBQzlFLElBQUksQ0FBQyxRQUFRLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQztpQkFDeEMsQ0FBQyxDQUFDLENBQUM7Y0FDTixHQUFHLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsQ0FBQzthQUMvRSxDQUFDO1lBQ0YsYUFBYSxtQkFBbUIsc0JBQXNCLENBQUMsTUFBTSxDQUFDO1dBQy9ELENBQUMsQ0FBQyxDQUFDO1VBQ0osWUFBWSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztVQUNuQyxNQUFNLHdCQUF3QixNQUFNO1lBQ2xDLE1BQU0sT0FBTyxNQUFNLE9BQU8sR0FBRyxJQUFJLEVBQUUsR0FBRyxZQUFZLFFBQVEsQ0FBQyxNQUFNLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDbEYsTUFBTSxTQUFTLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixPQUFPLFFBQVEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1dBQzlCLENBQUM7VUFDRixVQUFVLGlCQUFpQixDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUscUJBQXFCLENBQUMsQ0FBQztVQUMzRyxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUMvQyxPQUFPLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sR0FBRyxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQztXQUMzQztVQUNELFFBQVEsWUFBWSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7VUFDMUMsTUFBTSxRQUFRLENBQUMsUUFBUSxPQUFPLENBQUMsQ0FBQztVQUNoQyxPQUFPLFFBQVEsWUFBWSxDQUFDO1NBQzdCLENBQUM7UUFDRixPQUFPLGFBQWEsS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztPQUM5QyxDQUFDO01BQ0YsTUFBTSx5QkFBeUIsaURBQWlEO1FBQzlFLE1BQU0sVUFBVSxrREFBa0Q7VUFDaEUsTUFBTSxjQUFjLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxhQUFhLENBQUMsQ0FBQztVQUNyRSxNQUFNLGVBQWUsT0FBTyxFQUFFLENBQUM7VUFDL0IsTUFBTSx1QkFBdUIsTUFBTSxXQUFXLE1BQU0sT0FBTyxPQUFPLGtCQUFrQixFQUFFLENBQUM7VUFDdkYsTUFBTSxhQUFhO1lBQ2pCLGFBQWE7WUFDYixXQUFXO1lBQ1gsZ0JBQWdCLFFBQVE7V0FDekIsQ0FBQztVQUNGLE1BQU0saUJBQWlCLE1BQU0sWUFBWSxHQUFHLENBQUMsVUFBVTtZQUNyRCxVQUFVLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QixPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztXQUN6QixDQUFDLENBQUM7VUFDSCxNQUFNLFdBQVcsa0JBQWtCLENBQUMsVUFBVSxFQUFFO1lBQzlDLFFBQVEsYUFBYSxPQUFPO1lBQzVCLGFBQWEsTUFBTTtjQUNqQixZQUFZLEdBQUcsQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDO2NBQ2pDLE1BQU0sSUFBSSxDQUFDLHlDQUF5QyxFQUFFLGNBQWMsQ0FBQyxDQUFDO2NBQ3RFLFlBQVksTUFBTSxFQUFFLENBQUM7Y0FDckIsV0FBVyxDQUFDLFFBQVEsWUFBWSxDQUFDLENBQUM7YUFDbkM7V0FDRixFQUFFLE1BQU0sV0FBVyxNQUFNLEVBQUUsWUFBWSxVQUFVLENBQUMsQ0FBQztVQUNwRCxNQUFNLG1CQUFtQixPQUFPLENBQUMsVUFBVSxPQUFPLENBQUM7WUFDakQsVUFBVSxNQUFNLFdBQVcsTUFBTSxPQUFPLFFBQVE7WUFDaEQsS0FBSztjQUNILEtBQUssS0FBSztjQUNWLFNBQVMsRUFBRTthQUNaO1lBQ0QsMkJBQTJCLFlBQVksV0FBVyxHQUFHLEVBQUUsT0FBTyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7WUFDdEYsR0FBRyxvQkFBb0IsR0FBRyxFQUFFLEdBQUcsRUFBRSw0QkFBNEIsRUFBRSxFQUFFO1lBQ2pFLGtCQUFrQixRQUFRLENBQUM7Y0FDekIsTUFBTSxDQUFDLDhCQUE4QixFQUFFLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsZ0JBQWdCO2tCQUM5RSxJQUFJLENBQUMsUUFBUSxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7aUJBQ3hDLENBQUMsQ0FBQyxDQUFDO2NBQ04sT0FBTyxPQUFPLENBQUM7Z0JBQ2IsWUFBWTtrQkFDVixhQUFhLE1BQU0sUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksUUFBUSxDQUFDLE1BQU0sd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7a0JBQy9GLGFBQWEsd0JBQXdCO2tCQUNyQyxjQUFjLHlCQUF5QjtrQkFDdkMsaUJBQWlCLDRCQUE0QjtpQkFDOUM7Z0JBQ0QsT0FBTztrQkFDTCxLQUFLO2tCQUNMLFFBQVE7aUJBQ1Q7Z0JBQ0QsY0FBYyxRQUFRO2tCQUNwQixNQUFNLHNCQUFzQixxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxRQUFRLENBQUMsQ0FBQztrQkFDeEUsT0FBTyxtQkFBbUIsSUFBSSxDQUFDLE1BQU07b0JBQ25DLE1BQU0saUJBQWlCLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDekMsT0FBTztzQkFDTCxRQUFRLGNBQWM7c0JBQ3RCLGNBQWMsUUFBUSxLQUFLLENBQUM7d0JBQzFCLGtCQUFrQixFQUFFLFFBQVEsSUFBSSxVQUFVO3dCQUMxQyxjQUFjLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJO3VCQUN6QyxDQUFDO3FCQUNILENBQUM7bUJBQ0gsQ0FBQyxXQUFXLENBQUMsT0FBTztvQkFDbkIsUUFBUSxHQUFHLEVBQUU7b0JBQ2IsY0FBYyxRQUFRLEtBQUssRUFBRTttQkFDOUIsQ0FBQyxDQUFDLENBQUM7aUJBQ0w7ZUFDRixDQUFDO2FBQ0gsQ0FBQztZQUNGLGFBQWEsbUJBQW1CLHNCQUFzQixDQUFDLE1BQU0sQ0FBQztXQUMvRCxDQUFDLENBQUMsQ0FBQztVQUNKLFlBQVksSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7VUFDbkMsTUFBTSx3QkFBd0IsTUFBTTtZQUNsQyxPQUFPLE1BQU0sV0FBVyxNQUFNLE9BQU8sUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsS0FBSztjQUNyRSxNQUFNLHNCQUFzQixxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztjQUNyRSxNQUFNLFNBQVMsRUFBRSxDQUFDO2NBQ2xCLE1BQU0sV0FBVyxtQkFBbUIsSUFBSSxDQUFDLE1BQU0sYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2NBQy9FLE1BQU0sdUJBQXVCLEtBQUssQ0FBQyxZQUFZLFFBQVEsQ0FBQyxNQUFNLHdCQUF3QixFQUFFLENBQUMsQ0FBQyxDQUFDO2NBQzNGLE1BQU0sb0JBQW9CLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxRQUFRLENBQUMsQ0FBQztjQUNwRSxPQUFPLFFBQVEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsaUJBQWlCLE1BQU0sRUFBRSxpQkFBaUIsT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFDcEksQ0FBQyxDQUFDO1dBQ0osQ0FBQztVQUNGLFVBQVUsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1VBQzNHLE9BQU8sUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7VUFDbEMsTUFBTSxHQUFHLENBQUMseUNBQXlDLEVBQUUsY0FBYyxDQUFDLENBQUM7VUFDckUsUUFBUSxZQUFZLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztVQUMxQyxNQUFNLFFBQVEsQ0FBQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO1VBQ2hDLE9BQU8sUUFBUSxZQUFZLENBQUM7U0FDN0IsQ0FBQztRQUNGLE9BQU8sYUFBYSxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO09BQzlDLENBQUM7TUFDRixNQUFNLFVBQVUsdUJBQXVCO1FBQ3JDLGFBQWEsS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztPQUN2QyxDQUFDO01BQ0YsTUFBTSxRQUFRLHVCQUF1QjtRQUNuQyxXQUFXLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7T0FDckMsQ0FBQztNQUNGLE1BQU0sUUFBUSxlQUFlO1FBQzNCLFdBQVcsTUFBTSxFQUFFLENBQUM7T0FDckIsQ0FBQztNQUNGLE9BQU87UUFDTCxJQUFJO1FBQ0osT0FBTztRQUNQLEtBQUs7UUFDTCxLQUFLO1FBQ0wsT0FBTztPQUNSLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sa0JBQWtCLFVBQVU7TUFDaEMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ25CLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNuQixRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDbEIsQ0FBQztJQUNGLElBQUksUUFBUSxNQUFNO01BQ2hCLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVO1FBQy9CLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixJQUFJLGtCQUFrQixNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLE1BQU07Ozs7U0FJTCxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxvQkFBb0IsTUFBTSxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDckUsTUFBTSxXQUFXLFlBQVk7VUFDM0IsTUFBTSxlQUFlLE1BQU0sWUFBWSxFQUFFLENBQUM7VUFDMUMsTUFBTSxzQkFBc0IscUJBQXFCLENBQUMsTUFBTSxFQUFFLE1BQU0sY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1VBQzFGLG1CQUFtQixLQUFLLENBQUMsTUFBTTtZQUM3QixrQkFBa0IsTUFBTTtjQUN0QixPQUFPLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUMxQixDQUFDO1dBQ0gsQ0FBQyxDQUFDO1VBQ0gsT0FBTyxZQUFZLENBQUM7U0FDckIsQ0FBQztRQUNGLGFBQWEsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLFVBQVUsT0FBTyxDQUFDLENBQUM7UUFDeEQsTUFBTSxZQUFZLEtBQUssQ0FBQztVQUN0QixNQUFNO1VBQ04sWUFBWTtZQUNWLE9BQU8sTUFBTSxVQUFVO1lBQ3ZCLFFBQVEsT0FBTyxVQUFVO1dBQzFCO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSw2QkFBNkIsTUFBTSx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLE1BQU0sVUFBVSxFQUFFLEVBQUUsTUFBTSxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQ2xJLE9BQU87VUFDTCxRQUFRO1VBQ1Isc0JBQXNCLFVBQVUsQ0FBQyxTQUFTLENBQUM7VUFDM0MsMEJBQTBCO1NBQzNCLENBQUM7T0FDSCxDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLEtBQUssRUFBRSxDQUFDOztDQUVYLEdBQUcsQ0FBQzs7OztBQ3gwN0JMOzs7O0FBSUEsQ0FBQyxZQUFZO0lBQ1QsWUFBWSxDQUFDOztJQUViLElBQUksV0FBVyxhQUFhO01BQzFCLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNkLE9BQU8sTUFBTSxDQUFDO09BQ2Y7TUFDRCxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUU7UUFDbkIsT0FBTyxXQUFXLENBQUM7T0FDcEI7TUFDRCxJQUFJLElBQUksT0FBTyxDQUFDLENBQUM7TUFDakIsSUFBSSxDQUFDLEtBQUssUUFBUSxLQUFLLEtBQUssVUFBVSxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLEtBQUssS0FBSyxPQUFPLENBQUMsRUFBRTtRQUMzRyxPQUFPLE9BQU8sQ0FBQztPQUNoQjtNQUNELElBQUksQ0FBQyxLQUFLLFFBQVEsS0FBSyxNQUFNLFVBQVUsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUssUUFBUSxDQUFDLEVBQUU7UUFDN0csT0FBTyxRQUFRLENBQUM7T0FDakI7TUFDRCxPQUFPLENBQUMsQ0FBQztLQUNWLENBQUM7SUFDRixJQUFJLGtCQUFrQixhQUFhO01BQ2pDLE9BQU87UUFDTCxXQUFXO1FBQ1gsU0FBUztRQUNULFFBQVE7UUFDUixRQUFRO1FBQ1IsVUFBVTtRQUNWLEtBQUs7UUFDTCxNQUFNO09BQ1AsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQ3JCLENBQUM7O0lBRUYsSUFBSSxTQUFTLHlCQUF5QjtNQUNwQyxJQUFJLFFBQVEsS0FBSyxVQUFVLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQzNDLE9BQU8sS0FBSyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDOUIsQ0FBQzs7SUFFRixJQUFJLFlBQVksa0JBQWtCO01BQ2hDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQjtRQUMxQixPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUMzQixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsSUFBSSxPQUFPLGFBQWE7TUFDdEIsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7S0FDbEIsQ0FBQztJQUNGLElBQUksV0FBVyxJQUFJLENBQUMsZ0JBQWdCO01BQ2xDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNoQixDQUFDLENBQUM7SUFDSCxJQUFJLFdBQVcsUUFBUSxDQUFDO0lBQ3hCLElBQUksVUFBVSxlQUFlO01BQzNCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQjtRQUMxQixJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFO1VBQ3pCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDbkIsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7VUFDNUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN2QixPQUFPLEtBQUssQ0FBQztXQUNkO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztPQUNiLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixJQUFJLGdCQUFnQiwwQkFBMEI7TUFDNUMsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLGNBQWM7UUFDM0MsT0FBTyxNQUFNLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO09BQzlCLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixJQUFJLFdBQVcsZUFBZTtNQUM1QixPQUFPLElBQUksQ0FBQyxnQkFBZ0I7UUFDMUIsSUFBSSxLQUFLLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLElBQUksS0FBSyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1VBQ3ZDLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLE1BQU0sRUFBRSxPQUFPLENBQUM7UUFDcEIsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7VUFDNUIsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUNkLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdkIsT0FBTyxLQUFLLENBQUM7V0FDZDtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7T0FDYixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsSUFBSSxRQUFRLElBQUksQ0FBQyxnQkFBZ0I7TUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ1gsT0FBTyxJQUFJLENBQUM7T0FDYjtNQUNELElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDckIsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNyQixJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDYixPQUFPLEtBQUssQ0FBQztPQUNkO01BQ0QsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDdkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO09BQ2hCLE1BQU0sSUFBSSxFQUFFLEtBQUssT0FBTyxFQUFFO1FBQ3pCLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ2hDLE1BQU0sSUFBSSxFQUFFLEtBQUssUUFBUSxFQUFFO1FBQzFCLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ2pDO01BQ0QsT0FBTyxLQUFLLENBQUM7S0FDZCxDQUFDLENBQUM7O0lBRUgsTUFBTSxtQkFBbUIsTUFBTSxlQUFlLENBQUM7SUFDL0MsTUFBTSxXQUFXLCtCQUErQjtNQUM5QyxJQUFJLEVBQUUsQ0FBQztNQUNQLElBQUksU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLFVBQVUsQ0FBQyxFQUFFO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDO09BQ2IsTUFBTTtRQUNMLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssTUFBTSxXQUFXLEtBQUssQ0FBQztPQUNqRztLQUNGLENBQUM7SUFDRixNQUFNLFNBQVMsS0FBSztNQUNsQixNQUFNLElBQUksT0FBTyxDQUFDLENBQUM7TUFDbkIsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ2QsT0FBTyxNQUFNLENBQUM7T0FDZixNQUFNLElBQUksQ0FBQyxLQUFLLFFBQVEsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUM3QyxPQUFPLE9BQU8sQ0FBQztPQUNoQixNQUFNLElBQUksQ0FBQyxLQUFLLFFBQVEsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxjQUFjLEtBQUssY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDdEYsT0FBTyxRQUFRLENBQUM7T0FDakIsTUFBTTtRQUNMLE9BQU8sQ0FBQyxDQUFDO09BQ1Y7S0FDRixDQUFDO0lBQ0YsTUFBTSxXQUFXLFFBQVEsU0FBUyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDO0lBQ3pELE1BQU0sZUFBZSxRQUFRLFNBQVMsT0FBTyxLQUFLLEtBQUssSUFBSSxDQUFDO0lBQzVELE1BQU0sT0FBTyxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixNQUFNLE9BQU8sd0JBQXdCLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxjQUFjLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0lBQ2xJLE1BQU0sV0FBVyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEMsTUFBTSxXQUFXLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxNQUFNLGdCQUFnQixTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkQsTUFBTSxZQUFZLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxNQUFNLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLE1BQU0sWUFBWSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUMsTUFBTSxjQUFjLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwQyxNQUFNLGFBQWEsS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxTQUFTLENBQUM7SUFDdEQsTUFBTSxnQkFBZ0IsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxNQUFNLGFBQWEsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sV0FBVyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEMsTUFBTSxZQUFZLGlCQUFpQjtNQUNqQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNwQixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1VBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbkIsT0FBTyxLQUFLLENBQUM7V0FDZDtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7T0FDYjtNQUNELE9BQU8sS0FBSyxDQUFDO0tBQ2QsQ0FBQzs7SUFFRixNQUFNLE9BQU8sTUFBTTtLQUNsQixDQUFDO0lBQ0YsTUFBTSxVQUFVLFlBQVk7TUFDMUIsT0FBTyxDQUFDLE9BQU8sS0FBSztRQUNsQixPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztPQUNqQyxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sV0FBVyxjQUFjLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sV0FBVyxTQUFTO01BQ3hCLE9BQU8sTUFBTTtRQUNYLE9BQU8sS0FBSyxDQUFDO09BQ2QsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFdBQVcsS0FBSztNQUNwQixPQUFPLENBQUMsQ0FBQztLQUNWLENBQUM7SUFDRixNQUFNLGVBQWUsVUFBVTtNQUM3QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDaEIsQ0FBQztJQUNGLG1CQUFtQixjQUFjLEVBQUU7TUFDakMsT0FBTyxDQUFDLFdBQVcsS0FBSztRQUN0QixNQUFNLE1BQU0sV0FBVyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7T0FDNUIsQ0FBQztLQUNIO0lBQ0QsTUFBTSxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixNQUFNLE1BQU0sT0FBTztNQUNqQixPQUFPLE1BQU07UUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO09BQ3RCLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxVQUFVLEtBQUs7TUFDbkIsT0FBTyxDQUFDLEVBQUUsQ0FBQztLQUNaLENBQUM7SUFDRixNQUFNLE9BQU8sS0FBSztNQUNoQixDQUFDLEVBQUUsQ0FBQztLQUNMLENBQUM7SUFDRixNQUFNLFFBQVEsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLE1BQU0sU0FBUyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7O0lBRTlCLGVBQWU7TUFDYixXQUFXLGFBQWE7UUFDdEIsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO09BQ3BCO01BQ0QsV0FBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ2xDO01BQ0QsV0FBVyxHQUFHO1FBQ1osT0FBTyxRQUFRLGNBQWMsQ0FBQztPQUMvQjtNQUNELElBQUksaUJBQWlCO1FBQ25CLElBQUksSUFBSSxJQUFJLEVBQUU7VUFDWixPQUFPLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDO1NBQzNCLE1BQU07VUFDTCxPQUFPLE1BQU0sRUFBRSxDQUFDO1NBQ2pCO09BQ0Y7TUFDRCxNQUFNLEdBQUc7UUFDUCxPQUFPLElBQUksSUFBSSxDQUFDO09BQ2pCO01BQ0QsTUFBTSxHQUFHO1FBQ1AsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDO09BQ2xCO01BQ0QsR0FBRyxTQUFTO1FBQ1YsSUFBSSxJQUFJLElBQUksRUFBRTtVQUNaLE9BQU8sUUFBUSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQztTQUMxQyxNQUFNO1VBQ0wsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO1NBQ3hCO09BQ0Y7TUFDRCxJQUFJLFNBQVM7UUFDWCxJQUFJLElBQUksSUFBSSxFQUFFO1VBQ1osT0FBTyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQztTQUMzQixNQUFNO1VBQ0wsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO1NBQ3hCO09BQ0Y7TUFDRCxNQUFNLFlBQVk7UUFDaEIsT0FBTyxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQztPQUMxQztNQUNELE1BQU0sWUFBWTtRQUNoQixPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUM7T0FDM0M7TUFDRCxNQUFNLFlBQVk7UUFDaEIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFO1VBQ3RDLE9BQU8sSUFBSSxDQUFDO1NBQ2IsTUFBTTtVQUNMLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztTQUN4QjtPQUNGO01BQ0QsS0FBSyxjQUFjO1FBQ2pCLE9BQU8sSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLEdBQUcsV0FBVyxDQUFDO09BQzVDO01BQ0QsRUFBRSxjQUFjO1FBQ2QsT0FBTyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsV0FBVyxDQUFDO09BQ3RDO01BQ0QsVUFBVSxRQUFRO1FBQ2hCLE9BQU8sSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLEdBQUcsS0FBSyxFQUFFLENBQUM7T0FDeEM7TUFDRCxPQUFPLFFBQVE7UUFDYixPQUFPLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztPQUNsQztNQUNELFFBQVEsVUFBVTtRQUNoQixJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7VUFDYixNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssQ0FBQyxHQUFHLE9BQU8sR0FBRyx5QkFBeUIsQ0FBQyxDQUFDO1NBQy9GLE1BQU07VUFDTCxPQUFPLElBQUksTUFBTSxDQUFDO1NBQ25CO09BQ0Y7TUFDRCxXQUFXLFFBQVE7UUFDakIsT0FBTyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN0RTtNQUNELFNBQVMsR0FBRztRQUNWLE9BQU8sSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO09BQ3JDO01BQ0QsY0FBYyxHQUFHO1FBQ2YsT0FBTyxJQUFJLE1BQU0sQ0FBQztPQUNuQjtNQUNELElBQUksU0FBUztRQUNYLElBQUksSUFBSSxJQUFJLEVBQUU7VUFDWixNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQztTQUNwQjtPQUNGO01BQ0QsT0FBTyxHQUFHO1FBQ1IsT0FBTyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO09BQ3JDO01BQ0QsUUFBUSxHQUFHO1FBQ1QsT0FBTyxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7T0FDdEQ7S0FDRjtJQUNELFFBQVEsY0FBYyxHQUFHLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDOztJQUU3QyxNQUFNLGNBQWMsS0FBSyxVQUFVLE1BQU0sQ0FBQztJQUMxQyxNQUFNLGdCQUFnQixLQUFLLFVBQVUsUUFBUSxDQUFDO0lBQzlDLE1BQU0sYUFBYSxLQUFLLFVBQVUsS0FBSyxDQUFDO0lBQ3hDLE1BQU0sYUFBYSxXQUFXLGFBQWEsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4RCxNQUFNLFlBQVksV0FBVztNQUMzQixNQUFNLElBQUksVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxHQUFHLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3RELENBQUM7SUFDRixNQUFNLGFBQWEsV0FBVyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sU0FBUyxjQUFjO01BQzNCLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0MsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7VUFDZCxPQUFPLElBQUksQ0FBQztTQUNiO09BQ0Y7TUFDRCxPQUFPLEtBQUssQ0FBQztLQUNkLENBQUM7SUFDRixNQUFNLFFBQVEsV0FBVztNQUN2QixNQUFNLE1BQU0sRUFBRSxPQUFPLENBQUM7TUFDdEIsTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ3pCLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzVCLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDaEI7TUFDRCxPQUFPLENBQUMsQ0FBQztLQUNWLENBQUM7SUFDRixNQUFNLFNBQVMsV0FBVztNQUN4QixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzdDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUNUO0tBQ0YsQ0FBQztJQUNGLE1BQU0sUUFBUSxXQUFXO01BQ3ZCLEtBQUssSUFBSSxJQUFJLEVBQUUsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3ZDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUNUO0tBQ0YsQ0FBQztJQUNGLE1BQU0sY0FBYyxjQUFjO01BQ2hDLE1BQU0sT0FBTyxFQUFFLENBQUM7TUFDaEIsTUFBTSxPQUFPLEVBQUUsQ0FBQztNQUNoQixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzdDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEIsTUFBTSxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNyQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUNiO01BQ0QsT0FBTztRQUNMLElBQUk7UUFDSixJQUFJO09BQ0wsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFdBQVcsY0FBYztNQUM3QixNQUFNLElBQUksRUFBRSxDQUFDO01BQ2IsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM3QyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtVQUNkLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ1g7T0FDRjtNQUNELE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0sUUFBUSxnQkFBZ0I7TUFDNUIsS0FBSyxDQUFDLEVBQUUsRUFBRSxVQUFVO1FBQ2xCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDcEIsQ0FBQyxDQUFDO01BQ0gsT0FBTyxHQUFHLENBQUM7S0FDWixDQUFDO0lBQ0YsTUFBTSxRQUFRLGdCQUFnQjtNQUM1QixNQUFNLENBQUMsRUFBRSxFQUFFLFVBQVU7UUFDbkIsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUNwQixDQUFDLENBQUM7TUFDSCxPQUFPLEdBQUcsQ0FBQztLQUNaLENBQUM7SUFDRixNQUFNLGNBQWMscUJBQXFCO01BQ3ZDLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0MsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7VUFDZCxPQUFPLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO1VBQ3RCLE1BQU07U0FDUDtPQUNGO01BQ0QsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO0tBQ3hCLENBQUM7SUFDRixNQUFNLFNBQVMsY0FBYztNQUMzQixPQUFPLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ3JDLENBQUM7SUFDRixNQUFNLGNBQWMsY0FBYztNQUNoQyxLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzdDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO1VBQ2QsT0FBTyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6QjtPQUNGO01BQ0QsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO0tBQ3hCLENBQUM7SUFDRixNQUFNLFVBQVUsTUFBTTtNQUNwQixNQUFNLElBQUksRUFBRSxDQUFDO01BQ2IsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRTtRQUM3QyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1VBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxHQUFHLDRCQUE0QixHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQzlFO1FBQ0QsVUFBVSxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQzVCO01BQ0QsT0FBTyxDQUFDLENBQUM7S0FDVixDQUFDO0lBQ0YsTUFBTSxTQUFTLFdBQVcsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRCxNQUFNLFNBQVMsY0FBYztNQUMzQixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQzdDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtVQUN2QixPQUFPLEtBQUssQ0FBQztTQUNkO09BQ0Y7TUFDRCxPQUFPLElBQUksQ0FBQztLQUNiLENBQUM7SUFDRixNQUFNLFVBQVUsTUFBTTtNQUNwQixNQUFNLElBQUksV0FBVyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ2xDLENBQUMsUUFBUSxFQUFFLENBQUM7TUFDWixPQUFPLENBQUMsQ0FBQztLQUNWLENBQUM7SUFDRixNQUFNLGFBQWEsWUFBWSxRQUFRLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckUsTUFBTSxjQUFjLFdBQVc7TUFDN0IsTUFBTSxJQUFJLEVBQUUsQ0FBQztNQUNiLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0MsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUN4QjtNQUNELE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0sT0FBTyxvQkFBb0I7TUFDL0IsTUFBTSxPQUFPLFdBQVcsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUNyQyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztNQUN0QixPQUFPLElBQUksQ0FBQztLQUNiLENBQUM7SUFDRixNQUFNLFFBQVEsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sR0FBRyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO0lBQzFGLE1BQU0sT0FBTyxNQUFNLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEMsTUFBTSxTQUFTLE1BQU0sS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5QyxNQUFNLE9BQU8sVUFBVSxDQUFDLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLEdBQUcsS0FBSyxXQUFXLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSxNQUFNLFVBQVUsWUFBWTtNQUMxQixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ25DLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRTtVQUNkLE9BQU8sQ0FBQyxDQUFDO1NBQ1Y7T0FDRjtNQUNELE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztLQUN4QixDQUFDO0lBQ0YsTUFBTSxXQUFXLG9CQUFvQjtNQUNuQyxNQUFNLElBQUksRUFBRSxDQUFDO01BQ2IsTUFBTSxlQUFlLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQzVHLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0MsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFO1VBQ3BCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ1g7T0FDRjtNQUNELE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQzs7SUFFRixNQUFNLE9BQU8sTUFBTSxLQUFLLENBQUM7SUFDekIsTUFBTSxtQkFBbUIsTUFBTSxlQUFlLENBQUM7SUFDL0MsTUFBTSxTQUFTLFlBQVk7TUFDekIsTUFBTSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUN4QixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsTUFBTSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2hELE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ1Q7S0FDRixDQUFDO0lBQ0YsTUFBTSxRQUFRLFlBQVk7TUFDeEIsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLFdBQVc7UUFDOUIsR0FBRyxDQUFDO1FBQ0osR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztPQUNYLENBQUMsQ0FBQyxDQUFDO0tBQ0wsQ0FBQztJQUNGLE1BQU0sV0FBVyxZQUFZO01BQzNCLE1BQU0sSUFBSSxFQUFFLENBQUM7TUFDYixNQUFNLENBQUMsR0FBRyxFQUFFLFVBQVU7UUFDcEIsTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUM7T0FDdEIsQ0FBQyxDQUFDO01BQ0gsT0FBTyxDQUFDLENBQUM7S0FDVixDQUFDO0lBQ0YsTUFBTSxTQUFTLEtBQUssVUFBVTtNQUM1QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0saUJBQWlCLGdDQUFnQztNQUNyRCxNQUFNLENBQUMsR0FBRyxFQUFFLFVBQVU7UUFDcEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3ZDLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFdBQVcsZUFBZTtNQUM5QixNQUFNLElBQUksRUFBRSxDQUFDO01BQ2IsTUFBTSxJQUFJLEVBQUUsQ0FBQztNQUNiLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNoRCxPQUFPO1FBQ0wsQ0FBQztRQUNELENBQUM7T0FDRixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sV0FBVyxlQUFlO01BQzlCLE1BQU0sSUFBSSxFQUFFLENBQUM7TUFDYixjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDM0MsT0FBTyxDQUFDLENBQUM7S0FDVixDQUFDO0lBQ0YsTUFBTSxhQUFhLFlBQVk7TUFDN0IsTUFBTSxJQUFJLEVBQUUsQ0FBQztNQUNiLE1BQU0sQ0FBQyxHQUFHLEVBQUUsaUJBQWlCO1FBQzNCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztPQUN4QixDQUFDLENBQUM7TUFDSCxPQUFPLENBQUMsQ0FBQztLQUNWLENBQUM7SUFDRixNQUFNLFNBQVMsT0FBTztNQUNwQixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDbEMsQ0FBQztJQUNGLE1BQU0sUUFBUSxjQUFjO01BQzFCLE9BQU8sS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO0tBQ3BFLENBQUM7SUFDRixNQUFNLFFBQVEsY0FBYyxnQkFBZ0IsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM1RCxNQUFNLG9CQUFvQixjQUFjLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0lBQ3ZHLE1BQU0sVUFBVSxTQUFTLEtBQUssS0FBSyxLQUFLLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQzs7SUFFaEUsTUFBTSxjQUFjLEtBQUs7TUFDdkIsTUFBTSxNQUFNLEVBQUUsQ0FBQztNQUNmLE1BQU0sQ0FBQyxDQUFDLEVBQUUsT0FBTztRQUNmLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7T0FDZixDQUFDLENBQUM7TUFDSCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNsQixDQUFDOztJQUVGLE1BQU0sY0FBYyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQztJQUNoRCxNQUFNLFVBQVUsS0FBSyxRQUFRLENBQUM7SUFDOUIsTUFBTSxZQUFZLE9BQU87TUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNqQixNQUFNLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUcsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7VUFDMUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuQjtRQUNELE9BQU8sS0FBSyxDQUFDO09BQ2QsTUFBTTtRQUNMLE9BQU8sR0FBRyxDQUFDO09BQ1o7S0FDRixDQUFDO0lBQ0YsTUFBTSxTQUFTLGNBQWM7TUFDM0IsSUFBSSxDQUFDLENBQUMsRUFBRTtRQUNOLE9BQU8sS0FBSyxDQUFDO09BQ2Q7TUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDWCxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNsQixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1VBQ3hDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO1lBQ3BDLE9BQU8sS0FBSyxDQUFDO1dBQ2Q7U0FDRjtPQUNGLE1BQU07UUFDTCxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUNqQixJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDZixJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRTtjQUNwQyxPQUFPLEtBQUssQ0FBQzthQUNkO1dBQ0Y7U0FDRjtPQUNGO01BQ0QsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxRQUFRLHFCQUFxQjtNQUNqQyxNQUFNLE1BQU0sRUFBRSxDQUFDO01BQ2YsTUFBTSxDQUFDLEtBQUssRUFBRSxpQkFBaUI7UUFDN0IsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztPQUN4QyxDQUFDLENBQUM7TUFDSCxPQUFPLEdBQUcsQ0FBQztLQUNaLENBQUM7SUFDRixNQUFNLFdBQVcsVUFBVTtNQUN6QixNQUFNLElBQUksRUFBRSxDQUFDO01BQ2IsTUFBTSxDQUFDLENBQUMsRUFBRSxjQUFjO1FBQ3RCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUU7VUFDeEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDWDtPQUNGLENBQUMsQ0FBQztNQUNILE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0sVUFBVSxVQUFVO01BQ3hCLElBQUksQ0FBQyxFQUFFO1FBQ0wsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtVQUN4QyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDZCxPQUFPLENBQUMsQ0FBQztXQUNWO1NBQ0Y7T0FDRjtNQUNELE9BQU8sQ0FBQyxDQUFDLENBQUM7S0FDWCxDQUFDO0lBQ0YsTUFBTSxTQUFTLGdEQUFnRDtNQUM3RCxJQUFJLE1BQU0sV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7TUFDakUsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMxQyxNQUFNLFFBQVEsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3JEO01BQ0QsT0FBTyxHQUFHLENBQUM7S0FDWixDQUFDO0lBQ0YsTUFBTSxjQUFjLCtCQUErQjtNQUNqRCxLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzVDLElBQUksU0FBUyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7VUFDL0MsT0FBTyxDQUFDLENBQUM7U0FDVjtPQUNGO01BQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUNYLENBQUM7SUFDRixNQUFNLFNBQVMsY0FBYyxVQUFVLENBQUMsVUFBVSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7O0lBRS9ELE1BQU0sU0FBUyxLQUFLO01BQ2xCLElBQUksU0FBUyxLQUFLLENBQUM7TUFDbkIsSUFBSSxDQUFDLENBQUM7TUFDTixPQUFPLENBQUMsT0FBTyxLQUFLO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEVBQUU7VUFDWCxTQUFTLElBQUksQ0FBQztVQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3pCO1FBQ0QsT0FBTyxDQUFDLENBQUM7T0FDVixDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLGFBQWEsd0NBQXdDO01BQ3pELE1BQU0sU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksQ0FBQztNQUM5RCxNQUFNLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztNQUN2QyxNQUFNLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDO01BQzlDLE1BQU0sVUFBVSxRQUFRLElBQUksVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUM7TUFDM0QsTUFBTSxXQUFXLE1BQU0sSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLElBQUksVUFBVSxDQUFDLDBCQUEwQixDQUFDLENBQUM7TUFDM0YsTUFBTSxVQUFVLFFBQVEsSUFBSSxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUM7TUFDbEQsTUFBTSxhQUFhLE9BQU8sU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxTQUFTLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFLLENBQUM7TUFDM0YsTUFBTSxZQUFZLENBQUMsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDO01BQ3ZELE9BQU87UUFDTCxRQUFRLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDeEIsVUFBVSxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQzVCLFVBQVUsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUM1QixTQUFTLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDMUIsU0FBUyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQzFCLFdBQVcsRUFBRSxVQUFVO1FBQ3ZCLE9BQU8sRUFBRSxNQUFNO1FBQ2YsV0FBVyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQy9CLFdBQVcsUUFBUSxDQUFDLFNBQVMsQ0FBQztPQUMvQixDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLGFBQWEsZ0JBQWdCO01BQ2pDLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdkMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO1VBQ2IsT0FBTyxDQUFDLENBQUM7U0FDVjtPQUNGO01BQ0QsT0FBTyxTQUFTLENBQUM7S0FDbEIsQ0FBQztJQUNGLE1BQU0sU0FBUyxvQkFBb0I7TUFDakMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDckMsSUFBSSxDQUFDLENBQUMsRUFBRTtRQUNOLE9BQU87VUFDTCxPQUFPLENBQUM7VUFDUixPQUFPLENBQUM7U0FDVCxDQUFDO09BQ0g7TUFDRCxNQUFNLFFBQVEsS0FBSztRQUNqQixPQUFPLE1BQU0sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDMUMsQ0FBQztNQUNGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNqQyxDQUFDO0lBQ0YsTUFBTSxXQUFXLDJCQUEyQjtNQUMxQyxNQUFNLGVBQWUsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztNQUNqRCxJQUFJLGNBQWMsT0FBTyxLQUFLLENBQUMsRUFBRTtRQUMvQixPQUFPLFNBQVMsRUFBRSxDQUFDO09BQ3BCO01BQ0QsT0FBTyxNQUFNLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDO0tBQzdDLENBQUM7SUFDRixNQUFNLFlBQVksTUFBTTtNQUN0QixPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDbkIsQ0FBQztJQUNGLE1BQU0sT0FBTyxrQkFBa0I7TUFDN0IsT0FBTztRQUNMLEtBQUs7UUFDTCxLQUFLO09BQ04sQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFVBQVU7TUFDZCxJQUFJLElBQUk7TUFDUixRQUFRLFFBQVE7TUFDaEIsU0FBUyxTQUFTO0tBQ25CLENBQUM7O0lBRUYsTUFBTSxrQkFBa0IsNkJBQTZCO01BQ25ELE9BQU8sT0FBTyxDQUFDLGFBQWEsT0FBTyxFQUFFLFdBQVc7UUFDOUMsTUFBTSxVQUFVLE9BQU8sTUFBTSxZQUFZLEVBQUUsQ0FBQztRQUM1QyxPQUFPLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVztVQUNqQyxJQUFJLEVBQUUsQ0FBQztVQUNQLE9BQU8sT0FBTyxNQUFNLENBQUMsS0FBSyxPQUFPLE1BQU0sTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztTQUNqRyxDQUFDLElBQUksQ0FBQyxTQUFTO1VBQ2QsU0FBUyxJQUFJLEtBQUs7VUFDbEIsU0FBUyxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3RELENBQUMsQ0FBQyxDQUFDO09BQ0wsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLFdBQVcsMkJBQTJCO01BQzFDLE1BQU0sUUFBUSxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO01BQzlDLE9BQU8sTUFBTSxDQUFDLFVBQVUsRUFBRSxhQUFhO1FBQ3JDLE9BQU8sU0FBUyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7T0FDaEMsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLHlCQUF5QjtNQUM3QyxPQUFPLFFBQVEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXO1FBQ2xELE1BQU0sVUFBVSxPQUFPLE9BQU8sQ0FBQyxPQUFPLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNsRSxPQUFPO1VBQ0wsU0FBUyxPQUFPLEtBQUs7VUFDckIsT0FBTztTQUNSLENBQUM7T0FDSCxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxXQUFXLHFCQUFxQjtNQUNwQyxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNO1FBQ3pDLE1BQU0sVUFBVSxPQUFPLE9BQU8sQ0FBQyxFQUFFLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM3RCxPQUFPO1VBQ0wsU0FBUyxFQUFFLEtBQUs7VUFDaEIsT0FBTztTQUNSLENBQUM7T0FDSCxDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sa0JBQWtCLG1CQUFtQjtNQUN6QyxPQUFPLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ2hDLENBQUM7O0lBRUYsTUFBTSxhQUFhLHdCQUF3QixNQUFNLEtBQUssRUFBRSxJQUFJLEdBQUcsT0FBTyxJQUFJLE1BQU0sT0FBTyxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxNQUFNLENBQUM7SUFDL0ksTUFBTSxnQkFBZ0IsaUJBQWlCO01BQ3JDLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxlQUFlLENBQUMsR0FBRyxFQUFFLE1BQU0sT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQzVFLENBQUM7SUFDRixNQUFNLGFBQWEsY0FBYyxRQUFRLENBQUMsVUFBVTtNQUNsRCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQ3ZDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQ2QsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxNQUFNLE9BQU8sSUFBSSxHQUFHLENBQUM7T0FDN0QsTUFBTTtRQUNMLE9BQU8sS0FBSyxDQUFDO09BQ2Q7S0FDRixDQUFDO0lBQ0YsTUFBTSxhQUFhLGlCQUFpQjtNQUNsQyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ25DLENBQUM7SUFDRixNQUFNLFdBQVcsaUJBQWlCO01BQ2hDLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsQ0FBQztLQUM1RCxDQUFDO0lBQ0YsTUFBTSxRQUFRLEtBQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekMsTUFBTSxTQUFTLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNuQyxNQUFNLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdCLE1BQU0sUUFBUSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0IsTUFBTSxhQUFhLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sWUFBWSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sU0FBUyxjQUFjLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sUUFBUSxRQUFRLFFBQVEsRUFBRSxLQUFLO01BQ25DLE1BQU0sTUFBTSxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQ25DLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLEdBQUcsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDMUQsQ0FBQzs7SUFFRixNQUFNLHFCQUFxQixxQ0FBcUMsQ0FBQztJQUNqRSxNQUFNLGdCQUFnQixVQUFVO01BQzlCLE9BQU8sWUFBWTtRQUNqQixPQUFPLFVBQVUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7T0FDckMsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFdBQVc7TUFDZjtRQUNFLE1BQU0sTUFBTTtRQUNaLGdCQUFnQixDQUFDLGdDQUFnQyxDQUFDO1FBQ2xELFFBQVEsWUFBWTtVQUNsQixPQUFPLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7U0FDako7T0FDRjtNQUNEO1FBQ0UsTUFBTSxVQUFVO1FBQ2hCLE9BQU8sVUFBVTtRQUNqQixnQkFBZ0I7VUFDZCxpQ0FBaUM7VUFDakMsa0JBQWtCO1NBQ25CO1FBQ0QsUUFBUSxZQUFZO1VBQ2xCLE9BQU8sVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7U0FDL0U7T0FDRjtNQUNEO1FBQ0UsTUFBTSxJQUFJO1FBQ1YsZ0JBQWdCO1VBQ2QsZ0NBQWdDO1VBQ2hDLDRCQUE0QjtTQUM3QjtRQUNELFFBQVEsWUFBWTtVQUNsQixPQUFPLFVBQVUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN4RTtPQUNGO01BQ0Q7UUFDRSxNQUFNLE9BQU87UUFDYixnQkFBZ0I7VUFDZCxrQkFBa0I7VUFDbEIsZ0NBQWdDO1NBQ2pDO1FBQ0QsUUFBUSxhQUFhLENBQUMsT0FBTyxDQUFDO09BQy9CO01BQ0Q7UUFDRSxNQUFNLFNBQVM7UUFDZixnQkFBZ0IsQ0FBQyxxQ0FBcUMsQ0FBQztRQUN2RCxRQUFRLGFBQWEsQ0FBQyxTQUFTLENBQUM7T0FDakM7TUFDRDtRQUNFLE1BQU0sUUFBUTtRQUNkLGdCQUFnQjtVQUNkLGtCQUFrQjtVQUNsQiwrQkFBK0I7U0FDaEM7UUFDRCxRQUFRLFlBQVk7VUFDbEIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsS0FBSyxVQUFVLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1NBQ25IO09BQ0Y7S0FDRixDQUFDO0lBQ0YsTUFBTSxPQUFPO01BQ1g7UUFDRSxNQUFNLFNBQVM7UUFDZixRQUFRLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFDNUIsZ0JBQWdCLENBQUMsdUNBQXVDLENBQUM7T0FDMUQ7TUFDRDtRQUNFLE1BQU0sS0FBSztRQUNYLFFBQVEsWUFBWTtVQUNsQixPQUFPLFVBQVUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUN2RTtRQUNELGdCQUFnQjtVQUNkLHFDQUFxQztVQUNyQyw4QkFBOEI7VUFDOUIscUNBQXFDO1NBQ3RDO09BQ0Y7TUFDRDtRQUNFLE1BQU0sU0FBUztRQUNmLFFBQVEsYUFBYSxDQUFDLFNBQVMsQ0FBQztRQUNoQyxnQkFBZ0IsQ0FBQyxtQ0FBbUMsQ0FBQztPQUN0RDtNQUNEO1FBQ0UsTUFBTSxPQUFPO1FBQ2IsUUFBUSxhQUFhLENBQUMsVUFBVSxDQUFDO1FBQ2pDLGdCQUFnQixDQUFDLHFDQUFxQyxDQUFDO09BQ3hEO01BQ0Q7UUFDRSxNQUFNLE9BQU87UUFDYixRQUFRLGFBQWEsQ0FBQyxPQUFPLENBQUM7UUFDOUIsZ0JBQWdCLEVBQUU7T0FDbkI7TUFDRDtRQUNFLE1BQU0sU0FBUztRQUNmLFFBQVEsYUFBYSxDQUFDLE9BQU8sQ0FBQztRQUM5QixnQkFBZ0IsRUFBRTtPQUNuQjtNQUNEO1FBQ0UsTUFBTSxTQUFTO1FBQ2YsUUFBUSxhQUFhLENBQUMsU0FBUyxDQUFDO1FBQ2hDLGdCQUFnQixFQUFFO09BQ25CO01BQ0Q7UUFDRSxNQUFNLFVBQVU7UUFDaEIsUUFBUSxhQUFhLENBQUMsTUFBTSxDQUFDO1FBQzdCLGdCQUFnQixDQUFDLGlDQUFpQyxDQUFDO09BQ3BEO0tBQ0YsQ0FBQztJQUNGLE1BQU0sZUFBZTtNQUNuQixVQUFVLFFBQVEsQ0FBQyxRQUFRLENBQUM7TUFDNUIsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDO0tBQ3JCLENBQUM7O0lBRUYsTUFBTSxPQUFPLE1BQU0sQ0FBQztJQUNwQixNQUFNLFdBQVcsVUFBVSxDQUFDO0lBQzVCLE1BQU0sS0FBSyxJQUFJLENBQUM7SUFDaEIsTUFBTSxRQUFRLE9BQU8sQ0FBQztJQUN0QixNQUFNLFVBQVUsU0FBUyxDQUFDO0lBQzFCLE1BQU0sU0FBUyxRQUFRLENBQUM7SUFDeEIsTUFBTSxZQUFZLE1BQU07TUFDdEIsT0FBTyxJQUFJLENBQUM7UUFDVixTQUFTLFNBQVM7UUFDbEIsU0FBUyxPQUFPLFFBQVEsRUFBRTtPQUMzQixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxPQUFPLFFBQVE7TUFDbkIsTUFBTSxVQUFVLElBQUksUUFBUSxDQUFDO01BQzdCLE1BQU0sVUFBVSxJQUFJLFFBQVEsQ0FBQztNQUM3QixNQUFNLFlBQVksUUFBUSxNQUFNLE9BQU8sS0FBSyxJQUFJLENBQUM7TUFDakQsT0FBTztRQUNMLE9BQU87UUFDUCxPQUFPO1FBQ1AsUUFBUSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLFlBQVksU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUMvQixNQUFNLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDbkIsU0FBUyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ3pCLFdBQVcsU0FBUyxDQUFDLE9BQU8sQ0FBQztRQUM3QixVQUFVLFNBQVMsQ0FBQyxNQUFNLENBQUM7T0FDNUIsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFVBQVU7TUFDZCxTQUFTLFNBQVM7TUFDbEIsSUFBSSxJQUFJO01BQ1IsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDO01BQ3BCLFVBQVUsUUFBUSxDQUFDLFFBQVEsQ0FBQztNQUM1QixJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUM7TUFDaEIsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDO01BQ3RCLFNBQVMsUUFBUSxDQUFDLE9BQU8sQ0FBQztNQUMxQixRQUFRLFFBQVEsQ0FBQyxNQUFNLENBQUM7S0FDekIsQ0FBQzs7SUFFRixNQUFNLFVBQVUsU0FBUyxDQUFDO0lBQzFCLE1BQU0sTUFBTSxLQUFLLENBQUM7SUFDbEIsTUFBTSxVQUFVLFNBQVMsQ0FBQztJQUMxQixNQUFNLFFBQVEsT0FBTyxDQUFDO0lBQ3RCLE1BQU0sUUFBUSxPQUFPLENBQUM7SUFDdEIsTUFBTSxVQUFVLFNBQVMsQ0FBQztJQUMxQixNQUFNLFVBQVUsU0FBUyxDQUFDO0lBQzFCLE1BQU0sV0FBVyxVQUFVLENBQUM7SUFDNUIsTUFBTSxVQUFVLE1BQU07TUFDcEIsT0FBTyxJQUFJLENBQUM7UUFDVixTQUFTLFNBQVM7UUFDbEIsU0FBUyxPQUFPLFFBQVEsRUFBRTtPQUMzQixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxPQUFPLFFBQVE7TUFDbkIsTUFBTSxVQUFVLElBQUksUUFBUSxDQUFDO01BQzdCLE1BQU0sVUFBVSxJQUFJLFFBQVEsQ0FBQztNQUM3QixNQUFNLE9BQU8sUUFBUSxNQUFNLE9BQU8sS0FBSyxJQUFJLENBQUM7TUFDNUMsT0FBTztRQUNMLE9BQU87UUFDUCxPQUFPO1FBQ1AsV0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNoQixXQUFXLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDeEIsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3BCLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNwQixXQUFXLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDeEIsV0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3hCLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQztPQUMzQixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sa0JBQWtCO01BQ3RCLE9BQU87TUFDUCxJQUFJLElBQUk7TUFDUixTQUFTLFFBQVEsQ0FBQyxPQUFPLENBQUM7TUFDMUIsS0FBSyxRQUFRLENBQUMsR0FBRyxDQUFDO01BQ2xCLFNBQVMsUUFBUSxDQUFDLE9BQU8sQ0FBQztNQUMxQixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUM7TUFDdEIsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDO01BQ3RCLFNBQVMsUUFBUSxDQUFDLE9BQU8sQ0FBQztNQUMxQixTQUFTLFFBQVEsQ0FBQyxPQUFPLENBQUM7TUFDMUIsVUFBVSxRQUFRLENBQUMsUUFBUSxDQUFDO0tBQzdCLENBQUM7O0lBRUYsTUFBTSxXQUFXLDZDQUE2QztNQUM1RCxNQUFNLFdBQVcsWUFBWSxTQUFTLEVBQUUsQ0FBQztNQUN6QyxNQUFNLE9BQU8sWUFBWSxLQUFLLEVBQUUsQ0FBQztNQUNqQyxNQUFNLFVBQVUsZ0JBQWdCLEtBQUssQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxhQUFhLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLFFBQVEsRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDO01BQ3JMLE1BQU0sS0FBSyxRQUFRLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsZUFBZSxRQUFRLEVBQUUsZUFBZSxHQUFHLENBQUMsQ0FBQztNQUN2RixNQUFNLGFBQWEsVUFBVSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO01BQ2xFLE9BQU87UUFDTCxPQUFPO1FBQ1AsRUFBRTtRQUNGLFVBQVU7T0FDWCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLEVBQUUsUUFBUSxRQUFRLEVBQUUsQ0FBQzs7SUFFL0MsTUFBTSxhQUFhLFNBQVMsTUFBTSxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUM3RCxJQUFJLGFBQWEsTUFBTSxDQUFDLE1BQU0saUJBQWlCLE9BQU8sQ0FBQyxTQUFTLFVBQVUsRUFBRSxRQUFRLEtBQUssQ0FBQyxTQUFTLGNBQWMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDakksTUFBTSxXQUFXLE1BQU0sVUFBVSxFQUFFLENBQUM7O0lBRXBDLE1BQU0sWUFBWSxTQUFTLFVBQVUsQ0FBQztJQUN0QyxNQUFNLGFBQWEsUUFBUSxFQUFFLENBQUM7SUFDOUIsTUFBTSxZQUFZLFVBQVUsUUFBUSxDQUFDO0lBQ3JDLE1BQU0sT0FBTyxVQUFVLEdBQUcsQ0FBQztJQUMzQixNQUFNLGFBQWEsVUFBVSxXQUFXLENBQUM7SUFDekMsTUFBTSxlQUFlLFNBQVMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sTUFBTTtNQUNWLGdCQUFnQixnRkFBZ0Y7TUFDaEcsY0FBYyxTQUFTLEtBQUssRUFBRSxHQUFHLFFBQVEsYUFBYSxJQUFJLENBQUMsR0FBRyxFQUFFO01BQ2hFLGFBQWEsSUFBSTtNQUNqQixXQUFXLElBQUk7TUFDZixZQUFZLENBQUMsU0FBUyxLQUFLLEVBQUU7TUFDN0IsWUFBWTtNQUNaLFNBQVM7UUFDUCxTQUFTLFNBQVMsUUFBUTtRQUMxQixTQUFTLFNBQVMsUUFBUTtRQUMxQixZQUFZLFNBQVMsV0FBVztRQUNoQyxRQUFRLFNBQVMsT0FBTztRQUN4QixXQUFXLFNBQVMsVUFBVTtRQUM5QixNQUFNLFNBQVMsS0FBSztRQUNwQixTQUFTLFNBQVMsUUFBUTtRQUMxQixVQUFVLFNBQVMsU0FBUztPQUM3QjtNQUNELElBQUk7UUFDRixTQUFTLElBQUksUUFBUTtRQUNyQixTQUFTLElBQUksUUFBUTtRQUNyQixXQUFXLElBQUksVUFBVTtRQUN6QixZQUFZLElBQUksV0FBVztRQUMzQixXQUFXLElBQUksVUFBVTtRQUN6QixPQUFPLElBQUksTUFBTTtRQUNqQixTQUFTLElBQUksUUFBUTtRQUNyQixTQUFTLElBQUksUUFBUTtRQUNyQixXQUFXLElBQUksVUFBVTtRQUN6QixXQUFXLElBQUksVUFBVTtPQUMxQjtNQUNELFlBQVk7UUFDVixXQUFXLFVBQVUsVUFBVTtRQUMvQixRQUFRLFVBQVUsT0FBTztRQUN6QixVQUFVLFVBQVUsU0FBUztRQUM3QixTQUFTLFVBQVUsUUFBUTtRQUMzQixVQUFVLFVBQVUsU0FBUztRQUM3QixTQUFTLFVBQVUsUUFBUTtRQUMzQixXQUFXLFVBQVUsVUFBVTtPQUNoQztLQUNGLENBQUM7O0lBRUYsTUFBTSxxQkFBcUIsWUFBWSxDQUFDO0lBQ3hDLE1BQU0sU0FBUyxPQUFPO01BQ3BCLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUMxRSxDQUFDO0lBQ0YsTUFBTSxPQUFPLGVBQWU7TUFDMUIsSUFBSSxDQUFDLElBQUksRUFBRTtRQUNULE9BQU8sR0FBRyxLQUFLLFNBQVMsQ0FBQztPQUMxQjtNQUNELElBQUksSUFBSSxLQUFLLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDcEMsT0FBTyxJQUFJLENBQUM7T0FDYjtNQUNELE9BQU8sT0FBTyxHQUFHLEtBQUssSUFBSSxDQUFDO0tBQzVCLENBQUM7SUFDRixNQUFNLFlBQVksZUFBZSxNQUFNLEVBQUUsS0FBSztNQUM1QyxNQUFNLGdCQUFnQixRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7TUFDaEYsSUFBSSxJQUFJLGFBQWEsT0FBTyxDQUFDO01BQzdCLE9BQU8sQ0FBQyxFQUFFLEVBQUU7UUFDVixHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO09BQzVCO01BQ0QsT0FBTyxHQUFHLENBQUM7S0FDWixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsS0FBSyxDQUFDO0lBQy9CLE1BQU0sV0FBVyxNQUFNLE9BQU8sS0FBSztNQUNqQyxLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3BDLE1BQU0sTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsS0FBSyxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUU7VUFDdEIsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ3BCLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEIsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO2NBQ3ZCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7YUFDbkI7V0FDRjtTQUNGO09BQ0Y7TUFDRCxPQUFPLEdBQUcsQ0FBQztLQUNaLENBQUM7SUFDRixNQUFNLFNBQVMsc0JBQXNCO01BQ25DLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztNQUNkLElBQUksQ0FBQyxFQUFFO1FBQ0wsSUFBSSxDQUFDLEVBQUU7VUFDTCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNWO1FBQ0QsTUFBTSxDQUFDLENBQUMsRUFBRSxVQUFVO1VBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO1lBQ2hDLE9BQU8sS0FBSyxDQUFDO1dBQ2QsTUFBTTtZQUNMLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNuQixPQUFPLElBQUksQ0FBQztXQUNiO1NBQ0YsQ0FBQyxDQUFDO09BQ0o7S0FDRixDQUFDO0lBQ0YsTUFBTSxZQUFZLElBQUksSUFBSSxNQUFNLEtBQUs7TUFDbkMsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQzFCLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDM0MsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsQ0FBQyxFQUFFO1VBQ04sTUFBTTtTQUNQO09BQ0Y7TUFDRCxPQUFPLENBQUMsQ0FBQztLQUNWLENBQUM7SUFDRixNQUFNLFlBQVksVUFBVTtNQUMxQixJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNoQixPQUFPLENBQUMsQ0FBQztPQUNWLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ25CLE9BQU8sRUFBRSxDQUFDO09BQ1gsTUFBTTtRQUNMLE9BQU8sS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztPQUN6QztLQUNGLENBQUM7SUFDRixNQUFNLGtCQUFrQixPQUFPO01BQzdCLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQztNQUNwQyxJQUFJLFdBQVcsRUFBRTtRQUNmLE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLFdBQVcsQ0FBQztPQUM1RDtNQUNELE9BQU8sR0FBRyxDQUFDO0tBQ1osQ0FBQztJQUNGLE1BQU0sUUFBUTtNQUNaLE1BQU0sTUFBTTtNQUNaLFNBQVMsT0FBTztNQUNoQixJQUFJLElBQUk7TUFDUixTQUFTLFNBQVM7TUFDbEIsU0FBUyxTQUFTO01BQ2xCLE1BQU0sTUFBTTtNQUNaLEtBQUssS0FBSztNQUNWLE1BQU0sUUFBUTtNQUNkLFNBQVMsT0FBTztNQUNoQixRQUFRLGdCQUFnQjtNQUN4QixRQUFRLFFBQVE7TUFDaEIsTUFBTSxNQUFNO01BQ1osU0FBUyxTQUFTO01BQ2xCLFNBQVMsU0FBUztNQUNsQixlQUFlO0tBQ2hCLENBQUM7O0lBRUYsTUFBTSxPQUFPLFdBQVcsYUFBYSxZQUFZLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEcsTUFBTSxTQUFTLFdBQVcsYUFBYSxZQUFZLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sRUFBRSxJQUFJLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN4SCxNQUFNLE1BQU0sT0FBTztNQUNqQixNQUFNLElBQUksRUFBRSxDQUFDO01BQ2IsTUFBTSxPQUFPLEtBQUs7UUFDaEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDWCxDQUFDO01BQ0YsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNuQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUNuQjtNQUNELE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0sUUFBUSxlQUFlLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO0lBQzNILE1BQU0sUUFBUSxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO0lBQzdKLE1BQU0sU0FBUyxVQUFVLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDOztJQUVoRSxNQUFNLFNBQVMsT0FBTyxNQUFNLEtBQUssV0FBVyxHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQzs7SUFFbkYsTUFBTSxPQUFPLGtCQUFrQjtNQUM3QixJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7TUFDL0QsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLE9BQU8sSUFBSSxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDdEUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDakI7TUFDRCxPQUFPLENBQUMsQ0FBQztLQUNWLENBQUM7SUFDRixNQUFNLFlBQVksY0FBYztNQUM5QixNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDM0IsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzNCLENBQUM7O0lBRUYsTUFBTSxTQUFTLGlCQUFpQjtNQUM5QixPQUFPLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDL0IsQ0FBQztJQUNGLE1BQU0sV0FBVyxpQkFBaUI7TUFDaEMsTUFBTSxTQUFTLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDbkMsSUFBSSxNQUFNLEtBQUssU0FBUyxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7UUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEdBQUcsZ0NBQWdDLENBQUMsQ0FBQztPQUMxRDtNQUNELE9BQU8sTUFBTSxDQUFDO0tBQ2YsQ0FBQzs7SUFFRixNQUFNLG1CQUFtQixNQUFNLGVBQWUsQ0FBQztJQUMvQyxNQUFNLGtCQUFrQixTQUFTO01BQy9CLE9BQU8sUUFBUSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUN2QyxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsS0FBSztNQUN6QixNQUFNLFFBQVEsU0FBUyxDQUFDLDJCQUEyQixFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ3hELE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLGVBQWUsQ0FBQyxLQUFLLENBQUMsVUFBVSxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksa0JBQWtCLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQzVJLENBQUM7O0lBRUYsTUFBTSxVQUFVLENBQUMsQ0FBQztJQUNsQixNQUFNLFdBQVcsQ0FBQyxDQUFDO0lBQ25CLE1BQU0sb0JBQW9CLEVBQUUsQ0FBQztJQUM3QixNQUFNLFVBQVUsQ0FBQyxDQUFDO0lBQ2xCLE1BQU0sT0FBTyxDQUFDLENBQUM7O0lBRWYsTUFBTSxPQUFPLFdBQVc7TUFDdEIsTUFBTSxJQUFJLE9BQU8sSUFBSSxTQUFTLENBQUM7TUFDL0IsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO0tBQ3hCLENBQUM7SUFDRixNQUFNLFNBQVMsV0FBVyxPQUFPLElBQUksU0FBUyxDQUFDO0lBQy9DLE1BQU0sU0FBUyxLQUFLLFdBQVcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRCxNQUFNLGNBQWMsV0FBVyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxVQUFVLENBQUM7SUFDM0YsTUFBTSxnQkFBZ0IsV0FBVyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksYUFBYSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7SUFDcEYsTUFBTSxjQUFjLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxNQUFNLFdBQVcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLE1BQU0sZUFBZSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEMsTUFBTSx1QkFBdUIsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdkQsTUFBTSxRQUFRLE9BQU8sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQzs7SUFFNUQsTUFBTSxTQUFTLHFCQUFxQjtNQUNsQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQzFELEdBQUcsYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7T0FDbkMsTUFBTTtRQUNMLE9BQU8sTUFBTSxDQUFDLHFDQUFxQyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsRyxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7T0FDbkQ7S0FDRixDQUFDO0lBQ0YsTUFBTSxRQUFRLHlCQUF5QjtNQUNyQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ2pDLENBQUM7SUFDRixNQUFNLFdBQVcsb0JBQW9CO01BQ25DLE1BQU0sTUFBTSxPQUFPLElBQUksQ0FBQztNQUN4QixNQUFNLENBQUMsS0FBSyxFQUFFLFVBQVU7UUFDdEIsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDbkIsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sUUFBUSxrQkFBa0I7TUFDOUIsTUFBTSxJQUFJLE9BQU8sSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDeEMsT0FBTyxDQUFDLEtBQUssSUFBSSxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUM7S0FDbkMsQ0FBQztJQUNGLE1BQU0sU0FBUyxrQkFBa0IsUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sUUFBUSxrQkFBa0I7TUFDOUIsTUFBTSxNQUFNLE9BQU8sSUFBSSxDQUFDO01BQ3hCLE9BQU8sR0FBRyxJQUFJLEdBQUcsYUFBYSxHQUFHLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztLQUNoRSxDQUFDO0lBQ0YsTUFBTSxXQUFXLGtCQUFrQjtNQUNqQyxPQUFPLElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDbEMsQ0FBQztJQUNGLE1BQU0sVUFBVSxXQUFXO01BQ3pCLE1BQU0sUUFBUSxPQUFPLElBQUksV0FBVyxDQUFDO01BQ3JDLE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssT0FBTyxLQUFLLENBQUMsQ0FBQztLQUNwRSxDQUFDO0lBQ0YsTUFBTSxVQUFVLFdBQVcsS0FBSyxDQUFDLE9BQU8sSUFBSSxXQUFXLEVBQUUsZUFBZTtNQUN0RSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQztNQUM1QixPQUFPLEdBQUcsQ0FBQztLQUNaLEVBQUUsRUFBRSxDQUFDLENBQUM7O0lBRVAsTUFBTSxTQUFTLG1CQUFtQjtNQUNoQyxNQUFNLFFBQVEsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNuQyxPQUFPLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDcEUsQ0FBQztJQUNGLE1BQU0sUUFBUSx1QkFBdUI7TUFDbkMsTUFBTSxNQUFNLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDbEMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUM1QixLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ25DLE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQztJQUNGLE1BQU0sV0FBVyx1QkFBdUI7TUFDdEMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO01BQzFELElBQUksRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFO1FBQ2pCLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7T0FDcEMsTUFBTTtRQUNMLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDekI7TUFDRCxPQUFPLEtBQUssQ0FBQztLQUNkLENBQUM7O0lBRUYsTUFBTSxXQUFXLFdBQVcsT0FBTyxJQUFJLFVBQVUsS0FBSyxTQUFTLENBQUM7SUFDaEUsTUFBTSxRQUFRLFdBQVcsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNsRCxNQUFNLFFBQVEsb0JBQW9CLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sV0FBVyxvQkFBb0IsUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkUsTUFBTSxXQUFXLG9CQUFvQjtNQUNuQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDckMsT0FBTyxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ2pDLE1BQU07UUFDTCxPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDOUI7S0FDRixDQUFDOztJQUVGLE1BQU0sUUFBUSxvQkFBb0I7TUFDaEMsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDckIsT0FBTyxJQUFJLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO09BQ2xDLE1BQU07UUFDTCxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ3ZCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sYUFBYSxXQUFXO01BQzVCLE1BQU0sWUFBWSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDN0UsSUFBSSxTQUFTLE9BQU8sS0FBSyxDQUFDLEVBQUU7UUFDMUIsUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztPQUM1QjtLQUNGLENBQUM7SUFDRixNQUFNLFdBQVcsb0JBQW9CO01BQ25DLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3JCLE1BQU0sWUFBWSxPQUFPLElBQUksVUFBVSxDQUFDO1FBQ3hDLFNBQVMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO09BQ3pCLE1BQU07UUFDTCxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQzFCO01BQ0QsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3JCLENBQUM7SUFDRixNQUFNLFdBQVcsb0JBQW9CO01BQ25DLE1BQU0sU0FBUyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxJQUFJLFVBQVUsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDbEcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ3BCLE9BQU8sTUFBTSxDQUFDO0tBQ2YsQ0FBQztJQUNGLE1BQU0sTUFBTSxvQkFBb0IsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sSUFBSSxVQUFVLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7SUFFM0YsTUFBTSxhQUFhLGlCQUFpQjtNQUNsQyxNQUFNLE1BQU0sS0FBSyxJQUFJLFFBQVEsQ0FBQztNQUM5QixNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDckMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDO01BQ3JCLElBQUksQ0FBQyxHQUFHLGNBQWMsRUFBRSxJQUFJLEdBQUcsV0FBVyxPQUFPLEdBQUcsQ0FBQyxFQUFFO1FBQ3JELE1BQU0sVUFBVSx1Q0FBdUMsQ0FBQztRQUN4RCxPQUFPLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztPQUMxQjtNQUNELE9BQU8sU0FBUyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDckMsQ0FBQztJQUNGLE1BQU0sVUFBVSxnQkFBZ0I7TUFDOUIsTUFBTSxNQUFNLEtBQUssSUFBSSxRQUFRLENBQUM7TUFDOUIsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ3BDLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3hCLENBQUM7SUFDRixNQUFNLFdBQVcsaUJBQWlCO01BQ2hDLE1BQU0sTUFBTSxLQUFLLElBQUksUUFBUSxDQUFDO01BQzlCLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN0QyxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN4QixDQUFDO0lBQ0YsTUFBTSxZQUFZLFFBQVE7TUFDeEIsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO09BQ3JEO01BQ0QsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7S0FDdEIsQ0FBQztJQUNGLE1BQU0sY0FBYyxrQkFBa0IsUUFBUSxLQUFLLENBQUMsTUFBTSxJQUFJLGlCQUFpQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEcsTUFBTSxlQUFlO01BQ25CLFVBQVUsVUFBVTtNQUNwQixPQUFPO01BQ1AsUUFBUTtNQUNSLFNBQVMsU0FBUztNQUNsQixXQUFXLFdBQVc7S0FDdkIsQ0FBQzs7SUFFRixNQUFNLFVBQVUsZUFBZTtNQUM3QixNQUFNLElBQUksRUFBRSxDQUFDO01BQ2IsTUFBTSxVQUFVLEtBQUs7UUFDbkIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUNiLENBQUM7TUFDRixJQUFJLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3BCLEdBQUc7UUFDRCxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO09BQ3pCLFFBQVEsR0FBRyxPQUFPLEVBQUUsRUFBRTtNQUN2QixPQUFPLENBQUMsQ0FBQztLQUNWLENBQUM7O0lBRUYsTUFBTSxPQUFPLHVCQUF1QjtNQUNsQyxNQUFNLE1BQU0sT0FBTyxJQUFJLENBQUM7TUFDeEIsSUFBSSxHQUFHLFNBQVMsS0FBSyxPQUFPLEVBQUU7UUFDNUIsT0FBTyxLQUFLLENBQUM7T0FDZCxNQUFNO1FBQ0wsTUFBTSxPQUFPLEdBQUcsQ0FBQztRQUNqQixJQUFJLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtVQUM5QixPQUFPLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQy9CLE1BQU0sSUFBSSxJQUFJLGtCQUFrQixLQUFLLFNBQVMsRUFBRTtVQUMvQyxPQUFPLElBQUksa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDekMsTUFBTSxJQUFJLElBQUksc0JBQXNCLEtBQUssU0FBUyxFQUFFO1VBQ25ELE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM3QyxNQUFNLElBQUksSUFBSSxtQkFBbUIsS0FBSyxTQUFTLEVBQUU7VUFDaEQsT0FBTyxJQUFJLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzFDLE1BQU07VUFDTCxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7U0FDbkQ7T0FDRjtLQUNGLENBQUM7SUFDRixNQUFNLGlCQUFpQixPQUFPLEdBQUcsU0FBUyxLQUFLLE9BQU8sSUFBSSxHQUFHLFNBQVMsS0FBSyxRQUFRLElBQUksR0FBRyxTQUFTLEtBQUssaUJBQWlCLElBQUksR0FBRyxrQkFBa0IsS0FBSyxDQUFDLENBQUM7SUFDekosTUFBTSxNQUFNLHFCQUFxQjtNQUMvQixNQUFNLE9BQU8sS0FBSyxLQUFLLFNBQVMsR0FBRyxRQUFRLEdBQUcsS0FBSyxJQUFJLENBQUM7TUFDeEQsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxJQUFJLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxFQUFFLFlBQVksUUFBUSxDQUFDLENBQUM7S0FDakcsQ0FBQztJQUNGLE1BQU0sTUFBTSxxQkFBcUI7TUFDL0IsTUFBTSxPQUFPLEtBQUssS0FBSyxTQUFTLEdBQUcsUUFBUSxHQUFHLEtBQUssSUFBSSxDQUFDO01BQ3hELE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLEdBQUcsUUFBUSxLQUFLLENBQUMsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksUUFBUSxDQUFDLENBQUM7S0FDdkgsQ0FBQzs7SUFFRixNQUFNLEtBQUssWUFBWSxFQUFFLElBQUksS0FBSyxFQUFFLElBQUksQ0FBQztJQUN6QyxNQUFNLFdBQVcsWUFBWTtNQUMzQixNQUFNLEtBQUssRUFBRSxJQUFJLENBQUM7TUFDbEIsTUFBTSxLQUFLLEVBQUUsSUFBSSxDQUFDO01BQ2xCLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDNUMsQ0FBQzs7SUFFRixNQUFNLFVBQVUsV0FBVyxZQUFZLFFBQVEsQ0FBQyxPQUFPLElBQUksY0FBYyxDQUFDLENBQUM7SUFDM0UsTUFBTSxrQkFBa0IsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0RSxNQUFNLGtCQUFrQixXQUFXLFlBQVksUUFBUSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3RHLE1BQU0sY0FBYyxXQUFXLFlBQVksUUFBUSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQztJQUM5RixNQUFNLFNBQVMsV0FBVyxRQUFRLEtBQUssQ0FBQyxPQUFPLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLFFBQVEsQ0FBQyxDQUFDO0lBQzFGLE1BQU0sZ0JBQWdCLFdBQVcsUUFBUSxLQUFLLENBQUMsT0FBTyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxRQUFRLENBQUMsQ0FBQztJQUNwRyxNQUFNLFlBQVkscUJBQXFCO01BQ3JDLE1BQU0sT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxHQUFHLEtBQUssQ0FBQztNQUNqRCxJQUFJLE1BQU0sT0FBTyxJQUFJLENBQUM7TUFDdEIsTUFBTSxNQUFNLEVBQUUsQ0FBQztNQUNmLE9BQU8sR0FBRyxXQUFXLEtBQUssSUFBSSxJQUFJLEdBQUcsV0FBVyxLQUFLLFNBQVMsRUFBRTtRQUM5RCxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUM7UUFDakMsTUFBTSxJQUFJLFlBQVksUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1osSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO1VBQ3BCLE1BQU07U0FDUCxNQUFNO1VBQ0wsTUFBTSxTQUFTLENBQUM7U0FDakI7T0FDRjtNQUNELE9BQU8sR0FBRyxDQUFDO0tBQ1osQ0FBQztJQUNGLE1BQU0sV0FBVyxXQUFXO01BQzFCLE1BQU0sYUFBYSxZQUFZLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUN4RSxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNsRSxDQUFDO0lBQ0YsTUFBTSxjQUFjLFdBQVcsUUFBUSxLQUFLLENBQUMsT0FBTyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLFFBQVEsQ0FBQyxDQUFDO0lBQ3BHLE1BQU0sY0FBYyxXQUFXLFFBQVEsS0FBSyxDQUFDLE9BQU8sSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksUUFBUSxDQUFDLENBQUM7SUFDaEcsTUFBTSxlQUFlLFdBQVcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN2RSxNQUFNLGVBQWUsV0FBVyxPQUFPLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzlELE1BQU0sYUFBYSxXQUFXLEtBQUssQ0FBQyxPQUFPLElBQUksV0FBVyxFQUFFLFlBQVksUUFBUSxDQUFDLENBQUM7SUFDbEYsTUFBTSxVQUFVLG9CQUFvQjtNQUNsQyxNQUFNLEtBQUssT0FBTyxJQUFJLFdBQVcsQ0FBQztNQUNsQyxPQUFPLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxRQUFRLENBQUMsQ0FBQztLQUMzRCxDQUFDO0lBQ0YsTUFBTSxhQUFhLFdBQVcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRCxNQUFNLFlBQVksV0FBVyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxXQUFXLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRixNQUFNLGtCQUFrQixXQUFXLE9BQU8sSUFBSSxXQUFXLE9BQU8sQ0FBQztJQUNqRSxNQUFNLGdCQUFnQixXQUFXLE9BQU8sSUFBSSxjQUFjLEVBQUUsQ0FBQzs7SUFFN0QsTUFBTSxVQUFVLE9BQU87TUFDckIsTUFBTSxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUM7TUFDdkIsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUU7UUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO09BQzlDO01BQ0QsT0FBTyxZQUFZLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNoQyxDQUFDOztJQUVGLE1BQU0sZUFBZSxPQUFPLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUM7SUFDckYsTUFBTSxZQUFZLFVBQVUsQ0FBQyxPQUFPLFVBQVUsYUFBYSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksVUFBVSxZQUFZLENBQUMsQ0FBQztJQUN2RyxNQUFNLGdCQUFnQixRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUMsTUFBTSxjQUFjLFNBQVMsR0FBRyxLQUFLLFlBQVksUUFBUSxDQUFDLENBQUMsSUFBSSxZQUFZLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQztJQUNqRyxNQUFNLG9CQUFvQixPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLE1BQU0sc0JBQXNCLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxZQUFZLFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7SUFDakgsTUFBTSxnQkFBZ0IsS0FBSztNQUN6QixNQUFNLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3pCLE9BQU8sWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7S0FDN0QsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLEtBQUssWUFBWSxRQUFRLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0lBQzVELE1BQU0seUJBQXlCLFNBQVM7TUFDdEMsSUFBSSxhQUFhLEVBQUUsSUFBSSxhQUFhLENBQUMsS0FBSyxPQUFPLENBQUMsRUFBRTtRQUNsRCxNQUFNLEtBQUssWUFBWSxRQUFRLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQztRQUM5QyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsRUFBRTtVQUMzQyxJQUFJLEtBQUssU0FBUyxJQUFJLEtBQUssYUFBYSxFQUFFO1lBQ3hDLE1BQU0sZUFBZSxLQUFLLGFBQWEsRUFBRSxDQUFDO1lBQzFDLElBQUksWUFBWSxFQUFFO2NBQ2hCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQzNCO1dBQ0Y7U0FDRjtPQUNGO01BQ0QsT0FBTyxRQUFRLEtBQUssQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDO0tBQ3BDLENBQUM7SUFDRixNQUFNLG1CQUFtQixXQUFXLGFBQWEsQ0FBQyxPQUFPLElBQUksV0FBVyxDQUFDLENBQUM7O0lBRTFFLE1BQU0sU0FBUyxXQUFXO01BQ3hCLE1BQU0sTUFBTSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxJQUFJLFdBQVcsR0FBRyxPQUFPLElBQUksQ0FBQztNQUNyRSxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLGNBQWMsS0FBSyxJQUFJLEVBQUU7UUFDbkUsT0FBTyxLQUFLLENBQUM7T0FDZDtNQUNELE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQztNQUM5QixPQUFPLGFBQWEsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztLQUNySCxDQUFDOztJQUVGLElBQUksb0JBQW9CLG9DQUFvQztNQUMxRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUU7UUFDaEIsT0FBTyxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztPQUM3QixNQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUM5QyxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEIsTUFBTTtRQUNMLE9BQU8sUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7T0FDbkM7S0FDRixDQUFDOztJQUVGLE1BQU0sYUFBYSw4QkFBOEI7TUFDL0MsSUFBSSxVQUFVLEtBQUssSUFBSSxDQUFDO01BQ3hCLE1BQU0sT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxHQUFHLEtBQUssQ0FBQztNQUNqRCxPQUFPLE9BQU8sV0FBVyxFQUFFO1FBQ3pCLFVBQVUsT0FBTyxXQUFXLENBQUM7UUFDN0IsTUFBTSxLQUFLLFlBQVksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1VBQ2pCLE9BQU8sUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDMUIsTUFBTSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtVQUNuQixNQUFNO1NBQ1A7T0FDRjtNQUNELE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztLQUN4QixDQUFDO0lBQ0YsTUFBTSxZQUFZLDhCQUE4QjtNQUM5QyxNQUFNLEtBQUssYUFBYSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDaEMsT0FBTyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDcEUsQ0FBQztJQUNGLE1BQU0sWUFBWSxzQkFBc0I7TUFDdEMsTUFBTSxVQUFVLEtBQUssSUFBSSxDQUFDO01BQzFCLElBQUksQ0FBQyxPQUFPLFdBQVcsRUFBRTtRQUN2QixPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEI7TUFDRCxPQUFPLEtBQUssQ0FBQyxZQUFZLFFBQVEsQ0FBQyxPQUFPLFdBQVcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzVGLENBQUM7SUFDRixNQUFNLFFBQVEsc0JBQXNCO01BQ2xDLE1BQU0sT0FBTyxRQUFRLFNBQVMsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQzNELE1BQU0sU0FBUyxNQUFNLENBQUMsS0FBSyxJQUFJLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNsRCxPQUFPLE1BQU0sSUFBSSxDQUFDLFlBQVksUUFBUSxDQUFDLENBQUM7S0FDekMsQ0FBQztJQUNGLE1BQU0sZUFBZSxzQkFBc0I7TUFDekMsTUFBTSxVQUFVLFFBQVE7UUFDdEIsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLFdBQVcsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO1VBQy9DLE1BQU0sUUFBUSxZQUFZLFFBQVEsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3ZELElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BCLE9BQU8sUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7V0FDN0I7VUFDRCxNQUFNLE1BQU0sT0FBTyxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDeEMsSUFBSSxHQUFHLE9BQU8sRUFBRSxFQUFFO1lBQ2hCLE9BQU8sR0FBRyxDQUFDO1dBQ1o7U0FDRjtRQUNELE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN4QixDQUFDO01BQ0YsT0FBTyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztLQUMzQixDQUFDOztJQUVGLE1BQU0sYUFBYSw2QkFBNkIsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEcsTUFBTSxhQUFhLHFCQUFxQixHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdELE1BQU0sWUFBWSw2QkFBNkI7TUFDN0MsTUFBTSxLQUFLLHVCQUF1QixJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQzFELE9BQU8saUJBQWlCLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ25FLENBQUM7O0lBRUYsTUFBTSxZQUFZLFVBQVUsU0FBUyxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ25FLE1BQU0sZUFBZSxVQUFVLGlCQUFpQixLQUFLLEtBQUs7TUFDeEQsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDbkIsT0FBTyxPQUFPLElBQUksa0JBQWtCLENBQUM7T0FDdEMsTUFBTTtRQUNMLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFlBQVksUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDO09BQ3JHO0tBQ0YsQ0FBQztJQUNGLE1BQU0sV0FBVyxXQUFXLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQzs7SUFFeEQsTUFBTSxjQUFjLE9BQU8sR0FBRyxNQUFNLEtBQUssU0FBUyxJQUFJLFVBQVUsQ0FBQyxHQUFHLE1BQU0saUJBQWlCLENBQUMsQ0FBQzs7SUFFN0YsTUFBTSxjQUFjLDBCQUEwQjtNQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3BCLE9BQU8sTUFBTSxDQUFDLG9DQUFvQyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0RyxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixHQUFHLEtBQUssQ0FBQyxDQUFDO09BQ3pEO01BQ0QsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDcEIsR0FBRyxNQUFNLFlBQVksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDeEM7S0FDRixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsbUJBQW1CO01BQ3hDLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3BCLEdBQUcsTUFBTSxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7T0FDcEM7S0FDRixDQUFDO0lBQ0YsTUFBTSxRQUFRLDhCQUE4QjtNQUMxQyxNQUFNLE1BQU0sT0FBTyxJQUFJLENBQUM7TUFDeEIsV0FBVyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDbkMsQ0FBQztJQUNGLE1BQU0sU0FBUyxrQkFBa0I7TUFDL0IsTUFBTSxNQUFNLE9BQU8sSUFBSSxDQUFDO01BQ3hCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsVUFBVTtRQUNwQixXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUN4QixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxRQUFRLHVCQUF1QjtNQUNuQyxNQUFNLE1BQU0sT0FBTyxJQUFJLENBQUM7TUFDeEIsTUFBTSxTQUFTLE1BQU0saUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDNUMsTUFBTSxJQUFJLE1BQU0saUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDNUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDNUUsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLG1CQUFtQixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxNQUFNLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUMxRyxNQUFNLFNBQVMsdUJBQXVCO01BQ3BDLE1BQU0sTUFBTSxPQUFPLElBQUksQ0FBQztNQUN4QixNQUFNLE1BQU0saUJBQWlCLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQzdDLE9BQU8sUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3JELENBQUM7SUFDRixNQUFNLFlBQVksV0FBVztNQUMzQixNQUFNLE1BQU0sRUFBRSxDQUFDO01BQ2YsTUFBTSxNQUFNLE9BQU8sSUFBSSxDQUFDO01BQ3hCLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3BCLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxNQUFNLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtVQUN6QyxNQUFNLFdBQVcsR0FBRyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUNuQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDckM7T0FDRjtNQUNELE9BQU8sR0FBRyxDQUFDO0tBQ1osQ0FBQztJQUNGLE1BQU0sV0FBVyx1QkFBdUI7TUFDdEMsTUFBTSxNQUFNLE9BQU8sSUFBSSxDQUFDO01BQ3hCLGNBQWMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDOUIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ2xELFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7T0FDNUI7S0FDRixDQUFDO0lBQ0YsTUFBTSxTQUFTLEtBQUssQ0FBQyxJQUFJLFlBQVksQ0FBQzs7SUFFdEMsTUFBTSxXQUFXLHFCQUFxQjtNQUNwQyxNQUFNLFdBQVcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ2hDLFFBQVEsS0FBSyxDQUFDLEtBQUs7UUFDakIsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxPQUFPLElBQUksRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO09BQzdDLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFVBQVUscUJBQXFCO01BQ25DLE1BQU0sVUFBVSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDcEMsT0FBTyxLQUFLLENBQUMsTUFBTTtRQUNqQixNQUFNLFdBQVcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLFFBQVEsS0FBSyxDQUFDLEtBQUs7VUFDakIsUUFBUSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUN0QixDQUFDLENBQUM7T0FDSixFQUFFLEtBQUs7UUFDTixRQUFRLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQ3RCLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFVBQVUscUJBQXFCO01BQ25DLE1BQU0sZUFBZSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDeEMsWUFBWSxLQUFLLENBQUMsTUFBTTtRQUN0QixRQUFRLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQzNCLEVBQUUsS0FBSztRQUNOLE1BQU0sSUFBSSxhQUFhLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUM3QyxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxXQUFXLHFCQUFxQjtNQUNwQyxNQUFNLElBQUksWUFBWSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7S0FDckMsQ0FBQztJQUNGLE1BQU0sU0FBUyxzQkFBc0I7TUFDbkMsUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztNQUMzQixRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQzVCLENBQUM7O0lBRUYsTUFBTSxVQUFVLHNCQUFzQjtNQUNwQyxNQUFNLENBQUMsUUFBUSxFQUFFLFVBQVU7UUFDekIsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUNmLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFNBQVMsc0JBQXNCO01BQ25DLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSztRQUNwQixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3JCLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxRQUFRLFdBQVc7TUFDdkIsT0FBTyxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7TUFDN0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTO1FBQ25DLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztPQUNqQixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxXQUFXLFdBQVc7TUFDMUIsTUFBTSxNQUFNLE9BQU8sSUFBSSxDQUFDO01BQ3hCLElBQUksR0FBRyxXQUFXLEtBQUssSUFBSSxFQUFFO1FBQzNCLEdBQUcsV0FBVyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDakM7S0FDRixDQUFDO0lBQ0YsTUFBTSxTQUFTLFdBQVc7TUFDeEIsTUFBTSxXQUFXLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUNyQyxJQUFJLFFBQVEsT0FBTyxHQUFHLENBQUMsRUFBRTtRQUN2QixPQUFPLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO09BQzVCO01BQ0QsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ25CLENBQUM7O0lBRUYsTUFBTSxXQUFXLGlCQUFpQjtNQUNoQyxNQUFNLE1BQU0sS0FBSyxJQUFJLFFBQVEsQ0FBQztNQUM5QixNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDckMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDO01BQ3JCLE9BQU8sVUFBVSxDQUFDLFlBQVksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDOUMsQ0FBQztJQUNGLE1BQU0sWUFBWSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsWUFBWSxRQUFRLENBQUMsQ0FBQzs7SUFFOUQsTUFBTSxRQUFRLFdBQVcsT0FBTyxJQUFJLFVBQVUsQ0FBQztJQUMvQyxNQUFNLFFBQVEsc0JBQXNCO01BQ2xDLE1BQU0sUUFBUSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDL0IsTUFBTSxTQUFTLEtBQUssSUFBSSxDQUFDO01BQ3pCLE1BQU0sV0FBVyxZQUFZLFFBQVEsQ0FBQyxNQUFNLHVCQUF1QixFQUFFLENBQUMsQ0FBQztNQUN2RSxNQUFNLGtCQUFrQixRQUFRLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ2xELE1BQU0sQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7TUFDbEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ2YsUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztLQUM3QixDQUFDO0lBQ0YsTUFBTSxXQUFXLFdBQVc7TUFDMUIsTUFBTSxZQUFZLFlBQVksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQzlDLE1BQU0sUUFBUSxZQUFZLFFBQVEsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDaEUsUUFBUSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztNQUMzQixPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUN6QixDQUFDOztJQUVGLE1BQU0sVUFBVSw2Q0FBNkM7TUFDM0QsTUFBTTtNQUNOLENBQUM7TUFDRCxDQUFDO01BQ0QsSUFBSTtNQUNKLE9BQU87TUFDUCxJQUFJO01BQ0osR0FBRztLQUNKLENBQUMsQ0FBQztJQUNILE1BQU0sZUFBZSxZQUFZO01BQy9CLE1BQU0sU0FBUyxZQUFZLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQztNQUM3RixNQUFNLE9BQU8sTUFBTSxRQUFRLGdCQUFnQixFQUFFLENBQUM7TUFDOUMsTUFBTSxVQUFVLE1BQU0sUUFBUSxlQUFlLEVBQUUsQ0FBQztNQUNoRCxNQUFNLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNwQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxRQUFRLEVBQUUsUUFBUSxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDM0YsQ0FBQztJQUNGLE1BQU0sV0FBVyxxQkFBcUIsWUFBWTtNQUNoRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUNwQixPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7T0FDakM7S0FDRixDQUFDO0lBQ0YsTUFBTSxTQUFTLGlEQUFpRDtNQUM5RCxNQUFNLFVBQVUsUUFBUSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztNQUMxQyxPQUFPLElBQUksaUJBQWlCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztNQUN6RCxPQUFPLEVBQUUsUUFBUSxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUM7S0FDdkUsQ0FBQztJQUNGLE1BQU0sU0FBUyxxQ0FBcUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuRyxNQUFNLFNBQVMseUNBQXlDO01BQ3RELE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQzdELENBQUM7O0lBRUYsTUFBTSxJQUFJLGVBQWU7TUFDdkIsTUFBTSxZQUFZLFVBQVUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ2pELE9BQU87UUFDTCxJQUFJO1FBQ0osR0FBRztRQUNILFNBQVM7T0FDVixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLENBQUMsQ0FBQzs7SUFFeEIsTUFBTSxjQUFjLE9BQU87TUFDekIsTUFBTSxNQUFNLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQztNQUN4QyxPQUFPLGFBQWEsQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0tBQ3pDLENBQUM7SUFDRixNQUFNLHFCQUFxQixVQUFVO01BQ25DLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRTtRQUNuQixPQUFPLENBQUMsQ0FBQztPQUNWLE1BQU07UUFDTCxPQUFPLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUNoQztLQUNGLENBQUM7SUFDRixNQUFNLFdBQVcsV0FBVztNQUMxQixNQUFNLE1BQU0sT0FBTyxJQUFJLGNBQWMsQ0FBQztNQUN0QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUM7TUFDdEIsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDO01BQzVCLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDO01BQ2pDLElBQUksSUFBSSxLQUFLLE9BQU8sSUFBSSxFQUFFO1FBQ3hCLE9BQU8sYUFBYSxDQUFDLElBQUksV0FBVyxFQUFFLElBQUksVUFBVSxDQUFDLENBQUM7T0FDdkQ7TUFDRCxNQUFNLFlBQVksa0JBQWtCLENBQUMsR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxZQUFZLEVBQUUsSUFBSSxVQUFVLENBQUMsQ0FBQztNQUNoSCxNQUFNLGFBQWEsa0JBQWtCLENBQUMsR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxZQUFZLEVBQUUsSUFBSSxXQUFXLENBQUMsQ0FBQztNQUNsSCxNQUFNLFlBQVksa0JBQWtCLENBQUMsSUFBSSxVQUFVLEVBQUUsSUFBSSxVQUFVLENBQUMsQ0FBQztNQUNyRSxNQUFNLGFBQWEsa0JBQWtCLENBQUMsSUFBSSxXQUFXLEVBQUUsSUFBSSxXQUFXLENBQUMsQ0FBQztNQUN4RSxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxVQUFVLEVBQUUsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0tBQ3BGLENBQUM7SUFDRixNQUFNLFdBQVcsV0FBVztNQUMxQixNQUFNLE1BQU0sT0FBTyxJQUFJLENBQUM7TUFDeEIsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDO01BQzlCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQztNQUN0QixJQUFJLElBQUksS0FBSyxHQUFHLEVBQUU7UUFDaEIsT0FBTyxhQUFhLENBQUMsSUFBSSxXQUFXLEVBQUUsSUFBSSxVQUFVLENBQUMsQ0FBQztPQUN2RDtNQUNELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDcEIsT0FBTyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQzVCO01BQ0QsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDekIsQ0FBQzs7SUFFRixNQUFNLFFBQVEsUUFBUTtNQUNwQixNQUFNLE1BQU0sSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLElBQUksR0FBRyxRQUFRLENBQUM7TUFDckQsTUFBTSxJQUFJLEdBQUcsS0FBSyxXQUFXLElBQUksR0FBRyxnQkFBZ0IsV0FBVyxDQUFDO01BQ2hFLE1BQU0sSUFBSSxHQUFHLEtBQUssVUFBVSxJQUFJLEdBQUcsZ0JBQWdCLFVBQVUsQ0FBQztNQUM5RCxPQUFPLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDNUIsQ0FBQztJQUNGLE1BQU0sS0FBSyxnQkFBZ0I7TUFDekIsTUFBTSxNQUFNLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDO01BQ3JELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQztNQUM1QixJQUFJLEdBQUcsRUFBRTtRQUNQLEdBQUcsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUNwQjtLQUNGLENBQUM7SUFDRixNQUFNLFdBQVcseUJBQXlCO01BQ3hDLE1BQU0sV0FBVyxRQUFRLEVBQUUsUUFBUSxTQUFTLEVBQUUsQ0FBQztNQUMvQyxJQUFJLFFBQVEsSUFBSSxVQUFVLENBQUMsT0FBTyxJQUFJLHVCQUF1QixDQUFDLEVBQUU7UUFDOUQsT0FBTyxJQUFJLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO09BQzNDLE1BQU07UUFDTCxPQUFPLElBQUksZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO09BQ3hDO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLFFBQVEsUUFBUTtNQUNwQixNQUFNLE1BQU0sSUFBSSxLQUFLLFNBQVMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO01BQy9DLElBQUksUUFBUSxFQUFFLFFBQVEsVUFBVSxFQUFFLEVBQUU7UUFDbEMsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCLE1BQU07UUFDTCxPQUFPLFFBQVEsS0FBSyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7T0FDMUM7S0FDRixDQUFDO0lBQ0YsTUFBTSxTQUFTLDBCQUEwQjtNQUN2QyxDQUFDO01BQ0QsQ0FBQztNQUNELEtBQUs7TUFDTCxNQUFNO01BQ04sT0FBTyxDQUFDLEdBQUcsS0FBSztNQUNoQixRQUFRLENBQUMsR0FBRyxNQUFNO0tBQ25CLENBQUMsQ0FBQztJQUNILE1BQU0sWUFBWSxRQUFRO01BQ3hCLE1BQU0sTUFBTSxJQUFJLEtBQUssU0FBUyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7TUFDL0MsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDO01BQ3pCLE1BQU0sU0FBUyxLQUFLLENBQUMsWUFBWSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUNoRCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU07UUFDM0IsTUFBTSxPQUFPLEdBQUcsU0FBUyxnQkFBZ0IsQ0FBQztRQUMxQyxNQUFNLFFBQVEsSUFBSSxZQUFZLENBQUM7UUFDL0IsTUFBTSxTQUFTLElBQUksYUFBYSxDQUFDO1FBQ2pDLE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxFQUFFLE1BQU0sSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztPQUN2RCxFQUFFLGtCQUFrQixNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxTQUFTLEVBQUUsTUFBTSxLQUFLLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxjQUFjLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLGNBQWMsTUFBTSxFQUFFLGNBQWMsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUN6SyxDQUFDOztJQUVGLE1BQU0sV0FBVyxzQkFBc0IsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM5RSxNQUFNLGdCQUFnQixzQkFBc0I7TUFDMUMsSUFBSSxTQUFTLEVBQUUsQ0FBQztNQUNoQixNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUs7UUFDN0IsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7VUFDaEIsU0FBUyxNQUFNLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0I7UUFDRCxTQUFTLE1BQU0sT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztPQUNyRCxDQUFDLENBQUM7TUFDSCxPQUFPLE1BQU0sQ0FBQztLQUNmLENBQUM7O0lBRUYsTUFBTSxjQUFjLHFCQUFxQixHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDOztJQUU5RCxNQUFNLGFBQWEsNkJBQTZCLFVBQVUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQzs7SUFFN0Ysb0JBQW9CO01BQ2xCLFdBQVcsc0JBQXNCO1FBQy9CLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQztRQUN0QixJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxRQUFRLEdBQUcsSUFBSSxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxJQUFJLEtBQUssR0FBRyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLElBQUksS0FBSyxHQUFHLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxNQUFNLEdBQUcsSUFBSSxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUNwQztNQUNELE9BQU8sR0FBRztRQUNSLE9BQU8sSUFBSSxLQUFLLENBQUM7T0FDbEI7TUFDRCxJQUFJLFVBQVU7UUFDWixJQUFJLEtBQUssR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLEtBQUssRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlFLE9BQU8sSUFBSSxLQUFLLENBQUM7T0FDbEI7TUFDRCxJQUFJLFVBQVU7UUFDWixJQUFJLEtBQUssR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLEtBQUssRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakYsT0FBTyxJQUFJLEtBQUssQ0FBQztPQUNsQjtNQUNELEtBQUssVUFBVTtRQUNiLElBQUksS0FBSyxHQUFHLElBQUksaUJBQWlCLENBQUMsSUFBSSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEQsT0FBTyxJQUFJLEtBQUssQ0FBQztPQUNsQjtNQUNELFdBQVcsd0NBQXdDO1FBQ2pELElBQUksSUFBSSxFQUFFO1VBQ1IsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDL0IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7V0FDeEI7VUFDRCxJQUFJLElBQUksS0FBSyxJQUFJLFNBQVMsRUFBRTtZQUMxQixJQUFJLFVBQVUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2hDLElBQUksT0FBTyxFQUFFO2NBQ1gsT0FBTyxPQUFPLENBQUM7YUFDaEI7WUFDRCxLQUFLLElBQUksU0FBUyxJQUFJLFdBQVcsRUFBRSxNQUFNLElBQUksTUFBTSxLQUFLLElBQUksU0FBUyxFQUFFLFNBQVMsTUFBTSxXQUFXLEVBQUU7Y0FDakcsVUFBVSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7Y0FDOUIsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsT0FBTyxPQUFPLENBQUM7ZUFDaEI7YUFDRjtXQUNGO1NBQ0Y7UUFDRCxPQUFPLFNBQVMsQ0FBQztPQUNsQjtNQUNELGdCQUFnQixnQkFBZ0I7UUFDOUIsSUFBSSxJQUFJLEVBQUU7VUFDUixNQUFNLFVBQVUsSUFBSSxnQkFBZ0IsQ0FBQztVQUNyQyxJQUFJLElBQUksU0FBUyxJQUFJLE9BQU8sS0FBSyxJQUFJLFNBQVMsRUFBRTtZQUM5QyxPQUFPO1dBQ1I7VUFDRCxJQUFJLE9BQU8sRUFBRTtZQUNYLElBQUksQ0FBQyxPQUFPLEVBQUU7Y0FDWixLQUFLLElBQUksUUFBUSxPQUFPLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxLQUFLLFVBQVUsRUFBRTtnQkFDbEUsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO2tCQUNwQixPQUFPLEtBQUssQ0FBQztpQkFDZDtlQUNGO2FBQ0Y7WUFDRCxPQUFPLE9BQU8sQ0FBQztXQUNoQjtVQUNELE1BQU0sU0FBUyxJQUFJLFdBQVcsQ0FBQztVQUMvQixJQUFJLE1BQU0sSUFBSSxNQUFNLEtBQUssSUFBSSxTQUFTLEVBQUU7WUFDdEMsT0FBTyxNQUFNLENBQUM7V0FDZjtTQUNGO1FBQ0QsT0FBTyxTQUFTLENBQUM7T0FDbEI7S0FDRjs7SUFFRCxNQUFNLGFBQWEsUUFBUTtNQUN6QixPQUFPLFFBQVE7UUFDYixPQUFPLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxTQUFTLEtBQUssSUFBSSxDQUFDO09BQ3pDLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsUUFBUSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEUsTUFBTSxjQUFjLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxNQUFNLGdCQUFnQixRQUFRO01BQzVCLE1BQU0saUJBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7TUFDMUMsT0FBTyxRQUFRLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsWUFBWSxFQUFFLEtBQUssY0FBYyxDQUFDO0tBQ3RGLENBQUM7SUFDRixNQUFNLGlCQUFpQixTQUFTO01BQzlCLE1BQU0sa0JBQWtCLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO01BQ3hELE9BQU8sUUFBUTtRQUNiLElBQUksSUFBSSxJQUFJLElBQUksU0FBUyxFQUFFO1VBQ3pCLE1BQU0sV0FBVyxJQUFJLFNBQVMsWUFBWSxFQUFFLENBQUM7VUFDN0MsT0FBTyxVQUFVLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsT0FBTyxLQUFLLENBQUM7T0FDZCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sbUJBQW1CLGtCQUFrQjtNQUN6QyxNQUFNLFFBQVEsTUFBTSxZQUFZLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQzlDLE9BQU8sUUFBUTtRQUNiLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ3JCLE1BQU0sTUFBTSxJQUFJLGNBQWMsWUFBWSxDQUFDO1VBQzNDLElBQUksR0FBRyxFQUFFO1lBQ1AsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtjQUNyQyxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7Y0FDbEQsTUFBTSxXQUFXLFFBQVEsR0FBRyxRQUFRLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztjQUNuRSxJQUFJLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3pCLE9BQU8sSUFBSSxDQUFDO2VBQ2I7YUFDRjtXQUNGO1NBQ0Y7UUFDRCxPQUFPLEtBQUssQ0FBQztPQUNkLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxlQUFlLFlBQVk7TUFDL0IsT0FBTyxRQUFRO1FBQ2IsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7T0FDekQsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLG9CQUFvQix5QkFBeUI7TUFDakQsT0FBTyxRQUFRO1FBQ2IsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssU0FBUyxDQUFDO09BQ3ZFLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxZQUFZLFFBQVEsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbkYsTUFBTSxlQUFlLFFBQVEsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksYUFBYSxDQUFDLGdCQUFnQixDQUFDLEtBQUssS0FBSyxDQUFDO0lBQ2hHLE1BQU0sWUFBWSxRQUFRLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFFBQVEsS0FBSyxPQUFPLENBQUM7SUFDeEUsTUFBTSwwQkFBMEIsU0FBUztNQUN2QyxPQUFPLFFBQVE7UUFDYixJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUNyQixJQUFJLElBQUksZ0JBQWdCLEtBQUssS0FBSyxFQUFFO1lBQ2xDLE9BQU8sSUFBSSxDQUFDO1dBQ2I7VUFDRCxJQUFJLElBQUksYUFBYSxDQUFDLDBCQUEwQixDQUFDLEtBQUssS0FBSyxFQUFFO1lBQzNELE9BQU8sSUFBSSxDQUFDO1dBQ2I7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFDO09BQ2QsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLG9CQUFvQixjQUFjLENBQUM7TUFDdkMsVUFBVTtNQUNWLE9BQU87S0FDUixDQUFDLENBQUM7SUFDSCxNQUFNLFdBQVcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9CLE1BQU0sVUFBVSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsTUFBTSxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQixNQUFNLFlBQVksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sZUFBZSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsTUFBTSxxQkFBcUIsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sU0FBUyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsTUFBTSxRQUFRLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxNQUFNLDBCQUEwQix1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRSxNQUFNLDJCQUEyQix1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRSxNQUFNLGdCQUFnQixjQUFjLENBQUM7TUFDbkMsSUFBSTtNQUNKLElBQUk7S0FDTCxDQUFDLENBQUM7SUFDSCxNQUFNLHVCQUF1QixjQUFjLENBQUM7TUFDMUMsSUFBSTtNQUNKLElBQUk7TUFDSixTQUFTO0tBQ1YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxZQUFZLGNBQWMsQ0FBQztNQUMvQixPQUFPO01BQ1AsT0FBTztNQUNQLFFBQVE7TUFDUixPQUFPO0tBQ1IsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxlQUFlLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxNQUFNLFlBQVksYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sWUFBWSxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7O0lBRTNDLE1BQU0sWUFBWSxRQUFRLENBQUM7SUFDM0IsTUFBTSxPQUFPLE1BQU0sQ0FBQztJQUNwQixNQUFNLFdBQVcsUUFBUSxJQUFJLEtBQUssU0FBUyxDQUFDO0lBQzVDLE1BQU0sYUFBYSxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQzs7SUFFakQsTUFBTSxZQUFZLGNBQWM7TUFDOUIsTUFBTSxNQUFNLFdBQVc7UUFDckIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRTtVQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsR0FBRyxJQUFJLEdBQUcsY0FBYyxHQUFHLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQztTQUMzRTtRQUNELE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7T0FDckMsQ0FBQztNQUNGLE1BQU0sWUFBWSxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztNQUNsRyxNQUFNLE1BQU0sb0JBQW9CO1FBQzlCLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUU7VUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsY0FBYyxHQUFHLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQztTQUMvRTtRQUNELE9BQU8sSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO09BQy9CLENBQUM7TUFDRixPQUFPO1FBQ0wsR0FBRztRQUNILFNBQVM7UUFDVCxHQUFHO09BQ0osQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxRQUFRLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUMsTUFBTSxRQUFRLFdBQVcsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsTUFBTSxZQUFZLFdBQVcsS0FBSyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEQsTUFBTSxNQUFNLG9CQUFvQixLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7O0lBRTFELE1BQU0sU0FBUztNQUNiLFNBQVM7TUFDVCxPQUFPO01BQ1AsU0FBUztNQUNULEtBQUs7TUFDTCxJQUFJO01BQ0osWUFBWTtNQUNaLFFBQVE7TUFDUixNQUFNO01BQ04sVUFBVTtNQUNWLFFBQVE7TUFDUixRQUFRO01BQ1IsTUFBTTtNQUNOLE1BQU07TUFDTixLQUFLO01BQ0wsU0FBUztNQUNULFNBQVM7TUFDVCxNQUFNO01BQ04sR0FBRztNQUNILElBQUk7TUFDSixVQUFVO01BQ1YsSUFBSTtNQUNKLFFBQVE7TUFDUixTQUFTO01BQ1QsUUFBUTtNQUNSLFlBQVk7TUFDWixJQUFJO01BQ0osSUFBSTtNQUNKLElBQUk7TUFDSixJQUFJO01BQ0osSUFBSTtNQUNKLElBQUk7TUFDSixTQUFTO01BQ1QsS0FBSztNQUNMLEtBQUs7TUFDTCxXQUFXO01BQ1gsTUFBTTtNQUNOLEtBQUs7TUFDTCxJQUFJO01BQ0osSUFBSTtNQUNKLElBQUk7TUFDSixJQUFJO01BQ0osT0FBTztNQUNQLE9BQU87TUFDUCxPQUFPO01BQ1AsT0FBTztNQUNQLElBQUk7TUFDSixJQUFJO01BQ0osSUFBSTtNQUNKLFNBQVM7S0FDVixDQUFDO0lBQ0YsTUFBTSxhQUFhO01BQ2pCLElBQUk7TUFDSixJQUFJO0tBQ0wsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCO01BQ3BCLE9BQU87TUFDUCxPQUFPO01BQ1AsT0FBTztLQUNSLENBQUM7SUFDRixNQUFNLGFBQWE7TUFDakIsSUFBSTtNQUNKLElBQUk7TUFDSixJQUFJO01BQ0osSUFBSTtNQUNKLElBQUk7TUFDSixJQUFJO01BQ0osR0FBRztNQUNILEtBQUs7TUFDTCxTQUFTO01BQ1QsS0FBSztNQUNMLE1BQU07TUFDTixZQUFZO01BQ1osUUFBUTtNQUNSLEtBQUs7TUFDTCxVQUFVO01BQ1YsUUFBUTtNQUNSLFFBQVE7TUFDUixTQUFTO01BQ1QsU0FBUztNQUNULFFBQVE7TUFDUixPQUFPO01BQ1AsS0FBSztNQUNMLFFBQVE7S0FDVCxDQUFDO0lBQ0YsTUFBTSxXQUFXO01BQ2YsSUFBSTtNQUNKLElBQUk7TUFDSixJQUFJO01BQ0osSUFBSTtNQUNKLElBQUk7TUFDSixJQUFJO0tBQ0wsQ0FBQztJQUNGLE1BQU0sY0FBYztNQUNsQixJQUFJO01BQ0osSUFBSTtNQUNKLElBQUk7S0FDTCxDQUFDO0lBQ0YsTUFBTSxRQUFRO01BQ1osSUFBSTtNQUNKLElBQUk7TUFDSixJQUFJO0tBQ0wsQ0FBQztJQUNGLE1BQU0sYUFBYTtNQUNqQixLQUFLO01BQ0wsUUFBUTtNQUNSLFVBQVU7TUFDVixPQUFPO0tBQ1IsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuRCxNQUFNLGFBQWEsU0FBUztNQUMxQixJQUFJLE1BQU0sQ0FBQztNQUNYLE9BQU8sUUFBUTtRQUNiLFNBQVMsTUFBTSxHQUFHLE1BQU0sR0FBRyxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3RELE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztPQUNsQyxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sWUFBWSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsTUFBTSxZQUFZLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLE9BQU8sQ0FBQztJQUNqRCxNQUFNLGFBQWEsUUFBUSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakUsTUFBTSxTQUFTLFFBQVEsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUM7SUFDaEUsTUFBTSxnQkFBZ0IsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sU0FBUyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsTUFBTSxlQUFlLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM3QyxNQUFNLGlCQUFpQixVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDakQsTUFBTSxnQkFBZ0IsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sc0JBQXNCLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRCxNQUFNLHFCQUFxQixVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN6RCxNQUFNLGdCQUFnQixRQUFRLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7SUFFM0UsTUFBTSxvQkFBb0IsT0FBTztNQUMvQixNQUFNLFdBQVcsRUFBRSxDQUFDO01BQ3BCLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztNQUN0QixPQUFPLE9BQU8sRUFBRTtRQUNkLFFBQVEsS0FBSyxDQUFDLFlBQVksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDN0MsVUFBVSxPQUFPLFVBQVUsQ0FBQztPQUM3QjtNQUNELE9BQU8sUUFBUSxDQUFDO0tBQ2pCLENBQUM7SUFDRixNQUFNLG1CQUFtQixPQUFPO01BQzlCLE1BQU0sU0FBUyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ3RDLE1BQU0sTUFBTSxRQUFRLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQy9ELElBQUksTUFBTSxPQUFPLEtBQUssR0FBRyxPQUFPLEVBQUU7UUFDaEMsTUFBTSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztPQUN2QjtLQUNGLENBQUM7SUFDRixNQUFNLGtCQUFrQixNQUFNO01BQzVCLE1BQU0sS0FBSyxZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN0QyxLQUFLLENBQUMsRUFBRSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQ2pDLE9BQU8sRUFBRSxDQUFDO0tBQ1gsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLE9BQU87TUFDL0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ1gsUUFBUSxDQUFDLEdBQUcsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0tBQ2xDLENBQUM7SUFDRixNQUFNLHNCQUFzQixPQUFPO01BQ2pDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWE7UUFDL0IsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsd0JBQXdCO1VBQ2xELElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUMsb0JBQW9CLENBQUMsRUFBRTtZQUMxRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7V0FDckI7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sU0FBUyxTQUFTLENBQUM7SUFDekIsTUFBTSxXQUFXLFFBQVEsQ0FBQztJQUMxQixNQUFNLFNBQVMsVUFBVSxDQUFDOztJQUUxQixNQUFNLGNBQWMsV0FBVyxDQUFDO0lBQ2hDLE1BQU0sV0FBVyxRQUFRLENBQUM7SUFDMUIsTUFBTSwwQkFBMEIsUUFBUTtNQUN0QyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNsQixPQUFPLElBQUksV0FBVyxDQUFDO09BQ3hCO01BQ0QsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztLQUNqRSxDQUFDO0lBQ0YsTUFBTSx5QkFBeUIsUUFBUSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7SUFDN0UsTUFBTSxxQkFBcUIsUUFBUSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRyxNQUFNLGFBQWEsUUFBUSxJQUFJLFdBQVcsS0FBSyxJQUFJLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDO0lBQzFGLE1BQU0saUJBQWlCLGtCQUFrQjtNQUN2QyxJQUFJLEVBQUUsQ0FBQztNQUNQLE1BQU0sTUFBTSxDQUFDLEtBQUssSUFBSSxjQUFjLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDO01BQ2hGLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUM1QyxNQUFNLGFBQWEsSUFBSSxXQUFXLENBQUM7TUFDbkMsSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUNYLE1BQU0sVUFBVSxJQUFJLFlBQVksQ0FBQztRQUNqQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtVQUNyQixJQUFJLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQy9CLE9BQU8sT0FBTyxDQUFDO1dBQ2hCO1VBQ0QsSUFBSSwwQkFBMEIsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN2QyxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixPQUFPLE9BQU8sQ0FBQztXQUNoQjtTQUNGO1FBQ0QsSUFBSSxJQUFJLFlBQVksRUFBRTtVQUNwQixVQUFVLEtBQUssSUFBSSxJQUFJLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxVQUFVLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxZQUFZLENBQUMsQ0FBQztTQUM3RyxNQUFNO1VBQ0wsVUFBVSxLQUFLLElBQUksSUFBSSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsVUFBVSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDMUY7T0FDRixNQUFNO1FBQ0wsTUFBTSxVQUFVLElBQUksZ0JBQWdCLENBQUM7UUFDckMsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7VUFDckIsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMvQixPQUFPLE9BQU8sQ0FBQztXQUNoQjtVQUNELElBQUksd0JBQXdCLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDckMsT0FBTyxPQUFPLFVBQVUsQ0FBQyxPQUFPLEtBQUssT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQ25EO1NBQ0Y7UUFDRCxVQUFVLEtBQUssSUFBSSxJQUFJLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxVQUFVLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDakc7TUFDRCxPQUFPLFFBQVEsQ0FBQztLQUNqQixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsT0FBTztNQUM1QixNQUFNLFlBQVksR0FBRyxVQUFVLEVBQUUsQ0FBQztNQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sS0FBSyxDQUFDO09BQ2Q7TUFDRCxPQUFPLFNBQVMsS0FBSyxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxLQUFLLE1BQU0sSUFBSSxHQUFHLFVBQVUsRUFBRSxJQUFJLHNCQUFzQixDQUFDLFNBQVMsZ0JBQWdCLENBQUMsQ0FBQztLQUMvSCxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsT0FBTztNQUMzQixNQUFNLFlBQVksR0FBRyxVQUFVLEVBQUUsQ0FBQztNQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sS0FBSyxDQUFDO09BQ2Q7TUFDRCxPQUFPLFNBQVMsS0FBSyxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxNQUFNLElBQUksR0FBRyxRQUFRLEVBQUUsSUFBSSxzQkFBc0IsQ0FBQyxTQUFTLFlBQVksQ0FBQyxDQUFDO0tBQzdILENBQUM7SUFDRixNQUFNLGNBQWMsNkJBQTZCO01BQy9DLElBQUksRUFBRSxDQUFDO01BQ1AsTUFBTSxNQUFNLENBQUMsS0FBSyxJQUFJLGNBQWMsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUM7TUFDaEYsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQy9DLFNBQVMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sR0FBRyxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUM7TUFDdEUsU0FBUyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDaEQsU0FBUyxZQUFZLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzdDLE1BQU0sYUFBYSxJQUFJLFdBQVcsQ0FBQztNQUNuQyxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ1gsSUFBSSxJQUFJLFlBQVksRUFBRTtVQUNwQixVQUFVLEtBQUssSUFBSSxJQUFJLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxVQUFVLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxZQUFZLENBQUMsQ0FBQztTQUM5RyxNQUFNO1VBQ0wsVUFBVSxLQUFLLElBQUksSUFBSSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsVUFBVSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDM0Y7T0FDRixNQUFNO1FBQ0wsVUFBVSxLQUFLLElBQUksSUFBSSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsVUFBVSxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQ2xHO01BQ0QsT0FBTyxTQUFTLENBQUM7S0FDbEIsQ0FBQztJQUNGLE1BQU0sNkJBQTZCLFFBQVEsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQztJQUNyRixNQUFNLDJCQUEyQixRQUFRLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQztJQUN0RyxNQUFNLGNBQWMsT0FBTztNQUN6QixJQUFJLEVBQUUsQ0FBQztNQUNQLE1BQU0sTUFBTSxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO01BQzNDLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDbkMsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDckIsQ0FBQyxLQUFLLE1BQU0sV0FBVyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDdEY7S0FDRixDQUFDO0lBQ0YsTUFBTSwwQkFBMEIsa0JBQWtCO01BQ2hELElBQUksY0FBYyxJQUFJLGNBQWMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7UUFDbkUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVCLGNBQWMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNqRCxjQUFjLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakQsY0FBYyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QyxjQUFjLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakQsY0FBYyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5QyxPQUFPLGNBQWMsQ0FBQztPQUN2QjtNQUNELE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQztJQUNGLE1BQU0sK0JBQStCLFNBQVMsdUJBQXVCLENBQUMsS0FBSyxlQUFlLENBQUMsQ0FBQzs7SUFFNUYsTUFBTSwwQkFBMEIsdUJBQXVCLENBQUM7SUFDeEQsTUFBTSwyQkFBMkIsd0JBQXdCLENBQUM7SUFDMUQsTUFBTSxTQUFTLE1BQU0sQ0FBQztJQUN0QixNQUFNLFdBQVcsUUFBUSxDQUFDO0lBQzFCLE1BQU0sdUJBQXVCLGNBQWMsQ0FBQztNQUMxQyxRQUFRO01BQ1IsT0FBTztNQUNQLFVBQVU7S0FDWCxDQUFDLENBQUM7SUFDSCxNQUFNLGlCQUFpQixjQUFjLENBQUM7TUFDcEMsS0FBSztNQUNMLE9BQU87TUFDUCxVQUFVO01BQ1YsSUFBSTtNQUNKLFFBQVE7TUFDUixPQUFPO01BQ1AsT0FBTztNQUNQLFFBQVE7TUFDUixPQUFPO0tBQ1IsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDMUMsTUFBTSxxQkFBcUIsa0JBQWtCLENBQUM7SUFDOUMsTUFBTSxxQkFBcUIsUUFBUTtNQUNqQyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzVCLE9BQU8sS0FBSyxDQUFDO09BQ2Q7TUFDRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNsQixPQUFPLENBQUMsb0JBQW9CLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQztPQUMvQztNQUNELE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDbkcsQ0FBQztJQUNGLE1BQU0saUJBQWlCLFFBQVEsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksYUFBYSxDQUFDLGNBQWMsQ0FBQyxLQUFLLE1BQU0sQ0FBQztJQUNqRyxNQUFNLDhCQUE4QixRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BHLE1BQU0sZUFBZSxnQkFBZ0I7TUFDbkMsS0FBSyxJQUFJLFdBQVcsSUFBSSxXQUFXLEVBQUUsUUFBUSxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUUsV0FBVyxRQUFRLFdBQVcsRUFBRTtRQUNsRyxJQUFJLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxFQUFFO1VBQ3pDLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxFQUFFO1VBQ3JDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7T0FDRjtNQUNELE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQztJQUNGLE1BQU0sK0JBQStCLFFBQVE7TUFDM0MsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3RDLE9BQU8sS0FBSyxDQUFDO09BQ2Q7TUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCO1FBQ25FLE9BQU8sTUFBTSxJQUFJLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDO09BQy9DLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDWCxDQUFDO0lBQ0YsTUFBTSxhQUFhLFFBQVEsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLDRCQUE0QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RGLE1BQU0sNkJBQTZCLGdCQUFnQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDOztJQUV4RyxNQUFNLG1CQUFtQixjQUFjLENBQUM7SUFDeEMsTUFBTSxtQkFBbUIsUUFBUSxnQkFBZ0IsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdELE1BQU0sU0FBUyxRQUFRO01BQ3JCLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFO1FBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7VUFDaEIsT0FBTyxLQUFLLENBQUM7U0FDZDtPQUNGO01BQ0QsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSw0QkFBNEIsS0FBSyxXQUFXLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNyRSxNQUFNLGdCQUFnQixLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQztJQUNwRCxNQUFNLFlBQVksZUFBZSxHQUFHLEdBQUcsSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ2xHLE1BQU0sY0FBYyxPQUFPLFlBQVksQ0FBQyxFQUFFLG1CQUFtQixJQUFJLEVBQUUsaUJBQWlCLElBQUksS0FBSztNQUMzRixNQUFNLFdBQVcsTUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztNQUN4QyxNQUFNLGlCQUFpQixJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDckQsTUFBTSxTQUFTLEtBQUssQ0FBQyxjQUFjLEVBQUUsWUFBWTtRQUMvQyxJQUFJLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7VUFDOUMsSUFBSSxHQUFHLFVBQVUsSUFBSSxHQUFHLElBQUksS0FBSyxFQUFFLElBQUksZ0JBQWdCLElBQUksR0FBRyxJQUFJLE9BQU8sS0FBSyxjQUFjLE9BQU8sR0FBRyxDQUFDLElBQUksY0FBYyxJQUFJLFNBQVMsQ0FBQyxjQUFjLEVBQUUsR0FBRyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRTtZQUMxSyxPQUFPO2NBQ0wsV0FBVyxLQUFLO2NBQ2hCLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSTthQUNwQixDQUFDO1dBQ0gsTUFBTTtZQUNMLE9BQU87Y0FDTCxXQUFXLElBQUk7Y0FDZixLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUc7YUFDbkIsQ0FBQztXQUNIO1NBQ0YsTUFBTTtVQUNMLE9BQU87WUFDTCxXQUFXLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDM0IsS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDO1dBQ2pCLENBQUM7U0FDSDtPQUNGLEVBQUU7UUFDRCxXQUFXLEtBQUs7UUFDaEIsS0FBSyxFQUFFO09BQ1IsQ0FBQyxDQUFDO01BQ0gsT0FBTyxNQUFNLElBQUksQ0FBQztLQUNuQixDQUFDOztJQUVGLE1BQU0sOEJBQThCLG9CQUFvQjtNQUN0RCxNQUFNLGNBQWMsWUFBWSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDbkQsTUFBTSxZQUFZLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzdDLE9BQU8sVUFBVSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0tBQ2xFLENBQUM7SUFDRixNQUFNLGlCQUFpQixvQkFBb0I7TUFDekMsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksZ0JBQWdCLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztLQUN0RyxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsUUFBUTtNQUM1QixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQzNJLENBQUM7SUFDRixNQUFNLGNBQWMsb0JBQW9CO01BQ3RDLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDL0csQ0FBQztJQUNGLE1BQU0sYUFBYSxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNyRCxNQUFNLFlBQVksWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDakQsTUFBTSxhQUFhLGlCQUFpQixDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlELE1BQU0sY0FBYywyQkFBMkI7TUFDN0MsSUFBSSxVQUFVLENBQUMsQ0FBQztNQUNoQixJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUU7UUFDdkMsT0FBTyxLQUFLLENBQUM7T0FDZCxNQUFNO1FBQ0wsSUFBSSxPQUFPLFVBQVUsV0FBVyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLEVBQUU7VUFDVCxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsTUFBTSxTQUFTLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNuRCxHQUFHO1VBQ0QsSUFBSSxTQUFTLEVBQUU7WUFDYixJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtjQUNwQixPQUFPLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2NBQ3pCLFNBQVM7YUFDVjtZQUNELElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO2NBQ25CLE9BQU8sTUFBTSxLQUFLLEVBQUUsQ0FBQztjQUNyQixTQUFTO2FBQ1Y7V0FDRjtVQUNELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2hCLE9BQU8sRUFBRSxDQUFDO1lBQ1YsT0FBTyxNQUFNLEtBQUssRUFBRSxDQUFDO1lBQ3JCLFNBQVM7V0FDVjtVQUNELElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsRUFBRTtZQUNqQyxPQUFPLEtBQUssQ0FBQztXQUNkO1VBQ0QsT0FBTyxNQUFNLEtBQUssRUFBRSxDQUFDO1NBQ3RCLFFBQVEsSUFBSSxFQUFFO1FBQ2YsT0FBTyxPQUFPLElBQUksQ0FBQyxDQUFDO09BQ3JCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sWUFBWSxNQUFNLFlBQVksSUFBSSxLQUFLLFdBQVcsQ0FBQyxHQUFHLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQzs7SUFFN0UsTUFBTSx1QkFBdUIsZ0JBQWdCLENBQUM7SUFDOUMsTUFBTSxlQUFlLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRSxNQUFNLDRCQUE0QixPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sb0JBQW9CLGlDQUFpQztNQUN6RCxJQUFJLGFBQWEsQ0FBQyxXQUFXLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFO1FBQzVELFdBQVcsYUFBYSxDQUFDLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZELElBQUksV0FBVyxhQUFhLENBQUMsbUJBQW1CLENBQUMsS0FBSyxpQkFBaUIsRUFBRTtVQUN2RSxXQUFXLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLENBQUM7U0FDbEQ7UUFDRCxPQUFPLElBQUksQ0FBQztPQUNiLE1BQU07UUFDTCxXQUFXLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDbEQsT0FBTyxLQUFLLENBQUM7T0FDZDtLQUNGLENBQUM7SUFDRixNQUFNLDZCQUE2QixtQkFBbUI7TUFDcEQsTUFBTSxzQkFBc0IseUJBQXlCLENBQUMsTUFBTSx1QkFBdUIsRUFBRSxDQUFDLENBQUM7TUFDdkYsTUFBTSxpQkFBaUIseUJBQXlCLENBQUMsTUFBTSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7TUFDNUUsT0FBTyxRQUFRLENBQUMsS0FBSyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLGVBQWUsaUJBQWlCLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7S0FDN0gsQ0FBQztJQUNGLE1BQU0sV0FBVyxrQkFBa0I7TUFDakMsSUFBSSxFQUFFLENBQUM7TUFDUCxNQUFNLG9CQUFvQixRQUFRLEdBQUcsV0FBVyxHQUFHLFlBQVksQ0FBQztNQUNoRSxLQUFLLElBQUksUUFBUSxFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFBRTtRQUMvRSxJQUFJLFNBQVMsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1VBQzFDLENBQUMsS0FBSyxLQUFLLFdBQVcsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1VBQ25GLE9BQU87U0FDUjtPQUNGO0tBQ0YsQ0FBQztJQUNGLE1BQU0sVUFBVSx5QkFBeUI7TUFDdkMsTUFBTSxRQUFRLFFBQVEsWUFBWSxFQUFFLENBQUM7TUFDckMsTUFBTSxhQUFhLFNBQVMsV0FBVyxDQUFDO01BQ3hDLElBQUksVUFBVSxFQUFFO1FBQ2QsS0FBSyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEMsS0FBSyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsTUFBTSxpQkFBaUIsS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO1FBQy9DLFFBQVEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDL0IsS0FBSyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUIsS0FBSyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0IsTUFBTSxnQkFBZ0IsS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFO1VBQ3BELFVBQVUsYUFBYSxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUNwRDtRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtVQUM5QyxVQUFVLGFBQWEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDOUM7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUU7VUFDbkQsVUFBVSxhQUFhLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsVUFBVSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7T0FDbkM7S0FDRixDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsc0NBQXNDO01BQ2pFLE1BQU0saUJBQWlCLE1BQU0saUJBQWlCLEVBQUUsQ0FBQztNQUNqRCxNQUFNLFdBQVcsWUFBWSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDN0MsTUFBTSxVQUFVLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLGNBQWMsQ0FBQztNQUNqRCxNQUFNLFNBQVMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQ3RDLE1BQU0sQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxvQkFBb0I7UUFDdkQsVUFBVSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWU7VUFDaEUsTUFBTSxrQkFBa0IsUUFBUSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDM0gsSUFBSSxlQUFlLE9BQU8sR0FBRyxDQUFDLEVBQUU7WUFDOUIsTUFBTSxhQUFhLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsZUFBZSxFQUFFLFNBQVM7Y0FDL0IsVUFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlO2dCQUNyRCxPQUFPLENBQUMsV0FBVyxJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQztlQUNyQyxDQUFDLENBQUM7YUFDSixDQUFDLENBQUM7WUFDSCxVQUFVLEtBQUssQ0FBQyxTQUFTLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7V0FDekU7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSx3QkFBd0Isc0NBQXNDO01BQ2xFLE1BQU0sQ0FBQztRQUNMLEdBQUcsaUJBQWlCO1FBQ3BCLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtPQUNwRCxFQUFFLFNBQVMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLFNBQVMsWUFBWSxFQUFFLENBQUMsRUFBRSxPQUFPO1FBQ2hHLElBQUksbUJBQW1CLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUU7VUFDeEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2I7T0FDRixDQUFDLENBQUMsQ0FBQztLQUNMLENBQUM7SUFDRixNQUFNLGlCQUFpQixtQkFBbUI7TUFDeEMsTUFBTSxvQkFBb0IsMEJBQTBCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQ3BFLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztNQUN2RCxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7S0FDekQsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLG9CQUFvQjtNQUN4QyxJQUFJLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRTtRQUN4QyxNQUFNLGlCQUFpQix5QkFBeUIsQ0FBQyxNQUFNLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUM1RSxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7T0FDM0M7S0FDRixDQUFDO0lBQ0YsTUFBTSxjQUFjLCtCQUErQjtNQUNqRCxNQUFNLFNBQVMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDeEQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztNQUNyRSxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsU0FBUyxjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztLQUM3SSxDQUFDO0lBQ0YsTUFBTSxlQUFlLE1BQU0sRUFBRSxhQUFhLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNqRSxNQUFNLDJCQUEyQixrQkFBa0IsS0FBSyxDQUFDLE1BQU0sdUJBQXVCLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRyxNQUFNLHVCQUF1QixrQkFBa0IsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxJQUFJLFNBQVMsQ0FBQyxDQUFDO0lBQ3BILE1BQU0scUJBQXFCLGtCQUFrQixvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RHLE1BQU0sc0JBQXNCLGtCQUFrQixvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEcsTUFBTSx3QkFBd0Isa0JBQWtCLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDOztJQUU1SixNQUFNLFlBQVksUUFBUSxFQUFFLFFBQVEsQ0FBQztJQUNyQyxNQUFNLGVBQWUsU0FBUyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sd0JBQXdCLE9BQU87TUFDbkMsSUFBSSxTQUFTLFVBQVUsRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxPQUFPLEVBQUU7UUFDbEQsT0FBTyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPO1VBQ2pELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsQ0FBQztTQUNoQyxDQUFDLEtBQUssQ0FBQyxXQUFXO1VBQ2pCLE9BQU8sWUFBWSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUNyRCxNQUFNLFVBQVUsSUFBSSxJQUFJLFVBQVUsQ0FBQztZQUNuQyxNQUFNLGFBQWEsT0FBTyxJQUFJLFVBQVUsQ0FBQztZQUN6QyxNQUFNLGdCQUFnQixPQUFPLElBQUksYUFBYSxDQUFDO1lBQy9DLE9BQU8sT0FBTyxJQUFJLFVBQVUsR0FBRyxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7V0FDbkQsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDYixNQUFNO1FBQ0wsT0FBTyxDQUFDLENBQUM7T0FDVjtLQUNGLENBQUM7SUFDRixNQUFNLFdBQVcsZ0JBQWdCLEdBQUcsU0FBUyxJQUFJLFVBQVUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRixNQUFNLFNBQVMsd0JBQXdCO01BQ3JDLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDakIsTUFBTSxNQUFNLElBQUksY0FBYyxDQUFDO01BQy9CLFVBQVUsT0FBTyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUM7TUFDbkMsSUFBSSxHQUFHLEVBQUU7UUFDUCxJQUFJLE9BQU8sS0FBSyxJQUFJLElBQUksR0FBRyxzQkFBc0IsSUFBSSxLQUFLLENBQUMsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxDQUFDLEtBQUssUUFBUSxFQUFFO1VBQy9HLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixFQUFFLENBQUM7VUFDeEMsSUFBSSxHQUFHLEtBQUssSUFBSSxHQUFHLGdCQUFnQixXQUFXLElBQUksSUFBSSxXQUFXLENBQUMsR0FBRyxHQUFHLGdCQUFnQixXQUFXLENBQUM7VUFDcEcsSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLGdCQUFnQixVQUFVLElBQUksSUFBSSxVQUFVLENBQUMsR0FBRyxHQUFHLGdCQUFnQixVQUFVLENBQUM7VUFDaEcsT0FBTztZQUNMLENBQUM7WUFDRCxDQUFDO1dBQ0YsQ0FBQztTQUNIO1FBQ0QsSUFBSSxlQUFlLEdBQUcsQ0FBQztRQUN2QixPQUFPLFlBQVksSUFBSSxZQUFZLEtBQUssT0FBTyxJQUFJLFlBQVksU0FBUyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsRUFBRTtVQUM1RyxNQUFNLG1CQUFtQixZQUFZLENBQUM7VUFDdEMsS0FBSyxnQkFBZ0IsV0FBVyxJQUFJLENBQUMsQ0FBQztVQUN0QyxLQUFLLGdCQUFnQixVQUFVLElBQUksQ0FBQyxDQUFDO1VBQ3JDLGVBQWUsZ0JBQWdCLGFBQWEsQ0FBQztTQUM5QztRQUNELGVBQWUsR0FBRyxXQUFXLENBQUM7UUFDOUIsT0FBTyxZQUFZLElBQUksWUFBWSxLQUFLLE9BQU8sSUFBSSxZQUFZLFNBQVMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLEVBQUU7VUFDNUcsS0FBSyxZQUFZLFdBQVcsSUFBSSxDQUFDLENBQUM7VUFDbEMsS0FBSyxZQUFZLFVBQVUsSUFBSSxDQUFDLENBQUM7VUFDakMsZUFBZSxZQUFZLFdBQVcsQ0FBQztTQUN4QztRQUNELEtBQUsscUJBQXFCLENBQUMsWUFBWSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztPQUN2RDtNQUNELE9BQU87UUFDTCxDQUFDO1FBQ0QsQ0FBQztPQUNGLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sbUJBQW1CLHVCQUF1QixXQUFXLEVBQUUsS0FBSztNQUNoRSxJQUFJLFVBQVUsQ0FBQyxDQUFDO01BQ2hCLE1BQU0sZUFBZSxFQUFFLENBQUM7TUFDeEIsTUFBTSxPQUFPLFlBQVksUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7TUFDeEQsTUFBTSxNQUFNLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNsQyxNQUFNLHFCQUFxQixrQkFBa0I7UUFDM0MsUUFBUSxlQUFlLEdBQUcsY0FBYyxDQUFDO09BQzFDLENBQUM7TUFDRixNQUFNLHFCQUFxQixrQkFBa0I7UUFDM0MsUUFBUSxlQUFlLEdBQUcsY0FBYyxDQUFDO09BQzFDLENBQUM7TUFDRixNQUFNLFdBQVcsV0FBVztRQUMxQixRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7T0FDNUMsQ0FBQztNQUNGLE1BQU0sY0FBYyxNQUFNO1FBQ3hCLE1BQU0saUJBQWlCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLFVBQVUsQ0FBQyxjQUFjLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7T0FDckQsQ0FBQztNQUNGLE1BQU0sbUJBQW1CLE9BQU8sS0FBSyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLE9BQU87UUFDekUsSUFBSSxPQUFPLEdBQUcsT0FBTyxFQUFFO1FBQ3ZCLFFBQVEsRUFBRTtRQUNWLFFBQVEsRUFBRTtRQUNWLE9BQU8sQ0FBQztPQUNULENBQUMsQ0FBQyxDQUFDO01BQ0osTUFBTSxPQUFPLE9BQU8sSUFBSSxPQUFPLENBQUMsc0JBQXNCO1FBQ3BELElBQUksSUFBSSxDQUFDO1FBQ1QsTUFBTSxnQkFBZ0IsS0FBSyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqRCxNQUFNLFFBQVEsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNwQyxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ2QsTUFBTSxVQUFVLHVCQUF1QjtVQUNyQyxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1VBQ3hCLEtBQUssT0FBTyxHQUFHLE1BQU0sQ0FBQztVQUN0QixLQUFLLE9BQU8sR0FBRyxFQUFFLENBQUM7VUFDbEIsS0FBSyxPQUFPLEdBQUcsRUFBRSxDQUFDO1VBQ2xCLElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ25CLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztZQUNwQixPQUFPLElBQUksQ0FBQztXQUNiO1NBQ0YsQ0FBQztRQUNGLE1BQU0sU0FBUyxNQUFNLE9BQU8sQ0FBQyxLQUFLLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5QyxNQUFNLFNBQVMsTUFBTSxPQUFPLENBQUMsS0FBSyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUMsSUFBSSxPQUFPLEVBQUU7VUFDWCxLQUFLLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxPQUFPLEVBQUU7VUFDWCxLQUFLLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxLQUFLLE9BQU8sS0FBSyxDQUFDLEVBQUU7VUFDdEIsT0FBTztTQUNSO1FBQ0QsSUFBSSxLQUFLLE9BQU8sS0FBSyxDQUFDLEVBQUU7VUFDdEIsTUFBTSxFQUFFLENBQUM7VUFDVCxPQUFPO1NBQ1I7UUFDRCxJQUFJLEtBQUssT0FBTyxLQUFLLENBQUMsRUFBRTtVQUN0QixNQUFNLEVBQUUsQ0FBQztVQUNULE9BQU87U0FDUjtRQUNELEtBQUssT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNqQixNQUFNLFdBQVcsWUFBWSxRQUFRLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDdkQsUUFBUSxDQUFDLFFBQVEsRUFBRTtVQUNqQixLQUFLLFlBQVk7VUFDakIsTUFBTSxVQUFVO1VBQ2hCLElBQUksS0FBSyxHQUFHO1NBQ2IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxRQUFRLGVBQWUsRUFBRTtVQUMzQixLQUFLLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUM3QztRQUNELElBQUksUUFBUSxlQUFlLEVBQUU7VUFDM0IsS0FBSyxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLGVBQWUsQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsT0FBTyxRQUFRLElBQUksQ0FBQztRQUNwQixJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuQixLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztPQUN4QyxDQUFDLENBQUM7TUFDSCxNQUFNLFVBQVUsUUFBUTtRQUN0QixNQUFNLGFBQWEsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RixPQUFPLFVBQVUsS0FBSyxDQUFDLFdBQVc7VUFDaEMsTUFBTSxRQUFRLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sS0FBSyxXQUFXLENBQUMsQ0FBQztVQUNsRSxJQUFJLEtBQUssS0FBSyxPQUFPLEdBQUcsQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxFQUFFLFVBQVUsTUFBTSxPQUFPLENBQUMsQ0FBQyxDQUFDO1dBQ25FLE1BQU07WUFDTCxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssRUFBRSxVQUFVLE1BQU0sTUFBTSxDQUFDLENBQUM7V0FDbEQ7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxTQUFTLE9BQU87UUFDcEIsTUFBTSxnQkFBZ0IsS0FBSyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqRCxLQUFLLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsU0FBUztVQUMvQyxNQUFNLFFBQVEsRUFBRSxLQUFLLE1BQU0sQ0FBQztVQUM1QixJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7WUFDZixPQUFPLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNuQyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztXQUN2QjtTQUNGLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLFlBQVksUUFBUTtRQUN4QixNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU87VUFDbEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2IsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE9BQU87UUFDTCxJQUFJO1FBQ0osT0FBTztRQUNQLE1BQU07UUFDTixTQUFTO1FBQ1Qsa0JBQWtCO1FBQ2xCLGtCQUFrQjtPQUNuQixDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLFdBQVcsTUFBTTtNQUNyQixNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztNQUMxQixNQUFNLGFBQWEsZ0NBQWdDO1FBQ2pELE1BQU0sT0FBTyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMzQyxNQUFNLFVBQVUsSUFBSSxJQUFJLENBQUM7UUFDekIsT0FBTyxRQUFRLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTTtVQUN0RCxNQUFNLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1VBQy9DLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztVQUNyQixPQUFPLEVBQUUsQ0FBQztTQUNYLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7S0FDdkIsQ0FBQztJQUNGLE1BQU0sV0FBVyxRQUFRLEVBQUUsQ0FBQzs7SUFFNUIsTUFBTSxTQUFTLFFBQVEsSUFBSSxTQUFTLFlBQVksRUFBRSxLQUFLLE1BQU0sQ0FBQztJQUM5RCxNQUFNLGtCQUFrQixnQkFBZ0IsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuSSxNQUFNLDRCQUE0QixnQkFBZ0I7TUFDaEQsTUFBTSxPQUFPLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQ3ZELE1BQU0sT0FBTyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUN2RCxNQUFNLGVBQWUsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDdEUsTUFBTSxlQUFlLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ3RFLE9BQU8sWUFBWSxJQUFJLFlBQVksQ0FBQztLQUNyQyxDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxhQUFhLENBQUMsZUFBZSxDQUFDLEtBQUssVUFBVSxDQUFDO0lBQ25HLE1BQU0saUJBQWlCLGdCQUFnQixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLE9BQU8sR0FBRyxDQUFDLElBQUkseUJBQXlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZILE1BQU0sZ0JBQWdCLFFBQVEsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksV0FBVyxPQUFPLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNyRixNQUFNLGFBQWEsUUFBUSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUUsTUFBTSxXQUFXLHFCQUFxQjtNQUNwQyxJQUFJLEVBQUUsQ0FBQztNQUNQLE1BQU0sV0FBVyxJQUFJLElBQUksSUFBSSxDQUFDO01BQzlCLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFO1FBQy9DLE9BQU8sSUFBSSxDQUFDO09BQ2I7TUFDRCxNQUFNLFdBQVcsSUFBSSxXQUFXLENBQUM7TUFDakMsS0FBSyxJQUFJLElBQUksUUFBUSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0MsUUFBUSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7T0FDdEM7TUFDRCxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNyQixNQUFNLGtCQUFrQixJQUFJLFdBQVcsQ0FBQztRQUN4QyxJQUFJLGVBQWUsT0FBTyxLQUFLLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtVQUN4RSxDQUFDLEtBQUssSUFBSSxXQUFXLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDdkc7T0FDRjtNQUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsRUFBRTtRQUNoSCxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUNsQjtNQUNELE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQzs7SUFFRixNQUFNLFlBQVksS0FBSyxRQUFRLENBQUM7SUFDaEMsTUFBTSxtQkFBbUIseUVBQXlFLENBQUM7SUFDbkcsTUFBTSxrQkFBa0IsaUVBQWlFLENBQUM7SUFDMUYsTUFBTSxpQkFBaUIsWUFBWSxDQUFDO0lBQ3BDLE1BQU0sZUFBZSxpQ0FBaUMsQ0FBQztJQUN2RCxNQUFNLFdBQVc7TUFDZixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7TUFDYixLQUFLLFFBQVE7S0FDZCxDQUFDO0lBQ0YsTUFBTSxlQUFlO01BQ25CLEtBQUssUUFBUTtNQUNiLE1BQU0sT0FBTztNQUNiLEtBQUssTUFBTTtNQUNYLEtBQUssTUFBTTtNQUNYLEtBQUssT0FBTztNQUNaLEtBQUssT0FBTztLQUNiLENBQUM7SUFDRixNQUFNLGtCQUFrQjtNQUN0QixRQUFRLEdBQUc7TUFDWCxRQUFRLEdBQUc7TUFDWCxTQUFTLEdBQUc7TUFDWixVQUFVLEdBQUc7TUFDYixVQUFVLENBQUMsQ0FBQyxDQUFDO0tBQ2QsQ0FBQztJQUNGLE1BQU0sZUFBZSxRQUFRO01BQzNCLE1BQU0sTUFBTSxZQUFZLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO01BQzVDLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQztNQUNyQixPQUFPLEdBQUcsWUFBWSxJQUFJLEdBQUcsVUFBVSxJQUFJLElBQUksQ0FBQztLQUNqRCxDQUFDO0lBQ0YsTUFBTSxzQkFBc0Isa0JBQWtCO01BQzVDLE1BQU0sU0FBUyxFQUFFLENBQUM7TUFDbEIsSUFBSSxLQUFLLEVBQUU7UUFDVCxNQUFNLFdBQVcsS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEMsUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3BCLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUU7VUFDM0MsTUFBTSxNQUFNLE1BQU0sYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztVQUM5RCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RCLE1BQU0sU0FBUyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDM0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUNyQixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO1dBQ3RCO1NBQ0Y7UUFDRCxPQUFPLE1BQU0sQ0FBQztPQUNmLE1BQU07UUFDTCxPQUFPLFNBQVMsQ0FBQztPQUNsQjtLQUNGLENBQUM7SUFDRixNQUFNLGdCQUFnQixtQkFBbUIsQ0FBQyxzRkFBc0YsR0FBRywwRkFBMEYsR0FBRyw2RkFBNkYsR0FBRyx1RkFBdUYsR0FBRyw2RkFBNkYsR0FBRyx3RkFBd0YsR0FBRyw4RkFBOEYsR0FBRyxnR0FBZ0csR0FBRyw4RkFBOEYsR0FBRywyRkFBMkYsR0FBRyx3RkFBd0YsR0FBRyxzRkFBc0YsR0FBRyx5RkFBeUYsR0FBRyx5RkFBeUYsR0FBRywyRkFBMkYsR0FBRyw4RkFBOEYsR0FBRyw2RkFBNkYsR0FBRyxnR0FBZ0csR0FBRyxtR0FBbUcsR0FBRyxtR0FBbUcsR0FBRyxtR0FBbUcsR0FBRyxrR0FBa0csR0FBRyxrR0FBa0csR0FBRyxxR0FBcUcsR0FBRyxzREFBc0QsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0MkUsTUFBTSxZQUFZLGdCQUFnQixJQUFJLFFBQVEsQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLEdBQUcsZUFBZSxFQUFFLE9BQU87TUFDL0YsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDO0tBQ2pDLENBQUMsQ0FBQztJQUNILE1BQU0sZUFBZSxRQUFRLENBQUMsRUFBRSxHQUFHLElBQUksU0FBUyxDQUFDLGNBQWMsRUFBRSxPQUFPO01BQ3RFLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztLQUNqQyxDQUFDLENBQUM7SUFDSCxNQUFNLGdCQUFnQixnQkFBZ0IsSUFBSSxRQUFRLENBQUMsSUFBSSxHQUFHLGdCQUFnQixHQUFHLGVBQWUsRUFBRSxPQUFPO01BQ25HLElBQUksR0FBRyxPQUFPLEdBQUcsQ0FBQyxFQUFFO1FBQ2xCLE9BQU8sSUFBSSxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7T0FDaEc7TUFDRCxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQzVELENBQUMsQ0FBQztJQUNILE1BQU0sY0FBYywwQkFBMEI7TUFDNUMsTUFBTSxrQkFBa0IsUUFBUSxJQUFJLGFBQWEsQ0FBQztNQUNsRCxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsR0FBRyxlQUFlLEVBQUUsT0FBTztRQUNwRSxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDO09BQ3pELENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGdCQUFnQixvQkFBb0I7TUFDeEMsTUFBTSxjQUFjLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxJQUFJLGFBQWEsQ0FBQztNQUNuRSxNQUFNLHdCQUF3QixnQkFBZ0IsSUFBSSxRQUFRLENBQUMsSUFBSSxHQUFHLGdCQUFnQixHQUFHLGVBQWUsRUFBRSxPQUFPO1FBQzNHLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsRUFBRTtVQUNuQyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMxQjtRQUNELElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsRUFBRTtVQUNsQyxPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN6QjtRQUNELElBQUksR0FBRyxPQUFPLEdBQUcsQ0FBQyxFQUFFO1VBQ2xCLE9BQU8sSUFBSSxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7U0FDaEc7UUFDRCxPQUFPLElBQUksR0FBRyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7T0FDdkMsQ0FBQyxDQUFDO01BQ0gsTUFBTSxvQkFBb0IsZ0JBQWdCO1FBQ3hDLE9BQU8sV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7T0FDN0MsQ0FBQztNQUNGLE1BQU0sVUFBVSxTQUFTLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDcEQsSUFBSSxPQUFPLE1BQU0sSUFBSSxPQUFPLFFBQVEsRUFBRTtRQUNwQyxPQUFPLHFCQUFxQixDQUFDO09BQzlCO01BQ0QsSUFBSSxPQUFPLE1BQU0sRUFBRTtRQUNqQixJQUFJLFFBQVEsRUFBRTtVQUNaLE9BQU8saUJBQWlCLENBQUM7U0FDMUI7UUFDRCxPQUFPLFdBQVcsQ0FBQztPQUNwQjtNQUNELElBQUksT0FBTyxRQUFRLEVBQUU7UUFDbkIsT0FBTyxhQUFhLENBQUM7T0FDdEI7TUFDRCxPQUFPLFNBQVMsQ0FBQztLQUNsQixDQUFDO0lBQ0YsTUFBTSxTQUFTLFFBQVEsSUFBSSxRQUFRLENBQUMsWUFBWSxFQUFFLGtCQUFrQjtNQUNsRSxJQUFJLE9BQU8sRUFBRTtRQUNYLElBQUksT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxLQUFLLEdBQUcsRUFBRTtVQUMzQyxVQUFVLFFBQVEsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUMzQyxNQUFNO1VBQ0wsVUFBVSxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ2pDO1FBQ0QsSUFBSSxPQUFPLEdBQUcsS0FBSyxFQUFFO1VBQ25CLFdBQVcsS0FBSyxDQUFDO1VBQ2pCLE9BQU8sTUFBTSxhQUFhLENBQUMsS0FBSyxJQUFJLE9BQU8sSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDL0U7UUFDRCxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztPQUMxRDtNQUNELE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDeEUsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxXQUFXO01BQ2YsU0FBUztNQUNULFlBQVk7TUFDWixhQUFhO01BQ2IsV0FBVztNQUNYLGFBQWE7TUFDYixNQUFNO0tBQ1AsQ0FBQzs7SUFFRixNQUFNLFVBQVUsa0JBQWtCO01BQ2hDLFFBQVEsS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDMUIsT0FBTyxLQUFLLEdBQUcsS0FBSyxNQUFNLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUMvQyxDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsT0FBTyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDOztJQUV0RixNQUFNLDJCQUEyQixTQUFTO01BQ3hDLE1BQU0sc0JBQXNCLFlBQVksQ0FBQztNQUN6QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLFFBQVE7UUFDekMsTUFBTSxVQUFVLG1CQUFtQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsSUFBSSxPQUFPLEVBQUU7VUFDWCxNQUFNLFNBQVMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQztVQUNsQyxNQUFNLFlBQVksTUFBTSxHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7VUFDMUMsTUFBTSxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUN4QixPQUFPLENBQUM7Y0FDSixNQUFNO2NBQ04sU0FBUztjQUNULElBQUk7YUFDTCxDQUFDLENBQUM7U0FDTixNQUFNO1VBQ0wsT0FBTyxFQUFFLENBQUM7U0FDWDtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSwwQkFBMEIsUUFBUTtNQUN0QyxJQUFJLGdCQUFnQixFQUFFLFlBQVksQ0FBQztNQUNuQyxJQUFJLGVBQWUsRUFBRSxXQUFXLENBQUM7TUFDakMsbUJBQW1CLHVEQUF1RCxDQUFDO01BQzNFLGVBQWUscUZBQXFGLENBQUM7TUFDckcsa0JBQWtCLCtFQUErRSxHQUFHLDZFQUE2RSxHQUFHLCtCQUErQixDQUFDO01BQ3BOLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRTtRQUNwQixNQUFNLHFCQUFxQixzQkFBc0IsQ0FBQztRQUNsRCxvQkFBb0Isa0RBQWtELEdBQUcsNkJBQTZCLENBQUM7UUFDdkcsZ0JBQWdCLDZFQUE2RSxHQUFHLGtCQUFrQixDQUFDO1FBQ25ILG1CQUFtQiwyREFBMkQsR0FBRyx5Q0FBeUMsQ0FBQztPQUM1SDtNQUNELElBQUksSUFBSSxLQUFLLGNBQWMsRUFBRTtRQUMzQixvQkFBb0IsV0FBVyxDQUFDO1FBQ2hDLE1BQU0sdUJBQXVCLDRDQUE0QyxDQUFDO1FBQzFFLGtCQUFrQjtVQUNoQixlQUFlO1VBQ2Ysb0JBQW9CO1NBQ3JCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNaLE1BQU0sb0JBQW9CLDZCQUE2QixDQUFDO1FBQ3hELGVBQWU7VUFDYixZQUFZO1VBQ1osaUJBQWlCO1NBQ2xCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNaLGNBQWM7VUFDWixZQUFZO1VBQ1osZUFBZTtTQUNoQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDYjtNQUNELGNBQWMsV0FBVyxJQUFJO1FBQzNCLFlBQVk7UUFDWixlQUFlO09BQ2hCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNaLE9BQU87UUFDTCxnQkFBZ0I7UUFDaEIsWUFBWTtRQUNaLGVBQWU7UUFDZixXQUFXO09BQ1osQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxhQUFhLFFBQVE7TUFDekIsTUFBTSxnREFBZ0QsR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN2RixNQUFNLFNBQVMsRUFBRSxDQUFDO01BQ2xCLE1BQU0sTUFBTSxPQUFPLGFBQWEsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLO1FBQ3BELE1BQU0sYUFBYSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckMsTUFBTSxRQUFRLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssS0FBSyxPQUFPLENBQUM7UUFDdEIsT0FBTyxFQUFFLEVBQUUsRUFBRTtVQUNYLE1BQU0sa0JBQWtCLE9BQU8sQ0FBQztZQUM5QixnQkFBZ0I7WUFDaEIsVUFBVTtXQUNYLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1VBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHO1lBQ2xCLFlBQVksV0FBVyxDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEQsZUFBZTtZQUNmLFVBQVUsV0FBVyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7V0FDaEQsQ0FBQztTQUNIO09BQ0YsQ0FBQztNQUNGLE1BQU0sV0FBVyxzQkFBc0I7UUFDckMsTUFBTSxRQUFRLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixNQUFNLFFBQVEsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksS0FBSyxLQUFLLE9BQU8sQ0FBQztRQUN0QixPQUFPLEVBQUUsRUFBRSxFQUFFO1VBQ1gsTUFBTSxhQUFhLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztVQUNyQyxLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVDLFVBQVUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNyQyxVQUFVLGdCQUFnQixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDM0M7U0FDRjtPQUNGLENBQUM7TUFDRixJQUFJLElBQUksS0FBSyxjQUFjLEVBQUU7UUFDM0IsTUFBTSx1QkFBdUIsNENBQTRDLENBQUM7UUFDMUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLFFBQVE7VUFDNUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUM7U0FDaEMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxvQkFBb0IsNkJBQTZCLENBQUM7UUFDeEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVE7VUFDekMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDNUIsQ0FBQyxDQUFDO09BQ0o7TUFDRCxHQUFHLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztNQUNyQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxvREFBb0QsQ0FBQyxDQUFDO01BQ3RFLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO01BQzVCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7TUFDM0IsR0FBRyxDQUFDLE1BQU0sRUFBRSw2Q0FBNkMsQ0FBQyxDQUFDO01BQzNELEdBQUcsQ0FBQyxNQUFNLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztNQUMvQyxHQUFHLENBQUMsT0FBTyxFQUFFLG1CQUFtQixDQUFDLENBQUM7TUFDbEMsR0FBRyxDQUFDLFFBQVEsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO01BQzlDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsbUVBQW1FLEdBQUcseUVBQXlFLEdBQUcsaURBQWlELEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDOU4sR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDL0IsR0FBRyxDQUFDLG9CQUFvQixFQUFFLEVBQUUsRUFBRSxJQUFJLEtBQUssT0FBTyxHQUFHLGVBQWUsR0FBRyxXQUFXLENBQUMsQ0FBQztNQUNoRixHQUFHLENBQUMseUdBQXlHLEVBQUUsRUFBRSxFQUFFLGVBQWUsQ0FBQyxDQUFDO01BQ3BJLEdBQUcsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO01BQ3ZDLEdBQUcsQ0FBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDdkMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDcEIsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDaEMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDdkIsR0FBRyxDQUFDLEdBQUcsRUFBRSxxQ0FBcUMsRUFBRSxJQUFJLEtBQUssT0FBTyxHQUFHLGVBQWUsR0FBRyxXQUFXLENBQUMsQ0FBQztNQUNsRyxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztNQUNsQyxHQUFHLENBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQztNQUM3QyxHQUFHLENBQUMsS0FBSyxFQUFFLGdEQUFnRCxDQUFDLENBQUM7TUFDN0QsR0FBRyxDQUFDLFFBQVEsRUFBRSx1QkFBdUIsRUFBRSxXQUFXLENBQUMsQ0FBQztNQUNwRCxHQUFHLENBQUMsT0FBTyxFQUFFLHVCQUF1QixDQUFDLENBQUM7TUFDdEMsR0FBRyxDQUFDLFFBQVEsRUFBRSx1REFBdUQsRUFBRTtRQUNyRSxXQUFXO1FBQ1gsT0FBTztPQUNSLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ2IsR0FBRyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztNQUMzQixHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtRQUNqQixXQUFXO1FBQ1gsTUFBTTtPQUNQLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ2IsR0FBRyxDQUFDLE1BQU0sRUFBRSxzREFBc0QsQ0FBQyxDQUFDO01BQ3BFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLHVDQUF1QyxJQUFJLElBQUksS0FBSyxPQUFPLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDbkcsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDL0IsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztNQUNuQixHQUFHLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ25DLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQ3ZCLEdBQUcsQ0FBQyxJQUFJLEVBQUUseUJBQXlCLEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDbEQsR0FBRyxDQUFDLElBQUksRUFBRSxvQ0FBb0MsRUFBRSxXQUFXLENBQUMsQ0FBQztNQUM3RCxHQUFHLENBQUMsTUFBTSxFQUFFLDBFQUEwRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO01BQ3JHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsb0JBQW9CLEVBQUU7UUFDcEMsV0FBVztRQUNYLFFBQVE7T0FDVCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUNiLEdBQUcsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDO01BQzFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUseUdBQXlHLEdBQUcsaUhBQWlILENBQUMsQ0FBQztNQUM1TyxHQUFHLENBQUMsUUFBUSxFQUFFLDJGQUEyRixFQUFFLElBQUksS0FBSyxPQUFPLEdBQUcsV0FBVyxHQUFHLGVBQWUsQ0FBQyxDQUFDO01BQzdKLEdBQUcsQ0FBQyxRQUFRLEVBQUUsMkNBQTJDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztNQUM5RSxHQUFHLENBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQzVDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsK0JBQStCLENBQUMsQ0FBQztNQUMvQyxHQUFHLENBQUMsVUFBVSxFQUFFLHVFQUF1RSxDQUFDLENBQUM7TUFDekYsR0FBRyxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUU7UUFDeEIsV0FBVztRQUNYLElBQUk7T0FDTCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUNiLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO01BQ2pDLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRTtRQUNwQixHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDWCxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRTtVQUNkLGVBQWU7VUFDZixPQUFPO1NBQ1IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDYixHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNuQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ25ELEdBQUcsQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzNDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsMERBQTBELEdBQUcsc0NBQXNDLEVBQUU7VUFDaEgsV0FBVztVQUNYLGNBQWM7U0FDZixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNiLEdBQUcsQ0FBQyxPQUFPLEVBQUUsa0VBQWtFLEdBQUcsaUJBQWlCLEVBQUU7VUFDbkcsV0FBVztVQUNYLGNBQWM7U0FDZixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNiLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2pDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztRQUM3QyxHQUFHLENBQUMsT0FBTyxFQUFFLGdDQUFnQyxDQUFDLENBQUM7UUFDL0MsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUU7VUFDbEIsZUFBZTtVQUNmLFFBQVE7U0FDVCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNiLEdBQUcsQ0FBQyw4Q0FBOEMsRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDckUsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUN2QyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRTtVQUNoQixXQUFXO1VBQ1gsWUFBWTtTQUNiLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2IsR0FBRyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDekMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbkMsR0FBRyxDQUFDLFNBQVMsRUFBRSxxREFBcUQsQ0FBQyxDQUFDO1FBQ3RFLEdBQUcsQ0FBQyxRQUFRLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ2hELEdBQUcsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDaEUsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUU7VUFDckIsV0FBVztVQUNYLFNBQVM7U0FDVixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNiLEdBQUcsQ0FBQyxRQUFRLEVBQUUsZ0RBQWdELENBQUMsQ0FBQztPQUNqRTtNQUNELElBQUksSUFBSSxLQUFLLGNBQWMsRUFBRTtRQUMzQixRQUFRLENBQUMsUUFBUSxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDekMsUUFBUSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMvQixRQUFRLENBQUMsUUFBUSxFQUFFLG1GQUFtRixDQUFDLENBQUM7UUFDeEcsUUFBUSxDQUFDLE9BQU8sRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO1FBQzlDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNwQyxRQUFRLENBQUMsR0FBRyxFQUFFLCtCQUErQixDQUFDLENBQUM7UUFDL0MsUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN4QixRQUFRLENBQUMsUUFBUSxFQUFFLHdFQUF3RSxDQUFDLENBQUM7UUFDN0YsUUFBUSxDQUFDLEtBQUssRUFBRSwwQ0FBMEMsQ0FBQyxDQUFDO1FBQzVELFFBQVEsQ0FBQyxRQUFRLEVBQUUsK0RBQStELENBQUMsQ0FBQztRQUNwRixRQUFRLENBQUMsZUFBZSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDN0MsUUFBUSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNsQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkIsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JCLFFBQVEsQ0FBQyx3Q0FBd0MsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1RCxRQUFRLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQy9CLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdkIsUUFBUSxDQUFDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3RDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUNuQyxRQUFRLENBQUMsSUFBSSxFQUFFLDBCQUEwQixDQUFDLENBQUM7UUFDM0MsUUFBUSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5QixRQUFRLENBQUMsT0FBTyxFQUFFLGlFQUFpRSxDQUFDLENBQUM7UUFDckYsUUFBUSxDQUFDLEtBQUssRUFBRSxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ25ELFFBQVEsQ0FBQyxVQUFVLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztRQUN4RCxRQUFRLENBQUMsT0FBTyxFQUFFLDJCQUEyQixDQUFDLENBQUM7UUFDL0MsUUFBUSxDQUFDLElBQUksRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ3BELFFBQVEsQ0FBQyxJQUFJLEVBQUUsNERBQTRELENBQUMsQ0FBQztRQUM3RSxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLFFBQVEsQ0FBQyxJQUFJLEVBQUUsdUVBQXVFLENBQUMsQ0FBQztRQUN4RixRQUFRLENBQUMsT0FBTyxFQUFFLDJCQUEyQixDQUFDLENBQUM7UUFDL0MsUUFBUSxDQUFDLE9BQU8sRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO1FBQy9DLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDM0IsUUFBUSxDQUFDLE1BQU0sRUFBRSwwQ0FBMEMsQ0FBQyxDQUFDO09BQzlEO01BQ0QsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFO1FBQ3BCLFFBQVEsQ0FBQyw4QkFBOEIsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN0RCxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDMUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxQixRQUFRLENBQUMsaUJBQWlCLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDM0MsUUFBUSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMzQixRQUFRLENBQUMsUUFBUSxFQUFFLGdEQUFnRCxDQUFDLENBQUM7T0FDdEU7TUFDRCxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7UUFDcEIsTUFBTSxDQUFDO1VBQ0wsTUFBTSxNQUFNO1VBQ1osTUFBTSxNQUFNO1NBQ2IsRUFBRSxRQUFRO1VBQ1QsT0FBTyxJQUFJLFNBQVMsTUFBTSxDQUFDO1VBQzNCLE9BQU8sSUFBSSxTQUFTLE1BQU0sQ0FBQztTQUM1QixDQUFDLENBQUM7T0FDSjtNQUNELE1BQU0sQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsRUFBRSxRQUFRO1FBQ25ELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ2hCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEM7T0FDRixDQUFDLENBQUM7TUFDSCxPQUFPLE1BQU0sUUFBUSxTQUFTLE1BQU0sQ0FBQztNQUNyQyxPQUFPLE1BQU0sT0FBTyxDQUFDO01BQ3JCLE9BQU8sTUFBTSxDQUFDO0tBQ2YsQ0FBQzs7SUFFRixNQUFNLG9CQUFvQixVQUFVLE1BQU0sS0FBSyxHQUFHLEdBQUcsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN0RSxNQUFNLDBCQUEwQixTQUFTO01BQ3ZDLE1BQU0sa0JBQWtCLDhMQUE4TCxDQUFDO01BQ3ZOLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsUUFBUTtRQUN6QyxNQUFNLFVBQVUsZUFBZSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsSUFBSSxPQUFPLEVBQUU7VUFDWCxNQUFNLFNBQVMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQzFCLE1BQU0sWUFBWSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDO1VBQ2pFLE1BQU0sT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDeEIsTUFBTSxnQkFBZ0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztVQUMvQyxPQUFPLENBQUM7Y0FDSixTQUFTO2NBQ1QsSUFBSTtjQUNKLGFBQWE7YUFDZCxDQUFDLENBQUM7U0FDTixNQUFNO1VBQ0wsT0FBTyxFQUFFLENBQUM7U0FDWDtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSx3Q0FBd0MsNkJBQTZCO01BQ3pFLE1BQU0saUJBQWlCLG1EQUFtRCxDQUFDO01BQzNFLE1BQU0sb0JBQW9CLE9BQU8sQ0FBQztNQUNsQyxNQUFNLDZCQUE2QixHQUFHLGFBQWEsQ0FBQztNQUNwRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFFBQVE7UUFDNUMsTUFBTSxVQUFVLGNBQWMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLElBQUksT0FBTyxFQUFFO1VBQ1gsTUFBTSxPQUFPLEVBQUUsQ0FBQztVQUNoQixNQUFNLFdBQVcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQzVCLE1BQU0sV0FBVyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7VUFDcEQsTUFBTSxhQUFhLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUM5QixNQUFNLFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3pCLElBQUksUUFBUSxLQUFLLEdBQUcsRUFBRTtZQUNwQixhQUFhLG1CQUFtQixHQUFHLGFBQWEsbUJBQW1CLElBQUksRUFBRSxDQUFDO1lBQzFFLGFBQWEsbUJBQW1CLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7V0FDdEI7VUFDRCxJQUFJLFFBQVEsS0FBSyxHQUFHLEVBQUU7WUFDcEIsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUIsZUFBZSxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLE9BQU87V0FDUjtVQUNELElBQUksVUFBVSxFQUFFO1lBQ2QsSUFBSSxVQUFVLEtBQUssR0FBRyxFQUFFO2NBQ3RCLGFBQWEsa0JBQWtCLEdBQUcsYUFBYSxrQkFBa0IsSUFBSSxFQUFFLENBQUM7Y0FDeEUsYUFBYSxrQkFBa0IsS0FBSyxDQUFDO2dCQUNuQyxNQUFNLFFBQVE7Z0JBQ2QsS0FBSztlQUNOLENBQUMsQ0FBQztjQUNILElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQzthQUMzQixNQUFNLElBQUksVUFBVSxLQUFLLEdBQUcsRUFBRTtjQUM3QixhQUFhLGlCQUFpQixHQUFHLGFBQWEsaUJBQWlCLElBQUksRUFBRSxDQUFDO2NBQ3RFLGFBQWEsaUJBQWlCLEtBQUssQ0FBQztnQkFDbEMsTUFBTSxRQUFRO2dCQUNkLEtBQUs7ZUFDTixDQUFDLENBQUM7Y0FDSCxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7YUFDMUIsTUFBTSxJQUFJLFVBQVUsS0FBSyxHQUFHLEVBQUU7Y0FDN0IsSUFBSSxZQUFZLEdBQUcsS0FBSyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQzlDO1dBQ0Y7VUFDRCxJQUFJLGlCQUFpQixLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDcEMsTUFBTSxjQUFjLElBQUksQ0FBQztZQUN6QixhQUFhLGtCQUFrQixHQUFHLGFBQWEsa0JBQWtCLElBQUksRUFBRSxDQUFDO1lBQ3hFLFdBQVcsUUFBUSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRCxhQUFhLGtCQUFrQixLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7V0FDbkQsTUFBTTtZQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7Y0FDekIsZUFBZSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDaEM7WUFDRCxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO1dBQzdCO1NBQ0Y7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxzQkFBc0IsY0FBYztNQUN4QyxNQUFNLENBQUMsSUFBSSxXQUFXLEVBQUUsZ0JBQWdCO1FBQ3RDLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztPQUM1QixDQUFDLENBQUM7TUFDSCxFQUFFLGdCQUFnQixLQUFLLENBQUMsR0FBRyxJQUFJLGdCQUFnQixDQUFDLENBQUM7S0FDbEQsQ0FBQztJQUNGLE1BQU0sMEJBQTBCLGtDQUFrQztNQUNoRSxNQUFNLG9CQUFvQiw0REFBNEQsQ0FBQztNQUN2RixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFFBQVE7UUFDakQsTUFBTSxVQUFVLGlCQUFpQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsSUFBSSxPQUFPLEVBQUU7VUFDWCxNQUFNLFNBQVMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQzFCLE1BQU0sY0FBYyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDL0IsTUFBTSxhQUFhLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUM5QixNQUFNLGNBQWMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQy9CLE1BQU0sV0FBVyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDNUIsTUFBTSxVQUFVO1lBQ2QsWUFBWSxFQUFFO1lBQ2QsaUJBQWlCLEVBQUU7V0FDcEIsQ0FBQztVQUNGLGFBQWEsS0FBSyxDQUFDLE1BQU0sbUJBQW1CLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7VUFDM0QsSUFBSSxNQUFNLEtBQUssR0FBRyxFQUFFO1lBQ2xCLE9BQU8sVUFBVSxHQUFHLElBQUksQ0FBQztXQUMxQixNQUFNLElBQUksTUFBTSxLQUFLLEdBQUcsRUFBRTtZQUN6QixPQUFPLFlBQVksR0FBRyxJQUFJLENBQUM7V0FDNUI7VUFDRCxJQUFJLFdBQVcsS0FBSyxHQUFHLEVBQUU7WUFDdkIsT0FBTyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7V0FDakM7VUFDRCxJQUFJLFFBQVEsRUFBRTtZQUNaLHFDQUFxQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztXQUMxRDtVQUNELElBQUksVUFBVSxFQUFFO1lBQ2QsT0FBTyxXQUFXLEdBQUcsV0FBVyxDQUFDO1dBQ2xDO1VBQ0QsSUFBSSxXQUFXLEtBQUssR0FBRyxFQUFFO1lBQ3ZCLElBQUksYUFBYSxPQUFPLEVBQUUsRUFBRTtjQUMxQixnQkFBZ0IsUUFBUSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDeEMsTUFBTTtjQUNMLE9BQU8sRUFBRSxDQUFDO2FBQ1g7V0FDRjtVQUNELE9BQU8sQ0FBQyxVQUFVLEdBQUc7Y0FDakIsTUFBTSxXQUFXO2NBQ2pCLE9BQU87Y0FDUCxXQUFXLFVBQVU7YUFDdEIsR0FBRztjQUNGLE1BQU0sV0FBVztjQUNqQixPQUFPO2FBQ1IsQ0FBQyxDQUFDO1NBQ04sTUFBTTtVQUNMLE9BQU8sRUFBRSxDQUFDO1NBQ1g7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sV0FBVyxFQUFFLENBQUM7SUFDcEIsTUFBTSxZQUFZLEtBQUssUUFBUSxFQUFFLFNBQVMsS0FBSyxLQUFLLEVBQUUsV0FBVyxLQUFLLE9BQU8sRUFBRSxZQUFZLEtBQUssUUFBUSxDQUFDO0lBQ3pHLE1BQU0sWUFBWSxlQUFlLGFBQWEsRUFBRSxLQUFLO01BQ25ELE1BQU0sUUFBUSxTQUFTLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLENBQUMsWUFBWSxZQUFZLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ3ZGLE9BQU8sUUFBUSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztLQUNwQyxDQUFDO0lBQ0YsTUFBTSwyQkFBMkIsVUFBVSxTQUFTLENBQUMsbURBQW1ELEVBQUUsTUFBTSxxQkFBcUIsRUFBRSxDQUFDLENBQUM7SUFDekksTUFBTSxvQkFBb0IsaUJBQWlCO01BQ3pDLElBQUksS0FBSyxFQUFFO1FBQ1QsTUFBTSxTQUFTLEVBQUUsQ0FBQztRQUNsQixJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtVQUNuQixRQUFRLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQztTQUN4QjtRQUNELE1BQU0sQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCO1VBQzVCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ2hILENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO09BQ2YsTUFBTTtRQUNMLE9BQU8sU0FBUyxDQUFDO09BQ2xCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sU0FBUyxDQUFDLFdBQVcsRUFBRSxLQUFLO01BQ2hDLElBQUksRUFBRSxDQUFDO01BQ1AsTUFBTSxXQUFXLEVBQUUsQ0FBQztNQUNwQixNQUFNLFdBQVcsRUFBRSxDQUFDO01BQ3BCLElBQUksa0JBQWtCLEVBQUUsQ0FBQztNQUN6QixNQUFNLG9CQUFvQixFQUFFLENBQUM7TUFDN0IsTUFBTSxrQkFBa0IsRUFBRSxDQUFDO01BQzNCLE1BQU0sb0JBQW9CLHNDQUFzQztRQUM5RCxNQUFNLFFBQVEsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxLQUFLLEVBQUU7VUFDVixJQUFJLFdBQVcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1VBQ2hDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixXQUFXLFNBQVMsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDL0MsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQztXQUM3QjtVQUNELE9BQU8sUUFBUSxDQUFDO1NBQ2pCLE1BQU07VUFDTCxPQUFPLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxLQUFLLFlBQVksRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDekU7T0FDRixDQUFDO01BQ0YsTUFBTSxhQUFhLENBQUMsS0FBSyxRQUFRLE9BQU8sTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUM7TUFDbkYsTUFBTSxjQUFjLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztNQUMzQyxJQUFJLFFBQVEsWUFBWSxLQUFLLEtBQUssRUFBRTtRQUNsQyxRQUFRLGVBQWUsR0FBRyxNQUFNLENBQUM7T0FDbEM7TUFDRCxNQUFNLGNBQWMsaUJBQWlCLENBQUMsUUFBUSxhQUFhLENBQUMsQ0FBQztNQUM3RCxNQUFNLGdCQUFnQixpQkFBaUIsQ0FBQyxRQUFRLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztNQUN4RSxNQUFNLGVBQWUsaUJBQWlCLENBQUMsUUFBUSxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDdEUsTUFBTSx3QkFBd0IsaUJBQWlCLENBQUMscUJBQXFCLEVBQUUsbUVBQW1FLENBQUMsQ0FBQztNQUM1SSxNQUFNLHlCQUF5QixpQkFBaUIsQ0FBQyx1QkFBdUIsRUFBRSxpREFBaUQsQ0FBQyxDQUFDO01BQzdILE1BQU0sa0JBQWtCLGlCQUFpQixDQUFDLGVBQWUsRUFBRSw0REFBNEQsR0FBRyxtQ0FBbUMsQ0FBQyxDQUFDO01BQy9KLE1BQU0sY0FBYyxpQkFBaUIsQ0FBQyxvQkFBb0IsRUFBRSx3RUFBd0UsR0FBRyx5RUFBeUUsQ0FBQyxDQUFDO01BQ2xOLE1BQU0sbUNBQW1DLDZDQUE2QyxDQUFDO01BQ3ZGLE1BQU0sc0JBQXNCLGlCQUFpQixDQUFDLG9CQUFvQixFQUFFLGdDQUFnQyxHQUFHLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztNQUNoSSxNQUFNLG9DQUFvQyxpQkFBaUIsQ0FBQyxxQ0FBcUMsRUFBRSxnQ0FBZ0MsR0FBRyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7TUFDakssTUFBTSx1QkFBdUIsaUJBQWlCLENBQUMscUJBQXFCLEVBQUUsMkNBQTJDLEdBQUcsMkZBQTJGLENBQUMsQ0FBQztNQUNqTixNQUFNLG1CQUFtQixpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSw2QkFBNkIsR0FBRyxrRUFBa0UsR0FBRyxxREFBcUQsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO01BQy9PLE1BQU0sd0JBQXdCLGlCQUFpQixDQUFDLHNCQUFzQixFQUFFLDhDQUE4QyxHQUFHLDhCQUE4QixDQUFDLENBQUM7TUFDekosTUFBTSx5QkFBeUIsaUJBQWlCLENBQUMsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztNQUNqRyxNQUFNLENBQUMsNEVBQTRFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRO1FBQ3RHLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUNsRSxDQUFDLENBQUM7TUFDSCxNQUFNLG1CQUFtQixpQkFBaUI7UUFDeEMsTUFBTSxnQkFBZ0IsUUFBUSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbkQsTUFBTSxvQkFBb0IsT0FBTyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLEVBQUUsYUFBYSxLQUFLLElBQUksSUFBSSxhQUFhLEtBQUssS0FBSyxDQUFDLEdBQUcsYUFBYSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsMEJBQTBCLEtBQUs7VUFDdEosSUFBSSxTQUFTLEVBQUU7WUFDYixRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxDQUFDO1dBQy9CO1VBQ0QsSUFBSSxpQkFBaUIsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2hDLE1BQU0saUJBQWlCLE9BQU8sQ0FBQztZQUMvQixjQUFjLFFBQVEsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0MsZUFBZSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7V0FDdEMsTUFBTTtZQUNMLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7V0FDMUI7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxtQkFBbUIsaUJBQWlCO1FBQ3hDLGtCQUFrQixFQUFFLENBQUM7UUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRO1VBQzdCLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZCLENBQUMsQ0FBQztRQUNILGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO09BQ2pDLENBQUM7TUFDRixNQUFNLG9CQUFvQixrQkFBa0I7UUFDMUMsT0FBTyxRQUFRLG9CQUFvQixDQUFDO1FBQ3BDLE9BQU8sUUFBUSxlQUFlLENBQUM7UUFDL0IsTUFBTSxDQUFDLHdCQUF3QixDQUFDLGNBQWMsS0FBSyxJQUFJLElBQUksY0FBYyxLQUFLLEtBQUssQ0FBQyxHQUFHLGNBQWMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLHlCQUF5QixLQUFLO1VBQzFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7VUFDckMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO1VBQ3BDLG1CQUFtQixDQUFDLElBQUksWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7VUFDN0MsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1VBQy9CLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxnQkFBZ0IsQ0FBQyxJQUFJLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztXQUM3QjtVQUNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbkIsSUFBSSxhQUFhLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNyQyxhQUFhLFFBQVEsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDdEMsT0FBTyxVQUFVLGlCQUFpQixDQUFDO1lBQ25DLE9BQU8sVUFBVSxZQUFZLENBQUM7WUFDOUIsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQztXQUM3QjtVQUNELE1BQU0sQ0FBQyxRQUFRLEVBQUUsc0JBQXNCO1lBQ3JDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2NBQ3RCLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxVQUFVLFFBQVEsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Y0FDOUQsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNwQztXQUNGLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLG1CQUFtQixpQkFBaUI7UUFDeEMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLGFBQWEsS0FBSyxJQUFJLElBQUksYUFBYSxLQUFLLEtBQUssQ0FBQyxHQUFHLGFBQWEsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLGdDQUFnQyxLQUFLO1VBQzdJLE1BQU0sU0FBUyxTQUFTLEtBQUssU0FBUyxHQUFHLEVBQUUsWUFBWSxFQUFFLEVBQUUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDN0UsTUFBTSxDQUFDLGFBQWEsRUFBRSxTQUFTO1lBQzdCLElBQUksU0FBUyxLQUFLLFFBQVEsRUFBRTtjQUMxQixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN0QixNQUFNO2NBQ0wsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUNwQjtXQUNGLENBQUMsQ0FBQztVQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7U0FDekIsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0saUJBQWlCLFFBQVE7UUFDN0IsTUFBTSxVQUFVLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixJQUFJLE9BQU8sRUFBRTtVQUNYLE9BQU8sT0FBTyxDQUFDO1NBQ2hCO1FBQ0QsSUFBSSxJQUFJLGVBQWUsT0FBTyxDQUFDO1FBQy9CLE9BQU8sQ0FBQyxFQUFFLEVBQUU7VUFDVixNQUFNLGlCQUFpQixlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDMUMsSUFBSSxjQUFjLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3JDLE9BQU8sY0FBYyxDQUFDO1dBQ3ZCO1NBQ0Y7UUFDRCxPQUFPLFNBQVMsQ0FBQztPQUNsQixDQUFDO01BQ0YsSUFBSSxDQUFDLFFBQVEsZUFBZSxFQUFFO1FBQzVCLE1BQU0sQ0FBQyxXQUFXLEVBQUUsbUJBQW1CO1VBQ3JDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRztZQUNmLFlBQVksT0FBTyxXQUFXO1lBQzlCLGlCQUFpQixPQUFPLGdCQUFnQjtXQUN6QyxDQUFDO1VBQ0YsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sU0FBUyxDQUFDO1NBQ25DLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsUUFBUTtVQUN2QyxNQUFNLFFBQVEsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztVQUNqQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDMUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLHFCQUFxQixFQUFFLGdCQUFnQjtVQUM1QyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsQixJQUFJLFFBQVEsaUNBQWlDLEVBQUU7Y0FDN0MsUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7YUFDeEM7WUFDRCxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7V0FDbkM7U0FDRixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLGdDQUFnQyxDQUFDLEVBQUUsUUFBUTtVQUN4RCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsQixRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7V0FDbkM7U0FDRixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLDhEQUE4RCxDQUFDLEVBQUUsUUFBUTtVQUN0RixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsQixRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7V0FDakM7U0FDRixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVE7VUFDOUIsUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7U0FDeEMsQ0FBQyxDQUFDO09BQ0osTUFBTTtRQUNMLGdCQUFnQixDQUFDLFFBQVEsZUFBZSxDQUFDLENBQUM7UUFDMUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxtQkFBbUI7VUFDckMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sU0FBUyxDQUFDO1NBQ25DLENBQUMsQ0FBQztPQUNKO01BQ0QsaUJBQWlCLENBQUMsUUFBUSxnQkFBZ0IsQ0FBQyxDQUFDO01BQzVDLGdCQUFnQixDQUFDLFFBQVEsZUFBZSxDQUFDLENBQUM7TUFDMUMsZ0JBQWdCLENBQUMsUUFBUSx3QkFBd0IsQ0FBQyxDQUFDO01BQ25ELGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLENBQUM7TUFDMUMsTUFBTSxDQUFDO1FBQ0wsSUFBSSxJQUFJO1FBQ1IsSUFBSSxJQUFJO1FBQ1IsSUFBSSxPQUFPO1FBQ1gsSUFBSSxJQUFJO1FBQ1IsSUFBSSxJQUFJO1FBQ1IsSUFBSSxtQkFBbUI7UUFDdkIsT0FBTyxPQUFPO1FBQ2QsT0FBTyxPQUFPO1FBQ2QsT0FBTyxPQUFPO1FBQ2QsUUFBUSxVQUFVO1FBQ2xCLE1BQU0sS0FBSztRQUNYLE9BQU8sb0JBQW9CO09BQzVCLEVBQUUsbUJBQW1CO1FBQ3BCLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ2xCLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ25EO09BQ0YsQ0FBQyxDQUFDO01BQ0gsSUFBSSxRQUFRLGlCQUFpQixFQUFFO1FBQzdCLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxpQkFBaUIsQ0FBQyxFQUFFLFFBQVE7VUFDbkQsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEIsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDdkI7U0FDRixDQUFDLENBQUM7T0FDSjtNQUNELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDM0IsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUMsQ0FBQztPQUM1QztNQUNELE1BQU0saUJBQWlCLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztNQUM3QyxNQUFNLG1CQUFtQixRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7TUFDakQsTUFBTSxrQkFBa0IsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO01BQy9DLE1BQU0sZUFBZSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7TUFDM0MsTUFBTSxtQkFBbUIsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7TUFDcEQsTUFBTSx1QkFBdUIsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7TUFDNUQsTUFBTSx3QkFBd0IsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUM7TUFDOUQsTUFBTSxrQkFBa0IsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7TUFDL0QsTUFBTSx5QkFBeUIsUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUM7TUFDaEUsTUFBTSxzQkFBc0IsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUM7TUFDMUQsTUFBTSxvQ0FBb0MsUUFBUSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7TUFDdEYsTUFBTSx3QkFBd0IsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUM7TUFDOUQsTUFBTSx5QkFBeUIsUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUM7TUFDaEUsTUFBTSxxQkFBcUIsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7TUFDbEUsTUFBTSxlQUFlLGlCQUFpQjtRQUNwQyxNQUFNLFNBQVMsUUFBUSxDQUFDLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQztRQUM1QyxPQUFPLENBQUMsRUFBRSxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ2xELENBQUM7TUFDRixNQUFNLFVBQVUsZ0JBQWdCO1FBQzlCLE1BQU0sT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxJQUFJLEVBQUU7VUFDUixJQUFJLElBQUksRUFBRTtZQUNSLElBQUksSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7Y0FDekIsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELE1BQU0sZUFBZSxJQUFJLGtCQUFrQixDQUFDO1lBQzVDLElBQUksWUFBWSxFQUFFO2NBQ2hCLElBQUksSUFBSSxZQUFZLE9BQU8sQ0FBQztjQUM1QixPQUFPLENBQUMsRUFBRSxFQUFFO2dCQUNWLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtrQkFDdEMsT0FBTyxJQUFJLENBQUM7aUJBQ2I7ZUFDRjthQUNGO1dBQ0YsTUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDO1dBQ2I7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFDO09BQ2QsQ0FBQztNQUNGLE1BQU0sb0JBQW9CLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO01BQ3RELE9BQU87UUFDTCxNQUFNLFVBQVU7UUFDaEIsUUFBUTtRQUNSLFFBQVE7UUFDUixjQUFjO1FBQ2QsZUFBZTtRQUNmLGdCQUFnQjtRQUNoQixnQkFBZ0I7UUFDaEIsZUFBZTtRQUNmLG9CQUFvQjtRQUNwQixxQkFBcUI7UUFDckIsWUFBWTtRQUNaLGNBQWM7UUFDZCxzQkFBc0I7UUFDdEIsbUJBQW1CO1FBQ25CLGlDQUFpQztRQUNqQyxxQkFBcUI7UUFDckIsc0JBQXNCO1FBQ3RCLGtCQUFrQjtRQUNsQixZQUFZO1FBQ1osT0FBTztRQUNQLGlCQUFpQjtRQUNqQixnQkFBZ0I7UUFDaEIsZ0JBQWdCO1FBQ2hCLGlCQUFpQjtRQUNqQixnQkFBZ0I7T0FDakIsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxTQUFTLENBQUMsV0FBVyxFQUFFLGFBQWE7TUFDeEMsTUFBTSxpQkFBaUIsOEhBQThILENBQUM7TUFDdEosTUFBTSxjQUFjLDBCQUEwQixDQUFDO01BQy9DLE1BQU0sa0JBQWtCLE1BQU0sQ0FBQztNQUMvQixNQUFNLGlCQUFpQixFQUFFLENBQUM7TUFDMUIsSUFBSSxXQUFXLENBQUM7TUFDaEIsSUFBSSxhQUFhLENBQUM7TUFDbEIsTUFBTSxnQkFBZ0IsU0FBUyxDQUFDO01BQ2hDLElBQUksTUFBTSxFQUFFO1FBQ1YsY0FBYyxNQUFNLGVBQWUsRUFBRSxDQUFDO1FBQ3RDLGdCQUFnQixNQUFNLGlCQUFpQixFQUFFLENBQUM7T0FDM0M7TUFDRCxNQUFNLGdCQUFnQixDQUFDLENBQUMsb0JBQW9CLENBQUMsR0FBRyxhQUFhLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUMxRSxLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzdDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3JELGNBQWMsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ3REO01BQ0QsTUFBTSxPQUFPO1FBQ1gsT0FBTyxPQUFPO1VBQ1osTUFBTSxTQUFTLEVBQUUsQ0FBQztVQUNsQixJQUFJLFlBQVksS0FBSyxDQUFDO1VBQ3RCLE1BQU0sZUFBZSxRQUFRLGNBQWMsQ0FBQztVQUM1QyxNQUFNLG9CQUFvQixRQUFRLG9CQUFvQixJQUFJLElBQUksQ0FBQztVQUMvRCxNQUFNLFdBQVcsNEJBQTRCO1lBQzNDLE1BQU0sTUFBTSxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsR0FBRyxFQUFFO2NBQ1IsT0FBTzthQUNSO1lBQ0QsTUFBTSxRQUFRLE1BQU0sQ0FBQyxNQUFNLEdBQUcsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxLQUFLLEVBQUU7Y0FDVixPQUFPO2FBQ1I7WUFDRCxNQUFNLFNBQVMsTUFBTSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLE1BQU0sRUFBRTtjQUNYLE9BQU87YUFDUjtZQUNELE1BQU0sT0FBTyxNQUFNLENBQUMsTUFBTSxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsSUFBSSxFQUFFO2NBQ1QsT0FBTzthQUNSO1lBQ0QsTUFBTSxNQUFNO2NBQ1YsR0FBRztjQUNILEtBQUs7Y0FDTCxNQUFNO2NBQ04sSUFBSTthQUNMLENBQUM7WUFDRixJQUFJLElBQUksR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Y0FDVixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUN6QixNQUFNO2VBQ1A7YUFDRjtZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLE1BQU0sRUFBRTtjQUNwQixPQUFPO2FBQ1I7WUFDRCxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUQsT0FBTyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQztZQUN4QyxPQUFPLE1BQU0sQ0FBQyxNQUFNLEdBQUcsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1lBQzFDLE9BQU8sTUFBTSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUM7WUFDM0MsT0FBTyxNQUFNLENBQUMsTUFBTSxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQztXQUMxQyxDQUFDO1VBQ0YsTUFBTSxjQUFjLE9BQU87WUFDekIsTUFBTSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsS0FBSyxFQUFFO2NBQ1YsT0FBTzthQUNSO1lBQ0QsTUFBTSxTQUFTLEtBQUssUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEUsSUFBSSxJQUFJLE1BQU0sT0FBTyxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Y0FDVixJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzNCLE9BQU8sS0FBSyxDQUFDO2VBQ2Q7YUFDRjtZQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEIsT0FBTyxJQUFJLENBQUM7V0FDYixDQUFDO1VBQ0YsTUFBTSxZQUFZLHFCQUFxQjtZQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO2NBQ25CLE9BQU87YUFDUjtZQUNELElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7Y0FDbkIsT0FBTzthQUNSO1lBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtjQUNuQixPQUFPO2FBQ1I7WUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvRCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUNsQixDQUFDO1VBQ0YsTUFBTSxTQUFTLE9BQU87WUFDcEIsWUFBWSxJQUFJLENBQUM7WUFDakIsT0FBTyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7V0FDNUIsQ0FBQztVQUNGLE1BQU0sU0FBUyxzQkFBc0I7WUFDbkMsSUFBSSxTQUFTLEVBQUU7Y0FDYixNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsRUFBRSxPQUFPO2dCQUN2QyxPQUFPLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztlQUM1QixDQUFDLENBQUM7YUFDSjtZQUNELElBQUksQ0FBQyxXQUFXLEVBQUU7Y0FDaEIsTUFBTSxHQUFHLFFBQVEsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDMUM7WUFDRCxPQUFPLEdBQUcsQ0FBQztXQUNaLENBQUM7VUFDRixNQUFNLDBCQUEwQixVQUFVO1lBQ3hDLE9BQU8sTUFBTSxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7V0FDM0QsQ0FBQztVQUNGLE1BQU0scUJBQXFCLFNBQVM7WUFDbEMsT0FBTyxLQUFLLFFBQVEsQ0FBQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztXQUNoRSxDQUFDO1VBQ0YsTUFBTSxhQUFhLHVDQUF1QztZQUN4RCxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUM7WUFDbEIsSUFBSSxHQUFHLEVBQUU7Y0FDUCxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztjQUNsQixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzlDO1lBQ0QsTUFBTSxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLFFBQVEsa0JBQWtCLEVBQUU7Y0FDL0IsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztjQUNoRCxJQUFJLG1CQUFtQixLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ3ZDLE9BQU8sRUFBRSxDQUFDO2VBQ1g7Y0FDRCxJQUFJLENBQUMsUUFBUSxvQkFBb0IsSUFBSSxtQkFBbUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUN4RSxPQUFPLEVBQUUsQ0FBQztlQUNYO2FBQ0Y7WUFDRCxJQUFJLFlBQVksRUFBRTtjQUNoQixNQUFNLFlBQVksS0FBSyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQzthQUMxRDtZQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7V0FDbkQsQ0FBQztVQUNGLElBQUksR0FBRyxFQUFFO1lBQ1AsTUFBTSxHQUFHLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMxQyxNQUFNLEdBQUcsUUFBUSxDQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsd0JBQXdCLEVBQUUsT0FBTztjQUN0RixPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQzthQUNyQyxDQUFDLENBQUM7WUFDSCxJQUFJLE9BQU8sQ0FBQztZQUNaLE9BQU8sVUFBVSxXQUFXLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtjQUN0QyxXQUFXLFVBQVUsR0FBRyxPQUFPLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztjQUMxRCxJQUFJLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztjQUNqRSxJQUFJLFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2NBQ3BELElBQUksSUFBSSxJQUFJLEtBQUssRUFBRTtnQkFDakIsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEMsUUFBUSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtrQkFDbEUsU0FBUztpQkFDVjtnQkFDRCxJQUFJLENBQUMsUUFBUSxrQkFBa0IsS0FBSyxJQUFJLEtBQUssVUFBVSxJQUFJLDJCQUEyQixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtrQkFDbkcsU0FBUztpQkFDVjtnQkFDRCxJQUFJLElBQUksS0FBSyxhQUFhLElBQUksS0FBSyxLQUFLLEtBQUssRUFBRTtrQkFDN0MsUUFBUSxNQUFNLENBQUM7aUJBQ2hCLE1BQU0sSUFBSSxJQUFJLEtBQUssT0FBTyxJQUFJLElBQUksS0FBSyxrQkFBa0IsRUFBRTtrQkFDMUQsUUFBUSxLQUFLLFlBQVksRUFBRSxDQUFDO2lCQUM3QjtnQkFDRCxRQUFRLEtBQUssUUFBUSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDbEQsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztlQUN4RDthQUNGO1lBQ0QsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDN0IsUUFBUSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM3QixRQUFRLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzdCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDN0IsUUFBUSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4QixRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZCLFNBQVMsQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUNwRSxJQUFJLE1BQU0sT0FBTyxLQUFLLGFBQWEsRUFBRTtjQUNuQyxPQUFPLE1BQU0sT0FBTyxDQUFDO2FBQ3RCO1lBQ0QsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssTUFBTSxFQUFFO2NBQ3JDLE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQy9CO1dBQ0Y7VUFDRCxPQUFPLE1BQU0sQ0FBQztTQUNmO1FBQ0QsV0FBVyx5QkFBeUI7VUFDbEMsSUFBSSxNQUFNLEVBQUUsQ0FBQztVQUNiLE1BQU0sa0JBQWtCLDhCQUE4QjtZQUNwRCxNQUFNLFlBQVksY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNDLElBQUksU0FBUyxFQUFFO2NBQ2IsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksU0FBUyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDaEQsTUFBTSxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUIsTUFBTSxRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxLQUFLLEVBQUU7a0JBQ1QsT0FBTyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQztpQkFDaEU7ZUFDRjthQUNGO1dBQ0YsQ0FBQztVQUNGLE1BQU0sVUFBVSxvQkFBb0I7WUFDbEMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLFFBQVEsRUFBRTtjQUMvQixPQUFPLElBQUksQ0FBQzthQUNiO1lBQ0QsSUFBSSxXQUFXLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsQyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7Y0FDOUIsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUNELFdBQVcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25DLE9BQU8sRUFBRSxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7V0FDdEMsQ0FBQztVQUNGLElBQUksV0FBVyxJQUFJLFdBQVcsRUFBRTtZQUM5QixlQUFlLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ2xDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7V0FDM0MsTUFBTTtZQUNMLE1BQU0sQ0FBQyxNQUFNLEVBQUUsaUJBQWlCO2NBQzlCLElBQUksS0FBSyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEVBQUU7Z0JBQ3ZDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7ZUFDaEU7YUFDRixDQUFDLENBQUM7V0FDSjtVQUNELE9BQU8sR0FBRyxDQUFDO1NBQ1o7T0FDRixDQUFDO01BQ0YsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDOztJQUVGLE1BQU0sYUFBYTtNQUNqQixhQUFhLElBQUk7TUFDakIsUUFBUSxJQUFJO01BQ1osUUFBUSxJQUFJO01BQ1osYUFBYSxJQUFJO01BQ2pCLGlCQUFpQixJQUFJO01BQ3JCLGlCQUFpQixJQUFJO01BQ3JCLGVBQWUsSUFBSTtNQUNuQixhQUFhLElBQUk7S0FDbEIsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLFNBQVMsS0FBSyxZQUFZLEtBQUssSUFBSSxVQUFVLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQztJQUNyRixNQUFNLHdCQUF3QixTQUFTLEtBQUssbUJBQW1CLEtBQUssTUFBTSxJQUFJLEtBQUssbUJBQW1CLEtBQUssS0FBSyxDQUFDO0lBQ2pILE1BQU0sbUJBQW1CLFNBQVMsVUFBVSxDQUFDLEtBQUssZUFBZSxDQUFDLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNGLE1BQU0sVUFBVSx5QkFBeUI7TUFDdkMsTUFBTSxRQUFRLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7TUFDM0QsS0FBSyxNQUFNLElBQUksSUFBSSxhQUFhLEVBQUU7UUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUU7VUFDNUIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQztPQUNGO01BQ0QsSUFBSSxhQUFhLENBQUMsYUFBYSxhQUFhLENBQUMsRUFBRTtRQUM3QyxLQUFLLGFBQWEsR0FBRyxNQUFNLGFBQWEsYUFBYSxFQUFFLENBQUM7T0FDekQ7TUFDRCxPQUFPLEtBQUssQ0FBQztLQUNkLENBQUM7SUFDRixNQUFNLGNBQWMsK0NBQStDO01BQ2pFLElBQUksRUFBRSxDQUFDO01BQ1AsTUFBTSxRQUFRLE9BQU8sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDM0MsS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDO01BQ2xCLElBQUksVUFBVSxDQUFDLEtBQUssT0FBTyxDQUFDLEVBQUU7UUFDNUIsS0FBSyxPQUFPLEdBQUcsQ0FBQyxLQUFLLEtBQUssV0FBVyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLGNBQWMsQ0FBQztPQUN4RjtNQUNELElBQUksZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDbkMsS0FBSyxlQUFlLEdBQUcsTUFBTTtVQUMzQixLQUFLLGlCQUFpQixHQUFHLElBQUksQ0FBQztVQUM5QixLQUFLLG1CQUFtQixHQUFHLE1BQU0sQ0FBQztVQUNsQyxJQUFJLFVBQVUsQ0FBQyxhQUFhLGVBQWUsQ0FBQyxFQUFFO1lBQzVDLGFBQWEsZUFBZSxFQUFFLENBQUM7V0FDaEM7U0FDRixDQUFDO1FBQ0YsS0FBSyxnQkFBZ0IsR0FBRyxNQUFNO1VBQzVCLEtBQUssYUFBYSxHQUFHLElBQUksQ0FBQztVQUMxQixLQUFLLHFCQUFxQixHQUFHLE1BQU0sQ0FBQztVQUNwQyxJQUFJLFVBQVUsQ0FBQyxhQUFhLGdCQUFnQixDQUFDLEVBQUU7WUFDN0MsYUFBYSxnQkFBZ0IsRUFBRSxDQUFDO1dBQ2pDO1NBQ0YsQ0FBQztRQUNGLEtBQUsseUJBQXlCLEdBQUcsTUFBTTtVQUNyQyxLQUFLLDhCQUE4QixHQUFHLE1BQU0sQ0FBQztVQUM3QyxLQUFLLGdCQUFnQixFQUFFLENBQUM7U0FDekIsQ0FBQztRQUNGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsRUFBRTtVQUNqQyxLQUFLLG1CQUFtQixHQUFHLEtBQUssaUJBQWlCLEtBQUssSUFBSSxHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7VUFDNUUsS0FBSyxxQkFBcUIsR0FBRyxLQUFLLGFBQWEsS0FBSyxJQUFJLEdBQUcsTUFBTSxHQUFHLEtBQUssQ0FBQztVQUMxRSxLQUFLLDhCQUE4QixHQUFHLEtBQUssQ0FBQztTQUM3QztPQUNGO01BQ0QsT0FBTyxLQUFLLENBQUM7S0FDZCxDQUFDOztJQUVGLE1BQU0scUJBQXFCLFdBQVcsQ0FBQztJQUN2QyxNQUFNLGVBQWUsOEJBQThCLENBQUM7SUFDcEQsTUFBTSxXQUFXLHFDQUFxQztNQUNwRCxNQUFNLGlCQUFpQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQyxDQUFDO0tBQzNELENBQUM7SUFDRixNQUFNLGNBQWMscUNBQXFDO01BQ3ZELE1BQU0sb0JBQW9CLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLElBQUksS0FBSyxDQUFDLENBQUM7S0FDOUQsQ0FBQztJQUNGLE1BQU0sZUFBZSxTQUFTLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxZQUFZLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0lBQ3BGLE1BQU0sTUFBTSx5QkFBeUI7TUFDbkMsTUFBTSxRQUFRLFdBQVcsQ0FBQyxhQUFhLEtBQUssRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzdFLElBQUksWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxhQUFhLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsUUFBUSxDQUFDLEVBQUU7UUFDMUcsTUFBTSxXQUFXLEtBQUssT0FBTyxjQUFjLElBQUksUUFBUSxDQUFDO1FBQ3hELE1BQU0sTUFBTSxRQUFRLGdCQUFnQixDQUFDO1FBQ3JDLE1BQU0sT0FBTyxRQUFRLEtBQUssQ0FBQztRQUMzQixNQUFNLGFBQWEsS0FBSyxDQUFDO1FBQ3pCLFVBQVUsTUFBTSxHQUFHLGFBQWEsUUFBUSxJQUFJLEdBQUcsSUFBSSxHQUFHLFdBQVcsSUFBSSxJQUFJLElBQUksSUFBSSxXQUFXLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsV0FBVyxJQUFJLElBQUksSUFBSSxJQUFJLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM3SixVQUFVLE1BQU0sR0FBRyxhQUFhLFFBQVEsSUFBSSxHQUFHLElBQUksR0FBRyxVQUFVLElBQUksSUFBSSxJQUFJLElBQUksVUFBVSxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLFVBQVUsSUFBSSxJQUFJLElBQUksSUFBSSxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUM7T0FDMUo7TUFDRCxPQUFPLEtBQUssQ0FBQztLQUNkLENBQUM7SUFDRixNQUFNLGNBQWMsK0JBQStCO01BQ2pELE1BQU0sTUFBTSxHQUFHLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQztNQUNwRCxJQUFJLFVBQVUsVUFBVSxFQUFFO1FBQ3hCLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQixPQUFPO09BQ1I7TUFDRCxNQUFNLGFBQWEsTUFBTTtRQUN2QixPQUFPLEdBQUcsV0FBVyxLQUFLLFVBQVUsSUFBSSxHQUFHLFdBQVcsS0FBSyxhQUFhLElBQUksR0FBRyxLQUFLLENBQUM7T0FDdEYsQ0FBQztNQUNGLE1BQU0sZUFBZSxNQUFNO1FBQ3pCLFdBQVcsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDbkQsV0FBVyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFVBQVUsVUFBVSxFQUFFO1VBQ3pCLFVBQVUsVUFBVSxHQUFHLElBQUksQ0FBQztVQUM1QixRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDakI7UUFDRCxNQUFNLElBQUksQ0FBQztPQUNaLENBQUM7TUFDRixJQUFJLFVBQVUsRUFBRSxFQUFFO1FBQ2hCLFlBQVksRUFBRSxDQUFDO09BQ2hCLE1BQU07UUFDTCxRQUFRLENBQUMsR0FBRyxFQUFFLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxDQUFDO09BQ2pEO01BQ0QsSUFBSSxDQUFDLFVBQVUsVUFBVSxFQUFFO1FBQ3pCLFFBQVEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO09BQ3JDO0tBQ0YsQ0FBQztJQUNGLGlCQUFpQjtNQUNmLFdBQVcsR0FBRztRQUNaLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxRQUFRLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvRCxJQUFJLFdBQVcsR0FBRyxXQUFXLElBQUksUUFBUSxnQkFBZ0IsQ0FBQztRQUMxRCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7T0FDaEI7TUFDRCxJQUFJLGlDQUFpQztRQUNuQyxNQUFNLE9BQU8sSUFBSSxDQUFDO1FBQ2xCLElBQUksWUFBWSxDQUFDO1FBQ2pCLE1BQU0sTUFBTSxNQUFNLENBQUM7UUFDbkIsTUFBTSx1QkFBdUIsT0FBTztVQUNsQyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNqRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1VBQ3BELE9BQU8sUUFBUSxDQUFDO1NBQ2pCO1FBQ0QsSUFBSSxFQUFFLENBQUM7UUFDUCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksUUFBUSxDQUFDLEVBQUU7VUFDekIsS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1VBQ2xCLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztVQUMxQixJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDdEIsTUFBTTtVQUNMLEtBQUssTUFBTSxDQUFDLElBQUksUUFBUSxDQUFDLENBQUM7U0FDM0I7UUFDRCxRQUFRLEtBQUssSUFBSSxNQUFNLENBQUM7UUFDeEIsTUFBTSxZQUFZLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLElBQUksSUFBSSxTQUFTLE9BQU8sQ0FBQztRQUN6QixPQUFPLENBQUMsRUFBRSxFQUFFO1VBQ1YsSUFBSSxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUN4QixJQUFJLGdCQUFnQixvQkFBb0IsQ0FBQztVQUN6QyxJQUFJLFVBQVUsS0FBSyxDQUFDO1VBQ3BCLElBQUksV0FBVyxLQUFLLENBQUM7VUFDckIsSUFBSSxJQUFJLEtBQUssa0JBQWtCLEVBQUU7WUFDL0IsT0FBTyxPQUFPLENBQUM7V0FDaEI7VUFDRCxJQUFJLElBQUksVUFBVSxJQUFJLElBQUksS0FBSyxPQUFPLElBQUksTUFBTSxXQUFXLEtBQUssVUFBVSxFQUFFO1lBQzFFLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMxQyxTQUFTO1dBQ1Y7VUFDRCxJQUFJLENBQUMsSUFBSSxXQUFXLEtBQUssSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssVUFBVSxDQUFDLEVBQUU7WUFDbkUsVUFBVSxJQUFJLENBQUM7WUFDZixXQUFXLElBQUksS0FBSyxTQUFTLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQztZQUNqRCxnQkFBZ0IsT0FBTztjQUNyQixNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDO2NBQ3BDLEtBQUssS0FBSyxHQUFHLEtBQUssS0FBSyxLQUFLLE9BQU8sR0FBRyxTQUFTLEdBQUcsVUFBVSxDQUFDO2NBQzdELElBQUksZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQ2pDLENBQUM7V0FDSDtVQUNELGVBQWUsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDckMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNqQixJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxlQUFlLENBQUM7Z0JBQ3BDLE1BQU0sUUFBUTtnQkFDZCxLQUFLO2VBQ04sQ0FBQyxDQUFDO1lBQ0wsWUFBWSxTQUFTLEdBQUcsUUFBUSxDQUFDO1lBQ2pDLFlBQVksUUFBUSxHQUFHLE9BQU8sQ0FBQztZQUMvQixZQUFZLGNBQWMsR0FBRyxhQUFhLENBQUM7WUFDM0MsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFO2NBQ3BCLFdBQVcsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQzFDLE1BQU07Y0FDTCxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsSUFBSSxJQUFJLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzVEO1dBQ0YsTUFBTTtZQUNMLElBQUksSUFBSSxLQUFLLE9BQU8sSUFBSSxJQUFJLFVBQVUsRUFBRTtjQUN0QyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDL0IsTUFBTTtjQUNMLFlBQVksS0FBSyxDQUFDO2dCQUNoQixNQUFNLFFBQVE7Z0JBQ2QsS0FBSztlQUNOLENBQUMsQ0FBQzthQUNKO1dBQ0Y7U0FDRjtRQUNELFNBQVMsZUFBZSxJQUFJLENBQUM7UUFDN0IsT0FBTyxRQUFRLENBQUM7T0FDakI7TUFDRCxNQUFNLDBCQUEwQjtRQUM5QixJQUFJLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7VUFDcEQsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sS0FBSyxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQztRQUNoQyxJQUFJLEVBQUUsRUFBRTtVQUNOLElBQUksV0FBVyxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztVQUMvQixJQUFJLEtBQUssRUFBRTtZQUNULE1BQU0sWUFBWSxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQyxJQUFJLElBQUksU0FBUyxPQUFPLENBQUM7WUFDekIsT0FBTyxDQUFDLEVBQUUsRUFBRTtjQUNWLE1BQU0sT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDMUIsTUFBTSxlQUFlLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztjQUNwQyxJQUFJLFlBQVksRUFBRTtnQkFDaEIsSUFBSSxRQUFRLEVBQUU7a0JBQ1osSUFBSSxLQUFLLFlBQVksT0FBTyxDQUFDO2tCQUM3QixPQUFPLEVBQUUsRUFBRSxFQUFFO29CQUNYLElBQUksWUFBWSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO3NCQUN0QyxNQUFNLGdCQUFnQixZQUFZLGNBQWMsQ0FBQztzQkFDakQsTUFBTSxXQUFXLFlBQVksU0FBUyxFQUFFLFVBQVUsWUFBWSxRQUFRLENBQUM7c0JBQ3ZFLE1BQU0sa0JBQWtCLFlBQVksTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO3NCQUNyRixlQUFlLGNBQWMsR0FBRyxhQUFhLENBQUM7c0JBQzlDLGVBQWUsU0FBUyxHQUFHLFFBQVEsQ0FBQztzQkFDcEMsZUFBZSxRQUFRLEdBQUcsT0FBTyxDQUFDO3NCQUNsQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsZUFBZSxDQUFDO3FCQUNsQzttQkFDRjtpQkFDRjtnQkFDRCxJQUFJLENBQUMsUUFBUSxJQUFJLFlBQVksT0FBTyxLQUFLLENBQUMsRUFBRTtrQkFDMUMsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7a0JBQ3RCLFdBQVcsQ0FBQyxNQUFNLEVBQUUsWUFBWSxTQUFTLElBQUksSUFBSSxFQUFFLFlBQVksY0FBYyxFQUFFLFlBQVksUUFBUSxDQUFDLENBQUM7aUJBQ3RHO2VBQ0Y7YUFDRjtXQUNGLE1BQU07WUFDTCxNQUFNLENBQUMsUUFBUSxFQUFFLHdCQUF3QjtjQUN2QyxXQUFXLENBQUMsTUFBTSxFQUFFLFlBQVksU0FBUyxJQUFJLElBQUksRUFBRSxZQUFZLGNBQWMsRUFBRSxZQUFZLFFBQVEsQ0FBQyxDQUFDO2FBQ3RHLENBQUMsQ0FBQztZQUNILFdBQVcsRUFBRSxDQUFDO1dBQ2Y7VUFDRCxLQUFLLE1BQU0sSUFBSSxJQUFJLFFBQVEsRUFBRTtZQUMzQixJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUU7Y0FDekIsT0FBTyxJQUFJLENBQUM7YUFDYjtXQUNGO1VBQ0QsT0FBTyxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztVQUN2QixJQUFJO1lBQ0YsT0FBTyxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQztXQUM3QixDQUFDLFdBQVc7WUFDWCxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7V0FDN0I7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO09BQ2I7TUFDRCxJQUFJLHFCQUFxQjtRQUN2QixPQUFPLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDMUM7TUFDRCxRQUFRLHFCQUFxQjtRQUMzQixJQUFJLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7VUFDcEQsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sUUFBUSxHQUFHLENBQUM7VUFDaEIsTUFBTSxJQUFJO1VBQ1YsTUFBTTtTQUNQLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDVCxHQUFHO1VBQ0QsTUFBTSxLQUFLLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDO1VBQ2hDLElBQUksRUFBRSxFQUFFO1lBQ04sSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7V0FDakM7VUFDRCxTQUFTLE1BQU0sV0FBVyxJQUFJLE1BQU0sY0FBYyxJQUFJLE1BQU0sWUFBWSxJQUFJLE1BQU0sYUFBYSxDQUFDO1NBQ2pHLFFBQVEsTUFBTSxJQUFJLENBQUMsS0FBSyxxQkFBcUIsRUFBRSxFQUFFO1FBQ2xELE9BQU8sSUFBSSxDQUFDO09BQ2I7TUFDRCxLQUFLLFNBQVM7UUFDWixJQUFJLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7VUFDcEQsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELElBQUksTUFBTSxDQUFDLElBQUksUUFBUSxDQUFDLEVBQUU7VUFDeEIsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDckI7UUFDRCxJQUFJLENBQUMsTUFBTSxxQkFBcUIsRUFBRTtVQUNoQyxTQUFTLE1BQU0sU0FBUyxDQUFDO1NBQzFCO1FBQ0QsSUFBSSxNQUFNLElBQUksTUFBTSxxQkFBcUIsRUFBRTtVQUN6QyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztVQUNwQixNQUFNLFdBQVcsTUFBTSxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztVQUNsRCxJQUFJLElBQUksUUFBUSxPQUFPLENBQUM7VUFDeEIsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUNWLFNBQVMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLElBQUksTUFBTSxDQUFDLElBQUksUUFBUSxDQUFDLEVBQUU7Y0FDeEIsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDckI7V0FDRjtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7T0FDYjtNQUNELE9BQU8sR0FBRztRQUNSLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztPQUNsQjtNQUNELE1BQU0sSUFBSTtRQUNSLElBQUksQ0FBQyxFQUFFO1VBQ0wsQ0FBQyxlQUFlLEVBQUUsQ0FBQztVQUNuQixDQUFDLHlCQUF5QixFQUFFLENBQUM7U0FDOUI7UUFDRCxPQUFPLEtBQUssQ0FBQztPQUNkO01BQ0QsZUFBZSxVQUFVO1FBQ3ZCLE1BQU0sWUFBWSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsQyxNQUFNLGVBQWUsU0FBUyxJQUFJLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ3RELElBQUksWUFBWSxFQUFFO1VBQ2hCLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLFlBQVksT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbkQsTUFBTSxXQUFXLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxJQUFJLFFBQVEsSUFBSSxRQUFRLEtBQUssS0FBSyxDQUFDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUssRUFBRTtjQUNqRSxHQUFHLGVBQWUsRUFBRSxDQUFDO2FBQ3RCO1lBQ0QsSUFBSSxHQUFHLDhCQUE4QixFQUFFLEVBQUU7Y0FDdkMsT0FBTzthQUNSO1dBQ0Y7U0FDRjtPQUNGO0tBQ0Y7SUFDRCxVQUFVLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDOztJQUVwQyxNQUFNLFNBQVMsS0FBSyxLQUFLLENBQUM7SUFDMUIsTUFBTSxPQUFPLEtBQUssS0FBSyxDQUFDO0lBQ3hCLE1BQU0sb0JBQW9CLGdCQUFnQixDQUFDO0lBQzNDLE1BQU0sa0JBQWtCLEtBQUssUUFBUSxDQUFDLDBFQUEwRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZILE1BQU0scUJBQXFCLHNCQUFzQjtNQUMvQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFO1FBQ3JDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDckIsTUFBTTtRQUNMLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ3pCO0tBQ0YsQ0FBQztJQUNGLE1BQU0scUJBQXFCLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssR0FBRyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUN0RixNQUFNLGdCQUFnQixzQkFBc0I7TUFDMUMsSUFBSSxNQUFNLENBQUMsQ0FBQztNQUNaLElBQUksSUFBSSxFQUFFO1FBQ1IsS0FBSyxJQUFJLGVBQWUsSUFBSSxTQUFTLEVBQUUsV0FBVyxJQUFJLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxXQUFXLFFBQVEsZ0JBQWdCLEVBQUU7VUFDckgsTUFBTSxXQUFXLFFBQVEsU0FBUyxDQUFDO1VBQ25DLElBQUksVUFBVSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNwQyxJQUFJLFFBQVEsS0FBSyxZQUFZLElBQUksQ0FBQyxRQUFRLEtBQUssT0FBTyxFQUFFO2NBQ3RELFNBQVM7YUFDVjtXQUNGO1VBQ0QsR0FBRyxFQUFFLENBQUM7VUFDTixlQUFlLFFBQVEsQ0FBQztTQUN6QjtPQUNGO01BQ0QsT0FBTyxHQUFHLENBQUM7S0FDWixDQUFDO0lBQ0YsTUFBTSwwQkFBMEIsaUJBQWlCO01BQy9DLE1BQU0sV0FBVyxLQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQ3JDLE1BQU0sUUFBUSxNQUFNLFVBQVUsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUNsRSxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDbkQsQ0FBQztJQUNGLE1BQU0sdUJBQXVCLHVCQUF1QjtNQUNsRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUN0QixPQUFPLEtBQUssQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLEdBQUcsUUFBUSxHQUFHLEVBQUUsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDO09BQzFFLE1BQU07UUFDTCxPQUFPLFFBQVEsQ0FBQztPQUNqQjtLQUNGLENBQUM7SUFDRixNQUFNLGVBQWUsNkJBQTZCO01BQ2hELE1BQU0saUJBQWlCLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ25ELElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsS0FBSyxFQUFFLEVBQUU7UUFDM0MsUUFBUSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztPQUNoQyxNQUFNO1FBQ0wsS0FBSyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsb0JBQW9CLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7T0FDN0U7S0FDRixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsa0NBQWtDO01BQ3ZELE1BQU0sYUFBYSxRQUFRLFlBQVksQ0FBQztNQUN4QyxNQUFNLGNBQWM7UUFDbEIsS0FBSyxzQkFBc0I7VUFDekIsTUFBTSxXQUFXLFlBQVksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQzNDLElBQUksVUFBVSxDQUFDLFFBQVEsY0FBYyxDQUFDLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzlELFFBQVEsUUFBUSxjQUFjLEtBQUssQ0FBQyxRQUFRLG9CQUFvQixJQUFJLFVBQVUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7V0FDN0c7VUFDRCxNQUFNLGVBQWUsV0FBVyxHQUFHLElBQUksQ0FBQztVQUN4QyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO1VBQ2xELGtCQUFrQixDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDM0M7UUFDRCxLQUFLLGVBQWU7VUFDbEIsTUFBTSxXQUFXLFlBQVksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQzNDLE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNyRTtPQUNGLENBQUM7TUFDRixNQUFNLFlBQVk7UUFDaEIsT0FBTztVQUNMLEtBQUssZ0JBQWdCO1lBQ25CLE1BQU0sV0FBVyxZQUFZLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQyxJQUFJLFVBQVUsRUFBRTtjQUNkLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN4RDtZQUNELFFBQVEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDNUIsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7Y0FDbkIsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ3ZDO1dBQ0Y7VUFDRCxLQUFLLE9BQU87WUFDVixNQUFNLFdBQVcsWUFBWSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0MsTUFBTSxRQUFRLEtBQUssQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzdFLE9BQU8sTUFBTSxVQUFVLENBQUMsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7V0FDOUQ7U0FDRjtPQUNGLENBQUM7TUFDRixJQUFJLFVBQVUsRUFBRTtRQUNkLFNBQVMsS0FBSyxHQUFHLFNBQVMsSUFBSSxHQUFHLFdBQVcsQ0FBQztPQUM5QztNQUNELE9BQU8sU0FBUyxDQUFDO0tBQ2xCLENBQUM7SUFDRixNQUFNLFdBQVcsTUFBTSxXQUFXLEVBQUUsS0FBSztNQUN2QyxNQUFNLGNBQWMsRUFBRSxDQUFDO01BQ3ZCLE1BQU0sTUFBTSxNQUFNLENBQUM7TUFDbkIsTUFBTSxRQUFRLEVBQUUsQ0FBQztNQUNqQixJQUFJLFVBQVUsQ0FBQyxDQUFDO01BQ2hCLE1BQU0sVUFBVSxJQUFJLENBQUM7TUFDckIsTUFBTSxXQUFXLElBQUksQ0FBQztNQUN0QixNQUFNLG1CQUFtQixRQUFRLFdBQVcsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0RSxnQkFBZ0IsUUFBUSxlQUFlO1FBQ3ZDLGdCQUFnQixRQUFRLGVBQWU7T0FDeEMsQ0FBQyxDQUFDO01BQ0gsTUFBTSxjQUFjLEVBQUUsQ0FBQztNQUN2QixNQUFNLFNBQVMsUUFBUSxPQUFPLEdBQUcsUUFBUSxPQUFPLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQzlELE1BQU0sU0FBUyxNQUFNLENBQUM7UUFDcEIsZUFBZSxRQUFRLGNBQWM7UUFDckMscUJBQXFCLFFBQVEsb0JBQW9CO09BQ2xELEVBQUUsUUFBUSxPQUFPLENBQUMsQ0FBQztNQUNwQixNQUFNLFNBQVMsUUFBUSxVQUFVLEdBQUcsSUFBSSxVQUFVLEVBQUUsR0FBRyxVQUFVLE1BQU0sQ0FBQztNQUN4RSxNQUFNLG1CQUFtQixNQUFNLGlCQUFpQixFQUFFLENBQUM7TUFDbkQsTUFBTSxVQUFVLFFBQVE7UUFDdEIsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7VUFDbEIsT0FBTyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDdEMsTUFBTTtVQUNMLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLFNBQVMsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQzFHO09BQ0YsQ0FBQztNQUNGLE1BQU0sTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztNQUMvRSxNQUFNLE9BQU8sT0FBTztRQUNsQixNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLE9BQU8sYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLFlBQVksUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztPQUNsRSxDQUFDO01BQ0YsTUFBTSxZQUFZLFlBQVksYUFBYSxFQUFFLEtBQUs7UUFDaEQsSUFBSSxLQUFLLENBQUM7UUFDVixNQUFNLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUM1QyxNQUFNLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQzdCLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO1lBQ3BCLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDbEMsTUFBTTtZQUNMLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztXQUMzQjtTQUNGO1FBQ0QsT0FBTyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLFVBQVUsQ0FBQztPQUNsRCxDQUFDO01BQ0YsTUFBTSxhQUFhLE9BQU87UUFDeEIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QixPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxXQUFXLENBQUM7T0FDaEQsQ0FBQztNQUNGLE1BQU0sWUFBWSxzQkFBc0I7UUFDdEMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLO1VBQ1osSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbEIsTUFBTSxPQUFPLFlBQVksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sTUFBTSxLQUFLLEtBQUssRUFBRSxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7WUFDeEMsTUFBTSxnQkFBZ0IsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN4QyxNQUFNLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO2NBQ3BCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUMvQixNQUFNO2NBQ0wsa0JBQWtCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNyQztZQUNELElBQUksYUFBYSxLQUFLLEdBQUcsSUFBSSxRQUFRLFlBQVksRUFBRTtjQUNqRCxRQUFRLFlBQVksQ0FBQztnQkFDbkIsU0FBUyxJQUFJLElBQUk7Z0JBQ2pCLFVBQVUsSUFBSTtnQkFDZCxXQUFXLEdBQUc7ZUFDZixDQUFDLENBQUM7YUFDSjtXQUNGO1NBQ0YsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sUUFBUSxnQkFBZ0I7UUFDNUIsT0FBTyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUM3QixDQUFDO01BQ0YsTUFBTSxVQUFVLE1BQU0sUUFBUSxhQUFhLElBQUksR0FBRyxLQUFLLENBQUM7TUFDeEQsTUFBTSxjQUFjLFVBQVU7UUFDNUIsTUFBTSxLQUFLLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixPQUFPO1VBQ0wsR0FBRyxFQUFFLEVBQUU7VUFDUCxHQUFHLEVBQUUsRUFBRTtVQUNQLEdBQUcsRUFBRSxNQUFNO1VBQ1gsR0FBRyxFQUFFLE9BQU87U0FDYixDQUFDO09BQ0gsQ0FBQztNQUNGLE1BQU0sV0FBVyxrQkFBa0IsTUFBTSxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztNQUN2RSxNQUFNLFdBQVcsc0JBQXNCO1FBQ3JDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSztVQUNaLE1BQU0sT0FBTyxZQUFZLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUNyQyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztVQUNoQyxJQUFJLFFBQVEsY0FBYyxFQUFFO1lBQzFCLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztXQUN2QztTQUNGLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLFlBQVksb0JBQW9CO1FBQ3BDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSztVQUNaLE1BQU0sT0FBTyxZQUFZLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUNyQyxNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVU7WUFDMUIsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7V0FDMUIsQ0FBQyxDQUFDO1VBQ0gsSUFBSSxRQUFRLGNBQWMsRUFBRTtZQUMxQix1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDdkM7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxXQUFXLHlCQUF5QjtRQUN4QyxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQzFDLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxRQUFRLEVBQUU7VUFDWixPQUFPLEtBQUssQ0FBQyxZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3BFLE1BQU07VUFDTCxPQUFPLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztVQUN6RCxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7WUFDcEIsT0FBTyxVQUFVLENBQUM7V0FDbkI7VUFDRCxPQUFPLElBQUksTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztTQUNsRDtPQUNGLENBQUM7TUFDRixNQUFNLFVBQVUsT0FBTztRQUNyQixNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxJQUFJLEVBQUU7VUFDVCxPQUFPO1lBQ0wsR0FBRyxDQUFDO1lBQ0osR0FBRyxDQUFDO1dBQ0wsQ0FBQztTQUNIO1FBQ0QsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtVQUNoQyxJQUFJLEdBQUcsQ0FBQztTQUNUO1FBQ0QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtVQUNoQyxJQUFJLEdBQUcsQ0FBQztTQUNUO1FBQ0QsT0FBTztVQUNMLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLFlBQVksSUFBSSxJQUFJLFlBQVk7VUFDMUQsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksYUFBYSxJQUFJLElBQUksYUFBYTtTQUM3RCxDQUFDO09BQ0gsQ0FBQztNQUNGLE1BQU0sVUFBVSxPQUFPO1FBQ3JCLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsTUFBTSxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixNQUFNLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLE9BQU87VUFDTCxHQUFHLEdBQUcsRUFBRTtVQUNSLEdBQUcsR0FBRyxFQUFFO1VBQ1IsR0FBRyxJQUFJLEVBQUU7VUFDVCxHQUFHLElBQUksRUFBRTtTQUNWLENBQUM7T0FDSCxDQUFDO01BQ0YsTUFBTSxLQUFLLG1CQUFtQjtRQUM1QixJQUFJLENBQUMsR0FBRyxFQUFFO1VBQ1IsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE1BQU0sT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUs7VUFDdkIsT0FBTyxJQUFJLENBQUMsWUFBWSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDaEQsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sYUFBYSxrQ0FBa0M7UUFDbkQsTUFBTSxTQUFTLEVBQUUsQ0FBQztRQUNsQixJQUFJLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLFVBQVUsT0FBTyxLQUFLLFNBQVMsQ0FBQztRQUNoQyxNQUFNLGVBQWUsSUFBSSxLQUFLLE9BQU8sRUFBRSxTQUFTLEtBQUssTUFBTSxHQUFHLE9BQU8sRUFBRSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDM0YsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7VUFDdEIsSUFBSSxRQUFRLEtBQUssR0FBRyxFQUFFO1lBQ3BCLFdBQVcsV0FBVyxDQUFDO1dBQ3hCLE1BQU07WUFDTCxNQUFNLGNBQWMsUUFBUSxDQUFDO1lBQzdCLFdBQVcsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1dBQzFDO1NBQ0Y7UUFDRCxPQUFPLElBQUksRUFBRTtVQUNYLElBQUksSUFBSSxLQUFLLFlBQVksSUFBSSxVQUFVLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeEcsTUFBTTtXQUNQO1VBQ0QsSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDL0IsSUFBSSxPQUFPLEVBQUU7Y0FDWCxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNuQixNQUFNO2NBQ0wsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2Y7V0FDRjtVQUNELE9BQU8sSUFBSSxXQUFXLENBQUM7U0FDeEI7UUFDRCxPQUFPLE9BQU8sR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO09BQ2hDLENBQUM7TUFDRixNQUFNLFlBQVksMEJBQTBCO1FBQzFDLE1BQU0sVUFBVSxVQUFVLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEQsT0FBTyxPQUFPLElBQUksT0FBTyxPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7T0FDMUQsQ0FBQztNQUNGLE1BQU0sV0FBVywwQkFBMEI7UUFDekMsSUFBSSxPQUFPLFFBQVEsQ0FBQztRQUNwQixJQUFJLElBQUksRUFBRTtVQUNSLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sUUFBUTtjQUNiLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQzthQUMzQixDQUFDO1dBQ0g7VUFDRCxLQUFLLElBQUksV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLFdBQVcsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ25FLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtjQUN0QyxPQUFPLFFBQVEsQ0FBQzthQUNqQjtXQUNGO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztPQUNiLENBQUM7TUFDRixNQUFNLFVBQVUsb0JBQW9CLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO01BQzVFLE1BQU0sVUFBVSxvQkFBb0IsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztNQUNoRixNQUFNLGVBQWUsUUFBUSxVQUFVLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDO01BQy9ELE1BQU0sU0FBUyxxQkFBcUI7UUFDbEMsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ1gsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLFFBQVEsYUFBYSxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUNqSSxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztPQUN0RSxDQUFDO01BQ0YsTUFBTSxNQUFNLDRCQUE0QjtRQUN0QyxNQUFNLFVBQVUsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsRSxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtVQUNsQixNQUFNLFNBQVMsRUFBRSxDQUFDO1VBQ2xCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsVUFBVTtZQUNwQixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLElBQUksSUFBSSxFQUFFO2NBQ1IsTUFBTSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzFDO1dBQ0YsQ0FBQyxDQUFDO1VBQ0gsT0FBTyxNQUFNLENBQUM7U0FDZixNQUFNO1VBQ0wsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztVQUN0QixPQUFPLENBQUMsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDakQ7T0FDRixDQUFDO01BQ0YsTUFBTSxhQUFhLGdCQUFnQjtRQUNqQyxHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVE7VUFDZixNQUFNLENBQUMsS0FBSyxFQUFFLGlCQUFpQjtZQUM3QixTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztXQUM5QixDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxVQUFVLGVBQWU7UUFDN0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLO1VBQ1osTUFBTSxPQUFPLFlBQVksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3JDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDbkIsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sTUFBTSwwQ0FBMEMsR0FBRyxDQUFDLFNBQVMsRUFBRSxhQUFhO1FBQ2hGLE1BQU0sU0FBUyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQy9ELElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFO1VBQ3hCLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDM0I7UUFDRCxJQUFJLElBQUksRUFBRTtVQUNSLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxTQUFTLEVBQUU7WUFDcEMsTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDMUIsTUFBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6QixPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1dBQ3ZCO1NBQ0Y7UUFDRCxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztPQUN6RCxDQUFDLENBQUM7TUFDSCxNQUFNLFNBQVMsdUJBQXVCLEdBQUcsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztNQUM1RixNQUFNLFNBQVMsUUFBUSxPQUFPLENBQUM7TUFDL0IsTUFBTSxTQUFTLFFBQVEsYUFBYSxDQUFDO01BQ3JDLE1BQU0sYUFBYSxjQUFjLE9BQU8sRUFBRSxLQUFLO1FBQzdDLElBQUksVUFBVSxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxFQUFFO1VBQ3ZCLElBQUksaUJBQWlCLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLFdBQVcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztXQUN4RDtTQUNGO1FBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtVQUM1RCxPQUFPLE9BQU8sR0FBRyxLQUFLLENBQUM7U0FDeEIsTUFBTTtVQUNMLE9BQU8sT0FBTyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7U0FDakQ7T0FDRixDQUFDO01BQ0YsTUFBTSxpQkFBaUIsUUFBUTtRQUM3QixNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsTUFBTSxPQUFPLEdBQUcsdUJBQXVCLEVBQUUsQ0FBQztRQUMxQyxJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QixJQUFJLElBQUksRUFBRTtVQUNSLFNBQVMsVUFBVSxHQUFHLElBQUksQ0FBQztTQUM1QjtRQUNELElBQUksSUFBSSxDQUFDO1FBQ1QsT0FBTyxPQUFPLFNBQVMsV0FBVyxFQUFFO1VBQ2xDLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hCO1FBQ0QsSUFBSSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUM7T0FDYixDQUFDO01BQ0YsTUFBTSxTQUFTLHdCQUF3QjtRQUNyQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSztVQUNwQixNQUFNLFFBQVEsWUFBWSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDdEMsSUFBSSxZQUFZLEVBQUU7WUFDaEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTO2NBQ2pDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFO2dCQUM3QyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7ZUFDakIsTUFBTTtnQkFDTCxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2VBQ3hCO2FBQ0YsQ0FBQyxDQUFDO1dBQ0o7VUFDRCxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7VUFDaEIsT0FBTyxLQUFLLElBQUksQ0FBQztTQUNsQixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxtQkFBbUIsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUs7UUFDeEMsTUFBTSxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQzNCLEtBQUssSUFBSSxJQUFJLEtBQUssT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1VBQzFDLENBQUMsb0JBQW9CLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0QztPQUNGLENBQUMsQ0FBQztNQUNILE1BQU0sYUFBYSxXQUFXLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ3BELE1BQU0saUJBQWlCLHFCQUFxQixNQUFNLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDOUUsTUFBTSxXQUFXLFdBQVc7UUFDMUIsSUFBSSxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksR0FBRyxLQUFLLFFBQVEsRUFBRTtVQUM3QyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN4QixPQUFPO1dBQ1I7VUFDRCxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQzdCO1FBQ0QsSUFBSSxXQUFXLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFFBQVEsRUFBRTtVQUNiLFdBQVcsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7VUFDdEMsUUFBUSxHQUFHLEdBQUcsa0JBQWtCLENBQUM7VUFDakMsUUFBUSxLQUFLLEdBQUcsVUFBVSxDQUFDO1VBQzNCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQztVQUN0QixJQUFJLElBQUksV0FBVyxFQUFFO1lBQ25CLElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLFdBQVcsQ0FBQyxDQUFDO1dBQzlDLE1BQU07WUFDTCxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztXQUM1QjtTQUNGO1FBQ0QsSUFBSSxRQUFRLFdBQVcsRUFBRTtVQUN2QixRQUFRLFdBQVcsUUFBUSxJQUFJLE9BQU8sQ0FBQztTQUN4QyxNQUFNO1VBQ0wsUUFBUSxZQUFZLENBQUMsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNuRDtPQUNGLENBQUM7TUFDRixNQUFNLFVBQVUsUUFBUTtRQUN0QixJQUFJLENBQUMsSUFBSSxFQUFFO1VBQ1QsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPO1VBQzdCLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7VUFDbEIsZ0JBQWdCLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hDLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLGNBQWMscUJBQXFCO1FBQ3ZDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSztVQUNaLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2xCLE1BQU0sT0FBTyxZQUFZLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0IsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLO2NBQ25CLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN4QixNQUFNLEtBQUssS0FBSyxHQUFHLEtBQUssR0FBRyxRQUFRLENBQUM7Z0JBQ3BDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7ZUFDYixNQUFNO2dCQUNMLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7ZUFDbkI7YUFDRixDQUFDLENBQUM7V0FDSjtTQUNGLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLFdBQVcsY0FBYztRQUM3QixXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUM3QixDQUFDO01BQ0YsTUFBTSxjQUFjLGNBQWM7UUFDaEMsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDOUIsQ0FBQztNQUNGLE1BQU0sV0FBVyxjQUFjO1FBQzdCLE1BQU0sT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkIsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDbEUsQ0FBQztNQUNGLE1BQU0sT0FBTyxPQUFPO1FBQ2xCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxRQUFRLENBQUMsWUFBWSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztPQUM3RCxDQUFDO01BQ0YsTUFBTSxPQUFPLE9BQU87UUFDbEIsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLEtBQUssQ0FBQyxZQUFZLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztPQUNsRSxDQUFDO01BQ0YsTUFBTSxXQUFXLE9BQU87UUFDdEIsTUFBTSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztPQUNyRSxDQUFDO01BQ0YsTUFBTSxXQUFXLFVBQVUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO01BQ25FLE1BQU0sZUFBZSxPQUFPO1FBQzFCLE1BQU0sT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkIsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUU7VUFDdkIsT0FBTyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNwRSxNQUFNO1VBQ0wsT0FBTyxFQUFFLENBQUM7U0FDWDtPQUNGLENBQUM7TUFDRixNQUFNLGVBQWUsZUFBZTtRQUNsQyxHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVE7VUFDZixJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7V0FDdkI7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxjQUFjLHFCQUFxQjtRQUN2QyxNQUFNLGdCQUFnQixHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckMsT0FBTyxHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVE7VUFDdkIsTUFBTSxTQUFTLGFBQWEsS0FBSyxJQUFJLElBQUksYUFBYSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLGFBQWEsV0FBVyxDQUFDO1VBQ3RHLE1BQU0sY0FBYyxhQUFhLEtBQUssSUFBSSxJQUFJLGFBQWEsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxhQUFhLFlBQVksQ0FBQztVQUM1RyxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksV0FBVyxFQUFFO2NBQ2YsTUFBTSxhQUFhLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2FBQ3hDLE1BQU07Y0FDTCxNQUFNLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMxQjtXQUNGO1VBQ0QsT0FBTyxJQUFJLENBQUM7U0FDYixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxVQUFVLGtDQUFrQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU87UUFDbkUsSUFBSSxFQUFFLENBQUM7UUFDUCxNQUFNLFdBQVcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUNyRSxJQUFJLFlBQVksRUFBRTtVQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLEVBQUUsUUFBUTtZQUNuQyxRQUFRLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUM1QixDQUFDLENBQUM7U0FDSjtRQUNELENBQUMsS0FBSyxHQUFHLFdBQVcsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxRixPQUFPLEdBQUcsQ0FBQztPQUNaLENBQUMsQ0FBQztNQUNILE1BQU0sU0FBUyxlQUFlO1FBQzVCLElBQUksR0FBRyxTQUFTLEtBQUssSUFBSSxZQUFZLEVBQUUsRUFBRTtVQUN2QyxNQUFNLFNBQVMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQzVCLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsWUFBWTtZQUNsQyxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsU0FBUyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxTQUFTLENBQUMsQ0FBQyxDQUFDO1dBQ3pFLENBQUMsQ0FBQztVQUNILE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1VBQzNCLE9BQU8sTUFBTSxDQUFDO1NBQ2YsTUFBTTtVQUNMLE9BQU8sR0FBRyxDQUFDO1NBQ1o7T0FDRixDQUFDO01BQ0YsTUFBTSxxQkFBcUIsVUFBVTtRQUNuQyxJQUFJLEtBQUssQ0FBQyxDQUFDO1FBQ1gsT0FBTyxFQUFFLEVBQUU7VUFDVCxJQUFJLEtBQUssQ0FBQyxDQUFDO1VBQ1gsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN0QixLQUFLLEVBQUUsV0FBVyxDQUFDO1dBQ3BCO1VBQ0QsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2IsTUFBTTtXQUNQO1VBQ0QsS0FBSyxFQUFFLFdBQVcsQ0FBQztTQUNwQjtRQUNELElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUU7VUFDMUIsT0FBTyxDQUFDLGNBQWMsZ0JBQWdCLENBQUM7U0FDeEMsTUFBTTtVQUNMLE9BQU8sRUFBRSxDQUFDO1NBQ1g7T0FDRixDQUFDO01BQ0YsTUFBTSxvQkFBb0IsUUFBUTtRQUNoQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUNyQixNQUFNLGdCQUFnQixJQUFJLFNBQVMsWUFBWSxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1VBQy9HLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLElBQUksYUFBYSxFQUFFO1lBQ3BGLE9BQU8sSUFBSSxDQUFDO1dBQ2I7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFDO09BQ2QsQ0FBQztNQUNGLE1BQU0sVUFBVSw2QkFBNkI7UUFDM0MsSUFBSSxVQUFVLENBQUMsQ0FBQztRQUNoQixJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFO1VBQzNCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxNQUFNLGFBQWEsSUFBSSxXQUFXLENBQUM7UUFDbkMsSUFBSSxVQUFVLEVBQUU7VUFDZCxNQUFNLFNBQVMsSUFBSSxhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1VBQ25ELE1BQU0scUJBQXFCLE1BQU0sR0FBRyxNQUFNLHNCQUFzQixFQUFFLEdBQUcsRUFBRSxDQUFDO1VBQ3hFLE1BQU0sbUJBQW1CLFFBQVEsS0FBSyxNQUFNLEdBQUcsTUFBTSxvQkFBb0IsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1VBQ3BGLElBQUksV0FBVyxVQUFVLENBQUM7VUFDMUIsR0FBRztZQUNELElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2NBQ3pCLE1BQU0sV0FBVyxRQUFRLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2NBQ3pELElBQUksUUFBUSxFQUFFO2dCQUNaLFdBQVcsTUFBTSxLQUFLLENBQUMsUUFBUSxLQUFLLEtBQUssQ0FBQyxDQUFDO2dCQUMzQyxTQUFTO2VBQ1Y7Y0FDRCxNQUFNLE9BQU8sUUFBUSxTQUFTLFlBQVksRUFBRSxDQUFDO2NBQzdDLElBQUksZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzlDLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtrQkFDakIsT0FBTyxFQUFFLENBQUM7a0JBQ1YsV0FBVyxNQUFNLEtBQUssRUFBRSxDQUFDO2tCQUN6QixTQUFTO2lCQUNWO2dCQUNELE9BQU8sS0FBSyxDQUFDO2VBQ2Q7Y0FDRCxJQUFJLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUMvQixPQUFPLEtBQUssQ0FBQztlQUNkO2FBQ0Y7WUFDRCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtjQUN2QixPQUFPLEtBQUssQ0FBQzthQUNkO1lBQ0QsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLEVBQUU7Y0FDbEssT0FBTyxLQUFLLENBQUM7YUFDZDtZQUNELElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsV0FBVyxJQUFJLGtCQUFrQixDQUFDLFFBQVEsV0FBVyxTQUFTLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFO2NBQ3BJLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFDRCxXQUFXLE1BQU0sS0FBSyxFQUFFLENBQUM7V0FDMUIsUUFBUSxRQUFRLEVBQUU7U0FDcEI7UUFDRCxPQUFPLE9BQU8sSUFBSSxDQUFDLENBQUM7T0FDckIsQ0FBQztNQUNGLE1BQU0sWUFBWSxNQUFNLEdBQUcsWUFBWSxFQUFFLENBQUM7TUFDMUMsTUFBTSxRQUFRLHlDQUF5QztRQUNyRCxJQUFJLFFBQVEsU0FBUyxFQUFFLENBQUM7UUFDeEIsSUFBSSxjQUFjLENBQUM7UUFDbkIsSUFBSSxhQUFhLENBQUM7UUFDbEIsSUFBSSxTQUFTLElBQUksUUFBUSxJQUFJLFNBQVMsV0FBVyxJQUFJLFFBQVEsV0FBVyxFQUFFO1VBQ3hFLE1BQU0sYUFBYSxTQUFTLFdBQVcsQ0FBQztVQUN4QyxLQUFLLFNBQVMsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7VUFDckQsS0FBSyxPQUFPLENBQUMsUUFBUSxXQUFXLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7VUFDM0QsaUJBQWlCLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztVQUN6QyxRQUFRLFNBQVMsRUFBRSxDQUFDO1VBQ3BCLEtBQUssU0FBUyxDQUFDLFFBQVEsV0FBVyxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztVQUNqRSxLQUFLLE9BQU8sQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1VBQ3ZELGdCQUFnQixLQUFLLGdCQUFnQixFQUFFLENBQUM7VUFDeEMsVUFBVSxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztVQUNuRSxJQUFJLGNBQWMsRUFBRTtZQUNsQixVQUFVLGFBQWEsQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUM7V0FDcEQsTUFBTTtZQUNMLFVBQVUsYUFBYSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztXQUM5QztVQUNELFVBQVUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7VUFDbEUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1VBQ2xCLE9BQU8sY0FBYyxJQUFJLFFBQVEsQ0FBQztTQUNuQyxNQUFNO1VBQ0wsT0FBTyxTQUFTLENBQUM7U0FDbEI7T0FDRixDQUFDO01BQ0YsTUFBTSxPQUFPLCtCQUErQjtRQUMxQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtVQUNyQixJQUFJLElBQUksTUFBTSxPQUFPLENBQUM7VUFDdEIsTUFBTSxLQUFLLEVBQUUsQ0FBQztVQUNkLE9BQU8sQ0FBQyxFQUFFLEVBQUU7WUFDVixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1dBQzVDO1VBQ0QsT0FBTyxFQUFFLENBQUM7U0FDWCxNQUFNO1VBQ0wsSUFBSSxRQUFRLFFBQVEsS0FBSyxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sS0FBSyxHQUFHLENBQUMsRUFBRTtZQUMxRCxXQUFXLEtBQUssQ0FBQztjQUNmLE1BQU07Y0FDTixJQUFJO2NBQ0osSUFBSTtjQUNKLEtBQUs7YUFDTixDQUFDLENBQUM7V0FDSjtVQUNELE9BQU8sTUFBTSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDO1NBQ3ZEO09BQ0YsQ0FBQztNQUNGLE1BQU0sU0FBUyx3QkFBd0I7UUFDckMsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7VUFDckIsSUFBSSxJQUFJLE1BQU0sT0FBTyxDQUFDO1VBQ3RCLE1BQU0sS0FBSyxFQUFFLENBQUM7VUFDZCxPQUFPLENBQUMsRUFBRSxFQUFFO1lBQ1YsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1dBQ3ZDO1VBQ0QsT0FBTyxFQUFFLENBQUM7U0FDWCxNQUFNO1VBQ0wsSUFBSSxXQUFXLE9BQU8sR0FBRyxDQUFDLEtBQUssTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDaEUsSUFBSSxJQUFJLFdBQVcsT0FBTyxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Y0FDVixNQUFNLG1DQUFtQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUMzRCxJQUFJLE1BQU0sS0FBSyxXQUFXLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLENBQUMsRUFBRTtnQkFDNUYsTUFBTSxPQUFPLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztlQUNsRDthQUNGO1dBQ0Y7VUFDRCxPQUFPLE1BQU0sT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDMUM7T0FDRixDQUFDO01BQ0YsTUFBTSxXQUFXLHVCQUF1QixNQUFNLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQzNFLE1BQU0sT0FBTyx1QkFBdUIsTUFBTSxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztNQUN2RSxNQUFNLHFCQUFxQixRQUFRO1FBQ2pDLElBQUksSUFBSSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUM3QixNQUFNLGtCQUFrQixJQUFJLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1VBQ3RFLElBQUksZUFBZSxJQUFJLGVBQWUsS0FBSyxTQUFTLEVBQUU7WUFDcEQsT0FBTyxlQUFlLENBQUM7V0FDeEI7VUFDRCxPQUFPLElBQUksZ0JBQWdCLEtBQUssU0FBUyxHQUFHLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1NBQ3pFLE1BQU07VUFDTCxPQUFPLElBQUksQ0FBQztTQUNiO09BQ0YsQ0FBQztNQUNGLE1BQU0sMkJBQTJCLFFBQVE7UUFDdkMsTUFBTSxPQUFPLE9BQU8sRUFBRSxDQUFDO1FBQ3ZCLElBQUksUUFBUSxJQUFJLENBQUM7UUFDakIsS0FBSyxJQUFJLFdBQVcsSUFBSSxFQUFFLFFBQVEsSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFLFdBQVcsUUFBUSxXQUFXLEVBQUU7VUFDdkYsUUFBUSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztVQUNyQyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7WUFDbEIsTUFBTTtXQUNQO1NBQ0Y7UUFDRCxPQUFPLEtBQUssQ0FBQztPQUNkLENBQUM7TUFDRixNQUFNLGFBQWEsUUFBUTtRQUN6QixJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUN2QixNQUFNLFFBQVEsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLGNBQWMsQ0FBQztVQUM1RCxPQUFPLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxZQUFZLENBQUMsWUFBWSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUMxRSxNQUFNO1VBQ0wsT0FBTyxLQUFLLENBQUM7U0FDZDtPQUNGLENBQUM7TUFDRixNQUFNLFVBQVUsTUFBTTtRQUNwQixJQUFJLFdBQVcsT0FBTyxHQUFHLENBQUMsRUFBRTtVQUMxQixJQUFJLElBQUksV0FBVyxPQUFPLENBQUM7VUFDM0IsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUNWLE1BQU0sbUNBQW1DLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNELE1BQU0sT0FBTyxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7V0FDbEQ7U0FDRjtRQUNELE1BQU0sQ0FBQyxLQUFLLEVBQUUsWUFBWTtVQUN4QixnQkFBZ0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQzdCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ25CLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLFlBQVksa0JBQWtCO1FBQ2xDLE9BQU8sSUFBSSxLQUFLLE1BQU0sSUFBSSxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUNqRCxDQUFDO01BQ0YsTUFBTSxVQUFVLEtBQUssa0JBQWtCLEdBQUcsQ0FBQyxlQUFlLFNBQVMsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLFlBQVksR0FBRyxrQkFBa0IsR0FBRyxDQUFDLGFBQWEsU0FBUyxHQUFHLGVBQWUsR0FBRyxDQUFDLFVBQVUsQ0FBQztNQUN2TCxNQUFNLE9BQU87UUFDWCxHQUFHO1FBQ0gsUUFBUTtRQUNSLEdBQUc7UUFDSCxLQUFLO1FBQ0wsT0FBTztRQUNQLFFBQVE7UUFDUixnQkFBZ0I7UUFDaEIsV0FBVztRQUNYLE1BQU07UUFDTixNQUFNO1FBQ04sTUFBTTtRQUNOLFNBQVMsT0FBTztRQUNoQixNQUFNLElBQUk7UUFDVixLQUFLO1FBQ0wsT0FBTztRQUNQLFdBQVc7UUFDWCxPQUFPO1FBQ1AsT0FBTztRQUNQLFNBQVM7UUFDVCxZQUFZLFVBQVU7UUFDdEIsR0FBRztRQUNILE9BQU87UUFDUCxPQUFPO1FBQ1AsTUFBTTtRQUNOLEVBQUU7UUFDRixHQUFHO1FBQ0gsTUFBTTtRQUNOLFVBQVU7UUFDVixjQUFjO1FBQ2QsTUFBTTtRQUNOLFFBQVE7UUFDUixVQUFVLFFBQVE7UUFDbEIsU0FBUztRQUNULGdCQUFnQjtRQUNoQixTQUFTO1FBQ1QsVUFBVTtRQUNWLFNBQVM7UUFDVCxRQUFRLFFBQVE7UUFDaEIsVUFBVTtRQUNWLGNBQWM7UUFDZCxRQUFRO1FBQ1IsT0FBTztRQUNQLFFBQVE7UUFDUixXQUFXO1FBQ1gsUUFBUTtRQUNSLFdBQVc7UUFDWCxJQUFJO1FBQ0osSUFBSTtRQUNKLFFBQVE7UUFDUixRQUFRO1FBQ1IsT0FBTztRQUNQLFlBQVk7UUFDWixZQUFZO1FBQ1osTUFBTTtRQUNOLE1BQU07UUFDTixXQUFXO1FBQ1gsT0FBTztRQUNQLE1BQU07UUFDTixrQkFBa0I7UUFDbEIsR0FBRztRQUNILFVBQVU7UUFDVixPQUFPO1FBQ1AsU0FBUztRQUNULFdBQVcsYUFBYTtRQUN4QixLQUFLO1FBQ0wsTUFBTSxJQUFJO1FBQ1YsUUFBUSxNQUFNO1FBQ2QsSUFBSTtRQUNKLFFBQVE7UUFDUixrQkFBa0I7UUFDbEIsd0JBQXdCO1FBQ3hCLFVBQVU7UUFDVixPQUFPO1FBQ1AsU0FBUztRQUNULE9BQU87T0FDUixDQUFDO01BQ0YsTUFBTSxZQUFZLGNBQWMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ25FLE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQztJQUNGLFFBQVEsSUFBSSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQyxRQUFRLFVBQVUsR0FBRyxhQUFhLENBQUM7O0lBRW5DLE1BQU0sUUFBUSxRQUFRLElBQUksQ0FBQztJQUMzQixNQUFNLFNBQVMsQ0FBQyxDQUFDO0lBQ2pCLE1BQU0sVUFBVSxDQUFDLENBQUM7SUFDbEIsTUFBTSxTQUFTLENBQUMsQ0FBQztJQUNqQixNQUFNLFNBQVMsQ0FBQyxDQUFDO0lBQ2pCLG1CQUFtQjtNQUNqQixXQUFXLENBQUMsV0FBVyxFQUFFLEVBQUU7UUFDekIsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztRQUNoQyxJQUFJLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUMvQixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDO09BQzFCO01BQ0Qsa0JBQWtCLGlCQUFpQjtRQUNqQyxJQUFJLFNBQVMsZUFBZSxHQUFHLGNBQWMsQ0FBQztPQUMvQztNQUNELFVBQVUsTUFBTTtRQUNkLE9BQU8sSUFBSSxPQUFPLENBQUMscUJBQXFCO1VBQ3RDLE1BQU0sTUFBTSxLQUFLLENBQUM7VUFDbEIsSUFBSSxHQUFHLENBQUM7VUFDUixNQUFNLFVBQVUsTUFBTTtZQUNwQixHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNmLElBQUksR0FBRyxFQUFFO2NBQ1AsR0FBRyxRQUFRLEdBQUcsR0FBRyxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUM7YUFDdkM7V0FDRixDQUFDO1VBQ0YsTUFBTSxPQUFPLE1BQU07WUFDakIsT0FBTyxFQUFFLENBQUM7WUFDVixPQUFPLEVBQUUsQ0FBQztXQUNYLENBQUM7VUFDRixNQUFNLFFBQVEsTUFBTTtZQUNsQixPQUFPLEVBQUUsQ0FBQztZQUNWLE1BQU0sQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLENBQUMsQ0FBQztXQUN6QyxDQUFDO1VBQ0YsTUFBTSxLQUFLLEdBQUcsU0FBUyxFQUFFLENBQUM7VUFDMUIsTUFBTSxRQUFRLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztVQUN2QyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7VUFDWixHQUFHLEtBQUssR0FBRyxpQkFBaUIsQ0FBQztVQUM3QixHQUFHLElBQUksR0FBRyxLQUFLLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQ3JDLElBQUksSUFBSSxTQUFTLGVBQWUsRUFBRTtZQUNoQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxTQUFTLGVBQWUsQ0FBQyxDQUFDO1dBQ3BFO1VBQ0QsR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDO1VBQ2xCLEdBQUcsUUFBUSxHQUFHLEtBQUssQ0FBQztVQUNwQixDQUFDLFFBQVEscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxLQUFLLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM5RSxDQUFDLENBQUM7T0FDSjtNQUNELE1BQU0sTUFBTTtRQUNWLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssTUFBTSxDQUFDO09BQ3BDO01BQ0QsUUFBUSxNQUFNO1FBQ1osSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO09BQzNCO01BQ0QsR0FBRyxNQUFNO1FBQ1AsTUFBTSxPQUFPLElBQUksQ0FBQztRQUNsQixJQUFJLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLE1BQU0sUUFBUSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7VUFDdkIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO1NBQzNCO1FBQ0QsT0FBTyxJQUFJLE9BQU8sQ0FBQyxxQkFBcUI7VUFDdEMsSUFBSSxDQUFDLElBQUksc0JBQXNCLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDcEMsSUFBSSxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7V0FDdEM7VUFDRCxJQUFJLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDbkMsT0FBTztZQUNQLE1BQU07V0FDUCxDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7T0FDSjtNQUNELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDdEI7TUFDRCxNQUFNLE1BQU07UUFDVixPQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUN4QztNQUNELFNBQVMsR0FBRztRQUNWLE1BQU0sUUFBUSxJQUFJLE1BQU0sQ0FBQztRQUN6QixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsT0FBTyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztPQUNoQztNQUNELFdBQVcsVUFBVTtRQUNuQixNQUFNLE9BQU8sSUFBSSxDQUFDO1FBQ2xCLE1BQU0sZ0JBQWdCLGVBQWU7VUFDbkMsS0FBSyxDQUFDLElBQUksc0JBQXNCLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhO1lBQ3ZELE1BQU0sQ0FBQyxTQUFTLEVBQUUsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztXQUNwRCxDQUFDLENBQUM7VUFDSCxPQUFPLElBQUksc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDeEMsQ0FBQztRQUNGLE1BQU0saUJBQWlCLFdBQVc7VUFDaEMsTUFBTSxXQUFXLFFBQVEsQ0FBQyxPQUFPLEVBQUUsVUFBVSxNQUFNLE9BQU8sS0FBSyxVQUFVLENBQUMsQ0FBQztVQUMzRSxJQUFJLFFBQVEsT0FBTyxHQUFHLENBQUMsRUFBRTtZQUN2QixPQUFPLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUM5RixNQUFNO1lBQ0wsT0FBTyxPQUFPLFFBQVEsRUFBRSxDQUFDO1dBQzFCO1NBQ0YsQ0FBQztRQUNGLE1BQU0sT0FBTyxRQUFRLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTztVQUN6RCxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLE1BQU0sRUFBRTtZQUMvQixhQUFhLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLE9BQU8sT0FBTyxRQUFRLEVBQUUsQ0FBQztXQUMxQixNQUFNLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssTUFBTSxFQUFFO1lBQ3RDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDN0IsT0FBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztXQUM1QixNQUFNO1lBQ0wsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDO1lBQzNCLE9BQU8sSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNO2NBQ3JDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztjQUMxQixhQUFhLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2NBQzlCLE1BQU0sUUFBUSxJQUFJLE1BQU0sQ0FBQztjQUN6QixJQUFJLEtBQUssT0FBTyxHQUFHLENBQUMsRUFBRTtnQkFDcEIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2VBQ3pDLE1BQU07Z0JBQ0wsT0FBTyxPQUFPLFFBQVEsRUFBRSxDQUFDO2VBQzFCO2FBQ0YsRUFBRSxNQUFNO2NBQ1AsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO2NBQzFCLGFBQWEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7Y0FDN0IsT0FBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM1QixDQUFDLENBQUM7V0FDSjtTQUNGLENBQUMsQ0FBQyxDQUFDO1FBQ0osTUFBTSxlQUFlLFFBQVE7VUFDM0IsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO1VBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVztZQUNoQyxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDckIsTUFBTSxpQkFBaUIsSUFBSSxxQkFBcUIsTUFBTSxFQUFFLENBQUM7WUFDekQsUUFBUSxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QyxPQUFPLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztXQUNoQyxDQUFDLENBQUM7U0FDSixDQUFDO1FBQ0YsTUFBTSxnQkFBZ0IsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLElBQUksSUFBSSxRQUFRLEVBQUU7VUFDaEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxxQkFBcUI7WUFDdEMsSUFBSSxxQkFBcUIsS0FBSyxDQUFDLE1BQU07Y0FDbkMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQ25ELENBQUMsQ0FBQztXQUNKLENBQUMsQ0FBQztTQUNKLE1BQU07VUFDTCxPQUFPLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNwQztPQUNGO0tBQ0Y7SUFDRCxZQUFZLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDOztJQUUvQyxNQUFNLE9BQU8sV0FBVztNQUN0QixJQUFJLFFBQVEsT0FBTyxDQUFDO01BQ3BCLE1BQU0sTUFBTSxNQUFNO1FBQ2hCLE9BQU8sS0FBSyxDQUFDO09BQ2QsQ0FBQztNQUNGLE1BQU0sTUFBTSxLQUFLO1FBQ2YsUUFBUSxDQUFDLENBQUM7T0FDWCxDQUFDO01BQ0YsT0FBTztRQUNMLEdBQUc7UUFDSCxHQUFHO09BQ0osQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxlQUFlLGlCQUFpQjtNQUNwQyxNQUFNLGFBQWEsS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDdkMsT0FBTyxVQUFVLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUM7S0FDOUUsQ0FBQztJQUNGLE1BQU0sUUFBUSxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hELE1BQU0sY0FBYyxPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDNUQsTUFBTSxPQUFPLEVBQUUsQ0FBQztJQUNoQixNQUFNLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLE1BQU0sa0JBQWtCLE1BQU0sS0FBSyxDQUFDLElBQUksRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDLENBQUM7SUFDN0QsTUFBTSxZQUFZLE1BQU0sS0FBSyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0QsTUFBTSxVQUFVLFdBQVc7TUFDekIsSUFBSSxPQUFPLEVBQUU7UUFDWCxXQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztPQUMxQjtLQUNGLENBQUM7SUFDRixNQUFNLFVBQVUsTUFBTSxXQUFXLElBQUksRUFBRSxDQUFDO0lBQ3hDLE1BQU0sUUFBUSxpQkFBaUI7TUFDN0IsSUFBSSxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUMxQixJQUFJLENBQUMsUUFBUSxFQUFFO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDO09BQzVCO01BQ0QsTUFBTSxVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxJQUFJLFlBQVksRUFBRSxDQUFDLENBQUM7TUFDL0QsTUFBTSxDQUFDLEtBQUssRUFBRSx1QkFBdUI7UUFDbkMsTUFBTSxTQUFTLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbEMsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUU7VUFDcEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDekIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQztXQUNoQztVQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUM7U0FDOUIsTUFBTTtVQUNMLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUM7U0FDaEM7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxZQUFZLFFBQVE7TUFDeEIsTUFBTSxXQUFXLGVBQWUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDN0MsTUFBTSxXQUFXLE9BQU87UUFDdEIsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7VUFDbkIsT0FBTyxNQUFNLFVBQVUsU0FBUyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDNUM7UUFDRCxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO09BQ3RDLENBQUM7TUFDRixNQUFNLFVBQVUsUUFBUSxJQUFJLEtBQUssRUFBRSxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQztNQUMzRSxNQUFNLGNBQWMsUUFBUTtRQUMxQixNQUFNLFVBQVUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO09BQ3JJLENBQUM7TUFDRixNQUFNLGdCQUFnQixPQUFPLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDO01BQy9ELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2pCLE9BQU8sRUFBRSxDQUFDO09BQ1g7TUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNmLE9BQU8sUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7T0FDM0I7TUFDRCxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNyQixNQUFNLFNBQVMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsTUFBTSxhQUFhLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxZQUFZLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVILE9BQU8sYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO09BQ2xDO01BQ0QsT0FBTyxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDekMsQ0FBQztJQUNGLE1BQU0sVUFBVSxNQUFNLGVBQWUsRUFBRSxLQUFLLENBQUMsU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQztJQUN6RyxNQUFNLFVBQVUsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFDLE1BQU0sT0FBTztNQUNYLFNBQVMsU0FBUztNQUNsQixPQUFPO01BQ1AsT0FBTztNQUNQLEtBQUssS0FBSztNQUNWLFNBQVM7TUFDVCxPQUFPLE9BQU87TUFDZCxPQUFPO0tBQ1IsQ0FBQzs7SUFFRixNQUFNLGVBQWUsTUFBTTtNQUN6QixNQUFNLFFBQVEsRUFBRSxDQUFDO01BQ2pCLE1BQU0sT0FBTyxFQUFFLENBQUM7TUFDaEIsTUFBTSxTQUFTLEVBQUUsQ0FBQztNQUNsQixNQUFNLGFBQWEsRUFBRSxDQUFDO01BQ3RCLE1BQU0sZUFBZSxpQkFBaUI7UUFDcEMsTUFBTSxtQkFBbUIsUUFBUSxDQUFDLFVBQVUsRUFBRSxZQUFZLFFBQVEsS0FBSyxLQUFLLElBQUksSUFBSSxRQUFRLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQztRQUM5RyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsWUFBWSxRQUFRLFFBQVEsRUFBRSxDQUFDLENBQUM7T0FDMUQsQ0FBQztNQUNGLE1BQU0sV0FBVyxRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDM0MsTUFBTSxVQUFVLFFBQVEsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztNQUM1QyxNQUFNLE1BQU0sUUFBUTtRQUNsQixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUNoQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQzlCO1FBQ0QsT0FBTyxTQUFTLENBQUM7T0FDbEIsQ0FBQztNQUNGLE1BQU0sbUJBQW1CLHFCQUFxQjtRQUM1QyxNQUFNLFdBQVcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNoQyxNQUFNLG1CQUFtQixHQUFHLElBQUksU0FBUyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUN2RCxJQUFJLENBQUMsUUFBUSxJQUFJLFNBQVMsSUFBSSxnQkFBZ0IsUUFBUSxDQUFDLEdBQUcsR0FBRyxRQUFRLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7VUFDbkYsT0FBTztTQUNSO1FBQ0QsWUFBWSxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxHQUFHLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQztPQUMxRSxDQUFDO01BQ0YsTUFBTSxrQkFBa0IscUJBQXFCO1FBQzNDLElBQUksWUFBWSxhQUFhLEtBQUssS0FBSyxFQUFFO1VBQ3ZDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2xCLGdCQUFnQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztXQUNuQyxNQUFNO1lBQ0wsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7V0FDdkU7U0FDRjtPQUNGLENBQUM7TUFDRixNQUFNLE1BQU0sZUFBZTtRQUN6QixLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRSxDQUFDO1FBQ2pDLFlBQVksQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUIsT0FBTyxLQUFLLENBQUM7T0FDZCxDQUFDO01BQ0YsTUFBTSxTQUFTLFFBQVE7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDckIsQ0FBQztNQUNGLE1BQU0sWUFBWSxrQkFBa0I7UUFDbEMsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7VUFDakIsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUc7WUFDekIsUUFBUSxFQUFFO1lBQ1YsVUFBVSxHQUFHO1lBQ2IsUUFBUSxFQUFFO1dBQ1gsR0FBRztZQUNGLFFBQVEsT0FBTyxPQUFPO1lBQ3RCLFVBQVUsR0FBRztZQUNiLFFBQVEsT0FBTyxPQUFPO1dBQ3ZCLENBQUM7U0FDSCxNQUFNO1VBQ0wsT0FBTyxHQUFHLENBQUM7U0FDWjtPQUNGLENBQUM7TUFDRixNQUFNLE9BQU8sb0JBQW9CO1FBQy9CLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ2QsT0FBTyxPQUFPLFFBQVEsRUFBRSxDQUFDO1NBQzFCO1FBQ0QsSUFBSSxZQUFZLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLEdBQUcsUUFBUSxPQUFPLEdBQUcsUUFBUSxTQUFTLEdBQUcsUUFBUSxPQUFPLENBQUM7UUFDdEcsSUFBSSxTQUFTLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7VUFDbkUsWUFBWSxZQUFZLFFBQVEsR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFDO1NBQ3BEO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsVUFBVSxDQUFDLENBQUMsRUFBRSxTQUFTLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sT0FBTyxNQUFNO1VBQ2pCLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7VUFDN0IsT0FBTyxPQUFPLFFBQVEsRUFBRSxDQUFDO1NBQzFCLENBQUM7UUFDRixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUNoQixPQUFPLElBQUksRUFBRSxDQUFDO1NBQ2YsTUFBTTtVQUNMLE9BQU8sWUFBWSxhQUFhLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVEO09BQ0YsQ0FBQztNQUNGLE1BQU0sVUFBVSxPQUFPLFFBQVEsT0FBTyxLQUFLO1FBQ3pDLElBQUksS0FBSyxLQUFLLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7VUFDdEMsT0FBTyxPQUFPLFFBQVEsRUFBRSxDQUFDO1NBQzFCLE1BQU0sSUFBSSxLQUFLLEtBQUssUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUMvQyxPQUFPLE9BQU8sUUFBUSxFQUFFLENBQUM7U0FDMUIsTUFBTTtVQUNMLE9BQU8sSUFBSSxPQUFPLENBQUMsV0FBVztZQUM1QixVQUFVLEtBQUssQ0FBQztjQUNkLElBQUk7Y0FDSixLQUFLO2NBQ0wsT0FBTzthQUNSLENBQUMsQ0FBQztXQUNKLENBQUMsQ0FBQztTQUNKO09BQ0YsQ0FBQztNQUNGLE9BQU87UUFDTCxLQUFLO1FBQ0wsSUFBSTtRQUNKLE1BQU07UUFDTixHQUFHO1FBQ0gsZUFBZTtRQUNmLEdBQUc7UUFDSCxNQUFNO1FBQ04sU0FBUztRQUNULElBQUk7UUFDSixPQUFPO09BQ1IsQ0FBQztLQUNILENBQUM7SUFDRixZQUFZLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDakMsWUFBWSxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQzFCLFlBQVksY0FBYyxHQUFHLFlBQVksRUFBRSxDQUFDO0lBQzVDLFlBQVksYUFBYSxHQUFHLFlBQVksRUFBRSxDQUFDO0lBQzNDLFlBQVksYUFBYSxHQUFHLFlBQVksRUFBRSxDQUFDOztJQUUzQyxNQUFNLFlBQVksWUFBWTtNQUM1QixNQUFNLFVBQVUsSUFBSSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQztNQUN0QyxNQUFNLFNBQVMsTUFBTSxPQUFPLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDbEQsTUFBTSxRQUFRLE1BQU07UUFDbEIsTUFBTSxFQUFFLENBQUM7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssRUFBRSxDQUFDLENBQUM7T0FDOUIsQ0FBQztNQUNGLE1BQU0sUUFBUSxNQUFNLE9BQU8sSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO01BQzNDLE1BQU0sTUFBTSxNQUFNLE9BQU8sSUFBSSxFQUFFLENBQUM7TUFDaEMsTUFBTSxNQUFNLEtBQUs7UUFDZixNQUFNLEVBQUUsQ0FBQztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDL0IsQ0FBQztNQUNGLE9BQU87UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEdBQUc7UUFDSCxHQUFHO09BQ0osQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLGFBQWEsU0FBUztNQUMxQixNQUFNLGFBQWEsSUFBSSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQztNQUN6QyxNQUFNLFNBQVMsTUFBTSxVQUFVLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUNwRSxNQUFNLFFBQVEsTUFBTTtRQUNsQixNQUFNLEVBQUUsQ0FBQztRQUNULFVBQVUsSUFBSSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQztPQUNqQyxDQUFDO01BQ0YsTUFBTSxRQUFRLE1BQU0sVUFBVSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7TUFDOUMsTUFBTSxNQUFNLE1BQU0sVUFBVSxJQUFJLEVBQUUsQ0FBQztNQUNuQyxNQUFNLE1BQU0sb0JBQW9CO1FBQzlCLE1BQU0sRUFBRSxDQUFDO1FBQ1QsVUFBVSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUNyRSxDQUFDO01BQ0YsT0FBTztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsR0FBRztRQUNILEdBQUc7T0FDSixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sVUFBVSxNQUFNO01BQ3BCLE1BQU0sVUFBVSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDaEMsTUFBTSxLQUFLLEtBQUssT0FBTyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3RDLE9BQU87UUFDTCxHQUFHLE9BQU87UUFDVixFQUFFO09BQ0gsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxVQUFVLGNBQWM7TUFDNUIsSUFBSSxRQUFRLElBQUksQ0FBQztNQUNqQixNQUFNLFNBQVMsTUFBTTtRQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO1VBQ2xCLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztVQUNwQixRQUFRLElBQUksQ0FBQztTQUNkO09BQ0YsQ0FBQztNQUNGLE1BQU0sV0FBVyxDQUFDLE9BQU8sS0FBSztRQUM1QixJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtVQUNqQixRQUFRLFVBQVUsQ0FBQyxNQUFNO1lBQ3ZCLFFBQVEsSUFBSSxDQUFDO1lBQ2IsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1dBQ3RCLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDVjtPQUNGLENBQUM7TUFDRixPQUFPO1FBQ0wsTUFBTTtRQUNOLFFBQVE7T0FDVCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sU0FBUyxjQUFjO01BQzNCLElBQUksUUFBUSxJQUFJLENBQUM7TUFDakIsTUFBTSxTQUFTLE1BQU07UUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtVQUNsQixZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7VUFDcEIsUUFBUSxJQUFJLENBQUM7U0FDZDtPQUNGLENBQUM7TUFDRixNQUFNLFdBQVcsQ0FBQyxPQUFPLEtBQUs7UUFDNUIsTUFBTSxFQUFFLENBQUM7UUFDVCxRQUFRLFVBQVUsQ0FBQyxNQUFNO1VBQ3ZCLFFBQVEsSUFBSSxDQUFDO1VBQ2IsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3RCLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDVixDQUFDO01BQ0YsT0FBTztRQUNMLE1BQU07UUFDTixRQUFRO09BQ1QsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxhQUFhLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzlDLE1BQU0saUJBQWlCLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sbUJBQW1CLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdELE1BQU0sdUJBQXVCLFFBQVEsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sd0JBQXdCLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sMkJBQTJCLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDOztJQUV2RSxNQUFNLFdBQVcsUUFBUSxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEQsTUFBTSxXQUFXLDRCQUE0QjtNQUMzQyxNQUFNLE1BQU0sTUFBTSxVQUFVLE9BQU8sRUFBRSxDQUFDO01BQ3RDLE1BQU0sUUFBUSxZQUFZLFFBQVEsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDO01BQ3ZELE1BQU0sT0FBTyxZQUFZLFFBQVEsQ0FBQyxNQUFNLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDcEQsTUFBTSxXQUFXLGNBQWMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLFVBQVUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsY0FBYyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQzFHLE1BQU0sV0FBVyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUM5RCxNQUFNLFVBQVUsU0FBUyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDOUQsT0FBTyxPQUFPLEtBQUssQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUTtRQUN2SCxNQUFNLFdBQVcsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQyxPQUFPO1VBQ0wsR0FBRztVQUNILElBQUk7VUFDSixRQUFRO1NBQ1QsQ0FBQztPQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDTixDQUFDO0lBQ0YsTUFBTSxlQUFlLFFBQVEsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMxRSxNQUFNLGlCQUFpQixnQkFBZ0IsS0FBSyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkksTUFBTSxjQUFjLGlCQUFpQjtNQUNuQyxNQUFNLE9BQU8sWUFBWSxRQUFRLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQ3BELE1BQU0sZ0JBQWdCLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDaEYsT0FBTyxRQUFRLENBQUMsYUFBYSxFQUFFLGNBQWMsQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDakYsQ0FBQztJQUNGLE1BQU0sVUFBVSxrQkFBa0I7TUFDaEMsTUFBTSxPQUFPLFlBQVksUUFBUSxDQUFDLE1BQU0sUUFBUSxFQUFFLENBQUMsQ0FBQztNQUNwRCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxjQUFjLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDekUsTUFBTSxZQUFZLEVBQUUsQ0FBQztNQUNyQixNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUs7UUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUU7VUFDNUIsTUFBTSxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1VBQ3pDLE1BQU0sZUFBZSxLQUFLLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7VUFDckQsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQztPQUNGLENBQUMsQ0FBQztNQUNILE9BQU8sU0FBUyxDQUFDO0tBQ2xCLENBQUM7O0lBRUYsTUFBTSxVQUFVLHNCQUFzQjtNQUNwQyxNQUFNLGtCQUFrQixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDakMsTUFBTSxXQUFXLE9BQU87UUFDdEIsV0FBVyxFQUFFO1FBQ2IsVUFBVSxPQUFPLEVBQUU7T0FDcEIsQ0FBQyxDQUFDO01BQ0gsTUFBTSxnQkFBZ0IsYUFBYTtRQUNqQyxlQUFlLENBQUMsSUFBSSxFQUFFLFFBQVE7VUFDNUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQ1IsT0FBTyxJQUFJLENBQUM7U0FDYixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxrQkFBa0IsYUFBYTtRQUNuQyxNQUFNLGNBQWMsZUFBZSxJQUFJLEVBQUUsQ0FBQztRQUMxQyxNQUFNLE9BQU8sS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNELE1BQU0sYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQztRQUMvQixlQUFlLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztPQUNsQyxDQUFDO01BQ0YsTUFBTSxnQkFBZ0IseUJBQXlCO1FBQzdDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsUUFBUTtVQUMxQixNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtZQUN4QyxHQUFHO1lBQ0gsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUM7V0FDekMsQ0FBQyxDQUFDLENBQUM7U0FDTCxDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxtQkFBbUIsUUFBUTtRQUMvQixhQUFhLENBQUMsSUFBSSxFQUFFLFFBQVE7VUFDMUIsTUFBTSxDQUFDLElBQUksVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQzdDLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLG1CQUFtQixnQkFBZ0I7UUFDdkMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsUUFBUTtVQUN2QyxJQUFJLEtBQUssRUFBRTtZQUNULEtBQUssQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztXQUM3QyxNQUFNO1lBQ0wsUUFBUSxDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUM7V0FDeEM7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxlQUFlLE1BQU0sQ0FBQyxNQUFNO1FBQ2hDLE1BQU0sY0FBYyxJQUFJLENBQUMsUUFBUSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsUUFBUTtVQUMxQixlQUFlLENBQUMsSUFBSSxFQUFFLFFBQVE7WUFDNUIsTUFBTSxPQUFPLElBQUksU0FBUyxJQUFJLEVBQUUsQ0FBQztZQUNqQyxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNO2NBQy9DLElBQUksS0FBSyxDQUFDLE9BQU87Z0JBQ2YsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksU0FBUyxNQUFNLEVBQUUsQ0FBQztnQkFDdEIsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO2VBQzlCLENBQUMsQ0FBQzthQUNKLEVBQUUsQ0FBQyxxQkFBcUIsS0FBSztjQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDcEIsSUFBSSxLQUFLLENBQUMsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDL0MsYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ25DLElBQUksU0FBUyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZCLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztlQUM3QjthQUNGLENBQUMsQ0FBQztZQUNILE9BQU87Y0FDTCxVQUFVLElBQUksU0FBUztjQUN2QixXQUFXLElBQUksVUFBVTthQUMxQixDQUFDO1dBQ0gsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO09BQ0osRUFBRSxFQUFFLENBQUMsQ0FBQztNQUNQLE1BQU0sR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNO1FBQ3hCLFlBQVksT0FBTyxFQUFFLENBQUM7T0FDdkIsQ0FBQyxDQUFDO01BQ0gsTUFBTSxHQUFHLENBQUMsWUFBWSxFQUFFLE1BQU07UUFDNUIsWUFBWSxTQUFTLEVBQUUsQ0FBQztPQUN6QixDQUFDLENBQUM7TUFDSCxNQUFNLGNBQWMsYUFBYTtRQUMvQixlQUFlLENBQUMsSUFBSSxFQUFFLFNBQVM7VUFDN0IsVUFBVSxJQUFJLFNBQVM7VUFDdkIsV0FBVyxJQUFJLFVBQVUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEMsQ0FBQyxDQUFDLENBQUM7T0FDTCxDQUFDO01BQ0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO0tBQ3hCLENBQUM7O0lBRUYsTUFBTSxVQUFVLHNCQUFzQjtNQUNwQyxNQUFNLG1CQUFtQixjQUFjLEVBQUUsQ0FBQztNQUMxQyxNQUFNLHFCQUFxQixRQUFRLFFBQVEsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsT0FBTyxDQUFDLENBQUM7TUFDcEcsTUFBTSx5QkFBeUIsUUFBUTtRQUNyQyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDWCxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksS0FBSyxDQUFDLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEMsTUFBTSxrQkFBa0IsUUFBUSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0SCxNQUFNLGdCQUFnQixRQUFRLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pILE1BQU0sQ0FBQyxlQUFlLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN2RCxNQUFNLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUMxSSxNQUFNLGVBQWUsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxZQUFZLE9BQU8sR0FBRyxDQUFDLEdBQUcsWUFBWSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDNUUsSUFBSSxLQUFLLENBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO09BQzdDLENBQUM7TUFDRixNQUFNLFdBQVcsWUFBWSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztNQUN0RCxNQUFNLFdBQVcsbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUUsU0FBUztRQUM5RCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtVQUN4QixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVk7WUFDeEMsSUFBSSxRQUFRLFdBQVcsS0FBSyxLQUFLLEVBQUU7Y0FDakMsSUFBSSxJQUFJLEtBQUssS0FBSyxNQUFNLEVBQUU7Z0JBQ3hCLElBQUksT0FBTyxFQUFFLENBQUM7ZUFDZixNQUFNO2dCQUNMLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO2VBQzlCO2FBQ0Y7V0FDRixDQUFDLENBQUM7U0FDSjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxXQUFXLE1BQU07TUFDckIsTUFBTSxjQUFjLEVBQUUsQ0FBQztNQUN2QixNQUFNLFdBQVcsb0JBQW9CO1FBQ25DLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRztVQUNsQixJQUFJO1VBQ0osUUFBUTtTQUNULENBQUM7T0FDSCxDQUFDO01BQ0YsTUFBTSxTQUFTLFFBQVEsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUNyRSxNQUFNLFdBQVcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7TUFDekMsT0FBTztRQUNMLFFBQVE7UUFDUixNQUFNO1FBQ04sUUFBUTtPQUNULENBQUM7S0FDSCxDQUFDOztJQUVGLElBQUksU0FBUyxDQUFDLENBQUM7SUFDZixNQUFNLGFBQWEsVUFBVTtNQUMzQixNQUFNLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztNQUN4QixNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztNQUM1QixNQUFNLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxPQUFPLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQztNQUN0RCxNQUFNLEVBQUUsQ0FBQztNQUNULE9BQU8sTUFBTSxHQUFHLEdBQUcsR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0RCxDQUFDOztJQUVGLE1BQU0sTUFBTSxzQkFBc0I7TUFDaEMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLO1FBQ25CLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDbkIsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sV0FBVyxzQkFBc0I7TUFDckMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLO1FBQ25CLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDdEIsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLFVBQVUsc0JBQXNCLFlBQVksUUFBUSxDQUFDLFFBQVEsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzRixNQUFNLFlBQVksWUFBWSxPQUFPLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sU0FBUyxZQUFZLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkQsTUFBTSxZQUFZLG1CQUFtQjtNQUNuQyxNQUFNLEtBQUssWUFBWSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDckMsTUFBTSxhQUFhLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUNyQyxRQUFRLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO01BQ3pCLE9BQU8sRUFBRSxDQUFDO0tBQ1gsQ0FBQztJQUNGLE1BQU0sU0FBUyxtQkFBbUI7TUFDaEMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDcEMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztNQUN0QixNQUFNLFdBQVcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQ3RDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDckIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQ25CLE9BQU8sRUFBRSxDQUFDO0tBQ1gsQ0FBQzs7SUFFRixNQUFNLGFBQWEsc0JBQXNCLGFBQWEsS0FBSyxLQUFLO01BQzlELE1BQU0sU0FBUyxJQUFJLGFBQWEsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDdEQsTUFBTSxPQUFPLGFBQWE7UUFDeEIsSUFBSSxJQUFJLENBQUM7UUFDVCxHQUFHO1VBQ0QsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztTQUM1QixRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUN2RCxPQUFPLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7T0FDN0MsQ0FBQztNQUNGLE9BQU87UUFDTCxTQUFTLE1BQU0sUUFBUSxLQUFLLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQy9ELE1BQU0sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3hCLE1BQU0sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3hCLE9BQU8sTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDO09BQzNCLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sYUFBYSxxQkFBcUI7TUFDdEMsTUFBTSxrQkFBa0IsVUFBVSxHQUFHLFVBQVUsR0FBRyxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUM5SCxNQUFNLE9BQU8sbUNBQW1DO1FBQzlDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ2xCLE1BQU0sWUFBWSxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDO1VBQ25ELElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3BCLE9BQU8sUUFBUSxLQUFLLENBQUM7Y0FDbkIsV0FBVyxJQUFJO2NBQ2YsUUFBUSxTQUFTO2FBQ2xCLENBQUMsQ0FBQztXQUNKO1NBQ0Y7UUFDRCxPQUFPLE1BQU0sRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxVQUFVLEVBQUUsSUFBSSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7T0FDbEYsQ0FBQztNQUNGLE1BQU0sWUFBWSxpQ0FBaUM7UUFDakQsTUFBTSxTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHLEdBQUcsUUFBUSxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDMUcsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTO1VBQ3pELFdBQVcsSUFBSTtVQUNmLFFBQVEsSUFBSSxPQUFPO1NBQ3BCLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztPQUMzQixDQUFDO01BQ0YsTUFBTSxXQUFXLGlDQUFpQztRQUNoRCxNQUFNLFNBQVMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxRQUFRLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUMxRyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVM7VUFDekQsV0FBVyxJQUFJO1VBQ2YsUUFBUSxDQUFDO1NBQ1YsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO09BQzNCLENBQUM7TUFDRixPQUFPO1FBQ0wsU0FBUztRQUNULFFBQVE7T0FDVCxDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLFVBQVUsSUFBSSxNQUFNLENBQUM7SUFDM0IsTUFBTSxVQUFVLFFBQVE7TUFDdEIsSUFBSSxDQUFDLElBQUksRUFBRTtRQUNULE9BQU87VUFDTCxNQUFNLENBQUM7VUFDUCxLQUFLLENBQUM7VUFDTixRQUFRLENBQUM7VUFDVCxPQUFPLENBQUM7VUFDUixPQUFPLENBQUM7VUFDUixRQUFRLENBQUM7U0FDVixDQUFDO09BQ0g7TUFDRCxPQUFPO1FBQ0wsTUFBTSxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUM7UUFDeEIsS0FBSyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDdEIsUUFBUSxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUM7UUFDNUIsT0FBTyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUM7UUFDMUIsT0FBTyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUM7UUFDMUIsUUFBUSxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUM7T0FDN0IsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFdBQVcsbUJBQW1CO01BQ2xDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3JCLElBQUksT0FBTyxFQUFFO1FBQ1gsSUFBSSxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUM7T0FDeEIsTUFBTTtRQUNMLElBQUksS0FBSyxHQUFHLElBQUksS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDO1FBQ25DLElBQUksTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDO09BQ3hCO01BQ0QsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ2YsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxVQUFVLGtCQUFrQixLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssSUFBSSxLQUFLLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLE9BQU8sS0FBSyxLQUFLLE9BQU8sSUFBSSxLQUFLLE1BQU0sS0FBSyxLQUFLLE1BQU0sQ0FBQztJQUN2SixNQUFNLGtCQUFrQiw2QkFBNkIsU0FBUyxJQUFJLENBQUMsSUFBSSxTQUFTLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxPQUFPLEVBQUUsS0FBSyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0gsTUFBTSxZQUFZLGtCQUFrQjtNQUNsQyxNQUFNLGFBQWEsSUFBSSxJQUFJLENBQUMsS0FBSyxPQUFPLEdBQUcsQ0FBQyxFQUFFLEtBQUssT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ2hFLElBQUksS0FBSyxPQUFPLEdBQUcsVUFBVSxHQUFHLEtBQUssSUFBSSxFQUFFO1FBQ3pDLE9BQU8sSUFBSSxDQUFDO09BQ2I7TUFDRCxJQUFJLEtBQUssSUFBSSxHQUFHLEtBQUssT0FBTyxFQUFFO1FBQzVCLE9BQU8sS0FBSyxDQUFDO09BQ2Q7TUFDRCxPQUFPLGVBQWUsQ0FBQyxLQUFLLElBQUksR0FBRyxLQUFLLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDaEUsQ0FBQztJQUNGLE1BQU0sWUFBWSxrQkFBa0I7TUFDbEMsSUFBSSxLQUFLLElBQUksR0FBRyxLQUFLLE9BQU8sRUFBRTtRQUM1QixPQUFPLElBQUksQ0FBQztPQUNiO01BQ0QsSUFBSSxLQUFLLE9BQU8sR0FBRyxLQUFLLElBQUksRUFBRTtRQUM1QixPQUFPLEtBQUssQ0FBQztPQUNkO01BQ0QsT0FBTyxlQUFlLENBQUMsS0FBSyxPQUFPLEdBQUcsS0FBSyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ2hFLENBQUM7SUFDRixNQUFNLGFBQWEsNEJBQTRCLE9BQU8sSUFBSSxJQUFJLEtBQUssSUFBSSxPQUFPLElBQUksSUFBSSxNQUFNLElBQUksT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxJQUFJLE9BQU8sQ0FBQztJQUM5SSxNQUFNLDhCQUE4QixTQUFTO01BQzNDLE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRSxlQUFlO1FBQ2pDLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxZQUFZO1VBQ3JELE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxRQUFRLEtBQUssQ0FBQyxDQUFDO1VBQ2hELE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxRQUFRLElBQUksQ0FBQyxDQUFDO1VBQzdDLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRSxRQUFRLE1BQU0sQ0FBQyxDQUFDO1VBQ25ELE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLE9BQU8sRUFBRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO1VBQ3RELE9BQU8sUUFBUSxLQUFLLENBQUM7WUFDbkIsR0FBRztZQUNILEtBQUs7WUFDTCxNQUFNO1lBQ04sSUFBSTtZQUNKLE9BQU8sS0FBSyxHQUFHLElBQUk7WUFDbkIsUUFBUSxNQUFNLEdBQUcsR0FBRztXQUNyQixDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7T0FDSixFQUFFLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUNyQixDQUFDO0lBQ0YsTUFBTSwyQkFBMkIsZ0JBQWdCO01BQy9DLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDO01BQ3BFLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDO01BQ25FLE9BQU8sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDN0QsQ0FBQztJQUNGLE1BQU0sV0FBVyxZQUFZLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQzs7SUFFcEcsTUFBTSxVQUFVLHFCQUFxQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7O0lBRXpFLE1BQU0sa0JBQWtCLFNBQVM7TUFDL0IsTUFBTSxpQkFBaUIsS0FBSyxlQUFlLEVBQUUsY0FBYyxLQUFLLFlBQVksQ0FBQztNQUM3RSxJQUFJLGNBQWMsS0FBSyxLQUFLLGFBQWEsSUFBSSxjQUFjLGNBQWMsRUFBRSxJQUFJLEtBQUssVUFBVSxLQUFLLFdBQVcsR0FBRyxDQUFDLEVBQUU7UUFDbEgsT0FBTyxjQUFjLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztPQUMvQztNQUNELE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQztJQUNGLE1BQU0sWUFBWSx1QkFBdUI7TUFDdkMsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxjQUFjLEVBQUUsRUFBRTtRQUN2RCxNQUFNLGFBQWEsU0FBUyxXQUFXLENBQUM7UUFDeEMsTUFBTSxhQUFhLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLFVBQVUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdELE9BQU8sVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO09BQy9CLE1BQU07UUFDTCxPQUFPLFNBQVMsQ0FBQztPQUNsQjtLQUNGLENBQUM7SUFDRixNQUFNLGdCQUFnQix1QkFBdUI7TUFDM0MsSUFBSSxNQUFNLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLGNBQWMsRUFBRSxFQUFFO1FBQ3JFLE9BQU8sU0FBUyxDQUFDO09BQ2xCLE1BQU07UUFDTCxPQUFPLFNBQVMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7T0FDckM7S0FDRixDQUFDOztJQUVGLE1BQU0saUJBQWlCLElBQUksTUFBTSxDQUFDLDBHQUEwRyxHQUFHLHlHQUF5RyxHQUFHLHlHQUF5RyxHQUFHLHVHQUF1RyxHQUFHLHdHQUF3RyxHQUFHLHNHQUFzRyxHQUFHLHVHQUF1RyxHQUFHLDZHQUE2RyxHQUFHLG1IQUFtSCxHQUFHLCtHQUErRyxHQUFHLGdIQUFnSCxHQUFHLCtHQUErRyxHQUFHLHFIQUFxSCxHQUFHLDZHQUE2RyxHQUFHLCtHQUErRyxHQUFHLCtHQUErRyxHQUFHLGdIQUFnSCxHQUFHLHNIQUFzSCxHQUFHLG9IQUFvSCxHQUFHLG9IQUFvSCxHQUFHLHFGQUFxRixDQUFDLENBQUM7SUFDejBFLE1BQU0sa0JBQWtCLE1BQU0sUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxjQUFjLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQzs7SUFFakcsTUFBTSxLQUFLLENBQUMsT0FBTyxLQUFLO01BQ3RCLE9BQU8sS0FBSztRQUNWLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7VUFDcEMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDZCxPQUFPLElBQUksQ0FBQztXQUNiO1NBQ0Y7UUFDRCxPQUFPLEtBQUssQ0FBQztPQUNkLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxNQUFNLENBQUMsT0FBTyxLQUFLO01BQ3ZCLE9BQU8sS0FBSztRQUNWLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7VUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNmLE9BQU8sS0FBSyxDQUFDO1dBQ2Q7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO09BQ2IsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxjQUFjLFdBQVcsQ0FBQztJQUNoQyxNQUFNLHFCQUFxQixrQkFBa0IsQ0FBQztJQUM5QyxNQUFNLFlBQVksZ0JBQWdCLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzdELE1BQU0sWUFBWSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDMUQsTUFBTSwrQkFBK0IsR0FBRyxDQUFDLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUMxRixNQUFNLFdBQVcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7SUFDL0UsTUFBTSxXQUFXLFFBQVEsQ0FBQztJQUMxQixNQUFNLFNBQVMsTUFBTSxDQUFDO0lBQ3RCLE1BQU0sY0FBYyxRQUFRLFVBQVUsQ0FBQztJQUN2QyxNQUFNLGlCQUFpQixhQUFhLENBQUM7SUFDckMsTUFBTSxnQkFBZ0IsT0FBTyxHQUFHLEdBQUcsR0FBRyxZQUFZLEVBQUUsR0FBRyxRQUFRLElBQUksVUFBVSxFQUFFLENBQUM7SUFDaEYsTUFBTSxpQkFBaUIsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksV0FBVyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckUsTUFBTSxVQUFVLE9BQU8sQ0FBQyxDQUFDLEdBQUcsU0FBUyxJQUFJLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUN0RCxNQUFNLDBCQUEwQixTQUFTO01BQ3ZDLE1BQU0sWUFBWSxLQUFLLGVBQWUsQ0FBQztNQUN2QyxNQUFNLFNBQVMsS0FBSyxZQUFZLENBQUM7TUFDakMsSUFBSSxjQUFjLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUM3RixNQUFNLE9BQU8sU0FBUyxLQUFLLENBQUM7UUFDNUIsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7VUFDeEUsT0FBTyxJQUFJLENBQUM7U0FDYjtPQUNGO01BQ0QsT0FBTyxLQUFLLENBQUM7S0FDZCxDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsVUFBVTtNQUNoQyxNQUFNLE1BQU0sTUFBTSxjQUFjLENBQUM7TUFDakMsTUFBTSxNQUFNLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUMvQixNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDeEMsTUFBTSxhQUFhLE1BQU0sV0FBVyxDQUFDO01BQ3JDLFVBQVUsYUFBYSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztNQUN4QyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDeEIsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ3RCLE1BQU0sYUFBYSxPQUFPLENBQUMsR0FBRyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7TUFDeEQsVUFBVSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDL0IsT0FBTyxVQUFVLENBQUM7S0FDbkIsQ0FBQztJQUNGLE1BQU0sa0NBQWtDLE9BQU87TUFDN0MsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDO01BQzlCLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQztNQUM1QixNQUFNLEtBQUssR0FBRyxZQUFZLENBQUM7TUFDM0IsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDO01BQ3pCLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFO1FBQ3JELE1BQU0sU0FBUyxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZCLE9BQU8sdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDeEMsTUFBTTtRQUNMLE9BQU8sSUFBSSxDQUFDO09BQ2I7S0FDRixDQUFDO0lBQ0YsTUFBTSxhQUFhLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDO0lBQ3ZGLE1BQU0sMEJBQTBCLFFBQVE7TUFDdEMsSUFBSSxFQUFFLENBQUM7TUFDUCxJQUFJLFVBQVUsQ0FBQztNQUNmLE1BQU0sY0FBYyxJQUFJLGVBQWUsRUFBRSxDQUFDO01BQzFDLElBQUksV0FBVyxPQUFPLEdBQUcsQ0FBQyxFQUFFO1FBQzFCLGFBQWEsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ3RDLE1BQU07UUFDTCxhQUFhLE9BQU8sQ0FBQyxJQUFJLHNCQUFzQixFQUFFLENBQUMsQ0FBQztPQUNwRDtNQUNELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUM1RCxPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUM5QjtNQUNELElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMzQyxPQUFPLENBQUMsS0FBSywrQkFBK0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxVQUFVLENBQUM7T0FDakc7TUFDRCxPQUFPLFVBQVUsQ0FBQztLQUNuQixDQUFDO0lBQ0YsTUFBTSwwQkFBMEIseUJBQXlCO01BQ3ZELE1BQU0sZ0JBQWdCLFFBQVEsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDcEQsYUFBYSxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ3hCLGFBQWEsTUFBTSxHQUFHLGFBQWEsS0FBSyxHQUFHLENBQUMsQ0FBQztNQUM3QyxPQUFPLGFBQWEsQ0FBQztLQUN0QixDQUFDO0lBQ0YsTUFBTSw4QkFBOEIsaUJBQWlCO01BQ25ELE1BQU0sY0FBYyxFQUFFLENBQUM7TUFDdkIsTUFBTSx3QkFBd0IsY0FBYztRQUMxQyxJQUFJLFVBQVUsT0FBTyxLQUFLLENBQUMsRUFBRTtVQUMzQixPQUFPO1NBQ1I7UUFDRCxJQUFJLFdBQVcsT0FBTyxHQUFHLENBQUMsRUFBRTtVQUMxQixJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLFdBQVcsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDNUQsT0FBTztXQUNSO1NBQ0Y7UUFDRCxXQUFXLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztPQUM5QixDQUFDO01BQ0YsTUFBTSxxQkFBcUIsdUJBQXVCO1FBQ2hELE1BQU0sUUFBUSxhQUFhLENBQUMsU0FBUyxjQUFjLENBQUMsQ0FBQztRQUNyRCxJQUFJLE1BQU0sR0FBRyxTQUFTLEtBQUssT0FBTyxFQUFFO1VBQ2xDLElBQUksZUFBZSxDQUFDLFNBQVMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7WUFDM0MsT0FBTztXQUNSO1VBQ0QsSUFBSSxlQUFlLENBQUMsU0FBUyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDL0MsS0FBSyxTQUFTLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2xDLEtBQUssT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxFQUFFO2NBQ25DLHFCQUFxQixDQUFDLHVCQUF1QixDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7Y0FDdEYsT0FBTzthQUNSO1dBQ0Y7U0FDRjtRQUNELElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTtVQUNkLEtBQUssU0FBUyxDQUFDLFNBQVMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7VUFDdEMsS0FBSyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1VBQ2hDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNuQyxxQkFBcUIsQ0FBQyx1QkFBdUIsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1dBQ3ZGO1NBQ0Y7UUFDRCxJQUFJLE1BQU0sR0FBRyxTQUFTLEtBQUssT0FBTyxFQUFFO1VBQ2xDLEtBQUssU0FBUyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztVQUNsQyxLQUFLLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1VBQ3BDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNuQyxxQkFBcUIsQ0FBQyx1QkFBdUIsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1dBQ3RGO1NBQ0Y7T0FDRixDQUFDO01BQ0YsTUFBTSxZQUFZLGFBQWEsVUFBVSxFQUFFLENBQUM7TUFDNUMsTUFBTSxTQUFTLGFBQWEsT0FBTyxFQUFFLENBQUM7TUFDdEMsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDdkIsa0JBQWtCLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sV0FBVyxDQUFDO09BQ3BCO01BQ0QsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDMUIsSUFBSSxhQUFhLFFBQVEsRUFBRSxFQUFFO1VBQzNCLE1BQU0sT0FBTyxjQUFjLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1VBQy9DLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2xCLGtCQUFrQixDQUFDLElBQUksRUFBRSxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUM7V0FDNUM7VUFDRCxJQUFJLDRCQUE0QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZELHFCQUFxQixDQUFDLHVCQUF1QixDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7V0FDdEY7U0FDRixNQUFNO1VBQ0wsTUFBTSxPQUFPLGNBQWMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7VUFDL0MsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEIsa0JBQWtCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1dBQzdCO1VBQ0QsSUFBSSw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxhQUFhLFFBQVEsRUFBRSxFQUFFO1lBQ2pFLHFCQUFxQixDQUFDLHVCQUF1QixDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDckYsT0FBTyxXQUFXLENBQUM7V0FDcEI7VUFDRCxNQUFNLGFBQWEsY0FBYyxDQUFDLGFBQWEsVUFBVSxFQUFFLEVBQUUsYUFBYSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztVQUN6RixJQUFJLDRCQUE0QixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ25FLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxFQUFFO2NBQ25GLHFCQUFxQixDQUFDLHVCQUF1QixDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDNUY7V0FDRjtVQUNELElBQUksNEJBQTRCLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEMscUJBQXFCLENBQUMsdUJBQXVCLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztXQUNyRjtTQUNGO09BQ0Y7TUFDRCxPQUFPLFdBQVcsQ0FBQztLQUNwQixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0Isb0NBQW9DO01BQ3hELE1BQU0sWUFBWSxNQUFNO1FBQ3RCLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1VBQ3ZCLE9BQU8sTUFBTSxLQUFLLENBQUMsQ0FBQztTQUNyQjtRQUNELE9BQU8sTUFBTSxLQUFLLENBQUMsQ0FBQztPQUNyQixDQUFDO01BQ0YsTUFBTSxVQUFVLE1BQU07UUFDcEIsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7VUFDdkIsT0FBTyxNQUFNLElBQUksU0FBUyxLQUFLLE9BQU8sQ0FBQztTQUN4QztRQUNELE9BQU8sTUFBTSxJQUFJLFNBQVMsV0FBVyxPQUFPLENBQUM7T0FDOUMsQ0FBQztNQUNGLE1BQU0sVUFBVSxNQUFNO1FBQ3BCLE1BQU0sUUFBUSxhQUFhLENBQUMsU0FBUyxjQUFjLENBQUMsQ0FBQztRQUNyRCxLQUFLLFNBQVMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEMsS0FBSyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sS0FBSyxDQUFDO09BQ2QsQ0FBQztNQUNGLE1BQU0saUJBQWlCLE1BQU07UUFDM0IsSUFBSSxDQUFDLFdBQVcsRUFBRTtVQUNoQixjQUFjLDJCQUEyQixDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUM3RTtRQUNELE9BQU8sV0FBVyxDQUFDO09BQ3BCLENBQUM7TUFDRixNQUFNLFlBQVksTUFBTSxjQUFjLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQztNQUNwRCxNQUFNLFVBQVUsaUJBQWlCLGFBQWEsSUFBSSxTQUFTLEtBQUssYUFBYSxVQUFVLEVBQUUsSUFBSSxNQUFNLEtBQUssYUFBYSxPQUFPLEVBQUUsQ0FBQztNQUMvSCxNQUFNLFVBQVUsVUFBVSxjQUFjLENBQUMsU0FBUyxFQUFFLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO01BQ2xGLE9BQU87UUFDTCxXQUFXLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDOUIsUUFBUSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ3hCLE9BQU87UUFDUCxjQUFjO1FBQ2QsU0FBUztRQUNULFNBQVM7UUFDVCxPQUFPO1FBQ1AsT0FBTztRQUNQLE9BQU87T0FDUixDQUFDO0tBQ0gsQ0FBQztJQUNGLGFBQWEsZUFBZSxHQUFHLFNBQVMsYUFBYSxDQUFDLEtBQUssZUFBZSxFQUFFLEtBQUssWUFBWSxDQUFDLENBQUM7SUFDL0YsYUFBYSxhQUFhLEdBQUcsU0FBUyxhQUFhLENBQUMsS0FBSyxhQUFhLEVBQUUsS0FBSyxVQUFVLENBQUMsQ0FBQztJQUN6RixhQUFhLE1BQU0sR0FBRyxRQUFRLGFBQWEsQ0FBQyxJQUFJLFdBQVcsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEYsYUFBYSxPQUFPLEdBQUcsUUFBUSxhQUFhLENBQUMsSUFBSSxXQUFXLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakYsYUFBYSxRQUFRLEdBQUcsZ0JBQWdCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxlQUFlLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLGVBQWUsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsSSxhQUFhLFFBQVEsR0FBRyxnQkFBZ0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLGVBQWUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksZUFBZSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xJLGFBQWEsVUFBVSxHQUFHLE9BQU8sR0FBRyxHQUFHLEdBQUcsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQy9ELGFBQWEsUUFBUSxHQUFHLE9BQU8sR0FBRyxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQzNELGFBQWEsZUFBZSxHQUFHLE9BQU8sR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzlFLGFBQWEsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLGFBQWEsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUU1RSxNQUFNLHNCQUFzQixlQUFlO01BQ3pDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxPQUFPLEtBQUssQ0FBQyxFQUFFO1FBQzVDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ2xCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sYUFBYSxvQkFBb0I7TUFDckMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDckIsbUJBQW1CLENBQUMsR0FBRyxFQUFFLElBQUksZ0JBQWdCLENBQUMsQ0FBQztNQUMvQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxZQUFZLENBQUMsQ0FBQztLQUM1QyxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsb0JBQW9CO01BQ3pDLE1BQU0sYUFBYSxRQUFRLEtBQUssQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDO01BQ2xELE1BQU0sWUFBWSxRQUFRLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDO01BQ2hELEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3JCLFVBQVUsS0FBSyxDQUFDLFNBQVMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLEtBQUssZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO01BQzFFLFNBQVMsS0FBSyxDQUFDLFNBQVMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQztLQUN0RSxDQUFDO0lBQ0YsTUFBTSxrQkFBa0Isb0JBQW9CO01BQzFDLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDNUIsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDaEMsTUFBTTtRQUNMLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQzVCO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLFdBQVcsUUFBUSxDQUFDO0lBQzFCLE1BQU0sVUFBVSxTQUFTLENBQUM7SUFDMUIsTUFBTSxZQUFZLFFBQVEsVUFBVSxDQUFDO0lBQ3JDLE1BQU0sbUJBQW1CLFFBQVE7TUFDL0IsTUFBTSxhQUFhLElBQUksV0FBVyxDQUFDO01BQ25DLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQ3ZCLE9BQU8sZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7T0FDckM7TUFDRCxPQUFPLFVBQVUsQ0FBQztLQUNuQixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsUUFBUTtNQUM1QixJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ1QsT0FBTyxFQUFFLENBQUM7T0FDWDtNQUNELE9BQU8sTUFBTSxDQUFDLElBQUksV0FBVyxFQUFFLGtCQUFrQjtRQUMvQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUU7VUFDM0MsU0FBUyxNQUFNLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUM3QyxNQUFNO1VBQ0wsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkI7UUFDRCxPQUFPLE1BQU0sQ0FBQztPQUNmLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDUixDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsa0JBQWtCO01BQzdDLElBQUksV0FBVyxJQUFJLENBQUM7TUFDcEIsT0FBTyxXQUFXLFFBQVEsZ0JBQWdCLEVBQUU7UUFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtVQUN2QixNQUFNO1NBQ1A7UUFDRCxVQUFVLFFBQVEsS0FBSyxPQUFPLENBQUM7T0FDaEM7TUFDRCxPQUFPLE1BQU0sQ0FBQztLQUNmLENBQUM7SUFDRixNQUFNLFFBQVEsS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsTUFBTSxzQkFBc0IsUUFBUTtNQUNsQyxJQUFJLEtBQUssRUFBRSxLQUFLLENBQUM7TUFDakIsUUFBUSxhQUFhLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUM5QyxRQUFRLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzlDLFFBQVEsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztNQUNsQyxNQUFNLG1CQUFtQixNQUFNLENBQUMsS0FBSyxFQUFFLHFCQUFxQjtRQUMxRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1VBQzVDLE1BQU0sRUFBRSxDQUFDO1NBQ1Y7UUFDRCxPQUFPLE1BQU0sQ0FBQztPQUNmLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDTixRQUFRLFFBQVEsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDekQsUUFBUSxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUM5QyxPQUFPLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQztLQUNqQyxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsUUFBUTtNQUM3QixNQUFNLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsR0FBRyxJQUFJLFNBQVMsWUFBWSxFQUFFLENBQUM7TUFDckUsT0FBTyxJQUFJLEdBQUcsR0FBRyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNyRCxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsMkJBQTJCO01BQ2hELE1BQU0sVUFBVSxFQUFFLENBQUM7TUFDbkIsS0FBSyxJQUFJLFdBQVcsSUFBSSxXQUFXLEVBQUUsUUFBUSxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUUsV0FBVyxRQUFRLFdBQVcsRUFBRTtRQUNsRyxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7VUFDcEMsTUFBTTtTQUNQO1FBQ0QsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7T0FDeEI7TUFDRCxPQUFPLE9BQU8sQ0FBQztLQUNoQixDQUFDO0lBQ0YsTUFBTSxXQUFXLHlCQUF5QjtNQUN4QyxJQUFJLE9BQU8sRUFBRSxDQUFDO01BQ2QsSUFBSSxZQUFZLGFBQWEsVUFBVSxFQUFFLENBQUM7TUFDMUMsSUFBSSxTQUFTLGFBQWEsT0FBTyxFQUFFLENBQUM7TUFDcEMsSUFBSSxZQUFZLENBQUM7TUFDakIsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDdkIsZUFBZSxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7T0FDeEQsTUFBTTtRQUNMLE1BQU0sYUFBYSxTQUFTLFdBQVcsQ0FBQztRQUN4QyxJQUFJLE1BQU0sSUFBSSxVQUFVLE9BQU8sRUFBRTtVQUMvQixlQUFlLE9BQU8sQ0FBQztVQUN2QixTQUFTLFVBQVUsT0FBTyxHQUFHLENBQUMsQ0FBQztTQUNoQyxNQUFNO1VBQ0wsZUFBZSxRQUFRLENBQUM7U0FDekI7UUFDRCxZQUFZLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUNoQztNQUNELElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO01BQ3JDLElBQUksVUFBVSxjQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQzlDLFVBQVUsUUFBUSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztNQUM1QyxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUTtRQUN4QyxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUM3QixDQUFDLENBQUMsQ0FBQztNQUNKLE9BQU8sSUFBSSxRQUFRLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxZQUFZLENBQUM7S0FDdEQsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLHVCQUF1QjtNQUM3QyxJQUFJLFFBQVEsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ2hDLFFBQVEsUUFBUSxDQUFDLEtBQUssRUFBRSxpQkFBaUI7UUFDdkMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDdkQsQ0FBQyxDQUFDO01BQ0gsUUFBUSxRQUFRLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNoRCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNyQixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsdUJBQXVCO01BQzlDLElBQUksT0FBTyxTQUFTLENBQUM7TUFDckIsSUFBSSxlQUFlLENBQUMsQ0FBQztNQUNyQixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNyQixNQUFNLFVBQVUsSUFBSSxLQUFLLE9BQU8sQ0FBQztRQUNqQyxJQUFJLE1BQU0sSUFBSSxZQUFZLElBQUksTUFBTSxJQUFJLFlBQVksR0FBRyxPQUFPLEVBQUU7VUFDOUQsWUFBWSxJQUFJLENBQUM7VUFDakIsU0FBUyxNQUFNLEdBQUcsWUFBWSxDQUFDO1VBQy9CLE1BQU07U0FDUDtRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxZQUFZLENBQUMsRUFBRTtVQUMvQixZQUFZLElBQUksQ0FBQztVQUNqQixTQUFTLE9BQU8sQ0FBQztVQUNqQixNQUFNO1NBQ1A7UUFDRCxnQkFBZ0IsT0FBTyxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxZQUFZLENBQUM7T0FDekI7TUFDRCxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxNQUFNLEdBQUcsU0FBUyxLQUFLLE9BQU8sRUFBRTtRQUN6RCxTQUFTLFNBQVMsS0FBSyxPQUFPLENBQUM7T0FDaEM7TUFDRCxPQUFPLGFBQWEsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDekMsQ0FBQztJQUNGLE1BQU0sWUFBWSxnQkFBZ0I7TUFDaEMsSUFBSSxDQUFDLElBQUksRUFBRTtRQUNULE9BQU8sSUFBSSxDQUFDO09BQ2I7TUFDRCxNQUFNLFFBQVEsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDOUIsTUFBTSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ2xDLE1BQU0sU0FBUyxLQUFLLE9BQU8sR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztNQUN0RCxNQUFNLFlBQVksTUFBTSxDQUFDLEtBQUssRUFBRSxtQkFBbUI7UUFDakQsTUFBTSxRQUFRLDJCQUEyQixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLEtBQUssRUFBRTtVQUNWLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7VUFDekIsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztTQUNwQjtRQUNELE9BQU8sZUFBZSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ2xFLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDVCxJQUFJLENBQUMsU0FBUyxFQUFFO1FBQ2QsT0FBTyxJQUFJLENBQUM7T0FDYjtNQUNELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxXQUFXLEVBQUU7UUFDaEQsSUFBSSxVQUFVLENBQUM7UUFDZixJQUFJLE1BQU0sS0FBSyxPQUFPLEVBQUU7VUFDdEIsYUFBYSxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZDLE1BQU07VUFDTCxhQUFhLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNuQztRQUNELE9BQU8sYUFBYSxDQUFDLFNBQVMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO09BQ3hEO01BQ0QsT0FBTyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQzFELENBQUM7O0lBRUYsTUFBTSwyQkFBMkIsd0JBQXdCLENBQUM7SUFDMUQsTUFBTSw0QkFBNEIsNkJBQTZCO01BQzdELElBQUksZ0JBQWdCLElBQUksQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUM7TUFDakUsS0FBSyxJQUFJLE9BQU8sU0FBUyxnQkFBZ0IsRUFBRSxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sSUFBSSxnQkFBZ0IsRUFBRTtRQUM5RixpQkFBaUIsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQztPQUN6QztNQUNELE9BQU8sYUFBYSxDQUFDO0tBQ3RCLENBQUM7SUFDRixNQUFNLFdBQVcsdUNBQXVDO01BQ3RELE1BQU0sWUFBWSxLQUFLLEdBQUcsR0FBRyxlQUFlLEdBQUcsR0FBRyxhQUFhLENBQUM7TUFDaEUsSUFBSSxTQUFTLEtBQUssR0FBRyxHQUFHLFlBQVksR0FBRyxHQUFHLFVBQVUsQ0FBQztNQUNyRCxNQUFNLFFBQVEsRUFBRSxDQUFDO01BQ2pCLE1BQU0sT0FBTyxHQUFHLFFBQVEsRUFBRSxDQUFDO01BQzNCLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ3ZCLEtBQUssS0FBSyxDQUFDLFVBQVUsR0FBRyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO09BQ3RGLE1BQU07UUFDTCxJQUFJLFFBQVEsQ0FBQyxDQUFDO1FBQ2QsTUFBTSxhQUFhLFNBQVMsV0FBVyxDQUFDO1FBQ3hDLElBQUksTUFBTSxJQUFJLFVBQVUsT0FBTyxJQUFJLFVBQVUsT0FBTyxFQUFFO1VBQ3BELFFBQVEsQ0FBQyxDQUFDO1VBQ1YsU0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsVUFBVSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDN0M7UUFDRCxLQUFLLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7T0FDbkU7TUFDRCxLQUFLLElBQUksT0FBTyxTQUFTLEVBQUUsSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRTtRQUN4RSxLQUFLLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztPQUM3QztNQUNELE9BQU8sS0FBSyxDQUFDO0tBQ2QsQ0FBQztJQUNGLE1BQU0sY0FBYyxzQ0FBc0M7TUFDeEQsTUFBTSxNQUFNLFNBQVMsSUFBSSxDQUFDO01BQzFCLE1BQU0sUUFBUSxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ3pELE1BQU0sVUFBVSxTQUFTLFVBQVUsRUFBRSxDQUFDO01BQ3RDLE1BQU0sWUFBWSw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLGFBQWEsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO01BQ2pGLElBQUksQ0FBQyxTQUFTLFlBQVksRUFBRSxFQUFFO1FBQzVCLE1BQU0sTUFBTSxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hELE9BQU87VUFDTCxLQUFLO1VBQ0wsR0FBRztVQUNILE9BQU87VUFDUCxHQUFHLFNBQVM7U0FDYixDQUFDO09BQ0gsTUFBTTtRQUNMLE9BQU87VUFDTCxLQUFLO1VBQ0wsT0FBTztVQUNQLEdBQUcsU0FBUztTQUNiLENBQUM7T0FDSDtLQUNGLENBQUM7SUFDRixNQUFNLFlBQVksd0JBQXdCO01BQ3hDLElBQUksUUFBUSxDQUFDLENBQUM7TUFDZCxLQUFLLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRO1FBQ25DLElBQUksSUFBSSxhQUFhLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxLQUFLLEVBQUU7VUFDakQsT0FBTztTQUNSLE1BQU0sSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFO1VBQzNCLE9BQU8sS0FBSyxDQUFDO1NBQ2QsTUFBTTtVQUNMLEtBQUssRUFBRSxDQUFDO1VBQ1IsT0FBTztTQUNSO09BQ0YsQ0FBQyxDQUFDO01BQ0gsT0FBTyxLQUFLLENBQUM7S0FDZCxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsZ0JBQWdCO01BQ3JDLElBQUksWUFBWSxLQUFLLEdBQUcsR0FBRyxlQUFlLEdBQUcsR0FBRyxhQUFhLENBQUM7TUFDOUQsSUFBSSxTQUFTLEtBQUssR0FBRyxHQUFHLFlBQVksR0FBRyxHQUFHLFVBQVUsQ0FBQztNQUNyRCxJQUFJLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLFNBQVMsS0FBSyxJQUFJLEVBQUU7UUFDekQsTUFBTSxhQUFhLFNBQVMsV0FBVyxDQUFDO1FBQ3hDLFlBQVksVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsRUFBRSxVQUFVLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLElBQUksU0FBUyxFQUFFO1VBQ2IsU0FBUyxLQUFLLEdBQUcsQ0FBQyxHQUFHLFNBQVMsV0FBVyxPQUFPLENBQUM7VUFDakQsSUFBSSxLQUFLLEVBQUU7WUFDVCxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7V0FDakMsTUFBTTtZQUNMLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztXQUMvQjtTQUNGO09BQ0Y7S0FDRixDQUFDO0lBQ0YsTUFBTSw4QkFBOEIsT0FBTztNQUN6QyxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzFCLGNBQWMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDM0IsT0FBTyxHQUFHLENBQUM7S0FDWixDQUFDO0lBQ0YsTUFBTSxjQUFjLGtCQUFrQjtNQUNwQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNyQixPQUFPLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0IsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUNsQyxPQUFPLElBQUksQ0FBQztTQUNiO09BQ0Y7TUFDRCxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzVCLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ25ELE9BQU8sSUFBSSxXQUFXLENBQUM7U0FDeEI7UUFDRCxJQUFJLFVBQVUsSUFBSSxnQkFBZ0IsQ0FBQztRQUNuQyxJQUFJLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxFQUFFO1VBQ3JDLE9BQU8sT0FBTyxDQUFDO1NBQ2hCO1FBQ0QsVUFBVSxJQUFJLFlBQVksQ0FBQztRQUMzQixJQUFJLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxFQUFFO1VBQ3JDLE9BQU8sT0FBTyxDQUFDO1NBQ2hCO09BQ0Y7TUFDRCxPQUFPLFNBQVMsQ0FBQztLQUNsQixDQUFDO0lBQ0YsTUFBTSxzQ0FBc0MsT0FBTztNQUNqRCxPQUFPLFdBQVcsQ0FBQyxHQUFHLGVBQWUsRUFBRSxHQUFHLFlBQVksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxHQUFHLGFBQWEsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDO0tBQ3pHLENBQUM7SUFDRixNQUFNLG9CQUFvQixpQ0FBaUM7TUFDekQsTUFBTSxVQUFVLFNBQVMsUUFBUSxFQUFFLENBQUM7TUFDcEMsTUFBTSxNQUFNLFNBQVMsT0FBTyxFQUFFLENBQUM7TUFDL0IsSUFBSSxPQUFPLFNBQVMsS0FBSyxLQUFLLElBQUksd0JBQXdCLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDbkUsTUFBTSxPQUFPLE9BQU8sU0FBUyxDQUFDO1FBQzlCLE9BQU87VUFDTCxJQUFJO1VBQ0osT0FBTyxTQUFTLENBQUMsU0FBUyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQztTQUMvQyxDQUFDO09BQ0g7TUFDRCxNQUFNLFVBQVUsbUNBQW1DLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDekQsSUFBSSxPQUFPLEVBQUU7UUFDWCxNQUFNLE9BQU8sT0FBTyxRQUFRLENBQUM7UUFDN0IsT0FBTztVQUNMLElBQUk7VUFDSixPQUFPLFNBQVMsQ0FBQyxTQUFTLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDO1NBQy9DLENBQUM7T0FDSDtNQUNELE9BQU8sV0FBVyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ3RELENBQUM7SUFDRixNQUFNLG1CQUFtQixhQUFhO01BQ3BDLE1BQU0sTUFBTSxTQUFTLE9BQU8sRUFBRSxDQUFDO01BQy9CLE9BQU87UUFDTCxPQUFPLFFBQVEsQ0FBQyxTQUFTLElBQUksUUFBUSxFQUFFLEVBQUUsYUFBYSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0UsS0FBSyxRQUFRLENBQUMsU0FBUyxJQUFJLFFBQVEsRUFBRSxFQUFFLGFBQWEsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZFLFNBQVMsU0FBUyxVQUFVLEVBQUU7T0FDL0IsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLG1CQUFtQixhQUFhO01BQ3BDLE9BQU87UUFDTCxLQUFLLFNBQVMsT0FBTyxFQUFFO1FBQ3ZCLFNBQVMsU0FBUyxVQUFVLEVBQUU7T0FDL0IsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLHFCQUFxQixxQkFBcUI7TUFDOUMsTUFBTSxPQUFPO1FBQ1gsaUJBQWlCLFVBQVU7UUFDM0IsRUFBRTtRQUNGLFNBQVMsaUNBQWlDO09BQzNDLENBQUM7TUFDRixPQUFPLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNqRixDQUFDO0lBQ0YsTUFBTSx3QkFBd0IsdUJBQXVCO01BQ25ELE1BQU0sTUFBTSxTQUFTLElBQUksQ0FBQztNQUMxQixJQUFJLE1BQU0sU0FBUyxPQUFPLEVBQUUsQ0FBQztNQUM3QixNQUFNLEtBQUssR0FBRyxTQUFTLEVBQUUsQ0FBQztNQUMxQixNQUFNLFlBQVksU0FBUyxZQUFZLEVBQUUsQ0FBQztNQUMxQyxNQUFNLFVBQVUsU0FBUyxRQUFRLEVBQUUsQ0FBQztNQUNwQyxNQUFNLE9BQU8sT0FBTyxTQUFTLENBQUM7TUFDOUIsTUFBTSxVQUFVLFNBQVMsVUFBVSxFQUFFLENBQUM7TUFDdEMsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFO1FBQ2xCLE9BQU87VUFDTCxJQUFJO1VBQ0osT0FBTyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUM7U0FDckMsQ0FBQztPQUNIO01BQ0QsTUFBTSxPQUFPLDJCQUEyQixDQUFDLEdBQUcsV0FBVyxFQUFFLENBQUMsQ0FBQztNQUMzRCxJQUFJLENBQUMsU0FBUyxFQUFFO1FBQ2QsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsTUFBTSxrQkFBa0Isa0JBQWtCLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDckUsZUFBZSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7T0FDN0M7TUFDRCxNQUFNLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ3ZDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ25CLE1BQU0sb0JBQW9CLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3pFLGVBQWUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixDQUFDLENBQUM7TUFDN0MsU0FBUyxlQUFlLENBQUM7UUFDdkIsRUFBRTtRQUNGLE1BQU0sSUFBSTtRQUNWLE9BQU87T0FDUixDQUFDLENBQUM7TUFDSCxPQUFPO1FBQ0wsRUFBRTtRQUNGLE9BQU87T0FDUixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLGtCQUFrQixhQUFhLEtBQUssS0FBSztNQUM3RCxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDZCxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7T0FDekQsTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDckIsT0FBTyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztPQUNwQyxNQUFNLElBQUksSUFBSSxFQUFFO1FBQ2YsT0FBTyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztPQUNwQyxNQUFNO1FBQ0wsT0FBTyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDaEQ7S0FDRixDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsS0FBSyxDQUFDLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQzs7SUFFakUsTUFBTSxVQUFVLFNBQVM7TUFDdkIsTUFBTSxjQUFjLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQ3BDLE1BQU0sY0FBYyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDcEMsTUFBTSxlQUFlLE1BQU0sTUFBTSxDQUFDO01BQ2xDLE1BQU0sU0FBUztRQUNiLEtBQUssSUFBSTtRQUNULE9BQU8sS0FBSztRQUNaLE1BQU0sdUJBQXVCLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDM0MsU0FBUyxNQUFNO1FBQ2YsU0FBUyxLQUFLO1FBQ2QsS0FBSyxVQUFVLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxVQUFVLFlBQVk7UUFDdEIsTUFBTSxXQUFXO1FBQ2pCLFFBQVEsV0FBVztRQUNuQixRQUFRLFdBQVc7UUFDbkIsT0FBTyxXQUFXO1FBQ2xCLElBQUksWUFBWTtRQUNoQixZQUFZLFdBQVc7UUFDdkIsU0FBUyxZQUFZO1FBQ3JCLFVBQVUsV0FBVztRQUNyQixNQUFNLE1BQU07VUFDVixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDWDtRQUNELFlBQVksTUFBTSxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUM7T0FDdkMsQ0FBQztNQUNGLE9BQU8sTUFBTSxDQUFDO0tBQ2YsQ0FBQztJQUNGLE1BQU0sUUFBUSxTQUFTO01BQ3JCLE1BQU0sZUFBZSxNQUFNLE1BQU0sQ0FBQztNQUNsQyxNQUFNLFNBQVM7UUFDYixLQUFLLEtBQUs7UUFDVixPQUFPLEtBQUs7UUFDWixNQUFNLHVCQUF1QixPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzNDLFNBQVMsS0FBSztRQUNkLFNBQVMsTUFBTTtRQUNmLEtBQUssWUFBWTtRQUNqQixVQUFVLFVBQVUsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLE1BQU0sWUFBWTtRQUNsQixRQUFRLEtBQUs7UUFDYixRQUFRLE1BQU07UUFDZCxPQUFPLFFBQVE7UUFDZixJQUFJLFFBQVE7UUFDWixZQUFZLE9BQU87UUFDbkIsU0FBUyxPQUFPO1FBQ2hCLFVBQVUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixNQUFNLElBQUk7UUFDVixZQUFZLFFBQVEsS0FBSztPQUMxQixDQUFDO01BQ0YsT0FBTyxNQUFNLENBQUM7S0FDZixDQUFDO0lBQ0YsTUFBTSxhQUFhLG1CQUFtQixRQUFRLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvRSxNQUFNLFNBQVM7TUFDYixPQUFPLE9BQU87TUFDZCxLQUFLO01BQ0wsVUFBVTtLQUNYLENBQUM7O0lBRUYsTUFBTSxXQUFXLFNBQVM7TUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7T0FDM0M7TUFDRCxJQUFJLEtBQUssT0FBTyxLQUFLLENBQUMsRUFBRTtRQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7T0FDcEQ7TUFDRCxNQUFNLGVBQWUsRUFBRSxDQUFDO01BQ3hCLE1BQU0sTUFBTSxFQUFFLENBQUM7TUFDZixNQUFNLENBQUMsS0FBSyxFQUFFLGtCQUFrQjtRQUM5QixNQUFNLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLElBQUksTUFBTSxPQUFPLEtBQUssQ0FBQyxFQUFFO1VBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNuRDtRQUNELE1BQU0sTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEVBQUU7VUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLENBQUMsQ0FBQztTQUNsRCxNQUFNLElBQUksR0FBRyxLQUFLLE1BQU0sRUFBRTtVQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7U0FDMUQsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1VBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztTQUNwRDtRQUNELFlBQVksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sS0FBSztVQUN0QixNQUFNLFlBQVksSUFBSSxPQUFPLENBQUM7VUFDOUIsSUFBSSxTQUFTLEtBQUssS0FBSyxPQUFPLEVBQUU7WUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsR0FBRyxHQUFHLEdBQUcsYUFBYSxHQUFHLEtBQUssT0FBTyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDO1dBQ25JO1VBQ0QsTUFBTSxRQUFRLFlBQVk7WUFDeEIsTUFBTSxhQUFhLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsQyxJQUFJLFlBQVksT0FBTyxLQUFLLFVBQVUsT0FBTyxFQUFFO2NBQzdDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0RBQWdELEdBQUcsWUFBWSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxHQUFHLFVBQVUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDbEk7WUFDRCxNQUFNLFVBQVUsTUFBTSxDQUFDLFlBQVksRUFBRSxVQUFVO2NBQzdDLE9BQU8sVUFBVSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQzthQUN2QyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsT0FBTyxFQUFFO2NBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQywrREFBK0QsR0FBRyxVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxjQUFjLEdBQUcsWUFBWSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNySjtZQUNELE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1dBQ3hDLENBQUM7VUFDRixPQUFPO1lBQ0wsTUFBTSxDQUFDLFdBQVcsS0FBSztjQUNyQixJQUFJLFFBQVEsT0FBTyxLQUFLLEtBQUssT0FBTyxFQUFFO2dCQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxHQUFHLEtBQUssT0FBTyxHQUFHLFFBQVEsR0FBRyxRQUFRLE9BQU8sQ0FBQyxDQUFDO2VBQzdHO2NBQ0QsTUFBTSxTQUFTLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztjQUMvQixPQUFPLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNqQztZQUNELEtBQUs7WUFDTCxLQUFLLFNBQVM7Y0FDWixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2pCLFlBQVk7Z0JBQ1osYUFBYSxHQUFHO2dCQUNoQixRQUFRLElBQUk7ZUFDYixDQUFDLENBQUM7YUFDSjtXQUNGLENBQUM7U0FDSCxDQUFDO09BQ0gsQ0FBQyxDQUFDO01BQ0gsT0FBTyxHQUFHLENBQUM7S0FDWixDQUFDO0lBQ0YsTUFBTSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUM7O0lBRXpCLEdBQUcsU0FBUyxDQUFDO01BQ1g7UUFDRSxZQUFZO1VBQ1YsUUFBUTtVQUNSLFFBQVE7U0FDVDtPQUNGO01BQ0Q7UUFDRSxZQUFZO1VBQ1YsUUFBUTtVQUNSLFFBQVE7U0FDVDtPQUNGO01BQ0Q7UUFDRSxhQUFhO1VBQ1gsUUFBUTtVQUNSLFFBQVE7U0FDVDtPQUNGO01BQ0Q7UUFDRSxZQUFZO1VBQ1YsUUFBUTtVQUNSLFFBQVE7U0FDVDtPQUNGO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxjQUFjLFdBQVc7TUFDN0IsTUFBTSxTQUFTLEVBQUUsQ0FBQztNQUNsQixNQUFNLFNBQVMsRUFBRSxDQUFDO01BQ2xCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVTtRQUN4QixNQUFNLEtBQUssQ0FBQyxPQUFPO1VBQ2pCLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2xCLEVBQUUsU0FBUztVQUNWLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3BCLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztNQUNILE9BQU87UUFDTCxNQUFNO1FBQ04sTUFBTTtPQUNQLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sa0JBQWtCLFdBQVcsT0FBTyxLQUFLLEtBQUssZ0JBQWdCLElBQUksT0FBTyxLQUFLLEtBQUssZUFBZSxDQUFDO0lBQ3pHLE1BQU0saUJBQWlCLFdBQVcsT0FBTyxLQUFLLEtBQUssZUFBZSxJQUFJLE9BQU8sS0FBSyxLQUFLLGNBQWMsQ0FBQztJQUN0RyxNQUFNLG1CQUFtQixXQUFXO01BQ2xDLE1BQU0sTUFBTSxXQUFXLE1BQU0sTUFBTSxDQUFDO1FBQ2xDLE9BQU87UUFDUCxPQUFPO09BQ1IsQ0FBQyxDQUFDO01BQ0gsTUFBTSxjQUFjLCtCQUErQjtRQUNqRCxJQUFJLE9BQU8sT0FBTyxLQUFLLFNBQVMsRUFBRTtVQUNoQyxJQUFJLE9BQU8sQ0FBQztVQUNaLElBQUksU0FBUyxDQUFDLE9BQU8sT0FBTyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRTtjQUNyQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLEdBQUcscURBQXFELENBQUMsQ0FBQzthQUMxRTtZQUNELFVBQVUsT0FBTyxPQUFPLENBQUM7V0FDMUIsTUFBTSxJQUFJLFFBQVEsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxFQUFFO1lBQ25DLFVBQVUsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxDQUFDO1dBQzVCLE1BQU07WUFDTCxPQUFPLEdBQUcsQ0FBQyxJQUFJLEdBQUcsNENBQTRDLENBQUMsQ0FBQztXQUNqRTtVQUNELE9BQU8sTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDeEMsTUFBTSxJQUFJLE9BQU8sSUFBSSxLQUFLLFNBQVMsRUFBRTtVQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sSUFBSSxDQUFDLEVBQUU7WUFDMUIsT0FBTyxHQUFHLENBQUMsSUFBSSxHQUFHLHlDQUF5QyxDQUFDLENBQUM7V0FDOUQ7VUFDRCxPQUFPLE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksRUFBRSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDNUQsTUFBTTtVQUNMLE9BQU8sR0FBRyxDQUFDLElBQUksR0FBRyx3REFBd0QsQ0FBQyxDQUFDO1NBQzdFO09BQ0YsQ0FBQztNQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxHQUFHLENBQUMsOEJBQThCLENBQUMsQ0FBQztPQUM1QztNQUNELElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxNQUFNLENBQUMsRUFBRTtRQUM1QixPQUFPLEdBQUcsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO09BQ3hEO01BQ0QsSUFBSSxPQUFPLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFO1VBQzFCLE9BQU8sR0FBRyxDQUFDLCtDQUErQyxDQUFDLENBQUM7U0FDN0Q7UUFDRCxJQUFJLE9BQU8sTUFBTSxPQUFPLEtBQUssQ0FBQyxJQUFJLE9BQU8sSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFO1VBQzFELE9BQU8sR0FBRyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7U0FDckU7UUFDRCxJQUFJLFFBQVEsT0FBTyxNQUFNLENBQUM7UUFDMUIsSUFBSSxNQUFNLE9BQU8sSUFBSSxDQUFDO1FBQ3RCLElBQUksR0FBRyxPQUFPLEtBQUssQ0FBQyxFQUFFO1VBQ3BCLE1BQU0sS0FBSyxDQUFDO1VBQ1osUUFBUSxFQUFFLENBQUM7U0FDWjtRQUNELE9BQU8sV0FBVyxDQUFDLFFBQVEsRUFBRSxXQUFXO1VBQ3RDLE1BQU0sZUFBZTtVQUNyQixLQUFLO1VBQ0wsR0FBRztVQUNILE1BQU07U0FDUCxDQUFDLEVBQUUsaUJBQWlCO1VBQ25CLE1BQU0sZ0JBQWdCO1VBQ3RCLEtBQUs7VUFDTCxHQUFHO1VBQ0gsR0FBRztVQUNILEtBQUs7U0FDTixDQUFDLENBQUMsQ0FBQztPQUNMLE1BQU0sSUFBSSxPQUFPLFlBQVksS0FBSyxTQUFTLEVBQUU7UUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLFlBQVksQ0FBQyxFQUFFO1VBQ2xDLE9BQU8sR0FBRyxDQUFDLDREQUE0RCxDQUFDLENBQUM7U0FDMUU7UUFDRCxJQUFJLE9BQU8sTUFBTSxPQUFPLEtBQUssQ0FBQyxFQUFFO1VBQzlCLE9BQU8sR0FBRyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7U0FDL0Q7UUFDRCxPQUFPLE1BQU0sTUFBTSxDQUFDO1VBQ2xCLE1BQU0sZ0JBQWdCO1VBQ3RCLE9BQU8sRUFBRTtVQUNULEtBQUssT0FBTyxNQUFNO1VBQ2xCLEtBQUssa0JBQWtCO1VBQ3ZCLE9BQU8sT0FBTyxZQUFZO1NBQzNCLENBQUMsQ0FBQztPQUNKLE1BQU07UUFDTCxJQUFJLE9BQU8sTUFBTSxPQUFPLEtBQUssQ0FBQyxFQUFFO1VBQzlCLE9BQU8sR0FBRyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7U0FDekQ7UUFDRCxPQUFPLFdBQVcsQ0FBQyxPQUFPLEVBQUUsWUFBWTtVQUN0QyxNQUFNLGNBQWM7VUFDcEIsT0FBTyxPQUFPLE1BQU07VUFDcEIsUUFBUSxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ25CLENBQUMsRUFBRSw0QkFBNEI7VUFDOUIsTUFBTSxlQUFlO1VBQ3JCLE9BQU8sT0FBTyxNQUFNO1VBQ3BCLEtBQUssT0FBTztVQUNaLE9BQU8sWUFBWTtTQUNwQixDQUFDLENBQUMsQ0FBQztPQUNMO0tBQ0YsQ0FBQztJQUNGLE1BQU0sbUJBQW1CLFlBQVksUUFBUSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUN4RSxNQUFNLG9CQUFvQixZQUFZLFFBQVEsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDMUUsTUFBTSxtQkFBbUIsc0NBQXNDO01BQzdELGdCQUFnQixpQkFBaUIsQ0FBQyxRQUFRLENBQUM7TUFDM0MsZUFBZSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7TUFDekMscUJBQXFCO0tBQ3RCLENBQUMsQ0FBQztJQUNILE1BQU0sa0JBQWtCLFlBQVk7TUFDbEMsTUFBTSxhQUFhLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztNQUNsRSxNQUFNLENBQUMsVUFBVSxPQUFPLEVBQUUsT0FBTyxPQUFPLE1BQU0sQ0FBQyxHQUFHLFFBQVEsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7TUFDMUUsT0FBTyxVQUFVLE9BQU8sQ0FBQztLQUMxQixDQUFDO0lBQ0YsTUFBTSx3QkFBd0IsWUFBWTtNQUN4QyxPQUFPLE9BQU87UUFDWixNQUFNLGNBQWMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO09BQ3JDLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sb0JBQW9CLFFBQVEsRUFBRSxXQUFXLENBQUM7SUFDaEQsTUFBTSxVQUFVLGlCQUFpQixRQUFRLEVBQUUsQ0FBQztJQUM1QyxNQUFNLFFBQVEsUUFBUSxJQUFJLENBQUM7SUFDM0IsTUFBTSxVQUFVLFNBQVM7TUFDdkIsTUFBTSxRQUFRLEtBQUssUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ25HLE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRSxrQkFBa0I7UUFDcEMsTUFBTSxNQUFNLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsTUFBTSxNQUFNLEdBQUcsT0FBTyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEMsT0FBTyxNQUFNLENBQUM7T0FDZixFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ1IsQ0FBQztJQUNGLE1BQU0sV0FBVyxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEMsTUFBTSxTQUFTLFFBQVEsVUFBVSxNQUFNLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFELE1BQU0sMEJBQTBCLFNBQVMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RSxNQUFNLHNCQUFzQixTQUFTLGVBQWUsRUFBRSxLQUFLLFNBQVM7TUFDbEUsTUFBTSxRQUFRLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUM5QixJQUFJLEtBQUssRUFBRTtRQUNULElBQUksS0FBSyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7VUFDN0IsTUFBTSxVQUFVLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztVQUMvQixPQUFPO1lBQ0wsT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7WUFDcEQsS0FBSztXQUNOLENBQUM7U0FDSCxNQUFNO1VBQ0wsT0FBTztZQUNMLEtBQUs7WUFDTCxLQUFLO1dBQ04sQ0FBQztTQUNIO09BQ0YsTUFBTTtRQUNMLE9BQU87VUFDTCxPQUFPLEtBQUs7VUFDWixTQUFTLG1CQUFtQjtTQUM3QixDQUFDO09BQ0g7S0FDRixDQUFDO0lBQ0YsTUFBTSxhQUFhLFVBQVU7TUFDM0IsTUFBTSxpQkFBaUIsTUFBTSxRQUFRLFNBQVMsQ0FBQztNQUMvQyxjQUFjLENBQUMsSUFBSSxFQUFFO1FBQ25CLFdBQVcsUUFBUTtRQUNuQixTQUFTLE1BQU0sR0FBRztPQUNuQixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsVUFBVSxFQUFFLEVBQUUsV0FBVyxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQ3BELGNBQWMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxXQUFXLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDbEQsY0FBYyxDQUFDLFFBQVEsRUFBRSxFQUFFLFdBQVcsUUFBUSxFQUFFLENBQUMsQ0FBQztNQUNsRCxjQUFjLENBQUMsY0FBYyxFQUFFLEVBQUUsV0FBVyxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQ3hELGNBQWMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDcEQsY0FBYyxDQUFDLGlCQUFpQixFQUFFO1FBQ2hDLFdBQVcsUUFBUTtRQUNuQixTQUFTLEVBQUU7T0FDWixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsZUFBZSxFQUFFO1FBQzlCLFdBQVcsU0FBUztRQUNwQixTQUFTLElBQUk7T0FDZCxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsUUFBUSxFQUFFO1FBQ3ZCLFdBQVcsU0FBUztRQUNwQixTQUFTLEtBQUs7T0FDZixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsY0FBYyxFQUFFO1FBQzdCLFdBQVcsUUFBUTtRQUNuQixTQUFTLEVBQUU7T0FDWixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsU0FBUyxFQUFFO1FBQ3hCLFdBQVcsUUFBUTtRQUNuQixTQUFTLGlCQUFpQjtPQUMzQixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsbUJBQW1CLEVBQUU7UUFDbEMsV0FBVyxRQUFRO1FBQ25CLFNBQVMsTUFBTSxnQkFBZ0I7T0FDaEMsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLFNBQVMsRUFBRTtRQUN4QixXQUFXLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUM7UUFDakQsU0FBUyxTQUFTO09BQ25CLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxZQUFZLEVBQUU7UUFDM0IsV0FBVyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7UUFDdEMsU0FBUyxFQUFFO09BQ1osQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLHlCQUF5QixFQUFFO1FBQ3hDLFdBQVcsUUFBUTtRQUNuQixTQUFTLEVBQUU7T0FDWixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsV0FBVyxFQUFFO1FBQzFCLFdBQVcsU0FBUztRQUNwQixTQUFTLElBQUk7T0FDZCxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsbUJBQW1CLEVBQUU7UUFDbEMsV0FBVyxTQUFTO1VBQ2xCLE1BQU0sUUFBUSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1VBQ25ELElBQUksS0FBSyxFQUFFO1lBQ1QsT0FBTztjQUNMLEtBQUs7Y0FDTCxLQUFLO2FBQ04sQ0FBQztXQUNILE1BQU07WUFDTCxPQUFPO2NBQ0wsT0FBTyxLQUFLO2NBQ1osU0FBUyw2QkFBNkI7YUFDdkMsQ0FBQztXQUNIO1NBQ0Y7UUFDRCxTQUFTLEdBQUc7T0FDYixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMseUJBQXlCLEVBQUU7UUFDeEMsV0FBVyxRQUFRO1FBQ25CLFNBQVMsRUFBRTtPQUNaLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxrQkFBa0IsRUFBRTtRQUNqQyxXQUFXLFNBQVM7VUFDbEIsTUFBTSxRQUFRLFVBQVUsQ0FBQztZQUN2QixPQUFPO1lBQ1AsV0FBVztZQUNYLFFBQVE7WUFDUixTQUFTO1dBQ1YsRUFBRSxLQUFLLENBQUMsQ0FBQztVQUNWLE9BQU8sS0FBSyxHQUFHO1lBQ2IsS0FBSztZQUNMLEtBQUs7V0FDTixHQUFHO1lBQ0YsT0FBTyxLQUFLO1lBQ1osU0FBUyxzREFBc0Q7V0FDaEUsQ0FBQztTQUNIO1FBQ0QsU0FBUyxTQUFTO09BQ25CLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxxQkFBcUIsRUFBRTtRQUNwQyxXQUFXLFFBQVE7UUFDbkIsU0FBUyxnQ0FBZ0M7T0FDMUMsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLHFCQUFxQixFQUFFO1FBQ3BDLFdBQVcsUUFBUTtRQUNuQixTQUFTLEVBQUU7T0FDWixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsYUFBYSxFQUFFO1FBQzVCLFdBQVcsU0FBUztRQUNwQixTQUFTLElBQUk7T0FDZCxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsOEJBQThCLEVBQUU7UUFDN0MsV0FBVyxTQUFTO1VBQ2xCLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BCLE9BQU87Y0FDTCxPQUFPLElBQUk7Y0FDWCxLQUFLO2FBQ04sQ0FBQztXQUNILE1BQU0sSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUIsT0FBTztjQUNMLE9BQU8sSUFBSTtjQUNYLEtBQUs7YUFDTixDQUFDO1dBQ0gsTUFBTTtZQUNMLE9BQU87Y0FDTCxPQUFPLEtBQUs7Y0FDWixTQUFTLDZCQUE2QjthQUN2QyxDQUFDO1dBQ0g7U0FDRjtRQUNELFNBQVMsWUFBWTtPQUN0QixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsd0JBQXdCLEVBQUU7UUFDdkMsV0FBVyxRQUFRO1FBQ25CLFNBQVMsc0RBQXNEO09BQ2hFLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyx5QkFBeUIsRUFBRTtRQUN4QyxXQUFXLFFBQVE7UUFDbkIsU0FBUyxtREFBbUQ7T0FDN0QsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLG1CQUFtQixFQUFFO1FBQ2xDLFdBQVcsUUFBUTtRQUNuQixTQUFTLEVBQUU7T0FDWixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsbUJBQW1CLEVBQUU7UUFDbEMsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsSUFBSTtPQUNkLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyx1QkFBdUIsRUFBRTtRQUN0QyxXQUFXLFNBQVM7UUFDcEIsU0FBUyxLQUFLO09BQ2YsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLDBCQUEwQixFQUFFO1FBQ3pDLFdBQVcsU0FBUztRQUNwQixTQUFTLElBQUk7T0FDZCxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsT0FBTyxFQUFFO1FBQ3RCLFdBQVcsUUFBUTtRQUNuQixTQUFTLEVBQUU7T0FDWixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsV0FBVyxFQUFFO1FBQzFCLFdBQVcsUUFBUTtRQUNuQixTQUFTLEVBQUU7T0FDWixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsbUJBQW1CLEVBQUU7UUFDbEMsV0FBVyxRQUFRO1FBQ25CLFNBQVMsRUFBRTtPQUNaLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyx5QkFBeUIsRUFBRTtRQUN4QyxXQUFXLFFBQVE7UUFDbkIsU0FBUyxFQUFFO09BQ1osQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLDJCQUEyQixFQUFFO1FBQzFDLFdBQVcsU0FBUztRQUNwQixTQUFTLEtBQUs7T0FDZixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxXQUFXLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDbkUsY0FBYyxDQUFDLFVBQVUsRUFBRTtRQUN6QixXQUFXLFFBQVE7UUFDbkIsU0FBUyxJQUFJO09BQ2QsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLGNBQWMsRUFBRTtRQUM3QixXQUFXLFFBQVE7UUFDbkIsU0FBUyxFQUFFO09BQ1osQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLGlCQUFpQixFQUFFO1FBQ2hDLFdBQVcsUUFBUTtRQUNuQixTQUFTLE9BQU87T0FDakIsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLFFBQVEsRUFBRTtRQUN2QixXQUFXLFNBQVM7UUFDcEIsU0FBUyxJQUFJO09BQ2QsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLGVBQWUsRUFBRTtRQUM5QixXQUFXLFFBQVE7UUFDbkIsU0FBUyxxR0FBcUcsR0FBRyx3R0FBd0c7T0FDMU4sQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLGNBQWMsRUFBRTtRQUM3QixXQUFXLFFBQVE7UUFDbkIsU0FBUyxxR0FBcUcsR0FBRyx3R0FBd0c7T0FDMU4sQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLG1CQUFtQixFQUFFO1FBQ2xDLFdBQVcsU0FBUztRQUNwQixTQUFTLEtBQUs7T0FDZixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsYUFBYSxFQUFFO1FBQzVCLFdBQVcsUUFBUTtRQUNuQixTQUFTLE1BQU07T0FDaEIsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLGFBQWEsRUFBRTtRQUM1QixXQUFXLFNBQVM7VUFDbEIsTUFBTSxRQUFRLEtBQUssS0FBSyxLQUFLLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7VUFDL0UsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtjQUNuQixPQUFPO2dCQUNMLE9BQU8sS0FBSyxDQUFDLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQztnQkFDdEMsS0FBSztlQUNOLENBQUM7YUFDSCxNQUFNLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO2NBQzNCLE9BQU87Z0JBQ0wsS0FBSztnQkFDTCxLQUFLO2VBQ04sQ0FBQzthQUNILE1BQU0sSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFO2NBQzFCLE9BQU87Z0JBQ0wsT0FBTyxFQUFFO2dCQUNULEtBQUs7ZUFDTixDQUFDO2FBQ0gsTUFBTTtjQUNMLE9BQU87Z0JBQ0wsS0FBSztnQkFDTCxLQUFLO2VBQ04sQ0FBQzthQUNIO1dBQ0YsTUFBTTtZQUNMLE9BQU87Y0FDTCxPQUFPLEtBQUs7Y0FDWixTQUFTLGlEQUFpRDthQUMzRCxDQUFDO1dBQ0g7U0FDRjtRQUNELFNBQVMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQztPQUM3QyxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsZUFBZSxFQUFFLEVBQUUsV0FBVyxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQ3pELGNBQWMsQ0FBQyxrQkFBa0IsRUFBRTtRQUNqQyxXQUFXLFNBQVM7UUFDcEIsU0FBUyxLQUFLO09BQ2YsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLFVBQVUsRUFBRTtRQUN6QixXQUFXLFNBQVM7VUFDbEIsTUFBTSxRQUFRLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1VBQzVELElBQUksS0FBSyxFQUFFO1lBQ1QsTUFBTSxXQUFXLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzVFLE9BQU87Y0FDTCxPQUFPLFFBQVE7Y0FDZixLQUFLO2FBQ04sQ0FBQztXQUNILE1BQU07WUFDTCxPQUFPO2NBQ0wsT0FBTyxLQUFLO2NBQ1osU0FBUywwQ0FBMEM7YUFDcEQsQ0FBQztXQUNIO1NBQ0Y7UUFDRCxTQUFTLEVBQUU7T0FDWixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsbUJBQW1CLEVBQUU7UUFDbEMsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsSUFBSTtPQUNkLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyw0QkFBNEIsRUFBRTtRQUMzQyxXQUFXLFFBQVE7UUFDbkIsU0FBUyxrQ0FBa0M7T0FDNUMsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLGlCQUFpQixFQUFFO1FBQ2hDLFdBQVcsU0FBUztVQUNsQixNQUFNLFFBQVEsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztVQUNsRCxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksS0FBSyxLQUFLLEtBQUssSUFBSSxpQkFBaUIsU0FBUyxFQUFFLElBQUksaUJBQWlCLE9BQU8sRUFBRSxFQUFFO2NBQ2pGLE9BQU87Z0JBQ0wsT0FBTyxFQUFFO2dCQUNULEtBQUs7ZUFDTixDQUFDO2FBQ0gsTUFBTTtjQUNMLE9BQU87Z0JBQ0wsT0FBTyxLQUFLLEtBQUssSUFBSSxHQUFHLHlDQUF5QyxHQUFHLEtBQUs7Z0JBQ3pFLEtBQUs7ZUFDTixDQUFDO2FBQ0g7V0FDRixNQUFNO1lBQ0wsT0FBTztjQUNMLE9BQU8sS0FBSztjQUNaLFNBQVMsNkJBQTZCO2FBQ3ZDLENBQUM7V0FDSDtTQUNGO1FBQ0QsU0FBUyxDQUFDLE9BQU87T0FDbEIsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLHlCQUF5QixFQUFFO1FBQ3hDLFdBQVcsU0FBUztRQUNwQixTQUFTLElBQUk7T0FDZCxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsWUFBWSxFQUFFLEVBQUUsV0FBVyxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQ3RELGNBQWMsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFdBQVcsUUFBUSxFQUFFLENBQUMsQ0FBQztNQUMzRCxjQUFjLENBQUMsT0FBTyxFQUFFO1FBQ3RCLFdBQVcsU0FBUyxLQUFLLEtBQUssS0FBSyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQzNFLFNBQVMsUUFBUTtPQUNsQixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsV0FBVyxFQUFFLEVBQUUsV0FBVyxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQ3JELGNBQWMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxXQUFXLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDbkQsY0FBYyxDQUFDLG9CQUFvQixFQUFFO1FBQ25DLFdBQVcsU0FBUztRQUNwQixTQUFTLEtBQUs7T0FDZixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsNkJBQTZCLEVBQUU7UUFDNUMsV0FBVyxRQUFRO1FBQ25CLFNBQVMsRUFBRTtPQUNaLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRTtRQUMvQixXQUFXLFNBQVM7VUFDbEIsTUFBTSxRQUFRLEtBQUssS0FBSyxLQUFLLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1VBQ2pELElBQUksS0FBSyxFQUFFO1lBQ1QsT0FBTztjQUNMLE9BQU8sS0FBSyxLQUFLLEtBQUssR0FBRyxFQUFFLEdBQUcsS0FBSztjQUNuQyxLQUFLO2FBQ04sQ0FBQztXQUNILE1BQU07WUFDTCxPQUFPO2NBQ0wsT0FBTyxLQUFLO2NBQ1osU0FBUywyQkFBMkI7YUFDckMsQ0FBQztXQUNIO1NBQ0Y7UUFDRCxTQUFTLDZJQUE2STtPQUN2SixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsb0JBQW9CLEVBQUU7UUFDbkMsV0FBVyxRQUFRO1FBQ25CLFNBQVMsRUFBRTtPQUNaLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxjQUFjLEVBQUU7UUFDN0IsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsSUFBSTtPQUNkLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxjQUFjLEVBQUU7UUFDN0IsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsSUFBSTtPQUNkLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDcEQsY0FBYyxDQUFDLHlCQUF5QixFQUFFO1FBQ3hDLFdBQVcsU0FBUztRQUNwQixTQUFTLElBQUk7T0FDZCxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsb0JBQW9CLEVBQUU7UUFDbkMsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsSUFBSTtPQUNkLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyx5QkFBeUIsRUFBRTtRQUN4QyxXQUFXLFFBQVE7UUFDbkIsU0FBUyxDQUFDO09BQ1gsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLG9CQUFvQixFQUFFO1FBQ25DLFdBQVcsU0FBUztRQUNwQixTQUFTLEtBQUs7T0FDZixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsVUFBVSxFQUFFO1FBQ3pCLFdBQVcsU0FBUztRQUNwQixTQUFTLEtBQUs7T0FDZixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsZUFBZSxFQUFFO1FBQzlCLFdBQVcsU0FBUztRQUNwQixTQUFTLElBQUk7T0FDZCxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsU0FBUyxFQUFFO1FBQ3hCLFdBQVcsVUFBVTtRQUNyQixTQUFTLEVBQUU7T0FDWixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxXQUFXLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDNUQsY0FBYyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsV0FBVyxVQUFVLEVBQUUsQ0FBQyxDQUFDO01BQzVELGNBQWMsQ0FBQyxPQUFPLEVBQUU7UUFDdEIsV0FBVyxRQUFRO1FBQ25CLFNBQVMsTUFBTSxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxHQUFHLEtBQUs7T0FDcEQsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLFdBQVcsRUFBRSxFQUFFLFdBQVcsUUFBUSxFQUFFLENBQUMsQ0FBQztNQUNyRCxjQUFjLENBQUMsd0JBQXdCLEVBQUU7UUFDdkMsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsSUFBSTtPQUNkLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxRQUFRLEVBQUU7UUFDdkIsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsSUFBSTtPQUNkLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxvQkFBb0IsRUFBRTtRQUNuQyxXQUFXLFFBQVE7UUFDbkIsU0FBUyxnQkFBZ0I7T0FDMUIsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLHFCQUFxQixFQUFFO1FBQ3BDLFdBQVcsUUFBUTtRQUNuQixTQUFTLGlCQUFpQjtPQUMzQixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsa0JBQWtCLEVBQUU7UUFDakMsV0FBVyxRQUFRO1FBQ25CLFNBQVMsdUNBQXVDO09BQ2pELENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxXQUFXLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDbkQsY0FBYyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsV0FBVyxVQUFVLEVBQUUsQ0FBQyxDQUFDO01BQ3BFLGNBQWMsQ0FBQyxlQUFlLEVBQUU7UUFDOUIsV0FBVyxVQUFVO1FBQ3JCLFNBQVMsTUFBTSxXQUFXO09BQzNCLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxxQkFBcUIsRUFBRTtRQUNwQyxXQUFXLFFBQVE7UUFDbkIsU0FBUyxNQUFNO09BQ2hCLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLFdBQVcsVUFBVSxFQUFFLENBQUMsQ0FBQztNQUNuRSxjQUFjLENBQUMsNEJBQTRCLEVBQUU7UUFDM0MsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsS0FBSztPQUNmLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxzQkFBc0IsRUFBRTtRQUNyQyxXQUFXLFNBQVM7UUFDcEIsU0FBUyxLQUFLO09BQ2YsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLHFCQUFxQixFQUFFLEVBQUUsV0FBVyxTQUFTLEVBQUUsQ0FBQyxDQUFDO01BQ2hFLGNBQWMsQ0FBQyw0QkFBNEIsRUFBRTtRQUMzQyxXQUFXLFNBQVM7UUFDcEIsU0FBUyxLQUFLO09BQ2YsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLG1CQUFtQixFQUFFO1FBQ2xDLFdBQVcsU0FBUztRQUNwQixTQUFTLEtBQUs7T0FDZixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsMEJBQTBCLEVBQUU7UUFDekMsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsS0FBSztPQUNmLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyx3QkFBd0IsRUFBRTtRQUN2QyxXQUFXLFNBQVM7UUFDcEIsU0FBUyxJQUFJO1FBQ2IsWUFBWSxJQUFJO09BQ2pCLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxtQkFBbUIsRUFBRTtRQUNsQyxXQUFXLFNBQVM7UUFDcEIsU0FBUyxLQUFLO09BQ2YsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLGdCQUFnQixFQUFFO1FBQy9CLFdBQVcsU0FBUztRQUNwQixTQUFTLEtBQUs7T0FDZixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMscUJBQXFCLEVBQUU7UUFDcEMsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsSUFBSTtPQUNkLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxtQkFBbUIsRUFBRTtRQUNsQyxXQUFXLFNBQVM7UUFDcEIsU0FBUyxLQUFLO09BQ2YsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLGVBQWUsRUFBRTtRQUM5QixXQUFXLFNBQVM7UUFDcEIsU0FBUyxJQUFJO1FBQ2IsWUFBWSxJQUFJO09BQ2pCLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRTtRQUMvQixXQUFXLFFBQVE7UUFDbkIsU0FBUyxNQUFNO09BQ2hCLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDcEQsY0FBYyxDQUFDLFFBQVEsRUFBRTtRQUN2QixXQUFXLFFBQVE7UUFDbkIsU0FBUyxPQUFPO09BQ2pCLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxjQUFjLEVBQUU7UUFDN0IsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsSUFBSTtPQUNkLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxlQUFlLEVBQUU7UUFDOUIsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsSUFBSTtPQUNkLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxvQkFBb0IsRUFBRTtRQUNuQyxXQUFXLFNBQVM7UUFDcEIsU0FBUyxJQUFJO09BQ2QsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsV0FBVyxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQzNELGNBQWMsQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLFdBQVcsUUFBUSxFQUFFLENBQUMsQ0FBQztNQUNuRSxjQUFjLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxXQUFXLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDNUQsY0FBYyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsV0FBVyx1QkFBdUIsRUFBRSxDQUFDLENBQUM7TUFDekUsY0FBYyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsV0FBVyxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQzFELGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxXQUFXLHVCQUF1QixFQUFFLENBQUMsQ0FBQztNQUN4RSxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxXQUFXLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDMUQsY0FBYyxDQUFDLGNBQWMsRUFBRSxFQUFFLFdBQVcsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDO01BQ3ZFLGNBQWMsQ0FBQyxhQUFhLEVBQUU7UUFDNUIsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsSUFBSTtPQUNkLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxXQUFXLFNBQVMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO01BQ3hGLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRTtRQUNuQyxXQUFXLFNBQVM7UUFDcEIsU0FBUyxLQUFLO09BQ2YsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLFNBQVMsRUFBRSxFQUFFLFdBQVcsT0FBTyxFQUFFLENBQUMsQ0FBQztNQUNsRCxjQUFjLENBQUMsbUJBQW1CLEVBQUU7UUFDbEMsV0FBVyxRQUFRO1FBQ25CLFNBQVMsNENBQTRDO09BQ3RELENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxzQkFBc0IsRUFBRTtRQUNyQyxXQUFXLFNBQVM7UUFDcEIsU0FBUyxJQUFJO09BQ2QsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLHVCQUF1QixFQUFFO1FBQ3RDLFdBQVcsU0FBUztRQUNwQixTQUFTLEtBQUs7T0FDZixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsU0FBUyxFQUFFLEVBQUUsV0FBVyxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQ25ELGNBQWMsQ0FBQyxrQkFBa0IsRUFBRTtRQUNqQyxXQUFXLFNBQVM7UUFDcEIsU0FBUyxLQUFLO09BQ2YsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLG1CQUFtQixFQUFFO1FBQ2xDLFdBQVcsU0FBUztRQUNwQixTQUFTLElBQUk7T0FDZCxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxXQUFXLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDOUQsY0FBYyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsV0FBVyxVQUFVLEVBQUUsQ0FBQyxDQUFDO01BQy9ELGNBQWMsQ0FBQyxxQkFBcUIsRUFBRTtRQUNwQyxXQUFXLFFBQVE7UUFDbkIsU0FBUyxNQUFNO09BQ2hCLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQywrQkFBK0IsRUFBRTtRQUM5QyxXQUFXLFNBQVM7UUFDcEIsU0FBUyxJQUFJO09BQ2QsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLHFCQUFxQixFQUFFO1FBQ3BDLFdBQVcsU0FBUztRQUNwQixTQUFTLElBQUk7T0FDZCxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsYUFBYSxFQUFFO1FBQzVCLFdBQVcsU0FBUztRQUNwQixTQUFTLElBQUk7T0FDZCxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsZUFBZSxFQUFFO1FBQzlCLFdBQVcsU0FBUztRQUNwQixTQUFTLEtBQUs7T0FDZixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsa0JBQWtCLEVBQUU7UUFDakMsV0FBVyxRQUFRO1FBQ25CLFNBQVMsQ0FBQztPQUNYLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxlQUFlLEVBQUU7UUFDOUIsV0FBVyxTQUFTO1VBQ2xCLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFO1lBQ2pELE1BQU0sV0FBVyxLQUFLLEtBQUssS0FBSyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUM7WUFDOUMsT0FBTztjQUNMLE9BQU8sZUFBZSxDQUFDLFFBQVEsQ0FBQztjQUNoQyxPQUFPLElBQUk7YUFDWixDQUFDO1dBQ0gsTUFBTTtZQUNMLE9BQU87Y0FDTCxPQUFPLEtBQUs7Y0FDWixTQUFTLHVDQUF1QzthQUNqRCxDQUFDO1dBQ0g7U0FDRjtRQUNELFNBQVM7VUFDUDtZQUNFLE9BQU8sR0FBRztZQUNWLEtBQUssR0FBRztZQUNSLFFBQVEsUUFBUTtXQUNqQjtVQUNEO1lBQ0UsT0FBTyxJQUFJO1lBQ1gsS0FBSyxJQUFJO1lBQ1QsUUFBUSxNQUFNO1dBQ2Y7VUFDRDtZQUNFLE9BQU8sR0FBRztZQUNWLFFBQVEsSUFBSTtXQUNiO1VBQ0Q7WUFDRSxPQUFPLElBQUk7WUFDWCxRQUFRLElBQUk7V0FDYjtVQUNEO1lBQ0UsT0FBTyxLQUFLO1lBQ1osUUFBUSxJQUFJO1dBQ2I7VUFDRDtZQUNFLE9BQU8sTUFBTTtZQUNiLFFBQVEsSUFBSTtXQUNiO1VBQ0Q7WUFDRSxPQUFPLE9BQU87WUFDZCxRQUFRLElBQUk7V0FDYjtVQUNEO1lBQ0UsT0FBTyxRQUFRO1lBQ2YsUUFBUSxJQUFJO1dBQ2I7VUFDRDtZQUNFLE9BQU8sS0FBSztZQUNaLEtBQUssbUJBQW1CO1dBQ3pCO1VBQ0Q7WUFDRSxPQUFPLElBQUk7WUFDWCxLQUFLLHFCQUFxQjtXQUMzQjtVQUNEO1lBQ0UsT0FBTyxJQUFJO1lBQ1gsS0FBSyxxQkFBcUI7V0FDM0I7U0FDRjtPQUNGLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxzQkFBc0IsRUFBRTtRQUNyQyxXQUFXLFNBQVM7VUFDbEIsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckIsT0FBTztjQUNMLE9BQU8scUJBQXFCLENBQUMsS0FBSyxDQUFDO2NBQ25DLE9BQU8sSUFBSTthQUNaLENBQUM7V0FDSCxNQUFNO1lBQ0wsT0FBTztjQUNMLE9BQU8sS0FBSztjQUNaLFNBQVMsMkJBQTJCO2FBQ3JDLENBQUM7V0FDSDtTQUNGO1FBQ0QsU0FBUyxRQUFRLEVBQUU7T0FDcEIsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLG1CQUFtQixFQUFFO1FBQ2xDLFdBQVcsUUFBUTtRQUNuQixTQUFTLGdCQUFnQjtPQUMxQixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsZ0JBQWdCLEVBQUU7UUFDL0IsV0FBVyxRQUFRO1FBQ25CLFNBQVMsYUFBYTtPQUN2QixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsb0JBQW9CLEVBQUU7UUFDbkMsV0FBVyxTQUFTO1VBQ2xCLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRTtZQUM5QixPQUFPO2NBQ0wsS0FBSztjQUNMLE9BQU8sSUFBSTthQUNaLENBQUM7V0FDSCxNQUFNLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFCLE9BQU87Y0FDTCxPQUFPLENBQUMsS0FBSyxDQUFDO2NBQ2QsT0FBTyxJQUFJO2FBQ1osQ0FBQztXQUNILE1BQU07WUFDTCxPQUFPO2NBQ0wsT0FBTyxLQUFLO2NBQ1osU0FBUyx5Q0FBeUM7YUFDbkQsQ0FBQztXQUNIO1NBQ0Y7UUFDRCxTQUFTLEVBQUU7T0FDWixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsc0JBQXNCLEVBQUU7UUFDckMsV0FBVyxTQUFTO1FBQ3BCLFNBQVMsSUFBSTtPQUNkLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQyxvQkFBb0IsRUFBRTtRQUNuQyxXQUFXLFNBQVM7UUFDcEIsU0FBUyxLQUFLO09BQ2YsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLGtCQUFrQixFQUFFO1FBQ2pDLFdBQVcsU0FBUztRQUNwQixTQUFTLElBQUk7T0FDZCxDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMsdUJBQXVCLEVBQUU7UUFDdEMsV0FBVyxTQUFTO1VBQ2xCLE1BQU0sUUFBUSxVQUFVLENBQUM7WUFDdkIsV0FBVztZQUNYLFdBQVc7WUFDWCxVQUFVO1dBQ1gsRUFBRSxLQUFLLENBQUMsQ0FBQztVQUNWLE9BQU8sS0FBSyxHQUFHO1lBQ2IsS0FBSztZQUNMLEtBQUs7V0FDTixHQUFHO1lBQ0YsT0FBTyxLQUFLO1lBQ1osU0FBUyxvREFBb0Q7V0FDOUQsQ0FBQztTQUNIO1FBQ0QsU0FBUyxXQUFXO09BQ3JCLENBQUMsQ0FBQztNQUNILGNBQWMsQ0FBQywwQkFBMEIsRUFBRTtRQUN6QyxXQUFXLFNBQVM7VUFDbEIsTUFBTSxRQUFRLFVBQVUsQ0FBQztZQUN2QixXQUFXO1lBQ1gsV0FBVztZQUNYLFVBQVU7V0FDWCxFQUFFLEtBQUssQ0FBQyxDQUFDO1VBQ1YsT0FBTyxLQUFLLEdBQUc7WUFDYixLQUFLO1lBQ0wsS0FBSztXQUNOLEdBQUc7WUFDRixPQUFPLEtBQUs7WUFDWixTQUFTLG9EQUFvRDtXQUM5RCxDQUFDO1NBQ0g7UUFDRCxTQUFTLFdBQVc7T0FDckIsQ0FBQyxDQUFDO01BQ0gsY0FBYyxDQUFDLG1CQUFtQixFQUFFO1FBQ2xDLFdBQVcsU0FBUztRQUNwQixTQUFTLEtBQUs7T0FDZixDQUFDLENBQUM7TUFDSCxjQUFjLENBQUMscUJBQXFCLEVBQUU7UUFDcEMsV0FBVyxRQUFRO1FBQ25CLFNBQVMsRUFBRTtPQUNaLENBQUMsQ0FBQztNQUNILE1BQU0sR0FBRyxDQUFDLGVBQWUsRUFBRSxNQUFNO1FBQy9CLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRTtVQUMvQixXQUFXLFFBQVE7VUFDbkIsU0FBUyxJQUFJLE1BQU0sRUFBRSxHQUFHLEtBQUssR0FBRyxTQUFTO1NBQzFDLENBQUMsQ0FBQztRQUNILGNBQWMsQ0FBQyxhQUFhLEVBQUU7VUFDNUIsV0FBVyxRQUFRO1VBQ25CLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxXQUFXLEVBQUUsRUFBRSxhQUFhLENBQUM7U0FDN0QsQ0FBQyxDQUFDO09BQ0osQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0saUJBQWlCLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5QyxNQUFNLGFBQWEsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0scUJBQXFCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sWUFBWSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsTUFBTSxlQUFlLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxQyxNQUFNLDJCQUEyQixNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUNuRSxNQUFNLHFCQUFxQixNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0MsTUFBTSxxQkFBcUIsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDdkQsTUFBTSwwQkFBMEIsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDbEUsTUFBTSxxQkFBcUIsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDdEQsTUFBTSx1QkFBdUIsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDM0QsTUFBTSx1QkFBdUIsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDM0QsTUFBTSxtQkFBbUIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQy9DLE1BQU0saUNBQWlDLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQzlFLE1BQU0sNEJBQTRCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzlELE1BQU0sc0JBQXNCLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQzVELE1BQU0sd0JBQXdCLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sa0JBQWtCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxNQUFNLGNBQWMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sb0JBQW9CLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3RELE1BQU0seUJBQXlCLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sNkJBQTZCLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0seUJBQXlCLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sMEJBQTBCLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzNELE1BQU0sb0JBQW9CLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sa0JBQWtCLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzQyxNQUFNLGlCQUFpQixNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUMsTUFBTSx3QkFBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDMUQsTUFBTSxpQkFBaUIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sZ0JBQWdCLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM1QyxNQUFNLGtCQUFrQixNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDaEQsTUFBTSxhQUFhLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxNQUFNLG9CQUFvQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNuRCxNQUFNLDRCQUE0QixNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUN2RSxNQUFNLG9CQUFvQixNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNwRCxNQUFNLDJCQUEyQixNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUNuRSxNQUFNLGlCQUFpQixNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDN0MsTUFBTSxlQUFlLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxQyxNQUFNLG9CQUFvQixNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNwRCxNQUFNLFdBQVcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sY0FBYyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDeEMsTUFBTSxXQUFXLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxNQUFNLGNBQWMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sNEJBQTRCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzlELE1BQU0sYUFBYSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckMsTUFBTSxtQkFBbUIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbEQsTUFBTSxzQkFBc0IsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDekQsTUFBTSwrQkFBK0IsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDM0UsTUFBTSxzQkFBc0IsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDekQsTUFBTSxXQUFXLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQyxNQUFNLGlCQUFpQixNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUMsTUFBTSxvQkFBb0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sNkJBQTZCLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0seUJBQXlCLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzVELE1BQU0sMEJBQTBCLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sMEJBQTBCLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzdELE1BQU0sZUFBZSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEMsTUFBTSxvQkFBb0IsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sb0JBQW9CLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sYUFBYSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckMsTUFBTSx1QkFBdUIsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDeEQsTUFBTSw2QkFBNkIsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDcEUsTUFBTSxzQkFBc0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sMEJBQTBCLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzdELE1BQU0sMkJBQTJCLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sb0JBQW9CLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sbUJBQW1CLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QyxNQUFNLDBCQUEwQixNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUNqRSxNQUFNLDBCQUEwQixNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUNoRSxNQUFNLGVBQWUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzFDLE1BQU0sMEJBQTBCLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzdELE1BQU0sYUFBYSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckMsTUFBTSx1QkFBdUIsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDeEQsTUFBTSx3QkFBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDMUQsTUFBTSxxQkFBcUIsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDdEQsTUFBTSxzQkFBc0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDeEQsTUFBTSx3QkFBd0IsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDNUQsTUFBTSx1QkFBdUIsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDM0QsTUFBTSxnQ0FBZ0MsTUFBTSxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFDOUUsTUFBTSwwQkFBMEIsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDOUQsTUFBTSxzQkFBc0IsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sdUJBQXVCLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNyRCxNQUFNLG9CQUFvQixNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNyRCxNQUFNLDBCQUEwQixNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUMvRCxNQUFNLGtCQUFrQixNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDaEQsTUFBTSx3QkFBd0IsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDN0QsTUFBTSxzQkFBc0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDeEQsTUFBTSxtQkFBbUIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbEQsTUFBTSx3QkFBd0IsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDM0QsTUFBTSxzQkFBc0IsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDckQsTUFBTSx5QkFBeUIsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDNUQsTUFBTSxvQkFBb0IsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDckQsTUFBTSx5QkFBeUIsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDM0QsTUFBTSx3QkFBd0IsVUFBVSxNQUFNLFFBQVEsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDckYsTUFBTSxxQkFBcUIsVUFBVSxLQUFLLFFBQVEsQ0FBQyxNQUFNLFFBQVEsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztJQUNqRyxNQUFNLHFCQUFxQixVQUFVLEtBQUssUUFBUSxDQUFDLE1BQU0sUUFBUSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0lBQzVGLE1BQU0sZ0JBQWdCLFVBQVUsTUFBTSxRQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxLQUFLLENBQUM7SUFDekUsTUFBTSwyQkFBMkIsVUFBVSxLQUFLLFFBQVEsQ0FBQyxNQUFNLFFBQVEsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztJQUNsRyxNQUFNLHdCQUF3QixNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUM3RCxNQUFNLHlCQUF5QixNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUMvRCxNQUFNLDRCQUE0QixNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQzs7SUFFckUsTUFBTSxjQUFjLFdBQVcsQ0FBQztJQUNoQyxNQUFNLFdBQVcsUUFBUSxDQUFDO0lBQzFCLE1BQU0sZUFBZSxRQUFRO01BQzNCLE1BQU0sYUFBYSxJQUFJLFdBQVcsQ0FBQztNQUNuQyxJQUFJLFVBQVUsRUFBRTtRQUNkLFVBQVUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzlCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sWUFBWSxRQUFRO01BQ3hCLE1BQU0sY0FBYyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDakMsT0FBTztRQUNMLE9BQU8sSUFBSSxPQUFPLEdBQUcsV0FBVyxPQUFPO1FBQ3ZDLE1BQU0sV0FBVztPQUNsQixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLGtCQUFrQjtNQUN4QyxJQUFJLEdBQUcsQ0FBQztNQUNSLE9BQU8sQ0FBQyxNQUFNLGNBQWMsS0FBSyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7UUFDN0QsY0FBYyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ25DO0tBQ0YsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLHlCQUF5QjtNQUMvQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7TUFDekIsT0FBTyxHQUFHLENBQUM7S0FDWixDQUFDO0lBQ0YsTUFBTSwwQkFBMEIseUJBQXlCO01BQ3ZELE1BQU0sU0FBUyxTQUFTLENBQUMsY0FBYyxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDdEUsTUFBTSxRQUFRLFNBQVMsQ0FBQyxjQUFjLEtBQUssT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ2xFLE1BQU0sT0FBTyxNQUFNLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQztNQUN0QyxJQUFJLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRTtRQUNuQixlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEMsT0FBTyxhQUFhLENBQUMsY0FBYyxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsQ0FBQztPQUNuRSxNQUFNO1FBQ0wsT0FBTyxHQUFHLENBQUM7T0FDWjtLQUNGLENBQUM7SUFDRixNQUFNLDZCQUE2Qix5QkFBeUI7TUFDMUQsTUFBTSxhQUFhLEdBQUcsVUFBVSxFQUFFLENBQUM7TUFDbkMsTUFBTSxjQUFjLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxXQUFXLENBQUMsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVM7UUFDdEYsT0FBTyxLQUFLLEdBQUcsR0FBRyxPQUFPLEVBQUUsR0FBRyxhQUFhLENBQUMsVUFBVSxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO09BQ2pGLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ2QsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO01BQ3pCLE9BQU8sV0FBVyxDQUFDO0tBQ3BCLENBQUM7SUFDRixNQUFNLDJCQUEyQix5QkFBeUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxFQUFFLEtBQUssY0FBYyxHQUFHLHVCQUF1QixDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsR0FBRyxlQUFlLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQy9NLE1BQU0sOEJBQThCLHlCQUF5QixHQUFHLFVBQVUsRUFBRSxLQUFLLGNBQWMsV0FBVyxHQUFHLDBCQUEwQixDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsR0FBRyxlQUFlLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3BNLE1BQU0sc0JBQXNCLG9CQUFvQixhQUFhLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyx3QkFBd0IsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLEdBQUcsMkJBQTJCLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzNLLE1BQU0sV0FBVyxzQkFBc0I7TUFDckMsSUFBSSxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1FBQzdFLElBQUksVUFBVSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7VUFDbEMsa0JBQWtCLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDdEQsTUFBTTtVQUNMLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NBQ2xDO09BQ0Y7TUFDRCxJQUFJLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1FBQ2hDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3BDLElBQUksa0JBQWtCLEtBQUssT0FBTyxLQUFLLENBQUMsRUFBRTtVQUN4QyxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUNsQztPQUNGO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLDJCQUEyQix3QkFBd0IsQ0FBQztJQUMxRCxNQUFNLFlBQVksU0FBUyxDQUFDO0lBQzVCLE1BQU0sZ0JBQWdCLGFBQWEsQ0FBQztJQUNwQyxNQUFNLDBCQUEwQixtREFBbUQsQ0FBQztJQUNwRixNQUFNLHdCQUF3QiwyQkFBMkI7TUFDdkQsTUFBTSxhQUFhLFFBQVEsQ0FBQyxPQUFPLHNCQUFzQixFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDckUsSUFBSSxPQUFPLENBQUM7TUFDWixJQUFJLE9BQU8sQ0FBQztNQUNaLElBQUksSUFBSSxRQUFRLEtBQUssTUFBTSxFQUFFO1FBQzNCLE1BQU0sU0FBUyxJQUFJLGNBQWMsZ0JBQWdCLENBQUM7UUFDbEQsVUFBVSxJQUFJLFdBQVcsSUFBSSxNQUFNLFdBQVcsQ0FBQztRQUMvQyxVQUFVLElBQUksVUFBVSxJQUFJLE1BQU0sVUFBVSxDQUFDO09BQzlDLE1BQU07UUFDTCxNQUFNLFdBQVcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1FBQzlDLFVBQVUsSUFBSSxXQUFXLEdBQUcsUUFBUSxLQUFLLENBQUM7UUFDMUMsVUFBVSxJQUFJLFVBQVUsR0FBRyxRQUFRLElBQUksQ0FBQztPQUN6QztNQUNELFVBQVUsS0FBSyxJQUFJLE9BQU8sQ0FBQztNQUMzQixVQUFVLE1BQU0sSUFBSSxPQUFPLENBQUM7TUFDNUIsVUFBVSxJQUFJLElBQUksT0FBTyxDQUFDO01BQzFCLFVBQVUsT0FBTyxJQUFJLE9BQU8sQ0FBQztNQUM3QixVQUFVLE1BQU0sR0FBRyxDQUFDLENBQUM7TUFDckIsSUFBSSxTQUFTLE9BQU8sWUFBWSxHQUFHLE9BQU8sWUFBWSxDQUFDO01BQ3ZELElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNkLElBQUksTUFBTSxFQUFFO1VBQ1YsVUFBVSxDQUFDLENBQUMsQ0FBQztTQUNkO1FBQ0QsVUFBVSxLQUFLLElBQUksTUFBTSxDQUFDO1FBQzFCLFVBQVUsTUFBTSxJQUFJLE1BQU0sQ0FBQztPQUM1QjtNQUNELE9BQU8sVUFBVSxDQUFDO0tBQ25CLENBQUM7SUFDRixNQUFNLDRCQUE0QixRQUFRO01BQ3hDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztNQUNYLE1BQU0sdUJBQXVCLFdBQVcsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO01BQzlGLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsb0JBQW9CLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNwRCxNQUFNLE9BQU8sb0JBQW9CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN6QyxJQUFJLFVBQVUsSUFBSSxnQkFBZ0IsQ0FBQztRQUNuQyxJQUFJLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxFQUFFO1VBQ3JDLE1BQU0sT0FBTyxPQUFPLEtBQUssQ0FBQztVQUMxQixJQUFJLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtZQUNyQixDQUFDLEtBQUssT0FBTyxXQUFXLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztXQUN4RixNQUFNO1lBQ0wsT0FBTyxXQUFXLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1dBQ3hDO1NBQ0Y7UUFDRCxVQUFVLElBQUksWUFBWSxDQUFDO1FBQzNCLElBQUksMEJBQTBCLENBQUMsT0FBTyxDQUFDLEVBQUU7VUFDdkMsTUFBTSxPQUFPLE9BQU8sS0FBSyxDQUFDO1VBQzFCLElBQUksSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFO1lBQ3JCLENBQUMsS0FBSyxPQUFPLFdBQVcsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1dBQ3hGLE1BQU07WUFDTCxPQUFPLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7V0FDMUI7U0FDRjtPQUNGO0tBQ0YsQ0FBQztJQUNGLE1BQU0sWUFBWSxxQ0FBcUM7TUFDckQsTUFBTSxrQkFBa0IsT0FBTyxFQUFFLENBQUM7TUFDbEMsSUFBSSxjQUFjLENBQUM7TUFDbkIsSUFBSSxrQkFBa0IsQ0FBQztNQUN2QixNQUFNLGFBQWEsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDOUMsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLE1BQU0sT0FBTyxxQkFBcUI7UUFDaEMsSUFBSSxHQUFHLENBQUM7UUFDUixJQUFJLEVBQUUsQ0FBQztRQUNQLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1VBQzFCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtVQUNwQixNQUFNLGlCQUFpQixXQUFXLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztVQUNoRSxNQUFNLGFBQWEscUJBQXFCLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztVQUNoRSxHQUFHLFNBQVMsQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLFVBQVUsSUFBSSxDQUFDLENBQUM7VUFDcEQscUJBQXFCLGNBQWMsQ0FBQztVQUNwQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQzlCLFNBQVMsa0JBQWtCO1lBQzNCLGtCQUFrQixLQUFLO1dBQ3hCLENBQUMsQ0FBQztVQUNILEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsVUFBVSxFQUFFLENBQUMsQ0FBQztVQUN4QyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7VUFDckIsZUFBZSxJQUFJLENBQUM7WUFDbEIsS0FBSztZQUNMLE9BQU87WUFDUCxNQUFNO1dBQ1AsQ0FBQyxDQUFDO1VBQ0gsSUFBSSxNQUFNLEVBQUU7WUFDVixHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUseUJBQXlCLENBQUMsQ0FBQztXQUNoRDtVQUNELFVBQVUsRUFBRSxDQUFDO1VBQ2IsTUFBTSxPQUFPLGNBQWMsWUFBWSxFQUFFLENBQUM7VUFDMUMsR0FBRyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO1VBQ2hDLEdBQUcsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMvQixNQUFNO1VBQ0wscUJBQXFCLGNBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7VUFDckQsTUFBTSxPQUFPLGNBQWMsWUFBWSxFQUFFLENBQUM7VUFDMUMsSUFBSSx1QkFBdUIsQ0FBQyxrQkFBa0IsWUFBWSxDQUFDLEVBQUU7WUFDM0QsR0FBRyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUM7V0FDbkMsTUFBTTtZQUNMLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDO1dBQ25DO1VBQ0QsT0FBTyxHQUFHLENBQUM7U0FDWjtRQUNELE9BQU8sR0FBRyxDQUFDO09BQ1osQ0FBQztNQUNGLE1BQU0sT0FBTyxNQUFNO1FBQ2pCLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksa0JBQWtCLEVBQUU7VUFDdEIsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7VUFDN0IscUJBQXFCLElBQUksQ0FBQztTQUMzQjtRQUNELGVBQWUsR0FBRyxDQUFDLGNBQWM7VUFDL0IsR0FBRyxPQUFPLENBQUMsVUFBVSxNQUFNLENBQUMsQ0FBQztVQUM3QixlQUFlLE1BQU0sRUFBRSxDQUFDO1NBQ3pCLENBQUMsQ0FBQztRQUNILElBQUksY0FBYyxFQUFFO1VBQ2xCLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztVQUM5QixpQkFBaUIsU0FBUyxDQUFDO1NBQzVCO09BQ0YsQ0FBQztNQUNGLE1BQU0sYUFBYSxNQUFNO1FBQ3ZCLGlCQUFpQixXQUFXLENBQUMsTUFBTTtVQUNqQyxlQUFlLEdBQUcsQ0FBQyxjQUFjO1lBQy9CLElBQUksUUFBUSxFQUFFLEVBQUU7Y0FDZCxHQUFHLFlBQVksQ0FBQyxVQUFVLE1BQU0sRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO2FBQzlELE1BQU07Y0FDTCxHQUFHLFNBQVMsQ0FBQyxVQUFVLE1BQU0sRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO2FBQzNEO1dBQ0YsQ0FBQyxDQUFDO1NBQ0osRUFBRSxHQUFHLENBQUMsQ0FBQztPQUNULENBQUM7TUFDRixNQUFNLGFBQWEsTUFBTTtRQUN2QixlQUFlLEdBQUcsQ0FBQyxjQUFjO1VBQy9CLE1BQU0sYUFBYSxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxRQUFRLEVBQUUsVUFBVSxPQUFPLENBQUMsQ0FBQztVQUN0RixHQUFHLFVBQVUsQ0FBQyxVQUFVLE1BQU0sRUFBRSxFQUFFLEdBQUcsVUFBVSxFQUFFLENBQUMsQ0FBQztTQUNwRCxDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxVQUFVLE1BQU0sYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO01BQ3BELE1BQU0sU0FBUyxNQUFNLHFCQUFxQixHQUFHLHFCQUFxQixHQUFHLDBCQUEwQixHQUFHLGlDQUFpQyxHQUFHLEdBQUcsR0FBRyw0QkFBNEIsR0FBRyxnQkFBZ0IsR0FBRyxHQUFHLEdBQUcscUJBQXFCLEdBQUcscUJBQXFCLEdBQUcsZ0JBQWdCLEdBQUcsY0FBYyxHQUFHLFNBQVMsR0FBRyxZQUFZLEdBQUcsYUFBYSxHQUFHLEdBQUcsQ0FBQztNQUN2VSxPQUFPO1FBQ0wsSUFBSTtRQUNKLElBQUk7UUFDSixNQUFNO1FBQ04sVUFBVTtRQUNWLE9BQU87T0FDUixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sMEJBQTBCLE1BQU0sR0FBRyxRQUFRLFVBQVUsRUFBRSxDQUFDO0lBQzlELE1BQU0sMEJBQTBCLFFBQVEsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFGLE1BQU0sb0JBQW9CLFFBQVE7TUFDaEMsTUFBTSxXQUFXLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO01BQy9GLE9BQU8sUUFBUSxJQUFJLGFBQWEsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDbkYsQ0FBQzs7SUFFRixNQUFNLDBCQUEwQix1QkFBdUIsQ0FBQztJQUN4RCxNQUFNLDJCQUEyQix3QkFBd0IsQ0FBQztJQUMxRCxNQUFNLFVBQVUsU0FBUyxDQUFDO0lBQzFCLE1BQU0sY0FBYyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsZ0RBQWdELENBQUMsQ0FBQztJQUNsRyxNQUFNLG1CQUFtQixrQkFBa0IsQ0FBQztJQUM1QyxNQUFNLHdCQUF3Qix1QkFBdUIsQ0FBQztJQUN0RCxNQUFNLGNBQWMsV0FBVyxDQUFDO0lBQ2hDLE1BQU0sV0FBVyxRQUFRLENBQUM7SUFDMUIsTUFBTSxxQkFBcUIsa0JBQWtCLENBQUM7SUFDOUMsTUFBTSxhQUFhLGFBQWEsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUM5QyxNQUFNLGNBQWMsYUFBYSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sc0JBQXNCLG1CQUFtQjtNQUM3QyxJQUFJLElBQUksQ0FBQztNQUNULE9BQU8sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDM0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ2hDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7T0FDRjtNQUNELE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQztJQUNGLE1BQU0sV0FBVyxxREFBcUQ7TUFDcEUsTUFBTSxTQUFTLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztNQUNqRCxNQUFNLHdCQUF3Qix3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUM1RixJQUFJLFFBQVEsQ0FBQztNQUNiLElBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQzFCLElBQUkscUJBQXFCLEVBQUU7VUFDekIsV0FBVyxtQkFBbUIsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1VBQy9ELElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sUUFBUSxDQUFDO1dBQ2pCO1NBQ0Y7UUFDRCxPQUFPLFdBQVcsbUJBQW1CLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRTtVQUN4RSxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUN6QixPQUFPLFFBQVEsQ0FBQztXQUNqQjtTQUNGO09BQ0Y7TUFDRCxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUN6QixJQUFJLHFCQUFxQixFQUFFO1VBQ3pCLFdBQVcsbUJBQW1CLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztVQUMvRCxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUN6QixPQUFPLFFBQVEsQ0FBQztXQUNqQjtTQUNGO1FBQ0QsT0FBTyxXQUFXLG1CQUFtQixDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUU7VUFDeEUsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDekIsT0FBTyxRQUFRLENBQUM7V0FDakI7U0FDRjtPQUNGO01BQ0QsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsb0JBQW9CO01BQ3pDLE1BQU0sV0FBVyxRQUFRLHVCQUF1QixDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7TUFDM0QsTUFBTSxTQUFTLFFBQVEsSUFBSSxJQUFJLEtBQUssUUFBUSxDQUFDO01BQzdDLE9BQU8sVUFBVSxDQUFDLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3JHLENBQUM7SUFDRixNQUFNLG1CQUFtQixvQkFBb0I7TUFDM0MsT0FBTyxJQUFJLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUNoQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUNyQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxJQUFJLFdBQVcsQ0FBQztPQUN4QjtNQUNELE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLDhDQUE4QyxnQkFBZ0IsQ0FBQyxjQUFjLFVBQVUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLGNBQWMsVUFBVSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdEwsTUFBTSwrQkFBK0IsbUNBQW1DO01BQ3RFLElBQUksQ0FBQyxhQUFhLEVBQUU7UUFDbEIsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCO01BQ0QsTUFBTSxZQUFZLGFBQWEsVUFBVSxFQUFFLENBQUM7TUFDNUMsTUFBTSxTQUFTLGFBQWEsT0FBTyxFQUFFLENBQUM7TUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUMzQixPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEI7TUFDRCxPQUFPLFFBQVEsS0FBSyxDQUFDLFNBQVMsV0FBVyxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDO0tBQ3JFLENBQUM7SUFDRixNQUFNLGNBQWMsa0JBQWtCO01BQ3BDLElBQUksRUFBRSxDQUFDO01BQ1AsTUFBTSxNQUFNLENBQUMsS0FBSyxJQUFJLGNBQWMsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUM7TUFDaEYsTUFBTSxRQUFRLEdBQUcsWUFBWSxFQUFFLENBQUM7TUFDaEMsSUFBSSxNQUFNLEVBQUU7UUFDVixLQUFLLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixLQUFLLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUMxQixNQUFNO1FBQ0wsS0FBSyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsS0FBSyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDekI7TUFDRCxPQUFPLEtBQUssQ0FBQztLQUNkLENBQUM7SUFDRixNQUFNLHFCQUFxQix3QkFBd0IsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLGdCQUFnQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuSCxNQUFNLE9BQU8sc0JBQXNCO01BQ2pDLE1BQU0sY0FBYyxJQUFJLEdBQUcsaUJBQWlCLEdBQUcsYUFBYSxDQUFDO01BQzdELElBQUksV0FBVyxJQUFJLENBQUM7TUFDcEIsT0FBTyxRQUFRLElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtRQUNwQyxJQUFJLFVBQVUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksT0FBTyxJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFO1VBQ3hDLFVBQVUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7VUFDekQsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQy9DLE9BQU8sT0FBTyxDQUFDO1dBQ2hCO1VBQ0QsTUFBTTtTQUNQO1FBQ0QsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsRUFBRTtVQUMvQixNQUFNO1NBQ1A7UUFDRCxXQUFXLFFBQVEsV0FBVyxDQUFDO09BQ2hDO01BQ0QsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxXQUFXLEtBQUssQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUMsTUFBTSxVQUFVLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUMsTUFBTSxpQkFBaUIsNEJBQTRCO01BQ2pELElBQUksSUFBSSxDQUFDO01BQ1QsTUFBTSxXQUFXLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ3pDLE1BQU0sWUFBWSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztNQUMzQyxNQUFNLFlBQVksS0FBSyxlQUFlLENBQUM7TUFDdkMsTUFBTSxTQUFTLEtBQUssWUFBWSxDQUFDO01BQ2pDLElBQUksdUJBQXVCLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDdEMsTUFBTSxRQUFRLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxTQUFTLFdBQVcsR0FBRyxTQUFTLENBQUM7UUFDckUsTUFBTSxXQUFXLEtBQUssYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdEQsSUFBSSxRQUFRLEtBQUssUUFBUSxFQUFFO1VBQ3pCLE9BQU8sS0FBSyxZQUFZLENBQUM7VUFDekIsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMzQixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUN2QjtTQUNGO1FBQ0QsSUFBSSxRQUFRLEtBQUssT0FBTyxFQUFFO1VBQ3hCLE9BQU8sS0FBSyxnQkFBZ0IsQ0FBQztVQUM3QixJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzNCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1dBQ3RCO1NBQ0Y7T0FDRjtNQUNELElBQUksQ0FBQyxLQUFLLFVBQVUsRUFBRTtRQUNwQixPQUFPLEtBQUssQ0FBQztPQUNkO01BQ0QsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDdkIsSUFBSSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsRUFBRTtVQUMvQixJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUU7WUFDbkIsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUIsSUFBSSxJQUFJLEVBQUU7Y0FDUixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN2QjtZQUNELE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNCLElBQUksSUFBSSxFQUFFO2NBQ1IsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdEI7V0FDRjtVQUNELElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3BCLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNCLElBQUksSUFBSSxFQUFFO2NBQ1IsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdEI7WUFDRCxPQUFPLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1QixJQUFJLElBQUksRUFBRTtjQUNSLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3ZCO1dBQ0Y7VUFDRCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFBSSx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxNQUFNLElBQUksU0FBUyxLQUFLLE9BQU8sR0FBRyxDQUFDLEVBQUU7VUFDOUUsSUFBSSxTQUFTLEtBQUssQ0FBQyxFQUFFO1lBQ25CLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVCLElBQUksSUFBSSxFQUFFO2NBQ1IsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdkI7V0FDRjtVQUNELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLDBCQUEwQixDQUFDLFNBQVMsQ0FBQyxJQUFJLE1BQU0sSUFBSSxDQUFDLEVBQUU7VUFDeEQsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDcEIsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0IsSUFBSSxJQUFJLEVBQUU7Y0FDUixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN0QjtXQUNGO1VBQ0QsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELElBQUksTUFBTSxLQUFLLFNBQVMsS0FBSyxPQUFPLEVBQUU7VUFDcEMsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7VUFDNUIsSUFBSSxJQUFJLEVBQUU7WUFDUixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUN2QjtVQUNELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUU7VUFDaEIsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7VUFDM0IsSUFBSSxJQUFJLEVBQUU7WUFDUixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUN0QjtVQUNELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7T0FDRjtNQUNELE9BQU8sS0FBSyxDQUFDO0tBQ2QsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLDRCQUE0Qiw0QkFBNEIsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUNySixNQUFNLDZCQUE2Qiw0QkFBNEI7TUFDN0QsTUFBTSxrQkFBa0IsY0FBYyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDL0QsT0FBTyxTQUFTLEtBQUssQ0FBQyxDQUFDLEdBQUcsYUFBYSxlQUFlLENBQUMsZUFBZSxDQUFDLEdBQUcsYUFBYSxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7S0FDdkgsQ0FBQztJQUNGLE1BQU0seUJBQXlCLE9BQU8sUUFBUSxLQUFLLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxRQUFRLENBQUMsQ0FBQztJQUM3RixNQUFNLDZCQUE2QixPQUFPLFFBQVEsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLFFBQVEsQ0FBQyxDQUFDO0lBQ3JHLE1BQU0seUJBQXlCLDJCQUEyQjtNQUN4RCxJQUFJLE1BQU0sYUFBYSxDQUFDO01BQ3hCLE9BQU8sTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDeEIsSUFBSSxHQUFHLFVBQVUsRUFBRSxFQUFFO1VBQ25CLE9BQU8sR0FBRyxDQUFDO1NBQ1o7T0FDRjtNQUNELE9BQU8sR0FBRyxDQUFDO0tBQ1osQ0FBQztJQUNGLE1BQU0sd0JBQXdCLGNBQWM7TUFDMUMsTUFBTSxjQUFjLGFBQWEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDNUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQyxFQUFFO1FBQzFDLE9BQU8sSUFBSSxDQUFDO09BQ2I7TUFDRCxPQUFPLFdBQVcsQ0FBQztLQUNwQixDQUFDOztJQUVGLElBQUksVUFBVSxDQUFDO0lBQ2YsQ0FBQyxzQkFBc0I7TUFDckIsVUFBVSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztNQUN2RCxVQUFVLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztLQUNyRCxDQUFDLFVBQVUsS0FBSyxhQUFhLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDcEMsTUFBTSwyQkFBMkIsd0JBQXdCLENBQUM7SUFDMUQsTUFBTSxXQUFXLFFBQVEsQ0FBQztJQUMxQixNQUFNLGNBQWMsV0FBVyxDQUFDO0lBQ2hDLE1BQU0sU0FBUyxNQUFNLENBQUM7SUFDdEIsTUFBTSxtQkFBbUIsa0JBQWtCLENBQUM7SUFDNUMsTUFBTSxXQUFXLFVBQVUsQ0FBQztJQUM1QixNQUFNLDJCQUEyQiwwQkFBMEIsQ0FBQztJQUM1RCxNQUFNLGVBQWUsZ0JBQWdCO01BQ25DLE1BQU0sVUFBVSxFQUFFLENBQUM7TUFDbkIsSUFBSSxXQUFXLElBQUksQ0FBQztNQUNwQixPQUFPLFFBQVEsSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFO1FBQ3BDLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZCLFdBQVcsUUFBUSxXQUFXLENBQUM7T0FDaEM7TUFDRCxPQUFPLE9BQU8sQ0FBQztLQUNoQixDQUFDO0lBQ0YsTUFBTSxjQUFjLHVCQUF1QjtNQUN6QyxJQUFJLFNBQVMsY0FBYyxFQUFFLElBQUksTUFBTSxHQUFHLFNBQVMsV0FBVyxPQUFPLEVBQUU7UUFDckUsT0FBTyxTQUFTLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUNyQztNQUNELE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQztJQUNGLE1BQU0sNEJBQTRCLHFCQUFxQjtNQUNyRCxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUN6QixJQUFJLGdCQUFnQixDQUFDLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEVBQUU7VUFDN0UsT0FBTyxhQUFhLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQztRQUNELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ2xCLE9BQU8sYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMvQjtPQUNGO01BQ0QsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDMUIsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksWUFBWSxDQUFDLEVBQUU7VUFDckUsT0FBTyxhQUFhLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNsQztRQUNELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ2xCLE9BQU8sYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUM7U0FDOUM7T0FDRjtNQUNELElBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQzFCLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ2hCLE9BQU8sYUFBYSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkM7UUFDRCxPQUFPLGFBQWEsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ2xDO01BQ0QsT0FBTyxhQUFhLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNuQyxDQUFDO0lBQ0YsTUFBTSxvQkFBb0Isb0JBQW9CO01BQzVDLE1BQU0sY0FBYyxRQUFRLFlBQVksQ0FBQztNQUN6QyxJQUFJLFdBQVcsSUFBSSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUNoRCxJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtVQUN6QixPQUFPLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDdEMsTUFBTTtVQUNMLE9BQU8sYUFBYSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDMUM7T0FDRixNQUFNO1FBQ0wsT0FBTyxtQkFBbUIsQ0FBQyxVQUFVLFNBQVMsRUFBRSxhQUFhLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUN0RjtLQUNGLENBQUM7SUFDRixNQUFNLHNCQUFzQiwrQkFBK0I7TUFDekQsSUFBSSxJQUFJLENBQUM7TUFDVCxJQUFJLFFBQVEsQ0FBQztNQUNiLElBQUksU0FBUyxDQUFDO01BQ2QsSUFBSSxhQUFhLENBQUM7TUFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNuQyxPQUFPLElBQUksQ0FBQztPQUNiO01BQ0QsSUFBSSxRQUFRLFFBQVEsQ0FBQyxhQUFhLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksVUFBVSxFQUFFO1FBQ2pFLGdCQUFnQixhQUFhLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDO1FBQ3BELElBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLElBQUksVUFBVSxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksVUFBVSxDQUFDLEVBQUU7VUFDN0YsT0FBTyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsR0FBRyxhQUFhLE9BQU8sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxHQUFHLGFBQWEsQ0FBQztTQUN0RjtPQUNGLE1BQU07UUFDTCxnQkFBZ0IsUUFBUSxDQUFDO09BQzFCO01BQ0QsTUFBTSxZQUFZLGFBQWEsVUFBVSxFQUFFLENBQUM7TUFDNUMsSUFBSSxTQUFTLGFBQWEsT0FBTyxFQUFFLENBQUM7TUFDcEMsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDdkIsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTtVQUN4QyxPQUFPLGFBQWEsQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLE1BQU0sR0FBRyxTQUFTLE9BQU8sRUFBRTtVQUN0RCxPQUFPLGFBQWEsQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUMzQztRQUNELE9BQU8sU0FBUyxDQUFDO09BQ2xCLE1BQU07UUFDTCxJQUFJLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1VBQ3hDLFdBQVcsV0FBVyxDQUFDLFNBQVMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7VUFDOUMsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2NBQ3ZCLFlBQVksUUFBUSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsd0JBQXdCLEVBQUUsUUFBUSxDQUFDLENBQUM7Y0FDOUUsSUFBSSxTQUFTLEVBQUU7Z0JBQ2IsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7a0JBQ3ZCLE9BQU8sYUFBYSxDQUFDLFNBQVMsRUFBRSxTQUFTLEtBQUssT0FBTyxDQUFDLENBQUM7aUJBQ3hEO2dCQUNELE9BQU8sYUFBYSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7ZUFDdkM7YUFDRjtZQUNELElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2NBQ3RCLE9BQU8sYUFBYSxDQUFDLFFBQVEsRUFBRSxRQUFRLEtBQUssT0FBTyxDQUFDLENBQUM7YUFDdEQ7WUFDRCxPQUFPLGFBQWEsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1dBQ3ZDO1NBQ0Y7UUFDRCxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxNQUFNLEdBQUcsU0FBUyxXQUFXLE9BQU8sRUFBRTtVQUNqRSxXQUFXLFdBQVcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7VUFDMUMsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM5QixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtjQUNwQixPQUFPLGlCQUFpQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQzthQUMxQztZQUNELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7Y0FDdkIsWUFBWSxRQUFRLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSx3QkFBd0IsRUFBRSxRQUFRLENBQUMsQ0FBQztjQUM5RSxJQUFJLFNBQVMsRUFBRTtnQkFDYixJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtrQkFDdkIsT0FBTyxhQUFhLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNwQztnQkFDRCxPQUFPLGFBQWEsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2VBQ3hDO2FBQ0Y7WUFDRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtjQUN0QixPQUFPLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDbkM7WUFDRCxPQUFPLGFBQWEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1dBQ3RDO1NBQ0Y7UUFDRCxPQUFPLFFBQVEsR0FBRyxRQUFRLEdBQUcsYUFBYSxRQUFRLEVBQUUsQ0FBQztPQUN0RDtNQUNELElBQUksSUFBSSxLQUFLLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxhQUFhLFFBQVEsRUFBRSxJQUFJLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxhQUFhLFVBQVUsRUFBRSxDQUFDLEVBQUU7UUFDckgsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JELElBQUksd0JBQXdCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO1VBQ3hDLE9BQU8seUJBQXlCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ25EO09BQ0Y7TUFDRCxXQUFXLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSx3QkFBd0IsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7TUFDbkYsTUFBTSw4QkFBOEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLHdCQUF3QixDQUFDLENBQUMsQ0FBQztNQUM5RyxJQUFJLDJCQUEyQixLQUFLLENBQUMsUUFBUSxJQUFJLENBQUMsMkJBQTJCLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO1FBQ2pHLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1VBQ3pCLGdCQUFnQixhQUFhLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1NBQ2xFLE1BQU07VUFDTCxnQkFBZ0IsYUFBYSxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQztTQUNuRTtRQUNELE9BQU8sYUFBYSxDQUFDO09BQ3RCO01BQ0QsSUFBSSxRQUFRLEVBQUU7UUFDWixPQUFPLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztPQUN2RDtNQUNELE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQztJQUNGLE1BQU0sY0FBYyxTQUFTO01BQzNCLE1BQU0saUJBQWlCO1FBQ3JCLE9BQU8sbUJBQW1CLENBQUMsVUFBVSxTQUFTLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO09BQ3RFO01BQ0QsTUFBTSxpQkFBaUI7UUFDckIsT0FBTyxtQkFBbUIsQ0FBQyxVQUFVLFVBQVUsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDdkU7S0FDRixDQUFDLENBQUM7O0lBRUgsTUFBTSxtQkFBbUIsMEJBQTBCO01BQ2pELE1BQU0sV0FBVyxPQUFPLEdBQUcsYUFBYSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsYUFBYSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDcEYsT0FBTyxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztLQUM5QyxDQUFDO0lBQ0YsTUFBTSxlQUFlLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25HLE1BQU0sa0JBQWtCLFlBQVk7TUFDbEMsSUFBSSxhQUFhLGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUMxQyxPQUFPLFFBQVEsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ2hDLE1BQU07UUFDTCxPQUFPLGtCQUFrQixDQUFDLFFBQVEsUUFBUSxFQUFFLENBQUMsQ0FBQztPQUMvQztLQUNGLENBQUM7SUFDRixNQUFNLGVBQWUsWUFBWTtNQUMvQixJQUFJLGFBQWEsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQzFDLE1BQU0sWUFBWSxRQUFRLFVBQVUsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sUUFBUSxPQUFPLEVBQUUsS0FBSyxTQUFTLEtBQUssT0FBTyxDQUFDO09BQ3BELE1BQU07UUFDTCxPQUFPLGtCQUFrQixDQUFDLFFBQVEsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7T0FDbkQ7S0FDRixDQUFDO0lBQ0YsTUFBTSwyQkFBMkIsY0FBYyxDQUFDLGFBQWEsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvSixNQUFNLFNBQVMsWUFBWSxDQUFDLGFBQWEsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDakcsTUFBTSxxQkFBcUIsdUJBQXVCO01BQ2hELElBQUksT0FBTyxFQUFFO1FBQ1gsT0FBTyxDQUFDLHdCQUF3QixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO09BQzFHLE1BQU07UUFDTCxPQUFPLENBQUMsd0JBQXdCLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7T0FDekY7S0FDRixDQUFDO0lBQ0YsTUFBTSxlQUFlLHdCQUF3QjtNQUMzQyxNQUFNLFNBQVMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ2pDLE9BQU8sUUFBUSxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDckUsQ0FBQztJQUNGLE1BQU0sV0FBVyx5QkFBeUIsWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO01BQ3JGLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksa0JBQWtCLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRTtRQUMxRSxPQUFPLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQ3hDLE1BQU07UUFDTCxPQUFPLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO09BQzFCO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxpQkFBaUIsdUNBQXVDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbk0sTUFBTSxhQUFhLHNCQUFzQjtNQUN2QyxNQUFNLFlBQVksT0FBTyxHQUFHLE9BQU8sV0FBVyxHQUFHLE9BQU8sVUFBVSxDQUFDO01BQ25FLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ3ZCLE9BQU8sUUFBUSxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxHQUFHLFNBQVMsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO09BQ3JGLE1BQU0sSUFBSSxTQUFTLEVBQUU7UUFDcEIsSUFBSSxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsRUFBRTtVQUNqQyxPQUFPLFFBQVEsS0FBSyxDQUFDLE9BQU8sR0FBRyxhQUFhLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztTQUMzRixNQUFNO1VBQ0wsT0FBTyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ3REO09BQ0YsTUFBTTtRQUNMLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN4QjtLQUNGLENBQUM7SUFDRixNQUFNLGVBQWUsS0FBSyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQyxNQUFNLGVBQWUsS0FBSyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRCxNQUFNLGtCQUFrQixLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hELE1BQU0saUJBQWlCLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7O0lBRWhELE1BQU0sV0FBVyxZQUFZLENBQUM7SUFDOUIsTUFBTSxjQUFjLFFBQVEsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxLQUFLLFFBQVEsQ0FBQztJQUN0RSxNQUFNLDBCQUEwQixnQkFBZ0I7TUFDOUMsSUFBSSxjQUFjLElBQUksQ0FBQztNQUN2QixPQUFPLFdBQVcsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFO1FBQzFDLElBQUksV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1VBQzVCLE9BQU8sV0FBVyxDQUFDO1NBQ3BCO1FBQ0QsY0FBYyxXQUFXLFdBQVcsQ0FBQztPQUN0QztNQUNELE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQzs7SUFFRixNQUFNLHVCQUF1QixZQUFZLFFBQVEsQ0FBQyxRQUFRLE1BQU0sQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sa0JBQWtCLFlBQVksS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzRCxNQUFNLGVBQWUsWUFBWSxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sa0JBQWtCLFlBQVksS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1RCxNQUFNLGlCQUFpQixZQUFZLEtBQUssUUFBUSxDQUFDLFFBQVEsTUFBTSxDQUFDLENBQUM7O0lBRWpFLE1BQU0sb0JBQW9CLFlBQVksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsUUFBUSxDQUFDLEdBQUcsUUFBUSxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQzFILE1BQU0sV0FBVyxlQUFlO01BQzlCLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLEVBQUU7UUFDN0QsSUFBSSxVQUFVLEdBQUcsMkJBQTJCLENBQUM7T0FDOUM7TUFDRCxPQUFPLElBQUksQ0FBQztLQUNiLENBQUM7SUFDRixNQUFNLCtCQUErQixtQkFBbUI7TUFDdEQsTUFBTSxXQUFXLFFBQVEsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxFQUFFLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUN6RSxNQUFNLFNBQVMsUUFBUSxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ3JFLE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCO1FBQzdDLE1BQU0sUUFBUSxHQUFHLFVBQVUsRUFBRSxDQUFDO1FBQzlCLEtBQUssU0FBUyxDQUFDLEtBQUssVUFBVSxFQUFFLEVBQUUsS0FBSyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELEtBQUssT0FBTyxDQUFDLEdBQUcsVUFBVSxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLE9BQU87VUFDTCxLQUFLO1VBQ0wsU0FBUyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7U0FDckMsQ0FBQztPQUNILENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGFBQWEsZUFBZTtNQUNoQyxJQUFJLEVBQUUsQ0FBQztNQUNQLE1BQU0sTUFBTSxDQUFDLEtBQUssSUFBSSxjQUFjLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDO01BQ2hGLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUM1QyxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUMzQixHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDMUIsR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3pCLENBQUM7SUFDRixNQUFNLFlBQVksUUFBUSxDQUFDLElBQUksY0FBYyxFQUFFLENBQUM7SUFDaEQsTUFBTSx1QkFBdUIsZUFBZSxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTztNQUNsRixHQUFHLFNBQVMsQ0FBQyxHQUFHLFVBQVUsRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztNQUM1QyxHQUFHLE9BQU8sQ0FBQyxHQUFHLFVBQVUsRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztNQUMxQyxPQUFPLElBQUksQ0FBQztLQUNiLENBQUMsQ0FBQztJQUNILE1BQU0seUJBQXlCLHFCQUFxQjtNQUNsRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7UUFDMUQsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQztPQUNiLE1BQU07UUFDTCxPQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0YsQ0FBQztJQUNGLE1BQU0sY0FBYywrQkFBK0I7TUFDakQsTUFBTSxRQUFRLFFBQVEsQ0FBQyxLQUFLLEdBQUcsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDO01BQ2hELE1BQU0sT0FBTyxHQUFHLFFBQVEsRUFBRSxDQUFDO01BQzNCLElBQUksS0FBSyxFQUFFO1FBQ1QsSUFBSSxPQUFPLElBQUksQ0FBQztRQUNoQixJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLEtBQUssSUFBSSxJQUFJLEtBQUssT0FBTyxHQUFHLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtVQUNsRCxNQUFNLFdBQVcsSUFBSSxXQUFXLENBQUM7VUFDakMsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQzNDLE9BQU8sSUFBSSxDQUFDO1dBQ2I7VUFDRCxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLE9BQU8sR0FBRyxDQUFDLEVBQUU7WUFDbEMsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFO2NBQzNDLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxPQUFPLG9CQUFvQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztXQUN4QztVQUNELE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNCO1FBQ0QsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7VUFDbEIsU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7VUFDckIsU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxXQUFXLE9BQU8sQ0FBQyxDQUFDO1NBQ3JEO1FBQ0QsSUFBSSxLQUFLLEVBQUU7VUFDVCxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDNUIsTUFBTTtVQUNMLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUMxQjtPQUNGO01BQ0QsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsUUFBUSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDdkUsTUFBTSxrQkFBa0IsMkJBQTJCO01BQ2pELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7TUFDbkQsTUFBTSxlQUFlLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLE1BQU0sV0FBVyxDQUFDO01BQ3ZGLE1BQU0sT0FBTyxRQUFRLEtBQUssQ0FBQztNQUMzQixJQUFJLE1BQU0sSUFBSSxZQUFZLEVBQUU7UUFDMUIsSUFBSSxTQUFTLENBQUM7UUFDZCxJQUFJLE1BQU0sQ0FBQztRQUNYLElBQUksTUFBTSxLQUFLLE9BQU8sRUFBRTtVQUN0QixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsWUFBWSxZQUFZLENBQUM7WUFDekIsU0FBUyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztXQUNoQyxNQUFNO1lBQ0wsSUFBSSxNQUFNLGNBQWMsRUFBRSxFQUFFO2NBQzFCLFlBQVksTUFBTSxXQUFXLENBQUM7Y0FDOUIsU0FBUyxDQUFDLENBQUM7YUFDWixNQUFNLElBQUksZUFBZSxDQUFDLE1BQU0sWUFBWSxDQUFDLEVBQUU7Y0FDOUMsWUFBWSxNQUFNLFlBQVksQ0FBQztjQUMvQixTQUFTLENBQUMsQ0FBQzthQUNaLE1BQU0sSUFBSSxlQUFlLENBQUMsTUFBTSxnQkFBZ0IsQ0FBQyxFQUFFO2NBQ2xELFlBQVksTUFBTSxnQkFBZ0IsQ0FBQztjQUNuQyxTQUFTLE1BQU0sZ0JBQWdCLEtBQUssT0FBTyxDQUFDO2FBQzdDLE1BQU07Y0FDTCxZQUFZLFlBQVksQ0FBQztjQUN6QixTQUFTLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNwQztXQUNGO1NBQ0YsTUFBTTtVQUNMLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxZQUFZLFlBQVksQ0FBQztZQUN6QixTQUFTLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1dBQ2hDLE1BQU07WUFDTCxJQUFJLE1BQU0sY0FBYyxFQUFFLEVBQUU7Y0FDMUIsWUFBWSxNQUFNLFdBQVcsQ0FBQztjQUM5QixTQUFTLENBQUMsQ0FBQzthQUNaLE1BQU0sSUFBSSxlQUFlLENBQUMsTUFBTSxnQkFBZ0IsQ0FBQyxFQUFFO2NBQ2xELFlBQVksTUFBTSxnQkFBZ0IsQ0FBQztjQUNuQyxTQUFTLE1BQU0sZ0JBQWdCLEtBQUssT0FBTyxDQUFDO2FBQzdDLE1BQU07Y0FDTCxZQUFZLFlBQVksQ0FBQztjQUN6QixTQUFTLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ2hDO1dBQ0Y7U0FDRjtRQUNELElBQUksQ0FBQyxJQUFJLEVBQUU7VUFDVCxNQUFNLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQztVQUNwQyxNQUFNLE9BQU8sTUFBTSxZQUFZLENBQUM7VUFDaEMsS0FBSyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTSxXQUFXLENBQUMsRUFBRSxRQUFRO1lBQ2hELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO2NBQ2xCLElBQUksS0FBSyxHQUFHLElBQUksS0FBSyxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQzlDO1dBQ0YsQ0FBQyxDQUFDO1VBQ0gsSUFBSSxXQUFXLENBQUM7VUFDaEIsT0FBTyxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsRUFBRTtZQUN4RCxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDL0I7VUFDRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsUUFBUSxFQUFFLEVBQUU7WUFDOUQsTUFBTSxNQUFNLElBQUksS0FBSyxPQUFPLENBQUM7WUFDN0IsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztZQUMzQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQixZQUFZLElBQUksQ0FBQztZQUNqQixTQUFTLEdBQUcsQ0FBQztXQUNkO1NBQ0Y7UUFDRCxPQUFPLFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztPQUN4RCxNQUFNO1FBQ0wsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sZUFBZSxtQkFBbUI7TUFDdEMsTUFBTSxRQUFRLEdBQUcsVUFBVSxFQUFFLENBQUM7TUFDOUIsSUFBSSxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO1FBQ3ZGLE9BQU8sUUFBUSxLQUFLLENBQUM7VUFDbkIsS0FBSztVQUNMLFNBQVMsaUJBQWlCLENBQUMsUUFBUSxDQUFDO1NBQ3JDLENBQUMsQ0FBQztPQUNKLE1BQU07UUFDTCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEI7S0FDRixDQUFDO0lBQ0YsTUFBTSxZQUFZLG1CQUFtQjtNQUNuQyxNQUFNLFdBQVcsZUFBZSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDekQsTUFBTSxTQUFTLGVBQWUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQ3JELE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFNLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxnQkFBZ0I7UUFDMUQsTUFBTSxRQUFRLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDOUIsS0FBSyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLFVBQVUsRUFBRSxDQUFDLEVBQUUsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM3RCxPQUFPO1VBQ0wsS0FBSztVQUNMLFNBQVMsaUJBQWlCLENBQUMsUUFBUSxDQUFDO1NBQ3JDLENBQUM7T0FDSCxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxlQUFlLG1CQUFtQixRQUFRLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLFFBQVEsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU87TUFDMUcsTUFBTSxRQUFRLEdBQUcsVUFBVSxFQUFFLENBQUM7TUFDOUIsS0FBSyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDdEIsT0FBTztRQUNMLEtBQUs7UUFDTCxTQUFTLElBQUk7T0FDZCxDQUFDO0tBQ0gsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxVQUFVLHlCQUF5QjtNQUN2QyxNQUFNLE1BQU0sU0FBUyxJQUFJLENBQUM7TUFDMUIsSUFBSSxRQUFRLEVBQUU7UUFDWixJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRTtVQUM1QixPQUFPLFlBQVksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDcEMsTUFBTSxJQUFJLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxFQUFFO1VBQ3pDLE9BQU8sNEJBQTRCLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3BELE1BQU0sSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUU7VUFDakMsT0FBTyxTQUFTLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ2pDLE1BQU0sSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUU7VUFDcEMsT0FBTyxZQUFZLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3BDLE1BQU0sSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUU7VUFDcEMsT0FBTyxRQUFRLEtBQUssQ0FBQztZQUNuQixPQUFPLFFBQVEsSUFBSTtZQUNuQixTQUFTLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztXQUNyQyxDQUFDLENBQUM7U0FDSjtPQUNGO01BQ0QsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO0tBQ3hCLENBQUM7O0lBRUYsTUFBTSxnQkFBZ0IsaUNBQWlDO01BQ3JELE9BQU8sYUFBYSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FDbkQsQ0FBQztJQUNGLE1BQU0saUJBQWlCLHlCQUF5QjtNQUM5QyxPQUFPLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsS0FBSztRQUN0RCxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7T0FDbEMsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sbUJBQW1CLFFBQVE7TUFDL0IsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxRQUFRLEtBQUssTUFBTSxJQUFJLElBQUksYUFBYSxDQUFDLGVBQWUsQ0FBQyxLQUFLLFVBQVUsQ0FBQztLQUMxRyxDQUFDOztJQUVGLE1BQU0sS0FBSyxZQUFZLFVBQVUsUUFBUSxLQUFLLE1BQU0sQ0FBQztJQUNyRCxNQUFNLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLE1BQU0sZUFBZSxPQUFPLEdBQUcsS0FBSyxFQUFFLElBQUksZUFBZSxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDOUUsTUFBTSxZQUFZLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRTlFLE1BQU0sWUFBWSxVQUFVLEVBQUUsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVELE1BQU0sZUFBZSxPQUFPLGFBQWEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2xFLE1BQU0sUUFBUSxhQUFhO01BQ3pCLE1BQU0sTUFBTSxTQUFTLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUNuQyxPQUFPLENBQUMsR0FBRyxPQUFPLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxhQUFhLEVBQUUsQ0FBQztLQUMzRCxDQUFDO0lBQ0YsTUFBTSxXQUFXLGNBQWM7TUFDN0IsTUFBTSxRQUFRLEtBQUssQ0FBQyxVQUFVLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxVQUFVLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDO01BQ3ZGLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3pCLENBQUM7O0lBRUYsTUFBTSxXQUFXLHdEQUF3RCxDQUFDO0lBQzFFLE1BQU0sWUFBWSwrRUFBK0UsQ0FBQztJQUNsRyxNQUFNLGFBQWEsOEJBQThCO01BQy9DLEdBQUc7TUFDSCxLQUFLO01BQ0wsSUFBSTtNQUNKLEtBQUs7S0FDTixDQUFDLENBQUM7SUFDSCxNQUFNLG1CQUFtQiw2QkFBNkI7TUFDcEQsTUFBTSxJQUFJLFFBQVEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDNUIsTUFBTSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDOUIsTUFBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDN0IsTUFBTSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUM1QixPQUFPLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUMvQixDQUFDO0lBQ0YsTUFBTSxhQUFhLGNBQWM7TUFDL0IsSUFBSSxVQUFVLEtBQUssYUFBYSxFQUFFO1FBQ2hDLE9BQU8sUUFBUSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDOUM7TUFDRCxNQUFNLFdBQVcsUUFBUSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7TUFDM0MsSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFO1FBQ3JCLE9BQU8sUUFBUSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztPQUNwRjtNQUNELE1BQU0sWUFBWSxTQUFTLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztNQUM3QyxJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUU7UUFDdEIsT0FBTyxRQUFRLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ2hHO01BQ0QsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO0tBQ3hCLENBQUM7O0lBRUYsTUFBTSxrQkFBa0IsU0FBUyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzs7SUFFdEcsTUFBTSxjQUFjLGFBQWE7TUFDL0IsTUFBTSxTQUFTLEVBQUUsQ0FBQztNQUNsQixJQUFJLFNBQVMsRUFBRTtRQUNiLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7VUFDN0MsTUFBTSxLQUFLLENBQUMsU0FBUyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0QztPQUNGO01BQ0QsT0FBTyxNQUFNLENBQUM7S0FDZixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsVUFBVTtNQUNqQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUztRQUM3QixNQUFNLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxHQUFHLENBQUMsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7T0FDakQsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sb0JBQW9CLGFBQWE7TUFDckMsT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7S0FDMUMsQ0FBQzs7SUFFRixNQUFNLHFCQUFxQixVQUFVLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN2RixNQUFNLHNCQUFzQixPQUFPLFdBQVcsQ0FBQyxHQUFHLEVBQUUsNkNBQTZDLENBQUMsQ0FBQztJQUNuRyxNQUFNLDhCQUE4QixxQkFBcUI7TUFDdkQsTUFBTSxnQkFBZ0IsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDbkQsT0FBTyxhQUFhLE9BQU8sR0FBRyxDQUFDLEdBQUcsYUFBYSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzlFLENBQUM7SUFDRixNQUFNLHFCQUFxQixVQUFVLDJCQUEyQixDQUFDLFdBQVcsQ0FBQyxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUMsRUFBRSxZQUFZLFFBQVEsQ0FBQyxNQUFNLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqSixNQUFNLGtCQUFrQixrQkFBa0IsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7O0lBRTVFLE1BQU0sZUFBZSxPQUFPO01BQzFCLE1BQU0sS0FBSyxHQUFHLGVBQWUsRUFBRSxLQUFLLEdBQUcsWUFBWSxDQUFDO01BQ3BELElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ2hCLE9BQU8sRUFBRSxLQUFLLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxZQUFZLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDN0UsTUFBTTtRQUNMLE9BQU8sUUFBUSxLQUFLLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksUUFBUSxDQUFDLENBQUM7T0FDbkU7S0FDRixDQUFDO0lBQ0YsTUFBTSxhQUFhLE9BQU87TUFDeEIsTUFBTSxLQUFLLEdBQUcsYUFBYSxFQUFFLEtBQUssR0FBRyxVQUFVLENBQUM7TUFDaEQsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDaEIsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLE9BQU8sR0FBRyxRQUFRLEtBQUssQ0FBQyxZQUFZLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDMUYsTUFBTTtRQUNMLE9BQU8sUUFBUSxLQUFLLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLFFBQVEsQ0FBQyxDQUFDO09BQ3ZFO0tBQ0YsQ0FBQztJQUNGLE1BQU0sbUJBQW1CLFFBQVE7TUFDL0IsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFNBQVM7UUFDdEQsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztPQUMvQyxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsUUFBUTtNQUM5QixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsU0FBUztRQUNyRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUU7VUFDeEIsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQ3ZDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1dBQ2hELENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2QsTUFBTTtVQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQzlDO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0seUJBQXlCLGNBQWM7TUFDM0MsT0FBTyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSx3QkFBd0I7UUFDdkUsTUFBTSxRQUFRLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsTUFBTSxNQUFNLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzdELE9BQU8sS0FBSyxPQUFPLEVBQUUsSUFBSSxHQUFHLE9BQU8sRUFBRSxDQUFDO09BQ3ZDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ2pCLENBQUM7SUFDRixNQUFNLGVBQWUsMkJBQTJCO01BQzlDLE1BQU0sT0FBTyxJQUFJLENBQUM7TUFDbEIsTUFBTSxTQUFTLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztNQUM3QyxNQUFNLG9DQUFvQyxRQUFRLENBQUMsR0FBRyxPQUFPLGtDQUFrQyxFQUFFLEVBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQztRQUMxSCxJQUFJO1FBQ0osSUFBSTtRQUNKLE9BQU87T0FDUixFQUFFLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ3hCLElBQUksY0FBYyxJQUFJLENBQUM7TUFDdkIsR0FBRztRQUNELElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLFdBQVcsS0FBSyxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQUU7VUFDdEUsSUFBSSxLQUFLLEVBQUU7WUFDVCxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7V0FDOUIsTUFBTTtZQUNMLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxXQUFXLEtBQUssT0FBTyxDQUFDLENBQUM7V0FDbEQ7VUFDRCxPQUFPO1NBQ1I7UUFDRCxJQUFJLGlDQUFpQyxDQUFDLFdBQVcsU0FBUyxDQUFDLEVBQUU7VUFDM0QsSUFBSSxLQUFLLEVBQUU7WUFDVCxHQUFHLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztXQUNqQyxNQUFNO1lBQ0wsSUFBSSxXQUFXLFNBQVMsS0FBSyxJQUFJLEVBQUU7Y0FDakMsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDL0IsTUFBTTtjQUNMLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQzlCO1dBQ0Y7VUFDRCxPQUFPO1NBQ1I7T0FDRixRQUFRLGNBQWMsS0FBSyxHQUFHLE1BQU0sS0FBSyxFQUFFLEdBQUcsTUFBTSxLQUFLLEVBQUUsRUFBRTtNQUM5RCxJQUFJLElBQUksU0FBUyxLQUFLLE1BQU0sRUFBRTtRQUM1QixJQUFJLEtBQUssRUFBRTtVQUNULEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN2QixNQUFNO1VBQ0wsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksV0FBVyxPQUFPLENBQUMsQ0FBQztTQUMxQztPQUNGO0tBQ0YsQ0FBQztJQUNGLE1BQU0sZUFBZSxVQUFVO01BQzdCLE1BQU0sTUFBTSxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7TUFDdEMsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0tBQ2pELENBQUM7SUFDRixNQUFNLGNBQWMsc0JBQXNCO01BQ3hDLE1BQU0scUJBQXFCLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3RELElBQUksa0JBQWtCLE9BQU8sR0FBRyxDQUFDLEVBQUU7UUFDakMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLFFBQVE7VUFDakMsTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDO1VBQ3RCLE1BQU0sY0FBYyxNQUFNLElBQUksVUFBVSxFQUFFLENBQUM7VUFDM0MsV0FBVyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDakMsV0FBVyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDOUIsUUFBUSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUM3QixDQUFDLENBQUM7T0FDSixNQUFNO1FBQ0wsUUFBUSxDQUFDLE1BQU0sVUFBVSxPQUFPLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztPQUM1QztLQUNGLENBQUM7SUFDRixNQUFNLFdBQVcsdUNBQXVDO01BQ3RELE1BQU0sV0FBVyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7TUFDaEUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQ25CLFNBQVMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3BDLENBQUM7O0lBRUYsTUFBTSxTQUFTLFFBQVEsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLENBQUM7SUFDM0YsTUFBTSxrQkFBa0IsUUFBUSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2SCxNQUFNLDRCQUE0QixlQUFlO01BQy9DLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsRUFBRTtRQUM3RCxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDOUQsTUFBTSxRQUFRLFFBQVEsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDekMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO09BQ25DLE1BQU07UUFDTCxPQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0YsQ0FBQztJQUNGLE1BQU0sZUFBZSxPQUFPLEdBQUcsa0JBQWtCLEtBQUssSUFBSSxDQUFDO0lBQzNELE1BQU0sb0JBQW9CLHFDQUFxQztNQUM3RCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQztNQUNoQyxNQUFNLDJCQUEyQixTQUFTLFFBQVEsRUFBRSxDQUFDO01BQ3JELE1BQU0sa0NBQWtDLHdCQUF3QixDQUFDLHdCQUF3QixDQUFDLENBQUM7TUFDM0YsUUFBUSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTTtRQUM5QixNQUFNLEVBQUUsQ0FBQztPQUNWLENBQUMsQ0FBQztNQUNILE1BQU0sK0JBQStCLCtCQUErQixJQUFJLHdCQUF3QixDQUFDLHdCQUF3QixDQUFDLENBQUM7TUFDM0gsSUFBSSw0QkFBNEIsSUFBSSxHQUFHLFVBQVUsQ0FBQyx3QkFBd0IsRUFBRSxNQUFNLFFBQVEsRUFBRSxDQUFDLEVBQUU7UUFDN0YsTUFBTSxVQUFVLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO09BQ25ELE1BQU0sSUFBSSxlQUFlLENBQUMsU0FBUyxTQUFTLEVBQUUsQ0FBQyxFQUFFO1FBQ2hELHNCQUFzQixDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztPQUN4QztLQUNGLENBQUM7SUFDRixNQUFNLHlCQUF5QixvQkFBb0I7TUFDakQsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO01BQ1gsTUFBTSxNQUFNLFNBQVMsT0FBTyxFQUFFLENBQUM7TUFDL0IsTUFBTSw2QkFBNkIsR0FBRyxHQUFHLENBQUM7TUFDMUMsTUFBTSxlQUFlLFNBQVMsUUFBUSxFQUFFLENBQUM7TUFDekMsSUFBSSx5QkFBeUIsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLEVBQUU7UUFDaEQsT0FBTztPQUNSO01BQ0QsSUFBSSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUU7UUFDL0IsTUFBTSxRQUFRLGNBQWMsV0FBVyxDQUFDO1FBQ3hDLE1BQU0sT0FBTyxHQUFHLFFBQVEsRUFBRSxDQUFDO1FBQzNCLElBQUksTUFBTSxDQUFDO1FBQ1gsSUFBSSxXQUFXLEdBQUcsS0FBSyxPQUFPLEVBQUU7VUFDOUIsTUFBTSxZQUFZLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztVQUNyQyxTQUFTLElBQUksYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsU0FBUyxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7U0FDM0gsTUFBTTtVQUNMLE1BQU0sWUFBWSxLQUFLLENBQUMsS0FBSyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7VUFDMUMsU0FBUyxJQUFJLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFNBQVMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1VBQzFILE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25CO1FBQ0QsS0FBSyxJQUFJLE9BQU8sTUFBTSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxNQUFNLEtBQUssRUFBRSxFQUFFO1VBQzVELElBQUksR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxPQUFPLEVBQUU7WUFDNUMsT0FBTztXQUNSLE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0RCxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdEIsU0FBUyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEIsT0FBTztXQUNSO1NBQ0Y7T0FDRjtLQUNGLENBQUM7SUFDRixNQUFNLDBCQUEwQixxQkFBcUI7TUFDbkQsSUFBSSxJQUFJLEVBQUU7UUFDUixNQUFNLFdBQVcsSUFBSSxHQUFHLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQztRQUMxRCxLQUFLLE9BQU8sR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1VBQ3BFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEQsT0FBTyxJQUFJLENBQUM7V0FDYjtTQUNGO09BQ0Y7TUFDRCxPQUFPLFNBQVMsQ0FBQztLQUNsQixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0Isa0JBQWtCLENBQUMsQ0FBQyxNQUFNLHFCQUFxQixFQUFFLENBQUMsSUFBSSxTQUFTLFlBQVksRUFBRSxDQUFDLElBQUksa0JBQWtCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pJLE1BQU0sVUFBVSx1QkFBdUI7TUFDckMsT0FBTyxFQUFFLE9BQU8sYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztLQUM5QyxDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsT0FBTyxjQUFjLEtBQUssS0FBSztNQUN4RCxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDekMsTUFBTSxPQUFPLFdBQVcsR0FBRyxJQUFJLEtBQUssUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztRQUN2RSxPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO09BQy9CLE1BQU07UUFDTCxPQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0YsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLFFBQVE7TUFDaEMsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxLQUFLLENBQUMsQ0FBQztLQUNuRSxDQUFDO0lBQ0YsTUFBTSwwQkFBMEIsa0JBQWtCO01BQ2hELE1BQU0sbUJBQW1CLDBCQUEwQixDQUFDO01BQ3BELE1BQU0sNEJBQTRCLDRCQUE0QixDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3ZFLE1BQU0sV0FBVyxTQUFTLENBQUMseUJBQXlCLENBQUMsR0FBRyxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLHlCQUF5QixFQUFFLENBQUMsQ0FBQztNQUNsSSxPQUFPLElBQUksQ0FBQyxZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztLQUNuRCxDQUFDO0lBQ0YsTUFBTSx5QkFBeUIsa0JBQWtCO01BQy9DLE1BQU0sTUFBTSxNQUFNLElBQUksQ0FBQztNQUN2QixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUM7S0FDaEwsQ0FBQztJQUNGLE1BQU0sY0FBYyxpQkFBaUI7TUFDbkMsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDckIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDcEIsTUFBTSxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUM5QixRQUFRLEtBQUssUUFBUSxDQUFDLFNBQVMsRUFBRSxlQUFlO1VBQzlDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQztTQUMxQixDQUFDLENBQUM7T0FDSjtNQUNELE9BQU8sS0FBSyxDQUFDO0tBQ2QsQ0FBQztJQUNGLE1BQU0sU0FBUyxnQkFBZ0I7TUFDN0IsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO01BQ2xCLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztNQUNsQixPQUFPLEVBQUUsSUFBSSxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQztNQUNwQyxPQUFPLEVBQUUsSUFBSSxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQztNQUNwQyxPQUFPLElBQUksWUFBWSxFQUFFLEtBQUssSUFBSSxZQUFZLEVBQUUsQ0FBQztLQUNsRCxDQUFDO0lBQ0YsTUFBTSxzQkFBc0IsaUJBQWlCO01BQzNDLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3JCLE9BQU8sSUFBSSxDQUFDO09BQ2IsTUFBTTtRQUNMLElBQUksV0FBVyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsSUFBSSxJQUFJLEtBQUssT0FBTyxJQUFJLElBQUksS0FBSyxpQkFBaUIsRUFBRTtVQUNsRCxXQUFXLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN0QztRQUNELElBQUksSUFBSSxLQUFLLFlBQVksSUFBSSxLQUFLLEtBQUssR0FBRyxFQUFFO1VBQzFDLFdBQVcsTUFBTSxDQUFDO1NBQ25CO1FBQ0QsSUFBSSxJQUFJLEtBQUssWUFBWSxFQUFFO1VBQ3pCLFdBQVcsUUFBUSxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ2xFO1FBQ0QsT0FBTyxRQUFRLENBQUM7T0FDakI7S0FDRixDQUFDO0lBQ0YsTUFBTSxXQUFXLHFCQUFxQjtNQUNwQyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ3ZDLE9BQU8sbUJBQW1CLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3pDLENBQUM7SUFDRixNQUFNLG9CQUFvQixlQUFlO01BQ3ZDLElBQUksVUFBVSxDQUFDO01BQ2YsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUs7UUFDdkIsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7VUFDbEIsYUFBYSxHQUFHLFNBQVMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztVQUNoRCxPQUFPLENBQUMsQ0FBQyxVQUFVLElBQUksVUFBVSxLQUFLLE1BQU0sQ0FBQztTQUM5QyxNQUFNO1VBQ0wsT0FBTyxLQUFLLENBQUM7U0FDZDtPQUNGLENBQUMsQ0FBQztNQUNILE9BQU8sVUFBVSxDQUFDO0tBQ25CLENBQUM7SUFDRixNQUFNLGVBQWUseUJBQXlCO01BQzVDLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUM7S0FDdEQsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLG1DQUFtQztNQUMzRCxNQUFNLFVBQVUsTUFBTSxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztNQUNqRCxPQUFPLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQzdELENBQUM7SUFDRixNQUFNLHVCQUF1Qix3QkFBd0I7TUFDbkQsTUFBTSxvQkFBb0IsVUFBVTtRQUNsQyxNQUFNLGtCQUFrQixPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLE9BQU8sR0FBRyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDO1FBQzFGLE9BQU8sTUFBTSxDQUFDO1VBQ1osUUFBUTtVQUNSLFlBQVk7U0FDYixFQUFFLE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVM7VUFDM0MsTUFBTSxjQUFjLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1VBQzdELE9BQU8sTUFBTSxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztTQUM3QyxDQUFDLENBQUMsQ0FBQztPQUNMLENBQUM7TUFDRixPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztLQUNqRSxDQUFDO0lBQ0YsTUFBTSxvQkFBb0IseUNBQXlDO01BQ2pFLE1BQU0sWUFBWTtRQUNoQixRQUFRO1FBQ1IsT0FBTztRQUNQLFVBQVU7UUFDVixZQUFZO1FBQ1osUUFBUTtRQUNSLFNBQVM7T0FDVixDQUFDO01BQ0YsTUFBTSxZQUFZLFVBQVUsUUFBUSxDQUFDLE1BQU0sRUFBRSxZQUFZLE1BQU0sQ0FBQyxTQUFTLEVBQUUsWUFBWSxRQUFRLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztNQUMxRyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUTtRQUNuRCxNQUFNLGVBQWUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLGVBQWUsRUFBRSxRQUFRO1VBQ3hELE1BQU0sZUFBZSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDckMsT0FBTyxPQUFPLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQzVDLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGdCQUFnQixVQUFVLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuRSxNQUFNLHdCQUF3QixVQUFVLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLFFBQVEsS0FBSyxJQUFJLENBQUM7SUFDekYsTUFBTSwyQkFBMkIsVUFBVSxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxRQUFRLEtBQUssSUFBSSxDQUFDO0lBQzVGLE1BQU0sbUJBQW1CLFVBQVUsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0saUJBQWlCLFVBQVUsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sZ0JBQWdCLFVBQVUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pILE1BQU0seUJBQXlCLFVBQVUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxPQUFPLEtBQUssS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDOztJQUV4SCxNQUFNLGlCQUFpQixnQkFBZ0IsQ0FBQztJQUN4QyxNQUFNLGVBQWUsWUFBWSxDQUFDO0lBQ2xDLE1BQU0sbUJBQW1CLGtCQUFrQixDQUFDO0lBQzVDLE1BQU0sY0FBYyxhQUFhLENBQUM7SUFDbEMsTUFBTSxZQUFZLFFBQVE7TUFDeEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxhQUFhLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksWUFBWSxDQUFDO0tBQ2pGLENBQUM7SUFDRixNQUFNLDRCQUE0QixlQUFlO01BQy9DLElBQUksU0FBUyxJQUFJLENBQUM7TUFDbEIsT0FBTyxNQUFNLEVBQUU7UUFDYixJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1VBQ3pELE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxPQUFPLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQztTQUNuRTtRQUNELFNBQVMsTUFBTSxXQUFXLENBQUM7T0FDNUI7TUFDRCxPQUFPLElBQUksQ0FBQztLQUNiLENBQUM7SUFDRixNQUFNLFdBQVcsb0NBQW9DO01BQ25ELE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQztNQUN0QixJQUFJLEtBQUssRUFBRTtRQUNULEtBQUssSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1VBQy9CLElBQUksU0FBUyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2hDLE9BQU8sQ0FBQyxDQUFDO1dBQ1Y7U0FDRjtPQUNGLE1BQU07UUFDTCxLQUFLLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO1VBQ3hDLElBQUksU0FBUyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDNUIsT0FBTyxDQUFDLENBQUM7V0FDVjtTQUNGO09BQ0Y7TUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDO0tBQ1gsQ0FBQztJQUNGLE1BQU0sWUFBWSx5QkFBeUIsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVHLE1BQU0sY0FBYyx5QkFBeUIsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3RGLE1BQU0sbUJBQW1CLGdFQUFnRTtNQUN2RixJQUFJLFlBQVksQ0FBQztNQUNqQixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsU0FBUyxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDO01BQy9ELE1BQU0sT0FBTyw2QkFBNkI7UUFDeEMsTUFBTSxhQUFhLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxNQUFNLFNBQVMsS0FBSyxHQUFHLFVBQVUsVUFBVSxHQUFHLFVBQVUsU0FBUyxDQUFDO1FBQ2xFLE9BQU8sUUFBUSxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsc0JBQXNCO1VBQ25FLElBQUksY0FBYyxDQUFDLElBQUksV0FBVyxDQUFDLEVBQUU7WUFDbkMsT0FBTyxDQUFDLENBQUMsQ0FBQztXQUNYLE1BQU07WUFDTCxlQUFlLElBQUksQ0FBQztZQUNwQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1dBQ3RDO1NBQ0YsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO09BQ2YsQ0FBQztNQUNGLE1BQU0sY0FBYyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztNQUN2RCxPQUFPLFdBQVcsS0FBSyxDQUFDLFVBQVUscUJBQXFCLEdBQUcsSUFBSSxDQUFDLE1BQU0sVUFBVSxFQUFFLE1BQU0sT0FBTyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxZQUFZLEdBQUcsUUFBUSxLQUFLLENBQUM7UUFDbE0sV0FBVyxZQUFZO1FBQ3ZCLFFBQVEsS0FBSyxHQUFHLENBQUMsR0FBRyxZQUFZLE9BQU87T0FDeEMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUN2QixDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsa0RBQWtEO01BQzdFLE1BQU0sVUFBVSxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7TUFDdkMsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxDQUFDLFNBQVMsS0FBSyxDQUFDLElBQUksT0FBTyxFQUFFO1FBQy9ELFlBQVksT0FBTyxDQUFDO09BQ3JCO01BQ0QsTUFBTSxVQUFVLFlBQVksQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7TUFDN0MsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN2QyxLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO1VBQzFDLE1BQU0sWUFBWSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDaEMsSUFBSSxhQUFhLENBQUMsU0FBUyxVQUFVLENBQUMsSUFBSSxTQUFTLFVBQVUsS0FBSyxHQUFHLFVBQVUsRUFBRTtZQUMvRSxTQUFTO1dBQ1Y7VUFDRCxJQUFJLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLFNBQVMsQ0FBQyxFQUFFO1lBQ3pFLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ25CO1NBQ0Y7T0FDRjtNQUNELE9BQU8sU0FBUyxDQUFDO0tBQ2xCLENBQUM7SUFDRixNQUFNLG9CQUFvQiw2Q0FBNkM7TUFDckUsSUFBSSxFQUFFLENBQUM7TUFDUCxJQUFJLE9BQU8sU0FBUyxDQUFDO01BQ3JCLE1BQU0sT0FBTyxHQUFHLFFBQVEsRUFBRSxDQUFDO01BQzNCLE1BQU0sU0FBUyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0IsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDekIsT0FBTyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsR0FBRyxVQUFVLENBQUMsU0FBUyxFQUFFLE1BQU0sTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO09BQzdFO01BQ0QsSUFBSSxDQUFDLElBQUksRUFBRTtRQUNULE1BQU0sWUFBWSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNwRyxPQUFPLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxTQUFTLFdBQVcsR0FBRyxTQUFTLEVBQUUsUUFBUSxJQUFJLEtBQUssSUFBSSxJQUFJLFdBQVcsQ0FBQyxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztPQUNqSjtNQUNELElBQUksSUFBSSxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLFFBQVEsRUFBRTtRQUNuRCxPQUFPLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7T0FDOUQ7TUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ1QsT0FBTyxTQUFTLENBQUM7UUFDakIsT0FBTyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7VUFDbkUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7VUFDekIsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ3RCLE1BQU07V0FDUDtTQUNGO09BQ0Y7TUFDRCxPQUFPLElBQUksSUFBSSxTQUFTLENBQUM7S0FDMUIsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLHVDQUF1QztNQUNqRSxNQUFNLFNBQVMsU0FBUyxXQUFXLENBQUM7TUFDcEMsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7UUFDekMsT0FBTyxLQUFLLENBQUM7T0FDZCxNQUFNLElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDdkUsT0FBTyxJQUFJLENBQUM7T0FDYixNQUFNO1FBQ0wsT0FBTyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztPQUM1RDtLQUNGLENBQUM7SUFDRixNQUFNLHNCQUFzQiwrQ0FBK0M7TUFDekUsSUFBSSxTQUFTLFNBQVMsQ0FBQztNQUN2QixNQUFNLGNBQWMsS0FBSyxHQUFHLGlCQUFpQixHQUFHLGFBQWEsQ0FBQztNQUM5RCxNQUFNLE9BQU8sR0FBRyxRQUFRLEVBQUUsQ0FBQztNQUMzQixJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ3ZELElBQUksS0FBSyxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLFNBQVMsS0FBSyxPQUFPLEVBQUU7VUFDdkQsT0FBTyxTQUFTLENBQUM7U0FDbEI7T0FDRjtNQUNELE9BQU8sTUFBTSxFQUFFO1FBQ2IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsYUFBYSxJQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1VBQ3RELE9BQU8sTUFBTSxDQUFDO1NBQ2Y7UUFDRCxLQUFLLElBQUksVUFBVSxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1VBQy9FLE1BQU0sY0FBYyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztVQUMvRixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxFQUFFO1lBQzlGLE9BQU8sTUFBTSxDQUFDO1dBQ2Y7U0FDRjtRQUNELElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLFdBQVcsS0FBSyxJQUFJLEVBQUU7VUFDakQsWUFBWSxNQUFNLENBQUM7VUFDbkIsTUFBTTtTQUNQO1FBQ0QsU0FBUyxNQUFNLFdBQVcsQ0FBQztPQUM1QjtNQUNELE9BQU8sU0FBUyxDQUFDO0tBQ2xCLENBQUM7SUFDRixNQUFNLHlCQUF5QixhQUFhLGNBQWMsQ0FBQyxTQUFTLFdBQVcsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5RyxNQUFNLFlBQVksdUJBQXVCLHVCQUF1QixLQUFLLEtBQUs7TUFDeEUsSUFBSSxzREFBc0QsR0FBRyxHQUFHLENBQUM7TUFDakUsTUFBTSxTQUFTLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUM3QixJQUFJLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxjQUFjLGNBQWMsRUFBRSxFQUFFO1FBQ2pFLGlCQUFpQixTQUFTLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3hELElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1VBQzVCLGNBQWMsQ0FBQyxDQUFDO1NBQ2pCO09BQ0Y7TUFDRCxJQUFJLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxZQUFZLGNBQWMsRUFBRSxFQUFFO1FBQzdELGVBQWUsU0FBUyxDQUFDLFlBQVksRUFBRSxHQUFHLFVBQVUsR0FBRyxTQUFTLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO1VBQzFCLFlBQVksWUFBWSxLQUFLLE9BQU8sQ0FBQztTQUN0QztPQUNGO01BQ0QsaUJBQWlCLHlCQUF5QixDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztNQUNoRSxlQUFlLHlCQUF5QixDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztNQUM1RCxJQUFJLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxFQUFFO1FBQzFDLGlCQUFpQixjQUFjLENBQUMsY0FBYyxDQUFDLEdBQUcsY0FBYyxHQUFHLGNBQWMsV0FBVyxDQUFDO1FBQzdGLElBQUksR0FBRyxVQUFVLEVBQUU7VUFDakIsaUJBQWlCLGNBQWMsZ0JBQWdCLElBQUksY0FBYyxDQUFDO1NBQ25FLE1BQU07VUFDTCxpQkFBaUIsY0FBYyxZQUFZLElBQUksY0FBYyxDQUFDO1NBQy9EO1FBQ0QsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUU7VUFDNUIsY0FBYyxHQUFHLFVBQVUsR0FBRyxjQUFjLE9BQU8sR0FBRyxDQUFDLENBQUM7U0FDekQ7T0FDRjtNQUNELElBQUksc0JBQXNCLENBQUMsWUFBWSxDQUFDLEVBQUU7UUFDeEMsZUFBZSxjQUFjLENBQUMsWUFBWSxDQUFDLEdBQUcsWUFBWSxHQUFHLFlBQVksV0FBVyxDQUFDO1FBQ3JGLElBQUksR0FBRyxVQUFVLEVBQUU7VUFDakIsZUFBZSxZQUFZLFlBQVksSUFBSSxZQUFZLENBQUM7U0FDekQsTUFBTTtVQUNMLGVBQWUsWUFBWSxnQkFBZ0IsSUFBSSxZQUFZLENBQUM7U0FDN0Q7UUFDRCxJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRTtVQUMxQixZQUFZLEdBQUcsVUFBVSxHQUFHLENBQUMsR0FBRyxZQUFZLE9BQU8sQ0FBQztTQUNyRDtPQUNGO01BQ0QsSUFBSSxHQUFHLFVBQVUsRUFBRTtRQUNqQixNQUFNLGFBQWEsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxFQUFFLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUNqSCxVQUFVLEtBQUssQ0FBQyxDQUFDLG1CQUFtQixLQUFLO1VBQ3ZDLGlCQUFpQixTQUFTLENBQUM7VUFDM0IsY0FBYyxNQUFNLENBQUM7U0FDdEIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxXQUFXLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxHQUFHLFFBQVEsRUFBRSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDNUcsUUFBUSxLQUFLLENBQUMsQ0FBQyxtQkFBbUIsS0FBSztVQUNyQyxlQUFlLFNBQVMsQ0FBQztVQUN6QixZQUFZLE1BQU0sQ0FBQztTQUNwQixDQUFDLENBQUM7T0FDSjtNQUNELElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sYUFBYSxFQUFFO1FBQ2pELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksV0FBVyxLQUFLLENBQUMsQ0FBQyxFQUFFO1VBQy9FLGlCQUFpQixtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDMUY7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLFNBQVMsS0FBSyxZQUFZLEtBQUssT0FBTyxDQUFDLEVBQUU7VUFDbEcsZUFBZSxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDckY7T0FDRjtNQUNELElBQUksc0JBQXNCLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDbEMsaUJBQWlCLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9GLGVBQWUsb0JBQW9CLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDO09BQ3hGO01BQ0QsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDckQsaUJBQWlCLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDdkYsZUFBZSxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMvRSxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRTtVQUN6QixJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDaEMsaUJBQWlCLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztXQUMxRjtVQUNELElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUM5QixlQUFlLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztXQUNyRjtTQUNGO09BQ0Y7TUFDRCxJQUFJLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxjQUFjLFdBQVcsRUFBRTtRQUM1RCxjQUFjLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVDLGlCQUFpQixjQUFjLFdBQVcsQ0FBQztPQUM1QztNQUNELElBQUksV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLFlBQVksV0FBVyxFQUFFO1FBQ3hELFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLGVBQWUsWUFBWSxXQUFXLENBQUM7T0FDeEM7TUFDRCxPQUFPO1FBQ0wsY0FBYztRQUNkLFdBQVc7UUFDWCxZQUFZO1FBQ1osU0FBUztPQUNWLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sU0FBUyx3QkFBd0I7TUFDckMsSUFBSSxFQUFFLENBQUM7TUFDUCxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUM7TUFDcEMsTUFBTSxpQkFBaUIsU0FBUyxDQUFDLEdBQUcsZUFBZSxFQUFFLFdBQVcsQ0FBQyxDQUFDO01BQ2xFLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQztNQUNoQyxNQUFNLGVBQWUsU0FBUyxDQUFDLEdBQUcsYUFBYSxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUNoRSxNQUFNLFVBQVUsU0FBUztRQUN2QixNQUFNLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsS0FBSyxjQUFjLElBQUksV0FBVyxJQUFJLFNBQVMsS0FBSyxPQUFPLEVBQUU7VUFDL0YsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3BCO1FBQ0QsTUFBTSxXQUFXLEtBQUssQ0FBQyxLQUFLLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6QyxJQUFJLFNBQVMsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEdBQUcsQ0FBQyxJQUFJLFFBQVEsS0FBSyxZQUFZLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1VBQzFGLEtBQUssT0FBTyxDQUFDLEtBQUssT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNuQztRQUNELE9BQU8sS0FBSyxDQUFDO09BQ2QsQ0FBQztNQUNGLE1BQU0sa0JBQWtCLHlCQUF5QjtRQUMvQyxNQUFNLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7VUFDbEQsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDckI7UUFDRCxPQUFPLFFBQVEsQ0FBQztPQUNqQixDQUFDO01BQ0YsTUFBTSxlQUFlLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDakcsTUFBTSxlQUFlLDhCQUE4QjtRQUNqRCxNQUFNLGNBQWMsSUFBSSxHQUFHLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQztRQUM3RCxLQUFLLElBQUksT0FBTyxTQUFTLEVBQUUsU0FBUyxJQUFJLFdBQVcsRUFBRSxJQUFJLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sRUFBRTtVQUM1RixTQUFTLElBQUksV0FBVyxDQUFDO1VBQ3pCLE1BQU0sV0FBVyxlQUFlLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1VBQzdGLElBQUksUUFBUSxPQUFPLEVBQUU7WUFDbkIsSUFBSSxDQUFDLElBQUksRUFBRTtjQUNULFFBQVEsUUFBUSxFQUFFLENBQUM7YUFDcEI7WUFDRCxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7V0FDN0I7U0FDRjtPQUNGLENBQUM7TUFDRixJQUFJLGNBQWMsS0FBSyxZQUFZLEVBQUU7UUFDbkMsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQzVDO01BQ0QsTUFBTSxXQUFXLENBQUMsS0FBSyxHQUFHLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxDQUFDO01BQzVILElBQUksR0FBRyxVQUFVLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxFQUFFO1FBQy9DLE9BQU8sWUFBWSxDQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDckQ7TUFDRCxJQUFJLEdBQUcsVUFBVSxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsRUFBRTtRQUMvQyxPQUFPLFlBQVksQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7T0FDN0M7TUFDRCxNQUFNLGFBQWEsWUFBWSxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsSUFBSSxjQUFjLENBQUM7TUFDNUUsTUFBTSxXQUFXLFlBQVksQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLElBQUksWUFBWSxDQUFDO01BQ3RFLFlBQVksQ0FBQyxjQUFjLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQy9DLE1BQU0sV0FBVyxlQUFlLENBQUMsVUFBVSxLQUFLLGNBQWMsR0FBRyxVQUFVLEdBQUcsVUFBVSxZQUFZLEVBQUUsYUFBYSxFQUFFLFFBQVEsS0FBSyxZQUFZLEdBQUcsUUFBUSxZQUFZLEdBQUcsUUFBUSxDQUFDLENBQUM7TUFDbEwsSUFBSSxRQUFRLE9BQU8sRUFBRTtRQUNuQixRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7T0FDN0I7TUFDRCxZQUFZLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQ3RDLENBQUM7O0lBRUYsTUFBTSxjQUFjO01BQ2xCLGdEQUFnRDtNQUNoRCxjQUFjO01BQ2QsMkJBQTJCO01BQzNCLG9CQUFvQjtNQUNwQixhQUFhO01BQ2IsbUJBQW1CO0tBQ3BCLENBQUM7SUFDRixNQUFNLGNBQWMsUUFBUSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLE1BQU0sQ0FBQztJQUNyRSxNQUFNLFVBQVUsc0NBQXNDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sVUFBVSxFQUFFLFVBQVU7TUFDbEcsSUFBSSxRQUFRLEtBQUssSUFBSSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMxQyxPQUFPLE9BQU8sQ0FBQztPQUNoQixNQUFNLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzdCLE9BQU8sVUFBVSxDQUFDO09BQ25CLE1BQU0sSUFBSSxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRTtRQUNoQyxPQUFPLE9BQU8sQ0FBQztPQUNoQixNQUFNLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxZQUFZLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtRQUNoRSxPQUFPLGFBQWEsQ0FBQztPQUN0QixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFO1FBQzNGLE9BQU8sZUFBZSxDQUFDO09BQ3hCLE1BQU07UUFDTCxPQUFPLE9BQU8sQ0FBQztPQUNoQjtLQUNGLENBQUMsQ0FBQzs7SUFFSCxNQUFNLGdCQUFnQixpQkFBaUI7TUFDckMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQzNELEdBQUcsU0FBUyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7TUFDOUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztNQUN4QyxNQUFNLFVBQVUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzlCLENBQUM7SUFDRixNQUFNLGtCQUFrQix1RUFBdUU7TUFDN0YsTUFBTSxDQUFDLE1BQU0sU0FBUyxlQUFlLEdBQUcsSUFBSSxDQUFDO01BQzdDLEtBQUssQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztNQUMxQixLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztNQUM1QyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxjQUFjLEVBQUUsRUFBRSxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7TUFDckQsTUFBTSxDQUFDLGFBQWEsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztNQUNqRSxRQUFRLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO01BQzNCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDbkIsSUFBSSxnQkFBZ0IsRUFBRTtRQUNwQixJQUFJLE9BQU8sT0FBTyxHQUFHLENBQUMsRUFBRTtVQUN0QixLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxxQkFBcUIsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2hFO1FBQ0QsTUFBTSxpQkFBaUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLElBQUksY0FBYyxPQUFPLEdBQUcsQ0FBQyxFQUFFO1VBQzdCLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxFQUFFLGNBQWMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDMUU7T0FDRjtLQUNGLENBQUM7SUFDRixNQUFNLHlCQUF5QixRQUFRO01BQ3JDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztNQUM3QixRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQzFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ3hDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLG9CQUFvQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDOUMsTUFBTSxrQkFBa0IsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQ2pILE1BQU0sZ0JBQWdCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLHFCQUFxQixFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUM1RyxNQUFNLENBQUMsZUFBZSxFQUFFLFFBQVEsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ3RELFFBQVEsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7TUFDOUIsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcscUJBQXFCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUMvQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ25ELENBQUM7SUFDRixNQUFNLGlCQUFpQiwrQ0FBK0M7TUFDcEUsTUFBTSxTQUFTLFlBQVksUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNsRCxlQUFlLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztNQUNwRSxPQUFPLE1BQU0sQ0FBQztLQUNmLENBQUM7SUFDRixNQUFNLFdBQVcsc0RBQXNEO01BQ3JFLE1BQU0sY0FBYyxFQUFFLENBQUM7TUFDdkIsTUFBTSxTQUFTLGNBQWMsQ0FBQyxNQUFNLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQ3BGLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQztNQUMxQixNQUFNLGdCQUFnQixNQUFNO1FBQzFCLE9BQU8sTUFBTSxFQUFFLENBQUM7T0FDakIsQ0FBQztNQUNGLE1BQU0sbUJBQW1CLE1BQU0sT0FBTyxJQUFJLEVBQUUsV0FBVyxDQUFDLE1BQU07UUFDNUQsTUFBTSxLQUFLLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixXQUFXLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixPQUFPLEVBQUUsQ0FBQztPQUNYLENBQUMsQ0FBQztNQUNILE1BQU0sa0JBQWtCLFNBQVM7UUFDL0IsTUFBTSxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztPQUMvQixDQUFDO01BQ0YsTUFBTSxpQkFBaUIsUUFBUTtRQUM3QixNQUFNLE1BQU0sT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RELFFBQVEsR0FBRzthQUNOLGVBQWUsRUFBRTtZQUNsQixhQUFhLEVBQUUsQ0FBQztZQUNoQixNQUFNLFdBQVcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxQixhQUFhLEVBQUUsQ0FBQztZQUNoQixNQUFNO1dBQ1A7YUFDRSxhQUFhLEVBQUU7WUFDaEIsYUFBYSxFQUFFLENBQUM7WUFDaEIsZUFBZSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDakUsTUFBTTtXQUNQO2FBQ0UsT0FBTyxFQUFFO1lBQ1YsTUFBTSxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDN0IsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoQixNQUFNO1dBQ1A7U0FDRjtPQUNGLENBQUM7TUFDRixNQUFNLGVBQWUsU0FBUztRQUM1QixNQUFNLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxZQUFZLFFBQVEsQ0FBQyxDQUFDO1FBQ2pELGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztPQUN4QixDQUFDO01BQ0YsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLEdBQUcsRUFBRSxTQUFTO1FBQy9CLGFBQWEsRUFBRSxDQUFDO1FBQ2hCLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztPQUNyQixDQUFDLENBQUM7TUFDSCxPQUFPLFdBQVcsQ0FBQztLQUNwQixDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsa0NBQWtDO01BQzdELE1BQU0sWUFBWSxTQUFTLENBQUMsTUFBTTtRQUNoQyxNQUFNLFlBQVksTUFBTSxVQUFVLENBQUM7UUFDbkMsTUFBTSxhQUFhLFNBQVMsT0FBTyxFQUFFLENBQUM7UUFDdEMsTUFBTSxtQkFBbUIsa0JBQWtCLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDL0QsTUFBTSxZQUFZLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQy9DLElBQUksVUFBVSxVQUFVLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtVQUM3QyxhQUFhLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQ25DO1FBQ0QsSUFBSSxTQUFTLE9BQU8sRUFBRSxVQUFVLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtVQUNyRCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQU0sT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxTQUFTLENBQUMsQ0FBQztVQUMxRixLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1VBQ3JCLFNBQVMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO1VBQzNDLFNBQVMsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7U0FDL0IsTUFBTTtVQUNMLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU07WUFDL0IsV0FBVyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0I7Y0FDbEMsUUFBUSxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUMxRSxDQUFDLENBQUM7V0FDSixDQUFDLENBQUM7U0FDSjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxZQUFZLFVBQVU7TUFDMUIsTUFBTSxXQUFXLFFBQVEsRUFBRSxDQUFDO01BQzVCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDMUIsTUFBTSxVQUFVLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDMUMsTUFBTSxTQUFTLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUM3QixNQUFNLG9CQUFvQixZQUFZO1FBQ3BDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVztVQUMxQixJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNuQixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7V0FDakIsTUFBTTtZQUNMLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1dBQ2pDO1NBQ0YsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE9BQU87UUFDTCxVQUFVLG9CQUFvQjtVQUM1QixRQUFRLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDbkM7UUFDRCxVQUFVLGdCQUFnQjtVQUN4QixRQUFRLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVk7WUFDckMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDcEQsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxtQkFBbUIsb0JBQW9CO1VBQ3JDLE9BQU8sWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNyQztRQUNELFFBQVEsUUFBUTtVQUNkLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxLQUFLO1lBQ3pELE1BQU0sV0FBVyxNQUFNLFVBQVUsWUFBWSxFQUFFLENBQUM7WUFDaEQsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUIsTUFBTSxVQUFVLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztXQUMzQyxDQUFDLENBQUM7U0FDSjtRQUNELFdBQVcsUUFBUTtVQUNqQixNQUFNLFdBQVcsTUFBTSxVQUFVLFlBQVksRUFBRSxDQUFDO1VBQ2hELE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLGlCQUFpQjtZQUM3QyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztXQUM3QixDQUFDLENBQUM7VUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzNDO1FBQ0QsUUFBUSxRQUFRO1VBQ2QsTUFBTSxZQUFZLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7VUFDeEMsT0FBTyxLQUFLLENBQUMsU0FBUyxFQUFFLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztTQUNsRTtPQUNGLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sa0JBQWtCLGFBQWE7TUFDbkMsT0FBTztRQUNMLGFBQWEsS0FBSyxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUM7UUFDNUMsZ0JBQWdCLEtBQUssQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDO09BQ2pELENBQUM7S0FDSCxDQUFDO0lBQ0YsZUFBZSxlQUFlLEdBQUcsZ0JBQWdCLENBQUM7O0lBRWxELE1BQU0sa0JBQWtCLDZCQUE2QjtNQUNuRCxJQUFJLEtBQUssVUFBVSxFQUFFO1FBQ25CLE9BQU8sS0FBSyxDQUFDO09BQ2QsTUFBTTtRQUNMLE9BQU8sTUFBTSxDQUFDLEtBQUssZUFBZSxFQUFFLEVBQUUsUUFBUSxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO09BQ25GO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLGlCQUFpQixrQkFBa0IsTUFBTSxTQUFTLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdFLE1BQU0sa0JBQWtCLGtCQUFrQixNQUFNLFNBQVMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0UsTUFBTSxhQUFhLFVBQVU7TUFDM0IsTUFBTSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDM0IsQ0FBQztJQUNGLE1BQU0sYUFBYSxVQUFVO01BQzNCLE1BQU0sU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQzNCLENBQUM7SUFDRixNQUFNLGlCQUFpQixrQkFBa0I7TUFDdkMsTUFBTSxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztLQUN6QyxDQUFDO0lBQ0YsTUFBTSx3QkFBd0IsMkNBQTJDO01BQ3ZFLE1BQU0sU0FBUyxDQUFDLG1CQUFtQixFQUFFO1FBQ25DLE1BQU07UUFDTixLQUFLO1FBQ0wsTUFBTTtRQUNOLE1BQU07T0FDUCxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsMkNBQTJDO01BQ25FLE1BQU0sU0FBUyxDQUFDLGVBQWUsRUFBRTtRQUMvQixNQUFNO1FBQ04sS0FBSztRQUNMLE1BQU07UUFDTixNQUFNO09BQ1AsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sY0FBYyxVQUFVO01BQzVCLE1BQU0sU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQzVCLENBQUM7SUFDRixNQUFNLGlCQUFpQixVQUFVO01BQy9CLE1BQU0sU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0tBQy9CLENBQUM7SUFDRixNQUFNLFdBQVcsVUFBVTtNQUN6QixNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN6QixDQUFDO0lBQ0YsTUFBTSx3QkFBd0IsbUJBQW1CO01BQy9DLE1BQU0sU0FBUyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUNqRCxDQUFDO0lBQ0YsTUFBTSxZQUFZLDhCQUE4QjtNQUM5QyxNQUFNLFNBQVMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDbkMsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLGdDQUFnQztNQUN0RCxNQUFNLFNBQVMsQ0FBQyxhQUFhLEVBQUU7UUFDN0IsTUFBTTtRQUNOLElBQUk7UUFDSixJQUFJO09BQ0wsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sbUJBQW1CLGdDQUFnQztNQUN2RCxNQUFNLFNBQVMsQ0FBQyxjQUFjLEVBQUU7UUFDOUIsTUFBTTtRQUNOLElBQUk7UUFDSixJQUFJO09BQ0wsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sdUJBQXVCLGtCQUFrQixNQUFNLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN6RixNQUFNLGlCQUFpQixrQkFBa0IsTUFBTSxTQUFTLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdFLE1BQU0sdUJBQXVCLGtCQUFrQixNQUFNLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN6RixNQUFNLGlCQUFpQixrQkFBa0IsTUFBTSxTQUFTLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdFLE1BQU0seUJBQXlCLGtCQUFrQjtNQUMvQyxNQUFNLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUM3QyxDQUFDO0lBQ0YsTUFBTSwwQkFBMEIsa0JBQWtCO01BQ2hELE1BQU0sU0FBUyxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzlDLENBQUM7SUFDRixNQUFNLHVCQUF1QixVQUFVO01BQ3JDLE1BQU0sU0FBUyxDQUFDLGtCQUFrQixDQUFDLENBQUM7S0FDckMsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLDRCQUE0QixNQUFNLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRTtNQUN6RixTQUFTLElBQUk7TUFDYixRQUFRO0tBQ1QsQ0FBQyxDQUFDO0lBQ0gsTUFBTSx1QkFBdUIsNEJBQTRCLE1BQU0sU0FBUyxDQUFDLGtCQUFrQixFQUFFO01BQzNGLElBQUk7TUFDSixRQUFRO0tBQ1QsQ0FBQyxDQUFDO0lBQ0gsTUFBTSwyQkFBMkIsbUJBQW1CLE1BQU0sU0FBUyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN2RyxNQUFNLDhCQUE4QixtQkFBbUIsTUFBTSxTQUFTLENBQUMseUJBQXlCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDOztJQUU3RyxNQUFNLEtBQUs7TUFDVCxXQUFXLENBQUM7TUFDWixRQUFRLEVBQUU7TUFDVixNQUFNLEVBQUU7TUFDUixPQUFPLEVBQUU7TUFDVCxLQUFLLEVBQUU7TUFDUCxNQUFNLEVBQUU7TUFDUixPQUFPLEVBQUU7TUFDVCxVQUFVLEVBQUU7TUFDWixLQUFLLENBQUM7TUFDTixJQUFJLEVBQUU7TUFDTixTQUFTLEVBQUU7TUFDWCxXQUFXLEVBQUU7TUFDYixLQUFLLEVBQUU7TUFDUCxNQUFNLEVBQUU7TUFDUixpQkFBaUIsS0FBSztRQUNwQixPQUFPLENBQUMsU0FBUyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ3BFO01BQ0QsZ0JBQWdCLEtBQUs7UUFDbkIsT0FBTyxHQUFHLEdBQUcsUUFBUSxFQUFFLElBQUksR0FBRyxHQUFHLE1BQU0sRUFBRSxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7T0FDaEY7S0FDRixDQUFDOztJQUVGLE1BQU0sdUJBQXVCLG1CQUFtQixDQUFDO0lBQ2pELE1BQU0scUJBQXFCLGlFQUFpRSxDQUFDO0lBQzdGLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQztJQUNyQixNQUFNLFVBQVUsSUFBSSxNQUFNLENBQUM7SUFDM0IsTUFBTSxnQkFBZ0I7TUFDcEIsSUFBSTtRQUNGLENBQUM7UUFDRCxDQUFDO1FBQ0QsQ0FBQyxDQUFDO1FBQ0YsQ0FBQyxDQUFDO09BQ0g7TUFDRCxJQUFJO1FBQ0YsQ0FBQztRQUNELENBQUM7UUFDRCxDQUFDO1FBQ0QsQ0FBQyxDQUFDO09BQ0g7TUFDRCxJQUFJO1FBQ0YsQ0FBQztRQUNELENBQUM7UUFDRCxDQUFDO1FBQ0QsQ0FBQztPQUNGO01BQ0QsSUFBSTtRQUNGLENBQUM7UUFDRCxDQUFDO1FBQ0QsQ0FBQyxDQUFDO1FBQ0YsQ0FBQztPQUNGO0tBQ0YsQ0FBQztJQUNGLE1BQU0sZUFBZSxPQUFPLEdBQUcsS0FBSyxLQUFLLFdBQVcsSUFBSSxHQUFHLEtBQUssUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RixNQUFNLG1CQUFtQix1QkFBdUI7TUFDOUMsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLE1BQU0sY0FBYyxNQUFNLE9BQU8sRUFBRSxDQUFDO01BQ3BDLE1BQU0sZUFBZSxRQUFRLENBQUM7TUFDOUIsTUFBTSxjQUFjLE1BQU0sUUFBUSxFQUFFLENBQUM7TUFDckMsSUFBSSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxjQUFjLENBQUM7TUFDaEYsSUFBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsYUFBYSxDQUFDO01BQ3JGLElBQUksS0FBSyxDQUFDO01BQ1YsSUFBSSxNQUFNLENBQUM7TUFDWCxJQUFJLGdCQUFnQixDQUFDO01BQ3JCLElBQUksaUJBQWlCLENBQUM7TUFDdEIsTUFBTSxVQUFVLE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztNQUN6RixNQUFNLFVBQVUsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDLENBQUM7TUFDakYsTUFBTSw2QkFBNkIsZ0JBQWdCO1FBQ2pELElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1VBQ3JCLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUM3QixPQUFPLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssUUFBUSxFQUFFLEtBQUssUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3JGLE1BQU07VUFDTCxPQUFPLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsUUFBUSxFQUFFLEdBQUcsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ2pGO09BQ0YsQ0FBQztNQUNGLE1BQU0seUJBQXlCLE9BQU87UUFDcEMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDO1FBQzFCLElBQUksMEJBQTBCLENBQUMsR0FBRyxFQUFFLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxtQkFBbUIsRUFBRSxFQUFFO1VBQzNGLE1BQU0sVUFBVSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDakM7T0FDRixDQUFDO01BQ0YsTUFBTSxtQkFBbUIsT0FBTztRQUM5QixJQUFJLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLEVBQUU7VUFDbkYsT0FBTztZQUNMLEdBQUc7WUFDSCxHQUFHLGtCQUFrQjtXQUN0QixDQUFDO1NBQ0gsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsRUFBRTtVQUN0QyxPQUFPLENBQUMsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNuQyxNQUFNO1VBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2Q7T0FDRixDQUFDO01BQ0YsTUFBTSxjQUFjLE9BQU87UUFDekIsTUFBTSxXQUFXLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLEVBQUU7VUFDYixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFBSSxHQUFHLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLE9BQU8sRUFBRTtVQUNuRCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFBSSxHQUFHLEtBQUssTUFBTSxRQUFRLEVBQUUsRUFBRTtVQUM1QixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFBSSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxhQUFhLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxFQUFFO1VBQ25GLE9BQU8sSUFBSSxDQUFDLFlBQVksUUFBUSxDQUFDLEdBQUcsa0JBQWtCLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNwRSxNQUFNO1VBQ0wsT0FBTyxJQUFJLENBQUMsWUFBWSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDbEQ7T0FDRixDQUFDO01BQ0YsTUFBTSxxQkFBcUIsT0FBTztRQUNoQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtVQUNoQixPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssR0FBRyxlQUFlLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZELE1BQU07VUFDTCxPQUFPLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVCO09BQ0YsQ0FBQztNQUNGLE1BQU0sY0FBYywwQkFBMEI7UUFDNUMsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUU7VUFDeEIsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1VBQzFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVTtZQUN4QixJQUFJLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxPQUFPLFFBQVEsQ0FBQyxNQUFNLFNBQVMsWUFBWSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Y0FDckYsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNuQyxNQUFNO2NBQ0wsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7YUFDekM7V0FDRixDQUFDLENBQUM7U0FDSjtPQUNGLENBQUM7TUFDRixNQUFNLGtCQUFrQiw2QkFBNkI7UUFDbkQsV0FBVyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEMsV0FBVyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7T0FDekMsQ0FBQztNQUNGLE1BQU0scUJBQXFCLEtBQUs7UUFDOUIsSUFBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQztRQUNqQyxJQUFJLGFBQWEsRUFBRSxhQUFhLENBQUM7UUFDakMsU0FBUyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7UUFDNUIsU0FBUyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7UUFDNUIsUUFBUSxNQUFNLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUM1QyxTQUFTLE1BQU0sR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQzdDLFFBQVEsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzlCLFNBQVMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssRUFBRTtVQUNoRyxlQUFlLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QyxNQUFNO1VBQ0wsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RDO1FBQ0QsSUFBSSxZQUFZLEVBQUU7VUFDaEIsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzdCLFNBQVMsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztZQUNoQyxRQUFRLE9BQU8sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUM7V0FDakMsTUFBTTtZQUNMLFFBQVEsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQztZQUNoQyxTQUFTLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7V0FDakM7U0FDRjtRQUNELGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakQsZ0JBQWdCLGNBQWMsU0FBUyxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQ25ELGdCQUFnQixjQUFjLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUNuRCxnQkFBZ0IsYUFBYSxHQUFHLENBQUMsR0FBRyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELGdCQUFnQixhQUFhLEdBQUcsQ0FBQyxHQUFHLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdEQsR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFO1VBQzFCLE1BQU0sYUFBYTtVQUNuQixLQUFLLGFBQWE7VUFDbEIsU0FBUyxPQUFPO1NBQ2pCLENBQUMsQ0FBQztRQUNILFlBQVksVUFBVSxHQUFHLEtBQUssR0FBRyxXQUFXLEdBQUcsTUFBTSxDQUFDO1FBQ3RELElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxnQkFBZ0IsWUFBWSxJQUFJLEtBQUssRUFBRTtVQUNsRSxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsWUFBWSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3pFO1FBQ0QsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLGdCQUFnQixhQUFhLElBQUksTUFBTSxFQUFFO1VBQ3BFLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixFQUFFLEtBQUssRUFBRSxZQUFZLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDekU7UUFDRCxTQUFTLFdBQVcsWUFBWSxHQUFHLGdCQUFnQixDQUFDO1FBQ3BELFNBQVMsV0FBVyxhQUFhLEdBQUcsaUJBQWlCLENBQUM7UUFDdEQsSUFBSSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsRUFBRTtVQUN6QixHQUFHLFVBQVUsQ0FBQyxZQUFZLEVBQUU7WUFDMUIsTUFBTSxhQUFhLEdBQUcsTUFBTTtZQUM1QixLQUFLLGFBQWEsR0FBRyxNQUFNO1dBQzVCLENBQUMsQ0FBQztTQUNKO1FBQ0QsSUFBSSxDQUFDLGFBQWEsRUFBRTtVQUNsQixxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxHQUFHLGNBQWMsS0FBSyxDQUFDLENBQUM7VUFDNUYsZ0JBQWdCLElBQUksQ0FBQztTQUN0QjtPQUNGLENBQUM7TUFDRixNQUFNLGlCQUFpQixNQUFNO1FBQzNCLE1BQU0sbUJBQW1CLGFBQWEsQ0FBQztRQUN2QyxnQkFBZ0IsS0FBSyxDQUFDO1FBQ3RCLElBQUksZ0JBQWdCLEVBQUU7VUFDcEIsV0FBVyxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7VUFDekMsV0FBVyxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDNUM7UUFDRCxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDekQsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNuRCxJQUFJLFlBQVksS0FBSyxXQUFXLEVBQUU7VUFDaEMsR0FBRyxPQUFPLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1VBQzFELEdBQUcsT0FBTyxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDckQ7UUFDRCxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzdCLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pCLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzNCLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1QixJQUFJLGdCQUFnQixFQUFFO1VBQ3BCLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEdBQUcsY0FBYyxLQUFLLENBQUMsQ0FBQztVQUN2RixHQUFHLFVBQVUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLEdBQUcsVUFBVSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQzFFO1FBQ0QsTUFBTSxZQUFZLEVBQUUsQ0FBQztPQUN0QixDQUFDO01BQ0YsTUFBTSxpQkFBaUIsYUFBYTtRQUNsQyx3QkFBd0IsRUFBRSxDQUFDO1FBQzNCLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDcEQsTUFBTSxlQUFlLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sZUFBZSxRQUFRLEVBQUUsQ0FBQztRQUNoQyxNQUFNLE9BQU8sU0FBUyxzQkFBc0IsRUFBRSxDQUFDO1FBQy9DLE1BQU0sY0FBYyxJQUFJLE1BQU0sSUFBSSxJQUFJLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQztRQUN6RCxNQUFNLGVBQWUsSUFBSSxPQUFPLElBQUksSUFBSSxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUM7UUFDM0QsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFO1VBQzdCLGNBQWMsRUFBRSxDQUFDO1VBQ2pCLGNBQWMsU0FBUyxDQUFDO1VBQ3hCLFFBQVEsU0FBUyxDQUFDLENBQUM7U0FDcEI7UUFDRCxNQUFNLElBQUksTUFBTSxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxRQUFRLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDbkUsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLG1CQUFtQixFQUFFLEVBQUU7VUFDckQsTUFBTSxDQUFDLGFBQWEsRUFBRSxrQkFBa0I7WUFDdEMsTUFBTSxZQUFZLEtBQUs7Y0FDckIsTUFBTSxTQUFTLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ2hELFNBQVMsQ0FBQyxRQUFRLENBQUM7Y0FDbkIsU0FBUyxDQUFDLFFBQVEsQ0FBQztjQUNuQixTQUFTLE1BQU0sWUFBWSxDQUFDO2NBQzVCLFNBQVMsTUFBTSxhQUFhLENBQUM7Y0FDN0IsUUFBUSxNQUFNLEdBQUcsTUFBTSxDQUFDO2NBQ3hCLGlCQUFpQixNQUFNLENBQUM7Y0FDeEIsY0FBYyxLQUFLLEdBQUcsSUFBSSxDQUFDO2NBQzNCLGNBQWMsU0FBUyxHQUFHO2dCQUN4QixHQUFHLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWTtnQkFDekMsR0FBRyxZQUFZLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVk7ZUFDM0MsQ0FBQztjQUNGLG1CQUFtQixXQUFXLFlBQVksQ0FBQztjQUMzQyxvQkFBb0IsV0FBVyxhQUFhLENBQUM7Y0FDN0MsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUU7Z0JBQzNDLFNBQVMscUJBQXFCO2dCQUM5QixrQkFBa0IsS0FBSztlQUN4QixDQUFDLENBQUM7Y0FDSCxHQUFHLFVBQVUsQ0FBQyxjQUFjLEVBQUU7Z0JBQzVCLFVBQVUsT0FBTztnQkFDakIsTUFBTSxHQUFHO2dCQUNULEtBQUssR0FBRztnQkFDUixPQUFPLE1BQU07Z0JBQ2IsUUFBUSxNQUFNO2VBQ2YsQ0FBQyxDQUFDO2NBQ0gsbUJBQW1CLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2NBQ25ELEdBQUcsU0FBUyxDQUFDLGdCQUFnQixFQUFFLHFCQUFxQixDQUFDLENBQUM7Y0FDdEQsR0FBRyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7Y0FDekQsZ0JBQWdCLGdCQUFnQixHQUFHLE9BQU8sQ0FBQztjQUMzQyxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDOUIsTUFBTSxZQUFZO2dCQUNsQixLQUFLLFlBQVk7Z0JBQ2pCLFFBQVEsQ0FBQztlQUNWLENBQUMsQ0FBQztjQUNILGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7Y0FDN0QsZ0JBQWdCLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLENBQUM7Y0FDdkQsV0FBVyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztjQUMxQyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixDQUFDLENBQUM7Y0FDdkQsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztjQUNqRCxJQUFJLFlBQVksS0FBSyxXQUFXLEVBQUU7Z0JBQ2hDLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDeEQsR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztlQUNuRDtjQUNELGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRTtnQkFDekMsU0FBUyxtQkFBbUI7Z0JBQzVCLGtCQUFrQixLQUFLO2VBQ3hCLEVBQUUsTUFBTSxHQUFHLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQzthQUNuQyxDQUFDO1lBQ0YsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ2xELElBQUksU0FBUyxFQUFFO2NBQ2IsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDdkI7WUFDRCxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUU7Y0FDdEMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJO2NBQzlCLGtCQUFrQixLQUFLO2NBQ3ZCLFNBQVMsa0JBQWtCO2NBQzNCLGdCQUFnQixJQUFJO2NBQ3BCLFNBQVMsU0FBUyxHQUFHLElBQUksR0FBRyw4QkFBOEI7YUFDM0QsQ0FBQyxDQUFDO1lBQ0gsR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLO2NBQ3BDLENBQUMseUJBQXlCLEVBQUUsQ0FBQztjQUM3QixDQUFDLGVBQWUsRUFBRSxDQUFDO2NBQ25CLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNkLENBQUMsQ0FBQztZQUNILE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQztZQUN2QixHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUU7Y0FDdkIsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksR0FBRyxTQUFTLFlBQVksR0FBRyxDQUFDO2NBQ3hFLEtBQUssWUFBWSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsU0FBUyxhQUFhLEdBQUcsQ0FBQzthQUMxRSxDQUFDLENBQUM7V0FDSixDQUFDLENBQUM7U0FDSixNQUFNO1VBQ0wsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3ZCO09BQ0YsQ0FBQztNQUNGLE1BQU0sMEJBQTBCLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDM0QsTUFBTSxpQkFBaUIsQ0FBQyxpQkFBaUIsSUFBSSxLQUFLO1FBQ2hELHVCQUF1QixPQUFPLEVBQUUsQ0FBQztRQUNqQyx3QkFBd0IsRUFBRSxDQUFDO1FBQzNCLElBQUksV0FBVyxJQUFJLGNBQWMsRUFBRTtVQUNqQyxXQUFXLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDbkQ7UUFDRCxNQUFNLENBQUMsYUFBYSxFQUFFLGlCQUFpQjtVQUNyQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLENBQUM7VUFDcEQsSUFBSSxTQUFTLEVBQUU7WUFDYixHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN0QixHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztXQUN2QjtTQUNGLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLGlCQUFpQixrQkFBa0IsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3JFLE1BQU0sbUJBQW1CLEtBQUs7UUFDNUIsSUFBSSxhQUFhLElBQUksTUFBTSxRQUFRLElBQUksTUFBTSxVQUFVLEVBQUU7VUFDdkQsT0FBTztTQUNSO1FBQ0QsTUFBTSxZQUFZLENBQUMsS0FBSyxLQUFLLFdBQVcsR0FBRyxDQUFDLE9BQU8sR0FBRyxTQUFTLFFBQVEsRUFBRSxDQUFDO1FBQzFFLE1BQU0sYUFBYSxTQUFTLENBQUMsWUFBWSxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNoSyxNQUFNLGdCQUFnQixhQUFhLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUM3RyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsb0JBQW9CLEVBQUUsS0FBSyxHQUFHLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTztVQUN4RixHQUFHLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDM0MsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksY0FBYyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsSUFBSSxNQUFNLFNBQVMsRUFBRSxFQUFFO1VBQzdGLGtCQUFrQixFQUFFLENBQUM7VUFDckIsTUFBTSxXQUFXLFNBQVMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQzFDLElBQUksY0FBYyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsSUFBSSxjQUFjLENBQUMsU0FBUyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUU7WUFDOUYsR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFLG9CQUFvQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQy9ELHVCQUF1QixTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDN0MsT0FBTztXQUNSO1NBQ0Y7UUFDRCxjQUFjLEVBQUUsQ0FBQztPQUNsQixDQUFDO01BQ0YsTUFBTSwyQkFBMkIsTUFBTTtRQUNyQyxNQUFNLENBQUMsYUFBYSxFQUFFLFVBQVU7VUFDOUIsSUFBSSxNQUFNLElBQUksRUFBRTtZQUNkLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7WUFDdkIsT0FBTyxNQUFNLElBQUksQ0FBQztXQUNuQjtTQUNGLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLHFCQUFxQixNQUFNO1FBQy9CLElBQUk7VUFDRixNQUFNLE9BQU8sRUFBRSxZQUFZLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3JFLENBQUMsV0FBVztTQUNaO09BQ0YsQ0FBQztNQUNGLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNO1FBQ3RCLGtCQUFrQixFQUFFLENBQUM7UUFDckIsTUFBTSxHQUFHLENBQUMseURBQXlELEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUN2RixNQUFNLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLO1VBQ3JDLElBQUksV0FBVyxJQUFJLFdBQVcsU0FBUyxLQUFLLE9BQU8sRUFBRTtZQUNuRCxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUNyQjtTQUNGLENBQUMsQ0FBQztRQUNILE1BQU0sR0FBRyxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN2QyxNQUFNLEdBQUcsQ0FBQyx1QkFBdUIsRUFBRSxzQkFBc0IsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUNsRSxDQUFDLENBQUM7TUFDSCxNQUFNLEdBQUcsQ0FBQyxRQUFRLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztNQUM5QyxNQUFNLFVBQVUsTUFBTTtRQUNwQix1QkFBdUIsT0FBTyxFQUFFLENBQUM7UUFDakMsY0FBYyxtQkFBbUIsaUJBQWlCLElBQUksQ0FBQztPQUN4RCxDQUFDO01BQ0YsT0FBTztRQUNMLFdBQVc7UUFDWCxjQUFjO1FBQ2QsY0FBYztRQUNkLGdCQUFnQjtRQUNoQixPQUFPO09BQ1IsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxXQUFXLGVBQWU7TUFDOUIsSUFBSSxLQUFLLENBQUMsS0FBSztRQUNiLEdBQUcsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDM0IsRUFBRSxVQUFVO1FBQ1gsR0FBRyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDeEIsRUFBRSxLQUFLO1FBQ04sR0FBRyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUMxQixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxZQUFZLGVBQWU7TUFDL0IsSUFBSSxLQUFLLENBQUMsS0FBSztRQUNiLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDekIsRUFBRSxVQUFVO1FBQ1gsR0FBRyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDdEIsRUFBRSxLQUFLO1FBQ04sR0FBRyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN4QixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsZ0NBQWdDO01BQ3ZELE1BQU0sUUFBUSxHQUFHLFNBQVMsWUFBWSxFQUFFLENBQUM7TUFDekMsUUFBUSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztNQUMzQixTQUFTLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO01BQzdCLE9BQU8sS0FBSyxDQUFDO0tBQ2QsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLDBDQUEwQztNQUM5RCxNQUFNLE1BQU0sR0FBRyxTQUFTLFlBQVksRUFBRSxDQUFDO01BQ3ZDLEdBQUcsU0FBUyxDQUFDLEtBQUssSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQ2pDLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQ2hDLE9BQU8sR0FBRyxDQUFDO0tBQ1osQ0FBQzs7SUFFRixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUM7TUFDekI7UUFDRSxLQUFLO1VBQ0gsT0FBTztVQUNQLFNBQVM7VUFDVCxRQUFRO1VBQ1IsU0FBUztTQUNWO09BQ0Y7TUFDRDtRQUNFLEtBQUs7VUFDSCxPQUFPO1VBQ1AsU0FBUztVQUNULFFBQVE7VUFDUixTQUFTO1NBQ1Y7T0FDRjtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sWUFBWSxzQkFBc0IsSUFBSSxDQUFDLFlBQVksUUFBUSxDQUFDLEtBQUssZUFBZSxDQUFDLEVBQUUsS0FBSyxZQUFZLEVBQUUsWUFBWSxRQUFRLENBQUMsS0FBSyxhQUFhLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZLLE1BQU0sWUFBWSxvQkFBb0IsU0FBUyxNQUFNLENBQUM7TUFDcEQsVUFBVSxPQUFPO1FBQ2YsT0FBTztVQUNMLEtBQUssUUFBUSxDQUFDLEdBQUcsQ0FBQztVQUNsQixLQUFLLFFBQVEsS0FBSztTQUNuQixDQUFDO09BQ0g7TUFDRCxVQUFVLDJCQUEyQjtRQUNuQyxPQUFPO1VBQ0wsS0FBSyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1VBQy9ELEtBQUssTUFBTSxDQUFDLE1BQU0sUUFBUSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1NBQy9FLENBQUM7T0FDSDtNQUNELE9BQU8scUNBQXFDO1FBQzFDLE9BQU87VUFDTCxLQUFLLE1BQU0sQ0FBQyxNQUFNLGFBQWEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7VUFDdEUsS0FBSyxNQUFNLENBQUMsTUFBTSxRQUFRLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDdEYsQ0FBQztPQUNIO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxhQUFhLGlCQUFpQjtNQUNsQyxNQUFNLE1BQU0sTUFBTSxJQUFJLEVBQUUsQ0FBQztNQUN6QixJQUFJLEdBQUcsVUFBVSxFQUFFO1FBQ2pCLE1BQU0sV0FBVyxNQUFNLElBQUksRUFBRSxPQUFPLENBQUMsT0FBTyxHQUFHLFVBQVUsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUNyRSxPQUFPLFFBQVEsSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsWUFBWSxRQUFRLENBQUMsR0FBRyxhQUFhLENBQUMsRUFBRSxHQUFHLFVBQVUsRUFBRSxZQUFZLFFBQVEsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sU0FBUyxDQUFDLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO09BQzFNLE1BQU07UUFDTCxPQUFPLFNBQVMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7T0FDdkM7S0FDRixDQUFDO0lBQ0YsTUFBTSxXQUFXLG9CQUFvQjtNQUNuQyxNQUFNLFNBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztNQUN6QyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDaEMsQ0FBQztJQUNGLEtBQUssSUFBSSxDQUFDO0lBQ1YsS0FBSyxJQUFJLENBQUM7O0lBRVYsTUFBTSxXQUFXLHNDQUFzQztNQUNyRCxLQUFLO01BQ0wsT0FBTztNQUNQLE1BQU07TUFDTixPQUFPO0tBQ1IsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxXQUFXLEVBQUUsUUFBUSxRQUFRLEVBQUUsQ0FBQzs7SUFFdEMsTUFBTSx5QkFBeUIsZUFBZTtNQUM1QyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7TUFDWCxPQUFPLFFBQVEsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLHdCQUF3QixNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTztRQUNwSSxJQUFJLEdBQUcsV0FBVyxLQUFLLElBQUksRUFBRTtVQUMzQixPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7U0FDeEI7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2hDLENBQUMsU0FBUyxDQUFDLEdBQUcsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNiLE9BQU8sUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDekIsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sc0JBQXNCLGVBQWU7TUFDekMsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO01BQ1gsT0FBTyxRQUFRLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxxQkFBcUIsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN4SCxDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsQ0FBQyxNQUFNO01BQzdCLElBQUksUUFBUSx1QkFBdUIsRUFBRTtRQUNuQyxPQUFPLHNCQUFzQixDQUFDO09BQy9CLE1BQU0sSUFBSSxRQUFRLG9CQUFvQixFQUFFO1FBQ3ZDLE9BQU8sbUJBQW1CLENBQUM7T0FDNUIsTUFBTTtRQUNMLE9BQU8sUUFBUSxLQUFLLENBQUM7T0FDdEI7S0FDRixHQUFHLENBQUM7SUFDTCxNQUFNLGNBQWMsZUFBZTtNQUNqQyxNQUFNLE1BQU0sWUFBWSxRQUFRLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztNQUMvQyxPQUFPLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxRQUFRLE9BQU8sQ0FBQyxZQUFZLFFBQVEsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxFQUFFLEdBQUcsWUFBWSxFQUFFLFlBQVksUUFBUSxDQUFDLEdBQUcsYUFBYSxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO0tBQ2pMLENBQUM7O0lBRUYsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDO01BQ3pCLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO01BQ3ZCO1FBQ0UsSUFBSTtVQUNGLFNBQVM7VUFDVCxRQUFRO1NBQ1Q7T0FDRjtNQUNELEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO0tBQ3ZCLENBQUMsQ0FBQztJQUNILE1BQU0sT0FBTyxzQ0FBc0MsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6RixNQUFNLGFBQWEsUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ25FLE1BQU0sV0FBVyxLQUFLLE9BQU8sQ0FBQztJQUM5QixNQUFNLEtBQUssS0FBSyxHQUFHLENBQUM7SUFDcEIsTUFBTSxVQUFVLEtBQUssTUFBTSxDQUFDO0lBQzVCLE1BQU0sT0FBTztNQUNYLFFBQVEsUUFBUTtNQUNoQixFQUFFO01BQ0YsT0FBTyxPQUFPO01BQ2QsSUFBSTtNQUNKLFVBQVUsVUFBVTtLQUNyQixDQUFDOztJQUVGLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQztNQUN6QixFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtNQUNyQjtRQUNFLFVBQVU7VUFDUixXQUFXO1VBQ1gsWUFBWTtTQUNiO09BQ0Y7TUFDRDtRQUNFLE9BQU87VUFDTCxPQUFPO1VBQ1AsU0FBUztVQUNULFFBQVE7VUFDUixTQUFTO1NBQ1Y7T0FDRjtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0saUJBQWlCLFlBQVksS0FBSyxNQUFNLENBQUMsUUFBUSxNQUFNLEVBQUUsUUFBUSxRQUFRLEVBQUUsUUFBUSxPQUFPLEVBQUUsUUFBUSxRQUFRLENBQUMsQ0FBQztJQUNwSCxNQUFNLGFBQWEsYUFBYSxTQUFTLE1BQU0sQ0FBQztNQUM5QyxVQUFVLE9BQU8sWUFBWSxRQUFRLENBQUMsR0FBRyxlQUFlLENBQUM7TUFDekQsVUFBVSw0QkFBNEIsSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDO01BQzlELE9BQU8sd0NBQXdDLEtBQUs7S0FDckQsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxXQUFXLEtBQUssU0FBUyxDQUFDO0lBQ2hDLE1BQU0sV0FBVyxLQUFLLFNBQVMsQ0FBQztJQUNoQyxNQUFNLFFBQVEsS0FBSyxNQUFNLENBQUM7SUFDMUIsTUFBTSxTQUFTLGFBQWE7TUFDMUIsTUFBTSxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUNwQyxPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUMzQixDQUFDO0lBQ0YsTUFBTSxRQUFRLFFBQVEsT0FBTyxDQUFDO0lBQzlCLE1BQU0sZUFBZTtNQUNuQixRQUFRO01BQ1IsUUFBUTtNQUNSLEtBQUs7TUFDTCxjQUFjO01BQ2QsTUFBTTtNQUNOLEtBQUs7S0FDTixDQUFDOztJQUVGLE1BQU0sZ0JBQWdCLHFCQUFxQjtNQUN6QyxNQUFNLFNBQVMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQzdCLElBQUksT0FBTyxLQUFLLE1BQU0sRUFBRTtRQUN0QixPQUFPLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO09BQzVCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQztVQUNuQixJQUFJO1VBQ0osS0FBSztTQUNOLEVBQUUsTUFBTSxDQUFDLEVBQUU7UUFDWixPQUFPLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztPQUNqQyxNQUFNO1FBQ0wsT0FBTyxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO09BQ2xFO0tBQ0YsQ0FBQztJQUNGLE1BQU0scUJBQXFCLDJCQUEyQjtNQUNwRCxNQUFNLFFBQVEsU0FBUyxLQUFLLENBQUMsSUFBSSxPQUFPLEVBQUUsYUFBYSxFQUFFLElBQUksTUFBTSxDQUFDLENBQUM7TUFDckUsTUFBTSxTQUFTLFVBQVUsS0FBSyxDQUFDLElBQUksT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDO01BQ3ZFLE9BQU8sWUFBWSxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQzdDLENBQUM7SUFDRixNQUFNLGtCQUFrQixxQ0FBcUM7TUFDM0QsTUFBTSxZQUFZLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDaEQsTUFBTSxhQUFhLGFBQWEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDbEQsT0FBTyxZQUFZLFNBQVMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FDckQsQ0FBQztJQUNGLE1BQU0sYUFBYSxhQUFhLFNBQVMsTUFBTSxDQUFDO01BQzlDLFVBQVUsT0FBTztRQUNmLE1BQU0sUUFBUSxZQUFZLFFBQVEsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sU0FBUyxZQUFZLFFBQVEsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sZUFBZSxDQUFDLEtBQUssRUFBRSxHQUFHLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQztPQUN2RTtNQUNELFVBQVUsa0JBQWtCO01BQzVCLE9BQU8sZUFBZTtLQUN2QixDQUFDLENBQUM7O0lBRUgsTUFBTSxlQUFlLHFCQUFxQjtNQUN4QyxNQUFNLE1BQU0sS0FBSyxJQUFJLFFBQVEsQ0FBQztNQUM5QixNQUFNLFdBQVcsR0FBRyx1QkFBdUIsRUFBRSxDQUFDO01BQzlDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVztRQUMxQixRQUFRLFlBQVksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO09BQ25DLENBQUMsQ0FBQztNQUNILE9BQU8sWUFBWSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDdkMsQ0FBQzs7SUFFRixNQUFNLFdBQVcsYUFBYTtNQUM1QixNQUFNLE1BQU0sWUFBWSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztNQUMvQyxNQUFNLGNBQWMscUNBQXFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDN0csTUFBTSxXQUFXLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUN2QyxPQUFPLFFBQVEsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUNuQyxLQUFLLFdBQVc7UUFDaEIsS0FBSyxXQUFXO09BQ2pCLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGFBQWEsZUFBZSxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7SUFFekQsTUFBTSxZQUFZLDJCQUEyQjtNQUMzQyxNQUFNLE1BQU0sV0FBVyxDQUFDLFlBQVksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDbkQsT0FBTyxVQUFVLENBQUMsR0FBRyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWTtRQUMzRCxNQUFNLE1BQU0sR0FBRyxZQUFZLEVBQUUsQ0FBQztRQUM5QixHQUFHLFNBQVMsQ0FBQyxRQUFRLE1BQU0sSUFBSSxFQUFFLFFBQVEsUUFBUSxDQUFDLENBQUM7UUFDbkQsR0FBRyxPQUFPLENBQUMsUUFBUSxPQUFPLElBQUksRUFBRSxRQUFRLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sR0FBRyxDQUFDO09BQ1osQ0FBQyxlQUFlLEVBQUUsQ0FBQztLQUNyQixDQUFDOztJQUVGLE1BQU0sU0FBUyxnQkFBZ0I7TUFDN0IsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksZUFBZSxLQUFLLElBQUksZUFBZSxJQUFJLElBQUksWUFBWSxLQUFLLElBQUksWUFBWSxDQUFDLEtBQUssSUFBSSxhQUFhLEtBQUssSUFBSSxhQUFhLElBQUksSUFBSSxVQUFVLEtBQUssSUFBSSxVQUFVLENBQUMsQ0FBQztLQUMvTixDQUFDOztJQUVGLE1BQU0sYUFBYSwrQkFBK0I7TUFDaEQsSUFBSSxjQUFjLElBQUksQ0FBQztNQUN2QixPQUFPLFdBQVcsSUFBSSxXQUFXLEtBQUssUUFBUSxFQUFFO1FBQzlDLElBQUksU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1VBQzFCLE9BQU8sV0FBVyxDQUFDO1NBQ3BCO1FBQ0QsY0FBYyxXQUFXLFdBQVcsQ0FBQztPQUN0QztNQUNELE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQztJQUNGLE1BQU0sY0FBYywrQkFBK0IsVUFBVSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDO0lBQ2xHLE1BQU0sb0JBQW9CLDBCQUEwQixXQUFXLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLElBQUksU0FBUyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ2hILE1BQU0sMEJBQTBCLG9CQUFvQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzFILE1BQU0sbUJBQW1CLHFCQUFxQjtNQUM1QyxNQUFNLGFBQWEsSUFBSSxXQUFXLENBQUM7TUFDbkMsSUFBSSxVQUFVLEVBQUU7UUFDZCxNQUFNLFNBQVMsSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsVUFBVSxDQUFDLFVBQVUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNoRyxJQUFJLFdBQVcsQ0FBQztRQUNoQixPQUFPLGNBQWMsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFBRTtVQUNyRCxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUN2QixPQUFPLElBQUksQ0FBQztXQUNiO1NBQ0Y7T0FDRjtNQUNELE9BQU8sS0FBSyxDQUFDO0tBQ2QsQ0FBQztJQUNGLE1BQU0sYUFBYSxnQkFBZ0I7TUFDakMsSUFBSSxFQUFFLENBQUM7TUFDUCxPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksZ0JBQWdCLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsTUFBTSxJQUFJLENBQUM7S0FDaEcsQ0FBQztJQUNGLE1BQU0sZ0NBQWdDLGdCQUFnQjtNQUNwRCxJQUFJLGNBQWMsSUFBSSxDQUFDO01BQ3ZCLE9BQU8sV0FBVyxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUU7UUFDMUMsSUFBSSx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsRUFBRTtVQUN6QyxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsY0FBYyxXQUFXLFdBQVcsQ0FBQztPQUN0QztNQUNELE9BQU8sS0FBSyxDQUFDO0tBQ2QsQ0FBQztJQUNGLE1BQU0sdUJBQXVCLGtEQUFrRDtNQUM3RSxNQUFNLE9BQU8sR0FBRyxRQUFRLEVBQUUsQ0FBQztNQUMzQixNQUFNLHNCQUFzQixHQUFHLE9BQU8sb0JBQW9CLEVBQUUsQ0FBQztNQUM3RCxNQUFNLGFBQWEsU0FBUyxXQUFXLENBQUM7TUFDeEMsSUFBSSxpQkFBaUIsQ0FBQztNQUN0QixJQUFJLElBQUksQ0FBQztNQUNULElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDZixPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEI7TUFDRCxNQUFNLHVCQUF1QixHQUFHLFVBQVUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUM7TUFDNUUsSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFdBQVcsSUFBSSxHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO1FBQ2pGLE9BQU8sUUFBUSxLQUFLLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDM0U7TUFDRCxNQUFNLFNBQVMsSUFBSSxhQUFhLENBQUMsU0FBUyxFQUFFLG9CQUFvQixDQUFDLENBQUM7TUFDbEUsT0FBTyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUU7UUFDOUMsSUFBSSxHQUFHLHlCQUF5QixDQUFDLElBQUksQ0FBQyxLQUFLLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7VUFDekYsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO1NBQ3hCO1FBQ0QsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLE9BQU8sR0FBRyxDQUFDLEVBQUU7VUFDMUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDdkMsT0FBTyxRQUFRLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLEtBQUssT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDeEU7VUFDRCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7U0FDeEI7UUFDRCxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLG1CQUFtQixDQUFDLElBQUksU0FBUyxZQUFZLEVBQUUsQ0FBQyxFQUFFO1VBQ3pFLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztTQUN4QjtRQUNELG9CQUFvQixJQUFJLENBQUM7T0FDMUI7TUFDRCxJQUFJLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1FBQ2hDLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN4QjtNQUNELElBQUksU0FBUyxJQUFJLGlCQUFpQixFQUFFO1FBQ2xDLE9BQU8sUUFBUSxLQUFLLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDM0Q7TUFDRCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7S0FDeEIsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLGdDQUFnQztNQUN4RCxNQUFNLE9BQU8sR0FBRyxRQUFRLEVBQUUsQ0FBQztNQUMzQixJQUFJLElBQUksQ0FBQztNQUNULElBQUksYUFBYSxLQUFLLENBQUM7TUFDdkIsSUFBSSxZQUFZLEtBQUssR0FBRyxHQUFHLGVBQWUsR0FBRyxHQUFHLGFBQWEsQ0FBQztNQUM5RCxJQUFJLFNBQVMsS0FBSyxHQUFHLEdBQUcsWUFBWSxHQUFHLEdBQUcsVUFBVSxDQUFDO01BQ3JELE1BQU0sY0FBYyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksTUFBTSxLQUFLLFNBQVMsV0FBVyxPQUFPLENBQUM7TUFDckYsTUFBTSxzQkFBc0IsR0FBRyxPQUFPLG9CQUFvQixFQUFFLENBQUM7TUFDN0QsSUFBSSxnQkFBZ0IsS0FBSyxDQUFDO01BQzFCLElBQUksa0JBQWtCLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDakMsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCO01BQ0QsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksTUFBTSxHQUFHLFNBQVMsV0FBVyxPQUFPLEdBQUcsQ0FBQyxFQUFFO1FBQ3RFLGdCQUFnQixLQUFLLENBQUM7T0FDdkI7TUFDRCxJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUMzQixZQUFZLElBQUksQ0FBQztRQUNqQixTQUFTLENBQUMsQ0FBQztPQUNaO01BQ0QsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFO1FBQ3RCLElBQUksYUFBYSxFQUFFO1VBQ2pCLE9BQU8sU0FBUyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1VBQ3pELElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtjQUM1QixPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7YUFDeEI7WUFDRCxJQUFJLG1CQUFtQixDQUFDLElBQUksU0FBUyxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO2NBQ3pELE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQzthQUN4QjtXQUNGO1NBQ0Y7UUFDRCxJQUFJLFNBQVMsY0FBYyxFQUFFLEVBQUU7VUFDN0IsU0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDLGFBQWEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsTUFBTSxFQUFFLFNBQVMsV0FBVyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7VUFDdkcsWUFBWSxTQUFTLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztVQUN6QyxTQUFTLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxXQUFXLEdBQUcsU0FBUyxLQUFLLE9BQU8sR0FBRyxDQUFDLENBQUM7VUFDeEUsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLEtBQUssSUFBSSxVQUFVLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3RFLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztXQUN4QjtVQUNELElBQUksNkJBQTZCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ25GLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztXQUN4QjtVQUNELElBQUksU0FBUyxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN0RCxPQUFPLFNBQVMsQ0FBQztZQUNqQixNQUFNLFNBQVMsSUFBSSxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xELEdBQUc7Y0FDRCxJQUFJLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUM5RCxhQUFhLEtBQUssQ0FBQztnQkFDbkIsTUFBTTtlQUNQO2NBQ0QsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLE9BQU8sR0FBRyxDQUFDLEVBQUU7Z0JBQzFDLFNBQVMsYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLEtBQUssT0FBTyxDQUFDO2dCQUM5QyxZQUFZLElBQUksQ0FBQztnQkFDakIsYUFBYSxJQUFJLENBQUM7Z0JBQ2xCLE1BQU07ZUFDUDtjQUNELElBQUksbUJBQW1CLENBQUMsSUFBSSxTQUFTLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbkYsU0FBUyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDN0IsWUFBWSxJQUFJLFdBQVcsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGFBQWEsRUFBRTtrQkFDbEIsTUFBTSxFQUFFLENBQUM7aUJBQ1Y7Z0JBQ0QsYUFBYSxJQUFJLENBQUM7Z0JBQ2xCLE1BQU07ZUFDUDthQUNGLFFBQVEsT0FBTyxhQUFhLEdBQUcsTUFBTSxLQUFLLEVBQUUsR0FBRyxNQUFNLEtBQUssRUFBRSxFQUFFO1dBQ2hFO1NBQ0Y7T0FDRjtNQUNELElBQUksU0FBUyxFQUFFO1FBQ2IsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtVQUN2QyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQzdFLFlBQVksR0FBRyxVQUFVLEVBQUUsQ0FBQztZQUM1QixTQUFTLEdBQUcsT0FBTyxFQUFFLENBQUM7WUFDdEIsYUFBYSxJQUFJLENBQUM7V0FDbkIsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxJQUFJLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRTtVQUMxQixPQUFPLFNBQVMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1VBQ3BDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPLFNBQVMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztXQUN6QztVQUNELElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRTtZQUMvSCxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO2NBQ3hFLFlBQVksR0FBRyxVQUFVLEVBQUUsQ0FBQztjQUM1QixTQUFTLEdBQUcsT0FBTyxFQUFFLENBQUM7Y0FDdEIsYUFBYSxJQUFJLENBQUM7YUFDbkIsQ0FBQyxDQUFDO1dBQ0o7U0FDRjtPQUNGO01BQ0QsSUFBSSxhQUFhLElBQUksQ0FBQyxTQUFTLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLE1BQU0sS0FBSyxTQUFTLEtBQUssT0FBTyxFQUFFO1FBQzFGLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU87VUFDOUUsWUFBWSxHQUFHLFVBQVUsRUFBRSxDQUFDO1VBQzVCLFNBQVMsR0FBRyxPQUFPLEVBQUUsQ0FBQztVQUN0QixhQUFhLElBQUksQ0FBQztTQUNuQixDQUFDLENBQUM7T0FDSjtNQUNELE9BQU8sVUFBVSxJQUFJLFNBQVMsR0FBRyxRQUFRLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztLQUNwRyxDQUFDO0lBQ0YsTUFBTSxjQUFjLGNBQWM7TUFDaEMsTUFBTSxZQUFZLEdBQUcsVUFBVSxFQUFFLFVBQVUsR0FBRyxXQUFXLEVBQUUsQ0FBQztNQUM1RCxNQUFNLFdBQVcsYUFBYSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDbkQsaUJBQWlCLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPO1FBQzNELElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxhQUFhLFFBQVEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUU7VUFDdkQsT0FBTyxTQUFTLENBQUMsR0FBRyxVQUFVLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDakQ7T0FDRixDQUFDLENBQUM7TUFDSCxJQUFJLENBQUMsU0FBUyxFQUFFO1FBQ2QsaUJBQWlCLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPO1VBQzVELE9BQU8sT0FBTyxDQUFDLEdBQUcsVUFBVSxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQy9DLENBQUMsQ0FBQztPQUNKO01BQ0QsSUFBSSxTQUFTLEVBQUU7UUFDYixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN4QjtNQUNELE9BQU8sTUFBTSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxHQUFHLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3hFLENBQUM7O0lBRUYsTUFBTSxZQUFZLGtCQUFrQjtNQUNsQyxPQUFPLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQy9CLENBQUM7SUFDRixNQUFNLFFBQVEsT0FBTztNQUNuQixJQUFJLGlCQUFpQixHQUFHLGVBQWUsRUFBRSxjQUFjLEdBQUcsWUFBWSxFQUFFLGVBQWUsR0FBRyxhQUFhLEVBQUUsWUFBWSxHQUFHLFVBQVUsQ0FBQztNQUNuSSxJQUFJLGNBQWMsS0FBSyxZQUFZLElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1FBQy9ELElBQUksV0FBVyxHQUFHLENBQUMsSUFBSSxXQUFXLEdBQUcsY0FBYyxLQUFLLE9BQU8sRUFBRTtVQUMvRCxlQUFlLFNBQVMsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7VUFDdEQsaUJBQWlCLFlBQVksZ0JBQWdCLENBQUM7VUFDOUMsSUFBSSxTQUFTLEdBQUcsV0FBVyxFQUFFO1lBQzNCLFlBQVksU0FBUyxHQUFHLFdBQVcsQ0FBQztZQUNwQyxNQUFNLGVBQWUsU0FBUyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsZ0JBQWdCLENBQUM7WUFDeEUsaUJBQWlCLGVBQWUsWUFBWSxDQUFDO1lBQzdDLFlBQVksWUFBWSxLQUFLLE9BQU8sQ0FBQztZQUNyQyxjQUFjLENBQUMsQ0FBQztXQUNqQixNQUFNO1lBQ0wsWUFBWSxDQUFDLENBQUM7V0FDZjtTQUNGO09BQ0YsTUFBTTtRQUNMLElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLFdBQVcsR0FBRyxDQUFDLElBQUksV0FBVyxHQUFHLGNBQWMsS0FBSyxPQUFPLEVBQUU7VUFDM0YsaUJBQWlCLFNBQVMsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7VUFDeEQsY0FBYyxDQUFDLENBQUM7U0FDakI7UUFDRCxJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxJQUFJLFNBQVMsR0FBRyxZQUFZLEtBQUssT0FBTyxFQUFFO1VBQ25GLE1BQU0sZUFBZSxTQUFTLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQztVQUN4RSxlQUFlLFlBQVksQ0FBQztVQUM1QixZQUFZLFlBQVksS0FBSyxPQUFPLENBQUM7U0FDdEM7T0FDRjtNQUNELE9BQU87UUFDTCxjQUFjO1FBQ2QsV0FBVztRQUNYLFlBQVk7UUFDWixTQUFTO09BQ1YsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxhQUFhLE9BQU87TUFDeEIsTUFBTSxPQUFPLG1CQUFtQjtRQUM5QixPQUFPLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO09BQ25DLENBQUM7TUFDRixNQUFNLFVBQVUsS0FBSyxDQUFDO01BQ3RCLE1BQU0sWUFBWSxPQUFPO1FBQ3ZCLE9BQU8sV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxpQkFBaUI7VUFDeEQsR0FBRyxTQUFTLENBQUMsYUFBYSxlQUFlLEVBQUUsYUFBYSxZQUFZLENBQUMsQ0FBQztVQUN0RSxHQUFHLE9BQU8sQ0FBQyxhQUFhLGFBQWEsRUFBRSxhQUFhLFVBQVUsQ0FBQyxDQUFDO1VBQ2hFLE9BQU8sSUFBSSxDQUFDO1NBQ2IsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sU0FBUyxNQUFNLFVBQVUsRUFBRSxNQUFNLE1BQU0sRUFBRSxLQUFLO1FBQ2xELElBQUksT0FBTyxLQUFLLEtBQUssTUFBTSxFQUFFO1VBQzNCLE1BQU0sWUFBWSxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7VUFDNUQsTUFBTSxXQUFXLEdBQUcsVUFBVSxFQUFFLENBQUM7VUFDakMsUUFBUSxTQUFTLENBQUMsU0FBUyxlQUFlLEVBQUUsU0FBUyxZQUFZLENBQUMsQ0FBQztVQUNuRSxRQUFRLE9BQU8sQ0FBQyxTQUFTLGFBQWEsRUFBRSxTQUFTLFVBQVUsQ0FBQyxDQUFDO1VBQzdELE9BQU8sUUFBUSxDQUFDO1NBQ2pCO1FBQ0QsT0FBTyxHQUFHLENBQUM7T0FDWixDQUFDO01BQ0YsT0FBTztRQUNMLElBQUk7UUFDSixPQUFPLE9BQU87UUFDZCxNQUFNO1FBQ04sU0FBUztPQUNWLENBQUM7S0FDSCxDQUFDO0lBQ0YsVUFBVSxjQUFjLEdBQUcsTUFBTSxDQUFDO0lBQ2xDLFVBQVUsdUJBQXVCLEdBQUcsU0FBUyxDQUFDO0lBQzlDLFVBQVUsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDO0lBQzdDLFVBQVUsUUFBUSxHQUFHLFNBQVMsQ0FBQzs7SUFFL0IsTUFBTSxZQUFZLHFCQUFxQjtNQUNyQyxNQUFNLE1BQU0sZ0JBQWdCO1FBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRTtVQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksR0FBRyx1REFBdUQsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNyRjtRQUNELE1BQU0sTUFBTSxPQUFPLElBQUksQ0FBQztRQUN4QixJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRTtVQUNwQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQzVCO09BQ0YsQ0FBQztNQUNGLE1BQU0sTUFBTSxXQUFXO1FBQ3JCLE1BQU0sSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7VUFDeEIsTUFBTSxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7VUFDakMsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdCO1FBQ0QsT0FBTyxDQUFDLENBQUM7T0FDVixDQUFDO01BQ0YsTUFBTSxXQUFXLEdBQUcsQ0FBQztNQUNyQixNQUFNLFlBQVkseUJBQXlCLEtBQUssQ0FBQyxVQUFVLEVBQUUsbUJBQW1CO1FBQzlFLE1BQU0sTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO09BQ3pDLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDTixNQUFNLE1BQU0sZ0NBQWdDO1FBQzFDLE1BQU0sdUJBQXVCLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDNUQsTUFBTSxjQUFjLEtBQUssR0FBRyxvQkFBb0IsR0FBRyxLQUFLLEdBQUcsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBQ3BGLE9BQU8sV0FBVyxDQUFDO09BQ3BCLENBQUM7TUFDRixPQUFPO1FBQ0wsR0FBRztRQUNILEdBQUc7UUFDSCxRQUFRO1FBQ1IsU0FBUztRQUNULEdBQUc7T0FDSixDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLE1BQU0sU0FBUyxDQUFDLFFBQVEsRUFBRSxXQUFXO01BQ3pDLE1BQU0sTUFBTSxPQUFPLElBQUksQ0FBQztNQUN4QixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLHNCQUFzQixFQUFFLE9BQU8sR0FBRyxHQUFHLGFBQWEsQ0FBQztLQUNoRixDQUFDLENBQUM7SUFDSCxNQUFNLFFBQVEsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzs7SUFFMUMsTUFBTSxjQUFjLE1BQU0sWUFBWSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7O0lBRXpELE1BQU0sU0FBUyxxQkFBcUI7TUFDbEMsTUFBTSxRQUFRLFVBQVUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ25DLE9BQU8sS0FBSyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUs7UUFDbkMsTUFBTSxTQUFTLFVBQVUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sT0FBTyxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ3pCLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFNBQVMseUJBQXlCO01BQ3RDLE1BQU0sSUFBSSxVQUFVLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUNwQyxPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDOUIsQ0FBQzs7SUFFRixNQUFNLE9BQU8sT0FBTztNQUNsQixJQUFJLEVBQUUsQ0FBQztNQUNQLE1BQU0sVUFBVSxHQUFHLElBQUksS0FBSyxRQUFRLEdBQUcsUUFBUSxLQUFLLEVBQUUsR0FBRyxRQUFRLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLFlBQVksTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7TUFDeEosT0FBTyxPQUFPLElBQUksQ0FBQyxZQUFZLFFBQVEsQ0FBQyxDQUFDO0tBQzFDLENBQUM7SUFDRixNQUFNLFFBQVEsV0FBVyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7O0lBRWxELElBQUksMEJBQTBCLE1BQU0sT0FBTyxDQUFDO1FBQ3hDLFdBQVcsSUFBSTtRQUNmLE1BQU0sSUFBSTtRQUNWLE9BQU8sS0FBSztLQUNmLENBQUMsQ0FBQzs7SUFFSCxNQUFNLE9BQU8sV0FBVztNQUN0QixNQUFNLE1BQU0sV0FBVyxFQUFFLENBQUM7TUFDMUIsTUFBTSxTQUFTLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUMxQixNQUFNLFNBQVMsTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztNQUMzQyxNQUFNLFNBQVMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLFVBQVU7UUFDaEMsTUFBTSxNQUFNLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixPQUFPO1VBQ0wsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLEtBQUs7VUFDdkIsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLElBQUk7U0FDckIsQ0FBQztPQUNILEVBQUU7UUFDRCxNQUFNLENBQUM7UUFDUCxLQUFLLENBQUM7T0FDUCxDQUFDLENBQUM7TUFDSCxPQUFPLGFBQWEsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLEtBQUssR0FBRyxNQUFNLEtBQUssRUFBRSxDQUFDLElBQUksR0FBRyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFDO0tBQzNGLENBQUM7O0lBRUYsTUFBTSxxQkFBcUIsV0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssVUFBVSxDQUFDO0lBQ25FLE1BQU0sMEJBQTBCLGtCQUFrQjtNQUNoRCxNQUFNLGNBQWMsTUFBTSxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDNUQsT0FBTyxXQUFXLG1CQUFtQixFQUFFLENBQUM7S0FDekMsQ0FBQztJQUNGLE1BQU0sK0JBQStCLGtCQUFrQjtNQUNyRCxNQUFNLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUM5QyxDQUFDO0lBQ0YsTUFBTSxVQUFVLHFCQUFxQjtNQUNuQyxNQUFNLFdBQVcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ3JDLElBQUksUUFBUSxPQUFPLEtBQUssQ0FBQyxJQUFJLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3hELE9BQU87VUFDTCxPQUFPO1VBQ1AsTUFBTTtTQUNQLENBQUM7T0FDSCxNQUFNLElBQUksTUFBTSxHQUFHLFFBQVEsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7UUFDNUUsT0FBTztVQUNMLFNBQVMsUUFBUSxDQUFDLE1BQU0sQ0FBQztVQUN6QixRQUFRLENBQUM7U0FDVixDQUFDO09BQ0gsTUFBTTtRQUNMLE1BQU0sT0FBTyxRQUFRLENBQUMsUUFBUSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDM0MsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUM1QixPQUFPO1lBQ0wsT0FBTztZQUNQLE1BQU07V0FDUCxDQUFDO1NBQ0gsTUFBTTtVQUNMLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssRUFBRTtZQUN4QixPQUFPO2NBQ0wsU0FBUyxJQUFJO2NBQ2IsUUFBUSxDQUFDO2FBQ1YsQ0FBQztXQUNILE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekIsT0FBTztjQUNMLFNBQVMsSUFBSTtjQUNiLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPO2FBQzNCLENBQUM7V0FDSCxNQUFNO1lBQ0wsT0FBTztjQUNMLFNBQVMsSUFBSTtjQUNiLFFBQVEsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPO2FBQ2hDLENBQUM7V0FDSDtTQUNGO09BQ0Y7S0FDRixDQUFDO0lBQ0YsTUFBTSxhQUFhLHlCQUF5QjtNQUMxQyxNQUFNLE1BQU0sUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQzlCLE1BQU0sU0FBUyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDOUIsT0FBTztRQUNMLE9BQU87UUFDUCxRQUFRLEdBQUcsSUFBSSxHQUFHLE1BQU07UUFDeEIsTUFBTTtRQUNOLEdBQUc7UUFDSCxTQUFTLFVBQVU7T0FDcEIsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLGlCQUFpQixxQkFBcUI7TUFDMUMsTUFBTSxhQUFhLE9BQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDNUMsTUFBTSxPQUFPLFlBQVksU0FBUyxDQUFDLDREQUE0RCxHQUFHLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQztNQUN0SCxRQUFRLENBQUMsVUFBVSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDbkMsT0FBTyxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDL0MsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLFdBQVcsVUFBVSxDQUFDLFlBQVksUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pGLE1BQU0sYUFBYSxnQ0FBZ0M7TUFDakQsWUFBWSxDQUFDLE1BQU0sRUFBRSxZQUFZLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUNwRixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsd0NBQXdDO01BQy9ELE1BQU0sT0FBTztRQUNYLEtBQUssTUFBTSxRQUFRLElBQUk7UUFDdkIsVUFBVTtPQUNYLENBQUM7TUFDRixJQUFJLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRTtRQUN6QyxPQUFPO09BQ1I7TUFDRCxNQUFNLFlBQVksS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7TUFDakMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztNQUM5Qyw0QkFBNEIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDNUMsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLGdDQUFnQztNQUN0RCxNQUFNLE9BQU8sWUFBWSxRQUFRLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQ3BELE1BQU0sTUFBTSxZQUFZLFFBQVEsQ0FBQyxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUM7TUFDbEQsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ2IsTUFBTSxTQUFTLGNBQWMsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUM7TUFDekYsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO01BQ3JELE1BQU0sUUFBUSxFQUFFLENBQUM7S0FDbEIsQ0FBQztJQUNGLE1BQU0sY0FBYyxvQ0FBb0M7TUFDdEQsTUFBTSxNQUFNLFlBQVksUUFBUSxDQUFDLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQztNQUNsRCxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FDdEUsQ0FBQztJQUNGLE1BQU0sZUFBZSxvQkFBb0I7TUFDdkMsTUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDO01BQ3hDLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQztNQUNwQyxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUM7TUFDcEMsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDO01BQ2hDLENBQUMsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxZQUFZLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO01BQ3hFLE1BQU0sU0FBUyxNQUFNLElBQUksVUFBVSxFQUFFLENBQUM7TUFDdEMsTUFBTSxTQUFTLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO01BQzNDLE1BQU0sT0FBTyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztNQUNyQyxNQUFNLFVBQVUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzlCLENBQUM7SUFDRixNQUFNLGlCQUFpQixpREFBaUQ7TUFDdEUsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLElBQUksVUFBVSxFQUFFO1FBQ2QsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO09BQzVCLE1BQU07UUFDTCxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsVUFBVSxHQUFHLE1BQU0sT0FBTyxDQUFDO1FBQy9DLEVBQUUsQ0FBQyxDQUFDLE1BQU0sUUFBUSxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7T0FDNUQ7S0FDRixDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsNERBQTREO01BQ3JGLE1BQU0saUJBQWlCLFVBQVUsR0FBRyxTQUFTLENBQUM7TUFDOUMsTUFBTSxZQUFZLE1BQU0sSUFBSSxJQUFJLENBQUM7TUFDakMsTUFBTSxlQUFlLE1BQU0sT0FBTyxDQUFDO01BQ25DLE1BQU0scUJBQXFCLFlBQVksR0FBRyxTQUFTLElBQUksVUFBVSxDQUFDO01BQ2xFLElBQUksU0FBUyxHQUFHLFNBQVMsRUFBRTtRQUN6QixjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxLQUFLLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztPQUN2RSxNQUFNLElBQUksU0FBUyxHQUFHLGNBQWMsRUFBRTtRQUNyQyxNQUFNLFFBQVEsa0JBQWtCLEdBQUcsVUFBVSxLQUFLLEtBQUssR0FBRyxVQUFVLEtBQUssSUFBSSxDQUFDO1FBQzlFLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7T0FDeEQsTUFBTSxJQUFJLFlBQVksR0FBRyxjQUFjLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtRQUMvRCxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztPQUN0RTtLQUNGLENBQUM7SUFDRixNQUFNLGFBQWEsZ0RBQWdEO01BQ2pFLE1BQU0sYUFBYSxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksWUFBWSxDQUFDO01BQ3BELGtCQUFrQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FDNUUsQ0FBQztJQUNGLE1BQU0sWUFBWSxnREFBZ0Q7TUFDaEUsTUFBTSxrQkFBa0IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFlBQVksQ0FBQztNQUN6RCxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO01BQ2hGLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQztNQUNoQyxNQUFNLGlCQUFpQixTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDekMsSUFBSSxFQUFFLElBQUksR0FBRyxjQUFjLEVBQUUsRUFBRTtRQUM3QixRQUFRLENBQUMsTUFBTSxRQUFRLEVBQUUsVUFBVSxLQUFLLEtBQUssQ0FBQyxDQUFDO09BQ2hELE1BQU0sSUFBSSxFQUFFLElBQUksR0FBRyxjQUFjLE9BQU8sRUFBRTtRQUN6QyxRQUFRLENBQUMsTUFBTSxRQUFRLEVBQUUsVUFBVSxLQUFLLElBQUksQ0FBQyxDQUFDO09BQy9DO0tBQ0YsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLDZCQUE2QixVQUFVLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDckcsTUFBTSxvQkFBb0IsaUNBQWlDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNoSCxNQUFNLGlCQUFpQiw2QkFBNkIsVUFBVSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ25HLE1BQU0sbUJBQW1CLGlDQUFpQyxXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDOUcsTUFBTSx3QkFBd0IsaUNBQWlDO01BQzdELE1BQU0sV0FBVyxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztNQUN0RSxRQUFRLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztLQUN2QyxDQUFDO0lBQ0YsTUFBTSxzQkFBc0IsNkJBQTZCO01BQ3ZELE1BQU0sV0FBVyxNQUFNLE9BQU8sR0FBRyxlQUFlLEdBQUcsY0FBYyxDQUFDO01BQ2xFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQ25DLENBQUM7O0lBRUYsTUFBTSxVQUFVLFdBQVcsT0FBTyxJQUFJLE1BQU0sRUFBRSxDQUFDO0lBQy9DLE1BQU0sYUFBYSxXQUFXO01BQzVCLE1BQU0sT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztNQUN0QyxPQUFPLE9BQU8sSUFBSSxLQUFLLElBQUksY0FBYyxDQUFDO0tBQzNDLENBQUM7SUFDRixNQUFNLFdBQVcsQ0FBQyxPQUFPLFdBQVcsRUFBRSxLQUFLLFFBQVEsS0FBSyxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksUUFBUSxDQUFDLENBQUM7SUFDM0csTUFBTSxTQUFTLFdBQVcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxPQUFPLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzs7SUFFbEcsTUFBTSxVQUFVLHFCQUFxQjtNQUNuQyxNQUFNLE1BQU0sUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztNQUN2RixJQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUU7UUFDaEIsT0FBTyxHQUFHLENBQUM7T0FDWixNQUFNLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNyQixPQUFPLENBQUMsQ0FBQztPQUNWO01BQ0QsT0FBTyxNQUFNLENBQUM7S0FDZixDQUFDO0lBQ0YsTUFBTSxlQUFlLE9BQU8sWUFBWSxNQUFNLENBQUMsR0FBRyxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsUUFBUSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN6SSxNQUFNLGVBQWUsZUFBZSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekcsTUFBTSxjQUFjLFFBQVEsT0FBTyxZQUFZLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQ25HLE1BQU0sY0FBYyxVQUFVLE1BQU0sT0FBTyxJQUFJLEdBQUcsUUFBUSxVQUFVLEVBQUUsQ0FBQztJQUN2RSxNQUFNLDhCQUE4QixLQUFLLFlBQVksTUFBTSxDQUFDLFlBQVksUUFBUSxDQUFDLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsWUFBWSxRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RLLE1BQU0sWUFBWSxPQUFPO01BQ3ZCLE1BQU0sWUFBWSxHQUFHLGFBQWEsRUFBRSxDQUFDO01BQ3JDLE1BQU0sTUFBTSxDQUFDLFNBQVMsSUFBSSxTQUFTLFdBQVcsS0FBSyxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsR0FBRyxRQUFRLEtBQUssQ0FBQyxTQUFTLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2hILE9BQU8sR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztLQUM3QyxDQUFDO0lBQ0YsTUFBTSxjQUFjLFFBQVE7TUFDMUIsTUFBTSxNQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUM5QixPQUFPLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDckQsQ0FBQztJQUNGLE1BQU0sV0FBVyxvQkFBb0IsUUFBUSxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3pHLE1BQU0sc0JBQXNCLFlBQVk7TUFDdEMsTUFBTSxNQUFNLFFBQVEsWUFBWSxFQUFFLENBQUM7TUFDbkMsSUFBSTtRQUNGLEdBQUcsU0FBUyxDQUFDLFFBQVEsTUFBTSxJQUFJLEVBQUUsUUFBUSxRQUFRLENBQUMsQ0FBQztRQUNuRCxHQUFHLE9BQU8sQ0FBQyxRQUFRLE9BQU8sSUFBSSxFQUFFLFFBQVEsUUFBUSxDQUFDLENBQUM7UUFDbEQsT0FBTyxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUMzQixDQUFDLFVBQVU7UUFDVixPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEI7S0FDRixDQUFDO0lBQ0YsTUFBTSxRQUFRLFVBQVU7TUFDdEIsTUFBTSxjQUFjLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsWUFBWSxRQUFRLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztNQUNoSCxNQUFNLFNBQVMsR0FBRyxXQUFXLE9BQU8sRUFBRSxHQUFHLFdBQVcsR0FBRyxNQUFNLFNBQVMsQ0FBQztLQUN4RSxDQUFDO0lBQ0YsTUFBTSxTQUFTLFVBQVU7TUFDdkIsTUFBTSxXQUFXLE1BQU0sU0FBUyxHQUFHLE1BQU0sU0FBUyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7TUFDckUsT0FBTyxRQUFRLEtBQUssQ0FBQyxLQUFLLFFBQVEsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxNQUFNLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7S0FDMUcsQ0FBQztJQUNGLE1BQU0sVUFBVSxVQUFVO01BQ3hCLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sTUFBTSxVQUFVLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQzFELENBQUM7O0lBRUYsTUFBTSxzQkFBc0IsT0FBTztNQUNqQyxNQUFNLFlBQVksR0FBRyxVQUFVLFNBQVMsRUFBRSxDQUFDO01BQzNDLE9BQU8sU0FBUyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksU0FBUyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDN0UsQ0FBQztJQUNGLE1BQU0sZUFBZSxFQUFFLG1CQUFtQixtQkFBbUIsRUFBRSxDQUFDOztJQUVoRSxNQUFNLG9CQUFvQixvQkFBb0I7TUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNuQixPQUFPLENBQUMsQ0FBQztPQUNWO01BQ0QsT0FBTyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ25DLENBQUM7SUFDRixNQUFNLHFCQUFxQixvQkFBb0I7TUFDN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNuQixPQUFPLENBQUMsQ0FBQztPQUNWO01BQ0QsT0FBTyxXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3BDLENBQUM7SUFDRixNQUFNLFFBQVE7TUFDWixrQkFBa0IsNEJBQTRCO1FBQzVDLE9BQU8saUJBQWlCLENBQUMsTUFBTTtVQUM3QixJQUFJLENBQUMsTUFBTSxRQUFRLEVBQUU7WUFDbkIsUUFBUSxFQUFFLENBQUM7V0FDWjtTQUNGLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDVjtNQUNELG1CQUFtQiw0QkFBNEI7UUFDN0MsTUFBTSxRQUFRLGtCQUFrQixDQUFDLE1BQU07VUFDckMsSUFBSSxDQUFDLE1BQU0sUUFBUSxFQUFFO1lBQ25CLFFBQVEsRUFBRSxDQUFDO1dBQ1osTUFBTTtZQUNMLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztXQUN0QjtTQUNGLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDVCxPQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLHFCQUFxQixLQUFLO01BQzlCLE9BQU8sQ0FBQyxLQUFLLEtBQUssWUFBWSxJQUFJLENBQUMsZ0JBQWdCLENBQUM7S0FDckQsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLDRCQUE0QjtNQUN0RCxNQUFNLGNBQWMsTUFBTTtRQUN4QixjQUFjLFNBQVMsRUFBRSxDQUFDO09BQzNCLENBQUM7TUFDRixRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDcEQsTUFBTSxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU07UUFDeEIsUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO09BQ3ZELENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGtCQUFrQiw0QkFBNEI7TUFDbEQsTUFBTSxHQUFHLENBQUMsa0JBQWtCLEVBQUUsTUFBTTtRQUNsQyxjQUFjLFNBQVMsRUFBRSxDQUFDO09BQzNCLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLHVCQUF1Qiw0QkFBNEI7TUFDdkQsZUFBZSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztNQUN4QyxNQUFNLEdBQUcsQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLO1FBQ3hELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRTtVQUMxQixLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDZjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGFBQWEsVUFBVTtNQUMzQixNQUFNLGlCQUFpQixPQUFPLENBQUMsTUFBTTtRQUNuQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDZixFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ04sTUFBTSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU07UUFDdEIsSUFBSSxNQUFNLE9BQU8sRUFBRTtVQUNqQixtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDN0M7UUFDRCxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7T0FDOUMsQ0FBQyxDQUFDO01BQ0gsTUFBTSxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU07UUFDeEIsY0FBYyxPQUFPLEVBQUUsQ0FBQztPQUN6QixDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLElBQUksc0JBQXNCLENBQUM7SUFDM0IsTUFBTSxRQUFRLFFBQVEsSUFBSSxDQUFDO0lBQzNCLE1BQU0sb0JBQW9CLE9BQU87TUFDL0IsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksWUFBWSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNoRSxDQUFDO0lBQ0YsTUFBTSw2QkFBNkIsT0FBTztNQUN4QyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUM7TUFDaEMsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFO1FBQzNCLE9BQU8sU0FBUyxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksU0FBUyxTQUFTLENBQUMsdUJBQXVCLENBQUMsSUFBSSxTQUFTLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO09BQ3JJLE1BQU07UUFDTCxPQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0YsQ0FBQztJQUNGLE1BQU0sY0FBYyxpQkFBaUI7TUFDbkMsTUFBTSxpQkFBaUIsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDbkQsTUFBTSxTQUFTLEtBQUssVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPO1FBQ3pDLE9BQU8saUJBQWlCLENBQUMsR0FBRyxDQUFDLEtBQUssY0FBYyxHQUFHLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO09BQ2hHLENBQUMsQ0FBQztNQUNILE9BQU8sTUFBTSxLQUFLLElBQUksQ0FBQztLQUN4QixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsVUFBVTtNQUNqQyxJQUFJO1FBQ0YsTUFBTSxPQUFPLFdBQVcsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxNQUFNLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sUUFBUSxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzdELENBQUMsV0FBVztRQUNYLE9BQU8sUUFBUSxLQUFLLENBQUM7T0FDdEI7S0FDRixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsc0JBQXNCO01BQzdDLE1BQU0sU0FBUyxDQUFDLE9BQU8sQ0FBQztNQUN4QixVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDbkIsTUFBTSwyQkFBMkIsZ0JBQWdCO1FBQy9DLElBQUksc0JBQXNCLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxPQUFPLEtBQUssSUFBSSxFQUFFO1VBQzVELE1BQU0sY0FBYyxZQUFZLFFBQVEsQ0FBQyxNQUFNLGFBQWEsRUFBRSxDQUFDLENBQUM7VUFDaEUsRUFBRSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1NBQ25DO09BQ0YsQ0FBQztNQUNGLE1BQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNO1FBQ3pCLE1BQU0sZ0JBQWdCLGFBQWEsY0FBYyxDQUFDO1FBQ2xELElBQUksMEJBQTBCLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRTtVQUN4RCx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDekM7UUFDRCxJQUFJLGFBQWEsS0FBSyxNQUFNLEVBQUU7VUFDNUIsSUFBSSxhQUFhLEVBQUU7WUFDakIsYUFBYSxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsZUFBZSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1dBQzNEO1VBQ0QsYUFBYSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7VUFDaEMsYUFBYSxjQUFjLEdBQUcsTUFBTSxDQUFDO1VBQ3JDLE1BQU0sU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLGVBQWUsYUFBYSxFQUFFLENBQUMsQ0FBQztVQUMzRCxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNwQjtPQUNGLENBQUMsQ0FBQztNQUNILE1BQU0sR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNO1FBQzFCLEtBQUssaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU07VUFDbkMsTUFBTSxnQkFBZ0IsYUFBYSxjQUFjLENBQUM7VUFDbEQsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksYUFBYSxLQUFLLE1BQU0sRUFBRTtZQUNyRix3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7V0FDNUM7VUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLGFBQWEsS0FBSyxNQUFNLEVBQUU7WUFDOUUsTUFBTSxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsZUFBZSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELGFBQWEsY0FBYyxHQUFHLElBQUksQ0FBQztXQUNwQztTQUNGLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztNQUNILElBQUksQ0FBQyxzQkFBc0IsRUFBRTtRQUMzQix5QkFBeUIsS0FBSztVQUM1QixNQUFNLGVBQWUsYUFBYSxhQUFhLENBQUM7VUFDaEQsSUFBSSxZQUFZLEVBQUU7WUFDaEIsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVO2NBQ3ZDLE1BQU0sT0FBTyxNQUFNLENBQUM7Y0FDcEIsSUFBSSxJQUFJLGNBQWMsS0FBSyxRQUFRLEVBQUU7Z0JBQ25DLElBQUksSUFBSSxLQUFLLFFBQVEsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxhQUFhLGNBQWMsS0FBSyxZQUFZLEVBQUU7a0JBQzlHLFlBQVksU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQztrQkFDdkQsYUFBYSxjQUFjLEdBQUcsSUFBSSxDQUFDO2lCQUNwQztlQUNGO2FBQ0YsQ0FBQyxDQUFDO1dBQ0o7U0FDRixDQUFDO1FBQ0YsS0FBSyxLQUFLLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO09BQ3pEO0tBQ0YsQ0FBQztJQUNGLE1BQU0sMkJBQTJCLHNCQUFzQjtNQUNyRCxJQUFJLGFBQWEsY0FBYyxLQUFLLENBQUMsT0FBTyxFQUFFO1FBQzVDLGFBQWEsY0FBYyxHQUFHLElBQUksQ0FBQztPQUNwQztNQUNELElBQUksQ0FBQyxhQUFhLGFBQWEsSUFBSSxzQkFBc0IsRUFBRTtRQUN6RCxLQUFLLE9BQU8sQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFDMUQseUJBQXlCLElBQUksQ0FBQztPQUMvQjtLQUNGLENBQUM7SUFDRixNQUFNLFVBQVUsaUJBQWlCO01BQy9CLGFBQWEsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztNQUN0RSxhQUFhLEdBQUcsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLHdCQUF3QixFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7S0FDbEYsQ0FBQzs7SUFFRixNQUFNLHlCQUF5QixrQkFBa0IsTUFBTSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxNQUFNLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDcEksTUFBTSxtQkFBbUIsT0FBTyxHQUFHLFVBQVUsR0FBRyxRQUFRLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxlQUFlLEVBQUUsR0FBRyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxRQUFRLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO0lBQzFKLE1BQU0sb0JBQW9CLGVBQWUsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRO01BQzFFLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDNUIsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRTtRQUNoQyxPQUFPLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzVCLE1BQU07UUFDTCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEI7S0FDRixDQUFDLENBQUM7SUFDSCxNQUFNLHFCQUFxQixpQkFBaUI7TUFDMUMsaUJBQWlCLENBQUMsWUFBWSxRQUFRLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTztRQUN6RSxPQUFPLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO09BQ2pDLENBQUMsS0FBSyxDQUFDLE1BQU07UUFDWixNQUFNLFVBQVUsVUFBVSxFQUFFLENBQUM7T0FDOUIsRUFBRSxZQUFZLE1BQU0sVUFBVSxPQUFPLENBQUMsUUFBUSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDN0QsQ0FBQztJQUNGLE1BQU0sWUFBWSxRQUFRO01BQ3hCLElBQUksSUFBSSxVQUFVLEVBQUU7UUFDbEIsSUFBSTtVQUNGLElBQUksVUFBVSxFQUFFLENBQUM7U0FDbEIsQ0FBQyxXQUFXO1VBQ1gsSUFBSSxNQUFNLEVBQUUsQ0FBQztTQUNkO09BQ0YsTUFBTTtRQUNMLElBQUksTUFBTSxFQUFFLENBQUM7T0FDZDtLQUNGLENBQUM7SUFDRixNQUFNLGtCQUFrQixPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3ZFLE1BQU0saUJBQWlCLFVBQVUsYUFBYSxDQUFDLE1BQU0sY0FBYyxDQUFDLElBQUksVUFBVSxDQUFDLFlBQVksUUFBUSxDQUFDLE1BQU0sY0FBYyxDQUFDLENBQUMsQ0FBQztJQUMvSCxNQUFNLGlCQUFpQixVQUFVO01BQy9CLE1BQU0sVUFBVSxNQUFNLFFBQVEsRUFBRSxDQUFDO01BQ2pDLE9BQU8sT0FBTyxJQUFJLGVBQWUsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0tBQ2xFLENBQUM7SUFDRixNQUFNLGFBQWEsVUFBVTtNQUMzQixNQUFNLE1BQU0sV0FBVyxDQUFDLFlBQVksUUFBUSxDQUFDLE1BQU0sV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ25FLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLElBQUksSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ3RILENBQUM7SUFDRixNQUFNLFdBQVcsVUFBVSxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNGLE1BQU0scUJBQXFCLFVBQVUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1RSxNQUFNLGNBQWMsVUFBVTtNQUM1QixNQUFNLFlBQVksTUFBTSxVQUFVLENBQUM7TUFDbkMsTUFBTSxPQUFPLE1BQU0sUUFBUSxFQUFFLENBQUM7TUFDOUIsSUFBSSxNQUFNLFNBQVMsT0FBTyxFQUFFLENBQUM7TUFDN0IsTUFBTSxPQUFPLHVCQUF1QixFQUFFLENBQUM7TUFDdkMsSUFBSSxhQUFhLENBQUMsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUN2RCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlO1VBQ2pDLE1BQU0sVUFBVSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7VUFDckMsTUFBTSxXQUFXLENBQUM7U0FDbkIsQ0FBQyxDQUFDO09BQ0o7TUFDRCxNQUFNLHNCQUFzQixzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQ2hGLElBQUksbUJBQW1CLElBQUksTUFBTSxJQUFJLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsRUFBRTtRQUMxRSxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMvQixrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZCLE9BQU87T0FDUjtNQUNELElBQUksQ0FBQyxNQUFNLE9BQU8sRUFBRTtRQUNsQixJQUFJLENBQUMsR0FBRyxRQUFRLFFBQVEsRUFBRSxFQUFFO1VBQzFCLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNqQjtRQUNELE1BQU0sT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO09BQ3pCO01BQ0QsSUFBSSxHQUFHLFFBQVEsVUFBVSxFQUFFLElBQUksTUFBTSxPQUFPLEVBQUU7UUFDNUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hCLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztPQUNqQztNQUNELGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN4QixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsVUFBVSxNQUFNLGNBQWMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sUUFBUSx1QkFBdUI7TUFDbkMsSUFBSSxNQUFNLFFBQVEsRUFBRTtRQUNsQixPQUFPO09BQ1I7TUFDRCxJQUFJLFNBQVMsRUFBRTtRQUNiLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUN4QixNQUFNO1FBQ0wsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQ3JCO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLHFCQUFxQixxQ0FBcUM7TUFDOUQsTUFBTSxZQUFZLEtBQUssR0FBRyxHQUFHLGVBQWUsR0FBRyxHQUFHLGFBQWEsQ0FBQztNQUNoRSxNQUFNLFNBQVMsS0FBSyxHQUFHLEdBQUcsWUFBWSxHQUFHLEdBQUcsVUFBVSxDQUFDO01BQ3ZELE9BQU8sUUFBUSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDMVEsQ0FBQztJQUNGLE1BQU0sV0FBVyxZQUFZLE9BQU8sS0FBSyxLQUFLLGtCQUFrQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxpQkFBaUIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDakosTUFBTSxXQUFXLFlBQVksT0FBTyxLQUFLLEtBQUssa0JBQWtCLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixNQUFNLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDNUksTUFBTSxxQkFBcUIsb0JBQW9CO01BQzdDLE1BQU0sT0FBTyxJQUFJLENBQUM7TUFDbEIsT0FBTyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtRQUNsRCxPQUFPLFFBQVEsR0FBRyxJQUFJLFlBQVksR0FBRyxJQUFJLGdCQUFnQixDQUFDO09BQzNEO01BQ0QsT0FBTyxJQUFJLElBQUksSUFBSSxDQUFDO0tBQ3JCLENBQUM7SUFDRixNQUFNLFVBQVUsZUFBZTtNQUM3QixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1IsT0FBTyxJQUFJLENBQUM7T0FDYjtNQUNELElBQUksaUJBQWlCLEdBQUcsZUFBZSxDQUFDO01BQ3hDLElBQUksZUFBZSxHQUFHLGFBQWEsQ0FBQztNQUNwQyxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUM7TUFDcEMsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDO01BQ2hDLElBQUksT0FBTyxHQUFHLHdCQUF3QixDQUFDO01BQ3ZDLElBQUksQ0FBQyxHQUFHLFVBQVUsRUFBRTtRQUNsQixJQUFJLGNBQWMsS0FBSyxZQUFZLEVBQUU7VUFDbkMsSUFBSSxTQUFTLEdBQUcsV0FBVyxHQUFHLENBQUMsRUFBRTtZQUMvQixJQUFJLGNBQWMsY0FBYyxFQUFFLEVBQUU7Y0FDbEMsT0FBTyxjQUFjLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUMvQztXQUNGO1NBQ0Y7UUFDRCxJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUU7VUFDdEQsSUFBSSxjQUFjLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFDekMsaUJBQWlCLGtCQUFrQixDQUFDLGNBQWMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1dBQ3ZFLE1BQU07WUFDTCxpQkFBaUIsY0FBYyxXQUFXLENBQUM7V0FDNUM7VUFDRCxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUU7WUFDbkIsZUFBZSxrQkFBa0IsQ0FBQyxZQUFZLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO1dBQ3hFLE1BQU07WUFDTCxlQUFlLFlBQVksV0FBVyxDQUFDO1dBQ3hDO1VBQ0QsSUFBSSxjQUFjLElBQUksY0FBYyxLQUFLLFlBQVksRUFBRTtZQUNyRCxPQUFPLGNBQWMsQ0FBQztXQUN2QjtTQUNGO09BQ0Y7TUFDRCxNQUFNLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQztNQUNwRCxPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0tBQ3RDLENBQUM7SUFDRixNQUFNLG9CQUFvQixnQ0FBZ0M7TUFDeEQsTUFBTSxpQkFBaUIsRUFBRSxDQUFDO01BQzFCLE1BQU0sT0FBTyxHQUFHLFFBQVEsRUFBRSxDQUFDO01BQzNCLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxVQUFVLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDO01BQ3pGLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxVQUFVLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDO01BQ3JGLElBQUksS0FBSyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7UUFDM0IsY0FBYyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7T0FDNUI7TUFDRCxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksS0FBSyxLQUFLLEdBQUcsRUFBRTtRQUNqQyxJQUFJLElBQUksQ0FBQztRQUNULE1BQU0sU0FBUyxJQUFJLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUMsT0FBTyxDQUFDLE9BQU8sTUFBTSxLQUFLLEVBQUUsS0FBSyxJQUFJLEtBQUssR0FBRyxFQUFFO1VBQzdDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDckIsY0FBYyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDM0I7U0FDRjtPQUNGO01BQ0QsSUFBSSxHQUFHLElBQUksS0FBSyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO1FBQ3hDLGNBQWMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO09BQzFCO01BQ0QsT0FBTyxjQUFjLENBQUM7S0FDdkIsQ0FBQztJQUNGLE1BQU0sU0FBUyx3QkFBd0IsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLFFBQVEsS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVO01BQ25ILE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNoQyxNQUFNLE1BQU0sR0FBRyxVQUFVLEVBQUUsQ0FBQztNQUM1QixHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDMUIsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUM1QixJQUFJLE9BQU8sRUFBRTtRQUNYLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDckM7TUFDRCxPQUFPLEdBQUcsQ0FBQztLQUNaLENBQUMsQ0FBQyxDQUFDOztJQUVKLE1BQU0sZ0JBQWdCLG9CQUFvQixLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVM7TUFDL0QsTUFBTSxNQUFNLE1BQU0sU0FBUyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztNQUM1RCxPQUFPLEdBQUcsTUFBTSxLQUFLLEtBQUssR0FBRyxHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7S0FDaEQsQ0FBQyxDQUFDOztJQUVILE1BQU0sU0FBUyxXQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pJLE1BQU0sK0JBQStCLE1BQU0sU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLEtBQUssRUFBRSxPQUFPLEtBQUssQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3RJLE1BQU0sMkJBQTJCLFFBQVEsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxPQUFPLENBQUM7SUFDM0csTUFBTSw2QkFBNkI7TUFDakMsS0FBSztNQUNMLElBQUk7S0FDTCxDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsUUFBUTtNQUMvQixNQUFNLG9CQUFvQiw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUM3RCxPQUFPLGlCQUFpQixJQUFJLFVBQVUsQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNsSCxDQUFDOztJQUVGLE1BQU0sUUFBUSxXQUFXLFlBQVksQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUNqRSxNQUFNLE9BQU8sV0FBVyxhQUFhLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDakUsTUFBTSxnQkFBZ0Isc0JBQXNCO01BQzFDLE1BQU0sVUFBVSxXQUFXO1FBQ3pCLE1BQU0sV0FBVyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsS0FBSyxJQUFJLElBQUksUUFBUSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7VUFDN0MsTUFBTSxRQUFRLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUMxQixJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNwQixPQUFPLFFBQVEsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1dBQzdCO1VBQ0QsTUFBTSxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztVQUMzQixJQUFJLEdBQUcsT0FBTyxFQUFFLEVBQUU7WUFDaEIsT0FBTyxHQUFHLENBQUM7V0FDWjtTQUNGO1FBQ0QsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCLENBQUM7TUFDRixPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN2QixDQUFDOztJQUVGLE1BQU0sdUJBQXVCLDBCQUEwQixDQUFDO0lBQ3hELE1BQU0sV0FBVyxtQkFBbUI7TUFDbEMsSUFBSSxNQUFNLENBQUMsWUFBWSxRQUFRLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzNELE1BQU0sVUFBVSxZQUFZLFNBQVMsQ0FBQyw2REFBNkQsRUFBRSxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDdEgsUUFBUSxDQUFDLE9BQU8sRUFBRSxZQUFZLFFBQVEsQ0FBQyxLQUFLLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLEtBQUssV0FBVyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7UUFDOUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRO1VBQ3hCLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxJQUFJLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUM1RCxDQUFDLENBQUM7T0FDSjtLQUNGLENBQUM7SUFDRixNQUFNLFdBQVcsT0FBTyxTQUFTLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDN0QsTUFBTSxTQUFTLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQzVELE1BQU0sV0FBVyxpQkFBaUIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVztNQUM1RCxNQUFNLFdBQVcsTUFBTSxVQUFVLFlBQVksRUFBRSxDQUFDO01BQ2hELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUNoQixNQUFNLFVBQVUsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQzNDLENBQUMsQ0FBQzs7SUFFSCxNQUFNLGFBQWE7TUFDakIsU0FBUyxDQUFDO01BQ1YsWUFBWSxDQUFDO01BQ2IsVUFBVSxDQUFDO01BQ1gsT0FBTyxDQUFDO01BQ1IsWUFBWSxFQUFFO01BQ2Qsc0JBQXNCLEVBQUU7S0FDekIsQ0FBQztJQUNGLE1BQU0sU0FBUyxzQkFBc0I7TUFDbkMsTUFBTSxZQUFZLElBQUksR0FBRyxXQUFXLEdBQUcsWUFBWSxDQUFDO01BQ3BELE1BQU0sY0FBYyxJQUFJLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztNQUMzQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztPQUN4QjtNQUNELElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtRQUNqQixJQUFJLFVBQVUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hDLElBQUksT0FBTyxFQUFFO1VBQ1gsT0FBTyxPQUFPLENBQUM7U0FDaEI7UUFDRCxLQUFLLElBQUksU0FBUyxJQUFJLE9BQU8sRUFBRSxNQUFNLElBQUksTUFBTSxLQUFLLElBQUksRUFBRSxTQUFTLE1BQU0sT0FBTyxFQUFFO1VBQ2hGLFVBQVUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1VBQzlCLElBQUksT0FBTyxFQUFFO1lBQ1gsT0FBTyxPQUFPLENBQUM7V0FDaEI7U0FDRjtPQUNGO01BQ0QsT0FBTyxTQUFTLENBQUM7S0FDbEIsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLFFBQVE7TUFDOUIsSUFBSSxFQUFFLENBQUM7TUFDUCxNQUFNLE9BQU8sQ0FBQyxLQUFLLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztNQUNuRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDM0IsT0FBTyxLQUFLLENBQUM7T0FDZDtNQUNELE1BQU0sYUFBYSxJQUFJLE9BQU8sQ0FBQztNQUMvQixJQUFJLFVBQVUsS0FBSyxVQUFVLEtBQUssS0FBSyxNQUFNLElBQUksVUFBVSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNqRyxPQUFPLEtBQUssQ0FBQztPQUNkO01BQ0QsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsUUFBUTtNQUNoQyxNQUFNLGdCQUFnQixJQUFJLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNqRixPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxXQUFXLElBQUksSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBSSxhQUFhLENBQUM7S0FDcEgsQ0FBQztJQUNGLGNBQWM7TUFDWixhQUFhLGNBQWM7UUFDekIsTUFBTSxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdEQsSUFBSSxLQUFLLEVBQUU7VUFDVCxNQUFNLENBQUMsS0FBSyxFQUFFLHFCQUFxQjtZQUNqQyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7V0FDNUIsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQztPQUNiO01BQ0QsV0FBVyxhQUFhO1FBQ3RCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO1VBQ2QsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO1VBQ3JCLElBQUksV0FBVyxJQUFJLEdBQUcsRUFBRSxDQUFDO1NBQzFCO09BQ0Y7TUFDRCxPQUFPLE9BQU87UUFDWixNQUFNLE9BQU8sSUFBSSxDQUFDO1FBQ2xCLElBQUksSUFBSSxPQUFPLEVBQUU7VUFDZixJQUFJLE9BQU8sRUFBRSxDQUFDO1NBQ2Y7UUFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNkLE9BQU8sSUFBSSxDQUFDO09BQ2I7TUFDRCxJQUFJLGNBQWM7UUFDaEIsTUFBTSxPQUFPLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ25CLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCO2NBQzNCLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN2QixDQUFDLENBQUM7V0FDSjtVQUNELE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLFFBQVEsSUFBSSxXQUFXLENBQUM7UUFDOUIsSUFBSSxLQUFLLEVBQUU7VUFDVCxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDdkIsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO2NBQ2xCLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO2dCQUNyQixPQUFPLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2QixJQUFJLElBQUksS0FBSyxPQUFPLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxFQUFFLEVBQUU7a0JBQ1YsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUU7b0JBQzFCLEtBQUssT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDbkIsT0FBTyxJQUFJLENBQUM7bUJBQ2I7aUJBQ0Y7ZUFDRjtjQUNELE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtjQUNyQixJQUFJLElBQUksS0FBSyxPQUFPLENBQUM7Y0FDckIsT0FBTyxDQUFDLEVBQUUsRUFBRTtnQkFDVixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTtrQkFDMUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2tCQUN2QixNQUFNO2lCQUNQO2VBQ0Y7YUFDRixNQUFNO2NBQ0wsS0FBSyxLQUFLLENBQUM7Z0JBQ1QsSUFBSTtnQkFDSixLQUFLO2VBQ04sQ0FBQyxDQUFDO2FBQ0o7WUFDRCxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDeEIsT0FBTyxJQUFJLENBQUM7V0FDYjtVQUNELE9BQU8sS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDeEI7UUFDRCxPQUFPLFNBQVMsQ0FBQztPQUNsQjtNQUNELEtBQUssR0FBRztRQUNOLE1BQU0sT0FBTyxJQUFJLENBQUM7UUFDbEIsTUFBTSxRQUFRLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLENBQUM7UUFDaEQsTUFBTSxZQUFZLElBQUksV0FBVyxDQUFDO1FBQ2xDLElBQUksU0FBUyxFQUFFO1VBQ2IsTUFBTSxhQUFhLEVBQUUsQ0FBQztVQUN0QixVQUFVLElBQUksR0FBRyxFQUFFLENBQUM7VUFDcEIsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksU0FBUyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNoRCxNQUFNLFdBQVcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLElBQUksUUFBUSxLQUFLLEtBQUssSUFBSSxFQUFFO2NBQzFCLFVBQVUsQ0FBQyxVQUFVLE9BQU8sQ0FBQyxHQUFHO2dCQUM5QixNQUFNLFFBQVEsS0FBSztnQkFDbkIsT0FBTyxRQUFRLE1BQU07ZUFDdEIsQ0FBQztjQUNGLFVBQVUsSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLEdBQUcsUUFBUSxNQUFNLENBQUM7YUFDaEQ7V0FDRjtVQUNELEtBQUssV0FBVyxHQUFHLFVBQVUsQ0FBQztTQUMvQjtRQUNELEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDO1FBQ3pCLE9BQU8sS0FBSyxDQUFDO09BQ2Q7TUFDRCxJQUFJLFVBQVU7UUFDWixNQUFNLE9BQU8sSUFBSSxDQUFDO1FBQ2xCLElBQUksSUFBSSxPQUFPLEVBQUU7VUFDZixJQUFJLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztVQUNsQyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN0QjtRQUNELE9BQU8sSUFBSSxDQUFDO09BQ2I7TUFDRCxNQUFNLEdBQUc7UUFDUCxNQUFNLE9BQU8sSUFBSSxDQUFDO1FBQ2xCLEtBQUssSUFBSSxPQUFPLElBQUksV0FBVyxFQUFFLElBQUksR0FBRztVQUN0QyxNQUFNLE9BQU8sSUFBSSxLQUFLLENBQUM7VUFDdkIsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztVQUM5QixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsSUFBSSxPQUFPLEVBQUUsQ0FBQztPQUNmO01BQ0QsTUFBTSxHQUFHO1FBQ1AsTUFBTSxPQUFPLElBQUksRUFBRSxTQUFTLElBQUksT0FBTyxFQUFFLE9BQU8sSUFBSSxLQUFLLEVBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQztRQUM1RSxJQUFJLE1BQU0sRUFBRTtVQUNWLElBQUksTUFBTSxXQUFXLEtBQUssSUFBSSxFQUFFO1lBQzlCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztZQUN6QixJQUFJLElBQUksRUFBRTtjQUNSLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQzthQUNsQjtXQUNGLE1BQU0sSUFBSSxJQUFJLEVBQUU7WUFDZixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7V0FDbEI7VUFDRCxJQUFJLE1BQU0sVUFBVSxLQUFLLElBQUksRUFBRTtZQUM3QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxJQUFJLEVBQUU7Y0FDUixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7YUFDbEI7V0FDRixNQUFNLElBQUksSUFBSSxFQUFFO1lBQ2YsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO1dBQ2xCO1VBQ0QsSUFBSSxPQUFPLEdBQUcsSUFBSSxLQUFLLEdBQUcsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQzVDO1FBQ0QsT0FBTyxJQUFJLENBQUM7T0FDYjtNQUNELE1BQU0sT0FBTztRQUNYLE1BQU0sT0FBTyxJQUFJLENBQUM7UUFDbEIsSUFBSSxJQUFJLE9BQU8sRUFBRTtVQUNmLElBQUksT0FBTyxFQUFFLENBQUM7U0FDZjtRQUNELE1BQU0sT0FBTyxJQUFJLFVBQVUsQ0FBQztRQUM1QixJQUFJLElBQUksRUFBRTtVQUNSLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztVQUNqQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7VUFDakIsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQ3ZCLE1BQU07VUFDTCxJQUFJLFVBQVUsR0FBRyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUM7U0FDekM7UUFDRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7T0FDYjtNQUNELE1BQU0sd0JBQXdCO1FBQzVCLElBQUksSUFBSSxPQUFPLEVBQUU7VUFDZixJQUFJLE9BQU8sRUFBRSxDQUFDO1NBQ2Y7UUFDRCxNQUFNLFNBQVMsT0FBTyxPQUFPLElBQUksSUFBSSxDQUFDO1FBQ3RDLElBQUksTUFBTSxFQUFFO1VBQ1YsSUFBSSxPQUFPLEtBQUssTUFBTSxXQUFXLEVBQUU7WUFDakMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDO1dBQzFCLE1BQU0sSUFBSSxPQUFPLEtBQUssRUFBRTtZQUN2QixPQUFPLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQztXQUMxQjtVQUNELElBQUksS0FBSyxHQUFHLE9BQU8sS0FBSyxDQUFDO1VBQ3pCLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQztVQUNwQixPQUFPLEtBQUssR0FBRyxJQUFJLENBQUM7U0FDckIsTUFBTTtVQUNMLElBQUksT0FBTyxLQUFLLE1BQU0sVUFBVSxFQUFFO1lBQ2hDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQztXQUN6QixNQUFNLElBQUksT0FBTyxLQUFLLEVBQUU7WUFDdkIsT0FBTyxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUM7V0FDMUI7VUFDRCxJQUFJLEtBQUssR0FBRyxPQUFPLEtBQUssQ0FBQztVQUN6QixJQUFJLEtBQUssR0FBRyxPQUFPLENBQUM7VUFDcEIsT0FBTyxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQ3JCO1FBQ0QsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDO09BQ2I7TUFDRCxNQUFNLE9BQU87UUFDWCxNQUFNLE9BQU8sSUFBSSxDQUFDO1FBQ2xCLE1BQU0sYUFBYSxFQUFFLENBQUM7UUFDdEIsS0FBSyxJQUFJLE9BQU8sSUFBSSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRTtVQUNoRSxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtZQUN0QixVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUN2QjtTQUNGO1FBQ0QsT0FBTyxVQUFVLENBQUM7T0FDbkI7TUFDRCxRQUFRLEdBQUc7UUFDVCxNQUFNLE9BQU8sSUFBSSxDQUFDO1FBQ2xCLE1BQU0sYUFBYSxFQUFFLENBQUM7UUFDdEIsS0FBSyxJQUFJLE9BQU8sSUFBSSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sSUFBSSxLQUFLLEVBQUU7VUFDdkQsVUFBVSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdkI7UUFDRCxPQUFPLFVBQVUsQ0FBQztPQUNuQjtNQUNELEtBQUssR0FBRztRQUNOLE1BQU0sT0FBTyxJQUFJLENBQUM7UUFDbEIsSUFBSSxJQUFJLFdBQVcsRUFBRTtVQUNuQixNQUFNLFFBQVEsRUFBRSxDQUFDO1VBQ2pCLEtBQUssSUFBSSxPQUFPLElBQUksV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDaEUsS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDbEI7VUFDRCxJQUFJLElBQUksS0FBSyxPQUFPLENBQUM7VUFDckIsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUNWLE1BQU0sT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsSUFBSSxPQUFPLEdBQUcsSUFBSSxXQUFXLEdBQUcsSUFBSSxVQUFVLEdBQUcsSUFBSSxLQUFLLEdBQUcsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO1dBQy9FO1NBQ0Y7UUFDRCxJQUFJLFdBQVcsR0FBRyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUM7T0FDYjtNQUNELE9BQU8sV0FBVyxhQUFhLEVBQUUsYUFBYTtRQUM1QyxJQUFJLEVBQUUsQ0FBQztRQUNQLE1BQU0sT0FBTyxJQUFJLENBQUM7UUFDbEIsSUFBSSxPQUFPLElBQUksV0FBVyxDQUFDO1FBQzNCLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUU7VUFDM0IsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELElBQUksSUFBSSxFQUFFO1VBQ1IsR0FBRztZQUNELElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO2NBQ25CLElBQUksSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtnQkFDL0IsU0FBUztlQUNWO2NBQ0QsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtnQkFDdkIsT0FBTyxLQUFLLENBQUM7ZUFDZDtjQUNELElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzNCLE9BQU8sS0FBSyxDQUFDO2VBQ2Q7YUFDRjtZQUNELElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO2NBQ25CLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFDRCxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRTtjQUM3QyxPQUFPLEtBQUssQ0FBQzthQUNkO1lBQ0QsSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksT0FBTyxLQUFLLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7Y0FDN0ksT0FBTyxLQUFLLENBQUM7YUFDZDtZQUNELElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtjQUNoQyxPQUFPLEtBQUssQ0FBQzthQUNkO1dBQ0YsUUFBUSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDckM7UUFDRCxPQUFPLElBQUksQ0FBQztPQUNiO01BQ0QsSUFBSSxPQUFPO1FBQ1QsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztPQUNqQztLQUNGOztJQUVELE1BQU0sdUJBQXVCLHNCQUFzQiwwQ0FBMEMsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDNUgsTUFBTSxzQkFBc0IsZ0JBQWdCLGFBQWEsQ0FBQyxLQUFLO01BQzdELE1BQU0sU0FBUyxJQUFJLFlBQVksRUFBRSxDQUFDO01BQ2xDLElBQUksTUFBTSxRQUFRLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRTtRQUN6RixNQUFNLGFBQWEsTUFBTSxRQUFRLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sTUFBTSxRQUFRLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO09BQ3hDLE1BQU07UUFDTCxJQUFJLE9BQU8sRUFBRTtVQUNYLE1BQU0sV0FBVyxNQUFNLFFBQVEsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7VUFDakQsT0FBTyxRQUFRLEtBQUssQ0FBQyxDQUFDLEdBQUcsUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDO1NBQ25ELE1BQU07VUFDTCxNQUFNLG1CQUFtQixRQUFRLENBQUM7VUFDbEMsZ0JBQWdCLFVBQVUsR0FBRyxVQUFVLENBQUM7VUFDeEMsTUFBTSxRQUFRLGdCQUFnQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDMUMsT0FBTyxLQUFLLEdBQUcsS0FBSyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUM7U0FDOUQ7T0FDRjtLQUNGLENBQUM7SUFDRixNQUFNLDBCQUEwQiw4QkFBOEI7TUFDNUQsTUFBTSxpQkFBaUIsZ0NBQWdDLENBQUM7TUFDeEQsTUFBTSxlQUFlLDJFQUEyRSxDQUFDO01BQ2pHLE1BQU0sZUFBZSxNQUFNLGdCQUFnQixFQUFFLENBQUM7TUFDOUMsSUFBSSxRQUFRLENBQUMsRUFBRSxRQUFRLFVBQVUsQ0FBQztNQUNsQyxPQUFPLEtBQUssS0FBSyxDQUFDLEVBQUU7UUFDbEIsY0FBYyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxFQUFFO1VBQ1gsTUFBTSxhQUFhLGNBQWMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQzdDLElBQUksVUFBVSxLQUFLLElBQUksRUFBRTtZQUN2QixPQUFPLEtBQUssQ0FBQztXQUNkLE1BQU0sSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO1lBQ2hDLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRTtjQUNuQyxRQUFRLG1CQUFtQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxNQUFNLEdBQUcsS0FBSyxPQUFPLENBQUMsQ0FBQzthQUMzRSxNQUFNO2NBQ0wsUUFBUSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQy9EO1lBQ0QsTUFBTTtXQUNQLE1BQU07WUFDTCxZQUFZLFVBQVUsR0FBRyxjQUFjLFVBQVUsQ0FBQztZQUNsRCxNQUFNLFdBQVcsWUFBWSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxNQUFNLEtBQUssY0FBYyxVQUFVLEVBQUU7Y0FDbkUsU0FBUzthQUNWO1lBQ0QsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO2NBQ3pCLFNBQVMsQ0FBQyxDQUFDO2FBQ1osTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtjQUM5QyxTQUFTLENBQUMsQ0FBQzthQUNaO1lBQ0QsUUFBUSxjQUFjLFVBQVUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN0RCxNQUFNO1dBQ1A7U0FDRjtPQUNGO01BQ0QsT0FBTyxLQUFLLENBQUM7S0FDZCxDQUFDO0lBQ0YsTUFBTSxhQUFhLHFCQUFxQjtNQUN0QyxNQUFNLG9CQUFvQixJQUFJLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxTQUFTLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ3BHLE9BQU8sSUFBSSxRQUFRLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDNUMsQ0FBQztJQUNGLE1BQU0sZUFBZSxzQkFBc0I7TUFDekMsTUFBTSxpQkFBaUIseUNBQXlDLENBQUM7TUFDakUsTUFBTSxTQUFTLFVBQVUsT0FBTyxDQUFDO01BQ2pDLElBQUksVUFBVSxVQUFVLENBQUMsVUFBVSxhQUFhLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUMxRCxNQUFNLGVBQWUsTUFBTSxnQkFBZ0IsRUFBRSxDQUFDO01BQzlDLElBQUksT0FBTyxDQUFDO01BQ1osT0FBTyxVQUFVLGNBQWMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQzdDLE1BQU0sUUFBUSxjQUFjLFVBQVUsQ0FBQztRQUN2QyxNQUFNLGNBQWMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDdEMsSUFBSSxXQUFXLENBQUM7UUFDaEIsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7VUFDNUIsY0FBYyxLQUFLLENBQUM7U0FDckIsTUFBTTtVQUNMLGNBQWMsdUJBQXVCLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztTQUMvRDtRQUNELFVBQVUsT0FBTyxVQUFVLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxXQUFXLENBQUMsR0FBRyxPQUFPLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyRixjQUFjLFVBQVUsR0FBRyxLQUFLLEdBQUcsV0FBVyxDQUFDO09BQ2hEO01BQ0QsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDeEIsQ0FBQztJQUNGLE1BQU0sZUFBZSxZQUFZLENBQUM7O0lBRWxDLE1BQU0sdUJBQXVCLFVBQVU7TUFDckMsTUFBTSxnQkFBZ0IsV0FBVyxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO01BQzlELE1BQU0sQ0FBQyxhQUFhLEVBQUUsUUFBUTtRQUM1QixNQUFNLGFBQWEsS0FBSyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2pELElBQUksVUFBVSxLQUFLLEtBQUssRUFBRTtVQUN4QixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDaEIsTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUN2QixRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7VUFDakQsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hCLE1BQU07VUFDTCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDZDtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLG9CQUFvQixVQUFVO01BQ2xDLE1BQU0sU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQzVDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUztRQUN0QixRQUFRLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQ3pCLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxvQkFBb0Isa0JBQWtCO01BQzFDLE1BQU0sWUFBWSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUM3QyxNQUFNLGNBQWMsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLEdBQUcsU0FBUyxFQUFFLDhDQUE4QyxHQUFHLFNBQVMsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLENBQUM7TUFDMUksT0FBTyxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDdEMsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLGtCQUFrQjtNQUM1QyxNQUFNLE1BQU0sTUFBTSxPQUFPLEVBQUUsQ0FBQztNQUM1QixNQUFNLE1BQU0sV0FBVyxDQUFDLFlBQVksUUFBUSxDQUFDLE1BQU0sUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ2hFLE1BQU0sZUFBZSxZQUFZLFFBQVEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDdEQsS0FBSyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztNQUM3QyxNQUFNLENBQUMsWUFBWSxFQUFFO1FBQ25CLFVBQVUsT0FBTztRQUNqQixNQUFNLFlBQVk7UUFDbEIsS0FBSyxHQUFHO09BQ1QsQ0FBQyxDQUFDO01BQ0gsS0FBSyxDQUFDLFlBQVksRUFBRSxJQUFJLFVBQVUsQ0FBQyxDQUFDO01BQ3BDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFDO01BQ25DLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO01BQ2hDLE1BQU0sT0FBTyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUN0QyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO01BQzdCLE1BQU0sVUFBVSxNQUFNLENBQUMsWUFBWSxJQUFJLFVBQVUsQ0FBQyxDQUFDO01BQ25ELFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztNQUN2QixPQUFPLE9BQU8sQ0FBQztLQUNoQixDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsd0JBQXdCO01BQ2pELElBQUksT0FBTyxDQUFDO01BQ1osSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLEVBQUU7UUFDekIsVUFBVSxLQUFLLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxXQUFXLEVBQUUsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDO09BQ3ZFLE1BQU0sSUFBSSxJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUU7UUFDakMsVUFBVSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDN0MsTUFBTSxJQUFJLElBQUksT0FBTyxLQUFLLE1BQU0sRUFBRTtRQUNqQyxVQUFVLE1BQU0sV0FBVyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO09BQ25ELE1BQU07UUFDTCxVQUFVLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxNQUFNLFdBQVcsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO09BQzlFO01BQ0QsTUFBTSxhQUFhLElBQUksT0FBTyxLQUFLLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDOUYsT0FBTyxVQUFVLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQztLQUN4RSxDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsa0JBQWtCLFFBQVEsS0FBSyxDQUFDLE1BQU0sUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLE9BQU8sS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsa0JBQWtCLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDOztJQUVuTSxNQUFNLFlBQVksS0FBSyxRQUFRLENBQUM7SUFDaEMsTUFBTSxTQUFTLFlBQVk7TUFDekIsTUFBTSxPQUFPLEVBQUUsQ0FBQztNQUNoQixXQUFXLFFBQVEsSUFBSSxFQUFFLENBQUM7TUFDMUIsTUFBTSxTQUFTLFFBQVEsT0FBTyxDQUFDO01BQy9CLE1BQU0sZUFBZSxTQUFTLENBQUMsUUFBUSxjQUFjLElBQUksRUFBRSxDQUFDLENBQUM7TUFDN0QsTUFBTSxjQUFjLFNBQVMsQ0FBQyxRQUFRLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQztNQUMzRCxNQUFNLFNBQVMsUUFBUSxjQUFjLENBQUMsUUFBUSxnQkFBZ0IsSUFBSSxLQUFLLEVBQUUsUUFBUSxTQUFTLENBQUMsQ0FBQztNQUM1RixNQUFNLGFBQWEsUUFBUSxlQUFlLEtBQUssT0FBTyxDQUFDO01BQ3ZELE9BQU87UUFDTCxPQUFPLHdCQUF3QjtVQUM3QixJQUFJLE1BQU0sSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFO1lBQ25ELE1BQU0sUUFBUSxJQUFJLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDcEMsSUFBSSxLQUFLLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtjQUN0QyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNqQjtXQUNGO1VBQ0QsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1VBQ3JCLElBQUksS0FBSyxFQUFFO1lBQ1QsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtjQUM1QyxNQUFNLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQ2hFO1dBQ0Y7VUFDRCxJQUFJLENBQUMsS0FBSyxJQUFJLFVBQVUsRUFBRTtZQUN4QixJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7V0FDekIsTUFBTTtZQUNMLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQztXQUMzQjtVQUNELElBQUksS0FBSyxJQUFJLE1BQU0sSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFO1lBQzNELE1BQU0sUUFBUSxJQUFJLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDcEMsSUFBSSxLQUFLLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtjQUN0QyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNqQjtXQUNGO1NBQ0Y7UUFDRCxLQUFLLFFBQVE7VUFDWCxJQUFJLEtBQUssQ0FBQztVQUNWLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7VUFDM0IsSUFBSSxNQUFNLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRTtZQUNsRCxRQUFRLElBQUksQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM5QixJQUFJLEtBQUssT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO2NBQ3RDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pCO1dBQ0Y7U0FDRjtRQUNELE1BQU0sZUFBZTtVQUNuQixJQUFJLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRTtZQUNuQixJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUMvQztTQUNGO1FBQ0QsT0FBTyxRQUFRO1VBQ2IsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNyQztRQUNELFNBQVMsUUFBUTtVQUNmLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDaEM7UUFDRCxJQUFJLGdCQUFnQjtVQUNsQixJQUFJLElBQUksRUFBRTtZQUNSLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztXQUNoRCxNQUFNO1lBQ0wsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztXQUM3QjtVQUNELElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDakI7U0FDRjtRQUNELFNBQVMsUUFBUTtVQUNmLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDdkQ7UUFDRCxPQUFPLE1BQU07VUFDWCxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7U0FDakI7UUFDRCxZQUFZLE1BQU07VUFDaEIsT0FBTyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztTQUN6QztPQUNGLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0saUJBQWlCLENBQUMsV0FBVyxFQUFFLEVBQUUsU0FBUyxNQUFNLEVBQUUsS0FBSztNQUMzRCxNQUFNLFNBQVMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQ2hDLFFBQVEsU0FBUyxHQUFHLFVBQVUsSUFBSSxRQUFRLEdBQUcsUUFBUSxTQUFTLEdBQUcsSUFBSSxDQUFDO01BQ3RFLE1BQU0sWUFBWSxRQUFRO1FBQ3hCLE1BQU0sV0FBVyxRQUFRLFNBQVMsQ0FBQztRQUNuQyxNQUFNLFdBQVc7VUFDZixHQUFHLFFBQVE7WUFDVCxJQUFJLEVBQUUsQ0FBQztZQUNQLE1BQU0sS0FBSyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQztXQUM5RTtVQUNELEdBQUcsUUFBUTtZQUNULElBQUksRUFBRSxDQUFDO1lBQ1AsTUFBTSxRQUFRLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1dBQ3ZFO1VBQ0QsR0FBRyxRQUFRO1lBQ1QsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQztXQUNsQztVQUNELElBQUksUUFBUTtZQUNWLElBQUksRUFBRSxDQUFDO1lBQ1AsTUFBTSxRQUFRLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1dBQ3ZFO1VBQ0QsR0FBRyxRQUFRO1lBQ1QsSUFBSSxFQUFFLENBQUM7WUFDUCxNQUFNLE1BQU0sQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7V0FDckU7VUFDRCxJQUFJLFFBQVE7WUFDVixJQUFJLFdBQVcsSUFBSSxDQUFDO1lBQ3BCLElBQUksV0FBVyxRQUFRLFdBQVcsRUFBRTtjQUNsQyxHQUFHO2dCQUNELElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztlQUNoQixRQUFRLFdBQVcsUUFBUSxLQUFLLEVBQUU7YUFDcEM7V0FDRjtTQUNGLENBQUM7UUFDRixNQUFNLE1BQU0sRUFBRSxDQUFDO1FBQ2YsTUFBTSxPQUFPLFFBQVE7VUFDbkIsSUFBSSxFQUFFLENBQUM7VUFDUCxNQUFNLFVBQVUsUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7VUFDcEMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQztZQUN2QixNQUFNLFVBQVUsSUFBSSxJQUFJLE1BQU0sZ0JBQWdCLEVBQUUsQ0FBQztZQUNqRCxJQUFJLFFBQVEsSUFBSSxXQUFXLENBQUM7WUFDNUIsSUFBSSxRQUFRLElBQUksS0FBSyxJQUFJLEtBQUssT0FBTyxHQUFHLENBQUMsRUFBRTtjQUN6QyxNQUFNLGNBQWMsRUFBRSxDQUFDO2NBQ3ZCLFdBQVcsSUFBSSxHQUFHLEVBQUUsQ0FBQztjQUNyQixNQUFNLGNBQWMsTUFBTSxlQUFlLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztjQUNyRCxJQUFJLFdBQVcsRUFBRTtnQkFDZixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxXQUFXLGdCQUFnQixPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtrQkFDbEUsTUFBTSxXQUFXLFdBQVcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7a0JBQ2hELElBQUksUUFBUSxJQUFJLEtBQUssSUFBSSxFQUFFO29CQUN6QixNQUFNLFlBQVksS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3RDLFdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFNBQVMsQ0FBQztvQkFDdEMsV0FBVyxLQUFLLENBQUM7c0JBQ2YsTUFBTSxRQUFRO3NCQUNkLE9BQU8sU0FBUztxQkFDakIsQ0FBQyxDQUFDO21CQUNKO2lCQUNGO2dCQUNELEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7a0JBQzVDLE1BQU0sV0FBVyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztrQkFDL0IsSUFBSSxFQUFFLFFBQVEsSUFBSSxXQUFXLElBQUksQ0FBQyxFQUFFO29CQUNsQyxNQUFNLFlBQVksS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3RDLFdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFNBQVMsQ0FBQztvQkFDdEMsV0FBVyxLQUFLLENBQUM7c0JBQ2YsTUFBTSxRQUFRO3NCQUNkLE9BQU8sU0FBUztxQkFDakIsQ0FBQyxDQUFDO21CQUNKO2lCQUNGO2dCQUNELFFBQVEsV0FBVyxDQUFDO2VBQ3JCO2FBQ0Y7WUFDRCxNQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxPQUFPLEVBQUU7Y0FDWixJQUFJLFFBQVEsSUFBSSxXQUFXLENBQUM7Y0FDNUIsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLFVBQVUsS0FBSyxLQUFLLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFO2tCQUMzSSxNQUFNLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQ3pCO2dCQUNELEdBQUc7a0JBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNiLFFBQVEsUUFBUSxLQUFLLEtBQUssRUFBRTtlQUM5QjtjQUNELE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2xCO1dBQ0YsTUFBTTtZQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUNmO1NBQ0YsQ0FBQztRQUNGLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxNQUFNLEVBQUU7VUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ1osTUFBTSxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtVQUMxQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkIsTUFBTTtVQUNMLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNwQjtRQUNELE9BQU8sTUFBTSxXQUFXLEVBQUUsQ0FBQztPQUM1QixDQUFDO01BQ0YsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO0tBQ3RCLENBQUM7O0lBRUYsTUFBTSx1QkFBdUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUN2QyxDQUFDLE1BQU07TUFDTCxNQUFNLDBCQUEwQjtRQUM5QixRQUFRO1FBQ1IsYUFBYTtRQUNiLGNBQWM7UUFDZCxZQUFZO1FBQ1osZUFBZTtRQUNmLFNBQVM7UUFDVCxjQUFjO1FBQ2QsZUFBZTtRQUNmLGFBQWE7UUFDYixnQkFBZ0I7UUFDaEIsUUFBUTtRQUNSLGNBQWM7UUFDZCxjQUFjO1FBQ2QsY0FBYztRQUNkLFlBQVk7UUFDWix1QkFBdUI7UUFDdkIsaUJBQWlCO1FBQ2pCLGtCQUFrQjtRQUNsQixrQkFBa0I7UUFDbEIsbUJBQW1CO1FBQ25CLHFCQUFxQjtRQUNyQixtQkFBbUI7UUFDbkIsaUJBQWlCO1FBQ2pCLE9BQU87UUFDUCxVQUFVO1FBQ1YsTUFBTTtRQUNOLE9BQU87UUFDUCxLQUFLO1FBQ0wsUUFBUTtRQUNSLFNBQVM7UUFDVCxTQUFTO1FBQ1QsV0FBVztRQUNYLE9BQU87UUFDUCxXQUFXO1FBQ1gsV0FBVztRQUNYLFFBQVE7UUFDUixZQUFZO1FBQ1osWUFBWTtRQUNaLFVBQVU7UUFDVixZQUFZO1FBQ1osWUFBWTtRQUNaLGVBQWU7UUFDZixnQkFBZ0I7UUFDaEIsWUFBWTtRQUNaLGtCQUFrQjtRQUNsQixxQkFBcUI7UUFDckIscUJBQXFCO1FBQ3JCLDRCQUE0QjtPQUM3QixDQUFDO01BQ0YsTUFBTSxDQUFDLHVCQUF1QixFQUFFLFNBQVM7UUFDdkMsb0JBQW9CLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztPQUNqQyxDQUFDLENBQUM7S0FDSixHQUFHLENBQUM7SUFDTCxNQUFNLHNCQUFzQjtNQUMxQixNQUFNO01BQ04saUJBQWlCO01BQ2pCLGVBQWU7S0FDaEIsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLGVBQWUsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEYsTUFBTSx3QkFBd0IsU0FBUyxvQkFBb0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sdUJBQXVCLGVBQWUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDckgsTUFBTSx3QkFBd0IsVUFBVSxRQUFRLENBQUMsTUFBTSxFQUFFLFNBQVMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLFFBQVEsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEksTUFBTSxtQkFBbUIsMkJBQTJCO01BQ2xELE1BQU0saUJBQWlCLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDaEQsTUFBTSx1QkFBdUIsYUFBYSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztNQUM1RCxNQUFNLGdCQUFnQixRQUFRO1FBQzVCLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNYLE1BQU0sWUFBWSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUN0RixNQUFNLGNBQWMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDOUYsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLFNBQVMsS0FBSyxXQUFXLENBQUM7T0FDdEYsQ0FBQztNQUNGLE9BQU8sTUFBTSxDQUFDLGNBQWMsRUFBRSxpQkFBaUI7UUFDN0MsTUFBTSxhQUFhLFNBQVMsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLElBQUksS0FBSyxhQUFhLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLElBQUksVUFBVSxDQUFDLG1CQUFtQixDQUFDLEVBQUU7VUFDeEUsTUFBTSxnQkFBZ0IscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztVQUNsRSxPQUFPLE1BQU0sQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7U0FDN0MsTUFBTTtVQUNMLE9BQU8sYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3JDO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLFNBQVMsNkJBQTZCLFFBQVEsS0FBSyxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUTtNQUN6RyxNQUFNLFFBQVEsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUMvQixPQUFPLFNBQVMsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztLQUMxRCxDQUFDLENBQUM7SUFDSCxNQUFNLGdCQUFnQixLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN4RCxNQUFNLGVBQWUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDeEQsTUFBTSxjQUFjLE9BQU87TUFDekIsTUFBTSxZQUFZLEdBQUcsVUFBVSxFQUFFLENBQUM7TUFDbEMsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssU0FBUyxLQUFLLE9BQU8sS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLFNBQVMsS0FBSyxDQUFDLElBQUksZUFBZSxlQUFlLENBQUMsU0FBUyxXQUFXLENBQUMsQ0FBQyxDQUFDO0tBQ2pKLENBQUM7SUFDRixNQUFNLHlCQUF5Qix1QkFBdUIsT0FBTyw0QkFBNEIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNJLE1BQU0sZUFBZSxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLEtBQUssT0FBTyxDQUFDO0lBQ3JHLE1BQU0sWUFBWSxRQUFRLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hGLE1BQU0scUJBQXFCLHNCQUFzQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN0RSxNQUFNLG9CQUFvQixzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDdEUsTUFBTSxnQkFBZ0Isc0JBQXNCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlELE1BQU0sZUFBZSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDOUQsTUFBTSxnQkFBZ0Isc0JBQXNCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlELE1BQU0sZUFBZSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDOUQsTUFBTSwrQkFBK0Isc0JBQXNCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzdFLE1BQU0sOEJBQThCLHNCQUFzQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQzs7SUFFN0UsTUFBTSxXQUFXLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsTUFBTSxlQUFlLDRCQUE0QjtNQUMvQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDekIsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPO1VBQ3RDLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDeEMsQ0FBQyxDQUFDLENBQUM7T0FDTCxNQUFNO1FBQ0wsT0FBTyxFQUFFLENBQUM7T0FDWDtLQUNGLENBQUM7SUFDRixNQUFNLFVBQVUsaUJBQWlCLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xFLE1BQU0saUJBQWlCLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDOztJQUU3RSxNQUFNLCtCQUErQix5QkFBeUIsY0FBYyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQy9HLE1BQU0sb0JBQW9CLGVBQWUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDeEgsTUFBTSwrQkFBK0Isd0JBQXdCLDRCQUE0QixDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRSxZQUFZLFFBQVEsQ0FBQyxNQUFNLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeFUsTUFBTSxvQkFBb0Isd0JBQXdCLGlCQUFpQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sNEJBQTRCLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxVQUFVLDRCQUE0QixDQUFDLE9BQU8sRUFBRSxNQUFNLElBQUksRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNuUixNQUFNLG1CQUFtQixLQUFLLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekQsTUFBTSxpQkFBaUIsS0FBSyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RELE1BQU0sZ0JBQWdCLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRSxNQUFNLGVBQWUsS0FBSyxDQUFDLDRCQUE0QixFQUFFLElBQUksQ0FBQyxDQUFDOztJQUUvRCxNQUFNLFNBQVMsT0FBTyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sU0FBUyx3QkFBd0I7TUFDckMsTUFBTSxlQUFlLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxRQUFRLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQ3RHLE1BQU0sUUFBUSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUM3QyxPQUFPLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUM3RCxDQUFDO0lBQ0YsTUFBTSxlQUFlLGVBQWUsc0JBQXNCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkgsTUFBTSxZQUFZLGVBQWUsMEJBQTBCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckgsTUFBTSxpQkFBaUIsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1QyxNQUFNLGFBQWEsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzs7SUFFdkMsTUFBTSxtQkFBbUIsT0FBTyxhQUFhLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDO0lBQ3hHLE1BQU0sa0JBQWtCLGVBQWU7TUFDckMsTUFBTSxlQUFlLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxRQUFRLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQ3RHLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDdkMsQ0FBQztJQUNGLE1BQU0saUJBQWlCLGVBQWU7TUFDcEMsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN6QixPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUMxQixNQUFNO1FBQ0wsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksWUFBWSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO09BQ3BHO0tBQ0YsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLGVBQWU7TUFDbkMsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN6QixPQUFPLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUMzQixNQUFNO1FBQ0wsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksWUFBWSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO09BQ3RHO0tBQ0YsQ0FBQztJQUNGLE1BQU0sYUFBYSxTQUFTLFVBQVUsQ0FBQztNQUNyQyxLQUFLO01BQ0wsVUFBVTtLQUNYLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDVixNQUFNLFVBQVUsT0FBTyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sU0FBUyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakosTUFBTSxzQkFBc0IsZUFBZSxZQUFZLENBQUMsSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2hGLE1BQU0sZ0JBQWdCLGVBQWUsWUFBWSxDQUFDLElBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMxRSxNQUFNLG1CQUFtQixlQUFlLG1CQUFtQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNsTixNQUFNLGFBQWEsUUFBUSxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RHLE1BQU0sb0JBQW9CLHFCQUFxQixhQUFhO01BQzFELE9BQU8sVUFBVSxDQUFDLElBQUksYUFBYSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDcEUsQ0FBQztJQUNGLE1BQU0sbUJBQW1CLGVBQWU7TUFDdEMsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ3ZELE1BQU0saUJBQWlCLGlCQUFpQixDQUFDLElBQUksSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQzNELE9BQU8sR0FBRyxRQUFRLEVBQUUsS0FBSyxjQUFjLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxPQUFPLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUNsRyxDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsZUFBZTtNQUNyQyxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDdkQsTUFBTSxpQkFBaUIsaUJBQWlCLENBQUMsSUFBSSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDM0QsT0FBTyxHQUFHLFVBQVUsRUFBRSxLQUFLLGNBQWMsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLElBQUksY0FBYyxDQUFDLE9BQU8sVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3BHLENBQUM7SUFDRixNQUFNLGtCQUFrQixlQUFlO01BQ3JDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2hCLE9BQU8sS0FBSyxDQUFDO09BQ2QsTUFBTTtRQUNMLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztPQUM3RjtLQUNGLENBQUM7SUFDRixNQUFNLG9CQUFvQixlQUFlO01BQ3ZDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2hCLE9BQU8sS0FBSyxDQUFDO09BQ2QsTUFBTTtRQUNMLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7T0FDbko7S0FDRixDQUFDO0lBQ0YsTUFBTSxZQUFZLE9BQU87TUFDdkIsTUFBTSxZQUFZLEdBQUcsVUFBVSxFQUFFLENBQUM7TUFDbEMsTUFBTSxTQUFTLEdBQUcsT0FBTyxFQUFFLENBQUM7TUFDNUIsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksTUFBTSxHQUFHLFNBQVMsS0FBSyxPQUFPLEVBQUU7UUFDekQsT0FBTyxhQUFhLENBQUMsU0FBUyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztPQUM3QyxNQUFNO1FBQ0wsT0FBTyxHQUFHLENBQUM7T0FDWjtLQUNGLENBQUM7SUFDRixNQUFNLHFCQUFxQixlQUFlO01BQ3hDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2hCLE9BQU8sS0FBSyxDQUFDO09BQ2QsTUFBTTtRQUNMLE9BQU8sY0FBYyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7T0FDbko7S0FDRixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsZUFBZSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksa0JBQWtCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlHLE1BQU0sV0FBVyxrQkFBa0IsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDL0QsTUFBTSxpQkFBaUIsa0JBQWtCLFlBQVksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sVUFBVSxPQUFPO01BQ3JCLE1BQU0sWUFBWSxHQUFHLFVBQVUsRUFBRSxDQUFDO01BQ2xDLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNoRSxDQUFDO0lBQ0YsTUFBTSxzQkFBc0IsUUFBUTtNQUNsQyxNQUFNLFFBQVEsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDN0IsT0FBTyxLQUFLLENBQUMsS0FBSyxFQUFFLFlBQVk7UUFDOUIsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxPQUFPLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtVQUN0RyxPQUFPLEdBQUcsQ0FBQztTQUNaLE1BQU07VUFDTCxPQUFPLEdBQUcsQ0FBQztTQUNaO09BQ0YsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsMEJBQTBCO01BQ3JELE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQztNQUN2QixNQUFNLFdBQVcsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztNQUN4QyxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxFQUFFO1FBQ3BFLElBQUksS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQztPQUNiLE1BQU0sSUFBSSxRQUFRLElBQUksY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUU7UUFDbkYsSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDO09BQ2IsTUFBTTtRQUNMLE9BQU8sS0FBSyxDQUFDO09BQ2Q7S0FDRixDQUFDO0lBQ0YsTUFBTSxrQ0FBa0MsUUFBUTtNQUM5QyxNQUFNLE9BQU8sSUFBSSxLQUFLLENBQUM7TUFDdkIsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO01BQzFDLElBQUksT0FBTyxLQUFLLElBQUksRUFBRTtRQUNwQixJQUFJLEtBQUssR0FBRyxPQUFPLENBQUM7UUFDcEIsT0FBTyxJQUFJLENBQUM7T0FDYixNQUFNO1FBQ0wsT0FBTyxLQUFLLENBQUM7T0FDZDtLQUNGLENBQUM7SUFDRixNQUFNLHFCQUFxQiwwQkFBMEI7TUFDbkQsTUFBTSxPQUFPLElBQUksS0FBSyxDQUFDO01BQ3ZCLE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ3JELElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUU7UUFDakYsSUFBSSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDO09BQ2IsTUFBTSxJQUFJLFFBQVEsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRTtRQUNqRyxJQUFJLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7T0FDYixNQUFNO1FBQ0wsT0FBTyxLQUFLLENBQUM7T0FDZDtLQUNGLENBQUM7SUFDRixNQUFNLGlCQUFpQixlQUFlO01BQ3BDLE1BQU0sWUFBWSxHQUFHLFVBQVUsRUFBRSxDQUFDO01BQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDeEIsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCO01BQ0QsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDaEIsTUFBTSxhQUFhLG9CQUFvQixDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksK0JBQStCLENBQUMsU0FBUyxDQUFDLElBQUksa0JBQWtCLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1SixPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7T0FDaEMsTUFBTSxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7UUFDbkMsTUFBTSxhQUFhLG9CQUFvQixDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksa0JBQWtCLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RyxPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7T0FDaEMsTUFBTTtRQUNMLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN4QjtLQUNGLENBQUM7SUFDRixNQUFNLHlCQUF5QixVQUFVO01BQ3ZDLE1BQU0sT0FBTyxZQUFZLFFBQVEsQ0FBQyxNQUFNLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDcEQsSUFBSSxNQUFNLFVBQVUsWUFBWSxFQUFFLEVBQUU7UUFDbEMsY0FBYyxDQUFDLElBQUksRUFBRSxhQUFhLGVBQWUsQ0FBQyxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTztVQUN4RixNQUFNLFVBQVUsT0FBTyxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUN4QyxDQUFDLENBQUM7T0FDSjtLQUNGLENBQUM7O0lBRUYsTUFBTSxjQUFjLHlCQUF5QjtNQUMzQyxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7UUFDZixPQUFPO09BQ1I7TUFDRCxNQUFNLE1BQU0sWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDdkMsTUFBTSxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNuRCxNQUFNLGFBQWEsSUFBSSxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDO01BQzNELE1BQU0saUJBQWlCLE1BQU0sR0FBRyxLQUFLLElBQUksSUFBSSxLQUFLLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQztNQUM3SCxNQUFNLG1CQUFtQixNQUFNLEtBQUssQ0FBQyxJQUFJLGlCQUFpQixDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDekYsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0tBQy9GLENBQUM7SUFDRixNQUFNLDJCQUEyQixrQkFBa0I7TUFDakQsTUFBTSxVQUFVLElBQUksS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDeEMsTUFBTSxrQkFBa0IsT0FBTyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7TUFDL0QsV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7S0FDNUMsQ0FBQztJQUNGLE1BQU0sNEJBQTRCLGtCQUFrQjtNQUNsRCxNQUFNLFVBQVUsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDM0MsTUFBTSxrQkFBa0IsT0FBTyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7TUFDL0QsV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLEdBQUcsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0tBQzlELENBQUM7SUFDRixNQUFNLGlCQUFpQiwwQ0FBMEMsY0FBYyxJQUFJLEtBQUs7TUFDdEYsTUFBTSxtQkFBbUIsS0FBSyxDQUFDLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQztNQUNyRCxNQUFNLFVBQVUsV0FBVyxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUM7TUFDbEQsTUFBTSxhQUFhLFdBQVcsR0FBRyxRQUFRLEdBQUcsUUFBUSxDQUFDO01BQ3JELElBQUksV0FBVyxFQUFFO1FBQ2YsT0FBTyxXQUFXLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQztPQUNyQyxNQUFNO1FBQ0wsT0FBTyxXQUFXLENBQUMsQ0FBQyxFQUFFLFVBQVUsS0FBSyxDQUFDLENBQUM7T0FDeEM7TUFDRCxRQUFRLENBQUMsWUFBWSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztNQUMzQyxJQUFJLG1CQUFtQixFQUFFO1FBQ3ZCLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO09BQ3JEO01BQ0QsT0FBTyxPQUFPLENBQUM7S0FDaEIsQ0FBQzs7SUFFRixNQUFNLGtCQUFrQixjQUFjO01BQ3BDLE1BQU0sWUFBWSxHQUFHLFVBQVUsRUFBRSxDQUFDO01BQ2xDLE1BQU0sU0FBUyxHQUFHLE9BQU8sRUFBRSxDQUFDO01BQzVCLE9BQU8sQ0FBQyxhQUFhLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxTQUFTLEtBQUssR0FBRyxXQUFXLElBQUksTUFBTSxHQUFHLGFBQWEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUMxSCxDQUFDO0lBQ0YsTUFBTSxhQUFhLGNBQWMsZUFBZSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsR0FBRyxVQUFVLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNwSCxNQUFNLGtCQUFrQixRQUFRLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLGFBQWEsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JHLE1BQU0sZUFBZSxRQUFRLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksS0FBSyxPQUFPLENBQUMsR0FBRyxhQUFhLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoSCxNQUFNLGtDQUFrQyxPQUFPO01BQzdDLElBQUksa0JBQWtCLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxFQUFFO1FBQzNDLE9BQU8sUUFBUSxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO09BQ3pELE1BQU07UUFDTCxPQUFPLEdBQUcsZ0JBQWdCLEdBQUcsY0FBYyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3BGO0tBQ0YsQ0FBQztJQUNGLE1BQU0sOEJBQThCLE9BQU87TUFDekMsSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLFlBQVksQ0FBQyxFQUFFO1FBQ3ZDLE9BQU8sUUFBUSxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQztPQUN4RCxNQUFNO1FBQ0wsT0FBTyxHQUFHLFlBQVksR0FBRyxlQUFlLENBQUMsR0FBRyxZQUFZLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQzdFO0tBQ0YsQ0FBQztJQUNGLE1BQU0sb0NBQW9DLHNCQUFzQjtNQUM5RCxPQUFPLFFBQVEsS0FBSyxDQUFDLEdBQUcsZ0JBQWdCLEdBQUcsR0FBRyxnQkFBZ0IsR0FBRyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxZQUFZLENBQUMsV0FBVyxFQUFFLGFBQWEsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sWUFBWSxDQUFDLFdBQVcsRUFBRSxhQUFhLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDek4sQ0FBQztJQUNGLE1BQU0sbUNBQW1DLHNCQUFzQixZQUFZLENBQUMsV0FBVyxFQUFFLGFBQWEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLFlBQVksQ0FBQyxXQUFXLEVBQUUsYUFBYSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZMLE1BQU0sNkJBQTZCLHNCQUFzQiwrQkFBK0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sMkJBQTJCLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0saUNBQWlDLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDak4sTUFBTSwyQkFBMkIsc0JBQXNCLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSwrQkFBK0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxnQ0FBZ0MsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5TSxNQUFNLG9CQUFvQiwrQkFBK0IsT0FBTyxHQUFHLHdCQUF3QixDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsR0FBRywwQkFBMEIsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDN0osTUFBTSxvQ0FBb0MsK0JBQStCLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEosTUFBTSxpQkFBaUIsMEJBQTBCO01BQy9DLEdBQUcsS0FBSyxDQUFDLE1BQU07UUFDYixNQUFNLE1BQU0sRUFBRSxDQUFDO09BQ2hCLEVBQUUsT0FBTztRQUNSLE1BQU0sVUFBVSxPQUFPLENBQUMsR0FBRyxRQUFRLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztPQUNqRCxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxZQUFZLFdBQVcsT0FBTyxHQUFHLElBQUksS0FBSyxPQUFPLENBQUM7SUFDeEQsTUFBTSxVQUFVLGlCQUFpQixHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sT0FBTyxpQkFBaUIsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNGLE1BQU0saUJBQWlCLE9BQU87TUFDNUIsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDbEIsTUFBTSxLQUFLLFlBQVksU0FBUyxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDNUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsQixPQUFPLFFBQVEsS0FBSyxDQUFDLGFBQWEsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztPQUNwRCxNQUFNO1FBQ0wsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sbUJBQW1CLGlEQUFpRDtNQUN4RSxNQUFNLGNBQWMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDdEQsTUFBTSxjQUFjLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQ3RELFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNkLE9BQU8sS0FBSyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCO1FBQzdFLE1BQU0sV0FBVyxJQUFJLElBQUksRUFBRSxXQUFXLElBQUksSUFBSSxDQUFDO1FBQy9DLE1BQU0sU0FBUyxRQUFRLEtBQUssT0FBTyxDQUFDO1FBQ3BDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDeEQsT0FBTyxHQUFHLFVBQVUsRUFBRSxLQUFLLFFBQVEsR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztPQUM3RSxDQUFDLFFBQVEsQ0FBQyxNQUFNO1FBQ2YsSUFBSSxtQkFBbUIsRUFBRTtVQUN2QixXQUFXLEtBQUssQ0FBQyxPQUFPLHlCQUF5QixDQUFDLEdBQUcsSUFBSSxFQUFFLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDO1VBQzVFLFdBQVcsS0FBSyxDQUFDLE9BQU8sd0JBQXdCLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMvRDtRQUNELE9BQU8saUJBQWlCLENBQUM7T0FDMUIsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sa0JBQWtCLHFCQUFxQixLQUFLLENBQUMsTUFBTSxPQUFPLHNCQUFzQixFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDekcsTUFBTSxrQkFBa0IsdUJBQXVCLFlBQVksSUFBSSxLQUFLO01BQ2xFLE1BQU0saUJBQWlCLGlDQUFpQyxDQUFDLE9BQU8sRUFBRSxNQUFNLFFBQVEsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7TUFDN0YsTUFBTSxjQUFjLFVBQVUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxTQUFTLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDekYsTUFBTSwyQkFBMkIsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLGNBQWMsRUFBRSxlQUFlLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDckcsSUFBSSxNQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sUUFBUSxFQUFFLENBQUMsRUFBRTtRQUN4QyxNQUFNLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QixNQUFNLFVBQVUsa0JBQWtCLEVBQUUsQ0FBQztPQUN0QyxNQUFNO1FBQ0wsV0FBVyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNO1VBQzFDLElBQUksU0FBUyxFQUFFO1lBQ2IsY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztXQUMzRDtTQUNGLEVBQUUsV0FBVztVQUNaLElBQUksU0FBUyxFQUFFO1lBQ2IsY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztXQUN6RDtTQUNGLENBQUMsQ0FBQztPQUNKO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLFlBQVksMkNBQTJDLENBQUM7SUFDOUQsTUFBTSxlQUFlLFFBQVEsU0FBUyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7O0lBRWxELE1BQU0saUJBQWlCLGlCQUFpQixJQUFJLENBQUMsWUFBWSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUseUJBQXlCLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sT0FBTyxFQUFFLEdBQUcsQ0FBQyxJQUFJLE1BQU0sSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEwsTUFBTSxRQUFRLFdBQVc7TUFDdkIsSUFBSSxFQUFFLENBQUM7TUFDUCxPQUFPLFFBQVEsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksWUFBWSxDQUFDLENBQUMsS0FBSyxPQUFPLFlBQVksTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztLQUNwSixDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsbUNBQW1DLFFBQVEsQ0FBQyxRQUFRLElBQUksV0FBVyxDQUFDLEdBQUcsVUFBVSxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQy9JLE1BQU0saUJBQWlCLG1DQUFtQztNQUN4RCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztNQUNqRSxPQUFPLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25ELENBQUM7SUFDRixNQUFNLHFCQUFxQiw0QkFBNEI7TUFDckQsTUFBTSxTQUFTLGdCQUFnQixDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztNQUNqRCxNQUFNLFNBQVMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQ2pELE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sS0FBSyxNQUFNLENBQUM7S0FDbkQsQ0FBQztJQUNGLE1BQU0sV0FBVyxPQUFPLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEUsTUFBTSxvQkFBb0Isa0JBQWtCO01BQzFDLE1BQU0sWUFBWSxHQUFHLFVBQVUsRUFBRSxFQUFFLFNBQVMsR0FBRyxPQUFPLEVBQUUsQ0FBQztNQUN6RCxJQUFJLE9BQU8sRUFBRTtRQUNYLElBQUksc0JBQXNCLENBQUMsU0FBUyxDQUFDLEVBQUU7VUFDckMsSUFBSSxRQUFRLENBQUMsU0FBUyxZQUFZLENBQUMsRUFBRTtZQUNuQyxPQUFPLGFBQWEsQ0FBQyxTQUFTLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztXQUNoRCxNQUFNO1lBQ0wsT0FBTyxhQUFhLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztXQUN2QztTQUNGLE1BQU07VUFDTCxPQUFPLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsU0FBUyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7U0FDekU7T0FDRixNQUFNO1FBQ0wsSUFBSSxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsRUFBRTtVQUNyQyxJQUFJLFFBQVEsQ0FBQyxTQUFTLGdCQUFnQixDQUFDLEVBQUU7WUFDdkMsT0FBTyxhQUFhLENBQUMsU0FBUyxnQkFBZ0IsRUFBRSxTQUFTLGdCQUFnQixLQUFLLE9BQU8sQ0FBQyxDQUFDO1dBQ3hGLE1BQU07WUFDTCxPQUFPLGFBQWEsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1dBQ3hDO1NBQ0YsTUFBTTtVQUNMLE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxTQUFTLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztTQUN4RTtPQUNGO0tBQ0YsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN6RCxNQUFNLHFCQUFxQixLQUFLLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7O0lBRTNELE1BQU0sK0JBQStCLHFCQUFxQjtNQUN4RCxNQUFNLGVBQWUsS0FBSyxDQUFDLHlCQUF5QixFQUFFLENBQUM7TUFDdkQsTUFBTSxHQUFHLENBQUMsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ25ELE1BQU0sT0FBTyxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUNyQyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxZQUFZLENBQUMsQ0FBQztLQUMvQyxDQUFDO0lBQ0YsTUFBTSwwQkFBMEIsVUFBVTtNQUN4QyxNQUFNLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUM5QixDQUFDO0lBQ0YsTUFBTSwwQkFBMEIsVUFBVSw0QkFBNEIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDekYsTUFBTSxpQ0FBaUMsVUFBVSw0QkFBNEIsQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDdkcsTUFBTSxlQUFlLFlBQVksT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4RSxNQUFNLHdCQUF3QixXQUFXLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekYsTUFBTSxtQkFBbUIsbUJBQW1CO01BQzFDLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRTtRQUMzQixPQUFPLFNBQVMsQ0FBQyxHQUFHLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7T0FDdEUsTUFBTTtRQUNMLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN4QjtLQUNGLENBQUM7SUFDRixNQUFNLGdCQUFnQixTQUFTLGdCQUFnQixJQUFJLEtBQUs7TUFDdEQsSUFBSSxNQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sUUFBUSxFQUFFLENBQUMsRUFBRTtRQUN4QyxNQUFNLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztPQUN6RDtLQUNGLENBQUM7SUFDRixNQUFNLGtDQUFrQywyQkFBMkIsS0FBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsdUJBQXVCO01BQ3pJLE1BQU0scUJBQXFCLGlCQUFpQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztNQUM3RCxNQUFNLG9CQUFvQixpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDNUQsTUFBTSxvQkFBb0IsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQzVELElBQUksT0FBTyxFQUFFO1FBQ1gsT0FBTyxZQUFZLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxXQUFXLE9BQU8sUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksT0FBTyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO09BQzFJLE1BQU07UUFDTCxPQUFPLFlBQVksQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFdBQVcsT0FBTyxRQUFRLENBQUMsa0JBQWtCLENBQUMsSUFBSSxPQUFPLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7T0FDMUk7S0FDRixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNmLE1BQU0sY0FBYyxRQUFRO01BQzFCLE1BQU0sUUFBUSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN0RSxPQUFPLEtBQUssS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ25FLENBQUM7SUFDRixNQUFNLHNCQUFzQixvQkFBb0IsZ0JBQWdCLElBQUksS0FBSztNQUN2RSxJQUFJLEVBQUUsQ0FBQztNQUNQLEdBQUcsZUFBZSxFQUFFLENBQUM7TUFDckIsTUFBTSxXQUFXLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQy9DLE1BQU0sWUFBWSxZQUFZLFFBQVEsQ0FBQyxDQUFDLEtBQUssTUFBTSxJQUFJLFVBQVUsQ0FBQyxRQUFRLElBQUksRUFBRSxNQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztNQUNoSixJQUFJLFNBQVMsSUFBSSxLQUFLLE1BQU0sUUFBUSxFQUFFLEVBQUU7UUFDdEMsYUFBYSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztPQUN0QyxNQUFNLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQy9CLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdCLElBQUksYUFBYSxFQUFFO1VBQ2pCLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN0RDtPQUNGO01BQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDeEIsTUFBTSx5QkFBeUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hGLE1BQU0sQ0FBQyxzQkFBc0IsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFFBQVE7VUFDOUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6RSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDaEI7U0FDRixDQUFDLENBQUM7T0FDSjtLQUNGLENBQUM7O0lBRUYsTUFBTSxvQkFBb0IsUUFBUSxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkQsTUFBTSxnQkFBZ0IsU0FBUyxXQUFXLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNELE1BQU0sMkJBQTJCLGlCQUFpQjtNQUNoRCxNQUFNLFdBQVcsUUFBUSxlQUFlLENBQUMsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDN0UsTUFBTSxhQUFhLFFBQVEsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDO01BQ2hELE1BQU0sV0FBVyxRQUFRLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQztNQUM1QyxNQUFNLGlCQUFpQixVQUFVLE9BQU8sRUFBRSxDQUFDO01BQzNDLE1BQU0sZUFBZSxRQUFRLE9BQU8sRUFBRSxDQUFDO01BQ3ZDLE1BQU0sY0FBYyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQ2pFLE1BQU0sZUFBZSxDQUFDLFdBQVcsSUFBSSxjQUFjLElBQUksWUFBWSxDQUFDO01BQ3BFLE9BQU87UUFDTCxVQUFVO1FBQ1YsUUFBUTtRQUNSLGNBQWM7UUFDZCxZQUFZO1FBQ1osV0FBVztRQUNYLFlBQVk7T0FDYixDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLGVBQWUsaUJBQWlCO01BQ3BDLEtBQUs7TUFDTCxHQUFHO0tBQ0osQ0FBQyxDQUFDO0lBQ0gsTUFBTSxpQkFBaUIsd0JBQXdCO01BQzdDLEdBQUc7TUFDSCxLQUFLO01BQ0wsS0FBSztLQUNOLENBQUMsQ0FBQztJQUNILE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQztNQUNoQztRQUNFLGlCQUFpQjtVQUNmLEtBQUs7VUFDTCxNQUFNO1NBQ1A7T0FDRjtNQUNELEVBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFO01BQ3hCO1FBQ0UsY0FBYztVQUNaLE9BQU87VUFDUCxnQkFBZ0I7U0FDakI7T0FDRjtNQUNEO1FBQ0UsWUFBWTtVQUNWLGlCQUFpQjtVQUNqQixlQUFlO1VBQ2YsWUFBWTtTQUNiO09BQ0Y7S0FDRixDQUFDLENBQUM7SUFDSCxNQUFNLG1CQUFtQix1QkFBdUIsU0FBUyxDQUFDLFlBQVksUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1RyxNQUFNLG9CQUFvQixXQUFXLENBQUMsRUFBRSxDQUFDLE9BQU8sTUFBTSxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUM7SUFDckUsTUFBTSxzQkFBc0IscUJBQXFCLGVBQWUsQ0FBQyxPQUFPLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixlQUFlLENBQUMsT0FBTyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5TyxNQUFNLG9CQUFvQixxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTO01BQ2pJLE1BQU0sT0FBTyxLQUFLLElBQUksS0FBSyxDQUFDO01BQzVCLE9BQU8sSUFBSSxPQUFPLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxPQUFPLEtBQUssQ0FBQyxDQUFDO0tBQ3hELENBQUMsQ0FBQztJQUNILE1BQU0sYUFBYSxpQkFBaUI7TUFDbEMsTUFBTSxZQUFZLGdCQUFnQixDQUFDLEdBQUcsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQy9ELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFHLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztNQUMzRCxPQUFPLEtBQUssQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0tBQ2hELENBQUM7SUFDRixNQUFNLDZCQUE2QixVQUFVLGFBQWEsZUFBZSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxZQUFZLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxTCxNQUFNLDJCQUEyQixVQUFVLFdBQVcsZUFBZSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxZQUFZLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwTCxNQUFNLCtCQUErQixVQUFVLFdBQVcsbUJBQW1CLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxjQUFjLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xLLE1BQU0scUJBQXFCLDRDQUE0QztNQUNyRSxJQUFJLEdBQUcsVUFBVSxJQUFJLENBQUMsT0FBTyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRTtRQUN2RCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEIsTUFBTSxJQUFJLGdCQUFnQixZQUFZLEVBQUU7UUFDdkMsTUFBTSxxQkFBcUIsT0FBTyxLQUFLLENBQUMsNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM5RSxPQUFPLFFBQVEsS0FBSyxDQUFDO1VBQ25CLE9BQU8sa0JBQWtCO1VBQ3pCLEtBQUssa0JBQWtCO1NBQ3hCLENBQUMsQ0FBQztPQUNKLE1BQU07UUFDTCxNQUFNLFlBQVksZ0JBQWdCLENBQUMsR0FBRyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0QsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEdBQUcsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNELE1BQU0sc0JBQXNCLFNBQVMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzFILE1BQU0sb0JBQW9CLE9BQU8sS0FBSyxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3BILE9BQU8sUUFBUSxLQUFLLENBQUM7VUFDbkIsT0FBTyxtQkFBbUI7VUFDMUIsS0FBSyxpQkFBaUI7U0FDdkIsQ0FBQyxDQUFDO09BQ0o7S0FDRixDQUFDO0lBQ0YsTUFBTSxlQUFlLGlCQUFpQixXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sbUJBQW1CLGtCQUFrQixLQUFLLENBQUMsWUFBWSxDQUFDLGNBQWMsTUFBTSxFQUFFLGNBQWMsSUFBSSxNQUFNLENBQUMsRUFBRSxZQUFZLENBQUMsY0FBYyxNQUFNLEVBQUUsY0FBYyxJQUFJLElBQUksQ0FBQyxFQUFFLDBCQUEwQixjQUFjLE1BQU0sTUFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzUCxNQUFNLG1DQUFtQyw2QkFBNkIsVUFBVSxPQUFPLENBQUMsV0FBVyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksc0JBQXNCLENBQUMsT0FBTyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyTCxNQUFNLGdCQUFnQiwyQkFBMkI7TUFDL0MsTUFBTSxzQkFBc0IsR0FBRyxnQkFBZ0IsQ0FBQztNQUNoRCxNQUFNLGtCQUFrQixHQUFHLFdBQVcsRUFBRSxDQUFDO01BQ3pDLFVBQVUsS0FBSyxDQUFDLFNBQVMsZUFBZSxjQUFjLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ25FLFFBQVEsS0FBSyxDQUFDLFNBQVMsZUFBZSxhQUFhLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ2hFLE9BQU8sZUFBZSxDQUFDO0tBQ3hCLENBQUM7SUFDRixNQUFNLG9CQUFvQiw0Q0FBNEMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxLQUFLLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0I7TUFDNUwsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUM7TUFDdkMsTUFBTSxnQkFBZ0IsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUNqRSxJQUFJLFdBQVcsSUFBSSxjQUFjLE1BQU0sT0FBTyxLQUFLLGFBQWEsT0FBTyxFQUFFO1FBQ3ZFLE9BQU8sUUFBUSxLQUFLLENBQUMsWUFBWSxVQUFVLENBQUMsY0FBYyxNQUFNLENBQUMsQ0FBQyxDQUFDO09BQ3BFLE1BQU0sSUFBSSxhQUFhLE9BQU8sR0FBRyxDQUFDLEVBQUU7UUFDbkMsSUFBSSxXQUFXLEVBQUU7VUFDZixPQUFPLFFBQVEsS0FBSyxDQUFDLFlBQVksYUFBYSxDQUFDLGFBQWEsRUFBRSxRQUFRLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNqRixNQUFNO1VBQ0wsTUFBTSxrQkFBa0IsYUFBYSxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1VBQzdELE9BQU8sUUFBUSxLQUFLLENBQUMsWUFBWSxhQUFhLENBQUMsYUFBYSxFQUFFLFFBQVEsS0FBSyxDQUFDO1lBQzFFLEdBQUcsZ0JBQWdCO1lBQ25CLEtBQUssZUFBZTtXQUNyQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ047T0FDRixNQUFNO1FBQ0wsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxtQkFBbUIsNENBQTRDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFlBQVksS0FBSztNQUNySixNQUFNLDBCQUEwQixLQUFLLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDdkUsTUFBTSx3QkFBd0IsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQ25FLElBQUksdUJBQXVCLE9BQU8sR0FBRyxDQUFDLElBQUkscUJBQXFCLE9BQU8sR0FBRyxDQUFDLEVBQUU7UUFDMUUsTUFBTSxrQkFBa0IsYUFBYSxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzdELE9BQU8sUUFBUSxLQUFLLENBQUMsWUFBWSxXQUFXLENBQUMsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztPQUNoSCxNQUFNO1FBQ0wsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxxQkFBcUIsZUFBZTtNQUN4QyxNQUFNLFNBQVMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDdkMsTUFBTSxhQUFhLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDM0MsTUFBTSxtQkFBbUIsd0JBQXdCLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQy9ELElBQUksZ0NBQWdDLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRTtRQUM3RCxPQUFPLFVBQVUsSUFBSSxDQUFDLFdBQVcsWUFBWSxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDO09BQ3BGLE1BQU0sSUFBSSxnQkFBZ0IsYUFBYSxFQUFFO1FBQ3hDLE9BQU8sZ0JBQWdCLENBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztPQUNwRSxNQUFNO1FBQ0wsT0FBTyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQ3JFO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLGFBQWEsU0FBUyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVE7TUFDaEQsUUFBUSxDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO01BQ2xDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3pCLENBQUMsQ0FBQztJQUNILE1BQU0sa0JBQWtCLHVCQUF1QixRQUFRLEtBQUssQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxNQUFNLElBQUksUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksUUFBUSxDQUFDLENBQUM7SUFDNUksTUFBTSxtQkFBbUIsc0NBQXNDO01BQzdELFVBQVUsS0FBSyxDQUFDLFNBQVM7UUFDdkIsSUFBSSxZQUFZLEVBQUU7VUFDaEIsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2pCLE1BQU07VUFDTCxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztVQUN6QixNQUFNLFVBQVUsa0JBQWtCLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDbEQ7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSwwQkFBMEIsK0NBQStDO01BQzdFLE1BQU0saUJBQWlCLEdBQUcsV0FBVyxFQUFFLENBQUM7TUFDeEMsSUFBSSxzQkFBc0IsRUFBRTtRQUMxQixjQUFjLFNBQVMsQ0FBQyxHQUFHLGVBQWUsRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFDO1FBQzdELGNBQWMsWUFBWSxDQUFDLElBQUksSUFBSSxVQUFVLENBQUMsQ0FBQztPQUNoRCxNQUFNO1FBQ0wsY0FBYyxlQUFlLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxDQUFDO1FBQ25ELGNBQWMsT0FBTyxDQUFDLEdBQUcsYUFBYSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUM7T0FDeEQ7TUFDRCxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsTUFBTSxFQUFFLENBQUMsQ0FBQztLQUNsRixDQUFDO0lBQ0YsTUFBTSxrQ0FBa0MsVUFBVTtNQUNoRCxNQUFNLGdCQUFnQixrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNqRCxNQUFNLGVBQWUsWUFBWSxRQUFRLENBQUMsTUFBTSxVQUFVLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDdEUsSUFBSSxhQUFhLENBQUMsWUFBWSxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUU7UUFDOUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3pELE1BQU07UUFDTCxNQUFNLFVBQVUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ2pDO01BQ0QsSUFBSSxhQUFhLE9BQU8sR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRTtRQUNyRixLQUFLLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxDQUFDO09BQy9DO0tBQ0YsQ0FBQztJQUNGLE1BQU0sd0JBQXdCLG1DQUFtQyxRQUFRLEtBQUssQ0FBQyxNQUFNO01BQ25GLE1BQU0sWUFBWSxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7TUFDNUMsTUFBTSxlQUFlLGNBQWMsS0FBSyxDQUFDLENBQUMscUJBQXFCLEtBQUs7UUFDbEUsTUFBTSxlQUFlLGVBQWUsQ0FBQyxNQUFNLEVBQUUsY0FBYyxHQUFHLEdBQUcsYUFBYSxHQUFHLEdBQUcsZUFBZSxDQUFDLENBQUM7UUFDckcsR0FBRyxlQUFlLEVBQUUsQ0FBQztRQUNyQixnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLFlBQVksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDekUsTUFBTSxlQUFlLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUU7VUFDNUIsT0FBTyxRQUFRLEtBQUssQ0FBQyxjQUFjLEdBQUcsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM1RSxNQUFNO1VBQ0wsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO1NBQ3hCO09BQ0YsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDaEIsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO01BQ3pCLCtCQUErQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3pDLENBQUMsQ0FBQztJQUNILE1BQU0sdUJBQXVCLHdEQUF3RCxRQUFRLEtBQUssQ0FBQyxNQUFNO01BQ3ZHLE1BQU0sTUFBTSxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7TUFDdEMsTUFBTSxZQUFZLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNyQyxNQUFNLFVBQVUsYUFBYSxDQUFDLGFBQWEsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ3hELHVCQUF1QixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ3RELHVCQUF1QixDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQ3JELE1BQU0seUJBQXlCLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxlQUFlLEdBQUcsZUFBZSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDakcsTUFBTSx1QkFBdUIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLGFBQWEsR0FBRyxhQUFhLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUM3RixVQUFVLENBQUMsc0JBQXNCLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7TUFDaEUsVUFBVSxlQUFlLEVBQUUsQ0FBQztNQUM1QiwrQkFBK0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN6QyxDQUFDLENBQUM7SUFDSCxNQUFNLHFCQUFxQixvQkFBb0IsZ0JBQWdCLElBQUksS0FBSyxRQUFRLEtBQUssQ0FBQyxNQUFNO01BQzFGLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0tBQ3ZELENBQUMsQ0FBQztJQUNILE1BQU0scUJBQXFCLG1CQUFtQixRQUFRLEtBQUssQ0FBQyxNQUFNLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDekcsTUFBTSxrQkFBa0IsMEJBQTBCLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoUSxNQUFNLHFCQUFxQixxQkFBcUIsWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5RSxNQUFNLG1CQUFtQixvQ0FBb0MsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRSxXQUFXLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ25NLE1BQU0sZ0JBQWdCLHFDQUFxQztNQUN6RCxNQUFNLFdBQVcsWUFBWSxRQUFRLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQ3hELE1BQU0sTUFBTSxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7TUFDdEMsT0FBTyxhQUFhLE9BQU8sS0FBSyxDQUFDLEdBQUcscUJBQXFCLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxRQUFRLEtBQUssRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDdkosQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLGtCQUFrQixNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUM1RixNQUFNLG1CQUFtQixrQkFBa0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDbEcsTUFBTSxxQkFBcUIsOENBQThDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sYUFBYSxDQUFDLE9BQU8sRUFBRSxZQUFZLFFBQVEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxHQUFHLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2USxNQUFNLGVBQWUsaUJBQWlCLFFBQVEsS0FBSyxDQUFDLE1BQU07TUFDeEQsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDdkIsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ2hELENBQUMsQ0FBQztJQUNILE1BQU0sd0JBQXdCLG9DQUFvQyxlQUFlLENBQUMsV0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsY0FBYyxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLE9BQU8sR0FBRyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2USxNQUFNLG9CQUFvQixpQkFBaUIsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyRSxNQUFNLHVCQUF1Qiw4QkFBOEIsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFlBQVksUUFBUSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxhQUFhLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqTixNQUFNLDJCQUEyQixpREFBaUQsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDblQsTUFBTSxtQkFBbUIsd0NBQXdDO01BQy9ELE1BQU0sT0FBTyxhQUFhLGVBQWUsQ0FBQyxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUMsQ0FBQztNQUNyRSxPQUFPLGFBQWEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxZQUFZLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQy9LLENBQUM7SUFDRixNQUFNLHFCQUFxQiwyQ0FBMkM7TUFDcEUsTUFBTSxPQUFPLGFBQWEsZUFBZSxDQUFDLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQyxDQUFDO01BQ3JFLE9BQU8sU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEdBQUcsd0JBQXdCLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzNJLENBQUM7SUFDRixNQUFNLGNBQWMsa0JBQWtCLE9BQU8sR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZGLE1BQU0sdUJBQXVCLHFCQUFxQjtNQUNoRCxNQUFNLFVBQVUsYUFBYSxlQUFlLENBQUMsTUFBTSxVQUFVLE9BQU8sRUFBRSxDQUFDLENBQUM7TUFDeEUsT0FBTyxXQUFXLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxRQUFRLEVBQUUsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ25JLENBQUM7SUFDRixNQUFNLGdCQUFnQiwrQkFBK0I7TUFDbkQsTUFBTSxVQUFVLFlBQVksUUFBUSxDQUFDLE1BQU0sUUFBUSxFQUFFLENBQUMsQ0FBQztNQUN2RCxPQUFPLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxlQUFlLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7S0FDMVAsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLHFCQUFxQjtNQUM3QyxNQUFNLFdBQVcsWUFBWSxRQUFRLENBQUMsTUFBTSxVQUFVLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ3ZFLE1BQU0sUUFBUSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUN6QyxPQUFPLE1BQU0sVUFBVSxZQUFZLEVBQUUsSUFBSSxLQUFLLE9BQU8sS0FBSyxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDakosQ0FBQzs7SUFFRixNQUFNLDJCQUEyQixnQkFBZ0I7TUFDL0MsSUFBSSxXQUFXLElBQUksQ0FBQztNQUNwQixPQUFPLFFBQVEsSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFO1FBQ3BDLElBQUksdUJBQXVCLENBQUMsUUFBUSxDQUFDLElBQUksd0JBQXdCLENBQUMsUUFBUSxDQUFDLEVBQUU7VUFDM0UsT0FBTyxRQUFRLENBQUM7U0FDakI7UUFDRCxXQUFXLFFBQVEsV0FBVyxDQUFDO09BQ2hDO01BQ0QsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDOztJQUVGLE1BQU0sNkJBQTZCO01BQ2pDLGFBQWE7TUFDYixXQUFXO01BQ1gsYUFBYTtNQUNiLGVBQWU7TUFDZixHQUFHO0tBQ0osQ0FBQztJQUNGLE1BQU0sU0FBUyxLQUFLLEtBQUssQ0FBQztJQUMxQixNQUFNLGVBQWUsVUFBVTtNQUM3QixNQUFNLE1BQU0sTUFBTSxJQUFJLENBQUM7TUFDdkIsTUFBTSxxQkFBcUIsSUFBSSxHQUFHLENBQUMsTUFBTSxXQUFXLGFBQWEsRUFBRSxDQUFDLENBQUM7TUFDckUsTUFBTSxVQUFVLGtCQUFrQjtRQUNoQyxJQUFJLEtBQUssU0FBUyxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssU0FBUyxLQUFLLEtBQUssU0FBUyxFQUFFO1VBQzFFLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxNQUFNLGFBQWEsUUFBUTtVQUN6QixNQUFNLFVBQVUsRUFBRSxDQUFDO1VBQ25CLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRO1lBQ25DLE1BQU0sT0FBTyxJQUFJLFNBQVMsWUFBWSxFQUFFLENBQUM7WUFDekMsSUFBSSxJQUFJLEtBQUssT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUU7Y0FDbEQsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzthQUMzQztXQUNGLENBQUMsQ0FBQztVQUNILE9BQU8sT0FBTyxDQUFDO1NBQ2hCLENBQUM7UUFDRixNQUFNLGlCQUFpQixnQkFBZ0I7VUFDckMsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLEVBQUU7WUFDdkIsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO2NBQ3JCLE1BQU0sUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Y0FDekIsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3RCLE9BQU8sS0FBSyxDQUFDO2VBQ2Q7Y0FDRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLEVBQUU7Z0JBQ3hCLE9BQU8sS0FBSyxDQUFDO2VBQ2Q7Y0FDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNuQjtXQUNGO1VBQ0QsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLEVBQUU7WUFDdkIsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO2NBQ3JCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7V0FDRjtVQUNELE9BQU8sSUFBSSxDQUFDO1NBQ2IsQ0FBQztRQUNGLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRTtVQUM1QyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUN6RCxPQUFPLEtBQUssQ0FBQztXQUNkO1VBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxHQUFHLFdBQVcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2pILE9BQU8sS0FBSyxDQUFDO1dBQ2Q7U0FDRjtRQUNELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO09BQzdELENBQUM7TUFDRixNQUFNLHNCQUFzQixpQkFBaUIsTUFBTSxDQUFDLDBCQUEwQixFQUFFLFNBQVMsVUFBVSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLGtCQUFrQixJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7TUFDcEssT0FBTztRQUNMLE9BQU87UUFDUCxtQkFBbUI7T0FDcEIsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxXQUFXLGNBQWM7TUFDN0IsSUFBSSxPQUFPLElBQUksQ0FBQztNQUNoQixPQUFPLE9BQU8sSUFBSSxLQUFLLEVBQUUsRUFBRTtRQUN6QixFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDVjtLQUNGLENBQUM7SUFDRixNQUFNLGNBQWMsa0RBQWtEO01BQ3BFLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQztNQUN2QixLQUFLLElBQUksS0FBSyxDQUFDLEVBQUUsS0FBSyxXQUFXLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO1FBQ3ZELE1BQU0sU0FBUyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0IsSUFBSSxNQUFNLEtBQUssS0FBSyxJQUFJLEVBQUU7VUFDeEIsTUFBTSxRQUFRLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQ2xDLElBQUksS0FBSyxFQUFFO1lBQ1QsS0FBSyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUN4QixNQUFNO1lBQ0wsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUc7Y0FDcEIsTUFBTTtjQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUM7YUFDZCxDQUFDO1dBQ0g7U0FDRjtPQUNGO01BQ0QsSUFBSSxJQUFJLFdBQVcsRUFBRTtRQUNuQixLQUFLLElBQUksS0FBSyxDQUFDLEVBQUUsS0FBSyxnQkFBZ0IsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7VUFDNUQsTUFBTSxTQUFTLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1VBQ3BDLE1BQU0sV0FBVyxNQUFNLEtBQUssQ0FBQztVQUM3QixJQUFJLFFBQVEsSUFBSSxJQUFJLFdBQVcsSUFBSSxFQUFFO1lBQ25DLE1BQU0sUUFBUSxPQUFPLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzQyxJQUFJLEtBQUssRUFBRTtjQUNULEtBQUssTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDeEIsTUFBTTtjQUNMLE9BQU8sV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHO2dCQUM3QixNQUFNO2dCQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUM7ZUFDZCxDQUFDO2FBQ0g7V0FDRjtTQUNGO09BQ0Y7S0FDRixDQUFDO0lBQ0YsTUFBTSxvQkFBb0IseUNBQXlDO01BQ2pFLE1BQU0sVUFBVTtRQUNkLE9BQU8sRUFBRTtRQUNULFlBQVksRUFBRTtPQUNmLENBQUM7TUFDRixJQUFJLElBQUksV0FBVyxFQUFFO1FBQ25CLFFBQVEsQ0FBQyxJQUFJLEVBQUUsYUFBYTtVQUMxQixXQUFXLENBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNoRSxDQUFDLENBQUM7T0FDSjtNQUNELE9BQU8sT0FBTyxDQUFDO0tBQ2hCLENBQUM7SUFDRixNQUFNLGFBQWEsbUJBQW1CO01BQ3BDLE1BQU0sTUFBTSxzQ0FBc0M7UUFDaEQsTUFBTSxDQUFDLFdBQVcsRUFBRSxTQUFTO1VBQzNCLE1BQU0sUUFBUSxJQUFJLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQztVQUNoQyxNQUFNLENBQUMsS0FBSyxPQUFPLFVBQVUsRUFBRSxZQUFZO1lBQ3pDLEtBQUssSUFBSSxJQUFJLEtBQUssT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2NBQzFDLE1BQU0sT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsTUFBTSxlQUFlLG1CQUFtQixHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssT0FBTyxLQUFLLENBQUMsS0FBSyxTQUFTLEdBQUcsSUFBSSxLQUFLLEtBQUssS0FBSyxPQUFPLEtBQUssQ0FBQztjQUN4SCxJQUFJLENBQUMsWUFBWSxJQUFJLFVBQVUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxFQUFFO2dCQUM1QyxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7ZUFDcEI7YUFDRjtZQUNELElBQUksS0FBSyxPQUFPLEdBQUcsQ0FBQyxFQUFFO2NBQ3BCLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxPQUFPLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQzthQUMxQztXQUNGLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixHQUFHLENBQUMsT0FBTyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDMUIsR0FBRyxDQUFDLE9BQU8sV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQy9CLENBQUM7SUFDRixNQUFNLFdBQVcsc0NBQXNDLE9BQU8sRUFBRSxLQUFLO01BQ25FLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDdkUsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMzQixDQUFDOztJQUVGLE1BQU0sZ0JBQWdCLG1DQUFtQztNQUN2RCxNQUFNLGNBQWMsUUFBUSxrQkFBa0IsSUFBSSxJQUFJLE9BQU8sQ0FBQztNQUM5RCxJQUFJLFdBQVcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDaEMsTUFBTSxVQUFVLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyQyxJQUFJLElBQUksT0FBTyxFQUFFO1VBQ2YsT0FBTyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDckM7UUFDRCxJQUFJLE1BQU0sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7T0FDOUIsTUFBTTtRQUNMLElBQUksTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztPQUMzRDtLQUNGLENBQUM7SUFDRixNQUFNLG1CQUFtQixRQUFRO01BQy9CLElBQUksRUFBRSxDQUFDO01BQ1AsT0FBTyxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksV0FBVyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLE1BQU0sSUFBSSxDQUFDO0tBQ25LLENBQUM7SUFDRixNQUFNLGVBQWUsZ0JBQWdCO01BQ25DLE1BQU0sYUFBYSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQztNQUMvRSxPQUFPLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLEtBQUssSUFBSSxVQUFVLElBQUksVUFBVSxLQUFLLEtBQUssSUFBSSxDQUFDO0tBQy9GLENBQUM7SUFDRixNQUFNLFdBQVcsa0JBQWtCO01BQ2pDLE1BQU0sT0FBTyxNQUFNLGVBQWUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO01BQzlDLE9BQU8sQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLFVBQVUsTUFBTSxJQUFJLENBQUM7S0FDOUUsQ0FBQztJQUNGLE1BQU0sVUFBVSx3REFBd0QsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0osTUFBTSxrQkFBa0IsbUJBQW1CLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDeEcsTUFBTSx5QkFBeUIsU0FBUztNQUN0QyxJQUFJLFlBQVksQ0FBQztNQUNqQixLQUFLLElBQUksT0FBTyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sSUFBSSxPQUFPLEVBQUU7UUFDL0MsTUFBTSxrQkFBa0IsSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNyRCxJQUFJLGVBQWUsS0FBSyxPQUFPLEVBQUU7VUFDL0IsTUFBTTtTQUNQLE1BQU0sSUFBSSxlQUFlLEtBQUssTUFBTSxFQUFFO1VBQ3JDLGVBQWUsSUFBSSxDQUFDO1NBQ3JCO09BQ0Y7TUFDRCxPQUFPLFFBQVEsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0tBQ3BDLENBQUM7O0lBRUYsTUFBTSw0QkFBNEIsZUFBZSxxQkFBcUIsSUFBSSxPQUFPLEtBQUs7TUFDcEYsSUFBSSxNQUFNLG1CQUFtQixFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUMxQyxJQUFJLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztPQUN2QixNQUFNO1FBQ0wsTUFBTSxXQUFXLElBQUksU0FBUyxFQUFFLENBQUM7UUFDakMsS0FBSyxNQUFNLFNBQVMsSUFBSSxRQUFRLEVBQUU7VUFDaEMsSUFBSSxrQkFBa0IsSUFBSSxDQUFDLE1BQU0sYUFBYSxDQUFDLGtCQUFrQixLQUFLLEVBQUUsU0FBUyxLQUFLLENBQUMsRUFBRTtZQUN2Rix5QkFBeUIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUM7V0FDbEU7U0FDRjtRQUNELElBQUksT0FBTyxFQUFFLENBQUM7T0FDZjtLQUNGLENBQUM7SUFDRixNQUFNLG9CQUFvQiwwQkFBMEIsV0FBVyxJQUFJLEtBQUs7TUFDdEUsTUFBTSxvQkFBb0IsTUFBTSxxQkFBcUIsRUFBRSxDQUFDO01BQ3hELE1BQU0sbUJBQW1CLE1BQU0sb0JBQW9CLEVBQUUsQ0FBQztNQUN0RCxNQUFNLHFCQUFxQixNQUFNLHNCQUFzQixFQUFFLENBQUM7TUFDMUQsTUFBTSx3QkFBd0IsS0FBSyxRQUFRLENBQUMsMENBQTBDLENBQUMsQ0FBQztNQUN4RixNQUFNLFFBQVEsSUFBSSxHQUFHLEVBQUUsQ0FBQztNQUN4QixNQUFNLHNCQUFzQixRQUFRLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO01BQzNGLEtBQUssSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUU7UUFDeEMsTUFBTSxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QixJQUFJLE1BQU0sQ0FBQztRQUNYLElBQUksU0FBUyxDQUFDO1FBQ2QsSUFBSSxRQUFRLENBQUM7UUFDYixJQUFJLENBQUMsSUFBSSxPQUFPLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7VUFDbkMsU0FBUztTQUNWO1FBQ0QsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssSUFBSSxFQUFFO1VBQzdELElBQUksVUFBVSxJQUFJLEtBQUssQ0FBQztVQUN4QixPQUFPLE9BQU8sRUFBRTtZQUNkLElBQUksaUJBQWlCLENBQUMsT0FBTyxLQUFLLENBQUMsRUFBRTtjQUNuQyxPQUFPLEtBQUssR0FBRyxJQUFJLENBQUM7Y0FDcEIsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Y0FDbkIsSUFBSSxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQzthQUMxQyxNQUFNO2NBQ0wsTUFBTTthQUNQO1lBQ0QsVUFBVSxPQUFPLEtBQUssQ0FBQztXQUN4QjtVQUNELElBQUksT0FBTyxFQUFFLENBQUM7VUFDZCxTQUFTO1NBQ1Y7UUFDRCxNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixLQUFLLFNBQVMsSUFBSSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsTUFBTSxhQUFhLENBQUMsTUFBTSxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLE1BQU0sT0FBTyxFQUFFO1VBQ3hJLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3RCO1FBQ0QsSUFBSSxNQUFNLElBQUksT0FBTyxPQUFPLEdBQUcsQ0FBQyxFQUFFO1VBQ2hDLElBQUksTUFBTSxhQUFhLENBQUMsTUFBTSxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUMvQyxPQUFPLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMvQixRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEIsSUFBSSxjQUFjLFNBQVMsQ0FBQztZQUM1QixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtjQUMzQyxJQUFJLE1BQU0sYUFBYSxDQUFDLFdBQVcsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDbkUsV0FBVyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUM5QixRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ25CLFdBQVcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2VBQzlCLE1BQU07Z0JBQ0wsV0FBVyxXQUFXLENBQUM7ZUFDeEI7Y0FDRCxLQUFLLElBQUksWUFBWSxPQUFPLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxTQUFTLElBQUksU0FBUyxLQUFLLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUc7Z0JBQ3RGLE1BQU0sV0FBVyxTQUFTLEtBQUssQ0FBQztnQkFDaEMsUUFBUSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzNCLFlBQVksUUFBUSxDQUFDO2VBQ3RCO2NBQ0QsY0FBYyxRQUFRLENBQUM7YUFDeEI7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxTQUFTLENBQUMsRUFBRTtjQUNyRSxNQUFNLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2NBQzNDLE1BQU0sT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQzthQUNoQyxNQUFNO2NBQ0wsTUFBTSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUN2QztZQUNELFNBQVMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLENBQUMsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO2NBQy9GLE1BQU0sTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO2FBQ3pCO1dBQ0YsTUFBTTtZQUNMLHlCQUF5QixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztXQUN6QztTQUNGLE1BQU0sSUFBSSxJQUFJLE9BQU8sRUFBRTtVQUN0QixJQUFJLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtZQUN0QixJQUFJLFVBQVUsSUFBSSxLQUFLLENBQUM7WUFDeEIsSUFBSSxPQUFPLEtBQUssT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksQ0FBQyxFQUFFO2NBQy9ELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2NBQ3JCLFNBQVM7YUFDVjtZQUNELFVBQVUsSUFBSSxLQUFLLENBQUM7WUFDcEIsSUFBSSxPQUFPLEtBQUssT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksQ0FBQyxJQUFJLE9BQU8sV0FBVyxFQUFFO2NBQ3JGLE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztjQUMvQyxTQUFTO2FBQ1Y7WUFDRCxNQUFNLFVBQVUsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQixTQUFTO1dBQ1Y7VUFDRCxJQUFJLE1BQU0sYUFBYSxDQUFDLElBQUksT0FBTyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxhQUFhLENBQUMsS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDekYsTUFBTSxVQUFVLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0QyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7V0FDcEIsTUFBTTtZQUNMLHlCQUF5QixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztXQUN6QztTQUNGO09BQ0Y7S0FDRixDQUFDO0lBQ0YsTUFBTSxhQUFhLHNCQUFzQjtNQUN2QyxJQUFJLFdBQVcsSUFBSSxDQUFDO01BQ3BCLE9BQU8sUUFBUSxFQUFFO1FBQ2YsSUFBSSxRQUFRLEtBQUssS0FBSyxVQUFVLEVBQUU7VUFDaEMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELFdBQVcsUUFBUSxPQUFPLENBQUM7T0FDNUI7TUFDRCxPQUFPLEtBQUssQ0FBQztLQUNkLENBQUM7SUFDRixNQUFNLFlBQVksZUFBZSxTQUFTLElBQUksT0FBTyxLQUFLO01BQ3hELElBQUksTUFBTSxJQUFJLE1BQU0sU0FBUyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLGFBQWEsQ0FBQyxNQUFNLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ3hGLE9BQU8sSUFBSSxDQUFDO09BQ2IsTUFBTSxJQUFJLE1BQU0sSUFBSSxJQUFJLEtBQUssS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRTtRQUNqRSxPQUFPLElBQUksQ0FBQztPQUNiLE1BQU07UUFDTCxPQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLGNBQWMsb0JBQW9CO01BQ3RDLE1BQU0sTUFBTSxRQUFRLFlBQVksRUFBRSxDQUFDO01BQ25DLEdBQUcsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztNQUNyQixHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDbkIsT0FBTyxHQUFHLENBQUM7S0FDWixDQUFDO0lBQ0YsTUFBTSwrQkFBK0IsT0FBTztNQUMxQyxNQUFNLFdBQVcsYUFBYSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDbkQsTUFBTSxTQUFTLGFBQWEsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQy9DLE1BQU0sV0FBVyxHQUFHLHdCQUF3QixDQUFDO01BQzdDLE9BQU8sWUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhO1FBQzVELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsSUFBSSxhQUFhLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRTtVQUM5RixPQUFPLFdBQVcsQ0FBQyxRQUFRLFVBQVUsRUFBRSxFQUFFLFFBQVEsT0FBTyxFQUFFLEVBQUUsU0FBUyxVQUFVLEVBQUUsRUFBRSxTQUFTLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDeEcsTUFBTTtVQUNMLE9BQU8sR0FBRyxDQUFDO1NBQ1o7T0FDRixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNmLENBQUM7SUFDRixNQUFNLFlBQVksT0FBTyxHQUFHLFVBQVUsR0FBRyxHQUFHLEdBQUcsNEJBQTRCLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRWpGLE1BQU0sb0JBQW9CLFFBQVE7TUFDaEMsT0FBTyxhQUFhLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxJQUFJLFdBQVcsS0FBSyxJQUFJLFVBQVUsQ0FBQztLQUM3RSxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsUUFBUTtNQUM1QixPQUFPLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLE1BQU0sS0FBSyxJQUFJLENBQUM7S0FDbEQsQ0FBQztJQUNGLE1BQU0scUJBQXFCLGtCQUFrQjtNQUMzQyxNQUFNLGdCQUFnQixNQUFNLGlCQUFpQixFQUFFLENBQUM7TUFDaEQsT0FBTyxhQUFhLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxhQUFhLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQztLQUM5RixDQUFDO0lBQ0YsTUFBTSx5QkFBeUIsa0JBQWtCO01BQy9DLE1BQU0sbUJBQW1CLE1BQU0sb0JBQW9CLEVBQUUsQ0FBQztNQUN0RCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ3BHLENBQUM7SUFDRixNQUFNLGlCQUFpQixzQkFBc0I7TUFDM0MsSUFBSSxhQUFhLFFBQVEsV0FBVyxDQUFDO01BQ3JDLElBQUksWUFBWSxRQUFRLFVBQVUsQ0FBQztNQUNuQyxJQUFJLFVBQVUsSUFBSSxVQUFVLEtBQUssS0FBSyxNQUFNLEVBQUU7UUFDNUMsYUFBYSxVQUFVLEtBQUssQ0FBQztPQUM5QjtNQUNELElBQUksU0FBUyxJQUFJLFNBQVMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLFlBQVksRUFBRTtRQUN0RCxZQUFZLFNBQVMsS0FBSyxDQUFDO09BQzVCO01BQ0QsSUFBSSxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDN0MsWUFBWSxTQUFTLEtBQUssSUFBSSxJQUFJLFNBQVMsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxTQUFTLEtBQUssQ0FBQztPQUNsRjtNQUNELElBQUksQ0FBQyxVQUFVLElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRTtRQUMzQyxPQUFPLEtBQUssQ0FBQztPQUNkO01BQ0QsT0FBTyxVQUFVLEtBQUssS0FBSyxJQUFJLElBQUksVUFBVSxLQUFLLEtBQUssSUFBSSxDQUFDO0tBQzdELENBQUM7SUFDRixNQUFNLHFCQUFxQixlQUFlO01BQ3hDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztNQUNYLE1BQU0sYUFBYSxXQUFXLFdBQVcsQ0FBQztNQUMxQyxNQUFNLFlBQVksV0FBVyxVQUFVLENBQUM7TUFDeEMsSUFBSSxVQUFVLElBQUksVUFBVSxTQUFTLEtBQUssTUFBTSxFQUFFO1FBQ2hELENBQUMsS0FBSyxVQUFVLFdBQVcsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO09BQzlGO01BQ0QsSUFBSSxTQUFTLElBQUksU0FBUyxHQUFHLEtBQUssWUFBWSxFQUFFO1FBQzlDLENBQUMsS0FBSyxTQUFTLFdBQVcsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO09BQzVGO01BQ0QsT0FBTyxXQUFXLENBQUM7S0FDcEIsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLCtCQUErQjtNQUNuRCxNQUFNLE9BQU8sVUFBVSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDNUMsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzdDLE9BQU8sa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDeEMsQ0FBQztJQUNGLE1BQU0sWUFBWSxPQUFPO01BQ3ZCLElBQUksRUFBRSxDQUFDO01BQ1AsT0FBTyxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsV0FBVyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxTQUFTO1FBQzVILE9BQU8sS0FBSyxTQUFTLEtBQUssSUFBSSxDQUFDO09BQ2hDLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFlBQVksUUFBUTtNQUN4QixPQUFPLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDM0MsQ0FBQztJQUNGLE1BQU0sbUJBQW1CLFFBQVE7TUFDL0IsT0FBTyxhQUFhLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxJQUFJLFdBQVcsS0FBSyxJQUFJLFVBQVUsSUFBSSxTQUFTLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQztLQUN2SixDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsT0FBTztNQUM3QixPQUFPLENBQUMsR0FBRyxXQUFXLElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDakQsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLFFBQVE7TUFDNUIsT0FBTyxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztLQUM3RixDQUFDO0lBQ0YsTUFBTSxjQUFjLGVBQWU7TUFDakMsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDO01BQ3JELE9BQU8sV0FBVyxJQUFJLFdBQVcsU0FBUyxLQUFLLElBQUksR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDO0tBQzFFLENBQUM7SUFDRixNQUFNLGtCQUFrQixlQUFlO01BQ3JDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDakMsQ0FBQztJQUNGLE1BQU0sV0FBVyxxQkFBcUI7TUFDcEMsTUFBTSxZQUFZLEdBQUcsV0FBVyxFQUFFLENBQUM7TUFDbkMsTUFBTSxXQUFXLEdBQUcsV0FBVyxFQUFFLENBQUM7TUFDbEMsU0FBUyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7TUFDckMsUUFBUSxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7TUFDakMsT0FBTztRQUNMLFNBQVMsY0FBYyxFQUFFO1FBQ3pCLFFBQVEsY0FBYyxFQUFFO09BQ3pCLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxjQUFjLG9CQUFvQjtNQUN0QyxNQUFNLFdBQVcsYUFBYSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDNUMsTUFBTSxjQUFjLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUMxQyxNQUFNLGNBQWMsV0FBVyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDL0MsT0FBTyxXQUFXLEdBQUcsV0FBVyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUM7S0FDbkQsQ0FBQztJQUNGLE1BQU0sYUFBYSxvQkFBb0I7TUFDckMsTUFBTSxXQUFXLGFBQWEsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzNDLE1BQU0sY0FBYyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDMUMsTUFBTSxjQUFjLFdBQVcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQy9DLE9BQU8sV0FBVyxHQUFHLFdBQVcsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDO0tBQ25ELENBQUM7SUFDRixNQUFNLGVBQWUsaUNBQWlDO01BQ3BELE1BQU0sUUFBUSxRQUFRLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQ3BDLE1BQU0sWUFBWSxNQUFNLFdBQVcsQ0FBQztNQUNwQyxJQUFJLFNBQVMsRUFBRTtRQUNiLFNBQVMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN6QyxLQUFLLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTTtVQUNyQixTQUFTLGFBQWEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDcEMsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLFNBQVMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQy9CO01BQ0QsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQ3BELENBQUM7SUFDRixNQUFNLGlCQUFpQiw0QkFBNEI7TUFDakQsTUFBTSxZQUFZLE1BQU0sV0FBVyxDQUFDO01BQ3BDLElBQUksU0FBUyxFQUFFO1FBQ2IsS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU87VUFDdEIsU0FBUyxhQUFhLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3JDLENBQUMsQ0FBQztPQUNKO01BQ0QsT0FBTyxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQ3RDLENBQUM7SUFDRixNQUFNLGdCQUFnQixpQ0FBaUM7TUFDckQsR0FBRyxZQUFZLENBQUMsSUFBSSxRQUFRLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztNQUN4QyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDdEMsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLG9DQUFvQztNQUMxRCxNQUFNLGNBQWMsYUFBYSxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDN0QsTUFBTSxXQUFXLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQztNQUN0RCxNQUFNLFNBQVMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxXQUFXLFdBQVcsQ0FBQyxDQUFDLENBQUM7TUFDaEUsTUFBTSxZQUFZLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztNQUM3QixNQUFNLFdBQVcsR0FBRyxRQUFRLEVBQUUsQ0FBQztNQUMvQixNQUFNLE9BQU8sWUFBWTtRQUN2QixNQUFNLFdBQVcsYUFBYSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkQsTUFBTSxjQUFjLFdBQVcsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDL0MsTUFBTSxTQUFTLFFBQVEsS0FBSyxTQUFTLEdBQUcsV0FBVyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsV0FBVyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEcsTUFBTSxhQUFhLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLE1BQU0sUUFBUSxFQUFFLENBQUM7UUFDcEYsT0FBTyxVQUFVLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsS0FBSyxRQUFRLEdBQUcsSUFBSSxDQUFDO09BQ3RFLENBQUM7TUFDRixJQUFJLENBQUMsUUFBUSxFQUFFO1FBQ2IsT0FBTyxJQUFJLENBQUM7T0FDYixNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQzFCLE9BQU8sY0FBYyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7T0FDbkQsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNwQixPQUFPLGFBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztPQUN2RCxNQUFNO1FBQ0wsT0FBTyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7T0FDdEQ7S0FDRixDQUFDOztJQUVGLE1BQU0sMkJBQTJCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsTUFBTSx5QkFBeUIscUNBQXFDO01BQ2xFLElBQUksRUFBRSxDQUFDO01BQ1AsTUFBTSxZQUFZLFFBQVEsV0FBVyxDQUFDO01BQ3RDLE1BQU0sV0FBVyxRQUFRLFVBQVUsQ0FBQztNQUNwQyxNQUFNLE9BQU8sUUFBUSxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQUssVUFBVSxHQUFHLFFBQVEsS0FBSyxHQUFHLFFBQVEsQ0FBQztNQUN0RixNQUFNLHlCQUF5QixTQUFTLEtBQUssSUFBSSxDQUFDO01BQ2xELE1BQU0sbUJBQW1CLFVBQVUsQ0FBQyx3QkFBd0IsRUFBRSxTQUFTLEtBQUssQ0FBQyxDQUFDO01BQzlFLElBQUksc0JBQXNCLElBQUksZ0JBQWdCLEVBQUU7UUFDOUMsTUFBTSxvQkFBb0IsU0FBUyxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBSyxPQUFPLENBQUM7UUFDeEUsTUFBTSw2QkFBNkIsQ0FBQyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsWUFBWSxFQUFFLE1BQU0sU0FBUyxLQUFLLENBQUM7UUFDckssTUFBTSw2QkFBNkIsUUFBUSxLQUFLLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzdILE9BQU8saUJBQWlCLElBQUksMEJBQTBCLElBQUksMEJBQTBCLENBQUM7T0FDdEYsTUFBTTtRQUNMLE9BQU8sS0FBSyxDQUFDO09BQ2Q7S0FDRixDQUFDO0lBQ0YsTUFBTSxjQUFjLGFBQWEsQ0FBQztJQUNsQyxNQUFNLDZCQUE2QixvQkFBb0I7TUFDckQsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDdkIsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLEdBQUcsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzdELE9BQU8sSUFBSSxLQUFLLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztPQUNwRixNQUFNO1FBQ0wsT0FBTyxLQUFLLENBQUM7T0FDZDtLQUNGLENBQUM7SUFDRixNQUFNLGlCQUFpQiwrQkFBK0I7TUFDcEQsSUFBSSxFQUFFLENBQUM7TUFDUCxJQUFJLFVBQVUsYUFBYSxDQUFDLGdCQUFnQixDQUFDLEtBQUssS0FBSyxFQUFFO1FBQ3ZELENBQUMsS0FBSyxVQUFVLFdBQVcsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLE1BQU0sSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7T0FDakksTUFBTTtRQUNMLE1BQU0sT0FBTyxVQUFVLFdBQVcsQ0FBQztRQUNuQyxNQUFNLFFBQVEsVUFBVSxVQUFVLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksU0FBUyxLQUFLLElBQUksRUFBRTtVQUNyRCxNQUFNLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN2QyxNQUFNO1VBQ0wsTUFBTSxVQUFVLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDLENBQUM7U0FDekQ7T0FDRjtLQUNGLENBQUM7SUFDRixNQUFNLHVCQUF1QixjQUFjO01BQ3pDLFFBQVEsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxRQUFRLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7S0FDaEcsQ0FBQztJQUNGLE1BQU0sMkJBQTJCLG1CQUFtQjtNQUNsRCxNQUFNLHFCQUFxQixNQUFNLE9BQU8sc0JBQXNCLEVBQUUsQ0FBQztNQUNqRSxNQUFNLE1BQU0sTUFBTSxJQUFJLENBQUM7TUFDdkIsSUFBSSxLQUFLLEVBQUU7UUFDVCxNQUFNLE9BQU8sTUFBTSxRQUFRLEVBQUUsQ0FBQztRQUM5QixNQUFNLGVBQWUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLEtBQUssS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsUUFBUTtVQUNyRCxNQUFNLFdBQVcsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksU0FBUyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7VUFDaEYsSUFBSSxRQUFRLElBQUksb0JBQW9CLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQy9DLEtBQUssSUFBSSxhQUFhLElBQUksY0FBYyxFQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFLGFBQWEsVUFBVSxjQUFjLEVBQUU7Y0FDakksTUFBTSxnQkFBZ0IsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztjQUM5RCxJQUFJLGFBQWEsRUFBRTtnQkFDakIsTUFBTTtlQUNQO2NBQ0QsSUFBSSxZQUFZLFFBQVEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQzFDLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDdkIsTUFBTTtlQUNQO2FBQ0Y7V0FDRjtTQUNGLENBQUMsQ0FBQztPQUNKO0tBQ0YsQ0FBQztJQUNGLE1BQU0sdUJBQXVCLFlBQVk7TUFDdkMsSUFBSSxPQUFPLFFBQVEsQ0FBQztNQUNwQixPQUFPLE9BQU8sSUFBSSxLQUFLLEVBQUUsRUFBRTtRQUN6QixJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtVQUNuQixJQUFJLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNyQztPQUNGO0tBQ0YsQ0FBQztJQUNGLE1BQU0seUJBQXlCLE9BQU87TUFDcEMsS0FBSyxLQUFLLENBQUMsR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPO1FBQy9DLEdBQUcsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztPQUMxQyxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsUUFBUTtNQUMvQixPQUFPLENBQUMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0tBQ2pELENBQUM7SUFDRixNQUFNLGtCQUFrQixrQkFBa0I7TUFDeEMsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLE9BQU8sZ0JBQWdCLEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDO0tBQy9FLENBQUM7SUFDRixNQUFNLHdCQUF3QixvQkFBb0I7TUFDaEQsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztNQUNmLElBQUksT0FBTyxDQUFDO01BQ1osTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLE1BQU0sWUFBWSxNQUFNLFVBQVUsQ0FBQztNQUNuQyxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ1gsT0FBTztPQUNSO01BQ0QsU0FBUyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDakMsTUFBTSxvQkFBb0Isd0JBQXdCLENBQUMsTUFBTSxRQUFRLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztNQUM3RSxJQUFJLGlCQUFpQixJQUFJLEdBQUcsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsS0FBSyxPQUFPLEVBQUU7UUFDOUUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkIsU0FBUyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNwQyxPQUFPO09BQ1I7TUFDRCxJQUFJLE1BQU0sR0FBRyxVQUFVLEVBQUUsQ0FBQztNQUMxQixNQUFNLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQztNQUNwQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNsQixHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLFVBQVUsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25JLE1BQU0sUUFBUSxNQUFNLFlBQVksQ0FBQztRQUNqQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtVQUNuQixJQUFJLFdBQVcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO1VBQzVCLENBQUMsS0FBSyxLQUFLLFdBQVcsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3BGO09BQ0YsTUFBTTtRQUNMLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQzFCO01BQ0QsTUFBTSxtQkFBbUIsT0FBTztRQUM5QixJQUFJLFdBQVcsYUFBYSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakQsTUFBTSxjQUFjLFdBQVcsQ0FBQyxNQUFNLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDbEQsV0FBVyxXQUFXLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QyxPQUFPLFFBQVEsS0FBSyxJQUFJLElBQUksUUFBUSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLFFBQVEsUUFBUSxFQUFFLENBQUM7T0FDL0UsQ0FBQztNQUNGLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQztNQUN2RCxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNuQixJQUFJLFdBQVcsSUFBSSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUMzQyxNQUFNLFNBQVMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLEtBQUssQ0FBQyxZQUFZLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLEdBQUcsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3QixHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtVQUNsRixNQUFNLE9BQU8sQ0FBQztVQUNkLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3pCLE1BQU07VUFDTCxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxrQkFBa0IsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2pGO09BQ0Y7TUFDRCxTQUFTLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN2QixDQUFDO0lBQ0YsTUFBTSx3QkFBd0IsVUFBVTtNQUN0QyxNQUFNLE1BQU0sTUFBTSxJQUFJLENBQUM7TUFDdkIsTUFBTSxNQUFNLFNBQVMsQ0FBQyxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUMsQ0FBQztNQUNqRCxNQUFNLFVBQVUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQzdCLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxHQUFHLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQztNQUNqRSxJQUFJLDBCQUEwQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDbkQsa0JBQWtCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxZQUFZLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO09BQ2xFLE1BQU0sSUFBSSxHQUFHLGVBQWUsS0FBSyxHQUFHLGFBQWEsSUFBSSxHQUFHLFVBQVUsR0FBRyxHQUFHLFlBQVksS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsZUFBZSxXQUFXLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxFQUFFO1FBQ3ZKLEdBQUcsZUFBZSxFQUFFLENBQUM7T0FDdEIsTUFBTTtRQUNMLE1BQU0sT0FBTyxFQUFFLFlBQVksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDOUM7S0FDRixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsU0FBUztNQUM5QixLQUFLLElBQUksYUFBYSxLQUFLLEVBQUUsVUFBVSxFQUFFLGFBQWEsVUFBVSxLQUFLLEVBQUUsRUFBRTtRQUN2RSxJQUFJLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLFlBQVksRUFBRTtVQUMxQyxPQUFPLFFBQVEsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ2xDO09BQ0Y7TUFDRCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7S0FDeEIsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLDRCQUE0QjtNQUNwRCxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7TUFDWCxNQUFNLFlBQVksTUFBTSxVQUFVLENBQUM7TUFDbkMsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLE1BQU0sU0FBUyxNQUFNLE9BQU8sQ0FBQztNQUM3QixNQUFNLFFBQVEsT0FBTyxNQUFNLENBQUM7TUFDNUIsTUFBTSxhQUFhLGNBQWMsQ0FBQyxFQUFFLFVBQVUsSUFBSSxFQUFFLEVBQUUsTUFBTSxPQUFPLENBQUMsQ0FBQztNQUNyRSxNQUFNLGVBQWUsZ0VBQWdFLENBQUM7TUFDdEYsSUFBSSxLQUFLLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUNwQyxTQUFTLFVBQVUsQ0FBQztPQUNyQjtNQUNELFFBQVEsS0FBSyxRQUFRLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO01BQ25ELElBQUksTUFBTSxTQUFTLE9BQU8sRUFBRSxDQUFDO01BQzdCLE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQztNQUN4QyxNQUFNLE9BQU8sTUFBTSxRQUFRLEVBQUUsQ0FBQztNQUM5QixJQUFJLFlBQVksS0FBSyxJQUFJLElBQUksU0FBUyxZQUFZLEVBQUUsRUFBRTtRQUNwRCxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksV0FBVyxDQUFDLEVBQUU7VUFDNUcsTUFBTSxHQUFHLFVBQVUsRUFBRSxDQUFDO1VBQ3RCLEdBQUcsU0FBUyxDQUFDLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1VBQ2pDLEdBQUcsT0FBTyxDQUFDLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1VBQy9CLFNBQVMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZCO09BQ0Y7TUFDRCxJQUFJLENBQUMsU0FBUyxZQUFZLEVBQUUsRUFBRTtRQUM1QixxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUMvQjtNQUNELE1BQU0sYUFBYSxTQUFTLFFBQVEsRUFBRSxDQUFDO01BQ3ZDLE1BQU0sYUFBYTtRQUNqQixTQUFTLFVBQVUsU0FBUyxZQUFZLEVBQUU7UUFDMUMsTUFBTSxPQUFPLEtBQUs7UUFDbEIsUUFBUSxJQUFJO09BQ2IsQ0FBQztNQUNGLE1BQU0sV0FBVyxNQUFNLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7TUFDakQsSUFBSSxPQUFPLE1BQU0sS0FBSyxJQUFJLElBQUksY0FBYyxDQUFDLE1BQU0sT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUU7UUFDekcsTUFBTSxlQUFlLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxTQUFTLE9BQU8sRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3JFLElBQUksR0FBRyxFQUFFO1VBQ1AsU0FBUyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdkI7UUFDRCxPQUFPLEtBQUssQ0FBQztPQUNkO01BQ0QsSUFBSSxPQUFPLE1BQU0sS0FBSyxJQUFJLElBQUksc0JBQXNCLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLEVBQUUsQ0FBQyxFQUFFO1FBQ2pHLENBQUMsS0FBSyxRQUFRLFdBQVcsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUM7T0FDN0U7TUFDRCxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUMvQixJQUFJLE9BQU8sUUFBUSxVQUFVLENBQUM7TUFDOUIsSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssWUFBWSxFQUFFO1FBQzVDLE1BQU0sU0FBUyxJQUFJLENBQUM7UUFDcEIsS0FBSyxPQUFPLElBQUksS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ25ELElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUM5QyxJQUFJLElBQUksT0FBTyxJQUFJLE1BQU0sT0FBTyxhQUFhLENBQUMsSUFBSSxPQUFPLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRTtjQUN2RSxJQUFJLE9BQU8sT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUM7YUFDdEQ7WUFDRCxNQUFNO1dBQ1A7U0FDRjtPQUNGO01BQ0QsTUFBTSxvQkFBb0Isd0JBQXdCLENBQUMsVUFBVSxDQUFDLENBQUM7TUFDL0QsSUFBSSxDQUFDLFVBQVUsUUFBUSxFQUFFO1FBQ3ZCLFFBQVEsVUFBVSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkMsY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7T0FDM0MsTUFBTTtRQUNMLE1BQU0sVUFBVSxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUMsSUFBSSxhQUFhLFNBQVMsUUFBUSxFQUFFLENBQUM7UUFDckMsSUFBSSxRQUFRLENBQUM7UUFDYixNQUFNLFdBQVcsTUFBTSxRQUFRLEVBQUUsQ0FBQztRQUNsQyxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRTtVQUM1QixhQUFhLFdBQVcsUUFBUSxDQUFDO1NBQ2xDLE1BQU07VUFDTCxXQUFXLFVBQVUsQ0FBQztTQUN2QjtRQUNELE9BQU8sUUFBUSxJQUFJLFFBQVEsS0FBSyxRQUFRLEVBQUU7VUFDeEMsYUFBYSxRQUFRLENBQUM7VUFDdEIsV0FBVyxRQUFRLFdBQVcsQ0FBQztTQUNoQztRQUNELFFBQVEsVUFBVSxLQUFLLFFBQVEsR0FBRyxRQUFRLFVBQVUsR0FBRyxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwRixNQUFNLE9BQU8sTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsTUFBTSxhQUFhLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxNQUFNLGNBQWMsVUFBVSxLQUFLLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hFLFVBQVUsS0FBSyxDQUFDLFVBQVUsTUFBTSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNwRCxNQUFNLFlBQVksUUFBUSxTQUFTLEVBQUUsQ0FBQztRQUN0QyxNQUFNLFNBQVMsQ0FBQyxLQUFLLFFBQVEsT0FBTyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUM1RSxRQUFRLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLE1BQU0sa0JBQWtCLFFBQVEsQ0FBQyxTQUFTLEVBQUUsUUFBUSxTQUFTLENBQUMsTUFBTSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDNUYsaUJBQWlCLENBQUMsZUFBZSxFQUFFLE1BQU0sT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQy9ELFFBQVEsQ0FBQyxNQUFNLGVBQWUsRUFBRSxFQUFFLE1BQU0sb0JBQW9CLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0RSxRQUFRLFVBQVUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksVUFBVSxLQUFLLFFBQVEsRUFBRTtVQUMzQixHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDOUIsTUFBTTtVQUNMLEdBQUcsYUFBYSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNyQztPQUNGO01BQ0Qsd0JBQXdCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQ3hDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO01BQ3JELHNCQUFzQixDQUFDLE1BQU0sUUFBUSxFQUFFLENBQUMsQ0FBQztNQUN6QyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsU0FBUyxTQUFTLEVBQUUsQ0FBQyxDQUFDO01BQ2hELFdBQVcsQ0FBQyxNQUFNLE9BQU8sRUFBRSxNQUFNLFFBQVEsRUFBRSxFQUFFLFNBQVMsU0FBUyxFQUFFLENBQUMsQ0FBQztNQUNuRSxPQUFPLEtBQUssQ0FBQztLQUNkLENBQUM7O0lBRUYsTUFBTSxhQUFhLFdBQVcsT0FBTyxZQUFZLE9BQU8sQ0FBQzs7SUFFekQsTUFBTSxnQkFBZ0IsVUFBVTtNQUM5QixJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNwQixlQUFlLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTztVQUM1QyxNQUFNLE9BQU8sR0FBRyxRQUFRLEVBQUUsQ0FBQztVQUMzQixNQUFNLFdBQVcsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztVQUMxRSxNQUFNLFVBQVUsT0FBTyxDQUFDLFFBQVEsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUM3QyxDQUFDLENBQUM7T0FDSjtLQUNGLENBQUM7SUFDRixNQUFNLGdCQUFnQiwrQkFBK0I7TUFDbkQsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzNDLElBQUksV0FBVyxLQUFLLElBQUksRUFBRTtRQUN4QixhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDdkI7S0FDRixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsaUNBQWlDO01BQ3hELElBQUksT0FBTyxPQUFPLEtBQUssQ0FBQyxJQUFJLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ2pELE1BQU0sT0FBTyx5QkFBeUIsQ0FBQztRQUN2QyxJQUFJLElBQUksU0FBUyxLQUFLLE9BQU8sRUFBRTtVQUM3QixVQUFVLFVBQVUsR0FBRyxJQUFJLEdBQUcsWUFBWSxDQUFDO1NBQzVDLE1BQU0sSUFBSSxXQUFXLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxFQUFFO1VBQzFDLFVBQVUsTUFBTSxHQUFHLElBQUksR0FBRyxPQUFPLENBQUM7U0FDbkM7UUFDRCxNQUFNLHNCQUFzQixrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RCxJQUFJLE1BQU0sT0FBTyxhQUFhLENBQUMsSUFBSSxTQUFTLFlBQVksRUFBRSxFQUFFLG1CQUFtQixZQUFZLEVBQUUsQ0FBQyxFQUFFO1VBQzlGLFVBQVUsSUFBSSxDQUFDO1VBQ2YsVUFBVSxNQUFNLElBQUksV0FBVyxDQUFDLG1CQUFtQixFQUFFLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ2hHLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRTtVQUNuQixVQUFVLElBQUksQ0FBQztTQUNoQjtRQUNELGFBQWEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksYUFBYSxDQUFDLENBQUM7UUFDbEQsT0FBTztVQUNMLE9BQU87VUFDUCxNQUFNLE9BQU87U0FDZCxDQUFDO09BQ0gsTUFBTTtRQUNMLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxFQUFFO1VBQ3pCLFVBQVUsY0FBYyxDQUFDLEVBQUUsVUFBVSxLQUFLLEVBQUUsRUFBRSxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxPQUFPLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDbEcsZUFBZSxJQUFJO1lBQ25CLFFBQVEsSUFBSTtXQUNiLENBQUMsQ0FBQyxDQUFDO1NBQ0w7UUFDRCxNQUFNLGNBQWMsbUJBQW1CLENBQUMsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEcsYUFBYSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsSUFBSSxhQUFhLENBQUMsQ0FBQztRQUN0RCxPQUFPO1VBQ0wsU0FBUyxXQUFXO1VBQ3BCLE1BQU0sV0FBVztTQUNsQixDQUFDO09BQ0g7S0FDRixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsaUNBQWlDO01BQ3RELFFBQVEsQ0FBQyxNQUFNLE9BQU8sZUFBZSxFQUFFLEVBQUUsTUFBTSxPQUFPLG9CQUFvQixFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDdkYsTUFBTSxPQUFPLGNBQWMsQ0FBQyxFQUFFLFVBQVUsS0FBSyxFQUFFLEVBQUUsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ25GLE1BQU0sY0FBYyxtQkFBbUIsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUM5RixhQUFhLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxJQUFJLGFBQWEsQ0FBQyxDQUFDO01BQ3RELE9BQU87UUFDTCxPQUFPO1FBQ1AsTUFBTSxXQUFXO09BQ2xCLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsMkJBQTJCO01BQ3BELE9BQU8sUUFBUSxLQUFLLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUTtRQUNqRCxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtVQUN2QixPQUFPLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNwRCxNQUFNO1VBQ0wsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN0RDtPQUNGLENBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTztRQUNQLE1BQU0sVUFBVSxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksUUFBUTtPQUNuRCxDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sYUFBYSw4QkFBOEIsVUFBVSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQy9GLE1BQU0sVUFBVSxzQkFBc0IsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7O0lBRTNFLE1BQU0sZUFBZSxVQUFVLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ25FLE1BQU0sV0FBVyw4QkFBOEI7TUFDN0MsSUFBSSxVQUFVLEtBQUssSUFBSSxDQUFDO01BQ3hCLE1BQU0sT0FBTyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDbEMsT0FBTyxPQUFPLFdBQVcsRUFBRTtRQUN6QixVQUFVLE9BQU8sV0FBVyxDQUFDO1FBQzdCLE1BQU0sS0FBSyxZQUFZLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxNQUFNLGNBQWMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksV0FBVyxPQUFPLEVBQUUsRUFBRTtVQUN4QixPQUFPLFdBQVcsQ0FBQztTQUNwQixNQUFNLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1VBQ25CLE1BQU07U0FDUDtPQUNGO01BQ0QsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO0tBQ3hCLENBQUM7SUFDRixNQUFNLFlBQVksOEJBQThCO01BQzlDLE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDakMsTUFBTSxPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNsQyxPQUFPLE9BQU8sUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUNoRyxDQUFDOztJQUVGLE1BQU0sU0FBUyxNQUFNLENBQUM7SUFDdEIsTUFBTSxtQ0FBbUMsb0JBQW9CO01BQzNELE1BQU0sYUFBYSxFQUFFLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzFDLElBQUksVUFBVSxFQUFFO1FBQ2QsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtVQUMxQyxNQUFNLFNBQVMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQzdCLElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxRQUFRLEtBQUssS0FBSyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDLEVBQUU7WUFDNUYsT0FBTyxJQUFJLENBQUM7V0FDYjtTQUNGO09BQ0Y7TUFDRCxPQUFPLEtBQUssQ0FBQztLQUNkLENBQUM7SUFDRixNQUFNLGVBQWUsdUNBQXVDO01BQzFELE1BQU0sT0FBTyxNQUFNLElBQUksUUFBUSxFQUFFLENBQUM7TUFDbEMsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1FBQ2pCLE9BQU8sS0FBSyxDQUFDO09BQ2Q7TUFDRCxNQUFNLGNBQWMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTztRQUNwRCxJQUFJLGdDQUFnQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUU7VUFDdkQsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sR0FBRyxXQUFXLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO09BQzlFLENBQUMsQ0FBQztNQUNILE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDOUQsQ0FBQztJQUNGLE1BQU0sWUFBWSx1QkFBdUI7TUFDdkMsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQyxFQUFFO1FBQ3pELE9BQU8sSUFBSSxDQUFDO09BQ2I7TUFDRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDLEVBQUU7UUFDdkQsT0FBTyxJQUFJLENBQUM7T0FDYjtNQUNELElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDNUIsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDLENBQUM7T0FDM0Q7TUFDRCxPQUFPLEtBQUssQ0FBQztLQUNkLENBQUM7SUFDRixNQUFNLGFBQWEsZ0RBQWdEO01BQ2pFLE1BQU0sUUFBUSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDL0IsTUFBTSxrQkFBa0IsUUFBUSxLQUFLLFlBQVksQ0FBQztNQUNsRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxFQUFFO1FBQzlCLE9BQU8sTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztPQUMvQztNQUNELElBQUksS0FBSyxFQUFFO1FBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRTtVQUN2QixLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRTtZQUN2QixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUU7Y0FDckIsTUFBTSxRQUFRLGVBQWUsR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7Y0FDcEYsTUFBTSxnQkFBZ0IsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztjQUNwRCxNQUFNLGVBQWUsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztjQUMzRCxJQUFJLFlBQVksSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUU7Z0JBQzdDLFNBQVM7ZUFDVjtjQUNELElBQUksT0FBTyxJQUFJLFlBQVksSUFBSSxDQUFDLE1BQU0sTUFBTSxFQUFFO2dCQUM1QyxPQUFPLEtBQUssQ0FBQztlQUNkO2NBQ0QsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLE1BQU0sTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDekYsT0FBTyxLQUFLLENBQUM7ZUFDZDthQUNGO1dBQ0Y7U0FDRixNQUFNO1VBQ0wsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxJQUFJLGVBQWUsR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Y0FDbkYsT0FBTyxJQUFJLENBQUM7YUFDYjtXQUNGO1NBQ0Y7T0FDRjtNQUNELE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQztJQUNGLE1BQU0sWUFBWSxtQ0FBbUM7TUFDbkQsTUFBTSxhQUFhLEVBQUUsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDMUMsTUFBTSxNQUFNLEVBQUUsSUFBSSxDQUFDO01BQ25CLElBQUksVUFBVSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNuQyxLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO1VBQzFDLE1BQU0sU0FBUyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDN0IsSUFBSSxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQzNKLE1BQU0sVUFBVSxNQUFNLFFBQVEsQ0FBQztZQUMvQixJQUFJLE9BQU8sRUFBRTtjQUNYLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxFQUFFLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7a0JBQ3pELE9BQU87aUJBQ1I7ZUFDRjthQUNGO1lBQ0QsT0FBTyxNQUFNLENBQUM7V0FDZjtTQUNGO09BQ0Y7TUFDRCxPQUFPLFNBQVMsQ0FBQztLQUNsQixDQUFDO0lBQ0YsTUFBTSxVQUFVLHVDQUF1QztNQUNyRCxJQUFJLElBQUksRUFBRTtRQUNSLE9BQU8sWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztPQUN4RDtNQUNELE9BQU8sTUFBTSxVQUFVLFFBQVEsRUFBRSxDQUFDO01BQ2xDLElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRTtRQUNuRCxPQUFPLElBQUksQ0FBQztPQUNiO01BQ0QsTUFBTSxZQUFZLE1BQU0sVUFBVSxTQUFTLEVBQUUsQ0FBQztNQUM5QyxJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUU7UUFDdEIsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1VBQ3hELE9BQU8sSUFBSSxDQUFDO1NBQ2I7T0FDRjtNQUNELE9BQU8sS0FBSyxDQUFDO0tBQ2QsQ0FBQztJQUNGLE1BQU0sV0FBVyx5QkFBeUI7TUFDeEMsTUFBTSxxQkFBcUIsRUFBRSxDQUFDO01BQzlCLE1BQU0sYUFBYSxFQUFFLENBQUM7TUFDdEIsTUFBTSxlQUFlLE1BQU0sVUFBVSxTQUFTLEVBQUUsQ0FBQztNQUNqRCxNQUFNLElBQUksVUFBVSxDQUFDLFlBQVksRUFBRSxRQUFRO1FBQ3pDLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7VUFDckMsTUFBTSxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUN0QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRTtZQUM1RCxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLGtCQUFrQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDL0I7U0FDRjtPQUNGLEVBQUUsTUFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDekIsT0FBTyxrQkFBa0IsQ0FBQztLQUMzQixDQUFDO0lBQ0YsTUFBTSxVQUFVLG1CQUFtQjtNQUNqQyxNQUFNLFNBQVMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksUUFBUSxDQUFDLE1BQU0sUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ3RFLE1BQU0sUUFBUSxlQUFlLFNBQVMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztNQUN0RyxPQUFPLFFBQVEsS0FBSyxDQUFDLE1BQU0sVUFBVSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsU0FBUyxDQUFDLFlBQVksUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztLQUNwTCxDQUFDO0lBQ0YsTUFBTSxXQUFXLGtCQUFrQjtNQUNqQyxNQUFNLGFBQWEsTUFBTSxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUM5QyxNQUFNLE1BQU0sTUFBTSxJQUFJLENBQUM7TUFDdkIsSUFBSSxVQUFVLElBQUksTUFBTSxVQUFVLFdBQVcsRUFBRSxFQUFFO1FBQy9DLE1BQU0sWUFBWSxNQUFNLFVBQVUsU0FBUyxFQUFFLENBQUM7UUFDOUMsTUFBTSxVQUFVLFlBQVksQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDN0MsS0FBSyxJQUFJLElBQUksVUFBVSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7VUFDL0MsTUFBTSxTQUFTLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDN0IsT0FBTyxJQUFJLENBQUM7V0FDYjtVQUNELEtBQUssSUFBSSxJQUFJLE9BQU8sT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVDLElBQUksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sU0FBUyxDQUFDLEVBQUU7Y0FDdkMsT0FBTyxJQUFJLENBQUM7YUFDYjtXQUNGO1NBQ0Y7T0FDRjtNQUNELE9BQU8sS0FBSyxDQUFDO0tBQ2QsQ0FBQztJQUNGLE1BQU0saUJBQWlCLCtCQUErQixLQUFLLENBQUMsV0FBVyxFQUFFLGVBQWU7TUFDdEYsTUFBTSxlQUFlLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztNQUN4RCxJQUFJLE1BQU0sVUFBVSxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsWUFBWSxDQUFDLEVBQUU7UUFDNUQsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7T0FDM0IsTUFBTTtRQUNMLE9BQU8sR0FBRyxDQUFDO09BQ1o7S0FDRixFQUFFLEVBQUUsQ0FBQyxDQUFDOztJQUVQLE1BQU0sT0FBTyxNQUFNLENBQUM7SUFDcEIsTUFBTSxhQUFhLHlCQUF5QjtNQUMxQyxPQUFPLGFBQWEsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztLQUM3QyxDQUFDO0lBQ0YsTUFBTSwwQkFBMEIsUUFBUTtNQUN0QyxNQUFNLFFBQVEsRUFBRSxDQUFDO01BQ2pCLElBQUksV0FBVyxJQUFJLENBQUM7TUFDcEIsT0FBTyxRQUFRLEVBQUU7UUFDZixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLEtBQUssS0FBSyxJQUFJLElBQUksUUFBUSxXQUFXLE9BQU8sR0FBRyxDQUFDLEVBQUU7VUFDbEYsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1VBQ3pCLEtBQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3RCO1FBQ0QsV0FBVyxRQUFRLFdBQVcsQ0FBQztPQUNoQztNQUNELE9BQU8sS0FBSyxDQUFDO0tBQ2QsQ0FBQztJQUNGLE1BQU0sd0JBQXdCLFFBQVE7TUFDcEMsT0FBTyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztLQUNqRCxDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsUUFBUTtNQUNoQyxJQUFJLElBQUksRUFBRTtRQUNSLE1BQU0sU0FBUyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0MsS0FBSyxJQUFJLFdBQVcsTUFBTSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsV0FBVyxNQUFNLEtBQUssRUFBRSxFQUFFO1VBQ3hFLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sUUFBUSxDQUFDO1dBQ2pCO1NBQ0Y7T0FDRjtNQUNELE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQztJQUNGLE1BQU0sdUJBQXVCLFFBQVE7TUFDbkMsTUFBTSxpQkFBaUIsWUFBWSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDcEQsUUFBUSxDQUFDLGNBQWMsRUFBRTtRQUN2QixNQUFNLFFBQVE7UUFDZCxrQkFBa0IsR0FBRztRQUNyQixpQkFBaUIsY0FBYztPQUNoQyxDQUFDLENBQUM7TUFDSCxJQUFJLElBQUksRUFBRTtRQUNSLFFBQVEsQ0FBQyxjQUFjLEVBQUUsWUFBWSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztPQUN2RDtNQUNELE9BQU8sY0FBYyxDQUFDO0tBQ3ZCLENBQUM7SUFDRixNQUFNLDZCQUE2QixzQkFBc0I7TUFDdkQsTUFBTSxXQUFXLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLENBQUM7TUFDdkQsSUFBSSxRQUFRLElBQUksUUFBUSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDaEQsUUFBUSxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQzNCO01BQ0QsT0FBTyxRQUFRLENBQUM7S0FDakIsQ0FBQztJQUNGLE1BQU0sMkJBQTJCLGVBQWUsWUFBWSxJQUFJLEtBQUs7TUFDbkUsTUFBTSxNQUFNLE1BQU0sSUFBSSxFQUFFLFlBQVksTUFBTSxVQUFVLENBQUM7TUFDckQsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMvQixlQUFlLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztPQUN2RSxNQUFNO1FBQ0wsTUFBTSxNQUFNLFNBQVMsT0FBTyxFQUFFLENBQUM7UUFDL0IsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDO1FBQzFDLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQztRQUNwQyxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUM7UUFDdEMsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDO1FBQ2hDLE1BQU0sV0FBVywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkIsSUFBSSxjQUFjLEtBQUssUUFBUSxJQUFJLFdBQVcsR0FBRyxDQUFDLEVBQUU7VUFDbEQsR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN6QztRQUNELElBQUksWUFBWSxLQUFLLFFBQVEsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFO1VBQzlDLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDckM7UUFDRCxJQUFJLEtBQUssSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtVQUMvQixpQkFBaUIsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsU0FBUyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDdkI7S0FDRixDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsZUFBZSxZQUFZLElBQUksS0FBSztNQUMvRCxNQUFNLE1BQU0sTUFBTSxJQUFJLEVBQUUsWUFBWSxNQUFNLFVBQVUsQ0FBQztNQUNyRCxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ1QsT0FBTyx1QkFBdUIsQ0FBQyxNQUFNLFFBQVEsRUFBRSxFQUFFLFNBQVMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsSUFBSSxFQUFFO1VBQ1QsT0FBTyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQy9CLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7V0FDbkQ7U0FDRjtPQUNGLE1BQU07UUFDTCx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO09BQ25EO0tBQ0YsQ0FBQztJQUNGLE1BQU0sMkJBQTJCLHdDQUF3QztNQUN2RSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7TUFDWCxNQUFNLE1BQU0sTUFBTSxJQUFJLENBQUM7TUFDdkIsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLE1BQU0sT0FBTyxDQUFDLENBQUMsQ0FBQztNQUM3RSxJQUFJLEtBQUssSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUMvQixDQUFDLEtBQUssVUFBVSxXQUFXLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQUM7T0FDL0csTUFBTTtRQUNMLGdCQUFnQixDQUFDLFlBQVksUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDbkQsSUFBSSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtVQUMzQixDQUFDLEtBQUssVUFBVSxXQUFXLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDL0csTUFBTTtVQUNMLEdBQUcsWUFBWSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUM3QztPQUNGO0tBQ0YsQ0FBQztJQUNGLE1BQU0sYUFBYSxzQkFBc0I7TUFDdkMsVUFBVSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDN0IsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxzQ0FBc0MsaUNBQWlDO01BQzNFLElBQUksRUFBRSxDQUFDO01BQ1AsTUFBTSxzQkFBc0IsS0FBSyxDQUFDLFdBQVcsRUFBRSw0QkFBNEI7UUFDekUsT0FBTyxVQUFVLENBQUMsVUFBVSxFQUFFLFVBQVUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7T0FDNUQsRUFBRSxjQUFjLENBQUMsQ0FBQztNQUNuQixNQUFNLE1BQU0sQ0FBQyxLQUFLLG1CQUFtQixjQUFjLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDO01BQy9GLE9BQU8sVUFBVSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDbEUsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLDZEQUE2RDtNQUNuRixNQUFNLFlBQVksTUFBTSxVQUFVLENBQUM7TUFDbkMsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLE1BQU0sZUFBZSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsRUFBRSxjQUFjLFVBQVUsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7TUFDbkksTUFBTSxpQkFBaUIsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7TUFDeEUsTUFBTSxnQkFBZ0IsUUFBUSxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ3JHLElBQUksYUFBYSxPQUFPLEdBQUcsQ0FBQyxFQUFFO1FBQzVCLE1BQU0sbUJBQW1CLFVBQVUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFDLFNBQVMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDeEQsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM3QixPQUFPLFFBQVEsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7T0FDeEMsTUFBTTtRQUNMLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN4QjtLQUNGLENBQUM7SUFDRixNQUFNLG1CQUFtQix3QkFBd0I7TUFDL0MsSUFBSSxjQUFjLENBQUM7TUFDbkIsTUFBTSxZQUFZLE1BQU0sVUFBVSxDQUFDO01BQ25DLE1BQU0sYUFBYSxNQUFNLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzlDLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDZixPQUFPO09BQ1I7TUFDRCxNQUFNLGVBQWUsU0FBUyxPQUFPLEVBQUUsQ0FBQztNQUN4QyxJQUFJLFNBQVMsWUFBWSxZQUFZLENBQUM7TUFDdEMsTUFBTSxZQUFZLFlBQVksZUFBZSxDQUFDO01BQzlDLE1BQU0sT0FBTyxTQUFTLFVBQVUsQ0FBQztNQUNqQyxpQkFBaUIsdUJBQXVCLENBQUMsTUFBTSxRQUFRLEVBQUUsRUFBRSxTQUFTLFNBQVMsRUFBRSxDQUFDLENBQUM7TUFDakYsTUFBTSxnQkFBZ0IsK0JBQStCLENBQUM7TUFDdEQsSUFBSSxJQUFJLElBQUksTUFBTSxHQUFHLENBQUMsSUFBSSxNQUFNLEdBQUcsSUFBSSxPQUFPLElBQUksYUFBYSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxhQUFhLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUN4SSxNQUFNLFdBQVcsU0FBUyxZQUFZLEVBQUUsQ0FBQztRQUN6QyxZQUFZLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLE1BQU0sU0FBUyxDQUFDLE1BQU0sSUFBSSxFQUFFLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxRCxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQixNQUFNLFVBQVUsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEMsU0FBUyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7T0FDcEMsTUFBTTtRQUNMLElBQUksV0FBVyxjQUFjLEdBQUcsaUJBQWlCLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3pFLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLFFBQVEsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxRQUFRLEtBQUssTUFBTSxJQUFJLEVBQUU7VUFDbkcsaUJBQWlCLFVBQVUsQ0FBQyxNQUFNLE9BQU8sRUFBRSxFQUFFLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUM3RSxXQUFXLGNBQWMsV0FBVyxDQUFDO1VBQ3JDLFlBQVksV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1VBQ3hDLFNBQVMsQ0FBQyxDQUFDO1VBQ1gsTUFBTSxVQUFVLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1NBQ3BELE1BQU07VUFDTCxNQUFNLFVBQVUsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDcEQ7UUFDRCxTQUFTLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztPQUMvQztLQUNGLENBQUM7SUFDRixNQUFNLG9CQUFvQixpQ0FBaUM7TUFDekQsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLE1BQU0sWUFBWSxNQUFNLFVBQVUsQ0FBQztNQUNuQyxJQUFJLGtCQUFrQixLQUFLLENBQUM7TUFDNUIsTUFBTSxhQUFhLE1BQU0sVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDOUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUNmLE9BQU87T0FDUjtNQUNELE1BQU0sTUFBTSxTQUFTLE9BQU8sRUFBRSxDQUFDO01BQy9CLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQztNQUNyQyxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUM7TUFDL0IsSUFBSSxPQUFPLFNBQVMsQ0FBQztNQUNyQixJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUN2QixJQUFJLE1BQU0sS0FBSyxTQUFTLEtBQUssT0FBTyxFQUFFO1VBQ3BDLGtCQUFrQixJQUFJLENBQUM7U0FDeEI7UUFDRCxPQUFPLElBQUksV0FBVyxDQUFDO09BQ3hCO01BQ0QsTUFBTSxVQUFVLEVBQUUsQ0FBQztNQUNuQixJQUFJLFVBQVUsQ0FBQztNQUNmLE9BQU8sSUFBSSxFQUFFO1FBQ1gsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1VBQ2hELGFBQWEsSUFBSSxDQUFDO1VBQ2xCLE1BQU07U0FDUDtRQUNELElBQUksSUFBSSxZQUFZLEVBQUU7VUFDcEIsa0JBQWtCLElBQUksQ0FBQztTQUN4QjtRQUNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLE9BQU8sSUFBSSxXQUFXLENBQUM7T0FDeEI7TUFDRCxJQUFJLENBQUMsVUFBVSxFQUFFO1FBQ2YsT0FBTztPQUNSO01BQ0QsSUFBSSxlQUFlLEVBQUU7UUFDbkIsTUFBTSxXQUFXLFNBQVMsWUFBWSxFQUFFLENBQUM7UUFDekMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkIsSUFBSSxjQUFjLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4RCxjQUFjLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqQyxNQUFNLFVBQVUsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFELFNBQVMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO09BQ3BDLE1BQU07UUFDTCxNQUFNLGlCQUFpQix1QkFBdUIsQ0FBQyxNQUFNLFFBQVEsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzdFLE1BQU0sb0JBQW9CLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDMUQsd0JBQXdCLENBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLGNBQWMsS0FBSyxJQUFJLElBQUksY0FBYyxLQUFLLEtBQUssQ0FBQyxHQUFHLGNBQWMsR0FBRyxVQUFVLENBQUMsQ0FBQztRQUN4SSxNQUFNLG9CQUFvQixlQUFlLENBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RHLE1BQU0sZ0JBQWdCLG1DQUFtQyxDQUFDLE9BQU8sT0FBTyxDQUFDLGlCQUFpQixRQUFRLEVBQUUsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDMUgsSUFBSSxjQUFjLEVBQUU7VUFDbEIsd0JBQXdCLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN6RDtRQUNELFNBQVMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlDLElBQUksR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7VUFDM0IsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDeEI7T0FDRjtLQUNGLENBQUM7SUFDRixNQUFNLHdCQUF3QixnQ0FBZ0M7TUFDNUQsTUFBTSxZQUFZLE1BQU0sVUFBVSxFQUFFLE9BQU8sTUFBTSxRQUFRLEVBQUUsQ0FBQztNQUM1RCxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQzlDLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxJQUFJLE9BQU8sS0FBSyxFQUFFLEtBQUssU0FBUyxZQUFZLEVBQUUsSUFBSSxTQUFTLFNBQVMsRUFBRSxVQUFVLEtBQUssSUFBSSxFQUFFO1FBQzNHLG9CQUFvQixDQUFDLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDbkY7TUFDRCxJQUFJLE9BQU8sS0FBSyxFQUFFLElBQUksT0FBTyxLQUFLLEVBQUUsRUFBRTtRQUNwQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsdUJBQXVCLENBQUMsSUFBSSxFQUFFLFNBQVMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ25GO0tBQ0YsQ0FBQztJQUNGLE1BQU0sZUFBZSxXQUFXLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxRQUFRLENBQUMsT0FBTyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEYsTUFBTSxVQUFVLFVBQVU7TUFDeEIsTUFBTSxHQUFHLENBQUMsaUJBQWlCLEVBQUUsS0FBSztRQUNoQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLE1BQU0sVUFBVSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztPQUNoRyxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsZUFBZTtNQUN2QyxNQUFNLGlCQUFpQixvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUNuRCxNQUFNLFlBQVksbUNBQW1DLENBQUMsV0FBVyxFQUFFLGNBQWMsSUFBSSxDQUFDLENBQUM7TUFDdkYsT0FBTztRQUNMLGNBQWM7UUFDZCxlQUFlLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO09BQzNDLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSx5QkFBeUIsNkJBQTZCO01BQzFELE1BQU0sK0JBQStCLEdBQUcsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7TUFDdkUsUUFBUSxDQUFDLFlBQVksUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO01BQzNELFFBQVEsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO01BQzNDLE9BQU8sYUFBYSxDQUFDO0tBQ3RCLENBQUM7SUFDRixNQUFNLDZCQUE2QixzQkFBc0I7TUFDdkQsTUFBTSwrQkFBK0IsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztNQUN2RSxHQUFHLFdBQVcsQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDO01BQ25DLE9BQU8sYUFBYSxDQUFDO0tBQ3RCLENBQUM7SUFDRixNQUFNLGtCQUFrQixxQkFBcUI7TUFDM0MsTUFBTSxpQkFBaUIsTUFBTSxPQUFPLHNCQUFzQixFQUFFLENBQUM7TUFDN0QsT0FBTyxLQUFLLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztLQUNyRyxDQUFDO0lBQ0YsTUFBTSw0QkFBNEIsV0FBVztNQUMzQyxPQUFPLFdBQVcsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLHFCQUFxQixDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7S0FDdkUsQ0FBQzs7SUFFRixNQUFNLG1CQUFtQixFQUFFLENBQUM7SUFDNUIsTUFBTSxRQUFRLGNBQWMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdEMsTUFBTSxxQkFBcUIsZ0JBQWdCO01BQ3pDLE1BQU0sUUFBUSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNyQyxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO09BQzdCO01BQ0QsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNuQyxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0Isa0JBQWtCO01BQ3RDLElBQUksS0FBSyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxFQUFFO1FBQ2pDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRO1VBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNkLENBQUMsQ0FBQztPQUNKO0tBQ0YsQ0FBQztJQUNGLGtCQUFrQixDQUFDLEtBQUssRUFBRSxVQUFVO01BQ2xDLE1BQU0sTUFBTSxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7TUFDdEMsTUFBTSxnQkFBZ0IsVUFBVSxPQUFPO1FBQ3JDLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDO1FBQ2pDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDaEQsQ0FBQztNQUNGLE1BQU0sVUFBVSxnQkFBZ0I7UUFDOUIsTUFBTSxRQUFRLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sTUFBTSxlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN2QyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEIsTUFBTSxDQUFDLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ2pDLFlBQVksUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7VUFDL0IsWUFBWSxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztVQUMvQixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7U0FDckIsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLElBQUksQ0FBQyxHQUFHLFVBQVUsRUFBRTtRQUNsQixNQUFNLFNBQVMsTUFBTSxVQUFVLGtCQUFrQixFQUFFLENBQUM7UUFDcEQsTUFBTSxZQUFZLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsT0FBTztVQUN2QixPQUFPLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNuQyxDQUFDLENBQUM7T0FDSjtLQUNGLENBQUMsQ0FBQzs7SUFFSCxNQUFNLGlCQUFpQjtNQUNyQixZQUFZO01BQ1osV0FBVztNQUNYLE9BQU87TUFDUCxVQUFVO01BQ1YsWUFBWTtLQUNiLENBQUM7SUFDRixNQUFNLGdCQUFnQixPQUFPLFFBQVEsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxRQUFRLFVBQVUsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4SCxNQUFNLDZCQUE2QixXQUFXLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxPQUFPLEtBQUssTUFBTSxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pJLE1BQU0sNEJBQTRCLHVCQUF1QjtNQUN2RCxNQUFNLGFBQWEsU0FBUyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDekMsT0FBTyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsMEJBQTBCLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztLQUN6RixDQUFDO0lBQ0YsTUFBTSw2QkFBNkIsY0FBYyxZQUFZLENBQUMsR0FBRyxFQUFFLGFBQWEsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQy9HLE1BQU0seUJBQXlCLGNBQWM7TUFDM0MsT0FBTyxZQUFZLENBQUMsR0FBRyxFQUFFLGFBQWEsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsSUFBSSxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FBQztLQUM5SSxDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsT0FBTyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRixNQUFNLHlCQUF5QixhQUFhO01BQzFDLE1BQU0sU0FBUyxTQUFTLGtCQUFrQixFQUFFLENBQUM7TUFDN0MsTUFBTSxNQUFNLFNBQVMsT0FBTyxFQUFFLENBQUM7TUFDL0IsSUFBSSxTQUFTLFlBQVksRUFBRSxFQUFFO1FBQzNCLE9BQU8sRUFBRSxDQUFDO09BQ1g7TUFDRCxJQUFJLE1BQU0sT0FBTyxLQUFLLENBQUMsRUFBRTtRQUN2QixPQUFPLDBCQUEwQixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQztPQUMzRyxNQUFNO1FBQ0wsTUFBTSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sMEJBQTBCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pGLE1BQU0sT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN0RixNQUFNLFNBQVMsTUFBTSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzFDO0tBQ0YsQ0FBQztJQUNGLE1BQU0sNEJBQTRCLGFBQWEsUUFBUSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5SCxNQUFNLGdDQUFnQyxhQUFhLFFBQVEsQ0FBQyxTQUFTLGtCQUFrQixFQUFFLEVBQUUsa0JBQWtCLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDOztJQUU5SCxNQUFNLFNBQVMsS0FBSyxLQUFLLENBQUM7SUFDMUIsTUFBTSxnQkFBZ0IsUUFBUSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNySCxNQUFNLHFCQUFxQix1QkFBdUI7TUFDaEQsS0FBSyxJQUFJLFVBQVUsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUNoRSxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxVQUFVLENBQUMsT0FBTyxLQUFLLENBQUMsRUFBRTtVQUNqRCxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsRUFBRTtVQUN0RCxPQUFPLE9BQU8sQ0FBQztTQUNoQjtPQUNGO01BQ0QsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsd0JBQXdCO01BQ2pELE1BQU0sZUFBZSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDMUMsTUFBTSxpQkFBaUIsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUMvRCxNQUFNLGlCQUFpQixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQy9ELElBQUksY0FBYyxJQUFJLGNBQWMsRUFBRTtRQUNwQyxNQUFNLGNBQWMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDaEUsTUFBTSxjQUFjLGtCQUFrQixDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM1RCxJQUFJLFlBQVksUUFBUSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsRUFBRTtVQUNsRCxLQUFLLElBQUksVUFBVSxXQUFXLFlBQVksRUFBRSxPQUFPLElBQUksT0FBTyxLQUFLLFdBQVcsR0FBRztZQUMvRSxNQUFNLGFBQWEsT0FBTyxDQUFDO1lBQzNCLFVBQVUsT0FBTyxZQUFZLENBQUM7WUFDOUIsV0FBVyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7V0FDckM7VUFDRCxNQUFNLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1VBQy9CLEtBQUssS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLFdBQVcsV0FBVyxDQUFDLEVBQUUsUUFBUTtZQUNyRCxXQUFXLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUMvQixDQUFDLENBQUM7VUFDSCxPQUFPLFdBQVcsQ0FBQztTQUNwQjtPQUNGO01BQ0QsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsZ0NBQWdDO01BQ3BELElBQUksRUFBRSxDQUFDO01BQ1AsSUFBSSxJQUFJLElBQUksTUFBTSxlQUFlLEtBQUssS0FBSyxFQUFFO1FBQzNDLE1BQU0sVUFBVSxDQUFDLEtBQUssa0JBQWtCLENBQUMsTUFBTSxFQUFFLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUM3SCxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO09BQzdFO0tBQ0YsQ0FBQztJQUNGLE1BQU0sbUJBQW1CLHVCQUF1QjtNQUM5QyxJQUFJLE1BQU0sbUJBQW1CLEVBQUU7UUFDN0IsTUFBTSxXQUFXLE1BQU0sTUFBTSxHQUFHLFVBQVUsR0FBRyxHQUFHLENBQUM7UUFDakQsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxhQUFhO1VBQzlDLElBQUksYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN2RCxNQUFNLENBQUMsTUFBTSxPQUFPLEVBQUUsa0JBQWtCO2NBQ3RDLEdBQUcsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDbkMsQ0FBQyxDQUFDO1dBQ0o7U0FDRixDQUFDLENBQUM7T0FDSjtLQUNGLENBQUM7SUFDRixNQUFNLHVCQUF1QiwyQkFBMkI7TUFDdEQsTUFBTSxDQUFDLElBQUksV0FBVyxFQUFFLFFBQVE7UUFDOUIsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUU7VUFDdkIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1dBQ2Y7VUFDRCxJQUFJLElBQUksY0FBYyxFQUFFLEVBQUU7WUFDeEIsb0JBQW9CLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztXQUM3QztTQUNGO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sa0JBQWtCLGVBQWU7TUFDckMsSUFBSSxJQUFJLFNBQVMsS0FBSyxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQUU7UUFDakUsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO09BQ3hCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sV0FBVyxlQUFlLFFBQVEsQ0FBQyxFQUFFLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzlFLE1BQU0sYUFBYSxzQkFBc0IsUUFBUTtNQUMvQyxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQ2hDLElBQUksSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ3JDLElBQUksZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7T0FDL0I7TUFDRCxlQUFlLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzVCLENBQUM7O0lBRUYsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO01BQ2hDLEVBQUUsTUFBTSxFQUFFLEVBQUU7TUFDWixFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtNQUNwQixFQUFFLFNBQVMsRUFBRSxFQUFFO0tBQ2hCLENBQUMsQ0FBQztJQUNILE1BQU0sY0FBYyxvQkFBb0IsQ0FBQztJQUN6QyxNQUFNLFNBQVMsS0FBSyxLQUFLLENBQUM7SUFDMUIsTUFBTSxTQUFTLE1BQU0sQ0FBQztJQUN0QixNQUFNLG1CQUFtQixRQUFRLGNBQWMsS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUM7SUFDcEUsTUFBTSx3QkFBd0IsdUJBQXVCLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLEtBQUssTUFBTSxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUgsTUFBTSxlQUFlLG9CQUFvQjtNQUN2QyxJQUFJLFlBQVksR0FBRyxDQUFDLEtBQUssR0FBRyxnQkFBZ0IsR0FBRyxjQUFjLENBQUMsQ0FBQztNQUMvRCxJQUFJLFNBQVMsR0FBRyxDQUFDLEtBQUssR0FBRyxhQUFhLEdBQUcsV0FBVyxDQUFDLENBQUM7TUFDdEQsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDMUIsTUFBTSxVQUFVLFNBQVMsV0FBVyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxLQUFLLElBQUksTUFBTSxFQUFFO1VBQ3BCLE1BQU0sRUFBRSxDQUFDO1NBQ1Y7UUFDRCxZQUFZLFNBQVMsV0FBVyxDQUFDLE1BQU0sR0FBRyxPQUFPLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDO09BQ3ZFO01BQ0QsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxJQUFJLE1BQU0sSUFBSSxTQUFTLEtBQUssT0FBTyxFQUFFO1FBQ25FLFlBQVksSUFBSSxhQUFhLENBQUMsU0FBUyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksU0FBUyxDQUFDO09BQzVFO01BQ0QsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNqRCxZQUFZLElBQUksYUFBYSxDQUFDLFNBQVMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLFNBQVMsQ0FBQztPQUM1RTtNQUNELE9BQU8sU0FBUyxDQUFDO0tBQ2xCLENBQUM7SUFDRixNQUFNLDBCQUEwQixpQkFBaUI7TUFDL0MsTUFBTSxPQUFPLEtBQUssR0FBRyxZQUFZLEdBQUcsV0FBVyxDQUFDO01BQ2hELE1BQU0sWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDN0IsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLEVBQUU7UUFDdkMsSUFBSSxJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUU7VUFDMUIsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDO1NBQ3JDLE1BQU07VUFDTCxPQUFPLFNBQVMsQ0FBQztTQUNsQjtPQUNGO01BQ0QsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxTQUFTLDRCQUE0QjtNQUN6QyxJQUFJLEVBQUUsQ0FBQztNQUNQLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDeEMsQ0FBQyxLQUFLLElBQUksV0FBVyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzNGLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzFCLE9BQU8sT0FBTyxDQUFDO0tBQ2hCLENBQUM7SUFDRixNQUFNLG1CQUFtQixrQ0FBa0M7TUFDekQsTUFBTSxRQUFRLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3pDLE1BQU0sVUFBVSxZQUFZLFFBQVEsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUM5RCxNQUFNLFdBQVcsSUFBSSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDbEUsTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztNQUMxQixJQUFJLElBQUksRUFBRTtRQUNSLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDekIsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztPQUN6QixNQUFNO1FBQ0wsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN4QixRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQzFCO01BQ0QsT0FBTyxPQUFPLElBQUksQ0FBQztLQUNwQixDQUFDO0lBQ0YsTUFBTSx5QkFBeUIsa0JBQWtCLE1BQU0sTUFBTSxJQUFJLElBQUksU0FBUyxLQUFLLEdBQUcsQ0FBQztJQUN2RixNQUFNLGFBQWEsc0JBQXNCO01BQ3ZDLE1BQU0sYUFBYSxJQUFJLFdBQVcsQ0FBQztNQUNuQyxJQUFJLFlBQVksQ0FBQztNQUNqQixNQUFNLE1BQU0sRUFBRSxJQUFJLENBQUM7TUFDbkIsTUFBTSxrQkFBa0Isa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDL0MsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDekIsSUFBSSxVQUFVLEtBQUssR0FBRyxRQUFRLEVBQUUsRUFBRTtVQUNoQyxJQUFJLENBQUMsTUFBTSxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDLEVBQUU7WUFDMUQsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxFQUFFLFFBQVE7Y0FDcEMsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLFNBQVMsWUFBWSxFQUFFLENBQUMsRUFBRTtnQkFDN0QsSUFBSSxDQUFDLFlBQVksRUFBRTtrQkFDakIsZUFBZSxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztrQkFDbEQsR0FBRyxXQUFXLENBQUMsWUFBWSxFQUFFLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQzNELE1BQU07a0JBQ0wsWUFBWSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ2hDO2VBQ0YsTUFBTTtnQkFDTCxlQUFlLElBQUksQ0FBQztlQUNyQjthQUNGLENBQUMsQ0FBQztXQUNKO1NBQ0Y7T0FDRjtNQUNELElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFO1FBQ3pELE9BQU87T0FDUjtNQUNELEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztLQUN4QixDQUFDO0lBQ0YsTUFBTSwyQkFBMkIsdUJBQXVCO01BQ3RELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2xCLE9BQU87VUFDTCxNQUFNLEtBQUs7VUFDWCxPQUFPLElBQUk7U0FDWixDQUFDO09BQ0gsTUFBTTtRQUNMLE9BQU87VUFDTCxJQUFJO1VBQ0osT0FBTyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQztTQUNoQyxDQUFDO09BQ0g7S0FDRixDQUFDO0lBQ0YsTUFBTSxvQ0FBb0MsY0FBYztNQUN0RCxJQUFJLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDdEMsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QixHQUFHLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUM7T0FDdkM7S0FDRixDQUFDO0lBQ0YsTUFBTSxlQUFlLHlDQUF5QztNQUM1RCxJQUFJLGlCQUFpQixLQUFLLENBQUM7TUFDM0IsTUFBTSxDQUFDLE1BQU0sT0FBTyxFQUFFLGlCQUFpQjtRQUNyQyxNQUFNOzs7U0FHTCxHQUFHLHdCQUF3QixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEQsTUFBTSx1QkFBdUIsbUJBQW1CLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3hFLElBQUksTUFBTSxlQUFlLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFO1VBQ25KLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDbEM7UUFDRCxpQkFBaUIsSUFBSSxDQUFDO09BQ3ZCLENBQUMsQ0FBQztNQUNILElBQUksY0FBYyxFQUFFO1FBQ2xCLGlDQUFpQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztPQUM3QztLQUNGLENBQUM7SUFDRixNQUFNLHlCQUF5Qix3QkFBd0I7TUFDckQsSUFBSSxJQUFJLEtBQUssY0FBYyxFQUFFO1FBQzNCLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLFVBQVUsQ0FBQyxFQUFFLE1BQU07VUFDNUQsTUFBTSxDQUFDLGNBQWMsRUFBRSxRQUFRLE1BQU0sSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1VBQ2xFLGlDQUFpQyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ25ELENBQUMsQ0FBQztPQUNKLE1BQU07UUFDTCx5QkFBeUIsQ0FBQyxNQUFNLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVM7VUFDOUQsTUFBTSxDQUFDLDZCQUE2QixDQUFDLE1BQU0sVUFBVSxDQUFDLEVBQUUsTUFBTSxZQUFZLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUNoSCxDQUFDLENBQUM7T0FDSjtLQUNGLENBQUM7SUFDRixNQUFNLDJCQUEyQix5Q0FBeUM7TUFDeEUsTUFBTSxNQUFNLEVBQUUsSUFBSSxDQUFDO01BQ25CLE1BQU0sZUFBZSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDdEMsTUFBTSxTQUFTLEVBQUUsT0FBTyxDQUFDO01BQ3pCLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxNQUFNLE9BQU8sQ0FBQyxJQUFJLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLGNBQWMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFO1FBQ3hKLFVBQVUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLE9BQU8sWUFBWSxRQUFRLEVBQUUsQ0FBQztPQUMvQjtNQUNELElBQUksQ0FBQyxNQUFNLGdCQUFnQixJQUFJLElBQUksSUFBSSxHQUFHLHlCQUF5QixDQUFDLElBQUksQ0FBQyxLQUFLLE9BQU8sRUFBRTtRQUNyRixPQUFPLFlBQVksS0FBSyxFQUFFLENBQUM7T0FDNUI7TUFDRCxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1FBQ2xGLE9BQU8sWUFBWSxLQUFLLEVBQUUsQ0FBQztPQUM1QjtNQUNELE1BQU0sTUFBTSxJQUFJLENBQUM7TUFDakIsTUFBTSxxQkFBcUIsTUFBTSxvQkFBb0IsQ0FBQztNQUN0RCxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLE9BQU8sS0FBSyxLQUFLLElBQUksU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7UUFDdEYsTUFBTSxrQkFBa0IsUUFBUSxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkgsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixNQUFNLENBQUMsZUFBZSxFQUFFLFFBQVEsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksS0FBSyxFQUFFLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMzRSxJQUFJLGVBQWUsT0FBTyxHQUFHLENBQUMsRUFBRTtVQUM5QixPQUFPLFlBQVksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3BDO09BQ0Y7TUFDRCxJQUFJLE1BQU0sT0FBTyxLQUFLLEtBQUssRUFBRTtRQUMzQixZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sQ0FBQyxNQUFNLFdBQVcsRUFBRSxpQkFBaUI7VUFDekMsTUFBTTs7O1dBR0wsR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1VBQ2hELElBQUksTUFBTSxlQUFlLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUU7WUFDdEksSUFBSSxRQUFRLEtBQUssT0FBTyxFQUFFO2NBQ3hCLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7Y0FDbEQsSUFBSSxZQUFZLEVBQUU7Z0JBQ2hCLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0sQ0FBQyxZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPO2tCQUN2QyxJQUFJLFVBQVUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUN4QixZQUFZLENBQUMsUUFBUSxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO21CQUN6QztpQkFDRixDQUFDLENBQUM7Z0JBQ0gsSUFBSSxRQUFRLEVBQUU7a0JBQ1osR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztrQkFDdkMsT0FBTztpQkFDUjtlQUNGO2FBQ0Y7WUFDRCxJQUFJLFdBQVcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2NBQzlCLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxDQUFDO2FBQzdDO1lBQ0QsSUFBSSxRQUFRLEtBQUssT0FBTyxJQUFJLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDLEtBQUssTUFBTSxFQUFFO2NBQzFHLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7Y0FDOUIsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO2NBQzdDLE9BQU87YUFDUjtZQUNELElBQUksUUFBUSxLQUFLLE9BQU8sRUFBRTtjQUN4QixHQUFHLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ2xDO1lBQ0QsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztXQUMvQjtTQUNGLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxNQUFNLFFBQVEsRUFBRSxTQUFTO1VBQzlCLFFBQVEsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztVQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUNqRSxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7V0FDN0I7U0FDRixDQUFDLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEMsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtVQUNyQyxNQUFNLFdBQVcsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7VUFDbkMsSUFBSSxDQUFDLFlBQVksb0JBQW9CLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDL0MsT0FBTyxZQUFZLEtBQUssRUFBRSxDQUFDO1dBQzVCO1NBQ0Y7T0FDRjtNQUNELElBQUksTUFBTSxPQUFPLEtBQUssTUFBTSxFQUFFO1FBQzVCLFVBQVUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLE9BQU8sWUFBWSxRQUFRLEVBQUUsQ0FBQztPQUMvQjtNQUNELE9BQU8sWUFBWSxLQUFLLEVBQUUsQ0FBQztLQUM1QixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsNENBQTRDO01BQ2pFLElBQUksVUFBVSxDQUFDO01BQ2YsSUFBSSxTQUFTLFdBQVcsRUFBRTtRQUN4QixNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxFQUFFLFNBQVMsV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUFFLFVBQVU7VUFDekUsSUFBSSxDQUFDLFVBQVUsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxHQUFHLEtBQUssUUFBUSxJQUFJLE1BQU0sR0FBRyxLQUFLLE1BQU0sRUFBRTtZQUN4RixNQUFNLFNBQVMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM5RCxJQUFJLE1BQU0sSUFBSSxNQUFNLE1BQU0sS0FBSyxLQUFLLEVBQUU7Y0FDcEMsYUFBYSxNQUFNLENBQUM7YUFDckI7V0FDRjtTQUNGLENBQUMsQ0FBQztPQUNKO01BQ0QsT0FBTyxVQUFVLENBQUM7S0FDbkIsQ0FBQztJQUNGLE1BQU0sNEJBQTRCLGlDQUFpQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsV0FBVztNQUMvSixNQUFNLFdBQVcsTUFBTSxJQUFJLGVBQWUsRUFBRSxDQUFDO01BQzdDLFFBQVEsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQzVCLE9BQU8sTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDMUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuQixNQUFNLGVBQWUsNEVBQTRFO01BQy9GLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztNQUNYLElBQUksU0FBUyxDQUFDO01BQ2QsSUFBSSxVQUFVLENBQUM7TUFDZixNQUFNLE1BQU0sTUFBTSxJQUFJLENBQUM7TUFDdkIsSUFBSSxVQUFVLEVBQUU7UUFDZCxNQUFNLG1CQUFtQixVQUFVLFdBQVcsQ0FBQztRQUMvQyxLQUFLLElBQUksU0FBUyxTQUFTLFdBQVcsRUFBRSxNQUFNLElBQUksTUFBTSxLQUFLLGdCQUFnQixFQUFFLFNBQVMsTUFBTSxXQUFXLEVBQUU7VUFDekcsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztVQUNyQyxLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFDLFFBQVEseUJBQXlCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEUsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO2NBQ2xCLE1BQU07YUFDUDtXQUNGO1VBQ0QsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLFNBQVMsRUFBRTtjQUNiLEtBQUssWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzlCO1lBQ0QsSUFBSSxDQUFDLFVBQVUsRUFBRTtjQUNmLGFBQWEsS0FBSyxDQUFDO2FBQ3BCO1lBQ0QsWUFBWSxLQUFLLENBQUM7V0FDbkI7U0FDRjtRQUNELElBQUksS0FBSyxLQUFLLENBQUMsTUFBTSxNQUFNLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFO1VBQ3hELFlBQVksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUM7U0FDaEc7UUFDRCxJQUFJLFNBQVMsSUFBSSxVQUFVLEVBQUU7VUFDM0IsQ0FBQyxLQUFLLE1BQU0sV0FBVyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1VBQ2pHLFVBQVUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1VBQy9CLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzFCLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztXQUNoRDtTQUNGO09BQ0Y7TUFDRCxPQUFPLFNBQVMsQ0FBQztLQUNsQixDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsbUNBQW1DO01BQzlELE1BQU0sYUFBYSxFQUFFLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzFDLE1BQU0sU0FBUyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0IsTUFBTSxNQUFNLEVBQUUsSUFBSSxDQUFDO01BQ25CLE1BQU0sWUFBWSxFQUFFLFVBQVUsQ0FBQztNQUMvQixNQUFNLG9CQUFvQixhQUFhO1FBQ3JDLE1BQU0sYUFBYSxjQUFjLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sWUFBWSxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztPQUMzRixDQUFDO01BQ0YsTUFBTSx1QkFBdUIsUUFBUSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLEtBQUssUUFBUSxJQUFJLElBQUksR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDO01BQ2pJLE1BQU0scUJBQXFCLFFBQVEsTUFBTSxDQUFDLFVBQVUsRUFBRSxPQUFPLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQzFHLE1BQU0sVUFBVSxRQUFRO1FBQ3RCLE1BQU0sV0FBVyxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQztRQUN2QyxNQUFNLFVBQVUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsTUFBTSxxQkFBcUIsT0FBTyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsS0FBSyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZGLE1BQU0sYUFBYSxJQUFJLFdBQVcsQ0FBQztRQUNuQyxJQUFJLENBQUMsa0JBQWtCLElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1VBQ3RGLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxNQUFNLEtBQUssRUFBRTtVQUNmLElBQUksUUFBUSxPQUFPLEVBQUU7WUFDbkIsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtjQUN4QyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdEI7V0FDRjtTQUNGO1FBQ0QsTUFBTSxrQkFBa0I7VUFDdEIsV0FBVztVQUNYLGNBQWM7VUFDZCxVQUFVO1NBQ1gsQ0FBQztRQUNGLE1BQU0sQ0FBQyxlQUFlLEVBQUUsY0FBYztVQUNwQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLFVBQVUsSUFBSSxJQUFJLFdBQVcsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxXQUFXLENBQUMsS0FBSyxVQUFVLEVBQUU7WUFDN0osZ0JBQWdCLENBQUMsRUFBRSxFQUFFO2NBQ25CLE1BQU0sS0FBSztjQUNYLE9BQU8sSUFBSTtjQUNYLFFBQVEsTUFBTTtjQUNkLFFBQVEsRUFBRSxnQkFBZ0IsVUFBVSxFQUFFO2FBQ3ZDLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1dBQ3JCO1NBQ0YsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sU0FBUyxTQUFTO1FBQ3RCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELElBQUksSUFBSSxFQUFFO1VBQ1IsSUFBSSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsWUFBWSxHQUFHLFdBQVcsQ0FBQyxDQUFDO1VBQ25ELElBQUksb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDN0IsTUFBTSxHQUFHLENBQUMsS0FBSyxHQUFHLFlBQVksR0FBRyxXQUFXLENBQUMsQ0FBQztXQUMvQztVQUNELElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxPQUFPLEtBQUssQ0FBQyxFQUFFO1lBQzFDLE1BQU0sS0FBSyxHQUFHLElBQUksZ0JBQWdCLElBQUksSUFBSSxZQUFZLEdBQUcsSUFBSSxZQUFZLElBQUksSUFBSSxnQkFBZ0IsQ0FBQztXQUNuRztVQUNELEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztVQUN2QixPQUFPLEdBQUcsQ0FBQztTQUNaLE1BQU07VUFDTCxPQUFPLElBQUksQ0FBQztTQUNiO09BQ0YsQ0FBQztNQUNGLE1BQU0saUJBQWlCLE9BQU87UUFDNUIsSUFBSSxjQUFjLENBQUM7UUFDbkIsSUFBSSxZQUFZLENBQUM7UUFDakIsSUFBSSxjQUFjLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBQ2pFLElBQUksTUFBTSxNQUFNLEVBQUU7VUFDaEIsY0FBYyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7VUFDakMsaUJBQWlCLFlBQVksQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1VBQ3JELGVBQWUsWUFBWSxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztVQUM3QyxJQUFJLGNBQWMsS0FBSyxZQUFZLEVBQUU7WUFDbkMsaUJBQWlCLHVCQUF1QixDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMvRCxlQUFlLHVCQUF1QixDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM1RCxJQUFJLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUU7Y0FDNUQsTUFBTSxTQUFTLFFBQVEsS0FBSyxDQUFDLGNBQWMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztjQUM5RSxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7Z0JBQzVELE1BQU0sUUFBUTtnQkFDZCxpQkFBaUIsVUFBVTtlQUM1QixDQUFDLENBQUMsQ0FBQztjQUNKLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztjQUNiLE9BQU87YUFDUjtZQUNELElBQUkscUJBQXFCLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxjQUFjLENBQUMsRUFBRTtjQUM1RCxNQUFNLFNBQVMsUUFBUSxLQUFLLENBQUMsWUFBWSxVQUFVLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO2NBQ3pFLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtnQkFDN0QsTUFBTSxNQUFNO2dCQUNaLGlCQUFpQixVQUFVO2VBQzVCLENBQUMsQ0FBQyxDQUFDO2NBQ0osTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2NBQ2QsT0FBTzthQUNSO1lBQ0QsaUJBQWlCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRTtjQUNuRCxNQUFNLFFBQVE7Y0FDZCxpQkFBaUIsVUFBVTthQUM1QixDQUFDLENBQUM7WUFDSCxlQUFlLE1BQU0sQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRTtjQUMvQyxNQUFNLE1BQU07Y0FDWixpQkFBaUIsVUFBVTthQUM1QixDQUFDLENBQUM7WUFDSCxNQUFNLFNBQVMsR0FBRyxVQUFVLEVBQUUsQ0FBQztZQUMvQixNQUFNLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNyQyxNQUFNLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNsQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxTQUFTO2NBQzNCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSztnQkFDakIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRTtrQkFDM0QsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3RCO2VBQ0YsQ0FBQyxDQUFDO2FBQ0osQ0FBQyxDQUFDO1lBQ0gsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbEMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDaEMsaUJBQWlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixlQUFlLE1BQU0sRUFBRSxDQUFDO1dBQ3pCLE1BQU07WUFDTCxpQkFBaUIsZUFBZSxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztXQUNuRTtVQUNELFdBQVcsZUFBZSxHQUFHLGNBQWMsV0FBVyxHQUFHLGNBQWMsV0FBVyxHQUFHLGNBQWMsQ0FBQztVQUNwRyxXQUFXLFlBQVksR0FBRyxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztVQUN4RCxXQUFXLGFBQWEsR0FBRyxZQUFZLFdBQVcsR0FBRyxZQUFZLFdBQVcsR0FBRyxZQUFZLENBQUM7VUFDNUYsV0FBVyxVQUFVLEdBQUcsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pEO1FBQ0QsTUFBTSxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUztVQUNoQyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3hCLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixJQUFJLElBQUksRUFBRTtRQUNSLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ2hCLE1BQU0sTUFBTSxHQUFHLFVBQVUsRUFBRSxDQUFDO1VBQzVCLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQ3pCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQ3RCLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNyQixNQUFNO1VBQ0wsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RCO1FBQ0QsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkMsT0FBTztPQUNSO01BQ0QsSUFBSSxDQUFDLFNBQVMsWUFBWSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksa0JBQWtCLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRTtRQUN4RixpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsTUFBTSxXQUFXLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxFQUFFLGFBQWEsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3hJLEVBQUUsWUFBWSxFQUFFLENBQUM7T0FDbEIsTUFBTTtRQUNMLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQzVDO01BQ0Qsc0JBQXNCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztNQUN2QyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztLQUN4QyxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsbUNBQW1DO01BQ3hELElBQUksSUFBSSxJQUFJLEVBQUUsVUFBVSxXQUFXLEVBQUUsRUFBRTtRQUNyQyxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7T0FDckQ7S0FDRixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsNkNBQTZDO01BQ3BFLE9BQU8sd0JBQXdCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVc7UUFDOUYsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakMsT0FBTyxJQUFJLENBQUM7T0FDYixFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ1osQ0FBQzs7SUFFRixNQUFNLFNBQVMsS0FBSyxLQUFLLENBQUM7SUFDMUIsTUFBTSwrQkFBK0IsNkJBQTZCO01BQ2hFLE1BQU0saUNBQWlDLEtBQUs7UUFDMUMsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFO1VBQ2xFLE1BQU0sdUJBQXVCLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1VBQ2xFLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLG9CQUFvQixFQUFFO1lBQ3BELEdBQUcsU0FBUyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1dBQzFELE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxvQkFBb0IsRUFBRTtZQUN0RSxHQUFHLFNBQVMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDMUM7U0FDRjtPQUNGLENBQUM7TUFDRixJQUFJLE1BQU0sT0FBTyxLQUFLLE1BQU0sT0FBTyxNQUFNLElBQUksTUFBTSxPQUFPLGVBQWUsQ0FBQyxFQUFFO1FBQzFFLEtBQUssS0FBSyxDQUFDLElBQUksRUFBRSw4QkFBOEIsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMvRCw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QztLQUNGLENBQUM7SUFDRixNQUFNLGtDQUFrQyw2QkFBNkI7TUFDbkUsSUFBSSxNQUFNLE9BQU8sSUFBSSxNQUFNLE9BQU8sZ0JBQWdCLEVBQUU7UUFDbEQsTUFBTSxjQUFjLFFBQVEsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDOUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxNQUFNLE9BQU8sZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ2hLO0tBQ0YsQ0FBQztJQUNGLE1BQU0sY0FBYyw2QkFBNkI7TUFDL0MsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssTUFBTSxPQUFPLEtBQUssS0FBSyxJQUFJLE1BQU0sT0FBTyxLQUFLLEtBQUssQ0FBQyxFQUFFO1FBQ2xGLE1BQU0sY0FBYyxRQUFRLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzlDLG9CQUFvQixDQUFDLElBQUksRUFBRSxPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRyxNQUFNLHdCQUF3QixRQUFRLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxPQUFPLEtBQUssS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDaEgsR0FBRyxPQUFPLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDekM7S0FDRixDQUFDO0lBQ0YsTUFBTSxvQkFBb0Isb0NBQW9DO01BQzVELE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVTtRQUMzQixJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRTtVQUMxQixNQUFNLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxTQUFTO1lBQ3RELElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFO2NBQ3hCLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7YUFDNUU7V0FDRixDQUFDLENBQUM7U0FDSjtRQUNELGdCQUFnQixDQUFDLE1BQU0sSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztPQUM1QyxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsc0NBQXNDO01BQzdELE1BQU0sYUFBYSxJQUFJLFdBQVcsQ0FBQztNQUNuQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRTtRQUM3QyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO1VBQ2hELE9BQU87U0FDUjtPQUNGO01BQ0QsSUFBSSxNQUFNLG1CQUFtQixJQUFJLFVBQVUsRUFBRTtRQUMzQyxNQUFNLElBQUksVUFBVSxDQUFDLFVBQVUsRUFBRSxVQUFVO1VBQ3pDLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ3pDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzdDLE9BQU8sSUFBSSxDQUFDO1dBQ2IsTUFBTTtZQUNMLE9BQU8sS0FBSyxDQUFDO1dBQ2Q7U0FDRixDQUFDLENBQUM7T0FDSjtLQUNGLENBQUM7O0lBRUYsTUFBTSxTQUFTLEtBQUssS0FBSyxDQUFDO0lBQzFCLE1BQU0sY0FBYyxzQ0FBc0M7TUFDeEQsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxXQUFXLEVBQUU7UUFDNUUsTUFBTSx3QkFBd0Isd0JBQXdCLENBQUMsTUFBTSxPQUFPLENBQUMsQ0FBQztRQUN0RSxNQUFNLHNCQUFzQixPQUFPLENBQUMsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVyxXQUFXLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3JHLE9BQU8saUJBQWlCLENBQUMscUJBQXFCLEVBQUUsVUFBVSxDQUFDLElBQUksU0FBUyxDQUFDLFlBQVksUUFBUSxDQUFDLElBQUksV0FBVyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztPQUNoSixNQUFNO1FBQ0wsT0FBTyxLQUFLLENBQUM7T0FDZDtLQUNGLENBQUM7SUFDRixNQUFNLGNBQWMsNEJBQTRCO01BQzlDLE1BQU0sQ0FBQyxNQUFNLE9BQU8sRUFBRSxpQkFBaUI7UUFDckMsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7T0FDbkQsQ0FBQyxDQUFDO01BQ0gsSUFBSSxNQUFNLE9BQU8sRUFBRTtRQUNqQixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLElBQUksUUFBUSxFQUFFO1VBQ1osR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ2hEO09BQ0Y7S0FDRixDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsMEJBQTBCO01BQ2xELE1BQU0sYUFBYSxFQUFFLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzFDLE1BQU0sU0FBUyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0IsTUFBTSxjQUFjLENBQUMsSUFBSSxJQUFJLEVBQUUsVUFBVSxZQUFZLEVBQUUsQ0FBQztNQUN4RCxNQUFNLE1BQU0sRUFBRSxJQUFJLENBQUM7TUFDbkIsTUFBTSxZQUFZLEVBQUUsVUFBVSxDQUFDO01BQy9CLE1BQU0sbUJBQW1CLE1BQU0sTUFBTSxNQUFNLEtBQUs7UUFDOUMsSUFBSSxVQUFVLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRTtVQUM1QixHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNwQztRQUNELFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqQyxNQUFNLENBQUMsR0FBRyxXQUFXLEVBQUUsaUJBQWlCO1VBQ3RDLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3BELENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxHQUFHLFFBQVEsRUFBRSxTQUFTO1VBQzNCLE1BQU0sV0FBVyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1VBQzFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDaEMsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1dBQzdCO1NBQ0YsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0saUJBQWlCLHNCQUFzQjtRQUMzQyxJQUFJLFFBQVEsS0FBSyxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVTtVQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDN0IsT0FBTyxLQUFLLENBQUM7V0FDZDtVQUNELElBQUksR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxPQUFPLElBQUksQ0FBQyxNQUFNLGdCQUFnQixFQUFFO1lBQ3ZFLE9BQU8sSUFBSSxDQUFDO1dBQ2I7VUFDRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLFVBQVUsQ0FBQyxJQUFJLE1BQU0sVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUN2RSxPQUFPLElBQUksQ0FBQztXQUNiO1VBQ0QsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2RCxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDL0IsUUFBUSxJQUFJLENBQUM7WUFDYixPQUFPLEtBQUssQ0FBQztXQUNkO1VBQ0QsT0FBTyxJQUFJLENBQUM7U0FDYixDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQztPQUNkLENBQUM7TUFDRixNQUFNLG9CQUFvQixZQUFZO1FBQ3BDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1VBQ3RCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztVQUNyQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztVQUMxQixPQUFPLE9BQU8sQ0FBQztTQUNoQixNQUFNO1VBQ0wsT0FBTyxJQUFJLENBQUM7U0FDYjtPQUNGLENBQUM7TUFDRixNQUFNLGdCQUFnQiw0QkFBNEI7UUFDaEQsTUFBTSxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLGtCQUFrQixJQUFJLENBQUM7UUFDM0IsTUFBTSxXQUFXLE1BQU0sT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO1FBQy9DLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QyxNQUFNLDBCQUEwQixRQUFRLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RyxNQUFNLGlCQUFpQiw0Q0FBNEM7VUFDakUsTUFBTSw0QkFBNEIsd0JBQXdCLENBQUMsTUFBTSxDQUFDLElBQUksYUFBYSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1VBQzFJLE9BQU8sb0JBQW9CLElBQUkseUJBQXlCLENBQUM7U0FDMUQsQ0FBQztRQUNGLE1BQU0sY0FBYyx1RUFBdUU7VUFDekYsTUFBTSxXQUFXLElBQUksU0FBUyxZQUFZLEVBQUUsQ0FBQztVQUM3QyxNQUFNLGtCQUFrQixPQUFPLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztVQUM3RixNQUFNLFNBQVMsQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO1VBQ3RFLE1BQU0sVUFBVSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDbEMsTUFBTSx5QkFBeUIsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUM3RSxPQUFPLENBQUMsb0JBQW9CLElBQUkseUJBQXlCLEtBQUssZUFBZSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxJQUFJLHNCQUFzQixDQUFDO1NBQ2hJLENBQUM7UUFDRixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxTQUFTO1VBQ3hCLElBQUksY0FBYyxDQUFDO1VBQ25CLE1BQU0sVUFBVSxRQUFRO1lBQ3RCLElBQUksMEJBQTBCLEtBQUssQ0FBQztZQUNwQyxJQUFJLHNCQUFzQixlQUFlLENBQUM7WUFDMUMsSUFBSSw0QkFBNEIsS0FBSyxDQUFDO1lBQ3RDLE1BQU0sYUFBYSxJQUFJLFdBQVcsQ0FBQztZQUNuQyxNQUFNLGFBQWEsVUFBVSxTQUFTLFlBQVksRUFBRSxDQUFDO1lBQ3JELE1BQU0sdUJBQXVCLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUQsSUFBSSxhQUFhLENBQUMsb0JBQW9CLENBQUMsRUFBRTtjQUN2QyxzQkFBc0IsZUFBZSxDQUFDO2NBQ3RDLGtCQUFrQixvQkFBb0IsS0FBSyxNQUFNLENBQUM7Y0FDbEQsMEJBQTBCLElBQUksQ0FBQztjQUMvQiw0QkFBNEIsc0JBQXNCLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQzlEO1lBQ0QsTUFBTSx1QkFBdUIsZUFBZSxJQUFJLENBQUMsdUJBQXVCLENBQUM7WUFDekUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUU7Y0FDOUQsaUJBQWlCLElBQUksQ0FBQztjQUN0QixJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDekIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7ZUFDbEI7Y0FDRCxPQUFPO2FBQ1I7WUFDRCxJQUFJLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFO2NBQ2pDLGlCQUFpQixJQUFJLENBQUM7Y0FDdEIsT0FBTzthQUNSO1lBQ0QsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFO2NBQzFELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7Y0FDdkMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7Y0FDdEIsV0FBVyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Y0FDdEIsaUJBQWlCLElBQUksQ0FBQztjQUN0QixPQUFPO2FBQ1I7WUFDRCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFO2NBQzVCLElBQUksUUFBUSxjQUFjLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO2NBQzdDLElBQUksQ0FBQyxLQUFLLElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN6RSxRQUFRLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7ZUFDaEQ7Y0FDRCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssRUFBRTtnQkFDcEMsaUJBQWlCLElBQUksQ0FBQztnQkFDdEIsT0FBTztlQUNSO2FBQ0Y7WUFDRCxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSx5QkFBeUIsQ0FBQyxFQUFFO2NBQzVHLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ25CLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzNDLFVBQVUsYUFBYSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDOUMsV0FBVyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7ZUFDbEM7Y0FDRCxJQUFJLHlCQUF5QixJQUFJLHVCQUF1QixFQUFFO2dCQUN4RCxrQkFBa0IsbUJBQW1CLENBQUM7ZUFDdkM7Y0FDRCxjQUFjLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNsQyxNQUFNO2NBQ0wsaUJBQWlCLElBQUksQ0FBQztjQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7Y0FDdkMsSUFBSSx1QkFBdUIsRUFBRTtnQkFDM0Isa0JBQWtCLG1CQUFtQixDQUFDO2VBQ3ZDO2NBQ0QsaUJBQWlCLElBQUksQ0FBQzthQUN2QjtXQUNGLENBQUM7VUFDRixNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3hCLENBQUMsQ0FBQztRQUNILElBQUksTUFBTSxNQUFNLEtBQUssSUFBSSxFQUFFO1VBQ3pCLE1BQU0sQ0FBQyxXQUFXLEVBQUUsUUFBUTtZQUMxQixNQUFNLFVBQVUsUUFBUTtjQUN0QixJQUFJLElBQUksU0FBUyxLQUFLLEdBQUcsRUFBRTtnQkFDekIsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2VBQ2hDO2NBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ3hDLENBQUM7WUFDRixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDZixDQUFDLENBQUM7U0FDSjtRQUNELE1BQU0sQ0FBQyxXQUFXLEVBQUUsUUFBUTtVQUMxQixNQUFNLGdCQUFnQixRQUFRO1lBQzVCLElBQUksUUFBUSxDQUFDLENBQUM7WUFDZCxNQUFNLENBQUMsSUFBSSxXQUFXLEVBQUUsUUFBUTtjQUM5QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdkQsS0FBSyxFQUFFLENBQUM7ZUFDVDthQUNGLENBQUMsQ0FBQztZQUNILE9BQU8sS0FBSyxDQUFDO1dBQ2QsQ0FBQztVQUNGLE1BQU0sY0FBYyxRQUFRO1lBQzFCLE1BQU0sZUFBZSxNQUFNLENBQUMsSUFBSSxXQUFXLEVBQUUsZUFBZSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEtBQUssT0FBTyxJQUFJLFNBQVMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDMUosT0FBTyxZQUFZLElBQUksQ0FBQyxTQUFTO2NBQy9CLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7Y0FDdEMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7Y0FDeEIsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztjQUMvQixHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Y0FDeEIsT0FBTyxLQUFLLENBQUM7YUFDZCxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUNoQixDQUFDO1VBQ0YsTUFBTSxhQUFhLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUN2QyxJQUFJLENBQUMsV0FBVyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxLQUFLLENBQUMsRUFBRTtZQUN0RSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdkIsT0FBTztXQUNSO1VBQ0QsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sUUFBUSxFQUFFO1lBQ3JFLElBQUksQ0FBQyxNQUFNLE1BQU0sSUFBSSxVQUFVLEtBQUssQ0FBQyxFQUFFO2NBQ3JDLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzFCO1lBQ0QsaUJBQWlCLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDOUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQy9DLCtCQUErQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pELDRCQUE0QixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3RELFdBQVcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNyQyxhQUFhLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDdkM7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxhQUFhLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsU0FBUyxRQUFRLEVBQUUsQ0FBQztNQUM3RCxJQUFJLEdBQUcsbUJBQW1CLENBQUMsVUFBVSxDQUFDLEtBQUssT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQzdGLE9BQU8sVUFBVSxDQUFDO1FBQ2xCLGNBQWMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakMsZUFBZSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RDLE9BQU87T0FDUjtNQUNELElBQUksTUFBTSxFQUFFO1FBQ1YsSUFBSSxJQUFJLEVBQUU7VUFDUixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNoQixJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRTtjQUNyQyxNQUFNLE1BQU0sR0FBRyxVQUFVLEVBQUUsQ0FBQztjQUM1QixHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztjQUN6QixHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztjQUN0QixhQUFhLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQzNEO1dBQ0YsTUFBTTtZQUNMLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1dBQ2hDO1NBQ0YsTUFBTTtVQUNMLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksa0JBQWtCLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRTtZQUM1RSxTQUFTLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEQsaUJBQWlCLENBQUMsRUFBRSxFQUFFLE1BQU07Y0FDMUIsV0FBVyxDQUFDLEVBQUUsRUFBRSx3QkFBd0I7Z0JBQ3RDLE1BQU0sY0FBYyxJQUFJLEdBQUcsWUFBWSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUNuRixhQUFhLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztlQUN4QyxDQUFDLENBQUM7YUFDSixFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ1gsRUFBRSxZQUFZLEVBQUUsQ0FBQztXQUNsQixNQUFNO1lBQ0wsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztXQUNsQztVQUNELHlCQUF5QixDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUztZQUMxRCxNQUFNLENBQUMseUJBQXlCLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxNQUFNLFdBQVcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1dBQzFGLENBQUMsQ0FBQztTQUNKO1FBQ0QsYUFBYSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztPQUN6QjtNQUNELGVBQWUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztLQUN2QyxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsOEJBQThCO01BQ2xELElBQUksSUFBSSxJQUFJLE1BQU0sVUFBVSxXQUFXLEVBQUUsRUFBRTtRQUN6QyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztPQUM3QztLQUNGLENBQUM7O0lBRUYsTUFBTSxVQUFVLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5QyxNQUFNLFVBQVUsdUNBQXVDO01BQ3JELHlCQUF5QixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDbEMsTUFBTSxHQUFHLENBQUMsWUFBWSxFQUFFLEtBQUs7UUFDM0IsNEJBQTRCLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLHlCQUF5QixJQUFJLEVBQUUsQ0FBQyxDQUFDO09BQ2xGLENBQUMsQ0FBQztNQUNILE1BQU0sR0FBRyxDQUFDLDBCQUEwQixFQUFFLEtBQUs7UUFDekMsTUFBTSxVQUFVLFFBQVEsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxXQUFXLEdBQUcsV0FBVyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDLElBQUksY0FBYyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDN1AsNEJBQTRCLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSx5QkFBeUIsSUFBSSxFQUFFLENBQUMsQ0FBQztPQUNoRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsVUFBVSxNQUFNLFVBQVUsU0FBUyxFQUFFLENBQUM7SUFDOUQsTUFBTSxlQUFlLDRDQUE0QztNQUMvRCxNQUFNLGlCQUFpQixRQUFRO1FBQzdCLE1BQU0saUJBQWlCLE1BQU0sVUFBVSxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZILE9BQU8sQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7T0FDckMsQ0FBQztNQUNGLE1BQU0sa0JBQWtCLFFBQVE7UUFDOUIsSUFBSSxnQ0FBZ0MsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1VBQzFELE9BQU8sSUFBSSxDQUFDO1NBQ2IsTUFBTTtVQUNMLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixPQUFPLGFBQWEsQ0FBQyxNQUFNLFVBQVUsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7V0FDNUUsTUFBTTtZQUNMLE9BQU8sS0FBSyxDQUFDO1dBQ2Q7U0FDRjtPQUNGLENBQUM7TUFDRixPQUFPLFdBQVcsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0tBQzlELENBQUM7SUFDRixNQUFNLGFBQWEsaUJBQWlCO01BQ2xDLE1BQU0sVUFBVSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQy9FLE9BQU8sUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxRQUFRLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ25HLENBQUM7SUFDRixNQUFNLCtCQUErQixzQ0FBc0M7TUFDekUsTUFBTSxVQUFVLFVBQVUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDeEMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLGtCQUFrQjtRQUM1QyxNQUFNLGVBQWUsUUFBUTtVQUMzQixNQUFNLFFBQVEsWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQztVQUN6RyxNQUFNLFFBQVEsS0FBSyxPQUFPLEVBQUUsQ0FBQztVQUM3QixJQUFJLElBQUksTUFBTSxJQUFJLEVBQUUsS0FBSyxLQUFLLEVBQUU7WUFDOUIsSUFBSSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixNQUFNLE9BQU8sS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUIsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Y0FDakIsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFO2dCQUNuQixJQUFJO2dCQUNKLE1BQU07Z0JBQ04sT0FBTztlQUNSLENBQUMsQ0FBQzthQUNKLE1BQU07Y0FDTCxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUUsWUFBWSxRQUFRLENBQUMsS0FBSyxFQUFFO2dCQUNqRCxJQUFJO2dCQUNKLE1BQU07Z0JBQ04sT0FBTztlQUNSLENBQUMsQ0FBQyxDQUFDO2FBQ0w7V0FDRjtTQUNGLENBQUM7UUFDRixNQUFNLENBQUM7VUFDTCxJQUFJLFlBQVk7VUFDaEIsSUFBSSxlQUFlO1NBQ3BCLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDakIsTUFBTSxDQUFDLElBQUksU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO09BQ3JDLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGVBQWUseUVBQXlFO01BQzVGLE1BQU0sb0JBQW9CLHlCQUF5QixJQUFJLEVBQUUsQ0FBQztNQUMxRCxNQUFNLENBQUMsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVTtRQUNuQyxNQUFNLFFBQVEsS0FBSyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTTtVQUM5RCxNQUFNLE9BQU87WUFDWCxhQUFhO2NBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO2NBQ2xCLFNBQVMsSUFBSTtjQUNiLFdBQVcsRUFBRTthQUNkO1lBQ0QsZ0JBQWdCO2NBQ2QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO2NBQ2xCLFNBQVMsS0FBSztjQUNkLFdBQVcsRUFBRTthQUNkO1lBQ0QsVUFBVSxFQUFFO1dBQ2IsQ0FBQztVQUNGLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztVQUNqQyxPQUFPLElBQUksQ0FBQztTQUNiLENBQUMsQ0FBQztRQUNILE1BQU0sYUFBYSxNQUFNO1VBQ3ZCLE1BQU0sVUFBVSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7VUFDbkMsT0FBTyxZQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUN0RSxDQUFDO1FBQ0YsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7VUFDckIsTUFBTSxhQUFhLE9BQU8sR0FBRyxLQUFLLFlBQVksR0FBRyxLQUFLLGVBQWUsQ0FBQztVQUN0RSxVQUFVLFVBQVUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1VBQ3BDLElBQUksVUFBVSxVQUFVLE9BQU8sS0FBSyxDQUFDLEVBQUU7WUFDckMsVUFBVSxNQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1dBQ3BDO1NBQ0YsTUFBTTtVQUNMLEtBQUssU0FBUyxLQUFLLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDekIsT0FBTztZQUNQLElBQUk7WUFDSixRQUFRO1dBQ1QsQ0FBQyxDQUFDO1NBQ0o7T0FDRixDQUFDLENBQUM7TUFDSCx5QkFBeUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7S0FDbEQsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLGtEQUFrRDtNQUN4RSxNQUFNLG9CQUFvQix5QkFBeUIsSUFBSSxFQUFFLENBQUM7TUFDMUQsTUFBTSxDQUFDLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsS0FBSyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUztRQUNsRixpQkFBaUIsQ0FBQyxNQUFNLENBQUMsR0FBRztVQUMxQixhQUFhO1lBQ1gsR0FBRyxLQUFLLFlBQVk7WUFDcEIsV0FBVyxRQUFRLENBQUMsS0FBSyxZQUFZLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxRQUFRLENBQUM7V0FDeEU7VUFDRCxnQkFBZ0I7WUFDZCxHQUFHLEtBQUssZUFBZTtZQUN2QixXQUFXLFFBQVEsQ0FBQyxLQUFLLGVBQWUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLFFBQVEsQ0FBQztXQUMzRTtVQUNELFVBQVUsUUFBUSxDQUFDLEtBQUssU0FBUyxFQUFFLFFBQVEsSUFBSSxTQUFTLEtBQUssUUFBUSxDQUFDO1NBQ3ZFLENBQUM7T0FDSCxDQUFDLENBQUMsQ0FBQztNQUNKLHlCQUF5QixJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztLQUNsRCxDQUFDO0lBQ0YsTUFBTSx3QkFBd0IseUVBQXlFO01BQ3JHLFlBQVksQ0FBQyxNQUFNLEVBQUUseUJBQXlCLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDbEYsT0FBTyxFQUFFLFFBQVEsTUFBTSxlQUFlLENBQUMseUJBQXlCLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUM7S0FDeEYsQ0FBQzs7SUFFRixNQUFNLFNBQVMsOEJBQThCO01BQzNDLE1BQU0sTUFBTSxNQUFNLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3ZDLElBQUksR0FBRyxFQUFFO1FBQ1AsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRTtVQUNqRixjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDMUMsTUFBTTtVQUNMLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN6QztPQUNGO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLFlBQVksS0FBSyxRQUFRLENBQUM7SUFDaEMsTUFBTSxXQUFXLE1BQU07TUFDckIsTUFBTSxVQUFVLEVBQUUsQ0FBQztNQUNuQixNQUFNLFlBQVksb0JBQW9CO1FBQ3BDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUTtVQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRTtZQUN6QixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUc7Y0FDZCxJQUFJO2NBQ0osV0FBVyxFQUFFO2FBQ2QsQ0FBQztXQUNIO1VBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN4QyxDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxhQUFhLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ3pDLE1BQU0sZUFBZSxvQkFBb0I7UUFDdkMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRO1VBQzlCLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRTtZQUN4QixJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRTtjQUMzQixNQUFNLFNBQVMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2NBQzdCLE1BQU0sZUFBZSxRQUFRLENBQUMsTUFBTSxVQUFVLEVBQUUsS0FBSyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUM7Y0FDckUsSUFBSSxZQUFZLE9BQU8sR0FBRyxDQUFDLEVBQUU7Z0JBQzNCLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQztlQUNqQyxNQUFNO2dCQUNMLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2VBQ3RCO2FBQ0YsTUFBTTtjQUNMLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3RCO1dBQ0Y7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsT0FBTztRQUNMLFNBQVM7UUFDVCxVQUFVO1FBQ1YsWUFBWTtPQUNiLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sY0FBYyxpQkFBaUI7TUFDbkMsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRO1FBQ3BCLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztPQUN2QixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsa0NBQWtDO01BQzdELFNBQVMsY0FBYyxDQUFDLE1BQU0sRUFBRSxTQUFTO1FBQ3ZDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUTtVQUNwQixNQUFNLFFBQVEsTUFBTSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztVQUMvQyxNQUFNLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7VUFDakMsTUFBTSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1VBQy9CLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztVQUMvQixJQUFJLEtBQUssRUFBRTtZQUNULEtBQUssTUFBTSxHQUFHLEtBQUssQ0FBQztXQUNyQjtVQUNELElBQUksSUFBSSxFQUFFO1lBQ1IsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQztXQUM3QjtVQUNELElBQUksSUFBSSxFQUFFO1lBQ1IsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTztjQUN0QixLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUN6QyxDQUFDLENBQUM7V0FDSjtVQUNELElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQztVQUNuQixJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztVQUM1QyxXQUFXLENBQUMsSUFBSSxFQUFFO1lBQ2hCLE9BQU87WUFDUCxNQUFNO1lBQ04sTUFBTTtXQUNQLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGtCQUFrQiwrQkFBK0I7TUFDckQsU0FBUyxjQUFjLENBQUMsUUFBUSxFQUFFLFNBQVM7UUFDekMsTUFBTSxnQkFBZ0IsTUFBTSxLQUFLLEtBQUssT0FBTyxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUTtVQUNwQixJQUFJLGFBQWEsRUFBRTtZQUNqQixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUM7V0FDakIsTUFBTTtZQUNMLE1BQU0sUUFBUSxNQUFNLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQy9DLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLGNBQWMsQ0FBQztZQUMxQyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUM7WUFDbkIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7V0FDN0M7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxhQUFhLGlDQUFpQztNQUNsRCxJQUFJLEVBQUUsQ0FBQztNQUNQLE1BQU0sU0FBUyxNQUFNLEVBQUUsQ0FBQztNQUN4QixJQUFJLFFBQVEsdUJBQXVCLEVBQUU7UUFDbkMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLEtBQUssUUFBUSx3QkFBd0IsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3JJO01BQ0QsZUFBZSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDNUMsQ0FBQztJQUNGLE1BQU0sYUFBYSxpQ0FBaUM7TUFDbEQsSUFBSSxRQUFRLGNBQWMsRUFBRTtRQUMxQixVQUFVLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztPQUN6QztLQUNGLENBQUM7O0lBRUYsTUFBTSxnQkFBZ0Isa0NBQWtDO01BQ3RELFVBQVUsY0FBYyxDQUFDLElBQUksRUFBRSxvQkFBb0I7UUFDakQsTUFBTSxnQkFBZ0IsS0FBSyxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0saUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sbUJBQW1CLE1BQU0sb0JBQW9CLEVBQUUsQ0FBQztRQUN0RCxNQUFNLHFCQUFxQixNQUFNLHNCQUFzQixFQUFFLENBQUM7UUFDMUQsYUFBYSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sVUFBVSxRQUFRLElBQUksS0FBSyxJQUFJLGFBQWEsSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUYsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtVQUM1QyxJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3BCLElBQUksU0FBUyxJQUFJLE9BQU8sQ0FBQztVQUN6QixJQUFJLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxLQUFLLE1BQU0sVUFBVSxFQUFFO1lBQzFELElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQztZQUNyQixPQUFPLElBQUksRUFBRTtjQUNYLE1BQU0sV0FBVyxJQUFJLEtBQUssQ0FBQztjQUMzQixJQUFJLFFBQVEsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQUssVUFBVSxFQUFFO2dCQUNwRSxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUU7a0JBQ3JCLE9BQU8sSUFBSSxDQUFDO2lCQUNiO2dCQUNELE1BQU07ZUFDUDtjQUNELE9BQU8sSUFBSSxLQUFLLENBQUM7YUFDbEI7WUFDRCxJQUFJLElBQUksRUFBRTtjQUNSLElBQUksT0FBTyxFQUFFLENBQUM7Y0FDZCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLEVBQUU7Z0JBQ2pFLE1BQU0sY0FBYyxNQUFNLGVBQWUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLFdBQVcsRUFBRTtrQkFDZixJQUFJLFdBQVcsWUFBWSxFQUFFO29CQUMzQixNQUFNLE9BQU8sRUFBRSxDQUFDO21CQUNqQixNQUFNLElBQUksV0FBVyxVQUFVLEVBQUU7b0JBQ2hDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQzttQkFDaEQ7aUJBQ0Y7ZUFDRjthQUNGO1dBQ0YsTUFBTTtZQUNMLElBQUksYUFBYSxJQUFJLENBQUM7WUFDdEIsT0FBTyxNQUFNLElBQUksTUFBTSxXQUFXLEtBQUssVUFBVSxJQUFJLE1BQU0sVUFBVSxLQUFLLFVBQVUsRUFBRTtjQUNwRixhQUFhLE1BQU0sQ0FBQztjQUNwQixJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUM5QixNQUFNO2VBQ1A7Y0FDRCxTQUFTLE1BQU0sT0FBTyxDQUFDO2FBQ3hCO1lBQ0QsSUFBSSxVQUFVLEtBQUssTUFBTSxFQUFFO2NBQ3pCLE1BQU0sV0FBVyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FDekMsUUFBUSxNQUFNLEdBQUcsSUFBSSxDQUFDO2NBQ3RCLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3hCO1dBQ0Y7U0FDRjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxnQkFBZ0IsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQUcsT0FBTyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxPQUFPLE9BQU8sQ0FBQztNQUNySCxTQUFTLENBQUMsZUFBZSxHQUFHLEdBQUcsRUFBRSxzREFBc0QsQ0FBQztNQUN4RixTQUFTLE1BQU07S0FDaEIsQ0FBQyxDQUFDLENBQUM7SUFDSixNQUFNLG9CQUFvQixRQUFRO01BQ2hDLE1BQU0sVUFBVSxvQkFBb0IsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ2hELE9BQU8sT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDbEMsQ0FBQztJQUNGLE1BQU0sZUFBZSxPQUFPO01BQzFCLE1BQU0sT0FBTyxPQUFPLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUN2QyxNQUFNLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDNUIsTUFBTSxVQUFVLDJCQUEyQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDdkQsSUFBSSxPQUFPLEVBQUU7UUFDWCxNQUFNLGdCQUFnQixPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDO1FBQy9DLE1BQU0sZ0JBQWdCLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6RixPQUFPLFFBQVEsS0FBSyxDQUFDO1VBQ25CLE1BQU0sT0FBTyxDQUFDLENBQUMsQ0FBQztVQUNoQixNQUFNLGFBQWE7VUFDbkIsYUFBYTtTQUNkLENBQUMsQ0FBQztPQUNKLE1BQU07UUFDTCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEI7S0FDRixDQUFDO0lBQ0YsTUFBTSxZQUFZLGFBQWEsZ0JBQWdCLElBQUksS0FBSztNQUN0RCxJQUFJLE1BQU0sSUFBSSxDQUFDO01BQ2YsSUFBSSxhQUFhLEVBQUU7UUFDakIsSUFBSTtVQUNGLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xCLENBQUMsVUFBVTtVQUNWLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztTQUN4QjtPQUNGO01BQ0QsTUFBTSxNQUFNLElBQUksVUFBVSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7TUFDdkMsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNuQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDNUI7TUFDRCxPQUFPLFFBQVEsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDakQsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLE9BQU87TUFDM0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxxQkFBcUI7UUFDdEMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQywyQkFBMkIsS0FBSyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxNQUFNLENBQUMsa0JBQWtCLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztPQUMvSSxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxZQUFZLE9BQU87TUFDdkIsSUFBSSxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQzVCLE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO09BQzNCLE1BQU0sSUFBSSxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQ25DLE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO09BQzNCLE1BQU07UUFDTCxPQUFPLE9BQU8sT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7T0FDN0M7S0FDRixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsUUFBUTtNQUM1QixPQUFPLElBQUksT0FBTyxDQUFDLHFCQUFxQjtRQUN0QyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNoQyxNQUFNLFVBQVUsR0FBRyxNQUFNO1VBQ3ZCLE9BQU8sQ0FBQyxNQUFNLE9BQU8sQ0FBQyxDQUFDO1NBQ3hCLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxNQUFNO1VBQ3JCLElBQUksRUFBRSxDQUFDO1VBQ1AsTUFBTSxDQUFDLENBQUMsS0FBSyxNQUFNLE1BQU0sTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDN0UsQ0FBQztRQUNGLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzVCLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsSUFBSSxVQUFVLENBQUMsQ0FBQztJQUNoQixNQUFNLGFBQWEsVUFBVTtNQUMzQixPQUFPLENBQUMsTUFBTSxJQUFJLFFBQVEsSUFBSSxPQUFPLEVBQUUsQ0FBQztLQUN6QyxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsMkNBQTJDO01BQ2hFLE9BQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQywyQkFBMkIsS0FBSztRQUNqRSxJQUFJLFVBQVUsSUFBSSxDQUFDLGFBQWEsRUFBRTtVQUNoQyxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7U0FDeEIsTUFBTTtVQUNMLE1BQU0sU0FBUyxhQUFhLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUNqRCxPQUFPLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN2QztPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLG1CQUFtQiw2QkFBNkI7TUFDcEQsTUFBTSxXQUFXLFNBQVMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztNQUM5RCxTQUFTLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUN4QixPQUFPLFFBQVEsQ0FBQztLQUNqQixDQUFDO0lBQ0YsTUFBTSxvQkFBb0IscUJBQXFCLGFBQWEsS0FBSyxLQUFLO01BQ3BFLE9BQU8sY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLFFBQVEsS0FBSyxDQUFDLFNBQVMsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzlNLENBQUM7SUFDRixNQUFNLGtCQUFrQix5QkFBeUI7TUFDL0MsTUFBTSxpQkFBaUIsTUFBTSxPQUFPLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO01BQ2hFLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRTtRQUNqQyxNQUFNLFdBQVcsU0FBUyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUMsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUU7VUFDM0IsT0FBTyxPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNsQyxNQUFNO1VBQ0wsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQ3RDLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVztjQUN6QyxPQUFPLGNBQWMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVU7Z0JBQzlDLE9BQU8sUUFBUSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO2VBQ2pFLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQy9CLENBQUMsQ0FBQztXQUNKLENBQUMsQ0FBQztTQUNKO09BQ0YsTUFBTSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUU7UUFDeEMsT0FBTyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO09BQzNHLE1BQU07UUFDTCxPQUFPLE9BQU8sT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUM7T0FDcEQ7S0FDRixDQUFDOztJQUVGLE1BQU0sZUFBZSxPQUFPLGFBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDdEUsTUFBTSx3QkFBd0IsT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLGVBQWUsSUFBSSxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0lBQy9ILE1BQU0sNEJBQTRCLHNCQUFzQjtNQUN0RCxNQUFNLHVCQUF1QixHQUFHLFFBQVEsQ0FBQztNQUN6QyxJQUFJLFNBQVMsRUFBRTtRQUNiLE1BQU0sZUFBZSxPQUFPO1VBQzFCLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztVQUNqQyxJQUFJLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDM0UsT0FBTztXQUNSO1VBQ0QsaUJBQWlCLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVk7WUFDNUQsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsUUFBUSxFQUFFLENBQUMsQ0FBQztXQUNyQyxDQUFDLENBQUM7U0FDSixDQUFDO1FBQ0YsTUFBTSxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxNQUFNLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7T0FDeEU7S0FDRixDQUFDO0lBQ0YsTUFBTSxhQUFhLHNCQUFzQjtNQUN2QyxNQUFNLFNBQVMsTUFBTSxPQUFPLENBQUM7TUFDN0IsSUFBSSxRQUFRLG9CQUFvQixFQUFFO1FBQ2hDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQ3pDO01BQ0QsTUFBTSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsU0FBUztRQUN6QyxJQUFJLElBQUksS0FBSyxPQUFPLENBQUM7UUFDckIsTUFBTSxZQUFZLE9BQU87VUFDdkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztVQUN2RCxPQUFPLEtBQUssT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNwRCxDQUFDO1FBQ0YsTUFBTSxjQUFjLE9BQU87VUFDekIsTUFBTSxTQUFTLEdBQUcsR0FBRyxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7VUFDMUMsSUFBSSxDQUFDLGlCQUFpQixLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbkMsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7V0FDMUIsTUFBTTtZQUNMLE9BQU8sTUFBTSxDQUFDO1dBQ2Y7U0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVEseUJBQXlCLEVBQUU7VUFDdEMsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUNWLE1BQU0sT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsSUFBSSxJQUFJLEtBQUssS0FBSyxHQUFHLElBQUksSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssUUFBUSxFQUFFO2NBQ3pELElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2pEO1dBQ0Y7U0FDRjtPQUNGLENBQUMsQ0FBQztNQUNILElBQUksQ0FBQyxRQUFRLDJCQUEyQixFQUFFO1FBQ3hDLE1BQU0sbUJBQW1CLENBQUMsU0FBUyxFQUFFLFNBQVM7VUFDNUMsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztVQUN6RCxPQUFPLENBQUMsRUFBRSxFQUFFO1lBQ1YsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEIsSUFBSSxJQUFJLEtBQUssS0FBSyxHQUFHLElBQUksSUFBSSxXQUFXLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtjQUM5RCxTQUFTLElBQUksT0FBTyxDQUFDO2NBQ3JCLFVBQVUsSUFBSSxVQUFVLENBQUM7Y0FDekIsT0FBTyxPQUFPLElBQUksTUFBTSxFQUFFO2dCQUN4QixjQUFjLE9BQU8sS0FBSyxDQUFDO2dCQUMzQixNQUFNLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzdCLFVBQVUsV0FBVyxDQUFDO2VBQ3ZCO2FBQ0Y7V0FDRjtTQUNGLENBQUMsQ0FBQztPQUNKO01BQ0QsSUFBSSxRQUFRLGtCQUFrQixFQUFFO1FBQzlCLE1BQU0sY0FBYyxDQUFDLE9BQU8sRUFBRSxTQUFTO1VBQ3JDLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDO1VBQ3ZDLE9BQU8sQ0FBQyxFQUFFLEVBQUU7WUFDVixPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQixhQUFhLElBQUksT0FBTyxDQUFDO1lBQ3pCLElBQUksVUFBVSxLQUFLLFVBQVUsS0FBSyxLQUFLLElBQUksSUFBSSxVQUFVLEtBQUssS0FBSyxJQUFJLENBQUMsRUFBRTtjQUN4RSxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssSUFBSSxFQUFFO2dCQUN4QyxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2VBQ3hCLE1BQU07Z0JBQ0wsTUFBTSxLQUFLLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDaEMsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLHVCQUF1QixDQUFDLENBQUM7Z0JBQzFDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2VBQ2Y7YUFDRjtXQUNGO1NBQ0YsQ0FBQyxDQUFDO09BQ0o7TUFDRCxNQUFNLGVBQWUsTUFBTSxnQkFBZ0IsRUFBRSxDQUFDO01BQzlDLElBQUksUUFBUSxTQUFTLElBQUksWUFBWSxFQUFFO1FBQ3JDLE1BQU0sbUJBQW1CLENBQUMsT0FBTyxFQUFFLFNBQVM7VUFDMUMsSUFBSSxFQUFFLENBQUM7VUFDUCxJQUFJLElBQUksS0FBSyxPQUFPLENBQUM7VUFDckIsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUNWLE1BQU0sT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsTUFBTSxRQUFRLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDNUUsTUFBTSxZQUFZLEtBQUssUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM1QyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ3BCLEtBQUssSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLEdBQUcsU0FBUyxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUU7Y0FDNUMsTUFBTSxZQUFZLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztjQUNoQyxJQUFJLFFBQVEsS0FBSyxDQUFDO2NBQ2xCLElBQUksa0JBQWtCLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztjQUN4QyxJQUFJLGVBQWUsSUFBSSxlQUFlLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ2pELFFBQVEsSUFBSSxDQUFDO2VBQ2Q7Y0FDRCxrQkFBa0IsWUFBWSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7Y0FDMUMsSUFBSSxDQUFDLEtBQUssSUFBSSxlQUFlLElBQUksZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUMzRCxRQUFRLElBQUksQ0FBQztlQUNkO2NBQ0QsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsSUFBSSxVQUFVLEVBQUU7a0JBQ2QsY0FBYyxHQUFHLENBQUM7aUJBQ25CO2dCQUNELGNBQWMsU0FBUyxDQUFDO2VBQ3pCO2FBQ0Y7WUFDRCxJQUFJLENBQUMsVUFBVSxPQUFPLEVBQUU7Y0FDdEIsYUFBYSxJQUFJLENBQUM7YUFDbkI7WUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7V0FDaEM7U0FDRixDQUFDLENBQUM7T0FDSjtNQUNELHlCQUF5QixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztLQUM3QyxDQUFDOztJQUVGLHNCQUFzQjtNQUNwQix5QkFBeUIsQ0FBQztNQUMxQixPQUFPLFVBQVUsVUFBVSxJQUFJLE9BQU8sTUFBTSxJQUFJLFFBQVEsSUFBSSxPQUFPLE1BQU0sU0FBUyxHQUFHLGVBQWU7UUFDbEcsT0FBTyxPQUFPLEdBQUcsQ0FBQztPQUNuQixHQUFHLGVBQWU7UUFDakIsT0FBTyxHQUFHLElBQUksVUFBVSxJQUFJLE9BQU8sTUFBTSxJQUFJLEdBQUcsWUFBWSxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssTUFBTSxVQUFVLEdBQUcsUUFBUSxHQUFHLE9BQU8sR0FBRyxDQUFDO09BQzdILEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2pCO0lBQ0QsK0JBQStCO01BQzdCLGtCQUFrQixNQUFNLGVBQWUsSUFBSSwrQkFBK0I7UUFDeEUsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxDQUFDO09BQ1YsQ0FBQztNQUNGLE9BQU8sZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUM5QjtJQUNELHFDQUFxQztNQUNuQyxJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxDQUFDLE9BQU8sVUFBVTtRQUN0RCxPQUFPLEtBQUssQ0FBQztNQUNmLElBQUksT0FBTyxVQUFVLEtBQUs7UUFDeEIsT0FBTyxLQUFLLENBQUM7TUFDZixJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVU7UUFDN0IsT0FBTyxJQUFJLENBQUM7TUFDZCxJQUFJO1FBQ0YsT0FBTyxVQUFVLFFBQVEsS0FBSyxDQUFDLE9BQU8sVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsWUFBWTtTQUN6RSxDQUFDLENBQUMsQ0FBQztRQUNKLE9BQU8sSUFBSSxDQUFDO09BQ2IsQ0FBQyxVQUFVO1FBQ1YsT0FBTyxLQUFLLENBQUM7T0FDZDtLQUNGO0lBQ0QseUNBQXlDO01BQ3ZDLElBQUkseUJBQXlCLEVBQUUsRUFBRTtRQUMvQixhQUFhLE9BQU8sVUFBVSxDQUFDO09BQ2hDLE1BQU07UUFDTCxhQUFhLHlDQUF5QztVQUNwRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUNmLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1VBQ3RCLElBQUksY0FBYyxRQUFRLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztVQUNqRCxJQUFJLFdBQVcsSUFBSSxXQUFXLEVBQUUsQ0FBQztVQUNqQyxJQUFJLEtBQUs7WUFDUCxlQUFlLENBQUMsUUFBUSxFQUFFLEtBQUssVUFBVSxDQUFDLENBQUM7VUFDN0MsT0FBTyxRQUFRLENBQUM7U0FDakIsQ0FBQztPQUNIO01BQ0QsT0FBTyxVQUFVLE1BQU0sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDMUM7SUFDRCxpQ0FBaUM7TUFDL0IsT0FBTyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSwyQkFBMkIsQ0FBQyxHQUFHLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO0tBQ3JIO0lBQ0QsaUNBQWlDO01BQy9CLElBQUksS0FBSyxRQUFRLENBQUMsR0FBRyxDQUFDO1FBQ3BCLE9BQU8saUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDakM7SUFDRCxnQ0FBZ0M7TUFDOUIsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sU0FBUyxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJO1FBQzlGLE9BQU8sS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDM0I7SUFDRCxnREFBZ0Q7TUFDOUMsSUFBSSxDQUFDLENBQUM7UUFDSixPQUFPO01BQ1QsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRO1FBQ3ZCLE9BQU8saUJBQWlCLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3RDLElBQUksSUFBSSxNQUFNLFVBQVUsU0FBUyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUN2RCxJQUFJLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxZQUFZO1FBQ2pDLElBQUksQ0FBQyxZQUFZLEtBQUssQ0FBQztNQUN6QixJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUs7UUFDNUIsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUN2QixJQUFJLENBQUMsS0FBSyxXQUFXLElBQUksMENBQTBDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekUsT0FBTyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDdkM7SUFDRCxxQ0FBcUM7TUFDbkMsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLE9BQU87UUFDakMsTUFBTSxHQUFHLE9BQU8sQ0FBQztNQUNuQixLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRTtRQUNqRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFDRCw4QkFBOEI7TUFDNUIsTUFBTSxJQUFJLFNBQVMsQ0FBQyxzSUFBc0ksQ0FBQyxDQUFDO0tBQzdKO0lBQ0QsSUFBSSxpQkFBaUIsTUFBTSxlQUFlLEVBQUUsaUJBQWlCLE1BQU0sZUFBZSxFQUFFLFdBQVcsTUFBTSxTQUFTLEVBQUUsaUJBQWlCLE1BQU0sZUFBZSxFQUFFLDJCQUEyQixNQUFNLHlCQUF5QixDQUFDO0lBQ25OLElBQUksU0FBUyxNQUFNLE9BQU8sRUFBRSxPQUFPLE1BQU0sS0FBSyxFQUFFLFdBQVcsTUFBTSxPQUFPLENBQUM7SUFDekUsSUFBSSxPQUFPLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxPQUFPLEVBQUUsUUFBUSxJQUFJLE1BQU0sRUFBRSxZQUFZLElBQUksVUFBVSxDQUFDO0lBQ3JHLElBQUksQ0FBQyxLQUFLLEVBQUU7TUFDVixRQUFRLHFDQUFxQztRQUMzQyxPQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUNuQyxDQUFDO0tBQ0g7SUFDRCxJQUFJLENBQUMsTUFBTSxFQUFFO01BQ1gsU0FBUyxtQkFBbUI7UUFDMUIsT0FBTyxDQUFDLENBQUM7T0FDVixDQUFDO0tBQ0g7SUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFO01BQ1QsT0FBTyxpQkFBaUI7UUFDdEIsT0FBTyxDQUFDLENBQUM7T0FDVixDQUFDO0tBQ0g7SUFDRCxJQUFJLENBQUMsU0FBUyxFQUFFO01BQ2QsWUFBWSwrQkFBK0I7UUFDekMsT0FBTyxVQUFVLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7T0FDbkQsQ0FBQztLQUNIO0lBQ0QsSUFBSSxlQUFlLE9BQU8sQ0FBQyxLQUFLLFVBQVUsUUFBUSxDQUFDLENBQUM7SUFDcEQsSUFBSSxXQUFXLE9BQU8sQ0FBQyxLQUFLLFVBQVUsSUFBSSxDQUFDLENBQUM7SUFDNUMsSUFBSSxZQUFZLE9BQU8sQ0FBQyxLQUFLLFVBQVUsS0FBSyxDQUFDLENBQUM7SUFDOUMsSUFBSSxvQkFBb0IsT0FBTyxDQUFDLE1BQU0sVUFBVSxZQUFZLENBQUMsQ0FBQztJQUM5RCxJQUFJLGNBQWMsT0FBTyxDQUFDLE1BQU0sVUFBVSxNQUFNLENBQUMsQ0FBQztJQUNsRCxJQUFJLGdCQUFnQixPQUFPLENBQUMsTUFBTSxVQUFVLFFBQVEsQ0FBQyxDQUFDO0lBQ3RELElBQUksZ0JBQWdCLE9BQU8sQ0FBQyxNQUFNLFVBQVUsUUFBUSxDQUFDLENBQUM7SUFDdEQsSUFBSSxhQUFhLE9BQU8sQ0FBQyxNQUFNLFVBQVUsS0FBSyxDQUFDLENBQUM7SUFDaEQsSUFBSSxhQUFhLE9BQU8sQ0FBQyxNQUFNLFVBQVUsS0FBSyxDQUFDLENBQUM7SUFDaEQsSUFBSSxrQkFBa0IsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdDLHVCQUF1QjtNQUNyQixPQUFPLG1CQUFtQjtRQUN4QixLQUFLLElBQUksT0FBTyxTQUFTLE9BQU8sRUFBRSxPQUFPLElBQUksS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO1VBQzFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsT0FBTyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztPQUNuQyxDQUFDO0tBQ0g7SUFDRCwyQkFBMkI7TUFDekIsT0FBTyxZQUFZO1FBQ2pCLEtBQUssSUFBSSxRQUFRLFNBQVMsT0FBTyxFQUFFLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtVQUM3RixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsT0FBTyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO09BQzlCLENBQUM7S0FDSDtJQUNELDhCQUE4QjtNQUM1QixJQUFJLGNBQWMsRUFBRTtRQUNsQixjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQzNCO01BQ0QsSUFBSSxJQUFJLEtBQUssT0FBTyxDQUFDO01BQ3JCLE9BQU8sQ0FBQyxFQUFFLEVBQUU7UUFDVixJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO1VBQy9CLElBQUksWUFBWSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztVQUMzQyxJQUFJLFNBQVMsS0FBSyxPQUFPLEVBQUU7WUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtjQUNwQixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO2FBQ3RCO1lBQ0QsVUFBVSxTQUFTLENBQUM7V0FDckI7U0FDRjtRQUNELEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUM7T0FDckI7TUFDRCxPQUFPLEdBQUcsQ0FBQztLQUNaO0lBQ0QsdUJBQXVCO01BQ3JCLElBQUksWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDL0IsSUFBSSxRQUFRLENBQUM7TUFDYixLQUFLLFFBQVEsSUFBSSxNQUFNLEVBQUU7UUFDdkIsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7VUFDN0MsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN4QztPQUNGO01BQ0QsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFDRCxvQ0FBb0M7TUFDbEMsT0FBTyxNQUFNLEtBQUssSUFBSSxFQUFFO1FBQ3RCLElBQUksT0FBTyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEQsSUFBSSxJQUFJLEVBQUU7VUFDUixJQUFJLElBQUksSUFBSSxFQUFFO1lBQ1osT0FBTyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztXQUMxQjtVQUNELElBQUksT0FBTyxJQUFJLE1BQU0sS0FBSyxVQUFVLEVBQUU7WUFDcEMsT0FBTyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQztXQUM1QjtTQUNGO1FBQ0QsU0FBUyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDakM7TUFDRCxnQ0FBZ0M7UUFDOUIsT0FBTyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDNUMsT0FBTyxJQUFJLENBQUM7T0FDYjtNQUNELE9BQU8sYUFBYSxDQUFDO0tBQ3RCO0lBQ0QsSUFBSSxTQUFTLE1BQU0sQ0FBQztNQUNsQixHQUFHO01BQ0gsTUFBTTtNQUNOLFNBQVM7TUFDVCxTQUFTO01BQ1QsTUFBTTtNQUNOLFNBQVM7TUFDVCxPQUFPO01BQ1AsT0FBTztNQUNQLEdBQUc7TUFDSCxLQUFLO01BQ0wsS0FBSztNQUNMLEtBQUs7TUFDTCxPQUFPO01BQ1AsWUFBWTtNQUNaLE1BQU07TUFDTixJQUFJO01BQ0osUUFBUTtNQUNSLFFBQVE7TUFDUixTQUFTO01BQ1QsUUFBUTtNQUNSLE1BQU07TUFDTixNQUFNO01BQ04sS0FBSztNQUNMLFVBQVU7TUFDVixTQUFTO01BQ1QsTUFBTTtNQUNOLFVBQVU7TUFDVixJQUFJO01BQ0osV0FBVztNQUNYLEtBQUs7TUFDTCxTQUFTO01BQ1QsS0FBSztNQUNMLFFBQVE7TUFDUixLQUFLO01BQ0wsS0FBSztNQUNMLElBQUk7TUFDSixJQUFJO01BQ0osU0FBUztNQUNULElBQUk7TUFDSixVQUFVO01BQ1YsWUFBWTtNQUNaLFFBQVE7TUFDUixNQUFNO01BQ04sUUFBUTtNQUNSLE1BQU07TUFDTixJQUFJO01BQ0osSUFBSTtNQUNKLElBQUk7TUFDSixJQUFJO01BQ0osSUFBSTtNQUNKLElBQUk7TUFDSixNQUFNO01BQ04sUUFBUTtNQUNSLFFBQVE7TUFDUixJQUFJO01BQ0osTUFBTTtNQUNOLEdBQUc7TUFDSCxLQUFLO01BQ0wsT0FBTztNQUNQLEtBQUs7TUFDTCxLQUFLO01BQ0wsT0FBTztNQUNQLFFBQVE7TUFDUixJQUFJO01BQ0osTUFBTTtNQUNOLEtBQUs7TUFDTCxNQUFNO01BQ04sU0FBUztNQUNULE1BQU07TUFDTixVQUFVO01BQ1YsT0FBTztNQUNQLEtBQUs7TUFDTCxNQUFNO01BQ04sSUFBSTtNQUNKLFVBQVU7TUFDVixRQUFRO01BQ1IsUUFBUTtNQUNSLEdBQUc7TUFDSCxTQUFTO01BQ1QsS0FBSztNQUNMLFVBQVU7TUFDVixHQUFHO01BQ0gsSUFBSTtNQUNKLElBQUk7TUFDSixNQUFNO01BQ04sR0FBRztNQUNILE1BQU07TUFDTixTQUFTO01BQ1QsUUFBUTtNQUNSLFFBQVE7TUFDUixPQUFPO01BQ1AsUUFBUTtNQUNSLFFBQVE7TUFDUixNQUFNO01BQ04sUUFBUTtNQUNSLFFBQVE7TUFDUixPQUFPO01BQ1AsS0FBSztNQUNMLFNBQVM7TUFDVCxLQUFLO01BQ0wsT0FBTztNQUNQLE9BQU87TUFDUCxJQUFJO01BQ0osVUFBVTtNQUNWLFVBQVU7TUFDVixPQUFPO01BQ1AsSUFBSTtNQUNKLE9BQU87TUFDUCxNQUFNO01BQ04sSUFBSTtNQUNKLE9BQU87TUFDUCxJQUFJO01BQ0osR0FBRztNQUNILElBQUk7TUFDSixLQUFLO01BQ0wsT0FBTztNQUNQLEtBQUs7S0FDTixDQUFDLENBQUM7SUFDSCxJQUFJLFFBQVEsTUFBTSxDQUFDO01BQ2pCLEtBQUs7TUFDTCxHQUFHO01BQ0gsVUFBVTtNQUNWLGFBQWE7TUFDYixjQUFjO01BQ2QsY0FBYztNQUNkLGVBQWU7TUFDZixrQkFBa0I7TUFDbEIsUUFBUTtNQUNSLFVBQVU7TUFDVixNQUFNO01BQ04sTUFBTTtNQUNOLFNBQVM7TUFDVCxRQUFRO01BQ1IsTUFBTTtNQUNOLEdBQUc7TUFDSCxPQUFPO01BQ1AsVUFBVTtNQUNWLE9BQU87TUFDUCxPQUFPO01BQ1AsTUFBTTtNQUNOLGdCQUFnQjtNQUNoQixRQUFRO01BQ1IsTUFBTTtNQUNOLFVBQVU7TUFDVixPQUFPO01BQ1AsTUFBTTtNQUNOLFNBQVM7TUFDVCxTQUFTO01BQ1QsVUFBVTtNQUNWLGdCQUFnQjtNQUNoQixNQUFNO01BQ04sTUFBTTtNQUNOLE9BQU87TUFDUCxRQUFRO01BQ1IsUUFBUTtNQUNSLE1BQU07TUFDTixVQUFVO01BQ1YsT0FBTztNQUNQLE1BQU07TUFDTixPQUFPO01BQ1AsTUFBTTtNQUNOLE9BQU87S0FDUixDQUFDLENBQUM7SUFDSCxJQUFJLGFBQWEsTUFBTSxDQUFDO01BQ3RCLFNBQVM7TUFDVCxlQUFlO01BQ2YscUJBQXFCO01BQ3JCLGFBQWE7TUFDYixrQkFBa0I7TUFDbEIsbUJBQW1CO01BQ25CLG1CQUFtQjtNQUNuQixnQkFBZ0I7TUFDaEIsU0FBUztNQUNULFNBQVM7TUFDVCxTQUFTO01BQ1QsU0FBUztNQUNULFNBQVM7TUFDVCxnQkFBZ0I7TUFDaEIsU0FBUztNQUNULFNBQVM7TUFDVCxhQUFhO01BQ2IsY0FBYztNQUNkLFVBQVU7TUFDVixjQUFjO01BQ2Qsb0JBQW9CO01BQ3BCLGFBQWE7TUFDYixRQUFRO01BQ1IsY0FBYztLQUNmLENBQUMsQ0FBQztJQUNILElBQUksZ0JBQWdCLE1BQU0sQ0FBQztNQUN6QixTQUFTO01BQ1QsZUFBZTtNQUNmLFFBQVE7TUFDUixTQUFTO01BQ1QsY0FBYztNQUNkLFdBQVc7TUFDWCxrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLGVBQWU7TUFDZixlQUFlO01BQ2YsZUFBZTtNQUNmLE9BQU87TUFDUCxXQUFXO01BQ1gsTUFBTTtNQUNOLGNBQWM7TUFDZCxXQUFXO01BQ1gsU0FBUztNQUNULGVBQWU7TUFDZixRQUFRO01BQ1IsS0FBSztNQUNMLFlBQVk7TUFDWixTQUFTO01BQ1QsS0FBSztLQUNOLENBQUMsQ0FBQztJQUNILElBQUksV0FBVyxNQUFNLENBQUM7TUFDcEIsTUFBTTtNQUNOLFVBQVU7TUFDVixRQUFRO01BQ1IsU0FBUztNQUNULE9BQU87TUFDUCxRQUFRO01BQ1IsSUFBSTtNQUNKLFlBQVk7TUFDWixlQUFlO01BQ2YsSUFBSTtNQUNKLElBQUk7TUFDSixPQUFPO01BQ1AsU0FBUztNQUNULFVBQVU7TUFDVixPQUFPO01BQ1AsTUFBTTtNQUNOLElBQUk7TUFDSixRQUFRO01BQ1IsT0FBTztNQUNQLFFBQVE7TUFDUixNQUFNO01BQ04sTUFBTTtNQUNOLFNBQVM7TUFDVCxRQUFRO01BQ1IsS0FBSztNQUNMLE9BQU87TUFDUCxLQUFLO01BQ0wsUUFBUTtNQUNSLFlBQVk7S0FDYixDQUFDLENBQUM7SUFDSCxJQUFJLG1CQUFtQixNQUFNLENBQUM7TUFDNUIsU0FBUztNQUNULGFBQWE7TUFDYixZQUFZO01BQ1osVUFBVTtNQUNWLFdBQVc7TUFDWCxTQUFTO01BQ1QsU0FBUztNQUNULFFBQVE7TUFDUixRQUFRO01BQ1IsT0FBTztNQUNQLFdBQVc7TUFDWCxZQUFZO01BQ1osZ0JBQWdCO01BQ2hCLGFBQWE7TUFDYixNQUFNO0tBQ1AsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxPQUFPLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDN0IsSUFBSSxPQUFPLE1BQU0sQ0FBQztNQUNoQixRQUFRO01BQ1IsUUFBUTtNQUNSLE9BQU87TUFDUCxLQUFLO01BQ0wsZ0JBQWdCO01BQ2hCLGNBQWM7TUFDZCxzQkFBc0I7TUFDdEIsVUFBVTtNQUNWLFlBQVk7TUFDWixTQUFTO01BQ1QsUUFBUTtNQUNSLFNBQVM7TUFDVCxhQUFhO01BQ2IsYUFBYTtNQUNiLFNBQVM7TUFDVCxNQUFNO01BQ04sT0FBTztNQUNQLE9BQU87TUFDUCxPQUFPO01BQ1AsTUFBTTtNQUNOLFNBQVM7TUFDVCxVQUFVO01BQ1YsY0FBYztNQUNkLFFBQVE7TUFDUixhQUFhO01BQ2IsVUFBVTtNQUNWLFVBQVU7TUFDVixTQUFTO01BQ1QsS0FBSztNQUNMLFVBQVU7TUFDVix5QkFBeUI7TUFDekIsdUJBQXVCO01BQ3ZCLFVBQVU7TUFDVixXQUFXO01BQ1gsU0FBUztNQUNULGNBQWM7TUFDZCxNQUFNO01BQ04sS0FBSztNQUNMLFNBQVM7TUFDVCxRQUFRO01BQ1IsUUFBUTtNQUNSLE1BQU07TUFDTixNQUFNO01BQ04sVUFBVTtNQUNWLElBQUk7TUFDSixXQUFXO01BQ1gsV0FBVztNQUNYLE9BQU87TUFDUCxNQUFNO01BQ04sT0FBTztNQUNQLE1BQU07TUFDTixNQUFNO01BQ04sU0FBUztNQUNULE1BQU07TUFDTixLQUFLO01BQ0wsS0FBSztNQUNMLFdBQVc7TUFDWCxPQUFPO01BQ1AsUUFBUTtNQUNSLEtBQUs7TUFDTCxXQUFXO01BQ1gsVUFBVTtNQUNWLE9BQU87TUFDUCxNQUFNO01BQ04sT0FBTztNQUNQLFNBQVM7TUFDVCxZQUFZO01BQ1osUUFBUTtNQUNSLE1BQU07TUFDTixTQUFTO01BQ1QsU0FBUztNQUNULGFBQWE7TUFDYixhQUFhO01BQ2IsUUFBUTtNQUNSLFNBQVM7TUFDVCxTQUFTO01BQ1QsWUFBWTtNQUNaLFVBQVU7TUFDVixLQUFLO01BQ0wsVUFBVTtNQUNWLEtBQUs7TUFDTCxVQUFVO01BQ1YsTUFBTTtNQUNOLE1BQU07TUFDTixTQUFTO01BQ1QsWUFBWTtNQUNaLE9BQU87TUFDUCxVQUFVO01BQ1YsT0FBTztNQUNQLE1BQU07TUFDTixPQUFPO01BQ1AsTUFBTTtNQUNOLFNBQVM7TUFDVCxPQUFPO01BQ1AsS0FBSztNQUNMLFFBQVE7TUFDUixNQUFNO01BQ04sT0FBTztNQUNQLFNBQVM7TUFDVCxVQUFVO01BQ1YsT0FBTztNQUNQLFdBQVc7TUFDWCxNQUFNO01BQ04sUUFBUTtNQUNSLFFBQVE7TUFDUixPQUFPO01BQ1AsT0FBTztNQUNQLE9BQU87TUFDUCxNQUFNO0tBQ1AsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxNQUFNLE1BQU0sQ0FBQztNQUNmLGVBQWU7TUFDZixZQUFZO01BQ1osVUFBVTtNQUNWLG9CQUFvQjtNQUNwQixRQUFRO01BQ1IsZUFBZTtNQUNmLGVBQWU7TUFDZixTQUFTO01BQ1QsZUFBZTtNQUNmLGdCQUFnQjtNQUNoQixPQUFPO01BQ1AsTUFBTTtNQUNOLElBQUk7TUFDSixPQUFPO01BQ1AsTUFBTTtNQUNOLGVBQWU7TUFDZixXQUFXO01BQ1gsV0FBVztNQUNYLE9BQU87TUFDUCxxQkFBcUI7TUFDckIsNkJBQTZCO01BQzdCLGVBQWU7TUFDZixpQkFBaUI7TUFDakIsSUFBSTtNQUNKLElBQUk7TUFDSixHQUFHO01BQ0gsSUFBSTtNQUNKLElBQUk7TUFDSixpQkFBaUI7TUFDakIsV0FBVztNQUNYLFNBQVM7TUFDVCxTQUFTO01BQ1QsS0FBSztNQUNMLFVBQVU7TUFDVixXQUFXO01BQ1gsS0FBSztNQUNMLE1BQU07TUFDTixjQUFjO01BQ2QsV0FBVztNQUNYLFFBQVE7TUFDUixhQUFhO01BQ2IsYUFBYTtNQUNiLGVBQWU7TUFDZixhQUFhO01BQ2IsV0FBVztNQUNYLGtCQUFrQjtNQUNsQixjQUFjO01BQ2QsWUFBWTtNQUNaLGNBQWM7TUFDZCxhQUFhO01BQ2IsSUFBSTtNQUNKLElBQUk7TUFDSixJQUFJO01BQ0osSUFBSTtNQUNKLFlBQVk7TUFDWixVQUFVO01BQ1YsZUFBZTtNQUNmLG1CQUFtQjtNQUNuQixRQUFRO01BQ1IsTUFBTTtNQUNOLElBQUk7TUFDSixpQkFBaUI7TUFDakIsSUFBSTtNQUNKLEtBQUs7TUFDTCxHQUFHO01BQ0gsSUFBSTtNQUNKLElBQUk7TUFDSixJQUFJO01BQ0osSUFBSTtNQUNKLFNBQVM7TUFDVCxXQUFXO01BQ1gsWUFBWTtNQUNaLFVBQVU7TUFDVixNQUFNO01BQ04sY0FBYztNQUNkLGdCQUFnQjtNQUNoQixjQUFjO01BQ2Qsa0JBQWtCO01BQ2xCLGdCQUFnQjtNQUNoQixPQUFPO01BQ1AsWUFBWTtNQUNaLFlBQVk7TUFDWixjQUFjO01BQ2QsY0FBYztNQUNkLGFBQWE7TUFDYixhQUFhO01BQ2Isa0JBQWtCO01BQ2xCLFdBQVc7TUFDWCxLQUFLO01BQ0wsTUFBTTtNQUNOLE9BQU87TUFDUCxRQUFRO01BQ1IsTUFBTTtNQUNOLEtBQUs7TUFDTCxNQUFNO01BQ04sWUFBWTtNQUNaLFFBQVE7TUFDUixVQUFVO01BQ1YsU0FBUztNQUNULE9BQU87TUFDUCxRQUFRO01BQ1IsYUFBYTtNQUNiLFFBQVE7TUFDUixVQUFVO01BQ1YsYUFBYTtNQUNiLE1BQU07TUFDTixZQUFZO01BQ1oscUJBQXFCO01BQ3JCLGtCQUFrQjtNQUNsQixjQUFjO01BQ2QsUUFBUTtNQUNSLGVBQWU7TUFDZixxQkFBcUI7TUFDckIsZ0JBQWdCO01BQ2hCLEdBQUc7TUFDSCxJQUFJO01BQ0osSUFBSTtNQUNKLFFBQVE7TUFDUixNQUFNO01BQ04sTUFBTTtNQUNOLGFBQWE7TUFDYixXQUFXO01BQ1gsU0FBUztNQUNULFFBQVE7TUFDUixRQUFRO01BQ1IsT0FBTztNQUNQLE1BQU07TUFDTixpQkFBaUI7TUFDakIsa0JBQWtCO01BQ2xCLGtCQUFrQjtNQUNsQixjQUFjO01BQ2QsYUFBYTtNQUNiLGNBQWM7TUFDZCxhQUFhO01BQ2IsWUFBWTtNQUNaLGNBQWM7TUFDZCxrQkFBa0I7TUFDbEIsbUJBQW1CO01BQ25CLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsbUJBQW1CO01BQ25CLGdCQUFnQjtNQUNoQixRQUFRO01BQ1IsY0FBYztNQUNkLE9BQU87TUFDUCxjQUFjO01BQ2QsZ0JBQWdCO01BQ2hCLFVBQVU7TUFDVixTQUFTO01BQ1QsU0FBUztNQUNULFdBQVc7TUFDWCxrQkFBa0I7TUFDbEIsYUFBYTtNQUNiLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIsWUFBWTtNQUNaLE1BQU07TUFDTixJQUFJO01BQ0osSUFBSTtNQUNKLFNBQVM7TUFDVCxRQUFRO01BQ1IsU0FBUztNQUNULFlBQVk7TUFDWixTQUFTO01BQ1QsWUFBWTtNQUNaLGVBQWU7TUFDZixlQUFlO01BQ2YsT0FBTztNQUNQLGNBQWM7TUFDZCxNQUFNO01BQ04sY0FBYztNQUNkLGtCQUFrQjtNQUNsQixrQkFBa0I7TUFDbEIsR0FBRztNQUNILElBQUk7TUFDSixJQUFJO01BQ0osT0FBTztNQUNQLEdBQUc7TUFDSCxJQUFJO01BQ0osSUFBSTtNQUNKLEdBQUc7TUFDSCxZQUFZO0tBQ2IsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxTQUFTLE1BQU0sQ0FBQztNQUNsQixRQUFRO01BQ1IsYUFBYTtNQUNiLE9BQU87TUFDUCxVQUFVO01BQ1YsT0FBTztNQUNQLGNBQWM7TUFDZCxhQUFhO01BQ2IsWUFBWTtNQUNaLFlBQVk7TUFDWixPQUFPO01BQ1AsS0FBSztNQUNMLFNBQVM7TUFDVCxjQUFjO01BQ2QsVUFBVTtNQUNWLE9BQU87TUFDUCxPQUFPO01BQ1AsUUFBUTtNQUNSLE1BQU07TUFDTixJQUFJO01BQ0osU0FBUztNQUNULFFBQVE7TUFDUixlQUFlO01BQ2YsUUFBUTtNQUNSLFFBQVE7TUFDUixnQkFBZ0I7TUFDaEIsV0FBVztNQUNYLFVBQVU7TUFDVixhQUFhO01BQ2IsU0FBUztNQUNULFNBQVM7TUFDVCxlQUFlO01BQ2YsVUFBVTtNQUNWLFVBQVU7TUFDVixNQUFNO01BQ04sVUFBVTtNQUNWLFVBQVU7TUFDVixZQUFZO01BQ1osU0FBUztNQUNULFFBQVE7TUFDUixRQUFRO01BQ1IsYUFBYTtNQUNiLGVBQWU7TUFDZixzQkFBc0I7TUFDdEIsV0FBVztNQUNYLFdBQVc7TUFDWCxZQUFZO01BQ1osVUFBVTtNQUNWLGdCQUFnQjtNQUNoQixnQkFBZ0I7TUFDaEIsV0FBVztNQUNYLFNBQVM7TUFDVCxPQUFPO01BQ1AsT0FBTztLQUNSLENBQUMsQ0FBQztJQUNILElBQUksTUFBTSxNQUFNLENBQUM7TUFDZixZQUFZO01BQ1osUUFBUTtNQUNSLGFBQWE7TUFDYixXQUFXO01BQ1gsYUFBYTtLQUNkLENBQUMsQ0FBQztJQUNILElBQUksZ0JBQWdCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQ3RELElBQUksV0FBVyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUM3QyxJQUFJLFlBQVksSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDbkQsSUFBSSxZQUFZLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3ZDLElBQUksaUJBQWlCLElBQUksQ0FBQyx1RkFBdUYsQ0FBQyxDQUFDO0lBQ25ILElBQUksb0JBQW9CLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3RELElBQUksa0JBQWtCLElBQUksQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO0lBQzFGLElBQUksZUFBZSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkMsSUFBSSxZQUFZLHFCQUFxQjtNQUNuQyxPQUFPLE9BQU8sTUFBTSxLQUFLLFdBQVcsR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDO0tBQ3RELENBQUM7SUFDRixJQUFJLDRCQUE0QiwyREFBMkQ7TUFDekYsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssUUFBUSxJQUFJLE9BQU8sWUFBWSxhQUFhLEtBQUssVUFBVSxFQUFFO1FBQ3pGLE9BQU8sSUFBSSxDQUFDO09BQ2I7TUFDRCxJQUFJLFNBQVMsSUFBSSxDQUFDO01BQ2xCLElBQUksWUFBWSx1QkFBdUIsQ0FBQztNQUN4QyxJQUFJLFFBQVEsY0FBYyxJQUFJLFFBQVEsY0FBYyxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDNUUsU0FBUyxRQUFRLGNBQWMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO09BQ3pEO01BQ0QsSUFBSSxhQUFhLFdBQVcsSUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztNQUM1RCxJQUFJO1FBQ0YsT0FBTyxZQUFZLGFBQWEsQ0FBQyxVQUFVLEVBQUU7VUFDM0MsWUFBWSwwQkFBMEI7WUFDcEMsT0FBTyxJQUFJLENBQUM7V0FDYjtTQUNGLENBQUMsQ0FBQztPQUNKLENBQUMsVUFBVTtRQUNWLE9BQU8sS0FBSyxDQUFDLHNCQUFzQixHQUFHLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzdFLE9BQU8sSUFBSSxDQUFDO09BQ2I7S0FDRixDQUFDO0lBQ0YsMkJBQTJCO01BQ3pCLElBQUksU0FBUyxTQUFTLE9BQU8sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUM7TUFDN0YsSUFBSSxZQUFZLHlCQUF5QjtRQUN2QyxPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUM5QixDQUFDO01BQ0YsU0FBUyxRQUFRLEdBQUcsT0FBTyxDQUFDO01BQzVCLFNBQVMsUUFBUSxHQUFHLEVBQUUsQ0FBQztNQUN2QixJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxTQUFTLElBQUksTUFBTSxTQUFTLFNBQVMsS0FBSyxDQUFDLEVBQUU7UUFDakUsU0FBUyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzlCLE9BQU8sU0FBUyxDQUFDO09BQ2xCO01BQ0QsSUFBSSxtQkFBbUIsTUFBTSxTQUFTLENBQUM7TUFDdkMsSUFBSSxXQUFXLE1BQU0sU0FBUyxDQUFDO01BQy9CLElBQUksbUJBQW1CLE1BQU0saUJBQWlCLEVBQUUsc0JBQXNCLE1BQU0sb0JBQW9CLEVBQUUsT0FBTyxNQUFNLEtBQUssRUFBRSxVQUFVLE1BQU0sUUFBUSxFQUFFLGFBQWEsTUFBTSxXQUFXLEVBQUUsdUJBQXVCLE1BQU0sYUFBYSxFQUFFLGVBQWUsb0JBQW9CLEtBQUssS0FBSyxDQUFDLEdBQUcsTUFBTSxhQUFhLElBQUksTUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsRUFBRSxrQkFBa0IsTUFBTSxnQkFBZ0IsRUFBRSxZQUFZLE1BQU0sVUFBVSxFQUFFLGVBQWUsTUFBTSxhQUFhLENBQUM7TUFDOWIsSUFBSSxtQkFBbUIsT0FBTyxVQUFVLENBQUM7TUFDekMsSUFBSSxZQUFZLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsQ0FBQztNQUM1RCxJQUFJLGlCQUFpQixZQUFZLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDLENBQUM7TUFDbkUsSUFBSSxnQkFBZ0IsWUFBWSxDQUFDLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxDQUFDO01BQ2pFLElBQUksZ0JBQWdCLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsQ0FBQztNQUNqRSxJQUFJLE9BQU8sbUJBQW1CLEtBQUssVUFBVSxFQUFFO1FBQzdDLElBQUksV0FBVyxRQUFRLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRCxJQUFJLFFBQVEsUUFBUSxJQUFJLFFBQVEsUUFBUSxjQUFjLEVBQUU7VUFDdEQsV0FBVyxRQUFRLFFBQVEsY0FBYyxDQUFDO1NBQzNDO09BQ0Y7TUFDRCxJQUFJLHFCQUFxQix5QkFBeUIsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztNQUNuRixJQUFJLFlBQVksa0JBQWtCLEdBQUcsa0JBQWtCLFdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7TUFDNUUsSUFBSSxZQUFZLFFBQVEsRUFBRSxpQkFBaUIsU0FBUyxlQUFlLEVBQUUscUJBQXFCLFNBQVMsbUJBQW1CLEVBQUUseUJBQXlCLFNBQVMsdUJBQXVCLEVBQUUsdUJBQXVCLFNBQVMscUJBQXFCLENBQUM7TUFDek8sSUFBSSxhQUFhLGdCQUFnQixXQUFXLENBQUM7TUFDN0MsSUFBSSxlQUFlLEVBQUUsQ0FBQztNQUN0QixJQUFJO1FBQ0YsZUFBZSxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxRQUFRLGFBQWEsR0FBRyxFQUFFLENBQUM7T0FDMUUsQ0FBQyxVQUFVO09BQ1g7TUFDRCxJQUFJLFFBQVEsRUFBRSxDQUFDO01BQ2YsU0FBUyxZQUFZLEdBQUcsT0FBTyxhQUFhLEtBQUssVUFBVSxJQUFJLGNBQWMsSUFBSSxPQUFPLGNBQWMsbUJBQW1CLEtBQUssV0FBVyxJQUFJLFlBQVksS0FBSyxDQUFDLENBQUM7TUFDaEssSUFBSSxrQkFBa0IsYUFBYSxFQUFFLGFBQWEsUUFBUSxFQUFFLGNBQWMsU0FBUyxFQUFFLGNBQWMsU0FBUyxFQUFFLHNCQUFzQixpQkFBaUIsRUFBRSxvQkFBb0IsZUFBZSxDQUFDO01BQzNMLElBQUksbUJBQW1CLGNBQWMsQ0FBQztNQUN0QyxJQUFJLGVBQWUsSUFBSSxDQUFDO01BQ3hCLElBQUksdUJBQXVCLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEVBQUUsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQUUsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2xNLElBQUksZUFBZSxJQUFJLENBQUM7TUFDeEIsSUFBSSx1QkFBdUIsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDM0osSUFBSSwwQkFBMEIsTUFBTSxLQUFLLENBQUMsTUFBTSxPQUFPLENBQUMsSUFBSSxFQUFFO1FBQzVELGNBQWM7VUFDWixVQUFVLElBQUk7VUFDZCxjQUFjLEtBQUs7VUFDbkIsWUFBWSxJQUFJO1VBQ2hCLE9BQU8sSUFBSTtTQUNaO1FBQ0Qsb0JBQW9CO1VBQ2xCLFVBQVUsSUFBSTtVQUNkLGNBQWMsS0FBSztVQUNuQixZQUFZLElBQUk7VUFDaEIsT0FBTyxJQUFJO1NBQ1o7UUFDRCxnQ0FBZ0M7VUFDOUIsVUFBVSxJQUFJO1VBQ2QsY0FBYyxLQUFLO1VBQ25CLFlBQVksSUFBSTtVQUNoQixPQUFPLEtBQUs7U0FDYjtPQUNGLENBQUMsQ0FBQyxDQUFDO01BQ0osSUFBSSxjQUFjLElBQUksQ0FBQztNQUN2QixJQUFJLGNBQWMsSUFBSSxDQUFDO01BQ3ZCLElBQUksa0JBQWtCLElBQUksQ0FBQztNQUMzQixJQUFJLGtCQUFrQixJQUFJLENBQUM7TUFDM0IsSUFBSSwwQkFBMEIsS0FBSyxDQUFDO01BQ3BDLElBQUkscUJBQXFCLEtBQUssQ0FBQztNQUMvQixJQUFJLGlCQUFpQixLQUFLLENBQUM7TUFDM0IsSUFBSSxhQUFhLEtBQUssQ0FBQztNQUN2QixJQUFJLGFBQWEsS0FBSyxDQUFDO01BQ3ZCLElBQUksYUFBYSxLQUFLLENBQUM7TUFDdkIsSUFBSSxzQkFBc0IsS0FBSyxDQUFDO01BQ2hDLElBQUksc0JBQXNCLEtBQUssQ0FBQztNQUNoQyxJQUFJLGVBQWUsSUFBSSxDQUFDO01BQ3hCLElBQUksZUFBZSxJQUFJLENBQUM7TUFDeEIsSUFBSSxXQUFXLEtBQUssQ0FBQztNQUNyQixJQUFJLGVBQWUsRUFBRSxDQUFDO01BQ3RCLElBQUksa0JBQWtCLElBQUksQ0FBQztNQUMzQixJQUFJLDBCQUEwQixRQUFRLENBQUMsRUFBRSxFQUFFO1FBQ3pDLGdCQUFnQjtRQUNoQixPQUFPO1FBQ1AsVUFBVTtRQUNWLE1BQU07UUFDTixlQUFlO1FBQ2YsTUFBTTtRQUNOLFFBQVE7UUFDUixNQUFNO1FBQ04sSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLE9BQU87UUFDUCxTQUFTO1FBQ1QsVUFBVTtRQUNWLFVBQVU7UUFDVixXQUFXO1FBQ1gsUUFBUTtRQUNSLE9BQU87UUFDUCxLQUFLO1FBQ0wsVUFBVTtRQUNWLE9BQU87UUFDUCxPQUFPO1FBQ1AsT0FBTztRQUNQLEtBQUs7T0FDTixDQUFDLENBQUM7TUFDSCxJQUFJLGdCQUFnQixJQUFJLENBQUM7TUFDekIsSUFBSSx3QkFBd0IsUUFBUSxDQUFDLEVBQUUsRUFBRTtRQUN2QyxPQUFPO1FBQ1AsT0FBTztRQUNQLEtBQUs7UUFDTCxRQUFRO1FBQ1IsT0FBTztRQUNQLE9BQU87T0FDUixDQUFDLENBQUM7TUFDSCxJQUFJLHNCQUFzQixJQUFJLENBQUM7TUFDL0IsSUFBSSw4QkFBOEIsUUFBUSxDQUFDLEVBQUUsRUFBRTtRQUM3QyxLQUFLO1FBQ0wsT0FBTztRQUNQLEtBQUs7UUFDTCxJQUFJO1FBQ0osT0FBTztRQUNQLE1BQU07UUFDTixTQUFTO1FBQ1QsYUFBYTtRQUNiLE1BQU07UUFDTixTQUFTO1FBQ1QsT0FBTztRQUNQLE9BQU87UUFDUCxPQUFPO1FBQ1AsT0FBTztPQUNSLENBQUMsQ0FBQztNQUNILElBQUksbUJBQW1CLG9DQUFvQyxDQUFDO01BQzVELElBQUksZ0JBQWdCLDRCQUE0QixDQUFDO01BQ2pELElBQUksaUJBQWlCLDhCQUE4QixDQUFDO01BQ3BELElBQUksWUFBWSxjQUFjLENBQUM7TUFDL0IsSUFBSSxpQkFBaUIsS0FBSyxDQUFDO01BQzNCLElBQUksaUJBQWlCLENBQUM7TUFDdEIsSUFBSSwrQkFBK0I7UUFDakMsdUJBQXVCO1FBQ3ZCLFdBQVc7T0FDWixDQUFDO01BQ0YsSUFBSSw0QkFBNEIsV0FBVyxDQUFDO01BQzVDLElBQUksaUJBQWlCLENBQUM7TUFDdEIsSUFBSSxTQUFTLElBQUksQ0FBQztNQUNsQixJQUFJLGNBQWMsUUFBUSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDakQsSUFBSSxvQkFBb0Isc0NBQXNDO1FBQzVELE9BQU8sU0FBUyxZQUFZLE1BQU0sSUFBSSxTQUFTLFlBQVksUUFBUSxDQUFDO09BQ3JFLENBQUM7TUFDRixJQUFJLGVBQWUsMkJBQTJCO1FBQzVDLElBQUksTUFBTSxJQUFJLE1BQU0sS0FBSyxHQUFHLEVBQUU7VUFDNUIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxFQUFFO1VBQ3JDLE1BQU0sRUFBRSxDQUFDO1NBQ1Y7UUFDRCxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQixlQUFlLGNBQWMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsRUFBRSxHQUFHLGFBQWEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO1FBQzdGLGVBQWUsY0FBYyxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsRUFBRSxFQUFFLEdBQUcsYUFBYSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7UUFDN0Ysc0JBQXNCLG1CQUFtQixJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLDJCQUEyQixDQUFDO1FBQ3JKLGdCQUFnQixtQkFBbUIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxxQkFBcUIsQ0FBQztRQUNuSSxrQkFBa0IsaUJBQWlCLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxFQUFFLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLHVCQUF1QixDQUFDO1FBQ3pHLGNBQWMsYUFBYSxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsRUFBRSxFQUFFLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hFLGNBQWMsYUFBYSxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsRUFBRSxFQUFFLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hFLGVBQWUsY0FBYyxJQUFJLEdBQUcsR0FBRyxHQUFHLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDaEUsa0JBQWtCLEdBQUcsZ0JBQWdCLEtBQUssS0FBSyxDQUFDO1FBQ2hELGtCQUFrQixHQUFHLGdCQUFnQixLQUFLLEtBQUssQ0FBQztRQUNoRCwwQkFBMEIsR0FBRyx3QkFBd0IsSUFBSSxLQUFLLENBQUM7UUFDL0QscUJBQXFCLEdBQUcsbUJBQW1CLElBQUksS0FBSyxDQUFDO1FBQ3JELGlCQUFpQixHQUFHLGVBQWUsSUFBSSxLQUFLLENBQUM7UUFDN0MsYUFBYSxHQUFHLFdBQVcsSUFBSSxLQUFLLENBQUM7UUFDckMsc0JBQXNCLEdBQUcsb0JBQW9CLElBQUksS0FBSyxDQUFDO1FBQ3ZELHNCQUFzQixHQUFHLG9CQUFvQixJQUFJLEtBQUssQ0FBQztRQUN2RCxhQUFhLEdBQUcsV0FBVyxJQUFJLEtBQUssQ0FBQztRQUNyQyxlQUFlLEdBQUcsYUFBYSxLQUFLLEtBQUssQ0FBQztRQUMxQyxlQUFlLEdBQUcsYUFBYSxLQUFLLEtBQUssQ0FBQztRQUMxQyxXQUFXLEdBQUcsU0FBUyxJQUFJLEtBQUssQ0FBQztRQUNqQyxtQkFBbUIsR0FBRyxtQkFBbUIsSUFBSSxnQkFBZ0IsQ0FBQztRQUM5RCxZQUFZLEdBQUcsVUFBVSxJQUFJLGNBQWMsQ0FBQztRQUM1QyxJQUFJLEdBQUcsd0JBQXdCLElBQUksaUJBQWlCLENBQUMsR0FBRyx3QkFBd0IsYUFBYSxDQUFDLEVBQUU7VUFDOUYsdUJBQXVCLGFBQWEsR0FBRyxHQUFHLHdCQUF3QixhQUFhLENBQUM7U0FDakY7UUFDRCxJQUFJLEdBQUcsd0JBQXdCLElBQUksaUJBQWlCLENBQUMsR0FBRyx3QkFBd0IsbUJBQW1CLENBQUMsRUFBRTtVQUNwRyx1QkFBdUIsbUJBQW1CLEdBQUcsR0FBRyx3QkFBd0IsbUJBQW1CLENBQUM7U0FDN0Y7UUFDRCxJQUFJLEdBQUcsd0JBQXdCLElBQUksT0FBTyxHQUFHLHdCQUF3QiwrQkFBK0IsS0FBSyxTQUFTLEVBQUU7VUFDbEgsdUJBQXVCLCtCQUErQixHQUFHLEdBQUcsd0JBQXdCLCtCQUErQixDQUFDO1NBQ3JIO1FBQ0Qsb0JBQW9CLDRCQUE0QixRQUFRLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLG9CQUFvQix5QkFBeUIsR0FBRyxvQkFBb0IsR0FBRyxrQkFBa0IsQ0FBQztRQUNuTCxvQkFBb0IsaUJBQWlCLEtBQUssdUJBQXVCLEdBQUcsYUFBYTtVQUMvRSxPQUFPLENBQUMsQ0FBQztTQUNWLEdBQUcsaUJBQWlCLENBQUM7UUFDdEIsSUFBSSxrQkFBa0IsRUFBRTtVQUN0QixrQkFBa0IsS0FBSyxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxtQkFBbUIsRUFBRTtVQUN2QixhQUFhLElBQUksQ0FBQztTQUNuQjtRQUNELElBQUksWUFBWSxFQUFFO1VBQ2hCLGVBQWUsUUFBUSxDQUFDLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1VBQ3RELGVBQWUsRUFBRSxDQUFDO1VBQ2xCLElBQUksWUFBWSxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQzlCLFFBQVEsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDL0IsUUFBUSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztXQUM5QjtVQUNELElBQUksWUFBWSxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQzdCLFFBQVEsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDOUIsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM1QixRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1dBQzdCO1VBQ0QsSUFBSSxZQUFZLFdBQVcsS0FBSyxJQUFJLEVBQUU7WUFDcEMsUUFBUSxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNuQyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLFFBQVEsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7V0FDN0I7VUFDRCxJQUFJLFlBQVksT0FBTyxLQUFLLElBQUksRUFBRTtZQUNoQyxRQUFRLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ2pDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDL0IsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztXQUM3QjtTQUNGO1FBQ0QsSUFBSSxHQUFHLFNBQVMsRUFBRTtVQUNoQixJQUFJLFlBQVksS0FBSyxvQkFBb0IsRUFBRTtZQUN6QyxlQUFlLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztXQUNwQztVQUNELFFBQVEsQ0FBQyxZQUFZLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQztTQUN0QztRQUNELElBQUksR0FBRyxTQUFTLEVBQUU7VUFDaEIsSUFBSSxZQUFZLEtBQUssb0JBQW9CLEVBQUU7WUFDekMsZUFBZSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7V0FDcEM7VUFDRCxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUM7U0FDdEM7UUFDRCxJQUFJLEdBQUcsa0JBQWtCLEVBQUU7VUFDekIsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztTQUN0RDtRQUNELElBQUksR0FBRyxnQkFBZ0IsRUFBRTtVQUN2QixJQUFJLGVBQWUsS0FBSyx1QkFBdUIsRUFBRTtZQUMvQyxrQkFBa0IsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1dBQzFDO1VBQ0QsUUFBUSxDQUFDLGVBQWUsRUFBRSxHQUFHLGdCQUFnQixDQUFDLENBQUM7U0FDaEQ7UUFDRCxJQUFJLFlBQVksRUFBRTtVQUNoQixZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQzlCO1FBQ0QsSUFBSSxjQUFjLEVBQUU7VUFDbEIsUUFBUSxDQUFDLFlBQVksRUFBRTtZQUNyQixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07V0FDUCxDQUFDLENBQUM7U0FDSjtRQUNELElBQUksWUFBWSxNQUFNLEVBQUU7VUFDdEIsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7VUFDbEMsT0FBTyxXQUFXLE1BQU0sQ0FBQztTQUMxQjtRQUNELElBQUksTUFBTSxFQUFFO1VBQ1YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2I7UUFDRCxTQUFTLEdBQUcsQ0FBQztPQUNkLENBQUM7TUFDRixJQUFJLGlDQUFpQyxRQUFRLENBQUMsRUFBRSxFQUFFO1FBQ2hELElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixPQUFPO09BQ1IsQ0FBQyxDQUFDO01BQ0gsSUFBSSwwQkFBMEIsUUFBUSxDQUFDLEVBQUUsRUFBRTtRQUN6QyxlQUFlO1FBQ2YsTUFBTTtRQUNOLE9BQU87UUFDUCxnQkFBZ0I7T0FDakIsQ0FBQyxDQUFDO01BQ0gsSUFBSSwrQkFBK0IsUUFBUSxDQUFDLEVBQUUsRUFBRTtRQUM5QyxPQUFPO1FBQ1AsT0FBTztRQUNQLE1BQU07UUFDTixHQUFHO1FBQ0gsUUFBUTtPQUNULENBQUMsQ0FBQztNQUNILElBQUksZUFBZSxRQUFRLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQ3ZDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7TUFDbkMsUUFBUSxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQztNQUN0QyxJQUFJLGtCQUFrQixRQUFRLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQzdDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztNQUM1QyxJQUFJLHVCQUF1Qix1Q0FBdUM7UUFDaEUsSUFBSSxTQUFTLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxRQUFRLEVBQUU7VUFDOUIsU0FBUztZQUNQLGNBQWMsY0FBYztZQUM1QixTQUFTLFVBQVU7V0FDcEIsQ0FBQztTQUNIO1FBQ0QsSUFBSSxVQUFVLGlCQUFpQixDQUFDLE9BQU8sUUFBUSxDQUFDLENBQUM7UUFDakQsSUFBSSxnQkFBZ0IsaUJBQWlCLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQztRQUN0RCxJQUFJLE9BQU8sYUFBYSxLQUFLLGFBQWEsRUFBRTtVQUMxQyxJQUFJLE1BQU0sYUFBYSxLQUFLLGNBQWMsRUFBRTtZQUMxQyxPQUFPLE9BQU8sS0FBSyxLQUFLLENBQUM7V0FDMUI7VUFDRCxJQUFJLE1BQU0sYUFBYSxLQUFLLGdCQUFnQixFQUFFO1lBQzVDLE9BQU8sT0FBTyxLQUFLLEtBQUssS0FBSyxhQUFhLEtBQUssZ0JBQWdCLElBQUksOEJBQThCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztXQUNuSDtVQUNELE9BQU8sT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsSUFBSSxPQUFPLGFBQWEsS0FBSyxnQkFBZ0IsRUFBRTtVQUM3QyxJQUFJLE1BQU0sYUFBYSxLQUFLLGNBQWMsRUFBRTtZQUMxQyxPQUFPLE9BQU8sS0FBSyxNQUFNLENBQUM7V0FDM0I7VUFDRCxJQUFJLE1BQU0sYUFBYSxLQUFLLGFBQWEsRUFBRTtZQUN6QyxPQUFPLE9BQU8sS0FBSyxNQUFNLElBQUksdUJBQXVCLENBQUMsYUFBYSxDQUFDLENBQUM7V0FDckU7VUFDRCxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUMxQztRQUNELElBQUksT0FBTyxhQUFhLEtBQUssY0FBYyxFQUFFO1VBQzNDLElBQUksTUFBTSxhQUFhLEtBQUssYUFBYSxJQUFJLENBQUMsdUJBQXVCLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDcEYsT0FBTyxLQUFLLENBQUM7V0FDZDtVQUNELElBQUksTUFBTSxhQUFhLEtBQUssZ0JBQWdCLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUM5RixPQUFPLEtBQUssQ0FBQztXQUNkO1VBQ0QsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ3ZHO1FBQ0QsT0FBTyxLQUFLLENBQUM7T0FDZCxDQUFDO01BQ0YsSUFBSSxlQUFlLDRCQUE0QjtRQUM3QyxTQUFTLENBQUMsU0FBUyxRQUFRLEVBQUUsRUFBRSxTQUFTLElBQUksRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSTtVQUNGLElBQUksV0FBVyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkMsQ0FBQyxVQUFVO1VBQ1YsSUFBSTtZQUNGLElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQztXQUM1QixDQUFDLFVBQVU7WUFDVixJQUFJLE9BQU8sRUFBRSxDQUFDO1dBQ2Y7U0FDRjtPQUNGLENBQUM7TUFDRixJQUFJLG1CQUFtQixzQ0FBc0M7UUFDM0QsSUFBSTtVQUNGLFNBQVMsQ0FBQyxTQUFTLFFBQVEsRUFBRTtZQUMzQixXQUFXLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDO1lBQ3RDLE1BQU0sSUFBSTtXQUNYLENBQUMsQ0FBQztTQUNKLENBQUMsVUFBVTtVQUNWLFNBQVMsQ0FBQyxTQUFTLFFBQVEsRUFBRTtZQUMzQixXQUFXLElBQUk7WUFDZixNQUFNLElBQUk7V0FDWCxDQUFDLENBQUM7U0FDSjtRQUNELElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ3hDLElBQUksVUFBVSxJQUFJLG1CQUFtQixFQUFFO1lBQ3JDLElBQUk7Y0FDRixZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDcEIsQ0FBQyxVQUFVO2FBQ1g7V0FDRixNQUFNO1lBQ0wsSUFBSTtjQUNGLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQzthQUM3QixDQUFDLFVBQVU7YUFDWDtXQUNGO1NBQ0Y7T0FDRixDQUFDO01BQ0YsSUFBSSxnQkFBZ0IsOEJBQThCO1FBQ2hELElBQUksR0FBRyxDQUFDO1FBQ1IsSUFBSSxpQkFBaUIsQ0FBQztRQUN0QixJQUFJLFVBQVUsRUFBRTtVQUNkLFFBQVEsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1NBQ3JDLE1BQU07VUFDTCxJQUFJLFVBQVUsV0FBVyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztVQUNoRCxvQkFBb0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksaUJBQWlCLEtBQUssdUJBQXVCLEVBQUU7VUFDakQsUUFBUSxnRUFBZ0UsR0FBRyxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7U0FDckc7UUFDRCxJQUFJLGVBQWUsa0JBQWtCLEdBQUcsa0JBQWtCLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDckYsSUFBSSxTQUFTLEtBQUssY0FBYyxFQUFFO1VBQ2hDLElBQUk7WUFDRixNQUFNLElBQUksU0FBUyxFQUFFLGdCQUFnQixDQUFDLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1dBQ3hFLENBQUMsVUFBVTtXQUNYO1NBQ0Y7UUFDRCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsRUFBRTtVQUNoQyxNQUFNLGNBQWMsZUFBZSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7VUFDakUsSUFBSTtZQUNGLEdBQUcsZ0JBQWdCLFVBQVUsR0FBRyxjQUFjLEdBQUcsRUFBRSxHQUFHLFlBQVksQ0FBQztXQUNwRSxDQUFDLFVBQVU7V0FDWDtTQUNGO1FBQ0QsSUFBSSxPQUFPLEdBQUcsS0FBSyxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7UUFDM0MsSUFBSSxLQUFLLElBQUksaUJBQWlCLEVBQUU7VUFDOUIsSUFBSSxhQUFhLENBQUMsUUFBUSxlQUFlLENBQUMsaUJBQWlCLENBQUMsRUFBRSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztTQUMzRjtRQUNELElBQUksU0FBUyxLQUFLLGNBQWMsRUFBRTtVQUNoQyxPQUFPLG9CQUFvQixLQUFLLENBQUMsR0FBRyxFQUFFLGNBQWMsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUU7UUFDRCxPQUFPLGNBQWMsR0FBRyxHQUFHLGdCQUFnQixHQUFHLElBQUksQ0FBQztPQUNwRCxDQUFDO01BQ0YsSUFBSSxrQkFBa0IsK0JBQStCO1FBQ25ELE9BQU8sa0JBQWtCLEtBQUssQ0FBQyxJQUFJLGNBQWMsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsYUFBYSxHQUFHLFVBQVUsYUFBYSxHQUFHLFVBQVUsVUFBVSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztPQUN6SixDQUFDO01BQ0YsSUFBSSxlQUFlLDJCQUEyQjtRQUM1QyxPQUFPLEdBQUcsWUFBWSxlQUFlLEtBQUssT0FBTyxHQUFHLFNBQVMsS0FBSyxRQUFRLElBQUksT0FBTyxHQUFHLFlBQVksS0FBSyxRQUFRLElBQUksT0FBTyxHQUFHLFlBQVksS0FBSyxVQUFVLElBQUksRUFBRSxHQUFHLFdBQVcsWUFBWSxZQUFZLENBQUMsSUFBSSxPQUFPLEdBQUcsZ0JBQWdCLEtBQUssVUFBVSxJQUFJLE9BQU8sR0FBRyxhQUFhLEtBQUssVUFBVSxJQUFJLE9BQU8sR0FBRyxhQUFhLEtBQUssUUFBUSxJQUFJLE9BQU8sR0FBRyxhQUFhLEtBQUssVUFBVSxDQUFDLENBQUM7T0FDblgsQ0FBQztNQUNGLElBQUksVUFBVSx5QkFBeUI7UUFDckMsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxHQUFHLE1BQU0sWUFBWSxJQUFJLEdBQUcsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxRQUFRLElBQUksT0FBTyxNQUFNLFNBQVMsS0FBSyxRQUFRLElBQUksT0FBTyxNQUFNLFNBQVMsS0FBSyxRQUFRLENBQUM7T0FDbkwsQ0FBQztNQUNGLElBQUksZUFBZSxxREFBcUQ7UUFDdEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRTtVQUN0QixPQUFPO1NBQ1I7UUFDRCxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLGdCQUFnQjtVQUM5QyxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNqRCxDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsSUFBSSxvQkFBb0Isd0NBQXdDO1FBQzlELElBQUksT0FBTyxDQUFDO1FBQ1osWUFBWSxDQUFDLHdCQUF3QixFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxRCxJQUFJLFlBQVksQ0FBQyxXQUFXLENBQUMsRUFBRTtVQUM3QixZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7VUFDMUIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELElBQUksVUFBVSxDQUFDLGlCQUFpQixFQUFFLFdBQVcsU0FBUyxDQUFDLEVBQUU7VUFDdkQsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1VBQzFCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLFVBQVUsaUJBQWlCLENBQUMsV0FBVyxTQUFTLENBQUMsQ0FBQztRQUN0RCxZQUFZLENBQUMscUJBQXFCLEVBQUUsV0FBVyxFQUFFO1VBQy9DLFNBQVMsT0FBTztVQUNoQixhQUFhLFlBQVk7U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxXQUFXLGNBQWMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsUUFBUSxrQkFBa0IsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxXQUFXLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsV0FBVyxZQUFZLENBQUMsRUFBRTtVQUNsUSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7VUFDMUIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELElBQUksT0FBTyxLQUFLLFFBQVEsSUFBSSxVQUFVLENBQUMsWUFBWSxFQUFFLFdBQVcsVUFBVSxDQUFDLEVBQUU7VUFDM0UsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1VBQzFCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRTtVQUNsRCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzdELElBQUksdUJBQXVCLGFBQWEsWUFBWSxNQUFNLElBQUksVUFBVSxDQUFDLHVCQUF1QixhQUFhLEVBQUUsT0FBTyxDQUFDO2NBQ3JILE9BQU8sS0FBSyxDQUFDO1lBQ2YsSUFBSSx1QkFBdUIsYUFBYSxZQUFZLFFBQVEsSUFBSSx1QkFBdUIsYUFBYSxDQUFDLE9BQU8sQ0FBQztjQUMzRyxPQUFPLEtBQUssQ0FBQztXQUNoQjtVQUNELElBQUksWUFBWSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzdDLElBQUksYUFBYSxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksV0FBVyxXQUFXLENBQUM7WUFDdEUsSUFBSSxhQUFhLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxXQUFXLFdBQVcsQ0FBQztZQUN0RSxJQUFJLFVBQVUsSUFBSSxVQUFVLEVBQUU7Y0FDNUIsSUFBSSxhQUFhLFVBQVUsT0FBTyxDQUFDO2NBQ25DLEtBQUssSUFBSSxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtnQkFDeEMsVUFBVSxhQUFhLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztlQUN0RjthQUNGO1dBQ0Y7VUFDRCxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7VUFDMUIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELElBQUksV0FBVyxZQUFZLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxFQUFFO1VBQ3hFLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztVQUMxQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsSUFBSSxDQUFDLE9BQU8sS0FBSyxVQUFVLElBQUksT0FBTyxLQUFLLFNBQVMsS0FBSyxVQUFVLENBQUMsc0JBQXNCLEVBQUUsV0FBVyxVQUFVLENBQUMsRUFBRTtVQUNsSCxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7VUFDMUIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELElBQUksa0JBQWtCLElBQUksV0FBVyxTQUFTLEtBQUssQ0FBQyxFQUFFO1VBQ3BELFVBQVUsV0FBVyxZQUFZLENBQUM7VUFDbEMsVUFBVSxhQUFhLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxHQUFHLENBQUMsQ0FBQztVQUN2RCxVQUFVLGFBQWEsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1VBQ2xELElBQUksV0FBVyxZQUFZLEtBQUssT0FBTyxFQUFFO1lBQ3ZDLFNBQVMsQ0FBQyxTQUFTLFFBQVEsRUFBRSxFQUFFLFNBQVMsV0FBVyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkUsV0FBVyxZQUFZLEdBQUcsT0FBTyxDQUFDO1dBQ25DO1NBQ0Y7UUFDRCxZQUFZLENBQUMsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pELE9BQU8sS0FBSyxDQUFDO09BQ2QsQ0FBQztNQUNGLElBQUksb0JBQW9CLGlEQUFpRDtRQUN2RSxJQUFJLFlBQVksS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxNQUFNLENBQUMsS0FBSyxLQUFLLElBQUksUUFBUSxJQUFJLEtBQUssSUFBSSxXQUFXLENBQUMsRUFBRTtVQUN6RyxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFBSSxlQUFlLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO2FBQzNFLElBQUksZUFBZSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzthQUN4RCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRTtVQUNyRCxJQUFJLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxLQUFLLHVCQUF1QixhQUFhLFlBQVksTUFBTSxJQUFJLFVBQVUsQ0FBQyx1QkFBdUIsYUFBYSxFQUFFLEtBQUssQ0FBQyxJQUFJLHVCQUF1QixhQUFhLFlBQVksUUFBUSxJQUFJLHVCQUF1QixhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyx1QkFBdUIsbUJBQW1CLFlBQVksTUFBTSxJQUFJLFVBQVUsQ0FBQyx1QkFBdUIsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLElBQUksdUJBQXVCLG1CQUFtQixZQUFZLFFBQVEsSUFBSSx1QkFBdUIsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLHVCQUF1QiwrQkFBK0IsS0FBSyx1QkFBdUIsYUFBYSxZQUFZLE1BQU0sSUFBSSxVQUFVLENBQUMsdUJBQXVCLGFBQWEsRUFBRSxLQUFLLENBQUMsSUFBSSx1QkFBdUIsYUFBYSxZQUFZLFFBQVEsSUFBSSx1QkFBdUIsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztlQUM1eUI7WUFDSCxPQUFPLEtBQUssQ0FBQztXQUNkO1NBQ0YsTUFBTSxJQUFJLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFDbkMsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0UsSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksTUFBTSxLQUFLLFlBQVksSUFBSSxNQUFNLEtBQUssTUFBTSxLQUFLLEtBQUssS0FBSyxRQUFRLElBQUksYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDN0osSUFBSSx1QkFBdUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxhQUFhLENBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM5RyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDWjtVQUNILE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLElBQUksQ0FBQztPQUNiLENBQUM7TUFDRixJQUFJLDBCQUEwQiwwQ0FBMEM7UUFDdEUsT0FBTyxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDakMsQ0FBQztNQUNGLElBQUksc0JBQXNCLDBDQUEwQztRQUNsRSxJQUFJLElBQUksQ0FBQztRQUNULElBQUksS0FBSyxDQUFDO1FBQ1YsSUFBSSxNQUFNLENBQUM7UUFDWCxJQUFJLENBQUMsQ0FBQztRQUNOLFlBQVksQ0FBQywwQkFBMEIsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUQsSUFBSSxhQUFhLFdBQVcsV0FBVyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLEVBQUU7VUFDZixPQUFPO1NBQ1I7UUFDRCxJQUFJLFlBQVk7VUFDZCxVQUFVLEVBQUU7VUFDWixXQUFXLEVBQUU7VUFDYixVQUFVLElBQUk7VUFDZCxtQkFBbUIsWUFBWTtTQUNoQyxDQUFDO1FBQ0YsSUFBSSxVQUFVLE9BQU8sQ0FBQztRQUN0QixPQUFPLENBQUMsRUFBRSxFQUFFO1VBQ1YsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDckIsSUFBSSxRQUFRLElBQUksRUFBRSxPQUFPLEtBQUssS0FBSyxFQUFFLGVBQWUsS0FBSyxhQUFhLENBQUM7VUFDdkUsUUFBUSxJQUFJLEtBQUssT0FBTyxHQUFHLElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDO1VBQy9ELFNBQVMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDakMsSUFBSSxZQUFZLEtBQUssQ0FBQztVQUN0QixTQUFTLFNBQVMsR0FBRyxNQUFNLENBQUM7VUFDNUIsU0FBUyxVQUFVLEdBQUcsS0FBSyxDQUFDO1VBQzVCLFNBQVMsU0FBUyxHQUFHLElBQUksQ0FBQztVQUMxQixTQUFTLGNBQWMsR0FBRyxTQUFTLENBQUM7VUFDcEMsWUFBWSxDQUFDLHVCQUF1QixFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztVQUM5RCxRQUFRLFNBQVMsVUFBVSxDQUFDO1VBQzVCLElBQUksU0FBUyxjQUFjLEVBQUU7WUFDM0IsU0FBUztXQUNWO1VBQ0QsSUFBSSxDQUFDLFNBQVMsU0FBUyxFQUFFO1lBQ3ZCLGdCQUFnQixDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNwQyxTQUFTO1dBQ1Y7VUFDRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDN0IsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3BDLFNBQVM7V0FDVjtVQUNELElBQUksa0JBQWtCLEVBQUU7WUFDdEIsUUFBUSxhQUFhLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNuRCxRQUFRLGFBQWEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1dBQy9DO1VBQ0QsSUFBSSxRQUFRLGlCQUFpQixDQUFDLFdBQVcsU0FBUyxDQUFDLENBQUM7VUFDcEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDNUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3BDLFNBQVM7V0FDVjtVQUNELElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUN2QixJQUFJO2NBQ0YsSUFBSSxZQUFZLEVBQUU7Z0JBQ2hCLFdBQVcsZUFBZSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7ZUFDdkQsTUFBTTtnQkFDTCxXQUFXLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7ZUFDdkM7YUFDRixDQUFDLFVBQVU7Y0FDVixnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7YUFDckM7V0FDRjtTQUNGO1FBQ0QsWUFBWSxDQUFDLHlCQUF5QixFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUM1RCxDQUFDO01BQ0YsSUFBSSxxQkFBcUIsc0NBQXNDO1FBQzdELElBQUksVUFBVSxDQUFDO1FBQ2YsSUFBSSxpQkFBaUIsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLFlBQVksQ0FBQyx5QkFBeUIsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEQsT0FBTyxhQUFhLGNBQWMsU0FBUyxFQUFFLEVBQUU7VUFDN0MsWUFBWSxDQUFDLHdCQUF3QixFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztVQUN6RCxJQUFJLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ2pDLFNBQVM7V0FDVjtVQUNELElBQUksVUFBVSxRQUFRLFlBQVksZ0JBQWdCLEVBQUU7WUFDbEQsa0JBQWtCLENBQUMsVUFBVSxRQUFRLENBQUMsQ0FBQztXQUN4QztVQUNELG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ2pDO1FBQ0QsWUFBWSxDQUFDLHdCQUF3QixFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUN4RCxDQUFDO01BQ0YsU0FBUyxTQUFTLEdBQUcsc0JBQXNCO1FBQ3pDLElBQUksSUFBSSxDQUFDO1FBQ1QsSUFBSSxZQUFZLENBQUM7UUFDakIsSUFBSSxXQUFXLENBQUM7UUFDaEIsSUFBSSxPQUFPLENBQUM7UUFDWixJQUFJLFVBQVUsQ0FBQztRQUNmLGlCQUFpQixDQUFDLEtBQUssQ0FBQztRQUN4QixJQUFJLGNBQWMsRUFBRTtVQUNsQixRQUFRLE9BQU8sQ0FBQztTQUNqQjtRQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1VBQ2hELElBQUksT0FBTyxLQUFLLFNBQVMsS0FBSyxVQUFVLEVBQUU7WUFDeEMsTUFBTSxlQUFlLENBQUMsNEJBQTRCLENBQUMsQ0FBQztXQUNyRCxNQUFNO1lBQ0wsUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO2NBQzdCLE1BQU0sZUFBZSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7YUFDMUQ7V0FDRjtTQUNGO1FBQ0QsSUFBSSxDQUFDLFNBQVMsWUFBWSxFQUFFO1VBQzFCLElBQUksT0FBTyxDQUFDLE1BQU0sYUFBYSxDQUFDLEtBQUssUUFBUSxJQUFJLE9BQU8sTUFBTSxhQUFhLEtBQUssVUFBVSxFQUFFO1lBQzFGLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO2NBQzdCLE9BQU8sTUFBTSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDbkM7WUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtjQUNsQixPQUFPLE1BQU0sYUFBYSxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUM7YUFDN0M7V0FDRjtVQUNELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLENBQUMsVUFBVSxFQUFFO1VBQ2YsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ25CO1FBQ0QsU0FBUyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1VBQzdCLFdBQVcsS0FBSyxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxRQUFRLEVBQUU7VUFDWixJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ2xCLElBQUksVUFBVSxpQkFBaUIsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2NBQ2xELE1BQU0sZUFBZSxDQUFDLHlEQUF5RCxDQUFDLENBQUM7YUFDbEY7V0FDRjtTQUNGLE1BQU0sSUFBSSxLQUFLLFlBQVksSUFBSSxFQUFFO1VBQ2hDLE9BQU8sYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1VBQ2hDLGVBQWUsSUFBSSxjQUFjLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7VUFDMUQsSUFBSSxZQUFZLFNBQVMsS0FBSyxDQUFDLElBQUksWUFBWSxTQUFTLEtBQUssTUFBTSxFQUFFO1lBQ25FLE9BQU8sWUFBWSxDQUFDO1dBQ3JCLE1BQU0sSUFBSSxZQUFZLFNBQVMsS0FBSyxNQUFNLEVBQUU7WUFDM0MsT0FBTyxZQUFZLENBQUM7V0FDckIsTUFBTTtZQUNMLElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1dBQ2hDO1NBQ0YsTUFBTTtVQUNMLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLGNBQWMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUN0RixPQUFPLGtCQUFrQixJQUFJLG1CQUFtQixHQUFHLGtCQUFrQixXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1dBQ2pHO1VBQ0QsT0FBTyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7VUFDNUIsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE9BQU8sVUFBVSxHQUFHLElBQUksR0FBRyxtQkFBbUIsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDO1dBQ2pFO1NBQ0Y7UUFDRCxJQUFJLElBQUksSUFBSSxVQUFVLEVBQUU7VUFDdEIsWUFBWSxDQUFDLElBQUksV0FBVyxDQUFDLENBQUM7U0FDL0I7UUFDRCxJQUFJLGVBQWUsZUFBZSxDQUFDLFFBQVEsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDNUQsT0FBTyxjQUFjLFlBQVksU0FBUyxFQUFFLEVBQUU7VUFDNUMsSUFBSSxXQUFXLFNBQVMsS0FBSyxDQUFDLElBQUksV0FBVyxLQUFLLE9BQU8sRUFBRTtZQUN6RCxTQUFTO1dBQ1Y7VUFDRCxJQUFJLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ2xDLFNBQVM7V0FDVjtVQUNELElBQUksV0FBVyxRQUFRLFlBQVksZ0JBQWdCLEVBQUU7WUFDbkQsa0JBQWtCLENBQUMsV0FBVyxRQUFRLENBQUMsQ0FBQztXQUN6QztVQUNELG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1VBQ2pDLFVBQVUsV0FBVyxDQUFDO1NBQ3ZCO1FBQ0QsVUFBVSxJQUFJLENBQUM7UUFDZixJQUFJLFFBQVEsRUFBRTtVQUNaLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLFVBQVUsRUFBRTtVQUNkLElBQUksbUJBQW1CLEVBQUU7WUFDdkIsYUFBYSxzQkFBc0IsS0FBSyxDQUFDLElBQUksY0FBYyxDQUFDLENBQUM7WUFDN0QsT0FBTyxJQUFJLFdBQVcsRUFBRTtjQUN0QixVQUFVLFlBQVksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDO2FBQ3pDO1dBQ0YsTUFBTTtZQUNMLGFBQWEsSUFBSSxDQUFDO1dBQ25CO1VBQ0QsSUFBSSxZQUFZLFdBQVcsRUFBRTtZQUMzQixhQUFhLFVBQVUsS0FBSyxDQUFDLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztXQUNsRTtVQUNELE9BQU8sVUFBVSxDQUFDO1NBQ25CO1FBQ0QsSUFBSSxpQkFBaUIsY0FBYyxHQUFHLElBQUksVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDO1FBQ3RFLElBQUksY0FBYyxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLGNBQWMsSUFBSSxJQUFJLGNBQWMsUUFBUSxJQUFJLElBQUksY0FBYyxRQUFRLEtBQUssSUFBSSxVQUFVLENBQUMsWUFBWSxFQUFFLElBQUksY0FBYyxRQUFRLEtBQUssQ0FBQyxFQUFFO1VBQ2xNLGlCQUFpQixZQUFZLEdBQUcsSUFBSSxjQUFjLFFBQVEsS0FBSyxHQUFHLEtBQUssR0FBRyxjQUFjLENBQUM7U0FDMUY7UUFDRCxJQUFJLGtCQUFrQixFQUFFO1VBQ3RCLGlCQUFpQixhQUFhLENBQUMsY0FBYyxFQUFFLGVBQWUsRUFBRSxHQUFHLENBQUMsQ0FBQztVQUNyRSxpQkFBaUIsYUFBYSxDQUFDLGNBQWMsRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDakU7UUFDRCxPQUFPLGtCQUFrQixJQUFJLG1CQUFtQixHQUFHLGtCQUFrQixXQUFXLENBQUMsY0FBYyxDQUFDLEdBQUcsY0FBYyxDQUFDO09BQ25ILENBQUM7TUFDRixTQUFTLFVBQVUsR0FBRyxlQUFlO1FBQ25DLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQixhQUFhLElBQUksQ0FBQztPQUNuQixDQUFDO01BQ0YsU0FBUyxZQUFZLEdBQUcsWUFBWTtRQUNsQyxTQUFTLElBQUksQ0FBQztRQUNkLGFBQWEsS0FBSyxDQUFDO09BQ3BCLENBQUM7TUFDRixTQUFTLGlCQUFpQixHQUFHLDRCQUE0QjtRQUN2RCxJQUFJLENBQUMsTUFBTSxFQUFFO1VBQ1gsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxRQUFRLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLElBQUksU0FBUyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxPQUFPLGlCQUFpQixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDaEQsQ0FBQztNQUNGLFNBQVMsUUFBUSxHQUFHLG9DQUFvQztRQUN0RCxJQUFJLE9BQU8sWUFBWSxLQUFLLFVBQVUsRUFBRTtVQUN0QyxPQUFPO1NBQ1I7UUFDRCxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1QyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO09BQzVDLENBQUM7TUFDRixTQUFTLFdBQVcsR0FBRyxzQkFBc0I7UUFDM0MsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUU7VUFDckIsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDcEM7T0FDRixDQUFDO01BQ0YsU0FBUyxZQUFZLEdBQUcsc0JBQXNCO1FBQzVDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1VBQ3JCLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDeEI7T0FDRixDQUFDO01BQ0YsU0FBUyxlQUFlLEdBQUcsWUFBWTtRQUNyQyxRQUFRLEVBQUUsQ0FBQztPQUNaLENBQUM7TUFDRixPQUFPLFNBQVMsQ0FBQztLQUNsQjtJQUNELElBQUksU0FBUyxlQUFlLEVBQUUsQ0FBQzs7SUFFL0IsTUFBTSxTQUFTLEtBQUssS0FBSyxFQUFFLE9BQU8sS0FBSyxLQUFLLENBQUM7SUFDN0MsTUFBTSxhQUFhO01BQ2pCLFFBQVE7TUFDUixVQUFVO01BQ1YsV0FBVztNQUNYLFVBQVU7TUFDVixNQUFNO01BQ04sVUFBVTtNQUNWLE1BQU07TUFDTixNQUFNO01BQ04sVUFBVTtNQUNWLE1BQU07TUFDTixXQUFXO01BQ1gsTUFBTTtNQUNOLE9BQU87TUFDUCxRQUFRO0tBQ1QsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCO01BQ3BCLEtBQUssRUFBRTtNQUNQLE1BQU0sRUFBRTtNQUNSLE9BQU8sR0FBRztNQUNWLFFBQVEsRUFBRTtLQUNYLENBQUM7SUFDRixNQUFNLHlCQUF5QjtNQUM3QixLQUFLO01BQ0wsT0FBTztLQUNSLENBQUM7SUFDRixNQUFNLG1CQUFtQiwrQkFBK0I7TUFDdEQsSUFBSSxhQUFhLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtRQUNuQyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7T0FDMUIsTUFBTTtRQUNMLE9BQU8sYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLHNCQUFzQixFQUFFLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztPQUNyRjtLQUNGLENBQUM7SUFDRixNQUFNLFlBQVksY0FBYztNQUM5QixJQUFJO1FBQ0YsT0FBTyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztPQUN2QyxDQUFDLFdBQVc7UUFDWCxPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztPQUM3QjtLQUNGLENBQUM7SUFDRixNQUFNLGVBQWUsNEJBQTRCO01BQy9DLE1BQU0sYUFBYSxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDckQsSUFBSSxRQUFRLGtCQUFrQixFQUFFO1FBQzlCLE9BQU8sS0FBSyxDQUFDO09BQ2QsTUFBTSxJQUFJLDJCQUEyQixLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDdkQsT0FBTyxJQUFJLENBQUM7T0FDYixNQUFNLElBQUksUUFBUSxxQkFBcUIsRUFBRTtRQUN4QyxPQUFPLEtBQUssQ0FBQztPQUNkLE1BQU0sSUFBSSxnQkFBZ0IsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQzVDLE9BQU8sZ0JBQWdCLENBQUMsUUFBUSxvQkFBb0IsRUFBRSxPQUFPLENBQUMsSUFBSSx3QkFBd0IsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO09BQzdHLE1BQU07UUFDTCxPQUFPLFNBQVMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO09BQ25DO0tBQ0YsQ0FBQztJQUNGLFVBQVU7TUFDUixtQkFBbUIsTUFBTTtRQUN2QixJQUFJLElBQUksQ0FBQztRQUNULE1BQU0sZ0JBQWdCLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekQsTUFBTSxVQUFVLGNBQWMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksT0FBTyxFQUFFO1VBQ1gsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbkI7UUFDRCxPQUFPO1VBQ0wsSUFBSTtVQUNKLE1BQU0sYUFBYSxDQUFDLENBQUMsQ0FBQztTQUN2QixDQUFDO09BQ0g7TUFDRCxnQkFBZ0IsZUFBZSxVQUFVLEVBQUUsRUFBRTtRQUMzQyxJQUFJLE9BQU8sa0JBQWtCLEVBQUU7VUFDN0IsT0FBTyxJQUFJLENBQUM7U0FDYixNQUFNO1VBQ0wsTUFBTSxhQUFhLFFBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsRUFBRSxDQUFDLENBQUM7VUFDM0UsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3BEO09BQ0Y7TUFDRCx5QkFBeUIsTUFBTTtRQUM3QixJQUFJLEVBQUUsQ0FBQztRQUNQLElBQUksT0FBTyxDQUFDO1FBQ1osSUFBSSxHQUFHLFNBQVMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsS0FBSyxPQUFPLEVBQUU7VUFDbEUsVUFBVSxDQUFDLEtBQUssR0FBRyxLQUFLLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1NBQy9ELE1BQU07VUFDTCxVQUFVLEdBQUcsU0FBUyxHQUFHLElBQUksR0FBRyxHQUFHLEtBQUssR0FBRyxHQUFHLFNBQVMsQ0FBQztTQUN6RDtRQUNELElBQUksd0JBQXdCLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtVQUMxQyxVQUFVLE9BQU8sUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztVQUN2RSxJQUFJLENBQUMsU0FBUyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDNUIsV0FBVyxHQUFHLENBQUM7V0FDaEI7U0FDRjtRQUNELE9BQU8sT0FBTyxDQUFDO09BQ2hCO01BQ0QsV0FBVyxNQUFNLFdBQVcsRUFBRSxFQUFFO1FBQzlCLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNwQixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQixJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDekIsTUFBTSxVQUFVLFFBQVEsU0FBUyxDQUFDO1FBQ2xDLE1BQU0sT0FBTyxJQUFJLENBQUM7UUFDbEIsSUFBSSx3QkFBd0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1VBQzNELElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQztVQUNsQixPQUFPO1NBQ1I7UUFDRCxNQUFNLHFCQUFxQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkQsSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtVQUNqRCxNQUFNLENBQUMsT0FBTyxHQUFHLE9BQU8sU0FBUyxJQUFJLE1BQU0sR0FBRyxNQUFNLElBQUksYUFBYSxHQUFHLEdBQUcsQ0FBQztTQUM3RTtRQUNELElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1VBQy9CLE1BQU0sVUFBVSxPQUFPLEdBQUcsT0FBTyxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxTQUFTLEtBQUssQ0FBQyxVQUFVLENBQUM7VUFDbkYsSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLE9BQU8sU0FBUyxNQUFNLEVBQUUsRUFBRTtZQUMvRSxNQUFNLFlBQVksR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7V0FDbkQsTUFBTTtZQUNMLE1BQU0sUUFBUSxtQkFBbUIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLElBQUksS0FBSyxFQUFFO2NBQ1QsTUFBTSxDQUFDLE9BQU8sSUFBSSxPQUFPLFNBQVMsSUFBSSxNQUFNLElBQUksYUFBYSxHQUFHLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDOUc7V0FDRjtTQUNGO1FBQ0QsTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDckMsTUFBTSxXQUFXLHNOQUFzTixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbFAsSUFBSSxRQUFRLEVBQUU7VUFDWixNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVU7WUFDM0IsSUFBSSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QixJQUFJLElBQUksRUFBRTtjQUNSLE9BQU8sSUFBSSxRQUFRLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQzFDO1lBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztXQUNoQixDQUFDLENBQUM7U0FDSjtRQUNELElBQUksT0FBTyxFQUFFO1VBQ1gsSUFBSSxDQUFDLElBQUksU0FBUyxFQUFFO1lBQ2xCLElBQUksU0FBUyxHQUFHLE9BQU8sU0FBUyxDQUFDO1dBQ2xDO1VBQ0QsSUFBSSxDQUFDLElBQUksU0FBUyxFQUFFO1lBQ2xCLElBQUksU0FBUyxHQUFHLE9BQU8sU0FBUyxDQUFDO1dBQ2xDO1VBQ0QsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFVBQVUsRUFBRTtZQUMxQyxJQUFJLEtBQUssR0FBRyxPQUFPLEtBQUssQ0FBQztXQUMxQjtVQUNELElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxVQUFVLEVBQUU7WUFDMUMsSUFBSSxLQUFLLEdBQUcsT0FBTyxLQUFLLENBQUM7V0FDMUI7VUFDRCxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7U0FDbEI7UUFDRCxJQUFJLGtCQUFrQixFQUFFO1VBQ3RCLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztTQUNwQjtPQUNGO01BQ0QsT0FBTyxPQUFPO1FBQ1osTUFBTSxZQUFZLGtCQUFrQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsSUFBSSxTQUFTLEVBQUU7VUFDYixJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDekIsSUFBSSxVQUFVLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQzlCLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxQjtRQUNELElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLE9BQU8sRUFBRSxDQUFDO09BQ2Y7TUFDRCxVQUFVLE1BQU07UUFDZCxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7VUFDaEIsT0FBTyxHQUFHLENBQUM7U0FDWjtRQUNELE1BQU0sY0FBYyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDLENBQUM7UUFDckQsSUFBSSxXQUFXLEtBQUssS0FBSyxVQUFVLElBQUksSUFBSSxLQUFLLEtBQUssV0FBVyxLQUFLLElBQUksV0FBVyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssV0FBVyxLQUFLLElBQUksSUFBSSxTQUFTLEtBQUssV0FBVyxTQUFTLElBQUksV0FBVyxTQUFTLEtBQUssRUFBRSxFQUFFO1VBQ3BNLE9BQU8sV0FBVyxPQUFPLEVBQUUsQ0FBQztTQUM3QjtRQUNELE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxFQUFFLEtBQUssV0FBVyxPQUFPLEVBQUUsQ0FBQztRQUNwRCxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7VUFDdkYsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELElBQUksU0FBUyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssRUFBRSxXQUFXLEtBQUssQ0FBQyxDQUFDO1FBQ3pELElBQUksV0FBVyxNQUFNLEVBQUU7VUFDckIsVUFBVSxHQUFHLEdBQUcsV0FBVyxNQUFNLENBQUM7U0FDbkM7UUFDRCxJQUFJLFdBQVcsT0FBTyxFQUFFO1VBQ3RCLFVBQVUsR0FBRyxHQUFHLFdBQVcsT0FBTyxDQUFDO1NBQ3BDO1FBQ0QsT0FBTyxNQUFNLENBQUM7T0FDZjtNQUNELFVBQVUsY0FBYztRQUN0QixNQUFNLGNBQWMsSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sV0FBVyxPQUFPLENBQUMsTUFBTSxJQUFJLElBQUksYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7T0FDckU7TUFDRCxZQUFZLE1BQU07UUFDaEIsSUFBSSxJQUFJLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLFNBQVMsSUFBSSxHQUFHLFNBQVMsRUFBRTtVQUMxRCxJQUFJLElBQUksS0FBSyxJQUFJLEdBQUcsS0FBSyxFQUFFO1lBQ3pCLE9BQU8sSUFBSSxDQUFDO1dBQ2I7VUFDRCxNQUFNLGNBQWMsSUFBSSxTQUFTLEdBQUcsYUFBYSxDQUFDLElBQUksU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO1VBQ3hFLElBQUksV0FBVyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksV0FBVyxNQUFNLEdBQUcsS0FBSyxJQUFJLFdBQVcsQ0FBQyxFQUFFO1lBQzFFLE9BQU8sSUFBSSxDQUFDO1dBQ2I7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFDO09BQ2Q7TUFDRCxTQUFTLGFBQWE7UUFDcEIsSUFBSSxhQUFhLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLE1BQU0saUJBQWlCLElBQUksVUFBVSxDQUFDLENBQUMsRUFBRSxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0UsTUFBTSxRQUFRLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUksY0FBYyxPQUFPLElBQUksS0FBSyxPQUFPLEVBQUU7VUFDekMsS0FBSyxJQUFJLENBQUMsRUFBRSxJQUFJLGNBQWMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDakQsSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtjQUN2RCxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7Y0FDbkIsTUFBTTthQUNQO1dBQ0Y7U0FDRjtRQUNELElBQUksY0FBYyxPQUFPLEdBQUcsS0FBSyxPQUFPLEVBQUU7VUFDeEMsS0FBSyxJQUFJLENBQUMsRUFBRSxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsSUFBSSxDQUFDLElBQUksY0FBYyxPQUFPLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtjQUNoRSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7Y0FDbkIsTUFBTTthQUNQO1dBQ0Y7U0FDRjtRQUNELElBQUksVUFBVSxLQUFLLENBQUMsRUFBRTtVQUNwQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsS0FBSyxJQUFJLENBQUMsRUFBRSxJQUFJLGNBQWMsT0FBTyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1VBQ3BFLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxLQUFLLElBQUksVUFBVSxHQUFHLENBQUMsRUFBRSxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7VUFDckQsSUFBSSxDQUFDLEtBQUssVUFBVSxHQUFHLENBQUMsRUFBRTtZQUN4QixPQUFPLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDdkIsTUFBTTtZQUNMLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEdBQUcsQ0FBQztPQUNaO01BQ0QsU0FBUyxhQUFhO1FBQ3BCLElBQUksS0FBSyxDQUFDLENBQUM7UUFDWCxNQUFNLEtBQUssS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUN2QyxNQUFNLGlCQUFpQixJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxNQUFNLGlCQUFpQixJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxNQUFNLFlBQVksRUFBRSxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxjQUFjLEVBQUUsS0FBSztVQUMxQixJQUFJLENBQUMsRUFBRTtZQUNMLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ25CO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxZQUFZLEVBQUUsQ0FBQztRQUNyQixLQUFLLElBQUksSUFBSSxjQUFjLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtVQUNuRCxJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLENBQUMsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO1lBQy9ELFNBQVM7V0FDVjtVQUNELElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUM5QixFQUFFLEVBQUUsQ0FBQztZQUNMLFNBQVM7V0FDVjtVQUNELElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNWLEVBQUUsRUFBRSxDQUFDO1lBQ0wsU0FBUztXQUNWO1VBQ0QsU0FBUyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbkM7UUFDRCxNQUFNLElBQUksU0FBUyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLElBQUksT0FBTyxDQUFDO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ1YsVUFBVSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN4QyxNQUFNO1VBQ0wsVUFBVSxTQUFTLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDaEY7UUFDRCxJQUFJLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtVQUM5QixVQUFVLEdBQUcsR0FBRyxPQUFPLENBQUM7U0FDekI7UUFDRCxJQUFJLEVBQUUsSUFBSSxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxPQUFPLE9BQU8sR0FBRyxDQUFDLEVBQUU7VUFDekQsV0FBVyxFQUFFLENBQUM7U0FDZjtRQUNELE9BQU8sT0FBTyxDQUFDO09BQ2hCO01BQ0QsTUFBTSxDQUFDLGNBQWMsS0FBSyxFQUFFO1FBQzFCLElBQUksQ0FBQyxDQUFDO1FBQ04sSUFBSSxDQUFDLElBQUksT0FBTyxJQUFJLFdBQVcsRUFBRTtVQUMvQixJQUFJLEVBQUUsQ0FBQztVQUNQLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsSUFBSSxJQUFJLFNBQVMsRUFBRTtjQUNqQixLQUFLLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQzthQUM1QixNQUFNO2NBQ0wsS0FBSyxJQUFJLENBQUM7YUFDWDtZQUNELElBQUksSUFBSSxTQUFTLEVBQUU7Y0FDakIsS0FBSyxJQUFJLFNBQVMsR0FBRyxHQUFHLENBQUM7YUFDMUI7WUFDRCxJQUFJLElBQUksS0FBSyxFQUFFO2NBQ2IsS0FBSyxJQUFJLEtBQUssQ0FBQzthQUNoQjtZQUNELElBQUksSUFBSSxLQUFLLEVBQUU7Y0FDYixLQUFLLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQzthQUN0QjtXQUNGO1VBQ0QsSUFBSSxJQUFJLEtBQUssRUFBRTtZQUNiLEtBQUssSUFBSSxLQUFLLENBQUM7V0FDaEI7VUFDRCxJQUFJLElBQUksTUFBTSxFQUFFO1lBQ2QsS0FBSyxHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUM7V0FDdkI7VUFDRCxJQUFJLElBQUksT0FBTyxFQUFFO1lBQ2YsS0FBSyxHQUFHLEdBQUcsSUFBSSxPQUFPLENBQUM7V0FDeEI7VUFDRCxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7U0FDakI7UUFDRCxPQUFPLElBQUksT0FBTyxDQUFDO09BQ3BCO0tBQ0Y7O0lBRUQsTUFBTSxtQkFBbUIsS0FBSyxRQUFRLENBQUMsOERBQThELENBQUMsQ0FBQztJQUN2RyxNQUFNLHNCQUFzQixlQUFlLENBQUM7SUFDNUMsSUFBSSxNQUFNLENBQUMsQ0FBQztJQUNaLE1BQU0sY0FBYyxpQ0FBaUM7TUFDbkQsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7TUFDbkIsTUFBTSxXQUFXLFFBQVEsU0FBUyxDQUFDO01BQ25DLE1BQU0sa0JBQWtCLE1BQU0sbUJBQW1CLEVBQUUsQ0FBQztNQUNwRCxJQUFJLElBQUksU0FBUyxLQUFLLE9BQU8sSUFBSSxDQUFDLFFBQVEsMkJBQTJCLElBQUksUUFBUSxLQUFLLENBQUMsQ0FBQyxLQUFLLElBQUksVUFBVSxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO1FBQ2pKLElBQUksVUFBVSxHQUFHLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQztPQUN2QztNQUNELE1BQU0sWUFBWSxDQUFDLEtBQUssR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxRQUFRLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxTQUFTLFlBQVksRUFBRSxDQUFDO01BQzVJLElBQUksSUFBSSxTQUFTLEtBQUssT0FBTyxJQUFJLFNBQVMsS0FBSyxNQUFNLEVBQUU7UUFDckQsT0FBTztPQUNSO01BQ0QsTUFBTSxVQUFVLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzNDLE1BQU0sb0JBQW9CLEtBQUssQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztNQUM5RCxNQUFNLFFBQVEsS0FBSyxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO01BQy9DLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDekMsSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFO1VBQ25CLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNuQixNQUFNO1VBQ0wsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2pCO1FBQ0QsT0FBTztPQUNSO01BQ0QsTUFBTSxPQUFPLE1BQU0sZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQzlDLElBQUksUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ3JCLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRSxTQUFTLENBQUMsRUFBRTtVQUNyQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbkIsTUFBTTtVQUNMLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNqQjtRQUNELE9BQU87T0FDUixNQUFNO1FBQ0wsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUU7VUFDdEIsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ25DO09BQ0Y7TUFDRCxJQUFJLFFBQVEsSUFBSSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtRQUMxQyxNQUFNLENBQUMsQ0FBQyxLQUFLLElBQUksaUJBQWlCLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLFFBQVE7VUFDL0UsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLEtBQUssRUFBRSxJQUFJLE1BQU0sS0FBSyxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUM7U0FDcEYsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLENBQUMsS0FBSyxJQUFJLGtCQUFrQixNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxRQUFRO1VBQ2hGLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDOUIsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLEtBQUssRUFBRSxJQUFJLE1BQU0sS0FBSyxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUM7V0FDcEY7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLElBQUksbUJBQW1CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxRQUFRLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtVQUM3RixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7VUFDaEIsT0FBTztTQUNSO1FBQ0QsSUFBSSxJQUFJLGlCQUFpQixJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtVQUM3QyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7VUFDaEIsT0FBTztTQUNSO1FBQ0QsSUFBSSxJQUFJLFdBQVcsSUFBSSxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUU7VUFDcEQsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQyxDQUFDO1NBQ2xDO09BQ0Y7S0FDRixDQUFDO0lBQ0YsTUFBTSxzQkFBc0Isb0RBQW9ELEVBQUUsUUFBUSxJQUFJLGdCQUFnQixJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLFNBQVMsSUFBSSxNQUFNLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDN1IsTUFBTSx1Q0FBdUMsbUJBQW1CLEdBQUcsYUFBYSxDQUFDLG1CQUFtQixDQUFDLEtBQUssUUFBUSxLQUFLLElBQUksSUFBSSxRQUFRLEtBQUssT0FBTyxJQUFJLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQztJQUM3SyxNQUFNLHFCQUFxQixzQkFBc0IsUUFBUSxJQUFJLE1BQU0sYUFBYSxFQUFFLENBQUM7SUFDbkYsTUFBTSxtQkFBbUIsMkJBQTJCO01BQ2xELE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQztNQUN6QixLQUFLLElBQUksSUFBSSxVQUFVLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMvQyxNQUFNLE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLE1BQU0sV0FBVyxJQUFJLEtBQUssQ0FBQztRQUMzQixNQUFNLFlBQVksSUFBSSxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxRQUFRLFlBQVksRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRTtVQUNsSixHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQy9CLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUU7VUFDL0MsR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3RDO09BQ0Y7S0FDRixDQUFDO0lBQ0YsTUFBTSxjQUFjLHNCQUFzQjtNQUN4QyxNQUFNLFdBQVcsTUFBTSxFQUFFLENBQUM7TUFDMUIsUUFBUSxRQUFRLENBQUMscUJBQXFCLEVBQUUsY0FBYztRQUNwRCxXQUFXLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7T0FDekMsQ0FBQyxDQUFDO01BQ0gsUUFBUSxRQUFRLENBQUMsdUJBQXVCLEVBQUUsY0FBYztRQUN0RCxNQUFNLFVBQVUsR0FBRyxRQUFRLFlBQVksRUFBRSxDQUFDO1FBQzFDLE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDO1FBQ2xDLEdBQUcsU0FBUyxHQUFHLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNuRixJQUFJLEdBQUcsU0FBUyxFQUFFO1VBQ2hCLEdBQUcsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO1VBQ3ZDLElBQUksa0JBQWtCLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ3hDLEdBQUcsVUFBVSxHQUFHLFFBQVEsQ0FBQztXQUMxQjtVQUNELElBQUksUUFBUSxvQkFBb0IsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLG9CQUFvQixDQUFDLEVBQUU7WUFDL0UsR0FBRyxjQUFjLEdBQUcsSUFBSSxDQUFDO1dBQzFCO1NBQ0YsTUFBTSxJQUFJLG9DQUFvQyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRTtVQUM5RCxHQUFHLGNBQWMsR0FBRyxJQUFJLENBQUM7U0FDMUI7T0FDRixDQUFDLENBQUM7TUFDSCxPQUFPLFFBQVEsQ0FBQztLQUNqQixDQUFDO0lBQ0YsTUFBTSxrQkFBa0Isd0JBQXdCO01BQzlDLE1BQU0sbUJBQW1CO1FBQ3ZCLFVBQVUsSUFBSTtRQUNkLHlCQUF5QixJQUFJO1FBQzdCLGNBQWM7VUFDWixVQUFVO1VBQ1YsZ0JBQWdCO1VBQ2hCLE1BQU07U0FDUDtRQUNELGNBQWMsRUFBRTtPQUNqQixDQUFDO01BQ0YsTUFBTSxTQUFTLEVBQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO01BQ3ZDLE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDO01BQ3BDLElBQUksUUFBUSxrQkFBa0IsRUFBRTtRQUM5QixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQztPQUNsQyxNQUFNLElBQUksUUFBUSxxQkFBcUIsRUFBRTtRQUN4QyxNQUFNLG1CQUFtQixHQUFHLDBCQUEwQixDQUFDO09BQ3hEO01BQ0QsT0FBTyxNQUFNLENBQUM7S0FDZixDQUFDO0lBQ0YsTUFBTSxlQUFlLHNCQUFzQjtNQUN6QyxJQUFJLFFBQVEsU0FBUyxFQUFFO1FBQ3JCLE1BQU0sU0FBUyxXQUFXLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLE9BQU8sb0JBQW9CO1VBQ3pCLE1BQU0sU0FBUyxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7VUFDM0QsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1NBQ3JCLENBQUM7T0FDSCxNQUFNO1FBQ0wsT0FBTyxhQUFhO1VBQ2xCLE1BQU0sZUFBZSxRQUFRLG1CQUFtQixDQUFDLElBQUksRUFBRSxVQUFVLGFBQWEsR0FBRyxVQUFVLGFBQWEsR0FBRyxVQUFVLFVBQVUsQ0FBQyxDQUFDO1VBQ2pJLElBQUksSUFBSSxDQUFDO1VBQ1QsT0FBTyxPQUFPLFlBQVksU0FBUyxFQUFFLEVBQUU7WUFDckMsV0FBVyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDcEMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7Y0FDckIsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQzthQUMxQztXQUNGO1NBQ0YsQ0FBQztPQUNIO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLFVBQVUsS0FBSyxRQUFRLEVBQUUsV0FBVyxLQUFLLE9BQU8sQ0FBQztJQUN2RCxNQUFNLG1CQUFtQiwyQ0FBMkM7TUFDbEUsTUFBTSxhQUFhLE1BQU0sS0FBSyxDQUFDO01BQy9CLE1BQU0sWUFBWSxVQUFVLElBQUksZUFBZSxJQUFJLFVBQVUsS0FBSyxPQUFPLElBQUksVUFBVSxLQUFLLFVBQVUsQ0FBQztNQUN2RyxNQUFNLGFBQWEsWUFBWSxXQUFXLENBQUM7TUFDM0MsS0FBSyxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssVUFBVSxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtRQUN0RCxNQUFNLGNBQWMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sUUFBUSxJQUFJLE9BQU8sQ0FBQyxXQUFXLFNBQVMsWUFBWSxFQUFFLEVBQUUsV0FBVyxTQUFTLENBQUMsQ0FBQztRQUNwRixJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRTtVQUM1QixNQUFNLGFBQWEsV0FBVyxXQUFXLENBQUM7VUFDMUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssVUFBVSxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUN0RCxNQUFNLE9BQU8sVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVCLEtBQUssS0FBSyxDQUFDLElBQUksS0FBSyxFQUFFLElBQUksTUFBTSxDQUFDLENBQUM7V0FDbkM7U0FDRixNQUFNLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1VBQ2hDLEtBQUssTUFBTSxHQUFHLFdBQVcsS0FBSyxDQUFDO1VBQy9CLElBQUksU0FBUyxFQUFFO1lBQ2IsS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDO1dBQ2xCO1NBQ0YsTUFBTSxJQUFJLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1VBQzlFLEtBQUssTUFBTSxHQUFHLFdBQVcsS0FBSyxDQUFDO1NBQ2hDO1FBQ0QsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUN0RCxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztPQUN0QjtLQUNGLENBQUM7SUFDRixNQUFNLFdBQVcseUNBQXlDO01BQ3hELE1BQU0sZ0JBQWdCLEVBQUUsQ0FBQztNQUN6QixLQUFLLElBQUksT0FBTyxJQUFJLEVBQUUsV0FBVyxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsSUFBSSxFQUFFLE9BQU8sSUFBSSxLQUFLLEVBQUUsRUFBRTtRQUNoRixNQUFNLFdBQVcsSUFBSSxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxhQUFhLEVBQUUsY0FBYyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMxRCxJQUFJLFVBQVUsQ0FBQyxRQUFRLE9BQU8sQ0FBQyxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUU7VUFDcEQsT0FBTyxRQUFRLENBQUM7U0FDakIsTUFBTTtVQUNMLGFBQWEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzlCO09BQ0Y7TUFDRCxLQUFLLElBQUksSUFBSSxhQUFhLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNsRCxNQUFNLE9BQU8sYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxjQUFjLEVBQUUsZUFBZSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztPQUMxRDtLQUNGLENBQUM7SUFDRixNQUFNLG9CQUFvQixrQ0FBa0M7TUFDMUQsTUFBTSxXQUFXLFFBQVEsU0FBUyxDQUFDO01BQ25DLE1BQU0sbUJBQW1CLE1BQU0sb0JBQW9CLEVBQUUsQ0FBQztNQUN0RCxNQUFNLHFCQUFxQixNQUFNLHNCQUFzQixFQUFFLENBQUM7TUFDMUQsTUFBTSxnQkFBZ0IsUUFBUSxDQUFDLE9BQU8sQ0FBQyw4Q0FBOEMsQ0FBQyxFQUFFLE1BQU0saUJBQWlCLEVBQUUsQ0FBQyxDQUFDO01BQ25ILE1BQU0sd0JBQXdCLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQy9ELE1BQU0sc0JBQXNCLGFBQWEsQ0FBQztNQUMxQyxNQUFNLHdCQUF3QixhQUFhLENBQUM7TUFDNUMsTUFBTSxzQkFBc0IsYUFBYSxDQUFDO01BQzFDLE1BQU0sc0JBQXNCLFFBQVE7UUFDbEMsSUFBSSxXQUFXLElBQUksT0FBTyxDQUFDO1FBQzNCLE9BQU8sYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1VBQzlCLElBQUksUUFBUSxLQUFLLElBQUksa0JBQWtCLEVBQUU7WUFDdkMsT0FBTyxJQUFJLENBQUM7V0FDYixNQUFNO1lBQ0wsV0FBVyxRQUFRLE9BQU8sQ0FBQztXQUM1QjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7T0FDZCxDQUFDO01BQ0YsTUFBTSx1QkFBdUIsUUFBUTtRQUNuQyxJQUFJLFdBQVcsSUFBSSxDQUFDO1FBQ3BCLE9BQU8sYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1VBQzlCLElBQUksUUFBUSxLQUFLLElBQUkscUJBQXFCLEVBQUU7WUFDMUMsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1dBQ3hFLE1BQU07WUFDTCxXQUFXLFFBQVEsT0FBTyxDQUFDO1dBQzVCO1NBQ0Y7UUFDRCxPQUFPLEtBQUssQ0FBQztPQUNkLENBQUM7TUFDRixNQUFNLFVBQVUsUUFBUSxJQUFJLEtBQUssSUFBSSxhQUFhLElBQUkscUJBQXFCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzFGLE1BQU0sa0JBQWtCLGlCQUFpQjtRQUN2QyxNQUFNLFlBQVksS0FBSyxHQUFHLElBQUksS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDO1FBQ2hELElBQUksYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxFQUFFO1VBQ3ZELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLElBQUksSUFBSSxJQUFJLGNBQWMsS0FBSyxJQUFJLENBQUMsQ0FBQztPQUN0RixDQUFDO01BQ0YsTUFBTSxhQUFhLFFBQVE7UUFDekIsSUFBSSxFQUFFLENBQUM7UUFDUCxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtVQUNuQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUIsSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLE1BQU0sTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDakUsT0FBTyxJQUFJLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM5QyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO2NBQ3RFLE9BQU8sSUFBSSxRQUFRLENBQUMscUJBQXFCLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDaEQ7WUFDRCxJQUFJLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtjQUNyQixJQUFJLE9BQU8sRUFBRSxDQUFDO2FBQ2YsTUFBTTtjQUNMLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQzthQUNuQjtXQUNGO1NBQ0Y7T0FDRixDQUFDO01BQ0YsTUFBTSxjQUFjLFFBQVE7UUFDMUIsSUFBSSxFQUFFLENBQUM7UUFDUCxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtVQUNuQixNQUFNLGNBQWMsTUFBTSxlQUFlLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztVQUNyRCxJQUFJLFFBQVEsSUFBSSxXQUFXLEVBQUU7WUFDM0IsTUFBTSxjQUFjLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDaEYsSUFBSSxXQUFXLGlCQUFpQixJQUFJLFdBQVcsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtjQUM3RSxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDOUMsTUFBTSxJQUFJLFdBQVcsWUFBWSxJQUFJLFdBQVcsRUFBRTtjQUNqRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDakIsSUFBSSxPQUFPLEVBQUUsQ0FBQztlQUNmLE1BQU07Z0JBQ0wsSUFBSSxPQUFPLEVBQUUsQ0FBQztlQUNmO2FBQ0YsTUFBTSxJQUFJLFdBQVcsVUFBVSxLQUFLLFdBQVcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO2NBQzNFLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQzthQUM5QztXQUNGO1NBQ0YsTUFBTSxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtVQUMxQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUIsSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLE1BQU0sTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDakUsSUFBSSxJQUFJLEtBQUssSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFO2NBQ25FLE9BQU8sSUFBSSxRQUFRLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDOUM7WUFDRCxJQUFJLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtjQUNyQixJQUFJLE9BQU8sRUFBRSxDQUFDO2FBQ2YsTUFBTTtjQUNMLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQzthQUNuQjtXQUNGO1NBQ0Y7T0FDRixDQUFDO01BQ0YsT0FBTztRQUNMLFVBQVU7UUFDVixXQUFXO09BQ1osQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLG1CQUFtQixvQkFBb0I7TUFDM0MsSUFBSSxFQUFFLENBQUM7TUFDUCxNQUFNLE9BQU8sQ0FBQyxLQUFLLElBQUksa0JBQWtCLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxrQkFBa0IsQ0FBQztNQUN2RyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUU7UUFDbEIsT0FBTyxFQUFFLENBQUM7T0FDWCxNQUFNLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtRQUN4QixPQUFPLEdBQUcsQ0FBQztPQUNaLE1BQU07UUFDTCxPQUFPLElBQUksQ0FBQztPQUNiO0tBQ0YsQ0FBQztJQUNGLE1BQU0sWUFBWSxDQUFDLFdBQVcsRUFBRSxFQUFFLFNBQVMsTUFBTSxFQUFFLEtBQUs7TUFDdEQsTUFBTSxxQkFBcUIsUUFBUSxFQUFFLENBQUM7TUFDdEMsTUFBTSwwQkFBMEIsUUFBUSxFQUFFLENBQUM7TUFDM0MsTUFBTSxvQkFBb0I7UUFDeEIsVUFBVSxJQUFJO1FBQ2QsV0FBVyxNQUFNO1FBQ2pCLFVBQVUsSUFBSTtRQUNkLEdBQUcsUUFBUTtPQUNaLENBQUM7TUFDRixNQUFNLFNBQVMsSUFBSSxTQUFTLEVBQUUsQ0FBQztNQUMvQixNQUFNLFdBQVcsWUFBWSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3pELE1BQU0sOEJBQThCLGlCQUFpQixTQUFTLE1BQU0sS0FBSztRQUN2RSxNQUFNLFdBQVcsTUFBTSxLQUFLLE9BQU8sR0FBRyx1QkFBdUIsR0FBRyxXQUFXLENBQUM7UUFDNUUsTUFBTSxnQkFBZ0IsS0FBSyxDQUFDLE1BQU0sbUJBQW1CLEVBQUUsRUFBRSxRQUFRLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDakYsTUFBTSxVQUFVLGFBQWEsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNsRixNQUFNLGNBQWMsTUFBTSxLQUFLLE9BQU8sR0FBRyxDQUFDLDhEQUE4RCxHQUFHLE9BQU8sRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEssTUFBTSxPQUFPLE1BQU0sZ0JBQWdCLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDaEUsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN6QixPQUFPLGFBQWEsR0FBRyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUM7T0FDL0MsQ0FBQztNQUNGLE1BQU0sZ0JBQWdCLGtCQUFrQixVQUFVLENBQUM7TUFDbkQsTUFBTSxpQkFBaUIsa0JBQWtCLFdBQVcsQ0FBQztNQUNyRCxNQUFNLG1CQUFtQixrQkFBa0IsYUFBYSxDQUFDO01BQ3pELE1BQU0scUJBQXFCLHVCQUF1QixVQUFVLENBQUM7TUFDN0QsTUFBTSxzQkFBc0IsdUJBQXVCLFdBQVcsQ0FBQztNQUMvRCxNQUFNLHdCQUF3Qix1QkFBdUIsYUFBYSxDQUFDO01BQ25FLE1BQU0sc0JBQXNCLDJCQUEyQjtRQUNyRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUU7VUFDM0IsZUFBZSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDNUI7T0FDRixDQUFDO01BQ0YsTUFBTSxrQkFBa0IseUJBQXlCO1FBQy9DLE1BQU0sb0JBQW9CLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7UUFDbkUsTUFBTSxrQkFBa0IsSUFBSSxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdEgsT0FBTyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksZUFBZSxJQUFJLENBQUMsaUJBQWlCLENBQUM7T0FDakUsQ0FBQztNQUNGLE1BQU0sZ0JBQWdCLDZCQUE2QjtRQUNqRCxNQUFNLGdCQUFnQixRQUFRLENBQUMsT0FBTyxDQUFDLDhDQUE4QyxDQUFDLEVBQUUsTUFBTSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDbkgsTUFBTSx3QkFBd0IsYUFBYSxDQUFDO1FBQzVDLE1BQU0sc0JBQXNCLGFBQWEsQ0FBQztRQUMxQyxJQUFJLE9BQU8sUUFBUSxXQUFXLEVBQUUsZ0JBQWdCLElBQUksQ0FBQztRQUNyRCxNQUFNLE9BQU8sYUFBYTtVQUN4QixJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7VUFDWCxJQUFJLFNBQVMsRUFBRTtZQUNiLE9BQU8sU0FBUyxXQUFXLENBQUM7WUFDNUIsSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO2NBQzNCLElBQUksTUFBTSxHQUFHLENBQUMsS0FBSyxJQUFJLE1BQU0sTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQzNHO1lBQ0QsT0FBTyxTQUFTLFVBQVUsQ0FBQztZQUMzQixJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7Y0FDM0IsSUFBSSxNQUFNLEdBQUcsQ0FBQyxLQUFLLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDekc7V0FDRjtTQUNGLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxhQUFhLENBQUMsUUFBUSxLQUFLLEVBQUUsYUFBYSxZQUFZLEVBQUUsQ0FBQyxFQUFFO1VBQ3BFLE9BQU87U0FDUjtRQUNELE9BQU8sSUFBSSxFQUFFO1VBQ1gsTUFBTSxPQUFPLElBQUksS0FBSyxDQUFDO1VBQ3ZCLElBQUksZUFBZSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUN4QyxJQUFJLENBQUMsYUFBYSxFQUFFO2NBQ2xCLGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FDOUMsYUFBYSxLQUFLLENBQUMsaUJBQWlCLHdCQUF3QixDQUFDLENBQUM7Y0FDOUQsUUFBUSxPQUFPLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO2NBQ3JDLGFBQWEsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVCLE1BQU07Y0FDTCxhQUFhLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM1QjtXQUNGLE1BQU07WUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDcEIsZ0JBQWdCLElBQUksQ0FBQztXQUN0QjtVQUNELE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7T0FDckIsQ0FBQztNQUNGLE1BQU0sUUFBUSxPQUFPLE9BQU8sRUFBRSxLQUFLO1FBQ2pDLElBQUksRUFBRSxDQUFDO1FBQ1AsTUFBTSxXQUFXLGlCQUFpQixTQUFTLENBQUM7UUFDNUMsTUFBTSxXQUFXLENBQUMsS0FBSyxJQUFJLFFBQVEsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxpQkFBaUIsVUFBVSxDQUFDO1FBQ2xHLE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksT0FBTyxDQUFDLENBQUM7UUFDekUsY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoQyxNQUFNLFdBQVcsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7UUFDakUsT0FBTyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sK0JBQStCLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyRyxNQUFNLGtCQUFrQixFQUFFLENBQUM7UUFDM0IsTUFBTSxnQkFBZ0IsUUFBUSxHQUFHLFFBQVEsbUJBQW1CLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUMzRixNQUFNLFVBQVU7VUFDZCxPQUFPLEVBQUU7VUFDVCxZQUFZLEVBQUU7U0FDZixDQUFDO1FBQ0YsTUFBTSxjQUFjLFFBQVEsV0FBVyxDQUFDLGNBQWMsRUFBRSxFQUFFLG1CQUFtQixFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2hHLFFBQVEsQ0FBQyxRQUFRLEVBQUU7VUFDakIsYUFBYTtVQUNiLFdBQVc7U0FDWixFQUFFO1VBQ0QsY0FBYztVQUNkLGFBQWE7U0FDZCxDQUFDLENBQUM7UUFDSCxlQUFlLFFBQVEsRUFBRSxDQUFDO1FBQzFCLElBQUksUUFBUSxJQUFJLGVBQWUsT0FBTyxHQUFHLENBQUMsRUFBRTtVQUMxQyxJQUFJLElBQUksUUFBUSxFQUFFO1lBQ2hCLE1BQU07OzthQUdMLEdBQUcsV0FBVyxDQUFDLGVBQWUsRUFBRSxTQUFTLEtBQUssT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDO1lBQ3JFLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ2hFLElBQUksUUFBUSxHQUFHLGdCQUFnQixPQUFPLEdBQUcsQ0FBQyxDQUFDO1dBQzVDLE1BQU07WUFDTCxpQkFBaUIsQ0FBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztXQUNuRTtTQUNGO1FBQ0QsTUFBTSxnQkFBZ0IsZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEUsSUFBSSxhQUFhLEtBQUssUUFBUSxLQUFLLEtBQUssTUFBTSxJQUFJLElBQUksY0FBYyxDQUFDLEVBQUU7VUFDckUsYUFBYSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztTQUN4QztRQUNELElBQUksQ0FBQyxJQUFJLFFBQVEsRUFBRTtVQUNqQixVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzNCO1FBQ0QsT0FBTyxRQUFRLENBQUM7T0FDakIsQ0FBQztNQUNGLE1BQU0sVUFBVTtRQUNkLE1BQU07UUFDTixrQkFBa0I7UUFDbEIsbUJBQW1CO1FBQ25CLHFCQUFxQjtRQUNyQixhQUFhO1FBQ2IsY0FBYztRQUNkLGdCQUFnQjtRQUNoQixLQUFLO09BQ04sQ0FBQztNQUNGLFVBQVUsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztNQUN2QyxVQUFVLENBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQy9DLE9BQU8sT0FBTyxDQUFDO0tBQ2hCLENBQUM7O0lBRUYsTUFBTSxtQkFBbUIsV0FBVyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsY0FBYyxDQUFDLEVBQUUsVUFBVSxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDO0lBQzNILE1BQU0sd0JBQXdCLGtDQUFrQztNQUM5RCxNQUFNLG9CQUFvQixnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUNwRCxNQUFNLFlBQVksU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7TUFDL0MsSUFBSSxTQUFTLG1CQUFtQixFQUFFLEVBQUU7UUFDbEMsT0FBTyxTQUFTLENBQUM7T0FDbEIsTUFBTSxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUM5QixJQUFJLFNBQVMsUUFBUSxLQUFLLGlCQUFpQixFQUFFO1VBQzNDLE1BQU0sV0FBVyxTQUFTLENBQUM7WUFDekIsVUFBVSxLQUFLO1lBQ2YsbUJBQW1CLEtBQUs7WUFDeEIsUUFBUTtXQUNULENBQUMsTUFBTSxDQUFDLFNBQVMsUUFBUSxFQUFFLEVBQUUsU0FBUyxPQUFPLEtBQUssRUFBRSxDQUFDLENBQUM7VUFDdkQsT0FBTztZQUNMLEdBQUcsU0FBUztZQUNaLFNBQVMsUUFBUTtXQUNsQixDQUFDO1NBQ0gsTUFBTTtVQUNMLE9BQU87WUFDTCxHQUFHLFNBQVM7WUFDWixPQUFPO1dBQ1IsQ0FBQztTQUNIO09BQ0YsTUFBTTtRQUNMLE9BQU8sU0FBUyxDQUFDO09BQ2xCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sdUJBQXVCLGtCQUFrQjtNQUM3QyxJQUFJLElBQUksVUFBVSxFQUFFO1FBQ2xCLE9BQU8sTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDM0IsTUFBTTtRQUNMLE1BQU0sWUFBWSxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckQsSUFBSSxTQUFTLG1CQUFtQixFQUFFLEVBQUU7VUFDbEMsT0FBTyxNQUFNLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFO1lBQ3pDLFNBQVMsRUFBRTtZQUNYLEdBQUcsU0FBUztXQUNiLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDYixNQUFNO1VBQ0wsT0FBTyxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNoQztPQUNGO0tBQ0YsQ0FBQztJQUNGLE1BQU0sd0JBQXdCLDJCQUEyQjtNQUN2RCxJQUFJLElBQUksVUFBVSxFQUFFO1FBQ2xCLE9BQU8sT0FBTyxDQUFDO09BQ2hCLE1BQU07UUFDTCxNQUFNLHFCQUFxQixxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsV0FBVyxjQUFjLENBQUMsTUFBTSxFQUFFO1VBQzFGLEdBQUcsSUFBSTtVQUNQLE9BQU87U0FDUixDQUFDLEVBQUUsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMvQixPQUFPLGtCQUFrQixRQUFRLENBQUM7T0FDbkM7S0FDRixDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsa0JBQWtCO01BQzdDLElBQUksSUFBSSxVQUFVLEVBQUU7UUFDbEIsT0FBTyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUMzQixNQUFNO1FBQ0wsTUFBTSxxQkFBcUIscUJBQXFCLENBQUMsSUFBSSxRQUFRLEVBQUUsV0FBVyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUU7VUFDckcsR0FBRyxJQUFJO1VBQ1AsT0FBTztTQUNSLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQy9CLElBQUksa0JBQWtCLG1CQUFtQixFQUFFLEVBQUU7VUFDM0MsY0FBYyxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1VBQzNDLE9BQU8sTUFBTSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDaEMsTUFBTTtVQUNMLE9BQU8sTUFBTSxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUN6QztPQUNGO0tBQ0YsQ0FBQztJQUNGLE1BQU0sd0JBQXdCLDJCQUEyQjtNQUN2RCxJQUFJLENBQUMsSUFBSSxVQUFVLEVBQUU7UUFDbkIsY0FBYyxDQUFDLE1BQU0sRUFBRTtVQUNyQixHQUFHLElBQUk7VUFDUCxPQUFPO1NBQ1IsQ0FBQyxDQUFDO09BQ0o7S0FDRixDQUFDOztJQUVGLE1BQU0sYUFBYSwyQkFBMkI7TUFDNUMsT0FBTztNQUNQLEtBQUs7TUFDTCxJQUFJO0tBQ0wsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxXQUFXLHFCQUFxQjtNQUNwQyxPQUFPO01BQ1AsS0FBSztLQUNOLENBQUMsQ0FBQztJQUNILE1BQU0sZUFBZSxXQUFXO01BQzlCLENBQUM7TUFDRCxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxVQUFVLGFBQWE7TUFDM0IsT0FBTyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM3QyxDQUFDO0lBQ0YsTUFBTSxVQUFVLHlCQUF5QjtNQUN2QyxNQUFNLFVBQVUsT0FBTyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztNQUN2QyxNQUFNLFVBQVUsT0FBTyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztNQUN2QyxNQUFNLE9BQU8sS0FBSyxLQUFLLENBQUM7TUFDeEIsS0FBSyxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7VUFDYixJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNyQztRQUNELEtBQUssSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxHQUFHLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRTtVQUN2QyxNQUFNLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7VUFDN0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZEO09BQ0Y7S0FDRixDQUFDO0lBQ0YsTUFBTSxhQUFhLGlCQUFpQjtNQUNsQyxNQUFNLE9BQU8sS0FBSyxLQUFLLENBQUM7TUFDeEIsTUFBTSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7TUFDM0MsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25CLENBQUM7SUFDRixNQUFNLGFBQWEsaUJBQWlCO01BQ2xDLE9BQU8sVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7UUFDOUIsQ0FBQyxFQUFFLENBQUM7T0FDTDtNQUNELE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQztJQUNGLE1BQU0sV0FBVyxRQUFRO01BQ3ZCLE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRSxjQUFjO1FBQy9CLE9BQU8sR0FBRyxNQUFNLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUM7T0FDeEQsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUNQLENBQUM7SUFDRixNQUFNLGlCQUFpQixvQkFBb0I7TUFDekMsTUFBTSxPQUFPLEtBQUssS0FBSyxDQUFDO01BQ3hCLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDcEMsTUFBTSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzVCLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7VUFDckMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sUUFBUSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQzFDO1NBQ0Y7T0FDRjtNQUNELE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztLQUN4QixDQUFDO0lBQ0YsTUFBTSxjQUFjLDJCQUEyQjtNQUM3QyxNQUFNLFVBQVUsRUFBRSxDQUFDO01BQ25CLE1BQU0sT0FBTyxLQUFLLEtBQUssQ0FBQztNQUN4QixLQUFLLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM3QixNQUFNLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDNUIsTUFBTSxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFFLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO09BQ2hEO01BQ0QsT0FBTyxPQUFPLENBQUM7S0FDaEIsQ0FBQztJQUNGLE1BQU0sV0FBVyw2QkFBNkI7TUFDNUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxFQUFFLEtBQUssUUFBUSxFQUFFLENBQUM7TUFDdkMsTUFBTSxLQUFLLE1BQU0sRUFBRSxFQUFFLEtBQUssTUFBTSxFQUFFLENBQUM7TUFDbkMsTUFBTSxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO01BQ2xHLE9BQU8sVUFBVSxDQUFDLEtBQUssUUFBUSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztLQUM5RCxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsaUJBQWlCO01BQ3RDLE1BQU0sZUFBZSxTQUFTLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQztNQUM5QyxNQUFNLFlBQVksWUFBWSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDaEQsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUN4QixRQUFRLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQ2xDLE9BQU8sWUFBWSxDQUFDO0tBQ3JCLENBQUM7SUFDRixNQUFNLHFCQUFxQixTQUFTO01BQ2xDLE9BQU8sS0FBSyxDQUFDLEtBQUssS0FBSyxFQUFFLE9BQU87UUFDOUIsTUFBTSxRQUFRLEtBQUssQ0FBQyxHQUFHLE1BQU0sRUFBRSxRQUFRO1VBQ3JDLE1BQU0sS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDeEIsUUFBUSxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztVQUN4QixRQUFRLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1VBQ3hCLE9BQU8sRUFBRSxDQUFDO1NBQ1gsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxLQUFLLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEIsT0FBTyxFQUFFLENBQUM7T0FDWCxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxVQUFVLFlBQVk7TUFDMUIsTUFBTSxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO01BQ3JELE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLFdBQVc7UUFDN0MsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsV0FBVztVQUMxQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDcEQsQ0FBQyxDQUFDO09BQ0osQ0FBQyxDQUFDO01BQ0gsT0FBTyxVQUFVLENBQUMsS0FBSyxRQUFRLEVBQUUsUUFBUSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsQ0FBQztLQUNwRSxDQUFDO0lBQ0YsTUFBTSxRQUFRLFNBQVM7TUFDckIsT0FBTyxjQUFjLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDekQsQ0FBQztJQUNGLE1BQU0sYUFBYSxxQ0FBcUM7TUFDdEQsT0FBTyxjQUFjLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsWUFBWTtRQUMxRCxPQUFPLGNBQWMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVO1VBQ3JELE9BQU8sUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDMUMsQ0FBQyxDQUFDO09BQ0osQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLDBCQUEwQixXQUFXLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUM1RyxNQUFNLCtCQUErQixrQkFBa0IsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLElBQUksc0JBQXNCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVk7TUFDL00sTUFBTSxVQUFVLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO01BQ3JELE1BQU0sYUFBYSxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLGtCQUFrQixVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7TUFDbkcsTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztNQUM1QixPQUFPO1FBQ0wsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQzFCLE9BQU87T0FDUixDQUFDO0tBQ0gsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNkLE1BQU0sT0FBTyxvQkFBb0I7TUFDL0IsTUFBTSxVQUFVLEtBQUssQ0FBQyxJQUFJLEVBQUUsY0FBYztRQUN4QyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLE9BQU8sR0FBRyxDQUFDO09BQ1osRUFBRSxRQUFRLENBQUMsQ0FBQztNQUNiLE9BQU8sSUFBSSxPQUFPLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0tBQzVELENBQUM7SUFDRixNQUFNLHFCQUFxQix5QkFBeUI7TUFDbEQsSUFBSSxZQUFZLENBQUMscUJBQXFCLENBQUMsRUFBRTtRQUN2QyxPQUFPLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVztVQUNoRixxQkFBcUI7VUFDckIsT0FBTztTQUNSLENBQUMsQ0FBQztPQUNKLE1BQU07UUFDTCxPQUFPLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsR0FBRyxFQUFFLENBQUM7T0FDckU7S0FDRixDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsbUJBQW1CO01BQ3pDLE1BQU0sd0JBQXdCLFlBQVksUUFBUSxDQUFDLEdBQUcsd0JBQXdCLENBQUMsQ0FBQztNQUNoRixNQUFNLFVBQVUsY0FBYyxDQUFDLHFCQUFxQixFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQ2hFLE1BQU0sZUFBZSxRQUFRLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO01BQ3RELE1BQU0sZUFBZSw0QkFBNEIsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDaEUsTUFBTSxjQUFjLFlBQVksT0FBTyxDQUFDLFlBQVksT0FBTyxHQUFHLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7TUFDeEgsT0FBTyxLQUFLLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ3RDLENBQUM7SUFDRixNQUFNLGdCQUFnQixNQUFNLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QyxNQUFNLHVCQUF1QixtQkFBbUIsSUFBSSxDQUFDLFlBQVksUUFBUSxDQUFDLEdBQUcsY0FBYyxFQUFFLENBQUMsRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEksTUFBTSxpQkFBaUIsbUJBQW1CLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN4RixNQUFNLG1CQUFtQixrQ0FBa0MsY0FBYyxDQUFDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWTtNQUMxSCxNQUFNLFlBQVksa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDeEMsTUFBTSxXQUFXLGtCQUFrQixDQUFDLGtCQUFrQixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDbkUsTUFBTSxpQkFBaUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQ3pDLE9BQU8sVUFBVSxDQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDL0gsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDN0IsTUFBTSx1QkFBdUIsc0JBQXNCLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxhQUFhLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUosTUFBTSxTQUFTLHNCQUFzQjtNQUNuQyxNQUFNLGdCQUFnQiwyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDcEUsT0FBTyxhQUFhLE9BQU8sR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUN0SCxDQUFDOztJQUVGLE1BQU0sMEJBQTBCLGlCQUFpQixLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLE9BQU8sSUFBSSxZQUFZLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN2SCxNQUFNLGVBQWUsT0FBTztNQUMxQixPQUFPLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO0tBQzlCLENBQUM7SUFDRixNQUFNLHFCQUFxQixrQkFBa0IsY0FBYyxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3BILE1BQU0saUJBQWlCLFVBQVUsUUFBUSxLQUFLLENBQUMsTUFBTSxVQUFVLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPO01BQ25GLElBQUksRUFBRSxDQUFDO01BQ1AsTUFBTSxpQkFBaUIsUUFBUSxLQUFLLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxHQUFHLHdCQUF3QixFQUFFLE1BQU0sSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDO01BQzVHLE1BQU0sT0FBTyxNQUFNLFFBQVEsRUFBRSxDQUFDO01BQzlCLE1BQU0sa0JBQWtCLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO01BQzNELE1BQU0sb0JBQW9CLFlBQVksUUFBUSxDQUFDLEdBQUcsY0FBYyxFQUFFLENBQUMsQ0FBQztNQUNwRSxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO01BQ3hDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLENBQUM7TUFDckMsTUFBTSxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRTtRQUNoRCxrQkFBa0IsS0FBSztRQUN2QixTQUFTLCtCQUErQjtPQUN6QyxFQUFFLGlCQUFpQixJQUFJLENBQUMsQ0FBQztNQUMxQixNQUFNLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQy9CLE1BQU0sa0JBQWtCLE1BQU0sQ0FBQyxDQUFDLEtBQUssR0FBRyxZQUFZLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7TUFDM0YsTUFBTSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUN2QixJQUFJLHVCQUF1QixDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyxlQUFlLEVBQUUsZUFBZSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDdkgsTUFBTSxjQUFjLGNBQWMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLE1BQU0sa0JBQWtCLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsRCxNQUFNLFlBQVksZUFBZSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7VUFDcEIsT0FBTyxJQUFJLENBQUM7U0FDYixNQUFNO1VBQ0wsTUFBTSxxQkFBcUIsdUJBQXVCLENBQUMsZUFBZSxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztVQUNuRixNQUFNLG1CQUFtQix1QkFBdUIsQ0FBQyxlQUFlLEVBQUUsU0FBUyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUM7VUFDM0YsT0FBTyxDQUFDLGtCQUFrQixHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLGdCQUFnQixHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUMvRTtPQUNGLE1BQU07UUFDTCxPQUFPLElBQUksQ0FBQztPQUNiO0tBQ0YsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDYixNQUFNLHVCQUF1QixrQkFBa0I7TUFDN0MsTUFBTSxNQUFNLE1BQU0sVUFBVSxPQUFPLEVBQUUsRUFBRSxTQUFTLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDMUUsTUFBTSxNQUFNLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQztNQUN0QyxNQUFNLFNBQVMsYUFBYSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUN2RCxNQUFNLFdBQVcsSUFBSSxXQUFXLEdBQUcsTUFBTSxDQUFDLFlBQVksUUFBUSxDQUFDLE1BQU0sUUFBUSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsY0FBYyxFQUFFLENBQUM7TUFDcEgsSUFBSSxRQUFRLEVBQUU7UUFDWixNQUFNLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztPQUM5QjtNQUNELE9BQU8sTUFBTSxVQUFVLFdBQVcsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztLQUM1RCxDQUFDO0lBQ0YsTUFBTSx5QkFBeUIsa0JBQWtCO01BQy9DLElBQUksSUFBSSxPQUFPLEtBQUssTUFBTSxFQUFFO1FBQzFCLE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQy9CLE1BQU07UUFDTCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25ELElBQUksSUFBSSxPQUFPLEtBQUssTUFBTSxFQUFFO1VBQzFCLE9BQU8sT0FBTyxDQUFDO1NBQ2hCLE1BQU07VUFDTCxPQUFPLE1BQU0sVUFBVSxZQUFZLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDO1NBQ3REO09BQ0Y7S0FDRixDQUFDO0lBQ0YsTUFBTSxjQUFjLG1CQUFtQjtNQUNyQyxHQUFHLElBQUk7TUFDUCxNQUFNO01BQ04sS0FBSyxJQUFJO01BQ1QsV0FBVyxJQUFJO01BQ2YsVUFBVSxJQUFJO0tBQ2YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSw2QkFBNkIsaUJBQWlCLE9BQU8sRUFBRSxLQUFLO01BQ2hFLE1BQU0sZ0JBQWdCLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDaEQsT0FBTyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsZUFBZTtRQUMvRSxNQUFNLFVBQVUsc0JBQXNCLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzVELE9BQU8scUJBQXFCLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztPQUM1RCxDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sT0FBTyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkMsTUFBTSxPQUFPLGlCQUFpQjtNQUM1QixNQUFNLE9BQU8sSUFBSSxPQUFPLEdBQUcsS0FBSyxPQUFPLEdBQUcsQ0FBQyxDQUFDO01BQzVDLE1BQU0sUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUM5QixNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDNUIsTUFBTSxRQUFRLHNCQUFzQjtRQUNsQyxPQUFPO1VBQ0wsS0FBSztVQUNMLEdBQUc7VUFDSCxJQUFJO1NBQ0wsQ0FBQztPQUNILENBQUM7TUFDRixNQUFNLGNBQWMsd0NBQXdDO1FBQzFELE1BQU0sU0FBUyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUQsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sTUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLE1BQU0sSUFBSSxLQUFLLE1BQU0sSUFBSSxNQUFNLEtBQUssS0FBSyxNQUFNLEdBQUcsTUFBTSxFQUFFO1VBQ3ZJLElBQUksSUFBSSxNQUFNLENBQUM7VUFDZixJQUFJLElBQUksTUFBTSxDQUFDO1VBQ2YsT0FBTyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUU7WUFDM0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtjQUNoRCxNQUFNLEtBQUssQ0FBQztnQkFDVixJQUFJO2dCQUNKLElBQUksQ0FBQyxDQUFDLENBQUM7ZUFDUixDQUFDLENBQUM7Y0FDSCxFQUFFLENBQUMsQ0FBQztjQUNKLEVBQUUsQ0FBQyxDQUFDO2FBQ0wsTUFBTTtjQUNMLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLEdBQUcsTUFBTSxFQUFFO2dCQUNqQyxNQUFNLEtBQUssQ0FBQztrQkFDVixNQUFNO2tCQUNOLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQ1IsQ0FBQyxDQUFDO2dCQUNILEVBQUUsQ0FBQyxDQUFDO2VBQ0wsTUFBTTtnQkFDTCxNQUFNLEtBQUssQ0FBQztrQkFDVixNQUFNO2tCQUNOLEtBQUssQ0FBQyxDQUFDLENBQUM7aUJBQ1QsQ0FBQyxDQUFDO2dCQUNILEVBQUUsQ0FBQyxDQUFDO2VBQ0w7YUFDRjtXQUNGO1NBQ0YsTUFBTTtVQUNMLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1VBQzlFLEtBQUssSUFBSSxLQUFLLE1BQU0sTUFBTSxFQUFFLEVBQUUsR0FBRyxNQUFNLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUNqRCxNQUFNLEtBQUssQ0FBQztjQUNWLElBQUk7Y0FDSixJQUFJLENBQUMsRUFBRSxDQUFDO2FBQ1QsQ0FBQyxDQUFDO1dBQ0o7VUFDRCxXQUFXLENBQUMsTUFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sSUFBSSxHQUFHLE1BQU0sS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUN2RTtPQUNGLENBQUM7TUFDRixNQUFNLGFBQWEsNkJBQTZCO1FBQzlDLElBQUksTUFBTSxLQUFLLENBQUM7UUFDaEIsT0FBTyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFO1VBQ3pFLEVBQUUsR0FBRyxDQUFDO1NBQ1A7UUFDRCxPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQ2hDLENBQUM7TUFDRixNQUFNLGlCQUFpQixnQ0FBZ0M7UUFDckQsTUFBTSxJQUFJLElBQUksR0FBRyxNQUFNLENBQUM7UUFDeEIsTUFBTSxJQUFJLElBQUksR0FBRyxNQUFNLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7VUFDdEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLE1BQU0sU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRCxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMzQixHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xCLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtVQUM1QixLQUFLLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUMzQixJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7WUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtjQUN0RCxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUN6QixNQUFNO2NBQ0wsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzdCO1lBQ0QsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDYixJQUFJLENBQUMsR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUM1QixPQUFPLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO2NBQ25ELEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztjQUNmLEVBQUUsQ0FBQyxDQUFDO2FBQ0w7WUFDRCxJQUFJLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO2NBQ3ZELElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzlCLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2VBQ3BFO2FBQ0Y7V0FDRjtVQUNELEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQzFDLElBQUksQ0FBQyxHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Y0FDbEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3pCLE1BQU07Y0FDTCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUNyQjtZQUNELElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNmLElBQUksQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxJQUFJLE1BQU0sSUFBSSxDQUFDLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7Y0FDekQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2NBQ2IsQ0FBQyxFQUFFLENBQUM7YUFDTDtZQUNELElBQUksS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Y0FDeEMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRTtnQkFDOUIsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztlQUM1RDthQUNGO1dBQ0Y7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO09BQ2IsQ0FBQztNQUNGLE1BQU0sU0FBUyxFQUFFLENBQUM7TUFDbEIsV0FBVyxDQUFDLENBQUMsRUFBRSxJQUFJLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDckQsT0FBTyxNQUFNLENBQUM7S0FDZixDQUFDOztJQUVGLE1BQU0sZUFBZSxPQUFPO01BQzFCLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3BCLE9BQU8sR0FBRyxVQUFVLENBQUM7T0FDdEIsTUFBTSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN4QixPQUFPLFFBQVEsVUFBVSxDQUFDLEdBQUcsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQzVDLE1BQU0sSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDekIsT0FBTyxNQUFNLEdBQUcsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO09BQ2xDO01BQ0QsT0FBTyxFQUFFLENBQUM7S0FDWCxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsUUFBUTtNQUM3QixJQUFJLElBQUksQ0FBQztNQUNULE1BQU0sWUFBWSxRQUFRLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUNoRCxNQUFNLE9BQU8sUUFBUSx1QkFBdUIsRUFBRSxDQUFDO01BQy9DLElBQUksSUFBSSxFQUFFO1FBQ1IsU0FBUyxVQUFVLEdBQUcsSUFBSSxDQUFDO09BQzVCO01BQ0QsT0FBTyxPQUFPLFNBQVMsV0FBVyxFQUFFO1FBQ2xDLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ3hCO01BQ0QsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxXQUFXLHNCQUFzQjtNQUNyQyxNQUFNLFdBQVcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3RDLElBQUksR0FBRyxjQUFjLEVBQUUsSUFBSSxLQUFLLEdBQUcsR0FBRyxXQUFXLE9BQU8sRUFBRTtRQUN4RCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQ3BDLE1BQU07UUFDTCxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztPQUMzQjtLQUNGLENBQUM7SUFDRixNQUFNLFdBQVcsZ0JBQWdCO01BQy9CLElBQUksR0FBRyxjQUFjLEVBQUUsSUFBSSxLQUFLLEdBQUcsR0FBRyxXQUFXLE9BQU8sRUFBRTtRQUN4RCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDekI7S0FDRixDQUFDO0lBQ0YsTUFBTSxZQUFZLGVBQWU7TUFDL0IsSUFBSSxRQUFRLENBQUMsQ0FBQztNQUNkLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVTtRQUNyQixJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7VUFDdEIsS0FBSyxFQUFFLENBQUM7U0FDVCxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sRUFBRTtVQUMvQixRQUFRLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztVQUNoQyxLQUFLLEVBQUUsQ0FBQztTQUNULE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFO1VBQy9CLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDdEI7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxTQUFTLE9BQU87TUFDcEIsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLFFBQVE7UUFDakUsT0FBTyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7T0FDeEIsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sUUFBUSxvQkFBb0I7TUFDaEMsTUFBTSxtQkFBbUIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO01BQ25FLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDbEQsT0FBTyxHQUFHLENBQUM7S0FDWixDQUFDOztJQUVGLE1BQU0sbUJBQW1CLE1BQU0sQ0FBQyxNQUFNLFFBQVEsZUFBZSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzFGLE1BQU0sYUFBYSxRQUFRO01BQ3pCLE9BQU8sSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDekMsQ0FBQztJQUNGLE1BQU0sd0JBQXdCLGFBQWE7TUFDekMsT0FBTztRQUNMLE1BQU0sWUFBWTtRQUNsQixTQUFTO1FBQ1QsU0FBUyxFQUFFO1FBQ1gsVUFBVSxJQUFJO1FBQ2QsZ0JBQWdCLElBQUk7T0FDckIsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLHNCQUFzQixXQUFXO01BQ3JDLE9BQU87UUFDTCxNQUFNLFVBQVU7UUFDaEIsV0FBVyxJQUFJO1FBQ2YsT0FBTztRQUNQLFVBQVUsSUFBSTtRQUNkLGdCQUFnQixJQUFJO09BQ3JCLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsVUFBVTtNQUNqQyxNQUFNLFlBQVksTUFBTSxDQUFDLE1BQU0sUUFBUSxFQUFFLENBQUMsQ0FBQztNQUMzQyxNQUFNLG1CQUFtQixNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVE7UUFDakQsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUFNLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0RCxPQUFPLE9BQU8sT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztPQUM1QyxDQUFDLENBQUM7TUFDSCxNQUFNLFVBQVUsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUMxQyxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3JHLENBQUM7SUFDRixNQUFNLGdCQUFnQiwyQkFBMkI7TUFDL0MsTUFBTSxXQUFXLE1BQU0sR0FBRyxLQUFLLGVBQWUsR0FBRyxLQUFLLFNBQVMsQ0FBQztNQUNoRSxJQUFJLEtBQUssS0FBSyxLQUFLLFlBQVksRUFBRTtRQUMvQixLQUFLLENBQUMsS0FBSyxVQUFVLEVBQUUsTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDO09BQzFDLE1BQU07UUFDTCxNQUFNLFdBQVcsQ0FBQyxLQUFLLFFBQVEsRUFBRTtVQUMvQixRQUFRLEtBQUs7VUFDYixjQUFjLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLFlBQVksR0FBRyxJQUFJO1NBQ2pHLENBQUMsQ0FBQztPQUNKO01BQ0QsSUFBSSxRQUFRLEVBQUU7UUFDWixNQUFNLFVBQVUsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sVUFBVSxlQUFlLEVBQUUsQ0FBQztPQUNuQztLQUNGLENBQUM7SUFDRixNQUFNLGtCQUFrQixTQUFTO01BQy9CLE9BQU8sS0FBSyxLQUFLLEtBQUssWUFBWSxHQUFHLEtBQUssVUFBVSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUM7S0FDL0UsQ0FBQztJQUNGLE1BQU0sdUJBQXVCLFNBQVM7TUFDcEMsTUFBTSxNQUFNLFlBQVksUUFBUSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7TUFDN0QsS0FBSyxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUNuQyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3RELE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ25CLENBQUM7SUFDRixNQUFNLGtCQUFrQixvQkFBb0IsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRyxNQUFNLHlCQUF5QixvQkFBb0Isb0JBQW9CLENBQUMsTUFBTSxDQUFDLEtBQUssb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakgsTUFBTSxTQUFTLG9CQUFvQjtNQUNqQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ3RCLE9BQU8sS0FBSyxDQUFDO09BQ2QsTUFBTSxJQUFJLGVBQWUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUU7UUFDMUMsT0FBTyxJQUFJLENBQUM7T0FDYixNQUFNO1FBQ0wsT0FBTyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7T0FDL0M7S0FDRixDQUFDOztJQUVGLE1BQU0sYUFBYSxTQUFTLEtBQUssSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDOztJQUU5QyxNQUFNLFlBQVksZ0NBQWdDO01BQ2hELElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3JCLFdBQVcsT0FBTyxHQUFHLE1BQU0sQ0FBQztPQUM3QjtLQUNGLENBQUM7SUFDRixNQUFNLFlBQVksd0JBQXdCO01BQ3hDLElBQUksV0FBVyxPQUFPLEVBQUU7UUFDdEIsU0FBUyxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckMsV0FBVyxJQUFJLEVBQUUsQ0FBQztPQUNuQjtLQUNGLENBQUM7SUFDRixNQUFNLDRCQUE0QixlQUFlO01BQy9DLElBQUksV0FBVyxPQUFPLEVBQUU7UUFDdEIsV0FBVyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQzNCLFdBQVcsSUFBSSxFQUFFLENBQUM7T0FDbkI7S0FDRixDQUFDOztJQUVGLE1BQU0saUJBQWlCLG1DQUFtQztNQUN4RCxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNyQixjQUFjLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxVQUFVLENBQUMsQ0FBQyxDQUFDO09BQ3ZEO0tBQ0YsQ0FBQztJQUNGLE1BQU0saUJBQWlCLHFFQUFxRTtNQUMxRixNQUFNLGVBQWUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDOUMsTUFBTSxXQUFXLEtBQUssT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7TUFDekQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLFFBQVEsRUFBRTtRQUN4QyxPQUFPLElBQUksQ0FBQztPQUNiO01BQ0QsTUFBTSxZQUFZLFdBQVcsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztNQUNoRCxJQUFJLE1BQU0sU0FBUyxDQUFDLGVBQWUsRUFBRTtVQUNqQyxPQUFPLFFBQVE7VUFDZixTQUFTO1VBQ1QsZUFBZSxLQUFLO1NBQ3JCLENBQUMsbUJBQW1CLEVBQUUsRUFBRTtRQUN6QixPQUFPLElBQUksQ0FBQztPQUNiO01BQ0QsSUFBSSxTQUFTLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRTtRQUM1QyxPQUFPLElBQUksQ0FBQztPQUNiO01BQ0QsSUFBSSxXQUFXLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEVBQUU7UUFDakMsY0FBYyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU07VUFDOUIsV0FBVyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1NBQ25ELENBQUMsQ0FBQztPQUNKO01BQ0QsTUFBTSx1QkFBdUIsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDN0QsSUFBSSxvQkFBb0IsRUFBRTtRQUN4QixJQUFJLFdBQVcsS0FBSyxPQUFPLEdBQUcsb0JBQW9CLEVBQUU7VUFDbEQsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEtBQUssT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwRCxXQUFXLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7V0FDL0M7VUFDRCxXQUFXLEtBQUssT0FBTyxFQUFFLENBQUM7VUFDMUIsS0FBSyxJQUFJLENBQUMsV0FBVyxLQUFLLE9BQU8sQ0FBQyxDQUFDO1NBQ3BDO09BQ0Y7TUFDRCxRQUFRLFNBQVMsR0FBRyxlQUFlLENBQUMsTUFBTSxVQUFVLENBQUMsQ0FBQztNQUN0RCxJQUFJLEtBQUssSUFBSSxFQUFFLEdBQUcsV0FBVyxLQUFLLE9BQU8sR0FBRyxDQUFDLEVBQUU7UUFDN0MsV0FBVyxLQUFLLE9BQU8sR0FBRyxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztPQUMzQztNQUNELFdBQVcsS0FBSyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDaEMsS0FBSyxJQUFJLENBQUMsV0FBVyxLQUFLLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztNQUN2QyxNQUFNLE9BQU87UUFDWCxPQUFPLFFBQVE7UUFDZixTQUFTO1FBQ1QsZUFBZSxLQUFLO09BQ3JCLENBQUM7TUFDRixJQUFJLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1FBQ25CLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqQyxNQUFNLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDakMsTUFBTTtRQUNMLE1BQU0sU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUNsQztNQUNELE9BQU8sUUFBUSxDQUFDO0tBQ2pCLENBQUM7SUFDRixNQUFNLFVBQVUsZ0NBQWdDO01BQzlDLFdBQVcsS0FBSyxHQUFHLEVBQUUsQ0FBQztNQUN0QixLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNiLFdBQVcsT0FBTyxHQUFHLEtBQUssQ0FBQztNQUMzQixNQUFNLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUMvQixDQUFDO0lBQ0YsTUFBTSxVQUFVLHNEQUFzRDtNQUNwRSxJQUFJLFdBQVcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ25DLE1BQU0sV0FBVyxXQUFXLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUN4RCxNQUFNLFlBQVksV0FBVyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNwRCxhQUFhLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2QyxJQUFJLFdBQVcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1VBQ25DLFdBQVcsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUM7U0FDN0Q7T0FDRjtLQUNGLENBQUM7SUFDRixNQUFNLFNBQVMseUJBQXlCO01BQ3RDLElBQUksS0FBSyxDQUFDO01BQ1YsSUFBSSxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRTtRQUNqQyxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzNCLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMxQixhQUFhLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwQyxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixNQUFNLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO09BQ3BDO01BQ0QsT0FBTyxLQUFLLENBQUM7S0FDZCxDQUFDO0lBQ0YsTUFBTSxTQUFTLHVDQUF1QztNQUNwRCxJQUFJLEtBQUssQ0FBQztNQUNWLElBQUksV0FBVyxPQUFPLEVBQUU7UUFDdEIsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUNsQixXQUFXLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDM0IsU0FBUyxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDdEM7TUFDRCxJQUFJLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1FBQ25CLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDM0IsUUFBUSxXQUFXLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEMsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkMsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsTUFBTSxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztPQUNwQztNQUNELE9BQU8sS0FBSyxDQUFDO0tBQ2QsQ0FBQztJQUNGLE1BQU0sVUFBVSxlQUFlO01BQzdCLFdBQVcsTUFBTSxFQUFFLENBQUM7TUFDcEIsV0FBVyxJQUFJLEVBQUUsQ0FBQztLQUNuQixDQUFDO0lBQ0YsTUFBTSxZQUFZLGdDQUFnQyxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxXQUFXLE9BQU8sSUFBSSxXQUFXLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxXQUFXLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pLLE1BQU0sWUFBWSx3QkFBd0IsS0FBSyxJQUFJLEVBQUUsR0FBRyxXQUFXLEtBQUssT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsT0FBTyxDQUFDO0lBQzNHLE1BQU0sYUFBYSxrQ0FBa0M7TUFDbkQsU0FBUyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztNQUM5QixXQUFXLGFBQWEsRUFBRSxDQUFDO01BQzNCLFdBQVcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQzdCLE9BQU8sV0FBVyxJQUFJLEVBQUUsQ0FBQztLQUMxQixDQUFDO0lBQ0YsTUFBTSxXQUFXLHFCQUFxQjtNQUNwQyxJQUFJO1FBQ0YsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzQixRQUFRLEVBQUUsQ0FBQztPQUNaLFNBQVM7UUFDUixLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO09BQzVCO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLG9CQUFvQixpQkFBaUI7TUFDekMsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLE1BQU0sUUFBUSxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sUUFBUSxFQUFFLENBQUM7TUFDMUQsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxjQUFjO1FBQ2pELFFBQVEsVUFBVSxTQUFTO2FBQ3RCLE9BQU87VUFDVixNQUFNLE1BQU0sdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7VUFDNUMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztVQUNsRCxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLEdBQUcsS0FBSyxNQUFNLFVBQVUsRUFBRTtZQUNqRCxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7V0FDL0IsTUFBTTtZQUNMLEdBQUcsWUFBWSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztXQUNsQztVQUNELE1BQU07YUFDSCxHQUFHO1VBQ04sSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsRUFBRTtZQUN0QyxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJLFVBQVUsR0FBRyxDQUFDO1lBQ2pFLE1BQU0sTUFBTSx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QyxJQUFJLEtBQUssSUFBSSxNQUFNLFVBQVUsRUFBRTtjQUM3QixHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDL0IsTUFBTTtjQUNMLEdBQUcsWUFBWSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNsQztXQUNGO1VBQ0QsTUFBTTtTQUNQO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxTQUFTLENBQUMsV0FBVyxFQUFFO1FBQzNCLFNBQVMsR0FBRztRQUNaLFdBQVcsTUFBTSxVQUFVO09BQzVCLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxtQkFBbUIsV0FBVztNQUNsQyxNQUFNLEVBQUUsWUFBWSxJQUFJLEVBQUU7TUFDMUIsYUFBYTtRQUNYLGNBQWMsMkJBQTJCLGNBQWMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQztRQUN0RixLQUFLLDZEQUE2RCxjQUFjLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO1FBQ2pKLE1BQU0sK0JBQStCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7UUFDOUUsTUFBTSxpQkFBaUIsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDO1FBQ2xELE9BQU8sd0JBQXdCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQztRQUNsRSxPQUFPLGVBQWUsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUMxQyxTQUFTLHdCQUF3QixTQUFTLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUM7UUFDdEUsU0FBUyx3QkFBd0IsU0FBUyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUM7UUFDOUQsVUFBVSxrQ0FBa0MsVUFBVSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDO1FBQ3BGLFFBQVEscUJBQXFCLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDO1FBQ3RELE9BQU8sOENBQThDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDO09BQy9HO01BQ0QsV0FBVztRQUNULE9BQU8sK0JBQStCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDO1FBQ2hGLFVBQVUsaUJBQWlCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQztRQUN4RCxXQUFXLCtCQUErQixTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQztRQUN0RixVQUFVLFFBQVEsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7UUFDeEMsU0FBUyxTQUFTLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO1FBQ3hDLE9BQU8sc0JBQXNCLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7UUFDcEUsUUFBUSwrQkFBK0IsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUM7UUFDeEYsUUFBUSxzQkFBc0IsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztRQUM5RCxlQUFlLGlFQUFpRSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUseUJBQXlCLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDO09BQzNLO01BQ0QsUUFBUTtRQUNOLFlBQVksUUFBUSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1FBQ3BELFlBQVksbUJBQW1CLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDO1FBQ3hFLGVBQWUsb0JBQW9CLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDO1FBQzVFLFdBQVcsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO09BQ2pEO01BQ0QsV0FBVyxFQUFFLFlBQVksa0JBQWtCLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUU7TUFDN0YsZUFBZTtRQUNiLGVBQWUsU0FBUyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztRQUMvQyxrQkFBa0IsTUFBTSxRQUFRLENBQUMsTUFBTSxFQUFFLFlBQVksUUFBUSxDQUFDLE1BQU0sUUFBUSxFQUFFLENBQUMsQ0FBQztPQUNqRjtNQUNELEtBQUssRUFBRSxVQUFVLE1BQU0sUUFBUSxLQUFLLEVBQUUsRUFBRTtLQUN6QyxDQUFDLENBQUM7SUFDSCxNQUFNLGlCQUFpQixhQUFhO01BQ2xDLE1BQU0sY0FBYyxRQUFRLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO01BQ3ZELE1BQU0scUVBQXFFLEdBQUcsU0FBUyxDQUFDO01BQ3hGLE9BQU87UUFDTCxNQUFNLEVBQUUsWUFBWSxJQUFJLFdBQVcsRUFBRTtRQUNyQyxhQUFhO1VBQ1gsY0FBYyxXQUFXLGFBQWE7VUFDdEMsS0FBSyxXQUFXLElBQUk7VUFDcEIsTUFBTSxXQUFXLEtBQUs7VUFDdEIsTUFBTSxXQUFXLEtBQUs7VUFDdEIsT0FBTyxXQUFXLE1BQU07VUFDeEIsT0FBTyxXQUFXLE1BQU07VUFDeEIsU0FBUyxXQUFXLFFBQVE7VUFDNUIsU0FBUyxXQUFXLFFBQVE7VUFDNUIsVUFBVSw4QkFBOEIsV0FBVyxTQUFTLENBQUMsRUFBRSxDQUFDO1VBQ2hFLFFBQVEsc0JBQXNCLFdBQVcsT0FBTyxDQUFDLFFBQVEsQ0FBQztVQUMxRCxPQUFPLGdEQUFnRCxXQUFXLE1BQU0sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO1NBQy9GO1FBQ0QsV0FBVztVQUNULE9BQU8sZ0NBQWdDLFNBQVMsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDO1VBQ3hGLFVBQVUsU0FBUyxTQUFTO1VBQzVCLFdBQVcsU0FBUyxVQUFVO1VBQzlCLFVBQVUsUUFBUSxTQUFTLFNBQVMsQ0FBQyxJQUFJLENBQUM7VUFDMUMsU0FBUyxTQUFTLFNBQVMsUUFBUSxDQUFDLEtBQUssQ0FBQztVQUMxQyxPQUFPLHVCQUF1QixTQUFTLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQ3RFLFFBQVEsaUNBQWlDLFNBQVMsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDbEYsUUFBUSx1QkFBdUIsU0FBUyxPQUFPLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUN4RSxlQUFlLDRDQUE0QyxTQUFTLGNBQWMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUM7U0FDckg7UUFDRCxRQUFRO1VBQ04sWUFBWSxRQUFRLE1BQU0sV0FBVyxDQUFDLElBQUksQ0FBQztVQUMzQyxZQUFZLG1CQUFtQjtZQUM3QixPQUFPO2NBQ0wsU0FBUyxNQUFNLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDO2NBQ3pDLE1BQU0sRUFBRTthQUNULENBQUM7V0FDSDtVQUNELGVBQWUsdUJBQXVCO1lBQ3BDLE1BQU0sY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlCLE9BQU8sRUFBRSxDQUFDO1dBQ1g7VUFDRCxXQUFXLE1BQU0sVUFBVTtTQUM1QjtRQUNELFdBQVcsRUFBRSxZQUFZLG1CQUFtQixTQUFTLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUN4RSxlQUFlO1VBQ2IsZUFBZSxhQUFhLGNBQWM7VUFDMUMsa0JBQWtCLGFBQWEsaUJBQWlCO1NBQ2pEO1FBQ0QsS0FBSyxFQUFFLFVBQVUsTUFBTSxRQUFRLEtBQUssQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUU7T0FDMUQsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLGtCQUFrQixNQUFNO01BQzVCLE1BQU0sTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDM0IsTUFBTSxRQUFRLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUMzQixPQUFPO1FBQ0wsTUFBTSxFQUFFLFlBQVksSUFBSSxFQUFFO1FBQzFCLGFBQWE7VUFDWCxjQUFjLElBQUk7VUFDbEIsS0FBSyxHQUFHO1VBQ1IsTUFBTSxHQUFHO1VBQ1QsTUFBTSxHQUFHO1VBQ1QsT0FBTyxJQUFJO1VBQ1gsT0FBTyxJQUFJO1VBQ1gsU0FBUyxLQUFLO1VBQ2QsU0FBUyxLQUFLO1VBQ2QsVUFBVSxHQUFHO1VBQ2IsUUFBUSxJQUFJO1VBQ1osT0FBTyxJQUFJO1NBQ1o7UUFDRCxXQUFXO1VBQ1QsT0FBTyxLQUFLO1VBQ1osVUFBVSxRQUFRLENBQUMsRUFBRSxDQUFDO1VBQ3RCLFdBQVcsUUFBUSxDQUFDLFNBQVMsQ0FBQztVQUM5QixVQUFVLEtBQUs7VUFDZixTQUFTLEtBQUs7VUFDZCxPQUFPLElBQUk7VUFDWCxRQUFRLElBQUk7VUFDWixRQUFRLElBQUk7VUFDWixlQUFlLFFBQVEsQ0FBQyxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7U0FDMUM7UUFDRCxRQUFRO1VBQ04sWUFBWSxLQUFLO1VBQ2pCLFlBQVksUUFBUSxDQUFDO1lBQ25CLFNBQVMsRUFBRTtZQUNYLE1BQU0sRUFBRTtXQUNULENBQUM7VUFDRixlQUFlLFFBQVEsQ0FBQyxFQUFFLENBQUM7VUFDM0IsV0FBVyxJQUFJO1NBQ2hCO1FBQ0QsV0FBVyxFQUFFLFlBQVksS0FBSyxFQUFFO1FBQ2hDLGVBQWU7VUFDYixlQUFlLElBQUk7VUFDbkIsa0JBQWtCLElBQUk7U0FDdkI7UUFDRCxLQUFLLEVBQUUsVUFBVSxRQUFRLENBQUMsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFO09BQzdDLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxRQUFRLFVBQVUsS0FBSyxDQUFDLE1BQU0sUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JELE1BQU0sY0FBYyxVQUFVLEtBQUssQ0FBQyxNQUFNLFFBQVEsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsUUFBUSxLQUFLLENBQUMsU0FBUyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzdHLE1BQU0sVUFBVSxVQUFVO01BQ3hCLE1BQU0sYUFBYSxNQUFNLENBQUM7TUFDMUIsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNO1FBQ3BDLFVBQVUsWUFBWSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN4QixFQUFFLFNBQVM7UUFDVixVQUFVLFlBQVksR0FBRyxlQUFlLEVBQUUsQ0FBQztRQUMzQyxPQUFPLFFBQVEsS0FBSyxDQUFDLE1BQU0sS0FBSyxFQUFFLEtBQUssQ0FBQyxhQUFhO1VBQ25ELFVBQVUsWUFBWSxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztVQUNuRCxPQUFPLFNBQVMsSUFBSSxTQUFTLENBQUM7U0FDL0IsQ0FBQyxDQUFDLENBQUM7T0FDTCxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSw2QkFBNkIsVUFBVSxNQUFNLFlBQVksR0FBRyxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoSCxNQUFNLDBCQUEwQixVQUFVO01BQ3hDLE1BQU0sY0FBYyxNQUFNLFlBQVksQ0FBQztNQUN2QyxJQUFJLENBQUMsV0FBVyxFQUFFO1FBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztPQUNwRSxNQUFNO1FBQ0wsT0FBTyxXQUFXLENBQUM7T0FDcEI7S0FDRixDQUFDO0lBQ0YsTUFBTSxlQUFlLG1DQUFtQztNQUN0RCx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsWUFBWSxhQUFhLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0tBQ2pGLENBQUM7SUFDRixNQUFNLGVBQWUscUVBQXFFLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25NLE1BQU0sT0FBTyx1Q0FBdUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLFlBQVksS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEksTUFBTSxPQUFPLHlCQUF5Qix1QkFBdUIsQ0FBQyxNQUFNLENBQUMsWUFBWSxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BHLE1BQU0sUUFBUSxnQ0FBZ0M7TUFDNUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLFlBQVksTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUN2RSxDQUFDO0lBQ0YsTUFBTSxRQUFRLHlCQUF5QjtNQUNyQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsWUFBWSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDaEUsQ0FBQztJQUNGLE1BQU0sVUFBVSxnQ0FBZ0MsdUJBQXVCLENBQUMsTUFBTSxDQUFDLFlBQVksUUFBUSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4SCxNQUFNLFVBQVUsZ0NBQWdDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxZQUFZLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEgsTUFBTSxXQUFXLDBDQUEwQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsWUFBWSxTQUFTLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5SSxNQUFNLFNBQVMsNkJBQTZCO01BQzFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxZQUFZLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDckUsQ0FBQztJQUNGLE1BQU0sUUFBUSxzREFBc0Q7TUFDbEUsdUJBQXVCLENBQUMsTUFBTSxDQUFDLFlBQVksTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQzdGLENBQUM7SUFDRixNQUFNLGNBQWMsdUNBQXVDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxVQUFVLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0SSxNQUFNLGtCQUFrQix5QkFBeUIsdUJBQXVCLENBQUMsTUFBTSxDQUFDLFVBQVUsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqSCxNQUFNLGtCQUFrQix1Q0FBdUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLFVBQVUsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlJLE1BQU0saUJBQWlCLGtCQUFrQix1QkFBdUIsQ0FBQyxNQUFNLENBQUMsVUFBVSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEcsTUFBTSxnQkFBZ0IsbUJBQW1CLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxVQUFVLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRyxNQUFNLGNBQWMsOEJBQThCO01BQ2hELHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxVQUFVLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ25FLENBQUM7SUFDRixNQUFNLGVBQWUsdUNBQXVDO01BQzFELHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxVQUFVLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztLQUM3RSxDQUFDO0lBQ0YsTUFBTSxlQUFlLDhCQUE4QjtNQUNqRCx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsVUFBVSxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNwRSxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IseUVBQXlFLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxVQUFVLGNBQWMsQ0FBQyx5QkFBeUIsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwTixNQUFNLGVBQWUsa0JBQWtCLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRyxNQUFNLGVBQWUsMkJBQTJCLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxPQUFPLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEgsTUFBTSxrQkFBa0IsNEJBQTRCLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxPQUFPLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUgsTUFBTSxxQkFBcUIsMEJBQTBCLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxVQUFVLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEgsTUFBTSxjQUFjLGlCQUFpQix1QkFBdUIsQ0FBQyxNQUFNLENBQUMsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0YsTUFBTSxhQUFhLFVBQVUsdUJBQXVCLENBQUMsTUFBTSxDQUFDLEtBQUssV0FBVyxFQUFFLENBQUM7SUFDL0UsTUFBTSw2QkFBNkIsbUJBQW1CLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxjQUFjLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6SCxNQUFNLGdDQUFnQyxVQUFVLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxjQUFjLGlCQUFpQixFQUFFLENBQUM7O0lBRWpILE1BQU0sZUFBZSxTQUFTLE9BQU8sRUFBRSxLQUFLO01BQzFDLE1BQU0sU0FBUyxJQUFJLE9BQU8sR0FBRyxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUM7TUFDbEQsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ2pELENBQUM7O0lBRUYsTUFBTSxjQUFjLFFBQVE7TUFDMUIsSUFBSSxJQUFJLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtRQUN6QixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDZixPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEIsTUFBTTtRQUNMLE9BQU8sUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDNUI7S0FDRixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsaUJBQWlCLElBQUksT0FBTyxDQUFDLE9BQU8sZUFBZSxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFdBQVcsR0FBRyxXQUFXLENBQUMsQ0FBQztJQUM5SSxNQUFNLFVBQVUsOEJBQThCO01BQzVDLE1BQU0sV0FBVyxLQUFLLElBQUksQ0FBQztNQUMzQixNQUFNLFdBQVcsS0FBSyxJQUFJLENBQUM7TUFDM0IsTUFBTSxZQUFZLEtBQUssR0FBRyxRQUFRLE9BQU8sR0FBRyxRQUFRLE9BQU8sQ0FBQztNQUM1RCxJQUFJLEtBQUssRUFBRTtRQUNULGNBQWMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztPQUNuQyxNQUFNO1FBQ0wsY0FBYyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO09BQ2pDO0tBQ0YsQ0FBQztJQUNGLE1BQU0sMEJBQTBCLGtCQUFrQjtNQUNoRCxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRO1FBQ3pCLE1BQU0sT0FBTyxLQUFLLElBQUksQ0FBQztRQUN2QixJQUFJLEtBQUssSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO1VBQzVELHdCQUF3QixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNuQyxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksa0JBQWtCLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFO1VBQy9FLHlCQUF5QixDQUFDLElBQUksRUFBRSxJQUFJLE9BQU8sQ0FBQyxDQUFDO1NBQzlDO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sd0JBQXdCLHNDQUFzQztNQUNsRSxTQUFTLEtBQUssQ0FBQyxTQUFTO1FBQ3RCLE1BQU0sYUFBYSxLQUFLLEdBQUcseUJBQXlCLEdBQUcsd0JBQXdCLENBQUM7UUFDaEYsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFLEtBQUssR0FBRyxLQUFLLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sU0FBUyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO09BQ25GLENBQUMsUUFBUSxDQUFDLE1BQU07UUFDZixNQUFNLGdCQUFnQixnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hGLE9BQU8sYUFBYSxJQUFJLENBQUMsU0FBUyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztPQUMxRSxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsbUJBQW1CO01BQ3ZDLE1BQU0sYUFBYSxRQUFRLEtBQUssQ0FBQyxRQUFRLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxRQUFRLENBQUMsQ0FBQztNQUNoRixNQUFNLFlBQVksUUFBUSxLQUFLLENBQUMsUUFBUSxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksUUFBUSxDQUFDLENBQUM7TUFDOUUsR0FBRyxlQUFlLEVBQUUsQ0FBQztNQUNyQixHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUN6QixNQUFNLFdBQVcsVUFBVSxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO01BQ2pGLE1BQU0sV0FBVyxTQUFTLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7TUFDaEYscUJBQXFCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDdkQscUJBQXFCLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDdkQsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDckIsQ0FBQztJQUNGLE1BQU0sY0FBYyxvQkFBb0I7TUFDdEMsUUFBUSxNQUFNO01BQ2QsR0FBRyxJQUFJO01BQ1AsS0FBSyxJQUFJO01BQ1QsV0FBVyxJQUFJO01BQ2YsT0FBTztLQUNSLENBQUMsQ0FBQztJQUNILE1BQU0sZUFBZSxrQkFBa0I7TUFDckMsSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLEVBQUU7UUFDekIsTUFBTSxNQUFNLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQztRQUN0QyxNQUFNLGVBQWUsTUFBTSxJQUFJLFVBQVUsQ0FBQyxHQUFHLHdCQUF3QixFQUFFLE1BQU0sSUFBSSxRQUFRLENBQUMsQ0FBQztRQUMzRixNQUFNLGNBQWMsWUFBWSxHQUFHLEVBQUUsU0FBUyxZQUFZLFNBQVMsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDekYsTUFBTSxPQUFPLE1BQU0sT0FBTyxNQUFNLENBQUMsSUFBSSxRQUFRLEVBQUU7VUFDN0MsbUJBQW1CLEtBQUs7VUFDeEIsR0FBRyxXQUFXO1VBQ2QsR0FBRyxJQUFJO1NBQ1IsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxjQUFjLENBQUMsRUFBRSxVQUFVLEtBQUssRUFBRSxFQUFFLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUMzRSxNQUFNO1FBQ0wsT0FBTyxJQUFJLFFBQVEsQ0FBQztPQUNyQjtLQUNGLENBQUM7SUFDRixNQUFNLGVBQWUsa0JBQWtCLE9BQU8sRUFBRSxLQUFLO01BQ25ELE1BQU0sZ0JBQWdCLFdBQVcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDakQsb0JBQW9CLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsZUFBZTtRQUM5RCxNQUFNLGlCQUFpQixZQUFZLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sTUFBTSxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7UUFDdEMsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLHlCQUF5QixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDakUsTUFBTSxVQUFVLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakMscUJBQXFCLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztPQUM1RCxDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sd0JBQXdCLHFDQUFxQztNQUNqRSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUU7UUFDaEMsTUFBTSxlQUFlLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDNUUsSUFBSSxZQUFZLE9BQU8sS0FBSyxDQUFDLEVBQUU7VUFDN0IsT0FBTyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDOUIsTUFBTTtVQUNMLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxZQUFZLENBQUM7U0FDdEM7T0FDRjtLQUNGLENBQUM7SUFDRixJQUFJLGtCQUFrQixpQkFBaUI7TUFDckMsSUFBSSxtQkFBbUIsQ0FBQztNQUN4QixJQUFJLGdCQUFnQixDQUFDO01BQ3JCLE1BQU0sbUJBQW1CLHFCQUFxQixNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7TUFDNUYsTUFBTSxhQUFhLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDMUUsTUFBTSxRQUFRLE1BQU07UUFDbEIsc0JBQXNCLEVBQUUsQ0FBQztRQUN6QixtQkFBbUIsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sR0FBRyxDQUFDLFlBQVksRUFBRSxLQUFLO1VBQzNCLE1BQU0sT0FBTyxDQUFDLFFBQVEsQ0FBQztVQUN2QixNQUFNLFVBQVUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQ2pDLE1BQU0sbUJBQW1CLEVBQUUsQ0FBQztVQUM1QixNQUFNLENBQUMsbUJBQW1CLEVBQUUseUJBQXlCO1lBQ25ELGdCQUFnQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVE7Y0FDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUMvQixNQUFNLENBQUMsU0FBUyxFQUFFLFlBQVk7a0JBQzVCLFFBQVEsQ0FBQyxJQUFJLEVBQUU7b0JBQ2IsSUFBSTtvQkFDSixRQUFRO29CQUNSLE9BQU87bUJBQ1IsQ0FBQyxDQUFDO2lCQUNKLENBQUMsQ0FBQztnQkFDSCxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxTQUFTLENBQUM7ZUFDeEM7Y0FDRCxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxTQUFTLENBQUM7YUFDeEMsQ0FBQyxDQUFDO1dBQ0osQ0FBQyxDQUFDO1VBQ0gsTUFBTSxDQUFDLGdCQUFnQixFQUFFLHlCQUF5QjtZQUNoRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUU7Y0FDL0IsT0FBTyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztjQUNsQyxNQUFNLENBQUMsU0FBUyxFQUFFLFlBQVk7Z0JBQzVCLFFBQVEsQ0FBQyxLQUFLLEVBQUU7a0JBQ2QsSUFBSTtrQkFDSixRQUFRO2tCQUNSLE9BQU87aUJBQ1IsQ0FBQyxDQUFDO2VBQ0osQ0FBQyxDQUFDO2FBQ0o7V0FDRixDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsT0FBTztRQUNMLDJCQUEyQix3QkFBd0I7VUFDakQsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQ3hCLEtBQUssRUFBRSxDQUFDO1dBQ1Q7VUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbEMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO1dBQ3BDO1VBQ0QsbUJBQW1CLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztVQUM3QyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLE1BQU0sVUFBVSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQzdFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1dBQzVELENBQUMsQ0FBQztVQUNILE9BQU87WUFDTCxRQUFRLE1BQU07Y0FDWixxQkFBcUIsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7Y0FDL0QscUJBQXFCLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQzdEO1dBQ0YsQ0FBQztTQUNIO09BQ0YsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxrQkFBa0IsUUFBUTtNQUM5QixPQUFPLENBQUMsRUFBRSxJQUFJLElBQUksSUFBSSxjQUFjLENBQUMsSUFBSSxRQUFRLENBQUMsWUFBWSxRQUFRLENBQUMsSUFBSSxjQUFjLENBQUMsRUFBRSxZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ3pILENBQUM7SUFDRixNQUFNLGVBQWUsT0FBTztNQUMxQixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1IsT0FBTyxLQUFLLENBQUM7T0FDZCxNQUFNO1FBQ0wsT0FBTyxlQUFlLENBQUMsR0FBRyxlQUFlLENBQUMsSUFBSSxlQUFlLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQztPQUNqRjtLQUNGLENBQUM7SUFDRixNQUFNLGtCQUFrQixrQ0FBa0M7TUFDeEQsSUFBSSxhQUFhLENBQUM7TUFDbEIsSUFBSSxhQUFhLENBQUM7TUFDbEIsTUFBTSwyQkFBMkIsR0FBRyxlQUFlLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ2pFLE1BQU0sb0JBQW9CLGtCQUFrQjtRQUMxQyxNQUFNLE1BQU0sR0FBRyxVQUFVLEVBQUUsQ0FBQztRQUM1QixJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUU7VUFDaEQsR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1VBQzNCLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztVQUN6QixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7VUFDWixRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDakIsTUFBTTtVQUNMLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7VUFDL0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2I7T0FDRixDQUFDO01BQ0YsTUFBTSxhQUFhLFFBQVEsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztNQUN0RCxNQUFNLGFBQWEsbUJBQW1CLFlBQVksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzFFLE1BQU0sYUFBYSxRQUFRLFFBQVEsQ0FBQyxNQUFNLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ3hFLE1BQU0sU0FBUyxRQUFRLFFBQVEsQ0FBQyxNQUFNLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ3BFLE1BQU0sY0FBYyxzQkFBc0IsZUFBZSxZQUFZLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO01BQ3hGLE1BQU0saUJBQWlCLFlBQVksZUFBZSxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDNUUsTUFBTSxXQUFXLG1CQUFtQjtRQUNsQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDO09BQ2IsQ0FBQztNQUNGLE1BQU0sY0FBYyxNQUFNO1FBQ3hCLE1BQU0sTUFBTSxRQUFRLEVBQUUsRUFBRSxNQUFNLE1BQU0sRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUU7VUFDcEIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELElBQUksR0FBRyxpQkFBaUIsRUFBRTtVQUN4QixPQUFPLEdBQUcsaUJBQWlCLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN0RDtRQUNELE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxVQUFVLENBQUM7T0FDOUIsQ0FBQztNQUNGLE1BQU0sYUFBYSxNQUFNO1FBQ3ZCLE1BQU0sTUFBTSxRQUFRLEVBQUUsQ0FBQztRQUN2QixNQUFNLHVCQUF1QixNQUFNLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzFGLElBQUksb0JBQW9CLE9BQU8sR0FBRyxDQUFDLEVBQUU7VUFDbkMsT0FBTyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxHQUFHLFdBQVcsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7U0FDN0UsTUFBTSxJQUFJLEdBQUcsZUFBZSxLQUFLLEdBQUcsYUFBYSxFQUFFO1VBQ2xELE9BQU8sR0FBRyxXQUFXLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQztTQUMzQyxNQUFNO1VBQ0wsT0FBTyxHQUFHLFdBQVcsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7U0FDL0U7T0FDRixDQUFDO01BQ0YsTUFBTSxXQUFXLFdBQVc7UUFDMUIsTUFBTSxNQUFNLFFBQVEsRUFBRSxDQUFDO1FBQ3ZCLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDYixDQUFDO01BQ0YsTUFBTSxTQUFTLE1BQU0sR0FBRyxhQUFhLEdBQUcsR0FBRyxhQUFhLEVBQUUsR0FBRyxHQUFHLFNBQVMsVUFBVSxDQUFDO01BQ3BGLE1BQU0sV0FBVyxNQUFNO1FBQ3JCLElBQUksR0FBRyxDQUFDO1FBQ1IsTUFBTSwyQkFBMkIsd0NBQXdDO1VBQ3ZFLElBQUk7WUFDRixPQUFPLFdBQVcsc0JBQXNCLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDLENBQUM7V0FDakUsQ0FBQyxXQUFXO1lBQ1gsT0FBTyxDQUFDLENBQUMsQ0FBQztXQUNYO1NBQ0YsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUN6QixJQUFJLGFBQWEsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1VBQ3ZELE1BQU0sV0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7VUFDaEMsSUFBSSxRQUFRLE9BQU8sRUFBRSxFQUFFO1lBQ3JCLE9BQU8sUUFBUSxJQUFJLENBQUMsS0FBSyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1dBQ2xGO1NBQ0Y7UUFDRCxJQUFJO1VBQ0YsTUFBTSxZQUFZLE1BQU0sRUFBRSxDQUFDO1VBQzNCLElBQUksU0FBUyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxXQUFXLENBQUMsRUFBRTtZQUN4RCxJQUFJLFNBQVMsV0FBVyxHQUFHLENBQUMsRUFBRTtjQUM1QixNQUFNLFNBQVMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQy9CLE1BQU07Y0FDTCxNQUFNLEdBQUcsWUFBWSxFQUFFLENBQUM7YUFDekI7WUFDRCxNQUFNLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ3ZDO1NBQ0YsQ0FBQyxXQUFXO1NBQ1o7UUFDRCxJQUFJLENBQUMsR0FBRyxFQUFFO1VBQ1IsTUFBTSxHQUFHLFlBQVksRUFBRSxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxZQUFZLENBQUMsR0FBRyxlQUFlLENBQUMsSUFBSSxHQUFHLFVBQVUsRUFBRTtVQUNyRCxNQUFNLE1BQU0sR0FBRyxRQUFRLEVBQUUsQ0FBQztVQUMxQixHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7VUFDckIsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3BCO1FBQ0QsSUFBSSxhQUFhLElBQUksYUFBYSxFQUFFO1VBQ2xDLElBQUksd0JBQXdCLENBQUMsR0FBRyxlQUFlLEVBQUUsR0FBRyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSx3QkFBd0IsQ0FBQyxHQUFHLFdBQVcsRUFBRSxHQUFHLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2hKLE1BQU0sYUFBYSxDQUFDO1dBQ3JCLE1BQU07WUFDTCxnQkFBZ0IsSUFBSSxDQUFDO1lBQ3JCLGdCQUFnQixJQUFJLENBQUM7V0FDdEI7U0FDRjtRQUNELE9BQU8sR0FBRyxDQUFDO09BQ1osQ0FBQztNQUNGLE1BQU0sU0FBUyxrQkFBa0I7UUFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRTtVQUN0QixPQUFPO1NBQ1I7UUFDRCxNQUFNLE1BQU0sTUFBTSxFQUFFLENBQUM7UUFDckIsTUFBTSxNQUFNLE1BQU0sU0FBUyxDQUFDLG1CQUFtQixFQUFFO1VBQy9DLE9BQU8sR0FBRztVQUNWLE9BQU87U0FDUixDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ2hCLElBQUksR0FBRyxFQUFFO1VBQ1AsZ0JBQWdCLEdBQUcsQ0FBQztVQUNwQixJQUFJO1lBQ0YsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3RCLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1dBQ25CLENBQUMsV0FBVztXQUNaO1VBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTyxFQUFFO1lBQ25DLEdBQUcsU0FBUyxDQUFDLEdBQUcsYUFBYSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUM7WUFDOUMsR0FBRyxPQUFPLENBQUMsR0FBRyxlQUFlLEVBQUUsR0FBRyxZQUFZLENBQUMsQ0FBQztXQUNqRDtVQUNELGdCQUFnQixHQUFHLFdBQVcsR0FBRyxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQy9EO1FBQ0QsSUFBSSxDQUFDLEdBQUcsVUFBVSxJQUFJLEdBQUcsZUFBZSxLQUFLLEdBQUcsYUFBYSxLQUFLLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsaUJBQWlCLENBQUMsRUFBRTtVQUNqSSxJQUFJLEdBQUcsVUFBVSxHQUFHLEdBQUcsWUFBWSxHQUFHLENBQUMsRUFBRTtZQUN2QyxJQUFJLEdBQUcsZUFBZSxjQUFjLEVBQUUsRUFBRTtjQUN0QyxNQUFNLE9BQU8sR0FBRyxlQUFlLFdBQVcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDO2NBQzVELElBQUksSUFBSSxJQUFJLElBQUksU0FBUyxLQUFLLEtBQUssRUFBRTtnQkFDbkMsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLGVBQWUsRUFBRSxHQUFHLFlBQVksRUFBRSxHQUFHLGFBQWEsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDO2dCQUMzRixJQUFJLEdBQUcsV0FBVyxLQUFLLEdBQUcsZUFBZSxJQUFJLEdBQUcsVUFBVSxLQUFLLEdBQUcsYUFBYSxFQUFFO2tCQUMvRSxHQUFHLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUN4QztlQUNGO2FBQ0Y7V0FDRjtTQUNGO1FBQ0QsTUFBTSxTQUFTLENBQUMsd0JBQXdCLEVBQUU7VUFDeEMsT0FBTyxHQUFHO1VBQ1YsT0FBTztTQUNSLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLFVBQVUsT0FBTztRQUNyQixVQUFVLENBQUMsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsQyxPQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7TUFDRixNQUFNLFlBQVksTUFBTSxPQUFPLENBQUMsTUFBTSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQzlELE1BQU0sc0JBQXNCLHNCQUFzQixpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3ZHLE1BQU0sWUFBWSxNQUFNO1FBQ3RCLE1BQU0sTUFBTSxNQUFNLEVBQUUsQ0FBQztRQUNyQixNQUFNLGFBQWEsR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUM7UUFDNUUsTUFBTSxZQUFZLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDO1FBQzFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxTQUFTLElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLElBQUksZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEVBQUU7VUFDcEcsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sY0FBYyxHQUFHLFVBQVUsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sYUFBYSxHQUFHLFVBQVUsRUFBRSxDQUFDO1FBQ25DLElBQUk7VUFDRixXQUFXLFNBQVMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxhQUFhLENBQUMsQ0FBQztVQUNuRCxXQUFXLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUMzQixVQUFVLFNBQVMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxZQUFZLENBQUMsQ0FBQztVQUNoRCxVQUFVLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMzQixDQUFDLFVBQVU7VUFDVixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxXQUFXLHNCQUFzQixDQUFDLFdBQVcsZUFBZSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN2RixDQUFDO01BQ0YsTUFBTSxZQUFZLE1BQU07UUFDdEIsTUFBTSxNQUFNLFFBQVEsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sTUFBTSxNQUFNLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1VBQ25ELE1BQU0sVUFBVSxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1VBQ3RDLE9BQU8sS0FBSyxDQUFDLFdBQVc7WUFDdEIsTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1dBQzlCLENBQUMsQ0FBQztVQUNILE9BQU8sT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDM0I7UUFDRCxPQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7TUFDRixNQUFNLGtCQUFrQix3QkFBd0I7UUFDOUMseUJBQXlCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLE9BQU8sT0FBTyxDQUFDO09BQ2hCLENBQUM7TUFDRixNQUFNLHFCQUFxQixNQUFNO1FBQy9CLElBQUksZUFBZSxDQUFDO1FBQ3BCLElBQUksT0FBTyxHQUFHLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxJQUFJLElBQUksU0FBUyxLQUFLLE1BQU0sRUFBRTtVQUN2QyxJQUFJLElBQUksYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFO1lBQ3pDLGtCQUFrQixJQUFJLENBQUM7WUFDdkIsTUFBTTtXQUNQO1VBQ0QsT0FBTyxJQUFJLFdBQVcsQ0FBQztTQUN4QjtRQUNELE9BQU8sZUFBZSxDQUFDO09BQ3hCLENBQUM7TUFDRixNQUFNLGlCQUFpQixxQkFBcUI7UUFDMUMsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUU7VUFDdEIscUJBQXFCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUNoRCxNQUFNO1VBQ0wsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQ3JEO09BQ0YsQ0FBQztNQUNGLE1BQU0sZUFBZSxzQkFBc0IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ2hHLE1BQU0sd0JBQXdCLE1BQU07UUFDbEMsTUFBTSxNQUFNLFFBQVEsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sR0FBRyxVQUFVLEdBQUcsYUFBYSxlQUFlLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQztPQUM1RyxDQUFDO01BQ0YsTUFBTSxVQUFVLE1BQU07UUFDcEIsTUFBTSxnQkFBZ0IsZ0JBQWdCLElBQUksQ0FBQztRQUMzQyxnQkFBZ0IsUUFBUSxFQUFFLENBQUM7T0FDNUIsQ0FBQztNQUNGLE1BQU0sU0FBUyxDQUFDLFVBQVUsRUFBRSxNQUFNLE1BQU0sRUFBRSxLQUFLLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO01BQ25HLE1BQU0sVUFBVTtRQUNkLEdBQUc7UUFDSCxHQUFHO1FBQ0gsVUFBVTtRQUNWLE1BQU07UUFDTixNQUFNO1FBQ04sUUFBUTtRQUNSLGlCQUFpQjtRQUNqQixVQUFVO1FBQ1YsVUFBVTtRQUNWLFdBQVc7UUFDWCxjQUFjO1FBQ2QsUUFBUSxRQUFRO1FBQ2hCLFdBQVc7UUFDWCxVQUFVO1FBQ1YsU0FBUztRQUNULE9BQU87UUFDUCxTQUFTLFNBQVM7UUFDbEIsTUFBTTtRQUNOLE1BQU07UUFDTixRQUFRLFFBQVE7UUFDaEIsVUFBVSxVQUFVO1FBQ3BCLE1BQU07UUFDTixtQkFBbUIsbUJBQW1CO1FBQ3RDLFNBQVM7UUFDVCxlQUFlO1FBQ2YseUJBQXlCO1FBQ3pCLGtCQUFrQjtRQUNsQixjQUFjO1FBQ2QsWUFBWTtRQUNaLHFCQUFxQjtRQUNyQixPQUFPO09BQ1IsQ0FBQztNQUNGLE1BQU0sa0JBQWtCLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUNqRCxNQUFNLG1CQUFtQixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDM0QsT0FBTyxnQkFBZ0IsR0FBRyxlQUFlLENBQUM7TUFDMUMsT0FBTyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztNQUM1QyxPQUFPLE9BQU8sQ0FBQztLQUNoQixDQUFDOztJQUVGLE1BQU0sYUFBYSwrQkFBK0I7TUFDaEQsVUFBVSxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxpQkFBaUI7UUFDbEUsSUFBSSxJQUFJLEtBQUssT0FBTyxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxFQUFFLEVBQUU7VUFDVixNQUFNLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3RCLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7VUFDdEQsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3ZCO09BQ0YsQ0FBQyxDQUFDO01BQ0gsVUFBVSxtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUI7UUFDL0QsTUFBTSxlQUFlLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEMsTUFBTSxlQUFlLFFBQVEsY0FBYyxDQUFDO1FBQzVDLE1BQU0sb0JBQW9CLFFBQVEsb0JBQW9CLENBQUM7UUFDdkQsSUFBSSxJQUFJLEtBQUssT0FBTyxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxFQUFFLEVBQUU7VUFDVixNQUFNLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3RCLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztVQUNwQyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDdkIsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssT0FBTyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDakQsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1dBQy9CLE1BQU07WUFDTCxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hCLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRTtjQUNwQixRQUFRLEdBQUcsZUFBZSxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLENBQUM7YUFDOUQsTUFBTSxJQUFJLFlBQVksRUFBRTtjQUN2QixRQUFRLFlBQVksS0FBSyxDQUFDLGlCQUFpQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxLQUFLLENBQUMsQ0FBQzthQUN0RTtZQUNELElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLE9BQU8sR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO1dBQ2xEO1NBQ0Y7T0FDRixDQUFDLENBQUM7TUFDSCxVQUFVLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxTQUFTO1FBQzlDLElBQUksSUFBSSxLQUFLLE9BQU8sQ0FBQztRQUNyQixPQUFPLENBQUMsRUFBRSxFQUFFO1VBQ1YsTUFBTSxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUN0QixJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7VUFDL0IsSUFBSSxLQUFLLEVBQUU7WUFDVCxRQUFRLEtBQUssUUFBUSxDQUFDLDZCQUE2QixFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLE9BQU8sR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO1dBQ3JEO1NBQ0Y7T0FDRixDQUFDLENBQUM7TUFDSCxVQUFVLG1CQUFtQixDQUFDLGVBQWUsRUFBRSx1QkFBdUI7UUFDcEUsSUFBSSxJQUFJLEtBQUssT0FBTyxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxFQUFFLEVBQUU7VUFDVixNQUFNLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3RCLElBQUksSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQUssVUFBVSxJQUFJLENBQUMsSUFBSSxRQUFRLEVBQUU7WUFDOUQsTUFBTSxjQUFjLFFBQVEsS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxjQUFjO2NBQ3RFLElBQUksRUFBRSxDQUFDO2NBQ1AsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssVUFBVSxNQUFNLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7YUFDL0UsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxXQUFXLEVBQUU7Y0FDZixJQUFJLE9BQU8sRUFBRSxDQUFDO2FBQ2YsTUFBTTtjQUNMLElBQUksT0FBTyxFQUFFLENBQUM7YUFDZjtXQUNGO1NBQ0Y7T0FDRixDQUFDLENBQUM7TUFDSCxVQUFVLGNBQWMsQ0FBQyxVQUFVLEVBQUUsU0FBUztRQUM1QyxJQUFJLEVBQUUsQ0FBQztRQUNQLElBQUksSUFBSSxLQUFLLE9BQU8sQ0FBQztRQUNyQixPQUFPLENBQUMsRUFBRSxFQUFFO1VBQ1YsTUFBTSxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1VBQ2pDLElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxNQUFNLEdBQUcsUUFBUSxPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1dBQ3JGO1NBQ0Y7T0FDRixDQUFDLENBQUM7TUFDSCxVQUFVLGNBQWMsQ0FBQyxjQUFjLEVBQUUsaUJBQWlCO1FBQ3hELElBQUksRUFBRSxDQUFDO1FBQ1AsTUFBTSxPQUFPLFNBQVM7VUFDcEIsT0FBTyxLQUFLLFFBQVEsQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMseUhBQXlILEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQywyR0FBMkcsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUMxVixDQUFDO1FBQ0YsSUFBSSxJQUFJLEtBQUssT0FBTyxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxFQUFFLEVBQUU7VUFDVixNQUFNLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3RCLE1BQU0sYUFBYSxJQUFJLFdBQVcsQ0FBQztVQUNuQyxNQUFNLFFBQVEsQ0FBQyxLQUFLLFVBQVUsS0FBSyxJQUFJLElBQUksVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLFVBQVUsTUFBTSxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztVQUNsSSxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDckIsTUFBTSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9CLElBQUksSUFBSSxFQUFFO2NBQ1IsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksS0FBSyxhQUFhLEdBQUcsSUFBSSxHQUFHLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQy9FO1lBQ0QsSUFBSSxRQUFRLGVBQWUsS0FBSyxPQUFPLElBQUksVUFBVSxJQUFJLEtBQUssT0FBTyxHQUFHLENBQUMsRUFBRTtjQUN6RSxVQUFVLE1BQU0sR0FBRyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDO2FBQ2hFO1dBQ0YsTUFBTTtZQUNMLElBQUksUUFBUSxlQUFlLEtBQUssT0FBTyxJQUFJLFVBQVUsSUFBSSxLQUFLLE9BQU8sR0FBRyxDQUFDLEVBQUU7Y0FDekUsVUFBVSxNQUFNLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUM7YUFDckQ7V0FDRjtTQUNGO09BQ0YsQ0FBQyxDQUFDO01BQ0gsVUFBVSxjQUFjLENBQUMsVUFBVSxFQUFFLFNBQVM7UUFDNUMsSUFBSSxJQUFJLEtBQUssT0FBTyxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxFQUFFLEVBQUU7VUFDVixNQUFNLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3RCLE1BQU0sUUFBUSxJQUFJLE1BQU0sQ0FBQztVQUN6QixJQUFJLFFBQVEsZUFBZSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzdHLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQztZQUNyQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDZCxJQUFJLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1dBQ2pFLE1BQU0sSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2hHLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQztZQUNwQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDZCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7WUFDaEIsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7V0FDekM7U0FDRjtPQUNGLENBQUMsQ0FBQztNQUNILFVBQVUsY0FBYyxDQUFDLHFCQUFxQixFQUFFLGlCQUFpQjtRQUMvRCxJQUFJLElBQUksS0FBSyxPQUFPLENBQUM7UUFDckIsT0FBTyxDQUFDLEVBQUUsRUFBRTtVQUNWLE1BQU0sT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDdEIsSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7WUFDbkIsSUFBSSxPQUFPLEVBQUUsQ0FBQztXQUNmLE1BQU0sSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxJQUFJLEtBQUssT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7Y0FDMUMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQzNCO1dBQ0Y7U0FDRjtPQUNGLENBQUMsQ0FBQztNQUNILFVBQVUsbUJBQW1CLENBQUMsZUFBZSxFQUFFLFNBQVM7UUFDdEQsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRO1VBQ3BCLElBQUksSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQUssY0FBYyxFQUFFO1lBQ2pELElBQUksSUFBSSxRQUFRLENBQUMsVUFBVSxPQUFPLG9CQUFvQixFQUFFLENBQUMsRUFBRTtjQUN6RCxJQUFJLE9BQU8sRUFBRSxDQUFDO2FBQ2YsTUFBTTtjQUNMLElBQUksT0FBTyxFQUFFLENBQUM7YUFDZjtXQUNGO1NBQ0YsQ0FBQyxDQUFDO09BQ0osQ0FBQyxDQUFDO01BQ0gsVUFBVSxtQkFBbUIsQ0FBQyw0Q0FBNEMsR0FBRyxvREFBb0QsR0FBRyxvREFBb0QsRUFBRSxpQkFBaUI7UUFDek0sSUFBSSxJQUFJLEtBQUssT0FBTyxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxFQUFFLEVBQUU7VUFDVixLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDM0I7T0FDRixDQUFDLENBQUM7TUFDSCxJQUFJLFFBQVEsb0JBQW9CLEVBQUU7UUFDaEMsYUFBYSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxPQUFPLENBQUMsQ0FBQztPQUN4RDtLQUNGLENBQUM7SUFDRixNQUFNLGlCQUFpQixZQUFZO01BQ2pDLE1BQU0sT0FBTyxRQUFRO1FBQ25CLE9BQU8sQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLEtBQUssTUFBTSxJQUFJLENBQUM7T0FDekUsQ0FBQztNQUNGLE1BQU0sVUFBVSxRQUFRLFVBQVUsQ0FBQztNQUNuQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNqQixNQUFNLFVBQVUsT0FBTyxLQUFLLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7VUFDakIsT0FBTyxPQUFPLEVBQUUsQ0FBQztVQUNqQixPQUFPLE9BQU8sRUFBRSxDQUFDO1NBQ2xCO09BQ0Y7S0FDRixDQUFDOztJQUVGLE1BQU0sZUFBZSx3QkFBd0I7TUFDM0MsSUFBSSxNQUFNLENBQUM7TUFDWCxNQUFNLE1BQU0sTUFBTSxJQUFJLENBQUM7TUFDdkIsSUFBSSxhQUFhLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3RDLE1BQU0sT0FBTyxRQUFRLGVBQWUsQ0FBQztNQUNyQyxJQUFJLElBQUksbUJBQW1CLEVBQUU7UUFDM0IsTUFBTSxNQUFNLElBQUksbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEMsS0FBSyxLQUFLLENBQUMsVUFBVSxTQUFTLEtBQUssTUFBTSxHQUFHLFVBQVUsV0FBVyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUTtVQUN4RixHQUFHLEtBQUssWUFBWSxDQUFDLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ2xELENBQUMsQ0FBQztRQUNILElBQUksVUFBVSxTQUFTLEtBQUssTUFBTSxFQUFFO1VBQ2xDLGFBQWEsR0FBRyxLQUFLLFdBQVcsQ0FBQztTQUNsQyxNQUFNO1VBQ0wsYUFBYSxHQUFHLEtBQUssQ0FBQztTQUN2QjtRQUNELFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO09BQ2Y7TUFDRCxjQUFjLENBQUMsTUFBTSxFQUFFO1FBQ3JCLEdBQUcsSUFBSTtRQUNQLE1BQU0sVUFBVTtPQUNqQixDQUFDLENBQUM7TUFDSCxJQUFJLE1BQU0sRUFBRTtRQUNWLEdBQUcsSUFBSSxHQUFHLE1BQU0sQ0FBQztPQUNsQjtNQUNELE9BQU8sVUFBVSxDQUFDO0tBQ25CLENBQUM7SUFDRixNQUFNLGtCQUFrQixrQkFBa0I7TUFDeEMsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDO0tBQzNGLENBQUM7SUFDRixNQUFNLFlBQVksd0JBQXdCO01BQ3hDLE9BQU8sZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7S0FDaEYsQ0FBQzs7SUFFRixNQUFNLGNBQWMsaUNBQWlDO01BQ25ELElBQUksS0FBSyxRQUFRLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQ3pDLFVBQVUsbUJBQW1CLENBQUMsSUFBSSxFQUFFLGlCQUFpQjtVQUNuRCxJQUFJLElBQUksS0FBSyxPQUFPLENBQUM7VUFDckIsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUNWLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztXQUMzQjtTQUNGLENBQUMsQ0FBQztRQUNILFNBQVMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ3RCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sY0FBYywyQkFBMkI7TUFDN0MsSUFBSSxDQUFDLElBQUksVUFBVSxJQUFJLE1BQU0sRUFBRTtRQUM3QixNQUFNLFVBQVUsZUFBZSxDQUFDLE1BQU0sRUFBRTtVQUN0QyxHQUFHLElBQUk7VUFDUCxPQUFPO1NBQ1IsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLFFBQVEsQ0FBQztPQUN4QixNQUFNO1FBQ0wsT0FBTyxPQUFPLENBQUM7T0FDaEI7S0FDRixDQUFDO0lBQ0YsTUFBTSxrQkFBa0IscUJBQXFCO01BQzNDLE1BQU0sT0FBTyxNQUFNLENBQUMsSUFBSSxTQUFTLEdBQUcsSUFBSSxVQUFVLEdBQUcsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUM3RSxPQUFPLElBQUksVUFBVSxJQUFJLG1CQUFtQixDQUFDLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3BHLENBQUM7SUFDRixNQUFNLFlBQVksNEJBQTRCO01BQzVDLE1BQU0sYUFBYSxJQUFJLFVBQVUsR0FBRztRQUNsQyxtQkFBbUIsS0FBSztRQUN4QixHQUFHLElBQUk7T0FDUixHQUFHLElBQUksQ0FBQztNQUNULE1BQU0sV0FBVyxVQUFVLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7TUFDcEQsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQ3pCLE9BQU8sUUFBUSxDQUFDO0tBQ2pCLENBQUM7SUFDRixNQUFNLGdCQUFnQiw0QkFBNEI7TUFDaEQsTUFBTSxpQkFBaUIsY0FBYyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztNQUN4RCxPQUFPLGNBQWMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3ZDLENBQUM7SUFDRixNQUFNLFNBQVMsOENBQThDO01BQzNELE1BQU0sVUFBVSxhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztNQUMxRCxPQUFPLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQzNDLENBQUM7SUFDRixNQUFNLG9CQUFvQixzQkFBc0I7TUFDOUMsTUFBTSxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQztNQUN4QyxNQUFNLG9CQUFvQjtRQUN4QixpQkFBaUIsT0FBTztRQUN4QixxQkFBcUIsSUFBSTtRQUN6QixtQkFBbUIsS0FBSztRQUN4QixHQUFHLFFBQVE7T0FDWixDQUFDO01BQ0YsTUFBTSxNQUFNLE1BQU0sSUFBSSxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksR0FBRyxRQUFRLElBQUksQ0FBQztNQUM3RCxNQUFNLFNBQVMsTUFBTSxJQUFJLE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO01BQ25GLE1BQU0sYUFBYSxTQUFTLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDeEQsVUFBVSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLENBQUMsQ0FBQztNQUMvQyxNQUFNLFlBQVksT0FBTyxhQUFhLEVBQUUsS0FBSztRQUMzQyxNQUFNLE9BQU87VUFDWCxRQUFRLE1BQU07VUFDZCxHQUFHLFVBQVU7U0FDZCxDQUFDO1FBQ0YsTUFBTSxhQUFhLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pELE1BQU0sT0FBTyxlQUFlLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRCxNQUFNLFdBQVcsU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkQsT0FBTyxJQUFJLE9BQU8sS0FBSyxNQUFNLEdBQUcsUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUN0RyxDQUFDO01BQ0YsT0FBTztRQUNMLE1BQU07UUFDTixlQUFlLFVBQVUsY0FBYztRQUN2QyxvQkFBb0IsVUFBVSxtQkFBbUI7UUFDakQsV0FBVyxTQUFTO1FBQ3BCLFVBQVUsTUFBTSxpQkFBaUI7UUFDakMsVUFBVSxNQUFNLGlCQUFpQjtRQUNqQyxhQUFhLEtBQUssQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQztRQUN0RCxjQUFjLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDakMsZ0JBQWdCLFVBQVUsZUFBZTtRQUN6QyxxQkFBcUIsVUFBVSxvQkFBb0I7UUFDbkQsa0JBQWtCLFVBQVUsaUJBQWlCO1FBQzdDLHVCQUF1QixVQUFVLHNCQUFzQjtPQUN4RCxDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLGdCQUFnQixzQkFBc0I7TUFDMUMsTUFBTSxnQkFBZ0IsaUJBQWlCLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQzFELE9BQU87UUFDTCxRQUFRLGFBQWEsT0FBTztRQUM1QixlQUFlLGFBQWEsY0FBYztRQUMxQyxvQkFBb0IsYUFBYSxtQkFBbUI7UUFDcEQsV0FBVyxhQUFhLFVBQVU7UUFDbEMsVUFBVSxhQUFhLFNBQVM7UUFDaEMsVUFBVSxhQUFhLFNBQVM7UUFDaEMsYUFBYSxhQUFhLFlBQVk7UUFDdEMsY0FBYyxhQUFhLGFBQWE7UUFDeEMsZ0JBQWdCLGFBQWEsZUFBZTtRQUM1QyxxQkFBcUIsYUFBYSxvQkFBb0I7UUFDdEQsa0JBQWtCLGFBQWEsaUJBQWlCO1FBQ2hELHVCQUF1QixhQUFhLHNCQUFzQjtPQUMzRCxDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLGtCQUFrQixNQUFNLENBQUM7SUFDL0IsTUFBTSxjQUFjLG1CQUFtQjtNQUNyQyxHQUFHLElBQUk7TUFDUCxNQUFNO01BQ04sS0FBSyxJQUFJO01BQ1QsVUFBVSxJQUFJO0tBQ2YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxhQUFhLFNBQVMsT0FBTyxFQUFFLEtBQUs7TUFDeEMsTUFBTSxTQUFTLElBQUksT0FBTyxHQUFHLElBQUksT0FBTyxHQUFHLGVBQWUsQ0FBQztNQUMzRCxNQUFNLGdCQUFnQixXQUFXLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ2hELE9BQU8sb0JBQW9CLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLGVBQWU7UUFDL0UsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbEQsT0FBTyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO09BQzVELENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxnQkFBZ0IsTUFBTSxDQUFDO0lBQzdCLE1BQU0sWUFBWSxvQkFBb0I7TUFDcEMsUUFBUSxhQUFhO01BQ3JCLEdBQUcsSUFBSTtNQUNQLEtBQUssSUFBSTtNQUNULE9BQU87S0FDUixDQUFDLENBQUM7SUFDSCxNQUFNLGFBQWEsa0JBQWtCLE9BQU8sRUFBRSxLQUFLO01BQ2pELE1BQU0sZ0JBQWdCLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDL0MsT0FBTyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlO1FBQ3BFLE1BQU0sU0FBUyxZQUFZLENBQUMsTUFBTSxFQUFFLFdBQVcsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3RFLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxNQUFNLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN4RCxPQUFPLE1BQU0sUUFBUSxDQUFDO09BQ3ZCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ25CLENBQUM7O0lBRUYsTUFBTSxpQkFBaUIsQ0FBQyw4RUFBOEUsR0FBRyx5SEFBeUgsR0FBRyx3SUFBd0ksR0FBRyw2SEFBNkgsR0FBRyxnSkFBZ0osR0FBRyxzSUFBc0ksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3R4QixNQUFNLG9CQUFvQiwrTEFBK0wsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JPLE1BQU0saUJBQWlCLDZFQUE2RSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEgsTUFBTSxvQkFBb0I7TUFDeEI7UUFDRSxNQUFNLFVBQVU7UUFDaEIsY0FBYyxtQkFBbUI7T0FDbEM7TUFDRCxFQUFFLE1BQU0sS0FBSyxFQUFFO0tBQ2hCLENBQUM7SUFDRixNQUFNLHFCQUFxQiwyQkFBMkI7TUFDcEQsTUFBTSxlQUFlLFFBQVEsQ0FBQyxZQUFZLEVBQUUsV0FBVyxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7TUFDaEYsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDM0IsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLFdBQVc7TUFDbkMsTUFBTSxlQUFlLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztNQUNqRSxNQUFNLGtCQUFrQixPQUFPLGtCQUFrQixDQUFDO01BQ2xELElBQUksZUFBZSxLQUFLLEtBQUssSUFBSSxlQUFlLEtBQUssRUFBRSxFQUFFO1FBQ3ZELFlBQVksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7T0FDckQ7TUFDRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUMzQixDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsV0FBVyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUN2RixNQUFNLHFCQUFxQiwyQkFBMkI7TUFDcEQsTUFBTSxVQUFVLEtBQUssUUFBUSxDQUFDLE9BQU8sUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQ3BELE1BQU0sWUFBWSxVQUFVLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDbkQsTUFBTSxjQUFjLFFBQVEsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7TUFDdEQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDMUIsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLFdBQVcsa0JBQWtCLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ2pGLE1BQU0sdUJBQXVCLFdBQVcsa0JBQWtCLENBQUMsT0FBTyxFQUFFLGlCQUFpQixJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEgsTUFBTSxxQkFBcUIsbUNBQW1DO01BQzVELE1BQU0saUJBQWlCLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO01BQ3JELE1BQU0saUJBQWlCLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLENBQUM7TUFDNUQsTUFBTSxvQkFBb0IsY0FBYyxPQUFPLEdBQUcsQ0FBQyxDQUFDO01BQ3BELE1BQU0sb0JBQW9CLGNBQWMsT0FBTyxHQUFHLENBQUMsQ0FBQztNQUNwRCxNQUFNLHNCQUFzQixpQkFBaUIsTUFBTSxLQUFLLFFBQVEsQ0FBQztNQUNqRSxJQUFJLGlCQUFpQixJQUFJLGlCQUFpQixJQUFJLG1CQUFtQixFQUFFO1FBQ2pFLE1BQU0sYUFBYSxNQUFNLENBQUM7UUFDMUIsTUFBTSxnQkFBZ0IsbUJBQW1CLEdBQUcsQ0FBQyxXQUFXLEdBQUcsVUFBVSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNwRixNQUFNLGlCQUFpQixpQkFBaUIsR0FBRyxDQUFDLFlBQVksR0FBRyxVQUFVLEVBQUUsR0FBRyxjQUFjLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xILE1BQU0saUJBQWlCLGlCQUFpQixHQUFHLENBQUMsWUFBWSxHQUFHLFVBQVUsRUFBRSxHQUFHLGNBQWMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEgsT0FBTyxLQUFLLENBQUMseUxBQXlMLEdBQUcsb0ZBQW9GLEdBQUcsYUFBYSxHQUFHLGNBQWMsR0FBRyxjQUFjLENBQUMsQ0FBQztPQUNsVjtLQUNGLENBQUM7SUFDRixNQUFNLHVCQUF1QixRQUFRLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLEtBQUssS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLEVBQUUsU0FBUztNQUNySCxJQUFJLEtBQUssYUFBYSxFQUFFO1FBQ3RCLE9BQU8sQ0FBQyxHQUFHLElBQUksRUFBRSxjQUFjLEdBQUcsS0FBSyxhQUFhLEVBQUUsQ0FBQyxDQUFDO09BQ3pELE1BQU07UUFDTCxPQUFPLElBQUksQ0FBQztPQUNiO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSx3QkFBd0IsbUNBQW1DO01BQy9ELE1BQU0sb0JBQW9CLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO01BQzNELE1BQU0sb0JBQW9CLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLENBQUM7TUFDbEUsTUFBTSx1QkFBdUIsaUJBQWlCLE9BQU8sR0FBRyxDQUFDLENBQUM7TUFDMUQsTUFBTSx1QkFBdUIsaUJBQWlCLE9BQU8sR0FBRyxDQUFDLENBQUM7TUFDMUQsSUFBSSxvQkFBb0IsSUFBSSxvQkFBb0IsRUFBRTtRQUNoRCxNQUFNLGFBQWEsTUFBTSxDQUFDO1FBQzFCLE1BQU0saUJBQWlCLG9CQUFvQixHQUFHLENBQUMsWUFBWSxHQUFHLFVBQVUsRUFBRSxHQUFHLGlCQUFpQixJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEosTUFBTSxpQkFBaUIsb0JBQW9CLEdBQUcsQ0FBQyxZQUFZLEdBQUcsVUFBVSxFQUFFLEdBQUcsaUJBQWlCLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hILE9BQU8sS0FBSyxDQUFDLG1GQUFtRixHQUFHLGNBQWMsR0FBRyxjQUFjLENBQUMsQ0FBQztPQUNySTtLQUNGLENBQUM7SUFDRixNQUFNLGNBQWMsbUNBQW1DO01BQ3JELGtCQUFrQixDQUFDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO01BQ2xELHFCQUFxQixDQUFDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0tBQ3RELENBQUM7O0lBRUYsTUFBTSxRQUFRLFFBQVEsSUFBSSxDQUFDO0lBQzNCLE1BQU0sd0JBQXdCLFVBQVU7TUFDdEMsS0FBSyxTQUFTLENBQUMsTUFBTSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDLENBQUM7S0FDekQsQ0FBQztJQUNGLE1BQU0sY0FBYyxLQUFLLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDakUsTUFBTSxxQkFBcUIsVUFBVTtNQUNuQyxNQUFNLEtBQUssTUFBTSxDQUFDO01BQ2xCLEVBQUUscUJBQXFCLEdBQUcsRUFBRSxZQUFZLEdBQUcsRUFBRSxVQUFVLEdBQUcsRUFBRSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7TUFDcEYsRUFBRSxZQUFZLEdBQUcsRUFBRSxnQkFBZ0IsR0FBRyxFQUFFLGNBQWMsR0FBRyxJQUFJLENBQUM7TUFDOUQsRUFBRSxjQUFjLEdBQUcsRUFBRSxVQUFVLEdBQUcsSUFBSSxDQUFDO01BQ3ZDLE1BQU0sWUFBWSxNQUFNLFVBQVUsQ0FBQztNQUNuQyxJQUFJLFNBQVMsRUFBRTtRQUNiLE1BQU0sTUFBTSxTQUFTLElBQUksQ0FBQztRQUMxQixFQUFFLFVBQVUsR0FBRyxTQUFTLElBQUksR0FBRyxTQUFTLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7T0FDL0Q7S0FDRixDQUFDO0lBQ0YsTUFBTSxjQUFjLFVBQVU7TUFDNUIsTUFBTSxPQUFPLE1BQU0sWUFBWSxDQUFDO01BQ2hDLElBQUksSUFBSSxFQUFFO1FBQ1IsSUFBSSxJQUFJLGNBQWMsRUFBRTtVQUN0QixJQUFJLE9BQU8sR0FBRyxJQUFJLGNBQWMsQ0FBQztVQUNqQyxPQUFPLElBQUksY0FBYyxDQUFDO1NBQzNCO1FBQ0QsS0FBSyxPQUFPLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDLENBQUM7T0FDOUQ7S0FDRixDQUFDO0lBQ0YsTUFBTSxXQUFXLFVBQVU7TUFDekIsSUFBSSxDQUFDLE1BQU0sUUFBUSxFQUFFO1FBQ25CLE1BQU0sbUNBQW1DLEdBQUcsTUFBTSxDQUFDO1FBQ25ELE1BQU0sT0FBTyxNQUFNLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE1BQU0sVUFBVSxNQUFNLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLElBQUksSUFBSSxFQUFFO1VBQ1IsTUFBTSxLQUFLLENBQUMsRUFBRSxhQUFhLElBQUksRUFBRSxDQUFDLENBQUM7U0FDcEM7UUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDdEIsTUFBTSxzQkFBc0IsRUFBRSxDQUFDO1FBQy9CLElBQUksTUFBTSxlQUFlLElBQUksYUFBYSxDQUFDLE9BQU8sS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLE9BQU8sWUFBWSxDQUFDLEVBQUU7VUFDakgsS0FBSyxPQUFPLENBQUMsT0FBTyxZQUFZLENBQUMsQ0FBQztTQUNuQztRQUNELFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQixNQUFNLGNBQWMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxNQUFNLE9BQU8sSUFBSSxJQUFJLEVBQUU7VUFDMUIscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDL0I7UUFDRCxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkIsS0FBSyxPQUFPLENBQUMsTUFBTSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2pDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxQixNQUFNLFFBQVEsRUFBRSxDQUFDO09BQ2xCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sVUFBVSx1QkFBdUI7TUFDckMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7TUFDaEMsSUFBSSxNQUFNLFVBQVUsRUFBRTtRQUNwQixPQUFPO09BQ1I7TUFDRCxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsTUFBTSxRQUFRLEVBQUU7UUFDakMsTUFBTSxPQUFPLEVBQUUsQ0FBQztRQUNoQixPQUFPO09BQ1I7TUFDRCxJQUFJLENBQUMsU0FBUyxFQUFFO1FBQ2QsTUFBTSxjQUFjLElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUMsQ0FBQztRQUMvRCxJQUFJLE1BQU0sTUFBTSxJQUFJLE1BQU0sTUFBTSxRQUFRLEVBQUU7VUFDeEMsTUFBTSxNQUFNLFFBQVEsRUFBRSxDQUFDO1NBQ3hCO1FBQ0QsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZCLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUNsQjtNQUNELFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNwQixrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUMzQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUM7S0FDekIsQ0FBQzs7SUFFRixNQUFNLG9CQUFvQixNQUFNO01BQzlCLE1BQU0sU0FBUyxFQUFFLENBQUM7TUFDbEIsTUFBTSxNQUFNLGtCQUFrQjtRQUM1QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDO09BQ3ZCLENBQUM7TUFDRixNQUFNLE1BQU0sTUFBTTtRQUNoQixJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRTtVQUNkLE9BQU8sTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ25CLE1BQU07VUFDTCxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQztTQUN0QjtPQUNGLENBQUM7TUFDRixNQUFNLE1BQU0sTUFBTSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO01BQ3BDLE9BQU87UUFDTCxHQUFHO1FBQ0gsR0FBRztRQUNILEdBQUc7T0FDSixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sY0FBYyxpQkFBaUIsRUFBRSxDQUFDOztJQUV4QyxNQUFNLGVBQWUsWUFBWSxhQUFhLENBQUM7O0lBRS9DLE1BQU0sVUFBVSxtQkFBbUI7TUFDakMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDO01BQ3ZCLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3pCLENBQUM7SUFDRixNQUFNLHNCQUFzQixtQkFBbUIsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEYsTUFBTSxpQkFBaUIsS0FBSyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNyRCxNQUFNLGtCQUFrQixLQUFLLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sZUFBZSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDOUQsTUFBTSxnQkFBZ0IsS0FBSyxDQUFDLG1CQUFtQixFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sd0JBQXdCLE9BQU8sR0FBRyxJQUFJLHNCQUFzQixFQUFFLENBQUM7SUFDckUsTUFBTSw2QkFBNkIsK0JBQStCO01BQ2hFLE1BQU0sY0FBYyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDNUMsTUFBTSxlQUFlLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUM5QyxPQUFPLE9BQU8sSUFBSSxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxPQUFPLElBQUksV0FBVyxJQUFJLE9BQU8sSUFBSSxZQUFZLENBQUM7S0FDMUYsQ0FBQztJQUNGLE1BQU0sWUFBWSxtQ0FBbUM7TUFDbkQsTUFBTSxhQUFhLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQzlDLE1BQU0sU0FBUyxNQUFNLEdBQUcsVUFBVSxLQUFLLEdBQUcsR0FBRyxJQUFJLFdBQVcsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ3RGLE1BQU0sU0FBUyxNQUFNLEdBQUcsVUFBVSxJQUFJLEdBQUcsR0FBRyxJQUFJLFVBQVUsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ25GLE1BQU0sSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDO01BQzNCLE1BQU0sSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDO01BQzNCLE9BQU87UUFDTCxDQUFDO1FBQ0QsQ0FBQztPQUNGLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsOEJBQThCO01BQ3RELE1BQU0sVUFBVSxZQUFZLFFBQVEsQ0FBQyxNQUFNLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDdkQsTUFBTSxZQUFZLE1BQU0sT0FBTyxHQUFHLE9BQU8sR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDckUsTUFBTSxrQkFBa0IsU0FBUyxDQUFDLE1BQU0sT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDOUUsT0FBTywwQkFBMEIsQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztLQUNwRixDQUFDO0lBQ0YsTUFBTSxjQUFjLFFBQVEsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLFFBQVEsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sd0JBQXdCLFVBQVU7TUFDdEMsTUFBTSxlQUFlLE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxFQUFFLEdBQUcsTUFBTSx3QkFBd0IsRUFBRSxDQUFDO01BQ3pGLE9BQU8sV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUMzRCxDQUFDOztJQUVGLElBQUksMEJBQTBCLE1BQU07TUFDbEMsTUFBTSxnQkFBZ0IsTUFBTTtRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7T0FDaEYsQ0FBQztNQUNGLE9BQU87UUFDTCxNQUFNLGFBQWE7UUFDbkIsT0FBTyxhQUFhO1FBQ3BCLFNBQVMsYUFBYTtPQUN2QixDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLHNCQUFzQixVQUFVO01BQ3BDLE1BQU0sZ0JBQWdCLEVBQUUsQ0FBQztNQUN6QixNQUFNLG9CQUFvQixNQUFNO1FBQzlCLE1BQU0sUUFBUSxNQUFNLE1BQU0sQ0FBQztRQUMzQixPQUFPLEtBQUssSUFBSSxLQUFLLDJCQUEyQixHQUFHLEtBQUssMkJBQTJCLEVBQUUsR0FBRyx1QkFBdUIsRUFBRSxDQUFDO09BQ25ILENBQUM7TUFDRixNQUFNLHFCQUFxQixNQUFNO1FBQy9CLE9BQU8sUUFBUSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDeEMsQ0FBQztNQUNGLE1BQU0sVUFBVSxVQUFVO1FBQ3hCLE9BQU8sQ0FBQyxLQUFLLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQztPQUMvRyxDQUFDO01BQ0YsTUFBTSxhQUFhLE1BQU07UUFDdkIsTUFBTSxDQUFDLGFBQWEsRUFBRSxnQkFBZ0I7VUFDcEMsWUFBWSxXQUFXLEVBQUUsQ0FBQztTQUMzQixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxrQkFBa0IsZ0JBQWdCO1FBQ3RDLGFBQWEsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO09BQ2xDLENBQUM7TUFDRixNQUFNLG9CQUFvQixnQkFBZ0I7UUFDeEMsV0FBVyxDQUFDLGFBQWEsRUFBRSxxQkFBcUI7VUFDOUMsT0FBTyxpQkFBaUIsS0FBSyxZQUFZLENBQUM7U0FDM0MsQ0FBQyxLQUFLLENBQUMsU0FBUztVQUNmLGFBQWEsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNoQyxDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxPQUFPLE9BQU8sWUFBWSxJQUFJLEtBQUs7UUFDdkMsSUFBSSxNQUFNLFFBQVEsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1VBQ3BELE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxJQUFJLFNBQVMsRUFBRTtVQUNiLE1BQU0sU0FBUyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ25FO1FBQ0QsT0FBTyxNQUFNLENBQUMsYUFBYSxFQUFFLGdCQUFnQjtVQUMzQyxPQUFPLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDakUsQ0FBQyxXQUFXLENBQUMsTUFBTTtVQUNsQixNQUFNLGNBQWMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1VBQ3ZDLE1BQU0sZUFBZSxpQkFBaUIsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU07WUFDeEQsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDaEMsVUFBVSxFQUFFLENBQUM7WUFDYixrQkFBa0IsRUFBRSxLQUFLLENBQUMsTUFBTSxNQUFNLE1BQU0sRUFBRSxFQUFFLE9BQU8sT0FBTyxDQUFDLFlBQVksUUFBUSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDcEcsQ0FBQyxDQUFDO1VBQ0gsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1VBQzlCLFVBQVUsRUFBRSxDQUFDO1VBQ2IsTUFBTSxTQUFTLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxjQUFjLEVBQUUsR0FBRyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7VUFDM0UsT0FBTyxZQUFZLENBQUM7U0FDckIsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sUUFBUSxNQUFNO1FBQ2xCLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7VUFDeEMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1VBQ3hDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO1VBQ2hDLFVBQVUsRUFBRSxDQUFDO1NBQ2QsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sbUJBQW1CLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztNQUNqRCxNQUFNLGlCQUFpQixVQUFVO1FBQy9CLE1BQU0sR0FBRyxDQUFDLFlBQVksRUFBRSxNQUFNO1VBQzVCLE1BQU0saUJBQWlCLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1VBQ2pELElBQUksY0FBYyxFQUFFO1lBQ2xCLElBQUksQ0FBQztjQUNILE1BQU0sY0FBYztjQUNwQixNQUFNLFNBQVM7Y0FDZixTQUFTLENBQUM7YUFDWCxFQUFFLEtBQUssQ0FBQyxDQUFDO1dBQ1g7VUFDRCxVQUFVLEVBQUUsQ0FBQztTQUNkLENBQUMsQ0FBQztRQUNILE1BQU0sR0FBRyxDQUFDLDJDQUEyQyxFQUFFLE1BQU07VUFDM0QscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDbkMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU07VUFDeEIsTUFBTSxDQUFDLGFBQWEsTUFBTSxFQUFFLEVBQUUsZ0JBQWdCO1lBQzVDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztXQUN6QyxDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3ZCLE9BQU87UUFDTCxJQUFJO1FBQ0osS0FBSztRQUNMLGdCQUFnQjtPQUNqQixDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLGdCQUFnQixZQUFZLGNBQWMsQ0FBQzs7SUFFakQsTUFBTSxlQUFlLFlBQVksYUFBYSxDQUFDOztJQUUvQyxJQUFJLG9CQUFvQixNQUFNO01BQzVCLE1BQU0sZ0JBQWdCLE1BQU07UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO09BQzFFLENBQUM7TUFDRixPQUFPO1FBQ0wsTUFBTSxhQUFhO1FBQ25CLFNBQVMsYUFBYTtRQUN0QixPQUFPLGFBQWE7UUFDcEIsU0FBUyxhQUFhO1FBQ3RCLE9BQU8sYUFBYTtPQUNyQixDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLGdCQUFnQixVQUFVO01BQzlCLElBQUksVUFBVSxFQUFFLENBQUM7TUFDakIsTUFBTSxvQkFBb0IsTUFBTTtRQUM5QixNQUFNLFFBQVEsTUFBTSxNQUFNLENBQUM7UUFDM0IsT0FBTyxLQUFLLElBQUksS0FBSyxxQkFBcUIsR0FBRyxLQUFLLHFCQUFxQixFQUFFLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQztPQUNqRyxDQUFDO01BQ0YsTUFBTSxXQUFXLGNBQWM7UUFDN0IsT0FBTyxDQUFDLE9BQU8sS0FBSztVQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO1NBQzdDLENBQUM7T0FDSCxDQUFDO01BQ0YsTUFBTSxnQkFBZ0IsVUFBVTtRQUM5QixNQUFNLFNBQVMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO09BQzNDLENBQUM7TUFDRixNQUFNLGlCQUFpQixVQUFVO1FBQy9CLE1BQU0sU0FBUyxDQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7T0FDNUMsQ0FBQztNQUNGLE1BQU0sWUFBWSxVQUFVO1FBQzFCLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JCLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUN2QixDQUFDO01BQ0YsTUFBTSxjQUFjLFVBQVU7UUFDNUIsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZCLFVBQVUsUUFBUSxDQUFDLE9BQU8sRUFBRSxlQUFlO1VBQ3pDLE9BQU8sV0FBVyxLQUFLLE1BQU0sQ0FBQztTQUMvQixDQUFDLENBQUM7UUFDSCxJQUFJLE9BQU8sT0FBTyxLQUFLLENBQUMsRUFBRTtVQUN4QixNQUFNLE1BQU0sRUFBRSxDQUFDO1NBQ2hCO09BQ0YsQ0FBQztNQUNGLE1BQU0sZUFBZSxNQUFNO1FBQ3pCLE9BQU8sUUFBUSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDbkQsQ0FBQztNQUNGLE1BQU0sOEJBQThCLGNBQWM7UUFDaEQsTUFBTSxjQUFjLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDZCxNQUFNLEdBQUcsS0FBSyxFQUFFLENBQUM7UUFDakIsTUFBTSxTQUFTLFVBQVUsRUFBRSxDQUFDO1FBQzVCLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQixPQUFPLE1BQU0sQ0FBQztPQUNmLENBQUM7TUFDRixNQUFNLE9BQU8sa0JBQWtCO1FBQzdCLE9BQU8sMkJBQTJCLENBQUMsTUFBTSxpQkFBaUIsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO09BQy9GLENBQUM7TUFDRixNQUFNLFVBQVUsUUFBUTtRQUN0QixPQUFPLDJCQUEyQixDQUFDLE1BQU0saUJBQWlCLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO09BQzFGLENBQUM7TUFDRixNQUFNLFFBQVEsOEJBQThCO1FBQzFDLE1BQU0sb0JBQW9CLGlCQUFpQixFQUFFLENBQUM7UUFDOUMsaUJBQWlCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztPQUN6RixDQUFDO01BQ0YsTUFBTSxVQUFVLDhCQUE4QjtRQUM1QyxNQUFNLG9CQUFvQixpQkFBaUIsRUFBRSxDQUFDO1FBQzlDLGlCQUFpQixRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7T0FDM0YsQ0FBQztNQUNGLE1BQU0sUUFBUSxNQUFNO1FBQ2xCLFlBQVksRUFBRSxLQUFLLENBQUMsVUFBVTtVQUM1QixpQkFBaUIsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7VUFDbEMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JCLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTTtRQUN4QixNQUFNLENBQUMsT0FBTyxFQUFFLFVBQVU7VUFDeEIsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ25DLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztNQUNILE9BQU87UUFDTCxJQUFJO1FBQ0osT0FBTztRQUNQLEtBQUs7UUFDTCxPQUFPO1FBQ1AsS0FBSztPQUNOLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sc0JBQXNCLHFCQUFxQjtNQUMvQyxNQUFNLG9CQUFvQixLQUFLLENBQUM7UUFDOUIsTUFBTSxPQUFPO1FBQ2IsTUFBTSxPQUFPO09BQ2QsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sZUFBZSxxQkFBcUI7TUFDeEMsSUFBSSxNQUFNLFlBQVksRUFBRTtRQUN0QixtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7T0FDdEMsTUFBTTtRQUNMLE1BQU0sR0FBRyxDQUFDLFlBQVksRUFBRSxNQUFNO1VBQzVCLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztTQUN0QyxDQUFDLENBQUM7T0FDSjtLQUNGLENBQUM7SUFDRixNQUFNLGNBQWMscUJBQXFCO01BQ3ZDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxVQUFVLENBQUM7UUFDbEMsNkJBQTZCO1FBQzdCLE9BQU87T0FDUixDQUFDLENBQUMsQ0FBQztLQUNMLENBQUM7SUFDRixNQUFNLFdBQVcsNEJBQTRCO01BQzNDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDO01BQy9DLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3BCLENBQUM7SUFDRixNQUFNLGtCQUFrQixxQkFBcUIsSUFBSSxHQUFHLENBQUMsZUFBZSxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLFVBQVUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxHQUFHLElBQUksRUFBRSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN2SixNQUFNLGtCQUFrQix1QkFBdUI7TUFDN0MsUUFBUSxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQzNFLENBQUM7SUFDRixNQUFNLGlCQUFpQix1QkFBdUI7TUFDNUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ3pFLENBQUM7SUFDRixNQUFNLG9CQUFvQix1QkFBdUI7TUFDL0MsUUFBUSxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxlQUFlLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQy9FLENBQUM7SUFDRixNQUFNLGlCQUFpQix1QkFBdUI7TUFDNUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ3pFLENBQUM7SUFDRixNQUFNLGlCQUFpQix1QkFBdUI7TUFDNUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ3pFLENBQUM7SUFDRixNQUFNLGtCQUFrQix1QkFBdUI7TUFDN0MsTUFBTSxVQUFVLElBQUksVUFBVSxDQUFDO1FBQzdCLGtDQUFrQztRQUNsQyxJQUFJO09BQ0wsQ0FBQyxDQUFDO01BQ0gsU0FBUyxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7TUFDbEQsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztNQUN4QixZQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQy9CLENBQUM7SUFDRixNQUFNLFlBQVksVUFBVSxJQUFJLEtBQUs7TUFDbkMsTUFBTSxVQUFVLE1BQU0sUUFBUSxDQUFDO01BQy9CLElBQUksT0FBTyxFQUFFO1FBQ1gsSUFBSSxPQUFPLE1BQU0sRUFBRTtVQUNqQixPQUFPLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM5QixNQUFNO1VBQ0wsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDNUI7T0FDRjtLQUNGLENBQUM7O0lBRUYsTUFBTSx1QkFBdUIsT0FBTyxnQkFBZ0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sb0JBQW9CLFVBQVU7TUFDbEMsT0FBTyxlQUFlLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0tBQ3ZELENBQUM7SUFDRixNQUFNLGlCQUFpQixVQUFVO01BQy9CLE9BQU8sZUFBZSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUNwRCxDQUFDO0lBQ0YsTUFBTSxrQkFBa0Isc0JBQXNCO01BQzVDLE1BQU0sVUFBVSxNQUFNLGNBQWMsUUFBUSxHQUFHLGdCQUFnQixDQUFDO01BQ2hFLE1BQU0sU0FBUyxNQUFNLGNBQWMsT0FBTyxDQUFDO01BQzNDLE1BQU0saUJBQWlCLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNoRCxPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUUsT0FBTztRQUM1QixJQUFJLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxPQUFPLEVBQUU7VUFDL0MsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLGNBQWMsRUFBRSxDQUFDLENBQUM7U0FDcEQsTUFBTTtVQUNMLE9BQU8sTUFBTSxnQkFBZ0IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQy9DO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sK0JBQStCLFVBQVU7TUFDN0MsTUFBTSxXQUFXLEdBQUcsTUFBTSxXQUFXLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUNqRyxDQUFDOztJQUVGLE1BQU0sZUFBZSxPQUFPO01BQzFCLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0tBQ3pELENBQUM7SUFDRixNQUFNLGVBQWUsNkJBQTZCO01BQ2hELE1BQU0saUJBQWlCLEVBQUUsQ0FBQztNQUMxQixNQUFNLFVBQVUsTUFBTSxZQUFZLE1BQU0sS0FBSztRQUMzQyxNQUFNLFNBQVMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPO1VBQ2hELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQztVQUNwQixJQUFJLEdBQUcsYUFBYSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7WUFDdEMsT0FBTyxLQUFLLENBQUM7V0FDZDtVQUNELElBQUksR0FBRyxhQUFhLENBQUMsc0JBQXNCLENBQUMsRUFBRTtZQUM1QyxPQUFPLEtBQUssQ0FBQztXQUNkO1VBQ0QsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxlQUFlLEVBQUU7WUFDdEMsT0FBTyxLQUFLLENBQUM7V0FDZDtVQUNELElBQUksVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsRUFBRTtZQUM1QixPQUFPLENBQUMsWUFBWSxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1dBQ3hEO1VBQ0QsSUFBSSxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1lBQzVCLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1dBQ3ZCO1VBQ0QsT0FBTyxLQUFLLENBQUM7U0FDZCxDQUFDLENBQUM7UUFDSCxNQUFNLFdBQVcsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPO1VBQ3BDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztVQUN6QixJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDbkMsT0FBTyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxhQUFhO2NBQ2hELElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUN2QixPQUFPLFNBQVMsQ0FBQztlQUNsQixNQUFNO2dCQUNMLE9BQU87a0JBQ0wsT0FBTyxHQUFHO2tCQUNWLFVBQVUsU0FBUyxTQUFTO2lCQUM3QixDQUFDO2VBQ0g7YUFDRixDQUFDLENBQUM7V0FDSixNQUFNO1lBQ0wsTUFBTSxhQUFhLGVBQWUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxZQUFZO2NBQ3ZFLE9BQU8sY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2NBQ2hDLE9BQU87Z0JBQ0wsT0FBTyxHQUFHO2dCQUNWLFFBQVE7ZUFDVCxDQUFDO2FBQ0gsQ0FBQyxNQUFNLENBQUMsU0FBUztjQUNoQixPQUFPLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztjQUNoQyxPQUFPLEtBQUssQ0FBQzthQUNkLENBQUMsQ0FBQztZQUNILGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxVQUFVLENBQUM7WUFDdEMsT0FBTyxVQUFVLENBQUM7V0FDbkI7U0FDRixDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO09BQzlCLENBQUM7TUFDRixPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7S0FDcEIsQ0FBQzs7SUFFRixNQUFNLGVBQWUsTUFBTTtNQUN6QixNQUFNLFVBQVUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO01BQ2hDLElBQUksa0JBQWtCLEVBQUUsQ0FBQztNQUN6QixNQUFNLGVBQWUsdUJBQXVCO1FBQzFDLE9BQU87VUFDTCxNQUFNO1VBQ04sU0FBUztTQUNWLENBQUM7T0FDSCxDQUFDO01BQ0YsTUFBTSxhQUFhLFdBQVc7UUFDNUIsT0FBTyxPQUFPLElBQUksZUFBZSxDQUFDO09BQ25DLENBQUM7TUFDRixNQUFNLGVBQWUsV0FBVztRQUM5QixNQUFNLFNBQVMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sTUFBTSxHQUFHLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQztPQUN6QyxDQUFDO01BQ0YsTUFBTSxZQUFZLFdBQVc7UUFDM0IsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEtBQUssT0FBTyxHQUFHLEtBQUssQ0FBQztPQUNsRixDQUFDO01BQ0YsTUFBTSxhQUFhLFdBQVc7UUFDNUIsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEtBQUssUUFBUSxHQUFHLEtBQUssQ0FBQztPQUNuRixDQUFDO01BQ0YsTUFBTSxjQUFjLFdBQVc7UUFDN0IsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDeEQsQ0FBQztNQUNGLE1BQU0sZUFBZSx3QkFBd0I7UUFDM0MsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7T0FDOUQsQ0FBQztNQUNGLE1BQU0sZUFBZSxXQUFXO1FBQzlCLE9BQU8sZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO09BQ2pDLENBQUM7TUFDRixNQUFNLFVBQVUsTUFBTTtRQUNwQixrQkFBa0IsRUFBRSxDQUFDO09BQ3RCLENBQUM7TUFDRixPQUFPO1FBQ0wsVUFBVTtRQUNWLFlBQVk7UUFDWixTQUFTO1FBQ1QsVUFBVTtRQUNWLFdBQVc7UUFDWCxZQUFZO1FBQ1osWUFBWTtRQUNaLE9BQU87T0FDUixDQUFDO0tBQ0gsQ0FBQzs7SUFFRixJQUFJLFFBQVEsQ0FBQyxDQUFDO0lBQ2QsTUFBTSxPQUFPLE1BQU07TUFDakIsTUFBTSxNQUFNLE1BQU07UUFDaEIsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLE9BQU8sRUFBRSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7T0FDNUQsQ0FBQztNQUNGLE1BQU0sTUFBTSxJQUFJLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztNQUNqQyxPQUFPLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQztLQUN2RCxDQUFDO0lBQ0YsTUFBTSxPQUFPLFVBQVU7TUFDckIsT0FBTyxNQUFNLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7S0FDbEMsQ0FBQzs7SUFFRixNQUFNLFlBQVksTUFBTTtNQUN0QixJQUFJLFFBQVEsRUFBRSxDQUFDO01BQ2YsTUFBTSxZQUFZLFFBQVE7UUFDeEIsTUFBTSxRQUFRO1VBQ1osY0FBYyxLQUFLO1VBQ25CLGFBQWEsS0FBSztVQUNsQixhQUFhLEtBQUs7VUFDbEIsYUFBYSxLQUFLO1VBQ2xCLGNBQWMsTUFBTTtVQUNwQixjQUFjLE1BQU07VUFDcEIsaUJBQWlCLEtBQUs7VUFDdEIsY0FBYyxNQUFNO1VBQ3BCLGFBQWEsS0FBSztVQUNsQixjQUFjLE1BQU07U0FDckIsQ0FBQztRQUNGLE9BQU8sS0FBSyxDQUFDLElBQUksWUFBWSxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUM7T0FDM0MsQ0FBQztNQUNGLE1BQU0sU0FBUyxxQ0FBcUM7UUFDbEQsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7VUFDZixNQUFNLEtBQUssQ0FBQyxDQUFDO1VBQ2IsT0FBTyxVQUFVLENBQUM7WUFDaEIsRUFBRTtZQUNGLElBQUk7WUFDSixRQUFRO1lBQ1IsTUFBTSxJQUFJO1lBQ1YsUUFBUSxNQUFNO1dBQ2YsQ0FBQyxDQUFDO1NBQ0osTUFBTSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtVQUN0QixPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0QixNQUFNO1VBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ3ZDO09BQ0YsQ0FBQztNQUNGLE1BQU0sYUFBYSxLQUFLO1FBQ3RCLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO1VBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0ZBQXNGLENBQUMsQ0FBQztTQUN6RztRQUNELE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEMsTUFBTSxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUMxQixNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDcEIsT0FBTztVQUNMLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQztVQUNoQixNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUM7VUFDcEIsVUFBVSxRQUFRLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxTQUFTLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztVQUNuRSxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUM7VUFDcEIsUUFBUSxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUM7VUFDMUIsU0FBUyxRQUFRLENBQUMsQ0FBQyxRQUFRLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUN6RCxLQUFLLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUNyQixDQUFDO09BQ0gsQ0FBQztNQUNGLE1BQU0sTUFBTSxZQUFZO1FBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxFQUFFO1VBQ3ZCLEtBQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3RCO09BQ0YsQ0FBQztNQUNGLE1BQU0sWUFBWSxhQUFhLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO01BQ3pFLE1BQU0sTUFBTSxNQUFNLFNBQVMsQ0FBQyxrQkFBa0IsY0FBYyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztNQUMxRSxNQUFNLFdBQVcsV0FBVyxTQUFTLENBQUMsWUFBWSxRQUFRLFFBQVEsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDO01BQ2xGLE1BQU0sWUFBWSxrQkFBa0IsU0FBUyxDQUFDLFlBQVksUUFBUSxPQUFPLEVBQUUsS0FBSyxNQUFNLElBQUksUUFBUSxLQUFLLEVBQUUsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDO01BQ3pILE1BQU0sY0FBYyxXQUFXO1FBQzdCLFFBQVEsUUFBUSxDQUFDLEtBQUssRUFBRSxZQUFZO1VBQ2xDLElBQUksUUFBUSxRQUFRLEVBQUUsS0FBSyxPQUFPLEVBQUU7WUFDbEMsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDeEMsT0FBTyxLQUFLLENBQUM7V0FDZDtVQUNELE9BQU8sSUFBSSxDQUFDO1NBQ2IsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sVUFBVSxNQUFNO1FBQ3BCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsa0JBQWtCO1VBQzlCLEdBQUcsZ0JBQWdCLENBQUMsY0FBYyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQy9DLENBQUMsQ0FBQztRQUNILFFBQVEsRUFBRSxDQUFDO09BQ1osQ0FBQztNQUNGLE9BQU87UUFDTCxNQUFNO1FBQ04sR0FBRztRQUNILEdBQUc7UUFDSCxRQUFRO1FBQ1IsU0FBUztRQUNULFNBQVM7UUFDVCxXQUFXO1FBQ1gsT0FBTztPQUNSLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sV0FBVyw0QkFBNEI7TUFDM0MsTUFBTSxrQkFBa0IsRUFBRSxDQUFDO01BQzNCLE1BQU0sV0FBVyxrQkFBa0I7UUFDakMsSUFBSSxLQUFLLEVBQUU7VUFDVCxPQUFPLEtBQUssUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ2xFO1FBQ0QsT0FBTyxLQUFLLENBQUM7T0FDZCxDQUFDO01BQ0YsTUFBTSxpQkFBaUIsd0JBQXdCLElBQUksT0FBTyxDQUFDLHNCQUFzQjtRQUMvRSxNQUFNLE1BQU0sSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNqQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxJQUFJLENBQUMsQ0FBQztRQUMvQixHQUFHLGdCQUFnQixHQUFHLFFBQVEsWUFBWSxDQUFDO1FBQzNDLEdBQUcsT0FBTyxXQUFXLEdBQUcsS0FBSztVQUMzQixRQUFRLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7U0FDcEMsQ0FBQztRQUNGLEdBQUcsUUFBUSxHQUFHLE1BQU07VUFDbEIsT0FBTyxDQUFDLDBEQUEwRCxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUM7U0FDbEYsQ0FBQztRQUNGLEdBQUcsT0FBTyxHQUFHLE1BQU07VUFDakIsSUFBSSxHQUFHLE9BQU8sR0FBRyxHQUFHLElBQUksR0FBRyxPQUFPLElBQUksR0FBRyxFQUFFO1lBQ3pDLE9BQU8sQ0FBQyxjQUFjLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQztZQUNyQyxPQUFPO1dBQ1I7VUFDRCxNQUFNLE9BQU8sSUFBSSxNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQztVQUMxQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksU0FBUyxDQUFDLEVBQUU7WUFDckMsT0FBTyxDQUFDLGdCQUFnQixHQUFHLEdBQUcsYUFBYSxDQUFDLENBQUM7WUFDN0MsT0FBTztXQUNSO1VBQ0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLFNBQVMsRUFBRSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDckQsQ0FBQztRQUNGLE1BQU0sV0FBVyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLFFBQVEsT0FBTyxDQUFDLE1BQU0sRUFBRSxRQUFRLEtBQUssRUFBRSxFQUFFLFFBQVEsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUM5RCxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztPQUNwQixDQUFDLENBQUM7TUFDSCxNQUFNLGdCQUFnQixVQUFVLENBQUMsUUFBUSxRQUFRLENBQUMsR0FBRyxRQUFRLFFBQVEsR0FBRyxjQUFjLENBQUM7TUFDdkYsTUFBTSxXQUFXLE1BQU0sSUFBSSxPQUFPLENBQUMsV0FBVztRQUM1QyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7T0FDYixDQUFDLENBQUM7TUFDSCxNQUFNLGlCQUFpQixvQkFBb0I7UUFDekMsR0FBRztRQUNILFFBQVE7UUFDUixRQUFRLElBQUk7T0FDYixDQUFDLENBQUM7TUFDSCxNQUFNLGlCQUFpQixzQkFBc0I7UUFDM0MsS0FBSyxFQUFFO1FBQ1AsUUFBUTtRQUNSLFFBQVEsS0FBSztRQUNiLEtBQUs7T0FDTixDQUFDLENBQUM7TUFDSCxNQUFNLGlCQUFpQixxQkFBcUI7UUFDMUMsS0FBSyxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFdBQVc7VUFDOUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2pCLENBQUMsQ0FBQztRQUNILE9BQU8sZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO09BQ2pDLENBQUM7TUFDRixNQUFNLGlCQUFpQix5Q0FBeUM7UUFDOUQsWUFBWSxZQUFZLENBQUMsUUFBUSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sSUFBSSxPQUFPLENBQUMsV0FBVztVQUM1QixJQUFJLFlBQVksQ0FBQztVQUNqQixJQUFJLFFBQVEsQ0FBQztVQUNiLElBQUk7WUFDRixNQUFNLG9CQUFvQixNQUFNO2NBQzlCLElBQUksWUFBWSxFQUFFO2dCQUNoQixZQUFZLE1BQU0sRUFBRSxDQUFDO2dCQUNyQixXQUFXLElBQUksQ0FBQztlQUNqQjthQUNGLENBQUM7WUFDRixNQUFNLFVBQVUsT0FBTztjQUNyQixpQkFBaUIsRUFBRSxDQUFDO2NBQ3BCLFlBQVksYUFBYSxDQUFDLFFBQVEsUUFBUSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7Y0FDbkQsY0FBYyxDQUFDLFFBQVEsUUFBUSxFQUFFLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQ2xFLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDeEMsQ0FBQztZQUNGLE1BQU0sVUFBVSxTQUFTO2NBQ3ZCLGlCQUFpQixFQUFFLENBQUM7Y0FDcEIsWUFBWSxhQUFhLENBQUMsUUFBUSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2NBQzlDLGNBQWMsQ0FBQyxRQUFRLFFBQVEsRUFBRSxFQUFFLGNBQWMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztjQUNwRSxPQUFPLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQzFDLENBQUM7WUFDRixXQUFXLFdBQVc7Y0FDcEIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLE9BQU8sR0FBRyxHQUFHLEVBQUU7Z0JBQ2hDLE9BQU87ZUFDUjtjQUNELFFBQVEsS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxRQUFRLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUs7Z0JBQ2hHLGVBQWUsQ0FBQyxDQUFDO2dCQUNqQixDQUFDLFlBQVksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2VBQzlCLENBQUMsQ0FBQzthQUNKLENBQUM7WUFDRixPQUFPLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU87Y0FDL0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFNBQVMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7YUFDakQsQ0FBQyxDQUFDO1dBQ0osQ0FBQyxXQUFXO1lBQ1gsT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztXQUN2QztTQUNGLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLG1CQUFtQixXQUFXLE9BQU8sS0FBSyxjQUFjLENBQUM7TUFDL0QsTUFBTSx3QkFBd0IsWUFBWTtRQUN4QyxNQUFNLFVBQVUsUUFBUSxRQUFRLEVBQUUsQ0FBQztRQUNuQyxPQUFPLElBQUksT0FBTyxDQUFDLFdBQVc7VUFDNUIsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7VUFDMUQsZUFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDeEMsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sY0FBYyxpQ0FBaUM7UUFDbkQsWUFBWSxLQUFLLEtBQUssQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLFlBQVksV0FBVyxDQUFDLFFBQVEsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVGLE9BQU8sT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksWUFBWSxVQUFVLENBQUMsUUFBUSxRQUFRLEVBQUUsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ2hNLENBQUM7TUFDRixNQUFNLFNBQVMsaUNBQWlDLENBQUMsUUFBUSxJQUFJLElBQUksZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEdBQUcsUUFBUSxFQUFFLEdBQUcsV0FBVyxDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO01BQ3pKLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztLQUNuQixDQUFDOztJQUVGLE1BQU0sbUJBQW1CLFVBQVUsTUFBTSxNQUFNLG9CQUFvQixLQUFLLENBQUM7TUFDdkUsTUFBTSxNQUFNLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQztNQUM1QyxNQUFNLE1BQU07TUFDWixTQUFTLENBQUMsQ0FBQztNQUNYLGFBQWEsSUFBSTtLQUNsQixDQUFDLENBQUM7SUFDSCxNQUFNLGlCQUFpQiwwQkFBMEIsUUFBUSxDQUFDLFlBQVksRUFBRTtNQUN0RSxLQUFLLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztNQUM5QixVQUFVLHNCQUFzQixDQUFDLE1BQU0sQ0FBQztNQUN4QyxhQUFhLDBCQUEwQixDQUFDLE1BQU0sQ0FBQztNQUMvQyxTQUFTLHNCQUFzQixDQUFDLE1BQU0sQ0FBQztLQUN4QyxDQUFDLENBQUM7SUFDSCxNQUFNLGdCQUFnQixVQUFVO01BQzlCLE1BQU0sZUFBZSxZQUFZLEVBQUUsQ0FBQztNQUNwQyxNQUFNLFdBQVcsY0FBYyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztNQUN0RCxPQUFPLEVBQUUsUUFBUSxZQUFZLG1CQUFtQixJQUFJLEtBQUssUUFBUSxPQUFPLENBQUMsU0FBUyxFQUFFLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUM7S0FDaEosQ0FBQzs7SUFFRixNQUFNLG9CQUFvQixxQkFBcUIsTUFBTSxJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxNQUFNLE9BQU8scUJBQXFCLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JKLE1BQU0sb0JBQW9CLFVBQVUsV0FBVztNQUM3QyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRTtRQUN0QyxRQUFRLENBQUMsT0FBTyxFQUFFLFlBQVksU0FBUyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQztPQUN2RTtLQUNGLENBQUM7SUFDRixNQUFNLGVBQWUsVUFBVTtNQUM3QixNQUFNLFlBQVksU0FBUyxFQUFFLENBQUM7TUFDOUIsSUFBSSxRQUFRLEVBQUUsWUFBWSxDQUFDO01BQzNCLE1BQU0sZUFBZSxZQUFZLEVBQUUsQ0FBQztNQUNwQyxNQUFNLGFBQWEsRUFBRSxDQUFDO01BQ3RCLE1BQU0sYUFBYSxZQUFZO1FBQzdCLE9BQU8sVUFBVTtVQUNmLElBQUksTUFBTSxVQUFVLEVBQUU7WUFDcEIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7V0FDekI7VUFDRCxPQUFPLEVBQUUsQ0FBQztTQUNYLENBQUM7T0FDSCxDQUFDO01BQ0YsTUFBTSxtQkFBbUIsT0FBTyxHQUFHLElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO01BQ25HLE1BQU0sZ0JBQWdCLDhCQUE4QjtRQUNsRCxJQUFJLFFBQVEsQ0FBQyxDQUFDO1FBQ2QsR0FBRztVQUNELFFBQVEsT0FBTyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1VBQ3ZDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2hCLFVBQVUsT0FBTyxVQUFVLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLE9BQU8sR0FBRyxPQUFPLE9BQU8sQ0FBQyxLQUFLLEdBQUcsTUFBTSxPQUFPLENBQUMsQ0FBQztZQUN4RixTQUFTLE9BQU8sT0FBTyxHQUFHLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQztXQUM3QztTQUNGLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQ3ZCLE9BQU8sT0FBTyxDQUFDO09BQ2hCLENBQUM7TUFDRixNQUFNLGtCQUFrQix3Q0FBd0M7UUFDOUQsTUFBTSxvQkFBb0IsQ0FBQyxLQUFLLEdBQUcsY0FBYyxFQUFFLENBQUMsR0FBRyxjQUFjLEtBQUssR0FBRyxlQUFlLEdBQUcsMkJBQTJCLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuSSxVQUFVLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEdBQUcsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDNUUsVUFBVSxhQUFhLENBQUMsT0FBTyxFQUFFLGdCQUFnQixHQUFHLFNBQVMsR0FBRyxHQUFHLEVBQUUsZ0JBQWdCLEdBQUcsY0FBYyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQzlHLE9BQU8sT0FBTyxDQUFDO09BQ2hCLENBQUM7TUFDRixNQUFNLHdCQUF3QiwrQkFBK0I7UUFDM0QsTUFBTSxDQUFDLE1BQU0sWUFBWSxLQUFLLEVBQUUsU0FBUztVQUN2QyxJQUFJLEtBQUssS0FBSyxLQUFLLFlBQVksRUFBRTtZQUMvQixLQUFLLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxVQUFVLEVBQUUsWUFBWSxlQUFlLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1dBQzVHLE1BQU07WUFDTCxLQUFLLFFBQVEsR0FBRyxlQUFlLENBQUMsS0FBSyxRQUFRLEVBQUUsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1dBQzNFO1NBQ0YsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sd0JBQXdCLHNCQUFzQjtRQUNsRCxNQUFNLE1BQU0sTUFBTSxXQUFXLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2hELHFCQUFxQixDQUFDLEtBQUssSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzVDLFFBQVEsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtVQUNwQyxPQUFPLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVM7VUFDNUUsZ0JBQWdCLEdBQUc7U0FDcEIsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sZUFBZSxNQUFNO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEVBQUU7VUFDYixXQUFXLGNBQWMsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDakQ7UUFDRCxPQUFPLGFBQWEsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLGNBQWM7VUFDbkQsTUFBTSxZQUFZLEtBQUssQ0FBQyxVQUFVLEVBQUUsYUFBYSxTQUFTLFNBQVMsQ0FBQyxDQUFDO1VBQ3JFLE9BQU8sUUFBUSxPQUFPLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVTtZQUNwRixNQUFNLGlCQUFpQixFQUFFLENBQUM7WUFDMUIsSUFBSSx1QkFBdUIsS0FBSyxDQUFDO1lBQ2pDLE1BQU0saUJBQWlCLEtBQUssQ0FBQyxNQUFNLEVBQUUsdUJBQXVCO2NBQzFELE1BQU0saUJBQWlCLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO2NBQzVDLElBQUksVUFBVSxLQUFLLENBQUM7Y0FDcEIsSUFBSSxVQUFVLE9BQU8sSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDdEQsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRSxVQUFVLElBQUksQ0FBQyxFQUFFO2tCQUM1RCx1QkFBdUIsSUFBSSxDQUFDO2lCQUM3QjtnQkFDRCxTQUFTLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU07a0JBQ3hCLHFCQUFxQixDQUFDLEtBQUssRUFBRSxVQUFVLElBQUksQ0FBQyxDQUFDO2lCQUM5QztlQUNGLE1BQU0sSUFBSSxVQUFVLE1BQU0sRUFBRTtnQkFDM0IsSUFBSSxVQUFVLE1BQU0sT0FBTyxFQUFFO2tCQUMzQixxQkFBcUIsQ0FBQyxLQUFLLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDO2tCQUNyRCxjQUFjLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztrQkFDM0IsVUFBVSxJQUFJLENBQUM7aUJBQ2hCO2dCQUNELFdBQVcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxNQUFNLFFBQVEsQ0FBQyxDQUFDO2VBQy9DO2NBQ0QsT0FBTztnQkFDTCxTQUFTLEtBQUs7Z0JBQ2QsUUFBUSxVQUFVLE9BQU87Z0JBQ3pCLFdBQVcsVUFBVSxJQUFJO2dCQUN6QixRQUFRO2dCQUNSLE9BQU87ZUFDUixDQUFDO2FBQ0gsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxjQUFjLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7Y0FDL0MsTUFBTSxZQUFZLFNBQVMsQ0FBQyxNQUFNO2dCQUNoQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLGdCQUFnQjtrQkFDaEQsTUFBTSxZQUFZLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztrQkFDdkMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO2tCQUN2QixTQUFTLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2tCQUMxQyxTQUFTLFlBQVksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLENBQUM7aUJBQzdDLENBQUMsQ0FBQztlQUNKLENBQUMsQ0FBQzthQUNKLE1BQU0sSUFBSSxvQkFBb0IsRUFBRTtjQUMvQixNQUFNLFlBQVksZUFBZSxFQUFFLENBQUM7YUFDckM7WUFDRCxPQUFPLGNBQWMsQ0FBQztXQUN2QixDQUFDLENBQUMsQ0FBQztTQUNMLENBQUMsQ0FBQyxDQUFDO09BQ0wsQ0FBQztNQUNGLE1BQU0sbUJBQW1CLE1BQU0seUJBQXlCLENBQUMsTUFBTSxDQUFDLEdBQUcsWUFBWSxFQUFFLEdBQUcsT0FBTyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDeEcsTUFBTSxzQkFBc0IsVUFBVSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7TUFDbkYsTUFBTSxZQUFZLFVBQVU7UUFDMUIsVUFBVSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDekIsQ0FBQztNQUNGLE1BQU0sZ0JBQWdCLE1BQU07UUFDMUIsSUFBSSxDQUFDLFlBQVksRUFBRTtVQUNqQixlQUFlLFlBQVksQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDdEQ7UUFDRCxPQUFPLFlBQVksUUFBUSxDQUFDLE1BQU0sUUFBUSxFQUFFLEVBQUUsbUJBQW1CLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVO1VBQzNGLE1BQU0saUJBQWlCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsY0FBYztZQUNwRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtjQUN4QixZQUFZLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2NBQ2pDLE9BQU8sS0FBSyxDQUFDO2FBQ2QsTUFBTSxJQUFJLFVBQVUsUUFBUSxLQUFLLE1BQU0sRUFBRTtjQUN4QyxPQUFPLEtBQUssQ0FBQzthQUNkLE1BQU07Y0FDTCxPQUFPLElBQUksQ0FBQzthQUNiO1dBQ0YsQ0FBQyxDQUFDO1VBQ0gsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNO1lBQ3hCLE1BQU0sQ0FBQyxjQUFjLEVBQUUsY0FBYztjQUNuQyxxQkFBcUIsQ0FBQyxVQUFVLE1BQU0sSUFBSSxFQUFFLFVBQVUsU0FBUyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2NBQzNFLFVBQVUsTUFBTSxJQUFJLEdBQUcsVUFBVSxTQUFTLFFBQVEsRUFBRSxDQUFDO2NBQ3JELFVBQVUsTUFBTSxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUNsRCxDQUFDLENBQUM7V0FDSjtVQUNELE9BQU8sY0FBYyxDQUFDO1NBQ3ZCLENBQUMsQ0FBQyxDQUFDO09BQ0wsQ0FBQztNQUNGLE1BQU0sVUFBVSxNQUFNO1FBQ3BCLFNBQVMsUUFBUSxFQUFFLENBQUM7UUFDcEIsWUFBWSxRQUFRLEVBQUUsQ0FBQztRQUN2QixlQUFlLFdBQVcsSUFBSSxDQUFDO09BQ2hDLENBQUM7TUFDRixNQUFNLGtCQUFrQixXQUFXO1FBQ2pDLE9BQU8sT0FBTyxRQUFRLENBQUMscUJBQXFCLEVBQUUsb0JBQW9CO1VBQ2hFLE1BQU0sWUFBWSxZQUFZLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztVQUNyRCxJQUFJLFNBQVMsRUFBRTtZQUNiLE9BQU8sT0FBTyxHQUFHLFNBQVMsR0FBRyxHQUFHLENBQUM7V0FDbEM7VUFDRCxJQUFJLFdBQVcsU0FBUyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7VUFDM0MsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLFdBQVcsS0FBSyxDQUFDLE1BQU0sY0FBYyxJQUFJLEVBQUUsRUFBRSxvQkFBb0I7Y0FDL0QsT0FBTyxNQUFNLElBQUksTUFBTSxhQUFhLElBQUksTUFBTSxhQUFhLFVBQVUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3pGLEVBQUUsU0FBUyxDQUFDLENBQUM7V0FDZjtVQUNELElBQUksUUFBUSxFQUFFO1lBQ1osTUFBTSxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7WUFDN0IsT0FBTyxZQUFZLEdBQUcsSUFBSSxLQUFLLEdBQUcsVUFBVSxHQUFHLFFBQVEsT0FBTyxFQUFFLEdBQUcsR0FBRyxDQUFDO1dBQ3hFO1VBQ0QsT0FBTyxLQUFLLENBQUM7U0FDZCxDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxHQUFHLENBQUMsWUFBWSxFQUFFLE1BQU07UUFDNUIsSUFBSSx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsRUFBRTtVQUNyQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQ3BCLE1BQU07VUFDTCxhQUFhLEVBQUUsQ0FBQztTQUNqQjtPQUNGLENBQUMsQ0FBQztNQUNILE1BQU0sR0FBRyxDQUFDLGdCQUFnQixFQUFFLEtBQUs7UUFDL0IsQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7T0FDeEMsQ0FBQyxDQUFDO01BQ0gsTUFBTSxHQUFHLENBQUMsWUFBWSxFQUFFLEtBQUs7UUFDM0IsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLElBQUksQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFO1VBQzlELE9BQU87U0FDUjtRQUNELENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO09BQ3hDLENBQUMsQ0FBQztNQUNILE1BQU0sR0FBRyxDQUFDLFlBQVksRUFBRSxNQUFNO1FBQzVCLE1BQU0sT0FBTyxjQUFjLENBQUMsS0FBSyxFQUFFLFVBQVU7VUFDM0MsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPO1lBQ3BCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsR0FBRyxJQUFJLFNBQVMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2NBQ25DLE9BQU87YUFDUjtZQUNELE1BQU0sWUFBWSxZQUFZLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLFNBQVMsRUFBRTtjQUNiLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQzthQUM1QjtXQUNGLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztNQUNILE9BQU87UUFDTCxTQUFTO1FBQ1QsU0FBUztRQUNULFlBQVk7UUFDWixnQkFBZ0I7UUFDaEIsYUFBYTtRQUNiLE9BQU87T0FDUixDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLFFBQVEsVUFBVTtNQUN0QixNQUFNLE1BQU0sTUFBTSxJQUFJLENBQUM7TUFDdkIsTUFBTSxhQUFhLE1BQU0sT0FBTyxLQUFLLENBQUM7TUFDdEMsTUFBTSxVQUFVO1FBQ2QsV0FBVyxDQUFDO1lBQ1IsVUFBVSxPQUFPO1lBQ2pCLFFBQVEsRUFBRSxlQUFlLEtBQUssRUFBRTtXQUNqQyxDQUFDO1FBQ0osY0FBYyxDQUFDO1lBQ1gsVUFBVSxPQUFPO1lBQ2pCLFFBQVEsRUFBRSxlQUFlLFFBQVEsRUFBRTtXQUNwQyxDQUFDO1FBQ0osY0FBYyxDQUFDO1lBQ1gsVUFBVSxPQUFPO1lBQ2pCLFFBQVEsRUFBRSxlQUFlLFFBQVEsRUFBRTtXQUNwQyxDQUFDO1FBQ0osV0FBVztVQUNUO1lBQ0UsVUFBVSxjQUFjO1lBQ3hCLFdBQVcsS0FBSztZQUNoQixTQUFTLFlBQVk7WUFDckIsaUJBQWlCLElBQUk7WUFDckIsU0FBUyx1QkFBdUI7V0FDakM7VUFDRDtZQUNFLFVBQVUsc0RBQXNEO1lBQ2hFLFFBQVEsRUFBRSxXQUFXLE1BQU0sRUFBRTtZQUM3QixTQUFTLEtBQUs7WUFDZCxTQUFTLEtBQUs7V0FDZjtVQUNEO1lBQ0UsVUFBVSxpQkFBaUI7WUFDM0IsV0FBVyxLQUFLO1lBQ2hCLFFBQVEsRUFBRSxPQUFPLE1BQU0sRUFBRTtZQUN6QixTQUFTLHVCQUF1QjtXQUNqQztVQUNEO1lBQ0UsVUFBVSxPQUFPO1lBQ2pCLFdBQVcsS0FBSztZQUNoQixRQUFRO2NBQ04sWUFBWSxLQUFLO2NBQ2pCLGFBQWEsTUFBTTthQUNwQjtZQUNELFVBQVUsU0FBUztjQUNqQixHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ3BDO1lBQ0QsU0FBUyx1QkFBdUI7V0FDakM7VUFDRDtZQUNFLFVBQVUsNENBQTRDO1lBQ3RELGlCQUFpQixJQUFJO1lBQ3JCLFFBQVEsRUFBRSxPQUFPLE1BQU0sRUFBRTtXQUMxQjtTQUNGO1FBQ0QsYUFBYTtVQUNYO1lBQ0UsVUFBVSxzREFBc0Q7WUFDaEUsUUFBUSxFQUFFLFdBQVcsUUFBUSxFQUFFO1lBQy9CLFNBQVMsS0FBSztZQUNkLFNBQVMsdUJBQXVCO1dBQ2pDO1VBQ0Q7WUFDRSxVQUFVLGNBQWM7WUFDeEIsV0FBVyxLQUFLO1lBQ2hCLFNBQVMsY0FBYztZQUN2QixpQkFBaUIsSUFBSTtZQUNyQixTQUFTLHVCQUF1QjtXQUNqQztVQUNEO1lBQ0UsVUFBVSxpQkFBaUI7WUFDM0IsV0FBVyxLQUFLO1lBQ2hCLFFBQVE7Y0FDTixTQUFTLE9BQU87Y0FDaEIsWUFBWSxNQUFNO2NBQ2xCLGFBQWEsTUFBTTthQUNwQjtZQUNELFNBQVMsS0FBSztXQUNmO1VBQ0Q7WUFDRSxVQUFVLE9BQU87WUFDakIsV0FBVyxLQUFLO1lBQ2hCLFFBQVE7Y0FDTixZQUFZLE1BQU07Y0FDbEIsYUFBYSxNQUFNO2FBQ3BCO1lBQ0QsU0FBUyx1QkFBdUI7V0FDakM7VUFDRDtZQUNFLFVBQVUscUJBQXFCO1lBQy9CLGlCQUFpQixJQUFJO1lBQ3JCLFFBQVE7Y0FDTixTQUFTLE9BQU87Y0FDaEIsWUFBWSxNQUFNO2NBQ2xCLGFBQWEsTUFBTTthQUNwQjtZQUNELFNBQVMsS0FBSztXQUNmO1VBQ0Q7WUFDRSxVQUFVLHdCQUF3QjtZQUNsQyxpQkFBaUIsSUFBSTtZQUNyQixRQUFRO2NBQ04sWUFBWSxNQUFNO2NBQ2xCLGFBQWEsTUFBTTthQUNwQjtZQUNELFNBQVMsS0FBSztXQUNmO1NBQ0Y7UUFDRCxZQUFZO1VBQ1Y7WUFDRSxVQUFVLGNBQWM7WUFDeEIsV0FBVyxLQUFLO1lBQ2hCLFNBQVMsYUFBYTtZQUN0QixpQkFBaUIsSUFBSTtZQUNyQixTQUFTLHVCQUF1QjtXQUNqQztVQUNEO1lBQ0UsVUFBVSxzREFBc0Q7WUFDaEUsUUFBUSxFQUFFLFdBQVcsT0FBTyxFQUFFO1lBQzlCLFNBQVMsS0FBSztZQUNkLFNBQVMsdUJBQXVCO1dBQ2pDO1VBQ0Q7WUFDRSxVQUFVLGlCQUFpQjtZQUMzQixXQUFXLEtBQUs7WUFDaEIsUUFBUSxFQUFFLE9BQU8sT0FBTyxFQUFFO1lBQzFCLFNBQVMsdUJBQXVCO1dBQ2pDO1VBQ0Q7WUFDRSxVQUFVLE9BQU87WUFDakIsV0FBVyxLQUFLO1lBQ2hCLFFBQVE7Y0FDTixhQUFhLEtBQUs7Y0FDbEIsWUFBWSxNQUFNO2FBQ25CO1lBQ0QsVUFBVSxTQUFTO2NBQ2pCLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDcEM7WUFDRCxTQUFTLHVCQUF1QjtXQUNqQztVQUNEO1lBQ0UsVUFBVSw0Q0FBNEM7WUFDdEQsaUJBQWlCLElBQUk7WUFDckIsUUFBUSxFQUFFLE9BQU8sT0FBTyxFQUFFO1lBQzFCLFNBQVMsS0FBSztXQUNmO1NBQ0Y7UUFDRCxjQUFjLENBQUM7WUFDWCxVQUFVLHNEQUFzRDtZQUNoRSxRQUFRLEVBQUUsV0FBVyxTQUFTLEVBQUU7WUFDaEMsU0FBUyxLQUFLO1lBQ2QsU0FBUyx1QkFBdUI7V0FDakMsQ0FBQztRQUNKLE1BQU07VUFDSjtZQUNFLFFBQVEsUUFBUTtZQUNoQixRQUFRLEtBQUs7WUFDYixxQkFBcUI7Y0FDbkIsT0FBTztjQUNQLE9BQU87YUFDUjtXQUNGO1VBQ0Q7WUFDRSxRQUFRLE1BQU07WUFDZCxRQUFRLEVBQUUsWUFBWSxNQUFNLEVBQUU7V0FDL0I7VUFDRDtZQUNFLFFBQVEsR0FBRztZQUNYLFFBQVEsS0FBSztZQUNiLHFCQUFxQjtjQUNuQixPQUFPO2NBQ1AsT0FBTzthQUNSO1dBQ0Y7U0FDRjtRQUNELFFBQVE7VUFDTjtZQUNFLFFBQVEsSUFBSTtZQUNaLFFBQVEsS0FBSztZQUNiLHFCQUFxQjtjQUNuQixPQUFPO2NBQ1AsT0FBTzthQUNSO1dBQ0Y7VUFDRDtZQUNFLFFBQVEsTUFBTTtZQUNkLFFBQVEsRUFBRSxXQUFXLFFBQVEsRUFBRTtXQUNoQztVQUNEO1lBQ0UsUUFBUSxHQUFHO1lBQ1gsUUFBUSxLQUFLO1lBQ2IscUJBQXFCO2NBQ25CLE9BQU87Y0FDUCxPQUFPO2FBQ1I7V0FDRjtTQUNGO1FBQ0QsV0FBVztVQUNUO1lBQ0UsUUFBUSxNQUFNO1lBQ2QsUUFBUSxFQUFFLGdCQUFnQixXQUFXLEVBQUU7WUFDdkMsT0FBTyxJQUFJO1dBQ1o7VUFDRDtZQUNFLFFBQVEsR0FBRztZQUNYLFFBQVEsS0FBSztZQUNiLHFCQUFxQjtjQUNuQixPQUFPO2NBQ1AsT0FBTzthQUNSO1dBQ0Y7U0FDRjtRQUNELGVBQWUsQ0FBQyxNQUFNO1VBQ3BCLE1BQU0sT0FBTztZQUNYLFFBQVEsTUFBTTtZQUNkLFFBQVEsRUFBRSxnQkFBZ0IsY0FBYyxFQUFFO1lBQzFDLE9BQU8sSUFBSTtXQUNaLENBQUM7VUFDRixNQUFNLFNBQVM7WUFDYixRQUFRLFFBQVE7WUFDaEIsUUFBUSxLQUFLO1lBQ2IscUJBQXFCO2NBQ25CLE9BQU87Y0FDUCxPQUFPO2FBQ1I7V0FDRixDQUFDO1VBQ0YsTUFBTSxJQUFJO1lBQ1IsUUFBUSxHQUFHO1lBQ1gsUUFBUSxLQUFLO1lBQ2IscUJBQXFCO2NBQ25CLE9BQU87Y0FDUCxPQUFPO2FBQ1I7V0FDRixDQUFDO1VBQ0YsT0FBTyxVQUFVLEtBQUssT0FBTyxHQUFHO1lBQzlCLENBQUM7WUFDRCxJQUFJO1lBQ0osTUFBTTtXQUNQLEdBQUc7WUFDRixJQUFJO1lBQ0osQ0FBQztZQUNELE1BQU07V0FDUCxDQUFDO1NBQ0gsR0FBRztRQUNKLFdBQVc7VUFDVCxRQUFRLE1BQU07VUFDZCxRQUFRLEVBQUUsT0FBTyxRQUFRLEVBQUU7VUFDM0IsT0FBTyxJQUFJO1VBQ1gsZ0JBQWdCLElBQUk7VUFDcEIsb0JBQW9CLElBQUk7U0FDekI7UUFDRCxhQUFhO1VBQ1gsUUFBUSxNQUFNO1VBQ2QsUUFBUSxFQUFFLGlCQUFpQixRQUFRLEVBQUU7VUFDckMsT0FBTyxJQUFJO1VBQ1gsZ0JBQWdCLElBQUk7VUFDcEIsb0JBQW9CLElBQUk7U0FDekI7UUFDRCxVQUFVO1VBQ1IsUUFBUSxNQUFNO1VBQ2QsUUFBUSxLQUFLO1VBQ2IsUUFBUSxFQUFFLFlBQVksUUFBUSxFQUFFO1VBQ2hDLG9CQUFvQixJQUFJO1NBQ3pCO1FBQ0QsVUFBVTtVQUNSLFFBQVEsTUFBTTtVQUNkLFFBQVEsS0FBSztVQUNiLFFBQVEsRUFBRSxVQUFVLFFBQVEsRUFBRTtVQUM5QixvQkFBb0IsSUFBSTtTQUN6QjtRQUNELFlBQVk7VUFDVixVQUFVLGtDQUFrQztVQUM1QyxRQUFRLEVBQUUsWUFBWSxRQUFRLEVBQUU7U0FDakM7UUFDRCxnQkFBZ0I7VUFDZCxRQUFRLE1BQU07VUFDZCxZQUFZLEVBQUUsT0FBTyxRQUFRLEVBQUU7U0FDaEM7UUFDRCxZQUFZO1VBQ1YsT0FBTyxZQUFZO1VBQ25CLFNBQVMsSUFBSTtVQUNiLFFBQVEsS0FBSztTQUNkO1FBQ0QsV0FBVyxFQUFFLFFBQVEsS0FBSyxFQUFFO1FBQzVCLGFBQWEsRUFBRSxRQUFRLEtBQUssRUFBRTtRQUM5QixNQUFNLEVBQUUsUUFBUSxNQUFNLEVBQUU7UUFDeEIsTUFBTTtVQUNKLFFBQVEsR0FBRztVQUNYLFVBQVUsR0FBRztVQUNiLFFBQVEsS0FBSztVQUNiLE9BQU8sSUFBSTtVQUNYLE1BQU0sSUFBSTtVQUNWLFNBQVMsMkJBQTJCO1lBQ2xDLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1dBQ3ZEO1VBQ0QsVUFBVSxxQkFBcUI7WUFDN0IsS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFLGdCQUFnQjtjQUMvQixHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ2hDLENBQUMsQ0FBQztXQUNKO1NBQ0Y7UUFDRCxNQUFNO1VBQ0osUUFBUSxNQUFNO1VBQ2Qsb0JBQW9CLElBQUk7VUFDeEIsZ0JBQWdCLElBQUk7VUFDcEIsWUFBWTtZQUNWLFFBQVEsUUFBUTtZQUNoQixpQkFBaUIsUUFBUTtjQUN2QixJQUFJLEVBQUUsQ0FBQztjQUNQLE9BQU8sQ0FBQyxLQUFLLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksWUFBWSxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQzthQUNsSDtXQUNGO1NBQ0Y7UUFDRCxjQUFjO1VBQ1o7WUFDRSxVQUFVLHVGQUF1RjtZQUNqRyxRQUFRLEtBQUs7WUFDYixPQUFPLElBQUk7WUFDWCxRQUFRLEtBQUs7WUFDYixjQUFjLElBQUk7WUFDbEIsTUFBTSxJQUFJO1dBQ1g7VUFDRDtZQUNFLFVBQVUsTUFBTTtZQUNoQixZQUFZO2NBQ1YsT0FBTztjQUNQLE9BQU87YUFDUjtZQUNELFFBQVEsT0FBTztZQUNmLE9BQU8sSUFBSTtZQUNYLFFBQVEsS0FBSztZQUNiLE1BQU0sSUFBSTtXQUNYO1VBQ0Q7WUFDRSxVQUFVLEdBQUc7WUFDYixZQUFZO2NBQ1YsT0FBTztjQUNQLE9BQU87YUFDUjtZQUNELE9BQU8sS0FBSztZQUNaLFFBQVEsS0FBSztZQUNiLE1BQU0sSUFBSTtXQUNYO1NBQ0Y7T0FDRixDQUFDO01BQ0YsS0FBSyxLQUFLLENBQUMsZ0RBQWdELE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRO1FBQy9FLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRztVQUNkLE9BQU8sSUFBSTtVQUNYLFFBQVEsS0FBSztTQUNkLENBQUM7T0FDSCxDQUFDLENBQUM7TUFDSCxPQUFPLE9BQU8sQ0FBQztLQUNoQixDQUFDOztJQUVGLE1BQU0sY0FBYztNQUNsQixnQkFBZ0IsSUFBSTtNQUNwQixTQUFTLEtBQUs7S0FDZixDQUFDO0lBQ0YsTUFBTSxXQUFXO01BQ2YsVUFBVSxPQUFPO01BQ2pCLEdBQUcsV0FBVztLQUNmLENBQUM7SUFDRixNQUFNLGNBQWM7TUFDbEIsMEJBQTBCO1FBQ3hCLFFBQVEsRUFBRSxpQkFBaUIsUUFBUSxFQUFFO1FBQ3JDLEdBQUcsUUFBUTtPQUNaO01BQ0Qsd0JBQXdCO1FBQ3RCLFFBQVEsRUFBRSxrQkFBa0IsUUFBUSxFQUFFO1FBQ3RDLEdBQUcsUUFBUTtPQUNaO01BQ0Qsc0JBQXNCO1FBQ3BCLFFBQVEsRUFBRSxhQUFhLFFBQVEsRUFBRTtRQUNqQyxHQUFHLFFBQVE7T0FDWjtNQUNELGdCQUFnQjtRQUNkLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDbkIsR0FBRyxRQUFRO09BQ1o7TUFDRCxZQUFZO1FBQ1YsVUFBVSxPQUFPO1FBQ2pCLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDbkIsR0FBRyxXQUFXO09BQ2Y7TUFDRCxzQkFBc0I7UUFDcEIsUUFBUSxFQUFFLGFBQWEsUUFBUSxFQUFFO1FBQ2pDLEdBQUcsUUFBUTtPQUNaO01BQ0Qsc0JBQXNCO1FBQ3BCLFFBQVEsRUFBRSxhQUFhLFFBQVEsRUFBRTtRQUNqQyxHQUFHLFFBQVE7T0FDWjtLQUNGLENBQUM7SUFDRixNQUFNLE1BQU0sUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDOztJQUVsQyxNQUFNLGlCQUFpQixVQUFVO01BQy9CLE1BQU0sVUFBVSxFQUFFLENBQUM7TUFDbkIsTUFBTSxRQUFRLFFBQVEsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7TUFDcEUsTUFBTSxNQUFNLFFBQVEsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztNQUN6QyxNQUFNLFdBQVcsa0JBQWtCO1FBQ2pDLElBQUksSUFBSSxFQUFFO1VBQ1IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNuQixNQUFNLENBQUMsSUFBSSxFQUFFLGtCQUFrQjtjQUM3QixRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQ3hCLENBQUMsQ0FBQztXQUNKLE1BQU07WUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2NBQ3RCLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNuQjtZQUNELE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVTtjQUN2QixJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUM1QixNQUFNLEtBQUssR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2VBQ3pDO2NBQ0QsSUFBSSxXQUFXLENBQUMsTUFBTSxNQUFNLENBQUMsRUFBRTtnQkFDN0IsTUFBTSxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7ZUFDcEU7Y0FDRCxJQUFJLFdBQVcsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNyRixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUM7ZUFDeEI7Y0FDRCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUM7ZUFDNUI7Y0FDRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxFQUFFO2dCQUM1QixNQUFNLFFBQVEsR0FBRyxNQUFNLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2VBQzlDO2FBQ0YsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztXQUN4QjtTQUNGO09BQ0YsQ0FBQztNQUNGLE1BQU0sYUFBYSxRQUFRO1FBQ3pCLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUN6QixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN0QjtRQUNELE9BQU8sT0FBTyxDQUFDO09BQ2hCLENBQUM7TUFDRixRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7TUFDeEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7TUFDaEIsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO01BQzdCLE9BQU87UUFDTCxLQUFLLEtBQUs7UUFDVixHQUFHO1FBQ0gsUUFBUTtRQUNSLFVBQVU7T0FDWCxDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLFNBQVMsS0FBSyxLQUFLLENBQUM7SUFDMUIsTUFBTSxNQUFNLFFBQVEsSUFBSSxDQUFDO0lBQ3pCLE1BQU0sZ0JBQWdCLFFBQVEsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwRSxNQUFNLHVCQUF1QixzQkFBc0I7TUFDakQsTUFBTSxTQUFTLE1BQU0sSUFBSSxNQUFNLE9BQU8sSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDckQsTUFBTSxXQUFXLGVBQWU7UUFDOUIsSUFBSSxJQUFJLFFBQVEsT0FBTyxHQUFHLENBQUMsRUFBRTtVQUMzQixHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzNDO1FBQ0QsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksTUFBTSxDQUFDLENBQUM7T0FDakMsQ0FBQztNQUNGLE1BQU0sZ0JBQWdCLFNBQVM7UUFDN0IsTUFBTSxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRztVQUM3QixNQUFNLEtBQUs7VUFDWCxTQUFTLEVBQUU7VUFDWCxPQUFPLEVBQUU7U0FDVixHQUFHLEtBQUssQ0FBQztRQUNWLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEIsT0FBTyxHQUFHLENBQUM7T0FDWixDQUFDO01BQ0YsTUFBTSxvQkFBb0Isb0JBQW9CO1FBQzVDLE1BQU0sVUFBVSxNQUFNLGVBQWUsQ0FBQyxHQUFHLFNBQVMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNsRSxNQUFNLGtCQUFrQixPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxPQUFPLGdCQUFnQixDQUFDO1FBQ2xHLElBQUksZUFBZSxJQUFJLGVBQWUsT0FBTyxFQUFFO1VBQzdDLE9BQU8sU0FBUyxJQUFJLFVBQVUsQ0FBQyxlQUFlLEVBQUUsU0FBUyxDQUFDLEdBQUcsU0FBUyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3RixNQUFNO1VBQ0wsT0FBTyxLQUFLLENBQUM7U0FDZDtPQUNGLENBQUM7TUFDRixNQUFNLGFBQWEsOEJBQThCO1FBQy9DLElBQUksZUFBZSxDQUFDO1FBQ3BCLE1BQU0sV0FBVyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsTUFBTSxlQUFlLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDekUsTUFBTSxpQkFBaUIsaUJBQWlCLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzVELElBQUksY0FBYyxFQUFFO1VBQ2xCLElBQUksWUFBWSxLQUFLLGNBQWMsRUFBRTtZQUNuQyxrQkFBa0IsUUFBUSxDQUFDO1lBQzNCLFlBQVksU0FBUyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDaEMsTUFBTTtZQUNMLGtCQUFrQixjQUFjLENBQUM7V0FDbEM7U0FDRixNQUFNLElBQUksUUFBUSxFQUFFO1VBQ25CLGtCQUFrQixRQUFRLENBQUM7VUFDM0IsWUFBWSxTQUFTLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoQyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUU7VUFDcEIsT0FBTyxHQUFHLENBQUM7U0FDWjtRQUNELE1BQU0sU0FBUyxlQUFlLEdBQUcsYUFBYSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLElBQUksUUFBUSxFQUFFO1VBQ1osS0FBSyxLQUFLLENBQUMsUUFBUSxFQUFFLFdBQVc7WUFDOUIsTUFBTSxhQUFhLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQyxNQUFNLGFBQWEsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7V0FDdEMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxNQUFNLGlCQUFpQixhQUFhLENBQUMsZUFBZSxDQUFDLEdBQUcsZUFBZSxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzdGLE9BQU8sVUFBVSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7T0FDdEQsQ0FBQztNQUNGLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUNuQyxJQUFJLFFBQVEsT0FBTyxHQUFHLENBQUMsRUFBRTtRQUN2QixNQUFNLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sTUFBTSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsTUFBTSxXQUFXLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDakUsUUFBUSxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxRQUFRLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO09BQ3BFO01BQ0QsT0FBTyxRQUFRLENBQUM7S0FDakIsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLFFBQVE7TUFDaEMsT0FBTyxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN4QixJQUFJLFVBQVUsS0FBSyxDQUFDO01BQ3BCLE1BQU0sTUFBTTtRQUNWLE1BQU0sT0FBTztRQUNiLFNBQVMsRUFBRTtRQUNYLE9BQU8sRUFBRTtRQUNULFVBQVUsSUFBSTtPQUNmLENBQUM7TUFDRixJQUFJLElBQUksS0FBSyxHQUFHLEVBQUU7UUFDaEIsVUFBVSxJQUFJLFFBQVEsQ0FBQywyQ0FBMkMsRUFBRSx3QkFBd0I7VUFDMUYsUUFBUSxFQUFFO2VBQ0wsR0FBRztZQUNOLEdBQUcsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLE1BQU07ZUFDSCxHQUFHO1lBQ04sR0FBRyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyQixNQUFNO2VBQ0gsR0FBRztZQUNOLElBQUksS0FBSyxRQUFRLENBQUMsNkNBQTZDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtjQUN0RixHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7YUFDcEI7WUFDRCxNQUFNO1dBQ1A7VUFDRCxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUU7WUFDZCxNQUFNLElBQUksRUFBRSxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsRUFBRTtjQUNMLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN4QjtXQUNGO1VBQ0QsT0FBTyxFQUFFLENBQUM7U0FDWCxDQUFDLENBQUM7T0FDSjtNQUNELEdBQUcsS0FBSyxHQUFHLE9BQU8sSUFBSSxLQUFLLENBQUM7TUFDNUIsT0FBTyxHQUFHLENBQUM7S0FDWixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsWUFBWTtNQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ3ZCLE9BQU8sRUFBRSxDQUFDO09BQ1g7TUFDRCxXQUFXLFFBQVEsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3hDLFdBQVcsUUFBUSxRQUFRLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDekQsT0FBTyxLQUFLLElBQUksQ0FBQyxRQUFRLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLFFBQVE7UUFDbEUsTUFBTSxXQUFXLEtBQUssSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDMUUsTUFBTSxNQUFNLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDM0IsSUFBSSxRQUFRLE9BQU8sRUFBRTtVQUNuQixHQUFHLFNBQVMsR0FBRyxRQUFRLENBQUM7U0FDekI7UUFDRCxPQUFPLEdBQUcsQ0FBQztPQUNaLENBQUMsUUFBUSxFQUFFLENBQUM7S0FDZCxDQUFDO0lBQ0YsTUFBTSxhQUFhLG9CQUFvQjtNQUNyQyxJQUFJLGFBQWEsRUFBRSxDQUFDO01BQ3BCLElBQUksZ0JBQWdCLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQzdDLElBQUksYUFBYSxLQUFLLEVBQUUsRUFBRTtRQUN4QixPQUFPLEVBQUUsQ0FBQztPQUNYO01BQ0QsTUFBTSxhQUFhLE9BQU87UUFDeEIsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztPQUN4RCxDQUFDO01BQ0YsTUFBTSxtQkFBbUIsZUFBZTtRQUN0QyxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztPQUMxRixDQUFDO01BQ0YsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDcEIsTUFBTSxVQUFVLE1BQU0sVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sRUFBRTtVQUNaLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxTQUFTLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUNyQjtNQUNELElBQUksU0FBUyxJQUFJLE1BQU0sRUFBRTtRQUN2QixNQUFNLFVBQVUsTUFBTSxRQUFRLENBQUM7UUFDL0IsSUFBSSxPQUFPLEtBQUssS0FBSyxFQUFFO1VBQ3JCLE9BQU8sRUFBRSxDQUFDO1NBQ1gsTUFBTTtVQUNMLGdCQUFnQixPQUFPLElBQUksYUFBYSxDQUFDO1NBQzFDO09BQ0Y7TUFDRCxJQUFJLE9BQU8sTUFBTSxNQUFNLElBQUksTUFBTSxPQUFPLElBQUksTUFBTSxDQUFDO01BQ25ELElBQUksV0FBVyxDQUFDO01BQ2hCLE1BQU0sUUFBUSxhQUFhLENBQUMsTUFBTSxTQUFTLENBQUMsQ0FBQztNQUM3QyxJQUFJLEtBQUssT0FBTyxHQUFHLENBQUMsRUFBRTtRQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUU7VUFDbEIsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQ3RCO1FBQ0QsT0FBTyxNQUFNLFNBQVMsQ0FBQztRQUN2QixjQUFjLG9CQUFvQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztPQUNuRCxNQUFNO1FBQ0wsY0FBYyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQ3BEO01BQ0QsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLFdBQVcsQ0FBQztNQUM5RSxNQUFNLENBQUMsTUFBTSxPQUFPLEVBQUUsaUJBQWlCO1FBQ3JDLE1BQU0sV0FBVyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsSUFBSSxRQUFRLEVBQUU7VUFDWixHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQzFDO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxDQUFDLE1BQU0sV0FBVyxFQUFFLGlCQUFpQjtRQUN6QyxNQUFNLFdBQVcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLElBQUksUUFBUSxFQUFFO1VBQ1osR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztTQUMzQztPQUNGLENBQUMsQ0FBQztNQUNILE1BQU0sQ0FBQyxNQUFNLFFBQVEsRUFBRSxTQUFTO1FBQzlCLE1BQU0sV0FBVyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRTtVQUN2QyxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDcEM7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO01BQ2xDLEdBQUcsVUFBVSxDQUFDLFdBQVcsRUFBRTtRQUN6QixVQUFVLFVBQVU7UUFDcEIsTUFBTSxDQUFDLEtBQUs7T0FDYixDQUFDLENBQUM7TUFDSCxNQUFNLFFBQVEsRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7TUFDMUMsTUFBTSxvQkFBb0IsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7TUFDdkQsTUFBTSxpQkFBaUIsS0FBSyxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQzNGLE1BQU0sQ0FBQyxhQUFhLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRO1FBQ3ZDLElBQUksUUFBUSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDL0MsSUFBSSxJQUFJLEtBQUssa0JBQWtCLElBQUksbUNBQW1DLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtVQUNsRixRQUFRLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1VBQy9CLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsS0FBSyxTQUFTLEVBQUU7WUFDdEQsT0FBTztXQUNSO1NBQ0Y7UUFDRCxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7VUFDcEIsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxLQUFLLFNBQVMsRUFBRTtZQUN0RCxPQUFPO1dBQ1I7U0FDRjtRQUNELElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRTtVQUN4QixJQUFJLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCLElBQUksY0FBYyxLQUFLLENBQUMsRUFBRTtjQUN4QixPQUFPO2FBQ1I7WUFDRCxNQUFNLFdBQVcsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNsRSxRQUFRLFFBQVEsR0FBRyxjQUFjLEdBQUcsSUFBSSxDQUFDO1dBQzFDO1NBQ0Y7UUFDRCxJQUFJLElBQUksS0FBSyxRQUFRLElBQUksS0FBSyxFQUFFO1VBQzlCLGNBQWMsZ0JBQWdCLENBQUM7U0FDaEM7UUFDRCxjQUFjLElBQUksR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQztPQUN4QyxDQUFDLENBQUM7TUFDSCxNQUFNLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO01BQ3ZDLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO01BQ3hCLE9BQU8sVUFBVSxDQUFDO0tBQ25CLENBQUM7O0lBRUYsTUFBTSxVQUFVLFVBQVU7TUFDeEIsTUFBTSxZQUFZLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztNQUN6QyxNQUFNLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQzNDLE1BQU0sWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDOUMsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDM0IsTUFBTSxZQUFZLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUU7VUFDcEMsYUFBYTtVQUNiLEtBQUs7VUFDTCxHQUFHLEdBQUcsQ0FBQztTQUNSLENBQUMsQ0FBQztPQUNKO01BQ0QsTUFBTSxZQUFZLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRTtRQUNqQyxhQUFhO1FBQ2IsS0FBSztRQUNMLEdBQUc7T0FDSixDQUFDLENBQUM7TUFDSCxNQUFNLFlBQVksQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFO1FBQ2pDLGFBQWE7UUFDYixLQUFLO1FBQ0wsS0FBSztPQUNOLENBQUMsQ0FBQztNQUNILE1BQU0sWUFBWSxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUU7UUFDakMsYUFBYTtRQUNiLEtBQUs7UUFDTCxTQUFTO09BQ1YsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLFlBQVksVUFBVTtNQUMxQixNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3ZDLE1BQU0sb0JBQW9CLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUNuQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDaEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDbEIsT0FBTyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQ3BDO01BQ0QsT0FBTztRQUNMLEtBQUssT0FBTyxJQUFJO1FBQ2hCLEtBQUssT0FBTyxJQUFJO1FBQ2hCLFVBQVUsT0FBTyxTQUFTO1FBQzFCLFlBQVksT0FBTyxXQUFXO1FBQzlCLE9BQU8sc0JBQXNCO1VBQzNCLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN2QztRQUNELFFBQVEsK0JBQStCO1VBQ3JDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDakQ7UUFDRCxRQUFRLHNCQUFzQjtVQUM1QixZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDeEM7UUFDRCxPQUFPLCtCQUErQixXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQztRQUNwRixTQUFTLFNBQVMsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7UUFDOUMsVUFBVSxpQkFBaUIsZUFBZSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDO1FBQy9ELFdBQVcsK0JBQStCLGVBQWUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDO1FBQzVGLFVBQVUsUUFBUSxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztRQUM5QyxlQUFlLHNDQUFzQyxhQUFhLENBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQztRQUMvSCxZQUFZLEtBQUssQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDO09BQ3RDLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sc0JBQXNCLE9BQU87TUFDakMsUUFBUSxHQUFHLFlBQVksRUFBRTtXQUNwQixNQUFNO1dBQ04sTUFBTTtXQUNOLFVBQVU7UUFDYixPQUFPLElBQUksQ0FBQzs7UUFFWixPQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0YsQ0FBQztJQUNGLE1BQU0saUJBQWlCLGdDQUFnQztNQUNyRCxNQUFNLHdCQUF3QixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDMUMsTUFBTSx3QkFBd0IsS0FBSztRQUNqQyxTQUFTLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyQyxXQUFXLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDeEIsQ0FBQztNQUNGLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNO1FBQ3RCLFdBQVcsSUFBSSxFQUFFLENBQUM7T0FDbkIsQ0FBQyxDQUFDO01BQ0gsTUFBTSxHQUFHLENBQUMsbUJBQW1CLEVBQUUsS0FBSztRQUNsQyxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDdEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxFQUFFO1VBQzdCLFNBQVMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7VUFDOUIsV0FBVyxhQUFhLEVBQUUsQ0FBQztTQUM1QjtPQUNGLENBQUMsQ0FBQztNQUNILE1BQU0sR0FBRyxDQUFDLGFBQWEsRUFBRSxLQUFLO1FBQzVCLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUN0QixJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEVBQUU7VUFDN0IscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDMUI7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLEdBQUcsQ0FBQyx1QkFBdUIsRUFBRSxNQUFNO1FBQ3ZDLFdBQVcsYUFBYSxFQUFFLENBQUM7T0FDNUIsQ0FBQyxDQUFDO01BQ0gsTUFBTSxHQUFHLENBQUMsZ0NBQWdDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztNQUNuRSxNQUFNLEdBQUcsQ0FBQyxTQUFTLEVBQUUscUJBQXFCLENBQUMsQ0FBQztNQUM1QyxNQUFNLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSztRQUN0QixNQUFNLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDMUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUU7VUFDMUIsT0FBTztTQUNSO1FBQ0QsTUFBTSxTQUFTLEdBQUcsR0FBRyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUM7UUFDcEQsSUFBSSxPQUFPLElBQUksRUFBRSxJQUFJLE9BQU8sSUFBSSxFQUFFLElBQUksT0FBTyxJQUFJLEVBQUUsSUFBSSxPQUFPLElBQUksRUFBRSxJQUFJLE9BQU8sS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksTUFBTSxFQUFFO1VBQzdHLHFCQUFxQixFQUFFLENBQUM7VUFDeEIsTUFBTSxZQUFZLEVBQUUsQ0FBQztTQUN0QjtRQUNELElBQUksT0FBTyxLQUFLLEVBQUUsSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFO1VBQ25DLE1BQU0sWUFBWSxFQUFFLENBQUM7U0FDdEI7UUFDRCxJQUFJLHFCQUFxQixJQUFJLEVBQUUsSUFBSSxXQUFXLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxXQUFXLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1VBQy9HLElBQUksQ0FBQyxNQUFNLFFBQVEsRUFBRSxFQUFFO1lBQ3JCLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1dBQ3ZCO1VBQ0QsTUFBTSxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7VUFDOUIscUJBQXFCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztVQUNqQyxNQUFNLFlBQVksRUFBRSxDQUFDO1NBQ3RCO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUs7UUFDeEIsTUFBTSxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQzFCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO1VBQzFCLE9BQU87U0FDUjtRQUNELElBQUksT0FBTyxJQUFJLEVBQUUsSUFBSSxPQUFPLElBQUksRUFBRSxJQUFJLE9BQU8sSUFBSSxFQUFFLElBQUksT0FBTyxJQUFJLEVBQUUsSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFO1VBQ3RGLElBQUksV0FBVyxPQUFPLEVBQUU7WUFDdEIscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDMUI7VUFDRCxPQUFPO1NBQ1I7UUFDRCxNQUFNLFNBQVMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNuRCxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxPQUFPLEdBQUcsRUFBRSxLQUFLLE9BQU8sS0FBSyxHQUFHLElBQUksT0FBTyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFO1VBQ3pHLFdBQVcsYUFBYSxFQUFFLENBQUM7VUFDM0IsU0FBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7VUFDcEMsV0FBVyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1VBQ3ZCLHFCQUFxQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDaEMsT0FBTztTQUNSO1FBQ0QsTUFBTSw0QkFBNEIsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDeEYsSUFBSSx5QkFBeUIsRUFBRTtVQUM3QixXQUFXLGFBQWEsRUFBRSxDQUFDO1NBQzVCO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUs7UUFDMUIsSUFBSSxXQUFXLE9BQU8sRUFBRTtVQUN0QixxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxQjtPQUNGLENBQUMsQ0FBQztNQUNILE1BQU0sMEJBQTBCLFNBQVMsS0FBSyxVQUFVLEtBQUssdUJBQXVCLENBQUM7TUFDckYsTUFBTSx1QkFBdUIsU0FBUyxLQUFLLFVBQVUsS0FBSyxZQUFZLElBQUksS0FBSyxLQUFLLEtBQUssSUFBSSxDQUFDO01BQzlGLE1BQU0sMEJBQTBCLFNBQVMsS0FBSyxVQUFVLEtBQUssaUJBQWlCLElBQUksS0FBSyxVQUFVLEtBQUssZ0JBQWdCLENBQUM7TUFDdkgsTUFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUs7UUFDdEIsSUFBSSxDQUFDLFVBQVUsS0FBSyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1VBQ3hHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFCO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxHQUFHLENBQUMsOEJBQThCLEVBQUUsS0FBSztRQUM3QyxJQUFJLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO1VBQzNCLE1BQU0sWUFBWSxFQUFFLENBQUM7U0FDdEI7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsVUFBVTtNQUNyQyxNQUFNLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3pDLE1BQU0sWUFBWSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUN2RCxDQUFDOztJQUVGLE1BQU0sY0FBYyxVQUFVO01BQzVCLE1BQU0saUJBQWlCLE9BQU8sRUFBRSxDQUFDO01BQ2pDLE1BQU0sUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDdEIsTUFBTSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUN0QixNQUFNLGNBQWM7UUFDbEIsTUFBTSxFQUFFO1FBQ1IsUUFBUSxLQUFLO1FBQ2IsY0FBYyxNQUFNO1VBQ2xCLFlBQVksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsS0FBSyxrQkFBa0I7VUFDckIsT0FBTyxZQUFZLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDdEY7UUFDRCxnQkFBZ0IsTUFBTTtVQUNwQixNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUN0QixNQUFNLFFBQVEsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7VUFDdkMsS0FBSyxTQUFTLEdBQUcsZUFBZSxDQUFDLE1BQU0sVUFBVSxDQUFDLENBQUM7VUFDbkQsTUFBTSxTQUFTLENBQUMsUUFBUSxFQUFFO1lBQ3hCLEtBQUs7WUFDTCxXQUFXLEtBQUssQ0FBQyxXQUFXLEtBQUssRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLGVBQWUsRUFBRTtXQUNqRSxDQUFDLENBQUM7U0FDSjtRQUNELE1BQU0sTUFBTTtVQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsTUFBTSxNQUFNO1VBQ1YsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEtBQUssQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsT0FBTyxNQUFNO1VBQ1gsS0FBSyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDbkM7UUFDRCxPQUFPLE1BQU07VUFDWCxLQUFLLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQzVCO1FBQ0QsU0FBUyxNQUFNO1VBQ2IsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUM1QztRQUNELFNBQVMsTUFBTTtVQUNiLE9BQU8sT0FBTyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDNUM7UUFDRCxVQUFVLFlBQVk7VUFDcEIsT0FBTyxRQUFRLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDdkQ7UUFDRCxRQUFRLFlBQVk7VUFDbEIsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDakM7UUFDRCxPQUFPLDBCQUEwQjtVQUMvQixLQUFLLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ3pEO09BQ0YsQ0FBQztNQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDbEIsY0FBYyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDNUM7TUFDRCxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUM3QixPQUFPLFdBQVcsQ0FBQztLQUNwQixDQUFDOztJQUVGLE1BQU0sb0JBQW9CO01BQ3hCLENBQUM7TUFDRCxFQUFFO01BQ0YsRUFBRSxLQUFLO01BQ1AsRUFBRSxJQUFJO01BQ04sRUFBRTtNQUNGLEVBQUU7TUFDRixFQUFFO01BQ0YsR0FBRztNQUNILEdBQUc7TUFDSCxFQUFFO01BQ0YsRUFBRTtNQUNGLEVBQUU7TUFDRixFQUFFO01BQ0YsRUFBRTtNQUNGLEVBQUU7TUFDRixFQUFFO01BQ0YsRUFBRTtNQUNGLEVBQUU7TUFDRixFQUFFLEtBQUs7TUFDUCxFQUFFLEdBQUc7TUFDTCxFQUFFLEtBQUs7TUFDUCxFQUFFLE1BQU07S0FDVCxPQUFPLENBQUMsR0FBRyxRQUFRLFVBQVUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDL0MsTUFBTSxrQkFBa0Isc0JBQXNCLENBQUM7SUFDL0MsTUFBTSxrQkFBa0IsS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDO0lBQ3hFLE1BQU0sZ0JBQWdCLEtBQUs7TUFDekIsTUFBTSxVQUFVLENBQUMsUUFBUSxDQUFDO01BQzFCLE9BQU8sT0FBTyxLQUFLLEVBQUUsVUFBVSxJQUFJLE9BQU8sS0FBSyxFQUFFLE9BQU8sQ0FBQztLQUMxRCxDQUFDO0lBQ0YsTUFBTSwyQkFBMkIsS0FBSztNQUNwQyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUN0QixNQUFNLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDMUIsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7T0FDOUksTUFBTTtRQUNMLE9BQU8sS0FBSyxDQUFDO09BQ2Q7S0FDRixDQUFDO0lBQ0YsTUFBTSx3QkFBd0IsS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ3hILE1BQU0sa0JBQWtCLG1DQUFtQztNQUN6RCxJQUFJLFNBQVMsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRTtRQUNuRCxNQUFNLGVBQWUsT0FBTyxrQkFBa0IsQ0FBQztRQUMvQyxJQUFJLENBQUMsWUFBWSxFQUFFO1VBQ2pCLE9BQU8sSUFBSSxDQUFDO1NBQ2IsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLE9BQU8sa0JBQWtCLEVBQUUsY0FBYyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsT0FBTyxrQkFBa0IsRUFBRSxlQUFlLENBQUMsRUFBRTtVQUM5SCxPQUFPLEtBQUssQ0FBQztTQUNkLE1BQU07VUFDTCxPQUFPLGVBQWUsS0FBSyxZQUFZLFNBQVMsWUFBWSxFQUFFLENBQUM7U0FDaEU7T0FDRixNQUFNO1FBQ0wsT0FBTyxLQUFLLENBQUM7T0FDZDtLQUNGLENBQUM7SUFDRixNQUFNLFVBQVUsVUFBVTtNQUN4QixJQUFJLEVBQUUsQ0FBQztNQUNQLE1BQU0sTUFBTSxNQUFNLElBQUksQ0FBQztNQUN2QixNQUFNLFlBQVksa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDN0MsTUFBTSxjQUFjLENBQUMsS0FBSyxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO01BQ3RGLE1BQU0sb0JBQW9CLGdCQUFnQjtRQUN4QyxJQUFJLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxFQUFFO1VBQy9CLE9BQU87U0FDUjtRQUNELE1BQU0sT0FBTyxNQUFNLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE1BQU0sa0JBQWtCLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxlQUFlLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNqRyxNQUFNLHFCQUFxQixHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZFLElBQUksa0JBQWtCLEtBQUssZUFBZSxJQUFJLE9BQU8sRUFBRTtVQUNyRCxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLGVBQWUsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUM7VUFDM0UsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLGVBQWUsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUM7VUFDOUUscUJBQXFCLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1VBQy9DLE1BQU0sR0FBRyxDQUFDLGVBQWUsR0FBRyxTQUFTLEdBQUcsT0FBTyxFQUFFLGlCQUFpQixDQUFDLENBQUM7VUFDcEUsTUFBTSxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sR0FBRyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztTQUN0RTtPQUNGLENBQUM7TUFDRixJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUMzQixNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSztVQUNyQixpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7VUFDM0IsTUFBTSxHQUFHLENBQUMsK0JBQStCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztVQUM5RCxNQUFNLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxLQUFLLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNyRixDQUFDLENBQUM7T0FDSjtLQUNGLENBQUM7O0lBRUYsTUFBTSxnQkFBZ0Isc0JBQXNCO01BQzFDLEtBQUs7TUFDTCxRQUFRO0tBQ1QsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxnQkFBZ0IsZUFBZTtNQUNuQyxJQUFJO01BQ0osRUFBRTtLQUNILENBQUMsQ0FBQztJQUNILE1BQU0sbUJBQW1CLG1CQUFtQjtNQUMxQyxNQUFNLFVBQVUsWUFBWSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDL0MsTUFBTSxlQUFlLFlBQVksUUFBUSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsQ0FBQztNQUMzRCxPQUFPLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3hGLENBQUM7SUFDRixNQUFNLG9CQUFvQixpQkFBaUIsQ0FBQyxFQUFFLENBQUMsYUFBYSxLQUFLLE1BQU0sRUFBRSxhQUFhLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDakcsTUFBTSxpQkFBaUIsaUJBQWlCO01BQ3RDLE1BQU0sU0FBUyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDdEMsTUFBTSxTQUFTLFFBQVEsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLHVCQUF1QixDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7TUFDaEYsT0FBTyxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekUsQ0FBQztJQUNGLE1BQU0sY0FBYyw2QkFBNkI7TUFDL0MsTUFBTSxPQUFPLFlBQVksUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQzVDLE9BQU8sRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxLQUFLLE1BQU0sQ0FBQyxFQUFFLGNBQWMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDekcsQ0FBQztJQUNGLE1BQU0sZUFBZSxpQkFBaUIsd0JBQXdCLENBQUMsYUFBYSxLQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLHdCQUF3QixDQUFDLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQztJQUN6SyxNQUFNLGlCQUFpQixpQkFBaUI7TUFDdEMsTUFBTSxlQUFlLFNBQVMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO01BQzlFLE9BQU8sWUFBWSxDQUFDLGFBQWEsS0FBSyxNQUFNLENBQUMsSUFBSSxZQUFZLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0tBQ3ZGLENBQUM7SUFDRixNQUFNLGFBQWEsc0NBQXNDO01BQ3ZELElBQUksTUFBTSxDQUFDLGFBQWEsU0FBUyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsTUFBTSxDQUFDLEVBQUU7UUFDL0UsT0FBTyxVQUFVLENBQUMsS0FBSyxFQUFFLGFBQWEsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QjtVQUM1RSxJQUFJLG1CQUFtQixRQUFRLENBQUMsYUFBYSxTQUFTLENBQUMsRUFBRTtZQUN2RCxPQUFPLFlBQVksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxNQUFNLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1dBQ3hHLE1BQU07WUFDTCxPQUFPLFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1dBQ3JDO1NBQ0YsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7T0FDekIsTUFBTTtRQUNMLE9BQU8sYUFBYSxDQUFDO09BQ3RCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLDRCQUE0QjtNQUNoRCxNQUFNLGVBQWUsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLGFBQWEsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDbkYsTUFBTSxhQUFhLFlBQVksS0FBSyxDQUFDLFlBQVksWUFBWSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUN6TSxPQUFPLEtBQUssQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLElBQUksWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0tBQ3pOLENBQUM7SUFDRixNQUFNLFNBQVMsNEJBQTRCLEdBQUcsVUFBVSxHQUFHLGFBQWEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7O0lBRW5ILE1BQU0sZ0NBQWdDLFNBQVM7TUFDN0MsTUFBTSxXQUFXLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUNuQyxPQUFPLFdBQVcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsU0FBUyxRQUFRLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztLQUNyRyxDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsU0FBUztNQUMvQixNQUFNLFdBQVcsNkJBQTZCLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDdEQsTUFBTSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztNQUMzQixPQUFPLFFBQVEsQ0FBQztLQUNqQixDQUFDO0lBQ0YsTUFBTSxrQkFBa0IscUJBQXFCO01BQzNDLE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQ2hELE9BQU8sTUFBTSxDQUFDLE9BQU8sUUFBUSxFQUFFLEVBQUUsV0FBVyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ2hGLENBQUM7SUFDRixNQUFNLGdCQUFnQixNQUFNLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDO0lBQzFGLE1BQU0sbUJBQW1CLGtEQUFrRDtNQUN6RSxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN0QixpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixPQUFPLGVBQWUsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO09BQ3JDO01BQ0QsSUFBSSxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ3pELFFBQVEsQ0FBQyxjQUFjLEVBQUUsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztPQUN0RDtNQUNELE1BQU0sV0FBVyxZQUFZLENBQUMsT0FBTyxJQUFJLEVBQUUsYUFBYSxPQUFPLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ3JGLE1BQU0sQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLEVBQUUsU0FBUztRQUMxQyxRQUFRLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ2pDLENBQUMsQ0FBQztNQUNILGVBQWUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7TUFDckMsT0FBTyxRQUFRLENBQUM7S0FDakIsQ0FBQztJQUNGLE1BQU0scUJBQXFCLGtDQUFrQztNQUMzRCxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN0QixJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRTtVQUN4QixNQUFNLDhCQUE4QixNQUFNO1lBQ3hDLE1BQU0sU0FBUyxvQkFBb0IsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxRQUFRLEVBQUUsU0FBUyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBQ25LLE9BQU8sTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztXQUN2QixDQUFDO1VBQ0YsTUFBTSwwQkFBMEIsS0FBSyxDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxFQUFFLHlCQUF5QjtZQUNuRyxNQUFNLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzVCLE9BQU8sVUFBVSxDQUFDO1dBQ25CLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztVQUN0QixLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7VUFDakIsUUFBUSxDQUFDLFNBQVMsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xCLE9BQU8sZUFBZSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7T0FDdkM7TUFDRCxNQUFNLFdBQVcsY0FBYyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7TUFDN0MsTUFBTSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsRUFBRSxTQUFTO1FBQzFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDMUIsQ0FBQyxDQUFDO01BQ0gsZUFBZSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztNQUNyQyxPQUFPLFFBQVEsQ0FBQztLQUNqQixDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsb0JBQW9CO01BQzdDLE1BQU0sbUJBQW1CLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDeEQsT0FBTyxRQUFRLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDckUsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLHdCQUF3QixRQUFRLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO0lBQzFJLE1BQU0sU0FBUyxrQkFBa0I7TUFDL0IsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxRQUFRLEtBQUssQ0FBQyxRQUFRLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQzFJLENBQUM7SUFDRixNQUFNLGlCQUFpQixrQ0FBa0M7TUFDdkQsTUFBTSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztNQUN4QixNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQ3ZCLE9BQU8saUJBQWlCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUNuSyxDQUFDO0lBQ0YsTUFBTSxjQUFjLHVDQUF1QyxPQUFPLEdBQUcsY0FBYyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsY0FBYyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7O0lBRXpKLE1BQU0sb0JBQW9CLHFCQUFxQjtNQUM3QyxNQUFNLFdBQVcsWUFBWSxRQUFRLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQ3hELE1BQU0sV0FBVyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLE1BQU07UUFDbkcsV0FBVyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsYUFBYSxLQUFLLE1BQU0sRUFBRSxhQUFhLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPO1VBQzNGLE1BQU0sVUFBVSxPQUFPLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQ3hDLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztNQUNILE9BQU8sUUFBUSxDQUFDO0tBQ2pCLENBQUM7O0lBRUYsTUFBTSx5QkFBeUIseUJBQXlCO01BQ3RELE1BQU0sTUFBTSxTQUFTLE9BQU8sRUFBRSxDQUFDO01BQy9CLE9BQU8sS0FBSyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxZQUFZLFFBQVEsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFlBQVksUUFBUSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsRUFBRSxvQkFBb0I7UUFDekssSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUU7VUFDdkIsT0FBTyxRQUFRLEtBQUssQ0FBQyxNQUFNO1lBQ3pCLEdBQUcsZUFBZSxFQUFFLENBQUM7WUFDckIsV0FBVyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTztjQUN0RCxTQUFTLE9BQU8sQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUM7YUFDakMsQ0FBQyxDQUFDO1dBQ0osQ0FBQyxDQUFDO1NBQ0osTUFBTTtVQUNMLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztTQUN4QjtPQUNGLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUMzQixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsbUJBQW1CO01BQzFDLE1BQU0sT0FBTyxZQUFZLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUMzQyxNQUFNLFNBQVMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUMvQixPQUFPLFVBQVUsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUN6RCxDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsZUFBZSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxhQUFhLENBQUMsQ0FBQztJQUNqSSxNQUFNLHVCQUF1QixlQUFlO01BQzFDLE1BQU0sYUFBYSxZQUFZLENBQUMsSUFBSSxJQUFJLEVBQUUsYUFBYSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7TUFDdEYsTUFBTSxTQUFTLFlBQVksQ0FBQyxJQUFJLElBQUksRUFBRSxhQUFhLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztNQUNoRixPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLFVBQVUsSUFBSSxNQUFNLENBQUM7S0FDL0QsQ0FBQztJQUNGLE1BQU0sY0FBYyxVQUFVO01BQzVCLE9BQU8sUUFBUSxLQUFLLENBQUMsTUFBTTtRQUN6QixNQUFNLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QixNQUFNLFVBQVUsa0JBQWtCLEVBQUUsQ0FBQztPQUN0QyxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsVUFBVTtNQUM5QixNQUFNLFdBQVcsWUFBWSxRQUFRLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQ3hELE1BQU0sTUFBTSxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7TUFDdEMsT0FBTyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQyxDQUFDO0tBQ3ZILENBQUM7SUFDRixNQUFNLG9CQUFvQixzQkFBc0IsTUFBTSxVQUFVLFlBQVksRUFBRSxHQUFHLFFBQVEsS0FBSyxFQUFFLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDOztJQUV6SCxNQUFNLFlBQVkscURBQXFELFFBQVEsS0FBSyxDQUFDLE1BQU0sb0JBQW9CLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQ3BLLE1BQU0sZUFBZSxRQUFRO01BQzNCLE1BQU0sTUFBTSxJQUFJLGNBQWMsWUFBWSxFQUFFLENBQUM7TUFDN0MsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDckIsT0FBTyxHQUFHLENBQUM7S0FDWixDQUFDO0lBQ0YsTUFBTSxhQUFhLGtCQUFrQjtNQUNuQyxNQUFNLElBQUksTUFBTSxTQUFTLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7TUFDcEUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUU7UUFDMUIsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCO01BQ0QsT0FBTyxRQUFRLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUMxQyxDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsbUNBQW1DO01BQzVELE1BQU0sa0JBQWtCLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztNQUNuRSxNQUFNLGdCQUFnQixhQUFhLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQztNQUNwRSxNQUFNLG9CQUFvQixhQUFhLFFBQVEsRUFBRSxDQUFDO01BQ2xELElBQUksdUJBQXVCLENBQUMsaUJBQWlCLENBQUMsRUFBRTtRQUM5QyxPQUFPLFNBQVMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLENBQUMsYUFBYSxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztPQUNqRjtNQUNELE1BQU0sMEJBQTBCLGFBQWEsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzVELElBQUksdUJBQXVCLENBQUMsdUJBQXVCLENBQUMsRUFBRTtRQUNwRCxPQUFPLFNBQVMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLHVCQUF1QixFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztPQUNwRTtNQUNELE1BQU0sU0FBUyx3QkFBd0IsQ0FBQyxNQUFNLElBQUksUUFBUSxFQUFFLEVBQUUsYUFBYSxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQ3ZGLElBQUksdUJBQXVCLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDbkMsT0FBTyxTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO09BQzVEO01BQ0QsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO0tBQ3hCLENBQUM7SUFDRixNQUFNLG1CQUFtQixtQ0FBbUMsS0FBSyxVQUFVLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQzs7SUFFckosTUFBTSxtQkFBbUIsT0FBTyw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEYsTUFBTSxrQkFBa0IsT0FBTywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckYsTUFBTSxvQkFBb0IsZUFBZTtNQUN2QyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssT0FBTyxLQUFLLENBQUMsRUFBRTtRQUM1QyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUNsQjtLQUNGLENBQUM7SUFDRixNQUFNLDRCQUE0QixnRUFBZ0U7TUFDaEcsU0FBUyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWM7UUFDbEcsSUFBSSxLQUFLLFVBQVUsRUFBRTtVQUNuQixNQUFNLGNBQWMsS0FBSyxXQUFXLEVBQUUsQ0FBQztVQUN2QyxJQUFJLE9BQU8sRUFBRTtZQUNYLFdBQVcsT0FBTyxDQUFDLFVBQVUsZUFBZSxFQUFFLFVBQVUsWUFBWSxDQUFDLENBQUM7V0FDdkUsTUFBTTtZQUNMLFdBQVcsU0FBUyxDQUFDLFVBQVUsYUFBYSxFQUFFLFVBQVUsVUFBVSxDQUFDLENBQUM7V0FDckU7VUFDRCxXQUFXLGVBQWUsRUFBRSxDQUFDO1NBQzlCLE1BQU07VUFDTCxLQUFLLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO1FBQ0QsTUFBTSxVQUFVLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztPQUNyQyxDQUFDLENBQUM7TUFDSCxpQkFBaUIsQ0FBQyxNQUFNLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNyQyxDQUFDO0lBQ0YsTUFBTSxxQkFBcUIscUJBQXFCO01BQzlDLE1BQU0sUUFBUSxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7TUFDeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLHdCQUF3QixDQUFDLEVBQUU7UUFDNUMsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCO01BQ0QsTUFBTSxZQUFZLE9BQU8sR0FBRyxVQUFVLFNBQVMsR0FBRyxVQUFVLFVBQVUsQ0FBQztNQUN2RSxNQUFNLGNBQWMsV0FBVyxDQUFDLE1BQU0sUUFBUSxFQUFFLENBQUMsQ0FBQztNQUNsRCxNQUFNLGVBQWUsS0FBSyxDQUFDLHNCQUFzQixFQUFFLE9BQU8sR0FBRyxXQUFXLEtBQUssR0FBRyxXQUFXLEtBQUssQ0FBQyxDQUFDO01BQ2xHLE1BQU0sYUFBYSxPQUFPLEdBQUcsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDO01BQ2hFLE1BQU0sZ0JBQWdCLDBCQUEwQixDQUFDLFNBQVMsRUFBRSxNQUFNLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQ3JGLE1BQU0sb0JBQW9CLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztNQUN0RCxNQUFNLDhCQUE4QixpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztNQUMxSCxJQUFJLENBQUMsMkJBQTJCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLEVBQUUsMkJBQTJCLENBQUMsRUFBRTtRQUN0RyxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEIsTUFBTSxJQUFJLFVBQVUsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFO1FBQ2xELE9BQU8sUUFBUSxLQUFLLENBQUMsTUFBTSx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLGFBQWEsUUFBUSxFQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSwyQkFBMkIsQ0FBQyxDQUFDLENBQUM7T0FDaEo7TUFDRCxNQUFNLG9CQUFvQixZQUFZLENBQUMsMkJBQTJCLENBQUMsQ0FBQztNQUNwRSxJQUFJLGlCQUFpQixJQUFJLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1FBQ3RELElBQUkscUJBQXFCLENBQUMsMkJBQTJCLEVBQUUsaUJBQWlCLENBQUMsRUFBRTtVQUN6RSxPQUFPLFFBQVEsS0FBSyxDQUFDLE1BQU0seUJBQXlCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxhQUFhLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1NBQ3RJO09BQ0Y7TUFDRCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7S0FDeEIsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLHFCQUFxQixrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7O0lBRW5GLE1BQU0scUJBQXFCLHFCQUFxQjtNQUM5QyxNQUFNLE9BQU8sTUFBTSxRQUFRLEVBQUUsQ0FBQztNQUM5QixPQUFPLE9BQU8sR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUM7S0FDeEksQ0FBQztJQUNGLE1BQU0sc0JBQXNCLFVBQVU7TUFDcEMsTUFBTSxNQUFNLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQztNQUN0QyxPQUFPLENBQUMsR0FBRyxVQUFVLEtBQUssa0JBQWtCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksa0JBQWtCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1TixDQUFDOztJQUVGLE1BQU0sb0JBQW9CLFFBQVEsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLGFBQWEsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakosTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO01BQ2hDLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO01BQ3ZCLEVBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFFO01BQzlCLEVBQUUsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEVBQUU7S0FDakMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxnQ0FBZ0MsbUJBQW1CO01BQ3ZELE1BQU0sTUFBTSxJQUFJLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ25DLE1BQU0sZ0JBQWdCLE9BQU8sR0FBRyxPQUFPLEdBQUcsUUFBUSxDQUFDO01BQ25ELE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDLGdCQUFnQixDQUFDLEtBQUssYUFBYSxDQUFDO0tBQ2pGLENBQUM7SUFDRixNQUFNLGlDQUFpQyw2QkFBNkI7TUFDbEUsTUFBTSxjQUFjLE9BQU8sVUFBVSxDQUFDLFlBQVksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNuRyxPQUFPLGlCQUFpQixDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7S0FDM0gsQ0FBQztJQUNGLE1BQU0sOEJBQThCLDZCQUE2QjtNQUMvRCxNQUFNLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUN0QyxPQUFPLGdCQUFnQixDQUFDLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLFlBQVksUUFBUSxDQUFDLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsWUFBWSxPQUFPLENBQUMsUUFBUSxJQUFJLENBQUMsR0FBRyxZQUFZLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxRQUFRLEtBQUssQ0FBQyxZQUFZLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDOVEsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLHlCQUF5QixZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07TUFDNUYsSUFBSSxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUU7UUFDbkMsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCLE1BQU0sSUFBSSw4QkFBOEIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNsRSxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEIsTUFBTSxJQUFJLE9BQU8sSUFBSSx3QkFBd0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUU7UUFDNUQsT0FBTywyQkFBMkIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztPQUM3RCxNQUFNLElBQUksQ0FBQyxPQUFPLElBQUksd0JBQXdCLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtRQUNqRSxPQUFPLDJCQUEyQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQzdELE1BQU0sSUFBSSxPQUFPLElBQUksMkJBQTJCLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDdkQsT0FBTyxRQUFRLEtBQUssQ0FBQyxZQUFZLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3ZELE1BQU0sSUFBSSxDQUFDLE9BQU8sSUFBSSw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUN6RCxPQUFPLFFBQVEsS0FBSyxDQUFDLFlBQVksZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDdkQsTUFBTTtRQUNMLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN4QjtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sZ0NBQWdDLGtCQUFrQjtNQUN0RCxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNuQixPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEIsTUFBTSxJQUFJLE9BQU8sSUFBSSx3QkFBd0IsQ0FBQyxHQUFHLFlBQVksQ0FBQyxFQUFFO1FBQy9ELE9BQU8sUUFBUSxLQUFLLENBQUMsWUFBWSxjQUFjLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO09BQ25FLE1BQU0sSUFBSSxDQUFDLE9BQU8sSUFBSSx3QkFBd0IsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLEVBQUU7UUFDcEUsT0FBTyxRQUFRLEtBQUssQ0FBQyxZQUFZLGNBQWMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQztPQUN2RSxNQUFNO1FBQ0wsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCO0tBQ0YsQ0FBQztJQUNGLE1BQU0seUNBQXlDLDhCQUE4QixZQUFZLEtBQUssQ0FBQyxPQUFPLFFBQVEsS0FBSyxDQUFDLFlBQVksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxRQUFRLEtBQUssQ0FBQyxZQUFZLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU07TUFDMU0sSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtRQUNqQyxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEIsTUFBTTtRQUNMLE9BQU8sUUFBUSxLQUFLLENBQUMsWUFBWSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUN2RDtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sMkJBQTJCLHlCQUF5QjtNQUN4RCxJQUFJLDZCQUE2QixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRTtRQUNoRCxPQUFPLDZCQUE2QixDQUFDLE9BQU8sRUFBRSxJQUFJLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLGVBQWUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7T0FDM0gsTUFBTTtRQUNMLE9BQU8sZUFBZSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0Isc0NBQXNDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO09BQ3BJO0tBQ0YsQ0FBQztJQUNGLE1BQU0sT0FBTyx3QkFBd0I7TUFDbkMsTUFBTSxrQkFBa0IsY0FBYyxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQ3BFLE1BQU0sT0FBTyxhQUFhLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQztNQUMzRCxNQUFNLGNBQWMsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDL0MsSUFBSSxDQUFDLE9BQU8sSUFBSSwyQkFBMkIsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNqRCxPQUFPLFFBQVEsS0FBSyxDQUFDLFlBQVksT0FBTyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUMvRCxNQUFNLElBQUksT0FBTyxJQUFJLDRCQUE0QixDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3hELE9BQU8sUUFBUSxLQUFLLENBQUMsWUFBWSxPQUFPLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDM0QsTUFBTSxJQUFJLENBQUMsT0FBTyxJQUFJLDRCQUE0QixDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUU7UUFDekYsT0FBTyxjQUFjLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxZQUFZLE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUN2RixNQUFNLElBQUksT0FBTyxJQUFJLDJCQUEyQixDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUU7UUFDMUYsT0FBTyxVQUFVLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxZQUFZLE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUNuRixNQUFNO1FBQ0wsT0FBTyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQ3REO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLGtCQUFrQixxQkFBcUIsV0FBVztNQUN0RCxNQUFNLG9CQUFvQixjQUFjLEVBQUUsQ0FBQztNQUMzQyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO01BQ2hFLE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLHFCQUFxQixXQUFXO01BQ3BELE1BQU0sTUFBTSxPQUFPLEdBQUcsYUFBYSxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsYUFBYSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDbkYsTUFBTSxVQUFVLE9BQU8sQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDdkMsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsVUFBVSxPQUFPO01BQ3RDLE1BQU0sVUFBVSxPQUFPLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQ3ZDLE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLGtCQUFrQixRQUFRLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEcsTUFBTSx1QkFBdUIscUJBQXFCO01BQ2hELE1BQU0sZUFBZSxNQUFNLFVBQVUsUUFBUSxFQUFFLENBQUM7TUFDaEQsT0FBTyxhQUFhLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLE1BQU0sWUFBWSxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ3RULENBQUM7SUFDRixNQUFNLDJCQUEyQixlQUFlO01BQzlDLE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLDBCQUEwQixDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDeEUsQ0FBQztJQUNGLE1BQU0sdUJBQXVCLHFCQUFxQjtNQUNoRCxNQUFNLGVBQWUsTUFBTSxVQUFVLFFBQVEsRUFBRSxDQUFDO01BQ2hELElBQUksd0JBQXdCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUU7UUFDMUUsTUFBTSxpQkFBaUIsYUFBYSxDQUFDLE1BQU0sRUFBRSxZQUFZLFdBQVcsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUN2RyxPQUFPLGNBQWMsS0FBSyxDQUFDLE1BQU0sUUFBUSxLQUFLLENBQUMsTUFBTTtVQUNuRCx3QkFBd0IsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxNQUFNLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztVQUNqRSxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLFFBQVEsQ0FBQyxNQUFNLFVBQVUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1VBQ25GLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN2QixDQUFDLEVBQUUsTUFBTSxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO09BQ2hDO01BQ0QsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUMvQixPQUFPLFFBQVEsS0FBSyxDQUFDLE1BQU07VUFDekIsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE1BQU0sVUFBVSxPQUFPLEVBQUUsRUFBRSxZQUFZLFFBQVEsQ0FBQyxNQUFNLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNoRyxDQUFDLENBQUM7T0FDSjtNQUNELE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztLQUN4QixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsVUFBVTtNQUNqQyxNQUFNLE1BQU0sTUFBTSxJQUFJLEVBQUUsWUFBWSxNQUFNLFVBQVUsQ0FBQztNQUNyRCxNQUFNLFNBQVMsd0JBQXdCLENBQUMsTUFBTSxRQUFRLEVBQUUsRUFBRSxTQUFTLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDL0UsSUFBSSx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNqRixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsa0JBQWtCLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdkQsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZCLFNBQVMsT0FBTyxDQUFDLGFBQWEsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO09BQ3REO01BQ0QsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxvQkFBb0IscUJBQXFCO01BQzdDLElBQUksTUFBTSxVQUFVLFlBQVksRUFBRSxFQUFFO1FBQ2xDLE9BQU8sb0JBQW9CLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQzlDLE1BQU07UUFDTCxPQUFPLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztPQUM5QztLQUNGLENBQUM7O0lBRUYsTUFBTSxnQkFBZ0IscUJBQXFCO01BQ3pDLE1BQU0sVUFBVSxhQUFhLGVBQWUsQ0FBQyxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUMsQ0FBQztNQUN4RSxPQUFPLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxRQUFRLEVBQUUsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sT0FBTyxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLDRCQUE0QixDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sTUFBTSxNQUFNLFVBQVUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDblAsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLHFCQUFxQixNQUFNLFVBQVUsWUFBWSxFQUFFLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDOztJQUVqSSxNQUFNLFdBQVcsUUFBUSxDQUFDO0lBQzFCLE1BQU0sMkJBQTJCLFFBQVEsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQztJQUNuRixNQUFNLHlCQUF5QixRQUFRLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQztJQUNwRyxNQUFNLGFBQWEsUUFBUTtNQUN6QixJQUFJLEVBQUUsQ0FBQztNQUNQLE1BQU0sTUFBTSxDQUFDLEtBQUssSUFBSSxjQUFjLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDO01BQ2hGLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDbkMsQ0FBQztJQUNGLE1BQU0saUJBQWlCLFFBQVE7TUFDN0IsSUFBSSxFQUFFLENBQUM7TUFDUCxJQUFJLFFBQVEsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEVBQUU7UUFDbEMsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEVBQUU7VUFDaEQsT0FBTyxJQUFJLGdCQUFnQixDQUFDO1NBQzdCLE1BQU07VUFDTCxJQUFJLGdCQUFnQixXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7VUFDeEMsT0FBTyxJQUFJLGdCQUFnQixDQUFDO1NBQzdCO09BQ0YsTUFBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUN6QixJQUFJLHdCQUF3QixDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ2xDLE9BQU8sSUFBSSxDQUFDO1NBQ2IsTUFBTTtVQUNMLElBQUksV0FBVyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztVQUMzQixPQUFPLElBQUksQ0FBQztTQUNiO09BQ0YsTUFBTTtRQUNMLE1BQU0sVUFBVSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsQ0FBQyxLQUFLLElBQUksV0FBVyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNGLE9BQU8sT0FBTyxDQUFDO09BQ2hCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLFFBQVE7TUFDNUIsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO01BQ1gsSUFBSSxRQUFRLENBQUMsSUFBSSxZQUFZLENBQUMsRUFBRTtRQUM5QixJQUFJLHdCQUF3QixDQUFDLElBQUksWUFBWSxDQUFDLEVBQUU7VUFDOUMsT0FBTyxJQUFJLFlBQVksQ0FBQztTQUN6QixNQUFNO1VBQ0wsSUFBSSxZQUFZLFdBQVcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7VUFDdkMsT0FBTyxJQUFJLFlBQVksQ0FBQztTQUN6QjtPQUNGLE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDekIsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUNoQyxPQUFPLElBQUksQ0FBQztTQUNiLE1BQU07VUFDTCxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztVQUN4QixPQUFPLElBQUksQ0FBQztTQUNiO09BQ0YsTUFBTTtRQUNMLE1BQU0sVUFBVSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxJQUFJLFlBQVksRUFBRTtVQUNwQixDQUFDLEtBQUssSUFBSSxXQUFXLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxZQUFZLENBQUMsQ0FBQztTQUN4RyxNQUFNO1VBQ0wsQ0FBQyxLQUFLLElBQUksV0FBVyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDckY7UUFDRCxPQUFPLE9BQU8sQ0FBQztPQUNoQjtLQUNGLENBQUM7SUFDRixNQUFNLGVBQWUsa0JBQWtCLE1BQU0sR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNGLE1BQU0scUJBQXFCLEtBQUssQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckQsTUFBTSxvQkFBb0IsS0FBSyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQzs7SUFFckQsTUFBTSxrQkFBa0IsaUJBQWlCO01BQ3ZDLElBQUksUUFBUSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsRUFBRTtRQUM3QixPQUFPLFlBQVksQ0FBQyxNQUFNLEVBQUUsR0FBRyxVQUFVLEVBQUUsQ0FBQyxDQUFDO09BQzlDLE1BQU07UUFDTCxPQUFPLFlBQVksQ0FBQyxNQUFNLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDO09BQzVDO0tBQ0YsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLGdCQUFnQjtNQUMxQyxNQUFNLFlBQVksS0FBSyxJQUFJLEVBQUUsQ0FBQztNQUM5QixPQUFPLFNBQVMsSUFBSSxHQUFHLFVBQVUsRUFBRSxLQUFLLFNBQVMsSUFBSSxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUN4RixDQUFDO0lBQ0YsTUFBTSxjQUFjLHFCQUFxQixRQUFRLEtBQUssQ0FBQyxXQUFXO01BQ2hFLFFBQVEsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7TUFDdEIsTUFBTSxPQUFPLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ3pDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ2hCLE9BQU8sUUFBUSxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzVELEVBQUUsV0FBVyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPO01BQ2hELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDcEMsUUFBUSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0QixNQUFNLE9BQU8sZUFBZSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4QyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQixPQUFPLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDL0IsTUFBTTtRQUNMLE1BQU0sT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3pCLE9BQU8sYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztPQUMvQjtLQUNGLENBQUMsRUFBRSxXQUFXLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU87TUFDaEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRTtRQUNwQyxRQUFRLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sT0FBTyxlQUFlLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hCLE9BQU8sYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztPQUM3QyxNQUFNO1FBQ0wsTUFBTSxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDekIsT0FBTyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO09BQzdDO0tBQ0YsQ0FBQyxFQUFFLFdBQVc7TUFDYixRQUFRLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO01BQ3RCLE1BQU0sT0FBTyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUN4QyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNoQixPQUFPLFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM5QyxDQUFDLENBQUM7O0lBRUgsTUFBTSxnQkFBZ0IsZUFBZTtNQUNuQyxLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ25DLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEMsSUFBSSxNQUFNLE9BQU8sRUFBRSxFQUFFO1VBQ25CLE9BQU8sTUFBTSxDQUFDO1NBQ2Y7T0FDRjtNQUNELE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztLQUN4QixDQUFDOztJQUVGLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQztNQUM1QixFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtNQUN2QixFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtNQUN0QixFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRTtNQUNwQixFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtLQUN2QixDQUFDLENBQUM7SUFDSCxNQUFNLFlBQVksb0JBQW9CO01BQ3BDLE1BQU0sY0FBYyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDckQsT0FBTyxXQUFXLEdBQUcsV0FBVyxHQUFHLFFBQVEsQ0FBQztLQUM3QyxDQUFDO0lBQ0YsTUFBTSxTQUFTLG1DQUFtQztNQUNoRCxNQUFNLE9BQU8saUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDcEMsTUFBTSxRQUFRLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFDO01BQ3BELE9BQU8sY0FBYyxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxRQUFRLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFFBQVEsS0FBSyxDQUFDLENBQUM7S0FDbk0sQ0FBQztJQUNGLE1BQU0sa0NBQWtDLG1CQUFtQix1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO0lBQzNHLE1BQU0sdUJBQXVCLG1DQUFtQyxjQUFjLENBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQywrQkFBK0IsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3ZLLE1BQU0sVUFBVSxtQ0FBbUM7TUFDakQsTUFBTSxPQUFPLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ3JDLE9BQU8sb0JBQW9CLENBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVU7UUFDekUsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0MsT0FBTyxPQUFPLE9BQU8sRUFBRSxHQUFHLFFBQVEsS0FBSyxDQUFDLFFBQVEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUNuRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxNQUFNLG1DQUFtQztNQUM3QyxNQUFNLE9BQU8saUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDcEMsT0FBTyxvQkFBb0IsQ0FBQyxjQUFjLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVTtRQUN6RSxNQUFNLFVBQVUsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzQyxPQUFPLE9BQU8sT0FBTyxFQUFFLEdBQUcsUUFBUSxLQUFLLENBQUMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ2pGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFFBQVEsbUNBQW1DO01BQy9DLE1BQU0sT0FBTyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNyQyxNQUFNLFFBQVEsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDcEQsT0FBTyxjQUFjLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLFFBQVEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsUUFBUSxLQUFLLENBQUMsQ0FBQztLQUNsTSxDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNqRSxNQUFNLGVBQWUsbUNBQW1DO01BQ3RELE1BQU0sV0FBVyxhQUFhLENBQUM7UUFDN0IsTUFBTTtRQUNOLE9BQU87UUFDUCxHQUFHO1FBQ0gsS0FBSztPQUNOLEVBQUU7UUFDRCxjQUFjO1FBQ2QsUUFBUTtRQUNSLEdBQUc7T0FDSixDQUFDLENBQUM7TUFDSCxPQUFPLFFBQVEsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBQ3pDLENBQUM7SUFDRixNQUFNLGFBQWEsWUFBWSxRQUFRLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNyRixNQUFNLFVBQVUsWUFBWSxRQUFRLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNySCxNQUFNLFVBQVUsWUFBWSxRQUFRLEtBQUssQ0FBQyxRQUFRLE9BQU8sRUFBRSxRQUFRLE9BQU8sRUFBRSxRQUFRLE1BQU0sRUFBRSxRQUFRLE1BQU0sQ0FBQyxDQUFDO0lBQzVHLE1BQU0sU0FBUyxZQUFZLFFBQVEsS0FBSyxDQUFDLFFBQVEsTUFBTSxFQUFFLFFBQVEsTUFBTSxFQUFFLFFBQVEsSUFBSSxFQUFFLFFBQVEsSUFBSSxDQUFDLENBQUM7SUFDckcsTUFBTSxPQUFPLDBCQUEwQixPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEksTUFBTSxpQkFBaUIsMkRBQTJELEtBQUssQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxjQUFjLENBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSwwQkFBMEI7TUFDOU0sSUFBSSxVQUFVLEtBQUssUUFBUSxJQUFJLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUU7UUFDakYsT0FBTyxRQUFRLE1BQU0sQ0FBQyxPQUFPLEdBQUcsVUFBVSxHQUFHLFFBQVEsQ0FBQyxDQUFDO09BQ3hELE1BQU07UUFDTCxPQUFPLFFBQVEsQ0FBQztPQUNqQjtLQUNGLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25CLE1BQU0saUJBQWlCLDhCQUE4QixZQUFZLEtBQUssQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ2hJLE1BQU0sdUJBQXVCLDBEQUEwRDtNQUNyRixNQUFNLE9BQU8saUJBQWlCLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQzdDLE1BQU0sS0FBSyxZQUFZLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO01BQ3hGLE1BQU0sV0FBVyxFQUFFLEtBQUssQ0FBQyxNQUFNLFlBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sWUFBWSxDQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDaE8sT0FBTyxRQUFRLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztLQUN6QyxDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsdUJBQXVCO01BQ2hELElBQUksT0FBTyxFQUFFO1FBQ1gsT0FBTyxRQUFRLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLEVBQUUsUUFBUSxNQUFNLENBQUMsRUFBRSxRQUFRLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxLQUFLLEVBQUUsUUFBUSxNQUFNLENBQUMsRUFBRSxRQUFRLEtBQUssQ0FBQyxDQUFDO09BQ3BJLE1BQU07UUFDTCxPQUFPLFFBQVEsS0FBSyxDQUFDLFFBQVEsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEtBQUssRUFBRSxRQUFRLE9BQU8sQ0FBQyxFQUFFLFFBQVEsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEtBQUssRUFBRSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUM7T0FDbkk7S0FDRixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsNENBQTRDO01BQ2pFLE1BQU0sT0FBTyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDN0MsTUFBTSxlQUFlLFlBQVksQ0FBQyxjQUFjLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ2xFLE9BQU8sWUFBWSxDQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sb0JBQW9CLENBQUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDeEwsQ0FBQzs7SUFFRixNQUFNLHdCQUF3QixVQUFVO01BQ3RDLE9BQU8sVUFBVSxDQUFDLE1BQU0sVUFBVSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDckQsQ0FBQztJQUNGLE1BQU0sVUFBVSw2QkFBNkI7TUFDM0MsTUFBTSxRQUFRLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDL0IsU0FBUyxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsVUFBVSxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztNQUNqRixTQUFTLE9BQU8sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sR0FBRyxTQUFTLEdBQUcsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQzVFLE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQztJQUNGLE1BQU0sYUFBYSxxQkFBcUI7TUFDdEMsTUFBTSxNQUFNLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQztNQUN0QyxNQUFNLE1BQU0sT0FBTyxHQUFHLGFBQWEsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGFBQWEsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQzFGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNsQyxPQUFPLEtBQUssQ0FBQztPQUNkLE1BQU0sSUFBSSxPQUFPLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3pDLE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztPQUM3QyxNQUFNLElBQUksQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3pDLE9BQU8sT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztPQUM5QyxNQUFNO1FBQ0wsT0FBTyxLQUFLLENBQUM7T0FDZDtLQUNGLENBQUM7O0lBRUYsSUFBSSxTQUFTLENBQUM7SUFDZCxDQUFDLHFCQUFxQjtNQUNwQixTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztNQUN0QyxTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztNQUM1QyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztNQUMxQyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztLQUN6QyxDQUFDLFNBQVMsS0FBSyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDbEMsTUFBTSxPQUFPLDBCQUEwQixTQUFTLEtBQUssVUFBVSxVQUFVLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUMzRyxNQUFNLFNBQVMsaUNBQWlDLFNBQVMsS0FBSyxVQUFVLFNBQVMsR0FBRyxXQUFXLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsSSxNQUFNLGVBQWUsMkNBQTJDO01BQzlELElBQUksTUFBTSxDQUFDLE9BQU8sUUFBUSxDQUFDLFNBQVMsS0FBSyxVQUFVLFNBQVMsQ0FBQyxDQUFDLEVBQUU7UUFDOUQsT0FBTyxTQUFTLEdBQUcsQ0FBQztPQUNyQixNQUFNLElBQUksYUFBYSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsS0FBSyxLQUFLLEVBQUU7UUFDdkQsT0FBTyxTQUFTLE1BQU0sQ0FBQztPQUN4QixNQUFNO1FBQ0wsT0FBTyxTQUFTLEtBQUssQ0FBQztPQUN2QjtLQUNGLENBQUM7SUFDRixNQUFNLG9CQUFvQix3Q0FBd0M7TUFDaEUsTUFBTSxjQUFjLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUN2QyxJQUFJLGFBQWEsS0FBSyxDQUFDO01BQ3ZCLE1BQU0sWUFBWSxFQUFFLENBQUM7TUFDckIsT0FBTyxVQUFVLEVBQUU7UUFDakIsTUFBTSxVQUFVLE1BQU0sQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxPQUFPLEVBQUU7VUFDWixNQUFNO1NBQ1A7UUFDRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1VBQ2xDLElBQUksU0FBUyxLQUFLLFVBQVUsU0FBUyxFQUFFO1lBQ3JDLE9BQU87Y0FDTCxXQUFXLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2NBQ3ZELFdBQVcsU0FBUyxHQUFHO2NBQ3ZCLFNBQVMsUUFBUSxLQUFLLENBQUMsT0FBTyxDQUFDO2FBQ2hDLENBQUM7V0FDSCxNQUFNO1lBQ0wsT0FBTztjQUNMLFdBQVcsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7Y0FDckMsV0FBVyxTQUFTLEdBQUc7Y0FDdkIsU0FBUyxRQUFRLEtBQUssQ0FBQyxPQUFPLENBQUM7YUFDaEMsQ0FBQztXQUNIO1NBQ0Y7UUFDRCxJQUFJLENBQUMsT0FBTyxVQUFVLEVBQUUsRUFBRTtVQUN4QixhQUFhLE9BQU8sQ0FBQztVQUNyQixTQUFTO1NBQ1Y7UUFDRCxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUU7VUFDbEMsTUFBTSxZQUFZLFlBQVksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztVQUN0RSxPQUFPO1lBQ0wsV0FBVyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQztZQUNyQyxTQUFTO1lBQ1QsU0FBUyxRQUFRLEtBQUssQ0FBQyxPQUFPLENBQUM7V0FDaEMsQ0FBQztTQUNIO1FBQ0QsU0FBUyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEIsYUFBYSxPQUFPLENBQUM7T0FDdEI7TUFDRCxPQUFPO1FBQ0wsV0FBVyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQztRQUNyQyxXQUFXLFNBQVMsSUFBSTtRQUN4QixTQUFTLFFBQVEsS0FBSyxFQUFFO09BQ3pCLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSwyQkFBMkIscURBQXFELHNCQUFzQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLENBQUMsT0FBTztNQUM1SSxNQUFNLFlBQVksc0JBQXNCLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUM7TUFDL0QsT0FBTyxTQUFTLEtBQUssVUFBVSxVQUFVLEdBQUcsU0FBUyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQzdGLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2IsTUFBTSx5Q0FBeUMsa0JBQWtCLEtBQUssQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLE1BQU0sUUFBUSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsV0FBVyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sZUFBZSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxlQUFlLEVBQUUsQ0FBQyxFQUFFLHVCQUF1QjtNQUM5TyxNQUFNLFdBQVcsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDLENBQUM7TUFDN0MsTUFBTSxVQUFVLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxPQUFPLEtBQUssQ0FBQyxDQUFDO01BQzNDLE9BQU8sT0FBTyxJQUFJLFFBQVEsR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDO0tBQy9DLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLE1BQU0sZ0NBQWdDLG9CQUFvQixJQUFJLENBQUMsR0FBRyxlQUFlLEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxzQ0FBc0MsQ0FBQyxTQUFTLEVBQUUsVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzVLLE1BQU0sZ0NBQWdDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxhQUFhLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFGLE1BQU0sNEJBQTRCLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxhQUFhLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRixNQUFNLG9CQUFvQixLQUFLLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztJQUM3RixNQUFNLG9CQUFvQixLQUFLLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxFQUFFLHlCQUF5QixDQUFDLENBQUM7SUFDeEYsTUFBTSxnQkFBZ0IsZ0JBQWdCLDZCQUE2QixDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsUUFBUSxPQUFPLEVBQUUsQ0FBQztJQUNqRyxNQUFNLGVBQWUsZ0JBQWdCLHlCQUF5QixDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsUUFBUSxPQUFPLEVBQUUsQ0FBQztJQUM1RixNQUFNLHdCQUF3QixTQUFTLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xKLE1BQU0sdUJBQXVCLFNBQVMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyw2QkFBNkIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLFVBQVUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsSixNQUFNLDBCQUEwQixnQkFBZ0IsNkJBQTZCLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2xILE1BQU0sMEJBQTBCLGdCQUFnQiw2QkFBNkIsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7O0lBRWxILE1BQU0sMkJBQTJCLHdCQUF3QixDQUFDO0lBQzFELE1BQU0sdUJBQXVCLHlCQUF5QixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQztJQUMxRixNQUFNLHdCQUF3Qix5QkFBeUIsSUFBSSxJQUFJLENBQUMsVUFBVSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDNUYsTUFBTSxtQkFBbUIsUUFBUSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDakUsTUFBTSx3QkFBd0IsMEJBQTBCLE1BQU0sQ0FBQyxXQUFXLEVBQUUsK0JBQStCO01BQ3pHLE1BQU0sY0FBYyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLEVBQUUscUJBQXFCLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7TUFDMUgsTUFBTSxjQUFjLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztNQUNwSCxJQUFJLFdBQVcsS0FBSyxXQUFXLElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLElBQUksd0JBQXdCLENBQUMsVUFBVSxLQUFLLENBQUMsRUFBRTtRQUM1RyxPQUFPLFVBQVUsQ0FBQztPQUNuQjtNQUNELElBQUksV0FBVyxHQUFHLFdBQVcsRUFBRTtRQUM3QixPQUFPLFVBQVUsQ0FBQztPQUNuQjtNQUNELE9BQU8sYUFBYSxDQUFDO0tBQ3RCLENBQUMsQ0FBQzs7SUFFSCxNQUFNLHFCQUFxQixRQUFRO01BQ2pDLE1BQU0sa0JBQWtCLGVBQWU7UUFDckMsT0FBTyxLQUFLLENBQUMsV0FBVyxFQUFFLFFBQVE7VUFDaEMsTUFBTSxhQUFhLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUNqQyxVQUFVLEtBQUssR0FBRyxJQUFJLENBQUM7VUFDdkIsT0FBTyxVQUFVLENBQUM7U0FDbkIsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3JCLE9BQU8sZUFBZSxDQUFDLElBQUksZUFBZSxFQUFFLENBQUMsQ0FBQztPQUMvQyxNQUFNLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3pCLE1BQU0sTUFBTSxJQUFJLGNBQWMsWUFBWSxFQUFFLENBQUM7UUFDN0MsR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUM7UUFDbkMsT0FBTyxlQUFlLENBQUMsR0FBRyxlQUFlLEVBQUUsQ0FBQyxDQUFDO09BQzlDLE1BQU07UUFDTCxPQUFPLEVBQUUsQ0FBQztPQUNYO0tBQ0YsQ0FBQztJQUNGLE1BQU0saUJBQWlCLFNBQVMsTUFBTSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxDQUFDOztJQUVsRSxJQUFJLFVBQVUsQ0FBQztJQUNmLENBQUMsc0JBQXNCO01BQ3JCLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7TUFDekMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7S0FDN0MsQ0FBQyxVQUFVLEtBQUssYUFBYSxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ3BDLE1BQU0sWUFBWSx3Q0FBd0M7TUFDeEQsSUFBSSxjQUFjLElBQUksQ0FBQztNQUN2QixPQUFPLGNBQWMsUUFBUSxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLEVBQUU7UUFDdkYsSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLEVBQUU7VUFDNUIsT0FBTztTQUNSO09BQ0Y7S0FDRixDQUFDO0lBQ0YsTUFBTSxZQUFZLHdFQUF3RTtNQUN4RixJQUFJLE9BQU8sQ0FBQyxDQUFDO01BQ2IsTUFBTSxTQUFTLEVBQUUsQ0FBQztNQUNsQixNQUFNLE1BQU0sUUFBUTtRQUNsQixJQUFJLGNBQWMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN6QyxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTtVQUNwQixjQUFjLFdBQVcsUUFBUSxFQUFFLENBQUM7U0FDckM7UUFDRCxLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO1VBQzNDLE1BQU0sYUFBYSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDbEMsSUFBSSxVQUFVLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLEVBQUU7WUFDNUMsU0FBUztXQUNWO1VBQ0QsSUFBSSxNQUFNLE9BQU8sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRTtZQUM5RCxJQUFJLEVBQUUsQ0FBQztXQUNSO1VBQ0QsVUFBVSxLQUFLLEdBQUcsSUFBSSxDQUFDO1VBQ3ZCLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzNCLE9BQU8sSUFBSSxDQUFDO1dBQ2I7VUFDRCxNQUFNLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN6QjtRQUNELE9BQU8sS0FBSyxDQUFDO09BQ2QsQ0FBQztNQUNGLE1BQU0sbUJBQW1CLE1BQU0sQ0FBQyxhQUFhLGVBQWUsRUFBRSxDQUFDLENBQUM7TUFDaEUsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1FBQ3JCLE9BQU8sTUFBTSxDQUFDO09BQ2Y7TUFDRCxNQUFNLE9BQU8sYUFBYSxRQUFRLEVBQUUsQ0FBQztNQUNyQyxJQUFJLElBQUksRUFBRTtRQUNSLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNWLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUN2QztNQUNELE9BQU8sTUFBTSxDQUFDO0tBQ2YsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLDRCQUE0QixVQUFVLEtBQUssR0FBRyxVQUFVLENBQUM7SUFDakYsTUFBTSxlQUFlLDRCQUE0QixVQUFVLEtBQUssS0FBSyxVQUFVLENBQUM7SUFDaEYsTUFBTSxVQUFVLEtBQUssQ0FBQyxTQUFTLEVBQUUsVUFBVSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sWUFBWSxLQUFLLENBQUMsU0FBUyxFQUFFLFVBQVUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMxRSxNQUFNLG9CQUFvQixpQkFBaUI7TUFDekMsT0FBTyxNQUFNLENBQUMsYUFBYSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0tBQy9DLENBQUM7SUFDRixNQUFNLGlCQUFpQix3Q0FBd0M7TUFDN0QsTUFBTSxjQUFjLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN0QyxJQUFJLE1BQU0sQ0FBQztNQUNYLElBQUksU0FBUyxDQUFDO01BQ2QsSUFBSSxTQUFTLENBQUM7TUFDZCxJQUFJLGFBQWEsQ0FBQztNQUNsQixNQUFNLFNBQVMsRUFBRSxDQUFDO01BQ2xCLElBQUksT0FBTyxDQUFDLENBQUM7TUFDYixJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUU7UUFDbkIsU0FBUyxXQUFXLEtBQUssQ0FBQztRQUMxQixZQUFZLFNBQVMsQ0FBQztRQUN0QixZQUFZLFNBQVMsQ0FBQztRQUN0QixnQkFBZ0IsYUFBYSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDM0MsTUFBTTtRQUNMLFNBQVMsV0FBVyxLQUFLLENBQUM7UUFDMUIsWUFBWSxTQUFTLENBQUM7UUFDdEIsWUFBWSxTQUFTLENBQUM7UUFDdEIsZ0JBQWdCLGFBQWEsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzVDO01BQ0QsTUFBTSxtQkFBbUIsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7TUFDMUQsR0FBRztRQUNELElBQUksQ0FBQyxhQUFhLFVBQVUsRUFBRSxFQUFFO1VBQzlCLFNBQVM7U0FDVjtRQUNELE1BQU0sT0FBTyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5QyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsRUFBRTtVQUNyQyxTQUFTO1NBQ1Y7UUFDRCxJQUFJLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO1VBQ3hELElBQUksRUFBRSxDQUFDO1NBQ1I7UUFDRCxNQUFNLGFBQWEsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLFVBQVUsU0FBUyxHQUFHLGFBQWEsQ0FBQztRQUNwQyxVQUFVLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQUU7VUFDM0IsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUNELE1BQU0sS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO09BQ3pCLFFBQVEsZ0JBQWdCLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRTtNQUNoRCxPQUFPLE1BQU0sQ0FBQztLQUNmLENBQUM7SUFDRixNQUFNLGNBQWMsY0FBYyxjQUFjLGVBQWUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDeEYsTUFBTSxTQUFTLGNBQWMsY0FBYyxZQUFZLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDOztJQUVoRixNQUFNLGNBQWMsaUJBQWlCO01BQ25DLE1BQU0sVUFBVSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDN0IsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0tBQ3hELENBQUM7SUFDRixNQUFNLHNCQUFzQixtQ0FBbUMsUUFBUSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQzlILE1BQU0sbUJBQW1CLDREQUE0RDtNQUNuRixNQUFNLFdBQVcsU0FBUyxLQUFLLFVBQVUsU0FBUyxDQUFDO01BQ25ELE1BQU0sY0FBYyxXQUFXLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQ2xELE1BQU0sZUFBZSxLQUFLLENBQUMsc0JBQXNCLEVBQUUsUUFBUSxHQUFHLFdBQVcsS0FBSyxHQUFHLFdBQVcsS0FBSyxDQUFDLENBQUM7TUFDbkcsTUFBTSxhQUFhLFFBQVEsR0FBRyxRQUFRLEdBQUcsT0FBTyxDQUFDO01BQ2pELElBQUksQ0FBQyxLQUFLLFVBQVUsRUFBRTtRQUNwQixNQUFNLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ25CLE9BQU8sU0FBUyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsS0FBSyxVQUFVLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN0RixNQUFNLElBQUksbUJBQW1CLENBQUMsTUFBTSxDQUFDLEVBQUU7VUFDdEMsTUFBTSxXQUFXLEtBQUssV0FBVyxFQUFFLENBQUM7VUFDcEMsUUFBUSxTQUFTLENBQUMsU0FBUyxLQUFLLFVBQVUsVUFBVSxDQUFDLENBQUM7VUFDdEQsT0FBTyxRQUFRLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNoQztPQUNGO01BQ0QsTUFBTSxnQkFBZ0IsMEJBQTBCLENBQUMsU0FBUyxFQUFFLE1BQU0sUUFBUSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDckYsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDN0IsT0FBTyxVQUFVLENBQUMsTUFBTSxFQUFFLGFBQWEsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztPQUM3RDtNQUNELElBQUksb0JBQW9CLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztNQUNwRCxNQUFNLDBCQUEwQiw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUNwRSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7UUFDdEIsT0FBTyx1QkFBdUIsR0FBRyxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3pFLE1BQU07UUFDTCxvQkFBb0IsaUJBQWlCLENBQUMsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUM7T0FDcEU7TUFDRCxJQUFJLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1FBQ2pDLE9BQU8sU0FBUyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztPQUM1RjtNQUNELE1BQU0sb0JBQW9CLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO01BQzFELElBQUksaUJBQWlCLElBQUksVUFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7UUFDdEQsSUFBSSxxQkFBcUIsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFO1VBQy9ELE9BQU8sU0FBUyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUM1RjtPQUNGO01BQ0QsSUFBSSx1QkFBdUIsRUFBRTtRQUMzQixPQUFPLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxpQkFBaUIsUUFBUSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDeEU7TUFDRCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7S0FDeEIsQ0FBQztJQUNGLE1BQU0saUJBQWlCLDREQUE0RDtNQUNqRixNQUFNLGdCQUFnQiwwQkFBMEIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztNQUNyRixNQUFNLGtCQUFrQixNQUFNLENBQUMsYUFBYSxlQUFlLEVBQUUsQ0FBQyxDQUFDO01BQy9ELE1BQU0sV0FBVyxTQUFTLEtBQUssVUFBVSxLQUFLLENBQUM7TUFDL0MsTUFBTSxPQUFPLE1BQU0sUUFBUSxFQUFFLENBQUM7TUFDOUIsSUFBSSxDQUFDLGVBQWUsRUFBRTtRQUNwQixPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEI7TUFDRCxJQUFJLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQy9CLE1BQU0sZ0JBQWdCLFFBQVEsR0FBRyxhQUFhLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxhQUFhLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6RyxNQUFNLGVBQWUsQ0FBQyxRQUFRLEdBQUcsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7UUFDbkYsT0FBTyxZQUFZLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxRQUFRLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUM7T0FDaEg7TUFDRCxNQUFNLFdBQVcsUUFBUSxHQUFHLFNBQVMsR0FBRyxPQUFPLENBQUM7TUFDaEQsTUFBTSxnQkFBZ0IsUUFBUSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7TUFDcEUsTUFBTSxvQkFBb0IsUUFBUSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUM3RCxNQUFNLFVBQVUsZUFBZSxLQUFLLENBQUM7TUFDckMsTUFBTSxlQUFlLHFCQUFxQixDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQ3ZFLElBQUksWUFBWSxJQUFJLFNBQVMsQ0FBQyxZQUFZLEtBQUssQ0FBQyxFQUFFO1FBQ2hELE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQztRQUNwRCxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksTUFBTSxDQUFDLENBQUM7UUFDckQsT0FBTyxTQUFTLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEtBQUssRUFBRSxLQUFLLEdBQUcsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQzlFO01BQ0QsSUFBSSxXQUFXLENBQUM7TUFDaEIsSUFBSSxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDM0IsY0FBYyxhQUFhLFFBQVEsRUFBRSxDQUFDO09BQ3ZDLE1BQU0sSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDakMsY0FBYyxhQUFhLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUMzQyxNQUFNO1FBQ0wsY0FBYyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7T0FDdEM7TUFDRCxJQUFJLFdBQVcsRUFBRTtRQUNmLE1BQU0saUJBQWlCLGNBQWMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNwRixJQUFJLHNCQUFzQixxQkFBcUIsQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlGLElBQUksbUJBQW1CLEVBQUU7VUFDdkIsT0FBTyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLFNBQVMsUUFBUSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDbkY7UUFDRCxzQkFBc0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRSxJQUFJLG1CQUFtQixFQUFFO1VBQ3ZCLE9BQU8sbUJBQW1CLENBQUMsTUFBTSxFQUFFLG1CQUFtQixTQUFTLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ25GO09BQ0Y7TUFDRCxJQUFJLGlCQUFpQixPQUFPLEtBQUssQ0FBQyxFQUFFO1FBQ2xDLE9BQU8sZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7T0FDM0k7TUFDRCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7S0FDeEIsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLHFCQUFxQjtNQUMzQyxNQUFNLE1BQU0sTUFBTSxVQUFVLE9BQU8sRUFBRSxDQUFDO01BQ3RDLE1BQU0sT0FBTyxPQUFPLEdBQUcsYUFBYSxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDM0YsTUFBTSxPQUFPLGNBQWMsQ0FBQyxJQUFJLFVBQVUsRUFBRSxFQUFFLE1BQU0sUUFBUSxFQUFFLENBQUMsQ0FBQztNQUNoRSxJQUFJLE9BQU8sRUFBRTtRQUNYLE1BQU0sV0FBVyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkQsT0FBTyxNQUFNLENBQUMsUUFBUSxVQUFVLENBQUMsQ0FBQztPQUNuQyxNQUFNO1FBQ0wsTUFBTSxXQUFXLDZCQUE2QixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzRCxPQUFPLElBQUksQ0FBQyxRQUFRLFVBQVUsQ0FBQyxDQUFDO09BQ2pDO0tBQ0YsQ0FBQztJQUNGLE1BQU0sdUJBQXVCLHdDQUF3QyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLE9BQU87TUFDNUksTUFBTSxVQUFVLE9BQU8sQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDdkMsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDLENBQUM7O0lBRUgsTUFBTSxtQkFBbUIsaUJBQWlCO01BQ3hDLE1BQU0sTUFBTSxNQUFNLElBQUksVUFBVSxFQUFFLENBQUM7TUFDbkMsR0FBRyxTQUFTLENBQUMsR0FBRyxVQUFVLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7TUFDNUMsR0FBRyxPQUFPLENBQUMsR0FBRyxVQUFVLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7TUFDMUMsTUFBTSxVQUFVLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUM5QixDQUFDO0lBQ0YsTUFBTSxjQUFjLGdCQUFnQjtNQUNsQyxJQUFJLEtBQUssRUFBRTtRQUNULEdBQUcsYUFBYSxDQUFDLG1CQUFtQixFQUFFLGlCQUFpQixDQUFDLENBQUM7T0FDMUQsTUFBTTtRQUNMLEdBQUcsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztPQUMxQztLQUNGLENBQUM7SUFDRixNQUFNLHNCQUFzQiw2QkFBNkIsV0FBVyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU87TUFDL0YsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQzlCLE9BQU8sUUFBUSxDQUFDO0tBQ2pCLENBQUMsQ0FBQztJQUNILE1BQU0sdUJBQXVCLDBCQUEwQjtNQUNyRCxNQUFNLFFBQVEsYUFBYSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDbEQsSUFBSSxLQUFLLFVBQVUsRUFBRTtRQUNuQixPQUFPLEtBQUssQ0FBQztPQUNkLE1BQU07UUFDTCxNQUFNLE1BQU0sYUFBYSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsT0FBTyxPQUFPLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztPQUM5RjtLQUNGLENBQUM7SUFDRixNQUFNLGVBQWUsNEJBQTRCO01BQy9DLE1BQU0sV0FBVyxNQUFNLFFBQVEsRUFBRSxDQUFDO01BQ2xDLE1BQU0sT0FBTyxvQkFBb0IsQ0FBQyxNQUFNLFVBQVUsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQ2hGLE1BQU0sbUJBQW1CLEtBQUssQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDdkQsTUFBTSxXQUFXLGNBQWMsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzNFLE9BQU8sUUFBUSxLQUFLLENBQUMsWUFBWSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7S0FDaEYsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLCtCQUErQjtNQUNuRCxNQUFNLG1CQUFtQixLQUFLLENBQUMsV0FBVyxDQUFDLFlBQVksUUFBUSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSx3Q0FBd0MsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN2SSxNQUFNLGtCQUFrQixRQUFRLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLENBQUM7TUFDbkUsTUFBTSxnQkFBZ0IsUUFBUSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztNQUNyRCxNQUFNLENBQUMsVUFBVSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7TUFDOUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsZUFBZSxDQUFDLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQzlFLENBQUM7SUFDRixNQUFNLDJCQUEyQixtQkFBbUI7TUFDbEQsTUFBTSxhQUFhLEtBQUssSUFBSSxFQUFFLENBQUM7TUFDL0IsSUFBSSxNQUFNLFVBQVUsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLFVBQVUsSUFBSSxVQUFVLEVBQUU7UUFDckUsTUFBTSxNQUFNLGFBQWEsZUFBZSxDQUFDLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksYUFBYSxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7VUFDdkQsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1VBQy9ELEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2pCO09BQ0Y7S0FDRixDQUFDO0lBQ0YsTUFBTSwwQkFBMEIseUNBQXlDO01BQ3ZFLElBQUksTUFBTSxVQUFVLFlBQVksRUFBRSxFQUFFO1FBQ2xDLE1BQU0sVUFBVSxRQUFRLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxPQUFPLEVBQUUsV0FBVztVQUN6QixNQUFNLE1BQU0sYUFBYSxlQUFlLENBQUMsTUFBTSxVQUFVLE9BQU8sRUFBRSxDQUFDLENBQUM7VUFDcEUsWUFBWSxDQUFDLGNBQWMsRUFBRSxNQUFNLFFBQVEsRUFBRSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDcEgsQ0FBQyxDQUFDO09BQ0o7S0FDRixDQUFDO0lBQ0YsTUFBTSxTQUFTLDRCQUE0Qix5QkFBeUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ3JJLE1BQU0sV0FBVyw2QkFBNkIseUJBQXlCLENBQUMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDdEgsTUFBTSxxQkFBcUIsVUFBVTtNQUNuQyxNQUFNLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3pCLE1BQU0sbUJBQW1CLEtBQUssQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDdkQsTUFBTSxHQUFHLENBQUMsWUFBWSxFQUFFLEtBQUs7UUFDM0IsSUFBSSx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsRUFBRTtVQUNyQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztVQUN2RCx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7VUFDeEMsdUJBQXVCLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3JFO09BQ0YsQ0FBQyxDQUFDO01BQ0gsT0FBTyxLQUFLLENBQUM7S0FDZCxDQUFDO0lBQ0YsTUFBTSxlQUFlLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0MsTUFBTSxlQUFlLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUMsTUFBTSx1QkFBdUIsNEJBQTRCO01BQ3ZELElBQUkseUJBQXlCLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDckMsTUFBTSxZQUFZLGVBQWUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNO1VBQ2xFLE1BQU0sTUFBTSxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7VUFDdEMsT0FBTyxPQUFPLEdBQUcsYUFBYSxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdEYsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLFFBQVEsRUFBRSxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTztVQUM1RixNQUFNLGFBQWEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQ2hDLE9BQU8sV0FBVyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU87WUFDbEQsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLE9BQU8sSUFBSSxDQUFDO1dBQ2IsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO09BQ0osTUFBTTtRQUNMLE9BQU8sS0FBSyxDQUFDO09BQ2Q7S0FDRixDQUFDOztJQUVGLE1BQU0scUJBQXFCLGNBQWM7TUFDdkMsTUFBTSxRQUFRLFFBQVEsWUFBWSxFQUFFLENBQUM7TUFDckMsS0FBSyxTQUFTLENBQUMsSUFBSSxVQUFVLEVBQUUsRUFBRSxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7TUFDaEQsS0FBSyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7TUFDMUMsT0FBTyxLQUFLLENBQUM7S0FDZCxDQUFDO0lBQ0YsTUFBTSxnQ0FBZ0MsT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSx1QkFBdUI7TUFDbkgsTUFBTSxxQkFBcUIsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQzdELE1BQU0sb0JBQW9CLGlCQUFpQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztNQUM1RCxPQUFPLFlBQVksQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0tBQzVGLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2YsTUFBTSxtQkFBbUIsbUJBQW1CLFlBQVksV0FBVyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNySSxNQUFNLGVBQWUsNkJBQTZCO01BQ2hELE1BQU0sV0FBVyxNQUFNLFFBQVEsRUFBRSxDQUFDO01BQ2xDLE1BQU0sbUJBQW1CLEtBQUssQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDdkQsTUFBTSxZQUFZLE9BQU8sQ0FBQyxNQUFNO1FBQzlCLE1BQU0sVUFBVSxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEQsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxhQUFhLGVBQWUsQ0FBQyxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ2hLLENBQUMsQ0FBQztNQUNILE1BQU0sWUFBWSxFQUFFLENBQUM7S0FDdEIsQ0FBQztJQUNGLE1BQU0sVUFBVSxvQkFBb0I7TUFDbEMsTUFBTSxjQUFjLGdCQUFnQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztNQUNyRCxPQUFPLFdBQVcsR0FBRyxXQUFXLEdBQUcsUUFBUSxDQUFDO0tBQzdDLENBQUM7SUFDRixNQUFNLDJCQUEyQixrQ0FBa0M7TUFDakUsTUFBTSxXQUFXLE9BQU8sQ0FBQyxNQUFNLFFBQVEsRUFBRSxFQUFFLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQztNQUM3RCxNQUFNLG1CQUFtQixLQUFLLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3ZELE1BQU0sZUFBZSxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ3BFLE1BQU0sV0FBVyxZQUFZLEtBQUssQ0FBQyxZQUFZO1FBQzdDLElBQUksT0FBTyxFQUFFO1VBQ1gsT0FBTyxRQUFRLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEtBQUssRUFBRSxRQUFRLENBQUMsUUFBUSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEtBQUssQ0FBQyxDQUFDO1NBQzNJLE1BQU07VUFDTCxPQUFPLFFBQVEsS0FBSyxDQUFDLFFBQVEsS0FBSyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsS0FBSyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0k7T0FDRixDQUFDLENBQUM7TUFDSCxPQUFPLFFBQVEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTTtRQUNwRSxNQUFNLGFBQWEsUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckQsTUFBTSxhQUFhLFVBQVUsS0FBSyxDQUFDLE9BQU8sWUFBWSxDQUFDLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLE9BQU8sS0FBSyxDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTztVQUN4RyxJQUFJLDZCQUE2QixDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RDLE9BQU8sUUFBUSxLQUFLLENBQUMsTUFBTTtjQUN6QixlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzdELENBQUMsQ0FBQztXQUNKLE1BQU07WUFDTCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7V0FDeEI7U0FDRixDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sVUFBVSxLQUFLLENBQUMsTUFBTSxVQUFVLElBQUksQ0FBQyxNQUFNO1VBQzlELE9BQU8sTUFBTTtZQUNYLElBQUksT0FBTyxFQUFFO2NBQ1gsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQ3ZDLE1BQU07Y0FDTCxZQUFZLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDdkM7V0FDRixDQUFDO1NBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUNOLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLG9CQUFvQiw0QkFBNEI7TUFDcEQsSUFBSSxNQUFNLFVBQVUsWUFBWSxFQUFFLElBQUkseUJBQXlCLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDdkUsTUFBTSxPQUFPLGFBQWEsZUFBZSxDQUFDLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sd0JBQXdCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDL0Q7TUFDRCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7S0FDeEIsQ0FBQzs7SUFFRixNQUFNLHNCQUFzQixPQUFPLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUQsTUFBTSxrQkFBa0Isa0JBQWtCO01BQ3hDLE1BQU0sVUFBVSxZQUFZLFFBQVEsQ0FBQyxNQUFNLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDdkQsTUFBTSxXQUFXLFlBQVksUUFBUSxDQUFDLE1BQU0sVUFBVSxTQUFTLEVBQUUsQ0FBQyxDQUFDO01BQ25FLE1BQU0sVUFBVSxjQUFjLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQ2xELE9BQU8sV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLE9BQU8sTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQzdGLENBQUM7SUFDRixNQUFNLGtCQUFrQixPQUFPLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUQsTUFBTSx3Q0FBd0MsVUFBVSxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkksTUFBTSxtQkFBbUIsVUFBVSxlQUFlLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0saUJBQWlCLDJCQUEyQjtNQUNoRCxNQUFNLG9CQUFvQixLQUFLLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3pELE9BQU8sTUFBTSxDQUFDLGFBQWEsRUFBRSxPQUFPLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztLQUM5RSxDQUFDO0lBQ0YsTUFBTSx3QkFBd0IsVUFBVTtNQUN0QyxNQUFNLGdCQUFnQixnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUMvQyxPQUFPLGNBQWMsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7S0FDOUMsQ0FBQztJQUNGLE1BQU0scUJBQXFCLDRDQUE0QztNQUNyRSxNQUFNLGNBQWMsY0FBYyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztNQUMxRCxJQUFJLFdBQVcsT0FBTyxLQUFLLENBQUMsRUFBRTtRQUM1QixlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztPQUMxQyxNQUFNO1FBQ0wsTUFBTSxNQUFNLHNCQUFzQixDQUFDLE1BQU0sSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzVELE1BQU0sVUFBVSxPQUFPLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDO09BQ3hDO0tBQ0YsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLHFCQUFxQjtNQUN6QyxNQUFNLGdCQUFnQixRQUFRLENBQUMscUNBQXFDLENBQUMsTUFBTSxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7TUFDL0YsT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxVQUFVO1FBQzFDLE1BQU0sVUFBVSxhQUFhLGVBQWUsQ0FBQyxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN4RSxJQUFJLCtCQUErQixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxFQUFFO1VBQ3ZHLE9BQU8sUUFBUSxLQUFLLENBQUMsTUFBTSxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO1NBQ3hGLE1BQU07VUFDTCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7U0FDeEI7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsaUJBQWlCO01BQzFDLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQztNQUNwQyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxNQUFNLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQzNFLENBQUM7SUFDRixNQUFNLGVBQWUsT0FBTyx5QkFBeUIsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLE1BQU0sMkJBQTJCLHlCQUF5QjtNQUN4RCxNQUFNLFdBQVcsTUFBTSxVQUFVLFNBQVMsRUFBRSxDQUFDO01BQzdDLE1BQU0sTUFBTSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRywwQkFBMEIsQ0FBQyxNQUFNLFVBQVUsT0FBTyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDaE0sTUFBTSxVQUFVLE9BQU8sQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUM7S0FDeEMsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLDJCQUEyQjtNQUNuRCxNQUFNLGlCQUFpQixVQUFVLENBQUMsYUFBYSxFQUFFLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7TUFDaEYsSUFBSSxjQUFjLE9BQU8sR0FBRyxDQUFDLEVBQUU7UUFDN0Isd0JBQXdCLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO09BQ2xEO0tBQ0YsQ0FBQztJQUNGLE1BQU0sNkJBQTZCLE9BQU8sUUFBUSxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7SUFDdkUsTUFBTSxvQ0FBb0MsT0FBTyxHQUFHLFlBQVksS0FBSyxDQUFDLElBQUksMEJBQTBCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUcsTUFBTSxrQ0FBa0MsaUJBQWlCO01BQ3ZELE1BQU0sY0FBYyxHQUFHLGVBQWUsY0FBYyxDQUFDO01BQ3JELE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksZUFBZSxDQUFDLE1BQU0sRUFBRSxZQUFZLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0tBQzNGLENBQUM7SUFDRixNQUFNLGlDQUFpQyxPQUFPO01BQzVDLE1BQU0sY0FBYyxHQUFHLGVBQWUsV0FBVyxDQUFDO01BQ2xELE1BQU0sWUFBWSxHQUFHLGFBQWEsV0FBVyxDQUFDO01BQzlDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksV0FBVyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDekYsQ0FBQztJQUNGLE1BQU0sK0JBQStCLE9BQU87TUFDMUMsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDO01BQ3RDLE9BQU8sR0FBRyxVQUFVLE1BQU0sUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLFlBQVksT0FBTyxHQUFHLFlBQVksV0FBVyxPQUFPLENBQUMsQ0FBQztLQUMxRyxDQUFDO0lBQ0YsTUFBTSxpQ0FBaUMsT0FBTyw4QkFBOEIsQ0FBQyxHQUFHLENBQUMsSUFBSSw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2SCxNQUFNLG9DQUFvQyxPQUFPLENBQUMsR0FBRyxhQUFhLFlBQVksQ0FBQyxHQUFHLHdCQUF3QixDQUFDLENBQUM7SUFDNUcsTUFBTSx3Q0FBd0MsT0FBTyw4QkFBOEIsQ0FBQyxHQUFHLENBQUMsSUFBSSxpQ0FBaUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuSSxNQUFNLDhCQUE4QixVQUFVO01BQzVDLE1BQU0sTUFBTSxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7TUFDdEMsT0FBTyxpQ0FBaUMsQ0FBQyxHQUFHLENBQUMsSUFBSSwrQkFBK0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUkscUNBQXFDLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDN0ksQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLFVBQVU7TUFDOUIsSUFBSSwyQkFBMkIsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUN2QyxNQUFNLGNBQWMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEQsT0FBTyxRQUFRLEtBQUssQ0FBQyxNQUFNO1VBQ3pCLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1VBQ2hDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztTQUN4QyxDQUFDLENBQUM7T0FDSixNQUFNO1FBQ0wsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLHFCQUFxQixNQUFNLFVBQVUsWUFBWSxFQUFFLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkksTUFBTSx5QkFBeUIsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLFFBQVEsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDaEcsTUFBTSxnQ0FBZ0MsVUFBVSxzQkFBc0IsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxNQUFNLFVBQVUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFILE1BQU0sK0JBQStCLFVBQVU7TUFDN0MsTUFBTSxNQUFNLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQztNQUN0QyxPQUFPLEdBQUcsVUFBVSxLQUFLLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sSUFBSSxRQUFRLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDL0ksQ0FBQztJQUNGLE1BQU0sZUFBZSxVQUFVO01BQzdCLElBQUksNEJBQTRCLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDeEMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQ3RDO01BQ0QsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDOztJQUVGLE1BQU0sZ0JBQWdCLDhCQUE4QjtNQUNsRCxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUMxQixPQUFPLFFBQVEsS0FBSyxDQUFDLE1BQU07VUFDekIsTUFBTSxvQkFBb0IsY0FBYyxFQUFFLENBQUM7VUFDM0MsZUFBZSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsWUFBWSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNqRSxDQUFDLENBQUM7T0FDSixNQUFNO1FBQ0wsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sY0FBYyxxQkFBcUI7TUFDdkMsTUFBTSxjQUFjLE9BQU8sR0FBRyxhQUFhLEdBQUcsWUFBWSxDQUFDO01BQzNELE1BQU0sWUFBWSxPQUFPLEdBQUcsVUFBVSxTQUFTLEdBQUcsVUFBVSxVQUFVLENBQUM7TUFDdkUsTUFBTSxVQUFVLDBCQUEwQixDQUFDLFNBQVMsRUFBRSxNQUFNLFFBQVEsRUFBRSxFQUFFLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQyxDQUFDO01BQ25HLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sYUFBYSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO09BQ2xFLE1BQU07UUFDTCxPQUFPLFFBQVEsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUkscUJBQXFCLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLGFBQWEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ3JNO0tBQ0YsQ0FBQztJQUNGLE1BQU0sY0FBYyxxQkFBcUI7TUFDdkMsTUFBTSxlQUFlLE1BQU0sVUFBVSxRQUFRLEVBQUUsQ0FBQztNQUNoRCxPQUFPLFNBQVMsQ0FBQyxZQUFZLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO0tBQ2pHLENBQUM7SUFDRixNQUFNLG9CQUFvQixxQkFBcUIsTUFBTSxVQUFVLFlBQVksRUFBRSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQzs7SUFFNUksTUFBTSxhQUFhLFVBQVUsU0FBUyxDQUFDLE1BQU0sRUFBRSxPQUFPLHVCQUF1QixDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksd0JBQXdCLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyx1QkFBdUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDN0ssTUFBTSxtQkFBbUIsU0FBUyxLQUFLLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEcsTUFBTSxxQkFBcUIsd0JBQXdCO01BQ2pELE1BQU0sa0JBQWtCLFNBQVMsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxHQUFHLFNBQVMsQ0FBQztNQUMvRSxNQUFNLFNBQVMsS0FBSyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsS0FBSyxLQUFLLEdBQUcsUUFBUSxHQUFHLE9BQU8sQ0FBQztNQUMxRSxPQUFPLGVBQWUsR0FBRyxNQUFNLENBQUM7S0FDakMsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLG1EQUFtRDtNQUN2RSxNQUFNLGtCQUFrQixrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsWUFBWSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztNQUNyRixNQUFNLGNBQWMsZ0JBQWdCLENBQUMsR0FBRyxTQUFTLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7TUFDN0UsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFO1FBQ3pCLE1BQU0sYUFBYSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ3BELEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxHQUFHLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7T0FDN0UsTUFBTTtRQUNMLE1BQU0sYUFBYSxXQUFXLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztRQUM5QyxHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO09BQ3BEO0tBQ0YsQ0FBQztJQUNGLE1BQU0saUJBQWlCLG9CQUFvQixNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVM7TUFDakUsTUFBTSxrQkFBa0Isa0JBQWtCLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDakYsTUFBTSxjQUFjLE1BQU0sQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDbEYsTUFBTSxrQkFBa0IsTUFBTSxJQUFJLG1CQUFtQixDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7TUFDakUsT0FBTyxlQUFlLEtBQUssT0FBTyxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7S0FDdkQsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxhQUFhLFVBQVU7TUFDM0IsTUFBTSxTQUFTLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3pDLE9BQU8sQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFLEtBQUssTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUMzRixDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsTUFBTSxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdELE1BQU0sd0JBQXdCLE1BQU0sTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdkUsTUFBTSxvQkFBb0IsVUFBVSxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sVUFBVSxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFLLE1BQU0sU0FBUyxxQkFBcUI7TUFDbEMsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO01BQ1gsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDO01BQ3JCLE1BQU0sY0FBYyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDM0MsTUFBTSxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssV0FBVyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO01BQ2hKLE1BQU0sY0FBYyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztNQUNsRCxNQUFNLFlBQVkscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDaEQsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVM7UUFDekMsYUFBYSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQztPQUM1RSxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxTQUFTLFVBQVUsTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNsRCxNQUFNLFVBQVUsVUFBVSxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDOztJQUVwRCxNQUFNLG9CQUFvQixVQUFVO01BQ2xDLElBQUksTUFBTSxVQUFVLFlBQVksRUFBRSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUN4RCxNQUFNLE1BQU0sTUFBTSxJQUFJLENBQUM7UUFDdkIsTUFBTSxNQUFNLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQztRQUN0QyxNQUFNLE1BQU0sYUFBYSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsZUFBZSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUM7UUFDN0QsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLGdCQUFnQixDQUFDLFlBQVksUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1VBQ3hFLE9BQU8sUUFBUSxLQUFLLENBQUMsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUM3QztPQUNGO01BQ0QsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO0tBQ3hCLENBQUM7O0lBRUYsTUFBTSxhQUFhLDRCQUE0QixPQUFPLENBQUM7TUFDckQsaUJBQWlCO01BQ2pCLGlCQUFpQjtNQUNqQixpQkFBaUI7TUFDakIscUJBQXFCLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDO01BQzlELGlCQUFpQjtNQUNqQixpQkFBaUI7TUFDakIsaUJBQWlCO01BQ2pCLGlCQUFpQjtNQUNqQixpQkFBaUI7TUFDakIsaUJBQWlCO0tBQ2xCLEVBQUUsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLE1BQU0sVUFBVSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLE1BQU0sZ0JBQWdCLG1CQUFtQjtNQUN2QyxNQUFNLFNBQVMsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDaEQsTUFBTSxLQUFLLENBQUMsTUFBTTtRQUNoQix1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDdkIsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNWLENBQUM7SUFDRixNQUFNLHVCQUF1QixtQkFBbUI7TUFDOUMsTUFBTSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQy9DLE1BQU0sS0FBSyxDQUFDLE1BQU0sOEJBQThCLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDakUsQ0FBQztJQUNGLE1BQU0sVUFBVSxtQkFBbUI7TUFDakMsTUFBTSxXQUFXLENBQUMsUUFBUSxFQUFFLE1BQU07UUFDaEMsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztPQUM5QixDQUFDLENBQUM7TUFDSCxNQUFNLFdBQVcsQ0FBQyxlQUFlLEVBQUUsTUFBTTtRQUN2QyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDckMsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLG1CQUFtQixDQUFDLENBQUM7SUFDM0IsTUFBTSxrQkFBa0IsR0FBRyxDQUFDO0lBQzVCLE1BQU0sV0FBVyxTQUFTO01BQ3hCLElBQUksS0FBSyxRQUFRLEtBQUssU0FBUyxJQUFJLEtBQUssUUFBUSxPQUFPLEtBQUssQ0FBQyxFQUFFO1FBQzdELE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN4QjtNQUNELE9BQU8sUUFBUSxLQUFLLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN4QyxDQUFDO0lBQ0YsTUFBTSxjQUFjLGlCQUFpQjtNQUNuQyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxRQUFRLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztNQUMvQyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxRQUFRLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztNQUMvQyxPQUFPLEtBQUssR0FBRyxnQkFBZ0IsSUFBSSxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7S0FDN0QsQ0FBQztJQUNGLE1BQU0sVUFBVSxVQUFVO01BQ3hCLE1BQU0sWUFBWSxPQUFPLEVBQUUsQ0FBQztNQUM1QixNQUFNLGlCQUFpQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDbkMsTUFBTSxvQkFBb0IsTUFBTSxDQUFDLEtBQUs7UUFDcEMsTUFBTSxTQUFTLENBQUMsV0FBVyxFQUFFO1VBQzNCLEdBQUcsQ0FBQztVQUNKLE1BQU0sV0FBVztTQUNsQixDQUFDLENBQUM7UUFDSCxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUMxQixFQUFFLGVBQWUsQ0FBQyxDQUFDO01BQ3BCLE1BQU0sR0FBRyxDQUFDLFlBQVksRUFBRSxLQUFLO1FBQzNCLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVM7VUFDeEIsaUJBQWlCLE9BQU8sRUFBRSxDQUFDO1VBQzNCLE1BQU0sT0FBTztZQUNYLEdBQUcsS0FBSyxRQUFRO1lBQ2hCLEdBQUcsS0FBSyxRQUFRO1lBQ2hCLFFBQVEsQ0FBQyxPQUFPO1dBQ2pCLENBQUM7VUFDRixpQkFBaUIsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQzlCLGNBQWMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1VBQzFCLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3JCLENBQUMsQ0FBQztPQUNKLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDVCxNQUFNLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSztRQUMxQixpQkFBaUIsT0FBTyxFQUFFLENBQUM7UUFDM0IsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUztVQUN4QixTQUFTLEdBQUcsQ0FBQyxRQUFRO1lBQ25CLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtjQUM1QixTQUFTLE1BQU0sRUFBRSxDQUFDO2NBQ2xCLGNBQWMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2NBQzFCLE1BQU0sU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7YUFDcEM7V0FDRixDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7T0FDSixFQUFFLElBQUksQ0FBQyxDQUFDO01BQ1QsTUFBTSxHQUFHLENBQUMsc0JBQXNCLEVBQUUsS0FBSztRQUNyQyxpQkFBaUIsT0FBTyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssS0FBSyxhQUFhLEVBQUU7VUFDNUIsT0FBTztTQUNSO1FBQ0QsU0FBUyxJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNO1VBQzNFLElBQUksY0FBYyxJQUFJLEVBQUUsRUFBRTtZQUN4QixDQUFDLGVBQWUsRUFBRSxDQUFDO1dBQ3BCLE1BQU07WUFDTCxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUU7Y0FDckIsR0FBRyxDQUFDO2NBQ0osTUFBTSxLQUFLO2FBQ1osQ0FBQyxDQUFDO1dBQ0o7U0FDRixDQUFDLENBQUM7T0FDSixFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ1YsQ0FBQzs7SUFFRixNQUFNLGlCQUFpQix5QkFBeUIsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLFNBQVMsQ0FBQyxDQUFDO0lBQ3BGLE1BQU0sZ0JBQWdCLGtCQUFrQjtNQUN0QyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNsQixPQUFPLElBQUksQ0FBQztPQUNiLE1BQU0sSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDNUIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztPQUN6SCxNQUFNO1FBQ0wsT0FBTyxLQUFLLENBQUM7T0FDZDtLQUNGLENBQUM7SUFDRixNQUFNLGlCQUFpQiwrQkFBK0I7TUFDcEQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsT0FBTztRQUNwRixPQUFPLGNBQWMsQ0FBQyxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztPQUMvQyxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSx1QkFBdUIseUJBQXlCO01BQ3BELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2xCLElBQUksSUFBSSxLQUFLLE9BQU8sS0FBSyxDQUFDLEVBQUU7VUFDMUIsT0FBTyxJQUFJLENBQUM7U0FDYixNQUFNLElBQUksT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksWUFBWSxJQUFJLGNBQWMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxZQUFZLENBQUMsQ0FBQyxFQUFFO1VBQzVHLE9BQU8sSUFBSSxDQUFDO1NBQ2I7T0FDRjtNQUNELE9BQU8sS0FBSyxDQUFDO0tBQ2QsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLFVBQVUsTUFBTSxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2pILE1BQU0sZ0JBQWdCLFVBQVU7TUFDOUIsTUFBTSxNQUFNLE1BQU0sSUFBSSxFQUFFLFlBQVksTUFBTSxVQUFVLENBQUM7TUFDckQsTUFBTSxTQUFTLE1BQU0sT0FBTyxDQUFDO01BQzdCLE1BQU0sZ0JBQWdCLE1BQU0saUJBQWlCLEVBQUUsQ0FBQztNQUNoRCxNQUFNLFlBQVksU0FBUyxTQUFTLEVBQUUsQ0FBQztNQUN2QyxNQUFNLFdBQVcsTUFBTSxRQUFRLEVBQUUsQ0FBQztNQUNsQyxJQUFJLGFBQWEsQ0FBQztNQUNsQixJQUFJLFFBQVEsQ0FBQztNQUNiLElBQUksVUFBVSxLQUFLLENBQUM7TUFDcEIsTUFBTSxrQkFBa0Isa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDbkQsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUN6QyxPQUFPO09BQ1I7TUFDRCxNQUFNLGVBQWUsUUFBUSxTQUFTLFlBQVksRUFBRSxDQUFDO01BQ3JELElBQUksQ0FBQyxNQUFNLGFBQWEsQ0FBQyxZQUFZLEVBQUUsZUFBZSxZQUFZLEVBQUUsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQzNILE9BQU87T0FDUjtNQUNELE1BQU0sTUFBTSxTQUFTLE9BQU8sRUFBRSxDQUFDO01BQy9CLE1BQU0sc0RBQXNELEdBQUcsR0FBRyxDQUFDO01BQ25FLE1BQU0sbUJBQW1CLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUMxQyxJQUFJLE9BQU8sUUFBUSxXQUFXLENBQUM7TUFDL0IsT0FBTyxJQUFJLEVBQUU7UUFDWCxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUNyQixhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzdCO1FBQ0QsSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO1VBQy9CLElBQUksb0JBQW9CLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQzdDLFdBQVcsSUFBSSxDQUFDO1lBQ2hCLE9BQU8sSUFBSSxZQUFZLENBQUM7WUFDeEIsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckIsU0FBUztXQUNWO1VBQ0QsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNsQixnQkFBZ0IsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hDLFFBQVEsYUFBYSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMzQyxVQUFVLElBQUksQ0FBQztXQUNoQjtVQUNELFdBQVcsSUFBSSxDQUFDO1VBQ2hCLE9BQU8sSUFBSSxZQUFZLENBQUM7VUFDeEIsYUFBYSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDckMsTUFBTTtVQUNMLGdCQUFnQixJQUFJLENBQUM7VUFDckIsT0FBTyxJQUFJLFlBQVksQ0FBQztTQUN6QjtPQUNGO01BQ0QsSUFBSSxPQUFPLElBQUksZ0JBQWdCLEVBQUU7UUFDL0IsR0FBRyxTQUFTLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzFDLEdBQUcsT0FBTyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNwQyxTQUFTLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QixNQUFNLFlBQVksRUFBRSxDQUFDO09BQ3RCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLCtCQUErQjtNQUNyRCxNQUFNLFFBQVEsWUFBWSxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7TUFDNUQsTUFBTSxLQUFLLGVBQWUsRUFBRSxDQUFDO01BQzdCLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDcEIsV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztNQUN6QixNQUFNLE1BQU0sUUFBUSxZQUFZLEVBQUUsQ0FBQztNQUNuQyxHQUFHLGVBQWUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzNCLEdBQUcsYUFBYSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDekIsT0FBTyxHQUFHLENBQUM7S0FDWixDQUFDO0lBQ0YsTUFBTSxVQUFVLFVBQVU7TUFDeEIsTUFBTSxHQUFHLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUN2RCxDQUFDOztJQUVGLE1BQU0sV0FBVyxrQkFBa0IsUUFBUSxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMzRyxNQUFNLHVCQUF1QiwwQkFBMEI7TUFDckQsT0FBTyxpQkFBaUI7UUFDdEIsTUFBTSxPQUFPLFNBQVMsRUFBRSxRQUFRLElBQUksQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0RCxNQUFNLFdBQVcsS0FBSyxHQUFHLENBQUMsR0FBRyxPQUFPLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzVELElBQUksUUFBUSxLQUFLLEdBQUcsRUFBRTtVQUNwQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFBSSxRQUFRLEtBQUssR0FBRyxFQUFFO1VBQ3BCLE1BQU0sb0JBQW9CLE9BQU8sWUFBWSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztVQUMxRCxJQUFJLGlCQUFpQixLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQzVCLE1BQU0sVUFBVSxPQUFPLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM1RCxJQUFJLE9BQU8sUUFBUSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Y0FDckQsT0FBTyxLQUFLLENBQUM7YUFDZDtXQUNGO1NBQ0Y7UUFDRCxPQUFPLGVBQWUsR0FBRyxHQUFHLEdBQUcsc0JBQXNCLEdBQUcsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztPQUM1SyxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sOEJBQThCLG1DQUFtQztNQUNyRSxJQUFJLElBQUksa0JBQWtCLE9BQU8sRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO01BQ3ZELElBQUksQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFO1FBQ3RCLE9BQU87T0FDUjtNQUNELE9BQU8sQ0FBQyxFQUFFLEVBQUU7UUFDVixVQUFVLE9BQU8sUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ3RIO01BQ0QsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0tBQ3JCLENBQUM7SUFDRixNQUFNLFVBQVUsVUFBVTtNQUN4QixNQUFNLDBCQUEwQixpQkFBaUIsQ0FBQztNQUNsRCxNQUFNLFlBQVksR0FBRyxHQUFHLEtBQUssS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO01BQ25FLE1BQU0sZUFBZSxHQUFHLEdBQUcsS0FBSyxLQUFLLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7TUFDekUsTUFBTSxlQUFlLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUN6QyxNQUFNLGtCQUFrQixRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7TUFDL0MsTUFBTSxxQkFBcUIscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDekQsSUFBSSxrQkFBa0IsT0FBTyxHQUFHLENBQUMsRUFBRTtRQUNqQyxNQUFNLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxLQUFLO1VBQ2pDLDJCQUEyQixDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM1RCxDQUFDLENBQUM7T0FDSjtNQUNELE1BQU0sT0FBTyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsU0FBUztRQUNqRCxJQUFJLElBQUksS0FBSyxPQUFPLENBQUM7UUFDckIsT0FBTyxDQUFDLEVBQUUsRUFBRTtVQUNWLE1BQU0sT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDdEIsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEIsSUFBSSxLQUFLLENBQUMsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLENBQUM7V0FDNUMsTUFBTSxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNoQyxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxPQUFPLENBQUMsQ0FBQztXQUM3QztTQUNGO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxXQUFXLG1CQUFtQixDQUFDLHVCQUF1QixFQUFFLFNBQVM7UUFDckUsSUFBSSxJQUFJLEtBQUssT0FBTyxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxFQUFFLEVBQUU7VUFDVixNQUFNLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakQsU0FBUztXQUNWO1VBQ0QsSUFBSSxrQkFBa0IsT0FBTyxHQUFHLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQ2xFLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQztZQUNwQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDZCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7WUFDaEIsSUFBSSxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztXQUM1QyxNQUFNO1lBQ0wsSUFBSSxLQUFLLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDMUM7U0FDRjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSwwQkFBMEIsVUFBVSxVQUFVLENBQUMsWUFBWSxRQUFRLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ2xKLE1BQU0sMEJBQTBCLGlDQUFpQztNQUMvRCxJQUFJLG1CQUFtQixhQUFhLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtRQUN0RCx1QkFBdUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sVUFBVSxPQUFPLENBQUMsTUFBTSxVQUFVLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbkQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO09BQ3REO0tBQ0YsQ0FBQztJQUNGLE1BQU0sdUJBQXVCLGVBQWU7TUFDMUMsTUFBTSxzQkFBc0IsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDNUQsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1FBQ3hCLE9BQU87T0FDUjtNQUNELElBQUksQ0FBQyxLQUFLLEtBQUssa0JBQWtCLEVBQUU7UUFDakMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNuQixDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDcEIsdUJBQXVCLENBQUMsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDckQsT0FBTztPQUNSO01BQ0QsSUFBSSxVQUFVLENBQUMsbUJBQW1CLENBQUMsRUFBRTtRQUNuQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUNyRCxNQUFNLFlBQVksSUFBSSxFQUFFLENBQUM7T0FDMUI7S0FDRixDQUFDO0lBQ0YsTUFBTSxVQUFVLFVBQVU7TUFDeEIsTUFBTSxHQUFHLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDMUUsQ0FBQzs7SUFFRixNQUFNLDJCQUEyQix3QkFBd0IsQ0FBQztJQUMxRCxNQUFNLDRCQUE0Qiw4QkFBOEIsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsNEJBQTRCLEVBQUUsMkJBQTJCLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztJQUNoTSxNQUFNLDBCQUEwQiw4QkFBOEI7TUFDNUQsTUFBTSxXQUFXLGlCQUFpQiw0QkFBNEIsQ0FBQyxhQUFhLENBQUMsSUFBSSxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7TUFDOUcsTUFBTSxVQUFVLGlCQUFpQiwyQkFBMkIsQ0FBQyxhQUFhLENBQUMsSUFBSSxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7TUFDM0csT0FBTyxjQUFjLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0tBQzlGLENBQUM7SUFDRixNQUFNLGtCQUFrQixVQUFVO01BQ2hDLE1BQU0sWUFBWSxNQUFNLElBQUksT0FBTyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7TUFDaEUsU0FBUyxVQUFVLEdBQUcseUJBQXlCLENBQUM7TUFDaEQsT0FBTyxTQUFTLENBQUM7S0FDbEIsQ0FBQztJQUNGLE1BQU0sZUFBZSw4QkFBOEI7TUFDakQsTUFBTSxjQUFjLFdBQVcsQ0FBQyxNQUFNLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDbEQsTUFBTSwyQkFBMkIsS0FBSyxDQUFDLHNCQUFzQixFQUFFLFNBQVMsS0FBSyxDQUFDLEdBQUcsV0FBVyxLQUFLLEdBQUcsV0FBVyxLQUFLLENBQUMsQ0FBQztNQUN0SCxJQUFJLEtBQUssVUFBVSxFQUFFO1FBQ25CLE1BQU0sTUFBTSxNQUFNLElBQUksVUFBVSxDQUFDLEtBQUssZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxHQUFHLEVBQUU7VUFDUixPQUFPO1NBQ1I7UUFDRCxNQUFNLFdBQVcsd0JBQXdCLENBQUMsYUFBYSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsUUFBUSxFQUFFO1VBQ2IsTUFBTSxXQUFXLFlBQVksUUFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1VBQy9ELElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtZQUNuQixPQUFPLENBQUMsWUFBWSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7V0FDOUMsTUFBTTtZQUNMLFFBQVEsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztXQUMvQztVQUNELE1BQU0sVUFBVSxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7VUFDNUMsTUFBTSxVQUFVLFNBQVMsRUFBRSxDQUFDO1NBQzdCO09BQ0Y7S0FDRixDQUFDO0lBQ0YsTUFBTSxxQkFBcUIscUJBQXFCO01BQzlDLE1BQU0sWUFBWSxPQUFPLEdBQUcsVUFBVSxTQUFTLEdBQUcsVUFBVSxVQUFVLENBQUM7TUFDdkUsTUFBTSxRQUFRLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQztNQUN4QyxPQUFPLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNO1FBQ3ZFLFlBQVksQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN4QixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsa0JBQWtCO01BQ3pDLE1BQU0sWUFBWSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ2hDLE1BQU0sUUFBUSxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7TUFDeEMsT0FBTyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtRQUNyRSxZQUFZLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2QyxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEIsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLHdCQUF3QjtNQUM1QyxNQUFNLE1BQU0sT0FBTyxHQUFHLFNBQVMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3hFLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztLQUN4QyxDQUFDO0lBQ0YsTUFBTSxVQUFVLHFCQUFxQixrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU0sVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZO01BQzNILFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDOUIsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDLENBQUM7SUFDSCxNQUFNLFVBQVUsa0JBQWtCLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVk7TUFDbEYsV0FBVyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztNQUM5QixPQUFPLElBQUksQ0FBQztLQUNiLENBQUMsQ0FBQztJQUNILE1BQU0sdUJBQXVCLHFCQUFxQjtNQUNoRCxNQUFNLGdCQUFnQixPQUFPLEdBQUcsMkJBQTJCLEdBQUcsNEJBQTRCLENBQUM7TUFDM0YsT0FBTyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0tBQzdELENBQUM7SUFDRixNQUFNLG1CQUFtQixxQkFBcUIsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPO01BQzVGLE1BQU0sTUFBTSxHQUFHLFFBQVEsRUFBRSxDQUFDO01BQzFCLE1BQU0sU0FBUyxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7TUFDekMsSUFBSSxPQUFPLEVBQUU7UUFDWCxHQUFHLFNBQVMsQ0FBQyxNQUFNLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQyxDQUFDO09BQ3pELE1BQU07UUFDTCxHQUFHLE9BQU8sQ0FBQyxNQUFNLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQyxDQUFDO09BQ25EO01BQ0QsT0FBTyxHQUFHLENBQUM7S0FDWixDQUFDLE9BQU8sQ0FBQyxPQUFPO01BQ2YsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztNQUN6QixPQUFPLElBQUksQ0FBQztLQUNiLENBQUMsQ0FBQzs7SUFFSCxNQUFNLFdBQVcsUUFBUSxVQUFVLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNoRSxNQUFNLHdCQUF3QixlQUFlO01BQzNDLE1BQU0sU0FBUyxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQy9CLE9BQU8sU0FBUyxDQUFDLFlBQVksUUFBUSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUM3RixDQUFDO0lBQ0YsTUFBTSxzQkFBc0Isd0JBQXdCLE9BQU8sR0FBRyxZQUFZLENBQUMsSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLElBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pILE1BQU0sMEJBQTBCLHFCQUFxQjtNQUNuRCxNQUFNLE9BQU8sWUFBWSxRQUFRLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQ3BELE1BQU0sTUFBTSxhQUFhLGVBQWUsQ0FBQyxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUMsQ0FBQztNQUNwRSxPQUFPLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07UUFDbkQsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1VBQzNDLE1BQU0sV0FBVyxPQUFPLEdBQUcsUUFBUSxHQUFHLE9BQU8sQ0FBQztVQUM5QyxNQUFNLE1BQU0sZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7VUFDcEQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztVQUM3QixPQUFPLElBQUksQ0FBQztTQUNiLE1BQU07VUFDTCxPQUFPLEtBQUssQ0FBQztTQUNkO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sVUFBVSxxQkFBcUI7TUFDbkMsSUFBSSxNQUFNLFVBQVUsWUFBWSxFQUFFLEVBQUU7UUFDbEMsT0FBTyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7T0FDakQsTUFBTTtRQUNMLE9BQU8sS0FBSyxDQUFDO09BQ2Q7S0FDRixDQUFDOztJQUVGLE1BQU0sU0FBUyw4QkFBOEI7TUFDM0MsTUFBTSxNQUFNLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQztNQUN0QyxNQUFNLE1BQU0sYUFBYSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDOUMsTUFBTSxPQUFPLE1BQU0sUUFBUSxFQUFFLENBQUM7TUFDOUIsSUFBSSxJQUFJLFdBQVcsS0FBSyxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRTtRQUM5RCxNQUFNLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sSUFBSSxDQUFDO09BQ2IsTUFBTTtRQUNMLE9BQU8sS0FBSyxDQUFDO09BQ2Q7S0FDRixDQUFDO0lBQ0YsTUFBTSxXQUFXLHFCQUFxQjtNQUNwQyxNQUFNLE1BQU0sTUFBTSxVQUFVLE9BQU8sRUFBRSxDQUFDO01BQ3RDLE1BQU0sTUFBTSxhQUFhLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUM5QyxNQUFNLE9BQU8sTUFBTSxRQUFRLEVBQUUsQ0FBQztNQUM5QixJQUFJLElBQUksVUFBVSxLQUFLLE9BQU8sSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1FBQzVELE1BQU0sWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUM7T0FDYixNQUFNO1FBQ0wsT0FBTyxLQUFLLENBQUM7T0FDZDtLQUNGLENBQUM7SUFDRixNQUFNLFNBQVMscUJBQXFCO01BQ2xDLElBQUksT0FBTyxFQUFFO1FBQ1gsT0FBTyxRQUFRLEtBQUssQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sVUFBVSxRQUFRLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxRQUFRLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztPQUMxSSxNQUFNO1FBQ0wsT0FBTyxRQUFRLEtBQUssQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sVUFBVSxRQUFRLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxRQUFRLEtBQUssQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztPQUMxTjtLQUNGLENBQUM7SUFDRixNQUFNLFVBQVUscUJBQXFCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7O0lBRTdELE1BQU0saUJBQWlCO01BQ3JCLFVBQVUsS0FBSztNQUNmLFFBQVEsS0FBSztNQUNiLFNBQVMsS0FBSztNQUNkLFNBQVMsS0FBSztNQUNkLFNBQVMsQ0FBQztLQUNYLENBQUM7SUFDRixNQUFNLGtCQUFrQixZQUFZLEtBQUssQ0FBQyxRQUFRLEVBQUUsWUFBWTtNQUM5RCxHQUFHLGNBQWM7TUFDakIsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDLENBQUM7SUFDSixNQUFNLHlCQUF5QixZQUFZLEtBQUssQ0FBQyxRQUFRLEVBQUUsWUFBWTtNQUNyRSxHQUFHLGNBQWM7TUFDakIsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDLENBQUM7SUFDSixNQUFNLGVBQWUsa0JBQWtCLEdBQUcsUUFBUSxLQUFLLE9BQU8sUUFBUSxJQUFJLEdBQUcsU0FBUyxLQUFLLE9BQU8sU0FBUyxJQUFJLEdBQUcsT0FBTyxLQUFLLE9BQU8sT0FBTyxJQUFJLEdBQUcsUUFBUSxLQUFLLE9BQU8sUUFBUSxJQUFJLEdBQUcsUUFBUSxLQUFLLE9BQU8sUUFBUSxDQUFDO0lBQ25OLE1BQU0sVUFBVSxtQkFBbUIsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBRSxXQUFXLFlBQVksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM3SCxNQUFNLGVBQWUsbUJBQW1CLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxXQUFXLFlBQVksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN6SSxNQUFNLFNBQVMsSUFBSSxJQUFJLEtBQUssTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkQsTUFBTSxVQUFVLG1CQUFtQixNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRSxXQUFXLE9BQU8sT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMvRixNQUFNLDJCQUEyQixtQkFBbUIsT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUUsV0FBVyxPQUFPLE9BQU8sRUFBRSxDQUFDLENBQUM7O0lBRXRILE1BQU0sVUFBVSxxQkFBcUI7TUFDbkMsTUFBTSxZQUFZLE9BQU8sR0FBRyxVQUFVLFNBQVMsR0FBRyxVQUFVLFVBQVUsQ0FBQztNQUN2RSxNQUFNLFFBQVEsTUFBTSxVQUFVLE9BQU8sRUFBRSxDQUFDO01BQ3hDLE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLFlBQVk7UUFDM0csV0FBVyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztPQUNiLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFVBQVUsa0JBQWtCO01BQ2hDLE1BQU0sWUFBWSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ2hDLE1BQU0sUUFBUSxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7TUFDeEMsT0FBTyxjQUFjLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLFlBQVk7UUFDekcsV0FBVyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztPQUNiLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLHFCQUFxQixxQkFBcUI7TUFDOUMsTUFBTSxjQUFjLE9BQU8sR0FBRyxZQUFZLEdBQUcsYUFBYSxDQUFDO01BQzNELE9BQU8sb0JBQW9CLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztLQUMzRCxDQUFDOztJQUVGLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQztNQUN2QixFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRTtNQUNyQixFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtNQUN0QjtRQUNFLFFBQVE7VUFDTixTQUFTO1VBQ1QsUUFBUTtTQUNUO09BQ0Y7TUFDRCxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRTtLQUN0QixDQUFDLENBQUM7SUFDSCxNQUFNLE9BQU8sV0FBVyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQyxNQUFNLGVBQWU7TUFDbkIsR0FBRyxHQUFHO01BQ04sSUFBSTtLQUNMLENBQUM7O0lBRUYsTUFBTSxhQUFhLHFCQUFxQjtNQUN0QyxPQUFPLGdCQUFnQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDbEQsQ0FBQztJQUNGLE1BQU0sbUJBQW1CLGdDQUFnQztNQUN2RCxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSztRQUNwQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUU7VUFDckIsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDaEMsTUFBTTtVQUNMLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUNqRDtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxXQUFXLGdCQUFnQixTQUFTLEtBQUssS0FBSztNQUNsRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNuQixPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEI7TUFDRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7UUFDbkMsT0FBTyxRQUFRLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztPQUMvQjtNQUNELE1BQU0scUJBQXFCLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDcEUsT0FBTyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLENBQUM7S0FDaEUsQ0FBQztJQUNGLE1BQU0sT0FBTyxxQkFBcUIsUUFBUSxDQUFDO01BQ3pDLElBQUk7TUFDSixJQUFJO0tBQ0wsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEIsTUFBTSxRQUFRLFlBQVksVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RCxNQUFNLFFBQVEscUJBQXFCLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDOztJQUV2RSxNQUFNLE9BQU8saUNBQWlDLGFBQWEsTUFBTSxLQUFLO01BQ3BFLE1BQU0sV0FBVyxTQUFTLEtBQUssQ0FBQyxDQUFDO01BQ2pDLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRTtRQUMzQixPQUFPLFlBQVksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ25DLE1BQU0sSUFBSSxRQUFRLElBQUksS0FBSyxJQUFJLEdBQUcsT0FBTyxHQUFHLENBQUMsRUFBRTtRQUM5QyxPQUFPLFlBQVksS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQy9DLE1BQU07UUFDTCxNQUFNLFdBQVcsS0FBSyxHQUFHLFNBQVMsQ0FBQztRQUNuQyxNQUFNLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO09BQ3BIO0tBQ0YsQ0FBQztJQUNGLE1BQU0sU0FBUyxxQkFBcUI7TUFDbEMsT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUztRQUMxQyxNQUFNLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sUUFBUSxXQUFXLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sS0FBSyxJQUFJLENBQUMsVUFBVTtVQUN6QixLQUFLO1VBQ0wsR0FBRztTQUNKLENBQUMsQ0FBQyxDQUFDO09BQ0wsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sT0FBTyxpQ0FBaUM7TUFDNUMsTUFBTSxZQUFZLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDMUMsT0FBTyxTQUFTLEtBQUssQ0FBQyxNQUFNO1FBQzFCLE9BQU8sWUFBWSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7T0FDbkMsRUFBRSxRQUFRO1FBQ1QsT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksTUFBTSxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztPQUMzRCxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxPQUFPLGlDQUFpQztNQUM1QyxNQUFNLFlBQVksTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztNQUMxQyxPQUFPLFNBQVMsS0FBSyxDQUFDLE1BQU07UUFDMUIsT0FBTyxZQUFZLEtBQUssRUFBRSxDQUFDO09BQzVCLEVBQUUsUUFBUTtRQUNULE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztPQUM1RCxDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sVUFBVSxrQkFBa0I7TUFDaEMsTUFBTSxJQUFJLEtBQUssR0FBRyxLQUFLO01BQ3ZCLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSztNQUNyQixPQUFPLElBQUksTUFBTSxHQUFHLEtBQUssR0FBRyxDQUFDO01BQzdCLFFBQVEsSUFBSSxPQUFPLEdBQUcsS0FBSyxHQUFHLENBQUM7TUFDL0IsT0FBTyxJQUFJLE1BQU0sR0FBRyxLQUFLO01BQ3pCLFFBQVEsSUFBSSxPQUFPLEdBQUcsS0FBSztLQUM1QixDQUFDLENBQUM7SUFDSCxNQUFNLGFBQWEsd0JBQXdCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTTtNQUMzRCxNQUFNLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLHNCQUFzQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQzlELE9BQU87UUFDTDtVQUNFLEdBQUcsSUFBSSxLQUFLO1VBQ1osR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDO1VBQ3RCLE1BQU0sRUFBRTtTQUNUO1FBQ0Q7VUFDRSxHQUFHLElBQUksTUFBTTtVQUNiLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQztVQUN0QixNQUFNLEVBQUU7U0FDVDtPQUNGLENBQUM7S0FDSCxDQUFDLENBQUM7SUFDSCxNQUFNLG9CQUFvQixtQkFBbUIsS0FBSyxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsR0FBRyxLQUFLLENBQUMsTUFBTSxRQUFRLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxhQUFhO01BQ3BJLE1BQU0sVUFBVSxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2pGLE1BQU0sVUFBVSxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2pGLE9BQU8sUUFBUSxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sR0FBRyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUM7S0FDakUsQ0FBQyxFQUFFLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNyQixNQUFNLGlCQUFpQixnREFBZ0Q7TUFDckUsTUFBTSxRQUFRLFdBQVcsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN4RixNQUFNLFVBQVUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLEVBQUUsVUFBVSxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDaEcsT0FBTyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxNQUFNLEtBQUssQ0FBQyxDQUFDO0tBQ3BFLENBQUM7SUFDRixNQUFNLGlCQUFpQixRQUFRLElBQUksT0FBTyxDQUFDO0lBQzNDLE1BQU0sY0FBYyxRQUFRLElBQUksSUFBSSxDQUFDO0lBQ3JDLE1BQU0sVUFBVSxlQUFlLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM1QyxNQUFNLFVBQVUsZUFBZSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDNUMsTUFBTSxzQkFBc0IsS0FBSyxDQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDM0UsTUFBTSxzQkFBc0IsS0FBSyxDQUFDLGNBQWMsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEUsTUFBTSxpQ0FBaUMsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLGVBQWUsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLDZCQUE2QixDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN04sTUFBTSxpQ0FBaUMsZ0JBQWdCLE1BQU0sQ0FBQyxHQUFHLGVBQWUsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLDZCQUE2QixDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7O0lBRWhPLE1BQU0sZUFBZSx3Q0FBd0MsUUFBUSxRQUFRLE9BQU8sQ0FBQyxZQUFZLGlCQUFpQixDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsUUFBUSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3RKLE1BQU0sc0JBQXNCLFlBQVksUUFBUSxVQUFVLEtBQUssU0FBUyxLQUFLLElBQUksUUFBUSxVQUFVLE9BQU8sS0FBSyxDQUFDLENBQUM7SUFDakgsTUFBTSxvQkFBb0IsWUFBWSxRQUFRLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxRQUFRLFVBQVUsT0FBTyxLQUFLLENBQUMsQ0FBQztJQUM3RyxNQUFNLG9CQUFvQixtQ0FBbUM7TUFDM0QsTUFBTSxXQUFXLGlCQUFpQixDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztNQUMvQyxJQUFJLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUMxRixPQUFPLENBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztPQUMxRCxNQUFNO1FBQ0wsT0FBTyxRQUFRLFFBQVEsT0FBTyxFQUFFLENBQUM7T0FDbEM7S0FDRixDQUFDO0lBQ0YsTUFBTSx5QkFBeUIsS0FBSyxDQUFDLGlCQUFpQixFQUFFLDZCQUE2QixDQUFDLENBQUM7SUFDdkYsTUFBTSx3QkFBd0IsS0FBSyxDQUFDLGlCQUFpQixFQUFFLHlCQUF5QixDQUFDLENBQUM7SUFDbEYsTUFBTSw2QkFBNkIseUJBQXlCO01BQzFELE1BQU0sV0FBVyxhQUFhLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNuRCxPQUFPLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztLQUN6RSxDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsaUNBQWlDO01BQzVELE1BQU0sTUFBTSxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7TUFDdEMsTUFBTSxZQUFZLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDbkMsSUFBSSx1QkFBdUIsRUFBRSxJQUFJLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDaEYsU0FBUyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVTtVQUNsRSxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzdCLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO09BQ2I7TUFDRCxPQUFPLEtBQUssQ0FBQztLQUNkLENBQUM7SUFDRixNQUFNLDBCQUEwQix3QkFBd0IsOEJBQThCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxlQUFlLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxzQ0FBc0MsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsYUFBYSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMVMsTUFBTSwwQkFBMEIsd0JBQXdCLDhCQUE4QixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssZUFBZSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsc0NBQXNDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLGFBQWEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3hTLE1BQU0sV0FBVyxtQkFBbUI7TUFDbEMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQ25DLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUM7S0FDaEUsQ0FBQztJQUNGLE1BQU0sY0FBYyx5QkFBeUI7TUFDM0MsTUFBTSxZQUFZLFNBQVMsQ0FBQyxNQUFNO1FBQ2hDLE1BQU0sV0FBVyxJQUFJLEdBQUcsT0FBTyxHQUFHLFFBQVEsQ0FBQztRQUMzQyxNQUFNLE1BQU0sZUFBZSxDQUFDLE1BQU0sRUFBRSxZQUFZLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzRSxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO09BQzFCLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFlBQVksdUJBQXVCO01BQ3ZDLE1BQU0sUUFBUSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQ2hFLE1BQU0sT0FBTyxJQUFJLEtBQUssS0FBSyxDQUFDO01BQzVCLEtBQUssS0FBSyxDQUFDLE1BQU0sV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsU0FBUyxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsS0FBSyxXQUFXLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDak8sQ0FBQztJQUNGLE1BQU0scUJBQXFCLDZCQUE2QjtNQUN0RCxNQUFNLE1BQU0sTUFBTSxVQUFVLE9BQU8sRUFBRSxDQUFDO01BQ3RDLE1BQU0sTUFBTSxhQUFhLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUM5QyxNQUFNLE9BQU8sTUFBTSxRQUFRLEVBQUUsQ0FBQztNQUM5QixJQUFJLENBQUMsSUFBSSxJQUFJLHNCQUFzQixDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRTtRQUM1QyxNQUFNLFNBQVMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN6RCxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQztPQUNiLE1BQU0sSUFBSSxJQUFJLElBQUkscUJBQXFCLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1FBQ2pELE1BQU0sU0FBUyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDO09BQ2IsTUFBTTtRQUNMLE9BQU8sS0FBSyxDQUFDO09BQ2Q7S0FDRixDQUFDO0lBQ0YsTUFBTSxTQUFTLDRCQUE0QixRQUFRLEtBQUssQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sVUFBVSxRQUFRLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxRQUFRLEtBQUssQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOU8sTUFBTSxRQUFRLHFCQUFxQixNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ2pGLE1BQU0sUUFBUSxxQkFBcUIsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUMvRSxNQUFNLDZCQUE2QixRQUFRO01BQ3pDLE1BQU0sWUFBWSxZQUFZLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztNQUN2RCxPQUFPLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUM1QixDQUFDO0lBQ0YsTUFBTSxRQUFRLDBCQUEwQjtNQUN0QyxPQUFPLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxFQUFFLFFBQVEsS0FBSyxFQUFFLG9CQUFvQjtRQUNqRSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7VUFDN0IsT0FBTywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN6QyxDQUFDLENBQUM7T0FDSixFQUFFLFdBQVc7UUFDWixNQUFNLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7T0FDNUMsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sYUFBYSwwQkFBMEIsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQzdGLE1BQU0sY0FBYywwQkFBMEIsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQzlGLE1BQU0sWUFBWSxxQkFBcUI7TUFDckMsTUFBTSxlQUFlO1FBQ25CLE9BQU87UUFDUCxJQUFJO1FBQ0osSUFBSTtPQUNMLENBQUM7TUFDRixNQUFNLE9BQU8sWUFBWSxRQUFRLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQ3BELE1BQU0sU0FBUyxXQUFXO1FBQ3hCLE1BQU0sU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7T0FDOUQsQ0FBQztNQUNGLE1BQU0sTUFBTSxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7TUFDdEMsTUFBTSxZQUFZLFlBQVksUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsZUFBZSxHQUFHLEdBQUcsYUFBYSxDQUFDLENBQUM7TUFDekYsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUTtRQUN6QyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUztVQUNoQyxNQUFNLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO1NBQ2xELENBQUMsQ0FBQztRQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxNQUFNLGFBQWEsQ0FBQyxPQUFPLEdBQUcsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUN2RCxNQUFNLE1BQU0sVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0MsR0FBRyxLQUFLLENBQUMsU0FBUztVQUNoQixNQUFNLFVBQVUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2hDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO09BQ2IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDakIsQ0FBQzs7SUFFRixNQUFNLDJCQUEyQix3QkFBd0I7TUFDdkQsTUFBTSxRQUFRLEdBQUcsR0FBRyxRQUFRLEVBQUUsSUFBSSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUM7TUFDakQsT0FBTyxDQUFDO1FBQ047VUFDRSxTQUFTLEVBQUUsTUFBTTtVQUNqQixRQUFRLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztTQUN0QztRQUNEO1VBQ0UsU0FBUyxFQUFFLEtBQUs7VUFDaEIsUUFBUSxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7U0FDdkM7UUFDRDtVQUNFLFNBQVMsRUFBRSxHQUFHO1VBQ2QsUUFBUSxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7U0FDdkM7UUFDRDtVQUNFLFNBQVMsRUFBRSxLQUFLO1VBQ2hCLFFBQVEsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDO1NBQ3RDO1FBQ0QsR0FBRyxLQUFLLEdBQUc7VUFDVDtZQUNFLFNBQVMsRUFBRSxHQUFHO1lBQ2QsUUFBUSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQztZQUMvQyxTQUFTLElBQUk7WUFDYixVQUFVLElBQUk7V0FDZjtVQUNEO1lBQ0UsU0FBUyxFQUFFLEtBQUs7WUFDaEIsUUFBUSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztZQUM5QyxTQUFTLElBQUk7WUFDYixVQUFVLElBQUk7V0FDZjtTQUNGLEdBQUcsRUFBRTtRQUNOO1VBQ0UsU0FBUyxFQUFFLE1BQU07VUFDakIsUUFBUSxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7U0FDcEM7UUFDRDtVQUNFLFNBQVMsRUFBRSxLQUFLO1VBQ2hCLFFBQVEsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO1NBQ3JDO1FBQ0Q7VUFDRSxTQUFTLEVBQUUsR0FBRztVQUNkLFFBQVEsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO1NBQ3JDO1FBQ0Q7VUFDRSxTQUFTLEVBQUUsS0FBSztVQUNoQixRQUFRLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztTQUNwQztRQUNEO1VBQ0UsU0FBUyxFQUFFLEdBQUc7VUFDZCxRQUFRLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQztTQUNyQztRQUNEO1VBQ0UsU0FBUyxFQUFFLEdBQUc7VUFDZCxRQUFRLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQztTQUN2QztRQUNEO1VBQ0UsU0FBUyxFQUFFLEtBQUs7VUFDaEIsUUFBUSxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7U0FDdEM7UUFDRDtVQUNFLFNBQVMsRUFBRSxNQUFNO1VBQ2pCLFFBQVEsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDO1NBQ3RDO1FBQ0Q7VUFDRSxTQUFTLEVBQUUsS0FBSztVQUNoQixRQUFRLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQztTQUN2QztRQUNEO1VBQ0UsU0FBUyxFQUFFLEdBQUc7VUFDZCxRQUFRLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQztTQUN2QztRQUNEO1VBQ0UsU0FBUyxFQUFFLEtBQUs7VUFDaEIsUUFBUSxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7U0FDdEM7UUFDRDtVQUNFLFNBQVMsRUFBRSxNQUFNO1VBQ2pCLFFBQVEsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQztTQUM1QztRQUNEO1VBQ0UsU0FBUyxFQUFFLEtBQUs7VUFDaEIsUUFBUSxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO1NBQzdDO1FBQ0Q7VUFDRSxTQUFTLEVBQUUsTUFBTTtVQUNqQixTQUFTLENBQUMsS0FBSztVQUNmLFFBQVEsS0FBSztVQUNiLFFBQVEsTUFBTSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO1NBQzVDO1FBQ0Q7VUFDRSxTQUFTLEVBQUUsS0FBSztVQUNoQixTQUFTLENBQUMsS0FBSztVQUNmLFFBQVEsS0FBSztVQUNiLFFBQVEsTUFBTSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO1NBQzVDO1FBQ0Q7VUFDRSxTQUFTLEVBQUUsR0FBRztVQUNkLFFBQVEsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO1NBQ3ZDO1FBQ0Q7VUFDRSxTQUFTLEVBQUUsS0FBSztVQUNoQixRQUFRLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztTQUN0QztPQUNGLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLEdBQUcsZUFBZSxFQUFFLENBQUM7T0FDdEIsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sVUFBVSxtQkFBbUI7TUFDakMsTUFBTSxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU87UUFDMUIsSUFBSSxDQUFDLEdBQUcsbUJBQW1CLEVBQUUsRUFBRTtVQUM3Qix3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzlDO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLFFBQVEsd0JBQXdCO01BQ3BDLFNBQVM7TUFDVCxNQUFNO0tBQ1AsQ0FBQyxDQUFDOztJQUVILE1BQU0sUUFBUSxRQUFRLElBQUksQ0FBQztJQUMzQixNQUFNLGFBQWEsYUFBYSxRQUFRLFNBQVMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sYUFBYSxPQUFPLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDO01BQ2hFLElBQUk7TUFDSixLQUFLO01BQ0wsSUFBSTtNQUNKLE9BQU87S0FDUixFQUFFLElBQUksU0FBUyxDQUFDLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxPQUFPLENBQUM7SUFDOUQsTUFBTSxhQUFhLDRCQUE0QjtNQUM3QyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLElBQUksQ0FBQyxFQUFFO1FBQ2pDLE9BQU8sUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO09BQzNDLE1BQU07UUFDTCxNQUFNLGFBQWEsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sUUFBUSxLQUFLLENBQUMsVUFBVSxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLElBQUksVUFBVSxFQUFFLElBQUksVUFBVSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUM7T0FDcko7S0FDRixDQUFDO0lBQ0YsTUFBTSxZQUFZLDRCQUE0QjtNQUM1QyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLElBQUksSUFBSSxPQUFPLEVBQUU7UUFDM0MsT0FBTyxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7T0FDM0MsTUFBTTtRQUNMLE1BQU0sYUFBYSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsT0FBTyxRQUFRLEtBQUssQ0FBQyxVQUFVLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUMzSDtLQUNGLENBQUM7SUFDRixNQUFNLFdBQVcsNEJBQTRCO01BQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDbkIsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCO01BQ0QsTUFBTSxPQUFPLElBQUksS0FBSyxDQUFDO01BQ3ZCLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxNQUFNLElBQUksSUFBSSxPQUFPLEVBQUU7UUFDeEMsT0FBTyxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7T0FDM0MsTUFBTTtRQUNMLE1BQU0sYUFBYSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsT0FBTyxRQUFRLEtBQUssQ0FBQyxVQUFVLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUTtVQUNoRyxNQUFNLFdBQVcsSUFBSSxVQUFVLEtBQUssQ0FBQztVQUNyQyxPQUFPLFFBQVEsQ0FBQyxJQUFJLFVBQVUsRUFBRSxNQUFNLEdBQUcsUUFBUSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDckUsQ0FBQyxDQUFDO09BQ0o7S0FDRixDQUFDO0lBQ0YsTUFBTSxZQUFZLDRCQUE0QjtNQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ25CLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztPQUN4QjtNQUNELE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQztNQUN2QixJQUFJLE1BQU0sSUFBSSxJQUFJLE9BQU8sRUFBRTtRQUN6QixPQUFPLFFBQVEsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztPQUMzQyxNQUFNO1FBQ0wsTUFBTSxhQUFhLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxPQUFPLFFBQVEsS0FBSyxDQUFDLFVBQVUsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLFNBQVMsQ0FBQyxJQUFJLFVBQVUsRUFBRSxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztPQUM3SjtLQUNGLENBQUM7SUFDRixNQUFNLGFBQWEsMENBQTBDO01BQzNELE1BQU0sU0FBUyxVQUFVLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ2hELE9BQU8sUUFBUSxLQUFLLENBQUMsTUFBTSxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztLQUN6RSxDQUFDOztJQUVGLE1BQU0sbUJBQW1CLE9BQU8sR0FBRyxVQUFVLElBQUksUUFBUSxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7SUFDOUUsTUFBTSxVQUFVLE9BQU8sTUFBTSxDQUFDLEdBQUcsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RSxNQUFNLGVBQWUsT0FBTyxHQUFHLEtBQUssRUFBRSxJQUFJLG1CQUFtQixRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7O0lBRWxGLE1BQU0sZUFBZSxtQkFBbUIsSUFBSSxVQUFVLENBQUMsT0FBTyxPQUFPLENBQUMsQ0FBQztJQUN2RSxNQUFNLGNBQWMsMEJBQTBCO01BQzVDLElBQUksQ0FBQyxDQUFDO01BQ04sTUFBTSxZQUFZLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3BDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDL0IsTUFBTSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ3RCLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztTQUN4QjtRQUNELElBQUksU0FBUyxLQUFLLElBQUksSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7VUFDN0QsTUFBTTtTQUNQO09BQ0Y7TUFDRCxPQUFPLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3pCLENBQUM7SUFDRixNQUFNLFlBQVksMEJBQTBCLFdBQVcsQ0FBQyxLQUFLO01BQzNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUNoQyxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEI7TUFDRCxNQUFNLFNBQVM7UUFDYixNQUFNLEVBQUU7UUFDUixRQUFRLENBQUM7T0FDVixDQUFDO01BQ0YsTUFBTSxtQkFBbUIsMkJBQTJCO1FBQ2xELE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxNQUFNLEtBQUssQ0FBQztRQUNqQyxNQUFNLE9BQU8sSUFBSSxNQUFNLENBQUM7UUFDeEIsT0FBTyxXQUFXLENBQUMsTUFBTSxLQUFLLEVBQUUsTUFBTSxPQUFPLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUN2RSxDQUFDO01BQ0YsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLFNBQVMsZUFBZSxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyxRQUFRLEVBQUUsQ0FBQztNQUNuRixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxlQUFlLEVBQUUsU0FBUyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO1FBQzNHLE1BQU0sUUFBUSxTQUFTLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLEtBQUssU0FBUyxDQUFDLElBQUksVUFBVSxFQUFFLElBQUksT0FBTyxDQUFDLENBQUM7UUFDNUMsS0FBSyxPQUFPLENBQUMsU0FBUyxhQUFhLEVBQUUsU0FBUyxVQUFVLENBQUMsQ0FBQztRQUMxRCxJQUFJLEtBQUssVUFBVSxFQUFFO1VBQ25CLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztTQUN4QjtRQUNELE1BQU0sT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsTUFBTSxlQUFlLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLElBQUksWUFBWSxLQUFLLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPLEdBQUcsUUFBUSxFQUFFO1VBQ3ZFLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztTQUN4QixNQUFNO1VBQ0wsT0FBTyxRQUFRLEtBQUssQ0FBQztZQUNuQixNQUFNLFlBQVksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO1lBQ2pDLEtBQUs7WUFDTCxPQUFPO1dBQ1IsQ0FBQyxDQUFDO1NBQ0o7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxhQUFhLDBCQUEwQixXQUFXLENBQUMsS0FBSyxRQUFRLENBQUMsWUFBWSxRQUFRLENBQUMsU0FBUyxlQUFlLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxTQUFTLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsT0FBTztNQUNyTCxNQUFNLFFBQVEsR0FBRyxVQUFVLEVBQUUsQ0FBQztNQUM5QixLQUFLLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO01BQzFCLE1BQU0sT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDNUIsT0FBTyxRQUFRLEtBQUssQ0FBQztRQUNuQixLQUFLO1FBQ0wsTUFBTSxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQztRQUNqQyxPQUFPO09BQ1IsQ0FBQyxDQUFDO0tBQ0osQ0FBQyxDQUFDOztJQUVILE1BQU0sV0FBVyxRQUFRLElBQUksU0FBUyxLQUFLLElBQUksQ0FBQztJQUNoRCxNQUFNLFlBQVksUUFBUSxJQUFJLFNBQVMsS0FBSyxPQUFPLENBQUM7SUFDcEQsTUFBTSxTQUFTLFFBQVE7TUFDckIsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDbEIsT0FBTyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQztPQUN0QyxNQUFNO1FBQ0wsTUFBTSxXQUFXLElBQUksV0FBVyxDQUFDO1FBQ2pDLE9BQU8sUUFBUSxPQUFPLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLFFBQVEsT0FBTyxDQUFDLENBQUM7T0FDbkc7S0FDRixDQUFDO0lBQ0YsTUFBTSxTQUFTLGtCQUFrQjtNQUMvQixNQUFNLFdBQVcsSUFBSSxXQUFXLENBQUM7TUFDakMsSUFBSSxRQUFRLE9BQU8sR0FBRyxDQUFDLElBQUksTUFBTSxHQUFHLFFBQVEsT0FBTyxFQUFFO1FBQ25ELE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUNwQyxNQUFNLElBQUksUUFBUSxPQUFPLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLE9BQU8sS0FBSyxNQUFNLEVBQUU7UUFDL0UsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDOUMsTUFBTTtRQUNMLE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztPQUM1QjtLQUNGLENBQUM7O0lBRUYsTUFBTSx3QkFBd0IsZUFBZTtNQUMzQyxJQUFJLEVBQUUsQ0FBQztNQUNQLE1BQU0sT0FBTyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxVQUFVLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxDQUFDO01BQzlHLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLFVBQVUsRUFBRSxJQUFJLE9BQU8sRUFBRSxzQkFBc0IsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRO1FBQ3pILE1BQU0sT0FBTyxJQUFJLFVBQVUsS0FBSyxPQUFPLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekQsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUM1QixDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ2IsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLE9BQU8sT0FBTztNQUNsQyxNQUFNLE9BQU8sTUFBTSxDQUFDLEdBQUcsZUFBZSxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUM7TUFDekQsT0FBTyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMxQyxDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsOEJBQThCLE9BQU8sQ0FBQyxRQUFRLFNBQVMsRUFBRSxXQUFXLFVBQVUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDbkksTUFBTSxTQUFTLHlCQUF5QjtNQUN0QyxNQUFNLFdBQVcsV0FBVyxFQUFFLENBQUM7TUFDL0IsTUFBTSxNQUFNLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQztNQUN0QyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0tBQ3RILENBQUM7SUFDRixNQUFNLG9CQUFvQiwrQkFBK0IsZUFBZSxFQUFFLEtBQUs7TUFDN0UsSUFBSSxFQUFFLENBQUM7TUFDUCxNQUFNLFdBQVcsV0FBVyxFQUFFLENBQUM7TUFDL0IsTUFBTSxNQUFNLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQztNQUN0QyxNQUFNLFlBQVksQ0FBQyxLQUFLLEdBQUcsZUFBZSxVQUFVLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO01BQzFGLE1BQU0saUJBQWlCLFFBQVEsQ0FBQyxRQUFRLGdCQUFnQixDQUFDLE9BQU8sUUFBUSxDQUFDLEVBQUUsaUJBQWlCLE9BQU8sS0FBSyxPQUFPLElBQUksYUFBYSxTQUFTLElBQUksYUFBYSxRQUFRLFdBQVcsQ0FBQyxNQUFNLGFBQWEsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQztNQUN4UCxJQUFJLGNBQWMsT0FBTyxLQUFLLENBQUMsRUFBRTtRQUMvQixPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEI7TUFDRCxNQUFNLGFBQWEsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxNQUFNO1FBQ3pELE1BQU0sY0FBYyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUN4RSxPQUFPLFdBQVcsS0FBSyxDQUFDLFlBQVk7VUFDbEMsV0FBVyxPQUFPLEtBQUs7VUFDdkIsT0FBTyxPQUFPO1VBQ2QsU0FBUyxFQUFFLFFBQVE7VUFDbkIsVUFBVSxFQUFFLFNBQVM7VUFDckIsYUFBYSxFQUFFLFlBQVk7U0FDNUIsQ0FBQyxDQUFDLENBQUM7T0FDTCxDQUFDLENBQUMsQ0FBQztNQUNKLE9BQU8sUUFBUSxLQUFLLENBQUM7UUFDbkIsVUFBVTtRQUNWLE9BQU87T0FDUixDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLElBQUksZ0JBQWdCLENBQUM7SUFDckIsQ0FBQyw0QkFBNEI7TUFDM0IsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO01BQzFELGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztLQUMzRCxDQUFDLGdCQUFnQixLQUFLLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ2hELE1BQU0sU0FBUywyQkFBMkIsR0FBRyxNQUFNLEtBQUssZ0JBQWdCLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztJQUMzSCxNQUFNLFlBQVksV0FBVztNQUMzQixNQUFNLFNBQVMsRUFBRSxDQUFDO01BQ2xCLE1BQU0sU0FBUyxFQUFFLENBQUM7TUFDbEIsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPO1FBQ3JCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsT0FBTyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7T0FDL0QsQ0FBQyxDQUFDO01BQ0gsT0FBTztRQUNMLE1BQU07UUFDTixNQUFNO09BQ1AsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFdBQVcsWUFBWTtNQUMzQixJQUFJLEdBQUcsTUFBTSxLQUFLLGdCQUFnQixNQUFNLEVBQUU7UUFDeEMsT0FBTztVQUNMLE9BQU8sZ0JBQWdCLE1BQU07VUFDN0IsUUFBUSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7U0FDdEIsQ0FBQztPQUNILE1BQU07UUFDTCxPQUFPLEdBQUcsQ0FBQztPQUNaO0tBQ0YsQ0FBQztJQUNGLE1BQU0sTUFBTSxZQUFZO01BQ3RCLElBQUksR0FBRyxNQUFNLEtBQUssZ0JBQWdCLE1BQU0sRUFBRTtRQUN4QyxPQUFPO1VBQ0wsT0FBTyxnQkFBZ0IsTUFBTTtVQUM3QixRQUFRLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztTQUN0QixDQUFDO09BQ0gsTUFBTTtRQUNMLE9BQU8sR0FBRyxDQUFDO09BQ1o7S0FDRixDQUFDO0lBQ0YsTUFBTSxTQUFTLFlBQVk7TUFDekIsSUFBSSxHQUFHLE1BQU0sS0FBSyxnQkFBZ0IsTUFBTSxFQUFFO1FBQ3hDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7T0FDdEIsTUFBTTtRQUNMLE9BQU8sR0FBRyxDQUFDO09BQ1o7S0FDRixDQUFDO0lBQ0YsTUFBTSxZQUFZLFlBQVk7TUFDNUIsSUFBSSxHQUFHLE1BQU0sS0FBSyxnQkFBZ0IsTUFBTSxFQUFFO1FBQ3hDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7T0FDdEIsTUFBTTtRQUNMLE9BQU8sR0FBRyxDQUFDO09BQ1o7S0FDRixDQUFDO0lBQ0YsTUFBTSxTQUFTLE1BQU07TUFDbkIsT0FBTyxnQkFBZ0IsTUFBTTtNQUM3QixRQUFRLENBQUM7S0FDVixDQUFDLENBQUM7SUFDSCxNQUFNLFNBQVMsTUFBTTtNQUNuQixPQUFPLGdCQUFnQixNQUFNO01BQzdCLFFBQVEsQ0FBQztLQUNWLENBQUMsQ0FBQztJQUNILE1BQU0sV0FBVyxPQUFPLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUMsQ0FBQztJQUNoRSxNQUFNLGFBQWEsT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkQsTUFBTSxlQUFlO01BQ25CLFVBQVU7TUFDVixRQUFRO01BQ1IsTUFBTTtNQUNOLFNBQVM7TUFDVCxNQUFNO01BQ04sTUFBTSxNQUFNO01BQ1osU0FBUztNQUNULEdBQUc7TUFDSCxRQUFRO01BQ1IsTUFBTSxNQUFNO0tBQ2IsQ0FBQzs7SUFFRixNQUFNLFlBQVksU0FBUztNQUN6QixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUcsc0JBQXNCLEdBQUcsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztLQUM5RyxDQUFDO0lBQ0YsTUFBTSxlQUFlLFVBQVU7TUFDN0IsTUFBTSxLQUFLLE1BQU0sT0FBTyxHQUFHLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1VBQ3hELE1BQU0sRUFBRTtVQUNSLGNBQWMsUUFBUSxDQUFDLHVDQUF1QyxDQUFDO1NBQ2hFLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztNQUNmLE9BQU8sS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLO1FBQ3BCLE9BQU8sZ0JBQWdCLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztPQUN6RSxDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sS0FBSyx3QkFBd0I7TUFDakMsT0FBTyxZQUFZLE9BQU8sQ0FBQyxDQUFDO1VBQ3hCLElBQUk7VUFDSixZQUFZO1NBQ2IsQ0FBQyxDQUFDLENBQUM7S0FDUCxDQUFDO0lBQ0YsTUFBTSxrQkFBa0Isb0JBQW9CLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSw2Q0FBNkMsR0FBRyxHQUFHLEdBQUcsT0FBTyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNJLE1BQU0sYUFBYSxlQUFlLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSw2Q0FBNkMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDNUcsTUFBTSxnQkFBZ0IsNEJBQTRCLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLEdBQUcsK0JBQStCLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDMUosTUFBTSxTQUFTLGVBQWUsRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzs7SUFFdEQsTUFBTSxhQUFhLCtCQUErQjtNQUNoRCxNQUFNLFNBQVMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztNQUNuQyxPQUFPLE1BQU0sS0FBSyxDQUFDLE1BQU0sYUFBYSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDdEgsQ0FBQztJQUNGLE1BQU0sV0FBVyxtQkFBbUI7TUFDbEMsTUFBTSxVQUFVLGlCQUFpQjtRQUMvQixNQUFNLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNqQyxPQUFPLE1BQU0sS0FBSyxDQUFDLE1BQU0sVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxVQUFVLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO09BQ3RHLENBQUM7TUFDRixNQUFNLFdBQVcsTUFBTSxXQUFXLEdBQUcsR0FBRyxHQUFHLHNCQUFzQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUNuRixPQUFPO1FBQ0wsT0FBTztRQUNQLFFBQVE7T0FDVCxDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLFVBQVUsYUFBYTtNQUMzQixPQUFPLEVBQUUsQ0FBQztLQUNYLENBQUM7SUFDRixNQUFNLE9BQU8sYUFBYTtNQUN4QixNQUFNLGNBQWMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUM1RCxPQUFPLFdBQVcsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUM5QyxDQUFDO0lBQ0YsTUFBTSxZQUFZLFVBQVU7TUFDMUIsT0FBTyxDQUFDLFVBQVUsS0FBSztRQUNyQixJQUFJLE9BQU8sT0FBTyxLQUFLLENBQUMsRUFBRTtVQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsTUFBTSxNQUFNLEVBQUUsQ0FBQztRQUNmLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7VUFDdkMsTUFBTSxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUM3QixLQUFLLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRTtZQUMzQixJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQUU7Y0FDekIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDN0M7V0FDRjtTQUNGO1FBQ0QsT0FBTyxHQUFHLENBQUM7T0FDWixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sWUFBWSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsTUFBTSxRQUFRLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQzs7SUFFakMsTUFBTSxXQUFXLE9BQU87TUFDdEIsS0FBSyxVQUFVO01BQ2YsU0FBUyxFQUFFO0tBQ1osQ0FBQyxDQUFDO0lBQ0gsTUFBTSxpQkFBaUIsa0JBQWtCO01BQ3ZDLEtBQUssZ0JBQWdCO01BQ3JCLFNBQVMsYUFBYTtLQUN2QixDQUFDLENBQUM7SUFDSCxNQUFNLGNBQWMsWUFBWSxjQUFjLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDbkUsTUFBTSxXQUFXLE9BQU87TUFDdEIsS0FBSyxRQUFRO01BQ2IsU0FBUyxFQUFFO0tBQ1osQ0FBQyxDQUFDOztJQUVILE1BQU0sY0FBYyxrQkFBa0IsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLFlBQVksT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzSixNQUFNLGNBQWMsVUFBVSxPQUFPLENBQUMsWUFBWSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUUsTUFBTSxpQkFBaUIsbUJBQW1CO01BQ3hDLE1BQU0sWUFBWSxZQUFZLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUNsRCxPQUFPLFNBQVMsT0FBTyxPQUFPLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxTQUFTLE9BQU8sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxTQUFTLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMxRyxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsV0FBVztNQUNoQyxNQUFNLGFBQWEsWUFBWSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDbkQsT0FBTyxVQUFVLE9BQU8sT0FBTyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsVUFBVSxPQUFPLENBQUMsR0FBRyxZQUFZLE9BQU8sQ0FBQyxVQUFVLE9BQU8sQ0FBQyxDQUFDO0tBQy9HLENBQUM7SUFDRixNQUFNLGdCQUFnQjtNQUNwQixjQUFjO01BQ2QsY0FBYztLQUNmLENBQUM7O0lBRUYsTUFBTSxVQUFVLGtDQUFrQztNQUNoRCxLQUFLLE9BQU87TUFDWixHQUFHO01BQ0gsTUFBTTtNQUNOLFFBQVE7TUFDUixJQUFJO0tBQ0wsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxnQkFBZ0IsMkJBQTJCO01BQy9DLEtBQUssUUFBUTtNQUNiLE1BQU07TUFDTixZQUFZO0tBQ2IsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxPQUFPLDhCQUE4QjtNQUN6QyxRQUFRLEtBQUssSUFBSTtXQUNaLE9BQU87UUFDVixPQUFPLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxLQUFLLE9BQU8sRUFBRSxLQUFLLFNBQVMsRUFBRSxLQUFLLEtBQUssQ0FBQyxDQUFDO1dBQ2pFLFFBQVE7UUFDWCxPQUFPLFFBQVEsQ0FBQyxLQUFLLE9BQU8sRUFBRSxLQUFLLGFBQWEsQ0FBQyxDQUFDO09BQ25EO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLFFBQVEsYUFBYTtNQUN6QixNQUFNLFVBQVUsZUFBZTtRQUM3QixPQUFPLFlBQVksVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztPQUN6RSxDQUFDO01BQ0YsTUFBTSxXQUFXLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUNqQyxPQUFPO1FBQ0wsT0FBTztRQUNQLFFBQVE7T0FDVCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sYUFBYSxLQUFLLENBQUMsWUFBWSxPQUFPLENBQUMsQ0FBQzs7SUFFOUMsTUFBTSxpQkFBaUIsNEJBQTRCLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLGVBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZILE1BQU0saUJBQWlCLGdDQUFnQztNQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDMUQsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbEIsQ0FBQztJQUNGLE1BQU0sZUFBZSxzQkFBc0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuRSxNQUFNLHdCQUF3QixnQ0FBZ0M7TUFDNUQsTUFBTSxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO01BQzNFLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3BCLENBQUM7SUFDRixNQUFNLGVBQWUsaUNBQWlDO01BQ3BELE1BQU0sU0FBUyxNQUFNLElBQUksUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztNQUMxRCxNQUFNLGlCQUFpQixZQUFZLFFBQVEsS0FBSyxDQUFDLE1BQU0sWUFBWSxPQUFPLENBQUMsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU07UUFDakcsTUFBTSxTQUFTLElBQUksUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwRCxPQUFPLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEtBQUssQ0FBQyxDQUFDO09BQ2hELENBQUMsQ0FBQztNQUNILFFBQVEsS0FBSyxJQUFJO1dBQ1osVUFBVTtRQUNiLE9BQU8sY0FBYyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1dBQzNDLGdCQUFnQjtRQUNuQixPQUFPLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1dBQ3BELFFBQVE7UUFDWCxPQUFPLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1dBQzNDLHNCQUFzQjtRQUN6QixPQUFPLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7V0FDbkUsZ0JBQWdCLEVBQUU7VUFDbkIsT0FBTyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSztZQUNqRCxNQUFNLFNBQVMsU0FBUyxDQUFDLEtBQUssUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2hELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1dBQ3ZCLENBQUMsQ0FBQztTQUNKO09BQ0Y7S0FDRixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsdUJBQXVCO01BQzNDLE1BQU0sVUFBVSxFQUFFLENBQUM7TUFDbkIsTUFBTSxTQUFTLEVBQUUsQ0FBQztNQUNsQixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRTtRQUMxQixJQUFJLENBQUMsS0FBSyxFQUFFLGlDQUFpQztVQUMzQyxNQUFNLFNBQVMsWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztVQUM1RCxZQUFZLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTztZQUMvQixNQUFNLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1dBQ3JCLEVBQUUsT0FBTztZQUNSLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7V0FDdkIsQ0FBQyxDQUFDO1NBQ0osRUFBRSwwQkFBMEI7VUFDM0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNyQyxDQUFDLENBQUM7T0FDSjtNQUNELE9BQU8sTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLFlBQVksT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFlBQVksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3ZGLENBQUM7SUFDRixNQUFNLFFBQVEsVUFBVTtNQUN0QixNQUFNLFVBQVUsYUFBYSxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztNQUM1RCxNQUFNLFdBQVcsTUFBTTtRQUNyQixNQUFNLGVBQWUsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUUsaUNBQWlDLEdBQUcsR0FBRyxNQUFNLEdBQUcsSUFBSSxTQUFTLEVBQUUsRUFBRSwyQkFBMkIsUUFBUSxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlLLE9BQU8sUUFBUSxHQUFHLFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztPQUNqRCxDQUFDO01BQ0YsT0FBTztRQUNMLE9BQU87UUFDUCxRQUFRO09BQ1QsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFFBQVEsUUFBUTtNQUNwQixNQUFNLFVBQVUsaUJBQWlCO1FBQy9CLE1BQU0sVUFBVSxLQUFLLENBQUMsS0FBSyxFQUFFLFVBQVUsSUFBSSxRQUFRLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RixPQUFPLGFBQWEsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO09BQzlDLENBQUM7TUFDRixNQUFNLFdBQVcsTUFBTSxRQUFRLEdBQUcsSUFBSSxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUM7TUFDeEQsT0FBTztRQUNMLE9BQU87UUFDUCxRQUFRO09BQ1QsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxVQUFVLGFBQWEsS0FBSyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxPQUFPLEVBQUUsWUFBWSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3JHLE1BQU0sZUFBZSxzQkFBc0I7TUFDekMsTUFBTSxNQUFNLElBQUksUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDdkMsT0FBTyxZQUFZLFNBQVMsQ0FBQyxHQUFHLEVBQUUsU0FBUztRQUN6QyxPQUFPLEdBQUc7UUFDVixRQUFRLElBQUk7T0FDYixDQUFDLENBQUMsQ0FBQztLQUNMLENBQUM7SUFDRixNQUFNLFFBQVEsc0JBQXNCLFlBQVksU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUYsTUFBTSxjQUFjLFdBQVc7TUFDN0IsT0FBTyxZQUFZLEdBQUcsWUFBWSxDQUFDLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxvQkFBb0IsR0FBRyxTQUFTLENBQUMsT0FBTyxNQUFNLENBQUMsQ0FBQztLQUNqSCxDQUFDO0lBQ0YsTUFBTSxTQUFTLG1CQUFtQixRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQzs7SUFFeEUsTUFBTSxXQUFXLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxNQUFNLGFBQWEsNkJBQTZCLEtBQUssQ0FBQyxLQUFLO01BQ3pELE1BQU0sYUFBYSxPQUFPLENBQUMsQ0FBQztNQUM1QixPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLE9BQU8sQ0FBQyxDQUFDLGVBQWUsR0FBRyxZQUFZLEVBQUUsVUFBVSxHQUFHLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUNqSSxDQUFDLENBQUM7SUFDSCxNQUFNLFNBQVMsVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5QyxNQUFNLFNBQVMsVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5QyxNQUFNLFVBQVUsVUFBVSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNqRCxNQUFNLG9CQUFvQixVQUFVLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDOztJQUU3RCxNQUFNLFFBQVEsT0FBTyxDQUFDO0lBQ3RCLE1BQU0sY0FBYyxhQUFhLENBQUM7SUFDbEMsTUFBTSxlQUFlLFVBQVUsT0FBTyxDQUFDLFNBQVMsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxDQUFDLG9CQUFvQixHQUFHLEtBQUssRUFBRSxrQkFBa0IsR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUwsTUFBTSxhQUFhLGlCQUFpQixLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN4RSxNQUFNLGlCQUFpQixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEQsTUFBTSxtQkFBbUIsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDbkUsTUFBTSxrQkFBa0IsaUJBQWlCLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLE1BQU0sV0FBVyxpQkFBaUIsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEUsTUFBTSxlQUFlLE9BQU8sUUFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRCxNQUFNLGlCQUFpQixPQUFPLFFBQVEsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUMvRCxNQUFNLFlBQVksbUJBQW1CLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3hGLE1BQU0sY0FBYywyQkFBMkIsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlGLE1BQU0sa0JBQWtCLG1CQUFtQixXQUFXLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5RSxNQUFNLGtCQUFrQixtQkFBbUIsV0FBVyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUUsTUFBTSxzQkFBc0IsMkJBQTJCLFdBQVcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3hHLE1BQU0sbUJBQW1CLG1CQUFtQixXQUFXLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoRixNQUFNLG9CQUFvQixtQkFBbUIsV0FBVyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUMzRixNQUFNLG1CQUFtQiwyQkFBMkIsV0FBVyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7O0lBRTlGLE1BQU0sT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLE1BQU0sV0FBVyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QyxNQUFNLFVBQVUsaUJBQWlCLENBQUMsU0FBUyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7SUFDekQsTUFBTSxlQUFlLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxNQUFNLGVBQWUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLE1BQU0sa0JBQWtCLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRCxNQUFNLGdCQUFnQixZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsTUFBTSxTQUFTLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkQsTUFBTSxtQkFBbUIsT0FBTyxTQUFTLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFELE1BQU0sZ0JBQWdCLFFBQVEsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzs7SUFFNUQsTUFBTSxzQkFBc0IsS0FBSyxDQUFDO01BQ2hDLElBQUk7TUFDSixjQUFjLENBQUMsU0FBUyxDQUFDO01BQ3pCLGVBQWUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO01BQzlCLGdCQUFnQixDQUFDLENBQUMsQ0FBQztNQUNuQixlQUFlLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztNQUNqQyxjQUFjLENBQUMsU0FBUyxDQUFDO01BQ3pCLE9BQU87TUFDUCxRQUFRO01BQ1IsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUM7S0FDNUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxzQkFBc0IsUUFBUSxLQUFLLENBQUMsZUFBZSxFQUFFLG1CQUFtQixFQUFFO01BQzlFLFNBQVMsSUFBSSxHQUFHO01BQ2hCLEdBQUcsSUFBSTtLQUNSLENBQUMsQ0FBQzs7SUFFSCxNQUFNLDBCQUEwQjtNQUM5QixPQUFPO01BQ1AsZUFBZTtNQUNmLFlBQVk7TUFDWixZQUFZO01BQ1osT0FBTztLQUNSLENBQUM7O0lBRUYsTUFBTSxnQ0FBZ0MsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7O0lBRS9FLE1BQU0sbUJBQW1CO01BQ3ZCLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUM7TUFDckMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRTtRQUNuQyxNQUFNO1FBQ04sUUFBUTtPQUNULENBQUM7TUFDRixtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFO1FBQzNDLE1BQU07UUFDTixXQUFXO1FBQ1gsTUFBTTtPQUNQLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sc0JBQXNCLHVCQUF1QixPQUFPLENBQUM7TUFDekQsYUFBYSxDQUFDLG1CQUFtQixDQUFDO01BQ2xDLE9BQU87TUFDUCxRQUFRO01BQ1IsV0FBVyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUM7S0FDbEMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSw0QkFBNEIsNkJBQTZCLE9BQU8sQ0FBQztNQUNyRSxhQUFhLENBQUMsbUJBQW1CLENBQUM7TUFDbEMsT0FBTztNQUNQLFFBQVE7TUFDUixXQUFXLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQztLQUNsQyxDQUFDLENBQUM7SUFDSCxNQUFNLHFCQUFxQix1QkFBdUIsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLE1BQU0sMkJBQTJCLDZCQUE2QixPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEgsTUFBTSxpQkFBaUIsTUFBTSxDQUFDLE1BQU0sRUFBRTtNQUNwQyxtQkFBbUIsbUJBQW1CO01BQ3RDLHlCQUF5Qix5QkFBeUI7S0FDbkQsQ0FBQyxDQUFDO0lBQ0gsS0FBSyxDQUFDO01BQ0osYUFBYSxDQUFDLGFBQWEsQ0FBQztNQUM1QixpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQzVDLGFBQWE7TUFDYixlQUFlLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQztNQUMzQyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUU7UUFDaEMsbUJBQW1CLGtCQUFrQjtRQUNyQyx5QkFBeUIsd0JBQXdCO09BQ2xELENBQUMsQ0FBQztLQUNKLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7O0lBRTVCLE1BQU0sYUFBYSxVQUFVO01BQzNCLE1BQU0sU0FBUyxNQUFNLEdBQUcsU0FBUyxPQUFPLEVBQUUsT0FBTyxDQUFDO01BQ2xELE1BQU0sVUFBVSxLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPO1FBQzVFLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7T0FDbkMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO01BQ2QsTUFBTSxXQUFXLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO01BQ2xFLE1BQU0sZ0JBQWdCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUN0QyxNQUFNLGtCQUFrQixXQUFXLFFBQVEsQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQztNQUN6RixPQUFPO1FBQ0wsT0FBTztRQUNQLFFBQVE7UUFDUixlQUFlO09BQ2hCLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sbUJBQW1CLGlCQUFpQjtNQUN4QyxNQUFNLFNBQVMsTUFBTSxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO01BQ3BDLE1BQU0sR0FBRyxDQUFDLHlCQUF5QixFQUFFLEtBQUs7UUFDeEMsSUFBSSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUU7VUFDbEIsT0FBTztTQUNSO1FBQ0QsTUFBTSxTQUFTLEVBQUUsQ0FBQztPQUNuQixDQUFDLENBQUM7TUFDSCxNQUFNLEdBQUcsQ0FBQyxTQUFTLEVBQUUsS0FBSztRQUN4QixNQUFNLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDeEIsSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFO1VBQ2pCLE1BQU0sU0FBUyxFQUFFLENBQUM7U0FDbkIsTUFBTSxJQUFJLE9BQU8sS0FBSyxFQUFFLEVBQUU7VUFDekIsR0FBRyxrQkFBa0IsRUFBRSxDQUFDO1NBQ3pCO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDLENBQUM7S0FDcEMsQ0FBQztJQUNGLE1BQU0sVUFBVSxVQUFVO01BQ3hCLE1BQU0sc0JBQXNCLE9BQU8sRUFBRSxDQUFDO01BQ3RDLE1BQU0sV0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDN0IsTUFBTSxXQUFXLG1CQUFtQixNQUFNLENBQUM7TUFDM0MsTUFBTSxvQkFBb0IsTUFBTTtRQUM5QixJQUFJLFFBQVEsRUFBRSxFQUFFO1VBQ2QsNkJBQTZCLENBQUMsTUFBTSxDQUFDLENBQUM7VUFDdEMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7VUFDN0IsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7VUFDcEIsbUJBQW1CLE1BQU0sRUFBRSxDQUFDO1NBQzdCO09BQ0YsQ0FBQztNQUNGLE1BQU0sc0JBQXNCLFdBQVc7UUFDckMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFO1VBQ2YsMEJBQTBCLENBQUMsTUFBTSxFQUFFLE9BQU8sTUFBTSxDQUFDLENBQUM7VUFDbEQsbUJBQW1CLElBQUksQ0FBQztZQUN0QixTQUFTLE9BQU8sUUFBUTtZQUN4QixhQUFhLE9BQU8sS0FBSyxPQUFPO1dBQ2pDLENBQUMsQ0FBQztTQUNKO09BQ0YsQ0FBQztNQUNGLE1BQU0sb0JBQW9CLE1BQU0sQ0FBQyxNQUFNLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO01BQzNELE1BQU0sV0FBVyxnQkFBZ0IsbUJBQW1CLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxVQUFVLENBQUMsTUFBTSxJQUFJLEVBQUUsTUFBTSxVQUFVLE9BQU8sRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxjQUFjLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxNQUFNLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQztNQUNuUixNQUFNLE9BQU8sZ0JBQWdCO1FBQzNCLFFBQVEsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGNBQWM7VUFDM0QsbUJBQW1CLENBQUMsVUFBVSxRQUFRLENBQUMsQ0FBQztVQUN4QyxVQUFVLFdBQVcsS0FBSyxDQUFDLGNBQWM7WUFDdkMsbUJBQW1CLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTTtjQUNsQyxNQUFNLFVBQVUsVUFBVSxRQUFRLENBQUM7Y0FDbkMsSUFBSSxFQUFFLFFBQVEsS0FBSyxPQUFPLFFBQVEsRUFBRTtnQkFDbEMsSUFBSSxPQUFPLEtBQUssT0FBTyxHQUFHLEVBQUUsWUFBWSxJQUFJLEVBQUUsRUFBRTtrQkFDOUMsaUJBQWlCLEVBQUUsQ0FBQztpQkFDckIsTUFBTTtrQkFDTCxtQkFBbUIsSUFBSSxDQUFDO29CQUN0QixHQUFHLEVBQUU7b0JBQ0wsYUFBYSxPQUFPLEtBQUssT0FBTzttQkFDakMsQ0FBQyxDQUFDO2tCQUNILElBQUksUUFBUSxJQUFJLEVBQUUsRUFBRTtvQkFDbEIsdUJBQXVCLENBQUMsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQzttQkFDakQsTUFBTTtvQkFDTCxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDbkIsc0JBQXNCLENBQUMsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQzttQkFDaEQ7aUJBQ0Y7ZUFDRjthQUNGLENBQUMsQ0FBQztXQUNKLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLFdBQVcsQ0FBQyx3QkFBd0IsRUFBRSxnQkFBZ0I7UUFDMUQsTUFBTSxlQUFlLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDL0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO09BQ3BCLENBQUMsQ0FBQztNQUNILE1BQU0sV0FBVyxDQUFDLHVCQUF1QixFQUFFLGlCQUFpQixDQUFDLENBQUM7TUFDOUQsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO1FBQ3ZCLGlCQUFpQjtRQUNqQixJQUFJO09BQ0wsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLFlBQVksUUFBUSxFQUFFLFFBQVEsQ0FBQztJQUNyQyxNQUFNLFdBQVcsU0FBUyxTQUFTLEVBQUUsQ0FBQztJQUN0QyxNQUFNLG9CQUFvQixRQUFRLGlCQUFpQixDQUFDLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDaEYsTUFBTSx1QkFBdUIsZUFBZTtNQUMxQyxJQUFJLEVBQUUsQ0FBQztNQUNQLE9BQU8sR0FBRyxZQUFZLEtBQUssQ0FBQyxJQUFJLEdBQUcsVUFBVSxNQUFNLENBQUMsS0FBSyxJQUFJLFlBQVksTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDNUgsQ0FBQztJQUNGLE1BQU0sK0JBQStCLGNBQWMsUUFBUSxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxVQUFVLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzVHLE1BQU0scUJBQXFCLGNBQWMsNEJBQTRCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN6RixNQUFNLHFCQUFxQixjQUFjO01BQ3ZDLE1BQU0sZUFBZSxRQUFRLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO01BQ2pGLE1BQU0sYUFBYSxRQUFRLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO01BQzdFLElBQUksWUFBWSxPQUFPLEVBQUUsSUFBSSxVQUFVLE9BQU8sRUFBRSxFQUFFO1FBQ2hELE1BQU0sZUFBZSxZQUFZLEtBQUssQ0FBQyxXQUFXLFFBQVEsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEcsT0FBTyxRQUFRLEtBQUssQ0FBQztVQUNuQixZQUFZO1VBQ1osWUFBWTtVQUNaLFVBQVU7U0FDWCxDQUFDLENBQUM7T0FDSixNQUFNO1FBQ0wsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sMEJBQTBCLHVCQUF1QixlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDckgsTUFBTSxvQkFBb0IsdUJBQXVCO01BQy9DLE9BQU8sY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTztRQUMzQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUU7VUFDekIsT0FBTyxZQUFZLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ25HLE1BQU07VUFDTCxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzlCO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sMEJBQTBCLCtCQUErQixlQUFlLGFBQWEsT0FBTyxDQUFDLFdBQVcsdUJBQXVCLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDMUosTUFBTSx3QkFBd0IsK0JBQStCLGVBQWUsYUFBYSxPQUFPLENBQUMsV0FBVyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsSixNQUFNLCtCQUErQiwrQkFBK0IsZUFBZSxhQUFhLE9BQU8sQ0FBQyxXQUFXLFlBQVksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLGVBQWUsYUFBYSxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sU0FBUyxDQUFDLFFBQVEsVUFBVSxFQUFFLENBQUMsSUFBSSxPQUFPLFNBQVMsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaFMsTUFBTSw4QkFBOEIscUNBQXFDLGVBQWUsYUFBYSxPQUFPLENBQUMsV0FBVyxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sU0FBUyxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeE0sTUFBTSxxQkFBcUIsc0JBQXNCO01BQy9DLE1BQU0sT0FBTyxRQUFRLFFBQVEsRUFBRSxDQUFDO01BQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDdEIsTUFBTSxVQUFVLGtCQUFrQixDQUFDLElBQUksRUFBRSxRQUFRLE9BQU8sRUFBRSxDQUFDLENBQUM7T0FDN0Q7S0FDRixDQUFDO0lBQ0YsTUFBTSx3QkFBd0IsMEJBQTBCO01BQ3RELE1BQU0sVUFBVSxNQUFNLElBQUksVUFBVSxDQUFDLEdBQUcsVUFBVSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7TUFDakUsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssRUFBRTtRQUM1QixNQUFNLFVBQVUsTUFBTSxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekQsSUFBSSxPQUFPLEVBQUU7VUFDWCxNQUFNLFNBQVMsT0FBTyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7VUFDNUUsTUFBTSxLQUFLLENBQUMsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNyRDtPQUNGLE1BQU07UUFDTCxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7T0FDakM7S0FDRixDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsMEJBQTBCO01BQ2hELE1BQU0sZ0JBQWdCLFdBQVcsT0FBTyxTQUFTLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQztNQUN0RSxNQUFNLGNBQWMsV0FBVyxPQUFPLFNBQVMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDO01BQ2xFLE1BQU0saUJBQWlCLGVBQWUsYUFBYSxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7TUFDMUUsTUFBTSxlQUFlLGVBQWUsYUFBYSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7TUFDdEUsTUFBTSxxQ0FBcUMsZUFBZSxhQUFhLE9BQU8sQ0FBQyxnQkFBZ0IsZUFBZSxXQUFXLE9BQU8sQ0FBQyxjQUFjLFlBQVksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO01BQzdLLE1BQU0sK0JBQStCLENBQUMsY0FBYyxJQUFJLFlBQVksS0FBSyxFQUFFLGNBQWMsSUFBSSxZQUFZLENBQUMsQ0FBQztNQUMzRyxPQUFPLDRCQUE0QixJQUFJLGtDQUFrQyxDQUFDO0tBQzNFLENBQUM7SUFDRixNQUFNLGlDQUFpQyxrQ0FBa0M7TUFDdkUsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7TUFDaEMsTUFBTSxPQUFPLE1BQU0sUUFBUSxFQUFFLENBQUM7TUFDOUIsSUFBSSxXQUFXLEtBQUssV0FBVyxFQUFFO1FBQy9CLE1BQU0sV0FBVyxhQUFhLGVBQWUsQ0FBQyxTQUFTLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbEUsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLFFBQVEsVUFBVSxFQUFFLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUNyRSxNQUFNLHVCQUF1Qiw0QkFBNEIsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDekUsTUFBTSxxQkFBcUIsV0FBVyxJQUFJLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sZUFBZSxNQUFNLENBQUMsV0FBVyxLQUFLLElBQUksSUFBSSxXQUFXLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsV0FBVyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ25ILE1BQU0sY0FBYyxNQUFNLENBQUMsV0FBVyxLQUFLLElBQUksSUFBSSxXQUFXLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsV0FBVyxZQUFZLENBQUMsQ0FBQztRQUM5RyxJQUFJLGtCQUFrQixFQUFFO1VBQ3RCLE1BQU0sY0FBYyxPQUFPLEdBQUcsV0FBVyxHQUFHLFlBQVksQ0FBQztVQUN6RCxJQUFJLFdBQVcsRUFBRTtZQUNmLE1BQU0sdUJBQXVCLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPO2NBQzVFLE9BQU8sa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixFQUFFLDRCQUE0QixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzlHLENBQUMsQ0FBQztZQUNILElBQUksb0JBQW9CLEVBQUU7Y0FDeEIsT0FBTyxJQUFJLENBQUM7YUFDYjtXQUNGO1NBQ0Y7UUFDRCxPQUFPLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU87VUFDMUQsTUFBTSx3QkFBd0IsNEJBQTRCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1VBQ3JFLElBQUksa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixFQUFFLHFCQUFxQixDQUFDLEVBQUU7WUFDeEYsSUFBSSxDQUFDLE9BQU8sRUFBRTtjQUNaLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDM0M7WUFDRCxJQUFJLFdBQVcsSUFBSSxrQkFBa0IsRUFBRTtjQUNyQyxJQUFJLE9BQU8sSUFBSSxZQUFZLEVBQUU7Z0JBQzNCLE9BQU8sSUFBSSxDQUFDO2VBQ2IsTUFBTSxJQUFJLENBQUMsT0FBTyxJQUFJLFdBQVcsRUFBRTtnQkFDbEMsT0FBTyxJQUFJLENBQUM7ZUFDYjtjQUNELHFCQUFxQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7Y0FDNUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNoQztZQUNELE9BQU8sSUFBSSxDQUFDO1dBQ2IsTUFBTTtZQUNMLE9BQU8sS0FBSyxDQUFDO1dBQ2Q7U0FDRixDQUFDLENBQUM7T0FDSixNQUFNO1FBQ0wsT0FBTyxLQUFLLENBQUM7T0FDZDtLQUNGLENBQUM7SUFDRixNQUFNLG1DQUFtQyxrREFBa0Q7TUFDekYsTUFBTSxZQUFZLE1BQU0sVUFBVSxDQUFDO01BQ25DLE1BQU0sTUFBTSxTQUFTLE9BQU8sRUFBRSxDQUFDO01BQy9CLE1BQU0sV0FBVyxhQUFhLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNuRCxNQUFNLE9BQU8sTUFBTSxRQUFRLEVBQUUsQ0FBQztNQUM5QixJQUFJLFdBQVcsS0FBSyxXQUFXLEVBQUU7UUFDL0IsT0FBTyxlQUFlLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO09BQzdDLE1BQU0sSUFBSSxPQUFPLEVBQUU7UUFDbEIsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLElBQUksMkJBQTJCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztPQUN2SCxNQUFNO1FBQ0wsT0FBTyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLElBQUksNEJBQTRCLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO09BQ3BIO0tBQ0YsQ0FBQztJQUNGLE1BQU0sNEJBQTRCLGtDQUFrQyxrQkFBa0IsQ0FBQyxNQUFNLElBQUksRUFBRSxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sOEJBQThCLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsRUFBRSxtQkFBbUIsZ0NBQWdDLENBQUMsTUFBTSxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLElBQUksOEJBQThCLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzNXLE1BQU0sMkJBQTJCLGtDQUFrQztNQUNqRSxNQUFNLFlBQVksTUFBTSxVQUFVLENBQUM7TUFDbkMsTUFBTSxPQUFPLFNBQVMsUUFBUSxFQUFFLENBQUM7TUFDakMsTUFBTSxNQUFNLFNBQVMsT0FBTyxFQUFFLENBQUM7TUFDL0IsTUFBTSxXQUFXLGFBQWEsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ25ELElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ25CLElBQUksV0FBVyxLQUFLLFdBQVcsSUFBSSxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksK0JBQStCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRTtVQUM5SCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN6QixNQUFNO1VBQ0wsTUFBTSxZQUFZLFNBQVMsQ0FBQyxNQUFNO1lBQ2hDLE1BQU0sTUFBTSxTQUFTLE9BQU8sRUFBRSxDQUFDO1lBQy9CLElBQUksa0RBQWtELEdBQUcsR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNuRyxNQUFNLGlCQUFpQixNQUFNO2NBQzNCLElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUN0SCxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO2VBQ2xIO2FBQ0YsQ0FBQztZQUNGLE1BQU0sa0JBQWtCLE1BQU07Y0FDNUIsYUFBYSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQztjQUN0RSxlQUFlLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsYUFBYSxDQUFDO2NBQzFFLFlBQVksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUM7Y0FDcEUsY0FBYyxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQzthQUN6RSxDQUFDO1lBQ0YsTUFBTSxzQkFBc0IsY0FBYztjQUN4QyxNQUFNLENBQUMsSUFBSSxXQUFXLEVBQUUsU0FBUztnQkFDL0IsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7a0JBQ2pCLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUN2QjtlQUNGLENBQUMsQ0FBQzthQUNKLENBQUM7WUFDRixNQUFNLFlBQVksTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxrQkFBa0IsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUN2RSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDckMsSUFBSSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUIsY0FBYyxFQUFFLENBQUM7WUFDakIsSUFBSSxXQUFXLEtBQUssTUFBTSxJQUFJLFdBQVcsS0FBSyxNQUFNLEVBQUU7Y0FDcEQsR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sR0FBRyxPQUFPLEdBQUcsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2FBQ3pHO1lBQ0QsSUFBSSxDQUFDLFNBQVMsWUFBWSxFQUFFLElBQUksb0JBQW9CLENBQUMsU0FBUyxPQUFPLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRTtjQUNuRixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN6QixNQUFNO2NBQ0wsTUFBTSxZQUFZLENBQUMsT0FBTyxHQUFHLGVBQWUsR0FBRyxRQUFRLENBQUMsQ0FBQztjQUN6RCxlQUFlLEVBQUUsQ0FBQztjQUNsQixtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7Y0FDckMsY0FBYyxFQUFFLENBQUM7YUFDbEI7WUFDRCxNQUFNLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1dBQzlCLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUM7T0FDYixNQUFNO1FBQ0wsT0FBTyxLQUFLLENBQUM7T0FDZDtLQUNGLENBQUM7SUFDRixNQUFNLGtCQUFrQixrQ0FBa0MseUJBQXlCLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsSUFBSSxRQUFRLElBQUksd0JBQXdCLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDOztJQUVoTyxNQUFNLDBCQUEwQixhQUFhLG9CQUFvQixZQUFZLEVBQUUsS0FBSztNQUNsRixNQUFNLFNBQVMsTUFBTSxRQUFRLEVBQUUsQ0FBQztNQUNoQyxNQUFNLFlBQVk7UUFDaEIsU0FBUyxJQUFJO1FBQ2IsVUFBVSxJQUFJO1FBQ2QsTUFBTSxJQUFJO1FBQ1YsYUFBYSxLQUFLO1FBQ2xCLFFBQVEsQ0FBQztRQUNULE1BQU0sSUFBSTtRQUNWLE1BQU07UUFDTixlQUFlLE1BQU07UUFDckIsWUFBWSxLQUFLLFVBQVU7UUFDM0IsZ0JBQWdCLE1BQU07UUFDdEIsd0JBQXdCLE1BQU07UUFDOUIsV0FBVyxLQUFLO1FBQ2hCLFlBQVksTUFBTTtRQUNsQixZQUFZLEtBQUs7UUFDakIsZ0JBQWdCLElBQUk7UUFDcEIsU0FBUztPQUNWLENBQUM7TUFDRixNQUFNLFFBQVEsT0FBTyxDQUFDLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7TUFDakQsT0FBTyxNQUFNLFNBQVMsQ0FBQyxTQUFTLEVBQUU7UUFDaEMsR0FBRyxLQUFLO1FBQ1IsR0FBRyxTQUFTO1FBQ1osR0FBRyxTQUFTO09BQ2IsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0saUJBQWlCLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hELE1BQU0sdUJBQXVCLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxDQUFDOztJQUVwRSxNQUFNLGFBQWEsUUFBUSxFQUFFLENBQUM7SUFDOUIsTUFBTSxLQUFLLFVBQVUsR0FBRyxDQUFDO0lBQ3pCLE1BQU0sZUFBZSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDaEQsTUFBTSxVQUFVLFVBQVUsUUFBUSxDQUFDO0lBQ25DLE1BQU0sWUFBWSxPQUFPLFVBQVUsRUFBRSxDQUFDO0lBQ3RDLE1BQU0sMkJBQTJCLHdCQUF3QjtNQUN2RCxNQUFNLFlBQVksR0FBRyxRQUFRLEtBQUssRUFBRSxVQUFVLEdBQUcsdUJBQXVCLEdBQUcsc0JBQXNCLENBQUM7TUFDbEcsTUFBTSxjQUFjLE1BQU0sVUFBVSxZQUFZLEVBQUUsQ0FBQztNQUNuRCxNQUFNLHdCQUF3QixXQUFXLEdBQUcsV0FBVyxHQUFHLFdBQVcsQ0FBQztNQUN0RSxNQUFNLHlCQUF5QixVQUFVO1FBQ3ZDLElBQUksV0FBVyxFQUFFO1VBQ2YsT0FBTyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztTQUNqQyxNQUFNO1VBQ0wsT0FBTyxXQUFXLENBQUM7U0FDcEI7T0FDRixDQUFDO01BQ0Ysd0JBQXdCLENBQUM7UUFDdkI7VUFDRSxTQUFTLEVBQUUsVUFBVTtVQUNyQixRQUFRLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUM7U0FDMUM7UUFDRDtVQUNFLFNBQVMsRUFBRSxVQUFVO1VBQ3JCLFFBQVEsTUFBTSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7U0FDakQ7UUFDRDtVQUNFLFNBQVMsRUFBRSxPQUFPO1VBQ2xCLFFBQVEsTUFBTSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7U0FDaEQ7UUFDRDtVQUNFLFNBQVMsRUFBRSxVQUFVO1VBQ3JCLFFBQVEsTUFBTSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7U0FDakQ7UUFDRDtVQUNFLFNBQVMsRUFBRSxPQUFPO1VBQ2xCLFFBQVEsTUFBTSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7U0FDaEQ7UUFDRDtVQUNFLFNBQVMsRUFBRSxVQUFVO1VBQ3JCLFFBQVEsTUFBTSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO1NBQ3hEO1FBQ0Q7VUFDRSxTQUFTLEVBQUUsT0FBTztVQUNsQixRQUFRLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQztTQUN2RDtRQUNEO1VBQ0UsU0FBUyxFQUFFLFVBQVU7VUFDckIsUUFBUSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQztTQUNqRDtRQUNEO1VBQ0UsU0FBUyxFQUFFLE9BQU87VUFDbEIsUUFBUSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztTQUNoRDtRQUNEO1VBQ0UsU0FBUyxFQUFFLFVBQVU7VUFDckIsUUFBUSxNQUFNLENBQUMsZUFBZSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUscUJBQXFCLENBQUM7U0FDdEU7UUFDRDtVQUNFLFNBQVMsRUFBRSxPQUFPO1VBQ2xCLFFBQVEsTUFBTSxDQUFDLGVBQWUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixDQUFDO1NBQ3JFO1FBQ0QsR0FBRyxZQUFZLEdBQUc7VUFDaEI7WUFDRSxTQUFTLEVBQUUsVUFBVTtZQUNyQixRQUFRLElBQUk7WUFDWixRQUFRLE1BQU0sQ0FBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUM3RTtVQUNEO1lBQ0UsU0FBUyxFQUFFLE9BQU87WUFDbEIsUUFBUSxJQUFJO1lBQ1osUUFBUSxNQUFNLENBQUMsZUFBZSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDNUU7VUFDRDtZQUNFLFNBQVMsRUFBRSxVQUFVO1lBQ3JCLFNBQVMsSUFBSTtZQUNiLFFBQVEsTUFBTSxDQUFDLGVBQWUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1dBQzlFO1NBQ0YsR0FBRztVQUNGO1lBQ0UsU0FBUyxFQUFFLFVBQVU7WUFDckIsU0FBUyxJQUFJO1lBQ2IsUUFBUSxNQUFNLENBQUMsZUFBZSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDN0U7VUFDRDtZQUNFLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLFNBQVMsSUFBSTtZQUNiLFFBQVEsTUFBTSxDQUFDLGVBQWUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO1dBQzVFO1NBQ0Y7UUFDRDtVQUNFLFNBQVMsRUFBRSxVQUFVO1VBQ3JCLFFBQVEsTUFBTSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7U0FDakQ7UUFDRDtVQUNFLFNBQVMsRUFBRSxPQUFPO1VBQ2xCLFFBQVEsTUFBTSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7U0FDaEQ7UUFDRDtVQUNFLFNBQVMsRUFBRSxVQUFVO1VBQ3JCLFFBQVEsTUFBTSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7U0FDakQ7UUFDRDtVQUNFLFNBQVMsRUFBRSxPQUFPO1VBQ2xCLFFBQVEsTUFBTSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7U0FDaEQ7UUFDRDtVQUNFLFNBQVMsRUFBRSxVQUFVO1VBQ3JCLFFBQVEsTUFBTSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7U0FDakQ7UUFDRDtVQUNFLFNBQVMsRUFBRSxPQUFPO1VBQ2xCLFFBQVEsTUFBTSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7U0FDaEQ7UUFDRDtVQUNFLFNBQVMsRUFBRSxVQUFVO1VBQ3JCLFFBQVEsTUFBTSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7U0FDakQ7UUFDRDtVQUNFLFNBQVMsRUFBRSxPQUFPO1VBQ2xCLFFBQVEsTUFBTSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7U0FDaEQ7UUFDRDtVQUNFLFNBQVMsRUFBRSxVQUFVO1VBQ3JCLFFBQVEsTUFBTSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7U0FDakQ7UUFDRDtVQUNFLFNBQVMsRUFBRSxPQUFPO1VBQ2xCLFFBQVEsTUFBTSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7U0FDaEQ7T0FDRixFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxNQUFNLFVBQVUsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLGVBQWU7UUFDckUsR0FBRyxlQUFlLEVBQUUsQ0FBQztRQUNyQixNQUFNLGNBQWMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxXQUFXLG1CQUFtQixFQUFFLEVBQUU7VUFDckMsV0FBVyxFQUFFLENBQUM7VUFDZCxjQUFjLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ25DO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sdUJBQXVCLHFDQUFxQyxPQUFPLENBQUM7TUFDeEU7UUFDRSxTQUFTLEVBQUUsVUFBVTtRQUNyQixRQUFRLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUM7T0FDekM7TUFDRDtRQUNFLFNBQVMsRUFBRSxPQUFPO1FBQ2xCLFFBQVEsTUFBTSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQztPQUN6QztNQUNELEdBQUcsWUFBWSxHQUFHO1FBQ2hCO1VBQ0UsU0FBUyxFQUFFLFVBQVU7VUFDckIsUUFBUSxJQUFJO1VBQ1osUUFBUSxNQUFNLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQztTQUNyQztRQUNEO1VBQ0UsU0FBUyxFQUFFLE9BQU87VUFDbEIsUUFBUSxJQUFJO1VBQ1osUUFBUSxNQUFNLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQztTQUNyQztRQUNELEdBQUcsa0JBQWtCLEdBQUcsQ0FBQztZQUNyQixTQUFTLFNBQVMsR0FBRyxHQUFHLEdBQUcsRUFBRTtZQUM3QixRQUFRLE1BQU0sQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDO1dBQ3JDLENBQUMsR0FBRyxFQUFFO09BQ1YsR0FBRztRQUNGO1VBQ0UsU0FBUyxFQUFFLFVBQVU7VUFDckIsU0FBUyxJQUFJO1VBQ2IsUUFBUSxNQUFNLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQztTQUNyQztRQUNEO1VBQ0UsU0FBUyxFQUFFLE9BQU87VUFDbEIsU0FBUyxJQUFJO1VBQ2IsUUFBUSxNQUFNLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQztTQUNyQztPQUNGO0tBQ0YsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNSLE1BQU0sVUFBVSxtQkFBbUI7TUFDakMsSUFBSSxxQkFBcUIsS0FBSyxDQUFDO01BQy9CLE1BQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPO1FBQzFCLHFCQUFxQixHQUFHLFFBQVEsS0FBSyxFQUFFLFVBQVUsQ0FBQztRQUNsRCxJQUFJLENBQUMsR0FBRyxtQkFBbUIsRUFBRSxFQUFFO1VBQzdCLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDOUM7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTztRQUN4QixJQUFJLENBQUMsR0FBRyxtQkFBbUIsRUFBRSxFQUFFO1VBQzdCLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztTQUN2RDtRQUNELHFCQUFxQixLQUFLLENBQUM7T0FDNUIsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLGdDQUFnQyxRQUFRO01BQzVDLE9BQU8sSUFBSSxFQUFFO1FBQ1gsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLFVBQVUsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7VUFDbEYsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sSUFBSSxZQUFZLENBQUM7T0FDekI7TUFDRCxPQUFPLElBQUksQ0FBQztLQUNiLENBQUM7SUFDRixNQUFNLHNCQUFzQixrQkFBa0I7TUFDNUMsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLE1BQU0sb0NBQW9DLE1BQU0sT0FBTyxrQ0FBa0MsRUFBRSxDQUFDO01BQzVGLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDVCxPQUFPO09BQ1I7TUFDRCxJQUFJLGNBQWMsS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLEVBQUU7UUFDdEMsTUFBTSxhQUFhLDZCQUE2QixDQUFDLElBQUksV0FBVyxDQUFDLENBQUM7UUFDbEUsSUFBSSxVQUFVLElBQUksY0FBYyxLQUFLLENBQUMsVUFBVSxTQUFTLENBQUMsRUFBRTtVQUMxRCxJQUFJLGFBQWEsQ0FBQyxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksV0FBVyxDQUFDLENBQUM7U0FDbEU7T0FDRjtNQUNELE1BQU0sTUFBTSxHQUFHLFVBQVUsRUFBRSxDQUFDO01BQzVCLElBQUksVUFBVSxFQUFFLENBQUM7TUFDakIsSUFBSSxJQUFJLGNBQWMsRUFBRSxFQUFFO1FBQ3hCLE1BQU0sU0FBUyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0MsSUFBSSxXQUFXLElBQUksQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQztRQUNULE9BQU8sT0FBTyxNQUFNLFFBQVEsRUFBRSxFQUFFO1VBQzlCLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2xCLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0QixHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEIsTUFBTTtXQUNQO1VBQ0QsSUFBSSxpQ0FBaUMsQ0FBQyxJQUFJLFNBQVMsWUFBWSxFQUFFLENBQUMsRUFBRTtZQUNsRSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QixHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QixNQUFNO1dBQ1A7VUFDRCxXQUFXLElBQUksQ0FBQztVQUNoQixPQUFPLE1BQU0sS0FBSyxFQUFFLENBQUM7U0FDdEI7UUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFO1VBQ1QsR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1VBQzFCLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN6QjtPQUNGLE1BQU07UUFDTCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUNoQixJQUFJLElBQUksWUFBWSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksWUFBWSxDQUFDLEVBQUU7WUFDckQsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDeEIsTUFBTTtZQUNMLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1dBQ3ZCO1NBQ0YsTUFBTTtVQUNMLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztVQUN0QixHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDckI7T0FDRjtNQUNELE1BQU0sVUFBVSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDN0IsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ2xDLENBQUM7SUFDRixNQUFNLGtCQUFrQixlQUFlO01BQ3JDLE1BQU0sT0FBTyxHQUFHLFFBQVEsRUFBRSxDQUFDO01BQzNCLElBQUksWUFBWSxDQUFDO01BQ2pCLElBQUksU0FBUyxJQUFJLENBQUM7TUFDbEIsT0FBTyxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sSUFBSSxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU8sRUFBRTtRQUM5RSxJQUFJLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEtBQUssTUFBTSxFQUFFO1VBQzdDLGVBQWUsTUFBTSxDQUFDO1VBQ3RCLE1BQU07U0FDUDtRQUNELFNBQVMsTUFBTSxXQUFXLENBQUM7T0FDNUI7TUFDRCxPQUFPLE1BQU0sS0FBSyxJQUFJLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQztLQUM5QyxDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsVUFBVTtNQUNqQyxPQUFPLFFBQVEsS0FBSyxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxVQUFVLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQztLQUNqRyxDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsVUFBVTtNQUNuQyxPQUFPLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLGVBQWU7UUFDaEUsT0FBTyxXQUFXLFNBQVMsWUFBWSxFQUFFLENBQUM7T0FDM0MsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sd0JBQXdCLFVBQVU7TUFDdEMsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU87UUFDNUMsT0FBTyxZQUFZLENBQUMsWUFBWSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztPQUNoRCxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ2IsQ0FBQztJQUNGLE1BQU0sYUFBYSxPQUFPO01BQ3hCLEdBQUcsVUFBVSxHQUFHLHlCQUF5QixDQUFDO0tBQzNDLENBQUM7SUFDRixNQUFNLGtCQUFrQix3Q0FBd0M7TUFDOUQsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLFFBQVEsS0FBSyxDQUFDLG9CQUFvQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxjQUFjO1FBQy9FLE1BQU0sZ0JBQWdCLFNBQVMsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzVELE1BQU0sWUFBWTtVQUNoQixHQUFHLGFBQWE7VUFDaEIsR0FBRyxVQUFVO1NBQ2QsQ0FBQztRQUNGLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztPQUNoQyxDQUFDLENBQUM7TUFDSCxNQUFNLGlCQUFpQixRQUFRLEtBQUssQ0FBQyxvQkFBb0IsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLFdBQVcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7TUFDOUcsTUFBTSxvQkFBb0IsUUFBUSxLQUFLLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFrQixRQUFRLENBQUMsY0FBYyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztNQUM1SSxLQUFLLENBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGlDQUFpQztRQUN4RSxNQUFNLGtCQUFrQixRQUFRLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDM0YsTUFBTSxhQUFhO1VBQ2pCLEdBQUcsV0FBVztVQUNkLEdBQUcsZUFBZTtTQUNuQixDQUFDO1FBQ0YsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO09BQ3BELENBQUMsQ0FBQztNQUNILE1BQU0sZUFBZTtRQUNuQixPQUFPO1FBQ1AsT0FBTztPQUNSLENBQUM7TUFDRixNQUFNLGlCQUFpQixRQUFRLENBQUMsb0JBQW9CLEVBQUUsY0FBYyxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUN0RyxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7S0FDdEMsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLGtCQUFrQjtNQUM1QyxNQUFNLHNCQUFzQixrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUN2RCxJQUFJLG1CQUFtQixZQUFZLEVBQUUsS0FBSyxJQUFJLFFBQVEsWUFBWSxFQUFFLEVBQUU7UUFDcEUsTUFBTSx1QkFBdUIsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0QsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztPQUNyRDtLQUNGLENBQUM7SUFDRixNQUFNLGlCQUFpQiwrQ0FBK0MsYUFBYSxJQUFJLFdBQVc7TUFDaEcsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLE1BQU0sU0FBUyxNQUFNLE9BQU8sQ0FBQztNQUM3QixNQUFNLGVBQWUsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDaEQsTUFBTSxrQkFBa0IsV0FBVyxHQUFHLFdBQVcsU0FBUyxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUM7TUFDOUUsSUFBSSxPQUFPLFNBQVMsQ0FBQztNQUNyQixNQUFNLHFCQUFxQixNQUFNLHNCQUFzQixFQUFFLENBQUM7TUFDMUQsSUFBSSxLQUFLLENBQUM7TUFDVixJQUFJLElBQUksSUFBSSxlQUFlLEtBQUssT0FBTyxJQUFJLGVBQWUsS0FBSyxJQUFJLEVBQUU7UUFDbkUsUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksWUFBWSxDQUFDLENBQUM7T0FDMUMsTUFBTTtRQUNMLFFBQVEsV0FBVyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7T0FDdEM7TUFDRCxJQUFJLFlBQVksS0FBSyxDQUFDO01BQ3RCLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDZixHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BDLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDckMsTUFBTTtRQUNMLEdBQUc7VUFDRCxJQUFJLGtCQUFrQixDQUFDLElBQUksU0FBUyxDQUFDLEVBQUU7WUFDckMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUU7Y0FDL0MsU0FBUzthQUNWO1lBQ0QsTUFBTSxhQUFhLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLEdBQUcsVUFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEMsSUFBSSxLQUFLLGNBQWMsRUFBRSxFQUFFO2NBQ3pCLFVBQVUsWUFBWSxDQUFDLEtBQUssV0FBVyxDQUFDLENBQUM7Y0FDekMsS0FBSyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDL0IsTUFBTTtjQUNMLFlBQVksVUFBVSxDQUFDO2NBQ3ZCLEtBQUssWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQy9CO1dBQ0Y7U0FDRixRQUFRLENBQUMsT0FBTyxJQUFJLFdBQVcsS0FBSyxJQUFJLEtBQUssWUFBWSxFQUFFO09BQzdEO01BQ0QsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQ25DLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUN0QixPQUFPLEtBQUssQ0FBQztLQUNkLENBQUM7O0lBRUYsTUFBTSxpQkFBaUIscUJBQXFCLE1BQU0sSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3JGLE1BQU0sa0JBQWtCLGdDQUFnQztNQUN0RCxJQUFJLE9BQU8sT0FBTyxDQUFDO01BQ25CLE9BQU8sSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksWUFBWSxDQUFDLEVBQUU7UUFDeEQsTUFBTSxTQUFTLElBQUksY0FBYyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUU7VUFDbkMsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDMUI7UUFDRCxPQUFPLE1BQU0sQ0FBQztPQUNmO01BQ0QsT0FBTyxLQUFLLENBQUM7S0FDZCxDQUFDO0lBQ0YsTUFBTSw0QkFBNEIsK0JBQStCLENBQUMsUUFBUSxJQUFJLE9BQU8sU0FBUyxZQUFZLEVBQUUsS0FBSyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLGVBQWUsQ0FBQyxNQUFNLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEtBQUssQ0FBQyxNQUFNLE9BQU8scUJBQXFCLEVBQUUsRUFBRSxFQUFFLFNBQVMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZTLE1BQU0sZ0JBQWdCLHlDQUF5QztNQUM3RCxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO01BQ2YsTUFBTSxXQUFXLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO01BQzVELE1BQU0sT0FBTyxjQUFjLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO01BQ2pELElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDVCxPQUFPO09BQ1I7TUFDRCxNQUFNLElBQUksWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUN2QyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDdEMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLFdBQVcsY0FBYyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzdMLE1BQU0sSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7T0FDaEM7S0FDRixDQUFDOztJQUVGLE1BQU0sZ0JBQWdCLGVBQWU7TUFDbkMsT0FBTyxHQUFHLFdBQVcsSUFBSSxHQUFHLFdBQVcsU0FBUyxLQUFLLElBQUksQ0FBQztLQUMzRCxDQUFDO0lBQ0YsTUFBTSxlQUFlLE9BQU87TUFDMUIsSUFBSSxFQUFFLENBQUM7TUFDUCxPQUFPLENBQUMsQ0FBQyxLQUFLLEdBQUcsV0FBVyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLE1BQU0sR0FBRyxDQUFDO0tBQzNGLENBQUM7SUFDRixNQUFNLFlBQVkscUJBQXFCO01BQ3JDLE1BQU0sYUFBYSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQztNQUM1RSxPQUFPLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUM7S0FDeEUsQ0FBQztJQUNGLE1BQU0sY0FBYyxPQUFPO01BQ3pCLE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLGNBQWMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7S0FDaEUsQ0FBQztJQUNGLE1BQU0sYUFBYSxPQUFPO01BQ3hCLE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLGNBQWMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7S0FDaEUsQ0FBQztJQUNGLE1BQU0sZUFBZSxPQUFPO01BQzFCLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO0tBQ3hELENBQUM7SUFDRixNQUFNLG9CQUFvQixrQkFBa0I7TUFDMUMsTUFBTSx1QkFBdUIsY0FBYyxXQUFXLENBQUM7TUFDdkQsT0FBTyxVQUFVLENBQUMsb0JBQW9CLENBQUMsR0FBRyxvQkFBb0IsR0FBRyxjQUFjLENBQUM7S0FDakYsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLHdDQUF3QztNQUM5RCxJQUFJLE9BQU8sY0FBYyxDQUFDLEtBQUssR0FBRyxZQUFZLEdBQUcsV0FBVyxDQUFDLENBQUM7TUFDOUQsT0FBTyxJQUFJLEVBQUU7UUFDWCxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUNyQixNQUFNO1NBQ1A7UUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLEdBQUcsYUFBYSxHQUFHLGlCQUFpQixDQUFDLENBQUM7T0FDeEQ7TUFDRCxPQUFPLElBQUksS0FBSyxXQUFXLENBQUM7S0FDN0IsQ0FBQztJQUNGLE1BQU0sV0FBVyx1RUFBdUU7TUFDdEYsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLE1BQU0sTUFBTSxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7TUFDdEMsTUFBTSxrQkFBa0IsY0FBYyxXQUFXLENBQUM7TUFDbEQsSUFBSSxjQUFjLEtBQUssTUFBTSxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRTtRQUMzRCxPQUFPO09BQ1I7TUFDRCxJQUFJLFlBQVksQ0FBQyxjQUFjLENBQUMsRUFBRTtRQUNoQyxlQUFlLElBQUksQ0FBQztPQUNyQjtNQUNELElBQUksV0FBVyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7TUFDNUMsSUFBSSxlQUFlLENBQUMsY0FBYyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxlQUFlLENBQUMsY0FBYyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRTtRQUM3RyxJQUFJLFNBQVMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLEVBQUU7VUFDbkMsTUFBTSx1QkFBdUIsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7VUFDL0QsR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFFLG9CQUFvQixDQUFDLENBQUM7VUFDaEQsSUFBSSxZQUFZLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDaEMsR0FBRyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztXQUNsQyxNQUFNO1lBQ0wsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7V0FDNUI7U0FDRixNQUFNO1VBQ0wsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1NBQ3ZDO09BQ0YsTUFBTSxJQUFJLGVBQWUsQ0FBQyxjQUFjLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxFQUFFO1FBQzdELElBQUksU0FBUyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsRUFBRTtVQUNuQyxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztVQUM3RCxRQUFRLFlBQVksQ0FBQyxHQUFHLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7VUFDbEQsUUFBUSxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDdEMsTUFBTTtVQUNMLGVBQWUsYUFBYSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztTQUN4RDtRQUNELEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO09BQ3pCLE1BQU0sSUFBSSxlQUFlLENBQUMsY0FBYyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRTtRQUM5RCxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUM3RCxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztPQUN6QixNQUFNO1FBQ0wsaUJBQWlCLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sU0FBUyxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sV0FBVyxNQUFNLGdCQUFnQixFQUFFLENBQUM7UUFDMUMsSUFBSSxZQUFZLEtBQUssSUFBSSxJQUFJLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUU7VUFDMUQsV0FBVyxRQUFRLFdBQVcsQ0FBQztVQUMvQixHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDM0MsTUFBTTtVQUNMLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztVQUMxQyxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDM0M7UUFDRCxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztPQUN6QjtNQUNELG1CQUFtQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztLQUN2QyxDQUFDOztJQUVGLE1BQU0sV0FBVyxZQUFZO01BQzNCLE1BQU0sQ0FBQyxhQUFhLENBQUMsWUFBWSxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsUUFBUTtRQUN0RSxNQUFNLFVBQVUsSUFBSSxJQUFJLENBQUM7UUFDekIsT0FBTyxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUM7T0FDMUMsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sMEJBQTBCLGtCQUFrQjtNQUNoRCxNQUFNLGFBQWEsTUFBTSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7TUFDMUQsT0FBTyxVQUFVLEtBQUssSUFBSSxJQUFJLE1BQU0sSUFBSSx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsS0FBSyxPQUFPLENBQUM7S0FDM0YsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLGNBQWM7TUFDbEMsT0FBTyxHQUFHLElBQUksR0FBRyxTQUFTLEtBQUssR0FBRyxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3hELENBQUM7SUFDRixNQUFNLDBCQUEwQix5QkFBeUI7TUFDdkQsT0FBTyxTQUFTLFNBQVMsS0FBSyxRQUFRLElBQUksU0FBUyxnQkFBZ0IsSUFBSSxTQUFTLGdCQUFnQixTQUFTLEtBQUssUUFBUSxDQUFDO0tBQ3hILENBQUM7SUFDRixNQUFNLGdCQUFnQixlQUFlO01BQ25DLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEtBQUssQ0FBQyxJQUFJLE1BQU0sU0FBUyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLE9BQU8sQ0FBQztLQUNwTyxDQUFDO0lBQ0YsTUFBTSxzQ0FBc0MscUNBQXFDO01BQy9FLElBQUksRUFBRSxDQUFDO01BQ1AsTUFBTSxjQUFjLEVBQUUsQ0FBQztNQUN2QixJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsT0FBTztPQUNSO01BQ0QsSUFBSSxjQUFjLEtBQUssQ0FBQztNQUN4QixPQUFPLGNBQWMsV0FBVyxXQUFXLEVBQUU7UUFDM0MsSUFBSSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtVQUM1QixPQUFPO1NBQ1I7UUFDRCxJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsU0FBUyxZQUFZLEVBQUUsQ0FBQyxFQUFFO1VBQ3hGLFdBQVcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQy9CO09BQ0Y7TUFDRCxJQUFJLElBQUksV0FBVyxPQUFPLENBQUM7TUFDM0IsT0FBTyxDQUFDLEVBQUUsRUFBRTtRQUNWLGNBQWMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLGNBQWMsRUFBRSxJQUFJLFdBQVcsV0FBVyxLQUFLLFdBQVcsVUFBVSxJQUFJLENBQUMsQ0FBQyxLQUFLLFdBQVcsV0FBVyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxVQUFVLE1BQU0sRUFBRSxFQUFFO1VBQ2hMLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3pCLE1BQU07VUFDTCxJQUFJLGFBQWEsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLEVBQUU7WUFDbkMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7V0FDekI7U0FDRjtPQUNGO0tBQ0YsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLDhCQUE4QjtNQUN4RCxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sTUFBTSxDQUFDO09BQ2YsTUFBTSxJQUFJLEtBQUssRUFBRTtRQUNoQixPQUFPLE1BQU0sS0FBSyxDQUFDLElBQUksU0FBUyxLQUFLLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7T0FDbEYsTUFBTTtRQUNMLE9BQU8sTUFBTSxLQUFLLFNBQVMsS0FBSyxPQUFPLEdBQUcsQ0FBQyxJQUFJLFNBQVMsS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssTUFBTSxHQUFHLFNBQVMsS0FBSyxPQUFPLEdBQUcsTUFBTSxDQUFDO09BQzFIO0tBQ0YsQ0FBQztJQUNGLE1BQU0scUJBQXFCLE9BQU87TUFDaEMsTUFBTSxTQUFTLEdBQUcsV0FBVyxFQUFFLENBQUM7TUFDaEMsTUFBTSxTQUFTLENBQUMsR0FBRyxlQUFlLEVBQUUsbUJBQW1CLENBQUMsSUFBSSxFQUFFLEdBQUcsZUFBZSxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQztNQUNwRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxhQUFhLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO01BQzdGLE9BQU8sTUFBTSxDQUFDO0tBQ2YsQ0FBQztJQUNGLE1BQU0sd0JBQXdCLFFBQVE7TUFDcEMsSUFBSSxjQUFjLElBQUksQ0FBQztNQUN2QixHQUFHO1FBQ0QsSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7VUFDekIsV0FBVyxLQUFLLEdBQUcsV0FBVyxLQUFLLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDN0Q7UUFDRCxjQUFjLFdBQVcsV0FBVyxDQUFDO09BQ3RDLFFBQVEsV0FBVyxFQUFFO0tBQ3ZCLENBQUM7SUFDRixNQUFNLG9DQUFvQyxrREFBa0Q7TUFDMUYsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO01BQ1gsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLE1BQU0sZUFBZSxDQUFDLEtBQUssZUFBZSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxDQUFDO01BQzNHLElBQUksY0FBYyxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQztNQUN4RCxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsRUFBRTtRQUNwRCxjQUFjLFdBQVcsSUFBSSxZQUFZLENBQUM7UUFDMUMsSUFBSSxDQUFDLFdBQVcsY0FBYyxFQUFFLEVBQUU7VUFDaEMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1VBQzFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztVQUN0QyxXQUFXLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztVQUNsQyxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7VUFDMUIsR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1VBQ3hCLE9BQU8sUUFBUSxDQUFDO1NBQ2pCO1FBQ0QsSUFBSSxPQUFPLFNBQVMsQ0FBQztRQUNyQixPQUFPLElBQUksSUFBSSxJQUFJLFdBQVcsS0FBSyxXQUFXLEVBQUU7VUFDOUMsT0FBTyxJQUFJLFdBQVcsQ0FBQztTQUN4QjtRQUNELElBQUksU0FBUyxDQUFDO1FBQ2QsT0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUNqQyxZQUFZLElBQUksQ0FBQztVQUNqQixPQUFPLElBQUksZ0JBQWdCLENBQUM7U0FDN0I7UUFDRCxNQUFNLGdCQUFnQixDQUFDLEtBQUssU0FBUyxLQUFLLElBQUksSUFBSSxTQUFTLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsU0FBUyxjQUFjLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQztRQUM1SixJQUFJLFNBQVMsSUFBSSxhQUFhLElBQUksTUFBTSxPQUFPLGFBQWEsQ0FBQyxhQUFhLEVBQUUsWUFBWSxZQUFZLEVBQUUsQ0FBQyxFQUFFO1VBQ3ZHLE1BQU0sa0JBQWtCLFNBQVMsV0FBVyxDQUFDO1VBQzdDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztVQUMxQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7VUFDdEMsZUFBZSxhQUFhLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1VBQ2xELE9BQU8sU0FBUyxDQUFDO1VBQ2pCLE9BQU8sSUFBSSxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakMsTUFBTSxPQUFPLElBQUksWUFBWSxDQUFDO1lBQzlCLFFBQVEsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLE9BQU8sSUFBSSxDQUFDO1dBQ2I7VUFDRCxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7VUFDaEMsR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQy9CO09BQ0Y7TUFDRCxPQUFPLFNBQVMsQ0FBQztLQUNsQixDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsZ0JBQWdCO01BQzNDLEtBQUssVUFBVSxFQUFFLENBQUM7TUFDbEIsTUFBTSxZQUFZLEtBQUssVUFBVSxDQUFDO01BQ2xDLElBQUksQ0FBQyxTQUFTLElBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLGtCQUFrQixLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO1FBQzNHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztPQUN0QjtLQUNGLENBQUM7SUFDRixNQUFNLHFCQUFxQix1QkFBdUI7TUFDaEQsTUFBTSxjQUFjLDhCQUE4QixDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQzNELElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ3pCLE9BQU8sS0FBSyxDQUFDO09BQ2QsTUFBTSxJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUNoQyxPQUFPLFVBQVUsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxTQUFTLFNBQVMsWUFBWSxFQUFFLENBQUMsQ0FBQztPQUNqRixNQUFNO1FBQ0wsT0FBTyxXQUFXLENBQUM7T0FDcEI7S0FDRixDQUFDO0lBQ0YsTUFBTSxXQUFXLGlCQUFpQjtNQUNoQyxJQUFJLFNBQVMsQ0FBQztNQUNkLElBQUksTUFBTSxDQUFDO01BQ1gsSUFBSSxlQUFlLENBQUM7TUFDcEIsSUFBSSxjQUFjLENBQUM7TUFDbkIsSUFBSSw2QkFBNkIsS0FBSyxDQUFDO01BQ3ZDLE1BQU0sTUFBTSxNQUFNLElBQUksQ0FBQztNQUN2QixNQUFNLFNBQVMsTUFBTSxPQUFPLEVBQUUsc0JBQXNCLE1BQU0sb0JBQW9CLEVBQUUsQ0FBQztNQUNqRixNQUFNLE1BQU0sTUFBTSxVQUFVLE9BQU8sRUFBRSxDQUFDO01BQ3RDLE1BQU0sZUFBZSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNoRCxNQUFNLFFBQVEsWUFBWSxRQUFRLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQztNQUN2RCxNQUFNLFFBQVEsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFDO01BQzlDLE1BQU0sUUFBUSxLQUFLLE9BQU8sQ0FBQyxXQUFXLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO01BQ3hGLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxJQUFJLEtBQUssQ0FBQztNQUMvQyxNQUFNLG1CQUFtQixRQUFRO1FBQy9CLE9BQU8sY0FBYyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUNyRyxDQUFDO01BQ0YsTUFBTSw2QkFBNkIsU0FBUztRQUMxQyxNQUFNLG1CQUFtQixtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZFLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEtBQUssR0FBRyxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLEdBQUcsU0FBUyxLQUFLLE9BQU8sQ0FBQyxFQUFFO1VBQ3BHLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLFNBQVMsV0FBVyxLQUFLLFdBQVcsSUFBSSwwQkFBMEIsSUFBSSxDQUFDLEtBQUssRUFBRTtVQUNoRixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsSUFBSSxLQUFLLElBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsS0FBSyxXQUFXLFdBQVcsRUFBRTtVQUMzRSxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsSUFBSSx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksdUJBQXVCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFO1VBQzNGLE9BQU8sMEJBQTBCLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQywwQkFBMEIsSUFBSSxLQUFLLENBQUM7U0FDckY7UUFDRCxNQUFNLFNBQVMsSUFBSSxhQUFhLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3pELElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1VBQ3ZCLElBQUksS0FBSyxJQUFJLGdCQUFnQixLQUFLLENBQUMsRUFBRTtZQUNuQyxNQUFNLEtBQUssRUFBRSxDQUFDO1dBQ2YsTUFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLGdCQUFnQixLQUFLLFNBQVMsS0FBSyxPQUFPLEVBQUU7WUFDL0QsTUFBTSxLQUFLLEVBQUUsQ0FBQztXQUNmO1NBQ0Y7UUFDRCxJQUFJLElBQUksQ0FBQztRQUNULE9BQU8sT0FBTyxNQUFNLFFBQVEsRUFBRSxFQUFFO1VBQzlCLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO2NBQ3hDLE1BQU0sT0FBTyxJQUFJLFNBQVMsWUFBWSxFQUFFLENBQUM7Y0FDekMsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO2dCQUM5QyxPQUFPLEtBQUssQ0FBQztlQUNkO2FBQ0Y7V0FDRixNQUFNLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUN6RCxPQUFPLEtBQUssQ0FBQztXQUNkO1VBQ0QsSUFBSSxLQUFLLEVBQUU7WUFDVCxNQUFNLEtBQUssRUFBRSxDQUFDO1dBQ2YsTUFBTTtZQUNMLE1BQU0sS0FBSyxFQUFFLENBQUM7V0FDZjtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7T0FDYixDQUFDO01BQ0YsTUFBTSxzQkFBc0IsTUFBTTtRQUNoQyxJQUFJLEtBQUssQ0FBQztRQUNWLElBQUksdUJBQXVCLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxrQkFBa0IsS0FBSyxRQUFRLEVBQUU7VUFDcEYsUUFBUSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUN4QyxNQUFNO1VBQ0wsUUFBUSxnQkFBZ0IsRUFBRSxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLElBQUksYUFBYSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLEVBQUUsYUFBYSxJQUFJLEVBQUUsQ0FBQyxFQUFFO1VBQ2xKLFFBQVEsR0FBRyxNQUFNLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ2hELE1BQU07VUFDTCxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDckM7UUFDRCxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkMsT0FBTyxLQUFLLENBQUM7T0FDZCxDQUFDO01BQ0YsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVc7UUFDcEMsR0FBRyxTQUFTLENBQUMsT0FBTyxlQUFlLEVBQUUsT0FBTyxZQUFZLENBQUMsQ0FBQztRQUMxRCxHQUFHLE9BQU8sQ0FBQyxPQUFPLGFBQWEsRUFBRSxPQUFPLFVBQVUsQ0FBQyxDQUFDO09BQ3JELENBQUMsQ0FBQztNQUNILFlBQVksR0FBRyxlQUFlLENBQUM7TUFDL0IsU0FBUyxHQUFHLFlBQVksQ0FBQztNQUN6QixNQUFNLFdBQVcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUFDO01BQ3pDLE1BQU0sVUFBVSxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUM7TUFDdkMsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRTtRQUMzRSw2QkFBNkIsTUFBTSxHQUFHLFNBQVMsV0FBVyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ3RFLFlBQVksU0FBUyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsV0FBVyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUM7UUFDakcsSUFBSSwwQkFBMEIsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7VUFDckQsU0FBUyxTQUFTLEtBQUssT0FBTyxDQUFDO1NBQ2hDLE1BQU07VUFDTCxTQUFTLENBQUMsQ0FBQztTQUNaO09BQ0Y7TUFDRCxNQUFNLGVBQWUsZUFBZSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztNQUNyRCxJQUFJLENBQUMsWUFBWSxJQUFJLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRTtRQUMvRCxPQUFPO09BQ1I7TUFDRCxJQUFJLENBQUMsUUFBUSxFQUFFO1FBQ2IsWUFBWSxpQ0FBaUMsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7T0FDN0Y7TUFDRCxJQUFJLGNBQWMsR0FBRyxVQUFVLENBQUMsU0FBUyxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyxRQUFRLEVBQUUsQ0FBQztNQUN6RSxpQkFBaUIsYUFBYSxDQUFDLFdBQVcsS0FBSyxJQUFJLElBQUksV0FBVyxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLFdBQVcsV0FBVyxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsV0FBVyxXQUFXLEVBQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7TUFDN0ssa0JBQWtCLFdBQVcsR0FBRyxXQUFXLFNBQVMsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDO01BQ3hFLE1BQU0scUJBQXFCLGNBQWMsR0FBRyxjQUFjLFNBQVMsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDO01BQ3ZGLElBQUksa0JBQWtCLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1FBQzNDLE1BQU0sVUFBVSxjQUFjLENBQUM7UUFDL0IsY0FBYyxPQUFPLENBQUM7UUFDdEIsaUJBQWlCLE9BQU8sV0FBVyxDQUFDO1FBQ3BDLGtCQUFrQixrQkFBa0IsQ0FBQztPQUN0QztNQUNELElBQUksV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLEVBQUU7UUFDM0YsT0FBTyxhQUFhLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxDQUFDO09BQzdEO01BQ0QsSUFBSSxjQUFjLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUU7UUFDdkUsSUFBSSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtVQUM1QixRQUFRLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7VUFDOUUsT0FBTztTQUNSO09BQ0Y7TUFDRCxJQUFJLENBQUMsZUFBZSxLQUFLLFdBQVcsS0FBSyxNQUFNLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQyxFQUFFO1FBQzlGLE9BQU87T0FDUjtNQUNELE1BQU0sb0JBQW9CLFdBQVcsV0FBVyxDQUFDO01BQ2pELElBQUksUUFBUSxDQUFDO01BQ2IsSUFBSSxlQUFlLEVBQUU7UUFDbkIsV0FBVyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxQyxLQUFLLEtBQUssQ0FBQyxNQUFNO1VBQ2YsUUFBUSxDQUFDLEtBQUssRUFBRSxZQUFZLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ2pELEVBQUUsU0FBUztVQUNWLFFBQVEsQ0FBQyxLQUFLLEVBQUUsWUFBWSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUNqRCxDQUFDLENBQUM7UUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ2pELE1BQU0sSUFBSSx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUMvQyxXQUFXLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELElBQUksR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7VUFDNUIsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3pCO1FBQ0QsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztPQUN2QyxNQUFNLElBQUksMEJBQTBCLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDNUMsV0FBVyxtQkFBbUIsRUFBRSxDQUFDO09BQ2xDLE1BQU0sSUFBSSwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxpQkFBaUIsRUFBRTtRQUNoRSxXQUFXLGlCQUFpQixhQUFhLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMzRSxNQUFNLGlCQUFpQixhQUFhLENBQUMsWUFBWSxRQUFRLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO1FBQ2hHLG1CQUFtQixDQUFDLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLElBQUksY0FBYyxHQUFHLFFBQVEsR0FBRyxXQUFXLENBQUMsQ0FBQztPQUNwSCxNQUFNO1FBQ0wsTUFBTSxTQUFTLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwRCxNQUFNLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoQyxNQUFNLFdBQVcsTUFBTSxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuQixxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxXQUFXLFFBQVEsV0FBVyxDQUFDO1FBQy9CLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN2QyxtQ0FBbUMsQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEUsb0JBQW9CLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7VUFDNUIsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3pCO1FBQ0QsUUFBUSxVQUFVLEVBQUUsQ0FBQztRQUNyQixJQUFJLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1VBQ3pCLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1VBQ3JCLG1CQUFtQixFQUFFLENBQUM7U0FDdkIsTUFBTTtVQUNMLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztVQUN0QyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDdkM7T0FDRjtNQUNELEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDbEMsTUFBTSxTQUFTLENBQUMsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztLQUMzQyxDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsaUJBQWlCLENBQUM7SUFDMUMsTUFBTSxhQUFhO01BQ2pCLFFBQVEsUUFBUTtNQUNoQixlQUFlLGVBQWU7S0FDL0IsQ0FBQzs7SUFFRixNQUFNLHNCQUFzQixvQ0FBb0M7TUFDOUQsTUFBTSxTQUFTLElBQUksYUFBYSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztNQUN6RCxJQUFJLElBQUksQ0FBQztNQUNULE1BQU0sc0JBQXNCLE1BQU0sb0JBQW9CLEVBQUUsQ0FBQztNQUN6RCxPQUFPLE9BQU8sTUFBTSxLQUFLLEVBQUUsRUFBRTtRQUMzQixJQUFJLG1CQUFtQixDQUFDLElBQUksU0FBUyxZQUFZLEVBQUUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUU7VUFDekYsT0FBTyxJQUFJLENBQUM7U0FDYjtPQUNGO01BQ0QsT0FBTyxLQUFLLENBQUM7S0FDZCxDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsNEJBQTRCO01BQ3BELE1BQU0sTUFBTSxNQUFNLElBQUksVUFBVSxFQUFFLENBQUM7TUFDbkMsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNaLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO09BQ3hCLE1BQU07UUFDTCxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztPQUN6QjtNQUNELE1BQU0sVUFBVSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDN0IsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ2xDLENBQUM7SUFDRixNQUFNLGtCQUFrQixpQkFBaUI7TUFDdkMsTUFBTSxZQUFZLE1BQU0sVUFBVSxDQUFDO01BQ25DLE1BQU0sTUFBTSxNQUFNLElBQUksQ0FBQztNQUN2QixNQUFNLE1BQU0sU0FBUyxPQUFPLEVBQUUsQ0FBQztNQUMvQixJQUFJLEtBQUssQ0FBQztNQUNWLElBQUksVUFBVSxLQUFLLENBQUM7TUFDcEIsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVc7UUFDcEMsR0FBRyxTQUFTLENBQUMsT0FBTyxlQUFlLEVBQUUsT0FBTyxZQUFZLENBQUMsQ0FBQztRQUMxRCxHQUFHLE9BQU8sQ0FBQyxPQUFPLGFBQWEsRUFBRSxPQUFPLFVBQVUsQ0FBQyxDQUFDO09BQ3JELENBQUMsQ0FBQztNQUNILElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQztNQUM3QixJQUFJLFlBQVksR0FBRyxlQUFlLENBQUM7TUFDbkMsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxjQUFjLEVBQUUsRUFBRTtRQUN2RCxNQUFNLDZCQUE2QixNQUFNLEdBQUcsU0FBUyxXQUFXLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDNUUsWUFBWSxTQUFTLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxXQUFXLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUNqRyxJQUFJLDBCQUEwQixJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtVQUNyRCxTQUFTLFNBQVMsS0FBSyxPQUFPLENBQUM7U0FDaEMsTUFBTTtVQUNMLFNBQVMsQ0FBQyxDQUFDO1NBQ1o7T0FDRjtNQUNELElBQUksY0FBYyxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQztNQUN4RCxNQUFNLGlCQUFpQixXQUFXLElBQUksV0FBVyxXQUFXLEdBQUcsR0FBRyxVQUFVLENBQUMsV0FBVyxXQUFXLEVBQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7TUFDekgsTUFBTSxxQkFBcUIsY0FBYyxHQUFHLGNBQWMsU0FBUyxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUM7TUFDdkYsTUFBTSxlQUFlLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQztNQUM1QyxJQUFJLGtCQUFrQixLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtRQUNoRCxjQUFjLGNBQWMsQ0FBQztPQUM5QjtNQUNELElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLE1BQU0sSUFBSSxTQUFTLEtBQUssT0FBTyxFQUFFO1FBQzFELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxJQUFJLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRTtVQUNoRixRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQ3pCLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1VBQ3RCLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1VBQ3pCLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1VBQ3ZCLFVBQVUsSUFBSSxDQUFDO1NBQ2hCO09BQ0Y7TUFDRCxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3pCLGVBQWUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQ2pDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDMUMsTUFBTSxZQUFZLElBQUksRUFBRSxDQUFDO0tBQzFCLENBQUM7SUFDRixNQUFNLGlCQUFpQixvQkFBb0I7TUFDekMsTUFBTSxLQUFLLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3RDLFFBQVEsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztNQUMzQyxNQUFNLFlBQVksSUFBSSxFQUFFLENBQUM7S0FDMUIsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLG9CQUFvQjtNQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7UUFDekMsT0FBTyxDQUFDLFlBQVksUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7T0FDbkU7TUFDRCxNQUFNLEtBQUssWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDdEMsT0FBTyxDQUFDLFlBQVksUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO01BQzFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztNQUN6QyxNQUFNLFlBQVksSUFBSSxFQUFFLENBQUM7S0FDMUIsQ0FBQztJQUNGLE1BQU0sYUFBYSxPQUFPO01BQ3hCLE9BQU8sTUFBTSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQztLQUM5QixDQUFDO0lBQ0YsTUFBTSxhQUFhLHlCQUF5QjtNQUMxQyxJQUFJLFVBQVUsQ0FBQyxhQUFhLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFO1FBQzlDLE9BQU8sSUFBSSxDQUFDO09BQ2IsTUFBTTtRQUNMLE9BQU8sWUFBWSxDQUFDLFFBQVEsRUFBRSxhQUFhLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTztVQUN2RSxPQUFPLE1BQU0sQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDOUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7T0FDakI7S0FDRixDQUFDO0lBQ0YsTUFBTSxlQUFlLE9BQU87TUFDMUIsT0FBTyxHQUFHLElBQUksR0FBRyxTQUFTLEtBQUssR0FBRyxJQUFJLE1BQU0sSUFBSSxHQUFHLENBQUM7S0FDckQsQ0FBQztJQUNGLE1BQU0saUJBQWlCLFlBQVk7TUFDakMsT0FBTyxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNoRSxDQUFDO0lBQ0YsTUFBTSwyQkFBMkIsVUFBVTtNQUN6QyxNQUFNLG1CQUFtQixLQUFLLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3ZELE1BQU0sV0FBVyxhQUFhLGVBQWUsQ0FBQyxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUMsQ0FBQztNQUN6RSxPQUFPLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLFFBQVEsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7S0FDMUYsQ0FBQztJQUNGLE1BQU0sd0JBQXdCLHNCQUFzQjtNQUNsRCxRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3hGLENBQUM7SUFDRixNQUFNLFdBQVcsaUJBQWlCO01BQ2hDLE1BQU0saUJBQWlCLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3hELElBQUksY0FBYyxPQUFPLEVBQUUsRUFBRTtRQUMzQixjQUFjLEtBQUssQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztPQUMzRCxNQUFNO1FBQ0wsZUFBZSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztPQUM5QjtLQUNGLENBQUM7SUFDRixNQUFNLGdCQUFnQixpQkFBaUIsQ0FBQztJQUN4QyxNQUFNLFlBQVk7TUFDaEIsUUFBUSxRQUFRO01BQ2hCLGFBQWE7S0FDZCxDQUFDOztJQUVGLE1BQU0sa0JBQWtCLHNCQUFzQjtNQUM1QyxPQUFPLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZTtRQUNwRCxPQUFPLFFBQVEsT0FBTyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7T0FDakYsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUNiLENBQUM7SUFDRixNQUFNLGlCQUFpQixVQUFVO01BQy9CLE9BQU8sZUFBZSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0tBQzlELENBQUM7SUFDRixNQUFNLHVCQUF1QixVQUFVO01BQ3JDLE9BQU8sZUFBZSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0tBQzlELENBQUM7O0lBRUYsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7TUFDakMsRUFBRSxJQUFJLEVBQUUsRUFBRTtNQUNWLEVBQUUsT0FBTyxFQUFFLEVBQUU7TUFDYixFQUFFLE1BQU0sRUFBRSxFQUFFO0tBQ2IsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxxQkFBcUIsdUJBQXVCO01BQ2hELE9BQU8sb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDckMsQ0FBQztJQUNGLE1BQU0sY0FBYyxpQkFBaUI7TUFDbkMsT0FBTyx1QkFBdUI7UUFDNUIsT0FBTyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxhQUFhLENBQUM7T0FDeEQsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFVBQVUsOEJBQThCLHVCQUF1QjtNQUNuRSxNQUFNLFFBQVEsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEtBQUssU0FBUyxZQUFZLEVBQUUsQ0FBQztNQUNyRSxPQUFPLEtBQUssS0FBSyxhQUFhLENBQUM7S0FDaEMsQ0FBQztJQUNGLE1BQU0sYUFBYSxVQUFVO01BQzNCLE1BQU0sZUFBZSxlQUFlLENBQUMsTUFBTSxJQUFJLEVBQUUsTUFBTSxVQUFVLFNBQVMsRUFBRSxDQUFDLENBQUM7TUFDOUUsT0FBTyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDakMsQ0FBQztJQUNGLE1BQU0sYUFBYSxpQkFBaUIsT0FBTyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNsRSxNQUFNLGlCQUFpQixNQUFNLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEQsTUFBTSxtQkFBbUIsaUJBQWlCO01BQ3hDLE9BQU8sdUJBQXVCO1FBQzVCLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxDQUFDLEtBQUssYUFBYSxDQUFDO09BQ3JELENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxjQUFjLHVCQUF1QjtNQUN6QyxPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUMvQixDQUFDO0lBQ0YsTUFBTSxjQUFjLHVCQUF1QjtNQUN6QyxPQUFPLFFBQVEsQ0FBQztLQUNqQixDQUFDO0lBQ0YsTUFBTSw0QkFBNEIsVUFBVTtNQUMxQyxNQUFNLGtCQUFrQixrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNuRCxNQUFNLGVBQWUsZUFBZSxDQUFDLE1BQU0sSUFBSSxFQUFFLE1BQU0sVUFBVSxTQUFTLEVBQUUsQ0FBQyxDQUFDO01BQzlFLE9BQU8sYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLE1BQU0sT0FBTyxhQUFhLENBQUMsWUFBWSxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7S0FDMUcsQ0FBQztJQUNGLE1BQU0seUJBQXlCLFVBQVU7TUFDdkMsTUFBTSxNQUFNLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQztNQUN0QyxNQUFNLFFBQVEsWUFBWSxRQUFRLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQztNQUN2RCxNQUFNLFFBQVEsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFDO01BQzlDLE1BQU0sV0FBVyxLQUFLLElBQUksQ0FBQyxXQUFXLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO01BQ3hGLE9BQU8sR0FBRyxVQUFVLElBQUksUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUMsQ0FBQztJQUNGLE1BQU0sUUFBUSx3QkFBd0I7TUFDcEMsT0FBTyxzQkFBc0I7UUFDM0IsTUFBTSxVQUFVLEtBQUssQ0FBQyxVQUFVLEVBQUUsWUFBWTtVQUM1QyxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ25DLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDVCxPQUFPLE9BQU8sR0FBRyxRQUFRLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQzFELENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxZQUFZLGlCQUFpQjtNQUNqQyxPQUFPLGFBQWEsQ0FBQztRQUNuQixLQUFLLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLGFBQWEsS0FBSyxFQUFFLENBQUM7UUFDakQsS0FBSyxDQUFDO1VBQ0osVUFBVSxDQUFDLElBQUksQ0FBQztVQUNoQixVQUFVO1NBQ1gsRUFBRSxhQUFhLEtBQUssRUFBRSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUUsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUM3QyxLQUFLLENBQUM7VUFDSixVQUFVLENBQUMsSUFBSSxDQUFDO1VBQ2hCLGdCQUFnQixDQUFDLEtBQUssQ0FBQztVQUN2QixXQUFXO1NBQ1osRUFBRSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLEtBQUssQ0FBQztVQUNKLFVBQVUsQ0FBQyxJQUFJLENBQUM7VUFDaEIsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1NBQ3hCLEVBQUUsYUFBYSxNQUFNLEVBQUUsQ0FBQztRQUN6QixLQUFLLENBQUM7VUFDSixVQUFVLENBQUMsSUFBSSxDQUFDO1VBQ2hCLGdCQUFnQixDQUFDLElBQUksQ0FBQztVQUN0QixXQUFXO1NBQ1osRUFBRSxhQUFhLE1BQU0sRUFBRSxDQUFDO1FBQ3pCLEtBQUssQ0FBQztVQUNKLFVBQVUsQ0FBQyxJQUFJLENBQUM7VUFDaEIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1NBQ3ZCLEVBQUUsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN0QixLQUFLLENBQUM7VUFDSixXQUFXLENBQUMsSUFBSSxDQUFDO1VBQ2pCLFdBQVc7U0FDWixFQUFFLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDdEIsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsYUFBYSxNQUFNLEVBQUUsQ0FBQztRQUNqRCxLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hDLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEMsS0FBSyxDQUFDLENBQUMseUJBQXlCLENBQUMsRUFBRSxhQUFhLE1BQU0sRUFBRSxDQUFDO1FBQ3pELEtBQUssQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsYUFBYSxNQUFNLEVBQUUsQ0FBQztPQUN2RCxFQUFFO1FBQ0QsTUFBTTtRQUNOLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxTQUFTLENBQUM7T0FDeEIsQ0FBQyxNQUFNLENBQUMsYUFBYSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ2hDLENBQUM7O0lBRUYsTUFBTSxjQUFjLDRCQUE0QjtNQUM5QyxJQUFJLENBQUMsTUFBTSxVQUFVLFlBQVksRUFBRSxFQUFFO1FBQ25DLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQ2pDO01BQ0QsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDdEIsTUFBTSxRQUFRLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxTQUFTLGNBQWMsQ0FBQyxDQUFDO1FBQ3BFLElBQUksS0FBSyxtQkFBbUIsRUFBRSxFQUFFO1VBQzlCLE9BQU87U0FDUjtPQUNGO01BQ0QsU0FBUyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQzlCLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3RCLGNBQWMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxjQUFjLENBQUMsQ0FBQztPQUNqRDtLQUNGLENBQUM7SUFDRixNQUFNLFdBQVcsaUJBQWlCO01BQ2hDLE1BQU0sS0FBSyxNQUFNLFdBQVcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQ3JELE1BQU0sUUFBUSxNQUFNLFdBQVcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQ3pELE1BQU0sZ0JBQWdCLFNBQVMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDN0MsUUFBUSxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7V0FDN0IsV0FBVztRQUNkLGFBQWEsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakMsTUFBTTtXQUNILE9BQU87UUFDVixhQUFhLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLE1BQU07V0FDSCxRQUFRO1FBQ1gsYUFBYSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwQyxNQUFNOztRQUVOLGFBQWEsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEMsTUFBTTtPQUNQO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLGFBQWEsUUFBUSxFQUFFLENBQUM7SUFDOUIsTUFBTSxjQUFjLFVBQVUsR0FBRyxNQUFNLEVBQUUsSUFBSSxVQUFVLFFBQVEsU0FBUyxFQUFFLENBQUM7SUFDM0UsTUFBTSxzQkFBc0IsbUJBQW1CO01BQzdDLElBQUksS0FBSyxtQkFBbUIsRUFBRSxFQUFFO1FBQzlCLE9BQU87T0FDUjtNQUNELEtBQUssZUFBZSxFQUFFLENBQUM7TUFDdkIseUJBQXlCLENBQUMsTUFBTSxZQUFZLENBQUMsQ0FBQztNQUM5QyxNQUFNLFlBQVksU0FBUyxDQUFDLE1BQU07UUFDaEMsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztPQUN6QixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSw4QkFBOEIsT0FBTztNQUN6QyxJQUFJLENBQUMsR0FBRyxVQUFVLEVBQUU7UUFDbEIsT0FBTyxLQUFLLENBQUM7T0FDZDtNQUNELE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDO01BQzFDLElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1FBQzVCLE1BQU0sa0JBQWtCLHVFQUF1RSxDQUFDO1FBQ2hHLE1BQU0sT0FBTyxjQUFjLEtBQUssT0FBTyxDQUFDLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdELE9BQU8sZUFBZSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDbkMsTUFBTTtRQUNMLE9BQU8sS0FBSyxDQUFDO09BQ2Q7S0FDRixDQUFDO0lBQ0YsTUFBTSxVQUFVLFVBQVU7TUFDeEIsSUFBSSwyQkFBMkIsUUFBUSxLQUFLLEVBQUUsQ0FBQztNQUMvQyxNQUFNLDJCQUEyQixVQUFVO1FBQ3pDLDJCQUEyQixRQUFRLEtBQUssQ0FBQyxNQUFNLFVBQVUsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUN6RSxNQUFNLFlBQVksSUFBSSxFQUFFLENBQUM7T0FDMUIsQ0FBQztNQUNGLE1BQU0seUJBQXlCLG1CQUFtQjtRQUNoRCxNQUFNLFlBQVksS0FBSyxFQUFFLENBQUM7UUFDMUIsd0JBQXdCLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxNQUFNLFVBQVUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0UsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ25DLDJCQUEyQixRQUFRLEtBQUssRUFBRSxDQUFDO09BQzVDLENBQUM7TUFDRixNQUFNLEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUztRQUM1QixJQUFJLEtBQUssUUFBUSxLQUFLLEVBQUUsTUFBTSxFQUFFO1VBQzlCLElBQUksV0FBVyxJQUFJLDJCQUEyQixDQUFDLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQyxFQUFFO1lBQ3pFLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1dBQ2xDLE1BQU07WUFDTCxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7V0FDcEM7U0FDRjtPQUNGLENBQUMsQ0FBQztNQUNILE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxTQUFTO1FBQzFCLElBQUksS0FBSyxRQUFRLEtBQUssRUFBRSxNQUFNLEVBQUU7VUFDOUIsd0JBQXdCLEtBQUssQ0FBQyxNQUFNLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQzVFO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLDJCQUEyQix3QkFBd0I7TUFDdkQsTUFBTSxRQUFRLEdBQUcsR0FBRyxRQUFRLEVBQUUsSUFBSSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUM7TUFDakQsT0FBTyxDQUFDO1FBQ047VUFDRSxTQUFTLEVBQUUsSUFBSTtVQUNmLFFBQVEsTUFBTSxDQUFDLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7U0FDbkQ7UUFDRDtVQUNFLFNBQVMsRUFBRSxLQUFLO1VBQ2hCLFFBQVEsTUFBTSxDQUFDLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7U0FDcEQ7UUFDRCxHQUFHLENBQUMsS0FBSyxHQUFHO1VBQ1Y7WUFDRSxTQUFTLEVBQUUsS0FBSztZQUNoQixRQUFRLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO1lBQy9DLFNBQVMsSUFBSTtZQUNiLFVBQVUsSUFBSTtXQUNmO1VBQ0Q7WUFDRSxTQUFTLEVBQUUsSUFBSTtZQUNmLFFBQVEsTUFBTSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7WUFDOUMsU0FBUyxJQUFJO1lBQ2IsVUFBVSxJQUFJO1dBQ2Y7U0FDRixHQUFHLEVBQUU7UUFDTjtVQUNFLFNBQVMsRUFBRSxJQUFJO1VBQ2YsUUFBUSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztTQUNqRDtRQUNEO1VBQ0UsU0FBUyxFQUFFLEtBQUs7VUFDaEIsUUFBUSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQztTQUNsRDtRQUNEO1VBQ0UsU0FBUyxFQUFFLElBQUk7VUFDZixRQUFRLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQztTQUMxRDtRQUNEO1VBQ0UsU0FBUyxFQUFFLEtBQUs7VUFDaEIsUUFBUSxNQUFNLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7U0FDM0Q7T0FDRixFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSztRQUNoQixHQUFHLGVBQWUsRUFBRSxDQUFDO09BQ3RCLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFVBQVUsbUJBQW1CO01BQ2pDLE1BQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPO1FBQzFCLElBQUksQ0FBQyxHQUFHLG1CQUFtQixFQUFFLEVBQUU7VUFDN0Isd0JBQXdCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztTQUM5QztPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxVQUFVLFVBQVU7TUFDeEIsTUFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUs7UUFDdEIsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFO1VBQ2xCLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2hDO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLFdBQVcsUUFBUSxFQUFFLENBQUM7SUFDNUIsTUFBTSxxQkFBcUIsd0JBQXdCO01BQ2pELE9BQU8sQ0FBQztRQUNOO1VBQ0UsU0FBUyxFQUFFLFFBQVE7VUFDbkIsUUFBUSxNQUFNLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7U0FDM0Q7UUFDRDtVQUNFLFNBQVMsRUFBRSxVQUFVO1VBQ3JCLFFBQVEsTUFBTSxDQUFDLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDO1NBQzFEO09BQ0YsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUNULENBQUM7SUFDRixNQUFNLDJCQUEyQixLQUFLLENBQUMseUJBQXlCLEVBQUUsQ0FBQztJQUNuRSxNQUFNLGVBQWUsT0FBTyxHQUFHLFFBQVEsS0FBSyxFQUFFLFFBQVEsSUFBSSxHQUFHLFFBQVEsS0FBSyxFQUFFLFVBQVUsQ0FBQztJQUN2RixNQUFNLHVCQUF1Qiw0QkFBNEI7TUFDdkQsSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFO1FBQzNCLE1BQU0sR0FBRyxDQUFDLFlBQVksRUFBRSx3QkFBd0IsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUN6RCxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxJQUFJLEVBQUUsRUFBRTtRQUNsQyxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztPQUNwRDtNQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3BCLENBQUM7SUFDRixNQUFNLFVBQVUsbUJBQW1CO01BQ2pDLElBQUksUUFBUSxHQUFHLFFBQVEsRUFBRSxFQUFFO1FBQ3pCLE9BQU87T0FDUjtNQUNELE1BQU0sVUFBVSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDNUIsTUFBTSxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU87UUFDMUIsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUU7VUFDckIsb0JBQW9CLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUM3QztPQUNGLENBQUMsQ0FBQztNQUNILE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPO1FBQ3hCLElBQUksQ0FBQyxHQUFHLG1CQUFtQixFQUFFLEVBQUU7VUFDN0Isa0JBQWtCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztTQUN4QztRQUNELElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sSUFBSSxFQUFFLEVBQUU7VUFDdEMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztVQUM3QyxNQUFNLFlBQVksRUFBRSxDQUFDO1NBQ3RCO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLHVCQUF1QixlQUFlO01BQzFDLE1BQU0sWUFBWSxHQUFHLFVBQVUsRUFBRSxDQUFDO01BQ2xDLE1BQU0sU0FBUyxHQUFHLE9BQU8sRUFBRSxDQUFDO01BQzVCLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ3ZCLFNBQVMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuQyxPQUFPLFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQztPQUN0RSxNQUFNO1FBQ0wsT0FBTyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU87VUFDNUMsTUFBTSxXQUFXLFlBQVksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQzdDLElBQUksR0FBRyxRQUFRLEVBQUUsRUFBRTtZQUNqQixPQUFPLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1dBQ3hCLE1BQU07WUFDTCxRQUFRLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1dBQ3pCO1VBQ0QsT0FBTyxhQUFhLENBQUMsUUFBUSxJQUFJLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQztTQUNqRCxDQUFDLENBQUM7T0FDSjtLQUNGLENBQUM7SUFDRixNQUFNLHVCQUF1QixLQUFLLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0QsTUFBTSx3QkFBd0IsS0FBSyxDQUFDLG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxDQUFDOztJQUUvRCxNQUFNLDhCQUE4QixlQUFlLGVBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEdBQUcscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkksTUFBTSwwQkFBMEIsUUFBUSxZQUFZLFFBQVEsS0FBSyxDQUFDLFdBQVcsWUFBWSxDQUFDLElBQUksSUFBSSxFQUFFLGFBQWEsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsV0FBVyxlQUFlLENBQUMsT0FBTyxDQUFDLEVBQUUsV0FBVyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsV0FBVyxZQUFZLENBQUMsSUFBSSxJQUFJLEVBQUUsYUFBYSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlRLE1BQU0sa0NBQWtDLGVBQWUsWUFBWSxlQUFlLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVKLE1BQU0sZUFBZSxVQUFVLE9BQU87TUFDcEMsTUFBTSxVQUFVLE9BQU8sQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDdkMsTUFBTSxZQUFZLEVBQUUsQ0FBQztLQUN0QixDQUFDO0lBQ0YsTUFBTSxrQkFBa0Isb0JBQW9CLFFBQVEsV0FBVyxDQUFDLFFBQVEsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3JHLE1BQU0sK0JBQStCLFVBQVU7TUFDN0MsTUFBTSxNQUFNLGFBQWEsZUFBZSxDQUFDLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQyxDQUFDO01BQ3BFLE1BQU0sT0FBTyxZQUFZLFFBQVEsQ0FBQyxNQUFNLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDcEQsSUFBSSxNQUFNLFVBQVUsWUFBWSxFQUFFLEVBQUU7UUFDbEMsTUFBTSxtQkFBbUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN2RCxNQUFNLGdCQUFnQixhQUFhLGVBQWUsQ0FBQyxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM5RSxPQUFPLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLFFBQVEsRUFBRSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksTUFBTSwrQkFBK0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ25OLE1BQU07UUFDTCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEI7S0FDRixDQUFDO0lBQ0YsTUFBTSwyQ0FBMkMsVUFBVTtNQUN6RCxNQUFNLG1CQUFtQixNQUFNO1FBQzdCLE1BQU0sT0FBTyxZQUFZLFFBQVEsQ0FBQyxNQUFNLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLE1BQU0sVUFBVSxZQUFZLEVBQUUsRUFBRTtVQUNuQyxNQUFNLE9BQU8sRUFBRSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdkM7UUFDRCxNQUFNLE1BQU0sYUFBYSxlQUFlLENBQUMsTUFBTSxVQUFVLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDcEUsMkJBQTJCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7T0FDbkUsQ0FBQztNQUNGLE9BQU8sTUFBTSxDQUFDLEdBQUcsUUFBUSxVQUFVLEVBQUUsSUFBSSxNQUFNLFVBQVUsV0FBVyxFQUFFLElBQUksZUFBZSxDQUFDLE1BQU0sSUFBSSxFQUFFLE1BQU0sVUFBVSxPQUFPLEVBQUUsZUFBZSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztLQUNwSyxDQUFDOztJQUVGLE1BQU0sMkJBQTJCLGlCQUFpQjtNQUNoRCx3QkFBd0IsQ0FBQztRQUN2QjtVQUNFLFNBQVMsRUFBRSxTQUFTO1VBQ3BCLFFBQVEsTUFBTSxDQUFDLDRCQUE0QixFQUFFLE1BQU0sQ0FBQztTQUNyRDtRQUNEO1VBQ0UsU0FBUyxFQUFFLFNBQVM7VUFDcEIsUUFBUSxNQUFNLENBQUMsd0NBQXdDLEVBQUUsTUFBTSxDQUFDO1NBQ2pFO09BQ0YsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLGVBQWU7UUFDMUIsR0FBRyxlQUFlLEVBQUUsQ0FBQztRQUNyQixNQUFNLFFBQVEsb0JBQW9CLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsS0FBSyxtQkFBbUIsRUFBRSxFQUFFO1VBQy9CLFdBQVcsRUFBRSxDQUFDO1VBQ2QsY0FBYyxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsRUFBRSxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDckQ7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxVQUFVLFVBQVU7TUFDeEIsTUFBTSxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU87UUFDMUIsSUFBSSxDQUFDLEdBQUcsbUJBQW1CLEVBQUUsRUFBRTtVQUM3Qix3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDdkM7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0scUJBQXFCLFVBQVU7TUFDbkMsSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNqQyxPQUFPO1VBQ0w7WUFDRSxTQUFTLEVBQUUsSUFBSTtZQUNmLFFBQVEsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDO1dBQ3hDO1VBQ0Q7WUFDRSxTQUFTLEVBQUUsSUFBSTtZQUNmLFVBQVUsSUFBSTtZQUNkLFFBQVEsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO1dBQ3pDO1NBQ0YsQ0FBQztPQUNILE1BQU07UUFDTCxPQUFPLEVBQUUsQ0FBQztPQUNYO0tBQ0YsQ0FBQztJQUNGLE1BQU0seUJBQXlCLGlCQUFpQjtNQUM5QyxPQUFPLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLO1FBQ3RELEdBQUcsZUFBZSxFQUFFLENBQUM7T0FDdEIsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sVUFBVSxVQUFVO01BQ3hCLE1BQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPO1FBQzFCLElBQUksQ0FBQyxHQUFHLG1CQUFtQixFQUFFLEVBQUU7VUFDN0Isc0JBQXNCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ3JDO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLFVBQVUsVUFBVTtNQUN4QixNQUFNLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO01BQzdDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNoQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUNuQixNQUFNO1FBQ0wsTUFBTSxRQUFRLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQixPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkIsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2QixPQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0YsQ0FBQzs7SUFFRixpQkFBaUI7TUFDZixXQUFXLFNBQVM7UUFDbEIsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLE9BQU8sQ0FBQztRQUNaLE1BQU0sT0FBTyxJQUFJLENBQUM7UUFDbEIsSUFBSSxFQUFFLG1CQUFtQixJQUFJLE1BQU0sT0FBTyxFQUFFLENBQUMsRUFBRTtVQUM3QyxNQUFNLEdBQUcsQ0FBQyxzQ0FBc0MsRUFBRSxLQUFLO1lBQ3JELE1BQU0sWUFBWSxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7WUFDNUMsTUFBTSxVQUFVO2NBQ2QsZ0JBQWdCLFNBQVMsZUFBZTtjQUN4QyxhQUFhLFNBQVMsWUFBWTtjQUNsQyxjQUFjLFNBQVMsYUFBYTtjQUNwQyxXQUFXLFNBQVMsVUFBVTthQUMvQixDQUFDO1lBQ0YsSUFBSSxDQUFDLEtBQUssS0FBSyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFO2NBQ3hELE1BQU0sU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7YUFDcEM7WUFDRCxVQUFVLE9BQU8sQ0FBQztXQUNuQixDQUFDLENBQUM7U0FDSjtRQUNELE1BQU0sR0FBRyxDQUFDLGFBQWEsRUFBRSxNQUFNO1VBQzdCLE1BQU0sU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDcEMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxHQUFHLENBQUMsaUJBQWlCLEVBQUUsTUFBTTtVQUNqQyxNQUFNLFdBQVcsTUFBTSxVQUFVLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUNqRCxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsT0FBTztXQUNSO1VBQ0QsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLE1BQU0sSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLE1BQU0sUUFBUSxFQUFFLENBQUMsRUFBRTtZQUNqSCxNQUFNLFlBQVksQ0FBQyxFQUFFLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1dBQy9DO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUs7VUFDeEIsSUFBSSxDQUFDLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbkQsSUFBSSxNQUFNLFVBQVUsUUFBUSxFQUFFLFNBQVMsS0FBSyxLQUFLLEVBQUU7Y0FDakQsS0FBSyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsTUFBTTtnQkFDbkMsTUFBTSxZQUFZLEVBQUUsQ0FBQztlQUN0QixDQUFDLENBQUM7YUFDSixNQUFNO2NBQ0wsTUFBTSxZQUFZLEVBQUUsQ0FBQzthQUN0QjtXQUNGO1NBQ0YsQ0FBQyxDQUFDO09BQ0o7TUFDRCxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDckIsTUFBTSxZQUFZLElBQUksT0FBTyxVQUFVLENBQUM7UUFDeEMsSUFBSSxJQUFJLENBQUM7UUFDVCxJQUFJLElBQUksT0FBTyxZQUFZLElBQUksU0FBUyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxLQUFLLFdBQVcsRUFBRSxFQUFFO1VBQ25ILE1BQU0sT0FBTyxJQUFJLE9BQU8sUUFBUSxFQUFFLENBQUM7VUFDbkMsT0FBTyxTQUFTLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7VUFDeEMsSUFBSSxJQUFJLGNBQWMsS0FBSyxJQUFJLE9BQU8sT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ3pGLE9BQU8sSUFBSSxDQUFDO1dBQ2I7VUFDRCxNQUFNLFVBQVUsRUFBRSxDQUFDO1VBQ25CLElBQUksT0FBTyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsUUFBUTtZQUN0QyxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7Y0FDakIsT0FBTyxJQUFJLENBQUM7YUFDYixNQUFNO2NBQ0wsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Y0FDbkIsT0FBTyxLQUFLLENBQUM7YUFDZDtXQUNGLENBQUMsQ0FBQztVQUNILElBQUksT0FBTyxTQUFTLENBQUMsWUFBWSxFQUFFO1lBQ2pDLEdBQUcsSUFBSTtZQUNQLFNBQVMsSUFBSTtZQUNiLE9BQU87V0FDUixDQUFDLENBQUM7U0FDSjtPQUNGO01BQ0QsaUJBQWlCLFdBQVc7UUFDMUIsSUFBSSxDQUFDLENBQUM7UUFDTixNQUFNLFNBQVMsSUFBSSxPQUFPLENBQUM7UUFDM0IsTUFBTSxjQUFjLE9BQU8sQ0FBQyxNQUFNLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkYsSUFBSSxXQUFXLE9BQU8sS0FBSyxJQUFJLFNBQVMsT0FBTyxFQUFFO1VBQy9DLEtBQUssSUFBSSxXQUFXLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO2NBQ3ZDLE1BQU07YUFDUDtXQUNGO1VBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDWixJQUFJLFNBQVMsR0FBRyxXQUFXLENBQUM7WUFDNUIsT0FBTyxJQUFJLENBQUM7V0FDYjtTQUNGO1FBQ0QsSUFBSSxTQUFTLEdBQUcsV0FBVyxDQUFDO1FBQzVCLE9BQU8sS0FBSyxDQUFDO09BQ2Q7S0FDRjs7SUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sZUFBZSxZQUFZO01BQy9CLE1BQU0sS0FBSyxRQUFRLENBQUM7TUFDcEIsT0FBTyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUNuQyxDQUFDO0lBQ0YsTUFBTSxlQUFlLHlCQUF5QjtNQUM1QyxNQUFNLEtBQUssUUFBUSxDQUFDO01BQ3BCLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxTQUFTLENBQUM7S0FDekIsQ0FBQzs7SUFFRixNQUFNLFVBQVUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sV0FBVyxZQUFZO01BQzNCLE1BQU0sS0FBSyxRQUFRLENBQUM7TUFDcEIsT0FBTyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUNuQyxDQUFDO0lBQ0YsTUFBTSxlQUFlLFFBQVEsWUFBWTtNQUN2QyxNQUFNLEtBQUssUUFBUSxDQUFDO01BQ3BCLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUM7S0FDcEIsQ0FBQztJQUNGLE1BQU0sV0FBVyxvQkFBb0IsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sb0JBQW9CLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxNQUFNLGVBQWUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sa0JBQWtCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxNQUFNLGFBQWEsZ0JBQWdCLFlBQVk7TUFDN0MsTUFBTSxLQUFLLFFBQVEsQ0FBQztNQUNwQixPQUFPLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLEtBQUssWUFBWSxDQUFDLENBQUM7S0FDekUsQ0FBQztJQUNGLE1BQU0scUJBQXFCLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFekMsTUFBTSxzQkFBc0IsTUFBTSxNQUFNLE9BQU8sQ0FBQztNQUM5QyxRQUFRLENBQUM7TUFDVCxNQUFNLEtBQUssSUFBSTtLQUNoQixDQUFDLENBQUM7O0lBRUgsTUFBTSxTQUFTLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxNQUFNLFVBQVUsWUFBWTtNQUMxQixNQUFNLEtBQUssUUFBUSxDQUFDO01BQ3BCLE9BQU8sUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDbEMsQ0FBQztJQUNGLE1BQU0sY0FBYyxRQUFRLFlBQVk7TUFDdEMsTUFBTSxLQUFLLFFBQVEsQ0FBQztNQUNwQixFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO0tBQ25CLENBQUM7SUFDRixNQUFNLFlBQVksb0JBQW9CLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRSxNQUFNLG1CQUFtQixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsTUFBTSxrQkFBa0IsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sbUJBQW1CLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxNQUFNLFlBQVksZ0JBQWdCLFlBQVk7TUFDNUMsTUFBTSxLQUFLLFFBQVEsQ0FBQztNQUNwQixPQUFPLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLEtBQUssWUFBWSxDQUFDLENBQUM7S0FDeEUsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxNQUFNLG9CQUFvQixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRXZDLE1BQU0saUJBQWlCLDhCQUE4QjtNQUNuRCxHQUFHLFNBQVM7TUFDWixVQUFVLEdBQUc7UUFDWCxPQUFPLFNBQVMsT0FBTyxDQUFDO09BQ3pCO01BQ0QsS0FBSyxnQkFBZ0I7UUFDbkIsSUFBSSxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsRUFBRTtVQUNuQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO2NBQ3RCLE9BQU8sU0FBUyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ2xDO1dBQ0YsTUFBTTtZQUNMLE9BQU8sU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDNUI7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO09BQ2I7TUFDRCxRQUFRLE9BQU87UUFDYixJQUFJLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxFQUFFO1VBQ25DLFNBQVMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZCO09BQ0Y7TUFDRCxPQUFPLE1BQU07UUFDWCxJQUFJLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxFQUFFO1VBQ25DLFNBQVMsTUFBTSxFQUFFLENBQUM7U0FDbkI7T0FDRjtLQUNGLENBQUMsQ0FBQzs7SUFFSCxNQUFNLG1CQUFtQjtNQUN2QixNQUFNO01BQ04sTUFBTTtNQUNOLE1BQU07TUFDTixNQUFNO0tBQ1AsQ0FBQztJQUNGLE1BQU0sc0JBQXNCO01BQzFCLE1BQU07TUFDTixNQUFNO01BQ04sVUFBVTtNQUNWLFVBQVU7TUFDVixNQUFNO01BQ04sVUFBVTtNQUNWLE1BQU07TUFDTixLQUFLO01BQ0wsZUFBZTtLQUNoQixDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsTUFBTTtNQUMvQixNQUFNLG1CQUFtQixJQUFJLE1BQU0sYUFBYSxFQUFFLENBQUM7TUFDbkQsSUFBSSxhQUFhLE1BQU0sQ0FBQztNQUN4QixJQUFJLGdCQUFnQixLQUFLLENBQUM7TUFDMUIsTUFBTSxlQUFlO1FBQ25CLGNBQWMsR0FBRztVQUNmLE9BQU8sVUFBVSxDQUFDO1NBQ25CO1FBQ0QsY0FBYyxTQUFTO1VBQ3JCLElBQUksVUFBVSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ3hDLGFBQWEsTUFBTSxDQUFDO1dBQ3JCO1NBQ0Y7UUFDRCxpQkFBaUIsR0FBRztVQUNsQixPQUFPLGFBQWEsQ0FBQztTQUN0QjtRQUNELGlCQUFpQixVQUFVO1VBQ3pCLElBQUksa0JBQWtCLENBQUMsWUFBWSxDQUFDLElBQUksVUFBVSxDQUFDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxFQUFFO1lBQ2hGLGdCQUFnQixPQUFPLENBQUM7V0FDekI7U0FDRjtRQUNELFNBQVMsR0FBRztVQUNWLE9BQU8sY0FBYyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsTUFBTSxDQUFDLENBQUM7U0FDN0Q7UUFDRCxTQUFTLEdBQUc7VUFDVixJQUFJLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ25DLE9BQU8sbUJBQW1CLEVBQUUsQ0FBQztXQUM5QixNQUFNO1lBQ0wsT0FBTyxnQkFBZ0IsTUFBTSxDQUFDO1dBQy9CO1NBQ0Y7UUFDRCxTQUFTLEdBQUc7VUFDVixPQUFPLGdCQUFnQixNQUFNLENBQUM7U0FDL0I7UUFDRCxjQUFjLGlCQUFpQjtVQUM3QixJQUFJLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ25DLFlBQVksQ0FBQyxZQUFZLEVBQUU7Y0FDekIsS0FBSztjQUNMLENBQUM7Y0FDRCxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1lBQ0gsZ0JBQWdCLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1dBQzVDO1NBQ0Y7UUFDRCxTQUFTLFVBQVU7VUFDakIsSUFBSSxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUNuQyxPQUFPLEVBQUUsQ0FBQztXQUNYLE1BQU07WUFDTCxPQUFPLGdCQUFnQixRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7V0FDekM7U0FDRjtRQUNELFNBQVMsa0JBQWtCO1VBQ3pCLElBQUksaUJBQWlCLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDbkMsZ0JBQWdCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDeEM7U0FDRjtRQUNELFdBQVcsVUFBVTtVQUNuQixJQUFJLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ25DLGdCQUFnQixVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7V0FDcEM7U0FDRjtPQUNGLENBQUM7TUFDRixnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztNQUMvQixPQUFPLFlBQVksQ0FBQztLQUNyQixDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsWUFBWTtNQUNwQyxNQUFNLFFBQVEsa0JBQWtCLEVBQUUsQ0FBQztNQUNuQyxNQUFNLGVBQWUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQ3ZDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUMxQixpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUN6QixLQUFLLFdBQVcsR0FBRyxRQUFRLFdBQVcsQ0FBQztNQUN2QyxLQUFLLGNBQWMsR0FBRyxRQUFRLGNBQWMsQ0FBQztNQUM3QyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxhQUFhLEtBQUssYUFBYSxDQUFDLFNBQVMsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUN4RyxNQUFNLENBQUMsUUFBUSxNQUFNLEVBQUUsUUFBUTtRQUM3QixJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7VUFDcEIsS0FBSyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDN0M7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLENBQUMsUUFBUSxNQUFNLEVBQUUsUUFBUSxLQUFLLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDdEQsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUTtRQUM5QixRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQ3ZCLENBQUMsQ0FBQztNQUNILFlBQVksS0FBSyxDQUFDLFFBQVE7UUFDeEIsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQixTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQ3hCLENBQUMsQ0FBQztNQUNILE9BQU8sS0FBSyxDQUFDO0tBQ2QsQ0FBQzs7SUFFRixNQUFNLGNBQWMsZ0JBQWdCO01BQ2xDLE1BQU0sT0FBTyxZQUFZLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztNQUMvQyxPQUFPLElBQUksS0FBSyxFQUFFLEdBQUcsUUFBUSxLQUFLLEVBQUUsR0FBRyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM1RCxDQUFDO0lBQ0YsTUFBTSxjQUFjLHdCQUF3QixZQUFZLFFBQVEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7O0lBRXBGLE1BQU0sbUJBQW1CLGdCQUFnQixDQUFDO0lBQzFDLE1BQU0sbUJBQW1CLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sZUFBZSxPQUFPLEdBQUcsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO0lBQ3pELE1BQU0sT0FBTyxRQUFRLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDekMsTUFBTSxTQUFTLFFBQVEsSUFBSSxRQUFRLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sV0FBVyxRQUFRLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOztJQUUzRCxNQUFNLGNBQWMsUUFBUTtNQUMxQixPQUFPLENBQUMsdUdBQXVHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM1SCxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0Isd0JBQXdCO01BQzVDLElBQUksTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDO01BQ3hCLE1BQU0sUUFBUSxVQUFVLENBQUMsU0FBUyxFQUFFLGdCQUFnQixHQUFHLEdBQUcsSUFBSSxHQUFHLFFBQVEsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO01BQ3JHLElBQUksS0FBSyxPQUFPLEVBQUU7UUFDaEIsT0FBTyxHQUFHLEdBQUcsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDOUI7TUFDRCxPQUFPLEdBQUcsR0FBRyxHQUFHLENBQUM7S0FDbEIsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLDhCQUE4QjtNQUNwRCxNQUFNLFNBQVMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDbEMsTUFBTSxVQUFVLGFBQWEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7TUFDbEQsTUFBTSxXQUFXLElBQUksR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDO01BQ3RDLE1BQU0sYUFBYSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUs7UUFDcEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO09BQ3JDLENBQUMsQ0FBQztNQUNILE1BQU0sU0FBUyxLQUFLO1FBQ2xCLE9BQU8sT0FBTyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUM7T0FDL0IsQ0FBQztNQUNGLE9BQU8sVUFBVSxPQUFPLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDckYsQ0FBQzs7SUFFRixNQUFNLHlCQUF5QixlQUFlLENBQUM7SUFDL0MsTUFBTSxXQUFXLHlCQUF5QjtNQUN4QyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQztNQUNoQyxNQUFNLE9BQU8sTUFBTSxRQUFRLEVBQUUsQ0FBQztNQUM5QixXQUFXLElBQUksQ0FBQyxTQUFTLE9BQU8sRUFBRSxDQUFDLENBQUM7TUFDcEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFO1FBQ25ELE1BQU0sYUFBYTtRQUNuQixTQUFTLGNBQWM7UUFDdkIsbUJBQW1CLElBQUk7UUFDdkIsa0JBQWtCLEtBQUs7UUFDdkIsU0FBUyxvRkFBb0Y7T0FDOUYsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO01BQzNCLElBQUksR0FBRyxRQUFRLFVBQVUsRUFBRSxFQUFFO1FBQzNCLEdBQUcsU0FBUyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxLQUFLLEdBQUcsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7T0FDckc7TUFDRCxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsbUNBQW1DLEVBQUUsS0FBSztRQUM5RCxDQUFDLGdCQUFnQixFQUFFLENBQUM7T0FDckIsQ0FBQyxDQUFDO01BQ0gsV0FBVyxNQUFNLEVBQUUsQ0FBQztNQUNwQixTQUFTLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDckMsQ0FBQztJQUNGLE1BQU0sU0FBUyx5QkFBeUI7TUFDdEMsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ2pCLElBQUksYUFBYSxDQUFDO1FBQ2xCLE1BQU0sVUFBVSxXQUFXLElBQUksRUFBRSxDQUFDO1FBQ2xDLE9BQU8sZ0JBQWdCLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtVQUNwQyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztVQUMxQixHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUMzQjtRQUNELElBQUksT0FBTyxFQUFFO1VBQ1gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNsQztPQUNGO01BQ0QsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDdkIsQ0FBQztJQUNGLE1BQU0sUUFBUSxVQUFVLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdEQsTUFBTSxhQUFhLE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxLQUFLLGFBQWEsQ0FBQztJQUN6RSxNQUFNLFVBQVUsVUFBVTtNQUN4QixNQUFNLE1BQU0sTUFBTSxJQUFJLENBQUM7TUFDdkIsTUFBTSxnQkFBZ0Isb0JBQW9CO1FBQ3hDLEtBQUssWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztPQUMzQixDQUFDO01BQ0YsTUFBTSxjQUFjLGlCQUFpQixDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sUUFBUSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztNQUMzRixNQUFNLENBQUMsY0FBYyxFQUFFLGlCQUFpQjtRQUN0QyxhQUFhLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO09BQzNDLENBQUMsQ0FBQztNQUNILE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixFQUFFLFdBQVcsQ0FBQyxDQUFDO01BQ3JFLEtBQUssSUFBSSxJQUFJLGFBQWEsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2xELE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxXQUFXLGFBQWEsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekQsYUFBYSxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUMvQztNQUNELE9BQU8sV0FBVyxHQUFHLFdBQVcsVUFBVSxHQUFHLEVBQUUsQ0FBQztLQUNqRCxDQUFDO0lBQ0YsTUFBTSwyQkFBMkIsV0FBVyxPQUFPLEtBQUssc0JBQXNCLENBQUM7SUFDL0UsTUFBTSxXQUFXLFVBQVU7TUFDekIsTUFBTSxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUMzQixPQUFPO1FBQ0wsUUFBUSxNQUFNLFFBQVEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDO1FBQ3ZDLFFBQVEsTUFBTSxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztRQUNyQyxPQUFPLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUMxQixTQUFTLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM5QixZQUFZLE9BQU8sSUFBSTtPQUN4QixDQUFDO0tBQ0gsQ0FBQzs7SUFFRixNQUFNLFdBQVcsb0JBQW9CO01BQ25DLEtBQUssS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLO1FBQ3JCLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRTtVQUNuQixVQUFVLE9BQU8sUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNsQyxNQUFNO1VBQ0wsVUFBVSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkM7T0FDRixDQUFDLENBQUM7TUFDSCxPQUFPLE9BQU8sQ0FBQztLQUNoQixDQUFDO0lBQ0YsTUFBTSxZQUFZLFFBQVE7TUFDeEIsTUFBTSxTQUFTLE1BQU0sRUFBRSxDQUFDO01BQ3hCLE1BQU0sWUFBWSxTQUFTLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3hDLElBQUksT0FBTyxFQUFFLENBQUM7TUFDZCxNQUFNLGVBQWUsTUFBTSxnQkFBZ0IsRUFBRSxDQUFDO01BQzlDLE1BQU0saUJBQWlCLEtBQUssUUFBUSxDQUFDLDBEQUEwRCxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQ3RHLE1BQU0sZ0JBQWdCLE1BQU0saUJBQWlCLEVBQUUsQ0FBQztNQUNoRCxNQUFNLE9BQU8sUUFBUTtRQUNuQixNQUFNLE9BQU8sSUFBSSxLQUFLLEVBQUUsY0FBYyxJQUFJLENBQUM7UUFDM0MsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1VBQ2pCLFFBQVEsSUFBSSxDQUFDO1VBQ2IsT0FBTztTQUNSO1FBQ0QsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFO1VBQ2xCLE9BQU87U0FDUjtRQUNELElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ3RCLFFBQVEsR0FBRyxDQUFDO1NBQ2I7UUFDRCxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUN4QixRQUFRLEdBQUcsQ0FBQztVQUNaLE9BQU87U0FDUjtRQUNELElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO1VBQ25CLFFBQVEsSUFBSSxNQUFNLENBQUM7U0FDcEI7UUFDRCxJQUFJLEVBQUUsSUFBSSxLQUFLLElBQUksTUFBTSxnQkFBZ0IsRUFBRSxDQUFDLEVBQUU7VUFDNUMsSUFBSSxjQUFjLElBQUksV0FBVyxDQUFDO1VBQ2xDLElBQUksV0FBVyxFQUFFO1lBQ2YsR0FBRztjQUNELElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNuQixRQUFRLGNBQWMsV0FBVyxLQUFLLEVBQUU7V0FDMUM7U0FDRjtRQUNELElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVcsS0FBSyxFQUFFO1VBQzNDLFFBQVEsSUFBSSxDQUFDO1VBQ2IsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFO1lBQ2hCLFFBQVEsSUFBSSxDQUFDO1dBQ2Q7U0FDRjtPQUNGLENBQUM7TUFDRixPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7TUFDMUMsSUFBSSxDQUFDLFNBQVMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDNUIsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxXQUFXLFFBQVE7TUFDdkIsTUFBTSxhQUFhLGlCQUFpQjtRQUNsQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO1VBQ2QsT0FBTyxHQUFHLENBQUM7U0FDWjtRQUNELE9BQU8sSUFBSSxDQUFDO09BQ2IsQ0FBQztNQUNGLE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRTtRQUNwQixtREFBbUQ7UUFDbkQsMENBQTBDO1FBQzFDO1VBQ0UsNkRBQTZEO1VBQzdELFVBQVU7U0FDWDtRQUNELHlDQUF5QztRQUN6QyxRQUFRO09BQ1QsQ0FBQyxDQUFDO01BQ0gsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsVUFBVTtNQUNsQyxJQUFJLFFBQVEsQ0FBQyxDQUFDO01BQ2QsT0FBTyxNQUFNO1FBQ1gsT0FBTyxNQUFNLEdBQUcsS0FBSyxFQUFFLENBQUM7T0FDekIsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLG1CQUFtQixPQUFPO01BQzlCLE1BQU0sV0FBVyxHQUFHLFlBQVksRUFBRSxDQUFDO01BQ25DLE1BQU0sZ0JBQWdCO1FBQ3BCLEtBQUssTUFBTTtRQUNYLEtBQUssTUFBTTtRQUNYLEtBQUssTUFBTTtRQUNYLEtBQUssTUFBTTtRQUNYLE1BQU0sTUFBTTtRQUNaLE9BQU8sTUFBTTtRQUNiLEtBQUssTUFBTTtRQUNYLEtBQUssU0FBUztPQUNmLENBQUM7TUFDRixPQUFPLEtBQUssT0FBTyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsR0FBRyxRQUFRLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUM7S0FDekcsQ0FBQzs7SUFFRixNQUFNLGFBQWEsa0JBQWtCO01BQ25DLE1BQU0sU0FBUyxTQUFTLENBQUMsRUFBRSxVQUFVLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxPQUFPLENBQUMsQ0FBQztNQUNqRixNQUFNLGNBQWMsQ0FBQyxNQUFNLEVBQUUsU0FBUztRQUNwQyxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUTtVQUN4QixJQUFJLE9BQU8sRUFBRSxDQUFDO1NBQ2YsQ0FBQyxDQUFDO09BQ0osQ0FBQyxDQUFDO01BQ0gsTUFBTSxXQUFXLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRTtRQUNsQyxtQkFBbUIsS0FBSztRQUN4QixlQUFlLElBQUk7T0FDcEIsQ0FBQyxDQUFDO01BQ0gsT0FBTyxjQUFjLENBQUMsRUFBRSxVQUFVLElBQUksRUFBRSxFQUFFLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUM5RSxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IseUJBQXlCO01BQzdDLE9BQU87TUFDUCxTQUFTO0tBQ1YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxvQkFBb0IsNEJBQTRCO01BQ3BELE1BQU0sV0FBVyxNQUFNLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sY0FBYyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDM0UsTUFBTSxrQkFBa0Isb0JBQW9CLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztNQUN6RSxPQUFPLGFBQWEsQ0FBQyxlQUFlLEtBQUssVUFBVSxFQUFFLGVBQWUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0tBQzVGLENBQUM7SUFDRixNQUFNLGdCQUFnQiwrQkFBK0I7TUFDbkQsTUFBTSxpQkFBaUIsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztNQUN0RSxNQUFNLGtCQUFrQixVQUFVLENBQUMsTUFBTSxFQUFFLGNBQWMsUUFBUSxDQUFDLENBQUM7TUFDbkUsSUFBSSxNQUFNLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxjQUFjLG1CQUFtQixFQUFFLEVBQUU7UUFDeEYsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsZUFBZSxFQUFFLFFBQVEsQ0FBQyxDQUFDO09BQzdELE1BQU07UUFDTCxPQUFPLGFBQWEsQ0FBQyxlQUFlLEVBQUUsY0FBYyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7T0FDNUU7S0FDRixDQUFDO0lBQ0YsTUFBTSxVQUFVLDRCQUE0QjtNQUMxQyxPQUFPLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQzlDLENBQUM7O0lBRUYsTUFBTSxjQUFjLGtCQUFrQjtNQUNwQyxNQUFNLGNBQWMsQ0FBQyxJQUFJLEVBQUU7UUFDekIsT0FBTyx1QkFBdUIsQ0FBQyxNQUFNLENBQUM7UUFDdEMsT0FBTyxJQUFJO09BQ1osQ0FBQyxDQUFDO01BQ0gsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsT0FBTywyQ0FBMkMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25GLE1BQU0sYUFBYSxpQkFBaUI7TUFDbEMsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsUUFBUSxDQUFDLEdBQUcsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3hJLENBQUM7SUFDRixNQUFNLGNBQWMsOEJBQThCO01BQ2hELE1BQU0sWUFBWSxNQUFNLENBQUMsTUFBTTtRQUM3QixXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO09BQzFCLEVBQUUsTUFBTTtRQUNQLE1BQU0sY0FBYyxDQUFDLFlBQVksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7T0FDakQsQ0FBQyxDQUFDO01BQ0gsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxhQUFhLDhCQUE4QjtNQUMvQyxNQUFNLFlBQVksTUFBTSxDQUFDLE1BQU07UUFDN0IsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztPQUMxQixFQUFFLE1BQU07UUFDUCxNQUFNLFlBQVksQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO09BQ2pELENBQUMsQ0FBQztNQUNILE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLCtCQUErQixDQUFDLE1BQU0sVUFBVSxZQUFZLEVBQUUsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzVKLE1BQU0sY0FBYywrQkFBK0IsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDN0gsTUFBTSxxQkFBcUIsa0JBQWtCO01BQzNDLEtBQUssS0FBSyxDQUFDO1FBQ1QsYUFBYTtRQUNiLFdBQVc7UUFDWCxXQUFXO09BQ1osRUFBRSxVQUFVO1FBQ1gsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO09BQzNDLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGdCQUFnQiwrQkFBK0I7TUFDbkQsSUFBSSxXQUFXLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUMvQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO09BQzNCLE1BQU07UUFDTCxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDbEM7S0FDRixDQUFDOztJQUVGLE1BQU0sV0FBVyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QyxNQUFNLDBCQUEwQixRQUFRO01BQ3RDLE1BQU0sZUFBZSxrQkFBa0IsRUFBRSxDQUFDO01BQzFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDaEMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO01BQzlCLE9BQU8sWUFBWSxDQUFDO0tBQ3JCLENBQUM7SUFDRixNQUFNLFVBQVUsc0VBQXNFO01BQ3BGLE1BQU0sTUFBTSxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztNQUMvQyxJQUFJLENBQUMsR0FBRyxVQUFVLEVBQUU7UUFDbEIsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDO1FBQzVCLE1BQU0sZ0JBQWdCLE1BQU0sYUFBYSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDeEUsSUFBSSx3QkFBd0IsRUFBRTtVQUM1QixNQUFNLE9BQU8sb0JBQW9CLENBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsY0FBYyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7VUFDakgsSUFBSSxDQUFDLElBQUksbUJBQW1CLEVBQUUsRUFBRTtZQUM5QixhQUFhLEVBQUUsQ0FBQztZQUNoQixjQUFjLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUM7V0FDM0M7U0FDRixNQUFNO1VBQ0wsYUFBYSxFQUFFLENBQUM7U0FDakI7T0FDRjtLQUNGLENBQUM7SUFDRixNQUFNLFlBQVksMERBQTBEO01BQzFFLE1BQU0sV0FBVyxZQUFZLEdBQUcsWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUM5RCxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLHdCQUF3QixDQUFDLENBQUM7S0FDMUUsQ0FBQztJQUNGLE1BQU0sWUFBWSw0Q0FBNEM7TUFDNUQsTUFBTSxjQUFjLE1BQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDbkUsTUFBTSxpQkFBaUIsV0FBVyxDQUFDLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO01BQzNFLE1BQU0sT0FBTyxlQUFlLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFFLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7TUFDMUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0tBQzlELENBQUM7SUFDRixNQUFNLHVCQUF1QixnQkFBZ0I7TUFDM0MsTUFBTSxRQUFRLEVBQUUsQ0FBQztNQUNqQixJQUFJLFlBQVksSUFBSSxZQUFZLE1BQU0sRUFBRTtRQUN0QyxLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksTUFBTSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7VUFDbEQsTUFBTSxjQUFjLFlBQVksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQzFDLElBQUk7WUFDRixLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsWUFBWSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7V0FDeEQsQ0FBQyxXQUFXO1lBQ1gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztXQUN6QjtTQUNGO09BQ0Y7TUFDRCxPQUFPLEtBQUssQ0FBQztLQUNkLENBQUM7SUFDRixNQUFNLGlCQUFpQixnQ0FBZ0MsUUFBUSxJQUFJLGdCQUFnQixJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQzdILE1BQU0sZ0JBQWdCLFdBQVcsY0FBYyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsSUFBSSxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQy9HLE1BQU0sa0JBQWtCLGlCQUFpQjtNQUN2QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsOEJBQThCLENBQUMsQ0FBQztNQUNwRCxPQUFPLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztLQUMvRCxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIscUNBQXFDO01BQzFELE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztNQUN0QixNQUFNLGNBQWMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLElBQUksYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7TUFDNUUsTUFBTSxPQUFPLFdBQVcsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO01BQ25FLE1BQU0sV0FBVyxXQUFXLEdBQUcsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDO01BQ3JELE1BQU0sV0FBVyxTQUFTLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDcEUsU0FBUyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDeEIsT0FBTyxRQUFRLENBQUM7S0FDakIsQ0FBQztJQUNGLE1BQU0sYUFBYSx1QkFBdUI7TUFDeEMsWUFBWSxDQUFDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLDJCQUEyQixLQUFLO1FBQ2hFLE1BQU0sU0FBUyxhQUFhLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxNQUFNLE9BQU8sU0FBUyxLQUFLLENBQUM7UUFDNUIsTUFBTSxZQUFZLE1BQU0sYUFBYSxVQUFVLENBQUM7UUFDaEQsTUFBTSxtQkFBbUIsU0FBUyxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNELE1BQU0sV0FBVyxnQkFBZ0IsS0FBSyxJQUFJLElBQUksZ0JBQWdCLEtBQUssS0FBSyxDQUFDLEdBQUcsZ0JBQWdCLEdBQUcsY0FBYyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQy9JLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEdBQUcsUUFBUSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDdkUsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sbUJBQW1CLFNBQVMsS0FBSyxLQUFLLEtBQUssT0FBTyxDQUFDO0lBQ3pELE1BQU0sc0JBQXNCLFNBQVMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRO01BQ3BFLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtRQUN0QyxJQUFJO1FBQ0osR0FBRztPQUNKLENBQUMsQ0FBQyxDQUFDO0tBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDSixNQUFNLFVBQVUsVUFBVTtNQUN4QixNQUFNLG9CQUFvQix3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUMzRCxPQUFPLFFBQVEsVUFBVSxDQUFDLElBQUksS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxhQUFhO1FBQ3ZGLE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7T0FDbEQsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sNEJBQTRCLDBCQUEwQjtNQUMxRCxNQUFNLFFBQVEsWUFBWSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLE1BQU0sQ0FBQyxFQUFFLFFBQVE7UUFDMUUsT0FBTyxJQUFJLEtBQUssS0FBSyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFVBQVUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO09BQ3ZELENBQUMsR0FBRyxFQUFFLENBQUM7TUFDUixNQUFNLFFBQVEsWUFBWSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO01BQ2pFLE9BQU8sUUFBUSxDQUFDLEtBQUssT0FBTyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsS0FBSyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0tBQ3BFLENBQUM7SUFDRixNQUFNLGlCQUFpQixvQkFBb0I7TUFDekMsTUFBTSxlQUFlLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxHQUFHLENBQUMsYUFBYSxDQUFDO01BQzVFLElBQUkscUJBQXFCLENBQUMsTUFBTSxDQUFDLElBQUksWUFBWSxFQUFFO1FBQ2pELE1BQU0sU0FBUyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDL0QsSUFBSSxNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQUU7VUFDckIsQ0FBQyxlQUFlLEVBQUUsQ0FBQztVQUNuQixtQkFBbUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWU7WUFDOUMsSUFBSSxHQUFHLEVBQUU7Y0FDUCxNQUFNLFVBQVUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzlCO1lBQ0QsTUFBTSxDQUFDLFdBQVcsRUFBRSxVQUFVO2NBQzVCLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDNUIsQ0FBQyxDQUFDO1dBQ0osQ0FBQyxDQUFDO1VBQ0gsT0FBTyxJQUFJLENBQUM7U0FDYjtPQUNGO01BQ0QsT0FBTyxLQUFLLENBQUM7S0FDZCxDQUFDO0lBQ0YsTUFBTSxnQ0FBZ0MsS0FBSztNQUN6QyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7TUFDWCxPQUFPLEdBQUcsR0FBRyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxjQUFjLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxNQUFNLENBQUMsQ0FBQztLQUNqSyxDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxRQUFRLEtBQUssRUFBRSxDQUFDO0lBQzdHLE1BQU0seUJBQXlCLDZFQUE2RTtNQUMxRyxJQUFJLFVBQVUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzdCLE1BQU0sYUFBYSxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUMxRixNQUFNLGtCQUFrQixDQUFDLFVBQVUsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDNUQsTUFBTSxrQkFBa0IsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQy9DLElBQUksd0JBQXdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLE9BQU8sSUFBSSxlQUFlLElBQUksQ0FBQyxlQUFlLEVBQUU7UUFDL0YsZ0JBQWdCLElBQUksQ0FBQztPQUN0QjtNQUNELElBQUksYUFBYSxJQUFJLGVBQWUsRUFBRTtRQUNwQyxJQUFJLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsSUFBSSxlQUFlLEVBQUU7VUFDckUsVUFBVSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUMxQyxNQUFNO1VBQ0wsVUFBVSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDOUI7T0FDRjtNQUNELElBQUksd0JBQXdCLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDckMsT0FBTztPQUNSO01BQ0QsSUFBSSxhQUFhLEVBQUU7UUFDakIsU0FBUyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztPQUN0RCxNQUFNO1FBQ0wsU0FBUyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLHdCQUF3QixDQUFDLENBQUM7T0FDbEU7S0FDRixDQUFDO0lBQ0YsTUFBTSx3QkFBd0IsbUNBQW1DO01BQy9ELElBQUksMkJBQTJCLENBQUM7TUFDaEMsTUFBTSxhQUFhLE1BQU0sUUFBUSxXQUFXLEVBQUUsSUFBSSxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7TUFDNUUsTUFBTSxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUs7UUFDeEIsSUFBSSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsbUJBQW1CLEVBQUUsRUFBRTtVQUN0RCw4QkFBOEIsQ0FBQyxTQUFTLElBQUksQ0FBQyxRQUFRLEtBQUssRUFBRSxDQUFDO1NBQzlEO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUs7UUFDdEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksNkJBQTZCLENBQUMsQ0FBQyxDQUFDLEVBQUU7VUFDOUQsT0FBTztTQUNSO1FBQ0QsTUFBTSxnQkFBZ0IsV0FBVyxJQUFJLEVBQUUsS0FBSyxNQUFNLElBQUksMkJBQTJCLENBQUM7UUFDbEYsOEJBQThCLEtBQUssQ0FBQztRQUNwQyxNQUFNLG1CQUFtQixvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFO1VBQy9FLE9BQU87U0FDUjtRQUNELElBQUksY0FBYyxDQUFDLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxFQUFFO1VBQ2pELENBQUMsZUFBZSxFQUFFLENBQUM7VUFDbkIsc0JBQXNCLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN0RyxNQUFNLElBQUksY0FBYyxDQUFDLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxJQUFJLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsRUFBRTtVQUM5RyxDQUFDLGVBQWUsRUFBRSxDQUFDO1VBQ25CLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDdkcsTUFBTTtVQUNMLFFBQVEsT0FBTyxFQUFFLENBQUM7VUFDbEIsS0FBSyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsTUFBTTtZQUNuQyxNQUFNLE9BQU8sUUFBUSxRQUFRLEVBQUUsQ0FBQztZQUNoQyxRQUFRLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1dBQzlFLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDUDtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLDBCQUEwQixVQUFVO01BQ3hDLE1BQU0sa0JBQWtCLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO01BQ2xFLE1BQU0sWUFBWSxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDbEQsTUFBTSxnQkFBZ0IsUUFBUTtRQUM1QixJQUFJLEVBQUUsQ0FBQztRQUNQLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sTUFBTSxJQUFJLENBQUM7T0FDbEYsQ0FBQztNQUNGLE1BQU0sT0FBTyxjQUFjLENBQUMsS0FBSyxFQUFFLHVCQUF1QjtRQUN4RCxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ3pELEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1lBQ3hCLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksR0FBRyxLQUFLLEdBQUcsZUFBZSxFQUFFO2NBQ2hGLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN4QixJQUFJLE9BQU8sRUFBRSxDQUFDO2VBQ2YsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM3RCxJQUFJLE9BQU8sRUFBRSxDQUFDO2VBQ2Y7YUFDRjtXQUNGO1NBQ0Y7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSwyQkFBMkIsbUNBQW1DO01BQ2xFLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDckQsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDakMsQ0FBQzs7SUFFRixNQUFNLHVCQUF1Qix5QkFBeUI7TUFDcEQsSUFBSSxXQUFXLElBQUksRUFBRSxLQUFLLE1BQU0sRUFBRTtRQUNoQyxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4Qix3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDekMsTUFBTTtRQUNMLFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztPQUN4QztNQUNELE1BQU0sTUFBTSxFQUFFLENBQUM7S0FDaEIsQ0FBQztJQUNGLE1BQU0sYUFBYSx5QkFBeUI7TUFDMUMsTUFBTSxXQUFXLENBQUMseUJBQXlCLEVBQUUsTUFBTTtRQUNqRCxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7T0FDM0MsQ0FBQyxDQUFDO01BQ0gsTUFBTSxXQUFXLENBQUMsMkJBQTJCLEVBQUUsZUFBZTtRQUM1RCxJQUFJLEtBQUssS0FBSyxFQUFFO1VBQ2QsU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLEtBQUssRUFBRSxLQUFLLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN0RDtRQUNELElBQUksS0FBSyxLQUFLLEVBQUU7VUFDZCxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3RDO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLG9CQUFvQiwrQkFBK0I7TUFDdkQsSUFBSSxhQUFhLEVBQUU7UUFDakIsSUFBSTtVQUNGLGFBQWEsVUFBVSxFQUFFLENBQUM7VUFDMUIsYUFBYSxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1VBQ3pDLGFBQWEsUUFBUSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztVQUMxQyxhQUFhLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1VBQ2hELE9BQU8sSUFBSSxDQUFDO1NBQ2IsQ0FBQyxVQUFVO1VBQ1YsT0FBTyxLQUFLLENBQUM7U0FDZDtPQUNGLE1BQU07UUFDTCxPQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0YsQ0FBQztJQUNGLE1BQU0sbUJBQW1CLCtCQUErQjtNQUN0RCxJQUFJLGlCQUFpQixDQUFDLEdBQUcsY0FBYyxFQUFFLElBQUksS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDOUQsR0FBRyxlQUFlLEVBQUUsQ0FBQztRQUNyQixJQUFJLEVBQUUsQ0FBQztPQUNSLE1BQU07UUFDTCxRQUFRLENBQUMsSUFBSSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDM0I7S0FDRixDQUFDO0lBQ0YsTUFBTSxXQUFXLFVBQVUsZ0JBQWdCO01BQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO01BQ2hDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUU7UUFDOUIsbUJBQW1CLE9BQU87UUFDMUIsa0JBQWtCLEtBQUs7T0FDeEIsQ0FBQyxDQUFDO01BQ0gsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLGlCQUFpQixNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNuRSxHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUU7UUFDbkIsVUFBVSxPQUFPO1FBQ2pCLEtBQUssR0FBRztRQUNSLE1BQU0sU0FBUztRQUNmLE9BQU8sUUFBUTtRQUNmLFVBQVUsUUFBUTtPQUNuQixDQUFDLENBQUM7TUFDSCxLQUFLLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUN6QixHQUFHLElBQUksQ0FBQyxNQUFNLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQ2pDLE1BQU0sUUFBUSxTQUFTLE9BQU8sRUFBRSxDQUFDO01BQ2pDLEtBQUssTUFBTSxFQUFFLENBQUM7TUFDZCxNQUFNLGlCQUFpQixHQUFHLFVBQVUsRUFBRSxDQUFDO01BQ3ZDLGNBQWMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDekMsU0FBUyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7TUFDakMsS0FBSyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsTUFBTTtRQUNuQyxTQUFTLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQixJQUFJLEVBQUUsQ0FBQztPQUNSLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDUCxDQUFDO0lBQ0YsTUFBTSxVQUFVLFdBQVc7TUFDekIsTUFBTSxJQUFJLENBQUMsTUFBTSxVQUFVLFdBQVcsQ0FBQyxFQUFFLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQztNQUM3RCxNQUFNLE1BQU0sVUFBVSxXQUFXLENBQUMsRUFBRSxRQUFRLE1BQU0sRUFBRSxDQUFDO0tBQ3RELENBQUMsQ0FBQztJQUNILE1BQU0sbUJBQW1CLFVBQVUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxVQUFVLFNBQVMsRUFBRSxFQUFFLDZDQUE2QyxFQUFFLE1BQU0sUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN4SixNQUFNLHFCQUFxQixVQUFVLENBQUMsTUFBTSxVQUFVLFlBQVksRUFBRSxJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pHLE1BQU0sTUFBTSxVQUFVLE9BQU87TUFDM0IsSUFBSSxDQUFDLEdBQUcsbUJBQW1CLEVBQUUsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUMzRCxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNO1VBQzdELElBQUksR0FBRyxRQUFRLFdBQVcsRUFBRSxJQUFJLEdBQUcsUUFBUSxVQUFVLEVBQUUsRUFBRTtZQUN2RCxNQUFNLE1BQU0sTUFBTSxVQUFVLE9BQU8sRUFBRSxDQUFDO1lBQ3RDLEtBQUssaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU07Y0FDbkMsTUFBTSxVQUFVLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztjQUM3QixNQUFNLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixFQUFFLENBQUMsQ0FBQyxDQUFDO1dBQ1AsTUFBTTtZQUNMLE1BQU0sWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1dBQzlCO1NBQ0YsQ0FBQyxDQUFDO09BQ0o7S0FDRixDQUFDO0lBQ0YsTUFBTSxPQUFPLFVBQVUsT0FBTztNQUM1QixJQUFJLENBQUMsR0FBRyxtQkFBbUIsRUFBRSxJQUFJLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzNELGdCQUFnQixDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQ2hFO0tBQ0YsQ0FBQztJQUNGLE1BQU0sV0FBVyxVQUFVO01BQ3pCLE1BQU0sR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUM5QixNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDakMsQ0FBQzs7SUFFRixNQUFNLHlCQUF5QixlQUFlO01BQzVDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztNQUNYLE9BQU8sVUFBVSx1QkFBdUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0tBQ3JLLENBQUM7SUFDRixNQUFNLHFCQUFxQixXQUFXO01BQ3BDLE1BQU0sbUJBQW1CLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztNQUMvQyxPQUFPLGdCQUFnQixHQUFHLGdCQUFnQixRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztLQUM3RSxDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsaUJBQWlCO01BQ3ZDLE1BQU0sTUFBTSxFQUFFLENBQUM7TUFDZixJQUFJLEdBQUcsRUFBRTtRQUNQLE1BQU0sVUFBVSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDOUI7S0FDRixDQUFDO0lBQ0YsTUFBTSxXQUFXLGdCQUFnQixNQUFNLENBQUMsWUFBWSxNQUFNLEVBQUUsUUFBUSxVQUFVLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEcsTUFBTSwwQkFBMEIsc0NBQXNDO01BQ3BFLE1BQU0sb0JBQW9CLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxRQUFRLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQzFGLE1BQU0sWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztNQUM1RCxJQUFJLFNBQVMsRUFBRTtRQUNiLE9BQU8sSUFBSSxDQUFDO09BQ2IsTUFBTSxJQUFJLGlCQUFpQixJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLEVBQUU7UUFDL0QsTUFBTSxXQUFXLElBQUksU0FBUyxFQUFFLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQzdGLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxjQUFjLENBQUMsaUJBQWlCLFNBQVMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ2xGLE1BQU07UUFDTCxPQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0YsQ0FBQztJQUNGLE1BQU0sOEJBQThCLFVBQVU7TUFDNUMsTUFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUs7UUFDdEIsTUFBTSxlQUFlLE1BQU0sTUFBTSxDQUFDLEVBQUUsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLFVBQVUsS0FBSyxjQUFjLEVBQUU7VUFDbEMsTUFBTSx1QkFBdUIsUUFBUSxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7VUFDbEYsTUFBTSxDQUFDLG9CQUFvQixFQUFFLFdBQVc7WUFDdEMsSUFBSSxNQUFNLENBQUMsT0FBTyxXQUFXLENBQUMsRUFBRTtjQUM5QixPQUFPLFdBQVcsT0FBTyxFQUFFLENBQUM7YUFDN0I7WUFDRCxNQUFNLFVBQVUsTUFBTSxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3QyxPQUFPLFlBQVksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDM0MsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7V0FDMUIsQ0FBQyxDQUFDO1NBQ0o7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxVQUFVLHFDQUFxQztNQUNuRCxJQUFJLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ2hDLE1BQU0sR0FBRyxDQUFDLGlEQUFpRCxFQUFFLEtBQUs7VUFDaEUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztVQUNuQixDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDckIsQ0FBQyxDQUFDO09BQ0o7TUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDbEMsTUFBTSxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUs7VUFDckIsTUFBTSxlQUFlLENBQUMsYUFBYSxDQUFDO1VBQ3BDLElBQUksWUFBWSxJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUMxQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1dBQ3BCO1NBQ0YsQ0FBQyxDQUFDO09BQ0o7TUFDRCxNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSztRQUNyQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRTtVQUMxQixPQUFPO1NBQ1I7UUFDRCxNQUFNLE1BQU0sc0JBQXNCLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlDLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1VBQ25CLE9BQU87U0FDUjtRQUNELE1BQU0sY0FBYyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sV0FBVyxjQUFjLENBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksa0JBQWtCLENBQUMsV0FBVyxDQUFDLEtBQUssY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7VUFDdEcsT0FBTztTQUNSO1FBQ0QsTUFBTSxrQkFBa0IsV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUN4RCxNQUFNLFVBQVUsZUFBZSxJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekYsTUFBTSxvQkFBb0IsdUJBQXVCLENBQUMsTUFBTSxJQUFJLEVBQUUsTUFBTSxPQUFPLEVBQUUsR0FBRyxlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDOUcsTUFBTSxpQkFBaUIsdUJBQXVCLElBQUksRUFBRSxDQUFDO1FBQ3JELElBQUksY0FBYyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7VUFDeEMsT0FBTztTQUNSO1FBQ0QsSUFBSSxPQUFPLEVBQUU7VUFDWCxDQUFDLGVBQWUsRUFBRSxDQUFDO1VBQ25CLEtBQUssaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU07WUFDbkMsTUFBTSxZQUFZLFNBQVMsQ0FBQyxNQUFNO2NBQ2hDLElBQUksZUFBZSxJQUFJLGNBQWMsSUFBSSxpQkFBaUIsRUFBRTtnQkFDMUQsTUFBTSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7ZUFDOUI7Y0FDRCxlQUFlLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2NBQzdCLE1BQU0saUJBQWlCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztjQUN6QyxJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDNUIsU0FBUyxDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO2VBQ25ELE1BQU07Z0JBQ0wsU0FBUyxDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7ZUFDekM7YUFDRixDQUFDLENBQUM7V0FDSixDQUFDLENBQUM7U0FDSjtPQUNGLENBQUMsQ0FBQztNQUNILE1BQU0sR0FBRyxDQUFDLFdBQVcsRUFBRSxNQUFNO1FBQzNCLHVCQUF1QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDbkMsQ0FBQyxDQUFDO01BQ0gsTUFBTSxHQUFHLENBQUMsa0JBQWtCLEVBQUUsS0FBSztRQUNqQyxJQUFJLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLElBQUksRUFBRSxFQUFFO1VBQ25FLENBQUMsZUFBZSxFQUFFLENBQUM7VUFDbkIsZUFBZSxDQUFDLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM1RDtRQUNELElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO1VBQ3hCLHVCQUF1QixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDcEM7T0FDRixDQUFDLENBQUM7TUFDSCwyQkFBMkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNyQyxDQUFDOztJQUVGLE1BQU0sVUFBVSxVQUFVO01BQ3hCLE1BQU0sZUFBZSxLQUFLLEtBQUs7UUFDN0IsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztPQUNkLENBQUM7TUFDRixNQUFNLGFBQWEsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDOUMsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDMUIsTUFBTSxHQUFHLENBQUMsaUJBQWlCLEVBQUUsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7T0FDeEQ7TUFDRCxNQUFNLGNBQWMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDaEQsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUU7UUFDM0IsTUFBTSxHQUFHLENBQUMsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7T0FDMUQ7S0FDRixDQUFDOztJQUVGLE1BQU0sc0JBQXNCLHdCQUF3QjtNQUNsRCxNQUFNLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLO1FBQ2hDLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztPQUN2RCxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxZQUFZLDBEQUEwRCxDQUFDO0lBQzdFLE1BQU0sV0FBVyxTQUFTLEtBQUssS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM5RixNQUFNLHFCQUFxQiwrQkFBK0I7TUFDeEQsTUFBTSxxQkFBcUIsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDeEQsSUFBSSxRQUFRLElBQUksa0JBQWtCLEtBQUssS0FBSyxJQUFJLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDdEYsT0FBTyxPQUFPLENBQUM7T0FDaEI7TUFDRCxNQUFNLGVBQWUsa0JBQWtCLEdBQUcsa0JBQWtCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7TUFDaEYsSUFBSSxZQUFZLElBQUksa0JBQWtCLEtBQUssTUFBTSxFQUFFO1FBQ2pELE1BQU0sTUFBTSxNQUFNLElBQUksRUFBRSxPQUFPLE1BQU0sVUFBVSxRQUFRLEVBQUUsQ0FBQztRQUMxRCxVQUFVLE9BQU8sUUFBUSxDQUFDLG9DQUFvQyxFQUFFLCtCQUErQjtVQUM3RixNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztVQUN0RCxNQUFNLGVBQWUsRUFBRSxDQUFDO1VBQ3hCLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUMsTUFBTSxhQUFhLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRCxJQUFJLGVBQWUsVUFBVSxDQUFDO1lBQzlCLElBQUksZUFBZSxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzdELElBQUksT0FBTyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Y0FDakMsZUFBZSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7Y0FDdEMsZUFBZSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDdkM7WUFDRCxJQUFJLFlBQVksS0FBSyxZQUFZLEVBQUU7Y0FDakMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQzthQUM1QztXQUNGO1VBQ0QsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztVQUM3RCxJQUFJLFdBQVcsRUFBRTtZQUNmLE9BQU8sTUFBTSxHQUFHLFVBQVUsR0FBRyxXQUFXLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztXQUN4RDtVQUNELE9BQU8sTUFBTSxHQUFHLEtBQUssQ0FBQztTQUN2QixDQUFDLENBQUM7T0FDSixNQUFNO1FBQ0wsVUFBVSxPQUFPLFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRSxNQUFNLENBQUMsQ0FBQztPQUN6RTtNQUNELFVBQVUsT0FBTyxRQUFRLENBQUMsNkNBQTZDLEVBQUUsK0JBQStCO1FBQ3RHLE9BQU8sTUFBTSxHQUFHLFVBQVUsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztPQUNsRCxDQUFDLENBQUM7TUFDSCxPQUFPLE9BQU8sQ0FBQztLQUNoQixDQUFDO0lBQ0YsTUFBTSxVQUFVLFVBQVU7TUFDeEIsSUFBSSxHQUFHLFFBQVEsV0FBVyxFQUFFLElBQUksR0FBRyxRQUFRLFNBQVMsRUFBRSxFQUFFO1FBQ3RELG1CQUFtQixDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO09BQ2pEO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLFVBQVUsVUFBVTtNQUN4QixNQUFNLDBCQUEwQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDNUMsTUFBTSxjQUFjLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUM7TUFDekUsTUFBTSxXQUFXLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNsQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDaEIsVUFBVSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztNQUNoQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDaEIsTUFBTSxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU07UUFDekIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUN6Qyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO09BQ3pELENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSx1QkFBdUIsVUFBVTtNQUNyQyxNQUFNLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSztRQUN0QixJQUFJLE1BQU0sSUFBSSxVQUFVLENBQUMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUU7VUFDN0MsQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUNwQjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGdCQUFnQixVQUFVO01BQzlCLE1BQU0sT0FBTyxjQUFjLENBQUMsU0FBUyxFQUFFLFFBQVE7UUFDN0MsTUFBTSxxQkFBcUIsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUQsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXO1VBQ3RCLElBQUksa0JBQWtCLEtBQUssVUFBVSxFQUFFO1lBQ3JDLE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztXQUM5QixNQUFNLElBQUksa0JBQWtCLEtBQUssV0FBVyxFQUFFO1lBQzdDLE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztXQUM1QjtTQUNGLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztNQUNILE1BQU0sV0FBVyxjQUFjLENBQUMsU0FBUyxFQUFFLFFBQVE7UUFDakQsTUFBTSx3QkFBd0IseUJBQXlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEUsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXO1VBQ3RCLElBQUkscUJBQXFCLEtBQUssVUFBVSxFQUFFO1lBQ3hDLE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztXQUM5QixNQUFNLElBQUkscUJBQXFCLEtBQUssV0FBVyxFQUFFO1lBQ2hELE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztXQUM1QjtTQUNGLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLFVBQVUsVUFBVTtNQUN4QixvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUM3QixhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDdkIsQ0FBQzs7SUFFRixNQUFNLE9BQU8sTUFBTSxDQUFDO0lBQ3BCLE1BQU0sU0FBUyxRQUFRLENBQUM7SUFDeEIsTUFBTSwyQkFBMkIsT0FBTyx3QkFBd0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzFFLE1BQU0sd0JBQXdCLE9BQU8sdUJBQXVCLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUN0RSxNQUFNLFNBQVMsWUFBWSxPQUFPLEVBQUUsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxRSxNQUFNLGtCQUFrQixvQkFBb0IsU0FBUyxDQUFDLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8scUJBQXFCLENBQUMsR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ25NLE1BQU0sZ0JBQWdCLG9CQUFvQixTQUFTLENBQUMsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDNUgsTUFBTSx5QkFBeUIsK0JBQStCO01BQzVELE1BQU0sU0FBUyxJQUFJLGFBQWEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDbkQsTUFBTSxPQUFPLE9BQU8sR0FBRyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDM0UsSUFBSSxTQUFTLFNBQVMsQ0FBQztNQUN2QixLQUFLLElBQUksVUFBVSxPQUFPLEdBQUcsU0FBUyxHQUFHLElBQUksRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLElBQUksRUFBRSxFQUFFO1FBQzVGLElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLEVBQUU7VUFDL0IsU0FBUyxPQUFPLENBQUM7U0FDbEI7T0FDRjtNQUNELE9BQU8sTUFBTSxDQUFDO0tBQ2YsQ0FBQztJQUNGLE1BQU0sd0JBQXdCLHdCQUF3QjtNQUNwRCxNQUFNLFdBQVcsYUFBYSxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDeEQsTUFBTSxZQUFZLFFBQVEsUUFBUSxFQUFFLENBQUM7TUFDckMsTUFBTSxRQUFRLGVBQWUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDbkQsTUFBTSxZQUFZLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDbEUsTUFBTSxVQUFVLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDL0QsTUFBTSxNQUFNLFFBQVEsWUFBWSxFQUFFLENBQUM7TUFDbkMsYUFBYSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU07UUFDekMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUU7VUFDckIsR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzVCLE1BQU07VUFDTCxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUMvQjtPQUNGLEVBQUUsT0FBTyxHQUFHLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDdkMsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU07UUFDdkMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7VUFDbkIsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sS0FBSyxPQUFPLENBQUMsQ0FBQztTQUMxQyxNQUFNO1VBQ0wsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDMUI7T0FDRixFQUFFLE9BQU8sR0FBRyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ3BDLE9BQU8sR0FBRyxDQUFDO0tBQ1osQ0FBQztJQUNGLE1BQU0sc0JBQXNCLFVBQVU7TUFDcEMsTUFBTSxNQUFNLHFCQUFxQixDQUFDLE1BQU0sVUFBVSxPQUFPLEVBQUUsRUFBRSxNQUFNLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDL0UsTUFBTSxVQUFVLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUN6QyxDQUFDO0lBQ0YsTUFBTSxVQUFVLFVBQVU7TUFDeEIsTUFBTSxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUs7UUFDMUIsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLEVBQUU7VUFDakIsQ0FBQyxlQUFlLEVBQUUsQ0FBQztVQUNuQixtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM3QjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsSUFBSSxpQkFBaUIsQ0FBQztJQUN0QixDQUFDLDZCQUE2QjtNQUM1QixpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7TUFDdkMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDO0tBQ3RDLENBQUMsaUJBQWlCLEtBQUssb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDbEQsTUFBTSxxQkFBcUIseUJBQXlCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQ3hGLE1BQU0sc0JBQXNCLHlCQUF5QixJQUFJLElBQUksQ0FBQyxVQUFVLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQztJQUMxRixNQUFNLFlBQVkseUJBQXlCLE9BQU8sSUFBSSxVQUFVLElBQUksSUFBSSxPQUFPLElBQUksVUFBVSxPQUFPLENBQUM7SUFDckcsTUFBTSxZQUFZLFlBQVksRUFBRSxJQUFJLEdBQUcsRUFBRSxPQUFPLElBQUksRUFBRSxPQUFPLEdBQUcsRUFBRSxJQUFJLENBQUM7SUFDdkUsTUFBTSxnQkFBZ0IsWUFBWTtNQUNoQyxNQUFNLFVBQVUsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQ2xFLE9BQU8sU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDO0tBQzNDLENBQUM7SUFDRixNQUFNLG9CQUFvQixjQUFjO01BQ3RDLE1BQU0sb0JBQW9CLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDdEUsT0FBTywyQkFBMkIsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBTTtRQUMvRCxFQUFFO1FBQ0YsS0FBSztPQUNOLEVBQUUsZ0JBQWdCO1FBQ2pCLE1BQU07OztTQUdMLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxRQUFRLGFBQWEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUNsRSxPQUFPO1VBQ0wsVUFBVTtVQUNWLFFBQVE7U0FDVCxDQUFDO09BQ0gsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sYUFBYSxtQkFBbUI7TUFDcEMsT0FBTztRQUNMLE1BQU0sSUFBSSxLQUFLO1FBQ2YsVUFBVSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLGlCQUFpQixPQUFPLEdBQUcsaUJBQWlCLE1BQU07T0FDdEksQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLHFCQUFxQixpQkFBaUIsQ0FBQyxHQUFHLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5SSxNQUFNLHFDQUFxQyxnQ0FBZ0M7TUFDekUsTUFBTSxxQkFBcUIsUUFBUTtRQUNqQyxJQUFJLGtCQUFrQixDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7VUFDakMsT0FBTyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QixNQUFNLElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7VUFDakMsT0FBTyxrQ0FBa0MsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztTQUN6RixNQUFNO1VBQ0wsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO1NBQ3hCO09BQ0YsQ0FBQztNQUNGLE1BQU0scUJBQXFCLHFCQUFxQjtRQUM5QyxJQUFJLEtBQUssT0FBTyxJQUFJLENBQUMsRUFBRTtVQUNyQixNQUFNLEtBQUssa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUN4RCxNQUFNLEtBQUssa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUN4RCxNQUFNLGdCQUFnQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1VBQ2hHLElBQUksYUFBYSxHQUFHLENBQUMsRUFBRTtZQUNyQixJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO2NBQ3JCLE9BQU8sUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDMUIsTUFBTSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO2NBQzVCLE9BQU8sUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDMUI7V0FDRjtTQUNGO1FBQ0QsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCLENBQUM7TUFDRixNQUFNLG9DQUFvQyxxQkFBcUI7UUFDN0QsTUFBTSxjQUFjLElBQUksQ0FBQyxLQUFLLEVBQUUsWUFBWSxRQUFRLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzdHLE9BQU8sa0JBQWtCLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxPQUFPLENBQUMsV0FBVyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztPQUMxRyxDQUFDO01BQ0YsTUFBTSxnQ0FBZ0MsR0FBRyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDOUYsTUFBTTs7O09BR0wsR0FBRyxXQUFXLENBQUMsYUFBYSxFQUFFLFFBQVEsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUM7TUFDM0QsT0FBTyxpQ0FBaUMsQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLENBQUMsUUFBUSxDQUFDLE1BQU0saUNBQWlDLENBQUMsS0FBSyxFQUFFLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0saUNBQWlDLENBQUMsS0FBSyxFQUFFLHdCQUF3QixDQUFDLENBQUMsQ0FBQztLQUNuUCxDQUFDO0lBQ0YsTUFBTSxhQUFhLHNDQUFzQztNQUN2RCxNQUFNLFNBQVMsc0JBQXNCO1FBQ25DLE1BQU0sdUJBQXVCLFFBQVEsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksVUFBVSxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN4RyxNQUFNLHlCQUF5QixRQUFRLENBQUMsS0FBSyxJQUFJLFdBQVcsRUFBRSxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLE9BQU8sU0FBUyxLQUFLLENBQUMsTUFBTSxrQ0FBa0MsQ0FBQyxzQkFBc0IsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsYUFBYTtVQUNySCxNQUFNLG9CQUFvQixRQUFRLENBQUMsc0JBQXNCLEVBQUUsUUFBUSxJQUFJLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQztVQUMzRixPQUFPLGtDQUFrQyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNoRixDQUFDLFFBQVEsQ0FBQyxNQUFNO1VBQ2YsTUFBTSxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7VUFDM0UsT0FBTyxNQUFNLEtBQUssQ0FBQyxZQUFZLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hFLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixPQUFPLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ3ZDLENBQUM7SUFDRixNQUFNLGdDQUFnQyw0QkFBNEI7TUFDaEUsTUFBTSxVQUFVLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzNDLE1BQU0sV0FBVyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDMUMsTUFBTSxpQkFBaUIsWUFBWSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sUUFBUSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ2hILE1BQU0sVUFBVSxjQUFjLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUM5QyxPQUFPLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztLQUN2RCxDQUFDO0lBQ0YsTUFBTSw0QkFBNEIsNEJBQTRCLDZCQUE2QixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLGlCQUFpQixDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDOztJQUV4TSxNQUFNLHNCQUFzQixPQUFPO01BQ2pDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztNQUNYLE1BQU0sYUFBYSxHQUFHLHNCQUFzQixFQUFFLENBQUM7TUFDL0MsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDO01BQzlCLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDO01BQ3BDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQztNQUM1QixPQUFPO1FBQ0wsS0FBSyxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxRQUFRLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxVQUFVO1FBQzNJLE1BQU0sVUFBVSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsUUFBUSxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sV0FBVztPQUMvSSxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLFVBQVUsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxHQUFHO01BQ3hGLE1BQU0sQ0FBQztNQUNQLEtBQUssQ0FBQztLQUNQLENBQUM7SUFDRixNQUFNLG9CQUFvQixVQUFVO01BQ2xDLE1BQU0sT0FBTyxNQUFNLFFBQVEsRUFBRSxDQUFDO01BQzlCLE9BQU8sTUFBTSxPQUFPLEdBQUc7UUFDckIsTUFBTSxJQUFJLFdBQVc7UUFDckIsS0FBSyxJQUFJLFVBQVU7T0FDcEIsR0FBRztRQUNGLE1BQU0sQ0FBQztRQUNQLEtBQUssQ0FBQztPQUNQLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsVUFBVTtNQUM5QixNQUFNLE9BQU8sTUFBTSxRQUFRLEVBQUUsRUFBRSxTQUFTLE1BQU0sT0FBTyxFQUFFLGdCQUFnQixDQUFDO01BQ3hFLE1BQU0sZUFBZTtRQUNuQixNQUFNLElBQUksV0FBVztRQUNyQixLQUFLLElBQUksVUFBVTtPQUNwQixDQUFDO01BQ0YsTUFBTSxlQUFlO1FBQ25CLE1BQU0sSUFBSSxXQUFXLElBQUksTUFBTSxXQUFXO1FBQzFDLEtBQUssSUFBSSxVQUFVLElBQUksTUFBTSxVQUFVO09BQ3hDLENBQUM7TUFDRixPQUFPLE1BQU0sT0FBTyxHQUFHLFlBQVksR0FBRyxZQUFZLENBQUM7S0FDcEQsQ0FBQztJQUNGLE1BQU0sbUJBQW1CLG1CQUFtQjtNQUMxQyxJQUFJLEtBQUssT0FBTyxjQUFjLEtBQUssTUFBTSxPQUFPLEVBQUUsRUFBRTtRQUNsRCxNQUFNLGlCQUFpQixtQkFBbUIsQ0FBQyxNQUFNLHdCQUF3QixFQUFFLENBQUMsQ0FBQztRQUM3RSxNQUFNLGlCQUFpQixhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsT0FBTztVQUNMLE1BQU0sS0FBSyxNQUFNLEdBQUcsY0FBYyxLQUFLLEdBQUcsY0FBYyxLQUFLO1VBQzdELEtBQUssS0FBSyxNQUFNLEdBQUcsY0FBYyxJQUFJLEdBQUcsY0FBYyxJQUFJO1NBQzNELENBQUM7T0FDSDtNQUNELE9BQU87UUFDTCxNQUFNLEtBQUssTUFBTTtRQUNqQixLQUFLLEtBQUssTUFBTTtPQUNqQixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLGtEQUFrRDtNQUMxRSxPQUFPLGFBQWEsS0FBSyxHQUFHLFlBQVksS0FBSyxHQUFHLGNBQWMsS0FBSztNQUNuRSxPQUFPLGFBQWEsSUFBSSxHQUFHLFlBQVksSUFBSSxHQUFHLGNBQWMsSUFBSTtLQUNqRSxDQUFDLENBQUM7SUFDSCxNQUFNLE9BQU8sbUJBQW1CLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQzs7SUFFdkksTUFBTSxpQkFBaUIsV0FBVztNQUNoQyxNQUFNO01BQ04sWUFBWSxNQUFNO0tBQ25CLENBQUMsQ0FBQztJQUNILE1BQU0sNkJBQTZCLDZDQUE2QztNQUM5RSxHQUFHLFVBQVU7TUFDYixZQUFZO01BQ1osSUFBSTtNQUNKLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQztLQUMxQixDQUFDLENBQUM7SUFDSCxNQUFNLGVBQWUsZ0NBQWdDO01BQ25ELE1BQU0sT0FBTyxHQUFHLENBQUMsNENBQTRDLENBQUMsQ0FBQztNQUMvRCxNQUFNLFFBQVE7UUFDWixTQUFTLElBQUk7UUFDYixjQUFjLEtBQUs7UUFDbkIsWUFBWSxJQUFJO1FBQ2hCLFVBQVUsS0FBSztRQUNmLGVBQWUsSUFBSTtRQUNuQixrQkFBa0IsS0FBSztRQUN2QixZQUFZLENBQUM7UUFDYixXQUFXLElBQUk7UUFDZixhQUFhLEtBQUs7UUFDbEIsV0FBVyxDQUFDO1FBQ1osSUFBSTtRQUNKLGNBQWMsSUFBSTtRQUNsQixXQUFXLElBQUk7UUFDZixnQkFBZ0IsSUFBSTtRQUNwQiwwQkFBMEIsSUFBSTtRQUM5QixpQkFBaUIsSUFBSTtRQUNyQixXQUFXLE1BQU0sTUFBTSxVQUFVO1FBQ2pDLGdCQUFnQixNQUFNLE1BQU0sZUFBZTtRQUMzQyxpQkFBaUIsTUFBTSxNQUFNLGdCQUFnQjtRQUM3QyxNQUFNLE1BQU0sTUFBTSxLQUFLO1FBQ3ZCLFFBQVEsS0FBSztRQUNiLFFBQVEsQ0FBQztRQUNULFNBQVMsQ0FBQztRQUNWLFNBQVMsQ0FBQztRQUNWLFNBQVMsQ0FBQztRQUNWLFNBQVMsS0FBSztRQUNkLFNBQVMsS0FBSztRQUNkLFdBQVcsQ0FBQztRQUNaLFdBQVcsQ0FBQztRQUNaLFNBQVMsQ0FBQztRQUNWLFNBQVMsQ0FBQztRQUNWLE9BQU8sQ0FBQztRQUNSLE9BQU8sQ0FBQztRQUNSLGVBQWUsSUFBSTtRQUNuQixTQUFTLENBQUM7UUFDVixTQUFTLENBQUM7UUFDVixVQUFVLEtBQUs7UUFDZixHQUFHLENBQUM7UUFDSixHQUFHLENBQUM7UUFDSixRQUFRLENBQUM7UUFDVCxNQUFNLElBQUk7UUFDVixPQUFPLENBQUM7UUFDUixhQUFhLElBQUk7UUFDakIsZ0JBQWdCLElBQUk7UUFDcEIsa0JBQWtCLElBQUk7UUFDdEIsWUFBWTtRQUNaLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQztPQUMxQixDQUFDO01BQ0YsT0FBTyxLQUFLLENBQUM7S0FDZCxDQUFDO0lBQ0YsTUFBTSxtQ0FBbUMsNkJBQTZCO01BQ3BFLE1BQU0sT0FBTyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztNQUM3QyxJQUFJLFNBQVMsS0FBSyxXQUFXLEVBQUU7UUFDN0IsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDeEIsTUFBTSxJQUFJLFNBQVMsS0FBSyxNQUFNLEVBQUU7UUFDL0IsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN2QixNQUFNO1FBQ0wsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO09BQ3hCO01BQ0QsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsNENBQTRDO01BQ2hFLE1BQU0sMEJBQTBCLGdDQUFnQyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNyRixPQUFPLFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxHQUFHLDBCQUEwQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLHVCQUF1QixDQUFDLENBQUM7S0FDdEssQ0FBQzs7SUFFRixNQUFNLDBCQUEwQixFQUFFLENBQUM7SUFDbkMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDO0lBQ2hDLE1BQU0sd0NBQXdDLENBQUMsQ0FBQztJQUNoRCxNQUFNLHlDQUF5QyxFQUFFLENBQUM7SUFDbEQsTUFBTSwyQkFBMkIsd0JBQXdCLENBQUM7SUFDMUQsTUFBTSxvQkFBb0IsRUFBRSxDQUFDLHdCQUF3QixFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFDaEYsTUFBTSxjQUFjLHVCQUF1Qix3QkFBd0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEtBQUssT0FBTyxJQUFJLEdBQUcsV0FBVyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFDakksTUFBTSxvQkFBb0Isd0NBQXdDO01BQ2hFLElBQUksVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1FBQzdCLE9BQU8sS0FBSyxDQUFDO09BQ2QsTUFBTSxJQUFJLGFBQWEsS0FBSyxXQUFXLElBQUksTUFBTSxJQUFJLFVBQVUsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLEVBQUU7UUFDNUYsT0FBTyxLQUFLLENBQUM7T0FDZCxNQUFNO1FBQ0wsT0FBTyxNQUFNLElBQUksV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO09BQzdDO0tBQ0YsQ0FBQztJQUNGLE1BQU0sY0FBYyxnQ0FBZ0M7TUFDbEQsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN0QyxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUU7UUFDdkIsS0FBSztRQUNMLE1BQU07T0FDUCxDQUFDLENBQUM7TUFDSCxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDcEQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRTtRQUNqQyxTQUFTLG9CQUFvQjtRQUM3QixrQkFBa0IsS0FBSztRQUN2QixnQkFBZ0IsSUFBSTtRQUNwQixtQkFBbUIsT0FBTztPQUMzQixDQUFDLENBQUM7TUFDSCxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUU7UUFDdEIsVUFBVSxVQUFVO1FBQ3BCLFNBQVMsR0FBRztRQUNaLFVBQVUsUUFBUTtRQUNsQixRQUFRLENBQUM7UUFDVCxTQUFTLENBQUM7UUFDVixRQUFRLENBQUM7UUFDVCxLQUFLO1FBQ0wsTUFBTTtPQUNQLENBQUMsQ0FBQztNQUNILEdBQUcsVUFBVSxDQUFDLFNBQVMsRUFBRTtRQUN2QixRQUFRLENBQUM7UUFDVCxXQUFXLFlBQVk7T0FDeEIsQ0FBQyxDQUFDO01BQ0gsUUFBUSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7TUFDaEMsT0FBTyxRQUFRLENBQUM7S0FDakIsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLHVCQUF1QjtNQUMvQyxJQUFJLFFBQVEsV0FBVyxLQUFLLE9BQU8sRUFBRTtRQUNuQyxPQUFPLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztPQUMvQjtLQUNGLENBQUM7SUFDRixNQUFNLGVBQWUsdUJBQXVCLE9BQU8sTUFBTTtNQUN2RCxNQUFNLFVBQVUsU0FBUyxLQUFLLE1BQU0sR0FBRyxHQUFHLFFBQVEsR0FBRyxHQUFHLFFBQVEsQ0FBQztNQUNqRSxHQUFHLE9BQU8sQ0FBQztRQUNULENBQUMsU0FBUyxHQUFHLE9BQU8sR0FBRyxNQUFNO1FBQzdCLFVBQVUsUUFBUTtPQUNuQixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxhQUFhLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sY0FBYyxZQUFZLENBQUMsTUFBTSxFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFDbEUsTUFBTSxXQUFXLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sYUFBYSxZQUFZLENBQUMsS0FBSyxFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFDaEUsTUFBTSxZQUFZLDhJQUE4STtNQUM5SixJQUFJLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO01BQ2pDLFFBQVEsTUFBTSxLQUFLLEdBQUcsUUFBUSxNQUFNLEdBQUcsSUFBSSxDQUFDO01BQzVDLFFBQVEsTUFBTSxJQUFJLEdBQUcsUUFBUSxNQUFNLEdBQUcsSUFBSSxDQUFDO01BQzNDLElBQUksUUFBUSxNQUFNLEdBQUcsS0FBSyxHQUFHLElBQUksRUFBRTtRQUNqQyxZQUFZLFFBQVEsTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7T0FDM0M7TUFDRCxJQUFJLFFBQVEsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLEVBQUU7UUFDbEMsWUFBWSxRQUFRLE1BQU0sR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO09BQzVDO01BQ0QsUUFBUSxNQUFNLE1BQU0sR0FBRyxLQUFLLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQztNQUNoRCxRQUFRLE1BQU0sT0FBTyxHQUFHLE1BQU0sR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDO01BQ2xELE1BQU0sZUFBZSxvQkFBb0IsYUFBYSxDQUFDO01BQ3ZELE1BQU0sY0FBYyxvQkFBb0IsWUFBWSxDQUFDO01BQ3JELE1BQU0sY0FBYyxNQUFNLEdBQUcsb0JBQW9CLHNCQUFzQixFQUFFLElBQUksQ0FBQztNQUM5RSxNQUFNLGNBQWMsTUFBTSxHQUFHLG9CQUFvQixzQkFBc0IsRUFBRSxLQUFLLENBQUM7TUFDL0UsS0FBSyxHQUFHLENBQUMsU0FBUztRQUNoQixLQUFLLFdBQVcsTUFBTSxFQUFFLENBQUM7UUFDekIsSUFBSSxLQUFLLFNBQVMsSUFBSSx1Q0FBdUMsRUFBRTtVQUM3RCxJQUFJLE1BQU0sR0FBRyxxQ0FBcUMsSUFBSSxZQUFZLEVBQUU7WUFDbEUsS0FBSyxXQUFXLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztXQUN2QyxNQUFNLElBQUksTUFBTSxHQUFHLHFDQUFxQyxJQUFJLENBQUMsRUFBRTtZQUM5RCxLQUFLLFdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQ3JDLE1BQU0sSUFBSSxNQUFNLEdBQUcscUNBQXFDLElBQUksV0FBVyxFQUFFO1lBQ3hFLEtBQUssV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7V0FDeEMsTUFBTSxJQUFJLE1BQU0sR0FBRyxxQ0FBcUMsSUFBSSxDQUFDLEVBQUU7WUFDOUQsS0FBSyxXQUFXLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztXQUN2QyxNQUFNLElBQUksV0FBVyxHQUFHLHNDQUFzQyxJQUFJLE1BQU0sWUFBWSxFQUFFO1lBQ3JGLEtBQUssV0FBVyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7V0FDMUMsTUFBTSxJQUFJLFdBQVcsR0FBRyxzQ0FBc0MsSUFBSSxDQUFDLEVBQUU7WUFDcEUsS0FBSyxXQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztXQUN4QyxNQUFNLElBQUksV0FBVyxHQUFHLHNDQUFzQyxJQUFJLE1BQU0sV0FBVyxFQUFFO1lBQ3BGLEtBQUssV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7V0FDM0MsTUFBTSxJQUFJLFdBQVcsR0FBRyxzQ0FBc0MsSUFBSSxDQUFDLEVBQUU7WUFDcEUsS0FBSyxXQUFXLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztXQUMxQztTQUNGO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLE9BQU87TUFDM0IsSUFBSSxHQUFHLElBQUksR0FBRyxXQUFXLEVBQUU7UUFDekIsR0FBRyxXQUFXLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUNqQztLQUNGLENBQUM7SUFDRixNQUFNLDJCQUEyQixjQUFjO01BQzdDLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxHQUFHLFdBQVcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDO01BQy9ELGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNuQixJQUFJLFdBQVcsSUFBSSxXQUFXLEtBQUssR0FBRyxRQUFRLEVBQUUsSUFBSSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUM1RSxpQkFBaUIsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO09BQ3REO0tBQ0YsQ0FBQztJQUNGLE1BQU0sMkJBQTJCLEtBQUssQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDO0lBQ3JELE1BQU0sY0FBYyxzQkFBc0I7TUFDeEMsT0FBTyxRQUFRLE1BQU0sR0FBRyxLQUFLLEtBQUs7TUFDbEMsT0FBTyxRQUFRLE1BQU0sR0FBRyxDQUFDO0tBQzFCLENBQUMsQ0FBQztJQUNILE1BQU0sUUFBUSxtQkFBbUIsS0FBSztNQUNwQyxJQUFJLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQy9CLE1BQU0sUUFBUSxNQUFNLENBQUMsTUFBTSxJQUFJLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRixJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxJQUFJLEVBQUUsTUFBTSxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRTtVQUM1RSxNQUFNLFNBQVMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztVQUN4QyxNQUFNLFVBQVUsTUFBTSxRQUFRLEVBQUUsQ0FBQztVQUNqQyxNQUFNLFNBQVMsTUFBTSxPQUFPLEVBQUUsZ0JBQWdCLENBQUM7VUFDL0MsS0FBSyxJQUFJLENBQUM7WUFDUixTQUFTLEtBQUs7WUFDZCxjQUFjLGtCQUFrQixFQUFFO1lBQ2xDLFVBQVUsS0FBSztZQUNmLFNBQVMsQ0FBQyxRQUFRO1lBQ2xCLFNBQVMsQ0FBQyxRQUFRO1lBQ2xCLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxPQUFPLFlBQVksR0FBRyxNQUFNLFlBQVksSUFBSSxDQUFDO1lBQ3BFLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxPQUFPLGFBQWEsR0FBRyxNQUFNLGFBQWEsSUFBSSxDQUFDO1lBQ3RFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFO1lBQ3hCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFO1lBQ3hCLE9BQU8sS0FBSyxZQUFZO1lBQ3hCLFFBQVEsS0FBSyxhQUFhO1lBQzFCLE9BQU8sV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxZQUFZLEVBQUUsS0FBSyxhQUFhLENBQUM7WUFDeEUsWUFBWSxVQUFVLENBQUMsbUJBQW1CLENBQUM7V0FDNUMsQ0FBQyxDQUFDO1NBQ0o7T0FDRjtLQUNGLENBQUM7SUFDRixNQUFNLGVBQWUsOEJBQThCO01BQ2pELE1BQU0sb0JBQW9CLGNBQWMsRUFBRSxDQUFDO01BQzNDLHlCQUF5QixDQUFDLE1BQU0sUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxNQUFNLFVBQVUsYUFBYSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxhQUFhO1FBQ3JJLE1BQU0sUUFBUSxNQUFNLG9CQUFvQixVQUFVLENBQUMsQ0FBQyxFQUFFLFNBQVMsS0FBSyxFQUFFLFNBQVMsU0FBUyxLQUFLLGlCQUFpQixPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUgsSUFBSSxLQUFLLEVBQUU7VUFDVCxNQUFNLFVBQVUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2hDLE1BQU07VUFDTCxNQUFNLFVBQVUsYUFBYSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNqRDtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLG9CQUFvQixvREFBb0Q7TUFDNUUsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFO1FBQ3hCLFdBQVcsQ0FBQyxZQUFZLEVBQUUsTUFBTSxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO09BQzVEO01BQ0QsTUFBTSxRQUFRLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztNQUNwRSxNQUFNLE9BQU8sTUFBTSxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQzFDLE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQztJQUNGLE1BQU0sT0FBTyxtQkFBbUI7TUFDOUIsTUFBTSx3QkFBd0IsT0FBTyxDQUFDLHNCQUFzQixZQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUN2RyxNQUFNLEdBQUcsQ0FBQyxRQUFRLEVBQUUscUJBQXFCLE9BQU8sQ0FBQyxDQUFDO01BQ2xELE1BQU0sU0FBUyxLQUFLLENBQUM7TUFDckIsT0FBTyxLQUFLLEtBQUssR0FBRyxDQUFDLFNBQVM7UUFDNUIsTUFBTSxXQUFXLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssUUFBUSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3BHLElBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxRQUFRLEdBQUcsRUFBRSxFQUFFO1VBQ3BDLE1BQU0sT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssUUFBUSxFQUFFLEtBQUssYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1VBQzFGLElBQUksYUFBYSxDQUFDLElBQUksYUFBYSxDQUFDLEVBQUU7WUFDcEMsS0FBSyxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQUM7V0FDeEM7VUFDRCxJQUFJLElBQUksbUJBQW1CLEVBQUUsRUFBRTtZQUM3QixPQUFPO1dBQ1I7VUFDRCxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUM7VUFDdEIsTUFBTSxNQUFNLEVBQUUsQ0FBQztTQUNoQjtRQUNELElBQUksS0FBSyxTQUFTLEVBQUU7VUFDbEIsTUFBTSwwQ0FBMEMsQ0FBQyxjQUFjLEtBQUssTUFBTSxPQUFPLEVBQUUsZ0JBQWdCLENBQUM7VUFDcEcsTUFBTSxZQUFZLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3RELGlCQUFpQixDQUFDLEtBQUssTUFBTSxFQUFFLE1BQU0sUUFBUSxFQUFFLENBQUMsQ0FBQztVQUNqRCxTQUFTLENBQUMsS0FBSyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssS0FBSyxFQUFFLEtBQUssS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLEVBQUUsRUFBRSxNQUFNLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSx1Q0FBdUMsQ0FBQyxDQUFDO1VBQy9NLHFCQUFxQixTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN0RDtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGVBQWUsYUFBYTtNQUNoQyxNQUFNLE1BQU0sU0FBUyxPQUFPLEVBQUUsQ0FBQztNQUMvQixJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0QixNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsTUFBTSxpQkFBaUIsR0FBRyxlQUFlLENBQUM7UUFDMUMsT0FBTyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsY0FBYyxXQUFXLEdBQUcsY0FBYyxDQUFDO09BQzlFLE1BQU07UUFDTCxPQUFPLElBQUksQ0FBQztPQUNiO0tBQ0YsQ0FBQztJQUNGLE1BQU0sT0FBTyxtQkFBbUIsS0FBSztNQUNuQyxLQUFLLEdBQUcsQ0FBQyxTQUFTO1FBQ2hCLElBQUksRUFBRSxDQUFDO1FBQ1AsS0FBSyxXQUFXLE1BQU0sRUFBRSxDQUFDO1FBQ3pCLElBQUksS0FBSyxTQUFTLEVBQUU7VUFDbEIsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU0sVUFBVSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsRUFBRTtZQUM1RSxNQUFNLGFBQWEsQ0FBQyxLQUFLLE1BQU0sT0FBTyxFQUFFLGlCQUFpQixDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxRQUFRLEVBQUUsQ0FBQztZQUNuSSxNQUFNLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsS0FBSyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbEYsSUFBSSxDQUFDLElBQUksbUJBQW1CLEVBQUUsRUFBRTtjQUM5QixNQUFNLFlBQVksU0FBUyxDQUFDLE1BQU07Z0JBQ2hDLHdCQUF3QixDQUFDLE1BQU0sSUFBSSxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUM7Z0JBQ3BELFdBQVcsQ0FBQyxLQUFLLGFBQWEsQ0FBQyxLQUFLLENBQUMsV0FBVyxNQUFNLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUMvRSxNQUFNLG9CQUFvQixjQUFjLEVBQUUsQ0FBQztlQUM1QyxDQUFDLENBQUM7YUFDSjtXQUNGO1VBQ0QsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLFFBQVEsRUFBRSxFQUFFLEtBQUssYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQy9FO09BQ0YsQ0FBQyxDQUFDO01BQ0gsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3hCLENBQUM7SUFDRixNQUFNLGVBQWUsc0JBQXNCO01BQ3pDLEtBQUssR0FBRyxDQUFDLFNBQVM7UUFDaEIsS0FBSyxXQUFXLE1BQU0sRUFBRSxDQUFDO1FBQ3pCLElBQUksS0FBSyxTQUFTLEVBQUU7VUFDbEIsQ0FBQyxLQUFLLENBQUMsTUFBTSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssUUFBUSxFQUFFLEtBQUssYUFBYSxDQUFDLEVBQUUsY0FBYyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssUUFBUSxFQUFFLEtBQUssYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDMUw7T0FDRixDQUFDLENBQUM7TUFDSCxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDeEIsQ0FBQztJQUNGLE1BQU0sT0FBTyxtQkFBbUIsS0FBSyxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25GLE1BQU0sa0JBQWtCLFNBQVM7TUFDL0IsS0FBSyxHQUFHLENBQUMsU0FBUztRQUNoQixLQUFLLFdBQVcsTUFBTSxFQUFFLENBQUM7UUFDekIsYUFBYSxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUM7T0FDNUIsQ0FBQyxDQUFDO01BQ0gsS0FBSyxNQUFNLEVBQUUsQ0FBQztLQUNmLENBQUM7SUFDRixNQUFNLHFCQUFxQixVQUFVO01BQ25DLE1BQU0sUUFBUSxPQUFPLEVBQUUsQ0FBQztNQUN4QixNQUFNLFVBQVUsUUFBUSxJQUFJLENBQUM7TUFDN0IsTUFBTSxlQUFlLFFBQVEsQ0FBQztNQUM5QixNQUFNLG1CQUFtQixLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQzlDLE1BQU0sY0FBYyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3hDLE1BQU0sY0FBYyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3hDLE1BQU0saUJBQWlCLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDM0MsTUFBTSxHQUFHLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLENBQUM7TUFDekMsTUFBTSxHQUFHLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO01BQ3BDLE1BQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztNQUNsQyxPQUFPLEtBQUssQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO01BQ3JELE9BQU8sS0FBSyxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7TUFDdEQsTUFBTSxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU07UUFDeEIsT0FBTyxPQUFPLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN2RCxPQUFPLE9BQU8sQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO09BQ3pELENBQUMsQ0FBQztNQUNILE1BQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEtBQUssRUFBRSxJQUFJLEVBQUU7VUFDeEIsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQzlDO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sMkJBQTJCLFVBQVU7TUFDekMsTUFBTSxrQkFBa0IsS0FBSztRQUMzQixJQUFJLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO1VBQzNCLE1BQU0sZUFBZSxDQUFDLGFBQWEsQ0FBQztVQUNwQyxJQUFJLFlBQVksS0FBSyxVQUFVLENBQUMsWUFBWSxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksWUFBWSxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRTtZQUM5RixDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxLQUFLLEtBQUssTUFBTSxFQUFFO2NBQ3JCLFlBQVksQ0FBQyxNQUFNLEVBQUUsb0NBQW9DLENBQUMsQ0FBQzthQUM1RDtXQUNGO1NBQ0Y7T0FDRixDQUFDO01BQ0YsTUFBTSw2QkFBNkIsS0FBSztRQUN0QyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRTtVQUNqQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEI7T0FDRixDQUFDO01BQ0YsTUFBTSxRQUFRLE1BQU07UUFDbEIsTUFBTSxVQUFVLFFBQVEsSUFBSSxDQUFDO1FBQzdCLE1BQU0sTUFBTSxNQUFNLElBQUksQ0FBQztRQUN2QixNQUFNLE1BQU0sUUFBUSxDQUFDO1FBQ3JCLE1BQU0sYUFBYSxNQUFNLE9BQU8sR0FBRyxNQUFNLFFBQVEsRUFBRSxHQUFHLE1BQU0sT0FBTyxFQUFFLENBQUM7UUFDdEUsTUFBTSxhQUFhO1VBQ2pCLE1BQU07VUFDTixVQUFVO1NBQ1gsQ0FBQztRQUNGLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUTtVQUN6QixPQUFPLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLDBCQUEwQixDQUFDLENBQUM7VUFDcEQsR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztTQUM3QyxDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTTtVQUN4QixNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVE7WUFDekIsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO1lBQ3RELEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7V0FDL0MsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNO1FBQ3RCLEtBQUssaUJBQWlCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztPQUMxQyxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxTQUFTLFVBQVU7TUFDdkIsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDM0IsSUFBSSwwQkFBMEIsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUN0Qyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUNsQztLQUNGLENBQUM7O0lBRUYsTUFBTSxVQUFVLFVBQVU7TUFDeEIsTUFBTSxtQkFBbUIsT0FBTyxDQUFDLE1BQU07UUFDckMsSUFBSSxDQUFDLE1BQU0sUUFBUSxJQUFJLE1BQU0sUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRLGNBQWMsQ0FBQyxFQUFFO1VBQ3hFLE1BQU0sTUFBTSxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7VUFDdEMsSUFBSSxHQUFHLFVBQVUsRUFBRTtZQUNqQixNQUFNLGFBQWEsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN4RCxNQUFNLFVBQVUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1dBQ3JDO1NBQ0Y7T0FDRixFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ04sTUFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU07UUFDdkIsZ0JBQWdCLFNBQVMsRUFBRSxDQUFDO09BQzdCLENBQUMsQ0FBQztNQUNILE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNO1FBQ3RCLGdCQUFnQixPQUFPLEVBQUUsQ0FBQztPQUMzQixDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sVUFBVSxVQUFVO01BQ3hCLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNO1FBQ3RCLE1BQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLO1VBQ3hCLE1BQU0sU0FBUyxDQUFDLE9BQU8sQ0FBQztVQUN4QixJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNyQixNQUFNLFNBQVMsd0JBQXdCLENBQUMsTUFBTSxRQUFRLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNsRSxNQUFNLE9BQU8sd0JBQXdCLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUNoRSxJQUFJLE1BQU0sVUFBVSxRQUFRLEVBQUUsS0FBSyxJQUFJLEVBQUU7Y0FDdkMsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sTUFBTSxVQUFVLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3BFO1dBQ0Y7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0seUJBQXlCLHdCQUF3QixDQUFDO0lBQ3hELE1BQU0seUJBQXlCLGtCQUFrQix3QkFBd0IsQ0FBQyxNQUFNLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xHLE1BQU0scUJBQXFCLFVBQVU7TUFDbkMsTUFBTSxZQUFZLE1BQU0sVUFBVSxFQUFFLE1BQU0sTUFBTSxJQUFJLENBQUM7TUFDckQsTUFBTSxXQUFXLE1BQU0sUUFBUSxFQUFFLENBQUM7TUFDbEMsTUFBTSxZQUFZLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7TUFDbkYsTUFBTSxrQkFBa0IsTUFBTSxHQUFHLEdBQUcsU0FBUyxFQUFFLENBQUM7TUFDaEQsTUFBTSx1QkFBdUIsbUJBQW1CLENBQUM7TUFDakQsSUFBSSxlQUFlLENBQUM7TUFDcEIsTUFBTSx5QkFBeUIsUUFBUSxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLHlCQUF5QixDQUFDLENBQUM7TUFDNUcsTUFBTSwrQkFBK0IsUUFBUSxJQUFJLEtBQUssUUFBUSxLQUFLLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDO01BQ3hMLE1BQU0sV0FBVyxTQUFTO1FBQ3hCLElBQUksS0FBSyxFQUFFO1VBQ1QsU0FBUyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDekI7T0FDRixDQUFDO01BQ0YsTUFBTSxZQUFZLDBCQUEwQixpQkFBaUIsSUFBSSxLQUFLO1FBQ3BFLE1BQU0sSUFBSSxNQUFNLFNBQVMsQ0FBQyxXQUFXLEVBQUU7VUFDckMsUUFBUSxJQUFJO1VBQ1osU0FBUztVQUNULE1BQU07U0FDUCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRTtVQUMxQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsSUFBSSxjQUFjLEVBQUU7VUFDbEIsU0FBUyxlQUFlLENBQUMsSUFBSSxFQUFFLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xEO1FBQ0QsT0FBTyxTQUFTLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDckMsQ0FBQztNQUNGLE1BQU0sMEJBQTBCLHVCQUF1QjtRQUNyRCxJQUFJLG1CQUFtQixhQUFhLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtVQUN0RCx1QkFBdUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1VBQzdDLFNBQVMsZUFBZSxDQUFDLG1CQUFtQixDQUFDLENBQUM7U0FDL0M7T0FDRixDQUFDO01BQ0YsTUFBTSxpQkFBaUIsTUFBTTtRQUMzQixNQUFNLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSztVQUN0QixJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM3QixDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ25CLE1BQU0sTUFBTSxFQUFFLENBQUM7V0FDaEI7U0FDRixDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsQ0FBQyxlQUFlLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUNuRCxNQUFNLEdBQUcsQ0FBQyxxQ0FBcUMsRUFBRSxTQUFTLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLO1VBQ3BCLE1BQU0sWUFBWSxDQUFDLE9BQU8sQ0FBQztVQUMzQixNQUFNLHNCQUFzQixzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7VUFDdEUsSUFBSSxzQkFBc0IsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1lBQy9DLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbkIsVUFBVSxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztXQUNuRSxNQUFNLElBQUksNEJBQTRCLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDbEQsVUFBVSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7V0FDekQ7U0FDRixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ1QsTUFBTSxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUs7VUFDMUIsTUFBTSxZQUFZLENBQUMsT0FBTyxDQUFDO1VBQzNCLElBQUksU0FBUyxLQUFLLFFBQVEsSUFBSSxTQUFTLFNBQVMsS0FBSyxNQUFNLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDbEcsT0FBTztXQUNSO1VBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3BELE9BQU87V0FDUjtVQUNELHNCQUFzQixFQUFFLENBQUM7VUFDekIsYUFBYSxFQUFFLENBQUM7VUFDaEIsTUFBTSx5QkFBeUIsc0JBQXNCLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1VBQ3pFLElBQUksc0JBQXNCLENBQUMsc0JBQXNCLENBQUMsRUFBRTtZQUNsRCxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ25CLFVBQVUsQ0FBQyxNQUFNLEVBQUUsc0JBQXNCLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7V0FDdEUsTUFBTTtZQUNMLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsYUFBYTtjQUMxRSxDQUFDLGVBQWUsRUFBRSxDQUFDO2NBQ25CLE1BQU0sUUFBUSxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsS0FBSyxFQUFFLFNBQVMsU0FBUyxLQUFLLGlCQUFpQixPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7Y0FDbkcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2NBQ2hCLElBQUksV0FBVyxDQUFDLHNCQUFzQixDQUFDLEVBQUU7Z0JBQ3ZDLHNCQUFzQixNQUFNLEVBQUUsQ0FBQztlQUNoQyxNQUFNO2dCQUNMLE1BQU0sUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO2VBQzFCO2FBQ0YsQ0FBQyxDQUFDO1dBQ0o7U0FDRixDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsQ0FBQyxVQUFVLEVBQUUsS0FBSztVQUN6QixJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDekIsT0FBTztXQUNSO1VBQ0QsSUFBSSxzQkFBc0IsQ0FBQyxTQUFTLFFBQVEsRUFBRSxDQUFDLEVBQUU7WUFDL0MsQ0FBQyxlQUFlLEVBQUUsQ0FBQztXQUNwQjtTQUNGLENBQUMsQ0FBQztRQUNILE1BQU0sR0FBRyxDQUFDLG1CQUFtQixFQUFFLEtBQUs7VUFDbEMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDO1VBQ2xCLElBQUksZUFBZSxFQUFFO1lBQ25CLElBQUksQ0FBQyxlQUFlLFdBQVcsRUFBRTtjQUMvQixrQkFBa0IsSUFBSSxDQUFDO2NBQ3ZCLE9BQU87YUFDUjtZQUNELE1BQU0sR0FBRyxXQUFXLEVBQUUsQ0FBQztZQUN2QixHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNoQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7V0FDZjtTQUNGLENBQUMsQ0FBQztRQUNILE1BQU0sR0FBRyxDQUFDLG1CQUFtQixFQUFFLEtBQUs7VUFDbEMsQ0FBQyxNQUFNLEdBQUcsNkJBQTZCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztVQUNqRCxNQUFNLE1BQU0sbUJBQW1CLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztVQUNwRCxJQUFJLEdBQUcsRUFBRTtZQUNQLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztXQUNmO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxhQUFhLFFBQVEsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxLQUFLLGFBQWEsQ0FBQztRQUMxRSxNQUFNLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRSxLQUFLO1VBQ3ZDLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQztVQUNwQixNQUFNLFNBQVMsR0FBRyxlQUFlLGNBQWMsQ0FBQztVQUNoRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDeEQsYUFBYSxFQUFFLENBQUM7V0FDakI7VUFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbkMsc0JBQXNCLEVBQUUsQ0FBQztXQUMxQjtTQUNGLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNmLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDakIsQ0FBQztNQUNGLE1BQU0seUJBQXlCLFFBQVEsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksMEJBQTBCLENBQUMsSUFBSSxDQUFDLElBQUksd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDdEksTUFBTSwwQkFBMEIsT0FBTyxzQkFBc0IsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxJQUFJLHNCQUFzQixDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7TUFDOUgsTUFBTSxnQ0FBZ0MsT0FBTztRQUMzQyxNQUFNLGVBQWUsTUFBTSxPQUFPLGdCQUFnQixFQUFFLENBQUM7UUFDckQsTUFBTSxTQUFTLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDL0IsTUFBTSxpQkFBaUIsR0FBRyxlQUFlLENBQUM7UUFDMUMsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDO1FBQ3BDLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQztRQUN0QyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUM7UUFDaEMsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLGNBQWMsU0FBUyxZQUFZLEVBQUUsQ0FBQyxFQUFFO1VBQzlELElBQUksV0FBVyxLQUFLLENBQUMsRUFBRTtZQUNyQixNQUFNLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQztXQUN2QyxNQUFNO1lBQ0wsTUFBTSxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7V0FDdEM7U0FDRixNQUFNO1VBQ0wsTUFBTSxTQUFTLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLFlBQVksU0FBUyxZQUFZLEVBQUUsQ0FBQyxFQUFFO1VBQzVELElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtZQUNuQixNQUFNLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztXQUNuQyxNQUFNO1lBQ0wsTUFBTSxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7V0FDbEM7U0FDRixNQUFNO1VBQ0wsTUFBTSxPQUFPLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsT0FBTyxNQUFNLENBQUM7T0FDZixDQUFDO01BQ0YsTUFBTSwwQkFBMEIsdUJBQXVCO1FBQ3JELE1BQU0sT0FBTyxZQUFZLFFBQVEsQ0FBQyxNQUFNLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDcEQsTUFBTSxNQUFNLE1BQU0sT0FBTyxFQUFFLENBQUM7UUFDNUIsTUFBTSx5QkFBeUIsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQyxNQUFNO1VBQ3RGLE1BQU0sZUFBZSxZQUFZLFNBQVMsQ0FBQyxrRUFBa0UsRUFBRSxHQUFHLENBQUMsQ0FBQztVQUNwSCxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztVQUMzQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO1VBQzdCLE9BQU8sWUFBWSxDQUFDO1NBQ3JCLENBQUMsQ0FBQztRQUNILE1BQU0sV0FBVyxHQUFHLFVBQVUsRUFBRSxDQUFDO1FBQ2pDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRTtVQUM3QixZQUFZLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1VBQ2hDLFlBQVksUUFBUSxDQUFDLFdBQVcsQ0FBQztVQUNqQyxZQUFZLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1NBQ2pDLENBQUMsQ0FBQztRQUNILFFBQVEsU0FBUyxDQUFDLHNCQUFzQixJQUFJLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1RCxRQUFRLE9BQU8sQ0FBQyxzQkFBc0IsSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekQsTUFBTSxDQUFDLHNCQUFzQixFQUFFLEVBQUUsS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyRixPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNoQyxNQUFNLE1BQU0sU0FBUyxPQUFPLEVBQUUsQ0FBQztRQUMvQixJQUFJLEdBQUcsRUFBRTtVQUNQLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztVQUN0QixHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN4QjtRQUNELE9BQU8sUUFBUSxDQUFDO09BQ2pCLENBQUM7TUFDRixNQUFNLGdCQUFnQixPQUFPO1FBQzNCLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxNQUFNLElBQUksTUFBTSxTQUFTLENBQUMsZ0JBQWdCLEVBQUU7VUFDMUMsUUFBUSxHQUFHO1VBQ1gsV0FBVztTQUNaLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO1VBQzFCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLFFBQVEsdUJBQXVCLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUQsTUFBTSxVQUFVLFlBQVksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsWUFBWSxRQUFRLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTztVQUNqRyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNyQixRQUFRLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDLENBQUM7V0FDckM7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDLEVBQUU7VUFDN0MsR0FBRyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDN0M7UUFDRCxrQkFBa0IsR0FBRyxDQUFDO1FBQ3RCLGFBQWEsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sS0FBSyxDQUFDO09BQ2QsQ0FBQztNQUNGLE1BQU0sc0JBQXNCLG9CQUFvQjtRQUM5QyxJQUFJLENBQUMsS0FBSyxFQUFFO1VBQ1YsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELElBQUksS0FBSyxVQUFVLEVBQUU7VUFDbkIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ25DLE1BQU0sTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzdCLE1BQU0sZ0JBQWdCLDBCQUEwQixDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdkUsTUFBTSxhQUFhLGFBQWEsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkQsSUFBSSxhQUFhLENBQUMsVUFBVSxDQUFDLEVBQUU7Y0FDN0IsSUFBSSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDakMsT0FBTyxTQUFTLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxPQUFPLEdBQUcsQ0FBQyxhQUFhLFFBQVEsRUFBRSxHQUFHLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztlQUN0RjtjQUNELElBQUksc0JBQXNCLENBQUMsVUFBVSxDQUFDLElBQUksd0JBQXdCLENBQUMsVUFBVSxZQUFZLENBQUMsRUFBRTtnQkFDMUYsTUFBTSxNQUFNLEdBQUcsVUFBVSxFQUFFLENBQUM7Z0JBQzVCLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDNUIsR0FBRyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixPQUFPLEdBQUcsQ0FBQztlQUNaO2FBQ0Y7WUFDRCxNQUFNLFlBQVksYUFBYSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDakQsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUU7Y0FDNUIsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDaEMsT0FBTyxTQUFTLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxPQUFPLEdBQUcsS0FBSyxHQUFHLENBQUMsYUFBYSxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztlQUNyRjtjQUNELElBQUksc0JBQXNCLENBQUMsU0FBUyxDQUFDLElBQUksd0JBQXdCLENBQUMsU0FBUyxnQkFBZ0IsQ0FBQyxFQUFFO2dCQUM1RixNQUFNLE1BQU0sR0FBRyxVQUFVLEVBQUUsQ0FBQztnQkFDNUIsR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMzQixHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLE9BQU8sR0FBRyxDQUFDO2VBQ1o7YUFDRjtXQUNGO1VBQ0QsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELElBQUksaUJBQWlCLEtBQUssZUFBZSxDQUFDO1FBQzFDLElBQUksY0FBYyxLQUFLLFlBQVksQ0FBQztRQUNwQyxNQUFNLFlBQVksS0FBSyxVQUFVLENBQUM7UUFDbEMsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksV0FBVyxLQUFLLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxjQUFjLFdBQVcsQ0FBQyxFQUFFO1VBQ3RHLGlCQUFpQixjQUFjLFdBQVcsQ0FBQztVQUMzQyxjQUFjLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1VBQzVDLGlCQUFpQixjQUFjLFdBQVcsQ0FBQztTQUM1QztRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUU7VUFDaEMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELElBQUksU0FBUyxLQUFLLFdBQVcsR0FBRyxDQUFDLElBQUksY0FBYyxLQUFLLEtBQUssYUFBYSxFQUFFO1VBQzFFLE1BQU0sT0FBTyxjQUFjLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztVQUNwRCxJQUFJLDRCQUE0QixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RDLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1dBQzVCO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztPQUNiLENBQUM7TUFDRixNQUFNLHlCQUF5QixNQUFNO1FBQ25DLElBQUksZUFBZSxFQUFFO1VBQ25CLGVBQWUsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUN2RDtRQUNELFVBQVUsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxNQUFNLFFBQVEsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekYsa0JBQWtCLElBQUksQ0FBQztPQUN4QixDQUFDO01BQ0YsTUFBTSxVQUFVLE1BQU07UUFDcEIsU0FBUyxRQUFRLEVBQUUsQ0FBQztRQUNwQixrQkFBa0IsSUFBSSxDQUFDO09BQ3hCLENBQUM7TUFDRixNQUFNLGdCQUFnQixNQUFNO1FBQzFCLFNBQVMsS0FBSyxFQUFFLENBQUM7T0FDbEIsQ0FBQztNQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDbEIsY0FBYyxFQUFFLENBQUM7T0FDbEI7TUFDRCxPQUFPO1FBQ0wsU0FBUztRQUNULHVCQUF1QjtRQUN2QixhQUFhO1FBQ2IsT0FBTztPQUNSLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sMEJBQTBCLHVCQUF1QjtNQUNyRCxJQUFJLG1CQUFtQixNQUFNLENBQUM7TUFDOUIsS0FBSyxJQUFJLE9BQU8sU0FBUyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxJQUFJLGdCQUFnQixFQUFFO1FBQ3RGLG9CQUFvQixJQUFJLEtBQUssT0FBTyxDQUFDO09BQ3RDO01BQ0QsT0FBTyxnQkFBZ0IsQ0FBQztLQUN6QixDQUFDO0lBQ0YsTUFBTSxlQUFlLHlDQUF5QztNQUM1RCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxJQUFJLEtBQUssT0FBTyxDQUFDLEVBQUU7UUFDL0QsT0FBTyxFQUFFLENBQUM7T0FDWDtNQUNELE1BQU0sSUFBSSxVQUFVLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUM1RixJQUFJLFVBQVUsSUFBSSxDQUFDO01BQ25CLE9BQU8sT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLFdBQVcsRUFBRTtRQUM3QyxDQUFDLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUMzQyxVQUFVLE9BQU8sV0FBVyxDQUFDO09BQzlCO01BQ0QsT0FBTyxPQUFPLEtBQUssSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO0tBQzVDLENBQUM7SUFDRixNQUFNLG9CQUFvQix3REFBd0QsYUFBYSxLQUFLLEtBQUs7TUFDdkcsTUFBTSxRQUFRLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7TUFDMUUsTUFBTSxNQUFNLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7TUFDcEUsT0FBTztRQUNMLEtBQUs7UUFDTCxHQUFHO09BQ0osQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLGNBQWMsZ0JBQWdCO01BQ2xDLE1BQU0sV0FBVyxJQUFJLE1BQU0sRUFBRSxDQUFDO01BQzlCLE1BQU0sU0FBUyxRQUFRLElBQUksRUFBRSxDQUFDO01BQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDckIsT0FBTyxRQUFRLEtBQUssRUFBRSxDQUFDO09BQ3hCLE1BQU07UUFDTCxNQUFNLGVBQWUsS0FBSyxDQUFDLFFBQVEsRUFBRSxvQkFBb0IsT0FBTyxLQUFLLENBQUMsUUFBUSxRQUFRLEtBQUssQ0FBQyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzSSxPQUFPLFlBQVksS0FBSyxDQUFDLFFBQVE7VUFDL0IsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssTUFBTSxHQUFHLENBQUMsSUFBSSxNQUFNLEdBQUcsSUFBSSxLQUFLLE9BQU8sQ0FBQyxFQUFFO1lBQy9ELE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQztXQUN4QixNQUFNO1lBQ0wsT0FBTyxRQUFRLEtBQUssQ0FBQztjQUNuQixJQUFJO2NBQ0osTUFBTTthQUNQLENBQUMsQ0FBQztXQUNKO1NBQ0YsQ0FBQyxDQUFDO09BQ0o7S0FDRixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsaUJBQWlCLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7OztLQUc5RSxLQUFLLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7OztLQUd2QyxLQUFLO01BQ0osTUFBTSxNQUFNLFFBQVEsWUFBWSxFQUFFLENBQUM7TUFDbkMsR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO01BQ3JDLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztNQUMvQixPQUFPLEdBQUcsQ0FBQztLQUNaLENBQUMsQ0FBQyxDQUFDO0lBQ0osTUFBTSw2QkFBNkIsbUJBQW1CLGFBQWEsS0FBSyxLQUFLLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxlQUFlLEVBQUUsS0FBSyxZQUFZLEVBQUUsS0FBSyxhQUFhLEVBQUUsS0FBSyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7O0lBRXBNLE1BQU0sa0JBQWtCLHVCQUF1QjtNQUM3QyxJQUFJLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUM5QyxNQUFNLFNBQVMsSUFBSSxXQUFXLENBQUM7UUFDL0IsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLElBQUksV0FBVyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLGVBQWUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQ3RDO0tBQ0YsQ0FBQztJQUNGLE1BQU0sWUFBWSxtQkFBbUIsUUFBUSxJQUFJLEtBQUs7TUFDcEQsTUFBTSxjQUFjLEdBQUcsZUFBZSxXQUFXLENBQUM7TUFDbEQsTUFBTSxZQUFZLEdBQUcsYUFBYSxXQUFXLENBQUM7TUFDOUMsR0FBRyxlQUFlLEVBQUUsQ0FBQztNQUNyQixJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLGVBQWUsQ0FBQyxFQUFFO1FBQ3hDLElBQUksUUFBUSxDQUFDLEdBQUcsZUFBZSxDQUFDLElBQUksR0FBRyxlQUFlLEtBQUssT0FBTyxLQUFLLENBQUMsRUFBRTtVQUN4RSxHQUFHLE9BQU8sQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxRQUFRLENBQUMsR0FBRyxhQUFhLENBQUMsSUFBSSxHQUFHLGFBQWEsS0FBSyxPQUFPLEtBQUssQ0FBQyxFQUFFO1VBQ3BFLEdBQUcsT0FBTyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7U0FDOUI7UUFDRCxlQUFlLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUU7VUFDN0IsZUFBZSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDekM7T0FDRjtLQUNGLENBQUM7SUFDRixNQUFNLGlCQUFpQixpQkFBaUIsUUFBUSxLQUFLLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxHQUFHLGVBQWUsRUFBRSxNQUFNLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNwSCxNQUFNLDZCQUE2QixtQ0FBbUM7TUFDcEUsTUFBTSxrQkFBa0IsVUFBVSxzQkFBc0IsQ0FBQztRQUN2RCxNQUFNLFVBQVU7UUFDaEIsS0FBSztPQUNOLENBQUMsQ0FBQztNQUNILE9BQU87UUFDTCxHQUFHLFVBQVU7UUFDYixlQUFlLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsVUFBVSxjQUFjLENBQUM7UUFDakYsZ0JBQWdCLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsVUFBVSxlQUFlLENBQUM7T0FDckYsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLGdCQUFnQiw4QkFBOEI7TUFDbEQsTUFBTSxNQUFNLEdBQUcsVUFBVSxFQUFFLENBQUM7TUFDNUIsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ3ZCLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztNQUN6QixPQUFPLEdBQUcsU0FBUyxFQUFFLENBQUM7S0FDdkIsQ0FBQzs7SUFFRixNQUFNLHdCQUF3QixLQUFLLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sZUFBZSx5QkFBeUI7TUFDNUMsTUFBTSxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDakQsYUFBYSxLQUFLLENBQUMsUUFBUTtRQUN6QixNQUFNLE9BQU8sSUFBSSxVQUFVLENBQUM7UUFDNUIsU0FBUyxDQUFDLElBQUksRUFBRSxPQUFPLE1BQU0sT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTztVQUN2RCxNQUFNLE1BQU0sR0FBRyxVQUFVLEVBQUUsQ0FBQztVQUM1QixHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7VUFDdEIsR0FBRyxPQUFPLENBQUMsR0FBRyxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztVQUN0QyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztTQUN2QyxDQUFDLENBQUM7UUFDSCxNQUFNLE9BQU8sWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsTUFBTSxjQUFjLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxFQUFFO1VBQ3RDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqQztPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGlCQUFpQixtQkFBbUI7TUFDeEMsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLE1BQU0sVUFBVSxLQUFLLFFBQVEsQ0FBQztNQUM5QixNQUFNLE1BQU0sZ0JBQWdCLENBQUMsR0FBRyxRQUFRLEVBQUUsRUFBRSxLQUFLLE1BQU0sQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsQ0FBQztNQUNsRyxNQUFNLG9CQUFvQixxQkFBcUI7UUFDN0MsTUFBTSxZQUFZLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQVUsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO09BQ3pGLENBQUM7TUFDRixjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUztRQUN4QyxJQUFJLE9BQU8sS0FBSyxLQUFLLGNBQWMsRUFBRTtVQUNuQyxJQUFJLGlCQUFpQixDQUFDLE9BQU8sT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDLEVBQUU7WUFDdkQsTUFBTSxZQUFZLFNBQVMsQ0FBQyxNQUFNO2NBQ2hDLFlBQVksQ0FBQyxNQUFNLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7Y0FDekMsTUFBTSxVQUFVLE1BQU0sQ0FBQyxPQUFPLE9BQU8sQ0FBQyxDQUFDO2FBQ3hDLENBQUMsQ0FBQztXQUNKO1NBQ0YsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLGVBQWUsRUFBRTtVQUMzQyxNQUFNLFlBQVksU0FBUyxDQUFDLE1BQU07WUFDaEMsWUFBWSxDQUFDLE1BQU0sSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN6QyxNQUFNLFlBQVksQ0FBQyxPQUFPLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxNQUFNLENBQUMsQ0FBQztXQUN2RCxDQUFDLENBQUM7U0FDSjtPQUNGLENBQUMsQ0FBQztNQUNILE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQztJQUNGLE1BQU0saUJBQWlCLFlBQVksSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxDQUFDO0lBQzdGLE1BQU0sZ0JBQWdCLG9CQUFvQjtNQUN4QyxNQUFNLGlCQUFpQixjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDaEQsTUFBTSxTQUFTLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztNQUN2QyxPQUFPLE1BQU0sQ0FBQyxjQUFjLEVBQUUsV0FBVyxJQUFJLFFBQVEsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLFFBQVEsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQ3BILENBQUM7SUFDRixNQUFNLGlCQUFpQixrREFBa0Q7TUFDdkUsSUFBSSxFQUFFLENBQUM7TUFDUCxNQUFNLE1BQU0sTUFBTSxJQUFJLENBQUM7TUFDdkIsTUFBTSxrQkFBa0Isa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDbkQsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsRUFBRTtRQUNuQyxPQUFPLEVBQUUsQ0FBQztPQUNYO01BQ0QsTUFBTSxZQUFZLENBQUMsS0FBSyxLQUFLLFlBQVksTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7TUFDL0UsT0FBTyxhQUFhLENBQUMsVUFBVSxjQUFjLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXO1FBQ3ZFLElBQUksS0FBSyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sS0FBSyxPQUFPLE1BQU0sT0FBTyxFQUFFO1VBQ3pELE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxPQUFPLENBQUM7WUFDSixPQUFPO1lBQ1AsT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsaUJBQWlCLENBQUM7V0FDcEYsQ0FBQyxDQUFDO09BQ04sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDZCxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIscUJBQXFCO01BQzFDLElBQUksT0FBTyxPQUFPLEtBQUssQ0FBQyxFQUFFO1FBQ3hCLE9BQU87T0FDUjtNQUNELE1BQU0sV0FBVyxNQUFNLFVBQVUsWUFBWSxFQUFFLENBQUM7TUFDaEQsTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLGNBQWMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUN4RCxNQUFNLFVBQVUsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQzNDLENBQUM7O0lBRUYsTUFBTSxZQUFZLGFBQWEsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFO01BQ2hELGlCQUFpQixVQUFVO01BQzNCLEVBQUU7S0FDSCxDQUFDLENBQUM7SUFDSCxNQUFNLGtCQUFrQixpQkFBaUI7TUFDdkMsTUFBTSxNQUFNLEdBQUcsVUFBVSxFQUFFLENBQUM7TUFDNUIsR0FBRyxjQUFjLENBQUMsTUFBTSxNQUFNLENBQUMsQ0FBQztNQUNoQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO01BQzdCLE9BQU8sR0FBRyxDQUFDO0tBQ1osQ0FBQztJQUNGLE1BQU0sZUFBZSxrQ0FBa0M7TUFDckQsTUFBTSxNQUFNLGdCQUFnQixDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO01BQ2hHLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQztNQUNyQyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUM7TUFDakMsTUFBTSxVQUFVLEdBQUcsVUFBVSxLQUFLLENBQUMsR0FBRyxPQUFPLEdBQUcsT0FBTyxVQUFVLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztNQUNqRixNQUFNLFlBQVksR0FBRyxZQUFZLEtBQUssQ0FBQyxHQUFHLFNBQVMsR0FBRyxTQUFTLFVBQVUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDO01BQzNGLE1BQU0sa0JBQWtCLFNBQVMsV0FBVyxDQUFDO01BQzdDLE1BQU0sZ0JBQWdCLE9BQU8sV0FBVyxDQUFDO01BQ3pDLE9BQU87UUFDTCxRQUFRLFlBQVk7UUFDcEIsS0FBSyxhQUFhLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLFlBQVksR0FBRyxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDL0UsT0FBTyxlQUFlLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLFlBQVksR0FBRyxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUM7T0FDeEYsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLGVBQWUseUJBQXlCO01BQzVDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDOUQsZUFBZSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNqRSxDQUFDOztJQUVGLE1BQU0sdUJBQXVCLFdBQVcsT0FBTyxNQUFNLE9BQU8sS0FBSyxDQUFDLENBQUM7SUFDbkUsTUFBTSxpQkFBaUIsa0JBQWtCLHFCQUFxQjtNQUM1RCxNQUFNLE9BQU8sT0FBTyxLQUFLLENBQUM7TUFDMUIsTUFBTSxhQUFhLElBQUksVUFBVSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztNQUM3QyxNQUFNLGdCQUFnQixVQUFVLFlBQVksQ0FBQyxjQUFjLE9BQU8sQ0FBQyxjQUFjLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQy9GLE1BQU0sYUFBYSxVQUFVLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztNQUMxRCxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUNyQixPQUFPLFVBQVUsR0FBRyxjQUFjLE9BQU8sQ0FBQztPQUMzQyxNQUFNLElBQUksYUFBYSxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQy9CLE9BQU8sYUFBYSxHQUFHLENBQUMsQ0FBQztPQUMxQixNQUFNO1FBQ0wsT0FBTyxDQUFDLENBQUMsQ0FBQztPQUNYO0tBQ0YsQ0FBQztJQUNGLE1BQU0sMkJBQTJCLCtCQUErQjtNQUM5RCxNQUFNLGVBQWUsT0FBTyxNQUFNLENBQUM7TUFDbkMsTUFBTSxZQUFZLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxVQUFVLEVBQUUsSUFBSSxPQUFPLEVBQUUsY0FBYyxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQ3BHLE9BQU8sU0FBUyxLQUFLLENBQUMsUUFBUTtRQUM1QixJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDWCxNQUFNLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssWUFBWSxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDNUosTUFBTSxrQkFBa0IsaUJBQWlCLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksaUJBQWlCLEdBQUcsWUFBWSxPQUFPLENBQUM7UUFDM0csSUFBSSxlQUFlLEVBQUU7VUFDbkIsTUFBTSxNQUFNLEdBQUcsVUFBVSxFQUFFLENBQUM7VUFDNUIsR0FBRyxTQUFTLENBQUMsSUFBSSxVQUFVLEVBQUUsSUFBSSxPQUFPLEdBQUcsWUFBWSxPQUFPLENBQUMsQ0FBQztVQUNoRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLFVBQVUsRUFBRSxJQUFJLE9BQU8sQ0FBQyxDQUFDO1VBQ3hDLE9BQU8sUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDM0IsTUFBTTtVQUNMLE1BQU0sU0FBUyxJQUFJLE9BQU8sR0FBRyxZQUFZLE9BQU8sQ0FBQztVQUNqRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZO1lBQzdELE1BQU0sTUFBTSxHQUFHLFVBQVUsRUFBRSxDQUFDO1lBQzVCLEdBQUcsU0FBUyxDQUFDLFFBQVEsVUFBVSxFQUFFLFFBQVEsT0FBTyxDQUFDLENBQUM7WUFDbEQsR0FBRyxPQUFPLENBQUMsSUFBSSxVQUFVLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQztZQUN4QyxPQUFPLEdBQUcsQ0FBQztXQUNaLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxTQUFTLEVBQUUsS0FBSyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sd0JBQXdCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxSTtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLG1CQUFtQixvQ0FBb0MsYUFBYSxLQUFLLEtBQUs7TUFDbEYsSUFBSSxPQUFPLE1BQU0sT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUM3QyxNQUFNLE1BQU0sR0FBRyxVQUFVLEVBQUUsQ0FBQztRQUM1QixHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0IsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDM0I7TUFDRCxPQUFPLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUTtRQUNsRCxNQUFNLFFBQVEsd0JBQXdCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEUsT0FBTyxLQUFLLEtBQUssQ0FBQyxjQUFjO1VBQzlCLElBQUksRUFBRSxDQUFDO1VBQ1AsSUFBSSxVQUFVLEVBQUU7WUFDZCxJQUFJLFVBQVUsYUFBYSxLQUFLLElBQUksVUFBVSxJQUFJLFVBQVUsVUFBVSxLQUFLLElBQUksT0FBTyxFQUFFO2NBQ3RGLE9BQU8sUUFBUSxLQUFLLEVBQUUsQ0FBQzthQUN4QixNQUFNLElBQUksSUFBSSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLFVBQVUsYUFBYSxZQUFZLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sTUFBTSxVQUFVLFVBQVUsRUFBRTtjQUNwSixPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7YUFDeEI7V0FDRjtVQUNELE9BQU8sUUFBUSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDbEMsQ0FBQyxDQUFDO09BQ0osQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sY0FBYywrQ0FBK0M7TUFDakUsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLE1BQU0sT0FBTyxHQUFHLFFBQVEsRUFBRSxDQUFDO01BQzNCLE1BQU0sVUFBVSxPQUFPLFFBQVEsQ0FBQztNQUNoQyxNQUFNLFVBQVUsT0FBTyxTQUFTLFVBQVUsQ0FBQztNQUMzQyxNQUFNLFlBQVksT0FBTyxTQUFTLE9BQU8sQ0FBQztNQUMxQyxPQUFPLFFBQVEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxHQUFHLE9BQU8sUUFBUSxJQUFJLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVE7UUFDbkYsTUFBTSxhQUFhLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxVQUFVLEVBQUUsSUFBSSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3BILElBQUksb0JBQW9CLENBQUMsT0FBTyxDQUFDLEVBQUU7VUFDakMsT0FBTyxRQUFRLEtBQUssQ0FBQztZQUNuQixTQUFTLENBQUM7Z0JBQ04sT0FBTztnQkFDUCxVQUFVLFVBQVU7Z0JBQ3BCLFFBQVEsVUFBVTtlQUNuQixDQUFDO1lBQ0osVUFBVSxJQUFJO1dBQ2YsQ0FBQyxDQUFDO1NBQ0osTUFBTTtVQUNMLE1BQU0sYUFBYSxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sa0JBQWtCLEVBQUUsSUFBSSxVQUFVLEVBQUUsSUFBSSxPQUFPLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7VUFDN0gsTUFBTSxVQUFVLFVBQVUsTUFBTSxDQUFDO1lBQy9CLFNBQVMsRUFBRTtZQUNYLFVBQVUsSUFBSTtXQUNmLENBQUMsQ0FBQztVQUNILE1BQU0sTUFBTSxPQUFPLFNBQVMsQ0FBQztVQUM3QixNQUFNLFFBQVEsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLFVBQVUsRUFBRSxHQUFHLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1VBQ3BHLE9BQU8sS0FBSyxJQUFJLENBQUMsWUFBWTtZQUMzQixNQUFNLGVBQWUsMEJBQTBCLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUN4RixPQUFPO2NBQ0wsU0FBUyxPQUFPLFFBQVEsT0FBTyxDQUFDLENBQUM7a0JBQzdCLE9BQU87a0JBQ1AsVUFBVSxZQUFZO2tCQUN0QixRQUFRLFVBQVU7aUJBQ25CLENBQUMsQ0FBQztjQUNMLFVBQVUsS0FBSyxDQUFDLFFBQVEsZUFBZSxFQUFFLFFBQVEsWUFBWSxDQUFDO2FBQy9ELENBQUM7V0FDSCxDQUFDLENBQUM7U0FDSjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGtCQUFrQiw4REFBOEQ7TUFDcEYsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLE9BQU8sVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVztRQUM3RCxNQUFNLE9BQU8sYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7VUFDeEMsTUFBTSxVQUFVLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFO1lBQ2hDLFNBQVM7V0FDVjtVQUNELE1BQU0seUJBQXlCLFFBQVEsTUFBTSxFQUFFLENBQUM7VUFDaEQsc0JBQXNCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7VUFDcEMsTUFBTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO1lBQ3hDLE9BQU87WUFDUCxtQkFBbUIsc0JBQXNCO1lBQ3pDLFVBQVUsT0FBTztXQUNsQixFQUFFLGlCQUFpQixDQUFDLENBQUM7VUFDdEIsSUFBSSxNQUFNLE9BQU8sRUFBRSxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDakMsT0FBTyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztXQUN0RjtVQUNELElBQUksTUFBTSxPQUFPLEVBQUUsRUFBRTtZQUNuQixPQUFPLE1BQU0sQ0FBQztXQUNmO1NBQ0Y7UUFDRCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7T0FDeEIsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sZUFBZSxtQ0FBbUM7TUFDdEQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztNQUN0QyxJQUFJLE9BQU8sS0FBSyxLQUFLLGVBQWUsRUFBRTtRQUNwQyxNQUFNLENBQUMsT0FBTyxPQUFPLEVBQUUsVUFBVTtVQUMvQixNQUFNLFVBQVUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2hDLENBQUMsQ0FBQztPQUNKLE1BQU07UUFDTCxNQUFNLFlBQVksQ0FBQyxPQUFPLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxNQUFNLENBQUMsQ0FBQztPQUN2RDtLQUNGLENBQUM7SUFDRixNQUFNLDBCQUEwQixxQ0FBcUM7TUFDbkUsTUFBTSxjQUFjLGVBQWUsQ0FBQyxNQUFNLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztNQUN4RCxTQUFTLENBQUMsTUFBTSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQzNDLFlBQVksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQzVDLENBQUM7SUFDRixNQUFNLDBCQUEwQixxREFBcUQ7TUFDbkYsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDO01BQ3ZCLE1BQU0saUJBQWlCLGVBQWUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7TUFDdkQsTUFBTSxtQkFBbUIsZUFBZSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztNQUMzRCxTQUFTLENBQUMsR0FBRyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3pDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3ZDLE1BQU0sZ0JBQWdCO1FBQ3BCLFFBQVEsV0FBVyxPQUFPO1FBQzFCLE9BQU8sV0FBVyxJQUFJO1FBQ3RCLEtBQUssU0FBUyxNQUFNO09BQ3JCLENBQUM7TUFDRixNQUFNLGVBQWUsZUFBZSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztNQUN6RCxZQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztLQUM3QyxDQUFDO0lBQ0YsTUFBTSxhQUFhLGtCQUFrQjtNQUNuQyxNQUFNLGVBQWUsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7TUFDbkQsTUFBTSxrQkFBa0IsS0FBSyxDQUFDLE9BQU8sRUFBRSxnQkFBZ0I7UUFDckQsTUFBTSxZQUFZLFlBQVksQ0FBQyxHQUFHLEVBQUUsWUFBWSxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1FBQ3hGLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQztZQUNmLEdBQUcsS0FBSztZQUNSLFNBQVM7V0FDVixDQUFDLENBQUMsQ0FBQztPQUNQLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDUCxPQUFPLEtBQUssQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCO1FBQzVDLE1BQU0sTUFBTSxlQUFlLE9BQU8sR0FBRyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDcEQsTUFBTSxjQUFjLG9CQUFvQixDQUFDLEtBQUssUUFBUSxDQUFDLEdBQUcsS0FBSyxVQUFVLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxZQUFZLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQy9JLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQztZQUNmLEdBQUcsS0FBSztZQUNSLFdBQVc7V0FDWixDQUFDLENBQUMsQ0FBQztPQUNQLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDUixDQUFDO0lBQ0YsTUFBTSxlQUFlLFlBQVksSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZGLE1BQU0saUJBQWlCLHdDQUF3QztNQUM3RCxNQUFNLGlCQUFpQixNQUFNLENBQUMsT0FBTyxFQUFFLFNBQVMsTUFBTSxDQUFDLHlCQUF5QixFQUFFLGVBQWUsS0FBSyxRQUFRLE1BQU0sS0FBSyxXQUFXLFFBQVEsTUFBTSxJQUFJLEtBQUssUUFBUSxJQUFJLEtBQUssV0FBVyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDdE0sSUFBSSxPQUFPLE9BQU8sS0FBSyx5QkFBeUIsT0FBTyxFQUFFO1FBQ3ZELElBQUksY0FBYyxFQUFFO1VBQ2xCLE9BQU8sT0FBTyxDQUFDO1NBQ2hCLE1BQU07VUFDTCxPQUFPLHlCQUF5QixDQUFDO1NBQ2xDO09BQ0Y7TUFDRCxPQUFPLE9BQU8sT0FBTyxHQUFHLHlCQUF5QixPQUFPLEdBQUcsT0FBTyxHQUFHLHlCQUF5QixDQUFDO0tBQ2hHLENBQUM7SUFDRixNQUFNLGVBQWUsZ0VBQWdFO01BQ25GLE1BQU0sVUFBVSxlQUFlLENBQUMsTUFBTSxFQUFFLFVBQVUsZUFBZSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxVQUFVLE1BQU0sUUFBUSxDQUFDLENBQUM7TUFDcEosTUFBTSw0QkFBNEIsZUFBZSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsVUFBVSxlQUFlLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsVUFBVSxNQUFNLFFBQVEsQ0FBQyxDQUFDO01BQ3BMLE9BQU8sY0FBYyxDQUFDLE9BQU8sRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO0tBQzNELENBQUM7SUFDRixNQUFNLGVBQWUscUJBQXFCO01BQ3hDLElBQUksT0FBTyxPQUFPLEtBQUssQ0FBQyxFQUFFO1FBQ3hCLE9BQU87T0FDUjtNQUNELE1BQU0sTUFBTSxNQUFNLElBQUksQ0FBQztNQUN2QixNQUFNLFdBQVcsTUFBTSxVQUFVLFlBQVksRUFBRSxDQUFDO01BQ2hELE1BQU0scUJBQXFCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDcEQsTUFBTSxDQUFDLGtCQUFrQixFQUFFLFNBQVM7UUFDbEMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLEtBQUssWUFBWSxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUNsRSxNQUFNLFNBQVMsUUFBUSxJQUFJLEtBQUssS0FBSyxDQUFDO1FBQ3RDLElBQUksb0JBQW9CLENBQUMsS0FBSyxRQUFRLENBQUMsRUFBRTtVQUN2Qyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxRQUFRLEVBQUUsS0FBSyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDekUsTUFBTTtVQUNMLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxLQUFLLFFBQVEsRUFBRSxLQUFLLFlBQVksRUFBRSxLQUFLLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUM1RjtRQUNELFlBQVksQ0FBQyxHQUFHLEVBQUUsS0FBSyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0MsWUFBWSxDQUFDLEdBQUcsRUFBRSxLQUFLLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztPQUM5QyxDQUFDLENBQUM7TUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQzNDLENBQUM7O0lBRUYsTUFBTSxjQUFjLHdCQUF3QjtNQUMxQyxNQUFNLE1BQU0sTUFBTSxVQUFVLE9BQU8sRUFBRSxDQUFDO01BQ3RDLE9BQU8sY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVM7UUFDOUMsSUFBSSxFQUFFLENBQUM7UUFDUCxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUM7UUFDNUMsTUFBTSxvQkFBb0IsMEJBQTBCLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLEtBQUssS0FBSyxZQUFZLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdEksTUFBTSxnQkFBZ0IsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxlQUFlLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZHLE1BQU0sZUFBZSxjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RSxJQUFJLFlBQVksT0FBTyxHQUFHLENBQUMsSUFBSSxhQUFhLE9BQU8sR0FBRyxDQUFDLEVBQUU7VUFDdkQsTUFBTSxZQUFZLElBQUksRUFBRSxDQUFDO1VBQ3pCLE1BQU0sWUFBWSxNQUFNLENBQUMsTUFBTTtZQUM3QixNQUFNLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1dBQ3hDLEVBQUUsTUFBTTtZQUNQLE1BQU0sY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hDLFlBQVksQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDcEMsY0FBYyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztZQUNyQyxNQUFNLFFBQVEsTUFBTSxVQUFVLE9BQU8sRUFBRSxDQUFDO1lBQ3hDLE1BQU0sT0FBTyxVQUFVLENBQUMsS0FBSyxlQUFlLEVBQUUsS0FBSyxZQUFZLEVBQUUsTUFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDdkYsTUFBTSxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUN2QyxJQUFJLEtBQUssQ0FBQyxLQUFLO2NBQ2IsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDO2NBQ3pCLElBQUksSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7Z0JBQ2hELElBQUksV0FBVyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDakMsZUFBZSxDQUFDLE1BQU0sSUFBSSxFQUFFLElBQUksV0FBVyxFQUFFLEtBQUssQ0FBQyxLQUFLLE1BQU0sSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2VBQy9FO2FBQ0YsQ0FBQyxDQUFDO1dBQ0osQ0FBQyxDQUFDO1VBQ0gsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sS0FBSyxDQUFDO09BQ2QsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDakIsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLHdCQUF3QjtNQUM5QyxNQUFNLE1BQU0sTUFBTSxVQUFVLE9BQU8sRUFBRSxDQUFDO01BQ3RDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTO1FBQ3ZDLE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEQsTUFBTSxhQUFhLGFBQWEsQ0FBQyxNQUFNLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDaEYsTUFBTSxvQkFBb0IsMEJBQTBCLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNwRixNQUFNLGdCQUFnQixZQUFZLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLGVBQWUsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEcsSUFBSSxhQUFhLE9BQU8sR0FBRyxDQUFDLEVBQUU7VUFDNUIsTUFBTSxZQUFZLFNBQVMsQ0FBQyxNQUFNO1lBQ2hDLFlBQVksQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7V0FDckMsQ0FBQyxDQUFDO1NBQ0o7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsNkJBQTZCO01BQ2pELEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDckMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO1VBQzlCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7T0FDRjtNQUNELE9BQU8sS0FBSyxDQUFDO0tBQ2QsQ0FBQztJQUNGLE1BQU0sZUFBZSxrQkFBa0IsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsaUJBQWlCO01BQ2xGLE9BQU8sSUFBSSxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM3RCxDQUFDLENBQUM7SUFDSCxNQUFNLGdCQUFnQixrQkFBa0IsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsZ0JBQWdCO01BQ2xGLE9BQU8sR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUM7S0FDN0MsQ0FBQyxDQUFDOztJQUVILE1BQU0sVUFBVSxVQUFVO01BQ3hCLE1BQU0sWUFBWTtRQUNoQixHQUFHO1FBQ0gsR0FBRztRQUNILEdBQUc7UUFDSCxHQUFHO1FBQ0gsR0FBRztRQUNILEdBQUc7T0FDSixDQUFDO01BQ0YsTUFBTSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDdEIsTUFBTSxnQkFBZ0IsTUFBTSxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUNyRyxNQUFNLHFCQUFxQixNQUFNLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQy9ELE1BQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLFVBQVUsWUFBWSxFQUFFLEVBQUU7VUFDaEYsTUFBTSxhQUFhLGFBQWEsRUFBRSxDQUFDO1VBQ25DLE1BQU0sY0FBYyxVQUFVLGVBQWUsT0FBTyxHQUFHLENBQUMsSUFBSSxVQUFVLGNBQWMsT0FBTyxHQUFHLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1VBQ3hILElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUU7WUFDbEQsQ0FBQyxlQUFlLEVBQUUsQ0FBQztXQUNwQjtTQUNGO09BQ0YsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNULE1BQU0sc0JBQXNCLE1BQU07UUFDaEMsSUFBSSxNQUFNLFVBQVUsWUFBWSxFQUFFLEVBQUU7VUFDbEMsTUFBTSxhQUFhLGFBQWEsRUFBRSxDQUFDO1VBQ25DLE1BQU0sY0FBYyxVQUFVLGVBQWUsT0FBTyxHQUFHLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1VBQ2pGLElBQUksV0FBVyxFQUFFO1lBQ2YsZUFBZSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztXQUNyQztTQUNGO09BQ0YsQ0FBQztNQUNGLE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLO1FBQ3RCLElBQUksWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRTtVQUM3QixtQkFBbUIsRUFBRSxDQUFDO1NBQ3ZCO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxHQUFHLENBQUMsVUFBVSxFQUFFLEtBQUs7UUFDekIsSUFBSSxhQUFhLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFO1VBQy9CLEtBQUssaUJBQWlCLENBQUMsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUM7U0FDckQ7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0sVUFBVSxVQUFVO01BQ3hCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNqQixDQUFDOztJQUVGLE1BQU0sU0FBUyxVQUFVO01BQ3ZCLE1BQU0sT0FBTyxLQUFLLEtBQUssQ0FBQztNQUN4QixNQUFNLFlBQVksRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sSUFBSSxFQUFFLFlBQVksTUFBTSxVQUFVLEVBQUUsU0FBUyxNQUFNLE9BQU8sQ0FBQztNQUMzSCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUM7TUFDNUIsTUFBTSxVQUFVLE9BQU8sVUFBVSxFQUFFLENBQUM7TUFDcEMsTUFBTSxXQUFXLE9BQU8sV0FBVyxFQUFFLElBQUksT0FBTyxTQUFTLEVBQUUsQ0FBQztNQUM1RCxNQUFNLFFBQVEsR0FBRyxXQUFXLFNBQVMsRUFBRSxJQUFJLEdBQUcsV0FBVyxPQUFPLEVBQUUsQ0FBQztNQUNuRSxNQUFNLFFBQVEsR0FBRyxHQUFHLFFBQVEsRUFBRSxJQUFJLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQztNQUNqRCxNQUFNLHdCQUF3QixnQkFBZ0I7UUFDNUMsSUFBSTtVQUNGLE1BQU0sT0FBTyxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3hELENBQUMsV0FBVztTQUNaO09BQ0YsQ0FBQztNQUNGLE1BQU0scUJBQXFCLEtBQUs7UUFDOUIsT0FBTyxDQUFDLG1CQUFtQixFQUFFLENBQUM7T0FDL0IsQ0FBQztNQUNGLE1BQU0sMEJBQTBCLE1BQU07UUFDcEMsTUFBTSxlQUFlLE9BQU87VUFDMUIsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1VBQ2hDLE1BQU0sV0FBVyxHQUFHLGNBQWMsRUFBRSxDQUFDO1VBQ3JDLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1VBQzNCLE9BQU8sU0FBUyxXQUFXLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLE1BQU0sRUFBRSxDQUFDLENBQUM7U0FDakUsQ0FBQztRQUNGLE1BQU0sc0JBQXNCLE9BQU87VUFDakMsTUFBTSxZQUFZLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztVQUNwQyxNQUFNLFNBQVMsR0FBRyxVQUFVLEVBQUUsQ0FBQztVQUMvQixNQUFNLFdBQVcsQ0FBQyxNQUFNLFFBQVEsRUFBRSxDQUFDLENBQUM7VUFDcEMsTUFBTSxlQUFlLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztVQUMxQyxPQUFPLFNBQVMsS0FBSyxZQUFZLENBQUM7U0FDbkMsQ0FBQztRQUNGLE1BQU0sNEJBQTRCLE9BQU87VUFDdkMsTUFBTSxRQUFRLFlBQVksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQ3hDLE1BQU0saUJBQWlCLE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1VBQ25GLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsMEJBQTBCLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztTQUMvRSxDQUFDO1FBQ0YsTUFBTSxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUs7VUFDeEIsTUFBTSxVQUFVLENBQUMsUUFBUSxDQUFDO1VBQzFCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLEtBQUssTUFBTSxJQUFJLE9BQU8sS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLFVBQVUsV0FBVyxFQUFFLEVBQUU7WUFDNUcsTUFBTSxjQUFjLE1BQU0sVUFBVSxZQUFZLEVBQUUsQ0FBQztZQUNuRCxNQUFNLE9BQU8sTUFBTSxRQUFRLEVBQUUsQ0FBQztZQUM5QixJQUFJLFdBQVcsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7Y0FDMUUsT0FBTzthQUNSO1lBQ0QsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQyxFQUFFO2NBQ25FLE9BQU87YUFDUjtZQUNELENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbkIsTUFBTSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEIsSUFBSSxJQUFJLFdBQVcsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxFQUFFO2NBQ25ELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxJQUFJLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN4RCxNQUFNO2NBQ0wsTUFBTSxVQUFVLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzthQUM3QztZQUNELE1BQU0sWUFBWSxFQUFFLENBQUM7V0FDdEI7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxZQUFZLE1BQU07UUFDdEIsTUFBTSxVQUFVLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO09BQ25ELENBQUM7TUFDRixNQUFNLDhCQUE4QixNQUFNO1FBQ3hDLElBQUksQ0FBQyxNQUFNLE9BQU8sRUFBRTtVQUNsQixHQUFHLEtBQUssQ0FBQyxNQUFNLE9BQU8sRUFBRSxFQUFFLG1CQUFtQixFQUFFLEtBQUs7WUFDbEQsSUFBSSxHQUFHLENBQUM7WUFDUixJQUFJLENBQUMsT0FBTyxLQUFLLE1BQU0sT0FBTyxFQUFFLGdCQUFnQixFQUFFO2NBQ2hELE1BQU0sU0FBUyxPQUFPLEVBQUUsQ0FBQztjQUN6QixNQUFNLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztjQUN6QixJQUFJLENBQUMsS0FBSyxLQUFLLFdBQVcsRUFBRTtnQkFDMUIsSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxFQUFFO2tCQUMxQyxPQUFPO2lCQUNSO2dCQUNELFNBQVMsYUFBYSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7ZUFDOUMsTUFBTTtnQkFDTCxTQUFTLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztlQUN2QjthQUNGO1dBQ0YsQ0FBQyxDQUFDO1NBQ0o7T0FDRixDQUFDO01BQ0YsTUFBTSxzQkFBc0IsTUFBTTtRQUNoQyxNQUFNLEdBQUcsQ0FBQyxTQUFTLEVBQUUsS0FBSztVQUN4QixJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQ3JELElBQUksQ0FBQyxNQUFNLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2NBQ3ZELE9BQU87YUFDUjtZQUNELElBQUksU0FBUyxZQUFZLEVBQUUsSUFBSSxTQUFTLE9BQU8sRUFBRSxZQUFZLEtBQUssQ0FBQyxFQUFFO2NBQ25FLE1BQU0sT0FBTyxTQUFTLFFBQVEsRUFBRSxDQUFDO2NBQ2pDLE1BQU0sa0JBQWtCLElBQUksZ0JBQWdCLENBQUM7Y0FDN0MsSUFBSSxJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUU7Z0JBQzFCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQixDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUNuQixPQUFPO2VBQ1I7Y0FDRCxJQUFJLGVBQWUsSUFBSSxlQUFlLFNBQVMsSUFBSSxlQUFlLFNBQVMsWUFBWSxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUNsRyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDNUIsQ0FBQyxlQUFlLEVBQUUsQ0FBQztlQUNwQjthQUNGO1dBQ0Y7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSxZQUFZLE1BQU07UUFDdEIsSUFBSSxDQUFDLEtBQUssVUFBVSxlQUFlLEVBQUU7VUFDbkMsTUFBTSxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUs7WUFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxTQUFTLEtBQUssTUFBTSxFQUFFO2NBQzFELE1BQU0sT0FBTyxNQUFNLFFBQVEsRUFBRSxDQUFDO2NBQzlCLElBQUksS0FBSyxFQUFFLENBQUM7Y0FDWixLQUFLLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxNQUFNO2dCQUNuQyxJQUFJLE1BQU0sRUFBRSxDQUFDO2VBQ2QsQ0FBQyxDQUFDO2FBQ0o7V0FDRixDQUFDLENBQUM7U0FDSjtPQUNGLENBQUM7TUFDRixNQUFNLHdCQUF3QixNQUFNO1FBQ2xDLE1BQU0sd0JBQXdCLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9ELE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLO1VBQ3RCLE1BQU0sU0FBUyxDQUFDLE9BQU8sQ0FBQztVQUN4QixJQUFJLFlBQVksS0FBSyxDQUFDLE1BQU0sU0FBUyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsTUFBTSxXQUFXLENBQUMsRUFBRTtZQUMzRSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ25CLE1BQU0sVUFBVSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsTUFBTSxZQUFZLEVBQUUsQ0FBQztXQUN0QjtVQUNELElBQUksTUFBTSxTQUFTLEtBQUssR0FBRyxJQUFJLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxJQUFJLE1BQU0sV0FBVyxPQUFPLEtBQUssQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLE1BQU0sV0FBVyxDQUFDLEVBQUU7WUFDakosQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNuQixTQUFTLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztXQUMxQjtTQUNGLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLDhDQUE4QyxNQUFNO1FBQ3hELE1BQU0sNEJBQTRCLE1BQU07VUFDdEMsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLFNBQVMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1VBQ3ZFLE9BQU8sTUFBTTtZQUNYLE1BQU0sU0FBUyxTQUFTLFNBQVMsRUFBRSxDQUFDO1lBQ3BDLElBQUksTUFBTSxLQUFLLE1BQU0sUUFBUSxFQUFFLEVBQUU7Y0FDL0IsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztjQUNyQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVE7Z0JBQ3JCLE1BQU0saUJBQWlCLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztlQUMvQyxDQUFDLENBQUM7YUFDSjtXQUNGLENBQUM7U0FDSCxDQUFDO1FBQ0YsTUFBTSw0QkFBNEIsTUFBTTtVQUN0QyxPQUFPLENBQUMsU0FBUyxZQUFZLEVBQUUsSUFBSSxHQUFHLFVBQVUsQ0FBQyxTQUFTLFNBQVMsRUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsU0FBUyxPQUFPLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1NBQ3hJLENBQUM7UUFDRixNQUFNLEdBQUcsQ0FBQyxVQUFVLEVBQUUsS0FBSztVQUN6QixJQUFJLGVBQWUsQ0FBQztVQUNwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEVBQUUsQ0FBQyxJQUFJLHlCQUF5QixFQUFFLEVBQUU7WUFDbEcsa0JBQWtCLHlCQUF5QixFQUFFLENBQUM7WUFDOUMsTUFBTSxPQUFPLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM3QyxlQUFlLEVBQUUsQ0FBQztZQUNsQixDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ25CLE9BQU8sS0FBSyxDQUFDO1dBQ2QsTUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDO1dBQ2I7U0FDRixDQUFDLENBQUM7UUFDSCxHQUFHLEtBQUssQ0FBQyxNQUFNLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLO1VBQ3BDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSx5QkFBeUIsRUFBRSxFQUFFO1lBQ3pELE1BQU0sa0JBQWtCLHlCQUF5QixFQUFFLENBQUM7WUFDcEQsS0FBSyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsTUFBTTtjQUNuQyxlQUFlLEVBQUUsQ0FBQzthQUNuQixDQUFDLENBQUM7V0FDSjtTQUNGLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLDZCQUE2QixNQUFNO1FBQ3ZDLE1BQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLO1VBQ3hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUU7WUFDckQsSUFBSSxTQUFTLFlBQVksRUFBRSxJQUFJLFNBQVMsT0FBTyxFQUFFLFlBQVksS0FBSyxDQUFDLEVBQUU7Y0FDbkUsTUFBTSxrQkFBa0IsU0FBUyxRQUFRLEVBQUUsZ0JBQWdCLENBQUM7Y0FDNUQsSUFBSSxlQUFlLElBQUksZUFBZSxTQUFTLElBQUksZUFBZSxTQUFTLFlBQVksRUFBRSxLQUFLLE9BQU8sRUFBRTtnQkFDckcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxLQUFLLENBQUM7ZUFDZDthQUNGO1dBQ0Y7VUFDRCxPQUFPLElBQUksQ0FBQztTQUNiLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLDhCQUE4QixNQUFNO1FBQ3hDLE1BQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLO1VBQ3hCLElBQUksa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssRUFBRSxVQUFVLEVBQUU7WUFDdkQsT0FBTztXQUNSO1VBQ0QsSUFBSSxNQUFNLFNBQVMsT0FBTyxFQUFFLENBQUM7VUFDN0IsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDO1VBQ3JDLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQztVQUMvQixNQUFNLE9BQU8sR0FBRyxRQUFRLEVBQUUsQ0FBQztVQUMzQixJQUFJLFNBQVMsU0FBUyxDQUFDO1VBQ3ZCLElBQUksQ0FBQyxHQUFHLFVBQVUsSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ2xDLE9BQU87V0FDUjtVQUNELE9BQU8sTUFBTSxXQUFXLElBQUksTUFBTSxXQUFXLFdBQVcsS0FBSyxNQUFNLElBQUksTUFBTSxXQUFXLEtBQUssSUFBSSxFQUFFO1lBQ2pHLFNBQVMsTUFBTSxXQUFXLENBQUM7V0FDNUI7VUFDRCxJQUFJLE1BQU0sU0FBUyxLQUFLLFlBQVksRUFBRTtZQUNwQyxNQUFNLFVBQVUsT0FBTyxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDekQsTUFBTSxHQUFHLFVBQVUsRUFBRSxDQUFDO1lBQ3RCLEdBQUcsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzQixHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDekIsU0FBUyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7V0FDdkI7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSx5QkFBeUIsTUFBTTtRQUNuQyxNQUFNLFVBQVUsTUFBTTtVQUNwQixxQkFBcUIsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7VUFDN0MscUJBQXFCLENBQUMsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLENBQUM7VUFDekQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzlCLHFCQUFxQixDQUFDLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxDQUFDO1dBQ3REO1NBQ0YsQ0FBQztRQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUU7VUFDekIsTUFBTSxHQUFHLENBQUMsNkJBQTZCLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDbkQ7T0FDRixDQUFDO01BQ0YsTUFBTSxzQkFBc0IsTUFBTTtRQUNoQyxNQUFNLFdBQVcsTUFBTTtVQUNyQixJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMseUJBQXlCLENBQUMsRUFBRSxRQUFRO1lBQ2xELElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxhQUFhLElBQUksV0FBVyxDQUFDO1lBQ2pDLE1BQU0sT0FBTyxHQUFHLFFBQVEsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxJQUFJLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxVQUFVLFVBQVUsTUFBTSxJQUFJLEVBQUU7Y0FDM0YsT0FBTyxVQUFVLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDN0MsSUFBSSxDQUFDLENBQUMsS0FBSyxVQUFVLFdBQVcsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsVUFBVSxNQUFNLFVBQVUsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFO2tCQUMxSCxPQUFPO2lCQUNSO2dCQUNELGFBQWEsVUFBVSxXQUFXLENBQUM7ZUFDcEM7Y0FDRCxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDcEQ7V0FDRixDQUFDLENBQUM7U0FDSixDQUFDO1FBQ0YsTUFBTSxHQUFHLENBQUMsd0JBQXdCLEVBQUUsS0FBSztVQUN2QyxJQUFJLENBQUMsS0FBSyxLQUFLLFlBQVksSUFBSSxDQUFDLFFBQVEsS0FBSyxlQUFlLEVBQUU7WUFDNUQsUUFBUSxFQUFFLENBQUM7V0FDWjtTQUNGLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLHNCQUFzQixNQUFNO1FBQ2hDLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNO1VBQ3RCLHFCQUFxQixDQUFDLDJCQUEyQixFQUFFLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDaEYsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sdUJBQXVCLFVBQVU7UUFDckMsTUFBTSxPQUFPLE1BQU0sUUFBUSxFQUFFLENBQUM7UUFDOUIsTUFBTSxNQUFNLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQztRQUN0QyxPQUFPLEdBQUcsZUFBZSxLQUFLLEdBQUcsYUFBYSxJQUFJLEdBQUcsZUFBZSxLQUFLLElBQUksSUFBSSxHQUFHLFlBQVksS0FBSyxDQUFDLElBQUksR0FBRyxVQUFVLEtBQUssSUFBSSxXQUFXLE9BQU8sQ0FBQztPQUNwSixDQUFDO01BQ0YsTUFBTSxxQkFBcUIsTUFBTTtRQUMvQixNQUFNLEdBQUcsQ0FBQyx1QkFBdUIsRUFBRSxLQUFLO1VBQ3RDLElBQUksQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDM0QsU0FBUyxVQUFVLEVBQUUsQ0FBQztXQUN2QjtTQUNGLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDVixDQUFDO01BQ0YsTUFBTSxzQkFBc0IsTUFBTTtRQUNoQyxNQUFNLGNBQWMsS0FBSyxDQUFDLG1CQUFtQixHQUFHLGlDQUFpQyxHQUFHLGlCQUFpQixHQUFHLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxDQUFDO09BQ2xJLENBQUM7TUFDRixNQUFNLHdCQUF3QixNQUFNO1FBQ2xDLElBQUksQ0FBQyxNQUFNLE9BQU8sRUFBRTtVQUNsQixNQUFNLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTTtZQUN6QixJQUFJLFFBQVEsY0FBYyxLQUFLLFFBQVEsS0FBSyxFQUFFO2NBQzVDLE1BQU0sT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO2FBQ3pCO1dBQ0YsQ0FBQyxDQUFDO1NBQ0o7T0FDRixDQUFDO01BQ0YsTUFBTSxhQUFhLE1BQU07UUFDdkIsSUFBSSxDQUFDLE1BQU0sT0FBTyxFQUFFO1VBQ2xCLE1BQU0sY0FBYyxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztVQUN0RCxNQUFNLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSztZQUN0QixJQUFJLEdBQUcsQ0FBQztZQUNSLElBQUksQ0FBQyxPQUFPLFNBQVMsS0FBSyxNQUFNLEVBQUU7Y0FDaEMsTUFBTSxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7Y0FDaEMsTUFBTSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7Y0FDekIsTUFBTSxVQUFVLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztjQUM3QixNQUFNLFVBQVUsVUFBVSxFQUFFLENBQUM7Y0FDN0IsTUFBTSxZQUFZLEVBQUUsQ0FBQzthQUN0QjtXQUNGLENBQUMsQ0FBQztTQUNKO09BQ0YsQ0FBQztNQUNGLE1BQU0sMEJBQTBCLE1BQU07UUFDcEMsSUFBSSxLQUFLLEVBQUU7VUFDVCxNQUFNLEdBQUcsQ0FBQyxTQUFTLEVBQUUsS0FBSztZQUN4QixJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEtBQUssQ0FBQyxRQUFRLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2NBQ2pGLENBQUMsZUFBZSxFQUFFLENBQUM7Y0FDbkIsTUFBTSxZQUFZLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQztjQUM1QyxTQUFTLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEtBQUssRUFBRSxHQUFHLFVBQVUsR0FBRyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7YUFDckY7V0FDRixDQUFDLENBQUM7U0FDSjtPQUNGLENBQUM7TUFDRixNQUFNLG9CQUFvQixNQUFNO1FBQzlCLE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLO1VBQ3RCLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQztVQUNuQixHQUFHO1lBQ0QsSUFBSSxHQUFHLFFBQVEsS0FBSyxHQUFHLEVBQUU7Y0FDdkIsQ0FBQyxlQUFlLEVBQUUsQ0FBQztjQUNuQixPQUFPO2FBQ1I7V0FDRixRQUFRLE1BQU0sR0FBRyxXQUFXLEVBQUU7U0FDaEMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxjQUFjLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO09BQzlFLENBQUM7TUFDRixNQUFNLDhCQUE4QixNQUFNO1FBQ3hDLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNO1VBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSztZQUMvQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1dBQ3BCLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLDRCQUE0QixNQUFNO1FBQ3RDLE1BQU0sY0FBYyxDQUFDLElBQUksRUFBRSxTQUFTO1VBQ2xDLElBQUksSUFBSSxLQUFLLE9BQU8sQ0FBQztVQUNyQixPQUFPLENBQUMsRUFBRSxFQUFFO1lBQ1YsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSywyQkFBMkIsRUFBRTtjQUMxRCxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ25CO1dBQ0Y7U0FDRixDQUFDLENBQUM7T0FDSixDQUFDO01BQ0YsTUFBTSx5QkFBeUIsSUFBSSxDQUFDO01BQ3BDLE1BQU0sV0FBVyxNQUFNO1FBQ3JCLElBQUksQ0FBQyxPQUFPLElBQUksTUFBTSxRQUFRLEVBQUU7VUFDOUIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE1BQU0sTUFBTSxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUM7UUFDdEMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsV0FBVyxJQUFJLEdBQUcsV0FBVyxLQUFLLENBQUMsQ0FBQztPQUN4RCxDQUFDO01BQ0YsTUFBTSxXQUFXLE1BQU07UUFDckIsSUFBSSxRQUFRLEVBQUU7VUFDWiwyQkFBMkIsRUFBRSxDQUFDO1VBQzlCLHFCQUFxQixFQUFFLENBQUM7VUFDeEIsMkJBQTJCLEVBQUUsQ0FBQztVQUM5QixTQUFTLEVBQUUsQ0FBQztVQUNaLElBQUksS0FBSyxFQUFFO1lBQ1QscUJBQXFCLEVBQUUsQ0FBQztZQUN4QixVQUFVLEVBQUUsQ0FBQztZQUNiLGlCQUFpQixFQUFFLENBQUM7V0FDckI7U0FDRjtRQUNELElBQUksT0FBTyxFQUFFO1VBQ1gsU0FBUyxFQUFFLENBQUM7VUFDWixzQkFBc0IsRUFBRSxDQUFDO1VBQ3pCLG1CQUFtQixFQUFFLENBQUM7VUFDdEIsdUJBQXVCLEVBQUUsQ0FBQztTQUMzQjtPQUNGLENBQUM7TUFDRixNQUFNLG1CQUFtQixNQUFNO1FBQzdCLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTO1VBQ3pCLElBQUksRUFBRSxDQUFDO1VBQ1AsTUFBTSxPQUFPLENBQUMsS0FBSyxLQUFLLGFBQWEsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1VBQ3BHLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLGNBQWMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9DLE1BQU0sU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLE1BQU0sVUFBVSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1dBQ3BFO1NBQ0YsQ0FBQyxDQUFDO09BQ0osQ0FBQztNQUNGLE1BQU0sUUFBUSxNQUFNO1FBQ2xCLDJCQUEyQixFQUFFLENBQUM7UUFDOUIsdUJBQXVCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsR0FBRyxhQUFhLEVBQUU7VUFDckIsa0JBQWtCLEVBQUUsQ0FBQztTQUN0QjtRQUNELElBQUksUUFBUSxFQUFFO1VBQ1osMkJBQTJCLEVBQUUsQ0FBQztVQUM5QixxQkFBcUIsRUFBRSxDQUFDO1VBQ3hCLG1CQUFtQixFQUFFLENBQUM7VUFDdEIsMkJBQTJCLEVBQUUsQ0FBQztVQUM5QiwwQkFBMEIsRUFBRSxDQUFDO1VBQzdCLHlCQUF5QixFQUFFLENBQUM7VUFDNUIsSUFBSSxLQUFLLEVBQUU7WUFDVCxxQkFBcUIsRUFBRSxDQUFDO1lBQ3hCLFVBQVUsRUFBRSxDQUFDO1lBQ2IsaUJBQWlCLEVBQUUsQ0FBQztXQUNyQixNQUFNO1lBQ0wsU0FBUyxFQUFFLENBQUM7V0FDYjtTQUNGO1FBQ0QsSUFBSSxPQUFPLEVBQUU7VUFDWCxtQkFBbUIsRUFBRSxDQUFDO1VBQ3RCLFNBQVMsRUFBRSxDQUFDO1VBQ1osMkNBQTJDLEVBQUUsQ0FBQztVQUM5QyxzQkFBc0IsRUFBRSxDQUFDO1VBQ3pCLG1CQUFtQixFQUFFLENBQUM7VUFDdEIsbUJBQW1CLEVBQUUsQ0FBQztVQUN0Qix1QkFBdUIsRUFBRSxDQUFDO1VBQzFCLDBCQUEwQixFQUFFLENBQUM7VUFDN0IsZ0JBQWdCLEVBQUUsQ0FBQztTQUNwQjtPQUNGLENBQUM7TUFDRixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNqQixRQUFRLEVBQUUsQ0FBQztPQUNaLE1BQU07UUFDTCxLQUFLLEVBQUUsQ0FBQztPQUNUO01BQ0QsT0FBTztRQUNMLHNCQUFzQjtRQUN0QixRQUFRO09BQ1QsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxRQUFRLFFBQVEsSUFBSSxDQUFDO0lBQzNCLE1BQU0sY0FBYyxrQkFBa0I7TUFDcEMsTUFBTSxPQUFPLFlBQVksUUFBUSxDQUFDLE1BQU0sUUFBUSxFQUFFLENBQUMsQ0FBQztNQUNwRCxNQUFNLFlBQVksaUJBQWlCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDdkQsTUFBTSxRQUFRLFlBQVksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQzVDLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO01BQ2pDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsWUFBWSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUM3QyxRQUFRLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQzNCLE1BQU0sR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNO1FBQ3hCLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztPQUNqQixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxjQUFjLFVBQVUsTUFBTSxPQUFPLEdBQUcsTUFBTSxXQUFXLEVBQUUsU0FBUyxZQUFZLEVBQUUsR0FBRyxTQUFTLENBQUM7SUFDckcsTUFBTSxrQkFBa0IsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0lBQzVFLE1BQU0sbUJBQW1CLFVBQVU7TUFDakMsTUFBTSxZQUFZLE1BQU0sUUFBUSxJQUFJLENBQUM7TUFDckMsTUFBTSxZQUFZLE1BQU0sYUFBYSxVQUFVLENBQUM7TUFDaEQsT0FBTyxlQUFlLENBQUM7UUFDckIsNEJBQTRCLFNBQVMsQ0FBQyw0QkFBNEIsQ0FBQztRQUNuRSxzQkFBc0IsU0FBUyxDQUFDLHNCQUFzQixDQUFDO1FBQ3ZELHFCQUFxQixTQUFTLENBQUMscUJBQXFCLENBQUM7UUFDckQsNEJBQTRCLFNBQVMsQ0FBQyw0QkFBNEIsQ0FBQztRQUNuRSxtQkFBbUIsU0FBUyxDQUFDLG1CQUFtQixDQUFDO1FBQ2pELDBCQUEwQixTQUFTLENBQUMsMEJBQTBCLENBQUM7UUFDL0Qsd0JBQXdCLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQztRQUMzRCxtQkFBbUIsU0FBUyxDQUFDLG1CQUFtQixDQUFDO1FBQ2pELHlCQUF5QixTQUFTLENBQUMseUJBQXlCLENBQUM7UUFDN0QsbUJBQW1CLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQztRQUNqRCx5QkFBeUIsU0FBUyxDQUFDLHlCQUF5QixDQUFDO1FBQzdELGdCQUFnQixTQUFTLENBQUMsZ0JBQWdCLENBQUM7UUFDM0MsZUFBZSxTQUFTLENBQUMsZUFBZSxDQUFDO1FBQ3pDLFdBQVcsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUM5QixVQUFVLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQztRQUN2QyxVQUFVLElBQUk7UUFDZCxZQUFZLFNBQVM7UUFDckIsVUFBVSxNQUFNLE9BQU8sRUFBRTtPQUMxQixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxtQkFBbUIsVUFBVTtNQUNqQyxNQUFNLFlBQVksTUFBTSxRQUFRLElBQUksQ0FBQztNQUNyQyxPQUFPLGVBQWUsQ0FBQztRQUNyQixpQkFBaUIsU0FBUyxDQUFDLGlCQUFpQixDQUFDO1FBQzdDLHlCQUF5QixTQUFTLENBQUMseUJBQXlCLENBQUM7UUFDN0Qsa0JBQWtCLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQztRQUMvQyxnQkFBZ0IsU0FBUyxDQUFDLGdCQUFnQixDQUFDO1FBQzNDLFFBQVEsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUMzQixnQkFBZ0IsU0FBUyxDQUFDLGdCQUFnQixDQUFDO1FBQzNDLGVBQWUsU0FBUyxDQUFDLGVBQWUsQ0FBQztRQUN6QyxnQkFBZ0IsU0FBUyxDQUFDLGdCQUFnQixDQUFDO1FBQzNDLGNBQWMsU0FBUyxDQUFDLGNBQWMsQ0FBQztRQUN2QyxhQUFhLFNBQVMsQ0FBQyxhQUFhLENBQUM7UUFDckMsa0NBQWtDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQztPQUNsRSxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsVUFBVTtNQUNyQyxNQUFNLFlBQVksTUFBTSxRQUFRLElBQUksQ0FBQztNQUNyQyxPQUFPO1FBQ0wsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7UUFDM0IsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7UUFDM0IsR0FBRyxlQUFlLENBQUM7VUFDakIscUJBQXFCLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQztVQUNyRCxtQkFBbUIsU0FBUyxDQUFDLG1CQUFtQixDQUFDO1VBQ2pELGVBQWUsU0FBUyxDQUFDLGVBQWUsQ0FBQztVQUN6QyxxQkFBcUIsU0FBUyxDQUFDLHFCQUFxQixDQUFDO1VBQ3JELGdCQUFnQixTQUFTLENBQUMsZ0JBQWdCLENBQUM7VUFDM0MsVUFBVSxTQUFTLENBQUMsVUFBVSxDQUFDO1VBQy9CLGlCQUFpQixTQUFTLENBQUMsaUJBQWlCLENBQUM7VUFDN0MsUUFBUSxTQUFTLENBQUMsUUFBUSxDQUFDO1VBQzNCLGNBQWMsU0FBUyxDQUFDLGNBQWMsQ0FBQztVQUN2QyxlQUFlLFNBQVMsQ0FBQyxlQUFlLENBQUM7U0FDMUMsQ0FBQztPQUNILENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxlQUFlLFVBQVU7TUFDN0IsTUFBTSxTQUFTLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLE9BQU8sQ0FBQyxDQUFDO01BQ2xFLE1BQU0sbUJBQW1CLENBQUMseUJBQXlCLEVBQUUsaUJBQWlCO1FBQ3BFLE1BQU0sTUFBTSxNQUFNLElBQUksQ0FBQztRQUN2QixNQUFNLGVBQWUsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QyxJQUFJLElBQUksS0FBSyxPQUFPLENBQUM7UUFDckIsT0FBTyxDQUFDLEVBQUUsRUFBRTtVQUNWLE1BQU0sT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDdEIsSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQzVCLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDckMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2NBQ2hFLFNBQVM7YUFDVjtZQUNELElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRTtjQUNwQixRQUFRLEdBQUcsZUFBZSxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLENBQUM7Y0FDN0QsSUFBSSxDQUFDLEtBQUssT0FBTyxFQUFFO2dCQUNqQixRQUFRLElBQUksQ0FBQztlQUNkO2NBQ0QsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO2NBQy9CLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN4QixNQUFNLElBQUksSUFBSSxLQUFLLFVBQVUsRUFBRTtjQUM5QixJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7Y0FDL0IsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ3ZCLE1BQU07Y0FDTCxJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDcEU7V0FDRjtTQUNGO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxjQUFjLENBQUMsUUFBUSxFQUFFLFNBQVM7UUFDdEMsSUFBSSxJQUFJLEtBQUssT0FBTyxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxFQUFFLEVBQUU7VUFDVixNQUFNLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3RCLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUM7VUFDNUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDOUIsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQztXQUNsQztTQUNGO09BQ0YsQ0FBQyxDQUFDO01BQ0gsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUMvQixNQUFNLGNBQWMsQ0FBQyxRQUFRLEVBQUUsU0FBUztVQUN0QyxJQUFJLEVBQUUsQ0FBQztVQUNQLElBQUksSUFBSSxLQUFLLE9BQU8sQ0FBQztVQUNyQixPQUFPLENBQUMsRUFBRSxFQUFFO1lBQ1YsTUFBTSxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDZCxJQUFJLEtBQUssR0FBRyxVQUFVLENBQUM7WUFDdkIsSUFBSSxNQUFNLEdBQUcsU0FBUyxHQUFHLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztXQUMxRztTQUNGLENBQUMsQ0FBQztPQUNKO01BQ0QsTUFBTSxjQUFjLENBQUMseUJBQXlCLEVBQUUsU0FBUztRQUN2RCxJQUFJLElBQUksS0FBSyxPQUFPLENBQUM7UUFDckIsTUFBTSxtQkFBbUIsTUFBTSxPQUFPLG9CQUFvQixFQUFFLENBQUM7UUFDN0QsT0FBTyxDQUFDLEVBQUUsRUFBRTtVQUNWLE1BQU0sT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDdEIsSUFBSSxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFO1lBQ3BFLElBQUksT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ25DO1NBQ0Y7T0FDRixDQUFDLENBQUM7TUFDSCxPQUFPLE1BQU0sQ0FBQztLQUNmLENBQUM7SUFDRixNQUFNLFlBQVksVUFBVTtNQUMxQixNQUFNLFlBQVksWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3ZDLElBQUksU0FBUyxFQUFFO1FBQ2IsS0FBSyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsTUFBTTtVQUNuQyxJQUFJLFdBQVcsQ0FBQztVQUNoQixJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUU7WUFDdEIsY0FBYyxNQUFNLENBQUM7V0FDdEIsTUFBTTtZQUNMLGNBQWMsTUFBTSxjQUFjLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztXQUNuRDtVQUNELElBQUksV0FBVyxJQUFJLENBQUMsV0FBVyxVQUFVLEVBQUU7WUFDekMsV0FBVyxNQUFNLEVBQUUsQ0FBQztZQUNwQixXQUFXLFVBQVUsZUFBZSxFQUFFLENBQUM7V0FDeEM7U0FDRixFQUFFLEdBQUcsQ0FBQyxDQUFDO09BQ1Q7S0FDRixDQUFDO0lBQ0YsTUFBTSxvQ0FBb0MsVUFBVTtNQUNsRCxNQUFNLE9BQU8sTUFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDO01BQ2xDLElBQUksQ0FBQyxNQUFNLE9BQU8sS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLFVBQVUsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFO1FBQ3pGLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87VUFDaEMsTUFBTSxPQUFPLEdBQUcsUUFBUSxFQUFFLENBQUM7VUFDM0IsTUFBTSxXQUFXLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7VUFDMUUsTUFBTSxVQUFVLE9BQU8sQ0FBQyxRQUFRLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDN0MsQ0FBQyxDQUFDO09BQ0o7S0FDRixDQUFDO0lBQ0YsTUFBTSxhQUFhLFVBQVU7TUFDM0IsTUFBTSwwQkFBMEIsRUFBRSxDQUFDO01BQ25DLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQztNQUMxQixRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDakIsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDbkIsaUNBQWlDLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDMUMsTUFBTSxZQUFZLENBQUMsRUFBRSxTQUFTLElBQUksRUFBRSxDQUFDLENBQUM7TUFDdEMsTUFBTSx1QkFBdUIsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDN0QsSUFBSSxVQUFVLENBQUMsb0JBQW9CLENBQUMsRUFBRTtRQUNwQyxvQkFBb0IsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztPQUMzQztNQUNELFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNuQixDQUFDO0lBQ0YsTUFBTSx3QkFBd0IsVUFBVSxNQUFNLE9BQU8sR0FBRyxNQUFNLEdBQUcsaUJBQWlCLEdBQUcsTUFBTSxJQUFJLGlCQUFpQixDQUFDO0lBQ2pILE1BQU0sZ0NBQWdDLDhCQUE4QjtNQUNsRSxNQUFNLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDOUQsSUFBSSxNQUFNLE9BQU8sRUFBRTtRQUNqQixPQUFPLFFBQVEsQ0FBQztPQUNqQixNQUFNO1FBQ0wsT0FBTyxRQUFRLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxpQkFBaUIsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUMzRTtLQUNGLENBQUM7SUFDRixNQUFNLGlCQUFpQixVQUFVO01BQy9CLE1BQU0sbUJBQW1CLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3ZELE1BQU0sVUFBVSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDbkMsTUFBTSxNQUFNLE1BQU0sV0FBVyxDQUFDO01BQzlCLE1BQU0sWUFBWSxNQUFNO1FBQ3RCLGdCQUFnQixVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLE1BQU0sT0FBTyxFQUFFO1VBQ2xCLE1BQU0sR0FBRyxpQkFBaUIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQy9DO09BQ0YsQ0FBQztNQUNGLE1BQU0sU0FBUyxNQUFNO1FBQ25CLElBQUksTUFBTSxRQUFRLEVBQUU7VUFDbEIsU0FBUyxFQUFFLENBQUM7U0FDYixNQUFNO1VBQ0wsTUFBTSxHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ2hDO09BQ0YsQ0FBQztNQUNGLElBQUksTUFBTSxjQUFjLE9BQU8sR0FBRyxDQUFDLEVBQUU7UUFDbkMsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3hCLEtBQUssS0FBSyxDQUFDLE1BQU0sY0FBYyxFQUFFLFNBQVM7VUFDeEMsa0JBQWtCLEtBQUssR0FBRyxNQUFNLENBQUM7U0FDbEMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxJQUFJLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztPQUNyQztNQUNELE1BQU0saUJBQWlCLE9BQU8sSUFBSSxDQUFDLDZCQUE2QixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDbkgsTUFBTSxlQUFlLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUM3QyxJQUFJLFlBQVksRUFBRTtRQUNoQixXQUFXLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO09BQ25DO01BQ0QsT0FBTyxjQUFjLENBQUM7S0FDdkIsQ0FBQztJQUNGLE1BQU0sVUFBVSxVQUFVO01BQ3hCLE1BQU0sTUFBTSxNQUFNLE9BQU8sRUFBRSxFQUFFLE9BQU8sTUFBTSxRQUFRLEVBQUUsQ0FBQztNQUNyRCxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDcEIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3BDLEdBQUcsS0FBSyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQzVCLEtBQUssVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7T0FDOUM7TUFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDL0IsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3ZCLE1BQU0saUJBQWlCLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ2pELElBQUksY0FBYyxLQUFLLFNBQVMsRUFBRTtRQUNoQyxJQUFJLElBQUksR0FBRyxjQUFjLENBQUM7T0FDM0I7TUFDRCxNQUFNLFVBQVUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ25DLElBQUksT0FBTyxFQUFFO1FBQ1gsTUFBTSxHQUFHLENBQUMsa0JBQWtCLEVBQUUsS0FBSztVQUNqQyxLQUFLLEtBQUssQ0FBQyxPQUFPLEVBQUUsV0FBVztZQUM3QixDQUFDLFFBQVEsR0FBRyxDQUFDLFFBQVEsUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPO2NBQzVDLE9BQU8sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQzthQUNuRCxDQUFDLENBQUM7V0FDSixDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7T0FDSjtNQUNELE1BQU0sR0FBRyxDQUFDLFlBQVksRUFBRSxNQUFNO1FBQzVCLE1BQU0sVUFBVSxDQUFDLE1BQU0sUUFBUSxFQUFFLENBQUMsQ0FBQztPQUNwQyxDQUFDLENBQUM7TUFDSCxNQUFNLEdBQUcsQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLO1FBQ2hELE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBSyxLQUFLLGtCQUFrQixDQUFDO09BQ2xELENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLHFCQUFxQixVQUFVO01BQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDbEIsTUFBTSxLQUFLLENBQUM7VUFDVixTQUFTLElBQUk7VUFDYixRQUFRLE1BQU07U0FDZixDQUFDLENBQUM7T0FDSjtNQUNELE1BQU0sYUFBYSxHQUFHLE1BQU0sV0FBVyxDQUFDLEVBQUUsUUFBUSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzVELENBQUM7SUFDRixNQUFNLCtCQUErQixVQUFVO01BQzdDLElBQUksTUFBTSxRQUFRLEtBQUssSUFBSSxFQUFFO1FBQzNCLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUNwQjtLQUNGLENBQUM7SUFDRixNQUFNLGdCQUFnQixVQUFVO01BQzlCLElBQUksV0FBVyxLQUFLLENBQUM7TUFDckIsTUFBTSxrQkFBa0IsVUFBVSxDQUFDLE1BQU07UUFDdkMsSUFBSSxDQUFDLFFBQVEsRUFBRTtVQUNiLE1BQU0saUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDL0I7T0FDRixFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQ1IsT0FBTyxNQUFNO1FBQ1gsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzlCLFdBQVcsSUFBSSxDQUFDO1FBQ2hCLE1BQU0saUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7T0FDaEMsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLG9CQUFvQixVQUFVO01BQ2xDLE1BQU0sWUFBWSxNQUFNLFdBQVcsRUFBRSxDQUFDO01BQ3RDLElBQUksTUFBTSxNQUFNLE9BQU8sRUFBRSxDQUFDO01BQzFCLElBQUksTUFBTSxPQUFPLEVBQUU7UUFDakIsS0FBSyxTQUFTLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDOUMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLFFBQVEsQ0FBQztRQUN4QyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUM7UUFDOUIsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDO1FBQy9CLE1BQU0scUJBQXFCLEdBQUcsU0FBUyxDQUFDO09BQ3pDO01BQ0QsTUFBTSxPQUFPLE1BQU0sUUFBUSxFQUFFLENBQUM7TUFDOUIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO01BQ3JCLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUN2QyxNQUFNLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNqRCxJQUFJLENBQUMsTUFBTSxTQUFTLElBQUksTUFBTSxnQkFBZ0IsRUFBRSxFQUFFO1FBQ2hELElBQUksTUFBTSxPQUFPLElBQUksS0FBSyxTQUFTLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxRQUFRLEVBQUU7VUFDeEUsSUFBSSxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUM7U0FDbEM7UUFDRCxJQUFJLGdCQUFnQixHQUFHLE1BQU0sQ0FBQztPQUMvQjtNQUNELElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztNQUN0QixNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDM0MsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7TUFDakQsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUN6QixhQUFhLElBQUk7UUFDakIsZUFBZSxNQUFNLFdBQVc7UUFDaEMscUJBQXFCLE1BQU07UUFDM0IsZUFBZSxJQUFJO1FBQ25CLGNBQWMsTUFBTSxPQUFPLEdBQUcsTUFBTSxRQUFRLEVBQUUsR0FBRyxJQUFJO1FBQ3JELFNBQVMsTUFBTSxPQUFPO1FBQ3RCLFFBQVEsTUFBTSxPQUFPO1FBQ3JCLGdCQUFnQix1QkFBdUIsQ0FBQyxNQUFNLENBQUM7UUFDL0MsZ0JBQWdCLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztRQUN6QyxhQUFhLEtBQUs7VUFDaEIsTUFBTSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2pDO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3JDLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztNQUN4RSxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsTUFBTSxJQUFJLEVBQUUsTUFBTSxPQUFPLEVBQUUsRUFBRSxNQUFNLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztNQUMzRixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDckMsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3JDLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUN6QyxNQUFNLHNCQUFzQixHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3RELE1BQU0sb0JBQW9CLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDeEQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ2hCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNoQixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNsQixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQ2pCO01BQ0QsTUFBTSxRQUFRLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUM5QixPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQ3ZCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNoQixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDaEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ2hCLE1BQU0sZ0JBQWdCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUN0QyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDaEIsYUFBYSxLQUFLLENBQUMsTUFBTTtRQUN2QixNQUFNLGlCQUFpQixhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTTtVQUNoQyw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztVQUNyQyxjQUFjLEVBQUUsQ0FBQztTQUNsQixDQUFDLENBQUM7T0FDSixFQUFFLFlBQVk7UUFDYixNQUFNLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU07VUFDaEMsUUFBUSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQzFCLE1BQU0saUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1dBQ3BCLEVBQUUsT0FBTztZQUNSLE1BQU0sb0JBQW9CLEtBQUssQ0FBQztjQUM5QixNQUFNLE9BQU87Y0FDYixNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUM7YUFDbEIsQ0FBQyxDQUFDO1lBQ0gsNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1dBQ3BCLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQztPQUNKLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxTQUFTLE1BQU0sQ0FBQztJQUN0QixNQUFNLE9BQU8sNkJBQTZCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQzs7SUFFbEYsTUFBTSxRQUFRLFFBQVEsSUFBSSxDQUFDO0lBQzNCLE1BQU0sc0JBQXNCLHNDQUFzQztNQUNoRSxNQUFNLFNBQVMsWUFBWSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDOUMsUUFBUSxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2pELFFBQVEsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7TUFDOUIsUUFBUSxDQUFDLE1BQU0sRUFBRTtRQUNmLElBQUksRUFBRSxHQUFHLE1BQU07UUFDZixhQUFhLEdBQUc7UUFDaEIsbUJBQW1CLE1BQU07UUFDekIsS0FBSztPQUNOLENBQUMsQ0FBQztNQUNILEtBQUssQ0FBQyxNQUFNLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztNQUN2QyxPQUFPLE1BQU0sQ0FBQztLQUNmLENBQUM7SUFDRixNQUFNLGdCQUFnQixVQUFVO01BQzlCLElBQUksYUFBYSxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsY0FBYyxDQUFDO01BQ3JELElBQUksa0JBQWtCLENBQUMsTUFBTSxDQUFDLEtBQUssTUFBTSxnQkFBZ0IsRUFBRTtRQUN6RCxjQUFjLGNBQWMsR0FBRyxNQUFNLGdCQUFnQixPQUFPLEVBQUUsR0FBRyxNQUFNLENBQUM7T0FDekU7TUFDRCxjQUFjLHVFQUF1RSxDQUFDO01BQ3RGLE1BQU0sU0FBUyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDakMsTUFBTSxZQUFZLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUN2QyxNQUFNLHFCQUFxQixNQUFNLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO01BQ3ZFLElBQUksd0JBQXdCLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDcEMsY0FBYyxzREFBc0QsR0FBRyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7T0FDbEg7TUFDRCxjQUFjLFNBQVMsR0FBRyxDQUFDLFVBQVUsR0FBRyxNQUFNLEVBQUUsMEJBQTBCLEdBQUcsU0FBUyxFQUFFLFdBQVcsR0FBRyxNQUFNLEdBQUcsRUFBRSxjQUFjLEdBQUcsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLGdCQUFnQixDQUFDO01BQ3RMLE9BQU8sVUFBVSxDQUFDO0tBQ25CLENBQUM7SUFDRixNQUFNLGVBQWUscUJBQXFCO01BQ3hDLE1BQU0sY0FBYyxNQUFNLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO01BQ3ZELE1BQU0sV0FBVyxNQUFNLENBQUMsWUFBWSxRQUFRLENBQUMsTUFBTSxXQUFXLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDM0YsTUFBTSxNQUFNLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxFQUFFLFdBQVcsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQztNQUM5RixHQUFHLE9BQU8sR0FBRyxNQUFNO1FBQ2pCLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNsQixNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUN6QixDQUFDO01BQ0YsTUFBTSxxQkFBcUIsR0FBRyxPQUFPLGdCQUFnQixDQUFDO01BQ3RELE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQztNQUMzQixNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDMUMsS0FBSyxJQUFJLENBQUMsT0FBTyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUN6QyxDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsVUFBVTtNQUNoQyxNQUFNLFNBQVMsTUFBTSxjQUFjLENBQUM7TUFDcEMsTUFBTSxRQUFRLE1BQU07UUFDbEIsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLGdCQUFnQixDQUFDO1FBQ2hELGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQzNCLENBQUM7TUFDRixJQUFJLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsUUFBUSxVQUFVLEVBQUUsRUFBRTtRQUM3RCxNQUFNLE1BQU0sTUFBTSxPQUFPLEVBQUUsQ0FBQztRQUM1QixHQUFHLEtBQUssRUFBRSxDQUFDO1FBQ1gsR0FBRyxNQUFNLENBQUMsTUFBTSxXQUFXLENBQUMsQ0FBQztRQUM3QixHQUFHLE1BQU0sRUFBRSxDQUFDO1FBQ1osS0FBSyxFQUFFLENBQUM7T0FDVCxNQUFNO1FBQ0wsTUFBTSxTQUFTLElBQUksQ0FBQyxZQUFZLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTTtVQUM5RCxNQUFNLE9BQU8sRUFBRSxDQUFDO1VBQ2hCLEtBQUssRUFBRSxDQUFDO1NBQ1QsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsTUFBTSxXQUFXLENBQUM7T0FDbkM7S0FDRixDQUFDO0lBQ0YsTUFBTSxTQUFTLHFCQUFxQjtNQUNsQyxZQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQzlCLElBQUksT0FBTyxnQkFBZ0IsRUFBRTtRQUMzQixPQUFPLGdCQUFnQixNQUFNLFFBQVEsR0FBRyxNQUFNLFdBQVcsQ0FBQztRQUMxRCxNQUFNLE9BQU8sR0FBRyxLQUFLLFNBQVMsQ0FBQyxPQUFPLGdCQUFnQixDQUFDLENBQUM7T0FDekQ7TUFDRCxNQUFNLFdBQVcsRUFBRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUM7TUFDM0MsS0FBSyxVQUFVLENBQUMsTUFBTSxHQUFHLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ2xELE1BQU0sV0FBVyxFQUFFLE1BQU0sV0FBVyxHQUFHLE1BQU0sY0FBYyxDQUFDO01BQzVELGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN6QixDQUFDOztJQUVGLE1BQU0sUUFBUSxRQUFRLElBQUksQ0FBQztJQUMzQixNQUFNLGFBQWEsd0NBQXdDO01BQ3pELE1BQU0sU0FBUyxhQUFhLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUN6QyxNQUFNLFlBQVksYUFBYSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxnQkFBZ0IsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztNQUMxRixTQUFTLEtBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQzVCLElBQUksTUFBTSxJQUFJLEtBQUssUUFBUSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQzlELElBQUksTUFBTSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7VUFDMUIsT0FBTztTQUNSO1FBQ0QsSUFBSTtVQUNGLE1BQU0saUJBQWlCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1VBQ3ZELE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLGNBQWMsQ0FBQztVQUN4QyxJQUFJLFVBQVUsQ0FBQyxjQUFjLEtBQUssQ0FBQyxFQUFFO1lBQ25DLGNBQWMsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN2QyxrQkFBa0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1dBQ2pDO1NBQ0YsQ0FBQyxVQUFVO1VBQ1YsZUFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDcEM7T0FDRjtLQUNGLENBQUM7SUFDRixNQUFNLG1CQUFtQixRQUFRO01BQy9CLE9BQU8sSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ2hDLENBQUM7SUFDRixNQUFNLGNBQWMsVUFBVTtNQUM1QixNQUFNLHFCQUFxQixFQUFFLENBQUM7TUFDOUIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRO1FBQ2pDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztPQUNoRSxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxZQUFZLFVBQVU7TUFDMUIsTUFBTSxlQUFlLEtBQUssS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO01BQ3pELE1BQU0sZUFBZSxNQUFNLEdBQUcsU0FBUyxPQUFPLEVBQUUsTUFBTSxDQUFDO01BQ3ZELE1BQU0sWUFBWTtRQUNoQixHQUFHLFdBQVcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNO1FBQ25DLEdBQUcsV0FBVyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU07T0FDdkMsQ0FBQztNQUNGLE1BQU0sQ0FBQyxTQUFTLEVBQUUsbUJBQW1CO1FBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxFQUFFO1VBQzlCLE1BQU0sR0FBRyxTQUFTLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDM0M7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxZQUFZLFVBQVU7TUFDMUIsTUFBTSxRQUFRLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUMvQixJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNuQixNQUFNLFFBQVEsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxZQUFZLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3RCxJQUFJLFVBQVUsQ0FBQyxNQUFNLE1BQU0sS0FBSyxDQUFDLEVBQUU7VUFDakMsTUFBTSxNQUFNLEtBQUssQ0FBQyxNQUFNLEVBQUUsWUFBWSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxnQkFBZ0IsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2xHO09BQ0YsTUFBTTtRQUNMLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztPQUNuQjtLQUNGLENBQUM7SUFDRixNQUFNLFlBQVksVUFBVTtNQUMxQixNQUFNLFFBQVEsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQy9CLE1BQU0sUUFBUSxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUN0QyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLFlBQVksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDeEQsQ0FBQztJQUNGLE1BQU0sd0JBQXdCLFVBQVU7TUFDdEMsTUFBTSxTQUFTLE1BQU0sTUFBTSxTQUFTLENBQUM7TUFDckMsT0FBTyxNQUFNLEdBQUcsTUFBTSxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDckQsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLFVBQVU7TUFDcEMsTUFBTSxNQUFNLE1BQU0sV0FBVyxFQUFFLENBQUM7TUFDaEMsTUFBTSxRQUFRLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUMvQixNQUFNLE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztNQUNoQyxJQUFJLElBQUksZ0JBQWdCLFNBQVMsRUFBRTtRQUNqQyxJQUFJLGdCQUFnQixHQUFHLEdBQUcsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQztPQUM1RTtNQUNELElBQUksSUFBSSxnQkFBZ0IsSUFBSSxJQUFJLGdCQUFnQixTQUFTLEVBQUU7UUFDekQsSUFBSSxnQkFBZ0IsR0FBRyxHQUFHLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxNQUFNLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQztPQUNyRjtNQUNELElBQUksT0FBTyxHQUFHLElBQUksYUFBYSxHQUFHLElBQUksYUFBYSxHQUFHLEdBQUcsYUFBYSxDQUFDO01BQ3ZFLE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQztJQUNGLE1BQU0seUJBQXlCLHFCQUFxQjtNQUNsRCxPQUFPO1FBQ0wsaUJBQWlCLE9BQU87UUFDeEIsaUJBQWlCLE1BQU07UUFDdkIsS0FBSyxFQUFFO09BQ1IsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLHlCQUF5QixpQkFBaUI7TUFDOUMsTUFBTSxrQkFBa0IsS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDNUMsS0FBSyxZQUFZLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDO01BQ2xELE9BQU8sc0JBQXNCLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0tBQ2pFLENBQUM7SUFDRixNQUFNLG1CQUFtQixVQUFVO01BQ2pDLE1BQU0sZ0JBQWdCLE1BQU0sV0FBVyxFQUFFLENBQUM7TUFDMUMsT0FBTyxNQUFNLE9BQU8sR0FBRyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUM3RixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsVUFBVTtNQUM5QixNQUFNLE1BQU0sTUFBTSxXQUFXLEVBQUUsQ0FBQztNQUNoQyxNQUFNLFdBQVcsR0FBRyxHQUFHLE1BQU0sUUFBUSxDQUFDO01BQ3RDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO1FBQzlCLE9BQU8scUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDdEMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRTtRQUN2QyxPQUFPLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQ3BDLE1BQU07UUFDTCxPQUFPLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQ2pDO0tBQ0YsQ0FBQztJQUNGLE1BQU0scUJBQXFCLGlCQUFpQjtNQUMxQyxNQUFNLGNBQWM7UUFDbEIsTUFBTSxRQUFRLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3pDLE1BQU0sUUFBUSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN6QyxXQUFXLFFBQVEsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDckQsWUFBWSxTQUFTO1VBQ25CLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFLEVBQUU7WUFDN0IsUUFBUSxLQUFLLENBQUMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7V0FDbkQ7U0FDRjtPQUNGLENBQUM7TUFDRixNQUFNLEdBQUcsR0FBRztRQUNWLEdBQUcsTUFBTSxHQUFHO1FBQ1osR0FBRyxXQUFXO09BQ2YsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLE9BQU8sZ0JBQWdCO01BQzNCLE1BQU0sU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO01BQ2pDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNsQixTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDbEIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ2xCLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNwQixNQUFNLGFBQWEsTUFBTSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDL0Msa0JBQWtCLENBQUMsTUFBTSxFQUFFLFFBQVEsS0FBSyxDQUFDLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ3BFLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxnQkFBZ0IsQ0FBQztNQUNwRCw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNyQyxJQUFJLE1BQU0sT0FBTyxFQUFFO1FBQ2pCLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQzNCLE1BQU07UUFDTCxNQUFNLENBQUMsTUFBTSxFQUFFO1VBQ2IsaUJBQWlCLFVBQVUsZ0JBQWdCO1VBQzNDLGlCQUFpQixVQUFVLGdCQUFnQjtTQUM1QyxDQUFDLENBQUM7T0FDSjtLQUNGLENBQUM7O0lBRUYsTUFBTSxRQUFRLFFBQVEsSUFBSSxDQUFDO0lBQzNCLE1BQU0sb0JBQW9CLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDO0lBQ3pELE1BQU0sZUFBZSwwQkFBMEI7TUFDN0MsTUFBTSxlQUFlLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUM3QyxNQUFNLGNBQWMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQzNDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxZQUFZLEtBQUssSUFBSSxFQUFFO1FBQ3hELE1BQU0sTUFBTSxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsV0FBVyxHQUFHLENBQUMsR0FBRyxNQUFNLGNBQWMsUUFBUSxFQUFFLE9BQU8sR0FBRyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbkgsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNO1VBQ2hDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDOUMsQ0FBQyxDQUFDO09BQ0o7S0FDRixDQUFDO0lBQ0YsTUFBTSxZQUFZLG9CQUFvQjtNQUNwQyxNQUFNLFFBQVEsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQy9CLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDcEYsTUFBTSxXQUFXLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxNQUFNLE1BQU0sUUFBUSxHQUFHLE1BQU0sZ0JBQWdCLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxLQUFLLEVBQUUsTUFBTSxHQUFHLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM3RyxZQUFZLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNO1VBQ3hDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3BDLENBQUMsQ0FBQztPQUNKO0tBQ0YsQ0FBQztJQUNGLE1BQU0sWUFBWSxvQkFBb0I7TUFDcEMsTUFBTSxRQUFRLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUMvQixJQUFJLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDMUQsTUFBTSxXQUFXLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxNQUFNLE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sZ0JBQWdCLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxLQUFLLEVBQUUsTUFBTSxHQUFHLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN2SCxZQUFZLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNO1VBQ3hDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3BDLENBQUMsQ0FBQztPQUNKO0tBQ0YsQ0FBQztJQUNGLE1BQU0seUJBQXlCLFVBQVUsUUFBUSxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVE7TUFDekcsR0FBRztNQUNILE1BQU0sUUFBUSxLQUFLLEVBQUU7S0FDdEIsQ0FBQyxDQUFDLENBQUM7SUFDSixNQUFNLDBCQUEwQiwwQkFBMEIsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTO01BQ3BKLEtBQUssQ0FBQyxHQUFHLE1BQU0sY0FBYyxRQUFRLEVBQUUsT0FBTyxHQUFHLElBQUksRUFBRSxNQUFNLEdBQUcsTUFBTSxFQUFFLEdBQUcsQ0FBQztNQUM1RSxNQUFNLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQztLQUMxQixDQUFDLENBQUMsQ0FBQztJQUNKLE1BQU0sWUFBWSxrQ0FBa0M7TUFDbEQsTUFBTSxrQkFBa0IsdUJBQXVCLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztNQUMzRSxNQUFNLGlCQUFpQixzQkFBc0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sdUJBQXVCLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ2xJLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDVCxlQUFlO1FBQ2YsY0FBYztPQUNmLENBQUMsRUFBRSxXQUFXO1FBQ2IsWUFBWSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07VUFDeEMsY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLElBQUksRUFBRSxPQUFPLEtBQUssZUFBZSxFQUFFLENBQUMsQ0FBQztTQUNwRSxDQUFDLENBQUM7T0FDSixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxjQUFjLG9CQUFvQjtNQUN0QyxNQUFNLGFBQWEsZUFBZTtRQUNoQyxhQUFhLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNO1VBQ3hDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3BDLENBQUMsQ0FBQztPQUNKLENBQUM7TUFDRixNQUFNLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEVBQUUsZUFBZTtRQUNsRCxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7T0FDaEUsQ0FBQyxDQUFDO01BQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxVQUFVO1FBQ25DLFNBQVMsS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsSUFBSSxNQUFNLElBQUksQ0FBQyxhQUFhLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1VBQ3ZFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEdBQUcsTUFBTSxFQUFFLE9BQU8sR0FBRyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNoRTtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGdCQUFnQixVQUFVO01BQzlCLE1BQU0sUUFBUSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDL0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxhQUFhLENBQUMsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztLQUNuRSxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsVUFBVTtNQUM5QixNQUFNLFFBQVEsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQy9CLE9BQU8sYUFBYSxDQUFDLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDL0MsQ0FBQztJQUNGLE1BQU0sY0FBYyxvQkFBb0I7TUFDdEMsTUFBTSxlQUFlLFlBQVksYUFBYSxDQUFDO01BQy9DLE1BQU0sYUFBYSxNQUFNO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLFFBQVEsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1VBQ3JFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNkO09BQ0YsQ0FBQztNQUNGLFNBQVMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDMUIsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztNQUMxQixZQUFZLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ25DLFNBQVMsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3hDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDNUIsWUFBWSxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztLQUN2RCxDQUFDO0lBQ0YsTUFBTSxzQkFBc0IscUJBQXFCLFFBQVEsV0FBVyxDQUFDLE9BQU8sRUFBRTtNQUM1RSxnQkFBZ0IsaUJBQWlCLENBQUMsTUFBTSxDQUFDO01BQ3pDLGdCQUFnQixpQkFBaUIsQ0FBQyxNQUFNLENBQUM7S0FDMUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxTQUFTLFVBQVU7TUFDdkIsTUFBTSxLQUFLLE1BQU0sR0FBRyxDQUFDO01BQ3JCLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO01BQ3RDLE1BQU0sZUFBZSxNQUFNO1FBQ3pCLEtBQUssT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDNUMsTUFBTSxPQUFPLEVBQUUsQ0FBQztPQUNqQixDQUFDO01BQ0YsSUFBSSxDQUFDLFVBQVUsTUFBTSxVQUFVLEVBQUU7UUFDL0IsS0FBSyxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMxQyxPQUFPO09BQ1I7TUFDRCxJQUFJLENBQUMsTUFBTSxXQUFXLEVBQUUsRUFBRTtRQUN4QixPQUFPO09BQ1I7TUFDRCxNQUFNLFVBQVUsWUFBWSxRQUFRLENBQUMsTUFBTSxXQUFXLEVBQUUsQ0FBQyxDQUFDO01BQzFELE1BQU0sV0FBVyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDbEMsTUFBTSxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU07UUFDeEIsS0FBSyxDQUFDLE9BQU8sSUFBSSxXQUFXLEVBQUUsUUFBUSxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNwRSxRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO09BQzdCLENBQUMsQ0FBQztNQUNILE1BQU0sR0FBRyxpQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDbEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNyQixNQUFNLGNBQWMsR0FBRyxNQUFNLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztRQUM1RCxNQUFNLFdBQVcsRUFBRSxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUM7T0FDakQsTUFBTTtRQUNMLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQztPQUN0QjtNQUNELE1BQU0sT0FBTyxNQUFNLFdBQVcsRUFBRSxLQUFLLElBQUksS0FBSyxVQUFVLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3JFLElBQUksSUFBSSxFQUFFO1FBQ1IsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxXQUFXLEVBQUUsQ0FBQyxFQUFFO1VBQ3JFLEtBQUssWUFBWSxDQUFDLEtBQUssT0FBTyxDQUFDLE9BQU8sRUFBRTtZQUN0QyxNQUFNLFFBQVE7WUFDZCxNQUFNLEVBQUU7V0FDVCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7VUFDUixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUM7U0FDOUI7UUFDRCxNQUFNLGtCQUFrQixHQUFHLEtBQUs7VUFDOUIsTUFBTSxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDNUIsQ0FBQztRQUNGLEtBQUssS0FBSyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQyxDQUFDO1FBQzNELE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNO1VBQ3ZCLE1BQU0sYUFBYSxFQUFFLENBQUM7U0FDdkIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxTQUFTLElBQUksQ0FBQyxJQUFJLE9BQU8sT0FBTyxJQUFJLENBQUMsSUFBSSxjQUFjLEVBQUU7VUFDcEcsSUFBSSxjQUFjLEdBQUcsSUFBSSxPQUFPLENBQUM7VUFDakMsSUFBSSxPQUFPLEdBQUcsTUFBTTtZQUNsQixNQUFNLGNBQWMsWUFBWSxFQUFFLENBQUM7WUFDbkMsTUFBTSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkIsT0FBTyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUNqQyxDQUFDO1NBQ0g7T0FDRjtNQUNELE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUM3QyxNQUFNLG9CQUFvQixHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3pELElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3pCLE1BQU0sR0FBRyxDQUFDLFlBQVksRUFBRSxLQUFLO1VBQzNCLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixDQUFDLFFBQVEsR0FBRyxLQUFLLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1dBQ3JDO1NBQ0YsQ0FBQyxDQUFDO09BQ0o7TUFDRCxJQUFJLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3RDLE1BQU0sR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNO1VBQ3hCLElBQUksTUFBTSxZQUFZLEVBQUU7WUFDdEIsTUFBTSxLQUFLLEVBQUUsQ0FBQztXQUNmO1NBQ0YsQ0FBQyxDQUFDO09BQ0o7TUFDRCxJQUFJLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ2xDLE1BQU0sY0FBYyxHQUFHLE1BQU07VUFDM0IsSUFBSSxNQUFNLFlBQVksSUFBSSxDQUFDLE1BQU0sVUFBVSxJQUFJLENBQUMsTUFBTSxTQUFTLEVBQUUsRUFBRTtZQUNqRSxNQUFNLEtBQUssQ0FBQztjQUNWLFFBQVEsS0FBSztjQUNiLFdBQVcsSUFBSTtjQUNmLFdBQVcsS0FBSzthQUNqQixDQUFDLENBQUM7V0FDSjtTQUNGLENBQUM7UUFDRixNQUFNLGNBQWMsR0FBRyxDQUFDLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQyxDQUFDO09BQy9EO01BQ0QsTUFBTSxjQUFjLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNqQyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sT0FBTyxDQUFDLENBQUM7S0FDcEMsQ0FBQzs7SUFFRixNQUFNLGtCQUFrQixtQkFBbUI7TUFDekMsSUFBSSxNQUFNLGNBQWMsS0FBSyxLQUFLLEVBQUU7UUFDbEMsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLFNBQVMsRUFBRTtVQUNwQixNQUFNLFFBQVEsRUFBRSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7VUFDcEUsTUFBTSxZQUFZLEVBQUUsQ0FBQztTQUN0QjtRQUNELDJCQUEyQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztPQUM1QztLQUNGLENBQUM7SUFDRixNQUFNLGtCQUFrQixVQUFVLE1BQU0sY0FBYyxDQUFDOztJQUV2RCxNQUFNLGdCQUFnQix5QkFBeUI7TUFDN0MsVUFBVSxRQUFRLENBQUMsUUFBUSxDQUFDO01BQzVCLFNBQVMsUUFBUSxDQUFDLFFBQVEsQ0FBQztLQUM1QixDQUFDLENBQUM7SUFDSCxNQUFNLGtCQUFrQixRQUFRLEVBQUUsV0FBVyxDQUFDO0lBQzlDLE1BQU0sVUFBVSxlQUFlLFFBQVEsRUFBRSxDQUFDO0lBQzFDLE1BQU0sV0FBVyxlQUFlLFNBQVMsRUFBRSxDQUFDO0lBQzVDLE1BQU0sbUJBQW1CLFdBQVc7TUFDbEMsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDdkIsT0FBTyxFQUFFLENBQUM7T0FDWCxNQUFNO1FBQ0wsTUFBTSxjQUFjLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLEdBQUcsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekUsTUFBTSxpQkFBaUIsS0FBSyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNsRCxPQUFPLFFBQVEsQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQUM7T0FDN0M7S0FDRixDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsbUJBQW1CO01BQ3pDLE1BQU0sU0FBUyxRQUFRLENBQUMsT0FBTyxFQUFFLGdCQUFnQjtRQUMvQyxPQUFPLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7T0FDOUIsQ0FBQyxDQUFDO01BQ0gsT0FBTyxhQUFhLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztLQUMxQyxDQUFDO0lBQ0YsTUFBTSxhQUFhLHNCQUFzQixXQUFXLEVBQUUsS0FBSztNQUN6RCxNQUFNLFdBQVcsYUFBYSxTQUFTLEVBQUUsQ0FBQztNQUMxQyxNQUFNLGlCQUFpQixLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDdkQsT0FBTyxLQUFLLE9BQU8sQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0tBQ25ELENBQUM7SUFDRixNQUFNLGFBQWEseUJBQXlCO01BQzFDLE9BQU8sS0FBSyxDQUFDLGFBQWEsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDOUMsQ0FBQztJQUNGLE1BQU0sbUJBQW1CLHlCQUF5QjtNQUNoRCxPQUFPLFVBQVUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsYUFBYSxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDOUUsQ0FBQztJQUNGLE1BQU0sMkJBQTJCLDRCQUE0QjtNQUMzRCxNQUFNLHVCQUF1QjtRQUMzQixZQUFZLEtBQUs7UUFDakIsaUJBQWlCLEtBQUs7UUFDdEIsUUFBUSxLQUFLO1FBQ2IsY0FBYyxLQUFLLENBQUMsYUFBYSxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ3JFLGdCQUFnQixLQUFLO09BQ3RCLENBQUM7TUFDRixNQUFNLHNCQUFzQixFQUFFLFNBQVMsS0FBSyxFQUFFLENBQUM7TUFDL0MsT0FBTztRQUNMLEdBQUcsb0JBQW9CO1FBQ3ZCLEdBQUcsT0FBTyxHQUFHLG1CQUFtQixHQUFHLEVBQUU7T0FDdEMsQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLHFCQUFxQiw4QkFBOEI7TUFDdkQsSUFBSSxFQUFFLENBQUM7TUFDUCxNQUFNLDZCQUE2QixDQUFDLEtBQUssT0FBTyxpQkFBaUIsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7TUFDdkcsSUFBSSxlQUFlLElBQUksZUFBZSxpQkFBaUIsRUFBRTtRQUN2RCxPQUFPLEtBQUssT0FBTyxDQUFDLEVBQUUsRUFBRSxlQUFlLGlCQUFpQixFQUFFLDBCQUEwQixDQUFDLENBQUM7T0FDdkYsTUFBTTtRQUNMLE9BQU8sMEJBQTBCLENBQUM7T0FDbkM7S0FDRixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsNEJBQTRCO01BQ2pELEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDO01BQ2xDLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO0tBQzdCLENBQUM7SUFDRixNQUFNLHFCQUFxQixrRUFBa0U7TUFDM0YsSUFBSSxjQUFjLElBQUksVUFBVSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsRUFBRTtRQUN6RCxPQUFPLGFBQWEsQ0FBQztPQUN0QixNQUFNO1FBQ0wsT0FBTyxjQUFjLENBQUM7T0FDdkI7S0FDRixDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsb0VBQW9FO01BQ3pGLE1BQU0sZ0JBQWdCLGdCQUFnQixDQUFDLHNCQUFzQixlQUFlLENBQUMsQ0FBQztNQUM5RSxNQUFNLGlCQUFpQixnQkFBZ0IsQ0FBQyxPQUFPLFFBQVEsQ0FBQyxDQUFDO01BQ3pELE1BQU0sZUFBZSxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDL0QsTUFBTSxnQkFBZ0IsWUFBWSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsWUFBWSxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7TUFDckcsTUFBTSxrQkFBa0Isa0JBQWtCLENBQUMsY0FBYyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFDLENBQUM7TUFDekcsTUFBTSxrQkFBa0IsY0FBYyxDQUFDLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQztNQUN2RSxPQUFPLEtBQUssT0FBTyxDQUFDLE9BQU8sRUFBRTtRQUMzQixnQkFBZ0IsYUFBYTtRQUM3QixTQUFTLGVBQWU7T0FDekIsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sYUFBYSxtQ0FBbUM7TUFDcEQsT0FBTyxjQUFjLElBQUksVUFBVSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztLQUM5RCxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsOEVBQThFO01BQ25HLElBQUksRUFBRSxDQUFDO01BQ1AsTUFBTSx3QkFBd0IsY0FBYyxHQUFHLEVBQUUsUUFBUSx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssT0FBTyxPQUFPLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO01BQzdKLE1BQU0sZ0JBQWdCLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO01BQzdGLE1BQU0sa0JBQWtCLEtBQUssT0FBTyxDQUFDLGNBQWMsRUFBRSxzQkFBc0IsRUFBRSxhQUFhLFFBQVEsRUFBRSxFQUFFLFVBQVUsQ0FBQyxjQUFjLEVBQUUsYUFBYSxDQUFDLEdBQUcsVUFBVSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxrQkFBa0Isa0JBQWtCLENBQUMsc0JBQXNCLEVBQUUsYUFBYSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUN2UixPQUFPLGNBQWMsQ0FBQyxjQUFjLEVBQUUsYUFBYSxFQUFFLHNCQUFzQixFQUFFLGVBQWUsQ0FBQyxDQUFDO0tBQy9GLENBQUM7SUFDRixNQUFNLG1CQUFtQixxQ0FBcUMsY0FBYyxDQUFDLE9BQU8sSUFBSSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxPQUFPLENBQUMsQ0FBQzs7SUFFckosTUFBTSxZQUFZLGlCQUFpQixXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDOztJQUU1RCxNQUFNLHlCQUF5QixVQUFVO01BQ3ZDLE1BQU0sZUFBZSxpQkFBaUI7UUFDcEMsTUFBTSxVQUFVLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckMsTUFBTSxZQUFZLEVBQUUsQ0FBQztPQUN0QixDQUFDO01BQ0YsTUFBTSxjQUFjLFNBQVMsTUFBTTtRQUNqQyxNQUFNLENBQUMsMkJBQTJCLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRO1VBQ3JELElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtZQUNsQixNQUFNLFVBQVUsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQztXQUN6QztTQUNGLENBQUMsQ0FBQztRQUNILElBQUksS0FBSyxLQUFLLE1BQU0sRUFBRTtVQUNwQixZQUFZLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDO1NBQy9CO09BQ0YsQ0FBQztNQUNGLE1BQU0sZUFBZSxZQUFZLENBQUM7UUFDaEMsYUFBYSxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ2hDLGVBQWUsV0FBVyxDQUFDLFFBQVEsQ0FBQztRQUNwQyxjQUFjLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFDbEMsYUFBYSxXQUFXLENBQUMsU0FBUyxDQUFDO1FBQ25DLGFBQWEsV0FBVyxDQUFDLE1BQU0sQ0FBQztPQUNqQyxDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSwrQkFBK0IsVUFBVTtNQUM3QyxNQUFNLGNBQWMsUUFBUSxNQUFNO1FBQ2hDLE1BQU0sWUFBWSxNQUFNLFVBQVUsQ0FBQztRQUNuQyxNQUFNLFFBQVEsU0FBUyxZQUFZLEVBQUUsR0FBRyxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsU0FBUyxRQUFRLEVBQUUsRUFBRSxNQUFNLElBQUksUUFBUSxDQUFDLENBQUMsR0FBRyxTQUFTLGtCQUFrQixFQUFFLENBQUM7UUFDeEksT0FBTyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsYUFBYSxDQUFDLE1BQU0sVUFBVSxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUNyRixDQUFDO01BQ0YsTUFBTSxlQUFlLFlBQVksQ0FBQztRQUNoQyxhQUFhLFdBQVcsQ0FBQyxXQUFXLENBQUM7UUFDckMsZUFBZSxXQUFXLENBQUMsYUFBYSxDQUFDO1FBQ3pDLGNBQWMsV0FBVyxDQUFDLFlBQVksQ0FBQztRQUN2QyxhQUFhLFdBQVcsQ0FBQyxjQUFjLENBQUM7T0FDekMsRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNiLENBQUM7SUFDRixNQUFNLHFCQUFxQixVQUFVO01BQ25DLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQy9CLDRCQUE0QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3RDLENBQUM7O0lBRUYsTUFBTSxxQkFBcUIsVUFBVTtNQUNuQyxNQUFNLGVBQWUsWUFBWSxDQUFDO1FBQ2hDLGtCQUFrQixXQUFXO1VBQzNCLE1BQU0sTUFBTSxNQUFNLE9BQU8sRUFBRSxDQUFDO1VBQzVCLElBQUksTUFBTSxDQUFDO1VBQ1gsSUFBSTtZQUNGLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1dBQzFCLENBQUMsV0FBVztZQUNYLFNBQVMsSUFBSSxDQUFDO1dBQ2Y7VUFDRCxJQUFJLE9BQU8sS0FBSyxPQUFPLElBQUksQ0FBQyxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzVELFNBQVMsSUFBSSxDQUFDO1dBQ2Y7VUFDRCxJQUFJLE1BQU0sSUFBSSxDQUFDLEdBQUcsc0JBQXNCLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDakQsSUFBSSxNQUFNLE1BQU0sVUFBVSxDQUFDLENBQUMsNkRBQTZELENBQUMsR0FBRyx1REFBdUQsQ0FBQyxDQUFDO1lBQ3RKLElBQUksR0FBRyxHQUFHLFFBQVEsRUFBRSxJQUFJLEdBQUcsR0FBRyxNQUFNLEVBQUUsRUFBRTtjQUN0QyxNQUFNLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQzthQUN6QztZQUNELE1BQU0sb0JBQW9CLEtBQUssQ0FBQztjQUM5QixNQUFNLEdBQUc7Y0FDVCxNQUFNLE9BQU87YUFDZCxDQUFDLENBQUM7V0FDSjtTQUNGO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLHFCQUFxQixvQkFBb0I7TUFDN0MsTUFBTSxPQUFPLFlBQVksUUFBUSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQztNQUNqRCxJQUFJLGlCQUFpQixDQUFDLElBQUksRUFBRSxhQUFhLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQzlELE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO09BQ3JDLE1BQU07UUFDTCxPQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztPQUNyQztNQUNELElBQUksa0JBQWtCLENBQUMsSUFBSSxFQUFFLGFBQWEsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDN0QsT0FBTyxJQUFJLFFBQVEsQ0FBQyx5QkFBeUIsRUFBRSxRQUFRLENBQUMsQ0FBQztPQUMxRCxNQUFNO1FBQ0wsT0FBTyxJQUFJLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLENBQUMsQ0FBQztPQUNsRDtNQUNELE9BQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQzs7SUFFRixNQUFNLGlCQUFpQixTQUFTO01BQzlCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQzdCLE1BQU0sVUFBVSxLQUFLLE9BQU8sQ0FBQztVQUMzQixPQUFPLEtBQUssTUFBTTtVQUNsQixNQUFNLEVBQUUsT0FBTyxLQUFLLE1BQU0sRUFBRTtTQUM3QixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ1YsT0FBTztVQUNMLFNBQVMsS0FBSyxRQUFRO1VBQ3RCLE9BQU87U0FDUixDQUFDO09BQ0g7TUFDRCxPQUFPO1FBQ0wsU0FBUyxLQUFLO1FBQ2QsU0FBUyxFQUFFO09BQ1osQ0FBQztLQUNILENBQUM7SUFDRixNQUFNLFlBQVksbUJBQW1CO01BQ25DLE1BQU0sWUFBWSxNQUFNLFVBQVUsQ0FBQztNQUNuQyxNQUFNLE1BQU0sTUFBTSxJQUFJLENBQUM7TUFDdkIsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN2QixPQUFPLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxTQUFTLE9BQU8sRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQzNELE1BQU07UUFDTCxPQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0YsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLG1CQUFtQjtNQUN2QyxJQUFJLE1BQU0sVUFBVSxXQUFXLEVBQUUsRUFBRTtRQUNqQyxNQUFNLGtCQUFrQixHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxvQkFBb0IsQ0FBQyxNQUFNLEVBQUU7VUFDM0IsR0FBRyxPQUFPO1VBQ1YsU0FBUyxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztVQUNuQyxRQUFRLE1BQU07VUFDZCxLQUFLLEtBQUs7VUFDVixXQUFXLElBQUk7U0FDaEIsQ0FBQyxLQUFLLENBQUMsUUFBUTtVQUNkLE1BQU0sa0JBQWtCLGVBQWUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7VUFDdkUscUJBQXFCLENBQUMsTUFBTSxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztVQUNyRCxNQUFNLFVBQVUsRUFBRSxDQUFDO1NBQ3BCLENBQUMsQ0FBQztPQUNKO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLHFCQUFxQixVQUFVO01BQ25DLE1BQU0sZUFBZSxZQUFZLENBQUM7UUFDaEMsWUFBWSxNQUFNO1VBQ2hCLE1BQU0sS0FBSyxNQUFNLFVBQVUsWUFBWSxFQUFFLENBQUM7VUFDMUMsTUFBTSxXQUFXLENBQUMsTUFBTSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1VBQ3ZDLE1BQU0sVUFBVSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDckM7UUFDRCxhQUFhLDBCQUEwQjtVQUNyQyxhQUFhLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDckU7UUFDRCxzQkFBc0IsTUFBTTtVQUMxQixNQUFNLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDdkQ7UUFDRCxZQUFZLDBCQUEwQjtVQUNwQyxhQUFhLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNqRDtRQUNELFlBQVksMEJBQTBCO1VBQ3BDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDOUI7UUFDRCxrQkFBa0IsMEJBQTBCO1VBQzFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDOUI7UUFDRCxlQUFlLDBCQUEwQjtVQUN2QyxNQUFNLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQjtRQUNELG1CQUFtQiwwQkFBMEI7VUFDM0MsTUFBTSxZQUFZLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLEtBQUssUUFBUSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sVUFBVSxXQUFXLENBQUMsRUFBRSxRQUFRLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25JO1FBQ0QsZ0JBQWdCLE1BQU07VUFDcEIsTUFBTSxXQUFXLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUNsRDtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSxrQkFBa0I7TUFDdEIsYUFBYSxNQUFNO01BQ25CLGVBQWUsTUFBTTtLQUN0QixDQUFDO0lBQ0YsTUFBTSxTQUFTLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QixNQUFNLHVCQUF1Qiw0QkFBNEI7TUFDdkQsTUFBTSxjQUFjLE9BQU8sTUFBTSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU07UUFDN0QsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUU7VUFDZixPQUFPLEtBQUssQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsTUFBTSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1NBQzdGLE1BQU07VUFDTCxPQUFPLFFBQVEsS0FBSyxFQUFFLENBQUM7U0FDeEI7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLFNBQVMsT0FBTyxFQUFFLENBQUMsWUFBWSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDN0QsT0FBTyxTQUFTLENBQUMsWUFBWSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDOUUsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLGNBQWMsVUFBVSxRQUFRLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3BHLE1BQU0sc0JBQXNCLG1CQUFtQixRQUFRLEtBQUssQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN6RyxNQUFNLGNBQWMsWUFBWSxrQkFBa0IsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xQLE1BQU0sY0FBYyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDN0MsTUFBTSxnQkFBZ0IsT0FBTyxDQUFDLG1CQUFtQixFQUFFLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDOztJQUUvRSxNQUFNLHdCQUF3QixVQUFVLGVBQWUsQ0FBQyxNQUFNLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTO01BQ3RGLE1BQU0sWUFBWSxLQUFLLFVBQVUsRUFBRSxDQUFDO01BQ3BDLE9BQU8sUUFBUSxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0tBQzlFLENBQUMsQ0FBQztJQUNILE1BQU0sa0JBQWtCLFVBQVUsUUFBUSxLQUFLLENBQUMsTUFBTSxVQUFVLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPO01BQ3JGLE1BQU0sT0FBTyxNQUFNLFFBQVEsRUFBRSxDQUFDO01BQzlCLE1BQU0sZ0JBQWdCLEdBQUcsZUFBZSxLQUFLLElBQUksSUFBSSxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUM7TUFDM0UsT0FBTyxhQUFhLEdBQUcsUUFBUSxLQUFLLEVBQUUsR0FBRyxRQUFRLEtBQUssQ0FBQyxNQUFNLFVBQVUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDekYsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxZQUFZLG9CQUFvQixlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZLLE1BQU0sV0FBVyxvQkFBb0IsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsUUFBUSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzs7SUFFeEYsTUFBTSxxQkFBcUIsbUJBQW1CO01BQzVDLElBQUksV0FBVyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDM0IsTUFBTSxpQkFBaUIsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMzQyxJQUFJLGNBQWMsSUFBSSxDQUFDLElBQUksY0FBYyxJQUFJLENBQUMsRUFBRTtVQUM5QyxNQUFNLFlBQVksa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7VUFDN0MsTUFBTSxjQUFjLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1VBQy9DLElBQUksV0FBVyxPQUFPLEdBQUcsQ0FBQyxFQUFFO1lBQzFCLE9BQU8sV0FBVyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7V0FDakQsTUFBTTtZQUNMLE9BQU8sU0FBUyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7V0FDL0M7U0FDRixNQUFNO1VBQ0wsT0FBTyxLQUFLLENBQUM7U0FDZDtPQUNGLE1BQU07UUFDTCxPQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0YsQ0FBQztJQUNGLE1BQU0scUJBQXFCLFFBQVE7TUFDakMsTUFBTSxRQUFRLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQ3BDLE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRO1FBQzFCLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7VUFDakYsT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDdEIsTUFBTTtVQUNMLE9BQU8sSUFBSSxDQUFDO1NBQ2I7T0FDRixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNkLENBQUM7SUFDRixNQUFNLGlCQUFpQixtQkFBbUI7TUFDeEMsTUFBTSxPQUFPLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztNQUMvQyxNQUFNLFVBQVUsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQ3pFLE1BQU0sWUFBWSxFQUFFLENBQUM7S0FDdEIsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLFVBQVUsUUFBUSxDQUFDLE1BQU0sRUFBRSxPQUFPLGFBQWEsQ0FBQyxNQUFNLFFBQVEsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVHLE1BQU0saUJBQWlCLG1CQUFtQjtNQUN4QyxNQUFNLFVBQVUsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUNsRixNQUFNLFlBQVksRUFBRSxDQUFDO0tBQ3RCLENBQUM7SUFDRixNQUFNLGdCQUFnQixVQUFVLFFBQVEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxXQUFXLENBQUMsTUFBTSxRQUFRLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQzs7SUFFMUcsTUFBTSxrQkFBa0IsVUFBVSxRQUFRLENBQUMsTUFBTSxFQUFFLE9BQU87TUFDeEQsTUFBTSxPQUFPLFlBQVksUUFBUSxDQUFDLE1BQU0sUUFBUSxFQUFFLENBQUMsQ0FBQztNQUNwRCxNQUFNLGlCQUFpQixTQUFTLENBQUMsR0FBRyxFQUFFLE9BQU8sTUFBTSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDMUYsTUFBTSxnQkFBZ0IsTUFBTTtRQUMxQixNQUFNLGFBQWEsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUN6RCxNQUFNLFdBQVcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNyRCxPQUFPLE1BQU0sQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLENBQUM7T0FDdEMsQ0FBQztNQUNGLE9BQU8sY0FBYyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDakQsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDYixNQUFNLG1CQUFtQix3QkFBd0I7TUFDL0MsTUFBTSxVQUFVLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDckUsTUFBTSxZQUFZLEVBQUUsQ0FBQztLQUN0QixDQUFDOztJQUVGLE1BQU0seUJBQXlCLFVBQVU7TUFDdkMsTUFBTSxlQUFlLGlCQUFpQjtRQUNwQyxNQUFNLFVBQVUsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyQyxNQUFNLFlBQVksRUFBRSxDQUFDO09BQ3RCLENBQUM7TUFDRixNQUFNLGVBQWUsWUFBWSxDQUFDO1FBQ2hDLDZEQUE2RCxXQUFXO1VBQ3RFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN2QjtRQUNELHlCQUF5Qix5QkFBeUI7VUFDaEQsWUFBWSxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDbEM7UUFDRCxhQUFhLDBCQUEwQjtVQUNyQyxZQUFZLENBQUMsYUFBYSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUN4QztRQUNELFlBQVksMEJBQTBCO1VBQ3BDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDL0I7UUFDRCxZQUFZLDBCQUEwQjtVQUNwQyxjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsY0FBYywwQkFBMEI7VUFDdEMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ2pDO1FBQ0QsUUFBUSx3QkFBd0I7VUFDOUIsSUFBSSxFQUFFLENBQUM7VUFDUCxZQUFZLENBQUMsT0FBTyxFQUFFO1lBQ3BCLE9BQU8sSUFBSSxLQUFLO1lBQ2hCLGFBQWEsQ0FBQyxLQUFLLElBQUksV0FBVyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUk7V0FDMUUsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxnQkFBZ0IsV0FBVztVQUN6QixNQUFNLFVBQVUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsaUJBQWlCLE1BQU07VUFDckIsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzVCO1FBQ0QsZUFBZSwwQkFBMEI7VUFDdkMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUM7U0FDN0M7UUFDRCxtQkFBbUIsMEJBQTBCO1VBQzNDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNyQjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLDZCQUE2QixVQUFVO01BQzNDLE1BQU0sZ0JBQWdCLFFBQVEsTUFBTSxVQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUMzRCxNQUFNLGVBQWUsWUFBWSxDQUFDO1FBQ2hDLDZEQUE2RCxXQUFXLGFBQWEsQ0FBQyxPQUFPLENBQUM7UUFDOUYsaUJBQWlCLE1BQU0sYUFBYSxDQUFDLFlBQVksQ0FBQztPQUNuRCxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQ1osTUFBTSxlQUFlLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO01BQ3BGLE1BQU0sZUFBZSxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUNwRixNQUFNLGVBQWUscUJBQXFCLENBQUMsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDekYsQ0FBQztJQUNGLE1BQU0scUJBQXFCLFVBQVU7TUFDbkMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDL0IsMEJBQTBCLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDcEMsQ0FBQzs7SUFFRixNQUFNLHFCQUFxQixVQUFVO01BQ25DLE1BQU0sZUFBZSxZQUFZLENBQUM7UUFDaEMsaUJBQWlCLE1BQU07VUFDckIsTUFBTSxZQUFZLElBQUksRUFBRSxDQUFDO1NBQzFCO1FBQ0QsaUJBQWlCLE1BQU07VUFDckIsTUFBTSxZQUFZLElBQUksRUFBRSxDQUFDO1NBQzFCO1FBQ0QsTUFBTSxNQUFNO1VBQ1YsTUFBTSxZQUFZLEtBQUssRUFBRSxDQUFDO1NBQzNCO1FBQ0QsTUFBTSxNQUFNO1VBQ1YsTUFBTSxZQUFZLEtBQUssRUFBRSxDQUFDO1NBQzNCO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLHFCQUFxQixVQUFVO01BQ25DLE1BQU0sZUFBZSxZQUFZLENBQUM7UUFDaEMsUUFBUSxNQUFNO1VBQ1osTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2hCO1FBQ0QsU0FBUyxNQUFNO1VBQ2IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2pCO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxlQUFlLFlBQVksQ0FBQyxFQUFFLFNBQVMsTUFBTSxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNuRixDQUFDOztJQUVGLE1BQU0scUJBQXFCLFVBQVU7TUFDbkMsTUFBTSx1QkFBdUIsMEJBQTBCO1FBQ3JELE1BQU0sY0FBYyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQztRQUM5RCxNQUFNLFNBQVMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxNQUFNLFVBQVUsUUFBUSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckUsSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksUUFBUSxDQUFDLFdBQVcsS0FBSyxDQUFDLEVBQUU7VUFDdkQsV0FBVyxLQUFLLEdBQUcsV0FBVyxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7VUFDekQsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLFdBQVcsS0FBSyxFQUFFO1lBQ2hDLE1BQU0sVUFBVSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7V0FDakM7VUFDRCxJQUFJLFdBQVcsS0FBSyxFQUFFO1lBQ3BCLE1BQU0sVUFBVSxNQUFNLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztXQUNyRDtTQUNGO09BQ0YsQ0FBQztNQUNGLE1BQU0sZUFBZSxZQUFZLENBQUM7UUFDaEMsUUFBUSxNQUFNO1VBQ1osSUFBSSxNQUFNLFVBQVUsV0FBVyxFQUFFLEVBQUU7WUFDakMsSUFBSSxNQUFNLFVBQVUsWUFBWSxFQUFFLEVBQUU7Y0FDbEMsTUFBTSxNQUFNLE1BQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxVQUFVLFNBQVMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2NBQ25FLElBQUksR0FBRyxFQUFFO2dCQUNQLE1BQU0sSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2VBQzlCO2NBQ0QsT0FBTzthQUNSO1lBQ0QsTUFBTSxVQUFVLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztXQUNqQztTQUNGO1FBQ0QsZUFBZSxvQkFBb0I7UUFDbkMsWUFBWSxvQkFBb0I7T0FDakMsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLHlCQUF5QixVQUFVO01BQ3ZDLE1BQU0sZUFBZSxZQUFZLENBQUM7UUFDaEMseUNBQXlDLFdBQVc7VUFDbEQsTUFBTSxPQUFPLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1VBQ3JDLE1BQU0sVUFBVSxNQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sVUFBVSxRQUFRLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztVQUMxRSxJQUFJLE9BQU8sRUFBRTtZQUNYLE1BQU0sYUFBYSxPQUFPLFdBQVcsQ0FBQztZQUN0QyxJQUFJLFVBQVUsSUFBSSwwQkFBMEIsS0FBSyxDQUFDLFVBQVUsU0FBUyxDQUFDLEVBQUU7Y0FDdEUsTUFBTSxLQUFLLE1BQU0sVUFBVSxZQUFZLEVBQUUsQ0FBQztjQUMxQyxNQUFNLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztjQUN0QyxNQUFNLFVBQVUsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3JDO1dBQ0Y7U0FDRjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLDZCQUE2QixVQUFVO01BQzNDLE1BQU0sZUFBZSxZQUFZLENBQUM7UUFDaEMseUNBQXlDLFdBQVc7VUFDbEQsTUFBTSxPQUFPLE1BQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxVQUFVLFFBQVEsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1VBQ3ZFLE9BQU8sSUFBSSxLQUFLLE9BQU8sS0FBSyxxQkFBcUIsSUFBSSxJQUFJLFFBQVEsS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLG1CQUFtQixJQUFJLElBQUksUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDO1NBQ3pJO09BQ0YsRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNiLENBQUM7SUFDRixNQUFNLHFCQUFxQixVQUFVO01BQ25DLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQy9CLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3BDLENBQUM7O0lBRUYsTUFBTSxvQkFBb0IsbUNBQW1DO01BQzNELE1BQU0sTUFBTSxNQUFNLElBQUksQ0FBQztNQUN2QixNQUFNLFdBQVcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLGNBQWMsS0FBSyxJQUFJLENBQUM7TUFDMUUsTUFBTSxpQkFBaUIsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ3hGLE9BQU8sUUFBUSxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLFFBQVEsQ0FBQyxDQUFDO0tBQ2hFLENBQUM7SUFDRixNQUFNLFNBQVMsb0JBQW9CO01BQ2pDLE1BQU0sTUFBTSxNQUFNLElBQUksQ0FBQztNQUN2QixNQUFNLE1BQU0sTUFBTSxVQUFVLE9BQU8sRUFBRSxDQUFDO01BQ3RDLE1BQU0sT0FBTyxNQUFNLEdBQUcsTUFBTSxVQUFVLFNBQVMsRUFBRSxHQUFHLE1BQU0sVUFBVSxPQUFPLEVBQUUsQ0FBQztNQUM5RSxNQUFNLFlBQVksTUFBTSxHQUFHLEdBQUcsZUFBZSxHQUFHLEdBQUcsYUFBYSxDQUFDO01BQ2pFLE1BQU0sT0FBTyxlQUFlLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQzdDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLGtCQUFrQixFQUFFO1FBQ3BDLE9BQU87T0FDUjtNQUNELE1BQU0sV0FBVyxNQUFNLEdBQUcsUUFBUSxHQUFHLE9BQU8sQ0FBQztNQUM3QyxNQUFNLGVBQWUsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDaEQsaUJBQWlCLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxlQUFlO1FBQ25FLE1BQU0sV0FBVyxjQUFjLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQy9GLFFBQVEsQ0FBQyxXQUFXLEVBQUUsWUFBWSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN0RCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sU0FBUyxDQUFDLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDMUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO09BQzNDLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLGVBQWUsVUFBVSxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BELE1BQU0sY0FBYyxVQUFVLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7O0lBRXBELE1BQU0scUJBQXFCLFVBQVU7TUFDbkMsTUFBTSxlQUFlLFlBQVksQ0FBQztRQUNoQyxzQkFBc0IsTUFBTTtVQUMxQixZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdEI7UUFDRCxxQkFBcUIsTUFBTTtVQUN6QixXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDckI7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDOztJQUVGLE1BQU0scUJBQXFCLFVBQVU7TUFDbkMsTUFBTSxlQUFlLFlBQVksQ0FBQztRQUNoQyxpQkFBaUIsTUFBTTtVQUNyQixXQUFXLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ2pDO1FBQ0Qsa0JBQWtCLDBCQUEwQjtVQUMxQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3pCO1FBQ0QsaUJBQWlCLDJCQUEyQjtVQUMxQyxXQUFXLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ2hDO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLHFCQUFxQixVQUFVO01BQ25DLE1BQU0sZUFBZSxZQUFZLENBQUM7UUFDaEMsb0JBQW9CLDBCQUEwQjtVQUM1QyxJQUFJLFVBQVUsQ0FBQyxDQUFDO1VBQ2hCLE1BQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxVQUFVLFFBQVEsRUFBRSxFQUFFLFFBQVE7WUFDdkQsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxFQUFFLEtBQUssS0FBSyxFQUFFO2NBQzVDLE1BQU0sVUFBVSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Y0FDOUIsT0FBTyxLQUFLLENBQUM7YUFDZCxNQUFNO2NBQ0wsT0FBTyxJQUFJLENBQUM7YUFDYjtXQUNGLEVBQUUsTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQ3RCO1FBQ0QsZUFBZSwwQkFBMEI7VUFDdkMsTUFBTSxVQUFVLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNoQztRQUNELFdBQVcsTUFBTTtVQUNmLE1BQU0sY0FBYyxNQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sVUFBVSxTQUFTLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1VBQy9GLElBQUksV0FBVyxFQUFFO1lBQ2YsTUFBTSxNQUFNLE1BQU0sSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNuQyxHQUFHLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sVUFBVSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7V0FDOUI7U0FDRjtPQUNGLENBQUMsQ0FBQztLQUNKLENBQUM7O0lBRUYsTUFBTSx1QkFBdUIsVUFBVTtNQUNyQyxNQUFNLGVBQWUsWUFBWSxDQUFDO1FBQ2hDLGVBQWUsMEJBQTBCO1VBQ3ZDLE1BQU0sT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsTUFBTSxVQUFVLFFBQVEsRUFBRSxDQUFDO1VBQ3JGLElBQUksSUFBSSxLQUFLLE1BQU0sUUFBUSxFQUFFLEVBQUU7WUFDN0IsTUFBTSxLQUFLLE1BQU0sVUFBVSxZQUFZLEVBQUUsQ0FBQztZQUMxQyxNQUFNLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5QixNQUFNLFVBQVUsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1dBQ3JDO1NBQ0Y7UUFDRCxVQUFVLE1BQU07VUFDZCxNQUFNLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztTQUN6QjtRQUNELFVBQVUsMEJBQTBCO1VBQ2xDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDO1NBQy9CO1FBQ0Qsb0JBQW9CLE1BQU07VUFDeEIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUFNLFVBQVUsQ0FBQztVQUNyQyxNQUFNLFVBQVUsRUFBRSxDQUFDO1NBQ3BCO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sbUJBQW1CLFVBQVU7TUFDakMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDM0Isa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDM0Isa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDM0Isa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDM0Isa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDM0Isa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDM0Isa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDM0Isa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDM0Isa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDM0Isa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDM0Isa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDM0Isb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDOUIsQ0FBQzs7SUFFRixNQUFNLHdCQUF3QixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzdDLE1BQU0seUJBQXlCLFdBQVcsVUFBVSxDQUFDLHFCQUFxQixFQUFFLE9BQU8sWUFBWSxFQUFFLENBQUMsQ0FBQztJQUNuRyxxQkFBcUI7TUFDbkIsV0FBVyxTQUFTO1FBQ2xCLElBQUksU0FBUyxHQUFHO1VBQ2QsT0FBTyxFQUFFO1VBQ1QsTUFBTSxFQUFFO1VBQ1IsT0FBTyxFQUFFO1NBQ1YsQ0FBQztRQUNGLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQztPQUN0QjtNQUNELFdBQVcsVUFBVSxLQUFLLEtBQUssZUFBZTtRQUM1QyxNQUFNLFNBQVMsSUFBSSxPQUFPLENBQUM7UUFDM0IsTUFBTSxtQkFBbUIsT0FBTyxZQUFZLEVBQUUsQ0FBQztRQUMvQyxNQUFNLFlBQVksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUM7UUFDOUUsSUFBSSxNQUFNLFFBQVEsRUFBRTtVQUNsQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFBSSxnQkFBZ0IsS0FBSyxVQUFVLEVBQUU7VUFDbkMsSUFBSSxDQUFDLHNDQUFzQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNoRixNQUFNLE1BQU0sRUFBRSxDQUFDO1dBQ2hCLE1BQU07WUFDTCxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7V0FDakI7U0FDRjtRQUNELE1BQU0sWUFBWSxNQUFNLFNBQVMsQ0FBQyxtQkFBbUIsRUFBRTtVQUNyRCxPQUFPO1VBQ1AsRUFBRTtVQUNGLEtBQUs7U0FDTixDQUFDLENBQUM7UUFDSCxJQUFJLFNBQVMsbUJBQW1CLEVBQUUsRUFBRTtVQUNsQyxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsTUFBTSxPQUFPLElBQUksU0FBUyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNsRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUNwQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1VBQ2xDLE1BQU0sU0FBUyxDQUFDLGFBQWEsRUFBRTtZQUM3QixPQUFPO1lBQ1AsRUFBRTtZQUNGLEtBQUs7V0FDTixDQUFDLENBQUM7VUFDSCxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7T0FDZDtNQUNELGlCQUFpQixVQUFVO1FBQ3pCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sT0FBTyxTQUFTLEVBQUUsSUFBSSxJQUFJLE9BQU8sUUFBUSxFQUFFO1VBQzVGLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxNQUFNLG1CQUFtQixPQUFPLFlBQVksRUFBRSxDQUFDO1FBQy9DLE1BQU0sT0FBTyxJQUFJLFNBQVMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDbkQsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7VUFDcEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUMvQjtRQUNELE9BQU8sS0FBSyxDQUFDO09BQ2Q7TUFDRCxpQkFBaUIsVUFBVTtRQUN6QixJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLE9BQU8sU0FBUyxFQUFFLElBQUksSUFBSSxPQUFPLFFBQVEsRUFBRTtVQUM1RixPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsTUFBTSxtQkFBbUIsT0FBTyxZQUFZLEVBQUUsQ0FBQztRQUMvQyxNQUFNLE9BQU8sSUFBSSxTQUFTLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ25ELElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ3BCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDL0I7UUFDRCxPQUFPLEVBQUUsQ0FBQztPQUNYO01BQ0QsV0FBVyxjQUFjLE9BQU8sTUFBTSxFQUFFO1FBQ3RDLE1BQU0sV0FBVyxJQUFJLFNBQVMsQ0FBQztRQUMvQixNQUFNLENBQUMsV0FBVyxFQUFFLHVCQUF1QjtVQUN6QyxNQUFNLENBQUMsT0FBTyxZQUFZLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQVc7WUFDbEQsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBQztXQUNwQyxDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7T0FDSjtNQUNELFVBQVUsMkJBQTJCO1FBQ25DLE1BQU0sbUJBQW1CLE9BQU8sWUFBWSxFQUFFLENBQUM7UUFDL0MsSUFBSSxTQUFTLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLHlCQUF5QixRQUFRLEtBQUssQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ3BKO01BQ0QscUJBQXFCLFVBQVU7UUFDN0IsTUFBTSxtQkFBbUIsT0FBTyxZQUFZLEVBQUUsQ0FBQztRQUMvQyxJQUFJLElBQUksU0FBUyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtVQUN4QyxPQUFPLElBQUksQ0FBQztTQUNiLE1BQU07VUFDTCxPQUFPLEtBQUssQ0FBQztTQUNkO09BQ0Y7TUFDRCxvQkFBb0IsMkJBQTJCO1FBQzdDLElBQUksU0FBUyxNQUFNLENBQUMsT0FBTyxZQUFZLEVBQUUsQ0FBQyxHQUFHLE1BQU0sUUFBUSxLQUFLLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUM7T0FDNUg7TUFDRCxvQkFBb0IsMkJBQTJCO1FBQzdDLElBQUksU0FBUyxNQUFNLENBQUMsT0FBTyxZQUFZLEVBQUUsQ0FBQyxHQUFHLE1BQU0sUUFBUSxLQUFLLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUM7T0FDNUg7S0FDRjs7SUFFRCxNQUFNLDhCQUE4QiwwQkFBMEIsQ0FBQztJQUMvRCxNQUFNLGNBQWMscUJBQXFCO01BQ3ZDLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUMzQixRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO09BQ3BCLE1BQU0sSUFBSSxLQUFLLEVBQUU7UUFDaEIsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztPQUNqQjtLQUNGLENBQUM7SUFDRixNQUFNLHdCQUF3Qix3QkFBd0I7TUFDcEQsSUFBSTtRQUNGLE1BQU0sT0FBTyxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO09BQ3hELENBQUMsV0FBVztPQUNaO0tBQ0YsQ0FBQztJQUNGLE1BQU0scUJBQXFCLGdCQUFnQjtNQUN6QyxHQUFHLElBQUksZ0JBQWdCLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUM7S0FDcEQsQ0FBQztJQUNGLE1BQU0sK0JBQStCLE9BQU87TUFDMUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsMkJBQTJCLENBQUMsRUFBRSxPQUFPO1FBQzNELEtBQUssQ0FBQyxHQUFHLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDaEQsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ2hDLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLDhCQUE4QixPQUFPO01BQ3pDLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLDJCQUEyQixFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTztRQUM1RSxRQUFRLENBQUMsR0FBRyxFQUFFLDJCQUEyQixDQUFDLENBQUM7UUFDM0Msa0JBQWtCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQy9CLENBQUMsQ0FBQztLQUNKLENBQUM7SUFDRixNQUFNLHNCQUFzQixVQUFVO01BQ3BDLFFBQVEsS0FBSyxDQUFDLE1BQU0sVUFBVSxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTztRQUNwRCxHQUFHLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLENBQUM7T0FDMUMsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sdUJBQXVCLFVBQVU7TUFDckMsTUFBTSxVQUFVLE9BQU8sQ0FBQyxNQUFNLFVBQVUsT0FBTyxFQUFFLENBQUMsQ0FBQztLQUNwRCxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsbUJBQW1CO01BQ3hDLE1BQU0sT0FBTyxZQUFZLFFBQVEsQ0FBQyxNQUFNLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDcEQsV0FBVyxDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRSxLQUFLLENBQUMsQ0FBQztNQUNqRCxJQUFJLEtBQUssRUFBRTtRQUNULE1BQU0sVUFBVSxpQkFBaUIsZUFBZSxFQUFFLENBQUM7UUFDbkQsTUFBTSxvQkFBb0IsY0FBYyxFQUFFLENBQUM7UUFDM0MsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLGtCQUFrQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUNwQyxNQUFNO1FBQ0wsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksTUFBTSxnQkFBZ0IsRUFBRSxFQUFFO1VBQzVCLGtCQUFrQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNoQztRQUNELDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckQscUJBQXFCLENBQUMsTUFBTSxFQUFFLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxzQkFBc0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3RCxJQUFJLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1VBQzlCLE1BQU0sTUFBTSxFQUFFLENBQUM7U0FDaEI7UUFDRCxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixNQUFNLFlBQVksRUFBRSxDQUFDO09BQ3RCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sYUFBYSxVQUFVLE1BQU0sU0FBUyxDQUFDO0lBQzdDLE1BQU0sa0JBQWtCLFVBQVU7TUFDaEMsTUFBTSxPQUFPLG1CQUFtQixDQUFDLGlCQUFpQixFQUFFLFNBQVM7UUFDM0QsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7VUFDdEIsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRO1lBQ3BCLElBQUksS0FBSyxDQUFDLDJCQUEyQixFQUFFLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztZQUNyRSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQztXQUN2QyxDQUFDLENBQUM7U0FDSjtPQUNGLENBQUMsQ0FBQztNQUNILE1BQU0sV0FBVyxtQkFBbUIsQ0FBQywyQkFBMkIsRUFBRSxTQUFTO1FBQ3pFLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1VBQ3RCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUTtZQUNwQixJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUM7V0FDdEUsQ0FBQyxDQUFDO1NBQ0o7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLFdBQVcsWUFBWSxDQUFDLDJCQUEyQixDQUFDLENBQUM7S0FDNUQsQ0FBQztJQUNGLE1BQU0saUNBQWlDLFVBQVU7TUFDL0MsSUFBSSxNQUFNLFdBQVcsRUFBRTtRQUNyQixlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDekIsTUFBTTtRQUNMLE1BQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNO1VBQ3pCLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN6QixDQUFDLENBQUM7T0FDSjtLQUNGLENBQUM7SUFDRixNQUFNLGVBQWUsS0FBSyxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUM7SUFDN0MsTUFBTSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixNQUFNLHlCQUF5QixLQUFLLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0RSxNQUFNLG1CQUFtQixpQkFBaUI7TUFDeEMsTUFBTSxTQUFTLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLFFBQVEsQ0FBQyxNQUFNLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUN0RSxPQUFPLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDakUsQ0FBQztJQUNGLE1BQU0sd0JBQXdCLGVBQWU7TUFDM0MsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUM1QyxNQUFNLE1BQU0sWUFBWSxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRO1VBQ3pDLENBQUMsZUFBZSxFQUFFLENBQUM7VUFDbkIsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNuQixNQUFNLFdBQVcsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLFFBQVEsR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkYsSUFBSSxRQUFRLE9BQU8sRUFBRTtjQUNuQixNQUFNLFVBQVUsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNwRDtXQUNGLE1BQU07WUFDTCxNQUFNLEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLHNHQUFzRyxDQUFDLENBQUM7V0FDckk7U0FDRixDQUFDLENBQUM7T0FDSixNQUFNLElBQUksc0JBQXNCLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDcEMsTUFBTSxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDNUI7S0FDRixDQUFDO0lBQ0YsTUFBTSxvQ0FBb0MsVUFBVTtNQUNsRCxNQUFNLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSztRQUMxQixJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtVQUN0QixDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3BCO09BQ0YsQ0FBQyxDQUFDO01BQ0gsTUFBTSxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsS0FBSztRQUMvQixJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtVQUN0QixDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3BCO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQzs7SUFFRixNQUFNLGVBQWUsS0FBSyxRQUFRLENBQUMsOEhBQThILEdBQUcsdUhBQXVILEdBQUcsd0NBQXdDLEdBQUcsNkZBQTZGLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDN2Esc0JBQXNCO01BQ3BCLGVBQWUsT0FBTztRQUNwQixPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDO09BQzNDO01BQ0QsV0FBVyxXQUFXO1FBQ3BCLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLFNBQVMsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQy9CLElBQUksTUFBTSxHQUFHLElBQUksU0FBUyxNQUFNLElBQUksSUFBSSxDQUFDO1FBQ3pDLElBQUksWUFBWSxHQUFHLElBQUksU0FBUyxZQUFZLElBQUksS0FBSyxDQUFDO09BQ3ZEO01BQ0QsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDbEM7TUFDRCxRQUFRLGFBQWE7UUFDbkIsTUFBTSxTQUFTLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbEMsTUFBTSxRQUFRLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDO1FBQzVGLElBQUksSUFBSSxTQUFTLFdBQVcsRUFBRTtVQUM1QixJQUFJLFNBQVMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2pDO1FBQ0QsTUFBTSxXQUFXLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLElBQUksUUFBUSxFQUFFO1VBQ1osS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksUUFBUSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMvQyxNQUFNLFdBQVcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksUUFBUSxRQUFRLEVBQUU7Y0FDcEIsU0FBUzthQUNWO1lBQ0QsSUFBSSxRQUFRLEtBQUssRUFBRTtjQUNqQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxLQUFLLENBQUMsQ0FBQzthQUNqQztZQUNELElBQUksS0FBSyw4QkFBOEIsRUFBRSxFQUFFO2NBQ3pDLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFDRCxJQUFJLFFBQVEsS0FBSyxLQUFLLENBQUMsSUFBSSxNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUssS0FBSyxFQUFFO2NBQ25ELEtBQUssZUFBZSxFQUFFLENBQUM7Y0FDdkIsT0FBTyxLQUFLLENBQUM7YUFDZDtXQUNGO1NBQ0Y7UUFDRCxPQUFPLEtBQUssQ0FBQztPQUNkO01BQ0QsRUFBRSxpQ0FBaUM7UUFDakMsSUFBSSxRQUFRLEtBQUssS0FBSyxFQUFFO1VBQ3RCLFdBQVcsS0FBSyxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxRQUFRLEVBQUU7VUFDWixNQUFNLGtCQUFrQjtZQUN0QixNQUFNLFFBQVE7WUFDZCxTQUFTLEtBQUs7V0FDZixDQUFDO1VBQ0YsSUFBSSxLQUFLLEVBQUU7WUFDVCxLQUFLLE9BQU8sQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7V0FDdEM7VUFDRCxNQUFNLFFBQVEsSUFBSSxZQUFZLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQzVDLElBQUksSUFBSSxLQUFLLE9BQU8sQ0FBQztVQUNyQixPQUFPLENBQUMsRUFBRSxFQUFFO1lBQ1YsTUFBTSxjQUFjLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixJQUFJLFdBQVcsSUFBSSxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtjQUNiLFdBQVcsRUFBRSxDQUFDO2NBQ2QsSUFBSSxZQUFZLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ3JDO1lBQ0QsSUFBSSxPQUFPLEVBQUU7Y0FDWCxXQUFXO2dCQUNULGVBQWU7Z0JBQ2YsR0FBRyxRQUFRO2VBQ1osQ0FBQzthQUNILE1BQU07Y0FDTCxXQUFXO2dCQUNULEdBQUcsUUFBUTtnQkFDWCxlQUFlO2VBQ2hCLENBQUM7YUFDSDtZQUNELElBQUksU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLFFBQVEsQ0FBQztXQUN2QztTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7T0FDYjtNQUNELEdBQUcsaUJBQWlCO1FBQ2xCLElBQUksSUFBSSxFQUFFO1VBQ1IsTUFBTSxRQUFRLElBQUksWUFBWSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztVQUM1QyxJQUFJLElBQUksS0FBSyxPQUFPLENBQUM7VUFDckIsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUNWLE1BQU0sY0FBYyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxXQUFXLElBQUksU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxXQUFXLEVBQUU7Y0FDaEIsTUFBTSxDQUFDLElBQUksU0FBUyxFQUFFLHlCQUF5QjtnQkFDN0MsSUFBSSxZQUFZLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNyQyxPQUFPLElBQUksU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2VBQ25DLENBQUMsQ0FBQztjQUNILE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxJQUFJLFFBQVEsRUFBRTtjQUNaLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2IsUUFBUSxPQUFPLEdBQUcsQ0FBQyxDQUFDO2VBQ3JCLE1BQU07Z0JBQ0wsTUFBTSxtQkFBbUIsV0FBVyxDQUFDLFFBQVEsRUFBRSxXQUFXLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDO2dCQUNyRixXQUFXLGdCQUFnQixLQUFLLENBQUM7Z0JBQ2pDLElBQUksU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLFFBQVEsQ0FBQztnQkFDdEMsTUFBTSxDQUFDLGdCQUFnQixLQUFLLEVBQUUsV0FBVztrQkFDdkMsT0FBTyxRQUFRLEdBQUcsSUFBSSxDQUFDO2lCQUN4QixDQUFDLENBQUM7ZUFDSjtjQUNELElBQUksQ0FBQyxRQUFRLE9BQU8sRUFBRTtnQkFDcEIsSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM5QixPQUFPLElBQUksU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2VBQ25DO2FBQ0Y7V0FDRjtTQUNGLE1BQU07VUFDTCxNQUFNLENBQUMsSUFBSSxTQUFTLEVBQUUsa0JBQWtCO1lBQ3RDLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztXQUMvQixDQUFDLENBQUM7VUFDSCxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7U0FDcEI7UUFDRCxPQUFPLElBQUksQ0FBQztPQUNiO01BQ0QsSUFBSSwwQkFBMEI7UUFDNUIsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQztPQUN6RDtNQUNELEdBQUcsT0FBTztRQUNSLE9BQU8sSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMxQixNQUFNLFVBQVUsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsT0FBTyxFQUFFLENBQUMsT0FBTyxJQUFJLE9BQU8sT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDO09BQzVDO0tBQ0Y7O0lBRUQsTUFBTSxxQkFBcUIsT0FBTztNQUNoQyxJQUFJLENBQUMsR0FBRyxpQkFBaUIsRUFBRTtRQUN6QixHQUFHLGlCQUFpQixHQUFHLElBQUksZUFBZSxDQUFDO1VBQ3pDLE9BQU8sR0FBRztVQUNWLGFBQWEsaUJBQWlCO1lBQzVCLElBQUksZUFBZSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxrQkFBa0IsRUFBRTtjQUMzRCxHQUFHLGtCQUFrQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNwQztXQUNGO1NBQ0YsQ0FBQyxDQUFDO09BQ0o7TUFDRCxPQUFPLEdBQUcsaUJBQWlCLENBQUM7S0FDN0IsQ0FBQztJQUNGLE1BQU0sYUFBYTtNQUNqQixJQUFJLHFCQUFxQjtRQUN2QixPQUFPLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7T0FDMUM7TUFDRCxRQUFRLHFCQUFxQjtRQUMzQixNQUFNLE9BQU8sSUFBSSxDQUFDO1FBQ2xCLElBQUksSUFBSSxRQUFRLElBQUksSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO1VBQzFELE9BQU8sV0FBVyxDQUFDLElBQUksWUFBWSxFQUFFLEVBQUUsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUM1RjtRQUNELE1BQU0saUJBQWlCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JFLElBQUksTUFBTSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sRUFBRTtVQUNuQyxJQUFJLFNBQVMsSUFBSSxPQUFPLEVBQUUsQ0FBQztVQUMzQixPQUFPLE1BQU0sSUFBSSxDQUFDLGNBQWMscUJBQXFCLEVBQUUsRUFBRTtZQUN2RCxNQUFNLFNBQVMsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdDLFNBQVMsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUM7V0FDdEQ7U0FDRjtRQUNELE9BQU8sY0FBYyxDQUFDO09BQ3ZCO01BQ0QsRUFBRSwwQkFBMEI7UUFDMUIsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7T0FDN0Q7TUFDRCxHQUFHLGlCQUFpQjtRQUNsQixPQUFPLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO09BQ3JEO01BQ0QsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztPQUN0RDtNQUNELGlCQUFpQixPQUFPO1FBQ3RCLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUMzQztLQUNGLENBQUM7O0lBRUYsTUFBTSxRQUFRLFFBQVEsSUFBSSxDQUFDO0lBQzNCLElBQUksd0JBQXdCLENBQUM7SUFDN0IsTUFBTSxpQkFBaUIsdUJBQXVCO01BQzVDLElBQUksU0FBUyxLQUFLLGlCQUFpQixFQUFFO1FBQ25DLE9BQU8sTUFBTSxPQUFPLEVBQUUsQ0FBQztPQUN4QjtNQUNELElBQUksQ0FBQyxNQUFNLE9BQU8sSUFBSSwwREFBMEQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ2hHLE9BQU8sTUFBTSxPQUFPLEVBQUUsZ0JBQWdCLENBQUM7T0FDeEM7TUFDRCxNQUFNLFlBQVksWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3ZDLElBQUksU0FBUyxFQUFFO1FBQ2IsSUFBSSxDQUFDLE1BQU0sVUFBVSxFQUFFO1VBQ3JCLE1BQU0sVUFBVSxHQUFHLEtBQUssT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsT0FBTyxNQUFNLFVBQVUsQ0FBQztPQUN6QjtNQUNELE9BQU8sTUFBTSxRQUFRLEVBQUUsQ0FBQztLQUN6QixDQUFDO0lBQ0YsTUFBTSxjQUFjLFVBQVUsQ0FBQyxNQUFNLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRSxNQUFNLFlBQVksMEJBQTBCO01BQzFDLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3ZCLE1BQU0sU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUMvQixNQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzdCLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztPQUNsQztLQUNGLENBQUM7SUFDRixNQUFNLG9CQUFvQix1QkFBdUI7TUFDL0MsSUFBSSxDQUFDLE1BQU0sVUFBVSxFQUFFO1FBQ3JCLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztPQUN2QjtNQUNELElBQUksTUFBTSxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksTUFBTSxRQUFRLEVBQUU7UUFDakQsT0FBTztPQUNSO01BQ0QsTUFBTSxlQUFlLGNBQWMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7TUFDdkQsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDeEIsSUFBSSxDQUFDLHdCQUF3QixFQUFFO1VBQzdCLDJCQUEyQixFQUFFLENBQUM7VUFDOUIsTUFBTSxjQUFjLEdBQUcsQ0FBQyxjQUFjLEVBQUUsTUFBTTtZQUM1QyxJQUFJLENBQUMsTUFBTSxjQUFjLGFBQWEsRUFBRTtjQUN0QyxJQUFJLHdCQUF3QixFQUFFO2dCQUM1QixNQUFNLENBQUMsd0JBQXdCLEVBQUUsa0JBQWtCO2tCQUNqRCxNQUFNLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDakQsQ0FBQyxDQUFDO2dCQUNILDJCQUEyQixJQUFJLENBQUM7ZUFDakM7YUFDRjtXQUNGLENBQUMsQ0FBQztTQUNKO1FBQ0QsSUFBSSx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsRUFBRTtVQUN2QyxPQUFPO1NBQ1I7UUFDRCxNQUFNLFdBQVcsS0FBSztVQUNwQixNQUFNLFNBQVMsQ0FBQyxPQUFPLENBQUM7VUFDeEIsTUFBTSxVQUFVLE1BQU0sY0FBYyxJQUFJLEVBQUUsQ0FBQztVQUMzQyxJQUFJLElBQUksT0FBTyxPQUFPLENBQUM7VUFDdkIsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUNWLE1BQU0sT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLElBQUksSUFBSSxLQUFLLE1BQU0sSUFBSSxLQUFLLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUU7Y0FDcEQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDckM7V0FDRjtTQUNGLENBQUM7UUFDRix3QkFBd0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDL0MsS0FBSyxLQUFLLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztPQUMvQyxNQUFNO1FBQ0wsTUFBTSxXQUFXLEtBQUs7VUFDcEIsU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDakMsQ0FBQztRQUNGLEtBQUssS0FBSyxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUMsTUFBTSxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsUUFBUSxDQUFDO09BQ3hDO0tBQ0YsQ0FBQztJQUNGLE1BQU0sbUJBQW1CO01BQ3ZCLEdBQUcsVUFBVTtNQUNiLHlCQUF5QixHQUFHO1FBQzFCLE1BQU0sT0FBTyxJQUFJLENBQUM7UUFDbEIsS0FBSyxLQUFLLENBQUMsSUFBSSxxQkFBcUIsRUFBRSxRQUFRO1VBQzVDLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUMvQixDQUFDLENBQUM7T0FDSjtNQUNELGlCQUFpQixjQUFjO1FBQzdCLE1BQU0sT0FBTyxJQUFJLENBQUM7UUFDbEIsSUFBSSxJQUFJLEtBQUssT0FBTyxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUU7VUFDdkMsT0FBTztTQUNSO1FBQ0QsSUFBSSxJQUFJLFFBQVEsRUFBRTtVQUNoQixPQUFPO1NBQ1I7UUFDRCxJQUFJLEtBQUssRUFBRTtVQUNULElBQUksSUFBSSxZQUFZLEVBQUU7WUFDcEIsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1dBQy9CLE1BQU07WUFDTCxJQUFJLENBQUMsSUFBSSxxQkFBcUIsRUFBRTtjQUM5QixJQUFJLHFCQUFxQixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDcEMsTUFBTTtjQUNMLElBQUkscUJBQXFCLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN0QztXQUNGO1NBQ0YsTUFBTSxJQUFJLElBQUksWUFBWSxJQUFJLElBQUksVUFBVSxFQUFFO1VBQzdDLElBQUksSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztVQUN4RSxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdCO09BQ0Y7TUFDRCxxQkFBcUIsR0FBRztRQUN0QixNQUFNLE9BQU8sSUFBSSxDQUFDO1FBQ2xCLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzVCLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQztRQUNyQixJQUFJLElBQUksVUFBVSxFQUFFO1VBQ2xCLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBRSxpQkFBaUI7WUFDdEMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztXQUMxRCxDQUFDLENBQUM7VUFDSCxPQUFPLElBQUksVUFBVSxDQUFDO1NBQ3ZCO1FBQ0QsSUFBSSxDQUFDLElBQUksT0FBTyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7VUFDL0IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO1VBQ25CLEdBQUcsT0FBTyxDQUFDLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQztVQUMxQixHQUFHLE9BQU8sQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDM0I7UUFDRCxJQUFJLEdBQUcsRUFBRTtVQUNQLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQ2pCLEdBQUcsT0FBTyxDQUFDLElBQUksYUFBYSxFQUFFLENBQUMsQ0FBQztTQUNqQztPQUNGO0tBQ0YsQ0FBQzs7SUFFRixNQUFNLHNCQUFzQixTQUFTO01BQ25DLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ25CLE9BQU87VUFDTCxPQUFPLEtBQUssTUFBTSxDQUFDLE1BQU0sQ0FBQztVQUMxQixPQUFPLElBQUk7U0FDWixDQUFDO09BQ0gsTUFBTSxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUU7UUFDckMsT0FBTztVQUNMLEtBQUs7VUFDTCxPQUFPLElBQUk7U0FDWixDQUFDO09BQ0gsTUFBTTtRQUNMLE9BQU87VUFDTCxPQUFPLEtBQUs7VUFDWixTQUFTLENBQUMsK0RBQStELENBQUM7U0FDM0UsQ0FBQztPQUNIO0tBQ0YsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLFFBQVE7TUFDbEMsTUFBTSxZQUFZLENBQUMsTUFBTTtRQUN2QixRQUFRLElBQUk7YUFDUCxPQUFPO1VBQ1YsT0FBTyxTQUFTLENBQUM7YUFDZCxTQUFTO1VBQ1osT0FBTyxTQUFTLENBQUM7YUFDZCxVQUFVO1VBQ2IsT0FBTyxVQUFVLENBQUM7YUFDZixRQUFRO1VBQ1gsT0FBTyxRQUFRLENBQUM7YUFDYixRQUFRO1VBQ1gsT0FBTyxRQUFRLENBQUM7YUFDYixRQUFRO1VBQ1gsT0FBTyxRQUFRLENBQUM7YUFDYixVQUFVO1VBQ2IsT0FBTyxtQkFBbUIsQ0FBQzthQUN4QixVQUFVO1VBQ2IsT0FBTyxPQUFPLFNBQVMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDcEMsUUFBUTtVQUNYLE9BQU8sT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDOztVQUVoQyxPQUFPLE1BQU0sQ0FBQztTQUNmO09BQ0YsR0FBRyxDQUFDO01BQ0wsT0FBTyxTQUFTLFlBQVksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbEYsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLFFBQVEsUUFBUSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUM7SUFDdkQsTUFBTSxrQkFBa0IscUJBQXFCO01BQzNDLE1BQU0saUJBQWlCLFNBQVMsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxNQUFNLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDaEYsT0FBTyxPQUFPLEdBQUcsY0FBYyxDQUFDO0tBQ2pDLENBQUM7SUFDRixNQUFNLGdCQUFnQixVQUFVLE1BQU0sTUFBTSxDQUFDO0lBQzdDLE1BQU0sZUFBZSxtQkFBbUIsVUFBVSxFQUFFLEtBQUs7TUFDdkQsTUFBTSxTQUFTLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUNoQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNyQixPQUFPLE1BQU0sR0FBRztVQUNkLE9BQU8sS0FBSztVQUNaLE9BQU8sSUFBSTtTQUNaLEdBQUc7VUFDRixPQUFPLEtBQUs7VUFDWixPQUFPO1NBQ1IsQ0FBQztPQUNILE1BQU07UUFDTCxPQUFPLE1BQU0sQ0FBQztPQUNmO0tBQ0YsQ0FBQztJQUNGLE1BQU0sc0JBQXNCLG1DQUFtQztNQUM3RCxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQzlCLE1BQU0sU0FBUyxZQUFZLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3JELElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1VBQ3pCLE9BQU8sTUFBTSxNQUFNLENBQUM7U0FDckIsTUFBTTtVQUNMLE9BQU8sTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLHNDQUFzQyxHQUFHLElBQUksRUFBRSxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ25HO09BQ0Y7TUFDRCxPQUFPLFNBQVMsQ0FBQztLQUNsQixDQUFDO0lBQ0YsTUFBTSxXQUFXLDRCQUE0QjtNQUMzQyxNQUFNLFdBQVcsRUFBRSxDQUFDO01BQ3BCLE1BQU0sU0FBUyxFQUFFLENBQUM7TUFDbEIsTUFBTSxXQUFXLDRCQUE0QjtRQUMzQyxNQUFNLFNBQVMsWUFBWSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM5QyxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRTtVQUN6QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxNQUFNLENBQUM7VUFDNUIsT0FBTyxJQUFJLENBQUM7U0FDYixNQUFNO1VBQ0wsT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7VUFDdkYsT0FBTyxLQUFLLENBQUM7U0FDZDtPQUNGLENBQUM7TUFDRixNQUFNLFdBQVcsZ0JBQWdCO1FBQy9CLE1BQU0sWUFBWSxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxVQUFVLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQztRQUM3RixNQUFNLGVBQWUsbUJBQW1CLENBQUMsSUFBSSxFQUFFLElBQUksUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3hFLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRztVQUNmLEdBQUcsSUFBSTtVQUNQLFNBQVMsWUFBWTtVQUNyQixTQUFTO1NBQ1YsQ0FBQztRQUNGLE1BQU0sWUFBWSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDakYsU0FBUyxLQUFLLENBQUMsU0FBUyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO09BQzNELENBQUM7TUFDRixNQUFNLGVBQWUsUUFBUSxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ25ELE1BQU0sTUFBTSxRQUFRLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7TUFDeEgsTUFBTSxNQUFNLGlCQUFpQjtRQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ3ZCLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSwyRkFBMkYsQ0FBQyxDQUFDLENBQUM7VUFDdEgsT0FBTyxLQUFLLENBQUM7U0FDZCxNQUFNO1VBQ0wsTUFBTSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUM1QixJQUFJLElBQUksVUFBVSxFQUFFO1lBQ2xCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSw4Q0FBOEMsQ0FBQyxDQUFDLENBQUM7WUFDMUUsT0FBTyxLQUFLLENBQUM7V0FDZCxNQUFNO1lBQ0wsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQyxDQUFDO1dBQzlDO1NBQ0Y7T0FDRixDQUFDO01BQ0YsTUFBTSxRQUFRLFFBQVE7UUFDcEIsTUFBTSxhQUFhLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLFVBQVUsRUFBRTtVQUNkLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3JCO1FBQ0QsT0FBTyxVQUFVLENBQUM7T0FDbkIsQ0FBQztNQUNGLE1BQU0sUUFBUSxRQUFRLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDMUMsT0FBTztRQUNMLFFBQVE7UUFDUixZQUFZO1FBQ1osR0FBRztRQUNILEdBQUc7UUFDSCxLQUFLO1FBQ0wsS0FBSztPQUNOLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sZUFBZTtNQUNuQixRQUFRO01BQ1IsVUFBVTtLQUNYLENBQUM7SUFDRixNQUFNLGVBQWUsOENBQThDO01BQ2pFLE1BQU0sVUFBVSxjQUFjLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDO01BQ2pELE1BQU0sVUFBVSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDckMsSUFBSTtRQUNGLE9BQU8sU0FBUyxFQUFFLENBQUM7T0FDcEIsQ0FBQyxVQUFVO1FBQ1YsT0FBTyxNQUFNLENBQUMsQ0FBQyxxQ0FBcUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEUsT0FBTztPQUNSO01BQ0QsT0FBTyxXQUFXLEVBQUUsQ0FBQztNQUNyQixJQUFJLE9BQU8sZUFBZSxLQUFLLE9BQU8sZUFBZSxFQUFFO1FBQ3JELGNBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxlQUFlLENBQUMsQ0FBQztPQUNoRDtNQUNELFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3JCLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDOUIsQ0FBQztJQUNGLE1BQU0sVUFBVSw4Q0FBOEM7TUFDNUQsSUFBSSxJQUFJLEtBQUssVUFBVSxJQUFJLEVBQUUsRUFBRTtRQUM3QixPQUFPO09BQ1IsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsRUFBRTtRQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsYUFBYSxHQUFHLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO09BQ3ZEO01BQ0QsSUFBSSxNQUFNLFlBQVksRUFBRTtRQUN0QixZQUFZLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDeEQsTUFBTTtRQUNMLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO09BQ2pGO0tBQ0YsQ0FBQztJQUNGLE1BQU0sZUFBZSwrQkFBK0I7TUFDbEQsSUFBSSxVQUFVLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxFQUFFO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDM0Q7TUFDRCxPQUFPO1FBQ0wsR0FBRyxjQUFjO1FBQ2pCLENBQUMsSUFBSSxHQUFHO1VBQ04sR0FBRyxHQUFHO1VBQ04sWUFBWSxNQUFNO1lBQ2hCLElBQUk7Y0FDRixHQUFHLFdBQVcsRUFBRSxDQUFDO2FBQ2xCLENBQUMsVUFBVTtjQUNWLE9BQU8sTUFBTSxDQUFDLENBQUMsdUNBQXVDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3ZFO1dBQ0Y7U0FDRjtPQUNGLENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sV0FBVyxVQUFVO01BQ3pCLE1BQU0sYUFBYSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDbEMsTUFBTSxpQkFBaUIsSUFBSSxDQUFDO1FBQzFCLFFBQVE7VUFDTixVQUFVLElBQUk7VUFDZCxZQUFZLElBQUk7VUFDaEIsZ0JBQWdCLEtBQUs7U0FDdEI7UUFDRCxVQUFVO1VBQ1IsVUFBVSxJQUFJO1VBQ2QsWUFBWSxJQUFJO1VBQ2hCLGdCQUFnQixJQUFJO1NBQ3JCO09BQ0YsQ0FBQyxDQUFDO01BQ0gsOEJBQThCLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDdkMsaUNBQWlDLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDMUMsT0FBTztRQUNMLFlBQVksTUFBTSxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ3BDLEtBQUssUUFBUSxPQUFPLENBQUMsTUFBTSxFQUFFLGNBQWMsSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQztRQUNwRSxLQUFLLE1BQU0sVUFBVSxJQUFJLEVBQUU7UUFDM0IsVUFBVSxlQUFlO1VBQ3ZCLGNBQWMsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ25FO09BQ0YsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxTQUFTLEtBQUssS0FBSyxFQUFFLFVBQVUsS0FBSyxRQUFRLENBQUM7SUFDbkQsTUFBTSxnQkFBZ0I7TUFDcEIsSUFBSSxHQUFHO01BQ1AsSUFBSSxHQUFHO01BQ1AsSUFBSSxHQUFHO01BQ1AsSUFBSSxHQUFHO01BQ1AsSUFBSSxHQUFHO01BQ1AsSUFBSSxHQUFHO01BQ1AsSUFBSSxHQUFHO01BQ1AsSUFBSSxHQUFHO01BQ1AsSUFBSSxHQUFHO01BQ1AsS0FBSyxHQUFHO01BQ1IsS0FBSyxHQUFHO01BQ1IsS0FBSyxHQUFHO0tBQ1QsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLEtBQUssUUFBUSxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDbEUsTUFBTSxhQUFhLE9BQU8sR0FBRyxJQUFJLGFBQWEsQ0FBQztJQUMvQyxNQUFNLGdCQUFnQixXQUFXO01BQy9CLE1BQU0sV0FBVyxFQUFFLENBQUM7TUFDcEIsTUFBTSxRQUFRLEdBQUcsR0FBRyxRQUFRLEVBQUUsSUFBSSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUM7TUFDakQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLFlBQVksRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFNBQVM7UUFDbkQsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7VUFDckIsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztTQUN4QixNQUFNO1VBQ0wsSUFBSSxhQUFhLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM3QixRQUFRLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1dBQ3hDLE1BQU07WUFDTCxRQUFRLFNBQVMsR0FBRyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QyxRQUFRLFFBQVEsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQzlFO1NBQ0Y7T0FDRixDQUFDLENBQUM7TUFDSCxNQUFNLEtBQUssQ0FBQyxRQUFRLFFBQVEsQ0FBQyxDQUFDO01BQzlCLElBQUksR0FBRyxDQUFDO01BQ1IsS0FBSyxHQUFHLElBQUksYUFBYSxFQUFFO1FBQ3pCLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1VBQ2pCLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2QsTUFBTTtVQUNMLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7U0FDdkI7T0FDRjtNQUNELFFBQVEsR0FBRyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQzNCLElBQUksUUFBUSxPQUFPLEVBQUU7UUFDbkIsUUFBUSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksS0FBSyxFQUFFO1VBQ1QsUUFBUSxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQ3RCLE1BQU07VUFDTCxRQUFRLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDdkI7T0FDRjtNQUNELElBQUksUUFBUSxLQUFLLEVBQUU7UUFDakIsSUFBSSxLQUFLLEVBQUU7VUFDVCxRQUFRLEtBQUssR0FBRyxJQUFJLENBQUM7U0FDdEIsTUFBTTtVQUNMLFFBQVEsS0FBSyxHQUFHLElBQUksQ0FBQztVQUNyQixRQUFRLEtBQUssR0FBRyxLQUFLLENBQUM7U0FDdkI7T0FDRjtNQUNELE9BQU8sUUFBUSxDQUFDO0tBQ2pCLENBQUM7SUFDRixnQkFBZ0I7TUFDZCxXQUFXLFNBQVM7UUFDbEIsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUNyQixNQUFNLE9BQU8sSUFBSSxDQUFDO1FBQ2xCLE1BQU0sR0FBRyxDQUFDLHdCQUF3QixFQUFFLEtBQUs7VUFDdkMsSUFBSSxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO1lBQzdFLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBRSxZQUFZO2NBQ2pDLElBQUksSUFBSSxjQUFjLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUNuQyxJQUFJLGdCQUFnQixHQUFHLFFBQVEsWUFBWSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO2tCQUN4QixJQUFJLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUN0QztlQUNGO2FBQ0YsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxJQUFJLGNBQWMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2NBQ2xELElBQUksSUFBSSxnQkFBZ0IsT0FBTyxLQUFLLENBQUMsRUFBRTtnQkFDckMsSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7a0JBQ3hCLElBQUksc0JBQXNCLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNyRDtlQUNGO2NBQ0QsSUFBSSxnQkFBZ0IsTUFBTSxFQUFFLENBQUM7YUFDOUI7V0FDRjtTQUNGLENBQUMsQ0FBQztPQUNKO01BQ0QsR0FBRyxnQ0FBZ0M7UUFDakMsTUFBTSxPQUFPLElBQUksQ0FBQztRQUNsQixNQUFNLE9BQU8sSUFBSSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsV0FBVztVQUM5QyxNQUFNLFdBQVcsSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7VUFDakUsSUFBSSxVQUFVLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUM7U0FDeEMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7T0FDYjtNQUNELE1BQU0sVUFBVTtRQUNkLE1BQU0sV0FBVyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QyxJQUFJLElBQUksVUFBVSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUU7VUFDL0IsT0FBTyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1VBQ25DLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztPQUNkO01BQ0Qsb0JBQW9CLFVBQVU7UUFDNUIsTUFBTSxPQUFPLElBQUksQ0FBQztRQUNsQixNQUFNLE1BQU0sT0FBTyxDQUFDO1FBQ3BCLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO1VBQzNCLE9BQU8sTUFBTTtZQUNYLElBQUksT0FBTyxZQUFZLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztXQUMzQyxDQUFDO1NBQ0gsTUFBTSxJQUFJLEtBQUssUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1VBQzdCLE9BQU8sTUFBTTtZQUNYLElBQUksT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUNqRCxDQUFDO1NBQ0gsTUFBTTtVQUNMLE9BQU8sR0FBRyxDQUFDO1NBQ1o7T0FDRjtNQUNELGNBQWMsZ0NBQWdDO1FBQzVDLE1BQU0sWUFBWSxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2xFLFNBQVMsQ0FBQyxTQUFTLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUU7VUFDOUUsTUFBTSxPQUFPO1VBQ2IsT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPO1NBQzVCLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1VBQ2hDLE1BQU0sSUFBSSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUM7VUFDakMsYUFBYSxTQUFTLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDaEMsQ0FBQyxDQUFDO09BQ0o7TUFDRCxXQUFXLElBQUk7UUFDYixPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDO09BQzNDO01BQ0QsYUFBYSxJQUFJO1FBQ2YsT0FBTyxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksQ0FBQyxRQUFRLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLEdBQUcsQ0FBQztPQUNyRTtNQUNELGFBQWEsY0FBYztRQUN6QixJQUFJLENBQUMsUUFBUSxFQUFFO1VBQ2IsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELElBQUksUUFBUSxLQUFLLEtBQUssQ0FBQyxRQUFRLElBQUksUUFBUSxLQUFLLEtBQUssQ0FBQyxRQUFRLEVBQUU7VUFDOUQsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksUUFBUSxNQUFNLEtBQUssQ0FBQyxTQUFTLEVBQUU7VUFDOUQsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxRQUFRLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxTQUFTLEtBQUssUUFBUSxTQUFTLEVBQUU7VUFDcEYsQ0FBQyxlQUFlLEVBQUUsQ0FBQztVQUNuQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7T0FDZDtNQUNELHFCQUFxQixXQUFXO1FBQzlCLE9BQU8sUUFBUSxLQUFLLEdBQUcsUUFBUSxLQUFLLEtBQUssQ0FBQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztPQUNsRTtLQUNGOztJQUVELE1BQU0sV0FBVyxNQUFNO01BQ3JCLE1BQU0sVUFBVSxFQUFFLENBQUM7TUFDbkIsTUFBTSxZQUFZLEVBQUUsQ0FBQztNQUNyQixNQUFNLFNBQVMsRUFBRSxDQUFDO01BQ2xCLE1BQU0sUUFBUSxFQUFFLENBQUM7TUFDakIsTUFBTSxlQUFlLEVBQUUsQ0FBQztNQUN4QixNQUFNLGtCQUFrQixFQUFFLENBQUM7TUFDM0IsTUFBTSxXQUFXLEVBQUUsQ0FBQztNQUNwQixNQUFNLFFBQVEsRUFBRSxDQUFDO01BQ2pCLE1BQU0sTUFBTSxzQkFBc0IsZ0JBQWdCO1FBQ2hELFVBQVUsQ0FBQyxJQUFJLFlBQVksRUFBRSxDQUFDLEdBQUc7VUFDL0IsR0FBRyxJQUFJO1VBQ1AsSUFBSTtTQUNMLENBQUM7T0FDSCxDQUFDO01BQ0YsTUFBTSxVQUFVLG1CQUFtQixLQUFLLENBQUMsSUFBSSxZQUFZLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztNQUN2RSxPQUFPO1FBQ0wsV0FBVyxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQztRQUNqQyx1QkFBdUIsR0FBRyxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQztRQUN6RCxpQkFBaUIsR0FBRyxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUM7UUFDN0MsZUFBZSxHQUFHLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQztRQUN6QyxnQkFBZ0IsR0FBRyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUM7UUFDM0MsYUFBYSxHQUFHLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQztRQUN2QyxtQkFBbUIsR0FBRyxDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQztRQUNuRCxtQkFBbUIsR0FBRyxDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQztRQUNuRCxrQkFBa0IsR0FBRyxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUM7UUFDOUMsZ0JBQWdCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDO1FBQ2hELG1CQUFtQixHQUFHLENBQUMsZUFBZSxFQUFFLGdCQUFnQixDQUFDO1FBQ3pELGdCQUFnQixHQUFHLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQztRQUNuRCxZQUFZLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDO1FBQ3BDLFNBQVMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7UUFDNUIsT0FBTztRQUNQLFFBQVEsT0FBTztVQUNiLE9BQU87VUFDUCxTQUFTO1VBQ1QsS0FBSztVQUNMLE1BQU07VUFDTixZQUFZO1VBQ1osZUFBZTtVQUNmLFFBQVE7VUFDUixLQUFLO1NBQ04sQ0FBQztPQUNILENBQUM7S0FDSCxDQUFDOztJQUVGLE1BQU0sV0FBVyxNQUFNO01BQ3JCLE1BQU0sU0FBUyxRQUFRLEVBQUUsQ0FBQztNQUMxQixPQUFPO1FBQ0wsa0JBQWtCLE1BQU0saUJBQWlCO1FBQ3pDLFdBQVcsTUFBTSxVQUFVO1FBQzNCLGdCQUFnQixNQUFNLGVBQWU7UUFDckMsZ0JBQWdCLE1BQU0sZUFBZTtRQUNyQyxtQkFBbUIsTUFBTSxrQkFBa0I7UUFDM0MsU0FBUyxNQUFNLFFBQVE7UUFDdkIsZUFBZSxNQUFNLGNBQWM7UUFDbkMsYUFBYSxNQUFNLFlBQVk7UUFDL0IsbUJBQW1CLE1BQU0sa0JBQWtCO1FBQzNDLFlBQVksTUFBTSxXQUFXO1FBQzdCLGdCQUFnQixNQUFNLGVBQWU7UUFDckMsaUJBQWlCLE1BQU0sZ0JBQWdCO1FBQ3ZDLHVCQUF1QixNQUFNLHNCQUFzQjtRQUNuRCxtQkFBbUIsTUFBTSxrQkFBa0I7UUFDM0MsU0FBUyxNQUFNLFFBQVE7UUFDdkIsUUFBUSxNQUFNLE9BQU87T0FDdEIsQ0FBQztLQUNILENBQUM7O0lBRUYsTUFBTSxRQUFRLFFBQVEsSUFBSSxDQUFDO0lBQzNCLE1BQU0sU0FBUyxLQUFLLE9BQU8sRUFBRSxTQUFTLEtBQUssS0FBSyxDQUFDO0lBQ2pELGFBQWE7TUFDWCxXQUFXLDZCQUE2QjtRQUN0QyxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxxQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFDL0IsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLGNBQWMsR0FBRyxhQUFhLENBQUM7UUFDbkMsSUFBSSxnQkFBZ0IsR0FBRyxhQUFhLGdCQUFnQixDQUFDO1FBQ3JELE1BQU0sQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUMvQixNQUFNLE9BQU8sSUFBSSxDQUFDO1FBQ2xCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNwQixNQUFNLG9CQUFvQixnQkFBZ0IsQ0FBQyxhQUFhLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNsRixJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDakQsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sWUFBWSxJQUFJLFFBQVEsSUFBSSxDQUFDO1FBQ25DLElBQUksU0FBUyxDQUFDLHNCQUFzQixDQUFDLEVBQUU7VUFDckMsV0FBVyxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1NBQ3pDO1FBQ0QsTUFBTSxTQUFTLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuQyxJQUFJLE1BQU0sRUFBRTtVQUNWLGFBQWEsT0FBTyxHQUFHLE1BQU0sQ0FBQztTQUMvQjtRQUNELElBQUksT0FBTyxHQUFHLGFBQWEsT0FBTyxDQUFDO1FBQ25DLE1BQU0sVUFBVSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEMsSUFBSSxPQUFPLEVBQUU7VUFDWCxhQUFhLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNwQztRQUNELElBQUksUUFBUSxHQUFHLGFBQWEsUUFBUSxDQUFDO1FBQ3JDLE1BQU0saUJBQWlCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLElBQUksY0FBYyxFQUFFO1VBQ2xCLFlBQVksYUFBYSxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztVQUM3RCxRQUFRLElBQUksaUJBQWlCLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ2xFO1FBQ0QsTUFBTSxpQkFBaUIsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsSUFBSSxhQUFhLENBQUMsY0FBYyxDQUFDLEVBQUU7VUFDakMsUUFBUSxJQUFJLGlCQUFpQixtQkFBbUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUNsRTtRQUNELFlBQVksYUFBYSxHQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN2RCxZQUFZLFFBQVEsR0FBRyxhQUFhLFFBQVEsQ0FBQztRQUM3QyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixJQUFJLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsVUFBVSxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDckYsSUFBSSxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUM7UUFDNUIsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksVUFBVSxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLElBQUksVUFBVSxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLElBQUksZUFBZSxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sY0FBYyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUMsSUFBSSxXQUFXLEVBQUU7VUFDZixHQUFHLFlBQVksR0FBRyxXQUFXLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDdkQ7UUFDRCxJQUFJLEdBQUcsR0FBRztVQUNSLFVBQVUsUUFBUSxFQUFFO1VBQ3BCLGtCQUFrQixTQUFTO1VBQzNCLE1BQU0sSUFBSTtVQUNWLE1BQU0sSUFBSTtVQUNWLFlBQVksSUFBSTtVQUNoQixXQUFXLE1BQU07U0FDbEIsQ0FBQztRQUNGLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixhQUFhLFNBQVMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEQsTUFBTSxnQkFBZ0IsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUU7VUFDN0IsYUFBYSxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2hDO09BQ0Y7TUFDRCxNQUFNLEdBQUc7UUFDUCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDZDtNQUNELEtBQUssWUFBWTtRQUNmLElBQUksWUFBWSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7T0FDaEQ7TUFDRCxRQUFRLEdBQUc7UUFDVCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN2QjtNQUNELFNBQVMsT0FBTztRQUNkLE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDN0I7TUFDRCxRQUFRLHlCQUF5QjtRQUMvQixNQUFNLFVBQVUsSUFBSSxRQUFRLENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQy9CLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLE9BQU8sU0FBUyxDQUFDLElBQUksRUFBRTtjQUNyQixXQUFXLElBQUk7Y0FDZixTQUFTLFVBQVU7YUFDcEIsQ0FBQyxDQUFDO1dBQ0osTUFBTTtZQUNMLE9BQU8sU0FBUyxDQUFDLElBQUksRUFBRTtjQUNyQixXQUFXLE1BQU07Y0FDakIsU0FBUyxVQUFVO2FBQ3BCLENBQUMsQ0FBQztXQUNKO1NBQ0Y7UUFDRCxPQUFPLENBQUMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsVUFBVSxHQUFHLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzFGO01BQ0QsU0FBUyxlQUFlO1FBQ3RCLE1BQU0sWUFBWSxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JELElBQUksU0FBUyxFQUFFO1VBQ2IsT0FBTyxNQUFNLEdBQUcsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQztTQUM5RCxNQUFNO1VBQ0wsT0FBTyxLQUFLLENBQUM7U0FDZDtPQUNGO01BQ0QsV0FBVyxPQUFPO1FBQ2hCLElBQUksc0JBQXNCLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUM5QztNQUNELFVBQVUsd0JBQXdCO1FBQ2hDLElBQUksZUFBZSxXQUFXLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztPQUN2RDtNQUNELG9CQUFvQix3QkFBd0I7UUFDMUMsSUFBSSxlQUFlLHFCQUFxQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDakU7TUFDRCxvQkFBb0Isd0JBQXdCO1FBQzFDLElBQUksZUFBZSxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ2pFO01BQ0QsV0FBVyxnQ0FBZ0M7UUFDekMsSUFBSSxVQUFVLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztPQUNuRDtNQUNELFdBQVcsdUJBQXVCO1FBQ2hDLE9BQU8sSUFBSSxlQUFlLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztPQUM5RDtNQUNELGlCQUFpQixNQUFNO1FBQ3JCLE9BQU8sSUFBSSxlQUFlLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO09BQ25EO01BQ0QsaUJBQWlCLE1BQU07UUFDckIsT0FBTyxJQUFJLGVBQWUsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDbkQ7TUFDRCxxQkFBcUIsTUFBTTtRQUN6QixPQUFPLElBQUksZUFBZSxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUN2RDtNQUNELElBQUksR0FBRztRQUNMLE1BQU0sT0FBTyxJQUFJLENBQUM7UUFDbEIsSUFBSSxJQUFJLE9BQU8sRUFBRTtVQUNmLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztVQUNwQixJQUFJLElBQUksT0FBTyxFQUFFO1lBQ2YsSUFBSSxRQUFRLEVBQUUsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO1dBQ3pDLE1BQU07WUFDTCxLQUFLLEtBQUssQ0FBQyxJQUFJLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDaEMsS0FBSyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztXQUNyQjtVQUNELElBQUksS0FBSyxFQUFFLENBQUM7VUFDWixJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN2QjtPQUNGO01BQ0QsSUFBSSxHQUFHO1FBQ0wsTUFBTSxPQUFPLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7VUFDaEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztVQUNaLElBQUksSUFBSSxPQUFPLEVBQUU7WUFDZixJQUFJLFFBQVEsRUFBRSxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7WUFDekMsSUFBSSxJQUFJLEtBQUssSUFBSSxjQUFjLGNBQWMsRUFBRTtjQUM3QyxJQUFJLGNBQWMsY0FBYyxHQUFHLElBQUksQ0FBQzthQUN6QztXQUNGLE1BQU07WUFDTCxLQUFLLEtBQUssQ0FBQyxJQUFJLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDaEMsS0FBSyxTQUFTLENBQUMsSUFBSSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksV0FBVyxDQUFDLENBQUM7V0FDckQ7VUFDRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7VUFDbkIsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdkI7T0FDRjtNQUNELFFBQVEsR0FBRztRQUNULE9BQU8sSUFBSSxPQUFPLENBQUM7T0FDcEI7TUFDRCxnQkFBZ0IsY0FBYztRQUM1QixJQUFJLFNBQVMsQ0FBQyxlQUFlLEVBQUU7VUFDN0IsS0FBSztVQUNMLElBQUk7U0FDTCxDQUFDLENBQUM7T0FDSjtNQUNELElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUNkLE1BQU0sT0FBTyxJQUFJLENBQUM7UUFDbEIsTUFBTSxNQUFNLElBQUksV0FBVyxFQUFFLENBQUM7UUFDOUIsSUFBSSxJQUFJLFFBQVEsRUFBRTtVQUNoQixPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsSUFBSSxHQUFHLEVBQUU7VUFDUCxNQUFNLFdBQVc7WUFDZixHQUFHLElBQUk7WUFDUCxNQUFNLElBQUk7V0FDWCxDQUFDO1VBQ0YsTUFBTSxRQUFRLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDO1VBQ2pFLE1BQU0sT0FBTyxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7VUFDOUMsSUFBSSxDQUFDLFFBQVEsVUFBVSxFQUFFO1lBQ3ZCLElBQUksU0FBUyxDQUFDLGFBQWEsRUFBRTtjQUMzQixHQUFHLFFBQVE7Y0FDWCxTQUFTLEdBQUc7YUFDYixDQUFDLENBQUM7V0FDSjtVQUNELE9BQU8sSUFBSSxDQUFDO1NBQ2IsTUFBTTtVQUNMLE9BQU8sRUFBRSxDQUFDO1NBQ1g7T0FDRjtNQUNELElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUNkLE1BQU0sT0FBTyxJQUFJLENBQUM7UUFDbEIsSUFBSSxNQUFNLElBQUksV0FBVyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksWUFBWSxJQUFJLElBQUksUUFBUSxFQUFFO1VBQzdDLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxNQUFNLFVBQVU7VUFDZCxHQUFHLElBQUk7VUFDUCxNQUFNLElBQUk7VUFDVixTQUFTLEdBQUc7U0FDYixDQUFDO1FBQ0YsSUFBSSxPQUFPLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sV0FBVztVQUNmLEdBQUcsT0FBTztVQUNWLFNBQVMsSUFBSTtTQUNkLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxVQUFVLEVBQUU7VUFDdkIsSUFBSSxTQUFTLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsSUFBSSxRQUFRLE9BQU8sS0FBSyxLQUFLLEVBQUU7VUFDN0IsSUFBSSxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDM0M7UUFDRCxPQUFPLFFBQVEsUUFBUSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsRUFBRTtVQUMzQixJQUFJLElBQUksWUFBWSxJQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7WUFDcEMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDO1dBQ3RCO1VBQ0QsTUFBTSxPQUFPLEtBQUssVUFBVSxDQUFDLElBQUksR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1VBQzlDLElBQUksSUFBSSxFQUFFO1lBQ1IsTUFBTSxDQUFDLElBQUksU0FBUyxFQUFFLE9BQU87Y0FDM0IsSUFBSSxHQUFHLEtBQUssS0FBSyxJQUFJLEdBQUcsRUFBRTtnQkFDeEIsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNqQixPQUFPLEtBQUssQ0FBQztlQUNkLE1BQU07Z0JBQ0wsT0FBTyxJQUFJLENBQUM7ZUFDYjthQUNGLENBQUMsQ0FBQztXQUNKO1NBQ0YsTUFBTTtVQUNMLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQztTQUNsQjtRQUNELFFBQVEsUUFBUSxHQUFHLE9BQU8sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDO1FBQ2hELElBQUksUUFBUSxVQUFVLEtBQUssS0FBSyxFQUFFO1VBQ2hDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3RCO1FBQ0QsT0FBTyxJQUFJLENBQUM7T0FDYjtNQUNELFVBQVUsZ0JBQWdCO1FBQ3hCLE9BQU8sVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDeEM7TUFDRCxVQUFVLE9BQU87UUFDZixPQUFPLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDL0I7TUFDRCxhQUFhLGdCQUFnQjtRQUMzQixJQUFJLElBQUksRUFBRTtVQUNSLFVBQVUsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDckM7UUFDRCxJQUFJLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7T0FDdEQ7TUFDRCxZQUFZLGlCQUFpQjtRQUMzQixJQUFJLGNBQWMsS0FBSyxTQUFTLEVBQUU7VUFDaEMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLGFBQWEsRUFBRSxFQUFFLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUN4RCxNQUFNO1VBQ0wsVUFBVSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztTQUNsQztRQUNELElBQUksWUFBWSxNQUFNLEVBQUUsQ0FBQztRQUN6QixJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixJQUFJLFlBQVksRUFBRSxDQUFDO09BQ3BCO01BQ0QsT0FBTyxHQUFHO1FBQ1IsT0FBTyxDQUFDLElBQUksV0FBVyxDQUFDO09BQ3pCO01BQ0QsUUFBUSxRQUFRO1FBQ2QsTUFBTSxXQUFXLENBQUMsSUFBSSxXQUFXLENBQUM7UUFDbEMsSUFBSSxXQUFXLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDekIsSUFBSSxLQUFLLElBQUksS0FBSyxLQUFLLFFBQVEsRUFBRTtVQUMvQixJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN4QjtPQUNGO01BQ0QsWUFBWSxHQUFHO1FBQ2IsTUFBTSxPQUFPLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsSUFBSSxVQUFVLEVBQUU7VUFDbkIsSUFBSSxVQUFVLEdBQUcsSUFBSSxnQkFBZ0IsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsQ0FBQztTQUN6RTtRQUNELE9BQU8sSUFBSSxVQUFVLENBQUM7T0FDdkI7TUFDRCx1QkFBdUIsR0FBRztRQUN4QixPQUFPLElBQUkscUJBQXFCLENBQUM7T0FDbEM7TUFDRCxVQUFVLEdBQUc7UUFDWCxJQUFJLENBQUMsSUFBSSxVQUFVLEVBQUU7VUFDbkIsSUFBSSxVQUFVLEdBQUcsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztTQUNyQztRQUNELE9BQU8sSUFBSSxVQUFVLENBQUM7T0FDdkI7TUFDRCxNQUFNLEdBQUc7UUFDUCxNQUFNLE9BQU8sSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxJQUFJLGNBQWMsRUFBRTtVQUN2QixNQUFNLE1BQU0sSUFBSSxjQUFjLENBQUM7VUFDL0IsSUFBSSxHQUFHLEVBQUU7WUFDUCxJQUFJLGNBQWMsR0FBRyxHQUFHLGNBQWMsQ0FBQztXQUN4QztTQUNGO1FBQ0QsT0FBTyxJQUFJLGNBQWMsQ0FBQztPQUMzQjtNQUNELE1BQU0sR0FBRztRQUNQLE1BQU0sT0FBTyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLElBQUksZ0JBQWdCLEVBQUU7VUFDekIsTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7VUFDMUIsSUFBSSxHQUFHLEVBQUU7WUFDUCxJQUFJLGdCQUFnQixHQUFHLEdBQUcsU0FBUyxDQUFDO1dBQ3JDO1NBQ0Y7UUFDRCxPQUFPLElBQUksZ0JBQWdCLENBQUM7T0FDN0I7TUFDRCxPQUFPLEdBQUc7UUFDUixJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDWCxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUMxQixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxZQUFZLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxLQUFLLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO09BQ2pLO01BQ0QsVUFBVSxpQkFBaUI7UUFDekIsTUFBTSxPQUFPLElBQUksRUFBRSxZQUFZLElBQUksUUFBUSxJQUFJLENBQUM7UUFDaEQsTUFBTSx1QkFBdUIsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0QsSUFBSSxVQUFVLENBQUMsb0JBQW9CLENBQUMsRUFBRTtVQUNwQyxPQUFPLG9CQUFvQixLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxHQUFHLEtBQUssTUFBTSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLFNBQVMsS0FBSyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUMsRUFBRTtVQUM5SSxPQUFPLEdBQUcsQ0FBQztTQUNaO1FBQ0QsSUFBSSxTQUFTLENBQUMsZUFBZSxDQUFDLEVBQUU7VUFDOUIsT0FBTyxJQUFJLGdCQUFnQixXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDN0M7UUFDRCxNQUFNLElBQUksZ0JBQWdCLFdBQVcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztRQUM1RSxPQUFPLEdBQUcsQ0FBQztPQUNaO01BQ0QsU0FBUyxNQUFNO1FBQ2IsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztPQUN0QjtNQUNELGVBQWUsUUFBUTtRQUNyQixlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQzlCO01BQ0QsZUFBZSxHQUFHO1FBQ2hCLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzlCO01BQ0QsTUFBTSxHQUFHO1FBQ1AsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ2hCO01BQ0QsT0FBTyxZQUFZO1FBQ2pCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7T0FDMUI7TUFDRCxZQUFZLEdBQUc7UUFDYixPQUFPLElBQUksYUFBYSxhQUFhLEVBQUUsQ0FBQztPQUN6QztNQUNELGNBQWMsR0FBRztRQUNmLE9BQU8sSUFBSSxhQUFhLGNBQWMsRUFBRSxDQUFDO09BQzFDO0tBQ0Y7O0lBRUQsTUFBTSxNQUFNLFFBQVEsSUFBSSxDQUFDO0lBQ3pCLE1BQU0sT0FBTyxLQUFLLEtBQUssQ0FBQztJQUN4QixJQUFJLG9CQUFvQixLQUFLLENBQUM7SUFDOUIsSUFBSSxvQkFBb0IsQ0FBQztJQUN6QixJQUFJLFVBQVUsRUFBRSxDQUFDO0lBQ2pCLE1BQU0sc0JBQXNCLEtBQUs7TUFDL0IsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDO01BQ3BCLElBQUksQ0FBQyxhQUFhLElBQUksRUFBRSxFQUFFLFVBQVU7UUFDbEMsUUFBUSxJQUFJO2FBQ1AsUUFBUTtVQUNYLE1BQU0sU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztVQUNuQyxNQUFNO2FBQ0gsUUFBUTtVQUNYLE1BQU0sU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztVQUNuQyxNQUFNO1NBQ1A7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDO0lBQ0YsTUFBTSxxQkFBcUIsU0FBUztNQUNsQyxJQUFJLEtBQUssS0FBSyxpQkFBaUIsRUFBRTtRQUMvQixNQUFNLE1BQU0sUUFBUSxJQUFJLENBQUM7UUFDekIsSUFBSSxLQUFLLEVBQUU7VUFDVCxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixDQUFDLENBQUM7VUFDaEQsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1NBQ2pELE1BQU07VUFDTCxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixDQUFDLENBQUM7VUFDbEQsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1NBQ25EO1FBQ0Qsb0JBQW9CLEtBQUssQ0FBQztPQUMzQjtLQUNGLENBQUM7SUFDRixNQUFNLHVCQUF1QixnQkFBZ0I7TUFDM0MsTUFBTSxhQUFhLE9BQU8sQ0FBQztNQUMzQixVQUFVLFFBQVEsQ0FBQyxPQUFPLEVBQUUsVUFBVTtRQUNwQyxPQUFPLFlBQVksS0FBSyxNQUFNLENBQUM7T0FDaEMsQ0FBQyxDQUFDO01BQ0gsSUFBSSxhQUFhLGFBQWEsS0FBSyxZQUFZLEVBQUU7UUFDL0MsYUFBYSxhQUFhLEdBQUcsT0FBTyxPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7T0FDckU7TUFDRCxJQUFJLGFBQWEsY0FBYyxLQUFLLFlBQVksRUFBRTtRQUNoRCxhQUFhLGNBQWMsR0FBRyxJQUFJLENBQUM7T0FDcEM7TUFDRCxPQUFPLFVBQVUsT0FBTyxLQUFLLE9BQU8sT0FBTyxDQUFDO0tBQzdDLENBQUM7SUFDRixNQUFNLHVCQUF1QixVQUFVO01BQ3JDLElBQUksTUFBTSxJQUFJLE1BQU0sWUFBWSxJQUFJLENBQUMsQ0FBQyxNQUFNLGFBQWEsRUFBRSxJQUFJLE1BQU0sUUFBUSxFQUFFLFlBQVksRUFBRTtRQUMzRixvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixNQUFNLHNCQUFzQixFQUFFLENBQUM7UUFDL0IsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDO09BQ3ZCO0tBQ0YsQ0FBQztJQUNGLE1BQU0sZUFBZSxRQUFRLFdBQVcsS0FBSyxZQUFZLENBQUM7SUFDMUQsTUFBTSxnQkFBZ0I7TUFDcEIsR0FBRyxVQUFVO01BQ2IsU0FBUyxJQUFJO01BQ2IsU0FBUyxJQUFJO01BQ2IsZ0JBQWdCLEVBQUU7TUFDbEIsaUJBQWlCLElBQUk7TUFDckIsUUFBUSxJQUFJO01BQ1osY0FBYyxHQUFHO01BQ2pCLGNBQWMsS0FBSztNQUNuQixhQUFhLFlBQVk7TUFDekIsTUFBTSxJQUFJO01BQ1YsY0FBYyxJQUFJO01BQ2xCLGVBQWUsSUFBSTtNQUNuQixLQUFLLEdBQUc7UUFDTixNQUFNLE9BQU8sSUFBSSxDQUFDO1FBQ2xCLElBQUksVUFBVSxFQUFFLENBQUM7UUFDakIsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNoQixJQUFJLGtCQUFrQixHQUFHLG1CQUFtQixDQUFDLFFBQVEsU0FBUyxDQUFDLENBQUM7UUFDaEUsSUFBSSx3QkFBd0IsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1VBQ2xELGtCQUFrQixlQUFlLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7VUFDdkYsSUFBSSxDQUFDLFNBQVMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQ3BDLG1CQUFtQixHQUFHLENBQUM7V0FDeEI7U0FDRjtRQUNELE1BQU0sVUFBVSxNQUFNLFFBQVEsSUFBSSxNQUFNLGVBQWUsQ0FBQztRQUN4RCxJQUFJLE9BQU8sRUFBRTtVQUNYLFVBQVUsT0FBTyxLQUFLLElBQUksT0FBTyxRQUFRLENBQUM7VUFDMUMsU0FBUyxPQUFPLE9BQU8sQ0FBQztTQUN6QixNQUFNO1VBQ0wsTUFBTSxVQUFVLFFBQVEscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7VUFDeEQsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN2QyxNQUFNLE1BQU0sT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2pDLElBQUksR0FBRyxLQUFLLEVBQUUsRUFBRTtjQUNkLFNBQVM7YUFDVjtZQUNELE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3RELElBQUksNkNBQTZDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtjQUMzRCxJQUFJLFNBQVMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUNwQyxTQUFTLE1BQU0sQ0FBQztlQUNqQjtjQUNELFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxFQUFFLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDakQsTUFBTTthQUNQO1dBQ0Y7VUFDRCxJQUFJLENBQUMsT0FBTyxJQUFJLFFBQVEsY0FBYyxFQUFFO1lBQ3RDLE1BQU0sTUFBTSxRQUFRLGNBQWMsSUFBSSxDQUFDO1lBQ3ZDLElBQUksR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Y0FDOUIsU0FBUyxNQUFNLENBQUM7YUFDakI7WUFDRCxVQUFVLEdBQUcsVUFBVSxDQUFDLENBQUMsRUFBRSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQ2xEO1NBQ0Y7UUFDRCxJQUFJLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVELElBQUksZ0JBQWdCLEdBQUcsZUFBZSxDQUFDO1FBQ3ZDLElBQUksUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUM7UUFDckMsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUNmO01BQ0QsZ0JBQWdCLGlCQUFpQjtRQUMvQixNQUFNLFVBQVUsY0FBYyxTQUFTLENBQUM7UUFDeEMsSUFBSSxPQUFPLEVBQUU7VUFDWCxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMzQjtRQUNELE1BQU0sU0FBUyxjQUFjLE9BQU8sQ0FBQztRQUNyQyxJQUFJLE1BQU0sRUFBRTtVQUNWLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQztTQUN0QjtRQUNELElBQUksZUFBZSxHQUFHLGNBQWMsQ0FBQztRQUNyQyxNQUFNLGlCQUFpQixjQUFjLGlCQUFpQixDQUFDO1FBQ3ZELElBQUksY0FBYyxLQUFLLFNBQVMsRUFBRTtVQUNoQyxNQUFNLENBQUMsY0FBYyxFQUFFLCtCQUErQjtZQUNwRCxZQUFZLGNBQWMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLGFBQWEsQ0FBQztXQUM3RCxDQUFDLENBQUM7U0FDSjtPQUNGO01BQ0QsSUFBSSxVQUFVO1FBQ1osTUFBTSxPQUFPLElBQUksQ0FBQztRQUNsQixJQUFJLE1BQU0sQ0FBQztRQUNYLE1BQU0sdUJBQXVCLEtBQUssUUFBUSxDQUFDLDhGQUE4RixHQUFHLGdIQUFnSCxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ25RLE1BQU0sd0JBQXdCLGtCQUFrQixPQUFPLE9BQU8sSUFBSSxHQUFHLFFBQVEsWUFBWSxFQUFFLElBQUksb0JBQW9CLENBQUM7UUFDcEgsTUFBTSxXQUFXLE9BQU87VUFDdEIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO1VBQ2hCLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDUCxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7WUFDaEYsR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1dBQzVCO1VBQ0QsT0FBTyxFQUFFLENBQUM7U0FDWCxDQUFDO1FBQ0YsTUFBTSxlQUFlLFFBQVE7VUFDM0IsTUFBTSxXQUFXLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUMvQixJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsT0FBTztXQUNSO1VBQ0QsT0FBTyxRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDakMsQ0FBQztRQUNGLE1BQU0sY0FBYyxXQUFXO1VBQzdCLElBQUksR0FBRyxRQUFRLEtBQUssRUFBRSxJQUFJLEdBQUcsUUFBUSxPQUFPLEVBQUUsRUFBRTtZQUM5QyxTQUFTLENBQUMsNkVBQTZFLEdBQUcsMkZBQTJGLENBQUMsQ0FBQztZQUN2TCxPQUFPLEVBQUUsQ0FBQztXQUNYLE1BQU0sSUFBSSxZQUFZLEVBQUU7WUFDdkIsU0FBUyxDQUFDLDRFQUE0RSxHQUFHLGtDQUFrQyxDQUFDLENBQUM7WUFDN0gsT0FBTyxFQUFFLENBQUM7V0FDWCxNQUFNLElBQUksUUFBUSxDQUFDLE9BQU8sU0FBUyxDQUFDLEVBQUU7WUFDckMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLFNBQVMsQ0FBQyxDQUFDO1dBQ3JDLE1BQU0sSUFBSSxhQUFhLENBQUMsT0FBTyxPQUFPLENBQUMsRUFBRTtZQUN4QyxPQUFPLENBQUMsT0FBTyxPQUFPLENBQUMsQ0FBQztXQUN6QixNQUFNO1lBQ0wsT0FBTyxFQUFFLENBQUM7V0FDWDtTQUNGLENBQUM7UUFDRixJQUFJLGlCQUFpQixXQUFXO1VBQzlCLFNBQVMsT0FBTyxDQUFDO1NBQ2xCLENBQUM7UUFDRixNQUFNLGNBQWMsTUFBTTtVQUN4QixJQUFJLFlBQVksQ0FBQyxDQUFDO1VBQ2xCLE1BQU0sVUFBVSxFQUFFLENBQUM7VUFDbkIsSUFBSSxPQUFPLENBQUM7VUFDWixNQUFNLGVBQWUsNEJBQTRCO1lBQy9DLE1BQU0sU0FBUyxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzdDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNO2NBQ3RCLElBQUksRUFBRSxTQUFTLEtBQUssT0FBTyxPQUFPLEVBQUU7Z0JBQ2xDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztlQUN6QjthQUNGLENBQUMsQ0FBQztZQUNILE1BQU0sVUFBVSxHQUFHLE1BQU0sVUFBVSxJQUFJLFNBQVMsQ0FBQztZQUNqRCxNQUFNLE9BQU8sRUFBRSxDQUFDO1dBQ2pCLENBQUM7VUFDRixHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1VBQ3pDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztVQUMzQixVQUFVLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztVQUN6QyxLQUFLLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTztZQUN6QixvQkFBb0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7V0FDeEMsQ0FBQyxDQUFDO1VBQ0gsVUFBVSxLQUFLLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTztZQUNuQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztXQUMxQixDQUFDLENBQUM7VUFDSCxJQUFJLE9BQU8sT0FBTyxLQUFLLENBQUMsRUFBRTtZQUN4QixjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7V0FDcEIsTUFBTTtZQUNMLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTztjQUNuQixJQUFJLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDdkMsU0FBUyxDQUFDLHFFQUFxRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2VBQ3ZGLE1BQU07Z0JBQ0wsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7ZUFDM0M7YUFDRixDQUFDLENBQUM7V0FDSjtTQUNGLENBQUM7UUFDRixHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sSUFBSSxPQUFPLENBQUMsV0FBVztVQUM1QixJQUFJLE1BQU0sRUFBRTtZQUNWLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztXQUNqQixNQUFNO1lBQ0wsaUJBQWlCLFdBQVc7Y0FDMUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ2xCLENBQUM7V0FDSDtTQUNGLENBQUMsQ0FBQztPQUNKO01BQ0QsR0FBRyxLQUFLO1FBQ04sSUFBSSxTQUFTLE9BQU8sS0FBSyxDQUFDLEVBQUU7VUFDMUIsT0FBTyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6QixNQUFNLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1VBQ3ZCLE9BQU8sTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVO1lBQy9CLE9BQU8sTUFBTSxHQUFHLEtBQUssRUFBRSxDQUFDO1dBQ3pCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hCLE1BQU0sSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUU7VUFDdkIsT0FBTyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztTQUN6QyxNQUFNO1VBQ0wsT0FBTyxJQUFJLENBQUM7U0FDYjtPQUNGO01BQ0QsR0FBRyxTQUFTO1FBQ1YsTUFBTSxPQUFPLElBQUksQ0FBQztRQUNsQixNQUFNLGlCQUFpQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLElBQUksY0FBYyxLQUFLLE1BQU0sRUFBRTtVQUM3QixPQUFPLE1BQU0sQ0FBQztTQUNmO1FBQ0QsSUFBSSxjQUFjLEtBQUssSUFBSSxFQUFFO1VBQzNCLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3RCO1FBQ0Qsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDO1FBQzNCLElBQUksU0FBUyxDQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1VBQ3pCLHVCQUF1QixLQUFLO1lBQzFCLE1BQU0sUUFBUSxJQUFJLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM1QyxJQUFJLEtBQUssWUFBWSxFQUFFO2NBQ3JCLENBQUMsZUFBZSxFQUFFLENBQUM7Y0FDbkIsQ0FBQyxZQUFZLEdBQUcsS0FBSyxZQUFZLENBQUM7Y0FDbEMsT0FBTyxLQUFLLFlBQVksQ0FBQzthQUMxQjtXQUNGLENBQUM7VUFDRixNQUFNLGlCQUFpQixDQUFDLGNBQWMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1NBQy9EO1FBQ0QsT0FBTyxNQUFNLENBQUM7T0FDZjtNQUNELFlBQVksY0FBYztRQUN4QixPQUFPLElBQUksSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztPQUNoRDtNQUNELE1BQU0sV0FBVztRQUNmLE1BQU0sT0FBTyxJQUFJLENBQUM7UUFDbEIsSUFBSSxNQUFNLENBQUM7UUFDWCxJQUFJLENBQUMsUUFBUSxFQUFFO1VBQ2IsS0FBSyxJQUFJLElBQUksT0FBTyxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDekI7VUFDRCxPQUFPO1NBQ1I7UUFDRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtVQUN0QixJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTztZQUNoQyxTQUFTLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDMUIsSUFBSSxNQUFNLEVBQUU7Y0FDVixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNyQjtXQUNGLENBQUMsQ0FBQztVQUNILE9BQU87U0FDUjtRQUNELFNBQVMsUUFBUSxDQUFDO1FBQ2xCLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRTtVQUMvQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsRUFBRTtVQUNoQyxJQUFJLFNBQVMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQzNDO1FBQ0QsSUFBSSxPQUFPLE9BQU8sS0FBSyxDQUFDLEVBQUU7VUFDeEIsTUFBTSxvQkFBb0IsQ0FBQyxjQUFjLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztTQUNsRTtRQUNELE1BQU0sT0FBTyxFQUFFLENBQUM7UUFDaEIsa0JBQWtCLENBQUMsT0FBTyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkMsT0FBTyxNQUFNLENBQUM7T0FDZjtNQUNELFdBQVcsaUJBQWlCO1FBQzFCLElBQUksRUFBRSxDQUFDO1FBQ1AsTUFBTSxPQUFPLElBQUksQ0FBQztRQUNsQixNQUFNLFdBQVcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLEdBQUcsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDeEcsUUFBUSxHQUFHO2FBQ04sY0FBYyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtjQUN2QixNQUFNLGdCQUFnQixLQUFLLFFBQVEsQ0FBQztjQUNwQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNwRDtZQUNELE9BQU8sSUFBSSxDQUFDO1dBQ2I7YUFDRSxpQkFBaUIsRUFBRTtZQUNwQixNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEMsSUFBSSxNQUFNLEVBQUU7Y0FDVixNQUFNLE9BQU8sRUFBRSxDQUFDO2FBQ2pCO1lBQ0QsT0FBTyxJQUFJLENBQUM7V0FDYjthQUNFLGlCQUFpQixFQUFFO1lBQ3BCLE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsTUFBTSxFQUFFO2NBQ1gsSUFBSSxZQUFZLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztjQUMvQyxPQUFPLElBQUksQ0FBQzthQUNiO1lBQ0QsSUFBSSxNQUFNLFNBQVMsRUFBRSxFQUFFO2NBQ3JCLE1BQU0sS0FBSyxFQUFFLENBQUM7YUFDZixNQUFNO2NBQ0wsTUFBTSxLQUFLLEVBQUUsQ0FBQzthQUNmO1lBQ0QsT0FBTyxJQUFJLENBQUM7V0FDYjtTQUNGO1FBQ0QsSUFBSSxJQUFJLGFBQWEsRUFBRTtVQUNyQixPQUFPLElBQUksYUFBYSxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN0RDtRQUNELE9BQU8sS0FBSyxDQUFDO09BQ2Q7TUFDRCxhQUFhLE1BQU07UUFDakIsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVO1VBQ3RCLE1BQU0sS0FBSyxFQUFFLENBQUM7U0FDZixDQUFDLENBQUM7T0FDSjtNQUNELFNBQVMsaUJBQWlCO1FBQ3hCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztPQUN2QjtNQUNELFdBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzdCO01BQ0QsU0FBUyxTQUFTO1FBQ2hCLE1BQU0sZUFBZSxJQUFJLGFBQWEsQ0FBQztRQUN2QyxJQUFJLElBQUksYUFBYSxLQUFLLE1BQU0sRUFBRTtVQUNoQyxJQUFJLFlBQVksRUFBRTtZQUNoQixZQUFZLFNBQVMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxlQUFlLE1BQU0sRUFBRSxDQUFDLENBQUM7V0FDaEU7VUFDRCxNQUFNLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxlQUFlLFlBQVksRUFBRSxDQUFDLENBQUM7U0FDOUQ7UUFDRCxJQUFJLGFBQWEsR0FBRyxNQUFNLENBQUM7T0FDNUI7TUFDRCxXQUFXLFVBQVU7UUFDbkIsSUFBSSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsT0FBTyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckYsSUFBSSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQztPQUN0QztLQUNGLENBQUM7SUFDRixhQUFhLE1BQU0sRUFBRSxDQUFDOztJQUV0QixNQUFNLFFBQVEsTUFBTTtNQUNsQixNQUFNLFlBQVksT0FBTyxFQUFFLENBQUM7TUFDNUIsTUFBTSxvQkFBb0IsVUFBVTtRQUNsQyxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2xCLFNBQVMsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUU7T0FDckQsQ0FBQyxDQUFDO01BQ0gsTUFBTSxRQUFRLFFBQVE7UUFDcEIsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDckIsQ0FBQztNQUNGLE1BQU0sT0FBTyxNQUFNLFNBQVMsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFDO01BQ3BELE1BQU0sUUFBUSxTQUFTLE1BQU0sQ0FBQztNQUM5QixPQUFPO1FBQ0wsaUJBQWlCO1FBQ2pCLEtBQUs7UUFDTCxJQUFJO1FBQ0osS0FBSztPQUNOLENBQUM7S0FDSCxDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsS0FBSyxFQUFFLENBQUM7O0lBRTlCLE1BQU0sTUFBTSxJQUFJLElBQUksRUFBRSxNQUFNLElBQUksSUFBSSxFQUFFLFFBQVEsSUFBSSxNQUFNLENBQUM7SUFDekQsTUFBTSxtQkFBbUIsMkJBQTJCO01BQ2xELElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztNQUNyQixJQUFJLElBQUksVUFBVSxFQUFFLENBQUM7TUFDckIsTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO01BQ2pCLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztNQUNqQixNQUFNLFVBQVUsVUFBVSxFQUFFLENBQUM7TUFDN0IsTUFBTSxVQUFVLFVBQVUsRUFBRSxDQUFDO01BQzdCLE1BQU0sV0FBVyxDQUFDLEdBQUcsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUN2QyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7UUFDdkIsS0FBSyxPQUFPLENBQUM7T0FDZDtNQUNELElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtRQUN2QixLQUFLLE9BQU8sQ0FBQztPQUNkO01BQ0QsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO1FBQ3ZCLEtBQUssS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztPQUN6QjtNQUNELElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtRQUN2QixLQUFLLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7T0FDekI7TUFDRCxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7UUFDdkIsS0FBSyxDQUFDLENBQUM7T0FDUjtNQUNELElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtRQUN2QixLQUFLLENBQUMsQ0FBQztPQUNSO01BQ0QsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO1FBQ3ZCLEtBQUssS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztPQUNuQjtNQUNELElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtRQUN2QixLQUFLLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7T0FDbkI7TUFDRCxPQUFPLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUM3QixDQUFDO0lBQ0YsTUFBTSwyQkFBMkIsMkNBQTJDO01BQzFFLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDcEMsTUFBTSxNQUFNLGdCQUFnQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEQsSUFBSSxHQUFHLEVBQUUsSUFBSSxhQUFhLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxhQUFhLEVBQUUsR0FBRyxhQUFhLEVBQUUsSUFBSSxHQUFHLEVBQUUsSUFBSSxhQUFhLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxhQUFhLEVBQUUsR0FBRyxhQUFhLEVBQUUsRUFBRTtVQUNwSyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoQjtPQUNGO01BQ0QsT0FBTyxJQUFJLENBQUM7S0FDYixDQUFDO0lBQ0YsTUFBTSxVQUFVLGdCQUFnQjtNQUM5QixPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3pFLENBQUM7SUFDRixNQUFNLFlBQVksb0JBQW9CO01BQ3BDLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztNQUNuQyxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDbkMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQ3pELE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQztNQUN6RCxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1FBQzlCLE9BQU8sSUFBSSxDQUFDO09BQ2I7TUFDRCxPQUFPLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0tBQzNDLENBQUM7SUFDRixNQUFNLFFBQVEsZ0NBQWdDO01BQzVDLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztNQUNoQixJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7TUFDaEIsSUFBSSxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO01BQ3pCLElBQUksS0FBSyxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztNQUN6QixNQUFNLE1BQU0sU0FBUyxFQUFFLEdBQUcsU0FBUyxFQUFFLENBQUM7TUFDdEMsTUFBTSxNQUFNLFNBQVMsRUFBRSxHQUFHLFNBQVMsRUFBRSxDQUFDO01BQ3RDLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO01BQzdDLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO01BQzdDLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztNQUNwQyxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7TUFDcEMsTUFBTSxXQUFXLENBQUM7TUFDbEIsTUFBTSxXQUFXLENBQUM7TUFDbEIsSUFBSSxTQUFTLEVBQUU7UUFDYixNQUFNLFdBQVcsQ0FBQztRQUNsQixNQUFNLFdBQVcsQ0FBQztRQUNsQixNQUFNLFVBQVUsQ0FBQztRQUNqQixNQUFNLFVBQVUsQ0FBQztPQUNsQjtNQUNELE1BQU0sVUFBVSxDQUFDO01BQ2pCLE1BQU0sVUFBVSxDQUFDO01BQ2pCLE9BQU8sUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7S0FDM0MsQ0FBQztJQUNGLE1BQU0sV0FBVyxnQkFBZ0I7TUFDL0IsT0FBTztRQUNMLENBQUM7UUFDRCxDQUFDO1FBQ0QsQ0FBQztRQUNELENBQUM7T0FDRixDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0saUJBQWlCLGNBQWM7TUFDbkMsT0FBTyxRQUFRLENBQUMsVUFBVSxLQUFLLEVBQUUsVUFBVSxJQUFJLEVBQUUsVUFBVSxNQUFNLEVBQUUsVUFBVSxPQUFPLENBQUMsQ0FBQztLQUN2RixDQUFDO0lBQ0YsTUFBTSxPQUFPO01BQ1gsT0FBTztNQUNQLGdCQUFnQjtNQUNoQix3QkFBd0I7TUFDeEIsU0FBUztNQUNULEtBQUs7TUFDTCxRQUFRLFFBQVE7TUFDaEIsY0FBYztLQUNmLENBQUM7O0lBRUYsTUFBTSxVQUFVLHNCQUFzQixVQUFVLElBQUksS0FBSztNQUN2RCxJQUFJLE9BQU8sS0FBSyxDQUFDO01BQ2pCLElBQUksUUFBUSxJQUFJLENBQUM7TUFDakIsTUFBTSxXQUFXLGFBQWEsQ0FBQyxPQUFPLEtBQUs7UUFDekMsSUFBSSxDQUFDLElBQUksRUFBRTtVQUNULE9BQU8sSUFBSSxDQUFDO1VBQ1osSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ2xCLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQixRQUFRLElBQUksQ0FBQztXQUNkO1VBQ0QsU0FBUyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzdCO09BQ0YsQ0FBQztNQUNGLE1BQU0sVUFBVSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7TUFDcEMsTUFBTSxTQUFTLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUNsQyxNQUFNLFFBQVEsQ0FBQyxPQUFPLEtBQUs7UUFDekIsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1VBQzNCLFFBQVEsVUFBVSxDQUFDLE1BQU0sTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzdEO09BQ0YsQ0FBQztNQUNGLE9BQU87UUFDTCxLQUFLO1FBQ0wsT0FBTztRQUNQLE1BQU07T0FDUCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sV0FBVyxNQUFNO01BQ3JCLE1BQU0sUUFBUSxFQUFFLENBQUM7TUFDakIsTUFBTSxZQUFZLEVBQUUsQ0FBQztNQUNyQixNQUFNLE9BQU8sYUFBYTtRQUN4QixNQUFNLGFBQWEsQ0FBQyxlQUFlLEdBQUcsR0FBRyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDN0QsTUFBTSxZQUFZLENBQUMsZUFBZSxHQUFHLEdBQUcsRUFBRSx1Q0FBdUMsR0FBRyxFQUFFLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztRQUNwSCxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxTQUFTLEVBQUU7VUFDM0IsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDbEIsTUFBTTtVQUNMLE1BQU0sT0FBTyxJQUFJLE9BQU8sQ0FBQyxxQkFBcUI7WUFDNUMsTUFBTSxTQUFTLE9BQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDeEMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sUUFBUSxDQUFDO1lBQy9CLFlBQVksYUFBYSxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztXQUNoSCxDQUFDLENBQUM7VUFDSCxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO1VBQ2pCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7T0FDRixDQUFDO01BQ0YsTUFBTSxNQUFNLGNBQWM7UUFDeEIsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEtBQUssU0FBUyxFQUFFO1VBQy9CLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUNwQixPQUFPLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN0QjtRQUNELEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUNuQyxDQUFDO01BQ0YsTUFBTSxTQUFTLE1BQU07UUFDbkIsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7T0FDbEIsQ0FBQztNQUNGLE9BQU87UUFDTCxJQUFJO1FBQ0osR0FBRztRQUNILE1BQU07T0FDUCxDQUFDO0tBQ0gsQ0FBQztJQUNGLE1BQU0sV0FBVyxRQUFRLEVBQUUsQ0FBQzs7SUFFNUIsTUFBTSxTQUFTLE1BQU0sQ0FBQyxNQUFNO01BQzFCLElBQUksT0FBTyxFQUFFLENBQUM7TUFDZCxJQUFJLE9BQU8sRUFBRSxDQUFDO01BQ2QsTUFBTSxVQUFVO1FBQ2QsU0FBUyxPQUFPO1VBQ2QsTUFBTSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztVQUN2QixPQUFPLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO1NBQzNCO1FBQ0QsU0FBUyxnQkFBZ0I7VUFDdkIsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7VUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzNCO1FBQ0QsS0FBSyxTQUFTO1VBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDcEI7UUFDRCxZQUFZLE9BQU87VUFDakIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztVQUNuQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNsQjtRQUNELE9BQU8sTUFBTTtVQUNYLE9BQU8sRUFBRSxDQUFDO1VBQ1YsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELFFBQVEsQ0FBQztPQUNWLENBQUM7TUFDRixNQUFNLGVBQWUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFO1FBQ3ZDLEtBQUssTUFBTSxJQUFJLE9BQU87UUFDdEIsY0FBYyxLQUFLO1FBQ25CLFlBQVksS0FBSztPQUNsQixDQUFDLENBQUM7TUFDSCxPQUFPLE9BQU8sQ0FBQztLQUNoQixHQUFHLENBQUM7O0lBRUwsSUFBSSxZQUFZLENBQUM7SUFDakIsSUFBSTtNQUNGLE1BQU0sT0FBTyxrQkFBa0IsQ0FBQztNQUNoQyxlQUFlLE1BQU0sYUFBYSxDQUFDO01BQ25DLFlBQVksUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNqQyxZQUFZLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMvQixDQUFDLFVBQVU7TUFDVixlQUFlLE1BQU0sRUFBRSxDQUFDO0tBQ3pCO0lBQ0QsSUFBSSxlQUFlLFlBQVksQ0FBQzs7SUFFaEMsTUFBTSxZQUFZO01BQ2hCLE1BQU0sRUFBRSxJQUFJLEVBQUU7TUFDZCxNQUFNO1FBQ0osS0FBSztRQUNMLEtBQUs7UUFDTCxFQUFFO1FBQ0YsR0FBRztRQUNILGVBQWU7UUFDZixVQUFVO1FBQ1YsSUFBSTtRQUNKLFlBQVk7UUFDWixhQUFhO09BQ2Q7TUFDRCxLQUFLO1FBQ0gsVUFBVTtRQUNWLFlBQVksYUFBYTtRQUN6QixVQUFVO1FBQ1YsUUFBUTtRQUNSLFlBQVk7UUFDWixVQUFVO1FBQ1YsWUFBWSxhQUFhO1FBQ3pCLGdCQUFnQjtRQUNoQixnQkFBZ0I7UUFDaEIsZUFBZTtRQUNmLFdBQVcsZUFBZTtRQUMxQixPQUFPLFVBQVUsTUFBTTtPQUN4QjtNQUNELE1BQU07UUFDSixNQUFNO1FBQ04sUUFBUTtRQUNSLE1BQU0sT0FBTztRQUNiLE1BQU07UUFDTixTQUFTO1FBQ1QsTUFBTTtRQUNOLFlBQVksY0FBYztPQUMzQjtNQUNELEdBQUc7TUFDSCxZQUFZO01BQ1osU0FBUztNQUNULFNBQVM7TUFDVCxXQUFXO01BQ1gsY0FBYztNQUNkLGFBQWE7TUFDYixtQkFBbUI7TUFDbkIsZ0JBQWdCO01BQ2hCLFNBQVM7TUFDVCxNQUFNO01BQ04sWUFBWTtNQUNaLGFBQWE7TUFDYixLQUFLLFFBQVEsSUFBSTtNQUNqQixjQUFjLFlBQVksYUFBYTtNQUN2QyxhQUFhO01BQ2IsWUFBWTtNQUNaLFlBQVk7TUFDWixXQUFXO01BQ1gsUUFBUTtNQUNSLGFBQWE7TUFDYixNQUFNLEtBQUssS0FBSztNQUNoQixTQUFTLEtBQUssUUFBUTtNQUN0QixJQUFJLEtBQUssR0FBRztNQUNaLFNBQVMsS0FBSyxRQUFRO01BQ3RCLFNBQVMsS0FBSyxRQUFRO01BQ3RCLE1BQU0sS0FBSyxLQUFLO01BQ2hCLEtBQUssS0FBSyxJQUFJO01BQ2QsTUFBTSxLQUFLLEtBQUs7TUFDaEIsU0FBUyxLQUFLLFFBQVE7TUFDdEIsUUFBUSxLQUFLLE9BQU87TUFDcEIsTUFBTSxLQUFLLEtBQUs7TUFDaEIsU0FBUyxLQUFLLFFBQVE7TUFDdEIsU0FBUyxLQUFLLFFBQVE7TUFDdEIsaUJBQWlCLEtBQUssZ0JBQWdCO0tBQ3ZDLENBQUM7SUFDRixNQUFNLFVBQVUsS0FBSyxPQUFPLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDOztJQUV2RCxNQUFNLHdCQUF3QixXQUFXO01BQ3ZDLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO1FBQzlCLElBQUk7VUFDRixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUM7U0FDMUIsQ0FBQyxVQUFVO1NBQ1g7T0FDRjtLQUNGLENBQUM7SUFDRixNQUFNLHVCQUF1QixXQUFXO01BQ3RDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQztNQUN6QixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUM7S0FDMUIsQ0FBQztJQUNGLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDOztDQUVsQyxHQUFHLENBQUM7Ozs7QUNweTlCTCxJQUFJLE1BQU0sMGp2RUFBMGp2RSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFFBQVEsMEJBQTBCLEVBQUUsRUFBRSxFQUFFLFlBQVksUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sUUFBUSxHQUFHLEdBQUc7Ozs7QUNBMXN2RSxZQUFBLENBQUE7Ozs7OztJQUVNO0lBRUYsdUNBQW9CO1FBQUEsZUFBQSxDQUFBLElBQUEsRUFBQSxzQkFBQSxDQUFBLENBQUE7O1FBQ2hCLElBQUEsTUFBQSxHQUFhLEtBQWIsQ0FBQTs7UUFFQSxJQUFNLEFBQ0EsVUFBVSxPQUFBLENBQVEsaUJBQVIsQ0FEaEIsQ0FBQTs7O1FBSUEsT0FBQSxDQUFRLHVCQUFSLENBQUEsQ0FBQTs7O1FBR0EsT0FBQSxDQUFRLHVCQUFSLENBQUEsQ0FBQTtRQUNBLE9BQUEsQ0FBUSxvQkFBUixDQUFBLENBQUE7OztRQUdBLE9BQUEsQ0FBUSw2QkFBUixDQUFBLENBQUE7OztRQUdBLE9BQUEsQ0FBUSx5QkFBUixDQUFBLENBQUE7UUFDQSxPQUFBLENBQVEsc0JBQVIsQ0FBQSxDQUFBO1FBQ0EsT0FBQSxDQUFRLDJCQUFSLENBQUEsQ0FBQTtRQUNBLE9BQUEsQ0FBUSxxQ0FBUixDQUFBLENBQUE7UUFDQSxPQUFBLENBQVEsc0JBQVIsQ0FBQSxDQUFBO1FBQ0EsT0FBQSxDQUFRLHVCQUFSLENBQUEsQ0FBQTtRQUNBLE9BQUEsQ0FBUSx1QkFBUixDQUFBLENBQUE7OztRQUdBLElBQUEsaUJBQUEsR0FBd0IscTIwQkFBeEIsQ0FBQTs7O1FBR0EsSUFBQSxXQUFBLEdBQWtCLDh1REFBbEIsQ0FBQTtLQUNIOzs7OytCQUVPO1lBQ0osSUFBSSxPQUFPLElBQUEsTUFBUCxLQUFzQixXQUF0QixJQUFxQyxDQUFDLElBQUEsTUFBQSxPQUExQyxFQUE2RDtnQkFDekQsTUFBTSxJQUFJLEtBQUosQ0FBVSxnREFBVixDQUFOLENBQUE7YUFDSDs7O1lBR0QsT0FBQSxLQUFBLENBQWE7Z0JBQ1QsVUFBVSxxQkFERDs7Z0JBR1QsU0FBUyx5Q0FIQTtnQkFJVCxTQUFTLGdEQUpBO2dCQUtULE1BQU0sS0FMRztnQkFNVCxhQUFhLEtBTko7Z0JBT1QsZUFBZSxJQUFBLGlCQUFBLFNBQUEsRUFBQSxHQUFtQyxJQUFuQyxHQUEwQyxJQUFBLFdBQUEsU0FBQSxFQUFBO2FBUDdELENBQUEsQ0FBQTtTQVNIOzs7Ozs7QUFJTCxNQUFBLFFBQUEsR0FBaUIsc0JBQWpCLENBQUE7Ozs7OztBQ3ZEQSxPQUFPLE1BQVAsR0FBZ0IsT0FBTyxDQUFQLEdBQVcsUUFBUSxRQUFSLENBQTNCOztBQUVBLElBQUkseUJBQXlCLFFBQVEsMEJBQVIsQ0FBN0I7O0FBRUEsT0FBTyxPQUFQLEdBQWlCO0FBQ2I7QUFEYSxDQUFqQiIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIid1c2Ugc3RyaWN0Jztcbi8vIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGJyb3dzZXIgZmllbGQsIGNoZWNrIG91dCB0aGUgYnJvd3NlciBmaWVsZCBhdCBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJvd3NlcmlmeS1oYW5kYm9vayNicm93c2VyLWZpZWxkLlxuXG52YXIgc3R5bGVFbGVtZW50c0luc2VydGVkQXRUb3AgPSBbXTtcblxudmFyIGluc2VydFN0eWxlRWxlbWVudCA9IGZ1bmN0aW9uKHN0eWxlRWxlbWVudCwgb3B0aW9ucykge1xuICAgIHZhciBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICAgIHZhciBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcCA9IHN0eWxlRWxlbWVudHNJbnNlcnRlZEF0VG9wW3N0eWxlRWxlbWVudHNJbnNlcnRlZEF0VG9wLmxlbmd0aCAtIDFdO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy5pbnNlcnRBdCA9IG9wdGlvbnMuaW5zZXJ0QXQgfHwgJ2JvdHRvbSc7XG5cbiAgICBpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gJ3RvcCcpIHtcbiAgICAgICAgaWYgKCFsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcCkge1xuICAgICAgICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGVFbGVtZW50LCBoZWFkLmZpcnN0Q2hpbGQpO1xuICAgICAgICB9IGVsc2UgaWYgKGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wLm5leHRTaWJsaW5nKSB7XG4gICAgICAgICAgICBoZWFkLmluc2VydEJlZm9yZShzdHlsZUVsZW1lbnQsIGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wLm5leHRTaWJsaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBzdHlsZUVsZW1lbnRzSW5zZXJ0ZWRBdFRvcC5wdXNoKHN0eWxlRWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmluc2VydEF0ID09PSAnYm90dG9tJykge1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgXFwnaW5zZXJ0QXRcXCcuIE11c3QgYmUgXFwndG9wXFwnIG9yIFxcJ2JvdHRvbVxcJy4nKTtcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBDcmVhdGUgYSA8bGluaz4gdGFnIHdpdGggb3B0aW9uYWwgZGF0YSBhdHRyaWJ1dGVzXG4gICAgY3JlYXRlTGluazogZnVuY3Rpb24oaHJlZiwgYXR0cmlidXRlcykge1xuICAgICAgICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgICAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG5cbiAgICAgICAgbGluay5ocmVmID0gaHJlZjtcbiAgICAgICAgbGluay5yZWwgPSAnc3R5bGVzaGVldCc7XG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIGlmICggISBhdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNba2V5XTtcbiAgICAgICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkYXRhLScgKyBrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgfSxcbiAgICAvLyBDcmVhdGUgYSA8c3R5bGU+IHRhZyB3aXRoIG9wdGlvbmFsIGRhdGEgYXR0cmlidXRlc1xuICAgIGNyZWF0ZVN0eWxlOiBmdW5jdGlvbihjc3NUZXh0LCBhdHRyaWJ1dGVzLCBleHRyYU9wdGlvbnMpIHtcbiAgICAgICAgZXh0cmFPcHRpb25zID0gZXh0cmFPcHRpb25zIHx8IHt9O1xuXG4gICAgICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICAgIHN0eWxlLnR5cGUgPSAndGV4dC9jc3MnO1xuXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICBpZiAoICEgYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBhdHRyaWJ1dGVzW2tleV07XG4gICAgICAgICAgICBzdHlsZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtJyArIGtleSwgdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLnNoZWV0KSB7IC8vIGZvciBqc2RvbSBhbmQgSUU5K1xuICAgICAgICAgICAgc3R5bGUuaW5uZXJIVE1MID0gY3NzVGV4dDtcbiAgICAgICAgICAgIHN0eWxlLnNoZWV0LmNzc1RleHQgPSBjc3NUZXh0O1xuICAgICAgICAgICAgaW5zZXJ0U3R5bGVFbGVtZW50KHN0eWxlLCB7IGluc2VydEF0OiBleHRyYU9wdGlvbnMuaW5zZXJ0QXQgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3R5bGUuc3R5bGVTaGVldCkgeyAvLyBmb3IgSUU4IGFuZCBiZWxvd1xuICAgICAgICAgICAgaW5zZXJ0U3R5bGVFbGVtZW50KHN0eWxlLCB7IGluc2VydEF0OiBleHRyYU9wdGlvbnMuaW5zZXJ0QXQgfSk7XG4gICAgICAgICAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3NUZXh0O1xuICAgICAgICB9IGVsc2UgeyAvLyBmb3IgQ2hyb21lLCBGaXJlZm94LCBhbmQgU2FmYXJpXG4gICAgICAgICAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3NUZXh0KSk7XG4gICAgICAgICAgICBpbnNlcnRTdHlsZUVsZW1lbnQoc3R5bGUsIHsgaW5zZXJ0QXQ6IGV4dHJhT3B0aW9ucy5pbnNlcnRBdCB9KTtcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCIvKiFcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuNy4xXG4gKiBodHRwczovL2pxdWVyeS5jb20vXG4gKlxuICogQ29weXJpZ2h0IE9wZW5KUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cHM6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqXG4gKiBEYXRlOiAyMDIzLTA4LTI4VDEzOjM3WlxuICovXG4oIGZ1bmN0aW9uKCBnbG9iYWwsIGZhY3RvcnkgKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0aWYgKCB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vIEZvciBDb21tb25KUyBhbmQgQ29tbW9uSlMtbGlrZSBlbnZpcm9ubWVudHMgd2hlcmUgYSBwcm9wZXIgYHdpbmRvd2Bcblx0XHQvLyBpcyBwcmVzZW50LCBleGVjdXRlIHRoZSBmYWN0b3J5IGFuZCBnZXQgalF1ZXJ5LlxuXHRcdC8vIEZvciBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3QgaGF2ZSBhIGB3aW5kb3dgIHdpdGggYSBgZG9jdW1lbnRgXG5cdFx0Ly8gKHN1Y2ggYXMgTm9kZS5qcyksIGV4cG9zZSBhIGZhY3RvcnkgYXMgbW9kdWxlLmV4cG9ydHMuXG5cdFx0Ly8gVGhpcyBhY2NlbnR1YXRlcyB0aGUgbmVlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIGEgcmVhbCBgd2luZG93YC5cblx0XHQvLyBlLmcuIHZhciBqUXVlcnkgPSByZXF1aXJlKFwianF1ZXJ5XCIpKHdpbmRvdyk7XG5cdFx0Ly8gU2VlIHRpY2tldCB0cmFjLTE0NTQ5IGZvciBtb3JlIGluZm8uXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xuXHRcdFx0ZmFjdG9yeSggZ2xvYmFsLCB0cnVlICkgOlxuXHRcdFx0ZnVuY3Rpb24oIHcgKSB7XG5cdFx0XHRcdGlmICggIXcuZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCBcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWN0b3J5KCB3ICk7XG5cdFx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGZhY3RvcnkoIGdsb2JhbCApO1xuXHR9XG5cbi8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0XG59ICkoIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHtcblxuLy8gRWRnZSA8PSAxMiAtIDEzKywgRmlyZWZveCA8PTE4IC0gNDUrLCBJRSAxMCAtIDExLCBTYWZhcmkgNS4xIC0gOSssIGlPUyA2IC0gOS4xXG4vLyB0aHJvdyBleGNlcHRpb25zIHdoZW4gbm9uLXN0cmljdCBjb2RlIChlLmcuLCBBU1AuTkVUIDQuNSkgYWNjZXNzZXMgc3RyaWN0IG1vZGVcbi8vIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyICh0cmFjLTEzMzM1KS4gQnV0IGFzIG9mIGpRdWVyeSAzLjAgKDIwMTYpLCBzdHJpY3QgbW9kZSBzaG91bGQgYmUgY29tbW9uXG4vLyBlbm91Z2ggdGhhdCBhbGwgc3VjaCBhdHRlbXB0cyBhcmUgZ3VhcmRlZCBpbiBhIHRyeSBibG9jay5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyID0gW107XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcblxudmFyIHNsaWNlID0gYXJyLnNsaWNlO1xuXG52YXIgZmxhdCA9IGFyci5mbGF0ID8gZnVuY3Rpb24oIGFycmF5ICkge1xuXHRyZXR1cm4gYXJyLmZsYXQuY2FsbCggYXJyYXkgKTtcbn0gOiBmdW5jdGlvbiggYXJyYXkgKSB7XG5cdHJldHVybiBhcnIuY29uY2F0LmFwcGx5KCBbXSwgYXJyYXkgKTtcbn07XG5cblxudmFyIHB1c2ggPSBhcnIucHVzaDtcblxudmFyIGluZGV4T2YgPSBhcnIuaW5kZXhPZjtcblxudmFyIGNsYXNzMnR5cGUgPSB7fTtcblxudmFyIHRvU3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZztcblxudmFyIGhhc093biA9IGNsYXNzMnR5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBmblRvU3RyaW5nID0gaGFzT3duLnRvU3RyaW5nO1xuXG52YXIgT2JqZWN0RnVuY3Rpb25TdHJpbmcgPSBmblRvU3RyaW5nLmNhbGwoIE9iamVjdCApO1xuXG52YXIgc3VwcG9ydCA9IHt9O1xuXG52YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzRnVuY3Rpb24oIG9iaiApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTU3LCBGaXJlZm94IDw9NTJcblx0XHQvLyBJbiBzb21lIGJyb3dzZXJzLCB0eXBlb2YgcmV0dXJucyBcImZ1bmN0aW9uXCIgZm9yIEhUTUwgPG9iamVjdD4gZWxlbWVudHNcblx0XHQvLyAoaS5lLiwgYHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9iamVjdFwiICkgPT09IFwiZnVuY3Rpb25cImApLlxuXHRcdC8vIFdlIGRvbid0IHdhbnQgdG8gY2xhc3NpZnkgKmFueSogRE9NIG5vZGUgYXMgYSBmdW5jdGlvbi5cblx0XHQvLyBTdXBwb3J0OiBRdFdlYiA8PTMuOC41LCBXZWJLaXQgPD01MzQuMzQsIHdraHRtbHRvcGRmIHRvb2wgPD0wLjEyLjVcblx0XHQvLyBQbHVzIGZvciBvbGQgV2ViS2l0LCB0eXBlb2YgcmV0dXJucyBcImZ1bmN0aW9uXCIgZm9yIEhUTUwgY29sbGVjdGlvbnNcblx0XHQvLyAoZS5nLiwgYHR5cGVvZiBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImRpdlwiKSA9PT0gXCJmdW5jdGlvblwiYCkuIChnaC00NzU2KVxuXHRcdHJldHVybiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIG9iai5ub2RlVHlwZSAhPT0gXCJudW1iZXJcIiAmJlxuXHRcdFx0dHlwZW9mIG9iai5pdGVtICE9PSBcImZ1bmN0aW9uXCI7XG5cdH07XG5cblxudmFyIGlzV2luZG93ID0gZnVuY3Rpb24gaXNXaW5kb3coIG9iaiApIHtcblx0XHRyZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09PSBvYmoud2luZG93O1xuXHR9O1xuXG5cbnZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcblxuXG5cblx0dmFyIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgPSB7XG5cdFx0dHlwZTogdHJ1ZSxcblx0XHRzcmM6IHRydWUsXG5cdFx0bm9uY2U6IHRydWUsXG5cdFx0bm9Nb2R1bGU6IHRydWVcblx0fTtcblxuXHRmdW5jdGlvbiBET01FdmFsKCBjb2RlLCBub2RlLCBkb2MgKSB7XG5cdFx0ZG9jID0gZG9jIHx8IGRvY3VtZW50O1xuXG5cdFx0dmFyIGksIHZhbCxcblx0XHRcdHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KCBcInNjcmlwdFwiICk7XG5cblx0XHRzY3JpcHQudGV4dCA9IGNvZGU7XG5cdFx0aWYgKCBub2RlICkge1xuXHRcdFx0Zm9yICggaSBpbiBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNjQrLCBFZGdlIDE4K1xuXHRcdFx0XHQvLyBTb21lIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgdGhlIFwibm9uY2VcIiBwcm9wZXJ0eSBvbiBzY3JpcHRzLlxuXHRcdFx0XHQvLyBPbiB0aGUgb3RoZXIgaGFuZCwganVzdCB1c2luZyBgZ2V0QXR0cmlidXRlYCBpcyBub3QgZW5vdWdoIGFzXG5cdFx0XHRcdC8vIHRoZSBgbm9uY2VgIGF0dHJpYnV0ZSBpcyByZXNldCB0byBhbiBlbXB0eSBzdHJpbmcgd2hlbmV2ZXIgaXRcblx0XHRcdFx0Ly8gYmVjb21lcyBicm93c2luZy1jb250ZXh0IGNvbm5lY3RlZC5cblx0XHRcdFx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvaHRtbC9pc3N1ZXMvMjM2OVxuXHRcdFx0XHQvLyBTZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jbm9uY2UtYXR0cmlidXRlc1xuXHRcdFx0XHQvLyBUaGUgYG5vZGUuZ2V0QXR0cmlidXRlYCBjaGVjayB3YXMgYWRkZWQgZm9yIHRoZSBzYWtlIG9mXG5cdFx0XHRcdC8vIGBqUXVlcnkuZ2xvYmFsRXZhbGAgc28gdGhhdCBpdCBjYW4gZmFrZSBhIG5vbmNlLWNvbnRhaW5pbmcgbm9kZVxuXHRcdFx0XHQvLyB2aWEgYW4gb2JqZWN0LlxuXHRcdFx0XHR2YWwgPSBub2RlWyBpIF0gfHwgbm9kZS5nZXRBdHRyaWJ1dGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoIGkgKTtcblx0XHRcdFx0aWYgKCB2YWwgKSB7XG5cdFx0XHRcdFx0c2NyaXB0LnNldEF0dHJpYnV0ZSggaSwgdmFsICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZG9jLmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdCApLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHNjcmlwdCApO1xuXHR9XG5cblxuZnVuY3Rpb24gdG9UeXBlKCBvYmogKSB7XG5cdGlmICggb2JqID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIG9iaiArIFwiXCI7XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHkgKGZ1bmN0aW9uaXNoIFJlZ0V4cClcblx0cmV0dXJuIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiID9cblx0XHRjbGFzczJ0eXBlWyB0b1N0cmluZy5jYWxsKCBvYmogKSBdIHx8IFwib2JqZWN0XCIgOlxuXHRcdHR5cGVvZiBvYmo7XG59XG4vKiBnbG9iYWwgU3ltYm9sICovXG4vLyBEZWZpbmluZyB0aGlzIGdsb2JhbCBpbiAuZXNsaW50cmMuanNvbiB3b3VsZCBjcmVhdGUgYSBkYW5nZXIgb2YgdXNpbmcgdGhlIGdsb2JhbFxuLy8gdW5ndWFyZGVkIGluIGFub3RoZXIgcGxhY2UsIGl0IHNlZW1zIHNhZmVyIHRvIGRlZmluZSBnbG9iYWwgb25seSBmb3IgdGhpcyBtb2R1bGVcblxuXG5cbnZhciB2ZXJzaW9uID0gXCIzLjcuMVwiLFxuXG5cdHJodG1sU3VmZml4ID0gL0hUTUwkL2ksXG5cblx0Ly8gRGVmaW5lIGEgbG9jYWwgY29weSBvZiBqUXVlcnlcblx0alF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXG5cdFx0Ly8gVGhlIGpRdWVyeSBvYmplY3QgaXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnXG5cdFx0Ly8gTmVlZCBpbml0IGlmIGpRdWVyeSBpcyBjYWxsZWQgKGp1c3QgYWxsb3cgZXJyb3IgdG8gYmUgdGhyb3duIGlmIG5vdCBpbmNsdWRlZClcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4dCApO1xuXHR9O1xuXG5qUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0ge1xuXG5cdC8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWRcblx0anF1ZXJ5OiB2ZXJzaW9uLFxuXG5cdGNvbnN0cnVjdG9yOiBqUXVlcnksXG5cblx0Ly8gVGhlIGRlZmF1bHQgbGVuZ3RoIG9mIGEgalF1ZXJ5IG9iamVjdCBpcyAwXG5cdGxlbmd0aDogMCxcblxuXHR0b0FycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHR9LFxuXG5cdC8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1Jcblx0Ly8gR2V0IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXlcblx0Z2V0OiBmdW5jdGlvbiggbnVtICkge1xuXG5cdFx0Ly8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBjbGVhbiBhcnJheVxuXHRcdGlmICggbnVtID09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiBqdXN0IHRoZSBvbmUgZWxlbWVudCBmcm9tIHRoZSBzZXRcblx0XHRyZXR1cm4gbnVtIDwgMCA/IHRoaXNbIG51bSArIHRoaXMubGVuZ3RoIF0gOiB0aGlzWyBudW0gXTtcblx0fSxcblxuXHQvLyBUYWtlIGFuIGFycmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhlIHN0YWNrXG5cdC8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KVxuXHRwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblxuXHRcdC8vIEJ1aWxkIGEgbmV3IGpRdWVyeSBtYXRjaGVkIGVsZW1lbnQgc2V0XG5cdFx0dmFyIHJldCA9IGpRdWVyeS5tZXJnZSggdGhpcy5jb25zdHJ1Y3RvcigpLCBlbGVtcyApO1xuXG5cdFx0Ly8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVyZW5jZSlcblx0XHRyZXQucHJldk9iamVjdCA9IHRoaXM7XG5cblx0XHQvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldFxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0Ly8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC5cblx0ZWFjaDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2sgKTtcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwoIGVsZW0sIGksIGVsZW0gKTtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRzbGljZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBzbGljZS5hcHBseSggdGhpcywgYXJndW1lbnRzICkgKTtcblx0fSxcblxuXHRmaXJzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIDAgKTtcblx0fSxcblxuXHRsYXN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggLTEgKTtcblx0fSxcblxuXHRldmVuOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5ncmVwKCB0aGlzLCBmdW5jdGlvbiggX2VsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gKCBpICsgMSApICUgMjtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRvZGQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5LmdyZXAoIHRoaXMsIGZ1bmN0aW9uKCBfZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiBpICUgMjtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRlcTogZnVuY3Rpb24oIGkgKSB7XG5cdFx0dmFyIGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0aiA9ICtpICsgKCBpIDwgMCA/IGxlbiA6IDAgKTtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGogPj0gMCAmJiBqIDwgbGVuID8gWyB0aGlzWyBqIF0gXSA6IFtdICk7XG5cdH0sXG5cblx0ZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IoKTtcblx0fSxcblxuXHQvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuXG5cdC8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLlxuXHRwdXNoOiBwdXNoLFxuXHRzb3J0OiBhcnIuc29ydCxcblx0c3BsaWNlOiBhcnIuc3BsaWNlXG59O1xuXG5qUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUsXG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyAwIF0gfHwge30sXG5cdFx0aSA9IDEsXG5cdFx0bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcblx0XHRkZWVwID0gZmFsc2U7XG5cblx0Ly8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvblxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGRlZXAgPSB0YXJnZXQ7XG5cblx0XHQvLyBTa2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0XG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyBpIF0gfHwge307XG5cdFx0aSsrO1xuXHR9XG5cblx0Ly8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpXG5cdGlmICggdHlwZW9mIHRhcmdldCAhPT0gXCJvYmplY3RcIiAmJiAhaXNGdW5jdGlvbiggdGFyZ2V0ICkgKSB7XG5cdFx0dGFyZ2V0ID0ge307XG5cdH1cblxuXHQvLyBFeHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWRcblx0aWYgKCBpID09PSBsZW5ndGggKSB7XG5cdFx0dGFyZ2V0ID0gdGhpcztcblx0XHRpLS07XG5cdH1cblxuXHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblxuXHRcdC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXNcblx0XHRpZiAoICggb3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBdICkgIT0gbnVsbCApIHtcblxuXHRcdFx0Ly8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdFxuXHRcdFx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdFx0XHRjb3B5ID0gb3B0aW9uc1sgbmFtZSBdO1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgT2JqZWN0LnByb3RvdHlwZSBwb2xsdXRpb25cblx0XHRcdFx0Ly8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcFxuXHRcdFx0XHRpZiAoIG5hbWUgPT09IFwiX19wcm90b19fXCIgfHwgdGFyZ2V0ID09PSBjb3B5ICkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzXG5cdFx0XHRcdGlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvcHkgKSB8fFxuXHRcdFx0XHRcdCggY29weUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KCBjb3B5ICkgKSApICkge1xuXHRcdFx0XHRcdHNyYyA9IHRhcmdldFsgbmFtZSBdO1xuXG5cdFx0XHRcdFx0Ly8gRW5zdXJlIHByb3BlciB0eXBlIGZvciB0aGUgc291cmNlIHZhbHVlXG5cdFx0XHRcdFx0aWYgKCBjb3B5SXNBcnJheSAmJiAhQXJyYXkuaXNBcnJheSggc3JjICkgKSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IFtdO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoICFjb3B5SXNBcnJheSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHNyYyApICkge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSB7fTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvcHlJc0FycmF5ID0gZmFsc2U7XG5cblx0XHRcdFx0XHQvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW1cblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25lLCBjb3B5ICk7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlc1xuXHRcdFx0XHR9IGVsc2UgaWYgKCBjb3B5ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBjb3B5O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3Rcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBVbmlxdWUgZm9yIGVhY2ggY29weSBvZiBqUXVlcnkgb24gdGhlIHBhZ2Vcblx0ZXhwYW5kbzogXCJqUXVlcnlcIiArICggdmVyc2lvbiArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNlKCAvXFxEL2csIFwiXCIgKSxcblxuXHQvLyBBc3N1bWUgalF1ZXJ5IGlzIHJlYWR5IHdpdGhvdXQgdGhlIHJlYWR5IG1vZHVsZVxuXHRpc1JlYWR5OiB0cnVlLFxuXG5cdGVycm9yOiBmdW5jdGlvbiggbXNnICkge1xuXHRcdHRocm93IG5ldyBFcnJvciggbXNnICk7XG5cdH0sXG5cblx0bm9vcDogZnVuY3Rpb24oKSB7fSxcblxuXHRpc1BsYWluT2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHZhciBwcm90bywgQ3RvcjtcblxuXHRcdC8vIERldGVjdCBvYnZpb3VzIG5lZ2F0aXZlc1xuXHRcdC8vIFVzZSB0b1N0cmluZyBpbnN0ZWFkIG9mIGpRdWVyeS50eXBlIHRvIGNhdGNoIGhvc3Qgb2JqZWN0c1xuXHRcdGlmICggIW9iaiB8fCB0b1N0cmluZy5jYWxsKCBvYmogKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRwcm90byA9IGdldFByb3RvKCBvYmogKTtcblxuXHRcdC8vIE9iamVjdHMgd2l0aCBubyBwcm90b3R5cGUgKGUuZy4sIGBPYmplY3QuY3JlYXRlKCBudWxsIClgKSBhcmUgcGxhaW5cblx0XHRpZiAoICFwcm90byApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIE9iamVjdHMgd2l0aCBwcm90b3R5cGUgYXJlIHBsYWluIGlmZiB0aGV5IHdlcmUgY29uc3RydWN0ZWQgYnkgYSBnbG9iYWwgT2JqZWN0IGZ1bmN0aW9uXG5cdFx0Q3RvciA9IGhhc093bi5jYWxsKCBwcm90bywgXCJjb25zdHJ1Y3RvclwiICkgJiYgcHJvdG8uY29uc3RydWN0b3I7XG5cdFx0cmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgZm5Ub1N0cmluZy5jYWxsKCBDdG9yICkgPT09IE9iamVjdEZ1bmN0aW9uU3RyaW5nO1xuXHR9LFxuXG5cdGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIG5hbWU7XG5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Ly8gRXZhbHVhdGVzIGEgc2NyaXB0IGluIGEgcHJvdmlkZWQgY29udGV4dDsgZmFsbHMgYmFjayB0byB0aGUgZ2xvYmFsIG9uZVxuXHQvLyBpZiBub3Qgc3BlY2lmaWVkLlxuXHRnbG9iYWxFdmFsOiBmdW5jdGlvbiggY29kZSwgb3B0aW9ucywgZG9jICkge1xuXHRcdERPTUV2YWwoIGNvZGUsIHsgbm9uY2U6IG9wdGlvbnMgJiYgb3B0aW9ucy5ub25jZSB9LCBkb2MgKTtcblx0fSxcblxuXHRlYWNoOiBmdW5jdGlvbiggb2JqLCBjYWxsYmFjayApIHtcblx0XHR2YXIgbGVuZ3RoLCBpID0gMDtcblxuXHRcdGlmICggaXNBcnJheUxpa2UoIG9iaiApICkge1xuXHRcdFx0bGVuZ3RoID0gb2JqLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIG9iaiApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cblx0Ly8gUmV0cmlldmUgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzXG5cdHRleHQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBub2RlLFxuXHRcdFx0cmV0ID0gXCJcIixcblx0XHRcdGkgPSAwLFxuXHRcdFx0bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0aWYgKCAhbm9kZVR5cGUgKSB7XG5cblx0XHRcdC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5XG5cdFx0XHR3aGlsZSAoICggbm9kZSA9IGVsZW1bIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0Ly8gRG8gbm90IHRyYXZlcnNlIGNvbW1lbnQgbm9kZXNcblx0XHRcdFx0cmV0ICs9IGpRdWVyeS50ZXh0KCBub2RlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICggbm9kZVR5cGUgPT09IDEgfHwgbm9kZVR5cGUgPT09IDExICkge1xuXHRcdFx0cmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7XG5cdFx0fVxuXHRcdGlmICggbm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kb2N1bWVudEVsZW1lbnQudGV4dENvbnRlbnQ7XG5cdFx0fVxuXHRcdGlmICggbm9kZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5ub2RlVmFsdWU7XG5cdFx0fVxuXG5cdFx0Ly8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzXG5cblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdC8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFrZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkge1xuXHRcdHZhciByZXQgPSByZXN1bHRzIHx8IFtdO1xuXG5cdFx0aWYgKCBhcnIgIT0gbnVsbCApIHtcblx0XHRcdGlmICggaXNBcnJheUxpa2UoIE9iamVjdCggYXJyICkgKSApIHtcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCByZXQsXG5cdFx0XHRcdFx0dHlwZW9mIGFyciA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0XHRbIGFyciBdIDogYXJyXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmNhbGwoIHJldCwgYXJyICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHRpbkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyLCBpICkge1xuXHRcdHJldHVybiBhcnIgPT0gbnVsbCA/IC0xIDogaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0sIGkgKTtcblx0fSxcblxuXHRpc1hNTERvYzogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWVzcGFjZSA9IGVsZW0gJiYgZWxlbS5uYW1lc3BhY2VVUkksXG5cdFx0XHRkb2NFbGVtID0gZWxlbSAmJiAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkuZG9jdW1lbnRFbGVtZW50O1xuXG5cdFx0Ly8gQXNzdW1lIEhUTUwgd2hlbiBkb2N1bWVudEVsZW1lbnQgZG9lc24ndCB5ZXQgZXhpc3QsIHN1Y2ggYXMgaW5zaWRlXG5cdFx0Ly8gZG9jdW1lbnQgZnJhZ21lbnRzLlxuXHRcdHJldHVybiAhcmh0bWxTdWZmaXgudGVzdCggbmFtZXNwYWNlIHx8IGRvY0VsZW0gJiYgZG9jRWxlbS5ub2RlTmFtZSB8fCBcIkhUTUxcIiApO1xuXHR9LFxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdG1lcmdlOiBmdW5jdGlvbiggZmlyc3QsIHNlY29uZCApIHtcblx0XHR2YXIgbGVuID0gK3NlY29uZC5sZW5ndGgsXG5cdFx0XHRqID0gMCxcblx0XHRcdGkgPSBmaXJzdC5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdO1xuXHRcdH1cblxuXHRcdGZpcnN0Lmxlbmd0aCA9IGk7XG5cblx0XHRyZXR1cm4gZmlyc3Q7XG5cdH0sXG5cblx0Z3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgaW52ZXJ0ICkge1xuXHRcdHZhciBjYWxsYmFja0ludmVyc2UsXG5cdFx0XHRtYXRjaGVzID0gW10sXG5cdFx0XHRpID0gMCxcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aCxcblx0XHRcdGNhbGxiYWNrRXhwZWN0ID0gIWludmVydDtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCBvbmx5IHNhdmluZyB0aGUgaXRlbXNcblx0XHQvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvblxuXHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0Y2FsbGJhY2tJbnZlcnNlID0gIWNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpICk7XG5cdFx0XHRpZiAoIGNhbGxiYWNrSW52ZXJzZSAhPT0gY2FsbGJhY2tFeHBlY3QgKSB7XG5cdFx0XHRcdG1hdGNoZXMucHVzaCggZWxlbXNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBtYXRjaGVzO1xuXHR9LFxuXG5cdC8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGFyZyApIHtcblx0XHR2YXIgbGVuZ3RoLCB2YWx1ZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0cmV0ID0gW107XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIgbmV3IHZhbHVlc1xuXHRcdGlmICggaXNBcnJheUxpa2UoIGVsZW1zICkgKSB7XG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBHbyB0aHJvdWdoIGV2ZXJ5IGtleSBvbiB0aGUgb2JqZWN0LFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIGVsZW1zICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdFx0cmV0dXJuIGZsYXQoIHJldCApO1xuXHR9LFxuXG5cdC8vIEEgZ2xvYmFsIEdVSUQgY291bnRlciBmb3Igb2JqZWN0c1xuXHRndWlkOiAxLFxuXG5cdC8vIGpRdWVyeS5zdXBwb3J0IGlzIG5vdCB1c2VkIGluIENvcmUgYnV0IG90aGVyIHByb2plY3RzIGF0dGFjaCB0aGVpclxuXHQvLyBwcm9wZXJ0aWVzIHRvIGl0IHNvIGl0IG5lZWRzIHRvIGV4aXN0LlxuXHRzdXBwb3J0OiBzdXBwb3J0XG59ICk7XG5cbmlmICggdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICkge1xuXHRqUXVlcnkuZm5bIFN5bWJvbC5pdGVyYXRvciBdID0gYXJyWyBTeW1ib2wuaXRlcmF0b3IgXTtcbn1cblxuLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5cGUgbWFwXG5qUXVlcnkuZWFjaCggXCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbFwiLnNwbGl0KCBcIiBcIiApLFxuXHRmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdFx0Y2xhc3MydHlwZVsgXCJbb2JqZWN0IFwiICsgbmFtZSArIFwiXVwiIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdH0gKTtcblxuZnVuY3Rpb24gaXNBcnJheUxpa2UoIG9iaiApIHtcblxuXHQvLyBTdXBwb3J0OiByZWFsIGlPUyA4LjIgb25seSAobm90IHJlcHJvZHVjaWJsZSBpbiBzaW11bGF0b3IpXG5cdC8vIGBpbmAgY2hlY2sgdXNlZCB0byBwcmV2ZW50IEpJVCBlcnJvciAoZ2gtMjE0NSlcblx0Ly8gaGFzT3duIGlzbid0IHVzZWQgaGVyZSBkdWUgdG8gZmFsc2UgbmVnYXRpdmVzXG5cdC8vIHJlZ2FyZGluZyBOb2RlbGlzdCBsZW5ndGggaW4gSUVcblx0dmFyIGxlbmd0aCA9ICEhb2JqICYmIFwibGVuZ3RoXCIgaW4gb2JqICYmIG9iai5sZW5ndGgsXG5cdFx0dHlwZSA9IHRvVHlwZSggb2JqICk7XG5cblx0aWYgKCBpc0Z1bmN0aW9uKCBvYmogKSB8fCBpc1dpbmRvdyggb2JqICkgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHR5cGUgPT09IFwiYXJyYXlcIiB8fCBsZW5ndGggPT09IDAgfHxcblx0XHR0eXBlb2YgbGVuZ3RoID09PSBcIm51bWJlclwiICYmIGxlbmd0aCA+IDAgJiYgKCBsZW5ndGggLSAxICkgaW4gb2JqO1xufVxuXG5cbmZ1bmN0aW9uIG5vZGVOYW1lKCBlbGVtLCBuYW1lICkge1xuXG5cdHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG59XG52YXIgcG9wID0gYXJyLnBvcDtcblxuXG52YXIgc29ydCA9IGFyci5zb3J0O1xuXG5cbnZhciBzcGxpY2UgPSBhcnIuc3BsaWNlO1xuXG5cbnZhciB3aGl0ZXNwYWNlID0gXCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiO1xuXG5cbnZhciBydHJpbUNTUyA9IG5ldyBSZWdFeHAoXG5cdFwiXlwiICsgd2hpdGVzcGFjZSArIFwiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIiArIHdoaXRlc3BhY2UgKyBcIiskXCIsXG5cdFwiZ1wiXG4pO1xuXG5cblxuXG4vLyBOb3RlOiBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmXG5qUXVlcnkuY29udGFpbnMgPSBmdW5jdGlvbiggYSwgYiApIHtcblx0dmFyIGJ1cCA9IGIgJiYgYi5wYXJlbnROb2RlO1xuXG5cdHJldHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUgPT09IDEgJiYgKFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExK1xuXHRcdC8vIElFIGRvZXNuJ3QgaGF2ZSBgY29udGFpbnNgIG9uIFNWRy5cblx0XHRhLmNvbnRhaW5zID9cblx0XHRcdGEuY29udGFpbnMoIGJ1cCApIDpcblx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYnVwICkgJiAxNlxuXHQpICk7XG59O1xuXG5cblxuXG4vLyBDU1Mgc3RyaW5nL2lkZW50aWZpZXIgc2VyaWFsaXphdGlvblxuLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNjb21tb24tc2VyaWFsaXppbmctaWRpb21zXG52YXIgcmNzc2VzY2FwZSA9IC8oW1xcMC1cXHgxZlxceDdmXXxeLT9cXGQpfF4tJHxbXlxceDgwLVxcdUZGRkZcXHctXS9nO1xuXG5mdW5jdGlvbiBmY3NzZXNjYXBlKCBjaCwgYXNDb2RlUG9pbnQgKSB7XG5cdGlmICggYXNDb2RlUG9pbnQgKSB7XG5cblx0XHQvLyBVKzAwMDAgTlVMTCBiZWNvbWVzIFUrRkZGRCBSRVBMQUNFTUVOVCBDSEFSQUNURVJcblx0XHRpZiAoIGNoID09PSBcIlxcMFwiICkge1xuXHRcdFx0cmV0dXJuIFwiXFx1RkZGRFwiO1xuXHRcdH1cblxuXHRcdC8vIENvbnRyb2wgY2hhcmFjdGVycyBhbmQgKGRlcGVuZGVudCB1cG9uIHBvc2l0aW9uKSBudW1iZXJzIGdldCBlc2NhcGVkIGFzIGNvZGUgcG9pbnRzXG5cdFx0cmV0dXJuIGNoLnNsaWNlKCAwLCAtMSApICsgXCJcXFxcXCIgKyBjaC5jaGFyQ29kZUF0KCBjaC5sZW5ndGggLSAxICkudG9TdHJpbmcoIDE2ICkgKyBcIiBcIjtcblx0fVxuXG5cdC8vIE90aGVyIHBvdGVudGlhbGx5LXNwZWNpYWwgQVNDSUkgY2hhcmFjdGVycyBnZXQgYmFja3NsYXNoLWVzY2FwZWRcblx0cmV0dXJuIFwiXFxcXFwiICsgY2g7XG59XG5cbmpRdWVyeS5lc2NhcGVTZWxlY3RvciA9IGZ1bmN0aW9uKCBzZWwgKSB7XG5cdHJldHVybiAoIHNlbCArIFwiXCIgKS5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7XG59O1xuXG5cblxuXG52YXIgcHJlZmVycmVkRG9jID0gZG9jdW1lbnQsXG5cdHB1c2hOYXRpdmUgPSBwdXNoO1xuXG4oIGZ1bmN0aW9uKCkge1xuXG52YXIgaSxcblx0RXhwcixcblx0b3V0ZXJtb3N0Q29udGV4dCxcblx0c29ydElucHV0LFxuXHRoYXNEdXBsaWNhdGUsXG5cdHB1c2ggPSBwdXNoTmF0aXZlLFxuXG5cdC8vIExvY2FsIGRvY3VtZW50IHZhcnNcblx0ZG9jdW1lbnQsXG5cdGRvY3VtZW50RWxlbWVudCxcblx0ZG9jdW1lbnRJc0hUTUwsXG5cdHJidWdneVFTQSxcblx0bWF0Y2hlcyxcblxuXHQvLyBJbnN0YW5jZS1zcGVjaWZpYyBkYXRhXG5cdGV4cGFuZG8gPSBqUXVlcnkuZXhwYW5kbyxcblx0ZGlycnVucyA9IDAsXG5cdGRvbmUgPSAwLFxuXHRjbGFzc0NhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0dG9rZW5DYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdGNvbXBpbGVyQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRub25uYXRpdmVTZWxlY3RvckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0c29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIDA7XG5cdH0sXG5cblx0Ym9vbGVhbnMgPSBcImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxcIiArXG5cdFx0XCJsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkXCIsXG5cblx0Ly8gUmVndWxhciBleHByZXNzaW9uc1xuXG5cdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mtc3ludGF4LTMvI2lkZW50LXRva2VuLWRpYWdyYW1cblx0aWRlbnRpZmllciA9IFwiKD86XFxcXFxcXFxbXFxcXGRhLWZBLUZdezEsNn1cIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiP3xcXFxcXFxcXFteXFxcXHJcXFxcblxcXFxmXXxbXFxcXHctXXxbXlxcMC1cXFxceDdmXSkrXCIsXG5cblx0Ly8gQXR0cmlidXRlIHNlbGVjdG9yczogaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9yc1xuXHRhdHRyaWJ1dGVzID0gXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcIiArIHdoaXRlc3BhY2UgK1xuXG5cdFx0Ly8gT3BlcmF0b3IgKGNhcHR1cmUgMilcblx0XHRcIiooWypeJHwhfl0/PSlcIiArIHdoaXRlc3BhY2UgK1xuXG5cdFx0Ly8gXCJBdHRyaWJ1dGUgdmFsdWVzIG11c3QgYmUgQ1NTIGlkZW50aWZpZXJzIFtjYXB0dXJlIDVdIG9yIHN0cmluZ3MgW2NhcHR1cmUgMyBvciBjYXB0dXJlIDRdXCJcblx0XHRcIiooPzonKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCJ8KFwiICsgaWRlbnRpZmllciArIFwiKSl8KVwiICtcblx0XHR3aGl0ZXNwYWNlICsgXCIqXFxcXF1cIixcblxuXHRwc2V1ZG9zID0gXCI6KFwiICsgaWRlbnRpZmllciArIFwiKSg/OlxcXFwoKFwiICtcblxuXHRcdC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycyBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBwcmVGaWx0ZXIsIHByZWZlciBhcmd1bWVudHM6XG5cdFx0Ly8gMS4gcXVvdGVkIChjYXB0dXJlIDM7IGNhcHR1cmUgNCBvciBjYXB0dXJlIDUpXG5cdFx0XCIoJygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwiKXxcIiArXG5cblx0XHQvLyAyLiBzaW1wbGUgKGNhcHR1cmUgNilcblx0XHRcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpW1xcXFxdXXxcIiArIGF0dHJpYnV0ZXMgKyBcIikqKXxcIiArXG5cblx0XHQvLyAzLiBhbnl0aGluZyBlbHNlIChjYXB0dXJlIDIpXG5cdFx0XCIuKlwiICtcblx0XHRcIilcXFxcKXwpXCIsXG5cblx0Ly8gTGVhZGluZyBhbmQgbm9uLWVzY2FwZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgY2FwdHVyaW5nIHNvbWUgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBwcmVjZWRpbmcgdGhlIGxhdHRlclxuXHRyd2hpdGVzcGFjZSA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcIitcIiwgXCJnXCIgKSxcblxuXHRyY29tbWEgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiosXCIgKyB3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblx0cmxlYWRpbmdDb21iaW5hdG9yID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFs+K35dfFwiICsgd2hpdGVzcGFjZSArIFwiKVwiICtcblx0XHR3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblx0cmRlc2NlbmQgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCJ8PlwiICksXG5cblx0cnBzZXVkbyA9IG5ldyBSZWdFeHAoIHBzZXVkb3MgKSxcblx0cmlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKCBcIl5cIiArIGlkZW50aWZpZXIgKyBcIiRcIiApLFxuXG5cdG1hdGNoRXhwciA9IHtcblx0XHRJRDogbmV3IFJlZ0V4cCggXCJeIyhcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdENMQVNTOiBuZXcgUmVnRXhwKCBcIl5cXFxcLihcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFRBRzogbmV3IFJlZ0V4cCggXCJeKFwiICsgaWRlbnRpZmllciArIFwifFsqXSlcIiApLFxuXHRcdEFUVFI6IG5ldyBSZWdFeHAoIFwiXlwiICsgYXR0cmlidXRlcyApLFxuXHRcdFBTRVVETzogbmV3IFJlZ0V4cCggXCJeXCIgKyBwc2V1ZG9zICksXG5cdFx0Q0hJTEQ6IG5ldyBSZWdFeHAoXG5cdFx0XHRcIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcXFwoXCIgK1xuXHRcdFx0XHR3aGl0ZXNwYWNlICsgXCIqKGV2ZW58b2RkfCgoWystXXwpKFxcXFxkKilufClcIiArIHdoaXRlc3BhY2UgKyBcIiooPzooWystXXwpXCIgK1xuXHRcdFx0XHR3aGl0ZXNwYWNlICsgXCIqKFxcXFxkKyl8KSlcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpXCIsIFwiaVwiICksXG5cdFx0Ym9vbDogbmV3IFJlZ0V4cCggXCJeKD86XCIgKyBib29sZWFucyArIFwiKSRcIiwgXCJpXCIgKSxcblxuXHRcdC8vIEZvciB1c2UgaW4gbGlicmFyaWVzIGltcGxlbWVudGluZyAuaXMoKVxuXHRcdC8vIFdlIHVzZSB0aGlzIGZvciBQT1MgbWF0Y2hpbmcgaW4gYHNlbGVjdGBcblx0XHRuZWVkc0NvbnRleHQ6IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKigoPzotXFxcXGQpP1xcXFxkKilcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpKD89W14tXXwkKVwiLCBcImlcIiApXG5cdH0sXG5cblx0cmlucHV0cyA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJoZWFkZXIgPSAvXmhcXGQkL2ksXG5cblx0Ly8gRWFzaWx5LXBhcnNlYWJsZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzXG5cdHJxdWlja0V4cHIgPSAvXig/OiMoW1xcdy1dKyl8KFxcdyspfFxcLihbXFx3LV0rKSkkLyxcblxuXHRyc2libGluZyA9IC9bK35dLyxcblxuXHQvLyBDU1MgZXNjYXBlc1xuXHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI2VzY2FwZWQtY2hhcmFjdGVyc1xuXHRydW5lc2NhcGUgPSBuZXcgUmVnRXhwKCBcIlxcXFxcXFxcW1xcXFxkYS1mQS1GXXsxLDZ9XCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIj98XFxcXFxcXFwoW15cXFxcclxcXFxuXFxcXGZdKVwiLCBcImdcIiApLFxuXHRmdW5lc2NhcGUgPSBmdW5jdGlvbiggZXNjYXBlLCBub25IZXggKSB7XG5cdFx0dmFyIGhpZ2ggPSBcIjB4XCIgKyBlc2NhcGUuc2xpY2UoIDEgKSAtIDB4MTAwMDA7XG5cblx0XHRpZiAoIG5vbkhleCApIHtcblxuXHRcdFx0Ly8gU3RyaXAgdGhlIGJhY2tzbGFzaCBwcmVmaXggZnJvbSBhIG5vbi1oZXggZXNjYXBlIHNlcXVlbmNlXG5cdFx0XHRyZXR1cm4gbm9uSGV4O1xuXHRcdH1cblxuXHRcdC8vIFJlcGxhY2UgYSBoZXhhZGVjaW1hbCBlc2NhcGUgc2VxdWVuY2Ugd2l0aCB0aGUgZW5jb2RlZCBVbmljb2RlIGNvZGUgcG9pbnRcblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExK1xuXHRcdC8vIEZvciB2YWx1ZXMgb3V0c2lkZSB0aGUgQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lIChCTVApLCBtYW51YWxseSBjb25zdHJ1Y3QgYVxuXHRcdC8vIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0cmV0dXJuIGhpZ2ggPCAwID9cblx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOlxuXHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCA+PiAxMCB8IDB4RDgwMCwgaGlnaCAmIDB4M0ZGIHwgMHhEQzAwICk7XG5cdH0sXG5cblx0Ly8gVXNlZCBmb3IgaWZyYW1lczsgc2VlIGBzZXREb2N1bWVudGAuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCtcblx0Ly8gUmVtb3ZpbmcgdGhlIGZ1bmN0aW9uIHdyYXBwZXIgY2F1c2VzIGEgXCJQZXJtaXNzaW9uIERlbmllZFwiXG5cdC8vIGVycm9yIGluIElFL0VkZ2UuXG5cdHVubG9hZEhhbmRsZXIgPSBmdW5jdGlvbigpIHtcblx0XHRzZXREb2N1bWVudCgpO1xuXHR9LFxuXG5cdGluRGlzYWJsZWRGaWVsZHNldCA9IGFkZENvbWJpbmF0b3IoXG5cdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZSAmJiBub2RlTmFtZSggZWxlbSwgXCJmaWVsZHNldFwiICk7XG5cdFx0fSxcblx0XHR7IGRpcjogXCJwYXJlbnROb2RlXCIsIG5leHQ6IFwibGVnZW5kXCIgfVxuXHQpO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gQWNjZXNzaW5nIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgY2FuIHRocm93IHVuZXhwZWN0ZWRseVxuLy8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzkzXG5mdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblx0fSBjYXRjaCAoIGVyciApIHsgfVxufVxuXG4vLyBPcHRpbWl6ZSBmb3IgcHVzaC5hcHBseSggXywgTm9kZUxpc3QgKVxudHJ5IHtcblx0cHVzaC5hcHBseShcblx0XHQoIGFyciA9IHNsaWNlLmNhbGwoIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzICkgKSxcblx0XHRwcmVmZXJyZWREb2MuY2hpbGROb2Rlc1xuXHQpO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjBcblx0Ly8gRGV0ZWN0IHNpbGVudGx5IGZhaWxpbmcgcHVzaC5hcHBseVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdGFyclsgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMubGVuZ3RoIF0ubm9kZVR5cGU7XG59IGNhdGNoICggZSApIHtcblx0cHVzaCA9IHtcblx0XHRhcHBseTogZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0cHVzaE5hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKCBlbHMgKSApO1xuXHRcdH0sXG5cdFx0Y2FsbDogZnVuY3Rpb24oIHRhcmdldCApIHtcblx0XHRcdHB1c2hOYXRpdmUuYXBwbHkoIHRhcmdldCwgc2xpY2UuY2FsbCggYXJndW1lbnRzLCAxICkgKTtcblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIGZpbmQoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgbSwgaSwgZWxlbSwgbmlkLCBtYXRjaCwgZ3JvdXBzLCBuZXdTZWxlY3Rvcixcblx0XHRuZXdDb250ZXh0ID0gY29udGV4dCAmJiBjb250ZXh0Lm93bmVyRG9jdW1lbnQsXG5cblx0XHQvLyBub2RlVHlwZSBkZWZhdWx0cyB0byA5LCBzaW5jZSBjb250ZXh0IGRlZmF1bHRzIHRvIGRvY3VtZW50XG5cdFx0bm9kZVR5cGUgPSBjb250ZXh0ID8gY29udGV4dC5ub2RlVHlwZSA6IDk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGZyb20gY2FsbHMgd2l0aCBpbnZhbGlkIHNlbGVjdG9yIG9yIGNvbnRleHRcblx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgfHwgIXNlbGVjdG9yIHx8XG5cdFx0bm9kZVR5cGUgIT09IDEgJiYgbm9kZVR5cGUgIT09IDkgJiYgbm9kZVR5cGUgIT09IDExICkge1xuXG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH1cblxuXHQvLyBUcnkgdG8gc2hvcnRjdXQgZmluZCBvcGVyYXRpb25zIChhcyBvcHBvc2VkIHRvIGZpbHRlcnMpIGluIEhUTUwgZG9jdW1lbnRzXG5cdGlmICggIXNlZWQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0XHRjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDtcblxuXHRcdGlmICggZG9jdW1lbnRJc0hUTUwgKSB7XG5cblx0XHRcdC8vIElmIHRoZSBzZWxlY3RvciBpcyBzdWZmaWNpZW50bHkgc2ltcGxlLCB0cnkgdXNpbmcgYSBcImdldCpCeSpcIiBET00gbWV0aG9kXG5cdFx0XHQvLyAoZXhjZXB0aW5nIERvY3VtZW50RnJhZ21lbnQgY29udGV4dCwgd2hlcmUgdGhlIG1ldGhvZHMgZG9uJ3QgZXhpc3QpXG5cdFx0XHRpZiAoIG5vZGVUeXBlICE9PSAxMSAmJiAoIG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApICkgKSB7XG5cblx0XHRcdFx0Ly8gSUQgc2VsZWN0b3Jcblx0XHRcdFx0aWYgKCAoIG0gPSBtYXRjaFsgMSBdICkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb2N1bWVudCBjb250ZXh0XG5cdFx0XHRcdFx0aWYgKCBub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdGlmICggKCBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdFx0aWYgKCBlbGVtLmlkID09PSBtICkge1xuXHRcdFx0XHRcdFx0XHRcdHB1c2guY2FsbCggcmVzdWx0cywgZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEVsZW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0aWYgKCBuZXdDb250ZXh0ICYmICggZWxlbSA9IG5ld0NvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSApICYmXG5cdFx0XHRcdFx0XHRcdGZpbmQuY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKSAmJlxuXHRcdFx0XHRcdFx0XHRlbGVtLmlkID09PSBtICkge1xuXG5cdFx0XHRcdFx0XHRcdHB1c2guY2FsbCggcmVzdWx0cywgZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHlwZSBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFsgMiBdICkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHNlbGVjdG9yICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0XHQvLyBDbGFzcyBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCAoIG0gPSBtYXRjaFsgMyBdICkgJiYgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGFrZSBhZHZhbnRhZ2Ugb2YgcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0aWYgKCAhbm9ubmF0aXZlU2VsZWN0b3JDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdICYmXG5cdFx0XHRcdCggIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHRuZXdTZWxlY3RvciA9IHNlbGVjdG9yO1xuXHRcdFx0XHRuZXdDb250ZXh0ID0gY29udGV4dDtcblxuXHRcdFx0XHQvLyBxU0EgY29uc2lkZXJzIGVsZW1lbnRzIG91dHNpZGUgYSBzY29waW5nIHJvb3Qgd2hlbiBldmFsdWF0aW5nIGNoaWxkIG9yXG5cdFx0XHRcdC8vIGRlc2NlbmRhbnQgY29tYmluYXRvcnMsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnQuXG5cdFx0XHRcdC8vIEluIHN1Y2ggY2FzZXMsIHdlIHdvcmsgYXJvdW5kIHRoZSBiZWhhdmlvciBieSBwcmVmaXhpbmcgZXZlcnkgc2VsZWN0b3IgaW4gdGhlXG5cdFx0XHRcdC8vIGxpc3Qgd2l0aCBhbiBJRCBzZWxlY3RvciByZWZlcmVuY2luZyB0aGUgc2NvcGUgY29udGV4dC5cblx0XHRcdFx0Ly8gVGhlIHRlY2huaXF1ZSBoYXMgdG8gYmUgdXNlZCBhcyB3ZWxsIHdoZW4gYSBsZWFkaW5nIGNvbWJpbmF0b3IgaXMgdXNlZFxuXHRcdFx0XHQvLyBhcyBzdWNoIHNlbGVjdG9ycyBhcmUgbm90IHJlY29nbml6ZWQgYnkgcXVlcnlTZWxlY3RvckFsbC5cblx0XHRcdFx0Ly8gVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoaXMgdGVjaG5pcXVlLlxuXHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0KCByZGVzY2VuZC50ZXN0KCBzZWxlY3RvciApIHx8IHJsZWFkaW5nQ29tYmluYXRvci50ZXN0KCBzZWxlY3RvciApICkgKSB7XG5cblx0XHRcdFx0XHQvLyBFeHBhbmQgY29udGV4dCBmb3Igc2libGluZyBzZWxlY3RvcnNcblx0XHRcdFx0XHRuZXdDb250ZXh0ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHxcblx0XHRcdFx0XHRcdGNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBXZSBjYW4gdXNlIDpzY29wZSBpbnN0ZWFkIG9mIHRoZSBJRCBoYWNrIGlmIHRoZSBicm93c2VyXG5cdFx0XHRcdFx0Ly8gc3VwcG9ydHMgaXQgJiBpZiB3ZSdyZSBub3QgY2hhbmdpbmcgdGhlIGNvbnRleHQuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlblxuXHRcdFx0XHRcdC8vIHN0cmljdC1jb21wYXJpbmcgdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgIT0gY29udGV4dCB8fCAhc3VwcG9ydC5zY29wZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2FwdHVyZSB0aGUgY29udGV4dCBJRCwgc2V0dGluZyBpdCBmaXJzdCBpZiBuZWNlc3Nhcnlcblx0XHRcdFx0XHRcdGlmICggKCBuaWQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSggXCJpZFwiICkgKSApIHtcblx0XHRcdFx0XHRcdFx0bmlkID0galF1ZXJ5LmVzY2FwZVNlbGVjdG9yKCBuaWQgKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHQuc2V0QXR0cmlidXRlKCBcImlkXCIsICggbmlkID0gZXhwYW5kbyApICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJlZml4IGV2ZXJ5IHNlbGVjdG9yIGluIHRoZSBsaXN0XG5cdFx0XHRcdFx0Z3JvdXBzID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0XHRcdFx0aSA9IGdyb3Vwcy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRncm91cHNbIGkgXSA9ICggbmlkID8gXCIjXCIgKyBuaWQgOiBcIjpzY29wZVwiICkgKyBcIiBcIiArXG5cdFx0XHRcdFx0XHRcdHRvU2VsZWN0b3IoIGdyb3Vwc1sgaSBdICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG5ld1NlbGVjdG9yID0gZ3JvdXBzLmpvaW4oIFwiLFwiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsXG5cdFx0XHRcdFx0XHRuZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIG5ld1NlbGVjdG9yIClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHR9IGNhdGNoICggcXNhRXJyb3IgKSB7XG5cdFx0XHRcdFx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSggc2VsZWN0b3IsIHRydWUgKTtcblx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRpZiAoIG5pZCA9PT0gZXhwYW5kbyApIHtcblx0XHRcdFx0XHRcdGNvbnRleHQucmVtb3ZlQXR0cmlidXRlKCBcImlkXCIgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBbGwgb3RoZXJzXG5cdHJldHVybiBzZWxlY3QoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltQ1NTLCBcIiQxXCIgKSwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApO1xufVxuXG4vKipcbiAqIENyZWF0ZSBrZXktdmFsdWUgY2FjaGVzIG9mIGxpbWl0ZWQgc2l6ZVxuICogQHJldHVybnMge2Z1bmN0aW9uKHN0cmluZywgb2JqZWN0KX0gUmV0dXJucyB0aGUgT2JqZWN0IGRhdGEgYWZ0ZXIgc3RvcmluZyBpdCBvbiBpdHNlbGYgd2l0aFxuICpcdHByb3BlcnR5IG5hbWUgdGhlIChzcGFjZS1zdWZmaXhlZCkgc3RyaW5nIGFuZCAoaWYgdGhlIGNhY2hlIGlzIGxhcmdlciB0aGFuIEV4cHIuY2FjaGVMZW5ndGgpXG4gKlx0ZGVsZXRpbmcgdGhlIG9sZGVzdCBlbnRyeVxuICovXG5mdW5jdGlvbiBjcmVhdGVDYWNoZSgpIHtcblx0dmFyIGtleXMgPSBbXTtcblxuXHRmdW5jdGlvbiBjYWNoZSgga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIFVzZSAoa2V5ICsgXCIgXCIpIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBwcm90b3R5cGUgcHJvcGVydGllc1xuXHRcdC8vIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvaXNzdWVzLzE1Nylcblx0XHRpZiAoIGtleXMucHVzaCgga2V5ICsgXCIgXCIgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7XG5cblx0XHRcdC8vIE9ubHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50cmllc1xuXHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlzLnNoaWZ0KCkgXTtcblx0XHR9XG5cdFx0cmV0dXJuICggY2FjaGVbIGtleSArIFwiIFwiIF0gPSB2YWx1ZSApO1xuXHR9XG5cdHJldHVybiBjYWNoZTtcbn1cblxuLyoqXG4gKiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IGpRdWVyeSBzZWxlY3RvciBtb2R1bGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBtYXJrXG4gKi9cbmZ1bmN0aW9uIG1hcmtGdW5jdGlvbiggZm4gKSB7XG5cdGZuWyBleHBhbmRvIF0gPSB0cnVlO1xuXHRyZXR1cm4gZm47XG59XG5cbi8qKlxuICogU3VwcG9ydCB0ZXN0aW5nIHVzaW5nIGFuIGVsZW1lbnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFBhc3NlZCB0aGUgY3JlYXRlZCBlbGVtZW50IGFuZCByZXR1cm5zIGEgYm9vbGVhbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0KCBmbiApIHtcblx0dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJmaWVsZHNldFwiICk7XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gISFmbiggZWwgKTtcblx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGZpbmFsbHkge1xuXG5cdFx0Ly8gUmVtb3ZlIGZyb20gaXRzIHBhcmVudCBieSBkZWZhdWx0XG5cdFx0aWYgKCBlbC5wYXJlbnROb2RlICkge1xuXHRcdFx0ZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWwgKTtcblx0XHR9XG5cblx0XHQvLyByZWxlYXNlIG1lbW9yeSBpbiBJRVxuXHRcdGVsID0gbnVsbDtcblx0fVxufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgaW5wdXQgdHlwZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0UHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBidXR0b25zXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVCdXR0b25Qc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gKCBub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgfHwgbm9kZU5hbWUoIGVsZW0sIFwiYnV0dG9uXCIgKSApICYmXG5cdFx0XHRlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciA6ZW5hYmxlZC86ZGlzYWJsZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZGlzYWJsZWQgdHJ1ZSBmb3IgOmRpc2FibGVkOyBmYWxzZSBmb3IgOmVuYWJsZWRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGRpc2FibGVkICkge1xuXG5cdC8vIEtub3duIDpkaXNhYmxlZCBmYWxzZSBwb3NpdGl2ZXM6IGZpZWxkc2V0W2Rpc2FibGVkXSA+IGxlZ2VuZDpudGgtb2YtdHlwZShuKzIpIDpjYW4tZGlzYWJsZVxuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBPbmx5IGNlcnRhaW4gZWxlbWVudHMgY2FuIG1hdGNoIDplbmFibGVkIG9yIDpkaXNhYmxlZFxuXHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWVuYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1kaXNhYmxlZFxuXHRcdGlmICggXCJmb3JtXCIgaW4gZWxlbSApIHtcblxuXHRcdFx0Ly8gQ2hlY2sgZm9yIGluaGVyaXRlZCBkaXNhYmxlZG5lc3Mgb24gcmVsZXZhbnQgbm9uLWRpc2FibGVkIGVsZW1lbnRzOlxuXHRcdFx0Ly8gKiBsaXN0ZWQgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgZmllbGRzZXRcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjYXRlZ29yeS1saXN0ZWRcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LWZlLWRpc2FibGVkXG5cdFx0XHQvLyAqIG9wdGlvbiBlbGVtZW50cyBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1vcHRpb24tZGlzYWJsZWRcblx0XHRcdC8vIEFsbCBzdWNoIGVsZW1lbnRzIGhhdmUgYSBcImZvcm1cIiBwcm9wZXJ0eS5cblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICYmIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdC8vIE9wdGlvbiBlbGVtZW50cyBkZWZlciB0byBhIHBhcmVudCBvcHRncm91cCBpZiBwcmVzZW50XG5cdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0gKSB7XG5cdFx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0ucGFyZW50Tm9kZS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gMTErXG5cdFx0XHRcdC8vIFVzZSB0aGUgaXNEaXNhYmxlZCBzaG9ydGN1dCBwcm9wZXJ0eSB0byBjaGVjayBmb3IgZGlzYWJsZWQgZmllbGRzZXQgYW5jZXN0b3JzXG5cdFx0XHRcdHJldHVybiBlbGVtLmlzRGlzYWJsZWQgPT09IGRpc2FibGVkIHx8XG5cblx0XHRcdFx0XHQvLyBXaGVyZSB0aGVyZSBpcyBubyBpc0Rpc2FibGVkLCBjaGVjayBtYW51YWxseVxuXHRcdFx0XHRcdGVsZW0uaXNEaXNhYmxlZCAhPT0gIWRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRpbkRpc2FibGVkRmllbGRzZXQoIGVsZW0gKSA9PT0gZGlzYWJsZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblxuXHRcdC8vIFRyeSB0byB3aW5ub3cgb3V0IGVsZW1lbnRzIHRoYXQgY2FuJ3QgYmUgZGlzYWJsZWQgYmVmb3JlIHRydXN0aW5nIHRoZSBkaXNhYmxlZCBwcm9wZXJ0eS5cblx0XHQvLyBTb21lIHZpY3RpbXMgZ2V0IGNhdWdodCBpbiBvdXIgbmV0IChsYWJlbCwgbGVnZW5kLCBtZW51LCB0cmFjayksIGJ1dCBpdCBzaG91bGRuJ3Rcblx0XHQvLyBldmVuIGV4aXN0IG9uIHRoZW0sIGxldCBhbG9uZSBoYXZlIGEgYm9vbGVhbiB2YWx1ZS5cblx0XHR9IGVsc2UgaWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHR9XG5cblx0XHQvLyBSZW1haW5pbmcgZWxlbWVudHMgYXJlIG5laXRoZXIgOmVuYWJsZWQgbm9yIDpkaXNhYmxlZFxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIHBvc2l0aW9uYWxzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICovXG5mdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmbiApIHtcblx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGFyZ3VtZW50ICkge1xuXHRcdGFyZ3VtZW50ID0gK2FyZ3VtZW50O1xuXHRcdHJldHVybiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0dmFyIGosXG5cdFx0XHRcdG1hdGNoSW5kZXhlcyA9IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFyZ3VtZW50ICksXG5cdFx0XHRcdGkgPSBtYXRjaEluZGV4ZXMubGVuZ3RoO1xuXG5cdFx0XHQvLyBNYXRjaCBlbGVtZW50cyBmb3VuZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4ZXNcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoIHNlZWRbICggaiA9IG1hdGNoSW5kZXhlc1sgaSBdICkgXSApIHtcblx0XHRcdFx0XHRzZWVkWyBqIF0gPSAhKCBtYXRjaGVzWyBqIF0gPSBzZWVkWyBqIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSApO1xufVxuXG4vKipcbiAqIENoZWNrcyBhIG5vZGUgZm9yIHZhbGlkaXR5IGFzIGEgalF1ZXJ5IHNlbGVjdG9yIGNvbnRleHRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3Q9fSBjb250ZXh0XG4gKiBAcmV0dXJucyB7RWxlbWVudHxPYmplY3R8Qm9vbGVhbn0gVGhlIGlucHV0IG5vZGUgaWYgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIGEgZmFsc3kgdmFsdWVcbiAqL1xuZnVuY3Rpb24gdGVzdENvbnRleHQoIGNvbnRleHQgKSB7XG5cdHJldHVybiBjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnRleHQ7XG59XG5cbi8qKlxuICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBbbm9kZV0gQW4gZWxlbWVudCBvciBkb2N1bWVudCBvYmplY3QgdG8gdXNlIHRvIHNldCB0aGUgZG9jdW1lbnRcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqL1xuZnVuY3Rpb24gc2V0RG9jdW1lbnQoIG5vZGUgKSB7XG5cdHZhciBzdWJXaW5kb3csXG5cdFx0ZG9jID0gbm9kZSA/IG5vZGUub3duZXJEb2N1bWVudCB8fCBub2RlIDogcHJlZmVycmVkRG9jO1xuXG5cdC8vIFJldHVybiBlYXJseSBpZiBkb2MgaXMgaW52YWxpZCBvciBhbHJlYWR5IHNlbGVjdGVkXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggZG9jID09IGRvY3VtZW50IHx8IGRvYy5ub2RlVHlwZSAhPT0gOSB8fCAhZG9jLmRvY3VtZW50RWxlbWVudCApIHtcblx0XHRyZXR1cm4gZG9jdW1lbnQ7XG5cdH1cblxuXHQvLyBVcGRhdGUgZ2xvYmFsIHZhcmlhYmxlc1xuXHRkb2N1bWVudCA9IGRvYztcblx0ZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXHRkb2N1bWVudElzSFRNTCA9ICFqUXVlcnkuaXNYTUxEb2MoIGRvY3VtZW50ICk7XG5cblx0Ly8gU3VwcG9ydDogaU9TIDcgb25seSwgSUUgOSAtIDExK1xuXHQvLyBPbGRlciBicm93c2VycyBkaWRuJ3Qgc3VwcG9ydCB1bnByZWZpeGVkIGBtYXRjaGVzYC5cblx0bWF0Y2hlcyA9IGRvY3VtZW50RWxlbWVudC5tYXRjaGVzIHx8XG5cdFx0ZG9jdW1lbnRFbGVtZW50LndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY3VtZW50RWxlbWVudC5tc01hdGNoZXNTZWxlY3RvcjtcblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrXG5cdC8vIEFjY2Vzc2luZyBpZnJhbWUgZG9jdW1lbnRzIGFmdGVyIHVubG9hZCB0aHJvd3MgXCJwZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yc1xuXHQvLyAoc2VlIHRyYWMtMTM5MzYpLlxuXHQvLyBMaW1pdCB0aGUgZml4IHRvIElFICYgRWRnZSBMZWdhY3k7IGRlc3BpdGUgRWRnZSAxNSsgaW1wbGVtZW50aW5nIGBtYXRjaGVzYCxcblx0Ly8gYWxsIElFIDkrIGFuZCBFZGdlIExlZ2FjeSB2ZXJzaW9ucyBpbXBsZW1lbnQgYG1zTWF0Y2hlc1NlbGVjdG9yYCBhcyB3ZWxsLlxuXHRpZiAoIGRvY3VtZW50RWxlbWVudC5tc01hdGNoZXNTZWxlY3RvciAmJlxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRwcmVmZXJyZWREb2MgIT0gZG9jdW1lbnQgJiZcblx0XHQoIHN1YldpbmRvdyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3ICkgJiYgc3ViV2luZG93LnRvcCAhPT0gc3ViV2luZG93ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4K1xuXHRcdHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcInVubG9hZFwiLCB1bmxvYWRIYW5kbGVyICk7XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA8MTBcblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudEJ5SWQgcmV0dXJucyBlbGVtZW50cyBieSBuYW1lXG5cdC8vIFRoZSBicm9rZW4gZ2V0RWxlbWVudEJ5SWQgbWV0aG9kcyBkb24ndCBwaWNrIHVwIHByb2dyYW1tYXRpY2FsbHktc2V0IG5hbWVzLFxuXHQvLyBzbyB1c2UgYSByb3VuZGFib3V0IGdldEVsZW1lbnRzQnlOYW1lIHRlc3Rcblx0c3VwcG9ydC5nZXRCeUlkID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBlbCApLmlkID0galF1ZXJ5LmV4cGFuZG87XG5cdFx0cmV0dXJuICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSB8fFxuXHRcdFx0IWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBqUXVlcnkuZXhwYW5kbyApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHQvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3Jcblx0Ly8gb24gYSBkaXNjb25uZWN0ZWQgbm9kZS5cblx0c3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdHJldHVybiBtYXRjaGVzLmNhbGwoIGVsLCBcIipcIiApO1xuXHR9ICk7XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4K1xuXHQvLyBJRS9FZGdlIGRvbid0IHN1cHBvcnQgdGhlIDpzY29wZSBwc2V1ZG8tY2xhc3MuXG5cdHN1cHBvcnQuc2NvcGUgPSBhc3NlcnQoIGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpzY29wZVwiICk7XG5cdH0gKTtcblxuXHQvLyBTdXBwb3J0OiBDaHJvbWUgMTA1IC0gMTExIG9ubHksIFNhZmFyaSAxNS40IC0gMTYuMyBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB0aGUgYDpoYXMoKWAgYXJndW1lbnQgaXMgcGFyc2VkIHVuZm9yZ2l2aW5nbHkuXG5cdC8vIFdlIGluY2x1ZGUgYCpgIGluIHRoZSB0ZXN0IHRvIGRldGVjdCBidWdneSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhcmVcblx0Ly8gX3NlbGVjdGl2ZWx5XyBmb3JnaXZpbmcgKHNwZWNpZmljYWxseSB3aGVuIHRoZSBsaXN0IGluY2x1ZGVzIGF0IGxlYXN0XG5cdC8vIG9uZSB2YWxpZCBzZWxlY3RvcikuXG5cdC8vIE5vdGUgdGhhdCB3ZSB0cmVhdCBjb21wbGV0ZSBsYWNrIG9mIHN1cHBvcnQgZm9yIGA6aGFzKClgIGFzIGlmIGl0IHdlcmVcblx0Ly8gc3BlYy1jb21wbGlhbnQgc3VwcG9ydCwgd2hpY2ggaXMgZmluZSBiZWNhdXNlIHVzZSBvZiBgOmhhcygpYCBpbiBzdWNoXG5cdC8vIGVudmlyb25tZW50cyB3aWxsIGZhaWwgaW4gdGhlIHFTQSBwYXRoIGFuZCBmYWxsIGJhY2sgdG8galF1ZXJ5IHRyYXZlcnNhbFxuXHQvLyBhbnl3YXkuXG5cdHN1cHBvcnQuY3NzSGFzID0gYXNzZXJ0KCBmdW5jdGlvbigpIHtcblx0XHR0cnkge1xuXHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvciggXCI6aGFzKCosOmpxZmFrZSlcIiApO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9ICk7XG5cblx0Ly8gSUQgZmlsdGVyIGFuZCBmaW5kXG5cdGlmICggc3VwcG9ydC5nZXRCeUlkICkge1xuXHRcdEV4cHIuZmlsdGVyLklEID0gZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJpZFwiICkgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblx0XHRFeHByLmZpbmQuSUQgPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cdFx0XHRcdHJldHVybiBlbGVtID8gWyBlbGVtIF0gOiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdEV4cHIuZmlsdGVyLklEID0gIGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIFwiaWRcIiApO1xuXHRcdFx0XHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gNyBvbmx5XG5cdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgaXMgbm90IHJlbGlhYmxlIGFzIGEgZmluZCBzaG9ydGN1dFxuXHRcdEV4cHIuZmluZC5JRCA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBub2RlLCBpLCBlbGVtcyxcblx0XHRcdFx0XHRlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHQvLyBWZXJpZnkgdGhlIGlkIGF0dHJpYnV0ZVxuXHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBGYWxsIGJhY2sgb24gZ2V0RWxlbWVudHNCeU5hbWVcblx0XHRcdFx0XHRlbGVtcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUoIGlkICk7XG5cdFx0XHRcdFx0aSA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvLyBUYWdcblx0RXhwci5maW5kLlRBRyA9IGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcblxuXHRcdC8vIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgZG9uJ3QgaGF2ZSBnRUJUTlxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgKTtcblx0XHR9XG5cdH07XG5cblx0Ly8gQ2xhc3Ncblx0RXhwci5maW5kLkNMQVNTID0gZnVuY3Rpb24oIGNsYXNzTmFtZSwgY29udGV4dCApIHtcblx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBjbGFzc05hbWUgKTtcblx0XHR9XG5cdH07XG5cblx0LyogUVNBL21hdGNoZXNTZWxlY3RvclxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gUVNBIGFuZCBtYXRjaGVzU2VsZWN0b3Igc3VwcG9ydFxuXG5cdHJidWdneVFTQSA9IFtdO1xuXG5cdC8vIEJ1aWxkIFFTQSByZWdleFxuXHQvLyBSZWdleCBzdHJhdGVneSBhZG9wdGVkIGZyb20gRGllZ28gUGVyaW5pXG5cdGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXG5cdFx0dmFyIGlucHV0O1xuXG5cdFx0ZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBlbCApLmlubmVySFRNTCA9XG5cdFx0XHRcIjxhIGlkPSdcIiArIGV4cGFuZG8gKyBcIicgaHJlZj0nJyBkaXNhYmxlZD0nZGlzYWJsZWQnPjwvYT5cIiArXG5cdFx0XHRcIjxzZWxlY3QgaWQ9J1wiICsgZXhwYW5kbyArIFwiLVxcclxcXFwnIGRpc2FibGVkPSdkaXNhYmxlZCc+XCIgK1xuXHRcdFx0XCI8b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PlwiO1xuXG5cdFx0Ly8gU3VwcG9ydDogaU9TIDw9NyAtIDggb25seVxuXHRcdC8vIEJvb2xlYW4gYXR0cmlidXRlcyBhbmQgXCJ2YWx1ZVwiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHkgaW4gc29tZSBYTUwgZG9jdW1lbnRzXG5cdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJbc2VsZWN0ZWRdXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKig/OnZhbHVlfFwiICsgYm9vbGVhbnMgKyBcIilcIiApO1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IGlPUyA8PTcgLSA4IG9ubHlcblx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltpZH49XCIgKyBleHBhbmRvICsgXCItXVwiICkubGVuZ3RoICkge1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwifj1cIiApO1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IGlPUyA4IG9ubHlcblx0XHQvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2ODUxXG5cdFx0Ly8gSW4tcGFnZSBgc2VsZWN0b3IjaWQgc2libGluZy1jb21iaW5hdG9yIHNlbGVjdG9yYCBmYWlsc1xuXHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiYSNcIiArIGV4cGFuZG8gKyBcIisqXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCIuIy4rWyt+XVwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MTA1KywgRmlyZWZveCA8PTEwNCssIFNhZmFyaSA8PTE1LjQrXG5cdFx0Ly8gSW4gc29tZSBvZiB0aGUgZG9jdW1lbnQga2luZHMsIHRoZXNlIHNlbGVjdG9ycyB3b3VsZG4ndCB3b3JrIG5hdGl2ZWx5LlxuXHRcdC8vIFRoaXMgaXMgcHJvYmFibHkgT0sgYnV0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3ZSB3YW50IHRvIG1haW50YWluXG5cdFx0Ly8gaGFuZGxpbmcgdGhlbSB0aHJvdWdoIGpRdWVyeSB0cmF2ZXJzYWwgaW4galF1ZXJ5IDMueC5cblx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpjaGVja2VkXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6Y2hlY2tlZFwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogV2luZG93cyA4IE5hdGl2ZSBBcHBzXG5cdFx0Ly8gVGhlIHR5cGUgYW5kIG5hbWUgYXR0cmlidXRlcyBhcmUgcmVzdHJpY3RlZCBkdXJpbmcgLmlubmVySFRNTCBhc3NpZ25tZW50XG5cdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcImhpZGRlblwiICk7XG5cdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICkuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJEXCIgKTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMStcblx0XHQvLyBJRSdzIDpkaXNhYmxlZCBzZWxlY3RvciBkb2VzIG5vdCBwaWNrIHVwIHRoZSBjaGlsZHJlbiBvZiBkaXNhYmxlZCBmaWVsZHNldHNcblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0xMDUrLCBGaXJlZm94IDw9MTA0KywgU2FmYXJpIDw9MTUuNCtcblx0XHQvLyBJbiBzb21lIG9mIHRoZSBkb2N1bWVudCBraW5kcywgdGhlc2Ugc2VsZWN0b3JzIHdvdWxkbid0IHdvcmsgbmF0aXZlbHkuXG5cdFx0Ly8gVGhpcyBpcyBwcm9iYWJseSBPSyBidXQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdlIHdhbnQgdG8gbWFpbnRhaW5cblx0XHQvLyBoYW5kbGluZyB0aGVtIHRocm91Z2ggalF1ZXJ5IHRyYXZlcnNhbCBpbiBqUXVlcnkgMy54LlxuXHRcdGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggZWwgKS5kaXNhYmxlZCA9IHRydWU7XG5cdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpkaXNhYmxlZFwiICkubGVuZ3RoICE9PSAyICkge1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdC8vIElFIDExL0VkZ2UgZG9uJ3QgZmluZCBlbGVtZW50cyBvbiBhIGBbbmFtZT0nJ11gIHF1ZXJ5IGluIHNvbWUgY2FzZXMuXG5cdFx0Ly8gQWRkaW5nIGEgdGVtcG9yYXJ5IGF0dHJpYnV0ZSB0byB0aGUgZG9jdW1lbnQgYmVmb3JlIHRoZSBzZWxlY3Rpb24gd29ya3Ncblx0XHQvLyBhcm91bmQgdGhlIGlzc3VlLlxuXHRcdC8vIEludGVyZXN0aW5nbHksIElFIDEwICYgb2xkZXIgZG9uJ3Qgc2VlbSB0byBoYXZlIHRoZSBpc3N1ZS5cblx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRcdGlucHV0LnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwiXCIgKTtcblx0XHRlbC5hcHBlbmRDaGlsZCggaW5wdXQgKTtcblx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltuYW1lPScnXVwiICkubGVuZ3RoICkge1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIipuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqPVwiICtcblx0XHRcdFx0d2hpdGVzcGFjZSArIFwiKig/OicnfFxcXCJcXFwiKVwiICk7XG5cdFx0fVxuXHR9ICk7XG5cblx0aWYgKCAhc3VwcG9ydC5jc3NIYXMgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgMTA1IC0gMTEwKywgU2FmYXJpIDE1LjQgLSAxNi4zK1xuXHRcdC8vIE91ciByZWd1bGFyIGB0cnktY2F0Y2hgIG1lY2hhbmlzbSBmYWlscyB0byBkZXRlY3QgbmF0aXZlbHktdW5zdXBwb3J0ZWRcblx0XHQvLyBwc2V1ZG8tY2xhc3NlcyBpbnNpZGUgYDpoYXMoKWAgKHN1Y2ggYXMgYDpoYXMoOmNvbnRhaW5zKFwiRm9vXCIpKWApXG5cdFx0Ly8gaW4gYnJvd3NlcnMgdGhhdCBwYXJzZSB0aGUgYDpoYXMoKWAgYXJndW1lbnQgYXMgYSBmb3JnaXZpbmcgc2VsZWN0b3IgbGlzdC5cblx0XHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvc2VsZWN0b3JzLyNyZWxhdGlvbmFsIG5vdyByZXF1aXJlcyB0aGUgYXJndW1lbnRcblx0XHQvLyB0byBiZSBwYXJzZWQgdW5mb3JnaXZpbmdseSwgYnV0IGJyb3dzZXJzIGhhdmUgbm90IHlldCBmdWxseSBhZGp1c3RlZC5cblx0XHRyYnVnZ3lRU0EucHVzaCggXCI6aGFzXCIgKTtcblx0fVxuXG5cdHJidWdneVFTQSA9IHJidWdneVFTQS5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpvaW4oIFwifFwiICkgKTtcblxuXHQvKiBTb3J0aW5nXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBEb2N1bWVudCBvcmRlciBzb3J0aW5nXG5cdHNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkge1xuXG5cdFx0Ly8gRmxhZyBmb3IgZHVwbGljYXRlIHJlbW92YWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Ly8gU29ydCBvbiBtZXRob2QgZXhpc3RlbmNlIGlmIG9ubHkgb25lIGlucHV0IGhhcyBjb21wYXJlRG9jdW1lbnRQb3NpdGlvblxuXHRcdHZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtcblx0XHRpZiAoIGNvbXBhcmUgKSB7XG5cdFx0XHRyZXR1cm4gY29tcGFyZTtcblx0XHR9XG5cblx0XHQvLyBDYWxjdWxhdGUgcG9zaXRpb24gaWYgYm90aCBpbnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50XG5cdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRjb21wYXJlID0gKCBhLm93bmVyRG9jdW1lbnQgfHwgYSApID09ICggYi5vd25lckRvY3VtZW50IHx8IGIgKSA/XG5cdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugd2Uga25vdyB0aGV5IGFyZSBkaXNjb25uZWN0ZWRcblx0XHRcdDE7XG5cblx0XHQvLyBEaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRpZiAoIGNvbXBhcmUgJiAxIHx8XG5cdFx0XHQoICFzdXBwb3J0LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBhICkgPT09IGNvbXBhcmUgKSApIHtcblxuXHRcdFx0Ly8gQ2hvb3NlIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgcmVsYXRlZCB0byBvdXIgcHJlZmVycmVkIGRvY3VtZW50XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0aWYgKCBhID09PSBkb2N1bWVudCB8fCBhLm93bmVyRG9jdW1lbnQgPT0gcHJlZmVycmVkRG9jICYmXG5cdFx0XHRcdGZpbmQuY29udGFpbnMoIHByZWZlcnJlZERvYywgYSApICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRpZiAoIGIgPT09IGRvY3VtZW50IHx8IGIub3duZXJEb2N1bWVudCA9PSBwcmVmZXJyZWREb2MgJiZcblx0XHRcdFx0ZmluZC5jb250YWlucyggcHJlZmVycmVkRG9jLCBiICkgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWludGFpbiBvcmlnaW5hbCBvcmRlclxuXHRcdFx0cmV0dXJuIHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZi5jYWxsKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YuY2FsbCggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbXBhcmUgJiA0ID8gLTEgOiAxO1xuXHR9O1xuXG5cdHJldHVybiBkb2N1bWVudDtcbn1cblxuZmluZC5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1lbnRzICkge1xuXHRyZXR1cm4gZmluZCggZXhwciwgbnVsbCwgbnVsbCwgZWxlbWVudHMgKTtcbn07XG5cbmZpbmQubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIgKSB7XG5cdHNldERvY3VtZW50KCBlbGVtICk7XG5cblx0aWYgKCBkb2N1bWVudElzSFRNTCAmJlxuXHRcdCFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBleHByICsgXCIgXCIgXSAmJlxuXHRcdCggIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIGV4cHIgKSApICkge1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhciByZXQgPSBtYXRjaGVzLmNhbGwoIGVsZW0sIGV4cHIgKTtcblxuXHRcdFx0Ly8gSUUgOSdzIG1hdGNoZXNTZWxlY3RvciByZXR1cm5zIGZhbHNlIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuXHRcdFx0aWYgKCByZXQgfHwgc3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCB8fFxuXG5cdFx0XHRcdFx0Ly8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnRcblx0XHRcdFx0XHQvLyBmcmFnbWVudCBpbiBJRSA5XG5cdFx0XHRcdFx0ZWxlbS5kb2N1bWVudCAmJiBlbGVtLmRvY3VtZW50Lm5vZGVUeXBlICE9PSAxMSApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblx0XHR9IGNhdGNoICggZSApIHtcblx0XHRcdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUoIGV4cHIsIHRydWUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZmluZCggZXhwciwgZG9jdW1lbnQsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDtcbn07XG5cbmZpbmQuY29udGFpbnMgPSBmdW5jdGlvbiggY29udGV4dCwgZWxlbSApIHtcblxuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCAoIGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0ICkgIT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0fVxuXHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICk7XG59O1xuXG5cbmZpbmQuYXR0ciA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHR9XG5cblx0dmFyIGZuID0gRXhwci5hdHRySGFuZGxlWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSxcblxuXHRcdC8vIERvbid0IGdldCBmb29sZWQgYnkgT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgdHJhYy0xMzgwNylcblx0XHR2YWwgPSBmbiAmJiBoYXNPd24uY2FsbCggRXhwci5hdHRySGFuZGxlLCBuYW1lLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRmbiggZWxlbSwgbmFtZSwgIWRvY3VtZW50SXNIVE1MICkgOlxuXHRcdFx0dW5kZWZpbmVkO1xuXG5cdGlmICggdmFsICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0cmV0dXJuIHZhbDtcblx0fVxuXG5cdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApO1xufTtcblxuZmluZC5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdHRocm93IG5ldyBFcnJvciggXCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiBcIiArIG1zZyApO1xufTtcblxuLyoqXG4gKiBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBkdXBsaWNhdGVzXG4gKiBAcGFyYW0ge0FycmF5TGlrZX0gcmVzdWx0c1xuICovXG5qUXVlcnkudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkge1xuXHR2YXIgZWxlbSxcblx0XHRkdXBsaWNhdGVzID0gW10sXG5cdFx0aiA9IDAsXG5cdFx0aSA9IDA7XG5cblx0Ly8gVW5sZXNzIHdlICprbm93KiB3ZSBjYW4gZGV0ZWN0IGR1cGxpY2F0ZXMsIGFzc3VtZSB0aGVpciBwcmVzZW5jZVxuXHQvL1xuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wK1xuXHQvLyBUZXN0aW5nIGZvciBkZXRlY3RpbmcgZHVwbGljYXRlcyBpcyB1bnByZWRpY3RhYmxlIHNvIGluc3RlYWQgYXNzdW1lIHdlIGNhbid0XG5cdC8vIGRlcGVuZCBvbiBkdXBsaWNhdGUgZGV0ZWN0aW9uIGluIGFsbCBicm93c2VycyB3aXRob3V0IGEgc3RhYmxlIHNvcnQuXG5cdGhhc0R1cGxpY2F0ZSA9ICFzdXBwb3J0LnNvcnRTdGFibGU7XG5cdHNvcnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgc2xpY2UuY2FsbCggcmVzdWx0cywgMCApO1xuXHRzb3J0LmNhbGwoIHJlc3VsdHMsIHNvcnRPcmRlciApO1xuXG5cdGlmICggaGFzRHVwbGljYXRlICkge1xuXHRcdHdoaWxlICggKCBlbGVtID0gcmVzdWx0c1sgaSsrIF0gKSApIHtcblx0XHRcdGlmICggZWxlbSA9PT0gcmVzdWx0c1sgaSBdICkge1xuXHRcdFx0XHRqID0gZHVwbGljYXRlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0c3BsaWNlLmNhbGwoIHJlc3VsdHMsIGR1cGxpY2F0ZXNbIGogXSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENsZWFyIGlucHV0IGFmdGVyIHNvcnRpbmcgdG8gcmVsZWFzZSBvYmplY3RzXG5cdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9wdWxsLzIyNVxuXHRzb3J0SW5wdXQgPSBudWxsO1xuXG5cdHJldHVybiByZXN1bHRzO1xufTtcblxualF1ZXJ5LmZuLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkudW5pcXVlU29ydCggc2xpY2UuYXBwbHkoIHRoaXMgKSApICk7XG59O1xuXG5FeHByID0galF1ZXJ5LmV4cHIgPSB7XG5cblx0Ly8gQ2FuIGJlIGFkanVzdGVkIGJ5IHRoZSB1c2VyXG5cdGNhY2hlTGVuZ3RoOiA1MCxcblxuXHRjcmVhdGVQc2V1ZG86IG1hcmtGdW5jdGlvbixcblxuXHRtYXRjaDogbWF0Y2hFeHByLFxuXG5cdGF0dHJIYW5kbGU6IHt9LFxuXG5cdGZpbmQ6IHt9LFxuXG5cdHJlbGF0aXZlOiB7XG5cdFx0XCI+XCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIiBcIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiIH0sXG5cdFx0XCIrXCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiflwiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiB9XG5cdH0sXG5cblx0cHJlRmlsdGVyOiB7XG5cdFx0QVRUUjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0bWF0Y2hbIDEgXSA9IG1hdGNoWyAxIF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblxuXHRcdFx0Ly8gTW92ZSB0aGUgZ2l2ZW4gdmFsdWUgdG8gbWF0Y2hbM10gd2hldGhlciBxdW90ZWQgb3IgdW5xdW90ZWRcblx0XHRcdG1hdGNoWyAzIF0gPSAoIG1hdGNoWyAzIF0gfHwgbWF0Y2hbIDQgXSB8fCBtYXRjaFsgNSBdIHx8IFwiXCIgKVxuXHRcdFx0XHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsgMiBdID09PSBcIn49XCIgKSB7XG5cdFx0XHRcdG1hdGNoWyAzIF0gPSBcIiBcIiArIG1hdGNoWyAzIF0gKyBcIiBcIjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCA0ICk7XG5cdFx0fSxcblxuXHRcdENISUxEOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cblx0XHRcdC8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbXCJDSElMRFwiXVxuXHRcdFx0XHQxIHR5cGUgKG9ubHl8bnRofC4uLilcblx0XHRcdFx0MiB3aGF0IChjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHQzIGFyZ3VtZW50IChldmVufG9kZHxcXGQqfFxcZCpuKFsrLV1cXGQrKT98Li4uKVxuXHRcdFx0XHQ0IHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xcZCpufClcblx0XHRcdFx0NSBzaWduIG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ2IHggb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDcgc2lnbiBvZiB5LWNvbXBvbmVudFxuXHRcdFx0XHQ4IHkgb2YgeS1jb21wb25lbnRcblx0XHRcdCovXG5cdFx0XHRtYXRjaFsgMSBdID0gbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHRpZiAoIG1hdGNoWyAxIF0uc2xpY2UoIDAsIDMgKSA9PT0gXCJudGhcIiApIHtcblxuXHRcdFx0XHQvLyBudGgtKiByZXF1aXJlcyBhcmd1bWVudFxuXHRcdFx0XHRpZiAoICFtYXRjaFsgMyBdICkge1xuXHRcdFx0XHRcdGZpbmQuZXJyb3IoIG1hdGNoWyAwIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElMRFxuXHRcdFx0XHQvLyByZW1lbWJlciB0aGF0IGZhbHNlL3RydWUgY2FzdCByZXNwZWN0aXZlbHkgdG8gMC8xXG5cdFx0XHRcdG1hdGNoWyA0IF0gPSArKCBtYXRjaFsgNCBdID9cblx0XHRcdFx0XHRtYXRjaFsgNSBdICsgKCBtYXRjaFsgNiBdIHx8IDEgKSA6XG5cdFx0XHRcdFx0MiAqICggbWF0Y2hbIDMgXSA9PT0gXCJldmVuXCIgfHwgbWF0Y2hbIDMgXSA9PT0gXCJvZGRcIiApXG5cdFx0XHRcdCk7XG5cdFx0XHRcdG1hdGNoWyA1IF0gPSArKCAoIG1hdGNoWyA3IF0gKyBtYXRjaFsgOCBdICkgfHwgbWF0Y2hbIDMgXSA9PT0gXCJvZGRcIiApO1xuXG5cdFx0XHQvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWyAzIF0gKSB7XG5cdFx0XHRcdGZpbmQuZXJyb3IoIG1hdGNoWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdH0sXG5cblx0XHRQU0VVRE86IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdHZhciBleGNlc3MsXG5cdFx0XHRcdHVucXVvdGVkID0gIW1hdGNoWyA2IF0gJiYgbWF0Y2hbIDIgXTtcblxuXHRcdFx0aWYgKCBtYXRjaEV4cHIuQ0hJTEQudGVzdCggbWF0Y2hbIDAgXSApICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWNjZXB0IHF1b3RlZCBhcmd1bWVudHMgYXMtaXNcblx0XHRcdGlmICggbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0bWF0Y2hbIDIgXSA9IG1hdGNoWyA0IF0gfHwgbWF0Y2hbIDUgXSB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTdHJpcCBleGNlc3MgY2hhcmFjdGVycyBmcm9tIHVucXVvdGVkIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggdW5xdW90ZWQgJiYgcnBzZXVkby50ZXN0KCB1bnF1b3RlZCApICYmXG5cblx0XHRcdFx0Ly8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSlcblx0XHRcdFx0KCBleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSApICYmXG5cblx0XHRcdFx0Ly8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzXG5cdFx0XHRcdCggZXhjZXNzID0gdW5xdW90ZWQuaW5kZXhPZiggXCIpXCIsIHVucXVvdGVkLmxlbmd0aCAtIGV4Y2VzcyApIC0gdW5xdW90ZWQubGVuZ3RoICkgKSB7XG5cblx0XHRcdFx0Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXhcblx0XHRcdFx0bWF0Y2hbIDAgXSA9IG1hdGNoWyAwIF0uc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0XHRtYXRjaFsgMiBdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudClcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXI6IHtcblxuXHRcdFRBRzogZnVuY3Rpb24oIG5vZGVOYW1lU2VsZWN0b3IgKSB7XG5cdFx0XHR2YXIgZXhwZWN0ZWROb2RlTmFtZSA9IG5vZGVOYW1lU2VsZWN0b3IucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5vZGVOYW1lU2VsZWN0b3IgPT09IFwiKlwiID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0gOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gbm9kZU5hbWUoIGVsZW0sIGV4cGVjdGVkTm9kZU5hbWUgKTtcblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0Q0xBU1M6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7XG5cdFx0XHR2YXIgcGF0dGVybiA9IGNsYXNzQ2FjaGVbIGNsYXNzTmFtZSArIFwiIFwiIF07XG5cblx0XHRcdHJldHVybiBwYXR0ZXJuIHx8XG5cdFx0XHRcdCggcGF0dGVybiA9IG5ldyBSZWdFeHAoIFwiKF58XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgKyBjbGFzc05hbWUgK1xuXHRcdFx0XHRcdFwiKFwiICsgd2hpdGVzcGFjZSArIFwifCQpXCIgKSApICYmXG5cdFx0XHRcdGNsYXNzQ2FjaGUoIGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhdHRlcm4udGVzdChcblx0XHRcdFx0XHRcdHR5cGVvZiBlbGVtLmNsYXNzTmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBlbGVtLmNsYXNzTmFtZSB8fFxuXHRcdFx0XHRcdFx0XHR0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHxcblx0XHRcdFx0XHRcdFx0XCJcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gKTtcblx0XHR9LFxuXG5cdFx0QVRUUjogZnVuY3Rpb24oIG5hbWUsIG9wZXJhdG9yLCBjaGVjayApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHJlc3VsdCA9IGZpbmQuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0XHRcdGlmICggcmVzdWx0ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIiE9XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAhb3BlcmF0b3IgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQgKz0gXCJcIjtcblxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcIj1cIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0ID09PSBjaGVjaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcIiE9XCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdCAhPT0gY2hlY2s7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBvcGVyYXRvciA9PT0gXCJePVwiICkge1xuXHRcdFx0XHRcdHJldHVybiBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA9PT0gMDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcIio9XCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBvcGVyYXRvciA9PT0gXCIkPVwiICkge1xuXHRcdFx0XHRcdHJldHVybiBjaGVjayAmJiByZXN1bHQuc2xpY2UoIC1jaGVjay5sZW5ndGggKSA9PT0gY2hlY2s7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBvcGVyYXRvciA9PT0gXCJ+PVwiICkge1xuXHRcdFx0XHRcdHJldHVybiAoIFwiIFwiICsgcmVzdWx0LnJlcGxhY2UoIHJ3aGl0ZXNwYWNlLCBcIiBcIiApICsgXCIgXCIgKVxuXHRcdFx0XHRcdFx0LmluZGV4T2YoIGNoZWNrICkgPiAtMTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcInw9XCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdCA9PT0gY2hlY2sgfHwgcmVzdWx0LnNsaWNlKCAwLCBjaGVjay5sZW5ndGggKyAxICkgPT09IGNoZWNrICsgXCItXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRDSElMRDogZnVuY3Rpb24oIHR5cGUsIHdoYXQsIF9hcmd1bWVudCwgZmlyc3QsIGxhc3QgKSB7XG5cdFx0XHR2YXIgc2ltcGxlID0gdHlwZS5zbGljZSggMCwgMyApICE9PSBcIm50aFwiLFxuXHRcdFx0XHRmb3J3YXJkID0gdHlwZS5zbGljZSggLTQgKSAhPT0gXCJsYXN0XCIsXG5cdFx0XHRcdG9mVHlwZSA9IHdoYXQgPT09IFwib2YtdHlwZVwiO1xuXG5cdFx0XHRyZXR1cm4gZmlyc3QgPT09IDEgJiYgbGFzdCA9PT0gMCA/XG5cblx0XHRcdFx0Ly8gU2hvcnRjdXQgZm9yIDpudGgtKihuKVxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gISFlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRcdH0gOlxuXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdHZhciBjYWNoZSwgb3V0ZXJDYWNoZSwgbm9kZSwgbm9kZUluZGV4LCBzdGFydCxcblx0XHRcdFx0XHRcdGRpciA9IHNpbXBsZSAhPT0gZm9yd2FyZCA/IFwibmV4dFNpYmxpbmdcIiA6IFwicHJldmlvdXNTaWJsaW5nXCIsXG5cdFx0XHRcdFx0XHRwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGUsXG5cdFx0XHRcdFx0XHRuYW1lID0gb2ZUeXBlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxcblx0XHRcdFx0XHRcdHVzZUNhY2hlID0gIXhtbCAmJiAhb2ZUeXBlLFxuXHRcdFx0XHRcdFx0ZGlmZiA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIDooZmlyc3R8bGFzdHxvbmx5KS0oY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0XHRcdGlmICggc2ltcGxlICkge1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIGRpciApIHtcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbm9kZSA9IG5vZGVbIGRpciBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGVOYW1lKCBub2RlLCBuYW1lICkgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBSZXZlcnNlIGRpcmVjdGlvbiBmb3IgOm9ubHktKiAoaWYgd2UgaGF2ZW4ndCB5ZXQgZG9uZSBzbylcblx0XHRcdFx0XHRcdFx0XHRzdGFydCA9IGRpciA9IHR5cGUgPT09IFwib25seVwiICYmICFzdGFydCAmJiBcIm5leHRTaWJsaW5nXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHN0YXJ0ID0gWyBmb3J3YXJkID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07XG5cblx0XHRcdFx0XHRcdC8vIG5vbi14bWwgOm50aC1jaGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRgXG5cdFx0XHRcdFx0XHRpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU2VlayBgZWxlbWAgZnJvbSBhIHByZXZpb3VzbHktY2FjaGVkIGluZGV4XG5cdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBwYXJlbnRbIGV4cGFuZG8gXSB8fCAoIHBhcmVudFsgZXhwYW5kbyBdID0ge30gKTtcblx0XHRcdFx0XHRcdFx0Y2FjaGUgPSBvdXRlckNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleCAmJiBjYWNoZVsgMiBdO1xuXHRcdFx0XHRcdFx0XHRub2RlID0gbm9kZUluZGV4ICYmIHBhcmVudC5jaGlsZE5vZGVzWyBub2RlSW5kZXggXTtcblxuXHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEZhbGxiYWNrIHRvIHNlZWtpbmcgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0KCBkaWZmID0gbm9kZUluZGV4ID0gMCApIHx8IHN0YXJ0LnBvcCgpICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBXaGVuIGZvdW5kLCBjYWNoZSBpbmRleGVzIG9uIGBwYXJlbnRgIGFuZCBicmVha1xuXHRcdFx0XHRcdFx0XHRcdGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSAmJiArK2RpZmYgJiYgbm9kZSA9PT0gZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgbm9kZUluZGV4LCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBVc2UgcHJldmlvdXNseS1jYWNoZWQgZWxlbWVudCBpbmRleCBpZiBhdmFpbGFibGVcblx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gZWxlbVsgZXhwYW5kbyBdIHx8ICggZWxlbVsgZXhwYW5kbyBdID0ge30gKTtcblx0XHRcdFx0XHRcdFx0XHRjYWNoZSA9IG91dGVyQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIHhtbCA6bnRoLWNoaWxkKC4uLilcblx0XHRcdFx0XHRcdFx0Ly8gb3IgOm50aC1sYXN0LWNoaWxkKC4uLikgb3IgOm50aCgtbGFzdCk/LW9mLXR5cGUoLi4uKVxuXHRcdFx0XHRcdFx0XHRpZiAoIGRpZmYgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVXNlIHRoZSBzYW1lIGxvb3AgYXMgYWJvdmUgdG8gc2VlayBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdCggZGlmZiA9IG5vZGVJbmRleCA9IDAgKSB8fCBzdGFydC5wb3AoKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZU5hbWUoIG5vZGUsIG5hbWUgKSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQrK2RpZmYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2FjaGUgdGhlIGluZGV4IG9mIGVhY2ggZW5jb3VudGVyZWQgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCggbm9kZVsgZXhwYW5kbyBdID0ge30gKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggbm9kZSA9PT0gZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBJbmNvcnBvcmF0ZSB0aGUgb2Zmc2V0LCB0aGVuIGNoZWNrIGFnYWluc3QgY3ljbGUgc2l6ZVxuXHRcdFx0XHRcdFx0ZGlmZiAtPSBsYXN0O1xuXHRcdFx0XHRcdFx0cmV0dXJuIGRpZmYgPT09IGZpcnN0IHx8ICggZGlmZiAlIGZpcnN0ID09PSAwICYmIGRpZmYgLyBmaXJzdCA+PSAwICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRQU0VVRE86IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkge1xuXG5cdFx0XHQvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFzc2VzXG5cdFx0XHQvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20gcHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVyc1xuXHRcdFx0Ly8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvc1xuXHRcdFx0dmFyIGFyZ3MsXG5cdFx0XHRcdGZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0XHRmaW5kLmVycm9yKCBcInVuc3VwcG9ydGVkIHBzZXVkbzogXCIgKyBwc2V1ZG8gKTtcblxuXHRcdFx0Ly8gVGhlIHVzZXIgbWF5IHVzZSBjcmVhdGVQc2V1ZG8gdG8gaW5kaWNhdGUgdGhhdFxuXHRcdFx0Ly8gYXJndW1lbnRzIGFyZSBuZWVkZWQgdG8gY3JlYXRlIHRoZSBmaWx0ZXIgZnVuY3Rpb25cblx0XHRcdC8vIGp1c3QgYXMgalF1ZXJ5IGRvZXNcblx0XHRcdGlmICggZm5bIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0cmV0dXJuIGZuKCBhcmd1bWVudCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBCdXQgbWFpbnRhaW4gc3VwcG9ydCBmb3Igb2xkIHNpZ25hdHVyZXNcblx0XHRcdGlmICggZm4ubGVuZ3RoID4gMSApIHtcblx0XHRcdFx0YXJncyA9IFsgcHNldWRvLCBwc2V1ZG8sIFwiXCIsIGFyZ3VtZW50IF07XG5cdFx0XHRcdHJldHVybiBFeHByLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoIHBzZXVkby50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0XHRcdG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHRcdFx0XHR2YXIgaWR4LFxuXHRcdFx0XHRcdFx0XHRtYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksXG5cdFx0XHRcdFx0XHRcdGkgPSBtYXRjaGVkLmxlbmd0aDtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZHggPSBpbmRleE9mLmNhbGwoIHNlZWQsIG1hdGNoZWRbIGkgXSApO1xuXHRcdFx0XHRcdFx0XHRzZWVkWyBpZHggXSA9ICEoIG1hdGNoZXNbIGlkeCBdID0gbWF0Y2hlZFsgaSBdICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmbiggZWxlbSwgMCwgYXJncyApO1xuXHRcdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmbjtcblx0XHR9XG5cdH0sXG5cblx0cHNldWRvczoge1xuXG5cdFx0Ly8gUG90ZW50aWFsbHkgY29tcGxleCBwc2V1ZG9zXG5cdFx0bm90OiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblxuXHRcdFx0Ly8gVHJpbSB0aGUgc2VsZWN0b3IgcGFzc2VkIHRvIGNvbXBpbGVcblx0XHRcdC8vIHRvIGF2b2lkIHRyZWF0aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG5cdFx0XHQvLyBzcGFjZXMgYXMgY29tYmluYXRvcnNcblx0XHRcdHZhciBpbnB1dCA9IFtdLFxuXHRcdFx0XHRyZXN1bHRzID0gW10sXG5cdFx0XHRcdG1hdGNoZXIgPSBjb21waWxlKCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbUNTUywgXCIkMVwiICkgKTtcblxuXHRcdFx0cmV0dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/XG5cdFx0XHRcdG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksXG5cdFx0XHRcdFx0XHRpID0gc2VlZC5sZW5ndGg7XG5cblx0XHRcdFx0XHQvLyBNYXRjaCBlbGVtZW50cyB1bm1hdGNoZWQgYnkgYG1hdGNoZXJgXG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IHVubWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGkgXSA9ICEoIG1hdGNoZXNbIGkgXSA9IGVsZW0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdGlucHV0WyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTtcblxuXHRcdFx0XHRcdC8vIERvbid0IGtlZXAgdGhlIGVsZW1lbnRcblx0XHRcdFx0XHQvLyAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL2lzc3Vlcy8yOTkpXG5cdFx0XHRcdFx0aW5wdXRbIDAgXSA9IG51bGw7XG5cdFx0XHRcdFx0cmV0dXJuICFyZXN1bHRzLnBvcCgpO1xuXHRcdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdGhhczogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBmaW5kKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdGNvbnRhaW5zOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0dGV4dCA9IHRleHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBqUXVlcnkudGV4dCggZWxlbSApICkuaW5kZXhPZiggdGV4dCApID4gLTE7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdC8vIFwiV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgOmxhbmcoKSBzZWxlY3RvclxuXHRcdC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlXG5cdFx0Ly8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQyxcblx0XHQvLyBvciBiZWdpbm5pbmcgd2l0aCB0aGUgaWRlbnRpZmllciBDIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IFwiLVwiLlxuXHRcdC8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuXHRcdC8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuXCJcblx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNsYW5nLXBzZXVkb1xuXHRcdGxhbmc6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGxhbmcgKSB7XG5cblx0XHRcdC8vIGxhbmcgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGlkZW50aWZpZXJcblx0XHRcdGlmICggIXJpZGVudGlmaWVyLnRlc3QoIGxhbmcgfHwgXCJcIiApICkge1xuXHRcdFx0XHRmaW5kLmVycm9yKCBcInVuc3VwcG9ydGVkIGxhbmc6IFwiICsgbGFuZyApO1xuXHRcdFx0fVxuXHRcdFx0bGFuZyA9IGxhbmcucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgZWxlbUxhbmc7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoICggZWxlbUxhbmcgPSBkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRcdFx0XHRlbGVtLmxhbmcgOlxuXHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIFwieG1sOmxhbmdcIiApIHx8IGVsZW0uZ2V0QXR0cmlidXRlKCBcImxhbmdcIiApICkgKSB7XG5cblx0XHRcdFx0XHRcdGVsZW1MYW5nID0gZWxlbUxhbmcudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtTGFuZyA9PT0gbGFuZyB8fCBlbGVtTGFuZy5pbmRleE9mKCBsYW5nICsgXCItXCIgKSA9PT0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gd2hpbGUgKCAoIGVsZW0gPSBlbGVtLnBhcmVudE5vZGUgKSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0Ly8gTWlzY2VsbGFuZW91c1xuXHRcdHRhcmdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0XHRcdHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDtcblx0XHR9LFxuXG5cdFx0cm9vdDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnRFbGVtZW50O1xuXHRcdH0sXG5cblx0XHRmb2N1czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSAmJlxuXHRcdFx0XHRkb2N1bWVudC5oYXNGb2N1cygpICYmXG5cdFx0XHRcdCEhKCBlbGVtLnR5cGUgfHwgZWxlbS5ocmVmIHx8IH5lbGVtLnRhYkluZGV4ICk7XG5cdFx0fSxcblxuXHRcdC8vIEJvb2xlYW4gcHJvcGVydGllc1xuXHRcdGVuYWJsZWQ6IGNyZWF0ZURpc2FibGVkUHNldWRvKCBmYWxzZSApLFxuXHRcdGRpc2FibGVkOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggdHJ1ZSApLFxuXG5cdFx0Y2hlY2tlZDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIEluIENTUzMsIDpjaGVja2VkIHNob3VsZCByZXR1cm4gYm90aCBjaGVja2VkIGFuZCBzZWxlY3RlZCBlbGVtZW50c1xuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHRyZXR1cm4gKCBub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgJiYgISFlbGVtLmNoZWNrZWQgKSB8fFxuXHRcdFx0XHQoIG5vZGVOYW1lKCBlbGVtLCBcIm9wdGlvblwiICkgJiYgISFlbGVtLnNlbGVjdGVkICk7XG5cdFx0fSxcblxuXHRcdHNlbGVjdGVkOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMStcblx0XHRcdC8vIEFjY2Vzc2luZyB0aGUgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eVxuXHRcdFx0Ly8gZm9yY2VzIHRoZSBicm93c2VyIHRvIHRyZWF0IHRoZSBkZWZhdWx0IG9wdGlvbiBhc1xuXHRcdFx0Ly8gc2VsZWN0ZWQgd2hlbiBpbiBhbiBvcHRncm91cC5cblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdFx0XHRcdGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gQ29udGVudHNcblx0XHRlbXB0eTogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2VtcHR5LXBzZXVkb1xuXHRcdFx0Ly8gOmVtcHR5IGlzIG5lZ2F0ZWQgYnkgZWxlbWVudCAoMSkgb3IgY29udGVudCBub2RlcyAodGV4dDogMzsgY2RhdGE6IDQ7IGVudGl0eSByZWY6IDUpLFxuXHRcdFx0Ly8gICBidXQgbm90IGJ5IG90aGVycyAoY29tbWVudDogODsgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbjogNzsgZXRjLilcblx0XHRcdC8vIG5vZGVUeXBlIDwgNiB3b3JrcyBiZWNhdXNlIGF0dHJpYnV0ZXMgKDIpIGRvIG5vdCBhcHBlYXIgYXMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPCA2ICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdHBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gIUV4cHIucHNldWRvcy5lbXB0eSggZWxlbSApO1xuXHRcdH0sXG5cblx0XHQvLyBFbGVtZW50L2lucHV0IHR5cGVzXG5cdFx0aGVhZGVyOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0aW5wdXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJpbnB1dHMudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRidXR0b246IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSAmJiBlbGVtLnR5cGUgPT09IFwiYnV0dG9uXCIgfHxcblx0XHRcdFx0bm9kZU5hbWUoIGVsZW0sIFwiYnV0dG9uXCIgKTtcblx0XHR9LFxuXG5cdFx0dGV4dDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgYXR0cjtcblx0XHRcdHJldHVybiBub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgJiYgZWxlbS50eXBlID09PSBcInRleHRcIiAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDwxMCBvbmx5XG5cdFx0XHRcdC8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCBcInNlYXJjaFwiKSBhcHBlYXJcblx0XHRcdFx0Ly8gd2l0aCBlbGVtLnR5cGUgPT09IFwidGV4dFwiXG5cdFx0XHRcdCggKCBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICkgKSA9PSBudWxsIHx8XG5cdFx0XHRcdFx0YXR0ci50b0xvd2VyQ2FzZSgpID09PSBcInRleHRcIiApO1xuXHRcdH0sXG5cblx0XHQvLyBQb3NpdGlvbi1pbi1jb2xsZWN0aW9uXG5cdFx0Zmlyc3Q6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIFsgMCBdO1xuXHRcdH0gKSxcblxuXHRcdGxhc3Q6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBfbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gWyBsZW5ndGggLSAxIF07XG5cdFx0fSApLFxuXG5cdFx0ZXE6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBfbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0cmV0dXJuIFsgYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBdO1xuXHRcdH0gKSxcblxuXHRcdGV2ZW46IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRvZGQ6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMTtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRsdDogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpO1xuXG5cdFx0XHRpZiAoIGFyZ3VtZW50IDwgMCApIHtcblx0XHRcdFx0aSA9IGFyZ3VtZW50ICsgbGVuZ3RoO1xuXHRcdFx0fSBlbHNlIGlmICggYXJndW1lbnQgPiBsZW5ndGggKSB7XG5cdFx0XHRcdGkgPSBsZW5ndGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpID0gYXJndW1lbnQ7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoIDsgLS1pID49IDA7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRndDogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgKytpIDwgbGVuZ3RoOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApXG5cdH1cbn07XG5cbkV4cHIucHNldWRvcy5udGggPSBFeHByLnBzZXVkb3MuZXE7XG5cbi8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zXG5mb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVkbyggaSApO1xufVxuZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwgcmVzZXQ6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTtcbn1cblxuLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzXG5mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge31cbnNldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9zO1xuRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTtcblxuZnVuY3Rpb24gdG9rZW5pemUoIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7XG5cdHZhciBtYXRjaGVkLCBtYXRjaCwgdG9rZW5zLCB0eXBlLFxuXHRcdHNvRmFyLCBncm91cHMsIHByZUZpbHRlcnMsXG5cdFx0Y2FjaGVkID0gdG9rZW5DYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggY2FjaGVkICkge1xuXHRcdHJldHVybiBwYXJzZU9ubHkgPyAwIDogY2FjaGVkLnNsaWNlKCAwICk7XG5cdH1cblxuXHRzb0ZhciA9IHNlbGVjdG9yO1xuXHRncm91cHMgPSBbXTtcblx0cHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyO1xuXG5cdHdoaWxlICggc29GYXIgKSB7XG5cblx0XHQvLyBDb21tYSBhbmQgZmlyc3QgcnVuXG5cdFx0aWYgKCAhbWF0Y2hlZCB8fCAoIG1hdGNoID0gcmNvbW1hLmV4ZWMoIHNvRmFyICkgKSApIHtcblx0XHRcdGlmICggbWF0Y2ggKSB7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgY29uc3VtZSB0cmFpbGluZyBjb21tYXMgYXMgdmFsaWRcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hbIDAgXS5sZW5ndGggKSB8fCBzb0Zhcjtcblx0XHRcdH1cblx0XHRcdGdyb3Vwcy5wdXNoKCAoIHRva2VucyA9IFtdICkgKTtcblx0XHR9XG5cblx0XHRtYXRjaGVkID0gZmFsc2U7XG5cblx0XHQvLyBDb21iaW5hdG9yc1xuXHRcdGlmICggKCBtYXRjaCA9IHJsZWFkaW5nQ29tYmluYXRvci5leGVjKCBzb0ZhciApICkgKSB7XG5cdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdHRva2Vucy5wdXNoKCB7XG5cdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXG5cdFx0XHRcdC8vIENhc3QgZGVzY2VuZGFudCBjb21iaW5hdG9ycyB0byBzcGFjZVxuXHRcdFx0XHR0eXBlOiBtYXRjaFsgMCBdLnJlcGxhY2UoIHJ0cmltQ1NTLCBcIiBcIiApXG5cdFx0XHR9ICk7XG5cdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZpbHRlcnNcblx0XHRmb3IgKCB0eXBlIGluIEV4cHIuZmlsdGVyICkge1xuXHRcdFx0aWYgKCAoIG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSApICYmICggIXByZUZpbHRlcnNbIHR5cGUgXSB8fFxuXHRcdFx0XHQoIG1hdGNoID0gcHJlRmlsdGVyc1sgdHlwZSBdKCBtYXRjaCApICkgKSApIHtcblx0XHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHRcdHRva2Vucy5wdXNoKCB7XG5cdFx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cdFx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0XHRtYXRjaGVzOiBtYXRjaFxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCAhbWF0Y2hlZCApIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnZhbGlkIGV4Y2Vzc1xuXHQvLyBpZiB3ZSdyZSBqdXN0IHBhcnNpbmdcblx0Ly8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvciBvciByZXR1cm4gdG9rZW5zXG5cdGlmICggcGFyc2VPbmx5ICkge1xuXHRcdHJldHVybiBzb0Zhci5sZW5ndGg7XG5cdH1cblxuXHRyZXR1cm4gc29GYXIgP1xuXHRcdGZpbmQuZXJyb3IoIHNlbGVjdG9yICkgOlxuXG5cdFx0Ly8gQ2FjaGUgdGhlIHRva2Vuc1xuXHRcdHRva2VuQ2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApO1xufVxuXG5mdW5jdGlvbiB0b1NlbGVjdG9yKCB0b2tlbnMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdHNlbGVjdG9yID0gXCJcIjtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0c2VsZWN0b3IgKz0gdG9rZW5zWyBpIF0udmFsdWU7XG5cdH1cblx0cmV0dXJuIHNlbGVjdG9yO1xufVxuXG5mdW5jdGlvbiBhZGRDb21iaW5hdG9yKCBtYXRjaGVyLCBjb21iaW5hdG9yLCBiYXNlICkge1xuXHR2YXIgZGlyID0gY29tYmluYXRvci5kaXIsXG5cdFx0c2tpcCA9IGNvbWJpbmF0b3IubmV4dCxcblx0XHRrZXkgPSBza2lwIHx8IGRpcixcblx0XHRjaGVja05vbkVsZW1lbnRzID0gYmFzZSAmJiBrZXkgPT09IFwicGFyZW50Tm9kZVwiLFxuXHRcdGRvbmVOYW1lID0gZG9uZSsrO1xuXG5cdHJldHVybiBjb21iaW5hdG9yLmZpcnN0ID9cblxuXHRcdC8vIENoZWNrIGFnYWluc3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdHJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gOlxuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBvbGRDYWNoZSwgb3V0ZXJDYWNoZSxcblx0XHRcdFx0bmV3Q2FjaGUgPSBbIGRpcnJ1bnMsIGRvbmVOYW1lIF07XG5cblx0XHRcdC8vIFdlIGNhbid0IHNldCBhcmJpdHJhcnkgZGF0YSBvbiBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVuZWZpdCBmcm9tIGNvbWJpbmF0b3IgY2FjaGluZ1xuXHRcdFx0aWYgKCB4bWwgKSB7XG5cdFx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoIGVsZW1bIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdGlmICggc2tpcCAmJiBub2RlTmFtZSggZWxlbSwgc2tpcCApICkge1xuXHRcdFx0XHRcdFx0XHRlbGVtID0gZWxlbVsgZGlyIF0gfHwgZWxlbTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoICggb2xkQ2FjaGUgPSBvdXRlckNhY2hlWyBrZXkgXSApICYmXG5cdFx0XHRcdFx0XHRcdG9sZENhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgb2xkQ2FjaGVbIDEgXSA9PT0gZG9uZU5hbWUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQXNzaWduIHRvIG5ld0NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0cmV0dXJuICggbmV3Q2FjaGVbIDIgXSA9IG9sZENhY2hlWyAyIF0gKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUmV1c2UgbmV3Y2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlWyBrZXkgXSA9IG5ld0NhY2hlO1xuXG5cdFx0XHRcdFx0XHRcdC8vIEEgbWF0Y2ggbWVhbnMgd2UncmUgZG9uZTsgYSBmYWlsIG1lYW5zIHdlIGhhdmUgdG8ga2VlcCBjaGVja2luZ1xuXHRcdFx0XHRcdFx0XHRpZiAoICggbmV3Q2FjaGVbIDIgXSA9IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xufVxuXG5mdW5jdGlvbiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSB7XG5cdHJldHVybiBtYXRjaGVycy5sZW5ndGggPiAxID9cblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIGkgPSBtYXRjaGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAhbWF0Y2hlcnNbIGkgXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IDpcblx0XHRtYXRjaGVyc1sgMCBdO1xufVxuXG5mdW5jdGlvbiBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciwgY29udGV4dHMsIHJlc3VsdHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBjb250ZXh0cy5sZW5ndGg7XG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGZpbmQoIHNlbGVjdG9yLCBjb250ZXh0c1sgaSBdLCByZXN1bHRzICk7XG5cdH1cblx0cmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIGNvbmRlbnNlKCB1bm1hdGNoZWQsIG1hcCwgZmlsdGVyLCBjb250ZXh0LCB4bWwgKSB7XG5cdHZhciBlbGVtLFxuXHRcdG5ld1VubWF0Y2hlZCA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGxlbiA9IHVubWF0Y2hlZC5sZW5ndGgsXG5cdFx0bWFwcGVkID0gbWFwICE9IG51bGw7XG5cblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0aWYgKCAoIGVsZW0gPSB1bm1hdGNoZWRbIGkgXSApICkge1xuXHRcdFx0aWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdGlmICggbWFwcGVkICkge1xuXHRcdFx0XHRcdG1hcC5wdXNoKCBpICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3VW5tYXRjaGVkO1xufVxuXG5mdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKSB7XG5cdGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7XG5cdH1cblx0aWYgKCBwb3N0RmluZGVyICYmICFwb3N0RmluZGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApO1xuXHR9XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCByZXN1bHRzLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0dmFyIHRlbXAsIGksIGVsZW0sIG1hdGNoZXJPdXQsXG5cdFx0XHRwcmVNYXAgPSBbXSxcblx0XHRcdHBvc3RNYXAgPSBbXSxcblx0XHRcdHByZWV4aXN0aW5nID0gcmVzdWx0cy5sZW5ndGgsXG5cblx0XHRcdC8vIEdldCBpbml0aWFsIGVsZW1lbnRzIGZyb20gc2VlZCBvciBjb250ZXh0XG5cdFx0XHRlbGVtcyA9IHNlZWQgfHxcblx0XHRcdFx0bXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IgfHwgXCIqXCIsXG5cdFx0XHRcdFx0Y29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCwgW10gKSxcblxuXHRcdFx0Ly8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uXG5cdFx0XHRtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID9cblx0XHRcdFx0Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRlbGVtcztcblxuXHRcdGlmICggbWF0Y2hlciApIHtcblxuXHRcdFx0Ly8gSWYgd2UgaGF2ZSBhIHBvc3RGaW5kZXIsIG9yIGZpbHRlcmVkIHNlZWQsIG9yIG5vbi1zZWVkIHBvc3RGaWx0ZXJcblx0XHRcdC8vIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsXG5cdFx0XHRtYXRjaGVyT3V0ID0gcG9zdEZpbmRlciB8fCAoIHNlZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVyICkgP1xuXG5cdFx0XHRcdC8vIC4uLmludGVybWVkaWF0ZSBwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeVxuXHRcdFx0XHRbXSA6XG5cblx0XHRcdFx0Ly8gLi4ub3RoZXJ3aXNlIHVzZSByZXN1bHRzIGRpcmVjdGx5XG5cdFx0XHRcdHJlc3VsdHM7XG5cblx0XHRcdC8vIEZpbmQgcHJpbWFyeSBtYXRjaGVzXG5cdFx0XHRtYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyT3V0ID0gbWF0Y2hlckluO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHBvc3RGaWx0ZXJcblx0XHRpZiAoIHBvc3RGaWx0ZXIgKSB7XG5cdFx0XHR0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTtcblx0XHRcdHBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTtcblxuXHRcdFx0Ly8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJblxuXHRcdFx0aSA9IHRlbXAubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggKCBlbGVtID0gdGVtcFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlck91dFsgcG9zdE1hcFsgaSBdIF0gPSAhKCBtYXRjaGVySW5bIHBvc3RNYXBbIGkgXSBdID0gZWxlbSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyIHx8IHByZUZpbHRlciApIHtcblx0XHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBpbnRlcm1lZGlhdGUgaW50byBwb3N0RmluZGVyIGNvbnRleHRzXG5cdFx0XHRcdFx0dGVtcCA9IFtdO1xuXHRcdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKCBlbGVtID0gbWF0Y2hlck91dFsgaSBdICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBtYXRjaGVySW4gc2luY2UgZWxlbSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2hcblx0XHRcdFx0XHRcdFx0dGVtcC5wdXNoKCAoIG1hdGNoZXJJblsgaSBdID0gZWxlbSApICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsICggbWF0Y2hlck91dCA9IFtdICksIHRlbXAsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWRcblx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRpZiAoICggZWxlbSA9IG1hdGNoZXJPdXRbIGkgXSApICYmXG5cdFx0XHRcdFx0XHQoIHRlbXAgPSBwb3N0RmluZGVyID8gaW5kZXhPZi5jYWxsKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbIGkgXSApID4gLTEgKSB7XG5cblx0XHRcdFx0XHRcdHNlZWRbIHRlbXAgXSA9ICEoIHJlc3VsdHNbIHRlbXAgXSA9IGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEFkZCBlbGVtZW50cyB0byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIgaWYgZGVmaW5lZFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyT3V0ID0gY29uZGVuc2UoXG5cdFx0XHRcdG1hdGNoZXJPdXQgPT09IHJlc3VsdHMgP1xuXHRcdFx0XHRcdG1hdGNoZXJPdXQuc3BsaWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6XG5cdFx0XHRcdFx0bWF0Y2hlck91dFxuXHRcdFx0KTtcblx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0Y2hlck91dCwgeG1sICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBtYXRjaGVyT3V0ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMgKSB7XG5cdHZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRsZWFkaW5nUmVsYXRpdmUgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIDAgXS50eXBlIF0sXG5cdFx0aW1wbGljaXRSZWxhdGl2ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlWyBcIiBcIiBdLFxuXHRcdGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCxcblxuXHRcdC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpXG5cdFx0bWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBpbmRleE9mLmNhbGwoIGNoZWNrQ29udGV4dCwgZWxlbSApID4gLTE7XG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxuXHRcdG1hdGNoZXJzID0gWyBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0dmFyIHJldCA9ICggIWxlYWRpbmdSZWxhdGl2ZSAmJiAoIHhtbCB8fCBjb250ZXh0ICE9IG91dGVybW9zdENvbnRleHQgKSApIHx8IChcblx0XHRcdFx0KCBjaGVja0NvbnRleHQgPSBjb250ZXh0ICkubm9kZVR5cGUgP1xuXHRcdFx0XHRcdG1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRcdG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTtcblxuXHRcdFx0Ly8gQXZvaWQgaGFuZ2luZyBvbnRvIGVsZW1lbnRcblx0XHRcdC8vIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvaXNzdWVzLzI5OSlcblx0XHRcdGNoZWNrQ29udGV4dCA9IG51bGw7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH0gXTtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoICggbWF0Y2hlciA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgaSBdLnR5cGUgXSApICkge1xuXHRcdFx0bWF0Y2hlcnMgPSBbIGFkZENvbWJpbmF0b3IoIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyICkgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbIGkgXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1sgaSBdLm1hdGNoZXMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIHNwZWNpYWwgdXBvbiBzZWVpbmcgYSBwb3NpdGlvbmFsIG1hdGNoZXJcblx0XHRcdGlmICggbWF0Y2hlclsgZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdC8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3BlciBoYW5kbGluZ1xuXHRcdFx0XHRqID0gKytpO1xuXHRcdFx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgaiBdLnR5cGUgXSApIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2V0TWF0Y2hlcihcblx0XHRcdFx0XHRpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSxcblx0XHRcdFx0XHRpID4gMSAmJiB0b1NlbGVjdG9yKFxuXG5cdFx0XHRcdFx0XHQvLyBJZiB0aGUgcHJlY2VkaW5nIHRva2VuIHdhcyBhIGRlc2NlbmRhbnQgY29tYmluYXRvciwgaW5zZXJ0IGFuIGltcGxpY2l0IGFueS1lbGVtZW50IGAqYFxuXHRcdFx0XHRcdFx0dG9rZW5zLnNsaWNlKCAwLCBpIC0gMSApXG5cdFx0XHRcdFx0XHRcdC5jb25jYXQoIHsgdmFsdWU6IHRva2Vuc1sgaSAtIDIgXS50eXBlID09PSBcIiBcIiA/IFwiKlwiIDogXCJcIiB9IClcblx0XHRcdFx0XHQpLnJlcGxhY2UoIHJ0cmltQ1NTLCBcIiQxXCIgKSxcblx0XHRcdFx0XHRtYXRjaGVyLFxuXHRcdFx0XHRcdGkgPCBqICYmIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMuc2xpY2UoIGksIGogKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgbWF0Y2hlckZyb21Ub2tlbnMoICggdG9rZW5zID0gdG9rZW5zLnNsaWNlKCBqICkgKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgdG9TZWxlY3RvciggdG9rZW5zIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdG1hdGNoZXJzLnB1c2goIG1hdGNoZXIgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApIHtcblx0dmFyIGJ5U2V0ID0gc2V0TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRzdXBlck1hdGNoZXIgPSBmdW5jdGlvbiggc2VlZCwgY29udGV4dCwgeG1sLCByZXN1bHRzLCBvdXRlcm1vc3QgKSB7XG5cdFx0XHR2YXIgZWxlbSwgaiwgbWF0Y2hlcixcblx0XHRcdFx0bWF0Y2hlZENvdW50ID0gMCxcblx0XHRcdFx0aSA9IFwiMFwiLFxuXHRcdFx0XHR1bm1hdGNoZWQgPSBzZWVkICYmIFtdLFxuXHRcdFx0XHRzZXRNYXRjaGVkID0gW10sXG5cdFx0XHRcdGNvbnRleHRCYWNrdXAgPSBvdXRlcm1vc3RDb250ZXh0LFxuXG5cdFx0XHRcdC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Igb3V0ZXJtb3N0IGNvbnRleHRcblx0XHRcdFx0ZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHByLmZpbmQuVEFHKCBcIipcIiwgb3V0ZXJtb3N0ICksXG5cblx0XHRcdFx0Ly8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXJcblx0XHRcdFx0ZGlycnVuc1VuaXF1ZSA9ICggZGlycnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAwLjEgKSxcblx0XHRcdFx0bGVuID0gZWxlbXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dCA9PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHNcblx0XHRcdC8vIFN1cHBvcnQ6IGlPUyA8PTcgLSA5IG9ubHlcblx0XHRcdC8vIFRvbGVyYXRlIE5vZGVMaXN0IHByb3BlcnRpZXMgKElFOiBcImxlbmd0aFwiOyBTYWZhcmk6IDxudW1iZXI+KSBtYXRjaGluZ1xuXHRcdFx0Ly8gZWxlbWVudHMgYnkgaWQuIChzZWUgdHJhYy0xNDE0Milcblx0XHRcdGZvciAoIDsgaSAhPT0gbGVuICYmICggZWxlbSA9IGVsZW1zWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0XHRcdGlmICggIWNvbnRleHQgJiYgZWxlbS5vd25lckRvY3VtZW50ICE9IGRvY3VtZW50ICkge1xuXHRcdFx0XHRcdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0XHRcdFx0XHRcdHhtbCA9ICFkb2N1bWVudElzSFRNTDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQgfHwgZG9jdW1lbnQsIHhtbCApICkge1xuXHRcdFx0XHRcdFx0XHRwdXNoLmNhbGwoIHJlc3VsdHMsIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHJhY2sgdW5tYXRjaGVkIGVsZW1lbnRzIGZvciBzZXQgZmlsdGVyc1xuXHRcdFx0XHRpZiAoIGJ5U2V0ICkge1xuXG5cdFx0XHRcdFx0Ly8gVGhleSB3aWxsIGhhdmUgZ29uZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBtYXRjaGVyc1xuXHRcdFx0XHRcdGlmICggKCBlbGVtID0gIW1hdGNoZXIgJiYgZWxlbSApICkge1xuXHRcdFx0XHRcdFx0bWF0Y2hlZENvdW50LS07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTGVuZ3RoZW4gdGhlIGFycmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdFxuXHRcdFx0XHRcdGlmICggc2VlZCApIHtcblx0XHRcdFx0XHRcdHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIGBpYCBpcyBub3cgdGhlIGNvdW50IG9mIGVsZW1lbnRzIHZpc2l0ZWQgYWJvdmUsIGFuZCBhZGRpbmcgaXQgdG8gYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIG1ha2VzIHRoZSBsYXR0ZXIgbm9ubmVnYXRpdmUuXG5cdFx0XHRtYXRjaGVkQ291bnQgKz0gaTtcblxuXHRcdFx0Ly8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBOT1RFOiBUaGlzIGNhbiBiZSBza2lwcGVkIGlmIHRoZXJlIGFyZSBubyB1bm1hdGNoZWQgZWxlbWVudHMgKGkuZS4sIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBlcXVhbHMgYGlgKSwgdW5sZXNzIHdlIGRpZG4ndCB2aXNpdCBfYW55XyBlbGVtZW50cyBpbiB0aGUgYWJvdmUgbG9vcCBiZWNhdXNlIHdlIGhhdmVcblx0XHRcdC8vIG5vIGVsZW1lbnQgbWF0Y2hlcnMgYW5kIG5vIHNlZWQuXG5cdFx0XHQvLyBJbmNyZW1lbnRpbmcgYW4gaW5pdGlhbGx5LXN0cmluZyBcIjBcIiBgaWAgYWxsb3dzIGBpYCB0byByZW1haW4gYSBzdHJpbmcgb25seSBpbiB0aGF0XG5cdFx0XHQvLyBjYXNlLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIFwiMDBcIiBgbWF0Y2hlZENvdW50YCB0aGF0IGRpZmZlcnMgZnJvbSBgaWAgYnV0IGlzIGFsc29cblx0XHRcdC8vIG51bWVyaWNhbGx5IHplcm8uXG5cdFx0XHRpZiAoIGJ5U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHtcblx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdHdoaWxlICggKCBtYXRjaGVyID0gc2V0TWF0Y2hlcnNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlciggdW5tYXRjaGVkLCBzZXRNYXRjaGVkLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggc2VlZCApIHtcblxuXHRcdFx0XHRcdC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNvcnRpbmdcblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCAhKCB1bm1hdGNoZWRbIGkgXSB8fCBzZXRNYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHRzZXRNYXRjaGVkWyBpIF0gPSBwb3AuY2FsbCggcmVzdWx0cyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRGlzY2FyZCBpbmRleCBwbGFjZWhvbGRlciB2YWx1ZXMgdG8gZ2V0IG9ubHkgYWN0dWFsIG1hdGNoZXNcblx0XHRcdFx0XHRzZXRNYXRjaGVkID0gY29uZGVuc2UoIHNldE1hdGNoZWQgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFkZCBtYXRjaGVzIHRvIHJlc3VsdHNcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2V0TWF0Y2hlZCApO1xuXG5cdFx0XHRcdC8vIFNlZWRsZXNzIHNldCBtYXRjaGVzIHN1Y2NlZWRpbmcgbXVsdGlwbGUgc3VjY2Vzc2Z1bCBtYXRjaGVycyBzdGlwdWxhdGUgc29ydGluZ1xuXHRcdFx0XHRpZiAoIG91dGVybW9zdCAmJiAhc2VlZCAmJiBzZXRNYXRjaGVkLmxlbmd0aCA+IDAgJiZcblx0XHRcdFx0XHQoIG1hdGNoZWRDb3VudCArIHNldE1hdGNoZXJzLmxlbmd0aCApID4gMSApIHtcblxuXHRcdFx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KCByZXN1bHRzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gT3ZlcnJpZGUgbWFuaXB1bGF0aW9uIG9mIGdsb2JhbHMgYnkgbmVzdGVkIG1hdGNoZXJzXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0QmFja3VwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdW5tYXRjaGVkO1xuXHRcdH07XG5cblx0cmV0dXJuIGJ5U2V0ID9cblx0XHRtYXJrRnVuY3Rpb24oIHN1cGVyTWF0Y2hlciApIDpcblx0XHRzdXBlck1hdGNoZXI7XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGUoIHNlbGVjdG9yLCBtYXRjaCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHtcblx0dmFyIGksXG5cdFx0c2V0TWF0Y2hlcnMgPSBbXSxcblx0XHRlbGVtZW50TWF0Y2hlcnMgPSBbXSxcblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCAhY2FjaGVkICkge1xuXG5cdFx0Ly8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50XG5cdFx0aWYgKCAhbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdH1cblx0XHRpID0gbWF0Y2gubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0Y2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIG1hdGNoWyBpIF0gKTtcblx0XHRcdGlmICggY2FjaGVkWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHNldE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhY2hlIHRoZSBjb21waWxlZCBmdW5jdGlvblxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUoIHNlbGVjdG9yLFxuXHRcdFx0bWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgKTtcblxuXHRcdC8vIFNhdmUgc2VsZWN0b3IgYW5kIHRva2VuaXphdGlvblxuXHRcdGNhY2hlZC5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHR9XG5cdHJldHVybiBjYWNoZWQ7XG59XG5cbi8qKlxuICogQSBsb3ctbGV2ZWwgc2VsZWN0aW9uIGZ1bmN0aW9uIHRoYXQgd29ya3Mgd2l0aCBqUXVlcnkncyBjb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHNlbGVjdG9yIEEgc2VsZWN0b3Igb3IgYSBwcmUtY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbiBidWlsdCB3aXRoIGpRdWVyeSBzZWxlY3RvciBjb21waWxlXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRleHRcbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRzXVxuICogQHBhcmFtIHtBcnJheX0gW3NlZWRdIEEgc2V0IG9mIGVsZW1lbnRzIHRvIG1hdGNoIGFnYWluc3RcbiAqL1xuZnVuY3Rpb24gc2VsZWN0KCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIGksIHRva2VucywgdG9rZW4sIHR5cGUsIGZpbmQsXG5cdFx0Y29tcGlsZWQgPSB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBzZWxlY3Rvcixcblx0XHRtYXRjaCA9ICFzZWVkICYmIHRva2VuaXplKCAoIHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IgKSApO1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNlbGVjdG9yIGluIHRoZSBsaXN0IGFuZCBubyBzZWVkXG5cdC8vICh0aGUgbGF0dGVyIG9mIHdoaWNoIGd1YXJhbnRlZXMgdXMgY29udGV4dClcblx0aWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7XG5cblx0XHQvLyBSZWR1Y2UgY29udGV4dCBpZiB0aGUgbGVhZGluZyBjb21wb3VuZCBzZWxlY3RvciBpcyBhbiBJRFxuXHRcdHRva2VucyA9IG1hdGNoWyAwIF0gPSBtYXRjaFsgMCBdLnNsaWNlKCAwICk7XG5cdFx0aWYgKCB0b2tlbnMubGVuZ3RoID4gMiAmJiAoIHRva2VuID0gdG9rZW5zWyAwIF0gKS50eXBlID09PSBcIklEXCIgJiZcblx0XHRcdFx0Y29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJiBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIDEgXS50eXBlIF0gKSB7XG5cblx0XHRcdGNvbnRleHQgPSAoIEV4cHIuZmluZC5JRChcblx0XHRcdFx0dG9rZW4ubWF0Y2hlc1sgMCBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksXG5cdFx0XHRcdGNvbnRleHRcblx0XHRcdCkgfHwgW10gKVsgMCBdO1xuXHRcdFx0aWYgKCAhY29udGV4dCApIHtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdC8vIFByZWNvbXBpbGVkIG1hdGNoZXJzIHdpbGwgc3RpbGwgdmVyaWZ5IGFuY2VzdHJ5LCBzbyBzdGVwIHVwIGEgbGV2ZWxcblx0XHRcdH0gZWxzZSBpZiAoIGNvbXBpbGVkICkge1xuXHRcdFx0XHRjb250ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tlbnMuc2hpZnQoKS52YWx1ZS5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGZXRjaCBhIHNlZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nXG5cdFx0aSA9IG1hdGNoRXhwci5uZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSA/IDAgOiB0b2tlbnMubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG9rZW4gPSB0b2tlbnNbIGkgXTtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvclxuXHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyAoIHR5cGUgPSB0b2tlbi50eXBlICkgXSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICggZmluZCA9IEV4cHIuZmluZFsgdHlwZSBdICkgKSB7XG5cblx0XHRcdFx0Ly8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzXG5cdFx0XHRcdGlmICggKCBzZWVkID0gZmluZChcblx0XHRcdFx0XHR0b2tlbi5tYXRjaGVzWyAwIF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSxcblx0XHRcdFx0XHRyc2libGluZy50ZXN0KCB0b2tlbnNbIDAgXS50eXBlICkgJiZcblx0XHRcdFx0XHRcdHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdFx0XHRcdCkgKSApIHtcblxuXHRcdFx0XHRcdC8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVybiBlYXJseVxuXHRcdFx0XHRcdHRva2Vucy5zcGxpY2UoIGksIDEgKTtcblx0XHRcdFx0XHRzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRvU2VsZWN0b3IoIHRva2VucyApO1xuXHRcdFx0XHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2VlZCApO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDb21waWxlIGFuZCBleGVjdXRlIGEgZmlsdGVyaW5nIGZ1bmN0aW9uIGlmIG9uZSBpcyBub3QgcHJvdmlkZWRcblx0Ly8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJldG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZVxuXHQoIGNvbXBpbGVkIHx8IGNvbXBpbGUoIHNlbGVjdG9yLCBtYXRjaCApICkoXG5cdFx0c2VlZCxcblx0XHRjb250ZXh0LFxuXHRcdCFkb2N1bWVudElzSFRNTCxcblx0XHRyZXN1bHRzLFxuXHRcdCFjb250ZXh0IHx8IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0KTtcblx0cmV0dXJuIHJlc3VsdHM7XG59XG5cbi8vIE9uZS10aW1lIGFzc2lnbm1lbnRzXG5cbi8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgLSA0LjErXG4vLyBTb3J0IHN0YWJpbGl0eVxuc3VwcG9ydC5zb3J0U3RhYmxlID0gZXhwYW5kby5zcGxpdCggXCJcIiApLnNvcnQoIHNvcnRPcmRlciApLmpvaW4oIFwiXCIgKSA9PT0gZXhwYW5kbztcblxuLy8gSW5pdGlhbGl6ZSBhZ2FpbnN0IHRoZSBkZWZhdWx0IGRvY3VtZW50XG5zZXREb2N1bWVudCgpO1xuXG4vLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIC0gNC4xK1xuLy8gRGV0YWNoZWQgbm9kZXMgY29uZm91bmRpbmdseSBmb2xsb3cgKmVhY2ggb3RoZXIqXG5zdXBwb3J0LnNvcnREZXRhY2hlZCA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXG5cdC8vIFNob3VsZCByZXR1cm4gMSwgYnV0IHJldHVybnMgNCAoZm9sbG93aW5nKVxuXHRyZXR1cm4gZWwuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZmllbGRzZXRcIiApICkgJiAxO1xufSApO1xuXG5qUXVlcnkuZmluZCA9IGZpbmQ7XG5cbi8vIERlcHJlY2F0ZWRcbmpRdWVyeS5leHByWyBcIjpcIiBdID0galF1ZXJ5LmV4cHIucHNldWRvcztcbmpRdWVyeS51bmlxdWUgPSBqUXVlcnkudW5pcXVlU29ydDtcblxuLy8gVGhlc2UgaGF2ZSBhbHdheXMgYmVlbiBwcml2YXRlLCBidXQgdGhleSB1c2VkIHRvIGJlIGRvY3VtZW50ZWQgYXMgcGFydCBvZlxuLy8gU2l6emxlIHNvIGxldCdzIG1haW50YWluIHRoZW0gZm9yIG5vdyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcHVycG9zZXMuXG5maW5kLmNvbXBpbGUgPSBjb21waWxlO1xuZmluZC5zZWxlY3QgPSBzZWxlY3Q7XG5maW5kLnNldERvY3VtZW50ID0gc2V0RG9jdW1lbnQ7XG5maW5kLnRva2VuaXplID0gdG9rZW5pemU7XG5cbmZpbmQuZXNjYXBlID0galF1ZXJ5LmVzY2FwZVNlbGVjdG9yO1xuZmluZC5nZXRUZXh0ID0galF1ZXJ5LnRleHQ7XG5maW5kLmlzWE1MID0galF1ZXJ5LmlzWE1MRG9jO1xuZmluZC5zZWxlY3RvcnMgPSBqUXVlcnkuZXhwcjtcbmZpbmQuc3VwcG9ydCA9IGpRdWVyeS5zdXBwb3J0O1xuZmluZC51bmlxdWVTb3J0ID0galF1ZXJ5LnVuaXF1ZVNvcnQ7XG5cblx0LyogZXNsaW50LWVuYWJsZSAqL1xuXG59ICkoKTtcblxuXG52YXIgZGlyID0gZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7XG5cdHZhciBtYXRjaGVkID0gW10sXG5cdFx0dHJ1bmNhdGUgPSB1bnRpbCAhPT0gdW5kZWZpbmVkO1xuXG5cdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSAmJiBlbGVtLm5vZGVUeXBlICE9PSA5ICkge1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGlmICggdHJ1bmNhdGUgJiYgalF1ZXJ5KCBlbGVtICkuaXMoIHVudGlsICkgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgc2libGluZ3MgPSBmdW5jdGlvbiggbiwgZWxlbSApIHtcblx0dmFyIG1hdGNoZWQgPSBbXTtcblxuXHRmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkge1xuXHRcdGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkge1xuXHRcdFx0bWF0Y2hlZC5wdXNoKCBuICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0O1xuXG52YXIgcnNpbmdsZVRhZyA9ICggL148KFthLXpdW15cXC9cXDA+OlxceDIwXFx0XFxyXFxuXFxmXSopW1xceDIwXFx0XFxyXFxuXFxmXSpcXC8/Pig/OjxcXC9cXDE+fCkkL2kgKTtcblxuXG5cbi8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90XG5mdW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIG5vdCApIHtcblx0aWYgKCBpc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBTaW5nbGUgZWxlbWVudFxuXHRpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gQXJyYXlsaWtlIG9mIGVsZW1lbnRzIChqUXVlcnksIGFyZ3VtZW50cywgQXJyYXkpXG5cdGlmICggdHlwZW9mIHF1YWxpZmllciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGluZGV4T2YuY2FsbCggcXVhbGlmaWVyLCBlbGVtICkgPiAtMSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRmlsdGVyZWQgZGlyZWN0bHkgZm9yIGJvdGggc2ltcGxlIGFuZCBjb21wbGV4IHNlbGVjdG9yc1xuXHRyZXR1cm4galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cywgbm90ICk7XG59XG5cbmpRdWVyeS5maWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHtcblx0dmFyIGVsZW0gPSBlbGVtc1sgMCBdO1xuXG5cdGlmICggbm90ICkge1xuXHRcdGV4cHIgPSBcIjpub3QoXCIgKyBleHByICsgXCIpXCI7XG5cdH1cblxuXHRpZiAoIGVsZW1zLmxlbmd0aCA9PT0gMSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGVsZW0sIGV4cHIgKSA/IFsgZWxlbSBdIDogW107XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlcyggZXhwciwgalF1ZXJ5LmdyZXAoIGVsZW1zLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTtcblx0fSApICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgaSwgcmV0LFxuXHRcdFx0bGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRzZWxmID0gdGhpcztcblxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoIHNlbGVjdG9yICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKSApO1xuXHRcdH1cblxuXHRcdHJldCA9IHRoaXMucHVzaFN0YWNrKCBbXSApO1xuXG5cdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGpRdWVyeS5maW5kKCBzZWxlY3Rvciwgc2VsZlsgaSBdLCByZXQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbGVuID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCByZXQgKSA6IHJldDtcblx0fSxcblx0ZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCBmYWxzZSApICk7XG5cdH0sXG5cdG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgdHJ1ZSApICk7XG5cdH0sXG5cdGlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuICEhd2lubm93KFxuXHRcdFx0dGhpcyxcblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVybmVkIHNldFxuXHRcdFx0Ly8gc28gJChcInA6Zmlyc3RcIikuaXMoXCJwOmxhc3RcIikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvIFwicFwiLlxuXHRcdFx0dHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICYmIHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGpRdWVyeSggc2VsZWN0b3IgKSA6XG5cdFx0XHRcdHNlbGVjdG9yIHx8IFtdLFxuXHRcdFx0ZmFsc2Vcblx0XHQpLmxlbmd0aDtcblx0fVxufSApO1xuXG5cbi8vIEluaXRpYWxpemUgYSBqUXVlcnkgb2JqZWN0XG5cblxuLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBqUXVlcnkoZG9jdW1lbnQpXG52YXIgcm9vdGpRdWVyeSxcblxuXHQvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5nc1xuXHQvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAodHJhYy05NTIxKVxuXHQvLyBTdHJpY3QgSFRNTCByZWNvZ25pdGlvbiAodHJhYy0xMTI5MDogbXVzdCBzdGFydCB3aXRoIDwpXG5cdC8vIFNob3J0Y3V0IHNpbXBsZSAjaWQgY2FzZSBmb3Igc3BlZWRcblx0cnF1aWNrRXhwciA9IC9eKD86XFxzKig8W1xcd1xcV10rPilbXj5dKnwjKFtcXHctXSspKSQvLFxuXG5cdGluaXQgPSBqUXVlcnkuZm4uaW5pdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcm9vdCApIHtcblx0XHR2YXIgbWF0Y2gsIGVsZW07XG5cblx0XHQvLyBIQU5ETEU6ICQoXCJcIiksICQobnVsbCksICQodW5kZWZpbmVkKSwgJChmYWxzZSlcblx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdC8vIE1ldGhvZCBpbml0KCkgYWNjZXB0cyBhbiBhbHRlcm5hdGUgcm9vdGpRdWVyeVxuXHRcdC8vIHNvIG1pZ3JhdGUgY2FuIHN1cHBvcnQgalF1ZXJ5LnN1YiAoZ2gtMjEwMSlcblx0XHRyb290ID0gcm9vdCB8fCByb290alF1ZXJ5O1xuXG5cdFx0Ly8gSGFuZGxlIEhUTUwgc3RyaW5nc1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0aWYgKCBzZWxlY3RvclsgMCBdID09PSBcIjxcIiAmJlxuXHRcdFx0XHRzZWxlY3Rvclsgc2VsZWN0b3IubGVuZ3RoIC0gMSBdID09PSBcIj5cIiAmJlxuXHRcdFx0XHRzZWxlY3Rvci5sZW5ndGggPj0gMyApIHtcblxuXHRcdFx0XHQvLyBBc3N1bWUgdGhhdCBzdHJpbmdzIHRoYXQgc3RhcnQgYW5kIGVuZCB3aXRoIDw+IGFyZSBIVE1MIGFuZCBza2lwIHRoZSByZWdleCBjaGVja1xuXHRcdFx0XHRtYXRjaCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1hdGNoIGh0bWwgb3IgbWFrZSBzdXJlIG5vIGNvbnRleHQgaXMgc3BlY2lmaWVkIGZvciAjaWRcblx0XHRcdGlmICggbWF0Y2ggJiYgKCBtYXRjaFsgMSBdIHx8ICFjb250ZXh0ICkgKSB7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpXG5cdFx0XHRcdGlmICggbWF0Y2hbIDEgXSApIHtcblx0XHRcdFx0XHRjb250ZXh0ID0gY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRbIDAgXSA6IGNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBPcHRpb24gdG8gcnVuIHNjcmlwdHMgaXMgdHJ1ZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbGx5IGxldCB0aGUgZXJyb3IgYmUgdGhyb3duIGlmIHBhcnNlSFRNTCBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcywgalF1ZXJ5LnBhcnNlSFRNTChcblx0XHRcdFx0XHRcdG1hdGNoWyAxIF0sXG5cdFx0XHRcdFx0XHRjb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3VtZW50LFxuXHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdCkgKTtcblxuXHRcdFx0XHRcdC8vIEhBTkRMRTogJChodG1sLCBwcm9wcylcblx0XHRcdFx0XHRpZiAoIHJzaW5nbGVUYWcudGVzdCggbWF0Y2hbIDEgXSApICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0ICkgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCBtYXRjaCBpbiBjb250ZXh0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFByb3BlcnRpZXMgb2YgY29udGV4dCBhcmUgY2FsbGVkIGFzIG1ldGhvZHMgaWYgcG9zc2libGVcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGlzWyBtYXRjaCBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpc1sgbWF0Y2ggXSggY29udGV4dFsgbWF0Y2ggXSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmFuZCBvdGhlcndpc2Ugc2V0IGFzIGF0dHJpYnV0ZXNcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmF0dHIoIG1hdGNoLCBjb250ZXh0WyBtYXRjaCBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoI2lkKVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggbWF0Y2hbIDIgXSApO1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdFxuXHRcdFx0XHRcdFx0dGhpc1sgMCBdID0gZWxlbTtcblx0XHRcdFx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsICQoLi4uKSlcblx0XHRcdH0gZWxzZSBpZiAoICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkge1xuXHRcdFx0XHRyZXR1cm4gKCBjb250ZXh0IHx8IHJvb3QgKS5maW5kKCBzZWxlY3RvciApO1xuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgY29udGV4dClcblx0XHRcdC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86ICQoY29udGV4dCkuZmluZChleHByKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoIGNvbnRleHQgKS5maW5kKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSEFORExFOiAkKERPTUVsZW1lbnQpXG5cdFx0fSBlbHNlIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7XG5cdFx0XHR0aGlzWyAwIF0gPSBzZWxlY3Rvcjtcblx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0Ly8gSEFORExFOiAkKGZ1bmN0aW9uKVxuXHRcdC8vIFNob3J0Y3V0IGZvciBkb2N1bWVudCByZWFkeVxuXHRcdH0gZWxzZSBpZiAoIGlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7XG5cdFx0XHRyZXR1cm4gcm9vdC5yZWFkeSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0cm9vdC5yZWFkeSggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gRXhlY3V0ZSBpbW1lZGlhdGVseSBpZiByZWFkeSBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRzZWxlY3RvciggalF1ZXJ5ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7XG5cdH07XG5cbi8vIEdpdmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGluc3RhbnRpYXRpb25cbmluaXQucHJvdG90eXBlID0galF1ZXJ5LmZuO1xuXG4vLyBJbml0aWFsaXplIGNlbnRyYWwgcmVmZXJlbmNlXG5yb290alF1ZXJ5ID0galF1ZXJ5KCBkb2N1bWVudCApO1xuXG5cbnZhciBycGFyZW50c3ByZXYgPSAvXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxcblxuXHQvLyBNZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhIHVuaXF1ZSBzZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVlIHNldFxuXHRndWFyYW50ZWVkVW5pcXVlID0ge1xuXHRcdGNoaWxkcmVuOiB0cnVlLFxuXHRcdGNvbnRlbnRzOiB0cnVlLFxuXHRcdG5leHQ6IHRydWUsXG5cdFx0cHJldjogdHJ1ZVxuXHR9O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGhhczogZnVuY3Rpb24oIHRhcmdldCApIHtcblx0XHR2YXIgdGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0LCB0aGlzICksXG5cdFx0XHRsID0gdGFyZ2V0cy5sZW5ndGg7XG5cblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggdGhpcywgdGFyZ2V0c1sgaSBdICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Y2xvc2VzdDogZnVuY3Rpb24oIHNlbGVjdG9ycywgY29udGV4dCApIHtcblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRtYXRjaGVkID0gW10sXG5cdFx0XHR0YXJnZXRzID0gdHlwZW9mIHNlbGVjdG9ycyAhPT0gXCJzdHJpbmdcIiAmJiBqUXVlcnkoIHNlbGVjdG9ycyApO1xuXG5cdFx0Ly8gUG9zaXRpb25hbCBzZWxlY3RvcnMgbmV2ZXIgbWF0Y2gsIHNpbmNlIHRoZXJlJ3Mgbm8gX3NlbGVjdGlvbl8gY29udGV4dFxuXHRcdGlmICggIXJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3JzICkgKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZvciAoIGN1ciA9IHRoaXNbIGkgXTsgY3VyICYmIGN1ciAhPT0gY29udGV4dDsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cblx0XHRcdFx0XHQvLyBBbHdheXMgc2tpcCBkb2N1bWVudCBmcmFnbWVudHNcblx0XHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA8IDExICYmICggdGFyZ2V0cyA/XG5cdFx0XHRcdFx0XHR0YXJnZXRzLmluZGV4KCBjdXIgKSA+IC0xIDpcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcGFzcyBub24tZWxlbWVudHMgdG8galF1ZXJ5I2ZpbmRcblx0XHRcdFx0XHRcdGN1ci5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGN1ciwgc2VsZWN0b3JzICkgKSApIHtcblxuXHRcdFx0XHRcdFx0bWF0Y2hlZC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKSA6IG1hdGNoZWQgKTtcblx0fSxcblxuXHQvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgd2l0aGluIHRoZSBzZXRcblx0aW5kZXg6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gTm8gYXJndW1lbnQsIHJldHVybiBpbmRleCBpbiBwYXJlbnRcblx0XHRpZiAoICFlbGVtICkge1xuXHRcdFx0cmV0dXJuICggdGhpc1sgMCBdICYmIHRoaXNbIDAgXS5wYXJlbnROb2RlICkgPyB0aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aCA6IC0xO1xuXHRcdH1cblxuXHRcdC8vIEluZGV4IGluIHNlbGVjdG9yXG5cdFx0aWYgKCB0eXBlb2YgZWxlbSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBpbmRleE9mLmNhbGwoIGpRdWVyeSggZWxlbSApLCB0aGlzWyAwIF0gKTtcblx0XHR9XG5cblx0XHQvLyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkZXNpcmVkIGVsZW1lbnRcblx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCB0aGlzLFxuXG5cdFx0XHQvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWRcblx0XHRcdGVsZW0uanF1ZXJ5ID8gZWxlbVsgMCBdIDogZWxlbVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkOiBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKFxuXHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoXG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcy5nZXQoKSwgalF1ZXJ5KCBzZWxlY3RvciwgY29udGV4dCApIClcblx0XHRcdClcblx0XHQpO1xuXHR9LFxuXG5cdGFkZEJhY2s6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5hZGQoIHNlbGVjdG9yID09IG51bGwgP1xuXHRcdFx0dGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlciggc2VsZWN0b3IgKVxuXHRcdCk7XG5cdH1cbn0gKTtcblxuZnVuY3Rpb24gc2libGluZyggY3VyLCBkaXIgKSB7XG5cdHdoaWxlICggKCBjdXIgPSBjdXJbIGRpciBdICkgJiYgY3VyLm5vZGVUeXBlICE9PSAxICkge31cblx0cmV0dXJuIGN1cjtcbn1cblxualF1ZXJ5LmVhY2goIHtcblx0cGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7XG5cdH0sXG5cdHBhcmVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiICk7XG5cdH0sXG5cdHBhcmVudHNVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiwgdW50aWwgKTtcblx0fSxcblx0bmV4dDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuXHR9LFxuXHRuZXh0QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuXHR9LFxuXHRuZXh0VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0c2libGluZ3M6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggKCBlbGVtLnBhcmVudE5vZGUgfHwge30gKS5maXJzdENoaWxkLCBlbGVtICk7XG5cdH0sXG5cdGNoaWxkcmVuOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoIGVsZW0uZmlyc3RDaGlsZCApO1xuXHR9LFxuXHRjb250ZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0aWYgKCBlbGVtLmNvbnRlbnREb2N1bWVudCAhPSBudWxsICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExK1xuXHRcdFx0Ly8gPG9iamVjdD4gZWxlbWVudHMgd2l0aCBubyBgZGF0YWAgYXR0cmlidXRlIGhhcyBhbiBvYmplY3Rcblx0XHRcdC8vIGBjb250ZW50RG9jdW1lbnRgIHdpdGggYSBgbnVsbGAgcHJvdG90eXBlLlxuXHRcdFx0Z2V0UHJvdG8oIGVsZW0uY29udGVudERvY3VtZW50ICkgKSB7XG5cblx0XHRcdHJldHVybiBlbGVtLmNvbnRlbnREb2N1bWVudDtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seSwgaU9TIDcgb25seSwgQW5kcm9pZCBCcm93c2VyIDw9NC4zIG9ubHlcblx0XHQvLyBUcmVhdCB0aGUgdGVtcGxhdGUgZWxlbWVudCBhcyBhIHJlZ3VsYXIgb25lIGluIGJyb3dzZXJzIHRoYXRcblx0XHQvLyBkb24ndCBzdXBwb3J0IGl0LlxuXHRcdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGVtcGxhdGVcIiApICkge1xuXHRcdFx0ZWxlbSA9IGVsZW0uY29udGVudCB8fCBlbGVtO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTtcblx0fVxufSwgZnVuY3Rpb24oIG5hbWUsIGZuICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7XG5cdFx0dmFyIG1hdGNoZWQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTtcblxuXHRcdGlmICggbmFtZS5zbGljZSggLTUgKSAhPT0gXCJVbnRpbFwiICkge1xuXHRcdFx0c2VsZWN0b3IgPSB1bnRpbDtcblx0XHR9XG5cblx0XHRpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG1hdGNoZWQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgbWF0Y2hlZCApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5sZW5ndGggPiAxICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgZHVwbGljYXRlc1xuXHRcdFx0aWYgKCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdICkge1xuXHRcdFx0XHRqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXZlcnNlIG9yZGVyIGZvciBwYXJlbnRzKiBhbmQgcHJldi1kZXJpdmF0aXZlc1xuXHRcdFx0aWYgKCBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkge1xuXHRcdFx0XHRtYXRjaGVkLnJldmVyc2UoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQgKTtcblx0fTtcbn0gKTtcbnZhciBybm90aHRtbHdoaXRlID0gKCAvW15cXHgyMFxcdFxcclxcblxcZl0rL2cgKTtcblxuXG5cbi8vIENvbnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBvcHRpb25zIGludG8gT2JqZWN0LWZvcm1hdHRlZCBvbmVzXG5mdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkge1xuXHR2YXIgb2JqZWN0ID0ge307XG5cdGpRdWVyeS5lYWNoKCBvcHRpb25zLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkge1xuXHRcdG9iamVjdFsgZmxhZyBdID0gdHJ1ZTtcblx0fSApO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG4vKlxuICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gKlxuICpcdG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3dcbiAqXHRcdFx0dGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdFxuICpcbiAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlXG4gKiBcImZpcmVkXCIgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogUG9zc2libGUgb3B0aW9uczpcbiAqXG4gKlx0b25jZTpcdFx0XHR3aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdG1lbW9yeTpcdFx0XHR3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkXG4gKlx0XHRcdFx0XHRhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdpdGggdGhlIGxhdGVzdCBcIm1lbW9yaXplZFwiXG4gKlx0XHRcdFx0XHR2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0dW5pcXVlOlx0XHRcdHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KVxuICpcbiAqXHRzdG9wT25GYWxzZTpcdGludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICpcbiAqL1xualF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWRcblx0Ly8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KVxuXHRvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIgP1xuXHRcdGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSA6XG5cdFx0alF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTtcblxuXHR2YXIgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZpcmluZ1xuXHRcdGZpcmluZyxcblxuXHRcdC8vIExhc3QgZmlyZSB2YWx1ZSBmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzXG5cdFx0bWVtb3J5LFxuXG5cdFx0Ly8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFscmVhZHkgZmlyZWRcblx0XHRmaXJlZCxcblxuXHRcdC8vIEZsYWcgdG8gcHJldmVudCBmaXJpbmdcblx0XHRsb2NrZWQsXG5cblx0XHQvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdFxuXHRcdGxpc3QgPSBbXSxcblxuXHRcdC8vIFF1ZXVlIG9mIGV4ZWN1dGlvbiBkYXRhIGZvciByZXBlYXRhYmxlIGxpc3RzXG5cdFx0cXVldWUgPSBbXSxcblxuXHRcdC8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IGFkZC9yZW1vdmUgYXMgbmVlZGVkKVxuXHRcdGZpcmluZ0luZGV4ID0gLTEsXG5cblx0XHQvLyBGaXJlIGNhbGxiYWNrc1xuXHRcdGZpcmUgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5mb3JjZSBzaW5nbGUtZmlyaW5nXG5cdFx0XHRsb2NrZWQgPSBsb2NrZWQgfHwgb3B0aW9ucy5vbmNlO1xuXG5cdFx0XHQvLyBFeGVjdXRlIGNhbGxiYWNrcyBmb3IgYWxsIHBlbmRpbmcgZXhlY3V0aW9ucyxcblx0XHRcdC8vIHJlc3BlY3RpbmcgZmlyaW5nSW5kZXggb3ZlcnJpZGVzIGFuZCBydW50aW1lIGNoYW5nZXNcblx0XHRcdGZpcmVkID0gZmlyaW5nID0gdHJ1ZTtcblx0XHRcdGZvciAoIDsgcXVldWUubGVuZ3RoOyBmaXJpbmdJbmRleCA9IC0xICkge1xuXHRcdFx0XHRtZW1vcnkgPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0XHR3aGlsZSAoICsrZmlyaW5nSW5kZXggPCBsaXN0Lmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFJ1biBjYWxsYmFjayBhbmQgY2hlY2sgZm9yIGVhcmx5IHRlcm1pbmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBsaXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBtZW1vcnlbIDAgXSwgbWVtb3J5WyAxIF0gKSA9PT0gZmFsc2UgJiZcblx0XHRcdFx0XHRcdG9wdGlvbnMuc3RvcE9uRmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEp1bXAgdG8gZW5kIGFuZCBmb3JnZXQgdGhlIGRhdGEgc28gLmFkZCBkb2Vzbid0IHJlLWZpcmVcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yZ2V0IHRoZSBkYXRhIGlmIHdlJ3JlIGRvbmUgd2l0aCBpdFxuXHRcdFx0aWYgKCAhb3B0aW9ucy5tZW1vcnkgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRmaXJpbmcgPSBmYWxzZTtcblxuXHRcdFx0Ly8gQ2xlYW4gdXAgaWYgd2UncmUgZG9uZSBmaXJpbmcgZm9yIGdvb2Rcblx0XHRcdGlmICggbG9ja2VkICkge1xuXG5cdFx0XHRcdC8vIEtlZXAgYW4gZW1wdHkgbGlzdCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1dHVyZSBhZGQgY2FsbHNcblx0XHRcdFx0aWYgKCBtZW1vcnkgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgdGhpcyBvYmplY3QgaXMgc3BlbnRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsaXN0ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBBY3R1YWwgQ2FsbGJhY2tzIG9iamVjdFxuXHRcdHNlbGYgPSB7XG5cblx0XHRcdC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhlIGxpc3Rcblx0XHRcdGFkZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblxuXHRcdFx0XHRcdC8vIElmIHdlIGhhdmUgbWVtb3J5IGZyb20gYSBwYXN0IHJ1biwgd2Ugc2hvdWxkIGZpcmUgYWZ0ZXIgYWRkaW5nXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdFx0cXVldWUucHVzaCggbWVtb3J5ICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0KCBmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggYXJncywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdC5wdXNoKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIHRvVHlwZSggYXJnICkgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5XG5cdFx0XHRcdFx0XHRcdFx0YWRkKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdH0gKSggYXJndW1lbnRzICk7XG5cblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3Rcblx0XHRcdHJlbW92ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0dmFyIGluZGV4O1xuXHRcdFx0XHRcdHdoaWxlICggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0bGlzdC5zcGxpY2UoIGluZGV4LCAxICk7XG5cblx0XHRcdFx0XHRcdC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlc1xuXHRcdFx0XHRcdFx0aWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHtcblx0XHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXgtLTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDaGVjayBpZiBhIGdpdmVuIGNhbGxiYWNrIGlzIGluIHRoZSBsaXN0LlxuXHRcdFx0Ly8gSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHJldHVybiB3aGV0aGVyIG9yIG5vdCBsaXN0IGhhcyBjYWxsYmFja3MgYXR0YWNoZWQuXG5cdFx0XHRoYXM6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0cmV0dXJuIGZuID9cblx0XHRcdFx0XHRqUXVlcnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xIDpcblx0XHRcdFx0XHRsaXN0Lmxlbmd0aCA+IDA7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0XG5cdFx0XHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlIGFuZCAuYWRkXG5cdFx0XHQvLyBBYm9ydCBhbnkgY3VycmVudC9wZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdC8vIENsZWFyIGFsbCBjYWxsYmFja3MgYW5kIHZhbHVlc1xuXHRcdFx0ZGlzYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRkaXNhYmxlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhbGlzdDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmVcblx0XHRcdC8vIEFsc28gZGlzYWJsZSAuYWRkIHVubGVzcyB3ZSBoYXZlIG1lbW9yeSAoc2luY2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QpXG5cdFx0XHQvLyBBYm9ydCBhbnkgcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHRsb2NrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0aWYgKCAhbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0bG9ja2VkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhbG9ja2VkO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkge1xuXHRcdFx0XHRpZiAoICFsb2NrZWQgKSB7XG5cdFx0XHRcdFx0YXJncyA9IGFyZ3MgfHwgW107XG5cdFx0XHRcdFx0YXJncyA9IFsgY29udGV4dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBhcmdzICk7XG5cdFx0XHRcdFx0aWYgKCAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzXG5cdFx0XHRmaXJlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0c2VsZi5maXJlV2l0aCggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiB0aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlXG5cdFx0XHRmaXJlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWZpcmVkO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0cmV0dXJuIHNlbGY7XG59O1xuXG5cbmZ1bmN0aW9uIElkZW50aXR5KCB2ICkge1xuXHRyZXR1cm4gdjtcbn1cbmZ1bmN0aW9uIFRocm93ZXIoIGV4ICkge1xuXHR0aHJvdyBleDtcbn1cblxuZnVuY3Rpb24gYWRvcHRWYWx1ZSggdmFsdWUsIHJlc29sdmUsIHJlamVjdCwgbm9WYWx1ZSApIHtcblx0dmFyIG1ldGhvZDtcblxuXHR0cnkge1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIHByb21pc2UgYXNwZWN0IGZpcnN0IHRvIHByaXZpbGVnZSBzeW5jaHJvbm91cyBiZWhhdmlvclxuXHRcdGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS5wcm9taXNlICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSApLmRvbmUoIHJlc29sdmUgKS5mYWlsKCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIHRoZW5hYmxlc1xuXHRcdH0gZWxzZSBpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUudGhlbiApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUsIHJlc29sdmUsIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgbm9uLXRoZW5hYmxlc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvbnRyb2wgYHJlc29sdmVgIGFyZ3VtZW50cyBieSBsZXR0aW5nIEFycmF5I3NsaWNlIGNhc3QgYm9vbGVhbiBgbm9WYWx1ZWAgdG8gaW50ZWdlcjpcblx0XHRcdC8vICogZmFsc2U6IFsgdmFsdWUgXS5zbGljZSggMCApID0+IHJlc29sdmUoIHZhbHVlIClcblx0XHRcdC8vICogdHJ1ZTogWyB2YWx1ZSBdLnNsaWNlKCAxICkgPT4gcmVzb2x2ZSgpXG5cdFx0XHRyZXNvbHZlLmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXS5zbGljZSggbm9WYWx1ZSApICk7XG5cdFx0fVxuXG5cdC8vIEZvciBQcm9taXNlcy9BKywgY29udmVydCBleGNlcHRpb25zIGludG8gcmVqZWN0aW9uc1xuXHQvLyBTaW5jZSBqUXVlcnkud2hlbiBkb2Vzbid0IHVud3JhcCB0aGVuYWJsZXMsIHdlIGNhbiBza2lwIHRoZSBleHRyYSBjaGVja3MgYXBwZWFyaW5nIGluXG5cdC8vIERlZmVycmVkI3RoZW4gdG8gY29uZGl0aW9uYWxseSBzdXBwcmVzcyByZWplY3Rpb24uXG5cdH0gY2F0Y2ggKCB2YWx1ZSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIG9ubHlcblx0XHQvLyBTdHJpY3QgbW9kZSBmdW5jdGlvbnMgaW52b2tlZCB3aXRob3V0IC5jYWxsLy5hcHBseSBnZXQgZ2xvYmFsLW9iamVjdCBjb250ZXh0XG5cdFx0cmVqZWN0LmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXSApO1xuXHR9XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHREZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7XG5cdFx0dmFyIHR1cGxlcyA9IFtcblxuXHRcdFx0XHQvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgY2FsbGJhY2tzLFxuXHRcdFx0XHQvLyAuLi4gLnRoZW4gaGFuZGxlcnMsIGFyZ3VtZW50IGluZGV4LCBbZmluYWwgc3RhdGVdXG5cdFx0XHRcdFsgXCJub3RpZnlcIiwgXCJwcm9ncmVzc1wiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLCAyIF0sXG5cdFx0XHRcdFsgXCJyZXNvbHZlXCIsIFwiZG9uZVwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMCwgXCJyZXNvbHZlZFwiIF0sXG5cdFx0XHRcdFsgXCJyZWplY3RcIiwgXCJmYWlsXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAxLCBcInJlamVjdGVkXCIgXVxuXHRcdFx0XSxcblx0XHRcdHN0YXRlID0gXCJwZW5kaW5nXCIsXG5cdFx0XHRwcm9taXNlID0ge1xuXHRcdFx0XHRzdGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbHdheXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGRlZmVycmVkLmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImNhdGNoXCI6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJvbWlzZS50aGVuKCBudWxsLCBmbiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0cGlwZTogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkge1xuXHRcdFx0XHRcdHZhciBmbnMgPSBhcmd1bWVudHM7XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggX2ksIHR1cGxlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE1hcCB0dXBsZXMgKHByb2dyZXNzLCBkb25lLCBmYWlsKSB0byBhcmd1bWVudHMgKGRvbmUsIGZhaWwsIHByb2dyZXNzKVxuXHRcdFx0XHRcdFx0XHR2YXIgZm4gPSBpc0Z1bmN0aW9uKCBmbnNbIHR1cGxlWyA0IF0gXSApICYmIGZuc1sgdHVwbGVbIDQgXSBdO1xuXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLnByb2dyZXNzKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLm5vdGlmeSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5kb25lKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlc29sdmUgfSlcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQuZmFpbChmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZWplY3QgfSlcblx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAxIF0gXSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkID0gZm4gJiYgZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgJiYgaXNGdW5jdGlvbiggcmV0dXJuZWQucHJvbWlzZSApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQucHJvbWlzZSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5wcm9ncmVzcyggbmV3RGVmZXIubm90aWZ5IClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmRvbmUoIG5ld0RlZmVyLnJlc29sdmUgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZmFpbCggbmV3RGVmZXIucmVqZWN0ICk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXShcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm4gPyBbIHJldHVybmVkIF0gOiBhcmd1bWVudHNcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRmbnMgPSBudWxsO1xuXHRcdFx0XHRcdH0gKS5wcm9taXNlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoZW46IGZ1bmN0aW9uKCBvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgb25Qcm9ncmVzcyApIHtcblx0XHRcdFx0XHR2YXIgbWF4RGVwdGggPSAwO1xuXHRcdFx0XHRcdGZ1bmN0aW9uIHJlc29sdmUoIGRlcHRoLCBkZWZlcnJlZCwgaGFuZGxlciwgc3BlY2lhbCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBhcmd1bWVudHMsXG5cdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkLCB0aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuM1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElnbm9yZSBkb3VibGUtcmVzb2x1dGlvbiBhdHRlbXB0c1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCA8IG1heERlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkID0gaGFuZGxlci5hcHBseSggdGhhdCwgYXJncyApO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4xXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC00OFxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCA9PT0gZGVmZXJyZWQucHJvbWlzZSgpICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCBcIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvblwiICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb25zIDIuMy4zLjEsIDMuNVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTRcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTc1XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBSZXRyaWV2ZSBgdGhlbmAgb25seSBvbmNlXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGVuID0gcmV0dXJuZWQgJiZcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy40XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTY0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgY2hlY2sgb2JqZWN0cyBhbmQgZnVuY3Rpb25zIGZvciB0aGVuYWJpbGl0eVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoIHR5cGVvZiByZXR1cm5lZCA9PT0gXCJvYmplY3RcIiB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiByZXR1cm5lZCA9PT0gXCJmdW5jdGlvblwiICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQudGhlbjtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGEgcmV0dXJuZWQgdGhlbmFibGVcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhlbiApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgcHJvY2Vzc29ycyAobm90aWZ5KSBqdXN0IHdhaXQgZm9yIHJlc29sdXRpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBhbHNvIGhvb2sgaW50byBwcm9ncmVzc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIGRpc3JlZ2FyZCBvbGRlciByZXNvbHV0aW9uIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1heERlcHRoKys7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgVGhyb3dlciwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYWxsIG90aGVyIHJldHVybmVkIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IElkZW50aXR5ICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgcmV0dXJuZWQgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFByb2Nlc3MgdGhlIHZhbHVlKHMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERlZmF1bHQgcHJvY2VzcyBpcyByZXNvbHZlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggc3BlY2lhbCB8fCBkZWZlcnJlZC5yZXNvbHZlV2l0aCApKCB0aGF0LCBhcmdzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgbm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGNhdGNoIGFuZCByZWplY3QgZXhjZXB0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MgPSBzcGVjaWFsID9cblx0XHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3cgOlxuXHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayggZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5lcnJvciApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy40LjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02MVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIElnbm9yZSBwb3N0LXJlc29sdXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKyAxID49IG1heERlcHRoICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gVGhyb3dlciApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgZSBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCB0aGF0LCBhcmdzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4xXG5cdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU3XG5cdFx0XHRcdFx0XHRcdC8vIFJlLXJlc29sdmUgcHJvbWlzZXMgaW1tZWRpYXRlbHkgdG8gZG9kZ2UgZmFsc2UgcmVqZWN0aW9uIGZyb21cblx0XHRcdFx0XHRcdFx0Ly8gc3Vic2VxdWVudCBlcnJvcnNcblx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCApIHtcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzKCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDYWxsIGFuIG9wdGlvbmFsIGhvb2sgdG8gcmVjb3JkIHRoZSBlcnJvciwgaW4gY2FzZSBvZiBleGNlcHRpb25cblx0XHRcdFx0XHRcdFx0XHQvLyBzaW5jZSBpdCdzIG90aGVyd2lzZSBsb3N0IHdoZW4gZXhlY3V0aW9uIGdvZXMgYXN5bmNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5EZWZlcnJlZC5nZXRFcnJvckhvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLmVycm9yID0galF1ZXJ5LkRlZmVycmVkLmdldEVycm9ySG9vaygpO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVGhlIGRlcHJlY2F0ZWQgYWxpYXMgb2YgdGhlIGFib3ZlLiBXaGlsZSB0aGUgbmFtZSBzdWdnZXN0c1xuXHRcdFx0XHRcdFx0XHRcdC8vIHJldHVybmluZyB0aGUgc3RhY2ssIG5vdCBhbiBlcnJvciBpbnN0YW5jZSwgalF1ZXJ5IGp1c3QgcGFzc2VzXG5cdFx0XHRcdFx0XHRcdFx0Ly8gaXQgZGlyZWN0bHkgdG8gYGNvbnNvbGUud2FybmAgc28gYm90aCB3aWxsIHdvcms7IGFuIGluc3RhbmNlXG5cdFx0XHRcdFx0XHRcdFx0Ly8ganVzdCBiZXR0ZXIgY29vcGVyYXRlcyB3aXRoIHNvdXJjZSBtYXBzLlxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLmVycm9yID0galF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggcHJvY2VzcyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblxuXHRcdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblByb2dyZXNzICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25Qcm9ncmVzcyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlci5ub3RpZnlXaXRoXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDEgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uRnVsZmlsbGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25GdWxmaWxsZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHlcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAyIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblJlamVjdGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25SZWplY3RlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRUaHJvd2VyXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkXG5cdFx0XHRcdC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3Rcblx0XHRcdFx0cHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRcdFx0XHRyZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWZlcnJlZCA9IHt9O1xuXG5cdFx0Ly8gQWRkIGxpc3Qtc3BlY2lmaWMgbWV0aG9kc1xuXHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHtcblx0XHRcdHZhciBsaXN0ID0gdHVwbGVbIDIgXSxcblx0XHRcdFx0c3RhdGVTdHJpbmcgPSB0dXBsZVsgNSBdO1xuXG5cdFx0XHQvLyBwcm9taXNlLnByb2dyZXNzID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZG9uZSA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmZhaWwgPSBsaXN0LmFkZFxuXHRcdFx0cHJvbWlzZVsgdHVwbGVbIDEgXSBdID0gbGlzdC5hZGQ7XG5cblx0XHRcdC8vIEhhbmRsZSBzdGF0ZVxuXHRcdFx0aWYgKCBzdGF0ZVN0cmluZyApIHtcblx0XHRcdFx0bGlzdC5hZGQoXG5cdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZXNvbHZlZFwiIChpLmUuLCBmdWxmaWxsZWQpXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVqZWN0ZWRcIlxuXHRcdFx0XHRcdFx0c3RhdGUgPSBzdGF0ZVN0cmluZztcblx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDIgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAzIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2NhbGxiYWNrcy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDIgXS5sb2NrLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0ubG9ja1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5maXJlXG5cdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0bGlzdC5hZGQoIHR1cGxlWyAzIF0uZmlyZSApO1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnkgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQubm90aWZ5V2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmUgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVzb2x2ZVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3QgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVqZWN0V2l0aCguLi4pIH1cblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IHVuZGVmaW5lZCA6IHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH07XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlV2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdFdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0gPSBsaXN0LmZpcmVXaXRoO1xuXHRcdH0gKTtcblxuXHRcdC8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZVxuXHRcdHByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTtcblxuXHRcdC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnlcblx0XHRpZiAoIGZ1bmMgKSB7XG5cdFx0XHRmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCApO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBkb25lIVxuXHRcdHJldHVybiBkZWZlcnJlZDtcblx0fSxcblxuXHQvLyBEZWZlcnJlZCBoZWxwZXJcblx0d2hlbjogZnVuY3Rpb24oIHNpbmdsZVZhbHVlICkge1xuXHRcdHZhclxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXNcblx0XHRcdHJlbWFpbmluZyA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cblx0XHRcdC8vIGNvdW50IG9mIHVucHJvY2Vzc2VkIGFyZ3VtZW50c1xuXHRcdFx0aSA9IHJlbWFpbmluZyxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgZnVsZmlsbG1lbnQgZGF0YVxuXHRcdFx0cmVzb2x2ZUNvbnRleHRzID0gQXJyYXkoIGkgKSxcblx0XHRcdHJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSxcblxuXHRcdFx0Ly8gdGhlIHByaW1hcnkgRGVmZXJyZWRcblx0XHRcdHByaW1hcnkgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgY2FsbGJhY2sgZmFjdG9yeVxuXHRcdFx0dXBkYXRlRnVuYyA9IGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJlc29sdmVDb250ZXh0c1sgaSBdID0gdGhpcztcblx0XHRcdFx0XHRyZXNvbHZlVmFsdWVzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApIDogdmFsdWU7XG5cdFx0XHRcdFx0aWYgKCAhKCAtLXJlbWFpbmluZyApICkge1xuXHRcdFx0XHRcdFx0cHJpbWFyeS5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblxuXHRcdC8vIFNpbmdsZS0gYW5kIGVtcHR5IGFyZ3VtZW50cyBhcmUgYWRvcHRlZCBsaWtlIFByb21pc2UucmVzb2x2ZVxuXHRcdGlmICggcmVtYWluaW5nIDw9IDEgKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCBzaW5nbGVWYWx1ZSwgcHJpbWFyeS5kb25lKCB1cGRhdGVGdW5jKCBpICkgKS5yZXNvbHZlLCBwcmltYXJ5LnJlamVjdCxcblx0XHRcdFx0IXJlbWFpbmluZyApO1xuXG5cdFx0XHQvLyBVc2UgLnRoZW4oKSB0byB1bndyYXAgc2Vjb25kYXJ5IHRoZW5hYmxlcyAoY2YuIGdoLTMwMDApXG5cdFx0XHRpZiAoIHByaW1hcnkuc3RhdGUoKSA9PT0gXCJwZW5kaW5nXCIgfHxcblx0XHRcdFx0aXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIHJlc29sdmVWYWx1ZXNbIGkgXS50aGVuICkgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHByaW1hcnkudGhlbigpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGFyZ3VtZW50cyBhcmUgYWdncmVnYXRlZCBsaWtlIFByb21pc2UuYWxsIGFycmF5IGVsZW1lbnRzXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCByZXNvbHZlVmFsdWVzWyBpIF0sIHVwZGF0ZUZ1bmMoIGkgKSwgcHJpbWFyeS5yZWplY3QgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJpbWFyeS5wcm9taXNlKCk7XG5cdH1cbn0gKTtcblxuXG4vLyBUaGVzZSB1c3VhbGx5IGluZGljYXRlIGEgcHJvZ3JhbW1lciBtaXN0YWtlIGR1cmluZyBkZXZlbG9wbWVudCxcbi8vIHdhcm4gYWJvdXQgdGhlbSBBU0FQIHJhdGhlciB0aGFuIHN3YWxsb3dpbmcgdGhlbSBieSBkZWZhdWx0LlxudmFyIHJlcnJvck5hbWVzID0gL14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC87XG5cbi8vIElmIGBqUXVlcnkuRGVmZXJyZWQuZ2V0RXJyb3JIb29rYCBpcyBkZWZpbmVkLCBgYXN5bmNFcnJvcmAgaXMgYW4gZXJyb3Jcbi8vIGNhcHR1cmVkIGJlZm9yZSB0aGUgYXN5bmMgYmFycmllciB0byBnZXQgdGhlIG9yaWdpbmFsIGVycm9yIGNhdXNlXG4vLyB3aGljaCBtYXkgb3RoZXJ3aXNlIGJlIGhpZGRlbi5cbmpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rID0gZnVuY3Rpb24oIGVycm9yLCBhc3luY0Vycm9yICkge1xuXG5cdC8vIFN1cHBvcnQ6IElFIDggLSA5IG9ubHlcblx0Ly8gQ29uc29sZSBleGlzdHMgd2hlbiBkZXYgdG9vbHMgYXJlIG9wZW4sIHdoaWNoIGNhbiBoYXBwZW4gYXQgYW55IHRpbWVcblx0aWYgKCB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS53YXJuICYmIGVycm9yICYmIHJlcnJvck5hbWVzLnRlc3QoIGVycm9yLm5hbWUgKSApIHtcblx0XHR3aW5kb3cuY29uc29sZS53YXJuKCBcImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246IFwiICsgZXJyb3IubWVzc2FnZSxcblx0XHRcdGVycm9yLnN0YWNrLCBhc3luY0Vycm9yICk7XG5cdH1cbn07XG5cblxuXG5cbmpRdWVyeS5yZWFkeUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKCBlcnJvciApIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdHRocm93IGVycm9yO1xuXHR9ICk7XG59O1xuXG5cblxuXG4vLyBUaGUgZGVmZXJyZWQgdXNlZCBvbiBET00gcmVhZHlcbnZhciByZWFkeUxpc3QgPSBqUXVlcnkuRGVmZXJyZWQoKTtcblxualF1ZXJ5LmZuLnJlYWR5ID0gZnVuY3Rpb24oIGZuICkge1xuXG5cdHJlYWR5TGlzdFxuXHRcdC50aGVuKCBmbiApXG5cblx0XHQvLyBXcmFwIGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiBpbiBhIGZ1bmN0aW9uIHNvIHRoYXQgdGhlIGxvb2t1cFxuXHRcdC8vIGhhcHBlbnMgYXQgdGhlIHRpbWUgb2YgZXJyb3IgaGFuZGxpbmcgaW5zdGVhZCBvZiBjYWxsYmFja1xuXHRcdC8vIHJlZ2lzdHJhdGlvbi5cblx0XHQuY2F0Y2goIGZ1bmN0aW9uKCBlcnJvciApIHtcblx0XHRcdGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiggZXJyb3IgKTtcblx0XHR9ICk7XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gSXMgdGhlIERPTSByZWFkeSB0byBiZSB1c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9jY3Vycy5cblx0aXNSZWFkeTogZmFsc2UsXG5cblx0Ly8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJlZm9yZVxuXHQvLyB0aGUgcmVhZHkgZXZlbnQgZmlyZXMuIFNlZSB0cmFjLTY3ODFcblx0cmVhZHlXYWl0OiAxLFxuXG5cdC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHlcblx0cmVhZHk6IGZ1bmN0aW9uKCB3YWl0ICkge1xuXG5cdFx0Ly8gQWJvcnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeVxuXHRcdGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeVxuXHRcdGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTtcblxuXHRcdC8vIElmIGEgbm9ybWFsIERPTSBSZWFkeSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlXG5cdFx0aWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZVxuXHRcdHJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkucmVhZHkudGhlbiA9IHJlYWR5TGlzdC50aGVuO1xuXG4vLyBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlciBhbmQgc2VsZiBjbGVhbnVwIG1ldGhvZFxuZnVuY3Rpb24gY29tcGxldGVkKCkge1xuXHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG5cdGpRdWVyeS5yZWFkeSgpO1xufVxuXG4vLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZFxuLy8gYWZ0ZXIgdGhlIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMCBvbmx5XG4vLyBPbGRlciBJRSBzb21ldGltZXMgc2lnbmFscyBcImludGVyYWN0aXZlXCIgdG9vIHNvb25cbmlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiIHx8XG5cdCggZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gXCJsb2FkaW5nXCIgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCApICkge1xuXG5cdC8vIEhhbmRsZSBpdCBhc3luY2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFkeVxuXHR3aW5kb3cuc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7XG5cbn0gZWxzZSB7XG5cblx0Ly8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFja1xuXHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cblx0Ly8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcbn1cblxuXG5cblxuLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1ZXMgb2YgYSBjb2xsZWN0aW9uXG4vLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb25cbnZhciBhY2Nlc3MgPSBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBlbGVtcy5sZW5ndGgsXG5cdFx0YnVsayA9IGtleSA9PSBudWxsO1xuXG5cdC8vIFNldHMgbWFueSB2YWx1ZXNcblx0aWYgKCB0b1R5cGUoIGtleSApID09PSBcIm9iamVjdFwiICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cdFx0Zm9yICggaSBpbiBrZXkgKSB7XG5cdFx0XHRhY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5WyBpIF0sIHRydWUsIGVtcHR5R2V0LCByYXcgKTtcblx0XHR9XG5cblx0Ly8gU2V0cyBvbmUgdmFsdWVcblx0fSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXG5cdFx0aWYgKCAhaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJhdyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBidWxrICkge1xuXG5cdFx0XHQvLyBCdWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXRcblx0XHRcdGlmICggcmF3ICkge1xuXHRcdFx0XHRmbi5jYWxsKCBlbGVtcywgdmFsdWUgKTtcblx0XHRcdFx0Zm4gPSBudWxsO1xuXG5cdFx0XHQvLyAuLi5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWxrID0gZm47XG5cdFx0XHRcdGZuID0gZnVuY3Rpb24oIGVsZW0sIF9rZXksIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiBidWxrLmNhbGwoIGpRdWVyeSggZWxlbSApLCB2YWx1ZSApO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggZm4gKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0Zm4oXG5cdFx0XHRcdFx0ZWxlbXNbIGkgXSwga2V5LCByYXcgP1xuXHRcdFx0XHRcdFx0dmFsdWUgOlxuXHRcdFx0XHRcdFx0dmFsdWUuY2FsbCggZWxlbXNbIGkgXSwgaSwgZm4oIGVsZW1zWyBpIF0sIGtleSApIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIGNoYWluYWJsZSApIHtcblx0XHRyZXR1cm4gZWxlbXM7XG5cdH1cblxuXHQvLyBHZXRzXG5cdGlmICggYnVsayApIHtcblx0XHRyZXR1cm4gZm4uY2FsbCggZWxlbXMgKTtcblx0fVxuXG5cdHJldHVybiBsZW4gPyBmbiggZWxlbXNbIDAgXSwga2V5ICkgOiBlbXB0eUdldDtcbn07XG5cblxuLy8gTWF0Y2hlcyBkYXNoZWQgc3RyaW5nIGZvciBjYW1lbGl6aW5nXG52YXIgcm1zUHJlZml4ID0gL14tbXMtLyxcblx0cmRhc2hBbHBoYSA9IC8tKFthLXpdKS9nO1xuXG4vLyBVc2VkIGJ5IGNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKClcbmZ1bmN0aW9uIGZjYW1lbENhc2UoIF9hbGwsIGxldHRlciApIHtcblx0cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO1xufVxuXG4vLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG4vLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAodHJhYy05NTcyKVxuZnVuY3Rpb24gY2FtZWxDYXNlKCBzdHJpbmcgKSB7XG5cdHJldHVybiBzdHJpbmcucmVwbGFjZSggcm1zUHJlZml4LCBcIm1zLVwiICkucmVwbGFjZSggcmRhc2hBbHBoYSwgZmNhbWVsQ2FzZSApO1xufVxudmFyIGFjY2VwdERhdGEgPSBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0Ly8gQWNjZXB0cyBvbmx5OlxuXHQvLyAgLSBOb2RlXG5cdC8vICAgIC0gTm9kZS5FTEVNRU5UX05PREVcblx0Ly8gICAgLSBOb2RlLkRPQ1VNRU5UX05PREVcblx0Ly8gIC0gT2JqZWN0XG5cdC8vICAgIC0gQW55XG5cdHJldHVybiBvd25lci5ub2RlVHlwZSA9PT0gMSB8fCBvd25lci5ub2RlVHlwZSA9PT0gOSB8fCAhKCArb3duZXIubm9kZVR5cGUgKTtcbn07XG5cblxuXG5cbmZ1bmN0aW9uIERhdGEoKSB7XG5cdHRoaXMuZXhwYW5kbyA9IGpRdWVyeS5leHBhbmRvICsgRGF0YS51aWQrKztcbn1cblxuRGF0YS51aWQgPSAxO1xuXG5EYXRhLnByb3RvdHlwZSA9IHtcblxuXHRjYWNoZTogZnVuY3Rpb24oIG93bmVyICkge1xuXG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIG93bmVyIG9iamVjdCBhbHJlYWR5IGhhcyBhIGNhY2hlXG5cdFx0dmFyIHZhbHVlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0Ly8gSWYgbm90LCBjcmVhdGUgb25lXG5cdFx0aWYgKCAhdmFsdWUgKSB7XG5cdFx0XHR2YWx1ZSA9IHt9O1xuXG5cdFx0XHQvLyBXZSBjYW4gYWNjZXB0IGRhdGEgZm9yIG5vbi1lbGVtZW50IG5vZGVzIGluIG1vZGVybiBicm93c2Vycyxcblx0XHRcdC8vIGJ1dCB3ZSBzaG91bGQgbm90LCBzZWUgdHJhYy04MzM1LlxuXHRcdFx0Ly8gQWx3YXlzIHJldHVybiBhbiBlbXB0eSBvYmplY3QuXG5cdFx0XHRpZiAoIGFjY2VwdERhdGEoIG93bmVyICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgaXQgaXMgYSBub2RlIHVubGlrZWx5IHRvIGJlIHN0cmluZ2lmeS1lZCBvciBsb29wZWQgb3ZlclxuXHRcdFx0XHQvLyB1c2UgcGxhaW4gYXNzaWdubWVudFxuXHRcdFx0XHRpZiAoIG93bmVyLm5vZGVUeXBlICkge1xuXHRcdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHZhbHVlO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBzZWN1cmUgaXQgaW4gYSBub24tZW51bWVyYWJsZSBwcm9wZXJ0eVxuXHRcdFx0XHQvLyBjb25maWd1cmFibGUgbXVzdCBiZSB0cnVlIHRvIGFsbG93IHRoZSBwcm9wZXJ0eSB0byBiZVxuXHRcdFx0XHQvLyBkZWxldGVkIHdoZW4gZGF0YSBpcyByZW1vdmVkXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBvd25lciwgdGhpcy5leHBhbmRvLCB7XG5cdFx0XHRcdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWVcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24oIG93bmVyLCBkYXRhLCB2YWx1ZSApIHtcblx0XHR2YXIgcHJvcCxcblx0XHRcdGNhY2hlID0gdGhpcy5jYWNoZSggb3duZXIgKTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwga2V5LCB2YWx1ZSBdIGFyZ3Ncblx0XHQvLyBBbHdheXMgdXNlIGNhbWVsQ2FzZSBrZXkgKGdoLTIyNTcpXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGNhY2hlWyBjYW1lbENhc2UoIGRhdGEgKSBdID0gdmFsdWU7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIHsgcHJvcGVydGllcyB9IF0gYXJnc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvcHkgdGhlIHByb3BlcnRpZXMgb25lLWJ5LW9uZSB0byB0aGUgY2FjaGUgb2JqZWN0XG5cdFx0XHRmb3IgKCBwcm9wIGluIGRhdGEgKSB7XG5cdFx0XHRcdGNhY2hlWyBjYW1lbENhc2UoIHByb3AgKSBdID0gZGF0YVsgcHJvcCBdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY2FjaGU7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XG5cdFx0cmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMuY2FjaGUoIG93bmVyICkgOlxuXG5cdFx0XHQvLyBBbHdheXMgdXNlIGNhbWVsQ2FzZSBrZXkgKGdoLTIyNTcpXG5cdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gJiYgb3duZXJbIHRoaXMuZXhwYW5kbyBdWyBjYW1lbENhc2UoIGtleSApIF07XG5cdH0sXG5cdGFjY2VzczogZnVuY3Rpb24oIG93bmVyLCBrZXksIHZhbHVlICkge1xuXG5cdFx0Ly8gSW4gY2FzZXMgd2hlcmUgZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBObyBrZXkgd2FzIHNwZWNpZmllZFxuXHRcdC8vICAgMi4gQSBzdHJpbmcga2V5IHdhcyBzcGVjaWZpZWQsIGJ1dCBubyB2YWx1ZSBwcm92aWRlZFxuXHRcdC8vXG5cdFx0Ly8gVGFrZSB0aGUgXCJyZWFkXCIgcGF0aCBhbmQgYWxsb3cgdGhlIGdldCBtZXRob2QgdG8gZGV0ZXJtaW5lXG5cdFx0Ly8gd2hpY2ggdmFsdWUgdG8gcmV0dXJuLCByZXNwZWN0aXZlbHkgZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBUaGUgZW50aXJlIGNhY2hlIG9iamVjdFxuXHRcdC8vICAgMi4gVGhlIGRhdGEgc3RvcmVkIGF0IHRoZSBrZXlcblx0XHQvL1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0KCAoIGtleSAmJiB0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiICkgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApICkge1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXQoIG93bmVyLCBrZXkgKTtcblx0XHR9XG5cblx0XHQvLyBXaGVuIHRoZSBrZXkgaXMgbm90IGEgc3RyaW5nLCBvciBib3RoIGEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vIGFyZSBzcGVjaWZpZWQsIHNldCBvciBleHRlbmQgKGV4aXN0aW5nIG9iamVjdHMpIHdpdGggZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBBbiBvYmplY3Qgb2YgcHJvcGVydGllc1xuXHRcdC8vICAgMi4gQSBrZXkgYW5kIHZhbHVlXG5cdFx0Ly9cblx0XHR0aGlzLnNldCggb3duZXIsIGtleSwgdmFsdWUgKTtcblxuXHRcdC8vIFNpbmNlIHRoZSBcInNldFwiIHBhdGggY2FuIGhhdmUgdHdvIHBvc3NpYmxlIGVudHJ5IHBvaW50c1xuXHRcdC8vIHJldHVybiB0aGUgZXhwZWN0ZWQgZGF0YSBiYXNlZCBvbiB3aGljaCBwYXRoIHdhcyB0YWtlblsqXVxuXHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiBrZXk7XG5cdH0sXG5cdHJlbW92ZTogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XG5cdFx0dmFyIGksXG5cdFx0XHRjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblxuXHRcdGlmICggY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIGtleSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0IGFycmF5IG9yIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgb2Yga2V5c1xuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBrZXkgKSApIHtcblxuXHRcdFx0XHQvLyBJZiBrZXkgaXMgYW4gYXJyYXkgb2Yga2V5cy4uLlxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc2V0IGNhbWVsQ2FzZSBrZXlzLCBzbyByZW1vdmUgdGhhdC5cblx0XHRcdFx0a2V5ID0ga2V5Lm1hcCggY2FtZWxDYXNlICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRrZXkgPSBjYW1lbENhc2UoIGtleSApO1xuXG5cdFx0XHRcdC8vIElmIGEga2V5IHdpdGggdGhlIHNwYWNlcyBleGlzdHMsIHVzZSBpdC5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBjcmVhdGUgYW4gYXJyYXkgYnkgbWF0Y2hpbmcgbm9uLXdoaXRlc3BhY2Vcblx0XHRcdFx0a2V5ID0ga2V5IGluIGNhY2hlID9cblx0XHRcdFx0XHRbIGtleSBdIDpcblx0XHRcdFx0XHQoIGtleS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdICk7XG5cdFx0XHR9XG5cblx0XHRcdGkgPSBrZXkubGVuZ3RoO1xuXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlbIGkgXSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiB0aGVyZSdzIG5vIG1vcmUgZGF0YVxuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgfHwgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICkgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDVcblx0XHRcdC8vIFdlYmtpdCAmIEJsaW5rIHBlcmZvcm1hbmNlIHN1ZmZlcnMgd2hlbiBkZWxldGluZyBwcm9wZXJ0aWVzXG5cdFx0XHQvLyBmcm9tIERPTSBub2Rlcywgc28gc2V0IHRvIHVuZGVmaW5lZCBpbnN0ZWFkXG5cdFx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNzg2MDcgKGJ1ZyByZXN0cmljdGVkKVxuXHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVsZXRlIG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBvd25lciApIHtcblx0XHR2YXIgY2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0cmV0dXJuIGNhY2hlICE9PSB1bmRlZmluZWQgJiYgIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApO1xuXHR9XG59O1xudmFyIGRhdGFQcml2ID0gbmV3IERhdGEoKTtcblxudmFyIGRhdGFVc2VyID0gbmV3IERhdGEoKTtcblxuXG5cbi8vXHRJbXBsZW1lbnRhdGlvbiBTdW1tYXJ5XG4vL1xuLy9cdDEuIEVuZm9yY2UgQVBJIHN1cmZhY2UgYW5kIHNlbWFudGljIGNvbXBhdGliaWxpdHkgd2l0aCAxLjkueCBicmFuY2hcbi8vXHQyLiBJbXByb3ZlIHRoZSBtb2R1bGUncyBtYWludGFpbmFiaWxpdHkgYnkgcmVkdWNpbmcgdGhlIHN0b3JhZ2Vcbi8vXHRcdHBhdGhzIHRvIGEgc2luZ2xlIG1lY2hhbmlzbS5cbi8vXHQzLiBVc2UgdGhlIHNhbWUgc2luZ2xlIG1lY2hhbmlzbSB0byBzdXBwb3J0IFwicHJpdmF0ZVwiIGFuZCBcInVzZXJcIiBkYXRhLlxuLy9cdDQuIF9OZXZlcl8gZXhwb3NlIFwicHJpdmF0ZVwiIGRhdGEgdG8gdXNlciBjb2RlIChUT0RPOiBEcm9wIF9kYXRhLCBfcmVtb3ZlRGF0YSlcbi8vXHQ1LiBBdm9pZCBleHBvc2luZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9uIHVzZXIgb2JqZWN0cyAoZWcuIGV4cGFuZG8gcHJvcGVydGllcylcbi8vXHQ2LiBQcm92aWRlIGEgY2xlYXIgcGF0aCBmb3IgaW1wbGVtZW50YXRpb24gdXBncmFkZSB0byBXZWFrTWFwIGluIDIwMTRcblxudmFyIHJicmFjZSA9IC9eKD86XFx7W1xcd1xcV10qXFx9fFxcW1tcXHdcXFddKlxcXSkkLyxcblx0cm11bHRpRGFzaCA9IC9bQS1aXS9nO1xuXG5mdW5jdGlvbiBnZXREYXRhKCBkYXRhICkge1xuXHRpZiAoIGRhdGEgPT09IFwidHJ1ZVwiICkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aWYgKCBkYXRhID09PSBcImZhbHNlXCIgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aWYgKCBkYXRhID09PSBcIm51bGxcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIE9ubHkgY29udmVydCB0byBhIG51bWJlciBpZiBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgc3RyaW5nXG5cdGlmICggZGF0YSA9PT0gK2RhdGEgKyBcIlwiICkge1xuXHRcdHJldHVybiArZGF0YTtcblx0fVxuXG5cdGlmICggcmJyYWNlLnRlc3QoIGRhdGEgKSApIHtcblx0XHRyZXR1cm4gSlNPTi5wYXJzZSggZGF0YSApO1xuXHR9XG5cblx0cmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEgKSB7XG5cdHZhciBuYW1lO1xuXG5cdC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRyeSB0byBmZXRjaCBhbnlcblx0Ly8gZGF0YSBmcm9tIHRoZSBIVE1MNSBkYXRhLSogYXR0cmlidXRlXG5cdGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0bmFtZSA9IFwiZGF0YS1cIiArIGtleS5yZXBsYWNlKCBybXVsdGlEYXNoLCBcIi0kJlwiICkudG9Mb3dlckNhc2UoKTtcblx0XHRkYXRhID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTtcblxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRkYXRhID0gZ2V0RGF0YSggZGF0YSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXG5cdFx0XHQvLyBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlzbid0IGNoYW5nZWQgbGF0ZXJcblx0XHRcdGRhdGFVc2VyLnNldCggZWxlbSwga2V5LCBkYXRhICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkYXRhO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkYXRhVXNlci5oYXNEYXRhKCBlbGVtICkgfHwgZGF0YVByaXYuaGFzRGF0YSggZWxlbSApO1xuXHR9LFxuXG5cdGRhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkge1xuXHRcdHJldHVybiBkYXRhVXNlci5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRkYXRhVXNlci5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcblx0fSxcblxuXHQvLyBUT0RPOiBOb3cgdGhhdCBhbGwgY2FsbHMgdG8gX2RhdGEgYW5kIF9yZW1vdmVEYXRhIGhhdmUgYmVlbiByZXBsYWNlZFxuXHQvLyB3aXRoIGRpcmVjdCBjYWxscyB0byBkYXRhUHJpdiBtZXRob2RzLCB0aGVzZSBjYW4gYmUgZGVwcmVjYXRlZC5cblx0X2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkge1xuXHRcdHJldHVybiBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRfcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHR2YXIgaSwgbmFtZSwgZGF0YSxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRhdHRycyA9IGVsZW0gJiYgZWxlbS5hdHRyaWJ1dGVzO1xuXG5cdFx0Ly8gR2V0cyBhbGwgdmFsdWVzXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggdGhpcy5sZW5ndGggKSB7XG5cdFx0XHRcdGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0gKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWRhdGFQcml2LmdldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiApICkge1xuXHRcdFx0XHRcdGkgPSBhdHRycy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdFx0XHRcdC8vIFRoZSBhdHRycyBlbGVtZW50cyBjYW4gYmUgbnVsbCAodHJhYy0xNDg5NClcblx0XHRcdFx0XHRcdGlmICggYXR0cnNbIGkgXSApIHtcblx0XHRcdFx0XHRcdFx0bmFtZSA9IGF0dHJzWyBpIF0ubmFtZTtcblx0XHRcdFx0XHRcdFx0aWYgKCBuYW1lLmluZGV4T2YoIFwiZGF0YS1cIiApID09PSAwICkge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBjYW1lbENhc2UoIG5hbWUuc2xpY2UoIDUgKSApO1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHQvLyBTZXRzIG11bHRpcGxlIHZhbHVlc1xuXHRcdGlmICggdHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBkYXRhO1xuXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxuXHRcdFx0Ly8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGVcblx0XHRcdC8vIGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2JqZWN0XG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXG5cdFx0XHQvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLlxuXHRcdFx0aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZVxuXHRcdFx0XHQvLyBUaGUga2V5IHdpbGwgYWx3YXlzIGJlIGNhbWVsQ2FzZWQgaW4gRGF0YVxuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIFwiZGlzY292ZXJcIiB0aGUgZGF0YSBpblxuXHRcdFx0XHQvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzXG5cdFx0XHRcdGRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0LlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCB0aGUgZGF0YS4uLlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc3RvcmUgdGhlIGNhbWVsQ2FzZWQga2V5XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApO1xuXHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBxdWV1ZTtcblxuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHR5cGUgPSAoIHR5cGUgfHwgXCJmeFwiICkgKyBcInF1ZXVlXCI7XG5cdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHQvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwXG5cdFx0XHRpZiAoIGRhdGEgKSB7XG5cdFx0XHRcdGlmICggIXF1ZXVlIHx8IEFycmF5LmlzQXJyYXkoIGRhdGEgKSApIHtcblx0XHRcdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cXVldWUucHVzaCggZGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcXVldWUgfHwgW107XG5cdFx0fVxuXHR9LFxuXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLFxuXHRcdFx0c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsXG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCksXG5cdFx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLFxuXHRcdFx0bmV4dCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApO1xuXHRcdFx0fTtcblxuXHRcdC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWxcblx0XHRpZiAoIGZuID09PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdHN0YXJ0TGVuZ3RoLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblxuXHRcdFx0Ly8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZ1xuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBkZXF1ZXVlZFxuXHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgKSB7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb25cblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0Zm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTtcblx0XHR9XG5cblx0XHRpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmVcblx0X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHZhciBrZXkgPSB0eXBlICsgXCJxdWV1ZUhvb2tzXCI7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHtcblx0XHRcdGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKS5hZGQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArIFwicXVldWVcIiwga2V5IF0gKTtcblx0XHRcdH0gKVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgc2V0dGVyID0gMjtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRkYXRhID0gdHlwZTtcblx0XHRcdHR5cGUgPSBcImZ4XCI7XG5cdFx0XHRzZXR0ZXItLTtcblx0XHR9XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMgOlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWVcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgJiYgcXVldWVbIDAgXSAhPT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHR9LFxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0fSApO1xuXHR9LFxuXHRjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdH0sXG5cblx0Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZVxuXHQvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdClcblx0cHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHtcblx0XHR2YXIgdG1wLFxuXHRcdFx0Y291bnQgPSAxLFxuXHRcdFx0ZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGVsZW1lbnRzID0gdGhpcyxcblx0XHRcdGkgPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJlc29sdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhKCAtLWNvdW50ICkgKSB7XG5cdFx0XHRcdFx0ZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRvYmogPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyBcInF1ZXVlSG9va3NcIiApO1xuXHRcdFx0aWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJlc29sdmUoKTtcblx0XHRyZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7XG5cdH1cbn0gKTtcbnZhciBwbnVtID0gKCAvWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLyApLnNvdXJjZTtcblxudmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhwKCBcIl4oPzooWystXSk9fCkoXCIgKyBwbnVtICsgXCIpKFthLXolXSopJFwiLCBcImlcIiApO1xuXG5cbnZhciBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXTtcblxudmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuXG5cblx0dmFyIGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXHRcdH0sXG5cdFx0Y29tcG9zZWQgPSB7IGNvbXBvc2VkOiB0cnVlIH07XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4KywgaU9TIDEwLjAgLSAxMC4yIG9ubHlcblx0Ly8gQ2hlY2sgYXR0YWNobWVudCBhY3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyaWVzIHdoZW4gcG9zc2libGUgKGdoLTM1MDQpXG5cdC8vIFN1cHBvcnQ6IGlPUyAxMC4wLTEwLjIgb25seVxuXHQvLyBFYXJseSBpT1MgMTAgdmVyc2lvbnMgc3VwcG9ydCBgYXR0YWNoU2hhZG93YCBidXQgbm90IGBnZXRSb290Tm9kZWAsXG5cdC8vIGxlYWRpbmcgdG8gZXJyb3JzLiBXZSBuZWVkIHRvIGNoZWNrIGZvciBgZ2V0Um9vdE5vZGVgLlxuXHRpZiAoIGRvY3VtZW50RWxlbWVudC5nZXRSb290Tm9kZSApIHtcblx0XHRpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSB8fFxuXHRcdFx0XHRlbGVtLmdldFJvb3ROb2RlKCBjb21wb3NlZCApID09PSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0fTtcblx0fVxudmFyIGlzSGlkZGVuV2l0aGluVHJlZSA9IGZ1bmN0aW9uKCBlbGVtLCBlbCApIHtcblxuXHRcdC8vIGlzSGlkZGVuV2l0aGluVHJlZSBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uO1xuXHRcdC8vIGluIHRoYXQgY2FzZSwgZWxlbWVudCB3aWxsIGJlIHNlY29uZCBhcmd1bWVudFxuXHRcdGVsZW0gPSBlbCB8fCBlbGVtO1xuXG5cdFx0Ly8gSW5saW5lIHN0eWxlIHRydW1wcyBhbGxcblx0XHRyZXR1cm4gZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIiB8fFxuXHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmXG5cblx0XHRcdC8vIE90aGVyd2lzZSwgY2hlY2sgY29tcHV0ZWQgc3R5bGVcblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MyAtIDQ1XG5cdFx0XHQvLyBEaXNjb25uZWN0ZWQgZWxlbWVudHMgY2FuIGhhdmUgY29tcHV0ZWQgZGlzcGxheTogbm9uZSwgc28gZmlyc3QgY29uZmlybSB0aGF0IGVsZW0gaXNcblx0XHRcdC8vIGluIHRoZSBkb2N1bWVudC5cblx0XHRcdGlzQXR0YWNoZWQoIGVsZW0gKSAmJlxuXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApID09PSBcIm5vbmVcIjtcblx0fTtcblxuXG5cbmZ1bmN0aW9uIGFkanVzdENTUyggZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7XG5cdHZhciBhZGp1c3RlZCwgc2NhbGUsXG5cdFx0bWF4SXRlcmF0aW9ucyA9IDIwLFxuXHRcdGN1cnJlbnRWYWx1ZSA9IHR3ZWVuID9cblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uY3VyKCk7XG5cdFx0XHR9IDpcblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgcHJvcCwgXCJcIiApO1xuXHRcdFx0fSxcblx0XHRpbml0aWFsID0gY3VycmVudFZhbHVlKCksXG5cdFx0dW5pdCA9IHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApLFxuXG5cdFx0Ly8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXNcblx0XHRpbml0aWFsSW5Vbml0ID0gZWxlbS5ub2RlVHlwZSAmJlxuXHRcdFx0KCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gfHwgdW5pdCAhPT0gXCJweFwiICYmICtpbml0aWFsICkgJiZcblx0XHRcdHJjc3NOdW0uZXhlYyggalF1ZXJ5LmNzcyggZWxlbSwgcHJvcCApICk7XG5cblx0aWYgKCBpbml0aWFsSW5Vbml0ICYmIGluaXRpYWxJblVuaXRbIDMgXSAhPT0gdW5pdCApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHRcdC8vIEhhbHZlIHRoZSBpdGVyYXRpb24gdGFyZ2V0IHZhbHVlIHRvIHByZXZlbnQgaW50ZXJmZXJlbmNlIGZyb20gQ1NTIHVwcGVyIGJvdW5kcyAoZ2gtMjE0NClcblx0XHRpbml0aWFsID0gaW5pdGlhbCAvIDI7XG5cblx0XHQvLyBUcnVzdCB1bml0cyByZXBvcnRlZCBieSBqUXVlcnkuY3NzXG5cdFx0dW5pdCA9IHVuaXQgfHwgaW5pdGlhbEluVW5pdFsgMyBdO1xuXG5cdFx0Ly8gSXRlcmF0aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRpbmcgcG9pbnRcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMTtcblxuXHRcdHdoaWxlICggbWF4SXRlcmF0aW9ucy0tICkge1xuXG5cdFx0XHQvLyBFdmFsdWF0ZSBhbmQgdXBkYXRlIG91ciBiZXN0IGd1ZXNzIChkb3VibGluZyBndWVzc2VzIHRoYXQgemVybyBvdXQpLlxuXHRcdFx0Ly8gRmluaXNoIGlmIHRoZSBzY2FsZSBlcXVhbHMgb3IgY3Jvc3NlcyAxIChtYWtpbmcgdGhlIG9sZCpuZXcgcHJvZHVjdCBub24tcG9zaXRpdmUpLlxuXHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXHRcdFx0aWYgKCAoIDEgLSBzY2FsZSApICogKCAxIC0gKCBzY2FsZSA9IGN1cnJlbnRWYWx1ZSgpIC8gaW5pdGlhbCB8fCAwLjUgKSApIDw9IDAgKSB7XG5cdFx0XHRcdG1heEl0ZXJhdGlvbnMgPSAwO1xuXHRcdFx0fVxuXHRcdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTtcblxuXHRcdH1cblxuXHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0ICogMjtcblx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uXG5cdFx0dmFsdWVQYXJ0cyA9IHZhbHVlUGFydHMgfHwgW107XG5cdH1cblxuXHRpZiAoIHZhbHVlUGFydHMgKSB7XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsSW5Vbml0IHx8ICtpbml0aWFsIHx8IDA7XG5cblx0XHQvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWRcblx0XHRhZGp1c3RlZCA9IHZhbHVlUGFydHNbIDEgXSA/XG5cdFx0XHRpbml0aWFsSW5Vbml0ICsgKCB2YWx1ZVBhcnRzWyAxIF0gKyAxICkgKiB2YWx1ZVBhcnRzWyAyIF0gOlxuXHRcdFx0K3ZhbHVlUGFydHNbIDIgXTtcblx0XHRpZiAoIHR3ZWVuICkge1xuXHRcdFx0dHdlZW4udW5pdCA9IHVuaXQ7XG5cdFx0XHR0d2Vlbi5zdGFydCA9IGluaXRpYWxJblVuaXQ7XG5cdFx0XHR0d2Vlbi5lbmQgPSBhZGp1c3RlZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFkanVzdGVkO1xufVxuXG5cbnZhciBkZWZhdWx0RGlzcGxheU1hcCA9IHt9O1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApIHtcblx0dmFyIHRlbXAsXG5cdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50LFxuXHRcdG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSxcblx0XHRkaXNwbGF5ID0gZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF07XG5cblx0aWYgKCBkaXNwbGF5ICkge1xuXHRcdHJldHVybiBkaXNwbGF5O1xuXHR9XG5cblx0dGVtcCA9IGRvYy5ib2R5LmFwcGVuZENoaWxkKCBkb2MuY3JlYXRlRWxlbWVudCggbm9kZU5hbWUgKSApO1xuXHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggdGVtcCwgXCJkaXNwbGF5XCIgKTtcblxuXHR0ZW1wLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRlbXAgKTtcblxuXHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdGRpc3BsYXkgPSBcImJsb2NrXCI7XG5cdH1cblx0ZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF0gPSBkaXNwbGF5O1xuXG5cdHJldHVybiBkaXNwbGF5O1xufVxuXG5mdW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7XG5cdHZhciBkaXNwbGF5LCBlbGVtLFxuXHRcdHZhbHVlcyA9IFtdLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cblx0Ly8gRGV0ZXJtaW5lIG5ldyBkaXNwbGF5IHZhbHVlIGZvciBlbGVtZW50cyB0aGF0IG5lZWQgdG8gY2hhbmdlXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdO1xuXHRcdGlmICggIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5O1xuXHRcdGlmICggc2hvdyApIHtcblxuXHRcdFx0Ly8gU2luY2Ugd2UgZm9yY2UgdmlzaWJpbGl0eSB1cG9uIGNhc2NhZGUtaGlkZGVuIGVsZW1lbnRzLCBhbiBpbW1lZGlhdGUgKGFuZCBzbG93KVxuXHRcdFx0Ly8gY2hlY2sgaXMgcmVxdWlyZWQgaW4gdGhpcyBmaXJzdCBsb29wIHVubGVzcyB3ZSBoYXZlIGEgbm9uZW1wdHkgZGlzcGxheSB2YWx1ZSAoZWl0aGVyXG5cdFx0XHQvLyBpbmxpbmUgb3IgYWJvdXQtdG8tYmUtcmVzdG9yZWQpXG5cdFx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICkgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCAhdmFsdWVzWyBpbmRleCBdICkge1xuXHRcdFx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIGRpc3BsYXkgIT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBcIm5vbmVcIjtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB3aGF0IHdlJ3JlIG92ZXJ3cml0aW5nXG5cdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJkaXNwbGF5XCIsIGRpc3BsYXkgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTZXQgdGhlIGRpc3BsYXkgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AgdG8gYXZvaWQgY29uc3RhbnQgcmVmbG93XG5cdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCB2YWx1ZXNbIGluZGV4IF0gIT0gbnVsbCApIHtcblx0XHRcdGVsZW1lbnRzWyBpbmRleCBdLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZXNbIGluZGV4IF07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRzO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNob3c6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApO1xuXHR9LFxuXHRoaWRlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTtcblx0fSxcblx0dG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNIaWRkZW5XaXRoaW5UcmVlKCB0aGlzICkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnNob3coKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcbnZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTtcblxudmFyIHJ0YWdOYW1lID0gKCAvPChbYS16XVteXFwvXFwwPlxceDIwXFx0XFxyXFxuXFxmXSopL2kgKTtcblxudmFyIHJzY3JpcHRUeXBlID0gKCAvXiR8Xm1vZHVsZSR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0ZGl2ID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApLFxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seVxuXHQvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAodHJhYy0xMTIxNylcblx0Ly8gU3VwcG9ydDogV2luZG93cyBXZWIgQXBwcyAoV1dBKVxuXHQvLyBgbmFtZWAgYW5kIGB0eXBlYCBtdXN0IHVzZSAuc2V0QXR0cmlidXRlIGZvciBXV0EgKHRyYWMtMTQ5MDEpXG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwicmFkaW9cIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwiY2hlY2tlZFwiLCBcImNoZWNrZWRcIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcInRcIiApO1xuXG5cdGRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4xIG9ubHlcblx0Ly8gT2xkZXIgV2ViS2l0IGRvZXNuJ3QgY2xvbmUgY2hlY2tlZCBzdGF0ZSBjb3JyZWN0bHkgaW4gZnJhZ21lbnRzXG5cdHN1cHBvcnQuY2hlY2tDbG9uZSA9IGRpdi5jbG9uZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuY2hlY2tlZDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gTWFrZSBzdXJlIHRleHRhcmVhIChhbmQgY2hlY2tib3gpIGRlZmF1bHRWYWx1ZSBpcyBwcm9wZXJseSBjbG9uZWRcblx0ZGl2LmlubmVySFRNTCA9IFwiPHRleHRhcmVhPng8L3RleHRhcmVhPlwiO1xuXHRzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkID0gISFkaXYuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZTtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHQvLyBJRSA8PTkgcmVwbGFjZXMgPG9wdGlvbj4gdGFncyB3aXRoIHRoZWlyIGNvbnRlbnRzIHdoZW4gaW5zZXJ0ZWQgb3V0c2lkZSBvZlxuXHQvLyB0aGUgc2VsZWN0IGVsZW1lbnQuXG5cdGRpdi5pbm5lckhUTUwgPSBcIjxvcHRpb24+PC9vcHRpb24+XCI7XG5cdHN1cHBvcnQub3B0aW9uID0gISFkaXYubGFzdENoaWxkO1xufSApKCk7XG5cblxuLy8gV2UgaGF2ZSB0byBjbG9zZSB0aGVzZSB0YWdzIHRvIHN1cHBvcnQgWEhUTUwgKHRyYWMtMTMyMDApXG52YXIgd3JhcE1hcCA9IHtcblxuXHQvLyBYSFRNTCBwYXJzZXJzIGRvIG5vdCBtYWdpY2FsbHkgaW5zZXJ0IGVsZW1lbnRzIGluIHRoZVxuXHQvLyBzYW1lIHdheSB0aGF0IHRhZyBzb3VwIHBhcnNlcnMgZG8uIFNvIHdlIGNhbm5vdCBzaG9ydGVuXG5cdC8vIHRoaXMgYnkgb21pdHRpbmcgPHRib2R5PiBvciBvdGhlciByZXF1aXJlZCBlbGVtZW50cy5cblx0dGhlYWQ6IFsgMSwgXCI8dGFibGU+XCIsIFwiPC90YWJsZT5cIiBdLFxuXHRjb2w6IFsgMiwgXCI8dGFibGU+PGNvbGdyb3VwPlwiLCBcIjwvY29sZ3JvdXA+PC90YWJsZT5cIiBdLFxuXHR0cjogWyAyLCBcIjx0YWJsZT48dGJvZHk+XCIsIFwiPC90Ym9keT48L3RhYmxlPlwiIF0sXG5cdHRkOiBbIDMsIFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsIFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCIgXSxcblxuXHRfZGVmYXVsdDogWyAwLCBcIlwiLCBcIlwiIF1cbn07XG5cbndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7XG53cmFwTWFwLnRoID0gd3JhcE1hcC50ZDtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbmlmICggIXN1cHBvcnQub3B0aW9uICkge1xuXHR3cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb24gPSBbIDEsIFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLCBcIjwvc2VsZWN0PlwiIF07XG59XG5cblxuZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBVc2UgdHlwZW9mIHRvIGF2b2lkIHplcm8tYXJndW1lbnQgbWV0aG9kIGludm9jYXRpb24gb24gaG9zdCBvYmplY3RzICh0cmFjLTE1MTUxKVxuXHR2YXIgcmV0O1xuXG5cdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0cmV0ID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIGlmICggdHlwZW9mIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyB8fCBcIipcIiApO1xuXG5cdH0gZWxzZSB7XG5cdFx0cmV0ID0gW107XG5cdH1cblxuXHRpZiAoIHRhZyA9PT0gdW5kZWZpbmVkIHx8IHRhZyAmJiBub2RlTmFtZSggY29udGV4dCwgdGFnICkgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5tZXJnZSggWyBjb250ZXh0IF0sIHJldCApO1xuXHR9XG5cblx0cmV0dXJuIHJldDtcbn1cblxuXG4vLyBNYXJrIHNjcmlwdHMgYXMgaGF2aW5nIGFscmVhZHkgYmVlbiBldmFsdWF0ZWRcbmZ1bmN0aW9uIHNldEdsb2JhbEV2YWwoIGVsZW1zLCByZWZFbGVtZW50cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGRhdGFQcml2LnNldChcblx0XHRcdGVsZW1zWyBpIF0sXG5cdFx0XHRcImdsb2JhbEV2YWxcIixcblx0XHRcdCFyZWZFbGVtZW50cyB8fCBkYXRhUHJpdi5nZXQoIHJlZkVsZW1lbnRzWyBpIF0sIFwiZ2xvYmFsRXZhbFwiIClcblx0XHQpO1xuXHR9XG59XG5cblxudmFyIHJodG1sID0gLzx8JiM/XFx3KzsvO1xuXG5mdW5jdGlvbiBidWlsZEZyYWdtZW50KCBlbGVtcywgY29udGV4dCwgc2NyaXB0cywgc2VsZWN0aW9uLCBpZ25vcmVkICkge1xuXHR2YXIgZWxlbSwgdG1wLCB0YWcsIHdyYXAsIGF0dGFjaGVkLCBqLFxuXHRcdGZyYWdtZW50ID0gY29udGV4dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0bm9kZXMgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRlbGVtID0gZWxlbXNbIGkgXTtcblxuXHRcdGlmICggZWxlbSB8fCBlbGVtID09PSAwICkge1xuXG5cdFx0XHQvLyBBZGQgbm9kZXMgZGlyZWN0bHlcblx0XHRcdGlmICggdG9UeXBlKCBlbGVtICkgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgZWxlbS5ub2RlVHlwZSA/IFsgZWxlbSBdIDogZWxlbSApO1xuXG5cdFx0XHQvLyBDb252ZXJ0IG5vbi1odG1sIGludG8gYSB0ZXh0IG5vZGVcblx0XHRcdH0gZWxzZSBpZiAoICFyaHRtbC50ZXN0KCBlbGVtICkgKSB7XG5cdFx0XHRcdG5vZGVzLnB1c2goIGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIGVsZW0gKSApO1xuXG5cdFx0XHQvLyBDb252ZXJ0IGh0bWwgaW50byBET00gbm9kZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRtcCA9IHRtcCB8fCBmcmFnbWVudC5hcHBlbmRDaGlsZCggY29udGV4dC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKTtcblxuXHRcdFx0XHQvLyBEZXNlcmlhbGl6ZSBhIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uXG5cdFx0XHRcdHRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR3cmFwID0gd3JhcE1hcFsgdGFnIF0gfHwgd3JhcE1hcC5fZGVmYXVsdDtcblx0XHRcdFx0dG1wLmlubmVySFRNTCA9IHdyYXBbIDEgXSArIGpRdWVyeS5odG1sUHJlZmlsdGVyKCBlbGVtICkgKyB3cmFwWyAyIF07XG5cblx0XHRcdFx0Ly8gRGVzY2VuZCB0aHJvdWdoIHdyYXBwZXJzIHRvIHRoZSByaWdodCBjb250ZW50XG5cdFx0XHRcdGogPSB3cmFwWyAwIF07XG5cdFx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRcdHRtcCA9IHRtcC5sYXN0Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCB0bXAuY2hpbGROb2RlcyApO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHRoZSB0b3AtbGV2ZWwgY29udGFpbmVyXG5cdFx0XHRcdHRtcCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIHRoZSBjcmVhdGVkIG5vZGVzIGFyZSBvcnBoYW5lZCAodHJhYy0xMjM5Milcblx0XHRcdFx0dG1wLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZW1vdmUgd3JhcHBlciBmcm9tIGZyYWdtZW50XG5cdGZyYWdtZW50LnRleHRDb250ZW50ID0gXCJcIjtcblxuXHRpID0gMDtcblx0d2hpbGUgKCAoIGVsZW0gPSBub2Rlc1sgaSsrIF0gKSApIHtcblxuXHRcdC8vIFNraXAgZWxlbWVudHMgYWxyZWFkeSBpbiB0aGUgY29udGV4dCBjb2xsZWN0aW9uICh0cmFjLTQwODcpXG5cdFx0aWYgKCBzZWxlY3Rpb24gJiYgalF1ZXJ5LmluQXJyYXkoIGVsZW0sIHNlbGVjdGlvbiApID4gLTEgKSB7XG5cdFx0XHRpZiAoIGlnbm9yZWQgKSB7XG5cdFx0XHRcdGlnbm9yZWQucHVzaCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0YXR0YWNoZWQgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBBcHBlbmQgdG8gZnJhZ21lbnRcblx0XHR0bXAgPSBnZXRBbGwoIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICksIFwic2NyaXB0XCIgKTtcblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRpZiAoIGF0dGFjaGVkICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggdG1wICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FwdHVyZSBleGVjdXRhYmxlc1xuXHRcdGlmICggc2NyaXB0cyApIHtcblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0bXBbIGorKyBdICkgKSB7XG5cdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlIHx8IFwiXCIgKSApIHtcblx0XHRcdFx0XHRzY3JpcHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmcmFnbWVudDtcbn1cblxuXG52YXIgcnR5cGVuYW1lc3BhY2UgPSAvXihbXi5dKikoPzpcXC4oLispfCkvO1xuXG5mdW5jdGlvbiByZXR1cm5UcnVlKCkge1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7XG5cdHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gb24oIGVsZW0sIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIG9uZSApIHtcblx0dmFyIG9yaWdGbiwgdHlwZTtcblxuXHQvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnNcblx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKVxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApXG5cdFx0XHRkYXRhID0gZGF0YSB8fCBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0b24oIGVsZW0sIHR5cGUsIHNlbGVjdG9yLCBkYXRhLCB0eXBlc1sgdHlwZSBdLCBvbmUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkge1xuXG5cdFx0Ly8gKCB0eXBlcywgZm4gKVxuXHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0ZGF0YSA9IHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkge1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBkYXRhLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0fSBlbHNlIGlmICggIWZuICkge1xuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBvbmUgPT09IDEgKSB7XG5cdFx0b3JpZ0ZuID0gZm47XG5cdFx0Zm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mb1xuXHRcdFx0alF1ZXJ5KCkub2ZmKCBldmVudCApO1xuXHRcdFx0cmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fTtcblxuXHRcdC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNpbmcgb3JpZ0ZuXG5cdFx0Zm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7XG5cdH1cblx0cmV0dXJuIGVsZW0uZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0alF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZXMsIGZuLCBkYXRhLCBzZWxlY3RvciApO1xuXHR9ICk7XG59XG5cbi8qXG4gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG4gKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLlxuICovXG5qUXVlcnkuZXZlbnQgPSB7XG5cblx0Z2xvYmFsOiB7fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7XG5cblx0XHR2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHQvLyBPbmx5IGF0dGFjaCBldmVudHMgdG8gb2JqZWN0cyB0aGF0IGFjY2VwdCBkYXRhXG5cdFx0aWYgKCAhYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlclxuXHRcdGlmICggaGFuZGxlci5oYW5kbGVyICkge1xuXHRcdFx0aGFuZGxlT2JqSW4gPSBoYW5kbGVyO1xuXHRcdFx0aGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7XG5cdFx0XHRzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVjdG9yO1xuXHRcdH1cblxuXHRcdC8vIEVuc3VyZSB0aGF0IGludmFsaWQgc2VsZWN0b3JzIHRocm93IGV4Y2VwdGlvbnMgYXQgYXR0YWNoIHRpbWVcblx0XHQvLyBFdmFsdWF0ZSBhZ2FpbnN0IGRvY3VtZW50RWxlbWVudCBpbiBjYXNlIGVsZW0gaXMgYSBub24tZWxlbWVudCBub2RlIChlLmcuLCBkb2N1bWVudClcblx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBkb2N1bWVudEVsZW1lbnQsIHNlbGVjdG9yICk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5pcXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyXG5cdFx0aWYgKCAhaGFuZGxlci5ndWlkICkge1xuXHRcdFx0aGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQrKztcblx0XHR9XG5cblx0XHQvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlIGFuZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMgaXMgdGhlIGZpcnN0XG5cdFx0aWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IE9iamVjdC5jcmVhdGUoIG51bGwgKTtcblx0XHR9XG5cdFx0aWYgKCAhKCBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSApICkge1xuXHRcdFx0ZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBmdW5jdGlvbiggZSApIHtcblxuXHRcdFx0XHQvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFuZFxuXHRcdFx0XHQvLyB3aGVuIGFuIGV2ZW50IGlzIGNhbGxlZCBhZnRlciBhIHBhZ2UgaGFzIHVubG9hZGVkXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSBcInVuZGVmaW5lZFwiICYmIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSA/XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBlbGVtLCBhcmd1bWVudHMgKSA6IHVuZGVmaW5lZDtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZVxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBUaGVyZSAqbXVzdCogYmUgYSB0eXBlLCBubyBhdHRhY2hpbmcgbmFtZXNwYWNlLW9ubHkgaGFuZGxlcnNcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBldmVudCBjaGFuZ2VzIGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBjaGFuZ2VkIHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBJZiBzZWxlY3RvciBkZWZpbmVkLCBkZXRlcm1pbmUgc3BlY2lhbCBldmVudCBhcGkgdHlwZSwgb3RoZXJ3aXNlIGdpdmVuIHR5cGVcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblxuXHRcdFx0Ly8gVXBkYXRlIHNwZWNpYWwgYmFzZWQgb24gbmV3bHkgcmVzZXQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIGhhbmRsZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzXG5cdFx0XHRoYW5kbGVPYmogPSBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdG9yaWdUeXBlOiBvcmlnVHlwZSxcblx0XHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdFx0aGFuZGxlcjogaGFuZGxlcixcblx0XHRcdFx0Z3VpZDogaGFuZGxlci5ndWlkLFxuXHRcdFx0XHRzZWxlY3Rvcjogc2VsZWN0b3IsXG5cdFx0XHRcdG5lZWRzQ29udGV4dDogc2VsZWN0b3IgJiYgalF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICksXG5cdFx0XHRcdG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApXG5cdFx0XHR9LCBoYW5kbGVPYmpJbiApO1xuXG5cdFx0XHQvLyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRoZSBmaXJzdFxuXHRcdFx0aWYgKCAhKCBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdICkgKSB7XG5cdFx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTtcblx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7XG5cblx0XHRcdFx0Ly8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lciBpZiB0aGUgc3BlY2lhbCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlXG5cdFx0XHRcdGlmICggIXNwZWNpYWwuc2V0dXAgfHxcblx0XHRcdFx0XHRzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGV2ZW50SGFuZGxlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggc3BlY2lhbC5hZGQgKSB7XG5cdFx0XHRcdHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXG5cdFx0XHRcdGlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3QsIGRlbGVnYXRlcyBpbiBmcm9udFxuXHRcdFx0aWYgKCBzZWxlY3RvciApIHtcblx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb25cblx0XHRcdGpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7XG5cdFx0fVxuXG5cdH0sXG5cblx0Ly8gRGV0YWNoIGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50XG5cdHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7XG5cblx0XHR2YXIgaiwgb3JpZ0NvdW50LCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuaGFzRGF0YSggZWxlbSApICYmIGRhdGFQcml2LmdldCggZWxlbSApO1xuXG5cdFx0aWYgKCAhZWxlbURhdGEgfHwgISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gT25jZSBmb3IgZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0eXBlczsgdHlwZSBtYXkgYmUgb21pdHRlZFxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBVbmJpbmQgYWxsIGV2ZW50cyAob24gdGhpcyBuYW1lc3BhY2UsIGlmIHByb3ZpZGVkKSBmb3IgdGhlIGVsZW1lbnRcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKyB0eXBlc1sgdCBdLCBoYW5kbGVyLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gfHwgW107XG5cdFx0XHR0bXAgPSB0bXBbIDIgXSAmJlxuXHRcdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKTtcblxuXHRcdFx0Ly8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50c1xuXHRcdFx0b3JpZ0NvdW50ID0gaiA9IGhhbmRsZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaiBdO1xuXG5cdFx0XHRcdGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiZcblx0XHRcdFx0XHQoICFoYW5kbGVyIHx8IGhhbmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJlxuXHRcdFx0XHRcdCggIXRtcCB8fCB0bXAudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiZcblx0XHRcdFx0XHQoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8XG5cdFx0XHRcdFx0XHRzZWxlY3RvciA9PT0gXCIqKlwiICYmIGhhbmRsZU9iai5zZWxlY3RvciApICkge1xuXHRcdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaiwgMSApO1xuXG5cdFx0XHRcdFx0aWYgKCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LS07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc3BlY2lhbC5yZW1vdmUgKSB7XG5cdFx0XHRcdFx0XHRzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBleGlzdFxuXHRcdFx0Ly8gKGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpXG5cdFx0XHRpZiAoIG9yaWdDb3VudCAmJiAhaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnRlYXJkb3duIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGVsZXRlIGV2ZW50c1sgdHlwZSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSBkYXRhIGFuZCB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2VkXG5cdFx0aWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7XG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiaGFuZGxlIGV2ZW50c1wiICk7XG5cdFx0fVxuXHR9LFxuXG5cdGRpc3BhdGNoOiBmdW5jdGlvbiggbmF0aXZlRXZlbnQgKSB7XG5cblx0XHR2YXIgaSwgaiwgcmV0LCBtYXRjaGVkLCBoYW5kbGVPYmosIGhhbmRsZXJRdWV1ZSxcblx0XHRcdGFyZ3MgPSBuZXcgQXJyYXkoIGFyZ3VtZW50cy5sZW5ndGggKSxcblxuXHRcdFx0Ly8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0XG5cdFx0XHRldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIG5hdGl2ZUV2ZW50ICksXG5cblx0XHRcdGhhbmRsZXJzID0gKFxuXHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZXZlbnRzXCIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsIClcblx0XHRcdClbIGV2ZW50LnR5cGUgXSB8fCBbXSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9O1xuXG5cdFx0Ly8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnRcblx0XHRhcmdzWyAwIF0gPSBldmVudDtcblxuXHRcdGZvciAoIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0YXJnc1sgaSBdID0gYXJndW1lbnRzWyBpIF07XG5cdFx0fVxuXG5cdFx0ZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzO1xuXG5cdFx0Ly8gQ2FsbCB0aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlLCBhbmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJlZFxuXHRcdGlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBoYW5kbGVyc1xuXHRcdGhhbmRsZXJRdWV1ZSA9IGpRdWVyeS5ldmVudC5oYW5kbGVycy5jYWxsKCB0aGlzLCBldmVudCwgaGFuZGxlcnMgKTtcblxuXHRcdC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtO1xuXG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBoYW5kbGVPYmogPSBtYXRjaGVkLmhhbmRsZXJzWyBqKysgXSApICYmXG5cdFx0XHRcdCFldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZSBldmVudCBpcyBuYW1lc3BhY2VkLCB0aGVuIGVhY2ggaGFuZGxlciBpcyBvbmx5IGludm9rZWQgaWYgaXQgaXNcblx0XHRcdFx0Ly8gc3BlY2lhbGx5IHVuaXZlcnNhbCBvciBpdHMgbmFtZXNwYWNlcyBhcmUgYSBzdXBlcnNldCBvZiB0aGUgZXZlbnQncy5cblx0XHRcdFx0aWYgKCAhZXZlbnQucm5hbWVzcGFjZSB8fCBoYW5kbGVPYmoubmFtZXNwYWNlID09PSBmYWxzZSB8fFxuXHRcdFx0XHRcdGV2ZW50LnJuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkge1xuXG5cdFx0XHRcdFx0ZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqO1xuXHRcdFx0XHRcdGV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTtcblxuXHRcdFx0XHRcdHJldCA9ICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30gKS5oYW5kbGUgfHxcblx0XHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApO1xuXG5cdFx0XHRcdFx0aWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdGlmICggKCBldmVudC5yZXN1bHQgPSByZXQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGVcblx0XHRpZiAoIHNwZWNpYWwucG9zdERpc3BhdGNoICkge1xuXHRcdFx0c3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdGhhbmRsZXJzOiBmdW5jdGlvbiggZXZlbnQsIGhhbmRsZXJzICkge1xuXHRcdHZhciBpLCBoYW5kbGVPYmosIHNlbCwgbWF0Y2hlZEhhbmRsZXJzLCBtYXRjaGVkU2VsZWN0b3JzLFxuXHRcdFx0aGFuZGxlclF1ZXVlID0gW10sXG5cdFx0XHRkZWxlZ2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCxcblx0XHRcdGN1ciA9IGV2ZW50LnRhcmdldDtcblxuXHRcdC8vIEZpbmQgZGVsZWdhdGUgaGFuZGxlcnNcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05XG5cdFx0XHQvLyBCbGFjay1ob2xlIFNWRyA8dXNlPiBpbnN0YW5jZSB0cmVlcyAodHJhYy0xMzE4MClcblx0XHRcdGN1ci5ub2RlVHlwZSAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDJcblx0XHRcdC8vIFN1cHByZXNzIHNwZWMtdmlvbGF0aW5nIGNsaWNrcyBpbmRpY2F0aW5nIGEgbm9uLXByaW1hcnkgcG9pbnRlciBidXR0b24gKHRyYWMtMzg2MSlcblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50LXR5cGUtY2xpY2tcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdC8vIC4uLmJ1dCBub3QgYXJyb3cga2V5IFwiY2xpY2tzXCIgb2YgcmFkaW8gaW5wdXRzLCB3aGljaCBjYW4gaGF2ZSBgYnV0dG9uYCAtMSAoZ2gtMjM0Mylcblx0XHRcdCEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBldmVudC5idXR0b24gPj0gMSApICkge1xuXG5cdFx0XHRmb3IgKCA7IGN1ciAhPT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5vZGUgfHwgdGhpcyApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKHRyYWMtMTMyMDgpXG5cdFx0XHRcdC8vIERvbid0IHByb2Nlc3MgY2xpY2tzIG9uIGRpc2FibGVkIGVsZW1lbnRzICh0cmFjLTY5MTEsIHRyYWMtODE2NSwgdHJhYy0xMTM4MiwgdHJhYy0xMTc2NClcblx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPT09IDEgJiYgISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGN1ci5kaXNhYmxlZCA9PT0gdHJ1ZSApICkge1xuXHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycyA9IFtdO1xuXHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnMgPSB7fTtcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGRlbGVnYXRlQ291bnQ7IGkrKyApIHtcblx0XHRcdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IGNvbmZsaWN0IHdpdGggT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzICh0cmFjLTEzMjAzKVxuXHRcdFx0XHRcdFx0c2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yICsgXCIgXCI7XG5cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0ID9cblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4KCBjdXIgKSA+IC0xIDpcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZCggc2VsLCB0aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3RoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRIYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVkSGFuZGxlcnMgfSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnNcblx0XHRjdXIgPSB0aGlzO1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCA8IGhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBoYW5kbGVyUXVldWU7XG5cdH0sXG5cblx0YWRkUHJvcDogZnVuY3Rpb24oIG5hbWUsIGhvb2sgKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBqUXVlcnkuRXZlbnQucHJvdG90eXBlLCBuYW1lLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXG5cdFx0XHRnZXQ6IGlzRnVuY3Rpb24oIGhvb2sgKSA/XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGhvb2soIHRoaXMub3JpZ2luYWxFdmVudCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFsgbmFtZSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0c2V0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgbmFtZSwge1xuXHRcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGZpeDogZnVuY3Rpb24oIG9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0cmV0dXJuIG9yaWdpbmFsRXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0b3JpZ2luYWxFdmVudCA6XG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7XG5cdH0sXG5cblx0c3BlY2lhbDoge1xuXHRcdGxvYWQ6IHtcblxuXHRcdFx0Ly8gUHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZFxuXHRcdFx0bm9CdWJibGU6IHRydWVcblx0XHR9LFxuXHRcdGNsaWNrOiB7XG5cblx0XHRcdC8vIFV0aWxpemUgbmF0aXZlIGV2ZW50IHRvIGVuc3VyZSBjb3JyZWN0IHN0YXRlIGZvciBjaGVja2FibGUgaW5wdXRzXG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oIGRhdGEgKSB7XG5cblx0XHRcdFx0Ly8gRm9yIG11dHVhbCBjb21wcmVzc2liaWxpdHkgd2l0aCBfZGVmYXVsdCwgcmVwbGFjZSBgdGhpc2AgYWNjZXNzIHdpdGggYSBsb2NhbCB2YXIuXG5cdFx0XHRcdC8vIGB8fCBkYXRhYCBpcyBkZWFkIGNvZGUgbWVhbnQgb25seSB0byBwcmVzZXJ2ZSB0aGUgdmFyaWFibGUgdGhyb3VnaCBtaW5pZmljYXRpb24uXG5cdFx0XHRcdHZhciBlbCA9IHRoaXMgfHwgZGF0YTtcblxuXHRcdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHQvLyBkYXRhUHJpdi5zZXQoIGVsLCBcImNsaWNrXCIsIC4uLiApXG5cdFx0XHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIGVsLCBcImNsaWNrXCIsIHRydWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBhbGxvdyBub3JtYWwgcHJvY2Vzc2luZyBpbiB0aGUgY2FsbGVyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHR0cmlnZ2VyOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIEZvcmNlIHNldHVwIGJlZm9yZSB0cmlnZ2VyaW5nIGEgY2xpY2tcblx0XHRcdFx0aWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbC50eXBlICkgJiZcblx0XHRcdFx0XHRlbC5jbGljayAmJiBub2RlTmFtZSggZWwsIFwiaW5wdXRcIiApICkge1xuXG5cdFx0XHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIGVsLCBcImNsaWNrXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJldHVybiBub24tZmFsc2UgdG8gYWxsb3cgbm9ybWFsIGV2ZW50LXBhdGggcHJvcGFnYXRpb25cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBGb3IgY3Jvc3MtYnJvd3NlciBjb25zaXN0ZW5jeSwgc3VwcHJlc3MgbmF0aXZlIC5jbGljaygpIG9uIGxpbmtzXG5cdFx0XHQvLyBBbHNvIHByZXZlbnQgaXQgaWYgd2UncmUgY3VycmVudGx5IGluc2lkZSBhIGxldmVyYWdlZCBuYXRpdmUtZXZlbnQgc3RhY2tcblx0XHRcdF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRcdHJldHVybiByY2hlY2thYmxlVHlwZS50ZXN0KCB0YXJnZXQudHlwZSApICYmXG5cdFx0XHRcdFx0dGFyZ2V0LmNsaWNrICYmIG5vZGVOYW1lKCB0YXJnZXQsIFwiaW5wdXRcIiApICYmXG5cdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0YXJnZXQsIFwiY2xpY2tcIiApIHx8XG5cdFx0XHRcdFx0bm9kZU5hbWUoIHRhcmdldCwgXCJhXCIgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0YmVmb3JldW5sb2FkOiB7XG5cdFx0XHRwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDIwK1xuXHRcdFx0XHQvLyBGaXJlZm94IGRvZXNuJ3QgYWxlcnQgaWYgdGhlIHJldHVyblZhbHVlIGZpZWxkIGlzIG5vdCBzZXQuXG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRldmVudC5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0gZXZlbnQucmVzdWx0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBFbnN1cmUgdGhlIHByZXNlbmNlIG9mIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgaGFuZGxlcyBtYW51YWxseS10cmlnZ2VyZWRcbi8vIHN5bnRoZXRpYyBldmVudHMgYnkgaW50ZXJydXB0aW5nIHByb2dyZXNzIHVudGlsIHJlaW52b2tlZCBpbiByZXNwb25zZSB0b1xuLy8gKm5hdGl2ZSogZXZlbnRzIHRoYXQgaXQgZmlyZXMgZGlyZWN0bHksIGVuc3VyaW5nIHRoYXQgc3RhdGUgY2hhbmdlcyBoYXZlXG4vLyBhbHJlYWR5IG9jY3VycmVkIGJlZm9yZSBvdGhlciBsaXN0ZW5lcnMgYXJlIGludm9rZWQuXG5mdW5jdGlvbiBsZXZlcmFnZU5hdGl2ZSggZWwsIHR5cGUsIGlzU2V0dXAgKSB7XG5cblx0Ly8gTWlzc2luZyBgaXNTZXR1cGAgaW5kaWNhdGVzIGEgdHJpZ2dlciBjYWxsLCB3aGljaCBtdXN0IGZvcmNlIHNldHVwIHRocm91Z2ggalF1ZXJ5LmV2ZW50LmFkZFxuXHRpZiAoICFpc1NldHVwICkge1xuXHRcdGlmICggZGF0YVByaXYuZ2V0KCBlbCwgdHlwZSApID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwgcmV0dXJuVHJ1ZSApO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZWdpc3RlciB0aGUgY29udHJvbGxlciBhcyBhIHNwZWNpYWwgdW5pdmVyc2FsIGhhbmRsZXIgZm9yIGFsbCBldmVudCBuYW1lc3BhY2VzXG5cdGRhdGFQcml2LnNldCggZWwsIHR5cGUsIGZhbHNlICk7XG5cdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCB7XG5cdFx0bmFtZXNwYWNlOiBmYWxzZSxcblx0XHRoYW5kbGVyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgcmVzdWx0LFxuXHRcdFx0XHRzYXZlZCA9IGRhdGFQcml2LmdldCggdGhpcywgdHlwZSApO1xuXG5cdFx0XHRpZiAoICggZXZlbnQuaXNUcmlnZ2VyICYgMSApICYmIHRoaXNbIHR5cGUgXSApIHtcblxuXHRcdFx0XHQvLyBJbnRlcnJ1cHQgcHJvY2Vzc2luZyBvZiB0aGUgb3V0ZXIgc3ludGhldGljIC50cmlnZ2VyKCllZCBldmVudFxuXHRcdFx0XHRpZiAoICFzYXZlZCApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGFyZ3VtZW50cyBmb3IgdXNlIHdoZW4gaGFuZGxpbmcgdGhlIGlubmVyIG5hdGl2ZSBldmVudFxuXHRcdFx0XHRcdC8vIFRoZXJlIHdpbGwgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAoYW4gZXZlbnQgb2JqZWN0KSwgc28gdGhpcyBhcnJheVxuXHRcdFx0XHRcdC8vIHdpbGwgbm90IGJlIGNvbmZ1c2VkIHdpdGggYSBsZWZ0b3ZlciBjYXB0dXJlIG9iamVjdC5cblx0XHRcdFx0XHRzYXZlZCA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgc2F2ZWQgKTtcblxuXHRcdFx0XHRcdC8vIFRyaWdnZXIgdGhlIG5hdGl2ZSBldmVudCBhbmQgY2FwdHVyZSBpdHMgcmVzdWx0XG5cdFx0XHRcdFx0dGhpc1sgdHlwZSBdKCk7XG5cdFx0XHRcdFx0cmVzdWx0ID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBmYWxzZSApO1xuXG5cdFx0XHRcdFx0aWYgKCBzYXZlZCAhPT0gcmVzdWx0ICkge1xuXG5cdFx0XHRcdFx0XHQvLyBDYW5jZWwgdGhlIG91dGVyIHN5bnRoZXRpYyBldmVudFxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGlzIGlzIGFuIGlubmVyIHN5bnRoZXRpYyBldmVudCBmb3IgYW4gZXZlbnQgd2l0aCBhIGJ1YmJsaW5nIHN1cnJvZ2F0ZVxuXHRcdFx0XHQvLyAoZm9jdXMgb3IgYmx1ciksIGFzc3VtZSB0aGF0IHRoZSBzdXJyb2dhdGUgYWxyZWFkeSBwcm9wYWdhdGVkIGZyb20gdHJpZ2dlcmluZ1xuXHRcdFx0XHQvLyB0aGUgbmF0aXZlIGV2ZW50IGFuZCBwcmV2ZW50IHRoYXQgZnJvbSBoYXBwZW5pbmcgYWdhaW4gaGVyZS5cblx0XHRcdFx0Ly8gVGhpcyB0ZWNobmljYWxseSBnZXRzIHRoZSBvcmRlcmluZyB3cm9uZyB3LnIudC4gdG8gYC50cmlnZ2VyKClgIChpbiB3aGljaCB0aGVcblx0XHRcdFx0Ly8gYnViYmxpbmcgc3Vycm9nYXRlIHByb3BhZ2F0ZXMgKmFmdGVyKiB0aGUgbm9uLWJ1YmJsaW5nIGJhc2UpLCBidXQgdGhhdCBzZWVtc1xuXHRcdFx0XHQvLyBsZXNzIGJhZCB0aGFuIGR1cGxpY2F0aW9uLlxuXHRcdFx0XHR9IGVsc2UgaWYgKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge30gKS5kZWxlZ2F0ZVR5cGUgKSB7XG5cdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIG5hdGl2ZSBldmVudCB0cmlnZ2VyZWQgYWJvdmUsIGV2ZXJ5dGhpbmcgaXMgbm93IGluIG9yZGVyXG5cdFx0XHQvLyBGaXJlIGFuIGlubmVyIHN5bnRoZXRpYyBldmVudCB3aXRoIHRoZSBvcmlnaW5hbCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIHNhdmVkICkge1xuXG5cdFx0XHRcdC8vIC4uLmFuZCBjYXB0dXJlIHRoZSByZXN1bHRcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBqUXVlcnkuZXZlbnQudHJpZ2dlcihcblx0XHRcdFx0XHRzYXZlZFsgMCBdLFxuXHRcdFx0XHRcdHNhdmVkLnNsaWNlKCAxICksXG5cdFx0XHRcdFx0dGhpc1xuXHRcdFx0XHQpICk7XG5cblx0XHRcdFx0Ly8gQWJvcnQgaGFuZGxpbmcgb2YgdGhlIG5hdGl2ZSBldmVudCBieSBhbGwgalF1ZXJ5IGhhbmRsZXJzIHdoaWxlIGFsbG93aW5nXG5cdFx0XHRcdC8vIG5hdGl2ZSBoYW5kbGVycyBvbiB0aGUgc2FtZSBlbGVtZW50IHRvIHJ1bi4gT24gdGFyZ2V0LCB0aGlzIGlzIGFjaGlldmVkXG5cdFx0XHRcdC8vIGJ5IHN0b3BwaW5nIGltbWVkaWF0ZSBwcm9wYWdhdGlvbiBqdXN0IG9uIHRoZSBqUXVlcnkgZXZlbnQuIEhvd2V2ZXIsXG5cdFx0XHRcdC8vIHRoZSBuYXRpdmUgZXZlbnQgaXMgcmUtd3JhcHBlZCBieSBhIGpRdWVyeSBvbmUgb24gZWFjaCBsZXZlbCBvZiB0aGVcblx0XHRcdFx0Ly8gcHJvcGFnYXRpb24gc28gdGhlIG9ubHkgd2F5IHRvIHN0b3AgaXQgZm9yIGpRdWVyeSBpcyB0byBzdG9wIGl0IGZvclxuXHRcdFx0XHQvLyBldmVyeW9uZSB2aWEgbmF0aXZlIGBzdG9wUHJvcGFnYXRpb24oKWAuIFRoaXMgaXMgbm90IGEgcHJvYmxlbSBmb3Jcblx0XHRcdFx0Ly8gZm9jdXMvYmx1ciB3aGljaCBkb24ndCBidWJibGUsIGJ1dCBpdCBkb2VzIGFsc28gc3RvcCBjbGljayBvbiBjaGVja2JveGVzXG5cdFx0XHRcdC8vIGFuZCByYWRpb3MuIFdlIGFjY2VwdCB0aGlzIGxpbWl0YXRpb24uXG5cdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmpRdWVyeS5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7XG5cblx0Ly8gVGhpcyBcImlmXCIgaXMgbmVlZGVkIGZvciBwbGFpbiBvYmplY3RzXG5cdGlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkge1xuXHRcdGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlICk7XG5cdH1cbn07XG5cbmpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkge1xuXG5cdC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29yZFxuXHRpZiAoICEoIHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQgKSApIHtcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gRXZlbnQgb2JqZWN0XG5cdGlmICggc3JjICYmIHNyYy50eXBlICkge1xuXHRcdHRoaXMub3JpZ2luYWxFdmVudCA9IHNyYztcblx0XHR0aGlzLnR5cGUgPSBzcmMudHlwZTtcblxuXHRcdC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkXG5cdFx0Ly8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fFxuXHRcdFx0XHRzcmMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZpbmVkICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5XG5cdFx0XHRcdHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0cmV0dXJuVHJ1ZSA6XG5cdFx0XHRyZXR1cm5GYWxzZTtcblxuXHRcdC8vIENyZWF0ZSB0YXJnZXQgcHJvcGVydGllc1xuXHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA8PTYgLSA3IG9ubHlcblx0XHQvLyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAodHJhYy01MDQsIHRyYWMtMTMxNDMpXG5cdFx0dGhpcy50YXJnZXQgPSAoIHNyYy50YXJnZXQgJiYgc3JjLnRhcmdldC5ub2RlVHlwZSA9PT0gMyApID9cblx0XHRcdHNyYy50YXJnZXQucGFyZW50Tm9kZSA6XG5cdFx0XHRzcmMudGFyZ2V0O1xuXG5cdFx0dGhpcy5jdXJyZW50VGFyZ2V0ID0gc3JjLmN1cnJlbnRUYXJnZXQ7XG5cdFx0dGhpcy5yZWxhdGVkVGFyZ2V0ID0gc3JjLnJlbGF0ZWRUYXJnZXQ7XG5cblx0Ly8gRXZlbnQgdHlwZVxuXHR9IGVsc2Uge1xuXHRcdHRoaXMudHlwZSA9IHNyYztcblx0fVxuXG5cdC8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHByb3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0XG5cdGlmICggcHJvcHMgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdGhpcywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0IGhhdmUgb25lXG5cdHRoaXMudGltZVN0YW1wID0gc3JjICYmIHNyYy50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTtcblxuXHQvLyBNYXJrIGl0IGFzIGZpeGVkXG5cdHRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlO1xufTtcblxuLy8galF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERPTTMgRXZlbnRzIGFzIHNwZWNpZmllZCBieSB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBCaW5kaW5nXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sXG5qUXVlcnkuRXZlbnQucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LkV2ZW50LFxuXHRpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNlLFxuXHRpc1Byb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNTaW11bGF0ZWQ6IGZhbHNlLFxuXG5cdHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH1cbn07XG5cbi8vIEluY2x1ZGVzIGFsbCBjb21tb24gZXZlbnQgcHJvcHMgaW5jbHVkaW5nIEtleUV2ZW50IGFuZCBNb3VzZUV2ZW50IHNwZWNpZmljIHByb3BzXG5qUXVlcnkuZWFjaCgge1xuXHRhbHRLZXk6IHRydWUsXG5cdGJ1YmJsZXM6IHRydWUsXG5cdGNhbmNlbGFibGU6IHRydWUsXG5cdGNoYW5nZWRUb3VjaGVzOiB0cnVlLFxuXHRjdHJsS2V5OiB0cnVlLFxuXHRkZXRhaWw6IHRydWUsXG5cdGV2ZW50UGhhc2U6IHRydWUsXG5cdG1ldGFLZXk6IHRydWUsXG5cdHBhZ2VYOiB0cnVlLFxuXHRwYWdlWTogdHJ1ZSxcblx0c2hpZnRLZXk6IHRydWUsXG5cdHZpZXc6IHRydWUsXG5cdFwiY2hhclwiOiB0cnVlLFxuXHRjb2RlOiB0cnVlLFxuXHRjaGFyQ29kZTogdHJ1ZSxcblx0a2V5OiB0cnVlLFxuXHRrZXlDb2RlOiB0cnVlLFxuXHRidXR0b246IHRydWUsXG5cdGJ1dHRvbnM6IHRydWUsXG5cdGNsaWVudFg6IHRydWUsXG5cdGNsaWVudFk6IHRydWUsXG5cdG9mZnNldFg6IHRydWUsXG5cdG9mZnNldFk6IHRydWUsXG5cdHBvaW50ZXJJZDogdHJ1ZSxcblx0cG9pbnRlclR5cGU6IHRydWUsXG5cdHNjcmVlblg6IHRydWUsXG5cdHNjcmVlblk6IHRydWUsXG5cdHRhcmdldFRvdWNoZXM6IHRydWUsXG5cdHRvRWxlbWVudDogdHJ1ZSxcblx0dG91Y2hlczogdHJ1ZSxcblx0d2hpY2g6IHRydWVcbn0sIGpRdWVyeS5ldmVudC5hZGRQcm9wICk7XG5cbmpRdWVyeS5lYWNoKCB7IGZvY3VzOiBcImZvY3VzaW5cIiwgYmx1cjogXCJmb2N1c291dFwiIH0sIGZ1bmN0aW9uKCB0eXBlLCBkZWxlZ2F0ZVR5cGUgKSB7XG5cblx0ZnVuY3Rpb24gZm9jdXNNYXBwZWRIYW5kbGVyKCBuYXRpdmVFdmVudCApIHtcblx0XHRpZiAoIGRvY3VtZW50LmRvY3VtZW50TW9kZSApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErXG5cdFx0XHQvLyBBdHRhY2ggYSBzaW5nbGUgZm9jdXNpbi9mb2N1c291dCBoYW5kbGVyIG9uIHRoZSBkb2N1bWVudCB3aGlsZSBzb21lb25lIHdhbnRzXG5cdFx0XHQvLyBmb2N1cy9ibHVyLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGZvcm1lciBhcmUgc3luY2hyb25vdXMgaW4gSUUgd2hpbGUgdGhlIGxhdHRlclxuXHRcdFx0Ly8gYXJlIGFzeW5jLiBJbiBvdGhlciBicm93c2VycywgYWxsIHRob3NlIGhhbmRsZXJzIGFyZSBpbnZva2VkIHN5bmNocm9ub3VzbHkuXG5cblx0XHRcdC8vIGBoYW5kbGVgIGZyb20gcHJpdmF0ZSBkYXRhIHdvdWxkIGFscmVhZHkgd3JhcCB0aGUgZXZlbnQsIGJ1dCB3ZSBuZWVkXG5cdFx0XHQvLyB0byBjaGFuZ2UgdGhlIGB0eXBlYCBoZXJlLlxuXHRcdFx0dmFyIGhhbmRsZSA9IGRhdGFQcml2LmdldCggdGhpcywgXCJoYW5kbGVcIiApLFxuXHRcdFx0XHRldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIG5hdGl2ZUV2ZW50ICk7XG5cdFx0XHRldmVudC50eXBlID0gbmF0aXZlRXZlbnQudHlwZSA9PT0gXCJmb2N1c2luXCIgPyBcImZvY3VzXCIgOiBcImJsdXJcIjtcblx0XHRcdGV2ZW50LmlzU2ltdWxhdGVkID0gdHJ1ZTtcblxuXHRcdFx0Ly8gRmlyc3QsIGhhbmRsZSBmb2N1c2luL2ZvY3Vzb3V0XG5cdFx0XHRoYW5kbGUoIG5hdGl2ZUV2ZW50ICk7XG5cblx0XHRcdC8vIC4uLnRoZW4sIGhhbmRsZSBmb2N1cy9ibHVyXG5cdFx0XHQvL1xuXHRcdFx0Ly8gZm9jdXMvYmx1ciBkb24ndCBidWJibGUgd2hpbGUgZm9jdXNpbi9mb2N1c291dCBkbzsgc2ltdWxhdGUgdGhlIGZvcm1lciBieSBvbmx5XG5cdFx0XHQvLyBpbnZva2luZyB0aGUgaGFuZGxlciBhdCB0aGUgbG93ZXIgbGV2ZWwuXG5cdFx0XHRpZiAoIGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCApIHtcblxuXHRcdFx0XHQvLyBUaGUgc2V0dXAgcGFydCBjYWxscyBgbGV2ZXJhZ2VOYXRpdmVgLCB3aGljaCwgaW4gdHVybiwgY2FsbHNcblx0XHRcdFx0Ly8gYGpRdWVyeS5ldmVudC5hZGRgLCBzbyBldmVudCBoYW5kbGUgd2lsbCBhbHJlYWR5IGhhdmUgYmVlbiBzZXRcblx0XHRcdFx0Ly8gYnkgdGhpcyBwb2ludC5cblx0XHRcdFx0aGFuZGxlKCBldmVudCApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEZvciBub24tSUUgYnJvd3NlcnMsIGF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciBvbiB0aGUgZG9jdW1lbnRcblx0XHRcdC8vIHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dC5cblx0XHRcdGpRdWVyeS5ldmVudC5zaW11bGF0ZSggZGVsZWdhdGVUeXBlLCBuYXRpdmVFdmVudC50YXJnZXQsXG5cdFx0XHRcdGpRdWVyeS5ldmVudC5maXgoIG5hdGl2ZUV2ZW50ICkgKTtcblx0XHR9XG5cdH1cblxuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdID0ge1xuXG5cdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0XG5cdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHR2YXIgYXR0YWNoZXM7XG5cblx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiZm9jdXNcIiwgLi4uIClcblx0XHRcdC8vIGRhdGFQcml2LnNldCggdGhpcywgXCJibHVyXCIsIC4uLiApXG5cdFx0XHRsZXZlcmFnZU5hdGl2ZSggdGhpcywgdHlwZSwgdHJ1ZSApO1xuXG5cdFx0XHRpZiAoIGRvY3VtZW50LmRvY3VtZW50TW9kZSApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErXG5cdFx0XHRcdC8vIFdlIHVzZSB0aGUgc2FtZSBuYXRpdmUgaGFuZGxlciBmb3IgZm9jdXNpbiAmIGZvY3VzIChhbmQgZm9jdXNvdXQgJiBibHVyKVxuXHRcdFx0XHQvLyBzbyB3ZSBuZWVkIHRvIGNvb3JkaW5hdGUgc2V0dXAgJiB0ZWFyZG93biBwYXJ0cyBiZXR3ZWVuIHRob3NlIGV2ZW50cy5cblx0XHRcdFx0Ly8gVXNlIGBkZWxlZ2F0ZVR5cGVgIGFzIHRoZSBrZXkgYXMgYHR5cGVgIGlzIGFscmVhZHkgdXNlZCBieSBgbGV2ZXJhZ2VOYXRpdmVgLlxuXHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmdldCggdGhpcywgZGVsZWdhdGVUeXBlICk7XG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lciggZGVsZWdhdGVUeXBlLCBmb2N1c01hcHBlZEhhbmRsZXIgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIGRlbGVnYXRlVHlwZSwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBhbGxvdyBub3JtYWwgcHJvY2Vzc2luZyBpbiB0aGUgY2FsbGVyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBGb3JjZSBzZXR1cCBiZWZvcmUgdHJpZ2dlclxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBhdHRhY2hlcztcblxuXHRcdFx0aWYgKCBkb2N1bWVudC5kb2N1bWVudE1vZGUgKSB7XG5cdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuZ2V0KCB0aGlzLCBkZWxlZ2F0ZVR5cGUgKSAtIDE7XG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lciggZGVsZWdhdGVUeXBlLCBmb2N1c01hcHBlZEhhbmRsZXIgKTtcblx0XHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIHRoaXMsIGRlbGVnYXRlVHlwZSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgZGVsZWdhdGVUeXBlLCBhdHRhY2hlcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBpbmRpY2F0ZSBzdGFuZGFyZCB0ZWFyZG93biBzaG91bGQgYmUgYXBwbGllZFxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIFN1cHByZXNzIG5hdGl2ZSBmb2N1cyBvciBibHVyIGlmIHdlJ3JlIGN1cnJlbnRseSBpbnNpZGVcblx0XHQvLyBhIGxldmVyYWdlZCBuYXRpdmUtZXZlbnQgc3RhY2tcblx0XHRfZGVmYXVsdDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZXZlbnQudGFyZ2V0LCB0eXBlICk7XG5cdFx0fSxcblxuXHRcdGRlbGVnYXRlVHlwZTogZGVsZWdhdGVUeXBlXG5cdH07XG5cblx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTQ0XG5cdC8vIEZpcmVmb3ggZG9lc24ndCBoYXZlIGZvY3VzKGluIHwgb3V0KSBldmVudHNcblx0Ly8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc3ODdcblx0Ly9cblx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NDggLSA0OSwgU2FmYXJpIDw9OS4wIC0gOS4xXG5cdC8vIGZvY3VzKGluIHwgb3V0KSBldmVudHMgZmlyZSBhZnRlciBmb2N1cyAmIGJsdXIgZXZlbnRzLFxuXHQvLyB3aGljaCBpcyBzcGVjIHZpb2xhdGlvbiAtIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWZvY3VzZXZlbnQtZXZlbnQtb3JkZXJcblx0Ly8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDk4NTdcblx0Ly9cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExK1xuXHQvLyBUbyBwcmVzZXJ2ZSByZWxhdGl2ZSBmb2N1c2luL2ZvY3VzICYgZm9jdXNvdXQvYmx1ciBldmVudCBvcmRlciBndWFyYW50ZWVkIG9uIHRoZSAzLnggYnJhbmNoLFxuXHQvLyBhdHRhY2ggYSBzaW5nbGUgaGFuZGxlciBmb3IgYm90aCBldmVudHMgaW4gSUUuXG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBkZWxlZ2F0ZVR5cGUgXSA9IHtcblx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEhhbmRsZTogcmVndWxhciBub2RlcyAodmlhIGB0aGlzLm93bmVyRG9jdW1lbnRgKSwgd2luZG93XG5cdFx0XHQvLyAodmlhIGB0aGlzLmRvY3VtZW50YCkgJiBkb2N1bWVudCAodmlhIGB0aGlzYCkuXG5cdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMuZG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0ZGF0YUhvbGRlciA9IGRvY3VtZW50LmRvY3VtZW50TW9kZSA/IHRoaXMgOiBkb2MsXG5cdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuZ2V0KCBkYXRhSG9sZGVyLCBkZWxlZ2F0ZVR5cGUgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExK1xuXHRcdFx0Ly8gV2UgdXNlIHRoZSBzYW1lIG5hdGl2ZSBoYW5kbGVyIGZvciBmb2N1c2luICYgZm9jdXMgKGFuZCBmb2N1c291dCAmIGJsdXIpXG5cdFx0XHQvLyBzbyB3ZSBuZWVkIHRvIGNvb3JkaW5hdGUgc2V0dXAgJiB0ZWFyZG93biBwYXJ0cyBiZXR3ZWVuIHRob3NlIGV2ZW50cy5cblx0XHRcdC8vIFVzZSBgZGVsZWdhdGVUeXBlYCBhcyB0aGUga2V5IGFzIGB0eXBlYCBpcyBhbHJlYWR5IHVzZWQgYnkgYGxldmVyYWdlTmF0aXZlYC5cblx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRpZiAoIGRvY3VtZW50LmRvY3VtZW50TW9kZSApIHtcblx0XHRcdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIGRlbGVnYXRlVHlwZSwgZm9jdXNNYXBwZWRIYW5kbGVyICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZG9jLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGZvY3VzTWFwcGVkSGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRkYXRhUHJpdi5zZXQoIGRhdGFIb2xkZXIsIGRlbGVnYXRlVHlwZSwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7XG5cdFx0fSxcblx0XHR0ZWFyZG93bjogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMuZG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0ZGF0YUhvbGRlciA9IGRvY3VtZW50LmRvY3VtZW50TW9kZSA/IHRoaXMgOiBkb2MsXG5cdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuZ2V0KCBkYXRhSG9sZGVyLCBkZWxlZ2F0ZVR5cGUgKSAtIDE7XG5cblx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRpZiAoIGRvY3VtZW50LmRvY3VtZW50TW9kZSApIHtcblx0XHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoIGRlbGVnYXRlVHlwZSwgZm9jdXNNYXBwZWRIYW5kbGVyICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGZvY3VzTWFwcGVkSGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZGF0YUhvbGRlciwgZGVsZWdhdGVUeXBlICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIGRhdGFIb2xkZXIsIGRlbGVnYXRlVHlwZSwgYXR0YWNoZXMgKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59ICk7XG5cbi8vIENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrc1xuLy8gc28gdGhhdCBldmVudCBkZWxlZ2F0aW9uIHdvcmtzIGluIGpRdWVyeS5cbi8vIERvIHRoZSBzYW1lIGZvciBwb2ludGVyZW50ZXIvcG9pbnRlcmxlYXZlIGFuZCBwb2ludGVyb3Zlci9wb2ludGVyb3V0XG4vL1xuLy8gU3VwcG9ydDogU2FmYXJpIDcgb25seVxuLy8gU2FmYXJpIHNlbmRzIG1vdXNlZW50ZXIgdG9vIG9mdGVuOyBzZWU6XG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NzAyNThcbi8vIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZyAoaXQgZXhpc3RlZCBpbiBvbGRlciBDaHJvbWUgdmVyc2lvbnMgYXMgd2VsbCkuXG5qUXVlcnkuZWFjaCgge1xuXHRtb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLFxuXHRtb3VzZWxlYXZlOiBcIm1vdXNlb3V0XCIsXG5cdHBvaW50ZXJlbnRlcjogXCJwb2ludGVyb3ZlclwiLFxuXHRwb2ludGVybGVhdmU6IFwicG9pbnRlcm91dFwiXG59LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0ge1xuXHRcdGRlbGVnYXRlVHlwZTogZml4LFxuXHRcdGJpbmRUeXBlOiBmaXgsXG5cblx0XHRoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciByZXQsXG5cdFx0XHRcdHRhcmdldCA9IHRoaXMsXG5cdFx0XHRcdHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0LFxuXHRcdFx0XHRoYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmo7XG5cblx0XHRcdC8vIEZvciBtb3VzZWVudGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuXG5cdFx0XHQvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvd1xuXHRcdFx0aWYgKCAhcmVsYXRlZCB8fCAoIHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0ZWQgKSApICkge1xuXHRcdFx0XHRldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlO1xuXHRcdFx0XHRyZXQgPSBoYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBmaXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdG9uOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0b25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIDEgKTtcblx0fSxcblx0b2ZmOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHtcblx0XHR2YXIgaGFuZGxlT2JqLCB0eXBlO1xuXHRcdGlmICggdHlwZXMgJiYgdHlwZXMucHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkge1xuXG5cdFx0XHQvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50XG5cdFx0XHRoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7XG5cdFx0XHRqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKFxuXHRcdFx0XHRoYW5kbGVPYmoubmFtZXNwYWNlID9cblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUgKyBcIi5cIiArIGhhbmRsZU9iai5uYW1lc3BhY2UgOlxuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSxcblx0XHRcdFx0aGFuZGxlT2JqLnNlbGVjdG9yLFxuXHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlclxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3JdIClcblx0XHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRcdHRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUgXSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggc2VsZWN0b3IgPT09IGZhbHNlIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzIFssIGZuXSApXG5cdFx0XHRmbiA9IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggZm4gPT09IGZhbHNlICkge1xuXHRcdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxudmFyXG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExLCBFZGdlIDEyIC0gMTMgb25seVxuXHQvLyBJbiBJRS9FZGdlIHVzaW5nIHJlZ2V4IGdyb3VwcyBoZXJlIGNhdXNlcyBzZXZlcmUgc2xvd2Rvd25zLlxuXHQvLyBTZWUgaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy8xNzM2NTEyL1xuXHRybm9Jbm5lcmh0bWwgPSAvPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSxcblxuXHQvLyBjaGVja2VkPVwiY2hlY2tlZFwiIG9yIGNoZWNrZWRcblx0cmNoZWNrZWQgPSAvY2hlY2tlZFxccyooPzpbXj1dfD1cXHMqLmNoZWNrZWQuKS9pLFxuXG5cdHJjbGVhblNjcmlwdCA9IC9eXFxzKjwhXFxbQ0RBVEFcXFt8XFxdXFxdPlxccyokL2c7XG5cbi8vIFByZWZlciBhIHRib2R5IG92ZXIgaXRzIHBhcmVudCB0YWJsZSBmb3IgY29udGFpbmluZyBuZXcgcm93c1xuZnVuY3Rpb24gbWFuaXB1bGF0aW9uVGFyZ2V0KCBlbGVtLCBjb250ZW50ICkge1xuXHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRhYmxlXCIgKSAmJlxuXHRcdG5vZGVOYW1lKCBjb250ZW50Lm5vZGVUeXBlICE9PSAxMSA/IGNvbnRlbnQgOiBjb250ZW50LmZpcnN0Q2hpbGQsIFwidHJcIiApICkge1xuXG5cdFx0cmV0dXJuIGpRdWVyeSggZWxlbSApLmNoaWxkcmVuKCBcInRib2R5XCIgKVsgMCBdIHx8IGVsZW07XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuLy8gUmVwbGFjZS9yZXN0b3JlIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBzY3JpcHQgZWxlbWVudHMgZm9yIHNhZmUgRE9NIG1hbmlwdWxhdGlvblxuZnVuY3Rpb24gZGlzYWJsZVNjcmlwdCggZWxlbSApIHtcblx0ZWxlbS50eXBlID0gKCBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSAhPT0gbnVsbCApICsgXCIvXCIgKyBlbGVtLnR5cGU7XG5cdHJldHVybiBlbGVtO1xufVxuZnVuY3Rpb24gcmVzdG9yZVNjcmlwdCggZWxlbSApIHtcblx0aWYgKCAoIGVsZW0udHlwZSB8fCBcIlwiICkuc2xpY2UoIDAsIDUgKSA9PT0gXCJ0cnVlL1wiICkge1xuXHRcdGVsZW0udHlwZSA9IGVsZW0udHlwZS5zbGljZSggNSApO1xuXHR9IGVsc2Uge1xuXHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBcInR5cGVcIiApO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmZ1bmN0aW9uIGNsb25lQ29weUV2ZW50KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBpLCBsLCB0eXBlLCBwZGF0YU9sZCwgdWRhdGFPbGQsIHVkYXRhQ3VyLCBldmVudHM7XG5cblx0aWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIDEuIENvcHkgcHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuXG5cdGlmICggZGF0YVByaXYuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0cGRhdGFPbGQgPSBkYXRhUHJpdi5nZXQoIHNyYyApO1xuXHRcdGV2ZW50cyA9IHBkYXRhT2xkLmV2ZW50cztcblxuXHRcdGlmICggZXZlbnRzICkge1xuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkZXN0LCBcImhhbmRsZSBldmVudHNcIiApO1xuXG5cdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gMi4gQ29weSB1c2VyIGRhdGFcblx0aWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHR1ZGF0YU9sZCA9IGRhdGFVc2VyLmFjY2Vzcyggc3JjICk7XG5cdFx0dWRhdGFDdXIgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgdWRhdGFPbGQgKTtcblxuXHRcdGRhdGFVc2VyLnNldCggZGVzdCwgdWRhdGFDdXIgKTtcblx0fVxufVxuXG4vLyBGaXggSUUgYnVncywgc2VlIHN1cHBvcnQgdGVzdHNcbmZ1bmN0aW9uIGZpeElucHV0KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHQvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi5cblx0aWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7XG5cdFx0ZGVzdC5jaGVja2VkID0gc3JjLmNoZWNrZWQ7XG5cblx0Ly8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnNcblx0fSBlbHNlIGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiB8fCBub2RlTmFtZSA9PT0gXCJ0ZXh0YXJlYVwiICkge1xuXHRcdGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTtcblx0fVxufVxuXG5mdW5jdGlvbiBkb21NYW5pcCggY29sbGVjdGlvbiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKSB7XG5cblx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRhcmdzID0gZmxhdCggYXJncyApO1xuXG5cdHZhciBmcmFnbWVudCwgZmlyc3QsIHNjcmlwdHMsIGhhc1NjcmlwdHMsIG5vZGUsIGRvYyxcblx0XHRpID0gMCxcblx0XHRsID0gY29sbGVjdGlvbi5sZW5ndGgsXG5cdFx0aU5vQ2xvbmUgPSBsIC0gMSxcblx0XHR2YWx1ZSA9IGFyZ3NbIDAgXSxcblx0XHR2YWx1ZUlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdFxuXHRpZiAoIHZhbHVlSXNGdW5jdGlvbiB8fFxuXHRcdFx0KCBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXN1cHBvcnQuY2hlY2tDbG9uZSAmJiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7XG5cdFx0cmV0dXJuIGNvbGxlY3Rpb24uZWFjaCggZnVuY3Rpb24oIGluZGV4ICkge1xuXHRcdFx0dmFyIHNlbGYgPSBjb2xsZWN0aW9uLmVxKCBpbmRleCApO1xuXHRcdFx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdGFyZ3NbIDAgXSA9IHZhbHVlLmNhbGwoIHRoaXMsIGluZGV4LCBzZWxmLmh0bWwoKSApO1xuXHRcdFx0fVxuXHRcdFx0ZG9tTWFuaXAoIHNlbGYsIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCBsICkge1xuXHRcdGZyYWdtZW50ID0gYnVpbGRGcmFnbWVudCggYXJncywgY29sbGVjdGlvblsgMCBdLm93bmVyRG9jdW1lbnQsIGZhbHNlLCBjb2xsZWN0aW9uLCBpZ25vcmVkICk7XG5cdFx0Zmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0aWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHtcblx0XHRcdGZyYWdtZW50ID0gZmlyc3Q7XG5cdFx0fVxuXG5cdFx0Ly8gUmVxdWlyZSBlaXRoZXIgbmV3IGNvbnRlbnQgb3IgYW4gaW50ZXJlc3QgaW4gaWdub3JlZCBlbGVtZW50cyB0byBpbnZva2UgdGhlIGNhbGxiYWNrXG5cdFx0aWYgKCBmaXJzdCB8fCBpZ25vcmVkICkge1xuXHRcdFx0c2NyaXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21lbnQsIFwic2NyaXB0XCIgKSwgZGlzYWJsZVNjcmlwdCApO1xuXHRcdFx0aGFzU2NyaXB0cyA9IHNjcmlwdHMubGVuZ3RoO1xuXG5cdFx0XHQvLyBVc2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtXG5cdFx0XHQvLyBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXBcblx0XHRcdC8vIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICh0cmFjLTgwNzApLlxuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRub2RlID0gZnJhZ21lbnQ7XG5cblx0XHRcdFx0aWYgKCBpICE9PSBpTm9DbG9uZSApIHtcblx0XHRcdFx0XHRub2RlID0galF1ZXJ5LmNsb25lKCBub2RlLCB0cnVlLCB0cnVlICk7XG5cblx0XHRcdFx0XHQvLyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVkIHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggc2NyaXB0cywgZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxsYmFjay5jYWxsKCBjb2xsZWN0aW9uWyBpIF0sIG5vZGUsIGkgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXHRcdFx0XHRkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50O1xuXG5cdFx0XHRcdC8vIFJlLWVuYWJsZSBzY3JpcHRzXG5cdFx0XHRcdGpRdWVyeS5tYXAoIHNjcmlwdHMsIHJlc3RvcmVTY3JpcHQgKTtcblxuXHRcdFx0XHQvLyBFdmFsdWF0ZSBleGVjdXRhYmxlIHNjcmlwdHMgb24gZmlyc3QgZG9jdW1lbnQgaW5zZXJ0aW9uXG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgaGFzU2NyaXB0czsgaSsrICkge1xuXHRcdFx0XHRcdG5vZGUgPSBzY3JpcHRzWyBpIF07XG5cdFx0XHRcdFx0aWYgKCByc2NyaXB0VHlwZS50ZXN0KCBub2RlLnR5cGUgfHwgXCJcIiApICYmXG5cdFx0XHRcdFx0XHQhZGF0YVByaXYuYWNjZXNzKCBub2RlLCBcImdsb2JhbEV2YWxcIiApICYmXG5cdFx0XHRcdFx0XHRqUXVlcnkuY29udGFpbnMoIGRvYywgbm9kZSApICkge1xuXG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUuc3JjICYmICggbm9kZS50eXBlIHx8IFwiXCIgKS50b0xvd2VyQ2FzZSgpICAhPT0gXCJtb2R1bGVcIiApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBPcHRpb25hbCBBSkFYIGRlcGVuZGVuY3ksIGJ1dCB3b24ndCBydW4gc2NyaXB0cyBpZiBub3QgcHJlc2VudFxuXHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5fZXZhbFVybCAmJiAhbm9kZS5ub01vZHVsZSApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuX2V2YWxVcmwoIG5vZGUuc3JjLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRub25jZTogbm9kZS5ub25jZSB8fCBub2RlLmdldEF0dHJpYnV0ZSggXCJub25jZVwiIClcblx0XHRcdFx0XHRcdFx0XHR9LCBkb2MgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBVbndyYXAgYSBDREFUQSBzZWN0aW9uIGNvbnRhaW5pbmcgc2NyaXB0IGNvbnRlbnRzLiBUaGlzIHNob3VsZG4ndCBiZVxuXHRcdFx0XHRcdFx0XHQvLyBuZWVkZWQgYXMgaW4gWE1MIGRvY3VtZW50cyB0aGV5J3JlIGFscmVhZHkgbm90IHZpc2libGUgd2hlblxuXHRcdFx0XHRcdFx0XHQvLyBpbnNwZWN0aW5nIGVsZW1lbnQgY29udGVudHMgYW5kIGluIEhUTUwgZG9jdW1lbnRzIHRoZXkgaGF2ZSBub1xuXHRcdFx0XHRcdFx0XHQvLyBtZWFuaW5nIGJ1dCB3ZSdyZSBwcmVzZXJ2aW5nIHRoYXQgbG9naWMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBjb21wbGV0ZWx5IGluIDQuMC4gU2VlIGdoLTQ5MDQuXG5cdFx0XHRcdFx0XHRcdERPTUV2YWwoIG5vZGUudGV4dENvbnRlbnQucmVwbGFjZSggcmNsZWFuU2NyaXB0LCBcIlwiICksIG5vZGUsIGRvYyApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjb2xsZWN0aW9uO1xufVxuXG5mdW5jdGlvbiByZW1vdmUoIGVsZW0sIHNlbGVjdG9yLCBrZWVwRGF0YSApIHtcblx0dmFyIG5vZGUsXG5cdFx0bm9kZXMgPSBzZWxlY3RvciA/IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBlbGVtICkgOiBlbGVtLFxuXHRcdGkgPSAwO1xuXG5cdGZvciAoIDsgKCBub2RlID0gbm9kZXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRpZiAoICFrZWVwRGF0YSAmJiBub2RlLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBub2RlICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG5vZGUucGFyZW50Tm9kZSApIHtcblx0XHRcdGlmICgga2VlcERhdGEgJiYgaXNBdHRhY2hlZCggbm9kZSApICkge1xuXHRcdFx0XHRzZXRHbG9iYWxFdmFsKCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0fVxuXHRcdFx0bm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBub2RlICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0aHRtbFByZWZpbHRlcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0cmV0dXJuIGh0bWw7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHR2YXIgaSwgbCwgc3JjRWxlbWVudHMsIGRlc3RFbGVtZW50cyxcblx0XHRcdGNsb25lID0gZWxlbS5jbG9uZU5vZGUoIHRydWUgKSxcblx0XHRcdGluUGFnZSA9IGlzQXR0YWNoZWQoIGVsZW0gKTtcblxuXHRcdC8vIEZpeCBJRSBjbG9uaW5nIGlzc3Vlc1xuXHRcdGlmICggIXN1cHBvcnQubm9DbG9uZUNoZWNrZWQgJiYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGVsZW0ubm9kZVR5cGUgPT09IDExICkgJiZcblx0XHRcdFx0IWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXG5cdFx0XHQvLyBXZSBlc2NoZXcgalF1ZXJ5I2ZpbmQgaGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uczpcblx0XHRcdC8vIGh0dHBzOi8vanNwZXJmLmNvbS9nZXRhbGwtdnMtc2l6emxlLzJcblx0XHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTtcblx0XHRcdHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7XG5cblx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmaXhJbnB1dCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb3B5IHRoZSBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lXG5cdFx0aWYgKCBkYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0aWYgKCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdFx0c3JjRWxlbWVudHMgPSBzcmNFbGVtZW50cyB8fCBnZXRBbGwoIGVsZW0gKTtcblx0XHRcdFx0ZGVzdEVsZW1lbnRzID0gZGVzdEVsZW1lbnRzIHx8IGdldEFsbCggY2xvbmUgKTtcblxuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRjbG9uZUNvcHlFdmVudCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxuXHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUsIFwic2NyaXB0XCIgKTtcblx0XHRpZiAoIGRlc3RFbGVtZW50cy5sZW5ndGggPiAwICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggZGVzdEVsZW1lbnRzLCAhaW5QYWdlICYmIGdldEFsbCggZWxlbSwgXCJzY3JpcHRcIiApICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHRoZSBjbG9uZWQgc2V0XG5cdFx0cmV0dXJuIGNsb25lO1xuXHR9LFxuXG5cdGNsZWFuRGF0YTogZnVuY3Rpb24oIGVsZW1zICkge1xuXHRcdHZhciBkYXRhLCBlbGVtLCB0eXBlLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IGVsZW1zWyBpIF0gKSAhPT0gdW5kZWZpbmVkOyBpKysgKSB7XG5cdFx0XHRpZiAoIGFjY2VwdERhdGEoIGVsZW0gKSApIHtcblx0XHRcdFx0aWYgKCAoIGRhdGEgPSBlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0Zm9yICggdHlwZSBpbiBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsWyB0eXBlIF0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBhdm9pZCBqUXVlcnkuZXZlbnQucmVtb3ZlJ3Mgb3ZlcmhlYWRcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGRhdGEuaGFuZGxlICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSApIHtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciApO1xuXHR9LFxuXG5cdHRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS50ZXh0KCB0aGlzICkgOlxuXHRcdFx0XHR0aGlzLmVtcHR5KCkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRwcmVwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0YXJnZXQuZmlyc3RDaGlsZCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRiZWZvcmU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGFmdGVyOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5uZXh0U2libGluZyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gdGhpc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXG5cdFx0XHRcdC8vIFJlbW92ZSBhbnkgcmVtYWluaW5nIG5vZGVzXG5cdFx0XHRcdGVsZW0udGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0ZGF0YUFuZEV2ZW50cyA9IGRhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGZhbHNlIDogZGF0YUFuZEV2ZW50cztcblx0XHRkZWVwRGF0YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09IG51bGwgPyBkYXRhQW5kRXZlbnRzIDogZGVlcERhdGFBbmRFdmVudHM7XG5cblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jbG9uZSggdGhpcywgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0aHRtbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBlbGVtID0gdGhpc1sgMCBdIHx8IHt9LFxuXHRcdFx0XHRpID0gMCxcblx0XHRcdFx0bCA9IHRoaXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uaW5uZXJIVE1MO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZWUgaWYgd2UgY2FuIHRha2UgYSBzaG9ydGN1dCBhbmQganVzdCB1c2UgaW5uZXJIVE1MXG5cdFx0XHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAhcm5vSW5uZXJodG1sLnRlc3QoIHZhbHVlICkgJiZcblx0XHRcdFx0IXdyYXBNYXBbICggcnRhZ05hbWUuZXhlYyggdmFsdWUgKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKSBdICkge1xuXG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIHZhbHVlICk7XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0XHRlbGVtID0gdGhpc1sgaSBdIHx8IHt9O1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cdFx0XHRcdFx0XHRcdGVsZW0uaW5uZXJIVE1MID0gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbSA9IDA7XG5cblx0XHRcdFx0Ly8gSWYgdXNpbmcgaW5uZXJIVE1MIHRocm93cyBhbiBleGNlcHRpb24sIHVzZSB0aGUgZmFsbGJhY2sgbWV0aG9kXG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge31cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHR0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApO1xuXHRcdFx0fVxuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0cmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpZ25vcmVkID0gW107XG5cblx0XHQvLyBNYWtlIHRoZSBjaGFuZ2VzLCByZXBsYWNpbmcgZWFjaCBub24taWdub3JlZCBjb250ZXh0IGVsZW1lbnQgd2l0aCB0aGUgbmV3IGNvbnRlbnRcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuXG5cdFx0XHRpZiAoIGpRdWVyeS5pbkFycmF5KCB0aGlzLCBpZ25vcmVkICkgPCAwICkge1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIHRoaXMgKSApO1xuXHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0XHRwYXJlbnQucmVwbGFjZUNoaWxkKCBlbGVtLCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEZvcmNlIGNhbGxiYWNrIGludm9jYXRpb25cblx0XHR9LCBpZ25vcmVkICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIHtcblx0YXBwZW5kVG86IFwiYXBwZW5kXCIsXG5cdHByZXBlbmRUbzogXCJwcmVwZW5kXCIsXG5cdGluc2VydEJlZm9yZTogXCJiZWZvcmVcIixcblx0aW5zZXJ0QWZ0ZXI6IFwiYWZ0ZXJcIixcblx0cmVwbGFjZUFsbDogXCJyZXBsYWNlV2l0aFwiXG59LCBmdW5jdGlvbiggbmFtZSwgb3JpZ2luYWwgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBlbGVtcyxcblx0XHRcdHJldCA9IFtdLFxuXHRcdFx0aW5zZXJ0ID0galF1ZXJ5KCBzZWxlY3RvciApLFxuXHRcdFx0bGFzdCA9IGluc2VydC5sZW5ndGggLSAxLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7IGkgPD0gbGFzdDsgaSsrICkge1xuXHRcdFx0ZWxlbXMgPSBpID09PSBsYXN0ID8gdGhpcyA6IHRoaXMuY2xvbmUoIHRydWUgKTtcblx0XHRcdGpRdWVyeSggaW5zZXJ0WyBpIF0gKVsgb3JpZ2luYWwgXSggZWxlbXMgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHQvLyAuZ2V0KCkgYmVjYXVzZSBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRwdXNoLmFwcGx5KCByZXQsIGVsZW1zLmdldCgpICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQgKTtcblx0fTtcbn0gKTtcbnZhciBybnVtbm9ucHggPSBuZXcgUmVnRXhwKCBcIl4oXCIgKyBwbnVtICsgXCIpKD8hcHgpW2EteiVdKyRcIiwgXCJpXCIgKTtcblxudmFyIHJjdXN0b21Qcm9wID0gL14tLS87XG5cblxudmFyIGdldFN0eWxlcyA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5LCBGaXJlZm94IDw9MzAgKHRyYWMtMTUwOTgsIHRyYWMtMTQxNTApXG5cdFx0Ly8gSUUgdGhyb3dzIG9uIGVsZW1lbnRzIGNyZWF0ZWQgaW4gcG9wdXBzXG5cdFx0Ly8gRkYgbWVhbndoaWxlIHRocm93cyBvbiBmcmFtZSBlbGVtZW50cyB0aHJvdWdoIFwiZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZVwiXG5cdFx0dmFyIHZpZXcgPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cblx0XHRpZiAoICF2aWV3IHx8ICF2aWV3Lm9wZW5lciApIHtcblx0XHRcdHZpZXcgPSB3aW5kb3c7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSApO1xuXHR9O1xuXG52YXIgc3dhcCA9IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBjYWxsYmFjayApIHtcblx0dmFyIHJldCwgbmFtZSxcblx0XHRvbGQgPSB7fTtcblxuXHQvLyBSZW1lbWJlciB0aGUgb2xkIHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXNcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdG9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdO1xuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9wdGlvbnNbIG5hbWUgXTtcblx0fVxuXG5cdHJldCA9IGNhbGxiYWNrLmNhbGwoIGVsZW0gKTtcblxuXHQvLyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXNcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBdO1xuXHR9XG5cblx0cmV0dXJuIHJldDtcbn07XG5cblxudmFyIHJib3hTdHlsZSA9IG5ldyBSZWdFeHAoIGNzc0V4cGFuZC5qb2luKCBcInxcIiApLCBcImlcIiApO1xuXG5cblxuKCBmdW5jdGlvbigpIHtcblxuXHQvLyBFeGVjdXRpbmcgYm90aCBwaXhlbFBvc2l0aW9uICYgYm94U2l6aW5nUmVsaWFibGUgdGVzdHMgcmVxdWlyZSBvbmx5IG9uZSBsYXlvdXRcblx0Ly8gc28gdGhleSdyZSBleGVjdXRlZCBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgdGhlIHNlY29uZCBjb21wdXRhdGlvbi5cblx0ZnVuY3Rpb24gY29tcHV0ZVN0eWxlVGVzdHMoKSB7XG5cblx0XHQvLyBUaGlzIGlzIGEgc2luZ2xldG9uLCB3ZSBuZWVkIHRvIGV4ZWN1dGUgaXQgb25seSBvbmNlXG5cdFx0aWYgKCAhZGl2ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnRhaW5lci5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4O3dpZHRoOjYwcHg7XCIgK1xuXHRcdFx0XCJtYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjBcIjtcblx0XHRkaXYuc3R5bGUuY3NzVGV4dCA9XG5cdFx0XHRcInBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OnNjcm9sbDtcIiArXG5cdFx0XHRcIm1hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7XCIgK1xuXHRcdFx0XCJ3aWR0aDo2MCU7dG9wOjElXCI7XG5cdFx0ZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBjb250YWluZXIgKS5hcHBlbmRDaGlsZCggZGl2ICk7XG5cblx0XHR2YXIgZGl2U3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZGl2ICk7XG5cdFx0cGl4ZWxQb3NpdGlvblZhbCA9IGRpdlN0eWxlLnRvcCAhPT0gXCIxJVwiO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgRmlyZWZveCA8PTMgLSA0NFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdFZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUubWFyZ2luTGVmdCApID09PSAxMjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIFNhZmFyaSA8PTkuMSAtIDEwLjEsIGlPUyA8PTcuMCAtIDkuM1xuXHRcdC8vIFNvbWUgc3R5bGVzIGNvbWUgYmFjayB3aXRoIHBlcmNlbnRhZ2UgdmFsdWVzLCBldmVuIHRob3VnaCB0aGV5IHNob3VsZG4ndFxuXHRcdGRpdi5zdHlsZS5yaWdodCA9IFwiNjAlXCI7XG5cdFx0cGl4ZWxCb3hTdHlsZXNWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLnJpZ2h0ICkgPT09IDM2O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0XHQvLyBEZXRlY3QgbWlzcmVwb3J0aW5nIG9mIGNvbnRlbnQgZGltZW5zaW9ucyBmb3IgYm94LXNpemluZzpib3JkZXItYm94IGVsZW1lbnRzXG5cdFx0Ym94U2l6aW5nUmVsaWFibGVWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLndpZHRoICkgPT09IDM2O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0Ly8gRGV0ZWN0IG92ZXJmbG93OnNjcm9sbCBzY3Jld2luZXNzIChnaC0zNjk5KVxuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTY0XG5cdFx0Ly8gRG9uJ3QgZ2V0IHRyaWNrZWQgd2hlbiB6b29tIGFmZmVjdHMgb2Zmc2V0V2lkdGggKGdoLTQwMjkpXG5cdFx0ZGl2LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuXHRcdHNjcm9sbGJveFNpemVWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdi5vZmZzZXRXaWR0aCAvIDMgKSA9PT0gMTI7XG5cblx0XHRkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApO1xuXG5cdFx0Ly8gTnVsbGlmeSB0aGUgZGl2IHNvIGl0IHdvdWxkbid0IGJlIHN0b3JlZCBpbiB0aGUgbWVtb3J5IGFuZFxuXHRcdC8vIGl0IHdpbGwgYWxzbyBiZSBhIHNpZ24gdGhhdCBjaGVja3MgYWxyZWFkeSBwZXJmb3JtZWRcblx0XHRkaXYgPSBudWxsO1xuXHR9XG5cblx0ZnVuY3Rpb24gcm91bmRQaXhlbE1lYXN1cmVzKCBtZWFzdXJlICkge1xuXHRcdHJldHVybiBNYXRoLnJvdW5kKCBwYXJzZUZsb2F0KCBtZWFzdXJlICkgKTtcblx0fVxuXG5cdHZhciBwaXhlbFBvc2l0aW9uVmFsLCBib3hTaXppbmdSZWxpYWJsZVZhbCwgc2Nyb2xsYm94U2l6ZVZhbCwgcGl4ZWxCb3hTdHlsZXNWYWwsXG5cdFx0cmVsaWFibGVUckRpbWVuc2lvbnNWYWwsIHJlbGlhYmxlTWFyZ2luTGVmdFZhbCxcblx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICksXG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuXG5cdC8vIEZpbmlzaCBlYXJseSBpbiBsaW1pdGVkIChub24tYnJvd3NlcikgZW52aXJvbm1lbnRzXG5cdGlmICggIWRpdi5zdHlsZSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFN0eWxlIG9mIGNsb25lZCBlbGVtZW50IGFmZmVjdHMgc291cmNlIGVsZW1lbnQgY2xvbmVkICh0cmFjLTg5MDgpXG5cdGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiY29udGVudC1ib3hcIjtcblx0ZGl2LmNsb25lTm9kZSggdHJ1ZSApLnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJcIjtcblx0c3VwcG9ydC5jbGVhckNsb25lU3R5bGUgPSBkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPT09IFwiY29udGVudC1ib3hcIjtcblxuXHRqUXVlcnkuZXh0ZW5kKCBzdXBwb3J0LCB7XG5cdFx0Ym94U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBib3hTaXppbmdSZWxpYWJsZVZhbDtcblx0XHR9LFxuXHRcdHBpeGVsQm94U3R5bGVzOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcGl4ZWxCb3hTdHlsZXNWYWw7XG5cdFx0fSxcblx0XHRwaXhlbFBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcGl4ZWxQb3NpdGlvblZhbDtcblx0XHR9LFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdDogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHJlbGlhYmxlTWFyZ2luTGVmdFZhbDtcblx0XHR9LFxuXHRcdHNjcm9sbGJveFNpemU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBzY3JvbGxib3hTaXplVmFsO1xuXHRcdH0sXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBtaXNyZXBvcnQgYGdldENvbXB1dGVkU3R5bGVgIG9mIHRhYmxlIHJvd3Mgd2l0aCB3aWR0aC9oZWlnaHRcblx0XHQvLyBzZXQgaW4gQ1NTIHdoaWxlIGBvZmZzZXQqYCBwcm9wZXJ0aWVzIHJlcG9ydCBjb3JyZWN0IHZhbHVlcy5cblx0XHQvLyBCZWhhdmlvciBpbiBJRSA5IGlzIG1vcmUgc3VidGxlIHRoYW4gaW4gbmV3ZXIgdmVyc2lvbnMgJiBpdCBwYXNzZXNcblx0XHQvLyBzb21lIHZlcnNpb25zIG9mIHRoaXMgdGVzdDsgbWFrZSBzdXJlIG5vdCB0byBtYWtlIGl0IHBhc3MgdGhlcmUhXG5cdFx0Ly9cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDcwK1xuXHRcdC8vIE9ubHkgRmlyZWZveCBpbmNsdWRlcyBib3JkZXIgd2lkdGhzXG5cdFx0Ly8gaW4gY29tcHV0ZWQgZGltZW5zaW9ucy4gKGdoLTQ1MjkpXG5cdFx0cmVsaWFibGVUckRpbWVuc2lvbnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHRhYmxlLCB0ciwgdHJDaGlsZCwgdHJTdHlsZTtcblx0XHRcdGlmICggcmVsaWFibGVUckRpbWVuc2lvbnNWYWwgPT0gbnVsbCApIHtcblx0XHRcdFx0dGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInRhYmxlXCIgKTtcblx0XHRcdFx0dHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInRyXCIgKTtcblx0XHRcdFx0dHJDaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKTtcblxuXHRcdFx0XHR0YWJsZS5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4O2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZVwiO1xuXHRcdFx0XHR0ci5zdHlsZS5jc3NUZXh0ID0gXCJib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JvcmRlcjoxcHggc29saWRcIjtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgODYrXG5cdFx0XHRcdC8vIEhlaWdodCBzZXQgdGhyb3VnaCBjc3NUZXh0IGRvZXMgbm90IGdldCBhcHBsaWVkLlxuXHRcdFx0XHQvLyBDb21wdXRlZCBoZWlnaHQgdGhlbiBjb21lcyBiYWNrIGFzIDAuXG5cdFx0XHRcdHRyLnN0eWxlLmhlaWdodCA9IFwiMXB4XCI7XG5cdFx0XHRcdHRyQ2hpbGQuc3R5bGUuaGVpZ2h0ID0gXCI5cHhcIjtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDggQ2hyb21lIDg2K1xuXHRcdFx0XHQvLyBJbiBvdXIgYm9keUJhY2tncm91bmQuaHRtbCBpZnJhbWUsXG5cdFx0XHRcdC8vIGRpc3BsYXkgZm9yIGFsbCBkaXYgZWxlbWVudHMgaXMgc2V0IHRvIFwiaW5saW5lXCIsXG5cdFx0XHRcdC8vIHdoaWNoIGNhdXNlcyBhIHByb2JsZW0gb25seSBpbiBBbmRyb2lkIDggQ2hyb21lIDg2LlxuXHRcdFx0XHQvLyBFbnN1cmluZyB0aGUgZGl2IGlzIGBkaXNwbGF5OiBibG9ja2Bcblx0XHRcdFx0Ly8gZ2V0cyBhcm91bmQgdGhpcyBpc3N1ZS5cblx0XHRcdFx0dHJDaGlsZC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuXG5cdFx0XHRcdGRvY3VtZW50RWxlbWVudFxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdGFibGUgKVxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdHIgKVxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdHJDaGlsZCApO1xuXG5cdFx0XHRcdHRyU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggdHIgKTtcblx0XHRcdFx0cmVsaWFibGVUckRpbWVuc2lvbnNWYWwgPSAoIHBhcnNlSW50KCB0clN0eWxlLmhlaWdodCwgMTAgKSArXG5cdFx0XHRcdFx0cGFyc2VJbnQoIHRyU3R5bGUuYm9yZGVyVG9wV2lkdGgsIDEwICkgK1xuXHRcdFx0XHRcdHBhcnNlSW50KCB0clN0eWxlLmJvcmRlckJvdHRvbVdpZHRoLCAxMCApICkgPT09IHRyLm9mZnNldEhlaWdodDtcblxuXHRcdFx0XHRkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIHRhYmxlICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVUckRpbWVuc2lvbnNWYWw7XG5cdFx0fVxuXHR9ICk7XG59ICkoKTtcblxuXG5mdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkge1xuXHR2YXIgd2lkdGgsIG1pbldpZHRoLCBtYXhXaWR0aCwgcmV0LFxuXHRcdGlzQ3VzdG9tUHJvcCA9IHJjdXN0b21Qcm9wLnRlc3QoIG5hbWUgKSxcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNTErXG5cdFx0Ly8gUmV0cmlldmluZyBzdHlsZSBiZWZvcmUgY29tcHV0ZWQgc29tZWhvd1xuXHRcdC8vIGZpeGVzIGFuIGlzc3VlIHdpdGggZ2V0dGluZyB3cm9uZyB2YWx1ZXNcblx0XHQvLyBvbiBkZXRhY2hlZCBlbGVtZW50c1xuXHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRjb21wdXRlZCA9IGNvbXB1dGVkIHx8IGdldFN0eWxlcyggZWxlbSApO1xuXG5cdC8vIGdldFByb3BlcnR5VmFsdWUgaXMgbmVlZGVkIGZvcjpcblx0Ly8gICAuY3NzKCdmaWx0ZXInKSAoSUUgOSBvbmx5LCB0cmFjLTEyNTM3KVxuXHQvLyAgIC5jc3MoJy0tY3VzdG9tUHJvcGVydHkpIChnaC0zMTQ0KVxuXHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTErXG5cdFx0Ly8gSUUgb25seSBzdXBwb3J0cyBgXCJmbG9hdFwiYCBpbiBgZ2V0UHJvcGVydHlWYWx1ZWA7IGluIGNvbXB1dGVkIHN0eWxlc1xuXHRcdC8vIGl0J3Mgb25seSBhdmFpbGFibGUgYXMgYFwiY3NzRmxvYXRcImAuIFdlIG5vIGxvbmdlciBtb2RpZnkgcHJvcGVydGllc1xuXHRcdC8vIHNlbnQgdG8gYC5jc3MoKWAgYXBhcnQgZnJvbSBjYW1lbENhc2luZywgc28gd2UgbmVlZCB0byBjaGVjayBib3RoLlxuXHRcdC8vIE5vcm1hbGx5LCB0aGlzIHdvdWxkIGNyZWF0ZSBkaWZmZXJlbmNlIGluIGJlaGF2aW9yOiBpZlxuXHRcdC8vIGBnZXRQcm9wZXJ0eVZhbHVlYCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZywgdGhlIHZhbHVlIHJldHVybmVkXG5cdFx0Ly8gYnkgYC5jc3MoKWAgd291bGQgYmUgYHVuZGVmaW5lZGAuIFRoaXMgaXMgdXN1YWxseSB0aGUgY2FzZSBmb3Jcblx0XHQvLyBkaXNjb25uZWN0ZWQgZWxlbWVudHMuIEhvd2V2ZXIsIGluIElFIGV2ZW4gZGlzY29ubmVjdGVkIGVsZW1lbnRzXG5cdFx0Ly8gd2l0aCBubyBzdHlsZXMgcmV0dXJuIGBcIm5vbmVcImAgZm9yIGBnZXRQcm9wZXJ0eVZhbHVlKCBcImZsb2F0XCIgKWBcblx0XHRyZXQgPSBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICkgfHwgY29tcHV0ZWRbIG5hbWUgXTtcblxuXHRcdGlmICggaXNDdXN0b21Qcm9wICYmIHJldCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCAxMDUrLCBDaHJvbWUgPD0xMDUrXG5cdFx0XHQvLyBTcGVjIHJlcXVpcmVzIHRyaW1taW5nIHdoaXRlc3BhY2UgZm9yIGN1c3RvbSBwcm9wZXJ0aWVzIChnaC00OTI2KS5cblx0XHRcdC8vIEZpcmVmb3ggb25seSB0cmltcyBsZWFkaW5nIHdoaXRlc3BhY2UuIENocm9tZSBqdXN0IGNvbGxhcHNlc1xuXHRcdFx0Ly8gYm90aCBsZWFkaW5nICYgdHJhaWxpbmcgd2hpdGVzcGFjZSB0byBhIHNpbmdsZSBzcGFjZS5cblx0XHRcdC8vXG5cdFx0XHQvLyBGYWxsIGJhY2sgdG8gYHVuZGVmaW5lZGAgaWYgZW1wdHkgc3RyaW5nIHJldHVybmVkLlxuXHRcdFx0Ly8gVGhpcyBjb2xsYXBzZXMgYSBtaXNzaW5nIGRlZmluaXRpb24gd2l0aCBwcm9wZXJ0eSBkZWZpbmVkXG5cdFx0XHQvLyBhbmQgc2V0IHRvIGFuIGVtcHR5IHN0cmluZyBidXQgdGhlcmUncyBubyBzdGFuZGFyZCBBUElcblx0XHRcdC8vIGFsbG93aW5nIHVzIHRvIGRpZmZlcmVudGlhdGUgdGhlbSB3aXRob3V0IGEgcGVyZm9ybWFuY2UgcGVuYWx0eVxuXHRcdFx0Ly8gYW5kIHJldHVybmluZyBgdW5kZWZpbmVkYCBhbGlnbnMgd2l0aCBvbGRlciBqUXVlcnkuXG5cdFx0XHQvL1xuXHRcdFx0Ly8gcnRyaW1DU1MgdHJlYXRzIFUrMDAwRCBDQVJSSUFHRSBSRVRVUk4gYW5kIFUrMDAwQyBGT1JNIEZFRURcblx0XHRcdC8vIGFzIHdoaXRlc3BhY2Ugd2hpbGUgQ1NTIGRvZXMgbm90LCBidXQgdGhpcyBpcyBub3QgYSBwcm9ibGVtXG5cdFx0XHQvLyBiZWNhdXNlIENTUyBwcmVwcm9jZXNzaW5nIHJlcGxhY2VzIHRoZW0gd2l0aCBVKzAwMEEgTElORSBGRUVEXG5cdFx0XHQvLyAod2hpY2ggKmlzKiBDU1Mgd2hpdGVzcGFjZSlcblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mtc3ludGF4LTMvI2lucHV0LXByZXByb2Nlc3Npbmdcblx0XHRcdHJldCA9IHJldC5yZXBsYWNlKCBydHJpbUNTUywgXCIkMVwiICkgfHwgdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGlmICggcmV0ID09PSBcIlwiICYmICFpc0F0dGFjaGVkKCBlbGVtICkgKSB7XG5cdFx0XHRyZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBBIHRyaWJ1dGUgdG8gdGhlIFwiYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkc1wiXG5cdFx0Ly8gQW5kcm9pZCBCcm93c2VyIHJldHVybnMgcGVyY2VudGFnZSBmb3Igc29tZSB2YWx1ZXMsXG5cdFx0Ly8gYnV0IHdpZHRoIHNlZW1zIHRvIGJlIHJlbGlhYmx5IHBpeGVscy5cblx0XHQvLyBUaGlzIGlzIGFnYWluc3QgdGhlIENTU09NIGRyYWZ0IHNwZWM6XG5cdFx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNyZXNvbHZlZC12YWx1ZXNcblx0XHRpZiAoICFzdXBwb3J0LnBpeGVsQm94U3R5bGVzKCkgJiYgcm51bW5vbnB4LnRlc3QoIHJldCApICYmIHJib3hTdHlsZS50ZXN0KCBuYW1lICkgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXNcblx0XHRcdHdpZHRoID0gc3R5bGUud2lkdGg7XG5cdFx0XHRtaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRoO1xuXHRcdFx0bWF4V2lkdGggPSBzdHlsZS5tYXhXaWR0aDtcblxuXHRcdFx0Ly8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dFxuXHRcdFx0c3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0gcmV0O1xuXHRcdFx0cmV0ID0gY29tcHV0ZWQud2lkdGg7XG5cblx0XHRcdC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXNcblx0XHRcdHN0eWxlLndpZHRoID0gd2lkdGg7XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoO1xuXHRcdFx0c3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmV0ICE9PSB1bmRlZmluZWQgP1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdC8vIElFIHJldHVybnMgekluZGV4IHZhbHVlIGFzIGFuIGludGVnZXIuXG5cdFx0cmV0ICsgXCJcIiA6XG5cdFx0cmV0O1xufVxuXG5cbmZ1bmN0aW9uIGFkZEdldEhvb2tJZiggY29uZGl0aW9uRm4sIGhvb2tGbiApIHtcblxuXHQvLyBEZWZpbmUgdGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9uIHRoZSBmaXJzdCBydW4gaWYgaXQncyByZWFsbHkgbmVlZGVkLlxuXHRyZXR1cm4ge1xuXHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGNvbmRpdGlvbkZuKCkgKSB7XG5cblx0XHRcdFx0Ly8gSG9vayBub3QgbmVlZGVkIChvciBpdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgaXQgZHVlXG5cdFx0XHRcdC8vIHRvIG1pc3NpbmcgZGVwZW5kZW5jeSksIHJlbW92ZSBpdC5cblx0XHRcdFx0ZGVsZXRlIHRoaXMuZ2V0O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhvb2sgbmVlZGVkOyByZWRlZmluZSBpdCBzbyB0aGF0IHRoZSBzdXBwb3J0IHRlc3QgaXMgbm90IGV4ZWN1dGVkIGFnYWluLlxuXHRcdFx0cmV0dXJuICggdGhpcy5nZXQgPSBob29rRm4gKS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fVxuXHR9O1xufVxuXG5cbnZhciBjc3NQcmVmaXhlcyA9IFsgXCJXZWJraXRcIiwgXCJNb3pcIiwgXCJtc1wiIF0sXG5cdGVtcHR5U3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkuc3R5bGUsXG5cdHZlbmRvclByb3BzID0ge307XG5cbi8vIFJldHVybiBhIHZlbmRvci1wcmVmaXhlZCBwcm9wZXJ0eSBvciB1bmRlZmluZWRcbmZ1bmN0aW9uIHZlbmRvclByb3BOYW1lKCBuYW1lICkge1xuXG5cdC8vIENoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXNcblx0dmFyIGNhcE5hbWUgPSBuYW1lWyAwIF0udG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoIDEgKSxcblx0XHRpID0gY3NzUHJlZml4ZXMubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdG5hbWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTtcblx0XHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRcdHJldHVybiBuYW1lO1xuXHRcdH1cblx0fVxufVxuXG4vLyBSZXR1cm4gYSBwb3RlbnRpYWxseS1tYXBwZWQgalF1ZXJ5LmNzc1Byb3BzIG9yIHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eVxuZnVuY3Rpb24gZmluYWxQcm9wTmFtZSggbmFtZSApIHtcblx0dmFyIGZpbmFsID0galF1ZXJ5LmNzc1Byb3BzWyBuYW1lIF0gfHwgdmVuZG9yUHJvcHNbIG5hbWUgXTtcblxuXHRpZiAoIGZpbmFsICkge1xuXHRcdHJldHVybiBmaW5hbDtcblx0fVxuXHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRyZXR1cm4gbmFtZTtcblx0fVxuXHRyZXR1cm4gdmVuZG9yUHJvcHNbIG5hbWUgXSA9IHZlbmRvclByb3BOYW1lKCBuYW1lICkgfHwgbmFtZTtcbn1cblxuXG52YXJcblxuXHQvLyBTd2FwcGFibGUgaWYgZGlzcGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlXG5cdC8vIGV4Y2VwdCBcInRhYmxlXCIsIFwidGFibGUtY2VsbFwiLCBvciBcInRhYmxlLWNhcHRpb25cIlxuXHQvLyBTZWUgaGVyZSBmb3IgZGlzcGxheSB2YWx1ZXM6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2Rpc3BsYXlcblx0cmRpc3BsYXlzd2FwID0gL14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLFxuXHRjc3NTaG93ID0geyBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLCB2aXNpYmlsaXR5OiBcImhpZGRlblwiLCBkaXNwbGF5OiBcImJsb2NrXCIgfSxcblx0Y3NzTm9ybWFsVHJhbnNmb3JtID0ge1xuXHRcdGxldHRlclNwYWNpbmc6IFwiMFwiLFxuXHRcdGZvbnRXZWlnaHQ6IFwiNDAwXCJcblx0fTtcblxuZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIF9lbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7XG5cblx0Ly8gQW55IHJlbGF0aXZlICgrLy0pIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlblxuXHQvLyBub3JtYWxpemVkIGF0IHRoaXMgcG9pbnRcblx0dmFyIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICk7XG5cdHJldHVybiBtYXRjaGVzID9cblxuXHRcdC8vIEd1YXJkIGFnYWluc3QgdW5kZWZpbmVkIFwic3VidHJhY3RcIiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzXG5cdFx0TWF0aC5tYXgoIDAsIG1hdGNoZXNbIDIgXSAtICggc3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSA6XG5cdFx0dmFsdWU7XG59XG5cbmZ1bmN0aW9uIGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBib3gsIGlzQm9yZGVyQm94LCBzdHlsZXMsIGNvbXB1dGVkVmFsICkge1xuXHR2YXIgaSA9IGRpbWVuc2lvbiA9PT0gXCJ3aWR0aFwiID8gMSA6IDAsXG5cdFx0ZXh0cmEgPSAwLFxuXHRcdGRlbHRhID0gMCxcblx0XHRtYXJnaW5EZWx0YSA9IDA7XG5cblx0Ly8gQWRqdXN0bWVudCBtYXkgbm90IGJlIG5lY2Vzc2FyeVxuXHRpZiAoIGJveCA9PT0gKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApICkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgNDsgaSArPSAyICkge1xuXG5cdFx0Ly8gQm90aCBib3ggbW9kZWxzIGV4Y2x1ZGUgbWFyZ2luXG5cdFx0Ly8gQ291bnQgbWFyZ2luIGRlbHRhIHNlcGFyYXRlbHkgdG8gb25seSBhZGQgaXQgYWZ0ZXIgc2Nyb2xsIGd1dHRlciBhZGp1c3RtZW50LlxuXHRcdC8vIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgbmVnYXRpdmUgbWFyZ2lucyB3b3JrIHdpdGggYG91dGVySGVpZ2h0KCB0cnVlIClgIChnaC0zOTgyKS5cblx0XHRpZiAoIGJveCA9PT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdG1hcmdpbkRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIGJveCArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgY29udGVudC1ib3gsIHdlJ3JlIHNlZWtpbmcgXCJwYWRkaW5nXCIgb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiXG5cdFx0aWYgKCAhaXNCb3JkZXJCb3ggKSB7XG5cblx0XHRcdC8vIEFkZCBwYWRkaW5nXG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gRm9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIiwgYWRkIGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwicGFkZGluZ1wiICkge1xuXHRcdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBCdXQgc3RpbGwga2VlcCB0cmFjayBvZiBpdCBvdGhlcndpc2Vcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGV4dHJhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgYm9yZGVyLWJveCAoY29udGVudCArIHBhZGRpbmcgKyBib3JkZXIpLCB3ZSdyZSBzZWVraW5nIFwiY29udGVudFwiIG9yXG5cdFx0Ly8gXCJwYWRkaW5nXCIgb3IgXCJtYXJnaW5cIlxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiwgc3VidHJhY3QgcGFkZGluZ1xuXHRcdFx0aWYgKCBib3ggPT09IFwiY29udGVudFwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiIG9yIFwicGFkZGluZ1wiLCBzdWJ0cmFjdCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFjY291bnQgZm9yIHBvc2l0aXZlIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXIgd2hlbiByZXF1ZXN0ZWQgYnkgcHJvdmlkaW5nIGNvbXB1dGVkVmFsXG5cdGlmICggIWlzQm9yZGVyQm94ICYmIGNvbXB1dGVkVmFsID49IDAgKSB7XG5cblx0XHQvLyBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgYSByb3VuZGVkIHN1bSBvZiBjb250ZW50LCBwYWRkaW5nLCBzY3JvbGwgZ3V0dGVyLCBhbmQgYm9yZGVyXG5cdFx0Ly8gQXNzdW1pbmcgaW50ZWdlciBzY3JvbGwgZ3V0dGVyLCBzdWJ0cmFjdCB0aGUgcmVzdCBhbmQgcm91bmQgZG93blxuXHRcdGRlbHRhICs9IE1hdGgubWF4KCAwLCBNYXRoLmNlaWwoXG5cdFx0XHRlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF0gLVxuXHRcdFx0Y29tcHV0ZWRWYWwgLVxuXHRcdFx0ZGVsdGEgLVxuXHRcdFx0ZXh0cmEgLVxuXHRcdFx0MC41XG5cblx0XHQvLyBJZiBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgdW5rbm93biwgdGhlbiB3ZSBjYW4ndCBkZXRlcm1pbmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlclxuXHRcdC8vIFVzZSBhbiBleHBsaWNpdCB6ZXJvIHRvIGF2b2lkIE5hTiAoZ2gtMzk2NClcblx0XHQpICkgfHwgMDtcblx0fVxuXG5cdHJldHVybiBkZWx0YSArIG1hcmdpbkRlbHRhO1xufVxuXG5mdW5jdGlvbiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICkge1xuXG5cdC8vIFN0YXJ0IHdpdGggY29tcHV0ZWQgc3R5bGVcblx0dmFyIHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLFxuXG5cdFx0Ly8gVG8gYXZvaWQgZm9yY2luZyBhIHJlZmxvdywgb25seSBmZXRjaCBib3hTaXppbmcgaWYgd2UgbmVlZCBpdCAoZ2gtNDMyMikuXG5cdFx0Ly8gRmFrZSBjb250ZW50LWJveCB1bnRpbCB3ZSBrbm93IGl0J3MgbmVlZGVkIHRvIGtub3cgdGhlIHRydWUgdmFsdWUuXG5cdFx0Ym94U2l6aW5nTmVlZGVkID0gIXN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSB8fCBleHRyYSxcblx0XHRpc0JvcmRlckJveCA9IGJveFNpemluZ05lZWRlZCAmJlxuXHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gaXNCb3JkZXJCb3gsXG5cblx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIGRpbWVuc2lvbiwgc3R5bGVzICksXG5cdFx0b2Zmc2V0UHJvcCA9IFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICk7XG5cblx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XG5cdC8vIFJldHVybiBhIGNvbmZvdW5kaW5nIG5vbi1waXhlbCB2YWx1ZSBvciBmZWlnbiBpZ25vcmFuY2UsIGFzIGFwcHJvcHJpYXRlLlxuXHRpZiAoIHJudW1ub25weC50ZXN0KCB2YWwgKSApIHtcblx0XHRpZiAoICFleHRyYSApIHtcblx0XHRcdHJldHVybiB2YWw7XG5cdFx0fVxuXHRcdHZhbCA9IFwiYXV0b1wiO1xuXHR9XG5cblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHQvLyBVc2Ugb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGZvciB3aGVuIGJveCBzaXppbmcgaXMgdW5yZWxpYWJsZS5cblx0Ly8gSW4gdGhvc2UgY2FzZXMsIHRoZSBjb21wdXRlZCB2YWx1ZSBjYW4gYmUgdHJ1c3RlZCB0byBiZSBib3JkZXItYm94LlxuXHRpZiAoICggIXN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSAmJiBpc0JvcmRlckJveCB8fFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgMTAgLSAxMSssIEVkZ2UgMTUgLSAxOCtcblx0XHQvLyBJRS9FZGdlIG1pc3JlcG9ydCBgZ2V0Q29tcHV0ZWRTdHlsZWAgb2YgdGFibGUgcm93cyB3aXRoIHdpZHRoL2hlaWdodFxuXHRcdC8vIHNldCBpbiBDU1Mgd2hpbGUgYG9mZnNldCpgIHByb3BlcnRpZXMgcmVwb3J0IGNvcnJlY3QgdmFsdWVzLlxuXHRcdC8vIEludGVyZXN0aW5nbHksIGluIHNvbWUgY2FzZXMgSUUgOSBkb2Vzbid0IHN1ZmZlciBmcm9tIHRoaXMgaXNzdWUuXG5cdFx0IXN1cHBvcnQucmVsaWFibGVUckRpbWVuc2lvbnMoKSAmJiBub2RlTmFtZSggZWxlbSwgXCJ0clwiICkgfHxcblxuXHRcdC8vIEZhbGwgYmFjayB0byBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgd2hlbiB2YWx1ZSBpcyBcImF1dG9cIlxuXHRcdC8vIFRoaXMgaGFwcGVucyBmb3IgaW5saW5lIGVsZW1lbnRzIHdpdGggbm8gZXhwbGljaXQgc2V0dGluZyAoZ2gtMzU3MSlcblx0XHR2YWwgPT09IFwiYXV0b1wiIHx8XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4xIC0gNC4zIG9ubHlcblx0XHQvLyBBbHNvIHVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIG1pc3JlcG9ydGVkIGlubGluZSBkaW1lbnNpb25zIChnaC0zNjAyKVxuXHRcdCFwYXJzZUZsb2F0KCB2YWwgKSAmJiBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImlubGluZVwiICkgJiZcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGUgZWxlbWVudCBpcyB2aXNpYmxlICYgY29ubmVjdGVkXG5cdFx0ZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblxuXHRcdGlzQm9yZGVyQm94ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIjtcblxuXHRcdC8vIFdoZXJlIGF2YWlsYWJsZSwgb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGFwcHJveGltYXRlIGJvcmRlciBib3ggZGltZW5zaW9ucy5cblx0XHQvLyBXaGVyZSBub3QgYXZhaWxhYmxlIChlLmcuLCBTVkcpLCBhc3N1bWUgdW5yZWxpYWJsZSBib3gtc2l6aW5nIGFuZCBpbnRlcnByZXQgdGhlXG5cdFx0Ly8gcmV0cmlldmVkIHZhbHVlIGFzIGEgY29udGVudCBib3ggZGltZW5zaW9uLlxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBvZmZzZXRQcm9wIGluIGVsZW07XG5cdFx0aWYgKCB2YWx1ZUlzQm9yZGVyQm94ICkge1xuXHRcdFx0dmFsID0gZWxlbVsgb2Zmc2V0UHJvcCBdO1xuXHRcdH1cblx0fVxuXG5cdC8vIE5vcm1hbGl6ZSBcIlwiIGFuZCBhdXRvXG5cdHZhbCA9IHBhcnNlRmxvYXQoIHZhbCApIHx8IDA7XG5cblx0Ly8gQWRqdXN0IGZvciB0aGUgZWxlbWVudCdzIGJveCBtb2RlbFxuXHRyZXR1cm4gKCB2YWwgK1xuXHRcdGJveE1vZGVsQWRqdXN0bWVudChcblx0XHRcdGVsZW0sXG5cdFx0XHRkaW1lbnNpb24sXG5cdFx0XHRleHRyYSB8fCAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICksXG5cdFx0XHR2YWx1ZUlzQm9yZGVyQm94LFxuXHRcdFx0c3R5bGVzLFxuXG5cdFx0XHQvLyBQcm92aWRlIHRoZSBjdXJyZW50IGNvbXB1dGVkIHNpemUgdG8gcmVxdWVzdCBzY3JvbGwgZ3V0dGVyIGNhbGN1bGF0aW9uIChnaC0zNTg5KVxuXHRcdFx0dmFsXG5cdFx0KVxuXHQpICsgXCJweFwiO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQWRkIGluIHN0eWxlIHByb3BlcnR5IGhvb2tzIGZvciBvdmVycmlkaW5nIHRoZSBkZWZhdWx0XG5cdC8vIGJlaGF2aW9yIG9mIGdldHRpbmcgYW5kIHNldHRpbmcgYSBzdHlsZSBwcm9wZXJ0eVxuXHRjc3NIb29rczoge1xuXHRcdG9wYWNpdHk6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdFx0Ly8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYSBudW1iZXIgYmFjayBmcm9tIG9wYWNpdHlcblx0XHRcdFx0XHR2YXIgcmV0ID0gY3VyQ1NTKCBlbGVtLCBcIm9wYWNpdHlcIiApO1xuXHRcdFx0XHRcdHJldHVybiByZXQgPT09IFwiXCIgPyBcIjFcIiA6IHJldDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvLyBEb24ndCBhdXRvbWF0aWNhbGx5IGFkZCBcInB4XCIgdG8gdGhlc2UgcG9zc2libHktdW5pdGxlc3MgcHJvcGVydGllc1xuXHRjc3NOdW1iZXI6IHtcblx0XHRhbmltYXRpb25JdGVyYXRpb25Db3VudDogdHJ1ZSxcblx0XHRhc3BlY3RSYXRpbzogdHJ1ZSxcblx0XHRib3JkZXJJbWFnZVNsaWNlOiB0cnVlLFxuXHRcdGNvbHVtbkNvdW50OiB0cnVlLFxuXHRcdGZsZXhHcm93OiB0cnVlLFxuXHRcdGZsZXhTaHJpbms6IHRydWUsXG5cdFx0Zm9udFdlaWdodDogdHJ1ZSxcblx0XHRncmlkQXJlYTogdHJ1ZSxcblx0XHRncmlkQ29sdW1uOiB0cnVlLFxuXHRcdGdyaWRDb2x1bW5FbmQ6IHRydWUsXG5cdFx0Z3JpZENvbHVtblN0YXJ0OiB0cnVlLFxuXHRcdGdyaWRSb3c6IHRydWUsXG5cdFx0Z3JpZFJvd0VuZDogdHJ1ZSxcblx0XHRncmlkUm93U3RhcnQ6IHRydWUsXG5cdFx0bGluZUhlaWdodDogdHJ1ZSxcblx0XHRvcGFjaXR5OiB0cnVlLFxuXHRcdG9yZGVyOiB0cnVlLFxuXHRcdG9ycGhhbnM6IHRydWUsXG5cdFx0c2NhbGU6IHRydWUsXG5cdFx0d2lkb3dzOiB0cnVlLFxuXHRcdHpJbmRleDogdHJ1ZSxcblx0XHR6b29tOiB0cnVlLFxuXG5cdFx0Ly8gU1ZHLXJlbGF0ZWRcblx0XHRmaWxsT3BhY2l0eTogdHJ1ZSxcblx0XHRmbG9vZE9wYWNpdHk6IHRydWUsXG5cdFx0c3RvcE9wYWNpdHk6IHRydWUsXG5cdFx0c3Ryb2tlTWl0ZXJsaW1pdDogdHJ1ZSxcblx0XHRzdHJva2VPcGFjaXR5OiB0cnVlXG5cdH0sXG5cblx0Ly8gQWRkIGluIHByb3BlcnRpZXMgd2hvc2UgbmFtZXMgeW91IHdpc2ggdG8gZml4IGJlZm9yZVxuXHQvLyBzZXR0aW5nIG9yIGdldHRpbmcgdGhlIHZhbHVlXG5cdGNzc1Byb3BzOiB7fSxcblxuXHQvLyBHZXQgYW5kIHNldCB0aGUgc3R5bGUgcHJvcGVydHkgb24gYSBET00gTm9kZVxuXHRzdHlsZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlLCBleHRyYSApIHtcblxuXHRcdC8vIERvbid0IHNldCBzdHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlc1xuXHRcdGlmICggIWVsZW0gfHwgZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4IHx8ICFlbGVtLnN0eWxlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZVxuXHRcdHZhciByZXQsIHR5cGUsIGhvb2tzLFxuXHRcdFx0b3JpZ05hbWUgPSBjYW1lbENhc2UoIG5hbWUgKSxcblx0XHRcdGlzQ3VzdG9tUHJvcCA9IHJjdXN0b21Qcm9wLnRlc3QoIG5hbWUgKSxcblx0XHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZS4gV2UgZG9uJ3Rcblx0XHQvLyB3YW50IHRvIHF1ZXJ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gR2V0cyBob29rIGZvciB0aGUgcHJlZml4ZWQgdmVyc2lvbiwgdGhlbiB1bnByZWZpeGVkIHZlcnNpb25cblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTtcblxuXHRcdC8vIENoZWNrIGlmIHdlJ3JlIHNldHRpbmcgYSB2YWx1ZVxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHR5cGUgPSB0eXBlb2YgdmFsdWU7XG5cblx0XHRcdC8vIENvbnZlcnQgXCIrPVwiIG9yIFwiLT1cIiB0byByZWxhdGl2ZSBudW1iZXJzICh0cmFjLTczNDUpXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwic3RyaW5nXCIgJiYgKCByZXQgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJiByZXRbIDEgXSApIHtcblx0XHRcdFx0dmFsdWUgPSBhZGp1c3RDU1MoIGVsZW0sIG5hbWUsIHJldCApO1xuXG5cdFx0XHRcdC8vIEZpeGVzIGJ1ZyB0cmFjLTkyMzdcblx0XHRcdFx0dHlwZSA9IFwibnVtYmVyXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IG51bGwgYW5kIE5hTiB2YWx1ZXMgYXJlbid0IHNldCAodHJhYy03MTE2KVxuXHRcdFx0aWYgKCB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlICE9PSB2YWx1ZSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIG51bWJlciB3YXMgcGFzc2VkIGluLCBhZGQgdGhlIHVuaXQgKGV4Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJvcGVydGllcylcblx0XHRcdC8vIFRoZSBpc0N1c3RvbVByb3AgY2hlY2sgY2FuIGJlIHJlbW92ZWQgaW4galF1ZXJ5IDQuMCB3aGVuIHdlIG9ubHkgYXV0by1hcHBlbmRcblx0XHRcdC8vIFwicHhcIiB0byBhIGZldyBoYXJkY29kZWQgdmFsdWVzLlxuXHRcdFx0aWYgKCB0eXBlID09PSBcIm51bWJlclwiICYmICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRcdHZhbHVlICs9IHJldCAmJiByZXRbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIG9yaWdOYW1lIF0gPyBcIlwiIDogXCJweFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGJhY2tncm91bmQtKiBwcm9wcyBhZmZlY3Qgb3JpZ2luYWwgY2xvbmUncyB2YWx1ZXNcblx0XHRcdGlmICggIXN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlICYmIHZhbHVlID09PSBcIlwiICYmIG5hbWUuaW5kZXhPZiggXCJiYWNrZ3JvdW5kXCIgKSA9PT0gMCApIHtcblx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IFwiaW5oZXJpdFwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3RoZXJ3aXNlIGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWVcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fFxuXHRcdFx0XHQoIHZhbHVlID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0aWYgKCBpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRcdFx0c3R5bGUuc2V0UHJvcGVydHkoIG5hbWUsIHZhbHVlICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgbm9uLWNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgZmFsc2UsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE90aGVyd2lzZSBqdXN0IGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgc3R5bGUgb2JqZWN0XG5cdFx0XHRyZXR1cm4gc3R5bGVbIG5hbWUgXTtcblx0XHR9XG5cdH0sXG5cblx0Y3NzOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZXh0cmEsIHN0eWxlcyApIHtcblx0XHR2YXIgdmFsLCBudW0sIGhvb2tzLFxuXHRcdFx0b3JpZ05hbWUgPSBjYW1lbENhc2UoIG5hbWUgKSxcblx0XHRcdGlzQ3VzdG9tUHJvcCA9IHJjdXN0b21Qcm9wLnRlc3QoIG5hbWUgKTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZS4gV2UgZG9uJ3Rcblx0XHQvLyB3YW50IHRvIG1vZGlmeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5XG5cdFx0Ly8gc2luY2UgdGhleSBhcmUgdXNlci1kZWZpbmVkLlxuXHRcdGlmICggIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdG5hbWUgPSBmaW5hbFByb3BOYW1lKCBvcmlnTmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIFRyeSBwcmVmaXhlZCBuYW1lIGZvbGxvd2VkIGJ5IHRoZSB1bnByZWZpeGVkIG5hbWVcblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTtcblxuXHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICkge1xuXHRcdFx0dmFsID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSApO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSwgaWYgYSB3YXkgdG8gZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBleGlzdHMsIHVzZSB0aGF0XG5cdFx0aWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSwgc3R5bGVzICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBcIm5vcm1hbFwiIHRvIGNvbXB1dGVkIHZhbHVlXG5cdFx0aWYgKCB2YWwgPT09IFwibm9ybWFsXCIgJiYgbmFtZSBpbiBjc3NOb3JtYWxUcmFuc2Zvcm0gKSB7XG5cdFx0XHR2YWwgPSBjc3NOb3JtYWxUcmFuc2Zvcm1bIG5hbWUgXTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIG51bWVyaWMgaWYgZm9yY2VkIG9yIGEgcXVhbGlmaWVyIHdhcyBwcm92aWRlZCBhbmQgdmFsIGxvb2tzIG51bWVyaWNcblx0XHRpZiAoIGV4dHJhID09PSBcIlwiIHx8IGV4dHJhICkge1xuXHRcdFx0bnVtID0gcGFyc2VGbG9hdCggdmFsICk7XG5cdFx0XHRyZXR1cm4gZXh0cmEgPT09IHRydWUgfHwgaXNGaW5pdGUoIG51bSApID8gbnVtIHx8IDAgOiB2YWw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbDtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImhlaWdodFwiLCBcIndpZHRoXCIgXSwgZnVuY3Rpb24oIF9pLCBkaW1lbnNpb24gKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgZGltZW5zaW9uIF0gPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQsIGV4dHJhICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHQvLyBDZXJ0YWluIGVsZW1lbnRzIGNhbiBoYXZlIGRpbWVuc2lvbiBpbmZvIGlmIHdlIGludmlzaWJseSBzaG93IHRoZW1cblx0XHRcdFx0Ly8gYnV0IGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQgZGlzcGxheSBzdHlsZSB0aGF0IHdvdWxkIGJlbmVmaXRcblx0XHRcdFx0cmV0dXJuIHJkaXNwbGF5c3dhcC50ZXN0KCBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApICkgJiZcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4K1xuXHRcdFx0XHRcdC8vIFRhYmxlIGNvbHVtbnMgaW4gU2FmYXJpIGhhdmUgbm9uLXplcm8gb2Zmc2V0V2lkdGggJiB6ZXJvXG5cdFx0XHRcdFx0Ly8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggdW5sZXNzIGRpc3BsYXkgaXMgY2hhbmdlZC5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHRcdFx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlXG5cdFx0XHRcdFx0Ly8gaW4gSUUgdGhyb3dzIGFuIGVycm9yLlxuXHRcdFx0XHRcdCggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggfHwgIWVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKSA/XG5cdFx0XHRcdFx0c3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0XHRcdH0gKSA6XG5cdFx0XHRcdFx0Z2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7XG5cdFx0XHR2YXIgbWF0Y2hlcyxcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHRcdFx0Ly8gT25seSByZWFkIHN0eWxlcy5wb3NpdGlvbiBpZiB0aGUgdGVzdCBoYXMgYSBjaGFuY2UgdG8gZmFpbFxuXHRcdFx0XHQvLyB0byBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LlxuXHRcdFx0XHRzY3JvbGxib3hTaXplQnVnZ3kgPSAhc3VwcG9ydC5zY3JvbGxib3hTaXplKCkgJiZcblx0XHRcdFx0XHRzdHlsZXMucG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIixcblxuXHRcdFx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC0zOTkxKVxuXHRcdFx0XHRib3hTaXppbmdOZWVkZWQgPSBzY3JvbGxib3hTaXplQnVnZ3kgfHwgZXh0cmEsXG5cdFx0XHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0c3VidHJhY3QgPSBleHRyYSA/XG5cdFx0XHRcdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0XHRcdFx0ZWxlbSxcblx0XHRcdFx0XHRcdGRpbWVuc2lvbixcblx0XHRcdFx0XHRcdGV4dHJhLFxuXHRcdFx0XHRcdFx0aXNCb3JkZXJCb3gsXG5cdFx0XHRcdFx0XHRzdHlsZXNcblx0XHRcdFx0XHQpIDpcblx0XHRcdFx0XHQwO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB1bnJlbGlhYmxlIGJvcmRlci1ib3ggZGltZW5zaW9ucyBieSBjb21wYXJpbmcgb2Zmc2V0KiB0byBjb21wdXRlZCBhbmRcblx0XHRcdC8vIGZha2luZyBhIGNvbnRlbnQtYm94IHRvIGdldCBib3JkZXIgYW5kIHBhZGRpbmcgKGdoLTM2OTkpXG5cdFx0XHRpZiAoIGlzQm9yZGVyQm94ICYmIHNjcm9sbGJveFNpemVCdWdneSApIHtcblx0XHRcdFx0c3VidHJhY3QgLT0gTWF0aC5jZWlsKFxuXHRcdFx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRcdFx0cGFyc2VGbG9hdCggc3R5bGVzWyBkaW1lbnNpb24gXSApIC1cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgXCJib3JkZXJcIiwgZmFsc2UsIHN0eWxlcyApIC1cblx0XHRcdFx0XHQwLjVcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCB0byBwaXhlbHMgaWYgdmFsdWUgYWRqdXN0bWVudCBpcyBuZWVkZWRcblx0XHRcdGlmICggc3VidHJhY3QgJiYgKCBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiZcblx0XHRcdFx0KCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgIT09IFwicHhcIiApIHtcblxuXHRcdFx0XHRlbGVtLnN0eWxlWyBkaW1lbnNpb24gXSA9IHZhbHVlO1xuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5jc3MoIGVsZW0sIGRpbWVuc2lvbiApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApO1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmNzc0hvb2tzLm1hcmdpbkxlZnQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5MZWZ0LFxuXHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdHJldHVybiAoIHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIgKSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtXG5cdFx0XHRcdFx0c3dhcCggZWxlbSwgeyBtYXJnaW5MZWZ0OiAwIH0sIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblx0XHRcdFx0XHR9IClcblx0XHRcdCkgKyBcInB4XCI7XG5cdFx0fVxuXHR9XG4pO1xuXG4vLyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFuZCBwcm9wZXJ0aWVzXG5qUXVlcnkuZWFjaCgge1xuXHRtYXJnaW46IFwiXCIsXG5cdHBhZGRpbmc6IFwiXCIsXG5cdGJvcmRlcjogXCJXaWR0aFwiXG59LCBmdW5jdGlvbiggcHJlZml4LCBzdWZmaXggKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0gPSB7XG5cdFx0ZXhwYW5kOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgaSA9IDAsXG5cdFx0XHRcdGV4cGFuZGVkID0ge30sXG5cblx0XHRcdFx0Ly8gQXNzdW1lcyBhIHNpbmdsZSBudW1iZXIgaWYgbm90IGEgc3RyaW5nXG5cdFx0XHRcdHBhcnRzID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUuc3BsaXQoIFwiIFwiICkgOiBbIHZhbHVlIF07XG5cblx0XHRcdGZvciAoIDsgaSA8IDQ7IGkrKyApIHtcblx0XHRcdFx0ZXhwYW5kZWRbIHByZWZpeCArIGNzc0V4cGFuZFsgaSBdICsgc3VmZml4IF0gPVxuXHRcdFx0XHRcdHBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGV4cGFuZGVkO1xuXHRcdH1cblx0fTtcblxuXHRpZiAoIHByZWZpeCAhPT0gXCJtYXJnaW5cIiApIHtcblx0XHRqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdLnNldCA9IHNldFBvc2l0aXZlTnVtYmVyO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0Y3NzOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0dmFyIHN0eWxlcywgbGVuLFxuXHRcdFx0XHRtYXAgPSB7fSxcblx0XHRcdFx0aSA9IDA7XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggbmFtZSApICkge1xuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKTtcblx0XHRcdFx0bGVuID0gbmFtZS5sZW5ndGg7XG5cblx0XHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0bWFwWyBuYW1lWyBpIF0gXSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWVbIGkgXSwgZmFsc2UsIHN0eWxlcyApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG1hcDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVlICkgOlxuXHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7XG5cdFx0fSwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH1cbn0gKTtcblxuXG5mdW5jdGlvbiBUd2VlbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKSB7XG5cdHJldHVybiBuZXcgVHdlZW4ucHJvdG90eXBlLmluaXQoIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICk7XG59XG5qUXVlcnkuVHdlZW4gPSBUd2VlbjtcblxuVHdlZW4ucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogVHdlZW4sXG5cdGluaXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZywgdW5pdCApIHtcblx0XHR0aGlzLmVsZW0gPSBlbGVtO1xuXHRcdHRoaXMucHJvcCA9IHByb3A7XG5cdFx0dGhpcy5lYXNpbmcgPSBlYXNpbmcgfHwgalF1ZXJ5LmVhc2luZy5fZGVmYXVsdDtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXHRcdHRoaXMuc3RhcnQgPSB0aGlzLm5vdyA9IHRoaXMuY3VyKCk7XG5cdFx0dGhpcy5lbmQgPSBlbmQ7XG5cdFx0dGhpcy51bml0ID0gdW5pdCB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0fSxcblx0Y3VyOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xuXG5cdFx0cmV0dXJuIGhvb2tzICYmIGhvb2tzLmdldCA/XG5cdFx0XHRob29rcy5nZXQoIHRoaXMgKSA6XG5cdFx0XHRUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KCB0aGlzICk7XG5cdH0sXG5cdHJ1bjogZnVuY3Rpb24oIHBlcmNlbnQgKSB7XG5cdFx0dmFyIGVhc2VkLFxuXHRcdFx0aG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKSB7XG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0galF1ZXJ5LmVhc2luZ1sgdGhpcy5lYXNpbmcgXShcblx0XHRcdFx0cGVyY2VudCwgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogcGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0gcGVyY2VudDtcblx0XHR9XG5cdFx0dGhpcy5ub3cgPSAoIHRoaXMuZW5kIC0gdGhpcy5zdGFydCApICogZWFzZWQgKyB0aGlzLnN0YXJ0O1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuc3RlcCApIHtcblx0XHRcdHRoaXMub3B0aW9ucy5zdGVwLmNhbGwoIHRoaXMuZWxlbSwgdGhpcy5ub3csIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnNldCApIHtcblx0XHRcdGhvb2tzLnNldCggdGhpcyApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KCB0aGlzICk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59O1xuXG5Ud2Vlbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGUgPSBUd2Vlbi5wcm90b3R5cGU7XG5cblR3ZWVuLnByb3BIb29rcyA9IHtcblx0X2RlZmF1bHQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRcdHZhciByZXN1bHQ7XG5cblx0XHRcdC8vIFVzZSBhIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGRpcmVjdGx5IHdoZW4gaXQgaXMgbm90IGEgRE9NIGVsZW1lbnQsXG5cdFx0XHQvLyBvciB3aGVuIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHN0eWxlIHByb3BlcnR5IHRoYXQgZXhpc3RzLlxuXHRcdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICE9PSAxIHx8XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSAhPSBudWxsICYmIHR3ZWVuLmVsZW0uc3R5bGVbIHR3ZWVuLnByb3AgXSA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQYXNzaW5nIGFuIGVtcHR5IHN0cmluZyBhcyBhIDNyZCBwYXJhbWV0ZXIgdG8gLmNzcyB3aWxsIGF1dG9tYXRpY2FsbHlcblx0XHRcdC8vIGF0dGVtcHQgYSBwYXJzZUZsb2F0IGFuZCBmYWxsYmFjayB0byBhIHN0cmluZyBpZiB0aGUgcGFyc2UgZmFpbHMuXG5cdFx0XHQvLyBTaW1wbGUgdmFsdWVzIHN1Y2ggYXMgXCIxMHB4XCIgYXJlIHBhcnNlZCB0byBGbG9hdDtcblx0XHRcdC8vIGNvbXBsZXggdmFsdWVzIHN1Y2ggYXMgXCJyb3RhdGUoMXJhZClcIiBhcmUgcmV0dXJuZWQgYXMtaXMuXG5cdFx0XHRyZXN1bHQgPSBqUXVlcnkuY3NzKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCBcIlwiICk7XG5cblx0XHRcdC8vIEVtcHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgXCJhdXRvXCIgYXJlIGNvbnZlcnRlZCB0byAwLlxuXHRcdFx0cmV0dXJuICFyZXN1bHQgfHwgcmVzdWx0ID09PSBcImF1dG9cIiA/IDAgOiByZXN1bHQ7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblxuXHRcdFx0Ly8gVXNlIHN0ZXAgaG9vayBmb3IgYmFjayBjb21wYXQuXG5cdFx0XHQvLyBVc2UgY3NzSG9vayBpZiBpdHMgdGhlcmUuXG5cdFx0XHQvLyBVc2UgLnN0eWxlIGlmIGF2YWlsYWJsZSBhbmQgdXNlIHBsYWluIHByb3BlcnRpZXMgd2hlcmUgYXZhaWxhYmxlLlxuXHRcdFx0aWYgKCBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdICkge1xuXHRcdFx0XHRqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApO1xuXHRcdFx0fSBlbHNlIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cdFx0XHRcdGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdIHx8XG5cdFx0XHRcdFx0dHdlZW4uZWxlbS5zdHlsZVsgZmluYWxQcm9wTmFtZSggdHdlZW4ucHJvcCApIF0gIT0gbnVsbCApICkge1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVuLnVuaXQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG4vLyBQYW5pYyBiYXNlZCBhcHByb2FjaCB0byBzZXR0aW5nIHRoaW5ncyBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblR3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AgPSBUd2Vlbi5wcm9wSG9va3Muc2Nyb2xsTGVmdCA9IHtcblx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5lYXNpbmcgPSB7XG5cdGxpbmVhcjogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIHA7XG5cdH0sXG5cdHN3aW5nOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gMC41IC0gTWF0aC5jb3MoIHAgKiBNYXRoLlBJICkgLyAyO1xuXHR9LFxuXHRfZGVmYXVsdDogXCJzd2luZ1wiXG59O1xuXG5qUXVlcnkuZnggPSBUd2Vlbi5wcm90b3R5cGUuaW5pdDtcblxuLy8gQmFjayBjb21wYXQgPDEuOCBleHRlbnNpb24gcG9pbnRcbmpRdWVyeS5meC5zdGVwID0ge307XG5cblxuXG5cbnZhclxuXHRmeE5vdywgaW5Qcm9ncmVzcyxcblx0cmZ4dHlwZXMgPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sXG5cdHJydW4gPSAvcXVldWVIb29rcyQvO1xuXG5mdW5jdGlvbiBzY2hlZHVsZSgpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdGlmICggZG9jdW1lbnQuaGlkZGVuID09PSBmYWxzZSAmJiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lICkge1xuXHRcdFx0d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSggc2NoZWR1bGUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d2luZG93LnNldFRpbWVvdXQoIHNjaGVkdWxlLCBqUXVlcnkuZnguaW50ZXJ2YWwgKTtcblx0XHR9XG5cblx0XHRqUXVlcnkuZngudGljaygpO1xuXHR9XG59XG5cbi8vIEFuaW1hdGlvbnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHlcbmZ1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0ZnhOb3cgPSB1bmRlZmluZWQ7XG5cdH0gKTtcblx0cmV0dXJuICggZnhOb3cgPSBEYXRlLm5vdygpICk7XG59XG5cbi8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5pbWF0aW9uXG5mdW5jdGlvbiBnZW5GeCggdHlwZSwgaW5jbHVkZVdpZHRoICkge1xuXHR2YXIgd2hpY2gsXG5cdFx0aSA9IDAsXG5cdFx0YXR0cnMgPSB7IGhlaWdodDogdHlwZSB9O1xuXG5cdC8vIElmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3NzRXhwYW5kIHZhbHVlcyxcblx0Ly8gb3RoZXJ3aXNlIHN0ZXAgdmFsdWUgaXMgMiB0byBza2lwIG92ZXIgTGVmdCBhbmQgUmlnaHRcblx0aW5jbHVkZVdpZHRoID0gaW5jbHVkZVdpZHRoID8gMSA6IDA7XG5cdGZvciAoIDsgaSA8IDQ7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHtcblx0XHR3aGljaCA9IGNzc0V4cGFuZFsgaSBdO1xuXHRcdGF0dHJzWyBcIm1hcmdpblwiICsgd2hpY2ggXSA9IGF0dHJzWyBcInBhZGRpbmdcIiArIHdoaWNoIF0gPSB0eXBlO1xuXHR9XG5cblx0aWYgKCBpbmNsdWRlV2lkdGggKSB7XG5cdFx0YXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlwZTtcblx0fVxuXG5cdHJldHVybiBhdHRycztcbn1cblxuZnVuY3Rpb24gY3JlYXRlVHdlZW4oIHZhbHVlLCBwcm9wLCBhbmltYXRpb24gKSB7XG5cdHZhciB0d2Vlbixcblx0XHRjb2xsZWN0aW9uID0gKCBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXSApLmNvbmNhdCggQW5pbWF0aW9uLnR3ZWVuZXJzWyBcIipcIiBdICksXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGlmICggKCB0d2VlbiA9IGNvbGxlY3Rpb25bIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBwcm9wLCB2YWx1ZSApICkgKSB7XG5cblx0XHRcdC8vIFdlJ3JlIGRvbmUgd2l0aCB0aGlzIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRQcmVmaWx0ZXIoIGVsZW0sIHByb3BzLCBvcHRzICkge1xuXHR2YXIgcHJvcCwgdmFsdWUsIHRvZ2dsZSwgaG9va3MsIG9sZGZpcmUsIHByb3BUd2VlbiwgcmVzdG9yZURpc3BsYXksIGRpc3BsYXksXG5cdFx0aXNCb3ggPSBcIndpZHRoXCIgaW4gcHJvcHMgfHwgXCJoZWlnaHRcIiBpbiBwcm9wcyxcblx0XHRhbmltID0gdGhpcyxcblx0XHRvcmlnID0ge30sXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlLFxuXHRcdGhpZGRlbiA9IGVsZW0ubm9kZVR5cGUgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICksXG5cdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZnhzaG93XCIgKTtcblxuXHQvLyBRdWV1ZS1za2lwcGluZyBhbmltYXRpb25zIGhpamFjayB0aGUgZnggaG9va3Ncblx0aWYgKCAhb3B0cy5xdWV1ZSApIHtcblx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgXCJmeFwiICk7XG5cdFx0aWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkge1xuXHRcdFx0aG9va3MudW5xdWV1ZWQgPSAwO1xuXHRcdFx0b2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggIWhvb2tzLnVucXVldWVkICkge1xuXHRcdFx0XHRcdG9sZGZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aG9va3MudW5xdWV1ZWQrKztcblxuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5zdXJlIHRoZSBjb21wbGV0ZSBoYW5kbGVyIGlzIGNhbGxlZCBiZWZvcmUgdGhpcyBjb21wbGV0ZXNcblx0XHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aG9va3MudW5xdWV1ZWQtLTtcblx0XHRcdFx0aWYgKCAhalF1ZXJ5LnF1ZXVlKCBlbGVtLCBcImZ4XCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRGV0ZWN0IHNob3cvaGlkZSBhbmltYXRpb25zXG5cdGZvciAoIHByb3AgaW4gcHJvcHMgKSB7XG5cdFx0dmFsdWUgPSBwcm9wc1sgcHJvcCBdO1xuXHRcdGlmICggcmZ4dHlwZXMudGVzdCggdmFsdWUgKSApIHtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgcHJvcCBdO1xuXHRcdFx0dG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVlID09PSBcInRvZ2dsZVwiO1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gKCBoaWRkZW4gPyBcImhpZGVcIiA6IFwic2hvd1wiICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJldGVuZCB0byBiZSBoaWRkZW4gaWYgdGhpcyBpcyBhIFwic2hvd1wiIGFuZFxuXHRcdFx0XHQvLyB0aGVyZSBpcyBzdGlsbCBkYXRhIGZyb20gYSBzdG9wcGVkIHNob3cvaGlkZVxuXHRcdFx0XHRpZiAoIHZhbHVlID09PSBcInNob3dcIiAmJiBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gdHJ1ZTtcblxuXHRcdFx0XHQvLyBJZ25vcmUgYWxsIG90aGVyIG5vLW9wIHNob3cvaGlkZSBkYXRhXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG9yaWdbIHByb3AgXSA9IGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gfHwgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQmFpbCBvdXQgaWYgdGhpcyBpcyBhIG5vLW9wIGxpa2UgLmhpZGUoKS5oaWRlKClcblx0cHJvcFR3ZWVuID0gIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wcyApO1xuXHRpZiAoICFwcm9wVHdlZW4gJiYgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIG9yaWcgKSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZXN0cmljdCBcIm92ZXJmbG93XCIgYW5kIFwiZGlzcGxheVwiIHN0eWxlcyBkdXJpbmcgYm94IGFuaW1hdGlvbnNcblx0aWYgKCBpc0JveCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdC8vIFJlY29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUgZG9lcyBub3QgaW5mZXIgdGhlIHNob3J0aGFuZFxuXHRcdC8vIGZyb20gaWRlbnRpY2FsbHktdmFsdWVkIG92ZXJmbG93WCBhbmQgb3ZlcmZsb3dZIGFuZCBFZGdlIGp1c3QgbWlycm9yc1xuXHRcdC8vIHRoZSBvdmVyZmxvd1ggdmFsdWUgdGhlcmUuXG5cdFx0b3B0cy5vdmVyZmxvdyA9IFsgc3R5bGUub3ZlcmZsb3csIHN0eWxlLm92ZXJmbG93WCwgc3R5bGUub3ZlcmZsb3dZIF07XG5cblx0XHQvLyBJZGVudGlmeSBhIGRpc3BsYXkgdHlwZSwgcHJlZmVycmluZyBvbGQgc2hvdy9oaWRlIGRhdGEgb3ZlciB0aGUgQ1NTIGNhc2NhZGVcblx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFTaG93ICYmIGRhdGFTaG93LmRpc3BsYXk7XG5cdFx0aWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkge1xuXHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0fVxuXHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ICkge1xuXHRcdFx0XHRkaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEdldCBub25lbXB0eSB2YWx1ZShzKSBieSB0ZW1wb3JhcmlseSBmb3JjaW5nIHZpc2liaWxpdHlcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5IHx8IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQW5pbWF0ZSBpbmxpbmUgZWxlbWVudHMgYXMgaW5saW5lLWJsb2NrXG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcImlubGluZVwiIHx8IGRpc3BsYXkgPT09IFwiaW5saW5lLWJsb2NrXCIgJiYgcmVzdG9yZURpc3BsYXkgIT0gbnVsbCApIHtcblx0XHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJmbG9hdFwiICkgPT09IFwibm9uZVwiICkge1xuXG5cdFx0XHRcdC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGRpc3BsYXkgdmFsdWUgYXQgdGhlIGVuZCBvZiBwdXJlIHNob3cvaGlkZSBhbmltYXRpb25zXG5cdFx0XHRcdGlmICggIXByb3BUd2VlbiApIHtcblx0XHRcdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5ID0gc3R5bGUuZGlzcGxheTtcblx0XHRcdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGlzcGxheSA9PT0gXCJub25lXCIgPyBcIlwiIDogZGlzcGxheTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBvcHRzLm92ZXJmbG93ICkge1xuXHRcdHN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRzdHlsZS5vdmVyZmxvdyA9IG9wdHMub3ZlcmZsb3dbIDAgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WCA9IG9wdHMub3ZlcmZsb3dbIDEgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WSA9IG9wdHMub3ZlcmZsb3dbIDIgXTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBJbXBsZW1lbnQgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0cHJvcFR3ZWVuID0gZmFsc2U7XG5cdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblxuXHRcdC8vIEdlbmVyYWwgc2hvdy9oaWRlIHNldHVwIGZvciB0aGlzIGVsZW1lbnQgYW5pbWF0aW9uXG5cdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0aWYgKCBkYXRhU2hvdyApIHtcblx0XHRcdFx0aWYgKCBcImhpZGRlblwiIGluIGRhdGFTaG93ICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IGRhdGFTaG93LmhpZGRlbjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIFwiZnhzaG93XCIsIHsgZGlzcGxheTogcmVzdG9yZURpc3BsYXkgfSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdG9yZSBoaWRkZW4vdmlzaWJsZSBmb3IgdG9nZ2xlIHNvIGAuc3RvcCgpLnRvZ2dsZSgpYCBcInJldmVyc2VzXCJcblx0XHRcdGlmICggdG9nZ2xlICkge1xuXHRcdFx0XHRkYXRhU2hvdy5oaWRkZW4gPSAhaGlkZGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTaG93IGVsZW1lbnRzIGJlZm9yZSBhbmltYXRpbmcgdGhlbVxuXHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuXHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRcdC8vIFRoZSBmaW5hbCBzdGVwIG9mIGEgXCJoaWRlXCIgYW5pbWF0aW9uIGlzIGFjdHVhbGx5IGhpZGluZyB0aGUgZWxlbWVudFxuXHRcdFx0XHRpZiAoICFoaWRkZW4gKSB7XG5cdFx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cdFx0XHRcdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIG9yaWdbIHByb3AgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Ly8gUGVyLXByb3BlcnR5IHNldHVwXG5cdFx0cHJvcFR3ZWVuID0gY3JlYXRlVHdlZW4oIGhpZGRlbiA/IGRhdGFTaG93WyBwcm9wIF0gOiAwLCBwcm9wLCBhbmltICk7XG5cdFx0aWYgKCAhKCBwcm9wIGluIGRhdGFTaG93ICkgKSB7XG5cdFx0XHRkYXRhU2hvd1sgcHJvcCBdID0gcHJvcFR3ZWVuLnN0YXJ0O1xuXHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdHByb3BUd2Vlbi5lbmQgPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRcdHByb3BUd2Vlbi5zdGFydCA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkge1xuXHR2YXIgaW5kZXgsIG5hbWUsIGVhc2luZywgdmFsdWUsIGhvb2tzO1xuXG5cdC8vIGNhbWVsQ2FzZSwgc3BlY2lhbEVhc2luZyBhbmQgZXhwYW5kIGNzc0hvb2sgcGFzc1xuXHRmb3IgKCBpbmRleCBpbiBwcm9wcyApIHtcblx0XHRuYW1lID0gY2FtZWxDYXNlKCBpbmRleCApO1xuXHRcdGVhc2luZyA9IHNwZWNpYWxFYXNpbmdbIG5hbWUgXTtcblx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdO1xuXHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdGVhc2luZyA9IHZhbHVlWyAxIF07XG5cdFx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdID0gdmFsdWVbIDAgXTtcblx0XHR9XG5cblx0XHRpZiAoIGluZGV4ICE9PSBuYW1lICkge1xuXHRcdFx0cHJvcHNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBpbmRleCBdO1xuXHRcdH1cblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF07XG5cdFx0aWYgKCBob29rcyAmJiBcImV4cGFuZFwiIGluIGhvb2tzICkge1xuXHRcdFx0dmFsdWUgPSBob29rcy5leHBhbmQoIHZhbHVlICk7XG5cdFx0XHRkZWxldGUgcHJvcHNbIG5hbWUgXTtcblxuXHRcdFx0Ly8gTm90IHF1aXRlICQuZXh0ZW5kLCB0aGlzIHdvbid0IG92ZXJ3cml0ZSBleGlzdGluZyBrZXlzLlxuXHRcdFx0Ly8gUmV1c2luZyAnaW5kZXgnIGJlY2F1c2Ugd2UgaGF2ZSB0aGUgY29ycmVjdCBcIm5hbWVcIlxuXHRcdFx0Zm9yICggaW5kZXggaW4gdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggISggaW5kZXggaW4gcHJvcHMgKSApIHtcblx0XHRcdFx0XHRwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyBpbmRleCBdO1xuXHRcdFx0XHRcdHNwZWNpYWxFYXNpbmdbIGluZGV4IF0gPSBlYXNpbmc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3BlY2lhbEVhc2luZ1sgbmFtZSBdID0gZWFzaW5nO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBBbmltYXRpb24oIGVsZW0sIHByb3BlcnRpZXMsIG9wdGlvbnMgKSB7XG5cdHZhciByZXN1bHQsXG5cdFx0c3RvcHBlZCxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gQW5pbWF0aW9uLnByZWZpbHRlcnMubGVuZ3RoLFxuXHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkuYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRG9uJ3QgbWF0Y2ggZWxlbSBpbiB0aGUgOmFuaW1hdGVkIHNlbGVjdG9yXG5cdFx0XHRkZWxldGUgdGljay5lbGVtO1xuXHRcdH0gKSxcblx0XHR0aWNrID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHZhciBjdXJyZW50VGltZSA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXG5cdFx0XHRcdHJlbWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0aW9uLmR1cmF0aW9uIC0gY3VycmVudFRpbWUgKSxcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDIuMyBvbmx5XG5cdFx0XHRcdC8vIEFyY2hhaWMgY3Jhc2ggYnVnIHdvbid0IGFsbG93IHVzIHRvIHVzZSBgMSAtICggMC41IHx8IDAgKWAgKHRyYWMtMTI0OTcpXG5cdFx0XHRcdHRlbXAgPSByZW1haW5pbmcgLyBhbmltYXRpb24uZHVyYXRpb24gfHwgMCxcblx0XHRcdFx0cGVyY2VudCA9IDEgLSB0ZW1wLFxuXHRcdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRcdGxlbmd0aCA9IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoO1xuXG5cdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggcGVyY2VudCApO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5nIF0gKTtcblxuXHRcdFx0Ly8gSWYgdGhlcmUncyBtb3JlIHRvIGRvLCB5aWVsZFxuXHRcdFx0aWYgKCBwZXJjZW50IDwgMSAmJiBsZW5ndGggKSB7XG5cdFx0XHRcdHJldHVybiByZW1haW5pbmc7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHRoaXMgd2FzIGFuIGVtcHR5IGFuaW1hdGlvbiwgc3ludGhlc2l6ZSBhIGZpbmFsIHByb2dyZXNzIG5vdGlmaWNhdGlvblxuXHRcdFx0aWYgKCAhbGVuZ3RoICkge1xuXHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlc29sdmUgdGhlIGFuaW1hdGlvbiBhbmQgcmVwb3J0IGl0cyBjb25jbHVzaW9uXG5cdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24gXSApO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0YW5pbWF0aW9uID0gZGVmZXJyZWQucHJvbWlzZSgge1xuXHRcdFx0ZWxlbTogZWxlbSxcblx0XHRcdHByb3BzOiBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcGVydGllcyApLFxuXHRcdFx0b3B0czogalF1ZXJ5LmV4dGVuZCggdHJ1ZSwge1xuXHRcdFx0XHRzcGVjaWFsRWFzaW5nOiB7fSxcblx0XHRcdFx0ZWFzaW5nOiBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0XG5cdFx0XHR9LCBvcHRpb25zICksXG5cdFx0XHRvcmlnaW5hbFByb3BlcnRpZXM6IHByb3BlcnRpZXMsXG5cdFx0XHRvcmlnaW5hbE9wdGlvbnM6IG9wdGlvbnMsXG5cdFx0XHRzdGFydFRpbWU6IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXG5cdFx0XHRkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcblx0XHRcdHR3ZWVuczogW10sXG5cdFx0XHRjcmVhdGVUd2VlbjogZnVuY3Rpb24oIHByb3AsIGVuZCApIHtcblx0XHRcdFx0dmFyIHR3ZWVuID0galF1ZXJ5LlR3ZWVuKCBlbGVtLCBhbmltYXRpb24ub3B0cywgcHJvcCwgZW5kLFxuXHRcdFx0XHRcdGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmdbIHByb3AgXSB8fCBhbmltYXRpb24ub3B0cy5lYXNpbmcgKTtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVucy5wdXNoKCB0d2VlbiApO1xuXHRcdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0XHR9LFxuXHRcdFx0c3RvcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7XG5cdFx0XHRcdHZhciBpbmRleCA9IDAsXG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBhcmUgZ29pbmcgdG8gdGhlIGVuZCwgd2Ugd2FudCB0byBydW4gYWxsIHRoZSB0d2VlbnNcblx0XHRcdFx0XHQvLyBvdGhlcndpc2Ugd2Ugc2tpcCB0aGlzIHBhcnRcblx0XHRcdFx0XHRsZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwO1xuXHRcdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3RvcHBlZCA9IHRydWU7XG5cdFx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIDEgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlc29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWU7IG90aGVyd2lzZSwgcmVqZWN0XG5cdFx0XHRcdGlmICggZ290b0VuZCApIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0fSApLFxuXHRcdHByb3BzID0gYW5pbWF0aW9uLnByb3BzO1xuXG5cdHByb3BGaWx0ZXIoIHByb3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7XG5cblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRyZXN1bHQgPSBBbmltYXRpb24ucHJlZmlsdGVyc1sgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24ub3B0cyApO1xuXHRcdGlmICggcmVzdWx0ICkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCByZXN1bHQuc3RvcCApICkge1xuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIGFuaW1hdGlvbi5lbGVtLCBhbmltYXRpb24ub3B0cy5xdWV1ZSApLnN0b3AgPVxuXHRcdFx0XHRcdHJlc3VsdC5zdG9wLmJpbmQoIHJlc3VsdCApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH1cblxuXHRqUXVlcnkubWFwKCBwcm9wcywgY3JlYXRlVHdlZW4sIGFuaW1hdGlvbiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggYW5pbWF0aW9uLm9wdHMuc3RhcnQgKSApIHtcblx0XHRhbmltYXRpb24ub3B0cy5zdGFydC5jYWxsKCBlbGVtLCBhbmltYXRpb24gKTtcblx0fVxuXG5cdC8vIEF0dGFjaCBjYWxsYmFja3MgZnJvbSBvcHRpb25zXG5cdGFuaW1hdGlvblxuXHRcdC5wcm9ncmVzcyggYW5pbWF0aW9uLm9wdHMucHJvZ3Jlc3MgKVxuXHRcdC5kb25lKCBhbmltYXRpb24ub3B0cy5kb25lLCBhbmltYXRpb24ub3B0cy5jb21wbGV0ZSApXG5cdFx0LmZhaWwoIGFuaW1hdGlvbi5vcHRzLmZhaWwgKVxuXHRcdC5hbHdheXMoIGFuaW1hdGlvbi5vcHRzLmFsd2F5cyApO1xuXG5cdGpRdWVyeS5meC50aW1lcihcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aWNrLCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0YW5pbTogYW5pbWF0aW9uLFxuXHRcdFx0cXVldWU6IGFuaW1hdGlvbi5vcHRzLnF1ZXVlXG5cdFx0fSApXG5cdCk7XG5cblx0cmV0dXJuIGFuaW1hdGlvbjtcbn1cblxualF1ZXJ5LkFuaW1hdGlvbiA9IGpRdWVyeS5leHRlbmQoIEFuaW1hdGlvbiwge1xuXG5cdHR3ZWVuZXJzOiB7XG5cdFx0XCIqXCI6IFsgZnVuY3Rpb24oIHByb3AsIHZhbHVlICkge1xuXHRcdFx0dmFyIHR3ZWVuID0gdGhpcy5jcmVhdGVUd2VlbiggcHJvcCwgdmFsdWUgKTtcblx0XHRcdGFkanVzdENTUyggdHdlZW4uZWxlbSwgcHJvcCwgcmNzc051bS5leGVjKCB2YWx1ZSApLCB0d2VlbiApO1xuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH0gXVxuXHR9LFxuXG5cdHR3ZWVuZXI6IGZ1bmN0aW9uKCBwcm9wcywgY2FsbGJhY2sgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBwcm9wcyApICkge1xuXHRcdFx0Y2FsbGJhY2sgPSBwcm9wcztcblx0XHRcdHByb3BzID0gWyBcIipcIiBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwcm9wcyA9IHByb3BzLm1hdGNoKCBybm90aHRtbHdoaXRlICk7XG5cdFx0fVxuXG5cdFx0dmFyIHByb3AsXG5cdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0cHJvcCA9IHByb3BzWyBpbmRleCBdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gPSBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9LFxuXG5cdHByZWZpbHRlcnM6IFsgZGVmYXVsdFByZWZpbHRlciBdLFxuXG5cdHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5kICkge1xuXHRcdGlmICggcHJlcGVuZCApIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5zcGVlZCA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiApIHtcblx0dmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9PT0gXCJvYmplY3RcIiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDoge1xuXHRcdGNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8XG5cdFx0XHRpc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLFxuXHRcdGR1cmF0aW9uOiBzcGVlZCxcblx0XHRlYXNpbmc6IGZuICYmIGVhc2luZyB8fCBlYXNpbmcgJiYgIWlzRnVuY3Rpb24oIGVhc2luZyApICYmIGVhc2luZ1xuXHR9O1xuXG5cdC8vIEdvIHRvIHRoZSBlbmQgc3RhdGUgaWYgZnggYXJlIG9mZlxuXHRpZiAoIGpRdWVyeS5meC5vZmYgKSB7XG5cdFx0b3B0LmR1cmF0aW9uID0gMDtcblxuXHR9IGVsc2Uge1xuXHRcdGlmICggdHlwZW9mIG9wdC5kdXJhdGlvbiAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdGlmICggb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgKSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHNbIG9wdC5kdXJhdGlvbiBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIE5vcm1hbGl6ZSBvcHQucXVldWUgLSB0cnVlL3VuZGVmaW5lZC9udWxsIC0+IFwiZnhcIlxuXHRpZiAoIG9wdC5xdWV1ZSA9PSBudWxsIHx8IG9wdC5xdWV1ZSA9PT0gdHJ1ZSApIHtcblx0XHRvcHQucXVldWUgPSBcImZ4XCI7XG5cdH1cblxuXHQvLyBRdWV1ZWluZ1xuXHRvcHQub2xkID0gb3B0LmNvbXBsZXRlO1xuXG5cdG9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggb3B0Lm9sZCApICkge1xuXHRcdFx0b3B0Lm9sZC5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHQucXVldWUgKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1ZXVlICk7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBvcHQ7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZhZGVUbzogZnVuY3Rpb24oIHNwZWVkLCB0bywgZWFzaW5nLCBjYWxsYmFjayApIHtcblxuXHRcdC8vIFNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMFxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggaXNIaWRkZW5XaXRoaW5UcmVlICkuY3NzKCBcIm9wYWNpdHlcIiwgMCApLnNob3coKVxuXG5cdFx0XHQvLyBBbmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWRcblx0XHRcdC5lbmQoKS5hbmltYXRlKCB7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH0sXG5cdGFuaW1hdGU6IGZ1bmN0aW9uKCBwcm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHR2YXIgZW1wdHkgPSBqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApLFxuXHRcdFx0b3B0YWxsID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApLFxuXHRcdFx0ZG9BbmltYXRpb24gPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBPcGVyYXRlIG9uIGEgY29weSBvZiBwcm9wIHNvIHBlci1wcm9wZXJ0eSBlYXNpbmcgd29uJ3QgYmUgbG9zdFxuXHRcdFx0XHR2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1ZXJ5LmV4dGVuZCgge30sIHByb3AgKSwgb3B0YWxsICk7XG5cblx0XHRcdFx0Ly8gRW1wdHkgYW5pbWF0aW9ucywgb3IgZmluaXNoaW5nIHJlc29sdmVzIGltbWVkaWF0ZWx5XG5cdFx0XHRcdGlmICggZW1wdHkgfHwgZGF0YVByaXYuZ2V0KCB0aGlzLCBcImZpbmlzaFwiICkgKSB7XG5cdFx0XHRcdFx0YW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRkb0FuaW1hdGlvbi5maW5pc2ggPSBkb0FuaW1hdGlvbjtcblxuXHRcdHJldHVybiBlbXB0eSB8fCBvcHRhbGwucXVldWUgPT09IGZhbHNlID9cblx0XHRcdHRoaXMuZWFjaCggZG9BbmltYXRpb24gKSA6XG5cdFx0XHR0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUsIGRvQW5pbWF0aW9uICk7XG5cdH0sXG5cdHN0b3A6IGZ1bmN0aW9uKCB0eXBlLCBjbGVhclF1ZXVlLCBnb3RvRW5kICkge1xuXHRcdHZhciBzdG9wUXVldWUgPSBmdW5jdGlvbiggaG9va3MgKSB7XG5cdFx0XHR2YXIgc3RvcCA9IGhvb2tzLnN0b3A7XG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdHN0b3AoIGdvdG9FbmQgKTtcblx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGdvdG9FbmQgPSBjbGVhclF1ZXVlO1xuXHRcdFx0Y2xlYXJRdWV1ZSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGNsZWFyUXVldWUgKSB7XG5cdFx0XHR0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkZXF1ZXVlID0gdHJ1ZSxcblx0XHRcdFx0aW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArIFwicXVldWVIb29rc1wiLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICk7XG5cblx0XHRcdGlmICggaW5kZXggKSB7XG5cdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgKSB7XG5cdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoIGluZGV4IGluIGRhdGEgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCAmJiBycnVuLnRlc3QoIGluZGV4ICkgKSB7XG5cdFx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJlxuXHRcdFx0XHRcdCggdHlwZSA9PSBudWxsIHx8IHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApICkge1xuXG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggZ290b0VuZCApO1xuXHRcdFx0XHRcdGRlcXVldWUgPSBmYWxzZTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3JjZWQuXG5cdFx0XHQvLyBUaW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3MsIHdoaWNoXG5cdFx0XHQvLyB3aWxsIGRlcXVldWUgYnV0IG9ubHkgaWYgdGhleSB3ZXJlIGdvdG9FbmQuXG5cdFx0XHRpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXHRmaW5pc2g6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdGlmICggdHlwZSAhPT0gZmFsc2UgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGluZGV4LFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICksXG5cdFx0XHRcdHF1ZXVlID0gZGF0YVsgdHlwZSArIFwicXVldWVcIiBdLFxuXHRcdFx0XHRob29rcyA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlSG9va3NcIiBdLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRsZW5ndGggPSBxdWV1ZSA/IHF1ZXVlLmxlbmd0aCA6IDA7XG5cblx0XHRcdC8vIEVuYWJsZSBmaW5pc2hpbmcgZmxhZyBvbiBwcml2YXRlIGRhdGFcblx0XHRcdGRhdGEuZmluaXNoID0gdHJ1ZTtcblxuXHRcdFx0Ly8gRW1wdHkgdGhlIHF1ZXVlIGZpcnN0XG5cdFx0XHRqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIFtdICk7XG5cblx0XHRcdGlmICggaG9va3MgJiYgaG9va3Muc3RvcCApIHtcblx0XHRcdFx0aG9va3Muc3RvcC5jYWxsKCB0aGlzLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhY3RpdmUgYW5pbWF0aW9ucywgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmIHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApIHtcblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYW5pbWF0aW9ucyBpbiB0aGUgb2xkIHF1ZXVlIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0aWYgKCBxdWV1ZVsgaW5kZXggXSAmJiBxdWV1ZVsgaW5kZXggXS5maW5pc2ggKSB7XG5cdFx0XHRcdFx0cXVldWVbIGluZGV4IF0uZmluaXNoLmNhbGwoIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUdXJuIG9mZiBmaW5pc2hpbmcgZmxhZ1xuXHRcdFx0ZGVsZXRlIGRhdGEuZmluaXNoO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcInRvZ2dsZVwiLCBcInNob3dcIiwgXCJoaWRlXCIgXSwgZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHR2YXIgY3NzRm4gPSBqUXVlcnkuZm5bIG5hbWUgXTtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHNwZWVkID09IG51bGwgfHwgdHlwZW9mIHNwZWVkID09PSBcImJvb2xlYW5cIiA/XG5cdFx0XHRjc3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICkgOlxuXHRcdFx0dGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9O1xufSApO1xuXG4vLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRpb25zXG5qUXVlcnkuZWFjaCgge1xuXHRzbGlkZURvd246IGdlbkZ4KCBcInNob3dcIiApLFxuXHRzbGlkZVVwOiBnZW5GeCggXCJoaWRlXCIgKSxcblx0c2xpZGVUb2dnbGU6IGdlbkZ4KCBcInRvZ2dsZVwiICksXG5cdGZhZGVJbjogeyBvcGFjaXR5OiBcInNob3dcIiB9LFxuXHRmYWRlT3V0OiB7IG9wYWNpdHk6IFwiaGlkZVwiIH0sXG5cdGZhZGVUb2dnbGU6IHsgb3BhY2l0eTogXCJ0b2dnbGVcIiB9XG59LCBmdW5jdGlvbiggbmFtZSwgcHJvcHMgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLmFuaW1hdGUoIHByb3BzLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkudGltZXJzID0gW107XG5qUXVlcnkuZngudGljayA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgdGltZXIsXG5cdFx0aSA9IDAsXG5cdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycztcblxuXHRmeE5vdyA9IERhdGUubm93KCk7XG5cblx0Zm9yICggOyBpIDwgdGltZXJzLmxlbmd0aDsgaSsrICkge1xuXHRcdHRpbWVyID0gdGltZXJzWyBpIF07XG5cblx0XHQvLyBSdW4gdGhlIHRpbWVyIGFuZCBzYWZlbHkgcmVtb3ZlIGl0IHdoZW4gZG9uZSAoYWxsb3dpbmcgZm9yIGV4dGVybmFsIHJlbW92YWwpXG5cdFx0aWYgKCAhdGltZXIoKSAmJiB0aW1lcnNbIGkgXSA9PT0gdGltZXIgKSB7XG5cdFx0XHR0aW1lcnMuc3BsaWNlKCBpLS0sIDEgKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoICF0aW1lcnMubGVuZ3RoICkge1xuXHRcdGpRdWVyeS5meC5zdG9wKCk7XG5cdH1cblx0ZnhOb3cgPSB1bmRlZmluZWQ7XG59O1xuXG5qUXVlcnkuZngudGltZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7XG5cdGpRdWVyeS50aW1lcnMucHVzaCggdGltZXIgKTtcblx0alF1ZXJ5LmZ4LnN0YXJ0KCk7XG59O1xuXG5qUXVlcnkuZnguaW50ZXJ2YWwgPSAxMztcbmpRdWVyeS5meC5zdGFydCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aW5Qcm9ncmVzcyA9IHRydWU7XG5cdHNjaGVkdWxlKCk7XG59O1xuXG5qUXVlcnkuZnguc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRpblByb2dyZXNzID0gbnVsbDtcbn07XG5cbmpRdWVyeS5meC5zcGVlZHMgPSB7XG5cdHNsb3c6IDYwMCxcblx0ZmFzdDogMjAwLFxuXG5cdC8vIERlZmF1bHQgc3BlZWRcblx0X2RlZmF1bHQ6IDQwMFxufTtcblxuXG4vLyBCYXNlZCBvZmYgb2YgdGhlIHBsdWdpbiBieSBDbGludCBIZWxmZXJzLCB3aXRoIHBlcm1pc3Npb24uXG5qUXVlcnkuZm4uZGVsYXkgPSBmdW5jdGlvbiggdGltZSwgdHlwZSApIHtcblx0dGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGltZTtcblx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlLCBmdW5jdGlvbiggbmV4dCwgaG9va3MgKSB7XG5cdFx0dmFyIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCggbmV4dCwgdGltZSApO1xuXHRcdGhvb2tzLnN0b3AgPSBmdW5jdGlvbigpIHtcblx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXQgKTtcblx0XHR9O1xuXHR9ICk7XG59O1xuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApLFxuXHRcdHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwic2VsZWN0XCIgKSxcblx0XHRvcHQgPSBzZWxlY3QuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib3B0aW9uXCIgKSApO1xuXG5cdGlucHV0LnR5cGUgPSBcImNoZWNrYm94XCI7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMyBvbmx5XG5cdC8vIERlZmF1bHQgdmFsdWUgZm9yIGEgY2hlY2tib3ggc2hvdWxkIGJlIFwib25cIlxuXHRzdXBwb3J0LmNoZWNrT24gPSBpbnB1dC52YWx1ZSAhPT0gXCJcIjtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gTXVzdCBhY2Nlc3Mgc2VsZWN0ZWRJbmRleCB0byBtYWtlIGRlZmF1bHQgb3B0aW9ucyBzZWxlY3Rcblx0c3VwcG9ydC5vcHRTZWxlY3RlZCA9IG9wdC5zZWxlY3RlZDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gQW4gaW5wdXQgbG9zZXMgaXRzIHZhbHVlIGFmdGVyIGJlY29taW5nIGEgcmFkaW9cblx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0aW5wdXQudmFsdWUgPSBcInRcIjtcblx0aW5wdXQudHlwZSA9IFwicmFkaW9cIjtcblx0c3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09IFwidFwiO1xufSApKCk7XG5cblxudmFyIGJvb2xIb29rLFxuXHRhdHRySGFuZGxlID0galF1ZXJ5LmV4cHIuYXR0ckhhbmRsZTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhdHRyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LmF0dHIsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9LFxuXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBuYW1lICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIHRoaXMsIG5hbWUgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRhdHRyOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGYWxsYmFjayB0byBwcm9wIHdoZW4gYXR0cmlidXRlcyBhcmUgbm90IHN1cHBvcnRlZFxuXHRcdGlmICggdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlID09PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lLCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdC8vIEF0dHJpYnV0ZSBob29rcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgbG93ZXJjYXNlIHZlcnNpb25cblx0XHQvLyBHcmFiIG5lY2Vzc2FyeSBob29rIGlmIG9uZSBpcyBkZWZpbmVkXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5hdHRySG9va3NbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8XG5cdFx0XHRcdCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC50ZXN0KCBuYW1lICkgPyBib29sSG9vayA6IHVuZGVmaW5lZCApO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggdmFsdWUgPT09IG51bGwgKSB7XG5cdFx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVlICsgXCJcIiApO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdC8vIE5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkXG5cdFx0cmV0dXJuIHJldCA9PSBudWxsID8gdW5kZWZpbmVkIDogcmV0O1xuXHR9LFxuXG5cdGF0dHJIb29rczoge1xuXHRcdHR5cGU6IHtcblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICFzdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09IFwicmFkaW9cIiAmJlxuXHRcdFx0XHRcdG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSApIHtcblx0XHRcdFx0XHR2YXIgdmFsID0gZWxlbS52YWx1ZTtcblx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIHZhbHVlICk7XG5cdFx0XHRcdFx0aWYgKCB2YWwgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnZhbHVlID0gdmFsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdHZhciBuYW1lLFxuXHRcdFx0aSA9IDAsXG5cblx0XHRcdC8vIEF0dHJpYnV0ZSBuYW1lcyBjYW4gY29udGFpbiBub24tSFRNTCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnNcblx0XHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2F0dHJpYnV0ZXMtMlxuXHRcdFx0YXR0ck5hbWVzID0gdmFsdWUgJiYgdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblxuXHRcdGlmICggYXR0ck5hbWVzICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHR3aGlsZSAoICggbmFtZSA9IGF0dHJOYW1lc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIG5hbWUgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSG9va3MgZm9yIGJvb2xlYW4gYXR0cmlidXRlc1xuYm9vbEhvb2sgPSB7XG5cdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkge1xuXHRcdGlmICggdmFsdWUgPT09IGZhbHNlICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgYm9vbGVhbiBhdHRyaWJ1dGVzIHdoZW4gc2V0IHRvIGZhbHNlXG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gbmFtZTtcblx0fVxufTtcblxualF1ZXJ5LmVhY2goIGpRdWVyeS5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKCAvXFx3Ky9nICksIGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0dmFyIGdldHRlciA9IGF0dHJIYW5kbGVbIG5hbWUgXSB8fCBqUXVlcnkuZmluZC5hdHRyO1xuXG5cdGF0dHJIYW5kbGVbIG5hbWUgXSA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgcmV0LCBoYW5kbGUsXG5cdFx0XHRsb3dlcmNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cblx0XHRcdC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3AgYnkgdGVtcG9yYXJpbHkgcmVtb3ZpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIHRoZSBnZXR0ZXJcblx0XHRcdGhhbmRsZSA9IGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXTtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IHJldDtcblx0XHRcdHJldCA9IGdldHRlciggZWxlbSwgbmFtZSwgaXNYTUwgKSAhPSBudWxsID9cblx0XHRcdFx0bG93ZXJjYXNlTmFtZSA6XG5cdFx0XHRcdG51bGw7XG5cdFx0XHRhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSBoYW5kbGU7XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH07XG59ICk7XG5cblxuXG5cbnZhciByZm9jdXNhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmNsaWNrYWJsZSA9IC9eKD86YXxhcmVhKSQvaTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9LFxuXG5cdHJlbW92ZVByb3A6IGZ1bmN0aW9uKCBuYW1lICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZGVsZXRlIHRoaXNbIGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZSBdO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgcHJvcGVydGllcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXG5cdFx0XHQvLyBGaXggbmFtZSBhbmQgYXR0YWNoIGhvb2tzXG5cdFx0XHRuYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lO1xuXHRcdFx0aG9va3MgPSBqUXVlcnkucHJvcEhvb2tzWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICggZWxlbVsgbmFtZSBdID0gdmFsdWUgKTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZWxlbVsgbmFtZSBdO1xuXHR9LFxuXG5cdHByb3BIb29rczoge1xuXHRcdHRhYkluZGV4OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0XHRcdFx0Ly8gZWxlbS50YWJJbmRleCBkb2Vzbid0IGFsd2F5cyByZXR1cm4gdGhlXG5cdFx0XHRcdC8vIGNvcnJlY3QgdmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBleHBsaWNpdGx5IHNldFxuXHRcdFx0XHQvLyBVc2UgcHJvcGVyIGF0dHJpYnV0ZSByZXRyaWV2YWwgKHRyYWMtMTIwNzIpXG5cdFx0XHRcdHZhciB0YWJpbmRleCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidGFiaW5kZXhcIiApO1xuXG5cdFx0XHRcdGlmICggdGFiaW5kZXggKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KCB0YWJpbmRleCwgMTAgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRyZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fFxuXHRcdFx0XHRcdHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmXG5cdFx0XHRcdFx0ZWxlbS5ocmVmXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRwcm9wRml4OiB7XG5cdFx0XCJmb3JcIjogXCJodG1sRm9yXCIsXG5cdFx0XCJjbGFzc1wiOiBcImNsYXNzTmFtZVwiXG5cdH1cbn0gKTtcblxuLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG4vLyBBY2Nlc3NpbmcgdGhlIHNlbGVjdGVkSW5kZXggcHJvcGVydHlcbi8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0IHNldHRpbmcgc2VsZWN0ZWRcbi8vIG9uIHRoZSBvcHRpb25cbi8vIFRoZSBnZXR0ZXIgZW5zdXJlcyBhIGRlZmF1bHQgb3B0aW9uIGlzIHNlbGVjdGVkXG4vLyB3aGVuIGluIGFuIG9wdGdyb3VwXG4vLyBlc2xpbnQgcnVsZSBcIm5vLXVudXNlZC1leHByZXNzaW9uc1wiIGlzIGRpc2FibGVkIGZvciB0aGlzIGNvZGVcbi8vIHNpbmNlIGl0IGNvbnNpZGVycyBzdWNoIGFjY2Vzc2lvbnMgbm9vcFxuaWYgKCAhc3VwcG9ydC5vcHRTZWxlY3RlZCApIHtcblx0alF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCAmJiBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdHBhcmVudC5zZWxlY3RlZEluZGV4O1xuXG5cdFx0XHRcdGlmICggcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxualF1ZXJ5LmVhY2goIFtcblx0XCJ0YWJJbmRleFwiLFxuXHRcInJlYWRPbmx5XCIsXG5cdFwibWF4TGVuZ3RoXCIsXG5cdFwiY2VsbFNwYWNpbmdcIixcblx0XCJjZWxsUGFkZGluZ1wiLFxuXHRcInJvd1NwYW5cIixcblx0XCJjb2xTcGFuXCIsXG5cdFwidXNlTWFwXCIsXG5cdFwiZnJhbWVCb3JkZXJcIixcblx0XCJjb250ZW50RWRpdGFibGVcIlxuXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkgXSA9IHRoaXM7XG59ICk7XG5cblxuXG5cblx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2UgYWNjb3JkaW5nIHRvIEhUTUwgc3BlY1xuXHQvLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLWFzY2lpLXdoaXRlc3BhY2Vcblx0ZnVuY3Rpb24gc3RyaXBBbmRDb2xsYXBzZSggdmFsdWUgKSB7XG5cdFx0dmFyIHRva2VucyA9IHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdFx0cmV0dXJuIHRva2Vucy5qb2luKCBcIiBcIiApO1xuXHR9XG5cblxuZnVuY3Rpb24gZ2V0Q2xhc3MoIGVsZW0gKSB7XG5cdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSAmJiBlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHwgXCJcIjtcbn1cblxuZnVuY3Rpb24gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICkge1xuXHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHR9XG5cdHJldHVybiBbXTtcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc05hbWVzLCBjdXIsIGN1clZhbHVlLCBjbGFzc05hbWUsIGksIGZpbmFsVmFsdWU7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuYWRkQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGNsYXNzTmFtZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3NOYW1lcy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXHRcdFx0XHRjdXIgPSB0aGlzLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGNsYXNzTmFtZXMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpIF07XG5cdFx0XHRcdFx0XHRpZiAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXNzTmFtZSArIFwiIFwiICkgPCAwICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgKz0gY2xhc3NOYW1lICsgXCIgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy5cblx0XHRcdFx0XHRmaW5hbFZhbHVlID0gc3RyaXBBbmRDb2xsYXBzZSggY3VyICk7XG5cdFx0XHRcdFx0aWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHtcblx0XHRcdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsIGZpbmFsVmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc05hbWVzLCBjdXIsIGN1clZhbHVlLCBjbGFzc05hbWUsIGksIGZpbmFsVmFsdWU7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hdHRyKCBcImNsYXNzXCIsIFwiXCIgKTtcblx0XHR9XG5cblx0XHRjbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzTmFtZXMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIHRoaXMgKTtcblxuXHRcdFx0XHQvLyBUaGlzIGV4cHJlc3Npb24gaXMgaGVyZSBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAoc2VlIGFkZENsYXNzKVxuXHRcdFx0XHRjdXIgPSB0aGlzLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGNsYXNzTmFtZXMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpIF07XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSAqYWxsKiBpbnN0YW5jZXNcblx0XHRcdFx0XHRcdHdoaWxlICggY3VyLmluZGV4T2YoIFwiIFwiICsgY2xhc3NOYW1lICsgXCIgXCIgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgPSBjdXIucmVwbGFjZSggXCIgXCIgKyBjbGFzc05hbWUgKyBcIiBcIiwgXCIgXCIgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkge1xuXHRcdHZhciBjbGFzc05hbWVzLCBjbGFzc05hbWUsIGksIHNlbGYsXG5cdFx0XHR0eXBlID0gdHlwZW9mIHZhbHVlLFxuXHRcdFx0aXNWYWxpZFZhbHVlID0gdHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKFxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIHRoaXMsIGksIGdldENsYXNzKCB0aGlzICksIHN0YXRlVmFsICksXG5cdFx0XHRcdFx0c3RhdGVWYWxcblx0XHRcdFx0KTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRpZiAoIHR5cGVvZiBzdGF0ZVZhbCA9PT0gXCJib29sZWFuXCIgJiYgaXNWYWxpZFZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlVmFsID8gdGhpcy5hZGRDbGFzcyggdmFsdWUgKSA6IHRoaXMucmVtb3ZlQ2xhc3MoIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NOYW1lcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGlzVmFsaWRWYWx1ZSApIHtcblxuXHRcdFx0XHQvLyBUb2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lc1xuXHRcdFx0XHRzZWxmID0galF1ZXJ5KCB0aGlzICk7XG5cblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBjbGFzc05hbWVzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRcdGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkgXTtcblxuXHRcdFx0XHRcdC8vIENoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBzZXBhcmF0ZWQgbGlzdFxuXHRcdFx0XHRcdGlmICggc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICkgKSB7XG5cdFx0XHRcdFx0XHRzZWxmLnJlbW92ZUNsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2VsZi5hZGRDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdC8vIFRvZ2dsZSB3aG9sZSBjbGFzcyBuYW1lXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0XHRjbGFzc05hbWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXHRcdFx0XHRpZiAoIGNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGNsYXNzTmFtZSBpZiBzZXRcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiLCBjbGFzc05hbWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIGNsYXNzIG5hbWUgb3IgaWYgd2UncmUgcGFzc2VkIGBmYWxzZWAsXG5cdFx0XHRcdC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBicmluZyBiYWNrIHdoYXRldmVyIHdhcyBwcmV2aW91c2x5IHNhdmVkIChpZiBhbnl0aGluZyksXG5cdFx0XHRcdC8vIGZhbGxpbmcgYmFjayB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vdGhpbmcgd2FzIHN0b3JlZC5cblx0XHRcdFx0aWYgKCB0aGlzLnNldEF0dHJpYnV0ZSApIHtcblx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lIHx8IHZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRcdFx0XHRcdFwiXCIgOlxuXHRcdFx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiICkgfHwgXCJcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0aGFzQ2xhc3M6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgY2xhc3NOYW1lLCBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRjbGFzc05hbWUgPSBcIiBcIiArIHNlbGVjdG9yICsgXCIgXCI7XG5cdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdCggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBnZXRDbGFzcyggZWxlbSApICkgKyBcIiBcIiApLmluZGV4T2YoIGNsYXNzTmFtZSApID4gLTEgKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgcnJldHVybiA9IC9cXHIvZztcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHR2YWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgaG9va3MsIHJldCwgdmFsdWVJc0Z1bmN0aW9uLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXTtcblxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyBlbGVtLnR5cGUgXSB8fFxuXHRcdFx0XHRcdGpRdWVyeS52YWxIb29rc1sgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07XG5cblx0XHRcdFx0aWYgKCBob29rcyAmJlxuXHRcdFx0XHRcdFwiZ2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0XHQoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgXCJ2YWx1ZVwiICkgKSAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXQgPSBlbGVtLnZhbHVlO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSBtb3N0IGNvbW1vbiBzdHJpbmcgY2FzZXNcblx0XHRcdFx0aWYgKCB0eXBlb2YgcmV0ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0XHRcdHJldHVybiByZXQucmVwbGFjZSggcnJldHVybiwgXCJcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSGFuZGxlIGNhc2VzIHdoZXJlIHZhbHVlIGlzIG51bGwvdW5kZWYgb3IgbnVtYmVyXG5cdFx0XHRcdHJldHVybiByZXQgPT0gbnVsbCA/IFwiXCIgOiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YWx1ZUlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHR2YXIgdmFsO1xuXG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlLmNhbGwoIHRoaXMsIGksIGpRdWVyeSggdGhpcyApLnZhbCgpICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVHJlYXQgbnVsbC91bmRlZmluZWQgYXMgXCJcIjsgY29udmVydCBudW1iZXJzIHRvIHN0cmluZ1xuXHRcdFx0aWYgKCB2YWwgPT0gbnVsbCApIHtcblx0XHRcdFx0dmFsID0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggdHlwZW9mIHZhbCA9PT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0dmFsICs9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIEFycmF5LmlzQXJyYXkoIHZhbCApICkge1xuXHRcdFx0XHR2YWwgPSBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSArIFwiXCI7XG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblxuXHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIHRoaXMudHlwZSBdIHx8IGpRdWVyeS52YWxIb29rc1sgdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07XG5cblx0XHRcdC8vIElmIHNldCByZXR1cm5zIHVuZGVmaW5lZCwgZmFsbCBiYWNrIHRvIG5vcm1hbCBzZXR0aW5nXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKCBcInNldFwiIGluIGhvb2tzICkgfHwgaG9va3Muc2V0KCB0aGlzLCB2YWwsIFwidmFsdWVcIiApID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHRoaXMudmFsdWUgPSB2YWw7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0dmFsSG9va3M6IHtcblx0XHRvcHRpb246IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0dmFyIHZhbCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidmFsdWVcIiApO1xuXHRcdFx0XHRyZXR1cm4gdmFsICE9IG51bGwgP1xuXHRcdFx0XHRcdHZhbCA6XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTEwIC0gMTEgb25seVxuXHRcdFx0XHRcdC8vIG9wdGlvbi50ZXh0IHRocm93cyBleGNlcHRpb25zICh0cmFjLTE0Njg2LCB0cmFjLTE0ODU4KVxuXHRcdFx0XHRcdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRlc3BhY2Vcblx0XHRcdFx0XHRzdHJpcEFuZENvbGxhcHNlKCBqUXVlcnkudGV4dCggZWxlbSApICk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRzZWxlY3Q6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciB2YWx1ZSwgb3B0aW9uLCBpLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0aW5kZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgsXG5cdFx0XHRcdFx0b25lID0gZWxlbS50eXBlID09PSBcInNlbGVjdC1vbmVcIixcblx0XHRcdFx0XHR2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sXG5cdFx0XHRcdFx0bWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0aWYgKCBpbmRleCA8IDAgKSB7XG5cdFx0XHRcdFx0aSA9IG1heDtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGkgPSBvbmUgPyBpbmRleCA6IDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zXG5cdFx0XHRcdGZvciAoIDsgaSA8IG1heDsgaSsrICkge1xuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0Ly8gSUU4LTkgZG9lc24ndCB1cGRhdGUgc2VsZWN0ZWQgYWZ0ZXIgZm9ybSByZXNldCAodHJhYy0yNTUxKVxuXHRcdFx0XHRcdGlmICggKCBvcHRpb24uc2VsZWN0ZWQgfHwgaSA9PT0gaW5kZXggKSAmJlxuXG5cdFx0XHRcdFx0XHRcdC8vIERvbid0IHJldHVybiBvcHRpb25zIHRoYXQgYXJlIGRpc2FibGVkIG9yIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXBcblx0XHRcdFx0XHRcdFx0IW9wdGlvbi5kaXNhYmxlZCAmJlxuXHRcdFx0XHRcdFx0XHQoICFvcHRpb24ucGFyZW50Tm9kZS5kaXNhYmxlZCB8fFxuXHRcdFx0XHRcdFx0XHRcdCFub2RlTmFtZSggb3B0aW9uLnBhcmVudE5vZGUsIFwib3B0Z3JvdXBcIiApICkgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEdldCB0aGUgc3BlY2lmaWMgdmFsdWUgZm9yIHRoZSBvcHRpb25cblx0XHRcdFx0XHRcdHZhbHVlID0galF1ZXJ5KCBvcHRpb24gKS52YWwoKTtcblxuXHRcdFx0XHRcdFx0Ly8gV2UgZG9uJ3QgbmVlZCBhbiBhcnJheSBmb3Igb25lIHNlbGVjdHNcblx0XHRcdFx0XHRcdGlmICggb25lICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIE11bHRpLVNlbGVjdHMgcmV0dXJuIGFuIGFycmF5XG5cdFx0XHRcdFx0XHR2YWx1ZXMucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWVzO1xuXHRcdFx0fSxcblxuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBvcHRpb25TZXQsIG9wdGlvbixcblx0XHRcdFx0XHRvcHRpb25zID0gZWxlbS5vcHRpb25zLFxuXHRcdFx0XHRcdHZhbHVlcyA9IGpRdWVyeS5tYWtlQXJyYXkoIHZhbHVlICksXG5cdFx0XHRcdFx0aSA9IG9wdGlvbnMubGVuZ3RoO1xuXG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbmQtYXNzaWduICovXG5cblx0XHRcdFx0XHRpZiAoIG9wdGlvbi5zZWxlY3RlZCA9XG5cdFx0XHRcdFx0XHRqUXVlcnkuaW5BcnJheSggalF1ZXJ5LnZhbEhvb2tzLm9wdGlvbi5nZXQoIG9wdGlvbiApLCB2YWx1ZXMgKSA+IC0xXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRvcHRpb25TZXQgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tY29uZC1hc3NpZ24gKi9cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEZvcmNlIGJyb3dzZXJzIHRvIGJlaGF2ZSBjb25zaXN0ZW50bHkgd2hlbiBub24tbWF0Y2hpbmcgdmFsdWUgaXMgc2V0XG5cdFx0XHRcdGlmICggIW9wdGlvblNldCApIHtcblx0XHRcdFx0XHRlbGVtLnNlbGVjdGVkSW5kZXggPSAtMTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdmFsdWVzO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBSYWRpb3MgYW5kIGNoZWNrYm94ZXMgZ2V0dGVyL3NldHRlclxualF1ZXJ5LmVhY2goIFsgXCJyYWRpb1wiLCBcImNoZWNrYm94XCIgXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS52YWxIb29rc1sgdGhpcyBdID0ge1xuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLmNoZWNrZWQgPSBqUXVlcnkuaW5BcnJheSggalF1ZXJ5KCBlbGVtICkudmFsKCksIHZhbHVlICkgPiAtMSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0aWYgKCAhc3VwcG9ydC5jaGVja09uICkge1xuXHRcdGpRdWVyeS52YWxIb29rc1sgdGhpcyBdLmdldCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBcInZhbHVlXCIgKSA9PT0gbnVsbCA/IFwib25cIiA6IGVsZW0udmFsdWU7XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG4vLyBSZXR1cm4galF1ZXJ5IGZvciBhdHRyaWJ1dGVzLW9ubHkgaW5jbHVzaW9uXG52YXIgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG5cbnZhciBub25jZSA9IHsgZ3VpZDogRGF0ZS5ub3coKSB9O1xuXG52YXIgcnF1ZXJ5ID0gKCAvXFw/LyApO1xuXG5cblxuLy8gQ3Jvc3MtYnJvd3NlciB4bWwgcGFyc2luZ1xualF1ZXJ5LnBhcnNlWE1MID0gZnVuY3Rpb24oIGRhdGEgKSB7XG5cdHZhciB4bWwsIHBhcnNlckVycm9yRWxlbTtcblx0aWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIElFIHRocm93cyBvbiBwYXJzZUZyb21TdHJpbmcgd2l0aCBpbnZhbGlkIGlucHV0LlxuXHR0cnkge1xuXHRcdHhtbCA9ICggbmV3IHdpbmRvdy5ET01QYXJzZXIoKSApLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgXCJ0ZXh0L3htbFwiICk7XG5cdH0gY2F0Y2ggKCBlICkge31cblxuXHRwYXJzZXJFcnJvckVsZW0gPSB4bWwgJiYgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcInBhcnNlcmVycm9yXCIgKVsgMCBdO1xuXHRpZiAoICF4bWwgfHwgcGFyc2VyRXJyb3JFbGVtICkge1xuXHRcdGpRdWVyeS5lcnJvciggXCJJbnZhbGlkIFhNTDogXCIgKyAoXG5cdFx0XHRwYXJzZXJFcnJvckVsZW0gP1xuXHRcdFx0XHRqUXVlcnkubWFwKCBwYXJzZXJFcnJvckVsZW0uY2hpbGROb2RlcywgZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0XHRcdHJldHVybiBlbC50ZXh0Q29udGVudDtcblx0XHRcdFx0fSApLmpvaW4oIFwiXFxuXCIgKSA6XG5cdFx0XHRcdGRhdGFcblx0XHQpICk7XG5cdH1cblx0cmV0dXJuIHhtbDtcbn07XG5cblxudmFyIHJmb2N1c01vcnBoID0gL14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLFxuXHRzdG9wUHJvcGFnYXRpb25DYWxsYmFjayA9IGZ1bmN0aW9uKCBlICkge1xuXHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH07XG5cbmpRdWVyeS5leHRlbmQoIGpRdWVyeS5ldmVudCwge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCBldmVudCwgZGF0YSwgZWxlbSwgb25seUhhbmRsZXJzICkge1xuXG5cdFx0dmFyIGksIGN1ciwgdG1wLCBidWJibGVUeXBlLCBvbnR5cGUsIGhhbmRsZSwgc3BlY2lhbCwgbGFzdEVsZW1lbnQsXG5cdFx0XHRldmVudFBhdGggPSBbIGVsZW0gfHwgZG9jdW1lbnQgXSxcblx0XHRcdHR5cGUgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwidHlwZVwiICkgPyBldmVudC50eXBlIDogZXZlbnQsXG5cdFx0XHRuYW1lc3BhY2VzID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcIm5hbWVzcGFjZVwiICkgPyBldmVudC5uYW1lc3BhY2Uuc3BsaXQoIFwiLlwiICkgOiBbXTtcblxuXHRcdGN1ciA9IGxhc3RFbGVtZW50ID0gdG1wID0gZWxlbSA9IGVsZW0gfHwgZG9jdW1lbnQ7XG5cblx0XHQvLyBEb24ndCBkbyBldmVudHMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlc1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGZvY3VzL2JsdXIgbW9ycGhzIHRvIGZvY3VzaW4vb3V0OyBlbnN1cmUgd2UncmUgbm90IGZpcmluZyB0aGVtIHJpZ2h0IG5vd1xuXHRcdGlmICggcmZvY3VzTW9ycGgudGVzdCggdHlwZSArIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIHR5cGUuaW5kZXhPZiggXCIuXCIgKSA+IC0xICkge1xuXG5cdFx0XHQvLyBOYW1lc3BhY2VkIHRyaWdnZXI7IGNyZWF0ZSBhIHJlZ2V4cCB0byBtYXRjaCBldmVudCB0eXBlIGluIGhhbmRsZSgpXG5cdFx0XHRuYW1lc3BhY2VzID0gdHlwZS5zcGxpdCggXCIuXCIgKTtcblx0XHRcdHR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7XG5cdFx0XHRuYW1lc3BhY2VzLnNvcnQoKTtcblx0XHR9XG5cdFx0b250eXBlID0gdHlwZS5pbmRleE9mKCBcIjpcIiApIDwgMCAmJiBcIm9uXCIgKyB0eXBlO1xuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGEgalF1ZXJ5LkV2ZW50IG9iamVjdCwgT2JqZWN0LCBvciBqdXN0IGFuIGV2ZW50IHR5cGUgc3RyaW5nXG5cdFx0ZXZlbnQgPSBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRldmVudCA6XG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCB0eXBlb2YgZXZlbnQgPT09IFwib2JqZWN0XCIgJiYgZXZlbnQgKTtcblxuXHRcdC8vIFRyaWdnZXIgYml0bWFzazogJiAxIGZvciBuYXRpdmUgaGFuZGxlcnM7ICYgMiBmb3IgalF1ZXJ5IChhbHdheXMgdHJ1ZSlcblx0XHRldmVudC5pc1RyaWdnZXIgPSBvbmx5SGFuZGxlcnMgPyAyIDogMztcblx0XHRldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiICk7XG5cdFx0ZXZlbnQucm5hbWVzcGFjZSA9IGV2ZW50Lm5hbWVzcGFjZSA/XG5cdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKSA6XG5cdFx0XHRudWxsO1xuXG5cdFx0Ly8gQ2xlYW4gdXAgdGhlIGV2ZW50IGluIGNhc2UgaXQgaXMgYmVpbmcgcmV1c2VkXG5cdFx0ZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkO1xuXHRcdGlmICggIWV2ZW50LnRhcmdldCApIHtcblx0XHRcdGV2ZW50LnRhcmdldCA9IGVsZW07XG5cdFx0fVxuXG5cdFx0Ly8gQ2xvbmUgYW55IGluY29taW5nIGRhdGEgYW5kIHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdFxuXHRcdGRhdGEgPSBkYXRhID09IG51bGwgP1xuXHRcdFx0WyBldmVudCBdIDpcblx0XHRcdGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEsIFsgZXZlbnQgXSApO1xuXG5cdFx0Ly8gQWxsb3cgc3BlY2lhbCBldmVudHMgdG8gZHJhdyBvdXRzaWRlIHRoZSBsaW5lc1xuXHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiBzcGVjaWFsLnRyaWdnZXIgJiYgc3BlY2lhbC50cmlnZ2VyLmFwcGx5KCBlbGVtLCBkYXRhICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBldmVudCBwcm9wYWdhdGlvbiBwYXRoIGluIGFkdmFuY2UsIHBlciBXM0MgZXZlbnRzIHNwZWMgKHRyYWMtOTk1MSlcblx0XHQvLyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIgKHRyYWMtOTcyNClcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdGJ1YmJsZVR5cGUgPSBzcGVjaWFsLmRlbGVnYXRlVHlwZSB8fCB0eXBlO1xuXHRcdFx0aWYgKCAhcmZvY3VzTW9ycGgudGVzdCggYnViYmxlVHlwZSArIHR5cGUgKSApIHtcblx0XHRcdFx0Y3VyID0gY3VyLnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKCA7IGN1cjsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0dG1wID0gY3VyO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPbmx5IGFkZCB3aW5kb3cgaWYgd2UgZ290IHRvIGRvY3VtZW50IChlLmcuLCBub3QgcGxhaW4gb2JqIG9yIGRldGFjaGVkIERPTSlcblx0XHRcdGlmICggdG1wID09PSAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCApICkge1xuXHRcdFx0XHRldmVudFBhdGgucHVzaCggdG1wLmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRXaW5kb3cgfHwgd2luZG93ICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmlyZSBoYW5kbGVycyBvbiB0aGUgZXZlbnQgcGF0aFxuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBjdXIgPSBldmVudFBhdGhbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRsYXN0RWxlbWVudCA9IGN1cjtcblx0XHRcdGV2ZW50LnR5cGUgPSBpID4gMSA/XG5cdFx0XHRcdGJ1YmJsZVR5cGUgOlxuXHRcdFx0XHRzcGVjaWFsLmJpbmRUeXBlIHx8IHR5cGU7XG5cblx0XHRcdC8vIGpRdWVyeSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSAoIGRhdGFQcml2LmdldCggY3VyLCBcImV2ZW50c1wiICkgfHwgT2JqZWN0LmNyZWF0ZSggbnVsbCApIClbIGV2ZW50LnR5cGUgXSAmJlxuXHRcdFx0XHRkYXRhUHJpdi5nZXQoIGN1ciwgXCJoYW5kbGVcIiApO1xuXHRcdFx0aWYgKCBoYW5kbGUgKSB7XG5cdFx0XHRcdGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE5hdGl2ZSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSBvbnR5cGUgJiYgY3VyWyBvbnR5cGUgXTtcblx0XHRcdGlmICggaGFuZGxlICYmIGhhbmRsZS5hcHBseSAmJiBhY2NlcHREYXRhKCBjdXIgKSApIHtcblx0XHRcdFx0ZXZlbnQucmVzdWx0ID0gaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZXZlbnQudHlwZSA9IHR5cGU7XG5cblx0XHQvLyBJZiBub2JvZHkgcHJldmVudGVkIHRoZSBkZWZhdWx0IGFjdGlvbiwgZG8gaXQgbm93XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmICFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHtcblxuXHRcdFx0aWYgKCAoICFzcGVjaWFsLl9kZWZhdWx0IHx8XG5cdFx0XHRcdHNwZWNpYWwuX2RlZmF1bHQuYXBwbHkoIGV2ZW50UGF0aC5wb3AoKSwgZGF0YSApID09PSBmYWxzZSApICYmXG5cdFx0XHRcdGFjY2VwdERhdGEoIGVsZW0gKSApIHtcblxuXHRcdFx0XHQvLyBDYWxsIGEgbmF0aXZlIERPTSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGV2ZW50LlxuXHRcdFx0XHQvLyBEb24ndCBkbyBkZWZhdWx0IGFjdGlvbnMgb24gd2luZG93LCB0aGF0J3Mgd2hlcmUgZ2xvYmFsIHZhcmlhYmxlcyBiZSAodHJhYy02MTcwKVxuXHRcdFx0XHRpZiAoIG9udHlwZSAmJiBpc0Z1bmN0aW9uKCBlbGVtWyB0eXBlIF0gKSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08gZXZlbnQgd2hlbiB3ZSBjYWxsIGl0cyBGT08oKSBtZXRob2Rcblx0XHRcdFx0XHR0bXAgPSBlbGVtWyBvbnR5cGUgXTtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ugd2UgYWxyZWFkeSBidWJibGVkIGl0IGFib3ZlXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5cGU7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW1bIHR5cGUgXSgpO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IHRtcDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdC8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50IG9uZVxuXHQvLyBVc2VkIG9ubHkgZm9yIGBmb2N1cyhpbiB8IG91dClgIGV2ZW50c1xuXHRzaW11bGF0ZTogZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50ICkge1xuXHRcdHZhciBlID0galF1ZXJ5LmV4dGVuZChcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoKSxcblx0XHRcdGV2ZW50LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRpc1NpbXVsYXRlZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApO1xuXHR9XG5cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTtcblx0XHR9ICk7XG5cdH0sXG5cdHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXTtcblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIGVsZW0sIHRydWUgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG52YXJcblx0cmJyYWNrZXQgPSAvXFxbXFxdJC8sXG5cdHJDUkxGID0gL1xccj9cXG4vZyxcblx0cnN1Ym1pdHRlclR5cGVzID0gL14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLFxuXHRyc3VibWl0dGFibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7XG5cbmZ1bmN0aW9uIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHtcblx0dmFyIG5hbWU7XG5cblx0aWYgKCBBcnJheS5pc0FycmF5KCBvYmogKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBhcnJheSBpdGVtLlxuXHRcdGpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBpLCB2ICkge1xuXHRcdFx0aWYgKCB0cmFkaXRpb25hbCB8fCByYnJhY2tldC50ZXN0KCBwcmVmaXggKSApIHtcblxuXHRcdFx0XHQvLyBUcmVhdCBlYWNoIGFycmF5IGl0ZW0gYXMgYSBzY2FsYXIuXG5cdFx0XHRcdGFkZCggcHJlZml4LCB2ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gSXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzIG51bWVyaWMgaW5kZXguXG5cdFx0XHRcdGJ1aWxkUGFyYW1zKFxuXHRcdFx0XHRcdHByZWZpeCArIFwiW1wiICsgKCB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9IG51bGwgPyBpIDogXCJcIiApICsgXCJdXCIsXG5cdFx0XHRcdFx0dixcblx0XHRcdFx0XHR0cmFkaXRpb25hbCxcblx0XHRcdFx0XHRhZGRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0fSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIHRvVHlwZSggb2JqICkgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgb2JqZWN0IGl0ZW0uXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRidWlsZFBhcmFtcyggcHJlZml4ICsgXCJbXCIgKyBuYW1lICsgXCJdXCIsIG9ialsgbmFtZSBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBTZXJpYWxpemUgc2NhbGFyIGl0ZW0uXG5cdFx0YWRkKCBwcmVmaXgsIG9iaiApO1xuXHR9XG59XG5cbi8vIFNlcmlhbGl6ZSBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mXG4vLyBrZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmdcbmpRdWVyeS5wYXJhbSA9IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHtcblx0dmFyIHByZWZpeCxcblx0XHRzID0gW10sXG5cdFx0YWRkID0gZnVuY3Rpb24oIGtleSwgdmFsdWVPckZ1bmN0aW9uICkge1xuXG5cdFx0XHQvLyBJZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCBpbnZva2UgaXQgYW5kIHVzZSBpdHMgcmV0dXJuIHZhbHVlXG5cdFx0XHR2YXIgdmFsdWUgPSBpc0Z1bmN0aW9uKCB2YWx1ZU9yRnVuY3Rpb24gKSA/XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbigpIDpcblx0XHRcdFx0dmFsdWVPckZ1bmN0aW9uO1xuXG5cdFx0XHRzWyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJQ29tcG9uZW50KCBrZXkgKSArIFwiPVwiICtcblx0XHRcdFx0ZW5jb2RlVVJJQ29tcG9uZW50KCB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICk7XG5cdFx0fTtcblxuXHRpZiAoIGEgPT0gbnVsbCApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMuXG5cdGlmICggQXJyYXkuaXNBcnJheSggYSApIHx8ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSB0aGUgZm9ybSBlbGVtZW50c1xuXHRcdGpRdWVyeS5lYWNoKCBhLCBmdW5jdGlvbigpIHtcblx0XHRcdGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7XG5cdFx0fSApO1xuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSBcIm9sZFwiIHdheSAodGhlIHdheSAxLjMuMiBvciBvbGRlclxuXHRcdC8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LlxuXHRcdGZvciAoIHByZWZpeCBpbiBhICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uXG5cdHJldHVybiBzLmpvaW4oIFwiJlwiICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5zZXJpYWxpemVBcnJheSgpICk7XG5cdH0sXG5cdHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDYW4gYWRkIHByb3BIb29rIGZvciBcImVsZW1lbnRzXCIgdG8gZmlsdGVyIG9yIGFkZCBmb3JtIGVsZW1lbnRzXG5cdFx0XHR2YXIgZWxlbWVudHMgPSBqUXVlcnkucHJvcCggdGhpcywgXCJlbGVtZW50c1wiICk7XG5cdFx0XHRyZXR1cm4gZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCBlbGVtZW50cyApIDogdGhpcztcblx0XHR9ICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0eXBlID0gdGhpcy50eXBlO1xuXG5cdFx0XHQvLyBVc2UgLmlzKCBcIjpkaXNhYmxlZFwiICkgc28gdGhhdCBmaWVsZHNldFtkaXNhYmxlZF0gd29ya3Ncblx0XHRcdHJldHVybiB0aGlzLm5hbWUgJiYgIWpRdWVyeSggdGhpcyApLmlzKCBcIjpkaXNhYmxlZFwiICkgJiZcblx0XHRcdFx0cnN1Ym1pdHRhYmxlLnRlc3QoIHRoaXMubm9kZU5hbWUgKSAmJiAhcnN1Ym1pdHRlclR5cGVzLnRlc3QoIHR5cGUgKSAmJlxuXHRcdFx0XHQoIHRoaXMuY2hlY2tlZCB8fCAhcmNoZWNrYWJsZVR5cGUudGVzdCggdHlwZSApICk7XG5cdFx0fSApLm1hcCggZnVuY3Rpb24oIF9pLCBlbGVtICkge1xuXHRcdFx0dmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpO1xuXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0fSApLmdldCgpO1xuXHR9XG59ICk7XG5cblxudmFyXG5cdHIyMCA9IC8lMjAvZyxcblx0cmhhc2ggPSAvIy4qJC8sXG5cdHJhbnRpQ2FjaGUgPSAvKFs/Jl0pXz1bXiZdKi8sXG5cdHJoZWFkZXJzID0gL14oLio/KTpbIFxcdF0qKFteXFxyXFxuXSopJC9tZyxcblxuXHQvLyB0cmFjLTc2NTMsIHRyYWMtODEyNSwgdHJhYy04MTUyOiBsb2NhbCBwcm90b2NvbCBkZXRlY3Rpb25cblx0cmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxcblx0cm5vQ29udGVudCA9IC9eKD86R0VUfEhFQUQpJC8sXG5cdHJwcm90b2NvbCA9IC9eXFwvXFwvLyxcblxuXHQvKiBQcmVmaWx0ZXJzXG5cdCAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpXG5cdCAqIDIpIFRoZXNlIGFyZSBjYWxsZWQ6XG5cdCAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnRcblx0ICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKVxuXHQgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDQpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93biB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHByZWZpbHRlcnMgPSB7fSxcblxuXHQvKiBUcmFuc3BvcnRzIGJpbmRpbmdzXG5cdCAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogMikgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHRyYW5zcG9ydHMgPSB7fSxcblxuXHQvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICh0cmFjLTEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uXG5cdGFsbFR5cGVzID0gXCIqL1wiLmNvbmNhdCggXCIqXCIgKSxcblxuXHQvLyBBbmNob3IgdGFnIGZvciBwYXJzaW5nIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b3JpZ2luQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblxub3JpZ2luQW5jaG9yLmhyZWYgPSBsb2NhdGlvbi5ocmVmO1xuXG4vLyBCYXNlIFwiY29uc3RydWN0b3JcIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0XG5mdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHtcblxuXHQvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIFwiKlwiXG5cdHJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkge1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lvbjtcblx0XHRcdGRhdGFUeXBlRXhwcmVzc2lvbiA9IFwiKlwiO1xuXHRcdH1cblxuXHRcdHZhciBkYXRhVHlwZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0ZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggZnVuYyApICkge1xuXG5cdFx0XHQvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5cGVFeHByZXNzaW9uXG5cdFx0XHR3aGlsZSAoICggZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJlcGVuZCBpZiByZXF1ZXN0ZWRcblx0XHRcdFx0aWYgKCBkYXRhVHlwZVsgMCBdID09PSBcIitcIiApIHtcblx0XHRcdFx0XHRkYXRhVHlwZSA9IGRhdGFUeXBlLnNsaWNlKCAxICkgfHwgXCIqXCI7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS51bnNoaWZ0KCBmdW5jICk7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkucHVzaCggZnVuYyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vLyBCYXNlIGluc3BlY3Rpb24gZnVuY3Rpb24gZm9yIHByZWZpbHRlcnMgYW5kIHRyYW5zcG9ydHNcbmZ1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKSB7XG5cblx0dmFyIGluc3BlY3RlZCA9IHt9LFxuXHRcdHNlZWtpbmdUcmFuc3BvcnQgPSAoIHN0cnVjdHVyZSA9PT0gdHJhbnNwb3J0cyApO1xuXG5cdGZ1bmN0aW9uIGluc3BlY3QoIGRhdGFUeXBlICkge1xuXHRcdHZhciBzZWxlY3RlZDtcblx0XHRpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlO1xuXHRcdGpRdWVyeS5lYWNoKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10sIGZ1bmN0aW9uKCBfLCBwcmVmaWx0ZXJPckZhY3RvcnkgKSB7XG5cdFx0XHR2YXIgZGF0YVR5cGVPclRyYW5zcG9ydCA9IHByZWZpbHRlck9yRmFjdG9yeSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApO1xuXHRcdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc2Vla2luZ1RyYW5zcG9ydCAmJiAhaW5zcGVjdGVkWyBkYXRhVHlwZU9yVHJhbnNwb3J0IF0gKSB7XG5cblx0XHRcdFx0b3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRpbnNwZWN0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7XG5cdFx0XHRcdHJldHVybiAhKCBzZWxlY3RlZCA9IGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIHNlbGVjdGVkO1xuXHR9XG5cblx0cmV0dXJuIGluc3BlY3QoIG9wdGlvbnMuZGF0YVR5cGVzWyAwIF0gKSB8fCAhaW5zcGVjdGVkWyBcIipcIiBdICYmIGluc3BlY3QoIFwiKlwiICk7XG59XG5cbi8vIEEgc3BlY2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9uc1xuLy8gdGhhdCB0YWtlcyBcImZsYXRcIiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZClcbi8vIEZpeGVzIHRyYWMtOTg4N1xuZnVuY3Rpb24gYWpheEV4dGVuZCggdGFyZ2V0LCBzcmMgKSB7XG5cdHZhciBrZXksIGRlZXAsXG5cdFx0ZmxhdE9wdGlvbnMgPSBqUXVlcnkuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9O1xuXG5cdGZvciAoIGtleSBpbiBzcmMgKSB7XG5cdFx0aWYgKCBzcmNbIGtleSBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHQoIGZsYXRPcHRpb25zWyBrZXkgXSA/IHRhcmdldCA6ICggZGVlcCB8fCAoIGRlZXAgPSB7fSApICkgKVsga2V5IF0gPSBzcmNbIGtleSBdO1xuXHRcdH1cblx0fVxuXHRpZiAoIGRlZXAgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBkZWVwICk7XG5cdH1cblxuXHRyZXR1cm4gdGFyZ2V0O1xufVxuXG4vKiBIYW5kbGVzIHJlc3BvbnNlcyB0byBhbiBhamF4IHJlcXVlc3Q6XG4gKiAtIGZpbmRzIHRoZSByaWdodCBkYXRhVHlwZSAobWVkaWF0ZXMgYmV0d2VlbiBjb250ZW50LXR5cGUgYW5kIGV4cGVjdGVkIGRhdGFUeXBlKVxuICogLSByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKSB7XG5cblx0dmFyIGN0LCB0eXBlLCBmaW5hbERhdGFUeXBlLCBmaXJzdERhdGFUeXBlLFxuXHRcdGNvbnRlbnRzID0gcy5jb250ZW50cyxcblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcztcblxuXHQvLyBSZW1vdmUgYXV0byBkYXRhVHlwZSBhbmQgZ2V0IGNvbnRlbnQtdHlwZSBpbiB0aGUgcHJvY2Vzc1xuXHR3aGlsZSAoIGRhdGFUeXBlc1sgMCBdID09PSBcIipcIiApIHtcblx0XHRkYXRhVHlwZXMuc2hpZnQoKTtcblx0XHRpZiAoIGN0ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRjdCA9IHMubWltZVR5cGUgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGVcblx0aWYgKCBjdCApIHtcblx0XHRmb3IgKCB0eXBlIGluIGNvbnRlbnRzICkge1xuXHRcdFx0aWYgKCBjb250ZW50c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHtcblx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHR5cGUgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVkIGRhdGFUeXBlXG5cdGlmICggZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkge1xuXHRcdGZpbmFsRGF0YVR5cGUgPSBkYXRhVHlwZXNbIDAgXTtcblx0fSBlbHNlIHtcblxuXHRcdC8vIFRyeSBjb252ZXJ0aWJsZSBkYXRhVHlwZXNcblx0XHRmb3IgKCB0eXBlIGluIHJlc3BvbnNlcyApIHtcblx0XHRcdGlmICggIWRhdGFUeXBlc1sgMCBdIHx8IHMuY29udmVydGVyc1sgdHlwZSArIFwiIFwiICsgZGF0YVR5cGVzWyAwIF0gXSApIHtcblx0XHRcdFx0ZmluYWxEYXRhVHlwZSA9IHR5cGU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAhZmlyc3REYXRhVHlwZSApIHtcblx0XHRcdFx0Zmlyc3REYXRhVHlwZSA9IHR5cGU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gT3IganVzdCB1c2UgZmlyc3Qgb25lXG5cdFx0ZmluYWxEYXRhVHlwZSA9IGZpbmFsRGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTtcblx0fVxuXG5cdC8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGVcblx0Ly8gV2UgYWRkIHRoZSBkYXRhVHlwZSB0byB0aGUgbGlzdCBpZiBuZWVkZWRcblx0Ly8gYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuXHRpZiAoIGZpbmFsRGF0YVR5cGUgKSB7XG5cdFx0aWYgKCBmaW5hbERhdGFUeXBlICE9PSBkYXRhVHlwZXNbIDAgXSApIHtcblx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCBmaW5hbERhdGFUeXBlICk7XG5cdFx0fVxuXHRcdHJldHVybiByZXNwb25zZXNbIGZpbmFsRGF0YVR5cGUgXTtcblx0fVxufVxuXG4vKiBDaGFpbiBjb252ZXJzaW9ucyBnaXZlbiB0aGUgcmVxdWVzdCBhbmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNlXG4gKiBBbHNvIHNldHMgdGhlIHJlc3BvbnNlWFhYIGZpZWxkcyBvbiB0aGUganFYSFIgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICkge1xuXHR2YXIgY29udjIsIGN1cnJlbnQsIGNvbnYsIHRtcCwgcHJldixcblx0XHRjb252ZXJ0ZXJzID0ge30sXG5cblx0XHQvLyBXb3JrIHdpdGggYSBjb3B5IG9mIGRhdGFUeXBlcyBpbiBjYXNlIHdlIG5lZWQgdG8gbW9kaWZ5IGl0IGZvciBjb252ZXJzaW9uXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMuc2xpY2UoKTtcblxuXHQvLyBDcmVhdGUgY29udmVydGVycyBtYXAgd2l0aCBsb3dlcmNhc2VkIGtleXNcblx0aWYgKCBkYXRhVHlwZXNbIDEgXSApIHtcblx0XHRmb3IgKCBjb252IGluIHMuY29udmVydGVycyApIHtcblx0XHRcdGNvbnZlcnRlcnNbIGNvbnYudG9Mb3dlckNhc2UoKSBdID0gcy5jb252ZXJ0ZXJzWyBjb252IF07XG5cdFx0fVxuXHR9XG5cblx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdC8vIENvbnZlcnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRhdGFUeXBlXG5cdHdoaWxlICggY3VycmVudCApIHtcblxuXHRcdGlmICggcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdICkge1xuXHRcdFx0anFYSFJbIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSBdID0gcmVzcG9uc2U7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgdGhlIGRhdGFGaWx0ZXIgaWYgcHJvdmlkZWRcblx0XHRpZiAoICFwcmV2ICYmIGlzU3VjY2VzcyAmJiBzLmRhdGFGaWx0ZXIgKSB7XG5cdFx0XHRyZXNwb25zZSA9IHMuZGF0YUZpbHRlciggcmVzcG9uc2UsIHMuZGF0YVR5cGUgKTtcblx0XHR9XG5cblx0XHRwcmV2ID0gY3VycmVudDtcblx0XHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0XHRpZiAoIGN1cnJlbnQgKSB7XG5cblx0XHRcdC8vIFRoZXJlJ3Mgb25seSB3b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG9cblx0XHRcdGlmICggY3VycmVudCA9PT0gXCIqXCIgKSB7XG5cblx0XHRcdFx0Y3VycmVudCA9IHByZXY7XG5cblx0XHRcdC8vIENvbnZlcnQgcmVzcG9uc2UgaWYgcHJldiBkYXRhVHlwZSBpcyBub24tYXV0byBhbmQgZGlmZmVycyBmcm9tIGN1cnJlbnRcblx0XHRcdH0gZWxzZSBpZiAoIHByZXYgIT09IFwiKlwiICYmIHByZXYgIT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0Ly8gU2VlayBhIGRpcmVjdCBjb252ZXJ0ZXJcblx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIGN1cnJlbnQgXSB8fCBjb252ZXJ0ZXJzWyBcIiogXCIgKyBjdXJyZW50IF07XG5cblx0XHRcdFx0Ly8gSWYgbm9uZSBmb3VuZCwgc2VlayBhIHBhaXJcblx0XHRcdFx0aWYgKCAhY29udiApIHtcblx0XHRcdFx0XHRmb3IgKCBjb252MiBpbiBjb252ZXJ0ZXJzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnRcblx0XHRcdFx0XHRcdHRtcCA9IGNvbnYyLnNwbGl0KCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0aWYgKCB0bXBbIDEgXSA9PT0gY3VycmVudCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXRcblx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIHRtcFsgMCBdIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJzWyBcIiogXCIgKyB0bXBbIDAgXSBdO1xuXHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDb25kZW5zZSBlcXVpdmFsZW5jZSBjb252ZXJ0ZXJzXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjb252ID09PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIGluc2VydCB0aGUgaW50ZXJtZWRpYXRlIGRhdGFUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggY29udmVydGVyc1sgY29udjIgXSAhPT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnQgPSB0bXBbIDAgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0bXBbIDEgXSApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFwcGx5IGNvbnZlcnRlciAoaWYgbm90IGFuIGVxdWl2YWxlbmNlKVxuXHRcdFx0XHRpZiAoIGNvbnYgIT09IHRydWUgKSB7XG5cblx0XHRcdFx0XHQvLyBVbmxlc3MgZXJyb3JzIGFyZSBhbGxvd2VkIHRvIGJ1YmJsZSwgY2F0Y2ggYW5kIHJldHVybiB0aGVtXG5cdFx0XHRcdFx0aWYgKCBjb252ICYmIHMudGhyb3dzICkge1xuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZTogXCJwYXJzZXJlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdGVycm9yOiBjb252ID8gZSA6IFwiTm8gY29udmVyc2lvbiBmcm9tIFwiICsgcHJldiArIFwiIHRvIFwiICsgY3VycmVudFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IHN0YXRlOiBcInN1Y2Nlc3NcIiwgZGF0YTogcmVzcG9uc2UgfTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIENvdW50ZXIgZm9yIGhvbGRpbmcgdGhlIG51bWJlciBvZiBhY3RpdmUgcXVlcmllc1xuXHRhY3RpdmU6IDAsXG5cblx0Ly8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdFxuXHRsYXN0TW9kaWZpZWQ6IHt9LFxuXHRldGFnOiB7fSxcblxuXHRhamF4U2V0dGluZ3M6IHtcblx0XHR1cmw6IGxvY2F0aW9uLmhyZWYsXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRpc0xvY2FsOiBybG9jYWxQcm90b2NvbC50ZXN0KCBsb2NhdGlvbi5wcm90b2NvbCApLFxuXHRcdGdsb2JhbDogdHJ1ZSxcblx0XHRwcm9jZXNzRGF0YTogdHJ1ZSxcblx0XHRhc3luYzogdHJ1ZSxcblx0XHRjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLThcIixcblxuXHRcdC8qXG5cdFx0dGltZW91dDogMCxcblx0XHRkYXRhOiBudWxsLFxuXHRcdGRhdGFUeXBlOiBudWxsLFxuXHRcdHVzZXJuYW1lOiBudWxsLFxuXHRcdHBhc3N3b3JkOiBudWxsLFxuXHRcdGNhY2hlOiBudWxsLFxuXHRcdHRocm93czogZmFsc2UsXG5cdFx0dHJhZGl0aW9uYWw6IGZhbHNlLFxuXHRcdGhlYWRlcnM6IHt9LFxuXHRcdCovXG5cblx0XHRhY2NlcHRzOiB7XG5cdFx0XHRcIipcIjogYWxsVHlwZXMsXG5cdFx0XHR0ZXh0OiBcInRleHQvcGxhaW5cIixcblx0XHRcdGh0bWw6IFwidGV4dC9odG1sXCIsXG5cdFx0XHR4bWw6IFwiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbFwiLFxuXHRcdFx0anNvbjogXCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHRcIlxuXHRcdH0sXG5cblx0XHRjb250ZW50czoge1xuXHRcdFx0eG1sOiAvXFxieG1sXFxiLyxcblx0XHRcdGh0bWw6IC9cXGJodG1sLyxcblx0XHRcdGpzb246IC9cXGJqc29uXFxiL1xuXHRcdH0sXG5cblx0XHRyZXNwb25zZUZpZWxkczoge1xuXHRcdFx0eG1sOiBcInJlc3BvbnNlWE1MXCIsXG5cdFx0XHR0ZXh0OiBcInJlc3BvbnNlVGV4dFwiLFxuXHRcdFx0anNvbjogXCJyZXNwb25zZUpTT05cIlxuXHRcdH0sXG5cblx0XHQvLyBEYXRhIGNvbnZlcnRlcnNcblx0XHQvLyBLZXlzIHNlcGFyYXRlIHNvdXJjZSAob3IgY2F0Y2hhbGwgXCIqXCIpIGFuZCBkZXN0aW5hdGlvbiB0eXBlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG5cdFx0Y29udmVydGVyczoge1xuXG5cdFx0XHQvLyBDb252ZXJ0IGFueXRoaW5nIHRvIHRleHRcblx0XHRcdFwiKiB0ZXh0XCI6IFN0cmluZyxcblxuXHRcdFx0Ly8gVGV4dCB0byBodG1sICh0cnVlID0gbm8gdHJhbnNmb3JtYXRpb24pXG5cdFx0XHRcInRleHQgaHRtbFwiOiB0cnVlLFxuXG5cdFx0XHQvLyBFdmFsdWF0ZSB0ZXh0IGFzIGEganNvbiBleHByZXNzaW9uXG5cdFx0XHRcInRleHQganNvblwiOiBKU09OLnBhcnNlLFxuXG5cdFx0XHQvLyBQYXJzZSB0ZXh0IGFzIHhtbFxuXHRcdFx0XCJ0ZXh0IHhtbFwiOiBqUXVlcnkucGFyc2VYTUxcblx0XHR9LFxuXG5cdFx0Ly8gRm9yIG9wdGlvbnMgdGhhdCBzaG91bGRuJ3QgYmUgZGVlcCBleHRlbmRlZDpcblx0XHQvLyB5b3UgY2FuIGFkZCB5b3VyIG93biBjdXN0b20gb3B0aW9ucyBoZXJlIGlmXG5cdFx0Ly8gYW5kIHdoZW4geW91IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmVcblx0XHQvLyBkZWVwIGV4dGVuZGVkIChzZWUgYWpheEV4dGVuZClcblx0XHRmbGF0T3B0aW9uczoge1xuXHRcdFx0dXJsOiB0cnVlLFxuXHRcdFx0Y29udGV4dDogdHJ1ZVxuXHRcdH1cblx0fSxcblxuXHQvLyBDcmVhdGVzIGEgZnVsbCBmbGVkZ2VkIHNldHRpbmdzIG9iamVjdCBpbnRvIHRhcmdldFxuXHQvLyB3aXRoIGJvdGggYWpheFNldHRpbmdzIGFuZCBzZXR0aW5ncyBmaWVsZHMuXG5cdC8vIElmIHRhcmdldCBpcyBvbWl0dGVkLCB3cml0ZXMgaW50byBhamF4U2V0dGluZ3MuXG5cdGFqYXhTZXR1cDogZnVuY3Rpb24oIHRhcmdldCwgc2V0dGluZ3MgKSB7XG5cdFx0cmV0dXJuIHNldHRpbmdzID9cblxuXHRcdFx0Ly8gQnVpbGRpbmcgYSBzZXR0aW5ncyBvYmplY3Rcblx0XHRcdGFqYXhFeHRlbmQoIGFqYXhFeHRlbmQoIHRhcmdldCwgalF1ZXJ5LmFqYXhTZXR0aW5ncyApLCBzZXR0aW5ncyApIDpcblxuXHRcdFx0Ly8gRXh0ZW5kaW5nIGFqYXhTZXR0aW5nc1xuXHRcdFx0YWpheEV4dGVuZCggalF1ZXJ5LmFqYXhTZXR0aW5ncywgdGFyZ2V0ICk7XG5cdH0sXG5cblx0YWpheFByZWZpbHRlcjogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzICksXG5cdGFqYXhUcmFuc3BvcnQ6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cyApLFxuXG5cdC8vIE1haW4gbWV0aG9kXG5cdGFqYXg6IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBJZiB1cmwgaXMgYW4gb2JqZWN0LCBzaW11bGF0ZSBwcmUtMS41IHNpZ25hdHVyZVxuXHRcdGlmICggdHlwZW9mIHVybCA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdG9wdGlvbnMgPSB1cmw7XG5cdFx0XHR1cmwgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yY2Ugb3B0aW9ucyB0byBiZSBhbiBvYmplY3Rcblx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRcdHZhciB0cmFuc3BvcnQsXG5cblx0XHRcdC8vIFVSTCB3aXRob3V0IGFudGktY2FjaGUgcGFyYW1cblx0XHRcdGNhY2hlVVJMLFxuXG5cdFx0XHQvLyBSZXNwb25zZSBoZWFkZXJzXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcsXG5cdFx0XHRyZXNwb25zZUhlYWRlcnMsXG5cblx0XHRcdC8vIHRpbWVvdXQgaGFuZGxlXG5cdFx0XHR0aW1lb3V0VGltZXIsXG5cblx0XHRcdC8vIFVybCBjbGVhbnVwIHZhclxuXHRcdFx0dXJsQW5jaG9yLFxuXG5cdFx0XHQvLyBSZXF1ZXN0IHN0YXRlIChiZWNvbWVzIGZhbHNlIHVwb24gc2VuZCBhbmQgdHJ1ZSB1cG9uIGNvbXBsZXRpb24pXG5cdFx0XHRjb21wbGV0ZWQsXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgZ2xvYmFsIGV2ZW50cyBhcmUgdG8gYmUgZGlzcGF0Y2hlZFxuXHRcdFx0ZmlyZUdsb2JhbHMsXG5cblx0XHRcdC8vIExvb3AgdmFyaWFibGVcblx0XHRcdGksXG5cblx0XHRcdC8vIHVuY2FjaGVkIHBhcnQgb2YgdGhlIHVybFxuXHRcdFx0dW5jYWNoZWQsXG5cblx0XHRcdC8vIENyZWF0ZSB0aGUgZmluYWwgb3B0aW9ucyBvYmplY3Rcblx0XHRcdHMgPSBqUXVlcnkuYWpheFNldHVwKCB7fSwgb3B0aW9ucyApLFxuXG5cdFx0XHQvLyBDYWxsYmFja3MgY29udGV4dFxuXHRcdFx0Y2FsbGJhY2tDb250ZXh0ID0gcy5jb250ZXh0IHx8IHMsXG5cblx0XHRcdC8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVudHMgaXMgY2FsbGJhY2tDb250ZXh0IGlmIGl0IGlzIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IGNvbGxlY3Rpb25cblx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dCA9IHMuY29udGV4dCAmJlxuXHRcdFx0XHQoIGNhbGxiYWNrQ29udGV4dC5ub2RlVHlwZSB8fCBjYWxsYmFja0NvbnRleHQuanF1ZXJ5ICkgP1xuXHRcdFx0XHRqUXVlcnkoIGNhbGxiYWNrQ29udGV4dCApIDpcblx0XHRcdFx0alF1ZXJ5LmV2ZW50LFxuXG5cdFx0XHQvLyBEZWZlcnJlZHNcblx0XHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkID0galF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRzdGF0dXNDb2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9LFxuXG5cdFx0XHQvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKVxuXHRcdFx0cmVxdWVzdEhlYWRlcnMgPSB7fSxcblx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSxcblxuXHRcdFx0Ly8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlXG5cdFx0XHRzdHJBYm9ydCA9IFwiY2FuY2VsZWRcIixcblxuXHRcdFx0Ly8gRmFrZSB4aHJcblx0XHRcdGpxWEhSID0ge1xuXHRcdFx0XHRyZWFkeVN0YXRlOiAwLFxuXG5cdFx0XHRcdC8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0YWJsZSBpZiBuZWVkZWRcblx0XHRcdFx0Z2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0XHRcdFx0dmFyIG1hdGNoO1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAhcmVzcG9uc2VIZWFkZXJzICkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnMgPSB7fTtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSArIFwiIFwiIF0gPVxuXHRcdFx0XHRcdFx0XHRcdFx0KCByZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSArIFwiIFwiIF0gfHwgW10gKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuY29uY2F0KCBtYXRjaFsgMiBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSArIFwiIFwiIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBtYXRjaCA9PSBudWxsID8gbnVsbCA6IG1hdGNoLmpvaW4oIFwiLCBcIiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFJhdyBzdHJpbmdcblx0XHRcdFx0Z2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29tcGxldGVkID8gcmVzcG9uc2VIZWFkZXJzU3RyaW5nIDogbnVsbDtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYWNoZXMgdGhlIGhlYWRlclxuXHRcdFx0XHRzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdG5hbWUgPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSA9XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8IG5hbWU7XG5cdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlcyByZXNwb25zZSBjb250ZW50LXR5cGUgaGVhZGVyXG5cdFx0XHRcdG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRzLm1pbWVUeXBlID0gdHlwZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdFx0c3RhdHVzQ29kZTogZnVuY3Rpb24oIG1hcCApIHtcblx0XHRcdFx0XHR2YXIgY29kZTtcblx0XHRcdFx0XHRpZiAoIG1hcCApIHtcblx0XHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEV4ZWN1dGUgdGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrc1xuXHRcdFx0XHRcdFx0XHRqcVhIUi5hbHdheXMoIG1hcFsganFYSFIuc3RhdHVzIF0gKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTGF6eS1hZGQgdGhlIG5ldyBjYWxsYmFja3MgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgb2xkIG9uZXNcblx0XHRcdFx0XHRcdFx0Zm9yICggY29kZSBpbiBtYXAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdHVzQ29kZVsgY29kZSBdID0gWyBzdGF0dXNDb2RlWyBjb2RlIF0sIG1hcFsgY29kZSBdIF07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSByZXF1ZXN0XG5cdFx0XHRcdGFib3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHR2YXIgZmluYWxUZXh0ID0gc3RhdHVzVGV4dCB8fCBzdHJBYm9ydDtcblx0XHRcdFx0XHRpZiAoIHRyYW5zcG9ydCApIHtcblx0XHRcdFx0XHRcdHRyYW5zcG9ydC5hYm9ydCggZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRvbmUoIDAsIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0Ly8gQXR0YWNoIGRlZmVycmVkc1xuXHRcdGRlZmVycmVkLnByb21pc2UoIGpxWEhSICk7XG5cblx0XHQvLyBBZGQgcHJvdG9jb2wgaWYgbm90IHByb3ZpZGVkIChwcmVmaWx0ZXJzIG1pZ2h0IGV4cGVjdCBpdClcblx0XHQvLyBIYW5kbGUgZmFsc3kgdXJsIGluIHRoZSBzZXR0aW5ncyBvYmplY3QgKHRyYWMtMTAwOTM6IGNvbnNpc3RlbmN5IHdpdGggb2xkIHNpZ25hdHVyZSlcblx0XHQvLyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFpbGFibGVcblx0XHRzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgfHwgbG9jYXRpb24uaHJlZiApICsgXCJcIiApXG5cdFx0XHQucmVwbGFjZSggcnByb3RvY29sLCBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiApO1xuXG5cdFx0Ly8gQWxpYXMgbWV0aG9kIG9wdGlvbiB0byB0eXBlIGFzIHBlciB0aWNrZXQgdHJhYy0xMjAwNFxuXHRcdHMudHlwZSA9IG9wdGlvbnMubWV0aG9kIHx8IG9wdGlvbnMudHlwZSB8fCBzLm1ldGhvZCB8fCBzLnR5cGU7XG5cblx0XHQvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0XG5cdFx0cy5kYXRhVHlwZXMgPSAoIHMuZGF0YVR5cGUgfHwgXCIqXCIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cblx0XHQvLyBBIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyIHdoZW4gdGhlIG9yaWdpbiBkb2Vzbid0IG1hdGNoIHRoZSBjdXJyZW50IG9yaWdpbi5cblx0XHRpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHtcblx0XHRcdHVybEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHRcdC8vIElFIHRocm93cyBleGNlcHRpb24gb24gYWNjZXNzaW5nIHRoZSBocmVmIHByb3BlcnR5IGlmIHVybCBpcyBtYWxmb3JtZWQsXG5cdFx0XHQvLyBlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbTo4MHgvXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHMudXJsO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExIG9ubHlcblx0XHRcdFx0Ly8gQW5jaG9yJ3MgaG9zdCBwcm9wZXJ0eSBpc24ndCBjb3JyZWN0bHkgc2V0IHdoZW4gcy51cmwgaXMgcmVsYXRpdmVcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSB1cmxBbmNob3IuaHJlZjtcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IG9yaWdpbkFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIG9yaWdpbkFuY2hvci5ob3N0ICE9PVxuXHRcdFx0XHRcdHVybEFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIHVybEFuY2hvci5ob3N0O1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgVVJMLCBhc3N1bWUgaXQgaXMgY3Jvc3NEb21haW4sXG5cdFx0XHRcdC8vIGl0IGNhbiBiZSByZWplY3RlZCBieSB0aGUgdHJhbnNwb3J0IGlmIGl0IGlzIGludmFsaWRcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nXG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwcmVmaWx0ZXJzXG5cdFx0aW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZVxuXHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdH1cblxuXHRcdC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvXG5cdFx0Ly8gRG9uJ3QgZmlyZSBldmVudHMgaWYgalF1ZXJ5LmV2ZW50IGlzIHVuZGVmaW5lZCBpbiBhbiBBTUQtdXNhZ2Ugc2NlbmFyaW8gKHRyYWMtMTUxMTgpXG5cdFx0ZmlyZUdsb2JhbHMgPSBqUXVlcnkuZXZlbnQgJiYgcy5nbG9iYWw7XG5cblx0XHQvLyBXYXRjaCBmb3IgYSBuZXcgc2V0IG9mIHJlcXVlc3RzXG5cdFx0aWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RhcnRcIiApO1xuXHRcdH1cblxuXHRcdC8vIFVwcGVyY2FzZSB0aGUgdHlwZVxuXHRcdHMudHlwZSA9IHMudHlwZS50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIGlmIHJlcXVlc3QgaGFzIGNvbnRlbnRcblx0XHRzLmhhc0NvbnRlbnQgPSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTtcblxuXHRcdC8vIFNhdmUgdGhlIFVSTCBpbiBjYXNlIHdlJ3JlIHRveWluZyB3aXRoIHRoZSBJZi1Nb2RpZmllZC1TaW5jZVxuXHRcdC8vIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciBsYXRlciBvblxuXHRcdC8vIFJlbW92ZSBoYXNoIHRvIHNpbXBsaWZ5IHVybCBtYW5pcHVsYXRpb25cblx0XHRjYWNoZVVSTCA9IHMudXJsLnJlcGxhY2UoIHJoYXNoLCBcIlwiICk7XG5cblx0XHQvLyBNb3JlIG9wdGlvbnMgaGFuZGxpbmcgZm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudFxuXHRcdGlmICggIXMuaGFzQ29udGVudCApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIGhhc2ggc28gd2UgY2FuIHB1dCBpdCBiYWNrXG5cdFx0XHR1bmNhY2hlZCA9IHMudXJsLnNsaWNlKCBjYWNoZVVSTC5sZW5ndGggKTtcblxuXHRcdFx0Ly8gSWYgZGF0YSBpcyBhdmFpbGFibGUgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQsIGFwcGVuZCBkYXRhIHRvIHVybFxuXHRcdFx0aWYgKCBzLmRhdGEgJiYgKCBzLnByb2Nlc3NEYXRhIHx8IHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgKSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgKz0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuZGF0YTtcblxuXHRcdFx0XHQvLyB0cmFjLTk2ODI6IHJlbW92ZSBkYXRhIHNvIHRoYXQgaXQncyBub3QgdXNlZCBpbiBhbiBldmVudHVhbCByZXRyeVxuXHRcdFx0XHRkZWxldGUgcy5kYXRhO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgb3IgdXBkYXRlIGFudGktY2FjaGUgcGFyYW0gaWYgbmVlZGVkXG5cdFx0XHRpZiAoIHMuY2FjaGUgPT09IGZhbHNlICkge1xuXHRcdFx0XHRjYWNoZVVSTCA9IGNhY2hlVVJMLnJlcGxhY2UoIHJhbnRpQ2FjaGUsIFwiJDFcIiApO1xuXHRcdFx0XHR1bmNhY2hlZCA9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBcIl89XCIgKyAoIG5vbmNlLmd1aWQrKyApICtcblx0XHRcdFx0XHR1bmNhY2hlZDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUHV0IGhhc2ggYW5kIGFudGktY2FjaGUgb24gdGhlIFVSTCB0aGF0IHdpbGwgYmUgcmVxdWVzdGVkIChnaC0xNzMyKVxuXHRcdFx0cy51cmwgPSBjYWNoZVVSTCArIHVuY2FjaGVkO1xuXG5cdFx0Ly8gQ2hhbmdlICclMjAnIHRvICcrJyBpZiB0aGlzIGlzIGVuY29kZWQgZm9ybSBib2R5IGNvbnRlbnQgKGdoLTI2NTgpXG5cdFx0fSBlbHNlIGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiZcblx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiICkuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICkge1xuXHRcdFx0cy5kYXRhID0gcy5kYXRhLnJlcGxhY2UoIHIyMCwgXCIrXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0aWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU1vZGlmaWVkLVNpbmNlXCIsIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHRcdGlmICggalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTm9uZS1NYXRjaFwiLCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudFxuXHRcdGlmICggcy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25zLmNvbnRlbnRUeXBlICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJDb250ZW50LVR5cGVcIiwgcy5jb250ZW50VHlwZSApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGVcblx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKFxuXHRcdFx0XCJBY2NlcHRcIixcblx0XHRcdHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gP1xuXHRcdFx0XHRzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSArXG5cdFx0XHRcdFx0KCBzLmRhdGFUeXBlc1sgMCBdICE9PSBcIipcIiA/IFwiLCBcIiArIGFsbFR5cGVzICsgXCI7IHE9MC4wMVwiIDogXCJcIiApIDpcblx0XHRcdFx0cy5hY2NlcHRzWyBcIipcIiBdXG5cdFx0KTtcblxuXHRcdC8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvblxuXHRcdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTtcblx0XHR9XG5cblx0XHQvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0XG5cdFx0aWYgKCBzLmJlZm9yZVNlbmQgJiZcblx0XHRcdCggcy5iZWZvcmVTZW5kLmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgY29tcGxldGVkICkgKSB7XG5cblx0XHRcdC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVyblxuXHRcdFx0cmV0dXJuIGpxWEhSLmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9uXG5cdFx0c3RyQWJvcnQgPSBcImFib3J0XCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHNcblx0XHRjb21wbGV0ZURlZmVycmVkLmFkZCggcy5jb21wbGV0ZSApO1xuXHRcdGpxWEhSLmRvbmUoIHMuc3VjY2VzcyApO1xuXHRcdGpxWEhSLmZhaWwoIHMuZXJyb3IgKTtcblxuXHRcdC8vIEdldCB0cmFuc3BvcnRcblx0XHR0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydFxuXHRcdGlmICggIXRyYW5zcG9ydCApIHtcblx0XHRcdGRvbmUoIC0xLCBcIk5vIFRyYW5zcG9ydFwiICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSAxO1xuXG5cdFx0XHQvLyBTZW5kIGdsb2JhbCBldmVudFxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheFNlbmRcIiwgWyBqcVhIUiwgcyBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGFqYXhTZW5kLCBzdG9wIHRoZXJlXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaW1lb3V0XG5cdFx0XHRpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHtcblx0XHRcdFx0dGltZW91dFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGpxWEhSLmFib3J0KCBcInRpbWVvdXRcIiApO1xuXHRcdFx0XHR9LCBzLnRpbWVvdXQgKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29tcGxldGVkID0gZmFsc2U7XG5cdFx0XHRcdHRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gUmV0aHJvdyBwb3N0LWNvbXBsZXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUHJvcGFnYXRlIG90aGVycyBhcyByZXN1bHRzXG5cdFx0XHRcdGRvbmUoIC0xLCBlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lXG5cdFx0ZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7XG5cdFx0XHR2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlmaWVkLFxuXHRcdFx0XHRzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDtcblxuXHRcdFx0Ly8gSWdub3JlIHJlcGVhdCBpbnZvY2F0aW9uc1xuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29tcGxldGVkID0gdHJ1ZTtcblxuXHRcdFx0Ly8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHNcblx0XHRcdGlmICggdGltZW91dFRpbWVyICkge1xuXHRcdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb25cblx0XHRcdC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpXG5cdFx0XHR0cmFuc3BvcnQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgXCJcIjtcblxuXHRcdFx0Ly8gU2V0IHJlYWR5U3RhdGVcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7XG5cblx0XHRcdC8vIERldGVybWluZSBpZiBzdWNjZXNzZnVsXG5cdFx0XHRpc1N1Y2Nlc3MgPSBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNDtcblxuXHRcdFx0Ly8gR2V0IHJlc3BvbnNlIGRhdGFcblx0XHRcdGlmICggcmVzcG9uc2VzICkge1xuXHRcdFx0XHRyZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVXNlIGEgbm9vcCBjb252ZXJ0ZXIgZm9yIG1pc3Npbmcgc2NyaXB0IGJ1dCBub3QgaWYganNvbnBcblx0XHRcdGlmICggIWlzU3VjY2VzcyAmJlxuXHRcdFx0XHRqUXVlcnkuaW5BcnJheSggXCJzY3JpcHRcIiwgcy5kYXRhVHlwZXMgKSA+IC0xICYmXG5cdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBcImpzb25cIiwgcy5kYXRhVHlwZXMgKSA8IDAgKSB7XG5cdFx0XHRcdHMuY29udmVydGVyc1sgXCJ0ZXh0IHNjcmlwdFwiIF0gPSBmdW5jdGlvbigpIHt9O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IG5vIG1hdHRlciB3aGF0ICh0aGF0IHdheSByZXNwb25zZVhYWCBmaWVsZHMgYXJlIGFsd2F5cyBzZXQpXG5cdFx0XHRyZXNwb25zZSA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApO1xuXG5cdFx0XHQvLyBJZiBzdWNjZXNzZnVsLCBoYW5kbGUgdHlwZSBjaGFpbmluZ1xuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cblx0XHRcdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRcdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJMYXN0LU1vZGlmaWVkXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcImV0YWdcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGlmIG5vIGNvbnRlbnRcblx0XHRcdFx0aWYgKCBzdGF0dXMgPT09IDIwNCB8fCBzLnR5cGUgPT09IFwiSEVBRFwiICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vY29udGVudFwiO1xuXG5cdFx0XHRcdC8vIGlmIG5vdCBtb2RpZmllZFxuXHRcdFx0XHR9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDMwNCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub3Rtb2RpZmllZFwiO1xuXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgZGF0YSwgbGV0J3MgY29udmVydCBpdFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0ZTtcblx0XHRcdFx0XHRzdWNjZXNzID0gcmVzcG9uc2UuZGF0YTtcblx0XHRcdFx0XHRlcnJvciA9IHJlc3BvbnNlLmVycm9yO1xuXHRcdFx0XHRcdGlzU3VjY2VzcyA9ICFlcnJvcjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBFeHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dCBhbmQgbm9ybWFsaXplIGZvciBub24tYWJvcnRzXG5cdFx0XHRcdGVycm9yID0gc3RhdHVzVGV4dDtcblx0XHRcdFx0aWYgKCBzdGF0dXMgfHwgIXN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwiZXJyb3JcIjtcblx0XHRcdFx0XHRpZiAoIHN0YXR1cyA8IDAgKSB7XG5cdFx0XHRcdFx0XHRzdGF0dXMgPSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9iamVjdFxuXHRcdFx0anFYSFIuc3RhdHVzID0gc3RhdHVzO1xuXHRcdFx0anFYSFIuc3RhdHVzVGV4dCA9ICggbmF0aXZlU3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0ICkgKyBcIlwiO1xuXG5cdFx0XHQvLyBTdWNjZXNzL0Vycm9yXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQsIGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdGpxWEhSLnN0YXR1c0NvZGUoIHN0YXR1c0NvZGUgKTtcblx0XHRcdHN0YXR1c0NvZGUgPSB1bmRlZmluZWQ7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBpc1N1Y2Nlc3MgPyBcImFqYXhTdWNjZXNzXCIgOiBcImFqYXhFcnJvclwiLFxuXHRcdFx0XHRcdFsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbXBsZXRlXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQgXSApO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4Q29tcGxldGVcIiwgWyBqcVhIUiwgcyBdICk7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyXG5cdFx0XHRcdGlmICggISggLS1qUXVlcnkuYWN0aXZlICkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0b3BcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpxWEhSO1xuXHR9LFxuXG5cdGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIGRhdGEsIGNhbGxiYWNrLCBcImpzb25cIiApO1xuXHR9LFxuXG5cdGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgdW5kZWZpbmVkLCBjYWxsYmFjaywgXCJzY3JpcHRcIiApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiZ2V0XCIsIFwicG9zdFwiIF0sIGZ1bmN0aW9uKCBfaSwgbWV0aG9kICkge1xuXHRqUXVlcnlbIG1ldGhvZCBdID0gZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7XG5cblx0XHQvLyBTaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21pdHRlZFxuXHRcdGlmICggaXNGdW5jdGlvbiggZGF0YSApICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7XG5cdFx0XHRjYWxsYmFjayA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFRoZSB1cmwgY2FuIGJlIGFuIG9wdGlvbnMgb2JqZWN0ICh3aGljaCB0aGVuIG11c3QgaGF2ZSAudXJsKVxuXHRcdHJldHVybiBqUXVlcnkuYWpheCggalF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cdFx0XHR0eXBlOiBtZXRob2QsXG5cdFx0XHRkYXRhVHlwZTogdHlwZSxcblx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRzdWNjZXNzOiBjYWxsYmFja1xuXHRcdH0sIGpRdWVyeS5pc1BsYWluT2JqZWN0KCB1cmwgKSAmJiB1cmwgKSApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkuYWpheFByZWZpbHRlciggZnVuY3Rpb24oIHMgKSB7XG5cdHZhciBpO1xuXHRmb3IgKCBpIGluIHMuaGVhZGVycyApIHtcblx0XHRpZiAoIGkudG9Mb3dlckNhc2UoKSA9PT0gXCJjb250ZW50LXR5cGVcIiApIHtcblx0XHRcdHMuY29udGVudFR5cGUgPSBzLmhlYWRlcnNbIGkgXSB8fCBcIlwiO1xuXHRcdH1cblx0fVxufSApO1xuXG5cbmpRdWVyeS5fZXZhbFVybCA9IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMsIGRvYyApIHtcblx0cmV0dXJuIGpRdWVyeS5hamF4KCB7XG5cdFx0dXJsOiB1cmwsXG5cblx0XHQvLyBNYWtlIHRoaXMgZXhwbGljaXQsIHNpbmNlIHVzZXIgY2FuIG92ZXJyaWRlIHRoaXMgdGhyb3VnaCBhamF4U2V0dXAgKHRyYWMtMTEyNjQpXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRkYXRhVHlwZTogXCJzY3JpcHRcIixcblx0XHRjYWNoZTogdHJ1ZSxcblx0XHRhc3luYzogZmFsc2UsXG5cdFx0Z2xvYmFsOiBmYWxzZSxcblxuXHRcdC8vIE9ubHkgZXZhbHVhdGUgdGhlIHJlc3BvbnNlIGlmIGl0IGlzIHN1Y2Nlc3NmdWwgKGdoLTQxMjYpXG5cdFx0Ly8gZGF0YUZpbHRlciBpcyBub3QgaW52b2tlZCBmb3IgZmFpbHVyZSByZXNwb25zZXMsIHNvIHVzaW5nIGl0IGluc3RlYWRcblx0XHQvLyBvZiB0aGUgZGVmYXVsdCBjb252ZXJ0ZXIgaXMga2x1ZGd5IGJ1dCBpdCB3b3Jrcy5cblx0XHRjb252ZXJ0ZXJzOiB7XG5cdFx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCkge31cblx0XHR9LFxuXHRcdGRhdGFGaWx0ZXI6IGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCByZXNwb25zZSwgb3B0aW9ucywgZG9jICk7XG5cdFx0fVxuXHR9ICk7XG59O1xuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0d3JhcEFsbDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIHdyYXA7XG5cblx0XHRpZiAoIHRoaXNbIDAgXSApIHtcblx0XHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0XHRodG1sID0gaHRtbC5jYWxsKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmRcblx0XHRcdHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbIDAgXS5vd25lckRvY3VtZW50ICkuZXEoIDAgKS5jbG9uZSggdHJ1ZSApO1xuXG5cdFx0XHRpZiAoIHRoaXNbIDAgXS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR3cmFwLmluc2VydEJlZm9yZSggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHdyYXAubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGVsZW0gPSB0aGlzO1xuXG5cdFx0XHRcdHdoaWxlICggZWxlbS5maXJzdEVsZW1lbnRDaGlsZCApIHtcblx0XHRcdFx0XHRlbGVtID0gZWxlbS5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBlbGVtO1xuXHRcdFx0fSApLmFwcGVuZCggdGhpcyApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcElubmVyKCBodG1sLmNhbGwoIHRoaXMsIGkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSxcblx0XHRcdFx0Y29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7XG5cblx0XHRcdGlmICggY29udGVudHMubGVuZ3RoICkge1xuXHRcdFx0XHRjb250ZW50cy53cmFwQWxsKCBodG1sICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGYuYXBwZW5kKCBodG1sICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHdyYXA6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciBodG1sSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIGh0bWwgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcEFsbCggaHRtbElzRnVuY3Rpb24gPyBodG1sLmNhbGwoIHRoaXMsIGkgKSA6IGh0bWwgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0dW53cmFwOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dGhpcy5wYXJlbnQoIHNlbGVjdG9yICkubm90KCBcImJvZHlcIiApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApO1xuXHRcdH0gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhalF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlKCBlbGVtICk7XG59O1xualF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhISggZWxlbS5vZmZzZXRXaWR0aCB8fCBlbGVtLm9mZnNldEhlaWdodCB8fCBlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICk7XG59O1xuXG5cblxuXG5qUXVlcnkuYWpheFNldHRpbmdzLnhociA9IGZ1bmN0aW9uKCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7XG5cdH0gY2F0Y2ggKCBlICkge31cbn07XG5cbnZhciB4aHJTdWNjZXNzU3RhdHVzID0ge1xuXG5cdFx0Ly8gRmlsZSBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyBjb2RlIDAsIGFzc3VtZSAyMDBcblx0XHQwOiAyMDAsXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdC8vIHRyYWMtMTQ1MDogc29tZXRpbWVzIElFIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDRcblx0XHQxMjIzOiAyMDRcblx0fSxcblx0eGhyU3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTtcblxuc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCBcIndpdGhDcmVkZW50aWFsc1wiIGluIHhoclN1cHBvcnRlZCApO1xuc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVkID0gISF4aHJTdXBwb3J0ZWQ7XG5cbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0dmFyIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrO1xuXG5cdC8vIENyb3NzIGRvbWFpbiBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3Rcblx0aWYgKCBzdXBwb3J0LmNvcnMgfHwgeGhyU3VwcG9ydGVkICYmICFvcHRpb25zLmNyb3NzRG9tYWluICkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHZhciBpLFxuXHRcdFx0XHRcdHhociA9IG9wdGlvbnMueGhyKCk7XG5cblx0XHRcdFx0eGhyLm9wZW4oXG5cdFx0XHRcdFx0b3B0aW9ucy50eXBlLFxuXHRcdFx0XHRcdG9wdGlvbnMudXJsLFxuXHRcdFx0XHRcdG9wdGlvbnMuYXN5bmMsXG5cdFx0XHRcdFx0b3B0aW9ucy51c2VybmFtZSxcblx0XHRcdFx0XHRvcHRpb25zLnBhc3N3b3JkXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Ly8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBwcm92aWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdGZvciAoIGkgaW4gb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0XHR4aHJbIGkgXSA9IG9wdGlvbnMueGhyRmllbGRzWyBpIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7XG5cdFx0XHRcdFx0eGhyLm92ZXJyaWRlTWltZVR5cGUoIG9wdGlvbnMubWltZVR5cGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyXG5cdFx0XHRcdC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmVcblx0XHRcdFx0Ly8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS5cblx0XHRcdFx0Ly8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApXG5cdFx0XHRcdC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLlxuXHRcdFx0XHRpZiAoICFvcHRpb25zLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdICkge1xuXHRcdFx0XHRcdGhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gPSBcIlhNTEh0dHBSZXF1ZXN0XCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTZXQgaGVhZGVyc1xuXHRcdFx0XHRmb3IgKCBpIGluIGhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoIGksIGhlYWRlcnNbIGkgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRjYWxsYmFjayA9IGVycm9yQ2FsbGJhY2sgPSB4aHIub25sb2FkID1cblx0XHRcdFx0XHRcdFx0XHR4aHIub25lcnJvciA9IHhoci5vbmFib3J0ID0geGhyLm9udGltZW91dCA9XG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiYWJvcnRcIiApIHtcblx0XHRcdFx0XHRcdFx0XHR4aHIuYWJvcnQoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gXCJlcnJvclwiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBPbiBhIG1hbnVhbCBuYXRpdmUgYWJvcnQsIElFOSB0aHJvd3Ncblx0XHRcdFx0XHRcdFx0XHQvLyBlcnJvcnMgb24gYW55IHByb3BlcnR5IGFjY2VzcyB0aGF0IGlzIG5vdCByZWFkeVN0YXRlXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlb2YgeGhyLnN0YXR1cyAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCAwLCBcImVycm9yXCIgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRmlsZTogcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgMDsgc2VlIHRyYWMtODYwNSwgdHJhYy0xNDIwN1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHJTdWNjZXNzU3RhdHVzWyB4aHIuc3RhdHVzIF0gfHwgeGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0LFxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSUU5IGhhcyBubyBYSFIyIGJ1dCB0aHJvd3Mgb24gYmluYXJ5ICh0cmFjLTExNDI2KVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9yIFhIUjIgbm9uLXRleHQsIGxldCB0aGUgY2FsbGVyIGhhbmRsZSBpdCAoZ2gtMjQ5OClcblx0XHRcdFx0XHRcdFx0XHRcdCggeGhyLnJlc3BvbnNlVHlwZSB8fCBcInRleHRcIiApICE9PSBcInRleHRcIiAgfHxcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiB4aHIucmVzcG9uc2VUZXh0ICE9PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0eyBiaW5hcnk6IHhoci5yZXNwb25zZSB9IDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0eyB0ZXh0OiB4aHIucmVzcG9uc2VUZXh0IH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBMaXN0ZW4gdG8gZXZlbnRzXG5cdFx0XHRcdHhoci5vbmxvYWQgPSBjYWxsYmFjaygpO1xuXHRcdFx0XHRlcnJvckNhbGxiYWNrID0geGhyLm9uZXJyb3IgPSB4aHIub250aW1lb3V0ID0gY2FsbGJhY2soIFwiZXJyb3JcIiApO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdFx0XHQvLyBVc2Ugb25yZWFkeXN0YXRlY2hhbmdlIHRvIHJlcGxhY2Ugb25hYm9ydFxuXHRcdFx0XHQvLyB0byBoYW5kbGUgdW5jYXVnaHQgYWJvcnRzXG5cdFx0XHRcdGlmICggeGhyLm9uYWJvcnQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR4aHIub25hYm9ydCA9IGVycm9yQ2FsbGJhY2s7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBDaGVjayByZWFkeVN0YXRlIGJlZm9yZSB0aW1lb3V0IGFzIGl0IGNoYW5nZXNcblx0XHRcdFx0XHRcdGlmICggeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQWxsb3cgb25lcnJvciB0byBiZSBjYWxsZWQgZmlyc3QsXG5cdFx0XHRcdFx0XHRcdC8vIGJ1dCB0aGF0IHdpbGwgbm90IGhhbmRsZSBhIG5hdGl2ZSBhYm9ydFxuXHRcdFx0XHRcdFx0XHQvLyBBbHNvLCBzYXZlIGVycm9yQ2FsbGJhY2sgdG8gYSB2YXJpYWJsZVxuXHRcdFx0XHRcdFx0XHQvLyBhcyB4aHIub25lcnJvciBjYW5ub3QgYmUgYWNjZXNzZWRcblx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgYWJvcnQgY2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBjYWxsYmFjayggXCJhYm9ydFwiICk7XG5cblx0XHRcdFx0dHJ5IHtcblxuXHRcdFx0XHRcdC8vIERvIHNlbmQgdGhlIHJlcXVlc3QgKHRoaXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbilcblx0XHRcdFx0XHR4aHIuc2VuZCggb3B0aW9ucy5oYXNDb250ZW50ICYmIG9wdGlvbnMuZGF0YSB8fCBudWxsICk7XG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0Ly8gdHJhYy0xNDY4MzogT25seSByZXRocm93IGlmIHRoaXMgaGFzbid0IGJlZW4gbm90aWZpZWQgYXMgYW4gZXJyb3IgeWV0XG5cdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUHJldmVudCBhdXRvLWV4ZWN1dGlvbiBvZiBzY3JpcHRzIHdoZW4gbm8gZXhwbGljaXQgZGF0YVR5cGUgd2FzIHByb3ZpZGVkIChTZWUgZ2gtMjQzMilcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMuY29udGVudHMuc2NyaXB0ID0gZmFsc2U7XG5cdH1cbn0gKTtcblxuLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGVcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0YWNjZXB0czoge1xuXHRcdHNjcmlwdDogXCJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIFwiICtcblx0XHRcdFwiYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0XCJcblx0fSxcblx0Y29udGVudHM6IHtcblx0XHRzY3JpcHQ6IC9cXGIoPzpqYXZhfGVjbWEpc2NyaXB0XFxiL1xuXHR9LFxuXHRjb252ZXJ0ZXJzOiB7XG5cdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7XG5cdFx0XHRyZXR1cm4gdGV4dDtcblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBjcm9zc0RvbWFpblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRzLmNhY2hlID0gZmFsc2U7XG5cdH1cblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMudHlwZSA9IFwiR0VUXCI7XG5cdH1cbn0gKTtcblxuLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0XG5qUXVlcnkuYWpheFRyYW5zcG9ydCggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cblx0Ly8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiBvciBmb3JjZWQtYnktYXR0cnMgcmVxdWVzdHNcblx0aWYgKCBzLmNyb3NzRG9tYWluIHx8IHMuc2NyaXB0QXR0cnMgKSB7XG5cdFx0dmFyIHNjcmlwdCwgY2FsbGJhY2s7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBfLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0c2NyaXB0ID0galF1ZXJ5KCBcIjxzY3JpcHQ+XCIgKVxuXHRcdFx0XHRcdC5hdHRyKCBzLnNjcmlwdEF0dHJzIHx8IHt9IClcblx0XHRcdFx0XHQucHJvcCggeyBjaGFyc2V0OiBzLnNjcmlwdENoYXJzZXQsIHNyYzogcy51cmwgfSApXG5cdFx0XHRcdFx0Lm9uKCBcImxvYWQgZXJyb3JcIiwgY2FsbGJhY2sgPSBmdW5jdGlvbiggZXZ0ICkge1xuXHRcdFx0XHRcdFx0c2NyaXB0LnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBudWxsO1xuXHRcdFx0XHRcdFx0aWYgKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCBldnQudHlwZSA9PT0gXCJlcnJvclwiID8gNDA0IDogMjAwLCBldnQudHlwZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHQvLyBVc2UgbmF0aXZlIERPTSBtYW5pcHVsYXRpb24gdG8gYXZvaWQgb3VyIGRvbU1hbmlwIEFKQVggdHJpY2tlcnlcblx0XHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0WyAwIF0gKTtcblx0XHRcdH0sXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIG9sZENhbGxiYWNrcyA9IFtdLFxuXHRyanNvbnAgPSAvKD0pXFw/KD89JnwkKXxcXD9cXD8vO1xuXG4vLyBEZWZhdWx0IGpzb25wIHNldHRpbmdzXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGpzb25wOiBcImNhbGxiYWNrXCIsXG5cdGpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBjYWxsYmFjayA9IG9sZENhbGxiYWNrcy5wb3AoKSB8fCAoIGpRdWVyeS5leHBhbmRvICsgXCJfXCIgKyAoIG5vbmNlLmd1aWQrKyApICk7XG5cdFx0dGhpc1sgY2FsbGJhY2sgXSA9IHRydWU7XG5cdFx0cmV0dXJuIGNhbGxiYWNrO1xuXHR9XG59ICk7XG5cbi8vIERldGVjdCwgbm9ybWFsaXplIG9wdGlvbnMgYW5kIGluc3RhbGwgY2FsbGJhY2tzIGZvciBqc29ucCByZXF1ZXN0c1xualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwianNvbiBqc29ucFwiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7XG5cblx0dmFyIGNhbGxiYWNrTmFtZSwgb3ZlcndyaXR0ZW4sIHJlc3BvbnNlQ29udGFpbmVyLFxuXHRcdGpzb25Qcm9wID0gcy5qc29ucCAhPT0gZmFsc2UgJiYgKCByanNvbnAudGVzdCggcy51cmwgKSA/XG5cdFx0XHRcInVybFwiIDpcblx0XHRcdHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKVxuXHRcdFx0XHRcdC5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgJiZcblx0XHRcdFx0cmpzb25wLnRlc3QoIHMuZGF0YSApICYmIFwiZGF0YVwiXG5cdFx0KTtcblxuXHQvLyBIYW5kbGUgaWZmIHRoZSBleHBlY3RlZCBkYXRhIHR5cGUgaXMgXCJqc29ucFwiIG9yIHdlIGhhdmUgYSBwYXJhbWV0ZXIgdG8gc2V0XG5cdGlmICgganNvblByb3AgfHwgcy5kYXRhVHlwZXNbIDAgXSA9PT0gXCJqc29ucFwiICkge1xuXG5cdFx0Ly8gR2V0IGNhbGxiYWNrIG5hbWUsIHJlbWVtYmVyaW5nIHByZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdFxuXHRcdGNhbGxiYWNrTmFtZSA9IHMuanNvbnBDYWxsYmFjayA9IGlzRnVuY3Rpb24oIHMuanNvbnBDYWxsYmFjayApID9cblx0XHRcdHMuanNvbnBDYWxsYmFjaygpIDpcblx0XHRcdHMuanNvbnBDYWxsYmFjaztcblxuXHRcdC8vIEluc2VydCBjYWxsYmFjayBpbnRvIHVybCBvciBmb3JtIGRhdGFcblx0XHRpZiAoIGpzb25Qcm9wICkge1xuXHRcdFx0c1sganNvblByb3AgXSA9IHNbIGpzb25Qcm9wIF0ucmVwbGFjZSggcmpzb25wLCBcIiQxXCIgKyBjYWxsYmFja05hbWUgKTtcblx0XHR9IGVsc2UgaWYgKCBzLmpzb25wICE9PSBmYWxzZSApIHtcblx0XHRcdHMudXJsICs9ICggcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmpzb25wICsgXCI9XCIgKyBjYWxsYmFja05hbWU7XG5cdFx0fVxuXG5cdFx0Ly8gVXNlIGRhdGEgY29udmVydGVyIHRvIHJldHJpZXZlIGpzb24gYWZ0ZXIgc2NyaXB0IGV4ZWN1dGlvblxuXHRcdHMuY29udmVydGVyc1sgXCJzY3JpcHQganNvblwiIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggIXJlc3BvbnNlQ29udGFpbmVyICkge1xuXHRcdFx0XHRqUXVlcnkuZXJyb3IoIGNhbGxiYWNrTmFtZSArIFwiIHdhcyBub3QgY2FsbGVkXCIgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXNwb25zZUNvbnRhaW5lclsgMCBdO1xuXHRcdH07XG5cblx0XHQvLyBGb3JjZSBqc29uIGRhdGFUeXBlXG5cdFx0cy5kYXRhVHlwZXNbIDAgXSA9IFwianNvblwiO1xuXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja1xuXHRcdG92ZXJ3cml0dGVuID0gd2luZG93WyBjYWxsYmFja05hbWUgXTtcblx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IGFyZ3VtZW50cztcblx0XHR9O1xuXG5cdFx0Ly8gQ2xlYW4tdXAgZnVuY3Rpb24gKGZpcmVzIGFmdGVyIGNvbnZlcnRlcnMpXG5cdFx0anFYSFIuYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gSWYgcHJldmlvdXMgdmFsdWUgZGlkbid0IGV4aXN0IC0gcmVtb3ZlIGl0XG5cdFx0XHRpZiAoIG92ZXJ3cml0dGVuID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdGpRdWVyeSggd2luZG93ICkucmVtb3ZlUHJvcCggY2FsbGJhY2tOYW1lICk7XG5cblx0XHRcdC8vIE90aGVyd2lzZSByZXN0b3JlIHByZWV4aXN0aW5nIHZhbHVlXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gb3ZlcndyaXR0ZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNhdmUgYmFjayBhcyBmcmVlXG5cdFx0XHRpZiAoIHNbIGNhbGxiYWNrTmFtZSBdICkge1xuXG5cdFx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHJlLXVzaW5nIHRoZSBvcHRpb25zIGRvZXNuJ3Qgc2NyZXcgdGhpbmdzIGFyb3VuZFxuXHRcdFx0XHRzLmpzb25wQ2FsbGJhY2sgPSBvcmlnaW5hbFNldHRpbmdzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHRcdFx0Ly8gU2F2ZSB0aGUgY2FsbGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVzZVxuXHRcdFx0XHRvbGRDYWxsYmFja3MucHVzaCggY2FsbGJhY2tOYW1lICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENhbGwgaWYgaXQgd2FzIGEgZnVuY3Rpb24gYW5kIHdlIGhhdmUgYSByZXNwb25zZVxuXHRcdFx0aWYgKCByZXNwb25zZUNvbnRhaW5lciAmJiBpc0Z1bmN0aW9uKCBvdmVyd3JpdHRlbiApICkge1xuXHRcdFx0XHRvdmVyd3JpdHRlbiggcmVzcG9uc2VDb250YWluZXJbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IG92ZXJ3cml0dGVuID0gdW5kZWZpbmVkO1xuXHRcdH0gKTtcblxuXHRcdC8vIERlbGVnYXRlIHRvIHNjcmlwdFxuXHRcdHJldHVybiBcInNjcmlwdFwiO1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA4IG9ubHlcbi8vIEluIFNhZmFyaSA4IGRvY3VtZW50cyBjcmVhdGVkIHZpYSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnRcbi8vIGNvbGxhcHNlIHNpYmxpbmcgZm9ybXM6IHRoZSBzZWNvbmQgb25lIGJlY29tZXMgYSBjaGlsZCBvZiB0aGUgZmlyc3Qgb25lLlxuLy8gQmVjYXVzZSBvZiB0aGF0LCB0aGlzIHNlY3VyaXR5IG1lYXN1cmUgaGFzIHRvIGJlIGRpc2FibGVkIGluIFNhZmFyaSA4LlxuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzMzN1xuc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgPSAoIGZ1bmN0aW9uKCkge1xuXHR2YXIgYm9keSA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggXCJcIiApLmJvZHk7XG5cdGJvZHkuaW5uZXJIVE1MID0gXCI8Zm9ybT48L2Zvcm0+PGZvcm0+PC9mb3JtPlwiO1xuXHRyZXR1cm4gYm9keS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMjtcbn0gKSgpO1xuXG5cbi8vIEFyZ3VtZW50IFwiZGF0YVwiIHNob3VsZCBiZSBzdHJpbmcgb2YgaHRtbFxuLy8gY29udGV4dCAob3B0aW9uYWwpOiBJZiBzcGVjaWZpZWQsIHRoZSBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhpcyBjb250ZXh0LFxuLy8gZGVmYXVsdHMgdG8gZG9jdW1lbnRcbi8vIGtlZXBTY3JpcHRzIChvcHRpb25hbCk6IElmIHRydWUsIHdpbGwgaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgaHRtbCBzdHJpbmdcbmpRdWVyeS5wYXJzZUhUTUwgPSBmdW5jdGlvbiggZGF0YSwgY29udGV4dCwga2VlcFNjcmlwdHMgKSB7XG5cdGlmICggdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGtlZXBTY3JpcHRzID0gY29udGV4dDtcblx0XHRjb250ZXh0ID0gZmFsc2U7XG5cdH1cblxuXHR2YXIgYmFzZSwgcGFyc2VkLCBzY3JpcHRzO1xuXG5cdGlmICggIWNvbnRleHQgKSB7XG5cblx0XHQvLyBTdG9wIHNjcmlwdHMgb3IgaW5saW5lIGV2ZW50IGhhbmRsZXJzIGZyb20gYmVpbmcgZXhlY3V0ZWQgaW1tZWRpYXRlbHlcblx0XHQvLyBieSB1c2luZyBkb2N1bWVudC5pbXBsZW1lbnRhdGlvblxuXHRcdGlmICggc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgKSB7XG5cdFx0XHRjb250ZXh0ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICk7XG5cblx0XHRcdC8vIFNldCB0aGUgYmFzZSBocmVmIGZvciB0aGUgY3JlYXRlZCBkb2N1bWVudFxuXHRcdFx0Ly8gc28gYW55IHBhcnNlZCBlbGVtZW50cyB3aXRoIFVSTHNcblx0XHRcdC8vIGFyZSBiYXNlZCBvbiB0aGUgZG9jdW1lbnQncyBVUkwgKGdoLTI5NjUpXG5cdFx0XHRiYXNlID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCBcImJhc2VcIiApO1xuXHRcdFx0YmFzZS5ocmVmID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZjtcblx0XHRcdGNvbnRleHQuaGVhZC5hcHBlbmRDaGlsZCggYmFzZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb250ZXh0ID0gZG9jdW1lbnQ7XG5cdFx0fVxuXHR9XG5cblx0cGFyc2VkID0gcnNpbmdsZVRhZy5leGVjKCBkYXRhICk7XG5cdHNjcmlwdHMgPSAha2VlcFNjcmlwdHMgJiYgW107XG5cblx0Ly8gU2luZ2xlIHRhZ1xuXHRpZiAoIHBhcnNlZCApIHtcblx0XHRyZXR1cm4gWyBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIHBhcnNlZFsgMSBdICkgXTtcblx0fVxuXG5cdHBhcnNlZCA9IGJ1aWxkRnJhZ21lbnQoIFsgZGF0YSBdLCBjb250ZXh0LCBzY3JpcHRzICk7XG5cblx0aWYgKCBzY3JpcHRzICYmIHNjcmlwdHMubGVuZ3RoICkge1xuXHRcdGpRdWVyeSggc2NyaXB0cyApLnJlbW92ZSgpO1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIHBhcnNlZC5jaGlsZE5vZGVzICk7XG59O1xuXG5cbi8qKlxuICogTG9hZCBhIHVybCBpbnRvIGEgcGFnZVxuICovXG5qUXVlcnkuZm4ubG9hZCA9IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7XG5cdHZhciBzZWxlY3RvciwgdHlwZSwgcmVzcG9uc2UsXG5cdFx0c2VsZiA9IHRoaXMsXG5cdFx0b2ZmID0gdXJsLmluZGV4T2YoIFwiIFwiICk7XG5cblx0aWYgKCBvZmYgPiAtMSApIHtcblx0XHRzZWxlY3RvciA9IHN0cmlwQW5kQ29sbGFwc2UoIHVybC5zbGljZSggb2ZmICkgKTtcblx0XHR1cmwgPSB1cmwuc2xpY2UoIDAsIG9mZiApO1xuXHR9XG5cblx0Ly8gSWYgaXQncyBhIGZ1bmN0aW9uXG5cdGlmICggaXNGdW5jdGlvbiggcGFyYW1zICkgKSB7XG5cblx0XHQvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFja1xuXHRcdGNhbGxiYWNrID0gcGFyYW1zO1xuXHRcdHBhcmFtcyA9IHVuZGVmaW5lZDtcblxuXHQvLyBPdGhlcndpc2UsIGJ1aWxkIGEgcGFyYW0gc3RyaW5nXG5cdH0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zID09PSBcIm9iamVjdFwiICkge1xuXHRcdHR5cGUgPSBcIlBPU1RcIjtcblx0fVxuXG5cdC8vIElmIHdlIGhhdmUgZWxlbWVudHMgdG8gbW9kaWZ5LCBtYWtlIHRoZSByZXF1ZXN0XG5cdGlmICggc2VsZi5sZW5ndGggPiAwICkge1xuXHRcdGpRdWVyeS5hamF4KCB7XG5cdFx0XHR1cmw6IHVybCxcblxuXHRcdFx0Ly8gSWYgXCJ0eXBlXCIgdmFyaWFibGUgaXMgdW5kZWZpbmVkLCB0aGVuIFwiR0VUXCIgbWV0aG9kIHdpbGwgYmUgdXNlZC5cblx0XHRcdC8vIE1ha2UgdmFsdWUgb2YgdGhpcyBmaWVsZCBleHBsaWNpdCBzaW5jZVxuXHRcdFx0Ly8gdXNlciBjYW4gb3ZlcnJpZGUgaXQgdGhyb3VnaCBhamF4U2V0dXAgbWV0aG9kXG5cdFx0XHR0eXBlOiB0eXBlIHx8IFwiR0VUXCIsXG5cdFx0XHRkYXRhVHlwZTogXCJodG1sXCIsXG5cdFx0XHRkYXRhOiBwYXJhbXNcblx0XHR9ICkuZG9uZSggZnVuY3Rpb24oIHJlc3BvbnNlVGV4dCApIHtcblxuXHRcdFx0Ly8gU2F2ZSByZXNwb25zZSBmb3IgdXNlIGluIGNvbXBsZXRlIGNhbGxiYWNrXG5cdFx0XHRyZXNwb25zZSA9IGFyZ3VtZW50cztcblxuXHRcdFx0c2VsZi5odG1sKCBzZWxlY3RvciA/XG5cblx0XHRcdFx0Ly8gSWYgYSBzZWxlY3RvciB3YXMgc3BlY2lmaWVkLCBsb2NhdGUgdGhlIHJpZ2h0IGVsZW1lbnRzIGluIGEgZHVtbXkgZGl2XG5cdFx0XHRcdC8vIEV4Y2x1ZGUgc2NyaXB0cyB0byBhdm9pZCBJRSAnUGVybWlzc2lvbiBEZW5pZWQnIGVycm9yc1xuXHRcdFx0XHRqUXVlcnkoIFwiPGRpdj5cIiApLmFwcGVuZCggalF1ZXJ5LnBhcnNlSFRNTCggcmVzcG9uc2VUZXh0ICkgKS5maW5kKCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgdXNlIHRoZSBmdWxsIHJlc3VsdFxuXHRcdFx0XHRyZXNwb25zZVRleHQgKTtcblxuXHRcdC8vIElmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJkYXRhXCIsIFwic3RhdHVzXCIsIFwianFYSFJcIlxuXHRcdC8vIGJ1dCB0aGV5IGFyZSBpZ25vcmVkIGJlY2F1c2UgcmVzcG9uc2Ugd2FzIHNldCBhYm92ZS5cblx0XHQvLyBJZiBpdCBmYWlscywgdGhpcyBmdW5jdGlvbiBnZXRzIFwianFYSFJcIiwgXCJzdGF0dXNcIiwgXCJlcnJvclwiXG5cdFx0fSApLmFsd2F5cyggY2FsbGJhY2sgJiYgZnVuY3Rpb24oIGpxWEhSLCBzdGF0dXMgKSB7XG5cdFx0XHRzZWxmLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjYWxsYmFjay5hcHBseSggdGhpcywgcmVzcG9uc2UgfHwgWyBqcVhIUi5yZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApO1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuXG5cblxualF1ZXJ5LmV4cHIucHNldWRvcy5hbmltYXRlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4galF1ZXJ5LmdyZXAoIGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTtcblx0fSApLmxlbmd0aDtcbn07XG5cblxuXG5cbmpRdWVyeS5vZmZzZXQgPSB7XG5cdHNldE9mZnNldDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGkgKSB7XG5cdFx0dmFyIGN1clBvc2l0aW9uLCBjdXJMZWZ0LCBjdXJDU1NUb3AsIGN1clRvcCwgY3VyT2Zmc2V0LCBjdXJDU1NMZWZ0LCBjYWxjdWxhdGVQb3NpdGlvbixcblx0XHRcdHBvc2l0aW9uID0galF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICksXG5cdFx0XHRjdXJFbGVtID0galF1ZXJ5KCBlbGVtICksXG5cdFx0XHRwcm9wcyA9IHt9O1xuXG5cdFx0Ly8gU2V0IHBvc2l0aW9uIGZpcnN0LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMgZWxlbVxuXHRcdGlmICggcG9zaXRpb24gPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRlbGVtLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuXHRcdH1cblxuXHRcdGN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0KCk7XG5cdFx0Y3VyQ1NTVG9wID0galF1ZXJ5LmNzcyggZWxlbSwgXCJ0b3BcIiApO1xuXHRcdGN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImxlZnRcIiApO1xuXHRcdGNhbGN1bGF0ZVBvc2l0aW9uID0gKCBwb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiIHx8IHBvc2l0aW9uID09PSBcImZpeGVkXCIgKSAmJlxuXHRcdFx0KCBjdXJDU1NUb3AgKyBjdXJDU1NMZWZ0ICkuaW5kZXhPZiggXCJhdXRvXCIgKSA+IC0xO1xuXG5cdFx0Ly8gTmVlZCB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZSBwb3NpdGlvbiBpZiBlaXRoZXJcblx0XHQvLyB0b3Agb3IgbGVmdCBpcyBhdXRvIGFuZCBwb3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1dGUgb3IgZml4ZWRcblx0XHRpZiAoIGNhbGN1bGF0ZVBvc2l0aW9uICkge1xuXHRcdFx0Y3VyUG9zaXRpb24gPSBjdXJFbGVtLnBvc2l0aW9uKCk7XG5cdFx0XHRjdXJUb3AgPSBjdXJQb3NpdGlvbi50b3A7XG5cdFx0XHRjdXJMZWZ0ID0gY3VyUG9zaXRpb24ubGVmdDtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwO1xuXHRcdFx0Y3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwO1xuXHRcdH1cblxuXHRcdGlmICggaXNGdW5jdGlvbiggb3B0aW9ucyApICkge1xuXG5cdFx0XHQvLyBVc2UgalF1ZXJ5LmV4dGVuZCBoZXJlIHRvIGFsbG93IG1vZGlmaWNhdGlvbiBvZiBjb29yZGluYXRlcyBhcmd1bWVudCAoZ2gtMTg0OClcblx0XHRcdG9wdGlvbnMgPSBvcHRpb25zLmNhbGwoIGVsZW0sIGksIGpRdWVyeS5leHRlbmQoIHt9LCBjdXJPZmZzZXQgKSApO1xuXHRcdH1cblxuXHRcdGlmICggb3B0aW9ucy50b3AgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLnRvcCA9ICggb3B0aW9ucy50b3AgLSBjdXJPZmZzZXQudG9wICkgKyBjdXJUb3A7XG5cdFx0fVxuXHRcdGlmICggb3B0aW9ucy5sZWZ0ICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy5sZWZ0ID0gKCBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCApICsgY3VyTGVmdDtcblx0XHR9XG5cblx0XHRpZiAoIFwidXNpbmdcIiBpbiBvcHRpb25zICkge1xuXHRcdFx0b3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1ckVsZW0uY3NzKCBwcm9wcyApO1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdC8vIG9mZnNldCgpIHJlbGF0ZXMgYW4gZWxlbWVudCdzIGJvcmRlciBib3ggdG8gdGhlIGRvY3VtZW50IG9yaWdpblxuXHRvZmZzZXQ6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdFx0Ly8gUHJlc2VydmUgY2hhaW5pbmcgZm9yIHNldHRlclxuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiBvcHRpb25zID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHR0aGlzIDpcblx0XHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0XHRqUXVlcnkub2Zmc2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApO1xuXHRcdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0dmFyIHJlY3QsIHdpbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFlbGVtICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB6ZXJvcyBmb3IgZGlzY29ubmVjdGVkIGFuZCBoaWRkZW4gKGRpc3BsYXk6IG5vbmUpIGVsZW1lbnRzIChnaC0yMzEwKVxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGFcblx0XHQvLyBkaXNjb25uZWN0ZWQgbm9kZSBpbiBJRSB0aHJvd3MgYW4gZXJyb3Jcblx0XHRpZiAoICFlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cdFx0fVxuXG5cdFx0Ly8gR2V0IGRvY3VtZW50LXJlbGF0aXZlIHBvc2l0aW9uIGJ5IGFkZGluZyB2aWV3cG9ydCBzY3JvbGwgdG8gdmlld3BvcnQtcmVsYXRpdmUgZ0JDUlxuXHRcdHJlY3QgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdHdpbiA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldztcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiByZWN0LnRvcCArIHdpbi5wYWdlWU9mZnNldCxcblx0XHRcdGxlZnQ6IHJlY3QubGVmdCArIHdpbi5wYWdlWE9mZnNldFxuXHRcdH07XG5cdH0sXG5cblx0Ly8gcG9zaXRpb24oKSByZWxhdGVzIGFuIGVsZW1lbnQncyBtYXJnaW4gYm94IHRvIGl0cyBvZmZzZXQgcGFyZW50J3MgcGFkZGluZyBib3hcblx0Ly8gVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgYmVoYXZpb3Igb2YgQ1NTIGFic29sdXRlIHBvc2l0aW9uaW5nXG5cdHBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICF0aGlzWyAwIF0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIG9mZnNldFBhcmVudCwgb2Zmc2V0LCBkb2MsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0cGFyZW50T2Zmc2V0ID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblxuXHRcdC8vIHBvc2l0aW9uOmZpeGVkIGVsZW1lbnRzIGFyZSBvZmZzZXQgZnJvbSB0aGUgdmlld3BvcnQsIHdoaWNoIGl0c2VsZiBhbHdheXMgaGFzIHplcm8gb2Zmc2V0XG5cdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSA9PT0gXCJmaXhlZFwiICkge1xuXG5cdFx0XHQvLyBBc3N1bWUgcG9zaXRpb246Zml4ZWQgaW1wbGllcyBhdmFpbGFiaWxpdHkgb2YgZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG5cdFx0XHRvZmZzZXQgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdG9mZnNldCA9IHRoaXMub2Zmc2V0KCk7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHRoZSAqcmVhbCogb2Zmc2V0IHBhcmVudCwgd2hpY2ggY2FuIGJlIHRoZSBkb2N1bWVudCBvciBpdHMgcm9vdCBlbGVtZW50XG5cdFx0XHQvLyB3aGVuIGEgc3RhdGljYWxseSBwb3NpdGlvbmVkIGVsZW1lbnQgaXMgaWRlbnRpZmllZFxuXHRcdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50O1xuXHRcdFx0b2Zmc2V0UGFyZW50ID0gZWxlbS5vZmZzZXRQYXJlbnQgfHwgZG9jLmRvY3VtZW50RWxlbWVudDtcblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmXG5cdFx0XHRcdCggb2Zmc2V0UGFyZW50ID09PSBkb2MuYm9keSB8fCBvZmZzZXRQYXJlbnQgPT09IGRvYy5kb2N1bWVudEVsZW1lbnQgKSAmJlxuXHRcdFx0XHRqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xuXG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0UGFyZW50ICE9PSBlbGVtICYmIG9mZnNldFBhcmVudC5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHQvLyBJbmNvcnBvcmF0ZSBib3JkZXJzIGludG8gaXRzIG9mZnNldCwgc2luY2UgdGhleSBhcmUgb3V0c2lkZSBpdHMgY29udGVudCBvcmlnaW5cblx0XHRcdFx0cGFyZW50T2Zmc2V0ID0galF1ZXJ5KCBvZmZzZXRQYXJlbnQgKS5vZmZzZXQoKTtcblx0XHRcdFx0cGFyZW50T2Zmc2V0LnRvcCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwiYm9yZGVyVG9wV2lkdGhcIiwgdHJ1ZSApO1xuXHRcdFx0XHRwYXJlbnRPZmZzZXQubGVmdCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwiYm9yZGVyTGVmdFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTdWJ0cmFjdCBwYXJlbnQgb2Zmc2V0cyBhbmQgZWxlbWVudCBtYXJnaW5zXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogb2Zmc2V0LnRvcCAtIHBhcmVudE9mZnNldC50b3AgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpblRvcFwiLCB0cnVlICksXG5cdFx0XHRsZWZ0OiBvZmZzZXQubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0IC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIsIHRydWUgKVxuXHRcdH07XG5cdH0sXG5cblx0Ly8gVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gZG9jdW1lbnRFbGVtZW50IGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG5cdC8vIDEpIEZvciB0aGUgZWxlbWVudCBpbnNpZGUgdGhlIGlmcmFtZSB3aXRob3V0IG9mZnNldFBhcmVudCwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm5cblx0Ly8gICAgZG9jdW1lbnRFbGVtZW50IG9mIHRoZSBwYXJlbnQgd2luZG93XG5cdC8vIDIpIEZvciB0aGUgaGlkZGVuIG9yIGRldGFjaGVkIGVsZW1lbnRcblx0Ly8gMykgRm9yIGJvZHkgb3IgaHRtbCBlbGVtZW50LCBpLmUuIGluIGNhc2Ugb2YgdGhlIGh0bWwgbm9kZSAtIGl0IHdpbGwgcmV0dXJuIGl0c2VsZlxuXHQvL1xuXHQvLyBidXQgdGhvc2UgZXhjZXB0aW9ucyB3ZXJlIG5ldmVyIHByZXNlbnRlZCBhcyBhIHJlYWwgbGlmZSB1c2UtY2FzZXNcblx0Ly8gYW5kIG1pZ2h0IGJlIGNvbnNpZGVyZWQgYXMgbW9yZSBwcmVmZXJhYmxlIHJlc3VsdHMuXG5cdC8vXG5cdC8vIFRoaXMgbG9naWMsIGhvd2V2ZXIsIGlzIG5vdCBndWFyYW50ZWVkIGFuZCBjYW4gY2hhbmdlIGF0IGFueSBwb2ludCBpbiB0aGUgZnV0dXJlXG5cdG9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudDtcblxuXHRcdFx0d2hpbGUgKCBvZmZzZXRQYXJlbnQgJiYgalF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9mZnNldFBhcmVudCB8fCBkb2N1bWVudEVsZW1lbnQ7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbi8vIENyZWF0ZSBzY3JvbGxMZWZ0IGFuZCBzY3JvbGxUb3AgbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgc2Nyb2xsTGVmdDogXCJwYWdlWE9mZnNldFwiLCBzY3JvbGxUb3A6IFwicGFnZVlPZmZzZXRcIiB9LCBmdW5jdGlvbiggbWV0aG9kLCBwcm9wICkge1xuXHR2YXIgdG9wID0gXCJwYWdlWU9mZnNldFwiID09PSBwcm9wO1xuXG5cdGpRdWVyeS5mblsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdmFsICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBtZXRob2QsIHZhbCApIHtcblxuXHRcdFx0Ly8gQ29hbGVzY2UgZG9jdW1lbnRzIGFuZCB3aW5kb3dzXG5cdFx0XHR2YXIgd2luO1xuXHRcdFx0aWYgKCBpc1dpbmRvdyggZWxlbSApICkge1xuXHRcdFx0XHR3aW4gPSBlbGVtO1xuXHRcdFx0fSBlbHNlIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0d2luID0gZWxlbS5kZWZhdWx0Vmlldztcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHdpbiA/IHdpblsgcHJvcCBdIDogZWxlbVsgbWV0aG9kIF07XG5cdFx0XHR9XG5cblx0XHRcdGlmICggd2luICkge1xuXHRcdFx0XHR3aW4uc2Nyb2xsVG8oXG5cdFx0XHRcdFx0IXRvcCA/IHZhbCA6IHdpbi5wYWdlWE9mZnNldCxcblx0XHRcdFx0XHR0b3AgPyB2YWwgOiB3aW4ucGFnZVlPZmZzZXRcblx0XHRcdFx0KTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbVsgbWV0aG9kIF0gPSB2YWw7XG5cdFx0XHR9XG5cdFx0fSwgbWV0aG9kLCB2YWwsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fTtcbn0gKTtcblxuLy8gU3VwcG9ydDogU2FmYXJpIDw9NyAtIDkuMSwgQ2hyb21lIDw9MzcgLSA0OVxuLy8gQWRkIHRoZSB0b3AvbGVmdCBjc3NIb29rcyB1c2luZyBqUXVlcnkuZm4ucG9zaXRpb25cbi8vIFdlYmtpdCBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA4NFxuLy8gQmxpbmsgYnVnOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD01ODkzNDdcbi8vIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyBwZXJjZW50IHdoZW4gc3BlY2lmaWVkIGZvciB0b3AvbGVmdC9ib3R0b20vcmlnaHQ7XG4vLyByYXRoZXIgdGhhbiBtYWtlIHRoZSBjc3MgbW9kdWxlIGRlcGVuZCBvbiB0aGUgb2Zmc2V0IG1vZHVsZSwganVzdCBjaGVjayBmb3IgaXQgaGVyZVxualF1ZXJ5LmVhY2goIFsgXCJ0b3BcIiwgXCJsZWZ0XCIgXSwgZnVuY3Rpb24oIF9pLCBwcm9wICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIHByb3AgXSA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5waXhlbFBvc2l0aW9uLFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGNvbXB1dGVkID0gY3VyQ1NTKCBlbGVtLCBwcm9wICk7XG5cblx0XHRcdFx0Ly8gSWYgY3VyQ1NTIHJldHVybnMgcGVyY2VudGFnZSwgZmFsbGJhY2sgdG8gb2Zmc2V0XG5cdFx0XHRcdHJldHVybiBybnVtbm9ucHgudGVzdCggY29tcHV0ZWQgKSA/XG5cdFx0XHRcdFx0alF1ZXJ5KCBlbGVtICkucG9zaXRpb24oKVsgcHJvcCBdICsgXCJweFwiIDpcblx0XHRcdFx0XHRjb21wdXRlZDtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59ICk7XG5cblxuLy8gQ3JlYXRlIGlubmVySGVpZ2h0LCBpbm5lcldpZHRoLCBoZWlnaHQsIHdpZHRoLCBvdXRlckhlaWdodCBhbmQgb3V0ZXJXaWR0aCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBIZWlnaHQ6IFwiaGVpZ2h0XCIsIFdpZHRoOiBcIndpZHRoXCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUgKSB7XG5cdGpRdWVyeS5lYWNoKCB7XG5cdFx0cGFkZGluZzogXCJpbm5lclwiICsgbmFtZSxcblx0XHRjb250ZW50OiB0eXBlLFxuXHRcdFwiXCI6IFwib3V0ZXJcIiArIG5hbWVcblx0fSwgZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7XG5cblx0XHQvLyBNYXJnaW4gaXMgb25seSBmb3Igb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGhcblx0XHRqUXVlcnkuZm5bIGZ1bmNOYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luLCB2YWx1ZSApIHtcblx0XHRcdHZhciBjaGFpbmFibGUgPSBhcmd1bWVudHMubGVuZ3RoICYmICggZGVmYXVsdEV4dHJhIHx8IHR5cGVvZiBtYXJnaW4gIT09IFwiYm9vbGVhblwiICksXG5cdFx0XHRcdGV4dHJhID0gZGVmYXVsdEV4dHJhIHx8ICggbWFyZ2luID09PSB0cnVlIHx8IHZhbHVlID09PSB0cnVlID8gXCJtYXJnaW5cIiA6IFwiYm9yZGVyXCIgKTtcblxuXHRcdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgZG9jO1xuXG5cdFx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vICQoIHdpbmRvdyApLm91dGVyV2lkdGgvSGVpZ2h0IHJldHVybiB3L2ggaW5jbHVkaW5nIHNjcm9sbGJhcnMgKGdoLTE3MjkpXG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmNOYW1lLmluZGV4T2YoIFwib3V0ZXJcIiApID09PSAwID9cblx0XHRcdFx0XHRcdGVsZW1bIFwiaW5uZXJcIiArIG5hbWUgXSA6XG5cdFx0XHRcdFx0XHRlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgXCJjbGllbnRcIiArIG5hbWUgXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHRcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdGRvYyA9IGVsZW0uZG9jdW1lbnRFbGVtZW50O1xuXG5cdFx0XHRcdFx0Ly8gRWl0aGVyIHNjcm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0aC9IZWlnaHRdLFxuXHRcdFx0XHRcdC8vIHdoaWNoZXZlciBpcyBncmVhdGVzdFxuXHRcdFx0XHRcdHJldHVybiBNYXRoLm1heChcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJzY3JvbGxcIiArIG5hbWUgXSwgZG9jWyBcInNjcm9sbFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcIm9mZnNldFwiICsgbmFtZSBdLCBkb2NbIFwib2Zmc2V0XCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRkb2NbIFwiY2xpZW50XCIgKyBuYW1lIF1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXG5cdFx0XHRcdFx0Ly8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQgbm90IGZvcmNpbmcgcGFyc2VGbG9hdFxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsIGV4dHJhICkgOlxuXG5cdFx0XHRcdFx0Ly8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudFxuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgdHlwZSwgdmFsdWUsIGV4dHJhICk7XG5cdFx0XHR9LCB0eXBlLCBjaGFpbmFibGUgPyBtYXJnaW4gOiB1bmRlZmluZWQsIGNoYWluYWJsZSApO1xuXHRcdH07XG5cdH0gKTtcbn0gKTtcblxuXG5qUXVlcnkuZWFjaCggW1xuXHRcImFqYXhTdGFydFwiLFxuXHRcImFqYXhTdG9wXCIsXG5cdFwiYWpheENvbXBsZXRlXCIsXG5cdFwiYWpheEVycm9yXCIsXG5cdFwiYWpheFN1Y2Nlc3NcIixcblx0XCJhamF4U2VuZFwiXG5dLCBmdW5jdGlvbiggX2ksIHR5cGUgKSB7XG5cdGpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlLCBmbiApO1xuXHR9O1xufSApO1xuXG5cblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0YmluZDogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGwsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuYmluZDogZnVuY3Rpb24oIHR5cGVzLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApO1xuXHR9LFxuXG5cdGRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHtcblxuXHRcdC8vICggbmFtZXNwYWNlICkgb3IgKCBzZWxlY3RvciwgdHlwZXMgWywgZm5dIClcblx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/XG5cdFx0XHR0aGlzLm9mZiggc2VsZWN0b3IsIFwiKipcIiApIDpcblx0XHRcdHRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgXCIqKlwiLCBmbiApO1xuXHR9LFxuXG5cdGhvdmVyOiBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHtcblx0XHRyZXR1cm4gdGhpc1xuXHRcdFx0Lm9uKCBcIm1vdXNlZW50ZXJcIiwgZm5PdmVyIClcblx0XHRcdC5vbiggXCJtb3VzZWxlYXZlXCIsIGZuT3V0IHx8IGZuT3ZlciApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKFxuXHQoIFwiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgXCIgK1xuXHRcIm1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIFwiICtcblx0XCJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51XCIgKS5zcGxpdCggXCIgXCIgKSxcblx0ZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXG5cdFx0Ly8gSGFuZGxlIGV2ZW50IGJpbmRpbmdcblx0XHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBkYXRhLCBmbiApIHtcblx0XHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/XG5cdFx0XHRcdHRoaXMub24oIG5hbWUsIG51bGwsIGRhdGEsIGZuICkgOlxuXHRcdFx0XHR0aGlzLnRyaWdnZXIoIG5hbWUgKTtcblx0XHR9O1xuXHR9XG4pO1xuXG5cblxuXG4vLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHlcbi8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJTUFxuLy8gUmVxdWlyZSB0aGF0IHRoZSBcIndoaXRlc3BhY2UgcnVuXCIgc3RhcnRzIGZyb20gYSBub24td2hpdGVzcGFjZVxuLy8gdG8gYXZvaWQgTyhOXjIpIGJlaGF2aW9yIHdoZW4gdGhlIGVuZ2luZSB3b3VsZCB0cnkgbWF0Y2hpbmcgXCJcXHMrJFwiIGF0IGVhY2ggc3BhY2UgcG9zaXRpb24uXG52YXIgcnRyaW0gPSAvXltcXHNcXHVGRUZGXFx4QTBdK3woW15cXHNcXHVGRUZGXFx4QTBdKVtcXHNcXHVGRUZGXFx4QTBdKyQvZztcblxuLy8gQmluZCBhIGZ1bmN0aW9uIHRvIGEgY29udGV4dCwgb3B0aW9uYWxseSBwYXJ0aWFsbHkgYXBwbHlpbmcgYW55XG4vLyBhcmd1bWVudHMuXG4vLyBqUXVlcnkucHJveHkgaXMgZGVwcmVjYXRlZCB0byBwcm9tb3RlIHN0YW5kYXJkcyAoc3BlY2lmaWNhbGx5IEZ1bmN0aW9uI2JpbmQpXG4vLyBIb3dldmVyLCBpdCBpcyBub3Qgc2xhdGVkIGZvciByZW1vdmFsIGFueSB0aW1lIHNvb25cbmpRdWVyeS5wcm94eSA9IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHtcblx0dmFyIHRtcCwgYXJncywgcHJveHk7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHR0bXAgPSBmblsgY29udGV4dCBdO1xuXHRcdGNvbnRleHQgPSBmbjtcblx0XHRmbiA9IHRtcDtcblx0fVxuXG5cdC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFibGUsIGluIHRoZSBzcGVjXG5cdC8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuXG5cdGlmICggIWlzRnVuY3Rpb24oIGZuICkgKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIFNpbXVsYXRlZCBiaW5kXG5cdGFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDIgKTtcblx0cHJveHkgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZm4uYXBwbHkoIGNvbnRleHQgfHwgdGhpcywgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApICkgKTtcblx0fTtcblxuXHQvLyBTZXQgdGhlIGd1aWQgb2YgdW5pcXVlIGhhbmRsZXIgdG8gdGhlIHNhbWUgb2Ygb3JpZ2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJlIHJlbW92ZWRcblx0cHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKys7XG5cblx0cmV0dXJuIHByb3h5O1xufTtcblxualF1ZXJ5LmhvbGRSZWFkeSA9IGZ1bmN0aW9uKCBob2xkICkge1xuXHRpZiAoIGhvbGQgKSB7XG5cdFx0alF1ZXJ5LnJlYWR5V2FpdCsrO1xuXHR9IGVsc2Uge1xuXHRcdGpRdWVyeS5yZWFkeSggdHJ1ZSApO1xuXHR9XG59O1xualF1ZXJ5LmlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xualF1ZXJ5LnBhcnNlSlNPTiA9IEpTT04ucGFyc2U7XG5qUXVlcnkubm9kZU5hbWUgPSBub2RlTmFtZTtcbmpRdWVyeS5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcbmpRdWVyeS5pc1dpbmRvdyA9IGlzV2luZG93O1xualF1ZXJ5LmNhbWVsQ2FzZSA9IGNhbWVsQ2FzZTtcbmpRdWVyeS50eXBlID0gdG9UeXBlO1xuXG5qUXVlcnkubm93ID0gRGF0ZS5ub3c7XG5cbmpRdWVyeS5pc051bWVyaWMgPSBmdW5jdGlvbiggb2JqICkge1xuXG5cdC8vIEFzIG9mIGpRdWVyeSAzLjAsIGlzTnVtZXJpYyBpcyBsaW1pdGVkIHRvXG5cdC8vIHN0cmluZ3MgYW5kIG51bWJlcnMgKHByaW1pdGl2ZXMgb3Igb2JqZWN0cylcblx0Ly8gdGhhdCBjYW4gYmUgY29lcmNlZCB0byBmaW5pdGUgbnVtYmVycyAoZ2gtMjY2Milcblx0dmFyIHR5cGUgPSBqUXVlcnkudHlwZSggb2JqICk7XG5cdHJldHVybiAoIHR5cGUgPT09IFwibnVtYmVyXCIgfHwgdHlwZSA9PT0gXCJzdHJpbmdcIiApICYmXG5cblx0XHQvLyBwYXJzZUZsb2F0IE5hTnMgbnVtZXJpYy1jYXN0IGZhbHNlIHBvc2l0aXZlcyAoXCJcIilcblx0XHQvLyAuLi5idXQgbWlzaW50ZXJwcmV0cyBsZWFkaW5nLW51bWJlciBzdHJpbmdzLCBwYXJ0aWN1bGFybHkgaGV4IGxpdGVyYWxzIChcIjB4Li4uXCIpXG5cdFx0Ly8gc3VidHJhY3Rpb24gZm9yY2VzIGluZmluaXRpZXMgdG8gTmFOXG5cdFx0IWlzTmFOKCBvYmogLSBwYXJzZUZsb2F0KCBvYmogKSApO1xufTtcblxualF1ZXJ5LnRyaW0gPSBmdW5jdGlvbiggdGV4dCApIHtcblx0cmV0dXJuIHRleHQgPT0gbnVsbCA/XG5cdFx0XCJcIiA6XG5cdFx0KCB0ZXh0ICsgXCJcIiApLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKTtcbn07XG5cblxuXG4vLyBSZWdpc3RlciBhcyBhIG5hbWVkIEFNRCBtb2R1bGUsIHNpbmNlIGpRdWVyeSBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggb3RoZXJcbi8vIGZpbGVzIHRoYXQgbWF5IHVzZSBkZWZpbmUsIGJ1dCBub3QgdmlhIGEgcHJvcGVyIGNvbmNhdGVuYXRpb24gc2NyaXB0IHRoYXRcbi8vIHVuZGVyc3RhbmRzIGFub255bW91cyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFuZCBtb3N0IHJvYnVzdFxuLy8gd2F5IHRvIHJlZ2lzdGVyLiBMb3dlcmNhc2UganF1ZXJ5IGlzIHVzZWQgYmVjYXVzZSBBTUQgbW9kdWxlIG5hbWVzIGFyZVxuLy8gZGVyaXZlZCBmcm9tIGZpbGUgbmFtZXMsIGFuZCBqUXVlcnkgaXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93ZXJjYXNlXG4vLyBmaWxlIG5hbWUuIERvIHRoaXMgYWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFuIEFNRCBtb2R1bGUgd2FudHNcbi8vIHRvIGNhbGwgbm9Db25mbGljdCB0byBoaWRlIHRoaXMgdmVyc2lvbiBvZiBqUXVlcnksIGl0IHdpbGwgd29yay5cblxuLy8gTm90ZSB0aGF0IGZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCBsaWJyYXJpZXMgdGhhdCBhcmUgbm90IGpRdWVyeSBzaG91bGRcbi8vIGRlY2xhcmUgdGhlbXNlbHZlcyBhcyBhbm9ueW1vdXMgbW9kdWxlcywgYW5kIGF2b2lkIHNldHRpbmcgYSBnbG9iYWwgaWYgYW5cbi8vIEFNRCBsb2FkZXIgaXMgcHJlc2VudC4galF1ZXJ5IGlzIGEgc3BlY2lhbCBjYXNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvd2lraS9VcGRhdGluZy1leGlzdGluZy1saWJyYXJpZXMjd2lraS1hbm9uXG5cbmlmICggdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQgKSB7XG5cdGRlZmluZSggXCJqcXVlcnlcIiwgW10sIGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnk7XG5cdH0gKTtcbn1cblxuXG5cblxudmFyXG5cblx0Ly8gTWFwIG92ZXIgalF1ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LFxuXG5cdC8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF8kID0gd2luZG93LiQ7XG5cbmpRdWVyeS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oIGRlZXAgKSB7XG5cdGlmICggd2luZG93LiQgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cuJCA9IF8kO1xuXHR9XG5cblx0aWYgKCBkZWVwICYmIHdpbmRvdy5qUXVlcnkgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnk7XG59O1xuXG4vLyBFeHBvc2UgalF1ZXJ5IGFuZCAkIGlkZW50aWZpZXJzLCBldmVuIGluIEFNRFxuLy8gKHRyYWMtNzEwMiNjb21tZW50OjEwLCBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9wdWxsLzU1Nylcbi8vIGFuZCBDb21tb25KUyBmb3IgYnJvd3NlciBlbXVsYXRvcnMgKHRyYWMtMTM1NjYpXG5pZiAoIHR5cGVvZiBub0dsb2JhbCA9PT0gXCJ1bmRlZmluZWRcIiApIHtcblx0d2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0galF1ZXJ5O1xufVxuXG5cblxuXG5yZXR1cm4galF1ZXJ5O1xufSApO1xuIiwidGlueW1jZS5JY29uTWFuYWdlci5hZGQoJ2RlZmF1bHQnLCB7XG4gIGljb25zOiB7XG4gICAgJ2FjY2Vzc2liaWxpdHktY2hlY2snOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTEyIDJhMiAyIDAgMCAxIDIgMiAyIDIgMCAwIDEtMiAyIDIgMiAwIDAgMS0yLTJjMC0xLjEuOS0yIDItMlptOCA3aC01djEyYzAgLjYtLjQgMS0xIDFhMSAxIDAgMCAxLTEtMXYtNWMwLS42LS40LTEtMS0xYTEgMSAwIDAgMC0xIDF2NWMwIC42LS40IDEtMSAxYTEgMSAwIDAgMS0xLTFWOUg0YTEgMSAwIDEgMSAwLTJoMTZjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdhY2NvcmRpb24tdG9nZ2xlJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTEyIDE1YzAtLjYuNC0xIDEtMWg2Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxaC02YTEgMSAwIDAgMS0xLTFaXCIvPjxwYXRoIG9wYWNpdHk9XCIuMlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk00IDE1YzAtLjYuNC0xIDEtMWg2Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxSDVhMSAxIDAgMCAxLTEtMVpcIi8+PHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTEyIDE5YzAtLjYuNC0xIDEtMWg2Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxaC02YTEgMSAwIDAgMS0xLTFaXCIvPjxwYXRoIG9wYWNpdHk9XCIuMlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk00IDE5YzAtLjYuNC0xIDEtMWg2Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxSDVhMSAxIDAgMCAxLTEtMVpcIi8+PHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTEyLjMgNy4zYTEgMSAwIDAgMSAxLjQgMEwxNiA5LjZsMi4zLTIuM2ExIDEgMCAxIDEgMS40IDEuNEwxNiAxMi40bC0zLjctMy43YTEgMSAwIDAgMSAwLTEuNFpNNC4zIDExLjdhMSAxIDAgMCAxIDAtMS40TDYuNiA4IDQuMyA1LjdhMSAxIDAgMCAxIDEuNC0xLjRMOS40IDhsLTMuNyAzLjdhMSAxIDAgMCAxLTEuNCAwWlwiLz48L3N2Zz4nLFxuICAgICdhY2NvcmRpb24nOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cmVjdCB4PVwiMTJcIiB5PVwiN1wiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIyXCIgcng9XCIxXCIvPjxyZWN0IHg9XCIxMlwiIHk9XCIxMVwiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIyXCIgcng9XCIxXCIvPjxyZWN0IHg9XCIxMlwiIHk9XCIxNVwiIHdpZHRoPVwiNlwiIGhlaWdodD1cIjJcIiByeD1cIjFcIi8+PHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTIuMyA3LjNhMSAxIDAgMCAxIDEuNCAwTDYgOS42bDIuMy0yLjNhMSAxIDAgMCAxIDEuNCAxLjRMNiAxMi40IDIuMyA4LjdhMSAxIDAgMCAxIDAtMS40WlwiLz48L3N2Zz4nLFxuICAgICdhY3Rpb24tbmV4dCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGZpbGwtcnVsZT1cIm5vbnplcm9cIiBkPVwiTTUuNyA3LjNhMSAxIDAgMCAwLTEuNCAxLjRsNy43IDcuNyA3LjctNy43YTEgMSAwIDEgMC0xLjQtMS40TDEyIDEzLjYgNS43IDcuM1pcIi8+PC9zdmc+JyxcbiAgICAnYWN0aW9uLXByZXYnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIk0xOC4zIDE1LjdhMSAxIDAgMCAwIDEuNC0xLjRMMTIgNi42bC03LjcgNy43YTEgMSAwIDAgMCAxLjQgMS40TDEyIDkuNGw2LjMgNi4zWlwiLz48L3N2Zz4nLFxuICAgICdhZGR0YWcnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTUgNWEyIDIgMCAwIDEgMS42LjhMMjEgMTJsLTQuNCA2LjJhMiAyIDAgMCAxLTEuNi44aC0zdi0yaDNsMy41LTVMMTUgN0g1djNIM1Y3YzAtMS4xLjktMiAyLTJoMTBaXCIvPjxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk02IDEyYTEgMSAwIDAgMC0xIDF2MkgzYTEgMSAwIDEgMCAwIDJoMnYyYTEgMSAwIDEgMCAyIDB2LTJoMmExIDEgMCAxIDAgMC0ySDd2LTJjMC0uNi0uNC0xLTEtMVpcIi8+PC9zdmc+JyxcbiAgICAnYWktcHJvbXB0JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PGcgY2xpcC1wYXRoPVwidXJsKCNhKVwiPjxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xNSA2LjdhMSAxIDAgMCAwLTEuNCAwbC05LjkgMTBhMSAxIDAgMCAwIDAgMS4zbDIuMSAyLjFjLjQuNCAxIC40IDEuNCAwbDEwLTkuOWMuMy0uMy4zLTEgMC0xLjRsLTIuMi0yWm0xLjQgMi44LTItMi0zIDIuNyAyLjIgMi4yIDIuOC0yLjlaXCIvPjxwYXRoIGQ9XCJtMTguNSA3LjMtLjctMS41LTEuNS0uOCAxLjUtLjcuNy0xLjUuNyAxLjUgMS41LjctMS41LjgtLjcgMS41Wk0xOC41IDE2LjVsLS43LTEuNi0xLjUtLjcgMS41LS43LjctMS42LjcgMS42IDEuNS43LTEuNS43LS43IDEuNlpNOS43IDcuMyA5IDUuOCA3LjUgNSA5IDQuM2wuNy0xLjUuNyAxLjVMMTIgNWwtMS41LjgtLjcgMS41WlwiLz48L2c+PGRlZnM+PGNsaXBQYXRoIGlkPVwiYVwiPjxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPicsXG4gICAgJ2FpJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTUgM2EzIDMgMCAwIDAtMyAzdjEyYTMgMyAwIDAgMCAzIDNoMTRhMyAzIDAgMCAwIDMtM1Y2YTMgMyAwIDAgMC0zLTNINVptNi44IDExLjUuNSAxLjJhNjguMyA2OC4zIDAgMCAwIC43IDEuMWwuNC4xYy4zIDAgLjUgMCAuNy0uMy4yLS4xLjMtLjMuMy0uNmwtLjMtMS0yLjYtNi4yYTIwLjQgMjAuNCAwIDAgMC0uNS0xLjNsLS41LS40LS43LS4yYy0uMiAwLS41IDAtLjYuMi0uMiAwLS40LjItLjUuNGwtLjMuNi0uMy43TDUuNyAxNWwtLjIuNi0uMS40YzAgLjMgMCAuNS4zLjdsLjYuMmMuMyAwIC41IDAgLjctLjJsLjQtMSAuNS0xLjJoMy45Wk05LjggOWwxLjUgNGgtM2wxLjUtNFptNS42LS45djcuNmMwIC40IDAgLjcuMiAxbC43LjJjLjMgMCAuNiAwIC44LS4zbC4yLS45VjguMWMwLS40IDAtLjctLjItLjlhMSAxIDAgMCAwLS44LS4zYy0uMiAwLS41LjEtLjcuM2wtLjIgMVpcIi8+PC9zdmc+JyxcbiAgICAnYWxpZ24tY2VudGVyJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk01IDVoMTRjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFINWExIDEgMCAxIDEgMC0yWm0zIDRoOGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMUg4YTEgMSAwIDEgMSAwLTJabTAgOGg4Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxSDhhMSAxIDAgMCAxIDAtMlptLTMtNGgxNGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMUg1YTEgMSAwIDAgMSAwLTJaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdhbGlnbi1qdXN0aWZ5JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk01IDVoMTRjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFINWExIDEgMCAxIDEgMC0yWm0wIDRoMTRjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFINWExIDEgMCAxIDEgMC0yWm0wIDRoMTRjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFINWExIDEgMCAwIDEgMC0yWm0wIDRoMTRjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFINWExIDEgMCAwIDEgMC0yWlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnYWxpZ24tbGVmdCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNNSA1aDE0Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxSDVhMSAxIDAgMSAxIDAtMlptMCA0aDhjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFINWExIDEgMCAxIDEgMC0yWm0wIDhoOGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMUg1YTEgMSAwIDAgMSAwLTJabTAtNGgxNGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMUg1YTEgMSAwIDAgMSAwLTJaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdhbGlnbi1ub25lJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xNC4yIDUgMTMgN0g1YTEgMSAwIDEgMSAwLTJoOS4yWm00IDBoLjhhMSAxIDAgMCAxIDAgMmgtMmwxLjItMlptLTYuNCA0LTEuMiAySDVhMSAxIDAgMCAxIDAtMmg2LjhabTQgMEgxOWExIDEgMCAwIDEgMCAyaC00LjRsMS4yLTJabS02LjQgNC0xLjIgMkg1YTEgMSAwIDAgMSAwLTJoNC40Wm00IDBIMTlhMSAxIDAgMCAxIDAgMmgtNi44bDEuMi0yWk03IDE3bC0xLjIgMkg1YTEgMSAwIDAgMSAwLTJoMlptNCAwaDhhMSAxIDAgMCAxIDAgMkg5LjhsMS4yLTJabTUuMi0xMy41IDEuMy43LTkuNyAxNi4zLTEuMy0uNyA5LjctMTYuM1pcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ2FsaWduLXJpZ2h0JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk01IDVoMTRjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFINWExIDEgMCAxIDEgMC0yWm02IDRoOGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMWgtOGExIDEgMCAwIDEgMC0yWm0wIDhoOGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMWgtOGExIDEgMCAwIDEgMC0yWm0tNi00aDE0Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxSDVhMSAxIDAgMCAxIDAtMlpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ2Fycm93LWxlZnQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwibTUuNiAxMyAxMiA2YTEgMSAwIDAgMCAxLjQtMVY2YTEgMSAwIDAgMC0xLjQtLjlsLTEyIDZhMSAxIDAgMCAwIDAgMS44WlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnYXJyb3ctcmlnaHQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwibTE4LjUgMTMtMTIgNkExIDEgMCAwIDEgNSAxOFY2YTEgMSAwIDAgMSAxLjQtLjlsMTIgNmExIDEgMCAwIDEgMCAxLjhaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdib2xkJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk03LjggMTljLS4zIDAtLjUgMC0uNi0uMmwtLjItLjVWNS43YzAtLjIgMC0uNC4yLS41bC42LS4yaDVjMS41IDAgMi43LjMgMy41IDEgLjcuNiAxLjEgMS40IDEuMSAyLjVhMyAzIDAgMCAxLS42IDEuOWMtLjQuNi0xIDEtMS42IDEuMi40LjEuOS4zIDEuMy42cy44LjcgMSAxLjJjLjQuNC41IDEgLjUgMS42IDAgMS4zLS40IDIuMy0xLjMgMy0uOC43LTIuMSAxLTMuOCAxSDcuOFptNS04LjNjLjYgMCAxLjItLjEgMS42LS41LjQtLjMuNi0uNy42LTEuMyAwLTEuMS0uOC0xLjctMi4zLTEuN0g5LjN2My41aDMuNFptLjUgNmMuNyAwIDEuMy0uMSAxLjctLjQuNC0uNC42LS45LjYtMS41cy0uMi0xLS43LTEuNGMtLjQtLjMtMS0uNC0yLS40SDkuNHYzLjhoNFpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ2Jvb2ttYXJrJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk02IDR2MTdsNi00IDYgNFY0YzAtLjYtLjQtMS0xLTFIN2ExIDEgMCAwIDAtMSAxWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnYm9yZGVyLXN0eWxlJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PGcgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPjxyZWN0IHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIyXCIgeD1cIjNcIiB5PVwiNlwiIHJ4PVwiMVwiLz48cmVjdCB3aWR0aD1cIjIuOFwiIGhlaWdodD1cIjJcIiB4PVwiM1wiIHk9XCIxNlwiIHJ4PVwiMVwiLz48cmVjdCB3aWR0aD1cIjIuOFwiIGhlaWdodD1cIjJcIiB4PVwiNi44XCIgeT1cIjE2XCIgcng9XCIxXCIvPjxyZWN0IHdpZHRoPVwiMi44XCIgaGVpZ2h0PVwiMlwiIHg9XCIxMC42XCIgeT1cIjE2XCIgcng9XCIxXCIvPjxyZWN0IHdpZHRoPVwiMi44XCIgaGVpZ2h0PVwiMlwiIHg9XCIxNC40XCIgeT1cIjE2XCIgcng9XCIxXCIvPjxyZWN0IHdpZHRoPVwiMi44XCIgaGVpZ2h0PVwiMlwiIHg9XCIxOC4yXCIgeT1cIjE2XCIgcng9XCIxXCIvPjxyZWN0IHdpZHRoPVwiOFwiIGhlaWdodD1cIjJcIiB4PVwiM1wiIHk9XCIxMVwiIHJ4PVwiMVwiLz48cmVjdCB3aWR0aD1cIjhcIiBoZWlnaHQ9XCIyXCIgeD1cIjEzXCIgeT1cIjExXCIgcng9XCIxXCIvPjwvZz48L3N2Zz4nLFxuICAgICdib3JkZXItd2lkdGgnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHJlY3Qgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjVcIiB4PVwiM1wiIHk9XCI1XCIgcng9XCIxXCIvPjxyZWN0IHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIzLjVcIiB4PVwiM1wiIHk9XCIxMS41XCIgcng9XCIxXCIvPjxyZWN0IHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIyXCIgeD1cIjNcIiB5PVwiMTdcIiByeD1cIjFcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ2JyaWdodG5lc3MnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTEyIDE3Yy4zIDAgLjUuMS43LjMuMi4yLjMuNC4zLjd2MWMwIC4zLS4xLjUtLjMuN2ExIDEgMCAwIDEtLjcuMyAxIDEgMCAwIDEtLjctLjMgMSAxIDAgMCAxLS4zLS43di0xYzAtLjMuMS0uNS4zLS43LjItLjIuNC0uMy43LS4zWm0wLTEwYTEgMSAwIDAgMS0uNy0uM0ExIDEgMCAwIDEgMTEgNlY1YzAtLjMuMS0uNS4zLS43LjItLjIuNC0uMy43LS4zLjMgMCAuNS4xLjcuMy4yLjIuMy40LjMuN3YxYzAgLjMtLjEuNS0uMy43YTEgMSAwIDAgMS0uNy4zWm03IDRjLjMgMCAuNS4xLjcuMy4yLjIuMy40LjMuNyAwIC4zLS4xLjUtLjMuN2ExIDEgMCAwIDEtLjcuM2gtMWExIDEgMCAwIDEtLjctLjMgMSAxIDAgMCAxLS4zLS43YzAtLjMuMS0uNS4zLS43LjItLjIuNC0uMy43LS4zaDFaTTcgMTJjMCAuMy0uMS41LS4zLjdhMSAxIDAgMCAxLS43LjNINWExIDEgMCAwIDEtLjctLjNBMSAxIDAgMCAxIDQgMTJjMC0uMy4xLS41LjMtLjcuMi0uMi40LS4zLjctLjNoMWMuMyAwIC41LjEuNy4zLjIuMi4zLjQuMy43Wm0xMCAzLjUuNy44Yy4yLjEuMy40LjMuNiAwIC4zLS4xLjYtLjMuOGExIDEgMCAwIDEtLjguMyAxIDEgMCAwIDEtLjYtLjNsLS44LS43YTEgMSAwIDAgMS0uMy0uOGMwLS4yLjEtLjUuMy0uN2ExIDEgMCAwIDEgMS40IDBabS0xMC03LS43LS44YTEgMSAwIDAgMS0uMy0uNmMwLS4zLjEtLjYuMy0uOC4yLS4yLjUtLjMuOC0uMy4yIDAgLjUuMS43LjNsLjcuN2MuMi4yLjMuNS4zLjggMCAuMi0uMS41LS4zLjdhMSAxIDAgMCAxLS43LjMgMSAxIDAgMCAxLS44LS4zWm0xMCAwYTEgMSAwIDAgMS0uOC4zIDEgMSAwIDAgMS0uNy0uMyAxIDEgMCAwIDEtLjMtLjdjMC0uMy4xLS42LjMtLjhsLjgtLjdjLjEtLjIuNC0uMy42LS4zLjMgMCAuNi4xLjguMy4yLjIuMy41LjMuOCAwIC4yLS4xLjUtLjMuN2wtLjcuN1ptLTEwIDdjLjItLjIuNS0uMy44LS4zLjIgMCAuNS4xLjcuM2ExIDEgMCAwIDEgMCAxLjRsLS44LjhhMSAxIDAgMCAxLS42LjMgMSAxIDAgMCAxLS44LS4zIDEgMSAwIDAgMS0uMy0uOGMwLS4yLjEtLjUuMy0uNmwuNy0uOFpNMTIgOGE0IDQgMCAwIDEgMy43IDIuNCA0IDQgMCAwIDEgMCAzLjJBNCA0IDAgMCAxIDEyIDE2YTQgNCAwIDAgMS0zLjctMi40IDQgNCAwIDAgMSAwLTMuMkE0IDQgMCAwIDEgMTIgOFptMCA2LjVjLjcgMCAxLjMtLjIgMS44LS43LjUtLjUuNy0xLjEuNy0xLjhzLS4yLTEuMy0uNy0xLjhjLS41LS41LTEuMS0uNy0xLjgtLjdzLTEuMy4yLTEuOC43Yy0uNS41LS43IDEuMS0uNyAxLjhzLjIgMS4zLjcgMS44Yy41LjUgMS4xLjcgMS44LjdaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdicm93c2UnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE5IDRhMiAyIDAgMCAxIDIgMnYxMmEyIDIgMCAwIDEtMiAyaC00di0yaDRWOEg1djEwaDR2Mkg1YTIgMiAwIDAgMS0yLTJWNmMwLTEuMS45LTIgMi0yaDE0Wm0tOCA5LjQtMi4zIDIuM2ExIDEgMCAxIDEtMS40LTEuNGw0LTRhMSAxIDAgMCAxIDEuNCAwbDQgNGExIDEgMCAwIDEtMS40IDEuNEwxMyAxMy40VjIwYTEgMSAwIDAgMS0yIDB2LTYuNlpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ2NhbmNlbCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTIgNC42YTcuNCA3LjQgMCAxIDEgMCAxNC44IDcuNCA3LjQgMCAwIDEgMC0xNC44Wk0xMiAzYTkgOSAwIDEgMCAwIDE4IDkgOSAwIDAgMCAwLTE4Wm0wIDhMMTQuOCA4bDEgMS4xLTIuNyAyLjggMi43IDIuNy0xLjEgMS4xLTIuNy0yLjctMi43IDIuNy0xLTEuMSAyLjYtMi43LTIuNy0yLjcgMS0xLjEgMi44IDIuN1pcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ2NlbGwtYmFja2dyb3VuZC1jb2xvcic6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJtMTUuNyAyIDEuNiAxLjYtMi43IDIuNiA1LjkgNS44Yy43LjcuNyAxLjcgMCAyLjRsLTYuMyA2LjFhMS43IDEuNyAwIDAgMS0yLjQgMGwtNi4zLTYuMWMtLjctLjctLjctMS43IDAtMi40TDE1LjcgMlpNMTggMTJsLTQuNS00TDkgMTJoOVpNNCAxNnMyIDIuNCAyIDMuOEM2IDIxIDUuMSAyMiA0IDIycy0yLTEtMi0yLjJDMiAxOC40IDQgMTYgNCAxNlpcIi8+PC9zdmc+JyxcbiAgICAnY2VsbC1ib3JkZXItY29sb3InOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHBhdGggZmlsbC1ydWxlPVwibm9uemVyb1wiIGQ9XCJNNSAxM3Y1aDJ2Mkg1YTIgMiAwIDAgMS0yLTJ2LTVoMnptOC03VjRoNmEyIDIgMCAwIDEgMiAyaC04elwiIG9wYWNpdHk9XCIuMlwiLz48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIk0xMyA0djJINXY3SDNWNmMwLTEuMS45LTIgMi0yaDh6bS0yLjYgMTQuMS4xLS4xLjEuMS4yLjMuMi4yLjIuMmMuNC42LjggMS4yLjggMS43IDAgLjgtLjcgMS41LTEuNSAxLjVTOSAyMS4zIDkgMjAuNWMwLS41LjQtMS4xLjgtMS43bC4yLS4yLjItLjIuMi0uM3pcIi8+PHBhdGggZD1cIm0xMyAxMS0yIDJINXYtMmg2VjZoMnpcIi8+PHBhdGggZmlsbC1ydWxlPVwibm9uemVyb1wiIGQ9XCJtMTguNCA4IDEgMS0xLjggMS45IDQgNGMuNS40LjUgMS4xIDAgMS42bC00LjMgNC4yYTEuMiAxLjIgMCAwIDEtMS42IDBsLTQuNC00LjJjLS40LS41LS40LTEuMiAwLTEuN2w3LTYuOFptMS42IDctMy0zLTMgM2g2WlwiLz48L2c+PC9zdmc+JyxcbiAgICAnY2hhbmdlLWNhc2UnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE4LjQgMTguMnYtLjZjLS41LjgtMS4zIDEuMi0yLjQgMS4yLTIuMiAwLTMuMy0xLjYtMy4zLTQuOCAwLTMuMSAxLTQuNyAzLjMtNC43IDEuMSAwIDEuOC4zIDIuNCAxLjF2LS42YzAtLjUuNC0uOC44LS44cy44LjMuOC44djguNGMwIC41LS40LjgtLjguOGEuOC44IDAgMCAxLS44LS44em0tMi03LjRjLTEuMyAwLTEuOC45LTEuOCAzLjIgMCAyLjQuNSAzLjMgMS43IDMuMyAxLjMgMCAxLjgtLjkgMS44LTMuMiAwLTIuNC0uNS0zLjMtMS43LTMuM3pNMTAgMTUuN0g1LjVsLS44IDIuNmExIDEgMCAwIDEtMSAuN2gtLjJhLjcuNyAwIDAgMS0uNy0xbDQtMTJhMSAxIDAgMCAxIDIgMGw0IDEyYS43LjcgMCAwIDEtLjggMWgtLjJhMSAxIDAgMCAxLTEtLjdsLS44LTIuNnptLS4zLTEuNS0yLTYuNS0xLjkgNi41aDMuOXpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ2NoYXJhY3Rlci1jb3VudCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNNCAxMS41aDE2djFINHYtMVptNC44LTYuOFYxMEg3LjdWNS44aC0xdi0xaDJaTTExIDguM1Y5aDJ2MWgtM1Y3LjdsMi0xdi0uOWgtMnYtMWgzdjIuNGwtMiAxWm02LjMtMy40VjEwaC0zLjFWOWgyLjFWOGgtMi4xVjYuOGgyLjF2LTFoLTIuMXYtMWgzLjFaTTUuOCAxNi40YzAtLjUuMi0uOC41LTEgLjItLjIuNi0uMyAxLjItLjNsLjguMWMuMiAwIC40LjIuNS4zbC40LjR2Mi44bC4yLjNIOC4yVjE4LjdsLS42LjNIN2MtLjQgMC0uNyAwLTEtLjJhMSAxIDAgMCAxLS4zLS45YzAtLjMgMC0uNi4zLS44LjMtLjIuNy0uNCAxLjItLjRsLjYtLjJoLjN2LS4ybC0uMS0uMmEuOC44IDAgMCAwLS41LS4xIDEgMSAwIDAgMC0uNCAwbC0uMy40aC0xWm0yLjMuOGgtLjJsLS4yLjEtLjQuMWExIDEgMCAwIDAtLjQuMmwtLjIuMi4xLjMuNS4xaC40bC40LS40di0uNlptMi0zLjRoMS4ydjEuN2wuNS0uM2guNWMuNSAwIC45LjEgMS4yLjUuMy40LjUuOC41IDEuNCAwIC42LS4yIDEuMS0uNSAxLjUtLjMuNC0uNy42LTEuMy42bC0uNi0uMS0uNC0uNHYuNGgtMS4xdi01LjRabTEuMSAzLjNjMCAuMyAwIC42LjIuOGEuNy43IDAgMCAwIDEuMiAwbC4yLS44YzAtLjQgMC0uNi0uMi0uOGEuNy43IDAgMCAwLS42LS4zbC0uNi4zLS4yLjhabTYuMS0uNWMwLS4yIDAtLjMtLjItLjRhLjguOCAwIDAgMC0uNS0uMmMtLjMgMC0uNS4xLS42LjNsLS4yLjljMCAuMyAwIC42LjIuOC4xLjIuMy4zLjYuMy4yIDAgLjQgMCAuNS0uMmwuMi0uNGgxLjFjMCAuNS0uMy44LS42IDEuMWEyIDIgMCAwIDEtMS4zLjRjLS41IDAtMS0uMi0xLjMtLjZhMiAyIDAgMCAxLS41LTEuNGMwLS42LjEtMS4xLjUtMS41LjMtLjQuOC0uNSAxLjQtLjUuNSAwIDEgMCAxLjIuMy40LjMuNS43LjUgMS4yaC0xdi0uMVpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ2NoZWNrbGlzdC1ydGwnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTUgMTdoOGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMUg1YTEgMSAwIDAgMSAwLTJ6bTAtNmg4Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxSDVhMSAxIDAgMCAxIDAtMnptMC02aDhjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFINWExIDEgMCAxIDEgMC0yem0xNC4yIDExYy4yLS40LjYtLjUuOS0uMy4zLjIuNC42LjIgMUwxOCAyMGMtLjIuMy0uNy40LTEgMGwtMS4zLTEuM2EuNy43IDAgMCAxIDAtMWMuMy0uMi43LS4yIDEgMGwuNy45IDEuNy0yLjh6bTAtNmMuMi0uNC42LS41LjktLjMuMy4yLjQuNi4yIDFMMTggMTRjLS4yLjMtLjcuNC0xIDBsLTEuMy0xLjNhLjcuNyAwIDAgMSAwLTFjLjMtLjIuNy0uMiAxIDBsLjcuOSAxLjctMi44em0wLTZjLjItLjQuNi0uNS45LS4zLjMuMi40LjYuMiAxTDE4IDhjLS4yLjMtLjcuNC0xIDBsLTEuMy0xLjNhLjcuNyAwIDAgMSAwLTFjLjMtLjIuNy0uMiAxIDBsLjcuOSAxLjctMi44elwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnY2hlY2tsaXN0JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xMSAxN2g4Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxaC04YTEgMSAwIDAgMSAwLTJabTAtNmg4Yy42IDAgMSAuNCAxIDFzLS40IDEtMSAxaC04YTEgMSAwIDAgMSAwLTJabTAtNmg4YTEgMSAwIDAgMSAwIDJoLThhMSAxIDAgMCAxIDAtMlpNNy4yIDE2Yy4yLS40LjYtLjUuOS0uMy4zLjIuNC42LjIgMUw2IDIwYy0uMi4zLS43LjQtMSAwbC0xLjMtMS4zYS43LjcgMCAwIDEgMC0xYy4zLS4yLjctLjIgMSAwbC43LjkgMS43LTIuOFptMC02Yy4yLS40LjYtLjUuOS0uMy4zLjIuNC42LjIgMUw2IDE0Yy0uMi4zLS43LjQtMSAwbC0xLjMtMS4zYS43LjcgMCAwIDEgMC0xYy4zLS4yLjctLjIgMSAwbC43LjkgMS43LTIuOFptMC02Yy4yLS40LjYtLjUuOS0uMy4zLjIuNC42LjIgMUw2IDhjLS4yLjMtLjcuNC0xIDBMMy44IDYuOWEuNy43IDAgMCAxIDAtMWMuMy0uMi43LS4yIDEgMGwuNy45IDEuNy0yLjhaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdjaGVja21hcmsnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE4LjIgNS40YTEgMSAwIDAgMSAxLjYgMS4ybC04IDEyYTEgMSAwIDAgMS0xLjUuMWwtNS01YTEgMSAwIDEgMSAxLjQtMS40bDQuMSA0LjEgNy40LTExWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnY2hldnJvbi1kb3duJzogJzxzdmcgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCI+PHBhdGggZD1cIk04LjcgMi4yYy4zLS4zLjgtLjMgMSAwIC40LjQuNC45IDAgMS4yTDUuNyA3LjhjLS4zLjMtLjkuMy0xLjIgMEwuMiAzLjRhLjguOCAwIDAgMSAwLTEuMmMuMy0uMy44LS4zIDEuMSAwTDUgNmwzLjctMy44WlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnY2hldnJvbi1sZWZ0JzogJzxzdmcgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCI+PHBhdGggZD1cIk03LjggMS4zIDQgNWwzLjggMy43Yy4zLjMuMy44IDAgMS0uNC40LS45LjQtMS4yIDBMMi4yIDUuN2EuOC44IDAgMCAxIDAtMS4yTDYuNi4yQzcgMCA3LjQgMCA3LjguMmMuMy4zLjMuOCAwIDEuMVpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ2NoZXZyb24tcmlnaHQnOiAnPHN2ZyB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIj48cGF0aCBkPVwiTTIuMiAxLjNhLjguOCAwIDAgMSAwLTFjLjQtLjQuOS0uNCAxLjIgMGw0LjQgNC4xYy4zLjQuMy45IDAgMS4yTDMuNCA5LjhjLS4zLjMtLjguMy0xLjIgMGEuOC44IDAgMCAxIDAtMS4xTDYgNSAyLjIgMS4zWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnY2hldnJvbi11cCc6ICc8c3ZnIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMFwiPjxwYXRoIGQ9XCJNOC43IDcuOCA1IDQgMS4zIDcuOGMtLjMuMy0uOC4zLTEgMGEuOC44IDAgMCAxIDAtMS4ybDQuMS00LjRjLjMtLjMuOS0uMyAxLjIgMGw0LjIgNC40Yy4zLjMuMy45IDAgMS4yLS4zLjMtLjguMy0xLjEgMFpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ2Nsb3NlJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xNy4zIDguMiAxMy40IDEybDMuOSAzLjhhMSAxIDAgMCAxLTEuNSAxLjVMMTIgMTMuNGwtMy44IDMuOWExIDEgMCAwIDEtMS41LTEuNWwzLjktMy44LTMuOS0zLjhhMSAxIDAgMCAxIDEuNS0xLjVsMy44IDMuOSAzLjgtMy45YTEgMSAwIDAgMSAxLjUgMS41WlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnY29kZS1zYW1wbGUnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjZcIj48cGF0aCBkPVwiTTcuMSAxMWEyLjggMi44IDAgMCAxLS44IDIgMi44IDIuOCAwIDAgMSAuOCAydjEuN2MwIC4zLjEuNi40LjguMi4zLjUuNC44LjQuMyAwIC40LjIuNC40di44YzAgLjItLjEuNC0uNC40LS43IDAtMS40LS4zLTItLjgtLjUtLjYtLjgtMS4zLS44LTJWMTVjMC0uMy0uMS0uNi0uNC0uOC0uMi0uMy0uNS0uNC0uOC0uNGEuNC40IDAgMCAxLS40LS40di0uOGMwLS4yLjItLjQuNC0uNC4zIDAgLjYtLjEuOC0uNC4zLS4yLjQtLjUuNC0uOFY5LjNjMC0uNy4zLTEuNC44LTIgLjYtLjUgMS4zLS44IDItLjguMyAwIC40LjIuNC40di44YzAgLjItLjEuNC0uNC40LS4zIDAtLjYuMS0uOC40LS4zLjItLjQuNS0uNC44VjExWm05LjggMFY5LjNjMC0uMy0uMS0uNi0uNC0uOC0uMi0uMy0uNS0uNC0uOC0uNGEuNC40IDAgMCAxLS40LS40VjdjMC0uMi4xLS40LjQtLjQuNyAwIDEuNC4zIDIgLjguNS42LjggMS4zLjggMlYxMWMwIC4zLjEuNi40LjguMi4zLjUuNC44LjQuMiAwIC40LjIuNC40di44YzAgLjItLjIuNC0uNC40LS4zIDAtLjYuMS0uOC40LS4zLjItLjQuNS0uNC44djEuN2MwIC43LS4zIDEuNC0uOCAyLS42LjUtMS4zLjgtMiAuOGEuNC40IDAgMCAxLS40LS40di0uOGMwLS4yLjEtLjQuNC0uNC4zIDAgLjYtLjEuOC0uNC4zLS4yLjQtLjUuNC0uOFYxNWEyLjggMi44IDAgMCAxIC44LTIgMi44IDIuOCAwIDAgMS0uOC0yWm0tMy4zLS40YzAgLjQtLjEuOC0uNSAxLjEtLjMuMy0uNy41LTEuMS41LS40IDAtLjgtLjItMS4xLS41LS40LS4zLS41LS43LS41LTEuMSAwLS41LjEtLjkuNS0xLjIuMy0uMy43LS40IDEuMS0uNC40IDAgLjguMSAxLjEuNC40LjMuNS43LjUgMS4yWk0xMiAxM2MuNCAwIC44LjEgMS4xLjUuNC4zLjUuNy41IDEuMSAwIDEtLjEgMS42LS41IDJhMyAzIDAgMCAxLTEuMSAxYy0uNC4zLS44LjQtMS4xLjRhLjUuNSAwIDAgMS0uNS0uNVYxN2EzIDMgMCAwIDAgMS0uMmwuNi0uNmMtLjYgMC0xLS4yLTEuMy0uNS0uMi0uMy0uMy0uNy0uMy0xIDAtLjUuMS0xIC41LTEuMi4zLS40LjctLjUgMS4xLS41WlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnY29sb3ItbGV2ZWxzJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xNy41IDExLjRBOSA5IDAgMCAxIDE4IDE0YzAgLjUgMCAxLS4yIDEuNCAwIC40LS4zLjktLjUgMS4zYTYuMiA2LjIgMCAwIDEtMy43IDMgNS43IDUuNyAwIDAgMS0zLjIgMEE1LjkgNS45IDAgMCAxIDcuNiAxOGE2LjIgNi4yIDAgMCAxLTEuNC0yLjYgNi43IDYuNyAwIDAgMSAwLTIuOGMwLS40LjEtLjkuMy0xLjNhMTMuNiAxMy42IDAgMCAxIDIuMy00QTIwIDIwIDAgMCAxIDEyIDRhMjYuNCAyNi40IDAgMCAxIDMuMiAzLjQgMTguMiAxOC4yIDAgMCAxIDIuMyA0Wm0tMiA0LjVjLjQtLjcuNS0xLjQuNS0yYTcuMyA3LjMgMCAwIDAtMS0zLjJjLjIuNi4yIDEuMi4yIDEuOWE0LjUgNC41IDAgMCAxLTEuMyAzIDUuMyA1LjMgMCAwIDEtMi4zIDEuNSA0LjkgNC45IDAgMCAxLTIgLjEgNC4zIDQuMyAwIDAgMCAyLjQuOCA0IDQgMCAwIDAgMi0uNiA0IDQgMCAwIDAgMS41LTEuNVpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ2NvbG9yLXBpY2tlcic6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTIgM2E5IDkgMCAwIDAgMCAxOCAxLjUgMS41IDAgMCAwIDEuMS0yLjVjLS4yLS4zLS40LS42LS40LTEgMC0uOC43LTEuNSAxLjUtMS41SDE2YTUgNSAwIDAgMCA1LTVjMC00LjQtNC04LTktOFptLTUuNSA5YTEuNSAxLjUgMCAxIDEgMC0zIDEuNSAxLjUgMCAwIDEgMCAzWm0zLTRhMS41IDEuNSAwIDEgMSAwLTMgMS41IDEuNSAwIDAgMSAwIDNabTUgMGExLjUgMS41IDAgMSAxIDAtMyAxLjUgMS41IDAgMCAxIDAgM1ptMyA0YTEuNSAxLjUgMCAxIDEgMC0zIDEuNSAxLjUgMCAwIDEgMCAzWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnY29sb3Itc3dhdGNoLXJlbW92ZS1jb2xvcic6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIyXCIgZD1cIk0yMSAzIDMgMjFcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ2NvbG9yLXN3YXRjaCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxyZWN0IHg9XCIzXCIgeT1cIjNcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiByeD1cIjFcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ2NvbW1lbnQtYWRkJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PGcgZmlsbC1ydWxlPVwibm9uemVyb1wiPjxwYXRoIGQ9XCJtOSAxOSAzLTJoN2MuNiAwIDEtLjQgMS0xVjZjMC0uNi0uNC0xLTEtMUg1YTEgMSAwIDAgMC0xIDF2MTBjMCAuNi40IDEgMSAxaDR2MlptLTIgNHYtNEg1YTMgMyAwIDAgMS0zLTNWNmEzIDMgMCAwIDEgMy0zaDE0YTMgMyAwIDAgMSAzIDN2MTBhMyAzIDAgMCAxLTMgM2gtNi40TDcgMjNaXCIvPjxwYXRoIGQ9XCJNMTMgMTBoMmExIDEgMCAwIDEgMCAyaC0ydjJhMSAxIDAgMCAxLTIgMHYtMkg5YTEgMSAwIDAgMSAwLTJoMlY4YTEgMSAwIDAgMSAyIDB2MlpcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ2NvbW1lbnQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIm05IDE5IDMtMmg3Yy42IDAgMS0uNCAxLTFWNmMwLS42LS40LTEtMS0xSDVhMSAxIDAgMCAwLTEgMXYxMGMwIC42LjQgMSAxIDFoNHYyWm0tMiA0di00SDVhMyAzIDAgMCAxLTMtM1Y2YTMgMyAwIDAgMSAzLTNoMTRhMyAzIDAgMCAxIDMgM3YxMGEzIDMgMCAwIDEtMyAzaC02LjRMNyAyM1pcIi8+PC9zdmc+JyxcbiAgICAnY29udHJhc3QnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTEyIDRhNy44IDcuOCAwIDAgMSA1LjcgMi4zQTggOCAwIDEgMSAxMiA0Wm0tNiA4YTYgNiAwIDAgMCA2IDZWNmE2IDYgMCAwIDAtNiA2WlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnY29weSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTYgM0g2YTIgMiAwIDAgMC0yIDJ2MTFoMlY1aDEwVjNabTEgNGEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJoLTdhMiAyIDAgMCAxLTItMlY5YzAtMS4yLjktMiAyLTJoN1ptMCAxMlY5aC03djEwaDdaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdjcm9wJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xNyA4djdoMmMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMWgtMnYyYzAgLjYtLjQgMS0xIDFhMSAxIDAgMCAxLTEtMXYtMkg3VjlINWExIDEgMCAxIDEgMC0yaDJWNWMwLS42LjQtMSAxLTFzMSAuNCAxIDF2Mmg3bDMtMyAxIDEtMyAzWk05IDl2NWw1LTVIOVptMSA2aDV2LTVsLTUgNVpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ2N1dC1jb2x1bW4nOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk03LjIgNC41Yy45IDAgMS42LjQgMi4yIDFBMy43IDMuNyAwIDAgMSAxMC41IDh2LjVsMSAxIDQtNCAxLS41YTMuMyAzLjMgMCAwIDEgMiAwYy40IDAgLjcuMyAxIC41TDE3IDhoNHYxM2gtNlYxMGwtMS41IDEuNS41LjV2NGwtMi41LTIuNS0xIDF2LjVjMCAuNCAwIC44LS4zIDEuMi0uMi41LS40LjktLjggMS4yLS42LjctMS4zIDEtMi4yIDEtLjguMi0xLjUgMC0yLS42bC0uNS0uOC0uMi0xYzAtLjQgMC0uOC4zLTEuMkEzLjkgMy45IDAgMCAxIDcgMTIuN2MuNS0uMiAxLS4zIDEuNS0uMmwxLTEtMS0xYy0uNSAwLTEgMC0xLjUtLjItLjUtLjEtMS0uNC0xLjQtLjktLjQtLjMtLjYtLjctLjgtMS4yTDQuNSA3YzAtLjQgMC0uNy4yLTEgMC0uMy4zLS42LjUtLjguNS0uNSAxLjItLjggMi0uN1ptMTIuMyA1aC0zdjEwaDN2LTEwWk04IDEzLjhoLS4zbC0uNC4yYTIuOCAyLjggMCAwIDAtLjcuNHYuMWEyLjggMi44IDAgMCAwLS42LjhsLS4xLjR2LjdsLjIuNS41LjJoLjdhMi42IDIuNiAwIDAgMCAuOC0uMyAyLjQgMi40IDAgMCAwIC43LS43IDIuNSAyLjUgMCAwIDAgLjMtLjggMS41IDEuNSAwIDAgMCAwLS44IDEgMSAwIDAgMC0uMi0uNCAxIDEgMCAwIDAtLjUtLjJIOFptMy41LTMuN2MtLjQgMC0uNy4xLTEgLjQtLjMuMy0uNC42LS40IDFzLjEuNy40IDFjLjMuMy42LjQgMSAuNHMuNy0uMSAxLS40Yy4zLS4zLjQtLjYuNC0xcy0uMS0uNy0uNC0xYy0uMy0uMy0uNi0uNC0xLS40Wk03IDUuOGgtLjRhMSAxIDAgMCAwLS41LjMgMSAxIDAgMCAwLS4yLjV2LjdhMi41IDIuNSAwIDAgMCAuMy44bC4yLjNoLjFsLjQuNC40LjIuNC4xaC43TDkgOWwuMi0uNGExLjYgMS42IDAgMCAwIDAtLjggMi42IDIuNiAwIDAgMC0uMy0uOEEyLjUgMi41IDAgMCAwIDcuNyA2bC0uNC0uMUg3WlwiLz48L3N2Zz4nLFxuICAgICdjdXQtcm93JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMjIgM3Y1SDlsMyAzIDItMmg0bC00IDQgMSAxaC41Yy40IDAgLjggMCAxLjIuMy41LjIuOS40IDEuMi44LjcuNiAxIDEuMyAxIDIuMi4yLjggMCAxLjUtLjYgMmwtLjguNS0xIC4yYy0uNCAwLS44IDAtMS4yLS4zYTMuOSAzLjkgMCAwIDEtMi4xLTIuMmMtLjItLjUtLjMtMS0uMi0xLjVsLTEtMS0xIDFjMCAuNSAwIDEtLjIgMS41LS4xLjUtLjQgMS0uOSAxLjQtLjMuNC0uNy42LTEuMi44bC0xLjIuM2MtLjQgMC0uNyAwLTEtLjItLjMgMC0uNi0uMy0uOC0uNS0uNS0uNS0uOC0xLjItLjctMiAwLS45LjQtMS42IDEtMi4yQTMuNyAzLjcgMCAwIDEgOC42IDE0SDlsMS0xLTQtNC0uNS0xYTMuMyAzLjMgMCAwIDEgMC0yYzAtLjQuMy0uNy41LTFsMiAyVjNoMTRaTTguNSAxNS4zaC0uM2EyLjYgMi42IDAgMCAwLS44LjQgMi41IDIuNSAwIDAgMC0uOSAxLjFsLS4xLjR2LjdsLjIuNS41LjJoLjdhMi41IDIuNSAwIDAgMCAuOC0uM0w5IDE4VjE4bC40LS40LjItLjQuMS0uNHYtLjdhMSAxIDAgMCAwLS4yLS41IDEgMSAwIDAgMC0uNC0uMmgtLjVabTcgMEgxNWExIDEgMCAwIDAtLjQuMyAxIDEgMCAwIDAtLjIuNSAxLjUgMS41IDAgMCAwIDAgLjd2LjRhMi44IDIuOCAwIDAgMCAuNS43aC4xYTIuOCAyLjggMCAwIDAgLjguNmwuNC4xaC43bC41LS4yLjItLjV2LS43YTIuNiAyLjYgMCAwIDAtLjMtLjggMi40IDIuNCAwIDAgMC0uNy0uNyAyLjUgMi41IDAgMCAwLS44LS4zaC0uM1pNMTIgMTEuNmMtLjQgMC0uNy4xLTEgLjQtLjMuMy0uNC42LS40IDFzLjEuNy40IDFjLjMuMy42LjQgMSAuNHMuNy0uMSAxLS40Yy4zLS4zLjQtLjYuNC0xcy0uMS0uNy0uNC0xYy0uMy0uMy0uNi0uNC0xLS40Wm04LjUtNy4xaC0xMXYyaDExdi0yWlwiLz48L3N2Zz4nLFxuICAgICdjdXQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE4IDE1Yy42LjcgMSAxLjQgMSAyLjMgMCAuOC0uMiAxLjUtLjcgMmwtLjguNS0xIC4yYy0uNCAwLS44IDAtMS4yLS4zYTMuOSAzLjkgMCAwIDEtMi4xLTIuMmMtLjItLjUtLjMtMS0uMi0xLjVsLTEtMS0xIDFjMCAuNSAwIDEtLjIgMS41LS4xLjUtLjQgMS0uOSAxLjQtLjMuNC0uNy42LTEuMi44bC0xLjIuM2MtLjQgMC0uNyAwLTEtLjItLjMgMC0uNi0uMy0uOC0uNS0uNS0uNS0uOC0xLjItLjctMiAwLS45LjQtMS42IDEtMi4yQTMuNyAzLjcgMCAwIDEgOC42IDE0SDlsMS0xLTQtNC0uNS0xYTMuMyAzLjMgMCAwIDEgMC0yYzAtLjQuMy0uNy41LTFsNiA2IDYtNiAuNSAxYTMuMyAzLjMgMCAwIDEgMCAyYzAgLjQtLjMuNy0uNSAxbC00IDQgMSAxaC41Yy40IDAgLjggMCAxLjIuMy41LjIuOS40IDEuMi44Wm0tOC41IDIuMi4xLS40di0uN2ExIDEgMCAwIDAtLjItLjUgMSAxIDAgMCAwLS40LS4yIDEuNiAxLjYgMCAwIDAtLjggMCAyLjYgMi42IDAgMCAwLS44LjMgMi41IDIuNSAwIDAgMC0uOSAxLjFsLS4xLjR2LjdsLjIuNS41LjJoLjdhMi41IDIuNSAwIDAgMCAuOC0uMyAyLjggMi44IDAgMCAwIDEtMVptMi41LTIuOGMuNCAwIC43LS4xIDEtLjQuMy0uMy40LS42LjQtMXMtLjEtLjctLjQtMWMtLjMtLjMtLjYtLjQtMS0uNHMtLjcuMS0xIC40Yy0uMy4zLS40LjYtLjQgMXMuMS43LjQgMWMuMy4zLjYuNCAxIC40Wm01LjQgNCAuMi0uNXYtLjdhMi42IDIuNiAwIDAgMC0uMy0uOCAyLjQgMi40IDAgMCAwLS43LS43IDIuNSAyLjUgMCAwIDAtLjgtLjMgMS41IDEuNSAwIDAgMC0uOCAwIDEgMSAwIDAgMC0uNC4yIDEgMSAwIDAgMC0uMi41IDEuNSAxLjUgMCAwIDAgMCAuN3YuNGwuMy40LjMuNGEyLjggMi44IDAgMCAwIC44LjVsLjQuMWguN2wuNS0uMlpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ2RvY3VtZW50LXByb3BlcnRpZXMnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE0LjQgM0g3YTIgMiAwIDAgMC0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxMGEyIDIgMCAwIDAgMi0yVjcuNkwxNC40IDNaTTE3IDE5SDdWNWg2djRoNHYxMFpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ2RyYWcnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTEzIDVoMnYyaC0yVjVabTAgNGgydjJoLTJWOVpNOSA5aDJ2Mkg5VjlabTQgNGgydjJoLTJ2LTJabS00IDBoMnYySDl2LTJabTAgNGgydjJIOXYtMlptNCAwaDJ2MmgtMnYtMlpNOSA1aDJ2Mkg5VjVaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdkdXBsaWNhdGUtY29sdW1uJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xNyA2djE2aC03VjZoN1ptLTIgMmgtM3YxMmgzVjhabS0yLTZ2Mkg4djE1SDZWMmg3WlwiLz48L3N2Zz4nLFxuICAgICdkdXBsaWNhdGUtcm93JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0yMiAxMXY3SDZ2LTdoMTZabS0yIDJIOHYzaDEydi0zWm0tMS02djJINHY1SDJWN2gxN1pcIi8+PC9zdmc+JyxcbiAgICAnZHVwbGljYXRlJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PGcgZmlsbC1ydWxlPVwibm9uemVyb1wiPjxwYXRoIGQ9XCJNMTYgM3YySDZ2MTFINFY1YzAtMS4xLjktMiAyLTJoMTBabTMgOGgtMlY5aC03djEwaDlhMiAyIDAgMCAxLTIgMmgtN2EyIDIgMCAwIDEtMi0yVjljMC0xLjIuOS0yIDItMmg3YTIgMiAwIDAgMSAyIDJ2MlpcIi8+PHBhdGggZD1cIk0xNyAxNGgxYTEgMSAwIDAgMSAwIDJoLTF2MWExIDEgMCAwIDEtMiAwdi0xaC0xYTEgMSAwIDAgMSAwLTJoMXYtMWExIDEgMCAwIDEgMiAwdjFaXCIvPjwvZz48L3N2Zz4nLFxuICAgICdlZGl0LWJsb2NrJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZmlsbC1ydWxlPVwibm9uemVyb1wiIGQ9XCJtMTkuOCA4LjgtOS40IDkuNGMtLjIuMi0uNS40LS45LjRsLTUuNCAxLjIgMS4yLTUuNC41LS44IDkuNC05LjRjLjctLjcgMS44LS43IDIuNSAwbDIuMSAyLjFjLjcuNy43IDEuOCAwIDIuNVptLTItLjIgMS0uOXYtLjNsLTIuMi0yLjJhLjMuMyAwIDAgMC0uMyAwbC0xIDFMMTggOC41Wm0tMSAxLTIuNS0yLjQtNiA2IDIuNSAyLjUgNi02Wm0tNyA3LjEtMi42LTIuNC0uMy4zLS4xLjItLjcgMyAzLjEtLjZoLjFsLjQtLjVaXCIvPjwvc3ZnPicsXG4gICAgJ2VkaXQtaW1hZ2UnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE4IDE2aDJWN2EyIDIgMCAwIDAtMi0ySDd2MmgxMXY5Wk02IDE3aDE1YTEgMSAwIDAgMSAwIDJoLTF2MWExIDEgMCAwIDEtMiAwdi0xSDZhMiAyIDAgMCAxLTItMlY3SDNhMSAxIDAgMSAxIDAtMmgxVjRhMSAxIDAgMSAxIDIgMHYxM1ptMy01LjMgMS4zIDIgMy00LjcgMy43IDZIN2wyLTMuM1pcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ2VtYmVkLXBhZ2UnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE5IDZWNUg1djE0aDJBMTMgMTMgMCAwIDEgMTkgNlptMCAxLjRjLS44LjgtMS42IDIuNC0yLjIgNC42SDE5VjcuNFptMCA1LjZoLTIuNGMtLjQgMS44LS42IDMuOC0uNiA2aDN2LTZabS00IDZjMC0yLjIuMi00LjIuNi02SDEzYy0uNyAxLjgtMS4xIDMuOC0xLjEgNmgzWm0tNCAwYzAtMi4yLjQtNC4yIDEtNkg5LjZBMTIgMTIgMCAwIDAgOCAxOWgzWk00IDNoMTZjLjYgMCAxIC40IDEgMXYxNmMwIC42LS40IDEtMSAxSDRhMSAxIDAgMCAxLTEtMVY0YzAtLjYuNC0xIDEtMVptMTEuOCA5Yy40LTEuOSAxLTMuNCAxLjgtNC41YTkuMiA5LjIgMCAwIDAtNCA0LjVoMi4yWm0tMy40IDBhMTIgMTIgMCAwIDEgMi44LTQgMTIgMTIgMCAwIDAtNSA0aDIuMlpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ2VtYmVkJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk00IDNoMTZjLjYgMCAxIC40IDEgMXYxNmMwIC42LS40IDEtMSAxSDRhMSAxIDAgMCAxLTEtMVY0YzAtLjYuNC0xIDEtMVptMSAydjE0aDE0VjVINVptNC44IDIuNiA1LjYgNGEuNS41IDAgMCAxIDAgLjhsLTUuNiA0QS41LjUgMCAwIDEgOSAxNlY4YS41LjUgMCAwIDEgLjgtLjRaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdlbW9qaSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNOSAxMWMuNiAwIDEtLjQgMS0xcy0uNC0xLTEtMWExIDEgMCAwIDAtMSAxYzAgLjYuNCAxIDEgMVptNiAwYy42IDAgMS0uNCAxLTFzLS40LTEtMS0xYTEgMSAwIDAgMC0xIDFjMCAuNi40IDEgMSAxWm0tMyA1LjVjMi4xIDAgNC0xLjUgNC40LTMuNUg3LjZjLjUgMiAyLjMgMy41IDQuNCAzLjVaTTEyIDRhOCA4IDAgMSAwIDAgMTYgOCA4IDAgMCAwIDAtMTZabTAgMTQuNWE2LjUgNi41IDAgMSAxIDAtMTMgNi41IDYuNSAwIDAgMSAwIDEzWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnZXhwb3J0JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PGcgZmlsbC1ydWxlPVwibm9uemVyb1wiPjxwYXRoIGQ9XCJNMTQuNCAzIDE4IDd2MWgtNVY1SDd2MTRoOWExIDEgMCAwIDEgMiAwYzAgMS0uOCAyLTEuOSAySDdjLTEgMC0yLS44LTItMS45VjVjMC0xIC44LTIgMS45LTJoNy41WlwiLz48cGF0aCBkPVwiTTE4LjEgMTJjLjUgMCAuOS40LjkgMSAwIC41LS4zIDEtLjggMWgtNy4zYy0uNSAwLS45LS40LS45LTEgMC0uNS4zLTEgLjgtMWg3LjNaXCIvPjxwYXRoIGQ9XCJNMTYuNCA5LjJhMSAxIDAgMCAxIDEuNC4ybDIuNCAzLjYtMi40IDMuNmExIDEgMCAwIDEtMS43LTF2LS4ybDEuNy0yLjQtMS42LTIuNGExIDEgMCAwIDEgLjItMS40WlwiLz48L2c+PC9zdmc+JyxcbiAgICAnZmlsbCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNlwiPjxwYXRoIGQ9XCJtMTYuNiAxMi05LTktMS40IDEuNCAyLjQgMi40LTUuMiA1LjFjLS41LjYtLjUgMS42IDAgMi4yTDkgMTkuNmExLjUgMS41IDAgMCAwIDIuMiAwbDUuNS01LjVjLjUtLjYuNS0xLjYgMC0yLjJaTTUuMiAxMyAxMCA4LjJsNC44IDQuOEg1LjJaTTE5IDE0LjVzLTIgMi4yLTIgMy41YzAgMS4xLjkgMiAyIDJhMiAyIDAgMCAwIDItMmMwLTEuMy0yLTMuNS0yLTMuNVpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ2ZsaXAtaG9yaXpvbnRhbGx5JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xNCAxOWgydi0yaC0ydjJabTQtOGgyVjloLTJ2MlpNNCA3djEwYzAgMS4xLjkgMiAyIDJoM3YtMkg2VjdoM1Y1SDZhMiAyIDAgMCAwLTIgMlptMTQtMnYyaDJhMiAyIDAgMCAwLTItMlptLTcgMTZoMlYzaC0ydjE4Wm03LTZoMnYtMmgtMnYyWm0tNC04aDJWNWgtMnYyWm00IDEyYTIgMiAwIDAgMCAyLTJoLTJ2MlpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ2ZsaXAtdmVydGljYWxseSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNNSAxNHYyaDJ2LTJINVptOCA0djJoMnYtMmgtMlptNC0xNEg3YTIgMiAwIDAgMC0yIDJ2M2gyVjZoMTB2M2gyVjZhMiAyIDAgMCAwLTItMlptMiAxNGgtMnYyYTIgMiAwIDAgMCAyLTJaTTMgMTF2MmgxOHYtMkgzWm02IDd2Mmgydi0ySDlabTgtNHYyaDJ2LTJoLTJaTTUgMThjMCAxLjEuOSAyIDIgMnYtMkg1WlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnZm9vdG5vdGUnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE5IDEzYy42IDAgMSAuNCAxIDFzLS40IDEtMSAxSDVhMSAxIDAgMSAxIDAtMmgxNFpcIi8+PHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTE5IDR2NmgtMVY1aC0xLjVWNGgyLjZaXCIvPjxwYXRoIGQ9XCJNMTIgMThjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFINWExIDEgMCAxIDEgMC0yaDdaTTE0IDhjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFINWExIDEgMCAwIDEgMC0yaDlaXCIvPjwvc3ZnPicsXG4gICAgJ2Zvcm1hdC1wYWludGVyJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xOCA1VjRjMC0uNS0uNC0xLTEtMUg1YTEgMSAwIDAgMC0xIDF2NGMwIC42LjUgMSAxIDFoMTJjLjYgMCAxLS40IDEtMVY3aDF2NEg5djljMCAuNi40IDEgMSAxaDJjLjYgMCAxLS40IDEtMXYtN2g4VjVoLTNaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdmb3JtYXQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xNyA1YTEgMSAwIDAgMSAwIDJoLTR2MTFhMSAxIDAgMCAxLTIgMFY3SDdhMSAxIDAgMSAxIDAtMmgxMFpcIi8+PC9zdmc+JyxcbiAgICAnZnVsbHNjcmVlbic6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJtMTUuMyAxMC0xLjItMS4zIDIuOS0zaC0yLjNhLjkuOSAwIDEgMSAwLTEuN0gxOWMuNSAwIC45LjQuOS45djQuNGEuOS45IDAgMSAxLTEuOCAwVjdsLTIuOSAzWm0wIDQgMyAzdi0yLjNhLjkuOSAwIDEgMSAxLjcgMFYxOWMwIC41LS40LjktLjkuOWgtNC40YS45LjkgMCAxIDEgMC0xLjhIMTdsLTMtMi45IDEuMy0xLjJaTTEwIDE1LjRsLTIuOSAzaDIuM2EuOS45IDAgMSAxIDAgMS43SDVhLjkuOSAwIDAgMS0uOS0uOXYtNC40YS45LjkgMCAxIDEgMS44IDBWMTdsMi45LTMgMS4yIDEuM1pNOC43IDEwIDUuNyA3djIuM2EuOS45IDAgMCAxLTEuNyAwVjVjMC0uNS40LS45LjktLjloNC40YS45LjkgMCAwIDEgMCAxLjhIN2wzIDIuOS0xLjMgMS4yWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnZ2FsbGVyeSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGZpbGwtcnVsZT1cIm5vbnplcm9cIiBkPVwibTUgMTUuNyAyLjMtMi4yYy4zLS4zLjctLjMgMSAwTDExIDE2bDUuMS01Yy4zLS40LjgtLjQgMSAwbDIgMS45VjhINXY3LjdaTTUgMThWMTloM2wxLjgtMS45LTItMkw1IDE3LjlabTE0LTMtMi41LTIuNC02LjQgNi41SDE5di00Wk00IDZoMTZjLjYgMCAxIC40IDEgMXYxM2MwIC42LS40IDEtMSAxSDRhMSAxIDAgMCAxLTEtMVY3YzAtLjYuNC0xIDEtMVptNiA3YTIgMiAwIDEgMSAwLTQgMiAyIDAgMCAxIDAgNFpNNC41IDRoMTVhLjUuNSAwIDEgMSAwIDFoLTE1YS41LjUgMCAwIDEgMC0xWm0yLTJoMTFhLjUuNSAwIDEgMSAwIDFoLTExYS41LjUgMCAwIDEgMC0xWlwiLz48L3N2Zz4nLFxuICAgICdnYW1tYSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNNCAzaDE2Yy42IDAgMSAuNCAxIDF2MTZjMCAuNi0uNCAxLTEgMUg0YTEgMSAwIDAgMS0xLTFWNGMwLS42LjQtMSAxLTFabTEgMnYxNGgxNFY1SDVabTYuNSAxMS44VjE0TDkuMiA4LjdhNS4xIDUuMSAwIDAgMC0uNC0uOGwtLjEtLjJIOHYtMWwuMy0uMS4zLS4xaC43YTEgMSAwIDAgMSAuNi41bC4xLjNhOC41IDguNSAwIDAgMSAuMy42bDEuOSA0LjYgMi01LjJhMSAxIDAgMCAxIDEtLjYuNS41IDAgMCAxIC41LjZMMTMgMTR2Mi44YS43LjcgMCAwIDEtMS40IDBaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdoZWxwJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PGcgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPjxwYXRoIGQ9XCJNMTIgNS41YTYuNSA2LjUgMCAwIDAtNiA5IDYuMyA2LjMgMCAwIDAgMS40IDJsMSAxYTYuMyA2LjMgMCAwIDAgMy42IDEgNi41IDYuNSAwIDAgMCA2LTkgNi4zIDYuMyAwIDAgMC0xLjQtMmwtMS0xYTYuMyA2LjMgMCAwIDAtMy42LTFaTTEyIDRhNy44IDcuOCAwIDAgMSA1LjcgMi4zQTggOCAwIDEgMSAxMiA0WlwiLz48cGF0aCBkPVwiTTkuNiA5LjdhLjcuNyAwIDAgMS0uNy0uOGMwLTEuMSAxLjUtMS44IDMuMi0xLjggMS44IDAgMy4yLjggMy4yIDIuNCAwIDEuNC0uNCAyLjEtMS41IDIuOC0uMiAwLS4zLjEtLjMuMmEyIDIgMCAwIDAtLjguOC44LjggMCAwIDEtMS40LS42Yy4zLS43LjgtMSAxLjMtMS41bC40LS4yYy43LS40LjgtLjYuOC0xLjUgMC0uNS0uNi0uOS0xLjctLjktLjUgMC0xIC4xLTEuNC4zLS4yIDAtLjMuMS0uMy4ydi0uMmMwIC40LS40LjgtLjguOFpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTZcIiByPVwiMVwiLz48L2c+PC9zdmc+JyxcbiAgICAnaGlnaGxpZ2h0LWJnLWNvbG9yJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PGcgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPjxwYXRoIGNsYXNzPVwidG94LWljb24taGlnaGxpZ2h0LWJnLWNvbG9yX19jb2xvclwiIGQ9XCJNMyAxOGgxOHYzSDN6XCIvPjxwYXRoIGZpbGwtcnVsZT1cIm5vbnplcm9cIiBkPVwiTTcuNyAxNi43SDNsMy4zLTMuMy0uNy0uOEwxMC4yIDhsNCA0LjEtNCA0LjJjLS4yLjItLjYuMi0uOCAwbC0uNi0uNy0xLjEgMS4xem01LTcuNUwxMSA3LjRsMy0yLjlhMiAyIDAgMCAxIDIuNiAwTDE4IDZjLjcuNy43IDIgMCAyLjdsLTIuOSAyLjktMS44LTEuOC0uNS0uNlwiLz48L2c+PC9zdmc+JyxcbiAgICAnaG9tZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGZpbGwtcnVsZT1cIm5vbnplcm9cIiBkPVwiTTEwIDIwdi02aDR2Nmg1di04aDNMMTIgMyAyIDEyaDN2OHpcIi8+PC9zdmc+JyxcbiAgICAnaG9yaXpvbnRhbC1ydWxlJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk00IDExaDE2djJINHpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ2ltYWdlLW9wdGlvbnMnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTYgMTBhMiAyIDAgMCAwLTIgMmMwIDEuMS45IDIgMiAyYTIgMiAwIDAgMCAyLTIgMiAyIDAgMCAwLTItMlptMTIgMGEyIDIgMCAwIDAtMiAyYzAgMS4xLjkgMiAyIDJhMiAyIDAgMCAwIDItMiAyIDIgMCAwIDAtMi0yWm0tNiAwYTIgMiAwIDAgMC0yIDJjMCAxLjEuOSAyIDIgMmEyIDIgMCAwIDAgMi0yIDIgMiAwIDAgMC0yLTJaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdpbWFnZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJtNSAxNS43IDMuMy0zLjJjLjMtLjMuNy0uMyAxIDBMMTIgMTVsNC4xLTRjLjMtLjQuOC0uNCAxIDBsMiAxLjlWNUg1djEwLjdaTTUgMThWMTloM2wyLjgtMi45LTItMkw1IDE3LjlabTE0LTMtMi41LTIuNC02LjQgNi41SDE5di00Wk00IDNoMTZjLjYgMCAxIC40IDEgMXYxNmMwIC42LS40IDEtMSAxSDRhMSAxIDAgMCAxLTEtMVY0YzAtLjYuNC0xIDEtMVptNiA4YTIgMiAwIDEgMCAwLTQgMiAyIDAgMCAwIDAgNFpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ2luZGVudCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNNyA1aDEyYy42IDAgMSAuNCAxIDFzLS40IDEtMSAxSDdhMSAxIDAgMSAxIDAtMlptNSA0aDdjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFoLTdhMSAxIDAgMCAxIDAtMlptMCA0aDdjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFoLTdhMSAxIDAgMCAxIDAtMlptLTUgNGgxMmExIDEgMCAwIDEgMCAySDdhMSAxIDAgMCAxIDAtMlptLTIuNi0zLjhMNi4yIDEybC0xLjgtMS4yYTEgMSAwIDAgMSAxLjItMS42bDMgMmExIDEgMCAwIDEgMCAxLjZsLTMgMmExIDEgMCAxIDEtMS4yLTEuNlpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ2luZm8nOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTEyIDRhNy44IDcuOCAwIDAgMSA1LjcgMi4zQTggOCAwIDEgMSAxMiA0Wm0tMSAzdjJoMlY3aC0yWm0zIDEwdi0xaC0xdi01aC0zdjFoMXY0aC0xdjFoNFpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ2luc2VydC1jaGFyYWN0ZXInOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE1IDE4aDRsMS0ydjRoLTZ2LTMuM2wxLjQtMWE2IDYgMCAwIDAgMS44LTIuOSA2LjMgNi4zIDAgMCAwLS4xLTQuMSA1LjggNS44IDAgMCAwLTMtMy4yYy0uNi0uMy0xLjMtLjUtMi4xLS41YTUuMSA1LjEgMCAwIDAtMy45IDEuOCA2LjMgNi4zIDAgMCAwLTEuMyA2IDYuMiA2LjIgMCAwIDAgMS44IDNsMS40LjlWMjBINHYtNGwxIDJoNHYtLjVsLTItMUw1LjQgMTVBNi41IDYuNSAwIDAgMSA0IDExYzAtMSAuMi0xLjkuNi0yLjdBNyA3IDAgMCAxIDYuMyA2QzcuMSA1LjQgOCA1IDkgNC41YzEtLjMgMi0uNSAzLjEtLjVhOC44IDguOCAwIDAgMSA1LjcgMiA3IDcgMCAwIDEgMS43IDIuMyA2IDYgMCAwIDEgLjIgNC44Yy0uMi43LS42IDEuMy0xIDEuOWE3LjYgNy42IDAgMCAxLTMuNiAyLjV2LjVaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdpbnNlcnQtdGltZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxnIGZpbGwtcnVsZT1cIm5vbnplcm9cIj48cGF0aCBkPVwiTTEyIDE5YTcgNyAwIDEgMCAwLTE0IDcgNyAwIDAgMCAwIDE0Wm0wIDJhOSA5IDAgMSAxIDAtMTggOSA5IDAgMCAxIDAgMThaXCIvPjxwYXRoIGQ9XCJNMTYgMTJoLTNWN2MwLS42LS40LTEtMS0xYTEgMSAwIDAgMC0xIDF2N2g1Yy42IDAgMS0uNCAxLTFzLS40LTEtMS0xWlwiLz48L2c+PC9zdmc+JyxcbiAgICAnaW52ZXJ0JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xOCAxOS4zIDE2LjUgMThhNS44IDUuOCAwIDAgMS0zLjEgMS45IDYuMSA2LjEgMCAwIDEtNS41LTEuNkE1LjggNS44IDAgMCAxIDYgMTR2LS4zbC4xLTEuMkExMy45IDEzLjkgMCAwIDEgNy43IDlsLTMtMyAuNy0uOCAyLjggMi45IDkgOC45IDEuNSAxLjYtLjcuNlptMC01LjV2LjNsLS4xIDEuMS0uNCAxLTEuMi0xLjJhNC4zIDQuMyAwIDAgMCAuMi0xdi0uMmMwLS40IDAtLjgtLjItMS4zbC0uNS0xLjRhMTQuOCAxNC44IDAgMCAwLTMtNC4yTDEyIDZhMjYuMSAyNi4xIDAgMCAwLTIuMiAyLjVsLTEtMWEyMC45IDIwLjkgMCAwIDEgMi45LTMuM0wxMiA0bDEgLjhhMjIuMiAyMi4yIDAgMCAxIDQgNS40Yy42IDEuMiAxIDIuNCAxIDMuNlpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ2l0YWxpYyc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJtMTYuNyA0LjctLjEuOWgtLjNjLS42IDAtMSAwLTEuNC4zLS4zLjMtLjQuNi0uNSAxLjFsLTIuMSA5Ljh2LjZjMCAuNS40LjggMS40LjhoLjJsLS4yLjhIOGwuMi0uOGguMmMxLjEgMCAxLjgtLjUgMi0xLjVsMi05LjguMS0uNWMwLS42LS40LS44LTEuNC0uOGgtLjNsLjItLjloNS44WlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnbGFuZ3VhZ2UnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTEyIDNhOSA5IDAgMSAxIDAgMTggOSA5IDAgMCAxIDAtMThabTQuMyAxMy4zYy0uNSAxLTEuMiAyLTIgMi45YTcuNSA3LjUgMCAwIDAgMy4yLTIuMWwtLjItLjJhNiA2IDAgMCAwLTEtLjZabS04LjYgMGMtLjUuMi0uOS41LTEuMi44LjkgMSAyIDEuNyAzLjIgMmExMCAxMCAwIDAgMS0yLTIuOFptMy42LS44Yy0uOCAwLTEuNi4xLTIuMi4zLjUgMSAxLjIgMS45IDIuMSAyLjdabTEuNSAwdjNjLjktLjggMS42LTEuNyAyLjEtMi43LS42LS4yLTEuNC0uMy0yLjEtLjNabS02LTIuN0g0LjVjLjIgMSAuNSAyLjEgMSAzaC4zbDEuMy0xYTEwIDEwIDAgMCAxLS4zLTJabTEyLjcgMGgtMi4zYzAgLjctLjEgMS40LS4zIDJsMS42IDEuMWMuNS0xIC45LTIgMS0zLjFabS0zLjggMGgtM1YxNGMxIDAgMiAuMSAyLjcuNC4yLS41LjMtMSAuMy0xLjZabS00LjQgMGgtM2wuMyAxLjZjLjgtLjMgMS43LS40IDIuNy0uNHYtMS4zWm0tNS41LTVjLS43IDEtMS4xIDIuMi0xLjMgMy41aDIuM2MwLTEgLjItMS44LjUtMi42bC0xLjUtMVptMi45IDEuNHYuMWMtLjIuNi0uNCAxLjMtLjQgMmgzVjkuNGMtMSAwLTEuOC0uMS0yLjYtLjNabTYuNiAwaC0uMWwtMi40LjN2MS44aDNsLS41LTIuMVptMy0xLjQtLjMuMS0xLjMuOGMuMy44LjUgMS42LjUgMi42aDIuM2E3LjUgNy41IDAgMCAwLTEuMy0zLjVabS05IDAgMiAuMlY1LjVhOSA5IDAgMCAwLTIgMi4yWm0zLjUtMi4zVjhjLjYgMCAxLjMgMCAxLjktLjJhOSA5IDAgMCAwLTItMi4zWm0tMy0uN2gtLjFjLTEuMS40LTIuMSAxLTMgMS44bDEuMi43YTEwIDEwIDAgMCAxIDEuOS0yLjVabTQuNCAwIC4xLjFhMTAgMTAgMCAwIDEgMS44IDIuNGwxLjEtLjdhNy41IDcuNSAwIDAgMC0zLTEuOFpcIi8+PC9zdmc+JyxcbiAgICAnbGluZS1oZWlnaHQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTIxIDVhMSAxIDAgMCAxIC4xIDJIMTNhMSAxIDAgMCAxLS4xLTJIMjF6bTAgNGExIDEgMCAwIDEgLjEgMkgxM2ExIDEgMCAwIDEtLjEtMkgyMXptMCA0YTEgMSAwIDAgMSAuMSAySDEzYTEgMSAwIDAgMS0uMS0ySDIxem0wIDRhMSAxIDAgMCAxIC4xIDJIMTNhMSAxIDAgMCAxLS4xLTJIMjF6TTcgMy42bDMuNyAzLjdhMSAxIDAgMCAxLTEuMyAxLjVoLS4xTDggNy4zdjkuMmwxLjMtMS4zYTEgMSAwIDAgMSAxLjMgMGguMWMuNC40LjQgMSAwIDEuM3YuMUw3IDIwLjRsLTMuNy0zLjdhMSAxIDAgMCAxIDEuMy0xLjVoLjFMNiAxNi43VjcuNEw0LjcgOC43YTEgMSAwIDAgMS0xLjMgMGgtLjFhMSAxIDAgMCAxIDAtMS4zdi0uMUw3IDMuNnpcIi8+PC9zdmc+JyxcbiAgICAnbGluZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJtMTUgOS04IDhINHYtM2w4LTggMyAzWm0xLTEtMy0zIDEtMWgxYy0uMiAwIDAgMCAwIDBsMiAyczAgLjIgMCAwdjFsLTEgMVpNNCAxOGgxNnYySDR2LTJaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdsaW5rJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk02LjIgMTIuM2ExIDEgMCAwIDEgMS40IDEuNGwtMiAyYTIgMiAwIDEgMCAyLjYgMi44bDQuOC00LjhhMSAxIDAgMCAwIDAtMS40IDEgMSAwIDEgMSAxLjQtMS4zIDIuOSAyLjkgMCAwIDEgMCA0TDkuNiAyMGEzLjkgMy45IDAgMCAxLTUuNS01LjVsMi0yWm0xMS42LS42YTEgMSAwIDAgMS0xLjQtMS40bDItMmEyIDIgMCAxIDAtMi42LTIuOEwxMSAxMC4zYTEgMSAwIDAgMCAwIDEuNEExIDEgMCAxIDEgOS42IDEzYTIuOSAyLjkgMCAwIDEgMC00TDE0LjQgNGEzLjkgMy45IDAgMCAxIDUuNSA1LjVsLTIgMlpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ2xpc3QtYnVsbC1jaXJjbGUnOiAnPHN2ZyB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHBhdGggZD1cIk0xMSAxNmEyIDIgMCAxIDAgMC00IDIgMiAwIDAgMCAwIDRabTAgMWEzIDMgMCAxIDEgMC02IDMgMyAwIDAgMSAwIDZaTTExIDI2YTIgMiAwIDEgMCAwLTQgMiAyIDAgMCAwIDAgNFptMCAxYTMgMyAwIDEgMSAwLTYgMyAzIDAgMCAxIDAgNlpNMTEgMzZhMiAyIDAgMSAwIDAtNCAyIDIgMCAwIDAgMCA0Wm0wIDFhMyAzIDAgMSAxIDAtNiAzIDMgMCAwIDEgMCA2WlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PHBhdGggb3BhY2l0eT1cIi4yXCIgZD1cIk0xOCAxMmgyMnY0SDE4ek0xOCAyMmgyMnY0SDE4ek0xOCAzMmgyMnY0SDE4elwiLz48L2c+PC9zdmc+JyxcbiAgICAnbGlzdC1idWxsLWRlZmF1bHQnOiAnPHN2ZyB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PGNpcmNsZSBjeD1cIjExXCIgY3k9XCIxNFwiIHI9XCIzXCIvPjxjaXJjbGUgY3g9XCIxMVwiIGN5PVwiMjRcIiByPVwiM1wiLz48Y2lyY2xlIGN4PVwiMTFcIiBjeT1cIjM0XCIgcj1cIjNcIi8+PHBhdGggb3BhY2l0eT1cIi4yXCIgZD1cIk0xOCAxMmgyMnY0SDE4ek0xOCAyMmgyMnY0SDE4ek0xOCAzMmgyMnY0SDE4elwiLz48L2c+PC9zdmc+JyxcbiAgICAnbGlzdC1idWxsLXNxdWFyZSc6ICc8c3ZnIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiPjxnIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBkPVwiTTggMTFoNnY2SDh6TTggMjFoNnY2SDh6TTggMzFoNnY2SDh6XCIvPjxwYXRoIG9wYWNpdHk9XCIuMlwiIGQ9XCJNMTggMTJoMjJ2NEgxOHpNMTggMjJoMjJ2NEgxOHpNMTggMzJoMjJ2NEgxOHpcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ2xpc3QtbnVtLWRlZmF1bHQtcnRsJzogJzxzdmcgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCI+PGcgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPjxwYXRoIG9wYWNpdHk9XCIuMlwiIGQ9XCJNOCAxMmgyMnY0SDh6TTggMjJoMjJ2NEg4ek04IDMyaDIydjRIOHpcIi8+PHBhdGggZD1cIk0zNy40IDE3di00LjhoLS4xbC0xLjUgMXYtMS4xbDEuNi0xLjFoMS4ydjZ6TTMzLjMgMTcuMWMtLjUgMC0uOC0uMy0uOC0uNyAwLS40LjMtLjcuOC0uNy40IDAgLjcuMy43LjcgMCAuNC0uMy43LS43Ljd6bTEuNyA1LjdjMC0xLjIgMS0yIDIuMi0yIDEuMyAwIDIuMS44IDIuMSAxLjggMCAuNy0uMyAxLjItMS4zIDIuMmwtMS4yIDF2LjJoMi42djFoLTQuM3YtLjlsMi0xLjljLjgtLjggMS0xLjEgMS0xLjUgMC0uNS0uNC0uOC0xLS44LS41IDAtLjkuMy0uOS45SDM1em0tMS43IDQuM2MtLjUgMC0uOC0uMy0uOC0uNyAwLS40LjMtLjcuOC0uNy40IDAgLjcuMy43LjcgMCAuNC0uMy43LS43Ljd6bTMuMiA3LjN2LTFoLjdjLjYgMCAxLS4zIDEtLjggMC0uNC0uNC0uNy0xLS43cy0xIC4zLTEgLjhIMzVjMC0xLjEgMS0xLjggMi4yLTEuOCAxLjIgMCAyLjEuNiAyLjEgMS42IDAgLjctLjQgMS4yLTEgMS4zdi4xYy43LjEgMS4zLjcgMS4zIDEuNCAwIDEtMSAxLjktMi40IDEuOS0xLjMgMC0yLjItLjgtMi4zLTJoMS4yYzAgLjYuNSAxIDEuMSAxIC42IDAgMS0uNCAxLTEgMC0uNS0uMy0uOC0xLS44aC0uN3ptLTMuMyAyLjdjLS40IDAtLjctLjMtLjctLjcgMC0uNC4zLS43LjctLjcuNSAwIC44LjMuOC43IDAgLjQtLjMuNy0uOC43elwiLz48L2c+PC9zdmc+JyxcbiAgICAnbGlzdC1udW0tZGVmYXVsdCc6ICc8c3ZnIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiPjxnIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBvcGFjaXR5PVwiLjJcIiBkPVwiTTE4IDEyaDIydjRIMTh6TTE4IDIyaDIydjRIMTh6TTE4IDMyaDIydjRIMTh6XCIvPjxwYXRoIGQ9XCJNMTAgMTd2LTQuOGwtMS41IDF2LTEuMWwxLjYtMWgxLjJWMTdoLTEuMlptMy42LjFjLS40IDAtLjctLjMtLjctLjcgMC0uNC4zLS43LjctLjcuNSAwIC43LjMuNy43IDAgLjQtLjIuNy0uNy43Wm0tNSA1LjdjMC0xLjIuOC0yIDIuMS0yczIuMS44IDIuMSAxLjhjMCAuNy0uMyAxLjItMS40IDIuMmwtMS4xIDF2LjJoMi42djFIOC42di0uOWwyLTEuOWMuOC0uOCAxLTEuMSAxLTEuNSAwLS41LS40LS44LTEtLjgtLjUgMC0uOS4zLS45LjlIOC41Wm02LjMgNC4zYy0uNSAwLS43LS4zLS43LS43IDAtLjQuMi0uNy43LS43LjQgMCAuNy4zLjcuNyAwIC40LS4zLjctLjcuN1pNMTAgMzQuNHYtMWguN2MuNiAwIDEtLjMgMS0uOCAwLS40LS40LS43LTEtLjdzLTEgLjMtMSAuOEg4LjZjMC0xLjEgMS0xLjggMi4yLTEuOCAxLjMgMCAyLjEuNiAyLjEgMS42IDAgLjctLjQgMS4yLTEgMS4zdi4xYy44LjEgMS4zLjcgMS4zIDEuNCAwIDEtMSAxLjktMi40IDEuOS0xLjMgMC0yLjItLjgtMi4zLTJoMS4yYzAgLjYuNSAxIDEuMSAxIC43IDAgMS0uNCAxLTEgMC0uNS0uMy0uOC0xLS44aC0uN1ptNC43IDIuN2MtLjQgMC0uNy0uMy0uNy0uNyAwLS40LjMtLjcuNy0uNy41IDAgLjguMy44LjcgMCAuNC0uMy43LS44LjdaXCIvPjwvZz48L3N2Zz4nLFxuICAgICdsaXN0LW51bS1sb3dlci1hbHBoYS1ydGwnOiAnPHN2ZyB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHBhdGggb3BhY2l0eT1cIi4yXCIgZD1cIk04IDEyaDIydjRIOHpNOCAyMmgyMnY0SDh6TTggMzJoMjJ2NEg4elwiLz48cGF0aCBkPVwiTTM2LjUgMTZjLS45IDAtMS41LS41LTEuNS0xLjNzLjYtMS4zIDEuOC0xLjRoMXYtLjRjMC0uNC0uMi0uNi0uNy0uNi0uNCAwLS43LjEtLjguNGgtMS4xYzAtLjguOC0xLjQgMi0xLjRTMzkgMTIgMzkgMTNWMTZoLTEuMnYtLjZjLS4zLjQtLjguNy0xLjQuN1ptLjQtLjhjLjYgMCAxLS40IDEtLjlWMTRoLTFjLS41LjEtLjcuMy0uNy42IDAgLjQuMy42LjcuNlpNMzMuMSAxNi4xYy0uNCAwLS43LS4zLS43LS43IDAtLjQuMy0uNy43LS43LjUgMCAuOC4zLjguNyAwIC40LS4zLjctLjguN1pNMzcuNyAyNmMtLjcgMC0xLjItLjItMS41LS43di43SDM1di02LjNoMS4ydjIuNWMuMy0uNS44LS45IDEuNS0uOSAxLjEgMCAxLjggMSAxLjggMi40IDAgMS41LS43IDIuNC0xLjggMi40Wm0tLjUtMy42Yy0uNiAwLTEgLjUtMSAxLjNzLjQgMS40IDEgMS40Yy43IDAgMS0uNiAxLTEuNCAwLS44LS4zLTEuMy0xLTEuM1pNMzMuMiAyNi4xYy0uNCAwLS43LS4zLS43LS43IDAtLjQuMy0uNy43LS43LjUgMCAuOC4zLjguNyAwIC40LS4zLjctLjguN3ptNiA3aC0xYy0uMS0uNS0uNC0uOC0xLS44cy0xIC41LTEgMS40YzAgMSAuNCAxLjQgMSAxLjQuNSAwIC45LS4yIDEtLjdoMWMwIDEtLjggMS43LTIgMS43LTEuNCAwLTIuMi0uOS0yLjItMi40cy44LTIuNCAyLjItMi40YzEuMiAwIDIgLjcgMiAxLjd6bS02LjEgM2MtLjUgMC0uNy0uMy0uNy0uNyAwLS40LjItLjcuNy0uNy40IDAgLjcuMy43LjcgMCAuNC0uMy43LS43Ljd6XCIvPjwvZz48L3N2Zz4nLFxuICAgICdsaXN0LW51bS1sb3dlci1hbHBoYSc6ICc8c3ZnIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiPjxnIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBvcGFjaXR5PVwiLjJcIiBkPVwiTTE4IDEyaDIydjRIMTh6TTE4IDIyaDIydjRIMTh6TTE4IDMyaDIydjRIMTh6XCIvPjxwYXRoIGQ9XCJNMTAuMyAxNS4yYy41IDAgMS0uNCAxLS45VjE0aC0xYy0uNS4xLS44LjMtLjguNiAwIC40LjMuNi44LjZabS0uNC45Yy0xIDAtMS41LS42LTEuNS0xLjQgMC0uOC42LTEuMyAxLjctMS40aDEuMXYtLjRjMC0uNC0uMi0uNi0uNy0uNi0uNSAwLS44LjEtLjkuNGgtMWMwLS44LjgtMS40IDItMS40IDEuMSAwIDEuOC42IDEuOCAxLjZWMTZoLTEuMXYtLjZoLS4xYy0uMi40LS43LjctMS4zLjdabTQuNiAwYy0uNSAwLS43LS4zLS43LS43IDAtLjQuMi0uNy43LS43LjQgMCAuNy4zLjcuNyAwIC40LS4zLjctLjcuN1ptLTMuMiAxMGMtLjYgMC0xLjItLjMtMS40LS44di43SDguNXYtNi4zSDEwdjIuNWMuMy0uNS44LS45IDEuNC0uOSAxLjIgMCAxLjkgMSAxLjkgMi40IDAgMS41LS43IDIuNC0xLjkgMi40Wm0tLjQtMy43Yy0uNyAwLTEgLjUtMSAxLjNzLjMgMS40IDEgMS40Yy42IDAgMS0uNiAxLTEuNCAwLS44LS40LTEuMy0xLTEuM1ptNCAzLjdjLS41IDAtLjctLjMtLjctLjcgMC0uNC4yLS43LjctLjcuNCAwIC43LjMuNy43IDAgLjQtLjMuNy0uNy43Wm0tMi4yIDdoLTEuMmMwLS41LS40LS44LS45LS44LS42IDAtMSAuNS0xIDEuNCAwIDEgLjQgMS40IDEgMS40LjUgMCAuOC0uMiAxLS43aDFjMCAxLS44IDEuNy0yIDEuNy0xLjQgMC0yLjItLjktMi4yLTIuNHMuOC0yLjQgMi4yLTIuNGMxLjIgMCAyIC43IDIgMS43Wm0xLjggM2MtLjUgMC0uOC0uMy0uOC0uNyAwLS40LjMtLjcuOC0uNy40IDAgLjcuMy43LjcgMCAuNC0uMy43LS43LjdaXCIvPjwvZz48L3N2Zz4nLFxuICAgICdsaXN0LW51bS1sb3dlci1ncmVlay1ydGwnOiAnPHN2ZyB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHBhdGggb3BhY2l0eT1cIi4yXCIgZD1cIk04IDEyaDIydjRIOHpNOCAyMmgyMnY0SDh6TTggMzJoMjJ2NEg4elwiLz48cGF0aCBkPVwiTTM3LjQgMTZjLTEuMiAwLTItLjgtMi0yLjMgMC0xLjUuOC0yLjQgMi0yLjQuNiAwIDEgLjQgMS4zIDF2LS45SDQwdjMuMmMwIC40LjEuNS40LjVoLjJ2LjloLS42Yy0uNiAwLTEtLjItMS0uN2gtLjJjLS4yLjQtLjcuOC0xLjMuOFptLjMtMWMuNiAwIDEtLjUgMS0xLjNzLS40LTEuMy0xLTEuMy0xIC41LTEgMS4zLjQgMS40IDEgMS40Wk0zMy4zIDE2LjFjLS41IDAtLjgtLjMtLjgtLjcgMC0uNC4zLS43LjgtLjcuNCAwIC43LjMuNy43IDAgLjQtLjMuNy0uNy43Wk0zNiAyMS45YzAtMS41LjgtMi4zIDIuMS0yLjMgMS4yIDAgMiAuNiAyIDEuNiAwIC42LS4zIDEtLjkgMS4zLjkuMyAxLjMuOCAxLjMgMS43IDAgMS4yLS43IDEuOS0xLjggMS45LS42IDAtMS4xLS4zLTEuNC0uOHYyLjJIMzZWMjJabTEuOCAxLjJ2LTFoLjNjLjUgMCAuOS0uMi45LS43IDAtLjUtLjMtLjgtLjktLjgtLjUgMC0uOC4zLS44IDF2Mi4yYzAgLjguNCAxLjMgMSAxLjNzMS0uNCAxLTEtLjQtMS0xLjItMWgtLjNaTTMzLjMgMjYuMWMtLjUgMC0uOC0uMy0uOC0uNyAwLS40LjMtLjcuOC0uNy40IDAgLjcuMy43LjcgMCAuNC0uMy43LS43LjdaTTM3LjEgMzQuNiAzNC44IDMwaDEuNGwxLjcgMy41IDEuNy0zLjVoMS4xbC0yLjIgNC42di4xYy41LjguNyAxLjQuNyAxLjggMCAuNC0uMi44LS40IDEtLjIuMi0uNi4zLTEgLjMtLjkgMC0xLjMtLjQtMS4zLTEuMiAwLS41LjItMSAuNS0xLjdsLjEtLjJabS43IDFhMiAyIDAgMCAwLS40LjljMCAuMy4xLjQuNC40LjMgMCAuNC0uMS40LS40IDAtLjItLjEtLjYtLjQtMVpNMzMuMyAzNi4xYy0uNSAwLS44LS4zLS44LS43IDAtLjQuMy0uNy44LS43LjQgMCAuNy4zLjcuNyAwIC40LS4zLjctLjcuN1pcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ2xpc3QtbnVtLWxvd2VyLWdyZWVrJzogJzxzdmcgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCI+PGcgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPjxwYXRoIG9wYWNpdHk9XCIuMlwiIGQ9XCJNMTggMTJoMjJ2NEgxOHpNMTggMjJoMjJ2NEgxOHpNMTggMzJoMjJ2NEgxOHpcIi8+PHBhdGggZD1cIk0xMC41IDE1Yy43IDAgMS0uNSAxLTEuM3MtLjMtMS4zLTEtMS4zYy0uNSAwLS45LjUtLjkgMS4zcy40IDEuNCAxIDEuNFptLS4zIDFjLTEuMSAwLTEuOC0uOC0xLjgtMi4zIDAtMS41LjctMi40IDEuOC0yLjQuNyAwIDEuMS40IDEuMyAxaC4xdi0uOWgxLjJ2My4yYzAgLjQuMS41LjQuNWguMnYuOWgtLjZjLS42IDAtMS0uMi0xLjEtLjdoLS4xYy0uMi40LS43LjgtMS40LjhabTUgLjFjLS41IDAtLjgtLjMtLjgtLjcgMC0uNC4zLS43LjctLjcuNSAwIC44LjMuOC43IDAgLjQtLjMuNy0uOC43Wm0tNC45IDd2LTFoLjNjLjYgMCAxLS4yIDEtLjcgMC0uNS0uNC0uOC0xLS44LS41IDAtLjguMy0uOCAxdjIuMmMwIC44LjQgMS4zIDEuMSAxLjMuNiAwIDEtLjQgMS0xcy0uNS0xLTEuMy0xaC0uM1pNOC42IDIyYzAtMS41LjctMi4zIDItMi4zIDEuMiAwIDIgLjYgMiAxLjYgMCAuNi0uMyAxLS44IDEuMy44LjMgMS4zLjggMS4zIDEuNyAwIDEuMi0uOCAxLjktMS45IDEuOS0uNiAwLTEuMS0uMy0xLjMtLjh2Mi4ySDguNVYyMlptNi4yIDQuMmMtLjQgMC0uNy0uMy0uNy0uNyAwLS40LjMtLjcuNy0uNy41IDAgLjcuMy43LjcgMCAuNC0uMi43LS43LjdabS00LjUgOC41TDggMzBoMS40bDEuNyAzLjUgMS43LTMuNWgxLjFsLTIuMiA0LjZ2LjFjLjUuOC43IDEuNC43IDEuOCAwIC40LS4xLjgtLjQgMS0uMi4yLS42LjMtMSAuMy0uOSAwLTEuMy0uNC0xLjMtMS4yIDAtLjUuMi0xIC41LTEuN2wuMS0uMlptLjcgMWEyIDIgMCAwIDAtLjQuOWMwIC4zLjEuNC40LjQuMyAwIC40LS4xLjQtLjQgMC0uMi0uMS0uNi0uNC0xWm00LjUuNWMtLjUgMC0uOC0uMy0uOC0uNyAwLS40LjMtLjcuOC0uNy40IDAgLjcuMy43LjcgMCAuNC0uMy43LS43LjdaXCIvPjwvZz48L3N2Zz4nLFxuICAgICdsaXN0LW51bS1sb3dlci1yb21hbi1ydGwnOiAnPHN2ZyB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHBhdGggb3BhY2l0eT1cIi4yXCIgZD1cIk04IDEyaDIydjRIOHpNOCAyMmgyMnY0SDh6TTggMzJoMjJ2NEg4elwiLz48cGF0aCBkPVwiTTMyLjkgMTZ2LTEuMmgtMS4zVjE2SDMzWm0wIDEwdi0xLjJoLTEuM1YyNkgzM1ptMCAxMHYtMS4yaC0xLjNWMzZIMzNaXCIvPjxwYXRoIGZpbGwtcnVsZT1cIm5vbnplcm9cIiBkPVwiTTM2IDIxaC0xLjV2NUgzNnpNMzYgMzFoLTEuNXY1SDM2ek0zOSAyMWgtMS41djVIMzl6TTM5IDMxaC0xLjV2NUgzOXpNNDIgMzFoLTEuNXY1SDQyek0zNiAxMWgtMS41djVIMzZ6TTM2IDE5aC0xLjV2MUgzNnpNMzYgMjloLTEuNXYxSDM2ek0zOSAxOWgtMS41djFIMzl6TTM5IDI5aC0xLjV2MUgzOXpNNDIgMjloLTEuNXYxSDQyek0zNiA5aC0xLjV2MUgzNnpcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ2xpc3QtbnVtLWxvd2VyLXJvbWFuJzogJzxzdmcgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCI+PGcgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPjxwYXRoIG9wYWNpdHk9XCIuMlwiIGQ9XCJNMTggMTJoMjJ2NEgxOHpNMTggMjJoMjJ2NEgxOHpNMTggMzJoMjJ2NEgxOHpcIi8+PHBhdGggZD1cIk0xNS4xIDE2di0xLjJoMS4zVjE2SDE1Wm0wIDEwdi0xLjJoMS4zVjI2SDE1Wm0wIDEwdi0xLjJoMS4zVjM2SDE1WlwiLz48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIk0xMiAyMWgxLjV2NUgxMnpNMTIgMzFoMS41djVIMTJ6TTkgMjFoMS41djVIOXpNOSAzMWgxLjV2NUg5ek02IDMxaDEuNXY1SDZ6TTEyIDExaDEuNXY1SDEyek0xMiAxOWgxLjV2MUgxMnpNMTIgMjloMS41djFIMTJ6TTkgMTloMS41djFIOXpNOSAyOWgxLjV2MUg5ek02IDI5aDEuNXYxSDZ6TTEyIDloMS41djFIMTJ6XCIvPjwvZz48L3N2Zz4nLFxuICAgICdsaXN0LW51bS11cHBlci1hbHBoYS1ydGwnOiAnPHN2ZyB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHBhdGggb3BhY2l0eT1cIi4yXCIgZD1cIk04IDEyaDIydjRIOHpNOCAyMmgyMnY0SDh6TTggMzJoMjJ2NEg4elwiLz48cGF0aCBkPVwibTM5LjMgMTctLjUtMS40aC0ybC0uNSAxLjRIMzVsMi02aDEuNmwyIDZoLTEuM1ptLTEuNi00LjctLjcgMi4zaDEuNmwtLjgtMi4zWk0zMy40IDE3Yy0uNCAwLS43LS4zLS43LS43IDAtLjQuMy0uNy43LS43LjUgMCAuNy4zLjcuNyAwIC40LS4yLjctLjcuN1ptNC43IDkuOWgtMi43di02SDM4YzEuMiAwIDEuOS42IDEuOSAxLjUgMCAuNi0uNSAxLjItMSAxLjMuNy4xIDEuMy43IDEuMyAxLjUgMCAxLS44IDEuNy0yIDEuN1ptLTEuNC01djEuNWgxYy42IDAgMS0uMyAxLS44IDAtLjQtLjQtLjctMS0uN2gtMVptMCA0aDEuMWMuNyAwIDEuMS0uMyAxLjEtLjggMC0uNi0uNC0uOS0xLjEtLjloLTEuMVYyNlpNMzMgMjcuMWMtLjUgMC0uOC0uMy0uOC0uNyAwLS40LjMtLjcuOC0uNy40IDAgLjcuMy43LjcgMCAuNC0uMy43LS43LjdabTQuOSAxMGMtMS44IDAtMi44LTEuMS0yLjgtMy4xczEtMy4xIDIuOC0zLjFjMS40IDAgMi41LjkgMi42IDIuMmgtMS4zYzAtLjctLjYtMS4xLTEuMy0xLjEtMSAwLTEuNi43LTEuNiAycy42IDIgMS42IDJjLjcgMCAxLjItLjQgMS40LTFoMS4yYy0uMSAxLjMtMS4yIDIuMi0yLjYgMi4yWm0tNC41IDBjLS41IDAtLjgtLjMtLjgtLjcgMC0uNC4zLS43LjgtLjcuNCAwIC43LjMuNy43IDAgLjQtLjMuNy0uNy43WlwiLz48L2c+PC9zdmc+JyxcbiAgICAnbGlzdC1udW0tdXBwZXItYWxwaGEnOiAnPHN2ZyB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHBhdGggb3BhY2l0eT1cIi4yXCIgZD1cIk0xOCAxMmgyMnY0SDE4ek0xOCAyMmgyMnY0SDE4ek0xOCAzMmgyMnY0SDE4elwiLz48cGF0aCBkPVwibTEyLjYgMTctLjUtMS40aC0yTDkuNSAxN0g4LjNsMi02SDEybDIgNmgtMS4zWk0xMSAxMi4zbC0uNyAyLjNoMS42bC0uOC0yLjNabTQuNyA0LjhjLS40IDAtLjctLjMtLjctLjcgMC0uNC4zLS43LjctLjcuNSAwIC43LjMuNy43IDAgLjQtLjIuNy0uNy43Wk0xMS40IDI3SDguN3YtNmgyLjZjMS4yIDAgMS45LjYgMS45IDEuNSAwIC42LS41IDEuMi0xIDEuMy43LjEgMS4zLjcgMS4zIDEuNSAwIDEtLjggMS43LTIgMS43Wk0xMCAyMnYxLjVoMWMuNiAwIDEtLjMgMS0uOCAwLS40LS40LS43LTEtLjdoLTFabTAgNEgxMWMuNyAwIDEuMS0uMyAxLjEtLjggMC0uNi0uNC0uOS0xLjEtLjlIMTBWMjZabTUuNCAxLjFjLS41IDAtLjgtLjMtLjgtLjcgMC0uNC4zLS43LjgtLjcuNCAwIC43LjMuNy43IDAgLjQtLjMuNy0uNy43Wm0tNC4xIDEwYy0xLjggMC0yLjgtMS4xLTIuOC0zLjFzMS0zLjEgMi44LTMuMWMxLjQgMCAyLjUuOSAyLjYgMi4yaC0xLjNjMC0uNy0uNi0xLjEtMS4zLTEuMS0xIDAtMS42LjctMS42IDJzLjYgMiAxLjYgMmMuNyAwIDEuMi0uNCAxLjQtMWgxLjJjLS4xIDEuMy0xLjIgMi4yLTIuNiAyLjJabTQuNSAwYy0uNSAwLS44LS4zLS44LS43IDAtLjQuMy0uNy44LS43LjQgMCAuNy4zLjcuNyAwIC40LS4zLjctLjcuN1pcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ2xpc3QtbnVtLXVwcGVyLXJvbWFuLXJ0bCc6ICc8c3ZnIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiPjxnIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBvcGFjaXR5PVwiLjJcIiBkPVwiTTggMTJoMjJ2NEg4ek04IDIyaDIydjRIOHpNOCAzMmgyMnY0SDh6XCIvPjxwYXRoIGQ9XCJNMzEuNiAxN3YtMS4ySDMzVjE3aC0xLjNabTAgMTB2LTEuMkgzM1YyN2gtMS4zWm0wIDEwdi0xLjJIMzNWMzdoLTEuM1pcIi8+PHBhdGggZmlsbC1ydWxlPVwibm9uemVyb1wiIGQ9XCJNMzQuNSAyMEgzNnY3aC0xLjV6TTM0LjUgMzBIMzZ2N2gtMS41ek0zNy41IDIwSDM5djdoLTEuNXpNMzcuNSAzMEgzOXY3aC0xLjV6TTQwLjUgMzBINDJ2N2gtMS41ek0zNC41IDEwSDM2djdoLTEuNXpcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ2xpc3QtbnVtLXVwcGVyLXJvbWFuJzogJzxzdmcgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCI+PGcgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPjxwYXRoIG9wYWNpdHk9XCIuMlwiIGQ9XCJNMTggMTJoMjJ2NEgxOHpNMTggMjJoMjJ2NEgxOHpNMTggMzJoMjJ2NEgxOHpcIi8+PHBhdGggZD1cIk0xNS4xIDE3di0xLjJoMS4zVjE3SDE1Wm0wIDEwdi0xLjJoMS4zVjI3SDE1Wm0wIDEwdi0xLjJoMS4zVjM3SDE1WlwiLz48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIk0xMiAyMGgxLjV2N0gxMnpNMTIgMzBoMS41djdIMTJ6TTkgMjBoMS41djdIOXpNOSAzMGgxLjV2N0g5ek02IDMwaDEuNXY3SDZ6TTEyIDEwaDEuNXY3SDEyelwiLz48L2c+PC9zdmc+JyxcbiAgICAnbG9jayc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTYuMyAxMWMuMiAwIC4zIDAgLjUuMmwuMi42djcuNGMwIC4zIDAgLjQtLjIuNmwtLjYuMkg3LjhjLS4zIDAtLjQgMC0uNi0uMmEuNy43IDAgMCAxLS4yLS42di03LjRjMC0uMyAwLS40LjItLjZsLjUtLjJIOFY4YzAtLjguMy0xLjUuOS0yLjEuNi0uNiAxLjMtLjkgMi4xLS45aDJjLjggMCAxLjUuMyAyLjEuOS42LjYuOSAxLjMuOSAyLjF2M2guM1pNMTAgOHYzaDRWOGExIDEgMCAwIDAtLjMtLjdBMSAxIDAgMCAwIDEzIDdoLTJhMSAxIDAgMCAwLS43LjMgMSAxIDAgMCAwLS4zLjdaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdsdHInOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTExIDVoN2ExIDEgMCAwIDEgMCAyaC0xdjExYTEgMSAwIDAgMS0yIDBWN2gtMnYxMWExIDEgMCAwIDEtMiAwdi02Yy0uNSAwLTEgMC0xLjQtLjNBMy40IDMuNCAwIDAgMSA3LjggMTBhMy4zIDMuMyAwIDAgMSAwLTIuOCAzLjQgMy40IDAgMCAxIDEuOC0xLjhMMTEgNVpNNC40IDE2LjIgNi4yIDE1bC0xLjgtMS4yYTEgMSAwIDAgMSAxLjItMS42bDMgMmExIDEgMCAwIDEgMCAxLjZsLTMgMmExIDEgMCAxIDEtMS4yLTEuNlpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ21pbnVzJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xOSAxMWExIDEgMCAwIDEgLjEgMkg1YTEgMSAwIDAgMS0uMS0ySDE5WlwiLz48L3N2Zz4nLFxuICAgICdtb3JlLWRyYXdlcic6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNNiAxMGEyIDIgMCAwIDAtMiAyYzAgMS4xLjkgMiAyIDJhMiAyIDAgMCAwIDItMiAyIDIgMCAwIDAtMi0yWm0xMiAwYTIgMiAwIDAgMC0yIDJjMCAxLjEuOSAyIDIgMmEyIDIgMCAwIDAgMi0yIDIgMiAwIDAgMC0yLTJabS02IDBhMiAyIDAgMCAwLTIgMmMwIDEuMS45IDIgMiAyYTIgMiAwIDAgMCAyLTIgMiAyIDAgMCAwLTItMlpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ25ldy1kb2N1bWVudCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTQuNCAzSDdhMiAyIDAgMCAwLTIgMnYxNGMwIDEuMS45IDIgMiAyaDEwYTIgMiAwIDAgMCAyLTJWNy42TDE0LjQgM1pNMTcgMTlIN1Y1aDZ2NGg0djEwWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnbmV3LXRhYic6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJtMTUgMTMgMi0ydjhINVY3aDhsLTIgMkg3djhoOHYtNFptNC04djUuNWwtMi0yLTUuNiA1LjVIMTB2LTEuNEwxNS41IDdsLTItMkgxOVpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ25vbi1icmVha2luZyc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTEgMTFIOGExIDEgMCAxIDEgMC0yaDNWNmMwLS42LjQtMSAxLTFzMSAuNCAxIDF2M2gzYy42IDAgMSAuNCAxIDFzLS40IDEtMSAxaC0zdjNjMCAuNi0uNCAxLTEgMWExIDEgMCAwIDEtMS0xdi0zWm0xMCA0djVIM3YtNWMwLS42LjQtMSAxLTFzMSAuNCAxIDF2M2gxNHYtM2MwLS42LjQtMSAxLTFzMSAuNCAxIDFaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdub3RpY2UnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE1LjUgNCAyMCA4LjV2N0wxNS41IDIwaC03TDQgMTUuNXYtN0w4LjUgNGg3Wk0xMyAxN3YtMmgtMnYyaDJabTAtNFY3aC0ydjZoMlpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdvcmRlcmVkLWxpc3QtcnRsJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk02IDE3aDhhMSAxIDAgMCAxIDAgMkg2YTEgMSAwIDAgMSAwLTJabTAtNmg4YTEgMSAwIDAgMSAwIDJINmExIDEgMCAwIDEgMC0yWm0wLTZoOGExIDEgMCAwIDEgMCAySDZhMSAxIDAgMSAxIDAtMlptMTMtMXYzLjVhLjUuNSAwIDEgMS0xIDBWNWgtLjVhLjUuNSAwIDEgMSAwLTFIMTlabS0xIDguOC4yLjJoMS4zYS41LjUgMCAxIDEgMCAxaC0xLjZhMSAxIDAgMCAxLS45LTFWMTNjMC0uNC4zLS44LjYtMWwxLjItLjQuMi0uM2EuMi4yIDAgMCAwLS4yLS4yaC0xLjNhLjUuNSAwIDAgMS0uNS0uNWMwLS4zLjItLjUuNS0uNWgxLjZjLjUgMCAuOS40LjkgMXYuMWMwIC40LS4zLjgtLjYgMWwtMS4yLjQtLjIuM1ptMiA0LjJ2MmMwIC42LS40IDEtMSAxaC0xLjVhLjUuNSAwIDAgMSAwLTFoMS4yYS4zLjMgMCAxIDAgMC0uNmgtMS4zYS40LjQgMCAxIDEgMC0uOGgxLjNhLjMuMyAwIDAgMCAwLS42aC0xLjJhLjUuNSAwIDEgMSAwLTFIMTljLjYgMCAxIC40IDEgMVpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ29yZGVyZWQtbGlzdCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTAgMTdoOGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMWgtOGExIDEgMCAwIDEgMC0yWm0wLTZoOGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMWgtOGExIDEgMCAwIDEgMC0yWm0wLTZoOGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMWgtOGExIDEgMCAxIDEgMC0yWk02IDR2My41YzAgLjMtLjIuNS0uNS41YS41LjUgMCAwIDEtLjUtLjVWNWgtLjVhLjUuNSAwIDAgMSAwLTFINlptLTEgOC44LjIuMmgxLjNjLjMgMCAuNS4yLjUuNXMtLjIuNS0uNS41SDQuOWExIDEgMCAwIDEtLjktMVYxM2MwLS40LjMtLjguNi0xbDEuMi0uNC4yLS4zYS4yLjIgMCAwIDAtLjItLjJINC41YS41LjUgMCAwIDEtLjUtLjVjMC0uMy4yLS41LjUtLjVoMS42Yy41IDAgLjkuNC45IDF2LjFjMCAuNC0uMy44LS42IDFsLTEuMi40LS4yLjNaTTcgMTd2MmMwIC42LS40IDEtMSAxSDQuNWEuNS41IDAgMCAxIDAtMWgxLjJjLjIgMCAuMy0uMS4zLS4zIDAtLjItLjEtLjMtLjMtLjNINC40YS40LjQgMCAxIDEgMC0uOGgxLjNjLjIgMCAuMy0uMS4zLS4zIDAtLjItLjEtLjMtLjMtLjNINC41YS41LjUgMCAxIDEgMC0xSDZjLjYgMCAxIC40IDEgMVpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ29yaWVudGF0aW9uJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk03LjMgNi40IDEgMTNsNi40IDYuNSA2LjUtNi41LTYuNS02LjVaTTMuNyAxM2wzLjYtMy43TDExIDEzbC0zLjcgMy43LTMuNi0zLjdaTTEyIDZsMi44IDIuN2MuMy4zLjMuOCAwIDEtLjMuNC0uOS40LTEuMiAwTDkuMiA1LjdhLjguOCAwIDAgMSAwLTEuMkwxMy42LjJjLjMtLjMuOS0uMyAxLjIgMCAuMy4zLjMuOCAwIDEuMUwxMiA0aDFhOSA5IDAgMSAxLTQuMyAxNi45bDEuNS0xLjVBNyA3IDAgMSAwIDEzIDZoLTFaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdvdXRkZW50JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk03IDVoMTJjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFIN2ExIDEgMCAxIDEgMC0yWm01IDRoN2MuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMWgtN2ExIDEgMCAwIDEgMC0yWm0wIDRoN2MuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMWgtN2ExIDEgMCAwIDEgMC0yWm0tNSA0aDEyYTEgMSAwIDAgMSAwIDJIN2ExIDEgMCAwIDEgMC0yWm0xLjYtMy44YTEgMSAwIDAgMS0xLjIgMS42bC0zLTJhMSAxIDAgMCAxIDAtMS42bDMtMmExIDEgMCAwIDEgMS4yIDEuNkw2LjggMTJsMS44IDEuMlpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ3BhZ2UtYnJlYWsnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHBhdGggZD1cIk01IDExYy42IDAgMSAuNCAxIDFzLS40IDEtMSAxYTEgMSAwIDAgMSAwLTJabTMgMGgxYy42IDAgMSAuNCAxIDFzLS40IDEtMSAxSDhhMSAxIDAgMCAxIDAtMlptNCAwYy42IDAgMSAuNCAxIDFzLS40IDEtMSAxYTEgMSAwIDAgMSAwLTJabTMgMGgxYy42IDAgMSAuNCAxIDFzLS40IDEtMSAxaC0xYTEgMSAwIDAgMSAwLTJabTQgMGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMWExIDEgMCAwIDEgMC0yWk03IDN2NWgxMFYzYzAtLjYuNC0xIDEtMXMxIC40IDEgMXY3SDVWM2MwLS42LjQtMSAxLTFzMSAuNCAxIDFaTTYgMjJhMSAxIDAgMCAxLTEtMXYtN2gxNHY3YzAgLjYtLjQgMS0xIDFhMSAxIDAgMCAxLTEtMXYtNUg3djVjMCAuNi0uNCAxLTEgMVpcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ3BhcmFncmFwaCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTEwIDVoN2ExIDEgMCAwIDEgMCAyaC0xdjExYTEgMSAwIDAgMS0yIDBWN2gtMnYxMWExIDEgMCAwIDEtMiAwdi02Yy0uNSAwLTEgMC0xLjQtLjNBMy40IDMuNCAwIDAgMSA2LjggMTBhMy4zIDMuMyAwIDAgMSAwLTIuOCAzLjQgMy40IDAgMCAxIDEuOC0xLjhMMTAgNVpcIi8+PC9zdmc+JyxcbiAgICAncGFzdGUtY29sdW1uLWFmdGVyJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTIgMWEzIDMgMCAwIDEgMi44IDJIMThjMSAwIDIgLjggMiAxLjlWN2gtMlY1aC0ydjFjMCAuNi0uNCAxLTEgMUg5YTEgMSAwIDAgMS0xLTFWNUg2djEzaDd2Mkg2Yy0xIDAtMi0uOC0yLTEuOVY1YzAtMSAuOC0yIDEuOS0ySDkuMkEzIDMgMCAwIDEgMTIgMVptOCA3djEyaC02VjhoNlptLTEuNSAxLjVoLTN2OWgzdi05Wk0xMiAzYTEgMSAwIDEgMCAwIDIgMSAxIDAgMCAwIDAtMlpcIi8+PC9zdmc+JyxcbiAgICAncGFzdGUtY29sdW1uLWJlZm9yZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTEyIDFhMyAzIDAgMCAxIDIuOCAySDE4YzEgMCAyIC44IDIgMS45VjE4YzAgMS0uOCAyLTEuOSAySDExdi0yaDdWNWgtMnYxYzAgLjYtLjQgMS0xIDFIOWExIDEgMCAwIDEtMS0xVjVINnYySDRWNWMwLTEgLjgtMiAxLjktMkg5LjJBMyAzIDAgMCAxIDEyIDFabS0yIDd2MTJINFY4aDZaTTguNSA5LjVoLTN2OWgzdi05Wk0xMiAzYTEgMSAwIDEgMCAwIDIgMSAxIDAgMCAwIDAtMlpcIi8+PC9zdmc+JyxcbiAgICAncGFzdGUtcm93LWFmdGVyJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTIgMWEzIDMgMCAwIDEgMi44IDJIMThjMSAwIDIgLjggMiAxLjlWMTFoLTJWNWgtMnYxYzAgLjYtLjQgMS0xIDFIOWExIDEgMCAwIDEtMS0xVjVINnYxM2gxNGMwIDEtLjggMi0xLjkgMkg2Yy0xIDAtMi0uOC0yLTEuOVY1YzAtMSAuOC0yIDEuOS0ySDkuMkEzIDMgMCAwIDEgMTIgMVptMTAgMTF2NUg4di01aDE0Wm0tMS41IDEuNWgtMTF2MmgxMXYtMlpNMTIgM2ExIDEgMCAxIDAgMCAyIDEgMSAwIDAgMCAwLTJaXCIvPjwvc3ZnPicsXG4gICAgJ3Bhc3RlLXJvdy1iZWZvcmUnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xMiAxYTMgMyAwIDAgMSAyLjggMkgxOGMxIDAgMiAuOCAyIDEuOVY3aC0yVjVoLTJ2MWMwIC42LS40IDEtMSAxSDlhMSAxIDAgMCAxLTEtMVY1SDZ2MTNoMTJ2LTRoMnY0YzAgMS0uOCAyLTEuOSAySDZjLTEgMC0yLS44LTItMS45VjVjMC0xIC44LTIgMS45LTJIOS4yQTMgMyAwIDAgMSAxMiAxWm0xMCA3djVIOFY4aDE0Wm0tMS41IDEuNWgtMTF2MmgxMXYtMlpNMTIgM2ExIDEgMCAxIDAgMCAyIDEgMSAwIDAgMCAwLTJaXCIvPjwvc3ZnPicsXG4gICAgJ3Bhc3RlLXRleHQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE4IDlWNWgtMnYxYzAgLjYtLjQgMS0xIDFIOWExIDEgMCAwIDEtMS0xVjVINnYxM2gzVjloOVpNOSAyMEg2YTIgMiAwIDAgMS0yLTJWNWMwLTEuMS45LTIgMi0yaDMuMkEzIDMgMCAwIDEgMTIgMWEzIDMgMCAwIDEgMi44IDJIMThhMiAyIDAgMCAxIDIgMnY0aDF2MTJIOXYtMVptMS41LTkuNXY5aDl2LTloLTlaTTEyIDNhMSAxIDAgMCAwLTEgMWMwIC41LjQgMSAxIDFzMS0uNSAxLTEtLjQtMS0xLTFabTAgOWg2djJoLS41bC0uNS0xaC0xdjRoLjh2MWgtMy42di0xaC44di00aC0xbC0uNSAxSDEydi0yWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAncGFzdGUnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE4IDlWNWgtMnYxYzAgLjYtLjQgMS0xIDFIOWExIDEgMCAwIDEtMS0xVjVINnYxM2gzVjloOVpNOSAyMEg2YTIgMiAwIDAgMS0yLTJWNWMwLTEuMS45LTIgMi0yaDMuMkEzIDMgMCAwIDEgMTIgMWEzIDMgMCAwIDEgMi44IDJIMThhMiAyIDAgMCAxIDIgMnY0aDF2MTJIOXYtMVptMS41LTkuNXY5aDl2LTloLTlaTTEyIDNhMSAxIDAgMCAwLTEgMWMwIC41LjQgMSAxIDFzMS0uNSAxLTEtLjQtMS0xLTFaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdwZXJtYW5lbnQtcGVuJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xMC41IDE3LjUgOCAyMEgzdi0zbDMuNS0zLjVhMiAyIDAgMCAxIDAtM0wxNCAzbDEgMS03LjMgNy4zYTEgMSAwIDAgMCAwIDEuNGwzLjYgMy42Yy40LjQgMSAuNCAxLjQgMEwyMCA5bDEgMS03LjYgNy42YTIgMiAwIDAgMS0yLjggMGwtLjEtLjFaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdwbHVzJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xMiA0Yy41IDAgMSAuNCAxIC45VjExaDZhMSAxIDAgMCAxIC4xIDJIMTN2NmExIDEgMCAwIDEtMiAuMVYxM0g1YTEgMSAwIDAgMS0uMS0ySDExVjVjMC0uNi40LTEgMS0xWlwiLz48L3N2Zz4nLFxuICAgICdwcmVmZXJlbmNlcyc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJtMjAuMSAxMy41LTEuOS4yYTUuOCA1LjggMCAwIDEtLjYgMS41bDEuMiAxLjVjLjQuNC4zIDEgMCAxLjRsLS43LjdhMSAxIDAgMCAxLTEuNCAwbC0xLjUtMS4yYTYuMiA2LjIgMCAwIDEtMS41LjZsLS4yIDEuOWMwIC41LS41LjktMSAuOWgtMWExIDEgMCAwIDEtMS0uOWwtLjItMS45YTUuOCA1LjggMCAwIDEtMS41LS42bC0xLjUgMS4yYTEgMSAwIDAgMS0xLjQgMGwtLjctLjdhMSAxIDAgMCAxIDAtMS40bDEuMi0xLjVhNi4yIDYuMiAwIDAgMS0uNi0xLjVsLTEuOS0uMmExIDEgMCAwIDEtLjktMXYtMWMwLS41LjQtMSAuOS0xbDEuOS0uMmE1LjggNS44IDAgMCAxIC42LTEuNUw1LjIgNy4zYTEgMSAwIDAgMSAwLTEuNGwuNy0uN2ExIDEgMCAwIDEgMS40IDBsMS41IDEuMmE2LjIgNi4yIDAgMCAxIDEuNS0uNmwuMi0xLjljMC0uNS41LS45IDEtLjloMWMuNSAwIDEgLjQgMSAuOWwuMiAxLjlhNS44IDUuOCAwIDAgMSAxLjUuNmwxLjUtMS4yYTEgMSAwIDAgMSAxLjQgMGwuNy43Yy4zLjQuNCAxIDAgMS40bC0xLjIgMS41YTYuMiA2LjIgMCAwIDEgLjYgMS41bDEuOS4yYy41IDAgLjkuNS45IDF2MWMwIC41LS40IDEtLjkgMVpNMTIgMTVhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2WlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAncHJldmlldyc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMy41IDEyLjVjLjUuOCAxLjEgMS42IDEuOCAyLjMgMiAyIDQuMiAzLjIgNi43IDMuMnM0LjctMS4yIDYuNy0zLjJhMTYuMiAxNi4yIDAgMCAwIDIuMS0yLjggMTUuNyAxNS43IDAgMCAwLTIuMS0yLjhjLTItMi00LjItMy4yLTYuNy0zLjJhOS4zIDkuMyAwIDAgMC02LjcgMy4yQTE2LjIgMTYuMiAwIDAgMCAzLjIgMTJjMCAuMi4yLjMuMy41Wm0tMi40LTEgLjctMS4yTDQgNy44QzYuMiA1LjQgOC45IDQgMTIgNGMzIDAgNS44IDEuNCA4LjEgMy44YTE4LjIgMTguMiAwIDAgMSAyLjggMy43djFsLS43IDEuMi0yLjEgMi41Yy0yLjMgMi40LTUgMy44LTguMSAzLjgtMyAwLTUuOC0xLjQtOC4xLTMuOGExOC4yIDE4LjIgMCAwIDEtMi44LTMuNyAxIDEgMCAwIDEgMC0xWm0xMi0zLjNhMiAyIDAgMSAwIDIuNyAyLjYgNCA0IDAgMSAxLTIuNi0yLjZaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdwcmludCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTggOEg2YTMgMyAwIDAgMC0zIDN2NmgydjNoMTR2LTNoMnYtNmEzIDMgMCAwIDAtMy0zWm0tMSAxMEg3di00aDEwdjRabS41LTVjLS44IDAtMS41LS43LTEuNS0xLjVzLjctMS41IDEuNS0xLjUgMS41LjcgMS41IDEuNS0uNyAxLjUtMS41IDEuNVptLjUtOEg2djJoMTJWNVpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ3F1b3RlJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk03LjUgMTdoLjljLjQgMCAuNy0uMi45LS42TDExIDEzVjhjMC0uNi0uNC0xLTEtMUg2YTEgMSAwIDAgMC0xIDF2NGMwIC42LjQgMSAxIDFoMmwtMS4zIDIuN2ExIDEgMCAwIDAgLjggMS4zWm04IDBoLjljLjQgMCAuNy0uMi45LS42TDE5IDEzVjhjMC0uNi0uNC0xLTEtMWgtNGExIDEgMCAwIDAtMSAxdjRjMCAuNi40IDEgMSAxaDJsLTEuMyAyLjdhMSAxIDAgMCAwIC44IDEuM1pcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ3JlZG8nOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE3LjYgMTBIMTJjLTIuOCAwLTQuNCAxLjQtNC45IDMuNS0uNCAyIC4zIDQgMS40IDQuNmExIDEgMCAxIDEtMSAxLjhjLTItMS4yLTIuOS00LjEtMi4zLTYuOC42LTMgMy01LjEgNi44LTUuMWg1LjZsLTMuMy0zLjNhMSAxIDAgMSAxIDEuNC0xLjRsNSA1YTEgMSAwIDAgMSAwIDEuNGwtNSA1YTEgMSAwIDAgMS0xLjQtMS40bDMuMy0zLjNaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICdyZWxvYWQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48ZyBmaWxsLXJ1bGU9XCJub256ZXJvXCI+PHBhdGggZD1cIm01IDIyLjEtMS4yLTQuN3YtLjJhMSAxIDAgMCAxIDEtMWw1IC40YTEgMSAwIDEgMS0uMiAybC0yLjItLjJhNy44IDcuOCAwIDAgMCA4LjQuMiA3LjUgNy41IDAgMCAwIDMuNS02LjQgMSAxIDAgMSAxIDIgMCA5LjUgOS41IDAgMCAxLTQuNSA4IDkuOSA5LjkgMCAwIDEtMTAuMiAwbC40IDEuNGExIDEgMCAxIDEtMiAuNVpNMTMuNiA3LjRjMC0uNS41LTEgMS0uOWwyLjguMmE4IDggMCAwIDAtOS41LTEgNy41IDcuNSAwIDAgMC0zLjYgNyAxIDEgMCAwIDEtMiAwIDkuNSA5LjUgMCAwIDEgNC41LTguNiAxMCAxMCAwIDAgMSAxMC45LjNsLS4zLTFhMSAxIDAgMCAxIDItLjVsMS4xIDQuOGExIDEgMCAwIDEtMSAxLjJsLTUtLjRhMSAxIDAgMCAxLS45LTFaXCIvPjwvZz48L3N2Zz4nLFxuICAgICdyZW1vdmUtZm9ybWF0dGluZyc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTMuMiA2YTEgMSAwIDAgMSAwIC4ybC0yLjYgMTBhMSAxIDAgMCAxLTEgLjhoLS4yYS44LjggMCAwIDEtLjgtMWwyLjYtMTBIOGExIDEgMCAxIDEgMC0yaDlhMSAxIDAgMCAxIDAgMmgtMy44Wk01IDE4aDdhMSAxIDAgMCAxIDAgMkg1YTEgMSAwIDAgMSAwLTJabTEzIDEuNUwxNi41IDE4IDE1IDE5LjVhLjcuNyAwIDAgMS0xLTFsMS41LTEuNS0xLjUtMS41YS43LjcgMCAwIDEgMS0xbDEuNSAxLjUgMS41LTEuNWEuNy43IDAgMCAxIDEgMUwxNy41IDE3bDEuNSAxLjVhLjcuNyAwIDAgMS0xIDFaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdyZW1vdmUnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE2IDdoM2ExIDEgMCAwIDEgMCAyaC0xdjlhMyAzIDAgMCAxLTMgM0g5YTMgMyAwIDAgMS0zLTNWOUg1YTEgMSAwIDEgMSAwLTJoM1Y2YTMgMyAwIDAgMSAzLTNoMmEzIDMgMCAwIDEgMyAzdjFabS0yIDBWNmMwLS42LS40LTEtMS0xaC0yYTEgMSAwIDAgMC0xIDF2MWg0Wm0yIDJIOHY5YzAgLjYuNCAxIDEgMWg2Yy42IDAgMS0uNCAxLTFWOVptLTcgM2ExIDEgMCAwIDEgMiAwdjRhMSAxIDAgMCAxLTIgMHYtNFptNCAwYTEgMSAwIDAgMSAyIDB2NGExIDEgMCAwIDEtMiAwdi00WlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAncmVzaXplLWhhbmRsZSc6ICc8c3ZnIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMFwiPjxnIGZpbGwtcnVsZT1cIm5vbnplcm9cIj48cGF0aCBkPVwiTTguMSAxLjFBLjUuNSAwIDEgMSA5IDJsLTcgN0EuNS41IDAgMSAxIDEgOGw3LTdaTTguMSA1LjFBLjUuNSAwIDEgMSA5IDZsLTMgM0EuNS41IDAgMSAxIDUgOGwzLTNaXCIvPjwvZz48L3N2Zz4nLFxuICAgICdyZXNpemUnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTQgNWMwLS4zLjEtLjUuMy0uNy4yLS4yLjQtLjMuNy0uM2g2Yy4zIDAgLjUuMS43LjMuMi4yLjMuNC4zLjcgMCAuMy0uMS41LS4zLjdhMSAxIDAgMCAxLS43LjNINy40TDE4IDE2LjZWMTNjMC0uMy4xLS41LjMtLjcuMi0uMi40LS4zLjctLjMuMyAwIC41LjEuNy4zLjIuMi4zLjQuMy43djZjMCAuMy0uMS41LS4zLjdhMSAxIDAgMCAxLS43LjNoLTZhMSAxIDAgMCAxLS43LS4zIDEgMSAwIDAgMS0uMy0uN2MwLS4zLjEtLjUuMy0uNy4yLS4yLjQtLjMuNy0uM2gzLjZMNiA3LjRWMTFjMCAuMy0uMS41LS4zLjdhMSAxIDAgMCAxLS43LjMgMSAxIDAgMCAxLS43LS4zQTEgMSAwIDAgMSA0IDExVjVaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdyZXN0b3JlLWRyYWZ0JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PGcgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPjxwYXRoIGQ9XCJNMTcgMTNjMCAuNi0uNCAxLTEgMWgtNFY4YzAtLjYuNC0xIDEtMXMxIC40IDEgMXY0aDJjLjYgMCAxIC40IDEgMVpcIi8+PHBhdGggZD1cIk00LjcgMTBIOWExIDEgMCAwIDEgMCAySDNhMSAxIDAgMCAxLTEtMVY1YTEgMSAwIDEgMSAyIDB2M2wyLjUtMi40YTkuMiA5LjIgMCAwIDEgMTAuOC0xLjVBOSA5IDAgMCAxIDEzLjQgMjFjLTIuNC4xLTQuNy0uNy02LjUtMi4yYTEgMSAwIDEgMSAxLjMtMS41IDcuMiA3LjIgMCAwIDAgMTEuNi0zLjcgNyA3IDAgMCAwLTMuNS03LjdBNy4yIDcuMiAwIDAgMCA4IDdMNC43IDEwWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9nPjwvc3ZnPicsXG4gICAgJ3JvdGF0ZS1sZWZ0JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk00LjcgMTBIOWExIDEgMCAwIDEgMCAySDNhMSAxIDAgMCAxLTEtMVY1YTEgMSAwIDEgMSAyIDB2M2wyLjUtMi40YTkuMiA5LjIgMCAwIDEgMTAuOC0xLjVBOSA5IDAgMCAxIDEzLjQgMjFjLTIuNC4xLTQuNy0uNy02LjUtMi4yYTEgMSAwIDEgMSAxLjMtMS41IDcuMiA3LjIgMCAwIDAgMTEuNi0zLjcgNyA3IDAgMCAwLTMuNS03LjdBNy4yIDcuMiAwIDAgMCA4IDdMNC43IDEwWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAncm90YXRlLXJpZ2h0JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0yMCA4VjVhMSAxIDAgMCAxIDIgMHY2YzAgLjYtLjQgMS0xIDFoLTZhMSAxIDAgMCAxIDAtMmg0LjNMMTYgN0E3LjIgNy4yIDAgMCAwIDcuNyA2YTcgNyAwIDAgMCAzIDEzLjFjMS45LjEgMy43LS41IDUtMS43YTEgMSAwIDAgMSAxLjQgMS41QTkuMiA5LjIgMCAwIDEgMi4yIDE0Yy0uOS0zLjkgMS04IDQuNS05LjkgMy41LTEuOSA4LTEuMyAxMC44IDEuNUwyMCA4WlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAncnRsJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk04IDVoOHYyaC0ydjEyaC0yVjdoLTJ2MTJIOHYtN2MtLjUgMC0xIDAtMS40LS4zQTMuNCAzLjQgMCAwIDEgNC44IDEwYTMuMyAzLjMgMCAwIDEgMC0yLjggMy40IDMuNCAwIDAgMSAxLjgtMS44TDggNVptMTIgMTEuMmExIDEgMCAxIDEtMSAxLjZsLTMtMmExIDEgMCAwIDEgMC0xLjZsMy0yYTEgMSAwIDEgMSAxIDEuNkwxOC40IDE1bDEuOCAxLjJaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdzYXZlJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk01IDE2aDE0YTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtMmMwLTEuMS45LTIgMi0yWm0wIDJ2MmgxNHYtMkg1Wm0xMCAwaDJ2MmgtMnYtMlptLTQtNi40TDguNyA5LjNhMSAxIDAgMSAwLTEuNCAxLjRsNCA0Yy40LjQgMSAuNCAxLjQgMGw0LTRhMSAxIDAgMSAwLTEuNC0xLjRMMTMgMTEuNlY0YTEgMSAwIDAgMC0yIDB2Ny42WlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnc2VhcmNoJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xNiAxNy4zYTggOCAwIDEgMSAxLjQtMS40bDQuMyA0LjRhMSAxIDAgMCAxLTEuNCAxLjRsLTQuNC00LjNabS01LS4zYTYgNiAwIDEgMCAwLTEyIDYgNiAwIDAgMCAwIDEyWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAnc2VsZWN0LWFsbCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMyA1aDJWM2EyIDIgMCAwIDAtMiAyWm0wIDhoMnYtMkgzdjJabTQgOGgydi0ySDd2MlpNMyA5aDJWN0gzdjJabTEwLTZoLTJ2MmgyVjNabTYgMHYyaDJhMiAyIDAgMCAwLTItMlpNNSAyMXYtMkgzYzAgMS4xLjkgMiAyIDJabS0yLTRoMnYtMkgzdjJaTTkgM0g3djJoMlYzWm0yIDE4aDJ2LTJoLTJ2MlptOC04aDJ2LTJoLTJ2MlptMCA4YTIgMiAwIDAgMCAyLTJoLTJ2MlptMC0xMmgyVjdoLTJ2MlptMCA4aDJ2LTJoLTJ2MlptLTQgNGgydi0yaC0ydjJabTAtMTZoMlYzaC0ydjJaTTcgMTdoMTBWN0g3djEwWm0yLThoNnY2SDlWOVpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ3NlbGVjdGVkJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZmlsbC1ydWxlPVwibm9uemVyb1wiIGQ9XCJNNiA0aDEyYTIgMiAwIDAgMSAyIDJ2MTJhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNmMwLTEuMS45LTIgMi0yWm0zLjYgMTAuOUw3IDEyLjNhLjcuNyAwIDAgMC0xIDFMOS42IDE3IDE4IDguNmEuNy43IDAgMCAwIDAtMSAuNy43IDAgMCAwLTEgMGwtNy40IDcuM1pcIi8+PC9zdmc+JyxcbiAgICAnc2VuZCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIm0xMy4zIDIyIDctMTguMy0xOC4zIDdMOSAxNWw0LjMgN1pNMTggNi44bC0uNy0uN0w5LjQgMTRsLjcuN0wxOCA2LjhaXCIvPjwvc3ZnPicsXG4gICAgJ3NldHRpbmdzJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xMSA2aDhjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFoLTh2LjNjMCAuMiAwIC4zLS4yLjVsLS42LjJINy44Yy0uMyAwLS40IDAtLjYtLjJhLjcuNyAwIDAgMS0uMi0uNlY4SDVhMSAxIDAgMSAxIDAtMmgydi0uM2MwLS4yIDAtLjMuMi0uNWwuNS0uMmgyLjVjLjMgMCAuNCAwIC42LjJsLjIuNVY2Wk04IDhoMlY2SDh2MlptOSAyLjh2LjJoMmMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMWgtMnYuM2MwIC4yIDAgLjMtLjIuNWwtLjYuMmgtMi40Yy0uMyAwLS40IDAtLjYtLjJhLjcuNyAwIDAgMS0uMi0uNlYxM0g1YTEgMSAwIDAgMSAwLTJoOHYtLjNjMC0uMiAwLS4zLjItLjVsLjYtLjJoMi40Yy4zIDAgLjQgMCAuNi4ybC4yLjZaTTE0IDEzaDJ2LTJoLTJ2MlptLTMgMi44di4yaDhjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFoLTh2LjNjMCAuMiAwIC4zLS4yLjVsLS42LjJINy44Yy0uMyAwLS40IDAtLjYtLjJhLjcuNyAwIDAgMS0uMi0uNlYxOEg1YTEgMSAwIDAgMSAwLTJoMnYtLjNjMC0uMiAwLS4zLjItLjVsLjUtLjJoMi41Yy4zIDAgLjQgMCAuNi4ybC4yLjZaTTggMThoMnYtMkg4djJaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdzaGFycGVuJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIm0xNiA2IDQgNC04IDktOC05IDQtNGg4Wm0tNCAxMC4yIDUuNS02LjItLjEtLjFIMTJ2LS4zaDUuMWwtLjItLjJIMTJWOWg0LjZsLS4yLS4ySDEydi0uM2g0LjFsLS4yLS4ySDEyVjhoMy42bC0uMi0uMkg4LjdMNi41IDEwbC4xLjFIMTJ2LjNINi45bC4yLjJIMTJ2LjNINy4zbC4yLjJIMTJ2LjNINy43bC4zLjJoNHYuM0g4LjJsLjIuMkgxMnYuM0g4LjZsLjMuMkgxMnYuM0g5bC4zLjJIMTJ2LjNIOS41bC4yLjJIMTJ2LjNoLTJsLjIuMkgxMnYuM2gtMS42bC4yLjJIMTJ2LjNoLTEuMWwuMi4yaC45di4zaC0uN2wuMi4yaC41di4zaC0uM2wuMy4yWlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnc291cmNlY29kZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxnIGZpbGwtcnVsZT1cIm5vbnplcm9cIj48cGF0aCBkPVwiTTkuOCAxNS43Yy4zLjMuMy44IDAgMS0uMy40LS45LjQtMS4yIDBsLTQuNC00LjFhLjguOCAwIDAgMSAwLTEuMmw0LjQtNC4yYy4zLS4zLjktLjMgMS4yIDAgLjMuMy4zLjggMCAxLjFMNiAxMmwzLjggMy43Wk0xNC4yIDE1LjdjLS4zLjMtLjMuOCAwIDEgLjQuNC45LjQgMS4yIDBsNC40LTQuMWMuMy0uMy4zLS45IDAtMS4ybC00LjQtNC4yYS44LjggMCAwIDAtMS4yIDBjLS4zLjMtLjMuOCAwIDEuMUwxOCAxMmwtMy44IDMuN1pcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ3NwZWxsLWNoZWNrJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk02IDh2M0g1VjVjMC0uMy4xLS41LjMtLjcuMi0uMi40LS4zLjctLjNoMmMuMyAwIC41LjEuNy4zLjIuMi4zLjQuMy43djZIOFY4SDZabTAtM3YyaDJWNUg2Wm0xMyAwaC0zdjVoM3YxaC0zYTEgMSAwIDAgMS0uNy0uMyAxIDEgMCAwIDEtLjMtLjdWNWMwLS4zLjEtLjUuMy0uNy4yLS4yLjQtLjMuNy0uM2gzdjFabS01IDEuNS0uMS43Yy0uMS4yLS4zLjMtLjYuMy4zIDAgLjUuMS42LjNsLjEuN1YxMGMwIC4zLS4xLjUtLjMuN2ExIDEgMCAwIDEtLjcuM2gtM1Y0aDNjLjMgMCAuNS4xLjcuMy4yLjIuMy40LjMuN3YxLjVaTTEzIDEwVjhoLTJ2MmgyWm0wLTNWNWgtMnYyaDJabTMgNSAxIDEtNi41IDdMNyAxNS41bDEuMy0xIDIuMiAyLjJMMTYgMTJaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICdzdHJpa2UtdGhyb3VnaCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxnIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBkPVwiTTE1LjYgOC41Yy0uNS0uNy0xLTEuMS0xLjMtMS4zLS42LS40LTEuMy0uNi0yLS42LTIuNyAwLTIuOCAxLjctMi44IDIuMSAwIDEuNiAxLjggMiAzLjIgMi4zIDQuNC45IDQuNiAyLjggNC42IDMuOSAwIDEuNC0uNyA0LjEtNSA0LjFBNi4yIDYuMiAwIDAgMSA3IDE2LjRsMS41LTEuMWMuNC42IDEuNiAyIDMuNyAyIDEuNiAwIDIuNS0uNCAzLTEuMi40LS44LjMtMi0uOC0yLjYtLjctLjQtMS42LS43LTIuOS0xLTEtLjItMy45LS44LTMuOS0zLjZDNy42IDYgMTAuMyA1IDEyLjQgNWMyLjkgMCA0LjIgMS42IDQuNyAyLjRsLTEuNSAxLjFaXCIvPjxwYXRoIGQ9XCJNNSAxMWgxNGExIDEgMCAwIDEgMCAySDVhMSAxIDAgMCAxIDAtMlpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvZz48L3N2Zz4nLFxuICAgICdzdWJzY3JpcHQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwibTEwLjQgMTAgNC42IDQuNi0xLjQgMS40TDkgMTEuNCA0LjQgMTYgMyAxNC42IDcuNiAxMCAzIDUuNCA0LjQgNCA5IDguNiAxMy42IDQgMTUgNS40IDEwLjQgMTBaTTIxIDE5aC01di0xbDEtLjggMS43LTEuNmMuMy0uNC41LS44LjUtMS4yIDAtLjMgMC0uNi0uMi0uNy0uMi0uMi0uNS0uMy0uOS0uM2EyIDIgMCAwIDAtLjguMmwtLjcuMy0uNC0xLjEgMS0uNiAxLjItLjJjLjggMCAxLjQuMyAxLjguNy40LjQuNi45LjYgMS41cy0uMiAxLjEtLjUgMS42YTggOCAwIDAgMS0xLjMgMS4zbC0uNi42aDIuNlYxOVpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ3N1cGVyc2NyaXB0JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xNSA5LjQgMTAuNCAxNGw0LjYgNC42LTEuNCAxLjRMOSAxNS40IDQuNCAyMCAzIDE4LjYgNy42IDE0IDMgOS40IDQuNCA4IDkgMTIuNiAxMy42IDggMTUgOS40Wm01LjkgMS42aC01di0xbDEtLjggMS43LTEuNmMuMy0uNS41LS45LjUtMS4zIDAtLjMgMC0uNS0uMi0uNy0uMi0uMi0uNS0uMy0uOS0uM2wtLjguMi0uNy40LS40LTEuMmMuMi0uMi41LS40IDEtLjUuMy0uMi44LS4yIDEuMi0uMi44IDAgMS40LjIgMS44LjYuNC40LjYgMSAuNiAxLjYgMCAuNS0uMiAxLS41IDEuNWwtMS4zIDEuNC0uNi41aDIuNlYxMVpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ3RhYmxlLWNhcHRpb24nOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48ZyBmaWxsLXJ1bGU9XCJub256ZXJvXCI+PHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiM1wiIHk9XCI0XCIgcng9XCIxXCIvPjxwYXRoIGQ9XCJNMTkgOGEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LThjMC0xLjEuOS0yIDItMmgxNFpNNSAxNXYzaDZ2LTNINVptMTQgMGgtNnYzaDZ2LTNabTAtNWgtNnYzaDZ2LTNaTTUgMTNoNnYtM0g1djNaXCIvPjwvZz48L3N2Zz4nLFxuICAgICd0YWJsZS1jZWxsLWNsYXNzZXMnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHBhdGggZmlsbC1ydWxlPVwibm9uemVyb1wiIGQ9XCJNMTMgNHY5SDNWNmMwLTEuMS45LTIgMi0yaDhabS0yIDJINXY1aDZWNlpcIi8+PHBhdGggZmlsbC1ydWxlPVwibm9uemVyb1wiIGQ9XCJNMTMgNGg2YTIgMiAwIDAgMSAyIDJ2N2gtOHYtMmg2VjZoLTZWNFpcIiBvcGFjaXR5PVwiLjJcIi8+PHBhdGggZD1cIm0xOCAyMC0yLjYgMS42LjctMy0yLjQtMiAzLjEtLjIgMS4yLTIuOSAxLjIgMi45IDMuMS4yLTIuNCAyIC43IDN6XCIvPjxwYXRoIGZpbGwtcnVsZT1cIm5vbnplcm9cIiBkPVwiTTMgMTN2NWMwIDEuMS45IDIgMiAyaDh2LTdoLTJ2NUg1di01SDNaXCIgb3BhY2l0eT1cIi4yXCIvPjwvZz48L3N2Zz4nLFxuICAgICd0YWJsZS1jZWxsLXByb3BlcnRpZXMnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIk0xOSA0YTIgMiAwIDAgMSAyIDJ2MTJhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNmMwLTEuMS45LTIgMi0yaDE0Wm0tOCA5SDV2NWg2di01Wm04IDBoLTZ2NWg2di01Wm0tOC03SDV2NWg2VjZaXCIvPjwvc3ZnPicsXG4gICAgJ3RhYmxlLWNlbGwtc2VsZWN0LWFsbCc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxnIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIk0xOSA0YTIgMiAwIDAgMSAyIDJ2MTJhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNmMwLTEuMS45LTIgMi0yaDE0Wm0wIDJINXYxMmgxNFY2WlwiLz48cGF0aCBkPVwiTTEzIDZ2NWg2djJoLTZ2NWgtMnYtNUg1di0yaDZWNmgyWlwiIG9wYWNpdHk9XCIuMlwiLz48L2c+PC9zdmc+JyxcbiAgICAndGFibGUtY2VsbC1zZWxlY3QtaW5uZXInOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHBhdGggZmlsbC1ydWxlPVwibm9uemVyb1wiIGQ9XCJNMTkgNGEyIDIgMCAwIDEgMiAydjEyYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjZjMC0xLjEuOS0yIDItMmgxNFptMCAySDV2MTJoMTRWNlpcIiBvcGFjaXR5PVwiLjJcIi8+PHBhdGggZD1cIk0xMyA2djVoNnYyaC02djVoLTJ2LTVINXYtMmg2VjZoMlpcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ3RhYmxlLWNsYXNzZXMnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHBhdGggZmlsbC1ydWxlPVwibm9uemVyb1wiIGQ9XCJNMTkgNGEyIDIgMCAwIDEgMiAydjdoLTh2N0g1YTIgMiAwIDAgMS0yLTJWNmMwLTEuMS45LTIgMi0yaDE0Wm0tOCA5SDV2NWg2di01Wm04LTdoLTZ2NWg2VjZabS04IDBINXY1aDZWNlpcIi8+PHBhdGggZD1cIm0xOCAyMC0yLjYgMS42LjctMy0yLjQtMiAzLjEtLjIgMS4yLTIuOSAxLjIgMi45IDMuMS4yLTIuNCAyIC43IDN6XCIvPjwvZz48L3N2Zz4nLFxuICAgICd0YWJsZS1kZWxldGUtY29sdW1uJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZmlsbC1ydWxlPVwibm9uemVyb1wiIGQ9XCJNMTkgNGEyIDIgMCAwIDEgMiAydjEyYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjZjMC0xLjEuOS0yIDItMmgxNFptLTQgNGgtMlY2aC0ydjJIOVY2SDV2MTJoNHYtMmgydjJoMnYtMmgydjJoNFY2aC00djJabS4zLjUgMSAxLjItMyAyLjMgMyAyLjMtMSAxLjJMMTIgMTNsLTMuMyAyLjYtMS0xLjIgMy0yLjMtMy0yLjMgMS0xLjJMMTIgMTFsMy4zLTIuNVpcIi8+PC9zdmc+JyxcbiAgICAndGFibGUtZGVsZXRlLXJvdyc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGZpbGwtcnVsZT1cIm5vbnplcm9cIiBkPVwiTTE5IDRhMiAyIDAgMCAxIDIgMnYxMmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY2YzAtMS4xLjktMiAyLTJoMTRabTAgMkg1djNoMi41djJINXYyaDIuNXYySDV2M2gxNHYtM2gtMi41di0ySDE5di0yaC0yLjVWOUgxOVY2Wm0tNC43IDEuOCAxLjIgMUwxMyAxMmwyLjYgMy4zLTEuMiAxLTIuMy0zLTIuMyAzLTEuMi0xTDExIDEyIDguNSA4LjdsMS4yLTEgMi4zIDMgMi4zLTNaXCIvPjwvc3ZnPicsXG4gICAgJ3RhYmxlLWRlbGV0ZS10YWJsZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxnIGZpbGwtcnVsZT1cIm5vbnplcm9cIj48cGF0aCBkPVwiTTE5IDRhMiAyIDAgMCAxIDIgMnYxMmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY2YzAtMS4xLjktMiAyLTJoMTRaTTUgNnYxMmgxNFY2SDVaXCIvPjxwYXRoIGQ9XCJtMTQuNCA4LjYgMS4xIDEtMi40IDIuNCAyLjQgMi40LTEuMSAxLjEtMi40LTIuNC0yLjQgMi40LTEtMS4xIDIuMy0yLjQtMi4zLTIuNCAxLTEgMi40IDIuM3pcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ3RhYmxlLWluc2VydC1jb2x1bW4tYWZ0ZXInOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIk0yMCA0Yy42IDAgMSAuNCAxIDF2MmExIDEgMCAwIDEtMiAwVjZoLTh2MTJoOHYtMWExIDEgMCAwIDEgMiAwdjJjMCAuNS0uNCAxLS45IDFINWEyIDIgMCAwIDEtMi0yVjZjMC0xLjEuOS0yIDItMmgxNVpNOSAxM0g1djVoNHYtNVptNy01Yy41IDAgMSAuNCAxIC45VjExaDJhMSAxIDAgMCAxIC4xIDJIMTd2MmExIDEgMCAwIDEtMiAuMVYxM2gtMmExIDEgMCAwIDEtLjEtMkgxNVY5YzAtLjYuNC0xIDEtMVpNOSA2SDV2NWg0VjZaXCIvPjwvc3ZnPicsXG4gICAgJ3RhYmxlLWluc2VydC1jb2x1bW4tYmVmb3JlJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZmlsbC1ydWxlPVwibm9uemVyb1wiIGQ9XCJNMTkgNGEyIDIgMCAwIDEgMiAydjEyYTIgMiAwIDAgMS0yIDJINGExIDEgMCAwIDEtMS0xdi0yYTEgMSAwIDAgMSAyIDB2MWg4VjZINXYxYTEgMSAwIDEgMS0yIDBWNWMwLS42LjQtMSAxLTFoMTVabTAgOWgtNHY1aDR2LTVaTTggOGMuNSAwIDEgLjQgMSAuOVYxMWgyYTEgMSAwIDAgMSAuMSAySDl2MmExIDEgMCAwIDEtMiAuMVYxM0g1YTEgMSAwIDAgMS0uMS0ySDdWOWMwLS42LjQtMSAxLTFabTExLTJoLTR2NWg0VjZaXCIvPjwvc3ZnPicsXG4gICAgJ3RhYmxlLWluc2VydC1yb3ctYWJvdmUnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIk02IDRhMSAxIDAgMSAxIDAgMkg1djZoMTRWNmgtMWExIDEgMCAwIDEgMC0yaDJjLjYgMCAxIC40IDEgMXYxM2EyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YzAtLjYuNC0xIDEtMWgyWm01IDEwSDV2NGg2di00Wm04IDBoLTZ2NGg2di00Wk0xMiAzYy41IDAgMSAuNCAxIC45VjZoMmExIDEgMCAwIDEgMCAyaC0ydjJhMSAxIDAgMCAxLTIgLjFWOEg5YTEgMSAwIDAgMSAwLTJoMlY0YzAtLjYuNC0xIDEtMVpcIi8+PC9zdmc+JyxcbiAgICAndGFibGUtaW5zZXJ0LXJvdy1hZnRlcic6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGZpbGwtcnVsZT1cIm5vbnplcm9cIiBkPVwiTTEyIDEzYy41IDAgMSAuNCAxIC45VjE2aDJhMSAxIDAgMCAxIC4xIDJIMTN2MmExIDEgMCAwIDEtMiAuMVYxOEg5YTEgMSAwIDAgMS0uMS0ySDExdi0yYzAtLjYuNC0xIDEtMVptNiA3YTEgMSAwIDAgMSAwLTJoMXYtNkg1djZoMWExIDEgMCAwIDEgMCAySDRhMSAxIDAgMCAxLTEtMVY2YzAtMS4xLjktMiAyLTJoMTRhMiAyIDAgMCAxIDIgMnYxM2MwIC41LS40IDEtLjkgMUgxOFpNMTEgNkg1djRoNlY2Wm04IDBoLTZ2NGg2VjZaXCIvPjwvc3ZnPicsXG4gICAgJ3RhYmxlLWxlZnQtaGVhZGVyJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xOSA0YTIgMiAwIDAgMSAyIDJ2MTJhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNmMwLTEuMS45LTIgMi0yaDE0Wm0wIDloLTR2NWg0di01Wm0tNiAwSDl2NWg0di01Wm0wLTdIOXY1aDRWNlptNiAwaC00djVoNFY2WlwiLz48L3N2Zz4nLFxuICAgICd0YWJsZS1tZXJnZS1jZWxscyc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGZpbGwtcnVsZT1cIm5vbnplcm9cIiBkPVwiTTE5IDRhMiAyIDAgMCAxIDIgMnYxMmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY2YzAtMS4xLjktMiAyLTJoMTRaTTUgMTUuNVYxOGgzdi0yLjVINVptMTQtNWgtOVYxOGg5di03LjVaTTE5IDZoLTR2Mi41aDRWNlpNOCA2SDV2Mi41aDNWNlptNSAwaC0zdjIuNWgzVjZabS04IDcuNWgzdi0zSDV2M1pcIi8+PC9zdmc+JyxcbiAgICAndGFibGUtcm93LW51bWJlcmluZy1ydGwnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTYgNGEyIDIgMCAwIDAtMiAydjEzYzAgMS4xLjkgMiAyIDJoMTJhMiAyIDAgMCAwIDItMlY2YTIgMiAwIDAgMC0yLTJINlptMCAxMmg4djNINnYtM1ptMTEgMGMuNiAwIDEgLjQgMSAxdjFhMSAxIDAgMCAxLTIgMHYtMWMwLS42LjQtMSAxLTFaTTYgMTFoOHYzSDZ2LTNabTExIDBjLjYgMCAxIC40IDEgMXYxYTEgMSAwIDAgMS0yIDB2LTFjMC0uNi40LTEgMS0xWk02IDZoOHYzSDZWNlptMTEgMGMuNiAwIDEgLjQgMSAxdjFhMSAxIDAgMSAxLTIgMFY3YzAtLjYuNC0xIDEtMVpcIi8+PC9zdmc+JyxcbiAgICAndGFibGUtcm93LW51bWJlcmluZyc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTggNGEyIDIgMCAwIDEgMiAydjEzYTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yVjZjMC0xLjEuOS0yIDItMmgxMlptMCAxMmgtOHYzaDh2LTNaTTcgMTZhMSAxIDAgMCAwLTEgMXYxYTEgMSAwIDAgMCAyIDB2LTFjMC0uNi0uNC0xLTEtMVptMTEtNWgtOHYzaDh2LTNaTTcgMTFhMSAxIDAgMCAwLTEgMXYxYTEgMSAwIDAgMCAyIDB2LTFjMC0uNi0uNC0xLTEtMVptMTEtNWgtOHYzaDhWNlpNNyA2YTEgMSAwIDAgMC0xIDF2MWExIDEgMCAxIDAgMiAwVjdjMC0uNi0uNC0xLTEtMVpcIi8+PC9zdmc+JyxcbiAgICAndGFibGUtcm93LXByb3BlcnRpZXMnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIk0xOSA0YTIgMiAwIDAgMSAyIDJ2MTJhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNmMwLTEuMS45LTIgMi0yaDE0Wk01IDE1djNoNnYtM0g1Wm0xNCAwaC02djNoNnYtM1ptMC05aC02djNoNlY2Wk01IDloNlY2SDV2M1pcIi8+PC9zdmc+JyxcbiAgICAndGFibGUtc3BsaXQtY2VsbHMnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJub256ZXJvXCIgZD1cIk0xOSA0YTIgMiAwIDAgMSAyIDJ2MTJhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNmMwLTEuMS45LTIgMi0yaDE0Wk04IDE1LjVINVYxOGgzdi0yLjVabTExLTVoLTlWMThoOXYtNy41Wm0tMi41IDEgMSAxLTIgMiAyIDItMSAxLTItMi0yIDItMS0xIDItMi0yLTIgMS0xIDIgMiAyLTJabS04LjUtMUg1djNoM3YtM1pNMTkgNmgtNHYyLjVoNFY2Wk04IDZINXYyLjVoM1Y2Wm01IDBoLTN2Mi41aDNWNlpcIi8+PC9zdmc+JyxcbiAgICAndGFibGUtdG9wLWhlYWRlcic6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTkgNGEyIDIgMCAwIDEgMiAydjEyYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjZjMC0xLjEuOS0yIDItMmgxNFptLTggMTFINXYzaDZ2LTNabTggMGgtNnYzaDZ2LTNabTAtNWgtNnYzaDZ2LTNaTTUgMTNoNnYtM0g1djNaXCIvPjwvc3ZnPicsXG4gICAgJ3RhYmxlJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZmlsbC1ydWxlPVwibm9uemVyb1wiIGQ9XCJNMTkgNGEyIDIgMCAwIDEgMiAydjEyYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjZjMC0xLjEuOS0yIDItMmgxNFpNNSAxNHY0aDZ2LTRINVptMTQgMGgtNnY0aDZ2LTRabTAtNmgtNnY0aDZWOFpNNSAxMmg2VjhINXY0WlwiLz48L3N2Zz4nLFxuICAgICd0ZW1wbGF0ZS1hZGQnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNOSAxMnY0SDVhMiAyIDAgMCAwLTIgMnYzaDkuM2E2IDYgMCAwIDEtLjMtMkg1di0xaDdhNiA2IDAgMCAxIC44LTJIMTF2LTVsLS44LS42YTMgMyAwIDEgMSAzLjYgMGwtLjguNnY0LjdhNiA2IDAgMCAxIDItMS45VjEyYTUgNSAwIDEgMC02IDBaXCIvPjxwYXRoIGQ9XCJNMTggMTVjLjUgMCAxIC40IDEgLjlWMThoMmExIDEgMCAwIDEgLjEgMkgxOXYyYTEgMSAwIDAgMS0yIC4xVjIwaC0yYTEgMSAwIDAgMS0uMS0ySDE3di0yYzAtLjYuNC0xIDEtMVpcIi8+PC9zdmc+JyxcbiAgICAndGVtcGxhdGUnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE5IDE5di0xSDV2MWgxNFpNOSAxNnYtNGE1IDUgMCAxIDEgNiAwdjRoNGEyIDIgMCAwIDEgMiAydjNIM3YtM2MwLTEuMS45LTIgMi0yaDRabTQgMHYtNWwuOC0uNmEzIDMgMCAxIDAtMy42IDBsLjguNnY1aDJaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICd0ZW1wb3JhcnktcGxhY2Vob2xkZXInOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHBhdGggZD1cIk05IDcuNlY2aDIuNVY0LjVhLjUuNSAwIDEgMSAxIDBWNkgxNXYxLjZhOCA4IDAgMSAxLTYgMFptLTIuNiA1LjNhLjUuNSAwIDAgMCAuMy42Yy4zIDAgLjYgMCAuNi0uM2wuMS0uMmE1IDUgMCAwIDEgMy4zLTIuOGMuMy0uMS40LS40LjQtLjYtLjEtLjMtLjQtLjUtLjYtLjRhNiA2IDAgMCAwLTQuMSAzLjdaXCIvPjxjaXJjbGUgY3g9XCIxNFwiIGN5PVwiNFwiIHI9XCIxXCIvPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMlwiIHI9XCIxXCIvPjxjaXJjbGUgY3g9XCIxMFwiIGN5PVwiNFwiIHI9XCIxXCIvPjwvZz48L3N2Zz4nLFxuICAgICd0ZXh0LWNvbG9yJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PGcgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPjxwYXRoIGNsYXNzPVwidG94LWljb24tdGV4dC1jb2xvcl9fY29sb3JcIiBkPVwiTTMgMThoMTh2M0gzelwiLz48cGF0aCBkPVwiTTguNyAxNmgtLjhhLjUuNSAwIDAgMS0uNS0uNmwyLjctOWMuMS0uMy4zLS40LjUtLjRoMi44Yy4yIDAgLjQuMS41LjRsMi43IDlhLjUuNSAwIDAgMS0uNS42aC0uOGEuNS41IDAgMCAxLS40LS40bC0uNy0yLjJjMC0uMy0uMy0uNC0uNS0uNGgtMy40Yy0uMiAwLS40LjEtLjUuNGwtLjcgMi4yYzAgLjMtLjIuNC0uNC40Wm0yLjYtNy42LS42IDJhLjUuNSAwIDAgMCAuNS42aDEuNmEuNS41IDAgMCAwIC41LS42bC0uNi0yYzAtLjMtLjMtLjQtLjUtLjRoLS40Yy0uMiAwLS40LjEtLjUuNFpcIi8+PC9nPjwvc3ZnPicsXG4gICAgJ3RleHQtc2l6ZS1kZWNyZWFzZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xNCA1YTEgMSAwIDEgMSAwIDJoLTR2MTFhMSAxIDAgMSAxLTIgMFY3SDRhMSAxIDAgMCAxIDAtMmgxMFpNMTQgMTJhMSAxIDAgMSAwIDAgMmg2YTEgMSAwIDEgMCAwLTJoLTZaXCIvPjwvc3ZnPicsXG4gICAgJ3RleHQtc2l6ZS1pbmNyZWFzZSc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xNCA1YTEgMSAwIDEgMSAwIDJoLTR2MTFhMSAxIDAgMSAxLTIgMFY3SDRhMSAxIDAgMCAxIDAtMmgxMFpNMTcgOWExIDEgMCAwIDAtMSAxdjJoLTJhMSAxIDAgMSAwIDAgMmgydjJhMSAxIDAgMSAwIDIgMHYtMmgyYTEgMSAwIDEgMCAwLTJoLTJ2LTJjMC0uNi0uNC0xLTEtMVpcIi8+PC9zdmc+JyxcbiAgICAndG9jJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk01IDVjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFhMSAxIDAgMSAxIDAtMlptMyAwaDExYy42IDAgMSAuNCAxIDFzLS40IDEtMSAxSDhhMSAxIDAgMSAxIDAtMlptLTMgOGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMWExIDEgMCAwIDEgMC0yWm0zIDBoMTFjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFIOGExIDEgMCAwIDEgMC0yWm0wLTRjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFhMSAxIDAgMSAxIDAtMlptMyAwaDhjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFoLThhMSAxIDAgMCAxIDAtMlptLTMgOGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMWExIDEgMCAwIDEgMC0yWm0zIDBoOGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMWgtOGExIDEgMCAwIDEgMC0yWlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAndHJhbnNsYXRlJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIm0xMi43IDE0LjMtLjMuNy0uNC43LTIuMi0yLjItMy4xIDNjLS4zLjQtLjguNC0xIDBhLjcuNyAwIDAgMSAwLTFsMy4xLTNBMTIuNCAxMi40IDAgMCAxIDYuNyA5SDhhMTAuMSAxMC4xIDAgMCAwIDEuNyAyLjRjLjUtLjUgMS0xLjEgMS40LTEuOGwuOS0ySDQuN2EuNy43IDAgMSAxIDAtMS41aDQuNHYtLjdjMC0uNC4zLS44LjctLjguNCAwIC43LjQuNy44di43SDE1Yy40IDAgLjguMy44LjcgMCAuNC0uNC44LS44LjhoLTEuNGExMi4zIDEyLjMgMCAwIDEtMSAyLjQgMTMuNSAxMy41IDAgMCAxLTEuNyAyLjNsMS45IDEuOFptNC4zLTMgMi43IDcuM2EuNS41IDAgMCAxLS40LjcgMSAxIDAgMCAxLTEtLjdsLS42LTEuNWgtMy40bC0uNiAxLjVhMSAxIDAgMCAxLTEgLjcuNS41IDAgMCAxLS40LS43bDIuNy03LjRhMSAxIDAgMCAxIDIgMFptLTIuMiA0LjRoMi40TDE2IDEyLjVsLTEuMiAzLjJaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICd0eXBvZ3JhcGh5JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTE3IDVhMSAxIDAgMSAxIDAgMmgtNHYxMWExIDEgMCAxIDEtMiAwVjdIN2ExIDEgMCAwIDEgMC0yaDEwWlwiLz48cGF0aCBkPVwibTE3LjUgMTQgLjgtMS43IDEuNy0uOC0xLjctLjgtLjgtMS43LS44IDEuNy0xLjcuOCAxLjcuOC44IDEuN1pNNyAxNGwxIDIgMiAxLTIgMS0xIDItMS0yLTItMSAyLTEgMS0yWlwiLz48L3N2Zz4nLFxuICAgICd1bmRlcmxpbmUnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE2IDVjLjYgMCAxIC40IDEgMXY1LjVhNCA0IDAgMCAxLS40IDEuOGwtMSAxLjRhNS4zIDUuMyAwIDAgMS01LjUgMSA1IDUgMCAwIDEtMS42LTFjLS41LS40LS44LS45LTEuMS0xLjRhNCA0IDAgMCAxLS40LTEuOFY2YzAtLjYuNC0xIDEtMXMxIC40IDEgMXY1LjVjMCAuMyAwIC42LjIgMWwuNi43YTMuMyAzLjMgMCAwIDAgMi4yLjggMy40IDMuNCAwIDAgMCAyLjItLjhjLjMtLjIuNC0uNS42LS44bC4yLS45VjZjMC0uNi40LTEgMS0xWk04IDE3aDhjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDFIOGExIDEgMCAwIDEgMC0yWlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAndW5kbyc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNNi40IDhIMTJjMy43IDAgNi4yIDIgNi44IDUuMS42IDIuNy0uNCA1LjYtMi4zIDYuOGExIDEgMCAwIDEtMS0xLjhjMS4xLS42IDEuOC0yLjcgMS40LTQuNi0uNS0yLjEtMi4xLTMuNS00LjktMy41SDYuNGwzLjMgMy4zYTEgMSAwIDEgMS0xLjQgMS40bC01LTVhMSAxIDAgMCAxIDAtMS40bDUtNWExIDEgMCAwIDEgMS40IDEuNEw2LjQgOFpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ3VubGluayc6ICc8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNNi4yIDEyLjNhMSAxIDAgMCAxIDEuNCAxLjRsLTIgMmEyIDIgMCAxIDAgMi42IDIuOGw0LjgtNC44YTEgMSAwIDAgMCAwLTEuNCAxIDEgMCAxIDEgMS40LTEuMyAyLjkgMi45IDAgMCAxIDAgNEw5LjYgMjBhMy45IDMuOSAwIDAgMS01LjUtNS41bDItMlptMTEuNi0uNmExIDEgMCAwIDEtMS40LTEuNGwyLjEtMmEyIDIgMCAxIDAtMi43LTIuOEwxMSAxMC4zYTEgMSAwIDAgMCAwIDEuNEExIDEgMCAxIDEgOS42IDEzYTIuOSAyLjkgMCAwIDEgMC00TDE0LjQgNGEzLjkgMy45IDAgMCAxIDUuNSA1LjVsLTIgMlpNNy42IDYuM2EuOC44IDAgMCAxLTEgMS4xTDMuMyA0LjJhLjcuNyAwIDEgMSAxLTFsMy4yIDMuMVpNNS4xIDguNmEuOC44IDAgMCAxIDAgMS41SDNhLjguOCAwIDAgMSAwLTEuNUg1Wm01LTMuNWEuOC44IDAgMCAxLTEuNSAwVjNhLjguOCAwIDAgMSAxLjUgMFY1Wm02IDExLjhhLjguOCAwIDAgMSAxLTFsMy4yIDMuMmEuOC44IDAgMCAxLTEgMUwxNiAxN1ptLTIuMiAyYS44LjggMCAwIDEgMS41IDBWMjFhLjguOCAwIDAgMS0xLjUgMFYxOVptNS0zLjVhLjcuNyAwIDEgMSAwLTEuNUgyMWEuOC44IDAgMCAxIDAgMS41SDE5WlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIi8+PC9zdmc+JyxcbiAgICAndW5sb2NrJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xNiA1Yy44IDAgMS41LjMgMi4xLjkuNi42LjkgMS4zLjkgMi4xdjNoLTJWOGExIDEgMCAwIDAtLjMtLjdBMSAxIDAgMCAwIDE2IDdoLTJhMSAxIDAgMCAwLS43LjMgMSAxIDAgMCAwLS4zLjd2M2guM2MuMiAwIC4zIDAgLjUuMmwuMi42djcuNGMwIC4zIDAgLjQtLjIuNmwtLjYuMkg0LjhjLS4zIDAtLjQgMC0uNi0uMmEuNy43IDAgMCAxLS4yLS42di03LjRjMC0uMyAwLS40LjItLjZsLjUtLjJIMTFWOGMwLS44LjMtMS41LjktMi4xLjYtLjYgMS4zLS45IDIuMS0uOWgyWlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAndW5vcmRlcmVkLWxpc3QnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTExIDVoOGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMWgtOGExIDEgMCAwIDEgMC0yWm0wIDZoOGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMWgtOGExIDEgMCAwIDEgMC0yWm0wIDZoOGMuNiAwIDEgLjQgMSAxcy0uNCAxLTEgMWgtOGExIDEgMCAwIDEgMC0yWk00LjUgNmMwLS40LjEtLjguNC0xIC4zLS40LjctLjUgMS4xLS41LjQgMCAuOC4xIDEgLjQuNC4zLjUuNy41IDEuMSAwIC40LS4xLjgtLjQgMS0uMy40LS43LjUtMS4xLjUtLjQgMC0uOC0uMS0xLS40LS40LS4zLS41LS43LS41LTEuMVptMCA2YzAtLjQuMS0uOC40LTEgLjMtLjQuNy0uNSAxLjEtLjUuNCAwIC44LjEgMSAuNC40LjMuNS43LjUgMS4xIDAgLjQtLjEuOC0uNCAxLS4zLjQtLjcuNS0xLjEuNS0uNCAwLS44LS4xLTEtLjQtLjQtLjMtLjUtLjctLjUtMS4xWm0wIDZjMC0uNC4xLS44LjQtMSAuMy0uNC43LS41IDEuMS0uNS40IDAgLjguMSAxIC40LjQuMy41LjcuNSAxLjEgMCAuNC0uMS44LS40IDEtLjMuNC0uNy41LTEuMS41LS40IDAtLjgtLjEtMS0uNC0uNC0uMy0uNS0uNy0uNS0xLjFaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICd1bnNlbGVjdGVkJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZmlsbC1ydWxlPVwibm9uemVyb1wiIGQ9XCJNNiA0aDEyYTIgMiAwIDAgMSAyIDJ2MTJhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNmMwLTEuMS45LTIgMi0yWm0wIDFhMSAxIDAgMCAwLTEgMXYxMmMwIC42LjQgMSAxIDFoMTJjLjYgMCAxLS40IDEtMVY2YzAtLjYtLjQtMS0xLTFINlpcIi8+PC9zdmc+JyxcbiAgICAndXBsb2FkJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xOCAxOXYtMmExIDEgMCAwIDEgMiAwdjNjMCAuNi0uNCAxLTEgMUg1YTEgMSAwIDAgMS0xLTF2LTNhMSAxIDAgMCAxIDIgMHYyaDEyWk0xMSA2LjQgOC43IDguN2ExIDEgMCAwIDEtMS40LTEuNGw0LTRhMSAxIDAgMCAxIDEuNCAwbDQgNGExIDEgMCAxIDEtMS40IDEuNEwxMyA2LjRWMTZhMSAxIDAgMCAxLTIgMFY2LjRaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICAgICd1c2VyJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xMiAyNGExMiAxMiAwIDEgMSAwLTI0IDEyIDEyIDAgMCAxIDAgMjRabS04LjctNS4zYTExIDExIDAgMCAwIDE3LjQgMEMxOS40IDE2LjMgMTQuNiAxNSAxMiAxNWMtMi42IDAtNy40IDEuMy04LjcgMy43Wk0xMiAxM2MyLjIgMCA0LTIgNC00LjVTMTQuMiA0IDEyIDQgOCA2IDggOC41IDkuOCAxMyAxMiAxM1pcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ3ZlcnRpY2FsLWFsaWduJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PGcgZmlsbC1ydWxlPVwibm9uemVyb1wiPjxyZWN0IHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIyXCIgeD1cIjNcIiB5PVwiMTFcIiByeD1cIjFcIi8+PHBhdGggZD1cIk0xMiAyYy42IDAgMSAuNCAxIDF2NGwyLTEuM2ExIDEgMCAwIDEgMS4yIDEuNWwtLjEuMS00LjEgMy00LTNhMSAxIDAgMCAxIDEtMS43bDIgMS41VjNjMC0uNi40LTEgMS0xem0wIDExLjggNCAyLjlhMSAxIDAgMCAxLTEgMS43bC0yLTEuNVYyMWMwIC41LS40IDEtLjkgMUgxMmExIDEgMCAwIDEtMS0xdi00bC0yIDEuM2ExIDEgMCAwIDEtMS4yLS4xbC0uMS0uMWExIDEgMCAwIDEgLjEtMS4zbC4xLS4xIDQuMS0zelwiLz48L2c+PC9zdmc+JyxcbiAgICAndmlzdWFsYmxvY2tzJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk05IDE5djJIN3YtMmgyWm0tNCAwdjJhMiAyIDAgMCAxLTItMmgyWm04IDB2MmgtMnYtMmgyWm04IDBhMiAyIDAgMCAxLTIgMnYtMmgyWm0tNCAwdjJoLTJ2LTJoMlpNMTUgN2ExIDEgMCAwIDEgMCAydjdhMSAxIDAgMCAxLTIgMFY5aC0xdjdhMSAxIDAgMCAxLTIgMHYtNGEyLjUgMi41IDAgMCAxLS4yLTVIMTVaTTUgMTV2Mkgzdi0yaDJabTE2IDB2MmgtMnYtMmgyWk01IDExdjJIM3YtMmgyWm0xNiAwdjJoLTJ2LTJoMlpNNSA3djJIM1Y3aDJabTE2IDB2MmgtMlY3aDJaTTUgM3YySDNjMC0xLjEuOS0yIDItMlptOCAwdjJoLTJWM2gyWm02IDBhMiAyIDAgMCAxIDIgMmgtMlYzWk05IDN2Mkg3VjNoMlptOCAwdjJoLTJWM2gyWlwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAndmlzdWFsY2hhcnMnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTEwIDVoN2ExIDEgMCAwIDEgMCAyaC0xdjExYTEgMSAwIDAgMS0yIDBWN2gtMnYxMWExIDEgMCAwIDEtMiAwdi02Yy0uNSAwLTEgMC0xLjQtLjNBMy40IDMuNCAwIDAgMSA2LjggMTBhMy4zIDMuMyAwIDAgMSAwLTIuOCAzLjQgMy40IDAgMCAxIDEuOC0xLjhMMTAgNVpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgJ3dhcm5pbmcnOiAnPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE5LjggMTguM2MuMi41LjMuOSAwIDEuMi0uMS4zLS41LjUtMSAuNUg1LjJjLS41IDAtLjktLjItMS0uNS0uMy0uMy0uMi0uNyAwLTEuMkwxMSA0LjdsLjUtLjUuNS0uMmMuMiAwIC4zIDAgLjUuMi4yIDAgLjMuMy41LjVsNi44IDEzLjZaTTEyIDE4Yy4zIDAgLjUtLjEuNy0uMy4yLS4yLjMtLjQuMy0uN2ExIDEgMCAwIDAtLjMtLjcgMSAxIDAgMCAwLS43LS4zIDEgMSAwIDAgMC0uNy4zIDEgMSAwIDAgMC0uMy43YzAgLjMuMS41LjMuNy4yLjIuNC4zLjcuM1ptLjctMyAuMy00YTEgMSAwIDAgMC0uMy0uNyAxIDEgMCAwIDAtLjctLjMgMSAxIDAgMCAwLS43LjMgMSAxIDAgMCAwLS4zLjdsLjMgNGgxLjRaXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuICAgICd6b29tLWluJzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xNiAxNy4zYTggOCAwIDEgMSAxLjQtMS40bDQuMyA0LjRhMSAxIDAgMCAxLTEuNCAxLjRsLTQuNC00LjNabS01LS4zYTYgNiAwIDEgMCAwLTEyIDYgNiAwIDAgMCAwIDEyWm0tMS05YTEgMSAwIDAgMSAyIDB2NmExIDEgMCAwIDEtMiAwVjhabS0yIDRhMSAxIDAgMCAxIDAtMmg2YTEgMSAwIDAgMSAwIDJIOFpcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPicsXG4gICAgJ3pvb20tb3V0JzogJzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xNiAxNy4zYTggOCAwIDEgMSAxLjQtMS40bDQuMyA0LjRhMSAxIDAgMCAxLTEuNCAxLjRsLTQuNC00LjNabS01LS4zYTYgNiAwIDEgMCAwLTEyIDYgNiAwIDAgMCAwIDEyWm0tMy01YTEgMSAwIDAgMSAwLTJoNmExIDEgMCAwIDEgMCAySDhaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiLz48L3N2Zz4nLFxuICB9XG59KTsiLCIvLyBFeHBvcnRzIHRoZSBcImRlZmF1bHRcIiBpY29ucyBmb3IgdXNhZ2Ugd2l0aCBtb2R1bGUgbG9hZGVyc1xuLy8gVXNhZ2U6XG4vLyAgIENvbW1vbkpTOlxuLy8gICAgIHJlcXVpcmUoJ3RpbnltY2UvaWNvbnMvZGVmYXVsdCcpXG4vLyAgIEVTMjAxNTpcbi8vICAgICBpbXBvcnQgJ3RpbnltY2UvaWNvbnMvZGVmYXVsdCdcbnJlcXVpcmUoJy4vaWNvbnMuanMnKTsiLCIvLyBFeHBvcnRzIHRoZSBcImRvbVwiIG1vZGVsIGZvciB1c2FnZSB3aXRoIG1vZHVsZSBsb2FkZXJzXG4vLyBVc2FnZTpcbi8vICAgQ29tbW9uSlM6XG4vLyAgICAgcmVxdWlyZSgndGlueW1jZS9tb2RlbHMvZG9tJylcbi8vICAgRVMyMDE1OlxuLy8gICAgIGltcG9ydCAndGlueW1jZS9tb2RlbHMvZG9tJ1xucmVxdWlyZSgnLi9tb2RlbC5qcycpOyIsIi8qKlxuICogVGlueU1DRSB2ZXJzaW9uIDYuNy4wICgyMDIzLTA4LTMwKVxuICovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIGdsb2JhbCQxID0gdGlueW1jZS51dGlsLlRvb2xzLnJlc29sdmUoJ3RpbnltY2UuTW9kZWxNYW5hZ2VyJyk7XG5cbiAgICBjb25zdCBoYXNQcm90byA9ICh2LCBjb25zdHJ1Y3RvciwgcHJlZGljYXRlKSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBpZiAocHJlZGljYXRlKHYsIGNvbnN0cnVjdG9yLnByb3RvdHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKChfYSA9IHYuY29uc3RydWN0b3IpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5uYW1lKSA9PT0gY29uc3RydWN0b3IubmFtZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHR5cGVPZiA9IHggPT4ge1xuICAgICAgY29uc3QgdCA9IHR5cGVvZiB4O1xuICAgICAgaWYgKHggPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICAgIH0gZWxzZSBpZiAodCA9PT0gJ29iamVjdCcgJiYgQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgICByZXR1cm4gJ2FycmF5JztcbiAgICAgIH0gZWxzZSBpZiAodCA9PT0gJ29iamVjdCcgJiYgaGFzUHJvdG8oeCwgU3RyaW5nLCAobywgcHJvdG8pID0+IHByb3RvLmlzUHJvdG90eXBlT2YobykpKSB7XG4gICAgICAgIHJldHVybiAnc3RyaW5nJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0O1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNUeXBlJDEgPSB0eXBlID0+IHZhbHVlID0+IHR5cGVPZih2YWx1ZSkgPT09IHR5cGU7XG4gICAgY29uc3QgaXNTaW1wbGVUeXBlID0gdHlwZSA9PiB2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09IHR5cGU7XG4gICAgY29uc3QgZXEkMiA9IHQgPT4gYSA9PiB0ID09PSBhO1xuICAgIGNvbnN0IGlzU3RyaW5nID0gaXNUeXBlJDEoJ3N0cmluZycpO1xuICAgIGNvbnN0IGlzT2JqZWN0ID0gaXNUeXBlJDEoJ29iamVjdCcpO1xuICAgIGNvbnN0IGlzQXJyYXkgPSBpc1R5cGUkMSgnYXJyYXknKTtcbiAgICBjb25zdCBpc051bGwgPSBlcSQyKG51bGwpO1xuICAgIGNvbnN0IGlzQm9vbGVhbiA9IGlzU2ltcGxlVHlwZSgnYm9vbGVhbicpO1xuICAgIGNvbnN0IGlzVW5kZWZpbmVkID0gZXEkMih1bmRlZmluZWQpO1xuICAgIGNvbnN0IGlzTnVsbGFibGUgPSBhID0+IGEgPT09IG51bGwgfHwgYSA9PT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGlzTm9uTnVsbGFibGUgPSBhID0+ICFpc051bGxhYmxlKGEpO1xuICAgIGNvbnN0IGlzRnVuY3Rpb24gPSBpc1NpbXBsZVR5cGUoJ2Z1bmN0aW9uJyk7XG4gICAgY29uc3QgaXNOdW1iZXIgPSBpc1NpbXBsZVR5cGUoJ251bWJlcicpO1xuXG4gICAgY29uc3Qgbm9vcCA9ICgpID0+IHtcbiAgICB9O1xuICAgIGNvbnN0IGNvbXBvc2UgPSAoZmEsIGZiKSA9PiB7XG4gICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgcmV0dXJuIGZhKGZiLmFwcGx5KG51bGwsIGFyZ3MpKTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjb21wb3NlMSA9IChmYmMsIGZhYikgPT4gYSA9PiBmYmMoZmFiKGEpKTtcbiAgICBjb25zdCBjb25zdGFudCA9IHZhbHVlID0+IHtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBpZGVudGl0eSA9IHggPT4ge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgICBjb25zdCB0cmlwbGVFcXVhbHMgPSAoYSwgYikgPT4ge1xuICAgICAgcmV0dXJuIGEgPT09IGI7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBjdXJyeShmbiwgLi4uaW5pdGlhbEFyZ3MpIHtcbiAgICAgIHJldHVybiAoLi4ucmVzdEFyZ3MpID0+IHtcbiAgICAgICAgY29uc3QgYWxsID0gaW5pdGlhbEFyZ3MuY29uY2F0KHJlc3RBcmdzKTtcbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIGFsbCk7XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBub3QgPSBmID0+IHQgPT4gIWYodCk7XG4gICAgY29uc3QgZGllID0gbXNnID0+IHtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5ID0gZiA9PiB7XG4gICAgICByZXR1cm4gZigpO1xuICAgIH07XG4gICAgY29uc3QgbmV2ZXIgPSBjb25zdGFudChmYWxzZSk7XG4gICAgY29uc3QgYWx3YXlzID0gY29uc3RhbnQodHJ1ZSk7XG5cbiAgICBjbGFzcyBPcHRpb25hbCB7XG4gICAgICBjb25zdHJ1Y3Rvcih0YWcsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMudGFnID0gdGFnO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgICBzdGF0aWMgc29tZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IE9wdGlvbmFsKHRydWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHN0YXRpYyBub25lKCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc2luZ2xldG9uTm9uZTtcbiAgICAgIH1cbiAgICAgIGZvbGQob25Ob25lLCBvblNvbWUpIHtcbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgcmV0dXJuIG9uU29tZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb25Ob25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlzU29tZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnO1xuICAgICAgfVxuICAgICAgaXNOb25lKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudGFnO1xuICAgICAgfVxuICAgICAgbWFwKG1hcHBlcikge1xuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShtYXBwZXIodGhpcy52YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJpbmQoYmluZGVyKSB7XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgIHJldHVybiBiaW5kZXIodGhpcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXhpc3RzKHByZWRpY2F0ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgJiYgcHJlZGljYXRlKHRoaXMudmFsdWUpO1xuICAgICAgfVxuICAgICAgZm9yYWxsKHByZWRpY2F0ZSkge1xuICAgICAgICByZXR1cm4gIXRoaXMudGFnIHx8IHByZWRpY2F0ZSh0aGlzLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZpbHRlcihwcmVkaWNhdGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhZyB8fCBwcmVkaWNhdGUodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBnZXRPcihyZXBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzLnZhbHVlIDogcmVwbGFjZW1lbnQ7XG4gICAgICB9XG4gICAgICBvcihyZXBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzIDogcmVwbGFjZW1lbnQ7XG4gICAgICB9XG4gICAgICBnZXRPclRodW5rKHRodW5rKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMudmFsdWUgOiB0aHVuaygpO1xuICAgICAgfVxuICAgICAgb3JUaHVuayh0aHVuaykge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzIDogdGh1bmsoKTtcbiAgICAgIH1cbiAgICAgIGdldE9yRGllKG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhZykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlICE9PSBudWxsICYmIG1lc3NhZ2UgIT09IHZvaWQgMCA/IG1lc3NhZ2UgOiAnQ2FsbGVkIGdldE9yRGllIG9uIE5vbmUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RhdGljIGZyb20odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUodmFsdWUpID8gT3B0aW9uYWwuc29tZSh2YWx1ZSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICBnZXRPck51bGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMudmFsdWUgOiBudWxsO1xuICAgICAgfVxuICAgICAgZ2V0T3JVbmRlZmluZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgICAgfVxuICAgICAgZWFjaCh3b3JrZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgd29ya2VyKHRoaXMudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0b0FycmF5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyBbdGhpcy52YWx1ZV0gOiBbXTtcbiAgICAgIH1cbiAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyBgc29tZSgkeyB0aGlzLnZhbHVlIH0pYCA6ICdub25lKCknO1xuICAgICAgfVxuICAgIH1cbiAgICBPcHRpb25hbC5zaW5nbGV0b25Ob25lID0gbmV3IE9wdGlvbmFsKGZhbHNlKTtcblxuICAgIGNvbnN0IG5hdGl2ZVNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuICAgIGNvbnN0IG5hdGl2ZUluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbiAgICBjb25zdCBuYXRpdmVQdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7XG4gICAgY29uc3QgcmF3SW5kZXhPZiA9ICh0cywgdCkgPT4gbmF0aXZlSW5kZXhPZi5jYWxsKHRzLCB0KTtcbiAgICBjb25zdCBjb250YWlucyQyID0gKHhzLCB4KSA9PiByYXdJbmRleE9mKHhzLCB4KSA+IC0xO1xuICAgIGNvbnN0IGV4aXN0cyA9ICh4cywgcHJlZCkgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgaWYgKHByZWQoeCwgaSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgY29uc3QgcmFuZ2UkMSA9IChudW0sIGYpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtOyBpKyspIHtcbiAgICAgICAgci5wdXNoKGYoaSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBtYXAkMSA9ICh4cywgZikgPT4ge1xuICAgICAgY29uc3QgbGVuID0geHMubGVuZ3RoO1xuICAgICAgY29uc3QgciA9IG5ldyBBcnJheShsZW4pO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIHJbaV0gPSBmKHgsIGkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBlYWNoJDIgPSAoeHMsIGYpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGYoeCwgaSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBlYWNociA9ICh4cywgZikgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IHhzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgZih4LCBpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHBhcnRpdGlvbiA9ICh4cywgcHJlZCkgPT4ge1xuICAgICAgY29uc3QgcGFzcyA9IFtdO1xuICAgICAgY29uc3QgZmFpbCA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgY29uc3QgYXJyID0gcHJlZCh4LCBpKSA/IHBhc3MgOiBmYWlsO1xuICAgICAgICBhcnIucHVzaCh4KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhc3MsXG4gICAgICAgIGZhaWxcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXIkMiA9ICh4cywgcHJlZCkgPT4ge1xuICAgICAgY29uc3QgciA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgaWYgKHByZWQoeCwgaSkpIHtcbiAgICAgICAgICByLnB1c2goeCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3QgZm9sZHIgPSAoeHMsIGYsIGFjYykgPT4ge1xuICAgICAgZWFjaHIoeHMsICh4LCBpKSA9PiB7XG4gICAgICAgIGFjYyA9IGYoYWNjLCB4LCBpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9O1xuICAgIGNvbnN0IGZvbGRsID0gKHhzLCBmLCBhY2MpID0+IHtcbiAgICAgIGVhY2gkMih4cywgKHgsIGkpID0+IHtcbiAgICAgICAgYWNjID0gZihhY2MsIHgsIGkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH07XG4gICAgY29uc3QgZmluZFVudGlsID0gKHhzLCBwcmVkLCB1bnRpbCkgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgaWYgKHByZWQoeCwgaSkpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh4KTtcbiAgICAgICAgfSBlbHNlIGlmICh1bnRpbCh4LCBpKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgZmluZCQxID0gKHhzLCBwcmVkKSA9PiB7XG4gICAgICByZXR1cm4gZmluZFVudGlsKHhzLCBwcmVkLCBuZXZlcik7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kSW5kZXggPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoaSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBmbGF0dGVuID0geHMgPT4ge1xuICAgICAgY29uc3QgciA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgIGlmICghaXNBcnJheSh4c1tpXSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Fyci5mbGF0dGVuIGl0ZW0gJyArIGkgKyAnIHdhcyBub3QgYW4gYXJyYXksIGlucHV0OiAnICsgeHMpO1xuICAgICAgICB9XG4gICAgICAgIG5hdGl2ZVB1c2guYXBwbHkociwgeHNbaV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBiaW5kJDIgPSAoeHMsIGYpID0+IGZsYXR0ZW4obWFwJDEoeHMsIGYpKTtcbiAgICBjb25zdCBmb3JhbGwgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpICE9PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIGNvbnN0IHJldmVyc2UgPSB4cyA9PiB7XG4gICAgICBjb25zdCByID0gbmF0aXZlU2xpY2UuY2FsbCh4cywgMCk7XG4gICAgICByLnJldmVyc2UoKTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3QgbWFwVG9PYmplY3QgPSAoeHMsIGYpID0+IHtcbiAgICAgIGNvbnN0IHIgPSB7fTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIHJbU3RyaW5nKHgpXSA9IGYoeCwgaSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IHNvcnQkMSA9ICh4cywgY29tcGFyYXRvcikgPT4ge1xuICAgICAgY29uc3QgY29weSA9IG5hdGl2ZVNsaWNlLmNhbGwoeHMsIDApO1xuICAgICAgY29weS5zb3J0KGNvbXBhcmF0b3IpO1xuICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfTtcbiAgICBjb25zdCBnZXQkZCA9ICh4cywgaSkgPT4gaSA+PSAwICYmIGkgPCB4cy5sZW5ndGggPyBPcHRpb25hbC5zb21lKHhzW2ldKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICBjb25zdCBoZWFkID0geHMgPT4gZ2V0JGQoeHMsIDApO1xuICAgIGNvbnN0IGxhc3QkMiA9IHhzID0+IGdldCRkKHhzLCB4cy5sZW5ndGggLSAxKTtcbiAgICBjb25zdCBmaW5kTWFwID0gKGFyciwgZikgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgciA9IGYoYXJyW2ldLCBpKTtcbiAgICAgICAgaWYgKHIuaXNTb21lKCkpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzO1xuICAgIGNvbnN0IGhhc093blByb3BlcnR5ID0gT2JqZWN0Lmhhc093blByb3BlcnR5O1xuICAgIGNvbnN0IGVhY2gkMSA9IChvYmosIGYpID0+IHtcbiAgICAgIGNvbnN0IHByb3BzID0ga2V5cyhvYmopO1xuICAgICAgZm9yIChsZXQgayA9IDAsIGxlbiA9IHByb3BzLmxlbmd0aDsgayA8IGxlbjsgaysrKSB7XG4gICAgICAgIGNvbnN0IGkgPSBwcm9wc1trXTtcbiAgICAgICAgY29uc3QgeCA9IG9ialtpXTtcbiAgICAgICAgZih4LCBpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1hcCA9IChvYmosIGYpID0+IHtcbiAgICAgIHJldHVybiB0dXBsZU1hcChvYmosICh4LCBpKSA9PiAoe1xuICAgICAgICBrOiBpLFxuICAgICAgICB2OiBmKHgsIGkpXG4gICAgICB9KSk7XG4gICAgfTtcbiAgICBjb25zdCB0dXBsZU1hcCA9IChvYmosIGYpID0+IHtcbiAgICAgIGNvbnN0IHIgPSB7fTtcbiAgICAgIGVhY2gkMShvYmosICh4LCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IHR1cGxlID0gZih4LCBpKTtcbiAgICAgICAgclt0dXBsZS5rXSA9IHR1cGxlLnY7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3Qgb2JqQWNjID0gciA9PiAoeCwgaSkgPT4ge1xuICAgICAgcltpXSA9IHg7XG4gICAgfTtcbiAgICBjb25zdCBpbnRlcm5hbEZpbHRlciA9IChvYmosIHByZWQsIG9uVHJ1ZSwgb25GYWxzZSkgPT4ge1xuICAgICAgZWFjaCQxKG9iaiwgKHgsIGkpID0+IHtcbiAgICAgICAgKHByZWQoeCwgaSkgPyBvblRydWUgOiBvbkZhbHNlKSh4LCBpKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZmlsdGVyJDEgPSAob2JqLCBwcmVkKSA9PiB7XG4gICAgICBjb25zdCB0ID0ge307XG4gICAgICBpbnRlcm5hbEZpbHRlcihvYmosIHByZWQsIG9iakFjYyh0KSwgbm9vcCk7XG4gICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIGNvbnN0IG1hcFRvQXJyYXkgPSAob2JqLCBmKSA9PiB7XG4gICAgICBjb25zdCByID0gW107XG4gICAgICBlYWNoJDEob2JqLCAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgci5wdXNoKGYodmFsdWUsIG5hbWUpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCB2YWx1ZXMgPSBvYmogPT4ge1xuICAgICAgcmV0dXJuIG1hcFRvQXJyYXkob2JqLCBpZGVudGl0eSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXQkYyA9IChvYmosIGtleSkgPT4ge1xuICAgICAgcmV0dXJuIGhhcyQxKG9iaiwga2V5KSA/IE9wdGlvbmFsLmZyb20ob2JqW2tleV0pIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgaGFzJDEgPSAob2JqLCBrZXkpID0+IGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xuICAgIGNvbnN0IGhhc05vbk51bGxhYmxlS2V5ID0gKG9iaiwga2V5KSA9PiBoYXMkMShvYmosIGtleSkgJiYgb2JqW2tleV0gIT09IHVuZGVmaW5lZCAmJiBvYmpba2V5XSAhPT0gbnVsbDtcbiAgICBjb25zdCBpc0VtcHR5ID0gciA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHggaW4gcikge1xuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChyLCB4KSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIGNvbnN0IEdsb2JhbCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogRnVuY3Rpb24oJ3JldHVybiB0aGlzOycpKCk7XG5cbiAgICBjb25zdCBwYXRoID0gKHBhcnRzLCBzY29wZSkgPT4ge1xuICAgICAgbGV0IG8gPSBzY29wZSAhPT0gdW5kZWZpbmVkICYmIHNjb3BlICE9PSBudWxsID8gc2NvcGUgOiBHbG9iYWw7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aCAmJiBvICE9PSB1bmRlZmluZWQgJiYgbyAhPT0gbnVsbDsgKytpKSB7XG4gICAgICAgIG8gPSBvW3BhcnRzW2ldXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgY29uc3QgcmVzb2x2ZSQyID0gKHAsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHAuc3BsaXQoJy4nKTtcbiAgICAgIHJldHVybiBwYXRoKHBhcnRzLCBzY29wZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHVuc2FmZSA9IChuYW1lLCBzY29wZSkgPT4ge1xuICAgICAgcmV0dXJuIHJlc29sdmUkMihuYW1lLCBzY29wZSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRPckRpZSA9IChuYW1lLCBzY29wZSkgPT4ge1xuICAgICAgY29uc3QgYWN0dWFsID0gdW5zYWZlKG5hbWUsIHNjb3BlKTtcbiAgICAgIGlmIChhY3R1YWwgPT09IHVuZGVmaW5lZCB8fCBhY3R1YWwgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG5hbWUgKyAnIG5vdCBhdmFpbGFibGUgb24gdGhpcyBicm93c2VyJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWN0dWFsO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgICBjb25zdCBzYW5kSFRNTEVsZW1lbnQgPSBzY29wZSA9PiB7XG4gICAgICByZXR1cm4gZ2V0T3JEaWUoJ0hUTUxFbGVtZW50Jywgc2NvcGUpO1xuICAgIH07XG4gICAgY29uc3QgaXNQcm90b3R5cGVPZiA9IHggPT4ge1xuICAgICAgY29uc3Qgc2NvcGUgPSByZXNvbHZlJDIoJ293bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcnLCB4KTtcbiAgICAgIHJldHVybiBpc09iamVjdCh4KSAmJiAoc2FuZEhUTUxFbGVtZW50KHNjb3BlKS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZih4KSB8fCAvXkhUTUxcXHcqRWxlbWVudCQvLnRlc3QoZ2V0UHJvdG90eXBlT2YoeCkuY29uc3RydWN0b3IubmFtZSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBDT01NRU5UID0gODtcbiAgICBjb25zdCBET0NVTUVOVCA9IDk7XG4gICAgY29uc3QgRE9DVU1FTlRfRlJBR01FTlQgPSAxMTtcbiAgICBjb25zdCBFTEVNRU5UID0gMTtcbiAgICBjb25zdCBURVhUID0gMztcblxuICAgIGNvbnN0IG5hbWUgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IHIgPSBlbGVtZW50LmRvbS5ub2RlTmFtZTtcbiAgICAgIHJldHVybiByLnRvTG93ZXJDYXNlKCk7XG4gICAgfTtcbiAgICBjb25zdCB0eXBlID0gZWxlbWVudCA9PiBlbGVtZW50LmRvbS5ub2RlVHlwZTtcbiAgICBjb25zdCBpc1R5cGUgPSB0ID0+IGVsZW1lbnQgPT4gdHlwZShlbGVtZW50KSA9PT0gdDtcbiAgICBjb25zdCBpc0NvbW1lbnQgPSBlbGVtZW50ID0+IHR5cGUoZWxlbWVudCkgPT09IENPTU1FTlQgfHwgbmFtZShlbGVtZW50KSA9PT0gJyNjb21tZW50JztcbiAgICBjb25zdCBpc0hUTUxFbGVtZW50ID0gZWxlbWVudCA9PiBpc0VsZW1lbnQoZWxlbWVudCkgJiYgaXNQcm90b3R5cGVPZihlbGVtZW50LmRvbSk7XG4gICAgY29uc3QgaXNFbGVtZW50ID0gaXNUeXBlKEVMRU1FTlQpO1xuICAgIGNvbnN0IGlzVGV4dCA9IGlzVHlwZShURVhUKTtcbiAgICBjb25zdCBpc0RvY3VtZW50ID0gaXNUeXBlKERPQ1VNRU5UKTtcbiAgICBjb25zdCBpc0RvY3VtZW50RnJhZ21lbnQgPSBpc1R5cGUoRE9DVU1FTlRfRlJBR01FTlQpO1xuICAgIGNvbnN0IGlzVGFnID0gdGFnID0+IGUgPT4gaXNFbGVtZW50KGUpICYmIG5hbWUoZSkgPT09IHRhZztcblxuICAgIGNvbnN0IHJhd1NldCA9IChkb20sIGtleSwgdmFsdWUpID0+IHtcbiAgICAgIGlmIChpc1N0cmluZyh2YWx1ZSkgfHwgaXNCb29sZWFuKHZhbHVlKSB8fCBpc051bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlICsgJycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBjYWxsIHRvIEF0dHJpYnV0ZS5zZXQuIEtleSAnLCBrZXksICc6OiBWYWx1ZSAnLCB2YWx1ZSwgJzo6IEVsZW1lbnQgJywgZG9tKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRyaWJ1dGUgdmFsdWUgd2FzIG5vdCBzaW1wbGUnKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldCQyID0gKGVsZW1lbnQsIGtleSwgdmFsdWUpID0+IHtcbiAgICAgIHJhd1NldChlbGVtZW50LmRvbSwga2V5LCB2YWx1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRBbGwkMSA9IChlbGVtZW50LCBhdHRycykgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBlYWNoJDEoYXR0cnMsICh2LCBrKSA9PiB7XG4gICAgICAgIHJhd1NldChkb20sIGssIHYpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRPcHRpb25zID0gKGVsZW1lbnQsIGF0dHJzKSA9PiB7XG4gICAgICBlYWNoJDEoYXR0cnMsICh2LCBrKSA9PiB7XG4gICAgICAgIHYuZm9sZCgoKSA9PiB7XG4gICAgICAgICAgcmVtb3ZlJDcoZWxlbWVudCwgayk7XG4gICAgICAgIH0sIHZhbHVlID0+IHtcbiAgICAgICAgICByYXdTZXQoZWxlbWVudC5kb20sIGssIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldCRiID0gKGVsZW1lbnQsIGtleSkgPT4ge1xuICAgICAgY29uc3QgdiA9IGVsZW1lbnQuZG9tLmdldEF0dHJpYnV0ZShrZXkpO1xuICAgICAgcmV0dXJuIHYgPT09IG51bGwgPyB1bmRlZmluZWQgOiB2O1xuICAgIH07XG4gICAgY29uc3QgZ2V0T3B0ID0gKGVsZW1lbnQsIGtleSkgPT4gT3B0aW9uYWwuZnJvbShnZXQkYihlbGVtZW50LCBrZXkpKTtcbiAgICBjb25zdCByZW1vdmUkNyA9IChlbGVtZW50LCBrZXkpID0+IHtcbiAgICAgIGVsZW1lbnQuZG9tLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgIH07XG4gICAgY29uc3QgY2xvbmUkMiA9IGVsZW1lbnQgPT4gZm9sZGwoZWxlbWVudC5kb20uYXR0cmlidXRlcywgKGFjYywgYXR0cikgPT4ge1xuICAgICAgYWNjW2F0dHIubmFtZV0gPSBhdHRyLnZhbHVlO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG5cbiAgICBjb25zdCBmcm9tSHRtbCQxID0gKGh0bWwsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBzY29wZSB8fCBkb2N1bWVudDtcbiAgICAgIGNvbnN0IGRpdiA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGRpdi5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgaWYgKCFkaXYuaGFzQ2hpbGROb2RlcygpIHx8IGRpdi5jaGlsZE5vZGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9ICdIVE1MIGRvZXMgbm90IGhhdmUgYSBzaW5nbGUgcm9vdCBub2RlJztcbiAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlLCBodG1sKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZyb21Eb20kMShkaXYuY2hpbGROb2Rlc1swXSk7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tVGFnID0gKHRhZywgc2NvcGUpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IHNjb3BlIHx8IGRvY3VtZW50O1xuICAgICAgY29uc3Qgbm9kZSA9IGRvYy5jcmVhdGVFbGVtZW50KHRhZyk7XG4gICAgICByZXR1cm4gZnJvbURvbSQxKG5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgZnJvbVRleHQgPSAodGV4dCwgc2NvcGUpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IHNjb3BlIHx8IGRvY3VtZW50O1xuICAgICAgY29uc3Qgbm9kZSA9IGRvYy5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcbiAgICAgIHJldHVybiBmcm9tRG9tJDEobm9kZSk7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tRG9tJDEgPSBub2RlID0+IHtcbiAgICAgIGlmIChub2RlID09PSBudWxsIHx8IG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vZGUgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBkb206IG5vZGUgfTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21Qb2ludCQxID0gKGRvY0VsbSwgeCwgeSkgPT4gT3B0aW9uYWwuZnJvbShkb2NFbG0uZG9tLmVsZW1lbnRGcm9tUG9pbnQoeCwgeSkpLm1hcChmcm9tRG9tJDEpO1xuICAgIGNvbnN0IFN1Z2FyRWxlbWVudCA9IHtcbiAgICAgIGZyb21IdG1sOiBmcm9tSHRtbCQxLFxuICAgICAgZnJvbVRhZyxcbiAgICAgIGZyb21UZXh0LFxuICAgICAgZnJvbURvbTogZnJvbURvbSQxLFxuICAgICAgZnJvbVBvaW50OiBmcm9tUG9pbnQkMVxuICAgIH07XG5cbiAgICBjb25zdCBpcyQyID0gKGVsZW1lbnQsIHNlbGVjdG9yKSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGlmIChkb20ubm9kZVR5cGUgIT09IEVMRU1FTlQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZWxlbSA9IGRvbTtcbiAgICAgICAgaWYgKGVsZW0ubWF0Y2hlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZW0ubWF0Y2hlcyhzZWxlY3Rvcik7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbS5tc01hdGNoZXNTZWxlY3RvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZW0ubXNNYXRjaGVzU2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW0ubW96TWF0Y2hlc1NlbGVjdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbS5tb3pNYXRjaGVzU2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQnJvd3NlciBsYWNrcyBuYXRpdmUgc2VsZWN0b3JzJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGJ5cGFzc1NlbGVjdG9yID0gZG9tID0+IGRvbS5ub2RlVHlwZSAhPT0gRUxFTUVOVCAmJiBkb20ubm9kZVR5cGUgIT09IERPQ1VNRU5UICYmIGRvbS5ub2RlVHlwZSAhPT0gRE9DVU1FTlRfRlJBR01FTlQgfHwgZG9tLmNoaWxkRWxlbWVudENvdW50ID09PSAwO1xuICAgIGNvbnN0IGFsbCQxID0gKHNlbGVjdG9yLCBzY29wZSkgPT4ge1xuICAgICAgY29uc3QgYmFzZSA9IHNjb3BlID09PSB1bmRlZmluZWQgPyBkb2N1bWVudCA6IHNjb3BlLmRvbTtcbiAgICAgIHJldHVybiBieXBhc3NTZWxlY3RvcihiYXNlKSA/IFtdIDogbWFwJDEoYmFzZS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSwgU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIH07XG4gICAgY29uc3Qgb25lID0gKHNlbGVjdG9yLCBzY29wZSkgPT4ge1xuICAgICAgY29uc3QgYmFzZSA9IHNjb3BlID09PSB1bmRlZmluZWQgPyBkb2N1bWVudCA6IHNjb3BlLmRvbTtcbiAgICAgIHJldHVybiBieXBhc3NTZWxlY3RvcihiYXNlKSA/IE9wdGlvbmFsLm5vbmUoKSA6IE9wdGlvbmFsLmZyb20oYmFzZS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZXEkMSA9IChlMSwgZTIpID0+IGUxLmRvbSA9PT0gZTIuZG9tO1xuICAgIGNvbnN0IGNvbnRhaW5zJDEgPSAoZTEsIGUyKSA9PiB7XG4gICAgICBjb25zdCBkMSA9IGUxLmRvbTtcbiAgICAgIGNvbnN0IGQyID0gZTIuZG9tO1xuICAgICAgcmV0dXJuIGQxID09PSBkMiA/IGZhbHNlIDogZDEuY29udGFpbnMoZDIpO1xuICAgIH07XG4gICAgY29uc3QgaXMkMSA9IGlzJDI7XG5cbiAgICBjb25zdCBvd25lciA9IGVsZW1lbnQgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20oZWxlbWVudC5kb20ub3duZXJEb2N1bWVudCk7XG4gICAgY29uc3QgZG9jdW1lbnRPck93bmVyID0gZG9zID0+IGlzRG9jdW1lbnQoZG9zKSA/IGRvcyA6IG93bmVyKGRvcyk7XG4gICAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gZWxlbWVudCA9PiBTdWdhckVsZW1lbnQuZnJvbURvbShkb2N1bWVudE9yT3duZXIoZWxlbWVudCkuZG9tLmRvY3VtZW50RWxlbWVudCk7XG4gICAgY29uc3QgZGVmYXVsdFZpZXcgPSBlbGVtZW50ID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGRvY3VtZW50T3JPd25lcihlbGVtZW50KS5kb20uZGVmYXVsdFZpZXcpO1xuICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQgPT4gT3B0aW9uYWwuZnJvbShlbGVtZW50LmRvbS5wYXJlbnROb2RlKS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBlbGVtZW50ID0+IE9wdGlvbmFsLmZyb20oZWxlbWVudC5kb20ucGFyZW50RWxlbWVudCkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBwYXJlbnRzID0gKGVsZW1lbnQsIGlzUm9vdCkgPT4ge1xuICAgICAgY29uc3Qgc3RvcCA9IGlzRnVuY3Rpb24oaXNSb290KSA/IGlzUm9vdCA6IG5ldmVyO1xuICAgICAgbGV0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgY29uc3QgcmV0ID0gW107XG4gICAgICB3aGlsZSAoZG9tLnBhcmVudE5vZGUgIT09IG51bGwgJiYgZG9tLnBhcmVudE5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCByYXdQYXJlbnQgPSBkb20ucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgcCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJhd1BhcmVudCk7XG4gICAgICAgIHJldC5wdXNoKHApO1xuICAgICAgICBpZiAoc3RvcChwKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbSA9IHJhd1BhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9O1xuICAgIGNvbnN0IHByZXZTaWJsaW5nID0gZWxlbWVudCA9PiBPcHRpb25hbC5mcm9tKGVsZW1lbnQuZG9tLnByZXZpb3VzU2libGluZykubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBuZXh0U2libGluZyA9IGVsZW1lbnQgPT4gT3B0aW9uYWwuZnJvbShlbGVtZW50LmRvbS5uZXh0U2libGluZykubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBjaGlsZHJlbiQyID0gZWxlbWVudCA9PiBtYXAkMShlbGVtZW50LmRvbS5jaGlsZE5vZGVzLCBTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgY29uc3QgY2hpbGQkMiA9IChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgY3MgPSBlbGVtZW50LmRvbS5jaGlsZE5vZGVzO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oY3NbaW5kZXhdKS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIH07XG4gICAgY29uc3QgZmlyc3RDaGlsZCA9IGVsZW1lbnQgPT4gY2hpbGQkMihlbGVtZW50LCAwKTtcblxuICAgIGNvbnN0IGJlZm9yZSQzID0gKG1hcmtlciwgZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50JDEgPSBwYXJlbnQobWFya2VyKTtcbiAgICAgIHBhcmVudCQxLmVhY2godiA9PiB7XG4gICAgICAgIHYuZG9tLmluc2VydEJlZm9yZShlbGVtZW50LmRvbSwgbWFya2VyLmRvbSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFmdGVyJDUgPSAobWFya2VyLCBlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBzaWJsaW5nID0gbmV4dFNpYmxpbmcobWFya2VyKTtcbiAgICAgIHNpYmxpbmcuZm9sZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmVudCQxID0gcGFyZW50KG1hcmtlcik7XG4gICAgICAgIHBhcmVudCQxLmVhY2godiA9PiB7XG4gICAgICAgICAgYXBwZW5kJDEodiwgZWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgdiA9PiB7XG4gICAgICAgIGJlZm9yZSQzKHYsIGVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBwcmVwZW5kID0gKHBhcmVudCwgZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgZmlyc3RDaGlsZCQxID0gZmlyc3RDaGlsZChwYXJlbnQpO1xuICAgICAgZmlyc3RDaGlsZCQxLmZvbGQoKCkgPT4ge1xuICAgICAgICBhcHBlbmQkMShwYXJlbnQsIGVsZW1lbnQpO1xuICAgICAgfSwgdiA9PiB7XG4gICAgICAgIHBhcmVudC5kb20uaW5zZXJ0QmVmb3JlKGVsZW1lbnQuZG9tLCB2LmRvbSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGVuZCQxID0gKHBhcmVudCwgZWxlbWVudCkgPT4ge1xuICAgICAgcGFyZW50LmRvbS5hcHBlbmRDaGlsZChlbGVtZW50LmRvbSk7XG4gICAgfTtcbiAgICBjb25zdCBhcHBlbmRBdCA9IChwYXJlbnQsIGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjaGlsZCQyKHBhcmVudCwgaW5kZXgpLmZvbGQoKCkgPT4ge1xuICAgICAgICBhcHBlbmQkMShwYXJlbnQsIGVsZW1lbnQpO1xuICAgICAgfSwgdiA9PiB7XG4gICAgICAgIGJlZm9yZSQzKHYsIGVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCB3cmFwID0gKGVsZW1lbnQsIHdyYXBwZXIpID0+IHtcbiAgICAgIGJlZm9yZSQzKGVsZW1lbnQsIHdyYXBwZXIpO1xuICAgICAgYXBwZW5kJDEod3JhcHBlciwgZWxlbWVudCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFmdGVyJDQgPSAobWFya2VyLCBlbGVtZW50cykgPT4ge1xuICAgICAgZWFjaCQyKGVsZW1lbnRzLCAoeCwgaSkgPT4ge1xuICAgICAgICBjb25zdCBlID0gaSA9PT0gMCA/IG1hcmtlciA6IGVsZW1lbnRzW2kgLSAxXTtcbiAgICAgICAgYWZ0ZXIkNShlLCB4KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYXBwZW5kID0gKHBhcmVudCwgZWxlbWVudHMpID0+IHtcbiAgICAgIGVhY2gkMihlbGVtZW50cywgeCA9PiB7XG4gICAgICAgIGFwcGVuZCQxKHBhcmVudCwgeCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZW1wdHkgPSBlbGVtZW50ID0+IHtcbiAgICAgIGVsZW1lbnQuZG9tLnRleHRDb250ZW50ID0gJyc7XG4gICAgICBlYWNoJDIoY2hpbGRyZW4kMihlbGVtZW50KSwgcm9ndWUgPT4ge1xuICAgICAgICByZW1vdmUkNihyb2d1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSQ2ID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGlmIChkb20ucGFyZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgICAgICBkb20ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkb20pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdW53cmFwID0gd3JhcHBlciA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGNoaWxkcmVuJDIod3JhcHBlcik7XG4gICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICBhZnRlciQ0KHdyYXBwZXIsIGNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICAgIHJlbW92ZSQ2KHdyYXBwZXIpO1xuICAgIH07XG5cbiAgICBjb25zdCBjbG9uZSQxID0gKG9yaWdpbmFsLCBpc0RlZXApID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKG9yaWdpbmFsLmRvbS5jbG9uZU5vZGUoaXNEZWVwKSk7XG4gICAgY29uc3Qgc2hhbGxvdyA9IG9yaWdpbmFsID0+IGNsb25lJDEob3JpZ2luYWwsIGZhbHNlKTtcbiAgICBjb25zdCBkZWVwID0gb3JpZ2luYWwgPT4gY2xvbmUkMShvcmlnaW5hbCwgdHJ1ZSk7XG4gICAgY29uc3Qgc2hhbGxvd0FzID0gKG9yaWdpbmFsLCB0YWcpID0+IHtcbiAgICAgIGNvbnN0IG51ID0gU3VnYXJFbGVtZW50LmZyb21UYWcodGFnKTtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBjbG9uZSQyKG9yaWdpbmFsKTtcbiAgICAgIHNldEFsbCQxKG51LCBhdHRyaWJ1dGVzKTtcbiAgICAgIHJldHVybiBudTtcbiAgICB9O1xuICAgIGNvbnN0IGNvcHkkMiA9IChvcmlnaW5hbCwgdGFnKSA9PiB7XG4gICAgICBjb25zdCBudSA9IHNoYWxsb3dBcyhvcmlnaW5hbCwgdGFnKTtcbiAgICAgIGNvbnN0IGNsb25lQ2hpbGRyZW4gPSBjaGlsZHJlbiQyKGRlZXAob3JpZ2luYWwpKTtcbiAgICAgIGFwcGVuZChudSwgY2xvbmVDaGlsZHJlbik7XG4gICAgICByZXR1cm4gbnU7XG4gICAgfTtcbiAgICBjb25zdCBtdXRhdGUkMSA9IChvcmlnaW5hbCwgdGFnKSA9PiB7XG4gICAgICBjb25zdCBudSA9IHNoYWxsb3dBcyhvcmlnaW5hbCwgdGFnKTtcbiAgICAgIGFmdGVyJDUob3JpZ2luYWwsIG51KTtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gY2hpbGRyZW4kMihvcmlnaW5hbCk7XG4gICAgICBhcHBlbmQobnUsIGNoaWxkcmVuKTtcbiAgICAgIHJlbW92ZSQ2KG9yaWdpbmFsKTtcbiAgICAgIHJldHVybiBudTtcbiAgICB9O1xuXG4gICAgY29uc3QgdmFsaWRTZWN0aW9uTGlzdCA9IFtcbiAgICAgICd0Zm9vdCcsXG4gICAgICAndGhlYWQnLFxuICAgICAgJ3Rib2R5JyxcbiAgICAgICdjb2xncm91cCdcbiAgICBdO1xuICAgIGNvbnN0IGlzVmFsaWRTZWN0aW9uID0gcGFyZW50TmFtZSA9PiBjb250YWlucyQyKHZhbGlkU2VjdGlvbkxpc3QsIHBhcmVudE5hbWUpO1xuICAgIGNvbnN0IGdyaWQgPSAocm93cywgY29sdW1ucykgPT4gKHtcbiAgICAgIHJvd3MsXG4gICAgICBjb2x1bW5zXG4gICAgfSk7XG4gICAgY29uc3QgYWRkcmVzcyA9IChyb3csIGNvbHVtbikgPT4gKHtcbiAgICAgIHJvdyxcbiAgICAgIGNvbHVtblxuICAgIH0pO1xuICAgIGNvbnN0IGRldGFpbCA9IChlbGVtZW50LCByb3dzcGFuLCBjb2xzcGFuKSA9PiAoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIHJvd3NwYW4sXG4gICAgICBjb2xzcGFuXG4gICAgfSk7XG4gICAgY29uc3QgZGV0YWlsbmV3ID0gKGVsZW1lbnQsIHJvd3NwYW4sIGNvbHNwYW4sIGlzTmV3KSA9PiAoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIHJvd3NwYW4sXG4gICAgICBjb2xzcGFuLFxuICAgICAgaXNOZXdcbiAgICB9KTtcbiAgICBjb25zdCBleHRlbmRlZCA9IChlbGVtZW50LCByb3dzcGFuLCBjb2xzcGFuLCByb3csIGNvbHVtbiwgaXNMb2NrZWQpID0+ICh7XG4gICAgICBlbGVtZW50LFxuICAgICAgcm93c3BhbixcbiAgICAgIGNvbHNwYW4sXG4gICAgICByb3csXG4gICAgICBjb2x1bW4sXG4gICAgICBpc0xvY2tlZFxuICAgIH0pO1xuICAgIGNvbnN0IHJvd2RldGFpbCA9IChlbGVtZW50LCBjZWxscywgc2VjdGlvbikgPT4gKHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBjZWxscyxcbiAgICAgIHNlY3Rpb25cbiAgICB9KTtcbiAgICBjb25zdCByb3dkZXRhaWxuZXcgPSAoZWxlbWVudCwgY2VsbHMsIHNlY3Rpb24sIGlzTmV3KSA9PiAoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIGNlbGxzLFxuICAgICAgc2VjdGlvbixcbiAgICAgIGlzTmV3XG4gICAgfSk7XG4gICAgY29uc3QgZWxlbWVudG5ldyA9IChlbGVtZW50LCBpc05ldywgaXNMb2NrZWQpID0+ICh7XG4gICAgICBlbGVtZW50LFxuICAgICAgaXNOZXcsXG4gICAgICBpc0xvY2tlZFxuICAgIH0pO1xuICAgIGNvbnN0IHJvd2NlbGxzID0gKGVsZW1lbnQsIGNlbGxzLCBzZWN0aW9uLCBpc05ldykgPT4gKHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBjZWxscyxcbiAgICAgIHNlY3Rpb24sXG4gICAgICBpc05ld1xuICAgIH0pO1xuICAgIGNvbnN0IGJvdW5kcyA9IChzdGFydFJvdywgc3RhcnRDb2wsIGZpbmlzaFJvdywgZmluaXNoQ29sKSA9PiAoe1xuICAgICAgc3RhcnRSb3csXG4gICAgICBzdGFydENvbCxcbiAgICAgIGZpbmlzaFJvdyxcbiAgICAgIGZpbmlzaENvbFxuICAgIH0pO1xuICAgIGNvbnN0IGNvbHVtbmV4dCA9IChlbGVtZW50LCBjb2xzcGFuLCBjb2x1bW4pID0+ICh7XG4gICAgICBlbGVtZW50LFxuICAgICAgY29sc3BhbixcbiAgICAgIGNvbHVtblxuICAgIH0pO1xuICAgIGNvbnN0IGNvbGdyb3VwID0gKGVsZW1lbnQsIGNvbHVtbnMpID0+ICh7XG4gICAgICBlbGVtZW50LFxuICAgICAgY29sdW1uc1xuICAgIH0pO1xuXG4gICAgY29uc3QgaXNTaGFkb3dSb290ID0gZG9zID0+IGlzRG9jdW1lbnRGcmFnbWVudChkb3MpICYmIGlzTm9uTnVsbGFibGUoZG9zLmRvbS5ob3N0KTtcbiAgICBjb25zdCBzdXBwb3J0ZWQgPSBpc0Z1bmN0aW9uKEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvdykgJiYgaXNGdW5jdGlvbihOb2RlLnByb3RvdHlwZS5nZXRSb290Tm9kZSk7XG4gICAgY29uc3QgaXNTdXBwb3J0ZWQkMSA9IGNvbnN0YW50KHN1cHBvcnRlZCk7XG4gICAgY29uc3QgZ2V0Um9vdE5vZGUgPSBzdXBwb3J0ZWQgPyBlID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGUuZG9tLmdldFJvb3ROb2RlKCkpIDogZG9jdW1lbnRPck93bmVyO1xuICAgIGNvbnN0IGdldFNoYWRvd1Jvb3QgPSBlID0+IHtcbiAgICAgIGNvbnN0IHIgPSBnZXRSb290Tm9kZShlKTtcbiAgICAgIHJldHVybiBpc1NoYWRvd1Jvb3QocikgPyBPcHRpb25hbC5zb21lKHIpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0U2hhZG93SG9zdCA9IGUgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20oZS5kb20uaG9zdCk7XG4gICAgY29uc3QgZ2V0T3JpZ2luYWxFdmVudFRhcmdldCA9IGV2ZW50ID0+IHtcbiAgICAgIGlmIChpc1N1cHBvcnRlZCQxKCkgJiYgaXNOb25OdWxsYWJsZShldmVudC50YXJnZXQpKSB7XG4gICAgICAgIGNvbnN0IGVsID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgaWYgKGlzRWxlbWVudChlbCkgJiYgaXNPcGVuU2hhZG93SG9zdChlbCkpIHtcbiAgICAgICAgICBpZiAoZXZlbnQuY29tcG9zZWQgJiYgZXZlbnQuY29tcG9zZWRQYXRoKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb3NlZFBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcbiAgICAgICAgICAgIGlmIChjb21wb3NlZFBhdGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhlYWQoY29tcG9zZWRQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKGV2ZW50LnRhcmdldCk7XG4gICAgfTtcbiAgICBjb25zdCBpc09wZW5TaGFkb3dIb3N0ID0gZWxlbWVudCA9PiBpc05vbk51bGxhYmxlKGVsZW1lbnQuZG9tLnNoYWRvd1Jvb3QpO1xuXG4gICAgY29uc3QgaW5Cb2R5ID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBkb20gPSBpc1RleHQoZWxlbWVudCkgPyBlbGVtZW50LmRvbS5wYXJlbnROb2RlIDogZWxlbWVudC5kb207XG4gICAgICBpZiAoZG9tID09PSB1bmRlZmluZWQgfHwgZG9tID09PSBudWxsIHx8IGRvbS5vd25lckRvY3VtZW50ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvYyA9IGRvbS5vd25lckRvY3VtZW50O1xuICAgICAgcmV0dXJuIGdldFNoYWRvd1Jvb3QoU3VnYXJFbGVtZW50LmZyb21Eb20oZG9tKSkuZm9sZCgoKSA9PiBkb2MuYm9keS5jb250YWlucyhkb20pLCBjb21wb3NlMShpbkJvZHksIGdldFNoYWRvd0hvc3QpKTtcbiAgICB9O1xuICAgIGNvbnN0IGJvZHkkMSA9ICgpID0+IGdldEJvZHkkMShTdWdhckVsZW1lbnQuZnJvbURvbShkb2N1bWVudCkpO1xuICAgIGNvbnN0IGdldEJvZHkkMSA9IGRvYyA9PiB7XG4gICAgICBjb25zdCBiID0gZG9jLmRvbS5ib2R5O1xuICAgICAgaWYgKGIgPT09IG51bGwgfHwgYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm9keSBpcyBub3QgYXZhaWxhYmxlIHlldCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFN1Z2FyRWxlbWVudC5mcm9tRG9tKGIpO1xuICAgIH07XG5cbiAgICBjb25zdCBhbmNlc3RvcnMkNCA9IChzY29wZSwgcHJlZGljYXRlLCBpc1Jvb3QpID0+IGZpbHRlciQyKHBhcmVudHMoc2NvcGUsIGlzUm9vdCksIHByZWRpY2F0ZSk7XG4gICAgY29uc3QgY2hpbGRyZW4kMSA9IChzY29wZSwgcHJlZGljYXRlKSA9PiBmaWx0ZXIkMihjaGlsZHJlbiQyKHNjb3BlKSwgcHJlZGljYXRlKTtcbiAgICBjb25zdCBkZXNjZW5kYW50cyQxID0gKHNjb3BlLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgIGVhY2gkMihjaGlsZHJlbiQyKHNjb3BlKSwgeCA9PiB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUoeCkpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KFt4XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChkZXNjZW5kYW50cyQxKHgsIHByZWRpY2F0ZSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICBjb25zdCBhbmNlc3RvcnMkMyA9IChzY29wZSwgc2VsZWN0b3IsIGlzUm9vdCkgPT4gYW5jZXN0b3JzJDQoc2NvcGUsIGUgPT4gaXMkMihlLCBzZWxlY3RvciksIGlzUm9vdCk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSAoc2NvcGUsIHNlbGVjdG9yKSA9PiBjaGlsZHJlbiQxKHNjb3BlLCBlID0+IGlzJDIoZSwgc2VsZWN0b3IpKTtcbiAgICBjb25zdCBkZXNjZW5kYW50cyA9IChzY29wZSwgc2VsZWN0b3IpID0+IGFsbCQxKHNlbGVjdG9yLCBzY29wZSk7XG5cbiAgICB2YXIgQ2xvc2VzdE9yQW5jZXN0b3IgPSAoaXMsIGFuY2VzdG9yLCBzY29wZSwgYSwgaXNSb290KSA9PiB7XG4gICAgICBpZiAoaXMoc2NvcGUsIGEpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHNjb3BlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihpc1Jvb3QpICYmIGlzUm9vdChzY29wZSkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhbmNlc3RvcihzY29wZSwgYSwgaXNSb290KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgYW5jZXN0b3IkMiA9IChzY29wZSwgcHJlZGljYXRlLCBpc1Jvb3QpID0+IHtcbiAgICAgIGxldCBlbGVtZW50ID0gc2NvcGUuZG9tO1xuICAgICAgY29uc3Qgc3RvcCA9IGlzRnVuY3Rpb24oaXNSb290KSA/IGlzUm9vdCA6IG5ldmVyO1xuICAgICAgd2hpbGUgKGVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuICAgICAgICBjb25zdCBlbCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsZW1lbnQpO1xuICAgICAgICBpZiAocHJlZGljYXRlKGVsKSkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGVsKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdG9wKGVsKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgY2xvc2VzdCQyID0gKHNjb3BlLCBwcmVkaWNhdGUsIGlzUm9vdCkgPT4ge1xuICAgICAgY29uc3QgaXMgPSAocywgdGVzdCkgPT4gdGVzdChzKTtcbiAgICAgIHJldHVybiBDbG9zZXN0T3JBbmNlc3RvcihpcywgYW5jZXN0b3IkMiwgc2NvcGUsIHByZWRpY2F0ZSwgaXNSb290KTtcbiAgICB9O1xuICAgIGNvbnN0IGNoaWxkJDEgPSAoc2NvcGUsIHByZWRpY2F0ZSkgPT4ge1xuICAgICAgY29uc3QgcHJlZCA9IG5vZGUgPT4gcHJlZGljYXRlKFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5vZGUpKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmQkMShzY29wZS5kb20uY2hpbGROb2RlcywgcHJlZCk7XG4gICAgICByZXR1cm4gcmVzdWx0Lm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgfTtcbiAgICBjb25zdCBkZXNjZW5kYW50JDEgPSAoc2NvcGUsIHByZWRpY2F0ZSkgPT4ge1xuICAgICAgY29uc3QgZGVzY2VuZCA9IG5vZGUgPT4ge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGNoaWxkID0gU3VnYXJFbGVtZW50LmZyb21Eb20obm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgICAgICAgICBpZiAocHJlZGljYXRlKGNoaWxkKSkge1xuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoY2hpbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXMgPSBkZXNjZW5kKG5vZGUuY2hpbGROb2Rlc1tpXSk7XG4gICAgICAgICAgaWYgKHJlcy5pc1NvbWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gZGVzY2VuZChzY29wZS5kb20pO1xuICAgIH07XG5cbiAgICBjb25zdCBhbmNlc3RvciQxID0gKHNjb3BlLCBzZWxlY3RvciwgaXNSb290KSA9PiBhbmNlc3RvciQyKHNjb3BlLCBlID0+IGlzJDIoZSwgc2VsZWN0b3IpLCBpc1Jvb3QpO1xuICAgIGNvbnN0IGNoaWxkID0gKHNjb3BlLCBzZWxlY3RvcikgPT4gY2hpbGQkMShzY29wZSwgZSA9PiBpcyQyKGUsIHNlbGVjdG9yKSk7XG4gICAgY29uc3QgZGVzY2VuZGFudCA9IChzY29wZSwgc2VsZWN0b3IpID0+IG9uZShzZWxlY3Rvciwgc2NvcGUpO1xuICAgIGNvbnN0IGNsb3Nlc3QkMSA9IChzY29wZSwgc2VsZWN0b3IsIGlzUm9vdCkgPT4ge1xuICAgICAgY29uc3QgaXMgPSAoZWxlbWVudCwgc2VsZWN0b3IpID0+IGlzJDIoZWxlbWVudCwgc2VsZWN0b3IpO1xuICAgICAgcmV0dXJuIENsb3Nlc3RPckFuY2VzdG9yKGlzLCBhbmNlc3RvciQxLCBzY29wZSwgc2VsZWN0b3IsIGlzUm9vdCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzID0gKGxocywgcmhzLCBjb21wYXJhdG9yID0gdHJpcGxlRXF1YWxzKSA9PiBsaHMuZXhpc3RzKGxlZnQgPT4gY29tcGFyYXRvcihsZWZ0LCByaHMpKTtcbiAgICBjb25zdCBjYXQgPSBhcnIgPT4ge1xuICAgICAgY29uc3QgciA9IFtdO1xuICAgICAgY29uc3QgcHVzaCA9IHggPT4ge1xuICAgICAgICByLnB1c2goeCk7XG4gICAgICB9O1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXJyW2ldLmVhY2gocHVzaCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IGJpbmRGcm9tID0gKGEsIGYpID0+IGEgIT09IHVuZGVmaW5lZCAmJiBhICE9PSBudWxsID8gZihhKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICBjb25zdCBzb21lSWYgPSAoYiwgYSkgPT4gYiA/IE9wdGlvbmFsLnNvbWUoYSkgOiBPcHRpb25hbC5ub25lKCk7XG5cbiAgICBjb25zdCBjaGVja1JhbmdlID0gKHN0ciwgc3Vic3RyLCBzdGFydCkgPT4gc3Vic3RyID09PSAnJyB8fCBzdHIubGVuZ3RoID49IHN1YnN0ci5sZW5ndGggJiYgc3RyLnN1YnN0cihzdGFydCwgc3RhcnQgKyBzdWJzdHIubGVuZ3RoKSA9PT0gc3Vic3RyO1xuICAgIGNvbnN0IGNvbnRhaW5zID0gKHN0ciwgc3Vic3RyLCBzdGFydCA9IDAsIGVuZCkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gc3RyLmluZGV4T2Yoc3Vic3RyLCBzdGFydCk7XG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gaXNVbmRlZmluZWQoZW5kKSA/IHRydWUgOiBpZHggKyBzdWJzdHIubGVuZ3RoIDw9IGVuZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHN0YXJ0c1dpdGggPSAoc3RyLCBwcmVmaXgpID0+IHtcbiAgICAgIHJldHVybiBjaGVja1JhbmdlKHN0ciwgcHJlZml4LCAwKTtcbiAgICB9O1xuICAgIGNvbnN0IGVuZHNXaXRoID0gKHN0ciwgc3VmZml4KSA9PiB7XG4gICAgICByZXR1cm4gY2hlY2tSYW5nZShzdHIsIHN1ZmZpeCwgc3RyLmxlbmd0aCAtIHN1ZmZpeC5sZW5ndGgpO1xuICAgIH07XG4gICAgY29uc3QgYmxhbmsgPSByID0+IHMgPT4gcy5yZXBsYWNlKHIsICcnKTtcbiAgICBjb25zdCB0cmltID0gYmxhbmsoL15cXHMrfFxccyskL2cpO1xuICAgIGNvbnN0IGlzTm90RW1wdHkgPSBzID0+IHMubGVuZ3RoID4gMDtcbiAgICBjb25zdCB0b0Zsb2F0ID0gdmFsdWUgPT4ge1xuICAgICAgY29uc3QgbnVtID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICByZXR1cm4gaXNOYU4obnVtKSA/IE9wdGlvbmFsLm5vbmUoKSA6IE9wdGlvbmFsLnNvbWUobnVtKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNTdXBwb3J0ZWQgPSBkb20gPT4gZG9tLnN0eWxlICE9PSB1bmRlZmluZWQgJiYgaXNGdW5jdGlvbihkb20uc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSk7XG5cbiAgICBjb25zdCBpbnRlcm5hbFNldCA9IChkb20sIHByb3BlcnR5LCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBjYWxsIHRvIENTUy5zZXQuIFByb3BlcnR5ICcsIHByb3BlcnR5LCAnOjogVmFsdWUgJywgdmFsdWUsICc6OiBFbGVtZW50ICcsIGRvbSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ1NTIHZhbHVlIG11c3QgYmUgYSBzdHJpbmc6ICcgKyB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNTdXBwb3J0ZWQoZG9tKSkge1xuICAgICAgICBkb20uc3R5bGUuc2V0UHJvcGVydHkocHJvcGVydHksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGludGVybmFsUmVtb3ZlID0gKGRvbSwgcHJvcGVydHkpID0+IHtcbiAgICAgIGlmIChpc1N1cHBvcnRlZChkb20pKSB7XG4gICAgICAgIGRvbS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXQkMSA9IChlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgaW50ZXJuYWxTZXQoZG9tLCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0QWxsID0gKGVsZW1lbnQsIGNzcykgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBlYWNoJDEoY3NzLCAodiwgaykgPT4ge1xuICAgICAgICBpbnRlcm5hbFNldChkb20sIGssIHYpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXQkYSA9IChlbGVtZW50LCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBjb25zdCBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb20pO1xuICAgICAgY29uc3QgciA9IHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KTtcbiAgICAgIHJldHVybiByID09PSAnJyAmJiAhaW5Cb2R5KGVsZW1lbnQpID8gZ2V0VW5zYWZlUHJvcGVydHkoZG9tLCBwcm9wZXJ0eSkgOiByO1xuICAgIH07XG4gICAgY29uc3QgZ2V0VW5zYWZlUHJvcGVydHkgPSAoZG9tLCBwcm9wZXJ0eSkgPT4gaXNTdXBwb3J0ZWQoZG9tKSA/IGRvbS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KSA6ICcnO1xuICAgIGNvbnN0IGdldFJhdyQyID0gKGVsZW1lbnQsIHByb3BlcnR5KSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGNvbnN0IHJhdyA9IGdldFVuc2FmZVByb3BlcnR5KGRvbSwgcHJvcGVydHkpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20ocmF3KS5maWx0ZXIociA9PiByLmxlbmd0aCA+IDApO1xuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlJDUgPSAoZWxlbWVudCwgcHJvcGVydHkpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgaW50ZXJuYWxSZW1vdmUoZG9tLCBwcm9wZXJ0eSk7XG4gICAgICBpZiAoaXMoZ2V0T3B0KGVsZW1lbnQsICdzdHlsZScpLm1hcCh0cmltKSwgJycpKSB7XG4gICAgICAgIHJlbW92ZSQ3KGVsZW1lbnQsICdzdHlsZScpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY29weSQxID0gKHNvdXJjZSwgdGFyZ2V0KSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2VEb20gPSBzb3VyY2UuZG9tO1xuICAgICAgY29uc3QgdGFyZ2V0RG9tID0gdGFyZ2V0LmRvbTtcbiAgICAgIGlmIChpc1N1cHBvcnRlZChzb3VyY2VEb20pICYmIGlzU3VwcG9ydGVkKHRhcmdldERvbSkpIHtcbiAgICAgICAgdGFyZ2V0RG9tLnN0eWxlLmNzc1RleHQgPSBzb3VyY2VEb20uc3R5bGUuY3NzVGV4dDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0QXR0clZhbHVlID0gKGNlbGwsIG5hbWUsIGZhbGxiYWNrID0gMCkgPT4gZ2V0T3B0KGNlbGwsIG5hbWUpLm1hcCh2YWx1ZSA9PiBwYXJzZUludCh2YWx1ZSwgMTApKS5nZXRPcihmYWxsYmFjayk7XG4gICAgY29uc3QgZ2V0U3BhbiA9IChjZWxsLCB0eXBlKSA9PiBnZXRBdHRyVmFsdWUoY2VsbCwgdHlwZSwgMSk7XG4gICAgY29uc3QgaGFzQ29sc3BhbiA9IGNlbGxPckNvbCA9PiB7XG4gICAgICBpZiAoaXNUYWcoJ2NvbCcpKGNlbGxPckNvbCkpIHtcbiAgICAgICAgcmV0dXJuIGdldEF0dHJWYWx1ZShjZWxsT3JDb2wsICdzcGFuJywgMSkgPiAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGdldFNwYW4oY2VsbE9yQ29sLCAnY29sc3BhbicpID4gMTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGhhc1Jvd3NwYW4gPSBjZWxsID0+IGdldFNwYW4oY2VsbCwgJ3Jvd3NwYW4nKSA+IDE7XG4gICAgY29uc3QgZ2V0Q3NzVmFsdWUgPSAoZWxlbWVudCwgcHJvcGVydHkpID0+IHBhcnNlSW50KGdldCRhKGVsZW1lbnQsIHByb3BlcnR5KSwgMTApO1xuICAgIGNvbnN0IG1pbldpZHRoID0gY29uc3RhbnQoMTApO1xuICAgIGNvbnN0IG1pbkhlaWdodCA9IGNvbnN0YW50KDEwKTtcblxuICAgIGNvbnN0IGZpcnN0TGF5ZXIgPSAoc2NvcGUsIHNlbGVjdG9yKSA9PiB7XG4gICAgICByZXR1cm4gZmlsdGVyRmlyc3RMYXllcihzY29wZSwgc2VsZWN0b3IsIGFsd2F5cyk7XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXJGaXJzdExheWVyID0gKHNjb3BlLCBzZWxlY3RvciwgcHJlZGljYXRlKSA9PiB7XG4gICAgICByZXR1cm4gYmluZCQyKGNoaWxkcmVuJDIoc2NvcGUpLCB4ID0+IHtcbiAgICAgICAgaWYgKGlzJDIoeCwgc2VsZWN0b3IpKSB7XG4gICAgICAgICAgcmV0dXJuIHByZWRpY2F0ZSh4KSA/IFt4XSA6IFtdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmaWx0ZXJGaXJzdExheWVyKHgsIHNlbGVjdG9yLCBwcmVkaWNhdGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbG9va3VwID0gKHRhZ3MsIGVsZW1lbnQsIGlzUm9vdCA9IG5ldmVyKSA9PiB7XG4gICAgICBpZiAoaXNSb290KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICBpZiAoY29udGFpbnMkMih0YWdzLCBuYW1lKGVsZW1lbnQpKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShlbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzUm9vdE9yVXBwZXJUYWJsZSA9IGVsbSA9PiBpcyQyKGVsbSwgJ3RhYmxlJykgfHwgaXNSb290KGVsbSk7XG4gICAgICByZXR1cm4gYW5jZXN0b3IkMShlbGVtZW50LCB0YWdzLmpvaW4oJywnKSwgaXNSb290T3JVcHBlclRhYmxlKTtcbiAgICB9O1xuICAgIGNvbnN0IGNlbGwgPSAoZWxlbWVudCwgaXNSb290KSA9PiBsb29rdXAoW1xuICAgICAgJ3RkJyxcbiAgICAgICd0aCdcbiAgICBdLCBlbGVtZW50LCBpc1Jvb3QpO1xuICAgIGNvbnN0IGNlbGxzJDEgPSBhbmNlc3RvciA9PiBmaXJzdExheWVyKGFuY2VzdG9yLCAndGgsdGQnKTtcbiAgICBjb25zdCBjb2x1bW5zJDEgPSBhbmNlc3RvciA9PiB7XG4gICAgICBpZiAoaXMkMihhbmNlc3RvciwgJ2NvbGdyb3VwJykpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuKGFuY2VzdG9yLCAnY29sJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYmluZCQyKGNvbHVtbkdyb3VwcyhhbmNlc3RvciksIGNvbHVtbkdyb3VwID0+IGNoaWxkcmVuKGNvbHVtbkdyb3VwLCAnY29sJykpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdGFibGUgPSAoZWxlbWVudCwgaXNSb290KSA9PiBjbG9zZXN0JDEoZWxlbWVudCwgJ3RhYmxlJywgaXNSb290KTtcbiAgICBjb25zdCByb3dzJDEgPSBhbmNlc3RvciA9PiBmaXJzdExheWVyKGFuY2VzdG9yLCAndHInKTtcbiAgICBjb25zdCBjb2x1bW5Hcm91cHMgPSBhbmNlc3RvciA9PiB0YWJsZShhbmNlc3RvcikuZm9sZChjb25zdGFudChbXSksIHRhYmxlID0+IGNoaWxkcmVuKHRhYmxlLCAnY29sZ3JvdXAnKSk7XG5cbiAgICBjb25zdCBmcm9tUm93c09yQ29sR3JvdXBzID0gKGVsZW1zLCBnZXRTZWN0aW9uKSA9PiBtYXAkMShlbGVtcywgcm93ID0+IHtcbiAgICAgIGlmIChuYW1lKHJvdykgPT09ICdjb2xncm91cCcpIHtcbiAgICAgICAgY29uc3QgY2VsbHMgPSBtYXAkMShjb2x1bW5zJDEocm93KSwgY29sdW1uID0+IHtcbiAgICAgICAgICBjb25zdCBjb2xzcGFuID0gZ2V0QXR0clZhbHVlKGNvbHVtbiwgJ3NwYW4nLCAxKTtcbiAgICAgICAgICByZXR1cm4gZGV0YWlsKGNvbHVtbiwgMSwgY29sc3Bhbik7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcm93ZGV0YWlsKHJvdywgY2VsbHMsICdjb2xncm91cCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2VsbHMgPSBtYXAkMShjZWxscyQxKHJvdyksIGNlbGwgPT4ge1xuICAgICAgICAgIGNvbnN0IHJvd3NwYW4gPSBnZXRBdHRyVmFsdWUoY2VsbCwgJ3Jvd3NwYW4nLCAxKTtcbiAgICAgICAgICBjb25zdCBjb2xzcGFuID0gZ2V0QXR0clZhbHVlKGNlbGwsICdjb2xzcGFuJywgMSk7XG4gICAgICAgICAgcmV0dXJuIGRldGFpbChjZWxsLCByb3dzcGFuLCBjb2xzcGFuKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByb3dkZXRhaWwocm93LCBjZWxscywgZ2V0U2VjdGlvbihyb3cpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBnZXRQYXJlbnRTZWN0aW9uID0gZ3JvdXAgPT4gcGFyZW50KGdyb3VwKS5tYXAocGFyZW50ID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudE5hbWUgPSBuYW1lKHBhcmVudCk7XG4gICAgICByZXR1cm4gaXNWYWxpZFNlY3Rpb24ocGFyZW50TmFtZSkgPyBwYXJlbnROYW1lIDogJ3Rib2R5JztcbiAgICB9KS5nZXRPcigndGJvZHknKTtcbiAgICBjb25zdCBmcm9tVGFibGUkMSA9IHRhYmxlID0+IHtcbiAgICAgIGNvbnN0IHJvd3MgPSByb3dzJDEodGFibGUpO1xuICAgICAgY29uc3QgY29sdW1uR3JvdXBzJDEgPSBjb2x1bW5Hcm91cHModGFibGUpO1xuICAgICAgY29uc3QgZWxlbXMgPSBbXG4gICAgICAgIC4uLmNvbHVtbkdyb3VwcyQxLFxuICAgICAgICAuLi5yb3dzXG4gICAgICBdO1xuICAgICAgcmV0dXJuIGZyb21Sb3dzT3JDb2xHcm91cHMoZWxlbXMsIGdldFBhcmVudFNlY3Rpb24pO1xuICAgIH07XG4gICAgY29uc3QgZnJvbVBhc3RlZFJvd3MgPSAoZWxlbXMsIHNlY3Rpb24pID0+IGZyb21Sb3dzT3JDb2xHcm91cHMoZWxlbXMsICgpID0+IHNlY3Rpb24pO1xuXG4gICAgY29uc3QgY2FjaGVkID0gZiA9PiB7XG4gICAgICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gICAgICBsZXQgcjtcbiAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgciA9IGYuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBEZXZpY2VUeXBlID0gKG9zLCBicm93c2VyLCB1c2VyQWdlbnQsIG1lZGlhTWF0Y2gpID0+IHtcbiAgICAgIGNvbnN0IGlzaVBhZCA9IG9zLmlzaU9TKCkgJiYgL2lwYWQvaS50ZXN0KHVzZXJBZ2VudCkgPT09IHRydWU7XG4gICAgICBjb25zdCBpc2lQaG9uZSA9IG9zLmlzaU9TKCkgJiYgIWlzaVBhZDtcbiAgICAgIGNvbnN0IGlzTW9iaWxlID0gb3MuaXNpT1MoKSB8fCBvcy5pc0FuZHJvaWQoKTtcbiAgICAgIGNvbnN0IGlzVG91Y2ggPSBpc01vYmlsZSB8fCBtZWRpYU1hdGNoKCcocG9pbnRlcjpjb2Fyc2UpJyk7XG4gICAgICBjb25zdCBpc1RhYmxldCA9IGlzaVBhZCB8fCAhaXNpUGhvbmUgJiYgaXNNb2JpbGUgJiYgbWVkaWFNYXRjaCgnKG1pbi1kZXZpY2Utd2lkdGg6NzY4cHgpJyk7XG4gICAgICBjb25zdCBpc1Bob25lID0gaXNpUGhvbmUgfHwgaXNNb2JpbGUgJiYgIWlzVGFibGV0O1xuICAgICAgY29uc3QgaU9Td2VidmlldyA9IGJyb3dzZXIuaXNTYWZhcmkoKSAmJiBvcy5pc2lPUygpICYmIC9zYWZhcmkvaS50ZXN0KHVzZXJBZ2VudCkgPT09IGZhbHNlO1xuICAgICAgY29uc3QgaXNEZXNrdG9wID0gIWlzUGhvbmUgJiYgIWlzVGFibGV0ICYmICFpT1N3ZWJ2aWV3O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNpUGFkOiBjb25zdGFudChpc2lQYWQpLFxuICAgICAgICBpc2lQaG9uZTogY29uc3RhbnQoaXNpUGhvbmUpLFxuICAgICAgICBpc1RhYmxldDogY29uc3RhbnQoaXNUYWJsZXQpLFxuICAgICAgICBpc1Bob25lOiBjb25zdGFudChpc1Bob25lKSxcbiAgICAgICAgaXNUb3VjaDogY29uc3RhbnQoaXNUb3VjaCksXG4gICAgICAgIGlzQW5kcm9pZDogb3MuaXNBbmRyb2lkLFxuICAgICAgICBpc2lPUzogb3MuaXNpT1MsXG4gICAgICAgIGlzV2ViVmlldzogY29uc3RhbnQoaU9Td2VidmlldyksXG4gICAgICAgIGlzRGVza3RvcDogY29uc3RhbnQoaXNEZXNrdG9wKVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmlyc3RNYXRjaCA9IChyZWdleGVzLCBzKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlZ2V4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgeCA9IHJlZ2V4ZXNbaV07XG4gICAgICAgIGlmICh4LnRlc3QocykpIHtcbiAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmQgPSAocmVnZXhlcywgYWdlbnQpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBmaXJzdE1hdGNoKHJlZ2V4ZXMsIGFnZW50KTtcbiAgICAgIGlmICghcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1ham9yOiAwLFxuICAgICAgICAgIG1pbm9yOiAwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBncm91cCA9IGkgPT4ge1xuICAgICAgICByZXR1cm4gTnVtYmVyKGFnZW50LnJlcGxhY2UociwgJyQnICsgaSkpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBudSQyKGdyb3VwKDEpLCBncm91cCgyKSk7XG4gICAgfTtcbiAgICBjb25zdCBkZXRlY3QkNSA9ICh2ZXJzaW9uUmVnZXhlcywgYWdlbnQpID0+IHtcbiAgICAgIGNvbnN0IGNsZWFuZWRBZ2VudCA9IFN0cmluZyhhZ2VudCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmICh2ZXJzaW9uUmVnZXhlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVua25vd24kMigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZpbmQodmVyc2lvblJlZ2V4ZXMsIGNsZWFuZWRBZ2VudCk7XG4gICAgfTtcbiAgICBjb25zdCB1bmtub3duJDIgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gbnUkMigwLCAwKTtcbiAgICB9O1xuICAgIGNvbnN0IG51JDIgPSAobWFqb3IsIG1pbm9yKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYWpvcixcbiAgICAgICAgbWlub3JcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBWZXJzaW9uID0ge1xuICAgICAgbnU6IG51JDIsXG4gICAgICBkZXRlY3Q6IGRldGVjdCQ1LFxuICAgICAgdW5rbm93bjogdW5rbm93biQyXG4gICAgfTtcblxuICAgIGNvbnN0IGRldGVjdEJyb3dzZXIkMSA9IChicm93c2VycywgdXNlckFnZW50RGF0YSkgPT4ge1xuICAgICAgcmV0dXJuIGZpbmRNYXAodXNlckFnZW50RGF0YS5icmFuZHMsIHVhQnJhbmQgPT4ge1xuICAgICAgICBjb25zdCBsY0JyYW5kID0gdWFCcmFuZC5icmFuZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gZmluZCQxKGJyb3dzZXJzLCBicm93c2VyID0+IHtcbiAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgcmV0dXJuIGxjQnJhbmQgPT09ICgoX2EgPSBicm93c2VyLmJyYW5kKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH0pLm1hcChpbmZvID0+ICh7XG4gICAgICAgICAgY3VycmVudDogaW5mby5uYW1lLFxuICAgICAgICAgIHZlcnNpb246IFZlcnNpb24ubnUocGFyc2VJbnQodWFCcmFuZC52ZXJzaW9uLCAxMCksIDApXG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBkZXRlY3QkNCA9IChjYW5kaWRhdGVzLCB1c2VyQWdlbnQpID0+IHtcbiAgICAgIGNvbnN0IGFnZW50ID0gU3RyaW5nKHVzZXJBZ2VudCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBmaW5kJDEoY2FuZGlkYXRlcywgY2FuZGlkYXRlID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZS5zZWFyY2goYWdlbnQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBkZXRlY3RCcm93c2VyID0gKGJyb3dzZXJzLCB1c2VyQWdlbnQpID0+IHtcbiAgICAgIHJldHVybiBkZXRlY3QkNChicm93c2VycywgdXNlckFnZW50KS5tYXAoYnJvd3NlciA9PiB7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBWZXJzaW9uLmRldGVjdChicm93c2VyLnZlcnNpb25SZWdleGVzLCB1c2VyQWdlbnQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGN1cnJlbnQ6IGJyb3dzZXIubmFtZSxcbiAgICAgICAgICB2ZXJzaW9uXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGRldGVjdE9zID0gKG9zZXMsIHVzZXJBZ2VudCkgPT4ge1xuICAgICAgcmV0dXJuIGRldGVjdCQ0KG9zZXMsIHVzZXJBZ2VudCkubWFwKG9zID0+IHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IFZlcnNpb24uZGV0ZWN0KG9zLnZlcnNpb25SZWdleGVzLCB1c2VyQWdlbnQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGN1cnJlbnQ6IG9zLm5hbWUsXG4gICAgICAgICAgdmVyc2lvblxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG5vcm1hbFZlcnNpb25SZWdleCA9IC8uKj92ZXJzaW9uXFwvXFwgPyhbMC05XSspXFwuKFswLTldKykuKi87XG4gICAgY29uc3QgY2hlY2tDb250YWlucyA9IHRhcmdldCA9PiB7XG4gICAgICByZXR1cm4gdWFzdHJpbmcgPT4ge1xuICAgICAgICByZXR1cm4gY29udGFpbnModWFzdHJpbmcsIHRhcmdldCk7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgYnJvd3NlcnMgPSBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdFZGdlJyxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFsvLio/ZWRnZVxcLyA/KFswLTldKylcXC4oWzAtOV0rKSQvXSxcbiAgICAgICAgc2VhcmNoOiB1YXN0cmluZyA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRhaW5zKHVhc3RyaW5nLCAnZWRnZS8nKSAmJiBjb250YWlucyh1YXN0cmluZywgJ2Nocm9tZScpICYmIGNvbnRhaW5zKHVhc3RyaW5nLCAnc2FmYXJpJykgJiYgY29udGFpbnModWFzdHJpbmcsICdhcHBsZXdlYmtpdCcpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnQ2hyb21pdW0nLFxuICAgICAgICBicmFuZDogJ0Nocm9taXVtJyxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFtcbiAgICAgICAgICAvLio/Y2hyb21lXFwvKFswLTldKylcXC4oWzAtOV0rKS4qLyxcbiAgICAgICAgICBub3JtYWxWZXJzaW9uUmVnZXhcbiAgICAgICAgXSxcbiAgICAgICAgc2VhcmNoOiB1YXN0cmluZyA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRhaW5zKHVhc3RyaW5nLCAnY2hyb21lJykgJiYgIWNvbnRhaW5zKHVhc3RyaW5nLCAnY2hyb21lZnJhbWUnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0lFJyxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFtcbiAgICAgICAgICAvLio/bXNpZVxcID8oWzAtOV0rKVxcLihbMC05XSspLiovLFxuICAgICAgICAgIC8uKj9ydjooWzAtOV0rKVxcLihbMC05XSspLiovXG4gICAgICAgIF0sXG4gICAgICAgIHNlYXJjaDogdWFzdHJpbmcgPT4ge1xuICAgICAgICAgIHJldHVybiBjb250YWlucyh1YXN0cmluZywgJ21zaWUnKSB8fCBjb250YWlucyh1YXN0cmluZywgJ3RyaWRlbnQnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ09wZXJhJyxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFtcbiAgICAgICAgICBub3JtYWxWZXJzaW9uUmVnZXgsXG4gICAgICAgICAgLy4qP29wZXJhXFwvKFswLTldKylcXC4oWzAtOV0rKS4qL1xuICAgICAgICBdLFxuICAgICAgICBzZWFyY2g6IGNoZWNrQ29udGFpbnMoJ29wZXJhJylcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdGaXJlZm94JyxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFsvLio/ZmlyZWZveFxcL1xcID8oWzAtOV0rKVxcLihbMC05XSspLiovXSxcbiAgICAgICAgc2VhcmNoOiBjaGVja0NvbnRhaW5zKCdmaXJlZm94JylcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTYWZhcmknLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogW1xuICAgICAgICAgIG5vcm1hbFZlcnNpb25SZWdleCxcbiAgICAgICAgICAvLio/Y3B1IG9zIChbMC05XSspXyhbMC05XSspLiovXG4gICAgICAgIF0sXG4gICAgICAgIHNlYXJjaDogdWFzdHJpbmcgPT4ge1xuICAgICAgICAgIHJldHVybiAoY29udGFpbnModWFzdHJpbmcsICdzYWZhcmknKSB8fCBjb250YWlucyh1YXN0cmluZywgJ21vYmlsZS8nKSkgJiYgY29udGFpbnModWFzdHJpbmcsICdhcHBsZXdlYmtpdCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgXTtcbiAgICBjb25zdCBvc2VzID0gW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnV2luZG93cycsXG4gICAgICAgIHNlYXJjaDogY2hlY2tDb250YWlucygnd2luJyksXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbLy4qP3dpbmRvd3NcXCBudFxcID8oWzAtOV0rKVxcLihbMC05XSspLiovXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2lPUycsXG4gICAgICAgIHNlYXJjaDogdWFzdHJpbmcgPT4ge1xuICAgICAgICAgIHJldHVybiBjb250YWlucyh1YXN0cmluZywgJ2lwaG9uZScpIHx8IGNvbnRhaW5zKHVhc3RyaW5nLCAnaXBhZCcpO1xuICAgICAgICB9LFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogW1xuICAgICAgICAgIC8uKj92ZXJzaW9uXFwvXFwgPyhbMC05XSspXFwuKFswLTldKykuKi8sXG4gICAgICAgICAgLy4qY3B1IG9zIChbMC05XSspXyhbMC05XSspLiovLFxuICAgICAgICAgIC8uKmNwdSBpcGhvbmUgb3MgKFswLTldKylfKFswLTldKykuKi9cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0FuZHJvaWQnLFxuICAgICAgICBzZWFyY2g6IGNoZWNrQ29udGFpbnMoJ2FuZHJvaWQnKSxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFsvLio/YW5kcm9pZFxcID8oWzAtOV0rKVxcLihbMC05XSspLiovXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ21hY09TJyxcbiAgICAgICAgc2VhcmNoOiBjaGVja0NvbnRhaW5zKCdtYWMgb3MgeCcpLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogWy8uKj9tYWNcXCBvc1xcIHhcXCA/KFswLTldKylfKFswLTldKykuKi9dXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnTGludXgnLFxuICAgICAgICBzZWFyY2g6IGNoZWNrQ29udGFpbnMoJ2xpbnV4JyksXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1NvbGFyaXMnLFxuICAgICAgICBzZWFyY2g6IGNoZWNrQ29udGFpbnMoJ3N1bm9zJyksXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0ZyZWVCU0QnLFxuICAgICAgICBzZWFyY2g6IGNoZWNrQ29udGFpbnMoJ2ZyZWVic2QnKSxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFtdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnQ2hyb21lT1MnLFxuICAgICAgICBzZWFyY2g6IGNoZWNrQ29udGFpbnMoJ2Nyb3MnKSxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFsvLio/Y2hyb21lXFwvKFswLTldKylcXC4oWzAtOV0rKS4qL11cbiAgICAgIH1cbiAgICBdO1xuICAgIGNvbnN0IFBsYXRmb3JtSW5mbyA9IHtcbiAgICAgIGJyb3dzZXJzOiBjb25zdGFudChicm93c2VycyksXG4gICAgICBvc2VzOiBjb25zdGFudChvc2VzKVxuICAgIH07XG5cbiAgICBjb25zdCBlZGdlID0gJ0VkZ2UnO1xuICAgIGNvbnN0IGNocm9taXVtID0gJ0Nocm9taXVtJztcbiAgICBjb25zdCBpZSA9ICdJRSc7XG4gICAgY29uc3Qgb3BlcmEgPSAnT3BlcmEnO1xuICAgIGNvbnN0IGZpcmVmb3ggPSAnRmlyZWZveCc7XG4gICAgY29uc3Qgc2FmYXJpID0gJ1NhZmFyaSc7XG4gICAgY29uc3QgdW5rbm93biQxID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIG51JDEoe1xuICAgICAgICBjdXJyZW50OiB1bmRlZmluZWQsXG4gICAgICAgIHZlcnNpb246IFZlcnNpb24udW5rbm93bigpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG51JDEgPSBpbmZvID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBpbmZvLmN1cnJlbnQ7XG4gICAgICBjb25zdCB2ZXJzaW9uID0gaW5mby52ZXJzaW9uO1xuICAgICAgY29uc3QgaXNCcm93c2VyID0gbmFtZSA9PiAoKSA9PiBjdXJyZW50ID09PSBuYW1lO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgaXNFZGdlOiBpc0Jyb3dzZXIoZWRnZSksXG4gICAgICAgIGlzQ2hyb21pdW06IGlzQnJvd3NlcihjaHJvbWl1bSksXG4gICAgICAgIGlzSUU6IGlzQnJvd3NlcihpZSksXG4gICAgICAgIGlzT3BlcmE6IGlzQnJvd3NlcihvcGVyYSksXG4gICAgICAgIGlzRmlyZWZveDogaXNCcm93c2VyKGZpcmVmb3gpLFxuICAgICAgICBpc1NhZmFyaTogaXNCcm93c2VyKHNhZmFyaSlcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBCcm93c2VyID0ge1xuICAgICAgdW5rbm93bjogdW5rbm93biQxLFxuICAgICAgbnU6IG51JDEsXG4gICAgICBlZGdlOiBjb25zdGFudChlZGdlKSxcbiAgICAgIGNocm9taXVtOiBjb25zdGFudChjaHJvbWl1bSksXG4gICAgICBpZTogY29uc3RhbnQoaWUpLFxuICAgICAgb3BlcmE6IGNvbnN0YW50KG9wZXJhKSxcbiAgICAgIGZpcmVmb3g6IGNvbnN0YW50KGZpcmVmb3gpLFxuICAgICAgc2FmYXJpOiBjb25zdGFudChzYWZhcmkpXG4gICAgfTtcblxuICAgIGNvbnN0IHdpbmRvd3MgPSAnV2luZG93cyc7XG4gICAgY29uc3QgaW9zID0gJ2lPUyc7XG4gICAgY29uc3QgYW5kcm9pZCA9ICdBbmRyb2lkJztcbiAgICBjb25zdCBsaW51eCA9ICdMaW51eCc7XG4gICAgY29uc3QgbWFjb3MgPSAnbWFjT1MnO1xuICAgIGNvbnN0IHNvbGFyaXMgPSAnU29sYXJpcyc7XG4gICAgY29uc3QgZnJlZWJzZCA9ICdGcmVlQlNEJztcbiAgICBjb25zdCBjaHJvbWVvcyA9ICdDaHJvbWVPUyc7XG4gICAgY29uc3QgdW5rbm93biA9ICgpID0+IHtcbiAgICAgIHJldHVybiBudSh7XG4gICAgICAgIGN1cnJlbnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgdmVyc2lvbjogVmVyc2lvbi51bmtub3duKClcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbnUgPSBpbmZvID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBpbmZvLmN1cnJlbnQ7XG4gICAgICBjb25zdCB2ZXJzaW9uID0gaW5mby52ZXJzaW9uO1xuICAgICAgY29uc3QgaXNPUyA9IG5hbWUgPT4gKCkgPT4gY3VycmVudCA9PT0gbmFtZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIGlzV2luZG93czogaXNPUyh3aW5kb3dzKSxcbiAgICAgICAgaXNpT1M6IGlzT1MoaW9zKSxcbiAgICAgICAgaXNBbmRyb2lkOiBpc09TKGFuZHJvaWQpLFxuICAgICAgICBpc01hY09TOiBpc09TKG1hY29zKSxcbiAgICAgICAgaXNMaW51eDogaXNPUyhsaW51eCksXG4gICAgICAgIGlzU29sYXJpczogaXNPUyhzb2xhcmlzKSxcbiAgICAgICAgaXNGcmVlQlNEOiBpc09TKGZyZWVic2QpLFxuICAgICAgICBpc0Nocm9tZU9TOiBpc09TKGNocm9tZW9zKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IE9wZXJhdGluZ1N5c3RlbSA9IHtcbiAgICAgIHVua25vd24sXG4gICAgICBudSxcbiAgICAgIHdpbmRvd3M6IGNvbnN0YW50KHdpbmRvd3MpLFxuICAgICAgaW9zOiBjb25zdGFudChpb3MpLFxuICAgICAgYW5kcm9pZDogY29uc3RhbnQoYW5kcm9pZCksXG4gICAgICBsaW51eDogY29uc3RhbnQobGludXgpLFxuICAgICAgbWFjb3M6IGNvbnN0YW50KG1hY29zKSxcbiAgICAgIHNvbGFyaXM6IGNvbnN0YW50KHNvbGFyaXMpLFxuICAgICAgZnJlZWJzZDogY29uc3RhbnQoZnJlZWJzZCksXG4gICAgICBjaHJvbWVvczogY29uc3RhbnQoY2hyb21lb3MpXG4gICAgfTtcblxuICAgIGNvbnN0IGRldGVjdCQzID0gKHVzZXJBZ2VudCwgdXNlckFnZW50RGF0YU9wdCwgbWVkaWFNYXRjaCkgPT4ge1xuICAgICAgY29uc3QgYnJvd3NlcnMgPSBQbGF0Zm9ybUluZm8uYnJvd3NlcnMoKTtcbiAgICAgIGNvbnN0IG9zZXMgPSBQbGF0Zm9ybUluZm8ub3NlcygpO1xuICAgICAgY29uc3QgYnJvd3NlciA9IHVzZXJBZ2VudERhdGFPcHQuYmluZCh1c2VyQWdlbnREYXRhID0+IGRldGVjdEJyb3dzZXIkMShicm93c2VycywgdXNlckFnZW50RGF0YSkpLm9yVGh1bmsoKCkgPT4gZGV0ZWN0QnJvd3Nlcihicm93c2VycywgdXNlckFnZW50KSkuZm9sZChCcm93c2VyLnVua25vd24sIEJyb3dzZXIubnUpO1xuICAgICAgY29uc3Qgb3MgPSBkZXRlY3RPcyhvc2VzLCB1c2VyQWdlbnQpLmZvbGQoT3BlcmF0aW5nU3lzdGVtLnVua25vd24sIE9wZXJhdGluZ1N5c3RlbS5udSk7XG4gICAgICBjb25zdCBkZXZpY2VUeXBlID0gRGV2aWNlVHlwZShvcywgYnJvd3NlciwgdXNlckFnZW50LCBtZWRpYU1hdGNoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJyb3dzZXIsXG4gICAgICAgIG9zLFxuICAgICAgICBkZXZpY2VUeXBlXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgUGxhdGZvcm1EZXRlY3Rpb24gPSB7IGRldGVjdDogZGV0ZWN0JDMgfTtcblxuICAgIGNvbnN0IG1lZGlhTWF0Y2ggPSBxdWVyeSA9PiB3aW5kb3cubWF0Y2hNZWRpYShxdWVyeSkubWF0Y2hlcztcbiAgICBsZXQgcGxhdGZvcm0gPSBjYWNoZWQoKCkgPT4gUGxhdGZvcm1EZXRlY3Rpb24uZGV0ZWN0KG5hdmlnYXRvci51c2VyQWdlbnQsIE9wdGlvbmFsLmZyb20obmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpLCBtZWRpYU1hdGNoKSk7XG4gICAgY29uc3QgZGV0ZWN0JDIgPSAoKSA9PiBwbGF0Zm9ybSgpO1xuXG4gICAgY29uc3QgRGltZW5zaW9uID0gKG5hbWUsIGdldE9mZnNldCkgPT4ge1xuICAgICAgY29uc3Qgc2V0ID0gKGVsZW1lbnQsIGgpID0+IHtcbiAgICAgICAgaWYgKCFpc051bWJlcihoKSAmJiAhaC5tYXRjaCgvXlswLTldKyQvKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihuYW1lICsgJy5zZXQgYWNjZXB0cyBvbmx5IHBvc2l0aXZlIGludGVnZXIgdmFsdWVzLiBWYWx1ZSB3YXMgJyArIGgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgICBpZiAoaXNTdXBwb3J0ZWQoZG9tKSkge1xuICAgICAgICAgIGRvbS5zdHlsZVtuYW1lXSA9IGggKyAncHgnO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0ID0gZWxlbWVudCA9PiB7XG4gICAgICAgIGNvbnN0IHIgPSBnZXRPZmZzZXQoZWxlbWVudCk7XG4gICAgICAgIGlmIChyIDw9IDAgfHwgciA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IGNzcyA9IGdldCRhKGVsZW1lbnQsIG5hbWUpO1xuICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KGNzcykgfHwgMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRPdXRlciA9IGdldDtcbiAgICAgIGNvbnN0IGFnZ3JlZ2F0ZSA9IChlbGVtZW50LCBwcm9wZXJ0aWVzKSA9PiBmb2xkbChwcm9wZXJ0aWVzLCAoYWNjLCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSBnZXQkYShlbGVtZW50LCBwcm9wZXJ0eSk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdmFsID09PSB1bmRlZmluZWQgPyAwIDogcGFyc2VJbnQodmFsLCAxMCk7XG4gICAgICAgIHJldHVybiBpc05hTih2YWx1ZSkgPyBhY2MgOiBhY2MgKyB2YWx1ZTtcbiAgICAgIH0sIDApO1xuICAgICAgY29uc3QgbWF4ID0gKGVsZW1lbnQsIHZhbHVlLCBwcm9wZXJ0aWVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGN1bXVsYXRpdmVJbmNsdXNpb25zID0gYWdncmVnYXRlKGVsZW1lbnQsIHByb3BlcnRpZXMpO1xuICAgICAgICBjb25zdCBhYnNvbHV0ZU1heCA9IHZhbHVlID4gY3VtdWxhdGl2ZUluY2x1c2lvbnMgPyB2YWx1ZSAtIGN1bXVsYXRpdmVJbmNsdXNpb25zIDogMDtcbiAgICAgICAgcmV0dXJuIGFic29sdXRlTWF4O1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNldCxcbiAgICAgICAgZ2V0LFxuICAgICAgICBnZXRPdXRlcixcbiAgICAgICAgYWdncmVnYXRlLFxuICAgICAgICBtYXhcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHRvTnVtYmVyID0gKHB4LCBmYWxsYmFjaykgPT4gdG9GbG9hdChweCkuZ2V0T3IoZmFsbGJhY2spO1xuICAgIGNvbnN0IGdldFByb3AgPSAoZWxlbWVudCwgbmFtZSwgZmFsbGJhY2spID0+IHRvTnVtYmVyKGdldCRhKGVsZW1lbnQsIG5hbWUpLCBmYWxsYmFjayk7XG4gICAgY29uc3QgY2FsY0NvbnRlbnRCb3hTaXplID0gKGVsZW1lbnQsIHNpemUsIHVwcGVyLCBsb3dlcikgPT4ge1xuICAgICAgY29uc3QgcGFkZGluZ1VwcGVyID0gZ2V0UHJvcChlbGVtZW50LCBgcGFkZGluZy0keyB1cHBlciB9YCwgMCk7XG4gICAgICBjb25zdCBwYWRkaW5nTG93ZXIgPSBnZXRQcm9wKGVsZW1lbnQsIGBwYWRkaW5nLSR7IGxvd2VyIH1gLCAwKTtcbiAgICAgIGNvbnN0IGJvcmRlclVwcGVyID0gZ2V0UHJvcChlbGVtZW50LCBgYm9yZGVyLSR7IHVwcGVyIH0td2lkdGhgLCAwKTtcbiAgICAgIGNvbnN0IGJvcmRlckxvd2VyID0gZ2V0UHJvcChlbGVtZW50LCBgYm9yZGVyLSR7IGxvd2VyIH0td2lkdGhgLCAwKTtcbiAgICAgIHJldHVybiBzaXplIC0gcGFkZGluZ1VwcGVyIC0gcGFkZGluZ0xvd2VyIC0gYm9yZGVyVXBwZXIgLSBib3JkZXJMb3dlcjtcbiAgICB9O1xuICAgIGNvbnN0IGdldENhbGN1bGF0ZWRXaWR0aCA9IChlbGVtZW50LCBib3hTaXppbmcpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgY29uc3Qgd2lkdGggPSBkb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggfHwgZG9tLm9mZnNldFdpZHRoO1xuICAgICAgcmV0dXJuIGJveFNpemluZyA9PT0gJ2JvcmRlci1ib3gnID8gd2lkdGggOiBjYWxjQ29udGVudEJveFNpemUoZWxlbWVudCwgd2lkdGgsICdsZWZ0JywgJ3JpZ2h0Jyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRIZWlnaHQkMSA9IGVsZW1lbnQgPT4gZ2V0UHJvcChlbGVtZW50LCAnaGVpZ2h0JywgZWxlbWVudC5kb20ub2Zmc2V0SGVpZ2h0KTtcbiAgICBjb25zdCBnZXRXaWR0aCA9IGVsZW1lbnQgPT4gZ2V0UHJvcChlbGVtZW50LCAnd2lkdGgnLCBlbGVtZW50LmRvbS5vZmZzZXRXaWR0aCk7XG4gICAgY29uc3QgZ2V0SW5uZXJXaWR0aCA9IGVsZW1lbnQgPT4gZ2V0Q2FsY3VsYXRlZFdpZHRoKGVsZW1lbnQsICdjb250ZW50LWJveCcpO1xuXG4gICAgY29uc3QgYXBpJDIgPSBEaW1lbnNpb24oJ3dpZHRoJywgZWxlbWVudCA9PiBlbGVtZW50LmRvbS5vZmZzZXRXaWR0aCk7XG4gICAgY29uc3QgZ2V0JDkgPSBlbGVtZW50ID0+IGFwaSQyLmdldChlbGVtZW50KTtcbiAgICBjb25zdCBnZXRPdXRlciQyID0gZWxlbWVudCA9PiBhcGkkMi5nZXRPdXRlcihlbGVtZW50KTtcbiAgICBjb25zdCBnZXRJbm5lciA9IGdldElubmVyV2lkdGg7XG4gICAgY29uc3QgZ2V0UnVudGltZSQxID0gZ2V0V2lkdGg7XG5cbiAgICBjb25zdCBhZGRDZWxscyA9IChncmlkUm93LCBpbmRleCwgY2VsbHMpID0+IHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nQ2VsbHMgPSBncmlkUm93LmNlbGxzO1xuICAgICAgY29uc3QgYmVmb3JlID0gZXhpc3RpbmdDZWxscy5zbGljZSgwLCBpbmRleCk7XG4gICAgICBjb25zdCBhZnRlciA9IGV4aXN0aW5nQ2VsbHMuc2xpY2UoaW5kZXgpO1xuICAgICAgY29uc3QgbmV3Q2VsbHMgPSBiZWZvcmUuY29uY2F0KGNlbGxzKS5jb25jYXQoYWZ0ZXIpO1xuICAgICAgcmV0dXJuIHNldENlbGxzKGdyaWRSb3csIG5ld0NlbGxzKTtcbiAgICB9O1xuICAgIGNvbnN0IGFkZENlbGwgPSAoZ3JpZFJvdywgaW5kZXgsIGNlbGwpID0+IGFkZENlbGxzKGdyaWRSb3csIGluZGV4LCBbY2VsbF0pO1xuICAgIGNvbnN0IG11dGF0ZUNlbGwgPSAoZ3JpZFJvdywgaW5kZXgsIGNlbGwpID0+IHtcbiAgICAgIGNvbnN0IGNlbGxzID0gZ3JpZFJvdy5jZWxscztcbiAgICAgIGNlbGxzW2luZGV4XSA9IGNlbGw7XG4gICAgfTtcbiAgICBjb25zdCBzZXRDZWxscyA9IChncmlkUm93LCBjZWxscykgPT4gcm93Y2VsbHMoZ3JpZFJvdy5lbGVtZW50LCBjZWxscywgZ3JpZFJvdy5zZWN0aW9uLCBncmlkUm93LmlzTmV3KTtcbiAgICBjb25zdCBtYXBDZWxscyA9IChncmlkUm93LCBmKSA9PiB7XG4gICAgICBjb25zdCBjZWxscyA9IGdyaWRSb3cuY2VsbHM7XG4gICAgICBjb25zdCByID0gbWFwJDEoY2VsbHMsIGYpO1xuICAgICAgcmV0dXJuIHJvd2NlbGxzKGdyaWRSb3cuZWxlbWVudCwgciwgZ3JpZFJvdy5zZWN0aW9uLCBncmlkUm93LmlzTmV3KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldENlbGwgPSAoZ3JpZFJvdywgaW5kZXgpID0+IGdyaWRSb3cuY2VsbHNbaW5kZXhdO1xuICAgIGNvbnN0IGdldENlbGxFbGVtZW50ID0gKGdyaWRSb3csIGluZGV4KSA9PiBnZXRDZWxsKGdyaWRSb3csIGluZGV4KS5lbGVtZW50O1xuICAgIGNvbnN0IGNlbGxMZW5ndGggPSBncmlkUm93ID0+IGdyaWRSb3cuY2VsbHMubGVuZ3RoO1xuICAgIGNvbnN0IGV4dHJhY3RHcmlkRGV0YWlscyA9IGdyaWQgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcGFydGl0aW9uKGdyaWQsIHJvdyA9PiByb3cuc2VjdGlvbiA9PT0gJ2NvbGdyb3VwJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByb3dzOiByZXN1bHQuZmFpbCxcbiAgICAgICAgY29sczogcmVzdWx0LnBhc3NcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjbG9uZSA9IChncmlkUm93LCBjbG9uZVJvdywgY2xvbmVDZWxsKSA9PiB7XG4gICAgICBjb25zdCBuZXdDZWxscyA9IG1hcCQxKGdyaWRSb3cuY2VsbHMsIGNsb25lQ2VsbCk7XG4gICAgICByZXR1cm4gcm93Y2VsbHMoY2xvbmVSb3coZ3JpZFJvdy5lbGVtZW50KSwgbmV3Q2VsbHMsIGdyaWRSb3cuc2VjdGlvbiwgdHJ1ZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IExPQ0tFRF9DT0xfQVRUUiA9ICdkYXRhLXNub29rZXItbG9ja2VkLWNvbHMnO1xuICAgIGNvbnN0IGdldExvY2tlZENvbHVtbnNGcm9tVGFibGUgPSB0YWJsZSA9PiBnZXRPcHQodGFibGUsIExPQ0tFRF9DT0xfQVRUUikuYmluZChsb2NrZWRDb2xTdHIgPT4gT3B0aW9uYWwuZnJvbShsb2NrZWRDb2xTdHIubWF0Y2goL1xcZCsvZykpKS5tYXAobG9ja2VkQ29scyA9PiBtYXBUb09iamVjdChsb2NrZWRDb2xzLCBhbHdheXMpKTtcbiAgICBjb25zdCBnZXRMb2NrZWRDb2x1bW5zRnJvbUdyaWQgPSBncmlkID0+IHtcbiAgICAgIGNvbnN0IGxvY2tlZCA9IGZvbGRsKGV4dHJhY3RHcmlkRGV0YWlscyhncmlkKS5yb3dzLCAoYWNjLCByb3cpID0+IHtcbiAgICAgICAgZWFjaCQyKHJvdy5jZWxscywgKGNlbGwsIGlkeCkgPT4ge1xuICAgICAgICAgIGlmIChjZWxsLmlzTG9ja2VkKSB7XG4gICAgICAgICAgICBhY2NbaWR4XSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9KTtcbiAgICAgIGNvbnN0IGxvY2tlZEFyciA9IG1hcFRvQXJyYXkobG9ja2VkLCAoX3ZhbCwga2V5KSA9PiBwYXJzZUludChrZXksIDEwKSk7XG4gICAgICByZXR1cm4gc29ydCQxKGxvY2tlZEFycik7XG4gICAgfTtcblxuICAgIGNvbnN0IGtleSA9IChyb3csIGNvbHVtbikgPT4ge1xuICAgICAgcmV0dXJuIHJvdyArICcsJyArIGNvbHVtbjtcbiAgICB9O1xuICAgIGNvbnN0IGdldEF0ID0gKHdhcmVob3VzZSwgcm93LCBjb2x1bW4pID0+IE9wdGlvbmFsLmZyb20od2FyZWhvdXNlLmFjY2Vzc1trZXkocm93LCBjb2x1bW4pXSk7XG4gICAgY29uc3QgZmluZEl0ZW0gPSAod2FyZWhvdXNlLCBpdGVtLCBjb21wYXJhdG9yKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IGZpbHRlckl0ZW1zKHdhcmVob3VzZSwgZGV0YWlsID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmF0b3IoaXRlbSwgZGV0YWlsLmVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmlsdGVyZWQubGVuZ3RoID4gMCA/IE9wdGlvbmFsLnNvbWUoZmlsdGVyZWRbMF0pIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgZmlsdGVySXRlbXMgPSAod2FyZWhvdXNlLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGNvbnN0IGFsbCA9IGJpbmQkMih3YXJlaG91c2UuYWxsLCByID0+IHtcbiAgICAgICAgcmV0dXJuIHIuY2VsbHM7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmaWx0ZXIkMihhbGwsIHByZWRpY2F0ZSk7XG4gICAgfTtcbiAgICBjb25zdCBnZW5lcmF0ZUNvbHVtbnMgPSByb3dEYXRhID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtbnNHcm91cCA9IHt9O1xuICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgIGVhY2gkMihyb3dEYXRhLmNlbGxzLCBjb2x1bW4gPT4ge1xuICAgICAgICBjb25zdCBjb2xzcGFuID0gY29sdW1uLmNvbHNwYW47XG4gICAgICAgIHJhbmdlJDEoY29sc3BhbiwgY29sdW1uSW5kZXggPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbEluZGV4ID0gaW5kZXggKyBjb2x1bW5JbmRleDtcbiAgICAgICAgICBjb2x1bW5zR3JvdXBbY29sSW5kZXhdID0gY29sdW1uZXh0KGNvbHVtbi5lbGVtZW50LCBjb2xzcGFuLCBjb2xJbmRleCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpbmRleCArPSBjb2xzcGFuO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29sdW1uc0dyb3VwO1xuICAgIH07XG4gICAgY29uc3QgZ2VuZXJhdGUkMSA9IGxpc3QgPT4ge1xuICAgICAgY29uc3QgYWNjZXNzID0ge307XG4gICAgICBjb25zdCBjZWxscyA9IFtdO1xuICAgICAgY29uc3QgdGFibGVPcHQgPSBoZWFkKGxpc3QpLm1hcChyb3dEYXRhID0+IHJvd0RhdGEuZWxlbWVudCkuYmluZCh0YWJsZSk7XG4gICAgICBjb25zdCBsb2NrZWRDb2x1bW5zID0gdGFibGVPcHQuYmluZChnZXRMb2NrZWRDb2x1bW5zRnJvbVRhYmxlKS5nZXRPcih7fSk7XG4gICAgICBsZXQgbWF4Um93cyA9IDA7XG4gICAgICBsZXQgbWF4Q29sdW1ucyA9IDA7XG4gICAgICBsZXQgcm93Q291bnQgPSAwO1xuICAgICAgY29uc3Qge1xuICAgICAgICBwYXNzOiBjb2xncm91cFJvd3MsXG4gICAgICAgIGZhaWw6IHJvd3NcbiAgICAgIH0gPSBwYXJ0aXRpb24obGlzdCwgcm93RGF0YSA9PiByb3dEYXRhLnNlY3Rpb24gPT09ICdjb2xncm91cCcpO1xuICAgICAgZWFjaCQyKHJvd3MsIHJvd0RhdGEgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50Um93ID0gW107XG4gICAgICAgIGVhY2gkMihyb3dEYXRhLmNlbGxzLCByb3dDZWxsID0+IHtcbiAgICAgICAgICBsZXQgc3RhcnQgPSAwO1xuICAgICAgICAgIHdoaWxlIChhY2Nlc3Nba2V5KHJvd0NvdW50LCBzdGFydCldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0YXJ0Kys7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGlzTG9ja2VkID0gaGFzTm9uTnVsbGFibGVLZXkobG9ja2VkQ29sdW1ucywgc3RhcnQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgY29uc3QgY3VycmVudCA9IGV4dGVuZGVkKHJvd0NlbGwuZWxlbWVudCwgcm93Q2VsbC5yb3dzcGFuLCByb3dDZWxsLmNvbHNwYW4sIHJvd0NvdW50LCBzdGFydCwgaXNMb2NrZWQpO1xuICAgICAgICAgIGZvciAobGV0IG9jY3VwaWVkQ29sdW1uUG9zaXRpb24gPSAwOyBvY2N1cGllZENvbHVtblBvc2l0aW9uIDwgcm93Q2VsbC5jb2xzcGFuOyBvY2N1cGllZENvbHVtblBvc2l0aW9uKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IG9jY3VwaWVkUm93UG9zaXRpb24gPSAwOyBvY2N1cGllZFJvd1Bvc2l0aW9uIDwgcm93Q2VsbC5yb3dzcGFuOyBvY2N1cGllZFJvd1Bvc2l0aW9uKyspIHtcbiAgICAgICAgICAgICAgY29uc3Qgcm93UG9zaXRpb24gPSByb3dDb3VudCArIG9jY3VwaWVkUm93UG9zaXRpb247XG4gICAgICAgICAgICAgIGNvbnN0IGNvbHVtblBvc2l0aW9uID0gc3RhcnQgKyBvY2N1cGllZENvbHVtblBvc2l0aW9uO1xuICAgICAgICAgICAgICBjb25zdCBuZXdwb3MgPSBrZXkocm93UG9zaXRpb24sIGNvbHVtblBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgYWNjZXNzW25ld3Bvc10gPSBjdXJyZW50O1xuICAgICAgICAgICAgICBtYXhDb2x1bW5zID0gTWF0aC5tYXgobWF4Q29sdW1ucywgY29sdW1uUG9zaXRpb24gKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudFJvdy5wdXNoKGN1cnJlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgbWF4Um93cysrO1xuICAgICAgICBjZWxscy5wdXNoKHJvd2RldGFpbChyb3dEYXRhLmVsZW1lbnQsIGN1cnJlbnRSb3csIHJvd0RhdGEuc2VjdGlvbikpO1xuICAgICAgICByb3dDb3VudCsrO1xuICAgICAgfSk7XG4gICAgICBjb25zdCB7Y29sdW1ucywgY29sZ3JvdXBzfSA9IGxhc3QkMihjb2xncm91cFJvd3MpLm1hcChyb3dEYXRhID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IGdlbmVyYXRlQ29sdW1ucyhyb3dEYXRhKTtcbiAgICAgICAgY29uc3QgY29sZ3JvdXAkMSA9IGNvbGdyb3VwKHJvd0RhdGEuZWxlbWVudCwgdmFsdWVzKGNvbHVtbnMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb2xncm91cHM6IFtjb2xncm91cCQxXSxcbiAgICAgICAgICBjb2x1bW5zXG4gICAgICAgIH07XG4gICAgICB9KS5nZXRPclRodW5rKCgpID0+ICh7XG4gICAgICAgIGNvbGdyb3VwczogW10sXG4gICAgICAgIGNvbHVtbnM6IHt9XG4gICAgICB9KSk7XG4gICAgICBjb25zdCBncmlkJDEgPSBncmlkKG1heFJvd3MsIG1heENvbHVtbnMpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ3JpZDogZ3JpZCQxLFxuICAgICAgICBhY2Nlc3MsXG4gICAgICAgIGFsbDogY2VsbHMsXG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIGNvbGdyb3Vwc1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21UYWJsZSA9IHRhYmxlID0+IHtcbiAgICAgIGNvbnN0IGxpc3QgPSBmcm9tVGFibGUkMSh0YWJsZSk7XG4gICAgICByZXR1cm4gZ2VuZXJhdGUkMShsaXN0KTtcbiAgICB9O1xuICAgIGNvbnN0IGp1c3RDZWxscyA9IHdhcmVob3VzZSA9PiBiaW5kJDIod2FyZWhvdXNlLmFsbCwgdyA9PiB3LmNlbGxzKTtcbiAgICBjb25zdCBqdXN0Q29sdW1ucyA9IHdhcmVob3VzZSA9PiB2YWx1ZXMod2FyZWhvdXNlLmNvbHVtbnMpO1xuICAgIGNvbnN0IGhhc0NvbHVtbnMgPSB3YXJlaG91c2UgPT4ga2V5cyh3YXJlaG91c2UuY29sdW1ucykubGVuZ3RoID4gMDtcbiAgICBjb25zdCBnZXRDb2x1bW5BdCA9ICh3YXJlaG91c2UsIGNvbHVtbkluZGV4KSA9PiBPcHRpb25hbC5mcm9tKHdhcmVob3VzZS5jb2x1bW5zW2NvbHVtbkluZGV4XSk7XG4gICAgY29uc3QgV2FyZWhvdXNlID0ge1xuICAgICAgZnJvbVRhYmxlLFxuICAgICAgZ2VuZXJhdGU6IGdlbmVyYXRlJDEsXG4gICAgICBnZXRBdCxcbiAgICAgIGZpbmRJdGVtLFxuICAgICAgZmlsdGVySXRlbXMsXG4gICAgICBqdXN0Q2VsbHMsXG4gICAgICBqdXN0Q29sdW1ucyxcbiAgICAgIGhhc0NvbHVtbnMsXG4gICAgICBnZXRDb2x1bW5BdFxuICAgIH07XG5cbiAgICBjb25zdCBjb2x1bW5zID0gKHdhcmVob3VzZSwgaXNWYWxpZENlbGwgPSBhbHdheXMpID0+IHtcbiAgICAgIGNvbnN0IGdyaWQgPSB3YXJlaG91c2UuZ3JpZDtcbiAgICAgIGNvbnN0IGNvbHMgPSByYW5nZSQxKGdyaWQuY29sdW1ucywgaWRlbnRpdHkpO1xuICAgICAgY29uc3Qgcm93c0FyciA9IHJhbmdlJDEoZ3JpZC5yb3dzLCBpZGVudGl0eSk7XG4gICAgICByZXR1cm4gbWFwJDEoY29scywgY29sID0+IHtcbiAgICAgICAgY29uc3QgZ2V0QmxvY2sgPSAoKSA9PiBiaW5kJDIocm93c0FyciwgciA9PiBXYXJlaG91c2UuZ2V0QXQod2FyZWhvdXNlLCByLCBjb2wpLmZpbHRlcihkZXRhaWwgPT4gZGV0YWlsLmNvbHVtbiA9PT0gY29sKS50b0FycmF5KCkpO1xuICAgICAgICBjb25zdCBpc1ZhbGlkID0gZGV0YWlsID0+IGRldGFpbC5jb2xzcGFuID09PSAxICYmIGlzVmFsaWRDZWxsKGRldGFpbC5lbGVtZW50KTtcbiAgICAgICAgY29uc3QgZ2V0RmFsbGJhY2sgPSAoKSA9PiBXYXJlaG91c2UuZ2V0QXQod2FyZWhvdXNlLCAwLCBjb2wpO1xuICAgICAgICByZXR1cm4gZGVjaWRlKGdldEJsb2NrLCBpc1ZhbGlkLCBnZXRGYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGRlY2lkZSA9IChnZXRCbG9jaywgaXNWYWxpZCwgZ2V0RmFsbGJhY2spID0+IHtcbiAgICAgIGNvbnN0IGluQmxvY2sgPSBnZXRCbG9jaygpO1xuICAgICAgY29uc3QgdmFsaWRJbkJsb2NrID0gZmluZCQxKGluQmxvY2ssIGlzVmFsaWQpO1xuICAgICAgY29uc3QgZGV0YWlsT3B0aW9uID0gdmFsaWRJbkJsb2NrLm9yVGh1bmsoKCkgPT4gT3B0aW9uYWwuZnJvbShpbkJsb2NrWzBdKS5vclRodW5rKGdldEZhbGxiYWNrKSk7XG4gICAgICByZXR1cm4gZGV0YWlsT3B0aW9uLm1hcChkZXRhaWwgPT4gZGV0YWlsLmVsZW1lbnQpO1xuICAgIH07XG4gICAgY29uc3Qgcm93cyA9IHdhcmVob3VzZSA9PiB7XG4gICAgICBjb25zdCBncmlkID0gd2FyZWhvdXNlLmdyaWQ7XG4gICAgICBjb25zdCByb3dzQXJyID0gcmFuZ2UkMShncmlkLnJvd3MsIGlkZW50aXR5KTtcbiAgICAgIGNvbnN0IGNvbHMgPSByYW5nZSQxKGdyaWQuY29sdW1ucywgaWRlbnRpdHkpO1xuICAgICAgcmV0dXJuIG1hcCQxKHJvd3NBcnIsIHJvdyA9PiB7XG4gICAgICAgIGNvbnN0IGdldEJsb2NrID0gKCkgPT4gYmluZCQyKGNvbHMsIGMgPT4gV2FyZWhvdXNlLmdldEF0KHdhcmVob3VzZSwgcm93LCBjKS5maWx0ZXIoZGV0YWlsID0+IGRldGFpbC5yb3cgPT09IHJvdykuZm9sZChjb25zdGFudChbXSksIGRldGFpbCA9PiBbZGV0YWlsXSkpO1xuICAgICAgICBjb25zdCBpc1NpbmdsZSA9IGRldGFpbCA9PiBkZXRhaWwucm93c3BhbiA9PT0gMTtcbiAgICAgICAgY29uc3QgZ2V0RmFsbGJhY2sgPSAoKSA9PiBXYXJlaG91c2UuZ2V0QXQod2FyZWhvdXNlLCByb3csIDApO1xuICAgICAgICByZXR1cm4gZGVjaWRlKGdldEJsb2NrLCBpc1NpbmdsZSwgZ2V0RmFsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGRlZHVjZSA9ICh4cywgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0geHMubGVuZ3RoIC0gMSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgY3VycmVudCA9IHhzW2luZGV4XS5mb2xkKCgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdCA9IHJldmVyc2UoeHMuc2xpY2UoMCwgaW5kZXgpKTtcbiAgICAgICAgcmV0dXJuIGZpbmRNYXAocmVzdCwgKGEsIGkpID0+IGEubWFwKGFhID0+ICh7XG4gICAgICAgICAgdmFsdWU6IGFhLFxuICAgICAgICAgIGRlbHRhOiBpICsgMVxuICAgICAgICB9KSkpO1xuICAgICAgfSwgYyA9PiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgdmFsdWU6IGMsXG4gICAgICAgIGRlbHRhOiAwXG4gICAgICB9KSk7XG4gICAgICBjb25zdCBuZXh0ID0geHNbaW5kZXggKyAxXS5mb2xkKCgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdCA9IHhzLnNsaWNlKGluZGV4ICsgMSk7XG4gICAgICAgIHJldHVybiBmaW5kTWFwKHJlc3QsIChhLCBpKSA9PiBhLm1hcChhYSA9PiAoe1xuICAgICAgICAgIHZhbHVlOiBhYSxcbiAgICAgICAgICBkZWx0YTogaSArIDFcbiAgICAgICAgfSkpKTtcbiAgICAgIH0sIG4gPT4gT3B0aW9uYWwuc29tZSh7XG4gICAgICAgIHZhbHVlOiBuLFxuICAgICAgICBkZWx0YTogMVxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIGN1cnJlbnQuYmluZChjID0+IG5leHQubWFwKG4gPT4ge1xuICAgICAgICBjb25zdCBleHRyYXMgPSBuLmRlbHRhICsgYy5kZWx0YTtcbiAgICAgICAgcmV0dXJuIE1hdGguYWJzKG4udmFsdWUgLSBjLnZhbHVlKSAvIGV4dHJhcztcbiAgICAgIH0pKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25EaXJlY3Rpb24gPSAoaXNMdHIsIGlzUnRsKSA9PiBlbGVtZW50ID0+IGdldERpcmVjdGlvbihlbGVtZW50KSA9PT0gJ3J0bCcgPyBpc1J0bCA6IGlzTHRyO1xuICAgIGNvbnN0IGdldERpcmVjdGlvbiA9IGVsZW1lbnQgPT4gZ2V0JGEoZWxlbWVudCwgJ2RpcmVjdGlvbicpID09PSAncnRsJyA/ICdydGwnIDogJ2x0cic7XG5cbiAgICBjb25zdCBhcGkkMSA9IERpbWVuc2lvbignaGVpZ2h0JywgZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIHJldHVybiBpbkJvZHkoZWxlbWVudCkgPyBkb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0IDogZG9tLm9mZnNldEhlaWdodDtcbiAgICB9KTtcbiAgICBjb25zdCBnZXQkOCA9IGVsZW1lbnQgPT4gYXBpJDEuZ2V0KGVsZW1lbnQpO1xuICAgIGNvbnN0IGdldE91dGVyJDEgPSBlbGVtZW50ID0+IGFwaSQxLmdldE91dGVyKGVsZW1lbnQpO1xuICAgIGNvbnN0IGdldFJ1bnRpbWUgPSBnZXRIZWlnaHQkMTtcblxuICAgIGNvbnN0IHIgPSAobGVmdCwgdG9wKSA9PiB7XG4gICAgICBjb25zdCB0cmFuc2xhdGUgPSAoeCwgeSkgPT4gcihsZWZ0ICsgeCwgdG9wICsgeSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0LFxuICAgICAgICB0b3AsXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IFN1Z2FyUG9zaXRpb24gPSByO1xuXG4gICAgY29uc3QgYm94UG9zaXRpb24gPSBkb20gPT4ge1xuICAgICAgY29uc3QgYm94ID0gZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgcmV0dXJuIFN1Z2FyUG9zaXRpb24oYm94LmxlZnQsIGJveC50b3ApO1xuICAgIH07XG4gICAgY29uc3QgZmlyc3REZWZpbmVkT3JaZXJvID0gKGEsIGIpID0+IHtcbiAgICAgIGlmIChhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYiAhPT0gdW5kZWZpbmVkID8gYiA6IDA7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhYnNvbHV0ZSA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgZG9jID0gZWxlbWVudC5kb20ub3duZXJEb2N1bWVudDtcbiAgICAgIGNvbnN0IGJvZHkgPSBkb2MuYm9keTtcbiAgICAgIGNvbnN0IHdpbiA9IGRvYy5kZWZhdWx0VmlldztcbiAgICAgIGNvbnN0IGh0bWwgPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgaWYgKGJvZHkgPT09IGVsZW1lbnQuZG9tKSB7XG4gICAgICAgIHJldHVybiBTdWdhclBvc2l0aW9uKGJvZHkub2Zmc2V0TGVmdCwgYm9keS5vZmZzZXRUb3ApO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gZmlyc3REZWZpbmVkT3JaZXJvKHdpbiA9PT0gbnVsbCB8fCB3aW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpbi5wYWdlWU9mZnNldCwgaHRtbC5zY3JvbGxUb3ApO1xuICAgICAgY29uc3Qgc2Nyb2xsTGVmdCA9IGZpcnN0RGVmaW5lZE9yWmVybyh3aW4gPT09IG51bGwgfHwgd2luID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3aW4ucGFnZVhPZmZzZXQsIGh0bWwuc2Nyb2xsTGVmdCk7XG4gICAgICBjb25zdCBjbGllbnRUb3AgPSBmaXJzdERlZmluZWRPclplcm8oaHRtbC5jbGllbnRUb3AsIGJvZHkuY2xpZW50VG9wKTtcbiAgICAgIGNvbnN0IGNsaWVudExlZnQgPSBmaXJzdERlZmluZWRPclplcm8oaHRtbC5jbGllbnRMZWZ0LCBib2R5LmNsaWVudExlZnQpO1xuICAgICAgcmV0dXJuIHZpZXdwb3J0KGVsZW1lbnQpLnRyYW5zbGF0ZShzY3JvbGxMZWZ0IC0gY2xpZW50TGVmdCwgc2Nyb2xsVG9wIC0gY2xpZW50VG9wKTtcbiAgICB9O1xuICAgIGNvbnN0IHZpZXdwb3J0ID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGNvbnN0IGRvYyA9IGRvbS5vd25lckRvY3VtZW50O1xuICAgICAgY29uc3QgYm9keSA9IGRvYy5ib2R5O1xuICAgICAgaWYgKGJvZHkgPT09IGRvbSkge1xuICAgICAgICByZXR1cm4gU3VnYXJQb3NpdGlvbihib2R5Lm9mZnNldExlZnQsIGJvZHkub2Zmc2V0VG9wKTtcbiAgICAgIH1cbiAgICAgIGlmICghaW5Cb2R5KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBTdWdhclBvc2l0aW9uKDAsIDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJveFBvc2l0aW9uKGRvbSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJvd0luZm8gPSAocm93LCB5KSA9PiAoe1xuICAgICAgcm93LFxuICAgICAgeVxuICAgIH0pO1xuICAgIGNvbnN0IGNvbEluZm8gPSAoY29sLCB4KSA9PiAoe1xuICAgICAgY29sLFxuICAgICAgeFxuICAgIH0pO1xuICAgIGNvbnN0IHJ0bEVkZ2UgPSBjZWxsID0+IHtcbiAgICAgIGNvbnN0IHBvcyA9IGFic29sdXRlKGNlbGwpO1xuICAgICAgcmV0dXJuIHBvcy5sZWZ0ICsgZ2V0T3V0ZXIkMihjZWxsKTtcbiAgICB9O1xuICAgIGNvbnN0IGx0ckVkZ2UgPSBjZWxsID0+IHtcbiAgICAgIHJldHVybiBhYnNvbHV0ZShjZWxsKS5sZWZ0O1xuICAgIH07XG4gICAgY29uc3QgZ2V0TGVmdEVkZ2UgPSAoaW5kZXgsIGNlbGwpID0+IHtcbiAgICAgIHJldHVybiBjb2xJbmZvKGluZGV4LCBsdHJFZGdlKGNlbGwpKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFJpZ2h0RWRnZSA9IChpbmRleCwgY2VsbCkgPT4ge1xuICAgICAgcmV0dXJuIGNvbEluZm8oaW5kZXgsIHJ0bEVkZ2UoY2VsbCkpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0VG9wJDEgPSBjZWxsID0+IHtcbiAgICAgIHJldHVybiBhYnNvbHV0ZShjZWxsKS50b3A7XG4gICAgfTtcbiAgICBjb25zdCBnZXRUb3BFZGdlID0gKGluZGV4LCBjZWxsKSA9PiB7XG4gICAgICByZXR1cm4gcm93SW5mbyhpbmRleCwgZ2V0VG9wJDEoY2VsbCkpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Qm90dG9tRWRnZSA9IChpbmRleCwgY2VsbCkgPT4ge1xuICAgICAgcmV0dXJuIHJvd0luZm8oaW5kZXgsIGdldFRvcCQxKGNlbGwpICsgZ2V0T3V0ZXIkMShjZWxsKSk7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kUG9zaXRpb25zID0gKGdldElubmVyRWRnZSwgZ2V0T3V0ZXJFZGdlLCBhcnJheSkgPT4ge1xuICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBjb25zdCBsaW5lcyA9IG1hcCQxKGFycmF5LnNsaWNlKDEpLCAoY2VsbE9wdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgcmV0dXJuIGNlbGxPcHRpb24ubWFwKGNlbGwgPT4ge1xuICAgICAgICAgIHJldHVybiBnZXRJbm5lckVkZ2UoaW5kZXgsIGNlbGwpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbGFzdExpbmUgPSBhcnJheVthcnJheS5sZW5ndGggLSAxXS5tYXAoY2VsbCA9PiB7XG4gICAgICAgIHJldHVybiBnZXRPdXRlckVkZ2UoYXJyYXkubGVuZ3RoIC0gMSwgY2VsbCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBsaW5lcy5jb25jYXQoW2xhc3RMaW5lXSk7XG4gICAgfTtcbiAgICBjb25zdCBuZWdhdGUgPSBzdGVwID0+IHtcbiAgICAgIHJldHVybiAtc3RlcDtcbiAgICB9O1xuICAgIGNvbnN0IGhlaWdodCA9IHtcbiAgICAgIGRlbHRhOiBpZGVudGl0eSxcbiAgICAgIHBvc2l0aW9uczogb3B0RWxlbWVudHMgPT4gZmluZFBvc2l0aW9ucyhnZXRUb3BFZGdlLCBnZXRCb3R0b21FZGdlLCBvcHRFbGVtZW50cyksXG4gICAgICBlZGdlOiBnZXRUb3AkMVxuICAgIH07XG4gICAgY29uc3QgbHRyJDEgPSB7XG4gICAgICBkZWx0YTogaWRlbnRpdHksXG4gICAgICBlZGdlOiBsdHJFZGdlLFxuICAgICAgcG9zaXRpb25zOiBvcHRFbGVtZW50cyA9PiBmaW5kUG9zaXRpb25zKGdldExlZnRFZGdlLCBnZXRSaWdodEVkZ2UsIG9wdEVsZW1lbnRzKVxuICAgIH07XG4gICAgY29uc3QgcnRsJDEgPSB7XG4gICAgICBkZWx0YTogbmVnYXRlLFxuICAgICAgZWRnZTogcnRsRWRnZSxcbiAgICAgIHBvc2l0aW9uczogb3B0RWxlbWVudHMgPT4gZmluZFBvc2l0aW9ucyhnZXRSaWdodEVkZ2UsIGdldExlZnRFZGdlLCBvcHRFbGVtZW50cylcbiAgICB9O1xuICAgIGNvbnN0IGRldGVjdCQxID0gb25EaXJlY3Rpb24obHRyJDEsIHJ0bCQxKTtcbiAgICBjb25zdCB3aWR0aCA9IHtcbiAgICAgIGRlbHRhOiAoYW1vdW50LCB0YWJsZSkgPT4gZGV0ZWN0JDEodGFibGUpLmRlbHRhKGFtb3VudCwgdGFibGUpLFxuICAgICAgcG9zaXRpb25zOiAoY29scywgdGFibGUpID0+IGRldGVjdCQxKHRhYmxlKS5wb3NpdGlvbnMoY29scywgdGFibGUpLFxuICAgICAgZWRnZTogY2VsbCA9PiBkZXRlY3QkMShjZWxsKS5lZGdlKGNlbGwpXG4gICAgfTtcblxuICAgIGNvbnN0IHVuaXRzID0ge1xuICAgICAgdW5zdXBwb3J0ZWRMZW5ndGg6IFtcbiAgICAgICAgJ2VtJyxcbiAgICAgICAgJ2V4JyxcbiAgICAgICAgJ2NhcCcsXG4gICAgICAgICdjaCcsXG4gICAgICAgICdpYycsXG4gICAgICAgICdyZW0nLFxuICAgICAgICAnbGgnLFxuICAgICAgICAncmxoJyxcbiAgICAgICAgJ3Z3JyxcbiAgICAgICAgJ3ZoJyxcbiAgICAgICAgJ3ZpJyxcbiAgICAgICAgJ3ZiJyxcbiAgICAgICAgJ3ZtaW4nLFxuICAgICAgICAndm1heCcsXG4gICAgICAgICdjbScsXG4gICAgICAgICdtbScsXG4gICAgICAgICdRJyxcbiAgICAgICAgJ2luJyxcbiAgICAgICAgJ3BjJyxcbiAgICAgICAgJ3B0JyxcbiAgICAgICAgJ3B4J1xuICAgICAgXSxcbiAgICAgIGZpeGVkOiBbXG4gICAgICAgICdweCcsXG4gICAgICAgICdwdCdcbiAgICAgIF0sXG4gICAgICByZWxhdGl2ZTogWyclJ10sXG4gICAgICBlbXB0eTogWycnXVxuICAgIH07XG4gICAgY29uc3QgcGF0dGVybiA9ICgoKSA9PiB7XG4gICAgICBjb25zdCBkZWNpbWFsRGlnaXRzID0gJ1swLTldKyc7XG4gICAgICBjb25zdCBzaWduZWRJbnRlZ2VyID0gJ1srLV0/JyArIGRlY2ltYWxEaWdpdHM7XG4gICAgICBjb25zdCBleHBvbmVudFBhcnQgPSAnW2VFXScgKyBzaWduZWRJbnRlZ2VyO1xuICAgICAgY29uc3QgZG90ID0gJ1xcXFwuJztcbiAgICAgIGNvbnN0IG9wdCA9IGlucHV0ID0+IGAoPzokeyBpbnB1dCB9KT9gO1xuICAgICAgY29uc3QgdW5zaWduZWREZWNpbWFsTGl0ZXJhbCA9IFtcbiAgICAgICAgJ0luZmluaXR5JyxcbiAgICAgICAgZGVjaW1hbERpZ2l0cyArIGRvdCArIG9wdChkZWNpbWFsRGlnaXRzKSArIG9wdChleHBvbmVudFBhcnQpLFxuICAgICAgICBkb3QgKyBkZWNpbWFsRGlnaXRzICsgb3B0KGV4cG9uZW50UGFydCksXG4gICAgICAgIGRlY2ltYWxEaWdpdHMgKyBvcHQoZXhwb25lbnRQYXJ0KVxuICAgICAgXS5qb2luKCd8Jyk7XG4gICAgICBjb25zdCBmbG9hdCA9IGBbKy1dPyg/OiR7IHVuc2lnbmVkRGVjaW1hbExpdGVyYWwgfSlgO1xuICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4oJHsgZmxvYXQgfSkoLiopJGApO1xuICAgIH0pKCk7XG4gICAgY29uc3QgaXNVbml0ID0gKHVuaXQsIGFjY2VwdGVkKSA9PiBleGlzdHMoYWNjZXB0ZWQsIGFjYyA9PiBleGlzdHModW5pdHNbYWNjXSwgY2hlY2sgPT4gdW5pdCA9PT0gY2hlY2spKTtcbiAgICBjb25zdCBwYXJzZSA9IChpbnB1dCwgYWNjZXB0ZWQpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoID0gT3B0aW9uYWwuZnJvbShwYXR0ZXJuLmV4ZWMoaW5wdXQpKTtcbiAgICAgIHJldHVybiBtYXRjaC5iaW5kKGFycmF5ID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBOdW1iZXIoYXJyYXlbMV0pO1xuICAgICAgICBjb25zdCB1bml0UmF3ID0gYXJyYXlbMl07XG4gICAgICAgIGlmIChpc1VuaXQodW5pdFJhdywgYWNjZXB0ZWQpKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB1bml0OiB1bml0UmF3XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJQZXJjZW50YWdlQmFzZWRTaXplUmVnZXggPSAvKFxcZCsoXFwuXFxkKyk/KSUvO1xuICAgIGNvbnN0IHJQaXhlbEJhc2VkU2l6ZVJlZ2V4ID0gLyhcXGQrKFxcLlxcZCspPylweHxlbS87XG4gICAgY29uc3QgaXNDb2wkMiA9IGlzVGFnKCdjb2wnKTtcbiAgICBjb25zdCBnZXRQZXJjZW50U2l6ZSA9IChlbG0sIG91dGVyR2V0dGVyLCBpbm5lckdldHRlcikgPT4ge1xuICAgICAgY29uc3QgcmVsYXRpdmVQYXJlbnQgPSBwYXJlbnRFbGVtZW50KGVsbSkuZ2V0T3JUaHVuaygoKSA9PiBnZXRCb2R5JDEob3duZXIoZWxtKSkpO1xuICAgICAgcmV0dXJuIG91dGVyR2V0dGVyKGVsbSkgLyBpbm5lckdldHRlcihyZWxhdGl2ZVBhcmVudCkgKiAxMDA7XG4gICAgfTtcbiAgICBjb25zdCBzZXRQaXhlbFdpZHRoID0gKGNlbGwsIGFtb3VudCkgPT4ge1xuICAgICAgc2V0JDEoY2VsbCwgJ3dpZHRoJywgYW1vdW50ICsgJ3B4Jyk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRQZXJjZW50YWdlV2lkdGggPSAoY2VsbCwgYW1vdW50KSA9PiB7XG4gICAgICBzZXQkMShjZWxsLCAnd2lkdGgnLCBhbW91bnQgKyAnJScpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0SGVpZ2h0ID0gKGNlbGwsIGFtb3VudCkgPT4ge1xuICAgICAgc2V0JDEoY2VsbCwgJ2hlaWdodCcsIGFtb3VudCArICdweCcpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0SGVpZ2h0VmFsdWUgPSBjZWxsID0+IGdldFJ1bnRpbWUoY2VsbCkgKyAncHgnO1xuICAgIGNvbnN0IGNvbnZlcnQgPSAoY2VsbCwgbnVtYmVyLCBnZXR0ZXIsIHNldHRlcikgPT4ge1xuICAgICAgY29uc3QgbmV3U2l6ZSA9IHRhYmxlKGNlbGwpLm1hcCh0YWJsZSA9PiB7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gZ2V0dGVyKHRhYmxlKTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyIC8gMTAwICogdG90YWwpO1xuICAgICAgfSkuZ2V0T3IobnVtYmVyKTtcbiAgICAgIHNldHRlcihjZWxsLCBuZXdTaXplKTtcbiAgICAgIHJldHVybiBuZXdTaXplO1xuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplUGl4ZWxTaXplID0gKHZhbHVlLCBjZWxsLCBnZXR0ZXIsIHNldHRlcikgPT4ge1xuICAgICAgY29uc3QgbnVtYmVyID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICByZXR1cm4gZW5kc1dpdGgodmFsdWUsICclJykgJiYgbmFtZShjZWxsKSAhPT0gJ3RhYmxlJyA/IGNvbnZlcnQoY2VsbCwgbnVtYmVyLCBnZXR0ZXIsIHNldHRlcikgOiBudW1iZXI7XG4gICAgfTtcbiAgICBjb25zdCBnZXRUb3RhbEhlaWdodCA9IGNlbGwgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBnZXRIZWlnaHRWYWx1ZShjZWxsKTtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGdldCQ4KGNlbGwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5vcm1hbGl6ZVBpeGVsU2l6ZSh2YWx1ZSwgY2VsbCwgZ2V0JDgsIHNldEhlaWdodCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXQkNyA9IChjZWxsLCB0eXBlLCBmKSA9PiB7XG4gICAgICBjb25zdCB2ID0gZihjZWxsKTtcbiAgICAgIGNvbnN0IHNwYW4gPSBnZXRTcGFuKGNlbGwsIHR5cGUpO1xuICAgICAgcmV0dXJuIHYgLyBzcGFuO1xuICAgIH07XG4gICAgY29uc3QgZ2V0UmF3JDEgPSAoZWxlbWVudCwgcHJvcCkgPT4ge1xuICAgICAgcmV0dXJuIGdldFJhdyQyKGVsZW1lbnQsIHByb3ApLm9yVGh1bmsoKCkgPT4ge1xuICAgICAgICByZXR1cm4gZ2V0T3B0KGVsZW1lbnQsIHByb3ApLm1hcCh2YWwgPT4gdmFsICsgJ3B4Jyk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFJhd1dpZHRoJDEgPSBlbGVtZW50ID0+IGdldFJhdyQxKGVsZW1lbnQsICd3aWR0aCcpO1xuICAgIGNvbnN0IGdldFJhd0hlaWdodCA9IGVsZW1lbnQgPT4gZ2V0UmF3JDEoZWxlbWVudCwgJ2hlaWdodCcpO1xuICAgIGNvbnN0IGdldFBlcmNlbnRhZ2VXaWR0aCA9IGNlbGwgPT4gZ2V0UGVyY2VudFNpemUoY2VsbCwgZ2V0JDksIGdldElubmVyKTtcbiAgICBjb25zdCBnZXRQaXhlbFdpZHRoJDEgPSBjZWxsID0+IGlzQ29sJDIoY2VsbCkgPyBnZXQkOShjZWxsKSA6IGdldFJ1bnRpbWUkMShjZWxsKTtcbiAgICBjb25zdCBnZXRIZWlnaHQgPSBjZWxsID0+IHtcbiAgICAgIHJldHVybiBnZXQkNyhjZWxsLCAncm93c3BhbicsIGdldFRvdGFsSGVpZ2h0KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEdlbmVyaWNXaWR0aCA9IGNlbGwgPT4ge1xuICAgICAgY29uc3Qgd2lkdGggPSBnZXRSYXdXaWR0aCQxKGNlbGwpO1xuICAgICAgcmV0dXJuIHdpZHRoLmJpbmQodyA9PiBwYXJzZSh3LCBbXG4gICAgICAgICdmaXhlZCcsXG4gICAgICAgICdyZWxhdGl2ZScsXG4gICAgICAgICdlbXB0eSdcbiAgICAgIF0pKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldEdlbmVyaWNXaWR0aCA9IChjZWxsLCBhbW91bnQsIHVuaXQpID0+IHtcbiAgICAgIHNldCQxKGNlbGwsICd3aWR0aCcsIGFtb3VudCArIHVuaXQpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0UGl4ZWxUYWJsZVdpZHRoID0gdGFibGUgPT4gZ2V0JDkodGFibGUpICsgJ3B4JztcbiAgICBjb25zdCBnZXRQZXJjZW50VGFibGVXaWR0aCA9IHRhYmxlID0+IGdldFBlcmNlbnRTaXplKHRhYmxlLCBnZXQkOSwgZ2V0SW5uZXIpICsgJyUnO1xuICAgIGNvbnN0IGlzUGVyY2VudFNpemluZyQxID0gdGFibGUgPT4gZ2V0UmF3V2lkdGgkMSh0YWJsZSkuZXhpc3RzKHNpemUgPT4gclBlcmNlbnRhZ2VCYXNlZFNpemVSZWdleC50ZXN0KHNpemUpKTtcbiAgICBjb25zdCBpc1BpeGVsU2l6aW5nJDEgPSB0YWJsZSA9PiBnZXRSYXdXaWR0aCQxKHRhYmxlKS5leGlzdHMoc2l6ZSA9PiByUGl4ZWxCYXNlZFNpemVSZWdleC50ZXN0KHNpemUpKTtcbiAgICBjb25zdCBpc05vbmVTaXppbmckMSA9IHRhYmxlID0+IGdldFJhd1dpZHRoJDEodGFibGUpLmlzTm9uZSgpO1xuICAgIGNvbnN0IHBlcmNlbnRhZ2VCYXNlZFNpemVSZWdleCA9IGNvbnN0YW50KHJQZXJjZW50YWdlQmFzZWRTaXplUmVnZXgpO1xuXG4gICAgY29uc3QgaXNDb2wkMSA9IGlzVGFnKCdjb2wnKTtcbiAgICBjb25zdCBnZXRSYXdXID0gY2VsbCA9PiB7XG4gICAgICByZXR1cm4gZ2V0UmF3V2lkdGgkMShjZWxsKS5nZXRPclRodW5rKCgpID0+IGdldFBpeGVsV2lkdGgkMShjZWxsKSArICdweCcpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0UmF3SCA9IGNlbGwgPT4ge1xuICAgICAgcmV0dXJuIGdldFJhd0hlaWdodChjZWxsKS5nZXRPclRodW5rKCgpID0+IGdldEhlaWdodChjZWxsKSArICdweCcpO1xuICAgIH07XG4gICAgY29uc3QganVzdENvbHMgPSB3YXJlaG91c2UgPT4gbWFwJDEoV2FyZWhvdXNlLmp1c3RDb2x1bW5zKHdhcmVob3VzZSksIGNvbHVtbiA9PiBPcHRpb25hbC5mcm9tKGNvbHVtbi5lbGVtZW50KSk7XG4gICAgY29uc3QgaXNWYWxpZENvbHVtbiA9IGNlbGwgPT4ge1xuICAgICAgY29uc3QgYnJvd3NlciA9IGRldGVjdCQyKCkuYnJvd3NlcjtcbiAgICAgIGNvbnN0IHN1cHBvcnRzQ29sV2lkdGhzID0gYnJvd3Nlci5pc0Nocm9taXVtKCkgfHwgYnJvd3Nlci5pc0ZpcmVmb3goKTtcbiAgICAgIHJldHVybiBpc0NvbCQxKGNlbGwpID8gc3VwcG9ydHNDb2xXaWR0aHMgOiB0cnVlO1xuICAgIH07XG4gICAgY29uc3QgZ2V0RGltZW5zaW9uID0gKGNlbGxPcHQsIGluZGV4LCBiYWNrdXBzLCBmaWx0ZXIsIGdldHRlciwgZmFsbGJhY2spID0+IGNlbGxPcHQuZmlsdGVyKGZpbHRlcikuZm9sZCgoKSA9PiBmYWxsYmFjayhkZWR1Y2UoYmFja3VwcywgaW5kZXgpKSwgY2VsbCA9PiBnZXR0ZXIoY2VsbCkpO1xuICAgIGNvbnN0IGdldFdpZHRoRnJvbSA9ICh3YXJlaG91c2UsIHRhYmxlLCBnZXRXaWR0aCwgZmFsbGJhY2spID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtbkNlbGxzID0gY29sdW1ucyh3YXJlaG91c2UpO1xuICAgICAgY29uc3QgY29sdW1ucyQxID0gV2FyZWhvdXNlLmhhc0NvbHVtbnMod2FyZWhvdXNlKSA/IGp1c3RDb2xzKHdhcmVob3VzZSkgOiBjb2x1bW5DZWxscztcbiAgICAgIGNvbnN0IGJhY2t1cHMgPSBbT3B0aW9uYWwuc29tZSh3aWR0aC5lZGdlKHRhYmxlKSldLmNvbmNhdChtYXAkMSh3aWR0aC5wb3NpdGlvbnMoY29sdW1uQ2VsbHMsIHRhYmxlKSwgcG9zID0+IHBvcy5tYXAocCA9PiBwLngpKSk7XG4gICAgICBjb25zdCBjb2xGaWx0ZXIgPSBub3QoaGFzQ29sc3Bhbik7XG4gICAgICByZXR1cm4gbWFwJDEoY29sdW1ucyQxLCAoY2VsbE9wdGlvbiwgYykgPT4ge1xuICAgICAgICByZXR1cm4gZ2V0RGltZW5zaW9uKGNlbGxPcHRpb24sIGMsIGJhY2t1cHMsIGNvbEZpbHRlciwgY29sdW1uID0+IHtcbiAgICAgICAgICBpZiAoaXNWYWxpZENvbHVtbihjb2x1bW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0V2lkdGgoY29sdW1uKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IGJpbmRGcm9tKGNvbHVtbkNlbGxzW2NdLCBpZGVudGl0eSk7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RGltZW5zaW9uKGNlbGwsIGMsIGJhY2t1cHMsIGNvbEZpbHRlciwgY2VsbCA9PiBmYWxsYmFjayhPcHRpb25hbC5zb21lKGdldCQ5KGNlbGwpKSksIGZhbGxiYWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIGZhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0RGVkdWNlZCA9IGRlZHVjZWQgPT4ge1xuICAgICAgcmV0dXJuIGRlZHVjZWQubWFwKGQgPT4ge1xuICAgICAgICByZXR1cm4gZCArICdweCc7XG4gICAgICB9KS5nZXRPcignJyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRSYXdXaWR0aHMgPSAod2FyZWhvdXNlLCB0YWJsZSkgPT4ge1xuICAgICAgcmV0dXJuIGdldFdpZHRoRnJvbSh3YXJlaG91c2UsIHRhYmxlLCBnZXRSYXdXLCBnZXREZWR1Y2VkKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFBlcmNlbnRhZ2VXaWR0aHMgPSAod2FyZWhvdXNlLCB0YWJsZSwgdGFibGVTaXplKSA9PiB7XG4gICAgICByZXR1cm4gZ2V0V2lkdGhGcm9tKHdhcmVob3VzZSwgdGFibGUsIGdldFBlcmNlbnRhZ2VXaWR0aCwgZGVkdWNlZCA9PiB7XG4gICAgICAgIHJldHVybiBkZWR1Y2VkLmZvbGQoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0YWJsZVNpemUubWluQ2VsbFdpZHRoKCk7XG4gICAgICAgIH0sIGNlbGxXaWR0aCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNlbGxXaWR0aCAvIHRhYmxlU2l6ZS5waXhlbFdpZHRoKCkgKiAxMDA7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRQaXhlbFdpZHRocyA9ICh3YXJlaG91c2UsIHRhYmxlLCB0YWJsZVNpemUpID0+IHtcbiAgICAgIHJldHVybiBnZXRXaWR0aEZyb20od2FyZWhvdXNlLCB0YWJsZSwgZ2V0UGl4ZWxXaWR0aCQxLCBkZWR1Y2VkID0+IHtcbiAgICAgICAgcmV0dXJuIGRlZHVjZWQuZ2V0T3JUaHVuayh0YWJsZVNpemUubWluQ2VsbFdpZHRoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0SGVpZ2h0RnJvbSA9ICh3YXJlaG91c2UsIHRhYmxlLCBkaXJlY3Rpb24sIGdldEhlaWdodCwgZmFsbGJhY2spID0+IHtcbiAgICAgIGNvbnN0IHJvd3MkMSA9IHJvd3Mod2FyZWhvdXNlKTtcbiAgICAgIGNvbnN0IGJhY2t1cHMgPSBbT3B0aW9uYWwuc29tZShkaXJlY3Rpb24uZWRnZSh0YWJsZSkpXS5jb25jYXQobWFwJDEoZGlyZWN0aW9uLnBvc2l0aW9ucyhyb3dzJDEsIHRhYmxlKSwgcG9zID0+IHBvcy5tYXAocCA9PiBwLnkpKSk7XG4gICAgICByZXR1cm4gbWFwJDEocm93cyQxLCAoY2VsbE9wdGlvbiwgYykgPT4ge1xuICAgICAgICByZXR1cm4gZ2V0RGltZW5zaW9uKGNlbGxPcHRpb24sIGMsIGJhY2t1cHMsIG5vdChoYXNSb3dzcGFuKSwgZ2V0SGVpZ2h0LCBmYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFBpeGVsSGVpZ2h0cyA9ICh3YXJlaG91c2UsIHRhYmxlLCBkaXJlY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiBnZXRIZWlnaHRGcm9tKHdhcmVob3VzZSwgdGFibGUsIGRpcmVjdGlvbiwgZ2V0SGVpZ2h0LCBkZWR1Y2VkID0+IHtcbiAgICAgICAgcmV0dXJuIGRlZHVjZWQuZ2V0T3JUaHVuayhtaW5IZWlnaHQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRSYXdIZWlnaHRzID0gKHdhcmVob3VzZSwgdGFibGUsIGRpcmVjdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIGdldEhlaWdodEZyb20od2FyZWhvdXNlLCB0YWJsZSwgZGlyZWN0aW9uLCBnZXRSYXdILCBnZXREZWR1Y2VkKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgd2lkdGhMb29rdXAgPSAodGFibGUsIGdldHRlcikgPT4gKCkgPT4ge1xuICAgICAgaWYgKGluQm9keSh0YWJsZSkpIHtcbiAgICAgICAgcmV0dXJuIGdldHRlcih0YWJsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChnZXRSYXckMih0YWJsZSwgJ3dpZHRoJykuZ2V0T3IoJzAnKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBub25lU2l6ZSA9IHRhYmxlID0+IHtcbiAgICAgIGNvbnN0IGdldFdpZHRoID0gd2lkdGhMb29rdXAodGFibGUsIGdldCQ5KTtcbiAgICAgIGNvbnN0IHplcm8gPSBjb25zdGFudCgwKTtcbiAgICAgIGNvbnN0IGdldFdpZHRocyA9ICh3YXJlaG91c2UsIHRhYmxlU2l6ZSkgPT4gZ2V0UGl4ZWxXaWR0aHMod2FyZWhvdXNlLCB0YWJsZSwgdGFibGVTaXplKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiBnZXRXaWR0aCxcbiAgICAgICAgcGl4ZWxXaWR0aDogZ2V0V2lkdGgsXG4gICAgICAgIGdldFdpZHRocyxcbiAgICAgICAgZ2V0Q2VsbERlbHRhOiB6ZXJvLFxuICAgICAgICBzaW5nbGVDb2x1bW5XaWR0aDogY29uc3RhbnQoWzBdKSxcbiAgICAgICAgbWluQ2VsbFdpZHRoOiB6ZXJvLFxuICAgICAgICBzZXRFbGVtZW50V2lkdGg6IG5vb3AsXG4gICAgICAgIGFkanVzdFRhYmxlV2lkdGg6IG5vb3AsXG4gICAgICAgIGlzUmVsYXRpdmU6IHRydWUsXG4gICAgICAgIGxhYmVsOiAnbm9uZSdcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBwZXJjZW50YWdlU2l6ZSA9IHRhYmxlID0+IHtcbiAgICAgIGNvbnN0IGdldEZsb2F0V2lkdGggPSB3aWR0aExvb2t1cCh0YWJsZSwgZWxlbSA9PiBwYXJzZUZsb2F0KGdldFBlcmNlbnRUYWJsZVdpZHRoKGVsZW0pKSk7XG4gICAgICBjb25zdCBnZXRXaWR0aCA9IHdpZHRoTG9va3VwKHRhYmxlLCBnZXQkOSk7XG4gICAgICBjb25zdCBnZXRDZWxsRGVsdGEgPSBkZWx0YSA9PiBkZWx0YSAvIGdldFdpZHRoKCkgKiAxMDA7XG4gICAgICBjb25zdCBzaW5nbGVDb2x1bW5XaWR0aCA9ICh3LCBfZGVsdGEpID0+IFsxMDAgLSB3XTtcbiAgICAgIGNvbnN0IG1pbkNlbGxXaWR0aCA9ICgpID0+IG1pbldpZHRoKCkgLyBnZXRXaWR0aCgpICogMTAwO1xuICAgICAgY29uc3QgYWRqdXN0VGFibGVXaWR0aCA9IGRlbHRhID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudFdpZHRoID0gZ2V0RmxvYXRXaWR0aCgpO1xuICAgICAgICBjb25zdCBjaGFuZ2UgPSBkZWx0YSAvIDEwMCAqIGN1cnJlbnRXaWR0aDtcbiAgICAgICAgY29uc3QgbmV3V2lkdGggPSBjdXJyZW50V2lkdGggKyBjaGFuZ2U7XG4gICAgICAgIHNldFBlcmNlbnRhZ2VXaWR0aCh0YWJsZSwgbmV3V2lkdGgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldFdpZHRocyA9ICh3YXJlaG91c2UsIHRhYmxlU2l6ZSkgPT4gZ2V0UGVyY2VudGFnZVdpZHRocyh3YXJlaG91c2UsIHRhYmxlLCB0YWJsZVNpemUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IGdldEZsb2F0V2lkdGgsXG4gICAgICAgIHBpeGVsV2lkdGg6IGdldFdpZHRoLFxuICAgICAgICBnZXRXaWR0aHMsXG4gICAgICAgIGdldENlbGxEZWx0YSxcbiAgICAgICAgc2luZ2xlQ29sdW1uV2lkdGgsXG4gICAgICAgIG1pbkNlbGxXaWR0aCxcbiAgICAgICAgc2V0RWxlbWVudFdpZHRoOiBzZXRQZXJjZW50YWdlV2lkdGgsXG4gICAgICAgIGFkanVzdFRhYmxlV2lkdGgsXG4gICAgICAgIGlzUmVsYXRpdmU6IHRydWUsXG4gICAgICAgIGxhYmVsOiAncGVyY2VudCdcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBwaXhlbFNpemUgPSB0YWJsZSA9PiB7XG4gICAgICBjb25zdCBnZXRXaWR0aCA9IHdpZHRoTG9va3VwKHRhYmxlLCBnZXQkOSk7XG4gICAgICBjb25zdCBnZXRDZWxsRGVsdGEgPSBpZGVudGl0eTtcbiAgICAgIGNvbnN0IHNpbmdsZUNvbHVtbldpZHRoID0gKHcsIGRlbHRhKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld05leHQgPSBNYXRoLm1heChtaW5XaWR0aCgpLCB3ICsgZGVsdGEpO1xuICAgICAgICByZXR1cm4gW25ld05leHQgLSB3XTtcbiAgICAgIH07XG4gICAgICBjb25zdCBhZGp1c3RUYWJsZVdpZHRoID0gZGVsdGEgPT4ge1xuICAgICAgICBjb25zdCBuZXdXaWR0aCA9IGdldFdpZHRoKCkgKyBkZWx0YTtcbiAgICAgICAgc2V0UGl4ZWxXaWR0aCh0YWJsZSwgbmV3V2lkdGgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldFdpZHRocyA9ICh3YXJlaG91c2UsIHRhYmxlU2l6ZSkgPT4gZ2V0UGl4ZWxXaWR0aHMod2FyZWhvdXNlLCB0YWJsZSwgdGFibGVTaXplKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiBnZXRXaWR0aCxcbiAgICAgICAgcGl4ZWxXaWR0aDogZ2V0V2lkdGgsXG4gICAgICAgIGdldFdpZHRocyxcbiAgICAgICAgZ2V0Q2VsbERlbHRhLFxuICAgICAgICBzaW5nbGVDb2x1bW5XaWR0aCxcbiAgICAgICAgbWluQ2VsbFdpZHRoOiBtaW5XaWR0aCxcbiAgICAgICAgc2V0RWxlbWVudFdpZHRoOiBzZXRQaXhlbFdpZHRoLFxuICAgICAgICBhZGp1c3RUYWJsZVdpZHRoLFxuICAgICAgICBpc1JlbGF0aXZlOiBmYWxzZSxcbiAgICAgICAgbGFiZWw6ICdwaXhlbCdcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjaG9vc2VTaXplID0gKGVsZW1lbnQsIHdpZHRoKSA9PiB7XG4gICAgICBjb25zdCBwZXJjZW50TWF0Y2ggPSBwZXJjZW50YWdlQmFzZWRTaXplUmVnZXgoKS5leGVjKHdpZHRoKTtcbiAgICAgIGlmIChwZXJjZW50TWF0Y2ggIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHBlcmNlbnRhZ2VTaXplKGVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBpeGVsU2l6ZShlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdldFRhYmxlU2l6ZSA9IHRhYmxlID0+IHtcbiAgICAgIGNvbnN0IHdpZHRoID0gZ2V0UmF3V2lkdGgkMSh0YWJsZSk7XG4gICAgICByZXR1cm4gd2lkdGguZm9sZCgoKSA9PiBub25lU2l6ZSh0YWJsZSksIHcgPT4gY2hvb3NlU2l6ZSh0YWJsZSwgdykpO1xuICAgIH07XG4gICAgY29uc3QgVGFibGVTaXplID0ge1xuICAgICAgZ2V0VGFibGVTaXplLFxuICAgICAgcGl4ZWxTaXplLFxuICAgICAgcGVyY2VudGFnZVNpemUsXG4gICAgICBub25lU2l6ZVxuICAgIH07XG5cbiAgICBjb25zdCBzdGF0c1N0cnVjdCA9IChtaW5Sb3csIG1pbkNvbCwgbWF4Um93LCBtYXhDb2wsIGFsbENlbGxzLCBzZWxlY3RlZENlbGxzKSA9PiAoe1xuICAgICAgbWluUm93LFxuICAgICAgbWluQ29sLFxuICAgICAgbWF4Um93LFxuICAgICAgbWF4Q29sLFxuICAgICAgYWxsQ2VsbHMsXG4gICAgICBzZWxlY3RlZENlbGxzXG4gICAgfSk7XG4gICAgY29uc3QgZmluZFNlbGVjdGVkU3RhdHMgPSAoaG91c2UsIGlzU2VsZWN0ZWQpID0+IHtcbiAgICAgIGNvbnN0IHRvdGFsQ29sdW1ucyA9IGhvdXNlLmdyaWQuY29sdW1ucztcbiAgICAgIGNvbnN0IHRvdGFsUm93cyA9IGhvdXNlLmdyaWQucm93cztcbiAgICAgIGxldCBtaW5Sb3cgPSB0b3RhbFJvd3M7XG4gICAgICBsZXQgbWluQ29sID0gdG90YWxDb2x1bW5zO1xuICAgICAgbGV0IG1heFJvdyA9IDA7XG4gICAgICBsZXQgbWF4Q29sID0gMDtcbiAgICAgIGNvbnN0IGFsbENlbGxzID0gW107XG4gICAgICBjb25zdCBzZWxlY3RlZENlbGxzID0gW107XG4gICAgICBlYWNoJDEoaG91c2UuYWNjZXNzLCBkZXRhaWwgPT4ge1xuICAgICAgICBhbGxDZWxscy5wdXNoKGRldGFpbCk7XG4gICAgICAgIGlmIChpc1NlbGVjdGVkKGRldGFpbCkpIHtcbiAgICAgICAgICBzZWxlY3RlZENlbGxzLnB1c2goZGV0YWlsKTtcbiAgICAgICAgICBjb25zdCBzdGFydFJvdyA9IGRldGFpbC5yb3c7XG4gICAgICAgICAgY29uc3QgZW5kUm93ID0gc3RhcnRSb3cgKyBkZXRhaWwucm93c3BhbiAtIDE7XG4gICAgICAgICAgY29uc3Qgc3RhcnRDb2wgPSBkZXRhaWwuY29sdW1uO1xuICAgICAgICAgIGNvbnN0IGVuZENvbCA9IHN0YXJ0Q29sICsgZGV0YWlsLmNvbHNwYW4gLSAxO1xuICAgICAgICAgIGlmIChzdGFydFJvdyA8IG1pblJvdykge1xuICAgICAgICAgICAgbWluUm93ID0gc3RhcnRSb3c7XG4gICAgICAgICAgfSBlbHNlIGlmIChlbmRSb3cgPiBtYXhSb3cpIHtcbiAgICAgICAgICAgIG1heFJvdyA9IGVuZFJvdztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YXJ0Q29sIDwgbWluQ29sKSB7XG4gICAgICAgICAgICBtaW5Db2wgPSBzdGFydENvbDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVuZENvbCA+IG1heENvbCkge1xuICAgICAgICAgICAgbWF4Q29sID0gZW5kQ29sO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3RhdHNTdHJ1Y3QobWluUm93LCBtaW5Db2wsIG1heFJvdywgbWF4Q29sLCBhbGxDZWxscywgc2VsZWN0ZWRDZWxscyk7XG4gICAgfTtcbiAgICBjb25zdCBtYWtlQ2VsbCA9IChsaXN0LCBzZWVuU2VsZWN0ZWQsIHJvd0luZGV4KSA9PiB7XG4gICAgICBjb25zdCByb3cgPSBsaXN0W3Jvd0luZGV4XS5lbGVtZW50O1xuICAgICAgY29uc3QgdGQgPSBTdWdhckVsZW1lbnQuZnJvbVRhZygndGQnKTtcbiAgICAgIGFwcGVuZCQxKHRkLCBTdWdhckVsZW1lbnQuZnJvbVRhZygnYnInKSk7XG4gICAgICBjb25zdCBmID0gc2VlblNlbGVjdGVkID8gYXBwZW5kJDEgOiBwcmVwZW5kO1xuICAgICAgZihyb3csIHRkKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbGxJbkdhcHMgPSAobGlzdCwgaG91c2UsIHN0YXRzLCBpc1NlbGVjdGVkKSA9PiB7XG4gICAgICBjb25zdCByb3dzID0gZmlsdGVyJDIobGlzdCwgcm93ID0+IHJvdy5zZWN0aW9uICE9PSAnY29sZ3JvdXAnKTtcbiAgICAgIGNvbnN0IHRvdGFsQ29sdW1ucyA9IGhvdXNlLmdyaWQuY29sdW1ucztcbiAgICAgIGNvbnN0IHRvdGFsUm93cyA9IGhvdXNlLmdyaWQucm93cztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWxSb3dzOyBpKyspIHtcbiAgICAgICAgbGV0IHNlZW5TZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRvdGFsQ29sdW1uczsgaisrKSB7XG4gICAgICAgICAgaWYgKCEoaSA8IHN0YXRzLm1pblJvdyB8fCBpID4gc3RhdHMubWF4Um93IHx8IGogPCBzdGF0cy5taW5Db2wgfHwgaiA+IHN0YXRzLm1heENvbCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5lZWRDZWxsID0gV2FyZWhvdXNlLmdldEF0KGhvdXNlLCBpLCBqKS5maWx0ZXIoaXNTZWxlY3RlZCkuaXNOb25lKCk7XG4gICAgICAgICAgICBpZiAobmVlZENlbGwpIHtcbiAgICAgICAgICAgICAgbWFrZUNlbGwocm93cywgc2VlblNlbGVjdGVkLCBpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlZW5TZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjbGVhbiA9IChyZXBsaWNhLCBzdGF0cywgaG91c2UsIHdpZHRoRGVsdGEpID0+IHtcbiAgICAgIGVhY2gkMShob3VzZS5jb2x1bW5zLCBjb2wgPT4ge1xuICAgICAgICBpZiAoY29sLmNvbHVtbiA8IHN0YXRzLm1pbkNvbCB8fCBjb2wuY29sdW1uID4gc3RhdHMubWF4Q29sKSB7XG4gICAgICAgICAgcmVtb3ZlJDYoY29sLmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVtcHR5Um93cyA9IGZpbHRlciQyKGZpcnN0TGF5ZXIocmVwbGljYSwgJ3RyJyksIHJvdyA9PiByb3cuZG9tLmNoaWxkRWxlbWVudENvdW50ID09PSAwKTtcbiAgICAgIGVhY2gkMihlbXB0eVJvd3MsIHJlbW92ZSQ2KTtcbiAgICAgIGlmIChzdGF0cy5taW5Db2wgPT09IHN0YXRzLm1heENvbCB8fCBzdGF0cy5taW5Sb3cgPT09IHN0YXRzLm1heFJvdykge1xuICAgICAgICBlYWNoJDIoZmlyc3RMYXllcihyZXBsaWNhLCAndGgsdGQnKSwgY2VsbCA9PiB7XG4gICAgICAgICAgcmVtb3ZlJDcoY2VsbCwgJ3Jvd3NwYW4nKTtcbiAgICAgICAgICByZW1vdmUkNyhjZWxsLCAnY29sc3BhbicpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJlbW92ZSQ3KHJlcGxpY2EsIExPQ0tFRF9DT0xfQVRUUik7XG4gICAgICByZW1vdmUkNyhyZXBsaWNhLCAnZGF0YS1zbm9va2VyLWNvbC1zZXJpZXMnKTtcbiAgICAgIGNvbnN0IHRhYmxlU2l6ZSA9IFRhYmxlU2l6ZS5nZXRUYWJsZVNpemUocmVwbGljYSk7XG4gICAgICB0YWJsZVNpemUuYWRqdXN0VGFibGVXaWR0aCh3aWR0aERlbHRhKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFRhYmxlV2lkdGhEZWx0YSA9ICh0YWJsZSwgd2FyZWhvdXNlLCB0YWJsZVNpemUsIHN0YXRzKSA9PiB7XG4gICAgICBpZiAoc3RhdHMubWluQ29sID09PSAwICYmIHdhcmVob3VzZS5ncmlkLmNvbHVtbnMgPT09IHN0YXRzLm1heENvbCArIDEpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgICBjb25zdCBjb2xXaWR0aHMgPSBnZXRQaXhlbFdpZHRocyh3YXJlaG91c2UsIHRhYmxlLCB0YWJsZVNpemUpO1xuICAgICAgY29uc3QgYWxsQ29sc1dpZHRoID0gZm9sZGwoY29sV2lkdGhzLCAoYWNjLCB3aWR0aCkgPT4gYWNjICsgd2lkdGgsIDApO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRDb2xzV2lkdGggPSBmb2xkbChjb2xXaWR0aHMuc2xpY2Uoc3RhdHMubWluQ29sLCBzdGF0cy5tYXhDb2wgKyAxKSwgKGFjYywgd2lkdGgpID0+IGFjYyArIHdpZHRoLCAwKTtcbiAgICAgIGNvbnN0IG5ld1dpZHRoID0gc2VsZWN0ZWRDb2xzV2lkdGggLyBhbGxDb2xzV2lkdGggKiB0YWJsZVNpemUucGl4ZWxXaWR0aCgpO1xuICAgICAgY29uc3QgZGVsdGEgPSBuZXdXaWR0aCAtIHRhYmxlU2l6ZS5waXhlbFdpZHRoKCk7XG4gICAgICByZXR1cm4gdGFibGVTaXplLmdldENlbGxEZWx0YShkZWx0YSk7XG4gICAgfTtcbiAgICBjb25zdCBleHRyYWN0JDEgPSAodGFibGUsIHNlbGVjdGVkU2VsZWN0b3IpID0+IHtcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBkZXRhaWwgPT4gaXMkMihkZXRhaWwuZWxlbWVudCwgc2VsZWN0ZWRTZWxlY3Rvcik7XG4gICAgICBjb25zdCByZXBsaWNhID0gZGVlcCh0YWJsZSk7XG4gICAgICBjb25zdCBsaXN0ID0gZnJvbVRhYmxlJDEocmVwbGljYSk7XG4gICAgICBjb25zdCB0YWJsZVNpemUgPSBUYWJsZVNpemUuZ2V0VGFibGVTaXplKHRhYmxlKTtcbiAgICAgIGNvbnN0IHJlcGxpY2FIb3VzZSA9IFdhcmVob3VzZS5nZW5lcmF0ZShsaXN0KTtcbiAgICAgIGNvbnN0IHJlcGxpY2FTdGF0cyA9IGZpbmRTZWxlY3RlZFN0YXRzKHJlcGxpY2FIb3VzZSwgaXNTZWxlY3RlZCk7XG4gICAgICBjb25zdCBzZWxlY3RvciA9ICd0aDpub3QoJyArIHNlbGVjdGVkU2VsZWN0b3IgKyAnKScgKyAnLHRkOm5vdCgnICsgc2VsZWN0ZWRTZWxlY3RvciArICcpJztcbiAgICAgIGNvbnN0IHVuc2VsZWN0ZWRDZWxscyA9IGZpbHRlckZpcnN0TGF5ZXIocmVwbGljYSwgJ3RoLHRkJywgY2VsbCA9PiBpcyQyKGNlbGwsIHNlbGVjdG9yKSk7XG4gICAgICBlYWNoJDIodW5zZWxlY3RlZENlbGxzLCByZW1vdmUkNik7XG4gICAgICBmaWxsSW5HYXBzKGxpc3QsIHJlcGxpY2FIb3VzZSwgcmVwbGljYVN0YXRzLCBpc1NlbGVjdGVkKTtcbiAgICAgIGNvbnN0IGhvdXNlID0gV2FyZWhvdXNlLmZyb21UYWJsZSh0YWJsZSk7XG4gICAgICBjb25zdCB3aWR0aERlbHRhID0gZ2V0VGFibGVXaWR0aERlbHRhKHRhYmxlLCBob3VzZSwgdGFibGVTaXplLCByZXBsaWNhU3RhdHMpO1xuICAgICAgY2xlYW4ocmVwbGljYSwgcmVwbGljYVN0YXRzLCByZXBsaWNhSG91c2UsIHdpZHRoRGVsdGEpO1xuICAgICAgcmV0dXJuIHJlcGxpY2E7XG4gICAgfTtcblxuICAgIGNvbnN0IG5ic3AgPSAnXFx4QTAnO1xuXG4gICAgY29uc3QgTm9kZVZhbHVlID0gKGlzLCBuYW1lKSA9PiB7XG4gICAgICBjb25zdCBnZXQgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgaWYgKCFpcyhlbGVtZW50KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG9ubHkgZ2V0ICcgKyBuYW1lICsgJyB2YWx1ZSBvZiBhICcgKyBuYW1lICsgJyBub2RlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldE9wdGlvbihlbGVtZW50KS5nZXRPcignJyk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0T3B0aW9uID0gZWxlbWVudCA9PiBpcyhlbGVtZW50KSA/IE9wdGlvbmFsLmZyb20oZWxlbWVudC5kb20ubm9kZVZhbHVlKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIGNvbnN0IHNldCA9IChlbGVtZW50LCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoIWlzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBzZXQgcmF3ICcgKyBuYW1lICsgJyB2YWx1ZSBvZiBhICcgKyBuYW1lICsgJyBub2RlJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudC5kb20ubm9kZVZhbHVlID0gdmFsdWU7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0LFxuICAgICAgICBnZXRPcHRpb24sXG4gICAgICAgIHNldFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgYXBpID0gTm9kZVZhbHVlKGlzVGV4dCwgJ3RleHQnKTtcbiAgICBjb25zdCBnZXQkNiA9IGVsZW1lbnQgPT4gYXBpLmdldChlbGVtZW50KTtcbiAgICBjb25zdCBnZXRPcHRpb24gPSBlbGVtZW50ID0+IGFwaS5nZXRPcHRpb24oZWxlbWVudCk7XG4gICAgY29uc3Qgc2V0ID0gKGVsZW1lbnQsIHZhbHVlKSA9PiBhcGkuc2V0KGVsZW1lbnQsIHZhbHVlKTtcblxuICAgIGNvbnN0IGdldEVuZCA9IGVsZW1lbnQgPT4gbmFtZShlbGVtZW50KSA9PT0gJ2ltZycgPyAxIDogZ2V0T3B0aW9uKGVsZW1lbnQpLmZvbGQoKCkgPT4gY2hpbGRyZW4kMihlbGVtZW50KS5sZW5ndGgsIHYgPT4gdi5sZW5ndGgpO1xuICAgIGNvbnN0IGlzVGV4dE5vZGVXaXRoQ3Vyc29yUG9zaXRpb24gPSBlbCA9PiBnZXRPcHRpb24oZWwpLmZpbHRlcih0ZXh0ID0+IHRleHQudHJpbSgpLmxlbmd0aCAhPT0gMCB8fCB0ZXh0LmluZGV4T2YobmJzcCkgPiAtMSkuaXNTb21lKCk7XG4gICAgY29uc3QgaXNDb250ZW50RWRpdGFibGVGYWxzZSA9IGVsZW0gPT4gaXNIVE1MRWxlbWVudChlbGVtKSAmJiBnZXQkYihlbGVtLCAnY29udGVudGVkaXRhYmxlJykgPT09ICdmYWxzZSc7XG4gICAgY29uc3QgZWxlbWVudHNXaXRoQ3Vyc29yUG9zaXRpb24gPSBbXG4gICAgICAnaW1nJyxcbiAgICAgICdicidcbiAgICBdO1xuICAgIGNvbnN0IGlzQ3Vyc29yUG9zaXRpb24gPSBlbGVtID0+IHtcbiAgICAgIGNvbnN0IGhhc0N1cnNvclBvc2l0aW9uID0gaXNUZXh0Tm9kZVdpdGhDdXJzb3JQb3NpdGlvbihlbGVtKTtcbiAgICAgIHJldHVybiBoYXNDdXJzb3JQb3NpdGlvbiB8fCBjb250YWlucyQyKGVsZW1lbnRzV2l0aEN1cnNvclBvc2l0aW9uLCBuYW1lKGVsZW0pKSB8fCBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlKGVsZW0pO1xuICAgIH07XG5cbiAgICBjb25zdCBmaXJzdCA9IGVsZW1lbnQgPT4gZGVzY2VuZGFudCQxKGVsZW1lbnQsIGlzQ3Vyc29yUG9zaXRpb24pO1xuICAgIGNvbnN0IGxhc3QkMSA9IGVsZW1lbnQgPT4gZGVzY2VuZGFudFJ0bChlbGVtZW50LCBpc0N1cnNvclBvc2l0aW9uKTtcbiAgICBjb25zdCBkZXNjZW5kYW50UnRsID0gKHNjb3BlLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGNvbnN0IGRlc2NlbmQgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBjaGlsZHJlbiQyKGVsZW1lbnQpO1xuICAgICAgICBmb3IgKGxldCBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgICAgIGlmIChwcmVkaWNhdGUoY2hpbGQpKSB7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShjaGlsZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlcyA9IGRlc2NlbmQoY2hpbGQpO1xuICAgICAgICAgIGlmIChyZXMuaXNTb21lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGRlc2NlbmQoc2NvcGUpO1xuICAgIH07XG5cbiAgICBjb25zdCB0cmFuc2ZlcmFibGVBdHRyaWJ1dGVzID0ge1xuICAgICAgc2NvcGU6IFtcbiAgICAgICAgJ3JvdycsXG4gICAgICAgICdjb2wnXG4gICAgICBdXG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVDZWxsID0gZG9jID0+ICgpID0+IHtcbiAgICAgIGNvbnN0IHRkID0gU3VnYXJFbGVtZW50LmZyb21UYWcoJ3RkJywgZG9jLmRvbSk7XG4gICAgICBhcHBlbmQkMSh0ZCwgU3VnYXJFbGVtZW50LmZyb21UYWcoJ2JyJywgZG9jLmRvbSkpO1xuICAgICAgcmV0dXJuIHRkO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlQ29sID0gZG9jID0+ICgpID0+IHtcbiAgICAgIHJldHVybiBTdWdhckVsZW1lbnQuZnJvbVRhZygnY29sJywgZG9jLmRvbSk7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVDb2xncm91cCA9IGRvYyA9PiAoKSA9PiB7XG4gICAgICByZXR1cm4gU3VnYXJFbGVtZW50LmZyb21UYWcoJ2NvbGdyb3VwJywgZG9jLmRvbSk7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVSb3ckMSA9IGRvYyA9PiAoKSA9PiB7XG4gICAgICByZXR1cm4gU3VnYXJFbGVtZW50LmZyb21UYWcoJ3RyJywgZG9jLmRvbSk7XG4gICAgfTtcbiAgICBjb25zdCByZXBsYWNlJDEgPSAoY2VsbCwgdGFnLCBhdHRycykgPT4ge1xuICAgICAgY29uc3QgcmVwbGljYSA9IGNvcHkkMihjZWxsLCB0YWcpO1xuICAgICAgZWFjaCQxKGF0dHJzLCAodiwgaykgPT4ge1xuICAgICAgICBpZiAodiA9PT0gbnVsbCkge1xuICAgICAgICAgIHJlbW92ZSQ3KHJlcGxpY2EsIGspO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldCQyKHJlcGxpY2EsIGssIHYpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXBsaWNhO1xuICAgIH07XG4gICAgY29uc3QgcGFzdGVSZXBsYWNlID0gY2VsbCA9PiB7XG4gICAgICByZXR1cm4gY2VsbDtcbiAgICB9O1xuICAgIGNvbnN0IGNsb25lRm9ybWF0cyA9IChvbGRDZWxsLCBuZXdDZWxsLCBmb3JtYXRzKSA9PiB7XG4gICAgICBjb25zdCBmaXJzdCQxID0gZmlyc3Qob2xkQ2VsbCk7XG4gICAgICByZXR1cm4gZmlyc3QkMS5tYXAoZmlyc3RUZXh0ID0+IHtcbiAgICAgICAgY29uc3QgZm9ybWF0U2VsZWN0b3IgPSBmb3JtYXRzLmpvaW4oJywnKTtcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IGFuY2VzdG9ycyQzKGZpcnN0VGV4dCwgZm9ybWF0U2VsZWN0b3IsIGVsZW1lbnQgPT4ge1xuICAgICAgICAgIHJldHVybiBlcSQxKGVsZW1lbnQsIG9sZENlbGwpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZvbGRyKHBhcmVudHMsIChsYXN0LCBwYXJlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBjbG9uZWRGb3JtYXQgPSBzaGFsbG93KHBhcmVudCk7XG4gICAgICAgICAgYXBwZW5kJDEobGFzdCwgY2xvbmVkRm9ybWF0KTtcbiAgICAgICAgICByZXR1cm4gY2xvbmVkRm9ybWF0O1xuICAgICAgICB9LCBuZXdDZWxsKTtcbiAgICAgIH0pLmdldE9yKG5ld0NlbGwpO1xuICAgIH07XG4gICAgY29uc3QgY2xvbmVBcHByb3ByaWF0ZUF0dHJpYnV0ZXMgPSAob3JpZ2luYWwsIGNsb25lKSA9PiB7XG4gICAgICBlYWNoJDEodHJhbnNmZXJhYmxlQXR0cmlidXRlcywgKHZhbGlkQXR0cmlidXRlcywgYXR0cmlidXRlTmFtZSkgPT4gZ2V0T3B0KG9yaWdpbmFsLCBhdHRyaWJ1dGVOYW1lKS5maWx0ZXIoYXR0cmlidXRlID0+IGNvbnRhaW5zJDIodmFsaWRBdHRyaWJ1dGVzLCBhdHRyaWJ1dGUpKS5lYWNoKGF0dHJpYnV0ZSA9PiBzZXQkMihjbG9uZSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlKSkpO1xuICAgIH07XG4gICAgY29uc3QgY2VsbE9wZXJhdGlvbnMgPSAobXV0YXRlLCBkb2MsIGZvcm1hdHNUb0Nsb25lKSA9PiB7XG4gICAgICBjb25zdCBjbG9uZUNzcyA9IChwcmV2LCBjbG9uZSkgPT4ge1xuICAgICAgICBjb3B5JDEocHJldi5lbGVtZW50LCBjbG9uZSk7XG4gICAgICAgIHJlbW92ZSQ1KGNsb25lLCAnaGVpZ2h0Jyk7XG4gICAgICAgIGlmIChwcmV2LmNvbHNwYW4gIT09IDEpIHtcbiAgICAgICAgICByZW1vdmUkNShjbG9uZSwgJ3dpZHRoJyk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBuZXdDZWxsID0gcHJldiA9PiB7XG4gICAgICAgIGNvbnN0IHRkID0gU3VnYXJFbGVtZW50LmZyb21UYWcobmFtZShwcmV2LmVsZW1lbnQpLCBkb2MuZG9tKTtcbiAgICAgICAgY29uc3QgZm9ybWF0cyA9IGZvcm1hdHNUb0Nsb25lLmdldE9yKFtcbiAgICAgICAgICAnc3Ryb25nJyxcbiAgICAgICAgICAnZW0nLFxuICAgICAgICAgICdiJyxcbiAgICAgICAgICAnaScsXG4gICAgICAgICAgJ3NwYW4nLFxuICAgICAgICAgICdmb250JyxcbiAgICAgICAgICAnaDEnLFxuICAgICAgICAgICdoMicsXG4gICAgICAgICAgJ2gzJyxcbiAgICAgICAgICAnaDQnLFxuICAgICAgICAgICdoNScsXG4gICAgICAgICAgJ2g2JyxcbiAgICAgICAgICAncCcsXG4gICAgICAgICAgJ2RpdidcbiAgICAgICAgXSk7XG4gICAgICAgIGNvbnN0IGxhc3ROb2RlID0gZm9ybWF0cy5sZW5ndGggPiAwID8gY2xvbmVGb3JtYXRzKHByZXYuZWxlbWVudCwgdGQsIGZvcm1hdHMpIDogdGQ7XG4gICAgICAgIGFwcGVuZCQxKGxhc3ROb2RlLCBTdWdhckVsZW1lbnQuZnJvbVRhZygnYnInKSk7XG4gICAgICAgIGNsb25lQ3NzKHByZXYsIHRkKTtcbiAgICAgICAgY2xvbmVBcHByb3ByaWF0ZUF0dHJpYnV0ZXMocHJldi5lbGVtZW50LCB0ZCk7XG4gICAgICAgIG11dGF0ZShwcmV2LmVsZW1lbnQsIHRkKTtcbiAgICAgICAgcmV0dXJuIHRkO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG5ld0NvbCA9IHByZXYgPT4ge1xuICAgICAgICBjb25zdCBjb2wgPSBTdWdhckVsZW1lbnQuZnJvbVRhZyhuYW1lKHByZXYuZWxlbWVudCksIGRvYy5kb20pO1xuICAgICAgICBjbG9uZUNzcyhwcmV2LCBjb2wpO1xuICAgICAgICBtdXRhdGUocHJldi5lbGVtZW50LCBjb2wpO1xuICAgICAgICByZXR1cm4gY29sO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbDogbmV3Q29sLFxuICAgICAgICBjb2xncm91cDogY3JlYXRlQ29sZ3JvdXAoZG9jKSxcbiAgICAgICAgcm93OiBjcmVhdGVSb3ckMShkb2MpLFxuICAgICAgICBjZWxsOiBuZXdDZWxsLFxuICAgICAgICByZXBsYWNlOiByZXBsYWNlJDEsXG4gICAgICAgIGNvbEdhcDogY3JlYXRlQ29sKGRvYyksXG4gICAgICAgIGdhcDogY3JlYXRlQ2VsbChkb2MpXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgcGFzdGUkMSA9IGRvYyA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2w6IGNyZWF0ZUNvbChkb2MpLFxuICAgICAgICBjb2xncm91cDogY3JlYXRlQ29sZ3JvdXAoZG9jKSxcbiAgICAgICAgcm93OiBjcmVhdGVSb3ckMShkb2MpLFxuICAgICAgICBjZWxsOiBjcmVhdGVDZWxsKGRvYyksXG4gICAgICAgIHJlcGxhY2U6IHBhc3RlUmVwbGFjZSxcbiAgICAgICAgY29sR2FwOiBjcmVhdGVDb2woZG9jKSxcbiAgICAgICAgZ2FwOiBjcmVhdGVDZWxsKGRvYylcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGZyb21IdG1sID0gKGh0bWwsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBzY29wZSB8fCBkb2N1bWVudDtcbiAgICAgIGNvbnN0IGRpdiA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGRpdi5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgcmV0dXJuIGNoaWxkcmVuJDIoU3VnYXJFbGVtZW50LmZyb21Eb20oZGl2KSk7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tRG9tID0gbm9kZXMgPT4gbWFwJDEobm9kZXMsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcblxuICAgIGNvbnN0IG9wdGlvbiA9IG5hbWUgPT4gZWRpdG9yID0+IGVkaXRvci5vcHRpb25zLmdldChuYW1lKTtcbiAgICBjb25zdCBkZWZhdWx0V2lkdGggPSAnMTAwJSc7XG4gICAgY29uc3QgZ2V0UGl4ZWxGb3JjZWRXaWR0aCA9IGVkaXRvciA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgY29uc3QgcGFyZW50QmxvY2sgPSAoX2EgPSBkb20uZ2V0UGFyZW50KGVkaXRvci5zZWxlY3Rpb24uZ2V0U3RhcnQoKSwgZG9tLmlzQmxvY2spKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgcmV0dXJuIGdldElubmVyKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHBhcmVudEJsb2NrKSkgKyAncHgnO1xuICAgIH07XG4gICAgY29uc3QgZGV0ZXJtaW5lRGVmYXVsdFRhYmxlU3R5bGVzID0gKGVkaXRvciwgZGVmYXVsdFN0eWxlcykgPT4ge1xuICAgICAgaWYgKGlzVGFibGVSZXNwb25zaXZlRm9yY2VkKGVkaXRvcikgfHwgIXNob3VsZFN0eWxlV2l0aENzcyhlZGl0b3IpKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0U3R5bGVzO1xuICAgICAgfSBlbHNlIGlmIChpc1RhYmxlUGl4ZWxzRm9yY2VkKGVkaXRvcikpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5kZWZhdWx0U3R5bGVzLFxuICAgICAgICAgIHdpZHRoOiBnZXRQaXhlbEZvcmNlZFdpZHRoKGVkaXRvcilcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uZGVmYXVsdFN0eWxlcyxcbiAgICAgICAgICB3aWR0aDogZGVmYXVsdFdpZHRoXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBkZXRlcm1pbmVEZWZhdWx0VGFibGVBdHRyaWJ1dGVzID0gKGVkaXRvciwgZGVmYXVsdEF0dHJpYnV0ZXMpID0+IHtcbiAgICAgIGlmIChpc1RhYmxlUmVzcG9uc2l2ZUZvcmNlZChlZGl0b3IpIHx8IHNob3VsZFN0eWxlV2l0aENzcyhlZGl0b3IpKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0QXR0cmlidXRlcztcbiAgICAgIH0gZWxzZSBpZiAoaXNUYWJsZVBpeGVsc0ZvcmNlZChlZGl0b3IpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uZGVmYXVsdEF0dHJpYnV0ZXMsXG4gICAgICAgICAgd2lkdGg6IGdldFBpeGVsRm9yY2VkV2lkdGgoZWRpdG9yKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5kZWZhdWx0QXR0cmlidXRlcyxcbiAgICAgICAgICB3aWR0aDogZGVmYXVsdFdpZHRoXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlciA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCByZWdpc3Rlck9wdGlvbiA9IGVkaXRvci5vcHRpb25zLnJlZ2lzdGVyO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3RhYmxlX2Nsb25lX2VsZW1lbnRzJywgeyBwcm9jZXNzb3I6ICdzdHJpbmdbXScgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGFibGVfdXNlX2NvbGdyb3VwcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3RhYmxlX2hlYWRlcl90eXBlJywge1xuICAgICAgICBwcm9jZXNzb3I6IHZhbHVlID0+IHtcbiAgICAgICAgICBjb25zdCB2YWxpZCA9IGNvbnRhaW5zJDIoW1xuICAgICAgICAgICAgJ3NlY3Rpb24nLFxuICAgICAgICAgICAgJ2NlbGxzJyxcbiAgICAgICAgICAgICdzZWN0aW9uQ2VsbHMnLFxuICAgICAgICAgICAgJ2F1dG8nXG4gICAgICAgICAgXSwgdmFsdWUpO1xuICAgICAgICAgIHJldHVybiB2YWxpZCA/IHtcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdmFsaWRcbiAgICAgICAgICB9IDoge1xuICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogJ011c3QgYmUgb25lIG9mOiBzZWN0aW9uLCBjZWxscywgc2VjdGlvbkNlbGxzIG9yIGF1dG8uJ1xuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6ICdzZWN0aW9uJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGFibGVfc2l6aW5nX21vZGUnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICdhdXRvJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGFibGVfZGVmYXVsdF9hdHRyaWJ1dGVzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdvYmplY3QnLFxuICAgICAgICBkZWZhdWx0OiB7IGJvcmRlcjogJzEnIH1cbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3RhYmxlX2RlZmF1bHRfc3R5bGVzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdvYmplY3QnLFxuICAgICAgICBkZWZhdWx0OiB7ICdib3JkZXItY29sbGFwc2UnOiAnY29sbGFwc2UnIH1cbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3RhYmxlX2NvbHVtbl9yZXNpemluZycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiB2YWx1ZSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsaWQgPSBjb250YWlucyQyKFtcbiAgICAgICAgICAgICdwcmVzZXJ2ZXRhYmxlJyxcbiAgICAgICAgICAgICdyZXNpemV0YWJsZSdcbiAgICAgICAgICBdLCB2YWx1ZSk7XG4gICAgICAgICAgcmV0dXJuIHZhbGlkID8ge1xuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB2YWxpZFxuICAgICAgICAgIH0gOiB7XG4gICAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiAnTXVzdCBiZSBwcmVzZXJ2ZXRhYmxlLCBvciByZXNpemV0YWJsZS4nXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDogJ3ByZXNlcnZldGFibGUnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd0YWJsZV9yZXNpemVfYmFycycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3RhYmxlX3N0eWxlX2J5X2NzcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3RhYmxlX21lcmdlX2NvbnRlbnRfb25fcGFzdGUnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFRhYmxlQ2xvbmVFbGVtZW50cyA9IGVkaXRvciA9PiB7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShlZGl0b3Iub3B0aW9ucy5nZXQoJ3RhYmxlX2Nsb25lX2VsZW1lbnRzJykpO1xuICAgIH07XG4gICAgY29uc3QgaGFzVGFibGVPYmplY3RSZXNpemluZyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBvYmplY3RSZXNpemluZyA9IGVkaXRvci5vcHRpb25zLmdldCgnb2JqZWN0X3Jlc2l6aW5nJyk7XG4gICAgICByZXR1cm4gY29udGFpbnMkMihvYmplY3RSZXNpemluZy5zcGxpdCgnLCcpLCAndGFibGUnKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFRhYmxlSGVhZGVyVHlwZSA9IG9wdGlvbigndGFibGVfaGVhZGVyX3R5cGUnKTtcbiAgICBjb25zdCBnZXRUYWJsZUNvbHVtblJlc2l6aW5nQmVoYXZpb3VyID0gb3B0aW9uKCd0YWJsZV9jb2x1bW5fcmVzaXppbmcnKTtcbiAgICBjb25zdCBpc1ByZXNlcnZlVGFibGVDb2x1bW5SZXNpemluZyA9IGVkaXRvciA9PiBnZXRUYWJsZUNvbHVtblJlc2l6aW5nQmVoYXZpb3VyKGVkaXRvcikgPT09ICdwcmVzZXJ2ZXRhYmxlJztcbiAgICBjb25zdCBpc1Jlc2l6ZVRhYmxlQ29sdW1uUmVzaXppbmcgPSBlZGl0b3IgPT4gZ2V0VGFibGVDb2x1bW5SZXNpemluZ0JlaGF2aW91cihlZGl0b3IpID09PSAncmVzaXpldGFibGUnO1xuICAgIGNvbnN0IGdldFRhYmxlU2l6aW5nTW9kZSA9IG9wdGlvbigndGFibGVfc2l6aW5nX21vZGUnKTtcbiAgICBjb25zdCBpc1RhYmxlUGVyY2VudGFnZXNGb3JjZWQgPSBlZGl0b3IgPT4gZ2V0VGFibGVTaXppbmdNb2RlKGVkaXRvcikgPT09ICdyZWxhdGl2ZSc7XG4gICAgY29uc3QgaXNUYWJsZVBpeGVsc0ZvcmNlZCA9IGVkaXRvciA9PiBnZXRUYWJsZVNpemluZ01vZGUoZWRpdG9yKSA9PT0gJ2ZpeGVkJztcbiAgICBjb25zdCBpc1RhYmxlUmVzcG9uc2l2ZUZvcmNlZCA9IGVkaXRvciA9PiBnZXRUYWJsZVNpemluZ01vZGUoZWRpdG9yKSA9PT0gJ3Jlc3BvbnNpdmUnO1xuICAgIGNvbnN0IGhhc1RhYmxlUmVzaXplQmFycyA9IG9wdGlvbigndGFibGVfcmVzaXplX2JhcnMnKTtcbiAgICBjb25zdCBzaG91bGRTdHlsZVdpdGhDc3MgPSBvcHRpb24oJ3RhYmxlX3N0eWxlX2J5X2NzcycpO1xuICAgIGNvbnN0IHNob3VsZE1lcmdlQ29udGVudE9uUGFzdGUgPSBvcHRpb24oJ3RhYmxlX21lcmdlX2NvbnRlbnRfb25fcGFzdGUnKTtcbiAgICBjb25zdCBnZXRUYWJsZURlZmF1bHRBdHRyaWJ1dGVzID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBlZGl0b3Iub3B0aW9ucztcbiAgICAgIGNvbnN0IGRlZmF1bHRBdHRyaWJ1dGVzID0gb3B0aW9ucy5nZXQoJ3RhYmxlX2RlZmF1bHRfYXR0cmlidXRlcycpO1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaXNTZXQoJ3RhYmxlX2RlZmF1bHRfYXR0cmlidXRlcycpID8gZGVmYXVsdEF0dHJpYnV0ZXMgOiBkZXRlcm1pbmVEZWZhdWx0VGFibGVBdHRyaWJ1dGVzKGVkaXRvciwgZGVmYXVsdEF0dHJpYnV0ZXMpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0VGFibGVEZWZhdWx0U3R5bGVzID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBlZGl0b3Iub3B0aW9ucztcbiAgICAgIGNvbnN0IGRlZmF1bHRTdHlsZXMgPSBvcHRpb25zLmdldCgndGFibGVfZGVmYXVsdF9zdHlsZXMnKTtcbiAgICAgIHJldHVybiBvcHRpb25zLmlzU2V0KCd0YWJsZV9kZWZhdWx0X3N0eWxlcycpID8gZGVmYXVsdFN0eWxlcyA6IGRldGVybWluZURlZmF1bHRUYWJsZVN0eWxlcyhlZGl0b3IsIGRlZmF1bHRTdHlsZXMpO1xuICAgIH07XG4gICAgY29uc3QgdGFibGVVc2VDb2x1bW5Hcm91cCA9IG9wdGlvbigndGFibGVfdXNlX2NvbGdyb3VwcycpO1xuXG4gICAgY29uc3QgY2xvc2VzdCA9IHRhcmdldCA9PiBjbG9zZXN0JDEodGFyZ2V0LCAnW2NvbnRlbnRlZGl0YWJsZV0nKTtcbiAgICBjb25zdCBpc0VkaXRhYmxlJDEgPSAoZWxlbWVudCwgYXNzdW1lRWRpdGFibGUgPSBmYWxzZSkgPT4ge1xuICAgICAgaWYgKGluQm9keShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5kb20uaXNDb250ZW50RWRpdGFibGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY2xvc2VzdChlbGVtZW50KS5mb2xkKGNvbnN0YW50KGFzc3VtZUVkaXRhYmxlKSwgZWRpdGFibGUgPT4gZ2V0UmF3KGVkaXRhYmxlKSA9PT0gJ3RydWUnKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdldFJhdyA9IGVsZW1lbnQgPT4gZWxlbWVudC5kb20uY29udGVudEVkaXRhYmxlO1xuXG4gICAgY29uc3QgZ2V0Qm9keSA9IGVkaXRvciA9PiBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKTtcbiAgICBjb25zdCBnZXRJc1Jvb3QgPSBlZGl0b3IgPT4gZWxlbWVudCA9PiBlcSQxKGVsZW1lbnQsIGdldEJvZHkoZWRpdG9yKSk7XG4gICAgY29uc3QgcmVtb3ZlRGF0YVN0eWxlID0gdGFibGUgPT4ge1xuICAgICAgcmVtb3ZlJDcodGFibGUsICdkYXRhLW1jZS1zdHlsZScpO1xuICAgICAgY29uc3QgcmVtb3ZlU3R5bGVBdHRyaWJ1dGUgPSBlbGVtZW50ID0+IHJlbW92ZSQ3KGVsZW1lbnQsICdkYXRhLW1jZS1zdHlsZScpO1xuICAgICAgZWFjaCQyKGNlbGxzJDEodGFibGUpLCByZW1vdmVTdHlsZUF0dHJpYnV0ZSk7XG4gICAgICBlYWNoJDIoY29sdW1ucyQxKHRhYmxlKSwgcmVtb3ZlU3R5bGVBdHRyaWJ1dGUpO1xuICAgICAgZWFjaCQyKHJvd3MkMSh0YWJsZSksIHJlbW92ZVN0eWxlQXR0cmlidXRlKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNlbGVjdGlvblN0YXJ0ID0gZWRpdG9yID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5zZWxlY3Rpb24uZ2V0U3RhcnQoKSk7XG4gICAgY29uc3QgZ2V0UGl4ZWxXaWR0aCA9IGVsbSA9PiBlbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgY29uc3QgZ2V0UGl4ZWxIZWlnaHQgPSBlbG0gPT4gZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICBjb25zdCBnZXRSYXdXaWR0aCA9IChlZGl0b3IsIGVsbSkgPT4ge1xuICAgICAgY29uc3QgcmF3ID0gZWRpdG9yLmRvbS5nZXRTdHlsZShlbG0sICd3aWR0aCcpIHx8IGVkaXRvci5kb20uZ2V0QXR0cmliKGVsbSwgJ3dpZHRoJyk7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShyYXcpLmZpbHRlcihpc05vdEVtcHR5KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzUGVyY2VudGFnZSQxID0gdmFsdWUgPT4gL14oXFxkKyhcXC5cXGQrKT8pJSQvLnRlc3QodmFsdWUpO1xuICAgIGNvbnN0IGlzUGl4ZWwgPSB2YWx1ZSA9PiAvXihcXGQrKFxcLlxcZCspPylweCQvLnRlc3QodmFsdWUpO1xuICAgIGNvbnN0IGlzSW5FZGl0YWJsZUNvbnRleHQkMSA9IGNlbGwgPT4gY2xvc2VzdCQyKGNlbGwsIGlzVGFnKCd0YWJsZScpKS5leGlzdHMoaXNFZGl0YWJsZSQxKTtcblxuICAgIGNvbnN0IGluU2VsZWN0aW9uID0gKGJvdW5kcywgZGV0YWlsKSA9PiB7XG4gICAgICBjb25zdCBsZWZ0RWRnZSA9IGRldGFpbC5jb2x1bW47XG4gICAgICBjb25zdCByaWdodEVkZ2UgPSBkZXRhaWwuY29sdW1uICsgZGV0YWlsLmNvbHNwYW4gLSAxO1xuICAgICAgY29uc3QgdG9wRWRnZSA9IGRldGFpbC5yb3c7XG4gICAgICBjb25zdCBib3R0b21FZGdlID0gZGV0YWlsLnJvdyArIGRldGFpbC5yb3dzcGFuIC0gMTtcbiAgICAgIHJldHVybiBsZWZ0RWRnZSA8PSBib3VuZHMuZmluaXNoQ29sICYmIHJpZ2h0RWRnZSA+PSBib3VuZHMuc3RhcnRDb2wgJiYgKHRvcEVkZ2UgPD0gYm91bmRzLmZpbmlzaFJvdyAmJiBib3R0b21FZGdlID49IGJvdW5kcy5zdGFydFJvdyk7XG4gICAgfTtcbiAgICBjb25zdCBpc1dpdGhpbiA9IChib3VuZHMsIGRldGFpbCkgPT4ge1xuICAgICAgcmV0dXJuIGRldGFpbC5jb2x1bW4gPj0gYm91bmRzLnN0YXJ0Q29sICYmIGRldGFpbC5jb2x1bW4gKyBkZXRhaWwuY29sc3BhbiAtIDEgPD0gYm91bmRzLmZpbmlzaENvbCAmJiBkZXRhaWwucm93ID49IGJvdW5kcy5zdGFydFJvdyAmJiBkZXRhaWwucm93ICsgZGV0YWlsLnJvd3NwYW4gLSAxIDw9IGJvdW5kcy5maW5pc2hSb3c7XG4gICAgfTtcbiAgICBjb25zdCBpc1JlY3Rhbmd1bGFyID0gKHdhcmVob3VzZSwgYm91bmRzKSA9PiB7XG4gICAgICBsZXQgaXNSZWN0ID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGRldGFpbElzV2l0aGluID0gY3VycnkoaXNXaXRoaW4sIGJvdW5kcyk7XG4gICAgICBmb3IgKGxldCBpID0gYm91bmRzLnN0YXJ0Um93OyBpIDw9IGJvdW5kcy5maW5pc2hSb3c7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gYm91bmRzLnN0YXJ0Q29sOyBqIDw9IGJvdW5kcy5maW5pc2hDb2w7IGorKykge1xuICAgICAgICAgIGlzUmVjdCA9IGlzUmVjdCAmJiBXYXJlaG91c2UuZ2V0QXQod2FyZWhvdXNlLCBpLCBqKS5leGlzdHMoZGV0YWlsSXNXaXRoaW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNSZWN0ID8gT3B0aW9uYWwuc29tZShib3VuZHMpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRCb3VuZHMgPSAoZGV0YWlsQSwgZGV0YWlsQikgPT4ge1xuICAgICAgcmV0dXJuIGJvdW5kcyhNYXRoLm1pbihkZXRhaWxBLnJvdywgZGV0YWlsQi5yb3cpLCBNYXRoLm1pbihkZXRhaWxBLmNvbHVtbiwgZGV0YWlsQi5jb2x1bW4pLCBNYXRoLm1heChkZXRhaWxBLnJvdyArIGRldGFpbEEucm93c3BhbiAtIDEsIGRldGFpbEIucm93ICsgZGV0YWlsQi5yb3dzcGFuIC0gMSksIE1hdGgubWF4KGRldGFpbEEuY29sdW1uICsgZGV0YWlsQS5jb2xzcGFuIC0gMSwgZGV0YWlsQi5jb2x1bW4gKyBkZXRhaWxCLmNvbHNwYW4gLSAxKSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRBbnlCb3ggPSAod2FyZWhvdXNlLCBzdGFydENlbGwsIGZpbmlzaENlbGwpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0Q29vcmRzID0gV2FyZWhvdXNlLmZpbmRJdGVtKHdhcmVob3VzZSwgc3RhcnRDZWxsLCBlcSQxKTtcbiAgICAgIGNvbnN0IGZpbmlzaENvb3JkcyA9IFdhcmVob3VzZS5maW5kSXRlbSh3YXJlaG91c2UsIGZpbmlzaENlbGwsIGVxJDEpO1xuICAgICAgcmV0dXJuIHN0YXJ0Q29vcmRzLmJpbmQoc2MgPT4ge1xuICAgICAgICByZXR1cm4gZmluaXNoQ29vcmRzLm1hcChmYyA9PiB7XG4gICAgICAgICAgcmV0dXJuIGdldEJvdW5kcyhzYywgZmMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Qm94JDEgPSAod2FyZWhvdXNlLCBzdGFydENlbGwsIGZpbmlzaENlbGwpID0+IHtcbiAgICAgIHJldHVybiBnZXRBbnlCb3god2FyZWhvdXNlLCBzdGFydENlbGwsIGZpbmlzaENlbGwpLmJpbmQoYm91bmRzID0+IHtcbiAgICAgICAgcmV0dXJuIGlzUmVjdGFuZ3VsYXIod2FyZWhvdXNlLCBib3VuZHMpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG1vdmVCeSQxID0gKHdhcmVob3VzZSwgY2VsbCwgcm93LCBjb2x1bW4pID0+IHtcbiAgICAgIHJldHVybiBXYXJlaG91c2UuZmluZEl0ZW0od2FyZWhvdXNlLCBjZWxsLCBlcSQxKS5iaW5kKGRldGFpbCA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Um93ID0gcm93ID4gMCA/IGRldGFpbC5yb3cgKyBkZXRhaWwucm93c3BhbiAtIDEgOiBkZXRhaWwucm93O1xuICAgICAgICBjb25zdCBzdGFydENvbCA9IGNvbHVtbiA+IDAgPyBkZXRhaWwuY29sdW1uICsgZGV0YWlsLmNvbHNwYW4gLSAxIDogZGV0YWlsLmNvbHVtbjtcbiAgICAgICAgY29uc3QgZGVzdCA9IFdhcmVob3VzZS5nZXRBdCh3YXJlaG91c2UsIHN0YXJ0Um93ICsgcm93LCBzdGFydENvbCArIGNvbHVtbik7XG4gICAgICAgIHJldHVybiBkZXN0Lm1hcChkID0+IHtcbiAgICAgICAgICByZXR1cm4gZC5lbGVtZW50O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW50ZXJjZXB0cyQxID0gKHdhcmVob3VzZSwgc3RhcnQsIGZpbmlzaCkgPT4ge1xuICAgICAgcmV0dXJuIGdldEFueUJveCh3YXJlaG91c2UsIHN0YXJ0LCBmaW5pc2gpLm1hcChib3VuZHMgPT4ge1xuICAgICAgICBjb25zdCBpbnNpZGUgPSBXYXJlaG91c2UuZmlsdGVySXRlbXMod2FyZWhvdXNlLCBjdXJyeShpblNlbGVjdGlvbiwgYm91bmRzKSk7XG4gICAgICAgIHJldHVybiBtYXAkMShpbnNpZGUsIGRldGFpbCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGRldGFpbC5lbGVtZW50O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcGFyZW50Q2VsbCA9ICh3YXJlaG91c2UsIGlubmVyQ2VsbCkgPT4ge1xuICAgICAgY29uc3QgaXNDb250YWluZWRCeSA9IChjMSwgYzIpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5zJDEoYzIsIGMxKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gV2FyZWhvdXNlLmZpbmRJdGVtKHdhcmVob3VzZSwgaW5uZXJDZWxsLCBpc0NvbnRhaW5lZEJ5KS5tYXAoZGV0YWlsID0+IHtcbiAgICAgICAgcmV0dXJuIGRldGFpbC5lbGVtZW50O1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG1vdmVCeSA9IChjZWxsLCBkZWx0YVJvdywgZGVsdGFDb2x1bW4pID0+IHtcbiAgICAgIHJldHVybiB0YWJsZShjZWxsKS5iaW5kKHRhYmxlID0+IHtcbiAgICAgICAgY29uc3Qgd2FyZWhvdXNlID0gZ2V0V2FyZWhvdXNlKHRhYmxlKTtcbiAgICAgICAgcmV0dXJuIG1vdmVCeSQxKHdhcmVob3VzZSwgY2VsbCwgZGVsdGFSb3csIGRlbHRhQ29sdW1uKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW50ZXJjZXB0cyA9ICh0YWJsZSwgZmlyc3QsIGxhc3QpID0+IHtcbiAgICAgIGNvbnN0IHdhcmVob3VzZSA9IGdldFdhcmVob3VzZSh0YWJsZSk7XG4gICAgICByZXR1cm4gaW50ZXJjZXB0cyQxKHdhcmVob3VzZSwgZmlyc3QsIGxhc3QpO1xuICAgIH07XG4gICAgY29uc3QgbmVzdGVkSW50ZXJjZXB0cyA9ICh0YWJsZSwgZmlyc3QsIGZpcnN0VGFibGUsIGxhc3QsIGxhc3RUYWJsZSkgPT4ge1xuICAgICAgY29uc3Qgd2FyZWhvdXNlID0gZ2V0V2FyZWhvdXNlKHRhYmxlKTtcbiAgICAgIGNvbnN0IG9wdFN0YXJ0Q2VsbCA9IGVxJDEodGFibGUsIGZpcnN0VGFibGUpID8gT3B0aW9uYWwuc29tZShmaXJzdCkgOiBwYXJlbnRDZWxsKHdhcmVob3VzZSwgZmlyc3QpO1xuICAgICAgY29uc3Qgb3B0TGFzdENlbGwgPSBlcSQxKHRhYmxlLCBsYXN0VGFibGUpID8gT3B0aW9uYWwuc29tZShsYXN0KSA6IHBhcmVudENlbGwod2FyZWhvdXNlLCBsYXN0KTtcbiAgICAgIHJldHVybiBvcHRTdGFydENlbGwuYmluZChzdGFydENlbGwgPT4gb3B0TGFzdENlbGwuYmluZChsYXN0Q2VsbCA9PiBpbnRlcmNlcHRzJDEod2FyZWhvdXNlLCBzdGFydENlbGwsIGxhc3RDZWxsKSkpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Qm94ID0gKHRhYmxlLCBmaXJzdCwgbGFzdCkgPT4ge1xuICAgICAgY29uc3Qgd2FyZWhvdXNlID0gZ2V0V2FyZWhvdXNlKHRhYmxlKTtcbiAgICAgIHJldHVybiBnZXRCb3gkMSh3YXJlaG91c2UsIGZpcnN0LCBsYXN0KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFdhcmVob3VzZSA9IFdhcmVob3VzZS5mcm9tVGFibGU7XG5cbiAgICB2YXIgVGFnQm91bmRhcmllcyA9IFtcbiAgICAgICdib2R5JyxcbiAgICAgICdwJyxcbiAgICAgICdkaXYnLFxuICAgICAgJ2FydGljbGUnLFxuICAgICAgJ2FzaWRlJyxcbiAgICAgICdmaWdjYXB0aW9uJyxcbiAgICAgICdmaWd1cmUnLFxuICAgICAgJ2Zvb3RlcicsXG4gICAgICAnaGVhZGVyJyxcbiAgICAgICduYXYnLFxuICAgICAgJ3NlY3Rpb24nLFxuICAgICAgJ29sJyxcbiAgICAgICd1bCcsXG4gICAgICAnbGknLFxuICAgICAgJ3RhYmxlJyxcbiAgICAgICd0aGVhZCcsXG4gICAgICAndGJvZHknLFxuICAgICAgJ3Rmb290JyxcbiAgICAgICdjYXB0aW9uJyxcbiAgICAgICd0cicsXG4gICAgICAndGQnLFxuICAgICAgJ3RoJyxcbiAgICAgICdoMScsXG4gICAgICAnaDInLFxuICAgICAgJ2gzJyxcbiAgICAgICdoNCcsXG4gICAgICAnaDUnLFxuICAgICAgJ2g2JyxcbiAgICAgICdibG9ja3F1b3RlJyxcbiAgICAgICdwcmUnLFxuICAgICAgJ2FkZHJlc3MnXG4gICAgXTtcblxuICAgIHZhciBEb21Vbml2ZXJzZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNsb25lID0gZWxlbWVudCA9PiB7XG4gICAgICAgIHJldHVybiBTdWdhckVsZW1lbnQuZnJvbURvbShlbGVtZW50LmRvbS5jbG9uZU5vZGUoZmFsc2UpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBkb2N1bWVudCA9IGVsZW1lbnQgPT4gZG9jdW1lbnRPck93bmVyKGVsZW1lbnQpLmRvbTtcbiAgICAgIGNvbnN0IGlzQm91bmRhcnkgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgaWYgKCFpc0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWUoZWxlbWVudCkgPT09ICdib2R5Jykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250YWlucyQyKFRhZ0JvdW5kYXJpZXMsIG5hbWUoZWxlbWVudCkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzRW1wdHlUYWcgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgaWYgKCFpc0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRhaW5zJDIoW1xuICAgICAgICAgICdicicsXG4gICAgICAgICAgJ2ltZycsXG4gICAgICAgICAgJ2hyJyxcbiAgICAgICAgICAnaW5wdXQnXG4gICAgICAgIF0sIG5hbWUoZWxlbWVudCkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzTm9uRWRpdGFibGUgPSBlbGVtZW50ID0+IGlzRWxlbWVudChlbGVtZW50KSAmJiBnZXQkYihlbGVtZW50LCAnY29udGVudGVkaXRhYmxlJykgPT09ICdmYWxzZSc7XG4gICAgICBjb25zdCBjb21wYXJlUG9zaXRpb24gPSAoZWxlbWVudCwgb3RoZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuZG9tLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG90aGVyLmRvbSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgY29weUF0dHJpYnV0ZXNUbyA9IChzb3VyY2UsIGRlc3RpbmF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGFzID0gY2xvbmUkMihzb3VyY2UpO1xuICAgICAgICBzZXRBbGwkMShkZXN0aW5hdGlvbiwgYXMpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzU3BlY2lhbCA9IGVsZW1lbnQgPT4ge1xuICAgICAgICBjb25zdCB0YWcgPSBuYW1lKGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gY29udGFpbnMkMihbXG4gICAgICAgICAgJ3NjcmlwdCcsXG4gICAgICAgICAgJ25vc2NyaXB0JyxcbiAgICAgICAgICAnaWZyYW1lJyxcbiAgICAgICAgICAnbm9mcmFtZXMnLFxuICAgICAgICAgICdub2VtYmVkJyxcbiAgICAgICAgICAndGl0bGUnLFxuICAgICAgICAgICdzdHlsZScsXG4gICAgICAgICAgJ3RleHRhcmVhJyxcbiAgICAgICAgICAneG1wJ1xuICAgICAgICBdLCB0YWcpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldExhbmd1YWdlID0gZWxlbWVudCA9PiBpc0VsZW1lbnQoZWxlbWVudCkgPyBnZXRPcHQoZWxlbWVudCwgJ2xhbmcnKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVwOiBjb25zdGFudCh7XG4gICAgICAgICAgc2VsZWN0b3I6IGFuY2VzdG9yJDEsXG4gICAgICAgICAgY2xvc2VzdDogY2xvc2VzdCQxLFxuICAgICAgICAgIHByZWRpY2F0ZTogYW5jZXN0b3IkMixcbiAgICAgICAgICBhbGw6IHBhcmVudHNcbiAgICAgICAgfSksXG4gICAgICAgIGRvd246IGNvbnN0YW50KHtcbiAgICAgICAgICBzZWxlY3RvcjogZGVzY2VuZGFudHMsXG4gICAgICAgICAgcHJlZGljYXRlOiBkZXNjZW5kYW50cyQxXG4gICAgICAgIH0pLFxuICAgICAgICBzdHlsZXM6IGNvbnN0YW50KHtcbiAgICAgICAgICBnZXQ6IGdldCRhLFxuICAgICAgICAgIGdldFJhdzogZ2V0UmF3JDIsXG4gICAgICAgICAgc2V0OiBzZXQkMSxcbiAgICAgICAgICByZW1vdmU6IHJlbW92ZSQ1XG4gICAgICAgIH0pLFxuICAgICAgICBhdHRyczogY29uc3RhbnQoe1xuICAgICAgICAgIGdldDogZ2V0JGIsXG4gICAgICAgICAgc2V0OiBzZXQkMixcbiAgICAgICAgICByZW1vdmU6IHJlbW92ZSQ3LFxuICAgICAgICAgIGNvcHlUbzogY29weUF0dHJpYnV0ZXNUb1xuICAgICAgICB9KSxcbiAgICAgICAgaW5zZXJ0OiBjb25zdGFudCh7XG4gICAgICAgICAgYmVmb3JlOiBiZWZvcmUkMyxcbiAgICAgICAgICBhZnRlcjogYWZ0ZXIkNSxcbiAgICAgICAgICBhZnRlckFsbDogYWZ0ZXIkNCxcbiAgICAgICAgICBhcHBlbmQ6IGFwcGVuZCQxLFxuICAgICAgICAgIGFwcGVuZEFsbDogYXBwZW5kLFxuICAgICAgICAgIHByZXBlbmQ6IHByZXBlbmQsXG4gICAgICAgICAgd3JhcDogd3JhcFxuICAgICAgICB9KSxcbiAgICAgICAgcmVtb3ZlOiBjb25zdGFudCh7XG4gICAgICAgICAgdW53cmFwOiB1bndyYXAsXG4gICAgICAgICAgcmVtb3ZlOiByZW1vdmUkNlxuICAgICAgICB9KSxcbiAgICAgICAgY3JlYXRlOiBjb25zdGFudCh7XG4gICAgICAgICAgbnU6IFN1Z2FyRWxlbWVudC5mcm9tVGFnLFxuICAgICAgICAgIGNsb25lLFxuICAgICAgICAgIHRleHQ6IFN1Z2FyRWxlbWVudC5mcm9tVGV4dFxuICAgICAgICB9KSxcbiAgICAgICAgcXVlcnk6IGNvbnN0YW50KHtcbiAgICAgICAgICBjb21wYXJlUG9zaXRpb24sXG4gICAgICAgICAgcHJldlNpYmxpbmc6IHByZXZTaWJsaW5nLFxuICAgICAgICAgIG5leHRTaWJsaW5nOiBuZXh0U2libGluZ1xuICAgICAgICB9KSxcbiAgICAgICAgcHJvcGVydHk6IGNvbnN0YW50KHtcbiAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW4kMixcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIHBhcmVudDogcGFyZW50LFxuICAgICAgICAgIGRvY3VtZW50LFxuICAgICAgICAgIGlzVGV4dDogaXNUZXh0LFxuICAgICAgICAgIGlzQ29tbWVudDogaXNDb21tZW50LFxuICAgICAgICAgIGlzRWxlbWVudDogaXNFbGVtZW50LFxuICAgICAgICAgIGlzU3BlY2lhbCxcbiAgICAgICAgICBnZXRMYW5ndWFnZSxcbiAgICAgICAgICBnZXRUZXh0OiBnZXQkNixcbiAgICAgICAgICBzZXRUZXh0OiBzZXQsXG4gICAgICAgICAgaXNCb3VuZGFyeSxcbiAgICAgICAgICBpc0VtcHR5VGFnLFxuICAgICAgICAgIGlzTm9uRWRpdGFibGVcbiAgICAgICAgfSksXG4gICAgICAgIGVxOiBlcSQxLFxuICAgICAgICBpczogaXMkMVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgYWxsID0gKHVuaXZlcnNlLCBsb29rLCBlbGVtZW50cywgZikgPT4ge1xuICAgICAgY29uc3QgaGVhZCA9IGVsZW1lbnRzWzBdO1xuICAgICAgY29uc3QgdGFpbCA9IGVsZW1lbnRzLnNsaWNlKDEpO1xuICAgICAgcmV0dXJuIGYodW5pdmVyc2UsIGxvb2ssIGhlYWQsIHRhaWwpO1xuICAgIH07XG4gICAgY29uc3Qgb25lQWxsID0gKHVuaXZlcnNlLCBsb29rLCBlbGVtZW50cykgPT4ge1xuICAgICAgcmV0dXJuIGVsZW1lbnRzLmxlbmd0aCA+IDAgPyBhbGwodW5pdmVyc2UsIGxvb2ssIGVsZW1lbnRzLCB1bnNhZmVPbmUpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgdW5zYWZlT25lID0gKHVuaXZlcnNlLCBsb29rLCBoZWFkLCB0YWlsKSA9PiB7XG4gICAgICBjb25zdCBzdGFydCA9IGxvb2sodW5pdmVyc2UsIGhlYWQpO1xuICAgICAgcmV0dXJuIGZvbGRyKHRhaWwsIChiLCBhKSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBsb29rKHVuaXZlcnNlLCBhKTtcbiAgICAgICAgcmV0dXJuIGNvbW1vbkVsZW1lbnQodW5pdmVyc2UsIGIsIGN1cnJlbnQpO1xuICAgICAgfSwgc3RhcnQpO1xuICAgIH07XG4gICAgY29uc3QgY29tbW9uRWxlbWVudCA9ICh1bml2ZXJzZSwgc3RhcnQsIGVuZCkgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0LmJpbmQocyA9PiB7XG4gICAgICAgIHJldHVybiBlbmQuZmlsdGVyKGN1cnJ5KHVuaXZlcnNlLmVxLCBzKSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZXEgPSAodW5pdmVyc2UsIGl0ZW0pID0+IHtcbiAgICAgIHJldHVybiBjdXJyeSh1bml2ZXJzZS5lcSwgaXRlbSk7XG4gICAgfTtcbiAgICBjb25zdCBhbmNlc3RvcnMkMiA9ICh1bml2ZXJzZSwgc3RhcnQsIGVuZCwgaXNSb290ID0gbmV2ZXIpID0+IHtcbiAgICAgIGNvbnN0IHBzMSA9IFtzdGFydF0uY29uY2F0KHVuaXZlcnNlLnVwKCkuYWxsKHN0YXJ0KSk7XG4gICAgICBjb25zdCBwczIgPSBbZW5kXS5jb25jYXQodW5pdmVyc2UudXAoKS5hbGwoZW5kKSk7XG4gICAgICBjb25zdCBwcnVuZSA9IHBhdGggPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IGZpbmRJbmRleChwYXRoLCBpc1Jvb3QpO1xuICAgICAgICByZXR1cm4gaW5kZXguZm9sZCgoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICAgIH0sIGluZCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBhdGguc2xpY2UoMCwgaW5kICsgMSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHBydW5lZDEgPSBwcnVuZShwczEpO1xuICAgICAgY29uc3QgcHJ1bmVkMiA9IHBydW5lKHBzMik7XG4gICAgICBjb25zdCBzaGFyZWQgPSBmaW5kJDEocHJ1bmVkMSwgeCA9PiB7XG4gICAgICAgIHJldHVybiBleGlzdHMocHJ1bmVkMiwgZXEodW5pdmVyc2UsIHgpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlyc3RwYXRoOiBwcnVuZWQxLFxuICAgICAgICBzZWNvbmRwYXRoOiBwcnVuZWQyLFxuICAgICAgICBzaGFyZWRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHNoYXJlZE9uZSQxID0gb25lQWxsO1xuICAgIGNvbnN0IGFuY2VzdG9ycyQxID0gYW5jZXN0b3JzJDI7XG5cbiAgICBjb25zdCB1bml2ZXJzZSQzID0gRG9tVW5pdmVyc2UoKTtcbiAgICBjb25zdCBzaGFyZWRPbmUgPSAobG9vaywgZWxlbWVudHMpID0+IHtcbiAgICAgIHJldHVybiBzaGFyZWRPbmUkMSh1bml2ZXJzZSQzLCAoX3VuaXZlcnNlLCBlbGVtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBsb29rKGVsZW1lbnQpO1xuICAgICAgfSwgZWxlbWVudHMpO1xuICAgIH07XG4gICAgY29uc3QgYW5jZXN0b3JzID0gKHN0YXJ0LCBmaW5pc2gsIGlzUm9vdCkgPT4ge1xuICAgICAgcmV0dXJuIGFuY2VzdG9ycyQxKHVuaXZlcnNlJDMsIHN0YXJ0LCBmaW5pc2gsIGlzUm9vdCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxvb2t1cFRhYmxlID0gY29udGFpbmVyID0+IHtcbiAgICAgIHJldHVybiBhbmNlc3RvciQxKGNvbnRhaW5lciwgJ3RhYmxlJyk7XG4gICAgfTtcbiAgICBjb25zdCBpZGVudGlmeSA9IChzdGFydCwgZmluaXNoLCBpc1Jvb3QpID0+IHtcbiAgICAgIGNvbnN0IGdldElzUm9vdCA9IHJvb3RUYWJsZSA9PiB7XG4gICAgICAgIHJldHVybiBlbGVtZW50ID0+IHtcbiAgICAgICAgICByZXR1cm4gaXNSb290ICE9PSB1bmRlZmluZWQgJiYgaXNSb290KGVsZW1lbnQpIHx8IGVxJDEoZWxlbWVudCwgcm9vdFRhYmxlKTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBpZiAoZXEkMShzdGFydCwgZmluaXNoKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgYm94ZXM6IE9wdGlvbmFsLnNvbWUoW3N0YXJ0XSksXG4gICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgZmluaXNoXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGxvb2t1cFRhYmxlKHN0YXJ0KS5iaW5kKHN0YXJ0VGFibGUgPT4ge1xuICAgICAgICAgIHJldHVybiBsb29rdXBUYWJsZShmaW5pc2gpLmJpbmQoZmluaXNoVGFibGUgPT4ge1xuICAgICAgICAgICAgaWYgKGVxJDEoc3RhcnRUYWJsZSwgZmluaXNoVGFibGUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgICAgICBib3hlczogaW50ZXJjZXB0cyhzdGFydFRhYmxlLCBzdGFydCwgZmluaXNoKSxcbiAgICAgICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgICAgICBmaW5pc2hcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRhaW5zJDEoc3RhcnRUYWJsZSwgZmluaXNoVGFibGUpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFuY2VzdG9yQ2VsbHMgPSBhbmNlc3RvcnMkMyhmaW5pc2gsICd0ZCx0aCcsIGdldElzUm9vdChzdGFydFRhYmxlKSk7XG4gICAgICAgICAgICAgIGNvbnN0IGZpbmlzaENlbGwgPSBhbmNlc3RvckNlbGxzLmxlbmd0aCA+IDAgPyBhbmNlc3RvckNlbGxzW2FuY2VzdG9yQ2VsbHMubGVuZ3RoIC0gMV0gOiBmaW5pc2g7XG4gICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgICAgICBib3hlczogbmVzdGVkSW50ZXJjZXB0cyhzdGFydFRhYmxlLCBzdGFydCwgc3RhcnRUYWJsZSwgZmluaXNoLCBmaW5pc2hUYWJsZSksXG4gICAgICAgICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgICAgICAgZmluaXNoOiBmaW5pc2hDZWxsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb250YWlucyQxKGZpbmlzaFRhYmxlLCBzdGFydFRhYmxlKSkge1xuICAgICAgICAgICAgICBjb25zdCBhbmNlc3RvckNlbGxzID0gYW5jZXN0b3JzJDMoc3RhcnQsICd0ZCx0aCcsIGdldElzUm9vdChmaW5pc2hUYWJsZSkpO1xuICAgICAgICAgICAgICBjb25zdCBzdGFydENlbGwgPSBhbmNlc3RvckNlbGxzLmxlbmd0aCA+IDAgPyBhbmNlc3RvckNlbGxzW2FuY2VzdG9yQ2VsbHMubGVuZ3RoIC0gMV0gOiBzdGFydDtcbiAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgICAgICAgIGJveGVzOiBuZXN0ZWRJbnRlcmNlcHRzKGZpbmlzaFRhYmxlLCBzdGFydCwgc3RhcnRUYWJsZSwgZmluaXNoLCBmaW5pc2hUYWJsZSksXG4gICAgICAgICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgICAgICAgZmluaXNoOiBzdGFydENlbGxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gYW5jZXN0b3JzKHN0YXJ0LCBmaW5pc2gpLnNoYXJlZC5iaW5kKGxjYSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3QkMShsY2EsICd0YWJsZScsIGlzUm9vdCkuYmluZChsY2FUYWJsZSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmaW5pc2hBbmNlc3RvckNlbGxzID0gYW5jZXN0b3JzJDMoZmluaXNoLCAndGQsdGgnLCBnZXRJc1Jvb3QobGNhVGFibGUpKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmlzaENlbGwgPSBmaW5pc2hBbmNlc3RvckNlbGxzLmxlbmd0aCA+IDAgPyBmaW5pc2hBbmNlc3RvckNlbGxzW2ZpbmlzaEFuY2VzdG9yQ2VsbHMubGVuZ3RoIC0gMV0gOiBmaW5pc2g7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzdGFydEFuY2VzdG9yQ2VsbHMgPSBhbmNlc3RvcnMkMyhzdGFydCwgJ3RkLHRoJywgZ2V0SXNSb290KGxjYVRhYmxlKSk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzdGFydENlbGwgPSBzdGFydEFuY2VzdG9yQ2VsbHMubGVuZ3RoID4gMCA/IHN0YXJ0QW5jZXN0b3JDZWxsc1tzdGFydEFuY2VzdG9yQ2VsbHMubGVuZ3RoIC0gMV0gOiBzdGFydDtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgICAgICAgICAgYm94ZXM6IG5lc3RlZEludGVyY2VwdHMobGNhVGFibGUsIHN0YXJ0LCBzdGFydFRhYmxlLCBmaW5pc2gsIGZpbmlzaFRhYmxlKSxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0Q2VsbCxcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoOiBmaW5pc2hDZWxsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmV0cmlldmUkMSA9IChjb250YWluZXIsIHNlbGVjdG9yKSA9PiB7XG4gICAgICBjb25zdCBzZWxzID0gZGVzY2VuZGFudHMoY29udGFpbmVyLCBzZWxlY3Rvcik7XG4gICAgICByZXR1cm4gc2Vscy5sZW5ndGggPiAwID8gT3B0aW9uYWwuc29tZShzZWxzKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldExhc3QgPSAoYm94ZXMsIGxhc3RTZWxlY3RlZFNlbGVjdG9yKSA9PiB7XG4gICAgICByZXR1cm4gZmluZCQxKGJveGVzLCBib3ggPT4ge1xuICAgICAgICByZXR1cm4gaXMkMihib3gsIGxhc3RTZWxlY3RlZFNlbGVjdG9yKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0RWRnZXMgPSAoY29udGFpbmVyLCBmaXJzdFNlbGVjdGVkU2VsZWN0b3IsIGxhc3RTZWxlY3RlZFNlbGVjdG9yKSA9PiB7XG4gICAgICByZXR1cm4gZGVzY2VuZGFudChjb250YWluZXIsIGZpcnN0U2VsZWN0ZWRTZWxlY3RvcikuYmluZChmaXJzdCA9PiB7XG4gICAgICAgIHJldHVybiBkZXNjZW5kYW50KGNvbnRhaW5lciwgbGFzdFNlbGVjdGVkU2VsZWN0b3IpLmJpbmQobGFzdCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHNoYXJlZE9uZShsb29rdXBUYWJsZSwgW1xuICAgICAgICAgICAgZmlyc3QsXG4gICAgICAgICAgICBsYXN0XG4gICAgICAgICAgXSkubWFwKHRhYmxlID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGZpcnN0LFxuICAgICAgICAgICAgICBsYXN0LFxuICAgICAgICAgICAgICB0YWJsZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGV4cGFuZFRvID0gKGZpbmlzaCwgZmlyc3RTZWxlY3RlZFNlbGVjdG9yKSA9PiB7XG4gICAgICByZXR1cm4gYW5jZXN0b3IkMShmaW5pc2gsICd0YWJsZScpLmJpbmQodGFibGUgPT4ge1xuICAgICAgICByZXR1cm4gZGVzY2VuZGFudCh0YWJsZSwgZmlyc3RTZWxlY3RlZFNlbGVjdG9yKS5iaW5kKHN0YXJ0ID0+IHtcbiAgICAgICAgICByZXR1cm4gaWRlbnRpZnkoc3RhcnQsIGZpbmlzaCkuYmluZChpZGVudGlmaWVkID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVkLmJveGVzLm1hcChib3hlcyA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYm94ZXMsXG4gICAgICAgICAgICAgICAgc3RhcnQ6IGlkZW50aWZpZWQuc3RhcnQsXG4gICAgICAgICAgICAgICAgZmluaXNoOiBpZGVudGlmaWVkLmZpbmlzaFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzaGlmdFNlbGVjdGlvbiA9IChib3hlcywgZGVsdGFSb3csIGRlbHRhQ29sdW1uLCBmaXJzdFNlbGVjdGVkU2VsZWN0b3IsIGxhc3RTZWxlY3RlZFNlbGVjdG9yKSA9PiB7XG4gICAgICByZXR1cm4gZ2V0TGFzdChib3hlcywgbGFzdFNlbGVjdGVkU2VsZWN0b3IpLmJpbmQobGFzdCA9PiB7XG4gICAgICAgIHJldHVybiBtb3ZlQnkobGFzdCwgZGVsdGFSb3csIGRlbHRhQ29sdW1uKS5iaW5kKGZpbmlzaCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGV4cGFuZFRvKGZpbmlzaCwgZmlyc3RTZWxlY3RlZFNlbGVjdG9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmV0cmlldmUgPSAoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xuICAgICAgcmV0dXJuIHJldHJpZXZlJDEoY29udGFpbmVyLCBzZWxlY3Rvcik7XG4gICAgfTtcbiAgICBjb25zdCByZXRyaWV2ZUJveCA9IChjb250YWluZXIsIGZpcnN0U2VsZWN0ZWRTZWxlY3RvciwgbGFzdFNlbGVjdGVkU2VsZWN0b3IpID0+IHtcbiAgICAgIHJldHVybiBnZXRFZGdlcyhjb250YWluZXIsIGZpcnN0U2VsZWN0ZWRTZWxlY3RvciwgbGFzdFNlbGVjdGVkU2VsZWN0b3IpLmJpbmQoZWRnZXMgPT4ge1xuICAgICAgICBjb25zdCBpc1Jvb3QgPSBhbmNlc3RvciA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVxJDEoY29udGFpbmVyLCBhbmNlc3Rvcik7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNlY3Rpb25TZWxlY3RvciA9ICd0aGVhZCx0Zm9vdCx0Ym9keSx0YWJsZSc7XG4gICAgICAgIGNvbnN0IGZpcnN0QW5jZXN0b3IgPSBhbmNlc3RvciQxKGVkZ2VzLmZpcnN0LCBzZWN0aW9uU2VsZWN0b3IsIGlzUm9vdCk7XG4gICAgICAgIGNvbnN0IGxhc3RBbmNlc3RvciA9IGFuY2VzdG9yJDEoZWRnZXMubGFzdCwgc2VjdGlvblNlbGVjdG9yLCBpc1Jvb3QpO1xuICAgICAgICByZXR1cm4gZmlyc3RBbmNlc3Rvci5iaW5kKGZBID0+IHtcbiAgICAgICAgICByZXR1cm4gbGFzdEFuY2VzdG9yLmJpbmQobEEgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGVxJDEoZkEsIGxBKSA/IGdldEJveChlZGdlcy50YWJsZSwgZWRnZXMuZmlyc3QsIGVkZ2VzLmxhc3QpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBzZWxlY3Rpb24gPSBpZGVudGl0eTtcbiAgICBjb25zdCB1bm1lcmdhYmxlID0gc2VsZWN0ZWRDZWxscyA9PiB7XG4gICAgICBjb25zdCBoYXNTcGFuID0gKGVsZW0sIHR5cGUpID0+IGdldE9wdChlbGVtLCB0eXBlKS5leGlzdHMoc3BhbiA9PiBwYXJzZUludChzcGFuLCAxMCkgPiAxKTtcbiAgICAgIGNvbnN0IGhhc1Jvd09yQ29sU3BhbiA9IGVsZW0gPT4gaGFzU3BhbihlbGVtLCAncm93c3BhbicpIHx8IGhhc1NwYW4oZWxlbSwgJ2NvbHNwYW4nKTtcbiAgICAgIHJldHVybiBzZWxlY3RlZENlbGxzLmxlbmd0aCA+IDAgJiYgZm9yYWxsKHNlbGVjdGVkQ2VsbHMsIGhhc1Jvd09yQ29sU3BhbikgPyBPcHRpb25hbC5zb21lKHNlbGVjdGVkQ2VsbHMpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgbWVyZ2FibGUgPSAodGFibGUsIHNlbGVjdGVkQ2VsbHMsIGVwaGVtZXJhKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0ZWRDZWxscy5sZW5ndGggPD0gMSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJldHJpZXZlQm94KHRhYmxlLCBlcGhlbWVyYS5maXJzdFNlbGVjdGVkU2VsZWN0b3IsIGVwaGVtZXJhLmxhc3RTZWxlY3RlZFNlbGVjdG9yKS5tYXAoYm91bmRzID0+ICh7XG4gICAgICAgICAgYm91bmRzLFxuICAgICAgICAgIGNlbGxzOiBzZWxlY3RlZENlbGxzXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgc3RyU2VsZWN0ZWQgPSAnZGF0YS1tY2Utc2VsZWN0ZWQnO1xuICAgIGNvbnN0IHN0clNlbGVjdGVkU2VsZWN0b3IgPSAndGRbJyArIHN0clNlbGVjdGVkICsgJ10sdGhbJyArIHN0clNlbGVjdGVkICsgJ10nO1xuICAgIGNvbnN0IHN0ckF0dHJpYnV0ZVNlbGVjdG9yID0gJ1snICsgc3RyU2VsZWN0ZWQgKyAnXSc7XG4gICAgY29uc3Qgc3RyRmlyc3RTZWxlY3RlZCA9ICdkYXRhLW1jZS1maXJzdC1zZWxlY3RlZCc7XG4gICAgY29uc3Qgc3RyRmlyc3RTZWxlY3RlZFNlbGVjdG9yID0gJ3RkWycgKyBzdHJGaXJzdFNlbGVjdGVkICsgJ10sdGhbJyArIHN0ckZpcnN0U2VsZWN0ZWQgKyAnXSc7XG4gICAgY29uc3Qgc3RyTGFzdFNlbGVjdGVkID0gJ2RhdGEtbWNlLWxhc3Qtc2VsZWN0ZWQnO1xuICAgIGNvbnN0IHN0ckxhc3RTZWxlY3RlZFNlbGVjdG9yID0gJ3RkWycgKyBzdHJMYXN0U2VsZWN0ZWQgKyAnXSx0aFsnICsgc3RyTGFzdFNlbGVjdGVkICsgJ10nO1xuICAgIGNvbnN0IGF0dHJpYnV0ZVNlbGVjdG9yID0gc3RyQXR0cmlidXRlU2VsZWN0b3I7XG4gICAgY29uc3QgZXBoZW1lcmEgPSB7XG4gICAgICBzZWxlY3RlZDogc3RyU2VsZWN0ZWQsXG4gICAgICBzZWxlY3RlZFNlbGVjdG9yOiBzdHJTZWxlY3RlZFNlbGVjdG9yLFxuICAgICAgZmlyc3RTZWxlY3RlZDogc3RyRmlyc3RTZWxlY3RlZCxcbiAgICAgIGZpcnN0U2VsZWN0ZWRTZWxlY3Rvcjogc3RyRmlyc3RTZWxlY3RlZFNlbGVjdG9yLFxuICAgICAgbGFzdFNlbGVjdGVkOiBzdHJMYXN0U2VsZWN0ZWQsXG4gICAgICBsYXN0U2VsZWN0ZWRTZWxlY3Rvcjogc3RyTGFzdFNlbGVjdGVkU2VsZWN0b3JcbiAgICB9O1xuXG4gICAgY29uc3QgZm9yTWVudSA9IChzZWxlY3RlZENlbGxzLCB0YWJsZSwgY2VsbCkgPT4gKHtcbiAgICAgIGVsZW1lbnQ6IGNlbGwsXG4gICAgICBtZXJnYWJsZTogbWVyZ2FibGUodGFibGUsIHNlbGVjdGVkQ2VsbHMsIGVwaGVtZXJhKSxcbiAgICAgIHVubWVyZ2FibGU6IHVubWVyZ2FibGUoc2VsZWN0ZWRDZWxscyksXG4gICAgICBzZWxlY3Rpb246IHNlbGVjdGlvbihzZWxlY3RlZENlbGxzKVxuICAgIH0pO1xuICAgIGNvbnN0IHBhc3RlID0gKGVsZW1lbnQsIGNsaXBib2FyZCwgZ2VuZXJhdG9ycykgPT4gKHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBjbGlwYm9hcmQsXG4gICAgICBnZW5lcmF0b3JzXG4gICAgfSk7XG4gICAgY29uc3QgcGFzdGVSb3dzID0gKHNlbGVjdGVkQ2VsbHMsIF9jZWxsLCBjbGlwYm9hcmQsIGdlbmVyYXRvcnMpID0+ICh7XG4gICAgICBzZWxlY3Rpb246IHNlbGVjdGlvbihzZWxlY3RlZENlbGxzKSxcbiAgICAgIGNsaXBib2FyZCxcbiAgICAgIGdlbmVyYXRvcnNcbiAgICB9KTtcblxuICAgIGNvbnN0IGdldFNlbGVjdGlvbkNlbGxGYWxsYmFjayA9IGVsZW1lbnQgPT4gdGFibGUoZWxlbWVudCkuYmluZCh0YWJsZSA9PiByZXRyaWV2ZSh0YWJsZSwgZXBoZW1lcmEuZmlyc3RTZWxlY3RlZFNlbGVjdG9yKSkuZm9sZChjb25zdGFudChlbGVtZW50KSwgY2VsbHMgPT4gY2VsbHNbMF0pO1xuICAgIGNvbnN0IGdldFNlbGVjdGlvbkZyb21TZWxlY3RvciA9IHNlbGVjdG9yID0+IChpbml0Q2VsbCwgaXNSb290KSA9PiB7XG4gICAgICBjb25zdCBjZWxsTmFtZSA9IG5hbWUoaW5pdENlbGwpO1xuICAgICAgY29uc3QgY2VsbCA9IGNlbGxOYW1lID09PSAnY29sJyB8fCBjZWxsTmFtZSA9PT0gJ2NvbGdyb3VwJyA/IGdldFNlbGVjdGlvbkNlbGxGYWxsYmFjayhpbml0Q2VsbCkgOiBpbml0Q2VsbDtcbiAgICAgIHJldHVybiBjbG9zZXN0JDEoY2VsbCwgc2VsZWN0b3IsIGlzUm9vdCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRTZWxlY3Rpb25DZWxsT3JDYXB0aW9uID0gZ2V0U2VsZWN0aW9uRnJvbVNlbGVjdG9yKCd0aCx0ZCxjYXB0aW9uJyk7XG4gICAgY29uc3QgZ2V0U2VsZWN0aW9uQ2VsbCA9IGdldFNlbGVjdGlvbkZyb21TZWxlY3RvcigndGgsdGQnKTtcbiAgICBjb25zdCBnZXRDZWxsc0Zyb21TZWxlY3Rpb24gPSBlZGl0b3IgPT4gZnJvbURvbShlZGl0b3IubW9kZWwudGFibGUuZ2V0U2VsZWN0ZWRDZWxscygpKTtcbiAgICBjb25zdCBnZXRDZWxsc0Zyb21GYWtlU2VsZWN0aW9uID0gZWRpdG9yID0+IGZpbHRlciQyKGdldENlbGxzRnJvbVNlbGVjdGlvbihlZGl0b3IpLCBjZWxsID0+IGlzJDIoY2VsbCwgZXBoZW1lcmEuc2VsZWN0ZWRTZWxlY3RvcikpO1xuXG4gICAgY29uc3QgZXh0cmFjdFNlbGVjdGVkID0gY2VsbHMgPT4ge1xuICAgICAgcmV0dXJuIHRhYmxlKGNlbGxzWzBdKS5tYXAodGFibGUgPT4ge1xuICAgICAgICBjb25zdCByZXBsaWNhID0gZXh0cmFjdCQxKHRhYmxlLCBhdHRyaWJ1dGVTZWxlY3Rvcik7XG4gICAgICAgIHJlbW92ZURhdGFTdHlsZShyZXBsaWNhKTtcbiAgICAgICAgcmV0dXJuIFtyZXBsaWNhXTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2VyaWFsaXplRWxlbWVudHMgPSAoZWRpdG9yLCBlbGVtZW50cykgPT4gbWFwJDEoZWxlbWVudHMsIGVsbSA9PiBlZGl0b3Iuc2VsZWN0aW9uLnNlcmlhbGl6ZXIuc2VyaWFsaXplKGVsbS5kb20sIHt9KSkuam9pbignJyk7XG4gICAgY29uc3QgZ2V0VGV4dENvbnRlbnQgPSBlbGVtZW50cyA9PiBtYXAkMShlbGVtZW50cywgZWxlbWVudCA9PiBlbGVtZW50LmRvbS5pbm5lclRleHQpLmpvaW4oJycpO1xuICAgIGNvbnN0IHJlZ2lzdGVyRXZlbnRzID0gKGVkaXRvciwgYWN0aW9ucykgPT4ge1xuICAgICAgZWRpdG9yLm9uKCdCZWZvcmVHZXRDb250ZW50JywgZSA9PiB7XG4gICAgICAgIGNvbnN0IG11bHRpQ2VsbENvbnRleHQgPSBjZWxscyA9PiB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV4dHJhY3RTZWxlY3RlZChjZWxscykuZWFjaChlbGVtZW50cyA9PiB7XG4gICAgICAgICAgICBlLmNvbnRlbnQgPSBlLmZvcm1hdCA9PT0gJ3RleHQnID8gZ2V0VGV4dENvbnRlbnQoZWxlbWVudHMpIDogc2VyaWFsaXplRWxlbWVudHMoZWRpdG9yLCBlbGVtZW50cyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChlLnNlbGVjdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IGNlbGxzID0gZ2V0Q2VsbHNGcm9tRmFrZVNlbGVjdGlvbihlZGl0b3IpO1xuICAgICAgICAgIGlmIChjZWxscy5sZW5ndGggPj0gMSkge1xuICAgICAgICAgICAgbXVsdGlDZWxsQ29udGV4dChjZWxscyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignQmVmb3JlU2V0Q29udGVudCcsIGUgPT4ge1xuICAgICAgICBpZiAoZS5zZWxlY3Rpb24gPT09IHRydWUgJiYgZS5wYXN0ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbHMgPSBnZXRDZWxsc0Zyb21TZWxlY3Rpb24oZWRpdG9yKTtcbiAgICAgICAgICBoZWFkKHNlbGVjdGVkQ2VsbHMpLmVhY2goY2VsbCA9PiB7XG4gICAgICAgICAgICB0YWJsZShjZWxsKS5lYWNoKHRhYmxlID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBmaWx0ZXIkMihmcm9tSHRtbChlLmNvbnRlbnQpLCBjb250ZW50ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZShjb250ZW50KSAhPT0gJ21ldGEnO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY29uc3QgaXNUYWJsZSA9IGlzVGFnKCd0YWJsZScpO1xuICAgICAgICAgICAgICBpZiAoc2hvdWxkTWVyZ2VDb250ZW50T25QYXN0ZShlZGl0b3IpICYmIGVsZW1lbnRzLmxlbmd0aCA9PT0gMSAmJiBpc1RhYmxlKGVsZW1lbnRzWzBdKSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkb2MgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0RG9jKCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdlbmVyYXRvcnMgPSBwYXN0ZSQxKGRvYyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0cyA9IHBhc3RlKGNlbGwsIGVsZW1lbnRzWzBdLCBnZW5lcmF0b3JzKTtcbiAgICAgICAgICAgICAgICBhY3Rpb25zLnBhc3RlQ2VsbHModGFibGUsIHRhcmdldHMpLmVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcG9pbnQgPSAoZWxlbWVudCwgb2Zmc2V0KSA9PiAoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIG9mZnNldFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2NhbiQxID0gKHVuaXZlcnNlLCBlbGVtZW50LCBkaXJlY3Rpb24pID0+IHtcbiAgICAgIGlmICh1bml2ZXJzZS5wcm9wZXJ0eSgpLmlzVGV4dChlbGVtZW50KSAmJiB1bml2ZXJzZS5wcm9wZXJ0eSgpLmdldFRleHQoZWxlbWVudCkudHJpbSgpLmxlbmd0aCA9PT0gMCB8fCB1bml2ZXJzZS5wcm9wZXJ0eSgpLmlzQ29tbWVudChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZGlyZWN0aW9uKGVsZW1lbnQpLmJpbmQoZWxlbSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHNjYW4kMSh1bml2ZXJzZSwgZWxlbSwgZGlyZWN0aW9uKS5vclRodW5rKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGVsZW0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB0b0VuZCA9ICh1bml2ZXJzZSwgZWxlbWVudCkgPT4ge1xuICAgICAgaWYgKHVuaXZlcnNlLnByb3BlcnR5KCkuaXNUZXh0KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiB1bml2ZXJzZS5wcm9wZXJ0eSgpLmdldFRleHQoZWxlbWVudCkubGVuZ3RoO1xuICAgICAgfVxuICAgICAgY29uc3QgY2hpbGRyZW4gPSB1bml2ZXJzZS5wcm9wZXJ0eSgpLmNoaWxkcmVuKGVsZW1lbnQpO1xuICAgICAgcmV0dXJuIGNoaWxkcmVuLmxlbmd0aDtcbiAgICB9O1xuICAgIGNvbnN0IGZyZWVmYWxsUnRsJDIgPSAodW5pdmVyc2UsIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHNjYW4kMSh1bml2ZXJzZSwgZWxlbWVudCwgdW5pdmVyc2UucXVlcnkoKS5wcmV2U2libGluZykuZ2V0T3IoZWxlbWVudCk7XG4gICAgICBpZiAodW5pdmVyc2UucHJvcGVydHkoKS5pc1RleHQoY2FuZGlkYXRlKSkge1xuICAgICAgICByZXR1cm4gcG9pbnQoY2FuZGlkYXRlLCB0b0VuZCh1bml2ZXJzZSwgY2FuZGlkYXRlKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHVuaXZlcnNlLnByb3BlcnR5KCkuY2hpbGRyZW4oY2FuZGlkYXRlKTtcbiAgICAgIHJldHVybiBjaGlsZHJlbi5sZW5ndGggPiAwID8gZnJlZWZhbGxSdGwkMih1bml2ZXJzZSwgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0pIDogcG9pbnQoY2FuZGlkYXRlLCB0b0VuZCh1bml2ZXJzZSwgY2FuZGlkYXRlKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZyZWVmYWxsUnRsJDEgPSBmcmVlZmFsbFJ0bCQyO1xuXG4gICAgY29uc3QgdW5pdmVyc2UkMiA9IERvbVVuaXZlcnNlKCk7XG4gICAgY29uc3QgZnJlZWZhbGxSdGwgPSBlbGVtZW50ID0+IHtcbiAgICAgIHJldHVybiBmcmVlZmFsbFJ0bCQxKHVuaXZlcnNlJDIsIGVsZW1lbnQpO1xuICAgIH07XG5cbiAgICBjb25zdCBoYWx2ZSA9IChtYWluLCBvdGhlcikgPT4ge1xuICAgICAgaWYgKCFoYXNDb2xzcGFuKG1haW4pKSB7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gZ2V0R2VuZXJpY1dpZHRoKG1haW4pO1xuICAgICAgICB3aWR0aC5lYWNoKHcgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld1dpZHRoID0gdy52YWx1ZSAvIDI7XG4gICAgICAgICAgc2V0R2VuZXJpY1dpZHRoKG1haW4sIG5ld1dpZHRoLCB3LnVuaXQpO1xuICAgICAgICAgIHNldEdlbmVyaWNXaWR0aChvdGhlciwgbmV3V2lkdGgsIHcudW5pdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB6ZXJvID0gYXJyYXkgPT4gbWFwJDEoYXJyYXksIGNvbnN0YW50KDApKTtcbiAgICBjb25zdCBzdXJyb3VuZCA9IChzaXplcywgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHJlc3VsdHMsIGYpID0+IGYoc2l6ZXMuc2xpY2UoMCwgc3RhcnRJbmRleCkpLmNvbmNhdChyZXN1bHRzKS5jb25jYXQoZihzaXplcy5zbGljZShlbmRJbmRleCkpKTtcbiAgICBjb25zdCBjbGFtcERlbHRhSGVscGVyID0gcHJlZGljYXRlID0+IChzaXplcywgaW5kZXgsIGRlbHRhLCBtaW5DZWxsU2l6ZSkgPT4ge1xuICAgICAgaWYgKCFwcmVkaWNhdGUoZGVsdGEpKSB7XG4gICAgICAgIHJldHVybiBkZWx0YTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5ld1NpemUgPSBNYXRoLm1heChtaW5DZWxsU2l6ZSwgc2l6ZXNbaW5kZXhdIC0gTWF0aC5hYnMoZGVsdGEpKTtcbiAgICAgICAgY29uc3QgZGlmZiA9IE1hdGguYWJzKG5ld1NpemUgLSBzaXplc1tpbmRleF0pO1xuICAgICAgICByZXR1cm4gZGVsdGEgPj0gMCA/IGRpZmYgOiAtZGlmZjtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNsYW1wTmVnYXRpdmVEZWx0YSA9IGNsYW1wRGVsdGFIZWxwZXIoZGVsdGEgPT4gZGVsdGEgPCAwKTtcbiAgICBjb25zdCBjbGFtcERlbHRhID0gY2xhbXBEZWx0YUhlbHBlcihhbHdheXMpO1xuICAgIGNvbnN0IHJlc2l6ZVRhYmxlID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FsY0ZpeGVkRGVsdGFzID0gKHNpemVzLCBpbmRleCwgbmV4dCwgZGVsdGEsIG1pbkNlbGxTaXplKSA9PiB7XG4gICAgICAgIGNvbnN0IGNsYW1wZWREZWx0YSA9IGNsYW1wTmVnYXRpdmVEZWx0YShzaXplcywgaW5kZXgsIGRlbHRhLCBtaW5DZWxsU2l6ZSk7XG4gICAgICAgIHJldHVybiBzdXJyb3VuZChzaXplcywgaW5kZXgsIG5leHQgKyAxLCBbXG4gICAgICAgICAgY2xhbXBlZERlbHRhLFxuICAgICAgICAgIDBcbiAgICAgICAgXSwgemVybyk7XG4gICAgICB9O1xuICAgICAgY29uc3QgY2FsY1JlbGF0aXZlRGVsdGFzID0gKHNpemVzLCBpbmRleCwgZGVsdGEsIG1pbkNlbGxTaXplKSA9PiB7XG4gICAgICAgIGNvbnN0IHJhdGlvID0gKDEwMCArIGRlbHRhKSAvIDEwMDtcbiAgICAgICAgY29uc3QgbmV3VGhpcyA9IE1hdGgubWF4KG1pbkNlbGxTaXplLCAoc2l6ZXNbaW5kZXhdICsgZGVsdGEpIC8gcmF0aW8pO1xuICAgICAgICByZXR1cm4gbWFwJDEoc2l6ZXMsIChzaXplLCBpZHgpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdTaXplID0gaWR4ID09PSBpbmRleCA/IG5ld1RoaXMgOiBzaXplIC8gcmF0aW87XG4gICAgICAgICAgcmV0dXJuIG5ld1NpemUgLSBzaXplO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjYWxjTGVmdEVkZ2VEZWx0YXMgPSAoc2l6ZXMsIGluZGV4LCBuZXh0LCBkZWx0YSwgbWluQ2VsbFNpemUsIGlzUmVsYXRpdmUpID0+IHtcbiAgICAgICAgaWYgKGlzUmVsYXRpdmUpIHtcbiAgICAgICAgICByZXR1cm4gY2FsY1JlbGF0aXZlRGVsdGFzKHNpemVzLCBpbmRleCwgZGVsdGEsIG1pbkNlbGxTaXplKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gY2FsY0ZpeGVkRGVsdGFzKHNpemVzLCBpbmRleCwgbmV4dCwgZGVsdGEsIG1pbkNlbGxTaXplKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNhbGNNaWRkbGVEZWx0YXMgPSAoc2l6ZXMsIF9wcmV2LCBpbmRleCwgbmV4dCwgZGVsdGEsIG1pbkNlbGxTaXplLCBpc1JlbGF0aXZlKSA9PiBjYWxjTGVmdEVkZ2VEZWx0YXMoc2l6ZXMsIGluZGV4LCBuZXh0LCBkZWx0YSwgbWluQ2VsbFNpemUsIGlzUmVsYXRpdmUpO1xuICAgICAgY29uc3QgcmVzaXplVGFibGUgPSAocmVzaXplciwgZGVsdGEpID0+IHJlc2l6ZXIoZGVsdGEpO1xuICAgICAgY29uc3QgY2FsY1JpZ2h0RWRnZURlbHRhcyA9IChzaXplcywgX3ByZXYsIGluZGV4LCBkZWx0YSwgbWluQ2VsbFNpemUsIGlzUmVsYXRpdmUpID0+IHtcbiAgICAgICAgaWYgKGlzUmVsYXRpdmUpIHtcbiAgICAgICAgICByZXR1cm4gY2FsY1JlbGF0aXZlRGVsdGFzKHNpemVzLCBpbmRleCwgZGVsdGEsIG1pbkNlbGxTaXplKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjbGFtcGVkRGVsdGEgPSBjbGFtcE5lZ2F0aXZlRGVsdGEoc2l6ZXMsIGluZGV4LCBkZWx0YSwgbWluQ2VsbFNpemUpO1xuICAgICAgICAgIHJldHVybiB6ZXJvKHNpemVzLnNsaWNlKDAsIGluZGV4KSkuY29uY2F0KFtjbGFtcGVkRGVsdGFdKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNhbGNSZWRlc3RyaWJ1dGVkV2lkdGhzID0gKHNpemVzLCB0b3RhbFdpZHRoLCBwaXhlbERlbHRhLCBpc1JlbGF0aXZlKSA9PiB7XG4gICAgICAgIGlmIChpc1JlbGF0aXZlKSB7XG4gICAgICAgICAgY29uc3QgdGFibGVXaWR0aCA9IHRvdGFsV2lkdGggKyBwaXhlbERlbHRhO1xuICAgICAgICAgIGNvbnN0IHJhdGlvID0gdGFibGVXaWR0aCAvIHRvdGFsV2lkdGg7XG4gICAgICAgICAgY29uc3QgbmV3U2l6ZXMgPSBtYXAkMShzaXplcywgc2l6ZSA9PiBzaXplIC8gcmF0aW8pO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkZWx0YTogcmF0aW8gKiAxMDAgLSAxMDAsXG4gICAgICAgICAgICBuZXdTaXplc1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlbHRhOiBwaXhlbERlbHRhLFxuICAgICAgICAgICAgbmV3U2l6ZXM6IHNpemVzXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc2l6ZVRhYmxlLFxuICAgICAgICBjbGFtcFRhYmxlRGVsdGE6IGNsYW1wTmVnYXRpdmVEZWx0YSxcbiAgICAgICAgY2FsY0xlZnRFZGdlRGVsdGFzLFxuICAgICAgICBjYWxjTWlkZGxlRGVsdGFzLFxuICAgICAgICBjYWxjUmlnaHRFZGdlRGVsdGFzLFxuICAgICAgICBjYWxjUmVkZXN0cmlidXRlZFdpZHRoc1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHByZXNlcnZlVGFibGUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjYWxjTGVmdEVkZ2VEZWx0YXMgPSAoc2l6ZXMsIGluZGV4LCBuZXh0LCBkZWx0YSwgbWluQ2VsbFNpemUpID0+IHtcbiAgICAgICAgY29uc3QgaWR4ID0gZGVsdGEgPj0gMCA/IG5leHQgOiBpbmRleDtcbiAgICAgICAgY29uc3QgY2xhbXBlZERlbHRhID0gY2xhbXBEZWx0YShzaXplcywgaWR4LCBkZWx0YSwgbWluQ2VsbFNpemUpO1xuICAgICAgICByZXR1cm4gc3Vycm91bmQoc2l6ZXMsIGluZGV4LCBuZXh0ICsgMSwgW1xuICAgICAgICAgIGNsYW1wZWREZWx0YSxcbiAgICAgICAgICAtY2xhbXBlZERlbHRhXG4gICAgICAgIF0sIHplcm8pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNhbGNNaWRkbGVEZWx0YXMgPSAoc2l6ZXMsIF9wcmV2LCBpbmRleCwgbmV4dCwgZGVsdGEsIG1pbkNlbGxTaXplKSA9PiBjYWxjTGVmdEVkZ2VEZWx0YXMoc2l6ZXMsIGluZGV4LCBuZXh0LCBkZWx0YSwgbWluQ2VsbFNpemUpO1xuICAgICAgY29uc3QgcmVzaXplVGFibGUgPSAocmVzaXplciwgZGVsdGEsIGlzTGFzdENvbHVtbikgPT4ge1xuICAgICAgICBpZiAoaXNMYXN0Q29sdW1uKSB7XG4gICAgICAgICAgcmVzaXplcihkZWx0YSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBjYWxjUmlnaHRFZGdlRGVsdGFzID0gKHNpemVzLCBfcHJldiwgX2luZGV4LCBkZWx0YSwgX21pbkNlbGxTaXplLCBpc1JlbGF0aXZlKSA9PiB7XG4gICAgICAgIGlmIChpc1JlbGF0aXZlKSB7XG4gICAgICAgICAgcmV0dXJuIHplcm8oc2l6ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGRpZmYgPSBkZWx0YSAvIHNpemVzLmxlbmd0aDtcbiAgICAgICAgICByZXR1cm4gbWFwJDEoc2l6ZXMsIGNvbnN0YW50KGRpZmYpKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNsYW1wVGFibGVEZWx0YSA9IChzaXplcywgaW5kZXgsIGRlbHRhLCBtaW5DZWxsU2l6ZSwgaXNMYXN0Q29sdW1uKSA9PiB7XG4gICAgICAgIGlmIChpc0xhc3RDb2x1bW4pIHtcbiAgICAgICAgICBpZiAoZGVsdGEgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGRlbHRhO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBtYXhEZWx0YSA9IGZvbGRsKHNpemVzLCAoYSwgYikgPT4gYSArIGIgLSBtaW5DZWxsU2l6ZSwgMCk7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoLW1heERlbHRhLCBkZWx0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBjbGFtcE5lZ2F0aXZlRGVsdGEoc2l6ZXMsIGluZGV4LCBkZWx0YSwgbWluQ2VsbFNpemUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgY2FsY1JlZGVzdHJpYnV0ZWRXaWR0aHMgPSAoc2l6ZXMsIF90b3RhbFdpZHRoLCBfcGl4ZWxEZWx0YSwgX2lzUmVsYXRpdmUpID0+ICh7XG4gICAgICAgIGRlbHRhOiAwLFxuICAgICAgICBuZXdTaXplczogc2l6ZXNcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzaXplVGFibGUsXG4gICAgICAgIGNsYW1wVGFibGVEZWx0YSxcbiAgICAgICAgY2FsY0xlZnRFZGdlRGVsdGFzLFxuICAgICAgICBjYWxjTWlkZGxlRGVsdGFzLFxuICAgICAgICBjYWxjUmlnaHRFZGdlRGVsdGFzLFxuICAgICAgICBjYWxjUmVkZXN0cmlidXRlZFdpZHRoc1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0R3JpZFNpemUgPSB0YWJsZSA9PiB7XG4gICAgICBjb25zdCB3YXJlaG91c2UgPSBXYXJlaG91c2UuZnJvbVRhYmxlKHRhYmxlKTtcbiAgICAgIHJldHVybiB3YXJlaG91c2UuZ3JpZDtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNIZWFkZXJDZWxsID0gaXNUYWcoJ3RoJyk7XG4gICAgY29uc3QgaXNIZWFkZXJDZWxscyA9IGNlbGxzID0+IGZvcmFsbChjZWxscywgY2VsbCA9PiBpc0hlYWRlckNlbGwoY2VsbC5lbGVtZW50KSk7XG4gICAgY29uc3QgZ2V0Um93SGVhZGVyVHlwZSA9IChpc0hlYWRlclJvdywgaXNIZWFkZXJDZWxscykgPT4ge1xuICAgICAgaWYgKGlzSGVhZGVyUm93ICYmIGlzSGVhZGVyQ2VsbHMpIHtcbiAgICAgICAgcmV0dXJuICdzZWN0aW9uQ2VsbHMnO1xuICAgICAgfSBlbHNlIGlmIChpc0hlYWRlclJvdykge1xuICAgICAgICByZXR1cm4gJ3NlY3Rpb24nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICdjZWxscyc7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRSb3dUeXBlID0gcm93ID0+IHtcbiAgICAgIGNvbnN0IGlzSGVhZGVyUm93ID0gcm93LnNlY3Rpb24gPT09ICd0aGVhZCc7XG4gICAgICBjb25zdCBpc0hlYWRlckNlbGxzID0gaXMoZmluZENvbW1vbkNlbGxUeXBlKHJvdy5jZWxscyksICd0aCcpO1xuICAgICAgaWYgKHJvdy5zZWN0aW9uID09PSAndGZvb3QnKSB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6ICdmb290ZXInIH07XG4gICAgICB9IGVsc2UgaWYgKGlzSGVhZGVyUm93IHx8IGlzSGVhZGVyQ2VsbHMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiAnaGVhZGVyJyxcbiAgICAgICAgICBzdWJUeXBlOiBnZXRSb3dIZWFkZXJUeXBlKGlzSGVhZGVyUm93LCBpc0hlYWRlckNlbGxzKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogJ2JvZHknIH07XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBmaW5kQ29tbW9uQ2VsbFR5cGUgPSBjZWxscyA9PiB7XG4gICAgICBjb25zdCBoZWFkZXJDZWxscyA9IGZpbHRlciQyKGNlbGxzLCBjZWxsID0+IGlzSGVhZGVyQ2VsbChjZWxsLmVsZW1lbnQpKTtcbiAgICAgIGlmIChoZWFkZXJDZWxscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoJ3RkJyk7XG4gICAgICB9IGVsc2UgaWYgKGhlYWRlckNlbGxzLmxlbmd0aCA9PT0gY2VsbHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKCd0aCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRDb21tb25Sb3dUeXBlID0gcm93cyA9PiB7XG4gICAgICBjb25zdCByb3dUeXBlcyA9IG1hcCQxKHJvd3MsIHJvdyA9PiBnZXRSb3dUeXBlKHJvdykudHlwZSk7XG4gICAgICBjb25zdCBoYXNIZWFkZXIgPSBjb250YWlucyQyKHJvd1R5cGVzLCAnaGVhZGVyJyk7XG4gICAgICBjb25zdCBoYXNGb290ZXIgPSBjb250YWlucyQyKHJvd1R5cGVzLCAnZm9vdGVyJyk7XG4gICAgICBpZiAoIWhhc0hlYWRlciAmJiAhaGFzRm9vdGVyKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKCdib2R5Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBoYXNCb2R5ID0gY29udGFpbnMkMihyb3dUeXBlcywgJ2JvZHknKTtcbiAgICAgICAgaWYgKGhhc0hlYWRlciAmJiAhaGFzQm9keSAmJiAhaGFzRm9vdGVyKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoJ2hlYWRlcicpO1xuICAgICAgICB9IGVsc2UgaWYgKCFoYXNIZWFkZXIgJiYgIWhhc0JvZHkgJiYgaGFzRm9vdGVyKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoJ2Zvb3RlcicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRUYWJsZVJvd0hlYWRlclR5cGUgPSB3YXJlaG91c2UgPT4gZmluZE1hcCh3YXJlaG91c2UuYWxsLCByb3cgPT4ge1xuICAgICAgY29uc3Qgcm93VHlwZSA9IGdldFJvd1R5cGUocm93KTtcbiAgICAgIHJldHVybiByb3dUeXBlLnR5cGUgPT09ICdoZWFkZXInID8gT3B0aW9uYWwuZnJvbShyb3dUeXBlLnN1YlR5cGUpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdHJhbnNmb3JtQ2VsbCA9IChjZWxsLCBjb21wYXJhdG9yLCBzdWJzdGl0dXRpb24pID0+IGVsZW1lbnRuZXcoc3Vic3RpdHV0aW9uKGNlbGwuZWxlbWVudCwgY29tcGFyYXRvciksIHRydWUsIGNlbGwuaXNMb2NrZWQpO1xuICAgIGNvbnN0IHRyYW5zZm9ybVJvdyA9IChyb3csIHNlY3Rpb24pID0+IHJvdy5zZWN0aW9uICE9PSBzZWN0aW9uID8gcm93Y2VsbHMocm93LmVsZW1lbnQsIHJvdy5jZWxscywgc2VjdGlvbiwgcm93LmlzTmV3KSA6IHJvdztcbiAgICBjb25zdCBzZWN0aW9uID0gKCkgPT4gKHtcbiAgICAgIHRyYW5zZm9ybVJvdyxcbiAgICAgIHRyYW5zZm9ybUNlbGw6IChjZWxsLCBjb21wYXJhdG9yLCBzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgbmV3Q2VsbCA9IHN1YnN0aXR1dGlvbihjZWxsLmVsZW1lbnQsIGNvbXBhcmF0b3IpO1xuICAgICAgICBjb25zdCBmaXhlZENlbGwgPSBuYW1lKG5ld0NlbGwpICE9PSAndGQnID8gbXV0YXRlJDEobmV3Q2VsbCwgJ3RkJykgOiBuZXdDZWxsO1xuICAgICAgICByZXR1cm4gZWxlbWVudG5ldyhmaXhlZENlbGwsIGNlbGwuaXNOZXcsIGNlbGwuaXNMb2NrZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHNlY3Rpb25DZWxscyA9ICgpID0+ICh7XG4gICAgICB0cmFuc2Zvcm1Sb3csXG4gICAgICB0cmFuc2Zvcm1DZWxsXG4gICAgfSk7XG4gICAgY29uc3QgY2VsbHMgPSAoKSA9PiAoe1xuICAgICAgdHJhbnNmb3JtUm93OiAocm93LCBzZWN0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1NlY3Rpb24gPSBzZWN0aW9uID09PSAndGhlYWQnID8gJ3Rib2R5JyA6IHNlY3Rpb247XG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm1Sb3cocm93LCBuZXdTZWN0aW9uKTtcbiAgICAgIH0sXG4gICAgICB0cmFuc2Zvcm1DZWxsXG4gICAgfSk7XG4gICAgY29uc3QgZmFsbGJhY2sgPSAoKSA9PiAoe1xuICAgICAgdHJhbnNmb3JtUm93OiBpZGVudGl0eSxcbiAgICAgIHRyYW5zZm9ybUNlbGxcbiAgICB9KTtcbiAgICBjb25zdCBnZXRUYWJsZVNlY3Rpb25UeXBlID0gKHRhYmxlLCBmYWxsYmFjaykgPT4ge1xuICAgICAgY29uc3Qgd2FyZWhvdXNlID0gV2FyZWhvdXNlLmZyb21UYWJsZSh0YWJsZSk7XG4gICAgICBjb25zdCB0eXBlID0gZmluZFRhYmxlUm93SGVhZGVyVHlwZSh3YXJlaG91c2UpLmdldE9yKGZhbGxiYWNrKTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnc2VjdGlvbic6XG4gICAgICAgIHJldHVybiBzZWN0aW9uKCk7XG4gICAgICBjYXNlICdzZWN0aW9uQ2VsbHMnOlxuICAgICAgICByZXR1cm4gc2VjdGlvbkNlbGxzKCk7XG4gICAgICBjYXNlICdjZWxscyc6XG4gICAgICAgIHJldHVybiBjZWxscygpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgVGFibGVTZWN0aW9uID0ge1xuICAgICAgZ2V0VGFibGVTZWN0aW9uVHlwZSxcbiAgICAgIHNlY3Rpb24sXG4gICAgICBzZWN0aW9uQ2VsbHMsXG4gICAgICBjZWxscyxcbiAgICAgIGZhbGxiYWNrXG4gICAgfTtcblxuICAgIGNvbnN0IHNldElmTm90ID0gKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSwgaWdub3JlKSA9PiB7XG4gICAgICBpZiAodmFsdWUgPT09IGlnbm9yZSkge1xuICAgICAgICByZW1vdmUkNyhlbGVtZW50LCBwcm9wZXJ0eSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXQkMihlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0JDEgPSAodGFibGUsIHNlbGVjdG9yLCBlbGVtZW50KSA9PiB7XG4gICAgICBsYXN0JDIoY2hpbGRyZW4odGFibGUsIHNlbGVjdG9yKSkuZm9sZCgoKSA9PiBwcmVwZW5kKHRhYmxlLCBlbGVtZW50KSwgY2hpbGQgPT4gYWZ0ZXIkNShjaGlsZCwgZWxlbWVudCkpO1xuICAgIH07XG4gICAgY29uc3QgZ2VuZXJhdGVTZWN0aW9uID0gKHRhYmxlLCBzZWN0aW9uTmFtZSkgPT4ge1xuICAgICAgY29uc3Qgc2VjdGlvbiA9IGNoaWxkKHRhYmxlLCBzZWN0aW9uTmFtZSkuZ2V0T3JUaHVuaygoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1NlY3Rpb24gPSBTdWdhckVsZW1lbnQuZnJvbVRhZyhzZWN0aW9uTmFtZSwgb3duZXIodGFibGUpLmRvbSk7XG4gICAgICAgIGlmIChzZWN0aW9uTmFtZSA9PT0gJ3RoZWFkJykge1xuICAgICAgICAgIGluc2VydCQxKHRhYmxlLCAnY2FwdGlvbixjb2xncm91cCcsIG5ld1NlY3Rpb24pO1xuICAgICAgICB9IGVsc2UgaWYgKHNlY3Rpb25OYW1lID09PSAnY29sZ3JvdXAnKSB7XG4gICAgICAgICAgaW5zZXJ0JDEodGFibGUsICdjYXB0aW9uJywgbmV3U2VjdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXBwZW5kJDEodGFibGUsIG5ld1NlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdTZWN0aW9uO1xuICAgICAgfSk7XG4gICAgICBlbXB0eShzZWN0aW9uKTtcbiAgICAgIHJldHVybiBzZWN0aW9uO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyJDEgPSAodGFibGUsIGdyaWQpID0+IHtcbiAgICAgIGNvbnN0IG5ld1Jvd3MgPSBbXTtcbiAgICAgIGNvbnN0IG5ld0NlbGxzID0gW107XG4gICAgICBjb25zdCBzeW5jUm93cyA9IGdyaWRTZWN0aW9uID0+IG1hcCQxKGdyaWRTZWN0aW9uLCByb3cgPT4ge1xuICAgICAgICBpZiAocm93LmlzTmV3KSB7XG4gICAgICAgICAgbmV3Um93cy5wdXNoKHJvdy5lbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ciA9IHJvdy5lbGVtZW50O1xuICAgICAgICBlbXB0eSh0cik7XG4gICAgICAgIGVhY2gkMihyb3cuY2VsbHMsIGNlbGwgPT4ge1xuICAgICAgICAgIGlmIChjZWxsLmlzTmV3KSB7XG4gICAgICAgICAgICBuZXdDZWxscy5wdXNoKGNlbGwuZWxlbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNldElmTm90KGNlbGwuZWxlbWVudCwgJ2NvbHNwYW4nLCBjZWxsLmNvbHNwYW4sIDEpO1xuICAgICAgICAgIHNldElmTm90KGNlbGwuZWxlbWVudCwgJ3Jvd3NwYW4nLCBjZWxsLnJvd3NwYW4sIDEpO1xuICAgICAgICAgIGFwcGVuZCQxKHRyLCBjZWxsLmVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRyO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBzeW5jQ29sR3JvdXAgPSBncmlkU2VjdGlvbiA9PiBiaW5kJDIoZ3JpZFNlY3Rpb24sIGNvbEdyb3VwID0+IG1hcCQxKGNvbEdyb3VwLmNlbGxzLCBjb2wgPT4ge1xuICAgICAgICBzZXRJZk5vdChjb2wuZWxlbWVudCwgJ3NwYW4nLCBjb2wuY29sc3BhbiwgMSk7XG4gICAgICAgIHJldHVybiBjb2wuZWxlbWVudDtcbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IHJlbmRlclNlY3Rpb24gPSAoZ3JpZFNlY3Rpb24sIHNlY3Rpb25OYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlY3Rpb24gPSBnZW5lcmF0ZVNlY3Rpb24odGFibGUsIHNlY3Rpb25OYW1lKTtcbiAgICAgICAgY29uc3Qgc3luYyA9IHNlY3Rpb25OYW1lID09PSAnY29sZ3JvdXAnID8gc3luY0NvbEdyb3VwIDogc3luY1Jvd3M7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25FbGVtcyA9IHN5bmMoZ3JpZFNlY3Rpb24pO1xuICAgICAgICBhcHBlbmQoc2VjdGlvbiwgc2VjdGlvbkVsZW1zKTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZW1vdmVTZWN0aW9uID0gc2VjdGlvbk5hbWUgPT4ge1xuICAgICAgICBjaGlsZCh0YWJsZSwgc2VjdGlvbk5hbWUpLmVhY2gocmVtb3ZlJDYpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlbmRlck9yUmVtb3ZlU2VjdGlvbiA9IChncmlkU2VjdGlvbiwgc2VjdGlvbk5hbWUpID0+IHtcbiAgICAgICAgaWYgKGdyaWRTZWN0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZW5kZXJTZWN0aW9uKGdyaWRTZWN0aW9uLCBzZWN0aW9uTmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVtb3ZlU2VjdGlvbihzZWN0aW9uTmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBoZWFkU2VjdGlvbiA9IFtdO1xuICAgICAgY29uc3QgYm9keVNlY3Rpb24gPSBbXTtcbiAgICAgIGNvbnN0IGZvb3RTZWN0aW9uID0gW107XG4gICAgICBjb25zdCBjb2x1bW5Hcm91cHNTZWN0aW9uID0gW107XG4gICAgICBlYWNoJDIoZ3JpZCwgcm93ID0+IHtcbiAgICAgICAgc3dpdGNoIChyb3cuc2VjdGlvbikge1xuICAgICAgICBjYXNlICd0aGVhZCc6XG4gICAgICAgICAgaGVhZFNlY3Rpb24ucHVzaChyb3cpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0Ym9keSc6XG4gICAgICAgICAgYm9keVNlY3Rpb24ucHVzaChyb3cpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0Zm9vdCc6XG4gICAgICAgICAgZm9vdFNlY3Rpb24ucHVzaChyb3cpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjb2xncm91cCc6XG4gICAgICAgICAgY29sdW1uR3JvdXBzU2VjdGlvbi5wdXNoKHJvdyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmVuZGVyT3JSZW1vdmVTZWN0aW9uKGNvbHVtbkdyb3Vwc1NlY3Rpb24sICdjb2xncm91cCcpO1xuICAgICAgcmVuZGVyT3JSZW1vdmVTZWN0aW9uKGhlYWRTZWN0aW9uLCAndGhlYWQnKTtcbiAgICAgIHJlbmRlck9yUmVtb3ZlU2VjdGlvbihib2R5U2VjdGlvbiwgJ3Rib2R5Jyk7XG4gICAgICByZW5kZXJPclJlbW92ZVNlY3Rpb24oZm9vdFNlY3Rpb24sICd0Zm9vdCcpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV3Um93cyxcbiAgICAgICAgbmV3Q2VsbHNcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjb3B5ID0gZ3JpZCA9PiBtYXAkMShncmlkLCByb3cgPT4ge1xuICAgICAgY29uc3QgdHIgPSBzaGFsbG93KHJvdy5lbGVtZW50KTtcbiAgICAgIGVhY2gkMihyb3cuY2VsbHMsIGNlbGwgPT4ge1xuICAgICAgICBjb25zdCBjbG9uZWRDZWxsID0gZGVlcChjZWxsLmVsZW1lbnQpO1xuICAgICAgICBzZXRJZk5vdChjbG9uZWRDZWxsLCAnY29sc3BhbicsIGNlbGwuY29sc3BhbiwgMSk7XG4gICAgICAgIHNldElmTm90KGNsb25lZENlbGwsICdyb3dzcGFuJywgY2VsbC5yb3dzcGFuLCAxKTtcbiAgICAgICAgYXBwZW5kJDEodHIsIGNsb25lZENlbGwpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdHI7XG4gICAgfSk7XG5cbiAgICBjb25zdCBnZXRDb2x1bW4gPSAoZ3JpZCwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBtYXAkMShncmlkLCByb3cgPT4ge1xuICAgICAgICByZXR1cm4gZ2V0Q2VsbChyb3csIGluZGV4KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Um93ID0gKGdyaWQsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gZ3JpZFtpbmRleF07XG4gICAgfTtcbiAgICBjb25zdCBmaW5kRGlmZiA9ICh4cywgY29tcCkgPT4ge1xuICAgICAgaWYgKHhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpcnN0ID0geHNbMF07XG4gICAgICBjb25zdCBpbmRleCA9IGZpbmRJbmRleCh4cywgeCA9PiB7XG4gICAgICAgIHJldHVybiAhY29tcChmaXJzdC5lbGVtZW50LCB4LmVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gaW5kZXguZ2V0T3IoeHMubGVuZ3RoKTtcbiAgICB9O1xuICAgIGNvbnN0IHN1YmdyaWQgPSAoZ3JpZCwgcm93LCBjb2x1bW4sIGNvbXBhcmF0b3IpID0+IHtcbiAgICAgIGNvbnN0IGdyaWRSb3cgPSBnZXRSb3coZ3JpZCwgcm93KTtcbiAgICAgIGNvbnN0IGlzQ29sUm93ID0gZ3JpZFJvdy5zZWN0aW9uID09PSAnY29sZ3JvdXAnO1xuICAgICAgY29uc3QgY29sc3BhbiA9IGZpbmREaWZmKGdyaWRSb3cuY2VsbHMuc2xpY2UoY29sdW1uKSwgY29tcGFyYXRvcik7XG4gICAgICBjb25zdCByb3dzcGFuID0gaXNDb2xSb3cgPyAxIDogZmluZERpZmYoZ2V0Q29sdW1uKGdyaWQuc2xpY2Uocm93KSwgY29sdW1uKSwgY29tcGFyYXRvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xzcGFuLFxuICAgICAgICByb3dzcGFuXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCB0b0RldGFpbHMgPSAoZ3JpZCwgY29tcGFyYXRvcikgPT4ge1xuICAgICAgY29uc3Qgc2VlbiA9IG1hcCQxKGdyaWQsIHJvdyA9PiBtYXAkMShyb3cuY2VsbHMsIG5ldmVyKSk7XG4gICAgICBjb25zdCB1cGRhdGVTZWVuID0gKHJvd0luZGV4LCBjb2x1bW5JbmRleCwgcm93c3BhbiwgY29sc3BhbikgPT4ge1xuICAgICAgICBmb3IgKGxldCByb3cgPSByb3dJbmRleDsgcm93IDwgcm93SW5kZXggKyByb3dzcGFuOyByb3crKykge1xuICAgICAgICAgIGZvciAobGV0IGNvbHVtbiA9IGNvbHVtbkluZGV4OyBjb2x1bW4gPCBjb2x1bW5JbmRleCArIGNvbHNwYW47IGNvbHVtbisrKSB7XG4gICAgICAgICAgICBzZWVuW3Jvd11bY29sdW1uXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIG1hcCQxKGdyaWQsIChyb3csIHJvd0luZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGRldGFpbHMgPSBiaW5kJDIocm93LmNlbGxzLCAoY2VsbCwgY29sdW1uSW5kZXgpID0+IHtcbiAgICAgICAgICBpZiAoc2Vlbltyb3dJbmRleF1bY29sdW1uSW5kZXhdID09PSBmYWxzZSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3ViZ3JpZChncmlkLCByb3dJbmRleCwgY29sdW1uSW5kZXgsIGNvbXBhcmF0b3IpO1xuICAgICAgICAgICAgdXBkYXRlU2Vlbihyb3dJbmRleCwgY29sdW1uSW5kZXgsIHJlc3VsdC5yb3dzcGFuLCByZXN1bHQuY29sc3Bhbik7XG4gICAgICAgICAgICByZXR1cm4gW2RldGFpbG5ldyhjZWxsLmVsZW1lbnQsIHJlc3VsdC5yb3dzcGFuLCByZXN1bHQuY29sc3BhbiwgY2VsbC5pc05ldyldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJvd2RldGFpbG5ldyhyb3cuZWxlbWVudCwgZGV0YWlscywgcm93LnNlY3Rpb24sIHJvdy5pc05ldyk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHRvR3JpZCA9ICh3YXJlaG91c2UsIGdlbmVyYXRvcnMsIGlzTmV3KSA9PiB7XG4gICAgICBjb25zdCBncmlkID0gW107XG4gICAgICBlYWNoJDIod2FyZWhvdXNlLmNvbGdyb3VwcywgY29sZ3JvdXAgPT4ge1xuICAgICAgICBjb25zdCBjb2xncm91cENvbHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgY29sdW1uSW5kZXggPSAwOyBjb2x1bW5JbmRleCA8IHdhcmVob3VzZS5ncmlkLmNvbHVtbnM7IGNvbHVtbkluZGV4KyspIHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gV2FyZWhvdXNlLmdldENvbHVtbkF0KHdhcmVob3VzZSwgY29sdW1uSW5kZXgpLm1hcChjb2x1bW4gPT4gZWxlbWVudG5ldyhjb2x1bW4uZWxlbWVudCwgaXNOZXcsIGZhbHNlKSkuZ2V0T3JUaHVuaygoKSA9PiBlbGVtZW50bmV3KGdlbmVyYXRvcnMuY29sR2FwKCksIHRydWUsIGZhbHNlKSk7XG4gICAgICAgICAgY29sZ3JvdXBDb2xzLnB1c2goZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZ3JpZC5wdXNoKHJvd2NlbGxzKGNvbGdyb3VwLmVsZW1lbnQsIGNvbGdyb3VwQ29scywgJ2NvbGdyb3VwJywgaXNOZXcpKTtcbiAgICAgIH0pO1xuICAgICAgZm9yIChsZXQgcm93SW5kZXggPSAwOyByb3dJbmRleCA8IHdhcmVob3VzZS5ncmlkLnJvd3M7IHJvd0luZGV4KyspIHtcbiAgICAgICAgY29uc3Qgcm93Q2VsbHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgY29sdW1uSW5kZXggPSAwOyBjb2x1bW5JbmRleCA8IHdhcmVob3VzZS5ncmlkLmNvbHVtbnM7IGNvbHVtbkluZGV4KyspIHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gV2FyZWhvdXNlLmdldEF0KHdhcmVob3VzZSwgcm93SW5kZXgsIGNvbHVtbkluZGV4KS5tYXAoaXRlbSA9PiBlbGVtZW50bmV3KGl0ZW0uZWxlbWVudCwgaXNOZXcsIGl0ZW0uaXNMb2NrZWQpKS5nZXRPclRodW5rKCgpID0+IGVsZW1lbnRuZXcoZ2VuZXJhdG9ycy5nYXAoKSwgdHJ1ZSwgZmFsc2UpKTtcbiAgICAgICAgICByb3dDZWxscy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvd0RldGFpbCA9IHdhcmVob3VzZS5hbGxbcm93SW5kZXhdO1xuICAgICAgICBjb25zdCByb3cgPSByb3djZWxscyhyb3dEZXRhaWwuZWxlbWVudCwgcm93Q2VsbHMsIHJvd0RldGFpbC5zZWN0aW9uLCBpc05ldyk7XG4gICAgICAgIGdyaWQucHVzaChyb3cpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdyaWQ7XG4gICAgfTtcblxuICAgIGNvbnN0IGZyb21XYXJlaG91c2UgPSAod2FyZWhvdXNlLCBnZW5lcmF0b3JzKSA9PiB0b0dyaWQod2FyZWhvdXNlLCBnZW5lcmF0b3JzLCBmYWxzZSk7XG4gICAgY29uc3QgdG9EZXRhaWxMaXN0ID0gZ3JpZCA9PiB0b0RldGFpbHMoZ3JpZCwgZXEkMSk7XG4gICAgY29uc3QgZmluZEluV2FyZWhvdXNlID0gKHdhcmVob3VzZSwgZWxlbWVudCkgPT4gZmluZE1hcCh3YXJlaG91c2UuYWxsLCByID0+IGZpbmQkMShyLmNlbGxzLCBlID0+IGVxJDEoZWxlbWVudCwgZS5lbGVtZW50KSkpO1xuICAgIGNvbnN0IGV4dHJhY3RDZWxscyA9ICh3YXJlaG91c2UsIHRhcmdldCwgcHJlZGljYXRlKSA9PiB7XG4gICAgICBjb25zdCBkZXRhaWxzID0gbWFwJDEodGFyZ2V0LnNlbGVjdGlvbiwgY2VsbCQxID0+IHtcbiAgICAgICAgcmV0dXJuIGNlbGwoY2VsbCQxKS5iaW5kKGxjID0+IGZpbmRJbldhcmVob3VzZSh3YXJlaG91c2UsIGxjKSkuZmlsdGVyKHByZWRpY2F0ZSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNlbGxzID0gY2F0KGRldGFpbHMpO1xuICAgICAgcmV0dXJuIHNvbWVJZihjZWxscy5sZW5ndGggPiAwLCBjZWxscyk7XG4gICAgfTtcbiAgICBjb25zdCBydW4gPSAob3BlcmF0aW9uLCBleHRyYWN0LCBhZGp1c3RtZW50LCBwb3N0QWN0aW9uLCBnZW5XcmFwcGVycykgPT4gKHRhYmxlLCB0YXJnZXQsIGdlbmVyYXRvcnMsIGJlaGF2aW91cnMpID0+IHtcbiAgICAgIGNvbnN0IHdhcmVob3VzZSA9IFdhcmVob3VzZS5mcm9tVGFibGUodGFibGUpO1xuICAgICAgY29uc3QgdGFibGVTZWN0aW9uID0gT3B0aW9uYWwuZnJvbShiZWhhdmlvdXJzID09PSBudWxsIHx8IGJlaGF2aW91cnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJlaGF2aW91cnMuc2VjdGlvbikuZ2V0T3JUaHVuayhUYWJsZVNlY3Rpb24uZmFsbGJhY2spO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gZXh0cmFjdCh3YXJlaG91c2UsIHRhcmdldCkubWFwKGluZm8gPT4ge1xuICAgICAgICBjb25zdCBtb2RlbCA9IGZyb21XYXJlaG91c2Uod2FyZWhvdXNlLCBnZW5lcmF0b3JzKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gb3BlcmF0aW9uKG1vZGVsLCBpbmZvLCBlcSQxLCBnZW5XcmFwcGVycyhnZW5lcmF0b3JzKSwgdGFibGVTZWN0aW9uKTtcbiAgICAgICAgY29uc3QgbG9ja2VkQ29sdW1ucyA9IGdldExvY2tlZENvbHVtbnNGcm9tR3JpZChyZXN1bHQuZ3JpZCk7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0b0RldGFpbExpc3QocmVzdWx0LmdyaWQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGluZm8sXG4gICAgICAgICAgZ3JpZCxcbiAgICAgICAgICBjdXJzb3I6IHJlc3VsdC5jdXJzb3IsXG4gICAgICAgICAgbG9ja2VkQ29sdW1uc1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gb3V0cHV0LmJpbmQob3V0ID0+IHtcbiAgICAgICAgY29uc3QgbmV3RWxlbWVudHMgPSByZW5kZXIkMSh0YWJsZSwgb3V0LmdyaWQpO1xuICAgICAgICBjb25zdCB0YWJsZVNpemluZyA9IE9wdGlvbmFsLmZyb20oYmVoYXZpb3VycyA9PT0gbnVsbCB8fCBiZWhhdmlvdXJzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBiZWhhdmlvdXJzLnNpemluZykuZ2V0T3JUaHVuaygoKSA9PiBUYWJsZVNpemUuZ2V0VGFibGVTaXplKHRhYmxlKSk7XG4gICAgICAgIGNvbnN0IHJlc2l6aW5nID0gT3B0aW9uYWwuZnJvbShiZWhhdmlvdXJzID09PSBudWxsIHx8IGJlaGF2aW91cnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJlaGF2aW91cnMucmVzaXplKS5nZXRPclRodW5rKHByZXNlcnZlVGFibGUpO1xuICAgICAgICBhZGp1c3RtZW50KHRhYmxlLCBvdXQuZ3JpZCwgb3V0LmluZm8sIHtcbiAgICAgICAgICBzaXppbmc6IHRhYmxlU2l6aW5nLFxuICAgICAgICAgIHJlc2l6ZTogcmVzaXppbmcsXG4gICAgICAgICAgc2VjdGlvbjogdGFibGVTZWN0aW9uXG4gICAgICAgIH0pO1xuICAgICAgICBwb3N0QWN0aW9uKHRhYmxlKTtcbiAgICAgICAgcmVtb3ZlJDcodGFibGUsIExPQ0tFRF9DT0xfQVRUUik7XG4gICAgICAgIGlmIChvdXQubG9ja2VkQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2V0JDIodGFibGUsIExPQ0tFRF9DT0xfQVRUUiwgb3V0LmxvY2tlZENvbHVtbnMuam9pbignLCcpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgY3Vyc29yOiBvdXQuY3Vyc29yLFxuICAgICAgICAgIG5ld1Jvd3M6IG5ld0VsZW1lbnRzLm5ld1Jvd3MsXG4gICAgICAgICAgbmV3Q2VsbHM6IG5ld0VsZW1lbnRzLm5ld0NlbGxzXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBvblBhc3RlID0gKHdhcmVob3VzZSwgdGFyZ2V0KSA9PiBjZWxsKHRhcmdldC5lbGVtZW50KS5iaW5kKGNlbGwgPT4gZmluZEluV2FyZWhvdXNlKHdhcmVob3VzZSwgY2VsbCkubWFwKGRldGFpbHMgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB7XG4gICAgICAgIC4uLmRldGFpbHMsXG4gICAgICAgIGdlbmVyYXRvcnM6IHRhcmdldC5nZW5lcmF0b3JzLFxuICAgICAgICBjbGlwYm9hcmQ6IHRhcmdldC5jbGlwYm9hcmRcbiAgICAgIH07XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSkpO1xuICAgIGNvbnN0IG9uUGFzdGVCeUVkaXRvciA9ICh3YXJlaG91c2UsIHRhcmdldCkgPT4gZXh0cmFjdENlbGxzKHdhcmVob3VzZSwgdGFyZ2V0LCBhbHdheXMpLm1hcChjZWxscyA9PiAoe1xuICAgICAgY2VsbHMsXG4gICAgICBnZW5lcmF0b3JzOiB0YXJnZXQuZ2VuZXJhdG9ycyxcbiAgICAgIGNsaXBib2FyZDogdGFyZ2V0LmNsaXBib2FyZFxuICAgIH0pKTtcbiAgICBjb25zdCBvbk1lcmdhYmxlID0gKF93YXJlaG91c2UsIHRhcmdldCkgPT4gdGFyZ2V0Lm1lcmdhYmxlO1xuICAgIGNvbnN0IG9uVW5tZXJnYWJsZSA9IChfd2FyZWhvdXNlLCB0YXJnZXQpID0+IHRhcmdldC51bm1lcmdhYmxlO1xuICAgIGNvbnN0IG9uQ2VsbHMgPSAod2FyZWhvdXNlLCB0YXJnZXQpID0+IGV4dHJhY3RDZWxscyh3YXJlaG91c2UsIHRhcmdldCwgYWx3YXlzKTtcbiAgICBjb25zdCBvblVubG9ja2VkQ2VsbHMgPSAod2FyZWhvdXNlLCB0YXJnZXQpID0+IGV4dHJhY3RDZWxscyh3YXJlaG91c2UsIHRhcmdldCwgZGV0YWlsID0+ICFkZXRhaWwuaXNMb2NrZWQpO1xuICAgIGNvbnN0IGlzVW5sb2NrZWRUYWJsZUNlbGwgPSAod2FyZWhvdXNlLCBjZWxsKSA9PiBmaW5kSW5XYXJlaG91c2Uod2FyZWhvdXNlLCBjZWxsKS5leGlzdHMoZGV0YWlsID0+ICFkZXRhaWwuaXNMb2NrZWQpO1xuICAgIGNvbnN0IGFsbFVubG9ja2VkID0gKHdhcmVob3VzZSwgY2VsbHMpID0+IGZvcmFsbChjZWxscywgY2VsbCA9PiBpc1VubG9ja2VkVGFibGVDZWxsKHdhcmVob3VzZSwgY2VsbCkpO1xuICAgIGNvbnN0IG9uVW5sb2NrZWRNZXJnYWJsZSA9ICh3YXJlaG91c2UsIHRhcmdldCkgPT4gb25NZXJnYWJsZSh3YXJlaG91c2UsIHRhcmdldCkuZmlsdGVyKG1lcmdlYWJsZSA9PiBhbGxVbmxvY2tlZCh3YXJlaG91c2UsIG1lcmdlYWJsZS5jZWxscykpO1xuICAgIGNvbnN0IG9uVW5sb2NrZWRVbm1lcmdhYmxlID0gKHdhcmVob3VzZSwgdGFyZ2V0KSA9PiBvblVubWVyZ2FibGUod2FyZWhvdXNlLCB0YXJnZXQpLmZpbHRlcihjZWxscyA9PiBhbGxVbmxvY2tlZCh3YXJlaG91c2UsIGNlbGxzKSk7XG5cbiAgICBjb25zdCBtZXJnZSQyID0gKGdyaWQsIGJvdW5kcywgY29tcGFyYXRvciwgc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCByb3dzID0gZXh0cmFjdEdyaWREZXRhaWxzKGdyaWQpLnJvd3M7XG4gICAgICBpZiAocm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGdyaWQ7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gYm91bmRzLnN0YXJ0Um93OyBpIDw9IGJvdW5kcy5maW5pc2hSb3c7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gYm91bmRzLnN0YXJ0Q29sOyBqIDw9IGJvdW5kcy5maW5pc2hDb2w7IGorKykge1xuICAgICAgICAgIGNvbnN0IHJvdyA9IHJvd3NbaV07XG4gICAgICAgICAgY29uc3QgaXNMb2NrZWQgPSBnZXRDZWxsKHJvdywgaikuaXNMb2NrZWQ7XG4gICAgICAgICAgbXV0YXRlQ2VsbChyb3csIGosIGVsZW1lbnRuZXcoc3Vic3RpdHV0aW9uKCksIGZhbHNlLCBpc0xvY2tlZCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZ3JpZDtcbiAgICB9O1xuICAgIGNvbnN0IHVubWVyZ2UgPSAoZ3JpZCwgdGFyZ2V0LCBjb21wYXJhdG9yLCBzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHJvd3MgPSBleHRyYWN0R3JpZERldGFpbHMoZ3JpZCkucm93cztcbiAgICAgIGxldCBmaXJzdCA9IHRydWU7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjZWxsTGVuZ3RoKHJvd3NbMF0pOyBqKyspIHtcbiAgICAgICAgICBjb25zdCByb3cgPSByb3dzW2ldO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRDZWxsID0gZ2V0Q2VsbChyb3csIGopO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRDZWxsRWxtID0gY3VycmVudENlbGwuZWxlbWVudDtcbiAgICAgICAgICBjb25zdCBpc1RvUmVwbGFjZSA9IGNvbXBhcmF0b3IoY3VycmVudENlbGxFbG0sIHRhcmdldCk7XG4gICAgICAgICAgaWYgKGlzVG9SZXBsYWNlICYmICFmaXJzdCkge1xuICAgICAgICAgICAgbXV0YXRlQ2VsbChyb3csIGosIGVsZW1lbnRuZXcoc3Vic3RpdHV0aW9uKCksIHRydWUsIGN1cnJlbnRDZWxsLmlzTG9ja2VkKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1RvUmVwbGFjZSkge1xuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBncmlkO1xuICAgIH07XG4gICAgY29uc3QgdW5pcXVlQ2VsbHMgPSAocm93LCBjb21wYXJhdG9yKSA9PiB7XG4gICAgICByZXR1cm4gZm9sZGwocm93LCAocmVzdCwgY2VsbCkgPT4ge1xuICAgICAgICByZXR1cm4gZXhpc3RzKHJlc3QsIGN1cnJlbnRDZWxsID0+IHtcbiAgICAgICAgICByZXR1cm4gY29tcGFyYXRvcihjdXJyZW50Q2VsbC5lbGVtZW50LCBjZWxsLmVsZW1lbnQpO1xuICAgICAgICB9KSA/IHJlc3QgOiByZXN0LmNvbmNhdChbY2VsbF0pO1xuICAgICAgfSwgW10pO1xuICAgIH07XG4gICAgY29uc3Qgc3BsaXRDb2xzID0gKGdyaWQsIGluZGV4LCBjb21wYXJhdG9yLCBzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGlmIChpbmRleCA+IDAgJiYgaW5kZXggPCBncmlkWzBdLmNlbGxzLmxlbmd0aCkge1xuICAgICAgICBlYWNoJDIoZ3JpZCwgcm93ID0+IHtcbiAgICAgICAgICBjb25zdCBwcmV2Q2VsbCA9IHJvdy5jZWxsc1tpbmRleCAtIDFdO1xuICAgICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGUgPSBzdWJzdGl0dXRpb24oKTtcbiAgICAgICAgICB3aGlsZSAocm93LmNlbGxzLmxlbmd0aCA+IGluZGV4ICsgb2Zmc2V0ICYmIGNvbXBhcmF0b3IocHJldkNlbGwuZWxlbWVudCwgcm93LmNlbGxzW2luZGV4ICsgb2Zmc2V0XS5lbGVtZW50KSkge1xuICAgICAgICAgICAgbXV0YXRlQ2VsbChyb3csIGluZGV4ICsgb2Zmc2V0LCBlbGVtZW50bmV3KHN1YnN0aXR1dGUsIHRydWUsIHJvdy5jZWxsc1tpbmRleCArIG9mZnNldF0uaXNMb2NrZWQpKTtcbiAgICAgICAgICAgIG9mZnNldCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ3JpZDtcbiAgICB9O1xuICAgIGNvbnN0IHNwbGl0Um93cyA9IChncmlkLCBpbmRleCwgY29tcGFyYXRvciwgc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCByb3dzID0gZXh0cmFjdEdyaWREZXRhaWxzKGdyaWQpLnJvd3M7XG4gICAgICBpZiAoaW5kZXggPiAwICYmIGluZGV4IDwgcm93cy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgcm93UHJldkNlbGxzID0gcm93c1tpbmRleCAtIDFdLmNlbGxzO1xuICAgICAgICBjb25zdCBjZWxscyA9IHVuaXF1ZUNlbGxzKHJvd1ByZXZDZWxscywgY29tcGFyYXRvcik7XG4gICAgICAgIGVhY2gkMihjZWxscywgY2VsbCA9PiB7XG4gICAgICAgICAgbGV0IHJlcGxhY2VtZW50ID0gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICAgIGZvciAobGV0IGkgPSBpbmRleDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY2VsbExlbmd0aChyb3dzWzBdKTsgaisrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHJvd3NbaV07XG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBnZXRDZWxsKHJvdywgaik7XG4gICAgICAgICAgICAgIGNvbnN0IGlzVG9SZXBsYWNlID0gY29tcGFyYXRvcihjdXJyZW50LmVsZW1lbnQsIGNlbGwuZWxlbWVudCk7XG4gICAgICAgICAgICAgIGlmIChpc1RvUmVwbGFjZSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudC5pc05vbmUoKSkge1xuICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSBPcHRpb25hbC5zb21lKHN1YnN0aXR1dGlvbigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQuZWFjaChzdWIgPT4ge1xuICAgICAgICAgICAgICAgICAgbXV0YXRlQ2VsbChyb3csIGosIGVsZW1lbnRuZXcoc3ViLCB0cnVlLCBjdXJyZW50LmlzTG9ja2VkKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdyaWQ7XG4gICAgfTtcblxuICAgIGNvbnN0IHZhbHVlJDEgPSB2YWx1ZSA9PiB7XG4gICAgICBjb25zdCBhcHBseUhlbHBlciA9IGZuID0+IGZuKHZhbHVlKTtcbiAgICAgIGNvbnN0IGNvbnN0SGVscGVyID0gY29uc3RhbnQodmFsdWUpO1xuICAgICAgY29uc3Qgb3V0cHV0SGVscGVyID0gKCkgPT4gb3V0cHV0O1xuICAgICAgY29uc3Qgb3V0cHV0ID0ge1xuICAgICAgICB0YWc6IHRydWUsXG4gICAgICAgIGlubmVyOiB2YWx1ZSxcbiAgICAgICAgZm9sZDogKF9vbkVycm9yLCBvblZhbHVlKSA9PiBvblZhbHVlKHZhbHVlKSxcbiAgICAgICAgaXNWYWx1ZTogYWx3YXlzLFxuICAgICAgICBpc0Vycm9yOiBuZXZlcixcbiAgICAgICAgbWFwOiBtYXBwZXIgPT4gUmVzdWx0LnZhbHVlKG1hcHBlcih2YWx1ZSkpLFxuICAgICAgICBtYXBFcnJvcjogb3V0cHV0SGVscGVyLFxuICAgICAgICBiaW5kOiBhcHBseUhlbHBlcixcbiAgICAgICAgZXhpc3RzOiBhcHBseUhlbHBlcixcbiAgICAgICAgZm9yYWxsOiBhcHBseUhlbHBlcixcbiAgICAgICAgZ2V0T3I6IGNvbnN0SGVscGVyLFxuICAgICAgICBvcjogb3V0cHV0SGVscGVyLFxuICAgICAgICBnZXRPclRodW5rOiBjb25zdEhlbHBlcixcbiAgICAgICAgb3JUaHVuazogb3V0cHV0SGVscGVyLFxuICAgICAgICBnZXRPckRpZTogY29uc3RIZWxwZXIsXG4gICAgICAgIGVhY2g6IGZuID0+IHtcbiAgICAgICAgICBmbih2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRvT3B0aW9uYWw6ICgpID0+IE9wdGlvbmFsLnNvbWUodmFsdWUpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yID0gZXJyb3IgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0SGVscGVyID0gKCkgPT4gb3V0cHV0O1xuICAgICAgY29uc3Qgb3V0cHV0ID0ge1xuICAgICAgICB0YWc6IGZhbHNlLFxuICAgICAgICBpbm5lcjogZXJyb3IsXG4gICAgICAgIGZvbGQ6IChvbkVycm9yLCBfb25WYWx1ZSkgPT4gb25FcnJvcihlcnJvciksXG4gICAgICAgIGlzVmFsdWU6IG5ldmVyLFxuICAgICAgICBpc0Vycm9yOiBhbHdheXMsXG4gICAgICAgIG1hcDogb3V0cHV0SGVscGVyLFxuICAgICAgICBtYXBFcnJvcjogbWFwcGVyID0+IFJlc3VsdC5lcnJvcihtYXBwZXIoZXJyb3IpKSxcbiAgICAgICAgYmluZDogb3V0cHV0SGVscGVyLFxuICAgICAgICBleGlzdHM6IG5ldmVyLFxuICAgICAgICBmb3JhbGw6IGFsd2F5cyxcbiAgICAgICAgZ2V0T3I6IGlkZW50aXR5LFxuICAgICAgICBvcjogaWRlbnRpdHksXG4gICAgICAgIGdldE9yVGh1bms6IGFwcGx5LFxuICAgICAgICBvclRodW5rOiBhcHBseSxcbiAgICAgICAgZ2V0T3JEaWU6IGRpZShTdHJpbmcoZXJyb3IpKSxcbiAgICAgICAgZWFjaDogbm9vcCxcbiAgICAgICAgdG9PcHRpb25hbDogT3B0aW9uYWwubm9uZVxuICAgICAgfTtcbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tT3B0aW9uID0gKG9wdGlvbmFsLCBlcnIpID0+IG9wdGlvbmFsLmZvbGQoKCkgPT4gZXJyb3IoZXJyKSwgdmFsdWUkMSk7XG4gICAgY29uc3QgUmVzdWx0ID0ge1xuICAgICAgdmFsdWU6IHZhbHVlJDEsXG4gICAgICBlcnJvcixcbiAgICAgIGZyb21PcHRpb25cbiAgICB9O1xuXG4gICAgY29uc3QgbWVhc3VyZSA9IChzdGFydEFkZHJlc3MsIGdyaWRBLCBncmlkQikgPT4ge1xuICAgICAgaWYgKHN0YXJ0QWRkcmVzcy5yb3cgPj0gZ3JpZEEubGVuZ3RoIHx8IHN0YXJ0QWRkcmVzcy5jb2x1bW4gPiBjZWxsTGVuZ3RoKGdyaWRBWzBdKSkge1xuICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKCdpbnZhbGlkIHN0YXJ0IGFkZHJlc3Mgb3V0IG9mIHRhYmxlIGJvdW5kcywgcm93OiAnICsgc3RhcnRBZGRyZXNzLnJvdyArICcsIGNvbHVtbjogJyArIHN0YXJ0QWRkcmVzcy5jb2x1bW4pO1xuICAgICAgfVxuICAgICAgY29uc3Qgcm93UmVtYWluZGVyID0gZ3JpZEEuc2xpY2Uoc3RhcnRBZGRyZXNzLnJvdyk7XG4gICAgICBjb25zdCBjb2xSZW1haW5kZXIgPSByb3dSZW1haW5kZXJbMF0uY2VsbHMuc2xpY2Uoc3RhcnRBZGRyZXNzLmNvbHVtbik7XG4gICAgICBjb25zdCBjb2xSZXF1aXJlZCA9IGNlbGxMZW5ndGgoZ3JpZEJbMF0pO1xuICAgICAgY29uc3Qgcm93UmVxdWlyZWQgPSBncmlkQi5sZW5ndGg7XG4gICAgICByZXR1cm4gUmVzdWx0LnZhbHVlKHtcbiAgICAgICAgcm93RGVsdGE6IHJvd1JlbWFpbmRlci5sZW5ndGggLSByb3dSZXF1aXJlZCxcbiAgICAgICAgY29sRGVsdGE6IGNvbFJlbWFpbmRlci5sZW5ndGggLSBjb2xSZXF1aXJlZFxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBtZWFzdXJlV2lkdGggPSAoZ3JpZEEsIGdyaWRCKSA9PiB7XG4gICAgICBjb25zdCBjb2xMZW5ndGhBID0gY2VsbExlbmd0aChncmlkQVswXSk7XG4gICAgICBjb25zdCBjb2xMZW5ndGhCID0gY2VsbExlbmd0aChncmlkQlswXSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByb3dEZWx0YTogMCxcbiAgICAgICAgY29sRGVsdGE6IGNvbExlbmd0aEEgLSBjb2xMZW5ndGhCXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgbWVhc3VyZUhlaWdodCA9IChncmlkQSwgZ3JpZEIpID0+IHtcbiAgICAgIGNvbnN0IHJvd0xlbmd0aEEgPSBncmlkQS5sZW5ndGg7XG4gICAgICBjb25zdCByb3dMZW5ndGhCID0gZ3JpZEIubGVuZ3RoO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcm93RGVsdGE6IHJvd0xlbmd0aEEgLSByb3dMZW5ndGhCLFxuICAgICAgICBjb2xEZWx0YTogMFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGdlbmVyYXRlRWxlbWVudHMgPSAoYW1vdW50LCByb3csIGdlbmVyYXRvcnMsIGlzTG9ja2VkKSA9PiB7XG4gICAgICBjb25zdCBnZW5lcmF0b3IgPSByb3cuc2VjdGlvbiA9PT0gJ2NvbGdyb3VwJyA/IGdlbmVyYXRvcnMuY29sIDogZ2VuZXJhdG9ycy5jZWxsO1xuICAgICAgcmV0dXJuIHJhbmdlJDEoYW1vdW50LCBpZHggPT4gZWxlbWVudG5ldyhnZW5lcmF0b3IoKSwgdHJ1ZSwgaXNMb2NrZWQoaWR4KSkpO1xuICAgIH07XG4gICAgY29uc3Qgcm93RmlsbCA9IChncmlkLCBhbW91bnQsIGdlbmVyYXRvcnMsIGxvY2tlZENvbHVtbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4YW1wbGVSb3cgPSBncmlkW2dyaWQubGVuZ3RoIC0gMV07XG4gICAgICByZXR1cm4gZ3JpZC5jb25jYXQocmFuZ2UkMShhbW91bnQsICgpID0+IHtcbiAgICAgICAgY29uc3QgZ2VuZXJhdG9yID0gZXhhbXBsZVJvdy5zZWN0aW9uID09PSAnY29sZ3JvdXAnID8gZ2VuZXJhdG9ycy5jb2xncm91cCA6IGdlbmVyYXRvcnMucm93O1xuICAgICAgICBjb25zdCByb3cgPSBjbG9uZShleGFtcGxlUm93LCBnZW5lcmF0b3IsIGlkZW50aXR5KTtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBnZW5lcmF0ZUVsZW1lbnRzKHJvdy5jZWxscy5sZW5ndGgsIHJvdywgZ2VuZXJhdG9ycywgaWR4ID0+IGhhcyQxKGxvY2tlZENvbHVtbnMsIGlkeC50b1N0cmluZygpKSk7XG4gICAgICAgIHJldHVybiBzZXRDZWxscyhyb3csIGVsZW1lbnRzKTtcbiAgICAgIH0pKTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbEZpbGwgPSAoZ3JpZCwgYW1vdW50LCBnZW5lcmF0b3JzLCBzdGFydEluZGV4KSA9PiBtYXAkMShncmlkLCByb3cgPT4ge1xuICAgICAgY29uc3QgbmV3Q2hpbGRyZW4gPSBnZW5lcmF0ZUVsZW1lbnRzKGFtb3VudCwgcm93LCBnZW5lcmF0b3JzLCBuZXZlcik7XG4gICAgICByZXR1cm4gYWRkQ2VsbHMocm93LCBzdGFydEluZGV4LCBuZXdDaGlsZHJlbik7XG4gICAgfSk7XG4gICAgY29uc3QgbG9ja2VkQ29sRmlsbCA9IChncmlkLCBnZW5lcmF0b3JzLCBsb2NrZWRDb2x1bW5zKSA9PiBtYXAkMShncmlkLCByb3cgPT4ge1xuICAgICAgcmV0dXJuIGZvbGRsKGxvY2tlZENvbHVtbnMsIChhY2MsIGNvbE51bSkgPT4ge1xuICAgICAgICBjb25zdCBuZXdDaGlsZCA9IGdlbmVyYXRlRWxlbWVudHMoMSwgcm93LCBnZW5lcmF0b3JzLCBhbHdheXMpWzBdO1xuICAgICAgICByZXR1cm4gYWRkQ2VsbChhY2MsIGNvbE51bSwgbmV3Q2hpbGQpO1xuICAgICAgfSwgcm93KTtcbiAgICB9KTtcbiAgICBjb25zdCB0YWlsb3IgPSAoZ3JpZEEsIGRlbHRhLCBnZW5lcmF0b3JzKSA9PiB7XG4gICAgICBjb25zdCBmaWxsQ29scyA9IGRlbHRhLmNvbERlbHRhIDwgMCA/IGNvbEZpbGwgOiBpZGVudGl0eTtcbiAgICAgIGNvbnN0IGZpbGxSb3dzID0gZGVsdGEucm93RGVsdGEgPCAwID8gcm93RmlsbCA6IGlkZW50aXR5O1xuICAgICAgY29uc3QgbG9ja2VkQ29sdW1ucyA9IGdldExvY2tlZENvbHVtbnNGcm9tR3JpZChncmlkQSk7XG4gICAgICBjb25zdCBncmlkV2lkdGggPSBjZWxsTGVuZ3RoKGdyaWRBWzBdKTtcbiAgICAgIGNvbnN0IGlzTGFzdENvbExvY2tlZCA9IGV4aXN0cyhsb2NrZWRDb2x1bW5zLCBsb2NrZWQgPT4gbG9ja2VkID09PSBncmlkV2lkdGggLSAxKTtcbiAgICAgIGNvbnN0IG1vZGlmaWVkQ29scyA9IGZpbGxDb2xzKGdyaWRBLCBNYXRoLmFicyhkZWx0YS5jb2xEZWx0YSksIGdlbmVyYXRvcnMsIGlzTGFzdENvbExvY2tlZCA/IGdyaWRXaWR0aCAtIDEgOiBncmlkV2lkdGgpO1xuICAgICAgY29uc3QgbmV3TG9ja2VkQ29sdW1ucyA9IGdldExvY2tlZENvbHVtbnNGcm9tR3JpZChtb2RpZmllZENvbHMpO1xuICAgICAgcmV0dXJuIGZpbGxSb3dzKG1vZGlmaWVkQ29scywgTWF0aC5hYnMoZGVsdGEucm93RGVsdGEpLCBnZW5lcmF0b3JzLCBtYXBUb09iamVjdChuZXdMb2NrZWRDb2x1bW5zLCBhbHdheXMpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNTcGFubmluZyA9IChncmlkLCByb3csIGNvbCwgY29tcGFyYXRvcikgPT4ge1xuICAgICAgY29uc3QgY2FuZGlkYXRlID0gZ2V0Q2VsbChncmlkW3Jvd10sIGNvbCk7XG4gICAgICBjb25zdCBtYXRjaGluZyA9IGN1cnJ5KGNvbXBhcmF0b3IsIGNhbmRpZGF0ZS5lbGVtZW50KTtcbiAgICAgIGNvbnN0IGN1cnJlbnRSb3cgPSBncmlkW3Jvd107XG4gICAgICByZXR1cm4gZ3JpZC5sZW5ndGggPiAxICYmIGNlbGxMZW5ndGgoY3VycmVudFJvdykgPiAxICYmIChjb2wgPiAwICYmIG1hdGNoaW5nKGdldENlbGxFbGVtZW50KGN1cnJlbnRSb3csIGNvbCAtIDEpKSB8fCBjb2wgPCBjdXJyZW50Um93LmNlbGxzLmxlbmd0aCAtIDEgJiYgbWF0Y2hpbmcoZ2V0Q2VsbEVsZW1lbnQoY3VycmVudFJvdywgY29sICsgMSkpIHx8IHJvdyA+IDAgJiYgbWF0Y2hpbmcoZ2V0Q2VsbEVsZW1lbnQoZ3JpZFtyb3cgLSAxXSwgY29sKSkgfHwgcm93IDwgZ3JpZC5sZW5ndGggLSAxICYmIG1hdGNoaW5nKGdldENlbGxFbGVtZW50KGdyaWRbcm93ICsgMV0sIGNvbCkpKTtcbiAgICB9O1xuICAgIGNvbnN0IG1lcmdlVGFibGVzID0gKHN0YXJ0QWRkcmVzcywgZ3JpZEEsIGdyaWRCUm93cywgZ2VuZXJhdG9yLCBjb21wYXJhdG9yLCBsb2NrZWRDb2x1bW5zKSA9PiB7XG4gICAgICBjb25zdCBzdGFydFJvdyA9IHN0YXJ0QWRkcmVzcy5yb3c7XG4gICAgICBjb25zdCBzdGFydENvbCA9IHN0YXJ0QWRkcmVzcy5jb2x1bW47XG4gICAgICBjb25zdCBtZXJnZUhlaWdodCA9IGdyaWRCUm93cy5sZW5ndGg7XG4gICAgICBjb25zdCBtZXJnZVdpZHRoID0gY2VsbExlbmd0aChncmlkQlJvd3NbMF0pO1xuICAgICAgY29uc3QgZW5kUm93ID0gc3RhcnRSb3cgKyBtZXJnZUhlaWdodDtcbiAgICAgIGNvbnN0IGVuZENvbCA9IHN0YXJ0Q29sICsgbWVyZ2VXaWR0aCArIGxvY2tlZENvbHVtbnMubGVuZ3RoO1xuICAgICAgY29uc3QgbG9ja2VkQ29sdW1uT2JqID0gbWFwVG9PYmplY3QobG9ja2VkQ29sdW1ucywgYWx3YXlzKTtcbiAgICAgIGZvciAobGV0IHIgPSBzdGFydFJvdzsgciA8IGVuZFJvdzsgcisrKSB7XG4gICAgICAgIGxldCBza2lwcGVkQ29sID0gMDtcbiAgICAgICAgZm9yIChsZXQgYyA9IHN0YXJ0Q29sOyBjIDwgZW5kQ29sOyBjKyspIHtcbiAgICAgICAgICBpZiAobG9ja2VkQ29sdW1uT2JqW2NdKSB7XG4gICAgICAgICAgICBza2lwcGVkQ29sKys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzU3Bhbm5pbmcoZ3JpZEEsIHIsIGMsIGNvbXBhcmF0b3IpKSB7XG4gICAgICAgICAgICB1bm1lcmdlKGdyaWRBLCBnZXRDZWxsRWxlbWVudChncmlkQVtyXSwgYyksIGNvbXBhcmF0b3IsIGdlbmVyYXRvci5jZWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZ3JpZEJDb2xJbmRleCA9IGMgLSBzdGFydENvbCAtIHNraXBwZWRDb2w7XG4gICAgICAgICAgY29uc3QgbmV3Q2VsbCA9IGdldENlbGwoZ3JpZEJSb3dzW3IgLSBzdGFydFJvd10sIGdyaWRCQ29sSW5kZXgpO1xuICAgICAgICAgIGNvbnN0IG5ld0NlbGxFbG0gPSBuZXdDZWxsLmVsZW1lbnQ7XG4gICAgICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSBnZW5lcmF0b3IucmVwbGFjZShuZXdDZWxsRWxtKTtcbiAgICAgICAgICBtdXRhdGVDZWxsKGdyaWRBW3JdLCBjLCBlbGVtZW50bmV3KHJlcGxhY2VtZW50LCB0cnVlLCBuZXdDZWxsLmlzTG9ja2VkKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBncmlkQTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFZhbGlkU3RhcnRBZGRyZXNzID0gKGN1cnJlbnRTdGFydEFkZHJlc3MsIGdyaWQsIGxvY2tlZENvbHVtbnMpID0+IHtcbiAgICAgIGNvbnN0IGdyaWRDb2xMZW5ndGggPSBjZWxsTGVuZ3RoKGdyaWRbMF0pO1xuICAgICAgY29uc3QgYWRqdXN0ZWRSb3dBZGRyZXNzID0gZXh0cmFjdEdyaWREZXRhaWxzKGdyaWQpLmNvbHMubGVuZ3RoICsgY3VycmVudFN0YXJ0QWRkcmVzcy5yb3c7XG4gICAgICBjb25zdCBwb3NzaWJsZUNvbEFkZHJlc3NlcyA9IHJhbmdlJDEoZ3JpZENvbExlbmd0aCAtIGN1cnJlbnRTdGFydEFkZHJlc3MuY29sdW1uLCBudW0gPT4gbnVtICsgY3VycmVudFN0YXJ0QWRkcmVzcy5jb2x1bW4pO1xuICAgICAgY29uc3QgdmFsaWRDb2xBZGRyZXNzID0gZmluZCQxKHBvc3NpYmxlQ29sQWRkcmVzc2VzLCBudW0gPT4gZm9yYWxsKGxvY2tlZENvbHVtbnMsIGNvbCA9PiBjb2wgIT09IG51bSkpLmdldE9yKGdyaWRDb2xMZW5ndGggLSAxKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJvdzogYWRqdXN0ZWRSb3dBZGRyZXNzLFxuICAgICAgICBjb2x1bW46IHZhbGlkQ29sQWRkcmVzc1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGdldExvY2tlZENvbHVtbnNXaXRoaW5Cb3VuZHMgPSAoc3RhcnRBZGRyZXNzLCByb3dzLCBsb2NrZWRDb2x1bW5zKSA9PiBmaWx0ZXIkMihsb2NrZWRDb2x1bW5zLCBjb2xOdW0gPT4gY29sTnVtID49IHN0YXJ0QWRkcmVzcy5jb2x1bW4gJiYgY29sTnVtIDw9IGNlbGxMZW5ndGgocm93c1swXSkgKyBzdGFydEFkZHJlc3MuY29sdW1uKTtcbiAgICBjb25zdCBtZXJnZSQxID0gKHN0YXJ0QWRkcmVzcywgZ3JpZEEsIGdyaWRCLCBnZW5lcmF0b3IsIGNvbXBhcmF0b3IpID0+IHtcbiAgICAgIGNvbnN0IGxvY2tlZENvbHVtbnMgPSBnZXRMb2NrZWRDb2x1bW5zRnJvbUdyaWQoZ3JpZEEpO1xuICAgICAgY29uc3QgdmFsaWRTdGFydEFkZHJlc3MgPSBnZXRWYWxpZFN0YXJ0QWRkcmVzcyhzdGFydEFkZHJlc3MsIGdyaWRBLCBsb2NrZWRDb2x1bW5zKTtcbiAgICAgIGNvbnN0IGdyaWRCUm93cyA9IGV4dHJhY3RHcmlkRGV0YWlscyhncmlkQikucm93cztcbiAgICAgIGNvbnN0IGxvY2tlZENvbHVtbnNXaXRoaW5Cb3VuZHMgPSBnZXRMb2NrZWRDb2x1bW5zV2l0aGluQm91bmRzKHZhbGlkU3RhcnRBZGRyZXNzLCBncmlkQlJvd3MsIGxvY2tlZENvbHVtbnMpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gbWVhc3VyZSh2YWxpZFN0YXJ0QWRkcmVzcywgZ3JpZEEsIGdyaWRCUm93cyk7XG4gICAgICByZXR1cm4gcmVzdWx0Lm1hcChkaWZmID0+IHtcbiAgICAgICAgY29uc3QgZGVsdGEgPSB7XG4gICAgICAgICAgLi4uZGlmZixcbiAgICAgICAgICBjb2xEZWx0YTogZGlmZi5jb2xEZWx0YSAtIGxvY2tlZENvbHVtbnNXaXRoaW5Cb3VuZHMubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZpdHRlZEdyaWQgPSB0YWlsb3IoZ3JpZEEsIGRlbHRhLCBnZW5lcmF0b3IpO1xuICAgICAgICBjb25zdCBuZXdMb2NrZWRDb2x1bW5zID0gZ2V0TG9ja2VkQ29sdW1uc0Zyb21HcmlkKGZpdHRlZEdyaWQpO1xuICAgICAgICBjb25zdCBuZXdMb2NrZWRDb2x1bW5zV2l0aGluQm91bmRzID0gZ2V0TG9ja2VkQ29sdW1uc1dpdGhpbkJvdW5kcyh2YWxpZFN0YXJ0QWRkcmVzcywgZ3JpZEJSb3dzLCBuZXdMb2NrZWRDb2x1bW5zKTtcbiAgICAgICAgcmV0dXJuIG1lcmdlVGFibGVzKHZhbGlkU3RhcnRBZGRyZXNzLCBmaXR0ZWRHcmlkLCBncmlkQlJvd3MsIGdlbmVyYXRvciwgY29tcGFyYXRvciwgbmV3TG9ja2VkQ29sdW1uc1dpdGhpbkJvdW5kcyk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGluc2VydENvbHMgPSAoaW5kZXgsIGdyaWRBLCBncmlkQiwgZ2VuZXJhdG9yLCBjb21wYXJhdG9yKSA9PiB7XG4gICAgICBzcGxpdENvbHMoZ3JpZEEsIGluZGV4LCBjb21wYXJhdG9yLCBnZW5lcmF0b3IuY2VsbCk7XG4gICAgICBjb25zdCBkZWx0YSA9IG1lYXN1cmVIZWlnaHQoZ3JpZEIsIGdyaWRBKTtcbiAgICAgIGNvbnN0IGZpdHRlZE5ld0dyaWQgPSB0YWlsb3IoZ3JpZEIsIGRlbHRhLCBnZW5lcmF0b3IpO1xuICAgICAgY29uc3Qgc2Vjb25kRGVsdGEgPSBtZWFzdXJlSGVpZ2h0KGdyaWRBLCBmaXR0ZWROZXdHcmlkKTtcbiAgICAgIGNvbnN0IGZpdHRlZE9sZEdyaWQgPSB0YWlsb3IoZ3JpZEEsIHNlY29uZERlbHRhLCBnZW5lcmF0b3IpO1xuICAgICAgcmV0dXJuIG1hcCQxKGZpdHRlZE9sZEdyaWQsIChncmlkUm93LCBpKSA9PiB7XG4gICAgICAgIHJldHVybiBhZGRDZWxscyhncmlkUm93LCBpbmRleCwgZml0dGVkTmV3R3JpZFtpXS5jZWxscyk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGluc2VydFJvd3MgPSAoaW5kZXgsIGdyaWRBLCBncmlkQiwgZ2VuZXJhdG9yLCBjb21wYXJhdG9yKSA9PiB7XG4gICAgICBzcGxpdFJvd3MoZ3JpZEEsIGluZGV4LCBjb21wYXJhdG9yLCBnZW5lcmF0b3IuY2VsbCk7XG4gICAgICBjb25zdCBsb2NrZWQgPSBnZXRMb2NrZWRDb2x1bW5zRnJvbUdyaWQoZ3JpZEEpO1xuICAgICAgY29uc3QgZGlmZiA9IG1lYXN1cmVXaWR0aChncmlkQSwgZ3JpZEIpO1xuICAgICAgY29uc3QgZGVsdGEgPSB7XG4gICAgICAgIC4uLmRpZmYsXG4gICAgICAgIGNvbERlbHRhOiBkaWZmLmNvbERlbHRhIC0gbG9ja2VkLmxlbmd0aFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGZpdHRlZE9sZEdyaWQgPSB0YWlsb3IoZ3JpZEEsIGRlbHRhLCBnZW5lcmF0b3IpO1xuICAgICAgY29uc3Qge1xuICAgICAgICBjb2xzOiBvbGRDb2xzLFxuICAgICAgICByb3dzOiBvbGRSb3dzXG4gICAgICB9ID0gZXh0cmFjdEdyaWREZXRhaWxzKGZpdHRlZE9sZEdyaWQpO1xuICAgICAgY29uc3QgbmV3TG9ja2VkID0gZ2V0TG9ja2VkQ29sdW1uc0Zyb21HcmlkKGZpdHRlZE9sZEdyaWQpO1xuICAgICAgY29uc3Qgc2Vjb25kRGlmZiA9IG1lYXN1cmVXaWR0aChncmlkQiwgZ3JpZEEpO1xuICAgICAgY29uc3Qgc2Vjb25kRGVsdGEgPSB7XG4gICAgICAgIC4uLnNlY29uZERpZmYsXG4gICAgICAgIGNvbERlbHRhOiBzZWNvbmREaWZmLmNvbERlbHRhICsgbmV3TG9ja2VkLmxlbmd0aFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGZpdHRlZEdyaWRCID0gbG9ja2VkQ29sRmlsbChncmlkQiwgZ2VuZXJhdG9yLCBuZXdMb2NrZWQpO1xuICAgICAgY29uc3QgZml0dGVkTmV3R3JpZCA9IHRhaWxvcihmaXR0ZWRHcmlkQiwgc2Vjb25kRGVsdGEsIGdlbmVyYXRvcik7XG4gICAgICByZXR1cm4gW1xuICAgICAgICAuLi5vbGRDb2xzLFxuICAgICAgICAuLi5vbGRSb3dzLnNsaWNlKDAsIGluZGV4KSxcbiAgICAgICAgLi4uZml0dGVkTmV3R3JpZCxcbiAgICAgICAgLi4ub2xkUm93cy5zbGljZShpbmRleCwgb2xkUm93cy5sZW5ndGgpXG4gICAgICBdO1xuICAgIH07XG5cbiAgICBjb25zdCBjbG9uZVJvdyA9IChyb3csIGNsb25lQ2VsbCwgY29tcGFyYXRvciwgc3Vic3RpdHV0aW9uKSA9PiBjbG9uZShyb3csIGVsZW0gPT4gc3Vic3RpdHV0aW9uKGVsZW0sIGNvbXBhcmF0b3IpLCBjbG9uZUNlbGwpO1xuICAgIGNvbnN0IGluc2VydFJvd0F0ID0gKGdyaWQsIGluZGV4LCBleGFtcGxlLCBjb21wYXJhdG9yLCBzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHtyb3dzLCBjb2xzfSA9IGV4dHJhY3RHcmlkRGV0YWlscyhncmlkKTtcbiAgICAgIGNvbnN0IGJlZm9yZSA9IHJvd3Muc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgY29uc3QgYWZ0ZXIgPSByb3dzLnNsaWNlKGluZGV4KTtcbiAgICAgIGNvbnN0IG5ld1JvdyA9IGNsb25lUm93KHJvd3NbZXhhbXBsZV0sIChleCwgYykgPT4ge1xuICAgICAgICBjb25zdCB3aXRoaW5TcGFuID0gaW5kZXggPiAwICYmIGluZGV4IDwgcm93cy5sZW5ndGggJiYgY29tcGFyYXRvcihnZXRDZWxsRWxlbWVudChyb3dzW2luZGV4IC0gMV0sIGMpLCBnZXRDZWxsRWxlbWVudChyb3dzW2luZGV4XSwgYykpO1xuICAgICAgICBjb25zdCByZXQgPSB3aXRoaW5TcGFuID8gZ2V0Q2VsbChyb3dzW2luZGV4XSwgYykgOiBlbGVtZW50bmV3KHN1YnN0aXR1dGlvbihleC5lbGVtZW50LCBjb21wYXJhdG9yKSwgdHJ1ZSwgZXguaXNMb2NrZWQpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfSwgY29tcGFyYXRvciwgc3Vic3RpdHV0aW9uKTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC4uLmNvbHMsXG4gICAgICAgIC4uLmJlZm9yZSxcbiAgICAgICAgbmV3Um93LFxuICAgICAgICAuLi5hZnRlclxuICAgICAgXTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEVsZW1lbnRGb3IgPSAocm93LCBjb2x1bW4sIHNlY3Rpb24sIHdpdGhpblNwYW4sIGV4YW1wbGUsIGNvbXBhcmF0b3IsIHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgaWYgKHNlY3Rpb24gPT09ICdjb2xncm91cCcgfHwgIXdpdGhpblNwYW4pIHtcbiAgICAgICAgY29uc3QgY2VsbCA9IGdldENlbGwocm93LCBleGFtcGxlKTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRuZXcoc3Vic3RpdHV0aW9uKGNlbGwuZWxlbWVudCwgY29tcGFyYXRvciksIHRydWUsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBnZXRDZWxsKHJvdywgY29sdW1uKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGluc2VydENvbHVtbkF0ID0gKGdyaWQsIGluZGV4LCBleGFtcGxlLCBjb21wYXJhdG9yLCBzdWJzdGl0dXRpb24pID0+IG1hcCQxKGdyaWQsIHJvdyA9PiB7XG4gICAgICBjb25zdCB3aXRoaW5TcGFuID0gaW5kZXggPiAwICYmIGluZGV4IDwgY2VsbExlbmd0aChyb3cpICYmIGNvbXBhcmF0b3IoZ2V0Q2VsbEVsZW1lbnQocm93LCBpbmRleCAtIDEpLCBnZXRDZWxsRWxlbWVudChyb3csIGluZGV4KSk7XG4gICAgICBjb25zdCBzdWIgPSBnZXRFbGVtZW50Rm9yKHJvdywgaW5kZXgsIHJvdy5zZWN0aW9uLCB3aXRoaW5TcGFuLCBleGFtcGxlLCBjb21wYXJhdG9yLCBzdWJzdGl0dXRpb24pO1xuICAgICAgcmV0dXJuIGFkZENlbGwocm93LCBpbmRleCwgc3ViKTtcbiAgICB9KTtcbiAgICBjb25zdCBkZWxldGVDb2x1bW5zQXQgPSAoZ3JpZCwgY29sdW1ucykgPT4gYmluZCQyKGdyaWQsIHJvdyA9PiB7XG4gICAgICBjb25zdCBleGlzdGluZ0NlbGxzID0gcm93LmNlbGxzO1xuICAgICAgY29uc3QgY2VsbHMgPSBmb2xkcihjb2x1bW5zLCAoYWNjLCBjb2x1bW4pID0+IGNvbHVtbiA+PSAwICYmIGNvbHVtbiA8IGFjYy5sZW5ndGggPyBhY2Muc2xpY2UoMCwgY29sdW1uKS5jb25jYXQoYWNjLnNsaWNlKGNvbHVtbiArIDEpKSA6IGFjYywgZXhpc3RpbmdDZWxscyk7XG4gICAgICByZXR1cm4gY2VsbHMubGVuZ3RoID4gMCA/IFtyb3djZWxscyhyb3cuZWxlbWVudCwgY2VsbHMsIHJvdy5zZWN0aW9uLCByb3cuaXNOZXcpXSA6IFtdO1xuICAgIH0pO1xuICAgIGNvbnN0IGRlbGV0ZVJvd3NBdCA9IChncmlkLCBzdGFydCwgZmluaXNoKSA9PiB7XG4gICAgICBjb25zdCB7cm93cywgY29sc30gPSBleHRyYWN0R3JpZERldGFpbHMoZ3JpZCk7XG4gICAgICByZXR1cm4gW1xuICAgICAgICAuLi5jb2xzLFxuICAgICAgICAuLi5yb3dzLnNsaWNlKDAsIHN0YXJ0KSxcbiAgICAgICAgLi4ucm93cy5zbGljZShmaW5pc2ggKyAxKVxuICAgICAgXTtcbiAgICB9O1xuXG4gICAgY29uc3Qgbm90SW5TdGFydFJvdyA9IChncmlkLCByb3dJbmRleCwgY29sSW5kZXgsIGNvbXBhcmF0b3IpID0+IGdldENlbGxFbGVtZW50KGdyaWRbcm93SW5kZXhdLCBjb2xJbmRleCkgIT09IHVuZGVmaW5lZCAmJiAocm93SW5kZXggPiAwICYmIGNvbXBhcmF0b3IoZ2V0Q2VsbEVsZW1lbnQoZ3JpZFtyb3dJbmRleCAtIDFdLCBjb2xJbmRleCksIGdldENlbGxFbGVtZW50KGdyaWRbcm93SW5kZXhdLCBjb2xJbmRleCkpKTtcbiAgICBjb25zdCBub3RJblN0YXJ0Q29sdW1uID0gKHJvdywgaW5kZXgsIGNvbXBhcmF0b3IpID0+IGluZGV4ID4gMCAmJiBjb21wYXJhdG9yKGdldENlbGxFbGVtZW50KHJvdywgaW5kZXggLSAxKSwgZ2V0Q2VsbEVsZW1lbnQocm93LCBpbmRleCkpO1xuICAgIGNvbnN0IGlzRHVwbGljYXRlZENlbGwgPSAoZ3JpZCwgcm93SW5kZXgsIGNvbEluZGV4LCBjb21wYXJhdG9yKSA9PiBub3RJblN0YXJ0Um93KGdyaWQsIHJvd0luZGV4LCBjb2xJbmRleCwgY29tcGFyYXRvcikgfHwgbm90SW5TdGFydENvbHVtbihncmlkW3Jvd0luZGV4XSwgY29sSW5kZXgsIGNvbXBhcmF0b3IpO1xuICAgIGNvbnN0IHJvd1JlcGxhY2VyUHJlZGljYXRlID0gKHRhcmdldFJvdywgY29sdW1uSGVhZGVycykgPT4ge1xuICAgICAgY29uc3QgZW50aXJlVGFibGVJc0hlYWRlciA9IGZvcmFsbChjb2x1bW5IZWFkZXJzLCBpZGVudGl0eSkgJiYgaXNIZWFkZXJDZWxscyh0YXJnZXRSb3cuY2VsbHMpO1xuICAgICAgcmV0dXJuIGVudGlyZVRhYmxlSXNIZWFkZXIgPyBhbHdheXMgOiAoY2VsbCwgX3Jvd0luZGV4LCBjb2xJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCB0eXBlID0gbmFtZShjZWxsLmVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gISh0eXBlID09PSAndGgnICYmIGNvbHVtbkhlYWRlcnNbY29sSW5kZXhdKTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjb2x1bW5SZXBsYWNlUHJlZGljYXRlID0gKHRhcmdldENvbHVtbiwgcm93SGVhZGVycykgPT4ge1xuICAgICAgY29uc3QgZW50aXJlVGFibGVJc0hlYWRlciA9IGZvcmFsbChyb3dIZWFkZXJzLCBpZGVudGl0eSkgJiYgaXNIZWFkZXJDZWxscyh0YXJnZXRDb2x1bW4pO1xuICAgICAgcmV0dXJuIGVudGlyZVRhYmxlSXNIZWFkZXIgPyBhbHdheXMgOiAoY2VsbCwgcm93SW5kZXgsIF9jb2xJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCB0eXBlID0gbmFtZShjZWxsLmVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gISh0eXBlID09PSAndGgnICYmIHJvd0hlYWRlcnNbcm93SW5kZXhdKTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBkZXRlcm1pbmVTY29wZSA9IChhcHBseVNjb3BlLCBjZWxsLCBuZXdTY29wZSwgaXNJbkhlYWRlcikgPT4ge1xuICAgICAgY29uc3QgaGFzU3BhbiA9IHNjb3BlID0+IHNjb3BlID09PSAncm93JyA/IGhhc1Jvd3NwYW4oY2VsbCkgOiBoYXNDb2xzcGFuKGNlbGwpO1xuICAgICAgY29uc3QgZ2V0U2NvcGUgPSBzY29wZSA9PiBoYXNTcGFuKHNjb3BlKSA/IGAkeyBzY29wZSB9Z3JvdXBgIDogc2NvcGU7XG4gICAgICBpZiAoYXBwbHlTY29wZSkge1xuICAgICAgICByZXR1cm4gaXNIZWFkZXJDZWxsKGNlbGwpID8gZ2V0U2NvcGUobmV3U2NvcGUpIDogbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoaXNJbkhlYWRlciAmJiBpc0hlYWRlckNlbGwoY2VsbCkpIHtcbiAgICAgICAgY29uc3Qgb3Bwb3NpdGVTY29wZSA9IG5ld1Njb3BlID09PSAncm93JyA/ICdjb2wnIDogJ3Jvdyc7XG4gICAgICAgIHJldHVybiBnZXRTY29wZShvcHBvc2l0ZVNjb3BlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgcm93U2NvcGVHZW5lcmF0b3IgPSAoYXBwbHlTY29wZSwgY29sdW1uSGVhZGVycykgPT4gKGNlbGwsIHJvd0luZGV4LCBjb2x1bW5JbmRleCkgPT4gT3B0aW9uYWwuc29tZShkZXRlcm1pbmVTY29wZShhcHBseVNjb3BlLCBjZWxsLmVsZW1lbnQsICdjb2wnLCBjb2x1bW5IZWFkZXJzW2NvbHVtbkluZGV4XSkpO1xuICAgIGNvbnN0IGNvbHVtblNjb3BlR2VuZXJhdG9yID0gKGFwcGx5U2NvcGUsIHJvd0hlYWRlcnMpID0+IChjZWxsLCByb3dJbmRleCkgPT4gT3B0aW9uYWwuc29tZShkZXRlcm1pbmVTY29wZShhcHBseVNjb3BlLCBjZWxsLmVsZW1lbnQsICdyb3cnLCByb3dIZWFkZXJzW3Jvd0luZGV4XSkpO1xuICAgIGNvbnN0IHJlcGxhY2UgPSAoY2VsbCwgY29tcGFyYXRvciwgc3Vic3RpdHV0ZSkgPT4gZWxlbWVudG5ldyhzdWJzdGl0dXRlKGNlbGwuZWxlbWVudCwgY29tcGFyYXRvciksIHRydWUsIGNlbGwuaXNMb2NrZWQpO1xuICAgIGNvbnN0IHJlcGxhY2VJbiA9IChncmlkLCB0YXJnZXRzLCBjb21wYXJhdG9yLCBzdWJzdGl0dXRlLCByZXBsYWNlciwgZ2VuU2NvcGUsIHNob3VsZFJlcGxhY2UpID0+IHtcbiAgICAgIGNvbnN0IGlzVGFyZ2V0ID0gY2VsbCA9PiB7XG4gICAgICAgIHJldHVybiBleGlzdHModGFyZ2V0cywgdGFyZ2V0ID0+IHtcbiAgICAgICAgICByZXR1cm4gY29tcGFyYXRvcihjZWxsLmVsZW1lbnQsIHRhcmdldC5lbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIG1hcCQxKGdyaWQsIChyb3csIHJvd0luZGV4KSA9PiB7XG4gICAgICAgIHJldHVybiBtYXBDZWxscyhyb3csIChjZWxsLCBjb2xJbmRleCkgPT4ge1xuICAgICAgICAgIGlmIChpc1RhcmdldChjZWxsKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3Q2VsbCA9IHNob3VsZFJlcGxhY2UoY2VsbCwgcm93SW5kZXgsIGNvbEluZGV4KSA/IHJlcGxhY2VyKGNlbGwsIGNvbXBhcmF0b3IsIHN1YnN0aXR1dGUpIDogY2VsbDtcbiAgICAgICAgICAgIGdlblNjb3BlKG5ld0NlbGwsIHJvd0luZGV4LCBjb2xJbmRleCkuZWFjaChzY29wZSA9PiB7XG4gICAgICAgICAgICAgIHNldE9wdGlvbnMobmV3Q2VsbC5lbGVtZW50LCB7IHNjb3BlOiBPcHRpb25hbC5mcm9tKHNjb3BlKSB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ld0NlbGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjZWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldENvbHVtbkNlbGxzID0gKHJvd3MsIGNvbHVtbkluZGV4LCBjb21wYXJhdG9yKSA9PiBiaW5kJDIocm93cywgKHJvdywgaSkgPT4ge1xuICAgICAgcmV0dXJuIGlzRHVwbGljYXRlZENlbGwocm93cywgaSwgY29sdW1uSW5kZXgsIGNvbXBhcmF0b3IpID8gW10gOiBbZ2V0Q2VsbChyb3csIGNvbHVtbkluZGV4KV07XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0Um93Q2VsbHMgPSAocm93cywgcm93SW5kZXgsIGNvbXBhcmF0b3IpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldFJvdyA9IHJvd3Nbcm93SW5kZXhdO1xuICAgICAgcmV0dXJuIGJpbmQkMih0YXJnZXRSb3cuY2VsbHMsIChpdGVtLCBpKSA9PiB7XG4gICAgICAgIHJldHVybiBpc0R1cGxpY2F0ZWRDZWxsKHJvd3MsIHJvd0luZGV4LCBpLCBjb21wYXJhdG9yKSA/IFtdIDogW2l0ZW1dO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZXBsYWNlQ29sdW1ucyA9IChncmlkLCBpbmRleGVzLCBhcHBseVNjb3BlLCBjb21wYXJhdG9yLCBzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHJvd3MgPSBleHRyYWN0R3JpZERldGFpbHMoZ3JpZCkucm93cztcbiAgICAgIGNvbnN0IHRhcmdldHMgPSBiaW5kJDIoaW5kZXhlcywgaW5kZXggPT4gZ2V0Q29sdW1uQ2VsbHMocm93cywgaW5kZXgsIGNvbXBhcmF0b3IpKTtcbiAgICAgIGNvbnN0IHJvd0hlYWRlcnMgPSBtYXAkMShyb3dzLCByb3cgPT4gaXNIZWFkZXJDZWxscyhyb3cuY2VsbHMpKTtcbiAgICAgIGNvbnN0IHNob3VsZFJlcGxhY2VDZWxsID0gY29sdW1uUmVwbGFjZVByZWRpY2F0ZSh0YXJnZXRzLCByb3dIZWFkZXJzKTtcbiAgICAgIGNvbnN0IHNjb3BlR2VuZXJhdG9yID0gY29sdW1uU2NvcGVHZW5lcmF0b3IoYXBwbHlTY29wZSwgcm93SGVhZGVycyk7XG4gICAgICByZXR1cm4gcmVwbGFjZUluKGdyaWQsIHRhcmdldHMsIGNvbXBhcmF0b3IsIHN1YnN0aXR1dGlvbiwgcmVwbGFjZSwgc2NvcGVHZW5lcmF0b3IsIHNob3VsZFJlcGxhY2VDZWxsKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlcGxhY2VSb3dzID0gKGdyaWQsIGluZGV4ZXMsIHNlY3Rpb24sIGFwcGx5U2NvcGUsIGNvbXBhcmF0b3IsIHN1YnN0aXR1dGlvbiwgdGFibGVTZWN0aW9uKSA9PiB7XG4gICAgICBjb25zdCB7Y29scywgcm93c30gPSBleHRyYWN0R3JpZERldGFpbHMoZ3JpZCk7XG4gICAgICBjb25zdCB0YXJnZXRSb3cgPSByb3dzW2luZGV4ZXNbMF1dO1xuICAgICAgY29uc3QgdGFyZ2V0cyA9IGJpbmQkMihpbmRleGVzLCBpbmRleCA9PiBnZXRSb3dDZWxscyhyb3dzLCBpbmRleCwgY29tcGFyYXRvcikpO1xuICAgICAgY29uc3QgY29sdW1uSGVhZGVycyA9IG1hcCQxKHRhcmdldFJvdy5jZWxscywgKF9jZWxsLCBpbmRleCkgPT4gaXNIZWFkZXJDZWxscyhnZXRDb2x1bW5DZWxscyhyb3dzLCBpbmRleCwgY29tcGFyYXRvcikpKTtcbiAgICAgIGNvbnN0IG5ld1Jvd3MgPSBbLi4ucm93c107XG4gICAgICBlYWNoJDIoaW5kZXhlcywgaW5kZXggPT4ge1xuICAgICAgICBuZXdSb3dzW2luZGV4XSA9IHRhYmxlU2VjdGlvbi50cmFuc2Zvcm1Sb3cocm93c1tpbmRleF0sIHNlY3Rpb24pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBuZXdHcmlkID0gW1xuICAgICAgICAuLi5jb2xzLFxuICAgICAgICAuLi5uZXdSb3dzXG4gICAgICBdO1xuICAgICAgY29uc3Qgc2hvdWxkUmVwbGFjZUNlbGwgPSByb3dSZXBsYWNlclByZWRpY2F0ZSh0YXJnZXRSb3csIGNvbHVtbkhlYWRlcnMpO1xuICAgICAgY29uc3Qgc2NvcGVHZW5lcmF0b3IgPSByb3dTY29wZUdlbmVyYXRvcihhcHBseVNjb3BlLCBjb2x1bW5IZWFkZXJzKTtcbiAgICAgIHJldHVybiByZXBsYWNlSW4obmV3R3JpZCwgdGFyZ2V0cywgY29tcGFyYXRvciwgc3Vic3RpdHV0aW9uLCB0YWJsZVNlY3Rpb24udHJhbnNmb3JtQ2VsbCwgc2NvcGVHZW5lcmF0b3IsIHNob3VsZFJlcGxhY2VDZWxsKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlcGxhY2VDZWxscyA9IChncmlkLCBkZXRhaWxzLCBjb21wYXJhdG9yLCBzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHJvd3MgPSBleHRyYWN0R3JpZERldGFpbHMoZ3JpZCkucm93cztcbiAgICAgIGNvbnN0IHRhcmdldENlbGxzID0gbWFwJDEoZGV0YWlscywgZGV0YWlsID0+IGdldENlbGwocm93c1tkZXRhaWwucm93XSwgZGV0YWlsLmNvbHVtbikpO1xuICAgICAgcmV0dXJuIHJlcGxhY2VJbihncmlkLCB0YXJnZXRDZWxscywgY29tcGFyYXRvciwgc3Vic3RpdHV0aW9uLCByZXBsYWNlLCBPcHRpb25hbC5ub25lLCBhbHdheXMpO1xuICAgIH07XG5cbiAgICBjb25zdCBnZW5lcmF0ZSA9IGNhc2VzID0+IHtcbiAgICAgIGlmICghaXNBcnJheShjYXNlcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYXNlcyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICB9XG4gICAgICBpZiAoY2FzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgY2FzZScpO1xuICAgICAgfVxuICAgICAgY29uc3QgY29uc3RydWN0b3JzID0gW107XG4gICAgICBjb25zdCBhZHQgPSB7fTtcbiAgICAgIGVhY2gkMihjYXNlcywgKGFjYXNlLCBjb3VudCkgPT4ge1xuICAgICAgICBjb25zdCBrZXlzJDEgPSBrZXlzKGFjYXNlKTtcbiAgICAgICAgaWYgKGtleXMkMS5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ29uZSBhbmQgb25seSBvbmUgbmFtZSBwZXIgY2FzZScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXMkMVswXTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBhY2FzZVtrZXldO1xuICAgICAgICBpZiAoYWR0W2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZHVwbGljYXRlIGtleSBkZXRlY3RlZDonICsga2V5KTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdjYXRhJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IGhhdmUgYSBjYXNlIG5hbWVkIGNhdGEgKHNvcnJ5KScpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2FzZSBhcmd1bWVudHMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdG9ycy5wdXNoKGtleSk7XG4gICAgICAgIGFkdFtrZXldID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICBjb25zdCBhcmdMZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgICAgICAgICBpZiAoYXJnTGVuZ3RoICE9PSB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBjYXNlICcgKyBrZXkgKyAnLiBFeHBlY3RlZCAnICsgdmFsdWUubGVuZ3RoICsgJyAoJyArIHZhbHVlICsgJyksIGdvdCAnICsgYXJnTGVuZ3RoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgbWF0Y2ggPSBicmFuY2hlcyA9PiB7XG4gICAgICAgICAgICBjb25zdCBicmFuY2hLZXlzID0ga2V5cyhicmFuY2hlcyk7XG4gICAgICAgICAgICBpZiAoY29uc3RydWN0b3JzLmxlbmd0aCAhPT0gYnJhbmNoS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIHRvIG1hdGNoLiBFeHBlY3RlZDogJyArIGNvbnN0cnVjdG9ycy5qb2luKCcsJykgKyAnXFxuQWN0dWFsOiAnICsgYnJhbmNoS2V5cy5qb2luKCcsJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWxsUmVxZCA9IGZvcmFsbChjb25zdHJ1Y3RvcnMsIHJlcUtleSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBjb250YWlucyQyKGJyYW5jaEtleXMsIHJlcUtleSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghYWxsUmVxZCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhbGwgYnJhbmNoZXMgd2VyZSBzcGVjaWZpZWQgd2hlbiB1c2luZyBtYXRjaC4gU3BlY2lmaWVkOiAnICsgYnJhbmNoS2V5cy5qb2luKCcsICcpICsgJ1xcblJlcXVpcmVkOiAnICsgY29uc3RydWN0b3JzLmpvaW4oJywgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJyYW5jaGVzW2tleV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZm9sZDogKC4uLmZvbGRBcmdzKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChmb2xkQXJncy5sZW5ndGggIT09IGNhc2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBmb2xkLiBFeHBlY3RlZCAnICsgY2FzZXMubGVuZ3RoICsgJywgZ290ICcgKyBmb2xkQXJncy5sZW5ndGgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGZvbGRBcmdzW2NvdW50XTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXRjaCxcbiAgICAgICAgICAgIGxvZzogbGFiZWwgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsYWJlbCwge1xuICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9ycyxcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvcjoga2V5LFxuICAgICAgICAgICAgICAgIHBhcmFtczogYXJnc1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWR0O1xuICAgIH07XG4gICAgY29uc3QgQWR0ID0geyBnZW5lcmF0ZSB9O1xuXG4gICAgY29uc3QgYWR0JDYgPSBBZHQuZ2VuZXJhdGUoW1xuICAgICAgeyBub25lOiBbXSB9LFxuICAgICAgeyBvbmx5OiBbJ2luZGV4J10gfSxcbiAgICAgIHtcbiAgICAgICAgbGVmdDogW1xuICAgICAgICAgICdpbmRleCcsXG4gICAgICAgICAgJ25leHQnXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1pZGRsZTogW1xuICAgICAgICAgICdwcmV2JyxcbiAgICAgICAgICAnaW5kZXgnLFxuICAgICAgICAgICduZXh0J1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICByaWdodDogW1xuICAgICAgICAgICdwcmV2JyxcbiAgICAgICAgICAnaW5kZXgnXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdKTtcbiAgICBjb25zdCBDb2x1bW5Db250ZXh0ID0geyAuLi5hZHQkNiB9O1xuXG4gICAgY29uc3QgbmVpZ2hib3VycyA9IChpbnB1dCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIENvbHVtbkNvbnRleHQubm9uZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGlucHV0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gQ29sdW1uQ29udGV4dC5vbmx5KDApO1xuICAgICAgfVxuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBDb2x1bW5Db250ZXh0LmxlZnQoMCwgMSk7XG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggPT09IGlucHV0Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgcmV0dXJuIENvbHVtbkNvbnRleHQucmlnaHQoaW5kZXggLSAxLCBpbmRleCk7XG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggPiAwICYmIGluZGV4IDwgaW5wdXQubGVuZ3RoIC0gMSkge1xuICAgICAgICByZXR1cm4gQ29sdW1uQ29udGV4dC5taWRkbGUoaW5kZXggLSAxLCBpbmRleCwgaW5kZXggKyAxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBDb2x1bW5Db250ZXh0Lm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGRldGVybWluZSA9IChpbnB1dCwgY29sdW1uLCBzdGVwLCB0YWJsZVNpemUsIHJlc2l6ZSkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaW5wdXQuc2xpY2UoMCk7XG4gICAgICBjb25zdCBjb250ZXh0ID0gbmVpZ2hib3VycyhpbnB1dCwgY29sdW1uKTtcbiAgICAgIGNvbnN0IG9uTm9uZSA9IGNvbnN0YW50KG1hcCQxKHJlc3VsdCwgY29uc3RhbnQoMCkpKTtcbiAgICAgIGNvbnN0IG9uT25seSA9IGluZGV4ID0+IHRhYmxlU2l6ZS5zaW5nbGVDb2x1bW5XaWR0aChyZXN1bHRbaW5kZXhdLCBzdGVwKTtcbiAgICAgIGNvbnN0IG9uTGVmdCA9IChpbmRleCwgbmV4dCkgPT4gcmVzaXplLmNhbGNMZWZ0RWRnZURlbHRhcyhyZXN1bHQsIGluZGV4LCBuZXh0LCBzdGVwLCB0YWJsZVNpemUubWluQ2VsbFdpZHRoKCksIHRhYmxlU2l6ZS5pc1JlbGF0aXZlKTtcbiAgICAgIGNvbnN0IG9uTWlkZGxlID0gKHByZXYsIGluZGV4LCBuZXh0KSA9PiByZXNpemUuY2FsY01pZGRsZURlbHRhcyhyZXN1bHQsIHByZXYsIGluZGV4LCBuZXh0LCBzdGVwLCB0YWJsZVNpemUubWluQ2VsbFdpZHRoKCksIHRhYmxlU2l6ZS5pc1JlbGF0aXZlKTtcbiAgICAgIGNvbnN0IG9uUmlnaHQgPSAocHJldiwgaW5kZXgpID0+IHJlc2l6ZS5jYWxjUmlnaHRFZGdlRGVsdGFzKHJlc3VsdCwgcHJldiwgaW5kZXgsIHN0ZXAsIHRhYmxlU2l6ZS5taW5DZWxsV2lkdGgoKSwgdGFibGVTaXplLmlzUmVsYXRpdmUpO1xuICAgICAgcmV0dXJuIGNvbnRleHQuZm9sZChvbk5vbmUsIG9uT25seSwgb25MZWZ0LCBvbk1pZGRsZSwgb25SaWdodCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHRvdGFsID0gKHN0YXJ0LCBlbmQsIG1lYXN1cmVzKSA9PiB7XG4gICAgICBsZXQgciA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICByICs9IG1lYXN1cmVzW2ldICE9PSB1bmRlZmluZWQgPyBtZWFzdXJlc1tpXSA6IDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IHJlY2FsY3VsYXRlV2lkdGhGb3JDZWxscyA9ICh3YXJlaG91c2UsIHdpZHRocykgPT4ge1xuICAgICAgY29uc3QgYWxsID0gV2FyZWhvdXNlLmp1c3RDZWxscyh3YXJlaG91c2UpO1xuICAgICAgcmV0dXJuIG1hcCQxKGFsbCwgY2VsbCA9PiB7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gdG90YWwoY2VsbC5jb2x1bW4sIGNlbGwuY29sdW1uICsgY2VsbC5jb2xzcGFuLCB3aWR0aHMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVsZW1lbnQ6IGNlbGwuZWxlbWVudCxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBjb2xzcGFuOiBjZWxsLmNvbHNwYW5cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVjYWxjdWxhdGVXaWR0aEZvckNvbHVtbnMgPSAod2FyZWhvdXNlLCB3aWR0aHMpID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwcyA9IFdhcmVob3VzZS5qdXN0Q29sdW1ucyh3YXJlaG91c2UpO1xuICAgICAgcmV0dXJuIG1hcCQxKGdyb3VwcywgKGNvbHVtbiwgaW5kZXgpID0+ICh7XG4gICAgICAgIGVsZW1lbnQ6IGNvbHVtbi5lbGVtZW50LFxuICAgICAgICB3aWR0aDogd2lkdGhzW2luZGV4XSxcbiAgICAgICAgY29sc3BhbjogY29sdW1uLmNvbHNwYW5cbiAgICAgIH0pKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlY2FsY3VsYXRlSGVpZ2h0Rm9yQ2VsbHMgPSAod2FyZWhvdXNlLCBoZWlnaHRzKSA9PiB7XG4gICAgICBjb25zdCBhbGwgPSBXYXJlaG91c2UuanVzdENlbGxzKHdhcmVob3VzZSk7XG4gICAgICByZXR1cm4gbWFwJDEoYWxsLCBjZWxsID0+IHtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdG90YWwoY2VsbC5yb3csIGNlbGwucm93ICsgY2VsbC5yb3dzcGFuLCBoZWlnaHRzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbGVtZW50OiBjZWxsLmVsZW1lbnQsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgIHJvd3NwYW46IGNlbGwucm93c3BhblxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBtYXRjaFJvd0hlaWdodCA9ICh3YXJlaG91c2UsIGhlaWdodHMpID0+IHtcbiAgICAgIHJldHVybiBtYXAkMSh3YXJlaG91c2UuYWxsLCAocm93LCBpKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZWxlbWVudDogcm93LmVsZW1lbnQsXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHRzW2ldXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3VtVXAgPSBuZXdTaXplID0+IGZvbGRyKG5ld1NpemUsIChiLCBhKSA9PiBiICsgYSwgMCk7XG4gICAgY29uc3QgcmVjYWxjdWxhdGUgPSAod2FyZWhvdXNlLCB3aWR0aHMpID0+IHtcbiAgICAgIGlmIChXYXJlaG91c2UuaGFzQ29sdW1ucyh3YXJlaG91c2UpKSB7XG4gICAgICAgIHJldHVybiByZWNhbGN1bGF0ZVdpZHRoRm9yQ29sdW1ucyh3YXJlaG91c2UsIHdpZHRocyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVjYWxjdWxhdGVXaWR0aEZvckNlbGxzKHdhcmVob3VzZSwgd2lkdGhzKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlY2FsY3VsYXRlQW5kQXBwbHkgPSAod2FyZWhvdXNlLCB3aWR0aHMsIHRhYmxlU2l6ZSkgPT4ge1xuICAgICAgY29uc3QgbmV3U2l6ZXMgPSByZWNhbGN1bGF0ZSh3YXJlaG91c2UsIHdpZHRocyk7XG4gICAgICBlYWNoJDIobmV3U2l6ZXMsIGNlbGwgPT4ge1xuICAgICAgICB0YWJsZVNpemUuc2V0RWxlbWVudFdpZHRoKGNlbGwuZWxlbWVudCwgY2VsbC53aWR0aCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFkanVzdFdpZHRoID0gKHRhYmxlLCBkZWx0YSwgaW5kZXgsIHJlc2l6aW5nLCB0YWJsZVNpemUpID0+IHtcbiAgICAgIGNvbnN0IHdhcmVob3VzZSA9IFdhcmVob3VzZS5mcm9tVGFibGUodGFibGUpO1xuICAgICAgY29uc3Qgc3RlcCA9IHRhYmxlU2l6ZS5nZXRDZWxsRGVsdGEoZGVsdGEpO1xuICAgICAgY29uc3Qgd2lkdGhzID0gdGFibGVTaXplLmdldFdpZHRocyh3YXJlaG91c2UsIHRhYmxlU2l6ZSk7XG4gICAgICBjb25zdCBpc0xhc3RDb2x1bW4gPSBpbmRleCA9PT0gd2FyZWhvdXNlLmdyaWQuY29sdW1ucyAtIDE7XG4gICAgICBjb25zdCBjbGFtcGVkU3RlcCA9IHJlc2l6aW5nLmNsYW1wVGFibGVEZWx0YSh3aWR0aHMsIGluZGV4LCBzdGVwLCB0YWJsZVNpemUubWluQ2VsbFdpZHRoKCksIGlzTGFzdENvbHVtbik7XG4gICAgICBjb25zdCBkZWx0YXMgPSBkZXRlcm1pbmUod2lkdGhzLCBpbmRleCwgY2xhbXBlZFN0ZXAsIHRhYmxlU2l6ZSwgcmVzaXppbmcpO1xuICAgICAgY29uc3QgbmV3V2lkdGhzID0gbWFwJDEoZGVsdGFzLCAoZHgsIGkpID0+IGR4ICsgd2lkdGhzW2ldKTtcbiAgICAgIHJlY2FsY3VsYXRlQW5kQXBwbHkod2FyZWhvdXNlLCBuZXdXaWR0aHMsIHRhYmxlU2l6ZSk7XG4gICAgICByZXNpemluZy5yZXNpemVUYWJsZSh0YWJsZVNpemUuYWRqdXN0VGFibGVXaWR0aCwgY2xhbXBlZFN0ZXAsIGlzTGFzdENvbHVtbik7XG4gICAgfTtcbiAgICBjb25zdCBhZGp1c3RIZWlnaHQgPSAodGFibGUsIGRlbHRhLCBpbmRleCwgZGlyZWN0aW9uKSA9PiB7XG4gICAgICBjb25zdCB3YXJlaG91c2UgPSBXYXJlaG91c2UuZnJvbVRhYmxlKHRhYmxlKTtcbiAgICAgIGNvbnN0IGhlaWdodHMgPSBnZXRQaXhlbEhlaWdodHMod2FyZWhvdXNlLCB0YWJsZSwgZGlyZWN0aW9uKTtcbiAgICAgIGNvbnN0IG5ld0hlaWdodHMgPSBtYXAkMShoZWlnaHRzLCAoZHksIGkpID0+IGluZGV4ID09PSBpID8gTWF0aC5tYXgoZGVsdGEgKyBkeSwgbWluSGVpZ2h0KCkpIDogZHkpO1xuICAgICAgY29uc3QgbmV3Q2VsbFNpemVzID0gcmVjYWxjdWxhdGVIZWlnaHRGb3JDZWxscyh3YXJlaG91c2UsIG5ld0hlaWdodHMpO1xuICAgICAgY29uc3QgbmV3Um93U2l6ZXMgPSBtYXRjaFJvd0hlaWdodCh3YXJlaG91c2UsIG5ld0hlaWdodHMpO1xuICAgICAgZWFjaCQyKG5ld1Jvd1NpemVzLCByb3cgPT4ge1xuICAgICAgICBzZXRIZWlnaHQocm93LmVsZW1lbnQsIHJvdy5oZWlnaHQpO1xuICAgICAgfSk7XG4gICAgICBlYWNoJDIobmV3Q2VsbFNpemVzLCBjZWxsID0+IHtcbiAgICAgICAgc2V0SGVpZ2h0KGNlbGwuZWxlbWVudCwgY2VsbC5oZWlnaHQpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCB0b3RhbCA9IHN1bVVwKG5ld0hlaWdodHMpO1xuICAgICAgc2V0SGVpZ2h0KHRhYmxlLCB0b3RhbCk7XG4gICAgfTtcbiAgICBjb25zdCBhZGp1c3RBbmRSZWRpc3RyaWJ1dGVXaWR0aHMkMSA9IChfdGFibGUsIGxpc3QsIGRldGFpbHMsIHRhYmxlU2l6ZSwgcmVzaXplQmVoYXZpb3VyKSA9PiB7XG4gICAgICBjb25zdCB3YXJlaG91c2UgPSBXYXJlaG91c2UuZ2VuZXJhdGUobGlzdCk7XG4gICAgICBjb25zdCBzaXplcyA9IHRhYmxlU2l6ZS5nZXRXaWR0aHMod2FyZWhvdXNlLCB0YWJsZVNpemUpO1xuICAgICAgY29uc3QgdGFibGVQaXhlbFdpZHRoID0gdGFibGVTaXplLnBpeGVsV2lkdGgoKTtcbiAgICAgIGNvbnN0IHtuZXdTaXplcywgZGVsdGF9ID0gcmVzaXplQmVoYXZpb3VyLmNhbGNSZWRlc3RyaWJ1dGVkV2lkdGhzKHNpemVzLCB0YWJsZVBpeGVsV2lkdGgsIGRldGFpbHMucGl4ZWxEZWx0YSwgdGFibGVTaXplLmlzUmVsYXRpdmUpO1xuICAgICAgcmVjYWxjdWxhdGVBbmRBcHBseSh3YXJlaG91c2UsIG5ld1NpemVzLCB0YWJsZVNpemUpO1xuICAgICAgdGFibGVTaXplLmFkanVzdFRhYmxlV2lkdGgoZGVsdGEpO1xuICAgIH07XG4gICAgY29uc3QgYWRqdXN0V2lkdGhUbyA9IChfdGFibGUsIGxpc3QsIF9pbmZvLCB0YWJsZVNpemUpID0+IHtcbiAgICAgIGNvbnN0IHdhcmVob3VzZSA9IFdhcmVob3VzZS5nZW5lcmF0ZShsaXN0KTtcbiAgICAgIGNvbnN0IHdpZHRocyA9IHRhYmxlU2l6ZS5nZXRXaWR0aHMod2FyZWhvdXNlLCB0YWJsZVNpemUpO1xuICAgICAgcmVjYWxjdWxhdGVBbmRBcHBseSh3YXJlaG91c2UsIHdpZHRocywgdGFibGVTaXplKTtcbiAgICB9O1xuXG4gICAgY29uc3QgdW5pcXVlQ29sdW1ucyA9IGRldGFpbHMgPT4ge1xuICAgICAgY29uc3QgdW5pcXVlQ2hlY2sgPSAocmVzdCwgZGV0YWlsKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbkV4aXN0cyA9IGV4aXN0cyhyZXN0LCBjdXJyZW50RGV0YWlsID0+IGN1cnJlbnREZXRhaWwuY29sdW1uID09PSBkZXRhaWwuY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbkV4aXN0cyA/IHJlc3QgOiByZXN0LmNvbmNhdChbZGV0YWlsXSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGZvbGRsKGRldGFpbHMsIHVuaXF1ZUNoZWNrLCBbXSkuc29ydCgoZGV0YWlsQSwgZGV0YWlsQikgPT4gZGV0YWlsQS5jb2x1bW4gLSBkZXRhaWxCLmNvbHVtbik7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzQ29sID0gaXNUYWcoJ2NvbCcpO1xuICAgIGNvbnN0IGlzQ29sZ3JvdXAgPSBpc1RhZygnY29sZ3JvdXAnKTtcbiAgICBjb25zdCBpc1JvdyQxID0gZWxlbWVudCA9PiBuYW1lKGVsZW1lbnQpID09PSAndHInIHx8IGlzQ29sZ3JvdXAoZWxlbWVudCk7XG4gICAgY29uc3QgZWxlbWVudFRvRGF0YSA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgY29sc3BhbiA9IGdldEF0dHJWYWx1ZShlbGVtZW50LCAnY29sc3BhbicsIDEpO1xuICAgICAgY29uc3Qgcm93c3BhbiA9IGdldEF0dHJWYWx1ZShlbGVtZW50LCAncm93c3BhbicsIDEpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgY29sc3BhbixcbiAgICAgICAgcm93c3BhblxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG1vZGlmaWNhdGlvbiA9IChnZW5lcmF0b3JzLCB0b0RhdGEgPSBlbGVtZW50VG9EYXRhKSA9PiB7XG4gICAgICBjb25zdCBudUNlbGwgPSBkYXRhID0+IGlzQ29sKGRhdGEuZWxlbWVudCkgPyBnZW5lcmF0b3JzLmNvbChkYXRhKSA6IGdlbmVyYXRvcnMuY2VsbChkYXRhKTtcbiAgICAgIGNvbnN0IG51Um93ID0gZGF0YSA9PiBpc0NvbGdyb3VwKGRhdGEuZWxlbWVudCkgPyBnZW5lcmF0b3JzLmNvbGdyb3VwKGRhdGEpIDogZ2VuZXJhdG9ycy5yb3coZGF0YSk7XG4gICAgICBjb25zdCBhZGQgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgaWYgKGlzUm93JDEoZWxlbWVudCkpIHtcbiAgICAgICAgICByZXR1cm4gbnVSb3coeyBlbGVtZW50IH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNlbGwgPSBlbGVtZW50O1xuICAgICAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gbnVDZWxsKHRvRGF0YShjZWxsKSk7XG4gICAgICAgICAgcmVjZW50ID0gT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgICBpdGVtOiBjZWxsLFxuICAgICAgICAgICAgcmVwbGFjZW1lbnRcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBsZXQgcmVjZW50ID0gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgY29uc3QgZ2V0T3JJbml0ID0gKGVsZW1lbnQsIGNvbXBhcmF0b3IpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlY2VudC5mb2xkKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gYWRkKGVsZW1lbnQpO1xuICAgICAgICB9LCBwID0+IHtcbiAgICAgICAgICByZXR1cm4gY29tcGFyYXRvcihlbGVtZW50LCBwLml0ZW0pID8gcC5yZXBsYWNlbWVudCA6IGFkZChlbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgZ2V0T3JJbml0IH07XG4gICAgfTtcbiAgICBjb25zdCB0cmFuc2Zvcm0kMSA9IHRhZyA9PiB7XG4gICAgICByZXR1cm4gZ2VuZXJhdG9ycyA9PiB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBbXTtcbiAgICAgICAgY29uc3QgZmluZCA9IChlbGVtZW50LCBjb21wYXJhdG9yKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZpbmQkMShsaXN0LCB4ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb21wYXJhdG9yKHguaXRlbSwgZWxlbWVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG1ha2VOZXcgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgICBjb25zdCBhdHRycyA9IHRhZyA9PT0gJ3RkJyA/IHsgc2NvcGU6IG51bGwgfSA6IHt9O1xuICAgICAgICAgIGNvbnN0IGNlbGwgPSBnZW5lcmF0b3JzLnJlcGxhY2UoZWxlbWVudCwgdGFnLCBhdHRycyk7XG4gICAgICAgICAgbGlzdC5wdXNoKHtcbiAgICAgICAgICAgIGl0ZW06IGVsZW1lbnQsXG4gICAgICAgICAgICBzdWI6IGNlbGxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gY2VsbDtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVwbGFjZU9ySW5pdCA9IChlbGVtZW50LCBjb21wYXJhdG9yKSA9PiB7XG4gICAgICAgICAgaWYgKGlzUm93JDEoZWxlbWVudCkgfHwgaXNDb2woZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gZWxlbWVudDtcbiAgICAgICAgICAgIHJldHVybiBmaW5kKGNlbGwsIGNvbXBhcmF0b3IpLmZvbGQoKCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gbWFrZU5ldyhjZWxsKTtcbiAgICAgICAgICAgIH0sIHAgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gY29tcGFyYXRvcihlbGVtZW50LCBwLml0ZW0pID8gcC5zdWIgOiBtYWtlTmV3KGNlbGwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4geyByZXBsYWNlT3JJbml0IH07XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZ2V0U2NvcGVBdHRyaWJ1dGUgPSBjZWxsID0+IGdldE9wdChjZWxsLCAnc2NvcGUnKS5tYXAoYXR0cmlidXRlID0+IGF0dHJpYnV0ZS5zdWJzdHIoMCwgMykpO1xuICAgIGNvbnN0IG1lcmdpbmcgPSBnZW5lcmF0b3JzID0+IHtcbiAgICAgIGNvbnN0IHVubWVyZ2UgPSBjZWxsID0+IHtcbiAgICAgICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZUF0dHJpYnV0ZShjZWxsKTtcbiAgICAgICAgc2NvcGUuZWFjaChhdHRyaWJ1dGUgPT4gc2V0JDIoY2VsbCwgJ3Njb3BlJywgYXR0cmlidXRlKSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmF3ID0gZ2VuZXJhdG9ycy5jZWxsKHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IGNlbGwsXG4gICAgICAgICAgICBjb2xzcGFuOiAxLFxuICAgICAgICAgICAgcm93c3BhbjogMVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlbW92ZSQ1KHJhdywgJ3dpZHRoJyk7XG4gICAgICAgICAgcmVtb3ZlJDUoY2VsbCwgJ3dpZHRoJyk7XG4gICAgICAgICAgc2NvcGUuZWFjaChhdHRyaWJ1dGUgPT4gc2V0JDIocmF3LCAnc2NvcGUnLCBhdHRyaWJ1dGUpKTtcbiAgICAgICAgICByZXR1cm4gcmF3O1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG1lcmdlID0gY2VsbHMgPT4ge1xuICAgICAgICBjb25zdCBnZXRTY29wZVByb3BlcnR5ID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0cmluZ0F0dHJpYnV0ZXMgPSBjYXQobWFwJDEoY2VsbHMsIGdldFNjb3BlQXR0cmlidXRlKSk7XG4gICAgICAgICAgaWYgKHN0cmluZ0F0dHJpYnV0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlU2NvcGUgPSBzdHJpbmdBdHRyaWJ1dGVzWzBdO1xuICAgICAgICAgICAgY29uc3Qgc2NvcGVzID0gW1xuICAgICAgICAgICAgICAncm93JyxcbiAgICAgICAgICAgICAgJ2NvbCdcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBjb25zdCBpc01peGVkID0gZXhpc3RzKHN0cmluZ0F0dHJpYnV0ZXMsIGF0dHJpYnV0ZSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGUgIT09IGJhc2VTY29wZSAmJiBjb250YWlucyQyKHNjb3BlcywgYXR0cmlidXRlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGlzTWl4ZWQgPyBPcHRpb25hbC5ub25lKCkgOiBPcHRpb25hbC5mcm9tKGJhc2VTY29wZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZW1vdmUkNShjZWxsc1swXSwgJ3dpZHRoJyk7XG4gICAgICAgIGdldFNjb3BlUHJvcGVydHkoKS5mb2xkKCgpID0+IHJlbW92ZSQ3KGNlbGxzWzBdLCAnc2NvcGUnKSwgYXR0cmlidXRlID0+IHNldCQyKGNlbGxzWzBdLCAnc2NvcGUnLCBhdHRyaWJ1dGUgKyAnZ3JvdXAnKSk7XG4gICAgICAgIHJldHVybiBjb25zdGFudChjZWxsc1swXSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdW5tZXJnZSxcbiAgICAgICAgbWVyZ2VcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBHZW5lcmF0b3JzID0ge1xuICAgICAgbW9kaWZpY2F0aW9uLFxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0kMSxcbiAgICAgIG1lcmdpbmdcbiAgICB9O1xuXG4gICAgY29uc3QgYmxvY2tMaXN0ID0gW1xuICAgICAgJ2JvZHknLFxuICAgICAgJ3AnLFxuICAgICAgJ2RpdicsXG4gICAgICAnYXJ0aWNsZScsXG4gICAgICAnYXNpZGUnLFxuICAgICAgJ2ZpZ2NhcHRpb24nLFxuICAgICAgJ2ZpZ3VyZScsXG4gICAgICAnZm9vdGVyJyxcbiAgICAgICdoZWFkZXInLFxuICAgICAgJ25hdicsXG4gICAgICAnc2VjdGlvbicsXG4gICAgICAnb2wnLFxuICAgICAgJ3VsJyxcbiAgICAgICd0YWJsZScsXG4gICAgICAndGhlYWQnLFxuICAgICAgJ3Rmb290JyxcbiAgICAgICd0Ym9keScsXG4gICAgICAnY2FwdGlvbicsXG4gICAgICAndHInLFxuICAgICAgJ3RkJyxcbiAgICAgICd0aCcsXG4gICAgICAnaDEnLFxuICAgICAgJ2gyJyxcbiAgICAgICdoMycsXG4gICAgICAnaDQnLFxuICAgICAgJ2g1JyxcbiAgICAgICdoNicsXG4gICAgICAnYmxvY2txdW90ZScsXG4gICAgICAncHJlJyxcbiAgICAgICdhZGRyZXNzJ1xuICAgIF07XG4gICAgY29uc3QgaXNMaXN0JDEgPSAodW5pdmVyc2UsIGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHRhZ05hbWUgPSB1bml2ZXJzZS5wcm9wZXJ0eSgpLm5hbWUoaXRlbSk7XG4gICAgICByZXR1cm4gY29udGFpbnMkMihbXG4gICAgICAgICdvbCcsXG4gICAgICAgICd1bCdcbiAgICAgIF0sIHRhZ05hbWUpO1xuICAgIH07XG4gICAgY29uc3QgaXNCbG9jayQxID0gKHVuaXZlcnNlLCBpdGVtKSA9PiB7XG4gICAgICBjb25zdCB0YWdOYW1lID0gdW5pdmVyc2UucHJvcGVydHkoKS5uYW1lKGl0ZW0pO1xuICAgICAgcmV0dXJuIGNvbnRhaW5zJDIoYmxvY2tMaXN0LCB0YWdOYW1lKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzRW1wdHlUYWckMSA9ICh1bml2ZXJzZSwgaXRlbSkgPT4ge1xuICAgICAgcmV0dXJuIGNvbnRhaW5zJDIoW1xuICAgICAgICAnYnInLFxuICAgICAgICAnaW1nJyxcbiAgICAgICAgJ2hyJyxcbiAgICAgICAgJ2lucHV0J1xuICAgICAgXSwgdW5pdmVyc2UucHJvcGVydHkoKS5uYW1lKGl0ZW0pKTtcbiAgICB9O1xuXG4gICAgY29uc3QgdW5pdmVyc2UkMSA9IERvbVVuaXZlcnNlKCk7XG4gICAgY29uc3QgaXNCbG9jayA9IGVsZW1lbnQgPT4ge1xuICAgICAgcmV0dXJuIGlzQmxvY2skMSh1bml2ZXJzZSQxLCBlbGVtZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzTGlzdCA9IGVsZW1lbnQgPT4ge1xuICAgICAgcmV0dXJuIGlzTGlzdCQxKHVuaXZlcnNlJDEsIGVsZW1lbnQpO1xuICAgIH07XG4gICAgY29uc3QgaXNFbXB0eVRhZyA9IGVsZW1lbnQgPT4ge1xuICAgICAgcmV0dXJuIGlzRW1wdHlUYWckMSh1bml2ZXJzZSQxLCBlbGVtZW50KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbWVyZ2UgPSBjZWxscyA9PiB7XG4gICAgICBjb25zdCBpc0JyID0gaXNUYWcoJ2JyJyk7XG4gICAgICBjb25zdCBhZHZhbmNlZEJyID0gY2hpbGRyZW4gPT4ge1xuICAgICAgICByZXR1cm4gZm9yYWxsKGNoaWxkcmVuLCBjID0+IHtcbiAgICAgICAgICByZXR1cm4gaXNCcihjKSB8fCBpc1RleHQoYykgJiYgZ2V0JDYoYykudHJpbSgpLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNMaXN0SXRlbSA9IGVsID0+IHtcbiAgICAgICAgcmV0dXJuIG5hbWUoZWwpID09PSAnbGknIHx8IGFuY2VzdG9yJDIoZWwsIGlzTGlzdCkuaXNTb21lKCk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2libGluZ0lzQmxvY2sgPSBlbCA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0U2libGluZyhlbCkubWFwKHJpZ2h0U2libGluZyA9PiB7XG4gICAgICAgICAgaWYgKGlzQmxvY2socmlnaHRTaWJsaW5nKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0VtcHR5VGFnKHJpZ2h0U2libGluZykpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lKHJpZ2h0U2libGluZykgPT09ICdpbWcnID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pLmdldE9yKGZhbHNlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBtYXJrQ2VsbCA9IGNlbGwgPT4ge1xuICAgICAgICByZXR1cm4gbGFzdCQxKGNlbGwpLmJpbmQocmlnaHRFZGdlID0+IHtcbiAgICAgICAgICBjb25zdCByaWdodFNpYmxpbmdJc0Jsb2NrID0gc2libGluZ0lzQmxvY2socmlnaHRFZGdlKTtcbiAgICAgICAgICByZXR1cm4gcGFyZW50KHJpZ2h0RWRnZSkubWFwKHBhcmVudCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmlnaHRTaWJsaW5nSXNCbG9jayA9PT0gdHJ1ZSB8fCBpc0xpc3RJdGVtKHBhcmVudCkgfHwgaXNCcihyaWdodEVkZ2UpIHx8IGlzQmxvY2socGFyZW50KSAmJiAhZXEkMShjZWxsLCBwYXJlbnQpID8gW10gOiBbU3VnYXJFbGVtZW50LmZyb21UYWcoJ2JyJyldO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KS5nZXRPcihbXSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgbWFya0NvbnRlbnQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBiaW5kJDIoY2VsbHMsIGNlbGwgPT4ge1xuICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gY2hpbGRyZW4kMihjZWxsKTtcbiAgICAgICAgICByZXR1cm4gYWR2YW5jZWRCcihjaGlsZHJlbikgPyBbXSA6IGNoaWxkcmVuLmNvbmNhdChtYXJrQ2VsbChjZWxsKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29udGVudC5sZW5ndGggPT09IDAgPyBbU3VnYXJFbGVtZW50LmZyb21UYWcoJ2JyJyldIDogY29udGVudDtcbiAgICAgIH07XG4gICAgICBjb25zdCBjb250ZW50cyA9IG1hcmtDb250ZW50KCk7XG4gICAgICBlbXB0eShjZWxsc1swXSk7XG4gICAgICBhcHBlbmQoY2VsbHNbMF0sIGNvbnRlbnRzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNFZGl0YWJsZSA9IGVsZW0gPT4gaXNFZGl0YWJsZSQxKGVsZW0sIHRydWUpO1xuICAgIGNvbnN0IHBydW5lID0gdGFibGUgPT4ge1xuICAgICAgY29uc3QgY2VsbHMgPSBjZWxscyQxKHRhYmxlKTtcbiAgICAgIGlmIChjZWxscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmVtb3ZlJDYodGFibGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb3V0Y29tZSA9IChncmlkLCBjdXJzb3IpID0+ICh7XG4gICAgICBncmlkLFxuICAgICAgY3Vyc29yXG4gICAgfSk7XG4gICAgY29uc3QgZmluZEVkaXRhYmxlQ3Vyc29yUG9zaXRpb24gPSByb3dzID0+IGZpbmRNYXAocm93cywgcm93ID0+IGZpbmRNYXAocm93LmNlbGxzLCBjZWxsID0+IHtcbiAgICAgIGNvbnN0IGVsZW0gPSBjZWxsLmVsZW1lbnQ7XG4gICAgICByZXR1cm4gc29tZUlmKGlzRWRpdGFibGUoZWxlbSksIGVsZW0pO1xuICAgIH0pKTtcbiAgICBjb25zdCBlbGVtZW50RnJvbUdyaWQgPSAoZ3JpZCwgcm93LCBjb2x1bW4pID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICBjb25zdCByb3dzID0gZXh0cmFjdEdyaWREZXRhaWxzKGdyaWQpLnJvd3M7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbSgoX2IgPSAoX2EgPSByb3dzW3Jvd10pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jZWxsc1tjb2x1bW5dKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZWxlbWVudCkuZmlsdGVyKGlzRWRpdGFibGUpLm9yVGh1bmsoKCkgPT4gZmluZEVkaXRhYmxlQ3Vyc29yUG9zaXRpb24ocm93cykpO1xuICAgIH07XG4gICAgY29uc3QgYnVuZGxlID0gKGdyaWQsIHJvdywgY29sdW1uKSA9PiB7XG4gICAgICBjb25zdCBjdXJzb3JFbGVtZW50ID0gZWxlbWVudEZyb21HcmlkKGdyaWQsIHJvdywgY29sdW1uKTtcbiAgICAgIHJldHVybiBvdXRjb21lKGdyaWQsIGN1cnNvckVsZW1lbnQpO1xuICAgIH07XG4gICAgY29uc3QgdW5pcXVlUm93cyA9IGRldGFpbHMgPT4ge1xuICAgICAgY29uc3Qgcm93Q29tcGlsYXRpb24gPSAocmVzdCwgZGV0YWlsKSA9PiB7XG4gICAgICAgIGNvbnN0IHJvd0V4aXN0cyA9IGV4aXN0cyhyZXN0LCBjdXJyZW50RGV0YWlsID0+IGN1cnJlbnREZXRhaWwucm93ID09PSBkZXRhaWwucm93KTtcbiAgICAgICAgcmV0dXJuIHJvd0V4aXN0cyA/IHJlc3QgOiByZXN0LmNvbmNhdChbZGV0YWlsXSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGZvbGRsKGRldGFpbHMsIHJvd0NvbXBpbGF0aW9uLCBbXSkuc29ydCgoZGV0YWlsQSwgZGV0YWlsQikgPT4gZGV0YWlsQS5yb3cgLSBkZXRhaWxCLnJvdyk7XG4gICAgfTtcbiAgICBjb25zdCBvcEluc2VydFJvd3NCZWZvcmUgPSAoZ3JpZCwgZGV0YWlscywgY29tcGFyYXRvciwgZ2VuV3JhcHBlcnMpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldEluZGV4ID0gZGV0YWlsc1swXS5yb3c7XG4gICAgICBjb25zdCByb3dzID0gdW5pcXVlUm93cyhkZXRhaWxzKTtcbiAgICAgIGNvbnN0IG5ld0dyaWQgPSBmb2xkcihyb3dzLCAoYWNjLCByb3cpID0+IHtcbiAgICAgICAgY29uc3QgbmV3RyA9IGluc2VydFJvd0F0KGFjYy5ncmlkLCB0YXJnZXRJbmRleCwgcm93LnJvdyArIGFjYy5kZWx0YSwgY29tcGFyYXRvciwgZ2VuV3JhcHBlcnMuZ2V0T3JJbml0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBncmlkOiBuZXdHLFxuICAgICAgICAgIGRlbHRhOiBhY2MuZGVsdGEgKyAxXG4gICAgICAgIH07XG4gICAgICB9LCB7XG4gICAgICAgIGdyaWQsXG4gICAgICAgIGRlbHRhOiAwXG4gICAgICB9KS5ncmlkO1xuICAgICAgcmV0dXJuIGJ1bmRsZShuZXdHcmlkLCB0YXJnZXRJbmRleCwgZGV0YWlsc1swXS5jb2x1bW4pO1xuICAgIH07XG4gICAgY29uc3Qgb3BJbnNlcnRSb3dzQWZ0ZXIgPSAoZ3JpZCwgZGV0YWlscywgY29tcGFyYXRvciwgZ2VuV3JhcHBlcnMpID0+IHtcbiAgICAgIGNvbnN0IHJvd3MgPSB1bmlxdWVSb3dzKGRldGFpbHMpO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gcm93c1tyb3dzLmxlbmd0aCAtIDFdO1xuICAgICAgY29uc3QgdGFyZ2V0SW5kZXggPSB0YXJnZXQucm93ICsgdGFyZ2V0LnJvd3NwYW47XG4gICAgICBjb25zdCBuZXdHcmlkID0gZm9sZHIocm93cywgKG5ld0csIHJvdykgPT4ge1xuICAgICAgICByZXR1cm4gaW5zZXJ0Um93QXQobmV3RywgdGFyZ2V0SW5kZXgsIHJvdy5yb3csIGNvbXBhcmF0b3IsIGdlbldyYXBwZXJzLmdldE9ySW5pdCk7XG4gICAgICB9LCBncmlkKTtcbiAgICAgIHJldHVybiBidW5kbGUobmV3R3JpZCwgdGFyZ2V0SW5kZXgsIGRldGFpbHNbMF0uY29sdW1uKTtcbiAgICB9O1xuICAgIGNvbnN0IG9wSW5zZXJ0Q29sdW1uc0JlZm9yZSA9IChncmlkLCBleHRyYWN0RGV0YWlsLCBjb21wYXJhdG9yLCBnZW5XcmFwcGVycykgPT4ge1xuICAgICAgY29uc3QgZGV0YWlscyA9IGV4dHJhY3REZXRhaWwuZGV0YWlscztcbiAgICAgIGNvbnN0IGNvbHVtbnMgPSB1bmlxdWVDb2x1bW5zKGRldGFpbHMpO1xuICAgICAgY29uc3QgdGFyZ2V0SW5kZXggPSBjb2x1bW5zWzBdLmNvbHVtbjtcbiAgICAgIGNvbnN0IG5ld0dyaWQgPSBmb2xkcihjb2x1bW5zLCAoYWNjLCBjb2wpID0+IHtcbiAgICAgICAgY29uc3QgbmV3RyA9IGluc2VydENvbHVtbkF0KGFjYy5ncmlkLCB0YXJnZXRJbmRleCwgY29sLmNvbHVtbiArIGFjYy5kZWx0YSwgY29tcGFyYXRvciwgZ2VuV3JhcHBlcnMuZ2V0T3JJbml0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBncmlkOiBuZXdHLFxuICAgICAgICAgIGRlbHRhOiBhY2MuZGVsdGEgKyAxXG4gICAgICAgIH07XG4gICAgICB9LCB7XG4gICAgICAgIGdyaWQsXG4gICAgICAgIGRlbHRhOiAwXG4gICAgICB9KS5ncmlkO1xuICAgICAgcmV0dXJuIGJ1bmRsZShuZXdHcmlkLCBkZXRhaWxzWzBdLnJvdywgdGFyZ2V0SW5kZXgpO1xuICAgIH07XG4gICAgY29uc3Qgb3BJbnNlcnRDb2x1bW5zQWZ0ZXIgPSAoZ3JpZCwgZXh0cmFjdERldGFpbCwgY29tcGFyYXRvciwgZ2VuV3JhcHBlcnMpID0+IHtcbiAgICAgIGNvbnN0IGRldGFpbHMgPSBleHRyYWN0RGV0YWlsLmRldGFpbHM7XG4gICAgICBjb25zdCB0YXJnZXQgPSBkZXRhaWxzW2RldGFpbHMubGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCB0YXJnZXRJbmRleCA9IHRhcmdldC5jb2x1bW4gKyB0YXJnZXQuY29sc3BhbjtcbiAgICAgIGNvbnN0IGNvbHVtbnMgPSB1bmlxdWVDb2x1bW5zKGRldGFpbHMpO1xuICAgICAgY29uc3QgbmV3R3JpZCA9IGZvbGRyKGNvbHVtbnMsIChuZXdHLCBjb2wpID0+IHtcbiAgICAgICAgcmV0dXJuIGluc2VydENvbHVtbkF0KG5ld0csIHRhcmdldEluZGV4LCBjb2wuY29sdW1uLCBjb21wYXJhdG9yLCBnZW5XcmFwcGVycy5nZXRPckluaXQpO1xuICAgICAgfSwgZ3JpZCk7XG4gICAgICByZXR1cm4gYnVuZGxlKG5ld0dyaWQsIGRldGFpbHNbMF0ucm93LCB0YXJnZXRJbmRleCk7XG4gICAgfTtcbiAgICBjb25zdCBvcE1ha2VDb2x1bW5zSGVhZGVyID0gKGluaXRpYWxHcmlkLCBkZXRhaWxzLCBjb21wYXJhdG9yLCBnZW5XcmFwcGVycykgPT4ge1xuICAgICAgY29uc3QgY29sdW1ucyA9IHVuaXF1ZUNvbHVtbnMoZGV0YWlscyk7XG4gICAgICBjb25zdCBjb2x1bW5JbmRleGVzID0gbWFwJDEoY29sdW1ucywgZGV0YWlsID0+IGRldGFpbC5jb2x1bW4pO1xuICAgICAgY29uc3QgbmV3R3JpZCA9IHJlcGxhY2VDb2x1bW5zKGluaXRpYWxHcmlkLCBjb2x1bW5JbmRleGVzLCB0cnVlLCBjb21wYXJhdG9yLCBnZW5XcmFwcGVycy5yZXBsYWNlT3JJbml0KTtcbiAgICAgIHJldHVybiBidW5kbGUobmV3R3JpZCwgZGV0YWlsc1swXS5yb3csIGRldGFpbHNbMF0uY29sdW1uKTtcbiAgICB9O1xuICAgIGNvbnN0IG9wTWFrZUNlbGxzSGVhZGVyID0gKGluaXRpYWxHcmlkLCBkZXRhaWxzLCBjb21wYXJhdG9yLCBnZW5XcmFwcGVycykgPT4ge1xuICAgICAgY29uc3QgbmV3R3JpZCA9IHJlcGxhY2VDZWxscyhpbml0aWFsR3JpZCwgZGV0YWlscywgY29tcGFyYXRvciwgZ2VuV3JhcHBlcnMucmVwbGFjZU9ySW5pdCk7XG4gICAgICByZXR1cm4gYnVuZGxlKG5ld0dyaWQsIGRldGFpbHNbMF0ucm93LCBkZXRhaWxzWzBdLmNvbHVtbik7XG4gICAgfTtcbiAgICBjb25zdCBvcFVubWFrZUNvbHVtbnNIZWFkZXIgPSAoaW5pdGlhbEdyaWQsIGRldGFpbHMsIGNvbXBhcmF0b3IsIGdlbldyYXBwZXJzKSA9PiB7XG4gICAgICBjb25zdCBjb2x1bW5zID0gdW5pcXVlQ29sdW1ucyhkZXRhaWxzKTtcbiAgICAgIGNvbnN0IGNvbHVtbkluZGV4ZXMgPSBtYXAkMShjb2x1bW5zLCBkZXRhaWwgPT4gZGV0YWlsLmNvbHVtbik7XG4gICAgICBjb25zdCBuZXdHcmlkID0gcmVwbGFjZUNvbHVtbnMoaW5pdGlhbEdyaWQsIGNvbHVtbkluZGV4ZXMsIGZhbHNlLCBjb21wYXJhdG9yLCBnZW5XcmFwcGVycy5yZXBsYWNlT3JJbml0KTtcbiAgICAgIHJldHVybiBidW5kbGUobmV3R3JpZCwgZGV0YWlsc1swXS5yb3csIGRldGFpbHNbMF0uY29sdW1uKTtcbiAgICB9O1xuICAgIGNvbnN0IG9wVW5tYWtlQ2VsbHNIZWFkZXIgPSAoaW5pdGlhbEdyaWQsIGRldGFpbHMsIGNvbXBhcmF0b3IsIGdlbldyYXBwZXJzKSA9PiB7XG4gICAgICBjb25zdCBuZXdHcmlkID0gcmVwbGFjZUNlbGxzKGluaXRpYWxHcmlkLCBkZXRhaWxzLCBjb21wYXJhdG9yLCBnZW5XcmFwcGVycy5yZXBsYWNlT3JJbml0KTtcbiAgICAgIHJldHVybiBidW5kbGUobmV3R3JpZCwgZGV0YWlsc1swXS5yb3csIGRldGFpbHNbMF0uY29sdW1uKTtcbiAgICB9O1xuICAgIGNvbnN0IG1ha2VSb3dzU2VjdGlvbiA9IChzZWN0aW9uLCBhcHBseVNjb3BlKSA9PiAoaW5pdGlhbEdyaWQsIGRldGFpbHMsIGNvbXBhcmF0b3IsIGdlbldyYXBwZXJzLCB0YWJsZVNlY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHJvd3MgPSB1bmlxdWVSb3dzKGRldGFpbHMpO1xuICAgICAgY29uc3Qgcm93SW5kZXhlcyA9IG1hcCQxKHJvd3MsIGRldGFpbCA9PiBkZXRhaWwucm93KTtcbiAgICAgIGNvbnN0IG5ld0dyaWQgPSByZXBsYWNlUm93cyhpbml0aWFsR3JpZCwgcm93SW5kZXhlcywgc2VjdGlvbiwgYXBwbHlTY29wZSwgY29tcGFyYXRvciwgZ2VuV3JhcHBlcnMucmVwbGFjZU9ySW5pdCwgdGFibGVTZWN0aW9uKTtcbiAgICAgIHJldHVybiBidW5kbGUobmV3R3JpZCwgZGV0YWlsc1swXS5yb3csIGRldGFpbHNbMF0uY29sdW1uKTtcbiAgICB9O1xuICAgIGNvbnN0IG9wTWFrZVJvd3NIZWFkZXIgPSBtYWtlUm93c1NlY3Rpb24oJ3RoZWFkJywgdHJ1ZSk7XG4gICAgY29uc3Qgb3BNYWtlUm93c0JvZHkgPSBtYWtlUm93c1NlY3Rpb24oJ3Rib2R5JywgZmFsc2UpO1xuICAgIGNvbnN0IG9wTWFrZVJvd3NGb290ZXIgPSBtYWtlUm93c1NlY3Rpb24oJ3Rmb290JywgZmFsc2UpO1xuICAgIGNvbnN0IG9wRXJhc2VDb2x1bW5zID0gKGdyaWQsIGV4dHJhY3REZXRhaWwsIF9jb21wYXJhdG9yLCBfZ2VuV3JhcHBlcnMpID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtbnMgPSB1bmlxdWVDb2x1bW5zKGV4dHJhY3REZXRhaWwuZGV0YWlscyk7XG4gICAgICBjb25zdCBuZXdHcmlkID0gZGVsZXRlQ29sdW1uc0F0KGdyaWQsIG1hcCQxKGNvbHVtbnMsIGNvbHVtbiA9PiBjb2x1bW4uY29sdW1uKSk7XG4gICAgICBjb25zdCBtYXhDb2xJbmRleCA9IG5ld0dyaWQubGVuZ3RoID4gMCA/IG5ld0dyaWRbMF0uY2VsbHMubGVuZ3RoIC0gMSA6IDA7XG4gICAgICByZXR1cm4gYnVuZGxlKG5ld0dyaWQsIGNvbHVtbnNbMF0ucm93LCBNYXRoLm1pbihjb2x1bW5zWzBdLmNvbHVtbiwgbWF4Q29sSW5kZXgpKTtcbiAgICB9O1xuICAgIGNvbnN0IG9wRXJhc2VSb3dzID0gKGdyaWQsIGRldGFpbHMsIF9jb21wYXJhdG9yLCBfZ2VuV3JhcHBlcnMpID0+IHtcbiAgICAgIGNvbnN0IHJvd3MgPSB1bmlxdWVSb3dzKGRldGFpbHMpO1xuICAgICAgY29uc3QgbmV3R3JpZCA9IGRlbGV0ZVJvd3NBdChncmlkLCByb3dzWzBdLnJvdywgcm93c1tyb3dzLmxlbmd0aCAtIDFdLnJvdyk7XG4gICAgICBjb25zdCBtYXhSb3dJbmRleCA9IG5ld0dyaWQubGVuZ3RoID4gMCA/IG5ld0dyaWQubGVuZ3RoIC0gMSA6IDA7XG4gICAgICByZXR1cm4gYnVuZGxlKG5ld0dyaWQsIE1hdGgubWluKGRldGFpbHNbMF0ucm93LCBtYXhSb3dJbmRleCksIGRldGFpbHNbMF0uY29sdW1uKTtcbiAgICB9O1xuICAgIGNvbnN0IG9wTWVyZ2VDZWxscyA9IChncmlkLCBtZXJnYWJsZSwgY29tcGFyYXRvciwgZ2VuV3JhcHBlcnMpID0+IHtcbiAgICAgIGNvbnN0IGNlbGxzID0gbWVyZ2FibGUuY2VsbHM7XG4gICAgICBtZXJnZShjZWxscyk7XG4gICAgICBjb25zdCBuZXdHcmlkID0gbWVyZ2UkMihncmlkLCBtZXJnYWJsZS5ib3VuZHMsIGNvbXBhcmF0b3IsIGdlbldyYXBwZXJzLm1lcmdlKGNlbGxzKSk7XG4gICAgICByZXR1cm4gb3V0Y29tZShuZXdHcmlkLCBPcHRpb25hbC5mcm9tKGNlbGxzWzBdKSk7XG4gICAgfTtcbiAgICBjb25zdCBvcFVubWVyZ2VDZWxscyA9IChncmlkLCB1bm1lcmdhYmxlLCBjb21wYXJhdG9yLCBnZW5XcmFwcGVycykgPT4ge1xuICAgICAgY29uc3QgdW5tZXJnZSQxID0gKGIsIGNlbGwpID0+IHVubWVyZ2UoYiwgY2VsbCwgY29tcGFyYXRvciwgZ2VuV3JhcHBlcnMudW5tZXJnZShjZWxsKSk7XG4gICAgICBjb25zdCBuZXdHcmlkID0gZm9sZHIodW5tZXJnYWJsZSwgdW5tZXJnZSQxLCBncmlkKTtcbiAgICAgIHJldHVybiBvdXRjb21lKG5ld0dyaWQsIE9wdGlvbmFsLmZyb20odW5tZXJnYWJsZVswXSkpO1xuICAgIH07XG4gICAgY29uc3Qgb3BQYXN0ZUNlbGxzID0gKGdyaWQsIHBhc3RlRGV0YWlscywgY29tcGFyYXRvciwgX2dlbldyYXBwZXJzKSA9PiB7XG4gICAgICBjb25zdCBncmlkaWZ5ID0gKHRhYmxlLCBnZW5lcmF0b3JzKSA9PiB7XG4gICAgICAgIGNvbnN0IHdoID0gV2FyZWhvdXNlLmZyb21UYWJsZSh0YWJsZSk7XG4gICAgICAgIHJldHVybiB0b0dyaWQod2gsIGdlbmVyYXRvcnMsIHRydWUpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdyaWRCID0gZ3JpZGlmeShwYXN0ZURldGFpbHMuY2xpcGJvYXJkLCBwYXN0ZURldGFpbHMuZ2VuZXJhdG9ycyk7XG4gICAgICBjb25zdCBzdGFydEFkZHJlc3MgPSBhZGRyZXNzKHBhc3RlRGV0YWlscy5yb3csIHBhc3RlRGV0YWlscy5jb2x1bW4pO1xuICAgICAgY29uc3QgbWVyZ2VkR3JpZCA9IG1lcmdlJDEoc3RhcnRBZGRyZXNzLCBncmlkLCBncmlkQiwgcGFzdGVEZXRhaWxzLmdlbmVyYXRvcnMsIGNvbXBhcmF0b3IpO1xuICAgICAgcmV0dXJuIG1lcmdlZEdyaWQuZm9sZCgoKSA9PiBvdXRjb21lKGdyaWQsIE9wdGlvbmFsLnNvbWUocGFzdGVEZXRhaWxzLmVsZW1lbnQpKSwgbmV3R3JpZCA9PiB7XG4gICAgICAgIHJldHVybiBidW5kbGUobmV3R3JpZCwgcGFzdGVEZXRhaWxzLnJvdywgcGFzdGVEZXRhaWxzLmNvbHVtbik7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGdyaWRpZnlSb3dzID0gKHJvd3MsIGdlbmVyYXRvcnMsIGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHBhc3RlRGV0YWlscyA9IGZyb21QYXN0ZWRSb3dzKHJvd3MsIGNvbnRleHQuc2VjdGlvbik7XG4gICAgICBjb25zdCB3aCA9IFdhcmVob3VzZS5nZW5lcmF0ZShwYXN0ZURldGFpbHMpO1xuICAgICAgcmV0dXJuIHRvR3JpZCh3aCwgZ2VuZXJhdG9ycywgdHJ1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBvcFBhc3RlQ29sc0JlZm9yZSA9IChncmlkLCBwYXN0ZURldGFpbHMsIGNvbXBhcmF0b3IsIF9nZW5XcmFwcGVycykgPT4ge1xuICAgICAgY29uc3Qgcm93cyA9IGV4dHJhY3RHcmlkRGV0YWlscyhncmlkKS5yb3dzO1xuICAgICAgY29uc3QgaW5kZXggPSBwYXN0ZURldGFpbHMuY2VsbHNbMF0uY29sdW1uO1xuICAgICAgY29uc3QgY29udGV4dCA9IHJvd3NbcGFzdGVEZXRhaWxzLmNlbGxzWzBdLnJvd107XG4gICAgICBjb25zdCBncmlkQiA9IGdyaWRpZnlSb3dzKHBhc3RlRGV0YWlscy5jbGlwYm9hcmQsIHBhc3RlRGV0YWlscy5nZW5lcmF0b3JzLCBjb250ZXh0KTtcbiAgICAgIGNvbnN0IG1lcmdlZEdyaWQgPSBpbnNlcnRDb2xzKGluZGV4LCBncmlkLCBncmlkQiwgcGFzdGVEZXRhaWxzLmdlbmVyYXRvcnMsIGNvbXBhcmF0b3IpO1xuICAgICAgcmV0dXJuIGJ1bmRsZShtZXJnZWRHcmlkLCBwYXN0ZURldGFpbHMuY2VsbHNbMF0ucm93LCBwYXN0ZURldGFpbHMuY2VsbHNbMF0uY29sdW1uKTtcbiAgICB9O1xuICAgIGNvbnN0IG9wUGFzdGVDb2xzQWZ0ZXIgPSAoZ3JpZCwgcGFzdGVEZXRhaWxzLCBjb21wYXJhdG9yLCBfZ2VuV3JhcHBlcnMpID0+IHtcbiAgICAgIGNvbnN0IHJvd3MgPSBleHRyYWN0R3JpZERldGFpbHMoZ3JpZCkucm93cztcbiAgICAgIGNvbnN0IGluZGV4ID0gcGFzdGVEZXRhaWxzLmNlbGxzW3Bhc3RlRGV0YWlscy5jZWxscy5sZW5ndGggLSAxXS5jb2x1bW4gKyBwYXN0ZURldGFpbHMuY2VsbHNbcGFzdGVEZXRhaWxzLmNlbGxzLmxlbmd0aCAtIDFdLmNvbHNwYW47XG4gICAgICBjb25zdCBjb250ZXh0ID0gcm93c1twYXN0ZURldGFpbHMuY2VsbHNbMF0ucm93XTtcbiAgICAgIGNvbnN0IGdyaWRCID0gZ3JpZGlmeVJvd3MocGFzdGVEZXRhaWxzLmNsaXBib2FyZCwgcGFzdGVEZXRhaWxzLmdlbmVyYXRvcnMsIGNvbnRleHQpO1xuICAgICAgY29uc3QgbWVyZ2VkR3JpZCA9IGluc2VydENvbHMoaW5kZXgsIGdyaWQsIGdyaWRCLCBwYXN0ZURldGFpbHMuZ2VuZXJhdG9ycywgY29tcGFyYXRvcik7XG4gICAgICByZXR1cm4gYnVuZGxlKG1lcmdlZEdyaWQsIHBhc3RlRGV0YWlscy5jZWxsc1swXS5yb3csIHBhc3RlRGV0YWlscy5jZWxsc1swXS5jb2x1bW4pO1xuICAgIH07XG4gICAgY29uc3Qgb3BQYXN0ZVJvd3NCZWZvcmUgPSAoZ3JpZCwgcGFzdGVEZXRhaWxzLCBjb21wYXJhdG9yLCBfZ2VuV3JhcHBlcnMpID0+IHtcbiAgICAgIGNvbnN0IHJvd3MgPSBleHRyYWN0R3JpZERldGFpbHMoZ3JpZCkucm93cztcbiAgICAgIGNvbnN0IGluZGV4ID0gcGFzdGVEZXRhaWxzLmNlbGxzWzBdLnJvdztcbiAgICAgIGNvbnN0IGNvbnRleHQgPSByb3dzW2luZGV4XTtcbiAgICAgIGNvbnN0IGdyaWRCID0gZ3JpZGlmeVJvd3MocGFzdGVEZXRhaWxzLmNsaXBib2FyZCwgcGFzdGVEZXRhaWxzLmdlbmVyYXRvcnMsIGNvbnRleHQpO1xuICAgICAgY29uc3QgbWVyZ2VkR3JpZCA9IGluc2VydFJvd3MoaW5kZXgsIGdyaWQsIGdyaWRCLCBwYXN0ZURldGFpbHMuZ2VuZXJhdG9ycywgY29tcGFyYXRvcik7XG4gICAgICByZXR1cm4gYnVuZGxlKG1lcmdlZEdyaWQsIHBhc3RlRGV0YWlscy5jZWxsc1swXS5yb3csIHBhc3RlRGV0YWlscy5jZWxsc1swXS5jb2x1bW4pO1xuICAgIH07XG4gICAgY29uc3Qgb3BQYXN0ZVJvd3NBZnRlciA9IChncmlkLCBwYXN0ZURldGFpbHMsIGNvbXBhcmF0b3IsIF9nZW5XcmFwcGVycykgPT4ge1xuICAgICAgY29uc3Qgcm93cyA9IGV4dHJhY3RHcmlkRGV0YWlscyhncmlkKS5yb3dzO1xuICAgICAgY29uc3QgaW5kZXggPSBwYXN0ZURldGFpbHMuY2VsbHNbcGFzdGVEZXRhaWxzLmNlbGxzLmxlbmd0aCAtIDFdLnJvdyArIHBhc3RlRGV0YWlscy5jZWxsc1twYXN0ZURldGFpbHMuY2VsbHMubGVuZ3RoIC0gMV0ucm93c3BhbjtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSByb3dzW3Bhc3RlRGV0YWlscy5jZWxsc1swXS5yb3ddO1xuICAgICAgY29uc3QgZ3JpZEIgPSBncmlkaWZ5Um93cyhwYXN0ZURldGFpbHMuY2xpcGJvYXJkLCBwYXN0ZURldGFpbHMuZ2VuZXJhdG9ycywgY29udGV4dCk7XG4gICAgICBjb25zdCBtZXJnZWRHcmlkID0gaW5zZXJ0Um93cyhpbmRleCwgZ3JpZCwgZ3JpZEIsIHBhc3RlRGV0YWlscy5nZW5lcmF0b3JzLCBjb21wYXJhdG9yKTtcbiAgICAgIHJldHVybiBidW5kbGUobWVyZ2VkR3JpZCwgcGFzdGVEZXRhaWxzLmNlbGxzWzBdLnJvdywgcGFzdGVEZXRhaWxzLmNlbGxzWzBdLmNvbHVtbik7XG4gICAgfTtcbiAgICBjb25zdCBvcEdldENvbHVtbnNUeXBlID0gKHRhYmxlLCB0YXJnZXQpID0+IHtcbiAgICAgIGNvbnN0IGhvdXNlID0gV2FyZWhvdXNlLmZyb21UYWJsZSh0YWJsZSk7XG4gICAgICBjb25zdCBkZXRhaWxzID0gb25DZWxscyhob3VzZSwgdGFyZ2V0KTtcbiAgICAgIHJldHVybiBkZXRhaWxzLmJpbmQoc2VsZWN0ZWRDZWxscyA9PiB7XG4gICAgICAgIGNvbnN0IGxhc3RTZWxlY3RlZENlbGwgPSBzZWxlY3RlZENlbGxzW3NlbGVjdGVkQ2VsbHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IG1pbkNvbFJhbmdlID0gc2VsZWN0ZWRDZWxsc1swXS5jb2x1bW47XG4gICAgICAgIGNvbnN0IG1heENvbFJhbmdlID0gbGFzdFNlbGVjdGVkQ2VsbC5jb2x1bW4gKyBsYXN0U2VsZWN0ZWRDZWxsLmNvbHNwYW47XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ29sdW1uQ2VsbHMgPSBmbGF0dGVuKG1hcCQxKGhvdXNlLmFsbCwgcm93ID0+IGZpbHRlciQyKHJvdy5jZWxscywgY2VsbCA9PiBjZWxsLmNvbHVtbiA+PSBtaW5Db2xSYW5nZSAmJiBjZWxsLmNvbHVtbiA8IG1heENvbFJhbmdlKSkpO1xuICAgICAgICByZXR1cm4gZmluZENvbW1vbkNlbGxUeXBlKHNlbGVjdGVkQ29sdW1uQ2VsbHMpO1xuICAgICAgfSkuZ2V0T3IoJycpO1xuICAgIH07XG4gICAgY29uc3Qgb3BHZXRDZWxsc1R5cGUgPSAodGFibGUsIHRhcmdldCkgPT4ge1xuICAgICAgY29uc3QgaG91c2UgPSBXYXJlaG91c2UuZnJvbVRhYmxlKHRhYmxlKTtcbiAgICAgIGNvbnN0IGRldGFpbHMgPSBvbkNlbGxzKGhvdXNlLCB0YXJnZXQpO1xuICAgICAgcmV0dXJuIGRldGFpbHMuYmluZChmaW5kQ29tbW9uQ2VsbFR5cGUpLmdldE9yKCcnKTtcbiAgICB9O1xuICAgIGNvbnN0IG9wR2V0Um93c1R5cGUgPSAodGFibGUsIHRhcmdldCkgPT4ge1xuICAgICAgY29uc3QgaG91c2UgPSBXYXJlaG91c2UuZnJvbVRhYmxlKHRhYmxlKTtcbiAgICAgIGNvbnN0IGRldGFpbHMgPSBvbkNlbGxzKGhvdXNlLCB0YXJnZXQpO1xuICAgICAgcmV0dXJuIGRldGFpbHMuYmluZChzZWxlY3RlZENlbGxzID0+IHtcbiAgICAgICAgY29uc3QgbGFzdFNlbGVjdGVkQ2VsbCA9IHNlbGVjdGVkQ2VsbHNbc2VsZWN0ZWRDZWxscy5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3QgbWluUm93UmFuZ2UgPSBzZWxlY3RlZENlbGxzWzBdLnJvdztcbiAgICAgICAgY29uc3QgbWF4Um93UmFuZ2UgPSBsYXN0U2VsZWN0ZWRDZWxsLnJvdyArIGxhc3RTZWxlY3RlZENlbGwucm93c3BhbjtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gaG91c2UuYWxsLnNsaWNlKG1pblJvd1JhbmdlLCBtYXhSb3dSYW5nZSk7XG4gICAgICAgIHJldHVybiBmaW5kQ29tbW9uUm93VHlwZShzZWxlY3RlZFJvd3MpO1xuICAgICAgfSkuZ2V0T3IoJycpO1xuICAgIH07XG4gICAgY29uc3QgcmVzaXplID0gKHRhYmxlLCBsaXN0LCBkZXRhaWxzLCBiZWhhdmlvdXJzKSA9PiBhZGp1c3RXaWR0aFRvKHRhYmxlLCBsaXN0LCBkZXRhaWxzLCBiZWhhdmlvdXJzLnNpemluZyk7XG4gICAgY29uc3QgYWRqdXN0QW5kUmVkaXN0cmlidXRlV2lkdGhzID0gKHRhYmxlLCBsaXN0LCBkZXRhaWxzLCBiZWhhdmlvdXJzKSA9PiBhZGp1c3RBbmRSZWRpc3RyaWJ1dGVXaWR0aHMkMSh0YWJsZSwgbGlzdCwgZGV0YWlscywgYmVoYXZpb3Vycy5zaXppbmcsIGJlaGF2aW91cnMucmVzaXplKTtcbiAgICBjb25zdCBmaXJzdENvbHVtbklzTG9ja2VkID0gKF93YXJlaG91c2UsIGRldGFpbHMpID0+IGV4aXN0cyhkZXRhaWxzLCBkZXRhaWwgPT4gZGV0YWlsLmNvbHVtbiA9PT0gMCAmJiBkZXRhaWwuaXNMb2NrZWQpO1xuICAgIGNvbnN0IGxhc3RDb2x1bW5Jc0xvY2tlZCA9ICh3YXJlaG91c2UsIGRldGFpbHMpID0+IGV4aXN0cyhkZXRhaWxzLCBkZXRhaWwgPT4gZGV0YWlsLmNvbHVtbiArIGRldGFpbC5jb2xzcGFuID49IHdhcmVob3VzZS5ncmlkLmNvbHVtbnMgJiYgZGV0YWlsLmlzTG9ja2VkKTtcbiAgICBjb25zdCBnZXRDb2x1bW5zV2lkdGggPSAod2FyZWhvdXNlLCBkZXRhaWxzKSA9PiB7XG4gICAgICBjb25zdCBjb2x1bW5zJDEgPSBjb2x1bW5zKHdhcmVob3VzZSk7XG4gICAgICBjb25zdCB1bmlxdWVDb2xzID0gdW5pcXVlQ29sdW1ucyhkZXRhaWxzKTtcbiAgICAgIHJldHVybiBmb2xkbCh1bmlxdWVDb2xzLCAoYWNjLCBkZXRhaWwpID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gY29sdW1ucyQxW2RldGFpbC5jb2x1bW5dO1xuICAgICAgICBjb25zdCBjb2xXaWR0aCA9IGNvbHVtbi5tYXAoZ2V0T3V0ZXIkMikuZ2V0T3IoMCk7XG4gICAgICAgIHJldHVybiBhY2MgKyBjb2xXaWR0aDtcbiAgICAgIH0sIDApO1xuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0Q29sdW1uc0V4dHJhY3RvciA9IGJlZm9yZSA9PiAod2FyZWhvdXNlLCB0YXJnZXQpID0+IG9uQ2VsbHMod2FyZWhvdXNlLCB0YXJnZXQpLmZpbHRlcihkZXRhaWxzID0+IHtcbiAgICAgIGNvbnN0IGNoZWNrTG9ja2VkID0gYmVmb3JlID8gZmlyc3RDb2x1bW5Jc0xvY2tlZCA6IGxhc3RDb2x1bW5Jc0xvY2tlZDtcbiAgICAgIHJldHVybiAhY2hlY2tMb2NrZWQod2FyZWhvdXNlLCBkZXRhaWxzKTtcbiAgICB9KS5tYXAoZGV0YWlscyA9PiAoe1xuICAgICAgZGV0YWlscyxcbiAgICAgIHBpeGVsRGVsdGE6IGdldENvbHVtbnNXaWR0aCh3YXJlaG91c2UsIGRldGFpbHMpXG4gICAgfSkpO1xuICAgIGNvbnN0IGVyYXNlQ29sdW1uc0V4dHJhY3RvciA9ICh3YXJlaG91c2UsIHRhcmdldCkgPT4gb25VbmxvY2tlZENlbGxzKHdhcmVob3VzZSwgdGFyZ2V0KS5tYXAoZGV0YWlscyA9PiAoe1xuICAgICAgZGV0YWlscyxcbiAgICAgIHBpeGVsRGVsdGE6IC1nZXRDb2x1bW5zV2lkdGgod2FyZWhvdXNlLCBkZXRhaWxzKVxuICAgIH0pKTtcbiAgICBjb25zdCBwYXN0ZUNvbHVtbnNFeHRyYWN0b3IgPSBiZWZvcmUgPT4gKHdhcmVob3VzZSwgdGFyZ2V0KSA9PiBvblBhc3RlQnlFZGl0b3Iod2FyZWhvdXNlLCB0YXJnZXQpLmZpbHRlcihkZXRhaWxzID0+IHtcbiAgICAgIGNvbnN0IGNoZWNrTG9ja2VkID0gYmVmb3JlID8gZmlyc3RDb2x1bW5Jc0xvY2tlZCA6IGxhc3RDb2x1bW5Jc0xvY2tlZDtcbiAgICAgIHJldHVybiAhY2hlY2tMb2NrZWQod2FyZWhvdXNlLCBkZXRhaWxzLmNlbGxzKTtcbiAgICB9KTtcbiAgICBjb25zdCBoZWFkZXJDZWxsR2VuZXJhdG9yID0gR2VuZXJhdG9ycy50cmFuc2Zvcm0oJ3RoJyk7XG4gICAgY29uc3QgYm9keUNlbGxHZW5lcmF0b3IgPSBHZW5lcmF0b3JzLnRyYW5zZm9ybSgndGQnKTtcbiAgICBjb25zdCBpbnNlcnRSb3dzQmVmb3JlID0gcnVuKG9wSW5zZXJ0Um93c0JlZm9yZSwgb25DZWxscywgbm9vcCwgbm9vcCwgR2VuZXJhdG9ycy5tb2RpZmljYXRpb24pO1xuICAgIGNvbnN0IGluc2VydFJvd3NBZnRlciA9IHJ1bihvcEluc2VydFJvd3NBZnRlciwgb25DZWxscywgbm9vcCwgbm9vcCwgR2VuZXJhdG9ycy5tb2RpZmljYXRpb24pO1xuICAgIGNvbnN0IGluc2VydENvbHVtbnNCZWZvcmUgPSBydW4ob3BJbnNlcnRDb2x1bW5zQmVmb3JlLCBpbnNlcnRDb2x1bW5zRXh0cmFjdG9yKHRydWUpLCBhZGp1c3RBbmRSZWRpc3RyaWJ1dGVXaWR0aHMsIG5vb3AsIEdlbmVyYXRvcnMubW9kaWZpY2F0aW9uKTtcbiAgICBjb25zdCBpbnNlcnRDb2x1bW5zQWZ0ZXIgPSBydW4ob3BJbnNlcnRDb2x1bW5zQWZ0ZXIsIGluc2VydENvbHVtbnNFeHRyYWN0b3IoZmFsc2UpLCBhZGp1c3RBbmRSZWRpc3RyaWJ1dGVXaWR0aHMsIG5vb3AsIEdlbmVyYXRvcnMubW9kaWZpY2F0aW9uKTtcbiAgICBjb25zdCBlcmFzZUNvbHVtbnMgPSBydW4ob3BFcmFzZUNvbHVtbnMsIGVyYXNlQ29sdW1uc0V4dHJhY3RvciwgYWRqdXN0QW5kUmVkaXN0cmlidXRlV2lkdGhzLCBwcnVuZSwgR2VuZXJhdG9ycy5tb2RpZmljYXRpb24pO1xuICAgIGNvbnN0IGVyYXNlUm93cyA9IHJ1bihvcEVyYXNlUm93cywgb25DZWxscywgbm9vcCwgcHJ1bmUsIEdlbmVyYXRvcnMubW9kaWZpY2F0aW9uKTtcbiAgICBjb25zdCBtYWtlQ29sdW1uc0hlYWRlciA9IHJ1bihvcE1ha2VDb2x1bW5zSGVhZGVyLCBvblVubG9ja2VkQ2VsbHMsIG5vb3AsIG5vb3AsIGhlYWRlckNlbGxHZW5lcmF0b3IpO1xuICAgIGNvbnN0IHVubWFrZUNvbHVtbnNIZWFkZXIgPSBydW4ob3BVbm1ha2VDb2x1bW5zSGVhZGVyLCBvblVubG9ja2VkQ2VsbHMsIG5vb3AsIG5vb3AsIGJvZHlDZWxsR2VuZXJhdG9yKTtcbiAgICBjb25zdCBtYWtlUm93c0hlYWRlciA9IHJ1bihvcE1ha2VSb3dzSGVhZGVyLCBvblVubG9ja2VkQ2VsbHMsIG5vb3AsIG5vb3AsIGhlYWRlckNlbGxHZW5lcmF0b3IpO1xuICAgIGNvbnN0IG1ha2VSb3dzQm9keSA9IHJ1bihvcE1ha2VSb3dzQm9keSwgb25VbmxvY2tlZENlbGxzLCBub29wLCBub29wLCBib2R5Q2VsbEdlbmVyYXRvcik7XG4gICAgY29uc3QgbWFrZVJvd3NGb290ZXIgPSBydW4ob3BNYWtlUm93c0Zvb3Rlciwgb25VbmxvY2tlZENlbGxzLCBub29wLCBub29wLCBib2R5Q2VsbEdlbmVyYXRvcik7XG4gICAgY29uc3QgbWFrZUNlbGxzSGVhZGVyID0gcnVuKG9wTWFrZUNlbGxzSGVhZGVyLCBvblVubG9ja2VkQ2VsbHMsIG5vb3AsIG5vb3AsIGhlYWRlckNlbGxHZW5lcmF0b3IpO1xuICAgIGNvbnN0IHVubWFrZUNlbGxzSGVhZGVyID0gcnVuKG9wVW5tYWtlQ2VsbHNIZWFkZXIsIG9uVW5sb2NrZWRDZWxscywgbm9vcCwgbm9vcCwgYm9keUNlbGxHZW5lcmF0b3IpO1xuICAgIGNvbnN0IG1lcmdlQ2VsbHMgPSBydW4ob3BNZXJnZUNlbGxzLCBvblVubG9ja2VkTWVyZ2FibGUsIHJlc2l6ZSwgbm9vcCwgR2VuZXJhdG9ycy5tZXJnaW5nKTtcbiAgICBjb25zdCB1bm1lcmdlQ2VsbHMgPSBydW4ob3BVbm1lcmdlQ2VsbHMsIG9uVW5sb2NrZWRVbm1lcmdhYmxlLCByZXNpemUsIG5vb3AsIEdlbmVyYXRvcnMubWVyZ2luZyk7XG4gICAgY29uc3QgcGFzdGVDZWxscyA9IHJ1bihvcFBhc3RlQ2VsbHMsIG9uUGFzdGUsIHJlc2l6ZSwgbm9vcCwgR2VuZXJhdG9ycy5tb2RpZmljYXRpb24pO1xuICAgIGNvbnN0IHBhc3RlQ29sc0JlZm9yZSA9IHJ1bihvcFBhc3RlQ29sc0JlZm9yZSwgcGFzdGVDb2x1bW5zRXh0cmFjdG9yKHRydWUpLCBub29wLCBub29wLCBHZW5lcmF0b3JzLm1vZGlmaWNhdGlvbik7XG4gICAgY29uc3QgcGFzdGVDb2xzQWZ0ZXIgPSBydW4ob3BQYXN0ZUNvbHNBZnRlciwgcGFzdGVDb2x1bW5zRXh0cmFjdG9yKGZhbHNlKSwgbm9vcCwgbm9vcCwgR2VuZXJhdG9ycy5tb2RpZmljYXRpb24pO1xuICAgIGNvbnN0IHBhc3RlUm93c0JlZm9yZSA9IHJ1bihvcFBhc3RlUm93c0JlZm9yZSwgb25QYXN0ZUJ5RWRpdG9yLCBub29wLCBub29wLCBHZW5lcmF0b3JzLm1vZGlmaWNhdGlvbik7XG4gICAgY29uc3QgcGFzdGVSb3dzQWZ0ZXIgPSBydW4ob3BQYXN0ZVJvd3NBZnRlciwgb25QYXN0ZUJ5RWRpdG9yLCBub29wLCBub29wLCBHZW5lcmF0b3JzLm1vZGlmaWNhdGlvbik7XG4gICAgY29uc3QgZ2V0Q29sdW1uc1R5cGUgPSBvcEdldENvbHVtbnNUeXBlO1xuICAgIGNvbnN0IGdldENlbGxzVHlwZSA9IG9wR2V0Q2VsbHNUeXBlO1xuICAgIGNvbnN0IGdldFJvd3NUeXBlID0gb3BHZXRSb3dzVHlwZTtcblxuICAgIGNvbnN0IGZpcmVOZXdSb3cgPSAoZWRpdG9yLCByb3cpID0+IGVkaXRvci5kaXNwYXRjaCgnTmV3Um93JywgeyBub2RlOiByb3cgfSk7XG4gICAgY29uc3QgZmlyZU5ld0NlbGwgPSAoZWRpdG9yLCBjZWxsKSA9PiBlZGl0b3IuZGlzcGF0Y2goJ05ld0NlbGwnLCB7IG5vZGU6IGNlbGwgfSk7XG4gICAgY29uc3QgZmlyZVRhYmxlTW9kaWZpZWQgPSAoZWRpdG9yLCB0YWJsZSwgZGF0YSkgPT4ge1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdUYWJsZU1vZGlmaWVkJywge1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICB0YWJsZVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJlVGFibGVTZWxlY3Rpb25DaGFuZ2UgPSAoZWRpdG9yLCBjZWxscywgc3RhcnQsIGZpbmlzaCwgb3RoZXJDZWxscykgPT4ge1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdUYWJsZVNlbGVjdGlvbkNoYW5nZScsIHtcbiAgICAgICAgY2VsbHMsXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBmaW5pc2gsXG4gICAgICAgIG90aGVyQ2VsbHNcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZmlyZVRhYmxlU2VsZWN0aW9uQ2xlYXIgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdUYWJsZVNlbGVjdGlvbkNsZWFyJyk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJlT2JqZWN0UmVzaXplU3RhcnQgPSAoZWRpdG9yLCB0YXJnZXQsIHdpZHRoLCBoZWlnaHQsIG9yaWdpbikgPT4ge1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdPYmplY3RSZXNpemVTdGFydCcsIHtcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBvcmlnaW5cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZmlyZU9iamVjdFJlc2l6ZWQgPSAoZWRpdG9yLCB0YXJnZXQsIHdpZHRoLCBoZWlnaHQsIG9yaWdpbikgPT4ge1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdPYmplY3RSZXNpemVkJywge1xuICAgICAgICB0YXJnZXQsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIG9yaWdpblxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzdHlsZU1vZGlmaWVkID0ge1xuICAgICAgc3RydWN0dXJlOiBmYWxzZSxcbiAgICAgIHN0eWxlOiB0cnVlXG4gICAgfTtcbiAgICBjb25zdCBzdHJ1Y3R1cmVNb2RpZmllZCA9IHtcbiAgICAgIHN0cnVjdHVyZTogdHJ1ZSxcbiAgICAgIHN0eWxlOiBmYWxzZVxuICAgIH07XG4gICAgY29uc3Qgc3R5bGVBbmRTdHJ1Y3R1cmVNb2RpZmllZCA9IHtcbiAgICAgIHN0cnVjdHVyZTogdHJ1ZSxcbiAgICAgIHN0eWxlOiB0cnVlXG4gICAgfTtcblxuICAgIGNvbnN0IGdldCQ1ID0gKGVkaXRvciwgdGFibGUpID0+IHtcbiAgICAgIGlmIChpc1RhYmxlUGVyY2VudGFnZXNGb3JjZWQoZWRpdG9yKSkge1xuICAgICAgICByZXR1cm4gVGFibGVTaXplLnBlcmNlbnRhZ2VTaXplKHRhYmxlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNUYWJsZVBpeGVsc0ZvcmNlZChlZGl0b3IpKSB7XG4gICAgICAgIHJldHVybiBUYWJsZVNpemUucGl4ZWxTaXplKHRhYmxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBUYWJsZVNpemUuZ2V0VGFibGVTaXplKHRhYmxlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgVGFibGVBY3Rpb25zID0gKGVkaXRvciwgcmVzaXplSGFuZGxlciwgY2VsbFNlbGVjdGlvbkhhbmRsZXIpID0+IHtcbiAgICAgIGNvbnN0IGlzVGFibGVCb2R5ID0gZWRpdG9yID0+IG5hbWUoZ2V0Qm9keShlZGl0b3IpKSA9PT0gJ3RhYmxlJztcbiAgICAgIGNvbnN0IGxhc3RSb3dHdWFyZCA9IHRhYmxlID0+ICFpc1RhYmxlQm9keShlZGl0b3IpIHx8IGdldEdyaWRTaXplKHRhYmxlKS5yb3dzID4gMTtcbiAgICAgIGNvbnN0IGxhc3RDb2x1bW5HdWFyZCA9IHRhYmxlID0+ICFpc1RhYmxlQm9keShlZGl0b3IpIHx8IGdldEdyaWRTaXplKHRhYmxlKS5jb2x1bW5zID4gMTtcbiAgICAgIGNvbnN0IGNsb25lRm9ybWF0cyA9IGdldFRhYmxlQ2xvbmVFbGVtZW50cyhlZGl0b3IpO1xuICAgICAgY29uc3QgY29sTXV0YXRpb25PcCA9IGlzUmVzaXplVGFibGVDb2x1bW5SZXNpemluZyhlZGl0b3IpID8gbm9vcCA6IGhhbHZlO1xuICAgICAgY29uc3QgZ2V0VGFibGVTZWN0aW9uVHlwZSA9IHRhYmxlID0+IHtcbiAgICAgICAgc3dpdGNoIChnZXRUYWJsZUhlYWRlclR5cGUoZWRpdG9yKSkge1xuICAgICAgICBjYXNlICdzZWN0aW9uJzpcbiAgICAgICAgICByZXR1cm4gVGFibGVTZWN0aW9uLnNlY3Rpb24oKTtcbiAgICAgICAgY2FzZSAnc2VjdGlvbkNlbGxzJzpcbiAgICAgICAgICByZXR1cm4gVGFibGVTZWN0aW9uLnNlY3Rpb25DZWxscygpO1xuICAgICAgICBjYXNlICdjZWxscyc6XG4gICAgICAgICAgcmV0dXJuIFRhYmxlU2VjdGlvbi5jZWxscygpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBUYWJsZVNlY3Rpb24uZ2V0VGFibGVTZWN0aW9uVHlwZSh0YWJsZSwgJ3NlY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldFNlbGVjdGlvbkZyb21BY3Rpb24gPSAodGFibGUsIHJlc3VsdCkgPT4gcmVzdWx0LmN1cnNvci5mb2xkKCgpID0+IHtcbiAgICAgICAgY29uc3QgY2VsbHMgPSBjZWxscyQxKHRhYmxlKTtcbiAgICAgICAgcmV0dXJuIGhlYWQoY2VsbHMpLmZpbHRlcihpbkJvZHkpLm1hcChmaXJzdENlbGwgPT4ge1xuICAgICAgICAgIGNlbGxTZWxlY3Rpb25IYW5kbGVyLmNsZWFyU2VsZWN0ZWRDZWxscyh0YWJsZS5kb20pO1xuICAgICAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5kb20uY3JlYXRlUm5nKCk7XG4gICAgICAgICAgcm5nLnNlbGVjdE5vZGUoZmlyc3RDZWxsLmRvbSk7XG4gICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcocm5nKTtcbiAgICAgICAgICBzZXQkMihmaXJzdENlbGwsICdkYXRhLW1jZS1zZWxlY3RlZCcsICcxJyk7XG4gICAgICAgICAgcmV0dXJuIHJuZztcbiAgICAgICAgfSk7XG4gICAgICB9LCBjZWxsID0+IHtcbiAgICAgICAgY29uc3QgZGVzID0gZnJlZWZhbGxSdGwoY2VsbCk7XG4gICAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5kb20uY3JlYXRlUm5nKCk7XG4gICAgICAgIHJuZy5zZXRTdGFydChkZXMuZWxlbWVudC5kb20sIGRlcy5vZmZzZXQpO1xuICAgICAgICBybmcuc2V0RW5kKGRlcy5lbGVtZW50LmRvbSwgZGVzLm9mZnNldCk7XG4gICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG4gICAgICAgIGNlbGxTZWxlY3Rpb25IYW5kbGVyLmNsZWFyU2VsZWN0ZWRDZWxscyh0YWJsZS5kb20pO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShybmcpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBleGVjdXRlID0gKG9wZXJhdGlvbiwgZ3VhcmQsIG11dGF0ZSwgZWZmZWN0KSA9PiAodGFibGUsIHRhcmdldCwgbm9FdmVudHMgPSBmYWxzZSkgPT4ge1xuICAgICAgICByZW1vdmVEYXRhU3R5bGUodGFibGUpO1xuICAgICAgICBjb25zdCBkb2MgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0RG9jKCkpO1xuICAgICAgICBjb25zdCBnZW5lcmF0b3JzID0gY2VsbE9wZXJhdGlvbnMobXV0YXRlLCBkb2MsIGNsb25lRm9ybWF0cyk7XG4gICAgICAgIGNvbnN0IGJlaGF2aW91cnMgPSB7XG4gICAgICAgICAgc2l6aW5nOiBnZXQkNShlZGl0b3IsIHRhYmxlKSxcbiAgICAgICAgICByZXNpemU6IGlzUmVzaXplVGFibGVDb2x1bW5SZXNpemluZyhlZGl0b3IpID8gcmVzaXplVGFibGUoKSA6IHByZXNlcnZlVGFibGUoKSxcbiAgICAgICAgICBzZWN0aW9uOiBnZXRUYWJsZVNlY3Rpb25UeXBlKHRhYmxlKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZ3VhcmQodGFibGUpID8gb3BlcmF0aW9uKHRhYmxlLCB0YXJnZXQsIGdlbmVyYXRvcnMsIGJlaGF2aW91cnMpLmJpbmQocmVzdWx0ID0+IHtcbiAgICAgICAgICByZXNpemVIYW5kbGVyLnJlZnJlc2godGFibGUuZG9tKTtcbiAgICAgICAgICBlYWNoJDIocmVzdWx0Lm5ld1Jvd3MsIHJvdyA9PiB7XG4gICAgICAgICAgICBmaXJlTmV3Um93KGVkaXRvciwgcm93LmRvbSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZWFjaCQyKHJlc3VsdC5uZXdDZWxscywgY2VsbCA9PiB7XG4gICAgICAgICAgICBmaXJlTmV3Q2VsbChlZGl0b3IsIGNlbGwuZG9tKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCByYW5nZSA9IHNldFNlbGVjdGlvbkZyb21BY3Rpb24odGFibGUsIHJlc3VsdCk7XG4gICAgICAgICAgaWYgKGluQm9keSh0YWJsZSkpIHtcbiAgICAgICAgICAgIHJlbW92ZURhdGFTdHlsZSh0YWJsZSk7XG4gICAgICAgICAgICBpZiAoIW5vRXZlbnRzKSB7XG4gICAgICAgICAgICAgIGZpcmVUYWJsZU1vZGlmaWVkKGVkaXRvciwgdGFibGUuZG9tLCBlZmZlY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmFuZ2UubWFwKHJuZyA9PiAoe1xuICAgICAgICAgICAgcm5nLFxuICAgICAgICAgICAgZWZmZWN0XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9KSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBkZWxldGVSb3cgPSBleGVjdXRlKGVyYXNlUm93cywgbGFzdFJvd0d1YXJkLCBub29wLCBzdHJ1Y3R1cmVNb2RpZmllZCk7XG4gICAgICBjb25zdCBkZWxldGVDb2x1bW4gPSBleGVjdXRlKGVyYXNlQ29sdW1ucywgbGFzdENvbHVtbkd1YXJkLCBub29wLCBzdHJ1Y3R1cmVNb2RpZmllZCk7XG4gICAgICBjb25zdCBpbnNlcnRSb3dzQmVmb3JlJDEgPSBleGVjdXRlKGluc2VydFJvd3NCZWZvcmUsIGFsd2F5cywgbm9vcCwgc3RydWN0dXJlTW9kaWZpZWQpO1xuICAgICAgY29uc3QgaW5zZXJ0Um93c0FmdGVyJDEgPSBleGVjdXRlKGluc2VydFJvd3NBZnRlciwgYWx3YXlzLCBub29wLCBzdHJ1Y3R1cmVNb2RpZmllZCk7XG4gICAgICBjb25zdCBpbnNlcnRDb2x1bW5zQmVmb3JlJDEgPSBleGVjdXRlKGluc2VydENvbHVtbnNCZWZvcmUsIGFsd2F5cywgY29sTXV0YXRpb25PcCwgc3RydWN0dXJlTW9kaWZpZWQpO1xuICAgICAgY29uc3QgaW5zZXJ0Q29sdW1uc0FmdGVyJDEgPSBleGVjdXRlKGluc2VydENvbHVtbnNBZnRlciwgYWx3YXlzLCBjb2xNdXRhdGlvbk9wLCBzdHJ1Y3R1cmVNb2RpZmllZCk7XG4gICAgICBjb25zdCBtZXJnZUNlbGxzJDEgPSBleGVjdXRlKG1lcmdlQ2VsbHMsIGFsd2F5cywgbm9vcCwgc3RydWN0dXJlTW9kaWZpZWQpO1xuICAgICAgY29uc3QgdW5tZXJnZUNlbGxzJDEgPSBleGVjdXRlKHVubWVyZ2VDZWxscywgYWx3YXlzLCBub29wLCBzdHJ1Y3R1cmVNb2RpZmllZCk7XG4gICAgICBjb25zdCBwYXN0ZUNvbHNCZWZvcmUkMSA9IGV4ZWN1dGUocGFzdGVDb2xzQmVmb3JlLCBhbHdheXMsIG5vb3AsIHN0cnVjdHVyZU1vZGlmaWVkKTtcbiAgICAgIGNvbnN0IHBhc3RlQ29sc0FmdGVyJDEgPSBleGVjdXRlKHBhc3RlQ29sc0FmdGVyLCBhbHdheXMsIG5vb3AsIHN0cnVjdHVyZU1vZGlmaWVkKTtcbiAgICAgIGNvbnN0IHBhc3RlUm93c0JlZm9yZSQxID0gZXhlY3V0ZShwYXN0ZVJvd3NCZWZvcmUsIGFsd2F5cywgbm9vcCwgc3RydWN0dXJlTW9kaWZpZWQpO1xuICAgICAgY29uc3QgcGFzdGVSb3dzQWZ0ZXIkMSA9IGV4ZWN1dGUocGFzdGVSb3dzQWZ0ZXIsIGFsd2F5cywgbm9vcCwgc3RydWN0dXJlTW9kaWZpZWQpO1xuICAgICAgY29uc3QgcGFzdGVDZWxscyQxID0gZXhlY3V0ZShwYXN0ZUNlbGxzLCBhbHdheXMsIG5vb3AsIHN0eWxlQW5kU3RydWN0dXJlTW9kaWZpZWQpO1xuICAgICAgY29uc3QgbWFrZUNlbGxzSGVhZGVyJDEgPSBleGVjdXRlKG1ha2VDZWxsc0hlYWRlciwgYWx3YXlzLCBub29wLCBzdHJ1Y3R1cmVNb2RpZmllZCk7XG4gICAgICBjb25zdCB1bm1ha2VDZWxsc0hlYWRlciQxID0gZXhlY3V0ZSh1bm1ha2VDZWxsc0hlYWRlciwgYWx3YXlzLCBub29wLCBzdHJ1Y3R1cmVNb2RpZmllZCk7XG4gICAgICBjb25zdCBtYWtlQ29sdW1uc0hlYWRlciQxID0gZXhlY3V0ZShtYWtlQ29sdW1uc0hlYWRlciwgYWx3YXlzLCBub29wLCBzdHJ1Y3R1cmVNb2RpZmllZCk7XG4gICAgICBjb25zdCB1bm1ha2VDb2x1bW5zSGVhZGVyJDEgPSBleGVjdXRlKHVubWFrZUNvbHVtbnNIZWFkZXIsIGFsd2F5cywgbm9vcCwgc3RydWN0dXJlTW9kaWZpZWQpO1xuICAgICAgY29uc3QgbWFrZVJvd3NIZWFkZXIkMSA9IGV4ZWN1dGUobWFrZVJvd3NIZWFkZXIsIGFsd2F5cywgbm9vcCwgc3RydWN0dXJlTW9kaWZpZWQpO1xuICAgICAgY29uc3QgbWFrZVJvd3NCb2R5JDEgPSBleGVjdXRlKG1ha2VSb3dzQm9keSwgYWx3YXlzLCBub29wLCBzdHJ1Y3R1cmVNb2RpZmllZCk7XG4gICAgICBjb25zdCBtYWtlUm93c0Zvb3RlciQxID0gZXhlY3V0ZShtYWtlUm93c0Zvb3RlciwgYWx3YXlzLCBub29wLCBzdHJ1Y3R1cmVNb2RpZmllZCk7XG4gICAgICBjb25zdCBnZXRUYWJsZUNlbGxUeXBlID0gZ2V0Q2VsbHNUeXBlO1xuICAgICAgY29uc3QgZ2V0VGFibGVDb2xUeXBlID0gZ2V0Q29sdW1uc1R5cGU7XG4gICAgICBjb25zdCBnZXRUYWJsZVJvd1R5cGUgPSBnZXRSb3dzVHlwZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlbGV0ZVJvdyxcbiAgICAgICAgZGVsZXRlQ29sdW1uLFxuICAgICAgICBpbnNlcnRSb3dzQmVmb3JlOiBpbnNlcnRSb3dzQmVmb3JlJDEsXG4gICAgICAgIGluc2VydFJvd3NBZnRlcjogaW5zZXJ0Um93c0FmdGVyJDEsXG4gICAgICAgIGluc2VydENvbHVtbnNCZWZvcmU6IGluc2VydENvbHVtbnNCZWZvcmUkMSxcbiAgICAgICAgaW5zZXJ0Q29sdW1uc0FmdGVyOiBpbnNlcnRDb2x1bW5zQWZ0ZXIkMSxcbiAgICAgICAgbWVyZ2VDZWxsczogbWVyZ2VDZWxscyQxLFxuICAgICAgICB1bm1lcmdlQ2VsbHM6IHVubWVyZ2VDZWxscyQxLFxuICAgICAgICBwYXN0ZUNvbHNCZWZvcmU6IHBhc3RlQ29sc0JlZm9yZSQxLFxuICAgICAgICBwYXN0ZUNvbHNBZnRlcjogcGFzdGVDb2xzQWZ0ZXIkMSxcbiAgICAgICAgcGFzdGVSb3dzQmVmb3JlOiBwYXN0ZVJvd3NCZWZvcmUkMSxcbiAgICAgICAgcGFzdGVSb3dzQWZ0ZXI6IHBhc3RlUm93c0FmdGVyJDEsXG4gICAgICAgIHBhc3RlQ2VsbHM6IHBhc3RlQ2VsbHMkMSxcbiAgICAgICAgbWFrZUNlbGxzSGVhZGVyOiBtYWtlQ2VsbHNIZWFkZXIkMSxcbiAgICAgICAgdW5tYWtlQ2VsbHNIZWFkZXI6IHVubWFrZUNlbGxzSGVhZGVyJDEsXG4gICAgICAgIG1ha2VDb2x1bW5zSGVhZGVyOiBtYWtlQ29sdW1uc0hlYWRlciQxLFxuICAgICAgICB1bm1ha2VDb2x1bW5zSGVhZGVyOiB1bm1ha2VDb2x1bW5zSGVhZGVyJDEsXG4gICAgICAgIG1ha2VSb3dzSGVhZGVyOiBtYWtlUm93c0hlYWRlciQxLFxuICAgICAgICBtYWtlUm93c0JvZHk6IG1ha2VSb3dzQm9keSQxLFxuICAgICAgICBtYWtlUm93c0Zvb3RlcjogbWFrZVJvd3NGb290ZXIkMSxcbiAgICAgICAgZ2V0VGFibGVSb3dUeXBlLFxuICAgICAgICBnZXRUYWJsZUNlbGxUeXBlLFxuICAgICAgICBnZXRUYWJsZUNvbFR5cGVcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnN0cmFpblNwYW4gPSAoZWxlbWVudCwgcHJvcGVydHksIHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50Q29sc3BhbiA9IGdldEF0dHJWYWx1ZShlbGVtZW50LCBwcm9wZXJ0eSwgMSk7XG4gICAgICBpZiAodmFsdWUgPT09IDEgfHwgY3VycmVudENvbHNwYW4gPD0gMSkge1xuICAgICAgICByZW1vdmUkNyhlbGVtZW50LCBwcm9wZXJ0eSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXQkMihlbGVtZW50LCBwcm9wZXJ0eSwgTWF0aC5taW4odmFsdWUsIGN1cnJlbnRDb2xzcGFuKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc0NvbEluUmFuZ2UgPSAobWluQ29sUmFuZ2UsIG1heENvbFJhbmdlKSA9PiBjZWxsID0+IHtcbiAgICAgIGNvbnN0IGVuZENvbCA9IGNlbGwuY29sdW1uICsgY2VsbC5jb2xzcGFuIC0gMTtcbiAgICAgIGNvbnN0IHN0YXJ0Q29sID0gY2VsbC5jb2x1bW47XG4gICAgICByZXR1cm4gZW5kQ29sID49IG1pbkNvbFJhbmdlICYmIHN0YXJ0Q29sIDwgbWF4Q29sUmFuZ2U7XG4gICAgfTtcbiAgICBjb25zdCBnZW5lcmF0ZUNvbEdyb3VwID0gKGhvdXNlLCBtaW5Db2xSYW5nZSwgbWF4Q29sUmFuZ2UpID0+IHtcbiAgICAgIGlmIChXYXJlaG91c2UuaGFzQ29sdW1ucyhob3VzZSkpIHtcbiAgICAgICAgY29uc3QgY29sc1RvQ29weSA9IGZpbHRlciQyKFdhcmVob3VzZS5qdXN0Q29sdW1ucyhob3VzZSksIGlzQ29sSW5SYW5nZShtaW5Db2xSYW5nZSwgbWF4Q29sUmFuZ2UpKTtcbiAgICAgICAgY29uc3QgY29waWVkQ29scyA9IG1hcCQxKGNvbHNUb0NvcHksIGMgPT4ge1xuICAgICAgICAgIGNvbnN0IGNsb25lZENvbCA9IGRlZXAoYy5lbGVtZW50KTtcbiAgICAgICAgICBjb25zdHJhaW5TcGFuKGNsb25lZENvbCwgJ3NwYW4nLCBtYXhDb2xSYW5nZSAtIG1pbkNvbFJhbmdlKTtcbiAgICAgICAgICByZXR1cm4gY2xvbmVkQ29sO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZmFrZUNvbGdyb3VwID0gU3VnYXJFbGVtZW50LmZyb21UYWcoJ2NvbGdyb3VwJyk7XG4gICAgICAgIGFwcGVuZChmYWtlQ29sZ3JvdXAsIGNvcGllZENvbHMpO1xuICAgICAgICByZXR1cm4gW2Zha2VDb2xncm91cF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZW5lcmF0ZVJvd3MgPSAoaG91c2UsIG1pbkNvbFJhbmdlLCBtYXhDb2xSYW5nZSkgPT4gbWFwJDEoaG91c2UuYWxsLCByb3cgPT4ge1xuICAgICAgY29uc3QgY2VsbHNUb0NvcHkgPSBmaWx0ZXIkMihyb3cuY2VsbHMsIGlzQ29sSW5SYW5nZShtaW5Db2xSYW5nZSwgbWF4Q29sUmFuZ2UpKTtcbiAgICAgIGNvbnN0IGNvcGllZENlbGxzID0gbWFwJDEoY2VsbHNUb0NvcHksIGNlbGwgPT4ge1xuICAgICAgICBjb25zdCBjbG9uZWRDZWxsID0gZGVlcChjZWxsLmVsZW1lbnQpO1xuICAgICAgICBjb25zdHJhaW5TcGFuKGNsb25lZENlbGwsICdjb2xzcGFuJywgbWF4Q29sUmFuZ2UgLSBtaW5Db2xSYW5nZSk7XG4gICAgICAgIHJldHVybiBjbG9uZWRDZWxsO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBmYWtlVFIgPSBTdWdhckVsZW1lbnQuZnJvbVRhZygndHInKTtcbiAgICAgIGFwcGVuZChmYWtlVFIsIGNvcGllZENlbGxzKTtcbiAgICAgIHJldHVybiBmYWtlVFI7XG4gICAgfSk7XG4gICAgY29uc3QgY29weUNvbHMgPSAodGFibGUsIHRhcmdldCkgPT4ge1xuICAgICAgY29uc3QgaG91c2UgPSBXYXJlaG91c2UuZnJvbVRhYmxlKHRhYmxlKTtcbiAgICAgIGNvbnN0IGRldGFpbHMgPSBvblVubG9ja2VkQ2VsbHMoaG91c2UsIHRhcmdldCk7XG4gICAgICByZXR1cm4gZGV0YWlscy5tYXAoc2VsZWN0ZWRDZWxscyA9PiB7XG4gICAgICAgIGNvbnN0IGxhc3RTZWxlY3RlZENlbGwgPSBzZWxlY3RlZENlbGxzW3NlbGVjdGVkQ2VsbHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IG1pbkNvbFJhbmdlID0gc2VsZWN0ZWRDZWxsc1swXS5jb2x1bW47XG4gICAgICAgIGNvbnN0IG1heENvbFJhbmdlID0gbGFzdFNlbGVjdGVkQ2VsbC5jb2x1bW4gKyBsYXN0U2VsZWN0ZWRDZWxsLmNvbHNwYW47XG4gICAgICAgIGNvbnN0IGZha2VDb2xHcm91cHMgPSBnZW5lcmF0ZUNvbEdyb3VwKGhvdXNlLCBtaW5Db2xSYW5nZSwgbWF4Q29sUmFuZ2UpO1xuICAgICAgICBjb25zdCBmYWtlUm93cyA9IGdlbmVyYXRlUm93cyhob3VzZSwgbWluQ29sUmFuZ2UsIG1heENvbFJhbmdlKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAuLi5mYWtlQ29sR3JvdXBzLFxuICAgICAgICAgIC4uLmZha2VSb3dzXG4gICAgICAgIF07XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgY29weVJvd3MgPSAodGFibGUsIHRhcmdldCwgZ2VuZXJhdG9ycykgPT4ge1xuICAgICAgY29uc3Qgd2FyZWhvdXNlID0gV2FyZWhvdXNlLmZyb21UYWJsZSh0YWJsZSk7XG4gICAgICBjb25zdCBkZXRhaWxzID0gb25DZWxscyh3YXJlaG91c2UsIHRhcmdldCk7XG4gICAgICByZXR1cm4gZGV0YWlscy5iaW5kKHNlbGVjdGVkQ2VsbHMgPT4ge1xuICAgICAgICBjb25zdCBncmlkID0gdG9HcmlkKHdhcmVob3VzZSwgZ2VuZXJhdG9ycywgZmFsc2UpO1xuICAgICAgICBjb25zdCByb3dzID0gZXh0cmFjdEdyaWREZXRhaWxzKGdyaWQpLnJvd3M7XG4gICAgICAgIGNvbnN0IHNsaWNlZEdyaWQgPSByb3dzLnNsaWNlKHNlbGVjdGVkQ2VsbHNbMF0ucm93LCBzZWxlY3RlZENlbGxzW3NlbGVjdGVkQ2VsbHMubGVuZ3RoIC0gMV0ucm93ICsgc2VsZWN0ZWRDZWxsc1tzZWxlY3RlZENlbGxzLmxlbmd0aCAtIDFdLnJvd3NwYW4pO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEdyaWQgPSBiaW5kJDIoc2xpY2VkR3JpZCwgcm93ID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdDZWxscyA9IGZpbHRlciQyKHJvdy5jZWxscywgY2VsbCA9PiAhY2VsbC5pc0xvY2tlZCk7XG4gICAgICAgICAgcmV0dXJuIG5ld0NlbGxzLmxlbmd0aCA+IDAgPyBbe1xuICAgICAgICAgICAgICAuLi5yb3csXG4gICAgICAgICAgICAgIGNlbGxzOiBuZXdDZWxsc1xuICAgICAgICAgICAgfV0gOiBbXTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNsaWNlZERldGFpbHMgPSB0b0RldGFpbExpc3QoZmlsdGVyZWRHcmlkKTtcbiAgICAgICAgcmV0dXJuIHNvbWVJZihzbGljZWREZXRhaWxzLmxlbmd0aCA+IDAsIHNsaWNlZERldGFpbHMpO1xuICAgICAgfSkubWFwKHNsaWNlZERldGFpbHMgPT4gY29weShzbGljZWREZXRhaWxzKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFkdCQ1ID0gQWR0LmdlbmVyYXRlKFtcbiAgICAgIHsgaW52YWxpZDogWydyYXcnXSB9LFxuICAgICAgeyBwaXhlbHM6IFsndmFsdWUnXSB9LFxuICAgICAgeyBwZXJjZW50OiBbJ3ZhbHVlJ10gfVxuICAgIF0pO1xuICAgIGNvbnN0IHZhbGlkYXRlRm9yID0gKHN1ZmZpeCwgdHlwZSwgdmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IHJhd0Ftb3VudCA9IHZhbHVlLnN1YnN0cmluZygwLCB2YWx1ZS5sZW5ndGggLSBzdWZmaXgubGVuZ3RoKTtcbiAgICAgIGNvbnN0IGFtb3VudCA9IHBhcnNlRmxvYXQocmF3QW1vdW50KTtcbiAgICAgIHJldHVybiByYXdBbW91bnQgPT09IGFtb3VudC50b1N0cmluZygpID8gdHlwZShhbW91bnQpIDogYWR0JDUuaW52YWxpZCh2YWx1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tID0gdmFsdWUgPT4ge1xuICAgICAgaWYgKGVuZHNXaXRoKHZhbHVlLCAnJScpKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZUZvcignJScsIGFkdCQ1LnBlcmNlbnQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbmRzV2l0aCh2YWx1ZSwgJ3B4JykpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlRm9yKCdweCcsIGFkdCQ1LnBpeGVscywgdmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFkdCQ1LmludmFsaWQodmFsdWUpO1xuICAgIH07XG4gICAgY29uc3QgU2l6ZSA9IHtcbiAgICAgIC4uLmFkdCQ1LFxuICAgICAgZnJvbVxuICAgIH07XG5cbiAgICBjb25zdCByZWRpc3RyaWJ1dGVUb1BlcmNlbnQgPSAod2lkdGhzLCB0b3RhbFdpZHRoKSA9PiB7XG4gICAgICByZXR1cm4gbWFwJDEod2lkdGhzLCB3ID0+IHtcbiAgICAgICAgY29uc3QgY29sVHlwZSA9IFNpemUuZnJvbSh3KTtcbiAgICAgICAgcmV0dXJuIGNvbFR5cGUuZm9sZCgoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHc7XG4gICAgICAgIH0sIHB4ID0+IHtcbiAgICAgICAgICBjb25zdCByYXRpbyA9IHB4IC8gdG90YWxXaWR0aCAqIDEwMDtcbiAgICAgICAgICByZXR1cm4gcmF0aW8gKyAnJSc7XG4gICAgICAgIH0sIHBjID0+IHtcbiAgICAgICAgICByZXR1cm4gcGMgKyAnJSc7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWRpc3RyaWJ1dGVUb1B4ID0gKHdpZHRocywgdG90YWxXaWR0aCwgbmV3VG90YWxXaWR0aCkgPT4ge1xuICAgICAgY29uc3Qgc2NhbGUgPSBuZXdUb3RhbFdpZHRoIC8gdG90YWxXaWR0aDtcbiAgICAgIHJldHVybiBtYXAkMSh3aWR0aHMsIHcgPT4ge1xuICAgICAgICBjb25zdCBjb2xUeXBlID0gU2l6ZS5mcm9tKHcpO1xuICAgICAgICByZXR1cm4gY29sVHlwZS5mb2xkKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gdztcbiAgICAgICAgfSwgcHggPT4ge1xuICAgICAgICAgIHJldHVybiBweCAqIHNjYWxlICsgJ3B4JztcbiAgICAgICAgfSwgcGMgPT4ge1xuICAgICAgICAgIHJldHVybiBwYyAvIDEwMCAqIG5ld1RvdGFsV2lkdGggKyAncHgnO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVkaXN0cmlidXRlRW1wdHkgPSAobmV3V2lkdGhUeXBlLCBjb2x1bW5zKSA9PiB7XG4gICAgICBjb25zdCBmID0gbmV3V2lkdGhUeXBlLmZvbGQoKCkgPT4gY29uc3RhbnQoJycpLCBwaXhlbHMgPT4ge1xuICAgICAgICBjb25zdCBudW0gPSBwaXhlbHMgLyBjb2x1bW5zO1xuICAgICAgICByZXR1cm4gY29uc3RhbnQobnVtICsgJ3B4Jyk7XG4gICAgICB9LCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG51bSA9IDEwMCAvIGNvbHVtbnM7XG4gICAgICAgIHJldHVybiBjb25zdGFudChudW0gKyAnJScpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmFuZ2UkMShjb2x1bW5zLCBmKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZGlzdHJpYnV0ZVZhbHVlcyA9IChuZXdXaWR0aFR5cGUsIHdpZHRocywgdG90YWxXaWR0aCkgPT4ge1xuICAgICAgcmV0dXJuIG5ld1dpZHRoVHlwZS5mb2xkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHdpZHRocztcbiAgICAgIH0sIHB4ID0+IHtcbiAgICAgICAgcmV0dXJuIHJlZGlzdHJpYnV0ZVRvUHgod2lkdGhzLCB0b3RhbFdpZHRoLCBweCk7XG4gICAgICB9LCBfcGMgPT4ge1xuICAgICAgICByZXR1cm4gcmVkaXN0cmlidXRlVG9QZXJjZW50KHdpZHRocywgdG90YWxXaWR0aCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZGlzdHJpYnV0ZSQxID0gKHdpZHRocywgdG90YWxXaWR0aCwgbmV3V2lkdGgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1R5cGUgPSBTaXplLmZyb20obmV3V2lkdGgpO1xuICAgICAgY29uc3QgZmxvYXRzID0gZm9yYWxsKHdpZHRocywgcyA9PiB7XG4gICAgICAgIHJldHVybiBzID09PSAnMHB4JztcbiAgICAgIH0pID8gcmVkaXN0cmlidXRlRW1wdHkobmV3VHlwZSwgd2lkdGhzLmxlbmd0aCkgOiByZWRpc3RyaWJ1dGVWYWx1ZXMobmV3VHlwZSwgd2lkdGhzLCB0b3RhbFdpZHRoKTtcbiAgICAgIHJldHVybiBub3JtYWxpemUoZmxvYXRzKTtcbiAgICB9O1xuICAgIGNvbnN0IHN1bSA9ICh2YWx1ZXMsIGZhbGxiYWNrKSA9PiB7XG4gICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9sZHIodmFsdWVzLCAocmVzdCwgdikgPT4ge1xuICAgICAgICByZXR1cm4gU2l6ZS5mcm9tKHYpLmZvbGQoY29uc3RhbnQoMCksIGlkZW50aXR5LCBpZGVudGl0eSkgKyByZXN0O1xuICAgICAgfSwgMCk7XG4gICAgfTtcbiAgICBjb25zdCByb3VuZERvd24gPSAobnVtLCB1bml0KSA9PiB7XG4gICAgICBjb25zdCBmbG9vcmVkID0gTWF0aC5mbG9vcihudW0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IGZsb29yZWQgKyB1bml0LFxuICAgICAgICByZW1haW5kZXI6IG51bSAtIGZsb29yZWRcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBhZGQkMyA9ICh2YWx1ZSwgYW1vdW50KSA9PiB7XG4gICAgICByZXR1cm4gU2l6ZS5mcm9tKHZhbHVlKS5mb2xkKGNvbnN0YW50KHZhbHVlKSwgcHggPT4ge1xuICAgICAgICByZXR1cm4gcHggKyBhbW91bnQgKyAncHgnO1xuICAgICAgfSwgcGMgPT4ge1xuICAgICAgICByZXR1cm4gcGMgKyBhbW91bnQgKyAnJSc7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZSA9IHZhbHVlcyA9PiB7XG4gICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2NhbiA9IGZvbGRyKHZhbHVlcywgKHJlc3QsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZm8gPSBTaXplLmZyb20odmFsdWUpLmZvbGQoKCkgPT4gKHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICByZW1haW5kZXI6IDBcbiAgICAgICAgfSksIG51bSA9PiByb3VuZERvd24obnVtLCAncHgnKSwgbnVtID0+ICh7XG4gICAgICAgICAgdmFsdWU6IG51bSArICclJyxcbiAgICAgICAgICByZW1haW5kZXI6IDBcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG91dHB1dDogW2luZm8udmFsdWVdLmNvbmNhdChyZXN0Lm91dHB1dCksXG4gICAgICAgICAgcmVtYWluZGVyOiByZXN0LnJlbWFpbmRlciArIGluZm8ucmVtYWluZGVyXG4gICAgICAgIH07XG4gICAgICB9LCB7XG4gICAgICAgIG91dHB1dDogW10sXG4gICAgICAgIHJlbWFpbmRlcjogMFxuICAgICAgfSk7XG4gICAgICBjb25zdCByID0gc2Nhbi5vdXRwdXQ7XG4gICAgICByZXR1cm4gci5zbGljZSgwLCByLmxlbmd0aCAtIDEpLmNvbmNhdChbYWRkJDMocltyLmxlbmd0aCAtIDFdLCBNYXRoLnJvdW5kKHNjYW4ucmVtYWluZGVyKSldKTtcbiAgICB9O1xuICAgIGNvbnN0IHZhbGlkYXRlID0gU2l6ZS5mcm9tO1xuXG4gICAgY29uc3QgcmVkaXN0cmlidXRlVG9XID0gKG5ld1dpZHRocywgY2VsbHMsIHVuaXQpID0+IHtcbiAgICAgIGVhY2gkMihjZWxscywgY2VsbCA9PiB7XG4gICAgICAgIGNvbnN0IHdpZHRocyA9IG5ld1dpZHRocy5zbGljZShjZWxsLmNvbHVtbiwgY2VsbC5jb2xzcGFuICsgY2VsbC5jb2x1bW4pO1xuICAgICAgICBjb25zdCB3ID0gc3VtKHdpZHRocywgbWluV2lkdGgoKSk7XG4gICAgICAgIHNldCQxKGNlbGwuZWxlbWVudCwgJ3dpZHRoJywgdyArIHVuaXQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWRpc3RyaWJ1dGVUb0NvbHVtbnMgPSAobmV3V2lkdGhzLCBjb2x1bW5zLCB1bml0KSA9PiB7XG4gICAgICBlYWNoJDIoY29sdW1ucywgKGNvbHVtbiwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBzdW0oW25ld1dpZHRoc1tpbmRleF1dLCBtaW5XaWR0aCgpKTtcbiAgICAgICAgc2V0JDEoY29sdW1uLmVsZW1lbnQsICd3aWR0aCcsIHdpZHRoICsgdW5pdCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZGlzdHJpYnV0ZVRvSCA9IChuZXdIZWlnaHRzLCByb3dzLCBjZWxscywgdW5pdCkgPT4ge1xuICAgICAgZWFjaCQyKGNlbGxzLCBjZWxsID0+IHtcbiAgICAgICAgY29uc3QgaGVpZ2h0cyA9IG5ld0hlaWdodHMuc2xpY2UoY2VsbC5yb3csIGNlbGwucm93c3BhbiArIGNlbGwucm93KTtcbiAgICAgICAgY29uc3QgaCA9IHN1bShoZWlnaHRzLCBtaW5IZWlnaHQoKSk7XG4gICAgICAgIHNldCQxKGNlbGwuZWxlbWVudCwgJ2hlaWdodCcsIGggKyB1bml0KTtcbiAgICAgIH0pO1xuICAgICAgZWFjaCQyKHJvd3MsIChyb3csIGkpID0+IHtcbiAgICAgICAgc2V0JDEocm93LmVsZW1lbnQsICdoZWlnaHQnLCBuZXdIZWlnaHRzW2ldKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0VW5pdCA9IG5ld1NpemUgPT4ge1xuICAgICAgcmV0dXJuIHZhbGlkYXRlKG5ld1NpemUpLmZvbGQoY29uc3RhbnQoJ3B4JyksIGNvbnN0YW50KCdweCcpLCBjb25zdGFudCgnJScpKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZGlzdHJpYnV0ZSA9ICh0YWJsZSwgb3B0V2lkdGgsIG9wdEhlaWdodCkgPT4ge1xuICAgICAgY29uc3Qgd2FyZWhvdXNlID0gV2FyZWhvdXNlLmZyb21UYWJsZSh0YWJsZSk7XG4gICAgICBjb25zdCByb3dzID0gd2FyZWhvdXNlLmFsbDtcbiAgICAgIGNvbnN0IGNlbGxzID0gV2FyZWhvdXNlLmp1c3RDZWxscyh3YXJlaG91c2UpO1xuICAgICAgY29uc3QgY29sdW1ucyA9IFdhcmVob3VzZS5qdXN0Q29sdW1ucyh3YXJlaG91c2UpO1xuICAgICAgb3B0V2lkdGguZWFjaChuZXdXaWR0aCA9PiB7XG4gICAgICAgIGNvbnN0IHdpZHRoVW5pdCA9IGdldFVuaXQobmV3V2lkdGgpO1xuICAgICAgICBjb25zdCB0b3RhbFdpZHRoID0gZ2V0JDkodGFibGUpO1xuICAgICAgICBjb25zdCBvbGRXaWR0aHMgPSBnZXRSYXdXaWR0aHMod2FyZWhvdXNlLCB0YWJsZSk7XG4gICAgICAgIGNvbnN0IG51V2lkdGhzID0gcmVkaXN0cmlidXRlJDEob2xkV2lkdGhzLCB0b3RhbFdpZHRoLCBuZXdXaWR0aCk7XG4gICAgICAgIGlmIChXYXJlaG91c2UuaGFzQ29sdW1ucyh3YXJlaG91c2UpKSB7XG4gICAgICAgICAgcmVkaXN0cmlidXRlVG9Db2x1bW5zKG51V2lkdGhzLCBjb2x1bW5zLCB3aWR0aFVuaXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZGlzdHJpYnV0ZVRvVyhudVdpZHRocywgY2VsbHMsIHdpZHRoVW5pdCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0JDEodGFibGUsICd3aWR0aCcsIG5ld1dpZHRoKTtcbiAgICAgIH0pO1xuICAgICAgb3B0SGVpZ2h0LmVhY2gobmV3SGVpZ2h0ID0+IHtcbiAgICAgICAgY29uc3QgaFVuaXQgPSBnZXRVbml0KG5ld0hlaWdodCk7XG4gICAgICAgIGNvbnN0IHRvdGFsSGVpZ2h0ID0gZ2V0JDgodGFibGUpO1xuICAgICAgICBjb25zdCBvbGRIZWlnaHRzID0gZ2V0UmF3SGVpZ2h0cyh3YXJlaG91c2UsIHRhYmxlLCBoZWlnaHQpO1xuICAgICAgICBjb25zdCBudUhlaWdodHMgPSByZWRpc3RyaWJ1dGUkMShvbGRIZWlnaHRzLCB0b3RhbEhlaWdodCwgbmV3SGVpZ2h0KTtcbiAgICAgICAgcmVkaXN0cmlidXRlVG9IKG51SGVpZ2h0cywgcm93cywgY2VsbHMsIGhVbml0KTtcbiAgICAgICAgc2V0JDEodGFibGUsICdoZWlnaHQnLCBuZXdIZWlnaHQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBpc1BlcmNlbnRTaXppbmcgPSBpc1BlcmNlbnRTaXppbmckMTtcbiAgICBjb25zdCBpc1BpeGVsU2l6aW5nID0gaXNQaXhlbFNpemluZyQxO1xuICAgIGNvbnN0IGlzTm9uZVNpemluZyA9IGlzTm9uZVNpemluZyQxO1xuXG4gICAgY29uc3QgY2xlYW51cExlZ2FjeUF0dHJpYnV0ZXMgPSBlbGVtZW50ID0+IHtcbiAgICAgIHJlbW92ZSQ3KGVsZW1lbnQsICd3aWR0aCcpO1xuICAgIH07XG4gICAgY29uc3QgY29udmVydFRvUGVyY2VudFNpemUgPSB0YWJsZSA9PiB7XG4gICAgICBjb25zdCBuZXdXaWR0aCA9IGdldFBlcmNlbnRUYWJsZVdpZHRoKHRhYmxlKTtcbiAgICAgIHJlZGlzdHJpYnV0ZSh0YWJsZSwgT3B0aW9uYWwuc29tZShuZXdXaWR0aCksIE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgICBjbGVhbnVwTGVnYWN5QXR0cmlidXRlcyh0YWJsZSk7XG4gICAgfTtcbiAgICBjb25zdCBjb252ZXJ0VG9QaXhlbFNpemUgPSB0YWJsZSA9PiB7XG4gICAgICBjb25zdCBuZXdXaWR0aCA9IGdldFBpeGVsVGFibGVXaWR0aCh0YWJsZSk7XG4gICAgICByZWRpc3RyaWJ1dGUodGFibGUsIE9wdGlvbmFsLnNvbWUobmV3V2lkdGgpLCBPcHRpb25hbC5ub25lKCkpO1xuICAgICAgY2xlYW51cExlZ2FjeUF0dHJpYnV0ZXModGFibGUpO1xuICAgIH07XG4gICAgY29uc3QgY29udmVydFRvTm9uZVNpemUgPSB0YWJsZSA9PiB7XG4gICAgICByZW1vdmUkNSh0YWJsZSwgJ3dpZHRoJyk7XG4gICAgICBjb25zdCBjb2x1bW5zID0gY29sdW1ucyQxKHRhYmxlKTtcbiAgICAgIGNvbnN0IHJvd0VsZW1lbnRzID0gY29sdW1ucy5sZW5ndGggPiAwID8gY29sdW1ucyA6IGNlbGxzJDEodGFibGUpO1xuICAgICAgZWFjaCQyKHJvd0VsZW1lbnRzLCBjZWxsID0+IHtcbiAgICAgICAgcmVtb3ZlJDUoY2VsbCwgJ3dpZHRoJyk7XG4gICAgICAgIGNsZWFudXBMZWdhY3lBdHRyaWJ1dGVzKGNlbGwpO1xuICAgICAgfSk7XG4gICAgICBjbGVhbnVwTGVnYWN5QXR0cmlidXRlcyh0YWJsZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IERlZmF1bHRSZW5kZXJPcHRpb25zID0ge1xuICAgICAgc3R5bGVzOiB7XG4gICAgICAgICdib3JkZXItY29sbGFwc2UnOiAnY29sbGFwc2UnLFxuICAgICAgICAnd2lkdGgnOiAnMTAwJSdcbiAgICAgIH0sXG4gICAgICBhdHRyaWJ1dGVzOiB7IGJvcmRlcjogJzEnIH0sXG4gICAgICBjb2xHcm91cHM6IGZhbHNlXG4gICAgfTtcbiAgICBjb25zdCB0YWJsZUhlYWRlckNlbGwgPSAoKSA9PiBTdWdhckVsZW1lbnQuZnJvbVRhZygndGgnKTtcbiAgICBjb25zdCB0YWJsZUNlbGwgPSAoKSA9PiBTdWdhckVsZW1lbnQuZnJvbVRhZygndGQnKTtcbiAgICBjb25zdCB0YWJsZUNvbHVtbiA9ICgpID0+IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdjb2wnKTtcbiAgICBjb25zdCBjcmVhdGVSb3cgPSAoY29sdW1ucywgcm93SGVhZGVycywgY29sdW1uSGVhZGVycywgcm93SW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHRyID0gU3VnYXJFbGVtZW50LmZyb21UYWcoJ3RyJyk7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICBjb25zdCB0ZCA9IHJvd0luZGV4IDwgcm93SGVhZGVycyB8fCBqIDwgY29sdW1uSGVhZGVycyA/IHRhYmxlSGVhZGVyQ2VsbCgpIDogdGFibGVDZWxsKCk7XG4gICAgICAgIGlmIChqIDwgY29sdW1uSGVhZGVycykge1xuICAgICAgICAgIHNldCQyKHRkLCAnc2NvcGUnLCAncm93Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvd0luZGV4IDwgcm93SGVhZGVycykge1xuICAgICAgICAgIHNldCQyKHRkLCAnc2NvcGUnLCAnY29sJyk7XG4gICAgICAgIH1cbiAgICAgICAgYXBwZW5kJDEodGQsIFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdicicpKTtcbiAgICAgICAgYXBwZW5kJDEodHIsIHRkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cjtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUdyb3VwUm93ID0gY29sdW1ucyA9PiB7XG4gICAgICBjb25zdCBjb2x1bW5Hcm91cCA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdjb2xncm91cCcpO1xuICAgICAgcmFuZ2UkMShjb2x1bW5zLCAoKSA9PiBhcHBlbmQkMShjb2x1bW5Hcm91cCwgdGFibGVDb2x1bW4oKSkpO1xuICAgICAgcmV0dXJuIGNvbHVtbkdyb3VwO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlUm93cyA9IChyb3dzLCBjb2x1bW5zLCByb3dIZWFkZXJzLCBjb2x1bW5IZWFkZXJzKSA9PiByYW5nZSQxKHJvd3MsIHIgPT4gY3JlYXRlUm93KGNvbHVtbnMsIHJvd0hlYWRlcnMsIGNvbHVtbkhlYWRlcnMsIHIpKTtcbiAgICBjb25zdCByZW5kZXIgPSAocm93cywgY29sdW1ucywgcm93SGVhZGVycywgY29sdW1uSGVhZGVycywgaGVhZGVyVHlwZSwgcmVuZGVyT3B0cyA9IERlZmF1bHRSZW5kZXJPcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCB0YWJsZSA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCd0YWJsZScpO1xuICAgICAgY29uc3Qgcm93SGVhZGVyc0dvSW5UaGVhZCA9IGhlYWRlclR5cGUgIT09ICdjZWxscyc7XG4gICAgICBzZXRBbGwodGFibGUsIHJlbmRlck9wdHMuc3R5bGVzKTtcbiAgICAgIHNldEFsbCQxKHRhYmxlLCByZW5kZXJPcHRzLmF0dHJpYnV0ZXMpO1xuICAgICAgaWYgKHJlbmRlck9wdHMuY29sR3JvdXBzKSB7XG4gICAgICAgIGFwcGVuZCQxKHRhYmxlLCBjcmVhdGVHcm91cFJvdyhjb2x1bW5zKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBhY3R1YWxSb3dIZWFkZXJzID0gTWF0aC5taW4ocm93cywgcm93SGVhZGVycyk7XG4gICAgICBpZiAocm93SGVhZGVyc0dvSW5UaGVhZCAmJiByb3dIZWFkZXJzID4gMCkge1xuICAgICAgICBjb25zdCB0aGVhZCA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCd0aGVhZCcpO1xuICAgICAgICBhcHBlbmQkMSh0YWJsZSwgdGhlYWQpO1xuICAgICAgICBjb25zdCB0aGVhZFJvd0hlYWRlcnMgPSBoZWFkZXJUeXBlID09PSAnc2VjdGlvbkNlbGxzJyA/IGFjdHVhbFJvd0hlYWRlcnMgOiAwO1xuICAgICAgICBjb25zdCB0aGVhZFJvd3MgPSBjcmVhdGVSb3dzKHJvd0hlYWRlcnMsIGNvbHVtbnMsIHRoZWFkUm93SGVhZGVycywgY29sdW1uSGVhZGVycyk7XG4gICAgICAgIGFwcGVuZCh0aGVhZCwgdGhlYWRSb3dzKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRib2R5ID0gU3VnYXJFbGVtZW50LmZyb21UYWcoJ3Rib2R5Jyk7XG4gICAgICBhcHBlbmQkMSh0YWJsZSwgdGJvZHkpO1xuICAgICAgY29uc3QgbnVtUm93cyA9IHJvd0hlYWRlcnNHb0luVGhlYWQgPyByb3dzIC0gYWN0dWFsUm93SGVhZGVycyA6IHJvd3M7XG4gICAgICBjb25zdCBudW1Sb3dIZWFkZXJzID0gcm93SGVhZGVyc0dvSW5UaGVhZCA/IDAgOiByb3dIZWFkZXJzO1xuICAgICAgY29uc3QgdGJvZHlSb3dzID0gY3JlYXRlUm93cyhudW1Sb3dzLCBjb2x1bW5zLCBudW1Sb3dIZWFkZXJzLCBjb2x1bW5IZWFkZXJzKTtcbiAgICAgIGFwcGVuZCh0Ym9keSwgdGJvZHlSb3dzKTtcbiAgICAgIHJldHVybiB0YWJsZTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0JDQgPSBlbGVtZW50ID0+IGVsZW1lbnQuZG9tLmlubmVySFRNTDtcbiAgICBjb25zdCBnZXRPdXRlciA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gU3VnYXJFbGVtZW50LmZyb21UYWcoJ2RpdicpO1xuICAgICAgY29uc3QgY2xvbmUgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlbGVtZW50LmRvbS5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgYXBwZW5kJDEoY29udGFpbmVyLCBjbG9uZSk7XG4gICAgICByZXR1cm4gZ2V0JDQoY29udGFpbmVyKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcGxhY2VDYXJldEluQ2VsbCA9IChlZGl0b3IsIGNlbGwpID0+IHtcbiAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0KGNlbGwuZG9tLCB0cnVlKTtcbiAgICAgIGVkaXRvci5zZWxlY3Rpb24uY29sbGFwc2UodHJ1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBzZWxlY3RGaXJzdENlbGxJblRhYmxlID0gKGVkaXRvciwgdGFibGVFbG0pID0+IHtcbiAgICAgIGRlc2NlbmRhbnQodGFibGVFbG0sICd0ZCx0aCcpLmVhY2goY3VycnkocGxhY2VDYXJldEluQ2VsbCwgZWRpdG9yKSk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJlRXZlbnRzID0gKGVkaXRvciwgdGFibGUpID0+IHtcbiAgICAgIGVhY2gkMihkZXNjZW5kYW50cyh0YWJsZSwgJ3RyJyksIHJvdyA9PiB7XG4gICAgICAgIGZpcmVOZXdSb3coZWRpdG9yLCByb3cuZG9tKTtcbiAgICAgICAgZWFjaCQyKGRlc2NlbmRhbnRzKHJvdywgJ3RoLHRkJyksIGNlbGwgPT4ge1xuICAgICAgICAgIGZpcmVOZXdDZWxsKGVkaXRvciwgY2VsbC5kb20pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaXNQZXJjZW50YWdlID0gd2lkdGggPT4gaXNTdHJpbmcod2lkdGgpICYmIHdpZHRoLmluZGV4T2YoJyUnKSAhPT0gLTE7XG4gICAgY29uc3QgaW5zZXJ0ID0gKGVkaXRvciwgY29sdW1ucywgcm93cywgY29sSGVhZGVycywgcm93SGVhZGVycykgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdFN0eWxlcyA9IGdldFRhYmxlRGVmYXVsdFN0eWxlcyhlZGl0b3IpO1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgc3R5bGVzOiBkZWZhdWx0U3R5bGVzLFxuICAgICAgICBhdHRyaWJ1dGVzOiBnZXRUYWJsZURlZmF1bHRBdHRyaWJ1dGVzKGVkaXRvciksXG4gICAgICAgIGNvbEdyb3VwczogdGFibGVVc2VDb2x1bW5Hcm91cChlZGl0b3IpXG4gICAgICB9O1xuICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLmlnbm9yZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gcmVuZGVyKHJvd3MsIGNvbHVtbnMsIHJvd0hlYWRlcnMsIGNvbEhlYWRlcnMsIGdldFRhYmxlSGVhZGVyVHlwZShlZGl0b3IpLCBvcHRpb25zKTtcbiAgICAgICAgc2V0JDIodGFibGUsICdkYXRhLW1jZS1pZCcsICdfX21jZScpO1xuICAgICAgICBjb25zdCBodG1sID0gZ2V0T3V0ZXIodGFibGUpO1xuICAgICAgICBlZGl0b3IuaW5zZXJ0Q29udGVudChodG1sKTtcbiAgICAgICAgZWRpdG9yLmFkZFZpc3VhbCgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGVzY2VuZGFudChnZXRCb2R5KGVkaXRvciksICd0YWJsZVtkYXRhLW1jZS1pZD1cIl9fbWNlXCJdJykubWFwKHRhYmxlID0+IHtcbiAgICAgICAgaWYgKGlzVGFibGVQaXhlbHNGb3JjZWQoZWRpdG9yKSkge1xuICAgICAgICAgIGNvbnZlcnRUb1BpeGVsU2l6ZSh0YWJsZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNUYWJsZVJlc3BvbnNpdmVGb3JjZWQoZWRpdG9yKSkge1xuICAgICAgICAgIGNvbnZlcnRUb05vbmVTaXplKHRhYmxlKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1RhYmxlUGVyY2VudGFnZXNGb3JjZWQoZWRpdG9yKSB8fCBpc1BlcmNlbnRhZ2UoZGVmYXVsdFN0eWxlcy53aWR0aCkpIHtcbiAgICAgICAgICBjb252ZXJ0VG9QZXJjZW50U2l6ZSh0YWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlRGF0YVN0eWxlKHRhYmxlKTtcbiAgICAgICAgcmVtb3ZlJDcodGFibGUsICdkYXRhLW1jZS1pZCcpO1xuICAgICAgICBmaXJlRXZlbnRzKGVkaXRvciwgdGFibGUpO1xuICAgICAgICBzZWxlY3RGaXJzdENlbGxJblRhYmxlKGVkaXRvciwgdGFibGUpO1xuICAgICAgICByZXR1cm4gdGFibGUuZG9tO1xuICAgICAgfSkuZ2V0T3JOdWxsKCk7XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnRUYWJsZSA9IChlZGl0b3IsIHJvd3MsIGNvbHVtbnMsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgY2hlY2tJbnB1dCA9IHZhbCA9PiBpc051bWJlcih2YWwpICYmIHZhbCA+IDA7XG4gICAgICBpZiAoY2hlY2tJbnB1dChyb3dzKSAmJiBjaGVja0lucHV0KGNvbHVtbnMpKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlclJvd3MgPSBvcHRpb25zLmhlYWRlclJvd3MgfHwgMDtcbiAgICAgICAgY29uc3QgaGVhZGVyQ29sdW1ucyA9IG9wdGlvbnMuaGVhZGVyQ29sdW1ucyB8fCAwO1xuICAgICAgICByZXR1cm4gaW5zZXJ0KGVkaXRvciwgY29sdW1ucywgcm93cywgaGVhZGVyQ29sdW1ucywgaGVhZGVyUm93cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIHZhbHVlcyBmb3IgbWNlSW5zZXJ0VGFibGUgLSByb3dzIGFuZCBjb2x1bW5zIHZhbHVlcyBhcmUgcmVxdWlyZWQgdG8gaW5zZXJ0IGEgdGFibGUuJyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgZ2xvYmFsID0gdGlueW1jZS51dGlsLlRvb2xzLnJlc29sdmUoJ3RpbnltY2UuRmFrZUNsaXBib2FyZCcpO1xuXG4gICAgY29uc3QgdGFibGVUeXBlQmFzZSA9ICd4LXRpbnltY2UvZG9tLXRhYmxlLSc7XG4gICAgY29uc3QgdGFibGVUeXBlUm93ID0gdGFibGVUeXBlQmFzZSArICdyb3dzJztcbiAgICBjb25zdCB0YWJsZVR5cGVDb2x1bW4gPSB0YWJsZVR5cGVCYXNlICsgJ2NvbHVtbnMnO1xuICAgIGNvbnN0IHNldERhdGEgPSBpdGVtcyA9PiB7XG4gICAgICBjb25zdCBmYWtlQ2xpcGJvYXJkSXRlbSA9IGdsb2JhbC5GYWtlQ2xpcGJvYXJkSXRlbShpdGVtcyk7XG4gICAgICBnbG9iYWwud3JpdGUoW2Zha2VDbGlwYm9hcmRJdGVtXSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXREYXRhID0gdHlwZSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBpdGVtcyA9IChfYSA9IGdsb2JhbC5yZWFkKCkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdO1xuICAgICAgcmV0dXJuIGZpbmRNYXAoaXRlbXMsIGl0ZW0gPT4gT3B0aW9uYWwuZnJvbShpdGVtLmdldFR5cGUodHlwZSkpKTtcbiAgICB9O1xuICAgIGNvbnN0IGNsZWFyRGF0YSA9IHR5cGUgPT4ge1xuICAgICAgaWYgKGdldERhdGEodHlwZSkuaXNTb21lKCkpIHtcbiAgICAgICAgZ2xvYmFsLmNsZWFyKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXRSb3dzID0gcm93c09wdCA9PiB7XG4gICAgICByb3dzT3B0LmZvbGQoY2xlYXJSb3dzLCByb3dzID0+IHNldERhdGEoeyBbdGFibGVUeXBlUm93XTogcm93cyB9KSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRSb3dzID0gKCkgPT4gZ2V0RGF0YSh0YWJsZVR5cGVSb3cpO1xuICAgIGNvbnN0IGNsZWFyUm93cyA9ICgpID0+IGNsZWFyRGF0YSh0YWJsZVR5cGVSb3cpO1xuICAgIGNvbnN0IHNldENvbHVtbnMgPSBjb2x1bW5zT3B0ID0+IHtcbiAgICAgIGNvbHVtbnNPcHQuZm9sZChjbGVhckNvbHVtbnMsIGNvbHVtbnMgPT4gc2V0RGF0YSh7IFt0YWJsZVR5cGVDb2x1bW5dOiBjb2x1bW5zIH0pKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldENvbHVtbnMgPSAoKSA9PiBnZXREYXRhKHRhYmxlVHlwZUNvbHVtbik7XG4gICAgY29uc3QgY2xlYXJDb2x1bW5zID0gKCkgPT4gY2xlYXJEYXRhKHRhYmxlVHlwZUNvbHVtbik7XG5cbiAgICBjb25zdCBnZXRTZWxlY3Rpb25TdGFydENlbGxPckNhcHRpb24gPSBlZGl0b3IgPT4gZ2V0U2VsZWN0aW9uQ2VsbE9yQ2FwdGlvbihnZXRTZWxlY3Rpb25TdGFydChlZGl0b3IpLCBnZXRJc1Jvb3QoZWRpdG9yKSkuZmlsdGVyKGlzSW5FZGl0YWJsZUNvbnRleHQkMSk7XG4gICAgY29uc3QgZ2V0U2VsZWN0aW9uU3RhcnRDZWxsID0gZWRpdG9yID0+IGdldFNlbGVjdGlvbkNlbGwoZ2V0U2VsZWN0aW9uU3RhcnQoZWRpdG9yKSwgZ2V0SXNSb290KGVkaXRvcikpLmZpbHRlcihpc0luRWRpdGFibGVDb250ZXh0JDEpO1xuICAgIGNvbnN0IHJlZ2lzdGVyQ29tbWFuZHMgPSAoZWRpdG9yLCBhY3Rpb25zKSA9PiB7XG4gICAgICBjb25zdCBpc1Jvb3QgPSBnZXRJc1Jvb3QoZWRpdG9yKTtcbiAgICAgIGNvbnN0IGVyYXNlVGFibGUgPSAoKSA9PiBnZXRTZWxlY3Rpb25TdGFydENlbGxPckNhcHRpb24oZWRpdG9yKS5lYWNoKGNlbGxPckNhcHRpb24gPT4ge1xuICAgICAgICB0YWJsZShjZWxsT3JDYXB0aW9uLCBpc1Jvb3QpLmZpbHRlcihub3QoaXNSb290KSkuZWFjaCh0YWJsZSA9PiB7XG4gICAgICAgICAgY29uc3QgY3Vyc29yID0gU3VnYXJFbGVtZW50LmZyb21UZXh0KCcnKTtcbiAgICAgICAgICBhZnRlciQ1KHRhYmxlLCBjdXJzb3IpO1xuICAgICAgICAgIHJlbW92ZSQ2KHRhYmxlKTtcbiAgICAgICAgICBpZiAoZWRpdG9yLmRvbS5pc0VtcHR5KGVkaXRvci5nZXRCb2R5KCkpKSB7XG4gICAgICAgICAgICBlZGl0b3Iuc2V0Q29udGVudCgnJyk7XG4gICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldEN1cnNvckxvY2F0aW9uKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5kb20uY3JlYXRlUm5nKCk7XG4gICAgICAgICAgICBybmcuc2V0U3RhcnQoY3Vyc29yLmRvbSwgMCk7XG4gICAgICAgICAgICBybmcuc2V0RW5kKGN1cnNvci5kb20sIDApO1xuICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcocm5nKTtcbiAgICAgICAgICAgIGVkaXRvci5ub2RlQ2hhbmdlZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNldFNpemluZ01vZGUgPSBzaXppbmcgPT4gZ2V0U2VsZWN0aW9uU3RhcnRDZWxsT3JDYXB0aW9uKGVkaXRvcikuZWFjaChjZWxsT3JDYXB0aW9uID0+IHtcbiAgICAgICAgY29uc3QgaXNGb3JjZWRTaXppbmcgPSBpc1RhYmxlUmVzcG9uc2l2ZUZvcmNlZChlZGl0b3IpIHx8IGlzVGFibGVQaXhlbHNGb3JjZWQoZWRpdG9yKSB8fCBpc1RhYmxlUGVyY2VudGFnZXNGb3JjZWQoZWRpdG9yKTtcbiAgICAgICAgaWYgKCFpc0ZvcmNlZFNpemluZykge1xuICAgICAgICAgIHRhYmxlKGNlbGxPckNhcHRpb24sIGlzUm9vdCkuZWFjaCh0YWJsZSA9PiB7XG4gICAgICAgICAgICBpZiAoc2l6aW5nID09PSAncmVsYXRpdmUnICYmICFpc1BlcmNlbnRTaXppbmcodGFibGUpKSB7XG4gICAgICAgICAgICAgIGNvbnZlcnRUb1BlcmNlbnRTaXplKHRhYmxlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2l6aW5nID09PSAnZml4ZWQnICYmICFpc1BpeGVsU2l6aW5nKHRhYmxlKSkge1xuICAgICAgICAgICAgICBjb252ZXJ0VG9QaXhlbFNpemUodGFibGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzaXppbmcgPT09ICdyZXNwb25zaXZlJyAmJiAhaXNOb25lU2l6aW5nKHRhYmxlKSkge1xuICAgICAgICAgICAgICBjb252ZXJ0VG9Ob25lU2l6ZSh0YWJsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW1vdmVEYXRhU3R5bGUodGFibGUpO1xuICAgICAgICAgICAgZmlyZVRhYmxlTW9kaWZpZWQoZWRpdG9yLCB0YWJsZS5kb20sIHN0cnVjdHVyZU1vZGlmaWVkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBnZXRUYWJsZUZyb21DZWxsID0gY2VsbCA9PiB0YWJsZShjZWxsLCBpc1Jvb3QpO1xuICAgICAgY29uc3QgcGVyZm9ybUFjdGlvbk9uU2VsZWN0aW9uID0gYWN0aW9uID0+IGdldFNlbGVjdGlvblN0YXJ0Q2VsbChlZGl0b3IpLmJpbmQoY2VsbCA9PiBnZXRUYWJsZUZyb21DZWxsKGNlbGwpLm1hcCh0YWJsZSA9PiBhY3Rpb24odGFibGUsIGNlbGwpKSk7XG4gICAgICBjb25zdCB0b2dnbGVUYWJsZUNsYXNzID0gKF91aSwgY2xhenopID0+IHtcbiAgICAgICAgcGVyZm9ybUFjdGlvbk9uU2VsZWN0aW9uKHRhYmxlID0+IHtcbiAgICAgICAgICBlZGl0b3IuZm9ybWF0dGVyLnRvZ2dsZSgndGFibGVjbGFzcycsIHsgdmFsdWU6IGNsYXp6IH0sIHRhYmxlLmRvbSk7XG4gICAgICAgICAgZmlyZVRhYmxlTW9kaWZpZWQoZWRpdG9yLCB0YWJsZS5kb20sIHN0eWxlTW9kaWZpZWQpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCB0b2dnbGVUYWJsZUNlbGxDbGFzcyA9IChfdWksIGNsYXp6KSA9PiB7XG4gICAgICAgIHBlcmZvcm1BY3Rpb25PblNlbGVjdGlvbih0YWJsZSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxscyA9IGdldENlbGxzRnJvbVNlbGVjdGlvbihlZGl0b3IpO1xuICAgICAgICAgIGNvbnN0IGFsbEhhdmVDbGFzcyA9IGZvcmFsbChzZWxlY3RlZENlbGxzLCBjZWxsID0+IGVkaXRvci5mb3JtYXR0ZXIubWF0Y2goJ3RhYmxlY2VsbGNsYXNzJywgeyB2YWx1ZTogY2xhenogfSwgY2VsbC5kb20pKTtcbiAgICAgICAgICBjb25zdCBmb3JtYXR0ZXJBY3Rpb24gPSBhbGxIYXZlQ2xhc3MgPyBlZGl0b3IuZm9ybWF0dGVyLnJlbW92ZSA6IGVkaXRvci5mb3JtYXR0ZXIuYXBwbHk7XG4gICAgICAgICAgZWFjaCQyKHNlbGVjdGVkQ2VsbHMsIGNlbGwgPT4gZm9ybWF0dGVyQWN0aW9uKCd0YWJsZWNlbGxjbGFzcycsIHsgdmFsdWU6IGNsYXp6IH0sIGNlbGwuZG9tKSk7XG4gICAgICAgICAgZmlyZVRhYmxlTW9kaWZpZWQoZWRpdG9yLCB0YWJsZS5kb20sIHN0eWxlTW9kaWZpZWQpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCB0b2dnbGVDYXB0aW9uID0gKCkgPT4ge1xuICAgICAgICBnZXRTZWxlY3Rpb25TdGFydENlbGxPckNhcHRpb24oZWRpdG9yKS5lYWNoKGNlbGxPckNhcHRpb24gPT4ge1xuICAgICAgICAgIHRhYmxlKGNlbGxPckNhcHRpb24sIGlzUm9vdCkuZWFjaCh0YWJsZSA9PiB7XG4gICAgICAgICAgICBjaGlsZCh0YWJsZSwgJ2NhcHRpb24nKS5mb2xkKCgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY2FwdGlvbiA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdjYXB0aW9uJyk7XG4gICAgICAgICAgICAgIGFwcGVuZCQxKGNhcHRpb24sIFN1Z2FyRWxlbWVudC5mcm9tVGV4dCgnQ2FwdGlvbicpKTtcbiAgICAgICAgICAgICAgYXBwZW5kQXQodGFibGUsIGNhcHRpb24sIDApO1xuICAgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldEN1cnNvckxvY2F0aW9uKGNhcHRpb24uZG9tLCAwKTtcbiAgICAgICAgICAgIH0sIGNhcHRpb24gPT4ge1xuICAgICAgICAgICAgICBpZiAoaXNUYWcoJ2NhcHRpb24nKShjZWxsT3JDYXB0aW9uKSkge1xuICAgICAgICAgICAgICAgIG9uZSgndGQnLCB0YWJsZSkuZWFjaCh0ZCA9PiBlZGl0b3Iuc2VsZWN0aW9uLnNldEN1cnNvckxvY2F0aW9uKHRkLmRvbSwgMCkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlbW92ZSQ2KGNhcHRpb24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmaXJlVGFibGVNb2RpZmllZChlZGl0b3IsIHRhYmxlLmRvbSwgc3RydWN0dXJlTW9kaWZpZWQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBwb3N0RXhlY3V0ZSA9IF9kYXRhID0+IHtcbiAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgYWN0T25TZWxlY3Rpb24gPSAoZXhlY3V0ZSwgbm9FdmVudHMgPSBmYWxzZSkgPT4gcGVyZm9ybUFjdGlvbk9uU2VsZWN0aW9uKCh0YWJsZSwgc3RhcnRDZWxsKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldHMgPSBmb3JNZW51KGdldENlbGxzRnJvbVNlbGVjdGlvbihlZGl0b3IpLCB0YWJsZSwgc3RhcnRDZWxsKTtcbiAgICAgICAgZXhlY3V0ZSh0YWJsZSwgdGFyZ2V0cywgbm9FdmVudHMpLmVhY2gocG9zdEV4ZWN1dGUpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjb3B5Um93U2VsZWN0aW9uID0gKCkgPT4gcGVyZm9ybUFjdGlvbk9uU2VsZWN0aW9uKCh0YWJsZSwgc3RhcnRDZWxsKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldHMgPSBmb3JNZW51KGdldENlbGxzRnJvbVNlbGVjdGlvbihlZGl0b3IpLCB0YWJsZSwgc3RhcnRDZWxsKTtcbiAgICAgICAgY29uc3QgZ2VuZXJhdG9ycyA9IGNlbGxPcGVyYXRpb25zKG5vb3AsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXREb2MoKSksIE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgICAgIHJldHVybiBjb3B5Um93cyh0YWJsZSwgdGFyZ2V0cywgZ2VuZXJhdG9ycyk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNvcHlDb2xTZWxlY3Rpb24gPSAoKSA9PiBwZXJmb3JtQWN0aW9uT25TZWxlY3Rpb24oKHRhYmxlLCBzdGFydENlbGwpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0cyA9IGZvck1lbnUoZ2V0Q2VsbHNGcm9tU2VsZWN0aW9uKGVkaXRvciksIHRhYmxlLCBzdGFydENlbGwpO1xuICAgICAgICByZXR1cm4gY29weUNvbHModGFibGUsIHRhcmdldHMpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBwYXN0ZU9uU2VsZWN0aW9uID0gKGV4ZWN1dGUsIGdldFJvd3MpID0+IGdldFJvd3MoKS5lYWNoKHJvd3MgPT4ge1xuICAgICAgICBjb25zdCBjbG9uZWRSb3dzID0gbWFwJDEocm93cywgcm93ID0+IGRlZXAocm93KSk7XG4gICAgICAgIHBlcmZvcm1BY3Rpb25PblNlbGVjdGlvbigodGFibGUsIHN0YXJ0Q2VsbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGdlbmVyYXRvcnMgPSBwYXN0ZSQxKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXREb2MoKSkpO1xuICAgICAgICAgIGNvbnN0IHRhcmdldHMgPSBwYXN0ZVJvd3MoZ2V0Q2VsbHNGcm9tU2VsZWN0aW9uKGVkaXRvciksIHN0YXJ0Q2VsbCwgY2xvbmVkUm93cywgZ2VuZXJhdG9ycyk7XG4gICAgICAgICAgZXhlY3V0ZSh0YWJsZSwgdGFyZ2V0cykuZWFjaChwb3N0RXhlY3V0ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBhY3RPblR5cGUgPSBnZXRBY3Rpb24gPT4gKF91aSwgYXJncykgPT4gZ2V0JGMoYXJncywgJ3R5cGUnKS5lYWNoKHR5cGUgPT4ge1xuICAgICAgICBhY3RPblNlbGVjdGlvbihnZXRBY3Rpb24odHlwZSksIGFyZ3Mubm9fZXZlbnRzKTtcbiAgICAgIH0pO1xuICAgICAgZWFjaCQxKHtcbiAgICAgICAgbWNlVGFibGVTcGxpdENlbGxzOiAoKSA9PiBhY3RPblNlbGVjdGlvbihhY3Rpb25zLnVubWVyZ2VDZWxscyksXG4gICAgICAgIG1jZVRhYmxlTWVyZ2VDZWxsczogKCkgPT4gYWN0T25TZWxlY3Rpb24oYWN0aW9ucy5tZXJnZUNlbGxzKSxcbiAgICAgICAgbWNlVGFibGVJbnNlcnRSb3dCZWZvcmU6ICgpID0+IGFjdE9uU2VsZWN0aW9uKGFjdGlvbnMuaW5zZXJ0Um93c0JlZm9yZSksXG4gICAgICAgIG1jZVRhYmxlSW5zZXJ0Um93QWZ0ZXI6ICgpID0+IGFjdE9uU2VsZWN0aW9uKGFjdGlvbnMuaW5zZXJ0Um93c0FmdGVyKSxcbiAgICAgICAgbWNlVGFibGVJbnNlcnRDb2xCZWZvcmU6ICgpID0+IGFjdE9uU2VsZWN0aW9uKGFjdGlvbnMuaW5zZXJ0Q29sdW1uc0JlZm9yZSksXG4gICAgICAgIG1jZVRhYmxlSW5zZXJ0Q29sQWZ0ZXI6ICgpID0+IGFjdE9uU2VsZWN0aW9uKGFjdGlvbnMuaW5zZXJ0Q29sdW1uc0FmdGVyKSxcbiAgICAgICAgbWNlVGFibGVEZWxldGVDb2w6ICgpID0+IGFjdE9uU2VsZWN0aW9uKGFjdGlvbnMuZGVsZXRlQ29sdW1uKSxcbiAgICAgICAgbWNlVGFibGVEZWxldGVSb3c6ICgpID0+IGFjdE9uU2VsZWN0aW9uKGFjdGlvbnMuZGVsZXRlUm93KSxcbiAgICAgICAgbWNlVGFibGVDdXRDb2w6ICgpID0+IGNvcHlDb2xTZWxlY3Rpb24oKS5lYWNoKHNlbGVjdGlvbiA9PiB7XG4gICAgICAgICAgc2V0Q29sdW1ucyhzZWxlY3Rpb24pO1xuICAgICAgICAgIGFjdE9uU2VsZWN0aW9uKGFjdGlvbnMuZGVsZXRlQ29sdW1uKTtcbiAgICAgICAgfSksXG4gICAgICAgIG1jZVRhYmxlQ3V0Um93OiAoKSA9PiBjb3B5Um93U2VsZWN0aW9uKCkuZWFjaChzZWxlY3Rpb24gPT4ge1xuICAgICAgICAgIHNldFJvd3Moc2VsZWN0aW9uKTtcbiAgICAgICAgICBhY3RPblNlbGVjdGlvbihhY3Rpb25zLmRlbGV0ZVJvdyk7XG4gICAgICAgIH0pLFxuICAgICAgICBtY2VUYWJsZUNvcHlDb2w6ICgpID0+IGNvcHlDb2xTZWxlY3Rpb24oKS5lYWNoKHNlbGVjdGlvbiA9PiBzZXRDb2x1bW5zKHNlbGVjdGlvbikpLFxuICAgICAgICBtY2VUYWJsZUNvcHlSb3c6ICgpID0+IGNvcHlSb3dTZWxlY3Rpb24oKS5lYWNoKHNlbGVjdGlvbiA9PiBzZXRSb3dzKHNlbGVjdGlvbikpLFxuICAgICAgICBtY2VUYWJsZVBhc3RlQ29sQmVmb3JlOiAoKSA9PiBwYXN0ZU9uU2VsZWN0aW9uKGFjdGlvbnMucGFzdGVDb2xzQmVmb3JlLCBnZXRDb2x1bW5zKSxcbiAgICAgICAgbWNlVGFibGVQYXN0ZUNvbEFmdGVyOiAoKSA9PiBwYXN0ZU9uU2VsZWN0aW9uKGFjdGlvbnMucGFzdGVDb2xzQWZ0ZXIsIGdldENvbHVtbnMpLFxuICAgICAgICBtY2VUYWJsZVBhc3RlUm93QmVmb3JlOiAoKSA9PiBwYXN0ZU9uU2VsZWN0aW9uKGFjdGlvbnMucGFzdGVSb3dzQmVmb3JlLCBnZXRSb3dzKSxcbiAgICAgICAgbWNlVGFibGVQYXN0ZVJvd0FmdGVyOiAoKSA9PiBwYXN0ZU9uU2VsZWN0aW9uKGFjdGlvbnMucGFzdGVSb3dzQWZ0ZXIsIGdldFJvd3MpLFxuICAgICAgICBtY2VUYWJsZURlbGV0ZTogZXJhc2VUYWJsZSxcbiAgICAgICAgbWNlVGFibGVDZWxsVG9nZ2xlQ2xhc3M6IHRvZ2dsZVRhYmxlQ2VsbENsYXNzLFxuICAgICAgICBtY2VUYWJsZVRvZ2dsZUNsYXNzOiB0b2dnbGVUYWJsZUNsYXNzLFxuICAgICAgICBtY2VUYWJsZVRvZ2dsZUNhcHRpb246IHRvZ2dsZUNhcHRpb24sXG4gICAgICAgIG1jZVRhYmxlU2l6aW5nTW9kZTogKF91aSwgc2l6aW5nKSA9PiBzZXRTaXppbmdNb2RlKHNpemluZyksXG4gICAgICAgIG1jZVRhYmxlQ2VsbFR5cGU6IGFjdE9uVHlwZSh0eXBlID0+IHR5cGUgPT09ICd0aCcgPyBhY3Rpb25zLm1ha2VDZWxsc0hlYWRlciA6IGFjdGlvbnMudW5tYWtlQ2VsbHNIZWFkZXIpLFxuICAgICAgICBtY2VUYWJsZUNvbFR5cGU6IGFjdE9uVHlwZSh0eXBlID0+IHR5cGUgPT09ICd0aCcgPyBhY3Rpb25zLm1ha2VDb2x1bW5zSGVhZGVyIDogYWN0aW9ucy51bm1ha2VDb2x1bW5zSGVhZGVyKSxcbiAgICAgICAgbWNlVGFibGVSb3dUeXBlOiBhY3RPblR5cGUodHlwZSA9PiB7XG4gICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAnaGVhZGVyJzpcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb25zLm1ha2VSb3dzSGVhZGVyO1xuICAgICAgICAgIGNhc2UgJ2Zvb3Rlcic6XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9ucy5tYWtlUm93c0Zvb3RlcjtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbnMubWFrZVJvd3NCb2R5O1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0sIChmdW5jLCBuYW1lKSA9PiBlZGl0b3IuYWRkQ29tbWFuZChuYW1lLCBmdW5jKSk7XG4gICAgICBlZGl0b3IuYWRkQ29tbWFuZCgnbWNlSW5zZXJ0VGFibGUnLCAoX3VpLCBhcmdzKSA9PiB7XG4gICAgICAgIGluc2VydFRhYmxlKGVkaXRvciwgYXJncy5yb3dzLCBhcmdzLmNvbHVtbnMsIGFyZ3Mub3B0aW9ucyk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5hZGRDb21tYW5kKCdtY2VUYWJsZUFwcGx5Q2VsbFN0eWxlJywgKF91aSwgYXJncykgPT4ge1xuICAgICAgICBjb25zdCBnZXRGb3JtYXROYW1lID0gc3R5bGUgPT4gJ3RhYmxlY2VsbCcgKyBzdHlsZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJy0nLCAnJyk7XG4gICAgICAgIGlmICghaXNPYmplY3QoYXJncykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2VsbHMgPSBmaWx0ZXIkMihnZXRDZWxsc0Zyb21TZWxlY3Rpb24oZWRpdG9yKSwgaXNJbkVkaXRhYmxlQ29udGV4dCQxKTtcbiAgICAgICAgaWYgKGNlbGxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWxpZEFyZ3MgPSBmaWx0ZXIkMShhcmdzLCAodmFsdWUsIHN0eWxlKSA9PiBlZGl0b3IuZm9ybWF0dGVyLmhhcyhnZXRGb3JtYXROYW1lKHN0eWxlKSkgJiYgaXNTdHJpbmcodmFsdWUpKTtcbiAgICAgICAgaWYgKGlzRW1wdHkodmFsaWRBcmdzKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlYWNoJDEodmFsaWRBcmdzLCAodmFsdWUsIHN0eWxlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0TmFtZSA9IGdldEZvcm1hdE5hbWUoc3R5bGUpO1xuICAgICAgICAgIGVhY2gkMihjZWxscywgY2VsbCA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICAgIGVkaXRvci5mb3JtYXR0ZXIucmVtb3ZlKGZvcm1hdE5hbWUsIHsgdmFsdWU6IG51bGwgfSwgY2VsbC5kb20sIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZWRpdG9yLmZvcm1hdHRlci5hcHBseShmb3JtYXROYW1lLCB7IHZhbHVlIH0sIGNlbGwuZG9tKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGdldFRhYmxlRnJvbUNlbGwoY2VsbHNbMF0pLmVhY2godGFibGUgPT4gZmlyZVRhYmxlTW9kaWZpZWQoZWRpdG9yLCB0YWJsZS5kb20sIHN0eWxlTW9kaWZpZWQpKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZWdpc3RlclF1ZXJ5Q29tbWFuZHMgPSAoZWRpdG9yLCBhY3Rpb25zKSA9PiB7XG4gICAgICBjb25zdCBpc1Jvb3QgPSBnZXRJc1Jvb3QoZWRpdG9yKTtcbiAgICAgIGNvbnN0IGxvb2t1cE9uU2VsZWN0aW9uID0gYWN0aW9uID0+IGdldFNlbGVjdGlvbkNlbGwoZ2V0U2VsZWN0aW9uU3RhcnQoZWRpdG9yKSkuYmluZChjZWxsID0+IHRhYmxlKGNlbGwsIGlzUm9vdCkubWFwKHRhYmxlID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0cyA9IGZvck1lbnUoZ2V0Q2VsbHNGcm9tU2VsZWN0aW9uKGVkaXRvciksIHRhYmxlLCBjZWxsKTtcbiAgICAgICAgcmV0dXJuIGFjdGlvbih0YWJsZSwgdGFyZ2V0cyk7XG4gICAgICB9KSkuZ2V0T3IoJycpO1xuICAgICAgZWFjaCQxKHtcbiAgICAgICAgbWNlVGFibGVSb3dUeXBlOiAoKSA9PiBsb29rdXBPblNlbGVjdGlvbihhY3Rpb25zLmdldFRhYmxlUm93VHlwZSksXG4gICAgICAgIG1jZVRhYmxlQ2VsbFR5cGU6ICgpID0+IGxvb2t1cE9uU2VsZWN0aW9uKGFjdGlvbnMuZ2V0VGFibGVDZWxsVHlwZSksXG4gICAgICAgIG1jZVRhYmxlQ29sVHlwZTogKCkgPT4gbG9va3VwT25TZWxlY3Rpb24oYWN0aW9ucy5nZXRUYWJsZUNvbFR5cGUpXG4gICAgICB9LCAoZnVuYywgbmFtZSkgPT4gZWRpdG9yLmFkZFF1ZXJ5VmFsdWVIYW5kbGVyKG5hbWUsIGZ1bmMpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYWR0JDQgPSBBZHQuZ2VuZXJhdGUoW1xuICAgICAgeyBiZWZvcmU6IFsnZWxlbWVudCddIH0sXG4gICAgICB7XG4gICAgICAgIG9uOiBbXG4gICAgICAgICAgJ2VsZW1lbnQnLFxuICAgICAgICAgICdvZmZzZXQnXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7IGFmdGVyOiBbJ2VsZW1lbnQnXSB9XG4gICAgXSk7XG4gICAgY29uc3QgY2F0YSQxID0gKHN1YmplY3QsIG9uQmVmb3JlLCBvbk9uLCBvbkFmdGVyKSA9PiBzdWJqZWN0LmZvbGQob25CZWZvcmUsIG9uT24sIG9uQWZ0ZXIpO1xuICAgIGNvbnN0IGdldFN0YXJ0JDEgPSBzaXR1ID0+IHNpdHUuZm9sZChpZGVudGl0eSwgaWRlbnRpdHksIGlkZW50aXR5KTtcbiAgICBjb25zdCBiZWZvcmUkMiA9IGFkdCQ0LmJlZm9yZTtcbiAgICBjb25zdCBvbiA9IGFkdCQ0Lm9uO1xuICAgIGNvbnN0IGFmdGVyJDMgPSBhZHQkNC5hZnRlcjtcbiAgICBjb25zdCBTaXR1ID0ge1xuICAgICAgYmVmb3JlOiBiZWZvcmUkMixcbiAgICAgIG9uLFxuICAgICAgYWZ0ZXI6IGFmdGVyJDMsXG4gICAgICBjYXRhOiBjYXRhJDEsXG4gICAgICBnZXRTdGFydDogZ2V0U3RhcnQkMVxuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGUkNCA9IChzZWxlY3Rpb24sIGtpbGwpID0+ICh7XG4gICAgICBzZWxlY3Rpb24sXG4gICAgICBraWxsXG4gICAgfSk7XG4gICAgY29uc3QgUmVzcG9uc2UgPSB7IGNyZWF0ZTogY3JlYXRlJDQgfTtcblxuICAgIGNvbnN0IHNlbGVjdE5vZGUgPSAod2luLCBlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBybmcgPSB3aW4uZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHJuZy5zZWxlY3ROb2RlKGVsZW1lbnQuZG9tKTtcbiAgICAgIHJldHVybiBybmc7XG4gICAgfTtcbiAgICBjb25zdCBzZWxlY3ROb2RlQ29udGVudHMgPSAod2luLCBlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBybmcgPSB3aW4uZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHNlbGVjdE5vZGVDb250ZW50c1VzaW5nKHJuZywgZWxlbWVudCk7XG4gICAgICByZXR1cm4gcm5nO1xuICAgIH07XG4gICAgY29uc3Qgc2VsZWN0Tm9kZUNvbnRlbnRzVXNpbmcgPSAocm5nLCBlbGVtZW50KSA9PiBybmcuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQuZG9tKTtcbiAgICBjb25zdCBzZXRTdGFydCA9IChybmcsIHNpdHUpID0+IHtcbiAgICAgIHNpdHUuZm9sZChlID0+IHtcbiAgICAgICAgcm5nLnNldFN0YXJ0QmVmb3JlKGUuZG9tKTtcbiAgICAgIH0sIChlLCBvKSA9PiB7XG4gICAgICAgIHJuZy5zZXRTdGFydChlLmRvbSwgbyk7XG4gICAgICB9LCBlID0+IHtcbiAgICAgICAgcm5nLnNldFN0YXJ0QWZ0ZXIoZS5kb20pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRGaW5pc2ggPSAocm5nLCBzaXR1KSA9PiB7XG4gICAgICBzaXR1LmZvbGQoZSA9PiB7XG4gICAgICAgIHJuZy5zZXRFbmRCZWZvcmUoZS5kb20pO1xuICAgICAgfSwgKGUsIG8pID0+IHtcbiAgICAgICAgcm5nLnNldEVuZChlLmRvbSwgbyk7XG4gICAgICB9LCBlID0+IHtcbiAgICAgICAgcm5nLnNldEVuZEFmdGVyKGUuZG9tKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVsYXRpdmVUb05hdGl2ZSA9ICh3aW4sIHN0YXJ0U2l0dSwgZmluaXNoU2l0dSkgPT4ge1xuICAgICAgY29uc3QgcmFuZ2UgPSB3aW4uZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHNldFN0YXJ0KHJhbmdlLCBzdGFydFNpdHUpO1xuICAgICAgc2V0RmluaXNoKHJhbmdlLCBmaW5pc2hTaXR1KTtcbiAgICAgIHJldHVybiByYW5nZTtcbiAgICB9O1xuICAgIGNvbnN0IGV4YWN0VG9OYXRpdmUgPSAod2luLCBzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSA9PiB7XG4gICAgICBjb25zdCBybmcgPSB3aW4uZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHJuZy5zZXRTdGFydChzdGFydC5kb20sIHNvZmZzZXQpO1xuICAgICAgcm5nLnNldEVuZChmaW5pc2guZG9tLCBmb2Zmc2V0KTtcbiAgICAgIHJldHVybiBybmc7XG4gICAgfTtcbiAgICBjb25zdCB0b1JlY3QgPSByZWN0ID0+ICh7XG4gICAgICBsZWZ0OiByZWN0LmxlZnQsXG4gICAgICB0b3A6IHJlY3QudG9wLFxuICAgICAgcmlnaHQ6IHJlY3QucmlnaHQsXG4gICAgICBib3R0b206IHJlY3QuYm90dG9tLFxuICAgICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0Rmlyc3RSZWN0JDEgPSBybmcgPT4ge1xuICAgICAgY29uc3QgcmVjdHMgPSBybmcuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgICAgIGNvbnN0IHJlY3QgPSByZWN0cy5sZW5ndGggPiAwID8gcmVjdHNbMF0gOiBybmcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICByZXR1cm4gcmVjdC53aWR0aCA+IDAgfHwgcmVjdC5oZWlnaHQgPiAwID8gT3B0aW9uYWwuc29tZShyZWN0KS5tYXAodG9SZWN0KSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYWR0JDMgPSBBZHQuZ2VuZXJhdGUoW1xuICAgICAge1xuICAgICAgICBsdHI6IFtcbiAgICAgICAgICAnc3RhcnQnLFxuICAgICAgICAgICdzb2Zmc2V0JyxcbiAgICAgICAgICAnZmluaXNoJyxcbiAgICAgICAgICAnZm9mZnNldCdcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcnRsOiBbXG4gICAgICAgICAgJ3N0YXJ0JyxcbiAgICAgICAgICAnc29mZnNldCcsXG4gICAgICAgICAgJ2ZpbmlzaCcsXG4gICAgICAgICAgJ2ZvZmZzZXQnXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdKTtcbiAgICBjb25zdCBmcm9tUmFuZ2UgPSAod2luLCB0eXBlLCByYW5nZSkgPT4gdHlwZShTdWdhckVsZW1lbnQuZnJvbURvbShyYW5nZS5zdGFydENvbnRhaW5lciksIHJhbmdlLnN0YXJ0T2Zmc2V0LCBTdWdhckVsZW1lbnQuZnJvbURvbShyYW5nZS5lbmRDb250YWluZXIpLCByYW5nZS5lbmRPZmZzZXQpO1xuICAgIGNvbnN0IGdldFJhbmdlcyA9ICh3aW4sIHNlbGVjdGlvbikgPT4gc2VsZWN0aW9uLm1hdGNoKHtcbiAgICAgIGRvbVJhbmdlOiBybmcgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGx0cjogY29uc3RhbnQocm5nKSxcbiAgICAgICAgICBydGw6IE9wdGlvbmFsLm5vbmVcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICByZWxhdGl2ZTogKHN0YXJ0U2l0dSwgZmluaXNoU2l0dSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGx0cjogY2FjaGVkKCgpID0+IHJlbGF0aXZlVG9OYXRpdmUod2luLCBzdGFydFNpdHUsIGZpbmlzaFNpdHUpKSxcbiAgICAgICAgICBydGw6IGNhY2hlZCgoKSA9PiBPcHRpb25hbC5zb21lKHJlbGF0aXZlVG9OYXRpdmUod2luLCBmaW5pc2hTaXR1LCBzdGFydFNpdHUpKSlcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBleGFjdDogKHN0YXJ0LCBzb2Zmc2V0LCBmaW5pc2gsIGZvZmZzZXQpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsdHI6IGNhY2hlZCgoKSA9PiBleGFjdFRvTmF0aXZlKHdpbiwgc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCkpLFxuICAgICAgICAgIHJ0bDogY2FjaGVkKCgpID0+IE9wdGlvbmFsLnNvbWUoZXhhY3RUb05hdGl2ZSh3aW4sIGZpbmlzaCwgZm9mZnNldCwgc3RhcnQsIHNvZmZzZXQpKSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBkb0RpYWdub3NlID0gKHdpbiwgcmFuZ2VzKSA9PiB7XG4gICAgICBjb25zdCBybmcgPSByYW5nZXMubHRyKCk7XG4gICAgICBpZiAocm5nLmNvbGxhcHNlZCkge1xuICAgICAgICBjb25zdCByZXZlcnNlZCA9IHJhbmdlcy5ydGwoKS5maWx0ZXIocmV2ID0+IHJldi5jb2xsYXBzZWQgPT09IGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHJldmVyc2VkLm1hcChyZXYgPT4gYWR0JDMucnRsKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJldi5lbmRDb250YWluZXIpLCByZXYuZW5kT2Zmc2V0LCBTdWdhckVsZW1lbnQuZnJvbURvbShyZXYuc3RhcnRDb250YWluZXIpLCByZXYuc3RhcnRPZmZzZXQpKS5nZXRPclRodW5rKCgpID0+IGZyb21SYW5nZSh3aW4sIGFkdCQzLmx0ciwgcm5nKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZnJvbVJhbmdlKHdpbiwgYWR0JDMubHRyLCBybmcpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZGlhZ25vc2UgPSAod2luLCBzZWxlY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHJhbmdlcyA9IGdldFJhbmdlcyh3aW4sIHNlbGVjdGlvbik7XG4gICAgICByZXR1cm4gZG9EaWFnbm9zZSh3aW4sIHJhbmdlcyk7XG4gICAgfTtcbiAgICBjb25zdCBhc0x0clJhbmdlID0gKHdpbiwgc2VsZWN0aW9uKSA9PiB7XG4gICAgICBjb25zdCBkaWFnbm9zaXMgPSBkaWFnbm9zZSh3aW4sIHNlbGVjdGlvbik7XG4gICAgICByZXR1cm4gZGlhZ25vc2lzLm1hdGNoKHtcbiAgICAgICAgbHRyOiAoc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJuZyA9IHdpbi5kb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICAgIHJuZy5zZXRTdGFydChzdGFydC5kb20sIHNvZmZzZXQpO1xuICAgICAgICAgIHJuZy5zZXRFbmQoZmluaXNoLmRvbSwgZm9mZnNldCk7XG4gICAgICAgICAgcmV0dXJuIHJuZztcbiAgICAgICAgfSxcbiAgICAgICAgcnRsOiAoc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJuZyA9IHdpbi5kb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICAgIHJuZy5zZXRTdGFydChmaW5pc2guZG9tLCBmb2Zmc2V0KTtcbiAgICAgICAgICBybmcuc2V0RW5kKHN0YXJ0LmRvbSwgc29mZnNldCk7XG4gICAgICAgICAgcmV0dXJuIHJuZztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBhZHQkMy5sdHI7XG4gICAgYWR0JDMucnRsO1xuXG4gICAgY29uc3QgY3JlYXRlJDMgPSAoc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCkgPT4gKHtcbiAgICAgIHN0YXJ0LFxuICAgICAgc29mZnNldCxcbiAgICAgIGZpbmlzaCxcbiAgICAgIGZvZmZzZXRcbiAgICB9KTtcbiAgICBjb25zdCBTaW1SYW5nZSA9IHsgY3JlYXRlOiBjcmVhdGUkMyB9O1xuXG4gICAgY29uc3QgY3JlYXRlJDIgPSAoc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQ6IFNpdHUub24oc3RhcnQsIHNvZmZzZXQpLFxuICAgICAgICBmaW5pc2g6IFNpdHUub24oZmluaXNoLCBmb2Zmc2V0KVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IFNpdHVzID0geyBjcmVhdGU6IGNyZWF0ZSQyIH07XG5cbiAgICBjb25zdCBjb252ZXJ0VG9SYW5nZSA9ICh3aW4sIHNlbGVjdGlvbikgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gYXNMdHJSYW5nZSh3aW4sIHNlbGVjdGlvbik7XG4gICAgICByZXR1cm4gU2ltUmFuZ2UuY3JlYXRlKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJuZy5zdGFydENvbnRhaW5lciksIHJuZy5zdGFydE9mZnNldCwgU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLmVuZENvbnRhaW5lciksIHJuZy5lbmRPZmZzZXQpO1xuICAgIH07XG4gICAgY29uc3QgbWFrZVNpdHVzID0gU2l0dXMuY3JlYXRlO1xuXG4gICAgY29uc3Qgc3luYyA9IChjb250YWluZXIsIGlzUm9vdCwgc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCwgc2VsZWN0UmFuZ2UpID0+IHtcbiAgICAgIGlmICghKGVxJDEoc3RhcnQsIGZpbmlzaCkgJiYgc29mZnNldCA9PT0gZm9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIGNsb3Nlc3QkMShzdGFydCwgJ3RkLHRoJywgaXNSb290KS5iaW5kKHMgPT4ge1xuICAgICAgICAgIHJldHVybiBjbG9zZXN0JDEoZmluaXNoLCAndGQsdGgnLCBpc1Jvb3QpLmJpbmQoZiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZGV0ZWN0KGNvbnRhaW5lciwgaXNSb290LCBzLCBmLCBzZWxlY3RSYW5nZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGRldGVjdCA9IChjb250YWluZXIsIGlzUm9vdCwgc3RhcnQsIGZpbmlzaCwgc2VsZWN0UmFuZ2UpID0+IHtcbiAgICAgIGlmICghZXEkMShzdGFydCwgZmluaXNoKSkge1xuICAgICAgICByZXR1cm4gaWRlbnRpZnkoc3RhcnQsIGZpbmlzaCwgaXNSb290KS5iaW5kKGNlbGxTZWwgPT4ge1xuICAgICAgICAgIGNvbnN0IGJveGVzID0gY2VsbFNlbC5ib3hlcy5nZXRPcihbXSk7XG4gICAgICAgICAgaWYgKGJveGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHNlbGVjdFJhbmdlKGNvbnRhaW5lciwgYm94ZXMsIGNlbGxTZWwuc3RhcnQsIGNlbGxTZWwuZmluaXNoKTtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKFJlc3BvbnNlLmNyZWF0ZShPcHRpb25hbC5zb21lKG1ha2VTaXR1cyhzdGFydCwgMCwgc3RhcnQsIGdldEVuZChzdGFydCkpKSwgdHJ1ZSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdXBkYXRlID0gKHJvd3MsIGNvbHVtbnMsIGNvbnRhaW5lciwgc2VsZWN0ZWQsIGFubm90YXRpb25zKSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVTZWxlY3Rpb24gPSBuZXdTZWxzID0+IHtcbiAgICAgICAgYW5ub3RhdGlvbnMuY2xlYXJCZWZvcmVVcGRhdGUoY29udGFpbmVyKTtcbiAgICAgICAgYW5ub3RhdGlvbnMuc2VsZWN0UmFuZ2UoY29udGFpbmVyLCBuZXdTZWxzLmJveGVzLCBuZXdTZWxzLnN0YXJ0LCBuZXdTZWxzLmZpbmlzaCk7XG4gICAgICAgIHJldHVybiBuZXdTZWxzLmJveGVzO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBzaGlmdFNlbGVjdGlvbihzZWxlY3RlZCwgcm93cywgY29sdW1ucywgYW5ub3RhdGlvbnMuZmlyc3RTZWxlY3RlZFNlbGVjdG9yLCBhbm5vdGF0aW9ucy5sYXN0U2VsZWN0ZWRTZWxlY3RvcikubWFwKHVwZGF0ZVNlbGVjdGlvbik7XG4gICAgfTtcblxuICAgIGNvbnN0IHRyYXZlcnNlID0gKGl0ZW0sIG1vZGUpID0+ICh7XG4gICAgICBpdGVtLFxuICAgICAgbW9kZVxuICAgIH0pO1xuICAgIGNvbnN0IGJhY2t0cmFjayA9ICh1bml2ZXJzZSwgaXRlbSwgX2RpcmVjdGlvbiwgdHJhbnNpdGlvbiA9IHNpZGVzdGVwKSA9PiB7XG4gICAgICByZXR1cm4gdW5pdmVyc2UucHJvcGVydHkoKS5wYXJlbnQoaXRlbSkubWFwKHAgPT4ge1xuICAgICAgICByZXR1cm4gdHJhdmVyc2UocCwgdHJhbnNpdGlvbik7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHNpZGVzdGVwID0gKHVuaXZlcnNlLCBpdGVtLCBkaXJlY3Rpb24sIHRyYW5zaXRpb24gPSBhZHZhbmNlKSA9PiB7XG4gICAgICByZXR1cm4gZGlyZWN0aW9uLnNpYmxpbmcodW5pdmVyc2UsIGl0ZW0pLm1hcChwID0+IHtcbiAgICAgICAgcmV0dXJuIHRyYXZlcnNlKHAsIHRyYW5zaXRpb24pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBhZHZhbmNlID0gKHVuaXZlcnNlLCBpdGVtLCBkaXJlY3Rpb24sIHRyYW5zaXRpb24gPSBhZHZhbmNlKSA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHVuaXZlcnNlLnByb3BlcnR5KCkuY2hpbGRyZW4oaXRlbSk7XG4gICAgICBjb25zdCByZXN1bHQgPSBkaXJlY3Rpb24uZmlyc3QoY2hpbGRyZW4pO1xuICAgICAgcmV0dXJuIHJlc3VsdC5tYXAociA9PiB7XG4gICAgICAgIHJldHVybiB0cmF2ZXJzZShyLCB0cmFuc2l0aW9uKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc3VjY2Vzc29ycyA9IFtcbiAgICAgIHtcbiAgICAgICAgY3VycmVudDogYmFja3RyYWNrLFxuICAgICAgICBuZXh0OiBzaWRlc3RlcCxcbiAgICAgICAgZmFsbGJhY2s6IE9wdGlvbmFsLm5vbmUoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY3VycmVudDogc2lkZXN0ZXAsXG4gICAgICAgIG5leHQ6IGFkdmFuY2UsXG4gICAgICAgIGZhbGxiYWNrOiBPcHRpb25hbC5zb21lKGJhY2t0cmFjaylcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGN1cnJlbnQ6IGFkdmFuY2UsXG4gICAgICAgIG5leHQ6IGFkdmFuY2UsXG4gICAgICAgIGZhbGxiYWNrOiBPcHRpb25hbC5zb21lKHNpZGVzdGVwKVxuICAgICAgfVxuICAgIF07XG4gICAgY29uc3QgZ28gPSAodW5pdmVyc2UsIGl0ZW0sIG1vZGUsIGRpcmVjdGlvbiwgcnVsZXMgPSBzdWNjZXNzb3JzKSA9PiB7XG4gICAgICBjb25zdCBydWxlT3B0ID0gZmluZCQxKHJ1bGVzLCBzdWNjID0+IHtcbiAgICAgICAgcmV0dXJuIHN1Y2MuY3VycmVudCA9PT0gbW9kZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJ1bGVPcHQuYmluZChydWxlID0+IHtcbiAgICAgICAgcmV0dXJuIHJ1bGUuY3VycmVudCh1bml2ZXJzZSwgaXRlbSwgZGlyZWN0aW9uLCBydWxlLm5leHQpLm9yVGh1bmsoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBydWxlLmZhbGxiYWNrLmJpbmQoZmIgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGdvKHVuaXZlcnNlLCBpdGVtLCBmYiwgZGlyZWN0aW9uKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGVmdCQxID0gKCkgPT4ge1xuICAgICAgY29uc3Qgc2libGluZyA9ICh1bml2ZXJzZSwgaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gdW5pdmVyc2UucXVlcnkoKS5wcmV2U2libGluZyhpdGVtKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBmaXJzdCA9IGNoaWxkcmVuID0+IHtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmxlbmd0aCA+IDAgPyBPcHRpb25hbC5zb21lKGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzaWJsaW5nLFxuICAgICAgICBmaXJzdFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHJpZ2h0JDEgPSAoKSA9PiB7XG4gICAgICBjb25zdCBzaWJsaW5nID0gKHVuaXZlcnNlLCBpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiB1bml2ZXJzZS5xdWVyeSgpLm5leHRTaWJsaW5nKGl0ZW0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZpcnN0ID0gY2hpbGRyZW4gPT4ge1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4ubGVuZ3RoID4gMCA/IE9wdGlvbmFsLnNvbWUoY2hpbGRyZW5bMF0pIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNpYmxpbmcsXG4gICAgICAgIGZpcnN0XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgV2Fsa2VycyA9IHtcbiAgICAgIGxlZnQ6IGxlZnQkMSxcbiAgICAgIHJpZ2h0OiByaWdodCQxXG4gICAgfTtcblxuICAgIGNvbnN0IGhvbmUgPSAodW5pdmVyc2UsIGl0ZW0sIHByZWRpY2F0ZSwgbW9kZSwgZGlyZWN0aW9uLCBpc1Jvb3QpID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSBnbyh1bml2ZXJzZSwgaXRlbSwgbW9kZSwgZGlyZWN0aW9uKTtcbiAgICAgIHJldHVybiBuZXh0LmJpbmQobiA9PiB7XG4gICAgICAgIGlmIChpc1Jvb3Qobi5pdGVtKSkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHByZWRpY2F0ZShuLml0ZW0pID8gT3B0aW9uYWwuc29tZShuLml0ZW0pIDogaG9uZSh1bml2ZXJzZSwgbi5pdGVtLCBwcmVkaWNhdGUsIG4ubW9kZSwgZGlyZWN0aW9uLCBpc1Jvb3QpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGxlZnQgPSAodW5pdmVyc2UsIGl0ZW0sIHByZWRpY2F0ZSwgaXNSb290KSA9PiB7XG4gICAgICByZXR1cm4gaG9uZSh1bml2ZXJzZSwgaXRlbSwgcHJlZGljYXRlLCBzaWRlc3RlcCwgV2Fsa2Vycy5sZWZ0KCksIGlzUm9vdCk7XG4gICAgfTtcbiAgICBjb25zdCByaWdodCA9ICh1bml2ZXJzZSwgaXRlbSwgcHJlZGljYXRlLCBpc1Jvb3QpID0+IHtcbiAgICAgIHJldHVybiBob25lKHVuaXZlcnNlLCBpdGVtLCBwcmVkaWNhdGUsIHNpZGVzdGVwLCBXYWxrZXJzLnJpZ2h0KCksIGlzUm9vdCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzTGVhZiA9IHVuaXZlcnNlID0+IGVsZW1lbnQgPT4gdW5pdmVyc2UucHJvcGVydHkoKS5jaGlsZHJlbihlbGVtZW50KS5sZW5ndGggPT09IDA7XG4gICAgY29uc3QgYmVmb3JlJDEgPSAodW5pdmVyc2UsIGl0ZW0sIGlzUm9vdCkgPT4ge1xuICAgICAgcmV0dXJuIHNlZWtMZWZ0JDEodW5pdmVyc2UsIGl0ZW0sIGlzTGVhZih1bml2ZXJzZSksIGlzUm9vdCk7XG4gICAgfTtcbiAgICBjb25zdCBhZnRlciQyID0gKHVuaXZlcnNlLCBpdGVtLCBpc1Jvb3QpID0+IHtcbiAgICAgIHJldHVybiBzZWVrUmlnaHQkMSh1bml2ZXJzZSwgaXRlbSwgaXNMZWFmKHVuaXZlcnNlKSwgaXNSb290KTtcbiAgICB9O1xuICAgIGNvbnN0IHNlZWtMZWZ0JDEgPSBsZWZ0O1xuICAgIGNvbnN0IHNlZWtSaWdodCQxID0gcmlnaHQ7XG5cbiAgICBjb25zdCB1bml2ZXJzZSA9IERvbVVuaXZlcnNlKCk7XG4gICAgY29uc3QgYmVmb3JlID0gKGVsZW1lbnQsIGlzUm9vdCkgPT4ge1xuICAgICAgcmV0dXJuIGJlZm9yZSQxKHVuaXZlcnNlLCBlbGVtZW50LCBpc1Jvb3QpO1xuICAgIH07XG4gICAgY29uc3QgYWZ0ZXIkMSA9IChlbGVtZW50LCBpc1Jvb3QpID0+IHtcbiAgICAgIHJldHVybiBhZnRlciQyKHVuaXZlcnNlLCBlbGVtZW50LCBpc1Jvb3QpO1xuICAgIH07XG4gICAgY29uc3Qgc2Vla0xlZnQgPSAoZWxlbWVudCwgcHJlZGljYXRlLCBpc1Jvb3QpID0+IHtcbiAgICAgIHJldHVybiBzZWVrTGVmdCQxKHVuaXZlcnNlLCBlbGVtZW50LCBwcmVkaWNhdGUsIGlzUm9vdCk7XG4gICAgfTtcbiAgICBjb25zdCBzZWVrUmlnaHQgPSAoZWxlbWVudCwgcHJlZGljYXRlLCBpc1Jvb3QpID0+IHtcbiAgICAgIHJldHVybiBzZWVrUmlnaHQkMSh1bml2ZXJzZSwgZWxlbWVudCwgcHJlZGljYXRlLCBpc1Jvb3QpO1xuICAgIH07XG5cbiAgICBjb25zdCBhbmNlc3RvciA9IChzY29wZSwgcHJlZGljYXRlLCBpc1Jvb3QpID0+IGFuY2VzdG9yJDIoc2NvcGUsIHByZWRpY2F0ZSwgaXNSb290KS5pc1NvbWUoKTtcblxuICAgIGNvbnN0IGFkdCQyID0gQWR0LmdlbmVyYXRlKFtcbiAgICAgIHsgbm9uZTogWydtZXNzYWdlJ10gfSxcbiAgICAgIHsgc3VjY2VzczogW10gfSxcbiAgICAgIHsgZmFpbGVkVXA6IFsnY2VsbCddIH0sXG4gICAgICB7IGZhaWxlZERvd246IFsnY2VsbCddIH1cbiAgICBdKTtcbiAgICBjb25zdCBpc092ZXJsYXBwaW5nID0gKGJyaWRnZSwgYmVmb3JlLCBhZnRlcikgPT4ge1xuICAgICAgY29uc3QgYmVmb3JlQm91bmRzID0gYnJpZGdlLmdldFJlY3QoYmVmb3JlKTtcbiAgICAgIGNvbnN0IGFmdGVyQm91bmRzID0gYnJpZGdlLmdldFJlY3QoYWZ0ZXIpO1xuICAgICAgcmV0dXJuIGFmdGVyQm91bmRzLnJpZ2h0ID4gYmVmb3JlQm91bmRzLmxlZnQgJiYgYWZ0ZXJCb3VuZHMubGVmdCA8IGJlZm9yZUJvdW5kcy5yaWdodDtcbiAgICB9O1xuICAgIGNvbnN0IGlzUm93ID0gZWxlbSA9PiB7XG4gICAgICByZXR1cm4gY2xvc2VzdCQxKGVsZW0sICd0cicpO1xuICAgIH07XG4gICAgY29uc3QgdmVyaWZ5ID0gKGJyaWRnZSwgYmVmb3JlLCBiZWZvcmVPZmZzZXQsIGFmdGVyLCBhZnRlck9mZnNldCwgZmFpbHVyZSwgaXNSb290KSA9PiB7XG4gICAgICByZXR1cm4gY2xvc2VzdCQxKGFmdGVyLCAndGQsdGgnLCBpc1Jvb3QpLmJpbmQoYWZ0ZXJDZWxsID0+IHtcbiAgICAgICAgcmV0dXJuIGNsb3Nlc3QkMShiZWZvcmUsICd0ZCx0aCcsIGlzUm9vdCkubWFwKGJlZm9yZUNlbGwgPT4ge1xuICAgICAgICAgIGlmICghZXEkMShhZnRlckNlbGwsIGJlZm9yZUNlbGwpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2hhcmVkT25lKGlzUm93LCBbXG4gICAgICAgICAgICAgIGFmdGVyQ2VsbCxcbiAgICAgICAgICAgICAgYmVmb3JlQ2VsbFxuICAgICAgICAgICAgXSkuZm9sZCgoKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBpc092ZXJsYXBwaW5nKGJyaWRnZSwgYmVmb3JlQ2VsbCwgYWZ0ZXJDZWxsKSA/IGFkdCQyLnN1Y2Nlc3MoKSA6IGZhaWx1cmUoYmVmb3JlQ2VsbCk7XG4gICAgICAgICAgICB9LCBfc2hhcmVkUm93ID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoYmVmb3JlQ2VsbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGVxJDEoYWZ0ZXIsIGFmdGVyQ2VsbCkgJiYgZ2V0RW5kKGFmdGVyQ2VsbCkgPT09IGFmdGVyT2Zmc2V0ID8gZmFpbHVyZShiZWZvcmVDZWxsKSA6IGFkdCQyLm5vbmUoJ2luIHNhbWUgY2VsbCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KS5nZXRPcihhZHQkMi5ub25lKCdkZWZhdWx0JykpO1xuICAgIH07XG4gICAgY29uc3QgY2F0YSA9IChzdWJqZWN0LCBvbk5vbmUsIG9uU3VjY2Vzcywgb25GYWlsZWRVcCwgb25GYWlsZWREb3duKSA9PiB7XG4gICAgICByZXR1cm4gc3ViamVjdC5mb2xkKG9uTm9uZSwgb25TdWNjZXNzLCBvbkZhaWxlZFVwLCBvbkZhaWxlZERvd24pO1xuICAgIH07XG4gICAgY29uc3QgQmVmb3JlQWZ0ZXIgPSB7XG4gICAgICAuLi5hZHQkMixcbiAgICAgIHZlcmlmeSxcbiAgICAgIGNhdGFcbiAgICB9O1xuXG4gICAgY29uc3QgaW5QYXJlbnQgPSAocGFyZW50LCBjaGlsZHJlbiwgZWxlbWVudCwgaW5kZXgpID0+ICh7XG4gICAgICBwYXJlbnQsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGVsZW1lbnQsXG4gICAgICBpbmRleFxuICAgIH0pO1xuICAgIGNvbnN0IGluZGV4SW5QYXJlbnQgPSBlbGVtZW50ID0+IHBhcmVudChlbGVtZW50KS5iaW5kKHBhcmVudCA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGNoaWxkcmVuJDIocGFyZW50KTtcbiAgICAgIHJldHVybiBpbmRleE9mKGNoaWxkcmVuLCBlbGVtZW50KS5tYXAoaW5kZXggPT4gaW5QYXJlbnQocGFyZW50LCBjaGlsZHJlbiwgZWxlbWVudCwgaW5kZXgpKTtcbiAgICB9KTtcbiAgICBjb25zdCBpbmRleE9mID0gKGVsZW1lbnRzLCBlbGVtZW50KSA9PiBmaW5kSW5kZXgoZWxlbWVudHMsIGN1cnJ5KGVxJDEsIGVsZW1lbnQpKTtcblxuICAgIGNvbnN0IGlzQnIgPSBpc1RhZygnYnInKTtcbiAgICBjb25zdCBnYXRoZXJlciA9IChjYW5kLCBnYXRoZXIsIGlzUm9vdCkgPT4ge1xuICAgICAgcmV0dXJuIGdhdGhlcihjYW5kLCBpc1Jvb3QpLmJpbmQodGFyZ2V0ID0+IHtcbiAgICAgICAgcmV0dXJuIGlzVGV4dCh0YXJnZXQpICYmIGdldCQ2KHRhcmdldCkudHJpbSgpLmxlbmd0aCA9PT0gMCA/IGdhdGhlcmVyKHRhcmdldCwgZ2F0aGVyLCBpc1Jvb3QpIDogT3B0aW9uYWwuc29tZSh0YXJnZXQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVCciA9IChpc1Jvb3QsIGVsZW1lbnQsIGRpcmVjdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIGRpcmVjdGlvbi50cmF2ZXJzZShlbGVtZW50KS5vclRodW5rKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGdhdGhlcmVyKGVsZW1lbnQsIGRpcmVjdGlvbi5nYXRoZXIsIGlzUm9vdCk7XG4gICAgICB9KS5tYXAoZGlyZWN0aW9uLnJlbGF0aXZlKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRCciA9IChlbGVtZW50LCBvZmZzZXQpID0+IHtcbiAgICAgIHJldHVybiBjaGlsZCQyKGVsZW1lbnQsIG9mZnNldCkuZmlsdGVyKGlzQnIpLm9yVGh1bmsoKCkgPT4ge1xuICAgICAgICByZXR1cm4gY2hpbGQkMihlbGVtZW50LCBvZmZzZXQgLSAxKS5maWx0ZXIoaXNCcik7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZVBhcmVudCA9IChpc1Jvb3QsIGVsZW1lbnQsIG9mZnNldCwgZGlyZWN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gZmluZEJyKGVsZW1lbnQsIG9mZnNldCkuYmluZChiciA9PiB7XG4gICAgICAgIHJldHVybiBkaXJlY3Rpb24udHJhdmVyc2UoYnIpLmZvbGQoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBnYXRoZXJlcihiciwgZGlyZWN0aW9uLmdhdGhlciwgaXNSb290KS5tYXAoZGlyZWN0aW9uLnJlbGF0aXZlKTtcbiAgICAgICAgfSwgYWRqYWNlbnQgPT4ge1xuICAgICAgICAgIHJldHVybiBpbmRleEluUGFyZW50KGFkamFjZW50KS5tYXAoaW5mbyA9PiB7XG4gICAgICAgICAgICByZXR1cm4gU2l0dS5vbihpbmZvLnBhcmVudCwgaW5mby5pbmRleCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCB0cnlCciA9IChpc1Jvb3QsIGVsZW1lbnQsIG9mZnNldCwgZGlyZWN0aW9uKSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBpc0JyKGVsZW1lbnQpID8gaGFuZGxlQnIoaXNSb290LCBlbGVtZW50LCBkaXJlY3Rpb24pIDogaGFuZGxlUGFyZW50KGlzUm9vdCwgZWxlbWVudCwgb2Zmc2V0LCBkaXJlY3Rpb24pO1xuICAgICAgcmV0dXJuIHRhcmdldC5tYXAodGd0ID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogdGd0LFxuICAgICAgICAgIGZpbmlzaDogdGd0XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHByb2Nlc3MgPSBhbmFseXNpcyA9PiB7XG4gICAgICByZXR1cm4gQmVmb3JlQWZ0ZXIuY2F0YShhbmFseXNpcywgX21lc3NhZ2UgPT4ge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSwgKCkgPT4ge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSwgY2VsbCA9PiB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHBvaW50KGNlbGwsIDApKTtcbiAgICAgIH0sIGNlbGwgPT4ge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShwb2ludChjZWxsLCBnZXRFbmQoY2VsbCkpKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBtb3ZlRG93biA9IChjYXJldCwgYW1vdW50KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiBjYXJldC5sZWZ0LFxuICAgICAgICB0b3A6IGNhcmV0LnRvcCArIGFtb3VudCxcbiAgICAgICAgcmlnaHQ6IGNhcmV0LnJpZ2h0LFxuICAgICAgICBib3R0b206IGNhcmV0LmJvdHRvbSArIGFtb3VudFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG1vdmVVcCA9IChjYXJldCwgYW1vdW50KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiBjYXJldC5sZWZ0LFxuICAgICAgICB0b3A6IGNhcmV0LnRvcCAtIGFtb3VudCxcbiAgICAgICAgcmlnaHQ6IGNhcmV0LnJpZ2h0LFxuICAgICAgICBib3R0b206IGNhcmV0LmJvdHRvbSAtIGFtb3VudFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHRyYW5zbGF0ZSA9IChjYXJldCwgeERlbHRhLCB5RGVsdGEpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IGNhcmV0LmxlZnQgKyB4RGVsdGEsXG4gICAgICAgIHRvcDogY2FyZXQudG9wICsgeURlbHRhLFxuICAgICAgICByaWdodDogY2FyZXQucmlnaHQgKyB4RGVsdGEsXG4gICAgICAgIGJvdHRvbTogY2FyZXQuYm90dG9tICsgeURlbHRhXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZ2V0VG9wID0gY2FyZXQgPT4ge1xuICAgICAgcmV0dXJuIGNhcmV0LnRvcDtcbiAgICB9O1xuICAgIGNvbnN0IGdldEJvdHRvbSA9IGNhcmV0ID0+IHtcbiAgICAgIHJldHVybiBjYXJldC5ib3R0b207XG4gICAgfTtcblxuICAgIGNvbnN0IGdldFBhcnRpYWxCb3ggPSAoYnJpZGdlLCBlbGVtZW50LCBvZmZzZXQpID0+IHtcbiAgICAgIGlmIChvZmZzZXQgPj0gMCAmJiBvZmZzZXQgPCBnZXRFbmQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGJyaWRnZS5nZXRSYW5nZWRSZWN0KGVsZW1lbnQsIG9mZnNldCwgZWxlbWVudCwgb2Zmc2V0ICsgMSk7XG4gICAgICB9IGVsc2UgaWYgKG9mZnNldCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGJyaWRnZS5nZXRSYW5nZWRSZWN0KGVsZW1lbnQsIG9mZnNldCAtIDEsIGVsZW1lbnQsIG9mZnNldCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgdG9DYXJldCA9IHJlY3QgPT4gKHtcbiAgICAgIGxlZnQ6IHJlY3QubGVmdCxcbiAgICAgIHRvcDogcmVjdC50b3AsXG4gICAgICByaWdodDogcmVjdC5yaWdodCxcbiAgICAgIGJvdHRvbTogcmVjdC5ib3R0b21cbiAgICB9KTtcbiAgICBjb25zdCBnZXRFbGVtQm94ID0gKGJyaWRnZSwgZWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoYnJpZGdlLmdldFJlY3QoZWxlbWVudCkpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Qm94QXQgPSAoYnJpZGdlLCBlbGVtZW50LCBvZmZzZXQpID0+IHtcbiAgICAgIGlmIChpc0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGdldEVsZW1Cb3goYnJpZGdlLCBlbGVtZW50KS5tYXAodG9DYXJldCk7XG4gICAgICB9IGVsc2UgaWYgKGlzVGV4dChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZ2V0UGFydGlhbEJveChicmlkZ2UsIGVsZW1lbnQsIG9mZnNldCkubWFwKHRvQ2FyZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdldEVudGlyZUJveCA9IChicmlkZ2UsIGVsZW1lbnQpID0+IHtcbiAgICAgIGlmIChpc0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGdldEVsZW1Cb3goYnJpZGdlLCBlbGVtZW50KS5tYXAodG9DYXJldCk7XG4gICAgICB9IGVsc2UgaWYgKGlzVGV4dChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gYnJpZGdlLmdldFJhbmdlZFJlY3QoZWxlbWVudCwgMCwgZWxlbWVudCwgZ2V0RW5kKGVsZW1lbnQpKS5tYXAodG9DYXJldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBKVU1QX1NJWkUgPSA1O1xuICAgIGNvbnN0IE5VTV9SRVRSSUVTID0gMTAwO1xuICAgIGNvbnN0IGFkdCQxID0gQWR0LmdlbmVyYXRlKFtcbiAgICAgIHsgbm9uZTogW10gfSxcbiAgICAgIHsgcmV0cnk6IFsnY2FyZXQnXSB9XG4gICAgXSk7XG4gICAgY29uc3QgaXNPdXRzaWRlID0gKGNhcmV0LCBib3gpID0+IHtcbiAgICAgIHJldHVybiBjYXJldC5sZWZ0IDwgYm94LmxlZnQgfHwgTWF0aC5hYnMoYm94LnJpZ2h0IC0gY2FyZXQubGVmdCkgPCAxIHx8IGNhcmV0LmxlZnQgPiBib3gucmlnaHQ7XG4gICAgfTtcbiAgICBjb25zdCBpbk91dHNpZGVCbG9jayA9IChicmlkZ2UsIGVsZW1lbnQsIGNhcmV0KSA9PiB7XG4gICAgICByZXR1cm4gY2xvc2VzdCQyKGVsZW1lbnQsIGlzQmxvY2spLmZvbGQobmV2ZXIsIGNlbGwgPT4ge1xuICAgICAgICByZXR1cm4gZ2V0RW50aXJlQm94KGJyaWRnZSwgY2VsbCkuZXhpc3RzKGJveCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGlzT3V0c2lkZShjYXJldCwgYm94KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFkanVzdERvd24gPSAoYnJpZGdlLCBlbGVtZW50LCBndWVzc0JveCwgb3JpZ2luYWwsIGNhcmV0KSA9PiB7XG4gICAgICBjb25zdCBsb3dlckNhcmV0ID0gbW92ZURvd24oY2FyZXQsIEpVTVBfU0laRSk7XG4gICAgICBpZiAoTWF0aC5hYnMoZ3Vlc3NCb3guYm90dG9tIC0gb3JpZ2luYWwuYm90dG9tKSA8IDEpIHtcbiAgICAgICAgcmV0dXJuIGFkdCQxLnJldHJ5KGxvd2VyQ2FyZXQpO1xuICAgICAgfSBlbHNlIGlmIChndWVzc0JveC50b3AgPiBjYXJldC5ib3R0b20pIHtcbiAgICAgICAgcmV0dXJuIGFkdCQxLnJldHJ5KGxvd2VyQ2FyZXQpO1xuICAgICAgfSBlbHNlIGlmIChndWVzc0JveC50b3AgPT09IGNhcmV0LmJvdHRvbSkge1xuICAgICAgICByZXR1cm4gYWR0JDEucmV0cnkobW92ZURvd24oY2FyZXQsIDEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbk91dHNpZGVCbG9jayhicmlkZ2UsIGVsZW1lbnQsIGNhcmV0KSA/IGFkdCQxLnJldHJ5KHRyYW5zbGF0ZShsb3dlckNhcmV0LCBKVU1QX1NJWkUsIDApKSA6IGFkdCQxLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFkanVzdFVwID0gKGJyaWRnZSwgZWxlbWVudCwgZ3Vlc3NCb3gsIG9yaWdpbmFsLCBjYXJldCkgPT4ge1xuICAgICAgY29uc3QgaGlnaGVyQ2FyZXQgPSBtb3ZlVXAoY2FyZXQsIEpVTVBfU0laRSk7XG4gICAgICBpZiAoTWF0aC5hYnMoZ3Vlc3NCb3gudG9wIC0gb3JpZ2luYWwudG9wKSA8IDEpIHtcbiAgICAgICAgcmV0dXJuIGFkdCQxLnJldHJ5KGhpZ2hlckNhcmV0KTtcbiAgICAgIH0gZWxzZSBpZiAoZ3Vlc3NCb3guYm90dG9tIDwgY2FyZXQudG9wKSB7XG4gICAgICAgIHJldHVybiBhZHQkMS5yZXRyeShoaWdoZXJDYXJldCk7XG4gICAgICB9IGVsc2UgaWYgKGd1ZXNzQm94LmJvdHRvbSA9PT0gY2FyZXQudG9wKSB7XG4gICAgICAgIHJldHVybiBhZHQkMS5yZXRyeShtb3ZlVXAoY2FyZXQsIDEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbk91dHNpZGVCbG9jayhicmlkZ2UsIGVsZW1lbnQsIGNhcmV0KSA/IGFkdCQxLnJldHJ5KHRyYW5zbGF0ZShoaWdoZXJDYXJldCwgSlVNUF9TSVpFLCAwKSkgOiBhZHQkMS5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB1cE1vdmVtZW50ID0ge1xuICAgICAgcG9pbnQ6IGdldFRvcCxcbiAgICAgIGFkanVzdGVyOiBhZGp1c3RVcCxcbiAgICAgIG1vdmU6IG1vdmVVcCxcbiAgICAgIGdhdGhlcjogYmVmb3JlXG4gICAgfTtcbiAgICBjb25zdCBkb3duTW92ZW1lbnQgPSB7XG4gICAgICBwb2ludDogZ2V0Qm90dG9tLFxuICAgICAgYWRqdXN0ZXI6IGFkanVzdERvd24sXG4gICAgICBtb3ZlOiBtb3ZlRG93bixcbiAgICAgIGdhdGhlcjogYWZ0ZXIkMVxuICAgIH07XG4gICAgY29uc3QgaXNBdFRhYmxlID0gKGJyaWRnZSwgeCwgeSkgPT4ge1xuICAgICAgcmV0dXJuIGJyaWRnZS5lbGVtZW50RnJvbVBvaW50KHgsIHkpLmZpbHRlcihlbG0gPT4ge1xuICAgICAgICByZXR1cm4gbmFtZShlbG0pID09PSAndGFibGUnO1xuICAgICAgfSkuaXNTb21lKCk7XG4gICAgfTtcbiAgICBjb25zdCBhZGp1c3RGb3JUYWJsZSA9IChicmlkZ2UsIG1vdmVtZW50LCBvcmlnaW5hbCwgY2FyZXQsIG51bVJldHJpZXMpID0+IHtcbiAgICAgIHJldHVybiBhZGp1c3RUaWwoYnJpZGdlLCBtb3ZlbWVudCwgb3JpZ2luYWwsIG1vdmVtZW50Lm1vdmUoY2FyZXQsIEpVTVBfU0laRSksIG51bVJldHJpZXMpO1xuICAgIH07XG4gICAgY29uc3QgYWRqdXN0VGlsID0gKGJyaWRnZSwgbW92ZW1lbnQsIG9yaWdpbmFsLCBjYXJldCwgbnVtUmV0cmllcykgPT4ge1xuICAgICAgaWYgKG51bVJldHJpZXMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoY2FyZXQpO1xuICAgICAgfVxuICAgICAgaWYgKGlzQXRUYWJsZShicmlkZ2UsIGNhcmV0LmxlZnQsIG1vdmVtZW50LnBvaW50KGNhcmV0KSkpIHtcbiAgICAgICAgcmV0dXJuIGFkanVzdEZvclRhYmxlKGJyaWRnZSwgbW92ZW1lbnQsIG9yaWdpbmFsLCBjYXJldCwgbnVtUmV0cmllcyAtIDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJyaWRnZS5zaXR1c0Zyb21Qb2ludChjYXJldC5sZWZ0LCBtb3ZlbWVudC5wb2ludChjYXJldCkpLmJpbmQoZ3Vlc3MgPT4ge1xuICAgICAgICByZXR1cm4gZ3Vlc3Muc3RhcnQuZm9sZChPcHRpb25hbC5ub25lLCBlbGVtZW50ID0+IHtcbiAgICAgICAgICByZXR1cm4gZ2V0RW50aXJlQm94KGJyaWRnZSwgZWxlbWVudCkuYmluZChndWVzc0JveCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbW92ZW1lbnQuYWRqdXN0ZXIoYnJpZGdlLCBlbGVtZW50LCBndWVzc0JveCwgb3JpZ2luYWwsIGNhcmV0KS5mb2xkKE9wdGlvbmFsLm5vbmUsIG5ld0NhcmV0ID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGFkanVzdFRpbChicmlkZ2UsIG1vdmVtZW50LCBvcmlnaW5hbCwgbmV3Q2FyZXQsIG51bVJldHJpZXMgLSAxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLm9yVGh1bmsoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoY2FyZXQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBPcHRpb25hbC5ub25lKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgY2hlY2tTY3JvbGwgPSAobW92ZW1lbnQsIGFkanVzdGVkLCBicmlkZ2UpID0+IHtcbiAgICAgIGlmIChtb3ZlbWVudC5wb2ludChhZGp1c3RlZCkgPiBicmlkZ2UuZ2V0SW5uZXJIZWlnaHQoKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShtb3ZlbWVudC5wb2ludChhZGp1c3RlZCkgLSBicmlkZ2UuZ2V0SW5uZXJIZWlnaHQoKSk7XG4gICAgICB9IGVsc2UgaWYgKG1vdmVtZW50LnBvaW50KGFkanVzdGVkKSA8IDApIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoLW1vdmVtZW50LnBvaW50KGFkanVzdGVkKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmV0cnkgPSAobW92ZW1lbnQsIGJyaWRnZSwgY2FyZXQpID0+IHtcbiAgICAgIGNvbnN0IG1vdmVkID0gbW92ZW1lbnQubW92ZShjYXJldCwgSlVNUF9TSVpFKTtcbiAgICAgIGNvbnN0IGFkanVzdGVkID0gYWRqdXN0VGlsKGJyaWRnZSwgbW92ZW1lbnQsIGNhcmV0LCBtb3ZlZCwgTlVNX1JFVFJJRVMpLmdldE9yKG1vdmVkKTtcbiAgICAgIHJldHVybiBjaGVja1Njcm9sbChtb3ZlbWVudCwgYWRqdXN0ZWQsIGJyaWRnZSkuZm9sZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBicmlkZ2Uuc2l0dXNGcm9tUG9pbnQoYWRqdXN0ZWQubGVmdCwgbW92ZW1lbnQucG9pbnQoYWRqdXN0ZWQpKTtcbiAgICAgIH0sIGRlbHRhID0+IHtcbiAgICAgICAgYnJpZGdlLnNjcm9sbEJ5KDAsIGRlbHRhKTtcbiAgICAgICAgcmV0dXJuIGJyaWRnZS5zaXR1c0Zyb21Qb2ludChhZGp1c3RlZC5sZWZ0LCBtb3ZlbWVudC5wb2ludChhZGp1c3RlZCkgLSBkZWx0YSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IFJldHJpZXMgPSB7XG4gICAgICB0cnlVcDogY3VycnkocmV0cnksIHVwTW92ZW1lbnQpLFxuICAgICAgdHJ5RG93bjogY3VycnkocmV0cnksIGRvd25Nb3ZlbWVudCksXG4gICAgICBnZXRKdW1wU2l6ZTogY29uc3RhbnQoSlVNUF9TSVpFKVxuICAgIH07XG5cbiAgICBjb25zdCBNQVhfUkVUUklFUyA9IDIwO1xuICAgIGNvbnN0IGZpbmRTcG90ID0gKGJyaWRnZSwgaXNSb290LCBkaXJlY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiBicmlkZ2UuZ2V0U2VsZWN0aW9uKCkuYmluZChzZWwgPT4ge1xuICAgICAgICByZXR1cm4gdHJ5QnIoaXNSb290LCBzZWwuZmluaXNoLCBzZWwuZm9mZnNldCwgZGlyZWN0aW9uKS5mb2xkKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShwb2ludChzZWwuZmluaXNoLCBzZWwuZm9mZnNldCkpO1xuICAgICAgICB9LCBick5laWdoYm91ciA9PiB7XG4gICAgICAgICAgY29uc3QgcmFuZ2UgPSBicmlkZ2UuZnJvbVNpdHVzKGJyTmVpZ2hib3VyKTtcbiAgICAgICAgICBjb25zdCBhbmFseXNpcyA9IEJlZm9yZUFmdGVyLnZlcmlmeShicmlkZ2UsIHNlbC5maW5pc2gsIHNlbC5mb2Zmc2V0LCByYW5nZS5maW5pc2gsIHJhbmdlLmZvZmZzZXQsIGRpcmVjdGlvbi5mYWlsdXJlLCBpc1Jvb3QpO1xuICAgICAgICAgIHJldHVybiBwcm9jZXNzKGFuYWx5c2lzKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHNjYW4gPSAoYnJpZGdlLCBpc1Jvb3QsIGVsZW1lbnQsIG9mZnNldCwgZGlyZWN0aW9uLCBudW1SZXRyaWVzKSA9PiB7XG4gICAgICBpZiAobnVtUmV0cmllcyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRyeUN1cnNvcihicmlkZ2UsIGlzUm9vdCwgZWxlbWVudCwgb2Zmc2V0LCBkaXJlY3Rpb24pLmJpbmQoc2l0dXMgPT4ge1xuICAgICAgICBjb25zdCByYW5nZSA9IGJyaWRnZS5mcm9tU2l0dXMoc2l0dXMpO1xuICAgICAgICBjb25zdCBhbmFseXNpcyA9IEJlZm9yZUFmdGVyLnZlcmlmeShicmlkZ2UsIGVsZW1lbnQsIG9mZnNldCwgcmFuZ2UuZmluaXNoLCByYW5nZS5mb2Zmc2V0LCBkaXJlY3Rpb24uZmFpbHVyZSwgaXNSb290KTtcbiAgICAgICAgcmV0dXJuIEJlZm9yZUFmdGVyLmNhdGEoYW5hbHlzaXMsICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoc2l0dXMpO1xuICAgICAgICB9LCBjZWxsID0+IHtcbiAgICAgICAgICBpZiAoZXEkMShlbGVtZW50LCBjZWxsKSAmJiBvZmZzZXQgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnlBZ2FpbihicmlkZ2UsIGVsZW1lbnQsIG9mZnNldCwgbW92ZVVwLCBkaXJlY3Rpb24pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc2NhbihicmlkZ2UsIGlzUm9vdCwgY2VsbCwgMCwgZGlyZWN0aW9uLCBudW1SZXRyaWVzIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBjZWxsID0+IHtcbiAgICAgICAgICBpZiAoZXEkMShlbGVtZW50LCBjZWxsKSAmJiBvZmZzZXQgPT09IGdldEVuZChjZWxsKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRyeUFnYWluKGJyaWRnZSwgZWxlbWVudCwgb2Zmc2V0LCBtb3ZlRG93biwgZGlyZWN0aW9uKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHNjYW4oYnJpZGdlLCBpc1Jvb3QsIGNlbGwsIGdldEVuZChjZWxsKSwgZGlyZWN0aW9uLCBudW1SZXRyaWVzIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgdHJ5QWdhaW4gPSAoYnJpZGdlLCBlbGVtZW50LCBvZmZzZXQsIG1vdmUsIGRpcmVjdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIGdldEJveEF0KGJyaWRnZSwgZWxlbWVudCwgb2Zmc2V0KS5iaW5kKGJveCA9PiB7XG4gICAgICAgIHJldHVybiB0cnlBdChicmlkZ2UsIGRpcmVjdGlvbiwgbW92ZShib3gsIFJldHJpZXMuZ2V0SnVtcFNpemUoKSkpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCB0cnlBdCA9IChicmlkZ2UsIGRpcmVjdGlvbiwgYm94KSA9PiB7XG4gICAgICBjb25zdCBicm93c2VyID0gZGV0ZWN0JDIoKS5icm93c2VyO1xuICAgICAgaWYgKGJyb3dzZXIuaXNDaHJvbWl1bSgpIHx8IGJyb3dzZXIuaXNTYWZhcmkoKSB8fCBicm93c2VyLmlzRmlyZWZveCgpKSB7XG4gICAgICAgIHJldHVybiBkaXJlY3Rpb24ucmV0cnkoYnJpZGdlLCBib3gpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHRyeUN1cnNvciA9IChicmlkZ2UsIGlzUm9vdCwgZWxlbWVudCwgb2Zmc2V0LCBkaXJlY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiBnZXRCb3hBdChicmlkZ2UsIGVsZW1lbnQsIG9mZnNldCkuYmluZChib3ggPT4ge1xuICAgICAgICByZXR1cm4gdHJ5QXQoYnJpZGdlLCBkaXJlY3Rpb24sIGJveCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZSQxID0gKGJyaWRnZSwgaXNSb290LCBkaXJlY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiBmaW5kU3BvdChicmlkZ2UsIGlzUm9vdCwgZGlyZWN0aW9uKS5iaW5kKHNwb3QgPT4ge1xuICAgICAgICByZXR1cm4gc2NhbihicmlkZ2UsIGlzUm9vdCwgc3BvdC5lbGVtZW50LCBzcG90Lm9mZnNldCwgZGlyZWN0aW9uLCBNQVhfUkVUUklFUykubWFwKGJyaWRnZS5mcm9tU2l0dXMpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGluU2FtZVRhYmxlID0gKGVsZW0sIHRhYmxlKSA9PiB7XG4gICAgICByZXR1cm4gYW5jZXN0b3IoZWxlbSwgZSA9PiB7XG4gICAgICAgIHJldHVybiBwYXJlbnQoZSkuZXhpc3RzKHAgPT4ge1xuICAgICAgICAgIHJldHVybiBlcSQxKHAsIHRhYmxlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHNpbXVsYXRlID0gKGJyaWRnZSwgaXNSb290LCBkaXJlY3Rpb24sIGluaXRpYWwsIGFuY2hvcikgPT4ge1xuICAgICAgcmV0dXJuIGNsb3Nlc3QkMShpbml0aWFsLCAndGQsdGgnLCBpc1Jvb3QpLmJpbmQoc3RhcnQgPT4ge1xuICAgICAgICByZXR1cm4gY2xvc2VzdCQxKHN0YXJ0LCAndGFibGUnLCBpc1Jvb3QpLmJpbmQodGFibGUgPT4ge1xuICAgICAgICAgIGlmICghaW5TYW1lVGFibGUoYW5jaG9yLCB0YWJsZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBoYW5kbGUkMShicmlkZ2UsIGlzUm9vdCwgZGlyZWN0aW9uKS5iaW5kKHJhbmdlID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjbG9zZXN0JDEocmFuZ2UuZmluaXNoLCAndGQsdGgnLCBpc1Jvb3QpLm1hcChmaW5pc2ggPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgICAgIGZpbmlzaCxcbiAgICAgICAgICAgICAgICByYW5nZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBuYXZpZ2F0ZSA9IChicmlkZ2UsIGlzUm9vdCwgZGlyZWN0aW9uLCBpbml0aWFsLCBhbmNob3IsIHByZWNoZWNrKSA9PiB7XG4gICAgICByZXR1cm4gcHJlY2hlY2soaW5pdGlhbCwgaXNSb290KS5vclRodW5rKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHNpbXVsYXRlKGJyaWRnZSwgaXNSb290LCBkaXJlY3Rpb24sIGluaXRpYWwsIGFuY2hvcikubWFwKGluZm8gPT4ge1xuICAgICAgICAgIGNvbnN0IHJhbmdlID0gaW5mby5yYW5nZTtcbiAgICAgICAgICByZXR1cm4gUmVzcG9uc2UuY3JlYXRlKE9wdGlvbmFsLnNvbWUobWFrZVNpdHVzKHJhbmdlLnN0YXJ0LCByYW5nZS5zb2Zmc2V0LCByYW5nZS5maW5pc2gsIHJhbmdlLmZvZmZzZXQpKSwgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJzdFVwQ2hlY2sgPSAoaW5pdGlhbCwgaXNSb290KSA9PiB7XG4gICAgICByZXR1cm4gY2xvc2VzdCQxKGluaXRpYWwsICd0cicsIGlzUm9vdCkuYmluZChzdGFydFJvdyA9PiB7XG4gICAgICAgIHJldHVybiBjbG9zZXN0JDEoc3RhcnRSb3csICd0YWJsZScsIGlzUm9vdCkuYmluZCh0YWJsZSA9PiB7XG4gICAgICAgICAgY29uc3Qgcm93cyA9IGRlc2NlbmRhbnRzKHRhYmxlLCAndHInKTtcbiAgICAgICAgICBpZiAoZXEkMShzdGFydFJvdywgcm93c1swXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWVrTGVmdCh0YWJsZSwgZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBsYXN0JDEoZWxlbWVudCkuaXNTb21lKCk7XG4gICAgICAgICAgICB9LCBpc1Jvb3QpLm1hcChsYXN0ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbGFzdE9mZnNldCA9IGdldEVuZChsYXN0KTtcbiAgICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlLmNyZWF0ZShPcHRpb25hbC5zb21lKG1ha2VTaXR1cyhsYXN0LCBsYXN0T2Zmc2V0LCBsYXN0LCBsYXN0T2Zmc2V0KSksIHRydWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbGFzdERvd25DaGVjayA9IChpbml0aWFsLCBpc1Jvb3QpID0+IHtcbiAgICAgIHJldHVybiBjbG9zZXN0JDEoaW5pdGlhbCwgJ3RyJywgaXNSb290KS5iaW5kKHN0YXJ0Um93ID0+IHtcbiAgICAgICAgcmV0dXJuIGNsb3Nlc3QkMShzdGFydFJvdywgJ3RhYmxlJywgaXNSb290KS5iaW5kKHRhYmxlID0+IHtcbiAgICAgICAgICBjb25zdCByb3dzID0gZGVzY2VuZGFudHModGFibGUsICd0cicpO1xuICAgICAgICAgIGlmIChlcSQxKHN0YXJ0Um93LCByb3dzW3Jvd3MubGVuZ3RoIC0gMV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gc2Vla1JpZ2h0KHRhYmxlLCBlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0KGVsZW1lbnQpLmlzU29tZSgpO1xuICAgICAgICAgICAgfSwgaXNSb290KS5tYXAoZmlyc3QgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gUmVzcG9uc2UuY3JlYXRlKE9wdGlvbmFsLnNvbWUobWFrZVNpdHVzKGZpcnN0LCAwLCBmaXJzdCwgMCkpLCB0cnVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHNlbGVjdCA9IChicmlkZ2UsIGNvbnRhaW5lciwgaXNSb290LCBkaXJlY3Rpb24sIGluaXRpYWwsIGFuY2hvciwgc2VsZWN0UmFuZ2UpID0+IHtcbiAgICAgIHJldHVybiBzaW11bGF0ZShicmlkZ2UsIGlzUm9vdCwgZGlyZWN0aW9uLCBpbml0aWFsLCBhbmNob3IpLmJpbmQoaW5mbyA9PiB7XG4gICAgICAgIHJldHVybiBkZXRlY3QoY29udGFpbmVyLCBpc1Jvb3QsIGluZm8uc3RhcnQsIGluZm8uZmluaXNoLCBzZWxlY3RSYW5nZSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgQ2VsbCA9IGluaXRpYWwgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gaW5pdGlhbDtcbiAgICAgIGNvbnN0IGdldCA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldCA9IHYgPT4ge1xuICAgICAgICB2YWx1ZSA9IHY7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0LFxuICAgICAgICBzZXRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHNpbmdsZXRvbiA9IGRvUmV2b2tlID0+IHtcbiAgICAgIGNvbnN0IHN1YmplY3QgPSBDZWxsKE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgICBjb25zdCByZXZva2UgPSAoKSA9PiBzdWJqZWN0LmdldCgpLmVhY2goZG9SZXZva2UpO1xuICAgICAgY29uc3QgY2xlYXIgPSAoKSA9PiB7XG4gICAgICAgIHJldm9rZSgpO1xuICAgICAgICBzdWJqZWN0LnNldChPcHRpb25hbC5ub25lKCkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzU2V0ID0gKCkgPT4gc3ViamVjdC5nZXQoKS5pc1NvbWUoKTtcbiAgICAgIGNvbnN0IGdldCA9ICgpID0+IHN1YmplY3QuZ2V0KCk7XG4gICAgICBjb25zdCBzZXQgPSBzID0+IHtcbiAgICAgICAgcmV2b2tlKCk7XG4gICAgICAgIHN1YmplY3Quc2V0KE9wdGlvbmFsLnNvbWUocykpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsZWFyLFxuICAgICAgICBpc1NldCxcbiAgICAgICAgZ2V0LFxuICAgICAgICBzZXRcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCB2YWx1ZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHN1YmplY3QgPSBzaW5nbGV0b24obm9vcCk7XG4gICAgICBjb25zdCBvbiA9IGYgPT4gc3ViamVjdC5nZXQoKS5lYWNoKGYpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3ViamVjdCxcbiAgICAgICAgb25cbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGZpbmRDZWxsID0gKHRhcmdldCwgaXNSb290KSA9PiBjbG9zZXN0JDEodGFyZ2V0LCAndGQsdGgnLCBpc1Jvb3QpO1xuICAgIGNvbnN0IGlzSW5FZGl0YWJsZUNvbnRleHQgPSBjZWxsID0+IHBhcmVudEVsZW1lbnQoY2VsbCkuZXhpc3RzKGlzRWRpdGFibGUkMSk7XG4gICAgY29uc3QgTW91c2VTZWxlY3Rpb24gPSAoYnJpZGdlLCBjb250YWluZXIsIGlzUm9vdCwgYW5ub3RhdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGN1cnNvciA9IHZhbHVlKCk7XG4gICAgICBjb25zdCBjbGVhcnN0YXRlID0gY3Vyc29yLmNsZWFyO1xuICAgICAgY29uc3QgYXBwbHlTZWxlY3Rpb24gPSBldmVudCA9PiB7XG4gICAgICAgIGN1cnNvci5vbihzdGFydCA9PiB7XG4gICAgICAgICAgYW5ub3RhdGlvbnMuY2xlYXJCZWZvcmVVcGRhdGUoY29udGFpbmVyKTtcbiAgICAgICAgICBmaW5kQ2VsbChldmVudC50YXJnZXQsIGlzUm9vdCkuZWFjaChmaW5pc2ggPT4ge1xuICAgICAgICAgICAgaWRlbnRpZnkoc3RhcnQsIGZpbmlzaCwgaXNSb290KS5lYWNoKGNlbGxTZWwgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBib3hlcyA9IGNlbGxTZWwuYm94ZXMuZ2V0T3IoW10pO1xuICAgICAgICAgICAgICBpZiAoYm94ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2luZ2xlQ2VsbCA9IGJveGVzWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzTm9uRWRpdGFibGVDZWxsID0gZ2V0UmF3KHNpbmdsZUNlbGwpID09PSAnZmFsc2UnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQ2VsbENsb3Nlc3RDb250ZW50RWRpdGFibGUgPSBpcyhjbG9zZXN0KGV2ZW50LnRhcmdldCksIHNpbmdsZUNlbGwsIGVxJDEpO1xuICAgICAgICAgICAgICAgIGlmIChpc05vbkVkaXRhYmxlQ2VsbCAmJiBpc0NlbGxDbG9zZXN0Q29udGVudEVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICBhbm5vdGF0aW9ucy5zZWxlY3RSYW5nZShjb250YWluZXIsIGJveGVzLCBzaW5nbGVDZWxsLCBzaW5nbGVDZWxsKTtcbiAgICAgICAgICAgICAgICAgIGJyaWRnZS5zZWxlY3RDb250ZW50cyhzaW5nbGVDZWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYm94ZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGFubm90YXRpb25zLnNlbGVjdFJhbmdlKGNvbnRhaW5lciwgYm94ZXMsIGNlbGxTZWwuc3RhcnQsIGNlbGxTZWwuZmluaXNoKTtcbiAgICAgICAgICAgICAgICBicmlkZ2Uuc2VsZWN0Q29udGVudHMoZmluaXNoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG1vdXNlZG93biA9IGV2ZW50ID0+IHtcbiAgICAgICAgYW5ub3RhdGlvbnMuY2xlYXIoY29udGFpbmVyKTtcbiAgICAgICAgZmluZENlbGwoZXZlbnQudGFyZ2V0LCBpc1Jvb3QpLmZpbHRlcihpc0luRWRpdGFibGVDb250ZXh0KS5lYWNoKGN1cnNvci5zZXQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG1vdXNlb3ZlciA9IGV2ZW50ID0+IHtcbiAgICAgICAgYXBwbHlTZWxlY3Rpb24oZXZlbnQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG1vdXNldXAgPSBldmVudCA9PiB7XG4gICAgICAgIGFwcGx5U2VsZWN0aW9uKGV2ZW50KTtcbiAgICAgICAgY2xlYXJzdGF0ZSgpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsZWFyc3RhdGUsXG4gICAgICAgIG1vdXNlZG93bixcbiAgICAgICAgbW91c2VvdmVyLFxuICAgICAgICBtb3VzZXVwXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBkb3duID0ge1xuICAgICAgdHJhdmVyc2U6IG5leHRTaWJsaW5nLFxuICAgICAgZ2F0aGVyOiBhZnRlciQxLFxuICAgICAgcmVsYXRpdmU6IFNpdHUuYmVmb3JlLFxuICAgICAgcmV0cnk6IFJldHJpZXMudHJ5RG93bixcbiAgICAgIGZhaWx1cmU6IEJlZm9yZUFmdGVyLmZhaWxlZERvd25cbiAgICB9O1xuICAgIGNvbnN0IHVwID0ge1xuICAgICAgdHJhdmVyc2U6IHByZXZTaWJsaW5nLFxuICAgICAgZ2F0aGVyOiBiZWZvcmUsXG4gICAgICByZWxhdGl2ZTogU2l0dS5iZWZvcmUsXG4gICAgICByZXRyeTogUmV0cmllcy50cnlVcCxcbiAgICAgIGZhaWx1cmU6IEJlZm9yZUFmdGVyLmZhaWxlZFVwXG4gICAgfTtcblxuICAgIGNvbnN0IGlzS2V5ID0ga2V5ID0+IHtcbiAgICAgIHJldHVybiBrZXljb2RlID0+IHtcbiAgICAgICAgcmV0dXJuIGtleWNvZGUgPT09IGtleTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBpc1VwID0gaXNLZXkoMzgpO1xuICAgIGNvbnN0IGlzRG93biA9IGlzS2V5KDQwKTtcbiAgICBjb25zdCBpc05hdmlnYXRpb24gPSBrZXljb2RlID0+IHtcbiAgICAgIHJldHVybiBrZXljb2RlID49IDM3ICYmIGtleWNvZGUgPD0gNDA7XG4gICAgfTtcbiAgICBjb25zdCBsdHIgPSB7XG4gICAgICBpc0JhY2t3YXJkOiBpc0tleSgzNyksXG4gICAgICBpc0ZvcndhcmQ6IGlzS2V5KDM5KVxuICAgIH07XG4gICAgY29uc3QgcnRsID0ge1xuICAgICAgaXNCYWNrd2FyZDogaXNLZXkoMzkpLFxuICAgICAgaXNGb3J3YXJkOiBpc0tleSgzNylcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0JDMgPSBfRE9DID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IF9ET0MgIT09IHVuZGVmaW5lZCA/IF9ET0MuZG9tIDogZG9jdW1lbnQ7XG4gICAgICBjb25zdCB4ID0gZG9jLmJvZHkuc2Nyb2xsTGVmdCB8fCBkb2MuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICBjb25zdCB5ID0gZG9jLmJvZHkuc2Nyb2xsVG9wIHx8IGRvYy5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgICAgcmV0dXJuIFN1Z2FyUG9zaXRpb24oeCwgeSk7XG4gICAgfTtcbiAgICBjb25zdCBieSA9ICh4LCB5LCBfRE9DKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBfRE9DICE9PSB1bmRlZmluZWQgPyBfRE9DLmRvbSA6IGRvY3VtZW50O1xuICAgICAgY29uc3Qgd2luID0gZG9jLmRlZmF1bHRWaWV3O1xuICAgICAgaWYgKHdpbikge1xuICAgICAgICB3aW4uc2Nyb2xsQnkoeCwgeSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGFkdCA9IEFkdC5nZW5lcmF0ZShbXG4gICAgICB7IGRvbVJhbmdlOiBbJ3JuZyddIH0sXG4gICAgICB7XG4gICAgICAgIHJlbGF0aXZlOiBbXG4gICAgICAgICAgJ3N0YXJ0U2l0dScsXG4gICAgICAgICAgJ2ZpbmlzaFNpdHUnXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGV4YWN0OiBbXG4gICAgICAgICAgJ3N0YXJ0JyxcbiAgICAgICAgICAnc29mZnNldCcsXG4gICAgICAgICAgJ2ZpbmlzaCcsXG4gICAgICAgICAgJ2ZvZmZzZXQnXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdKTtcbiAgICBjb25zdCBleGFjdEZyb21SYW5nZSA9IHNpbVJhbmdlID0+IGFkdC5leGFjdChzaW1SYW5nZS5zdGFydCwgc2ltUmFuZ2Uuc29mZnNldCwgc2ltUmFuZ2UuZmluaXNoLCBzaW1SYW5nZS5mb2Zmc2V0KTtcbiAgICBjb25zdCBnZXRTdGFydCA9IHNlbGVjdGlvbiA9PiBzZWxlY3Rpb24ubWF0Y2goe1xuICAgICAgZG9tUmFuZ2U6IHJuZyA9PiBTdWdhckVsZW1lbnQuZnJvbURvbShybmcuc3RhcnRDb250YWluZXIpLFxuICAgICAgcmVsYXRpdmU6IChzdGFydFNpdHUsIF9maW5pc2hTaXR1KSA9PiBTaXR1LmdldFN0YXJ0KHN0YXJ0U2l0dSksXG4gICAgICBleGFjdDogKHN0YXJ0LCBfc29mZnNldCwgX2ZpbmlzaCwgX2ZvZmZzZXQpID0+IHN0YXJ0XG4gICAgfSk7XG4gICAgY29uc3QgZG9tUmFuZ2UgPSBhZHQuZG9tUmFuZ2U7XG4gICAgY29uc3QgcmVsYXRpdmUgPSBhZHQucmVsYXRpdmU7XG4gICAgY29uc3QgZXhhY3QgPSBhZHQuZXhhY3Q7XG4gICAgY29uc3QgZ2V0V2luID0gc2VsZWN0aW9uID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gZ2V0U3RhcnQoc2VsZWN0aW9uKTtcbiAgICAgIHJldHVybiBkZWZhdWx0VmlldyhzdGFydCk7XG4gICAgfTtcbiAgICBjb25zdCByYW5nZSA9IFNpbVJhbmdlLmNyZWF0ZTtcbiAgICBjb25zdCBTaW1TZWxlY3Rpb24gPSB7XG4gICAgICBkb21SYW5nZSxcbiAgICAgIHJlbGF0aXZlLFxuICAgICAgZXhhY3QsXG4gICAgICBleGFjdEZyb21SYW5nZSxcbiAgICAgIGdldFdpbixcbiAgICAgIHJhbmdlXG4gICAgfTtcblxuICAgIGNvbnN0IGNhcmV0UG9zaXRpb25Gcm9tUG9pbnQgPSAoZG9jLCB4LCB5KSA9PiB7XG4gICAgICB2YXIgX2EsIF9iO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oKF9iID0gKF9hID0gZG9jLmRvbSkuY2FyZXRQb3NpdGlvbkZyb21Qb2ludCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHgsIHkpKS5iaW5kKHBvcyA9PiB7XG4gICAgICAgIGlmIChwb3Mub2Zmc2V0Tm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgciA9IGRvYy5kb20uY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgci5zZXRTdGFydChwb3Mub2Zmc2V0Tm9kZSwgcG9zLm9mZnNldCk7XG4gICAgICAgIHIuY29sbGFwc2UoKTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUocik7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGNhcmV0UmFuZ2VGcm9tUG9pbnQgPSAoZG9jLCB4LCB5KSA9PiB7XG4gICAgICB2YXIgX2EsIF9iO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oKF9iID0gKF9hID0gZG9jLmRvbSkuY2FyZXRSYW5nZUZyb21Qb2ludCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHgsIHkpKTtcbiAgICB9O1xuICAgIGNvbnN0IGF2YWlsYWJsZVNlYXJjaCA9ICgoKSA9PiB7XG4gICAgICBpZiAoZG9jdW1lbnQuY2FyZXRQb3NpdGlvbkZyb21Qb2ludCkge1xuICAgICAgICByZXR1cm4gY2FyZXRQb3NpdGlvbkZyb21Qb2ludDtcbiAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQuY2FyZXRSYW5nZUZyb21Qb2ludCkge1xuICAgICAgICByZXR1cm4gY2FyZXRSYW5nZUZyb21Qb2ludDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lO1xuICAgICAgfVxuICAgIH0pKCk7XG4gICAgY29uc3QgZnJvbVBvaW50ID0gKHdpbiwgeCwgeSkgPT4ge1xuICAgICAgY29uc3QgZG9jID0gU3VnYXJFbGVtZW50LmZyb21Eb20od2luLmRvY3VtZW50KTtcbiAgICAgIHJldHVybiBhdmFpbGFibGVTZWFyY2goZG9jLCB4LCB5KS5tYXAocm5nID0+IFNpbVJhbmdlLmNyZWF0ZShTdWdhckVsZW1lbnQuZnJvbURvbShybmcuc3RhcnRDb250YWluZXIpLCBybmcuc3RhcnRPZmZzZXQsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJuZy5lbmRDb250YWluZXIpLCBybmcuZW5kT2Zmc2V0KSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJlZm9yZVNwZWNpYWwgPSAoZWxlbWVudCwgb2Zmc2V0KSA9PiB7XG4gICAgICBjb25zdCBuYW1lJDEgPSBuYW1lKGVsZW1lbnQpO1xuICAgICAgaWYgKCdpbnB1dCcgPT09IG5hbWUkMSkge1xuICAgICAgICByZXR1cm4gU2l0dS5hZnRlcihlbGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoIWNvbnRhaW5zJDIoW1xuICAgICAgICAgICdicicsXG4gICAgICAgICAgJ2ltZydcbiAgICAgICAgXSwgbmFtZSQxKSkge1xuICAgICAgICByZXR1cm4gU2l0dS5vbihlbGVtZW50LCBvZmZzZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9mZnNldCA9PT0gMCA/IFNpdHUuYmVmb3JlKGVsZW1lbnQpIDogU2l0dS5hZnRlcihlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHByZXByb2Nlc3NSZWxhdGl2ZSA9IChzdGFydFNpdHUsIGZpbmlzaFNpdHUpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gc3RhcnRTaXR1LmZvbGQoU2l0dS5iZWZvcmUsIGJlZm9yZVNwZWNpYWwsIFNpdHUuYWZ0ZXIpO1xuICAgICAgY29uc3QgZmluaXNoID0gZmluaXNoU2l0dS5mb2xkKFNpdHUuYmVmb3JlLCBiZWZvcmVTcGVjaWFsLCBTaXR1LmFmdGVyKTtcbiAgICAgIHJldHVybiBTaW1TZWxlY3Rpb24ucmVsYXRpdmUoc3RhcnQsIGZpbmlzaCk7XG4gICAgfTtcbiAgICBjb25zdCBwcmVwcm9jZXNzRXhhY3QgPSAoc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCkgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRTaXR1ID0gYmVmb3JlU3BlY2lhbChzdGFydCwgc29mZnNldCk7XG4gICAgICBjb25zdCBmaW5pc2hTaXR1ID0gYmVmb3JlU3BlY2lhbChmaW5pc2gsIGZvZmZzZXQpO1xuICAgICAgcmV0dXJuIFNpbVNlbGVjdGlvbi5yZWxhdGl2ZShzdGFydFNpdHUsIGZpbmlzaFNpdHUpO1xuICAgIH07XG5cbiAgICBjb25zdCBtYWtlUmFuZ2UgPSAoc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCkgPT4ge1xuICAgICAgY29uc3QgZG9jID0gb3duZXIoc3RhcnQpO1xuICAgICAgY29uc3Qgcm5nID0gZG9jLmRvbS5jcmVhdGVSYW5nZSgpO1xuICAgICAgcm5nLnNldFN0YXJ0KHN0YXJ0LmRvbSwgc29mZnNldCk7XG4gICAgICBybmcuc2V0RW5kKGZpbmlzaC5kb20sIGZvZmZzZXQpO1xuICAgICAgcmV0dXJuIHJuZztcbiAgICB9O1xuICAgIGNvbnN0IGFmdGVyID0gKHN0YXJ0LCBzb2Zmc2V0LCBmaW5pc2gsIGZvZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBtYWtlUmFuZ2Uoc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCk7XG4gICAgICBjb25zdCBzYW1lID0gZXEkMShzdGFydCwgZmluaXNoKSAmJiBzb2Zmc2V0ID09PSBmb2Zmc2V0O1xuICAgICAgcmV0dXJuIHIuY29sbGFwc2VkICYmICFzYW1lO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXROYXRpdmVTZWxlY3Rpb24gPSB3aW4gPT4gT3B0aW9uYWwuZnJvbSh3aW4uZ2V0U2VsZWN0aW9uKCkpO1xuICAgIGNvbnN0IGRvU2V0TmF0aXZlUmFuZ2UgPSAod2luLCBybmcpID0+IHtcbiAgICAgIGdldE5hdGl2ZVNlbGVjdGlvbih3aW4pLmVhY2goc2VsZWN0aW9uID0+IHtcbiAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2Uocm5nKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZG9TZXRSYW5nZSA9ICh3aW4sIHN0YXJ0LCBzb2Zmc2V0LCBmaW5pc2gsIGZvZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGV4YWN0VG9OYXRpdmUod2luLCBzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KTtcbiAgICAgIGRvU2V0TmF0aXZlUmFuZ2Uod2luLCBybmcpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0TGVnYWN5UnRsUmFuZ2UgPSAod2luLCBzZWxlY3Rpb24sIHN0YXJ0LCBzb2Zmc2V0LCBmaW5pc2gsIGZvZmZzZXQpID0+IHtcbiAgICAgIHNlbGVjdGlvbi5jb2xsYXBzZShzdGFydC5kb20sIHNvZmZzZXQpO1xuICAgICAgc2VsZWN0aW9uLmV4dGVuZChmaW5pc2guZG9tLCBmb2Zmc2V0KTtcbiAgICB9O1xuICAgIGNvbnN0IHNldFJhbmdlRnJvbVJlbGF0aXZlID0gKHdpbiwgcmVsYXRpdmUpID0+IGRpYWdub3NlKHdpbiwgcmVsYXRpdmUpLm1hdGNoKHtcbiAgICAgIGx0cjogKHN0YXJ0LCBzb2Zmc2V0LCBmaW5pc2gsIGZvZmZzZXQpID0+IHtcbiAgICAgICAgZG9TZXRSYW5nZSh3aW4sIHN0YXJ0LCBzb2Zmc2V0LCBmaW5pc2gsIGZvZmZzZXQpO1xuICAgICAgfSxcbiAgICAgIHJ0bDogKHN0YXJ0LCBzb2Zmc2V0LCBmaW5pc2gsIGZvZmZzZXQpID0+IHtcbiAgICAgICAgZ2V0TmF0aXZlU2VsZWN0aW9uKHdpbikuZWFjaChzZWxlY3Rpb24gPT4ge1xuICAgICAgICAgIGlmIChzZWxlY3Rpb24uc2V0QmFzZUFuZEV4dGVudCkge1xuICAgICAgICAgICAgc2VsZWN0aW9uLnNldEJhc2VBbmRFeHRlbnQoc3RhcnQuZG9tLCBzb2Zmc2V0LCBmaW5pc2guZG9tLCBmb2Zmc2V0KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5leHRlbmQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHNldExlZ2FjeVJ0bFJhbmdlKHdpbiwgc2VsZWN0aW9uLCBzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgZG9TZXRSYW5nZSh3aW4sIGZpbmlzaCwgZm9mZnNldCwgc3RhcnQsIHNvZmZzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb1NldFJhbmdlKHdpbiwgZmluaXNoLCBmb2Zmc2V0LCBzdGFydCwgc29mZnNldCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzZXRFeGFjdCA9ICh3aW4sIHN0YXJ0LCBzb2Zmc2V0LCBmaW5pc2gsIGZvZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IHJlbGF0aXZlID0gcHJlcHJvY2Vzc0V4YWN0KHN0YXJ0LCBzb2Zmc2V0LCBmaW5pc2gsIGZvZmZzZXQpO1xuICAgICAgc2V0UmFuZ2VGcm9tUmVsYXRpdmUod2luLCByZWxhdGl2ZSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRSZWxhdGl2ZSA9ICh3aW4sIHN0YXJ0U2l0dSwgZmluaXNoU2l0dSkgPT4ge1xuICAgICAgY29uc3QgcmVsYXRpdmUgPSBwcmVwcm9jZXNzUmVsYXRpdmUoc3RhcnRTaXR1LCBmaW5pc2hTaXR1KTtcbiAgICAgIHNldFJhbmdlRnJvbVJlbGF0aXZlKHdpbiwgcmVsYXRpdmUpO1xuICAgIH07XG4gICAgY29uc3QgcmVhZFJhbmdlID0gc2VsZWN0aW9uID0+IHtcbiAgICAgIGlmIChzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcbiAgICAgICAgY29uc3QgZmlyc3RSbmcgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcbiAgICAgICAgY29uc3QgbGFzdFJuZyA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KHNlbGVjdGlvbi5yYW5nZUNvdW50IC0gMSk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKFNpbVJhbmdlLmNyZWF0ZShTdWdhckVsZW1lbnQuZnJvbURvbShmaXJzdFJuZy5zdGFydENvbnRhaW5lciksIGZpcnN0Um5nLnN0YXJ0T2Zmc2V0LCBTdWdhckVsZW1lbnQuZnJvbURvbShsYXN0Um5nLmVuZENvbnRhaW5lciksIGxhc3RSbmcuZW5kT2Zmc2V0KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZG9HZXRFeGFjdCA9IHNlbGVjdGlvbiA9PiB7XG4gICAgICBpZiAoc2VsZWN0aW9uLmFuY2hvck5vZGUgPT09IG51bGwgfHwgc2VsZWN0aW9uLmZvY3VzTm9kZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcmVhZFJhbmdlKHNlbGVjdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhbmNob3IgPSBTdWdhckVsZW1lbnQuZnJvbURvbShzZWxlY3Rpb24uYW5jaG9yTm9kZSk7XG4gICAgICAgIGNvbnN0IGZvY3VzID0gU3VnYXJFbGVtZW50LmZyb21Eb20oc2VsZWN0aW9uLmZvY3VzTm9kZSk7XG4gICAgICAgIHJldHVybiBhZnRlcihhbmNob3IsIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsIGZvY3VzLCBzZWxlY3Rpb24uZm9jdXNPZmZzZXQpID8gT3B0aW9uYWwuc29tZShTaW1SYW5nZS5jcmVhdGUoYW5jaG9yLCBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LCBmb2N1cywgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0KSkgOiByZWFkUmFuZ2Uoc2VsZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldFRvRWxlbWVudCA9ICh3aW4sIGVsZW1lbnQsIHNlbGVjdE5vZGVDb250ZW50cyQxID0gdHJ1ZSkgPT4ge1xuICAgICAgY29uc3Qgcm5nR2V0dGVyID0gc2VsZWN0Tm9kZUNvbnRlbnRzJDEgPyBzZWxlY3ROb2RlQ29udGVudHMgOiBzZWxlY3ROb2RlO1xuICAgICAgY29uc3Qgcm5nID0gcm5nR2V0dGVyKHdpbiwgZWxlbWVudCk7XG4gICAgICBkb1NldE5hdGl2ZVJhbmdlKHdpbiwgcm5nKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEV4YWN0ID0gd2luID0+IGdldE5hdGl2ZVNlbGVjdGlvbih3aW4pLmZpbHRlcihzZWwgPT4gc2VsLnJhbmdlQ291bnQgPiAwKS5iaW5kKGRvR2V0RXhhY3QpO1xuICAgIGNvbnN0IGdldCQyID0gd2luID0+IGdldEV4YWN0KHdpbikubWFwKHJhbmdlID0+IFNpbVNlbGVjdGlvbi5leGFjdChyYW5nZS5zdGFydCwgcmFuZ2Uuc29mZnNldCwgcmFuZ2UuZmluaXNoLCByYW5nZS5mb2Zmc2V0KSk7XG4gICAgY29uc3QgZ2V0Rmlyc3RSZWN0ID0gKHdpbiwgc2VsZWN0aW9uKSA9PiB7XG4gICAgICBjb25zdCBybmcgPSBhc0x0clJhbmdlKHdpbiwgc2VsZWN0aW9uKTtcbiAgICAgIHJldHVybiBnZXRGaXJzdFJlY3QkMShybmcpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0QXRQb2ludCA9ICh3aW4sIHgsIHkpID0+IGZyb21Qb2ludCh3aW4sIHgsIHkpO1xuICAgIGNvbnN0IGNsZWFyID0gd2luID0+IHtcbiAgICAgIGdldE5hdGl2ZVNlbGVjdGlvbih3aW4pLmVhY2goc2VsZWN0aW9uID0+IHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IFdpbmRvd0JyaWRnZSA9IHdpbiA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50RnJvbVBvaW50ID0gKHgsIHkpID0+IHtcbiAgICAgICAgcmV0dXJuIFN1Z2FyRWxlbWVudC5mcm9tUG9pbnQoU3VnYXJFbGVtZW50LmZyb21Eb20od2luLmRvY3VtZW50KSwgeCwgeSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0UmVjdCA9IGVsZW1lbnQgPT4ge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5kb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0UmFuZ2VkUmVjdCA9IChzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbCA9IFNpbVNlbGVjdGlvbi5leGFjdChzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KTtcbiAgICAgICAgcmV0dXJuIGdldEZpcnN0UmVjdCh3aW4sIHNlbCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0U2VsZWN0aW9uID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gZ2V0JDIod2luKS5tYXAoZXhhY3RBZHQgPT4ge1xuICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9SYW5nZSh3aW4sIGV4YWN0QWR0KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZnJvbVNpdHVzID0gc2l0dXMgPT4ge1xuICAgICAgICBjb25zdCByZWxhdGl2ZSA9IFNpbVNlbGVjdGlvbi5yZWxhdGl2ZShzaXR1cy5zdGFydCwgc2l0dXMuZmluaXNoKTtcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1JhbmdlKHdpbiwgcmVsYXRpdmUpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNpdHVzRnJvbVBvaW50ID0gKHgsIHkpID0+IHtcbiAgICAgICAgcmV0dXJuIGdldEF0UG9pbnQod2luLCB4LCB5KS5tYXAoZXhhY3QgPT4ge1xuICAgICAgICAgIHJldHVybiBTaXR1cy5jcmVhdGUoZXhhY3Quc3RhcnQsIGV4YWN0LnNvZmZzZXQsIGV4YWN0LmZpbmlzaCwgZXhhY3QuZm9mZnNldCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNsZWFyU2VsZWN0aW9uID0gKCkgPT4ge1xuICAgICAgICBjbGVhcih3aW4pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbGxhcHNlU2VsZWN0aW9uID0gKHRvU3RhcnQgPSBmYWxzZSkgPT4ge1xuICAgICAgICBnZXQkMih3aW4pLmVhY2goc2VsID0+IHNlbC5mb2xkKHJuZyA9PiBybmcuY29sbGFwc2UodG9TdGFydCksIChzdGFydFNpdHUsIGZpbmlzaFNpdHUpID0+IHtcbiAgICAgICAgICBjb25zdCBzaXR1ID0gdG9TdGFydCA/IHN0YXJ0U2l0dSA6IGZpbmlzaFNpdHU7XG4gICAgICAgICAgc2V0UmVsYXRpdmUod2luLCBzaXR1LCBzaXR1KTtcbiAgICAgICAgfSwgKHN0YXJ0LCBzb2Zmc2V0LCBmaW5pc2gsIGZvZmZzZXQpID0+IHtcbiAgICAgICAgICBjb25zdCBub2RlID0gdG9TdGFydCA/IHN0YXJ0IDogZmluaXNoO1xuICAgICAgICAgIGNvbnN0IG9mZnNldCA9IHRvU3RhcnQgPyBzb2Zmc2V0IDogZm9mZnNldDtcbiAgICAgICAgICBzZXRFeGFjdCh3aW4sIG5vZGUsIG9mZnNldCwgbm9kZSwgb2Zmc2V0KTtcbiAgICAgICAgfSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlbGVjdE5vZGUgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgc2V0VG9FbGVtZW50KHdpbiwgZWxlbWVudCwgZmFsc2UpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlbGVjdENvbnRlbnRzID0gZWxlbWVudCA9PiB7XG4gICAgICAgIHNldFRvRWxlbWVudCh3aW4sIGVsZW1lbnQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldFNlbGVjdGlvbiA9IHNlbCA9PiB7XG4gICAgICAgIHNldEV4YWN0KHdpbiwgc2VsLnN0YXJ0LCBzZWwuc29mZnNldCwgc2VsLmZpbmlzaCwgc2VsLmZvZmZzZXQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldFJlbGF0aXZlU2VsZWN0aW9uID0gKHN0YXJ0LCBmaW5pc2gpID0+IHtcbiAgICAgICAgc2V0UmVsYXRpdmUod2luLCBzdGFydCwgZmluaXNoKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRJbm5lckhlaWdodCA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHdpbi5pbm5lckhlaWdodDtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRTY3JvbGxZID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBwb3MgPSBnZXQkMyhTdWdhckVsZW1lbnQuZnJvbURvbSh3aW4uZG9jdW1lbnQpKTtcbiAgICAgICAgcmV0dXJuIHBvcy50b3A7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2Nyb2xsQnkgPSAoeCwgeSkgPT4ge1xuICAgICAgICBieSh4LCB5LCBTdWdhckVsZW1lbnQuZnJvbURvbSh3aW4uZG9jdW1lbnQpKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbGVtZW50RnJvbVBvaW50LFxuICAgICAgICBnZXRSZWN0LFxuICAgICAgICBnZXRSYW5nZWRSZWN0LFxuICAgICAgICBnZXRTZWxlY3Rpb24sXG4gICAgICAgIGZyb21TaXR1cyxcbiAgICAgICAgc2l0dXNGcm9tUG9pbnQsXG4gICAgICAgIGNsZWFyU2VsZWN0aW9uLFxuICAgICAgICBjb2xsYXBzZVNlbGVjdGlvbixcbiAgICAgICAgc2V0U2VsZWN0aW9uLFxuICAgICAgICBzZXRSZWxhdGl2ZVNlbGVjdGlvbixcbiAgICAgICAgc2VsZWN0Tm9kZSxcbiAgICAgICAgc2VsZWN0Q29udGVudHMsXG4gICAgICAgIGdldElubmVySGVpZ2h0LFxuICAgICAgICBnZXRTY3JvbGxZLFxuICAgICAgICBzY3JvbGxCeVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmMgPSAocm93cywgY29scykgPT4gKHtcbiAgICAgIHJvd3MsXG4gICAgICBjb2xzXG4gICAgfSk7XG4gICAgY29uc3QgbW91c2UgPSAod2luLCBjb250YWluZXIsIGlzUm9vdCwgYW5ub3RhdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGJyaWRnZSA9IFdpbmRvd0JyaWRnZSh3aW4pO1xuICAgICAgY29uc3QgaGFuZGxlcnMgPSBNb3VzZVNlbGVjdGlvbihicmlkZ2UsIGNvbnRhaW5lciwgaXNSb290LCBhbm5vdGF0aW9ucyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGVhcnN0YXRlOiBoYW5kbGVycy5jbGVhcnN0YXRlLFxuICAgICAgICBtb3VzZWRvd246IGhhbmRsZXJzLm1vdXNlZG93bixcbiAgICAgICAgbW91c2VvdmVyOiBoYW5kbGVycy5tb3VzZW92ZXIsXG4gICAgICAgIG1vdXNldXA6IGhhbmRsZXJzLm1vdXNldXBcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBpc0VkaXRhYmxlTm9kZSA9IG5vZGUgPT4gY2xvc2VzdCQyKG5vZGUsIGlzSFRNTEVsZW1lbnQpLmV4aXN0cyhpc0VkaXRhYmxlJDEpO1xuICAgIGNvbnN0IGlzRWRpdGFibGVTZWxlY3Rpb24gPSAoc3RhcnQsIGZpbmlzaCkgPT4gaXNFZGl0YWJsZU5vZGUoc3RhcnQpIHx8IGlzRWRpdGFibGVOb2RlKGZpbmlzaCk7XG4gICAgY29uc3Qga2V5Ym9hcmQgPSAod2luLCBjb250YWluZXIsIGlzUm9vdCwgYW5ub3RhdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGJyaWRnZSA9IFdpbmRvd0JyaWRnZSh3aW4pO1xuICAgICAgY29uc3QgY2xlYXJUb05hdmlnYXRlID0gKCkgPT4ge1xuICAgICAgICBhbm5vdGF0aW9ucy5jbGVhcihjb250YWluZXIpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGtleWRvd24gPSAoZXZlbnQsIHN0YXJ0LCBzb2Zmc2V0LCBmaW5pc2gsIGZvZmZzZXQsIGRpcmVjdGlvbikgPT4ge1xuICAgICAgICBjb25zdCByZWFsRXZlbnQgPSBldmVudC5yYXc7XG4gICAgICAgIGNvbnN0IGtleWNvZGUgPSByZWFsRXZlbnQud2hpY2g7XG4gICAgICAgIGNvbnN0IHNoaWZ0S2V5ID0gcmVhbEV2ZW50LnNoaWZ0S2V5ID09PSB0cnVlO1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gcmV0cmlldmUkMShjb250YWluZXIsIGFubm90YXRpb25zLnNlbGVjdGVkU2VsZWN0b3IpLmZvbGQoKCkgPT4ge1xuICAgICAgICAgIGlmIChpc05hdmlnYXRpb24oa2V5Y29kZSkgJiYgIXNoaWZ0S2V5KSB7XG4gICAgICAgICAgICBhbm5vdGF0aW9ucy5jbGVhckJlZm9yZVVwZGF0ZShjb250YWluZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNOYXZpZ2F0aW9uKGtleWNvZGUpICYmIHNoaWZ0S2V5ICYmICFpc0VkaXRhYmxlU2VsZWN0aW9uKHN0YXJ0LCBmaW5pc2gpKSB7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzRG93bihrZXljb2RlKSAmJiBzaGlmdEtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJ5KHNlbGVjdCwgYnJpZGdlLCBjb250YWluZXIsIGlzUm9vdCwgZG93biwgZmluaXNoLCBzdGFydCwgYW5ub3RhdGlvbnMuc2VsZWN0UmFuZ2UpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNVcChrZXljb2RlKSAmJiBzaGlmdEtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJ5KHNlbGVjdCwgYnJpZGdlLCBjb250YWluZXIsIGlzUm9vdCwgdXAsIGZpbmlzaCwgc3RhcnQsIGFubm90YXRpb25zLnNlbGVjdFJhbmdlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzRG93bihrZXljb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJ5KG5hdmlnYXRlLCBicmlkZ2UsIGlzUm9vdCwgZG93biwgZmluaXNoLCBzdGFydCwgbGFzdERvd25DaGVjayk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1VwKGtleWNvZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycnkobmF2aWdhdGUsIGJyaWRnZSwgaXNSb290LCB1cCwgZmluaXNoLCBzdGFydCwgZmlyc3RVcENoZWNrKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmU7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBzZWxlY3RlZCA9PiB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlJDEgPSBhdHRlbXB0cyA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uID0gZmluZE1hcChhdHRlbXB0cywgZGVsdGEgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGUoZGVsdGEucm93cywgZGVsdGEuY29scywgY29udGFpbmVyLCBzZWxlY3RlZCwgYW5ub3RhdGlvbnMpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5hdmlnYXRpb24uZm9sZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldEVkZ2VzKGNvbnRhaW5lciwgYW5ub3RhdGlvbnMuZmlyc3RTZWxlY3RlZFNlbGVjdG9yLCBhbm5vdGF0aW9ucy5sYXN0U2VsZWN0ZWRTZWxlY3RvcikubWFwKGVkZ2VzID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbGF0aXZlID0gaXNEb3duKGtleWNvZGUpIHx8IGRpcmVjdGlvbi5pc0ZvcndhcmQoa2V5Y29kZSkgPyBTaXR1LmFmdGVyIDogU2l0dS5iZWZvcmU7XG4gICAgICAgICAgICAgICAgICBicmlkZ2Uuc2V0UmVsYXRpdmVTZWxlY3Rpb24oU2l0dS5vbihlZGdlcy5maXJzdCwgMCksIHJlbGF0aXZlKGVkZ2VzLnRhYmxlKSk7XG4gICAgICAgICAgICAgICAgICBhbm5vdGF0aW9ucy5jbGVhcihjb250YWluZXIpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlLmNyZWF0ZShPcHRpb25hbC5ub25lKCksIHRydWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9LCBfID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShSZXNwb25zZS5jcmVhdGUoT3B0aW9uYWwubm9uZSgpLCB0cnVlKSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChpc05hdmlnYXRpb24oa2V5Y29kZSkgJiYgc2hpZnRLZXkgJiYgIWlzRWRpdGFibGVTZWxlY3Rpb24oc3RhcnQsIGZpbmlzaCkpIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNEb3duKGtleWNvZGUpICYmIHNoaWZ0S2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlJDEoW3JjKCsxLCAwKV0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNVcChrZXljb2RlKSAmJiBzaGlmdEtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZSQxKFtyYygtMSwgMCldKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbi5pc0JhY2t3YXJkKGtleWNvZGUpICYmIHNoaWZ0S2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlJDEoW1xuICAgICAgICAgICAgICByYygwLCAtMSksXG4gICAgICAgICAgICAgIHJjKC0xLCAwKVxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24uaXNGb3J3YXJkKGtleWNvZGUpICYmIHNoaWZ0S2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlJDEoW1xuICAgICAgICAgICAgICByYygwLCArMSksXG4gICAgICAgICAgICAgIHJjKCsxLCAwKVxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc05hdmlnYXRpb24oa2V5Y29kZSkgJiYgIXNoaWZ0S2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gY2xlYXJUb05hdmlnYXRlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaGFuZGxlcigpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGtleXVwID0gKGV2ZW50LCBzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSA9PiB7XG4gICAgICAgIHJldHVybiByZXRyaWV2ZSQxKGNvbnRhaW5lciwgYW5ub3RhdGlvbnMuc2VsZWN0ZWRTZWxlY3RvcikuZm9sZCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVhbEV2ZW50ID0gZXZlbnQucmF3O1xuICAgICAgICAgIGNvbnN0IGtleWNvZGUgPSByZWFsRXZlbnQud2hpY2g7XG4gICAgICAgICAgY29uc3Qgc2hpZnRLZXkgPSByZWFsRXZlbnQuc2hpZnRLZXkgPT09IHRydWU7XG4gICAgICAgICAgaWYgKCFzaGlmdEtleSkge1xuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzTmF2aWdhdGlvbihrZXljb2RlKSAmJiBpc0VkaXRhYmxlU2VsZWN0aW9uKHN0YXJ0LCBmaW5pc2gpKSB7XG4gICAgICAgICAgICByZXR1cm4gc3luYyhjb250YWluZXIsIGlzUm9vdCwgc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCwgYW5ub3RhdGlvbnMuc2VsZWN0UmFuZ2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgT3B0aW9uYWwubm9uZSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5ZG93bixcbiAgICAgICAga2V5dXBcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBleHRlcm5hbCA9ICh3aW4sIGNvbnRhaW5lciwgaXNSb290LCBhbm5vdGF0aW9ucykgPT4ge1xuICAgICAgY29uc3QgYnJpZGdlID0gV2luZG93QnJpZGdlKHdpbik7XG4gICAgICByZXR1cm4gKHN0YXJ0LCBmaW5pc2gpID0+IHtcbiAgICAgICAgYW5ub3RhdGlvbnMuY2xlYXJCZWZvcmVVcGRhdGUoY29udGFpbmVyKTtcbiAgICAgICAgaWRlbnRpZnkoc3RhcnQsIGZpbmlzaCwgaXNSb290KS5lYWNoKGNlbGxTZWwgPT4ge1xuICAgICAgICAgIGNvbnN0IGJveGVzID0gY2VsbFNlbC5ib3hlcy5nZXRPcihbXSk7XG4gICAgICAgICAgYW5ub3RhdGlvbnMuc2VsZWN0UmFuZ2UoY29udGFpbmVyLCBib3hlcywgY2VsbFNlbC5zdGFydCwgY2VsbFNlbC5maW5pc2gpO1xuICAgICAgICAgIGJyaWRnZS5zZWxlY3RDb250ZW50cyhmaW5pc2gpO1xuICAgICAgICAgIGJyaWRnZS5jb2xsYXBzZVNlbGVjdGlvbigpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHJlYWQgPSAoZWxlbWVudCwgYXR0cikgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBnZXQkYihlbGVtZW50LCBhdHRyKTtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJyA/IFtdIDogdmFsdWUuc3BsaXQoJyAnKTtcbiAgICB9O1xuICAgIGNvbnN0IGFkZCQyID0gKGVsZW1lbnQsIGF0dHIsIGlkKSA9PiB7XG4gICAgICBjb25zdCBvbGQgPSByZWFkKGVsZW1lbnQsIGF0dHIpO1xuICAgICAgY29uc3QgbnUgPSBvbGQuY29uY2F0KFtpZF0pO1xuICAgICAgc2V0JDIoZWxlbWVudCwgYXR0ciwgbnUuam9pbignICcpKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlJDQgPSAoZWxlbWVudCwgYXR0ciwgaWQpID0+IHtcbiAgICAgIGNvbnN0IG51ID0gZmlsdGVyJDIocmVhZChlbGVtZW50LCBhdHRyKSwgdiA9PiB2ICE9PSBpZCk7XG4gICAgICBpZiAobnUubGVuZ3RoID4gMCkge1xuICAgICAgICBzZXQkMihlbGVtZW50LCBhdHRyLCBudS5qb2luKCcgJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVtb3ZlJDcoZWxlbWVudCwgYXR0cik7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIGNvbnN0IHN1cHBvcnRzID0gZWxlbWVudCA9PiBlbGVtZW50LmRvbS5jbGFzc0xpc3QgIT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBnZXQkMSA9IGVsZW1lbnQgPT4gcmVhZChlbGVtZW50LCAnY2xhc3MnKTtcbiAgICBjb25zdCBhZGQkMSA9IChlbGVtZW50LCBjbGF6eikgPT4gYWRkJDIoZWxlbWVudCwgJ2NsYXNzJywgY2xhenopO1xuICAgIGNvbnN0IHJlbW92ZSQzID0gKGVsZW1lbnQsIGNsYXp6KSA9PiByZW1vdmUkNChlbGVtZW50LCAnY2xhc3MnLCBjbGF6eik7XG5cbiAgICBjb25zdCBhZGQgPSAoZWxlbWVudCwgY2xhenopID0+IHtcbiAgICAgIGlmIChzdXBwb3J0cyhlbGVtZW50KSkge1xuICAgICAgICBlbGVtZW50LmRvbS5jbGFzc0xpc3QuYWRkKGNsYXp6KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkZCQxKGVsZW1lbnQsIGNsYXp6KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNsZWFuQ2xhc3MgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHN1cHBvcnRzKGVsZW1lbnQpID8gZWxlbWVudC5kb20uY2xhc3NMaXN0IDogZ2V0JDEoZWxlbWVudCk7XG4gICAgICBpZiAoY2xhc3NMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZW1vdmUkNyhlbGVtZW50LCAnY2xhc3MnKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSQyID0gKGVsZW1lbnQsIGNsYXp6KSA9PiB7XG4gICAgICBpZiAoc3VwcG9ydHMoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgY2xhc3NMaXN0ID0gZWxlbWVudC5kb20uY2xhc3NMaXN0O1xuICAgICAgICBjbGFzc0xpc3QucmVtb3ZlKGNsYXp6KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZSQzKGVsZW1lbnQsIGNsYXp6KTtcbiAgICAgIH1cbiAgICAgIGNsZWFuQ2xhc3MoZWxlbWVudCk7XG4gICAgfTtcbiAgICBjb25zdCBoYXMgPSAoZWxlbWVudCwgY2xhenopID0+IHN1cHBvcnRzKGVsZW1lbnQpICYmIGVsZW1lbnQuZG9tLmNsYXNzTGlzdC5jb250YWlucyhjbGF6eik7XG5cbiAgICBjb25zdCByZW1vdmUkMSA9IChlbGVtZW50LCBjbGFzc2VzKSA9PiB7XG4gICAgICBlYWNoJDIoY2xhc3NlcywgeCA9PiB7XG4gICAgICAgIHJlbW92ZSQyKGVsZW1lbnQsIHgpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFkZENsYXNzID0gY2xhenogPT4gZWxlbWVudCA9PiB7XG4gICAgICBhZGQoZWxlbWVudCwgY2xhenopO1xuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlQ2xhc3NlcyA9IGNsYXNzZXMgPT4gZWxlbWVudCA9PiB7XG4gICAgICByZW1vdmUkMShlbGVtZW50LCBjbGFzc2VzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYnlDbGFzcyA9IGVwaGVtZXJhID0+IHtcbiAgICAgIGNvbnN0IGFkZFNlbGVjdGlvbkNsYXNzID0gYWRkQ2xhc3MoZXBoZW1lcmEuc2VsZWN0ZWQpO1xuICAgICAgY29uc3QgcmVtb3ZlU2VsZWN0aW9uQ2xhc3NlcyA9IHJlbW92ZUNsYXNzZXMoW1xuICAgICAgICBlcGhlbWVyYS5zZWxlY3RlZCxcbiAgICAgICAgZXBoZW1lcmEubGFzdFNlbGVjdGVkLFxuICAgICAgICBlcGhlbWVyYS5maXJzdFNlbGVjdGVkXG4gICAgICBdKTtcbiAgICAgIGNvbnN0IGNsZWFyID0gY29udGFpbmVyID0+IHtcbiAgICAgICAgY29uc3Qgc2VscyA9IGRlc2NlbmRhbnRzKGNvbnRhaW5lciwgZXBoZW1lcmEuc2VsZWN0ZWRTZWxlY3Rvcik7XG4gICAgICAgIGVhY2gkMihzZWxzLCByZW1vdmVTZWxlY3Rpb25DbGFzc2VzKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzZWxlY3RSYW5nZSA9IChjb250YWluZXIsIGNlbGxzLCBzdGFydCwgZmluaXNoKSA9PiB7XG4gICAgICAgIGNsZWFyKGNvbnRhaW5lcik7XG4gICAgICAgIGVhY2gkMihjZWxscywgYWRkU2VsZWN0aW9uQ2xhc3MpO1xuICAgICAgICBhZGQoc3RhcnQsIGVwaGVtZXJhLmZpcnN0U2VsZWN0ZWQpO1xuICAgICAgICBhZGQoZmluaXNoLCBlcGhlbWVyYS5sYXN0U2VsZWN0ZWQpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsZWFyQmVmb3JlVXBkYXRlOiBjbGVhcixcbiAgICAgICAgY2xlYXIsXG4gICAgICAgIHNlbGVjdFJhbmdlLFxuICAgICAgICBzZWxlY3RlZFNlbGVjdG9yOiBlcGhlbWVyYS5zZWxlY3RlZFNlbGVjdG9yLFxuICAgICAgICBmaXJzdFNlbGVjdGVkU2VsZWN0b3I6IGVwaGVtZXJhLmZpcnN0U2VsZWN0ZWRTZWxlY3RvcixcbiAgICAgICAgbGFzdFNlbGVjdGVkU2VsZWN0b3I6IGVwaGVtZXJhLmxhc3RTZWxlY3RlZFNlbGVjdG9yXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgYnlBdHRyID0gKGVwaGVtZXJhLCBvblNlbGVjdGlvbiwgb25DbGVhcikgPT4ge1xuICAgICAgY29uc3QgcmVtb3ZlU2VsZWN0aW9uQXR0cmlidXRlcyA9IGVsZW1lbnQgPT4ge1xuICAgICAgICByZW1vdmUkNyhlbGVtZW50LCBlcGhlbWVyYS5zZWxlY3RlZCk7XG4gICAgICAgIHJlbW92ZSQ3KGVsZW1lbnQsIGVwaGVtZXJhLmZpcnN0U2VsZWN0ZWQpO1xuICAgICAgICByZW1vdmUkNyhlbGVtZW50LCBlcGhlbWVyYS5sYXN0U2VsZWN0ZWQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkZFNlbGVjdGlvbkF0dHJpYnV0ZSA9IGVsZW1lbnQgPT4ge1xuICAgICAgICBzZXQkMihlbGVtZW50LCBlcGhlbWVyYS5zZWxlY3RlZCwgJzEnKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjbGVhciA9IGNvbnRhaW5lciA9PiB7XG4gICAgICAgIGNsZWFyQmVmb3JlVXBkYXRlKGNvbnRhaW5lcik7XG4gICAgICAgIG9uQ2xlYXIoKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjbGVhckJlZm9yZVVwZGF0ZSA9IGNvbnRhaW5lciA9PiB7XG4gICAgICAgIGNvbnN0IHNlbHMgPSBkZXNjZW5kYW50cyhjb250YWluZXIsIGAkeyBlcGhlbWVyYS5zZWxlY3RlZFNlbGVjdG9yIH0sJHsgZXBoZW1lcmEuZmlyc3RTZWxlY3RlZFNlbGVjdG9yIH0sJHsgZXBoZW1lcmEubGFzdFNlbGVjdGVkU2VsZWN0b3IgfWApO1xuICAgICAgICBlYWNoJDIoc2VscywgcmVtb3ZlU2VsZWN0aW9uQXR0cmlidXRlcyk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VsZWN0UmFuZ2UgPSAoY29udGFpbmVyLCBjZWxscywgc3RhcnQsIGZpbmlzaCkgPT4ge1xuICAgICAgICBjbGVhcihjb250YWluZXIpO1xuICAgICAgICBlYWNoJDIoY2VsbHMsIGFkZFNlbGVjdGlvbkF0dHJpYnV0ZSk7XG4gICAgICAgIHNldCQyKHN0YXJ0LCBlcGhlbWVyYS5maXJzdFNlbGVjdGVkLCAnMScpO1xuICAgICAgICBzZXQkMihmaW5pc2gsIGVwaGVtZXJhLmxhc3RTZWxlY3RlZCwgJzEnKTtcbiAgICAgICAgb25TZWxlY3Rpb24oY2VsbHMsIHN0YXJ0LCBmaW5pc2gpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsZWFyQmVmb3JlVXBkYXRlLFxuICAgICAgICBjbGVhcixcbiAgICAgICAgc2VsZWN0UmFuZ2UsXG4gICAgICAgIHNlbGVjdGVkU2VsZWN0b3I6IGVwaGVtZXJhLnNlbGVjdGVkU2VsZWN0b3IsXG4gICAgICAgIGZpcnN0U2VsZWN0ZWRTZWxlY3RvcjogZXBoZW1lcmEuZmlyc3RTZWxlY3RlZFNlbGVjdG9yLFxuICAgICAgICBsYXN0U2VsZWN0ZWRTZWxlY3RvcjogZXBoZW1lcmEubGFzdFNlbGVjdGVkU2VsZWN0b3JcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBTZWxlY3Rpb25Bbm5vdGF0aW9uID0ge1xuICAgICAgYnlDbGFzcyxcbiAgICAgIGJ5QXR0clxuICAgIH07XG5cbiAgICBjb25zdCBmb2xkID0gKHN1YmplY3QsIG9uTm9uZSwgb25NdWx0aXBsZSwgb25TaW5nbGUpID0+IHtcbiAgICAgIHN3aXRjaCAoc3ViamVjdC50YWcpIHtcbiAgICAgIGNhc2UgJ25vbmUnOlxuICAgICAgICByZXR1cm4gb25Ob25lKCk7XG4gICAgICBjYXNlICdzaW5nbGUnOlxuICAgICAgICByZXR1cm4gb25TaW5nbGUoc3ViamVjdC5lbGVtZW50KTtcbiAgICAgIGNhc2UgJ211bHRpcGxlJzpcbiAgICAgICAgcmV0dXJuIG9uTXVsdGlwbGUoc3ViamVjdC5lbGVtZW50cyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBub25lID0gKCkgPT4gKHsgdGFnOiAnbm9uZScgfSk7XG4gICAgY29uc3QgbXVsdGlwbGUgPSBlbGVtZW50cyA9PiAoe1xuICAgICAgdGFnOiAnbXVsdGlwbGUnLFxuICAgICAgZWxlbWVudHNcbiAgICB9KTtcbiAgICBjb25zdCBzaW5nbGUgPSBlbGVtZW50ID0+ICh7XG4gICAgICB0YWc6ICdzaW5nbGUnLFxuICAgICAgZWxlbWVudFxuICAgIH0pO1xuXG4gICAgY29uc3QgU2VsZWN0aW9ucyA9IChsYXp5Um9vdCwgZ2V0U3RhcnQsIHNlbGVjdGVkU2VsZWN0b3IpID0+IHtcbiAgICAgIGNvbnN0IGdldCA9ICgpID0+IHJldHJpZXZlKGxhenlSb290KCksIHNlbGVjdGVkU2VsZWN0b3IpLmZvbGQoKCkgPT4gZ2V0U3RhcnQoKS5mb2xkKG5vbmUsIHNpbmdsZSksIG11bHRpcGxlKTtcbiAgICAgIHJldHVybiB7IGdldCB9O1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRVcE9yTGVmdENlbGxzID0gKGdyaWQsIHNlbGVjdGVkQ2VsbHMpID0+IHtcbiAgICAgIGNvbnN0IHVwR3JpZCA9IGdyaWQuc2xpY2UoMCwgc2VsZWN0ZWRDZWxsc1tzZWxlY3RlZENlbGxzLmxlbmd0aCAtIDFdLnJvdyArIDEpO1xuICAgICAgY29uc3QgdXBEZXRhaWxzID0gdG9EZXRhaWxMaXN0KHVwR3JpZCk7XG4gICAgICByZXR1cm4gYmluZCQyKHVwRGV0YWlscywgZGV0YWlsID0+IHtcbiAgICAgICAgY29uc3Qgc2xpY2VkQ2VsbHMgPSBkZXRhaWwuY2VsbHMuc2xpY2UoMCwgc2VsZWN0ZWRDZWxsc1tzZWxlY3RlZENlbGxzLmxlbmd0aCAtIDFdLmNvbHVtbiArIDEpO1xuICAgICAgICByZXR1cm4gbWFwJDEoc2xpY2VkQ2VsbHMsIGNlbGwgPT4gY2VsbC5lbGVtZW50KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0RG93bk9yUmlnaHRDZWxscyA9IChncmlkLCBzZWxlY3RlZENlbGxzKSA9PiB7XG4gICAgICBjb25zdCBkb3duR3JpZCA9IGdyaWQuc2xpY2Uoc2VsZWN0ZWRDZWxsc1swXS5yb3cgKyBzZWxlY3RlZENlbGxzWzBdLnJvd3NwYW4gLSAxLCBncmlkLmxlbmd0aCk7XG4gICAgICBjb25zdCBkb3duRGV0YWlscyA9IHRvRGV0YWlsTGlzdChkb3duR3JpZCk7XG4gICAgICByZXR1cm4gYmluZCQyKGRvd25EZXRhaWxzLCBkZXRhaWwgPT4ge1xuICAgICAgICBjb25zdCBzbGljZWRDZWxscyA9IGRldGFpbC5jZWxscy5zbGljZShzZWxlY3RlZENlbGxzWzBdLmNvbHVtbiArIHNlbGVjdGVkQ2VsbHNbMF0uY29sc3BhbiAtIDEsIGRldGFpbC5jZWxscy5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gbWFwJDEoc2xpY2VkQ2VsbHMsIGNlbGwgPT4gY2VsbC5lbGVtZW50KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0T3RoZXJDZWxscyA9ICh0YWJsZSwgdGFyZ2V0LCBnZW5lcmF0b3JzKSA9PiB7XG4gICAgICBjb25zdCB3YXJlaG91c2UgPSBXYXJlaG91c2UuZnJvbVRhYmxlKHRhYmxlKTtcbiAgICAgIGNvbnN0IGRldGFpbHMgPSBvbkNlbGxzKHdhcmVob3VzZSwgdGFyZ2V0KTtcbiAgICAgIHJldHVybiBkZXRhaWxzLm1hcChzZWxlY3RlZENlbGxzID0+IHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRvR3JpZCh3YXJlaG91c2UsIGdlbmVyYXRvcnMsIGZhbHNlKTtcbiAgICAgICAgY29uc3Qge3Jvd3N9ID0gZXh0cmFjdEdyaWREZXRhaWxzKGdyaWQpO1xuICAgICAgICBjb25zdCB1cE9yTGVmdENlbGxzID0gZ2V0VXBPckxlZnRDZWxscyhyb3dzLCBzZWxlY3RlZENlbGxzKTtcbiAgICAgICAgY29uc3QgZG93bk9yUmlnaHRDZWxscyA9IGdldERvd25PclJpZ2h0Q2VsbHMocm93cywgc2VsZWN0ZWRDZWxscyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdXBPckxlZnRDZWxscyxcbiAgICAgICAgICBkb3duT3JSaWdodENlbGxzXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbWtFdmVudCA9ICh0YXJnZXQsIHgsIHksIHN0b3AsIHByZXZlbnQsIGtpbGwsIHJhdykgPT4gKHtcbiAgICAgIHRhcmdldCxcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgc3RvcCxcbiAgICAgIHByZXZlbnQsXG4gICAgICBraWxsLFxuICAgICAgcmF3XG4gICAgfSk7XG4gICAgY29uc3QgZnJvbVJhd0V2ZW50JDEgPSByYXdFdmVudCA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBTdWdhckVsZW1lbnQuZnJvbURvbShnZXRPcmlnaW5hbEV2ZW50VGFyZ2V0KHJhd0V2ZW50KS5nZXRPcihyYXdFdmVudC50YXJnZXQpKTtcbiAgICAgIGNvbnN0IHN0b3AgPSAoKSA9PiByYXdFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbnN0IHByZXZlbnQgPSAoKSA9PiByYXdFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3Qga2lsbCA9IGNvbXBvc2UocHJldmVudCwgc3RvcCk7XG4gICAgICByZXR1cm4gbWtFdmVudCh0YXJnZXQsIHJhd0V2ZW50LmNsaWVudFgsIHJhd0V2ZW50LmNsaWVudFksIHN0b3AsIHByZXZlbnQsIGtpbGwsIHJhd0V2ZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZSA9IChmaWx0ZXIsIGhhbmRsZXIpID0+IHJhd0V2ZW50ID0+IHtcbiAgICAgIGlmIChmaWx0ZXIocmF3RXZlbnQpKSB7XG4gICAgICAgIGhhbmRsZXIoZnJvbVJhd0V2ZW50JDEocmF3RXZlbnQpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGJpbmRlciA9IChlbGVtZW50LCBldmVudCwgZmlsdGVyLCBoYW5kbGVyLCB1c2VDYXB0dXJlKSA9PiB7XG4gICAgICBjb25zdCB3cmFwcGVkID0gaGFuZGxlKGZpbHRlciwgaGFuZGxlcik7XG4gICAgICBlbGVtZW50LmRvbS5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCB3cmFwcGVkLCB1c2VDYXB0dXJlKTtcbiAgICAgIHJldHVybiB7IHVuYmluZDogY3VycnkodW5iaW5kLCBlbGVtZW50LCBldmVudCwgd3JhcHBlZCwgdXNlQ2FwdHVyZSkgfTtcbiAgICB9O1xuICAgIGNvbnN0IGJpbmQkMSA9IChlbGVtZW50LCBldmVudCwgZmlsdGVyLCBoYW5kbGVyKSA9PiBiaW5kZXIoZWxlbWVudCwgZXZlbnQsIGZpbHRlciwgaGFuZGxlciwgZmFsc2UpO1xuICAgIGNvbnN0IHVuYmluZCA9IChlbGVtZW50LCBldmVudCwgaGFuZGxlciwgdXNlQ2FwdHVyZSkgPT4ge1xuICAgICAgZWxlbWVudC5kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZpbHRlciA9IGFsd2F5cztcbiAgICBjb25zdCBiaW5kID0gKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyKSA9PiBiaW5kJDEoZWxlbWVudCwgZXZlbnQsIGZpbHRlciwgaGFuZGxlcik7XG4gICAgY29uc3QgZnJvbVJhd0V2ZW50ID0gZnJvbVJhd0V2ZW50JDE7XG5cbiAgICBjb25zdCBoYXNJbnRlcm5hbFRhcmdldCA9IGUgPT4gIWhhcyhTdWdhckVsZW1lbnQuZnJvbURvbShlLnRhcmdldCksICdlcGhveC1zbm9va2VyLXJlc2l6ZXItYmFyJyk7XG4gICAgY29uc3QgVGFibGVDZWxsU2VsZWN0aW9uSGFuZGxlciA9IChlZGl0b3IsIHJlc2l6ZUhhbmRsZXIpID0+IHtcbiAgICAgIGNvbnN0IGNlbGxTZWxlY3Rpb24gPSBTZWxlY3Rpb25zKCgpID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpLCAoKSA9PiBnZXRTZWxlY3Rpb25DZWxsKGdldFNlbGVjdGlvblN0YXJ0KGVkaXRvciksIGdldElzUm9vdChlZGl0b3IpKSwgZXBoZW1lcmEuc2VsZWN0ZWRTZWxlY3Rvcik7XG4gICAgICBjb25zdCBvblNlbGVjdGlvbiA9IChjZWxscywgc3RhcnQsIGZpbmlzaCkgPT4ge1xuICAgICAgICBjb25zdCB0YWJsZU9wdCA9IHRhYmxlKHN0YXJ0KTtcbiAgICAgICAgdGFibGVPcHQuZWFjaCh0YWJsZSA9PiB7XG4gICAgICAgICAgY29uc3QgY2xvbmVGb3JtYXRzID0gZ2V0VGFibGVDbG9uZUVsZW1lbnRzKGVkaXRvcik7XG4gICAgICAgICAgY29uc3QgZ2VuZXJhdG9ycyA9IGNlbGxPcGVyYXRpb25zKG5vb3AsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXREb2MoKSksIGNsb25lRm9ybWF0cyk7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxscyA9IGdldENlbGxzRnJvbVNlbGVjdGlvbihlZGl0b3IpO1xuICAgICAgICAgIGNvbnN0IG90aGVyQ2VsbHMgPSBnZXRPdGhlckNlbGxzKHRhYmxlLCB7IHNlbGVjdGlvbjogc2VsZWN0ZWRDZWxscyB9LCBnZW5lcmF0b3JzKTtcbiAgICAgICAgICBmaXJlVGFibGVTZWxlY3Rpb25DaGFuZ2UoZWRpdG9yLCBjZWxscywgc3RhcnQsIGZpbmlzaCwgb3RoZXJDZWxscyk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG9uQ2xlYXIgPSAoKSA9PiBmaXJlVGFibGVTZWxlY3Rpb25DbGVhcihlZGl0b3IpO1xuICAgICAgY29uc3QgYW5ub3RhdGlvbnMgPSBTZWxlY3Rpb25Bbm5vdGF0aW9uLmJ5QXR0cihlcGhlbWVyYSwgb25TZWxlY3Rpb24sIG9uQ2xlYXIpO1xuICAgICAgZWRpdG9yLm9uKCdpbml0JywgX2UgPT4ge1xuICAgICAgICBjb25zdCB3aW4gPSBlZGl0b3IuZ2V0V2luKCk7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBnZXRCb2R5KGVkaXRvcik7XG4gICAgICAgIGNvbnN0IGlzUm9vdCA9IGdldElzUm9vdChlZGl0b3IpO1xuICAgICAgICBjb25zdCBzeW5jU2VsZWN0aW9uID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNlbCA9IGVkaXRvci5zZWxlY3Rpb247XG4gICAgICAgICAgY29uc3Qgc3RhcnQgPSBTdWdhckVsZW1lbnQuZnJvbURvbShzZWwuZ2V0U3RhcnQoKSk7XG4gICAgICAgICAgY29uc3QgZW5kID0gU3VnYXJFbGVtZW50LmZyb21Eb20oc2VsLmdldEVuZCgpKTtcbiAgICAgICAgICBjb25zdCBzaGFyZWQgPSBzaGFyZWRPbmUodGFibGUsIFtcbiAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgZW5kXG4gICAgICAgICAgXSk7XG4gICAgICAgICAgc2hhcmVkLmZvbGQoKCkgPT4gYW5ub3RhdGlvbnMuY2xlYXIoYm9keSksIG5vb3ApO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBtb3VzZUhhbmRsZXJzID0gbW91c2Uod2luLCBib2R5LCBpc1Jvb3QsIGFubm90YXRpb25zKTtcbiAgICAgICAgY29uc3Qga2V5SGFuZGxlcnMgPSBrZXlib2FyZCh3aW4sIGJvZHksIGlzUm9vdCwgYW5ub3RhdGlvbnMpO1xuICAgICAgICBjb25zdCBleHRlcm5hbCQxID0gZXh0ZXJuYWwod2luLCBib2R5LCBpc1Jvb3QsIGFubm90YXRpb25zKTtcbiAgICAgICAgY29uc3QgaGFzU2hpZnRLZXkgPSBldmVudCA9PiBldmVudC5yYXcuc2hpZnRLZXkgPT09IHRydWU7XG4gICAgICAgIGVkaXRvci5vbignVGFibGVTZWxlY3RvckNoYW5nZScsIGUgPT4gZXh0ZXJuYWwkMShlLnN0YXJ0LCBlLmZpbmlzaCkpO1xuICAgICAgICBjb25zdCBoYW5kbGVSZXNwb25zZSA9IChldmVudCwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAoIWhhc1NoaWZ0S2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzcG9uc2Uua2lsbCkge1xuICAgICAgICAgICAgZXZlbnQua2lsbCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXNwb25zZS5zZWxlY3Rpb24uZWFjaChucyA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWxhdGl2ZSA9IFNpbVNlbGVjdGlvbi5yZWxhdGl2ZShucy5zdGFydCwgbnMuZmluaXNoKTtcbiAgICAgICAgICAgIGNvbnN0IHJuZyA9IGFzTHRyUmFuZ2Uod2luLCByZWxhdGl2ZSk7XG4gICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBrZXl1cCA9IGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCB3cmFwcGVkRXZlbnQgPSBmcm9tUmF3RXZlbnQoZXZlbnQpO1xuICAgICAgICAgIGlmICh3cmFwcGVkRXZlbnQucmF3LnNoaWZ0S2V5ICYmIGlzTmF2aWdhdGlvbih3cmFwcGVkRXZlbnQucmF3LndoaWNoKSkge1xuICAgICAgICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLnN0YXJ0Q29udGFpbmVyKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJuZy5lbmRDb250YWluZXIpO1xuICAgICAgICAgICAga2V5SGFuZGxlcnMua2V5dXAod3JhcHBlZEV2ZW50LCBzdGFydCwgcm5nLnN0YXJ0T2Zmc2V0LCBlbmQsIHJuZy5lbmRPZmZzZXQpLmVhY2gocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICBoYW5kbGVSZXNwb25zZSh3cmFwcGVkRXZlbnQsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qga2V5ZG93biA9IGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCB3cmFwcGVkRXZlbnQgPSBmcm9tUmF3RXZlbnQoZXZlbnQpO1xuICAgICAgICAgIHJlc2l6ZUhhbmRsZXIuaGlkZSgpO1xuICAgICAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICAgICAgY29uc3Qgc3RhcnQgPSBTdWdhckVsZW1lbnQuZnJvbURvbShybmcuc3RhcnRDb250YWluZXIpO1xuICAgICAgICAgIGNvbnN0IGVuZCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJuZy5lbmRDb250YWluZXIpO1xuICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IG9uRGlyZWN0aW9uKGx0ciwgcnRsKShTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KCkpKTtcbiAgICAgICAgICBrZXlIYW5kbGVycy5rZXlkb3duKHdyYXBwZWRFdmVudCwgc3RhcnQsIHJuZy5zdGFydE9mZnNldCwgZW5kLCBybmcuZW5kT2Zmc2V0LCBkaXJlY3Rpb24pLmVhY2gocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgaGFuZGxlUmVzcG9uc2Uod3JhcHBlZEV2ZW50LCByZXNwb25zZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmVzaXplSGFuZGxlci5zaG93KCk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGlzTGVmdE1vdXNlID0gcmF3ID0+IHJhdy5idXR0b24gPT09IDA7XG4gICAgICAgIGNvbnN0IGlzTGVmdEJ1dHRvblByZXNzZWQgPSByYXcgPT4ge1xuICAgICAgICAgIGlmIChyYXcuYnV0dG9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIChyYXcuYnV0dG9ucyAmIDEpICE9PSAwO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBkcmFnU3RhcnQgPSBfZSA9PiB7XG4gICAgICAgICAgbW91c2VIYW5kbGVycy5jbGVhcnN0YXRlKCk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG1vdXNlRG93biA9IGUgPT4ge1xuICAgICAgICAgIGlmIChpc0xlZnRNb3VzZShlKSAmJiBoYXNJbnRlcm5hbFRhcmdldChlKSkge1xuICAgICAgICAgICAgbW91c2VIYW5kbGVycy5tb3VzZWRvd24oZnJvbVJhd0V2ZW50KGUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG1vdXNlT3ZlciA9IGUgPT4ge1xuICAgICAgICAgIGlmIChpc0xlZnRCdXR0b25QcmVzc2VkKGUpICYmIGhhc0ludGVybmFsVGFyZ2V0KGUpKSB7XG4gICAgICAgICAgICBtb3VzZUhhbmRsZXJzLm1vdXNlb3Zlcihmcm9tUmF3RXZlbnQoZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbW91c2VVcCA9IGUgPT4ge1xuICAgICAgICAgIGlmIChpc0xlZnRNb3VzZShlKSAmJiBoYXNJbnRlcm5hbFRhcmdldChlKSkge1xuICAgICAgICAgICAgbW91c2VIYW5kbGVycy5tb3VzZXVwKGZyb21SYXdFdmVudChlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBnZXREb3VibGVUYXAgPSAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbGFzdFRhcmdldCA9IENlbGwoU3VnYXJFbGVtZW50LmZyb21Eb20oYm9keSkpO1xuICAgICAgICAgIGNvbnN0IGxhc3RUaW1lU3RhbXAgPSBDZWxsKDApO1xuICAgICAgICAgIGNvbnN0IHRvdWNoRW5kID0gdCA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBTdWdhckVsZW1lbnQuZnJvbURvbSh0LnRhcmdldCk7XG4gICAgICAgICAgICBpZiAoaXNUYWcoJ3RkJykodGFyZ2V0KSB8fCBpc1RhZygndGgnKSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGxUID0gbGFzdFRhcmdldC5nZXQoKTtcbiAgICAgICAgICAgICAgY29uc3QgbFRTID0gbGFzdFRpbWVTdGFtcC5nZXQoKTtcbiAgICAgICAgICAgICAgaWYgKGVxJDEobFQsIHRhcmdldCkgJiYgdC50aW1lU3RhbXAgLSBsVFMgPCAzMDApIHtcbiAgICAgICAgICAgICAgICB0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZXh0ZXJuYWwkMSh0YXJnZXQsIHRhcmdldCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3RUYXJnZXQuc2V0KHRhcmdldCk7XG4gICAgICAgICAgICBsYXN0VGltZVN0YW1wLnNldCh0LnRpbWVTdGFtcCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4geyB0b3VjaEVuZCB9O1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBkb3VibGVUYXAgPSBnZXREb3VibGVUYXAoKTtcbiAgICAgICAgZWRpdG9yLm9uKCdkcmFnc3RhcnQnLCBkcmFnU3RhcnQpO1xuICAgICAgICBlZGl0b3Iub24oJ21vdXNlZG93bicsIG1vdXNlRG93bik7XG4gICAgICAgIGVkaXRvci5vbignbW91c2VvdmVyJywgbW91c2VPdmVyKTtcbiAgICAgICAgZWRpdG9yLm9uKCdtb3VzZXVwJywgbW91c2VVcCk7XG4gICAgICAgIGVkaXRvci5vbigndG91Y2hlbmQnLCBkb3VibGVUYXAudG91Y2hFbmQpO1xuICAgICAgICBlZGl0b3Iub24oJ2tleXVwJywga2V5dXApO1xuICAgICAgICBlZGl0b3Iub24oJ2tleWRvd24nLCBrZXlkb3duKTtcbiAgICAgICAgZWRpdG9yLm9uKCdOb2RlQ2hhbmdlJywgc3luY1NlbGVjdGlvbik7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignUHJlSW5pdCcsICgpID0+IHtcbiAgICAgICAgZWRpdG9yLnNlcmlhbGl6ZXIuYWRkVGVtcEF0dHIoZXBoZW1lcmEuZmlyc3RTZWxlY3RlZCk7XG4gICAgICAgIGVkaXRvci5zZXJpYWxpemVyLmFkZFRlbXBBdHRyKGVwaGVtZXJhLmxhc3RTZWxlY3RlZCk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNsZWFyU2VsZWN0ZWRDZWxscyA9IGNvbnRhaW5lciA9PiBhbm5vdGF0aW9ucy5jbGVhcihTdWdhckVsZW1lbnQuZnJvbURvbShjb250YWluZXIpKTtcbiAgICAgIGNvbnN0IGdldFNlbGVjdGVkQ2VsbHMgPSAoKSA9PiBmb2xkKGNlbGxTZWxlY3Rpb24uZ2V0KCksIGNvbnN0YW50KFtdKSwgY2VsbHMgPT4ge1xuICAgICAgICByZXR1cm4gbWFwJDEoY2VsbHMsIGNlbGwgPT4gY2VsbC5kb20pO1xuICAgICAgfSwgY2VsbCA9PiBbY2VsbC5kb21dKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdldFNlbGVjdGVkQ2VsbHMsXG4gICAgICAgIGNsZWFyU2VsZWN0ZWRDZWxsc1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgRXZlbnQgPSBmaWVsZHMgPT4ge1xuICAgICAgbGV0IGhhbmRsZXJzID0gW107XG4gICAgICBjb25zdCBiaW5kID0gaGFuZGxlciA9PiB7XG4gICAgICAgIGlmIChoYW5kbGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V2ZW50IGJpbmQgZXJyb3I6IHVuZGVmaW5lZCBoYW5kbGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlcnMucHVzaChoYW5kbGVyKTtcbiAgICAgIH07XG4gICAgICBjb25zdCB1bmJpbmQgPSBoYW5kbGVyID0+IHtcbiAgICAgICAgaGFuZGxlcnMgPSBmaWx0ZXIkMihoYW5kbGVycywgaCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGggIT09IGhhbmRsZXI7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHRyaWdnZXIgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICBjb25zdCBldmVudCA9IHt9O1xuICAgICAgICBlYWNoJDIoZmllbGRzLCAobmFtZSwgaSkgPT4ge1xuICAgICAgICAgIGV2ZW50W25hbWVdID0gYXJnc1tpXTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2gkMihoYW5kbGVycywgaGFuZGxlciA9PiB7XG4gICAgICAgICAgaGFuZGxlcihldmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJpbmQsXG4gICAgICAgIHVuYmluZCxcbiAgICAgICAgdHJpZ2dlclxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgY3JlYXRlJDEgPSB0eXBlRGVmcyA9PiB7XG4gICAgICBjb25zdCByZWdpc3RyeSA9IG1hcCh0eXBlRGVmcywgZXZlbnQgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJpbmQ6IGV2ZW50LmJpbmQsXG4gICAgICAgICAgdW5iaW5kOiBldmVudC51bmJpbmRcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdHJpZ2dlciA9IG1hcCh0eXBlRGVmcywgZXZlbnQgPT4ge1xuICAgICAgICByZXR1cm4gZXZlbnQudHJpZ2dlcjtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVnaXN0cnksXG4gICAgICAgIHRyaWdnZXJcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGxhc3QgPSAoZm4sIHJhdGUpID0+IHtcbiAgICAgIGxldCB0aW1lciA9IG51bGw7XG4gICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGlmICghaXNOdWxsKHRpbWVyKSkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgdGhyb3R0bGUgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgIH0sIHJhdGUpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNhbmNlbCxcbiAgICAgICAgdGhyb3R0bGVcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHNvcnQgPSBhcnIgPT4ge1xuICAgICAgcmV0dXJuIGFyci5zbGljZSgwKS5zb3J0KCk7XG4gICAgfTtcbiAgICBjb25zdCByZXFNZXNzYWdlID0gKHJlcXVpcmVkLCBrZXlzKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FsbCByZXF1aXJlZCBrZXlzICgnICsgc29ydChyZXF1aXJlZCkuam9pbignLCAnKSArICcpIHdlcmUgbm90IHNwZWNpZmllZC4gU3BlY2lmaWVkIGtleXMgd2VyZTogJyArIHNvcnQoa2V5cykuam9pbignLCAnKSArICcuJyk7XG4gICAgfTtcbiAgICBjb25zdCB1bnN1cHBNZXNzYWdlID0gdW5zdXBwb3J0ZWQgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBrZXlzIGZvciBvYmplY3Q6ICcgKyBzb3J0KHVuc3VwcG9ydGVkKS5qb2luKCcsICcpKTtcbiAgICB9O1xuICAgIGNvbnN0IHZhbGlkYXRlU3RyQXJyID0gKGxhYmVsLCBhcnJheSkgPT4ge1xuICAgICAgaWYgKCFpc0FycmF5KGFycmF5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSAnICsgbGFiZWwgKyAnIGZpZWxkcyBtdXN0IGJlIGFuIGFycmF5LiBXYXM6ICcgKyBhcnJheSArICcuJyk7XG4gICAgICB9XG4gICAgICBlYWNoJDIoYXJyYXksIGEgPT4ge1xuICAgICAgICBpZiAoIWlzU3RyaW5nKGEpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdmFsdWUgJyArIGEgKyAnIGluIHRoZSAnICsgbGFiZWwgKyAnIGZpZWxkcyB3YXMgbm90IGEgc3RyaW5nLicpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGludmFsaWRUeXBlTWVzc2FnZSA9IChpbmNvcnJlY3QsIHR5cGUpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQWxsIHZhbHVlcyBuZWVkIHRvIGJlIG9mIHR5cGU6ICcgKyB0eXBlICsgJy4gS2V5cyAoJyArIHNvcnQoaW5jb3JyZWN0KS5qb2luKCcsICcpICsgJykgd2VyZSBub3QuJyk7XG4gICAgfTtcbiAgICBjb25zdCBjaGVja0R1cGVzID0gZXZlcnl0aGluZyA9PiB7XG4gICAgICBjb25zdCBzb3J0ZWQgPSBzb3J0KGV2ZXJ5dGhpbmcpO1xuICAgICAgY29uc3QgZHVwZSA9IGZpbmQkMShzb3J0ZWQsIChzLCBpKSA9PiB7XG4gICAgICAgIHJldHVybiBpIDwgc29ydGVkLmxlbmd0aCAtIDEgJiYgcyA9PT0gc29ydGVkW2kgKyAxXTtcbiAgICAgIH0pO1xuICAgICAgZHVwZS5lYWNoKGQgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmaWVsZDogJyArIGQgKyAnIG9jY3VycyBtb3JlIHRoYW4gb25jZSBpbiB0aGUgY29tYmluZWQgZmllbGRzOiBbJyArIHNvcnRlZC5qb2luKCcsICcpICsgJ10uJyk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgYmFzZSA9IChoYW5kbGVVbnN1cHBvcnRlZCwgcmVxdWlyZWQpID0+IHtcbiAgICAgIHJldHVybiBiYXNlV2l0aChoYW5kbGVVbnN1cHBvcnRlZCwgcmVxdWlyZWQsIHtcbiAgICAgICAgdmFsaWRhdGU6IGlzRnVuY3Rpb24sXG4gICAgICAgIGxhYmVsOiAnZnVuY3Rpb24nXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGJhc2VXaXRoID0gKGhhbmRsZVVuc3VwcG9ydGVkLCByZXF1aXJlZCwgcHJlZCkgPT4ge1xuICAgICAgaWYgKHJlcXVpcmVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIHJlcXVpcmVkIGZpZWxkLicpO1xuICAgICAgfVxuICAgICAgdmFsaWRhdGVTdHJBcnIoJ3JlcXVpcmVkJywgcmVxdWlyZWQpO1xuICAgICAgY2hlY2tEdXBlcyhyZXF1aXJlZCk7XG4gICAgICByZXR1cm4gb2JqID0+IHtcbiAgICAgICAgY29uc3Qga2V5cyQxID0ga2V5cyhvYmopO1xuICAgICAgICBjb25zdCBhbGxSZXFkID0gZm9yYWxsKHJlcXVpcmVkLCByZXEgPT4ge1xuICAgICAgICAgIHJldHVybiBjb250YWlucyQyKGtleXMkMSwgcmVxKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghYWxsUmVxZCkge1xuICAgICAgICAgIHJlcU1lc3NhZ2UocmVxdWlyZWQsIGtleXMkMSk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlVW5zdXBwb3J0ZWQocmVxdWlyZWQsIGtleXMkMSk7XG4gICAgICAgIGNvbnN0IGludmFsaWRLZXlzID0gZmlsdGVyJDIocmVxdWlyZWQsIGtleSA9PiB7XG4gICAgICAgICAgcmV0dXJuICFwcmVkLnZhbGlkYXRlKG9ialtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGludmFsaWRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpbnZhbGlkVHlwZU1lc3NhZ2UoaW52YWxpZEtleXMsIHByZWQubGFiZWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlRXhhY3QgPSAocmVxdWlyZWQsIGtleXMpID0+IHtcbiAgICAgIGNvbnN0IHVuc3VwcG9ydGVkID0gZmlsdGVyJDIoa2V5cywga2V5ID0+IHtcbiAgICAgICAgcmV0dXJuICFjb250YWlucyQyKHJlcXVpcmVkLCBrZXkpO1xuICAgICAgfSk7XG4gICAgICBpZiAodW5zdXBwb3J0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICB1bnN1cHBNZXNzYWdlKHVuc3VwcG9ydGVkKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGV4YWN0bHkgPSByZXF1aXJlZCA9PiBiYXNlKGhhbmRsZUV4YWN0LCByZXF1aXJlZCk7XG5cbiAgICBjb25zdCBEcmFnTW9kZSA9IGV4YWN0bHkoW1xuICAgICAgJ2NvbXBhcmUnLFxuICAgICAgJ2V4dHJhY3QnLFxuICAgICAgJ211dGF0ZScsXG4gICAgICAnc2luaydcbiAgICBdKTtcbiAgICBjb25zdCBEcmFnU2luayA9IGV4YWN0bHkoW1xuICAgICAgJ2VsZW1lbnQnLFxuICAgICAgJ3N0YXJ0JyxcbiAgICAgICdzdG9wJyxcbiAgICAgICdkZXN0cm95J1xuICAgIF0pO1xuICAgIGNvbnN0IERyYWdBcGkgPSBleGFjdGx5KFtcbiAgICAgICdmb3JjZURyb3AnLFxuICAgICAgJ2Ryb3AnLFxuICAgICAgJ21vdmUnLFxuICAgICAgJ2RlbGF5RHJvcCdcbiAgICBdKTtcblxuICAgIGNvbnN0IEluRHJhZyA9ICgpID0+IHtcbiAgICAgIGxldCBwcmV2aW91cyA9IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIGNvbnN0IHJlc2V0ID0gKCkgPT4ge1xuICAgICAgICBwcmV2aW91cyA9IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH07XG4gICAgICBjb25zdCB1cGRhdGUgPSAobW9kZSwgbnUpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcHJldmlvdXMubWFwKG9sZCA9PiB7XG4gICAgICAgICAgcmV0dXJuIG1vZGUuY29tcGFyZShvbGQsIG51KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHByZXZpb3VzID0gT3B0aW9uYWwuc29tZShudSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25FdmVudCA9IChldmVudCwgbW9kZSkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhT3B0aW9uID0gbW9kZS5leHRyYWN0KGV2ZW50KTtcbiAgICAgICAgZGF0YU9wdGlvbi5lYWNoKGRhdGEgPT4ge1xuICAgICAgICAgIGNvbnN0IG9mZnNldCA9IHVwZGF0ZShtb2RlLCBkYXRhKTtcbiAgICAgICAgICBvZmZzZXQuZWFjaChkID0+IHtcbiAgICAgICAgICAgIGV2ZW50cy50cmlnZ2VyLm1vdmUoZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IGNyZWF0ZSQxKHsgbW92ZTogRXZlbnQoWydpbmZvJ10pIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb25FdmVudCxcbiAgICAgICAgcmVzZXQsXG4gICAgICAgIGV2ZW50czogZXZlbnRzLnJlZ2lzdHJ5XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBOb0RyYWcgPSAoKSA9PiB7XG4gICAgICBjb25zdCBldmVudHMgPSBjcmVhdGUkMSh7IG1vdmU6IEV2ZW50KFsnaW5mbyddKSB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9uRXZlbnQ6IG5vb3AsXG4gICAgICAgIHJlc2V0OiBub29wLFxuICAgICAgICBldmVudHM6IGV2ZW50cy5yZWdpc3RyeVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgTW92ZW1lbnQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBub0RyYWdTdGF0ZSA9IE5vRHJhZygpO1xuICAgICAgY29uc3QgaW5EcmFnU3RhdGUgPSBJbkRyYWcoKTtcbiAgICAgIGxldCBkcmFnU3RhdGUgPSBub0RyYWdTdGF0ZTtcbiAgICAgIGNvbnN0IG9uID0gKCkgPT4ge1xuICAgICAgICBkcmFnU3RhdGUucmVzZXQoKTtcbiAgICAgICAgZHJhZ1N0YXRlID0gaW5EcmFnU3RhdGU7XG4gICAgICB9O1xuICAgICAgY29uc3Qgb2ZmID0gKCkgPT4ge1xuICAgICAgICBkcmFnU3RhdGUucmVzZXQoKTtcbiAgICAgICAgZHJhZ1N0YXRlID0gbm9EcmFnU3RhdGU7XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25FdmVudCA9IChldmVudCwgbW9kZSkgPT4ge1xuICAgICAgICBkcmFnU3RhdGUub25FdmVudChldmVudCwgbW9kZSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNPbiA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGRyYWdTdGF0ZSA9PT0gaW5EcmFnU3RhdGU7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb24sXG4gICAgICAgIG9mZixcbiAgICAgICAgaXNPbixcbiAgICAgICAgb25FdmVudCxcbiAgICAgICAgZXZlbnRzOiBpbkRyYWdTdGF0ZS5ldmVudHNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHNldHVwID0gKG11dGF0aW9uLCBtb2RlLCBzZXR0aW5ncykgPT4ge1xuICAgICAgbGV0IGFjdGl2ZSA9IGZhbHNlO1xuICAgICAgY29uc3QgZXZlbnRzID0gY3JlYXRlJDEoe1xuICAgICAgICBzdGFydDogRXZlbnQoW10pLFxuICAgICAgICBzdG9wOiBFdmVudChbXSlcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbW92ZW1lbnQgPSBNb3ZlbWVudCgpO1xuICAgICAgY29uc3QgZHJvcCA9ICgpID0+IHtcbiAgICAgICAgc2luay5zdG9wKCk7XG4gICAgICAgIGlmIChtb3ZlbWVudC5pc09uKCkpIHtcbiAgICAgICAgICBtb3ZlbWVudC5vZmYoKTtcbiAgICAgICAgICBldmVudHMudHJpZ2dlci5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCB0aHJvdHRsZWREcm9wID0gbGFzdChkcm9wLCAyMDApO1xuICAgICAgY29uc3QgZ28gPSBwYXJlbnQgPT4ge1xuICAgICAgICBzaW5rLnN0YXJ0KHBhcmVudCk7XG4gICAgICAgIG1vdmVtZW50Lm9uKCk7XG4gICAgICAgIGV2ZW50cy50cmlnZ2VyLnN0YXJ0KCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgbW91c2Vtb3ZlID0gZXZlbnQgPT4ge1xuICAgICAgICB0aHJvdHRsZWREcm9wLmNhbmNlbCgpO1xuICAgICAgICBtb3ZlbWVudC5vbkV2ZW50KGV2ZW50LCBtb2RlKTtcbiAgICAgIH07XG4gICAgICBtb3ZlbWVudC5ldmVudHMubW92ZS5iaW5kKGV2ZW50ID0+IHtcbiAgICAgICAgbW9kZS5tdXRhdGUobXV0YXRpb24sIGV2ZW50LmluZm8pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBvbiA9ICgpID0+IHtcbiAgICAgICAgYWN0aXZlID0gdHJ1ZTtcbiAgICAgIH07XG4gICAgICBjb25zdCBvZmYgPSAoKSA9PiB7XG4gICAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gKCkgPT4gYWN0aXZlO1xuICAgICAgY29uc3QgcnVuSWZBY3RpdmUgPSBmID0+IHtcbiAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICAgICAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2luayA9IG1vZGUuc2luayhEcmFnQXBpKHtcbiAgICAgICAgZm9yY2VEcm9wOiBkcm9wLFxuICAgICAgICBkcm9wOiBydW5JZkFjdGl2ZShkcm9wKSxcbiAgICAgICAgbW92ZTogcnVuSWZBY3RpdmUobW91c2Vtb3ZlKSxcbiAgICAgICAgZGVsYXlEcm9wOiBydW5JZkFjdGl2ZSh0aHJvdHRsZWREcm9wLnRocm90dGxlKVxuICAgICAgfSksIHNldHRpbmdzKTtcbiAgICAgIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICAgIHNpbmsuZGVzdHJveSgpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZW1lbnQ6IHNpbmsuZWxlbWVudCxcbiAgICAgICAgZ28sXG4gICAgICAgIG9uLFxuICAgICAgICBvZmYsXG4gICAgICAgIGlzQWN0aXZlLFxuICAgICAgICBkZXN0cm95LFxuICAgICAgICBldmVudHM6IGV2ZW50cy5yZWdpc3RyeVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgY3NzID0gbmFtZXNwYWNlID0+IHtcbiAgICAgIGNvbnN0IGRhc2hOYW1lc3BhY2UgPSBuYW1lc3BhY2UucmVwbGFjZSgvXFwuL2csICctJyk7XG4gICAgICBjb25zdCByZXNvbHZlID0gc3RyID0+IHtcbiAgICAgICAgcmV0dXJuIGRhc2hOYW1lc3BhY2UgKyAnLScgKyBzdHI7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgcmVzb2x2ZSB9O1xuICAgIH07XG5cbiAgICBjb25zdCBzdHlsZXMkMSA9IGNzcygnZXBob3gtZHJhZ3N0ZXInKTtcbiAgICBjb25zdCByZXNvbHZlJDEgPSBzdHlsZXMkMS5yZXNvbHZlO1xuXG4gICAgY29uc3QgQmxvY2tlciA9IG9wdGlvbnMgPT4ge1xuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB7XG4gICAgICAgIGxheWVyQ2xhc3M6IHJlc29sdmUkMSgnYmxvY2tlcicpLFxuICAgICAgICAuLi5vcHRpb25zXG4gICAgICB9O1xuICAgICAgY29uc3QgZGl2ID0gU3VnYXJFbGVtZW50LmZyb21UYWcoJ2RpdicpO1xuICAgICAgc2V0JDIoZGl2LCAncm9sZScsICdwcmVzZW50YXRpb24nKTtcbiAgICAgIHNldEFsbChkaXYsIHtcbiAgICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICAgIGxlZnQ6ICcwcHgnLFxuICAgICAgICB0b3A6ICcwcHgnLFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBoZWlnaHQ6ICcxMDAlJ1xuICAgICAgfSk7XG4gICAgICBhZGQoZGl2LCByZXNvbHZlJDEoJ2Jsb2NrZXInKSk7XG4gICAgICBhZGQoZGl2LCBzZXR0aW5ncy5sYXllckNsYXNzKTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb25zdGFudChkaXYpO1xuICAgICAgY29uc3QgZGVzdHJveSA9ICgpID0+IHtcbiAgICAgICAgcmVtb3ZlJDYoZGl2KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBkZXN0cm95XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBjb21wYXJlID0gKG9sZCwgbnUpID0+IHtcbiAgICAgIHJldHVybiBTdWdhclBvc2l0aW9uKG51LmxlZnQgLSBvbGQubGVmdCwgbnUudG9wIC0gb2xkLnRvcCk7XG4gICAgfTtcbiAgICBjb25zdCBleHRyYWN0ID0gZXZlbnQgPT4ge1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoU3VnYXJQb3NpdGlvbihldmVudC54LCBldmVudC55KSk7XG4gICAgfTtcbiAgICBjb25zdCBtdXRhdGUgPSAobXV0YXRpb24sIGluZm8pID0+IHtcbiAgICAgIG11dGF0aW9uLm11dGF0ZShpbmZvLmxlZnQsIGluZm8udG9wKTtcbiAgICB9O1xuICAgIGNvbnN0IHNpbmsgPSAoZHJhZ0FwaSwgc2V0dGluZ3MpID0+IHtcbiAgICAgIGNvbnN0IGJsb2NrZXIgPSBCbG9ja2VyKHNldHRpbmdzKTtcbiAgICAgIGNvbnN0IG1kb3duID0gYmluZChibG9ja2VyLmVsZW1lbnQoKSwgJ21vdXNlZG93bicsIGRyYWdBcGkuZm9yY2VEcm9wKTtcbiAgICAgIGNvbnN0IG11cCA9IGJpbmQoYmxvY2tlci5lbGVtZW50KCksICdtb3VzZXVwJywgZHJhZ0FwaS5kcm9wKTtcbiAgICAgIGNvbnN0IG1tb3ZlID0gYmluZChibG9ja2VyLmVsZW1lbnQoKSwgJ21vdXNlbW92ZScsIGRyYWdBcGkubW92ZSk7XG4gICAgICBjb25zdCBtb3V0ID0gYmluZChibG9ja2VyLmVsZW1lbnQoKSwgJ21vdXNlb3V0JywgZHJhZ0FwaS5kZWxheURyb3ApO1xuICAgICAgY29uc3QgZGVzdHJveSA9ICgpID0+IHtcbiAgICAgICAgYmxvY2tlci5kZXN0cm95KCk7XG4gICAgICAgIG11cC51bmJpbmQoKTtcbiAgICAgICAgbW1vdmUudW5iaW5kKCk7XG4gICAgICAgIG1vdXQudW5iaW5kKCk7XG4gICAgICAgIG1kb3duLnVuYmluZCgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gcGFyZW50ID0+IHtcbiAgICAgICAgYXBwZW5kJDEocGFyZW50LCBibG9ja2VyLmVsZW1lbnQoKSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc3RvcCA9ICgpID0+IHtcbiAgICAgICAgcmVtb3ZlJDYoYmxvY2tlci5lbGVtZW50KCkpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBEcmFnU2luayh7XG4gICAgICAgIGVsZW1lbnQ6IGJsb2NrZXIuZWxlbWVudCxcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIHN0b3AsXG4gICAgICAgIGRlc3Ryb3lcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdmFyIE1vdXNlRHJhZyA9IERyYWdNb2RlKHtcbiAgICAgIGNvbXBhcmUsXG4gICAgICBleHRyYWN0LFxuICAgICAgc2luayxcbiAgICAgIG11dGF0ZVxuICAgIH0pO1xuXG4gICAgY29uc3QgdHJhbnNmb3JtID0gKG11dGF0aW9uLCBzZXR0aW5ncyA9IHt9KSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBtb2RlID0gKF9hID0gc2V0dGluZ3MubW9kZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogTW91c2VEcmFnO1xuICAgICAgcmV0dXJuIHNldHVwKG11dGF0aW9uLCBtb2RlLCBzZXR0aW5ncyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHN0eWxlcyA9IGNzcygnZXBob3gtc25vb2tlcicpO1xuICAgIGNvbnN0IHJlc29sdmUgPSBzdHlsZXMucmVzb2x2ZTtcblxuICAgIGNvbnN0IE11dGF0aW9uID0gKCkgPT4ge1xuICAgICAgY29uc3QgZXZlbnRzID0gY3JlYXRlJDEoe1xuICAgICAgICBkcmFnOiBFdmVudChbXG4gICAgICAgICAgJ3hEZWx0YScsXG4gICAgICAgICAgJ3lEZWx0YSdcbiAgICAgICAgXSlcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbXV0YXRlID0gKHgsIHkpID0+IHtcbiAgICAgICAgZXZlbnRzLnRyaWdnZXIuZHJhZyh4LCB5KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtdXRhdGUsXG4gICAgICAgIGV2ZW50czogZXZlbnRzLnJlZ2lzdHJ5XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBCYXJNdXRhdGlvbiA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IGNyZWF0ZSQxKHtcbiAgICAgICAgZHJhZzogRXZlbnQoW1xuICAgICAgICAgICd4RGVsdGEnLFxuICAgICAgICAgICd5RGVsdGEnLFxuICAgICAgICAgICd0YXJnZXQnXG4gICAgICAgIF0pXG4gICAgICB9KTtcbiAgICAgIGxldCB0YXJnZXQgPSBPcHRpb25hbC5ub25lKCk7XG4gICAgICBjb25zdCBkZWxlZ2F0ZSA9IE11dGF0aW9uKCk7XG4gICAgICBkZWxlZ2F0ZS5ldmVudHMuZHJhZy5iaW5kKGV2ZW50ID0+IHtcbiAgICAgICAgdGFyZ2V0LmVhY2godCA9PiB7XG4gICAgICAgICAgZXZlbnRzLnRyaWdnZXIuZHJhZyhldmVudC54RGVsdGEsIGV2ZW50LnlEZWx0YSwgdCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBhc3NpZ24gPSB0ID0+IHtcbiAgICAgICAgdGFyZ2V0ID0gT3B0aW9uYWwuc29tZSh0KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXQgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYXNzaWduLFxuICAgICAgICBnZXQsXG4gICAgICAgIG11dGF0ZTogZGVsZWdhdGUubXV0YXRlLFxuICAgICAgICBldmVudHM6IGV2ZW50cy5yZWdpc3RyeVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgY29sID0gKGNvbHVtbiwgeCwgeSwgdywgaCkgPT4ge1xuICAgICAgY29uc3QgYmFyID0gU3VnYXJFbGVtZW50LmZyb21UYWcoJ2RpdicpO1xuICAgICAgc2V0QWxsKGJhciwge1xuICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgbGVmdDogeCAtIHcgLyAyICsgJ3B4JyxcbiAgICAgICAgdG9wOiB5ICsgJ3B4JyxcbiAgICAgICAgaGVpZ2h0OiBoICsgJ3B4JyxcbiAgICAgICAgd2lkdGg6IHcgKyAncHgnXG4gICAgICB9KTtcbiAgICAgIHNldEFsbCQxKGJhciwge1xuICAgICAgICAnZGF0YS1jb2x1bW4nOiBjb2x1bW4sXG4gICAgICAgICdyb2xlJzogJ3ByZXNlbnRhdGlvbidcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGJhcjtcbiAgICB9O1xuICAgIGNvbnN0IHJvdyA9IChyLCB4LCB5LCB3LCBoKSA9PiB7XG4gICAgICBjb25zdCBiYXIgPSBTdWdhckVsZW1lbnQuZnJvbVRhZygnZGl2Jyk7XG4gICAgICBzZXRBbGwoYmFyLCB7XG4gICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICBsZWZ0OiB4ICsgJ3B4JyxcbiAgICAgICAgdG9wOiB5IC0gaCAvIDIgKyAncHgnLFxuICAgICAgICBoZWlnaHQ6IGggKyAncHgnLFxuICAgICAgICB3aWR0aDogdyArICdweCdcbiAgICAgIH0pO1xuICAgICAgc2V0QWxsJDEoYmFyLCB7XG4gICAgICAgICdkYXRhLXJvdyc6IHIsXG4gICAgICAgICdyb2xlJzogJ3ByZXNlbnRhdGlvbidcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGJhcjtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzaXplQmFyID0gcmVzb2x2ZSgncmVzaXplci1iYXInKTtcbiAgICBjb25zdCByZXNpemVSb3dCYXIgPSByZXNvbHZlKCdyZXNpemVyLXJvd3MnKTtcbiAgICBjb25zdCByZXNpemVDb2xCYXIgPSByZXNvbHZlKCdyZXNpemVyLWNvbHMnKTtcbiAgICBjb25zdCBCQVJfVEhJQ0tORVNTID0gNztcbiAgICBjb25zdCByZXNpemFibGVSb3dzID0gKHdhcmVob3VzZSwgaXNSZXNpemFibGUpID0+IGJpbmQkMih3YXJlaG91c2UuYWxsLCAocm93LCBpKSA9PiBpc1Jlc2l6YWJsZShyb3cuZWxlbWVudCkgPyBbaV0gOiBbXSk7XG4gICAgY29uc3QgcmVzaXphYmxlQ29sdW1ucyA9ICh3YXJlaG91c2UsIGlzUmVzaXphYmxlKSA9PiB7XG4gICAgICBjb25zdCByZXNpemFibGVDb2xzID0gW107XG4gICAgICByYW5nZSQxKHdhcmVob3VzZS5ncmlkLmNvbHVtbnMsIGluZGV4ID0+IHtcbiAgICAgICAgY29uc3QgY29sRWxtT3B0ID0gV2FyZWhvdXNlLmdldENvbHVtbkF0KHdhcmVob3VzZSwgaW5kZXgpLm1hcChjb2wgPT4gY29sLmVsZW1lbnQpO1xuICAgICAgICBpZiAoY29sRWxtT3B0LmZvcmFsbChpc1Jlc2l6YWJsZSkpIHtcbiAgICAgICAgICByZXNpemFibGVDb2xzLnB1c2goaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmaWx0ZXIkMihyZXNpemFibGVDb2xzLCBjb2xJbmRleCA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbkNlbGxzID0gV2FyZWhvdXNlLmZpbHRlckl0ZW1zKHdhcmVob3VzZSwgY2VsbCA9PiBjZWxsLmNvbHVtbiA9PT0gY29sSW5kZXgpO1xuICAgICAgICByZXR1cm4gZm9yYWxsKGNvbHVtbkNlbGxzLCBjZWxsID0+IGlzUmVzaXphYmxlKGNlbGwuZWxlbWVudCkpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBkZXN0cm95ID0gd2lyZSA9PiB7XG4gICAgICBjb25zdCBwcmV2aW91cyA9IGRlc2NlbmRhbnRzKHdpcmUucGFyZW50KCksICcuJyArIHJlc2l6ZUJhcik7XG4gICAgICBlYWNoJDIocHJldmlvdXMsIHJlbW92ZSQ2KTtcbiAgICB9O1xuICAgIGNvbnN0IGRyYXdCYXIgPSAod2lyZSwgcG9zaXRpb25zLCBjcmVhdGUpID0+IHtcbiAgICAgIGNvbnN0IG9yaWdpbiA9IHdpcmUub3JpZ2luKCk7XG4gICAgICBlYWNoJDIocG9zaXRpb25zLCBjcE9wdGlvbiA9PiB7XG4gICAgICAgIGNwT3B0aW9uLmVhY2goY3AgPT4ge1xuICAgICAgICAgIGNvbnN0IGJhciA9IGNyZWF0ZShvcmlnaW4sIGNwKTtcbiAgICAgICAgICBhZGQoYmFyLCByZXNpemVCYXIpO1xuICAgICAgICAgIGFwcGVuZCQxKHdpcmUucGFyZW50KCksIGJhcik7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWZyZXNoQ29sID0gKHdpcmUsIGNvbFBvc2l0aW9ucywgcG9zaXRpb24sIHRhYmxlSGVpZ2h0KSA9PiB7XG4gICAgICBkcmF3QmFyKHdpcmUsIGNvbFBvc2l0aW9ucywgKG9yaWdpbiwgY3ApID0+IHtcbiAgICAgICAgY29uc3QgY29sQmFyID0gY29sKGNwLmNvbCwgY3AueCAtIG9yaWdpbi5sZWZ0LCBwb3NpdGlvbi50b3AgLSBvcmlnaW4udG9wLCBCQVJfVEhJQ0tORVNTLCB0YWJsZUhlaWdodCk7XG4gICAgICAgIGFkZChjb2xCYXIsIHJlc2l6ZUNvbEJhcik7XG4gICAgICAgIHJldHVybiBjb2xCYXI7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZnJlc2hSb3cgPSAod2lyZSwgcm93UG9zaXRpb25zLCBwb3NpdGlvbiwgdGFibGVXaWR0aCkgPT4ge1xuICAgICAgZHJhd0Jhcih3aXJlLCByb3dQb3NpdGlvbnMsIChvcmlnaW4sIGNwKSA9PiB7XG4gICAgICAgIGNvbnN0IHJvd0JhciA9IHJvdyhjcC5yb3csIHBvc2l0aW9uLmxlZnQgLSBvcmlnaW4ubGVmdCwgY3AueSAtIG9yaWdpbi50b3AsIHRhYmxlV2lkdGgsIEJBUl9USElDS05FU1MpO1xuICAgICAgICBhZGQocm93QmFyLCByZXNpemVSb3dCYXIpO1xuICAgICAgICByZXR1cm4gcm93QmFyO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWZyZXNoR3JpZCA9ICh3YXJob3VzZSwgd2lyZSwgdGFibGUsIHJvd3MsIGNvbHMpID0+IHtcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gYWJzb2x1dGUodGFibGUpO1xuICAgICAgY29uc3QgaXNSZXNpemFibGUgPSB3aXJlLmlzUmVzaXphYmxlO1xuICAgICAgY29uc3Qgcm93UG9zaXRpb25zID0gcm93cy5sZW5ndGggPiAwID8gaGVpZ2h0LnBvc2l0aW9ucyhyb3dzLCB0YWJsZSkgOiBbXTtcbiAgICAgIGNvbnN0IHJlc2l6YWJsZVJvd0JhcnMgPSByb3dQb3NpdGlvbnMubGVuZ3RoID4gMCA/IHJlc2l6YWJsZVJvd3Mod2FyaG91c2UsIGlzUmVzaXphYmxlKSA6IFtdO1xuICAgICAgY29uc3QgcmVzaXphYmxlUm93UG9zaXRpb25zID0gZmlsdGVyJDIocm93UG9zaXRpb25zLCAoX3BvcywgaSkgPT4gZXhpc3RzKHJlc2l6YWJsZVJvd0JhcnMsIGJhckluZGV4ID0+IGkgPT09IGJhckluZGV4KSk7XG4gICAgICByZWZyZXNoUm93KHdpcmUsIHJlc2l6YWJsZVJvd1Bvc2l0aW9ucywgcG9zaXRpb24sIGdldE91dGVyJDIodGFibGUpKTtcbiAgICAgIGNvbnN0IGNvbFBvc2l0aW9ucyA9IGNvbHMubGVuZ3RoID4gMCA/IHdpZHRoLnBvc2l0aW9ucyhjb2xzLCB0YWJsZSkgOiBbXTtcbiAgICAgIGNvbnN0IHJlc2l6YWJsZUNvbEJhcnMgPSBjb2xQb3NpdGlvbnMubGVuZ3RoID4gMCA/IHJlc2l6YWJsZUNvbHVtbnMod2FyaG91c2UsIGlzUmVzaXphYmxlKSA6IFtdO1xuICAgICAgY29uc3QgcmVzaXphYmxlQ29sUG9zaXRpb25zID0gZmlsdGVyJDIoY29sUG9zaXRpb25zLCAoX3BvcywgaSkgPT4gZXhpc3RzKHJlc2l6YWJsZUNvbEJhcnMsIGJhckluZGV4ID0+IGkgPT09IGJhckluZGV4KSk7XG4gICAgICByZWZyZXNoQ29sKHdpcmUsIHJlc2l6YWJsZUNvbFBvc2l0aW9ucywgcG9zaXRpb24sIGdldE91dGVyJDEodGFibGUpKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZnJlc2ggPSAod2lyZSwgdGFibGUpID0+IHtcbiAgICAgIGRlc3Ryb3kod2lyZSk7XG4gICAgICBpZiAod2lyZS5pc1Jlc2l6YWJsZSh0YWJsZSkpIHtcbiAgICAgICAgY29uc3Qgd2FyZWhvdXNlID0gV2FyZWhvdXNlLmZyb21UYWJsZSh0YWJsZSk7XG4gICAgICAgIGNvbnN0IHJvd3MkMSA9IHJvd3Mod2FyZWhvdXNlKTtcbiAgICAgICAgY29uc3QgY29scyA9IGNvbHVtbnMod2FyZWhvdXNlKTtcbiAgICAgICAgcmVmcmVzaEdyaWQod2FyZWhvdXNlLCB3aXJlLCB0YWJsZSwgcm93cyQxLCBjb2xzKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGVhY2ggPSAod2lyZSwgZikgPT4ge1xuICAgICAgY29uc3QgYmFycyA9IGRlc2NlbmRhbnRzKHdpcmUucGFyZW50KCksICcuJyArIHJlc2l6ZUJhcik7XG4gICAgICBlYWNoJDIoYmFycywgZik7XG4gICAgfTtcbiAgICBjb25zdCBoaWRlID0gd2lyZSA9PiB7XG4gICAgICBlYWNoKHdpcmUsIGJhciA9PiB7XG4gICAgICAgIHNldCQxKGJhciwgJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzaG93ID0gd2lyZSA9PiB7XG4gICAgICBlYWNoKHdpcmUsIGJhciA9PiB7XG4gICAgICAgIHNldCQxKGJhciwgJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaXNSb3dCYXIgPSBlbGVtZW50ID0+IHtcbiAgICAgIHJldHVybiBoYXMoZWxlbWVudCwgcmVzaXplUm93QmFyKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQ29sQmFyID0gZWxlbWVudCA9PiB7XG4gICAgICByZXR1cm4gaGFzKGVsZW1lbnQsIHJlc2l6ZUNvbEJhcik7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc2l6ZUJhckRyYWdnaW5nID0gcmVzb2x2ZSgncmVzaXplci1iYXItZHJhZ2dpbmcnKTtcbiAgICBjb25zdCBCYXJNYW5hZ2VyID0gd2lyZSA9PiB7XG4gICAgICBjb25zdCBtdXRhdGlvbiA9IEJhck11dGF0aW9uKCk7XG4gICAgICBjb25zdCByZXNpemluZyA9IHRyYW5zZm9ybShtdXRhdGlvbiwge30pO1xuICAgICAgbGV0IGhvdmVyVGFibGUgPSBPcHRpb25hbC5ub25lKCk7XG4gICAgICBjb25zdCBnZXRSZXNpemVyID0gKGVsZW1lbnQsIHR5cGUpID0+IHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oZ2V0JGIoZWxlbWVudCwgdHlwZSkpO1xuICAgICAgfTtcbiAgICAgIG11dGF0aW9uLmV2ZW50cy5kcmFnLmJpbmQoZXZlbnQgPT4ge1xuICAgICAgICBnZXRSZXNpemVyKGV2ZW50LnRhcmdldCwgJ2RhdGEtcm93JykuZWFjaChfZGF0YVJvdyA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFJvdyA9IGdldENzc1ZhbHVlKGV2ZW50LnRhcmdldCwgJ3RvcCcpO1xuICAgICAgICAgIHNldCQxKGV2ZW50LnRhcmdldCwgJ3RvcCcsIGN1cnJlbnRSb3cgKyBldmVudC55RGVsdGEgKyAncHgnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGdldFJlc2l6ZXIoZXZlbnQudGFyZ2V0LCAnZGF0YS1jb2x1bW4nKS5lYWNoKF9kYXRhQ29sID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50Q29sID0gZ2V0Q3NzVmFsdWUoZXZlbnQudGFyZ2V0LCAnbGVmdCcpO1xuICAgICAgICAgIHNldCQxKGV2ZW50LnRhcmdldCwgJ2xlZnQnLCBjdXJyZW50Q29sICsgZXZlbnQueERlbHRhICsgJ3B4Jyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBnZXREZWx0YSA9ICh0YXJnZXQsIGRpcikgPT4ge1xuICAgICAgICBjb25zdCBuZXdYID0gZ2V0Q3NzVmFsdWUodGFyZ2V0LCBkaXIpO1xuICAgICAgICBjb25zdCBvbGRYID0gZ2V0QXR0clZhbHVlKHRhcmdldCwgJ2RhdGEtaW5pdGlhbC0nICsgZGlyLCAwKTtcbiAgICAgICAgcmV0dXJuIG5ld1ggLSBvbGRYO1xuICAgICAgfTtcbiAgICAgIHJlc2l6aW5nLmV2ZW50cy5zdG9wLmJpbmQoKCkgPT4ge1xuICAgICAgICBtdXRhdGlvbi5nZXQoKS5lYWNoKHRhcmdldCA9PiB7XG4gICAgICAgICAgaG92ZXJUYWJsZS5lYWNoKHRhYmxlID0+IHtcbiAgICAgICAgICAgIGdldFJlc2l6ZXIodGFyZ2V0LCAnZGF0YS1yb3cnKS5lYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gZ2V0RGVsdGEodGFyZ2V0LCAndG9wJyk7XG4gICAgICAgICAgICAgIHJlbW92ZSQ3KHRhcmdldCwgJ2RhdGEtaW5pdGlhbC10b3AnKTtcbiAgICAgICAgICAgICAgZXZlbnRzLnRyaWdnZXIuYWRqdXN0SGVpZ2h0KHRhYmxlLCBkZWx0YSwgcGFyc2VJbnQocm93LCAxMCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBnZXRSZXNpemVyKHRhcmdldCwgJ2RhdGEtY29sdW1uJykuZWFjaChjb2x1bW4gPT4ge1xuICAgICAgICAgICAgICBjb25zdCBkZWx0YSA9IGdldERlbHRhKHRhcmdldCwgJ2xlZnQnKTtcbiAgICAgICAgICAgICAgcmVtb3ZlJDcodGFyZ2V0LCAnZGF0YS1pbml0aWFsLWxlZnQnKTtcbiAgICAgICAgICAgICAgZXZlbnRzLnRyaWdnZXIuYWRqdXN0V2lkdGgodGFibGUsIGRlbHRhLCBwYXJzZUludChjb2x1bW4sIDEwKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlZnJlc2god2lyZSwgdGFibGUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaGFuZGxlciA9ICh0YXJnZXQsIGRpcikgPT4ge1xuICAgICAgICBldmVudHMudHJpZ2dlci5zdGFydEFkanVzdCgpO1xuICAgICAgICBtdXRhdGlvbi5hc3NpZ24odGFyZ2V0KTtcbiAgICAgICAgc2V0JDIodGFyZ2V0LCAnZGF0YS1pbml0aWFsLScgKyBkaXIsIGdldENzc1ZhbHVlKHRhcmdldCwgZGlyKSk7XG4gICAgICAgIGFkZCh0YXJnZXQsIHJlc2l6ZUJhckRyYWdnaW5nKTtcbiAgICAgICAgc2V0JDEodGFyZ2V0LCAnb3BhY2l0eScsICcwLjInKTtcbiAgICAgICAgcmVzaXppbmcuZ28od2lyZS5wYXJlbnQoKSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgbW91c2Vkb3duID0gYmluZCh3aXJlLnBhcmVudCgpLCAnbW91c2Vkb3duJywgZXZlbnQgPT4ge1xuICAgICAgICBpZiAoaXNSb3dCYXIoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgIGhhbmRsZXIoZXZlbnQudGFyZ2V0LCAndG9wJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQ29sQmFyKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICBoYW5kbGVyKGV2ZW50LnRhcmdldCwgJ2xlZnQnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBpc1Jvb3QgPSBlID0+IHtcbiAgICAgICAgcmV0dXJuIGVxJDEoZSwgd2lyZS52aWV3KCkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZpbmRDbG9zZXN0RWRpdGFibGVUYWJsZSA9IHRhcmdldCA9PiBjbG9zZXN0JDEodGFyZ2V0LCAndGFibGUnLCBpc1Jvb3QpLmZpbHRlcihpc0VkaXRhYmxlJDEpO1xuICAgICAgY29uc3QgbW91c2VvdmVyID0gYmluZCh3aXJlLnZpZXcoKSwgJ21vdXNlb3ZlcicsIGV2ZW50ID0+IHtcbiAgICAgICAgZmluZENsb3Nlc3RFZGl0YWJsZVRhYmxlKGV2ZW50LnRhcmdldCkuZm9sZCgoKSA9PiB7XG4gICAgICAgICAgaWYgKGluQm9keShldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICBkZXN0cm95KHdpcmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgdGFibGUgPT4ge1xuICAgICAgICAgIGlmIChyZXNpemluZy5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICBob3ZlclRhYmxlID0gT3B0aW9uYWwuc29tZSh0YWJsZSk7XG4gICAgICAgICAgICByZWZyZXNoKHdpcmUsIHRhYmxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBkZXN0cm95JDEgPSAoKSA9PiB7XG4gICAgICAgIG1vdXNlZG93bi51bmJpbmQoKTtcbiAgICAgICAgbW91c2VvdmVyLnVuYmluZCgpO1xuICAgICAgICByZXNpemluZy5kZXN0cm95KCk7XG4gICAgICAgIGRlc3Ryb3kod2lyZSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVmcmVzaCQxID0gdGJsID0+IHtcbiAgICAgICAgcmVmcmVzaCh3aXJlLCB0YmwpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IGNyZWF0ZSQxKHtcbiAgICAgICAgYWRqdXN0SGVpZ2h0OiBFdmVudChbXG4gICAgICAgICAgJ3RhYmxlJyxcbiAgICAgICAgICAnZGVsdGEnLFxuICAgICAgICAgICdyb3cnXG4gICAgICAgIF0pLFxuICAgICAgICBhZGp1c3RXaWR0aDogRXZlbnQoW1xuICAgICAgICAgICd0YWJsZScsXG4gICAgICAgICAgJ2RlbHRhJyxcbiAgICAgICAgICAnY29sdW1uJ1xuICAgICAgICBdKSxcbiAgICAgICAgc3RhcnRBZGp1c3Q6IEV2ZW50KFtdKVxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZXN0cm95OiBkZXN0cm95JDEsXG4gICAgICAgIHJlZnJlc2g6IHJlZnJlc2gkMSxcbiAgICAgICAgb246IHJlc2l6aW5nLm9uLFxuICAgICAgICBvZmY6IHJlc2l6aW5nLm9mZixcbiAgICAgICAgaGlkZUJhcnM6IGN1cnJ5KGhpZGUsIHdpcmUpLFxuICAgICAgICBzaG93QmFyczogY3Vycnkoc2hvdywgd2lyZSksXG4gICAgICAgIGV2ZW50czogZXZlbnRzLnJlZ2lzdHJ5XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGUgPSAod2lyZSwgcmVzaXppbmcsIGxhenlTaXppbmcpID0+IHtcbiAgICAgIGNvbnN0IGhkaXJlY3Rpb24gPSBoZWlnaHQ7XG4gICAgICBjb25zdCB2ZGlyZWN0aW9uID0gd2lkdGg7XG4gICAgICBjb25zdCBtYW5hZ2VyID0gQmFyTWFuYWdlcih3aXJlKTtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IGNyZWF0ZSQxKHtcbiAgICAgICAgYmVmb3JlUmVzaXplOiBFdmVudChbXG4gICAgICAgICAgJ3RhYmxlJyxcbiAgICAgICAgICAndHlwZSdcbiAgICAgICAgXSksXG4gICAgICAgIGFmdGVyUmVzaXplOiBFdmVudChbXG4gICAgICAgICAgJ3RhYmxlJyxcbiAgICAgICAgICAndHlwZSdcbiAgICAgICAgXSksXG4gICAgICAgIHN0YXJ0RHJhZzogRXZlbnQoW10pXG4gICAgICB9KTtcbiAgICAgIG1hbmFnZXIuZXZlbnRzLmFkanVzdEhlaWdodC5iaW5kKGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBldmVudC50YWJsZTtcbiAgICAgICAgZXZlbnRzLnRyaWdnZXIuYmVmb3JlUmVzaXplKHRhYmxlLCAncm93Jyk7XG4gICAgICAgIGNvbnN0IGRlbHRhID0gaGRpcmVjdGlvbi5kZWx0YShldmVudC5kZWx0YSwgdGFibGUpO1xuICAgICAgICBhZGp1c3RIZWlnaHQodGFibGUsIGRlbHRhLCBldmVudC5yb3csIGhkaXJlY3Rpb24pO1xuICAgICAgICBldmVudHMudHJpZ2dlci5hZnRlclJlc2l6ZSh0YWJsZSwgJ3JvdycpO1xuICAgICAgfSk7XG4gICAgICBtYW5hZ2VyLmV2ZW50cy5zdGFydEFkanVzdC5iaW5kKF9ldmVudCA9PiB7XG4gICAgICAgIGV2ZW50cy50cmlnZ2VyLnN0YXJ0RHJhZygpO1xuICAgICAgfSk7XG4gICAgICBtYW5hZ2VyLmV2ZW50cy5hZGp1c3RXaWR0aC5iaW5kKGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBldmVudC50YWJsZTtcbiAgICAgICAgZXZlbnRzLnRyaWdnZXIuYmVmb3JlUmVzaXplKHRhYmxlLCAnY29sJyk7XG4gICAgICAgIGNvbnN0IGRlbHRhID0gdmRpcmVjdGlvbi5kZWx0YShldmVudC5kZWx0YSwgdGFibGUpO1xuICAgICAgICBjb25zdCB0YWJsZVNpemUgPSBsYXp5U2l6aW5nKHRhYmxlKTtcbiAgICAgICAgYWRqdXN0V2lkdGgodGFibGUsIGRlbHRhLCBldmVudC5jb2x1bW4sIHJlc2l6aW5nLCB0YWJsZVNpemUpO1xuICAgICAgICBldmVudHMudHJpZ2dlci5hZnRlclJlc2l6ZSh0YWJsZSwgJ2NvbCcpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvbjogbWFuYWdlci5vbixcbiAgICAgICAgb2ZmOiBtYW5hZ2VyLm9mZixcbiAgICAgICAgcmVmcmVzaEJhcnM6IG1hbmFnZXIucmVmcmVzaCxcbiAgICAgICAgaGlkZUJhcnM6IG1hbmFnZXIuaGlkZUJhcnMsXG4gICAgICAgIHNob3dCYXJzOiBtYW5hZ2VyLnNob3dCYXJzLFxuICAgICAgICBkZXN0cm95OiBtYW5hZ2VyLmRlc3Ryb3ksXG4gICAgICAgIGV2ZW50czogZXZlbnRzLnJlZ2lzdHJ5XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgVGFibGVSZXNpemUgPSB7IGNyZWF0ZSB9O1xuXG4gICAgY29uc3Qgb25seSA9IChlbGVtZW50LCBpc1Jlc2l6YWJsZSkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50ID0gaXNEb2N1bWVudChlbGVtZW50KSA/IGRvY3VtZW50RWxlbWVudChlbGVtZW50KSA6IGVsZW1lbnQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXJlbnQ6IGNvbnN0YW50KHBhcmVudCksXG4gICAgICAgIHZpZXc6IGNvbnN0YW50KGVsZW1lbnQpLFxuICAgICAgICBvcmlnaW46IGNvbnN0YW50KFN1Z2FyUG9zaXRpb24oMCwgMCkpLFxuICAgICAgICBpc1Jlc2l6YWJsZVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGRldGFjaGVkID0gKGVkaXRhYmxlLCBjaHJvbWUsIGlzUmVzaXphYmxlKSA9PiB7XG4gICAgICBjb25zdCBvcmlnaW4gPSAoKSA9PiBhYnNvbHV0ZShjaHJvbWUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFyZW50OiBjb25zdGFudChjaHJvbWUpLFxuICAgICAgICB2aWV3OiBjb25zdGFudChlZGl0YWJsZSksXG4gICAgICAgIG9yaWdpbixcbiAgICAgICAgaXNSZXNpemFibGVcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBib2R5ID0gKGVkaXRhYmxlLCBjaHJvbWUsIGlzUmVzaXphYmxlKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXJlbnQ6IGNvbnN0YW50KGNocm9tZSksXG4gICAgICAgIHZpZXc6IGNvbnN0YW50KGVkaXRhYmxlKSxcbiAgICAgICAgb3JpZ2luOiBjb25zdGFudChTdWdhclBvc2l0aW9uKDAsIDApKSxcbiAgICAgICAgaXNSZXNpemFibGVcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBSZXNpemVXaXJlID0ge1xuICAgICAgb25seSxcbiAgICAgIGRldGFjaGVkLFxuICAgICAgYm9keVxuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGVDb250YWluZXIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBTdWdhckVsZW1lbnQuZnJvbVRhZygnZGl2Jyk7XG4gICAgICBzZXRBbGwoY29udGFpbmVyLCB7XG4gICAgICAgIHBvc2l0aW9uOiAnc3RhdGljJyxcbiAgICAgICAgaGVpZ2h0OiAnMCcsXG4gICAgICAgIHdpZHRoOiAnMCcsXG4gICAgICAgIHBhZGRpbmc6ICcwJyxcbiAgICAgICAgbWFyZ2luOiAnMCcsXG4gICAgICAgIGJvcmRlcjogJzAnXG4gICAgICB9KTtcbiAgICAgIGFwcGVuZCQxKGJvZHkkMSgpLCBjb250YWluZXIpO1xuICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgICB9O1xuICAgIGNvbnN0IGdldCA9IChlZGl0b3IsIGlzUmVzaXphYmxlKSA9PiB7XG4gICAgICByZXR1cm4gZWRpdG9yLmlubGluZSA/IFJlc2l6ZVdpcmUuYm9keShTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKSwgY3JlYXRlQ29udGFpbmVyKCksIGlzUmVzaXphYmxlKSA6IFJlc2l6ZVdpcmUub25seShTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0RG9jKCkpLCBpc1Jlc2l6YWJsZSk7XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmUgPSAoZWRpdG9yLCB3aXJlKSA9PiB7XG4gICAgICBpZiAoZWRpdG9yLmlubGluZSkge1xuICAgICAgICByZW1vdmUkNih3aXJlLnBhcmVudCgpKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaXNUYWJsZSA9IG5vZGUgPT4gaXNOb25OdWxsYWJsZShub2RlKSAmJiBub2RlLm5vZGVOYW1lID09PSAnVEFCTEUnO1xuICAgIGNvbnN0IGJhclJlc2l6ZXJQcmVmaXggPSAnYmFyLSc7XG4gICAgY29uc3QgaXNSZXNpemFibGUgPSBlbG0gPT4gZ2V0JGIoZWxtLCAnZGF0YS1tY2UtcmVzaXplJykgIT09ICdmYWxzZSc7XG4gICAgY29uc3Qgc3luY1BpeGVscyA9IHRhYmxlID0+IHtcbiAgICAgIGNvbnN0IHdhcmVob3VzZSA9IFdhcmVob3VzZS5mcm9tVGFibGUodGFibGUpO1xuICAgICAgaWYgKCFXYXJlaG91c2UuaGFzQ29sdW1ucyh3YXJlaG91c2UpKSB7XG4gICAgICAgIGVhY2gkMihjZWxscyQxKHRhYmxlKSwgY2VsbCA9PiB7XG4gICAgICAgICAgY29uc3QgY29tcHV0ZWRXaWR0aCA9IGdldCRhKGNlbGwsICd3aWR0aCcpO1xuICAgICAgICAgIHNldCQxKGNlbGwsICd3aWR0aCcsIGNvbXB1dGVkV2lkdGgpO1xuICAgICAgICAgIHJlbW92ZSQ3KGNlbGwsICd3aWR0aCcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IFRhYmxlUmVzaXplSGFuZGxlciA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBzZWxlY3Rpb25SbmcgPSB2YWx1ZSgpO1xuICAgICAgY29uc3QgdGFibGVSZXNpemUgPSB2YWx1ZSgpO1xuICAgICAgY29uc3QgcmVzaXplV2lyZSA9IHZhbHVlKCk7XG4gICAgICBsZXQgc3RhcnRXO1xuICAgICAgbGV0IHN0YXJ0UmF3VztcbiAgICAgIGNvbnN0IGxhenlTaXppbmcgPSB0YWJsZSA9PiBnZXQkNShlZGl0b3IsIHRhYmxlKTtcbiAgICAgIGNvbnN0IGxhenlSZXNpemluZ0JlaGF2aW91ciA9ICgpID0+IGlzUHJlc2VydmVUYWJsZUNvbHVtblJlc2l6aW5nKGVkaXRvcikgPyBwcmVzZXJ2ZVRhYmxlKCkgOiByZXNpemVUYWJsZSgpO1xuICAgICAgY29uc3QgZ2V0TnVtQ29sdW1ucyA9IHRhYmxlID0+IGdldEdyaWRTaXplKHRhYmxlKS5jb2x1bW5zO1xuICAgICAgY29uc3QgYWZ0ZXJDb3JuZXJSZXNpemUgPSAodGFibGUsIG9yaWdpbiwgd2lkdGgpID0+IHtcbiAgICAgICAgY29uc3QgaXNSaWdodEVkZ2VSZXNpemUgPSBlbmRzV2l0aChvcmlnaW4sICdlJyk7XG4gICAgICAgIGlmIChzdGFydFJhd1cgPT09ICcnKSB7XG4gICAgICAgICAgY29udmVydFRvUGVyY2VudFNpemUodGFibGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3aWR0aCAhPT0gc3RhcnRXICYmIHN0YXJ0UmF3VyAhPT0gJycpIHtcbiAgICAgICAgICBzZXQkMSh0YWJsZSwgJ3dpZHRoJywgc3RhcnRSYXdXKTtcbiAgICAgICAgICBjb25zdCByZXNpemluZyA9IGxhenlSZXNpemluZ0JlaGF2aW91cigpO1xuICAgICAgICAgIGNvbnN0IHRhYmxlU2l6ZSA9IGxhenlTaXppbmcodGFibGUpO1xuICAgICAgICAgIGNvbnN0IGNvbCA9IGlzUHJlc2VydmVUYWJsZUNvbHVtblJlc2l6aW5nKGVkaXRvcikgfHwgaXNSaWdodEVkZ2VSZXNpemUgPyBnZXROdW1Db2x1bW5zKHRhYmxlKSAtIDEgOiAwO1xuICAgICAgICAgIGFkanVzdFdpZHRoKHRhYmxlLCB3aWR0aCAtIHN0YXJ0VywgY29sLCByZXNpemluZywgdGFibGVTaXplKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1BlcmNlbnRhZ2UkMShzdGFydFJhd1cpKSB7XG4gICAgICAgICAgY29uc3QgcGVyY2VudFcgPSBwYXJzZUZsb2F0KHN0YXJ0UmF3Vy5yZXBsYWNlKCclJywgJycpKTtcbiAgICAgICAgICBjb25zdCB0YXJnZXRQZXJjZW50VyA9IHdpZHRoICogcGVyY2VudFcgLyBzdGFydFc7XG4gICAgICAgICAgc2V0JDEodGFibGUsICd3aWR0aCcsIHRhcmdldFBlcmNlbnRXICsgJyUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQaXhlbChzdGFydFJhd1cpKSB7XG4gICAgICAgICAgc3luY1BpeGVscyh0YWJsZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBkZXN0cm95ID0gKCkgPT4ge1xuICAgICAgICB0YWJsZVJlc2l6ZS5vbihzeiA9PiB7XG4gICAgICAgICAgc3ouZGVzdHJveSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVzaXplV2lyZS5vbih3ID0+IHtcbiAgICAgICAgICByZW1vdmUoZWRpdG9yLCB3KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLm9uKCdpbml0JywgKCkgPT4ge1xuICAgICAgICBjb25zdCByYXdXaXJlID0gZ2V0KGVkaXRvciwgaXNSZXNpemFibGUpO1xuICAgICAgICByZXNpemVXaXJlLnNldChyYXdXaXJlKTtcbiAgICAgICAgaWYgKGhhc1RhYmxlT2JqZWN0UmVzaXppbmcoZWRpdG9yKSAmJiBoYXNUYWJsZVJlc2l6ZUJhcnMoZWRpdG9yKSkge1xuICAgICAgICAgIGNvbnN0IHJlc2l6aW5nID0gbGF6eVJlc2l6aW5nQmVoYXZpb3VyKCk7XG4gICAgICAgICAgY29uc3Qgc3ogPSBUYWJsZVJlc2l6ZS5jcmVhdGUocmF3V2lyZSwgcmVzaXppbmcsIGxhenlTaXppbmcpO1xuICAgICAgICAgIHN6Lm9uKCk7XG4gICAgICAgICAgc3ouZXZlbnRzLnN0YXJ0RHJhZy5iaW5kKF9ldmVudCA9PiB7XG4gICAgICAgICAgICBzZWxlY3Rpb25Sbmcuc2V0KGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHN6LmV2ZW50cy5iZWZvcmVSZXNpemUuYmluZChldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCByYXdUYWJsZSA9IGV2ZW50LnRhYmxlLmRvbTtcbiAgICAgICAgICAgIGZpcmVPYmplY3RSZXNpemVTdGFydChlZGl0b3IsIHJhd1RhYmxlLCBnZXRQaXhlbFdpZHRoKHJhd1RhYmxlKSwgZ2V0UGl4ZWxIZWlnaHQocmF3VGFibGUpLCBiYXJSZXNpemVyUHJlZml4ICsgZXZlbnQudHlwZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc3ouZXZlbnRzLmFmdGVyUmVzaXplLmJpbmQoZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFibGUgPSBldmVudC50YWJsZTtcbiAgICAgICAgICAgIGNvbnN0IHJhd1RhYmxlID0gdGFibGUuZG9tO1xuICAgICAgICAgICAgcmVtb3ZlRGF0YVN0eWxlKHRhYmxlKTtcbiAgICAgICAgICAgIHNlbGVjdGlvblJuZy5vbihybmcgPT4ge1xuICAgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZmlyZU9iamVjdFJlc2l6ZWQoZWRpdG9yLCByYXdUYWJsZSwgZ2V0UGl4ZWxXaWR0aChyYXdUYWJsZSksIGdldFBpeGVsSGVpZ2h0KHJhd1RhYmxlKSwgYmFyUmVzaXplclByZWZpeCArIGV2ZW50LnR5cGUpO1xuICAgICAgICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLmFkZCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRhYmxlUmVzaXplLnNldChzeik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdPYmplY3RSZXNpemVTdGFydCcsIGUgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXRFbG0gPSBlLnRhcmdldDtcbiAgICAgICAgaWYgKGlzVGFibGUodGFyZ2V0RWxtKSkge1xuICAgICAgICAgIGNvbnN0IHRhYmxlID0gU3VnYXJFbGVtZW50LmZyb21Eb20odGFyZ2V0RWxtKTtcbiAgICAgICAgICBlYWNoJDIoZWRpdG9yLmRvbS5zZWxlY3QoJy5tY2UtY2xvbmVkcmVzaXphYmxlJyksIGNsb25lID0+IHtcbiAgICAgICAgICAgIGVkaXRvci5kb20uYWRkQ2xhc3MoY2xvbmUsICdtY2UtJyArIGdldFRhYmxlQ29sdW1uUmVzaXppbmdCZWhhdmlvdXIoZWRpdG9yKSArICctY29sdW1ucycpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICghaXNQaXhlbFNpemluZyh0YWJsZSkgJiYgaXNUYWJsZVBpeGVsc0ZvcmNlZChlZGl0b3IpKSB7XG4gICAgICAgICAgICBjb252ZXJ0VG9QaXhlbFNpemUodGFibGUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWlzUGVyY2VudFNpemluZyh0YWJsZSkgJiYgaXNUYWJsZVBlcmNlbnRhZ2VzRm9yY2VkKGVkaXRvcikpIHtcbiAgICAgICAgICAgIGNvbnZlcnRUb1BlcmNlbnRTaXplKHRhYmxlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzTm9uZVNpemluZyh0YWJsZSkgJiYgc3RhcnRzV2l0aChlLm9yaWdpbiwgYmFyUmVzaXplclByZWZpeCkpIHtcbiAgICAgICAgICAgIGNvbnZlcnRUb1BlcmNlbnRTaXplKHRhYmxlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RhcnRXID0gZS53aWR0aDtcbiAgICAgICAgICBzdGFydFJhd1cgPSBpc1RhYmxlUmVzcG9uc2l2ZUZvcmNlZChlZGl0b3IpID8gJycgOiBnZXRSYXdXaWR0aChlZGl0b3IsIHRhcmdldEVsbSkuZ2V0T3IoJycpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignT2JqZWN0UmVzaXplZCcsIGUgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXRFbG0gPSBlLnRhcmdldDtcbiAgICAgICAgaWYgKGlzVGFibGUodGFyZ2V0RWxtKSkge1xuICAgICAgICAgIGNvbnN0IHRhYmxlID0gU3VnYXJFbGVtZW50LmZyb21Eb20odGFyZ2V0RWxtKTtcbiAgICAgICAgICBjb25zdCBvcmlnaW4gPSBlLm9yaWdpbjtcbiAgICAgICAgICBpZiAoc3RhcnRzV2l0aChvcmlnaW4sICdjb3JuZXItJykpIHtcbiAgICAgICAgICAgIGFmdGVyQ29ybmVyUmVzaXplKHRhYmxlLCBvcmlnaW4sIGUud2lkdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZW1vdmVEYXRhU3R5bGUodGFibGUpO1xuICAgICAgICAgIGZpcmVUYWJsZU1vZGlmaWVkKGVkaXRvciwgdGFibGUuZG9tLCBzdHlsZU1vZGlmaWVkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ1N3aXRjaE1vZGUnLCAoKSA9PiB7XG4gICAgICAgIHRhYmxlUmVzaXplLm9uKHJlc2l6ZSA9PiB7XG4gICAgICAgICAgaWYgKGVkaXRvci5tb2RlLmlzUmVhZE9ubHkoKSkge1xuICAgICAgICAgICAgcmVzaXplLmhpZGVCYXJzKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc2l6ZS5zaG93QmFycygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignZHJhZ3N0YXJ0IGRyYWdlbmQnLCBlID0+IHtcbiAgICAgICAgdGFibGVSZXNpemUub24ocmVzaXplID0+IHtcbiAgICAgICAgICBpZiAoZS50eXBlID09PSAnZHJhZ3N0YXJ0Jykge1xuICAgICAgICAgICAgcmVzaXplLmhpZGVCYXJzKCk7XG4gICAgICAgICAgICByZXNpemUub2ZmKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc2l6ZS5vbigpO1xuICAgICAgICAgICAgcmVzaXplLnNob3dCYXJzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdyZW1vdmUnLCAoKSA9PiB7XG4gICAgICAgIGRlc3Ryb3koKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVmcmVzaCA9IHRhYmxlID0+IHtcbiAgICAgICAgdGFibGVSZXNpemUub24ocmVzaXplID0+IHJlc2l6ZS5yZWZyZXNoQmFycyhTdWdhckVsZW1lbnQuZnJvbURvbSh0YWJsZSkpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBoaWRlID0gKCkgPT4ge1xuICAgICAgICB0YWJsZVJlc2l6ZS5vbihyZXNpemUgPT4gcmVzaXplLmhpZGVCYXJzKCkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNob3cgPSAoKSA9PiB7XG4gICAgICAgIHRhYmxlUmVzaXplLm9uKHJlc2l6ZSA9PiByZXNpemUuc2hvd0JhcnMoKSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVmcmVzaCxcbiAgICAgICAgaGlkZSxcbiAgICAgICAgc2hvd1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0dXBUYWJsZSA9IGVkaXRvciA9PiB7XG4gICAgICByZWdpc3RlcihlZGl0b3IpO1xuICAgICAgY29uc3QgcmVzaXplSGFuZGxlciA9IFRhYmxlUmVzaXplSGFuZGxlcihlZGl0b3IpO1xuICAgICAgY29uc3QgY2VsbFNlbGVjdGlvbkhhbmRsZXIgPSBUYWJsZUNlbGxTZWxlY3Rpb25IYW5kbGVyKGVkaXRvciwgcmVzaXplSGFuZGxlcik7XG4gICAgICBjb25zdCBhY3Rpb25zID0gVGFibGVBY3Rpb25zKGVkaXRvciwgcmVzaXplSGFuZGxlciwgY2VsbFNlbGVjdGlvbkhhbmRsZXIpO1xuICAgICAgcmVnaXN0ZXJDb21tYW5kcyhlZGl0b3IsIGFjdGlvbnMpO1xuICAgICAgcmVnaXN0ZXJRdWVyeUNvbW1hbmRzKGVkaXRvciwgYWN0aW9ucyk7XG4gICAgICByZWdpc3RlckV2ZW50cyhlZGl0b3IsIGFjdGlvbnMpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0U2VsZWN0ZWRDZWxsczogY2VsbFNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWRDZWxscyxcbiAgICAgICAgY2xlYXJTZWxlY3RlZENlbGxzOiBjZWxsU2VsZWN0aW9uSGFuZGxlci5jbGVhclNlbGVjdGVkQ2VsbHNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IERvbU1vZGVsID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHRhYmxlID0gc2V0dXBUYWJsZShlZGl0b3IpO1xuICAgICAgcmV0dXJuIHsgdGFibGUgfTtcbiAgICB9O1xuICAgIHZhciBNb2RlbCA9ICgpID0+IHtcbiAgICAgIGdsb2JhbCQxLmFkZCgnZG9tJywgRG9tTW9kZWwpO1xuICAgIH07XG5cbiAgICBNb2RlbCgpO1xuXG59KSgpO1xuIiwiLy8gRXhwb3J0cyB0aGUgXCJhZHZsaXN0XCIgcGx1Z2luIGZvciB1c2FnZSB3aXRoIG1vZHVsZSBsb2FkZXJzXG4vLyBVc2FnZTpcbi8vICAgQ29tbW9uSlM6XG4vLyAgICAgcmVxdWlyZSgndGlueW1jZS9wbHVnaW5zL2Fkdmxpc3QnKVxuLy8gICBFUzIwMTU6XG4vLyAgICAgaW1wb3J0ICd0aW55bWNlL3BsdWdpbnMvYWR2bGlzdCdcbnJlcXVpcmUoJy4vcGx1Z2luLmpzJyk7IiwiLyoqXG4gKiBUaW55TUNFIHZlcnNpb24gNi43LjAgKDIwMjMtMDgtMzApXG4gKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgZ2xvYmFsJDEgPSB0aW55bWNlLnV0aWwuVG9vbHMucmVzb2x2ZSgndGlueW1jZS5QbHVnaW5NYW5hZ2VyJyk7XG5cbiAgICBjb25zdCBhcHBseUxpc3RGb3JtYXQgPSAoZWRpdG9yLCBsaXN0TmFtZSwgc3R5bGVWYWx1ZSkgPT4ge1xuICAgICAgY29uc3QgY21kID0gbGlzdE5hbWUgPT09ICdVTCcgPyAnSW5zZXJ0VW5vcmRlcmVkTGlzdCcgOiAnSW5zZXJ0T3JkZXJlZExpc3QnO1xuICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKGNtZCwgZmFsc2UsIHN0eWxlVmFsdWUgPT09IGZhbHNlID8gbnVsbCA6IHsgJ2xpc3Qtc3R5bGUtdHlwZSc6IHN0eWxlVmFsdWUgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlZ2lzdGVyJDIgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmFkZENvbW1hbmQoJ0FwcGx5VW5vcmRlcmVkTGlzdFN0eWxlJywgKHVpLCB2YWx1ZSkgPT4ge1xuICAgICAgICBhcHBseUxpc3RGb3JtYXQoZWRpdG9yLCAnVUwnLCB2YWx1ZVsnbGlzdC1zdHlsZS10eXBlJ10pO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3IuYWRkQ29tbWFuZCgnQXBwbHlPcmRlcmVkTGlzdFN0eWxlJywgKHVpLCB2YWx1ZSkgPT4ge1xuICAgICAgICBhcHBseUxpc3RGb3JtYXQoZWRpdG9yLCAnT0wnLCB2YWx1ZVsnbGlzdC1zdHlsZS10eXBlJ10pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvbiA9IG5hbWUgPT4gZWRpdG9yID0+IGVkaXRvci5vcHRpb25zLmdldChuYW1lKTtcbiAgICBjb25zdCByZWdpc3RlciQxID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyT3B0aW9uID0gZWRpdG9yLm9wdGlvbnMucmVnaXN0ZXI7XG4gICAgICByZWdpc3Rlck9wdGlvbignYWR2bGlzdF9udW1iZXJfc3R5bGVzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmdbXScsXG4gICAgICAgIGRlZmF1bHQ6ICdkZWZhdWx0LGxvd2VyLWFscGhhLGxvd2VyLWdyZWVrLGxvd2VyLXJvbWFuLHVwcGVyLWFscGhhLHVwcGVyLXJvbWFuJy5zcGxpdCgnLCcpXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdhZHZsaXN0X2J1bGxldF9zdHlsZXMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZ1tdJyxcbiAgICAgICAgZGVmYXVsdDogJ2RlZmF1bHQsY2lyY2xlLHNxdWFyZScuc3BsaXQoJywnKVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXROdW1iZXJTdHlsZXMgPSBvcHRpb24oJ2Fkdmxpc3RfbnVtYmVyX3N0eWxlcycpO1xuICAgIGNvbnN0IGdldEJ1bGxldFN0eWxlcyA9IG9wdGlvbignYWR2bGlzdF9idWxsZXRfc3R5bGVzJyk7XG5cbiAgICBjb25zdCBpc051bGxhYmxlID0gYSA9PiBhID09PSBudWxsIHx8IGEgPT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpc05vbk51bGxhYmxlID0gYSA9PiAhaXNOdWxsYWJsZShhKTtcblxuICAgIHZhciBnbG9iYWwgPSB0aW55bWNlLnV0aWwuVG9vbHMucmVzb2x2ZSgndGlueW1jZS51dGlsLlRvb2xzJyk7XG5cbiAgICBjbGFzcyBPcHRpb25hbCB7XG4gICAgICBjb25zdHJ1Y3Rvcih0YWcsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMudGFnID0gdGFnO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgICBzdGF0aWMgc29tZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IE9wdGlvbmFsKHRydWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHN0YXRpYyBub25lKCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc2luZ2xldG9uTm9uZTtcbiAgICAgIH1cbiAgICAgIGZvbGQob25Ob25lLCBvblNvbWUpIHtcbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgcmV0dXJuIG9uU29tZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb25Ob25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlzU29tZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnO1xuICAgICAgfVxuICAgICAgaXNOb25lKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudGFnO1xuICAgICAgfVxuICAgICAgbWFwKG1hcHBlcikge1xuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShtYXBwZXIodGhpcy52YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJpbmQoYmluZGVyKSB7XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgIHJldHVybiBiaW5kZXIodGhpcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXhpc3RzKHByZWRpY2F0ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgJiYgcHJlZGljYXRlKHRoaXMudmFsdWUpO1xuICAgICAgfVxuICAgICAgZm9yYWxsKHByZWRpY2F0ZSkge1xuICAgICAgICByZXR1cm4gIXRoaXMudGFnIHx8IHByZWRpY2F0ZSh0aGlzLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZpbHRlcihwcmVkaWNhdGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhZyB8fCBwcmVkaWNhdGUodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBnZXRPcihyZXBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzLnZhbHVlIDogcmVwbGFjZW1lbnQ7XG4gICAgICB9XG4gICAgICBvcihyZXBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzIDogcmVwbGFjZW1lbnQ7XG4gICAgICB9XG4gICAgICBnZXRPclRodW5rKHRodW5rKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMudmFsdWUgOiB0aHVuaygpO1xuICAgICAgfVxuICAgICAgb3JUaHVuayh0aHVuaykge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzIDogdGh1bmsoKTtcbiAgICAgIH1cbiAgICAgIGdldE9yRGllKG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhZykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlICE9PSBudWxsICYmIG1lc3NhZ2UgIT09IHZvaWQgMCA/IG1lc3NhZ2UgOiAnQ2FsbGVkIGdldE9yRGllIG9uIE5vbmUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RhdGljIGZyb20odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUodmFsdWUpID8gT3B0aW9uYWwuc29tZSh2YWx1ZSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICBnZXRPck51bGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMudmFsdWUgOiBudWxsO1xuICAgICAgfVxuICAgICAgZ2V0T3JVbmRlZmluZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgICAgfVxuICAgICAgZWFjaCh3b3JrZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgd29ya2VyKHRoaXMudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0b0FycmF5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyBbdGhpcy52YWx1ZV0gOiBbXTtcbiAgICAgIH1cbiAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyBgc29tZSgkeyB0aGlzLnZhbHVlIH0pYCA6ICdub25lKCknO1xuICAgICAgfVxuICAgIH1cbiAgICBPcHRpb25hbC5zaW5nbGV0b25Ob25lID0gbmV3IE9wdGlvbmFsKGZhbHNlKTtcblxuICAgIGNvbnN0IGZpbmRVbnRpbCA9ICh4cywgcHJlZCwgdW50aWwpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoeCk7XG4gICAgICAgIH0gZWxzZSBpZiAodW50aWwoeCwgaSkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNDdXN0b21MaXN0ID0gbGlzdCA9PiAvXFxidG94XFwtLy50ZXN0KGxpc3QuY2xhc3NOYW1lKTtcbiAgICBjb25zdCBpc0NoaWxkT2ZCb2R5ID0gKGVkaXRvciwgZWxtKSA9PiB7XG4gICAgICByZXR1cm4gZWRpdG9yLmRvbS5pc0NoaWxkT2YoZWxtLCBlZGl0b3IuZ2V0Qm9keSgpKTtcbiAgICB9O1xuICAgIGNvbnN0IG1hdGNoTm9kZU5hbWVzID0gcmVnZXggPT4gbm9kZSA9PiBpc05vbk51bGxhYmxlKG5vZGUpICYmIHJlZ2V4LnRlc3Qobm9kZS5ub2RlTmFtZSk7XG4gICAgY29uc3QgaXNMaXN0Tm9kZSA9IG1hdGNoTm9kZU5hbWVzKC9eKE9MfFVMfERMKSQvKTtcbiAgICBjb25zdCBpc1RhYmxlQ2VsbE5vZGUgPSBtYXRjaE5vZGVOYW1lcygvXihUSHxURCkkLyk7XG4gICAgY29uc3QgaW5MaXN0ID0gKGVkaXRvciwgcGFyZW50cywgbm9kZU5hbWUpID0+IGZpbmRVbnRpbChwYXJlbnRzLCBwYXJlbnQgPT4gaXNMaXN0Tm9kZShwYXJlbnQpICYmICFpc0N1c3RvbUxpc3QocGFyZW50KSwgaXNUYWJsZUNlbGxOb2RlKS5leGlzdHMobGlzdCA9PiBsaXN0Lm5vZGVOYW1lID09PSBub2RlTmFtZSAmJiBpc0NoaWxkT2ZCb2R5KGVkaXRvciwgbGlzdCkpO1xuICAgIGNvbnN0IGdldFNlbGVjdGVkU3R5bGVUeXBlID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGxpc3RFbG0gPSBlZGl0b3IuZG9tLmdldFBhcmVudChlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKSwgJ29sLHVsJyk7XG4gICAgICBjb25zdCBzdHlsZSA9IGVkaXRvci5kb20uZ2V0U3R5bGUobGlzdEVsbSwgJ2xpc3RTdHlsZVR5cGUnKTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKHN0eWxlKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzV2l0aGluTm9uRWRpdGFibGUgPSAoZWRpdG9yLCBlbGVtZW50KSA9PiBlbGVtZW50ICE9PSBudWxsICYmICFlZGl0b3IuZG9tLmlzRWRpdGFibGUoZWxlbWVudCk7XG4gICAgY29uc3QgaXNXaXRoaW5Ob25FZGl0YWJsZUxpc3QgPSAoZWRpdG9yLCBlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnRMaXN0ID0gZWRpdG9yLmRvbS5nZXRQYXJlbnQoZWxlbWVudCwgJ29sLHVsLGRsJyk7XG4gICAgICByZXR1cm4gaXNXaXRoaW5Ob25FZGl0YWJsZShlZGl0b3IsIHBhcmVudExpc3QpICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFZGl0YWJsZSgpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0Tm9kZUNoYW5nZUhhbmRsZXIgPSAoZWRpdG9yLCBub2RlQ2hhbmdlSGFuZGxlcikgPT4ge1xuICAgICAgY29uc3QgaW5pdGlhbE5vZGUgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKTtcbiAgICAgIG5vZGVDaGFuZ2VIYW5kbGVyKHtcbiAgICAgICAgcGFyZW50czogZWRpdG9yLmRvbS5nZXRQYXJlbnRzKGluaXRpYWxOb2RlKSxcbiAgICAgICAgZWxlbWVudDogaW5pdGlhbE5vZGVcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdOb2RlQ2hhbmdlJywgbm9kZUNoYW5nZUhhbmRsZXIpO1xuICAgICAgcmV0dXJuICgpID0+IGVkaXRvci5vZmYoJ05vZGVDaGFuZ2UnLCBub2RlQ2hhbmdlSGFuZGxlcik7XG4gICAgfTtcblxuICAgIGNvbnN0IHN0eWxlVmFsdWVUb1RleHQgPSBzdHlsZVZhbHVlID0+IHtcbiAgICAgIHJldHVybiBzdHlsZVZhbHVlLnJlcGxhY2UoL1xcLS9nLCAnICcpLnJlcGxhY2UoL1xcYlxcdy9nLCBjaHIgPT4ge1xuICAgICAgICByZXR1cm4gY2hyLnRvVXBwZXJDYXNlKCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZVN0eWxlVmFsdWUgPSBzdHlsZVZhbHVlID0+IGlzTnVsbGFibGUoc3R5bGVWYWx1ZSkgfHwgc3R5bGVWYWx1ZSA9PT0gJ2RlZmF1bHQnID8gJycgOiBzdHlsZVZhbHVlO1xuICAgIGNvbnN0IG1ha2VTZXR1cEhhbmRsZXIgPSAoZWRpdG9yLCBub2RlTmFtZSkgPT4gYXBpID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZUJ1dHRvblN0YXRlID0gKGVkaXRvciwgcGFyZW50cykgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCh0cnVlKTtcbiAgICAgICAgYXBpLnNldEFjdGl2ZShpbkxpc3QoZWRpdG9yLCBwYXJlbnRzLCBub2RlTmFtZSkpO1xuICAgICAgICBhcGkuc2V0RW5hYmxlZCghaXNXaXRoaW5Ob25FZGl0YWJsZUxpc3QoZWRpdG9yLCBlbGVtZW50KSAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRWRpdGFibGUoKSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgbm9kZUNoYW5nZUhhbmRsZXIgPSBlID0+IHVwZGF0ZUJ1dHRvblN0YXRlKGVkaXRvciwgZS5wYXJlbnRzKTtcbiAgICAgIHJldHVybiBzZXROb2RlQ2hhbmdlSGFuZGxlcihlZGl0b3IsIG5vZGVDaGFuZ2VIYW5kbGVyKTtcbiAgICB9O1xuICAgIGNvbnN0IGFkZFNwbGl0QnV0dG9uID0gKGVkaXRvciwgaWQsIHRvb2x0aXAsIGNtZCwgbm9kZU5hbWUsIHN0eWxlcykgPT4ge1xuICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZFNwbGl0QnV0dG9uKGlkLCB7XG4gICAgICAgIHRvb2x0aXAsXG4gICAgICAgIGljb246IG5vZGVOYW1lID09PSAnT0wnID8gJ29yZGVyZWQtbGlzdCcgOiAndW5vcmRlcmVkLWxpc3QnLFxuICAgICAgICBwcmVzZXRzOiAnbGlzdHByZXZpZXcnLFxuICAgICAgICBjb2x1bW5zOiAzLFxuICAgICAgICBmZXRjaDogY2FsbGJhY2sgPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW1zID0gZ2xvYmFsLm1hcChzdHlsZXMsIHN0eWxlVmFsdWUgPT4ge1xuICAgICAgICAgICAgY29uc3QgaWNvblN0eWxlID0gbm9kZU5hbWUgPT09ICdPTCcgPyAnbnVtJyA6ICdidWxsJztcbiAgICAgICAgICAgIGNvbnN0IGljb25OYW1lID0gc3R5bGVWYWx1ZSA9PT0gJ2Rpc2MnIHx8IHN0eWxlVmFsdWUgPT09ICdkZWNpbWFsJyA/ICdkZWZhdWx0JyA6IHN0eWxlVmFsdWU7XG4gICAgICAgICAgICBjb25zdCBpdGVtVmFsdWUgPSBub3JtYWxpemVTdHlsZVZhbHVlKHN0eWxlVmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgZGlzcGxheVRleHQgPSBzdHlsZVZhbHVlVG9UZXh0KHN0eWxlVmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Nob2ljZWl0ZW0nLFxuICAgICAgICAgICAgICB2YWx1ZTogaXRlbVZhbHVlLFxuICAgICAgICAgICAgICBpY29uOiAnbGlzdC0nICsgaWNvblN0eWxlICsgJy0nICsgaWNvbk5hbWUsXG4gICAgICAgICAgICAgIHRleHQ6IGRpc3BsYXlUZXh0XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNhbGxiYWNrKGl0ZW1zKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25BY3Rpb246ICgpID0+IGVkaXRvci5leGVjQ29tbWFuZChjbWQpLFxuICAgICAgICBvbkl0ZW1BY3Rpb246IChfc3BsaXRCdXR0b25BcGksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgYXBwbHlMaXN0Rm9ybWF0KGVkaXRvciwgbm9kZU5hbWUsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2VsZWN0OiB2YWx1ZSA9PiB7XG4gICAgICAgICAgY29uc3QgbGlzdFN0eWxlVHlwZSA9IGdldFNlbGVjdGVkU3R5bGVUeXBlKGVkaXRvcik7XG4gICAgICAgICAgcmV0dXJuIGxpc3RTdHlsZVR5cGUubWFwKGxpc3RTdHlsZSA9PiB2YWx1ZSA9PT0gbGlzdFN0eWxlKS5nZXRPcihmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2V0dXA6IG1ha2VTZXR1cEhhbmRsZXIoZWRpdG9yLCBub2RlTmFtZSlcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYWRkQnV0dG9uID0gKGVkaXRvciwgaWQsIHRvb2x0aXAsIGNtZCwgbm9kZU5hbWUsIHN0eWxlVmFsdWUpID0+IHtcbiAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRUb2dnbGVCdXR0b24oaWQsIHtcbiAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgdG9vbHRpcCxcbiAgICAgICAgaWNvbjogbm9kZU5hbWUgPT09ICdPTCcgPyAnb3JkZXJlZC1saXN0JyA6ICd1bm9yZGVyZWQtbGlzdCcsXG4gICAgICAgIG9uU2V0dXA6IG1ha2VTZXR1cEhhbmRsZXIoZWRpdG9yLCBub2RlTmFtZSksXG4gICAgICAgIG9uQWN0aW9uOiAoKSA9PiBlZGl0b3IucXVlcnlDb21tYW5kU3RhdGUoY21kKSB8fCBzdHlsZVZhbHVlID09PSAnJyA/IGVkaXRvci5leGVjQ29tbWFuZChjbWQpIDogYXBwbHlMaXN0Rm9ybWF0KGVkaXRvciwgbm9kZU5hbWUsIHN0eWxlVmFsdWUpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFkZENvbnRyb2wgPSAoZWRpdG9yLCBpZCwgdG9vbHRpcCwgY21kLCBub2RlTmFtZSwgc3R5bGVzKSA9PiB7XG4gICAgICBpZiAoc3R5bGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgYWRkU3BsaXRCdXR0b24oZWRpdG9yLCBpZCwgdG9vbHRpcCwgY21kLCBub2RlTmFtZSwgc3R5bGVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkZEJ1dHRvbihlZGl0b3IsIGlkLCB0b29sdGlwLCBjbWQsIG5vZGVOYW1lLCBub3JtYWxpemVTdHlsZVZhbHVlKHN0eWxlc1swXSkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXIgPSBlZGl0b3IgPT4ge1xuICAgICAgYWRkQ29udHJvbChlZGl0b3IsICdudW1saXN0JywgJ051bWJlcmVkIGxpc3QnLCAnSW5zZXJ0T3JkZXJlZExpc3QnLCAnT0wnLCBnZXROdW1iZXJTdHlsZXMoZWRpdG9yKSk7XG4gICAgICBhZGRDb250cm9sKGVkaXRvciwgJ2J1bGxpc3QnLCAnQnVsbGV0IGxpc3QnLCAnSW5zZXJ0VW5vcmRlcmVkTGlzdCcsICdVTCcsIGdldEJ1bGxldFN0eWxlcyhlZGl0b3IpKTtcbiAgICB9O1xuXG4gICAgdmFyIFBsdWdpbiA9ICgpID0+IHtcbiAgICAgIGdsb2JhbCQxLmFkZCgnYWR2bGlzdCcsIGVkaXRvciA9PiB7XG4gICAgICAgIGlmIChlZGl0b3IuaGFzUGx1Z2luKCdsaXN0cycpKSB7XG4gICAgICAgICAgcmVnaXN0ZXIkMShlZGl0b3IpO1xuICAgICAgICAgIHJlZ2lzdGVyKGVkaXRvcik7XG4gICAgICAgICAgcmVnaXN0ZXIkMihlZGl0b3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BsZWFzZSB1c2UgdGhlIExpc3RzIHBsdWdpbiB0b2dldGhlciB3aXRoIHRoZSBBZHZhbmNlZCBMaXN0IHBsdWdpbi4nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIFBsdWdpbigpO1xuXG59KSgpO1xuIiwiLy8gRXhwb3J0cyB0aGUgXCJjb2RlXCIgcGx1Z2luIGZvciB1c2FnZSB3aXRoIG1vZHVsZSBsb2FkZXJzXG4vLyBVc2FnZTpcbi8vICAgQ29tbW9uSlM6XG4vLyAgICAgcmVxdWlyZSgndGlueW1jZS9wbHVnaW5zL2NvZGUnKVxuLy8gICBFUzIwMTU6XG4vLyAgICAgaW1wb3J0ICd0aW55bWNlL3BsdWdpbnMvY29kZSdcbnJlcXVpcmUoJy4vcGx1Z2luLmpzJyk7IiwiLyoqXG4gKiBUaW55TUNFIHZlcnNpb24gNi43LjAgKDIwMjMtMDgtMzApXG4gKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgZ2xvYmFsID0gdGlueW1jZS51dGlsLlRvb2xzLnJlc29sdmUoJ3RpbnltY2UuUGx1Z2luTWFuYWdlcicpO1xuXG4gICAgY29uc3Qgc2V0Q29udGVudCA9IChlZGl0b3IsIGh0bWwpID0+IHtcbiAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgICAgZWRpdG9yLnNldENvbnRlbnQoaHRtbCk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Q3Vyc29yTG9jYXRpb24oKTtcbiAgICAgIGVkaXRvci5ub2RlQ2hhbmdlZCgpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Q29udGVudCA9IGVkaXRvciA9PiB7XG4gICAgICByZXR1cm4gZWRpdG9yLmdldENvbnRlbnQoeyBzb3VyY2VfdmlldzogdHJ1ZSB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb3BlbiA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBlZGl0b3JDb250ZW50ID0gZ2V0Q29udGVudChlZGl0b3IpO1xuICAgICAgZWRpdG9yLndpbmRvd01hbmFnZXIub3Blbih7XG4gICAgICAgIHRpdGxlOiAnU291cmNlIENvZGUnLFxuICAgICAgICBzaXplOiAnbGFyZ2UnLFxuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgdHlwZTogJ3BhbmVsJyxcbiAgICAgICAgICBpdGVtczogW3tcbiAgICAgICAgICAgICAgdHlwZTogJ3RleHRhcmVhJyxcbiAgICAgICAgICAgICAgbmFtZTogJ2NvZGUnXG4gICAgICAgICAgICB9XVxuICAgICAgICB9LFxuICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ2NhbmNlbCcsXG4gICAgICAgICAgICBuYW1lOiAnY2FuY2VsJyxcbiAgICAgICAgICAgIHRleHQ6ICdDYW5jZWwnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgIG5hbWU6ICdzYXZlJyxcbiAgICAgICAgICAgIHRleHQ6ICdTYXZlJyxcbiAgICAgICAgICAgIHByaW1hcnk6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGluaXRpYWxEYXRhOiB7IGNvZGU6IGVkaXRvckNvbnRlbnQgfSxcbiAgICAgICAgb25TdWJtaXQ6IGFwaSA9PiB7XG4gICAgICAgICAgc2V0Q29udGVudChlZGl0b3IsIGFwaS5nZXREYXRhKCkuY29kZSk7XG4gICAgICAgICAgYXBpLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZWdpc3RlciQxID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5hZGRDb21tYW5kKCdtY2VDb2RlRWRpdG9yJywgKCkgPT4ge1xuICAgICAgICBvcGVuKGVkaXRvcik7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVnaXN0ZXIgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgb25BY3Rpb24gPSAoKSA9PiBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZUNvZGVFZGl0b3InKTtcbiAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRCdXR0b24oJ2NvZGUnLCB7XG4gICAgICAgIGljb246ICdzb3VyY2Vjb2RlJyxcbiAgICAgICAgdG9vbHRpcDogJ1NvdXJjZSBjb2RlJyxcbiAgICAgICAgb25BY3Rpb25cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE1lbnVJdGVtKCdjb2RlJywge1xuICAgICAgICBpY29uOiAnc291cmNlY29kZScsXG4gICAgICAgIHRleHQ6ICdTb3VyY2UgY29kZScsXG4gICAgICAgIG9uQWN0aW9uXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdmFyIFBsdWdpbiA9ICgpID0+IHtcbiAgICAgIGdsb2JhbC5hZGQoJ2NvZGUnLCBlZGl0b3IgPT4ge1xuICAgICAgICByZWdpc3RlciQxKGVkaXRvcik7XG4gICAgICAgIHJlZ2lzdGVyKGVkaXRvcik7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBQbHVnaW4oKTtcblxufSkoKTtcbiIsIi8vIEV4cG9ydHMgdGhlIFwiZW1vdGljb25zXCIgcGx1Z2luIGZvciB1c2FnZSB3aXRoIG1vZHVsZSBsb2FkZXJzXG4vLyBVc2FnZTpcbi8vICAgQ29tbW9uSlM6XG4vLyAgICAgcmVxdWlyZSgndGlueW1jZS9wbHVnaW5zL2Vtb3RpY29ucycpXG4vLyAgIEVTMjAxNTpcbi8vICAgICBpbXBvcnQgJ3RpbnltY2UvcGx1Z2lucy9lbW90aWNvbnMnXG5yZXF1aXJlKCcuL3BsdWdpbi5qcycpOyIsIndpbmRvdy50aW55bWNlLlJlc291cmNlLmFkZChcInRpbnltY2UucGx1Z2lucy5lbW90aWNvbnNcIix7Z3Jpbm5pbmc6e2tleXdvcmRzOltcImZhY2VcIixcInNtaWxlXCIsXCJoYXBweVwiLFwiam95XCIsXCI6RFwiLFwiZ3JpblwiXSxjaGFyOlwi8J+YgFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGdyaW1hY2luZzp7a2V5d29yZHM6W1wiZmFjZVwiLFwiZ3JpbWFjZVwiLFwidGVldGhcIl0sY2hhcjpcIvCfmKxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxncmluOntrZXl3b3JkczpbXCJmYWNlXCIsXCJoYXBweVwiLFwic21pbGVcIixcImpveVwiLFwia2F3YWlpXCJdLGNoYXI6XCLwn5iBXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sam95OntrZXl3b3JkczpbXCJmYWNlXCIsXCJjcnlcIixcInRlYXJzXCIsXCJ3ZWVwXCIsXCJoYXBweVwiLFwiaGFwcHl0ZWFyc1wiLFwiaGFoYVwiXSxjaGFyOlwi8J+YglwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHJvZmw6e2tleXdvcmRzOltcImZhY2VcIixcInJvbGxpbmdcIixcImZsb29yXCIsXCJsYXVnaGluZ1wiLFwibG9sXCIsXCJoYWhhXCJdLGNoYXI6XCLwn6SjXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0scGFydHlpbmc6e2tleXdvcmRzOltcImZhY2VcIixcImNlbGVicmF0aW9uXCIsXCJ3b29ob29cIl0sY2hhcjpcIvCfpbNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxzbWlsZXk6e2tleXdvcmRzOltcImZhY2VcIixcImhhcHB5XCIsXCJqb3lcIixcImhhaGFcIixcIjpEXCIsXCI6KVwiLFwic21pbGVcIixcImZ1bm55XCJdLGNoYXI6XCLwn5iDXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sc21pbGU6e2tleXdvcmRzOltcImZhY2VcIixcImhhcHB5XCIsXCJqb3lcIixcImZ1bm55XCIsXCJoYWhhXCIsXCJsYXVnaFwiLFwibGlrZVwiLFwiOkRcIixcIjopXCJdLGNoYXI6XCLwn5iEXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sc3dlYXRfc21pbGU6e2tleXdvcmRzOltcImZhY2VcIixcImhvdFwiLFwiaGFwcHlcIixcImxhdWdoXCIsXCJzd2VhdFwiLFwic21pbGVcIixcInJlbGllZlwiXSxjaGFyOlwi8J+YhVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGxhdWdoaW5nOntrZXl3b3JkczpbXCJoYXBweVwiLFwiam95XCIsXCJsb2xcIixcInNhdGlzZmllZFwiLFwiaGFoYVwiLFwiZmFjZVwiLFwiZ2xhZFwiLFwiWERcIixcImxhdWdoXCJdLGNoYXI6XCLwn5iGXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0saW5ub2NlbnQ6e2tleXdvcmRzOltcImZhY2VcIixcImFuZ2VsXCIsXCJoZWF2ZW5cIixcImhhbG9cIl0sY2hhcjpcIvCfmIdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3aW5rOntrZXl3b3JkczpbXCJmYWNlXCIsXCJoYXBweVwiLFwibWlzY2hpZXZvdXNcIixcInNlY3JldFwiLFwiOylcIixcInNtaWxlXCIsXCJleWVcIl0sY2hhcjpcIvCfmIlcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxibHVzaDp7a2V5d29yZHM6W1wiZmFjZVwiLFwic21pbGVcIixcImhhcHB5XCIsXCJmbHVzaGVkXCIsXCJjcnVzaFwiLFwiZW1iYXJyYXNzZWRcIixcInNoeVwiLFwiam95XCJdLGNoYXI6XCLwn5iKXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sc2xpZ2h0bHlfc21pbGluZ19mYWNlOntrZXl3b3JkczpbXCJmYWNlXCIsXCJzbWlsZVwiXSxjaGFyOlwi8J+ZglwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHVwc2lkZV9kb3duX2ZhY2U6e2tleXdvcmRzOltcImZhY2VcIixcImZsaXBwZWRcIixcInNpbGx5XCIsXCJzbWlsZVwiXSxjaGFyOlwi8J+Zg1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHJlbGF4ZWQ6e2tleXdvcmRzOltcImZhY2VcIixcImJsdXNoXCIsXCJtYXNzYWdlXCIsXCJoYXBwaW5lc3NcIl0sY2hhcjpcIuKYuu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHl1bTp7a2V5d29yZHM6W1wiaGFwcHlcIixcImpveVwiLFwidG9uZ3VlXCIsXCJzbWlsZVwiLFwiZmFjZVwiLFwic2lsbHlcIixcInl1bW15XCIsXCJub21cIixcImRlbGljaW91c1wiLFwic2F2b3VyaW5nXCJdLGNoYXI6XCLwn5iLXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0scmVsaWV2ZWQ6e2tleXdvcmRzOltcImZhY2VcIixcInJlbGF4ZWRcIixcInBoZXdcIixcIm1hc3NhZ2VcIixcImhhcHBpbmVzc1wiXSxjaGFyOlwi8J+YjFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGhlYXJ0X2V5ZXM6e2tleXdvcmRzOltcImZhY2VcIixcImxvdmVcIixcImxpa2VcIixcImFmZmVjdGlvblwiLFwidmFsZW50aW5lc1wiLFwiaW5mYXR1YXRpb25cIixcImNydXNoXCIsXCJoZWFydFwiXSxjaGFyOlwi8J+YjVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHNtaWxpbmdfZmFjZV93aXRoX3RocmVlX2hlYXJ0czp7a2V5d29yZHM6W1wiZmFjZVwiLFwibG92ZVwiLFwibGlrZVwiLFwiYWZmZWN0aW9uXCIsXCJ2YWxlbnRpbmVzXCIsXCJpbmZhdHVhdGlvblwiLFwiY3J1c2hcIixcImhlYXJ0c1wiLFwiYWRvcmVcIl0sY2hhcjpcIvCfpbBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxraXNzaW5nX2hlYXJ0OntrZXl3b3JkczpbXCJmYWNlXCIsXCJsb3ZlXCIsXCJsaWtlXCIsXCJhZmZlY3Rpb25cIixcInZhbGVudGluZXNcIixcImluZmF0dWF0aW9uXCIsXCJraXNzXCJdLGNoYXI6XCLwn5iYXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sa2lzc2luZzp7a2V5d29yZHM6W1wibG92ZVwiLFwibGlrZVwiLFwiZmFjZVwiLFwiM1wiLFwidmFsZW50aW5lc1wiLFwiaW5mYXR1YXRpb25cIixcImtpc3NcIl0sY2hhcjpcIvCfmJdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxraXNzaW5nX3NtaWxpbmdfZXllczp7a2V5d29yZHM6W1wiZmFjZVwiLFwiYWZmZWN0aW9uXCIsXCJ2YWxlbnRpbmVzXCIsXCJpbmZhdHVhdGlvblwiLFwia2lzc1wiXSxjaGFyOlwi8J+YmVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGtpc3NpbmdfY2xvc2VkX2V5ZXM6e2tleXdvcmRzOltcImZhY2VcIixcImxvdmVcIixcImxpa2VcIixcImFmZmVjdGlvblwiLFwidmFsZW50aW5lc1wiLFwiaW5mYXR1YXRpb25cIixcImtpc3NcIl0sY2hhcjpcIvCfmJpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxzdHVja19vdXRfdG9uZ3VlX3dpbmtpbmdfZXllOntrZXl3b3JkczpbXCJmYWNlXCIsXCJwcmFua1wiLFwiY2hpbGRpc2hcIixcInBsYXlmdWxcIixcIm1pc2NoaWV2b3VzXCIsXCJzbWlsZVwiLFwid2lua1wiLFwidG9uZ3VlXCJdLGNoYXI6XCLwn5icXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0semFueTp7a2V5d29yZHM6W1wiZmFjZVwiLFwiZ29vZnlcIixcImNyYXp5XCJdLGNoYXI6XCLwn6SqXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0scmFpc2VkX2V5ZWJyb3c6e2tleXdvcmRzOltcImZhY2VcIixcImRpc3RydXN0XCIsXCJzY2VwdGljaXNtXCIsXCJkaXNhcHByb3ZhbFwiLFwiZGlzYmVsaWVmXCIsXCJzdXJwcmlzZVwiXSxjaGFyOlwi8J+kqFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1vbm9jbGU6e2tleXdvcmRzOltcImZhY2VcIixcInN0dWZmeVwiLFwid2VhbHRoeVwiXSxjaGFyOlwi8J+nkFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHN0dWNrX291dF90b25ndWVfY2xvc2VkX2V5ZXM6e2tleXdvcmRzOltcImZhY2VcIixcInByYW5rXCIsXCJwbGF5ZnVsXCIsXCJtaXNjaGlldm91c1wiLFwic21pbGVcIixcInRvbmd1ZVwiXSxjaGFyOlwi8J+YnVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHN0dWNrX291dF90b25ndWU6e2tleXdvcmRzOltcImZhY2VcIixcInByYW5rXCIsXCJjaGlsZGlzaFwiLFwicGxheWZ1bFwiLFwibWlzY2hpZXZvdXNcIixcInNtaWxlXCIsXCJ0b25ndWVcIl0sY2hhcjpcIvCfmJtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtb25leV9tb3V0aF9mYWNlOntrZXl3b3JkczpbXCJmYWNlXCIsXCJyaWNoXCIsXCJkb2xsYXJcIixcIm1vbmV5XCJdLGNoYXI6XCLwn6SRXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbmVyZF9mYWNlOntrZXl3b3JkczpbXCJmYWNlXCIsXCJuZXJkeVwiLFwiZ2Vla1wiLFwiZG9ya1wiXSxjaGFyOlwi8J+kk1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHN1bmdsYXNzZXM6e2tleXdvcmRzOltcImZhY2VcIixcImNvb2xcIixcInNtaWxlXCIsXCJzdW1tZXJcIixcImJlYWNoXCIsXCJzdW5nbGFzc1wiXSxjaGFyOlwi8J+YjlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHN0YXJfc3RydWNrOntrZXl3b3JkczpbXCJmYWNlXCIsXCJzbWlsZVwiLFwic3RhcnJ5XCIsXCJleWVzXCIsXCJncmlubmluZ1wiXSxjaGFyOlwi8J+kqVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGNsb3duX2ZhY2U6e2tleXdvcmRzOltcImZhY2VcIl0sY2hhcjpcIvCfpKFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxjb3dib3lfaGF0X2ZhY2U6e2tleXdvcmRzOltcImZhY2VcIixcImNvd2dpcmxcIixcImhhdFwiXSxjaGFyOlwi8J+koFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGh1Z3M6e2tleXdvcmRzOltcImZhY2VcIixcInNtaWxlXCIsXCJodWdcIl0sY2hhcjpcIvCfpJdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxzbWlyazp7a2V5d29yZHM6W1wiZmFjZVwiLFwic21pbGVcIixcIm1lYW5cIixcInByYW5rXCIsXCJzbXVnXCIsXCJzYXJjYXNtXCJdLGNoYXI6XCLwn5iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbm9fbW91dGg6e2tleXdvcmRzOltcImZhY2VcIixcImhlbGxva2l0dHlcIl0sY2hhcjpcIvCfmLZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxuZXV0cmFsX2ZhY2U6e2tleXdvcmRzOltcImluZGlmZmVyZW5jZVwiLFwibWVoXCIsXCI6fFwiLFwibmV1dHJhbFwiXSxjaGFyOlwi8J+YkFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGV4cHJlc3Npb25sZXNzOntrZXl3b3JkczpbXCJmYWNlXCIsXCJpbmRpZmZlcmVudFwiLFwiLV8tXCIsXCJtZWhcIixcImRlYWRwYW5cIl0sY2hhcjpcIvCfmJFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSx1bmFtdXNlZDp7a2V5d29yZHM6W1wiaW5kaWZmZXJlbmNlXCIsXCJib3JlZFwiLFwic3RyYWlnaHQgZmFjZVwiLFwic2VyaW91c1wiLFwic2FyY2FzbVwiLFwidW5pbXByZXNzZWRcIixcInNrZXB0aWNhbFwiLFwiZHViaW91c1wiLFwic2lkZV9leWVcIl0sY2hhcjpcIvCfmJJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxyb2xsX2V5ZXM6e2tleXdvcmRzOltcImZhY2VcIixcImV5ZXJvbGxcIixcImZydXN0cmF0ZWRcIl0sY2hhcjpcIvCfmYRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSx0aGlua2luZzp7a2V5d29yZHM6W1wiZmFjZVwiLFwiaG1tbVwiLFwidGhpbmtcIixcImNvbnNpZGVyXCJdLGNoYXI6XCLwn6SUXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbHlpbmdfZmFjZTp7a2V5d29yZHM6W1wiZmFjZVwiLFwibGllXCIsXCJwaW5vY2NoaW9cIl0sY2hhcjpcIvCfpKVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxoYW5kX292ZXJfbW91dGg6e2tleXdvcmRzOltcImZhY2VcIixcIndob29wc1wiLFwic2hvY2tcIixcInN1cnByaXNlXCJdLGNoYXI6XCLwn6StXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sc2h1c2hpbmc6e2tleXdvcmRzOltcImZhY2VcIixcInF1aWV0XCIsXCJzaGhoXCJdLGNoYXI6XCLwn6SrXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sc3ltYm9sc19vdmVyX21vdXRoOntrZXl3b3JkczpbXCJmYWNlXCIsXCJzd2VhcmluZ1wiLFwiY3Vyc2luZ1wiLFwiY3Vzc2luZ1wiLFwicHJvZmFuaXR5XCIsXCJleHBsZXRpdmVcIl0sY2hhcjpcIvCfpKxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxleHBsb2RpbmdfaGVhZDp7a2V5d29yZHM6W1wiZmFjZVwiLFwic2hvY2tlZFwiLFwibWluZFwiLFwiYmxvd25cIl0sY2hhcjpcIvCfpK9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmbHVzaGVkOntrZXl3b3JkczpbXCJmYWNlXCIsXCJibHVzaFwiLFwic2h5XCIsXCJmbGF0dGVyZWRcIl0sY2hhcjpcIvCfmLNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxkaXNhcHBvaW50ZWQ6e2tleXdvcmRzOltcImZhY2VcIixcInNhZFwiLFwidXBzZXRcIixcImRlcHJlc3NlZFwiLFwiOihcIl0sY2hhcjpcIvCfmJ5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3b3JyaWVkOntrZXl3b3JkczpbXCJmYWNlXCIsXCJjb25jZXJuXCIsXCJuZXJ2b3VzXCIsXCI6KFwiXSxjaGFyOlwi8J+Yn1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGFuZ3J5OntrZXl3b3JkczpbXCJtYWRcIixcImZhY2VcIixcImFubm95ZWRcIixcImZydXN0cmF0ZWRcIl0sY2hhcjpcIvCfmKBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxyYWdlOntrZXl3b3JkczpbXCJhbmdyeVwiLFwibWFkXCIsXCJoYXRlXCIsXCJkZXNwaXNlXCJdLGNoYXI6XCLwn5ihXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0scGVuc2l2ZTp7a2V5d29yZHM6W1wiZmFjZVwiLFwic2FkXCIsXCJkZXByZXNzZWRcIixcInVwc2V0XCJdLGNoYXI6XCLwn5iUXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sY29uZnVzZWQ6e2tleXdvcmRzOltcImZhY2VcIixcImluZGlmZmVyZW5jZVwiLFwiaHVoXCIsXCJ3ZWlyZFwiLFwiaG1tbVwiLFwiOi9cIl0sY2hhcjpcIvCfmJVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxzbGlnaHRseV9mcm93bmluZ19mYWNlOntrZXl3b3JkczpbXCJmYWNlXCIsXCJmcm93bmluZ1wiLFwiZGlzYXBwb2ludGVkXCIsXCJzYWRcIixcInVwc2V0XCJdLGNoYXI6XCLwn5mBXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZnJvd25pbmdfZmFjZTp7a2V5d29yZHM6W1wiZmFjZVwiLFwic2FkXCIsXCJ1cHNldFwiLFwiZnJvd25cIl0sY2hhcjpcIuKYuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHBlcnNldmVyZTp7a2V5d29yZHM6W1wiZmFjZVwiLFwic2lja1wiLFwibm9cIixcInVwc2V0XCIsXCJvb3BzXCJdLGNoYXI6XCLwn5ijXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sY29uZm91bmRlZDp7a2V5d29yZHM6W1wiZmFjZVwiLFwiY29uZnVzZWRcIixcInNpY2tcIixcInVud2VsbFwiLFwib29wc1wiLFwiOlNcIl0sY2hhcjpcIvCfmJZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSx0aXJlZF9mYWNlOntrZXl3b3JkczpbXCJzaWNrXCIsXCJ3aGluZVwiLFwidXBzZXRcIixcImZydXN0cmF0ZWRcIl0sY2hhcjpcIvCfmKtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3ZWFyeTp7a2V5d29yZHM6W1wiZmFjZVwiLFwidGlyZWRcIixcInNsZWVweVwiLFwic2FkXCIsXCJmcnVzdHJhdGVkXCIsXCJ1cHNldFwiXSxjaGFyOlwi8J+YqVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHBsZWFkaW5nOntrZXl3b3JkczpbXCJmYWNlXCIsXCJiZWdnaW5nXCIsXCJtZXJjeVwiXSxjaGFyOlwi8J+lulwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHRyaXVtcGg6e2tleXdvcmRzOltcImZhY2VcIixcImdhc1wiLFwicGhld1wiLFwicHJvdWRcIixcInByaWRlXCJdLGNoYXI6XCLwn5ikXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sb3Blbl9tb3V0aDp7a2V5d29yZHM6W1wiZmFjZVwiLFwic3VycHJpc2VcIixcImltcHJlc3NlZFwiLFwid293XCIsXCJ3aG9hXCIsXCI6T1wiXSxjaGFyOlwi8J+YrlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHNjcmVhbTp7a2V5d29yZHM6W1wiZmFjZVwiLFwibXVuY2hcIixcInNjYXJlZFwiLFwib21nXCJdLGNoYXI6XCLwn5ixXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmVhcmZ1bDp7a2V5d29yZHM6W1wiZmFjZVwiLFwic2NhcmVkXCIsXCJ0ZXJyaWZpZWRcIixcIm5lcnZvdXNcIixcIm9vcHNcIixcImh1aFwiXSxjaGFyOlwi8J+YqFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGNvbGRfc3dlYXQ6e2tleXdvcmRzOltcImZhY2VcIixcIm5lcnZvdXNcIixcInN3ZWF0XCJdLGNoYXI6XCLwn5iwXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0saHVzaGVkOntrZXl3b3JkczpbXCJmYWNlXCIsXCJ3b29cIixcInNoaFwiXSxjaGFyOlwi8J+Yr1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGZyb3duaW5nOntrZXl3b3JkczpbXCJmYWNlXCIsXCJhd1wiLFwid2hhdFwiXSxjaGFyOlwi8J+YplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGFuZ3Vpc2hlZDp7a2V5d29yZHM6W1wiZmFjZVwiLFwic3R1bm5lZFwiLFwibmVydm91c1wiXSxjaGFyOlwi8J+Yp1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGNyeTp7a2V5d29yZHM6W1wiZmFjZVwiLFwidGVhcnNcIixcInNhZFwiLFwiZGVwcmVzc2VkXCIsXCJ1cHNldFwiLFwiOicoXCJdLGNoYXI6XCLwn5iiXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZGlzYXBwb2ludGVkX3JlbGlldmVkOntrZXl3b3JkczpbXCJmYWNlXCIsXCJwaGV3XCIsXCJzd2VhdFwiLFwibmVydm91c1wiXSxjaGFyOlwi8J+YpVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGRyb29saW5nX2ZhY2U6e2tleXdvcmRzOltcImZhY2VcIl0sY2hhcjpcIvCfpKRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxzbGVlcHk6e2tleXdvcmRzOltcImZhY2VcIixcInRpcmVkXCIsXCJyZXN0XCIsXCJuYXBcIl0sY2hhcjpcIvCfmKpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxzd2VhdDp7a2V5d29yZHM6W1wiZmFjZVwiLFwiaG90XCIsXCJzYWRcIixcInRpcmVkXCIsXCJleGVyY2lzZVwiXSxjaGFyOlwi8J+Yk1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGhvdDp7a2V5d29yZHM6W1wiZmFjZVwiLFwiZmV2ZXJpc2hcIixcImhlYXRcIixcInJlZFwiLFwic3dlYXRpbmdcIl0sY2hhcjpcIvCfpbVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxjb2xkOntrZXl3b3JkczpbXCJmYWNlXCIsXCJibHVlXCIsXCJmcmVlemluZ1wiLFwiZnJvemVuXCIsXCJmcm9zdGJpdGVcIixcImljaWNsZXNcIl0sY2hhcjpcIvCfpbZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxzb2I6e2tleXdvcmRzOltcImZhY2VcIixcImNyeVwiLFwidGVhcnNcIixcInNhZFwiLFwidXBzZXRcIixcImRlcHJlc3NlZFwiXSxjaGFyOlwi8J+YrVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGRpenp5X2ZhY2U6e2tleXdvcmRzOltcInNwZW50XCIsXCJ1bmNvbnNjaW91c1wiLFwieG94XCIsXCJkaXp6eVwiXSxjaGFyOlwi8J+YtVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGFzdG9uaXNoZWQ6e2tleXdvcmRzOltcImZhY2VcIixcInhveFwiLFwic3VycHJpc2VkXCIsXCJwb2lzb25lZFwiXSxjaGFyOlwi8J+YslwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHppcHBlcl9tb3V0aF9mYWNlOntrZXl3b3JkczpbXCJmYWNlXCIsXCJzZWFsZWRcIixcInppcHBlclwiLFwic2VjcmV0XCJdLGNoYXI6XCLwn6SQXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbmF1c2VhdGVkX2ZhY2U6e2tleXdvcmRzOltcImZhY2VcIixcInZvbWl0XCIsXCJncm9zc1wiLFwiZ3JlZW5cIixcInNpY2tcIixcInRocm93IHVwXCIsXCJpbGxcIl0sY2hhcjpcIvCfpKJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxzbmVlemluZ19mYWNlOntrZXl3b3JkczpbXCJmYWNlXCIsXCJnZXN1bmRoZWl0XCIsXCJzbmVlemVcIixcInNpY2tcIixcImFsbGVyZ3lcIl0sY2hhcjpcIvCfpKdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSx2b21pdGluZzp7a2V5d29yZHM6W1wiZmFjZVwiLFwic2lja1wiXSxjaGFyOlwi8J+krlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hc2s6e2tleXdvcmRzOltcImZhY2VcIixcInNpY2tcIixcImlsbFwiLFwiZGlzZWFzZVwiXSxjaGFyOlwi8J+Yt1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGZhY2Vfd2l0aF90aGVybW9tZXRlcjp7a2V5d29yZHM6W1wic2lja1wiLFwidGVtcGVyYXR1cmVcIixcInRoZXJtb21ldGVyXCIsXCJjb2xkXCIsXCJmZXZlclwiXSxjaGFyOlwi8J+kklwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGZhY2Vfd2l0aF9oZWFkX2JhbmRhZ2U6e2tleXdvcmRzOltcImluanVyZWRcIixcImNsdW1zeVwiLFwiYmFuZGFnZVwiLFwiaHVydFwiXSxjaGFyOlwi8J+klVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvb3p5OntrZXl3b3JkczpbXCJmYWNlXCIsXCJkaXp6eVwiLFwiaW50b3hpY2F0ZWRcIixcInRpcHN5XCIsXCJ3YXZ5XCJdLGNoYXI6XCLwn6W0XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sc2xlZXBpbmc6e2tleXdvcmRzOltcImZhY2VcIixcInRpcmVkXCIsXCJzbGVlcHlcIixcIm5pZ2h0XCIsXCJ6enpcIl0sY2hhcjpcIvCfmLRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSx6eno6e2tleXdvcmRzOltcInNsZWVweVwiLFwidGlyZWRcIixcImRyZWFtXCJdLGNoYXI6XCLwn5KkXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0scG9vcDp7a2V5d29yZHM6W1wiaGFua2V5XCIsXCJzaGl0ZmFjZVwiLFwiZmFpbFwiLFwidHVyZFwiLFwic2hpdFwiXSxjaGFyOlwi8J+SqVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHNtaWxpbmdfaW1wOntrZXl3b3JkczpbXCJkZXZpbFwiLFwiaG9ybnNcIl0sY2hhcjpcIvCfmIhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxpbXA6e2tleXdvcmRzOltcImRldmlsXCIsXCJhbmdyeVwiLFwiaG9ybnNcIl0sY2hhcjpcIvCfkb9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxqYXBhbmVzZV9vZ3JlOntrZXl3b3JkczpbXCJtb25zdGVyXCIsXCJyZWRcIixcIm1hc2tcIixcImhhbGxvd2VlblwiLFwic2NhcnlcIixcImNyZWVweVwiLFwiZGV2aWxcIixcImRlbW9uXCIsXCJqYXBhbmVzZVwiLFwib2dyZVwiXSxjaGFyOlwi8J+RuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGphcGFuZXNlX2dvYmxpbjp7a2V5d29yZHM6W1wicmVkXCIsXCJldmlsXCIsXCJtYXNrXCIsXCJtb25zdGVyXCIsXCJzY2FyeVwiLFwiY3JlZXB5XCIsXCJqYXBhbmVzZVwiLFwiZ29ibGluXCJdLGNoYXI6XCLwn5G6XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sc2t1bGw6e2tleXdvcmRzOltcImRlYWRcIixcInNrZWxldG9uXCIsXCJjcmVlcHlcIixcImRlYXRoXCJdLGNoYXI6XCLwn5KAXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZ2hvc3Q6e2tleXdvcmRzOltcImhhbGxvd2VlblwiLFwic3Bvb2t5XCIsXCJzY2FyeVwiXSxjaGFyOlwi8J+Ru1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGFsaWVuOntrZXl3b3JkczpbXCJVRk9cIixcInBhdWxcIixcIndlaXJkXCIsXCJvdXRlcl9zcGFjZVwiXSxjaGFyOlwi8J+RvVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHJvYm90OntrZXl3b3JkczpbXCJjb21wdXRlclwiLFwibWFjaGluZVwiLFwiYm90XCJdLGNoYXI6XCLwn6SWXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sc21pbGV5X2NhdDp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJjYXRzXCIsXCJoYXBweVwiLFwic21pbGVcIl0sY2hhcjpcIvCfmLpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxzbWlsZV9jYXQ6e2tleXdvcmRzOltcImFuaW1hbFwiLFwiY2F0c1wiLFwic21pbGVcIl0sY2hhcjpcIvCfmLhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxqb3lfY2F0OntrZXl3b3JkczpbXCJhbmltYWxcIixcImNhdHNcIixcImhhaGFcIixcImhhcHB5XCIsXCJ0ZWFyc1wiXSxjaGFyOlwi8J+YuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGhlYXJ0X2V5ZXNfY2F0OntrZXl3b3JkczpbXCJhbmltYWxcIixcImxvdmVcIixcImxpa2VcIixcImFmZmVjdGlvblwiLFwiY2F0c1wiLFwidmFsZW50aW5lc1wiLFwiaGVhcnRcIl0sY2hhcjpcIvCfmLtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxzbWlya19jYXQ6e2tleXdvcmRzOltcImFuaW1hbFwiLFwiY2F0c1wiLFwic21pcmtcIl0sY2hhcjpcIvCfmLxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxraXNzaW5nX2NhdDp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJjYXRzXCIsXCJraXNzXCJdLGNoYXI6XCLwn5i9XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sc2NyZWFtX2NhdDp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJjYXRzXCIsXCJtdW5jaFwiLFwic2NhcmVkXCIsXCJzY3JlYW1cIl0sY2hhcjpcIvCfmYBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxjcnlpbmdfY2F0X2ZhY2U6e2tleXdvcmRzOltcImFuaW1hbFwiLFwidGVhcnNcIixcIndlZXBcIixcInNhZFwiLFwiY2F0c1wiLFwidXBzZXRcIixcImNyeVwiXSxjaGFyOlwi8J+Yv1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHBvdXRpbmdfY2F0OntrZXl3b3JkczpbXCJhbmltYWxcIixcImNhdHNcIl0sY2hhcjpcIvCfmL5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxwYWxtc191cDp7a2V5d29yZHM6W1wiaGFuZHNcIixcImdlc3R1cmVcIixcImN1cHBlZFwiLFwicHJheWVyXCJdLGNoYXI6XCLwn6SyXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxyYWlzZWRfaGFuZHM6e2tleXdvcmRzOltcImdlc3R1cmVcIixcImhvb3JheVwiLFwieWVhXCIsXCJjZWxlYnJhdGlvblwiLFwiaGFuZHNcIl0sY2hhcjpcIvCfmYxcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGNsYXA6e2tleXdvcmRzOltcImhhbmRzXCIsXCJwcmFpc2VcIixcImFwcGxhdXNlXCIsXCJjb25ncmF0c1wiLFwieWF5XCJdLGNoYXI6XCLwn5GPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3YXZlOntrZXl3b3JkczpbXCJoYW5kc1wiLFwiZ2VzdHVyZVwiLFwiZ29vZGJ5ZVwiLFwic29sb25nXCIsXCJmYXJld2VsbFwiLFwiaGVsbG9cIixcImhpXCIsXCJwYWxtXCJdLGNoYXI6XCLwn5GLXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxjYWxsX21lX2hhbmQ6e2tleXdvcmRzOltcImhhbmRzXCIsXCJnZXN0dXJlXCJdLGNoYXI6XCLwn6SZXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxcIisxXCI6e2tleXdvcmRzOltcInRodW1ic3VwXCIsXCJ5ZXNcIixcImF3ZXNvbWVcIixcImdvb2RcIixcImFncmVlXCIsXCJhY2NlcHRcIixcImNvb2xcIixcImhhbmRcIixcImxpa2VcIl0sY2hhcjpcIvCfkY1cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LFwiLTFcIjp7a2V5d29yZHM6W1widGh1bWJzZG93blwiLFwibm9cIixcImRpc2xpa2VcIixcImhhbmRcIl0sY2hhcjpcIvCfkY5cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGZhY2VwdW5jaDp7a2V5d29yZHM6W1wiYW5ncnlcIixcInZpb2xlbmNlXCIsXCJmaXN0XCIsXCJoaXRcIixcImF0dGFja1wiLFwiaGFuZFwiXSxjaGFyOlwi8J+RilwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmlzdDp7a2V5d29yZHM6W1wiZmluZ2Vyc1wiLFwiaGFuZFwiLFwiZ3Jhc3BcIl0sY2hhcjpcIuKcilwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmlzdF9sZWZ0OntrZXl3b3JkczpbXCJoYW5kXCIsXCJmaXN0YnVtcFwiXSxjaGFyOlwi8J+km1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmlzdF9yaWdodDp7a2V5d29yZHM6W1wiaGFuZFwiLFwiZmlzdGJ1bXBcIl0sY2hhcjpcIvCfpJxcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHY6e2tleXdvcmRzOltcImZpbmdlcnNcIixcIm9oeWVhaFwiLFwiaGFuZFwiLFwicGVhY2VcIixcInZpY3RvcnlcIixcInR3b1wiXSxjaGFyOlwi4pyMXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxva19oYW5kOntrZXl3b3JkczpbXCJmaW5nZXJzXCIsXCJsaW1ic1wiLFwicGVyZmVjdFwiLFwib2tcIixcIm9rYXlcIl0sY2hhcjpcIvCfkYxcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHJhaXNlZF9oYW5kOntrZXl3b3JkczpbXCJmaW5nZXJzXCIsXCJzdG9wXCIsXCJoaWdoZml2ZVwiLFwicGFsbVwiLFwiYmFuXCJdLGNoYXI6XCLinItcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHJhaXNlZF9iYWNrX29mX2hhbmQ6e2tleXdvcmRzOltcImZpbmdlcnNcIixcInJhaXNlZFwiLFwiYmFja2hhbmRcIl0sY2hhcjpcIvCfpJpcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG9wZW5faGFuZHM6e2tleXdvcmRzOltcImZpbmdlcnNcIixcImJ1dHRlcmZseVwiLFwiaGFuZHNcIixcIm9wZW5cIl0sY2hhcjpcIvCfkZBcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG11c2NsZTp7a2V5d29yZHM6W1wiYXJtXCIsXCJmbGV4XCIsXCJoYW5kXCIsXCJzdW1tZXJcIixcInN0cm9uZ1wiLFwiYmljZXBzXCJdLGNoYXI6XCLwn5KqXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxwcmF5OntrZXl3b3JkczpbXCJwbGVhc2VcIixcImhvcGVcIixcIndpc2hcIixcIm5hbWFzdGVcIixcImhpZ2hmaXZlXCJdLGNoYXI6XCLwn5mPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmb290OntrZXl3b3JkczpbXCJraWNrXCIsXCJzdG9tcFwiXSxjaGFyOlwi8J+mtlwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbGVnOntrZXl3b3JkczpbXCJraWNrXCIsXCJsaW1iXCJdLGNoYXI6XCLwn6a1XCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxoYW5kc2hha2U6e2tleXdvcmRzOltcImFncmVlbWVudFwiLFwic2hha2VcIl0sY2hhcjpcIvCfpJ1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxwb2ludF91cDp7a2V5d29yZHM6W1wiaGFuZFwiLFwiZmluZ2Vyc1wiLFwiZGlyZWN0aW9uXCIsXCJ1cFwiXSxjaGFyOlwi4pidXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxwb2ludF91cF8yOntrZXl3b3JkczpbXCJmaW5nZXJzXCIsXCJoYW5kXCIsXCJkaXJlY3Rpb25cIixcInVwXCJdLGNoYXI6XCLwn5GGXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxwb2ludF9kb3duOntrZXl3b3JkczpbXCJmaW5nZXJzXCIsXCJoYW5kXCIsXCJkaXJlY3Rpb25cIixcImRvd25cIl0sY2hhcjpcIvCfkYdcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHBvaW50X2xlZnQ6e2tleXdvcmRzOltcImRpcmVjdGlvblwiLFwiZmluZ2Vyc1wiLFwiaGFuZFwiLFwibGVmdFwiXSxjaGFyOlwi8J+RiFwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0scG9pbnRfcmlnaHQ6e2tleXdvcmRzOltcImZpbmdlcnNcIixcImhhbmRcIixcImRpcmVjdGlvblwiLFwicmlnaHRcIl0sY2hhcjpcIvCfkYlcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGZ1OntrZXl3b3JkczpbXCJoYW5kXCIsXCJmaW5nZXJzXCIsXCJydWRlXCIsXCJtaWRkbGVcIixcImZsaXBwaW5nXCJdLGNoYXI6XCLwn5aVXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxyYWlzZWRfaGFuZF93aXRoX2ZpbmdlcnNfc3BsYXllZDp7a2V5d29yZHM6W1wiaGFuZFwiLFwiZmluZ2Vyc1wiLFwicGFsbVwiXSxjaGFyOlwi8J+WkFwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbG92ZV95b3U6e2tleXdvcmRzOltcImhhbmRcIixcImZpbmdlcnNcIixcImdlc3R1cmVcIl0sY2hhcjpcIvCfpJ9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1ldGFsOntrZXl3b3JkczpbXCJoYW5kXCIsXCJmaW5nZXJzXCIsXCJldmlsX2V5ZVwiLFwic2lnbl9vZl9ob3Juc1wiLFwicm9ja19vblwiXSxjaGFyOlwi8J+kmFwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sY3Jvc3NlZF9maW5nZXJzOntrZXl3b3JkczpbXCJnb29kXCIsXCJsdWNreVwiXSxjaGFyOlwi8J+knlwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sdnVsY2FuX3NhbHV0ZTp7a2V5d29yZHM6W1wiaGFuZFwiLFwiZmluZ2Vyc1wiLFwic3BvY2tcIixcInN0YXIgdHJla1wiXSxjaGFyOlwi8J+WllwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sd3JpdGluZ19oYW5kOntrZXl3b3JkczpbXCJsb3dlcl9sZWZ0X2JhbGxwb2ludF9wZW5cIixcInN0YXRpb25lcnlcIixcIndyaXRlXCIsXCJjb21wb3NlXCJdLGNoYXI6XCLinI1cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHNlbGZpZTp7a2V5d29yZHM6W1wiY2FtZXJhXCIsXCJwaG9uZVwiXSxjaGFyOlwi8J+ks1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbmFpbF9jYXJlOntrZXl3b3JkczpbXCJiZWF1dHlcIixcIm1hbmljdXJlXCIsXCJmaW5nZXJcIixcImZhc2hpb25cIixcIm5haWxcIl0sY2hhcjpcIvCfkoVcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGxpcHM6e2tleXdvcmRzOltcIm1vdXRoXCIsXCJraXNzXCJdLGNoYXI6XCLwn5GEXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sdG9vdGg6e2tleXdvcmRzOltcInRlZXRoXCIsXCJkZW50aXN0XCJdLGNoYXI6XCLwn6a3XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sdG9uZ3VlOntrZXl3b3JkczpbXCJtb3V0aFwiLFwicGxheWZ1bFwiXSxjaGFyOlwi8J+RhVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGVhcjp7a2V5d29yZHM6W1wiZmFjZVwiLFwiaGVhclwiLFwic291bmRcIixcImxpc3RlblwiXSxjaGFyOlwi8J+RglwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbm9zZTp7a2V5d29yZHM6W1wic21lbGxcIixcInNuaWZmXCJdLGNoYXI6XCLwn5GDXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxleWU6e2tleXdvcmRzOltcImZhY2VcIixcImxvb2tcIixcInNlZVwiLFwid2F0Y2hcIixcInN0YXJlXCJdLGNoYXI6XCLwn5GBXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZXllczp7a2V5d29yZHM6W1wibG9va1wiLFwid2F0Y2hcIixcInN0YWxrXCIsXCJwZWVrXCIsXCJzZWVcIl0sY2hhcjpcIvCfkYBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxicmFpbjp7a2V5d29yZHM6W1wic21hcnRcIixcImludGVsbGlnZW50XCJdLGNoYXI6XCLwn6egXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sYnVzdF9pbl9zaWxob3VldHRlOntrZXl3b3JkczpbXCJ1c2VyXCIsXCJwZXJzb25cIixcImh1bWFuXCJdLGNoYXI6XCLwn5GkXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sYnVzdHNfaW5fc2lsaG91ZXR0ZTp7a2V5d29yZHM6W1widXNlclwiLFwicGVyc29uXCIsXCJodW1hblwiLFwiZ3JvdXBcIixcInRlYW1cIl0sY2hhcjpcIvCfkaVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxzcGVha2luZ19oZWFkOntrZXl3b3JkczpbXCJ1c2VyXCIsXCJwZXJzb25cIixcImh1bWFuXCIsXCJzaW5nXCIsXCJzYXlcIixcInRhbGtcIl0sY2hhcjpcIvCfl6NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxiYWJ5OntrZXl3b3JkczpbXCJjaGlsZFwiLFwiYm95XCIsXCJnaXJsXCIsXCJ0b2RkbGVyXCJdLGNoYXI6XCLwn5G2XCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxjaGlsZDp7a2V5d29yZHM6W1wiZ2VuZGVyLW5ldXRyYWxcIixcInlvdW5nXCJdLGNoYXI6XCLwn6eSXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxib3k6e2tleXdvcmRzOltcIm1hblwiLFwibWFsZVwiLFwiZ3V5XCIsXCJ0ZWVuYWdlclwiXSxjaGFyOlwi8J+RplwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZ2lybDp7a2V5d29yZHM6W1wiZmVtYWxlXCIsXCJ3b21hblwiLFwidGVlbmFnZXJcIl0sY2hhcjpcIvCfkadcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGFkdWx0OntrZXl3b3JkczpbXCJnZW5kZXItbmV1dHJhbFwiLFwicGVyc29uXCJdLGNoYXI6XCLwn6eRXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW46e2tleXdvcmRzOltcIm11c3RhY2hlXCIsXCJmYXRoZXJcIixcImRhZFwiLFwiZ3V5XCIsXCJjbGFzc3lcIixcInNpclwiLFwibW91c3RhY2hlXCJdLGNoYXI6XCLwn5GoXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3b21hbjp7a2V5d29yZHM6W1wiZmVtYWxlXCIsXCJnaXJsc1wiLFwibGFkeVwiXSxjaGFyOlwi8J+RqVwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sYmxvbmRlX3dvbWFuOntrZXl3b3JkczpbXCJ3b21hblwiLFwiZmVtYWxlXCIsXCJnaXJsXCIsXCJibG9uZGVcIixcInBlcnNvblwiXSxjaGFyOlwi8J+RseKAjeKZgO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sYmxvbmRlX21hbjp7a2V5d29yZHM6W1wibWFuXCIsXCJtYWxlXCIsXCJib3lcIixcImJsb25kZVwiLFwiZ3V5XCIsXCJwZXJzb25cIl0sY2hhcjpcIvCfkbFcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGJlYXJkZWRfcGVyc29uOntrZXl3b3JkczpbXCJwZXJzb25cIixcImJld2hpc2tlcmVkXCJdLGNoYXI6XCLwn6eUXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxvbGRlcl9hZHVsdDp7a2V5d29yZHM6W1wiaHVtYW5cIixcImVsZGVyXCIsXCJzZW5pb3JcIixcImdlbmRlci1uZXV0cmFsXCJdLGNoYXI6XCLwn6eTXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxvbGRlcl9tYW46e2tleXdvcmRzOltcImh1bWFuXCIsXCJtYWxlXCIsXCJtZW5cIixcIm9sZFwiLFwiZWxkZXJcIixcInNlbmlvclwiXSxjaGFyOlwi8J+RtFwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sb2xkZXJfd29tYW46e2tleXdvcmRzOltcImh1bWFuXCIsXCJmZW1hbGVcIixcIndvbWVuXCIsXCJsYWR5XCIsXCJvbGRcIixcImVsZGVyXCIsXCJzZW5pb3JcIl0sY2hhcjpcIvCfkbVcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hbl93aXRoX2d1YV9waV9tYW86e2tleXdvcmRzOltcIm1hbGVcIixcImJveVwiLFwiY2hpbmVzZVwiXSxjaGFyOlwi8J+RslwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sd29tYW5fd2l0aF9oZWFkc2NhcmY6e2tleXdvcmRzOltcImZlbWFsZVwiLFwiaGlqYWJcIixcIm1hbnRpbGxhXCIsXCJ0aWNoZWxcIl0sY2hhcjpcIvCfp5VcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuX3dpdGhfdHVyYmFuOntrZXl3b3JkczpbXCJmZW1hbGVcIixcImluZGlhblwiLFwiaGluZHVpc21cIixcImFyYWJzXCIsXCJ3b21hblwiXSxjaGFyOlwi8J+Rs+KAjeKZgO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbWFuX3dpdGhfdHVyYmFuOntrZXl3b3JkczpbXCJtYWxlXCIsXCJpbmRpYW5cIixcImhpbmR1aXNtXCIsXCJhcmFic1wiXSxjaGFyOlwi8J+Rs1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0scG9saWNld29tYW46e2tleXdvcmRzOltcIndvbWFuXCIsXCJwb2xpY2VcIixcImxhd1wiLFwibGVnYWxcIixcImVuZm9yY2VtZW50XCIsXCJhcnJlc3RcIixcIjkxMVwiLFwiZmVtYWxlXCJdLGNoYXI6XCLwn5Gu4oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxwb2xpY2VtYW46e2tleXdvcmRzOltcIm1hblwiLFwicG9saWNlXCIsXCJsYXdcIixcImxlZ2FsXCIsXCJlbmZvcmNlbWVudFwiLFwiYXJyZXN0XCIsXCI5MTFcIl0sY2hhcjpcIvCfka5cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGNvbnN0cnVjdGlvbl93b3JrZXJfd29tYW46e2tleXdvcmRzOltcImZlbWFsZVwiLFwiaHVtYW5cIixcIndpcFwiLFwiYnVpbGRcIixcImNvbnN0cnVjdGlvblwiLFwid29ya2VyXCIsXCJsYWJvclwiLFwid29tYW5cIl0sY2hhcjpcIvCfkbfigI3imYDvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGNvbnN0cnVjdGlvbl93b3JrZXJfbWFuOntrZXl3b3JkczpbXCJtYWxlXCIsXCJodW1hblwiLFwid2lwXCIsXCJndXlcIixcImJ1aWxkXCIsXCJjb25zdHJ1Y3Rpb25cIixcIndvcmtlclwiLFwibGFib3JcIl0sY2hhcjpcIvCfkbdcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGd1YXJkc3dvbWFuOntrZXl3b3JkczpbXCJ1a1wiLFwiZ2JcIixcImJyaXRpc2hcIixcImZlbWFsZVwiLFwicm95YWxcIixcIndvbWFuXCJdLGNoYXI6XCLwn5KC4oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxndWFyZHNtYW46e2tleXdvcmRzOltcInVrXCIsXCJnYlwiLFwiYnJpdGlzaFwiLFwibWFsZVwiLFwiZ3V5XCIsXCJyb3lhbFwiXSxjaGFyOlwi8J+SglwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmVtYWxlX2RldGVjdGl2ZTp7a2V5d29yZHM6W1wiaHVtYW5cIixcInNweVwiLFwiZGV0ZWN0aXZlXCIsXCJmZW1hbGVcIixcIndvbWFuXCJdLGNoYXI6XCLwn5W177iP4oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYWxlX2RldGVjdGl2ZTp7a2V5d29yZHM6W1wiaHVtYW5cIixcInNweVwiLFwiZGV0ZWN0aXZlXCJdLGNoYXI6XCLwn5W1XCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3b21hbl9oZWFsdGhfd29ya2VyOntrZXl3b3JkczpbXCJkb2N0b3JcIixcIm51cnNlXCIsXCJ0aGVyYXBpc3RcIixcImhlYWx0aGNhcmVcIixcIndvbWFuXCIsXCJodW1hblwiXSxjaGFyOlwi8J+RqeKAjeKale+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbWFuX2hlYWx0aF93b3JrZXI6e2tleXdvcmRzOltcImRvY3RvclwiLFwibnVyc2VcIixcInRoZXJhcGlzdFwiLFwiaGVhbHRoY2FyZVwiLFwibWFuXCIsXCJodW1hblwiXSxjaGFyOlwi8J+RqOKAjeKale+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sd29tYW5fZmFybWVyOntrZXl3b3JkczpbXCJyYW5jaGVyXCIsXCJnYXJkZW5lclwiLFwid29tYW5cIixcImh1bWFuXCJdLGNoYXI6XCLwn5Gp4oCN8J+MvlwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbWFuX2Zhcm1lcjp7a2V5d29yZHM6W1wicmFuY2hlclwiLFwiZ2FyZGVuZXJcIixcIm1hblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkajigI3wn4y+XCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3b21hbl9jb29rOntrZXl3b3JkczpbXCJjaGVmXCIsXCJ3b21hblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkanigI3wn42zXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW5fY29vazp7a2V5d29yZHM6W1wiY2hlZlwiLFwibWFuXCIsXCJodW1hblwiXSxjaGFyOlwi8J+RqOKAjfCfjbNcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuX3N0dWRlbnQ6e2tleXdvcmRzOltcImdyYWR1YXRlXCIsXCJ3b21hblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkanigI3wn46TXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW5fc3R1ZGVudDp7a2V5d29yZHM6W1wiZ3JhZHVhdGVcIixcIm1hblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkajigI3wn46TXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3b21hbl9zaW5nZXI6e2tleXdvcmRzOltcInJvY2tzdGFyXCIsXCJlbnRlcnRhaW5lclwiLFwid29tYW5cIixcImh1bWFuXCJdLGNoYXI6XCLwn5Gp4oCN8J+OpFwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbWFuX3Npbmdlcjp7a2V5d29yZHM6W1wicm9ja3N0YXJcIixcImVudGVydGFpbmVyXCIsXCJtYW5cIixcImh1bWFuXCJdLGNoYXI6XCLwn5Go4oCN8J+OpFwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sd29tYW5fdGVhY2hlcjp7a2V5d29yZHM6W1wiaW5zdHJ1Y3RvclwiLFwicHJvZmVzc29yXCIsXCJ3b21hblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkanigI3wn4+rXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW5fdGVhY2hlcjp7a2V5d29yZHM6W1wiaW5zdHJ1Y3RvclwiLFwicHJvZmVzc29yXCIsXCJtYW5cIixcImh1bWFuXCJdLGNoYXI6XCLwn5Go4oCN8J+Pq1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sd29tYW5fZmFjdG9yeV93b3JrZXI6e2tleXdvcmRzOltcImFzc2VtYmx5XCIsXCJpbmR1c3RyaWFsXCIsXCJ3b21hblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkanigI3wn4+tXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW5fZmFjdG9yeV93b3JrZXI6e2tleXdvcmRzOltcImFzc2VtYmx5XCIsXCJpbmR1c3RyaWFsXCIsXCJtYW5cIixcImh1bWFuXCJdLGNoYXI6XCLwn5Go4oCN8J+PrVwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sd29tYW5fdGVjaG5vbG9naXN0OntrZXl3b3JkczpbXCJjb2RlclwiLFwiZGV2ZWxvcGVyXCIsXCJlbmdpbmVlclwiLFwicHJvZ3JhbW1lclwiLFwic29mdHdhcmVcIixcIndvbWFuXCIsXCJodW1hblwiLFwibGFwdG9wXCIsXCJjb21wdXRlclwiXSxjaGFyOlwi8J+RqeKAjfCfkrtcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hbl90ZWNobm9sb2dpc3Q6e2tleXdvcmRzOltcImNvZGVyXCIsXCJkZXZlbG9wZXJcIixcImVuZ2luZWVyXCIsXCJwcm9ncmFtbWVyXCIsXCJzb2Z0d2FyZVwiLFwibWFuXCIsXCJodW1hblwiLFwibGFwdG9wXCIsXCJjb21wdXRlclwiXSxjaGFyOlwi8J+RqOKAjfCfkrtcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuX29mZmljZV93b3JrZXI6e2tleXdvcmRzOltcImJ1c2luZXNzXCIsXCJtYW5hZ2VyXCIsXCJ3b21hblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkanigI3wn5K8XCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW5fb2ZmaWNlX3dvcmtlcjp7a2V5d29yZHM6W1wiYnVzaW5lc3NcIixcIm1hbmFnZXJcIixcIm1hblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkajigI3wn5K8XCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3b21hbl9tZWNoYW5pYzp7a2V5d29yZHM6W1wicGx1bWJlclwiLFwid29tYW5cIixcImh1bWFuXCIsXCJ3cmVuY2hcIl0sY2hhcjpcIvCfkanigI3wn5SnXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW5fbWVjaGFuaWM6e2tleXdvcmRzOltcInBsdW1iZXJcIixcIm1hblwiLFwiaHVtYW5cIixcIndyZW5jaFwiXSxjaGFyOlwi8J+RqOKAjfCflKdcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuX3NjaWVudGlzdDp7a2V5d29yZHM6W1wiYmlvbG9naXN0XCIsXCJjaGVtaXN0XCIsXCJlbmdpbmVlclwiLFwicGh5c2ljaXN0XCIsXCJ3b21hblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkanigI3wn5SsXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW5fc2NpZW50aXN0OntrZXl3b3JkczpbXCJiaW9sb2dpc3RcIixcImNoZW1pc3RcIixcImVuZ2luZWVyXCIsXCJwaHlzaWNpc3RcIixcIm1hblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkajigI3wn5SsXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3b21hbl9hcnRpc3Q6e2tleXdvcmRzOltcInBhaW50ZXJcIixcIndvbWFuXCIsXCJodW1hblwiXSxjaGFyOlwi8J+RqeKAjfCfjqhcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hbl9hcnRpc3Q6e2tleXdvcmRzOltcInBhaW50ZXJcIixcIm1hblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkajigI3wn46oXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3b21hbl9maXJlZmlnaHRlcjp7a2V5d29yZHM6W1wiZmlyZW1hblwiLFwid29tYW5cIixcImh1bWFuXCJdLGNoYXI6XCLwn5Gp4oCN8J+aklwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbWFuX2ZpcmVmaWdodGVyOntrZXl3b3JkczpbXCJmaXJlbWFuXCIsXCJtYW5cIixcImh1bWFuXCJdLGNoYXI6XCLwn5Go4oCN8J+aklwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sd29tYW5fcGlsb3Q6e2tleXdvcmRzOltcImF2aWF0b3JcIixcInBsYW5lXCIsXCJ3b21hblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkanigI3inIjvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hbl9waWxvdDp7a2V5d29yZHM6W1wiYXZpYXRvclwiLFwicGxhbmVcIixcIm1hblwiLFwiaHVtYW5cIl0sY2hhcjpcIvCfkajigI3inIjvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuX2FzdHJvbmF1dDp7a2V5d29yZHM6W1wic3BhY2VcIixcInJvY2tldFwiLFwid29tYW5cIixcImh1bWFuXCJdLGNoYXI6XCLwn5Gp4oCN8J+agFwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbWFuX2FzdHJvbmF1dDp7a2V5d29yZHM6W1wic3BhY2VcIixcInJvY2tldFwiLFwibWFuXCIsXCJodW1hblwiXSxjaGFyOlwi8J+RqOKAjfCfmoBcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuX2p1ZGdlOntrZXl3b3JkczpbXCJqdXN0aWNlXCIsXCJjb3VydFwiLFwid29tYW5cIixcImh1bWFuXCJdLGNoYXI6XCLwn5Gp4oCN4pqW77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW5fanVkZ2U6e2tleXdvcmRzOltcImp1c3RpY2VcIixcImNvdXJ0XCIsXCJtYW5cIixcImh1bWFuXCJdLGNoYXI6XCLwn5Go4oCN4pqW77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3b21hbl9zdXBlcmhlcm86e2tleXdvcmRzOltcIndvbWFuXCIsXCJmZW1hbGVcIixcImdvb2RcIixcImhlcm9pbmVcIixcInN1cGVycG93ZXJzXCJdLGNoYXI6XCLwn6a44oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW5fc3VwZXJoZXJvOntrZXl3b3JkczpbXCJtYW5cIixcIm1hbGVcIixcImdvb2RcIixcImhlcm9cIixcInN1cGVycG93ZXJzXCJdLGNoYXI6XCLwn6a44oCN4pmC77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3b21hbl9zdXBlcnZpbGxhaW46e2tleXdvcmRzOltcIndvbWFuXCIsXCJmZW1hbGVcIixcImV2aWxcIixcImJhZFwiLFwiY3JpbWluYWxcIixcImhlcm9pbmVcIixcInN1cGVycG93ZXJzXCJdLGNoYXI6XCLwn6a54oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW5fc3VwZXJ2aWxsYWluOntrZXl3b3JkczpbXCJtYW5cIixcIm1hbGVcIixcImV2aWxcIixcImJhZFwiLFwiY3JpbWluYWxcIixcImhlcm9cIixcInN1cGVycG93ZXJzXCJdLGNoYXI6XCLwn6a54oCN4pmC77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtcnNfY2xhdXM6e2tleXdvcmRzOltcIndvbWFuXCIsXCJmZW1hbGVcIixcInhtYXNcIixcIm1vdGhlciBjaHJpc3RtYXNcIl0sY2hhcjpcIvCfpLZcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHNhbnRhOntrZXl3b3JkczpbXCJmZXN0aXZhbFwiLFwibWFuXCIsXCJtYWxlXCIsXCJ4bWFzXCIsXCJmYXRoZXIgY2hyaXN0bWFzXCJdLGNoYXI6XCLwn46FXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxzb3JjZXJlc3M6e2tleXdvcmRzOltcIndvbWFuXCIsXCJmZW1hbGVcIixcIm1hZ2VcIixcIndpdGNoXCJdLGNoYXI6XCLwn6eZ4oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3aXphcmQ6e2tleXdvcmRzOltcIm1hblwiLFwibWFsZVwiLFwibWFnZVwiLFwic29yY2VyZXJcIl0sY2hhcjpcIvCfp5nigI3imYLvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuX2VsZjp7a2V5d29yZHM6W1wid29tYW5cIixcImZlbWFsZVwiXSxjaGFyOlwi8J+nneKAjeKZgO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbWFuX2VsZjp7a2V5d29yZHM6W1wibWFuXCIsXCJtYWxlXCJdLGNoYXI6XCLwn6ed4oCN4pmC77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3b21hbl92YW1waXJlOntrZXl3b3JkczpbXCJ3b21hblwiLFwiZmVtYWxlXCJdLGNoYXI6XCLwn6eb4oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW5fdmFtcGlyZTp7a2V5d29yZHM6W1wibWFuXCIsXCJtYWxlXCIsXCJkcmFjdWxhXCJdLGNoYXI6XCLwn6eb4oCN4pmC77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3b21hbl96b21iaWU6e2tleXdvcmRzOltcIndvbWFuXCIsXCJmZW1hbGVcIixcInVuZGVhZFwiLFwid2Fsa2luZyBkZWFkXCJdLGNoYXI6XCLwn6ef4oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbWFuX3pvbWJpZTp7a2V5d29yZHM6W1wibWFuXCIsXCJtYWxlXCIsXCJkcmFjdWxhXCIsXCJ1bmRlYWRcIixcIndhbGtpbmcgZGVhZFwiXSxjaGFyOlwi8J+nn+KAjeKZgu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuX2dlbmllOntrZXl3b3JkczpbXCJ3b21hblwiLFwiZmVtYWxlXCJdLGNoYXI6XCLwn6ee4oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbWFuX2dlbmllOntrZXl3b3JkczpbXCJtYW5cIixcIm1hbGVcIl0sY2hhcjpcIvCfp57igI3imYLvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtZXJtYWlkOntrZXl3b3JkczpbXCJ3b21hblwiLFwiZmVtYWxlXCIsXCJtZXJ3b21hblwiLFwiYXJpZWxcIl0sY2hhcjpcIvCfp5zigI3imYDvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1lcm1hbjp7a2V5d29yZHM6W1wibWFuXCIsXCJtYWxlXCIsXCJ0cml0b25cIl0sY2hhcjpcIvCfp5zigI3imYLvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuX2ZhaXJ5OntrZXl3b3JkczpbXCJ3b21hblwiLFwiZmVtYWxlXCJdLGNoYXI6XCLwn6ea4oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW5fZmFpcnk6e2tleXdvcmRzOltcIm1hblwiLFwibWFsZVwiXSxjaGFyOlwi8J+nmuKAjeKZgu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sYW5nZWw6e2tleXdvcmRzOltcImhlYXZlblwiLFwid2luZ3NcIixcImhhbG9cIl0sY2hhcjpcIvCfkbxcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHByZWduYW50X3dvbWFuOntrZXl3b3JkczpbXCJiYWJ5XCJdLGNoYXI6XCLwn6SwXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxicmVhc3RmZWVkaW5nOntrZXl3b3JkczpbXCJudXJzaW5nXCIsXCJiYWJ5XCJdLGNoYXI6XCLwn6SxXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxwcmluY2Vzczp7a2V5d29yZHM6W1wiZ2lybFwiLFwid29tYW5cIixcImZlbWFsZVwiLFwiYmxvbmRcIixcImNyb3duXCIsXCJyb3lhbFwiLFwicXVlZW5cIl0sY2hhcjpcIvCfkbhcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHByaW5jZTp7a2V5d29yZHM6W1wiYm95XCIsXCJtYW5cIixcIm1hbGVcIixcImNyb3duXCIsXCJyb3lhbFwiLFwia2luZ1wiXSxjaGFyOlwi8J+ktFwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sYnJpZGVfd2l0aF92ZWlsOntrZXl3b3JkczpbXCJjb3VwbGVcIixcIm1hcnJpYWdlXCIsXCJ3ZWRkaW5nXCIsXCJ3b21hblwiLFwiYnJpZGVcIl0sY2hhcjpcIvCfkbBcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hbl9pbl90dXhlZG86e2tleXdvcmRzOltcImNvdXBsZVwiLFwibWFycmlhZ2VcIixcIndlZGRpbmdcIixcImdyb29tXCJdLGNoYXI6XCLwn6S1XCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxydW5uaW5nX3dvbWFuOntrZXl3b3JkczpbXCJ3b21hblwiLFwid2Fsa2luZ1wiLFwiZXhlcmNpc2VcIixcInJhY2VcIixcInJ1bm5pbmdcIixcImZlbWFsZVwiXSxjaGFyOlwi8J+Pg+KAjeKZgO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0scnVubmluZ19tYW46e2tleXdvcmRzOltcIm1hblwiLFwid2Fsa2luZ1wiLFwiZXhlcmNpc2VcIixcInJhY2VcIixcInJ1bm5pbmdcIl0sY2hhcjpcIvCfj4NcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdhbGtpbmdfd29tYW46e2tleXdvcmRzOltcImh1bWFuXCIsXCJmZWV0XCIsXCJzdGVwc1wiLFwid29tYW5cIixcImZlbWFsZVwiXSxjaGFyOlwi8J+atuKAjeKZgO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sd2Fsa2luZ19tYW46e2tleXdvcmRzOltcImh1bWFuXCIsXCJmZWV0XCIsXCJzdGVwc1wiXSxjaGFyOlwi8J+atlwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZGFuY2VyOntrZXl3b3JkczpbXCJmZW1hbGVcIixcImdpcmxcIixcIndvbWFuXCIsXCJmdW5cIl0sY2hhcjpcIvCfkoNcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hbl9kYW5jaW5nOntrZXl3b3JkczpbXCJtYWxlXCIsXCJib3lcIixcImZ1blwiLFwiZGFuY2VyXCJdLGNoYXI6XCLwn5W6XCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxkYW5jaW5nX3dvbWVuOntrZXl3b3JkczpbXCJmZW1hbGVcIixcImJ1bm55XCIsXCJ3b21lblwiLFwiZ2lybHNcIl0sY2hhcjpcIvCfka9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxkYW5jaW5nX21lbjp7a2V5d29yZHM6W1wibWFsZVwiLFwiYnVubnlcIixcIm1lblwiLFwiYm95c1wiXSxjaGFyOlwi8J+Rr+KAjeKZgu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGNvdXBsZTp7a2V5d29yZHM6W1wicGFpclwiLFwicGVvcGxlXCIsXCJodW1hblwiLFwibG92ZVwiLFwiZGF0ZVwiLFwiZGF0aW5nXCIsXCJsaWtlXCIsXCJhZmZlY3Rpb25cIixcInZhbGVudGluZXNcIixcIm1hcnJpYWdlXCJdLGNoYXI6XCLwn5GrXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sdHdvX21lbl9ob2xkaW5nX2hhbmRzOntrZXl3b3JkczpbXCJwYWlyXCIsXCJjb3VwbGVcIixcImxvdmVcIixcImxpa2VcIixcImJyb21hbmNlXCIsXCJmcmllbmRzaGlwXCIsXCJwZW9wbGVcIixcImh1bWFuXCJdLGNoYXI6XCLwn5GsXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sdHdvX3dvbWVuX2hvbGRpbmdfaGFuZHM6e2tleXdvcmRzOltcInBhaXJcIixcImZyaWVuZHNoaXBcIixcImNvdXBsZVwiLFwibG92ZVwiLFwibGlrZVwiLFwiZmVtYWxlXCIsXCJwZW9wbGVcIixcImh1bWFuXCJdLGNoYXI6XCLwn5GtXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sYm93aW5nX3dvbWFuOntrZXl3b3JkczpbXCJ3b21hblwiLFwiZmVtYWxlXCIsXCJnaXJsXCJdLGNoYXI6XCLwn5mH4oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxib3dpbmdfbWFuOntrZXl3b3JkczpbXCJtYW5cIixcIm1hbGVcIixcImJveVwiXSxjaGFyOlwi8J+Zh1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbWFuX2ZhY2VwYWxtaW5nOntrZXl3b3JkczpbXCJtYW5cIixcIm1hbGVcIixcImJveVwiLFwiZGlzYmVsaWVmXCJdLGNoYXI6XCLwn6Sm4oCN4pmC77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3b21hbl9mYWNlcGFsbWluZzp7a2V5d29yZHM6W1wid29tYW5cIixcImZlbWFsZVwiLFwiZ2lybFwiLFwiZGlzYmVsaWVmXCJdLGNoYXI6XCLwn6Sm4oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3b21hbl9zaHJ1Z2dpbmc6e2tleXdvcmRzOltcIndvbWFuXCIsXCJmZW1hbGVcIixcImdpcmxcIixcImNvbmZ1c2VkXCIsXCJpbmRpZmZlcmVudFwiLFwiZG91YnRcIl0sY2hhcjpcIvCfpLdcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hbl9zaHJ1Z2dpbmc6e2tleXdvcmRzOltcIm1hblwiLFwibWFsZVwiLFwiYm95XCIsXCJjb25mdXNlZFwiLFwiaW5kaWZmZXJlbnRcIixcImRvdWJ0XCJdLGNoYXI6XCLwn6S34oCN4pmC77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSx0aXBwaW5nX2hhbmRfd29tYW46e2tleXdvcmRzOltcImZlbWFsZVwiLFwiZ2lybFwiLFwid29tYW5cIixcImh1bWFuXCIsXCJpbmZvcm1hdGlvblwiXSxjaGFyOlwi8J+SgVwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sdGlwcGluZ19oYW5kX21hbjp7a2V5d29yZHM6W1wibWFsZVwiLFwiYm95XCIsXCJtYW5cIixcImh1bWFuXCIsXCJpbmZvcm1hdGlvblwiXSxjaGFyOlwi8J+SgeKAjeKZgu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbm9fZ29vZF93b21hbjp7a2V5d29yZHM6W1wiZmVtYWxlXCIsXCJnaXJsXCIsXCJ3b21hblwiLFwibm9wZVwiXSxjaGFyOlwi8J+ZhVwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbm9fZ29vZF9tYW46e2tleXdvcmRzOltcIm1hbGVcIixcImJveVwiLFwibWFuXCIsXCJub3BlXCJdLGNoYXI6XCLwn5mF4oCN4pmC77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxva193b21hbjp7a2V5d29yZHM6W1wid29tZW5cIixcImdpcmxcIixcImZlbWFsZVwiLFwicGlua1wiLFwiaHVtYW5cIixcIndvbWFuXCJdLGNoYXI6XCLwn5mGXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxva19tYW46e2tleXdvcmRzOltcIm1lblwiLFwiYm95XCIsXCJtYWxlXCIsXCJibHVlXCIsXCJodW1hblwiLFwibWFuXCJdLGNoYXI6XCLwn5mG4oCN4pmC77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxyYWlzaW5nX2hhbmRfd29tYW46e2tleXdvcmRzOltcImZlbWFsZVwiLFwiZ2lybFwiLFwid29tYW5cIl0sY2hhcjpcIvCfmYtcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHJhaXNpbmdfaGFuZF9tYW46e2tleXdvcmRzOltcIm1hbGVcIixcImJveVwiLFwibWFuXCJdLGNoYXI6XCLwn5mL4oCN4pmC77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxwb3V0aW5nX3dvbWFuOntrZXl3b3JkczpbXCJmZW1hbGVcIixcImdpcmxcIixcIndvbWFuXCJdLGNoYXI6XCLwn5mOXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxwb3V0aW5nX21hbjp7a2V5d29yZHM6W1wibWFsZVwiLFwiYm95XCIsXCJtYW5cIl0sY2hhcjpcIvCfmY7igI3imYLvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGZyb3duaW5nX3dvbWFuOntrZXl3b3JkczpbXCJmZW1hbGVcIixcImdpcmxcIixcIndvbWFuXCIsXCJzYWRcIixcImRlcHJlc3NlZFwiLFwiZGlzY291cmFnZWRcIixcInVuaGFwcHlcIl0sY2hhcjpcIvCfmY1cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGZyb3duaW5nX21hbjp7a2V5d29yZHM6W1wibWFsZVwiLFwiYm95XCIsXCJtYW5cIixcInNhZFwiLFwiZGVwcmVzc2VkXCIsXCJkaXNjb3VyYWdlZFwiLFwidW5oYXBweVwiXSxjaGFyOlwi8J+ZjeKAjeKZgu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0saGFpcmN1dF93b21hbjp7a2V5d29yZHM6W1wiZmVtYWxlXCIsXCJnaXJsXCIsXCJ3b21hblwiXSxjaGFyOlwi8J+Sh1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJwZW9wbGVcIn0saGFpcmN1dF9tYW46e2tleXdvcmRzOltcIm1hbGVcIixcImJveVwiLFwibWFuXCJdLGNoYXI6XCLwn5KH4oCN4pmC77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYXNzYWdlX3dvbWFuOntrZXl3b3JkczpbXCJmZW1hbGVcIixcImdpcmxcIixcIndvbWFuXCIsXCJoZWFkXCJdLGNoYXI6XCLwn5KGXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYXNzYWdlX21hbjp7a2V5d29yZHM6W1wibWFsZVwiLFwiYm95XCIsXCJtYW5cIixcImhlYWRcIl0sY2hhcjpcIvCfkobigI3imYLvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHdvbWFuX2luX3N0ZWFteV9yb29tOntrZXl3b3JkczpbXCJmZW1hbGVcIixcIndvbWFuXCIsXCJzcGFcIixcInN0ZWFtcm9vbVwiLFwic2F1bmFcIl0sY2hhcjpcIvCfp5bigI3imYDvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LG1hbl9pbl9zdGVhbXlfcm9vbTp7a2V5d29yZHM6W1wibWFsZVwiLFwibWFuXCIsXCJzcGFcIixcInN0ZWFtcm9vbVwiLFwic2F1bmFcIl0sY2hhcjpcIvCfp5bigI3imYLvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGNvdXBsZV93aXRoX2hlYXJ0X3dvbWFuX21hbjp7a2V5d29yZHM6W1wicGFpclwiLFwibG92ZVwiLFwibGlrZVwiLFwiYWZmZWN0aW9uXCIsXCJodW1hblwiLFwiZGF0aW5nXCIsXCJ2YWxlbnRpbmVzXCIsXCJtYXJyaWFnZVwiXSxjaGFyOlwi8J+SkVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGNvdXBsZV93aXRoX2hlYXJ0X3dvbWFuX3dvbWFuOntrZXl3b3JkczpbXCJwYWlyXCIsXCJsb3ZlXCIsXCJsaWtlXCIsXCJhZmZlY3Rpb25cIixcImh1bWFuXCIsXCJkYXRpbmdcIixcInZhbGVudGluZXNcIixcIm1hcnJpYWdlXCJdLGNoYXI6XCLwn5Gp4oCN4p2k77iP4oCN8J+RqVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGNvdXBsZV93aXRoX2hlYXJ0X21hbl9tYW46e2tleXdvcmRzOltcInBhaXJcIixcImxvdmVcIixcImxpa2VcIixcImFmZmVjdGlvblwiLFwiaHVtYW5cIixcImRhdGluZ1wiLFwidmFsZW50aW5lc1wiLFwibWFycmlhZ2VcIl0sY2hhcjpcIvCfkajigI3inaTvuI/igI3wn5GoXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sY291cGxla2lzc19tYW5fd29tYW46e2tleXdvcmRzOltcInBhaXJcIixcInZhbGVudGluZXNcIixcImxvdmVcIixcImxpa2VcIixcImRhdGluZ1wiLFwibWFycmlhZ2VcIl0sY2hhcjpcIvCfko9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxjb3VwbGVraXNzX3dvbWFuX3dvbWFuOntrZXl3b3JkczpbXCJwYWlyXCIsXCJ2YWxlbnRpbmVzXCIsXCJsb3ZlXCIsXCJsaWtlXCIsXCJkYXRpbmdcIixcIm1hcnJpYWdlXCJdLGNoYXI6XCLwn5Gp4oCN4p2k77iP4oCN8J+Si+KAjfCfkalcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxjb3VwbGVraXNzX21hbl9tYW46e2tleXdvcmRzOltcInBhaXJcIixcInZhbGVudGluZXNcIixcImxvdmVcIixcImxpa2VcIixcImRhdGluZ1wiLFwibWFycmlhZ2VcIl0sY2hhcjpcIvCfkajigI3inaTvuI/igI3wn5KL4oCN8J+RqFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGZhbWlseV9tYW5fd29tYW5fYm95OntrZXl3b3JkczpbXCJob21lXCIsXCJwYXJlbnRzXCIsXCJjaGlsZFwiLFwibW9tXCIsXCJkYWRcIixcImZhdGhlclwiLFwibW90aGVyXCIsXCJwZW9wbGVcIixcImh1bWFuXCJdLGNoYXI6XCLwn5GqXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFtaWx5X21hbl93b21hbl9naXJsOntrZXl3b3JkczpbXCJob21lXCIsXCJwYXJlbnRzXCIsXCJwZW9wbGVcIixcImh1bWFuXCIsXCJjaGlsZFwiXSxjaGFyOlwi8J+RqOKAjfCfkanigI3wn5GnXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFtaWx5X21hbl93b21hbl9naXJsX2JveTp7a2V5d29yZHM6W1wiaG9tZVwiLFwicGFyZW50c1wiLFwicGVvcGxlXCIsXCJodW1hblwiLFwiY2hpbGRyZW5cIl0sY2hhcjpcIvCfkajigI3wn5Gp4oCN8J+Rp+KAjfCfkaZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmYW1pbHlfbWFuX3dvbWFuX2JveV9ib3k6e2tleXdvcmRzOltcImhvbWVcIixcInBhcmVudHNcIixcInBlb3BsZVwiLFwiaHVtYW5cIixcImNoaWxkcmVuXCJdLGNoYXI6XCLwn5Go4oCN8J+RqeKAjfCfkabigI3wn5GmXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFtaWx5X21hbl93b21hbl9naXJsX2dpcmw6e2tleXdvcmRzOltcImhvbWVcIixcInBhcmVudHNcIixcInBlb3BsZVwiLFwiaHVtYW5cIixcImNoaWxkcmVuXCJdLGNoYXI6XCLwn5Go4oCN8J+RqeKAjfCfkafigI3wn5GnXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFtaWx5X3dvbWFuX3dvbWFuX2JveTp7a2V5d29yZHM6W1wiaG9tZVwiLFwicGFyZW50c1wiLFwicGVvcGxlXCIsXCJodW1hblwiLFwiY2hpbGRyZW5cIl0sY2hhcjpcIvCfkanigI3wn5Gp4oCN8J+RplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGZhbWlseV93b21hbl93b21hbl9naXJsOntrZXl3b3JkczpbXCJob21lXCIsXCJwYXJlbnRzXCIsXCJwZW9wbGVcIixcImh1bWFuXCIsXCJjaGlsZHJlblwiXSxjaGFyOlwi8J+RqeKAjfCfkanigI3wn5GnXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFtaWx5X3dvbWFuX3dvbWFuX2dpcmxfYm95OntrZXl3b3JkczpbXCJob21lXCIsXCJwYXJlbnRzXCIsXCJwZW9wbGVcIixcImh1bWFuXCIsXCJjaGlsZHJlblwiXSxjaGFyOlwi8J+RqeKAjfCfkanigI3wn5Gn4oCN8J+RplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGZhbWlseV93b21hbl93b21hbl9ib3lfYm95OntrZXl3b3JkczpbXCJob21lXCIsXCJwYXJlbnRzXCIsXCJwZW9wbGVcIixcImh1bWFuXCIsXCJjaGlsZHJlblwiXSxjaGFyOlwi8J+RqeKAjfCfkanigI3wn5Gm4oCN8J+RplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGZhbWlseV93b21hbl93b21hbl9naXJsX2dpcmw6e2tleXdvcmRzOltcImhvbWVcIixcInBhcmVudHNcIixcInBlb3BsZVwiLFwiaHVtYW5cIixcImNoaWxkcmVuXCJdLGNoYXI6XCLwn5Gp4oCN8J+RqeKAjfCfkafigI3wn5GnXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFtaWx5X21hbl9tYW5fYm95OntrZXl3b3JkczpbXCJob21lXCIsXCJwYXJlbnRzXCIsXCJwZW9wbGVcIixcImh1bWFuXCIsXCJjaGlsZHJlblwiXSxjaGFyOlwi8J+RqOKAjfCfkajigI3wn5GmXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFtaWx5X21hbl9tYW5fZ2lybDp7a2V5d29yZHM6W1wiaG9tZVwiLFwicGFyZW50c1wiLFwicGVvcGxlXCIsXCJodW1hblwiLFwiY2hpbGRyZW5cIl0sY2hhcjpcIvCfkajigI3wn5Go4oCN8J+Rp1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGZhbWlseV9tYW5fbWFuX2dpcmxfYm95OntrZXl3b3JkczpbXCJob21lXCIsXCJwYXJlbnRzXCIsXCJwZW9wbGVcIixcImh1bWFuXCIsXCJjaGlsZHJlblwiXSxjaGFyOlwi8J+RqOKAjfCfkajigI3wn5Gn4oCN8J+RplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGZhbWlseV9tYW5fbWFuX2JveV9ib3k6e2tleXdvcmRzOltcImhvbWVcIixcInBhcmVudHNcIixcInBlb3BsZVwiLFwiaHVtYW5cIixcImNoaWxkcmVuXCJdLGNoYXI6XCLwn5Go4oCN8J+RqOKAjfCfkabigI3wn5GmXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFtaWx5X21hbl9tYW5fZ2lybF9naXJsOntrZXl3b3JkczpbXCJob21lXCIsXCJwYXJlbnRzXCIsXCJwZW9wbGVcIixcImh1bWFuXCIsXCJjaGlsZHJlblwiXSxjaGFyOlwi8J+RqOKAjfCfkajigI3wn5Gn4oCN8J+Rp1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGZhbWlseV93b21hbl9ib3k6e2tleXdvcmRzOltcImhvbWVcIixcInBhcmVudFwiLFwicGVvcGxlXCIsXCJodW1hblwiLFwiY2hpbGRcIl0sY2hhcjpcIvCfkanigI3wn5GmXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFtaWx5X3dvbWFuX2dpcmw6e2tleXdvcmRzOltcImhvbWVcIixcInBhcmVudFwiLFwicGVvcGxlXCIsXCJodW1hblwiLFwiY2hpbGRcIl0sY2hhcjpcIvCfkanigI3wn5GnXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFtaWx5X3dvbWFuX2dpcmxfYm95OntrZXl3b3JkczpbXCJob21lXCIsXCJwYXJlbnRcIixcInBlb3BsZVwiLFwiaHVtYW5cIixcImNoaWxkcmVuXCJdLGNoYXI6XCLwn5Gp4oCN8J+Rp+KAjfCfkaZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxmYW1pbHlfd29tYW5fYm95X2JveTp7a2V5d29yZHM6W1wiaG9tZVwiLFwicGFyZW50XCIsXCJwZW9wbGVcIixcImh1bWFuXCIsXCJjaGlsZHJlblwiXSxjaGFyOlwi8J+RqeKAjfCfkabigI3wn5GmXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFtaWx5X3dvbWFuX2dpcmxfZ2lybDp7a2V5d29yZHM6W1wiaG9tZVwiLFwicGFyZW50XCIsXCJwZW9wbGVcIixcImh1bWFuXCIsXCJjaGlsZHJlblwiXSxjaGFyOlwi8J+RqeKAjfCfkafigI3wn5GnXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFtaWx5X21hbl9ib3k6e2tleXdvcmRzOltcImhvbWVcIixcInBhcmVudFwiLFwicGVvcGxlXCIsXCJodW1hblwiLFwiY2hpbGRcIl0sY2hhcjpcIvCfkajigI3wn5GmXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFtaWx5X21hbl9naXJsOntrZXl3b3JkczpbXCJob21lXCIsXCJwYXJlbnRcIixcInBlb3BsZVwiLFwiaHVtYW5cIixcImNoaWxkXCJdLGNoYXI6XCLwn5Go4oCN8J+Rp1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGZhbWlseV9tYW5fZ2lybF9ib3k6e2tleXdvcmRzOltcImhvbWVcIixcInBhcmVudFwiLFwicGVvcGxlXCIsXCJodW1hblwiLFwiY2hpbGRyZW5cIl0sY2hhcjpcIvCfkajigI3wn5Gn4oCN8J+RplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGZhbWlseV9tYW5fYm95X2JveTp7a2V5d29yZHM6W1wiaG9tZVwiLFwicGFyZW50XCIsXCJwZW9wbGVcIixcImh1bWFuXCIsXCJjaGlsZHJlblwiXSxjaGFyOlwi8J+RqOKAjfCfkabigI3wn5GmXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZmFtaWx5X21hbl9naXJsX2dpcmw6e2tleXdvcmRzOltcImhvbWVcIixcInBhcmVudFwiLFwicGVvcGxlXCIsXCJodW1hblwiLFwiY2hpbGRyZW5cIl0sY2hhcjpcIvCfkajigI3wn5Gn4oCN8J+Rp1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHlhcm46e2tleXdvcmRzOltcImJhbGxcIixcImNyb2NoZXRcIixcImtuaXRcIl0sY2hhcjpcIvCfp7ZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSx0aHJlYWQ6e2tleXdvcmRzOltcIm5lZWRsZVwiLFwic2V3aW5nXCIsXCJzcG9vbFwiLFwic3RyaW5nXCJdLGNoYXI6XCLwn6e1XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sY29hdDp7a2V5d29yZHM6W1wiamFja2V0XCJdLGNoYXI6XCLwn6elXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbGFiY29hdDp7a2V5d29yZHM6W1wiZG9jdG9yXCIsXCJleHBlcmltZW50XCIsXCJzY2llbnRpc3RcIixcImNoZW1pc3RcIl0sY2hhcjpcIvCfpbxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3b21hbnNfY2xvdGhlczp7a2V5d29yZHM6W1wiZmFzaGlvblwiLFwic2hvcHBpbmdfYmFnc1wiLFwiZmVtYWxlXCJdLGNoYXI6XCLwn5GaXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sdHNoaXJ0OntrZXl3b3JkczpbXCJmYXNoaW9uXCIsXCJjbG90aFwiLFwiY2FzdWFsXCIsXCJzaGlydFwiLFwidGVlXCJdLGNoYXI6XCLwn5GVXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0samVhbnM6e2tleXdvcmRzOltcImZhc2hpb25cIixcInNob3BwaW5nXCJdLGNoYXI6XCLwn5GWXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbmVja3RpZTp7a2V5d29yZHM6W1wic2hpcnRcIixcInN1aXR1cFwiLFwiZm9ybWFsXCIsXCJmYXNoaW9uXCIsXCJjbG90aFwiLFwiYnVzaW5lc3NcIl0sY2hhcjpcIvCfkZRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxkcmVzczp7a2V5d29yZHM6W1wiY2xvdGhlc1wiLFwiZmFzaGlvblwiLFwic2hvcHBpbmdcIl0sY2hhcjpcIvCfkZdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxiaWtpbmk6e2tleXdvcmRzOltcInN3aW1taW5nXCIsXCJmZW1hbGVcIixcIndvbWFuXCIsXCJnaXJsXCIsXCJmYXNoaW9uXCIsXCJiZWFjaFwiLFwic3VtbWVyXCJdLGNoYXI6XCLwn5GZXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sa2ltb25vOntrZXl3b3JkczpbXCJkcmVzc1wiLFwiZmFzaGlvblwiLFwid29tZW5cIixcImZlbWFsZVwiLFwiamFwYW5lc2VcIl0sY2hhcjpcIvCfkZhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxsaXBzdGljazp7a2V5d29yZHM6W1wiZmVtYWxlXCIsXCJnaXJsXCIsXCJmYXNoaW9uXCIsXCJ3b21hblwiXSxjaGFyOlwi8J+ShFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGtpc3M6e2tleXdvcmRzOltcImZhY2VcIixcImxpcHNcIixcImxvdmVcIixcImxpa2VcIixcImFmZmVjdGlvblwiLFwidmFsZW50aW5lc1wiXSxjaGFyOlwi8J+Si1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGZvb3RwcmludHM6e2tleXdvcmRzOltcImZlZXRcIixcInRyYWNraW5nXCIsXCJ3YWxraW5nXCIsXCJiZWFjaFwiXSxjaGFyOlwi8J+Ro1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGZsYXRfc2hvZTp7a2V5d29yZHM6W1wiYmFsbGV0XCIsXCJzbGlwLW9uXCIsXCJzbGlwcGVyXCJdLGNoYXI6XCLwn6W/XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0saGlnaF9oZWVsOntrZXl3b3JkczpbXCJmYXNoaW9uXCIsXCJzaG9lc1wiLFwiZmVtYWxlXCIsXCJwdW1wc1wiLFwic3RpbGV0dG9cIl0sY2hhcjpcIvCfkaBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxzYW5kYWw6e2tleXdvcmRzOltcInNob2VzXCIsXCJmYXNoaW9uXCIsXCJmbGlwIGZsb3BzXCJdLGNoYXI6XCLwn5GhXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sYm9vdDp7a2V5d29yZHM6W1wic2hvZXNcIixcImZhc2hpb25cIl0sY2hhcjpcIvCfkaJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtYW5zX3Nob2U6e2tleXdvcmRzOltcImZhc2hpb25cIixcIm1hbGVcIl0sY2hhcjpcIvCfkZ5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxhdGhsZXRpY19zaG9lOntrZXl3b3JkczpbXCJzaG9lc1wiLFwic3BvcnRzXCIsXCJzbmVha2Vyc1wiXSxjaGFyOlwi8J+Rn1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGhpa2luZ19ib290OntrZXl3b3JkczpbXCJiYWNrcGFja2luZ1wiLFwiY2FtcGluZ1wiLFwiaGlraW5nXCJdLGNoYXI6XCLwn6W+XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sc29ja3M6e2tleXdvcmRzOltcInN0b2NraW5nc1wiLFwiY2xvdGhlc1wiXSxjaGFyOlwi8J+nplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGdsb3Zlczp7a2V5d29yZHM6W1wiaGFuZHNcIixcIndpbnRlclwiLFwiY2xvdGhlc1wiXSxjaGFyOlwi8J+npFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHNjYXJmOntrZXl3b3JkczpbXCJuZWNrXCIsXCJ3aW50ZXJcIixcImNsb3RoZXNcIl0sY2hhcjpcIvCfp6NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSx3b21hbnNfaGF0OntrZXl3b3JkczpbXCJmYXNoaW9uXCIsXCJhY2Nlc3Nvcmllc1wiLFwiZmVtYWxlXCIsXCJsYWR5XCIsXCJzcHJpbmdcIl0sY2hhcjpcIvCfkZJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSx0b3BoYXQ6e2tleXdvcmRzOltcIm1hZ2ljXCIsXCJnZW50bGVtYW5cIixcImNsYXNzeVwiLFwiY2lyY3VzXCJdLGNoYXI6XCLwn46pXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sYmlsbGVkX2hhdDp7a2V5d29yZHM6W1wiY2FwXCIsXCJiYXNlYmFsbFwiXSxjaGFyOlwi8J+nolwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LHJlc2N1ZV93b3JrZXJfaGVsbWV0OntrZXl3b3JkczpbXCJjb25zdHJ1Y3Rpb25cIixcImJ1aWxkXCJdLGNoYXI6XCLim5FcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxtb3J0YXJfYm9hcmQ6e2tleXdvcmRzOltcInNjaG9vbFwiLFwiY29sbGVnZVwiLFwiZGVncmVlXCIsXCJ1bml2ZXJzaXR5XCIsXCJncmFkdWF0aW9uXCIsXCJjYXBcIixcImhhdFwiLFwibGVnYWxcIixcImxlYXJuXCIsXCJlZHVjYXRpb25cIl0sY2hhcjpcIvCfjpNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxjcm93bjp7a2V5d29yZHM6W1wia2luZ1wiLFwia29kXCIsXCJsZWFkZXJcIixcInJveWFsdHlcIixcImxvcmRcIl0sY2hhcjpcIvCfkZFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxzY2hvb2xfc2F0Y2hlbDp7a2V5d29yZHM6W1wic3R1ZGVudFwiLFwiZWR1Y2F0aW9uXCIsXCJiYWdcIixcImJhY2twYWNrXCJdLGNoYXI6XCLwn46SXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sbHVnZ2FnZTp7a2V5d29yZHM6W1wicGFja2luZ1wiLFwidHJhdmVsXCJdLGNoYXI6XCLwn6ezXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0scG91Y2g6e2tleXdvcmRzOltcImJhZ1wiLFwiYWNjZXNzb3JpZXNcIixcInNob3BwaW5nXCJdLGNoYXI6XCLwn5GdXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0scHVyc2U6e2tleXdvcmRzOltcImZhc2hpb25cIixcImFjY2Vzc29yaWVzXCIsXCJtb25leVwiLFwic2FsZXNcIixcInNob3BwaW5nXCJdLGNoYXI6XCLwn5GbXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0saGFuZGJhZzp7a2V5d29yZHM6W1wiZmFzaGlvblwiLFwiYWNjZXNzb3J5XCIsXCJhY2Nlc3Nvcmllc1wiLFwic2hvcHBpbmdcIl0sY2hhcjpcIvCfkZxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxicmllZmNhc2U6e2tleXdvcmRzOltcImJ1c2luZXNzXCIsXCJkb2N1bWVudHNcIixcIndvcmtcIixcImxhd1wiLFwibGVnYWxcIixcImpvYlwiLFwiY2FyZWVyXCJdLGNoYXI6XCLwn5K8XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZXllZ2xhc3Nlczp7a2V5d29yZHM6W1wiZmFzaGlvblwiLFwiYWNjZXNzb3JpZXNcIixcImV5ZXNpZ2h0XCIsXCJuZXJkeVwiLFwiZG9ya1wiLFwiZ2Vla1wiXSxjaGFyOlwi8J+Rk1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwicGVvcGxlXCJ9LGRhcmtfc3VuZ2xhc3Nlczp7a2V5d29yZHM6W1wiZmFjZVwiLFwiY29vbFwiLFwiYWNjZXNzb3JpZXNcIl0sY2hhcjpcIvCflbZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxnb2dnbGVzOntrZXl3b3JkczpbXCJleWVzXCIsXCJwcm90ZWN0aW9uXCIsXCJzYWZldHlcIl0sY2hhcjpcIvCfpb1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInBlb3BsZVwifSxyaW5nOntrZXl3b3JkczpbXCJ3ZWRkaW5nXCIsXCJwcm9wb3NlXCIsXCJtYXJyaWFnZVwiLFwidmFsZW50aW5lc1wiLFwiZGlhbW9uZFwiLFwiZmFzaGlvblwiLFwiamV3ZWxyeVwiLFwiZ2VtXCIsXCJlbmdhZ2VtZW50XCJdLGNoYXI6XCLwn5KNXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sY2xvc2VkX3VtYnJlbGxhOntrZXl3b3JkczpbXCJ3ZWF0aGVyXCIsXCJyYWluXCIsXCJkcml6emxlXCJdLGNoYXI6XCLwn4yCXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJwZW9wbGVcIn0sZG9nOntrZXl3b3JkczpbXCJhbmltYWxcIixcImZyaWVuZFwiLFwibmF0dXJlXCIsXCJ3b29mXCIsXCJwdXBweVwiLFwicGV0XCIsXCJmYWl0aGZ1bFwiXSxjaGFyOlwi8J+QtlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGNhdDp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJtZW93XCIsXCJuYXR1cmVcIixcInBldFwiLFwia2l0dGVuXCJdLGNoYXI6XCLwn5CxXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sbW91c2U6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJjaGVlc2Vfd2VkZ2VcIixcInJvZGVudFwiXSxjaGFyOlwi8J+QrVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGhhbXN0ZXI6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCJdLGNoYXI6XCLwn5C5XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0scmFiYml0OntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwicGV0XCIsXCJzcHJpbmdcIixcIm1hZ2ljXCIsXCJidW5ueVwiXSxjaGFyOlwi8J+QsFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGZveF9mYWNlOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwiZmFjZVwiXSxjaGFyOlwi8J+milwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGJlYXI6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJ3aWxkXCJdLGNoYXI6XCLwn5C7XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0scGFuZGFfZmFjZTp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcInBhbmRhXCJdLGNoYXI6XCLwn5C8XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sa29hbGE6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCJdLGNoYXI6XCLwn5CoXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sdGlnZXI6e2tleXdvcmRzOltcImFuaW1hbFwiLFwiY2F0XCIsXCJkYW5nZXJcIixcIndpbGRcIixcIm5hdHVyZVwiLFwicm9hclwiXSxjaGFyOlwi8J+Qr1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGxpb246e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCJdLGNoYXI6XCLwn6aBXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sY293OntrZXl3b3JkczpbXCJiZWVmXCIsXCJveFwiLFwiYW5pbWFsXCIsXCJuYXR1cmVcIixcIm1vb1wiLFwibWlsa1wiXSxjaGFyOlwi8J+QrlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHBpZzp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJvaW5rXCIsXCJuYXR1cmVcIl0sY2hhcjpcIvCfkLdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxwaWdfbm9zZTp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJvaW5rXCJdLGNoYXI6XCLwn5C9XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sZnJvZzp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcImNyb2FrXCIsXCJ0b2FkXCJdLGNoYXI6XCLwn5C4XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sc3F1aWQ6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJvY2VhblwiLFwic2VhXCJdLGNoYXI6XCLwn6aRXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sb2N0b3B1czp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJjcmVhdHVyZVwiLFwib2NlYW5cIixcInNlYVwiLFwibmF0dXJlXCIsXCJiZWFjaFwiXSxjaGFyOlwi8J+QmVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHNocmltcDp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJvY2VhblwiLFwibmF0dXJlXCIsXCJzZWFmb29kXCJdLGNoYXI6XCLwn6aQXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sbW9ua2V5X2ZhY2U6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJjaXJjdXNcIl0sY2hhcjpcIvCfkLVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxnb3JpbGxhOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwiY2lyY3VzXCJdLGNoYXI6XCLwn6aNXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sc2VlX25vX2V2aWw6e2tleXdvcmRzOltcIm1vbmtleVwiLFwiYW5pbWFsXCIsXCJuYXR1cmVcIixcImhhaGFcIl0sY2hhcjpcIvCfmYhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxoZWFyX25vX2V2aWw6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibW9ua2V5XCIsXCJuYXR1cmVcIl0sY2hhcjpcIvCfmYlcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxzcGVha19ub19ldmlsOntrZXl3b3JkczpbXCJtb25rZXlcIixcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJvbWdcIl0sY2hhcjpcIvCfmYpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxtb25rZXk6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJiYW5hbmFcIixcImNpcmN1c1wiXSxjaGFyOlwi8J+QklwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGNoaWNrZW46e2tleXdvcmRzOltcImFuaW1hbFwiLFwiY2x1Y2tcIixcIm5hdHVyZVwiLFwiYmlyZFwiXSxjaGFyOlwi8J+QlFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHBlbmd1aW46e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCJdLGNoYXI6XCLwn5CnXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sYmlyZDp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcImZseVwiLFwidHdlZXRcIixcInNwcmluZ1wiXSxjaGFyOlwi8J+QplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGJhYnlfY2hpY2s6e2tleXdvcmRzOltcImFuaW1hbFwiLFwiY2hpY2tlblwiLFwiYmlyZFwiXSxjaGFyOlwi8J+QpFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGhhdGNoaW5nX2NoaWNrOntrZXl3b3JkczpbXCJhbmltYWxcIixcImNoaWNrZW5cIixcImVnZ1wiLFwiYm9yblwiLFwiYmFieVwiLFwiYmlyZFwiXSxjaGFyOlwi8J+Qo1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGhhdGNoZWRfY2hpY2s6e2tleXdvcmRzOltcImFuaW1hbFwiLFwiY2hpY2tlblwiLFwiYmFieVwiLFwiYmlyZFwiXSxjaGFyOlwi8J+QpVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGR1Y2s6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJiaXJkXCIsXCJtYWxsYXJkXCJdLGNoYXI6XCLwn6aGXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sZWFnbGU6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJiaXJkXCJdLGNoYXI6XCLwn6aFXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sb3dsOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwiYmlyZFwiLFwiaG9vdFwiXSxjaGFyOlwi8J+miVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGJhdDp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcImJsaW5kXCIsXCJ2YW1waXJlXCJdLGNoYXI6XCLwn6aHXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sd29sZjp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcIndpbGRcIl0sY2hhcjpcIvCfkLpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxib2FyOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiXSxjaGFyOlwi8J+Ql1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGhvcnNlOntrZXl3b3JkczpbXCJhbmltYWxcIixcImJyb3duXCIsXCJuYXR1cmVcIl0sY2hhcjpcIvCfkLRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSx1bmljb3JuOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwibXlzdGljYWxcIl0sY2hhcjpcIvCfpoRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxob25leWJlZTp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJpbnNlY3RcIixcIm5hdHVyZVwiLFwiYnVnXCIsXCJzcHJpbmdcIixcImhvbmV5XCJdLGNoYXI6XCLwn5CdXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sYnVnOntrZXl3b3JkczpbXCJhbmltYWxcIixcImluc2VjdFwiLFwibmF0dXJlXCIsXCJ3b3JtXCJdLGNoYXI6XCLwn5CbXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sYnV0dGVyZmx5OntrZXl3b3JkczpbXCJhbmltYWxcIixcImluc2VjdFwiLFwibmF0dXJlXCIsXCJjYXRlcnBpbGxhclwiXSxjaGFyOlwi8J+mi1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHNuYWlsOntrZXl3b3JkczpbXCJzbG93XCIsXCJhbmltYWxcIixcInNoZWxsXCJdLGNoYXI6XCLwn5CMXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sYmVldGxlOntrZXl3b3JkczpbXCJhbmltYWxcIixcImluc2VjdFwiLFwibmF0dXJlXCIsXCJsYWR5YnVnXCJdLGNoYXI6XCLwn5CeXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sYW50OntrZXl3b3JkczpbXCJhbmltYWxcIixcImluc2VjdFwiLFwibmF0dXJlXCIsXCJidWdcIl0sY2hhcjpcIvCfkJxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxncmFzc2hvcHBlcjp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJjcmlja2V0XCIsXCJjaGlycFwiXSxjaGFyOlwi8J+ml1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHNwaWRlcjp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJhcmFjaG5pZFwiXSxjaGFyOlwi8J+Vt1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHNjb3JwaW9uOntrZXl3b3JkczpbXCJhbmltYWxcIixcImFyYWNobmlkXCJdLGNoYXI6XCLwn6aCXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sY3JhYjp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJjcnVzdGFjZWFuXCJdLGNoYXI6XCLwn6aAXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sc25ha2U6e2tleXdvcmRzOltcImFuaW1hbFwiLFwiZXZpbFwiLFwibmF0dXJlXCIsXCJoaXNzXCIsXCJweXRob25cIl0sY2hhcjpcIvCfkI1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxsaXphcmQ6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJyZXB0aWxlXCJdLGNoYXI6XCLwn6aOXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sXCJ0LXJleFwiOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwiZGlub3NhdXJcIixcInR5cmFubm9zYXVydXNcIixcImV4dGluY3RcIl0sY2hhcjpcIvCfppZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxzYXVyb3BvZDp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcImRpbm9zYXVyXCIsXCJicmFjaGlvc2F1cnVzXCIsXCJicm9udG9zYXVydXNcIixcImRpcGxvZG9jdXNcIixcImV4dGluY3RcIl0sY2hhcjpcIvCfppVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSx0dXJ0bGU6e2tleXdvcmRzOltcImFuaW1hbFwiLFwic2xvd1wiLFwibmF0dXJlXCIsXCJ0b3J0b2lzZVwiXSxjaGFyOlwi8J+QolwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHRyb3BpY2FsX2Zpc2g6e2tleXdvcmRzOltcImFuaW1hbFwiLFwic3dpbVwiLFwib2NlYW5cIixcImJlYWNoXCIsXCJuZW1vXCJdLGNoYXI6XCLwn5CgXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sZmlzaDp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJmb29kXCIsXCJuYXR1cmVcIl0sY2hhcjpcIvCfkJ9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxibG93ZmlzaDp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcImZvb2RcIixcInNlYVwiLFwib2NlYW5cIl0sY2hhcjpcIvCfkKFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxkb2xwaGluOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwiZmlzaFwiLFwic2VhXCIsXCJvY2VhblwiLFwiZmxpcHBlclwiLFwiZmluc1wiLFwiYmVhY2hcIl0sY2hhcjpcIvCfkKxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxzaGFyazp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcImZpc2hcIixcInNlYVwiLFwib2NlYW5cIixcImphd3NcIixcImZpbnNcIixcImJlYWNoXCJdLGNoYXI6XCLwn6aIXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sd2hhbGU6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJzZWFcIixcIm9jZWFuXCJdLGNoYXI6XCLwn5CzXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sd2hhbGUyOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwic2VhXCIsXCJvY2VhblwiXSxjaGFyOlwi8J+Qi1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGNyb2NvZGlsZTp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcInJlcHRpbGVcIixcImxpemFyZFwiLFwiYWxsaWdhdG9yXCJdLGNoYXI6XCLwn5CKXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sbGVvcGFyZDp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIl0sY2hhcjpcIvCfkIZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSx6ZWJyYTp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcInN0cmlwZXNcIixcInNhZmFyaVwiXSxjaGFyOlwi8J+mk1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHRpZ2VyMjp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcInJvYXJcIl0sY2hhcjpcIvCfkIVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSx3YXRlcl9idWZmYWxvOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwib3hcIixcImNvd1wiXSxjaGFyOlwi8J+Qg1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LG94OntrZXl3b3JkczpbXCJhbmltYWxcIixcImNvd1wiLFwiYmVlZlwiXSxjaGFyOlwi8J+QglwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGNvdzI6e2tleXdvcmRzOltcImJlZWZcIixcIm94XCIsXCJhbmltYWxcIixcIm5hdHVyZVwiLFwibW9vXCIsXCJtaWxrXCJdLGNoYXI6XCLwn5CEXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sZGVlcjp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcImhvcm5zXCIsXCJ2ZW5pc29uXCJdLGNoYXI6XCLwn6aMXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sZHJvbWVkYXJ5X2NhbWVsOntrZXl3b3JkczpbXCJhbmltYWxcIixcImhvdFwiLFwiZGVzZXJ0XCIsXCJodW1wXCJdLGNoYXI6XCLwn5CqXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sY2FtZWw6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJob3RcIixcImRlc2VydFwiLFwiaHVtcFwiXSxjaGFyOlwi8J+Qq1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGdpcmFmZmU6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJzcG90c1wiLFwic2FmYXJpXCJdLGNoYXI6XCLwn6aSXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sZWxlcGhhbnQ6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJub3NlXCIsXCJ0aFwiLFwiY2lyY3VzXCJdLGNoYXI6XCLwn5CYXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0scmhpbm9jZXJvczp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcImhvcm5cIl0sY2hhcjpcIvCfpo9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxnb2F0OntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiXSxjaGFyOlwi8J+QkFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHJhbTp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJzaGVlcFwiLFwibmF0dXJlXCJdLGNoYXI6XCLwn5CPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sc2hlZXA6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJ3b29sXCIsXCJzaGlwaXRcIl0sY2hhcjpcIvCfkJFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxyYWNlaG9yc2U6e2tleXdvcmRzOltcImFuaW1hbFwiLFwiZ2FtYmxlXCIsXCJsdWNrXCJdLGNoYXI6XCLwn5COXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0scGlnMjp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIl0sY2hhcjpcIvCfkJZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxyYXQ6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibW91c2VcIixcInJvZGVudFwiXSxjaGFyOlwi8J+QgFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LG1vdXNlMjp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcInJvZGVudFwiXSxjaGFyOlwi8J+QgVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHJvb3N0ZXI6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibmF0dXJlXCIsXCJjaGlja2VuXCJdLGNoYXI6XCLwn5CTXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sdHVya2V5OntrZXl3b3JkczpbXCJhbmltYWxcIixcImJpcmRcIl0sY2hhcjpcIvCfpoNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxkb3ZlOntrZXl3b3JkczpbXCJhbmltYWxcIixcImJpcmRcIl0sY2hhcjpcIvCflYpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxkb2cyOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwiZnJpZW5kXCIsXCJkb2dlXCIsXCJwZXRcIixcImZhaXRoZnVsXCJdLGNoYXI6XCLwn5CVXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0scG9vZGxlOntrZXl3b3JkczpbXCJkb2dcIixcImFuaW1hbFwiLFwiMTAxXCIsXCJuYXR1cmVcIixcInBldFwiXSxjaGFyOlwi8J+QqVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGNhdDI6e2tleXdvcmRzOltcImFuaW1hbFwiLFwibWVvd1wiLFwicGV0XCIsXCJjYXRzXCJdLGNoYXI6XCLwn5CIXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0scmFiYml0Mjp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcInBldFwiLFwibWFnaWNcIixcInNwcmluZ1wiXSxjaGFyOlwi8J+Qh1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGNoaXBtdW5rOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwicm9kZW50XCIsXCJzcXVpcnJlbFwiXSxjaGFyOlwi8J+Qv1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGhlZGdlaG9nOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwic3BpbnlcIl0sY2hhcjpcIvCfppRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxyYWNjb29uOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiXSxjaGFyOlwi8J+mnVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGxsYW1hOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwiYWxwYWNhXCJdLGNoYXI6XCLwn6aZXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0saGlwcG9wb3RhbXVzOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiXSxjaGFyOlwi8J+mm1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGthbmdhcm9vOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwiYXVzdHJhbGlhXCIsXCJqb2V5XCIsXCJob3BcIixcIm1hcnN1cGlhbFwiXSxjaGFyOlwi8J+mmFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGJhZGdlcjp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcImhvbmV5XCJdLGNoYXI6XCLwn6ahXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sc3dhbjp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcImJpcmRcIl0sY2hhcjpcIvCfpqJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxwZWFjb2NrOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwicGVhaGVuXCIsXCJiaXJkXCJdLGNoYXI6XCLwn6aaXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0scGFycm90OntrZXl3b3JkczpbXCJhbmltYWxcIixcIm5hdHVyZVwiLFwiYmlyZFwiLFwicGlyYXRlXCIsXCJ0YWxrXCJdLGNoYXI6XCLwn6acXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sbG9ic3Rlcjp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcImJpc3F1ZVwiLFwiY2xhd3NcIixcInNlYWZvb2RcIl0sY2hhcjpcIvCfpp5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxtb3NxdWl0bzp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJuYXR1cmVcIixcImluc2VjdFwiLFwibWFsYXJpYVwiXSxjaGFyOlwi8J+mn1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHBhd19wcmludHM6e2tleXdvcmRzOltcImFuaW1hbFwiLFwidHJhY2tpbmdcIixcImZvb3RwcmludHNcIixcImRvZ1wiLFwiY2F0XCIsXCJwZXRcIixcImZlZXRcIl0sY2hhcjpcIvCfkL5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxkcmFnb246e2tleXdvcmRzOltcImFuaW1hbFwiLFwibXl0aFwiLFwibmF0dXJlXCIsXCJjaGluZXNlXCIsXCJncmVlblwiXSxjaGFyOlwi8J+QiVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGRyYWdvbl9mYWNlOntrZXl3b3JkczpbXCJhbmltYWxcIixcIm15dGhcIixcIm5hdHVyZVwiLFwiY2hpbmVzZVwiLFwiZ3JlZW5cIl0sY2hhcjpcIvCfkLJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxjYWN0dXM6e2tleXdvcmRzOltcInZlZ2V0YWJsZVwiLFwicGxhbnRcIixcIm5hdHVyZVwiXSxjaGFyOlwi8J+MtVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGNocmlzdG1hc190cmVlOntrZXl3b3JkczpbXCJmZXN0aXZhbFwiLFwidmFjYXRpb25cIixcImRlY2VtYmVyXCIsXCJ4bWFzXCIsXCJjZWxlYnJhdGlvblwiXSxjaGFyOlwi8J+OhFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGV2ZXJncmVlbl90cmVlOntrZXl3b3JkczpbXCJwbGFudFwiLFwibmF0dXJlXCJdLGNoYXI6XCLwn4yyXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sZGVjaWR1b3VzX3RyZWU6e2tleXdvcmRzOltcInBsYW50XCIsXCJuYXR1cmVcIl0sY2hhcjpcIvCfjLNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxwYWxtX3RyZWU6e2tleXdvcmRzOltcInBsYW50XCIsXCJ2ZWdldGFibGVcIixcIm5hdHVyZVwiLFwic3VtbWVyXCIsXCJiZWFjaFwiLFwibW9qaXRvXCIsXCJ0cm9waWNhbFwiXSxjaGFyOlwi8J+MtFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHNlZWRsaW5nOntrZXl3b3JkczpbXCJwbGFudFwiLFwibmF0dXJlXCIsXCJncmFzc1wiLFwibGF3blwiLFwic3ByaW5nXCJdLGNoYXI6XCLwn4yxXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0saGVyYjp7a2V5d29yZHM6W1widmVnZXRhYmxlXCIsXCJwbGFudFwiLFwibWVkaWNpbmVcIixcIndlZWRcIixcImdyYXNzXCIsXCJsYXduXCJdLGNoYXI6XCLwn4y/XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sc2hhbXJvY2s6e2tleXdvcmRzOltcInZlZ2V0YWJsZVwiLFwicGxhbnRcIixcIm5hdHVyZVwiLFwiaXJpc2hcIixcImNsb3ZlclwiXSxjaGFyOlwi4piYXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sZm91cl9sZWFmX2Nsb3Zlcjp7a2V5d29yZHM6W1widmVnZXRhYmxlXCIsXCJwbGFudFwiLFwibmF0dXJlXCIsXCJsdWNreVwiLFwiaXJpc2hcIl0sY2hhcjpcIvCfjYBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxiYW1ib286e2tleXdvcmRzOltcInBsYW50XCIsXCJuYXR1cmVcIixcInZlZ2V0YWJsZVwiLFwicGFuZGFcIixcInBpbmVfZGVjb3JhdGlvblwiXSxjaGFyOlwi8J+OjVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHRhbmFiYXRhX3RyZWU6e2tleXdvcmRzOltcInBsYW50XCIsXCJuYXR1cmVcIixcImJyYW5jaFwiLFwic3VtbWVyXCJdLGNoYXI6XCLwn46LXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sbGVhdmVzOntrZXl3b3JkczpbXCJuYXR1cmVcIixcInBsYW50XCIsXCJ0cmVlXCIsXCJ2ZWdldGFibGVcIixcImdyYXNzXCIsXCJsYXduXCIsXCJzcHJpbmdcIl0sY2hhcjpcIvCfjYNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxmYWxsZW5fbGVhZjp7a2V5d29yZHM6W1wibmF0dXJlXCIsXCJwbGFudFwiLFwidmVnZXRhYmxlXCIsXCJsZWF2ZXNcIl0sY2hhcjpcIvCfjYJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxtYXBsZV9sZWFmOntrZXl3b3JkczpbXCJuYXR1cmVcIixcInBsYW50XCIsXCJ2ZWdldGFibGVcIixcImNhXCIsXCJmYWxsXCJdLGNoYXI6XCLwn42BXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sZWFyX29mX3JpY2U6e2tleXdvcmRzOltcIm5hdHVyZVwiLFwicGxhbnRcIl0sY2hhcjpcIvCfjL5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxoaWJpc2N1czp7a2V5d29yZHM6W1wicGxhbnRcIixcInZlZ2V0YWJsZVwiLFwiZmxvd2Vyc1wiLFwiYmVhY2hcIl0sY2hhcjpcIvCfjLpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxzdW5mbG93ZXI6e2tleXdvcmRzOltcIm5hdHVyZVwiLFwicGxhbnRcIixcImZhbGxcIl0sY2hhcjpcIvCfjLtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxyb3NlOntrZXl3b3JkczpbXCJmbG93ZXJzXCIsXCJ2YWxlbnRpbmVzXCIsXCJsb3ZlXCIsXCJzcHJpbmdcIl0sY2hhcjpcIvCfjLlcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSx3aWx0ZWRfZmxvd2VyOntrZXl3b3JkczpbXCJwbGFudFwiLFwibmF0dXJlXCIsXCJmbG93ZXJcIl0sY2hhcjpcIvCfpYBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSx0dWxpcDp7a2V5d29yZHM6W1wiZmxvd2Vyc1wiLFwicGxhbnRcIixcIm5hdHVyZVwiLFwic3VtbWVyXCIsXCJzcHJpbmdcIl0sY2hhcjpcIvCfjLdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxibG9zc29tOntrZXl3b3JkczpbXCJuYXR1cmVcIixcImZsb3dlcnNcIixcInllbGxvd1wiXSxjaGFyOlwi8J+MvFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGNoZXJyeV9ibG9zc29tOntrZXl3b3JkczpbXCJuYXR1cmVcIixcInBsYW50XCIsXCJzcHJpbmdcIixcImZsb3dlclwiXSxjaGFyOlwi8J+MuFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGJvdXF1ZXQ6e2tleXdvcmRzOltcImZsb3dlcnNcIixcIm5hdHVyZVwiLFwic3ByaW5nXCJdLGNoYXI6XCLwn5KQXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sbXVzaHJvb206e2tleXdvcmRzOltcInBsYW50XCIsXCJ2ZWdldGFibGVcIl0sY2hhcjpcIvCfjYRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxjaGVzdG51dDp7a2V5d29yZHM6W1wiZm9vZFwiLFwic3F1aXJyZWxcIl0sY2hhcjpcIvCfjLBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxqYWNrX29fbGFudGVybjp7a2V5d29yZHM6W1wiaGFsbG93ZWVuXCIsXCJsaWdodFwiLFwicHVtcGtpblwiLFwiY3JlZXB5XCIsXCJmYWxsXCJdLGNoYXI6XCLwn46DXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sc2hlbGw6e2tleXdvcmRzOltcIm5hdHVyZVwiLFwic2VhXCIsXCJiZWFjaFwiXSxjaGFyOlwi8J+QmlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHNwaWRlcl93ZWI6e2tleXdvcmRzOltcImFuaW1hbFwiLFwiaW5zZWN0XCIsXCJhcmFjaG5pZFwiLFwic2lsa1wiXSxjaGFyOlwi8J+VuFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGVhcnRoX2FtZXJpY2FzOntrZXl3b3JkczpbXCJnbG9iZVwiLFwid29ybGRcIixcIlVTQVwiLFwiaW50ZXJuYXRpb25hbFwiXSxjaGFyOlwi8J+MjlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGVhcnRoX2FmcmljYTp7a2V5d29yZHM6W1wiZ2xvYmVcIixcIndvcmxkXCIsXCJpbnRlcm5hdGlvbmFsXCJdLGNoYXI6XCLwn4yNXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sZWFydGhfYXNpYTp7a2V5d29yZHM6W1wiZ2xvYmVcIixcIndvcmxkXCIsXCJlYXN0XCIsXCJpbnRlcm5hdGlvbmFsXCJdLGNoYXI6XCLwn4yPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sZnVsbF9tb29uOntrZXl3b3JkczpbXCJuYXR1cmVcIixcInllbGxvd1wiLFwidHdpbGlnaHRcIixcInBsYW5ldFwiLFwic3BhY2VcIixcIm5pZ2h0XCIsXCJldmVuaW5nXCIsXCJzbGVlcFwiXSxjaGFyOlwi8J+MlVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHdhbmluZ19naWJib3VzX21vb246e2tleXdvcmRzOltcIm5hdHVyZVwiLFwidHdpbGlnaHRcIixcInBsYW5ldFwiLFwic3BhY2VcIixcIm5pZ2h0XCIsXCJldmVuaW5nXCIsXCJzbGVlcFwiLFwid2F4aW5nX2dpYmJvdXNfbW9vblwiXSxjaGFyOlwi8J+MllwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGxhc3RfcXVhcnRlcl9tb29uOntrZXl3b3JkczpbXCJuYXR1cmVcIixcInR3aWxpZ2h0XCIsXCJwbGFuZXRcIixcInNwYWNlXCIsXCJuaWdodFwiLFwiZXZlbmluZ1wiLFwic2xlZXBcIl0sY2hhcjpcIvCfjJdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSx3YW5pbmdfY3Jlc2NlbnRfbW9vbjp7a2V5d29yZHM6W1wibmF0dXJlXCIsXCJ0d2lsaWdodFwiLFwicGxhbmV0XCIsXCJzcGFjZVwiLFwibmlnaHRcIixcImV2ZW5pbmdcIixcInNsZWVwXCJdLGNoYXI6XCLwn4yYXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sbmV3X21vb246e2tleXdvcmRzOltcIm5hdHVyZVwiLFwidHdpbGlnaHRcIixcInBsYW5ldFwiLFwic3BhY2VcIixcIm5pZ2h0XCIsXCJldmVuaW5nXCIsXCJzbGVlcFwiXSxjaGFyOlwi8J+MkVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHdheGluZ19jcmVzY2VudF9tb29uOntrZXl3b3JkczpbXCJuYXR1cmVcIixcInR3aWxpZ2h0XCIsXCJwbGFuZXRcIixcInNwYWNlXCIsXCJuaWdodFwiLFwiZXZlbmluZ1wiLFwic2xlZXBcIl0sY2hhcjpcIvCfjJJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxmaXJzdF9xdWFydGVyX21vb246e2tleXdvcmRzOltcIm5hdHVyZVwiLFwidHdpbGlnaHRcIixcInBsYW5ldFwiLFwic3BhY2VcIixcIm5pZ2h0XCIsXCJldmVuaW5nXCIsXCJzbGVlcFwiXSxjaGFyOlwi8J+Mk1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHdheGluZ19naWJib3VzX21vb246e2tleXdvcmRzOltcIm5hdHVyZVwiLFwibmlnaHRcIixcInNreVwiLFwiZ3JheVwiLFwidHdpbGlnaHRcIixcInBsYW5ldFwiLFwic3BhY2VcIixcImV2ZW5pbmdcIixcInNsZWVwXCJdLGNoYXI6XCLwn4yUXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sbmV3X21vb25fd2l0aF9mYWNlOntrZXl3b3JkczpbXCJuYXR1cmVcIixcInR3aWxpZ2h0XCIsXCJwbGFuZXRcIixcInNwYWNlXCIsXCJuaWdodFwiLFwiZXZlbmluZ1wiLFwic2xlZXBcIl0sY2hhcjpcIvCfjJpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxmdWxsX21vb25fd2l0aF9mYWNlOntrZXl3b3JkczpbXCJuYXR1cmVcIixcInR3aWxpZ2h0XCIsXCJwbGFuZXRcIixcInNwYWNlXCIsXCJuaWdodFwiLFwiZXZlbmluZ1wiLFwic2xlZXBcIl0sY2hhcjpcIvCfjJ1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxmaXJzdF9xdWFydGVyX21vb25fd2l0aF9mYWNlOntrZXl3b3JkczpbXCJuYXR1cmVcIixcInR3aWxpZ2h0XCIsXCJwbGFuZXRcIixcInNwYWNlXCIsXCJuaWdodFwiLFwiZXZlbmluZ1wiLFwic2xlZXBcIl0sY2hhcjpcIvCfjJtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxsYXN0X3F1YXJ0ZXJfbW9vbl93aXRoX2ZhY2U6e2tleXdvcmRzOltcIm5hdHVyZVwiLFwidHdpbGlnaHRcIixcInBsYW5ldFwiLFwic3BhY2VcIixcIm5pZ2h0XCIsXCJldmVuaW5nXCIsXCJzbGVlcFwiXSxjaGFyOlwi8J+MnFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHN1bl93aXRoX2ZhY2U6e2tleXdvcmRzOltcIm5hdHVyZVwiLFwibW9ybmluZ1wiLFwic2t5XCJdLGNoYXI6XCLwn4yeXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sY3Jlc2NlbnRfbW9vbjp7a2V5d29yZHM6W1wibmlnaHRcIixcInNsZWVwXCIsXCJza3lcIixcImV2ZW5pbmdcIixcIm1hZ2ljXCJdLGNoYXI6XCLwn4yZXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sc3Rhcjp7a2V5d29yZHM6W1wibmlnaHRcIixcInllbGxvd1wiXSxjaGFyOlwi4q2QXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sc3RhcjI6e2tleXdvcmRzOltcIm5pZ2h0XCIsXCJzcGFya2xlXCIsXCJhd2Vzb21lXCIsXCJnb29kXCIsXCJtYWdpY1wiXSxjaGFyOlwi8J+Mn1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGRpenp5OntrZXl3b3JkczpbXCJzdGFyXCIsXCJzcGFya2xlXCIsXCJzaG9vdFwiLFwibWFnaWNcIl0sY2hhcjpcIvCfkqtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxzcGFya2xlczp7a2V5d29yZHM6W1wic3RhcnNcIixcInNoaW5lXCIsXCJzaGlueVwiLFwiY29vbFwiLFwiYXdlc29tZVwiLFwiZ29vZFwiLFwibWFnaWNcIl0sY2hhcjpcIuKcqFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGNvbWV0OntrZXl3b3JkczpbXCJzcGFjZVwiXSxjaGFyOlwi4piEXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sc3Vubnk6e2tleXdvcmRzOltcIndlYXRoZXJcIixcIm5hdHVyZVwiLFwiYnJpZ2h0bmVzc1wiLFwic3VtbWVyXCIsXCJiZWFjaFwiLFwic3ByaW5nXCJdLGNoYXI6XCLimIDvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxzdW5fYmVoaW5kX3NtYWxsX2Nsb3VkOntrZXl3b3JkczpbXCJ3ZWF0aGVyXCJdLGNoYXI6XCLwn4ykXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0scGFydGx5X3N1bm55OntrZXl3b3JkczpbXCJ3ZWF0aGVyXCIsXCJuYXR1cmVcIixcImNsb3VkeVwiLFwibW9ybmluZ1wiLFwiZmFsbFwiLFwic3ByaW5nXCJdLGNoYXI6XCLim4VcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxzdW5fYmVoaW5kX2xhcmdlX2Nsb3VkOntrZXl3b3JkczpbXCJ3ZWF0aGVyXCJdLGNoYXI6XCLwn4ylXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sc3VuX2JlaGluZF9yYWluX2Nsb3VkOntrZXl3b3JkczpbXCJ3ZWF0aGVyXCJdLGNoYXI6XCLwn4ymXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sY2xvdWQ6e2tleXdvcmRzOltcIndlYXRoZXJcIixcInNreVwiXSxjaGFyOlwi4piB77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sY2xvdWRfd2l0aF9yYWluOntrZXl3b3JkczpbXCJ3ZWF0aGVyXCJdLGNoYXI6XCLwn4ynXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sY2xvdWRfd2l0aF9saWdodG5pbmdfYW5kX3JhaW46e2tleXdvcmRzOltcIndlYXRoZXJcIixcImxpZ2h0bmluZ1wiXSxjaGFyOlwi4puIXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sY2xvdWRfd2l0aF9saWdodG5pbmc6e2tleXdvcmRzOltcIndlYXRoZXJcIixcInRodW5kZXJcIl0sY2hhcjpcIvCfjKlcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSx6YXA6e2tleXdvcmRzOltcInRodW5kZXJcIixcIndlYXRoZXJcIixcImxpZ2h0bmluZyBib2x0XCIsXCJmYXN0XCJdLGNoYXI6XCLimqFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxmaXJlOntrZXl3b3JkczpbXCJob3RcIixcImNvb2tcIixcImZsYW1lXCJdLGNoYXI6XCLwn5SlXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sYm9vbTp7a2V5d29yZHM6W1wiYm9tYlwiLFwiZXhwbG9kZVwiLFwiZXhwbG9zaW9uXCIsXCJjb2xsaXNpb25cIixcImJsb3duXCJdLGNoYXI6XCLwn5KlXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sc25vd2ZsYWtlOntrZXl3b3JkczpbXCJ3aW50ZXJcIixcInNlYXNvblwiLFwiY29sZFwiLFwid2VhdGhlclwiLFwiY2hyaXN0bWFzXCIsXCJ4bWFzXCJdLGNoYXI6XCLinYTvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxjbG91ZF93aXRoX3Nub3c6e2tleXdvcmRzOltcIndlYXRoZXJcIl0sY2hhcjpcIvCfjKhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxzbm93bWFuOntrZXl3b3JkczpbXCJ3aW50ZXJcIixcInNlYXNvblwiLFwiY29sZFwiLFwid2VhdGhlclwiLFwiY2hyaXN0bWFzXCIsXCJ4bWFzXCIsXCJmcm96ZW5cIixcIndpdGhvdXRfc25vd1wiXSxjaGFyOlwi4puEXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sc25vd21hbl93aXRoX3Nub3c6e2tleXdvcmRzOltcIndpbnRlclwiLFwic2Vhc29uXCIsXCJjb2xkXCIsXCJ3ZWF0aGVyXCIsXCJjaHJpc3RtYXNcIixcInhtYXNcIixcImZyb3plblwiXSxjaGFyOlwi4piDXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sd2luZF9mYWNlOntrZXl3b3JkczpbXCJndXN0XCIsXCJhaXJcIl0sY2hhcjpcIvCfjKxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFuaW1hbHNfYW5kX25hdHVyZVwifSxkYXNoOntrZXl3b3JkczpbXCJ3aW5kXCIsXCJhaXJcIixcImZhc3RcIixcInNob29cIixcImZhcnRcIixcInNtb2tlXCIsXCJwdWZmXCJdLGNoYXI6XCLwn5KoXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sdG9ybmFkbzp7a2V5d29yZHM6W1wid2VhdGhlclwiLFwiY3ljbG9uZVwiLFwidHdpc3RlclwiXSxjaGFyOlwi8J+MqlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGZvZzp7a2V5d29yZHM6W1wid2VhdGhlclwiXSxjaGFyOlwi8J+Mq1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LG9wZW5fdW1icmVsbGE6e2tleXdvcmRzOltcIndlYXRoZXJcIixcInNwcmluZ1wiXSxjaGFyOlwi4piCXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sdW1icmVsbGE6e2tleXdvcmRzOltcInJhaW55XCIsXCJ3ZWF0aGVyXCIsXCJzcHJpbmdcIl0sY2hhcjpcIuKYlFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LGRyb3BsZXQ6e2tleXdvcmRzOltcIndhdGVyXCIsXCJkcmlwXCIsXCJmYXVjZXRcIixcInNwcmluZ1wiXSxjaGFyOlwi8J+Sp1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LHN3ZWF0X2Ryb3BzOntrZXl3b3JkczpbXCJ3YXRlclwiLFwiZHJpcFwiLFwib29wc1wiXSxjaGFyOlwi8J+SplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYW5pbWFsc19hbmRfbmF0dXJlXCJ9LG9jZWFuOntrZXl3b3JkczpbXCJzZWFcIixcIndhdGVyXCIsXCJ3YXZlXCIsXCJuYXR1cmVcIixcInRzdW5hbWlcIixcImRpc2FzdGVyXCJdLGNoYXI6XCLwn4yKXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhbmltYWxzX2FuZF9uYXR1cmVcIn0sZ3JlZW5fYXBwbGU6e2tleXdvcmRzOltcImZydWl0XCIsXCJuYXR1cmVcIl0sY2hhcjpcIvCfjY9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGFwcGxlOntrZXl3b3JkczpbXCJmcnVpdFwiLFwibWFjXCIsXCJzY2hvb2xcIl0sY2hhcjpcIvCfjY5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHBlYXI6e2tleXdvcmRzOltcImZydWl0XCIsXCJuYXR1cmVcIixcImZvb2RcIl0sY2hhcjpcIvCfjZBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHRhbmdlcmluZTp7a2V5d29yZHM6W1wiZm9vZFwiLFwiZnJ1aXRcIixcIm5hdHVyZVwiLFwib3JhbmdlXCJdLGNoYXI6XCLwn42KXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxsZW1vbjp7a2V5d29yZHM6W1wiZnJ1aXRcIixcIm5hdHVyZVwiXSxjaGFyOlwi8J+Ni1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sYmFuYW5hOntrZXl3b3JkczpbXCJmcnVpdFwiLFwiZm9vZFwiLFwibW9ua2V5XCJdLGNoYXI6XCLwn42MXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSx3YXRlcm1lbG9uOntrZXl3b3JkczpbXCJmcnVpdFwiLFwiZm9vZFwiLFwicGljbmljXCIsXCJzdW1tZXJcIl0sY2hhcjpcIvCfjYlcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGdyYXBlczp7a2V5d29yZHM6W1wiZnJ1aXRcIixcImZvb2RcIixcIndpbmVcIl0sY2hhcjpcIvCfjYdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHN0cmF3YmVycnk6e2tleXdvcmRzOltcImZydWl0XCIsXCJmb29kXCIsXCJuYXR1cmVcIl0sY2hhcjpcIvCfjZNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LG1lbG9uOntrZXl3b3JkczpbXCJmcnVpdFwiLFwibmF0dXJlXCIsXCJmb29kXCJdLGNoYXI6XCLwn42IXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxjaGVycmllczp7a2V5d29yZHM6W1wiZm9vZFwiLFwiZnJ1aXRcIl0sY2hhcjpcIvCfjZJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHBlYWNoOntrZXl3b3JkczpbXCJmcnVpdFwiLFwibmF0dXJlXCIsXCJmb29kXCJdLGNoYXI6XCLwn42RXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxwaW5lYXBwbGU6e2tleXdvcmRzOltcImZydWl0XCIsXCJuYXR1cmVcIixcImZvb2RcIl0sY2hhcjpcIvCfjY1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGNvY29udXQ6e2tleXdvcmRzOltcImZydWl0XCIsXCJuYXR1cmVcIixcImZvb2RcIixcInBhbG1cIl0sY2hhcjpcIvCfpaVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGtpd2lfZnJ1aXQ6e2tleXdvcmRzOltcImZydWl0XCIsXCJmb29kXCJdLGNoYXI6XCLwn6WdXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxtYW5nbzp7a2V5d29yZHM6W1wiZnJ1aXRcIixcImZvb2RcIixcInRyb3BpY2FsXCJdLGNoYXI6XCLwn6WtXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxhdm9jYWRvOntrZXl3b3JkczpbXCJmcnVpdFwiLFwiZm9vZFwiXSxjaGFyOlwi8J+lkVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sYnJvY2NvbGk6e2tleXdvcmRzOltcImZydWl0XCIsXCJmb29kXCIsXCJ2ZWdldGFibGVcIl0sY2hhcjpcIvCfpaZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHRvbWF0bzp7a2V5d29yZHM6W1wiZnJ1aXRcIixcInZlZ2V0YWJsZVwiLFwibmF0dXJlXCIsXCJmb29kXCJdLGNoYXI6XCLwn42FXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxlZ2dwbGFudDp7a2V5d29yZHM6W1widmVnZXRhYmxlXCIsXCJuYXR1cmVcIixcImZvb2RcIixcImF1YmVyZ2luZVwiXSxjaGFyOlwi8J+NhlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sY3VjdW1iZXI6e2tleXdvcmRzOltcImZydWl0XCIsXCJmb29kXCIsXCJwaWNrbGVcIl0sY2hhcjpcIvCfpZJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGNhcnJvdDp7a2V5d29yZHM6W1widmVnZXRhYmxlXCIsXCJmb29kXCIsXCJvcmFuZ2VcIl0sY2hhcjpcIvCfpZVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGhvdF9wZXBwZXI6e2tleXdvcmRzOltcImZvb2RcIixcInNwaWN5XCIsXCJjaGlsbGlcIixcImNoaWxpXCJdLGNoYXI6XCLwn4y2XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxwb3RhdG86e2tleXdvcmRzOltcImZvb2RcIixcInR1YmVyXCIsXCJ2ZWdhdGFibGVcIixcInN0YXJjaFwiXSxjaGFyOlwi8J+llFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sY29ybjp7a2V5d29yZHM6W1wiZm9vZFwiLFwidmVnZXRhYmxlXCIsXCJwbGFudFwiXSxjaGFyOlwi8J+MvVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sbGVhZnlfZ3JlZW5zOntrZXl3b3JkczpbXCJmb29kXCIsXCJ2ZWdldGFibGVcIixcInBsYW50XCIsXCJib2sgY2hveVwiLFwiY2FiYmFnZVwiLFwia2FsZVwiLFwibGV0dHVjZVwiXSxjaGFyOlwi8J+lrFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sc3dlZXRfcG90YXRvOntrZXl3b3JkczpbXCJmb29kXCIsXCJuYXR1cmVcIl0sY2hhcjpcIvCfjaBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHBlYW51dHM6e2tleXdvcmRzOltcImZvb2RcIixcIm51dFwiXSxjaGFyOlwi8J+lnFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0saG9uZXlfcG90OntrZXl3b3JkczpbXCJiZWVzXCIsXCJzd2VldFwiLFwia2l0Y2hlblwiXSxjaGFyOlwi8J+Nr1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sY3JvaXNzYW50OntrZXl3b3JkczpbXCJmb29kXCIsXCJicmVhZFwiLFwiZnJlbmNoXCJdLGNoYXI6XCLwn6WQXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxicmVhZDp7a2V5d29yZHM6W1wiZm9vZFwiLFwid2hlYXRcIixcImJyZWFrZmFzdFwiLFwidG9hc3RcIl0sY2hhcjpcIvCfjZ5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGJhZ3VldHRlX2JyZWFkOntrZXl3b3JkczpbXCJmb29kXCIsXCJicmVhZFwiLFwiZnJlbmNoXCJdLGNoYXI6XCLwn6WWXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxiYWdlbDp7a2V5d29yZHM6W1wiZm9vZFwiLFwiYnJlYWRcIixcImJha2VyeVwiLFwic2NobWVhclwiXSxjaGFyOlwi8J+lr1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0scHJldHplbDp7a2V5d29yZHM6W1wiZm9vZFwiLFwiYnJlYWRcIixcInR3aXN0ZWRcIl0sY2hhcjpcIvCfpahcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGNoZWVzZTp7a2V5d29yZHM6W1wiZm9vZFwiLFwiY2hhZGRlclwiXSxjaGFyOlwi8J+ngFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sZWdnOntrZXl3b3JkczpbXCJmb29kXCIsXCJjaGlja2VuXCIsXCJicmVha2Zhc3RcIl0sY2hhcjpcIvCfpZpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGJhY29uOntrZXl3b3JkczpbXCJmb29kXCIsXCJicmVha2Zhc3RcIixcInBvcmtcIixcInBpZ1wiLFwibWVhdFwiXSxjaGFyOlwi8J+lk1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sc3RlYWs6e2tleXdvcmRzOltcImZvb2RcIixcImNvd1wiLFwibWVhdFwiLFwiY3V0XCIsXCJjaG9wXCIsXCJsYW1iY2hvcFwiLFwicG9ya2Nob3BcIl0sY2hhcjpcIvCfpalcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHBhbmNha2VzOntrZXl3b3JkczpbXCJmb29kXCIsXCJicmVha2Zhc3RcIixcImZsYXBqYWNrc1wiLFwiaG90Y2FrZXNcIl0sY2hhcjpcIvCfpZ5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHBvdWx0cnlfbGVnOntrZXl3b3JkczpbXCJmb29kXCIsXCJtZWF0XCIsXCJkcnVtc3RpY2tcIixcImJpcmRcIixcImNoaWNrZW5cIixcInR1cmtleVwiXSxjaGFyOlwi8J+Nl1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sbWVhdF9vbl9ib25lOntrZXl3b3JkczpbXCJnb29kXCIsXCJmb29kXCIsXCJkcnVtc3RpY2tcIl0sY2hhcjpcIvCfjZZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGJvbmU6e2tleXdvcmRzOltcInNrZWxldG9uXCJdLGNoYXI6XCLwn6a0XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxmcmllZF9zaHJpbXA6e2tleXdvcmRzOltcImZvb2RcIixcImFuaW1hbFwiLFwiYXBwZXRpemVyXCIsXCJzdW1tZXJcIl0sY2hhcjpcIvCfjaRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGZyaWVkX2VnZzp7a2V5d29yZHM6W1wiZm9vZFwiLFwiYnJlYWtmYXN0XCIsXCJraXRjaGVuXCIsXCJlZ2dcIl0sY2hhcjpcIvCfjbNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGhhbWJ1cmdlcjp7a2V5d29yZHM6W1wibWVhdFwiLFwiZmFzdCBmb29kXCIsXCJiZWVmXCIsXCJjaGVlc2VidXJnZXJcIixcIm1jZG9uYWxkc1wiLFwiYnVyZ2VyIGtpbmdcIl0sY2hhcjpcIvCfjZRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGZyaWVzOntrZXl3b3JkczpbXCJjaGlwc1wiLFwic25hY2tcIixcImZhc3QgZm9vZFwiXSxjaGFyOlwi8J+Nn1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sc3R1ZmZlZF9mbGF0YnJlYWQ6e2tleXdvcmRzOltcImZvb2RcIixcImZsYXRicmVhZFwiLFwic3R1ZmZlZFwiLFwiZ3lyb1wiXSxjaGFyOlwi8J+lmVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0saG90ZG9nOntrZXl3b3JkczpbXCJmb29kXCIsXCJmcmFua2Z1cnRlclwiXSxjaGFyOlwi8J+MrVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0scGl6emE6e2tleXdvcmRzOltcImZvb2RcIixcInBhcnR5XCJdLGNoYXI6XCLwn42VXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxzYW5kd2ljaDp7a2V5d29yZHM6W1wiZm9vZFwiLFwibHVuY2hcIixcImJyZWFkXCJdLGNoYXI6XCLwn6WqXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxjYW5uZWRfZm9vZDp7a2V5d29yZHM6W1wiZm9vZFwiLFwic291cFwiXSxjaGFyOlwi8J+lq1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sc3BhZ2hldHRpOntrZXl3b3JkczpbXCJmb29kXCIsXCJpdGFsaWFuXCIsXCJub29kbGVcIl0sY2hhcjpcIvCfjZ1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHRhY286e2tleXdvcmRzOltcImZvb2RcIixcIm1leGljYW5cIl0sY2hhcjpcIvCfjK5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGJ1cnJpdG86e2tleXdvcmRzOltcImZvb2RcIixcIm1leGljYW5cIl0sY2hhcjpcIvCfjK9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGdyZWVuX3NhbGFkOntrZXl3b3JkczpbXCJmb29kXCIsXCJoZWFsdGh5XCIsXCJsZXR0dWNlXCJdLGNoYXI6XCLwn6WXXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxzaGFsbG93X3Bhbl9vZl9mb29kOntrZXl3b3JkczpbXCJmb29kXCIsXCJjb29raW5nXCIsXCJjYXNzZXJvbGVcIixcInBhZWxsYVwiXSxjaGFyOlwi8J+lmFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0scmFtZW46e2tleXdvcmRzOltcImZvb2RcIixcImphcGFuZXNlXCIsXCJub29kbGVcIixcImNob3BzdGlja3NcIl0sY2hhcjpcIvCfjZxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHN0ZXc6e2tleXdvcmRzOltcImZvb2RcIixcIm1lYXRcIixcInNvdXBcIl0sY2hhcjpcIvCfjbJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGZpc2hfY2FrZTp7a2V5d29yZHM6W1wiZm9vZFwiLFwiamFwYW5cIixcInNlYVwiLFwiYmVhY2hcIixcIm5hcnV0b21ha2lcIixcInBpbmtcIixcInN3aXJsXCIsXCJrYW1hYm9rb1wiLFwic3VyaW1pXCIsXCJyYW1lblwiXSxjaGFyOlwi8J+NpVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sZm9ydHVuZV9jb29raWU6e2tleXdvcmRzOltcImZvb2RcIixcInByb3BoZWN5XCJdLGNoYXI6XCLwn6WgXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxzdXNoaTp7a2V5d29yZHM6W1wiZm9vZFwiLFwiZmlzaFwiLFwiamFwYW5lc2VcIixcInJpY2VcIl0sY2hhcjpcIvCfjaNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGJlbnRvOntrZXl3b3JkczpbXCJmb29kXCIsXCJqYXBhbmVzZVwiLFwiYm94XCJdLGNoYXI6XCLwn42xXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxjdXJyeTp7a2V5d29yZHM6W1wiZm9vZFwiLFwic3BpY3lcIixcImhvdFwiLFwiaW5kaWFuXCJdLGNoYXI6XCLwn42bXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxyaWNlX2JhbGw6e2tleXdvcmRzOltcImZvb2RcIixcImphcGFuZXNlXCJdLGNoYXI6XCLwn42ZXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxyaWNlOntrZXl3b3JkczpbXCJmb29kXCIsXCJjaGluYVwiLFwiYXNpYW5cIl0sY2hhcjpcIvCfjZpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHJpY2VfY3JhY2tlcjp7a2V5d29yZHM6W1wiZm9vZFwiLFwiamFwYW5lc2VcIl0sY2hhcjpcIvCfjZhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LG9kZW46e2tleXdvcmRzOltcImZvb2RcIixcImphcGFuZXNlXCJdLGNoYXI6XCLwn42iXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxkYW5nbzp7a2V5d29yZHM6W1wiZm9vZFwiLFwiZGVzc2VydFwiLFwic3dlZXRcIixcImphcGFuZXNlXCIsXCJiYXJiZWN1ZVwiLFwibWVhdFwiXSxjaGFyOlwi8J+NoVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sc2hhdmVkX2ljZTp7a2V5d29yZHM6W1wiaG90XCIsXCJkZXNzZXJ0XCIsXCJzdW1tZXJcIl0sY2hhcjpcIvCfjadcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGljZV9jcmVhbTp7a2V5d29yZHM6W1wiZm9vZFwiLFwiaG90XCIsXCJkZXNzZXJ0XCJdLGNoYXI6XCLwn42oXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxpY2VjcmVhbTp7a2V5d29yZHM6W1wiZm9vZFwiLFwiaG90XCIsXCJkZXNzZXJ0XCIsXCJzdW1tZXJcIl0sY2hhcjpcIvCfjaZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHBpZTp7a2V5d29yZHM6W1wiZm9vZFwiLFwiZGVzc2VydFwiLFwicGFzdHJ5XCJdLGNoYXI6XCLwn6WnXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxjYWtlOntrZXl3b3JkczpbXCJmb29kXCIsXCJkZXNzZXJ0XCJdLGNoYXI6XCLwn42wXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxjdXBjYWtlOntrZXl3b3JkczpbXCJmb29kXCIsXCJkZXNzZXJ0XCIsXCJiYWtlcnlcIixcInN3ZWV0XCJdLGNoYXI6XCLwn6eBXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxtb29uX2Nha2U6e2tleXdvcmRzOltcImZvb2RcIixcImF1dHVtblwiXSxjaGFyOlwi8J+lrlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sYmlydGhkYXk6e2tleXdvcmRzOltcImZvb2RcIixcImRlc3NlcnRcIixcImNha2VcIl0sY2hhcjpcIvCfjoJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGN1c3RhcmQ6e2tleXdvcmRzOltcImRlc3NlcnRcIixcImZvb2RcIl0sY2hhcjpcIvCfja5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGNhbmR5OntrZXl3b3JkczpbXCJzbmFja1wiLFwiZGVzc2VydFwiLFwic3dlZXRcIixcImxvbGx5XCJdLGNoYXI6XCLwn42sXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxsb2xsaXBvcDp7a2V5d29yZHM6W1wiZm9vZFwiLFwic25hY2tcIixcImNhbmR5XCIsXCJzd2VldFwiXSxjaGFyOlwi8J+NrVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sY2hvY29sYXRlX2Jhcjp7a2V5d29yZHM6W1wiZm9vZFwiLFwic25hY2tcIixcImRlc3NlcnRcIixcInN3ZWV0XCJdLGNoYXI6XCLwn42rXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxwb3Bjb3JuOntrZXl3b3JkczpbXCJmb29kXCIsXCJtb3ZpZSB0aGVhdGVyXCIsXCJmaWxtc1wiLFwic25hY2tcIl0sY2hhcjpcIvCfjb9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGR1bXBsaW5nOntrZXl3b3JkczpbXCJmb29kXCIsXCJlbXBhbmFkYVwiLFwicGllcm9naVwiLFwicG90c3RpY2tlclwiXSxjaGFyOlwi8J+ln1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sZG91Z2hudXQ6e2tleXdvcmRzOltcImZvb2RcIixcImRlc3NlcnRcIixcInNuYWNrXCIsXCJzd2VldFwiLFwiZG9udXRcIl0sY2hhcjpcIvCfjalcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGNvb2tpZTp7a2V5d29yZHM6W1wiZm9vZFwiLFwic25hY2tcIixcIm9yZW9cIixcImNob2NvbGF0ZVwiLFwic3dlZXRcIixcImRlc3NlcnRcIl0sY2hhcjpcIvCfjapcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LG1pbGtfZ2xhc3M6e2tleXdvcmRzOltcImJldmVyYWdlXCIsXCJkcmlua1wiLFwiY293XCJdLGNoYXI6XCLwn6WbXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxiZWVyOntrZXl3b3JkczpbXCJyZWxheFwiLFwiYmV2ZXJhZ2VcIixcImRyaW5rXCIsXCJkcnVua1wiLFwicGFydHlcIixcInB1YlwiLFwic3VtbWVyXCIsXCJhbGNvaG9sXCIsXCJib296ZVwiXSxjaGFyOlwi8J+NulwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sYmVlcnM6e2tleXdvcmRzOltcInJlbGF4XCIsXCJiZXZlcmFnZVwiLFwiZHJpbmtcIixcImRydW5rXCIsXCJwYXJ0eVwiLFwicHViXCIsXCJzdW1tZXJcIixcImFsY29ob2xcIixcImJvb3plXCJdLGNoYXI6XCLwn427XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxjbGlua2luZ19nbGFzc2VzOntrZXl3b3JkczpbXCJiZXZlcmFnZVwiLFwiZHJpbmtcIixcInBhcnR5XCIsXCJhbGNvaG9sXCIsXCJjZWxlYnJhdGVcIixcImNoZWVyc1wiLFwid2luZVwiLFwiY2hhbXBhZ25lXCIsXCJ0b2FzdFwiXSxjaGFyOlwi8J+lglwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sd2luZV9nbGFzczp7a2V5d29yZHM6W1wiZHJpbmtcIixcImJldmVyYWdlXCIsXCJkcnVua1wiLFwiYWxjb2hvbFwiLFwiYm9vemVcIl0sY2hhcjpcIvCfjbdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHR1bWJsZXJfZ2xhc3M6e2tleXdvcmRzOltcImRyaW5rXCIsXCJiZXZlcmFnZVwiLFwiZHJ1bmtcIixcImFsY29ob2xcIixcImxpcXVvclwiLFwiYm9vemVcIixcImJvdXJib25cIixcInNjb3RjaFwiLFwid2hpc2t5XCIsXCJnbGFzc1wiLFwic2hvdFwiXSxjaGFyOlwi8J+lg1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sY29ja3RhaWw6e2tleXdvcmRzOltcImRyaW5rXCIsXCJkcnVua1wiLFwiYWxjb2hvbFwiLFwiYmV2ZXJhZ2VcIixcImJvb3plXCIsXCJtb2ppdG9cIl0sY2hhcjpcIvCfjbhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHRyb3BpY2FsX2RyaW5rOntrZXl3b3JkczpbXCJiZXZlcmFnZVwiLFwiY29ja3RhaWxcIixcInN1bW1lclwiLFwiYmVhY2hcIixcImFsY29ob2xcIixcImJvb3plXCIsXCJtb2ppdG9cIl0sY2hhcjpcIvCfjblcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGNoYW1wYWduZTp7a2V5d29yZHM6W1wiZHJpbmtcIixcIndpbmVcIixcImJvdHRsZVwiLFwiY2VsZWJyYXRpb25cIl0sY2hhcjpcIvCfjb5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHNha2U6e2tleXdvcmRzOltcIndpbmVcIixcImRyaW5rXCIsXCJkcnVua1wiLFwiYmV2ZXJhZ2VcIixcImphcGFuZXNlXCIsXCJhbGNvaG9sXCIsXCJib296ZVwiXSxjaGFyOlwi8J+NtlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sdGVhOntrZXl3b3JkczpbXCJkcmlua1wiLFwiYm93bFwiLFwiYnJlYWtmYXN0XCIsXCJncmVlblwiLFwiYnJpdGlzaFwiXSxjaGFyOlwi8J+NtVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0sY3VwX3dpdGhfc3RyYXc6e2tleXdvcmRzOltcImRyaW5rXCIsXCJzb2RhXCJdLGNoYXI6XCLwn6WkXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxjb2ZmZWU6e2tleXdvcmRzOltcImJldmVyYWdlXCIsXCJjYWZmZWluZVwiLFwibGF0dGVcIixcImVzcHJlc3NvXCJdLGNoYXI6XCLimJVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGJhYnlfYm90dGxlOntrZXl3b3JkczpbXCJmb29kXCIsXCJjb250YWluZXJcIixcIm1pbGtcIl0sY2hhcjpcIvCfjbxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LHNhbHQ6e2tleXdvcmRzOltcImNvbmRpbWVudFwiLFwic2hha2VyXCJdLGNoYXI6XCLwn6eCXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxzcG9vbjp7a2V5d29yZHM6W1wiY3V0bGVyeVwiLFwia2l0Y2hlblwiLFwidGFibGV3YXJlXCJdLGNoYXI6XCLwn6WEXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxmb3JrX2FuZF9rbmlmZTp7a2V5d29yZHM6W1wiY3V0bGVyeVwiLFwia2l0Y2hlblwiXSxjaGFyOlwi8J+NtFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZm9vZF9hbmRfZHJpbmtcIn0scGxhdGVfd2l0aF9jdXRsZXJ5OntrZXl3b3JkczpbXCJmb29kXCIsXCJlYXRcIixcIm1lYWxcIixcImx1bmNoXCIsXCJkaW5uZXJcIixcInJlc3RhdXJhbnRcIl0sY2hhcjpcIvCfjb1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZvb2RfYW5kX2RyaW5rXCJ9LGJvd2xfd2l0aF9zcG9vbjp7a2V5d29yZHM6W1wiZm9vZFwiLFwiYnJlYWtmYXN0XCIsXCJjZXJlYWxcIixcIm9hdG1lYWxcIixcInBvcnJpZGdlXCJdLGNoYXI6XCLwn6WjXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSx0YWtlb3V0X2JveDp7a2V5d29yZHM6W1wiZm9vZFwiLFwibGVmdG92ZXJzXCJdLGNoYXI6XCLwn6WhXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxjaG9wc3RpY2tzOntrZXl3b3JkczpbXCJmb29kXCJdLGNoYXI6XCLwn6WiXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmb29kX2FuZF9kcmlua1wifSxzb2NjZXI6e2tleXdvcmRzOltcInNwb3J0c1wiLFwiZm9vdGJhbGxcIl0sY2hhcjpcIuKavVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sYmFza2V0YmFsbDp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJiYWxsc1wiLFwiTkJBXCJdLGNoYXI6XCLwn4+AXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxmb290YmFsbDp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJiYWxsc1wiLFwiTkZMXCJdLGNoYXI6XCLwn4+IXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxiYXNlYmFsbDp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJiYWxsc1wiXSxjaGFyOlwi4pq+XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxzb2Z0YmFsbDp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJiYWxsc1wiXSxjaGFyOlwi8J+ljlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sdGVubmlzOntrZXl3b3JkczpbXCJzcG9ydHNcIixcImJhbGxzXCIsXCJncmVlblwiXSxjaGFyOlwi8J+OvlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sdm9sbGV5YmFsbDp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJiYWxsc1wiXSxjaGFyOlwi8J+PkFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0scnVnYnlfZm9vdGJhbGw6e2tleXdvcmRzOltcInNwb3J0c1wiLFwidGVhbVwiXSxjaGFyOlwi8J+PiVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sZmx5aW5nX2Rpc2M6e2tleXdvcmRzOltcInNwb3J0c1wiLFwiZnJpc2JlZVwiLFwidWx0aW1hdGVcIl0sY2hhcjpcIvCfpY9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LFwiOGJhbGxcIjp7a2V5d29yZHM6W1wicG9vbFwiLFwiaG9iYnlcIixcImdhbWVcIixcImx1Y2tcIixcIm1hZ2ljXCJdLGNoYXI6XCLwn46xXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxnb2xmOntrZXl3b3JkczpbXCJzcG9ydHNcIixcImJ1c2luZXNzXCIsXCJmbGFnXCIsXCJob2xlXCIsXCJzdW1tZXJcIl0sY2hhcjpcIuKbs1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sZ29sZmluZ193b21hbjp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJidXNpbmVzc1wiLFwid29tYW5cIixcImZlbWFsZVwiXSxjaGFyOlwi8J+PjO+4j+KAjeKZgO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sZ29sZmluZ19tYW46e2tleXdvcmRzOltcInNwb3J0c1wiLFwiYnVzaW5lc3NcIl0sY2hhcjpcIvCfj4xcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0scGluZ19wb25nOntrZXl3b3JkczpbXCJzcG9ydHNcIixcInBpbmdwb25nXCJdLGNoYXI6XCLwn4+TXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxiYWRtaW50b246e2tleXdvcmRzOltcInNwb3J0c1wiXSxjaGFyOlwi8J+PuFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sZ29hbF9uZXQ6e2tleXdvcmRzOltcInNwb3J0c1wiXSxjaGFyOlwi8J+lhVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0saWNlX2hvY2tleTp7a2V5d29yZHM6W1wic3BvcnRzXCJdLGNoYXI6XCLwn4+SXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxmaWVsZF9ob2NrZXk6e2tleXdvcmRzOltcInNwb3J0c1wiXSxjaGFyOlwi8J+PkVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sbGFjcm9zc2U6e2tleXdvcmRzOltcInNwb3J0c1wiLFwiYmFsbFwiLFwic3RpY2tcIl0sY2hhcjpcIvCfpY1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LGNyaWNrZXQ6e2tleXdvcmRzOltcInNwb3J0c1wiXSxjaGFyOlwi8J+Pj1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sc2tpOntrZXl3b3JkczpbXCJzcG9ydHNcIixcIndpbnRlclwiLFwiY29sZFwiLFwic25vd1wiXSxjaGFyOlwi8J+Ov1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sc2tpZXI6e2tleXdvcmRzOltcInNwb3J0c1wiLFwid2ludGVyXCIsXCJzbm93XCJdLGNoYXI6XCLim7dcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LHNub3dib2FyZGVyOntrZXl3b3JkczpbXCJzcG9ydHNcIixcIndpbnRlclwiXSxjaGFyOlwi8J+PglwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxwZXJzb25fZmVuY2luZzp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJmZW5jaW5nXCIsXCJzd29yZFwiXSxjaGFyOlwi8J+kulwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sd29tZW5fd3Jlc3RsaW5nOntrZXl3b3JkczpbXCJzcG9ydHNcIixcIndyZXN0bGVyc1wiXSxjaGFyOlwi8J+kvOKAjeKZgO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sbWVuX3dyZXN0bGluZzp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJ3cmVzdGxlcnNcIl0sY2hhcjpcIvCfpLzigI3imYLvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LHdvbWFuX2NhcnR3aGVlbGluZzp7a2V5d29yZHM6W1wiZ3ltbmFzdGljc1wiXSxjaGFyOlwi8J+kuOKAjeKZgO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxtYW5fY2FydHdoZWVsaW5nOntrZXl3b3JkczpbXCJneW1uYXN0aWNzXCJdLGNoYXI6XCLwn6S44oCN4pmC77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LHdvbWFuX3BsYXlpbmdfaGFuZGJhbGw6e2tleXdvcmRzOltcInNwb3J0c1wiXSxjaGFyOlwi8J+kvuKAjeKZgO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxtYW5fcGxheWluZ19oYW5kYmFsbDp7a2V5d29yZHM6W1wic3BvcnRzXCJdLGNoYXI6XCLwn6S+4oCN4pmC77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LGljZV9za2F0ZTp7a2V5d29yZHM6W1wic3BvcnRzXCJdLGNoYXI6XCLim7hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LGN1cmxpbmdfc3RvbmU6e2tleXdvcmRzOltcInNwb3J0c1wiXSxjaGFyOlwi8J+ljFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sc2thdGVib2FyZDp7a2V5d29yZHM6W1wiYm9hcmRcIl0sY2hhcjpcIvCfm7lcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LHNsZWQ6e2tleXdvcmRzOltcInNsZWlnaFwiLFwibHVnZVwiLFwidG9ib2dnYW5cIl0sY2hhcjpcIvCfm7dcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LGJvd19hbmRfYXJyb3c6e2tleXdvcmRzOltcInNwb3J0c1wiXSxjaGFyOlwi8J+PuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sZmlzaGluZ19wb2xlX2FuZF9maXNoOntrZXl3b3JkczpbXCJmb29kXCIsXCJob2JieVwiLFwic3VtbWVyXCJdLGNoYXI6XCLwn46jXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxib3hpbmdfZ2xvdmU6e2tleXdvcmRzOltcInNwb3J0c1wiLFwiZmlnaHRpbmdcIl0sY2hhcjpcIvCfpYpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LG1hcnRpYWxfYXJ0c191bmlmb3JtOntrZXl3b3JkczpbXCJqdWRvXCIsXCJrYXJhdGVcIixcInRhZWt3b25kb1wiXSxjaGFyOlwi8J+li1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0scm93aW5nX3dvbWFuOntrZXl3b3JkczpbXCJzcG9ydHNcIixcImhvYmJ5XCIsXCJ3YXRlclwiLFwic2hpcFwiLFwid29tYW5cIixcImZlbWFsZVwiXSxjaGFyOlwi8J+ao+KAjeKZgO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxyb3dpbmdfbWFuOntrZXl3b3JkczpbXCJzcG9ydHNcIixcImhvYmJ5XCIsXCJ3YXRlclwiLFwic2hpcFwiXSxjaGFyOlwi8J+ao1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxjbGltYmluZ193b21hbjp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJob2JieVwiLFwid29tYW5cIixcImZlbWFsZVwiLFwicm9ja1wiXSxjaGFyOlwi8J+nl+KAjeKZgO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxjbGltYmluZ19tYW46e2tleXdvcmRzOltcInNwb3J0c1wiLFwiaG9iYnlcIixcIm1hblwiLFwibWFsZVwiLFwicm9ja1wiXSxjaGFyOlwi8J+nl+KAjeKZgu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxzd2ltbWluZ193b21hbjp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJleGVyY2lzZVwiLFwiaHVtYW5cIixcImF0aGxldGVcIixcIndhdGVyXCIsXCJzdW1tZXJcIixcIndvbWFuXCIsXCJmZW1hbGVcIl0sY2hhcjpcIvCfj4rigI3imYDvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sc3dpbW1pbmdfbWFuOntrZXl3b3JkczpbXCJzcG9ydHNcIixcImV4ZXJjaXNlXCIsXCJodW1hblwiLFwiYXRobGV0ZVwiLFwid2F0ZXJcIixcInN1bW1lclwiXSxjaGFyOlwi8J+PilwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSx3b21hbl9wbGF5aW5nX3dhdGVyX3BvbG86e2tleXdvcmRzOltcInNwb3J0c1wiLFwicG9vbFwiXSxjaGFyOlwi8J+kveKAjeKZgO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxtYW5fcGxheWluZ193YXRlcl9wb2xvOntrZXl3b3JkczpbXCJzcG9ydHNcIixcInBvb2xcIl0sY2hhcjpcIvCfpL3igI3imYLvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sd29tYW5faW5fbG90dXNfcG9zaXRpb246e2tleXdvcmRzOltcIndvbWFuXCIsXCJmZW1hbGVcIixcIm1lZGl0YXRpb25cIixcInlvZ2FcIixcInNlcmVuaXR5XCIsXCJ6ZW5cIixcIm1pbmRmdWxuZXNzXCJdLGNoYXI6XCLwn6eY4oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LG1hbl9pbl9sb3R1c19wb3NpdGlvbjp7a2V5d29yZHM6W1wibWFuXCIsXCJtYWxlXCIsXCJtZWRpdGF0aW9uXCIsXCJ5b2dhXCIsXCJzZXJlbml0eVwiLFwiemVuXCIsXCJtaW5kZnVsbmVzc1wiXSxjaGFyOlwi8J+nmOKAjeKZgu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxzdXJmaW5nX3dvbWFuOntrZXl3b3JkczpbXCJzcG9ydHNcIixcIm9jZWFuXCIsXCJzZWFcIixcInN1bW1lclwiLFwiYmVhY2hcIixcIndvbWFuXCIsXCJmZW1hbGVcIl0sY2hhcjpcIvCfj4TigI3imYDvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sc3VyZmluZ19tYW46e2tleXdvcmRzOltcInNwb3J0c1wiLFwib2NlYW5cIixcInNlYVwiLFwic3VtbWVyXCIsXCJiZWFjaFwiXSxjaGFyOlwi8J+PhFwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxiYXRoOntrZXl3b3JkczpbXCJjbGVhblwiLFwic2hvd2VyXCIsXCJiYXRocm9vbVwiXSxjaGFyOlwi8J+bgFwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxiYXNrZXRiYWxsX3dvbWFuOntrZXl3b3JkczpbXCJzcG9ydHNcIixcImh1bWFuXCIsXCJ3b21hblwiLFwiZmVtYWxlXCJdLGNoYXI6XCLim7nvuI/igI3imYDvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sYmFza2V0YmFsbF9tYW46e2tleXdvcmRzOltcInNwb3J0c1wiLFwiaHVtYW5cIl0sY2hhcjpcIuKbuVwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSx3ZWlnaHRfbGlmdGluZ193b21hbjp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJ0cmFpbmluZ1wiLFwiZXhlcmNpc2VcIixcIndvbWFuXCIsXCJmZW1hbGVcIl0sY2hhcjpcIvCfj4vvuI/igI3imYDvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sd2VpZ2h0X2xpZnRpbmdfbWFuOntrZXl3b3JkczpbXCJzcG9ydHNcIixcInRyYWluaW5nXCIsXCJleGVyY2lzZVwiXSxjaGFyOlwi8J+Pi1wiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxiaWtpbmdfd29tYW46e2tleXdvcmRzOltcInNwb3J0c1wiLFwiYmlrZVwiLFwiZXhlcmNpc2VcIixcImhpcHN0ZXJcIixcIndvbWFuXCIsXCJmZW1hbGVcIl0sY2hhcjpcIvCfmrTigI3imYDvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sYmlraW5nX21hbjp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJiaWtlXCIsXCJleGVyY2lzZVwiLFwiaGlwc3RlclwiXSxjaGFyOlwi8J+atFwiLGZpdHpwYXRyaWNrX3NjYWxlOnRydWUsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxtb3VudGFpbl9iaWtpbmdfd29tYW46e2tleXdvcmRzOltcInRyYW5zcG9ydGF0aW9uXCIsXCJzcG9ydHNcIixcImh1bWFuXCIsXCJyYWNlXCIsXCJiaWtlXCIsXCJ3b21hblwiLFwiZmVtYWxlXCJdLGNoYXI6XCLwn5q14oCN4pmA77iPXCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LG1vdW50YWluX2Jpa2luZ19tYW46e2tleXdvcmRzOltcInRyYW5zcG9ydGF0aW9uXCIsXCJzcG9ydHNcIixcImh1bWFuXCIsXCJyYWNlXCIsXCJiaWtlXCJdLGNoYXI6XCLwn5q1XCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LGhvcnNlX3JhY2luZzp7a2V5d29yZHM6W1wiYW5pbWFsXCIsXCJiZXR0aW5nXCIsXCJjb21wZXRpdGlvblwiLFwiZ2FtYmxpbmdcIixcImx1Y2tcIl0sY2hhcjpcIvCfj4dcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sYnVzaW5lc3Nfc3VpdF9sZXZpdGF0aW5nOntrZXl3b3JkczpbXCJzdWl0XCIsXCJidXNpbmVzc1wiLFwibGV2aXRhdGVcIixcImhvdmVyXCIsXCJqdW1wXCJdLGNoYXI6XCLwn5W0XCIsZml0enBhdHJpY2tfc2NhbGU6dHJ1ZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LHRyb3BoeTp7a2V5d29yZHM6W1wid2luXCIsXCJhd2FyZFwiLFwiY29udGVzdFwiLFwicGxhY2VcIixcImZ0d1wiLFwiY2VyZW1vbnlcIl0sY2hhcjpcIvCfj4ZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LHJ1bm5pbmdfc2hpcnRfd2l0aF9zYXNoOntrZXl3b3JkczpbXCJwbGF5XCIsXCJwYWdlYW50XCJdLGNoYXI6XCLwn469XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxtZWRhbF9zcG9ydHM6e2tleXdvcmRzOltcImF3YXJkXCIsXCJ3aW5uaW5nXCJdLGNoYXI6XCLwn4+FXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxtZWRhbF9taWxpdGFyeTp7a2V5d29yZHM6W1wiYXdhcmRcIixcIndpbm5pbmdcIixcImFybXlcIl0sY2hhcjpcIvCfjpZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LFwiMXN0X3BsYWNlX21lZGFsXCI6e2tleXdvcmRzOltcImF3YXJkXCIsXCJ3aW5uaW5nXCIsXCJmaXJzdFwiXSxjaGFyOlwi8J+lh1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sXCIybmRfcGxhY2VfbWVkYWxcIjp7a2V5d29yZHM6W1wiYXdhcmRcIixcInNlY29uZFwiXSxjaGFyOlwi8J+liFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sXCIzcmRfcGxhY2VfbWVkYWxcIjp7a2V5d29yZHM6W1wiYXdhcmRcIixcInRoaXJkXCJdLGNoYXI6XCLwn6WJXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxyZW1pbmRlcl9yaWJib246e2tleXdvcmRzOltcInNwb3J0c1wiLFwiY2F1c2VcIixcInN1cHBvcnRcIixcImF3YXJlbmVzc1wiXSxjaGFyOlwi8J+Ol1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0scm9zZXR0ZTp7a2V5d29yZHM6W1wiZmxvd2VyXCIsXCJkZWNvcmF0aW9uXCIsXCJtaWxpdGFyeVwiXSxjaGFyOlwi8J+PtVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sdGlja2V0OntrZXl3b3JkczpbXCJldmVudFwiLFwiY29uY2VydFwiLFwicGFzc1wiXSxjaGFyOlwi8J+Oq1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sdGlja2V0czp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJjb25jZXJ0XCIsXCJlbnRyYW5jZVwiXSxjaGFyOlwi8J+On1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0scGVyZm9ybWluZ19hcnRzOntrZXl3b3JkczpbXCJhY3RpbmdcIixcInRoZWF0ZXJcIixcImRyYW1hXCJdLGNoYXI6XCLwn46tXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxhcnQ6e2tleXdvcmRzOltcImRlc2lnblwiLFwicGFpbnRcIixcImRyYXdcIixcImNvbG9yc1wiXSxjaGFyOlwi8J+OqFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sY2lyY3VzX3RlbnQ6e2tleXdvcmRzOltcImZlc3RpdmFsXCIsXCJjYXJuaXZhbFwiLFwicGFydHlcIl0sY2hhcjpcIvCfjqpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LHdvbWFuX2p1Z2dsaW5nOntrZXl3b3JkczpbXCJqdWdnbGVcIixcImJhbGFuY2VcIixcInNraWxsXCIsXCJtdWx0aXRhc2tcIl0sY2hhcjpcIvCfpLnigI3imYDvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sbWFuX2p1Z2dsaW5nOntrZXl3b3JkczpbXCJqdWdnbGVcIixcImJhbGFuY2VcIixcInNraWxsXCIsXCJtdWx0aXRhc2tcIl0sY2hhcjpcIvCfpLnigI3imYLvuI9cIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sbWljcm9waG9uZTp7a2V5d29yZHM6W1wic291bmRcIixcIm11c2ljXCIsXCJQQVwiLFwic2luZ1wiLFwidGFsa3Nob3dcIl0sY2hhcjpcIvCfjqRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LGhlYWRwaG9uZXM6e2tleXdvcmRzOltcIm11c2ljXCIsXCJzY29yZVwiLFwiZ2FkZ2V0c1wiXSxjaGFyOlwi8J+Op1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sbXVzaWNhbF9zY29yZTp7a2V5d29yZHM6W1widHJlYmxlXCIsXCJjbGVmXCIsXCJjb21wb3NlXCJdLGNoYXI6XCLwn468XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxtdXNpY2FsX2tleWJvYXJkOntrZXl3b3JkczpbXCJwaWFub1wiLFwiaW5zdHJ1bWVudFwiLFwiY29tcG9zZVwiXSxjaGFyOlwi8J+OuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sZHJ1bTp7a2V5d29yZHM6W1wibXVzaWNcIixcImluc3RydW1lbnRcIixcImRydW1zdGlja3NcIixcInNuYXJlXCJdLGNoYXI6XCLwn6WBXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxzYXhvcGhvbmU6e2tleXdvcmRzOltcIm11c2ljXCIsXCJpbnN0cnVtZW50XCIsXCJqYXp6XCIsXCJibHVlc1wiXSxjaGFyOlwi8J+Ot1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sdHJ1bXBldDp7a2V5d29yZHM6W1wibXVzaWNcIixcImJyYXNzXCJdLGNoYXI6XCLwn466XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxndWl0YXI6e2tleXdvcmRzOltcIm11c2ljXCIsXCJpbnN0cnVtZW50XCJdLGNoYXI6XCLwn464XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSx2aW9saW46e2tleXdvcmRzOltcIm11c2ljXCIsXCJpbnN0cnVtZW50XCIsXCJvcmNoZXN0cmFcIixcInN5bXBob255XCJdLGNoYXI6XCLwn467XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxjbGFwcGVyOntrZXl3b3JkczpbXCJtb3ZpZVwiLFwiZmlsbVwiLFwicmVjb3JkXCJdLGNoYXI6XCLwn46sXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSx2aWRlb19nYW1lOntrZXl3b3JkczpbXCJwbGF5XCIsXCJjb25zb2xlXCIsXCJQUzRcIixcImNvbnRyb2xsZXJcIl0sY2hhcjpcIvCfjq5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LHNwYWNlX2ludmFkZXI6e2tleXdvcmRzOltcImdhbWVcIixcImFyY2FkZVwiLFwicGxheVwiXSxjaGFyOlwi8J+RvlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sZGFydDp7a2V5d29yZHM6W1wiZ2FtZVwiLFwicGxheVwiLFwiYmFyXCIsXCJ0YXJnZXRcIixcImJ1bGxzZXllXCJdLGNoYXI6XCLwn46vXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxnYW1lX2RpZTp7a2V5d29yZHM6W1wiZGljZVwiLFwicmFuZG9tXCIsXCJ0YWJsZXRvcFwiLFwicGxheVwiLFwibHVja1wiXSxjaGFyOlwi8J+OslwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sY2hlc3NfcGF3bjp7a2V5d29yZHM6W1wiZXhwZW5kYWJsZVwiXSxjaGFyOlwi4pmfXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxzbG90X21hY2hpbmU6e2tleXdvcmRzOltcImJldFwiLFwiZ2FtYmxlXCIsXCJ2ZWdhc1wiLFwiZnJ1aXQgbWFjaGluZVwiLFwibHVja1wiLFwiY2FzaW5vXCJdLGNoYXI6XCLwn46wXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJhY3Rpdml0eVwifSxqaWdzYXc6e2tleXdvcmRzOltcImludGVybG9ja2luZ1wiLFwicHV6emxlXCIsXCJwaWVjZVwiXSxjaGFyOlwi8J+nqVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiYWN0aXZpdHlcIn0sYm93bGluZzp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJmdW5cIixcInBsYXlcIl0sY2hhcjpcIvCfjrNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImFjdGl2aXR5XCJ9LHJlZF9jYXI6e2tleXdvcmRzOltcInJlZFwiLFwidHJhbnNwb3J0YXRpb25cIixcInZlaGljbGVcIl0sY2hhcjpcIvCfmpdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHRheGk6e2tleXdvcmRzOltcInViZXJcIixcInZlaGljbGVcIixcImNhcnNcIixcInRyYW5zcG9ydGF0aW9uXCJdLGNoYXI6XCLwn5qVXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxibHVlX2Nhcjp7a2V5d29yZHM6W1widHJhbnNwb3J0YXRpb25cIixcInZlaGljbGVcIl0sY2hhcjpcIvCfmplcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGJ1czp7a2V5d29yZHM6W1wiY2FyXCIsXCJ2ZWhpY2xlXCIsXCJ0cmFuc3BvcnRhdGlvblwiXSxjaGFyOlwi8J+ajFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sdHJvbGxleWJ1czp7a2V5d29yZHM6W1wiYmFydFwiLFwidHJhbnNwb3J0YXRpb25cIixcInZlaGljbGVcIl0sY2hhcjpcIvCfmo5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHJhY2luZ19jYXI6e2tleXdvcmRzOltcInNwb3J0c1wiLFwicmFjZVwiLFwiZmFzdFwiLFwiZm9ybXVsYVwiLFwiZjFcIl0sY2hhcjpcIvCfj45cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHBvbGljZV9jYXI6e2tleXdvcmRzOltcInZlaGljbGVcIixcImNhcnNcIixcInRyYW5zcG9ydGF0aW9uXCIsXCJsYXdcIixcImxlZ2FsXCIsXCJlbmZvcmNlbWVudFwiXSxjaGFyOlwi8J+ak1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sYW1idWxhbmNlOntrZXl3b3JkczpbXCJoZWFsdGhcIixcIjkxMVwiLFwiaG9zcGl0YWxcIl0sY2hhcjpcIvCfmpFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGZpcmVfZW5naW5lOntrZXl3b3JkczpbXCJ0cmFuc3BvcnRhdGlvblwiLFwiY2Fyc1wiLFwidmVoaWNsZVwiXSxjaGFyOlwi8J+aklwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sbWluaWJ1czp7a2V5d29yZHM6W1widmVoaWNsZVwiLFwiY2FyXCIsXCJ0cmFuc3BvcnRhdGlvblwiXSxjaGFyOlwi8J+akFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sdHJ1Y2s6e2tleXdvcmRzOltcImNhcnNcIixcInRyYW5zcG9ydGF0aW9uXCJdLGNoYXI6XCLwn5qaXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxhcnRpY3VsYXRlZF9sb3JyeTp7a2V5d29yZHM6W1widmVoaWNsZVwiLFwiY2Fyc1wiLFwidHJhbnNwb3J0YXRpb25cIixcImV4cHJlc3NcIl0sY2hhcjpcIvCfmptcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHRyYWN0b3I6e2tleXdvcmRzOltcInZlaGljbGVcIixcImNhclwiLFwiZmFybWluZ1wiLFwiYWdyaWN1bHR1cmVcIl0sY2hhcjpcIvCfmpxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGtpY2tfc2Nvb3Rlcjp7a2V5d29yZHM6W1widmVoaWNsZVwiLFwia2lja1wiLFwicmF6b3JcIl0sY2hhcjpcIvCfm7RcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LG1vdG9yY3ljbGU6e2tleXdvcmRzOltcInJhY2VcIixcInNwb3J0c1wiLFwiZmFzdFwiXSxjaGFyOlwi8J+PjVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sYmlrZTp7a2V5d29yZHM6W1wic3BvcnRzXCIsXCJiaWN5Y2xlXCIsXCJleGVyY2lzZVwiLFwiaGlwc3RlclwiXSxjaGFyOlwi8J+aslwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sbW90b3Jfc2Nvb3Rlcjp7a2V5d29yZHM6W1widmVoaWNsZVwiLFwidmVzcGFcIixcInNhc2hhXCJdLGNoYXI6XCLwn5u1XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxyb3RhdGluZ19saWdodDp7a2V5d29yZHM6W1wicG9saWNlXCIsXCJhbWJ1bGFuY2VcIixcIjkxMVwiLFwiZW1lcmdlbmN5XCIsXCJhbGVydFwiLFwiZXJyb3JcIixcInBpbmdlZFwiLFwibGF3XCIsXCJsZWdhbFwiXSxjaGFyOlwi8J+aqFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sb25jb21pbmdfcG9saWNlX2Nhcjp7a2V5d29yZHM6W1widmVoaWNsZVwiLFwibGF3XCIsXCJsZWdhbFwiLFwiZW5mb3JjZW1lbnRcIixcIjkxMVwiXSxjaGFyOlwi8J+alFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sb25jb21pbmdfYnVzOntrZXl3b3JkczpbXCJ2ZWhpY2xlXCIsXCJ0cmFuc3BvcnRhdGlvblwiXSxjaGFyOlwi8J+ajVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sb25jb21pbmdfYXV0b21vYmlsZTp7a2V5d29yZHM6W1wiY2FyXCIsXCJ2ZWhpY2xlXCIsXCJ0cmFuc3BvcnRhdGlvblwiXSxjaGFyOlwi8J+amFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sb25jb21pbmdfdGF4aTp7a2V5d29yZHM6W1widmVoaWNsZVwiLFwiY2Fyc1wiLFwidWJlclwiXSxjaGFyOlwi8J+allwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sYWVyaWFsX3RyYW13YXk6e2tleXdvcmRzOltcInRyYW5zcG9ydGF0aW9uXCIsXCJ2ZWhpY2xlXCIsXCJza2lcIl0sY2hhcjpcIvCfmqFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LG1vdW50YWluX2NhYmxld2F5OntrZXl3b3JkczpbXCJ0cmFuc3BvcnRhdGlvblwiLFwidmVoaWNsZVwiLFwic2tpXCJdLGNoYXI6XCLwn5qgXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxzdXNwZW5zaW9uX3JhaWx3YXk6e2tleXdvcmRzOltcInZlaGljbGVcIixcInRyYW5zcG9ydGF0aW9uXCJdLGNoYXI6XCLwn5qfXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxyYWlsd2F5X2Nhcjp7a2V5d29yZHM6W1widHJhbnNwb3J0YXRpb25cIixcInZlaGljbGVcIl0sY2hhcjpcIvCfmoNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHRyYWluOntrZXl3b3JkczpbXCJ0cmFuc3BvcnRhdGlvblwiLFwidmVoaWNsZVwiLFwiY2FycmlhZ2VcIixcInB1YmxpY1wiLFwidHJhdmVsXCJdLGNoYXI6XCLwn5qLXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxtb25vcmFpbDp7a2V5d29yZHM6W1widHJhbnNwb3J0YXRpb25cIixcInZlaGljbGVcIl0sY2hhcjpcIvCfmp1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGJ1bGxldHRyYWluX3NpZGU6e2tleXdvcmRzOltcInRyYW5zcG9ydGF0aW9uXCIsXCJ2ZWhpY2xlXCJdLGNoYXI6XCLwn5qEXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxidWxsZXR0cmFpbl9mcm9udDp7a2V5d29yZHM6W1widHJhbnNwb3J0YXRpb25cIixcInZlaGljbGVcIixcInNwZWVkXCIsXCJmYXN0XCIsXCJwdWJsaWNcIixcInRyYXZlbFwiXSxjaGFyOlwi8J+ahVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sbGlnaHRfcmFpbDp7a2V5d29yZHM6W1widHJhbnNwb3J0YXRpb25cIixcInZlaGljbGVcIl0sY2hhcjpcIvCfmohcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LG1vdW50YWluX3JhaWx3YXk6e2tleXdvcmRzOltcInRyYW5zcG9ydGF0aW9uXCIsXCJ2ZWhpY2xlXCJdLGNoYXI6XCLwn5qeXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxzdGVhbV9sb2NvbW90aXZlOntrZXl3b3JkczpbXCJ0cmFuc3BvcnRhdGlvblwiLFwidmVoaWNsZVwiLFwidHJhaW5cIl0sY2hhcjpcIvCfmoJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHRyYWluMjp7a2V5d29yZHM6W1widHJhbnNwb3J0YXRpb25cIixcInZlaGljbGVcIl0sY2hhcjpcIvCfmoZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LG1ldHJvOntrZXl3b3JkczpbXCJ0cmFuc3BvcnRhdGlvblwiLFwiYmx1ZS1zcXVhcmVcIixcIm1ydFwiLFwidW5kZXJncm91bmRcIixcInR1YmVcIl0sY2hhcjpcIvCfmodcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHRyYW06e2tleXdvcmRzOltcInRyYW5zcG9ydGF0aW9uXCIsXCJ2ZWhpY2xlXCJdLGNoYXI6XCLwn5qKXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxzdGF0aW9uOntrZXl3b3JkczpbXCJ0cmFuc3BvcnRhdGlvblwiLFwidmVoaWNsZVwiLFwicHVibGljXCJdLGNoYXI6XCLwn5qJXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxmbHlpbmdfc2F1Y2VyOntrZXl3b3JkczpbXCJ0cmFuc3BvcnRhdGlvblwiLFwidmVoaWNsZVwiLFwidWZvXCJdLGNoYXI6XCLwn5u4XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxoZWxpY29wdGVyOntrZXl3b3JkczpbXCJ0cmFuc3BvcnRhdGlvblwiLFwidmVoaWNsZVwiLFwiZmx5XCJdLGNoYXI6XCLwn5qBXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxzbWFsbF9haXJwbGFuZTp7a2V5d29yZHM6W1wiZmxpZ2h0XCIsXCJ0cmFuc3BvcnRhdGlvblwiLFwiZmx5XCIsXCJ2ZWhpY2xlXCJdLGNoYXI6XCLwn5upXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxhaXJwbGFuZTp7a2V5d29yZHM6W1widmVoaWNsZVwiLFwidHJhbnNwb3J0YXRpb25cIixcImZsaWdodFwiLFwiZmx5XCJdLGNoYXI6XCLinIjvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGZsaWdodF9kZXBhcnR1cmU6e2tleXdvcmRzOltcImFpcnBvcnRcIixcImZsaWdodFwiLFwibGFuZGluZ1wiXSxjaGFyOlwi8J+bq1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sZmxpZ2h0X2Fycml2YWw6e2tleXdvcmRzOltcImFpcnBvcnRcIixcImZsaWdodFwiLFwiYm9hcmRpbmdcIl0sY2hhcjpcIvCfm6xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHNhaWxib2F0OntrZXl3b3JkczpbXCJzaGlwXCIsXCJzdW1tZXJcIixcInRyYW5zcG9ydGF0aW9uXCIsXCJ3YXRlclwiLFwic2FpbGluZ1wiXSxjaGFyOlwi4pu1XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxtb3Rvcl9ib2F0OntrZXl3b3JkczpbXCJzaGlwXCJdLGNoYXI6XCLwn5ulXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxzcGVlZGJvYXQ6e2tleXdvcmRzOltcInNoaXBcIixcInRyYW5zcG9ydGF0aW9uXCIsXCJ2ZWhpY2xlXCIsXCJzdW1tZXJcIl0sY2hhcjpcIvCfmqRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGZlcnJ5OntrZXl3b3JkczpbXCJib2F0XCIsXCJzaGlwXCIsXCJ5YWNodFwiXSxjaGFyOlwi4pu0XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxwYXNzZW5nZXJfc2hpcDp7a2V5d29yZHM6W1wieWFjaHRcIixcImNydWlzZVwiLFwiZmVycnlcIl0sY2hhcjpcIvCfm7NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHJvY2tldDp7a2V5d29yZHM6W1wibGF1bmNoXCIsXCJzaGlwXCIsXCJzdGFmZm1vZGVcIixcIk5BU0FcIixcIm91dGVyIHNwYWNlXCIsXCJvdXRlcl9zcGFjZVwiLFwiZmx5XCJdLGNoYXI6XCLwn5qAXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxhcnRpZmljaWFsX3NhdGVsbGl0ZTp7a2V5d29yZHM6W1wiY29tbXVuaWNhdGlvblwiLFwiZ3BzXCIsXCJvcmJpdFwiLFwic3BhY2VmbGlnaHRcIixcIk5BU0FcIixcIklTU1wiXSxjaGFyOlwi8J+bsFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sc2VhdDp7a2V5d29yZHM6W1wic2l0XCIsXCJhaXJwbGFuZVwiLFwidHJhbnNwb3J0XCIsXCJidXNcIixcImZsaWdodFwiLFwiZmx5XCJdLGNoYXI6XCLwn5K6XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxjYW5vZTp7a2V5d29yZHM6W1wiYm9hdFwiLFwicGFkZGxlXCIsXCJ3YXRlclwiLFwic2hpcFwiXSxjaGFyOlwi8J+btlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sYW5jaG9yOntrZXl3b3JkczpbXCJzaGlwXCIsXCJmZXJyeVwiLFwic2VhXCIsXCJib2F0XCJdLGNoYXI6XCLimpNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGNvbnN0cnVjdGlvbjp7a2V5d29yZHM6W1wid2lwXCIsXCJwcm9ncmVzc1wiLFwiY2F1dGlvblwiLFwid2FybmluZ1wiXSxjaGFyOlwi8J+ap1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sZnVlbHB1bXA6e2tleXdvcmRzOltcImdhcyBzdGF0aW9uXCIsXCJwZXRyb2xldW1cIl0sY2hhcjpcIuKbvVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sYnVzc3RvcDp7a2V5d29yZHM6W1widHJhbnNwb3J0YXRpb25cIixcIndhaXRcIl0sY2hhcjpcIvCfmo9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHZlcnRpY2FsX3RyYWZmaWNfbGlnaHQ6e2tleXdvcmRzOltcInRyYW5zcG9ydGF0aW9uXCIsXCJkcml2aW5nXCJdLGNoYXI6XCLwn5qmXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSx0cmFmZmljX2xpZ2h0OntrZXl3b3JkczpbXCJ0cmFuc3BvcnRhdGlvblwiLFwic2lnbmFsXCJdLGNoYXI6XCLwn5qlXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxjaGVja2VyZWRfZmxhZzp7a2V5d29yZHM6W1wiY29udGVzdFwiLFwiZmluaXNobGluZVwiLFwicmFjZVwiLFwiZ29rYXJ0XCJdLGNoYXI6XCLwn4+BXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxzaGlwOntrZXl3b3JkczpbXCJ0cmFuc3BvcnRhdGlvblwiLFwidGl0YW5pY1wiLFwiZGVwbG95XCJdLGNoYXI6XCLwn5qiXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxmZXJyaXNfd2hlZWw6e2tleXdvcmRzOltcInBob3RvXCIsXCJjYXJuaXZhbFwiLFwibG9uZG9uZXllXCJdLGNoYXI6XCLwn46hXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxyb2xsZXJfY29hc3Rlcjp7a2V5d29yZHM6W1wiY2Fybml2YWxcIixcInBsYXlncm91bmRcIixcInBob3RvXCIsXCJmdW5cIl0sY2hhcjpcIvCfjqJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGNhcm91c2VsX2hvcnNlOntrZXl3b3JkczpbXCJwaG90b1wiLFwiY2Fybml2YWxcIl0sY2hhcjpcIvCfjqBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGJ1aWxkaW5nX2NvbnN0cnVjdGlvbjp7a2V5d29yZHM6W1wid2lwXCIsXCJ3b3JraW5nXCIsXCJwcm9ncmVzc1wiXSxjaGFyOlwi8J+Pl1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sZm9nZ3k6e2tleXdvcmRzOltcInBob3RvXCIsXCJtb3VudGFpblwiXSxjaGFyOlwi8J+MgVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sdG9reW9fdG93ZXI6e2tleXdvcmRzOltcInBob3RvXCIsXCJqYXBhbmVzZVwiXSxjaGFyOlwi8J+XvFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sZmFjdG9yeTp7a2V5d29yZHM6W1wiYnVpbGRpbmdcIixcImluZHVzdHJ5XCIsXCJwb2xsdXRpb25cIixcInNtb2tlXCJdLGNoYXI6XCLwn4+tXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxmb3VudGFpbjp7a2V5d29yZHM6W1wicGhvdG9cIixcInN1bW1lclwiLFwid2F0ZXJcIixcImZyZXNoXCJdLGNoYXI6XCLim7JcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHJpY2Vfc2NlbmU6e2tleXdvcmRzOltcInBob3RvXCIsXCJqYXBhblwiLFwiYXNpYVwiLFwidHN1a2ltaVwiXSxjaGFyOlwi8J+OkVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sbW91bnRhaW46e2tleXdvcmRzOltcInBob3RvXCIsXCJuYXR1cmVcIixcImVudmlyb25tZW50XCJdLGNoYXI6XCLim7BcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LG1vdW50YWluX3Nub3c6e2tleXdvcmRzOltcInBob3RvXCIsXCJuYXR1cmVcIixcImVudmlyb25tZW50XCIsXCJ3aW50ZXJcIixcImNvbGRcIl0sY2hhcjpcIvCfj5RcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LG1vdW50X2Z1amk6e2tleXdvcmRzOltcInBob3RvXCIsXCJtb3VudGFpblwiLFwibmF0dXJlXCIsXCJqYXBhbmVzZVwiXSxjaGFyOlwi8J+Xu1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sdm9sY2Fubzp7a2V5d29yZHM6W1wicGhvdG9cIixcIm5hdHVyZVwiLFwiZGlzYXN0ZXJcIl0sY2hhcjpcIvCfjItcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGphcGFuOntrZXl3b3JkczpbXCJuYXRpb25cIixcImNvdW50cnlcIixcImphcGFuZXNlXCIsXCJhc2lhXCJdLGNoYXI6XCLwn5e+XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxjYW1waW5nOntrZXl3b3JkczpbXCJwaG90b1wiLFwib3V0ZG9vcnNcIixcInRlbnRcIl0sY2hhcjpcIvCfj5VcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHRlbnQ6e2tleXdvcmRzOltcInBob3RvXCIsXCJjYW1waW5nXCIsXCJvdXRkb29yc1wiXSxjaGFyOlwi4pu6XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxuYXRpb25hbF9wYXJrOntrZXl3b3JkczpbXCJwaG90b1wiLFwiZW52aXJvbm1lbnRcIixcIm5hdHVyZVwiXSxjaGFyOlwi8J+PnlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sbW90b3J3YXk6e2tleXdvcmRzOltcInJvYWRcIixcImN1cGVydGlub1wiLFwiaW50ZXJzdGF0ZVwiLFwiaGlnaHdheVwiXSxjaGFyOlwi8J+bo1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0scmFpbHdheV90cmFjazp7a2V5d29yZHM6W1widHJhaW5cIixcInRyYW5zcG9ydGF0aW9uXCJdLGNoYXI6XCLwn5ukXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxzdW5yaXNlOntrZXl3b3JkczpbXCJtb3JuaW5nXCIsXCJ2aWV3XCIsXCJ2YWNhdGlvblwiLFwicGhvdG9cIl0sY2hhcjpcIvCfjIVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHN1bnJpc2Vfb3Zlcl9tb3VudGFpbnM6e2tleXdvcmRzOltcInZpZXdcIixcInZhY2F0aW9uXCIsXCJwaG90b1wiXSxjaGFyOlwi8J+MhFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sZGVzZXJ0OntrZXl3b3JkczpbXCJwaG90b1wiLFwid2FybVwiLFwic2FoYXJhaFwiXSxjaGFyOlwi8J+PnFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sYmVhY2hfdW1icmVsbGE6e2tleXdvcmRzOltcIndlYXRoZXJcIixcInN1bW1lclwiLFwic3VubnlcIixcInNhbmRcIixcIm1vaml0b1wiXSxjaGFyOlwi8J+PllwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sZGVzZXJ0X2lzbGFuZDp7a2V5d29yZHM6W1wicGhvdG9cIixcInRyb3BpY2FsXCIsXCJtb2ppdG9cIl0sY2hhcjpcIvCfj51cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGNpdHlfc3VucmlzZTp7a2V5d29yZHM6W1wicGhvdG9cIixcImdvb2QgbW9ybmluZ1wiLFwiZGF3blwiXSxjaGFyOlwi8J+Mh1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sY2l0eV9zdW5zZXQ6e2tleXdvcmRzOltcInBob3RvXCIsXCJldmVuaW5nXCIsXCJza3lcIixcImJ1aWxkaW5nc1wiXSxjaGFyOlwi8J+MhlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sY2l0eXNjYXBlOntrZXl3b3JkczpbXCJwaG90b1wiLFwibmlnaHQgbGlmZVwiLFwidXJiYW5cIl0sY2hhcjpcIvCfj5lcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LG5pZ2h0X3dpdGhfc3RhcnM6e2tleXdvcmRzOltcImV2ZW5pbmdcIixcImNpdHlcIixcImRvd250b3duXCJdLGNoYXI6XCLwn4yDXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxicmlkZ2VfYXRfbmlnaHQ6e2tleXdvcmRzOltcInBob3RvXCIsXCJzYW5mcmFuY2lzY29cIl0sY2hhcjpcIvCfjIlcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LG1pbGt5X3dheTp7a2V5d29yZHM6W1wicGhvdG9cIixcInNwYWNlXCIsXCJzdGFyc1wiXSxjaGFyOlwi8J+MjFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sc3RhcnM6e2tleXdvcmRzOltcIm5pZ2h0XCIsXCJwaG90b1wiXSxjaGFyOlwi8J+MoFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sc3BhcmtsZXI6e2tleXdvcmRzOltcInN0YXJzXCIsXCJuaWdodFwiLFwic2hpbmVcIl0sY2hhcjpcIvCfjodcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGZpcmV3b3Jrczp7a2V5d29yZHM6W1wicGhvdG9cIixcImZlc3RpdmFsXCIsXCJjYXJuaXZhbFwiLFwiY29uZ3JhdHVsYXRpb25zXCJdLGNoYXI6XCLwn46GXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxyYWluYm93OntrZXl3b3JkczpbXCJuYXR1cmVcIixcImhhcHB5XCIsXCJ1bmljb3JuX2ZhY2VcIixcInBob3RvXCIsXCJza3lcIixcInNwcmluZ1wiXSxjaGFyOlwi8J+MiFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0saG91c2VzOntrZXl3b3JkczpbXCJidWlsZGluZ3NcIixcInBob3RvXCJdLGNoYXI6XCLwn4+YXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxldXJvcGVhbl9jYXN0bGU6e2tleXdvcmRzOltcImJ1aWxkaW5nXCIsXCJyb3lhbHR5XCIsXCJoaXN0b3J5XCJdLGNoYXI6XCLwn4+wXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxqYXBhbmVzZV9jYXN0bGU6e2tleXdvcmRzOltcInBob3RvXCIsXCJidWlsZGluZ1wiXSxjaGFyOlwi8J+Pr1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sc3RhZGl1bTp7a2V5d29yZHM6W1wicGhvdG9cIixcInBsYWNlXCIsXCJzcG9ydHNcIixcImNvbmNlcnRcIixcInZlbnVlXCJdLGNoYXI6XCLwn4+fXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxzdGF0dWVfb2ZfbGliZXJ0eTp7a2V5d29yZHM6W1wiYW1lcmljYW5cIixcIm5ld3lvcmtcIl0sY2hhcjpcIvCfl71cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGhvdXNlOntrZXl3b3JkczpbXCJidWlsZGluZ1wiLFwiaG9tZVwiXSxjaGFyOlwi8J+PoFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0saG91c2Vfd2l0aF9nYXJkZW46e2tleXdvcmRzOltcImhvbWVcIixcInBsYW50XCIsXCJuYXR1cmVcIl0sY2hhcjpcIvCfj6FcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGRlcmVsaWN0X2hvdXNlOntrZXl3b3JkczpbXCJhYmFuZG9uXCIsXCJldmljdFwiLFwiYnJva2VuXCIsXCJidWlsZGluZ1wiXSxjaGFyOlwi8J+PmlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sb2ZmaWNlOntrZXl3b3JkczpbXCJidWlsZGluZ1wiLFwiYnVyZWF1XCIsXCJ3b3JrXCJdLGNoYXI6XCLwn4+iXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxkZXBhcnRtZW50X3N0b3JlOntrZXl3b3JkczpbXCJidWlsZGluZ1wiLFwic2hvcHBpbmdcIixcIm1hbGxcIl0sY2hhcjpcIvCfj6xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHBvc3Rfb2ZmaWNlOntrZXl3b3JkczpbXCJidWlsZGluZ1wiLFwiZW52ZWxvcGVcIixcImNvbW11bmljYXRpb25cIl0sY2hhcjpcIvCfj6NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGV1cm9wZWFuX3Bvc3Rfb2ZmaWNlOntrZXl3b3JkczpbXCJidWlsZGluZ1wiLFwiZW1haWxcIl0sY2hhcjpcIvCfj6RcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGhvc3BpdGFsOntrZXl3b3JkczpbXCJidWlsZGluZ1wiLFwiaGVhbHRoXCIsXCJzdXJnZXJ5XCIsXCJkb2N0b3JcIl0sY2hhcjpcIvCfj6VcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LGJhbms6e2tleXdvcmRzOltcImJ1aWxkaW5nXCIsXCJtb25leVwiLFwic2FsZXNcIixcImNhc2hcIixcImJ1c2luZXNzXCIsXCJlbnRlcnByaXNlXCJdLGNoYXI6XCLwn4+mXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxob3RlbDp7a2V5d29yZHM6W1wiYnVpbGRpbmdcIixcImFjY29tb2RhdGlvblwiLFwiY2hlY2tpblwiXSxjaGFyOlwi8J+PqFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sY29udmVuaWVuY2Vfc3RvcmU6e2tleXdvcmRzOltcImJ1aWxkaW5nXCIsXCJzaG9wcGluZ1wiLFwiZ3JvY2VyaWVzXCJdLGNoYXI6XCLwn4+qXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxzY2hvb2w6e2tleXdvcmRzOltcImJ1aWxkaW5nXCIsXCJzdHVkZW50XCIsXCJlZHVjYXRpb25cIixcImxlYXJuXCIsXCJ0ZWFjaFwiXSxjaGFyOlwi8J+Pq1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sbG92ZV9ob3RlbDp7a2V5d29yZHM6W1wibGlrZVwiLFwiYWZmZWN0aW9uXCIsXCJkYXRpbmdcIl0sY2hhcjpcIvCfj6lcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHdlZGRpbmc6e2tleXdvcmRzOltcImxvdmVcIixcImxpa2VcIixcImFmZmVjdGlvblwiLFwiY291cGxlXCIsXCJtYXJyaWFnZVwiLFwiYnJpZGVcIixcImdyb29tXCJdLGNoYXI6XCLwn5KSXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxjbGFzc2ljYWxfYnVpbGRpbmc6e2tleXdvcmRzOltcImFydFwiLFwiY3VsdHVyZVwiLFwiaGlzdG9yeVwiXSxjaGFyOlwi8J+Pm1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwidHJhdmVsX2FuZF9wbGFjZXNcIn0sY2h1cmNoOntrZXl3b3JkczpbXCJidWlsZGluZ1wiLFwicmVsaWdpb25cIixcImNocmlzdFwiXSxjaGFyOlwi4puqXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxtb3NxdWU6e2tleXdvcmRzOltcImlzbGFtXCIsXCJ3b3JzaGlwXCIsXCJtaW5hcmV0XCJdLGNoYXI6XCLwn5WMXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxzeW5hZ29ndWU6e2tleXdvcmRzOltcImp1ZGFpc21cIixcIndvcnNoaXBcIixcInRlbXBsZVwiLFwiamV3aXNoXCJdLGNoYXI6XCLwn5WNXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJ0cmF2ZWxfYW5kX3BsYWNlc1wifSxrYWFiYTp7a2V5d29yZHM6W1wibWVjY2FcIixcIm1vc3F1ZVwiLFwiaXNsYW1cIl0sY2hhcjpcIvCflYtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHNoaW50b19zaHJpbmU6e2tleXdvcmRzOltcInRlbXBsZVwiLFwiamFwYW5cIixcImt5b3RvXCJdLGNoYXI6XCLim6lcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInRyYXZlbF9hbmRfcGxhY2VzXCJ9LHdhdGNoOntrZXl3b3JkczpbXCJ0aW1lXCIsXCJhY2Nlc3Nvcmllc1wiXSxjaGFyOlwi4oyaXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGlwaG9uZTp7a2V5d29yZHM6W1widGVjaG5vbG9neVwiLFwiYXBwbGVcIixcImdhZGdldHNcIixcImRpYWxcIl0sY2hhcjpcIvCfk7FcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sY2FsbGluZzp7a2V5d29yZHM6W1wiaXBob25lXCIsXCJpbmNvbWluZ1wiXSxjaGFyOlwi8J+TslwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxjb21wdXRlcjp7a2V5d29yZHM6W1widGVjaG5vbG9neVwiLFwibGFwdG9wXCIsXCJzY3JlZW5cIixcImRpc3BsYXlcIixcIm1vbml0b3JcIl0sY2hhcjpcIvCfkrtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sa2V5Ym9hcmQ6e2tleXdvcmRzOltcInRlY2hub2xvZ3lcIixcImNvbXB1dGVyXCIsXCJ0eXBlXCIsXCJpbnB1dFwiLFwidGV4dFwiXSxjaGFyOlwi4oyoXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGRlc2t0b3BfY29tcHV0ZXI6e2tleXdvcmRzOltcInRlY2hub2xvZ3lcIixcImNvbXB1dGluZ1wiLFwic2NyZWVuXCJdLGNoYXI6XCLwn5alXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHByaW50ZXI6e2tleXdvcmRzOltcInBhcGVyXCIsXCJpbmtcIl0sY2hhcjpcIvCflqhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sY29tcHV0ZXJfbW91c2U6e2tleXdvcmRzOltcImNsaWNrXCJdLGNoYXI6XCLwn5axXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHRyYWNrYmFsbDp7a2V5d29yZHM6W1widGVjaG5vbG9neVwiLFwidHJhY2twYWRcIl0sY2hhcjpcIvCflrJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sam95c3RpY2s6e2tleXdvcmRzOltcImdhbWVcIixcInBsYXlcIl0sY2hhcjpcIvCflblcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sY2xhbXA6e2tleXdvcmRzOltcInRvb2xcIl0sY2hhcjpcIvCfl5xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sbWluaWRpc2M6e2tleXdvcmRzOltcInRlY2hub2xvZ3lcIixcInJlY29yZFwiLFwiZGF0YVwiLFwiZGlza1wiLFwiOTBzXCJdLGNoYXI6XCLwn5K9XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGZsb3BweV9kaXNrOntrZXl3b3JkczpbXCJvbGRzY2hvb2xcIixcInRlY2hub2xvZ3lcIixcInNhdmVcIixcIjkwc1wiLFwiODBzXCJdLGNoYXI6XCLwn5K+XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGNkOntrZXl3b3JkczpbXCJ0ZWNobm9sb2d5XCIsXCJkdmRcIixcImRpc2tcIixcImRpc2NcIixcIjkwc1wiXSxjaGFyOlwi8J+Sv1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxkdmQ6e2tleXdvcmRzOltcImNkXCIsXCJkaXNrXCIsXCJkaXNjXCJdLGNoYXI6XCLwn5OAXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHZoczp7a2V5d29yZHM6W1wicmVjb3JkXCIsXCJ2aWRlb1wiLFwib2xkc2Nob29sXCIsXCI5MHNcIixcIjgwc1wiXSxjaGFyOlwi8J+TvFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxjYW1lcmE6e2tleXdvcmRzOltcImdhZGdldHNcIixcInBob3RvZ3JhcGh5XCJdLGNoYXI6XCLwn5O3XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGNhbWVyYV9mbGFzaDp7a2V5d29yZHM6W1wicGhvdG9ncmFwaHlcIixcImdhZGdldHNcIl0sY2hhcjpcIvCfk7hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sdmlkZW9fY2FtZXJhOntrZXl3b3JkczpbXCJmaWxtXCIsXCJyZWNvcmRcIl0sY2hhcjpcIvCfk7lcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sbW92aWVfY2FtZXJhOntrZXl3b3JkczpbXCJmaWxtXCIsXCJyZWNvcmRcIl0sY2hhcjpcIvCfjqVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sZmlsbV9wcm9qZWN0b3I6e2tleXdvcmRzOltcInZpZGVvXCIsXCJ0YXBlXCIsXCJyZWNvcmRcIixcIm1vdmllXCJdLGNoYXI6XCLwn5O9XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGZpbG1fc3RyaXA6e2tleXdvcmRzOltcIm1vdmllXCJdLGNoYXI6XCLwn46eXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHRlbGVwaG9uZV9yZWNlaXZlcjp7a2V5d29yZHM6W1widGVjaG5vbG9neVwiLFwiY29tbXVuaWNhdGlvblwiLFwiZGlhbFwiXSxjaGFyOlwi8J+TnlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxwaG9uZTp7a2V5d29yZHM6W1widGVjaG5vbG9neVwiLFwiY29tbXVuaWNhdGlvblwiLFwiZGlhbFwiLFwidGVsZXBob25lXCJdLGNoYXI6XCLimI7vuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0scGFnZXI6e2tleXdvcmRzOltcImJiY2FsbFwiLFwib2xkc2Nob29sXCIsXCI5MHNcIl0sY2hhcjpcIvCfk59cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sZmF4OntrZXl3b3JkczpbXCJjb21tdW5pY2F0aW9uXCIsXCJ0ZWNobm9sb2d5XCJdLGNoYXI6XCLwn5OgXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHR2OntrZXl3b3JkczpbXCJ0ZWNobm9sb2d5XCIsXCJwcm9ncmFtXCIsXCJvbGRzY2hvb2xcIixcInNob3dcIixcInRlbGV2aXNpb25cIl0sY2hhcjpcIvCfk7pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0scmFkaW86e2tleXdvcmRzOltcImNvbW11bmljYXRpb25cIixcIm11c2ljXCIsXCJwb2RjYXN0XCIsXCJwcm9ncmFtXCJdLGNoYXI6XCLwn5O7XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHN0dWRpb19taWNyb3Bob25lOntrZXl3b3JkczpbXCJzaW5nXCIsXCJyZWNvcmRpbmdcIixcImFydGlzdFwiLFwidGFsa3Nob3dcIl0sY2hhcjpcIvCfjplcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sbGV2ZWxfc2xpZGVyOntrZXl3b3JkczpbXCJzY2FsZVwiXSxjaGFyOlwi8J+OmlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxjb250cm9sX2tub2JzOntrZXl3b3JkczpbXCJkaWFsXCJdLGNoYXI6XCLwn46bXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGNvbXBhc3M6e2tleXdvcmRzOltcIm1hZ25ldGljXCIsXCJuYXZpZ2F0aW9uXCIsXCJvcmllbnRlZXJpbmdcIl0sY2hhcjpcIvCfp61cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sc3RvcHdhdGNoOntrZXl3b3JkczpbXCJ0aW1lXCIsXCJkZWFkbGluZVwiXSxjaGFyOlwi4o+xXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHRpbWVyX2Nsb2NrOntrZXl3b3JkczpbXCJhbGFybVwiXSxjaGFyOlwi4o+yXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGFsYXJtX2Nsb2NrOntrZXl3b3JkczpbXCJ0aW1lXCIsXCJ3YWtlXCJdLGNoYXI6XCLij7BcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sbWFudGVscGllY2VfY2xvY2s6e2tleXdvcmRzOltcInRpbWVcIl0sY2hhcjpcIvCflbBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0saG91cmdsYXNzX2Zsb3dpbmdfc2FuZDp7a2V5d29yZHM6W1wib2xkc2Nob29sXCIsXCJ0aW1lXCIsXCJjb3VudGRvd25cIl0sY2hhcjpcIuKPs1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxob3VyZ2xhc3M6e2tleXdvcmRzOltcInRpbWVcIixcImNsb2NrXCIsXCJvbGRzY2hvb2xcIixcImxpbWl0XCIsXCJleGFtXCIsXCJxdWl6XCIsXCJ0ZXN0XCJdLGNoYXI6XCLijJtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sc2F0ZWxsaXRlOntrZXl3b3JkczpbXCJjb21tdW5pY2F0aW9uXCIsXCJmdXR1cmVcIixcInJhZGlvXCIsXCJzcGFjZVwiXSxjaGFyOlwi8J+ToVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxiYXR0ZXJ5OntrZXl3b3JkczpbXCJwb3dlclwiLFwiZW5lcmd5XCIsXCJzdXN0YWluXCJdLGNoYXI6XCLwn5SLXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGVsZWN0cmljX3BsdWc6e2tleXdvcmRzOltcImNoYXJnZXJcIixcInBvd2VyXCJdLGNoYXI6XCLwn5SMXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGJ1bGI6e2tleXdvcmRzOltcImxpZ2h0XCIsXCJlbGVjdHJpY2l0eVwiLFwiaWRlYVwiXSxjaGFyOlwi8J+SoVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxmbGFzaGxpZ2h0OntrZXl3b3JkczpbXCJkYXJrXCIsXCJjYW1waW5nXCIsXCJzaWdodFwiLFwibmlnaHRcIl0sY2hhcjpcIvCflKZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sY2FuZGxlOntrZXl3b3JkczpbXCJmaXJlXCIsXCJ3YXhcIl0sY2hhcjpcIvCfla9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sZmlyZV9leHRpbmd1aXNoZXI6e2tleXdvcmRzOltcInF1ZW5jaFwiXSxjaGFyOlwi8J+nr1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSx3YXN0ZWJhc2tldDp7a2V5d29yZHM6W1wiYmluXCIsXCJ0cmFzaFwiLFwicnViYmlzaFwiLFwiZ2FyYmFnZVwiLFwidG9zc1wiXSxjaGFyOlwi8J+XkVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxvaWxfZHJ1bTp7a2V5d29yZHM6W1wiYmFycmVsbFwiXSxjaGFyOlwi8J+bolwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxtb25leV93aXRoX3dpbmdzOntrZXl3b3JkczpbXCJkb2xsYXJcIixcImJpbGxzXCIsXCJwYXltZW50XCIsXCJzYWxlXCJdLGNoYXI6XCLwn5K4XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGRvbGxhcjp7a2V5d29yZHM6W1wibW9uZXlcIixcInNhbGVzXCIsXCJiaWxsXCIsXCJjdXJyZW5jeVwiXSxjaGFyOlwi8J+StVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSx5ZW46e2tleXdvcmRzOltcIm1vbmV5XCIsXCJzYWxlc1wiLFwiamFwYW5lc2VcIixcImRvbGxhclwiLFwiY3VycmVuY3lcIl0sY2hhcjpcIvCfkrRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sZXVybzp7a2V5d29yZHM6W1wibW9uZXlcIixcInNhbGVzXCIsXCJkb2xsYXJcIixcImN1cnJlbmN5XCJdLGNoYXI6XCLwn5K2XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHBvdW5kOntrZXl3b3JkczpbXCJicml0aXNoXCIsXCJzdGVybGluZ1wiLFwibW9uZXlcIixcInNhbGVzXCIsXCJiaWxsc1wiLFwidWtcIixcImVuZ2xhbmRcIixcImN1cnJlbmN5XCJdLGNoYXI6XCLwn5K3XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LG1vbmV5YmFnOntrZXl3b3JkczpbXCJkb2xsYXJcIixcInBheW1lbnRcIixcImNvaW5zXCIsXCJzYWxlXCJdLGNoYXI6XCLwn5KwXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGNyZWRpdF9jYXJkOntrZXl3b3JkczpbXCJtb25leVwiLFwic2FsZXNcIixcImRvbGxhclwiLFwiYmlsbFwiLFwicGF5bWVudFwiLFwic2hvcHBpbmdcIl0sY2hhcjpcIvCfkrNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sZ2VtOntrZXl3b3JkczpbXCJibHVlXCIsXCJydWJ5XCIsXCJkaWFtb25kXCIsXCJqZXdlbHJ5XCJdLGNoYXI6XCLwn5KOXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGJhbGFuY2Vfc2NhbGU6e2tleXdvcmRzOltcImxhd1wiLFwiZmFpcm5lc3NcIixcIndlaWdodFwiXSxjaGFyOlwi4pqWXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHRvb2xib3g6e2tleXdvcmRzOltcInRvb2xzXCIsXCJkaXlcIixcImZpeFwiLFwibWFpbnRhaW5lclwiLFwibWVjaGFuaWNcIl0sY2hhcjpcIvCfp7BcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sd3JlbmNoOntrZXl3b3JkczpbXCJ0b29sc1wiLFwiZGl5XCIsXCJpa2VhXCIsXCJmaXhcIixcIm1haW50YWluZXJcIl0sY2hhcjpcIvCflKdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0saGFtbWVyOntrZXl3b3JkczpbXCJ0b29sc1wiLFwiYnVpbGRcIixcImNyZWF0ZVwiXSxjaGFyOlwi8J+UqFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxoYW1tZXJfYW5kX3BpY2s6e2tleXdvcmRzOltcInRvb2xzXCIsXCJidWlsZFwiLFwiY3JlYXRlXCJdLGNoYXI6XCLimpJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0saGFtbWVyX2FuZF93cmVuY2g6e2tleXdvcmRzOltcInRvb2xzXCIsXCJidWlsZFwiLFwiY3JlYXRlXCJdLGNoYXI6XCLwn5ugXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHBpY2s6e2tleXdvcmRzOltcInRvb2xzXCIsXCJkaWdcIl0sY2hhcjpcIuKbj1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxudXRfYW5kX2JvbHQ6e2tleXdvcmRzOltcImhhbmR5XCIsXCJ0b29sc1wiLFwiZml4XCJdLGNoYXI6XCLwn5SpXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGdlYXI6e2tleXdvcmRzOltcImNvZ1wiXSxjaGFyOlwi4pqZXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGJyaWNrOntrZXl3b3JkczpbXCJicmlja3NcIl0sY2hhcjpcIvCfp7FcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sY2hhaW5zOntrZXl3b3JkczpbXCJsb2NrXCIsXCJhcnJlc3RcIl0sY2hhcjpcIuKbk1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxtYWduZXQ6e2tleXdvcmRzOltcImF0dHJhY3Rpb25cIixcIm1hZ25ldGljXCJdLGNoYXI6XCLwn6eyXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGd1bjp7a2V5d29yZHM6W1widmlvbGVuY2VcIixcIndlYXBvblwiLFwicGlzdG9sXCIsXCJyZXZvbHZlclwiXSxjaGFyOlwi8J+Uq1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxib21iOntrZXl3b3JkczpbXCJib29tXCIsXCJleHBsb2RlXCIsXCJleHBsb3Npb25cIixcInRlcnJvcmlzbVwiXSxjaGFyOlwi8J+So1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxmaXJlY3JhY2tlcjp7a2V5d29yZHM6W1wiZHluYW1pdGVcIixcImJvb21cIixcImV4cGxvZGVcIixcImV4cGxvc2lvblwiLFwiZXhwbG9zaXZlXCJdLGNoYXI6XCLwn6eoXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGhvY2hvOntrZXl3b3JkczpbXCJrbmlmZVwiLFwiYmxhZGVcIixcImN1dGxlcnlcIixcImtpdGNoZW5cIixcIndlYXBvblwiXSxjaGFyOlwi8J+UqlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxkYWdnZXI6e2tleXdvcmRzOltcIndlYXBvblwiXSxjaGFyOlwi8J+XoVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxjcm9zc2VkX3N3b3Jkczp7a2V5d29yZHM6W1wid2VhcG9uXCJdLGNoYXI6XCLimpRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sc2hpZWxkOntrZXl3b3JkczpbXCJwcm90ZWN0aW9uXCIsXCJzZWN1cml0eVwiXSxjaGFyOlwi8J+boVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxzbW9raW5nOntrZXl3b3JkczpbXCJraWxsc1wiLFwidG9iYWNjb1wiLFwiY2lnYXJldHRlXCIsXCJqb2ludFwiLFwic21va2VcIl0sY2hhcjpcIvCfmqxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sc2t1bGxfYW5kX2Nyb3NzYm9uZXM6e2tleXdvcmRzOltcInBvaXNvblwiLFwiZGFuZ2VyXCIsXCJkZWFkbHlcIixcInNjYXJ5XCIsXCJkZWF0aFwiLFwicGlyYXRlXCIsXCJldmlsXCJdLGNoYXI6XCLimKBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sY29mZmluOntrZXl3b3JkczpbXCJ2YW1waXJlXCIsXCJkZWFkXCIsXCJkaWVcIixcImRlYXRoXCIsXCJyaXBcIixcImdyYXZleWFyZFwiLFwiY2VtZXRlcnlcIixcImNhc2tldFwiLFwiZnVuZXJhbFwiLFwiYm94XCJdLGNoYXI6XCLimrBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sZnVuZXJhbF91cm46e2tleXdvcmRzOltcImRlYWRcIixcImRpZVwiLFwiZGVhdGhcIixcInJpcFwiLFwiYXNoZXNcIl0sY2hhcjpcIuKasVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxhbXBob3JhOntrZXl3b3JkczpbXCJ2YXNlXCIsXCJqYXJcIl0sY2hhcjpcIvCfj7pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sY3J5c3RhbF9iYWxsOntrZXl3b3JkczpbXCJkaXNjb1wiLFwicGFydHlcIixcIm1hZ2ljXCIsXCJjaXJjdXNcIixcImZvcnR1bmVfdGVsbGVyXCJdLGNoYXI6XCLwn5SuXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHByYXllcl9iZWFkczp7a2V5d29yZHM6W1wiZGhpa3JcIixcInJlbGlnaW91c1wiXSxjaGFyOlwi8J+Tv1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxuYXphcl9hbXVsZXQ6e2tleXdvcmRzOltcImJlYWRcIixcImNoYXJtXCJdLGNoYXI6XCLwn6e/XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGJhcmJlcjp7a2V5d29yZHM6W1wiaGFpclwiLFwic2Fsb25cIixcInN0eWxlXCJdLGNoYXI6XCLwn5KIXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGFsZW1iaWM6e2tleXdvcmRzOltcImRpc3RpbGxpbmdcIixcInNjaWVuY2VcIixcImV4cGVyaW1lbnRcIixcImNoZW1pc3RyeVwiXSxjaGFyOlwi4pqXXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHRlbGVzY29wZTp7a2V5d29yZHM6W1wic3RhcnNcIixcInNwYWNlXCIsXCJ6b29tXCIsXCJzY2llbmNlXCIsXCJhc3Ryb25vbXlcIl0sY2hhcjpcIvCflK1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sbWljcm9zY29wZTp7a2V5d29yZHM6W1wibGFib3JhdG9yeVwiLFwiZXhwZXJpbWVudFwiLFwiem9vbWluXCIsXCJzY2llbmNlXCIsXCJzdHVkeVwiXSxjaGFyOlwi8J+UrFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxob2xlOntrZXl3b3JkczpbXCJlbWJhcnJhc3NpbmdcIl0sY2hhcjpcIvCflbNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0scGlsbDp7a2V5d29yZHM6W1wiaGVhbHRoXCIsXCJtZWRpY2luZVwiLFwiZG9jdG9yXCIsXCJwaGFybWFjeVwiLFwiZHJ1Z1wiXSxjaGFyOlwi8J+SilwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxzeXJpbmdlOntrZXl3b3JkczpbXCJoZWFsdGhcIixcImhvc3BpdGFsXCIsXCJkcnVnc1wiLFwiYmxvb2RcIixcIm1lZGljaW5lXCIsXCJuZWVkbGVcIixcImRvY3RvclwiLFwibnVyc2VcIl0sY2hhcjpcIvCfkolcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sZG5hOntrZXl3b3JkczpbXCJiaW9sb2dpc3RcIixcImdlbmV0aWNzXCIsXCJsaWZlXCJdLGNoYXI6XCLwn6esXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LG1pY3JvYmU6e2tleXdvcmRzOltcImFtb2ViYVwiLFwiYmFjdGVyaWFcIixcImdlcm1zXCJdLGNoYXI6XCLwn6agXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHBldHJpX2Rpc2g6e2tleXdvcmRzOltcImJhY3RlcmlhXCIsXCJiaW9sb2d5XCIsXCJjdWx0dXJlXCIsXCJsYWJcIl0sY2hhcjpcIvCfp6tcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sdGVzdF90dWJlOntrZXl3b3JkczpbXCJjaGVtaXN0cnlcIixcImV4cGVyaW1lbnRcIixcImxhYlwiLFwic2NpZW5jZVwiXSxjaGFyOlwi8J+nqlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSx0aGVybW9tZXRlcjp7a2V5d29yZHM6W1wid2VhdGhlclwiLFwidGVtcGVyYXR1cmVcIixcImhvdFwiLFwiY29sZFwiXSxjaGFyOlwi8J+MoVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxicm9vbTp7a2V5d29yZHM6W1wiY2xlYW5pbmdcIixcInN3ZWVwaW5nXCIsXCJ3aXRjaFwiXSxjaGFyOlwi8J+nuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxiYXNrZXQ6e2tleXdvcmRzOltcImxhdW5kcnlcIl0sY2hhcjpcIvCfp7pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sdG9pbGV0X3BhcGVyOntrZXl3b3JkczpbXCJyb2xsXCJdLGNoYXI6XCLwn6e7XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGxhYmVsOntrZXl3b3JkczpbXCJzYWxlXCIsXCJ0YWdcIl0sY2hhcjpcIvCfj7dcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sYm9va21hcms6e2tleXdvcmRzOltcImZhdm9yaXRlXCIsXCJsYWJlbFwiLFwic2F2ZVwiXSxjaGFyOlwi8J+UllwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSx0b2lsZXQ6e2tleXdvcmRzOltcInJlc3Ryb29tXCIsXCJ3Y1wiLFwid2FzaHJvb21cIixcImJhdGhyb29tXCIsXCJwb3R0eVwiXSxjaGFyOlwi8J+avVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxzaG93ZXI6e2tleXdvcmRzOltcImNsZWFuXCIsXCJ3YXRlclwiLFwiYmF0aHJvb21cIl0sY2hhcjpcIvCfmr9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sYmF0aHR1Yjp7a2V5d29yZHM6W1wiY2xlYW5cIixcInNob3dlclwiLFwiYmF0aHJvb21cIl0sY2hhcjpcIvCfm4FcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sc29hcDp7a2V5d29yZHM6W1wiYmFyXCIsXCJiYXRoaW5nXCIsXCJjbGVhbmluZ1wiLFwibGF0aGVyXCJdLGNoYXI6XCLwn6e8XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHNwb25nZTp7a2V5d29yZHM6W1wiYWJzb3JiaW5nXCIsXCJjbGVhbmluZ1wiLFwicG9yb3VzXCJdLGNoYXI6XCLwn6e9XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGxvdGlvbl9ib3R0bGU6e2tleXdvcmRzOltcIm1vaXN0dXJpemVyXCIsXCJzdW5zY3JlZW5cIl0sY2hhcjpcIvCfp7RcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sa2V5OntrZXl3b3JkczpbXCJsb2NrXCIsXCJkb29yXCIsXCJwYXNzd29yZFwiXSxjaGFyOlwi8J+UkVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxvbGRfa2V5OntrZXl3b3JkczpbXCJsb2NrXCIsXCJkb29yXCIsXCJwYXNzd29yZFwiXSxjaGFyOlwi8J+XnVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxjb3VjaF9hbmRfbGFtcDp7a2V5d29yZHM6W1wicmVhZFwiLFwiY2hpbGxcIl0sY2hhcjpcIvCfm4tcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sc2xlZXBpbmdfYmVkOntrZXl3b3JkczpbXCJiZWRcIixcInJlc3RcIl0sY2hhcjpcIvCfm4xcIixmaXR6cGF0cmlja19zY2FsZTp0cnVlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxiZWQ6e2tleXdvcmRzOltcInNsZWVwXCIsXCJyZXN0XCJdLGNoYXI6XCLwn5uPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGRvb3I6e2tleXdvcmRzOltcImhvdXNlXCIsXCJlbnRyeVwiLFwiZXhpdFwiXSxjaGFyOlwi8J+aqlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxiZWxsaG9wX2JlbGw6e2tleXdvcmRzOltcInNlcnZpY2VcIl0sY2hhcjpcIvCfm45cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sdGVkZHlfYmVhcjp7a2V5d29yZHM6W1wicGx1c2hcIixcInN0dWZmZWRcIl0sY2hhcjpcIvCfp7hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sZnJhbWVkX3BpY3R1cmU6e2tleXdvcmRzOltcInBob3RvZ3JhcGh5XCJdLGNoYXI6XCLwn5a8XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHdvcmxkX21hcDp7a2V5d29yZHM6W1wibG9jYXRpb25cIixcImRpcmVjdGlvblwiXSxjaGFyOlwi8J+XulwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxwYXJhc29sX29uX2dyb3VuZDp7a2V5d29yZHM6W1wid2VhdGhlclwiLFwic3VtbWVyXCJdLGNoYXI6XCLim7FcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sbW95YWk6e2tleXdvcmRzOltcInJvY2tcIixcImVhc3RlciBpc2xhbmRcIixcIm1vYWlcIl0sY2hhcjpcIvCfl79cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sc2hvcHBpbmc6e2tleXdvcmRzOltcIm1hbGxcIixcImJ1eVwiLFwicHVyY2hhc2VcIl0sY2hhcjpcIvCfm41cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sc2hvcHBpbmdfY2FydDp7a2V5d29yZHM6W1widHJvbGxleVwiXSxjaGFyOlwi8J+bklwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxiYWxsb29uOntrZXl3b3JkczpbXCJwYXJ0eVwiLFwiY2VsZWJyYXRpb25cIixcImJpcnRoZGF5XCIsXCJjaXJjdXNcIl0sY2hhcjpcIvCfjohcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sZmxhZ3M6e2tleXdvcmRzOltcImZpc2hcIixcImphcGFuZXNlXCIsXCJrb2lub2JvcmlcIixcImNhcnBcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Oj1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxyaWJib246e2tleXdvcmRzOltcImRlY29yYXRpb25cIixcInBpbmtcIixcImdpcmxcIixcImJvd3RpZVwiXSxjaGFyOlwi8J+OgFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxnaWZ0OntrZXl3b3JkczpbXCJwcmVzZW50XCIsXCJiaXJ0aGRheVwiLFwiY2hyaXN0bWFzXCIsXCJ4bWFzXCJdLGNoYXI6XCLwn46BXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGNvbmZldHRpX2JhbGw6e2tleXdvcmRzOltcImZlc3RpdmFsXCIsXCJwYXJ0eVwiLFwiYmlydGhkYXlcIixcImNpcmN1c1wiXSxjaGFyOlwi8J+OilwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSx0YWRhOntrZXl3b3JkczpbXCJwYXJ0eVwiLFwiY29uZ3JhdHVsYXRpb25zXCIsXCJiaXJ0aGRheVwiLFwibWFnaWNcIixcImNpcmN1c1wiLFwiY2VsZWJyYXRpb25cIl0sY2hhcjpcIvCfjolcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sZG9sbHM6e2tleXdvcmRzOltcImphcGFuZXNlXCIsXCJ0b3lcIixcImtpbW9ub1wiXSxjaGFyOlwi8J+OjlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSx3aW5kX2NoaW1lOntrZXl3b3JkczpbXCJuYXR1cmVcIixcImRpbmdcIixcInNwcmluZ1wiLFwiYmVsbFwiXSxjaGFyOlwi8J+OkFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxjcm9zc2VkX2ZsYWdzOntrZXl3b3JkczpbXCJqYXBhbmVzZVwiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJib3JkZXJcIl0sY2hhcjpcIvCfjoxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0saXpha2F5YV9sYW50ZXJuOntrZXl3b3JkczpbXCJsaWdodFwiLFwicGFwZXJcIixcImhhbGxvd2VlblwiLFwic3Bvb2t5XCJdLGNoYXI6XCLwn4+uXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHJlZF9lbnZlbG9wZTp7a2V5d29yZHM6W1wiZ2lmdFwiXSxjaGFyOlwi8J+np1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxlbWFpbDp7a2V5d29yZHM6W1wibGV0dGVyXCIsXCJwb3N0YWxcIixcImluYm94XCIsXCJjb21tdW5pY2F0aW9uXCJdLGNoYXI6XCLinInvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sZW52ZWxvcGVfd2l0aF9hcnJvdzp7a2V5d29yZHM6W1wiZW1haWxcIixcImNvbW11bmljYXRpb25cIl0sY2hhcjpcIvCfk6lcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0saW5jb21pbmdfZW52ZWxvcGU6e2tleXdvcmRzOltcImVtYWlsXCIsXCJpbmJveFwiXSxjaGFyOlwi8J+TqFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxcImUtbWFpbFwiOntrZXl3b3JkczpbXCJjb21tdW5pY2F0aW9uXCIsXCJpbmJveFwiXSxjaGFyOlwi8J+Tp1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxsb3ZlX2xldHRlcjp7a2V5d29yZHM6W1wiZW1haWxcIixcImxpa2VcIixcImFmZmVjdGlvblwiLFwiZW52ZWxvcGVcIixcInZhbGVudGluZXNcIl0sY2hhcjpcIvCfkoxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0scG9zdGJveDp7a2V5d29yZHM6W1wiZW1haWxcIixcImxldHRlclwiLFwiZW52ZWxvcGVcIl0sY2hhcjpcIvCfk65cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sbWFpbGJveF9jbG9zZWQ6e2tleXdvcmRzOltcImVtYWlsXCIsXCJjb21tdW5pY2F0aW9uXCIsXCJpbmJveFwiXSxjaGFyOlwi8J+TqlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxtYWlsYm94OntrZXl3b3JkczpbXCJlbWFpbFwiLFwiaW5ib3hcIixcImNvbW11bmljYXRpb25cIl0sY2hhcjpcIvCfk6tcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sbWFpbGJveF93aXRoX21haWw6e2tleXdvcmRzOltcImVtYWlsXCIsXCJpbmJveFwiLFwiY29tbXVuaWNhdGlvblwiXSxjaGFyOlwi8J+TrFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxtYWlsYm94X3dpdGhfbm9fbWFpbDp7a2V5d29yZHM6W1wiZW1haWxcIixcImluYm94XCJdLGNoYXI6XCLwn5OtXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHBhY2thZ2U6e2tleXdvcmRzOltcIm1haWxcIixcImdpZnRcIixcImNhcmRib2FyZFwiLFwiYm94XCIsXCJtb3ZpbmdcIl0sY2hhcjpcIvCfk6ZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0scG9zdGFsX2hvcm46e2tleXdvcmRzOltcImluc3RydW1lbnRcIixcIm11c2ljXCJdLGNoYXI6XCLwn5OvXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGluYm94X3RyYXk6e2tleXdvcmRzOltcImVtYWlsXCIsXCJkb2N1bWVudHNcIl0sY2hhcjpcIvCfk6VcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sb3V0Ym94X3RyYXk6e2tleXdvcmRzOltcImluYm94XCIsXCJlbWFpbFwiXSxjaGFyOlwi8J+TpFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxzY3JvbGw6e2tleXdvcmRzOltcImRvY3VtZW50c1wiLFwiYW5jaWVudFwiLFwiaGlzdG9yeVwiLFwicGFwZXJcIl0sY2hhcjpcIvCfk5xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0scGFnZV93aXRoX2N1cmw6e2tleXdvcmRzOltcImRvY3VtZW50c1wiLFwib2ZmaWNlXCIsXCJwYXBlclwiXSxjaGFyOlwi8J+Tg1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxib29rbWFya190YWJzOntrZXl3b3JkczpbXCJmYXZvcml0ZVwiLFwic2F2ZVwiLFwib3JkZXJcIixcInRpZHlcIl0sY2hhcjpcIvCfk5FcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0scmVjZWlwdDp7a2V5d29yZHM6W1wiYWNjb3VudGluZ1wiLFwiZXhwZW5zZXNcIl0sY2hhcjpcIvCfp75cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sYmFyX2NoYXJ0OntrZXl3b3JkczpbXCJncmFwaFwiLFwicHJlc2VudGF0aW9uXCIsXCJzdGF0c1wiXSxjaGFyOlwi8J+TilwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxjaGFydF93aXRoX3Vwd2FyZHNfdHJlbmQ6e2tleXdvcmRzOltcImdyYXBoXCIsXCJwcmVzZW50YXRpb25cIixcInN0YXRzXCIsXCJyZWNvdmVyeVwiLFwiYnVzaW5lc3NcIixcImVjb25vbWljc1wiLFwibW9uZXlcIixcInNhbGVzXCIsXCJnb29kXCIsXCJzdWNjZXNzXCJdLGNoYXI6XCLwn5OIXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGNoYXJ0X3dpdGhfZG93bndhcmRzX3RyZW5kOntrZXl3b3JkczpbXCJncmFwaFwiLFwicHJlc2VudGF0aW9uXCIsXCJzdGF0c1wiLFwicmVjZXNzaW9uXCIsXCJidXNpbmVzc1wiLFwiZWNvbm9taWNzXCIsXCJtb25leVwiLFwic2FsZXNcIixcImJhZFwiLFwiZmFpbHVyZVwiXSxjaGFyOlwi8J+TiVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxwYWdlX2ZhY2luZ191cDp7a2V5d29yZHM6W1wiZG9jdW1lbnRzXCIsXCJvZmZpY2VcIixcInBhcGVyXCIsXCJpbmZvcm1hdGlvblwiXSxjaGFyOlwi8J+ThFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxkYXRlOntrZXl3b3JkczpbXCJjYWxlbmRhclwiLFwic2NoZWR1bGVcIl0sY2hhcjpcIvCfk4VcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sY2FsZW5kYXI6e2tleXdvcmRzOltcInNjaGVkdWxlXCIsXCJkYXRlXCIsXCJwbGFubmluZ1wiXSxjaGFyOlwi8J+ThlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxzcGlyYWxfY2FsZW5kYXI6e2tleXdvcmRzOltcImRhdGVcIixcInNjaGVkdWxlXCIsXCJwbGFubmluZ1wiXSxjaGFyOlwi8J+Xk1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxjYXJkX2luZGV4OntrZXl3b3JkczpbXCJidXNpbmVzc1wiLFwic3RhdGlvbmVyeVwiXSxjaGFyOlwi8J+Th1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxjYXJkX2ZpbGVfYm94OntrZXl3b3JkczpbXCJidXNpbmVzc1wiLFwic3RhdGlvbmVyeVwiXSxjaGFyOlwi8J+Xg1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxiYWxsb3RfYm94OntrZXl3b3JkczpbXCJlbGVjdGlvblwiLFwidm90ZVwiXSxjaGFyOlwi8J+Xs1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxmaWxlX2NhYmluZXQ6e2tleXdvcmRzOltcImZpbGluZ1wiLFwib3JnYW5pemluZ1wiXSxjaGFyOlwi8J+XhFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxjbGlwYm9hcmQ6e2tleXdvcmRzOltcInN0YXRpb25lcnlcIixcImRvY3VtZW50c1wiXSxjaGFyOlwi8J+Ti1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxzcGlyYWxfbm90ZXBhZDp7a2V5d29yZHM6W1wibWVtb1wiLFwic3RhdGlvbmVyeVwiXSxjaGFyOlwi8J+XklwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxmaWxlX2ZvbGRlcjp7a2V5d29yZHM6W1wiZG9jdW1lbnRzXCIsXCJidXNpbmVzc1wiLFwib2ZmaWNlXCJdLGNoYXI6XCLwn5OBXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LG9wZW5fZmlsZV9mb2xkZXI6e2tleXdvcmRzOltcImRvY3VtZW50c1wiLFwibG9hZFwiXSxjaGFyOlwi8J+TglwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxjYXJkX2luZGV4X2RpdmlkZXJzOntrZXl3b3JkczpbXCJvcmdhbml6aW5nXCIsXCJidXNpbmVzc1wiLFwic3RhdGlvbmVyeVwiXSxjaGFyOlwi8J+XglwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxuZXdzcGFwZXJfcm9sbDp7a2V5d29yZHM6W1wicHJlc3NcIixcImhlYWRsaW5lXCJdLGNoYXI6XCLwn5eeXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LG5ld3NwYXBlcjp7a2V5d29yZHM6W1wicHJlc3NcIixcImhlYWRsaW5lXCJdLGNoYXI6XCLwn5OwXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LG5vdGVib29rOntrZXl3b3JkczpbXCJzdGF0aW9uZXJ5XCIsXCJyZWNvcmRcIixcIm5vdGVzXCIsXCJwYXBlclwiLFwic3R1ZHlcIl0sY2hhcjpcIvCfk5NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sY2xvc2VkX2Jvb2s6e2tleXdvcmRzOltcInJlYWRcIixcImxpYnJhcnlcIixcImtub3dsZWRnZVwiLFwidGV4dGJvb2tcIixcImxlYXJuXCJdLGNoYXI6XCLwn5OVXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGdyZWVuX2Jvb2s6e2tleXdvcmRzOltcInJlYWRcIixcImxpYnJhcnlcIixcImtub3dsZWRnZVwiLFwic3R1ZHlcIl0sY2hhcjpcIvCfk5dcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sYmx1ZV9ib29rOntrZXl3b3JkczpbXCJyZWFkXCIsXCJsaWJyYXJ5XCIsXCJrbm93bGVkZ2VcIixcImxlYXJuXCIsXCJzdHVkeVwiXSxjaGFyOlwi8J+TmFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxvcmFuZ2VfYm9vazp7a2V5d29yZHM6W1wicmVhZFwiLFwibGlicmFyeVwiLFwia25vd2xlZGdlXCIsXCJ0ZXh0Ym9va1wiLFwic3R1ZHlcIl0sY2hhcjpcIvCfk5lcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sbm90ZWJvb2tfd2l0aF9kZWNvcmF0aXZlX2NvdmVyOntrZXl3b3JkczpbXCJjbGFzc3Jvb21cIixcIm5vdGVzXCIsXCJyZWNvcmRcIixcInBhcGVyXCIsXCJzdHVkeVwiXSxjaGFyOlwi8J+TlFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxsZWRnZXI6e2tleXdvcmRzOltcIm5vdGVzXCIsXCJwYXBlclwiXSxjaGFyOlwi8J+TklwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxib29rczp7a2V5d29yZHM6W1wibGl0ZXJhdHVyZVwiLFwibGlicmFyeVwiLFwic3R1ZHlcIl0sY2hhcjpcIvCfk5pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sb3Blbl9ib29rOntrZXl3b3JkczpbXCJib29rXCIsXCJyZWFkXCIsXCJsaWJyYXJ5XCIsXCJrbm93bGVkZ2VcIixcImxpdGVyYXR1cmVcIixcImxlYXJuXCIsXCJzdHVkeVwiXSxjaGFyOlwi8J+TllwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxzYWZldHlfcGluOntrZXl3b3JkczpbXCJkaWFwZXJcIl0sY2hhcjpcIvCfp7dcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sbGluazp7a2V5d29yZHM6W1wicmluZ3NcIixcInVybFwiXSxjaGFyOlwi8J+Ul1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxwYXBlcmNsaXA6e2tleXdvcmRzOltcImRvY3VtZW50c1wiLFwic3RhdGlvbmVyeVwiXSxjaGFyOlwi8J+TjlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxwYXBlcmNsaXBzOntrZXl3b3JkczpbXCJkb2N1bWVudHNcIixcInN0YXRpb25lcnlcIl0sY2hhcjpcIvCflodcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sc2Npc3NvcnM6e2tleXdvcmRzOltcInN0YXRpb25lcnlcIixcImN1dFwiXSxjaGFyOlwi4pyC77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHRyaWFuZ3VsYXJfcnVsZXI6e2tleXdvcmRzOltcInN0YXRpb25lcnlcIixcIm1hdGhcIixcImFyY2hpdGVjdFwiLFwic2tldGNoXCJdLGNoYXI6XCLwn5OQXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHN0cmFpZ2h0X3J1bGVyOntrZXl3b3JkczpbXCJzdGF0aW9uZXJ5XCIsXCJjYWxjdWxhdGVcIixcImxlbmd0aFwiLFwibWF0aFwiLFwic2Nob29sXCIsXCJkcmF3aW5nXCIsXCJhcmNoaXRlY3RcIixcInNrZXRjaFwiXSxjaGFyOlwi8J+Tj1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxhYmFjdXM6e2tleXdvcmRzOltcImNhbGN1bGF0aW9uXCJdLGNoYXI6XCLwn6euXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHB1c2hwaW46e2tleXdvcmRzOltcInN0YXRpb25lcnlcIixcIm1hcmtcIixcImhlcmVcIl0sY2hhcjpcIvCfk4xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0scm91bmRfcHVzaHBpbjp7a2V5d29yZHM6W1wic3RhdGlvbmVyeVwiLFwibG9jYXRpb25cIixcIm1hcFwiLFwiaGVyZVwiXSxjaGFyOlwi8J+TjVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSx0cmlhbmd1bGFyX2ZsYWdfb25fcG9zdDp7a2V5d29yZHM6W1wibWFya1wiLFwibWlsZXN0b25lXCIsXCJwbGFjZVwiXSxjaGFyOlwi8J+aqVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSx3aGl0ZV9mbGFnOntrZXl3b3JkczpbXCJsb3NpbmdcIixcImxvc2VyXCIsXCJsb3N0XCIsXCJzdXJyZW5kZXJcIixcImdpdmUgdXBcIixcImZhaWxcIl0sY2hhcjpcIvCfj7NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sYmxhY2tfZmxhZzp7a2V5d29yZHM6W1wicGlyYXRlXCJdLGNoYXI6XCLwn4+0XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHJhaW5ib3dfZmxhZzp7a2V5d29yZHM6W1wiZmxhZ1wiLFwicmFpbmJvd1wiLFwicHJpZGVcIixcImdheVwiLFwibGdidFwiLFwiZ2xidFwiLFwicXVlZXJcIixcImhvbW9zZXh1YWxcIixcImxlc2JpYW5cIixcImJpc2V4dWFsXCIsXCJ0cmFuc2dlbmRlclwiXSxjaGFyOlwi8J+Ps++4j+KAjfCfjIhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sY2xvc2VkX2xvY2tfd2l0aF9rZXk6e2tleXdvcmRzOltcInNlY3VyaXR5XCIsXCJwcml2YWN5XCJdLGNoYXI6XCLwn5SQXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGxvY2s6e2tleXdvcmRzOltcInNlY3VyaXR5XCIsXCJwYXNzd29yZFwiLFwicGFkbG9ja1wiXSxjaGFyOlwi8J+UklwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSx1bmxvY2s6e2tleXdvcmRzOltcInByaXZhY3lcIixcInNlY3VyaXR5XCJdLGNoYXI6XCLwn5STXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LGxvY2tfd2l0aF9pbmtfcGVuOntrZXl3b3JkczpbXCJzZWN1cml0eVwiLFwic2VjcmV0XCJdLGNoYXI6XCLwn5SPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHBlbjp7a2V5d29yZHM6W1wic3RhdGlvbmVyeVwiLFwid3JpdGluZ1wiLFwid3JpdGVcIl0sY2hhcjpcIvCflopcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sZm91bnRhaW5fcGVuOntrZXl3b3JkczpbXCJzdGF0aW9uZXJ5XCIsXCJ3cml0aW5nXCIsXCJ3cml0ZVwiXSxjaGFyOlwi8J+Wi1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxibGFja19uaWI6e2tleXdvcmRzOltcInBlblwiLFwic3RhdGlvbmVyeVwiLFwid3JpdGluZ1wiLFwid3JpdGVcIl0sY2hhcjpcIuKcku+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxtZW1vOntrZXl3b3JkczpbXCJ3cml0ZVwiLFwiZG9jdW1lbnRzXCIsXCJzdGF0aW9uZXJ5XCIsXCJwZW5jaWxcIixcInBhcGVyXCIsXCJ3cml0aW5nXCIsXCJsZWdhbFwiLFwiZXhhbVwiLFwicXVpelwiLFwidGVzdFwiLFwic3R1ZHlcIixcImNvbXBvc2VcIl0sY2hhcjpcIvCfk51cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0scGVuY2lsMjp7a2V5d29yZHM6W1wic3RhdGlvbmVyeVwiLFwid3JpdGVcIixcInBhcGVyXCIsXCJ3cml0aW5nXCIsXCJzY2hvb2xcIixcInN0dWR5XCJdLGNoYXI6XCLinI/vuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0sY3JheW9uOntrZXl3b3JkczpbXCJkcmF3aW5nXCIsXCJjcmVhdGl2aXR5XCJdLGNoYXI6XCLwn5aNXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LHBhaW50YnJ1c2g6e2tleXdvcmRzOltcImRyYXdpbmdcIixcImNyZWF0aXZpdHlcIixcImFydFwiXSxjaGFyOlwi8J+WjFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwib2JqZWN0c1wifSxtYWc6e2tleXdvcmRzOltcInNlYXJjaFwiLFwiem9vbVwiLFwiZmluZFwiLFwiZGV0ZWN0aXZlXCJdLGNoYXI6XCLwn5SNXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJvYmplY3RzXCJ9LG1hZ19yaWdodDp7a2V5d29yZHM6W1wic2VhcmNoXCIsXCJ6b29tXCIsXCJmaW5kXCIsXCJkZXRlY3RpdmVcIl0sY2hhcjpcIvCflI5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcIm9iamVjdHNcIn0saGVhcnQ6e2tleXdvcmRzOltcImxvdmVcIixcImxpa2VcIixcInZhbGVudGluZXNcIl0sY2hhcjpcIuKdpO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxvcmFuZ2VfaGVhcnQ6e2tleXdvcmRzOltcImxvdmVcIixcImxpa2VcIixcImFmZmVjdGlvblwiLFwidmFsZW50aW5lc1wiXSxjaGFyOlwi8J+noVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx5ZWxsb3dfaGVhcnQ6e2tleXdvcmRzOltcImxvdmVcIixcImxpa2VcIixcImFmZmVjdGlvblwiLFwidmFsZW50aW5lc1wiXSxjaGFyOlwi8J+Sm1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxncmVlbl9oZWFydDp7a2V5d29yZHM6W1wibG92ZVwiLFwibGlrZVwiLFwiYWZmZWN0aW9uXCIsXCJ2YWxlbnRpbmVzXCJdLGNoYXI6XCLwn5KaXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGJsdWVfaGVhcnQ6e2tleXdvcmRzOltcImxvdmVcIixcImxpa2VcIixcImFmZmVjdGlvblwiLFwidmFsZW50aW5lc1wiXSxjaGFyOlwi8J+SmVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxwdXJwbGVfaGVhcnQ6e2tleXdvcmRzOltcImxvdmVcIixcImxpa2VcIixcImFmZmVjdGlvblwiLFwidmFsZW50aW5lc1wiXSxjaGFyOlwi8J+SnFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxibGFja19oZWFydDp7a2V5d29yZHM6W1wiZXZpbFwiXSxjaGFyOlwi8J+WpFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxicm9rZW5faGVhcnQ6e2tleXdvcmRzOltcInNhZFwiLFwic29ycnlcIixcImJyZWFrXCIsXCJoZWFydFwiLFwiaGVhcnRicmVha1wiXSxjaGFyOlwi8J+SlFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxoZWF2eV9oZWFydF9leGNsYW1hdGlvbjp7a2V5d29yZHM6W1wiZGVjb3JhdGlvblwiLFwibG92ZVwiXSxjaGFyOlwi4p2jXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHR3b19oZWFydHM6e2tleXdvcmRzOltcImxvdmVcIixcImxpa2VcIixcImFmZmVjdGlvblwiLFwidmFsZW50aW5lc1wiLFwiaGVhcnRcIl0sY2hhcjpcIvCfkpVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0scmV2b2x2aW5nX2hlYXJ0czp7a2V5d29yZHM6W1wibG92ZVwiLFwibGlrZVwiLFwiYWZmZWN0aW9uXCIsXCJ2YWxlbnRpbmVzXCJdLGNoYXI6XCLwn5KeXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGhlYXJ0YmVhdDp7a2V5d29yZHM6W1wibG92ZVwiLFwibGlrZVwiLFwiYWZmZWN0aW9uXCIsXCJ2YWxlbnRpbmVzXCIsXCJwaW5rXCIsXCJoZWFydFwiXSxjaGFyOlwi8J+Sk1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxoZWFydHB1bHNlOntrZXl3b3JkczpbXCJsaWtlXCIsXCJsb3ZlXCIsXCJhZmZlY3Rpb25cIixcInZhbGVudGluZXNcIixcInBpbmtcIl0sY2hhcjpcIvCfkpdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sc3BhcmtsaW5nX2hlYXJ0OntrZXl3b3JkczpbXCJsb3ZlXCIsXCJsaWtlXCIsXCJhZmZlY3Rpb25cIixcInZhbGVudGluZXNcIl0sY2hhcjpcIvCfkpZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY3VwaWQ6e2tleXdvcmRzOltcImxvdmVcIixcImxpa2VcIixcImhlYXJ0XCIsXCJhZmZlY3Rpb25cIixcInZhbGVudGluZXNcIl0sY2hhcjpcIvCfkphcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sZ2lmdF9oZWFydDp7a2V5d29yZHM6W1wibG92ZVwiLFwidmFsZW50aW5lc1wiXSxjaGFyOlwi8J+SnVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxoZWFydF9kZWNvcmF0aW9uOntrZXl3b3JkczpbXCJwdXJwbGUtc3F1YXJlXCIsXCJsb3ZlXCIsXCJsaWtlXCJdLGNoYXI6XCLwn5KfXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHBlYWNlX3N5bWJvbDp7a2V5d29yZHM6W1wiaGlwcGllXCJdLGNoYXI6XCLimK5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbGF0aW5fY3Jvc3M6e2tleXdvcmRzOltcImNocmlzdGlhbml0eVwiXSxjaGFyOlwi4pydXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHN0YXJfYW5kX2NyZXNjZW50OntrZXl3b3JkczpbXCJpc2xhbVwiXSxjaGFyOlwi4piqXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LG9tOntrZXl3b3JkczpbXCJoaW5kdWlzbVwiLFwiYnVkZGhpc21cIixcInNpa2hpc21cIixcImphaW5pc21cIl0sY2hhcjpcIvCflYlcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sd2hlZWxfb2ZfZGhhcm1hOntrZXl3b3JkczpbXCJoaW5kdWlzbVwiLFwiYnVkZGhpc21cIixcInNpa2hpc21cIixcImphaW5pc21cIl0sY2hhcjpcIuKYuFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxzdGFyX29mX2RhdmlkOntrZXl3b3JkczpbXCJqdWRhaXNtXCJdLGNoYXI6XCLinKFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sc2l4X3BvaW50ZWRfc3Rhcjp7a2V5d29yZHM6W1wicHVycGxlLXNxdWFyZVwiLFwicmVsaWdpb25cIixcImpld2lzaFwiLFwiaGV4YWdyYW1cIl0sY2hhcjpcIvCflK9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbWVub3JhaDp7a2V5d29yZHM6W1wiaGFudWtrYWhcIixcImNhbmRsZXNcIixcImpld2lzaFwiXSxjaGFyOlwi8J+VjlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx5aW5feWFuZzp7a2V5d29yZHM6W1wiYmFsYW5jZVwiXSxjaGFyOlwi4pivXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LG9ydGhvZG94X2Nyb3NzOntrZXl3b3JkczpbXCJzdXBwZWRhbmV1bVwiLFwicmVsaWdpb25cIl0sY2hhcjpcIuKYplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxwbGFjZV9vZl93b3JzaGlwOntrZXl3b3JkczpbXCJyZWxpZ2lvblwiLFwiY2h1cmNoXCIsXCJ0ZW1wbGVcIixcInByYXllclwiXSxjaGFyOlwi8J+bkFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxvcGhpdWNodXM6e2tleXdvcmRzOltcInNpZ25cIixcInB1cnBsZS1zcXVhcmVcIixcImNvbnN0ZWxsYXRpb25cIixcImFzdHJvbG9neVwiXSxjaGFyOlwi4puOXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGFyaWVzOntrZXl3b3JkczpbXCJzaWduXCIsXCJwdXJwbGUtc3F1YXJlXCIsXCJ6b2RpYWNcIixcImFzdHJvbG9neVwiXSxjaGFyOlwi4pmIXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHRhdXJ1czp7a2V5d29yZHM6W1wicHVycGxlLXNxdWFyZVwiLFwic2lnblwiLFwiem9kaWFjXCIsXCJhc3Ryb2xvZ3lcIl0sY2hhcjpcIuKZiVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxnZW1pbmk6e2tleXdvcmRzOltcInNpZ25cIixcInpvZGlhY1wiLFwicHVycGxlLXNxdWFyZVwiLFwiYXN0cm9sb2d5XCJdLGNoYXI6XCLimYpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2FuY2VyOntrZXl3b3JkczpbXCJzaWduXCIsXCJ6b2RpYWNcIixcInB1cnBsZS1zcXVhcmVcIixcImFzdHJvbG9neVwiXSxjaGFyOlwi4pmLXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGxlbzp7a2V5d29yZHM6W1wic2lnblwiLFwicHVycGxlLXNxdWFyZVwiLFwiem9kaWFjXCIsXCJhc3Ryb2xvZ3lcIl0sY2hhcjpcIuKZjFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx2aXJnbzp7a2V5d29yZHM6W1wic2lnblwiLFwiem9kaWFjXCIsXCJwdXJwbGUtc3F1YXJlXCIsXCJhc3Ryb2xvZ3lcIl0sY2hhcjpcIuKZjVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxsaWJyYTp7a2V5d29yZHM6W1wic2lnblwiLFwicHVycGxlLXNxdWFyZVwiLFwiem9kaWFjXCIsXCJhc3Ryb2xvZ3lcIl0sY2hhcjpcIuKZjlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxzY29ycGl1czp7a2V5d29yZHM6W1wic2lnblwiLFwiem9kaWFjXCIsXCJwdXJwbGUtc3F1YXJlXCIsXCJhc3Ryb2xvZ3lcIixcInNjb3JwaW9cIl0sY2hhcjpcIuKZj1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxzYWdpdHRhcml1czp7a2V5d29yZHM6W1wic2lnblwiLFwiem9kaWFjXCIsXCJwdXJwbGUtc3F1YXJlXCIsXCJhc3Ryb2xvZ3lcIl0sY2hhcjpcIuKZkFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjYXByaWNvcm46e2tleXdvcmRzOltcInNpZ25cIixcInpvZGlhY1wiLFwicHVycGxlLXNxdWFyZVwiLFwiYXN0cm9sb2d5XCJdLGNoYXI6XCLimZFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYXF1YXJpdXM6e2tleXdvcmRzOltcInNpZ25cIixcInB1cnBsZS1zcXVhcmVcIixcInpvZGlhY1wiLFwiYXN0cm9sb2d5XCJdLGNoYXI6XCLimZJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0scGlzY2VzOntrZXl3b3JkczpbXCJwdXJwbGUtc3F1YXJlXCIsXCJzaWduXCIsXCJ6b2RpYWNcIixcImFzdHJvbG9neVwiXSxjaGFyOlwi4pmTXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGlkOntrZXl3b3JkczpbXCJwdXJwbGUtc3F1YXJlXCIsXCJ3b3Jkc1wiXSxjaGFyOlwi8J+GlFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxhdG9tX3N5bWJvbDp7a2V5d29yZHM6W1wic2NpZW5jZVwiLFwicGh5c2ljc1wiLFwiY2hlbWlzdHJ5XCJdLGNoYXI6XCLimptcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sdTdhN2E6e2tleXdvcmRzOltcImthbmppXCIsXCJqYXBhbmVzZVwiLFwiY2hpbmVzZVwiLFwiZW1wdHlcIixcInNreVwiLFwiYmx1ZS1zcXVhcmVcIl0sY2hhcjpcIvCfiLNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sdTUyNzI6e2tleXdvcmRzOltcImN1dFwiLFwiZGl2aWRlXCIsXCJjaGluZXNlXCIsXCJrYW5qaVwiLFwicGluay1zcXVhcmVcIl0sY2hhcjpcIvCfiLlcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0scmFkaW9hY3RpdmU6e2tleXdvcmRzOltcIm51Y2xlYXJcIixcImRhbmdlclwiXSxjaGFyOlwi4piiXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGJpb2hhemFyZDp7a2V5d29yZHM6W1wiZGFuZ2VyXCJdLGNoYXI6XCLimKNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbW9iaWxlX3Bob25lX29mZjp7a2V5d29yZHM6W1wibXV0ZVwiLFwib3JhbmdlLXNxdWFyZVwiLFwic2lsZW5jZVwiLFwicXVpZXRcIl0sY2hhcjpcIvCfk7RcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sdmlicmF0aW9uX21vZGU6e2tleXdvcmRzOltcIm9yYW5nZS1zcXVhcmVcIixcInBob25lXCJdLGNoYXI6XCLwn5OzXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHU2NzA5OntrZXl3b3JkczpbXCJvcmFuZ2Utc3F1YXJlXCIsXCJjaGluZXNlXCIsXCJoYXZlXCIsXCJrYW5qaVwiXSxjaGFyOlwi8J+ItlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx1NzEyMTp7a2V5d29yZHM6W1wibm90aGluZ1wiLFwiY2hpbmVzZVwiLFwia2FuamlcIixcImphcGFuZXNlXCIsXCJvcmFuZ2Utc3F1YXJlXCJdLGNoYXI6XCLwn4iaXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHU3NTMzOntrZXl3b3JkczpbXCJjaGluZXNlXCIsXCJqYXBhbmVzZVwiLFwia2FuamlcIixcIm9yYW5nZS1zcXVhcmVcIl0sY2hhcjpcIvCfiLhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sdTU1YjY6e2tleXdvcmRzOltcImphcGFuZXNlXCIsXCJvcGVuaW5nIGhvdXJzXCIsXCJvcmFuZ2Utc3F1YXJlXCJdLGNoYXI6XCLwn4i6XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHU2NzA4OntrZXl3b3JkczpbXCJjaGluZXNlXCIsXCJtb250aFwiLFwibW9vblwiLFwiamFwYW5lc2VcIixcIm9yYW5nZS1zcXVhcmVcIixcImthbmppXCJdLGNoYXI6XCLwn4i377iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGVpZ2h0X3BvaW50ZWRfYmxhY2tfc3Rhcjp7a2V5d29yZHM6W1wib3JhbmdlLXNxdWFyZVwiLFwic2hhcGVcIixcInBvbHlnb25cIl0sY2hhcjpcIuKctO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx2czp7a2V5d29yZHM6W1wid29yZHNcIixcIm9yYW5nZS1zcXVhcmVcIl0sY2hhcjpcIvCfhppcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYWNjZXB0OntrZXl3b3JkczpbXCJva1wiLFwiZ29vZFwiLFwiY2hpbmVzZVwiLFwia2FuamlcIixcImFncmVlXCIsXCJ5ZXNcIixcIm9yYW5nZS1jaXJjbGVcIl0sY2hhcjpcIvCfiZFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sd2hpdGVfZmxvd2VyOntrZXl3b3JkczpbXCJqYXBhbmVzZVwiLFwic3ByaW5nXCJdLGNoYXI6XCLwn5KuXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGlkZW9ncmFwaF9hZHZhbnRhZ2U6e2tleXdvcmRzOltcImNoaW5lc2VcIixcImthbmppXCIsXCJvYnRhaW5cIixcImdldFwiLFwiY2lyY2xlXCJdLGNoYXI6XCLwn4mQXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHNlY3JldDp7a2V5d29yZHM6W1wicHJpdmFjeVwiLFwiY2hpbmVzZVwiLFwic3NoaFwiLFwia2FuamlcIixcInJlZC1jaXJjbGVcIl0sY2hhcjpcIuOKme+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjb25ncmF0dWxhdGlvbnM6e2tleXdvcmRzOltcImNoaW5lc2VcIixcImthbmppXCIsXCJqYXBhbmVzZVwiLFwicmVkLWNpcmNsZVwiXSxjaGFyOlwi44qX77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHU1NDA4OntrZXl3b3JkczpbXCJqYXBhbmVzZVwiLFwiY2hpbmVzZVwiLFwiam9pblwiLFwia2FuamlcIixcInJlZC1zcXVhcmVcIl0sY2hhcjpcIvCfiLRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sdTZlODA6e2tleXdvcmRzOltcImZ1bGxcIixcImNoaW5lc2VcIixcImphcGFuZXNlXCIsXCJyZWQtc3F1YXJlXCIsXCJrYW5qaVwiXSxjaGFyOlwi8J+ItVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx1Nzk4MTp7a2V5d29yZHM6W1wia2FuamlcIixcImphcGFuZXNlXCIsXCJjaGluZXNlXCIsXCJmb3JiaWRkZW5cIixcImxpbWl0XCIsXCJyZXN0cmljdGVkXCIsXCJyZWQtc3F1YXJlXCJdLGNoYXI6XCLwn4iyXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGE6e2tleXdvcmRzOltcInJlZC1zcXVhcmVcIixcImFscGhhYmV0XCIsXCJsZXR0ZXJcIl0sY2hhcjpcIvCfhbDvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYjp7a2V5d29yZHM6W1wicmVkLXNxdWFyZVwiLFwiYWxwaGFiZXRcIixcImxldHRlclwiXSxjaGFyOlwi8J+Fse+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxhYjp7a2V5d29yZHM6W1wicmVkLXNxdWFyZVwiLFwiYWxwaGFiZXRcIl0sY2hhcjpcIvCfho5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2w6e2tleXdvcmRzOltcImFscGhhYmV0XCIsXCJ3b3Jkc1wiLFwicmVkLXNxdWFyZVwiXSxjaGFyOlwi8J+GkVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxvMjp7a2V5d29yZHM6W1wiYWxwaGFiZXRcIixcInJlZC1zcXVhcmVcIixcImxldHRlclwiXSxjaGFyOlwi8J+Fvu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxzb3M6e2tleXdvcmRzOltcImhlbHBcIixcInJlZC1zcXVhcmVcIixcIndvcmRzXCIsXCJlbWVyZ2VuY3lcIixcIjkxMVwiXSxjaGFyOlwi8J+GmFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxub19lbnRyeTp7a2V5d29yZHM6W1wibGltaXRcIixcInNlY3VyaXR5XCIsXCJwcml2YWN5XCIsXCJiYWRcIixcImRlbmllZFwiLFwic3RvcFwiLFwiY2lyY2xlXCJdLGNoYXI6XCLim5RcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbmFtZV9iYWRnZTp7a2V5d29yZHM6W1wiZmlyZVwiLFwiZm9yYmlkXCJdLGNoYXI6XCLwn5ObXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LG5vX2VudHJ5X3NpZ246e2tleXdvcmRzOltcImZvcmJpZFwiLFwic3RvcFwiLFwibGltaXRcIixcImRlbmllZFwiLFwiZGlzYWxsb3dcIixcImNpcmNsZVwiXSxjaGFyOlwi8J+aq1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx4OntrZXl3b3JkczpbXCJub1wiLFwiZGVsZXRlXCIsXCJyZW1vdmVcIixcImNhbmNlbFwiLFwicmVkXCJdLGNoYXI6XCLinYxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbzp7a2V5d29yZHM6W1wiY2lyY2xlXCIsXCJyb3VuZFwiXSxjaGFyOlwi4q2VXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHN0b3Bfc2lnbjp7a2V5d29yZHM6W1wic3RvcFwiXSxjaGFyOlwi8J+bkVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxhbmdlcjp7a2V5d29yZHM6W1wiYW5ncnlcIixcIm1hZFwiXSxjaGFyOlwi8J+SolwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxob3RzcHJpbmdzOntrZXl3b3JkczpbXCJiYXRoXCIsXCJ3YXJtXCIsXCJyZWxheFwiXSxjaGFyOlwi4pmo77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LG5vX3BlZGVzdHJpYW5zOntrZXl3b3JkczpbXCJydWxlc1wiLFwiY3Jvc3NpbmdcIixcIndhbGtpbmdcIixcImNpcmNsZVwiXSxjaGFyOlwi8J+at1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxkb19ub3RfbGl0dGVyOntrZXl3b3JkczpbXCJ0cmFzaFwiLFwiYmluXCIsXCJnYXJiYWdlXCIsXCJjaXJjbGVcIl0sY2hhcjpcIvCfmq9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbm9fYmljeWNsZXM6e2tleXdvcmRzOltcImN5Y2xpc3RcIixcInByb2hpYml0ZWRcIixcImNpcmNsZVwiXSxjaGFyOlwi8J+as1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxcIm5vbi1wb3RhYmxlX3dhdGVyXCI6e2tleXdvcmRzOltcImRyaW5rXCIsXCJmYXVjZXRcIixcInRhcFwiLFwiY2lyY2xlXCJdLGNoYXI6XCLwn5qxXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHVuZGVyYWdlOntrZXl3b3JkczpbXCIxOFwiLFwiZHJpbmtcIixcInB1YlwiLFwibmlnaHRcIixcIm1pbm9yXCIsXCJjaXJjbGVcIl0sY2hhcjpcIvCflJ5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbm9fbW9iaWxlX3Bob25lczp7a2V5d29yZHM6W1wiaXBob25lXCIsXCJtdXRlXCIsXCJjaXJjbGVcIl0sY2hhcjpcIvCfk7VcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sZXhjbGFtYXRpb246e2tleXdvcmRzOltcImhlYXZ5X2V4Y2xhbWF0aW9uX21hcmtcIixcImRhbmdlclwiLFwic3VycHJpc2VcIixcInB1bmN0dWF0aW9uXCIsXCJ3b3dcIixcIndhcm5pbmdcIl0sY2hhcjpcIuKdl1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxncmV5X2V4Y2xhbWF0aW9uOntrZXl3b3JkczpbXCJzdXJwcmlzZVwiLFwicHVuY3R1YXRpb25cIixcImdyYXlcIixcIndvd1wiLFwid2FybmluZ1wiXSxjaGFyOlwi4p2VXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHF1ZXN0aW9uOntrZXl3b3JkczpbXCJkb3VidFwiLFwiY29uZnVzZWRcIl0sY2hhcjpcIuKdk1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxncmV5X3F1ZXN0aW9uOntrZXl3b3JkczpbXCJkb3VidHNcIixcImdyYXlcIixcImh1aFwiLFwiY29uZnVzZWRcIl0sY2hhcjpcIuKdlFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxiYW5nYmFuZzp7a2V5d29yZHM6W1wiZXhjbGFtYXRpb25cIixcInN1cnByaXNlXCJdLGNoYXI6XCLigLzvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0saW50ZXJyb2Jhbmc6e2tleXdvcmRzOltcIndhdFwiLFwicHVuY3R1YXRpb25cIixcInN1cnByaXNlXCJdLGNoYXI6XCLigYnvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sMTAwOntrZXl3b3JkczpbXCJzY29yZVwiLFwicGVyZmVjdFwiLFwibnVtYmVyc1wiLFwiY2VudHVyeVwiLFwiZXhhbVwiLFwicXVpelwiLFwidGVzdFwiLFwicGFzc1wiLFwiaHVuZHJlZFwiXSxjaGFyOlwi8J+Sr1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxsb3dfYnJpZ2h0bmVzczp7a2V5d29yZHM6W1wic3VuXCIsXCJhZnRlcm5vb25cIixcIndhcm1cIixcInN1bW1lclwiXSxjaGFyOlwi8J+UhVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxoaWdoX2JyaWdodG5lc3M6e2tleXdvcmRzOltcInN1blwiLFwibGlnaHRcIl0sY2hhcjpcIvCflIZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sdHJpZGVudDp7a2V5d29yZHM6W1wid2VhcG9uXCIsXCJzcGVhclwiXSxjaGFyOlwi8J+UsVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxmbGV1cl9kZV9saXM6e2tleXdvcmRzOltcImRlY29yYXRpdmVcIixcInNjb3V0XCJdLGNoYXI6XCLimpxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0scGFydF9hbHRlcm5hdGlvbl9tYXJrOntrZXl3b3JkczpbXCJncmFwaFwiLFwicHJlc2VudGF0aW9uXCIsXCJzdGF0c1wiLFwiYnVzaW5lc3NcIixcImVjb25vbWljc1wiLFwiYmFkXCJdLGNoYXI6XCLjgL3vuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sd2FybmluZzp7a2V5d29yZHM6W1wiZXhjbGFtYXRpb25cIixcIndpcFwiLFwiYWxlcnRcIixcImVycm9yXCIsXCJwcm9ibGVtXCIsXCJpc3N1ZVwiXSxjaGFyOlwi4pqg77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGNoaWxkcmVuX2Nyb3NzaW5nOntrZXl3b3JkczpbXCJzY2hvb2xcIixcIndhcm5pbmdcIixcImRhbmdlclwiLFwic2lnblwiLFwiZHJpdmluZ1wiLFwieWVsbG93LWRpYW1vbmRcIl0sY2hhcjpcIvCfmrhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYmVnaW5uZXI6e2tleXdvcmRzOltcImJhZGdlXCIsXCJzaGllbGRcIl0sY2hhcjpcIvCflLBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0scmVjeWNsZTp7a2V5d29yZHM6W1wiYXJyb3dcIixcImVudmlyb25tZW50XCIsXCJnYXJiYWdlXCIsXCJ0cmFzaFwiXSxjaGFyOlwi4pm777iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHU2MzA3OntrZXl3b3JkczpbXCJjaGluZXNlXCIsXCJwb2ludFwiLFwiZ3JlZW4tc3F1YXJlXCIsXCJrYW5qaVwiXSxjaGFyOlwi8J+Ir1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjaGFydDp7a2V5d29yZHM6W1wiZ3JlZW4tc3F1YXJlXCIsXCJncmFwaFwiLFwicHJlc2VudGF0aW9uXCIsXCJzdGF0c1wiXSxjaGFyOlwi8J+SuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxzcGFya2xlOntrZXl3b3JkczpbXCJzdGFyc1wiLFwiZ3JlZW4tc3F1YXJlXCIsXCJhd2Vzb21lXCIsXCJnb29kXCIsXCJmaXJld29ya3NcIl0sY2hhcjpcIuKdh++4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxlaWdodF9zcG9rZWRfYXN0ZXJpc2s6e2tleXdvcmRzOltcInN0YXJcIixcInNwYXJrbGVcIixcImdyZWVuLXNxdWFyZVwiXSxjaGFyOlwi4pyz77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LG5lZ2F0aXZlX3NxdWFyZWRfY3Jvc3NfbWFyazp7a2V5d29yZHM6W1wieFwiLFwiZ3JlZW4tc3F1YXJlXCIsXCJub1wiLFwiZGVueVwiXSxjaGFyOlwi4p2OXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHdoaXRlX2NoZWNrX21hcms6e2tleXdvcmRzOltcImdyZWVuLXNxdWFyZVwiLFwib2tcIixcImFncmVlXCIsXCJ2b3RlXCIsXCJlbGVjdGlvblwiLFwiYW5zd2VyXCIsXCJ0aWNrXCJdLGNoYXI6XCLinIVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sZGlhbW9uZF9zaGFwZV93aXRoX2FfZG90X2luc2lkZTp7a2V5d29yZHM6W1wiamV3ZWxcIixcImJsdWVcIixcImdlbVwiLFwiY3J5c3RhbFwiLFwiZmFuY3lcIl0sY2hhcjpcIvCfkqBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY3ljbG9uZTp7a2V5d29yZHM6W1wid2VhdGhlclwiLFwic3dpcmxcIixcImJsdWVcIixcImNsb3VkXCIsXCJ2b3J0ZXhcIixcInNwaXJhbFwiLFwid2hpcmxwb29sXCIsXCJzcGluXCIsXCJ0b3JuYWRvXCIsXCJodXJyaWNhbmVcIixcInR5cGhvb25cIl0sY2hhcjpcIvCfjIBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbG9vcDp7a2V5d29yZHM6W1widGFwZVwiLFwiY2Fzc2V0dGVcIl0sY2hhcjpcIuKev1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxnbG9iZV93aXRoX21lcmlkaWFuczp7a2V5d29yZHM6W1wiZWFydGhcIixcImludGVybmF0aW9uYWxcIixcIndvcmxkXCIsXCJpbnRlcm5ldFwiLFwiaW50ZXJ3ZWJcIixcImkxOG5cIl0sY2hhcjpcIvCfjJBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbTp7a2V5d29yZHM6W1wiYWxwaGFiZXRcIixcImJsdWUtY2lyY2xlXCIsXCJsZXR0ZXJcIl0sY2hhcjpcIuKTgu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxhdG06e2tleXdvcmRzOltcIm1vbmV5XCIsXCJzYWxlc1wiLFwiY2FzaFwiLFwiYmx1ZS1zcXVhcmVcIixcInBheW1lbnRcIixcImJhbmtcIl0sY2hhcjpcIvCfj6dcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sc2E6e2tleXdvcmRzOltcImphcGFuZXNlXCIsXCJibHVlLXNxdWFyZVwiLFwia2F0YWthbmFcIl0sY2hhcjpcIvCfiILvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0scGFzc3BvcnRfY29udHJvbDp7a2V5d29yZHM6W1wiY3VzdG9tXCIsXCJibHVlLXNxdWFyZVwiXSxjaGFyOlwi8J+bglwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjdXN0b21zOntrZXl3b3JkczpbXCJwYXNzcG9ydFwiLFwiYm9yZGVyXCIsXCJibHVlLXNxdWFyZVwiXSxjaGFyOlwi8J+bg1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxiYWdnYWdlX2NsYWltOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwiYWlycG9ydFwiLFwidHJhbnNwb3J0XCJdLGNoYXI6XCLwn5uEXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGxlZnRfbHVnZ2FnZTp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcInRyYXZlbFwiXSxjaGFyOlwi8J+bhVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx3aGVlbGNoYWlyOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwiZGlzYWJsZWRcIixcImExMXlcIixcImFjY2Vzc2liaWxpdHlcIl0sY2hhcjpcIuKZv1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxub19zbW9raW5nOntrZXl3b3JkczpbXCJjaWdhcmV0dGVcIixcImJsdWUtc3F1YXJlXCIsXCJzbWVsbFwiLFwic21va2VcIl0sY2hhcjpcIvCfmq1cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sd2M6e2tleXdvcmRzOltcInRvaWxldFwiLFwicmVzdHJvb21cIixcImJsdWUtc3F1YXJlXCJdLGNoYXI6XCLwn5q+XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHBhcmtpbmc6e2tleXdvcmRzOltcImNhcnNcIixcImJsdWUtc3F1YXJlXCIsXCJhbHBoYWJldFwiLFwibGV0dGVyXCJdLGNoYXI6XCLwn4W/77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHBvdGFibGVfd2F0ZXI6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJsaXF1aWRcIixcInJlc3Ryb29tXCIsXCJjbGVhbmluZ1wiLFwiZmF1Y2V0XCJdLGNoYXI6XCLwn5qwXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LG1lbnM6e2tleXdvcmRzOltcInRvaWxldFwiLFwicmVzdHJvb21cIixcIndjXCIsXCJibHVlLXNxdWFyZVwiLFwiZ2VuZGVyXCIsXCJtYWxlXCJdLGNoYXI6XCLwn5q5XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHdvbWVuczp7a2V5d29yZHM6W1wicHVycGxlLXNxdWFyZVwiLFwid29tYW5cIixcImZlbWFsZVwiLFwidG9pbGV0XCIsXCJsb29cIixcInJlc3Ryb29tXCIsXCJnZW5kZXJcIl0sY2hhcjpcIvCfmrpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYmFieV9zeW1ib2w6e2tleXdvcmRzOltcIm9yYW5nZS1zcXVhcmVcIixcImNoaWxkXCJdLGNoYXI6XCLwn5q8XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHJlc3Ryb29tOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwidG9pbGV0XCIsXCJyZWZyZXNoXCIsXCJ3Y1wiLFwiZ2VuZGVyXCJdLGNoYXI6XCLwn5q7XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHB1dF9saXR0ZXJfaW5faXRzX3BsYWNlOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwic2lnblwiLFwiaHVtYW5cIixcImluZm9cIl0sY2hhcjpcIvCfmq5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2luZW1hOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwicmVjb3JkXCIsXCJmaWxtXCIsXCJtb3ZpZVwiLFwiY3VydGFpblwiLFwic3RhZ2VcIixcInRoZWF0ZXJcIl0sY2hhcjpcIvCfjqZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sc2lnbmFsX3N0cmVuZ3RoOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwicmVjZXB0aW9uXCIsXCJwaG9uZVwiLFwiaW50ZXJuZXRcIixcImNvbm5lY3Rpb25cIixcIndpZmlcIixcImJsdWV0b290aFwiLFwiYmFyc1wiXSxjaGFyOlwi8J+TtlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxrb2tvOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwiaGVyZVwiLFwia2F0YWthbmFcIixcImphcGFuZXNlXCIsXCJkZXN0aW5hdGlvblwiXSxjaGFyOlwi8J+IgVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxuZzp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcIndvcmRzXCIsXCJzaGFwZVwiLFwiaWNvblwiXSxjaGFyOlwi8J+GllwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxvazp7a2V5d29yZHM6W1wiZ29vZFwiLFwiYWdyZWVcIixcInllc1wiLFwiYmx1ZS1zcXVhcmVcIl0sY2hhcjpcIvCfhpdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sdXA6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJhYm92ZVwiLFwiaGlnaFwiXSxjaGFyOlwi8J+GmVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjb29sOntrZXl3b3JkczpbXCJ3b3Jkc1wiLFwiYmx1ZS1zcXVhcmVcIl0sY2hhcjpcIvCfhpJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbmV3OntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwid29yZHNcIixcInN0YXJ0XCJdLGNoYXI6XCLwn4aVXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGZyZWU6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJ3b3Jkc1wiXSxjaGFyOlwi8J+Gk1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx6ZXJvOntrZXl3b3JkczpbXCIwXCIsXCJudW1iZXJzXCIsXCJibHVlLXNxdWFyZVwiLFwibnVsbFwiXSxjaGFyOlwiMO+4j+KDo1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxvbmU6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJudW1iZXJzXCIsXCIxXCJdLGNoYXI6XCIx77iP4oOjXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHR3bzp7a2V5d29yZHM6W1wibnVtYmVyc1wiLFwiMlwiLFwicHJpbWVcIixcImJsdWUtc3F1YXJlXCJdLGNoYXI6XCIy77iP4oOjXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHRocmVlOntrZXl3b3JkczpbXCIzXCIsXCJudW1iZXJzXCIsXCJwcmltZVwiLFwiYmx1ZS1zcXVhcmVcIl0sY2hhcjpcIjPvuI/ig6NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sZm91cjp7a2V5d29yZHM6W1wiNFwiLFwibnVtYmVyc1wiLFwiYmx1ZS1zcXVhcmVcIl0sY2hhcjpcIjTvuI/ig6NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sZml2ZTp7a2V5d29yZHM6W1wiNVwiLFwibnVtYmVyc1wiLFwiYmx1ZS1zcXVhcmVcIixcInByaW1lXCJdLGNoYXI6XCI177iP4oOjXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHNpeDp7a2V5d29yZHM6W1wiNlwiLFwibnVtYmVyc1wiLFwiYmx1ZS1zcXVhcmVcIl0sY2hhcjpcIjbvuI/ig6NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sc2V2ZW46e2tleXdvcmRzOltcIjdcIixcIm51bWJlcnNcIixcImJsdWUtc3F1YXJlXCIsXCJwcmltZVwiXSxjaGFyOlwiN++4j+KDo1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxlaWdodDp7a2V5d29yZHM6W1wiOFwiLFwiYmx1ZS1zcXVhcmVcIixcIm51bWJlcnNcIl0sY2hhcjpcIjjvuI/ig6NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbmluZTp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcIm51bWJlcnNcIixcIjlcIl0sY2hhcjpcIjnvuI/ig6NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sa2V5Y2FwX3Rlbjp7a2V5d29yZHM6W1wibnVtYmVyc1wiLFwiMTBcIixcImJsdWUtc3F1YXJlXCJdLGNoYXI6XCLwn5SfXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGFzdGVyaXNrOntrZXl3b3JkczpbXCJzdGFyXCIsXCJrZXljYXBcIl0sY2hhcjpcIirig6NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sMTIzNDp7a2V5d29yZHM6W1wibnVtYmVyc1wiLFwiYmx1ZS1zcXVhcmVcIl0sY2hhcjpcIvCflKJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sZWplY3RfYnV0dG9uOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiXSxjaGFyOlwi4o+P77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGFycm93X2ZvcndhcmQ6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJyaWdodFwiLFwiZGlyZWN0aW9uXCIsXCJwbGF5XCJdLGNoYXI6XCLilrbvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0scGF1c2VfYnV0dG9uOntrZXl3b3JkczpbXCJwYXVzZVwiLFwiYmx1ZS1zcXVhcmVcIl0sY2hhcjpcIuKPuFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxuZXh0X3RyYWNrX2J1dHRvbjp7a2V5d29yZHM6W1wiZm9yd2FyZFwiLFwibmV4dFwiLFwiYmx1ZS1zcXVhcmVcIl0sY2hhcjpcIuKPrVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxzdG9wX2J1dHRvbjp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIl0sY2hhcjpcIuKPuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxyZWNvcmRfYnV0dG9uOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiXSxjaGFyOlwi4o+6XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHBsYXlfb3JfcGF1c2VfYnV0dG9uOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwicGxheVwiLFwicGF1c2VcIl0sY2hhcjpcIuKPr1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxwcmV2aW91c190cmFja19idXR0b246e2tleXdvcmRzOltcImJhY2t3YXJkXCJdLGNoYXI6XCLij65cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sZmFzdF9mb3J3YXJkOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwicGxheVwiLFwic3BlZWRcIixcImNvbnRpbnVlXCJdLGNoYXI6XCLij6lcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0scmV3aW5kOntrZXl3b3JkczpbXCJwbGF5XCIsXCJibHVlLXNxdWFyZVwiXSxjaGFyOlwi4o+qXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHR3aXN0ZWRfcmlnaHR3YXJkc19hcnJvd3M6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJzaHVmZmxlXCIsXCJtdXNpY1wiLFwicmFuZG9tXCJdLGNoYXI6XCLwn5SAXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHJlcGVhdDp7a2V5d29yZHM6W1wibG9vcFwiLFwicmVjb3JkXCJdLGNoYXI6XCLwn5SBXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHJlcGVhdF9vbmU6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJsb29wXCJdLGNoYXI6XCLwn5SCXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGFycm93X2JhY2t3YXJkOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwibGVmdFwiLFwiZGlyZWN0aW9uXCJdLGNoYXI6XCLil4DvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYXJyb3dfdXBfc21hbGw6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJ0cmlhbmdsZVwiLFwiZGlyZWN0aW9uXCIsXCJwb2ludFwiLFwiZm9yd2FyZFwiLFwidG9wXCJdLGNoYXI6XCLwn5S8XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGFycm93X2Rvd25fc21hbGw6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJkaXJlY3Rpb25cIixcImJvdHRvbVwiXSxjaGFyOlwi8J+UvVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxhcnJvd19kb3VibGVfdXA6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJkaXJlY3Rpb25cIixcInRvcFwiXSxjaGFyOlwi4o+rXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGFycm93X2RvdWJsZV9kb3duOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwiZGlyZWN0aW9uXCIsXCJib3R0b21cIl0sY2hhcjpcIuKPrFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxhcnJvd19yaWdodDp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcIm5leHRcIl0sY2hhcjpcIuKeoe+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxhcnJvd19sZWZ0OntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwicHJldmlvdXNcIixcImJhY2tcIl0sY2hhcjpcIuKshe+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxhcnJvd191cDp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcImNvbnRpbnVlXCIsXCJ0b3BcIixcImRpcmVjdGlvblwiXSxjaGFyOlwi4qyG77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGFycm93X2Rvd246e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJkaXJlY3Rpb25cIixcImJvdHRvbVwiXSxjaGFyOlwi4qyH77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGFycm93X3VwcGVyX3JpZ2h0OntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwicG9pbnRcIixcImRpcmVjdGlvblwiLFwiZGlhZ29uYWxcIixcIm5vcnRoZWFzdFwiXSxjaGFyOlwi4oaX77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGFycm93X2xvd2VyX3JpZ2h0OntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwiZGlyZWN0aW9uXCIsXCJkaWFnb25hbFwiLFwic291dGhlYXN0XCJdLGNoYXI6XCLihpjvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYXJyb3dfbG93ZXJfbGVmdDp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcImRpcmVjdGlvblwiLFwiZGlhZ29uYWxcIixcInNvdXRod2VzdFwiXSxjaGFyOlwi4oaZ77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGFycm93X3VwcGVyX2xlZnQ6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJwb2ludFwiLFwiZGlyZWN0aW9uXCIsXCJkaWFnb25hbFwiLFwibm9ydGh3ZXN0XCJdLGNoYXI6XCLihpbvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYXJyb3dfdXBfZG93bjp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcImRpcmVjdGlvblwiLFwid2F5XCIsXCJ2ZXJ0aWNhbFwiXSxjaGFyOlwi4oaV77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGxlZnRfcmlnaHRfYXJyb3c6e2tleXdvcmRzOltcInNoYXBlXCIsXCJkaXJlY3Rpb25cIixcImhvcml6b250YWxcIixcInNpZGV3YXlzXCJdLGNoYXI6XCLihpTvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYXJyb3dzX2NvdW50ZXJjbG9ja3dpc2U6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJzeW5jXCIsXCJjeWNsZVwiXSxjaGFyOlwi8J+UhFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxhcnJvd19yaWdodF9ob29rOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwicmV0dXJuXCIsXCJyb3RhdGVcIixcImRpcmVjdGlvblwiXSxjaGFyOlwi4oaq77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGxlZnR3YXJkc19hcnJvd193aXRoX2hvb2s6e2tleXdvcmRzOltcImJhY2tcIixcInJldHVyblwiLFwiYmx1ZS1zcXVhcmVcIixcInVuZG9cIixcImVudGVyXCJdLGNoYXI6XCLihqnvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYXJyb3dfaGVhZGluZ191cDp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcImRpcmVjdGlvblwiLFwidG9wXCJdLGNoYXI6XCLipLTvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYXJyb3dfaGVhZGluZ19kb3duOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwiZGlyZWN0aW9uXCIsXCJib3R0b21cIl0sY2hhcjpcIuKkte+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxoYXNoOntrZXl3b3JkczpbXCJzeW1ib2xcIixcImJsdWUtc3F1YXJlXCIsXCJ0d2l0dGVyXCJdLGNoYXI6XCIj77iP4oOjXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGluZm9ybWF0aW9uX3NvdXJjZTp7a2V5d29yZHM6W1wiYmx1ZS1zcXVhcmVcIixcImFscGhhYmV0XCIsXCJsZXR0ZXJcIl0sY2hhcjpcIuKEue+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxhYmM6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJhbHBoYWJldFwiXSxjaGFyOlwi8J+UpFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxhYmNkOntrZXl3b3JkczpbXCJibHVlLXNxdWFyZVwiLFwiYWxwaGFiZXRcIl0sY2hhcjpcIvCflKFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2FwaXRhbF9hYmNkOntrZXl3b3JkczpbXCJhbHBoYWJldFwiLFwid29yZHNcIixcImJsdWUtc3F1YXJlXCJdLGNoYXI6XCLwn5SgXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHN5bWJvbHM6e2tleXdvcmRzOltcImJsdWUtc3F1YXJlXCIsXCJtdXNpY1wiLFwibm90ZVwiLFwiYW1wZXJzYW5kXCIsXCJwZXJjZW50XCIsXCJnbHlwaHNcIixcImNoYXJhY3RlcnNcIl0sY2hhcjpcIvCflKNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbXVzaWNhbF9ub3RlOntrZXl3b3JkczpbXCJzY29yZVwiLFwidG9uZVwiLFwic291bmRcIl0sY2hhcjpcIvCfjrVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbm90ZXM6e2tleXdvcmRzOltcIm11c2ljXCIsXCJzY29yZVwiXSxjaGFyOlwi8J+OtlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx3YXZ5X2Rhc2g6e2tleXdvcmRzOltcImRyYXdcIixcImxpbmVcIixcIm1vdXN0YWNoZVwiLFwibXVzdGFjaGVcIixcInNxdWlnZ2xlXCIsXCJzY3JpYmJsZVwiXSxjaGFyOlwi44Cw77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGN1cmx5X2xvb3A6e2tleXdvcmRzOltcInNjcmliYmxlXCIsXCJkcmF3XCIsXCJzaGFwZVwiLFwic3F1aWdnbGVcIl0sY2hhcjpcIuKesFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxoZWF2eV9jaGVja19tYXJrOntrZXl3b3JkczpbXCJva1wiLFwibmlrZVwiLFwiYW5zd2VyXCIsXCJ5ZXNcIixcInRpY2tcIl0sY2hhcjpcIuKclO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxhcnJvd3NfY2xvY2t3aXNlOntrZXl3b3JkczpbXCJzeW5jXCIsXCJjeWNsZVwiLFwicm91bmRcIixcInJlcGVhdFwiXSxjaGFyOlwi8J+Ug1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxoZWF2eV9wbHVzX3NpZ246e2tleXdvcmRzOltcIm1hdGhcIixcImNhbGN1bGF0aW9uXCIsXCJhZGRpdGlvblwiLFwibW9yZVwiLFwiaW5jcmVhc2VcIl0sY2hhcjpcIuKelVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxoZWF2eV9taW51c19zaWduOntrZXl3b3JkczpbXCJtYXRoXCIsXCJjYWxjdWxhdGlvblwiLFwic3VidHJhY3RcIixcImxlc3NcIl0sY2hhcjpcIuKellwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxoZWF2eV9kaXZpc2lvbl9zaWduOntrZXl3b3JkczpbXCJkaXZpZGVcIixcIm1hdGhcIixcImNhbGN1bGF0aW9uXCJdLGNoYXI6XCLinpdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0saGVhdnlfbXVsdGlwbGljYXRpb25feDp7a2V5d29yZHM6W1wibWF0aFwiLFwiY2FsY3VsYXRpb25cIl0sY2hhcjpcIuKclu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxpbmZpbml0eTp7a2V5d29yZHM6W1wiZm9yZXZlclwiXSxjaGFyOlwi4pm+XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGhlYXZ5X2RvbGxhcl9zaWduOntrZXl3b3JkczpbXCJtb25leVwiLFwic2FsZXNcIixcInBheW1lbnRcIixcImN1cnJlbmN5XCIsXCJidWNrXCJdLGNoYXI6XCLwn5KyXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGN1cnJlbmN5X2V4Y2hhbmdlOntrZXl3b3JkczpbXCJtb25leVwiLFwic2FsZXNcIixcImRvbGxhclwiLFwidHJhdmVsXCJdLGNoYXI6XCLwn5KxXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGNvcHlyaWdodDp7a2V5d29yZHM6W1wiaXBcIixcImxpY2Vuc2VcIixcImNpcmNsZVwiLFwibGF3XCIsXCJsZWdhbFwiXSxjaGFyOlwiwqnvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0scmVnaXN0ZXJlZDp7a2V5d29yZHM6W1wiYWxwaGFiZXRcIixcImNpcmNsZVwiXSxjaGFyOlwiwq7vuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sdG06e2tleXdvcmRzOltcInRyYWRlbWFya1wiLFwiYnJhbmRcIixcImxhd1wiLFwibGVnYWxcIl0sY2hhcjpcIuKEou+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxlbmQ6e2tleXdvcmRzOltcIndvcmRzXCIsXCJhcnJvd1wiXSxjaGFyOlwi8J+UmlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxiYWNrOntrZXl3b3JkczpbXCJhcnJvd1wiLFwid29yZHNcIixcInJldHVyblwiXSxjaGFyOlwi8J+UmVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxvbjp7a2V5d29yZHM6W1wiYXJyb3dcIixcIndvcmRzXCJdLGNoYXI6XCLwn5SbXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHRvcDp7a2V5d29yZHM6W1wid29yZHNcIixcImJsdWUtc3F1YXJlXCJdLGNoYXI6XCLwn5SdXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHNvb246e2tleXdvcmRzOltcImFycm93XCIsXCJ3b3Jkc1wiXSxjaGFyOlwi8J+UnFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxiYWxsb3RfYm94X3dpdGhfY2hlY2s6e2tleXdvcmRzOltcIm9rXCIsXCJhZ3JlZVwiLFwiY29uZmlybVwiLFwiYmxhY2stc3F1YXJlXCIsXCJ2b3RlXCIsXCJlbGVjdGlvblwiLFwieWVzXCIsXCJ0aWNrXCJdLGNoYXI6XCLimJHvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0scmFkaW9fYnV0dG9uOntrZXl3b3JkczpbXCJpbnB1dFwiLFwib2xkXCIsXCJtdXNpY1wiLFwiY2lyY2xlXCJdLGNoYXI6XCLwn5SYXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHdoaXRlX2NpcmNsZTp7a2V5d29yZHM6W1wic2hhcGVcIixcInJvdW5kXCJdLGNoYXI6XCLimqpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYmxhY2tfY2lyY2xlOntrZXl3b3JkczpbXCJzaGFwZVwiLFwiYnV0dG9uXCIsXCJyb3VuZFwiXSxjaGFyOlwi4pqrXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHJlZF9jaXJjbGU6e2tleXdvcmRzOltcInNoYXBlXCIsXCJlcnJvclwiLFwiZGFuZ2VyXCJdLGNoYXI6XCLwn5S0XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGxhcmdlX2JsdWVfY2lyY2xlOntrZXl3b3JkczpbXCJzaGFwZVwiLFwiaWNvblwiLFwiYnV0dG9uXCJdLGNoYXI6XCLwn5S1XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHNtYWxsX29yYW5nZV9kaWFtb25kOntrZXl3b3JkczpbXCJzaGFwZVwiLFwiamV3ZWxcIixcImdlbVwiXSxjaGFyOlwi8J+UuFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxzbWFsbF9ibHVlX2RpYW1vbmQ6e2tleXdvcmRzOltcInNoYXBlXCIsXCJqZXdlbFwiLFwiZ2VtXCJdLGNoYXI6XCLwn5S5XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGxhcmdlX29yYW5nZV9kaWFtb25kOntrZXl3b3JkczpbXCJzaGFwZVwiLFwiamV3ZWxcIixcImdlbVwiXSxjaGFyOlwi8J+UtlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxsYXJnZV9ibHVlX2RpYW1vbmQ6e2tleXdvcmRzOltcInNoYXBlXCIsXCJqZXdlbFwiLFwiZ2VtXCJdLGNoYXI6XCLwn5S3XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHNtYWxsX3JlZF90cmlhbmdsZTp7a2V5d29yZHM6W1wic2hhcGVcIixcImRpcmVjdGlvblwiLFwidXBcIixcInRvcFwiXSxjaGFyOlwi8J+UulwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxibGFja19zbWFsbF9zcXVhcmU6e2tleXdvcmRzOltcInNoYXBlXCIsXCJpY29uXCJdLGNoYXI6XCLilqrvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sd2hpdGVfc21hbGxfc3F1YXJlOntrZXl3b3JkczpbXCJzaGFwZVwiLFwiaWNvblwiXSxjaGFyOlwi4par77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGJsYWNrX2xhcmdlX3NxdWFyZTp7a2V5d29yZHM6W1wic2hhcGVcIixcImljb25cIixcImJ1dHRvblwiXSxjaGFyOlwi4qybXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHdoaXRlX2xhcmdlX3NxdWFyZTp7a2V5d29yZHM6W1wic2hhcGVcIixcImljb25cIixcInN0b25lXCIsXCJidXR0b25cIl0sY2hhcjpcIuKsnFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxzbWFsbF9yZWRfdHJpYW5nbGVfZG93bjp7a2V5d29yZHM6W1wic2hhcGVcIixcImRpcmVjdGlvblwiLFwiYm90dG9tXCJdLGNoYXI6XCLwn5S7XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGJsYWNrX21lZGl1bV9zcXVhcmU6e2tleXdvcmRzOltcInNoYXBlXCIsXCJidXR0b25cIixcImljb25cIl0sY2hhcjpcIuKXvO+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSx3aGl0ZV9tZWRpdW1fc3F1YXJlOntrZXl3b3JkczpbXCJzaGFwZVwiLFwic3RvbmVcIixcImljb25cIl0sY2hhcjpcIuKXu++4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxibGFja19tZWRpdW1fc21hbGxfc3F1YXJlOntrZXl3b3JkczpbXCJpY29uXCIsXCJzaGFwZVwiLFwiYnV0dG9uXCJdLGNoYXI6XCLil75cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sd2hpdGVfbWVkaXVtX3NtYWxsX3NxdWFyZTp7a2V5d29yZHM6W1wic2hhcGVcIixcInN0b25lXCIsXCJpY29uXCIsXCJidXR0b25cIl0sY2hhcjpcIuKXvVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxibGFja19zcXVhcmVfYnV0dG9uOntrZXl3b3JkczpbXCJzaGFwZVwiLFwiaW5wdXRcIixcImZyYW1lXCJdLGNoYXI6XCLwn5SyXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LHdoaXRlX3NxdWFyZV9idXR0b246e2tleXdvcmRzOltcInNoYXBlXCIsXCJpbnB1dFwiXSxjaGFyOlwi8J+Us1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxzcGVha2VyOntrZXl3b3JkczpbXCJzb3VuZFwiLFwidm9sdW1lXCIsXCJzaWxlbmNlXCIsXCJicm9hZGNhc3RcIl0sY2hhcjpcIvCflIhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sc291bmQ6e2tleXdvcmRzOltcInZvbHVtZVwiLFwic3BlYWtlclwiLFwiYnJvYWRjYXN0XCJdLGNoYXI6XCLwn5SJXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGxvdWRfc291bmQ6e2tleXdvcmRzOltcInZvbHVtZVwiLFwibm9pc2VcIixcIm5vaXN5XCIsXCJzcGVha2VyXCIsXCJicm9hZGNhc3RcIl0sY2hhcjpcIvCflIpcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbXV0ZTp7a2V5d29yZHM6W1wic291bmRcIixcInZvbHVtZVwiLFwic2lsZW5jZVwiLFwicXVpZXRcIl0sY2hhcjpcIvCflIdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbWVnYTp7a2V5d29yZHM6W1wic291bmRcIixcInNwZWFrZXJcIixcInZvbHVtZVwiXSxjaGFyOlwi8J+To1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxsb3Vkc3BlYWtlcjp7a2V5d29yZHM6W1widm9sdW1lXCIsXCJzb3VuZFwiXSxjaGFyOlwi8J+TolwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxiZWxsOntrZXl3b3JkczpbXCJzb3VuZFwiLFwibm90aWZpY2F0aW9uXCIsXCJjaHJpc3RtYXNcIixcInhtYXNcIixcImNoaW1lXCJdLGNoYXI6XCLwn5SUXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LG5vX2JlbGw6e2tleXdvcmRzOltcInNvdW5kXCIsXCJ2b2x1bWVcIixcIm11dGVcIixcInF1aWV0XCIsXCJzaWxlbnRcIl0sY2hhcjpcIvCflJVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYmxhY2tfam9rZXI6e2tleXdvcmRzOltcInBva2VyXCIsXCJjYXJkc1wiLFwiZ2FtZVwiLFwicGxheVwiLFwibWFnaWNcIl0sY2hhcjpcIvCfg49cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbWFoam9uZzp7a2V5d29yZHM6W1wiZ2FtZVwiLFwicGxheVwiLFwiY2hpbmVzZVwiLFwia2FuamlcIl0sY2hhcjpcIvCfgIRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sc3BhZGVzOntrZXl3b3JkczpbXCJwb2tlclwiLFwiY2FyZHNcIixcInN1aXRzXCIsXCJtYWdpY1wiXSxjaGFyOlwi4pmg77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGNsdWJzOntrZXl3b3JkczpbXCJwb2tlclwiLFwiY2FyZHNcIixcIm1hZ2ljXCIsXCJzdWl0c1wiXSxjaGFyOlwi4pmj77iPXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGhlYXJ0czp7a2V5d29yZHM6W1wicG9rZXJcIixcImNhcmRzXCIsXCJtYWdpY1wiLFwic3VpdHNcIl0sY2hhcjpcIuKZpe+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxkaWFtb25kczp7a2V5d29yZHM6W1wicG9rZXJcIixcImNhcmRzXCIsXCJtYWdpY1wiLFwic3VpdHNcIl0sY2hhcjpcIuKZpu+4j1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxmbG93ZXJfcGxheWluZ19jYXJkczp7a2V5d29yZHM6W1wiZ2FtZVwiLFwic3Vuc2V0XCIsXCJyZWRcIl0sY2hhcjpcIvCfjrRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sdGhvdWdodF9iYWxsb29uOntrZXl3b3JkczpbXCJidWJibGVcIixcImNsb3VkXCIsXCJzcGVlY2hcIixcInRoaW5raW5nXCIsXCJkcmVhbVwiXSxjaGFyOlwi8J+SrVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxyaWdodF9hbmdlcl9idWJibGU6e2tleXdvcmRzOltcImNhcHRpb25cIixcInNwZWVjaFwiLFwidGhpbmtpbmdcIixcIm1hZFwiXSxjaGFyOlwi8J+Xr1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxzcGVlY2hfYmFsbG9vbjp7a2V5d29yZHM6W1wiYnViYmxlXCIsXCJ3b3Jkc1wiLFwibWVzc2FnZVwiLFwidGFsa1wiLFwiY2hhdHRpbmdcIl0sY2hhcjpcIvCfkqxcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sbGVmdF9zcGVlY2hfYnViYmxlOntrZXl3b3JkczpbXCJ3b3Jkc1wiLFwibWVzc2FnZVwiLFwidGFsa1wiLFwiY2hhdHRpbmdcIl0sY2hhcjpcIvCfl6hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2xvY2sxOntrZXl3b3JkczpbXCJ0aW1lXCIsXCJsYXRlXCIsXCJlYXJseVwiLFwic2NoZWR1bGVcIl0sY2hhcjpcIvCflZBcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2xvY2syOntrZXl3b3JkczpbXCJ0aW1lXCIsXCJsYXRlXCIsXCJlYXJseVwiLFwic2NoZWR1bGVcIl0sY2hhcjpcIvCflZFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2xvY2szOntrZXl3b3JkczpbXCJ0aW1lXCIsXCJsYXRlXCIsXCJlYXJseVwiLFwic2NoZWR1bGVcIl0sY2hhcjpcIvCflZJcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2xvY2s0OntrZXl3b3JkczpbXCJ0aW1lXCIsXCJsYXRlXCIsXCJlYXJseVwiLFwic2NoZWR1bGVcIl0sY2hhcjpcIvCflZNcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2xvY2s1OntrZXl3b3JkczpbXCJ0aW1lXCIsXCJsYXRlXCIsXCJlYXJseVwiLFwic2NoZWR1bGVcIl0sY2hhcjpcIvCflZRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2xvY2s2OntrZXl3b3JkczpbXCJ0aW1lXCIsXCJsYXRlXCIsXCJlYXJseVwiLFwic2NoZWR1bGVcIixcImRhd25cIixcImR1c2tcIl0sY2hhcjpcIvCflZVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2xvY2s3OntrZXl3b3JkczpbXCJ0aW1lXCIsXCJsYXRlXCIsXCJlYXJseVwiLFwic2NoZWR1bGVcIl0sY2hhcjpcIvCflZZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2xvY2s4OntrZXl3b3JkczpbXCJ0aW1lXCIsXCJsYXRlXCIsXCJlYXJseVwiLFwic2NoZWR1bGVcIl0sY2hhcjpcIvCflZdcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2xvY2s5OntrZXl3b3JkczpbXCJ0aW1lXCIsXCJsYXRlXCIsXCJlYXJseVwiLFwic2NoZWR1bGVcIl0sY2hhcjpcIvCflZhcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2xvY2sxMDp7a2V5d29yZHM6W1widGltZVwiLFwibGF0ZVwiLFwiZWFybHlcIixcInNjaGVkdWxlXCJdLGNoYXI6XCLwn5WZXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGNsb2NrMTE6e2tleXdvcmRzOltcInRpbWVcIixcImxhdGVcIixcImVhcmx5XCIsXCJzY2hlZHVsZVwiXSxjaGFyOlwi8J+VmlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjbG9jazEyOntrZXl3b3JkczpbXCJ0aW1lXCIsXCJub29uXCIsXCJtaWRuaWdodFwiLFwibWlkZGF5XCIsXCJsYXRlXCIsXCJlYXJseVwiLFwic2NoZWR1bGVcIl0sY2hhcjpcIvCflZtcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2xvY2sxMzA6e2tleXdvcmRzOltcInRpbWVcIixcImxhdGVcIixcImVhcmx5XCIsXCJzY2hlZHVsZVwiXSxjaGFyOlwi8J+VnFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjbG9jazIzMDp7a2V5d29yZHM6W1widGltZVwiLFwibGF0ZVwiLFwiZWFybHlcIixcInNjaGVkdWxlXCJdLGNoYXI6XCLwn5WdXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGNsb2NrMzMwOntrZXl3b3JkczpbXCJ0aW1lXCIsXCJsYXRlXCIsXCJlYXJseVwiLFwic2NoZWR1bGVcIl0sY2hhcjpcIvCflZ5cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2xvY2s0MzA6e2tleXdvcmRzOltcInRpbWVcIixcImxhdGVcIixcImVhcmx5XCIsXCJzY2hlZHVsZVwiXSxjaGFyOlwi8J+Vn1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjbG9jazUzMDp7a2V5d29yZHM6W1widGltZVwiLFwibGF0ZVwiLFwiZWFybHlcIixcInNjaGVkdWxlXCJdLGNoYXI6XCLwn5WgXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGNsb2NrNjMwOntrZXl3b3JkczpbXCJ0aW1lXCIsXCJsYXRlXCIsXCJlYXJseVwiLFwic2NoZWR1bGVcIl0sY2hhcjpcIvCflaFcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2xvY2s3MzA6e2tleXdvcmRzOltcInRpbWVcIixcImxhdGVcIixcImVhcmx5XCIsXCJzY2hlZHVsZVwiXSxjaGFyOlwi8J+VolwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5Olwic3ltYm9sc1wifSxjbG9jazgzMDp7a2V5d29yZHM6W1widGltZVwiLFwibGF0ZVwiLFwiZWFybHlcIixcInNjaGVkdWxlXCJdLGNoYXI6XCLwn5WjXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJzeW1ib2xzXCJ9LGNsb2NrOTMwOntrZXl3b3JkczpbXCJ0aW1lXCIsXCJsYXRlXCIsXCJlYXJseVwiLFwic2NoZWR1bGVcIl0sY2hhcjpcIvCflaRcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2xvY2sxMDMwOntrZXl3b3JkczpbXCJ0aW1lXCIsXCJsYXRlXCIsXCJlYXJseVwiLFwic2NoZWR1bGVcIl0sY2hhcjpcIvCflaVcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2xvY2sxMTMwOntrZXl3b3JkczpbXCJ0aW1lXCIsXCJsYXRlXCIsXCJlYXJseVwiLFwic2NoZWR1bGVcIl0sY2hhcjpcIvCflaZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sY2xvY2sxMjMwOntrZXl3b3JkczpbXCJ0aW1lXCIsXCJsYXRlXCIsXCJlYXJseVwiLFwic2NoZWR1bGVcIl0sY2hhcjpcIvCfladcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcInN5bWJvbHNcIn0sYWZnaGFuaXN0YW46e2tleXdvcmRzOltcImFmXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HpvCfh6tcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGFsYW5kX2lzbGFuZHM6e2tleXdvcmRzOltcIsOFbGFuZFwiLFwiaXNsYW5kc1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6bwn4e9XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxhbGJhbmlhOntrZXl3b3JkczpbXCJhbFwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6bwn4exXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxhbGdlcmlhOntrZXl3b3JkczpbXCJkelwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6nwn4e/XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxhbWVyaWNhbl9zYW1vYTp7a2V5d29yZHM6W1wiYW1lcmljYW5cIixcIndzXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HpvCfh7hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGFuZG9ycmE6e2tleXdvcmRzOltcImFkXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HpvCfh6lcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGFuZ29sYTp7a2V5d29yZHM6W1wiYW9cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4em8J+HtFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sYW5ndWlsbGE6e2tleXdvcmRzOltcImFpXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HpvCfh65cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGFudGFyY3RpY2E6e2tleXdvcmRzOltcImFxXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HpvCfh7ZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGFudGlndWFfYmFyYnVkYTp7a2V5d29yZHM6W1wiYW50aWd1YVwiLFwiYmFyYnVkYVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6bwn4esXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxhcmdlbnRpbmE6e2tleXdvcmRzOltcImFyXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HpvCfh7dcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGFybWVuaWE6e2tleXdvcmRzOltcImFtXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HpvCfh7JcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGFydWJhOntrZXl3b3JkczpbXCJhd1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6bwn4e8XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxhdXN0cmFsaWE6e2tleXdvcmRzOltcImF1XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HpvCfh7pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGF1c3RyaWE6e2tleXdvcmRzOltcImF0XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HpvCfh7lcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGF6ZXJiYWlqYW46e2tleXdvcmRzOltcImF6XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HpvCfh79cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGJhaGFtYXM6e2tleXdvcmRzOltcImJzXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hp/Cfh7hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGJhaHJhaW46e2tleXdvcmRzOltcImJoXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hp/Cfh61cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGJhbmdsYWRlc2g6e2tleXdvcmRzOltcImJkXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hp/Cfh6lcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGJhcmJhZG9zOntrZXl3b3JkczpbXCJiYlwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6fwn4enXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxiZWxhcnVzOntrZXl3b3JkczpbXCJieVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6fwn4e+XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxiZWxnaXVtOntrZXl3b3JkczpbXCJiZVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6fwn4eqXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxiZWxpemU6e2tleXdvcmRzOltcImJ6XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hp/Cfh79cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGJlbmluOntrZXl3b3JkczpbXCJialwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6fwn4evXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxiZXJtdWRhOntrZXl3b3JkczpbXCJibVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6fwn4eyXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxiaHV0YW46e2tleXdvcmRzOltcImJ0XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hp/Cfh7lcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGJvbGl2aWE6e2tleXdvcmRzOltcImJvXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hp/Cfh7RcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGNhcmliYmVhbl9uZXRoZXJsYW5kczp7a2V5d29yZHM6W1wiYm9uYWlyZVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6fwn4e2XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxib3NuaWFfaGVyemVnb3ZpbmE6e2tleXdvcmRzOltcImJvc25pYVwiLFwiaGVyemVnb3ZpbmFcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4en8J+HplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sYm90c3dhbmE6e2tleXdvcmRzOltcImJ3XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hp/Cfh7xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGJyYXppbDp7a2V5d29yZHM6W1wiYnJcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4en8J+Ht1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sYnJpdGlzaF9pbmRpYW5fb2NlYW5fdGVycml0b3J5OntrZXl3b3JkczpbXCJicml0aXNoXCIsXCJpbmRpYW5cIixcIm9jZWFuXCIsXCJ0ZXJyaXRvcnlcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eu8J+HtFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sYnJpdGlzaF92aXJnaW5faXNsYW5kczp7a2V5d29yZHM6W1wiYnJpdGlzaFwiLFwidmlyZ2luXCIsXCJpc2xhbmRzXCIsXCJidmlcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e78J+HrFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sYnJ1bmVpOntrZXl3b3JkczpbXCJiblwiLFwiZGFydXNzYWxhbVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6fwn4ezXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxidWxnYXJpYTp7a2V5d29yZHM6W1wiYmdcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4en8J+HrFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sYnVya2luYV9mYXNvOntrZXl3b3JkczpbXCJidXJraW5hXCIsXCJmYXNvXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hp/Cfh6tcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGJ1cnVuZGk6e2tleXdvcmRzOltcImJpXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hp/Cfh65cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGNhcGVfdmVyZGU6e2tleXdvcmRzOltcImNhYm9cIixcInZlcmRlXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HqPCfh7tcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGNhbWJvZGlhOntrZXl3b3JkczpbXCJraFwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Dwn4etXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxjYW1lcm9vbjp7a2V5d29yZHM6W1wiY21cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eo8J+HslwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sY2FuYWRhOntrZXl3b3JkczpbXCJjYVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6jwn4emXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxjYW5hcnlfaXNsYW5kczp7a2V5d29yZHM6W1wiY2FuYXJ5XCIsXCJpc2xhbmRzXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrvCfh6hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGNheW1hbl9pc2xhbmRzOntrZXl3b3JkczpbXCJjYXltYW5cIixcImlzbGFuZHNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ew8J+HvlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sY2VudHJhbF9hZnJpY2FuX3JlcHVibGljOntrZXl3b3JkczpbXCJjZW50cmFsXCIsXCJhZnJpY2FuXCIsXCJyZXB1YmxpY1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6jwn4erXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxjaGFkOntrZXl3b3JkczpbXCJ0ZFwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7nwn4epXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxjaGlsZTp7a2V5d29yZHM6W1wiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6jwn4exXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxjbjp7a2V5d29yZHM6W1wiY2hpbmFcIixcImNoaW5lc2VcIixcInByY1wiLFwiZmxhZ1wiLFwiY291bnRyeVwiLFwibmF0aW9uXCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6jwn4ezXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxjaHJpc3RtYXNfaXNsYW5kOntrZXl3b3JkczpbXCJjaHJpc3RtYXNcIixcImlzbGFuZFwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6jwn4e9XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxjb2Nvc19pc2xhbmRzOntrZXl3b3JkczpbXCJjb2Nvc1wiLFwia2VlbGluZ1wiLFwiaXNsYW5kc1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6jwn4eoXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxjb2xvbWJpYTp7a2V5d29yZHM6W1wiY29cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eo8J+HtFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sY29tb3Jvczp7a2V5d29yZHM6W1wia21cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ew8J+HslwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sY29uZ29fYnJhenphdmlsbGU6e2tleXdvcmRzOltcImNvbmdvXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HqPCfh6xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGNvbmdvX2tpbnNoYXNhOntrZXl3b3JkczpbXCJjb25nb1wiLFwiZGVtb2NyYXRpY1wiLFwicmVwdWJsaWNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eo8J+HqVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sY29va19pc2xhbmRzOntrZXl3b3JkczpbXCJjb29rXCIsXCJpc2xhbmRzXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HqPCfh7BcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGNvc3RhX3JpY2E6e2tleXdvcmRzOltcImNvc3RhXCIsXCJyaWNhXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HqPCfh7dcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGNyb2F0aWE6e2tleXdvcmRzOltcImhyXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrfCfh7dcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGN1YmE6e2tleXdvcmRzOltcImN1XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HqPCfh7pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGN1cmFjYW86e2tleXdvcmRzOltcImN1cmHDp2FvXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HqPCfh7xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGN5cHJ1czp7a2V5d29yZHM6W1wiY3lcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eo8J+HvlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sY3plY2hfcmVwdWJsaWM6e2tleXdvcmRzOltcImN6XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HqPCfh79cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGRlbm1hcms6e2tleXdvcmRzOltcImRrXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HqfCfh7BcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGRqaWJvdXRpOntrZXl3b3JkczpbXCJkalwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6nwn4evXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxkb21pbmljYTp7a2V5d29yZHM6W1wiZG1cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ep8J+HslwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZG9taW5pY2FuX3JlcHVibGljOntrZXl3b3JkczpbXCJkb21pbmljYW5cIixcInJlcHVibGljXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HqfCfh7RcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGVjdWFkb3I6e2tleXdvcmRzOltcImVjXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HqvCfh6hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGVneXB0OntrZXl3b3JkczpbXCJlZ1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6rwn4esXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxlbF9zYWx2YWRvcjp7a2V5d29yZHM6W1wiZWxcIixcInNhbHZhZG9yXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HuPCfh7tcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGVxdWF0b3JpYWxfZ3VpbmVhOntrZXl3b3JkczpbXCJlcXVhdG9yaWFsXCIsXCJnblwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6zwn4e2XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxlcml0cmVhOntrZXl3b3JkczpbXCJlclwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6rwn4e3XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxlc3RvbmlhOntrZXl3b3JkczpbXCJlZVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6rwn4eqXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxldGhpb3BpYTp7a2V5d29yZHM6W1wiZXRcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eq8J+HuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZXU6e2tleXdvcmRzOltcImV1cm9wZWFuXCIsXCJ1bmlvblwiLFwiZmxhZ1wiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eq8J+HulwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZmFsa2xhbmRfaXNsYW5kczp7a2V5d29yZHM6W1wiZmFsa2xhbmRcIixcImlzbGFuZHNcIixcIm1hbHZpbmFzXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hq/Cfh7BcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGZhcm9lX2lzbGFuZHM6e2tleXdvcmRzOltcImZhcm9lXCIsXCJpc2xhbmRzXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hq/Cfh7RcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGZpamk6e2tleXdvcmRzOltcImZqXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hq/Cfh69cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGZpbmxhbmQ6e2tleXdvcmRzOltcImZpXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hq/Cfh65cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGZyOntrZXl3b3JkczpbXCJiYW5uZXJcIixcImZsYWdcIixcIm5hdGlvblwiLFwiZnJhbmNlXCIsXCJmcmVuY2hcIixcImNvdW50cnlcIl0sY2hhcjpcIvCfh6vwn4e3XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxmcmVuY2hfZ3VpYW5hOntrZXl3b3JkczpbXCJmcmVuY2hcIixcImd1aWFuYVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6zwn4erXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxmcmVuY2hfcG9seW5lc2lhOntrZXl3b3JkczpbXCJmcmVuY2hcIixcInBvbHluZXNpYVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Xwn4erXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxmcmVuY2hfc291dGhlcm5fdGVycml0b3JpZXM6e2tleXdvcmRzOltcImZyZW5jaFwiLFwic291dGhlcm5cIixcInRlcnJpdG9yaWVzXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HufCfh6tcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGdhYm9uOntrZXl3b3JkczpbXCJnYVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6zwn4emXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxnYW1iaWE6e2tleXdvcmRzOltcImdtXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrPCfh7JcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGdlb3JnaWE6e2tleXdvcmRzOltcImdlXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrPCfh6pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGRlOntrZXl3b3JkczpbXCJnZXJtYW5cIixcIm5hdGlvblwiLFwiZmxhZ1wiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ep8J+HqlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZ2hhbmE6e2tleXdvcmRzOltcImdoXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrPCfh61cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGdpYnJhbHRhcjp7a2V5d29yZHM6W1wiZ2lcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4es8J+HrlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZ3JlZWNlOntrZXl3b3JkczpbXCJnclwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6zwn4e3XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxncmVlbmxhbmQ6e2tleXdvcmRzOltcImdsXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrPCfh7FcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGdyZW5hZGE6e2tleXdvcmRzOltcImdkXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrPCfh6lcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGd1YWRlbG91cGU6e2tleXdvcmRzOltcImdwXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrPCfh7VcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGd1YW06e2tleXdvcmRzOltcImd1XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrPCfh7pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGd1YXRlbWFsYTp7a2V5d29yZHM6W1wiZ3RcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4es8J+HuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZ3Vlcm5zZXk6e2tleXdvcmRzOltcImdnXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrPCfh6xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGd1aW5lYTp7a2V5d29yZHM6W1wiZ25cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4es8J+Hs1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZ3VpbmVhX2Jpc3NhdTp7a2V5d29yZHM6W1wiZ3dcIixcImJpc3NhdVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6zwn4e8XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxndXlhbmE6e2tleXdvcmRzOltcImd5XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrPCfh75cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGhhaXRpOntrZXl3b3JkczpbXCJodFwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh63wn4e5XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxob25kdXJhczp7a2V5d29yZHM6W1wiaG5cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4et8J+Hs1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0saG9uZ19rb25nOntrZXl3b3JkczpbXCJob25nXCIsXCJrb25nXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrfCfh7BcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGh1bmdhcnk6e2tleXdvcmRzOltcImh1XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrfCfh7pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGljZWxhbmQ6e2tleXdvcmRzOltcImlzXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrvCfh7hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGluZGlhOntrZXl3b3JkczpbXCJpblwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh67wn4ezXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxpbmRvbmVzaWE6e2tleXdvcmRzOltcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eu8J+HqVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0saXJhbjp7a2V5d29yZHM6W1wiaXJhbixcIixcImlzbGFtaWNcIixcInJlcHVibGljXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrvCfh7dcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGlyYXE6e2tleXdvcmRzOltcImlxXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrvCfh7ZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGlyZWxhbmQ6e2tleXdvcmRzOltcImllXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HrvCfh6pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGlzbGVfb2ZfbWFuOntrZXl3b3JkczpbXCJpc2xlXCIsXCJtYW5cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eu8J+HslwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0saXNyYWVsOntrZXl3b3JkczpbXCJpbFwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh67wn4exXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxpdDp7a2V5d29yZHM6W1wiaXRhbHlcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eu8J+HuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sY290ZV9kaXZvaXJlOntrZXl3b3JkczpbXCJpdm9yeVwiLFwiY29hc3RcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eo8J+HrlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0samFtYWljYTp7a2V5d29yZHM6W1wiam1cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ev8J+HslwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sanA6e2tleXdvcmRzOltcImphcGFuZXNlXCIsXCJuYXRpb25cIixcImZsYWdcIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hr/Cfh7VcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGplcnNleTp7a2V5d29yZHM6W1wiamVcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ev8J+HqlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sam9yZGFuOntrZXl3b3JkczpbXCJqb1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6/wn4e0XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxrYXpha2hzdGFuOntrZXl3b3JkczpbXCJrelwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Dwn4e/XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxrZW55YTp7a2V5d29yZHM6W1wia2VcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ew8J+HqlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sa2lyaWJhdGk6e2tleXdvcmRzOltcImtpXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsPCfh65cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGtvc292bzp7a2V5d29yZHM6W1wieGtcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e98J+HsFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sa3V3YWl0OntrZXl3b3JkczpbXCJrd1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Dwn4e8XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxreXJneXpzdGFuOntrZXl3b3JkczpbXCJrZ1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Dwn4esXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxsYW9zOntrZXl3b3JkczpbXCJsYW9cIixcImRlbW9jcmF0aWNcIixcInJlcHVibGljXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsfCfh6ZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGxhdHZpYTp7a2V5d29yZHM6W1wibHZcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ex8J+Hu1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbGViYW5vbjp7a2V5d29yZHM6W1wibGJcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ex8J+Hp1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbGVzb3Robzp7a2V5d29yZHM6W1wibHNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ex8J+HuFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbGliZXJpYTp7a2V5d29yZHM6W1wibHJcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ex8J+Ht1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbGlieWE6e2tleXdvcmRzOltcImx5XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsfCfh75cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGxpZWNodGVuc3RlaW46e2tleXdvcmRzOltcImxpXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsfCfh65cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGxpdGh1YW5pYTp7a2V5d29yZHM6W1wibHRcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ex8J+HuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbHV4ZW1ib3VyZzp7a2V5d29yZHM6W1wibHVcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ex8J+HulwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbWFjYXU6e2tleXdvcmRzOltcIm1hY2FvXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsvCfh7RcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG1hY2Vkb25pYTp7a2V5d29yZHM6W1wibWFjZWRvbmlhLFwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Lwn4ewXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxtYWRhZ2FzY2FyOntrZXl3b3JkczpbXCJtZ1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Lwn4esXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxtYWxhd2k6e2tleXdvcmRzOltcIm13XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsvCfh7xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG1hbGF5c2lhOntrZXl3b3JkczpbXCJteVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Lwn4e+XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxtYWxkaXZlczp7a2V5d29yZHM6W1wibXZcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ey8J+Hu1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbWFsaTp7a2V5d29yZHM6W1wibWxcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ey8J+HsVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbWFsdGE6e2tleXdvcmRzOltcIm10XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsvCfh7lcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG1hcnNoYWxsX2lzbGFuZHM6e2tleXdvcmRzOltcIm1hcnNoYWxsXCIsXCJpc2xhbmRzXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsvCfh61cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG1hcnRpbmlxdWU6e2tleXdvcmRzOltcIm1xXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsvCfh7ZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG1hdXJpdGFuaWE6e2tleXdvcmRzOltcIm1yXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsvCfh7dcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG1hdXJpdGl1czp7a2V5d29yZHM6W1wibXVcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ey8J+HulwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbWF5b3R0ZTp7a2V5d29yZHM6W1wieXRcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e+8J+HuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbWV4aWNvOntrZXl3b3JkczpbXCJteFwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Lwn4e9XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxtaWNyb25lc2lhOntrZXl3b3JkczpbXCJtaWNyb25lc2lhLFwiLFwiZmVkZXJhdGVkXCIsXCJzdGF0ZXNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4er8J+HslwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbW9sZG92YTp7a2V5d29yZHM6W1wibW9sZG92YSxcIixcInJlcHVibGljXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsvCfh6lcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG1vbmFjbzp7a2V5d29yZHM6W1wibWNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ey8J+HqFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbW9uZ29saWE6e2tleXdvcmRzOltcIm1uXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsvCfh7NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG1vbnRlbmVncm86e2tleXdvcmRzOltcIm1lXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsvCfh6pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG1vbnRzZXJyYXQ6e2tleXdvcmRzOltcIm1zXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsvCfh7hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG1vcm9jY286e2tleXdvcmRzOltcIm1hXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsvCfh6ZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG1vemFtYmlxdWU6e2tleXdvcmRzOltcIm16XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsvCfh79cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG15YW5tYXI6e2tleXdvcmRzOltcIm1tXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsvCfh7JcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG5hbWliaWE6e2tleXdvcmRzOltcIm5hXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hs/Cfh6ZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG5hdXJ1OntrZXl3b3JkczpbXCJuclwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Pwn4e3XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxuZXBhbDp7a2V5d29yZHM6W1wibnBcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ez8J+HtVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbmV0aGVybGFuZHM6e2tleXdvcmRzOltcIm5sXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hs/Cfh7FcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG5ld19jYWxlZG9uaWE6e2tleXdvcmRzOltcIm5ld1wiLFwiY2FsZWRvbmlhXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hs/Cfh6hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG5ld196ZWFsYW5kOntrZXl3b3JkczpbXCJuZXdcIixcInplYWxhbmRcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ez8J+Hv1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbmljYXJhZ3VhOntrZXl3b3JkczpbXCJuaVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Pwn4euXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxuaWdlcjp7a2V5d29yZHM6W1wibmVcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ez8J+HqlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbmlnZXJpYTp7a2V5d29yZHM6W1wiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Pwn4esXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxuaXVlOntrZXl3b3JkczpbXCJudVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Pwn4e6XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxub3Jmb2xrX2lzbGFuZDp7a2V5d29yZHM6W1wibm9yZm9sa1wiLFwiaXNsYW5kXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hs/Cfh6tcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG5vcnRoZXJuX21hcmlhbmFfaXNsYW5kczp7a2V5d29yZHM6W1wibm9ydGhlcm5cIixcIm1hcmlhbmFcIixcImlzbGFuZHNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ey8J+HtVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sbm9ydGhfa29yZWE6e2tleXdvcmRzOltcIm5vcnRoXCIsXCJrb3JlYVwiLFwibmF0aW9uXCIsXCJmbGFnXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Dwn4e1XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxub3J3YXk6e2tleXdvcmRzOltcIm5vXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hs/Cfh7RcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LG9tYW46e2tleXdvcmRzOltcIm9tX3N5bWJvbFwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Twn4eyXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxwYWtpc3Rhbjp7a2V5d29yZHM6W1wicGtcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e18J+HsFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0scGFsYXU6e2tleXdvcmRzOltcInB3XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HtfCfh7xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHBhbGVzdGluaWFuX3RlcnJpdG9yaWVzOntrZXl3b3JkczpbXCJwYWxlc3RpbmVcIixcInBhbGVzdGluaWFuXCIsXCJ0ZXJyaXRvcmllc1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Xwn4e4XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxwYW5hbWE6e2tleXdvcmRzOltcInBhXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HtfCfh6ZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHBhcHVhX25ld19ndWluZWE6e2tleXdvcmRzOltcInBhcHVhXCIsXCJuZXdcIixcImd1aW5lYVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Xwn4esXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxwYXJhZ3VheTp7a2V5d29yZHM6W1wicHlcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e18J+HvlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0scGVydTp7a2V5d29yZHM6W1wicGVcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e18J+HqlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0scGhpbGlwcGluZXM6e2tleXdvcmRzOltcInBoXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HtfCfh61cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHBpdGNhaXJuX2lzbGFuZHM6e2tleXdvcmRzOltcInBpdGNhaXJuXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HtfCfh7NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHBvbGFuZDp7a2V5d29yZHM6W1wicGxcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e18J+HsVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0scG9ydHVnYWw6e2tleXdvcmRzOltcInB0XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HtfCfh7lcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHB1ZXJ0b19yaWNvOntrZXl3b3JkczpbXCJwdWVydG9cIixcInJpY29cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e18J+Ht1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0scWF0YXI6e2tleXdvcmRzOltcInFhXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HtvCfh6ZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHJldW5pb246e2tleXdvcmRzOltcInLDqXVuaW9uXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Ht/Cfh6pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHJvbWFuaWE6e2tleXdvcmRzOltcInJvXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Ht/Cfh7RcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHJ1OntrZXl3b3JkczpbXCJydXNzaWFuXCIsXCJmZWRlcmF0aW9uXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Ht/Cfh7pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHJ3YW5kYTp7a2V5d29yZHM6W1wicndcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e38J+HvFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sc3RfYmFydGhlbGVteTp7a2V5d29yZHM6W1wic2FpbnRcIixcImJhcnRow6lsZW15XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hp/Cfh7FcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHN0X2hlbGVuYTp7a2V5d29yZHM6W1wic2FpbnRcIixcImhlbGVuYVwiLFwiYXNjZW5zaW9uXCIsXCJ0cmlzdGFuXCIsXCJjdW5oYVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7jwn4etXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxzdF9raXR0c19uZXZpczp7a2V5d29yZHM6W1wic2FpbnRcIixcImtpdHRzXCIsXCJuZXZpc1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Dwn4ezXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxzdF9sdWNpYTp7a2V5d29yZHM6W1wic2FpbnRcIixcImx1Y2lhXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HsfCfh6hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHN0X3BpZXJyZV9taXF1ZWxvbjp7a2V5d29yZHM6W1wic2FpbnRcIixcInBpZXJyZVwiLFwibWlxdWVsb25cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e18J+HslwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sc3RfdmluY2VudF9ncmVuYWRpbmVzOntrZXl3b3JkczpbXCJzYWludFwiLFwidmluY2VudFwiLFwiZ3JlbmFkaW5lc1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7vwn4eoXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxzYW1vYTp7a2V5d29yZHM6W1wid3NcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e88J+HuFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sc2FuX21hcmlubzp7a2V5d29yZHM6W1wic2FuXCIsXCJtYXJpbm9cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e48J+HslwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sc2FvX3RvbWVfcHJpbmNpcGU6e2tleXdvcmRzOltcInNhb1wiLFwidG9tZVwiLFwicHJpbmNpcGVcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e48J+HuVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sc2F1ZGlfYXJhYmlhOntrZXl3b3JkczpbXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HuPCfh6ZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHNlbmVnYWw6e2tleXdvcmRzOltcInNuXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HuPCfh7NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHNlcmJpYTp7a2V5d29yZHM6W1wicnNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e38J+HuFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sc2V5Y2hlbGxlczp7a2V5d29yZHM6W1wic2NcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e48J+HqFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sc2llcnJhX2xlb25lOntrZXl3b3JkczpbXCJzaWVycmFcIixcImxlb25lXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HuPCfh7FcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHNpbmdhcG9yZTp7a2V5d29yZHM6W1wic2dcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e48J+HrFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sc2ludF9tYWFydGVuOntrZXl3b3JkczpbXCJzaW50XCIsXCJtYWFydGVuXCIsXCJkdXRjaFwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7jwn4e9XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxzbG92YWtpYTp7a2V5d29yZHM6W1wic2tcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e48J+HsFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sc2xvdmVuaWE6e2tleXdvcmRzOltcInNpXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HuPCfh65cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHNvbG9tb25faXNsYW5kczp7a2V5d29yZHM6W1wic29sb21vblwiLFwiaXNsYW5kc1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7jwn4enXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxzb21hbGlhOntrZXl3b3JkczpbXCJzb1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7jwn4e0XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxzb3V0aF9hZnJpY2E6e2tleXdvcmRzOltcInNvdXRoXCIsXCJhZnJpY2FcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e/8J+HplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sc291dGhfZ2VvcmdpYV9zb3V0aF9zYW5kd2ljaF9pc2xhbmRzOntrZXl3b3JkczpbXCJzb3V0aFwiLFwiZ2VvcmdpYVwiLFwic2FuZHdpY2hcIixcImlzbGFuZHNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4es8J+HuFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sa3I6e2tleXdvcmRzOltcInNvdXRoXCIsXCJrb3JlYVwiLFwibmF0aW9uXCIsXCJmbGFnXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7Dwn4e3XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxzb3V0aF9zdWRhbjp7a2V5d29yZHM6W1wic291dGhcIixcInNkXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HuPCfh7hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LGVzOntrZXl3b3JkczpbXCJzcGFpblwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh6rwn4e4XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxzcmlfbGFua2E6e2tleXdvcmRzOltcInNyaVwiLFwibGFua2FcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4ex8J+HsFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sc3VkYW46e2tleXdvcmRzOltcInNkXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HuPCfh6lcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHN1cmluYW1lOntrZXl3b3JkczpbXCJzclwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7jwn4e3XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSxzd2F6aWxhbmQ6e2tleXdvcmRzOltcInN6XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HuPCfh79cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHN3ZWRlbjp7a2V5d29yZHM6W1wic2VcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e48J+HqlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sc3dpdHplcmxhbmQ6e2tleXdvcmRzOltcImNoXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HqPCfh61cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHN5cmlhOntrZXl3b3JkczpbXCJzeXJpYW5cIixcImFyYWJcIixcInJlcHVibGljXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HuPCfh75cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHRhaXdhbjp7a2V5d29yZHM6W1widHdcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e58J+HvFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sdGFqaWtpc3Rhbjp7a2V5d29yZHM6W1widGpcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e58J+Hr1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sdGFuemFuaWE6e2tleXdvcmRzOltcInRhbnphbmlhLFwiLFwidW5pdGVkXCIsXCJyZXB1YmxpY1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7nwn4e/XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSx0aGFpbGFuZDp7a2V5d29yZHM6W1widGhcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e58J+HrVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sdGltb3JfbGVzdGU6e2tleXdvcmRzOltcInRpbW9yXCIsXCJsZXN0ZVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7nwn4exXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSx0b2dvOntrZXl3b3JkczpbXCJ0Z1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7nwn4esXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSx0b2tlbGF1OntrZXl3b3JkczpbXCJ0a1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7nwn4ewXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSx0b25nYTp7a2V5d29yZHM6W1widG9cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e58J+HtFwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sdHJpbmlkYWRfdG9iYWdvOntrZXl3b3JkczpbXCJ0cmluaWRhZFwiLFwidG9iYWdvXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HufCfh7lcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHR1bmlzaWE6e2tleXdvcmRzOltcInRuXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HufCfh7NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHRyOntrZXl3b3JkczpbXCJ0dXJrZXlcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e58J+Ht1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sdHVya21lbmlzdGFuOntrZXl3b3JkczpbXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HufCfh7JcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHR1cmtzX2NhaWNvc19pc2xhbmRzOntrZXl3b3JkczpbXCJ0dXJrc1wiLFwiY2FpY29zXCIsXCJpc2xhbmRzXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HufCfh6hcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHR1dmFsdTp7a2V5d29yZHM6W1wiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7nwn4e7XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSx1Z2FuZGE6e2tleXdvcmRzOltcInVnXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HuvCfh6xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHVrcmFpbmU6e2tleXdvcmRzOltcInVhXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HuvCfh6ZcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHVuaXRlZF9hcmFiX2VtaXJhdGVzOntrZXl3b3JkczpbXCJ1bml0ZWRcIixcImFyYWJcIixcImVtaXJhdGVzXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HpvCfh6pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHVrOntrZXl3b3JkczpbXCJ1bml0ZWRcIixcImtpbmdkb21cIixcImdyZWF0XCIsXCJicml0YWluXCIsXCJub3J0aGVyblwiLFwiaXJlbGFuZFwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIixcImJyaXRpc2hcIixcIlVLXCIsXCJlbmdsaXNoXCIsXCJlbmdsYW5kXCIsXCJ1bmlvbiBqYWNrXCJdLGNoYXI6XCLwn4es8J+Hp1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sZW5nbGFuZDp7a2V5d29yZHM6W1wiZmxhZ1wiLFwiZW5nbGlzaFwiXSxjaGFyOlwi8J+PtPOggafzoIGi86CBpfOgga7zoIGn86CBv1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sc2NvdGxhbmQ6e2tleXdvcmRzOltcImZsYWdcIixcInNjb3R0aXNoXCJdLGNoYXI6XCLwn4+086CBp/OggaLzoIGz86CBo/OggbTzoIG/XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSx3YWxlczp7a2V5d29yZHM6W1wiZmxhZ1wiLFwid2Vsc2hcIl0sY2hhcjpcIvCfj7TzoIGn86CBovOggbfzoIGs86CBs/Oggb9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHVzOntrZXl3b3JkczpbXCJ1bml0ZWRcIixcInN0YXRlc1wiLFwiYW1lcmljYVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7rwn4e4XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSx1c192aXJnaW5faXNsYW5kczp7a2V5d29yZHM6W1widmlyZ2luXCIsXCJpc2xhbmRzXCIsXCJ1c1wiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7vwn4euXCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSx1cnVndWF5OntrZXl3b3JkczpbXCJ1eVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7rwn4e+XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSx1emJla2lzdGFuOntrZXl3b3JkczpbXCJ1elwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7rwn4e/XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSx2YW51YXR1OntrZXl3b3JkczpbXCJ2dVwiLFwiZmxhZ1wiLFwibmF0aW9uXCIsXCJjb3VudHJ5XCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfh7vwn4e6XCIsZml0enBhdHJpY2tfc2NhbGU6ZmFsc2UsY2F0ZWdvcnk6XCJmbGFnc1wifSx2YXRpY2FuX2NpdHk6e2tleXdvcmRzOltcInZhdGljYW5cIixcImNpdHlcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e78J+HplwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sdmVuZXp1ZWxhOntrZXl3b3JkczpbXCJ2ZVwiLFwiYm9saXZhcmlhblwiLFwicmVwdWJsaWNcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e78J+HqlwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0sdmlldG5hbTp7a2V5d29yZHM6W1widmlldFwiLFwibmFtXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hu/Cfh7NcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHdhbGxpc19mdXR1bmE6e2tleXdvcmRzOltcIndhbGxpc1wiLFwiZnV0dW5hXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HvPCfh6tcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHdlc3Rlcm5fc2FoYXJhOntrZXl3b3JkczpbXCJ3ZXN0ZXJuXCIsXCJzYWhhcmFcIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4eq8J+HrVwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0seWVtZW46e2tleXdvcmRzOltcInllXCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+HvvCfh6pcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHphbWJpYTp7a2V5d29yZHM6W1wiem1cIixcImZsYWdcIixcIm5hdGlvblwiLFwiY291bnRyeVwiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e/8J+HslwiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0semltYmFid2U6e2tleXdvcmRzOltcInp3XCIsXCJmbGFnXCIsXCJuYXRpb25cIixcImNvdW50cnlcIixcImJhbm5lclwiXSxjaGFyOlwi8J+Hv/Cfh7xcIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9LHVuaXRlZF9uYXRpb25zOntrZXl3b3JkczpbXCJ1blwiLFwiZmxhZ1wiLFwiYmFubmVyXCJdLGNoYXI6XCLwn4e68J+Hs1wiLGZpdHpwYXRyaWNrX3NjYWxlOmZhbHNlLGNhdGVnb3J5OlwiZmxhZ3NcIn0scGlyYXRlX2ZsYWc6e2tleXdvcmRzOltcInNrdWxsXCIsXCJjcm9zc2JvbmVzXCIsXCJmbGFnXCIsXCJiYW5uZXJcIl0sY2hhcjpcIvCfj7TigI3imKDvuI9cIixmaXR6cGF0cmlja19zY2FsZTpmYWxzZSxjYXRlZ29yeTpcImZsYWdzXCJ9fSk7IiwiLyoqXG4gKiBUaW55TUNFIHZlcnNpb24gNi43LjAgKDIwMjMtMDgtMzApXG4gKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgZ2xvYmFsJDEgPSB0aW55bWNlLnV0aWwuVG9vbHMucmVzb2x2ZSgndGlueW1jZS5QbHVnaW5NYW5hZ2VyJyk7XG5cbiAgICBjb25zdCBlcSA9IHQgPT4gYSA9PiB0ID09PSBhO1xuICAgIGNvbnN0IGlzTnVsbCA9IGVxKG51bGwpO1xuICAgIGNvbnN0IGlzVW5kZWZpbmVkID0gZXEodW5kZWZpbmVkKTtcbiAgICBjb25zdCBpc051bGxhYmxlID0gYSA9PiBhID09PSBudWxsIHx8IGEgPT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpc05vbk51bGxhYmxlID0gYSA9PiAhaXNOdWxsYWJsZShhKTtcblxuICAgIGNvbnN0IG5vb3AgPSAoKSA9PiB7XG4gICAgfTtcbiAgICBjb25zdCBjb25zdGFudCA9IHZhbHVlID0+IHtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBuZXZlciA9IGNvbnN0YW50KGZhbHNlKTtcblxuICAgIGNsYXNzIE9wdGlvbmFsIHtcbiAgICAgIGNvbnN0cnVjdG9yKHRhZywgdmFsdWUpIHtcbiAgICAgICAgdGhpcy50YWcgPSB0YWc7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHN0YXRpYyBzb21lKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBuZXcgT3B0aW9uYWwodHJ1ZSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgc3RhdGljIG5vbmUoKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zaW5nbGV0b25Ob25lO1xuICAgICAgfVxuICAgICAgZm9sZChvbk5vbmUsIG9uU29tZSkge1xuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICByZXR1cm4gb25Tb21lKHRoaXMudmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBvbk5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaXNTb21lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWc7XG4gICAgICB9XG4gICAgICBpc05vbmUoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy50YWc7XG4gICAgICB9XG4gICAgICBtYXAobWFwcGVyKSB7XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKG1hcHBlcih0aGlzLnZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYmluZChiaW5kZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgcmV0dXJuIGJpbmRlcih0aGlzLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBleGlzdHMocHJlZGljYXRlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyAmJiBwcmVkaWNhdGUodGhpcy52YWx1ZSk7XG4gICAgICB9XG4gICAgICBmb3JhbGwocHJlZGljYXRlKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy50YWcgfHwgcHJlZGljYXRlKHRoaXMudmFsdWUpO1xuICAgICAgfVxuICAgICAgZmlsdGVyKHByZWRpY2F0ZSkge1xuICAgICAgICBpZiAoIXRoaXMudGFnIHx8IHByZWRpY2F0ZSh0aGlzLnZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGdldE9yKHJlcGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMudmFsdWUgOiByZXBsYWNlbWVudDtcbiAgICAgIH1cbiAgICAgIG9yKHJlcGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMgOiByZXBsYWNlbWVudDtcbiAgICAgIH1cbiAgICAgIGdldE9yVGh1bmsodGh1bmspIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gdGhpcy52YWx1ZSA6IHRodW5rKCk7XG4gICAgICB9XG4gICAgICBvclRodW5rKHRodW5rKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMgOiB0aHVuaygpO1xuICAgICAgfVxuICAgICAgZ2V0T3JEaWUobWVzc2FnZSkge1xuICAgICAgICBpZiAoIXRoaXMudGFnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgIT09IG51bGwgJiYgbWVzc2FnZSAhPT0gdm9pZCAwID8gbWVzc2FnZSA6ICdDYWxsZWQgZ2V0T3JEaWUgb24gTm9uZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdGF0aWMgZnJvbSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gaXNOb25OdWxsYWJsZSh2YWx1ZSkgPyBPcHRpb25hbC5zb21lKHZhbHVlKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICAgIGdldE9yTnVsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gdGhpcy52YWx1ZSA6IG51bGw7XG4gICAgICB9XG4gICAgICBnZXRPclVuZGVmaW5lZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICB9XG4gICAgICBlYWNoKHdvcmtlcikge1xuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICB3b3JrZXIodGhpcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRvQXJyYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IFt0aGlzLnZhbHVlXSA6IFtdO1xuICAgICAgfVxuICAgICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IGBzb21lKCR7IHRoaXMudmFsdWUgfSlgIDogJ25vbmUoKSc7XG4gICAgICB9XG4gICAgfVxuICAgIE9wdGlvbmFsLnNpbmdsZXRvbk5vbmUgPSBuZXcgT3B0aW9uYWwoZmFsc2UpO1xuXG4gICAgY29uc3QgZXhpc3RzID0gKHhzLCBwcmVkKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0geHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgeCA9IHhzW2ldO1xuICAgICAgICBpZiAocHJlZCh4LCBpKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBjb25zdCBtYXAkMSA9ICh4cywgZikgPT4ge1xuICAgICAgY29uc3QgbGVuID0geHMubGVuZ3RoO1xuICAgICAgY29uc3QgciA9IG5ldyBBcnJheShsZW4pO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIHJbaV0gPSBmKHgsIGkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBlYWNoJDEgPSAoeHMsIGYpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGYoeCwgaSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IENlbGwgPSBpbml0aWFsID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGluaXRpYWw7XG4gICAgICBjb25zdCBnZXQgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXQgPSB2ID0+IHtcbiAgICAgICAgdmFsdWUgPSB2O1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdldCxcbiAgICAgICAgc2V0XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBsYXN0ID0gKGZuLCByYXRlKSA9PiB7XG4gICAgICBsZXQgdGltZXIgPSBudWxsO1xuICAgICAgY29uc3QgY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWlzTnVsbCh0aW1lcikpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHRocm90dGxlID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgY2FuY2VsKCk7XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICB9LCByYXRlKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjYW5jZWwsXG4gICAgICAgIHRocm90dGxlXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBpbnNlcnRFbW90aWNvbiA9IChlZGl0b3IsIGNoKSA9PiB7XG4gICAgICBlZGl0b3IuaW5zZXJ0Q29udGVudChjaCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cztcbiAgICBjb25zdCBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5oYXNPd25Qcm9wZXJ0eTtcbiAgICBjb25zdCBlYWNoID0gKG9iaiwgZikgPT4ge1xuICAgICAgY29uc3QgcHJvcHMgPSBrZXlzKG9iaik7XG4gICAgICBmb3IgKGxldCBrID0gMCwgbGVuID0gcHJvcHMubGVuZ3RoOyBrIDwgbGVuOyBrKyspIHtcbiAgICAgICAgY29uc3QgaSA9IHByb3BzW2tdO1xuICAgICAgICBjb25zdCB4ID0gb2JqW2ldO1xuICAgICAgICBmKHgsIGkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbWFwID0gKG9iaiwgZikgPT4ge1xuICAgICAgcmV0dXJuIHR1cGxlTWFwKG9iaiwgKHgsIGkpID0+ICh7XG4gICAgICAgIGs6IGksXG4gICAgICAgIHY6IGYoeCwgaSlcbiAgICAgIH0pKTtcbiAgICB9O1xuICAgIGNvbnN0IHR1cGxlTWFwID0gKG9iaiwgZikgPT4ge1xuICAgICAgY29uc3QgciA9IHt9O1xuICAgICAgZWFjaChvYmosICh4LCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IHR1cGxlID0gZih4LCBpKTtcbiAgICAgICAgclt0dXBsZS5rXSA9IHR1cGxlLnY7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3QgaGFzID0gKG9iaiwga2V5KSA9PiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcblxuICAgIGNvbnN0IHNoYWxsb3cgPSAob2xkLCBudSkgPT4ge1xuICAgICAgcmV0dXJuIG51O1xuICAgIH07XG4gICAgY29uc3QgYmFzZU1lcmdlID0gbWVyZ2VyID0+IHtcbiAgICAgIHJldHVybiAoLi4ub2JqZWN0cykgPT4ge1xuICAgICAgICBpZiAob2JqZWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IG1lcmdlIHplcm8gb2JqZWN0c2ApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldCA9IHt9O1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG9iamVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBjb25zdCBjdXJPYmplY3QgPSBvYmplY3RzW2pdO1xuICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGN1ck9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGhhcyhjdXJPYmplY3QsIGtleSkpIHtcbiAgICAgICAgICAgICAgcmV0W2tleV0gPSBtZXJnZXIocmV0W2tleV0sIGN1ck9iamVjdFtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBtZXJnZSA9IGJhc2VNZXJnZShzaGFsbG93KTtcblxuICAgIGNvbnN0IHNpbmdsZXRvbiA9IGRvUmV2b2tlID0+IHtcbiAgICAgIGNvbnN0IHN1YmplY3QgPSBDZWxsKE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgICBjb25zdCByZXZva2UgPSAoKSA9PiBzdWJqZWN0LmdldCgpLmVhY2goZG9SZXZva2UpO1xuICAgICAgY29uc3QgY2xlYXIgPSAoKSA9PiB7XG4gICAgICAgIHJldm9rZSgpO1xuICAgICAgICBzdWJqZWN0LnNldChPcHRpb25hbC5ub25lKCkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzU2V0ID0gKCkgPT4gc3ViamVjdC5nZXQoKS5pc1NvbWUoKTtcbiAgICAgIGNvbnN0IGdldCA9ICgpID0+IHN1YmplY3QuZ2V0KCk7XG4gICAgICBjb25zdCBzZXQgPSBzID0+IHtcbiAgICAgICAgcmV2b2tlKCk7XG4gICAgICAgIHN1YmplY3Quc2V0KE9wdGlvbmFsLnNvbWUocykpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsZWFyLFxuICAgICAgICBpc1NldCxcbiAgICAgICAgZ2V0LFxuICAgICAgICBzZXRcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCB2YWx1ZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHN1YmplY3QgPSBzaW5nbGV0b24obm9vcCk7XG4gICAgICBjb25zdCBvbiA9IGYgPT4gc3ViamVjdC5nZXQoKS5lYWNoKGYpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3ViamVjdCxcbiAgICAgICAgb25cbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGNoZWNrUmFuZ2UgPSAoc3RyLCBzdWJzdHIsIHN0YXJ0KSA9PiBzdWJzdHIgPT09ICcnIHx8IHN0ci5sZW5ndGggPj0gc3Vic3RyLmxlbmd0aCAmJiBzdHIuc3Vic3RyKHN0YXJ0LCBzdGFydCArIHN1YnN0ci5sZW5ndGgpID09PSBzdWJzdHI7XG4gICAgY29uc3QgY29udGFpbnMgPSAoc3RyLCBzdWJzdHIsIHN0YXJ0ID0gMCwgZW5kKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBzdHIuaW5kZXhPZihzdWJzdHIsIHN0YXJ0KTtcbiAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgIHJldHVybiBpc1VuZGVmaW5lZChlbmQpID8gdHJ1ZSA6IGlkeCArIHN1YnN0ci5sZW5ndGggPD0gZW5kO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc3RhcnRzV2l0aCA9IChzdHIsIHByZWZpeCkgPT4ge1xuICAgICAgcmV0dXJuIGNoZWNrUmFuZ2Uoc3RyLCBwcmVmaXgsIDApO1xuICAgIH07XG5cbiAgICB2YXIgZ2xvYmFsID0gdGlueW1jZS51dGlsLlRvb2xzLnJlc29sdmUoJ3RpbnltY2UuUmVzb3VyY2UnKTtcblxuICAgIGNvbnN0IERFRkFVTFRfSUQgPSAndGlueW1jZS5wbHVnaW5zLmVtb3RpY29ucyc7XG4gICAgY29uc3Qgb3B0aW9uID0gbmFtZSA9PiBlZGl0b3IgPT4gZWRpdG9yLm9wdGlvbnMuZ2V0KG5hbWUpO1xuICAgIGNvbnN0IHJlZ2lzdGVyJDIgPSAoZWRpdG9yLCBwbHVnaW5VcmwpID0+IHtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyT3B0aW9uID0gZWRpdG9yLm9wdGlvbnMucmVnaXN0ZXI7XG4gICAgICByZWdpc3Rlck9wdGlvbignZW1vdGljb25zX2RhdGFiYXNlJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnZW1vamlzJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignZW1vdGljb25zX2RhdGFiYXNlX3VybCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogYCR7IHBsdWdpblVybCB9L2pzLyR7IGdldEVtb2ppRGF0YWJhc2UoZWRpdG9yKSB9JHsgZWRpdG9yLnN1ZmZpeCB9LmpzYFxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignZW1vdGljb25zX2RhdGFiYXNlX2lkJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiBERUZBVUxUX0lEXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdlbW90aWNvbnNfYXBwZW5kJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdvYmplY3QnLFxuICAgICAgICBkZWZhdWx0OiB7fVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignZW1vdGljb25zX2ltYWdlc191cmwnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICdodHRwczovL3R3ZW1vamkubWF4Y2RuLmNvbS92LzEzLjAuMS83Mng3Mi8nXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEVtb2ppRGF0YWJhc2UgPSBvcHRpb24oJ2Vtb3RpY29uc19kYXRhYmFzZScpO1xuICAgIGNvbnN0IGdldEVtb2ppRGF0YWJhc2VVcmwgPSBvcHRpb24oJ2Vtb3RpY29uc19kYXRhYmFzZV91cmwnKTtcbiAgICBjb25zdCBnZXRFbW9qaURhdGFiYXNlSWQgPSBvcHRpb24oJ2Vtb3RpY29uc19kYXRhYmFzZV9pZCcpO1xuICAgIGNvbnN0IGdldEFwcGVuZGVkRW1vamkgPSBvcHRpb24oJ2Vtb3RpY29uc19hcHBlbmQnKTtcbiAgICBjb25zdCBnZXRFbW9qaUltYWdlVXJsID0gb3B0aW9uKCdlbW90aWNvbnNfaW1hZ2VzX3VybCcpO1xuXG4gICAgY29uc3QgQUxMX0NBVEVHT1JZID0gJ0FsbCc7XG4gICAgY29uc3QgY2F0ZWdvcnlOYW1lTWFwID0ge1xuICAgICAgc3ltYm9sczogJ1N5bWJvbHMnLFxuICAgICAgcGVvcGxlOiAnUGVvcGxlJyxcbiAgICAgIGFuaW1hbHNfYW5kX25hdHVyZTogJ0FuaW1hbHMgYW5kIE5hdHVyZScsXG4gICAgICBmb29kX2FuZF9kcmluazogJ0Zvb2QgYW5kIERyaW5rJyxcbiAgICAgIGFjdGl2aXR5OiAnQWN0aXZpdHknLFxuICAgICAgdHJhdmVsX2FuZF9wbGFjZXM6ICdUcmF2ZWwgYW5kIFBsYWNlcycsXG4gICAgICBvYmplY3RzOiAnT2JqZWN0cycsXG4gICAgICBmbGFnczogJ0ZsYWdzJyxcbiAgICAgIHVzZXI6ICdVc2VyIERlZmluZWQnXG4gICAgfTtcbiAgICBjb25zdCB0cmFuc2xhdGVDYXRlZ29yeSA9IChjYXRlZ29yaWVzLCBuYW1lKSA9PiBoYXMoY2F0ZWdvcmllcywgbmFtZSkgPyBjYXRlZ29yaWVzW25hbWVdIDogbmFtZTtcbiAgICBjb25zdCBnZXRVc2VyRGVmaW5lZEVtb2ppID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHVzZXJEZWZpbmVkRW1vdGljb25zID0gZ2V0QXBwZW5kZWRFbW9qaShlZGl0b3IpO1xuICAgICAgcmV0dXJuIG1hcCh1c2VyRGVmaW5lZEVtb3RpY29ucywgdmFsdWUgPT4gKHtcbiAgICAgICAga2V5d29yZHM6IFtdLFxuICAgICAgICBjYXRlZ29yeTogJ3VzZXInLFxuICAgICAgICAuLi52YWx1ZVxuICAgICAgfSkpO1xuICAgIH07XG4gICAgY29uc3QgaW5pdERhdGFiYXNlID0gKGVkaXRvciwgZGF0YWJhc2VVcmwsIGRhdGFiYXNlSWQpID0+IHtcbiAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSB2YWx1ZSgpO1xuICAgICAgY29uc3QgYWxsID0gdmFsdWUoKTtcbiAgICAgIGNvbnN0IGVtb2ppSW1hZ2VzVXJsID0gZ2V0RW1vamlJbWFnZVVybChlZGl0b3IpO1xuICAgICAgY29uc3QgZ2V0RW1vamkgPSBsaWIgPT4ge1xuICAgICAgICBpZiAoc3RhcnRzV2l0aChsaWIuY2hhciwgJzxpbWcnKSkge1xuICAgICAgICAgIHJldHVybiBsaWIuY2hhci5yZXBsYWNlKC9zcmM9XCIoW15cIl0rKVwiLywgKG1hdGNoLCB1cmwpID0+IGBzcmM9XCIkeyBlbW9qaUltYWdlc1VybCB9JHsgdXJsIH1cImApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBsaWIuY2hhcjtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHByb2Nlc3NFbW9qaXMgPSBlbW9qaXMgPT4ge1xuICAgICAgICBjb25zdCBjYXRzID0ge307XG4gICAgICAgIGNvbnN0IGV2ZXJ5dGhpbmcgPSBbXTtcbiAgICAgICAgZWFjaChlbW9qaXMsIChsaWIsIHRpdGxlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZW50cnkgPSB7XG4gICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgIGtleXdvcmRzOiBsaWIua2V5d29yZHMsXG4gICAgICAgICAgICBjaGFyOiBnZXRFbW9qaShsaWIpLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IHRyYW5zbGF0ZUNhdGVnb3J5KGNhdGVnb3J5TmFtZU1hcCwgbGliLmNhdGVnb3J5KVxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgY3VycmVudCA9IGNhdHNbZW50cnkuY2F0ZWdvcnldICE9PSB1bmRlZmluZWQgPyBjYXRzW2VudHJ5LmNhdGVnb3J5XSA6IFtdO1xuICAgICAgICAgIGNhdHNbZW50cnkuY2F0ZWdvcnldID0gY3VycmVudC5jb25jYXQoW2VudHJ5XSk7XG4gICAgICAgICAgZXZlcnl0aGluZy5wdXNoKGVudHJ5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNhdGVnb3JpZXMuc2V0KGNhdHMpO1xuICAgICAgICBhbGwuc2V0KGV2ZXJ5dGhpbmcpO1xuICAgICAgfTtcbiAgICAgIGVkaXRvci5vbignaW5pdCcsICgpID0+IHtcbiAgICAgICAgZ2xvYmFsLmxvYWQoZGF0YWJhc2VJZCwgZGF0YWJhc2VVcmwpLnRoZW4oZW1vamlzID0+IHtcbiAgICAgICAgICBjb25zdCB1c2VyRW1vamlzID0gZ2V0VXNlckRlZmluZWRFbW9qaShlZGl0b3IpO1xuICAgICAgICAgIHByb2Nlc3NFbW9qaXMobWVyZ2UoZW1vamlzLCB1c2VyRW1vamlzKSk7XG4gICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coYEZhaWxlZCB0byBsb2FkIGVtb2ppczogJHsgZXJyIH1gKTtcbiAgICAgICAgICBjYXRlZ29yaWVzLnNldCh7fSk7XG4gICAgICAgICAgYWxsLnNldChbXSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBsaXN0Q2F0ZWdvcnkgPSBjYXRlZ29yeSA9PiB7XG4gICAgICAgIGlmIChjYXRlZ29yeSA9PT0gQUxMX0NBVEVHT1JZKSB7XG4gICAgICAgICAgcmV0dXJuIGxpc3RBbGwoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2F0ZWdvcmllcy5nZXQoKS5iaW5kKGNhdHMgPT4gT3B0aW9uYWwuZnJvbShjYXRzW2NhdGVnb3J5XSkpLmdldE9yKFtdKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBsaXN0QWxsID0gKCkgPT4gYWxsLmdldCgpLmdldE9yKFtdKTtcbiAgICAgIGNvbnN0IGxpc3RDYXRlZ29yaWVzID0gKCkgPT4gW0FMTF9DQVRFR09SWV0uY29uY2F0KGtleXMoY2F0ZWdvcmllcy5nZXQoKS5nZXRPcih7fSkpKTtcbiAgICAgIGNvbnN0IHdhaXRGb3JMb2FkID0gKCkgPT4ge1xuICAgICAgICBpZiAoaGFzTG9hZGVkKCkpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBsZXQgbnVtUmV0cmllcyA9IDE1O1xuICAgICAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChoYXNMb2FkZWQoKSkge1xuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbnVtUmV0cmllcy0tO1xuICAgICAgICAgICAgICAgIGlmIChudW1SZXRyaWVzIDwgMCkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0NvdWxkIG5vdCBsb2FkIGVtb2ppcyBmcm9tIHVybDogJyArIGRhdGFiYXNlVXJsKTtcbiAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgICAgcmVqZWN0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBoYXNMb2FkZWQgPSAoKSA9PiBjYXRlZ29yaWVzLmlzU2V0KCkgJiYgYWxsLmlzU2V0KCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaXN0Q2F0ZWdvcmllcyxcbiAgICAgICAgaGFzTG9hZGVkLFxuICAgICAgICB3YWl0Rm9yTG9hZCxcbiAgICAgICAgbGlzdEFsbCxcbiAgICAgICAgbGlzdENhdGVnb3J5XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBlbW9qaU1hdGNoZXMgPSAoZW1vamksIGxvd2VyQ2FzZVBhdHRlcm4pID0+IGNvbnRhaW5zKGVtb2ppLnRpdGxlLnRvTG93ZXJDYXNlKCksIGxvd2VyQ2FzZVBhdHRlcm4pIHx8IGV4aXN0cyhlbW9qaS5rZXl3b3JkcywgayA9PiBjb250YWlucyhrLnRvTG93ZXJDYXNlKCksIGxvd2VyQ2FzZVBhdHRlcm4pKTtcbiAgICBjb25zdCBlbW9qaXNGcm9tID0gKGxpc3QsIHBhdHRlcm4sIG1heFJlc3VsdHMpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBbXTtcbiAgICAgIGNvbnN0IGxvd2VyQ2FzZVBhdHRlcm4gPSBwYXR0ZXJuLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCByZWFjaGVkTGltaXQgPSBtYXhSZXN1bHRzLmZvbGQoKCkgPT4gbmV2ZXIsIG1heCA9PiBzaXplID0+IHNpemUgPj0gbWF4KTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocGF0dGVybi5sZW5ndGggPT09IDAgfHwgZW1vamlNYXRjaGVzKGxpc3RbaV0sIGxvd2VyQ2FzZVBhdHRlcm4pKSB7XG4gICAgICAgICAgbWF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICAgIHZhbHVlOiBsaXN0W2ldLmNoYXIsXG4gICAgICAgICAgICB0ZXh0OiBsaXN0W2ldLnRpdGxlLFxuICAgICAgICAgICAgaWNvbjogbGlzdFtpXS5jaGFyXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHJlYWNoZWRMaW1pdChtYXRjaGVzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG1hdGNoZXM7XG4gICAgfTtcblxuICAgIGNvbnN0IHBhdHRlcm5OYW1lID0gJ3BhdHRlcm4nO1xuICAgIGNvbnN0IG9wZW4gPSAoZWRpdG9yLCBkYXRhYmFzZSkgPT4ge1xuICAgICAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgICAgICBwYXR0ZXJuOiAnJyxcbiAgICAgICAgcmVzdWx0czogZW1vamlzRnJvbShkYXRhYmFzZS5saXN0QWxsKCksICcnLCBPcHRpb25hbC5zb21lKDMwMCkpXG4gICAgICB9O1xuICAgICAgY29uc3QgY3VycmVudFRhYiA9IENlbGwoQUxMX0NBVEVHT1JZKTtcbiAgICAgIGNvbnN0IHNjYW4gPSBkaWFsb2dBcGkgPT4ge1xuICAgICAgICBjb25zdCBkaWFsb2dEYXRhID0gZGlhbG9nQXBpLmdldERhdGEoKTtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSBjdXJyZW50VGFiLmdldCgpO1xuICAgICAgICBjb25zdCBjYW5kaWRhdGVzID0gZGF0YWJhc2UubGlzdENhdGVnb3J5KGNhdGVnb3J5KTtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGVtb2ppc0Zyb20oY2FuZGlkYXRlcywgZGlhbG9nRGF0YVtwYXR0ZXJuTmFtZV0sIGNhdGVnb3J5ID09PSBBTExfQ0FURUdPUlkgPyBPcHRpb25hbC5zb21lKDMwMCkgOiBPcHRpb25hbC5ub25lKCkpO1xuICAgICAgICBkaWFsb2dBcGkuc2V0RGF0YSh7IHJlc3VsdHMgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdXBkYXRlRmlsdGVyID0gbGFzdChkaWFsb2dBcGkgPT4ge1xuICAgICAgICBzY2FuKGRpYWxvZ0FwaSk7XG4gICAgICB9LCAyMDApO1xuICAgICAgY29uc3Qgc2VhcmNoRmllbGQgPSB7XG4gICAgICAgIGxhYmVsOiAnU2VhcmNoJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgbmFtZTogcGF0dGVybk5hbWVcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHRzRmllbGQgPSB7XG4gICAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgbmFtZTogJ3Jlc3VsdHMnXG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0SW5pdGlhbFN0YXRlID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICAgIHR5cGU6ICd0YWJwYW5lbCcsXG4gICAgICAgICAgdGFiczogbWFwJDEoZGF0YWJhc2UubGlzdENhdGVnb3JpZXMoKSwgY2F0ID0+ICh7XG4gICAgICAgICAgICB0aXRsZTogY2F0LFxuICAgICAgICAgICAgbmFtZTogY2F0LFxuICAgICAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICAgICAgc2VhcmNoRmllbGQsXG4gICAgICAgICAgICAgIHJlc3VsdHNGaWVsZFxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0pKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRpdGxlOiAnRW1vamlzJyxcbiAgICAgICAgICBzaXplOiAnbm9ybWFsJyxcbiAgICAgICAgICBib2R5LFxuICAgICAgICAgIGluaXRpYWxEYXRhOiBpbml0aWFsU3RhdGUsXG4gICAgICAgICAgb25UYWJDaGFuZ2U6IChkaWFsb2dBcGksIGRldGFpbHMpID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnRUYWIuc2V0KGRldGFpbHMubmV3VGFiTmFtZSk7XG4gICAgICAgICAgICB1cGRhdGVGaWx0ZXIudGhyb3R0bGUoZGlhbG9nQXBpKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uQ2hhbmdlOiB1cGRhdGVGaWx0ZXIudGhyb3R0bGUsXG4gICAgICAgICAgb25BY3Rpb246IChkaWFsb2dBcGksIGFjdGlvbkRhdGEpID0+IHtcbiAgICAgICAgICAgIGlmIChhY3Rpb25EYXRhLm5hbWUgPT09ICdyZXN1bHRzJykge1xuICAgICAgICAgICAgICBpbnNlcnRFbW90aWNvbihlZGl0b3IsIGFjdGlvbkRhdGEudmFsdWUpO1xuICAgICAgICAgICAgICBkaWFsb2dBcGkuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGJ1dHRvbnM6IFt7XG4gICAgICAgICAgICAgIHR5cGU6ICdjYW5jZWwnLFxuICAgICAgICAgICAgICB0ZXh0OiAnQ2xvc2UnLFxuICAgICAgICAgICAgICBwcmltYXJ5OiB0cnVlXG4gICAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRpYWxvZ0FwaSA9IGVkaXRvci53aW5kb3dNYW5hZ2VyLm9wZW4oZ2V0SW5pdGlhbFN0YXRlKCkpO1xuICAgICAgZGlhbG9nQXBpLmZvY3VzKHBhdHRlcm5OYW1lKTtcbiAgICAgIGlmICghZGF0YWJhc2UuaGFzTG9hZGVkKCkpIHtcbiAgICAgICAgZGlhbG9nQXBpLmJsb2NrKCdMb2FkaW5nIGVtb2ppcy4uLicpO1xuICAgICAgICBkYXRhYmFzZS53YWl0Rm9yTG9hZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGRpYWxvZ0FwaS5yZWRpYWwoZ2V0SW5pdGlhbFN0YXRlKCkpO1xuICAgICAgICAgIHVwZGF0ZUZpbHRlci50aHJvdHRsZShkaWFsb2dBcGkpO1xuICAgICAgICAgIGRpYWxvZ0FwaS5mb2N1cyhwYXR0ZXJuTmFtZSk7XG4gICAgICAgICAgZGlhbG9nQXBpLnVuYmxvY2soKTtcbiAgICAgICAgfSkuY2F0Y2goX2VyciA9PiB7XG4gICAgICAgICAgZGlhbG9nQXBpLnJlZGlhbCh7XG4gICAgICAgICAgICB0aXRsZTogJ0Vtb2ppcycsXG4gICAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdwYW5lbCcsXG4gICAgICAgICAgICAgIGl0ZW1zOiBbe1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ2FsZXJ0YmFubmVyJyxcbiAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgaWNvbjogJ3dhcm5pbmcnLFxuICAgICAgICAgICAgICAgICAgdGV4dDogJ0NvdWxkIG5vdCBsb2FkIGVtb2ppcydcbiAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJ1dHRvbnM6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgdGV4dDogJ0Nsb3NlJyxcbiAgICAgICAgICAgICAgICBwcmltYXJ5OiB0cnVlXG4gICAgICAgICAgICAgIH1dLFxuICAgICAgICAgICAgaW5pdGlhbERhdGE6IHtcbiAgICAgICAgICAgICAgcGF0dGVybjogJycsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZGlhbG9nQXBpLmZvY3VzKHBhdHRlcm5OYW1lKTtcbiAgICAgICAgICBkaWFsb2dBcGkudW5ibG9jaygpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmVnaXN0ZXIkMSA9IChlZGl0b3IsIGRhdGFiYXNlKSA9PiB7XG4gICAgICBlZGl0b3IuYWRkQ29tbWFuZCgnbWNlRW1vdGljb25zJywgKCkgPT4gb3BlbihlZGl0b3IsIGRhdGFiYXNlKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNldHVwID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5vbignUHJlSW5pdCcsICgpID0+IHtcbiAgICAgICAgZWRpdG9yLnBhcnNlci5hZGRBdHRyaWJ1dGVGaWx0ZXIoJ2RhdGEtZW1vdGljb24nLCBub2RlcyA9PiB7XG4gICAgICAgICAgZWFjaCQxKG5vZGVzLCBub2RlID0+IHtcbiAgICAgICAgICAgIG5vZGUuYXR0cignZGF0YS1tY2UtcmVzaXplJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICBub2RlLmF0dHIoJ2RhdGEtbWNlLXBsYWNlaG9sZGVyJywgJzEnKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgaW5pdCA9IChlZGl0b3IsIGRhdGFiYXNlKSA9PiB7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQXV0b2NvbXBsZXRlcignZW1vdGljb25zJywge1xuICAgICAgICB0cmlnZ2VyOiAnOicsXG4gICAgICAgIGNvbHVtbnM6ICdhdXRvJyxcbiAgICAgICAgbWluQ2hhcnM6IDIsXG4gICAgICAgIGZldGNoOiAocGF0dGVybiwgbWF4UmVzdWx0cykgPT4gZGF0YWJhc2Uud2FpdEZvckxvYWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBjYW5kaWRhdGVzID0gZGF0YWJhc2UubGlzdEFsbCgpO1xuICAgICAgICAgIHJldHVybiBlbW9qaXNGcm9tKGNhbmRpZGF0ZXMsIHBhdHRlcm4sIE9wdGlvbmFsLnNvbWUobWF4UmVzdWx0cykpO1xuICAgICAgICB9KSxcbiAgICAgICAgb25BY3Rpb246IChhdXRvY29tcGxldGVBcGksIHJuZywgdmFsdWUpID0+IHtcbiAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgICAgIGVkaXRvci5pbnNlcnRDb250ZW50KHZhbHVlKTtcbiAgICAgICAgICBhdXRvY29tcGxldGVBcGkuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25TZXR1cEVkaXRhYmxlID0gZWRpdG9yID0+IGFwaSA9PiB7XG4gICAgICBjb25zdCBub2RlQ2hhbmdlZCA9ICgpID0+IHtcbiAgICAgICAgYXBpLnNldEVuYWJsZWQoZWRpdG9yLnNlbGVjdGlvbi5pc0VkaXRhYmxlKCkpO1xuICAgICAgfTtcbiAgICAgIGVkaXRvci5vbignTm9kZUNoYW5nZScsIG5vZGVDaGFuZ2VkKTtcbiAgICAgIG5vZGVDaGFuZ2VkKCk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBlZGl0b3Iub2ZmKCdOb2RlQ2hhbmdlJywgbm9kZUNoYW5nZWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IG9uQWN0aW9uID0gKCkgPT4gZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VFbW90aWNvbnMnKTtcbiAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRCdXR0b24oJ2Vtb3RpY29ucycsIHtcbiAgICAgICAgdG9vbHRpcDogJ0Vtb2ppcycsXG4gICAgICAgIGljb246ICdlbW9qaScsXG4gICAgICAgIG9uQWN0aW9uLFxuICAgICAgICBvblNldHVwOiBvblNldHVwRWRpdGFibGUoZWRpdG9yKVxuICAgICAgfSk7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTWVudUl0ZW0oJ2Vtb3RpY29ucycsIHtcbiAgICAgICAgdGV4dDogJ0Vtb2ppcy4uLicsXG4gICAgICAgIGljb246ICdlbW9qaScsXG4gICAgICAgIG9uQWN0aW9uLFxuICAgICAgICBvblNldHVwOiBvblNldHVwRWRpdGFibGUoZWRpdG9yKVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHZhciBQbHVnaW4gPSAoKSA9PiB7XG4gICAgICBnbG9iYWwkMS5hZGQoJ2Vtb3RpY29ucycsIChlZGl0b3IsIHBsdWdpblVybCkgPT4ge1xuICAgICAgICByZWdpc3RlciQyKGVkaXRvciwgcGx1Z2luVXJsKTtcbiAgICAgICAgY29uc3QgZGF0YWJhc2VVcmwgPSBnZXRFbW9qaURhdGFiYXNlVXJsKGVkaXRvcik7XG4gICAgICAgIGNvbnN0IGRhdGFiYXNlSWQgPSBnZXRFbW9qaURhdGFiYXNlSWQoZWRpdG9yKTtcbiAgICAgICAgY29uc3QgZGF0YWJhc2UgPSBpbml0RGF0YWJhc2UoZWRpdG9yLCBkYXRhYmFzZVVybCwgZGF0YWJhc2VJZCk7XG4gICAgICAgIHJlZ2lzdGVyJDEoZWRpdG9yLCBkYXRhYmFzZSk7XG4gICAgICAgIHJlZ2lzdGVyKGVkaXRvcik7XG4gICAgICAgIGluaXQoZWRpdG9yLCBkYXRhYmFzZSk7XG4gICAgICAgIHNldHVwKGVkaXRvcik7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgUGx1Z2luKCk7XG5cbn0pKCk7XG4iLCIvLyBFeHBvcnRzIHRoZSBcImxpbmtcIiBwbHVnaW4gZm9yIHVzYWdlIHdpdGggbW9kdWxlIGxvYWRlcnNcbi8vIFVzYWdlOlxuLy8gICBDb21tb25KUzpcbi8vICAgICByZXF1aXJlKCd0aW55bWNlL3BsdWdpbnMvbGluaycpXG4vLyAgIEVTMjAxNTpcbi8vICAgICBpbXBvcnQgJ3RpbnltY2UvcGx1Z2lucy9saW5rJ1xucmVxdWlyZSgnLi9wbHVnaW4uanMnKTsiLCIvKipcbiAqIFRpbnlNQ0UgdmVyc2lvbiA2LjcuMCAoMjAyMy0wOC0zMClcbiAqL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBnbG9iYWwkNSA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLlBsdWdpbk1hbmFnZXInKTtcblxuICAgIGNvbnN0IGhhc1Byb3RvID0gKHYsIGNvbnN0cnVjdG9yLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGlmIChwcmVkaWNhdGUodiwgY29uc3RydWN0b3IucHJvdG90eXBlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoKF9hID0gdi5jb25zdHJ1Y3RvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5hbWUpID09PSBjb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdHlwZU9mID0geCA9PiB7XG4gICAgICBjb25zdCB0ID0gdHlwZW9mIHg7XG4gICAgICBpZiAoeCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgICAgfSBlbHNlIGlmICh0ID09PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgICAgIHJldHVybiAnYXJyYXknO1xuICAgICAgfSBlbHNlIGlmICh0ID09PSAnb2JqZWN0JyAmJiBoYXNQcm90byh4LCBTdHJpbmcsIChvLCBwcm90bykgPT4gcHJvdG8uaXNQcm90b3R5cGVPZihvKSkpIHtcbiAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc1R5cGUgPSB0eXBlID0+IHZhbHVlID0+IHR5cGVPZih2YWx1ZSkgPT09IHR5cGU7XG4gICAgY29uc3QgaXNTaW1wbGVUeXBlID0gdHlwZSA9PiB2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09IHR5cGU7XG4gICAgY29uc3QgZXEgPSB0ID0+IGEgPT4gdCA9PT0gYTtcbiAgICBjb25zdCBpc1N0cmluZyA9IGlzVHlwZSgnc3RyaW5nJyk7XG4gICAgY29uc3QgaXNPYmplY3QgPSBpc1R5cGUoJ29iamVjdCcpO1xuICAgIGNvbnN0IGlzQXJyYXkgPSBpc1R5cGUoJ2FycmF5Jyk7XG4gICAgY29uc3QgaXNOdWxsID0gZXEobnVsbCk7XG4gICAgY29uc3QgaXNCb29sZWFuID0gaXNTaW1wbGVUeXBlKCdib29sZWFuJyk7XG4gICAgY29uc3QgaXNOdWxsYWJsZSA9IGEgPT4gYSA9PT0gbnVsbCB8fCBhID09PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgaXNOb25OdWxsYWJsZSA9IGEgPT4gIWlzTnVsbGFibGUoYSk7XG4gICAgY29uc3QgaXNGdW5jdGlvbiA9IGlzU2ltcGxlVHlwZSgnZnVuY3Rpb24nKTtcbiAgICBjb25zdCBpc0FycmF5T2YgPSAodmFsdWUsIHByZWQpID0+IHtcbiAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdmFsdWUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICBpZiAoIXByZWQodmFsdWVbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICBjb25zdCBub29wID0gKCkgPT4ge1xuICAgIH07XG4gICAgY29uc3QgY29uc3RhbnQgPSB2YWx1ZSA9PiB7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgdHJpcGxlRXF1YWxzID0gKGEsIGIpID0+IHtcbiAgICAgIHJldHVybiBhID09PSBiO1xuICAgIH07XG5cbiAgICBjbGFzcyBPcHRpb25hbCB7XG4gICAgICBjb25zdHJ1Y3Rvcih0YWcsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMudGFnID0gdGFnO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgICBzdGF0aWMgc29tZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IE9wdGlvbmFsKHRydWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHN0YXRpYyBub25lKCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc2luZ2xldG9uTm9uZTtcbiAgICAgIH1cbiAgICAgIGZvbGQob25Ob25lLCBvblNvbWUpIHtcbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgcmV0dXJuIG9uU29tZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb25Ob25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlzU29tZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnO1xuICAgICAgfVxuICAgICAgaXNOb25lKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudGFnO1xuICAgICAgfVxuICAgICAgbWFwKG1hcHBlcikge1xuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShtYXBwZXIodGhpcy52YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJpbmQoYmluZGVyKSB7XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgIHJldHVybiBiaW5kZXIodGhpcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXhpc3RzKHByZWRpY2F0ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgJiYgcHJlZGljYXRlKHRoaXMudmFsdWUpO1xuICAgICAgfVxuICAgICAgZm9yYWxsKHByZWRpY2F0ZSkge1xuICAgICAgICByZXR1cm4gIXRoaXMudGFnIHx8IHByZWRpY2F0ZSh0aGlzLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZpbHRlcihwcmVkaWNhdGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhZyB8fCBwcmVkaWNhdGUodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBnZXRPcihyZXBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzLnZhbHVlIDogcmVwbGFjZW1lbnQ7XG4gICAgICB9XG4gICAgICBvcihyZXBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzIDogcmVwbGFjZW1lbnQ7XG4gICAgICB9XG4gICAgICBnZXRPclRodW5rKHRodW5rKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMudmFsdWUgOiB0aHVuaygpO1xuICAgICAgfVxuICAgICAgb3JUaHVuayh0aHVuaykge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzIDogdGh1bmsoKTtcbiAgICAgIH1cbiAgICAgIGdldE9yRGllKG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhZykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlICE9PSBudWxsICYmIG1lc3NhZ2UgIT09IHZvaWQgMCA/IG1lc3NhZ2UgOiAnQ2FsbGVkIGdldE9yRGllIG9uIE5vbmUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RhdGljIGZyb20odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUodmFsdWUpID8gT3B0aW9uYWwuc29tZSh2YWx1ZSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICBnZXRPck51bGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMudmFsdWUgOiBudWxsO1xuICAgICAgfVxuICAgICAgZ2V0T3JVbmRlZmluZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgICAgfVxuICAgICAgZWFjaCh3b3JrZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgd29ya2VyKHRoaXMudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0b0FycmF5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyBbdGhpcy52YWx1ZV0gOiBbXTtcbiAgICAgIH1cbiAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyBgc29tZSgkeyB0aGlzLnZhbHVlIH0pYCA6ICdub25lKCknO1xuICAgICAgfVxuICAgIH1cbiAgICBPcHRpb25hbC5zaW5nbGV0b25Ob25lID0gbmV3IE9wdGlvbmFsKGZhbHNlKTtcblxuICAgIGNvbnN0IG5hdGl2ZUluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbiAgICBjb25zdCBuYXRpdmVQdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7XG4gICAgY29uc3QgcmF3SW5kZXhPZiA9ICh0cywgdCkgPT4gbmF0aXZlSW5kZXhPZi5jYWxsKHRzLCB0KTtcbiAgICBjb25zdCBjb250YWlucyA9ICh4cywgeCkgPT4gcmF3SW5kZXhPZih4cywgeCkgPiAtMTtcbiAgICBjb25zdCBtYXAgPSAoeHMsIGYpID0+IHtcbiAgICAgIGNvbnN0IGxlbiA9IHhzLmxlbmd0aDtcbiAgICAgIGNvbnN0IHIgPSBuZXcgQXJyYXkobGVuKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgeCA9IHhzW2ldO1xuICAgICAgICByW2ldID0gZih4LCBpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3QgZWFjaCQxID0gKHhzLCBmKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0geHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgeCA9IHhzW2ldO1xuICAgICAgICBmKHgsIGkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZm9sZGwgPSAoeHMsIGYsIGFjYykgPT4ge1xuICAgICAgZWFjaCQxKHhzLCAoeCwgaSkgPT4ge1xuICAgICAgICBhY2MgPSBmKGFjYywgeCwgaSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfTtcbiAgICBjb25zdCBmbGF0dGVuID0geHMgPT4ge1xuICAgICAgY29uc3QgciA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgIGlmICghaXNBcnJheSh4c1tpXSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Fyci5mbGF0dGVuIGl0ZW0gJyArIGkgKyAnIHdhcyBub3QgYW4gYXJyYXksIGlucHV0OiAnICsgeHMpO1xuICAgICAgICB9XG4gICAgICAgIG5hdGl2ZVB1c2guYXBwbHkociwgeHNbaV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBiaW5kID0gKHhzLCBmKSA9PiBmbGF0dGVuKG1hcCh4cywgZikpO1xuICAgIGNvbnN0IGZpbmRNYXAgPSAoYXJyLCBmKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByID0gZihhcnJbaV0sIGkpO1xuICAgICAgICBpZiAoci5pc1NvbWUoKSkge1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG5cbiAgICBjb25zdCBpcyA9IChsaHMsIHJocywgY29tcGFyYXRvciA9IHRyaXBsZUVxdWFscykgPT4gbGhzLmV4aXN0cyhsZWZ0ID0+IGNvbXBhcmF0b3IobGVmdCwgcmhzKSk7XG4gICAgY29uc3QgY2F0ID0gYXJyID0+IHtcbiAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgIGNvbnN0IHB1c2ggPSB4ID0+IHtcbiAgICAgICAgci5wdXNoKHgpO1xuICAgICAgfTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFycltpXS5lYWNoKHB1c2gpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBzb21lSWYgPSAoYiwgYSkgPT4gYiA/IE9wdGlvbmFsLnNvbWUoYSkgOiBPcHRpb25hbC5ub25lKCk7XG5cbiAgICBjb25zdCBvcHRpb24gPSBuYW1lID0+IGVkaXRvciA9PiBlZGl0b3Iub3B0aW9ucy5nZXQobmFtZSk7XG4gICAgY29uc3QgcmVnaXN0ZXIkMSA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCByZWdpc3Rlck9wdGlvbiA9IGVkaXRvci5vcHRpb25zLnJlZ2lzdGVyO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2xpbmtfYXNzdW1lX2V4dGVybmFsX3RhcmdldHMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogdmFsdWUgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbGlkID0gaXNTdHJpbmcodmFsdWUpIHx8IGlzQm9vbGVhbih2YWx1ZSk7XG4gICAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICAgICAgICB2YWxpZFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ2h0dHAnIHx8IHZhbHVlID09PSAnaHR0cHMnKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdmFsaWRcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICAgICAgdmFsaWRcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnTXVzdCBiZSBhIHN0cmluZyBvciBhIGJvb2xlYW4uJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdsaW5rX2NvbnRleHRfdG9vbGJhcicsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdsaW5rX2xpc3QnLCB7IHByb2Nlc3NvcjogdmFsdWUgPT4gaXNTdHJpbmcodmFsdWUpIHx8IGlzRnVuY3Rpb24odmFsdWUpIHx8IGlzQXJyYXlPZih2YWx1ZSwgaXNPYmplY3QpIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2xpbmtfZGVmYXVsdF90YXJnZXQnLCB7IHByb2Nlc3NvcjogJ3N0cmluZycgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignbGlua19kZWZhdWx0X3Byb3RvY29sJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnaHR0cHMnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdsaW5rX3RhcmdldF9saXN0Jywge1xuICAgICAgICBwcm9jZXNzb3I6IHZhbHVlID0+IGlzQm9vbGVhbih2YWx1ZSkgfHwgaXNBcnJheU9mKHZhbHVlLCBpc09iamVjdCksXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2xpbmtfcmVsX2xpc3QnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ29iamVjdFtdJyxcbiAgICAgICAgZGVmYXVsdDogW11cbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2xpbmtfY2xhc3NfbGlzdCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnb2JqZWN0W10nLFxuICAgICAgICBkZWZhdWx0OiBbXVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignbGlua190aXRsZScsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2FsbG93X3Vuc2FmZV9saW5rX3RhcmdldCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdsaW5rX3F1aWNrbGluaycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFzc3VtZUV4dGVybmFsVGFyZ2V0cyA9IG9wdGlvbignbGlua19hc3N1bWVfZXh0ZXJuYWxfdGFyZ2V0cycpO1xuICAgIGNvbnN0IGhhc0NvbnRleHRUb29sYmFyID0gb3B0aW9uKCdsaW5rX2NvbnRleHRfdG9vbGJhcicpO1xuICAgIGNvbnN0IGdldExpbmtMaXN0ID0gb3B0aW9uKCdsaW5rX2xpc3QnKTtcbiAgICBjb25zdCBnZXREZWZhdWx0TGlua1RhcmdldCA9IG9wdGlvbignbGlua19kZWZhdWx0X3RhcmdldCcpO1xuICAgIGNvbnN0IGdldERlZmF1bHRMaW5rUHJvdG9jb2wgPSBvcHRpb24oJ2xpbmtfZGVmYXVsdF9wcm90b2NvbCcpO1xuICAgIGNvbnN0IGdldFRhcmdldExpc3QgPSBvcHRpb24oJ2xpbmtfdGFyZ2V0X2xpc3QnKTtcbiAgICBjb25zdCBnZXRSZWxMaXN0ID0gb3B0aW9uKCdsaW5rX3JlbF9saXN0Jyk7XG4gICAgY29uc3QgZ2V0TGlua0NsYXNzTGlzdCA9IG9wdGlvbignbGlua19jbGFzc19saXN0Jyk7XG4gICAgY29uc3Qgc2hvdWxkU2hvd0xpbmtUaXRsZSA9IG9wdGlvbignbGlua190aXRsZScpO1xuICAgIGNvbnN0IGFsbG93VW5zYWZlTGlua1RhcmdldCA9IG9wdGlvbignYWxsb3dfdW5zYWZlX2xpbmtfdGFyZ2V0Jyk7XG4gICAgY29uc3QgdXNlUXVpY2tMaW5rID0gb3B0aW9uKCdsaW5rX3F1aWNrbGluaycpO1xuXG4gICAgdmFyIGdsb2JhbCQ0ID0gdGlueW1jZS51dGlsLlRvb2xzLnJlc29sdmUoJ3RpbnltY2UudXRpbC5Ub29scycpO1xuXG4gICAgY29uc3QgZ2V0VmFsdWUgPSBpdGVtID0+IGlzU3RyaW5nKGl0ZW0udmFsdWUpID8gaXRlbS52YWx1ZSA6ICcnO1xuICAgIGNvbnN0IGdldFRleHQgPSBpdGVtID0+IHtcbiAgICAgIGlmIChpc1N0cmluZyhpdGVtLnRleHQpKSB7XG4gICAgICAgIHJldHVybiBpdGVtLnRleHQ7XG4gICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKGl0ZW0udGl0bGUpKSB7XG4gICAgICAgIHJldHVybiBpdGVtLnRpdGxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2FuaXRpemVMaXN0ID0gKGxpc3QsIGV4dHJhY3RWYWx1ZSkgPT4ge1xuICAgICAgY29uc3Qgb3V0ID0gW107XG4gICAgICBnbG9iYWwkNC5lYWNoKGxpc3QsIGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCB0ZXh0ID0gZ2V0VGV4dChpdGVtKTtcbiAgICAgICAgaWYgKGl0ZW0ubWVudSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgaXRlbXMgPSBzYW5pdGl6ZUxpc3QoaXRlbS5tZW51LCBleHRyYWN0VmFsdWUpO1xuICAgICAgICAgIG91dC5wdXNoKHtcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICBpdGVtc1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gZXh0cmFjdFZhbHVlKGl0ZW0pO1xuICAgICAgICAgIG91dC5wdXNoKHtcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfTtcbiAgICBjb25zdCBzYW5pdGl6ZVdpdGggPSAoZXh0cmFjdGVyID0gZ2V0VmFsdWUpID0+IGxpc3QgPT4gT3B0aW9uYWwuZnJvbShsaXN0KS5tYXAobGlzdCA9PiBzYW5pdGl6ZUxpc3QobGlzdCwgZXh0cmFjdGVyKSk7XG4gICAgY29uc3Qgc2FuaXRpemUgPSBsaXN0ID0+IHNhbml0aXplV2l0aChnZXRWYWx1ZSkobGlzdCk7XG4gICAgY29uc3QgY3JlYXRlVWkgPSAobmFtZSwgbGFiZWwpID0+IGl0ZW1zID0+ICh7XG4gICAgICBuYW1lLFxuICAgICAgdHlwZTogJ2xpc3Rib3gnLFxuICAgICAgbGFiZWwsXG4gICAgICBpdGVtc1xuICAgIH0pO1xuICAgIGNvbnN0IExpc3RPcHRpb25zID0ge1xuICAgICAgc2FuaXRpemUsXG4gICAgICBzYW5pdGl6ZVdpdGgsXG4gICAgICBjcmVhdGVVaSxcbiAgICAgIGdldFZhbHVlXG4gICAgfTtcblxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cztcbiAgICBjb25zdCBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5oYXNPd25Qcm9wZXJ0eTtcbiAgICBjb25zdCBlYWNoID0gKG9iaiwgZikgPT4ge1xuICAgICAgY29uc3QgcHJvcHMgPSBrZXlzKG9iaik7XG4gICAgICBmb3IgKGxldCBrID0gMCwgbGVuID0gcHJvcHMubGVuZ3RoOyBrIDwgbGVuOyBrKyspIHtcbiAgICAgICAgY29uc3QgaSA9IHByb3BzW2tdO1xuICAgICAgICBjb25zdCB4ID0gb2JqW2ldO1xuICAgICAgICBmKHgsIGkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb2JqQWNjID0gciA9PiAoeCwgaSkgPT4ge1xuICAgICAgcltpXSA9IHg7XG4gICAgfTtcbiAgICBjb25zdCBpbnRlcm5hbEZpbHRlciA9IChvYmosIHByZWQsIG9uVHJ1ZSwgb25GYWxzZSkgPT4ge1xuICAgICAgZWFjaChvYmosICh4LCBpKSA9PiB7XG4gICAgICAgIChwcmVkKHgsIGkpID8gb25UcnVlIDogb25GYWxzZSkoeCwgaSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbHRlciA9IChvYmosIHByZWQpID0+IHtcbiAgICAgIGNvbnN0IHQgPSB7fTtcbiAgICAgIGludGVybmFsRmlsdGVyKG9iaiwgcHJlZCwgb2JqQWNjKHQpLCBub29wKTtcbiAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgY29uc3QgaGFzID0gKG9iaiwga2V5KSA9PiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbiAgICBjb25zdCBoYXNOb25OdWxsYWJsZUtleSA9IChvYmosIGtleSkgPT4gaGFzKG9iaiwga2V5KSAmJiBvYmpba2V5XSAhPT0gdW5kZWZpbmVkICYmIG9ialtrZXldICE9PSBudWxsO1xuXG4gICAgdmFyIGdsb2JhbCQzID0gdGlueW1jZS51dGlsLlRvb2xzLnJlc29sdmUoJ3RpbnltY2UuZG9tLlRyZWVXYWxrZXInKTtcblxuICAgIHZhciBnbG9iYWwkMiA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLnV0aWwuVVJJJyk7XG5cbiAgICBjb25zdCBpc0FuY2hvciA9IGVsbSA9PiBpc05vbk51bGxhYmxlKGVsbSkgJiYgZWxtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdhJztcbiAgICBjb25zdCBpc0xpbmsgPSBlbG0gPT4gaXNBbmNob3IoZWxtKSAmJiAhIWdldEhyZWYoZWxtKTtcbiAgICBjb25zdCBjb2xsZWN0Tm9kZXNJblJhbmdlID0gKHJuZywgcHJlZGljYXRlKSA9PiB7XG4gICAgICBpZiAocm5nLmNvbGxhcHNlZCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb250ZW50cyA9IHJuZy5jbG9uZUNvbnRlbnRzKCk7XG4gICAgICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSBjb250ZW50cy5maXJzdENoaWxkO1xuICAgICAgICBjb25zdCB3YWxrZXIgPSBuZXcgZ2xvYmFsJDMoZmlyc3RDaGlsZCwgY29udGVudHMpO1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IFtdO1xuICAgICAgICBsZXQgY3VycmVudCA9IGZpcnN0Q2hpbGQ7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBpZiAocHJlZGljYXRlKGN1cnJlbnQpKSB7XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKGN1cnJlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoY3VycmVudCA9IHdhbGtlci5uZXh0KCkpO1xuICAgICAgICByZXR1cm4gZWxlbWVudHM7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoYXNQcm90b2NvbCA9IHVybCA9PiAvXlxcdys6L2kudGVzdCh1cmwpO1xuICAgIGNvbnN0IGdldEhyZWYgPSBlbG0gPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIHJldHVybiAoX2IgPSAoX2EgPSBlbG0uZ2V0QXR0cmlidXRlKCdkYXRhLW1jZS1ocmVmJykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGVsbS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XG4gICAgfTtcbiAgICBjb25zdCBhcHBseVJlbFRhcmdldFJ1bGVzID0gKHJlbCwgaXNVbnNhZmUpID0+IHtcbiAgICAgIGNvbnN0IHJ1bGVzID0gWydub29wZW5lciddO1xuICAgICAgY29uc3QgcmVscyA9IHJlbCA/IHJlbC5zcGxpdCgvXFxzKy8pIDogW107XG4gICAgICBjb25zdCB0b1N0cmluZyA9IHJlbHMgPT4gZ2xvYmFsJDQudHJpbShyZWxzLnNvcnQoKS5qb2luKCcgJykpO1xuICAgICAgY29uc3QgYWRkVGFyZ2V0UnVsZXMgPSByZWxzID0+IHtcbiAgICAgICAgcmVscyA9IHJlbW92ZVRhcmdldFJ1bGVzKHJlbHMpO1xuICAgICAgICByZXR1cm4gcmVscy5sZW5ndGggPiAwID8gcmVscy5jb25jYXQocnVsZXMpIDogcnVsZXM7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVtb3ZlVGFyZ2V0UnVsZXMgPSByZWxzID0+IHJlbHMuZmlsdGVyKHZhbCA9PiBnbG9iYWwkNC5pbkFycmF5KHJ1bGVzLCB2YWwpID09PSAtMSk7XG4gICAgICBjb25zdCBuZXdSZWxzID0gaXNVbnNhZmUgPyBhZGRUYXJnZXRSdWxlcyhyZWxzKSA6IHJlbW92ZVRhcmdldFJ1bGVzKHJlbHMpO1xuICAgICAgcmV0dXJuIG5ld1JlbHMubGVuZ3RoID4gMCA/IHRvU3RyaW5nKG5ld1JlbHMpIDogJyc7XG4gICAgfTtcbiAgICBjb25zdCB0cmltQ2FyZXRDb250YWluZXJzID0gdGV4dCA9PiB0ZXh0LnJlcGxhY2UoL1xcdUZFRkYvZywgJycpO1xuICAgIGNvbnN0IGdldEFuY2hvckVsZW1lbnQgPSAoZWRpdG9yLCBzZWxlY3RlZEVsbSkgPT4ge1xuICAgICAgc2VsZWN0ZWRFbG0gPSBzZWxlY3RlZEVsbSB8fCBnZXRMaW5rc0luU2VsZWN0aW9uKGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpWzBdIHx8IGVkaXRvci5zZWxlY3Rpb24uZ2V0Tm9kZSgpO1xuICAgICAgaWYgKGlzSW1hZ2VGaWd1cmUoc2VsZWN0ZWRFbG0pKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKGVkaXRvci5kb20uc2VsZWN0KCdhW2hyZWZdJywgc2VsZWN0ZWRFbG0pWzBdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKGVkaXRvci5kb20uZ2V0UGFyZW50KHNlbGVjdGVkRWxtLCAnYVtocmVmXScpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlzSW5BbmNob3IgPSAoZWRpdG9yLCBzZWxlY3RlZEVsbSkgPT4gZ2V0QW5jaG9yRWxlbWVudChlZGl0b3IsIHNlbGVjdGVkRWxtKS5pc1NvbWUoKTtcbiAgICBjb25zdCBnZXRBbmNob3JUZXh0ID0gKHNlbGVjdGlvbiwgYW5jaG9yRWxtKSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gYW5jaG9yRWxtLmZvbGQoKCkgPT4gc2VsZWN0aW9uLmdldENvbnRlbnQoeyBmb3JtYXQ6ICd0ZXh0JyB9KSwgYW5jaG9yRWxtID0+IGFuY2hvckVsbS5pbm5lclRleHQgfHwgYW5jaG9yRWxtLnRleHRDb250ZW50IHx8ICcnKTtcbiAgICAgIHJldHVybiB0cmltQ2FyZXRDb250YWluZXJzKHRleHQpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0TGlua3NJblNlbGVjdGlvbiA9IHJuZyA9PiBjb2xsZWN0Tm9kZXNJblJhbmdlKHJuZywgaXNMaW5rKTtcbiAgICBjb25zdCBnZXRMaW5rcyQxID0gZWxlbWVudHMgPT4gZ2xvYmFsJDQuZ3JlcChlbGVtZW50cywgaXNMaW5rKTtcbiAgICBjb25zdCBoYXNMaW5rcyA9IGVsZW1lbnRzID0+IGdldExpbmtzJDEoZWxlbWVudHMpLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgaGFzTGlua3NJblNlbGVjdGlvbiA9IHJuZyA9PiBnZXRMaW5rc0luU2VsZWN0aW9uKHJuZykubGVuZ3RoID4gMDtcbiAgICBjb25zdCBpc09ubHlUZXh0U2VsZWN0ZWQgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgaW5saW5lVGV4dEVsZW1lbnRzID0gZWRpdG9yLnNjaGVtYS5nZXRUZXh0SW5saW5lRWxlbWVudHMoKTtcbiAgICAgIGNvbnN0IGlzRWxlbWVudCA9IGVsbSA9PiBlbG0ubm9kZVR5cGUgPT09IDEgJiYgIWlzQW5jaG9yKGVsbSkgJiYgIWhhcyhpbmxpbmVUZXh0RWxlbWVudHMsIGVsbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIGNvbnN0IGlzSW5CbG9ja0FuY2hvciA9IGdldEFuY2hvckVsZW1lbnQoZWRpdG9yKS5leGlzdHMoYW5jaG9yID0+IGFuY2hvci5oYXNBdHRyaWJ1dGUoJ2RhdGEtbWNlLWJsb2NrJykpO1xuICAgICAgaWYgKGlzSW5CbG9ja0FuY2hvcikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgaWYgKCFybmcuY29sbGFwc2VkKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gY29sbGVjdE5vZGVzSW5SYW5nZShybmcsIGlzRWxlbWVudCk7XG4gICAgICAgIHJldHVybiBlbGVtZW50cy5sZW5ndGggPT09IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlzSW1hZ2VGaWd1cmUgPSBlbG0gPT4gaXNOb25OdWxsYWJsZShlbG0pICYmIGVsbS5ub2RlTmFtZSA9PT0gJ0ZJR1VSRScgJiYgL1xcYmltYWdlXFxiL2kudGVzdChlbG0uY2xhc3NOYW1lKTtcbiAgICBjb25zdCBnZXRMaW5rQXR0cnMgPSBkYXRhID0+IHtcbiAgICAgIGNvbnN0IGF0dHJzID0gW1xuICAgICAgICAndGl0bGUnLFxuICAgICAgICAncmVsJyxcbiAgICAgICAgJ2NsYXNzJyxcbiAgICAgICAgJ3RhcmdldCdcbiAgICAgIF07XG4gICAgICByZXR1cm4gZm9sZGwoYXR0cnMsIChhY2MsIGtleSkgPT4ge1xuICAgICAgICBkYXRhW2tleV0uZWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgYWNjW2tleV0gPSB2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWUgOiBudWxsO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHsgaHJlZjogZGF0YS5ocmVmIH0pO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlRXh0ZXJuYWxUYXJnZXRzID0gKGhyZWYsIGFzc3VtZUV4dGVybmFsVGFyZ2V0cykgPT4ge1xuICAgICAgaWYgKChhc3N1bWVFeHRlcm5hbFRhcmdldHMgPT09ICdodHRwJyB8fCBhc3N1bWVFeHRlcm5hbFRhcmdldHMgPT09ICdodHRwcycpICYmICFoYXNQcm90b2NvbChocmVmKSkge1xuICAgICAgICByZXR1cm4gYXNzdW1lRXh0ZXJuYWxUYXJnZXRzICsgJzovLycgKyBocmVmO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhyZWY7XG4gICAgfTtcbiAgICBjb25zdCBhcHBseUxpbmtPdmVycmlkZXMgPSAoZWRpdG9yLCBsaW5rQXR0cnMpID0+IHtcbiAgICAgIGNvbnN0IG5ld0xpbmtBdHRycyA9IHsgLi4ubGlua0F0dHJzIH07XG4gICAgICBpZiAoZ2V0UmVsTGlzdChlZGl0b3IpLmxlbmd0aCA9PT0gMCAmJiAhYWxsb3dVbnNhZmVMaW5rVGFyZ2V0KGVkaXRvcikpIHtcbiAgICAgICAgY29uc3QgbmV3UmVsID0gYXBwbHlSZWxUYXJnZXRSdWxlcyhuZXdMaW5rQXR0cnMucmVsLCBuZXdMaW5rQXR0cnMudGFyZ2V0ID09PSAnX2JsYW5rJyk7XG4gICAgICAgIG5ld0xpbmtBdHRycy5yZWwgPSBuZXdSZWwgPyBuZXdSZWwgOiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKE9wdGlvbmFsLmZyb20obmV3TGlua0F0dHJzLnRhcmdldCkuaXNOb25lKCkgJiYgZ2V0VGFyZ2V0TGlzdChlZGl0b3IpID09PSBmYWxzZSkge1xuICAgICAgICBuZXdMaW5rQXR0cnMudGFyZ2V0ID0gZ2V0RGVmYXVsdExpbmtUYXJnZXQoZWRpdG9yKTtcbiAgICAgIH1cbiAgICAgIG5ld0xpbmtBdHRycy5ocmVmID0gaGFuZGxlRXh0ZXJuYWxUYXJnZXRzKG5ld0xpbmtBdHRycy5ocmVmLCBhc3N1bWVFeHRlcm5hbFRhcmdldHMoZWRpdG9yKSk7XG4gICAgICByZXR1cm4gbmV3TGlua0F0dHJzO1xuICAgIH07XG4gICAgY29uc3QgdXBkYXRlTGluayA9IChlZGl0b3IsIGFuY2hvckVsbSwgdGV4dCwgbGlua0F0dHJzKSA9PiB7XG4gICAgICB0ZXh0LmVhY2godGV4dCA9PiB7XG4gICAgICAgIGlmIChoYXMoYW5jaG9yRWxtLCAnaW5uZXJUZXh0JykpIHtcbiAgICAgICAgICBhbmNob3JFbG0uaW5uZXJUZXh0ID0gdGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhbmNob3JFbG0udGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5kb20uc2V0QXR0cmlicyhhbmNob3JFbG0sIGxpbmtBdHRycyk7XG4gICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNlbGVjdChhbmNob3JFbG0pO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlTGluayA9IChlZGl0b3IsIHNlbGVjdGVkRWxtLCB0ZXh0LCBsaW5rQXR0cnMpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBpZiAoaXNJbWFnZUZpZ3VyZShzZWxlY3RlZEVsbSkpIHtcbiAgICAgICAgbGlua0ltYWdlRmlndXJlKGRvbSwgc2VsZWN0ZWRFbG0sIGxpbmtBdHRycyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0LmZvbGQoKCkgPT4ge1xuICAgICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnbWNlSW5zZXJ0TGluaycsIGZhbHNlLCBsaW5rQXR0cnMpO1xuICAgICAgICB9LCB0ZXh0ID0+IHtcbiAgICAgICAgICBlZGl0b3IuaW5zZXJ0Q29udGVudChkb20uY3JlYXRlSFRNTCgnYScsIGxpbmtBdHRycywgZG9tLmVuY29kZSh0ZXh0KSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGxpbmtEb21NdXRhdGlvbiA9IChlZGl0b3IsIGF0dGFjaFN0YXRlLCBkYXRhKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZEVsbSA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Tm9kZSgpO1xuICAgICAgY29uc3QgYW5jaG9yRWxtID0gZ2V0QW5jaG9yRWxlbWVudChlZGl0b3IsIHNlbGVjdGVkRWxtKTtcbiAgICAgIGNvbnN0IGxpbmtBdHRycyA9IGFwcGx5TGlua092ZXJyaWRlcyhlZGl0b3IsIGdldExpbmtBdHRycyhkYXRhKSk7XG4gICAgICBlZGl0b3IudW5kb01hbmFnZXIudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICBpZiAoZGF0YS5ocmVmID09PSBhdHRhY2hTdGF0ZS5ocmVmKSB7XG4gICAgICAgICAgYXR0YWNoU3RhdGUuYXR0YWNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgYW5jaG9yRWxtLmZvbGQoKCkgPT4ge1xuICAgICAgICAgIGNyZWF0ZUxpbmsoZWRpdG9yLCBzZWxlY3RlZEVsbSwgZGF0YS50ZXh0LCBsaW5rQXR0cnMpO1xuICAgICAgICB9LCBlbG0gPT4ge1xuICAgICAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgICAgIHVwZGF0ZUxpbmsoZWRpdG9yLCBlbG0sIGRhdGEudGV4dCwgbGlua0F0dHJzKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHVubGlua1NlbGVjdGlvbiA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tLCBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uO1xuICAgICAgY29uc3QgYm9va21hcmsgPSBzZWxlY3Rpb24uZ2V0Qm9va21hcmsoKTtcbiAgICAgIGNvbnN0IHJuZyA9IHNlbGVjdGlvbi5nZXRSbmcoKS5jbG9uZVJhbmdlKCk7XG4gICAgICBjb25zdCBzdGFydEFuY2hvckVsbSA9IGRvbS5nZXRQYXJlbnQocm5nLnN0YXJ0Q29udGFpbmVyLCAnYVtocmVmXScsIGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgY29uc3QgZW5kQW5jaG9yRWxtID0gZG9tLmdldFBhcmVudChybmcuZW5kQ29udGFpbmVyLCAnYVtocmVmXScsIGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgaWYgKHN0YXJ0QW5jaG9yRWxtKSB7XG4gICAgICAgIHJuZy5zZXRTdGFydEJlZm9yZShzdGFydEFuY2hvckVsbSk7XG4gICAgICB9XG4gICAgICBpZiAoZW5kQW5jaG9yRWxtKSB7XG4gICAgICAgIHJuZy5zZXRFbmRBZnRlcihlbmRBbmNob3JFbG0pO1xuICAgICAgfVxuICAgICAgc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCd1bmxpbmsnKTtcbiAgICAgIHNlbGVjdGlvbi5tb3ZlVG9Cb29rbWFyayhib29rbWFyayk7XG4gICAgfTtcbiAgICBjb25zdCB1bmxpbmtEb21NdXRhdGlvbiA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IudW5kb01hbmFnZXIudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCBub2RlID0gZWRpdG9yLnNlbGVjdGlvbi5nZXROb2RlKCk7XG4gICAgICAgIGlmIChpc0ltYWdlRmlndXJlKG5vZGUpKSB7XG4gICAgICAgICAgdW5saW5rSW1hZ2VGaWd1cmUoZWRpdG9yLCBub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bmxpbmtTZWxlY3Rpb24oZWRpdG9yKTtcbiAgICAgICAgfVxuICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgdW53cmFwT3B0aW9ucyA9IGRhdGEgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjbGFzczogY2xzLFxuICAgICAgICBocmVmLFxuICAgICAgICByZWwsXG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgdGV4dCxcbiAgICAgICAgdGl0bGVcbiAgICAgIH0gPSBkYXRhO1xuICAgICAgcmV0dXJuIGZpbHRlcih7XG4gICAgICAgIGNsYXNzOiBjbHMuZ2V0T3JOdWxsKCksXG4gICAgICAgIGhyZWYsXG4gICAgICAgIHJlbDogcmVsLmdldE9yTnVsbCgpLFxuICAgICAgICB0YXJnZXQ6IHRhcmdldC5nZXRPck51bGwoKSxcbiAgICAgICAgdGV4dDogdGV4dC5nZXRPck51bGwoKSxcbiAgICAgICAgdGl0bGU6IHRpdGxlLmdldE9yTnVsbCgpXG4gICAgICB9LCAodiwgX2spID0+IGlzTnVsbCh2KSA9PT0gZmFsc2UpO1xuICAgIH07XG4gICAgY29uc3Qgc2FuaXRpemVEYXRhID0gKGVkaXRvciwgZGF0YSkgPT4ge1xuICAgICAgY29uc3QgZ2V0T3B0aW9uID0gZWRpdG9yLm9wdGlvbnMuZ2V0O1xuICAgICAgY29uc3QgdXJpT3B0aW9ucyA9IHtcbiAgICAgICAgYWxsb3dfaHRtbF9kYXRhX3VybHM6IGdldE9wdGlvbignYWxsb3dfaHRtbF9kYXRhX3VybHMnKSxcbiAgICAgICAgYWxsb3dfc2NyaXB0X3VybHM6IGdldE9wdGlvbignYWxsb3dfc2NyaXB0X3VybHMnKSxcbiAgICAgICAgYWxsb3dfc3ZnX2RhdGFfdXJsczogZ2V0T3B0aW9uKCdhbGxvd19zdmdfZGF0YV91cmxzJylcbiAgICAgIH07XG4gICAgICBjb25zdCBocmVmID0gZGF0YS5ocmVmO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgaHJlZjogZ2xvYmFsJDIuaXNEb21TYWZlKGhyZWYsICdhJywgdXJpT3B0aW9ucykgPyBocmVmIDogJydcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBsaW5rID0gKGVkaXRvciwgYXR0YWNoU3RhdGUsIGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IHNhbml0aXplZERhdGEgPSBzYW5pdGl6ZURhdGEoZWRpdG9yLCBkYXRhKTtcbiAgICAgIGVkaXRvci5oYXNQbHVnaW4oJ3J0YycsIHRydWUpID8gZWRpdG9yLmV4ZWNDb21tYW5kKCdjcmVhdGVsaW5rJywgZmFsc2UsIHVud3JhcE9wdGlvbnMoc2FuaXRpemVkRGF0YSkpIDogbGlua0RvbU11dGF0aW9uKGVkaXRvciwgYXR0YWNoU3RhdGUsIHNhbml0aXplZERhdGEpO1xuICAgIH07XG4gICAgY29uc3QgdW5saW5rID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5oYXNQbHVnaW4oJ3J0YycsIHRydWUpID8gZWRpdG9yLmV4ZWNDb21tYW5kKCd1bmxpbmsnKSA6IHVubGlua0RvbU11dGF0aW9uKGVkaXRvcik7XG4gICAgfTtcbiAgICBjb25zdCB1bmxpbmtJbWFnZUZpZ3VyZSA9IChlZGl0b3IsIGZpZykgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgaW1nID0gZWRpdG9yLmRvbS5zZWxlY3QoJ2ltZycsIGZpZylbMF07XG4gICAgICBpZiAoaW1nKSB7XG4gICAgICAgIGNvbnN0IGEgPSBlZGl0b3IuZG9tLmdldFBhcmVudHMoaW1nLCAnYVtocmVmXScsIGZpZylbMF07XG4gICAgICAgIGlmIChhKSB7XG4gICAgICAgICAgKF9hID0gYS5wYXJlbnROb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaW5zZXJ0QmVmb3JlKGltZywgYSk7XG4gICAgICAgICAgZWRpdG9yLmRvbS5yZW1vdmUoYSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGxpbmtJbWFnZUZpZ3VyZSA9IChkb20sIGZpZywgYXR0cnMpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGNvbnN0IGltZyA9IGRvbS5zZWxlY3QoJ2ltZycsIGZpZylbMF07XG4gICAgICBpZiAoaW1nKSB7XG4gICAgICAgIGNvbnN0IGEgPSBkb20uY3JlYXRlKCdhJywgYXR0cnMpO1xuICAgICAgICAoX2EgPSBpbWcucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmluc2VydEJlZm9yZShhLCBpbWcpO1xuICAgICAgICBhLmFwcGVuZENoaWxkKGltZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGlzTGlzdEdyb3VwID0gaXRlbSA9PiBoYXNOb25OdWxsYWJsZUtleShpdGVtLCAnaXRlbXMnKTtcbiAgICBjb25zdCBmaW5kVGV4dEJ5VmFsdWUgPSAodmFsdWUsIGNhdGFsb2cpID0+IGZpbmRNYXAoY2F0YWxvZywgaXRlbSA9PiB7XG4gICAgICBpZiAoaXNMaXN0R3JvdXAoaXRlbSkpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRUZXh0QnlWYWx1ZSh2YWx1ZSwgaXRlbS5pdGVtcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc29tZUlmKGl0ZW0udmFsdWUgPT09IHZhbHVlLCBpdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBnZXREZWx0YSA9IChwZXJzaXN0ZW50VGV4dCwgZmllbGROYW1lLCBjYXRhbG9nLCBkYXRhKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGRhdGFbZmllbGROYW1lXTtcbiAgICAgIGNvbnN0IGhhc1BlcnNpc3RlbnRUZXh0ID0gcGVyc2lzdGVudFRleHQubGVuZ3RoID4gMDtcbiAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gZmluZFRleHRCeVZhbHVlKHZhbHVlLCBjYXRhbG9nKS5tYXAoaSA9PiAoe1xuICAgICAgICB1cmw6IHtcbiAgICAgICAgICB2YWx1ZTogaS52YWx1ZSxcbiAgICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgICB0ZXh0OiBoYXNQZXJzaXN0ZW50VGV4dCA/IHBlcnNpc3RlbnRUZXh0IDogaS50ZXh0LFxuICAgICAgICAgICAgYXR0YWNoOiBub29wXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB0ZXh0OiBoYXNQZXJzaXN0ZW50VGV4dCA/IHBlcnNpc3RlbnRUZXh0IDogaS50ZXh0XG4gICAgICB9KSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kQ2F0YWxvZyA9IChjYXRhbG9ncywgZmllbGROYW1lKSA9PiB7XG4gICAgICBpZiAoZmllbGROYW1lID09PSAnbGluaycpIHtcbiAgICAgICAgcmV0dXJuIGNhdGFsb2dzLmxpbms7XG4gICAgICB9IGVsc2UgaWYgKGZpZWxkTmFtZSA9PT0gJ2FuY2hvcicpIHtcbiAgICAgICAgcmV0dXJuIGNhdGFsb2dzLmFuY2hvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbml0ID0gKGluaXRpYWxEYXRhLCBsaW5rQ2F0YWxvZykgPT4ge1xuICAgICAgY29uc3QgcGVyc2lzdGVudERhdGEgPSB7XG4gICAgICAgIHRleHQ6IGluaXRpYWxEYXRhLnRleHQsXG4gICAgICAgIHRpdGxlOiBpbml0aWFsRGF0YS50aXRsZVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldFRpdGxlRnJvbVVybENoYW5nZSA9IHVybCA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIHNvbWVJZihwZXJzaXN0ZW50RGF0YS50aXRsZS5sZW5ndGggPD0gMCwgT3B0aW9uYWwuZnJvbSgoX2EgPSB1cmwubWV0YSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRpdGxlKS5nZXRPcignJykpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldFRleHRGcm9tVXJsQ2hhbmdlID0gdXJsID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gc29tZUlmKHBlcnNpc3RlbnREYXRhLnRleHQubGVuZ3RoIDw9IDAsIE9wdGlvbmFsLmZyb20oKF9hID0gdXJsLm1ldGEpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50ZXh0KS5nZXRPcih1cmwudmFsdWUpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBvblVybENoYW5nZSA9IGRhdGEgPT4ge1xuICAgICAgICBjb25zdCB0ZXh0ID0gZ2V0VGV4dEZyb21VcmxDaGFuZ2UoZGF0YS51cmwpO1xuICAgICAgICBjb25zdCB0aXRsZSA9IGdldFRpdGxlRnJvbVVybENoYW5nZShkYXRhLnVybCk7XG4gICAgICAgIGlmICh0ZXh0LmlzU29tZSgpIHx8IHRpdGxlLmlzU29tZSgpKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgICAgLi4udGV4dC5tYXAodGV4dCA9PiAoeyB0ZXh0IH0pKS5nZXRPcih7fSksXG4gICAgICAgICAgICAuLi50aXRsZS5tYXAodGl0bGUgPT4gKHsgdGl0bGUgfSkpLmdldE9yKHt9KVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBvbkNhdGFsb2dDaGFuZ2UgPSAoZGF0YSwgY2hhbmdlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhdGFsb2cgPSBmaW5kQ2F0YWxvZyhsaW5rQ2F0YWxvZywgY2hhbmdlKS5nZXRPcihbXSk7XG4gICAgICAgIHJldHVybiBnZXREZWx0YShwZXJzaXN0ZW50RGF0YS50ZXh0LCBjaGFuZ2UsIGNhdGFsb2csIGRhdGEpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG9uQ2hhbmdlID0gKGdldERhdGEsIGNoYW5nZSkgPT4ge1xuICAgICAgICBjb25zdCBuYW1lID0gY2hhbmdlLm5hbWU7XG4gICAgICAgIGlmIChuYW1lID09PSAndXJsJykge1xuICAgICAgICAgIHJldHVybiBvblVybENoYW5nZShnZXREYXRhKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRhaW5zKFtcbiAgICAgICAgICAgICdhbmNob3InLFxuICAgICAgICAgICAgJ2xpbmsnXG4gICAgICAgICAgXSwgbmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gb25DYXRhbG9nQ2hhbmdlKGdldERhdGEoKSwgbmFtZSk7XG4gICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3RleHQnIHx8IG5hbWUgPT09ICd0aXRsZScpIHtcbiAgICAgICAgICBwZXJzaXN0ZW50RGF0YVtuYW1lXSA9IGdldERhdGEoKVtuYW1lXTtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4geyBvbkNoYW5nZSB9O1xuICAgIH07XG4gICAgY29uc3QgRGlhbG9nQ2hhbmdlcyA9IHtcbiAgICAgIGluaXQsXG4gICAgICBnZXREZWx0YVxuICAgIH07XG5cbiAgICB2YXIgZ2xvYmFsJDEgPSB0aW55bWNlLnV0aWwuVG9vbHMucmVzb2x2ZSgndGlueW1jZS51dGlsLkRlbGF5Jyk7XG5cbiAgICBjb25zdCBkZWxheWVkQ29uZmlybSA9IChlZGl0b3IsIG1lc3NhZ2UsIGNhbGxiYWNrKSA9PiB7XG4gICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgZ2xvYmFsJDEuc2V0RWRpdG9yVGltZW91dChlZGl0b3IsICgpID0+IHtcbiAgICAgICAgZWRpdG9yLndpbmRvd01hbmFnZXIuY29uZmlybShtZXNzYWdlLCBzdGF0ZSA9PiB7XG4gICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcocm5nKTtcbiAgICAgICAgICBjYWxsYmFjayhzdGF0ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCB0cnlFbWFpbFRyYW5zZm9ybSA9IGRhdGEgPT4ge1xuICAgICAgY29uc3QgdXJsID0gZGF0YS5ocmVmO1xuICAgICAgY29uc3Qgc3VnZ2VzdE1haWxUbyA9IHVybC5pbmRleE9mKCdAJykgPiAwICYmIHVybC5pbmRleE9mKCcvJykgPT09IC0xICYmIHVybC5pbmRleE9mKCdtYWlsdG86JykgPT09IC0xO1xuICAgICAgcmV0dXJuIHN1Z2dlc3RNYWlsVG8gPyBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgbWVzc2FnZTogJ1RoZSBVUkwgeW91IGVudGVyZWQgc2VlbXMgdG8gYmUgYW4gZW1haWwgYWRkcmVzcy4gRG8geW91IHdhbnQgdG8gYWRkIHRoZSByZXF1aXJlZCBtYWlsdG86IHByZWZpeD8nLFxuICAgICAgICBwcmVwcm9jZXNzOiBvbGREYXRhID0+ICh7XG4gICAgICAgICAgLi4ub2xkRGF0YSxcbiAgICAgICAgICBocmVmOiAnbWFpbHRvOicgKyB1cmxcbiAgICAgICAgfSlcbiAgICAgIH0pIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgdHJ5UHJvdG9jb2xUcmFuc2Zvcm0gPSAoYXNzdW1lRXh0ZXJuYWxUYXJnZXRzLCBkZWZhdWx0TGlua1Byb3RvY29sKSA9PiBkYXRhID0+IHtcbiAgICAgIGNvbnN0IHVybCA9IGRhdGEuaHJlZjtcbiAgICAgIGNvbnN0IHN1Z2dlc3RQcm90b2NvbCA9IGFzc3VtZUV4dGVybmFsVGFyZ2V0cyA9PT0gMSAmJiAhaGFzUHJvdG9jb2wodXJsKSB8fCBhc3N1bWVFeHRlcm5hbFRhcmdldHMgPT09IDAgJiYgL15cXHMqd3d3KFxcLnxcXGRcXC4pL2kudGVzdCh1cmwpO1xuICAgICAgcmV0dXJuIHN1Z2dlc3RQcm90b2NvbCA/IE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICBtZXNzYWdlOiBgVGhlIFVSTCB5b3UgZW50ZXJlZCBzZWVtcyB0byBiZSBhbiBleHRlcm5hbCBsaW5rLiBEbyB5b3Ugd2FudCB0byBhZGQgdGhlIHJlcXVpcmVkICR7IGRlZmF1bHRMaW5rUHJvdG9jb2wgfTovLyBwcmVmaXg/YCxcbiAgICAgICAgcHJlcHJvY2Vzczogb2xkRGF0YSA9PiAoe1xuICAgICAgICAgIC4uLm9sZERhdGEsXG4gICAgICAgICAgaHJlZjogZGVmYXVsdExpbmtQcm90b2NvbCArICc6Ly8nICsgdXJsXG4gICAgICAgIH0pXG4gICAgICB9KSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IHByZXByb2Nlc3MgPSAoZWRpdG9yLCBkYXRhKSA9PiBmaW5kTWFwKFtcbiAgICAgIHRyeUVtYWlsVHJhbnNmb3JtLFxuICAgICAgdHJ5UHJvdG9jb2xUcmFuc2Zvcm0oYXNzdW1lRXh0ZXJuYWxUYXJnZXRzKGVkaXRvciksIGdldERlZmF1bHRMaW5rUHJvdG9jb2woZWRpdG9yKSlcbiAgICBdLCBmID0+IGYoZGF0YSkpLmZvbGQoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKGRhdGEpLCB0cmFuc2Zvcm0gPT4gbmV3IFByb21pc2UoY2FsbGJhY2sgPT4ge1xuICAgICAgZGVsYXllZENvbmZpcm0oZWRpdG9yLCB0cmFuc2Zvcm0ubWVzc2FnZSwgc3RhdGUgPT4ge1xuICAgICAgICBjYWxsYmFjayhzdGF0ZSA/IHRyYW5zZm9ybS5wcmVwcm9jZXNzKGRhdGEpIDogZGF0YSk7XG4gICAgICB9KTtcbiAgICB9KSk7XG4gICAgY29uc3QgRGlhbG9nQ29uZmlybXMgPSB7IHByZXByb2Nlc3MgfTtcblxuICAgIGNvbnN0IGdldEFuY2hvcnMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgYW5jaG9yTm9kZXMgPSBlZGl0b3IuZG9tLnNlbGVjdCgnYTpub3QoW2hyZWZdKScpO1xuICAgICAgY29uc3QgYW5jaG9ycyA9IGJpbmQoYW5jaG9yTm9kZXMsIGFuY2hvciA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gYW5jaG9yLm5hbWUgfHwgYW5jaG9yLmlkO1xuICAgICAgICByZXR1cm4gaWQgPyBbe1xuICAgICAgICAgICAgdGV4dDogaWQsXG4gICAgICAgICAgICB2YWx1ZTogJyMnICsgaWRcbiAgICAgICAgICB9XSA6IFtdO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYW5jaG9ycy5sZW5ndGggPiAwID8gT3B0aW9uYWwuc29tZShbe1xuICAgICAgICAgIHRleHQ6ICdOb25lJyxcbiAgICAgICAgICB2YWx1ZTogJydcbiAgICAgICAgfV0uY29uY2F0KGFuY2hvcnMpKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IEFuY2hvckxpc3RPcHRpb25zID0geyBnZXRBbmNob3JzIH07XG5cbiAgICBjb25zdCBnZXRDbGFzc2VzID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGxpc3QgPSBnZXRMaW5rQ2xhc3NMaXN0KGVkaXRvcik7XG4gICAgICBpZiAobGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBMaXN0T3B0aW9ucy5zYW5pdGl6ZShsaXN0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBDbGFzc0xpc3RPcHRpb25zID0geyBnZXRDbGFzc2VzIH07XG5cbiAgICBjb25zdCBwYXJzZUpzb24gPSB0ZXh0ID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKEpTT04ucGFyc2UodGV4dCkpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRMaW5rcyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBleHRyYWN0b3IgPSBpdGVtID0+IGVkaXRvci5jb252ZXJ0VVJMKGl0ZW0udmFsdWUgfHwgaXRlbS51cmwgfHwgJycsICdocmVmJyk7XG4gICAgICBjb25zdCBsaW5rTGlzdCA9IGdldExpbmtMaXN0KGVkaXRvcik7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIGlmIChpc1N0cmluZyhsaW5rTGlzdCkpIHtcbiAgICAgICAgICBmZXRjaChsaW5rTGlzdCkudGhlbihyZXMgPT4gcmVzLm9rID8gcmVzLnRleHQoKS50aGVuKHBhcnNlSnNvbikgOiBQcm9taXNlLnJlamVjdCgpKS50aGVuKHJlc29sdmUsICgpID0+IHJlc29sdmUoT3B0aW9uYWwubm9uZSgpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihsaW5rTGlzdCkpIHtcbiAgICAgICAgICBsaW5rTGlzdChvdXRwdXQgPT4gcmVzb2x2ZShPcHRpb25hbC5zb21lKG91dHB1dCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKE9wdGlvbmFsLmZyb20obGlua0xpc3QpKTtcbiAgICAgICAgfVxuICAgICAgfSkudGhlbihvcHRJdGVtcyA9PiBvcHRJdGVtcy5iaW5kKExpc3RPcHRpb25zLnNhbml0aXplV2l0aChleHRyYWN0b3IpKS5tYXAoaXRlbXMgPT4ge1xuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IG5vbmVJdGVtID0gW3tcbiAgICAgICAgICAgICAgdGV4dDogJ05vbmUnLFxuICAgICAgICAgICAgICB2YWx1ZTogJydcbiAgICAgICAgICAgIH1dO1xuICAgICAgICAgIHJldHVybiBub25lSXRlbS5jb25jYXQoaXRlbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH07XG4gICAgY29uc3QgTGlua0xpc3RPcHRpb25zID0geyBnZXRMaW5rcyB9O1xuXG4gICAgY29uc3QgZ2V0UmVscyA9IChlZGl0b3IsIGluaXRpYWxUYXJnZXQpID0+IHtcbiAgICAgIGNvbnN0IGxpc3QgPSBnZXRSZWxMaXN0KGVkaXRvcik7XG4gICAgICBpZiAobGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGlzVGFyZ2V0QmxhbmsgPSBpcyhpbml0aWFsVGFyZ2V0LCAnX2JsYW5rJyk7XG4gICAgICAgIGNvbnN0IGVuZm9yY2VTYWZlID0gYWxsb3dVbnNhZmVMaW5rVGFyZ2V0KGVkaXRvcikgPT09IGZhbHNlO1xuICAgICAgICBjb25zdCBzYWZlUmVsRXh0cmFjdG9yID0gaXRlbSA9PiBhcHBseVJlbFRhcmdldFJ1bGVzKExpc3RPcHRpb25zLmdldFZhbHVlKGl0ZW0pLCBpc1RhcmdldEJsYW5rKTtcbiAgICAgICAgY29uc3Qgc2FuaXRpemVyID0gZW5mb3JjZVNhZmUgPyBMaXN0T3B0aW9ucy5zYW5pdGl6ZVdpdGgoc2FmZVJlbEV4dHJhY3RvcikgOiBMaXN0T3B0aW9ucy5zYW5pdGl6ZTtcbiAgICAgICAgcmV0dXJuIHNhbml0aXplcihsaXN0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBSZWxPcHRpb25zID0geyBnZXRSZWxzIH07XG5cbiAgICBjb25zdCBmYWxsYmFja3MgPSBbXG4gICAgICB7XG4gICAgICAgIHRleHQ6ICdDdXJyZW50IHdpbmRvdycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGV4dDogJ05ldyB3aW5kb3cnLFxuICAgICAgICB2YWx1ZTogJ19ibGFuaydcbiAgICAgIH1cbiAgICBdO1xuICAgIGNvbnN0IGdldFRhcmdldHMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgbGlzdCA9IGdldFRhcmdldExpc3QoZWRpdG9yKTtcbiAgICAgIGlmIChpc0FycmF5KGxpc3QpKSB7XG4gICAgICAgIHJldHVybiBMaXN0T3B0aW9ucy5zYW5pdGl6ZShsaXN0KS5vclRodW5rKCgpID0+IE9wdGlvbmFsLnNvbWUoZmFsbGJhY2tzKSk7XG4gICAgICB9IGVsc2UgaWYgKGxpc3QgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShmYWxsYmFja3MpO1xuICAgIH07XG4gICAgY29uc3QgVGFyZ2V0T3B0aW9ucyA9IHsgZ2V0VGFyZ2V0cyB9O1xuXG4gICAgY29uc3Qgbm9uRW1wdHlBdHRyID0gKGRvbSwgZWxlbSwgbmFtZSkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gZG9tLmdldEF0dHJpYihlbGVtLCBuYW1lKTtcbiAgICAgIHJldHVybiB2YWwgIT09IG51bGwgJiYgdmFsLmxlbmd0aCA+IDAgPyBPcHRpb25hbC5zb21lKHZhbCkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBleHRyYWN0RnJvbUFuY2hvciA9IChlZGl0b3IsIGFuY2hvcikgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IG9ubHlUZXh0ID0gaXNPbmx5VGV4dFNlbGVjdGVkKGVkaXRvcik7XG4gICAgICBjb25zdCB0ZXh0ID0gb25seVRleHQgPyBPcHRpb25hbC5zb21lKGdldEFuY2hvclRleHQoZWRpdG9yLnNlbGVjdGlvbiwgYW5jaG9yKSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICBjb25zdCB1cmwgPSBhbmNob3IuYmluZChhbmNob3JFbG0gPT4gT3B0aW9uYWwuZnJvbShkb20uZ2V0QXR0cmliKGFuY2hvckVsbSwgJ2hyZWYnKSkpO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gYW5jaG9yLmJpbmQoYW5jaG9yRWxtID0+IE9wdGlvbmFsLmZyb20oZG9tLmdldEF0dHJpYihhbmNob3JFbG0sICd0YXJnZXQnKSkpO1xuICAgICAgY29uc3QgcmVsID0gYW5jaG9yLmJpbmQoYW5jaG9yRWxtID0+IG5vbkVtcHR5QXR0cihkb20sIGFuY2hvckVsbSwgJ3JlbCcpKTtcbiAgICAgIGNvbnN0IGxpbmtDbGFzcyA9IGFuY2hvci5iaW5kKGFuY2hvckVsbSA9PiBub25FbXB0eUF0dHIoZG9tLCBhbmNob3JFbG0sICdjbGFzcycpKTtcbiAgICAgIGNvbnN0IHRpdGxlID0gYW5jaG9yLmJpbmQoYW5jaG9yRWxtID0+IG5vbkVtcHR5QXR0cihkb20sIGFuY2hvckVsbSwgJ3RpdGxlJykpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdXJsLFxuICAgICAgICB0ZXh0LFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICByZWwsXG4gICAgICAgIGxpbmtDbGFzc1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbGxlY3QgPSAoZWRpdG9yLCBsaW5rTm9kZSkgPT4gTGlua0xpc3RPcHRpb25zLmdldExpbmtzKGVkaXRvcikudGhlbihsaW5rcyA9PiB7XG4gICAgICBjb25zdCBhbmNob3IgPSBleHRyYWN0RnJvbUFuY2hvcihlZGl0b3IsIGxpbmtOb2RlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFuY2hvcixcbiAgICAgICAgY2F0YWxvZ3M6IHtcbiAgICAgICAgICB0YXJnZXRzOiBUYXJnZXRPcHRpb25zLmdldFRhcmdldHMoZWRpdG9yKSxcbiAgICAgICAgICByZWxzOiBSZWxPcHRpb25zLmdldFJlbHMoZWRpdG9yLCBhbmNob3IudGFyZ2V0KSxcbiAgICAgICAgICBjbGFzc2VzOiBDbGFzc0xpc3RPcHRpb25zLmdldENsYXNzZXMoZWRpdG9yKSxcbiAgICAgICAgICBhbmNob3I6IEFuY2hvckxpc3RPcHRpb25zLmdldEFuY2hvcnMoZWRpdG9yKSxcbiAgICAgICAgICBsaW5rOiBsaW5rc1xuICAgICAgICB9LFxuICAgICAgICBvcHROb2RlOiBsaW5rTm9kZSxcbiAgICAgICAgZmxhZ3M6IHsgdGl0bGVFbmFibGVkOiBzaG91bGRTaG93TGlua1RpdGxlKGVkaXRvcikgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgICBjb25zdCBEaWFsb2dJbmZvID0geyBjb2xsZWN0IH07XG5cbiAgICBjb25zdCBoYW5kbGVTdWJtaXQgPSAoZWRpdG9yLCBpbmZvKSA9PiBhcGkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGFwaS5nZXREYXRhKCk7XG4gICAgICBpZiAoIWRhdGEudXJsLnZhbHVlKSB7XG4gICAgICAgIHVubGluayhlZGl0b3IpO1xuICAgICAgICBhcGkuY2xvc2UoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZ2V0Q2hhbmdlZFZhbHVlID0ga2V5ID0+IE9wdGlvbmFsLmZyb20oZGF0YVtrZXldKS5maWx0ZXIodmFsdWUgPT4gIWlzKGluZm8uYW5jaG9yW2tleV0sIHZhbHVlKSk7XG4gICAgICBjb25zdCBjaGFuZ2VkRGF0YSA9IHtcbiAgICAgICAgaHJlZjogZGF0YS51cmwudmFsdWUsXG4gICAgICAgIHRleHQ6IGdldENoYW5nZWRWYWx1ZSgndGV4dCcpLFxuICAgICAgICB0YXJnZXQ6IGdldENoYW5nZWRWYWx1ZSgndGFyZ2V0JyksXG4gICAgICAgIHJlbDogZ2V0Q2hhbmdlZFZhbHVlKCdyZWwnKSxcbiAgICAgICAgY2xhc3M6IGdldENoYW5nZWRWYWx1ZSgnbGlua0NsYXNzJyksXG4gICAgICAgIHRpdGxlOiBnZXRDaGFuZ2VkVmFsdWUoJ3RpdGxlJylcbiAgICAgIH07XG4gICAgICBjb25zdCBhdHRhY2hTdGF0ZSA9IHtcbiAgICAgICAgaHJlZjogZGF0YS51cmwudmFsdWUsXG4gICAgICAgIGF0dGFjaDogZGF0YS51cmwubWV0YSAhPT0gdW5kZWZpbmVkICYmIGRhdGEudXJsLm1ldGEuYXR0YWNoID8gZGF0YS51cmwubWV0YS5hdHRhY2ggOiBub29wXG4gICAgICB9O1xuICAgICAgRGlhbG9nQ29uZmlybXMucHJlcHJvY2VzcyhlZGl0b3IsIGNoYW5nZWREYXRhKS50aGVuKHBEYXRhID0+IHtcbiAgICAgICAgbGluayhlZGl0b3IsIGF0dGFjaFN0YXRlLCBwRGF0YSk7XG4gICAgICB9KTtcbiAgICAgIGFwaS5jbG9zZSgpO1xuICAgIH07XG4gICAgY29uc3QgY29sbGVjdERhdGEgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgYW5jaG9yTm9kZSA9IGdldEFuY2hvckVsZW1lbnQoZWRpdG9yKTtcbiAgICAgIHJldHVybiBEaWFsb2dJbmZvLmNvbGxlY3QoZWRpdG9yLCBhbmNob3JOb2RlKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEluaXRpYWxEYXRhID0gKGluZm8sIGRlZmF1bHRUYXJnZXQpID0+IHtcbiAgICAgIGNvbnN0IGFuY2hvciA9IGluZm8uYW5jaG9yO1xuICAgICAgY29uc3QgdXJsID0gYW5jaG9yLnVybC5nZXRPcignJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1cmw6IHtcbiAgICAgICAgICB2YWx1ZTogdXJsLFxuICAgICAgICAgIG1ldGE6IHsgb3JpZ2luYWw6IHsgdmFsdWU6IHVybCB9IH1cbiAgICAgICAgfSxcbiAgICAgICAgdGV4dDogYW5jaG9yLnRleHQuZ2V0T3IoJycpLFxuICAgICAgICB0aXRsZTogYW5jaG9yLnRpdGxlLmdldE9yKCcnKSxcbiAgICAgICAgYW5jaG9yOiB1cmwsXG4gICAgICAgIGxpbms6IHVybCxcbiAgICAgICAgcmVsOiBhbmNob3IucmVsLmdldE9yKCcnKSxcbiAgICAgICAgdGFyZ2V0OiBhbmNob3IudGFyZ2V0Lm9yKGRlZmF1bHRUYXJnZXQpLmdldE9yKCcnKSxcbiAgICAgICAgbGlua0NsYXNzOiBhbmNob3IubGlua0NsYXNzLmdldE9yKCcnKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG1ha2VEaWFsb2cgPSAoc2V0dGluZ3MsIG9uU3VibWl0LCBlZGl0b3IpID0+IHtcbiAgICAgIGNvbnN0IHVybElucHV0ID0gW3tcbiAgICAgICAgICBuYW1lOiAndXJsJyxcbiAgICAgICAgICB0eXBlOiAndXJsaW5wdXQnLFxuICAgICAgICAgIGZpbGV0eXBlOiAnZmlsZScsXG4gICAgICAgICAgbGFiZWw6ICdVUkwnXG4gICAgICAgIH1dO1xuICAgICAgY29uc3QgZGlzcGxheVRleHQgPSBzZXR0aW5ncy5hbmNob3IudGV4dC5tYXAoKCkgPT4gKHtcbiAgICAgICAgbmFtZTogJ3RleHQnLFxuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBsYWJlbDogJ1RleHQgdG8gZGlzcGxheSdcbiAgICAgIH0pKS50b0FycmF5KCk7XG4gICAgICBjb25zdCB0aXRsZVRleHQgPSBzZXR0aW5ncy5mbGFncy50aXRsZUVuYWJsZWQgPyBbe1xuICAgICAgICAgIG5hbWU6ICd0aXRsZScsXG4gICAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgICBsYWJlbDogJ1RpdGxlJ1xuICAgICAgICB9XSA6IFtdO1xuICAgICAgY29uc3QgZGVmYXVsdFRhcmdldCA9IE9wdGlvbmFsLmZyb20oZ2V0RGVmYXVsdExpbmtUYXJnZXQoZWRpdG9yKSk7XG4gICAgICBjb25zdCBpbml0aWFsRGF0YSA9IGdldEluaXRpYWxEYXRhKHNldHRpbmdzLCBkZWZhdWx0VGFyZ2V0KTtcbiAgICAgIGNvbnN0IGNhdGFsb2dzID0gc2V0dGluZ3MuY2F0YWxvZ3M7XG4gICAgICBjb25zdCBkaWFsb2dEZWx0YSA9IERpYWxvZ0NoYW5nZXMuaW5pdChpbml0aWFsRGF0YSwgY2F0YWxvZ3MpO1xuICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgdHlwZTogJ3BhbmVsJyxcbiAgICAgICAgaXRlbXM6IGZsYXR0ZW4oW1xuICAgICAgICAgIHVybElucHV0LFxuICAgICAgICAgIGRpc3BsYXlUZXh0LFxuICAgICAgICAgIHRpdGxlVGV4dCxcbiAgICAgICAgICBjYXQoW1xuICAgICAgICAgICAgY2F0YWxvZ3MuYW5jaG9yLm1hcChMaXN0T3B0aW9ucy5jcmVhdGVVaSgnYW5jaG9yJywgJ0FuY2hvcnMnKSksXG4gICAgICAgICAgICBjYXRhbG9ncy5yZWxzLm1hcChMaXN0T3B0aW9ucy5jcmVhdGVVaSgncmVsJywgJ1JlbCcpKSxcbiAgICAgICAgICAgIGNhdGFsb2dzLnRhcmdldHMubWFwKExpc3RPcHRpb25zLmNyZWF0ZVVpKCd0YXJnZXQnLCAnT3BlbiBsaW5rIGluLi4uJykpLFxuICAgICAgICAgICAgY2F0YWxvZ3MubGluay5tYXAoTGlzdE9wdGlvbnMuY3JlYXRlVWkoJ2xpbmsnLCAnTGluayBsaXN0JykpLFxuICAgICAgICAgICAgY2F0YWxvZ3MuY2xhc3Nlcy5tYXAoTGlzdE9wdGlvbnMuY3JlYXRlVWkoJ2xpbmtDbGFzcycsICdDbGFzcycpKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGl0bGU6ICdJbnNlcnQvRWRpdCBMaW5rJyxcbiAgICAgICAgc2l6ZTogJ25vcm1hbCcsXG4gICAgICAgIGJvZHksXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAnY2FuY2VsJyxcbiAgICAgICAgICAgIG5hbWU6ICdjYW5jZWwnLFxuICAgICAgICAgICAgdGV4dDogJ0NhbmNlbCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICAgICAgbmFtZTogJ3NhdmUnLFxuICAgICAgICAgICAgdGV4dDogJ1NhdmUnLFxuICAgICAgICAgICAgcHJpbWFyeTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgaW5pdGlhbERhdGEsXG4gICAgICAgIG9uQ2hhbmdlOiAoYXBpLCB7bmFtZX0pID0+IHtcbiAgICAgICAgICBkaWFsb2dEZWx0YS5vbkNoYW5nZShhcGkuZ2V0RGF0YSwgeyBuYW1lIH0pLmVhY2gobmV3RGF0YSA9PiB7XG4gICAgICAgICAgICBhcGkuc2V0RGF0YShuZXdEYXRhKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25TdWJtaXRcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBvcGVuJDEgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGNvbGxlY3REYXRhKGVkaXRvcik7XG4gICAgICBkYXRhLnRoZW4oaW5mbyA9PiB7XG4gICAgICAgIGNvbnN0IG9uU3VibWl0ID0gaGFuZGxlU3VibWl0KGVkaXRvciwgaW5mbyk7XG4gICAgICAgIHJldHVybiBtYWtlRGlhbG9nKGluZm8sIG9uU3VibWl0LCBlZGl0b3IpO1xuICAgICAgfSkudGhlbihzcGVjID0+IHtcbiAgICAgICAgZWRpdG9yLndpbmRvd01hbmFnZXIub3BlbihzcGVjKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZWdpc3RlciA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IuYWRkQ29tbWFuZCgnbWNlTGluaycsIChfdWksIHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICgodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhbHVlLmRpYWxvZykgPT09IHRydWUgfHwgIXVzZVF1aWNrTGluayhlZGl0b3IpKSB7XG4gICAgICAgICAgb3BlbiQxKGVkaXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWRpdG9yLmRpc3BhdGNoKCdjb250ZXh0dG9vbGJhci1zaG93JywgeyB0b29sYmFyS2V5OiAncXVpY2tsaW5rJyB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHZhciBnbG9iYWwgPSB0aW55bWNlLnV0aWwuVG9vbHMucmVzb2x2ZSgndGlueW1jZS51dGlsLlZLJyk7XG5cbiAgICBjb25zdCBhcHBlbmRDbGlja1JlbW92ZSA9IChsaW5rLCBldnQpID0+IHtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICBsaW5rLmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgfTtcbiAgICBjb25zdCBvcGVuID0gdXJsID0+IHtcbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICBsaW5rLnRhcmdldCA9ICdfYmxhbmsnO1xuICAgICAgbGluay5ocmVmID0gdXJsO1xuICAgICAgbGluay5yZWwgPSAnbm9yZWZlcnJlciBub29wZW5lcic7XG4gICAgICBjb25zdCBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudHMnKTtcbiAgICAgIGV2dC5pbml0TW91c2VFdmVudCgnY2xpY2snLCB0cnVlLCB0cnVlLCB3aW5kb3csIDAsIDAsIDAsIDAsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwLCBudWxsKTtcbiAgICAgIGFwcGVuZENsaWNrUmVtb3ZlKGxpbmssIGV2dCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldExpbmsgPSAoZWRpdG9yLCBlbG0pID0+IGVkaXRvci5kb20uZ2V0UGFyZW50KGVsbSwgJ2FbaHJlZl0nKTtcbiAgICBjb25zdCBnZXRTZWxlY3RlZExpbmsgPSBlZGl0b3IgPT4gZ2V0TGluayhlZGl0b3IsIGVkaXRvci5zZWxlY3Rpb24uZ2V0U3RhcnQoKSk7XG4gICAgY29uc3QgaGFzT25seUFsdE1vZGlmaWVyID0gZSA9PiB7XG4gICAgICByZXR1cm4gZS5hbHRLZXkgPT09IHRydWUgJiYgZS5zaGlmdEtleSA9PT0gZmFsc2UgJiYgZS5jdHJsS2V5ID09PSBmYWxzZSAmJiBlLm1ldGFLZXkgPT09IGZhbHNlO1xuICAgIH07XG4gICAgY29uc3QgZ290b0xpbmsgPSAoZWRpdG9yLCBhKSA9PiB7XG4gICAgICBpZiAoYSkge1xuICAgICAgICBjb25zdCBocmVmID0gZ2V0SHJlZihhKTtcbiAgICAgICAgaWYgKC9eIy8udGVzdChocmVmKSkge1xuICAgICAgICAgIGNvbnN0IHRhcmdldEVsID0gZWRpdG9yLmRvbS5zZWxlY3QoaHJlZik7XG4gICAgICAgICAgaWYgKHRhcmdldEVsLmxlbmd0aCkge1xuICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zY3JvbGxJbnRvVmlldyh0YXJnZXRFbFswXSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wZW4oYS5ocmVmKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb3BlbkRpYWxvZyA9IGVkaXRvciA9PiAoKSA9PiB7XG4gICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZUxpbmsnLCBmYWxzZSwgeyBkaWFsb2c6IHRydWUgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnb3RvU2VsZWN0ZWRMaW5rID0gZWRpdG9yID0+ICgpID0+IHtcbiAgICAgIGdvdG9MaW5rKGVkaXRvciwgZ2V0U2VsZWN0ZWRMaW5rKGVkaXRvcikpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0dXBHb3RvTGlua3MgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLm9uKCdjbGljaycsIGUgPT4ge1xuICAgICAgICBjb25zdCBsaW5rID0gZ2V0TGluayhlZGl0b3IsIGUudGFyZ2V0KTtcbiAgICAgICAgaWYgKGxpbmsgJiYgZ2xvYmFsLm1ldGFLZXlQcmVzc2VkKGUpKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGdvdG9MaW5rKGVkaXRvciwgbGluayk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdrZXlkb3duJywgZSA9PiB7XG4gICAgICAgIGlmICghZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSAmJiBlLmtleUNvZGUgPT09IDEzICYmIGhhc09ubHlBbHRNb2RpZmllcihlKSkge1xuICAgICAgICAgIGNvbnN0IGxpbmsgPSBnZXRTZWxlY3RlZExpbmsoZWRpdG9yKTtcbiAgICAgICAgICBpZiAobGluaykge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZ290b0xpbmsoZWRpdG9yLCBsaW5rKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgdG9nZ2xlU3RhdGUgPSAoZWRpdG9yLCB0b2dnbGVyKSA9PiB7XG4gICAgICBlZGl0b3Iub24oJ05vZGVDaGFuZ2UnLCB0b2dnbGVyKTtcbiAgICAgIHJldHVybiAoKSA9PiBlZGl0b3Iub2ZmKCdOb2RlQ2hhbmdlJywgdG9nZ2xlcik7XG4gICAgfTtcbiAgICBjb25zdCB0b2dnbGVMaW5rU3RhdGUgPSBlZGl0b3IgPT4gYXBpID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZVN0YXRlID0gKCkgPT4ge1xuICAgICAgICBhcGkuc2V0QWN0aXZlKCFlZGl0b3IubW9kZS5pc1JlYWRPbmx5KCkgJiYgaXNJbkFuY2hvcihlZGl0b3IsIGVkaXRvci5zZWxlY3Rpb24uZ2V0Tm9kZSgpKSk7XG4gICAgICAgIGFwaS5zZXRFbmFibGVkKGVkaXRvci5zZWxlY3Rpb24uaXNFZGl0YWJsZSgpKTtcbiAgICAgIH07XG4gICAgICB1cGRhdGVTdGF0ZSgpO1xuICAgICAgcmV0dXJuIHRvZ2dsZVN0YXRlKGVkaXRvciwgdXBkYXRlU3RhdGUpO1xuICAgIH07XG4gICAgY29uc3QgdG9nZ2xlTGlua01lbnVTdGF0ZSA9IGVkaXRvciA9PiBhcGkgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlU3RhdGUgPSAoKSA9PiB7XG4gICAgICAgIGFwaS5zZXRFbmFibGVkKGVkaXRvci5zZWxlY3Rpb24uaXNFZGl0YWJsZSgpKTtcbiAgICAgIH07XG4gICAgICB1cGRhdGVTdGF0ZSgpO1xuICAgICAgcmV0dXJuIHRvZ2dsZVN0YXRlKGVkaXRvciwgdXBkYXRlU3RhdGUpO1xuICAgIH07XG4gICAgY29uc3QgaGFzRXhhY3RseU9uZUxpbmtJblNlbGVjdGlvbiA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBsaW5rcyA9IGVkaXRvci5zZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSA/IGdldExpbmtzJDEoZWRpdG9yLmRvbS5nZXRQYXJlbnRzKGVkaXRvci5zZWxlY3Rpb24uZ2V0U3RhcnQoKSkpIDogZ2V0TGlua3NJblNlbGVjdGlvbihlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKTtcbiAgICAgIHJldHVybiBsaW5rcy5sZW5ndGggPT09IDE7XG4gICAgfTtcbiAgICBjb25zdCB0b2dnbGVHb3RvTGlua1N0YXRlID0gZWRpdG9yID0+IGFwaSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVTdGF0ZSA9ICgpID0+IGFwaS5zZXRFbmFibGVkKGhhc0V4YWN0bHlPbmVMaW5rSW5TZWxlY3Rpb24oZWRpdG9yKSk7XG4gICAgICB1cGRhdGVTdGF0ZSgpO1xuICAgICAgcmV0dXJuIHRvZ2dsZVN0YXRlKGVkaXRvciwgdXBkYXRlU3RhdGUpO1xuICAgIH07XG4gICAgY29uc3QgdG9nZ2xlVW5saW5rU3RhdGUgPSBlZGl0b3IgPT4gYXBpID0+IHtcbiAgICAgIGNvbnN0IGhhc0xpbmtzJDEgPSBwYXJlbnRzID0+IGhhc0xpbmtzKHBhcmVudHMpIHx8IGhhc0xpbmtzSW5TZWxlY3Rpb24oZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSk7XG4gICAgICBjb25zdCBwYXJlbnRzID0gZWRpdG9yLmRvbS5nZXRQYXJlbnRzKGVkaXRvci5zZWxlY3Rpb24uZ2V0U3RhcnQoKSk7XG4gICAgICBjb25zdCB1cGRhdGVFbmFibGVkID0gcGFyZW50cyA9PiB7XG4gICAgICAgIGFwaS5zZXRFbmFibGVkKGhhc0xpbmtzJDEocGFyZW50cykgJiYgZWRpdG9yLnNlbGVjdGlvbi5pc0VkaXRhYmxlKCkpO1xuICAgICAgfTtcbiAgICAgIHVwZGF0ZUVuYWJsZWQocGFyZW50cyk7XG4gICAgICByZXR1cm4gdG9nZ2xlU3RhdGUoZWRpdG9yLCBlID0+IHVwZGF0ZUVuYWJsZWQoZS5wYXJlbnRzKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNldHVwID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5hZGRTaG9ydGN1dCgnTWV0YStLJywgJycsICgpID0+IHtcbiAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VMaW5rJyk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0dXBCdXR0b25zID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRUb2dnbGVCdXR0b24oJ2xpbmsnLCB7XG4gICAgICAgIGljb246ICdsaW5rJyxcbiAgICAgICAgdG9vbHRpcDogJ0luc2VydC9lZGl0IGxpbmsnLFxuICAgICAgICBvbkFjdGlvbjogb3BlbkRpYWxvZyhlZGl0b3IpLFxuICAgICAgICBvblNldHVwOiB0b2dnbGVMaW5rU3RhdGUoZWRpdG9yKVxuICAgICAgfSk7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQnV0dG9uKCdvcGVubGluaycsIHtcbiAgICAgICAgaWNvbjogJ25ldy10YWInLFxuICAgICAgICB0b29sdGlwOiAnT3BlbiBsaW5rJyxcbiAgICAgICAgb25BY3Rpb246IGdvdG9TZWxlY3RlZExpbmsoZWRpdG9yKSxcbiAgICAgICAgb25TZXR1cDogdG9nZ2xlR290b0xpbmtTdGF0ZShlZGl0b3IpXG4gICAgICB9KTtcbiAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRCdXR0b24oJ3VubGluaycsIHtcbiAgICAgICAgaWNvbjogJ3VubGluaycsXG4gICAgICAgIHRvb2x0aXA6ICdSZW1vdmUgbGluaycsXG4gICAgICAgIG9uQWN0aW9uOiAoKSA9PiB1bmxpbmsoZWRpdG9yKSxcbiAgICAgICAgb25TZXR1cDogdG9nZ2xlVW5saW5rU3RhdGUoZWRpdG9yKVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cE1lbnVJdGVtcyA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTWVudUl0ZW0oJ29wZW5saW5rJywge1xuICAgICAgICB0ZXh0OiAnT3BlbiBsaW5rJyxcbiAgICAgICAgaWNvbjogJ25ldy10YWInLFxuICAgICAgICBvbkFjdGlvbjogZ290b1NlbGVjdGVkTGluayhlZGl0b3IpLFxuICAgICAgICBvblNldHVwOiB0b2dnbGVHb3RvTGlua1N0YXRlKGVkaXRvcilcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE1lbnVJdGVtKCdsaW5rJywge1xuICAgICAgICBpY29uOiAnbGluaycsXG4gICAgICAgIHRleHQ6ICdMaW5rLi4uJyxcbiAgICAgICAgc2hvcnRjdXQ6ICdNZXRhK0snLFxuICAgICAgICBvblNldHVwOiB0b2dnbGVMaW5rTWVudVN0YXRlKGVkaXRvciksXG4gICAgICAgIG9uQWN0aW9uOiBvcGVuRGlhbG9nKGVkaXRvcilcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE1lbnVJdGVtKCd1bmxpbmsnLCB7XG4gICAgICAgIGljb246ICd1bmxpbmsnLFxuICAgICAgICB0ZXh0OiAnUmVtb3ZlIGxpbmsnLFxuICAgICAgICBvbkFjdGlvbjogKCkgPT4gdW5saW5rKGVkaXRvciksXG4gICAgICAgIG9uU2V0dXA6IHRvZ2dsZVVubGlua1N0YXRlKGVkaXRvcilcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2V0dXBDb250ZXh0TWVudSA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBpbkxpbmsgPSAnbGluayB1bmxpbmsgb3BlbmxpbmsnO1xuICAgICAgY29uc3Qgbm9MaW5rID0gJ2xpbmsnO1xuICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZENvbnRleHRNZW51KCdsaW5rJywge1xuICAgICAgICB1cGRhdGU6IGVsZW1lbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzRWRpdGFibGUgPSBlZGl0b3IuZG9tLmlzRWRpdGFibGUoZWxlbWVudCk7XG4gICAgICAgICAgaWYgKCFpc0VkaXRhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBoYXNMaW5rcyhlZGl0b3IuZG9tLmdldFBhcmVudHMoZWxlbWVudCwgJ2EnKSkgPyBpbkxpbmsgOiBub0xpbms7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2V0dXBDb250ZXh0VG9vbGJhcnMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgY29sbGFwc2VTZWxlY3Rpb25Ub0VuZCA9IGVkaXRvciA9PiB7XG4gICAgICAgIGVkaXRvci5zZWxlY3Rpb24uY29sbGFwc2UoZmFsc2UpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG9uU2V0dXBMaW5rID0gYnV0dG9uQXBpID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Tm9kZSgpO1xuICAgICAgICBidXR0b25BcGkuc2V0RW5hYmxlZChpc0luQW5jaG9yKGVkaXRvciwgbm9kZSkpO1xuICAgICAgICByZXR1cm4gbm9vcDtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRMaW5rVGV4dCA9IHZhbHVlID0+IHtcbiAgICAgICAgY29uc3QgYW5jaG9yID0gZ2V0QW5jaG9yRWxlbWVudChlZGl0b3IpO1xuICAgICAgICBjb25zdCBvbmx5VGV4dCA9IGlzT25seVRleHRTZWxlY3RlZChlZGl0b3IpO1xuICAgICAgICBpZiAoYW5jaG9yLmlzTm9uZSgpICYmIG9ubHlUZXh0KSB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IGdldEFuY2hvclRleHQoZWRpdG9yLnNlbGVjdGlvbiwgYW5jaG9yKTtcbiAgICAgICAgICByZXR1cm4gc29tZUlmKHRleHQubGVuZ3RoID09PSAwLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRDb250ZXh0Rm9ybSgncXVpY2tsaW5rJywge1xuICAgICAgICBsYXVuY2g6IHtcbiAgICAgICAgICB0eXBlOiAnY29udGV4dGZvcm10b2dnbGVidXR0b24nLFxuICAgICAgICAgIGljb246ICdsaW5rJyxcbiAgICAgICAgICB0b29sdGlwOiAnTGluaycsXG4gICAgICAgICAgb25TZXR1cDogdG9nZ2xlTGlua1N0YXRlKGVkaXRvcilcbiAgICAgICAgfSxcbiAgICAgICAgbGFiZWw6ICdMaW5rJyxcbiAgICAgICAgcHJlZGljYXRlOiBub2RlID0+IGhhc0NvbnRleHRUb29sYmFyKGVkaXRvcikgJiYgaXNJbkFuY2hvcihlZGl0b3IsIG5vZGUpLFxuICAgICAgICBpbml0VmFsdWU6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBlbG0gPSBnZXRBbmNob3JFbGVtZW50KGVkaXRvcik7XG4gICAgICAgICAgcmV0dXJuIGVsbS5mb2xkKGNvbnN0YW50KCcnKSwgZ2V0SHJlZik7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ2NvbnRleHRmb3JtdG9nZ2xlYnV0dG9uJyxcbiAgICAgICAgICAgIGljb246ICdsaW5rJyxcbiAgICAgICAgICAgIHRvb2x0aXA6ICdMaW5rJyxcbiAgICAgICAgICAgIHByaW1hcnk6IHRydWUsXG4gICAgICAgICAgICBvblNldHVwOiBidXR0b25BcGkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBub2RlID0gZWRpdG9yLnNlbGVjdGlvbi5nZXROb2RlKCk7XG4gICAgICAgICAgICAgIGJ1dHRvbkFwaS5zZXRBY3RpdmUoaXNJbkFuY2hvcihlZGl0b3IsIG5vZGUpKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRvZ2dsZUxpbmtTdGF0ZShlZGl0b3IpKGJ1dHRvbkFwaSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25BY3Rpb246IGZvcm1BcGkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZvcm1BcGkuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IGdldExpbmtUZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgY29uc3QgYXR0YWNoU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgaHJlZjogdmFsdWUsXG4gICAgICAgICAgICAgICAgYXR0YWNoOiBub29wXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGxpbmsoZWRpdG9yLCBhdHRhY2hTdGF0ZSwge1xuICAgICAgICAgICAgICAgIGhyZWY6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgdGl0bGU6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICAgICAgICAgICByZWw6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICAgICAgICAgICBjbGFzczogT3B0aW9uYWwubm9uZSgpXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjb2xsYXBzZVNlbGVjdGlvblRvRW5kKGVkaXRvcik7XG4gICAgICAgICAgICAgIGZvcm1BcGkuaGlkZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ2NvbnRleHRmb3JtYnV0dG9uJyxcbiAgICAgICAgICAgIGljb246ICd1bmxpbmsnLFxuICAgICAgICAgICAgdG9vbHRpcDogJ1JlbW92ZSBsaW5rJyxcbiAgICAgICAgICAgIG9uU2V0dXA6IG9uU2V0dXBMaW5rLFxuICAgICAgICAgICAgb25BY3Rpb246IGZvcm1BcGkgPT4ge1xuICAgICAgICAgICAgICB1bmxpbmsoZWRpdG9yKTtcbiAgICAgICAgICAgICAgZm9ybUFwaS5oaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAnY29udGV4dGZvcm1idXR0b24nLFxuICAgICAgICAgICAgaWNvbjogJ25ldy10YWInLFxuICAgICAgICAgICAgdG9vbHRpcDogJ09wZW4gbGluaycsXG4gICAgICAgICAgICBvblNldHVwOiBvblNldHVwTGluayxcbiAgICAgICAgICAgIG9uQWN0aW9uOiBmb3JtQXBpID0+IHtcbiAgICAgICAgICAgICAgZ290b1NlbGVjdGVkTGluayhlZGl0b3IpKCk7XG4gICAgICAgICAgICAgIGZvcm1BcGkuaGlkZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHZhciBQbHVnaW4gPSAoKSA9PiB7XG4gICAgICBnbG9iYWwkNS5hZGQoJ2xpbmsnLCBlZGl0b3IgPT4ge1xuICAgICAgICByZWdpc3RlciQxKGVkaXRvcik7XG4gICAgICAgIHNldHVwQnV0dG9ucyhlZGl0b3IpO1xuICAgICAgICBzZXR1cE1lbnVJdGVtcyhlZGl0b3IpO1xuICAgICAgICBzZXR1cENvbnRleHRNZW51KGVkaXRvcik7XG4gICAgICAgIHNldHVwQ29udGV4dFRvb2xiYXJzKGVkaXRvcik7XG4gICAgICAgIHNldHVwR290b0xpbmtzKGVkaXRvcik7XG4gICAgICAgIHJlZ2lzdGVyKGVkaXRvcik7XG4gICAgICAgIHNldHVwKGVkaXRvcik7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgUGx1Z2luKCk7XG5cbn0pKCk7XG4iLCIvLyBFeHBvcnRzIHRoZSBcImxpc3RzXCIgcGx1Z2luIGZvciB1c2FnZSB3aXRoIG1vZHVsZSBsb2FkZXJzXG4vLyBVc2FnZTpcbi8vICAgQ29tbW9uSlM6XG4vLyAgICAgcmVxdWlyZSgndGlueW1jZS9wbHVnaW5zL2xpc3RzJylcbi8vICAgRVMyMDE1OlxuLy8gICAgIGltcG9ydCAndGlueW1jZS9wbHVnaW5zL2xpc3RzJ1xucmVxdWlyZSgnLi9wbHVnaW4uanMnKTsiLCIvKipcbiAqIFRpbnlNQ0UgdmVyc2lvbiA2LjcuMCAoMjAyMy0wOC0zMClcbiAqL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBnbG9iYWwkNyA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLlBsdWdpbk1hbmFnZXInKTtcblxuICAgIGNvbnN0IGhhc1Byb3RvID0gKHYsIGNvbnN0cnVjdG9yLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGlmIChwcmVkaWNhdGUodiwgY29uc3RydWN0b3IucHJvdG90eXBlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoKF9hID0gdi5jb25zdHJ1Y3RvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5hbWUpID09PSBjb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdHlwZU9mID0geCA9PiB7XG4gICAgICBjb25zdCB0ID0gdHlwZW9mIHg7XG4gICAgICBpZiAoeCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgICAgfSBlbHNlIGlmICh0ID09PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgICAgIHJldHVybiAnYXJyYXknO1xuICAgICAgfSBlbHNlIGlmICh0ID09PSAnb2JqZWN0JyAmJiBoYXNQcm90byh4LCBTdHJpbmcsIChvLCBwcm90bykgPT4gcHJvdG8uaXNQcm90b3R5cGVPZihvKSkpIHtcbiAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc1R5cGUkMSA9IHR5cGUgPT4gdmFsdWUgPT4gdHlwZU9mKHZhbHVlKSA9PT0gdHlwZTtcbiAgICBjb25zdCBpc1NpbXBsZVR5cGUgPSB0eXBlID0+IHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gdHlwZTtcbiAgICBjb25zdCBpc1N0cmluZyA9IGlzVHlwZSQxKCdzdHJpbmcnKTtcbiAgICBjb25zdCBpc09iamVjdCA9IGlzVHlwZSQxKCdvYmplY3QnKTtcbiAgICBjb25zdCBpc0FycmF5ID0gaXNUeXBlJDEoJ2FycmF5Jyk7XG4gICAgY29uc3QgaXNCb29sZWFuID0gaXNTaW1wbGVUeXBlKCdib29sZWFuJyk7XG4gICAgY29uc3QgaXNOdWxsYWJsZSA9IGEgPT4gYSA9PT0gbnVsbCB8fCBhID09PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgaXNOb25OdWxsYWJsZSA9IGEgPT4gIWlzTnVsbGFibGUoYSk7XG4gICAgY29uc3QgaXNGdW5jdGlvbiA9IGlzU2ltcGxlVHlwZSgnZnVuY3Rpb24nKTtcbiAgICBjb25zdCBpc051bWJlciA9IGlzU2ltcGxlVHlwZSgnbnVtYmVyJyk7XG5cbiAgICBjb25zdCBub29wID0gKCkgPT4ge1xuICAgIH07XG4gICAgY29uc3QgY29uc3RhbnQgPSB2YWx1ZSA9PiB7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgdHJpcGxlRXF1YWxzID0gKGEsIGIpID0+IHtcbiAgICAgIHJldHVybiBhID09PSBiO1xuICAgIH07XG4gICAgZnVuY3Rpb24gY3VycnkoZm4sIC4uLmluaXRpYWxBcmdzKSB7XG4gICAgICByZXR1cm4gKC4uLnJlc3RBcmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IGFsbCA9IGluaXRpYWxBcmdzLmNvbmNhdChyZXN0QXJncyk7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhbGwpO1xuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3Qgbm90ID0gZiA9PiB0ID0+ICFmKHQpO1xuICAgIGNvbnN0IG5ldmVyID0gY29uc3RhbnQoZmFsc2UpO1xuXG4gICAgY2xhc3MgT3B0aW9uYWwge1xuICAgICAgY29uc3RydWN0b3IodGFnLCB2YWx1ZSkge1xuICAgICAgICB0aGlzLnRhZyA9IHRhZztcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgc3RhdGljIHNvbWUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPcHRpb25hbCh0cnVlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBzdGF0aWMgbm9uZSgpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNpbmdsZXRvbk5vbmU7XG4gICAgICB9XG4gICAgICBmb2xkKG9uTm9uZSwgb25Tb21lKSB7XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgIHJldHVybiBvblNvbWUodGhpcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG9uTm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpc1NvbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZztcbiAgICAgIH1cbiAgICAgIGlzTm9uZSgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnRhZztcbiAgICAgIH1cbiAgICAgIG1hcChtYXBwZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUobWFwcGVyKHRoaXMudmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBiaW5kKGJpbmRlcikge1xuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICByZXR1cm4gYmluZGVyKHRoaXMudmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV4aXN0cyhwcmVkaWNhdGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnICYmIHByZWRpY2F0ZSh0aGlzLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZvcmFsbChwcmVkaWNhdGUpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnRhZyB8fCBwcmVkaWNhdGUodGhpcy52YWx1ZSk7XG4gICAgICB9XG4gICAgICBmaWx0ZXIocHJlZGljYXRlKSB7XG4gICAgICAgIGlmICghdGhpcy50YWcgfHwgcHJlZGljYXRlKHRoaXMudmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZ2V0T3IocmVwbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gdGhpcy52YWx1ZSA6IHJlcGxhY2VtZW50O1xuICAgICAgfVxuICAgICAgb3IocmVwbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gdGhpcyA6IHJlcGxhY2VtZW50O1xuICAgICAgfVxuICAgICAgZ2V0T3JUaHVuayh0aHVuaykge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzLnZhbHVlIDogdGh1bmsoKTtcbiAgICAgIH1cbiAgICAgIG9yVGh1bmsodGh1bmspIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gdGhpcyA6IHRodW5rKCk7XG4gICAgICB9XG4gICAgICBnZXRPckRpZShtZXNzYWdlKSB7XG4gICAgICAgIGlmICghdGhpcy50YWcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSAhPT0gbnVsbCAmJiBtZXNzYWdlICE9PSB2b2lkIDAgPyBtZXNzYWdlIDogJ0NhbGxlZCBnZXRPckRpZSBvbiBOb25lJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0YXRpYyBmcm9tKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpc05vbk51bGxhYmxlKHZhbHVlKSA/IE9wdGlvbmFsLnNvbWUodmFsdWUpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgICAgZ2V0T3JOdWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzLnZhbHVlIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIGdldE9yVW5kZWZpbmVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgIH1cbiAgICAgIGVhY2god29ya2VyKSB7XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgIHdvcmtlcih0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdG9BcnJheSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gW3RoaXMudmFsdWVdIDogW107XG4gICAgICB9XG4gICAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gYHNvbWUoJHsgdGhpcy52YWx1ZSB9KWAgOiAnbm9uZSgpJztcbiAgICAgIH1cbiAgICB9XG4gICAgT3B0aW9uYWwuc2luZ2xldG9uTm9uZSA9IG5ldyBPcHRpb25hbChmYWxzZSk7XG5cbiAgICBjb25zdCBuYXRpdmVTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbiAgICBjb25zdCBuYXRpdmVJbmRleE9mID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2Y7XG4gICAgY29uc3QgbmF0aXZlUHVzaCA9IEFycmF5LnByb3RvdHlwZS5wdXNoO1xuICAgIGNvbnN0IHJhd0luZGV4T2YgPSAodHMsIHQpID0+IG5hdGl2ZUluZGV4T2YuY2FsbCh0cywgdCk7XG4gICAgY29uc3QgY29udGFpbnMkMSA9ICh4cywgeCkgPT4gcmF3SW5kZXhPZih4cywgeCkgPiAtMTtcbiAgICBjb25zdCBleGlzdHMgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IG1hcCA9ICh4cywgZikgPT4ge1xuICAgICAgY29uc3QgbGVuID0geHMubGVuZ3RoO1xuICAgICAgY29uc3QgciA9IG5ldyBBcnJheShsZW4pO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIHJbaV0gPSBmKHgsIGkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBlYWNoJDEgPSAoeHMsIGYpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGYoeCwgaSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXIkMSA9ICh4cywgcHJlZCkgPT4ge1xuICAgICAgY29uc3QgciA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgaWYgKHByZWQoeCwgaSkpIHtcbiAgICAgICAgICByLnB1c2goeCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3QgZ3JvdXBCeSA9ICh4cywgZikgPT4ge1xuICAgICAgaWYgKHhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgd2FzVHlwZSA9IGYoeHNbMF0pO1xuICAgICAgICBjb25zdCByID0gW107XG4gICAgICAgIGxldCBncm91cCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0geHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgICAgY29uc3QgdHlwZSA9IGYoeCk7XG4gICAgICAgICAgaWYgKHR5cGUgIT09IHdhc1R5cGUpIHtcbiAgICAgICAgICAgIHIucHVzaChncm91cCk7XG4gICAgICAgICAgICBncm91cCA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3YXNUeXBlID0gdHlwZTtcbiAgICAgICAgICBncm91cC5wdXNoKHgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChncm91cC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICByLnB1c2goZ3JvdXApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZm9sZGwgPSAoeHMsIGYsIGFjYykgPT4ge1xuICAgICAgZWFjaCQxKHhzLCAoeCwgaSkgPT4ge1xuICAgICAgICBhY2MgPSBmKGFjYywgeCwgaSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kVW50aWwgPSAoeHMsIHByZWQsIHVudGlsKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0geHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgeCA9IHhzW2ldO1xuICAgICAgICBpZiAocHJlZCh4LCBpKSkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHgpO1xuICAgICAgICB9IGVsc2UgaWYgKHVudGlsKHgsIGkpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kID0gKHhzLCBwcmVkKSA9PiB7XG4gICAgICByZXR1cm4gZmluZFVudGlsKHhzLCBwcmVkLCBuZXZlcik7XG4gICAgfTtcbiAgICBjb25zdCBmbGF0dGVuID0geHMgPT4ge1xuICAgICAgY29uc3QgciA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgIGlmICghaXNBcnJheSh4c1tpXSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Fyci5mbGF0dGVuIGl0ZW0gJyArIGkgKyAnIHdhcyBub3QgYW4gYXJyYXksIGlucHV0OiAnICsgeHMpO1xuICAgICAgICB9XG4gICAgICAgIG5hdGl2ZVB1c2guYXBwbHkociwgeHNbaV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBiaW5kID0gKHhzLCBmKSA9PiBmbGF0dGVuKG1hcCh4cywgZikpO1xuICAgIGNvbnN0IHJldmVyc2UgPSB4cyA9PiB7XG4gICAgICBjb25zdCByID0gbmF0aXZlU2xpY2UuY2FsbCh4cywgMCk7XG4gICAgICByLnJldmVyc2UoKTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3QgZ2V0JDEgPSAoeHMsIGkpID0+IGkgPj0gMCAmJiBpIDwgeHMubGVuZ3RoID8gT3B0aW9uYWwuc29tZSh4c1tpXSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgY29uc3QgaGVhZCA9IHhzID0+IGdldCQxKHhzLCAwKTtcbiAgICBjb25zdCBsYXN0ID0geHMgPT4gZ2V0JDEoeHMsIHhzLmxlbmd0aCAtIDEpO1xuICAgIGNvbnN0IHVuaXF1ZSA9ICh4cywgY29tcGFyYXRvcikgPT4ge1xuICAgICAgY29uc3QgciA9IFtdO1xuICAgICAgY29uc3QgaXNEdXBsaWNhdGVkID0gaXNGdW5jdGlvbihjb21wYXJhdG9yKSA/IHggPT4gZXhpc3RzKHIsIGkgPT4gY29tcGFyYXRvcihpLCB4KSkgOiB4ID0+IGNvbnRhaW5zJDEociwgeCk7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0geHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgeCA9IHhzW2ldO1xuICAgICAgICBpZiAoIWlzRHVwbGljYXRlZCh4KSkge1xuICAgICAgICAgIHIucHVzaCh4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzJDIgPSAobGhzLCByaHMsIGNvbXBhcmF0b3IgPSB0cmlwbGVFcXVhbHMpID0+IGxocy5leGlzdHMobGVmdCA9PiBjb21wYXJhdG9yKGxlZnQsIHJocykpO1xuICAgIGNvbnN0IGVxdWFscyA9IChsaHMsIHJocywgY29tcGFyYXRvciA9IHRyaXBsZUVxdWFscykgPT4gbGlmdDIobGhzLCByaHMsIGNvbXBhcmF0b3IpLmdldE9yKGxocy5pc05vbmUoKSAmJiByaHMuaXNOb25lKCkpO1xuICAgIGNvbnN0IGxpZnQyID0gKG9hLCBvYiwgZikgPT4gb2EuaXNTb21lKCkgJiYgb2IuaXNTb21lKCkgPyBPcHRpb25hbC5zb21lKGYob2EuZ2V0T3JEaWUoKSwgb2IuZ2V0T3JEaWUoKSkpIDogT3B0aW9uYWwubm9uZSgpO1xuXG4gICAgY29uc3QgRUxFTUVOVCA9IDE7XG5cbiAgICBjb25zdCBmcm9tSHRtbCA9IChodG1sLCBzY29wZSkgPT4ge1xuICAgICAgY29uc3QgZG9jID0gc2NvcGUgfHwgZG9jdW1lbnQ7XG4gICAgICBjb25zdCBkaXYgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBkaXYuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgIGlmICghZGl2Lmhhc0NoaWxkTm9kZXMoKSB8fCBkaXYuY2hpbGROb2Rlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnSFRNTCBkb2VzIG5vdCBoYXZlIGEgc2luZ2xlIHJvb3Qgbm9kZSc7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSwgaHRtbCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmcm9tRG9tJDEoZGl2LmNoaWxkTm9kZXNbMF0pO1xuICAgIH07XG4gICAgY29uc3QgZnJvbVRhZyA9ICh0YWcsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBzY29wZSB8fCBkb2N1bWVudDtcbiAgICAgIGNvbnN0IG5vZGUgPSBkb2MuY3JlYXRlRWxlbWVudCh0YWcpO1xuICAgICAgcmV0dXJuIGZyb21Eb20kMShub2RlKTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21UZXh0ID0gKHRleHQsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBzY29wZSB8fCBkb2N1bWVudDtcbiAgICAgIGNvbnN0IG5vZGUgPSBkb2MuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG4gICAgICByZXR1cm4gZnJvbURvbSQxKG5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgZnJvbURvbSQxID0gbm9kZSA9PiB7XG4gICAgICBpZiAobm9kZSA9PT0gbnVsbCB8fCBub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb2RlIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZG9tOiBub2RlIH07XG4gICAgfTtcbiAgICBjb25zdCBmcm9tUG9pbnQgPSAoZG9jRWxtLCB4LCB5KSA9PiBPcHRpb25hbC5mcm9tKGRvY0VsbS5kb20uZWxlbWVudEZyb21Qb2ludCh4LCB5KSkubWFwKGZyb21Eb20kMSk7XG4gICAgY29uc3QgU3VnYXJFbGVtZW50ID0ge1xuICAgICAgZnJvbUh0bWwsXG4gICAgICBmcm9tVGFnLFxuICAgICAgZnJvbVRleHQsXG4gICAgICBmcm9tRG9tOiBmcm9tRG9tJDEsXG4gICAgICBmcm9tUG9pbnRcbiAgICB9O1xuXG4gICAgY29uc3QgaXMkMSA9IChlbGVtZW50LCBzZWxlY3RvcikgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBpZiAoZG9tLm5vZGVUeXBlICE9PSBFTEVNRU5UKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVsZW0gPSBkb207XG4gICAgICAgIGlmIChlbGVtLm1hdGNoZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBlbGVtLm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW0ubXNNYXRjaGVzU2VsZWN0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBlbGVtLm1zTWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZW0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtLm1vek1hdGNoZXNTZWxlY3RvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZW0ubW96TWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jyb3dzZXIgbGFja3MgbmF0aXZlIHNlbGVjdG9ycycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGVxID0gKGUxLCBlMikgPT4gZTEuZG9tID09PSBlMi5kb207XG4gICAgY29uc3QgY29udGFpbnMgPSAoZTEsIGUyKSA9PiB7XG4gICAgICBjb25zdCBkMSA9IGUxLmRvbTtcbiAgICAgIGNvbnN0IGQyID0gZTIuZG9tO1xuICAgICAgcmV0dXJuIGQxID09PSBkMiA/IGZhbHNlIDogZDEuY29udGFpbnMoZDIpO1xuICAgIH07XG4gICAgY29uc3QgaXMgPSBpcyQxO1xuXG4gICAgdmFyIENsb3Nlc3RPckFuY2VzdG9yID0gKGlzLCBhbmNlc3Rvciwgc2NvcGUsIGEsIGlzUm9vdCkgPT4ge1xuICAgICAgaWYgKGlzKHNjb3BlLCBhKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShzY29wZSk7XG4gICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24oaXNSb290KSAmJiBpc1Jvb3Qoc2NvcGUpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYW5jZXN0b3Ioc2NvcGUsIGEsIGlzUm9vdCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogRnVuY3Rpb24oJ3JldHVybiB0aGlzOycpKCk7XG5cbiAgICBjb25zdCBuYW1lID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCByID0gZWxlbWVudC5kb20ubm9kZU5hbWU7XG4gICAgICByZXR1cm4gci50b0xvd2VyQ2FzZSgpO1xuICAgIH07XG4gICAgY29uc3QgdHlwZSA9IGVsZW1lbnQgPT4gZWxlbWVudC5kb20ubm9kZVR5cGU7XG4gICAgY29uc3QgaXNUeXBlID0gdCA9PiBlbGVtZW50ID0+IHR5cGUoZWxlbWVudCkgPT09IHQ7XG4gICAgY29uc3QgaXNFbGVtZW50JDEgPSBpc1R5cGUoRUxFTUVOVCk7XG4gICAgY29uc3QgaXNUYWcgPSB0YWcgPT4gZSA9PiBpc0VsZW1lbnQkMShlKSAmJiBuYW1lKGUpID09PSB0YWc7XG5cbiAgICBjb25zdCBwYXJlbnQgPSBlbGVtZW50ID0+IE9wdGlvbmFsLmZyb20oZWxlbWVudC5kb20ucGFyZW50Tm9kZSkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gZWxlbWVudCA9PiBPcHRpb25hbC5mcm9tKGVsZW1lbnQuZG9tLnBhcmVudEVsZW1lbnQpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgY29uc3QgbmV4dFNpYmxpbmcgPSBlbGVtZW50ID0+IE9wdGlvbmFsLmZyb20oZWxlbWVudC5kb20ubmV4dFNpYmxpbmcpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBlbGVtZW50ID0+IG1hcChlbGVtZW50LmRvbS5jaGlsZE5vZGVzLCBTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgY29uc3QgY2hpbGQgPSAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGNzID0gZWxlbWVudC5kb20uY2hpbGROb2RlcztcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKGNzW2luZGV4XSkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSBlbGVtZW50ID0+IGNoaWxkKGVsZW1lbnQsIDApO1xuICAgIGNvbnN0IGxhc3RDaGlsZCA9IGVsZW1lbnQgPT4gY2hpbGQoZWxlbWVudCwgZWxlbWVudC5kb20uY2hpbGROb2Rlcy5sZW5ndGggLSAxKTtcblxuICAgIGNvbnN0IGFuY2VzdG9yJDIgPSAoc2NvcGUsIHByZWRpY2F0ZSwgaXNSb290KSA9PiB7XG4gICAgICBsZXQgZWxlbWVudCA9IHNjb3BlLmRvbTtcbiAgICAgIGNvbnN0IHN0b3AgPSBpc0Z1bmN0aW9uKGlzUm9vdCkgPyBpc1Jvb3QgOiBuZXZlcjtcbiAgICAgIHdoaWxlIChlbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgZWwgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlbGVtZW50KTtcbiAgICAgICAgaWYgKHByZWRpY2F0ZShlbCkpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShlbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RvcChlbCkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGNsb3Nlc3QgPSAoc2NvcGUsIHByZWRpY2F0ZSwgaXNSb290KSA9PiB7XG4gICAgICBjb25zdCBpcyA9IChzLCB0ZXN0KSA9PiB0ZXN0KHMpO1xuICAgICAgcmV0dXJuIENsb3Nlc3RPckFuY2VzdG9yKGlzLCBhbmNlc3RvciQyLCBzY29wZSwgcHJlZGljYXRlLCBpc1Jvb3QpO1xuICAgIH07XG5cbiAgICBjb25zdCBiZWZvcmUkMSA9IChtYXJrZXIsIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCQxID0gcGFyZW50KG1hcmtlcik7XG4gICAgICBwYXJlbnQkMS5lYWNoKHYgPT4ge1xuICAgICAgICB2LmRvbS5pbnNlcnRCZWZvcmUoZWxlbWVudC5kb20sIG1hcmtlci5kb20pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBhZnRlciA9IChtYXJrZXIsIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHNpYmxpbmcgPSBuZXh0U2libGluZyhtYXJrZXIpO1xuICAgICAgc2libGluZy5mb2xkKCgpID0+IHtcbiAgICAgICAgY29uc3QgcGFyZW50JDEgPSBwYXJlbnQobWFya2VyKTtcbiAgICAgICAgcGFyZW50JDEuZWFjaCh2ID0+IHtcbiAgICAgICAgICBhcHBlbmQkMSh2LCBlbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9LCB2ID0+IHtcbiAgICAgICAgYmVmb3JlJDEodiwgZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGVuZCQxID0gKHBhcmVudCwgZWxlbWVudCkgPT4ge1xuICAgICAgcGFyZW50LmRvbS5hcHBlbmRDaGlsZChlbGVtZW50LmRvbSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJlZm9yZSA9IChtYXJrZXIsIGVsZW1lbnRzKSA9PiB7XG4gICAgICBlYWNoJDEoZWxlbWVudHMsIHggPT4ge1xuICAgICAgICBiZWZvcmUkMShtYXJrZXIsIHgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBhcHBlbmQgPSAocGFyZW50LCBlbGVtZW50cykgPT4ge1xuICAgICAgZWFjaCQxKGVsZW1lbnRzLCB4ID0+IHtcbiAgICAgICAgYXBwZW5kJDEocGFyZW50LCB4KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBlbXB0eSA9IGVsZW1lbnQgPT4ge1xuICAgICAgZWxlbWVudC5kb20udGV4dENvbnRlbnQgPSAnJztcbiAgICAgIGVhY2gkMShjaGlsZHJlbihlbGVtZW50KSwgcm9ndWUgPT4ge1xuICAgICAgICByZW1vdmUocm9ndWUpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmUgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgaWYgKGRvbS5wYXJlbnROb2RlICE9PSBudWxsKSB7XG4gICAgICAgIGRvbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRvbSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBnbG9iYWwkNiA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLmRvbS5SYW5nZVV0aWxzJyk7XG5cbiAgICB2YXIgZ2xvYmFsJDUgPSB0aW55bWNlLnV0aWwuVG9vbHMucmVzb2x2ZSgndGlueW1jZS5kb20uVHJlZVdhbGtlcicpO1xuXG4gICAgdmFyIGdsb2JhbCQ0ID0gdGlueW1jZS51dGlsLlRvb2xzLnJlc29sdmUoJ3RpbnltY2UudXRpbC5WSycpO1xuXG4gICAgY29uc3QgZnJvbURvbSA9IG5vZGVzID0+IG1hcChub2RlcywgU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzO1xuICAgIGNvbnN0IGVhY2ggPSAob2JqLCBmKSA9PiB7XG4gICAgICBjb25zdCBwcm9wcyA9IGtleXMob2JqKTtcbiAgICAgIGZvciAobGV0IGsgPSAwLCBsZW4gPSBwcm9wcy5sZW5ndGg7IGsgPCBsZW47IGsrKykge1xuICAgICAgICBjb25zdCBpID0gcHJvcHNba107XG4gICAgICAgIGNvbnN0IHggPSBvYmpbaV07XG4gICAgICAgIGYoeCwgaSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBvYmpBY2MgPSByID0+ICh4LCBpKSA9PiB7XG4gICAgICByW2ldID0geDtcbiAgICB9O1xuICAgIGNvbnN0IGludGVybmFsRmlsdGVyID0gKG9iaiwgcHJlZCwgb25UcnVlLCBvbkZhbHNlKSA9PiB7XG4gICAgICBlYWNoKG9iaiwgKHgsIGkpID0+IHtcbiAgICAgICAgKHByZWQoeCwgaSkgPyBvblRydWUgOiBvbkZhbHNlKSh4LCBpKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZmlsdGVyID0gKG9iaiwgcHJlZCkgPT4ge1xuICAgICAgY29uc3QgdCA9IHt9O1xuICAgICAgaW50ZXJuYWxGaWx0ZXIob2JqLCBwcmVkLCBvYmpBY2ModCksIG5vb3ApO1xuICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcblxuICAgIGNvbnN0IHJhd1NldCA9IChkb20sIGtleSwgdmFsdWUpID0+IHtcbiAgICAgIGlmIChpc1N0cmluZyh2YWx1ZSkgfHwgaXNCb29sZWFuKHZhbHVlKSB8fCBpc051bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlICsgJycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBjYWxsIHRvIEF0dHJpYnV0ZS5zZXQuIEtleSAnLCBrZXksICc6OiBWYWx1ZSAnLCB2YWx1ZSwgJzo6IEVsZW1lbnQgJywgZG9tKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRyaWJ1dGUgdmFsdWUgd2FzIG5vdCBzaW1wbGUnKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldEFsbCA9IChlbGVtZW50LCBhdHRycykgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBlYWNoKGF0dHJzLCAodiwgaykgPT4ge1xuICAgICAgICByYXdTZXQoZG9tLCBrLCB2KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgY2xvbmUkMSA9IGVsZW1lbnQgPT4gZm9sZGwoZWxlbWVudC5kb20uYXR0cmlidXRlcywgKGFjYywgYXR0cikgPT4ge1xuICAgICAgYWNjW2F0dHIubmFtZV0gPSBhdHRyLnZhbHVlO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG5cbiAgICBjb25zdCBjbG9uZSA9IChvcmlnaW5hbCwgaXNEZWVwKSA9PiBTdWdhckVsZW1lbnQuZnJvbURvbShvcmlnaW5hbC5kb20uY2xvbmVOb2RlKGlzRGVlcCkpO1xuICAgIGNvbnN0IGRlZXAgPSBvcmlnaW5hbCA9PiBjbG9uZShvcmlnaW5hbCwgdHJ1ZSk7XG4gICAgY29uc3Qgc2hhbGxvd0FzID0gKG9yaWdpbmFsLCB0YWcpID0+IHtcbiAgICAgIGNvbnN0IG51ID0gU3VnYXJFbGVtZW50LmZyb21UYWcodGFnKTtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBjbG9uZSQxKG9yaWdpbmFsKTtcbiAgICAgIHNldEFsbChudSwgYXR0cmlidXRlcyk7XG4gICAgICByZXR1cm4gbnU7XG4gICAgfTtcbiAgICBjb25zdCBtdXRhdGUgPSAob3JpZ2luYWwsIHRhZykgPT4ge1xuICAgICAgY29uc3QgbnUgPSBzaGFsbG93QXMob3JpZ2luYWwsIHRhZyk7XG4gICAgICBhZnRlcihvcmlnaW5hbCwgbnUpO1xuICAgICAgY29uc3QgY2hpbGRyZW4kMSA9IGNoaWxkcmVuKG9yaWdpbmFsKTtcbiAgICAgIGFwcGVuZChudSwgY2hpbGRyZW4kMSk7XG4gICAgICByZW1vdmUob3JpZ2luYWwpO1xuICAgICAgcmV0dXJuIG51O1xuICAgIH07XG5cbiAgICB2YXIgZ2xvYmFsJDMgPSB0aW55bWNlLnV0aWwuVG9vbHMucmVzb2x2ZSgndGlueW1jZS5kb20uRE9NVXRpbHMnKTtcblxuICAgIHZhciBnbG9iYWwkMiA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLnV0aWwuVG9vbHMnKTtcblxuICAgIGNvbnN0IG1hdGNoTm9kZU5hbWUgPSBuYW1lID0+IG5vZGUgPT4gaXNOb25OdWxsYWJsZShub2RlKSAmJiBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWU7XG4gICAgY29uc3QgbWF0Y2hOb2RlTmFtZXMgPSByZWdleCA9PiBub2RlID0+IGlzTm9uTnVsbGFibGUobm9kZSkgJiYgcmVnZXgudGVzdChub2RlLm5vZGVOYW1lKTtcbiAgICBjb25zdCBpc1RleHROb2RlJDEgPSBub2RlID0+IGlzTm9uTnVsbGFibGUobm9kZSkgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMztcbiAgICBjb25zdCBpc0VsZW1lbnQgPSBub2RlID0+IGlzTm9uTnVsbGFibGUobm9kZSkgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMTtcbiAgICBjb25zdCBpc0xpc3ROb2RlID0gbWF0Y2hOb2RlTmFtZXMoL14oT0x8VUx8REwpJC8pO1xuICAgIGNvbnN0IGlzT2xVbE5vZGUgPSBtYXRjaE5vZGVOYW1lcygvXihPTHxVTCkkLyk7XG4gICAgY29uc3QgaXNPbE5vZGUgPSBtYXRjaE5vZGVOYW1lKCdvbCcpO1xuICAgIGNvbnN0IGlzTGlzdEl0ZW1Ob2RlID0gbWF0Y2hOb2RlTmFtZXMoL14oTEl8RFR8REQpJC8pO1xuICAgIGNvbnN0IGlzRGxJdGVtTm9kZSA9IG1hdGNoTm9kZU5hbWVzKC9eKERUfEREKSQvKTtcbiAgICBjb25zdCBpc1RhYmxlQ2VsbE5vZGUgPSBtYXRjaE5vZGVOYW1lcygvXihUSHxURCkkLyk7XG4gICAgY29uc3QgaXNCciA9IG1hdGNoTm9kZU5hbWUoJ2JyJyk7XG4gICAgY29uc3QgaXNGaXJzdENoaWxkID0gbm9kZSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICByZXR1cm4gKChfYSA9IG5vZGUucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZpcnN0Q2hpbGQpID09PSBub2RlO1xuICAgIH07XG4gICAgY29uc3QgaXNUZXh0QmxvY2sgPSAoZWRpdG9yLCBub2RlKSA9PiBpc05vbk51bGxhYmxlKG5vZGUpICYmIG5vZGUubm9kZU5hbWUgaW4gZWRpdG9yLnNjaGVtYS5nZXRUZXh0QmxvY2tFbGVtZW50cygpO1xuICAgIGNvbnN0IGlzQmxvY2sgPSAobm9kZSwgYmxvY2tFbGVtZW50cykgPT4gaXNOb25OdWxsYWJsZShub2RlKSAmJiBub2RlLm5vZGVOYW1lIGluIGJsb2NrRWxlbWVudHM7XG4gICAgY29uc3QgaXNWb2lkID0gKGVkaXRvciwgbm9kZSkgPT4gaXNOb25OdWxsYWJsZShub2RlKSAmJiBub2RlLm5vZGVOYW1lIGluIGVkaXRvci5zY2hlbWEuZ2V0Vm9pZEVsZW1lbnRzKCk7XG4gICAgY29uc3QgaXNCb2d1c0JyID0gKGRvbSwgbm9kZSkgPT4ge1xuICAgICAgaWYgKCFpc0JyKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkb20uaXNCbG9jayhub2RlLm5leHRTaWJsaW5nKSAmJiAhaXNCcihub2RlLnByZXZpb3VzU2libGluZyk7XG4gICAgfTtcbiAgICBjb25zdCBpc0VtcHR5JDIgPSAoZG9tLCBlbG0sIGtlZXBCb29rbWFya3MpID0+IHtcbiAgICAgIGNvbnN0IGVtcHR5ID0gZG9tLmlzRW1wdHkoZWxtKTtcbiAgICAgIGlmIChrZWVwQm9va21hcmtzICYmIGRvbS5zZWxlY3QoJ3NwYW5bZGF0YS1tY2UtdHlwZT1ib29rbWFya10nLCBlbG0pLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVtcHR5O1xuICAgIH07XG4gICAgY29uc3QgaXNDaGlsZE9mQm9keSA9IChkb20sIGVsbSkgPT4gZG9tLmlzQ2hpbGRPZihlbG0sIGRvbS5nZXRSb290KCkpO1xuXG4gICAgY29uc3Qgb3B0aW9uID0gbmFtZSA9PiBlZGl0b3IgPT4gZWRpdG9yLm9wdGlvbnMuZ2V0KG5hbWUpO1xuICAgIGNvbnN0IHJlZ2lzdGVyJDMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgcmVnaXN0ZXJPcHRpb24gPSBlZGl0b3Iub3B0aW9ucy5yZWdpc3RlcjtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdsaXN0c19pbmRlbnRfb25fdGFiJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzaG91bGRJbmRlbnRPblRhYiA9IG9wdGlvbignbGlzdHNfaW5kZW50X29uX3RhYicpO1xuICAgIGNvbnN0IGdldEZvcmNlZFJvb3RCbG9jayA9IG9wdGlvbignZm9yY2VkX3Jvb3RfYmxvY2snKTtcbiAgICBjb25zdCBnZXRGb3JjZWRSb290QmxvY2tBdHRycyA9IG9wdGlvbignZm9yY2VkX3Jvb3RfYmxvY2tfYXR0cnMnKTtcblxuICAgIGNvbnN0IGNyZWF0ZVRleHRCbG9jayA9IChlZGl0b3IsIGNvbnRlbnROb2RlKSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgY29uc3QgYmxvY2tFbGVtZW50cyA9IGVkaXRvci5zY2hlbWEuZ2V0QmxvY2tFbGVtZW50cygpO1xuICAgICAgY29uc3QgZnJhZ21lbnQgPSBkb20uY3JlYXRlRnJhZ21lbnQoKTtcbiAgICAgIGNvbnN0IGJsb2NrTmFtZSA9IGdldEZvcmNlZFJvb3RCbG9jayhlZGl0b3IpO1xuICAgICAgY29uc3QgYmxvY2tBdHRycyA9IGdldEZvcmNlZFJvb3RCbG9ja0F0dHJzKGVkaXRvcik7XG4gICAgICBsZXQgbm9kZTtcbiAgICAgIGxldCB0ZXh0QmxvY2s7XG4gICAgICBsZXQgaGFzQ29udGVudE5vZGUgPSBmYWxzZTtcbiAgICAgIHRleHRCbG9jayA9IGRvbS5jcmVhdGUoYmxvY2tOYW1lLCBibG9ja0F0dHJzKTtcbiAgICAgIGlmICghaXNCbG9jayhjb250ZW50Tm9kZS5maXJzdENoaWxkLCBibG9ja0VsZW1lbnRzKSkge1xuICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZCh0ZXh0QmxvY2spO1xuICAgICAgfVxuICAgICAgd2hpbGUgKG5vZGUgPSBjb250ZW50Tm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgIGNvbnN0IG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcbiAgICAgICAgaWYgKCFoYXNDb250ZW50Tm9kZSAmJiAobm9kZU5hbWUgIT09ICdTUEFOJyB8fCBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1tY2UtdHlwZScpICE9PSAnYm9va21hcmsnKSkge1xuICAgICAgICAgIGhhc0NvbnRlbnROb2RlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNCbG9jayhub2RlLCBibG9ja0VsZW1lbnRzKSkge1xuICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICAgIHRleHRCbG9jayA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCF0ZXh0QmxvY2spIHtcbiAgICAgICAgICAgIHRleHRCbG9jayA9IGRvbS5jcmVhdGUoYmxvY2tOYW1lLCBibG9ja0F0dHJzKTtcbiAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHRleHRCbG9jayk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRleHRCbG9jay5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFoYXNDb250ZW50Tm9kZSAmJiB0ZXh0QmxvY2spIHtcbiAgICAgICAgdGV4dEJsb2NrLmFwcGVuZENoaWxkKGRvbS5jcmVhdGUoJ2JyJywgeyAnZGF0YS1tY2UtYm9ndXMnOiAnMScgfSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZyYWdtZW50O1xuICAgIH07XG5cbiAgICBjb25zdCBET00kMiA9IGdsb2JhbCQzLkRPTTtcbiAgICBjb25zdCBzcGxpdExpc3QgPSAoZWRpdG9yLCBsaXN0LCBsaSkgPT4ge1xuICAgICAgY29uc3QgcmVtb3ZlQW5kS2VlcEJvb2ttYXJrcyA9IHRhcmdldE5vZGUgPT4ge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSB0YXJnZXROb2RlLnBhcmVudE5vZGU7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICBnbG9iYWwkMi5lYWNoKGJvb2ttYXJrcywgbm9kZSA9PiB7XG4gICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5vZGUsIGxpLnBhcmVudE5vZGUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIERPTSQyLnJlbW92ZSh0YXJnZXROb2RlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBib29rbWFya3MgPSBET00kMi5zZWxlY3QoJ3NwYW5bZGF0YS1tY2UtdHlwZT1cImJvb2ttYXJrXCJdJywgbGlzdCk7XG4gICAgICBjb25zdCBuZXdCbG9jayA9IGNyZWF0ZVRleHRCbG9jayhlZGl0b3IsIGxpKTtcbiAgICAgIGNvbnN0IHRtcFJuZyA9IERPTSQyLmNyZWF0ZVJuZygpO1xuICAgICAgdG1wUm5nLnNldFN0YXJ0QWZ0ZXIobGkpO1xuICAgICAgdG1wUm5nLnNldEVuZEFmdGVyKGxpc3QpO1xuICAgICAgY29uc3QgZnJhZ21lbnQgPSB0bXBSbmcuZXh0cmFjdENvbnRlbnRzKCk7XG4gICAgICBmb3IgKGxldCBub2RlID0gZnJhZ21lbnQuZmlyc3RDaGlsZDsgbm9kZTsgbm9kZSA9IG5vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gJ0xJJyAmJiBlZGl0b3IuZG9tLmlzRW1wdHkobm9kZSkpIHtcbiAgICAgICAgICBET00kMi5yZW1vdmUobm9kZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghZWRpdG9yLmRvbS5pc0VtcHR5KGZyYWdtZW50KSkge1xuICAgICAgICBET00kMi5pbnNlcnRBZnRlcihmcmFnbWVudCwgbGlzdCk7XG4gICAgICB9XG4gICAgICBET00kMi5pbnNlcnRBZnRlcihuZXdCbG9jaywgbGlzdCk7XG4gICAgICBjb25zdCBwYXJlbnQgPSBsaS5wYXJlbnRFbGVtZW50O1xuICAgICAgaWYgKHBhcmVudCAmJiBpc0VtcHR5JDIoZWRpdG9yLmRvbSwgcGFyZW50KSkge1xuICAgICAgICByZW1vdmVBbmRLZWVwQm9va21hcmtzKHBhcmVudCk7XG4gICAgICB9XG4gICAgICBET00kMi5yZW1vdmUobGkpO1xuICAgICAgaWYgKGlzRW1wdHkkMihlZGl0b3IuZG9tLCBsaXN0KSkge1xuICAgICAgICBET00kMi5yZW1vdmUobGlzdCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGlzRGVzY3JpcHRpb25EZXRhaWwgPSBpc1RhZygnZGQnKTtcbiAgICBjb25zdCBpc0Rlc2NyaXB0aW9uVGVybSA9IGlzVGFnKCdkdCcpO1xuICAgIGNvbnN0IG91dGRlbnREbEl0ZW0gPSAoZWRpdG9yLCBpdGVtKSA9PiB7XG4gICAgICBpZiAoaXNEZXNjcmlwdGlvbkRldGFpbChpdGVtKSkge1xuICAgICAgICBtdXRhdGUoaXRlbSwgJ2R0Jyk7XG4gICAgICB9IGVsc2UgaWYgKGlzRGVzY3JpcHRpb25UZXJtKGl0ZW0pKSB7XG4gICAgICAgIHBhcmVudEVsZW1lbnQoaXRlbSkuZWFjaChkbCA9PiBzcGxpdExpc3QoZWRpdG9yLCBkbC5kb20sIGl0ZW0uZG9tKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbmRlbnREbEl0ZW0gPSBpdGVtID0+IHtcbiAgICAgIGlmIChpc0Rlc2NyaXB0aW9uVGVybShpdGVtKSkge1xuICAgICAgICBtdXRhdGUoaXRlbSwgJ2RkJyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBkbEluZGVudGF0aW9uID0gKGVkaXRvciwgaW5kZW50YXRpb24sIGRsSXRlbXMpID0+IHtcbiAgICAgIGlmIChpbmRlbnRhdGlvbiA9PT0gJ0luZGVudCcpIHtcbiAgICAgICAgZWFjaCQxKGRsSXRlbXMsIGluZGVudERsSXRlbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlYWNoJDEoZGxJdGVtcywgaXRlbSA9PiBvdXRkZW50RGxJdGVtKGVkaXRvciwgaXRlbSkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBnZXROb3JtYWxpemVkUG9pbnQgPSAoY29udGFpbmVyLCBvZmZzZXQpID0+IHtcbiAgICAgIGlmIChpc1RleHROb2RlJDEoY29udGFpbmVyKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICBvZmZzZXRcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vZGUgPSBnbG9iYWwkNi5nZXROb2RlKGNvbnRhaW5lciwgb2Zmc2V0KTtcbiAgICAgIGlmIChpc1RleHROb2RlJDEobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250YWluZXI6IG5vZGUsXG4gICAgICAgICAgb2Zmc2V0OiBvZmZzZXQgPj0gY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoID8gbm9kZS5kYXRhLmxlbmd0aCA6IDBcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5wcmV2aW91c1NpYmxpbmcgJiYgaXNUZXh0Tm9kZSQxKG5vZGUucHJldmlvdXNTaWJsaW5nKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRhaW5lcjogbm9kZS5wcmV2aW91c1NpYmxpbmcsXG4gICAgICAgICAgb2Zmc2V0OiBub2RlLnByZXZpb3VzU2libGluZy5kYXRhLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChub2RlLm5leHRTaWJsaW5nICYmIGlzVGV4dE5vZGUkMShub2RlLm5leHRTaWJsaW5nKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRhaW5lcjogbm9kZS5uZXh0U2libGluZyxcbiAgICAgICAgICBvZmZzZXQ6IDBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgb2Zmc2V0XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplUmFuZ2UgPSBybmcgPT4ge1xuICAgICAgY29uc3Qgb3V0Um5nID0gcm5nLmNsb25lUmFuZ2UoKTtcbiAgICAgIGNvbnN0IHJhbmdlU3RhcnQgPSBnZXROb3JtYWxpemVkUG9pbnQocm5nLnN0YXJ0Q29udGFpbmVyLCBybmcuc3RhcnRPZmZzZXQpO1xuICAgICAgb3V0Um5nLnNldFN0YXJ0KHJhbmdlU3RhcnQuY29udGFpbmVyLCByYW5nZVN0YXJ0Lm9mZnNldCk7XG4gICAgICBjb25zdCByYW5nZUVuZCA9IGdldE5vcm1hbGl6ZWRQb2ludChybmcuZW5kQ29udGFpbmVyLCBybmcuZW5kT2Zmc2V0KTtcbiAgICAgIG91dFJuZy5zZXRFbmQocmFuZ2VFbmQuY29udGFpbmVyLCByYW5nZUVuZC5vZmZzZXQpO1xuICAgICAgcmV0dXJuIG91dFJuZztcbiAgICB9O1xuXG4gICAgY29uc3QgbGlzdE5hbWVzID0gW1xuICAgICAgJ09MJyxcbiAgICAgICdVTCcsXG4gICAgICAnREwnXG4gICAgXTtcbiAgICBjb25zdCBsaXN0U2VsZWN0b3IgPSBsaXN0TmFtZXMuam9pbignLCcpO1xuICAgIGNvbnN0IGdldFBhcmVudExpc3QgPSAoZWRpdG9yLCBub2RlKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IG5vZGUgfHwgZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCh0cnVlKTtcbiAgICAgIHJldHVybiBlZGl0b3IuZG9tLmdldFBhcmVudChzZWxlY3Rpb25TdGFydCwgbGlzdFNlbGVjdG9yLCBnZXRDbG9zZXN0TGlzdEhvc3QoZWRpdG9yLCBzZWxlY3Rpb25TdGFydCkpO1xuICAgIH07XG4gICAgY29uc3QgaXNQYXJlbnRMaXN0U2VsZWN0ZWQgPSAocGFyZW50TGlzdCwgc2VsZWN0ZWRCbG9ja3MpID0+IGlzTm9uTnVsbGFibGUocGFyZW50TGlzdCkgJiYgc2VsZWN0ZWRCbG9ja3MubGVuZ3RoID09PSAxICYmIHNlbGVjdGVkQmxvY2tzWzBdID09PSBwYXJlbnRMaXN0O1xuICAgIGNvbnN0IGZpbmRTdWJMaXN0cyA9IHBhcmVudExpc3QgPT4gZmlsdGVyJDEocGFyZW50TGlzdC5xdWVyeVNlbGVjdG9yQWxsKGxpc3RTZWxlY3RvciksIGlzTGlzdE5vZGUpO1xuICAgIGNvbnN0IGdldFNlbGVjdGVkU3ViTGlzdHMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgcGFyZW50TGlzdCA9IGdldFBhcmVudExpc3QoZWRpdG9yKTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkQmxvY2tzID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRTZWxlY3RlZEJsb2NrcygpO1xuICAgICAgaWYgKGlzUGFyZW50TGlzdFNlbGVjdGVkKHBhcmVudExpc3QsIHNlbGVjdGVkQmxvY2tzKSkge1xuICAgICAgICByZXR1cm4gZmluZFN1Ykxpc3RzKHBhcmVudExpc3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlciQxKHNlbGVjdGVkQmxvY2tzLCBlbG0gPT4ge1xuICAgICAgICAgIHJldHVybiBpc0xpc3ROb2RlKGVsbSkgJiYgcGFyZW50TGlzdCAhPT0gZWxtO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRQYXJlbnRMaXN0SXRlbXNOb2RlcyA9IChlZGl0b3IsIGVsbXMpID0+IHtcbiAgICAgIGNvbnN0IGxpc3RJdGVtc0VsbXMgPSBnbG9iYWwkMi5tYXAoZWxtcywgZWxtID0+IHtcbiAgICAgICAgY29uc3QgcGFyZW50TGkgPSBlZGl0b3IuZG9tLmdldFBhcmVudChlbG0sICdsaSxkZCxkdCcsIGdldENsb3Nlc3RMaXN0SG9zdChlZGl0b3IsIGVsbSkpO1xuICAgICAgICByZXR1cm4gcGFyZW50TGkgPyBwYXJlbnRMaSA6IGVsbTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHVuaXF1ZShsaXN0SXRlbXNFbG1zKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNlbGVjdGVkTGlzdEl0ZW1zID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkQmxvY2tzID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRTZWxlY3RlZEJsb2NrcygpO1xuICAgICAgcmV0dXJuIGZpbHRlciQxKGZpbmRQYXJlbnRMaXN0SXRlbXNOb2RlcyhlZGl0b3IsIHNlbGVjdGVkQmxvY2tzKSwgaXNMaXN0SXRlbU5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0U2VsZWN0ZWREbEl0ZW1zID0gZWRpdG9yID0+IGZpbHRlciQxKGdldFNlbGVjdGVkTGlzdEl0ZW1zKGVkaXRvciksIGlzRGxJdGVtTm9kZSk7XG4gICAgY29uc3QgZ2V0Q2xvc2VzdEVkaXRpbmdIb3N0ID0gKGVkaXRvciwgZWxtKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnRUYWJsZUNlbGwgPSBlZGl0b3IuZG9tLmdldFBhcmVudHMoZWxtLCAnVEQsVEgnKTtcbiAgICAgIHJldHVybiBwYXJlbnRUYWJsZUNlbGwubGVuZ3RoID4gMCA/IHBhcmVudFRhYmxlQ2VsbFswXSA6IGVkaXRvci5nZXRCb2R5KCk7XG4gICAgfTtcbiAgICBjb25zdCBpc0xpc3RIb3N0ID0gKHNjaGVtYSwgbm9kZSkgPT4gIWlzTGlzdE5vZGUobm9kZSkgJiYgIWlzTGlzdEl0ZW1Ob2RlKG5vZGUpICYmIGV4aXN0cyhsaXN0TmFtZXMsIGxpc3ROYW1lID0+IHNjaGVtYS5pc1ZhbGlkQ2hpbGQobm9kZS5ub2RlTmFtZSwgbGlzdE5hbWUpKTtcbiAgICBjb25zdCBnZXRDbG9zZXN0TGlzdEhvc3QgPSAoZWRpdG9yLCBlbG0pID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudEJsb2NrcyA9IGVkaXRvci5kb20uZ2V0UGFyZW50cyhlbG0sIGVkaXRvci5kb20uaXNCbG9jayk7XG4gICAgICBjb25zdCBwYXJlbnRCbG9jayA9IGZpbmQocGFyZW50QmxvY2tzLCBlbG0gPT4gaXNMaXN0SG9zdChlZGl0b3Iuc2NoZW1hLCBlbG0pKTtcbiAgICAgIHJldHVybiBwYXJlbnRCbG9jay5nZXRPcihlZGl0b3IuZ2V0Qm9keSgpKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRMYXN0UGFyZW50TGlzdE5vZGUgPSAoZWRpdG9yLCBlbG0pID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudExpc3RzID0gZWRpdG9yLmRvbS5nZXRQYXJlbnRzKGVsbSwgJ29sLHVsJywgZ2V0Q2xvc2VzdExpc3RIb3N0KGVkaXRvciwgZWxtKSk7XG4gICAgICByZXR1cm4gbGFzdChwYXJlbnRMaXN0cyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRTZWxlY3RlZExpc3RzID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGZpcnN0TGlzdCA9IGZpbmRMYXN0UGFyZW50TGlzdE5vZGUoZWRpdG9yLCBlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KCkpO1xuICAgICAgY29uc3Qgc3Vic2VxdWVudExpc3RzID0gZmlsdGVyJDEoZWRpdG9yLnNlbGVjdGlvbi5nZXRTZWxlY3RlZEJsb2NrcygpLCBpc09sVWxOb2RlKTtcbiAgICAgIHJldHVybiBmaXJzdExpc3QudG9BcnJheSgpLmNvbmNhdChzdWJzZXF1ZW50TGlzdHMpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0U2VsZWN0ZWRMaXN0Um9vdHMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRMaXN0cyA9IGdldFNlbGVjdGVkTGlzdHMoZWRpdG9yKTtcbiAgICAgIHJldHVybiBnZXRVbmlxdWVMaXN0Um9vdHMoZWRpdG9yLCBzZWxlY3RlZExpc3RzKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFVuaXF1ZUxpc3RSb290cyA9IChlZGl0b3IsIGxpc3RzKSA9PiB7XG4gICAgICBjb25zdCBsaXN0Um9vdHMgPSBtYXAobGlzdHMsIGxpc3QgPT4gZmluZExhc3RQYXJlbnRMaXN0Tm9kZShlZGl0b3IsIGxpc3QpLmdldE9yKGxpc3QpKTtcbiAgICAgIHJldHVybiB1bmlxdWUobGlzdFJvb3RzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNDdXN0b21MaXN0ID0gbGlzdCA9PiAvXFxidG94XFwtLy50ZXN0KGxpc3QuY2xhc3NOYW1lKTtcbiAgICBjb25zdCBpbkxpc3QgPSAocGFyZW50cywgbGlzdE5hbWUpID0+IGZpbmRVbnRpbChwYXJlbnRzLCBpc0xpc3ROb2RlLCBpc1RhYmxlQ2VsbE5vZGUpLmV4aXN0cyhsaXN0ID0+IGxpc3Qubm9kZU5hbWUgPT09IGxpc3ROYW1lICYmICFpc0N1c3RvbUxpc3QobGlzdCkpO1xuICAgIGNvbnN0IGlzV2l0aGluTm9uRWRpdGFibGUgPSAoZWRpdG9yLCBlbGVtZW50KSA9PiBlbGVtZW50ICE9PSBudWxsICYmICFlZGl0b3IuZG9tLmlzRWRpdGFibGUoZWxlbWVudCk7XG4gICAgY29uc3Qgc2VsZWN0aW9uSXNXaXRoaW5Ob25FZGl0YWJsZUxpc3QgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgcGFyZW50TGlzdCA9IGdldFBhcmVudExpc3QoZWRpdG9yKTtcbiAgICAgIHJldHVybiBpc1dpdGhpbk5vbkVkaXRhYmxlKGVkaXRvciwgcGFyZW50TGlzdCk7XG4gICAgfTtcbiAgICBjb25zdCBpc1dpdGhpbk5vbkVkaXRhYmxlTGlzdCA9IChlZGl0b3IsIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudExpc3QgPSBlZGl0b3IuZG9tLmdldFBhcmVudChlbGVtZW50LCAnb2wsdWwsZGwnKTtcbiAgICAgIHJldHVybiBpc1dpdGhpbk5vbkVkaXRhYmxlKGVkaXRvciwgcGFyZW50TGlzdCk7XG4gICAgfTtcbiAgICBjb25zdCBzZXROb2RlQ2hhbmdlSGFuZGxlciA9IChlZGl0b3IsIG5vZGVDaGFuZ2VIYW5kbGVyKSA9PiB7XG4gICAgICBjb25zdCBpbml0aWFsTm9kZSA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Tm9kZSgpO1xuICAgICAgbm9kZUNoYW5nZUhhbmRsZXIoe1xuICAgICAgICBwYXJlbnRzOiBlZGl0b3IuZG9tLmdldFBhcmVudHMoaW5pdGlhbE5vZGUpLFxuICAgICAgICBlbGVtZW50OiBpbml0aWFsTm9kZVxuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ05vZGVDaGFuZ2UnLCBub2RlQ2hhbmdlSGFuZGxlcik7XG4gICAgICByZXR1cm4gKCkgPT4gZWRpdG9yLm9mZignTm9kZUNoYW5nZScsIG5vZGVDaGFuZ2VIYW5kbGVyKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZnJvbUVsZW1lbnRzID0gKGVsZW1lbnRzLCBzY29wZSkgPT4ge1xuICAgICAgY29uc3QgZG9jID0gc2NvcGUgfHwgZG9jdW1lbnQ7XG4gICAgICBjb25zdCBmcmFnbWVudCA9IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICBlYWNoJDEoZWxlbWVudHMsIGVsZW1lbnQgPT4ge1xuICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChlbGVtZW50LmRvbSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBTdWdhckVsZW1lbnQuZnJvbURvbShmcmFnbWVudCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZpcmVMaXN0RXZlbnQgPSAoZWRpdG9yLCBhY3Rpb24sIGVsZW1lbnQpID0+IGVkaXRvci5kaXNwYXRjaCgnTGlzdE11dGF0aW9uJywge1xuICAgICAgYWN0aW9uLFxuICAgICAgZWxlbWVudFxuICAgIH0pO1xuXG4gICAgY29uc3QgYmxhbmsgPSByID0+IHMgPT4gcy5yZXBsYWNlKHIsICcnKTtcbiAgICBjb25zdCB0cmltID0gYmxhbmsoL15cXHMrfFxccyskL2cpO1xuICAgIGNvbnN0IGlzTm90RW1wdHkgPSBzID0+IHMubGVuZ3RoID4gMDtcbiAgICBjb25zdCBpc0VtcHR5JDEgPSBzID0+ICFpc05vdEVtcHR5KHMpO1xuXG4gICAgY29uc3QgaXNTdXBwb3J0ZWQgPSBkb20gPT4gZG9tLnN0eWxlICE9PSB1bmRlZmluZWQgJiYgaXNGdW5jdGlvbihkb20uc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSk7XG5cbiAgICBjb25zdCBpbnRlcm5hbFNldCA9IChkb20sIHByb3BlcnR5LCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBjYWxsIHRvIENTUy5zZXQuIFByb3BlcnR5ICcsIHByb3BlcnR5LCAnOjogVmFsdWUgJywgdmFsdWUsICc6OiBFbGVtZW50ICcsIGRvbSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ1NTIHZhbHVlIG11c3QgYmUgYSBzdHJpbmc6ICcgKyB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNTdXBwb3J0ZWQoZG9tKSkge1xuICAgICAgICBkb20uc3R5bGUuc2V0UHJvcGVydHkocHJvcGVydHksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldCA9IChlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgaW50ZXJuYWxTZXQoZG9tLCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgIH07XG5cbiAgICBjb25zdCBqb2luU2VnbWVudCA9IChwYXJlbnQsIGNoaWxkKSA9PiB7XG4gICAgICBhcHBlbmQkMShwYXJlbnQuaXRlbSwgY2hpbGQubGlzdCk7XG4gICAgfTtcbiAgICBjb25zdCBqb2luU2VnbWVudHMgPSBzZWdtZW50cyA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGpvaW5TZWdtZW50KHNlZ21lbnRzW2kgLSAxXSwgc2VnbWVudHNbaV0pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYXBwZW5kU2VnbWVudHMgPSAoaGVhZCQxLCB0YWlsKSA9PiB7XG4gICAgICBsaWZ0MihsYXN0KGhlYWQkMSksIGhlYWQodGFpbCksIGpvaW5TZWdtZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZVNlZ21lbnQgPSAoc2NvcGUsIGxpc3RUeXBlKSA9PiB7XG4gICAgICBjb25zdCBzZWdtZW50ID0ge1xuICAgICAgICBsaXN0OiBTdWdhckVsZW1lbnQuZnJvbVRhZyhsaXN0VHlwZSwgc2NvcGUpLFxuICAgICAgICBpdGVtOiBTdWdhckVsZW1lbnQuZnJvbVRhZygnbGknLCBzY29wZSlcbiAgICAgIH07XG4gICAgICBhcHBlbmQkMShzZWdtZW50Lmxpc3QsIHNlZ21lbnQuaXRlbSk7XG4gICAgICByZXR1cm4gc2VnbWVudDtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZVNlZ21lbnRzID0gKHNjb3BlLCBlbnRyeSwgc2l6ZSkgPT4ge1xuICAgICAgY29uc3Qgc2VnbWVudHMgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goY3JlYXRlU2VnbWVudChzY29wZSwgZW50cnkubGlzdFR5cGUpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZWdtZW50cztcbiAgICB9O1xuICAgIGNvbnN0IHBvcHVsYXRlU2VnbWVudHMgPSAoc2VnbWVudHMsIGVudHJ5KSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBzZXQoc2VnbWVudHNbaV0uaXRlbSwgJ2xpc3Qtc3R5bGUtdHlwZScsICdub25lJyk7XG4gICAgICB9XG4gICAgICBsYXN0KHNlZ21lbnRzKS5lYWNoKHNlZ21lbnQgPT4ge1xuICAgICAgICBzZXRBbGwoc2VnbWVudC5saXN0LCBlbnRyeS5saXN0QXR0cmlidXRlcyk7XG4gICAgICAgIHNldEFsbChzZWdtZW50Lml0ZW0sIGVudHJ5Lml0ZW1BdHRyaWJ1dGVzKTtcbiAgICAgICAgYXBwZW5kKHNlZ21lbnQuaXRlbSwgZW50cnkuY29udGVudCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZVNlZ21lbnQgPSAoc2VnbWVudCwgZW50cnkpID0+IHtcbiAgICAgIGlmIChuYW1lKHNlZ21lbnQubGlzdCkgIT09IGVudHJ5Lmxpc3RUeXBlKSB7XG4gICAgICAgIHNlZ21lbnQubGlzdCA9IG11dGF0ZShzZWdtZW50Lmxpc3QsIGVudHJ5Lmxpc3RUeXBlKTtcbiAgICAgIH1cbiAgICAgIHNldEFsbChzZWdtZW50Lmxpc3QsIGVudHJ5Lmxpc3RBdHRyaWJ1dGVzKTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUl0ZW0gPSAoc2NvcGUsIGF0dHIsIGNvbnRlbnQpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBTdWdhckVsZW1lbnQuZnJvbVRhZygnbGknLCBzY29wZSk7XG4gICAgICBzZXRBbGwoaXRlbSwgYXR0cik7XG4gICAgICBhcHBlbmQoaXRlbSwgY29udGVudCk7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGVuZEl0ZW0gPSAoc2VnbWVudCwgaXRlbSkgPT4ge1xuICAgICAgYXBwZW5kJDEoc2VnbWVudC5saXN0LCBpdGVtKTtcbiAgICAgIHNlZ21lbnQuaXRlbSA9IGl0ZW07XG4gICAgfTtcbiAgICBjb25zdCB3cml0ZVNoYWxsb3cgPSAoc2NvcGUsIGNhc3QsIGVudHJ5KSA9PiB7XG4gICAgICBjb25zdCBuZXdDYXN0ID0gY2FzdC5zbGljZSgwLCBlbnRyeS5kZXB0aCk7XG4gICAgICBsYXN0KG5ld0Nhc3QpLmVhY2goc2VnbWVudCA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBjcmVhdGVJdGVtKHNjb3BlLCBlbnRyeS5pdGVtQXR0cmlidXRlcywgZW50cnkuY29udGVudCk7XG4gICAgICAgIGFwcGVuZEl0ZW0oc2VnbWVudCwgaXRlbSk7XG4gICAgICAgIG5vcm1hbGl6ZVNlZ21lbnQoc2VnbWVudCwgZW50cnkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3Q2FzdDtcbiAgICB9O1xuICAgIGNvbnN0IHdyaXRlRGVlcCA9IChzY29wZSwgY2FzdCwgZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gY3JlYXRlU2VnbWVudHMoc2NvcGUsIGVudHJ5LCBlbnRyeS5kZXB0aCAtIGNhc3QubGVuZ3RoKTtcbiAgICAgIGpvaW5TZWdtZW50cyhzZWdtZW50cyk7XG4gICAgICBwb3B1bGF0ZVNlZ21lbnRzKHNlZ21lbnRzLCBlbnRyeSk7XG4gICAgICBhcHBlbmRTZWdtZW50cyhjYXN0LCBzZWdtZW50cyk7XG4gICAgICByZXR1cm4gY2FzdC5jb25jYXQoc2VnbWVudHMpO1xuICAgIH07XG4gICAgY29uc3QgY29tcG9zZUxpc3QgPSAoc2NvcGUsIGVudHJpZXMpID0+IHtcbiAgICAgIGNvbnN0IGNhc3QgPSBmb2xkbChlbnRyaWVzLCAoY2FzdCwgZW50cnkpID0+IHtcbiAgICAgICAgcmV0dXJuIGVudHJ5LmRlcHRoID4gY2FzdC5sZW5ndGggPyB3cml0ZURlZXAoc2NvcGUsIGNhc3QsIGVudHJ5KSA6IHdyaXRlU2hhbGxvdyhzY29wZSwgY2FzdCwgZW50cnkpO1xuICAgICAgfSwgW10pO1xuICAgICAgcmV0dXJuIGhlYWQoY2FzdCkubWFwKHNlZ21lbnQgPT4gc2VnbWVudC5saXN0KTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNMaXN0ID0gZWwgPT4gaXMoZWwsICdPTCxVTCcpO1xuICAgIGNvbnN0IGhhc0ZpcnN0Q2hpbGRMaXN0ID0gZWwgPT4gZmlyc3RDaGlsZChlbCkuZXhpc3RzKGlzTGlzdCk7XG4gICAgY29uc3QgaGFzTGFzdENoaWxkTGlzdCA9IGVsID0+IGxhc3RDaGlsZChlbCkuZXhpc3RzKGlzTGlzdCk7XG5cbiAgICBjb25zdCBpc0luZGVudGVkID0gZW50cnkgPT4gZW50cnkuZGVwdGggPiAwO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBlbnRyeSA9PiBlbnRyeS5pc1NlbGVjdGVkO1xuICAgIGNvbnN0IGNsb25lSXRlbUNvbnRlbnQgPSBsaSA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiQxID0gY2hpbGRyZW4obGkpO1xuICAgICAgY29uc3QgY29udGVudCA9IGhhc0xhc3RDaGlsZExpc3QobGkpID8gY2hpbGRyZW4kMS5zbGljZSgwLCAtMSkgOiBjaGlsZHJlbiQxO1xuICAgICAgcmV0dXJuIG1hcChjb250ZW50LCBkZWVwKTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUVudHJ5ID0gKGxpLCBkZXB0aCwgaXNTZWxlY3RlZCkgPT4gcGFyZW50KGxpKS5maWx0ZXIoaXNFbGVtZW50JDEpLm1hcChsaXN0ID0+ICh7XG4gICAgICBkZXB0aCxcbiAgICAgIGRpcnR5OiBmYWxzZSxcbiAgICAgIGlzU2VsZWN0ZWQsXG4gICAgICBjb250ZW50OiBjbG9uZUl0ZW1Db250ZW50KGxpKSxcbiAgICAgIGl0ZW1BdHRyaWJ1dGVzOiBjbG9uZSQxKGxpKSxcbiAgICAgIGxpc3RBdHRyaWJ1dGVzOiBjbG9uZSQxKGxpc3QpLFxuICAgICAgbGlzdFR5cGU6IG5hbWUobGlzdClcbiAgICB9KSk7XG5cbiAgICBjb25zdCBpbmRlbnRFbnRyeSA9IChpbmRlbnRhdGlvbiwgZW50cnkpID0+IHtcbiAgICAgIHN3aXRjaCAoaW5kZW50YXRpb24pIHtcbiAgICAgIGNhc2UgJ0luZGVudCc6XG4gICAgICAgIGVudHJ5LmRlcHRoKys7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnT3V0ZGVudCc6XG4gICAgICAgIGVudHJ5LmRlcHRoLS07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRmxhdHRlbic6XG4gICAgICAgIGVudHJ5LmRlcHRoID0gMDtcbiAgICAgIH1cbiAgICAgIGVudHJ5LmRpcnR5ID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2xvbmVMaXN0UHJvcGVydGllcyA9ICh0YXJnZXQsIHNvdXJjZSkgPT4ge1xuICAgICAgdGFyZ2V0Lmxpc3RUeXBlID0gc291cmNlLmxpc3RUeXBlO1xuICAgICAgdGFyZ2V0Lmxpc3RBdHRyaWJ1dGVzID0geyAuLi5zb3VyY2UubGlzdEF0dHJpYnV0ZXMgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNsZWFuTGlzdFByb3BlcnRpZXMgPSBlbnRyeSA9PiB7XG4gICAgICBlbnRyeS5saXN0QXR0cmlidXRlcyA9IGZpbHRlcihlbnRyeS5saXN0QXR0cmlidXRlcywgKF92YWx1ZSwga2V5KSA9PiBrZXkgIT09ICdzdGFydCcpO1xuICAgIH07XG4gICAgY29uc3QgY2xvc2VzdFNpYmxpbmdFbnRyeSA9IChlbnRyaWVzLCBzdGFydCkgPT4ge1xuICAgICAgY29uc3QgZGVwdGggPSBlbnRyaWVzW3N0YXJ0XS5kZXB0aDtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBlbnRyeSA9PiBlbnRyeS5kZXB0aCA9PT0gZGVwdGggJiYgIWVudHJ5LmRpcnR5O1xuICAgICAgY29uc3QgdW50aWwgPSBlbnRyeSA9PiBlbnRyeS5kZXB0aCA8IGRlcHRoO1xuICAgICAgcmV0dXJuIGZpbmRVbnRpbChyZXZlcnNlKGVudHJpZXMuc2xpY2UoMCwgc3RhcnQpKSwgbWF0Y2hlcywgdW50aWwpLm9yVGh1bmsoKCkgPT4gZmluZFVudGlsKGVudHJpZXMuc2xpY2Uoc3RhcnQgKyAxKSwgbWF0Y2hlcywgdW50aWwpKTtcbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZUVudHJpZXMgPSBlbnRyaWVzID0+IHtcbiAgICAgIGVhY2gkMShlbnRyaWVzLCAoZW50cnksIGkpID0+IHtcbiAgICAgICAgY2xvc2VzdFNpYmxpbmdFbnRyeShlbnRyaWVzLCBpKS5mb2xkKCgpID0+IHtcbiAgICAgICAgICBpZiAoZW50cnkuZGlydHkpIHtcbiAgICAgICAgICAgIGNsZWFuTGlzdFByb3BlcnRpZXMoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgbWF0Y2hpbmdFbnRyeSA9PiBjbG9uZUxpc3RQcm9wZXJ0aWVzKGVudHJ5LCBtYXRjaGluZ0VudHJ5KSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBlbnRyaWVzO1xuICAgIH07XG5cbiAgICBjb25zdCBDZWxsID0gaW5pdGlhbCA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBpbml0aWFsO1xuICAgICAgY29uc3QgZ2V0ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0ID0gdiA9PiB7XG4gICAgICAgIHZhbHVlID0gdjtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBnZXQsXG4gICAgICAgIHNldFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgcGFyc2VJdGVtID0gKGRlcHRoLCBpdGVtU2VsZWN0aW9uLCBzZWxlY3Rpb25TdGF0ZSwgaXRlbSkgPT4gZmlyc3RDaGlsZChpdGVtKS5maWx0ZXIoaXNMaXN0KS5mb2xkKCgpID0+IHtcbiAgICAgIGl0ZW1TZWxlY3Rpb24uZWFjaChzZWxlY3Rpb24gPT4ge1xuICAgICAgICBpZiAoZXEoc2VsZWN0aW9uLnN0YXJ0LCBpdGVtKSkge1xuICAgICAgICAgIHNlbGVjdGlvblN0YXRlLnNldCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBjdXJyZW50SXRlbUVudHJ5ID0gY3JlYXRlRW50cnkoaXRlbSwgZGVwdGgsIHNlbGVjdGlvblN0YXRlLmdldCgpKTtcbiAgICAgIGl0ZW1TZWxlY3Rpb24uZWFjaChzZWxlY3Rpb24gPT4ge1xuICAgICAgICBpZiAoZXEoc2VsZWN0aW9uLmVuZCwgaXRlbSkpIHtcbiAgICAgICAgICBzZWxlY3Rpb25TdGF0ZS5zZXQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNoaWxkTGlzdEVudHJpZXMgPSBsYXN0Q2hpbGQoaXRlbSkuZmlsdGVyKGlzTGlzdCkubWFwKGxpc3QgPT4gcGFyc2VMaXN0KGRlcHRoLCBpdGVtU2VsZWN0aW9uLCBzZWxlY3Rpb25TdGF0ZSwgbGlzdCkpLmdldE9yKFtdKTtcbiAgICAgIHJldHVybiBjdXJyZW50SXRlbUVudHJ5LnRvQXJyYXkoKS5jb25jYXQoY2hpbGRMaXN0RW50cmllcyk7XG4gICAgfSwgbGlzdCA9PiBwYXJzZUxpc3QoZGVwdGgsIGl0ZW1TZWxlY3Rpb24sIHNlbGVjdGlvblN0YXRlLCBsaXN0KSk7XG4gICAgY29uc3QgcGFyc2VMaXN0ID0gKGRlcHRoLCBpdGVtU2VsZWN0aW9uLCBzZWxlY3Rpb25TdGF0ZSwgbGlzdCkgPT4gYmluZChjaGlsZHJlbihsaXN0KSwgZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBwYXJzZXIgPSBpc0xpc3QoZWxlbWVudCkgPyBwYXJzZUxpc3QgOiBwYXJzZUl0ZW07XG4gICAgICBjb25zdCBuZXdEZXB0aCA9IGRlcHRoICsgMTtcbiAgICAgIHJldHVybiBwYXJzZXIobmV3RGVwdGgsIGl0ZW1TZWxlY3Rpb24sIHNlbGVjdGlvblN0YXRlLCBlbGVtZW50KTtcbiAgICB9KTtcbiAgICBjb25zdCBwYXJzZUxpc3RzID0gKGxpc3RzLCBpdGVtU2VsZWN0aW9uKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3Rpb25TdGF0ZSA9IENlbGwoZmFsc2UpO1xuICAgICAgY29uc3QgaW5pdGlhbERlcHRoID0gMDtcbiAgICAgIHJldHVybiBtYXAobGlzdHMsIGxpc3QgPT4gKHtcbiAgICAgICAgc291cmNlTGlzdDogbGlzdCxcbiAgICAgICAgZW50cmllczogcGFyc2VMaXN0KGluaXRpYWxEZXB0aCwgaXRlbVNlbGVjdGlvbiwgc2VsZWN0aW9uU3RhdGUsIGxpc3QpXG4gICAgICB9KSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG91dGRlbnRlZENvbXBvc2VyID0gKGVkaXRvciwgZW50cmllcykgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEVudHJpZXMgPSBub3JtYWxpemVFbnRyaWVzKGVudHJpZXMpO1xuICAgICAgcmV0dXJuIG1hcChub3JtYWxpemVkRW50cmllcywgZW50cnkgPT4ge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZnJvbUVsZW1lbnRzKGVudHJ5LmNvbnRlbnQpO1xuICAgICAgICByZXR1cm4gU3VnYXJFbGVtZW50LmZyb21Eb20oY3JlYXRlVGV4dEJsb2NrKGVkaXRvciwgY29udGVudC5kb20pKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW5kZW50ZWRDb21wb3NlciA9IChlZGl0b3IsIGVudHJpZXMpID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRFbnRyaWVzID0gbm9ybWFsaXplRW50cmllcyhlbnRyaWVzKTtcbiAgICAgIHJldHVybiBjb21wb3NlTGlzdChlZGl0b3IuY29udGVudERvY3VtZW50LCBub3JtYWxpemVkRW50cmllcykudG9BcnJheSgpO1xuICAgIH07XG4gICAgY29uc3QgY29tcG9zZUVudHJpZXMgPSAoZWRpdG9yLCBlbnRyaWVzKSA9PiBiaW5kKGdyb3VwQnkoZW50cmllcywgaXNJbmRlbnRlZCksIGVudHJpZXMgPT4ge1xuICAgICAgY29uc3QgZ3JvdXBJc0luZGVudGVkID0gaGVhZChlbnRyaWVzKS5leGlzdHMoaXNJbmRlbnRlZCk7XG4gICAgICByZXR1cm4gZ3JvdXBJc0luZGVudGVkID8gaW5kZW50ZWRDb21wb3NlcihlZGl0b3IsIGVudHJpZXMpIDogb3V0ZGVudGVkQ29tcG9zZXIoZWRpdG9yLCBlbnRyaWVzKTtcbiAgICB9KTtcbiAgICBjb25zdCBpbmRlbnRTZWxlY3RlZEVudHJpZXMgPSAoZW50cmllcywgaW5kZW50YXRpb24pID0+IHtcbiAgICAgIGVhY2gkMShmaWx0ZXIkMShlbnRyaWVzLCBpc1NlbGVjdGVkKSwgZW50cnkgPT4gaW5kZW50RW50cnkoaW5kZW50YXRpb24sIGVudHJ5KSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRJdGVtU2VsZWN0aW9uID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkTGlzdEl0ZW1zID0gbWFwKGdldFNlbGVjdGVkTGlzdEl0ZW1zKGVkaXRvciksIFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICAgIHJldHVybiBsaWZ0MihmaW5kKHNlbGVjdGVkTGlzdEl0ZW1zLCBub3QoaGFzRmlyc3RDaGlsZExpc3QpKSwgZmluZChyZXZlcnNlKHNlbGVjdGVkTGlzdEl0ZW1zKSwgbm90KGhhc0ZpcnN0Q2hpbGRMaXN0KSksIChzdGFydCwgZW5kKSA9PiAoe1xuICAgICAgICBzdGFydCxcbiAgICAgICAgZW5kXG4gICAgICB9KSk7XG4gICAgfTtcbiAgICBjb25zdCBsaXN0SW5kZW50YXRpb24gPSAoZWRpdG9yLCBsaXN0cywgaW5kZW50YXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGVudHJ5U2V0cyA9IHBhcnNlTGlzdHMobGlzdHMsIGdldEl0ZW1TZWxlY3Rpb24oZWRpdG9yKSk7XG4gICAgICBlYWNoJDEoZW50cnlTZXRzLCBlbnRyeVNldCA9PiB7XG4gICAgICAgIGluZGVudFNlbGVjdGVkRW50cmllcyhlbnRyeVNldC5lbnRyaWVzLCBpbmRlbnRhdGlvbik7XG4gICAgICAgIGNvbnN0IGNvbXBvc2VkTGlzdHMgPSBjb21wb3NlRW50cmllcyhlZGl0b3IsIGVudHJ5U2V0LmVudHJpZXMpO1xuICAgICAgICBlYWNoJDEoY29tcG9zZWRMaXN0cywgY29tcG9zZWRMaXN0ID0+IHtcbiAgICAgICAgICBmaXJlTGlzdEV2ZW50KGVkaXRvciwgaW5kZW50YXRpb24gPT09ICdJbmRlbnQnID8gJ0luZGVudExpc3QnIDogJ091dGRlbnRMaXN0JywgY29tcG9zZWRMaXN0LmRvbSk7XG4gICAgICAgIH0pO1xuICAgICAgICBiZWZvcmUoZW50cnlTZXQuc291cmNlTGlzdCwgY29tcG9zZWRMaXN0cyk7XG4gICAgICAgIHJlbW92ZShlbnRyeVNldC5zb3VyY2VMaXN0KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBzZWxlY3Rpb25JbmRlbnRhdGlvbiA9IChlZGl0b3IsIGluZGVudGF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBsaXN0cyA9IGZyb21Eb20oZ2V0U2VsZWN0ZWRMaXN0Um9vdHMoZWRpdG9yKSk7XG4gICAgICBjb25zdCBkbEl0ZW1zID0gZnJvbURvbShnZXRTZWxlY3RlZERsSXRlbXMoZWRpdG9yKSk7XG4gICAgICBsZXQgaXNIYW5kbGVkID0gZmFsc2U7XG4gICAgICBpZiAobGlzdHMubGVuZ3RoIHx8IGRsSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGJvb2ttYXJrID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRCb29rbWFyaygpO1xuICAgICAgICBsaXN0SW5kZW50YXRpb24oZWRpdG9yLCBsaXN0cywgaW5kZW50YXRpb24pO1xuICAgICAgICBkbEluZGVudGF0aW9uKGVkaXRvciwgaW5kZW50YXRpb24sIGRsSXRlbXMpO1xuICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLm1vdmVUb0Jvb2ttYXJrKGJvb2ttYXJrKTtcbiAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcobm9ybWFsaXplUmFuZ2UoZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSkpO1xuICAgICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICAgICAgaXNIYW5kbGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc0hhbmRsZWQ7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVJbmRlbnRhdGlvbiA9IChlZGl0b3IsIGluZGVudGF0aW9uKSA9PiAhc2VsZWN0aW9uSXNXaXRoaW5Ob25FZGl0YWJsZUxpc3QoZWRpdG9yKSAmJiBzZWxlY3Rpb25JbmRlbnRhdGlvbihlZGl0b3IsIGluZGVudGF0aW9uKTtcbiAgICBjb25zdCBpbmRlbnRMaXN0U2VsZWN0aW9uID0gZWRpdG9yID0+IGhhbmRsZUluZGVudGF0aW9uKGVkaXRvciwgJ0luZGVudCcpO1xuICAgIGNvbnN0IG91dGRlbnRMaXN0U2VsZWN0aW9uID0gZWRpdG9yID0+IGhhbmRsZUluZGVudGF0aW9uKGVkaXRvciwgJ091dGRlbnQnKTtcbiAgICBjb25zdCBmbGF0dGVuTGlzdFNlbGVjdGlvbiA9IGVkaXRvciA9PiBoYW5kbGVJbmRlbnRhdGlvbihlZGl0b3IsICdGbGF0dGVuJyk7XG5cbiAgICBjb25zdCB6ZXJvV2lkdGggPSAnXFx1RkVGRic7XG4gICAgY29uc3QgaXNad3NwID0gY2hhciA9PiBjaGFyID09PSB6ZXJvV2lkdGg7XG5cbiAgICBjb25zdCBhbmNlc3RvciQxID0gKHNjb3BlLCBwcmVkaWNhdGUsIGlzUm9vdCkgPT4gYW5jZXN0b3IkMihzY29wZSwgcHJlZGljYXRlLCBpc1Jvb3QpLmlzU29tZSgpO1xuXG4gICAgY29uc3QgYW5jZXN0b3IgPSAoZWxlbWVudCwgdGFyZ2V0KSA9PiBhbmNlc3RvciQxKGVsZW1lbnQsIGN1cnJ5KGVxLCB0YXJnZXQpKTtcblxuICAgIHZhciBnbG9iYWwkMSA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLmRvbS5Cb29rbWFya01hbmFnZXInKTtcblxuICAgIGNvbnN0IERPTSQxID0gZ2xvYmFsJDMuRE9NO1xuICAgIGNvbnN0IGNyZWF0ZUJvb2ttYXJrID0gcm5nID0+IHtcbiAgICAgIGNvbnN0IGJvb2ttYXJrID0ge307XG4gICAgICBjb25zdCBzZXR1cEVuZFBvaW50ID0gc3RhcnQgPT4ge1xuICAgICAgICBsZXQgY29udGFpbmVyID0gcm5nW3N0YXJ0ID8gJ3N0YXJ0Q29udGFpbmVyJyA6ICdlbmRDb250YWluZXInXTtcbiAgICAgICAgbGV0IG9mZnNldCA9IHJuZ1tzdGFydCA/ICdzdGFydE9mZnNldCcgOiAnZW5kT2Zmc2V0J107XG4gICAgICAgIGlmIChpc0VsZW1lbnQoY29udGFpbmVyKSkge1xuICAgICAgICAgIGNvbnN0IG9mZnNldE5vZGUgPSBET00kMS5jcmVhdGUoJ3NwYW4nLCB7ICdkYXRhLW1jZS10eXBlJzogJ2Jvb2ttYXJrJyB9KTtcbiAgICAgICAgICBpZiAoY29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gTWF0aC5taW4ob2Zmc2V0LCBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIGlmIChzdGFydCkge1xuICAgICAgICAgICAgICBjb250YWluZXIuaW5zZXJ0QmVmb3JlKG9mZnNldE5vZGUsIGNvbnRhaW5lci5jaGlsZE5vZGVzW29mZnNldF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgRE9NJDEuaW5zZXJ0QWZ0ZXIob2Zmc2V0Tm9kZSwgY29udGFpbmVyLmNoaWxkTm9kZXNbb2Zmc2V0XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChvZmZzZXROb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGFpbmVyID0gb2Zmc2V0Tm9kZTtcbiAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGJvb2ttYXJrW3N0YXJ0ID8gJ3N0YXJ0Q29udGFpbmVyJyA6ICdlbmRDb250YWluZXInXSA9IGNvbnRhaW5lcjtcbiAgICAgICAgYm9va21hcmtbc3RhcnQgPyAnc3RhcnRPZmZzZXQnIDogJ2VuZE9mZnNldCddID0gb2Zmc2V0O1xuICAgICAgfTtcbiAgICAgIHNldHVwRW5kUG9pbnQodHJ1ZSk7XG4gICAgICBpZiAoIXJuZy5jb2xsYXBzZWQpIHtcbiAgICAgICAgc2V0dXBFbmRQb2ludCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJvb2ttYXJrO1xuICAgIH07XG4gICAgY29uc3QgcmVzb2x2ZUJvb2ttYXJrID0gYm9va21hcmsgPT4ge1xuICAgICAgY29uc3QgcmVzdG9yZUVuZFBvaW50ID0gc3RhcnQgPT4ge1xuICAgICAgICBjb25zdCBub2RlSW5kZXggPSBjb250YWluZXIgPT4ge1xuICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICBsZXQgbm9kZSA9IChfYSA9IGNvbnRhaW5lci5wYXJlbnROb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZmlyc3RDaGlsZDtcbiAgICAgICAgICBsZXQgaWR4ID0gMDtcbiAgICAgICAgICB3aGlsZSAobm9kZSkge1xuICAgICAgICAgICAgaWYgKG5vZGUgPT09IGNvbnRhaW5lcikge1xuICAgICAgICAgICAgICByZXR1cm4gaWR4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0VsZW1lbnQobm9kZSkgfHwgbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWNlLXR5cGUnKSAhPT0gJ2Jvb2ttYXJrJykge1xuICAgICAgICAgICAgICBpZHgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH07XG4gICAgICAgIGxldCBjb250YWluZXIgPSBib29rbWFya1tzdGFydCA/ICdzdGFydENvbnRhaW5lcicgOiAnZW5kQ29udGFpbmVyJ107XG4gICAgICAgIGxldCBvZmZzZXQgPSBib29rbWFya1tzdGFydCA/ICdzdGFydE9mZnNldCcgOiAnZW5kT2Zmc2V0J107XG4gICAgICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0VsZW1lbnQoY29udGFpbmVyKSAmJiBjb250YWluZXIucGFyZW50Tm9kZSkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBjb250YWluZXI7XG4gICAgICAgICAgb2Zmc2V0ID0gbm9kZUluZGV4KGNvbnRhaW5lcik7XG4gICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICAgICAgRE9NJDEucmVtb3ZlKG5vZGUpO1xuICAgICAgICAgIGlmICghY29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKSAmJiBET00kMS5pc0Jsb2NrKGNvbnRhaW5lcikpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChET00kMS5jcmVhdGUoJ2JyJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBib29rbWFya1tzdGFydCA/ICdzdGFydENvbnRhaW5lcicgOiAnZW5kQ29udGFpbmVyJ10gPSBjb250YWluZXI7XG4gICAgICAgIGJvb2ttYXJrW3N0YXJ0ID8gJ3N0YXJ0T2Zmc2V0JyA6ICdlbmRPZmZzZXQnXSA9IG9mZnNldDtcbiAgICAgIH07XG4gICAgICByZXN0b3JlRW5kUG9pbnQodHJ1ZSk7XG4gICAgICByZXN0b3JlRW5kUG9pbnQoKTtcbiAgICAgIGNvbnN0IHJuZyA9IERPTSQxLmNyZWF0ZVJuZygpO1xuICAgICAgcm5nLnNldFN0YXJ0KGJvb2ttYXJrLnN0YXJ0Q29udGFpbmVyLCBib29rbWFyay5zdGFydE9mZnNldCk7XG4gICAgICBpZiAoYm9va21hcmsuZW5kQ29udGFpbmVyKSB7XG4gICAgICAgIHJuZy5zZXRFbmQoYm9va21hcmsuZW5kQ29udGFpbmVyLCBib29rbWFyay5lbmRPZmZzZXQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5vcm1hbGl6ZVJhbmdlKHJuZyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxpc3RUb2dnbGVBY3Rpb25Gcm9tTGlzdE5hbWUgPSBsaXN0TmFtZSA9PiB7XG4gICAgICBzd2l0Y2ggKGxpc3ROYW1lKSB7XG4gICAgICBjYXNlICdVTCc6XG4gICAgICAgIHJldHVybiAnVG9nZ2xlVWxMaXN0JztcbiAgICAgIGNhc2UgJ09MJzpcbiAgICAgICAgcmV0dXJuICdUb2dnbGVPbExpc3QnO1xuICAgICAgY2FzZSAnREwnOlxuICAgICAgICByZXR1cm4gJ1RvZ2dsZURMTGlzdCc7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHVwZGF0ZUxpc3RTdHlsZSA9IChkb20sIGVsLCBkZXRhaWwpID0+IHtcbiAgICAgIGNvbnN0IHR5cGUgPSBkZXRhaWxbJ2xpc3Qtc3R5bGUtdHlwZSddID8gZGV0YWlsWydsaXN0LXN0eWxlLXR5cGUnXSA6IG51bGw7XG4gICAgICBkb20uc2V0U3R5bGUoZWwsICdsaXN0LXN0eWxlLXR5cGUnLCB0eXBlKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldEF0dHJpYnMgPSAoZWxtLCBhdHRycykgPT4ge1xuICAgICAgZ2xvYmFsJDIuZWFjaChhdHRycywgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgZWxtLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgdXBkYXRlTGlzdEF0dHJzID0gKGRvbSwgZWwsIGRldGFpbCkgPT4ge1xuICAgICAgc2V0QXR0cmlicyhlbCwgZGV0YWlsWydsaXN0LWF0dHJpYnV0ZXMnXSk7XG4gICAgICBnbG9iYWwkMi5lYWNoKGRvbS5zZWxlY3QoJ2xpJywgZWwpLCBsaSA9PiB7XG4gICAgICAgIHNldEF0dHJpYnMobGksIGRldGFpbFsnbGlzdC1pdGVtLWF0dHJpYnV0ZXMnXSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHVwZGF0ZUxpc3RXaXRoRGV0YWlscyA9IChkb20sIGVsLCBkZXRhaWwpID0+IHtcbiAgICAgIHVwZGF0ZUxpc3RTdHlsZShkb20sIGVsLCBkZXRhaWwpO1xuICAgICAgdXBkYXRlTGlzdEF0dHJzKGRvbSwgZWwsIGRldGFpbCk7XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVTdHlsZXMgPSAoZG9tLCBlbGVtZW50LCBzdHlsZXMpID0+IHtcbiAgICAgIGdsb2JhbCQyLmVhY2goc3R5bGVzLCBzdHlsZSA9PiBkb20uc2V0U3R5bGUoZWxlbWVudCwgc3R5bGUsICcnKSk7XG4gICAgfTtcbiAgICBjb25zdCBpc0lubGluZSA9IChlZGl0b3IsIG5vZGUpID0+IGlzTm9uTnVsbGFibGUobm9kZSkgJiYgIWlzQmxvY2sobm9kZSwgZWRpdG9yLnNjaGVtYS5nZXRCbG9ja0VsZW1lbnRzKCkpO1xuICAgIGNvbnN0IGdldEVuZFBvaW50Tm9kZSA9IChlZGl0b3IsIHJuZywgc3RhcnQsIHJvb3QpID0+IHtcbiAgICAgIGxldCBjb250YWluZXIgPSBybmdbc3RhcnQgPyAnc3RhcnRDb250YWluZXInIDogJ2VuZENvbnRhaW5lciddO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gcm5nW3N0YXJ0ID8gJ3N0YXJ0T2Zmc2V0JyA6ICdlbmRPZmZzZXQnXTtcbiAgICAgIGlmIChpc0VsZW1lbnQoY29udGFpbmVyKSkge1xuICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIuY2hpbGROb2Rlc1tNYXRoLm1pbihvZmZzZXQsIGNvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCAtIDEpXSB8fCBjb250YWluZXI7XG4gICAgICB9XG4gICAgICBpZiAoIXN0YXJ0ICYmIGlzQnIoY29udGFpbmVyLm5leHRTaWJsaW5nKSkge1xuICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIubmV4dFNpYmxpbmc7XG4gICAgICB9XG4gICAgICBjb25zdCBmaW5kQmxvY2tBbmNlc3RvciA9IG5vZGUgPT4ge1xuICAgICAgICB3aGlsZSAoIWVkaXRvci5kb20uaXNCbG9jayhub2RlKSAmJiBub2RlLnBhcmVudE5vZGUgJiYgcm9vdCAhPT0gbm9kZSkge1xuICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9O1xuICAgICAgY29uc3QgZmluZEJldHRlckNvbnRhaW5lciA9IChjb250YWluZXIsIGZvcndhcmQpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCB3YWxrZXIgPSBuZXcgZ2xvYmFsJDUoY29udGFpbmVyLCBmaW5kQmxvY2tBbmNlc3Rvcihjb250YWluZXIpKTtcbiAgICAgICAgY29uc3QgZGlyID0gZm9yd2FyZCA/ICduZXh0JyA6ICdwcmV2JztcbiAgICAgICAgbGV0IG5vZGU7XG4gICAgICAgIHdoaWxlIChub2RlID0gd2Fsa2VyW2Rpcl0oKSkge1xuICAgICAgICAgIGlmICghKGlzVm9pZChlZGl0b3IsIG5vZGUpIHx8IGlzWndzcChub2RlLnRleHRDb250ZW50KSB8fCAoKF9hID0gbm9kZS50ZXh0Q29udGVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPT09IDApKSB7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH07XG4gICAgICBpZiAoc3RhcnQgJiYgaXNUZXh0Tm9kZSQxKGNvbnRhaW5lcikpIHtcbiAgICAgICAgaWYgKGlzWndzcChjb250YWluZXIudGV4dENvbnRlbnQpKSB7XG4gICAgICAgICAgY29udGFpbmVyID0gZmluZEJldHRlckNvbnRhaW5lcihjb250YWluZXIsIGZhbHNlKS5nZXRPcihjb250YWluZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChjb250YWluZXIucGFyZW50Tm9kZSAhPT0gbnVsbCAmJiBpc0lubGluZShlZGl0b3IsIGNvbnRhaW5lci5wYXJlbnROb2RlKSkge1xuICAgICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHdoaWxlIChjb250YWluZXIucHJldmlvdXNTaWJsaW5nICE9PSBudWxsICYmIChpc0lubGluZShlZGl0b3IsIGNvbnRhaW5lci5wcmV2aW91c1NpYmxpbmcpIHx8IGlzVGV4dE5vZGUkMShjb250YWluZXIucHJldmlvdXNTaWJsaW5nKSkpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXN0YXJ0ICYmIGlzVGV4dE5vZGUkMShjb250YWluZXIpKSB7XG4gICAgICAgIGlmIChpc1p3c3AoY29udGFpbmVyLnRleHRDb250ZW50KSkge1xuICAgICAgICAgIGNvbnRhaW5lciA9IGZpbmRCZXR0ZXJDb250YWluZXIoY29udGFpbmVyLCB0cnVlKS5nZXRPcihjb250YWluZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChjb250YWluZXIucGFyZW50Tm9kZSAhPT0gbnVsbCAmJiBpc0lubGluZShlZGl0b3IsIGNvbnRhaW5lci5wYXJlbnROb2RlKSkge1xuICAgICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHdoaWxlIChjb250YWluZXIubmV4dFNpYmxpbmcgIT09IG51bGwgJiYgKGlzSW5saW5lKGVkaXRvciwgY29udGFpbmVyLm5leHRTaWJsaW5nKSB8fCBpc1RleHROb2RlJDEoY29udGFpbmVyLm5leHRTaWJsaW5nKSkpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5uZXh0U2libGluZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHdoaWxlIChjb250YWluZXIucGFyZW50Tm9kZSAhPT0gcm9vdCkge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgICAgaWYgKGlzVGV4dEJsb2NrKGVkaXRvciwgY29udGFpbmVyKSkge1xuICAgICAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKC9eKFREfFRIKSQvLnRlc3QocGFyZW50Lm5vZGVOYW1lKSkge1xuICAgICAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgY29udGFpbmVyID0gcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNlbGVjdGVkVGV4dEJsb2NrcyA9IChlZGl0b3IsIHJuZywgcm9vdCkgPT4ge1xuICAgICAgY29uc3QgdGV4dEJsb2NrcyA9IFtdO1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IHN0YXJ0Tm9kZSA9IGdldEVuZFBvaW50Tm9kZShlZGl0b3IsIHJuZywgdHJ1ZSwgcm9vdCk7XG4gICAgICBjb25zdCBlbmROb2RlID0gZ2V0RW5kUG9pbnROb2RlKGVkaXRvciwgcm5nLCBmYWxzZSwgcm9vdCk7XG4gICAgICBsZXQgYmxvY2s7XG4gICAgICBjb25zdCBzaWJsaW5ncyA9IFtdO1xuICAgICAgZm9yIChsZXQgbm9kZSA9IHN0YXJ0Tm9kZTsgbm9kZTsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgc2libGluZ3MucHVzaChub2RlKTtcbiAgICAgICAgaWYgKG5vZGUgPT09IGVuZE5vZGUpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZ2xvYmFsJDIuZWFjaChzaWJsaW5ncywgbm9kZSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGlzVGV4dEJsb2NrKGVkaXRvciwgbm9kZSkpIHtcbiAgICAgICAgICB0ZXh0QmxvY2tzLnB1c2gobm9kZSk7XG4gICAgICAgICAgYmxvY2sgPSBudWxsO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9tLmlzQmxvY2sobm9kZSkgfHwgaXNCcihub2RlKSkge1xuICAgICAgICAgIGlmIChpc0JyKG5vZGUpKSB7XG4gICAgICAgICAgICBkb20ucmVtb3ZlKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBibG9jayA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5leHRTaWJsaW5nID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgICAgaWYgKGdsb2JhbCQxLmlzQm9va21hcmtOb2RlKG5vZGUpKSB7XG4gICAgICAgICAgaWYgKGlzTGlzdE5vZGUobmV4dFNpYmxpbmcpIHx8IGlzVGV4dEJsb2NrKGVkaXRvciwgbmV4dFNpYmxpbmcpIHx8ICFuZXh0U2libGluZyAmJiBub2RlLnBhcmVudE5vZGUgPT09IHJvb3QpIHtcbiAgICAgICAgICAgIGJsb2NrID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgIGJsb2NrID0gZG9tLmNyZWF0ZSgncCcpO1xuICAgICAgICAgIChfYSA9IG5vZGUucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmluc2VydEJlZm9yZShibG9jaywgbm9kZSk7XG4gICAgICAgICAgdGV4dEJsb2Nrcy5wdXNoKGJsb2NrKTtcbiAgICAgICAgfVxuICAgICAgICBibG9jay5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRleHRCbG9ja3M7XG4gICAgfTtcbiAgICBjb25zdCBoYXNDb21wYXRpYmxlU3R5bGUgPSAoZG9tLCBzaWIsIGRldGFpbCkgPT4ge1xuICAgICAgY29uc3Qgc2liU3R5bGUgPSBkb20uZ2V0U3R5bGUoc2liLCAnbGlzdC1zdHlsZS10eXBlJyk7XG4gICAgICBsZXQgZGV0YWlsU3R5bGUgPSBkZXRhaWwgPyBkZXRhaWxbJ2xpc3Qtc3R5bGUtdHlwZSddIDogJyc7XG4gICAgICBkZXRhaWxTdHlsZSA9IGRldGFpbFN0eWxlID09PSBudWxsID8gJycgOiBkZXRhaWxTdHlsZTtcbiAgICAgIHJldHVybiBzaWJTdHlsZSA9PT0gZGV0YWlsU3R5bGU7XG4gICAgfTtcbiAgICBjb25zdCBnZXRSb290U2VhcmNoU3RhcnQgPSAoZWRpdG9yLCByYW5nZSkgPT4ge1xuICAgICAgY29uc3Qgc3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KHRydWUpO1xuICAgICAgY29uc3Qgc3RhcnRQb2ludCA9IGdldEVuZFBvaW50Tm9kZShlZGl0b3IsIHJhbmdlLCB0cnVlLCBlZGl0b3IuZ2V0Qm9keSgpKTtcbiAgICAgIGlmIChhbmNlc3RvcihTdWdhckVsZW1lbnQuZnJvbURvbShzdGFydFBvaW50KSwgU3VnYXJFbGVtZW50LmZyb21Eb20ocmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIpKSkge1xuICAgICAgICByZXR1cm4gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc3RhcnQ7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhcHBseUxpc3QgPSAoZWRpdG9yLCBsaXN0TmFtZSwgZGV0YWlsKSA9PiB7XG4gICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgbGV0IGxpc3RJdGVtTmFtZSA9ICdMSSc7XG4gICAgICBjb25zdCByb290ID0gZ2V0Q2xvc2VzdExpc3RIb3N0KGVkaXRvciwgZ2V0Um9vdFNlYXJjaFN0YXJ0KGVkaXRvciwgcm5nKSk7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgaWYgKGRvbS5nZXRDb250ZW50RWRpdGFibGUoZWRpdG9yLnNlbGVjdGlvbi5nZXROb2RlKCkpID09PSAnZmFsc2UnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxpc3ROYW1lID0gbGlzdE5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgIGlmIChsaXN0TmFtZSA9PT0gJ0RMJykge1xuICAgICAgICBsaXN0SXRlbU5hbWUgPSAnRFQnO1xuICAgICAgfVxuICAgICAgY29uc3QgYm9va21hcmsgPSBjcmVhdGVCb29rbWFyayhybmcpO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRUZXh0QmxvY2tzID0gZmlsdGVyJDEoZ2V0U2VsZWN0ZWRUZXh0QmxvY2tzKGVkaXRvciwgcm5nLCByb290KSwgZWRpdG9yLmRvbS5pc0VkaXRhYmxlKTtcbiAgICAgIGdsb2JhbCQyLmVhY2goc2VsZWN0ZWRUZXh0QmxvY2tzLCBibG9jayA9PiB7XG4gICAgICAgIGxldCBsaXN0QmxvY2s7XG4gICAgICAgIGNvbnN0IHNpYmxpbmcgPSBibG9jay5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGJsb2NrLnBhcmVudE5vZGU7XG4gICAgICAgIGlmICghaXNMaXN0SXRlbU5vZGUocGFyZW50KSkge1xuICAgICAgICAgIGlmIChzaWJsaW5nICYmIGlzTGlzdE5vZGUoc2libGluZykgJiYgc2libGluZy5ub2RlTmFtZSA9PT0gbGlzdE5hbWUgJiYgaGFzQ29tcGF0aWJsZVN0eWxlKGRvbSwgc2libGluZywgZGV0YWlsKSkge1xuICAgICAgICAgICAgbGlzdEJsb2NrID0gc2libGluZztcbiAgICAgICAgICAgIGJsb2NrID0gZG9tLnJlbmFtZShibG9jaywgbGlzdEl0ZW1OYW1lKTtcbiAgICAgICAgICAgIHNpYmxpbmcuYXBwZW5kQ2hpbGQoYmxvY2spO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaXN0QmxvY2sgPSBkb20uY3JlYXRlKGxpc3ROYW1lKTtcbiAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUobGlzdEJsb2NrLCBibG9jayk7XG4gICAgICAgICAgICBsaXN0QmxvY2suYXBwZW5kQ2hpbGQoYmxvY2spO1xuICAgICAgICAgICAgYmxvY2sgPSBkb20ucmVuYW1lKGJsb2NrLCBsaXN0SXRlbU5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZW1vdmVTdHlsZXMoZG9tLCBibG9jaywgW1xuICAgICAgICAgICAgJ21hcmdpbicsXG4gICAgICAgICAgICAnbWFyZ2luLXJpZ2h0JyxcbiAgICAgICAgICAgICdtYXJnaW4tYm90dG9tJyxcbiAgICAgICAgICAgICdtYXJnaW4tbGVmdCcsXG4gICAgICAgICAgICAnbWFyZ2luLXRvcCcsXG4gICAgICAgICAgICAncGFkZGluZycsXG4gICAgICAgICAgICAncGFkZGluZy1yaWdodCcsXG4gICAgICAgICAgICAncGFkZGluZy1ib3R0b20nLFxuICAgICAgICAgICAgJ3BhZGRpbmctbGVmdCcsXG4gICAgICAgICAgICAncGFkZGluZy10b3AnXG4gICAgICAgICAgXSk7XG4gICAgICAgICAgdXBkYXRlTGlzdFdpdGhEZXRhaWxzKGRvbSwgbGlzdEJsb2NrLCBkZXRhaWwpO1xuICAgICAgICAgIG1lcmdlV2l0aEFkamFjZW50TGlzdHMoZWRpdG9yLmRvbSwgbGlzdEJsb2NrKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhyZXNvbHZlQm9va21hcmsoYm9va21hcmspKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzVmFsaWRMaXN0cyA9IChsaXN0MSwgbGlzdDIpID0+IHtcbiAgICAgIHJldHVybiBpc0xpc3ROb2RlKGxpc3QxKSAmJiBsaXN0MS5ub2RlTmFtZSA9PT0gKGxpc3QyID09PSBudWxsIHx8IGxpc3QyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsaXN0Mi5ub2RlTmFtZSk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNTYW1lTGlzdFN0eWxlID0gKGRvbSwgbGlzdDEsIGxpc3QyKSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXRTdHlsZSA9IGRvbS5nZXRTdHlsZShsaXN0MSwgJ2xpc3Qtc3R5bGUtdHlwZScsIHRydWUpO1xuICAgICAgY29uc3Qgc3R5bGUgPSBkb20uZ2V0U3R5bGUobGlzdDIsICdsaXN0LXN0eWxlLXR5cGUnLCB0cnVlKTtcbiAgICAgIHJldHVybiB0YXJnZXRTdHlsZSA9PT0gc3R5bGU7XG4gICAgfTtcbiAgICBjb25zdCBoYXNTYW1lQ2xhc3NlcyA9IChlbG0xLCBlbG0yKSA9PiB7XG4gICAgICByZXR1cm4gZWxtMS5jbGFzc05hbWUgPT09IGVsbTIuY2xhc3NOYW1lO1xuICAgIH07XG4gICAgY29uc3Qgc2hvdWxkTWVyZ2UgPSAoZG9tLCBsaXN0MSwgbGlzdDIpID0+IHtcbiAgICAgIHJldHVybiBpc1ZhbGlkTGlzdHMobGlzdDEsIGxpc3QyKSAmJiBoYXNTYW1lTGlzdFN0eWxlKGRvbSwgbGlzdDEsIGxpc3QyKSAmJiBoYXNTYW1lQ2xhc3NlcyhsaXN0MSwgbGlzdDIpO1xuICAgIH07XG4gICAgY29uc3QgbWVyZ2VXaXRoQWRqYWNlbnRMaXN0cyA9IChkb20sIGxpc3RCbG9jaykgPT4ge1xuICAgICAgbGV0IG5vZGU7XG4gICAgICBsZXQgc2libGluZyA9IGxpc3RCbG9jay5uZXh0U2libGluZztcbiAgICAgIGlmIChzaG91bGRNZXJnZShkb20sIGxpc3RCbG9jaywgc2libGluZykpIHtcbiAgICAgICAgY29uc3QgbGlTaWJsaW5nID0gc2libGluZztcbiAgICAgICAgd2hpbGUgKG5vZGUgPSBsaVNpYmxpbmcuZmlyc3RDaGlsZCkge1xuICAgICAgICAgIGxpc3RCbG9jay5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBkb20ucmVtb3ZlKGxpU2libGluZyk7XG4gICAgICB9XG4gICAgICBzaWJsaW5nID0gbGlzdEJsb2NrLnByZXZpb3VzU2libGluZztcbiAgICAgIGlmIChzaG91bGRNZXJnZShkb20sIGxpc3RCbG9jaywgc2libGluZykpIHtcbiAgICAgICAgY29uc3QgbGlTaWJsaW5nID0gc2libGluZztcbiAgICAgICAgd2hpbGUgKG5vZGUgPSBsaVNpYmxpbmcubGFzdENoaWxkKSB7XG4gICAgICAgICAgbGlzdEJsb2NrLmluc2VydEJlZm9yZShub2RlLCBsaXN0QmxvY2suZmlyc3RDaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgZG9tLnJlbW92ZShsaVNpYmxpbmcpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdXBkYXRlTGlzdCQxID0gKGVkaXRvciwgbGlzdCwgbGlzdE5hbWUsIGRldGFpbCkgPT4ge1xuICAgICAgaWYgKGxpc3Qubm9kZU5hbWUgIT09IGxpc3ROYW1lKSB7XG4gICAgICAgIGNvbnN0IG5ld0xpc3QgPSBlZGl0b3IuZG9tLnJlbmFtZShsaXN0LCBsaXN0TmFtZSk7XG4gICAgICAgIHVwZGF0ZUxpc3RXaXRoRGV0YWlscyhlZGl0b3IuZG9tLCBuZXdMaXN0LCBkZXRhaWwpO1xuICAgICAgICBmaXJlTGlzdEV2ZW50KGVkaXRvciwgbGlzdFRvZ2dsZUFjdGlvbkZyb21MaXN0TmFtZShsaXN0TmFtZSksIG5ld0xpc3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXBkYXRlTGlzdFdpdGhEZXRhaWxzKGVkaXRvci5kb20sIGxpc3QsIGRldGFpbCk7XG4gICAgICAgIGZpcmVMaXN0RXZlbnQoZWRpdG9yLCBsaXN0VG9nZ2xlQWN0aW9uRnJvbUxpc3ROYW1lKGxpc3ROYW1lKSwgbGlzdCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVDdXN0b21MaXN0ID0gKGVkaXRvciwgbGlzdCwgbGlzdE5hbWUsIGRldGFpbCkgPT4ge1xuICAgICAgbGlzdC5jbGFzc0xpc3QuZm9yRWFjaCgoY2xzLCBfLCBjbGFzc0xpc3QpID0+IHtcbiAgICAgICAgaWYgKGNscy5zdGFydHNXaXRoKCd0b3gtJykpIHtcbiAgICAgICAgICBjbGFzc0xpc3QucmVtb3ZlKGNscyk7XG4gICAgICAgICAgaWYgKGNsYXNzTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGxpc3QucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAobGlzdC5ub2RlTmFtZSAhPT0gbGlzdE5hbWUpIHtcbiAgICAgICAgY29uc3QgbmV3TGlzdCA9IGVkaXRvci5kb20ucmVuYW1lKGxpc3QsIGxpc3ROYW1lKTtcbiAgICAgICAgdXBkYXRlTGlzdFdpdGhEZXRhaWxzKGVkaXRvci5kb20sIG5ld0xpc3QsIGRldGFpbCk7XG4gICAgICAgIGZpcmVMaXN0RXZlbnQoZWRpdG9yLCBsaXN0VG9nZ2xlQWN0aW9uRnJvbUxpc3ROYW1lKGxpc3ROYW1lKSwgbmV3TGlzdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cGRhdGVMaXN0V2l0aERldGFpbHMoZWRpdG9yLmRvbSwgbGlzdCwgZGV0YWlsKTtcbiAgICAgICAgZmlyZUxpc3RFdmVudChlZGl0b3IsIGxpc3RUb2dnbGVBY3Rpb25Gcm9tTGlzdE5hbWUobGlzdE5hbWUpLCBsaXN0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHRvZ2dsZU11bHRpcGxlTGlzdHMgPSAoZWRpdG9yLCBwYXJlbnRMaXN0LCBsaXN0cywgbGlzdE5hbWUsIGRldGFpbCkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50SXNMaXN0ID0gaXNMaXN0Tm9kZShwYXJlbnRMaXN0KTtcbiAgICAgIGlmIChwYXJlbnRJc0xpc3QgJiYgcGFyZW50TGlzdC5ub2RlTmFtZSA9PT0gbGlzdE5hbWUgJiYgIWhhc0xpc3RTdHlsZURldGFpbChkZXRhaWwpICYmICFpc0N1c3RvbUxpc3QocGFyZW50TGlzdCkpIHtcbiAgICAgICAgZmxhdHRlbkxpc3RTZWxlY3Rpb24oZWRpdG9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFwcGx5TGlzdChlZGl0b3IsIGxpc3ROYW1lLCBkZXRhaWwpO1xuICAgICAgICBjb25zdCBib29rbWFyayA9IGNyZWF0ZUJvb2ttYXJrKGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpO1xuICAgICAgICBjb25zdCBhbGxMaXN0cyA9IHBhcmVudElzTGlzdCA/IFtcbiAgICAgICAgICBwYXJlbnRMaXN0LFxuICAgICAgICAgIC4uLmxpc3RzXG4gICAgICAgIF0gOiBsaXN0cztcbiAgICAgICAgY29uc3QgdXBkYXRlRnVuY3Rpb24gPSBwYXJlbnRJc0xpc3QgJiYgaXNDdXN0b21MaXN0KHBhcmVudExpc3QpID8gdXBkYXRlQ3VzdG9tTGlzdCA6IHVwZGF0ZUxpc3QkMTtcbiAgICAgICAgZ2xvYmFsJDIuZWFjaChhbGxMaXN0cywgZWxtID0+IHtcbiAgICAgICAgICB1cGRhdGVGdW5jdGlvbihlZGl0b3IsIGVsbSwgbGlzdE5hbWUsIGRldGFpbCk7XG4gICAgICAgIH0pO1xuICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhyZXNvbHZlQm9va21hcmsoYm9va21hcmspKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGhhc0xpc3RTdHlsZURldGFpbCA9IGRldGFpbCA9PiB7XG4gICAgICByZXR1cm4gJ2xpc3Qtc3R5bGUtdHlwZScgaW4gZGV0YWlsO1xuICAgIH07XG4gICAgY29uc3QgdG9nZ2xlU2luZ2xlTGlzdCA9IChlZGl0b3IsIHBhcmVudExpc3QsIGxpc3ROYW1lLCBkZXRhaWwpID0+IHtcbiAgICAgIGlmIChwYXJlbnRMaXN0ID09PSBlZGl0b3IuZ2V0Qm9keSgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJlbnRMaXN0KSB7XG4gICAgICAgIGlmIChwYXJlbnRMaXN0Lm5vZGVOYW1lID09PSBsaXN0TmFtZSAmJiAhaGFzTGlzdFN0eWxlRGV0YWlsKGRldGFpbCkgJiYgIWlzQ3VzdG9tTGlzdChwYXJlbnRMaXN0KSkge1xuICAgICAgICAgIGZsYXR0ZW5MaXN0U2VsZWN0aW9uKGVkaXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgYm9va21hcmsgPSBjcmVhdGVCb29rbWFyayhlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKTtcbiAgICAgICAgICBpZiAoaXNDdXN0b21MaXN0KHBhcmVudExpc3QpKSB7XG4gICAgICAgICAgICBwYXJlbnRMaXN0LmNsYXNzTGlzdC5mb3JFYWNoKChjbHMsIF8sIGNsYXNzTGlzdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoY2xzLnN0YXJ0c1dpdGgoJ3RveC0nKSkge1xuICAgICAgICAgICAgICAgIGNsYXNzTGlzdC5yZW1vdmUoY2xzKTtcbiAgICAgICAgICAgICAgICBpZiAoY2xhc3NMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgcGFyZW50TGlzdC5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdXBkYXRlTGlzdFdpdGhEZXRhaWxzKGVkaXRvci5kb20sIHBhcmVudExpc3QsIGRldGFpbCk7XG4gICAgICAgICAgY29uc3QgbmV3TGlzdCA9IGVkaXRvci5kb20ucmVuYW1lKHBhcmVudExpc3QsIGxpc3ROYW1lKTtcbiAgICAgICAgICBtZXJnZVdpdGhBZGphY2VudExpc3RzKGVkaXRvci5kb20sIG5ld0xpc3QpO1xuICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJlc29sdmVCb29rbWFyayhib29rbWFyaykpO1xuICAgICAgICAgIGFwcGx5TGlzdChlZGl0b3IsIGxpc3ROYW1lLCBkZXRhaWwpO1xuICAgICAgICAgIGZpcmVMaXN0RXZlbnQoZWRpdG9yLCBsaXN0VG9nZ2xlQWN0aW9uRnJvbUxpc3ROYW1lKGxpc3ROYW1lKSwgbmV3TGlzdCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFwcGx5TGlzdChlZGl0b3IsIGxpc3ROYW1lLCBkZXRhaWwpO1xuICAgICAgICBmaXJlTGlzdEV2ZW50KGVkaXRvciwgbGlzdFRvZ2dsZUFjdGlvbkZyb21MaXN0TmFtZShsaXN0TmFtZSksIHBhcmVudExpc3QpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdG9nZ2xlTGlzdCA9IChlZGl0b3IsIGxpc3ROYW1lLCBfZGV0YWlsKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnRMaXN0ID0gZ2V0UGFyZW50TGlzdChlZGl0b3IpO1xuICAgICAgaWYgKGlzV2l0aGluTm9uRWRpdGFibGVMaXN0KGVkaXRvciwgcGFyZW50TGlzdCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VsZWN0ZWRTdWJMaXN0cyA9IGdldFNlbGVjdGVkU3ViTGlzdHMoZWRpdG9yKTtcbiAgICAgIGNvbnN0IGRldGFpbCA9IGlzT2JqZWN0KF9kZXRhaWwpID8gX2RldGFpbCA6IHt9O1xuICAgICAgaWYgKHNlbGVjdGVkU3ViTGlzdHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0b2dnbGVNdWx0aXBsZUxpc3RzKGVkaXRvciwgcGFyZW50TGlzdCwgc2VsZWN0ZWRTdWJMaXN0cywgbGlzdE5hbWUsIGRldGFpbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b2dnbGVTaW5nbGVMaXN0KGVkaXRvciwgcGFyZW50TGlzdCwgbGlzdE5hbWUsIGRldGFpbCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IERPTSA9IGdsb2JhbCQzLkRPTTtcbiAgICBjb25zdCBub3JtYWxpemVMaXN0ID0gKGRvbSwgbGlzdCkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IGxpc3QucGFyZW50RWxlbWVudDtcbiAgICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUubm9kZU5hbWUgPT09ICdMSScgJiYgcGFyZW50Tm9kZS5maXJzdENoaWxkID09PSBsaXN0KSB7XG4gICAgICAgIGNvbnN0IHNpYmxpbmcgPSBwYXJlbnROb2RlLnByZXZpb3VzU2libGluZztcbiAgICAgICAgaWYgKHNpYmxpbmcgJiYgc2libGluZy5ub2RlTmFtZSA9PT0gJ0xJJykge1xuICAgICAgICAgIHNpYmxpbmcuYXBwZW5kQ2hpbGQobGlzdCk7XG4gICAgICAgICAgaWYgKGlzRW1wdHkkMihkb20sIHBhcmVudE5vZGUpKSB7XG4gICAgICAgICAgICBET00ucmVtb3ZlKHBhcmVudE5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBET00uc2V0U3R5bGUocGFyZW50Tm9kZSwgJ2xpc3RTdHlsZVR5cGUnLCAnbm9uZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNMaXN0Tm9kZShwYXJlbnROb2RlKSkge1xuICAgICAgICBjb25zdCBzaWJsaW5nID0gcGFyZW50Tm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgIGlmIChzaWJsaW5nICYmIHNpYmxpbmcubm9kZU5hbWUgPT09ICdMSScpIHtcbiAgICAgICAgICBzaWJsaW5nLmFwcGVuZENoaWxkKGxpc3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBub3JtYWxpemVMaXN0cyA9IChkb20sIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGxpc3RzID0gZ2xvYmFsJDIuZ3JlcChkb20uc2VsZWN0KCdvbCx1bCcsIGVsZW1lbnQpKTtcbiAgICAgIGdsb2JhbCQyLmVhY2gobGlzdHMsIGxpc3QgPT4ge1xuICAgICAgICBub3JtYWxpemVMaXN0KGRvbSwgbGlzdCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmluZE5leHRDYXJldENvbnRhaW5lciA9IChlZGl0b3IsIHJuZywgaXNGb3J3YXJkLCByb290KSA9PiB7XG4gICAgICBsZXQgbm9kZSA9IHJuZy5zdGFydENvbnRhaW5lcjtcbiAgICAgIGNvbnN0IG9mZnNldCA9IHJuZy5zdGFydE9mZnNldDtcbiAgICAgIGlmIChpc1RleHROb2RlJDEobm9kZSkgJiYgKGlzRm9yd2FyZCA/IG9mZnNldCA8IG5vZGUuZGF0YS5sZW5ndGggOiBvZmZzZXQgPiAwKSkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vbkVtcHR5QmxvY2tzID0gZWRpdG9yLnNjaGVtYS5nZXROb25FbXB0eUVsZW1lbnRzKCk7XG4gICAgICBpZiAoaXNFbGVtZW50KG5vZGUpKSB7XG4gICAgICAgIG5vZGUgPSBnbG9iYWwkNi5nZXROb2RlKG5vZGUsIG9mZnNldCk7XG4gICAgICB9XG4gICAgICBjb25zdCB3YWxrZXIgPSBuZXcgZ2xvYmFsJDUobm9kZSwgcm9vdCk7XG4gICAgICBpZiAoaXNGb3J3YXJkKSB7XG4gICAgICAgIGlmIChpc0JvZ3VzQnIoZWRpdG9yLmRvbSwgbm9kZSkpIHtcbiAgICAgICAgICB3YWxrZXIubmV4dCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB3YWxrRm4gPSBpc0ZvcndhcmQgPyB3YWxrZXIubmV4dC5iaW5kKHdhbGtlcikgOiB3YWxrZXIucHJldjIuYmluZCh3YWxrZXIpO1xuICAgICAgd2hpbGUgKG5vZGUgPSB3YWxrRm4oKSkge1xuICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gJ0xJJyAmJiAhbm9kZS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9uRW1wdHlCbG9ja3Nbbm9kZS5ub2RlTmFtZV0pIHtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNUZXh0Tm9kZSQxKG5vZGUpICYmIG5vZGUuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgY29uc3QgaGFzT25seU9uZUJsb2NrQ2hpbGQgPSAoZG9tLCBlbG0pID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBlbG0uY2hpbGROb2RlcztcbiAgICAgIHJldHVybiBjaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSAmJiAhaXNMaXN0Tm9kZShjaGlsZE5vZGVzWzBdKSAmJiBkb20uaXNCbG9jayhjaGlsZE5vZGVzWzBdKTtcbiAgICB9O1xuICAgIGNvbnN0IHVud3JhcFNpbmdsZUJsb2NrQ2hpbGQgPSAoZG9tLCBlbG0pID0+IHtcbiAgICAgIGlmIChoYXNPbmx5T25lQmxvY2tDaGlsZChkb20sIGVsbSkpIHtcbiAgICAgICAgZG9tLnJlbW92ZShlbG0uZmlyc3RDaGlsZCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBtb3ZlQ2hpbGRyZW4gPSAoZG9tLCBmcm9tRWxtLCB0b0VsbSkgPT4ge1xuICAgICAgbGV0IG5vZGU7XG4gICAgICBjb25zdCB0YXJnZXRFbG0gPSBoYXNPbmx5T25lQmxvY2tDaGlsZChkb20sIHRvRWxtKSA/IHRvRWxtLmZpcnN0Q2hpbGQgOiB0b0VsbTtcbiAgICAgIHVud3JhcFNpbmdsZUJsb2NrQ2hpbGQoZG9tLCBmcm9tRWxtKTtcbiAgICAgIGlmICghaXNFbXB0eSQyKGRvbSwgZnJvbUVsbSwgdHJ1ZSkpIHtcbiAgICAgICAgd2hpbGUgKG5vZGUgPSBmcm9tRWxtLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICB0YXJnZXRFbG0uYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1lcmdlTGlFbGVtZW50cyA9IChkb20sIGZyb21FbG0sIHRvRWxtKSA9PiB7XG4gICAgICBsZXQgbGlzdE5vZGU7XG4gICAgICBjb25zdCB1bCA9IGZyb21FbG0ucGFyZW50Tm9kZTtcbiAgICAgIGlmICghaXNDaGlsZE9mQm9keShkb20sIGZyb21FbG0pIHx8ICFpc0NoaWxkT2ZCb2R5KGRvbSwgdG9FbG0pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChpc0xpc3ROb2RlKHRvRWxtLmxhc3RDaGlsZCkpIHtcbiAgICAgICAgbGlzdE5vZGUgPSB0b0VsbS5sYXN0Q2hpbGQ7XG4gICAgICB9XG4gICAgICBpZiAodWwgPT09IHRvRWxtLmxhc3RDaGlsZCkge1xuICAgICAgICBpZiAoaXNCcih1bC5wcmV2aW91c1NpYmxpbmcpKSB7XG4gICAgICAgICAgZG9tLnJlbW92ZSh1bC5wcmV2aW91c1NpYmxpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBub2RlID0gdG9FbG0ubGFzdENoaWxkO1xuICAgICAgaWYgKG5vZGUgJiYgaXNCcihub2RlKSAmJiBmcm9tRWxtLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICBkb20ucmVtb3ZlKG5vZGUpO1xuICAgICAgfVxuICAgICAgaWYgKGlzRW1wdHkkMihkb20sIHRvRWxtLCB0cnVlKSkge1xuICAgICAgICBlbXB0eShTdWdhckVsZW1lbnQuZnJvbURvbSh0b0VsbSkpO1xuICAgICAgfVxuICAgICAgbW92ZUNoaWxkcmVuKGRvbSwgZnJvbUVsbSwgdG9FbG0pO1xuICAgICAgaWYgKGxpc3ROb2RlKSB7XG4gICAgICAgIHRvRWxtLmFwcGVuZENoaWxkKGxpc3ROb2RlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnRhaW5zJDEgPSBjb250YWlucyhTdWdhckVsZW1lbnQuZnJvbURvbSh0b0VsbSksIFN1Z2FyRWxlbWVudC5mcm9tRG9tKGZyb21FbG0pKTtcbiAgICAgIGNvbnN0IG5lc3RlZExpc3RzID0gY29udGFpbnMkMSA/IGRvbS5nZXRQYXJlbnRzKGZyb21FbG0sIGlzTGlzdE5vZGUsIHRvRWxtKSA6IFtdO1xuICAgICAgZG9tLnJlbW92ZShmcm9tRWxtKTtcbiAgICAgIGVhY2gkMShuZXN0ZWRMaXN0cywgbGlzdCA9PiB7XG4gICAgICAgIGlmIChpc0VtcHR5JDIoZG9tLCBsaXN0KSAmJiBsaXN0ICE9PSBkb20uZ2V0Um9vdCgpKSB7XG4gICAgICAgICAgZG9tLnJlbW92ZShsaXN0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBtZXJnZUludG9FbXB0eUxpID0gKGVkaXRvciwgZnJvbUxpLCB0b0xpKSA9PiB7XG4gICAgICBlbXB0eShTdWdhckVsZW1lbnQuZnJvbURvbSh0b0xpKSk7XG4gICAgICBtZXJnZUxpRWxlbWVudHMoZWRpdG9yLmRvbSwgZnJvbUxpLCB0b0xpKTtcbiAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Q3Vyc29yTG9jYXRpb24odG9MaSwgMCk7XG4gICAgfTtcbiAgICBjb25zdCBtZXJnZUZvcndhcmQgPSAoZWRpdG9yLCBybmcsIGZyb21MaSwgdG9MaSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGlmIChkb20uaXNFbXB0eSh0b0xpKSkge1xuICAgICAgICBtZXJnZUludG9FbXB0eUxpKGVkaXRvciwgZnJvbUxpLCB0b0xpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGJvb2ttYXJrID0gY3JlYXRlQm9va21hcmsocm5nKTtcbiAgICAgICAgbWVyZ2VMaUVsZW1lbnRzKGRvbSwgZnJvbUxpLCB0b0xpKTtcbiAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcocmVzb2x2ZUJvb2ttYXJrKGJvb2ttYXJrKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBtZXJnZUJhY2t3YXJkID0gKGVkaXRvciwgcm5nLCBmcm9tTGksIHRvTGkpID0+IHtcbiAgICAgIGNvbnN0IGJvb2ttYXJrID0gY3JlYXRlQm9va21hcmsocm5nKTtcbiAgICAgIG1lcmdlTGlFbGVtZW50cyhlZGl0b3IuZG9tLCBmcm9tTGksIHRvTGkpO1xuICAgICAgY29uc3QgcmVzb2x2ZWRCb29rbWFyayA9IHJlc29sdmVCb29rbWFyayhib29rbWFyayk7XG4gICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhyZXNvbHZlZEJvb2ttYXJrKTtcbiAgICB9O1xuICAgIGNvbnN0IGJhY2tzcGFjZURlbGV0ZUZyb21MaXN0VG9MaXN0Q2FyZXQgPSAoZWRpdG9yLCBpc0ZvcndhcmQpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb20sIHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3Rpb247XG4gICAgICBjb25zdCBzZWxlY3Rpb25TdGFydEVsbSA9IHNlbGVjdGlvbi5nZXRTdGFydCgpO1xuICAgICAgY29uc3Qgcm9vdCA9IGdldENsb3Nlc3RFZGl0aW5nSG9zdChlZGl0b3IsIHNlbGVjdGlvblN0YXJ0RWxtKTtcbiAgICAgIGNvbnN0IGxpID0gZG9tLmdldFBhcmVudChzZWxlY3Rpb24uZ2V0U3RhcnQoKSwgJ0xJJywgcm9vdCk7XG4gICAgICBpZiAobGkpIHtcbiAgICAgICAgY29uc3QgdWwgPSBsaS5wYXJlbnRFbGVtZW50O1xuICAgICAgICBpZiAodWwgPT09IGVkaXRvci5nZXRCb2R5KCkgJiYgaXNFbXB0eSQyKGRvbSwgdWwpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm5nID0gbm9ybWFsaXplUmFuZ2Uoc2VsZWN0aW9uLmdldFJuZygpKTtcbiAgICAgICAgY29uc3Qgb3RoZXJMaSA9IGRvbS5nZXRQYXJlbnQoZmluZE5leHRDYXJldENvbnRhaW5lcihlZGl0b3IsIHJuZywgaXNGb3J3YXJkLCByb290KSwgJ0xJJywgcm9vdCk7XG4gICAgICAgIGlmIChvdGhlckxpICYmIG90aGVyTGkgIT09IGxpKSB7XG4gICAgICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0ZvcndhcmQpIHtcbiAgICAgICAgICAgICAgbWVyZ2VGb3J3YXJkKGVkaXRvciwgcm5nLCBvdGhlckxpLCBsaSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoaXNGaXJzdENoaWxkKGxpKSkge1xuICAgICAgICAgICAgICAgIG91dGRlbnRMaXN0U2VsZWN0aW9uKGVkaXRvcik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWVyZ2VCYWNrd2FyZChlZGl0b3IsIHJuZywgbGksIG90aGVyTGkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoIW90aGVyTGkpIHtcbiAgICAgICAgICBpZiAoIWlzRm9yd2FyZCAmJiBybmcuc3RhcnRPZmZzZXQgPT09IDAgJiYgcm5nLmVuZE9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgZmxhdHRlbkxpc3RTZWxlY3Rpb24oZWRpdG9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVCbG9jayA9IChkb20sIGJsb2NrLCByb290KSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnRCbG9jayA9IGRvbS5nZXRQYXJlbnQoYmxvY2sucGFyZW50Tm9kZSwgZG9tLmlzQmxvY2ssIHJvb3QpO1xuICAgICAgZG9tLnJlbW92ZShibG9jayk7XG4gICAgICBpZiAocGFyZW50QmxvY2sgJiYgZG9tLmlzRW1wdHkocGFyZW50QmxvY2spKSB7XG4gICAgICAgIGRvbS5yZW1vdmUocGFyZW50QmxvY2spO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYmFja3NwYWNlRGVsZXRlSW50b0xpc3RDYXJldCA9IChlZGl0b3IsIGlzRm9yd2FyZCkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0RWxtID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCgpO1xuICAgICAgY29uc3Qgcm9vdCA9IGdldENsb3Nlc3RFZGl0aW5nSG9zdChlZGl0b3IsIHNlbGVjdGlvblN0YXJ0RWxtKTtcbiAgICAgIGNvbnN0IGJsb2NrID0gZG9tLmdldFBhcmVudChzZWxlY3Rpb25TdGFydEVsbSwgZG9tLmlzQmxvY2ssIHJvb3QpO1xuICAgICAgaWYgKGJsb2NrICYmIGRvbS5pc0VtcHR5KGJsb2NrKSkge1xuICAgICAgICBjb25zdCBybmcgPSBub3JtYWxpemVSYW5nZShlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKTtcbiAgICAgICAgY29uc3Qgb3RoZXJMaSA9IGRvbS5nZXRQYXJlbnQoZmluZE5leHRDYXJldENvbnRhaW5lcihlZGl0b3IsIHJuZywgaXNGb3J3YXJkLCByb290KSwgJ0xJJywgcm9vdCk7XG4gICAgICAgIGlmIChvdGhlckxpKSB7XG4gICAgICAgICAgY29uc3QgZmluZFZhbGlkRWxlbWVudCA9IGVsZW1lbnQgPT4gY29udGFpbnMkMShbXG4gICAgICAgICAgICAndGQnLFxuICAgICAgICAgICAgJ3RoJyxcbiAgICAgICAgICAgICdjYXB0aW9uJ1xuICAgICAgICAgIF0sIG5hbWUoZWxlbWVudCkpO1xuICAgICAgICAgIGNvbnN0IGZpbmRSb290ID0gbm9kZSA9PiBub2RlLmRvbSA9PT0gcm9vdDtcbiAgICAgICAgICBjb25zdCBvdGhlckxpQ2VsbCA9IGNsb3Nlc3QoU3VnYXJFbGVtZW50LmZyb21Eb20ob3RoZXJMaSksIGZpbmRWYWxpZEVsZW1lbnQsIGZpbmRSb290KTtcbiAgICAgICAgICBjb25zdCBjYXJldENlbGwgPSBjbG9zZXN0KFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJuZy5zdGFydENvbnRhaW5lciksIGZpbmRWYWxpZEVsZW1lbnQsIGZpbmRSb290KTtcbiAgICAgICAgICBpZiAoIWVxdWFscyhvdGhlckxpQ2VsbCwgY2FyZXRDZWxsLCBlcSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBvdGhlckxpLnBhcmVudE5vZGU7XG4gICAgICAgICAgICByZW1vdmVCbG9jayhkb20sIGJsb2NrLCByb290KTtcbiAgICAgICAgICAgIG1lcmdlV2l0aEFkamFjZW50TGlzdHMoZG9tLCBwYXJlbnROb2RlKTtcbiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0KG90aGVyTGksIHRydWUpO1xuICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5jb2xsYXBzZShpc0ZvcndhcmQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBjb25zdCBiYWNrc3BhY2VEZWxldGVDYXJldCA9IChlZGl0b3IsIGlzRm9yd2FyZCkgPT4ge1xuICAgICAgcmV0dXJuIGJhY2tzcGFjZURlbGV0ZUZyb21MaXN0VG9MaXN0Q2FyZXQoZWRpdG9yLCBpc0ZvcndhcmQpIHx8IGJhY2tzcGFjZURlbGV0ZUludG9MaXN0Q2FyZXQoZWRpdG9yLCBpc0ZvcndhcmQpO1xuICAgIH07XG4gICAgY29uc3QgaGFzTGlzdFNlbGVjdGlvbiA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBzZWxlY3Rpb25TdGFydEVsbSA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0U3RhcnQoKTtcbiAgICAgIGNvbnN0IHJvb3QgPSBnZXRDbG9zZXN0RWRpdGluZ0hvc3QoZWRpdG9yLCBzZWxlY3Rpb25TdGFydEVsbSk7XG4gICAgICBjb25zdCBzdGFydExpc3RQYXJlbnQgPSBlZGl0b3IuZG9tLmdldFBhcmVudChzZWxlY3Rpb25TdGFydEVsbSwgJ0xJLERULEREJywgcm9vdCk7XG4gICAgICByZXR1cm4gc3RhcnRMaXN0UGFyZW50IHx8IGdldFNlbGVjdGVkTGlzdEl0ZW1zKGVkaXRvcikubGVuZ3RoID4gMDtcbiAgICB9O1xuICAgIGNvbnN0IGJhY2tzcGFjZURlbGV0ZVJhbmdlID0gZWRpdG9yID0+IHtcbiAgICAgIGlmIChoYXNMaXN0U2VsZWN0aW9uKGVkaXRvcikpIHtcbiAgICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ0RlbGV0ZScpO1xuICAgICAgICAgIG5vcm1hbGl6ZUxpc3RzKGVkaXRvci5kb20sIGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBjb25zdCBiYWNrc3BhY2VEZWxldGUgPSAoZWRpdG9yLCBpc0ZvcndhcmQpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3Rpb247XG4gICAgICByZXR1cm4gIWlzV2l0aGluTm9uRWRpdGFibGVMaXN0KGVkaXRvciwgc2VsZWN0aW9uLmdldE5vZGUoKSkgJiYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpID8gYmFja3NwYWNlRGVsZXRlQ2FyZXQoZWRpdG9yLCBpc0ZvcndhcmQpIDogYmFja3NwYWNlRGVsZXRlUmFuZ2UoZWRpdG9yKSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cCQyID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5vbignRXhlY0NvbW1hbmQnLCBlID0+IHtcbiAgICAgICAgY29uc3QgY21kID0gZS5jb21tYW5kLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICgoY21kID09PSAnZGVsZXRlJyB8fCBjbWQgPT09ICdmb3J3YXJkZGVsZXRlJykgJiYgaGFzTGlzdFNlbGVjdGlvbihlZGl0b3IpKSB7XG4gICAgICAgICAgbm9ybWFsaXplTGlzdHMoZWRpdG9yLmRvbSwgZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdrZXlkb3duJywgZSA9PiB7XG4gICAgICAgIGlmIChlLmtleUNvZGUgPT09IGdsb2JhbCQ0LkJBQ0tTUEFDRSkge1xuICAgICAgICAgIGlmIChiYWNrc3BhY2VEZWxldGUoZWRpdG9yLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09PSBnbG9iYWwkNC5ERUxFVEUpIHtcbiAgICAgICAgICBpZiAoYmFja3NwYWNlRGVsZXRlKGVkaXRvciwgdHJ1ZSkpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXQgPSBlZGl0b3IgPT4gKHtcbiAgICAgIGJhY2tzcGFjZURlbGV0ZTogaXNGb3J3YXJkID0+IHtcbiAgICAgICAgYmFja3NwYWNlRGVsZXRlKGVkaXRvciwgaXNGb3J3YXJkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHVwZGF0ZUxpc3QgPSAoZWRpdG9yLCB1cGRhdGUpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudExpc3QgPSBnZXRQYXJlbnRMaXN0KGVkaXRvcik7XG4gICAgICBpZiAocGFyZW50TGlzdCA9PT0gbnVsbCB8fCBpc1dpdGhpbk5vbkVkaXRhYmxlTGlzdChlZGl0b3IsIHBhcmVudExpc3QpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVkaXRvci51bmRvTWFuYWdlci50cmFuc2FjdCgoKSA9PiB7XG4gICAgICAgIGlmIChpc09iamVjdCh1cGRhdGUuc3R5bGVzKSkge1xuICAgICAgICAgIGVkaXRvci5kb20uc2V0U3R5bGVzKHBhcmVudExpc3QsIHVwZGF0ZS5zdHlsZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc09iamVjdCh1cGRhdGUuYXR0cnMpKSB7XG4gICAgICAgICAgZWFjaCh1cGRhdGUuYXR0cnMsICh2LCBrKSA9PiBlZGl0b3IuZG9tLnNldEF0dHJpYihwYXJlbnRMaXN0LCBrLCB2KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBwYXJzZUFscGhhYmV0aWNCYXNlMjYgPSBzdHIgPT4ge1xuICAgICAgY29uc3QgY2hhcnMgPSByZXZlcnNlKHRyaW0oc3RyKS5zcGxpdCgnJykpO1xuICAgICAgY29uc3QgdmFsdWVzID0gbWFwKGNoYXJzLCAoY2hhciwgaSkgPT4ge1xuICAgICAgICBjb25zdCBjaGFyVmFsdWUgPSBjaGFyLnRvVXBwZXJDYXNlKCkuY2hhckNvZGVBdCgwKSAtICdBJy5jaGFyQ29kZUF0KDApICsgMTtcbiAgICAgICAgcmV0dXJuIE1hdGgucG93KDI2LCBpKSAqIGNoYXJWYWx1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZvbGRsKHZhbHVlcywgKHN1bSwgdikgPT4gc3VtICsgdiwgMCk7XG4gICAgfTtcbiAgICBjb25zdCBjb21wb3NlQWxwaGFiZXRpY0Jhc2UyNiA9IHZhbHVlID0+IHtcbiAgICAgIHZhbHVlLS07XG4gICAgICBpZiAodmFsdWUgPCAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlbWFpbmRlciA9IHZhbHVlICUgMjY7XG4gICAgICAgIGNvbnN0IHF1b3RpZW50ID0gTWF0aC5mbG9vcih2YWx1ZSAvIDI2KTtcbiAgICAgICAgY29uc3QgcmVzdCA9IGNvbXBvc2VBbHBoYWJldGljQmFzZTI2KHF1b3RpZW50KTtcbiAgICAgICAgY29uc3QgY2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoJ0EnLmNoYXJDb2RlQXQoMCkgKyByZW1haW5kZXIpO1xuICAgICAgICByZXR1cm4gcmVzdCArIGNoYXI7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc1VwcGVyY2FzZSA9IHN0ciA9PiAvXltBLVpdKyQvLnRlc3Qoc3RyKTtcbiAgICBjb25zdCBpc0xvd2VyY2FzZSA9IHN0ciA9PiAvXlthLXpdKyQvLnRlc3Qoc3RyKTtcbiAgICBjb25zdCBpc051bWVyaWMgPSBzdHIgPT4gL15bMC05XSskLy50ZXN0KHN0cik7XG4gICAgY29uc3QgZGVkdWNlTGlzdFR5cGUgPSBzdGFydCA9PiB7XG4gICAgICBpZiAoaXNOdW1lcmljKHN0YXJ0KSkge1xuICAgICAgICByZXR1cm4gMjtcbiAgICAgIH0gZWxzZSBpZiAoaXNVcHBlcmNhc2Uoc3RhcnQpKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSBlbHNlIGlmIChpc0xvd2VyY2FzZShzdGFydCkpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGVsc2UgaWYgKGlzRW1wdHkkMShzdGFydCkpIHtcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gNDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHBhcnNlU3RhcnRWYWx1ZSA9IHN0YXJ0ID0+IHtcbiAgICAgIHN3aXRjaCAoZGVkdWNlTGlzdFR5cGUoc3RhcnQpKSB7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICBsaXN0U3R5bGVUeXBlOiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgICAgc3RhcnRcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICBsaXN0U3R5bGVUeXBlOiBPcHRpb25hbC5zb21lKCd1cHBlci1hbHBoYScpLFxuICAgICAgICAgIHN0YXJ0OiBwYXJzZUFscGhhYmV0aWNCYXNlMjYoc3RhcnQpLnRvU3RyaW5nKClcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICBsaXN0U3R5bGVUeXBlOiBPcHRpb25hbC5zb21lKCdsb3dlci1hbHBoYScpLFxuICAgICAgICAgIHN0YXJ0OiBwYXJzZUFscGhhYmV0aWNCYXNlMjYoc3RhcnQpLnRvU3RyaW5nKClcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICBsaXN0U3R5bGVUeXBlOiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgICAgc3RhcnQ6ICcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSA0OlxuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcGFyc2VEZXRhaWwgPSBkZXRhaWwgPT4ge1xuICAgICAgY29uc3Qgc3RhcnQgPSBwYXJzZUludChkZXRhaWwuc3RhcnQsIDEwKTtcbiAgICAgIGlmIChpcyQyKGRldGFpbC5saXN0U3R5bGVUeXBlLCAndXBwZXItYWxwaGEnKSkge1xuICAgICAgICByZXR1cm4gY29tcG9zZUFscGhhYmV0aWNCYXNlMjYoc3RhcnQpO1xuICAgICAgfSBlbHNlIGlmIChpcyQyKGRldGFpbC5saXN0U3R5bGVUeXBlLCAnbG93ZXItYWxwaGEnKSkge1xuICAgICAgICByZXR1cm4gY29tcG9zZUFscGhhYmV0aWNCYXNlMjYoc3RhcnQpLnRvTG93ZXJDYXNlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGV0YWlsLnN0YXJ0O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvcGVuID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRMaXN0ID0gZ2V0UGFyZW50TGlzdChlZGl0b3IpO1xuICAgICAgaWYgKCFpc09sTm9kZShjdXJyZW50TGlzdCkgfHwgaXNXaXRoaW5Ob25FZGl0YWJsZUxpc3QoZWRpdG9yLCBjdXJyZW50TGlzdCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWRpdG9yLndpbmRvd01hbmFnZXIub3Blbih7XG4gICAgICAgIHRpdGxlOiAnTGlzdCBQcm9wZXJ0aWVzJyxcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHR5cGU6ICdwYW5lbCcsXG4gICAgICAgICAgaXRlbXM6IFt7XG4gICAgICAgICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgICAgICAgIG5hbWU6ICdzdGFydCcsXG4gICAgICAgICAgICAgIGxhYmVsOiAnU3RhcnQgbGlzdCBhdCBudW1iZXInLFxuICAgICAgICAgICAgICBpbnB1dE1vZGU6ICdudW1lcmljJ1xuICAgICAgICAgICAgfV1cbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbERhdGE6IHtcbiAgICAgICAgICBzdGFydDogcGFyc2VEZXRhaWwoe1xuICAgICAgICAgICAgc3RhcnQ6IGVkaXRvci5kb20uZ2V0QXR0cmliKGN1cnJlbnRMaXN0LCAnc3RhcnQnLCAnMScpLFxuICAgICAgICAgICAgbGlzdFN0eWxlVHlwZTogT3B0aW9uYWwuZnJvbShlZGl0b3IuZG9tLmdldFN0eWxlKGN1cnJlbnRMaXN0LCAnbGlzdC1zdHlsZS10eXBlJykpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICdjYW5jZWwnLFxuICAgICAgICAgICAgbmFtZTogJ2NhbmNlbCcsXG4gICAgICAgICAgICB0ZXh0OiAnQ2FuY2VsJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICBuYW1lOiAnc2F2ZScsXG4gICAgICAgICAgICB0ZXh0OiAnU2F2ZScsXG4gICAgICAgICAgICBwcmltYXJ5OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBvblN1Ym1pdDogYXBpID0+IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gYXBpLmdldERhdGEoKTtcbiAgICAgICAgICBwYXJzZVN0YXJ0VmFsdWUoZGF0YS5zdGFydCkuZWFjaChkZXRhaWwgPT4ge1xuICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VMaXN0VXBkYXRlJywgZmFsc2UsIHtcbiAgICAgICAgICAgICAgYXR0cnM6IHsgc3RhcnQ6IGRldGFpbC5zdGFydCA9PT0gJzEnID8gJycgOiBkZXRhaWwuc3RhcnQgfSxcbiAgICAgICAgICAgICAgc3R5bGVzOiB7ICdsaXN0LXN0eWxlLXR5cGUnOiBkZXRhaWwubGlzdFN0eWxlVHlwZS5nZXRPcignJykgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYXBpLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBxdWVyeUxpc3RDb21tYW5kU3RhdGUgPSAoZWRpdG9yLCBsaXN0TmFtZSkgPT4gKCkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50TGlzdCA9IGdldFBhcmVudExpc3QoZWRpdG9yKTtcbiAgICAgIHJldHVybiBpc05vbk51bGxhYmxlKHBhcmVudExpc3QpICYmIHBhcmVudExpc3Qubm9kZU5hbWUgPT09IGxpc3ROYW1lO1xuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXJEaWFsb2cgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmFkZENvbW1hbmQoJ21jZUxpc3RQcm9wcycsICgpID0+IHtcbiAgICAgICAgb3BlbihlZGl0b3IpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlciQyID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5vbignQmVmb3JlRXhlY0NvbW1hbmQnLCBlID0+IHtcbiAgICAgICAgY29uc3QgY21kID0gZS5jb21tYW5kLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChjbWQgPT09ICdpbmRlbnQnKSB7XG4gICAgICAgICAgaW5kZW50TGlzdFNlbGVjdGlvbihlZGl0b3IpO1xuICAgICAgICB9IGVsc2UgaWYgKGNtZCA9PT0gJ291dGRlbnQnKSB7XG4gICAgICAgICAgb3V0ZGVudExpc3RTZWxlY3Rpb24oZWRpdG9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBlZGl0b3IuYWRkQ29tbWFuZCgnSW5zZXJ0VW5vcmRlcmVkTGlzdCcsICh1aSwgZGV0YWlsKSA9PiB7XG4gICAgICAgIHRvZ2dsZUxpc3QoZWRpdG9yLCAnVUwnLCBkZXRhaWwpO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3IuYWRkQ29tbWFuZCgnSW5zZXJ0T3JkZXJlZExpc3QnLCAodWksIGRldGFpbCkgPT4ge1xuICAgICAgICB0b2dnbGVMaXN0KGVkaXRvciwgJ09MJywgZGV0YWlsKTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLmFkZENvbW1hbmQoJ0luc2VydERlZmluaXRpb25MaXN0JywgKHVpLCBkZXRhaWwpID0+IHtcbiAgICAgICAgdG9nZ2xlTGlzdChlZGl0b3IsICdETCcsIGRldGFpbCk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5hZGRDb21tYW5kKCdSZW1vdmVMaXN0JywgKCkgPT4ge1xuICAgICAgICBmbGF0dGVuTGlzdFNlbGVjdGlvbihlZGl0b3IpO1xuICAgICAgfSk7XG4gICAgICByZWdpc3RlckRpYWxvZyhlZGl0b3IpO1xuICAgICAgZWRpdG9yLmFkZENvbW1hbmQoJ21jZUxpc3RVcGRhdGUnLCAodWksIGRldGFpbCkgPT4ge1xuICAgICAgICBpZiAoaXNPYmplY3QoZGV0YWlsKSkge1xuICAgICAgICAgIHVwZGF0ZUxpc3QoZWRpdG9yLCBkZXRhaWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5hZGRRdWVyeVN0YXRlSGFuZGxlcignSW5zZXJ0VW5vcmRlcmVkTGlzdCcsIHF1ZXJ5TGlzdENvbW1hbmRTdGF0ZShlZGl0b3IsICdVTCcpKTtcbiAgICAgIGVkaXRvci5hZGRRdWVyeVN0YXRlSGFuZGxlcignSW5zZXJ0T3JkZXJlZExpc3QnLCBxdWVyeUxpc3RDb21tYW5kU3RhdGUoZWRpdG9yLCAnT0wnKSk7XG4gICAgICBlZGl0b3IuYWRkUXVlcnlTdGF0ZUhhbmRsZXIoJ0luc2VydERlZmluaXRpb25MaXN0JywgcXVlcnlMaXN0Q29tbWFuZFN0YXRlKGVkaXRvciwgJ0RMJykpO1xuICAgIH07XG5cbiAgICB2YXIgZ2xvYmFsID0gdGlueW1jZS51dGlsLlRvb2xzLnJlc29sdmUoJ3RpbnltY2UuaHRtbC5Ob2RlJyk7XG5cbiAgICBjb25zdCBpc1RleHROb2RlID0gbm9kZSA9PiBub2RlLnR5cGUgPT09IDM7XG4gICAgY29uc3QgaXNFbXB0eSA9IG5vZGVCdWZmZXIgPT4gbm9kZUJ1ZmZlci5sZW5ndGggPT09IDA7XG4gICAgY29uc3Qgd3JhcEludmFsaWRDaGlsZHJlbiA9IGxpc3QgPT4ge1xuICAgICAgY29uc3QgaW5zZXJ0TGlzdEl0ZW0gPSAoYnVmZmVyLCByZWZOb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IGxpID0gZ2xvYmFsLmNyZWF0ZSgnbGknKTtcbiAgICAgICAgZWFjaCQxKGJ1ZmZlciwgbm9kZSA9PiBsaS5hcHBlbmQobm9kZSkpO1xuICAgICAgICBpZiAocmVmTm9kZSkge1xuICAgICAgICAgIGxpc3QuaW5zZXJ0KGxpLCByZWZOb2RlLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaXN0LmFwcGVuZChsaSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCByZWR1Y2VyID0gKGJ1ZmZlciwgbm9kZSkgPT4ge1xuICAgICAgICBpZiAoaXNUZXh0Tm9kZShub2RlKSkge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi5idWZmZXIsXG4gICAgICAgICAgICBub2RlXG4gICAgICAgICAgXTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNFbXB0eShidWZmZXIpICYmICFpc1RleHROb2RlKG5vZGUpKSB7XG4gICAgICAgICAgaW5zZXJ0TGlzdEl0ZW0oYnVmZmVyLCBub2RlKTtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3RCdWZmZXIgPSBmb2xkbChsaXN0LmNoaWxkcmVuKCksIHJlZHVjZXIsIFtdKTtcbiAgICAgIGlmICghaXNFbXB0eShyZXN0QnVmZmVyKSkge1xuICAgICAgICBpbnNlcnRMaXN0SXRlbShyZXN0QnVmZmVyKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldHVwJDEgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLm9uKCdQcmVJbml0JywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7cGFyc2VyfSA9IGVkaXRvcjtcbiAgICAgICAgcGFyc2VyLmFkZE5vZGVGaWx0ZXIoJ3VsLG9sJywgbm9kZXMgPT4gZWFjaCQxKG5vZGVzLCB3cmFwSW52YWxpZENoaWxkcmVuKSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0dXBUYWJLZXkgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLm9uKCdrZXlkb3duJywgZSA9PiB7XG4gICAgICAgIGlmIChlLmtleUNvZGUgIT09IGdsb2JhbCQ0LlRBQiB8fCBnbG9iYWwkNC5tZXRhS2V5UHJlc3NlZChlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlZGl0b3IudW5kb01hbmFnZXIudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICAgIGlmIChlLnNoaWZ0S2V5ID8gb3V0ZGVudExpc3RTZWxlY3Rpb24oZWRpdG9yKSA6IGluZGVudExpc3RTZWxlY3Rpb24oZWRpdG9yKSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHNldHVwID0gZWRpdG9yID0+IHtcbiAgICAgIGlmIChzaG91bGRJbmRlbnRPblRhYihlZGl0b3IpKSB7XG4gICAgICAgIHNldHVwVGFiS2V5KGVkaXRvcik7XG4gICAgICB9XG4gICAgICBzZXR1cCQyKGVkaXRvcik7XG4gICAgfTtcblxuICAgIGNvbnN0IHNldHVwVG9nZ2xlQnV0dG9uSGFuZGxlciA9IChlZGl0b3IsIGxpc3ROYW1lKSA9PiBhcGkgPT4ge1xuICAgICAgY29uc3QgdG9nZ2xlQnV0dG9uSGFuZGxlciA9IGUgPT4ge1xuICAgICAgICBhcGkuc2V0QWN0aXZlKGluTGlzdChlLnBhcmVudHMsIGxpc3ROYW1lKSk7XG4gICAgICAgIGFwaS5zZXRFbmFibGVkKCFpc1dpdGhpbk5vbkVkaXRhYmxlTGlzdChlZGl0b3IsIGUuZWxlbWVudCkgJiYgZWRpdG9yLnNlbGVjdGlvbi5pc0VkaXRhYmxlKCkpO1xuICAgICAgfTtcbiAgICAgIGFwaS5zZXRFbmFibGVkKGVkaXRvci5zZWxlY3Rpb24uaXNFZGl0YWJsZSgpKTtcbiAgICAgIHJldHVybiBzZXROb2RlQ2hhbmdlSGFuZGxlcihlZGl0b3IsIHRvZ2dsZUJ1dHRvbkhhbmRsZXIpO1xuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXIkMSA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBleGVjID0gY29tbWFuZCA9PiAoKSA9PiBlZGl0b3IuZXhlY0NvbW1hbmQoY29tbWFuZCk7XG4gICAgICBpZiAoIWVkaXRvci5oYXNQbHVnaW4oJ2Fkdmxpc3QnKSkge1xuICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkVG9nZ2xlQnV0dG9uKCdudW1saXN0Jywge1xuICAgICAgICAgIGljb246ICdvcmRlcmVkLWxpc3QnLFxuICAgICAgICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgdG9vbHRpcDogJ051bWJlcmVkIGxpc3QnLFxuICAgICAgICAgIG9uQWN0aW9uOiBleGVjKCdJbnNlcnRPcmRlcmVkTGlzdCcpLFxuICAgICAgICAgIG9uU2V0dXA6IHNldHVwVG9nZ2xlQnV0dG9uSGFuZGxlcihlZGl0b3IsICdPTCcpXG4gICAgICAgIH0pO1xuICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkVG9nZ2xlQnV0dG9uKCdidWxsaXN0Jywge1xuICAgICAgICAgIGljb246ICd1bm9yZGVyZWQtbGlzdCcsXG4gICAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICB0b29sdGlwOiAnQnVsbGV0IGxpc3QnLFxuICAgICAgICAgIG9uQWN0aW9uOiBleGVjKCdJbnNlcnRVbm9yZGVyZWRMaXN0JyksXG4gICAgICAgICAgb25TZXR1cDogc2V0dXBUb2dnbGVCdXR0b25IYW5kbGVyKGVkaXRvciwgJ1VMJylcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHNldHVwTWVudUJ1dHRvbkhhbmRsZXIgPSAoZWRpdG9yLCBsaXN0TmFtZSkgPT4gYXBpID0+IHtcbiAgICAgIGNvbnN0IG1lbnVCdXR0b25IYW5kbGVyID0gZSA9PiBhcGkuc2V0RW5hYmxlZChpbkxpc3QoZS5wYXJlbnRzLCBsaXN0TmFtZSkgJiYgIWlzV2l0aGluTm9uRWRpdGFibGVMaXN0KGVkaXRvciwgZS5lbGVtZW50KSk7XG4gICAgICByZXR1cm4gc2V0Tm9kZUNoYW5nZUhhbmRsZXIoZWRpdG9yLCBtZW51QnV0dG9uSGFuZGxlcik7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlciA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBsaXN0UHJvcGVydGllcyA9IHtcbiAgICAgICAgdGV4dDogJ0xpc3QgcHJvcGVydGllcy4uLicsXG4gICAgICAgIGljb246ICdvcmRlcmVkLWxpc3QnLFxuICAgICAgICBvbkFjdGlvbjogKCkgPT4gZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VMaXN0UHJvcHMnKSxcbiAgICAgICAgb25TZXR1cDogc2V0dXBNZW51QnV0dG9uSGFuZGxlcihlZGl0b3IsICdPTCcpXG4gICAgICB9O1xuICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE1lbnVJdGVtKCdsaXN0cHJvcHMnLCBsaXN0UHJvcGVydGllcyk7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQ29udGV4dE1lbnUoJ2xpc3RzJywge1xuICAgICAgICB1cGRhdGU6IG5vZGUgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcmVudExpc3QgPSBnZXRQYXJlbnRMaXN0KGVkaXRvciwgbm9kZSk7XG4gICAgICAgICAgcmV0dXJuIGlzT2xOb2RlKHBhcmVudExpc3QpID8gWydsaXN0cHJvcHMnXSA6IFtdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdmFyIFBsdWdpbiA9ICgpID0+IHtcbiAgICAgIGdsb2JhbCQ3LmFkZCgnbGlzdHMnLCBlZGl0b3IgPT4ge1xuICAgICAgICByZWdpc3RlciQzKGVkaXRvcik7XG4gICAgICAgIHNldHVwJDEoZWRpdG9yKTtcbiAgICAgICAgaWYgKCFlZGl0b3IuaGFzUGx1Z2luKCdydGMnLCB0cnVlKSkge1xuICAgICAgICAgIHNldHVwKGVkaXRvcik7XG4gICAgICAgICAgcmVnaXN0ZXIkMihlZGl0b3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZ2lzdGVyRGlhbG9nKGVkaXRvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmVnaXN0ZXIkMShlZGl0b3IpO1xuICAgICAgICByZWdpc3RlcihlZGl0b3IpO1xuICAgICAgICByZXR1cm4gZ2V0KGVkaXRvcik7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgUGx1Z2luKCk7XG5cbn0pKCk7XG4iLCIvLyBFeHBvcnRzIHRoZSBcInRhYmxlXCIgcGx1Z2luIGZvciB1c2FnZSB3aXRoIG1vZHVsZSBsb2FkZXJzXG4vLyBVc2FnZTpcbi8vICAgQ29tbW9uSlM6XG4vLyAgICAgcmVxdWlyZSgndGlueW1jZS9wbHVnaW5zL3RhYmxlJylcbi8vICAgRVMyMDE1OlxuLy8gICAgIGltcG9ydCAndGlueW1jZS9wbHVnaW5zL3RhYmxlJ1xucmVxdWlyZSgnLi9wbHVnaW4uanMnKTsiLCIvKipcbiAqIFRpbnlNQ0UgdmVyc2lvbiA2LjcuMCAoMjAyMy0wOC0zMClcbiAqL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBnbG9iYWwkMyA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLlBsdWdpbk1hbmFnZXInKTtcblxuICAgIGNvbnN0IGhhc1Byb3RvID0gKHYsIGNvbnN0cnVjdG9yLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGlmIChwcmVkaWNhdGUodiwgY29uc3RydWN0b3IucHJvdG90eXBlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoKF9hID0gdi5jb25zdHJ1Y3RvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5hbWUpID09PSBjb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdHlwZU9mID0geCA9PiB7XG4gICAgICBjb25zdCB0ID0gdHlwZW9mIHg7XG4gICAgICBpZiAoeCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgICAgfSBlbHNlIGlmICh0ID09PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgICAgIHJldHVybiAnYXJyYXknO1xuICAgICAgfSBlbHNlIGlmICh0ID09PSAnb2JqZWN0JyAmJiBoYXNQcm90byh4LCBTdHJpbmcsIChvLCBwcm90bykgPT4gcHJvdG8uaXNQcm90b3R5cGVPZihvKSkpIHtcbiAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc1R5cGUkMSA9IHR5cGUgPT4gdmFsdWUgPT4gdHlwZU9mKHZhbHVlKSA9PT0gdHlwZTtcbiAgICBjb25zdCBpc1NpbXBsZVR5cGUgPSB0eXBlID0+IHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gdHlwZTtcbiAgICBjb25zdCBlcSQxID0gdCA9PiBhID0+IHQgPT09IGE7XG4gICAgY29uc3QgaXNTdHJpbmcgPSBpc1R5cGUkMSgnc3RyaW5nJyk7XG4gICAgY29uc3QgaXNBcnJheSA9IGlzVHlwZSQxKCdhcnJheScpO1xuICAgIGNvbnN0IGlzQm9vbGVhbiA9IGlzU2ltcGxlVHlwZSgnYm9vbGVhbicpO1xuICAgIGNvbnN0IGlzVW5kZWZpbmVkID0gZXEkMSh1bmRlZmluZWQpO1xuICAgIGNvbnN0IGlzTnVsbGFibGUgPSBhID0+IGEgPT09IG51bGwgfHwgYSA9PT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGlzTm9uTnVsbGFibGUgPSBhID0+ICFpc051bGxhYmxlKGEpO1xuICAgIGNvbnN0IGlzRnVuY3Rpb24gPSBpc1NpbXBsZVR5cGUoJ2Z1bmN0aW9uJyk7XG4gICAgY29uc3QgaXNOdW1iZXIgPSBpc1NpbXBsZVR5cGUoJ251bWJlcicpO1xuXG4gICAgY29uc3Qgbm9vcCA9ICgpID0+IHtcbiAgICB9O1xuICAgIGNvbnN0IGNvbXBvc2UxID0gKGZiYywgZmFiKSA9PiBhID0+IGZiYyhmYWIoYSkpO1xuICAgIGNvbnN0IGNvbnN0YW50ID0gdmFsdWUgPT4ge1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGlkZW50aXR5ID0geCA9PiB7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICAgIGNvbnN0IHRyaXBsZUVxdWFscyA9IChhLCBiKSA9PiB7XG4gICAgICByZXR1cm4gYSA9PT0gYjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGN1cnJ5KGZuLCAuLi5pbml0aWFsQXJncykge1xuICAgICAgcmV0dXJuICguLi5yZXN0QXJncykgPT4ge1xuICAgICAgICBjb25zdCBhbGwgPSBpbml0aWFsQXJncy5jb25jYXQocmVzdEFyZ3MpO1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgYWxsKTtcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGNhbGwgPSBmID0+IHtcbiAgICAgIGYoKTtcbiAgICB9O1xuICAgIGNvbnN0IG5ldmVyID0gY29uc3RhbnQoZmFsc2UpO1xuICAgIGNvbnN0IGFsd2F5cyA9IGNvbnN0YW50KHRydWUpO1xuXG4gICAgY2xhc3MgT3B0aW9uYWwge1xuICAgICAgY29uc3RydWN0b3IodGFnLCB2YWx1ZSkge1xuICAgICAgICB0aGlzLnRhZyA9IHRhZztcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgc3RhdGljIHNvbWUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPcHRpb25hbCh0cnVlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBzdGF0aWMgbm9uZSgpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNpbmdsZXRvbk5vbmU7XG4gICAgICB9XG4gICAgICBmb2xkKG9uTm9uZSwgb25Tb21lKSB7XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgIHJldHVybiBvblNvbWUodGhpcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG9uTm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpc1NvbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZztcbiAgICAgIH1cbiAgICAgIGlzTm9uZSgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnRhZztcbiAgICAgIH1cbiAgICAgIG1hcChtYXBwZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUobWFwcGVyKHRoaXMudmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBiaW5kKGJpbmRlcikge1xuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICByZXR1cm4gYmluZGVyKHRoaXMudmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV4aXN0cyhwcmVkaWNhdGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnICYmIHByZWRpY2F0ZSh0aGlzLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZvcmFsbChwcmVkaWNhdGUpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnRhZyB8fCBwcmVkaWNhdGUodGhpcy52YWx1ZSk7XG4gICAgICB9XG4gICAgICBmaWx0ZXIocHJlZGljYXRlKSB7XG4gICAgICAgIGlmICghdGhpcy50YWcgfHwgcHJlZGljYXRlKHRoaXMudmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZ2V0T3IocmVwbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gdGhpcy52YWx1ZSA6IHJlcGxhY2VtZW50O1xuICAgICAgfVxuICAgICAgb3IocmVwbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gdGhpcyA6IHJlcGxhY2VtZW50O1xuICAgICAgfVxuICAgICAgZ2V0T3JUaHVuayh0aHVuaykge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzLnZhbHVlIDogdGh1bmsoKTtcbiAgICAgIH1cbiAgICAgIG9yVGh1bmsodGh1bmspIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gdGhpcyA6IHRodW5rKCk7XG4gICAgICB9XG4gICAgICBnZXRPckRpZShtZXNzYWdlKSB7XG4gICAgICAgIGlmICghdGhpcy50YWcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSAhPT0gbnVsbCAmJiBtZXNzYWdlICE9PSB2b2lkIDAgPyBtZXNzYWdlIDogJ0NhbGxlZCBnZXRPckRpZSBvbiBOb25lJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0YXRpYyBmcm9tKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpc05vbk51bGxhYmxlKHZhbHVlKSA/IE9wdGlvbmFsLnNvbWUodmFsdWUpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgICAgZ2V0T3JOdWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzLnZhbHVlIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIGdldE9yVW5kZWZpbmVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgIH1cbiAgICAgIGVhY2god29ya2VyKSB7XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgIHdvcmtlcih0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdG9BcnJheSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gW3RoaXMudmFsdWVdIDogW107XG4gICAgICB9XG4gICAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gYHNvbWUoJHsgdGhpcy52YWx1ZSB9KWAgOiAnbm9uZSgpJztcbiAgICAgIH1cbiAgICB9XG4gICAgT3B0aW9uYWwuc2luZ2xldG9uTm9uZSA9IG5ldyBPcHRpb25hbChmYWxzZSk7XG5cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgY29uc3QgaGFzT3duUHJvcGVydHkgPSBPYmplY3QuaGFzT3duUHJvcGVydHk7XG4gICAgY29uc3QgZWFjaCQxID0gKG9iaiwgZikgPT4ge1xuICAgICAgY29uc3QgcHJvcHMgPSBrZXlzKG9iaik7XG4gICAgICBmb3IgKGxldCBrID0gMCwgbGVuID0gcHJvcHMubGVuZ3RoOyBrIDwgbGVuOyBrKyspIHtcbiAgICAgICAgY29uc3QgaSA9IHByb3BzW2tdO1xuICAgICAgICBjb25zdCB4ID0gb2JqW2ldO1xuICAgICAgICBmKHgsIGkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb2JqQWNjID0gciA9PiAoeCwgaSkgPT4ge1xuICAgICAgcltpXSA9IHg7XG4gICAgfTtcbiAgICBjb25zdCBpbnRlcm5hbEZpbHRlciA9IChvYmosIHByZWQsIG9uVHJ1ZSwgb25GYWxzZSkgPT4ge1xuICAgICAgZWFjaCQxKG9iaiwgKHgsIGkpID0+IHtcbiAgICAgICAgKHByZWQoeCwgaSkgPyBvblRydWUgOiBvbkZhbHNlKSh4LCBpKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZmlsdGVyJDEgPSAob2JqLCBwcmVkKSA9PiB7XG4gICAgICBjb25zdCB0ID0ge307XG4gICAgICBpbnRlcm5hbEZpbHRlcihvYmosIHByZWQsIG9iakFjYyh0KSwgbm9vcCk7XG4gICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIGNvbnN0IG1hcFRvQXJyYXkgPSAob2JqLCBmKSA9PiB7XG4gICAgICBjb25zdCByID0gW107XG4gICAgICBlYWNoJDEob2JqLCAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgci5wdXNoKGYodmFsdWUsIG5hbWUpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCB2YWx1ZXMgPSBvYmogPT4ge1xuICAgICAgcmV0dXJuIG1hcFRvQXJyYXkob2JqLCBpZGVudGl0eSk7XG4gICAgfTtcbiAgICBjb25zdCBzaXplID0gb2JqID0+IHtcbiAgICAgIHJldHVybiBrZXlzKG9iaikubGVuZ3RoO1xuICAgIH07XG4gICAgY29uc3QgZ2V0JDQgPSAob2JqLCBrZXkpID0+IHtcbiAgICAgIHJldHVybiBoYXMob2JqLCBrZXkpID8gT3B0aW9uYWwuZnJvbShvYmpba2V5XSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBoYXMgPSAob2JqLCBrZXkpID0+IGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xuICAgIGNvbnN0IGhhc05vbk51bGxhYmxlS2V5ID0gKG9iaiwga2V5KSA9PiBoYXMob2JqLCBrZXkpICYmIG9ialtrZXldICE9PSB1bmRlZmluZWQgJiYgb2JqW2tleV0gIT09IG51bGw7XG4gICAgY29uc3QgaXNFbXB0eSQxID0gciA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHggaW4gcikge1xuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChyLCB4KSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIGNvbnN0IG5hdGl2ZUluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbiAgICBjb25zdCBuYXRpdmVQdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7XG4gICAgY29uc3QgcmF3SW5kZXhPZiA9ICh0cywgdCkgPT4gbmF0aXZlSW5kZXhPZi5jYWxsKHRzLCB0KTtcbiAgICBjb25zdCBjb250YWlucyA9ICh4cywgeCkgPT4gcmF3SW5kZXhPZih4cywgeCkgPiAtMTtcbiAgICBjb25zdCBleGlzdHMgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IHJhbmdlID0gKG51bSwgZikgPT4ge1xuICAgICAgY29uc3QgciA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW07IGkrKykge1xuICAgICAgICByLnB1c2goZihpKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IG1hcCA9ICh4cywgZikgPT4ge1xuICAgICAgY29uc3QgbGVuID0geHMubGVuZ3RoO1xuICAgICAgY29uc3QgciA9IG5ldyBBcnJheShsZW4pO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIHJbaV0gPSBmKHgsIGkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBlYWNoID0gKHhzLCBmKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0geHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgeCA9IHhzW2ldO1xuICAgICAgICBmKHgsIGkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZWFjaHIgPSAoeHMsIGYpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSB4cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGYoeCwgaSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBwYXJ0aXRpb24gPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGNvbnN0IHBhc3MgPSBbXTtcbiAgICAgIGNvbnN0IGZhaWwgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGNvbnN0IGFyciA9IHByZWQoeCwgaSkgPyBwYXNzIDogZmFpbDtcbiAgICAgICAgYXJyLnB1c2goeCk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXNzLFxuICAgICAgICBmYWlsXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZmlsdGVyID0gKHhzLCBwcmVkKSA9PiB7XG4gICAgICBjb25zdCByID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0geHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgeCA9IHhzW2ldO1xuICAgICAgICBpZiAocHJlZCh4LCBpKSkge1xuICAgICAgICAgIHIucHVzaCh4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBmb2xkciA9ICh4cywgZiwgYWNjKSA9PiB7XG4gICAgICBlYWNocih4cywgKHgsIGkpID0+IHtcbiAgICAgICAgYWNjID0gZihhY2MsIHgsIGkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH07XG4gICAgY29uc3QgZm9sZGwgPSAoeHMsIGYsIGFjYykgPT4ge1xuICAgICAgZWFjaCh4cywgKHgsIGkpID0+IHtcbiAgICAgICAgYWNjID0gZihhY2MsIHgsIGkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH07XG4gICAgY29uc3QgZmluZFVudGlsID0gKHhzLCBwcmVkLCB1bnRpbCkgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgaWYgKHByZWQoeCwgaSkpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh4KTtcbiAgICAgICAgfSBlbHNlIGlmICh1bnRpbCh4LCBpKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgZmluZCA9ICh4cywgcHJlZCkgPT4ge1xuICAgICAgcmV0dXJuIGZpbmRVbnRpbCh4cywgcHJlZCwgbmV2ZXIpO1xuICAgIH07XG4gICAgY29uc3QgZmxhdHRlbiQxID0geHMgPT4ge1xuICAgICAgY29uc3QgciA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgIGlmICghaXNBcnJheSh4c1tpXSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Fyci5mbGF0dGVuIGl0ZW0gJyArIGkgKyAnIHdhcyBub3QgYW4gYXJyYXksIGlucHV0OiAnICsgeHMpO1xuICAgICAgICB9XG4gICAgICAgIG5hdGl2ZVB1c2guYXBwbHkociwgeHNbaV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBiaW5kID0gKHhzLCBmKSA9PiBmbGF0dGVuJDEobWFwKHhzLCBmKSk7XG4gICAgY29uc3QgZm9yYWxsID0gKHhzLCBwcmVkKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0geHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgY29uc3QgeCA9IHhzW2ldO1xuICAgICAgICBpZiAocHJlZCh4LCBpKSAhPT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBtYXBUb09iamVjdCA9ICh4cywgZikgPT4ge1xuICAgICAgY29uc3QgciA9IHt9O1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgcltTdHJpbmcoeCldID0gZih4LCBpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3QgZ2V0JDMgPSAoeHMsIGkpID0+IGkgPj0gMCAmJiBpIDwgeHMubGVuZ3RoID8gT3B0aW9uYWwuc29tZSh4c1tpXSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgY29uc3QgaGVhZCA9IHhzID0+IGdldCQzKHhzLCAwKTtcbiAgICBjb25zdCBsYXN0ID0geHMgPT4gZ2V0JDMoeHMsIHhzLmxlbmd0aCAtIDEpO1xuICAgIGNvbnN0IGZpbmRNYXAgPSAoYXJyLCBmKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByID0gZihhcnJbaV0sIGkpO1xuICAgICAgICBpZiAoci5pc1NvbWUoKSkge1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG5cbiAgICBjb25zdCBDT01NRU5UID0gODtcbiAgICBjb25zdCBET0NVTUVOVCA9IDk7XG4gICAgY29uc3QgRE9DVU1FTlRfRlJBR01FTlQgPSAxMTtcbiAgICBjb25zdCBFTEVNRU5UID0gMTtcbiAgICBjb25zdCBURVhUID0gMztcblxuICAgIGNvbnN0IGZyb21IdG1sID0gKGh0bWwsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBzY29wZSB8fCBkb2N1bWVudDtcbiAgICAgIGNvbnN0IGRpdiA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGRpdi5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgaWYgKCFkaXYuaGFzQ2hpbGROb2RlcygpIHx8IGRpdi5jaGlsZE5vZGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9ICdIVE1MIGRvZXMgbm90IGhhdmUgYSBzaW5nbGUgcm9vdCBub2RlJztcbiAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlLCBodG1sKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZyb21Eb20kMShkaXYuY2hpbGROb2Rlc1swXSk7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tVGFnID0gKHRhZywgc2NvcGUpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IHNjb3BlIHx8IGRvY3VtZW50O1xuICAgICAgY29uc3Qgbm9kZSA9IGRvYy5jcmVhdGVFbGVtZW50KHRhZyk7XG4gICAgICByZXR1cm4gZnJvbURvbSQxKG5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgZnJvbVRleHQgPSAodGV4dCwgc2NvcGUpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IHNjb3BlIHx8IGRvY3VtZW50O1xuICAgICAgY29uc3Qgbm9kZSA9IGRvYy5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcbiAgICAgIHJldHVybiBmcm9tRG9tJDEobm9kZSk7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tRG9tJDEgPSBub2RlID0+IHtcbiAgICAgIGlmIChub2RlID09PSBudWxsIHx8IG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vZGUgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBkb206IG5vZGUgfTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21Qb2ludCA9IChkb2NFbG0sIHgsIHkpID0+IE9wdGlvbmFsLmZyb20oZG9jRWxtLmRvbS5lbGVtZW50RnJvbVBvaW50KHgsIHkpKS5tYXAoZnJvbURvbSQxKTtcbiAgICBjb25zdCBTdWdhckVsZW1lbnQgPSB7XG4gICAgICBmcm9tSHRtbCxcbiAgICAgIGZyb21UYWcsXG4gICAgICBmcm9tVGV4dCxcbiAgICAgIGZyb21Eb206IGZyb21Eb20kMSxcbiAgICAgIGZyb21Qb2ludFxuICAgIH07XG5cbiAgICBjb25zdCBpcyQyID0gKGVsZW1lbnQsIHNlbGVjdG9yKSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGlmIChkb20ubm9kZVR5cGUgIT09IEVMRU1FTlQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZWxlbSA9IGRvbTtcbiAgICAgICAgaWYgKGVsZW0ubWF0Y2hlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZW0ubWF0Y2hlcyhzZWxlY3Rvcik7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbS5tc01hdGNoZXNTZWxlY3RvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZW0ubXNNYXRjaGVzU2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW0ubW96TWF0Y2hlc1NlbGVjdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbS5tb3pNYXRjaGVzU2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQnJvd3NlciBsYWNrcyBuYXRpdmUgc2VsZWN0b3JzJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGJ5cGFzc1NlbGVjdG9yID0gZG9tID0+IGRvbS5ub2RlVHlwZSAhPT0gRUxFTUVOVCAmJiBkb20ubm9kZVR5cGUgIT09IERPQ1VNRU5UICYmIGRvbS5ub2RlVHlwZSAhPT0gRE9DVU1FTlRfRlJBR01FTlQgfHwgZG9tLmNoaWxkRWxlbWVudENvdW50ID09PSAwO1xuICAgIGNvbnN0IGFsbCQxID0gKHNlbGVjdG9yLCBzY29wZSkgPT4ge1xuICAgICAgY29uc3QgYmFzZSA9IHNjb3BlID09PSB1bmRlZmluZWQgPyBkb2N1bWVudCA6IHNjb3BlLmRvbTtcbiAgICAgIHJldHVybiBieXBhc3NTZWxlY3RvcihiYXNlKSA/IFtdIDogbWFwKGJhc2UucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvciksIFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uZSA9IChzZWxlY3Rvciwgc2NvcGUpID0+IHtcbiAgICAgIGNvbnN0IGJhc2UgPSBzY29wZSA9PT0gdW5kZWZpbmVkID8gZG9jdW1lbnQgOiBzY29wZS5kb207XG4gICAgICByZXR1cm4gYnlwYXNzU2VsZWN0b3IoYmFzZSkgPyBPcHRpb25hbC5ub25lKCkgOiBPcHRpb25hbC5mcm9tKGJhc2UucXVlcnlTZWxlY3RvcihzZWxlY3RvcikpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGVxID0gKGUxLCBlMikgPT4gZTEuZG9tID09PSBlMi5kb207XG4gICAgY29uc3QgaXMkMSA9IGlzJDI7XG5cbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpczsnKSgpO1xuXG4gICAgY29uc3QgbmFtZSA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgciA9IGVsZW1lbnQuZG9tLm5vZGVOYW1lO1xuICAgICAgcmV0dXJuIHIudG9Mb3dlckNhc2UoKTtcbiAgICB9O1xuICAgIGNvbnN0IHR5cGUgPSBlbGVtZW50ID0+IGVsZW1lbnQuZG9tLm5vZGVUeXBlO1xuICAgIGNvbnN0IGlzVHlwZSA9IHQgPT4gZWxlbWVudCA9PiB0eXBlKGVsZW1lbnQpID09PSB0O1xuICAgIGNvbnN0IGlzQ29tbWVudCA9IGVsZW1lbnQgPT4gdHlwZShlbGVtZW50KSA9PT0gQ09NTUVOVCB8fCBuYW1lKGVsZW1lbnQpID09PSAnI2NvbW1lbnQnO1xuICAgIGNvbnN0IGlzRWxlbWVudCA9IGlzVHlwZShFTEVNRU5UKTtcbiAgICBjb25zdCBpc1RleHQgPSBpc1R5cGUoVEVYVCk7XG4gICAgY29uc3QgaXNEb2N1bWVudCA9IGlzVHlwZShET0NVTUVOVCk7XG4gICAgY29uc3QgaXNEb2N1bWVudEZyYWdtZW50ID0gaXNUeXBlKERPQ1VNRU5UX0ZSQUdNRU5UKTtcbiAgICBjb25zdCBpc1RhZyA9IHRhZyA9PiBlID0+IGlzRWxlbWVudChlKSAmJiBuYW1lKGUpID09PSB0YWc7XG5cbiAgICBjb25zdCBvd25lciA9IGVsZW1lbnQgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20oZWxlbWVudC5kb20ub3duZXJEb2N1bWVudCk7XG4gICAgY29uc3QgZG9jdW1lbnRPck93bmVyID0gZG9zID0+IGlzRG9jdW1lbnQoZG9zKSA/IGRvcyA6IG93bmVyKGRvcyk7XG4gICAgY29uc3QgcGFyZW50ID0gZWxlbWVudCA9PiBPcHRpb25hbC5mcm9tKGVsZW1lbnQuZG9tLnBhcmVudE5vZGUpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgY29uc3QgcGFyZW50cyA9IChlbGVtZW50LCBpc1Jvb3QpID0+IHtcbiAgICAgIGNvbnN0IHN0b3AgPSBpc0Z1bmN0aW9uKGlzUm9vdCkgPyBpc1Jvb3QgOiBuZXZlcjtcbiAgICAgIGxldCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGNvbnN0IHJldCA9IFtdO1xuICAgICAgd2hpbGUgKGRvbS5wYXJlbnROb2RlICE9PSBudWxsICYmIGRvbS5wYXJlbnROb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgcmF3UGFyZW50ID0gZG9tLnBhcmVudE5vZGU7XG4gICAgICAgIGNvbnN0IHAgPSBTdWdhckVsZW1lbnQuZnJvbURvbShyYXdQYXJlbnQpO1xuICAgICAgICByZXQucHVzaChwKTtcbiAgICAgICAgaWYgKHN0b3AocCkgPT09IHRydWUpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb20gPSByYXdQYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfTtcbiAgICBjb25zdCBwcmV2U2libGluZyA9IGVsZW1lbnQgPT4gT3B0aW9uYWwuZnJvbShlbGVtZW50LmRvbS5wcmV2aW91c1NpYmxpbmcpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgY29uc3QgbmV4dFNpYmxpbmcgPSBlbGVtZW50ID0+IE9wdGlvbmFsLmZyb20oZWxlbWVudC5kb20ubmV4dFNpYmxpbmcpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgY29uc3QgY2hpbGRyZW4kMyA9IGVsZW1lbnQgPT4gbWFwKGVsZW1lbnQuZG9tLmNoaWxkTm9kZXMsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBjaGlsZCQzID0gKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBjcyA9IGVsZW1lbnQuZG9tLmNoaWxkTm9kZXM7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShjc1tpbmRleF0pLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJzdENoaWxkID0gZWxlbWVudCA9PiBjaGlsZCQzKGVsZW1lbnQsIDApO1xuXG4gICAgY29uc3QgaXNTaGFkb3dSb290ID0gZG9zID0+IGlzRG9jdW1lbnRGcmFnbWVudChkb3MpICYmIGlzTm9uTnVsbGFibGUoZG9zLmRvbS5ob3N0KTtcbiAgICBjb25zdCBzdXBwb3J0ZWQgPSBpc0Z1bmN0aW9uKEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvdykgJiYgaXNGdW5jdGlvbihOb2RlLnByb3RvdHlwZS5nZXRSb290Tm9kZSk7XG4gICAgY29uc3QgZ2V0Um9vdE5vZGUgPSBzdXBwb3J0ZWQgPyBlID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGUuZG9tLmdldFJvb3ROb2RlKCkpIDogZG9jdW1lbnRPck93bmVyO1xuICAgIGNvbnN0IGdldFNoYWRvd1Jvb3QgPSBlID0+IHtcbiAgICAgIGNvbnN0IHIgPSBnZXRSb290Tm9kZShlKTtcbiAgICAgIHJldHVybiBpc1NoYWRvd1Jvb3QocikgPyBPcHRpb25hbC5zb21lKHIpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0U2hhZG93SG9zdCA9IGUgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20oZS5kb20uaG9zdCk7XG5cbiAgICBjb25zdCBpbkJvZHkgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGlzVGV4dChlbGVtZW50KSA/IGVsZW1lbnQuZG9tLnBhcmVudE5vZGUgOiBlbGVtZW50LmRvbTtcbiAgICAgIGlmIChkb20gPT09IHVuZGVmaW5lZCB8fCBkb20gPT09IG51bGwgfHwgZG9tLm93bmVyRG9jdW1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgZG9jID0gZG9tLm93bmVyRG9jdW1lbnQ7XG4gICAgICByZXR1cm4gZ2V0U2hhZG93Um9vdChTdWdhckVsZW1lbnQuZnJvbURvbShkb20pKS5mb2xkKCgpID0+IGRvYy5ib2R5LmNvbnRhaW5zKGRvbSksIGNvbXBvc2UxKGluQm9keSwgZ2V0U2hhZG93SG9zdCkpO1xuICAgIH07XG5cbiAgICB2YXIgQ2xvc2VzdE9yQW5jZXN0b3IgPSAoaXMsIGFuY2VzdG9yLCBzY29wZSwgYSwgaXNSb290KSA9PiB7XG4gICAgICBpZiAoaXMoc2NvcGUsIGEpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHNjb3BlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihpc1Jvb3QpICYmIGlzUm9vdChzY29wZSkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhbmNlc3RvcihzY29wZSwgYSwgaXNSb290KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgYW5jZXN0b3IkMSA9IChzY29wZSwgcHJlZGljYXRlLCBpc1Jvb3QpID0+IHtcbiAgICAgIGxldCBlbGVtZW50ID0gc2NvcGUuZG9tO1xuICAgICAgY29uc3Qgc3RvcCA9IGlzRnVuY3Rpb24oaXNSb290KSA/IGlzUm9vdCA6IG5ldmVyO1xuICAgICAgd2hpbGUgKGVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuICAgICAgICBjb25zdCBlbCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsZW1lbnQpO1xuICAgICAgICBpZiAocHJlZGljYXRlKGVsKSkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGVsKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdG9wKGVsKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgY2xvc2VzdCQyID0gKHNjb3BlLCBwcmVkaWNhdGUsIGlzUm9vdCkgPT4ge1xuICAgICAgY29uc3QgaXMgPSAocywgdGVzdCkgPT4gdGVzdChzKTtcbiAgICAgIHJldHVybiBDbG9zZXN0T3JBbmNlc3RvcihpcywgYW5jZXN0b3IkMSwgc2NvcGUsIHByZWRpY2F0ZSwgaXNSb290KTtcbiAgICB9O1xuICAgIGNvbnN0IGNoaWxkJDIgPSAoc2NvcGUsIHByZWRpY2F0ZSkgPT4ge1xuICAgICAgY29uc3QgcHJlZCA9IG5vZGUgPT4gcHJlZGljYXRlKFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5vZGUpKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmQoc2NvcGUuZG9tLmNoaWxkTm9kZXMsIHByZWQpO1xuICAgICAgcmV0dXJuIHJlc3VsdC5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIH07XG5cbiAgICBjb25zdCBhbmNlc3RvciA9IChzY29wZSwgc2VsZWN0b3IsIGlzUm9vdCkgPT4gYW5jZXN0b3IkMShzY29wZSwgZSA9PiBpcyQyKGUsIHNlbGVjdG9yKSwgaXNSb290KTtcbiAgICBjb25zdCBjaGlsZCQxID0gKHNjb3BlLCBzZWxlY3RvcikgPT4gY2hpbGQkMihzY29wZSwgZSA9PiBpcyQyKGUsIHNlbGVjdG9yKSk7XG4gICAgY29uc3QgZGVzY2VuZGFudCA9IChzY29wZSwgc2VsZWN0b3IpID0+IG9uZShzZWxlY3Rvciwgc2NvcGUpO1xuICAgIGNvbnN0IGNsb3Nlc3QkMSA9IChzY29wZSwgc2VsZWN0b3IsIGlzUm9vdCkgPT4ge1xuICAgICAgY29uc3QgaXMgPSAoZWxlbWVudCwgc2VsZWN0b3IpID0+IGlzJDIoZWxlbWVudCwgc2VsZWN0b3IpO1xuICAgICAgcmV0dXJuIENsb3Nlc3RPckFuY2VzdG9yKGlzLCBhbmNlc3Rvciwgc2NvcGUsIHNlbGVjdG9yLCBpc1Jvb3QpO1xuICAgIH07XG5cbiAgICBjb25zdCBjbG9zZXN0ID0gdGFyZ2V0ID0+IGNsb3Nlc3QkMSh0YXJnZXQsICdbY29udGVudGVkaXRhYmxlXScpO1xuICAgIGNvbnN0IGlzRWRpdGFibGUgPSAoZWxlbWVudCwgYXNzdW1lRWRpdGFibGUgPSBmYWxzZSkgPT4ge1xuICAgICAgaWYgKGluQm9keShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5kb20uaXNDb250ZW50RWRpdGFibGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY2xvc2VzdChlbGVtZW50KS5mb2xkKGNvbnN0YW50KGFzc3VtZUVkaXRhYmxlKSwgZWRpdGFibGUgPT4gZ2V0UmF3JDEoZWRpdGFibGUpID09PSAndHJ1ZScpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ2V0UmF3JDEgPSBlbGVtZW50ID0+IGVsZW1lbnQuZG9tLmNvbnRlbnRFZGl0YWJsZTtcblxuICAgIGNvbnN0IGdldE5vZGVOYW1lID0gZWxtID0+IGVsbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGdldEJvZHkgPSBlZGl0b3IgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgY29uc3QgZ2V0SXNSb290ID0gZWRpdG9yID0+IGVsZW1lbnQgPT4gZXEoZWxlbWVudCwgZ2V0Qm9keShlZGl0b3IpKTtcbiAgICBjb25zdCByZW1vdmVQeFN1ZmZpeCA9IHNpemUgPT4gc2l6ZSA/IHNpemUucmVwbGFjZSgvcHgkLywgJycpIDogJyc7XG4gICAgY29uc3QgYWRkUHhTdWZmaXggPSBzaXplID0+IC9eXFxkKyhcXC5cXGQrKT8kLy50ZXN0KHNpemUpID8gc2l6ZSArICdweCcgOiBzaXplO1xuICAgIGNvbnN0IGdldFNlbGVjdGlvblN0YXJ0ID0gZWRpdG9yID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5zZWxlY3Rpb24uZ2V0U3RhcnQoKSk7XG4gICAgY29uc3QgZ2V0U2VsZWN0aW9uRW5kID0gZWRpdG9yID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5zZWxlY3Rpb24uZ2V0RW5kKCkpO1xuICAgIGNvbnN0IGlzSW5FZGl0YWJsZUNvbnRleHQgPSBjZWxsID0+IGNsb3Nlc3QkMihjZWxsLCBpc1RhZygndGFibGUnKSkuZm9yYWxsKGlzRWRpdGFibGUpO1xuXG4gICAgY29uc3QgY2hpbGRyZW4kMiA9IChzY29wZSwgcHJlZGljYXRlKSA9PiBmaWx0ZXIoY2hpbGRyZW4kMyhzY29wZSksIHByZWRpY2F0ZSk7XG4gICAgY29uc3QgZGVzY2VuZGFudHMkMSA9IChzY29wZSwgcHJlZGljYXRlKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICBlYWNoKGNoaWxkcmVuJDMoc2NvcGUpLCB4ID0+IHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZSh4KSkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoW3hdKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGRlc2NlbmRhbnRzJDEoeCwgcHJlZGljYXRlKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIGNvbnN0IGNoaWxkcmVuJDEgPSAoc2NvcGUsIHNlbGVjdG9yKSA9PiBjaGlsZHJlbiQyKHNjb3BlLCBlID0+IGlzJDIoZSwgc2VsZWN0b3IpKTtcbiAgICBjb25zdCBkZXNjZW5kYW50cyA9IChzY29wZSwgc2VsZWN0b3IpID0+IGFsbCQxKHNlbGVjdG9yLCBzY29wZSk7XG5cbiAgICBjb25zdCByYXdTZXQgPSAoZG9tLCBrZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoaXNTdHJpbmcodmFsdWUpIHx8IGlzQm9vbGVhbih2YWx1ZSkgfHwgaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSArICcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgY2FsbCB0byBBdHRyaWJ1dGUuc2V0LiBLZXkgJywga2V5LCAnOjogVmFsdWUgJywgdmFsdWUsICc6OiBFbGVtZW50ICcsIGRvbSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQXR0cmlidXRlIHZhbHVlIHdhcyBub3Qgc2ltcGxlJyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXQkMiA9IChlbGVtZW50LCBrZXksIHZhbHVlKSA9PiB7XG4gICAgICByYXdTZXQoZWxlbWVudC5kb20sIGtleSwgdmFsdWUpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0QWxsID0gKGVsZW1lbnQsIGF0dHJzKSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGVhY2gkMShhdHRycywgKHYsIGspID0+IHtcbiAgICAgICAgcmF3U2V0KGRvbSwgaywgdik7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldCQyID0gKGVsZW1lbnQsIGtleSkgPT4ge1xuICAgICAgY29uc3QgdiA9IGVsZW1lbnQuZG9tLmdldEF0dHJpYnV0ZShrZXkpO1xuICAgICAgcmV0dXJuIHYgPT09IG51bGwgPyB1bmRlZmluZWQgOiB2O1xuICAgIH07XG4gICAgY29uc3QgZ2V0T3B0ID0gKGVsZW1lbnQsIGtleSkgPT4gT3B0aW9uYWwuZnJvbShnZXQkMihlbGVtZW50LCBrZXkpKTtcbiAgICBjb25zdCByZW1vdmUkMiA9IChlbGVtZW50LCBrZXkpID0+IHtcbiAgICAgIGVsZW1lbnQuZG9tLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgIH07XG4gICAgY29uc3QgY2xvbmUgPSBlbGVtZW50ID0+IGZvbGRsKGVsZW1lbnQuZG9tLmF0dHJpYnV0ZXMsIChhY2MsIGF0dHIpID0+IHtcbiAgICAgIGFjY1thdHRyLm5hbWVdID0gYXR0ci52YWx1ZTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuXG4gICAgY29uc3QgaXMgPSAobGhzLCByaHMsIGNvbXBhcmF0b3IgPSB0cmlwbGVFcXVhbHMpID0+IGxocy5leGlzdHMobGVmdCA9PiBjb21wYXJhdG9yKGxlZnQsIHJocykpO1xuICAgIGNvbnN0IGNhdCA9IGFyciA9PiB7XG4gICAgICBjb25zdCByID0gW107XG4gICAgICBjb25zdCBwdXNoID0geCA9PiB7XG4gICAgICAgIHIucHVzaCh4KTtcbiAgICAgIH07XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICBhcnJbaV0uZWFjaChwdXNoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3QgbGlmdDIgPSAob2EsIG9iLCBmKSA9PiBvYS5pc1NvbWUoKSAmJiBvYi5pc1NvbWUoKSA/IE9wdGlvbmFsLnNvbWUoZihvYS5nZXRPckRpZSgpLCBvYi5nZXRPckRpZSgpKSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgY29uc3QgZmxhdHRlbiA9IG9vdCA9PiBvb3QuYmluZChpZGVudGl0eSk7XG4gICAgY29uc3Qgc29tZUlmID0gKGIsIGEpID0+IGIgPyBPcHRpb25hbC5zb21lKGEpIDogT3B0aW9uYWwubm9uZSgpO1xuXG4gICAgY29uc3QgcmVtb3ZlRnJvbVN0YXJ0ID0gKHN0ciwgbnVtQ2hhcnMpID0+IHtcbiAgICAgIHJldHVybiBzdHIuc3Vic3RyaW5nKG51bUNoYXJzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2hlY2tSYW5nZSA9IChzdHIsIHN1YnN0ciwgc3RhcnQpID0+IHN1YnN0ciA9PT0gJycgfHwgc3RyLmxlbmd0aCA+PSBzdWJzdHIubGVuZ3RoICYmIHN0ci5zdWJzdHIoc3RhcnQsIHN0YXJ0ICsgc3Vic3RyLmxlbmd0aCkgPT09IHN1YnN0cjtcbiAgICBjb25zdCByZW1vdmVMZWFkaW5nID0gKHN0ciwgcHJlZml4KSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRzV2l0aChzdHIsIHByZWZpeCkgPyByZW1vdmVGcm9tU3RhcnQoc3RyLCBwcmVmaXgubGVuZ3RoKSA6IHN0cjtcbiAgICB9O1xuICAgIGNvbnN0IHN0YXJ0c1dpdGggPSAoc3RyLCBwcmVmaXgpID0+IHtcbiAgICAgIHJldHVybiBjaGVja1JhbmdlKHN0ciwgcHJlZml4LCAwKTtcbiAgICB9O1xuICAgIGNvbnN0IGJsYW5rID0gciA9PiBzID0+IHMucmVwbGFjZShyLCAnJyk7XG4gICAgY29uc3QgdHJpbSA9IGJsYW5rKC9eXFxzK3xcXHMrJC9nKTtcbiAgICBjb25zdCBpc05vdEVtcHR5ID0gcyA9PiBzLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgaXNFbXB0eSA9IHMgPT4gIWlzTm90RW1wdHkocyk7XG4gICAgY29uc3QgdG9JbnQgPSAodmFsdWUsIHJhZGl4ID0gMTApID0+IHtcbiAgICAgIGNvbnN0IG51bSA9IHBhcnNlSW50KHZhbHVlLCByYWRpeCk7XG4gICAgICByZXR1cm4gaXNOYU4obnVtKSA/IE9wdGlvbmFsLm5vbmUoKSA6IE9wdGlvbmFsLnNvbWUobnVtKTtcbiAgICB9O1xuICAgIGNvbnN0IHRvRmxvYXQgPSB2YWx1ZSA9PiB7XG4gICAgICBjb25zdCBudW0gPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgIHJldHVybiBpc05hTihudW0pID8gT3B0aW9uYWwubm9uZSgpIDogT3B0aW9uYWwuc29tZShudW0pO1xuICAgIH07XG5cbiAgICBjb25zdCBpc1N1cHBvcnRlZCA9IGRvbSA9PiBkb20uc3R5bGUgIT09IHVuZGVmaW5lZCAmJiBpc0Z1bmN0aW9uKGRvbS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKTtcblxuICAgIGNvbnN0IGludGVybmFsU2V0ID0gKGRvbSwgcHJvcGVydHksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIGNhbGwgdG8gQ1NTLnNldC4gUHJvcGVydHkgJywgcHJvcGVydHksICc6OiBWYWx1ZSAnLCB2YWx1ZSwgJzo6IEVsZW1lbnQgJywgZG9tKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDU1MgdmFsdWUgbXVzdCBiZSBhIHN0cmluZzogJyArIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1N1cHBvcnRlZChkb20pKSB7XG4gICAgICAgIGRvbS5zdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaW50ZXJuYWxSZW1vdmUgPSAoZG9tLCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgaWYgKGlzU3VwcG9ydGVkKGRvbSkpIHtcbiAgICAgICAgZG9tLnN0eWxlLnJlbW92ZVByb3BlcnR5KHByb3BlcnR5KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldCQxID0gKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBpbnRlcm5hbFNldChkb20sIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXQkMSA9IChlbGVtZW50LCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBjb25zdCBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb20pO1xuICAgICAgY29uc3QgciA9IHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KTtcbiAgICAgIHJldHVybiByID09PSAnJyAmJiAhaW5Cb2R5KGVsZW1lbnQpID8gZ2V0VW5zYWZlUHJvcGVydHkoZG9tLCBwcm9wZXJ0eSkgOiByO1xuICAgIH07XG4gICAgY29uc3QgZ2V0VW5zYWZlUHJvcGVydHkgPSAoZG9tLCBwcm9wZXJ0eSkgPT4gaXNTdXBwb3J0ZWQoZG9tKSA/IGRvbS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KSA6ICcnO1xuICAgIGNvbnN0IGdldFJhdyA9IChlbGVtZW50LCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBjb25zdCByYXcgPSBnZXRVbnNhZmVQcm9wZXJ0eShkb20sIHByb3BlcnR5KTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKHJhdykuZmlsdGVyKHIgPT4gci5sZW5ndGggPiAwKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSQxID0gKGVsZW1lbnQsIHByb3BlcnR5KSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGludGVybmFsUmVtb3ZlKGRvbSwgcHJvcGVydHkpO1xuICAgICAgaWYgKGlzKGdldE9wdChlbGVtZW50LCAnc3R5bGUnKS5tYXAodHJpbSksICcnKSkge1xuICAgICAgICByZW1vdmUkMihlbGVtZW50LCAnc3R5bGUnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0QXR0clZhbHVlID0gKGNlbGwsIG5hbWUsIGZhbGxiYWNrID0gMCkgPT4gZ2V0T3B0KGNlbGwsIG5hbWUpLm1hcCh2YWx1ZSA9PiBwYXJzZUludCh2YWx1ZSwgMTApKS5nZXRPcihmYWxsYmFjayk7XG5cbiAgICBjb25zdCBmaXJzdExheWVyID0gKHNjb3BlLCBzZWxlY3RvcikgPT4ge1xuICAgICAgcmV0dXJuIGZpbHRlckZpcnN0TGF5ZXIoc2NvcGUsIHNlbGVjdG9yLCBhbHdheXMpO1xuICAgIH07XG4gICAgY29uc3QgZmlsdGVyRmlyc3RMYXllciA9IChzY29wZSwgc2VsZWN0b3IsIHByZWRpY2F0ZSkgPT4ge1xuICAgICAgcmV0dXJuIGJpbmQoY2hpbGRyZW4kMyhzY29wZSksIHggPT4ge1xuICAgICAgICBpZiAoaXMkMih4LCBzZWxlY3RvcikpIHtcbiAgICAgICAgICByZXR1cm4gcHJlZGljYXRlKHgpID8gW3hdIDogW107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZpbHRlckZpcnN0TGF5ZXIoeCwgc2VsZWN0b3IsIHByZWRpY2F0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCB2YWxpZFNlY3Rpb25MaXN0ID0gW1xuICAgICAgJ3Rmb290JyxcbiAgICAgICd0aGVhZCcsXG4gICAgICAndGJvZHknLFxuICAgICAgJ2NvbGdyb3VwJ1xuICAgIF07XG4gICAgY29uc3QgaXNWYWxpZFNlY3Rpb24gPSBwYXJlbnROYW1lID0+IGNvbnRhaW5zKHZhbGlkU2VjdGlvbkxpc3QsIHBhcmVudE5hbWUpO1xuICAgIGNvbnN0IGdyaWQgPSAocm93cywgY29sdW1ucykgPT4gKHtcbiAgICAgIHJvd3MsXG4gICAgICBjb2x1bW5zXG4gICAgfSk7XG4gICAgY29uc3QgZGV0YWlsID0gKGVsZW1lbnQsIHJvd3NwYW4sIGNvbHNwYW4pID0+ICh7XG4gICAgICBlbGVtZW50LFxuICAgICAgcm93c3BhbixcbiAgICAgIGNvbHNwYW5cbiAgICB9KTtcbiAgICBjb25zdCBleHRlbmRlZCA9IChlbGVtZW50LCByb3dzcGFuLCBjb2xzcGFuLCByb3csIGNvbHVtbiwgaXNMb2NrZWQpID0+ICh7XG4gICAgICBlbGVtZW50LFxuICAgICAgcm93c3BhbixcbiAgICAgIGNvbHNwYW4sXG4gICAgICByb3csXG4gICAgICBjb2x1bW4sXG4gICAgICBpc0xvY2tlZFxuICAgIH0pO1xuICAgIGNvbnN0IHJvd2RldGFpbCA9IChlbGVtZW50LCBjZWxscywgc2VjdGlvbikgPT4gKHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBjZWxscyxcbiAgICAgIHNlY3Rpb25cbiAgICB9KTtcbiAgICBjb25zdCBib3VuZHMgPSAoc3RhcnRSb3csIHN0YXJ0Q29sLCBmaW5pc2hSb3csIGZpbmlzaENvbCkgPT4gKHtcbiAgICAgIHN0YXJ0Um93LFxuICAgICAgc3RhcnRDb2wsXG4gICAgICBmaW5pc2hSb3csXG4gICAgICBmaW5pc2hDb2xcbiAgICB9KTtcbiAgICBjb25zdCBjb2x1bW5leHQgPSAoZWxlbWVudCwgY29sc3BhbiwgY29sdW1uKSA9PiAoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIGNvbHNwYW4sXG4gICAgICBjb2x1bW5cbiAgICB9KTtcbiAgICBjb25zdCBjb2xncm91cCA9IChlbGVtZW50LCBjb2x1bW5zKSA9PiAoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIGNvbHVtbnNcbiAgICB9KTtcblxuICAgIGNvbnN0IGxvb2t1cCA9ICh0YWdzLCBlbGVtZW50LCBpc1Jvb3QgPSBuZXZlcikgPT4ge1xuICAgICAgaWYgKGlzUm9vdChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRhaW5zKHRhZ3MsIG5hbWUoZWxlbWVudCkpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGVsZW1lbnQpO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNSb290T3JVcHBlclRhYmxlID0gZWxtID0+IGlzJDIoZWxtLCAndGFibGUnKSB8fCBpc1Jvb3QoZWxtKTtcbiAgICAgIHJldHVybiBhbmNlc3RvcihlbGVtZW50LCB0YWdzLmpvaW4oJywnKSwgaXNSb290T3JVcHBlclRhYmxlKTtcbiAgICB9O1xuICAgIGNvbnN0IGNlbGwgPSAoZWxlbWVudCwgaXNSb290KSA9PiBsb29rdXAoW1xuICAgICAgJ3RkJyxcbiAgICAgICd0aCdcbiAgICBdLCBlbGVtZW50LCBpc1Jvb3QpO1xuICAgIGNvbnN0IGNlbGxzID0gYW5jZXN0b3IgPT4gZmlyc3RMYXllcihhbmNlc3RvciwgJ3RoLHRkJyk7XG4gICAgY29uc3QgY29sdW1ucyA9IGFuY2VzdG9yID0+IHtcbiAgICAgIGlmIChpcyQyKGFuY2VzdG9yLCAnY29sZ3JvdXAnKSkge1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4kMShhbmNlc3RvciwgJ2NvbCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGJpbmQoY29sdW1uR3JvdXBzKGFuY2VzdG9yKSwgY29sdW1uR3JvdXAgPT4gY2hpbGRyZW4kMShjb2x1bW5Hcm91cCwgJ2NvbCcpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHRhYmxlID0gKGVsZW1lbnQsIGlzUm9vdCkgPT4gY2xvc2VzdCQxKGVsZW1lbnQsICd0YWJsZScsIGlzUm9vdCk7XG4gICAgY29uc3Qgcm93cyA9IGFuY2VzdG9yID0+IGZpcnN0TGF5ZXIoYW5jZXN0b3IsICd0cicpO1xuICAgIGNvbnN0IGNvbHVtbkdyb3VwcyA9IGFuY2VzdG9yID0+IHRhYmxlKGFuY2VzdG9yKS5mb2xkKGNvbnN0YW50KFtdKSwgdGFibGUgPT4gY2hpbGRyZW4kMSh0YWJsZSwgJ2NvbGdyb3VwJykpO1xuXG4gICAgY29uc3QgZnJvbVJvd3NPckNvbEdyb3VwcyA9IChlbGVtcywgZ2V0U2VjdGlvbikgPT4gbWFwKGVsZW1zLCByb3cgPT4ge1xuICAgICAgaWYgKG5hbWUocm93KSA9PT0gJ2NvbGdyb3VwJykge1xuICAgICAgICBjb25zdCBjZWxscyA9IG1hcChjb2x1bW5zKHJvdyksIGNvbHVtbiA9PiB7XG4gICAgICAgICAgY29uc3QgY29sc3BhbiA9IGdldEF0dHJWYWx1ZShjb2x1bW4sICdzcGFuJywgMSk7XG4gICAgICAgICAgcmV0dXJuIGRldGFpbChjb2x1bW4sIDEsIGNvbHNwYW4pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJvd2RldGFpbChyb3csIGNlbGxzLCAnY29sZ3JvdXAnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNlbGxzJDEgPSBtYXAoY2VsbHMocm93KSwgY2VsbCA9PiB7XG4gICAgICAgICAgY29uc3Qgcm93c3BhbiA9IGdldEF0dHJWYWx1ZShjZWxsLCAncm93c3BhbicsIDEpO1xuICAgICAgICAgIGNvbnN0IGNvbHNwYW4gPSBnZXRBdHRyVmFsdWUoY2VsbCwgJ2NvbHNwYW4nLCAxKTtcbiAgICAgICAgICByZXR1cm4gZGV0YWlsKGNlbGwsIHJvd3NwYW4sIGNvbHNwYW4pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJvd2RldGFpbChyb3csIGNlbGxzJDEsIGdldFNlY3Rpb24ocm93KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0UGFyZW50U2VjdGlvbiA9IGdyb3VwID0+IHBhcmVudChncm91cCkubWFwKHBhcmVudCA9PiB7XG4gICAgICBjb25zdCBwYXJlbnROYW1lID0gbmFtZShwYXJlbnQpO1xuICAgICAgcmV0dXJuIGlzVmFsaWRTZWN0aW9uKHBhcmVudE5hbWUpID8gcGFyZW50TmFtZSA6ICd0Ym9keSc7XG4gICAgfSkuZ2V0T3IoJ3Rib2R5Jyk7XG4gICAgY29uc3QgZnJvbVRhYmxlJDEgPSB0YWJsZSA9PiB7XG4gICAgICBjb25zdCByb3dzJDEgPSByb3dzKHRhYmxlKTtcbiAgICAgIGNvbnN0IGNvbHVtbkdyb3VwcyQxID0gY29sdW1uR3JvdXBzKHRhYmxlKTtcbiAgICAgIGNvbnN0IGVsZW1zID0gW1xuICAgICAgICAuLi5jb2x1bW5Hcm91cHMkMSxcbiAgICAgICAgLi4ucm93cyQxXG4gICAgICBdO1xuICAgICAgcmV0dXJuIGZyb21Sb3dzT3JDb2xHcm91cHMoZWxlbXMsIGdldFBhcmVudFNlY3Rpb24pO1xuICAgIH07XG5cbiAgICBjb25zdCBMT0NLRURfQ09MX0FUVFIgPSAnZGF0YS1zbm9va2VyLWxvY2tlZC1jb2xzJztcbiAgICBjb25zdCBnZXRMb2NrZWRDb2x1bW5zRnJvbVRhYmxlID0gdGFibGUgPT4gZ2V0T3B0KHRhYmxlLCBMT0NLRURfQ09MX0FUVFIpLmJpbmQobG9ja2VkQ29sU3RyID0+IE9wdGlvbmFsLmZyb20obG9ja2VkQ29sU3RyLm1hdGNoKC9cXGQrL2cpKSkubWFwKGxvY2tlZENvbHMgPT4gbWFwVG9PYmplY3QobG9ja2VkQ29scywgYWx3YXlzKSk7XG5cbiAgICBjb25zdCBrZXkgPSAocm93LCBjb2x1bW4pID0+IHtcbiAgICAgIHJldHVybiByb3cgKyAnLCcgKyBjb2x1bW47XG4gICAgfTtcbiAgICBjb25zdCBnZXRBdCA9ICh3YXJlaG91c2UsIHJvdywgY29sdW1uKSA9PiBPcHRpb25hbC5mcm9tKHdhcmVob3VzZS5hY2Nlc3Nba2V5KHJvdywgY29sdW1uKV0pO1xuICAgIGNvbnN0IGZpbmRJdGVtID0gKHdhcmVob3VzZSwgaXRlbSwgY29tcGFyYXRvcikgPT4ge1xuICAgICAgY29uc3QgZmlsdGVyZWQgPSBmaWx0ZXJJdGVtcyh3YXJlaG91c2UsIGRldGFpbCA9PiB7XG4gICAgICAgIHJldHVybiBjb21wYXJhdG9yKGl0ZW0sIGRldGFpbC5lbGVtZW50KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZpbHRlcmVkLmxlbmd0aCA+IDAgPyBPcHRpb25hbC5zb21lKGZpbHRlcmVkWzBdKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbHRlckl0ZW1zID0gKHdhcmVob3VzZSwgcHJlZGljYXRlKSA9PiB7XG4gICAgICBjb25zdCBhbGwgPSBiaW5kKHdhcmVob3VzZS5hbGwsIHIgPT4ge1xuICAgICAgICByZXR1cm4gci5jZWxscztcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZpbHRlcihhbGwsIHByZWRpY2F0ZSk7XG4gICAgfTtcbiAgICBjb25zdCBnZW5lcmF0ZUNvbHVtbnMgPSByb3dEYXRhID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtbnNHcm91cCA9IHt9O1xuICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgIGVhY2gocm93RGF0YS5jZWxscywgY29sdW1uID0+IHtcbiAgICAgICAgY29uc3QgY29sc3BhbiA9IGNvbHVtbi5jb2xzcGFuO1xuICAgICAgICByYW5nZShjb2xzcGFuLCBjb2x1bW5JbmRleCA9PiB7XG4gICAgICAgICAgY29uc3QgY29sSW5kZXggPSBpbmRleCArIGNvbHVtbkluZGV4O1xuICAgICAgICAgIGNvbHVtbnNHcm91cFtjb2xJbmRleF0gPSBjb2x1bW5leHQoY29sdW1uLmVsZW1lbnQsIGNvbHNwYW4sIGNvbEluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGluZGV4ICs9IGNvbHNwYW47XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb2x1bW5zR3JvdXA7XG4gICAgfTtcbiAgICBjb25zdCBnZW5lcmF0ZSQxID0gbGlzdCA9PiB7XG4gICAgICBjb25zdCBhY2Nlc3MgPSB7fTtcbiAgICAgIGNvbnN0IGNlbGxzID0gW107XG4gICAgICBjb25zdCB0YWJsZU9wdCA9IGhlYWQobGlzdCkubWFwKHJvd0RhdGEgPT4gcm93RGF0YS5lbGVtZW50KS5iaW5kKHRhYmxlKTtcbiAgICAgIGNvbnN0IGxvY2tlZENvbHVtbnMgPSB0YWJsZU9wdC5iaW5kKGdldExvY2tlZENvbHVtbnNGcm9tVGFibGUpLmdldE9yKHt9KTtcbiAgICAgIGxldCBtYXhSb3dzID0gMDtcbiAgICAgIGxldCBtYXhDb2x1bW5zID0gMDtcbiAgICAgIGxldCByb3dDb3VudCA9IDA7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBhc3M6IGNvbGdyb3VwUm93cyxcbiAgICAgICAgZmFpbDogcm93c1xuICAgICAgfSA9IHBhcnRpdGlvbihsaXN0LCByb3dEYXRhID0+IHJvd0RhdGEuc2VjdGlvbiA9PT0gJ2NvbGdyb3VwJyk7XG4gICAgICBlYWNoKHJvd3MsIHJvd0RhdGEgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50Um93ID0gW107XG4gICAgICAgIGVhY2gocm93RGF0YS5jZWxscywgcm93Q2VsbCA9PiB7XG4gICAgICAgICAgbGV0IHN0YXJ0ID0gMDtcbiAgICAgICAgICB3aGlsZSAoYWNjZXNzW2tleShyb3dDb3VudCwgc3RhcnQpXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdGFydCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpc0xvY2tlZCA9IGhhc05vbk51bGxhYmxlS2V5KGxvY2tlZENvbHVtbnMsIHN0YXJ0LnRvU3RyaW5nKCkpO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBleHRlbmRlZChyb3dDZWxsLmVsZW1lbnQsIHJvd0NlbGwucm93c3Bhbiwgcm93Q2VsbC5jb2xzcGFuLCByb3dDb3VudCwgc3RhcnQsIGlzTG9ja2VkKTtcbiAgICAgICAgICBmb3IgKGxldCBvY2N1cGllZENvbHVtblBvc2l0aW9uID0gMDsgb2NjdXBpZWRDb2x1bW5Qb3NpdGlvbiA8IHJvd0NlbGwuY29sc3Bhbjsgb2NjdXBpZWRDb2x1bW5Qb3NpdGlvbisrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBvY2N1cGllZFJvd1Bvc2l0aW9uID0gMDsgb2NjdXBpZWRSb3dQb3NpdGlvbiA8IHJvd0NlbGwucm93c3Bhbjsgb2NjdXBpZWRSb3dQb3NpdGlvbisrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJvd1Bvc2l0aW9uID0gcm93Q291bnQgKyBvY2N1cGllZFJvd1Bvc2l0aW9uO1xuICAgICAgICAgICAgICBjb25zdCBjb2x1bW5Qb3NpdGlvbiA9IHN0YXJ0ICsgb2NjdXBpZWRDb2x1bW5Qb3NpdGlvbjtcbiAgICAgICAgICAgICAgY29uc3QgbmV3cG9zID0ga2V5KHJvd1Bvc2l0aW9uLCBjb2x1bW5Qb3NpdGlvbik7XG4gICAgICAgICAgICAgIGFjY2Vzc1tuZXdwb3NdID0gY3VycmVudDtcbiAgICAgICAgICAgICAgbWF4Q29sdW1ucyA9IE1hdGgubWF4KG1heENvbHVtbnMsIGNvbHVtblBvc2l0aW9uICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRSb3cucHVzaChjdXJyZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1heFJvd3MrKztcbiAgICAgICAgY2VsbHMucHVzaChyb3dkZXRhaWwocm93RGF0YS5lbGVtZW50LCBjdXJyZW50Um93LCByb3dEYXRhLnNlY3Rpb24pKTtcbiAgICAgICAgcm93Q291bnQrKztcbiAgICAgIH0pO1xuICAgICAgY29uc3Qge2NvbHVtbnMsIGNvbGdyb3Vwc30gPSBsYXN0KGNvbGdyb3VwUm93cykubWFwKHJvd0RhdGEgPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gZ2VuZXJhdGVDb2x1bW5zKHJvd0RhdGEpO1xuICAgICAgICBjb25zdCBjb2xncm91cCQxID0gY29sZ3JvdXAocm93RGF0YS5lbGVtZW50LCB2YWx1ZXMoY29sdW1ucykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbGdyb3VwczogW2NvbGdyb3VwJDFdLFxuICAgICAgICAgIGNvbHVtbnNcbiAgICAgICAgfTtcbiAgICAgIH0pLmdldE9yVGh1bmsoKCkgPT4gKHtcbiAgICAgICAgY29sZ3JvdXBzOiBbXSxcbiAgICAgICAgY29sdW1uczoge31cbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IGdyaWQkMSA9IGdyaWQobWF4Um93cywgbWF4Q29sdW1ucyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBncmlkOiBncmlkJDEsXG4gICAgICAgIGFjY2VzcyxcbiAgICAgICAgYWxsOiBjZWxscyxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgY29sZ3JvdXBzXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZnJvbVRhYmxlID0gdGFibGUgPT4ge1xuICAgICAgY29uc3QgbGlzdCA9IGZyb21UYWJsZSQxKHRhYmxlKTtcbiAgICAgIHJldHVybiBnZW5lcmF0ZSQxKGxpc3QpO1xuICAgIH07XG4gICAgY29uc3QganVzdENlbGxzID0gd2FyZWhvdXNlID0+IGJpbmQod2FyZWhvdXNlLmFsbCwgdyA9PiB3LmNlbGxzKTtcbiAgICBjb25zdCBqdXN0Q29sdW1ucyA9IHdhcmVob3VzZSA9PiB2YWx1ZXMod2FyZWhvdXNlLmNvbHVtbnMpO1xuICAgIGNvbnN0IGhhc0NvbHVtbnMgPSB3YXJlaG91c2UgPT4ga2V5cyh3YXJlaG91c2UuY29sdW1ucykubGVuZ3RoID4gMDtcbiAgICBjb25zdCBnZXRDb2x1bW5BdCA9ICh3YXJlaG91c2UsIGNvbHVtbkluZGV4KSA9PiBPcHRpb25hbC5mcm9tKHdhcmVob3VzZS5jb2x1bW5zW2NvbHVtbkluZGV4XSk7XG4gICAgY29uc3QgV2FyZWhvdXNlID0ge1xuICAgICAgZnJvbVRhYmxlLFxuICAgICAgZ2VuZXJhdGU6IGdlbmVyYXRlJDEsXG4gICAgICBnZXRBdCxcbiAgICAgIGZpbmRJdGVtLFxuICAgICAgZmlsdGVySXRlbXMsXG4gICAgICBqdXN0Q2VsbHMsXG4gICAgICBqdXN0Q29sdW1ucyxcbiAgICAgIGhhc0NvbHVtbnMsXG4gICAgICBnZXRDb2x1bW5BdFxuICAgIH07XG5cbiAgICB2YXIgZ2xvYmFsJDIgPSB0aW55bWNlLnV0aWwuVG9vbHMucmVzb2x2ZSgndGlueW1jZS51dGlsLlRvb2xzJyk7XG5cbiAgICBjb25zdCBnZXRURFRIT3ZlcmFsbFN0eWxlID0gKGRvbSwgZWxtLCBuYW1lKSA9PiB7XG4gICAgICBjb25zdCBjZWxscyA9IGRvbS5zZWxlY3QoJ3RkLHRoJywgZWxtKTtcbiAgICAgIGxldCBmaXJzdENoaWxkU3R5bGU7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdHlsZSA9IGRvbS5nZXRTdHlsZShjZWxsc1tpXSwgbmFtZSk7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChmaXJzdENoaWxkU3R5bGUpKSB7XG4gICAgICAgICAgZmlyc3RDaGlsZFN0eWxlID0gY3VycmVudFN0eWxlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaXJzdENoaWxkU3R5bGUgIT09IGN1cnJlbnRTdHlsZSkge1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZpcnN0Q2hpbGRTdHlsZTtcbiAgICB9O1xuICAgIGNvbnN0IHNldEFsaWduID0gKGVkaXRvciwgZWxtLCBuYW1lKSA9PiB7XG4gICAgICBnbG9iYWwkMi5lYWNoKCdsZWZ0IGNlbnRlciByaWdodCcuc3BsaXQoJyAnKSwgYWxpZ24gPT4ge1xuICAgICAgICBpZiAoYWxpZ24gIT09IG5hbWUpIHtcbiAgICAgICAgICBlZGl0b3IuZm9ybWF0dGVyLnJlbW92ZSgnYWxpZ24nICsgYWxpZ24sIHt9LCBlbG0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgIGVkaXRvci5mb3JtYXR0ZXIuYXBwbHkoJ2FsaWduJyArIG5hbWUsIHt9LCBlbG0pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2V0VkFsaWduID0gKGVkaXRvciwgZWxtLCBuYW1lKSA9PiB7XG4gICAgICBnbG9iYWwkMi5lYWNoKCd0b3AgbWlkZGxlIGJvdHRvbScuc3BsaXQoJyAnKSwgYWxpZ24gPT4ge1xuICAgICAgICBpZiAoYWxpZ24gIT09IG5hbWUpIHtcbiAgICAgICAgICBlZGl0b3IuZm9ybWF0dGVyLnJlbW92ZSgndmFsaWduJyArIGFsaWduLCB7fSwgZWxtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICBlZGl0b3IuZm9ybWF0dGVyLmFwcGx5KCd2YWxpZ24nICsgbmFtZSwge30sIGVsbSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGZpcmVUYWJsZU1vZGlmaWVkID0gKGVkaXRvciwgdGFibGUsIGRhdGEpID0+IHtcbiAgICAgIGVkaXRvci5kaXNwYXRjaCgnVGFibGVNb2RpZmllZCcsIHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgdGFibGVcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCB0b051bWJlciA9IChweCwgZmFsbGJhY2spID0+IHRvRmxvYXQocHgpLmdldE9yKGZhbGxiYWNrKTtcbiAgICBjb25zdCBnZXRQcm9wID0gKGVsZW1lbnQsIG5hbWUsIGZhbGxiYWNrKSA9PiB0b051bWJlcihnZXQkMShlbGVtZW50LCBuYW1lKSwgZmFsbGJhY2spO1xuICAgIGNvbnN0IGNhbGNDb250ZW50Qm94U2l6ZSA9IChlbGVtZW50LCBzaXplLCB1cHBlciwgbG93ZXIpID0+IHtcbiAgICAgIGNvbnN0IHBhZGRpbmdVcHBlciA9IGdldFByb3AoZWxlbWVudCwgYHBhZGRpbmctJHsgdXBwZXIgfWAsIDApO1xuICAgICAgY29uc3QgcGFkZGluZ0xvd2VyID0gZ2V0UHJvcChlbGVtZW50LCBgcGFkZGluZy0keyBsb3dlciB9YCwgMCk7XG4gICAgICBjb25zdCBib3JkZXJVcHBlciA9IGdldFByb3AoZWxlbWVudCwgYGJvcmRlci0keyB1cHBlciB9LXdpZHRoYCwgMCk7XG4gICAgICBjb25zdCBib3JkZXJMb3dlciA9IGdldFByb3AoZWxlbWVudCwgYGJvcmRlci0keyBsb3dlciB9LXdpZHRoYCwgMCk7XG4gICAgICByZXR1cm4gc2l6ZSAtIHBhZGRpbmdVcHBlciAtIHBhZGRpbmdMb3dlciAtIGJvcmRlclVwcGVyIC0gYm9yZGVyTG93ZXI7XG4gICAgfTtcbiAgICBjb25zdCBnZXRDYWxjdWxhdGVkV2lkdGggPSAoZWxlbWVudCwgYm94U2l6aW5nKSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGNvbnN0IHdpZHRoID0gZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHx8IGRvbS5vZmZzZXRXaWR0aDtcbiAgICAgIHJldHVybiBib3hTaXppbmcgPT09ICdib3JkZXItYm94JyA/IHdpZHRoIDogY2FsY0NvbnRlbnRCb3hTaXplKGVsZW1lbnQsIHdpZHRoLCAnbGVmdCcsICdyaWdodCcpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0SW5uZXJXaWR0aCA9IGVsZW1lbnQgPT4gZ2V0Q2FsY3VsYXRlZFdpZHRoKGVsZW1lbnQsICdjb250ZW50LWJveCcpO1xuXG4gICAgY29uc3QgZ2V0SW5uZXIgPSBnZXRJbm5lcldpZHRoO1xuXG4gICAgdmFyIGdsb2JhbCQxID0gdGlueW1jZS51dGlsLlRvb2xzLnJlc29sdmUoJ3RpbnltY2UuRW52Jyk7XG5cbiAgICBjb25zdCBkZWZhdWx0VGFibGVUb29sYmFyID0gJ3RhYmxlcHJvcHMgdGFibGVkZWxldGUgfCB0YWJsZWluc2VydHJvd2JlZm9yZSB0YWJsZWluc2VydHJvd2FmdGVyIHRhYmxlZGVsZXRlcm93IHwgdGFibGVpbnNlcnRjb2xiZWZvcmUgdGFibGVpbnNlcnRjb2xhZnRlciB0YWJsZWRlbGV0ZWNvbCc7XG4gICAgY29uc3QgZGVmYXVsdENlbGxCb3JkZXJXaWR0aHMgPSByYW5nZSg1LCBpID0+IHtcbiAgICAgIGNvbnN0IHNpemUgPSBgJHsgaSArIDEgfXB4YDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBzaXplLFxuICAgICAgICB2YWx1ZTogc2l6ZVxuICAgICAgfTtcbiAgICB9KTtcbiAgICBjb25zdCBkZWZhdWx0Q2VsbEJvcmRlclN0eWxlcyA9IG1hcChbXG4gICAgICAnU29saWQnLFxuICAgICAgJ0RvdHRlZCcsXG4gICAgICAnRGFzaGVkJyxcbiAgICAgICdEb3VibGUnLFxuICAgICAgJ0dyb292ZScsXG4gICAgICAnUmlkZ2UnLFxuICAgICAgJ0luc2V0JyxcbiAgICAgICdPdXRzZXQnLFxuICAgICAgJ05vbmUnLFxuICAgICAgJ0hpZGRlbidcbiAgICBdLCB0eXBlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiB0eXBlLFxuICAgICAgICB2YWx1ZTogdHlwZS50b0xvd2VyQ2FzZSgpXG4gICAgICB9O1xuICAgIH0pO1xuICAgIGNvbnN0IGRlZmF1bHRXaWR0aCA9ICcxMDAlJztcbiAgICBjb25zdCBnZXRQaXhlbEZvcmNlZFdpZHRoID0gZWRpdG9yID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBwYXJlbnRCbG9jayA9IChfYSA9IGRvbS5nZXRQYXJlbnQoZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCgpLCBkb20uaXNCbG9jaykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGVkaXRvci5nZXRCb2R5KCk7XG4gICAgICByZXR1cm4gZ2V0SW5uZXIoU3VnYXJFbGVtZW50LmZyb21Eb20ocGFyZW50QmxvY2spKSArICdweCc7XG4gICAgfTtcbiAgICBjb25zdCBkZXRlcm1pbmVEZWZhdWx0U3R5bGVzID0gKGVkaXRvciwgZGVmYXVsdFN0eWxlcykgPT4ge1xuICAgICAgaWYgKGlzUmVzcG9uc2l2ZUZvcmNlZChlZGl0b3IpIHx8ICFzaG91bGRTdHlsZVdpdGhDc3MoZWRpdG9yKSkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFN0eWxlcztcbiAgICAgIH0gZWxzZSBpZiAoaXNQaXhlbHNGb3JjZWQoZWRpdG9yKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmRlZmF1bHRTdHlsZXMsXG4gICAgICAgICAgd2lkdGg6IGdldFBpeGVsRm9yY2VkV2lkdGgoZWRpdG9yKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5kZWZhdWx0U3R5bGVzLFxuICAgICAgICAgIHdpZHRoOiBkZWZhdWx0V2lkdGhcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGRldGVybWluZURlZmF1bHRBdHRyaWJ1dGVzID0gKGVkaXRvciwgZGVmYXVsdEF0dHJpYnV0ZXMpID0+IHtcbiAgICAgIGlmIChpc1Jlc3BvbnNpdmVGb3JjZWQoZWRpdG9yKSB8fCBzaG91bGRTdHlsZVdpdGhDc3MoZWRpdG9yKSkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdEF0dHJpYnV0ZXM7XG4gICAgICB9IGVsc2UgaWYgKGlzUGl4ZWxzRm9yY2VkKGVkaXRvcikpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5kZWZhdWx0QXR0cmlidXRlcyxcbiAgICAgICAgICB3aWR0aDogZ2V0UGl4ZWxGb3JjZWRXaWR0aChlZGl0b3IpXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmRlZmF1bHRBdHRyaWJ1dGVzLFxuICAgICAgICAgIHdpZHRoOiBkZWZhdWx0V2lkdGhcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG9wdGlvbiA9IG5hbWUgPT4gZWRpdG9yID0+IGVkaXRvci5vcHRpb25zLmdldChuYW1lKTtcbiAgICBjb25zdCByZWdpc3RlciA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCByZWdpc3Rlck9wdGlvbiA9IGVkaXRvci5vcHRpb25zLnJlZ2lzdGVyO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3RhYmxlX2JvcmRlcl93aWR0aHMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ29iamVjdFtdJyxcbiAgICAgICAgZGVmYXVsdDogZGVmYXVsdENlbGxCb3JkZXJXaWR0aHNcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3RhYmxlX2JvcmRlcl9zdHlsZXMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ29iamVjdFtdJyxcbiAgICAgICAgZGVmYXVsdDogZGVmYXVsdENlbGxCb3JkZXJTdHlsZXNcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3RhYmxlX2NlbGxfYWR2dGFiJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGFibGVfcm93X2FkdnRhYicsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3RhYmxlX2FkdnRhYicsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3RhYmxlX2FwcGVhcmFuY2Vfb3B0aW9ucycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3RhYmxlX2dyaWQnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiAhZ2xvYmFsJDEuZGV2aWNlVHlwZS5pc1RvdWNoKClcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3RhYmxlX2NlbGxfY2xhc3NfbGlzdCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnb2JqZWN0W10nLFxuICAgICAgICBkZWZhdWx0OiBbXVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGFibGVfcm93X2NsYXNzX2xpc3QnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ29iamVjdFtdJyxcbiAgICAgICAgZGVmYXVsdDogW11cbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3RhYmxlX2NsYXNzX2xpc3QnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ29iamVjdFtdJyxcbiAgICAgICAgZGVmYXVsdDogW11cbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3RhYmxlX3Rvb2xiYXInLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6IGRlZmF1bHRUYWJsZVRvb2xiYXJcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3RhYmxlX2JhY2tncm91bmRfY29sb3JfbWFwJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdvYmplY3RbXScsXG4gICAgICAgIGRlZmF1bHQ6IFtdXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd0YWJsZV9ib3JkZXJfY29sb3JfbWFwJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdvYmplY3RbXScsXG4gICAgICAgIGRlZmF1bHQ6IFtdXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFRhYmxlU2l6aW5nTW9kZSA9IG9wdGlvbigndGFibGVfc2l6aW5nX21vZGUnKTtcbiAgICBjb25zdCBnZXRUYWJsZUJvcmRlcldpZHRocyA9IG9wdGlvbigndGFibGVfYm9yZGVyX3dpZHRocycpO1xuICAgIGNvbnN0IGdldFRhYmxlQm9yZGVyU3R5bGVzID0gb3B0aW9uKCd0YWJsZV9ib3JkZXJfc3R5bGVzJyk7XG4gICAgY29uc3QgaGFzQWR2YW5jZWRDZWxsVGFiID0gb3B0aW9uKCd0YWJsZV9jZWxsX2FkdnRhYicpO1xuICAgIGNvbnN0IGhhc0FkdmFuY2VkUm93VGFiID0gb3B0aW9uKCd0YWJsZV9yb3dfYWR2dGFiJyk7XG4gICAgY29uc3QgaGFzQWR2YW5jZWRUYWJsZVRhYiA9IG9wdGlvbigndGFibGVfYWR2dGFiJyk7XG4gICAgY29uc3QgaGFzQXBwZWFyYW5jZU9wdGlvbnMgPSBvcHRpb24oJ3RhYmxlX2FwcGVhcmFuY2Vfb3B0aW9ucycpO1xuICAgIGNvbnN0IGhhc1RhYmxlR3JpZCA9IG9wdGlvbigndGFibGVfZ3JpZCcpO1xuICAgIGNvbnN0IHNob3VsZFN0eWxlV2l0aENzcyA9IG9wdGlvbigndGFibGVfc3R5bGVfYnlfY3NzJyk7XG4gICAgY29uc3QgZ2V0Q2VsbENsYXNzTGlzdCA9IG9wdGlvbigndGFibGVfY2VsbF9jbGFzc19saXN0Jyk7XG4gICAgY29uc3QgZ2V0Um93Q2xhc3NMaXN0ID0gb3B0aW9uKCd0YWJsZV9yb3dfY2xhc3NfbGlzdCcpO1xuICAgIGNvbnN0IGdldFRhYmxlQ2xhc3NMaXN0ID0gb3B0aW9uKCd0YWJsZV9jbGFzc19saXN0Jyk7XG4gICAgY29uc3QgZ2V0VG9vbGJhciA9IG9wdGlvbigndGFibGVfdG9vbGJhcicpO1xuICAgIGNvbnN0IGdldFRhYmxlQmFja2dyb3VuZENvbG9yTWFwID0gb3B0aW9uKCd0YWJsZV9iYWNrZ3JvdW5kX2NvbG9yX21hcCcpO1xuICAgIGNvbnN0IGdldFRhYmxlQm9yZGVyQ29sb3JNYXAgPSBvcHRpb24oJ3RhYmxlX2JvcmRlcl9jb2xvcl9tYXAnKTtcbiAgICBjb25zdCBpc1BpeGVsc0ZvcmNlZCA9IGVkaXRvciA9PiBnZXRUYWJsZVNpemluZ01vZGUoZWRpdG9yKSA9PT0gJ2ZpeGVkJztcbiAgICBjb25zdCBpc1Jlc3BvbnNpdmVGb3JjZWQgPSBlZGl0b3IgPT4gZ2V0VGFibGVTaXppbmdNb2RlKGVkaXRvcikgPT09ICdyZXNwb25zaXZlJztcbiAgICBjb25zdCBnZXREZWZhdWx0U3R5bGVzID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBlZGl0b3Iub3B0aW9ucztcbiAgICAgIGNvbnN0IGRlZmF1bHRTdHlsZXMgPSBvcHRpb25zLmdldCgndGFibGVfZGVmYXVsdF9zdHlsZXMnKTtcbiAgICAgIHJldHVybiBvcHRpb25zLmlzU2V0KCd0YWJsZV9kZWZhdWx0X3N0eWxlcycpID8gZGVmYXVsdFN0eWxlcyA6IGRldGVybWluZURlZmF1bHRTdHlsZXMoZWRpdG9yLCBkZWZhdWx0U3R5bGVzKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldERlZmF1bHRBdHRyaWJ1dGVzID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBlZGl0b3Iub3B0aW9ucztcbiAgICAgIGNvbnN0IGRlZmF1bHRBdHRyaWJ1dGVzID0gb3B0aW9ucy5nZXQoJ3RhYmxlX2RlZmF1bHRfYXR0cmlidXRlcycpO1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaXNTZXQoJ3RhYmxlX2RlZmF1bHRfYXR0cmlidXRlcycpID8gZGVmYXVsdEF0dHJpYnV0ZXMgOiBkZXRlcm1pbmVEZWZhdWx0QXR0cmlidXRlcyhlZGl0b3IsIGRlZmF1bHRBdHRyaWJ1dGVzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNXaXRoaW4gPSAoYm91bmRzLCBkZXRhaWwpID0+IHtcbiAgICAgIHJldHVybiBkZXRhaWwuY29sdW1uID49IGJvdW5kcy5zdGFydENvbCAmJiBkZXRhaWwuY29sdW1uICsgZGV0YWlsLmNvbHNwYW4gLSAxIDw9IGJvdW5kcy5maW5pc2hDb2wgJiYgZGV0YWlsLnJvdyA+PSBib3VuZHMuc3RhcnRSb3cgJiYgZGV0YWlsLnJvdyArIGRldGFpbC5yb3dzcGFuIC0gMSA8PSBib3VuZHMuZmluaXNoUm93O1xuICAgIH07XG4gICAgY29uc3QgaXNSZWN0YW5ndWxhciA9ICh3YXJlaG91c2UsIGJvdW5kcykgPT4ge1xuICAgICAgbGV0IGlzUmVjdCA9IHRydWU7XG4gICAgICBjb25zdCBkZXRhaWxJc1dpdGhpbiA9IGN1cnJ5KGlzV2l0aGluLCBib3VuZHMpO1xuICAgICAgZm9yIChsZXQgaSA9IGJvdW5kcy5zdGFydFJvdzsgaSA8PSBib3VuZHMuZmluaXNoUm93OyBpKyspIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IGJvdW5kcy5zdGFydENvbDsgaiA8PSBib3VuZHMuZmluaXNoQ29sOyBqKyspIHtcbiAgICAgICAgICBpc1JlY3QgPSBpc1JlY3QgJiYgV2FyZWhvdXNlLmdldEF0KHdhcmVob3VzZSwgaSwgaikuZXhpc3RzKGRldGFpbElzV2l0aGluKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzUmVjdCA/IE9wdGlvbmFsLnNvbWUoYm91bmRzKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0Qm91bmRzID0gKGRldGFpbEEsIGRldGFpbEIpID0+IHtcbiAgICAgIHJldHVybiBib3VuZHMoTWF0aC5taW4oZGV0YWlsQS5yb3csIGRldGFpbEIucm93KSwgTWF0aC5taW4oZGV0YWlsQS5jb2x1bW4sIGRldGFpbEIuY29sdW1uKSwgTWF0aC5tYXgoZGV0YWlsQS5yb3cgKyBkZXRhaWxBLnJvd3NwYW4gLSAxLCBkZXRhaWxCLnJvdyArIGRldGFpbEIucm93c3BhbiAtIDEpLCBNYXRoLm1heChkZXRhaWxBLmNvbHVtbiArIGRldGFpbEEuY29sc3BhbiAtIDEsIGRldGFpbEIuY29sdW1uICsgZGV0YWlsQi5jb2xzcGFuIC0gMSkpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0QW55Qm94ID0gKHdhcmVob3VzZSwgc3RhcnRDZWxsLCBmaW5pc2hDZWxsKSA9PiB7XG4gICAgICBjb25zdCBzdGFydENvb3JkcyA9IFdhcmVob3VzZS5maW5kSXRlbSh3YXJlaG91c2UsIHN0YXJ0Q2VsbCwgZXEpO1xuICAgICAgY29uc3QgZmluaXNoQ29vcmRzID0gV2FyZWhvdXNlLmZpbmRJdGVtKHdhcmVob3VzZSwgZmluaXNoQ2VsbCwgZXEpO1xuICAgICAgcmV0dXJuIHN0YXJ0Q29vcmRzLmJpbmQoc2MgPT4ge1xuICAgICAgICByZXR1cm4gZmluaXNoQ29vcmRzLm1hcChmYyA9PiB7XG4gICAgICAgICAgcmV0dXJuIGdldEJvdW5kcyhzYywgZmMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Qm94JDEgPSAod2FyZWhvdXNlLCBzdGFydENlbGwsIGZpbmlzaENlbGwpID0+IHtcbiAgICAgIHJldHVybiBnZXRBbnlCb3god2FyZWhvdXNlLCBzdGFydENlbGwsIGZpbmlzaENlbGwpLmJpbmQoYm91bmRzID0+IHtcbiAgICAgICAgcmV0dXJuIGlzUmVjdGFuZ3VsYXIod2FyZWhvdXNlLCBib3VuZHMpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldEJveCA9ICh0YWJsZSwgZmlyc3QsIGxhc3QpID0+IHtcbiAgICAgIGNvbnN0IHdhcmVob3VzZSA9IGdldFdhcmVob3VzZSh0YWJsZSk7XG4gICAgICByZXR1cm4gZ2V0Qm94JDEod2FyZWhvdXNlLCBmaXJzdCwgbGFzdCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRXYXJlaG91c2UgPSBXYXJlaG91c2UuZnJvbVRhYmxlO1xuXG4gICAgY29uc3QgYmVmb3JlID0gKG1hcmtlciwgZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50JDEgPSBwYXJlbnQobWFya2VyKTtcbiAgICAgIHBhcmVudCQxLmVhY2godiA9PiB7XG4gICAgICAgIHYuZG9tLmluc2VydEJlZm9yZShlbGVtZW50LmRvbSwgbWFya2VyLmRvbSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFmdGVyJDEgPSAobWFya2VyLCBlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBzaWJsaW5nID0gbmV4dFNpYmxpbmcobWFya2VyKTtcbiAgICAgIHNpYmxpbmcuZm9sZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmVudCQxID0gcGFyZW50KG1hcmtlcik7XG4gICAgICAgIHBhcmVudCQxLmVhY2godiA9PiB7XG4gICAgICAgICAgYXBwZW5kJDEodiwgZWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgdiA9PiB7XG4gICAgICAgIGJlZm9yZSh2LCBlbGVtZW50KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcHJlcGVuZCA9IChwYXJlbnQsIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGZpcnN0Q2hpbGQkMSA9IGZpcnN0Q2hpbGQocGFyZW50KTtcbiAgICAgIGZpcnN0Q2hpbGQkMS5mb2xkKCgpID0+IHtcbiAgICAgICAgYXBwZW5kJDEocGFyZW50LCBlbGVtZW50KTtcbiAgICAgIH0sIHYgPT4ge1xuICAgICAgICBwYXJlbnQuZG9tLmluc2VydEJlZm9yZShlbGVtZW50LmRvbSwgdi5kb20pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBhcHBlbmQkMSA9IChwYXJlbnQsIGVsZW1lbnQpID0+IHtcbiAgICAgIHBhcmVudC5kb20uYXBwZW5kQ2hpbGQoZWxlbWVudC5kb20pO1xuICAgIH07XG4gICAgY29uc3Qgd3JhcCA9IChlbGVtZW50LCB3cmFwcGVyKSA9PiB7XG4gICAgICBiZWZvcmUoZWxlbWVudCwgd3JhcHBlcik7XG4gICAgICBhcHBlbmQkMSh3cmFwcGVyLCBlbGVtZW50KTtcbiAgICB9O1xuXG4gICAgY29uc3QgYWZ0ZXIgPSAobWFya2VyLCBlbGVtZW50cykgPT4ge1xuICAgICAgZWFjaChlbGVtZW50cywgKHgsIGkpID0+IHtcbiAgICAgICAgY29uc3QgZSA9IGkgPT09IDAgPyBtYXJrZXIgOiBlbGVtZW50c1tpIC0gMV07XG4gICAgICAgIGFmdGVyJDEoZSwgeCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGVuZCA9IChwYXJlbnQsIGVsZW1lbnRzKSA9PiB7XG4gICAgICBlYWNoKGVsZW1lbnRzLCB4ID0+IHtcbiAgICAgICAgYXBwZW5kJDEocGFyZW50LCB4KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZW1vdmUgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgaWYgKGRvbS5wYXJlbnROb2RlICE9PSBudWxsKSB7XG4gICAgICAgIGRvbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRvbSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB1bndyYXAgPSB3cmFwcGVyID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gY2hpbGRyZW4kMyh3cmFwcGVyKTtcbiAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFmdGVyKHdyYXBwZXIsIGNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICAgIHJlbW92ZSh3cmFwcGVyKTtcbiAgICB9O1xuXG4gICAgY29uc3QgTm9kZVZhbHVlID0gKGlzLCBuYW1lKSA9PiB7XG4gICAgICBjb25zdCBnZXQgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgaWYgKCFpcyhlbGVtZW50KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG9ubHkgZ2V0ICcgKyBuYW1lICsgJyB2YWx1ZSBvZiBhICcgKyBuYW1lICsgJyBub2RlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldE9wdGlvbihlbGVtZW50KS5nZXRPcignJyk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0T3B0aW9uID0gZWxlbWVudCA9PiBpcyhlbGVtZW50KSA/IE9wdGlvbmFsLmZyb20oZWxlbWVudC5kb20ubm9kZVZhbHVlKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIGNvbnN0IHNldCA9IChlbGVtZW50LCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoIWlzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBzZXQgcmF3ICcgKyBuYW1lICsgJyB2YWx1ZSBvZiBhICcgKyBuYW1lICsgJyBub2RlJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudC5kb20ubm9kZVZhbHVlID0gdmFsdWU7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0LFxuICAgICAgICBnZXRPcHRpb24sXG4gICAgICAgIHNldFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgYXBpID0gTm9kZVZhbHVlKGlzVGV4dCwgJ3RleHQnKTtcbiAgICBjb25zdCBnZXQgPSBlbGVtZW50ID0+IGFwaS5nZXQoZWxlbWVudCk7XG4gICAgY29uc3Qgc2V0ID0gKGVsZW1lbnQsIHZhbHVlKSA9PiBhcGkuc2V0KGVsZW1lbnQsIHZhbHVlKTtcblxuICAgIHZhciBUYWdCb3VuZGFyaWVzID0gW1xuICAgICAgJ2JvZHknLFxuICAgICAgJ3AnLFxuICAgICAgJ2RpdicsXG4gICAgICAnYXJ0aWNsZScsXG4gICAgICAnYXNpZGUnLFxuICAgICAgJ2ZpZ2NhcHRpb24nLFxuICAgICAgJ2ZpZ3VyZScsXG4gICAgICAnZm9vdGVyJyxcbiAgICAgICdoZWFkZXInLFxuICAgICAgJ25hdicsXG4gICAgICAnc2VjdGlvbicsXG4gICAgICAnb2wnLFxuICAgICAgJ3VsJyxcbiAgICAgICdsaScsXG4gICAgICAndGFibGUnLFxuICAgICAgJ3RoZWFkJyxcbiAgICAgICd0Ym9keScsXG4gICAgICAndGZvb3QnLFxuICAgICAgJ2NhcHRpb24nLFxuICAgICAgJ3RyJyxcbiAgICAgICd0ZCcsXG4gICAgICAndGgnLFxuICAgICAgJ2gxJyxcbiAgICAgICdoMicsXG4gICAgICAnaDMnLFxuICAgICAgJ2g0JyxcbiAgICAgICdoNScsXG4gICAgICAnaDYnLFxuICAgICAgJ2Jsb2NrcXVvdGUnLFxuICAgICAgJ3ByZScsXG4gICAgICAnYWRkcmVzcydcbiAgICBdO1xuXG4gICAgdmFyIERvbVVuaXZlcnNlID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2xvbmUkMSA9IGVsZW1lbnQgPT4ge1xuICAgICAgICByZXR1cm4gU3VnYXJFbGVtZW50LmZyb21Eb20oZWxlbWVudC5kb20uY2xvbmVOb2RlKGZhbHNlKSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZG9jdW1lbnQgPSBlbGVtZW50ID0+IGRvY3VtZW50T3JPd25lcihlbGVtZW50KS5kb207XG4gICAgICBjb25zdCBpc0JvdW5kYXJ5ID0gZWxlbWVudCA9PiB7XG4gICAgICAgIGlmICghaXNFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lKGVsZW1lbnQpID09PSAnYm9keScpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGFpbnMoVGFnQm91bmRhcmllcywgbmFtZShlbGVtZW50KSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNFbXB0eVRhZyA9IGVsZW1lbnQgPT4ge1xuICAgICAgICBpZiAoIWlzRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGFpbnMoW1xuICAgICAgICAgICdicicsXG4gICAgICAgICAgJ2ltZycsXG4gICAgICAgICAgJ2hyJyxcbiAgICAgICAgICAnaW5wdXQnXG4gICAgICAgIF0sIG5hbWUoZWxlbWVudCkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzTm9uRWRpdGFibGUgPSBlbGVtZW50ID0+IGlzRWxlbWVudChlbGVtZW50KSAmJiBnZXQkMihlbGVtZW50LCAnY29udGVudGVkaXRhYmxlJykgPT09ICdmYWxzZSc7XG4gICAgICBjb25zdCBjb21wYXJlUG9zaXRpb24gPSAoZWxlbWVudCwgb3RoZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuZG9tLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG90aGVyLmRvbSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgY29weUF0dHJpYnV0ZXNUbyA9IChzb3VyY2UsIGRlc3RpbmF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGFzID0gY2xvbmUoc291cmNlKTtcbiAgICAgICAgc2V0QWxsKGRlc3RpbmF0aW9uLCBhcyk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNTcGVjaWFsID0gZWxlbWVudCA9PiB7XG4gICAgICAgIGNvbnN0IHRhZyA9IG5hbWUoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBjb250YWlucyhbXG4gICAgICAgICAgJ3NjcmlwdCcsXG4gICAgICAgICAgJ25vc2NyaXB0JyxcbiAgICAgICAgICAnaWZyYW1lJyxcbiAgICAgICAgICAnbm9mcmFtZXMnLFxuICAgICAgICAgICdub2VtYmVkJyxcbiAgICAgICAgICAndGl0bGUnLFxuICAgICAgICAgICdzdHlsZScsXG4gICAgICAgICAgJ3RleHRhcmVhJyxcbiAgICAgICAgICAneG1wJ1xuICAgICAgICBdLCB0YWcpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldExhbmd1YWdlID0gZWxlbWVudCA9PiBpc0VsZW1lbnQoZWxlbWVudCkgPyBnZXRPcHQoZWxlbWVudCwgJ2xhbmcnKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVwOiBjb25zdGFudCh7XG4gICAgICAgICAgc2VsZWN0b3I6IGFuY2VzdG9yLFxuICAgICAgICAgIGNsb3Nlc3Q6IGNsb3Nlc3QkMSxcbiAgICAgICAgICBwcmVkaWNhdGU6IGFuY2VzdG9yJDEsXG4gICAgICAgICAgYWxsOiBwYXJlbnRzXG4gICAgICAgIH0pLFxuICAgICAgICBkb3duOiBjb25zdGFudCh7XG4gICAgICAgICAgc2VsZWN0b3I6IGRlc2NlbmRhbnRzLFxuICAgICAgICAgIHByZWRpY2F0ZTogZGVzY2VuZGFudHMkMVxuICAgICAgICB9KSxcbiAgICAgICAgc3R5bGVzOiBjb25zdGFudCh7XG4gICAgICAgICAgZ2V0OiBnZXQkMSxcbiAgICAgICAgICBnZXRSYXc6IGdldFJhdyxcbiAgICAgICAgICBzZXQ6IHNldCQxLFxuICAgICAgICAgIHJlbW92ZTogcmVtb3ZlJDFcbiAgICAgICAgfSksXG4gICAgICAgIGF0dHJzOiBjb25zdGFudCh7XG4gICAgICAgICAgZ2V0OiBnZXQkMixcbiAgICAgICAgICBzZXQ6IHNldCQyLFxuICAgICAgICAgIHJlbW92ZTogcmVtb3ZlJDIsXG4gICAgICAgICAgY29weVRvOiBjb3B5QXR0cmlidXRlc1RvXG4gICAgICAgIH0pLFxuICAgICAgICBpbnNlcnQ6IGNvbnN0YW50KHtcbiAgICAgICAgICBiZWZvcmU6IGJlZm9yZSxcbiAgICAgICAgICBhZnRlcjogYWZ0ZXIkMSxcbiAgICAgICAgICBhZnRlckFsbDogYWZ0ZXIsXG4gICAgICAgICAgYXBwZW5kOiBhcHBlbmQkMSxcbiAgICAgICAgICBhcHBlbmRBbGw6IGFwcGVuZCxcbiAgICAgICAgICBwcmVwZW5kOiBwcmVwZW5kLFxuICAgICAgICAgIHdyYXA6IHdyYXBcbiAgICAgICAgfSksXG4gICAgICAgIHJlbW92ZTogY29uc3RhbnQoe1xuICAgICAgICAgIHVud3JhcDogdW53cmFwLFxuICAgICAgICAgIHJlbW92ZTogcmVtb3ZlXG4gICAgICAgIH0pLFxuICAgICAgICBjcmVhdGU6IGNvbnN0YW50KHtcbiAgICAgICAgICBudTogU3VnYXJFbGVtZW50LmZyb21UYWcsXG4gICAgICAgICAgY2xvbmU6IGNsb25lJDEsXG4gICAgICAgICAgdGV4dDogU3VnYXJFbGVtZW50LmZyb21UZXh0XG4gICAgICAgIH0pLFxuICAgICAgICBxdWVyeTogY29uc3RhbnQoe1xuICAgICAgICAgIGNvbXBhcmVQb3NpdGlvbixcbiAgICAgICAgICBwcmV2U2libGluZzogcHJldlNpYmxpbmcsXG4gICAgICAgICAgbmV4dFNpYmxpbmc6IG5leHRTaWJsaW5nXG4gICAgICAgIH0pLFxuICAgICAgICBwcm9wZXJ0eTogY29uc3RhbnQoe1xuICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbiQzLFxuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgcGFyZW50OiBwYXJlbnQsXG4gICAgICAgICAgZG9jdW1lbnQsXG4gICAgICAgICAgaXNUZXh0OiBpc1RleHQsXG4gICAgICAgICAgaXNDb21tZW50OiBpc0NvbW1lbnQsXG4gICAgICAgICAgaXNFbGVtZW50OiBpc0VsZW1lbnQsXG4gICAgICAgICAgaXNTcGVjaWFsLFxuICAgICAgICAgIGdldExhbmd1YWdlLFxuICAgICAgICAgIGdldFRleHQ6IGdldCxcbiAgICAgICAgICBzZXRUZXh0OiBzZXQsXG4gICAgICAgICAgaXNCb3VuZGFyeSxcbiAgICAgICAgICBpc0VtcHR5VGFnLFxuICAgICAgICAgIGlzTm9uRWRpdGFibGVcbiAgICAgICAgfSksXG4gICAgICAgIGVxOiBlcSxcbiAgICAgICAgaXM6IGlzJDFcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGFsbCA9ICh1bml2ZXJzZSwgbG9vaywgZWxlbWVudHMsIGYpID0+IHtcbiAgICAgIGNvbnN0IGhlYWQgPSBlbGVtZW50c1swXTtcbiAgICAgIGNvbnN0IHRhaWwgPSBlbGVtZW50cy5zbGljZSgxKTtcbiAgICAgIHJldHVybiBmKHVuaXZlcnNlLCBsb29rLCBoZWFkLCB0YWlsKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uZUFsbCA9ICh1bml2ZXJzZSwgbG9vaywgZWxlbWVudHMpID0+IHtcbiAgICAgIHJldHVybiBlbGVtZW50cy5sZW5ndGggPiAwID8gYWxsKHVuaXZlcnNlLCBsb29rLCBlbGVtZW50cywgdW5zYWZlT25lKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IHVuc2FmZU9uZSA9ICh1bml2ZXJzZSwgbG9vaywgaGVhZCwgdGFpbCkgPT4ge1xuICAgICAgY29uc3Qgc3RhcnQgPSBsb29rKHVuaXZlcnNlLCBoZWFkKTtcbiAgICAgIHJldHVybiBmb2xkcih0YWlsLCAoYiwgYSkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gbG9vayh1bml2ZXJzZSwgYSk7XG4gICAgICAgIHJldHVybiBjb21tb25FbGVtZW50KHVuaXZlcnNlLCBiLCBjdXJyZW50KTtcbiAgICAgIH0sIHN0YXJ0KTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbW1vbkVsZW1lbnQgPSAodW5pdmVyc2UsIHN0YXJ0LCBlbmQpID0+IHtcbiAgICAgIHJldHVybiBzdGFydC5iaW5kKHMgPT4ge1xuICAgICAgICByZXR1cm4gZW5kLmZpbHRlcihjdXJyeSh1bml2ZXJzZS5lcSwgcykpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNoYXJlZE9uZSQxID0gb25lQWxsO1xuXG4gICAgY29uc3QgdW5pdmVyc2UgPSBEb21Vbml2ZXJzZSgpO1xuICAgIGNvbnN0IHNoYXJlZE9uZSA9IChsb29rLCBlbGVtZW50cykgPT4ge1xuICAgICAgcmV0dXJuIHNoYXJlZE9uZSQxKHVuaXZlcnNlLCAoX3VuaXZlcnNlLCBlbGVtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBsb29rKGVsZW1lbnQpO1xuICAgICAgfSwgZWxlbWVudHMpO1xuICAgIH07XG5cbiAgICBjb25zdCBsb29rdXBUYWJsZSA9IGNvbnRhaW5lciA9PiB7XG4gICAgICByZXR1cm4gYW5jZXN0b3IoY29udGFpbmVyLCAndGFibGUnKTtcbiAgICB9O1xuICAgIGNvbnN0IHJldHJpZXZlJDEgPSAoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xuICAgICAgY29uc3Qgc2VscyA9IGRlc2NlbmRhbnRzKGNvbnRhaW5lciwgc2VsZWN0b3IpO1xuICAgICAgcmV0dXJuIHNlbHMubGVuZ3RoID4gMCA/IE9wdGlvbmFsLnNvbWUoc2VscykgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRFZGdlcyA9IChjb250YWluZXIsIGZpcnN0U2VsZWN0ZWRTZWxlY3RvciwgbGFzdFNlbGVjdGVkU2VsZWN0b3IpID0+IHtcbiAgICAgIHJldHVybiBkZXNjZW5kYW50KGNvbnRhaW5lciwgZmlyc3RTZWxlY3RlZFNlbGVjdG9yKS5iaW5kKGZpcnN0ID0+IHtcbiAgICAgICAgcmV0dXJuIGRlc2NlbmRhbnQoY29udGFpbmVyLCBsYXN0U2VsZWN0ZWRTZWxlY3RvcikuYmluZChsYXN0ID0+IHtcbiAgICAgICAgICByZXR1cm4gc2hhcmVkT25lKGxvb2t1cFRhYmxlLCBbXG4gICAgICAgICAgICBmaXJzdCxcbiAgICAgICAgICAgIGxhc3RcbiAgICAgICAgICBdKS5tYXAodGFibGUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZmlyc3QsXG4gICAgICAgICAgICAgIGxhc3QsXG4gICAgICAgICAgICAgIHRhYmxlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZXRyaWV2ZSA9IChjb250YWluZXIsIHNlbGVjdG9yKSA9PiB7XG4gICAgICByZXR1cm4gcmV0cmlldmUkMShjb250YWluZXIsIHNlbGVjdG9yKTtcbiAgICB9O1xuICAgIGNvbnN0IHJldHJpZXZlQm94ID0gKGNvbnRhaW5lciwgZmlyc3RTZWxlY3RlZFNlbGVjdG9yLCBsYXN0U2VsZWN0ZWRTZWxlY3RvcikgPT4ge1xuICAgICAgcmV0dXJuIGdldEVkZ2VzKGNvbnRhaW5lciwgZmlyc3RTZWxlY3RlZFNlbGVjdG9yLCBsYXN0U2VsZWN0ZWRTZWxlY3RvcikuYmluZChlZGdlcyA9PiB7XG4gICAgICAgIGNvbnN0IGlzUm9vdCA9IGFuY2VzdG9yID0+IHtcbiAgICAgICAgICByZXR1cm4gZXEoY29udGFpbmVyLCBhbmNlc3Rvcik7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNlY3Rpb25TZWxlY3RvciA9ICd0aGVhZCx0Zm9vdCx0Ym9keSx0YWJsZSc7XG4gICAgICAgIGNvbnN0IGZpcnN0QW5jZXN0b3IgPSBhbmNlc3RvcihlZGdlcy5maXJzdCwgc2VjdGlvblNlbGVjdG9yLCBpc1Jvb3QpO1xuICAgICAgICBjb25zdCBsYXN0QW5jZXN0b3IgPSBhbmNlc3RvcihlZGdlcy5sYXN0LCBzZWN0aW9uU2VsZWN0b3IsIGlzUm9vdCk7XG4gICAgICAgIHJldHVybiBmaXJzdEFuY2VzdG9yLmJpbmQoZkEgPT4ge1xuICAgICAgICAgIHJldHVybiBsYXN0QW5jZXN0b3IuYmluZChsQSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZXEoZkEsIGxBKSA/IGdldEJveChlZGdlcy50YWJsZSwgZWRnZXMuZmlyc3QsIGVkZ2VzLmxhc3QpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBmcm9tRG9tID0gbm9kZXMgPT4gbWFwKG5vZGVzLCBTdWdhckVsZW1lbnQuZnJvbURvbSk7XG5cbiAgICBjb25zdCBzdHJTZWxlY3RlZCA9ICdkYXRhLW1jZS1zZWxlY3RlZCc7XG4gICAgY29uc3Qgc3RyU2VsZWN0ZWRTZWxlY3RvciA9ICd0ZFsnICsgc3RyU2VsZWN0ZWQgKyAnXSx0aFsnICsgc3RyU2VsZWN0ZWQgKyAnXSc7XG4gICAgY29uc3Qgc3RyRmlyc3RTZWxlY3RlZCA9ICdkYXRhLW1jZS1maXJzdC1zZWxlY3RlZCc7XG4gICAgY29uc3Qgc3RyRmlyc3RTZWxlY3RlZFNlbGVjdG9yID0gJ3RkWycgKyBzdHJGaXJzdFNlbGVjdGVkICsgJ10sdGhbJyArIHN0ckZpcnN0U2VsZWN0ZWQgKyAnXSc7XG4gICAgY29uc3Qgc3RyTGFzdFNlbGVjdGVkID0gJ2RhdGEtbWNlLWxhc3Qtc2VsZWN0ZWQnO1xuICAgIGNvbnN0IHN0ckxhc3RTZWxlY3RlZFNlbGVjdG9yID0gJ3RkWycgKyBzdHJMYXN0U2VsZWN0ZWQgKyAnXSx0aFsnICsgc3RyTGFzdFNlbGVjdGVkICsgJ10nO1xuICAgIGNvbnN0IGVwaGVtZXJhID0ge1xuICAgICAgc2VsZWN0ZWQ6IHN0clNlbGVjdGVkLFxuICAgICAgc2VsZWN0ZWRTZWxlY3Rvcjogc3RyU2VsZWN0ZWRTZWxlY3RvcixcbiAgICAgIGZpcnN0U2VsZWN0ZWQ6IHN0ckZpcnN0U2VsZWN0ZWQsXG4gICAgICBmaXJzdFNlbGVjdGVkU2VsZWN0b3I6IHN0ckZpcnN0U2VsZWN0ZWRTZWxlY3RvcixcbiAgICAgIGxhc3RTZWxlY3RlZDogc3RyTGFzdFNlbGVjdGVkLFxuICAgICAgbGFzdFNlbGVjdGVkU2VsZWN0b3I6IHN0ckxhc3RTZWxlY3RlZFNlbGVjdG9yXG4gICAgfTtcblxuICAgIGNvbnN0IGdldFNlbGVjdGlvbkNlbGxGYWxsYmFjayA9IGVsZW1lbnQgPT4gdGFibGUoZWxlbWVudCkuYmluZCh0YWJsZSA9PiByZXRyaWV2ZSh0YWJsZSwgZXBoZW1lcmEuZmlyc3RTZWxlY3RlZFNlbGVjdG9yKSkuZm9sZChjb25zdGFudChlbGVtZW50KSwgY2VsbHMgPT4gY2VsbHNbMF0pO1xuICAgIGNvbnN0IGdldFNlbGVjdGlvbkZyb21TZWxlY3RvciA9IHNlbGVjdG9yID0+IChpbml0Q2VsbCwgaXNSb290KSA9PiB7XG4gICAgICBjb25zdCBjZWxsTmFtZSA9IG5hbWUoaW5pdENlbGwpO1xuICAgICAgY29uc3QgY2VsbCA9IGNlbGxOYW1lID09PSAnY29sJyB8fCBjZWxsTmFtZSA9PT0gJ2NvbGdyb3VwJyA/IGdldFNlbGVjdGlvbkNlbGxGYWxsYmFjayhpbml0Q2VsbCkgOiBpbml0Q2VsbDtcbiAgICAgIHJldHVybiBjbG9zZXN0JDEoY2VsbCwgc2VsZWN0b3IsIGlzUm9vdCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRTZWxlY3Rpb25DZWxsT3JDYXB0aW9uID0gZ2V0U2VsZWN0aW9uRnJvbVNlbGVjdG9yKCd0aCx0ZCxjYXB0aW9uJyk7XG4gICAgY29uc3QgZ2V0U2VsZWN0aW9uQ2VsbCA9IGdldFNlbGVjdGlvbkZyb21TZWxlY3RvcigndGgsdGQnKTtcbiAgICBjb25zdCBnZXRDZWxsc0Zyb21TZWxlY3Rpb24gPSBlZGl0b3IgPT4gZnJvbURvbShlZGl0b3IubW9kZWwudGFibGUuZ2V0U2VsZWN0ZWRDZWxscygpKTtcbiAgICBjb25zdCBnZXRSb3dzRnJvbVNlbGVjdGlvbiA9IChzZWxlY3RlZCwgc2VsZWN0b3IpID0+IHtcbiAgICAgIGNvbnN0IGNlbGxPcHQgPSBnZXRTZWxlY3Rpb25DZWxsKHNlbGVjdGVkKTtcbiAgICAgIGNvbnN0IHJvd3NPcHQgPSBjZWxsT3B0LmJpbmQoY2VsbCA9PiB0YWJsZShjZWxsKSkubWFwKHRhYmxlID0+IHJvd3ModGFibGUpKTtcbiAgICAgIHJldHVybiBsaWZ0MihjZWxsT3B0LCByb3dzT3B0LCAoY2VsbCwgcm93cykgPT4gZmlsdGVyKHJvd3MsIHJvdyA9PiBleGlzdHMoZnJvbURvbShyb3cuZG9tLmNlbGxzKSwgcm93Q2VsbCA9PiBnZXQkMihyb3dDZWxsLCBzZWxlY3RvcikgPT09ICcxJyB8fCBlcShyb3dDZWxsLCBjZWxsKSkpKS5nZXRPcihbXSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHZlcnRpY2FsQWxpZ25WYWx1ZXMgPSBbXG4gICAgICB7XG4gICAgICAgIHRleHQ6ICdOb25lJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0ZXh0OiAnVG9wJyxcbiAgICAgICAgdmFsdWU6ICd0b3AnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0ZXh0OiAnTWlkZGxlJyxcbiAgICAgICAgdmFsdWU6ICdtaWRkbGUnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0ZXh0OiAnQm90dG9tJyxcbiAgICAgICAgdmFsdWU6ICdib3R0b20nXG4gICAgICB9XG4gICAgXTtcblxuICAgIGNvbnN0IGhleENvbG91ciA9IHZhbHVlID0+ICh7IHZhbHVlOiBub3JtYWxpemVIZXgodmFsdWUpIH0pO1xuICAgIGNvbnN0IHNob3J0aGFuZFJlZ2V4ID0gL14jPyhbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKSQvaTtcbiAgICBjb25zdCBsb25nZm9ybVJlZ2V4ID0gL14jPyhbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KSQvaTtcbiAgICBjb25zdCBpc0hleFN0cmluZyA9IGhleCA9PiBzaG9ydGhhbmRSZWdleC50ZXN0KGhleCkgfHwgbG9uZ2Zvcm1SZWdleC50ZXN0KGhleCk7XG4gICAgY29uc3Qgbm9ybWFsaXplSGV4ID0gaGV4ID0+IHJlbW92ZUxlYWRpbmcoaGV4LCAnIycpLnRvVXBwZXJDYXNlKCk7XG4gICAgY29uc3QgZnJvbVN0cmluZyQxID0gaGV4ID0+IGlzSGV4U3RyaW5nKGhleCkgPyBPcHRpb25hbC5zb21lKHsgdmFsdWU6IG5vcm1hbGl6ZUhleChoZXgpIH0pIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIGNvbnN0IHRvSGV4ID0gY29tcG9uZW50ID0+IHtcbiAgICAgIGNvbnN0IGhleCA9IGNvbXBvbmVudC50b1N0cmluZygxNik7XG4gICAgICByZXR1cm4gKGhleC5sZW5ndGggPT09IDEgPyAnMCcgKyBoZXggOiBoZXgpLnRvVXBwZXJDYXNlKCk7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tUmdiYSA9IHJnYmFDb2xvdXIgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0b0hleChyZ2JhQ29sb3VyLnJlZCkgKyB0b0hleChyZ2JhQ29sb3VyLmdyZWVuKSArIHRvSGV4KHJnYmFDb2xvdXIuYmx1ZSk7XG4gICAgICByZXR1cm4gaGV4Q29sb3VyKHZhbHVlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmdiUmVnZXggPSAvXlxccypyZ2JcXHMqXFwoXFxzKihcXGQrKVxccyosXFxzKihcXGQrKVxccyosXFxzKihcXGQrKVxccypcXClcXHMqJC9pO1xuICAgIGNvbnN0IHJnYmFSZWdleCA9IC9eXFxzKnJnYmFcXHMqXFwoXFxzKihcXGQrKVxccyosXFxzKihcXGQrKVxccyosXFxzKihcXGQrKVxccyosXFxzKihcXGQ/KD86XFwuXFxkKyk/KVxccypcXClcXHMqJC9pO1xuICAgIGNvbnN0IHJnYmFDb2xvdXIgPSAocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpID0+ICh7XG4gICAgICByZWQsXG4gICAgICBncmVlbixcbiAgICAgIGJsdWUsXG4gICAgICBhbHBoYVxuICAgIH0pO1xuICAgIGNvbnN0IGZyb21TdHJpbmdWYWx1ZXMgPSAocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBwYXJzZUludChyZWQsIDEwKTtcbiAgICAgIGNvbnN0IGcgPSBwYXJzZUludChncmVlbiwgMTApO1xuICAgICAgY29uc3QgYiA9IHBhcnNlSW50KGJsdWUsIDEwKTtcbiAgICAgIGNvbnN0IGEgPSBwYXJzZUZsb2F0KGFscGhhKTtcbiAgICAgIHJldHVybiByZ2JhQ29sb3VyKHIsIGcsIGIsIGEpO1xuICAgIH07XG4gICAgY29uc3QgZnJvbVN0cmluZyA9IHJnYmFTdHJpbmcgPT4ge1xuICAgICAgaWYgKHJnYmFTdHJpbmcgPT09ICd0cmFuc3BhcmVudCcpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUocmdiYUNvbG91cigwLCAwLCAwLCAwKSk7XG4gICAgICB9XG4gICAgICBjb25zdCByZ2JNYXRjaCA9IHJnYlJlZ2V4LmV4ZWMocmdiYVN0cmluZyk7XG4gICAgICBpZiAocmdiTWF0Y2ggIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoZnJvbVN0cmluZ1ZhbHVlcyhyZ2JNYXRjaFsxXSwgcmdiTWF0Y2hbMl0sIHJnYk1hdGNoWzNdLCAnMScpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJnYmFNYXRjaCA9IHJnYmFSZWdleC5leGVjKHJnYmFTdHJpbmcpO1xuICAgICAgaWYgKHJnYmFNYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShmcm9tU3RyaW5nVmFsdWVzKHJnYmFNYXRjaFsxXSwgcmdiYU1hdGNoWzJdLCByZ2JhTWF0Y2hbM10sIHJnYmFNYXRjaFs0XSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYW55VG9IZXggPSBjb2xvciA9PiBmcm9tU3RyaW5nJDEoY29sb3IpLm9yVGh1bmsoKCkgPT4gZnJvbVN0cmluZyhjb2xvcikubWFwKGZyb21SZ2JhKSkuZ2V0T3JUaHVuaygoKSA9PiB7XG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgIGNhbnZhcy5oZWlnaHQgPSAxO1xuICAgICAgY2FudmFzLndpZHRoID0gMTtcbiAgICAgIGNvbnN0IGNhbnZhc0NvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgIGNhbnZhc0NvbnRleHQuY2xlYXJSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgICBjYW52YXNDb250ZXh0LmZpbGxTdHlsZSA9ICcjRkZGRkZGJztcbiAgICAgIGNhbnZhc0NvbnRleHQuZmlsbFN0eWxlID0gY29sb3I7XG4gICAgICBjYW52YXNDb250ZXh0LmZpbGxSZWN0KDAsIDAsIDEsIDEpO1xuICAgICAgY29uc3QgcmdiYSA9IGNhbnZhc0NvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIDEsIDEpLmRhdGE7XG4gICAgICBjb25zdCByID0gcmdiYVswXTtcbiAgICAgIGNvbnN0IGcgPSByZ2JhWzFdO1xuICAgICAgY29uc3QgYiA9IHJnYmFbMl07XG4gICAgICBjb25zdCBhID0gcmdiYVszXTtcbiAgICAgIHJldHVybiBmcm9tUmdiYShyZ2JhQ29sb3VyKHIsIGcsIGIsIGEpKTtcbiAgICB9KTtcbiAgICBjb25zdCByZ2JhVG9IZXhTdHJpbmcgPSBjb2xvciA9PiBmcm9tU3RyaW5nKGNvbG9yKS5tYXAoZnJvbVJnYmEpLm1hcChoID0+ICcjJyArIGgudmFsdWUpLmdldE9yKGNvbG9yKTtcblxuICAgIGNvbnN0IENlbGwgPSBpbml0aWFsID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGluaXRpYWw7XG4gICAgICBjb25zdCBnZXQgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXQgPSB2ID0+IHtcbiAgICAgICAgdmFsdWUgPSB2O1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdldCxcbiAgICAgICAgc2V0XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBzaW5nbGV0b24gPSBkb1Jldm9rZSA9PiB7XG4gICAgICBjb25zdCBzdWJqZWN0ID0gQ2VsbChPcHRpb25hbC5ub25lKCkpO1xuICAgICAgY29uc3QgcmV2b2tlID0gKCkgPT4gc3ViamVjdC5nZXQoKS5lYWNoKGRvUmV2b2tlKTtcbiAgICAgIGNvbnN0IGNsZWFyID0gKCkgPT4ge1xuICAgICAgICByZXZva2UoKTtcbiAgICAgICAgc3ViamVjdC5zZXQoT3B0aW9uYWwubm9uZSgpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1NldCA9ICgpID0+IHN1YmplY3QuZ2V0KCkuaXNTb21lKCk7XG4gICAgICBjb25zdCBnZXQgPSAoKSA9PiBzdWJqZWN0LmdldCgpO1xuICAgICAgY29uc3Qgc2V0ID0gcyA9PiB7XG4gICAgICAgIHJldm9rZSgpO1xuICAgICAgICBzdWJqZWN0LnNldChPcHRpb25hbC5zb21lKHMpKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGVhcixcbiAgICAgICAgaXNTZXQsXG4gICAgICAgIGdldCxcbiAgICAgICAgc2V0XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgdW5iaW5kYWJsZSA9ICgpID0+IHNpbmdsZXRvbihzID0+IHMudW5iaW5kKCkpO1xuXG4gICAgY29uc3Qgb25TZXR1cFRvZ2dsZSA9IChlZGl0b3IsIGZvcm1hdE5hbWUsIGZvcm1hdFZhbHVlKSA9PiB7XG4gICAgICByZXR1cm4gYXBpID0+IHtcbiAgICAgICAgY29uc3QgYm91bmRDYWxsYmFjayA9IHVuYmluZGFibGUoKTtcbiAgICAgICAgY29uc3QgaXNOb25lID0gaXNFbXB0eShmb3JtYXRWYWx1ZSk7XG4gICAgICAgIGNvbnN0IGluaXQgPSAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxscyA9IGdldENlbGxzRnJvbVNlbGVjdGlvbihlZGl0b3IpO1xuICAgICAgICAgIGNvbnN0IGNoZWNrTm9kZSA9IGNlbGwgPT4gZWRpdG9yLmZvcm1hdHRlci5tYXRjaChmb3JtYXROYW1lLCB7IHZhbHVlOiBmb3JtYXRWYWx1ZSB9LCBjZWxsLmRvbSwgaXNOb25lKTtcbiAgICAgICAgICBpZiAoaXNOb25lKSB7XG4gICAgICAgICAgICBhcGkuc2V0QWN0aXZlKCFleGlzdHMoc2VsZWN0ZWRDZWxscywgY2hlY2tOb2RlKSk7XG4gICAgICAgICAgICBib3VuZENhbGxiYWNrLnNldChlZGl0b3IuZm9ybWF0dGVyLmZvcm1hdENoYW5nZWQoZm9ybWF0TmFtZSwgbWF0Y2ggPT4gYXBpLnNldEFjdGl2ZSghbWF0Y2gpLCB0cnVlKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFwaS5zZXRBY3RpdmUoZm9yYWxsKHNlbGVjdGVkQ2VsbHMsIGNoZWNrTm9kZSkpO1xuICAgICAgICAgICAgYm91bmRDYWxsYmFjay5zZXQoZWRpdG9yLmZvcm1hdHRlci5mb3JtYXRDaGFuZ2VkKGZvcm1hdE5hbWUsIGFwaS5zZXRBY3RpdmUsIGZhbHNlLCB7IHZhbHVlOiBmb3JtYXRWYWx1ZSB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBlZGl0b3IuaW5pdGlhbGl6ZWQgPyBpbml0KCkgOiBlZGl0b3Iub24oJ2luaXQnLCBpbml0KTtcbiAgICAgICAgcmV0dXJuIGJvdW5kQ2FsbGJhY2suY2xlYXI7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgaXNMaXN0R3JvdXAgPSBpdGVtID0+IGhhc05vbk51bGxhYmxlS2V5KGl0ZW0sICdtZW51Jyk7XG4gICAgY29uc3QgYnVpbGRMaXN0SXRlbXMgPSBpdGVtcyA9PiBtYXAoaXRlbXMsIGl0ZW0gPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IGl0ZW0udGV4dCB8fCBpdGVtLnRpdGxlIHx8ICcnO1xuICAgICAgaWYgKGlzTGlzdEdyb3VwKGl0ZW0pKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdGV4dCxcbiAgICAgICAgICBpdGVtczogYnVpbGRMaXN0SXRlbXMoaXRlbS5tZW51KVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0ZXh0LFxuICAgICAgICAgIHZhbHVlOiBpdGVtLnZhbHVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgYnVpbGRNZW51SXRlbXMgPSAoZWRpdG9yLCBpdGVtcywgZm9ybWF0LCBvbkFjdGlvbikgPT4gbWFwKGl0ZW1zLCBpdGVtID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSBpdGVtLnRleHQgfHwgaXRlbS50aXRsZTtcbiAgICAgIGlmIChpc0xpc3RHcm91cChpdGVtKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6ICduZXN0ZWRtZW51aXRlbScsXG4gICAgICAgICAgdGV4dCxcbiAgICAgICAgICBnZXRTdWJtZW51SXRlbXM6ICgpID0+IGJ1aWxkTWVudUl0ZW1zKGVkaXRvciwgaXRlbS5tZW51LCBmb3JtYXQsIG9uQWN0aW9uKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0ZXh0LFxuICAgICAgICAgIHR5cGU6ICd0b2dnbGVtZW51aXRlbScsXG4gICAgICAgICAgb25BY3Rpb246ICgpID0+IG9uQWN0aW9uKGl0ZW0udmFsdWUpLFxuICAgICAgICAgIG9uU2V0dXA6IG9uU2V0dXBUb2dnbGUoZWRpdG9yLCBmb3JtYXQsIGl0ZW0udmFsdWUpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgYXBwbHlUYWJsZUNlbGxTdHlsZSA9IChlZGl0b3IsIHN0eWxlKSA9PiB2YWx1ZSA9PiB7XG4gICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZVRhYmxlQXBwbHlDZWxsU3R5bGUnLCBmYWxzZSwgeyBbc3R5bGVdOiB2YWx1ZSB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbHRlck5vbmVJdGVtID0gbGlzdCA9PiBiaW5kKGxpc3QsIGl0ZW0gPT4ge1xuICAgICAgaWYgKGlzTGlzdEdyb3VwKGl0ZW0pKSB7XG4gICAgICAgIHJldHVybiBbe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIG1lbnU6IGZpbHRlck5vbmVJdGVtKGl0ZW0ubWVudSlcbiAgICAgICAgICB9XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpc05vdEVtcHR5KGl0ZW0udmFsdWUpID8gW2l0ZW1dIDogW107XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgZ2VuZXJhdGVNZW51SXRlbXNDYWxsYmFjayA9IChlZGl0b3IsIGl0ZW1zLCBmb3JtYXQsIG9uQWN0aW9uKSA9PiBjYWxsYmFjayA9PiBjYWxsYmFjayhidWlsZE1lbnVJdGVtcyhlZGl0b3IsIGl0ZW1zLCBmb3JtYXQsIG9uQWN0aW9uKSk7XG4gICAgY29uc3QgYnVpbGRDb2xvck1lbnUgPSAoZWRpdG9yLCBjb2xvckxpc3QsIHN0eWxlKSA9PiB7XG4gICAgICBjb25zdCBjb2xvck1hcCA9IG1hcChjb2xvckxpc3QsIGVudHJ5ID0+ICh7XG4gICAgICAgIHRleHQ6IGVudHJ5LnRpdGxlLFxuICAgICAgICB2YWx1ZTogJyMnICsgYW55VG9IZXgoZW50cnkudmFsdWUpLnZhbHVlLFxuICAgICAgICB0eXBlOiAnY2hvaWNlaXRlbSdcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBbe1xuICAgICAgICAgIHR5cGU6ICdmYW5jeW1lbnVpdGVtJyxcbiAgICAgICAgICBmYW5jeXR5cGU6ICdjb2xvcnN3YXRjaCcsXG4gICAgICAgICAgaW5pdERhdGE6IHtcbiAgICAgICAgICAgIGNvbG9yczogY29sb3JNYXAubGVuZ3RoID4gMCA/IGNvbG9yTWFwIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYWxsb3dDdXN0b21Db2xvcnM6IGZhbHNlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkFjdGlvbjogZGF0YSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGEudmFsdWUgPT09ICdyZW1vdmUnID8gJycgOiBkYXRhLnZhbHVlO1xuICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VUYWJsZUFwcGx5Q2VsbFN0eWxlJywgZmFsc2UsIHsgW3N0eWxlXTogdmFsdWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XTtcbiAgICB9O1xuICAgIGNvbnN0IGNoYW5nZVJvd0hlYWRlciA9IGVkaXRvciA9PiAoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50VHlwZSA9IGVkaXRvci5xdWVyeUNvbW1hbmRWYWx1ZSgnbWNlVGFibGVSb3dUeXBlJyk7XG4gICAgICBjb25zdCBuZXdUeXBlID0gY3VycmVudFR5cGUgPT09ICdoZWFkZXInID8gJ2JvZHknIDogJ2hlYWRlcic7XG4gICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZVRhYmxlUm93VHlwZScsIGZhbHNlLCB7IHR5cGU6IG5ld1R5cGUgfSk7XG4gICAgfTtcbiAgICBjb25zdCBjaGFuZ2VDb2x1bW5IZWFkZXIgPSBlZGl0b3IgPT4gKCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudFR5cGUgPSBlZGl0b3IucXVlcnlDb21tYW5kVmFsdWUoJ21jZVRhYmxlQ29sVHlwZScpO1xuICAgICAgY29uc3QgbmV3VHlwZSA9IGN1cnJlbnRUeXBlID09PSAndGgnID8gJ3RkJyA6ICd0aCc7XG4gICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZVRhYmxlQ29sVHlwZScsIGZhbHNlLCB7IHR5cGU6IG5ld1R5cGUgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldENsYXNzTGlzdCQxID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSBidWlsZExpc3RJdGVtcyhnZXRDZWxsQ2xhc3NMaXN0KGVkaXRvcikpO1xuICAgICAgaWYgKGNsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgbmFtZTogJ2NsYXNzJyxcbiAgICAgICAgICB0eXBlOiAnbGlzdGJveCcsXG4gICAgICAgICAgbGFiZWw6ICdDbGFzcycsXG4gICAgICAgICAgaXRlbXM6IGNsYXNzZXNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgY2hpbGRyZW4gPSBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICd3aWR0aCcsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGxhYmVsOiAnV2lkdGgnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnaGVpZ2h0JyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgbGFiZWw6ICdIZWlnaHQnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnY2VsbHR5cGUnLFxuICAgICAgICB0eXBlOiAnbGlzdGJveCcsXG4gICAgICAgIGxhYmVsOiAnQ2VsbCB0eXBlJyxcbiAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiAnQ2VsbCcsXG4gICAgICAgICAgICB2YWx1ZTogJ3RkJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogJ0hlYWRlciBjZWxsJyxcbiAgICAgICAgICAgIHZhbHVlOiAndGgnXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnc2NvcGUnLFxuICAgICAgICB0eXBlOiAnbGlzdGJveCcsXG4gICAgICAgIGxhYmVsOiAnU2NvcGUnLFxuICAgICAgICBpdGVtczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRleHQ6ICdOb25lJyxcbiAgICAgICAgICAgIHZhbHVlOiAnJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogJ1JvdycsXG4gICAgICAgICAgICB2YWx1ZTogJ3JvdydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRleHQ6ICdDb2x1bW4nLFxuICAgICAgICAgICAgdmFsdWU6ICdjb2wnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiAnUm93IGdyb3VwJyxcbiAgICAgICAgICAgIHZhbHVlOiAncm93Z3JvdXAnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiAnQ29sdW1uIGdyb3VwJyxcbiAgICAgICAgICAgIHZhbHVlOiAnY29sZ3JvdXAnXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnaGFsaWduJyxcbiAgICAgICAgdHlwZTogJ2xpc3Rib3gnLFxuICAgICAgICBsYWJlbDogJ0hvcml6b250YWwgYWxpZ24nLFxuICAgICAgICBpdGVtczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRleHQ6ICdOb25lJyxcbiAgICAgICAgICAgIHZhbHVlOiAnJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogJ0xlZnQnLFxuICAgICAgICAgICAgdmFsdWU6ICdsZWZ0J1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogJ0NlbnRlcicsXG4gICAgICAgICAgICB2YWx1ZTogJ2NlbnRlcidcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRleHQ6ICdSaWdodCcsXG4gICAgICAgICAgICB2YWx1ZTogJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3ZhbGlnbicsXG4gICAgICAgIHR5cGU6ICdsaXN0Ym94JyxcbiAgICAgICAgbGFiZWw6ICdWZXJ0aWNhbCBhbGlnbicsXG4gICAgICAgIGl0ZW1zOiB2ZXJ0aWNhbEFsaWduVmFsdWVzXG4gICAgICB9XG4gICAgXTtcbiAgICBjb25zdCBnZXRJdGVtcyQyID0gZWRpdG9yID0+IGNoaWxkcmVuLmNvbmNhdChnZXRDbGFzc0xpc3QkMShlZGl0b3IpLnRvQXJyYXkoKSk7XG5cbiAgICBjb25zdCBnZXRBZHZhbmNlZFRhYiA9IChlZGl0b3IsIGRpYWxvZ05hbWUpID0+IHtcbiAgICAgIGNvbnN0IGVtcHR5Qm9yZGVyU3R5bGUgPSBbe1xuICAgICAgICAgIHRleHQ6ICdTZWxlY3QuLi4nLFxuICAgICAgICAgIHZhbHVlOiAnJ1xuICAgICAgICB9XTtcbiAgICAgIGNvbnN0IGFkdlRhYkl0ZW1zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2JvcmRlcnN0eWxlJyxcbiAgICAgICAgICB0eXBlOiAnbGlzdGJveCcsXG4gICAgICAgICAgbGFiZWw6ICdCb3JkZXIgc3R5bGUnLFxuICAgICAgICAgIGl0ZW1zOiBlbXB0eUJvcmRlclN0eWxlLmNvbmNhdChidWlsZExpc3RJdGVtcyhnZXRUYWJsZUJvcmRlclN0eWxlcyhlZGl0b3IpKSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdib3JkZXJjb2xvcicsXG4gICAgICAgICAgdHlwZTogJ2NvbG9yaW5wdXQnLFxuICAgICAgICAgIGxhYmVsOiAnQm9yZGVyIGNvbG9yJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2JhY2tncm91bmRjb2xvcicsXG4gICAgICAgICAgdHlwZTogJ2NvbG9yaW5wdXQnLFxuICAgICAgICAgIGxhYmVsOiAnQmFja2dyb3VuZCBjb2xvcidcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICAgIGNvbnN0IGJvcmRlcldpZHRoID0ge1xuICAgICAgICBuYW1lOiAnYm9yZGVyd2lkdGgnLFxuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBsYWJlbDogJ0JvcmRlciB3aWR0aCdcbiAgICAgIH07XG4gICAgICBjb25zdCBpdGVtcyA9IGRpYWxvZ05hbWUgPT09ICdjZWxsJyA/IFtib3JkZXJXaWR0aF0uY29uY2F0KGFkdlRhYkl0ZW1zKSA6IGFkdlRhYkl0ZW1zO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGl0bGU6ICdBZHZhbmNlZCcsXG4gICAgICAgIG5hbWU6ICdhZHZhbmNlZCcsXG4gICAgICAgIGl0ZW1zXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBub3JtYWwgPSAoZWRpdG9yLCBlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgY29uc3Qgc2V0QXR0cmliID0gKGF0dHIsIHZhbHVlKSA9PiB7XG4gICAgICAgIGRvbS5zZXRBdHRyaWIoZWxlbWVudCwgYXR0ciwgdmFsdWUpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldFN0eWxlID0gKHByb3AsIHZhbHVlKSA9PiB7XG4gICAgICAgIGRvbS5zZXRTdHlsZShlbGVtZW50LCBwcm9wLCB2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0Rm9ybWF0ID0gKGZvcm1hdE5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICBlZGl0b3IuZm9ybWF0dGVyLnJlbW92ZShmb3JtYXROYW1lLCB7IHZhbHVlOiBudWxsIH0sIGVsZW1lbnQsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVkaXRvci5mb3JtYXR0ZXIuYXBwbHkoZm9ybWF0TmFtZSwgeyB2YWx1ZSB9LCBlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNldEF0dHJpYixcbiAgICAgICAgc2V0U3R5bGUsXG4gICAgICAgIHNldEZvcm1hdFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IERvbU1vZGlmaWVyID0geyBub3JtYWwgfTtcblxuICAgIGNvbnN0IGlzSGVhZGVyQ2VsbCA9IGlzVGFnKCd0aCcpO1xuICAgIGNvbnN0IGdldFJvd0hlYWRlclR5cGUgPSAoaXNIZWFkZXJSb3csIGlzSGVhZGVyQ2VsbHMpID0+IHtcbiAgICAgIGlmIChpc0hlYWRlclJvdyAmJiBpc0hlYWRlckNlbGxzKSB7XG4gICAgICAgIHJldHVybiAnc2VjdGlvbkNlbGxzJztcbiAgICAgIH0gZWxzZSBpZiAoaXNIZWFkZXJSb3cpIHtcbiAgICAgICAgcmV0dXJuICdzZWN0aW9uJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnY2VsbHMnO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ2V0Um93VHlwZSQxID0gcm93ID0+IHtcbiAgICAgIGNvbnN0IGlzSGVhZGVyUm93ID0gcm93LnNlY3Rpb24gPT09ICd0aGVhZCc7XG4gICAgICBjb25zdCBpc0hlYWRlckNlbGxzID0gaXMoZmluZENvbW1vbkNlbGxUeXBlKHJvdy5jZWxscyksICd0aCcpO1xuICAgICAgaWYgKHJvdy5zZWN0aW9uID09PSAndGZvb3QnKSB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6ICdmb290ZXInIH07XG4gICAgICB9IGVsc2UgaWYgKGlzSGVhZGVyUm93IHx8IGlzSGVhZGVyQ2VsbHMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiAnaGVhZGVyJyxcbiAgICAgICAgICBzdWJUeXBlOiBnZXRSb3dIZWFkZXJUeXBlKGlzSGVhZGVyUm93LCBpc0hlYWRlckNlbGxzKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogJ2JvZHknIH07XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBmaW5kQ29tbW9uQ2VsbFR5cGUgPSBjZWxscyA9PiB7XG4gICAgICBjb25zdCBoZWFkZXJDZWxscyA9IGZpbHRlcihjZWxscywgY2VsbCA9PiBpc0hlYWRlckNlbGwoY2VsbC5lbGVtZW50KSk7XG4gICAgICBpZiAoaGVhZGVyQ2VsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKCd0ZCcpO1xuICAgICAgfSBlbHNlIGlmIChoZWFkZXJDZWxscy5sZW5ndGggPT09IGNlbGxzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSgndGgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBmaW5kQ29tbW9uUm93VHlwZSA9IHJvd3MgPT4ge1xuICAgICAgY29uc3Qgcm93VHlwZXMgPSBtYXAocm93cywgcm93ID0+IGdldFJvd1R5cGUkMShyb3cpLnR5cGUpO1xuICAgICAgY29uc3QgaGFzSGVhZGVyID0gY29udGFpbnMocm93VHlwZXMsICdoZWFkZXInKTtcbiAgICAgIGNvbnN0IGhhc0Zvb3RlciA9IGNvbnRhaW5zKHJvd1R5cGVzLCAnZm9vdGVyJyk7XG4gICAgICBpZiAoIWhhc0hlYWRlciAmJiAhaGFzRm9vdGVyKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKCdib2R5Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBoYXNCb2R5ID0gY29udGFpbnMocm93VHlwZXMsICdib2R5Jyk7XG4gICAgICAgIGlmIChoYXNIZWFkZXIgJiYgIWhhc0JvZHkgJiYgIWhhc0Zvb3Rlcikge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKCdoZWFkZXInKTtcbiAgICAgICAgfSBlbHNlIGlmICghaGFzSGVhZGVyICYmICFoYXNCb2R5ICYmIGhhc0Zvb3Rlcikge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKCdmb290ZXInKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNhY2hlZCA9IGYgPT4ge1xuICAgICAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuICAgICAgbGV0IHI7XG4gICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHIgPSBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmluZEluV2FyZWhvdXNlID0gKHdhcmVob3VzZSwgZWxlbWVudCkgPT4gZmluZE1hcCh3YXJlaG91c2UuYWxsLCByID0+IGZpbmQoci5jZWxscywgZSA9PiBlcShlbGVtZW50LCBlLmVsZW1lbnQpKSk7XG4gICAgY29uc3QgZXh0cmFjdENlbGxzID0gKHdhcmVob3VzZSwgdGFyZ2V0LCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGNvbnN0IGRldGFpbHMgPSBtYXAodGFyZ2V0LnNlbGVjdGlvbiwgY2VsbCQxID0+IHtcbiAgICAgICAgcmV0dXJuIGNlbGwoY2VsbCQxKS5iaW5kKGxjID0+IGZpbmRJbldhcmVob3VzZSh3YXJlaG91c2UsIGxjKSkuZmlsdGVyKHByZWRpY2F0ZSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNlbGxzID0gY2F0KGRldGFpbHMpO1xuICAgICAgcmV0dXJuIHNvbWVJZihjZWxscy5sZW5ndGggPiAwLCBjZWxscyk7XG4gICAgfTtcbiAgICBjb25zdCBvbk1lcmdhYmxlID0gKF93YXJlaG91c2UsIHRhcmdldCkgPT4gdGFyZ2V0Lm1lcmdhYmxlO1xuICAgIGNvbnN0IG9uVW5tZXJnYWJsZSA9IChfd2FyZWhvdXNlLCB0YXJnZXQpID0+IHRhcmdldC51bm1lcmdhYmxlO1xuICAgIGNvbnN0IG9uQ2VsbHMgPSAod2FyZWhvdXNlLCB0YXJnZXQpID0+IGV4dHJhY3RDZWxscyh3YXJlaG91c2UsIHRhcmdldCwgYWx3YXlzKTtcbiAgICBjb25zdCBpc1VubG9ja2VkVGFibGVDZWxsID0gKHdhcmVob3VzZSwgY2VsbCkgPT4gZmluZEluV2FyZWhvdXNlKHdhcmVob3VzZSwgY2VsbCkuZXhpc3RzKGRldGFpbCA9PiAhZGV0YWlsLmlzTG9ja2VkKTtcbiAgICBjb25zdCBhbGxVbmxvY2tlZCA9ICh3YXJlaG91c2UsIGNlbGxzKSA9PiBmb3JhbGwoY2VsbHMsIGNlbGwgPT4gaXNVbmxvY2tlZFRhYmxlQ2VsbCh3YXJlaG91c2UsIGNlbGwpKTtcbiAgICBjb25zdCBvblVubG9ja2VkTWVyZ2FibGUgPSAod2FyZWhvdXNlLCB0YXJnZXQpID0+IG9uTWVyZ2FibGUod2FyZWhvdXNlLCB0YXJnZXQpLmZpbHRlcihtZXJnZWFibGUgPT4gYWxsVW5sb2NrZWQod2FyZWhvdXNlLCBtZXJnZWFibGUuY2VsbHMpKTtcbiAgICBjb25zdCBvblVubG9ja2VkVW5tZXJnYWJsZSA9ICh3YXJlaG91c2UsIHRhcmdldCkgPT4gb25Vbm1lcmdhYmxlKHdhcmVob3VzZSwgdGFyZ2V0KS5maWx0ZXIoY2VsbHMgPT4gYWxsVW5sb2NrZWQod2FyZWhvdXNlLCBjZWxscykpO1xuXG4gICAgY29uc3QgZ2VuZXJhdGUgPSBjYXNlcyA9PiB7XG4gICAgICBpZiAoIWlzQXJyYXkoY2FzZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY2FzZXMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgfVxuICAgICAgaWYgKGNhc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGNhc2UnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnN0cnVjdG9ycyA9IFtdO1xuICAgICAgY29uc3QgYWR0ID0ge307XG4gICAgICBlYWNoKGNhc2VzLCAoYWNhc2UsIGNvdW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGtleXMkMSA9IGtleXMoYWNhc2UpO1xuICAgICAgICBpZiAoa2V5cyQxLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignb25lIGFuZCBvbmx5IG9uZSBuYW1lIHBlciBjYXNlJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5ID0ga2V5cyQxWzBdO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGFjYXNlW2tleV07XG4gICAgICAgIGlmIChhZHRba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkdXBsaWNhdGUga2V5IGRldGVjdGVkOicgKyBrZXkpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2NhdGEnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgaGF2ZSBhIGNhc2UgbmFtZWQgY2F0YSAoc29ycnkpJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYXNlIGFyZ3VtZW50cyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RydWN0b3JzLnB1c2goa2V5KTtcbiAgICAgICAgYWR0W2tleV0gPSAoLi4uYXJncykgPT4ge1xuICAgICAgICAgIGNvbnN0IGFyZ0xlbmd0aCA9IGFyZ3MubGVuZ3RoO1xuICAgICAgICAgIGlmIChhcmdMZW5ndGggIT09IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIHRvIGNhc2UgJyArIGtleSArICcuIEV4cGVjdGVkICcgKyB2YWx1ZS5sZW5ndGggKyAnICgnICsgdmFsdWUgKyAnKSwgZ290ICcgKyBhcmdMZW5ndGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBtYXRjaCA9IGJyYW5jaGVzID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJyYW5jaEtleXMgPSBrZXlzKGJyYW5jaGVzKTtcbiAgICAgICAgICAgIGlmIChjb25zdHJ1Y3RvcnMubGVuZ3RoICE9PSBicmFuY2hLZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dyb25nIG51bWJlciBvZiBhcmd1bWVudHMgdG8gbWF0Y2guIEV4cGVjdGVkOiAnICsgY29uc3RydWN0b3JzLmpvaW4oJywnKSArICdcXG5BY3R1YWw6ICcgKyBicmFuY2hLZXlzLmpvaW4oJywnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhbGxSZXFkID0gZm9yYWxsKGNvbnN0cnVjdG9ycywgcmVxS2V5ID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5zKGJyYW5jaEtleXMsIHJlcUtleSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghYWxsUmVxZCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhbGwgYnJhbmNoZXMgd2VyZSBzcGVjaWZpZWQgd2hlbiB1c2luZyBtYXRjaC4gU3BlY2lmaWVkOiAnICsgYnJhbmNoS2V5cy5qb2luKCcsICcpICsgJ1xcblJlcXVpcmVkOiAnICsgY29uc3RydWN0b3JzLmpvaW4oJywgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJyYW5jaGVzW2tleV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZm9sZDogKC4uLmZvbGRBcmdzKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChmb2xkQXJncy5sZW5ndGggIT09IGNhc2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBmb2xkLiBFeHBlY3RlZCAnICsgY2FzZXMubGVuZ3RoICsgJywgZ290ICcgKyBmb2xkQXJncy5sZW5ndGgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGZvbGRBcmdzW2NvdW50XTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXRjaCxcbiAgICAgICAgICAgIGxvZzogbGFiZWwgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsYWJlbCwge1xuICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9ycyxcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvcjoga2V5LFxuICAgICAgICAgICAgICAgIHBhcmFtczogYXJnc1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWR0O1xuICAgIH07XG4gICAgY29uc3QgQWR0ID0geyBnZW5lcmF0ZSB9O1xuXG4gICAgY29uc3QgYWR0ID0gQWR0LmdlbmVyYXRlKFtcbiAgICAgIHsgbm9uZTogW10gfSxcbiAgICAgIHsgb25seTogWydpbmRleCddIH0sXG4gICAgICB7XG4gICAgICAgIGxlZnQ6IFtcbiAgICAgICAgICAnaW5kZXgnLFxuICAgICAgICAgICduZXh0J1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBtaWRkbGU6IFtcbiAgICAgICAgICAncHJldicsXG4gICAgICAgICAgJ2luZGV4JyxcbiAgICAgICAgICAnbmV4dCdcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcmlnaHQ6IFtcbiAgICAgICAgICAncHJldicsXG4gICAgICAgICAgJ2luZGV4J1xuICAgICAgICBdXG4gICAgICB9XG4gICAgXSk7XG4gICAgKHsgLi4uYWR0IH0pO1xuXG4gICAgY29uc3Qgb3BHZXRSb3dzVHlwZSA9ICh0YWJsZSwgdGFyZ2V0KSA9PiB7XG4gICAgICBjb25zdCBob3VzZSA9IFdhcmVob3VzZS5mcm9tVGFibGUodGFibGUpO1xuICAgICAgY29uc3QgZGV0YWlscyA9IG9uQ2VsbHMoaG91c2UsIHRhcmdldCk7XG4gICAgICByZXR1cm4gZGV0YWlscy5iaW5kKHNlbGVjdGVkQ2VsbHMgPT4ge1xuICAgICAgICBjb25zdCBsYXN0U2VsZWN0ZWRDZWxsID0gc2VsZWN0ZWRDZWxsc1tzZWxlY3RlZENlbGxzLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBtaW5Sb3dSYW5nZSA9IHNlbGVjdGVkQ2VsbHNbMF0ucm93O1xuICAgICAgICBjb25zdCBtYXhSb3dSYW5nZSA9IGxhc3RTZWxlY3RlZENlbGwucm93ICsgbGFzdFNlbGVjdGVkQ2VsbC5yb3dzcGFuO1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSBob3VzZS5hbGwuc2xpY2UobWluUm93UmFuZ2UsIG1heFJvd1JhbmdlKTtcbiAgICAgICAgcmV0dXJuIGZpbmRDb21tb25Sb3dUeXBlKHNlbGVjdGVkUm93cyk7XG4gICAgICB9KS5nZXRPcignJyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRSb3dzVHlwZSA9IG9wR2V0Um93c1R5cGU7XG5cbiAgICBjb25zdCByZ2JUb0hleCA9IHZhbHVlID0+IHN0YXJ0c1dpdGgodmFsdWUsICdyZ2InKSA/IHJnYmFUb0hleFN0cmluZyh2YWx1ZSkgOiB2YWx1ZTtcbiAgICBjb25zdCBleHRyYWN0QWR2YW5jZWRTdHlsZXMgPSBlbG0gPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsbSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBib3JkZXJ3aWR0aDogZ2V0UmF3KGVsZW1lbnQsICdib3JkZXItd2lkdGgnKS5nZXRPcignJyksXG4gICAgICAgIGJvcmRlcnN0eWxlOiBnZXRSYXcoZWxlbWVudCwgJ2JvcmRlci1zdHlsZScpLmdldE9yKCcnKSxcbiAgICAgICAgYm9yZGVyY29sb3I6IGdldFJhdyhlbGVtZW50LCAnYm9yZGVyLWNvbG9yJykubWFwKHJnYlRvSGV4KS5nZXRPcignJyksXG4gICAgICAgIGJhY2tncm91bmRjb2xvcjogZ2V0UmF3KGVsZW1lbnQsICdiYWNrZ3JvdW5kLWNvbG9yJykubWFwKHJnYlRvSGV4KS5nZXRPcignJylcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBnZXRTaGFyZWRWYWx1ZXMgPSBkYXRhID0+IHtcbiAgICAgIGNvbnN0IGJhc2VEYXRhID0gZGF0YVswXTtcbiAgICAgIGNvbnN0IGNvbXBhcmlzb25EYXRhID0gZGF0YS5zbGljZSgxKTtcbiAgICAgIGVhY2goY29tcGFyaXNvbkRhdGEsIGl0ZW1zID0+IHtcbiAgICAgICAgZWFjaChrZXlzKGJhc2VEYXRhKSwga2V5ID0+IHtcbiAgICAgICAgICBlYWNoJDEoaXRlbXMsIChpdGVtVmFsdWUsIGl0ZW1LZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBhcmlzb25WYWx1ZSA9IGJhc2VEYXRhW2tleV07XG4gICAgICAgICAgICBpZiAoY29tcGFyaXNvblZhbHVlICE9PSAnJyAmJiBrZXkgPT09IGl0ZW1LZXkpIHtcbiAgICAgICAgICAgICAgaWYgKGNvbXBhcmlzb25WYWx1ZSAhPT0gaXRlbVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgYmFzZURhdGFba2V5XSA9ICcnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYmFzZURhdGE7XG4gICAgfTtcbiAgICBjb25zdCBnZXRBbGlnbm1lbnQgPSAoZm9ybWF0cywgZm9ybWF0TmFtZSwgZWRpdG9yLCBlbG0pID0+IGZpbmQoZm9ybWF0cywgbmFtZSA9PiAhaXNVbmRlZmluZWQoZWRpdG9yLmZvcm1hdHRlci5tYXRjaE5vZGUoZWxtLCBmb3JtYXROYW1lICsgbmFtZSkpKS5nZXRPcignJyk7XG4gICAgY29uc3QgZ2V0SEFsaWdubWVudCA9IGN1cnJ5KGdldEFsaWdubWVudCwgW1xuICAgICAgJ2xlZnQnLFxuICAgICAgJ2NlbnRlcicsXG4gICAgICAncmlnaHQnXG4gICAgXSwgJ2FsaWduJyk7XG4gICAgY29uc3QgZ2V0VkFsaWdubWVudCA9IGN1cnJ5KGdldEFsaWdubWVudCwgW1xuICAgICAgJ3RvcCcsXG4gICAgICAnbWlkZGxlJyxcbiAgICAgICdib3R0b20nXG4gICAgXSwgJ3ZhbGlnbicpO1xuICAgIGNvbnN0IGV4dHJhY3REYXRhRnJvbVNldHRpbmdzID0gKGVkaXRvciwgaGFzQWR2VGFibGVUYWIpID0+IHtcbiAgICAgIGNvbnN0IHN0eWxlID0gZ2V0RGVmYXVsdFN0eWxlcyhlZGl0b3IpO1xuICAgICAgY29uc3QgYXR0cnMgPSBnZXREZWZhdWx0QXR0cmlidXRlcyhlZGl0b3IpO1xuICAgICAgY29uc3QgZXh0cmFjdEFkdmFuY2VkU3R5bGVEYXRhID0gKCkgPT4gKHtcbiAgICAgICAgYm9yZGVyc3R5bGU6IGdldCQ0KHN0eWxlLCAnYm9yZGVyLXN0eWxlJykuZ2V0T3IoJycpLFxuICAgICAgICBib3JkZXJjb2xvcjogcmdiVG9IZXgoZ2V0JDQoc3R5bGUsICdib3JkZXItY29sb3InKS5nZXRPcignJykpLFxuICAgICAgICBiYWNrZ3JvdW5kY29sb3I6IHJnYlRvSGV4KGdldCQ0KHN0eWxlLCAnYmFja2dyb3VuZC1jb2xvcicpLmdldE9yKCcnKSlcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGVmYXVsdERhdGEgPSB7XG4gICAgICAgIGhlaWdodDogJycsXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIGNlbGxzcGFjaW5nOiAnJyxcbiAgICAgICAgY2VsbHBhZGRpbmc6ICcnLFxuICAgICAgICBjYXB0aW9uOiBmYWxzZSxcbiAgICAgICAgY2xhc3M6ICcnLFxuICAgICAgICBhbGlnbjogJycsXG4gICAgICAgIGJvcmRlcjogJydcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRCb3JkZXIgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJvcmRlcldpZHRoID0gc3R5bGVbJ2JvcmRlci13aWR0aCddO1xuICAgICAgICBpZiAoc2hvdWxkU3R5bGVXaXRoQ3NzKGVkaXRvcikgJiYgYm9yZGVyV2lkdGgpIHtcbiAgICAgICAgICByZXR1cm4geyBib3JkZXI6IGJvcmRlcldpZHRoIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldCQ0KGF0dHJzLCAnYm9yZGVyJykuZm9sZCgoKSA9PiAoe30pLCBib3JkZXIgPT4gKHsgYm9yZGVyIH0pKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBhZHZTdHlsZSA9IGhhc0FkdlRhYmxlVGFiID8gZXh0cmFjdEFkdmFuY2VkU3R5bGVEYXRhKCkgOiB7fTtcbiAgICAgIGNvbnN0IGdldENlbGxQYWRkaW5nQ2VsbFNwYWNpbmcgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNwYWNpbmcgPSBnZXQkNChzdHlsZSwgJ2JvcmRlci1zcGFjaW5nJykub3IoZ2V0JDQoYXR0cnMsICdjZWxsc3BhY2luZycpKS5mb2xkKCgpID0+ICh7fSksIGNlbGxzcGFjaW5nID0+ICh7IGNlbGxzcGFjaW5nIH0pKTtcbiAgICAgICAgY29uc3QgcGFkZGluZyA9IGdldCQ0KHN0eWxlLCAnYm9yZGVyLXBhZGRpbmcnKS5vcihnZXQkNChhdHRycywgJ2NlbGxwYWRkaW5nJykpLmZvbGQoKCkgPT4gKHt9KSwgY2VsbHBhZGRpbmcgPT4gKHsgY2VsbHBhZGRpbmcgfSkpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnNwYWNpbmcsXG4gICAgICAgICAgLi4ucGFkZGluZ1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgIC4uLmRlZmF1bHREYXRhLFxuICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgLi4uYXR0cnMsXG4gICAgICAgIC4uLmFkdlN0eWxlLFxuICAgICAgICAuLi5nZXRCb3JkZXIoKSxcbiAgICAgICAgLi4uZ2V0Q2VsbFBhZGRpbmdDZWxsU3BhY2luZygpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfTtcbiAgICBjb25zdCBnZXRSb3dUeXBlID0gZWxtID0+IHRhYmxlKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsbSkpLm1hcCh0YWJsZSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSB7IHNlbGVjdGlvbjogZnJvbURvbShlbG0uY2VsbHMpIH07XG4gICAgICByZXR1cm4gZ2V0Um93c1R5cGUodGFibGUsIHRhcmdldCk7XG4gICAgfSkuZ2V0T3IoJycpO1xuICAgIGNvbnN0IGV4dHJhY3REYXRhRnJvbVRhYmxlRWxlbWVudCA9IChlZGl0b3IsIGVsbSwgaGFzQWR2VGFibGVUYWIpID0+IHtcbiAgICAgIGNvbnN0IGdldEJvcmRlciA9IChkb20sIGVsbSkgPT4ge1xuICAgICAgICBjb25zdCBvcHRCb3JkZXJXaWR0aCA9IGdldFJhdyhTdWdhckVsZW1lbnQuZnJvbURvbShlbG0pLCAnYm9yZGVyLXdpZHRoJyk7XG4gICAgICAgIGlmIChzaG91bGRTdHlsZVdpdGhDc3MoZWRpdG9yKSAmJiBvcHRCb3JkZXJXaWR0aC5pc1NvbWUoKSkge1xuICAgICAgICAgIHJldHVybiBvcHRCb3JkZXJXaWR0aC5nZXRPcignJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRvbS5nZXRBdHRyaWIoZWxtLCAnYm9yZGVyJykgfHwgZ2V0VERUSE92ZXJhbGxTdHlsZShlZGl0b3IuZG9tLCBlbG0sICdib3JkZXItd2lkdGgnKSB8fCBnZXRURFRIT3ZlcmFsbFN0eWxlKGVkaXRvci5kb20sIGVsbSwgJ2JvcmRlcicpIHx8ICcnO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBjZWxsc3BhY2luZyA9IHNob3VsZFN0eWxlV2l0aENzcyhlZGl0b3IpID8gZG9tLmdldFN0eWxlKGVsbSwgJ2JvcmRlci1zcGFjaW5nJykgfHwgZG9tLmdldEF0dHJpYihlbG0sICdjZWxsc3BhY2luZycpIDogZG9tLmdldEF0dHJpYihlbG0sICdjZWxsc3BhY2luZycpIHx8IGRvbS5nZXRTdHlsZShlbG0sICdib3JkZXItc3BhY2luZycpO1xuICAgICAgY29uc3QgY2VsbHBhZGRpbmcgPSBzaG91bGRTdHlsZVdpdGhDc3MoZWRpdG9yKSA/IGdldFREVEhPdmVyYWxsU3R5bGUoZG9tLCBlbG0sICdwYWRkaW5nJykgfHwgZG9tLmdldEF0dHJpYihlbG0sICdjZWxscGFkZGluZycpIDogZG9tLmdldEF0dHJpYihlbG0sICdjZWxscGFkZGluZycpIHx8IGdldFREVEhPdmVyYWxsU3R5bGUoZG9tLCBlbG0sICdwYWRkaW5nJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogZG9tLmdldFN0eWxlKGVsbSwgJ3dpZHRoJykgfHwgZG9tLmdldEF0dHJpYihlbG0sICd3aWR0aCcpLFxuICAgICAgICBoZWlnaHQ6IGRvbS5nZXRTdHlsZShlbG0sICdoZWlnaHQnKSB8fCBkb20uZ2V0QXR0cmliKGVsbSwgJ2hlaWdodCcpLFxuICAgICAgICBjZWxsc3BhY2luZzogY2VsbHNwYWNpbmcgIT09IG51bGwgJiYgY2VsbHNwYWNpbmcgIT09IHZvaWQgMCA/IGNlbGxzcGFjaW5nIDogJycsXG4gICAgICAgIGNlbGxwYWRkaW5nOiBjZWxscGFkZGluZyAhPT0gbnVsbCAmJiBjZWxscGFkZGluZyAhPT0gdm9pZCAwID8gY2VsbHBhZGRpbmcgOiAnJyxcbiAgICAgICAgYm9yZGVyOiBnZXRCb3JkZXIoZG9tLCBlbG0pLFxuICAgICAgICBjYXB0aW9uOiAhIWRvbS5zZWxlY3QoJ2NhcHRpb24nLCBlbG0pWzBdLFxuICAgICAgICBjbGFzczogZG9tLmdldEF0dHJpYihlbG0sICdjbGFzcycsICcnKSxcbiAgICAgICAgYWxpZ246IGdldEhBbGlnbm1lbnQoZWRpdG9yLCBlbG0pLFxuICAgICAgICAuLi5oYXNBZHZUYWJsZVRhYiA/IGV4dHJhY3RBZHZhbmNlZFN0eWxlcyhlbG0pIDoge31cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBleHRyYWN0RGF0YUZyb21Sb3dFbGVtZW50ID0gKGVkaXRvciwgZWxtLCBoYXNBZHZhbmNlZFJvd1RhYikgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlaWdodDogZG9tLmdldFN0eWxlKGVsbSwgJ2hlaWdodCcpIHx8IGRvbS5nZXRBdHRyaWIoZWxtLCAnaGVpZ2h0JyksXG4gICAgICAgIGNsYXNzOiBkb20uZ2V0QXR0cmliKGVsbSwgJ2NsYXNzJywgJycpLFxuICAgICAgICB0eXBlOiBnZXRSb3dUeXBlKGVsbSksXG4gICAgICAgIGFsaWduOiBnZXRIQWxpZ25tZW50KGVkaXRvciwgZWxtKSxcbiAgICAgICAgLi4uaGFzQWR2YW5jZWRSb3dUYWIgPyBleHRyYWN0QWR2YW5jZWRTdHlsZXMoZWxtKSA6IHt9XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZXh0cmFjdERhdGFGcm9tQ2VsbEVsZW1lbnQgPSAoZWRpdG9yLCBjZWxsLCBoYXNBZHZhbmNlZENlbGxUYWIsIGNvbHVtbikgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IGNvbEVsbSA9IGNvbHVtbi5nZXRPcihjZWxsKTtcbiAgICAgIGNvbnN0IGdldFN0eWxlID0gKGVsZW1lbnQsIHN0eWxlKSA9PiBkb20uZ2V0U3R5bGUoZWxlbWVudCwgc3R5bGUpIHx8IGRvbS5nZXRBdHRyaWIoZWxlbWVudCwgc3R5bGUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IGdldFN0eWxlKGNvbEVsbSwgJ3dpZHRoJyksXG4gICAgICAgIGhlaWdodDogZ2V0U3R5bGUoY2VsbCwgJ2hlaWdodCcpLFxuICAgICAgICBzY29wZTogZG9tLmdldEF0dHJpYihjZWxsLCAnc2NvcGUnKSxcbiAgICAgICAgY2VsbHR5cGU6IGdldE5vZGVOYW1lKGNlbGwpLFxuICAgICAgICBjbGFzczogZG9tLmdldEF0dHJpYihjZWxsLCAnY2xhc3MnLCAnJyksXG4gICAgICAgIGhhbGlnbjogZ2V0SEFsaWdubWVudChlZGl0b3IsIGNlbGwpLFxuICAgICAgICB2YWxpZ246IGdldFZBbGlnbm1lbnQoZWRpdG9yLCBjZWxsKSxcbiAgICAgICAgLi4uaGFzQWR2YW5jZWRDZWxsVGFiID8gZXh0cmFjdEFkdmFuY2VkU3R5bGVzKGNlbGwpIDoge31cbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGdldFNlbGVjdGVkQ2VsbHMgPSAodGFibGUsIGNlbGxzKSA9PiB7XG4gICAgICBjb25zdCB3YXJlaG91c2UgPSBXYXJlaG91c2UuZnJvbVRhYmxlKHRhYmxlKTtcbiAgICAgIGNvbnN0IGFsbENlbGxzID0gV2FyZWhvdXNlLmp1c3RDZWxscyh3YXJlaG91c2UpO1xuICAgICAgY29uc3QgZmlsdGVyZWQgPSBmaWx0ZXIoYWxsQ2VsbHMsIGNlbGxBID0+IGV4aXN0cyhjZWxscywgY2VsbEIgPT4gZXEoY2VsbEEuZWxlbWVudCwgY2VsbEIpKSk7XG4gICAgICByZXR1cm4gbWFwKGZpbHRlcmVkLCBjZWxsID0+ICh7XG4gICAgICAgIGVsZW1lbnQ6IGNlbGwuZWxlbWVudC5kb20sXG4gICAgICAgIGNvbHVtbjogV2FyZWhvdXNlLmdldENvbHVtbkF0KHdhcmVob3VzZSwgY2VsbC5jb2x1bW4pLm1hcChjb2wgPT4gY29sLmVsZW1lbnQuZG9tKVxuICAgICAgfSkpO1xuICAgIH07XG4gICAgY29uc3QgdXBkYXRlU2ltcGxlUHJvcHMkMSA9IChtb2RpZmllciwgY29sTW9kaWZpZXIsIGRhdGEsIHNob3VsZFVwZGF0ZSkgPT4ge1xuICAgICAgaWYgKHNob3VsZFVwZGF0ZSgnc2NvcGUnKSkge1xuICAgICAgICBtb2RpZmllci5zZXRBdHRyaWIoJ3Njb3BlJywgZGF0YS5zY29wZSk7XG4gICAgICB9XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlKCdjbGFzcycpKSB7XG4gICAgICAgIG1vZGlmaWVyLnNldEF0dHJpYignY2xhc3MnLCBkYXRhLmNsYXNzKTtcbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRVcGRhdGUoJ2hlaWdodCcpKSB7XG4gICAgICAgIG1vZGlmaWVyLnNldFN0eWxlKCdoZWlnaHQnLCBhZGRQeFN1ZmZpeChkYXRhLmhlaWdodCkpO1xuICAgICAgfVxuICAgICAgaWYgKHNob3VsZFVwZGF0ZSgnd2lkdGgnKSkge1xuICAgICAgICBjb2xNb2RpZmllci5zZXRTdHlsZSgnd2lkdGgnLCBhZGRQeFN1ZmZpeChkYXRhLndpZHRoKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVBZHZhbmNlZFByb3BzJDEgPSAobW9kaWZpZXIsIGRhdGEsIHNob3VsZFVwZGF0ZSkgPT4ge1xuICAgICAgaWYgKHNob3VsZFVwZGF0ZSgnYmFja2dyb3VuZGNvbG9yJykpIHtcbiAgICAgICAgbW9kaWZpZXIuc2V0Rm9ybWF0KCd0YWJsZWNlbGxiYWNrZ3JvdW5kY29sb3InLCBkYXRhLmJhY2tncm91bmRjb2xvcik7XG4gICAgICB9XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlKCdib3JkZXJjb2xvcicpKSB7XG4gICAgICAgIG1vZGlmaWVyLnNldEZvcm1hdCgndGFibGVjZWxsYm9yZGVyY29sb3InLCBkYXRhLmJvcmRlcmNvbG9yKTtcbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRVcGRhdGUoJ2JvcmRlcnN0eWxlJykpIHtcbiAgICAgICAgbW9kaWZpZXIuc2V0Rm9ybWF0KCd0YWJsZWNlbGxib3JkZXJzdHlsZScsIGRhdGEuYm9yZGVyc3R5bGUpO1xuICAgICAgfVxuICAgICAgaWYgKHNob3VsZFVwZGF0ZSgnYm9yZGVyd2lkdGgnKSkge1xuICAgICAgICBtb2RpZmllci5zZXRGb3JtYXQoJ3RhYmxlY2VsbGJvcmRlcndpZHRoJywgYWRkUHhTdWZmaXgoZGF0YS5ib3JkZXJ3aWR0aCkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYXBwbHlTdHlsZURhdGEkMSA9IChlZGl0b3IsIGNlbGxzLCBkYXRhLCB3YXNDaGFuZ2VkKSA9PiB7XG4gICAgICBjb25zdCBpc1NpbmdsZUNlbGwgPSBjZWxscy5sZW5ndGggPT09IDE7XG4gICAgICBlYWNoKGNlbGxzLCBpdGVtID0+IHtcbiAgICAgICAgY29uc3QgY2VsbEVsbSA9IGl0ZW0uZWxlbWVudDtcbiAgICAgICAgY29uc3Qgc2hvdWxkT3ZlcnJpZGVDdXJyZW50VmFsdWUgPSBpc1NpbmdsZUNlbGwgPyBhbHdheXMgOiB3YXNDaGFuZ2VkO1xuICAgICAgICBjb25zdCBtb2RpZmllciA9IERvbU1vZGlmaWVyLm5vcm1hbChlZGl0b3IsIGNlbGxFbG0pO1xuICAgICAgICBjb25zdCBjb2xNb2RpZmllciA9IGl0ZW0uY29sdW1uLm1hcChjb2wgPT4gRG9tTW9kaWZpZXIubm9ybWFsKGVkaXRvciwgY29sKSkuZ2V0T3IobW9kaWZpZXIpO1xuICAgICAgICB1cGRhdGVTaW1wbGVQcm9wcyQxKG1vZGlmaWVyLCBjb2xNb2RpZmllciwgZGF0YSwgc2hvdWxkT3ZlcnJpZGVDdXJyZW50VmFsdWUpO1xuICAgICAgICBpZiAoaGFzQWR2YW5jZWRDZWxsVGFiKGVkaXRvcikpIHtcbiAgICAgICAgICB1cGRhdGVBZHZhbmNlZFByb3BzJDEobW9kaWZpZXIsIGRhdGEsIHNob3VsZE92ZXJyaWRlQ3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod2FzQ2hhbmdlZCgnaGFsaWduJykpIHtcbiAgICAgICAgICBzZXRBbGlnbihlZGl0b3IsIGNlbGxFbG0sIGRhdGEuaGFsaWduKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod2FzQ2hhbmdlZCgndmFsaWduJykpIHtcbiAgICAgICAgICBzZXRWQWxpZ24oZWRpdG9yLCBjZWxsRWxtLCBkYXRhLnZhbGlnbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYXBwbHlTdHJ1Y3R1cmVEYXRhJDEgPSAoZWRpdG9yLCBkYXRhKSA9PiB7XG4gICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZVRhYmxlQ2VsbFR5cGUnLCBmYWxzZSwge1xuICAgICAgICB0eXBlOiBkYXRhLmNlbGx0eXBlLFxuICAgICAgICBub19ldmVudHM6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYXBwbHlDZWxsRGF0YSA9IChlZGl0b3IsIGNlbGxzLCBvbGREYXRhLCBkYXRhKSA9PiB7XG4gICAgICBjb25zdCBtb2RpZmllZERhdGEgPSBmaWx0ZXIkMShkYXRhLCAodmFsdWUsIGtleSkgPT4gb2xkRGF0YVtrZXldICE9PSB2YWx1ZSk7XG4gICAgICBpZiAoc2l6ZShtb2RpZmllZERhdGEpID4gMCAmJiBjZWxscy5sZW5ndGggPj0gMSkge1xuICAgICAgICB0YWJsZShjZWxsc1swXSkuZWFjaCh0YWJsZSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxscyA9IGdldFNlbGVjdGVkQ2VsbHModGFibGUsIGNlbGxzKTtcbiAgICAgICAgICBjb25zdCBzdHlsZU1vZGlmaWVkID0gc2l6ZShmaWx0ZXIkMShtb2RpZmllZERhdGEsIChfdmFsdWUsIGtleSkgPT4ga2V5ICE9PSAnc2NvcGUnICYmIGtleSAhPT0gJ2NlbGx0eXBlJykpID4gMDtcbiAgICAgICAgICBjb25zdCBzdHJ1Y3R1cmVNb2RpZmllZCA9IGhhcyhtb2RpZmllZERhdGEsICdjZWxsdHlwZScpO1xuICAgICAgICAgIGlmIChzdHlsZU1vZGlmaWVkIHx8IGhhcyhtb2RpZmllZERhdGEsICdzY29wZScpKSB7XG4gICAgICAgICAgICBhcHBseVN0eWxlRGF0YSQxKGVkaXRvciwgc2VsZWN0ZWRDZWxscywgZGF0YSwgY3VycnkoaGFzLCBtb2RpZmllZERhdGEpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0cnVjdHVyZU1vZGlmaWVkKSB7XG4gICAgICAgICAgICBhcHBseVN0cnVjdHVyZURhdGEkMShlZGl0b3IsIGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaXJlVGFibGVNb2RpZmllZChlZGl0b3IsIHRhYmxlLmRvbSwge1xuICAgICAgICAgICAgc3RydWN0dXJlOiBzdHJ1Y3R1cmVNb2RpZmllZCxcbiAgICAgICAgICAgIHN0eWxlOiBzdHlsZU1vZGlmaWVkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb25TdWJtaXRDZWxsRm9ybSA9IChlZGl0b3IsIGNlbGxzLCBvbGREYXRhLCBhcGkpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhcGkuZ2V0RGF0YSgpO1xuICAgICAgYXBpLmNsb3NlKCk7XG4gICAgICBlZGl0b3IudW5kb01hbmFnZXIudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICBhcHBseUNlbGxEYXRhKGVkaXRvciwgY2VsbHMsIG9sZERhdGEsIGRhdGEpO1xuICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0RGF0YSQxID0gKGVkaXRvciwgY2VsbHMpID0+IHtcbiAgICAgIGNvbnN0IGNlbGxzRGF0YSA9IHRhYmxlKGNlbGxzWzBdKS5tYXAodGFibGUgPT4gbWFwKGdldFNlbGVjdGVkQ2VsbHModGFibGUsIGNlbGxzKSwgaXRlbSA9PiBleHRyYWN0RGF0YUZyb21DZWxsRWxlbWVudChlZGl0b3IsIGl0ZW0uZWxlbWVudCwgaGFzQWR2YW5jZWRDZWxsVGFiKGVkaXRvciksIGl0ZW0uY29sdW1uKSkpO1xuICAgICAgcmV0dXJuIGdldFNoYXJlZFZhbHVlcyhjZWxsc0RhdGEuZ2V0T3JEaWUoKSk7XG4gICAgfTtcbiAgICBjb25zdCBvcGVuJDIgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgY2VsbHMgPSBnZXRDZWxsc0Zyb21TZWxlY3Rpb24oZWRpdG9yKTtcbiAgICAgIGlmIChjZWxscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YSA9IGdldERhdGEkMShlZGl0b3IsIGNlbGxzKTtcbiAgICAgIGNvbnN0IGRpYWxvZ1RhYlBhbmVsID0ge1xuICAgICAgICB0eXBlOiAndGFicGFuZWwnLFxuICAgICAgICB0YWJzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6ICdHZW5lcmFsJyxcbiAgICAgICAgICAgIG5hbWU6ICdnZW5lcmFsJyxcbiAgICAgICAgICAgIGl0ZW1zOiBnZXRJdGVtcyQyKGVkaXRvcilcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdldEFkdmFuY2VkVGFiKGVkaXRvciwgJ2NlbGwnKVxuICAgICAgICBdXG4gICAgICB9O1xuICAgICAgY29uc3QgZGlhbG9nUGFuZWwgPSB7XG4gICAgICAgIHR5cGU6ICdwYW5lbCcsXG4gICAgICAgIGl0ZW1zOiBbe1xuICAgICAgICAgICAgdHlwZTogJ2dyaWQnLFxuICAgICAgICAgICAgY29sdW1uczogMixcbiAgICAgICAgICAgIGl0ZW1zOiBnZXRJdGVtcyQyKGVkaXRvcilcbiAgICAgICAgICB9XVxuICAgICAgfTtcbiAgICAgIGVkaXRvci53aW5kb3dNYW5hZ2VyLm9wZW4oe1xuICAgICAgICB0aXRsZTogJ0NlbGwgUHJvcGVydGllcycsXG4gICAgICAgIHNpemU6ICdub3JtYWwnLFxuICAgICAgICBib2R5OiBoYXNBZHZhbmNlZENlbGxUYWIoZWRpdG9yKSA/IGRpYWxvZ1RhYlBhbmVsIDogZGlhbG9nUGFuZWwsXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAnY2FuY2VsJyxcbiAgICAgICAgICAgIG5hbWU6ICdjYW5jZWwnLFxuICAgICAgICAgICAgdGV4dDogJ0NhbmNlbCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICAgICAgbmFtZTogJ3NhdmUnLFxuICAgICAgICAgICAgdGV4dDogJ1NhdmUnLFxuICAgICAgICAgICAgcHJpbWFyeTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgaW5pdGlhbERhdGE6IGRhdGEsXG4gICAgICAgIG9uU3VibWl0OiBjdXJyeShvblN1Ym1pdENlbGxGb3JtLCBlZGl0b3IsIGNlbGxzLCBkYXRhKVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldENsYXNzTGlzdCA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBjbGFzc2VzID0gYnVpbGRMaXN0SXRlbXMoZ2V0Um93Q2xhc3NMaXN0KGVkaXRvcikpO1xuICAgICAgaWYgKGNsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgbmFtZTogJ2NsYXNzJyxcbiAgICAgICAgICB0eXBlOiAnbGlzdGJveCcsXG4gICAgICAgICAgbGFiZWw6ICdDbGFzcycsXG4gICAgICAgICAgaXRlbXM6IGNsYXNzZXNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgZm9ybUNoaWxkcmVuID0gW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnbGlzdGJveCcsXG4gICAgICAgIG5hbWU6ICd0eXBlJyxcbiAgICAgICAgbGFiZWw6ICdSb3cgdHlwZScsXG4gICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogJ0hlYWRlcicsXG4gICAgICAgICAgICB2YWx1ZTogJ2hlYWRlcidcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRleHQ6ICdCb2R5JyxcbiAgICAgICAgICAgIHZhbHVlOiAnYm9keSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRleHQ6ICdGb290ZXInLFxuICAgICAgICAgICAgdmFsdWU6ICdmb290ZXInXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiAnbGlzdGJveCcsXG4gICAgICAgIG5hbWU6ICdhbGlnbicsXG4gICAgICAgIGxhYmVsOiAnQWxpZ25tZW50JyxcbiAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiAnTm9uZScsXG4gICAgICAgICAgICB2YWx1ZTogJydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRleHQ6ICdMZWZ0JyxcbiAgICAgICAgICAgIHZhbHVlOiAnbGVmdCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRleHQ6ICdDZW50ZXInLFxuICAgICAgICAgICAgdmFsdWU6ICdjZW50ZXInXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiAnUmlnaHQnLFxuICAgICAgICAgICAgdmFsdWU6ICdyaWdodCdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnSGVpZ2h0JyxcbiAgICAgICAgbmFtZTogJ2hlaWdodCcsXG4gICAgICAgIHR5cGU6ICdpbnB1dCdcbiAgICAgIH1cbiAgICBdO1xuICAgIGNvbnN0IGdldEl0ZW1zJDEgPSBlZGl0b3IgPT4gZm9ybUNoaWxkcmVuLmNvbmNhdChnZXRDbGFzc0xpc3QoZWRpdG9yKS50b0FycmF5KCkpO1xuXG4gICAgY29uc3QgdXBkYXRlU2ltcGxlUHJvcHMgPSAobW9kaWZpZXIsIGRhdGEsIHNob3VsZFVwZGF0ZSkgPT4ge1xuICAgICAgaWYgKHNob3VsZFVwZGF0ZSgnY2xhc3MnKSkge1xuICAgICAgICBtb2RpZmllci5zZXRBdHRyaWIoJ2NsYXNzJywgZGF0YS5jbGFzcyk7XG4gICAgICB9XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlKCdoZWlnaHQnKSkge1xuICAgICAgICBtb2RpZmllci5zZXRTdHlsZSgnaGVpZ2h0JywgYWRkUHhTdWZmaXgoZGF0YS5oZWlnaHQpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHVwZGF0ZUFkdmFuY2VkUHJvcHMgPSAobW9kaWZpZXIsIGRhdGEsIHNob3VsZFVwZGF0ZSkgPT4ge1xuICAgICAgaWYgKHNob3VsZFVwZGF0ZSgnYmFja2dyb3VuZGNvbG9yJykpIHtcbiAgICAgICAgbW9kaWZpZXIuc2V0U3R5bGUoJ2JhY2tncm91bmQtY29sb3InLCBkYXRhLmJhY2tncm91bmRjb2xvcik7XG4gICAgICB9XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlKCdib3JkZXJjb2xvcicpKSB7XG4gICAgICAgIG1vZGlmaWVyLnNldFN0eWxlKCdib3JkZXItY29sb3InLCBkYXRhLmJvcmRlcmNvbG9yKTtcbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRVcGRhdGUoJ2JvcmRlcnN0eWxlJykpIHtcbiAgICAgICAgbW9kaWZpZXIuc2V0U3R5bGUoJ2JvcmRlci1zdHlsZScsIGRhdGEuYm9yZGVyc3R5bGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYXBwbHlTdHlsZURhdGEgPSAoZWRpdG9yLCByb3dzLCBkYXRhLCB3YXNDaGFuZ2VkKSA9PiB7XG4gICAgICBjb25zdCBpc1NpbmdsZVJvdyA9IHJvd3MubGVuZ3RoID09PSAxO1xuICAgICAgY29uc3Qgc2hvdWxkT3ZlcnJpZGVDdXJyZW50VmFsdWUgPSBpc1NpbmdsZVJvdyA/IGFsd2F5cyA6IHdhc0NoYW5nZWQ7XG4gICAgICBlYWNoKHJvd3MsIHJvd0VsbSA9PiB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVyID0gRG9tTW9kaWZpZXIubm9ybWFsKGVkaXRvciwgcm93RWxtKTtcbiAgICAgICAgdXBkYXRlU2ltcGxlUHJvcHMobW9kaWZpZXIsIGRhdGEsIHNob3VsZE92ZXJyaWRlQ3VycmVudFZhbHVlKTtcbiAgICAgICAgaWYgKGhhc0FkdmFuY2VkUm93VGFiKGVkaXRvcikpIHtcbiAgICAgICAgICB1cGRhdGVBZHZhbmNlZFByb3BzKG1vZGlmaWVyLCBkYXRhLCBzaG91bGRPdmVycmlkZUN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdhc0NoYW5nZWQoJ2FsaWduJykpIHtcbiAgICAgICAgICBzZXRBbGlnbihlZGl0b3IsIHJvd0VsbSwgZGF0YS5hbGlnbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYXBwbHlTdHJ1Y3R1cmVEYXRhID0gKGVkaXRvciwgZGF0YSkgPT4ge1xuICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VUYWJsZVJvd1R5cGUnLCBmYWxzZSwge1xuICAgICAgICB0eXBlOiBkYXRhLnR5cGUsXG4gICAgICAgIG5vX2V2ZW50czogdHJ1ZVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBhcHBseVJvd0RhdGEgPSAoZWRpdG9yLCByb3dzLCBvbGREYXRhLCBkYXRhKSA9PiB7XG4gICAgICBjb25zdCBtb2RpZmllZERhdGEgPSBmaWx0ZXIkMShkYXRhLCAodmFsdWUsIGtleSkgPT4gb2xkRGF0YVtrZXldICE9PSB2YWx1ZSk7XG4gICAgICBpZiAoc2l6ZShtb2RpZmllZERhdGEpID4gMCkge1xuICAgICAgICBjb25zdCB0eXBlTW9kaWZpZWQgPSBoYXMobW9kaWZpZWREYXRhLCAndHlwZScpO1xuICAgICAgICBjb25zdCBzdHlsZU1vZGlmaWVkID0gdHlwZU1vZGlmaWVkID8gc2l6ZShtb2RpZmllZERhdGEpID4gMSA6IHRydWU7XG4gICAgICAgIGlmIChzdHlsZU1vZGlmaWVkKSB7XG4gICAgICAgICAgYXBwbHlTdHlsZURhdGEoZWRpdG9yLCByb3dzLCBkYXRhLCBjdXJyeShoYXMsIG1vZGlmaWVkRGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlTW9kaWZpZWQpIHtcbiAgICAgICAgICBhcHBseVN0cnVjdHVyZURhdGEoZWRpdG9yLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICB0YWJsZShTdWdhckVsZW1lbnQuZnJvbURvbShyb3dzWzBdKSkuZWFjaCh0YWJsZSA9PiBmaXJlVGFibGVNb2RpZmllZChlZGl0b3IsIHRhYmxlLmRvbSwge1xuICAgICAgICAgIHN0cnVjdHVyZTogdHlwZU1vZGlmaWVkLFxuICAgICAgICAgIHN0eWxlOiBzdHlsZU1vZGlmaWVkXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG9uU3VibWl0Um93Rm9ybSA9IChlZGl0b3IsIHJvd3MsIG9sZERhdGEsIGFwaSkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGFwaS5nZXREYXRhKCk7XG4gICAgICBhcGkuY2xvc2UoKTtcbiAgICAgIGVkaXRvci51bmRvTWFuYWdlci50cmFuc2FjdCgoKSA9PiB7XG4gICAgICAgIGFwcGx5Um93RGF0YShlZGl0b3IsIHJvd3MsIG9sZERhdGEsIGRhdGEpO1xuICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb3BlbiQxID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHJvd3MgPSBnZXRSb3dzRnJvbVNlbGVjdGlvbihnZXRTZWxlY3Rpb25TdGFydChlZGl0b3IpLCBlcGhlbWVyYS5zZWxlY3RlZCk7XG4gICAgICBpZiAocm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgcm93c0RhdGEgPSBtYXAocm93cywgcm93RWxtID0+IGV4dHJhY3REYXRhRnJvbVJvd0VsZW1lbnQoZWRpdG9yLCByb3dFbG0uZG9tLCBoYXNBZHZhbmNlZFJvd1RhYihlZGl0b3IpKSk7XG4gICAgICBjb25zdCBkYXRhID0gZ2V0U2hhcmVkVmFsdWVzKHJvd3NEYXRhKTtcbiAgICAgIGNvbnN0IGRpYWxvZ1RhYlBhbmVsID0ge1xuICAgICAgICB0eXBlOiAndGFicGFuZWwnLFxuICAgICAgICB0YWJzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6ICdHZW5lcmFsJyxcbiAgICAgICAgICAgIG5hbWU6ICdnZW5lcmFsJyxcbiAgICAgICAgICAgIGl0ZW1zOiBnZXRJdGVtcyQxKGVkaXRvcilcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdldEFkdmFuY2VkVGFiKGVkaXRvciwgJ3JvdycpXG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgICBjb25zdCBkaWFsb2dQYW5lbCA9IHtcbiAgICAgICAgdHlwZTogJ3BhbmVsJyxcbiAgICAgICAgaXRlbXM6IFt7XG4gICAgICAgICAgICB0eXBlOiAnZ3JpZCcsXG4gICAgICAgICAgICBjb2x1bW5zOiAyLFxuICAgICAgICAgICAgaXRlbXM6IGdldEl0ZW1zJDEoZWRpdG9yKVxuICAgICAgICAgIH1dXG4gICAgICB9O1xuICAgICAgZWRpdG9yLndpbmRvd01hbmFnZXIub3Blbih7XG4gICAgICAgIHRpdGxlOiAnUm93IFByb3BlcnRpZXMnLFxuICAgICAgICBzaXplOiAnbm9ybWFsJyxcbiAgICAgICAgYm9keTogaGFzQWR2YW5jZWRSb3dUYWIoZWRpdG9yKSA/IGRpYWxvZ1RhYlBhbmVsIDogZGlhbG9nUGFuZWwsXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAnY2FuY2VsJyxcbiAgICAgICAgICAgIG5hbWU6ICdjYW5jZWwnLFxuICAgICAgICAgICAgdGV4dDogJ0NhbmNlbCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICAgICAgbmFtZTogJ3NhdmUnLFxuICAgICAgICAgICAgdGV4dDogJ1NhdmUnLFxuICAgICAgICAgICAgcHJpbWFyeTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgaW5pdGlhbERhdGE6IGRhdGEsXG4gICAgICAgIG9uU3VibWl0OiBjdXJyeShvblN1Ym1pdFJvd0Zvcm0sIGVkaXRvciwgbWFwKHJvd3MsIHIgPT4gci5kb20pLCBkYXRhKVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldEl0ZW1zID0gKGVkaXRvciwgY2xhc3NlcywgaW5zZXJ0TmV3VGFibGUpID0+IHtcbiAgICAgIGNvbnN0IHJvd0NvbENvdW50SXRlbXMgPSAhaW5zZXJ0TmV3VGFibGUgPyBbXSA6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgICAgbmFtZTogJ2NvbHMnLFxuICAgICAgICAgIGxhYmVsOiAnQ29scycsXG4gICAgICAgICAgaW5wdXRNb2RlOiAnbnVtZXJpYydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgICAgbmFtZTogJ3Jvd3MnLFxuICAgICAgICAgIGxhYmVsOiAnUm93cycsXG4gICAgICAgICAgaW5wdXRNb2RlOiAnbnVtZXJpYydcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICAgIGNvbnN0IGFsd2F5c0l0ZW1zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgICBuYW1lOiAnd2lkdGgnLFxuICAgICAgICAgIGxhYmVsOiAnV2lkdGgnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICAgIG5hbWU6ICdoZWlnaHQnLFxuICAgICAgICAgIGxhYmVsOiAnSGVpZ2h0J1xuICAgICAgICB9XG4gICAgICBdO1xuICAgICAgY29uc3QgYXBwZWFyYW5jZUl0ZW1zID0gaGFzQXBwZWFyYW5jZU9wdGlvbnMoZWRpdG9yKSA/IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgICAgbmFtZTogJ2NlbGxzcGFjaW5nJyxcbiAgICAgICAgICBsYWJlbDogJ0NlbGwgc3BhY2luZycsXG4gICAgICAgICAgaW5wdXRNb2RlOiAnbnVtZXJpYydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgICAgbmFtZTogJ2NlbGxwYWRkaW5nJyxcbiAgICAgICAgICBsYWJlbDogJ0NlbGwgcGFkZGluZycsXG4gICAgICAgICAgaW5wdXRNb2RlOiAnbnVtZXJpYydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgICAgbmFtZTogJ2JvcmRlcicsXG4gICAgICAgICAgbGFiZWw6ICdCb3JkZXIgd2lkdGgnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnbGFiZWwnLFxuICAgICAgICAgIGxhYmVsOiAnQ2FwdGlvbicsXG4gICAgICAgICAgaXRlbXM6IFt7XG4gICAgICAgICAgICAgIHR5cGU6ICdjaGVja2JveCcsXG4gICAgICAgICAgICAgIG5hbWU6ICdjYXB0aW9uJyxcbiAgICAgICAgICAgICAgbGFiZWw6ICdTaG93IGNhcHRpb24nXG4gICAgICAgICAgICB9XVxuICAgICAgICB9XG4gICAgICBdIDogW107XG4gICAgICBjb25zdCBhbGlnbm1lbnRJdGVtID0gW3tcbiAgICAgICAgICB0eXBlOiAnbGlzdGJveCcsXG4gICAgICAgICAgbmFtZTogJ2FsaWduJyxcbiAgICAgICAgICBsYWJlbDogJ0FsaWdubWVudCcsXG4gICAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGV4dDogJ05vbmUnLFxuICAgICAgICAgICAgICB2YWx1ZTogJydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRleHQ6ICdMZWZ0JyxcbiAgICAgICAgICAgICAgdmFsdWU6ICdsZWZ0J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGV4dDogJ0NlbnRlcicsXG4gICAgICAgICAgICAgIHZhbHVlOiAnY2VudGVyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGV4dDogJ1JpZ2h0JyxcbiAgICAgICAgICAgICAgdmFsdWU6ICdyaWdodCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1dO1xuICAgICAgY29uc3QgY2xhc3NMaXN0SXRlbSA9IGNsYXNzZXMubGVuZ3RoID4gMCA/IFt7XG4gICAgICAgICAgdHlwZTogJ2xpc3Rib3gnLFxuICAgICAgICAgIG5hbWU6ICdjbGFzcycsXG4gICAgICAgICAgbGFiZWw6ICdDbGFzcycsXG4gICAgICAgICAgaXRlbXM6IGNsYXNzZXNcbiAgICAgICAgfV0gOiBbXTtcbiAgICAgIHJldHVybiByb3dDb2xDb3VudEl0ZW1zLmNvbmNhdChhbHdheXNJdGVtcykuY29uY2F0KGFwcGVhcmFuY2VJdGVtcykuY29uY2F0KGFsaWdubWVudEl0ZW0pLmNvbmNhdChjbGFzc0xpc3RJdGVtKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3R5bGVURFRIID0gKGRvbSwgZWxtLCBuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKGVsbS50YWdOYW1lID09PSAnVEQnIHx8IGVsbS50YWdOYW1lID09PSAnVEgnKSB7XG4gICAgICAgIGlmIChpc1N0cmluZyhuYW1lKSAmJiBpc05vbk51bGxhYmxlKHZhbHVlKSkge1xuICAgICAgICAgIGRvbS5zZXRTdHlsZShlbG0sIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb20uc2V0U3R5bGVzKGVsbSwgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChlbG0uY2hpbGRyZW4pIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsbS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc3R5bGVURFRIKGRvbSwgZWxtLmNoaWxkcmVuW2ldLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhcHBseURhdGFUb0VsZW1lbnQgPSAoZWRpdG9yLCB0YWJsZUVsbSwgZGF0YSwgc2hvdWxkQXBwbHlPbkNlbGwpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBhdHRycyA9IHt9O1xuICAgICAgY29uc3Qgc3R5bGVzID0ge307XG4gICAgICBjb25zdCBzaG91bGRTdHlsZVdpdGhDc3MkMSA9IHNob3VsZFN0eWxlV2l0aENzcyhlZGl0b3IpO1xuICAgICAgY29uc3QgaGFzQWR2YW5jZWRUYWJsZVRhYiQxID0gaGFzQWR2YW5jZWRUYWJsZVRhYihlZGl0b3IpO1xuICAgICAgaWYgKCFpc1VuZGVmaW5lZChkYXRhLmNsYXNzKSkge1xuICAgICAgICBhdHRycy5jbGFzcyA9IGRhdGEuY2xhc3M7XG4gICAgICB9XG4gICAgICBzdHlsZXMuaGVpZ2h0ID0gYWRkUHhTdWZmaXgoZGF0YS5oZWlnaHQpO1xuICAgICAgaWYgKHNob3VsZFN0eWxlV2l0aENzcyQxKSB7XG4gICAgICAgIHN0eWxlcy53aWR0aCA9IGFkZFB4U3VmZml4KGRhdGEud2lkdGgpO1xuICAgICAgfSBlbHNlIGlmIChkb20uZ2V0QXR0cmliKHRhYmxlRWxtLCAnd2lkdGgnKSkge1xuICAgICAgICBhdHRycy53aWR0aCA9IHJlbW92ZVB4U3VmZml4KGRhdGEud2lkdGgpO1xuICAgICAgfVxuICAgICAgaWYgKHNob3VsZFN0eWxlV2l0aENzcyQxKSB7XG4gICAgICAgIHN0eWxlc1snYm9yZGVyLXdpZHRoJ10gPSBhZGRQeFN1ZmZpeChkYXRhLmJvcmRlcik7XG4gICAgICAgIHN0eWxlc1snYm9yZGVyLXNwYWNpbmcnXSA9IGFkZFB4U3VmZml4KGRhdGEuY2VsbHNwYWNpbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXR0cnMuYm9yZGVyID0gZGF0YS5ib3JkZXI7XG4gICAgICAgIGF0dHJzLmNlbGxwYWRkaW5nID0gZGF0YS5jZWxscGFkZGluZztcbiAgICAgICAgYXR0cnMuY2VsbHNwYWNpbmcgPSBkYXRhLmNlbGxzcGFjaW5nO1xuICAgICAgfVxuICAgICAgaWYgKHNob3VsZFN0eWxlV2l0aENzcyQxICYmIHRhYmxlRWxtLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IGNlbGxTdHlsZXMgPSB7fTtcbiAgICAgICAgaWYgKHNob3VsZEFwcGx5T25DZWxsLmJvcmRlcikge1xuICAgICAgICAgIGNlbGxTdHlsZXNbJ2JvcmRlci13aWR0aCddID0gYWRkUHhTdWZmaXgoZGF0YS5ib3JkZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaG91bGRBcHBseU9uQ2VsbC5jZWxscGFkZGluZykge1xuICAgICAgICAgIGNlbGxTdHlsZXMucGFkZGluZyA9IGFkZFB4U3VmZml4KGRhdGEuY2VsbHBhZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNBZHZhbmNlZFRhYmxlVGFiJDEgJiYgc2hvdWxkQXBwbHlPbkNlbGwuYm9yZGVyY29sb3IpIHtcbiAgICAgICAgICBjZWxsU3R5bGVzWydib3JkZXItY29sb3InXSA9IGRhdGEuYm9yZGVyY29sb3I7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VtcHR5JDEoY2VsbFN0eWxlcykpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYmxlRWxtLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzdHlsZVREVEgoZG9tLCB0YWJsZUVsbS5jaGlsZHJlbltpXSwgY2VsbFN0eWxlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaGFzQWR2YW5jZWRUYWJsZVRhYiQxKSB7XG4gICAgICAgIGNvbnN0IGFkdkRhdGEgPSBkYXRhO1xuICAgICAgICBzdHlsZXNbJ2JhY2tncm91bmQtY29sb3InXSA9IGFkdkRhdGEuYmFja2dyb3VuZGNvbG9yO1xuICAgICAgICBzdHlsZXNbJ2JvcmRlci1jb2xvciddID0gYWR2RGF0YS5ib3JkZXJjb2xvcjtcbiAgICAgICAgc3R5bGVzWydib3JkZXItc3R5bGUnXSA9IGFkdkRhdGEuYm9yZGVyc3R5bGU7XG4gICAgICB9XG4gICAgICBkb20uc2V0U3R5bGVzKHRhYmxlRWxtLCB7XG4gICAgICAgIC4uLmdldERlZmF1bHRTdHlsZXMoZWRpdG9yKSxcbiAgICAgICAgLi4uc3R5bGVzXG4gICAgICB9KTtcbiAgICAgIGRvbS5zZXRBdHRyaWJzKHRhYmxlRWxtLCB7XG4gICAgICAgIC4uLmdldERlZmF1bHRBdHRyaWJ1dGVzKGVkaXRvciksXG4gICAgICAgIC4uLmF0dHJzXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG9uU3VibWl0VGFibGVGb3JtID0gKGVkaXRvciwgdGFibGVFbG0sIG9sZERhdGEsIGFwaSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhcGkuZ2V0RGF0YSgpO1xuICAgICAgY29uc3QgbW9kaWZpZWREYXRhID0gZmlsdGVyJDEoZGF0YSwgKHZhbHVlLCBrZXkpID0+IG9sZERhdGFba2V5XSAhPT0gdmFsdWUpO1xuICAgICAgYXBpLmNsb3NlKCk7XG4gICAgICBpZiAoZGF0YS5jbGFzcyA9PT0gJycpIHtcbiAgICAgICAgZGVsZXRlIGRhdGEuY2xhc3M7XG4gICAgICB9XG4gICAgICBlZGl0b3IudW5kb01hbmFnZXIudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIXRhYmxlRWxtKSB7XG4gICAgICAgICAgY29uc3QgY29scyA9IHRvSW50KGRhdGEuY29scykuZ2V0T3IoMSk7XG4gICAgICAgICAgY29uc3Qgcm93cyA9IHRvSW50KGRhdGEucm93cykuZ2V0T3IoMSk7XG4gICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VJbnNlcnRUYWJsZScsIGZhbHNlLCB7XG4gICAgICAgICAgICByb3dzLFxuICAgICAgICAgICAgY29sdW1uczogY29sc1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRhYmxlRWxtID0gZ2V0U2VsZWN0aW9uQ2VsbChnZXRTZWxlY3Rpb25TdGFydChlZGl0b3IpLCBnZXRJc1Jvb3QoZWRpdG9yKSkuYmluZChjZWxsID0+IHRhYmxlKGNlbGwsIGdldElzUm9vdChlZGl0b3IpKSkubWFwKHRhYmxlID0+IHRhYmxlLmRvbSkuZ2V0T3JEaWUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2l6ZShtb2RpZmllZERhdGEpID4gMCkge1xuICAgICAgICAgIGNvbnN0IGFwcGxpY2FibGVDZWxsUHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgIGJvcmRlcjogaGFzKG1vZGlmaWVkRGF0YSwgJ2JvcmRlcicpLFxuICAgICAgICAgICAgYm9yZGVyY29sb3I6IGhhcyhtb2RpZmllZERhdGEsICdib3JkZXJjb2xvcicpLFxuICAgICAgICAgICAgY2VsbHBhZGRpbmc6IGhhcyhtb2RpZmllZERhdGEsICdjZWxscGFkZGluZycpXG4gICAgICAgICAgfTtcbiAgICAgICAgICBhcHBseURhdGFUb0VsZW1lbnQoZWRpdG9yLCB0YWJsZUVsbSwgZGF0YSwgYXBwbGljYWJsZUNlbGxQcm9wZXJ0aWVzKTtcbiAgICAgICAgICBjb25zdCBjYXB0aW9uRWxtID0gZG9tLnNlbGVjdCgnY2FwdGlvbicsIHRhYmxlRWxtKVswXTtcbiAgICAgICAgICBpZiAoY2FwdGlvbkVsbSAmJiAhZGF0YS5jYXB0aW9uIHx8ICFjYXB0aW9uRWxtICYmIGRhdGEuY2FwdGlvbikge1xuICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VUYWJsZVRvZ2dsZUNhcHRpb24nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0QWxpZ24oZWRpdG9yLCB0YWJsZUVsbSwgZGF0YS5hbGlnbik7XG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgIGVkaXRvci5hZGRWaXN1YWwoKTtcbiAgICAgICAgaWYgKHNpemUobW9kaWZpZWREYXRhKSA+IDApIHtcbiAgICAgICAgICBjb25zdCBjYXB0aW9uTW9kaWZpZWQgPSBoYXMobW9kaWZpZWREYXRhLCAnY2FwdGlvbicpO1xuICAgICAgICAgIGNvbnN0IHN0eWxlTW9kaWZpZWQgPSBjYXB0aW9uTW9kaWZpZWQgPyBzaXplKG1vZGlmaWVkRGF0YSkgPiAxIDogdHJ1ZTtcbiAgICAgICAgICBmaXJlVGFibGVNb2RpZmllZChlZGl0b3IsIHRhYmxlRWxtLCB7XG4gICAgICAgICAgICBzdHJ1Y3R1cmU6IGNhcHRpb25Nb2RpZmllZCxcbiAgICAgICAgICAgIHN0eWxlOiBzdHlsZU1vZGlmaWVkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb3BlbiA9IChlZGl0b3IsIGluc2VydE5ld1RhYmxlKSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgbGV0IHRhYmxlRWxtO1xuICAgICAgbGV0IGRhdGEgPSBleHRyYWN0RGF0YUZyb21TZXR0aW5ncyhlZGl0b3IsIGhhc0FkdmFuY2VkVGFibGVUYWIoZWRpdG9yKSk7XG4gICAgICBpZiAoaW5zZXJ0TmV3VGFibGUpIHtcbiAgICAgICAgZGF0YS5jb2xzID0gJzEnO1xuICAgICAgICBkYXRhLnJvd3MgPSAnMSc7XG4gICAgICAgIGlmIChoYXNBZHZhbmNlZFRhYmxlVGFiKGVkaXRvcikpIHtcbiAgICAgICAgICBkYXRhLmJvcmRlcnN0eWxlID0gJyc7XG4gICAgICAgICAgZGF0YS5ib3JkZXJjb2xvciA9ICcnO1xuICAgICAgICAgIGRhdGEuYmFja2dyb3VuZGNvbG9yID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhYmxlRWxtID0gZG9tLmdldFBhcmVudChlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KCksICd0YWJsZScsIGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgICBpZiAodGFibGVFbG0pIHtcbiAgICAgICAgICBkYXRhID0gZXh0cmFjdERhdGFGcm9tVGFibGVFbGVtZW50KGVkaXRvciwgdGFibGVFbG0sIGhhc0FkdmFuY2VkVGFibGVUYWIoZWRpdG9yKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGhhc0FkdmFuY2VkVGFibGVUYWIoZWRpdG9yKSkge1xuICAgICAgICAgICAgZGF0YS5ib3JkZXJzdHlsZSA9ICcnO1xuICAgICAgICAgICAgZGF0YS5ib3JkZXJjb2xvciA9ICcnO1xuICAgICAgICAgICAgZGF0YS5iYWNrZ3JvdW5kY29sb3IgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsYXNzZXMgPSBidWlsZExpc3RJdGVtcyhnZXRUYWJsZUNsYXNzTGlzdChlZGl0b3IpKTtcbiAgICAgIGlmIChjbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKGRhdGEuY2xhc3MpIHtcbiAgICAgICAgICBkYXRhLmNsYXNzID0gZGF0YS5jbGFzcy5yZXBsYWNlKC9cXHMqbWNlXFwtaXRlbVxcLXRhYmxlXFxzKi9nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGdlbmVyYWxQYW5lbCA9IHtcbiAgICAgICAgdHlwZTogJ2dyaWQnLFxuICAgICAgICBjb2x1bW5zOiAyLFxuICAgICAgICBpdGVtczogZ2V0SXRlbXMoZWRpdG9yLCBjbGFzc2VzLCBpbnNlcnROZXdUYWJsZSlcbiAgICAgIH07XG4gICAgICBjb25zdCBub25BZHZhbmNlZEZvcm0gPSAoKSA9PiAoe1xuICAgICAgICB0eXBlOiAncGFuZWwnLFxuICAgICAgICBpdGVtczogW2dlbmVyYWxQYW5lbF1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgYWR2YW5jZWRGb3JtID0gKCkgPT4gKHtcbiAgICAgICAgdHlwZTogJ3RhYnBhbmVsJyxcbiAgICAgICAgdGFiczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiAnR2VuZXJhbCcsXG4gICAgICAgICAgICBuYW1lOiAnZ2VuZXJhbCcsXG4gICAgICAgICAgICBpdGVtczogW2dlbmVyYWxQYW5lbF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGdldEFkdmFuY2VkVGFiKGVkaXRvciwgJ3RhYmxlJylcbiAgICAgICAgXVxuICAgICAgfSk7XG4gICAgICBjb25zdCBkaWFsb2dCb2R5ID0gaGFzQWR2YW5jZWRUYWJsZVRhYihlZGl0b3IpID8gYWR2YW5jZWRGb3JtKCkgOiBub25BZHZhbmNlZEZvcm0oKTtcbiAgICAgIGVkaXRvci53aW5kb3dNYW5hZ2VyLm9wZW4oe1xuICAgICAgICB0aXRsZTogJ1RhYmxlIFByb3BlcnRpZXMnLFxuICAgICAgICBzaXplOiAnbm9ybWFsJyxcbiAgICAgICAgYm9keTogZGlhbG9nQm9keSxcbiAgICAgICAgb25TdWJtaXQ6IGN1cnJ5KG9uU3VibWl0VGFibGVGb3JtLCBlZGl0b3IsIHRhYmxlRWxtLCBkYXRhKSxcbiAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICdjYW5jZWwnLFxuICAgICAgICAgICAgbmFtZTogJ2NhbmNlbCcsXG4gICAgICAgICAgICB0ZXh0OiAnQ2FuY2VsJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICBuYW1lOiAnc2F2ZScsXG4gICAgICAgICAgICB0ZXh0OiAnU2F2ZScsXG4gICAgICAgICAgICBwcmltYXJ5OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBpbml0aWFsRGF0YTogZGF0YVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlZ2lzdGVyQ29tbWFuZHMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgcnVuQWN0aW9uID0gZiA9PiB7XG4gICAgICAgIGlmIChpc0luRWRpdGFibGVDb250ZXh0KGdldFNlbGVjdGlvblN0YXJ0KGVkaXRvcikpKSB7XG4gICAgICAgICAgZigpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZWFjaCQxKHtcbiAgICAgICAgbWNlVGFibGVQcm9wczogY3Vycnkob3BlbiwgZWRpdG9yLCBmYWxzZSksXG4gICAgICAgIG1jZVRhYmxlUm93UHJvcHM6IGN1cnJ5KG9wZW4kMSwgZWRpdG9yKSxcbiAgICAgICAgbWNlVGFibGVDZWxsUHJvcHM6IGN1cnJ5KG9wZW4kMiwgZWRpdG9yKSxcbiAgICAgICAgbWNlSW5zZXJ0VGFibGVEaWFsb2c6IGN1cnJ5KG9wZW4sIGVkaXRvciwgdHJ1ZSlcbiAgICAgIH0sIChmdW5jLCBuYW1lKSA9PiBlZGl0b3IuYWRkQ29tbWFuZChuYW1lLCAoKSA9PiBydW5BY3Rpb24oZnVuYykpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2hpbGQgPSAoc2NvcGUsIHNlbGVjdG9yKSA9PiBjaGlsZCQxKHNjb3BlLCBzZWxlY3RvcikuaXNTb21lKCk7XG5cbiAgICBjb25zdCBzZWxlY3Rpb24gPSBpZGVudGl0eTtcbiAgICBjb25zdCB1bm1lcmdhYmxlID0gc2VsZWN0ZWRDZWxscyA9PiB7XG4gICAgICBjb25zdCBoYXNTcGFuID0gKGVsZW0sIHR5cGUpID0+IGdldE9wdChlbGVtLCB0eXBlKS5leGlzdHMoc3BhbiA9PiBwYXJzZUludChzcGFuLCAxMCkgPiAxKTtcbiAgICAgIGNvbnN0IGhhc1Jvd09yQ29sU3BhbiA9IGVsZW0gPT4gaGFzU3BhbihlbGVtLCAncm93c3BhbicpIHx8IGhhc1NwYW4oZWxlbSwgJ2NvbHNwYW4nKTtcbiAgICAgIHJldHVybiBzZWxlY3RlZENlbGxzLmxlbmd0aCA+IDAgJiYgZm9yYWxsKHNlbGVjdGVkQ2VsbHMsIGhhc1Jvd09yQ29sU3BhbikgPyBPcHRpb25hbC5zb21lKHNlbGVjdGVkQ2VsbHMpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgbWVyZ2FibGUgPSAodGFibGUsIHNlbGVjdGVkQ2VsbHMsIGVwaGVtZXJhKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0ZWRDZWxscy5sZW5ndGggPD0gMSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJldHJpZXZlQm94KHRhYmxlLCBlcGhlbWVyYS5maXJzdFNlbGVjdGVkU2VsZWN0b3IsIGVwaGVtZXJhLmxhc3RTZWxlY3RlZFNlbGVjdG9yKS5tYXAoYm91bmRzID0+ICh7XG4gICAgICAgICAgYm91bmRzLFxuICAgICAgICAgIGNlbGxzOiBzZWxlY3RlZENlbGxzXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgbm9NZW51ID0gY2VsbCA9PiAoe1xuICAgICAgZWxlbWVudDogY2VsbCxcbiAgICAgIG1lcmdhYmxlOiBPcHRpb25hbC5ub25lKCksXG4gICAgICB1bm1lcmdhYmxlOiBPcHRpb25hbC5ub25lKCksXG4gICAgICBzZWxlY3Rpb246IFtjZWxsXVxuICAgIH0pO1xuICAgIGNvbnN0IGZvck1lbnUgPSAoc2VsZWN0ZWRDZWxscywgdGFibGUsIGNlbGwpID0+ICh7XG4gICAgICBlbGVtZW50OiBjZWxsLFxuICAgICAgbWVyZ2FibGU6IG1lcmdhYmxlKHRhYmxlLCBzZWxlY3RlZENlbGxzLCBlcGhlbWVyYSksXG4gICAgICB1bm1lcmdhYmxlOiB1bm1lcmdhYmxlKHNlbGVjdGVkQ2VsbHMpLFxuICAgICAgc2VsZWN0aW9uOiBzZWxlY3Rpb24oc2VsZWN0ZWRDZWxscylcbiAgICB9KTtcblxuICAgIGNvbnN0IGdldFNlbGVjdGlvblRhcmdldHMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0cyA9IENlbGwoT3B0aW9uYWwubm9uZSgpKTtcbiAgICAgIGNvbnN0IGNoYW5nZUhhbmRsZXJzID0gQ2VsbChbXSk7XG4gICAgICBsZXQgc2VsZWN0aW9uRGV0YWlscyA9IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIGNvbnN0IGlzQ2FwdGlvbiA9IGlzVGFnKCdjYXB0aW9uJyk7XG4gICAgICBjb25zdCBpc0Rpc2FibGVkRm9yU2VsZWN0aW9uID0ga2V5ID0+IHNlbGVjdGlvbkRldGFpbHMuZm9yYWxsKGRldGFpbHMgPT4gIWRldGFpbHNba2V5XSk7XG4gICAgICBjb25zdCBnZXRTdGFydCA9ICgpID0+IGdldFNlbGVjdGlvbkNlbGxPckNhcHRpb24oZ2V0U2VsZWN0aW9uU3RhcnQoZWRpdG9yKSwgZ2V0SXNSb290KGVkaXRvcikpO1xuICAgICAgY29uc3QgZ2V0RW5kID0gKCkgPT4gZ2V0U2VsZWN0aW9uQ2VsbE9yQ2FwdGlvbihnZXRTZWxlY3Rpb25FbmQoZWRpdG9yKSwgZ2V0SXNSb290KGVkaXRvcikpO1xuICAgICAgY29uc3QgZmluZFRhcmdldHMgPSAoKSA9PiBnZXRTdGFydCgpLmJpbmQoc3RhcnRDZWxsT3JDYXB0aW9uID0+IGZsYXR0ZW4obGlmdDIodGFibGUoc3RhcnRDZWxsT3JDYXB0aW9uKSwgZ2V0RW5kKCkuYmluZCh0YWJsZSksIChzdGFydFRhYmxlLCBlbmRUYWJsZSkgPT4ge1xuICAgICAgICBpZiAoZXEoc3RhcnRUYWJsZSwgZW5kVGFibGUpKSB7XG4gICAgICAgICAgaWYgKGlzQ2FwdGlvbihzdGFydENlbGxPckNhcHRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShub01lbnUoc3RhcnRDZWxsT3JDYXB0aW9uKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGZvck1lbnUoZ2V0Q2VsbHNGcm9tU2VsZWN0aW9uKGVkaXRvciksIHN0YXJ0VGFibGUsIHN0YXJ0Q2VsbE9yQ2FwdGlvbikpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSkpKTtcbiAgICAgIGNvbnN0IGdldEV4dHJhY3RlZERldGFpbHMgPSB0YXJnZXRzID0+IHtcbiAgICAgICAgY29uc3QgdGFibGVPcHQgPSB0YWJsZSh0YXJnZXRzLmVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gdGFibGVPcHQubWFwKHRhYmxlID0+IHtcbiAgICAgICAgICBjb25zdCB3YXJlaG91c2UgPSBXYXJlaG91c2UuZnJvbVRhYmxlKHRhYmxlKTtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxzID0gb25DZWxscyh3YXJlaG91c2UsIHRhcmdldHMpLmdldE9yKFtdKTtcbiAgICAgICAgICBjb25zdCBsb2NrZWQgPSBmb2xkbChzZWxlY3RlZENlbGxzLCAoYWNjLCBjZWxsKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2VsbC5pc0xvY2tlZCkge1xuICAgICAgICAgICAgICBhY2Mub25BbnkgPSB0cnVlO1xuICAgICAgICAgICAgICBpZiAoY2VsbC5jb2x1bW4gPT09IDApIHtcbiAgICAgICAgICAgICAgICBhY2Mub25GaXJzdCA9IHRydWU7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2VsbC5jb2x1bW4gKyBjZWxsLmNvbHNwYW4gPj0gd2FyZWhvdXNlLmdyaWQuY29sdW1ucykge1xuICAgICAgICAgICAgICAgIGFjYy5vbkxhc3QgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIG9uQW55OiBmYWxzZSxcbiAgICAgICAgICAgIG9uRmlyc3Q6IGZhbHNlLFxuICAgICAgICAgICAgb25MYXN0OiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtZXJnZWFibGU6IG9uVW5sb2NrZWRNZXJnYWJsZSh3YXJlaG91c2UsIHRhcmdldHMpLmlzU29tZSgpLFxuICAgICAgICAgICAgdW5tZXJnZWFibGU6IG9uVW5sb2NrZWRVbm1lcmdhYmxlKHdhcmVob3VzZSwgdGFyZ2V0cykuaXNTb21lKCksXG4gICAgICAgICAgICBsb2NrZWRcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNldFRhcmdldHMgPSAoKSA9PiB7XG4gICAgICAgIHRhcmdldHMuc2V0KGNhY2hlZChmaW5kVGFyZ2V0cykoKSk7XG4gICAgICAgIHNlbGVjdGlvbkRldGFpbHMgPSB0YXJnZXRzLmdldCgpLmJpbmQoZ2V0RXh0cmFjdGVkRGV0YWlscyk7XG4gICAgICAgIGVhY2goY2hhbmdlSGFuZGxlcnMuZ2V0KCksIGNhbGwpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldHVwSGFuZGxlciA9IGhhbmRsZXIgPT4ge1xuICAgICAgICBoYW5kbGVyKCk7XG4gICAgICAgIGNoYW5nZUhhbmRsZXJzLnNldChjaGFuZ2VIYW5kbGVycy5nZXQoKS5jb25jYXQoW2hhbmRsZXJdKSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgY2hhbmdlSGFuZGxlcnMuc2V0KGZpbHRlcihjaGFuZ2VIYW5kbGVycy5nZXQoKSwgaCA9PiBoICE9PSBoYW5kbGVyKSk7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25TZXR1cCA9IChhcGksIGlzRGlzYWJsZWQpID0+IHNldHVwSGFuZGxlcigoKSA9PiB0YXJnZXRzLmdldCgpLmZvbGQoKCkgPT4ge1xuICAgICAgICBhcGkuc2V0RW5hYmxlZChmYWxzZSk7XG4gICAgICB9LCB0YXJnZXRzID0+IHtcbiAgICAgICAgYXBpLnNldEVuYWJsZWQoIWlzRGlzYWJsZWQodGFyZ2V0cykgJiYgZWRpdG9yLnNlbGVjdGlvbi5pc0VkaXRhYmxlKCkpO1xuICAgICAgfSkpO1xuICAgICAgY29uc3Qgb25TZXR1cFdpdGhUb2dnbGUgPSAoYXBpLCBpc0Rpc2FibGVkLCBpc0FjdGl2ZSkgPT4gc2V0dXBIYW5kbGVyKCgpID0+IHRhcmdldHMuZ2V0KCkuZm9sZCgoKSA9PiB7XG4gICAgICAgIGFwaS5zZXRFbmFibGVkKGZhbHNlKTtcbiAgICAgICAgYXBpLnNldEFjdGl2ZShmYWxzZSk7XG4gICAgICB9LCB0YXJnZXRzID0+IHtcbiAgICAgICAgYXBpLnNldEVuYWJsZWQoIWlzRGlzYWJsZWQodGFyZ2V0cykgJiYgZWRpdG9yLnNlbGVjdGlvbi5pc0VkaXRhYmxlKCkpO1xuICAgICAgICBhcGkuc2V0QWN0aXZlKGlzQWN0aXZlKHRhcmdldHMpKTtcbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IGlzRGlzYWJsZWRGcm9tTG9ja2VkID0gbG9ja2VkRGlzYWJsZSA9PiBzZWxlY3Rpb25EZXRhaWxzLmV4aXN0cyhkZXRhaWxzID0+IGRldGFpbHMubG9ja2VkW2xvY2tlZERpc2FibGVdKTtcbiAgICAgIGNvbnN0IG9uU2V0dXBUYWJsZSA9IGFwaSA9PiBvblNldHVwKGFwaSwgXyA9PiBmYWxzZSk7XG4gICAgICBjb25zdCBvblNldHVwQ2VsbE9yUm93ID0gYXBpID0+IG9uU2V0dXAoYXBpLCB0YXJnZXRzID0+IGlzQ2FwdGlvbih0YXJnZXRzLmVsZW1lbnQpKTtcbiAgICAgIGNvbnN0IG9uU2V0dXBDb2x1bW4gPSBsb2NrZWREaXNhYmxlID0+IGFwaSA9PiBvblNldHVwKGFwaSwgdGFyZ2V0cyA9PiBpc0NhcHRpb24odGFyZ2V0cy5lbGVtZW50KSB8fCBpc0Rpc2FibGVkRnJvbUxvY2tlZChsb2NrZWREaXNhYmxlKSk7XG4gICAgICBjb25zdCBvblNldHVwUGFzdGVhYmxlID0gZ2V0Q2xpcGJvYXJkRGF0YSA9PiBhcGkgPT4gb25TZXR1cChhcGksIHRhcmdldHMgPT4gaXNDYXB0aW9uKHRhcmdldHMuZWxlbWVudCkgfHwgZ2V0Q2xpcGJvYXJkRGF0YSgpLmlzTm9uZSgpKTtcbiAgICAgIGNvbnN0IG9uU2V0dXBQYXN0ZWFibGVDb2x1bW4gPSAoZ2V0Q2xpcGJvYXJkRGF0YSwgbG9ja2VkRGlzYWJsZSkgPT4gYXBpID0+IG9uU2V0dXAoYXBpLCB0YXJnZXRzID0+IGlzQ2FwdGlvbih0YXJnZXRzLmVsZW1lbnQpIHx8IGdldENsaXBib2FyZERhdGEoKS5pc05vbmUoKSB8fCBpc0Rpc2FibGVkRnJvbUxvY2tlZChsb2NrZWREaXNhYmxlKSk7XG4gICAgICBjb25zdCBvblNldHVwTWVyZ2VhYmxlID0gYXBpID0+IG9uU2V0dXAoYXBpLCBfdGFyZ2V0cyA9PiBpc0Rpc2FibGVkRm9yU2VsZWN0aW9uKCdtZXJnZWFibGUnKSk7XG4gICAgICBjb25zdCBvblNldHVwVW5tZXJnZWFibGUgPSBhcGkgPT4gb25TZXR1cChhcGksIF90YXJnZXRzID0+IGlzRGlzYWJsZWRGb3JTZWxlY3Rpb24oJ3VubWVyZ2VhYmxlJykpO1xuICAgICAgY29uc3Qgb25TZXR1cFRhYmxlV2l0aENhcHRpb24gPSBhcGkgPT4ge1xuICAgICAgICByZXR1cm4gb25TZXR1cFdpdGhUb2dnbGUoYXBpLCBuZXZlciwgdGFyZ2V0cyA9PiB7XG4gICAgICAgICAgY29uc3QgdGFibGVPcHQgPSB0YWJsZSh0YXJnZXRzLmVsZW1lbnQsIGdldElzUm9vdChlZGl0b3IpKTtcbiAgICAgICAgICByZXR1cm4gdGFibGVPcHQuZXhpc3RzKHRhYmxlID0+IGNoaWxkKHRhYmxlLCAnY2FwdGlvbicpKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25TZXR1cFRhYmxlSGVhZGVycyA9IChjb21tYW5kLCBoZWFkZXJUeXBlKSA9PiBhcGkgPT4ge1xuICAgICAgICByZXR1cm4gb25TZXR1cFdpdGhUb2dnbGUoYXBpLCB0YXJnZXRzID0+IGlzQ2FwdGlvbih0YXJnZXRzLmVsZW1lbnQpLCAoKSA9PiBlZGl0b3IucXVlcnlDb21tYW5kVmFsdWUoY29tbWFuZCkgPT09IGhlYWRlclR5cGUpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG9uU2V0dXBUYWJsZVJvd0hlYWRlcnMgPSBvblNldHVwVGFibGVIZWFkZXJzKCdtY2VUYWJsZVJvd1R5cGUnLCAnaGVhZGVyJyk7XG4gICAgICBjb25zdCBvblNldHVwVGFibGVDb2x1bW5IZWFkZXJzID0gb25TZXR1cFRhYmxlSGVhZGVycygnbWNlVGFibGVDb2xUeXBlJywgJ3RoJyk7XG4gICAgICBlZGl0b3Iub24oJ05vZGVDaGFuZ2UgRXhlY0NvbW1hbmQgVGFibGVTZWxlY3RvckNoYW5nZScsIHJlc2V0VGFyZ2V0cyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvblNldHVwVGFibGUsXG4gICAgICAgIG9uU2V0dXBDZWxsT3JSb3csXG4gICAgICAgIG9uU2V0dXBDb2x1bW4sXG4gICAgICAgIG9uU2V0dXBQYXN0ZWFibGUsXG4gICAgICAgIG9uU2V0dXBQYXN0ZWFibGVDb2x1bW4sXG4gICAgICAgIG9uU2V0dXBNZXJnZWFibGUsXG4gICAgICAgIG9uU2V0dXBVbm1lcmdlYWJsZSxcbiAgICAgICAgcmVzZXRUYXJnZXRzLFxuICAgICAgICBvblNldHVwVGFibGVXaXRoQ2FwdGlvbixcbiAgICAgICAgb25TZXR1cFRhYmxlUm93SGVhZGVycyxcbiAgICAgICAgb25TZXR1cFRhYmxlQ29sdW1uSGVhZGVycyxcbiAgICAgICAgdGFyZ2V0czogdGFyZ2V0cy5nZXRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBnbG9iYWwgPSB0aW55bWNlLnV0aWwuVG9vbHMucmVzb2x2ZSgndGlueW1jZS5GYWtlQ2xpcGJvYXJkJyk7XG5cbiAgICBjb25zdCB0YWJsZVR5cGVCYXNlID0gJ3gtdGlueW1jZS9kb20tdGFibGUtJztcbiAgICBjb25zdCB0YWJsZVR5cGVSb3cgPSB0YWJsZVR5cGVCYXNlICsgJ3Jvd3MnO1xuICAgIGNvbnN0IHRhYmxlVHlwZUNvbHVtbiA9IHRhYmxlVHlwZUJhc2UgKyAnY29sdW1ucyc7XG4gICAgY29uc3QgZ2V0RGF0YSA9IHR5cGUgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgaXRlbXMgPSAoX2EgPSBnbG9iYWwucmVhZCgpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICAgIHJldHVybiBmaW5kTWFwKGl0ZW1zLCBpdGVtID0+IE9wdGlvbmFsLmZyb20oaXRlbS5nZXRUeXBlKHR5cGUpKSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRSb3dzID0gKCkgPT4gZ2V0RGF0YSh0YWJsZVR5cGVSb3cpO1xuICAgIGNvbnN0IGdldENvbHVtbnMgPSAoKSA9PiBnZXREYXRhKHRhYmxlVHlwZUNvbHVtbik7XG5cbiAgICBjb25zdCBvblNldHVwRWRpdGFibGUkMSA9IGVkaXRvciA9PiBhcGkgPT4ge1xuICAgICAgY29uc3Qgbm9kZUNoYW5nZWQgPSAoKSA9PiB7XG4gICAgICAgIGFwaS5zZXRFbmFibGVkKGVkaXRvci5zZWxlY3Rpb24uaXNFZGl0YWJsZSgpKTtcbiAgICAgIH07XG4gICAgICBlZGl0b3Iub24oJ05vZGVDaGFuZ2UnLCBub2RlQ2hhbmdlZCk7XG4gICAgICBub2RlQ2hhbmdlZCgpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZWRpdG9yLm9mZignTm9kZUNoYW5nZScsIG5vZGVDaGFuZ2VkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBhZGRCdXR0b25zID0gKGVkaXRvciwgc2VsZWN0aW9uVGFyZ2V0cykgPT4ge1xuICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE1lbnVCdXR0b24oJ3RhYmxlJywge1xuICAgICAgICB0b29sdGlwOiAnVGFibGUnLFxuICAgICAgICBpY29uOiAndGFibGUnLFxuICAgICAgICBvblNldHVwOiBvblNldHVwRWRpdGFibGUkMShlZGl0b3IpLFxuICAgICAgICBmZXRjaDogY2FsbGJhY2sgPT4gY2FsbGJhY2soJ2luc2VydHRhYmxlIHwgY2VsbCByb3cgY29sdW1uIHwgYWR2dGFibGVzb3J0IHwgdGFibGVwcm9wcyBkZWxldGV0YWJsZScpXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNtZCA9IGNvbW1hbmQgPT4gKCkgPT4gZWRpdG9yLmV4ZWNDb21tYW5kKGNvbW1hbmQpO1xuICAgICAgY29uc3QgYWRkQnV0dG9uSWZSZWdpc3RlcmVkID0gKG5hbWUsIHNwZWMpID0+IHtcbiAgICAgICAgaWYgKGVkaXRvci5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoc3BlYy5jb21tYW5kKSkge1xuICAgICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRCdXR0b24obmFtZSwge1xuICAgICAgICAgICAgLi4uc3BlYyxcbiAgICAgICAgICAgIG9uQWN0aW9uOiBpc0Z1bmN0aW9uKHNwZWMub25BY3Rpb24pID8gc3BlYy5vbkFjdGlvbiA6IGNtZChzcGVjLmNvbW1hbmQpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBhZGRUb2dnbGVCdXR0b25JZlJlZ2lzdGVyZWQgPSAobmFtZSwgc3BlYykgPT4ge1xuICAgICAgICBpZiAoZWRpdG9yLnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZChzcGVjLmNvbW1hbmQpKSB7XG4gICAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZFRvZ2dsZUJ1dHRvbihuYW1lLCB7XG4gICAgICAgICAgICAuLi5zcGVjLFxuICAgICAgICAgICAgb25BY3Rpb246IGlzRnVuY3Rpb24oc3BlYy5vbkFjdGlvbikgPyBzcGVjLm9uQWN0aW9uIDogY21kKHNwZWMuY29tbWFuZClcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGFkZEJ1dHRvbklmUmVnaXN0ZXJlZCgndGFibGVwcm9wcycsIHtcbiAgICAgICAgdG9vbHRpcDogJ1RhYmxlIHByb3BlcnRpZXMnLFxuICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVQcm9wcycsXG4gICAgICAgIGljb246ICd0YWJsZScsXG4gICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cFRhYmxlXG4gICAgICB9KTtcbiAgICAgIGFkZEJ1dHRvbklmUmVnaXN0ZXJlZCgndGFibGVkZWxldGUnLCB7XG4gICAgICAgIHRvb2x0aXA6ICdEZWxldGUgdGFibGUnLFxuICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVEZWxldGUnLFxuICAgICAgICBpY29uOiAndGFibGUtZGVsZXRlLXRhYmxlJyxcbiAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwVGFibGVcbiAgICAgIH0pO1xuICAgICAgYWRkQnV0dG9uSWZSZWdpc3RlcmVkKCd0YWJsZWNlbGxwcm9wcycsIHtcbiAgICAgICAgdG9vbHRpcDogJ0NlbGwgcHJvcGVydGllcycsXG4gICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZUNlbGxQcm9wcycsXG4gICAgICAgIGljb246ICd0YWJsZS1jZWxsLXByb3BlcnRpZXMnLFxuICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDZWxsT3JSb3dcbiAgICAgIH0pO1xuICAgICAgYWRkQnV0dG9uSWZSZWdpc3RlcmVkKCd0YWJsZW1lcmdlY2VsbHMnLCB7XG4gICAgICAgIHRvb2x0aXA6ICdNZXJnZSBjZWxscycsXG4gICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZU1lcmdlQ2VsbHMnLFxuICAgICAgICBpY29uOiAndGFibGUtbWVyZ2UtY2VsbHMnLFxuICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBNZXJnZWFibGVcbiAgICAgIH0pO1xuICAgICAgYWRkQnV0dG9uSWZSZWdpc3RlcmVkKCd0YWJsZXNwbGl0Y2VsbHMnLCB7XG4gICAgICAgIHRvb2x0aXA6ICdTcGxpdCBjZWxsJyxcbiAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlU3BsaXRDZWxscycsXG4gICAgICAgIGljb246ICd0YWJsZS1zcGxpdC1jZWxscycsXG4gICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cFVubWVyZ2VhYmxlXG4gICAgICB9KTtcbiAgICAgIGFkZEJ1dHRvbklmUmVnaXN0ZXJlZCgndGFibGVpbnNlcnRyb3diZWZvcmUnLCB7XG4gICAgICAgIHRvb2x0aXA6ICdJbnNlcnQgcm93IGJlZm9yZScsXG4gICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZUluc2VydFJvd0JlZm9yZScsXG4gICAgICAgIGljb246ICd0YWJsZS1pbnNlcnQtcm93LWFib3ZlJyxcbiAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwQ2VsbE9yUm93XG4gICAgICB9KTtcbiAgICAgIGFkZEJ1dHRvbklmUmVnaXN0ZXJlZCgndGFibGVpbnNlcnRyb3dhZnRlcicsIHtcbiAgICAgICAgdG9vbHRpcDogJ0luc2VydCByb3cgYWZ0ZXInLFxuICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVJbnNlcnRSb3dBZnRlcicsXG4gICAgICAgIGljb246ICd0YWJsZS1pbnNlcnQtcm93LWFmdGVyJyxcbiAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwQ2VsbE9yUm93XG4gICAgICB9KTtcbiAgICAgIGFkZEJ1dHRvbklmUmVnaXN0ZXJlZCgndGFibGVkZWxldGVyb3cnLCB7XG4gICAgICAgIHRvb2x0aXA6ICdEZWxldGUgcm93JyxcbiAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlRGVsZXRlUm93JyxcbiAgICAgICAgaWNvbjogJ3RhYmxlLWRlbGV0ZS1yb3cnLFxuICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDZWxsT3JSb3dcbiAgICAgIH0pO1xuICAgICAgYWRkQnV0dG9uSWZSZWdpc3RlcmVkKCd0YWJsZXJvd3Byb3BzJywge1xuICAgICAgICB0b29sdGlwOiAnUm93IHByb3BlcnRpZXMnLFxuICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVSb3dQcm9wcycsXG4gICAgICAgIGljb246ICd0YWJsZS1yb3ctcHJvcGVydGllcycsXG4gICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cENlbGxPclJvd1xuICAgICAgfSk7XG4gICAgICBhZGRCdXR0b25JZlJlZ2lzdGVyZWQoJ3RhYmxlaW5zZXJ0Y29sYmVmb3JlJywge1xuICAgICAgICB0b29sdGlwOiAnSW5zZXJ0IGNvbHVtbiBiZWZvcmUnLFxuICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVJbnNlcnRDb2xCZWZvcmUnLFxuICAgICAgICBpY29uOiAndGFibGUtaW5zZXJ0LWNvbHVtbi1iZWZvcmUnLFxuICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDb2x1bW4oJ29uRmlyc3QnKVxuICAgICAgfSk7XG4gICAgICBhZGRCdXR0b25JZlJlZ2lzdGVyZWQoJ3RhYmxlaW5zZXJ0Y29sYWZ0ZXInLCB7XG4gICAgICAgIHRvb2x0aXA6ICdJbnNlcnQgY29sdW1uIGFmdGVyJyxcbiAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlSW5zZXJ0Q29sQWZ0ZXInLFxuICAgICAgICBpY29uOiAndGFibGUtaW5zZXJ0LWNvbHVtbi1hZnRlcicsXG4gICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cENvbHVtbignb25MYXN0JylcbiAgICAgIH0pO1xuICAgICAgYWRkQnV0dG9uSWZSZWdpc3RlcmVkKCd0YWJsZWRlbGV0ZWNvbCcsIHtcbiAgICAgICAgdG9vbHRpcDogJ0RlbGV0ZSBjb2x1bW4nLFxuICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVEZWxldGVDb2wnLFxuICAgICAgICBpY29uOiAndGFibGUtZGVsZXRlLWNvbHVtbicsXG4gICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cENvbHVtbignb25BbnknKVxuICAgICAgfSk7XG4gICAgICBhZGRCdXR0b25JZlJlZ2lzdGVyZWQoJ3RhYmxlY3V0cm93Jywge1xuICAgICAgICB0b29sdGlwOiAnQ3V0IHJvdycsXG4gICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZUN1dFJvdycsXG4gICAgICAgIGljb246ICdjdXQtcm93JyxcbiAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwQ2VsbE9yUm93XG4gICAgICB9KTtcbiAgICAgIGFkZEJ1dHRvbklmUmVnaXN0ZXJlZCgndGFibGVjb3B5cm93Jywge1xuICAgICAgICB0b29sdGlwOiAnQ29weSByb3cnLFxuICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVDb3B5Um93JyxcbiAgICAgICAgaWNvbjogJ2R1cGxpY2F0ZS1yb3cnLFxuICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDZWxsT3JSb3dcbiAgICAgIH0pO1xuICAgICAgYWRkQnV0dG9uSWZSZWdpc3RlcmVkKCd0YWJsZXBhc3Rlcm93YmVmb3JlJywge1xuICAgICAgICB0b29sdGlwOiAnUGFzdGUgcm93IGJlZm9yZScsXG4gICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZVBhc3RlUm93QmVmb3JlJyxcbiAgICAgICAgaWNvbjogJ3Bhc3RlLXJvdy1iZWZvcmUnLFxuICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBQYXN0ZWFibGUoZ2V0Um93cylcbiAgICAgIH0pO1xuICAgICAgYWRkQnV0dG9uSWZSZWdpc3RlcmVkKCd0YWJsZXBhc3Rlcm93YWZ0ZXInLCB7XG4gICAgICAgIHRvb2x0aXA6ICdQYXN0ZSByb3cgYWZ0ZXInLFxuICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVQYXN0ZVJvd0FmdGVyJyxcbiAgICAgICAgaWNvbjogJ3Bhc3RlLXJvdy1hZnRlcicsXG4gICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cFBhc3RlYWJsZShnZXRSb3dzKVxuICAgICAgfSk7XG4gICAgICBhZGRCdXR0b25JZlJlZ2lzdGVyZWQoJ3RhYmxlY3V0Y29sJywge1xuICAgICAgICB0b29sdGlwOiAnQ3V0IGNvbHVtbicsXG4gICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZUN1dENvbCcsXG4gICAgICAgIGljb246ICdjdXQtY29sdW1uJyxcbiAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwQ29sdW1uKCdvbkFueScpXG4gICAgICB9KTtcbiAgICAgIGFkZEJ1dHRvbklmUmVnaXN0ZXJlZCgndGFibGVjb3B5Y29sJywge1xuICAgICAgICB0b29sdGlwOiAnQ29weSBjb2x1bW4nLFxuICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVDb3B5Q29sJyxcbiAgICAgICAgaWNvbjogJ2R1cGxpY2F0ZS1jb2x1bW4nLFxuICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDb2x1bW4oJ29uQW55JylcbiAgICAgIH0pO1xuICAgICAgYWRkQnV0dG9uSWZSZWdpc3RlcmVkKCd0YWJsZXBhc3RlY29sYmVmb3JlJywge1xuICAgICAgICB0b29sdGlwOiAnUGFzdGUgY29sdW1uIGJlZm9yZScsXG4gICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZVBhc3RlQ29sQmVmb3JlJyxcbiAgICAgICAgaWNvbjogJ3Bhc3RlLWNvbHVtbi1iZWZvcmUnLFxuICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBQYXN0ZWFibGVDb2x1bW4oZ2V0Q29sdW1ucywgJ29uRmlyc3QnKVxuICAgICAgfSk7XG4gICAgICBhZGRCdXR0b25JZlJlZ2lzdGVyZWQoJ3RhYmxlcGFzdGVjb2xhZnRlcicsIHtcbiAgICAgICAgdG9vbHRpcDogJ1Bhc3RlIGNvbHVtbiBhZnRlcicsXG4gICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZVBhc3RlQ29sQWZ0ZXInLFxuICAgICAgICBpY29uOiAncGFzdGUtY29sdW1uLWFmdGVyJyxcbiAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwUGFzdGVhYmxlQ29sdW1uKGdldENvbHVtbnMsICdvbkxhc3QnKVxuICAgICAgfSk7XG4gICAgICBhZGRCdXR0b25JZlJlZ2lzdGVyZWQoJ3RhYmxlaW5zZXJ0ZGlhbG9nJywge1xuICAgICAgICB0b29sdGlwOiAnSW5zZXJ0IHRhYmxlJyxcbiAgICAgICAgY29tbWFuZDogJ21jZUluc2VydFRhYmxlRGlhbG9nJyxcbiAgICAgICAgaWNvbjogJ3RhYmxlJyxcbiAgICAgICAgb25TZXR1cDogb25TZXR1cEVkaXRhYmxlJDEoZWRpdG9yKVxuICAgICAgfSk7XG4gICAgICBjb25zdCB0YWJsZUNsYXNzTGlzdCA9IGZpbHRlck5vbmVJdGVtKGdldFRhYmxlQ2xhc3NMaXN0KGVkaXRvcikpO1xuICAgICAgaWYgKHRhYmxlQ2xhc3NMaXN0Lmxlbmd0aCAhPT0gMCAmJiBlZGl0b3IucXVlcnlDb21tYW5kU3VwcG9ydGVkKCdtY2VUYWJsZVRvZ2dsZUNsYXNzJykpIHtcbiAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE1lbnVCdXR0b24oJ3RhYmxlY2xhc3MnLCB7XG4gICAgICAgICAgaWNvbjogJ3RhYmxlLWNsYXNzZXMnLFxuICAgICAgICAgIHRvb2x0aXA6ICdUYWJsZSBzdHlsZXMnLFxuICAgICAgICAgIGZldGNoOiBnZW5lcmF0ZU1lbnVJdGVtc0NhbGxiYWNrKGVkaXRvciwgdGFibGVDbGFzc0xpc3QsICd0YWJsZWNsYXNzJywgdmFsdWUgPT4gZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VUYWJsZVRvZ2dsZUNsYXNzJywgZmFsc2UsIHZhbHVlKSksXG4gICAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwVGFibGVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCB0YWJsZUNlbGxDbGFzc0xpc3QgPSBmaWx0ZXJOb25lSXRlbShnZXRDZWxsQ2xhc3NMaXN0KGVkaXRvcikpO1xuICAgICAgaWYgKHRhYmxlQ2VsbENsYXNzTGlzdC5sZW5ndGggIT09IDAgJiYgZWRpdG9yLnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZCgnbWNlVGFibGVDZWxsVG9nZ2xlQ2xhc3MnKSkge1xuICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTWVudUJ1dHRvbigndGFibGVjZWxsY2xhc3MnLCB7XG4gICAgICAgICAgaWNvbjogJ3RhYmxlLWNlbGwtY2xhc3NlcycsXG4gICAgICAgICAgdG9vbHRpcDogJ0NlbGwgc3R5bGVzJyxcbiAgICAgICAgICBmZXRjaDogZ2VuZXJhdGVNZW51SXRlbXNDYWxsYmFjayhlZGl0b3IsIHRhYmxlQ2VsbENsYXNzTGlzdCwgJ3RhYmxlY2VsbGNsYXNzJywgdmFsdWUgPT4gZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VUYWJsZUNlbGxUb2dnbGVDbGFzcycsIGZhbHNlLCB2YWx1ZSkpLFxuICAgICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cENlbGxPclJvd1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChlZGl0b3IucXVlcnlDb21tYW5kU3VwcG9ydGVkKCdtY2VUYWJsZUFwcGx5Q2VsbFN0eWxlJykpIHtcbiAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE1lbnVCdXR0b24oJ3RhYmxlY2VsbHZhbGlnbicsIHtcbiAgICAgICAgICBpY29uOiAndmVydGljYWwtYWxpZ24nLFxuICAgICAgICAgIHRvb2x0aXA6ICdWZXJ0aWNhbCBhbGlnbicsXG4gICAgICAgICAgZmV0Y2g6IGdlbmVyYXRlTWVudUl0ZW1zQ2FsbGJhY2soZWRpdG9yLCB2ZXJ0aWNhbEFsaWduVmFsdWVzLCAndGFibGVjZWxsdmVydGljYWxhbGlnbicsIGFwcGx5VGFibGVDZWxsU3R5bGUoZWRpdG9yLCAndmVydGljYWwtYWxpZ24nKSksXG4gICAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwQ2VsbE9yUm93XG4gICAgICAgIH0pO1xuICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTWVudUJ1dHRvbigndGFibGVjZWxsYm9yZGVyd2lkdGgnLCB7XG4gICAgICAgICAgaWNvbjogJ2JvcmRlci13aWR0aCcsXG4gICAgICAgICAgdG9vbHRpcDogJ0JvcmRlciB3aWR0aCcsXG4gICAgICAgICAgZmV0Y2g6IGdlbmVyYXRlTWVudUl0ZW1zQ2FsbGJhY2soZWRpdG9yLCBnZXRUYWJsZUJvcmRlcldpZHRocyhlZGl0b3IpLCAndGFibGVjZWxsYm9yZGVyd2lkdGgnLCBhcHBseVRhYmxlQ2VsbFN0eWxlKGVkaXRvciwgJ2JvcmRlci13aWR0aCcpKSxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDZWxsT3JSb3dcbiAgICAgICAgfSk7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRNZW51QnV0dG9uKCd0YWJsZWNlbGxib3JkZXJzdHlsZScsIHtcbiAgICAgICAgICBpY29uOiAnYm9yZGVyLXN0eWxlJyxcbiAgICAgICAgICB0b29sdGlwOiAnQm9yZGVyIHN0eWxlJyxcbiAgICAgICAgICBmZXRjaDogZ2VuZXJhdGVNZW51SXRlbXNDYWxsYmFjayhlZGl0b3IsIGdldFRhYmxlQm9yZGVyU3R5bGVzKGVkaXRvciksICd0YWJsZWNlbGxib3JkZXJzdHlsZScsIGFwcGx5VGFibGVDZWxsU3R5bGUoZWRpdG9yLCAnYm9yZGVyLXN0eWxlJykpLFxuICAgICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cENlbGxPclJvd1xuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE1lbnVCdXR0b24oJ3RhYmxlY2VsbGJhY2tncm91bmRjb2xvcicsIHtcbiAgICAgICAgICBpY29uOiAnY2VsbC1iYWNrZ3JvdW5kLWNvbG9yJyxcbiAgICAgICAgICB0b29sdGlwOiAnQmFja2dyb3VuZCBjb2xvcicsXG4gICAgICAgICAgZmV0Y2g6IGNhbGxiYWNrID0+IGNhbGxiYWNrKGJ1aWxkQ29sb3JNZW51KGVkaXRvciwgZ2V0VGFibGVCYWNrZ3JvdW5kQ29sb3JNYXAoZWRpdG9yKSwgJ2JhY2tncm91bmQtY29sb3InKSksXG4gICAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwQ2VsbE9yUm93XG4gICAgICAgIH0pO1xuICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTWVudUJ1dHRvbigndGFibGVjZWxsYm9yZGVyY29sb3InLCB7XG4gICAgICAgICAgaWNvbjogJ2NlbGwtYm9yZGVyLWNvbG9yJyxcbiAgICAgICAgICB0b29sdGlwOiAnQm9yZGVyIGNvbG9yJyxcbiAgICAgICAgICBmZXRjaDogY2FsbGJhY2sgPT4gY2FsbGJhY2soYnVpbGRDb2xvck1lbnUoZWRpdG9yLCBnZXRUYWJsZUJvcmRlckNvbG9yTWFwKGVkaXRvciksICdib3JkZXItY29sb3InKSksXG4gICAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwQ2VsbE9yUm93XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgYWRkVG9nZ2xlQnV0dG9uSWZSZWdpc3RlcmVkKCd0YWJsZWNhcHRpb24nLCB7XG4gICAgICAgIHRvb2x0aXA6ICdUYWJsZSBjYXB0aW9uJyxcbiAgICAgICAgaWNvbjogJ3RhYmxlLWNhcHRpb24nLFxuICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVUb2dnbGVDYXB0aW9uJyxcbiAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwVGFibGVXaXRoQ2FwdGlvblxuICAgICAgfSk7XG4gICAgICBhZGRUb2dnbGVCdXR0b25JZlJlZ2lzdGVyZWQoJ3RhYmxlcm93aGVhZGVyJywge1xuICAgICAgICB0b29sdGlwOiAnUm93IGhlYWRlcicsXG4gICAgICAgIGljb246ICd0YWJsZS10b3AtaGVhZGVyJyxcbiAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlUm93VHlwZScsXG4gICAgICAgIG9uQWN0aW9uOiBjaGFuZ2VSb3dIZWFkZXIoZWRpdG9yKSxcbiAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwVGFibGVSb3dIZWFkZXJzXG4gICAgICB9KTtcbiAgICAgIGFkZFRvZ2dsZUJ1dHRvbklmUmVnaXN0ZXJlZCgndGFibGVjb2xoZWFkZXInLCB7XG4gICAgICAgIHRvb2x0aXA6ICdDb2x1bW4gaGVhZGVyJyxcbiAgICAgICAgaWNvbjogJ3RhYmxlLWxlZnQtaGVhZGVyJyxcbiAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlQ29sVHlwZScsXG4gICAgICAgIG9uQWN0aW9uOiBjaGFuZ2VDb2x1bW5IZWFkZXIoZWRpdG9yKSxcbiAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwVGFibGVDb2x1bW5IZWFkZXJzXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFkZFRvb2xiYXJzID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGlzRWRpdGFibGVUYWJsZSA9IHRhYmxlID0+IGVkaXRvci5kb20uaXModGFibGUsICd0YWJsZScpICYmIGVkaXRvci5nZXRCb2R5KCkuY29udGFpbnModGFibGUpICYmIGVkaXRvci5kb20uaXNFZGl0YWJsZSh0YWJsZS5wYXJlbnROb2RlKTtcbiAgICAgIGNvbnN0IHRvb2xiYXIgPSBnZXRUb29sYmFyKGVkaXRvcik7XG4gICAgICBpZiAodG9vbGJhci5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRDb250ZXh0VG9vbGJhcigndGFibGUnLCB7XG4gICAgICAgICAgcHJlZGljYXRlOiBpc0VkaXRhYmxlVGFibGUsXG4gICAgICAgICAgaXRlbXM6IHRvb2xiYXIsXG4gICAgICAgICAgc2NvcGU6ICdub2RlJyxcbiAgICAgICAgICBwb3NpdGlvbjogJ25vZGUnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblNldHVwRWRpdGFibGUgPSBlZGl0b3IgPT4gYXBpID0+IHtcbiAgICAgIGNvbnN0IG5vZGVDaGFuZ2VkID0gKCkgPT4ge1xuICAgICAgICBhcGkuc2V0RW5hYmxlZChlZGl0b3Iuc2VsZWN0aW9uLmlzRWRpdGFibGUoKSk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLm9uKCdOb2RlQ2hhbmdlJywgbm9kZUNoYW5nZWQpO1xuICAgICAgbm9kZUNoYW5nZWQoKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5vZmYoJ05vZGVDaGFuZ2UnLCBub2RlQ2hhbmdlZCk7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgYWRkTWVudUl0ZW1zID0gKGVkaXRvciwgc2VsZWN0aW9uVGFyZ2V0cykgPT4ge1xuICAgICAgY29uc3QgY21kID0gY29tbWFuZCA9PiAoKSA9PiBlZGl0b3IuZXhlY0NvbW1hbmQoY29tbWFuZCk7XG4gICAgICBjb25zdCBhZGRNZW51SWZSZWdpc3RlcmVkID0gKG5hbWUsIHNwZWMpID0+IHtcbiAgICAgICAgaWYgKGVkaXRvci5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoc3BlYy5jb21tYW5kKSkge1xuICAgICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRNZW51SXRlbShuYW1lLCB7XG4gICAgICAgICAgICAuLi5zcGVjLFxuICAgICAgICAgICAgb25BY3Rpb246IGlzRnVuY3Rpb24oc3BlYy5vbkFjdGlvbikgPyBzcGVjLm9uQWN0aW9uIDogY21kKHNwZWMuY29tbWFuZClcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBhZGRUb2dnbGVNZW51SWZSZWdpc3RlcmVkID0gKG5hbWUsIHNwZWMpID0+IHtcbiAgICAgICAgaWYgKGVkaXRvci5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoc3BlYy5jb21tYW5kKSkge1xuICAgICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRUb2dnbGVNZW51SXRlbShuYW1lLCB7XG4gICAgICAgICAgICAuLi5zcGVjLFxuICAgICAgICAgICAgb25BY3Rpb246IGlzRnVuY3Rpb24oc3BlYy5vbkFjdGlvbikgPyBzcGVjLm9uQWN0aW9uIDogY21kKHNwZWMuY29tbWFuZClcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGluc2VydFRhYmxlQWN0aW9uID0gZGF0YSA9PiB7XG4gICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnbWNlSW5zZXJ0VGFibGUnLCBmYWxzZSwge1xuICAgICAgICAgIHJvd3M6IGRhdGEubnVtUm93cyxcbiAgICAgICAgICBjb2x1bW5zOiBkYXRhLm51bUNvbHVtbnNcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaGFzUm93TWVudUl0ZW1zID0gW1xuICAgICAgICBhZGRNZW51SWZSZWdpc3RlcmVkKCd0YWJsZWluc2VydHJvd2JlZm9yZScsIHtcbiAgICAgICAgICB0ZXh0OiAnSW5zZXJ0IHJvdyBiZWZvcmUnLFxuICAgICAgICAgIGljb246ICd0YWJsZS1pbnNlcnQtcm93LWFib3ZlJyxcbiAgICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVJbnNlcnRSb3dCZWZvcmUnLFxuICAgICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cENlbGxPclJvd1xuICAgICAgICB9KSxcbiAgICAgICAgYWRkTWVudUlmUmVnaXN0ZXJlZCgndGFibGVpbnNlcnRyb3dhZnRlcicsIHtcbiAgICAgICAgICB0ZXh0OiAnSW5zZXJ0IHJvdyBhZnRlcicsXG4gICAgICAgICAgaWNvbjogJ3RhYmxlLWluc2VydC1yb3ctYWZ0ZXInLFxuICAgICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZUluc2VydFJvd0FmdGVyJyxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDZWxsT3JSb3dcbiAgICAgICAgfSksXG4gICAgICAgIGFkZE1lbnVJZlJlZ2lzdGVyZWQoJ3RhYmxlZGVsZXRlcm93Jywge1xuICAgICAgICAgIHRleHQ6ICdEZWxldGUgcm93JyxcbiAgICAgICAgICBpY29uOiAndGFibGUtZGVsZXRlLXJvdycsXG4gICAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlRGVsZXRlUm93JyxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDZWxsT3JSb3dcbiAgICAgICAgfSksXG4gICAgICAgIGFkZE1lbnVJZlJlZ2lzdGVyZWQoJ3RhYmxlcm93cHJvcHMnLCB7XG4gICAgICAgICAgdGV4dDogJ1JvdyBwcm9wZXJ0aWVzJyxcbiAgICAgICAgICBpY29uOiAndGFibGUtcm93LXByb3BlcnRpZXMnLFxuICAgICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZVJvd1Byb3BzJyxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDZWxsT3JSb3dcbiAgICAgICAgfSksXG4gICAgICAgIGFkZE1lbnVJZlJlZ2lzdGVyZWQoJ3RhYmxlY3V0cm93Jywge1xuICAgICAgICAgIHRleHQ6ICdDdXQgcm93JyxcbiAgICAgICAgICBpY29uOiAnY3V0LXJvdycsXG4gICAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlQ3V0Um93JyxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDZWxsT3JSb3dcbiAgICAgICAgfSksXG4gICAgICAgIGFkZE1lbnVJZlJlZ2lzdGVyZWQoJ3RhYmxlY29weXJvdycsIHtcbiAgICAgICAgICB0ZXh0OiAnQ29weSByb3cnLFxuICAgICAgICAgIGljb246ICdkdXBsaWNhdGUtcm93JyxcbiAgICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVDb3B5Um93JyxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDZWxsT3JSb3dcbiAgICAgICAgfSksXG4gICAgICAgIGFkZE1lbnVJZlJlZ2lzdGVyZWQoJ3RhYmxlcGFzdGVyb3diZWZvcmUnLCB7XG4gICAgICAgICAgdGV4dDogJ1Bhc3RlIHJvdyBiZWZvcmUnLFxuICAgICAgICAgIGljb246ICdwYXN0ZS1yb3ctYmVmb3JlJyxcbiAgICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVQYXN0ZVJvd0JlZm9yZScsXG4gICAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwUGFzdGVhYmxlKGdldFJvd3MpXG4gICAgICAgIH0pLFxuICAgICAgICBhZGRNZW51SWZSZWdpc3RlcmVkKCd0YWJsZXBhc3Rlcm93YWZ0ZXInLCB7XG4gICAgICAgICAgdGV4dDogJ1Bhc3RlIHJvdyBhZnRlcicsXG4gICAgICAgICAgaWNvbjogJ3Bhc3RlLXJvdy1hZnRlcicsXG4gICAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlUGFzdGVSb3dBZnRlcicsXG4gICAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwUGFzdGVhYmxlKGdldFJvd3MpXG4gICAgICAgIH0pXG4gICAgICBdO1xuICAgICAgY29uc3QgaGFzQ29sdW1uTWVudUl0ZW1zID0gW1xuICAgICAgICBhZGRNZW51SWZSZWdpc3RlcmVkKCd0YWJsZWluc2VydGNvbHVtbmJlZm9yZScsIHtcbiAgICAgICAgICB0ZXh0OiAnSW5zZXJ0IGNvbHVtbiBiZWZvcmUnLFxuICAgICAgICAgIGljb246ICd0YWJsZS1pbnNlcnQtY29sdW1uLWJlZm9yZScsXG4gICAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlSW5zZXJ0Q29sQmVmb3JlJyxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDb2x1bW4oJ29uRmlyc3QnKVxuICAgICAgICB9KSxcbiAgICAgICAgYWRkTWVudUlmUmVnaXN0ZXJlZCgndGFibGVpbnNlcnRjb2x1bW5hZnRlcicsIHtcbiAgICAgICAgICB0ZXh0OiAnSW5zZXJ0IGNvbHVtbiBhZnRlcicsXG4gICAgICAgICAgaWNvbjogJ3RhYmxlLWluc2VydC1jb2x1bW4tYWZ0ZXInLFxuICAgICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZUluc2VydENvbEFmdGVyJyxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDb2x1bW4oJ29uTGFzdCcpXG4gICAgICAgIH0pLFxuICAgICAgICBhZGRNZW51SWZSZWdpc3RlcmVkKCd0YWJsZWRlbGV0ZWNvbHVtbicsIHtcbiAgICAgICAgICB0ZXh0OiAnRGVsZXRlIGNvbHVtbicsXG4gICAgICAgICAgaWNvbjogJ3RhYmxlLWRlbGV0ZS1jb2x1bW4nLFxuICAgICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZURlbGV0ZUNvbCcsXG4gICAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwQ29sdW1uKCdvbkFueScpXG4gICAgICAgIH0pLFxuICAgICAgICBhZGRNZW51SWZSZWdpc3RlcmVkKCd0YWJsZWN1dGNvbHVtbicsIHtcbiAgICAgICAgICB0ZXh0OiAnQ3V0IGNvbHVtbicsXG4gICAgICAgICAgaWNvbjogJ2N1dC1jb2x1bW4nLFxuICAgICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZUN1dENvbCcsXG4gICAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwQ29sdW1uKCdvbkFueScpXG4gICAgICAgIH0pLFxuICAgICAgICBhZGRNZW51SWZSZWdpc3RlcmVkKCd0YWJsZWNvcHljb2x1bW4nLCB7XG4gICAgICAgICAgdGV4dDogJ0NvcHkgY29sdW1uJyxcbiAgICAgICAgICBpY29uOiAnZHVwbGljYXRlLWNvbHVtbicsXG4gICAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlQ29weUNvbCcsXG4gICAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwQ29sdW1uKCdvbkFueScpXG4gICAgICAgIH0pLFxuICAgICAgICBhZGRNZW51SWZSZWdpc3RlcmVkKCd0YWJsZXBhc3RlY29sdW1uYmVmb3JlJywge1xuICAgICAgICAgIHRleHQ6ICdQYXN0ZSBjb2x1bW4gYmVmb3JlJyxcbiAgICAgICAgICBpY29uOiAncGFzdGUtY29sdW1uLWJlZm9yZScsXG4gICAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlUGFzdGVDb2xCZWZvcmUnLFxuICAgICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cFBhc3RlYWJsZUNvbHVtbihnZXRDb2x1bW5zLCAnb25GaXJzdCcpXG4gICAgICAgIH0pLFxuICAgICAgICBhZGRNZW51SWZSZWdpc3RlcmVkKCd0YWJsZXBhc3RlY29sdW1uYWZ0ZXInLCB7XG4gICAgICAgICAgdGV4dDogJ1Bhc3RlIGNvbHVtbiBhZnRlcicsXG4gICAgICAgICAgaWNvbjogJ3Bhc3RlLWNvbHVtbi1hZnRlcicsXG4gICAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlUGFzdGVDb2xBZnRlcicsXG4gICAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwUGFzdGVhYmxlQ29sdW1uKGdldENvbHVtbnMsICdvbkxhc3QnKVxuICAgICAgICB9KVxuICAgICAgXTtcbiAgICAgIGNvbnN0IGhhc0NlbGxNZW51SXRlbXMgPSBbXG4gICAgICAgIGFkZE1lbnVJZlJlZ2lzdGVyZWQoJ3RhYmxlY2VsbHByb3BzJywge1xuICAgICAgICAgIHRleHQ6ICdDZWxsIHByb3BlcnRpZXMnLFxuICAgICAgICAgIGljb246ICd0YWJsZS1jZWxsLXByb3BlcnRpZXMnLFxuICAgICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZUNlbGxQcm9wcycsXG4gICAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwQ2VsbE9yUm93XG4gICAgICAgIH0pLFxuICAgICAgICBhZGRNZW51SWZSZWdpc3RlcmVkKCd0YWJsZW1lcmdlY2VsbHMnLCB7XG4gICAgICAgICAgdGV4dDogJ01lcmdlIGNlbGxzJyxcbiAgICAgICAgICBpY29uOiAndGFibGUtbWVyZ2UtY2VsbHMnLFxuICAgICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZU1lcmdlQ2VsbHMnLFxuICAgICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cE1lcmdlYWJsZVxuICAgICAgICB9KSxcbiAgICAgICAgYWRkTWVudUlmUmVnaXN0ZXJlZCgndGFibGVzcGxpdGNlbGxzJywge1xuICAgICAgICAgIHRleHQ6ICdTcGxpdCBjZWxsJyxcbiAgICAgICAgICBpY29uOiAndGFibGUtc3BsaXQtY2VsbHMnLFxuICAgICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZVNwbGl0Q2VsbHMnLFxuICAgICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cFVubWVyZ2VhYmxlXG4gICAgICAgIH0pXG4gICAgICBdO1xuICAgICAgaWYgKCFoYXNUYWJsZUdyaWQoZWRpdG9yKSkge1xuICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTWVudUl0ZW0oJ2luc2VydHRhYmxlJywge1xuICAgICAgICAgIHRleHQ6ICdUYWJsZScsXG4gICAgICAgICAgaWNvbjogJ3RhYmxlJyxcbiAgICAgICAgICBvbkFjdGlvbjogY21kKCdtY2VJbnNlcnRUYWJsZURpYWxvZycpLFxuICAgICAgICAgIG9uU2V0dXA6IG9uU2V0dXBFZGl0YWJsZShlZGl0b3IpXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE5lc3RlZE1lbnVJdGVtKCdpbnNlcnR0YWJsZScsIHtcbiAgICAgICAgICB0ZXh0OiAnVGFibGUnLFxuICAgICAgICAgIGljb246ICd0YWJsZScsXG4gICAgICAgICAgZ2V0U3VibWVudUl0ZW1zOiAoKSA9PiBbe1xuICAgICAgICAgICAgICB0eXBlOiAnZmFuY3ltZW51aXRlbScsXG4gICAgICAgICAgICAgIGZhbmN5dHlwZTogJ2luc2VydHRhYmxlJyxcbiAgICAgICAgICAgICAgb25BY3Rpb246IGluc2VydFRhYmxlQWN0aW9uXG4gICAgICAgICAgICB9XSxcbiAgICAgICAgICBvblNldHVwOiBvblNldHVwRWRpdGFibGUoZWRpdG9yKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRNZW51SXRlbSgnaW5zZXJ0dGFibGVkaWFsb2cnLCB7XG4gICAgICAgIHRleHQ6ICdJbnNlcnQgdGFibGUnLFxuICAgICAgICBpY29uOiAndGFibGUnLFxuICAgICAgICBvbkFjdGlvbjogY21kKCdtY2VJbnNlcnRUYWJsZURpYWxvZycpLFxuICAgICAgICBvblNldHVwOiBvblNldHVwRWRpdGFibGUoZWRpdG9yKVxuICAgICAgfSk7XG4gICAgICBhZGRNZW51SWZSZWdpc3RlcmVkKCd0YWJsZXByb3BzJywge1xuICAgICAgICB0ZXh0OiAnVGFibGUgcHJvcGVydGllcycsXG4gICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cFRhYmxlLFxuICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVQcm9wcydcbiAgICAgIH0pO1xuICAgICAgYWRkTWVudUlmUmVnaXN0ZXJlZCgnZGVsZXRldGFibGUnLCB7XG4gICAgICAgIHRleHQ6ICdEZWxldGUgdGFibGUnLFxuICAgICAgICBpY29uOiAndGFibGUtZGVsZXRlLXRhYmxlJyxcbiAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwVGFibGUsXG4gICAgICAgIGNvbW1hbmQ6ICdtY2VUYWJsZURlbGV0ZSdcbiAgICAgIH0pO1xuICAgICAgaWYgKGNvbnRhaW5zKGhhc1Jvd01lbnVJdGVtcywgdHJ1ZSkpIHtcbiAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE5lc3RlZE1lbnVJdGVtKCdyb3cnLCB7XG4gICAgICAgICAgdHlwZTogJ25lc3RlZG1lbnVpdGVtJyxcbiAgICAgICAgICB0ZXh0OiAnUm93JyxcbiAgICAgICAgICBnZXRTdWJtZW51SXRlbXM6IGNvbnN0YW50KCd0YWJsZWluc2VydHJvd2JlZm9yZSB0YWJsZWluc2VydHJvd2FmdGVyIHRhYmxlZGVsZXRlcm93IHRhYmxlcm93cHJvcHMgfCB0YWJsZWN1dHJvdyB0YWJsZWNvcHlyb3cgdGFibGVwYXN0ZXJvd2JlZm9yZSB0YWJsZXBhc3Rlcm93YWZ0ZXInKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChjb250YWlucyhoYXNDb2x1bW5NZW51SXRlbXMsIHRydWUpKSB7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGROZXN0ZWRNZW51SXRlbSgnY29sdW1uJywge1xuICAgICAgICAgIHR5cGU6ICduZXN0ZWRtZW51aXRlbScsXG4gICAgICAgICAgdGV4dDogJ0NvbHVtbicsXG4gICAgICAgICAgZ2V0U3VibWVudUl0ZW1zOiBjb25zdGFudCgndGFibGVpbnNlcnRjb2x1bW5iZWZvcmUgdGFibGVpbnNlcnRjb2x1bW5hZnRlciB0YWJsZWRlbGV0ZWNvbHVtbiB8IHRhYmxlY3V0Y29sdW1uIHRhYmxlY29weWNvbHVtbiB0YWJsZXBhc3RlY29sdW1uYmVmb3JlIHRhYmxlcGFzdGVjb2x1bW5hZnRlcicpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRhaW5zKGhhc0NlbGxNZW51SXRlbXMsIHRydWUpKSB7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGROZXN0ZWRNZW51SXRlbSgnY2VsbCcsIHtcbiAgICAgICAgICB0eXBlOiAnbmVzdGVkbWVudWl0ZW0nLFxuICAgICAgICAgIHRleHQ6ICdDZWxsJyxcbiAgICAgICAgICBnZXRTdWJtZW51SXRlbXM6IGNvbnN0YW50KCd0YWJsZWNlbGxwcm9wcyB0YWJsZW1lcmdlY2VsbHMgdGFibGVzcGxpdGNlbGxzJylcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQ29udGV4dE1lbnUoJ3RhYmxlJywge1xuICAgICAgICB1cGRhdGU6ICgpID0+IHtcbiAgICAgICAgICBzZWxlY3Rpb25UYXJnZXRzLnJlc2V0VGFyZ2V0cygpO1xuICAgICAgICAgIHJldHVybiBzZWxlY3Rpb25UYXJnZXRzLnRhcmdldHMoKS5mb2xkKGNvbnN0YW50KCcnKSwgdGFyZ2V0cyA9PiB7XG4gICAgICAgICAgICBpZiAobmFtZSh0YXJnZXRzLmVsZW1lbnQpID09PSAnY2FwdGlvbicpIHtcbiAgICAgICAgICAgICAgcmV0dXJuICd0YWJsZXByb3BzIGRlbGV0ZXRhYmxlJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiAnY2VsbCByb3cgY29sdW1uIHwgYWR2dGFibGVzb3J0IHwgdGFibGVwcm9wcyBkZWxldGV0YWJsZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgdGFibGVDbGFzc0xpc3QgPSBmaWx0ZXJOb25lSXRlbShnZXRUYWJsZUNsYXNzTGlzdChlZGl0b3IpKTtcbiAgICAgIGlmICh0YWJsZUNsYXNzTGlzdC5sZW5ndGggIT09IDAgJiYgZWRpdG9yLnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZCgnbWNlVGFibGVUb2dnbGVDbGFzcycpKSB7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGROZXN0ZWRNZW51SXRlbSgndGFibGVjbGFzcycsIHtcbiAgICAgICAgICBpY29uOiAndGFibGUtY2xhc3NlcycsXG4gICAgICAgICAgdGV4dDogJ1RhYmxlIHN0eWxlcycsXG4gICAgICAgICAgZ2V0U3VibWVudUl0ZW1zOiAoKSA9PiBidWlsZE1lbnVJdGVtcyhlZGl0b3IsIHRhYmxlQ2xhc3NMaXN0LCAndGFibGVjbGFzcycsIHZhbHVlID0+IGVkaXRvci5leGVjQ29tbWFuZCgnbWNlVGFibGVUb2dnbGVDbGFzcycsIGZhbHNlLCB2YWx1ZSkpLFxuICAgICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cFRhYmxlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgdGFibGVDZWxsQ2xhc3NMaXN0ID0gZmlsdGVyTm9uZUl0ZW0oZ2V0Q2VsbENsYXNzTGlzdChlZGl0b3IpKTtcbiAgICAgIGlmICh0YWJsZUNlbGxDbGFzc0xpc3QubGVuZ3RoICE9PSAwICYmIGVkaXRvci5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoJ21jZVRhYmxlQ2VsbFRvZ2dsZUNsYXNzJykpIHtcbiAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE5lc3RlZE1lbnVJdGVtKCd0YWJsZWNlbGxjbGFzcycsIHtcbiAgICAgICAgICBpY29uOiAndGFibGUtY2VsbC1jbGFzc2VzJyxcbiAgICAgICAgICB0ZXh0OiAnQ2VsbCBzdHlsZXMnLFxuICAgICAgICAgIGdldFN1Ym1lbnVJdGVtczogKCkgPT4gYnVpbGRNZW51SXRlbXMoZWRpdG9yLCB0YWJsZUNlbGxDbGFzc0xpc3QsICd0YWJsZWNlbGxjbGFzcycsIHZhbHVlID0+IGVkaXRvci5leGVjQ29tbWFuZCgnbWNlVGFibGVDZWxsVG9nZ2xlQ2xhc3MnLCBmYWxzZSwgdmFsdWUpKSxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDZWxsT3JSb3dcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoZWRpdG9yLnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZCgnbWNlVGFibGVBcHBseUNlbGxTdHlsZScpKSB7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGROZXN0ZWRNZW51SXRlbSgndGFibGVjZWxsdmFsaWduJywge1xuICAgICAgICAgIGljb246ICd2ZXJ0aWNhbC1hbGlnbicsXG4gICAgICAgICAgdGV4dDogJ1ZlcnRpY2FsIGFsaWduJyxcbiAgICAgICAgICBnZXRTdWJtZW51SXRlbXM6ICgpID0+IGJ1aWxkTWVudUl0ZW1zKGVkaXRvciwgdmVydGljYWxBbGlnblZhbHVlcywgJ3RhYmxlY2VsbHZlcnRpY2FsYWxpZ24nLCBhcHBseVRhYmxlQ2VsbFN0eWxlKGVkaXRvciwgJ3ZlcnRpY2FsLWFsaWduJykpLFxuICAgICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cENlbGxPclJvd1xuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE5lc3RlZE1lbnVJdGVtKCd0YWJsZWNlbGxib3JkZXJ3aWR0aCcsIHtcbiAgICAgICAgICBpY29uOiAnYm9yZGVyLXdpZHRoJyxcbiAgICAgICAgICB0ZXh0OiAnQm9yZGVyIHdpZHRoJyxcbiAgICAgICAgICBnZXRTdWJtZW51SXRlbXM6ICgpID0+IGJ1aWxkTWVudUl0ZW1zKGVkaXRvciwgZ2V0VGFibGVCb3JkZXJXaWR0aHMoZWRpdG9yKSwgJ3RhYmxlY2VsbGJvcmRlcndpZHRoJywgYXBwbHlUYWJsZUNlbGxTdHlsZShlZGl0b3IsICdib3JkZXItd2lkdGgnKSksXG4gICAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwQ2VsbE9yUm93XG4gICAgICAgIH0pO1xuICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTmVzdGVkTWVudUl0ZW0oJ3RhYmxlY2VsbGJvcmRlcnN0eWxlJywge1xuICAgICAgICAgIGljb246ICdib3JkZXItc3R5bGUnLFxuICAgICAgICAgIHRleHQ6ICdCb3JkZXIgc3R5bGUnLFxuICAgICAgICAgIGdldFN1Ym1lbnVJdGVtczogKCkgPT4gYnVpbGRNZW51SXRlbXMoZWRpdG9yLCBnZXRUYWJsZUJvcmRlclN0eWxlcyhlZGl0b3IpLCAndGFibGVjZWxsYm9yZGVyc3R5bGUnLCBhcHBseVRhYmxlQ2VsbFN0eWxlKGVkaXRvciwgJ2JvcmRlci1zdHlsZScpKSxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDZWxsT3JSb3dcbiAgICAgICAgfSk7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGROZXN0ZWRNZW51SXRlbSgndGFibGVjZWxsYmFja2dyb3VuZGNvbG9yJywge1xuICAgICAgICAgIGljb246ICdjZWxsLWJhY2tncm91bmQtY29sb3InLFxuICAgICAgICAgIHRleHQ6ICdCYWNrZ3JvdW5kIGNvbG9yJyxcbiAgICAgICAgICBnZXRTdWJtZW51SXRlbXM6ICgpID0+IGJ1aWxkQ29sb3JNZW51KGVkaXRvciwgZ2V0VGFibGVCYWNrZ3JvdW5kQ29sb3JNYXAoZWRpdG9yKSwgJ2JhY2tncm91bmQtY29sb3InKSxcbiAgICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBDZWxsT3JSb3dcbiAgICAgICAgfSk7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGROZXN0ZWRNZW51SXRlbSgndGFibGVjZWxsYm9yZGVyY29sb3InLCB7XG4gICAgICAgICAgaWNvbjogJ2NlbGwtYm9yZGVyLWNvbG9yJyxcbiAgICAgICAgICB0ZXh0OiAnQm9yZGVyIGNvbG9yJyxcbiAgICAgICAgICBnZXRTdWJtZW51SXRlbXM6ICgpID0+IGJ1aWxkQ29sb3JNZW51KGVkaXRvciwgZ2V0VGFibGVCb3JkZXJDb2xvck1hcChlZGl0b3IpLCAnYm9yZGVyLWNvbG9yJyksXG4gICAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwQ2VsbE9yUm93XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgYWRkVG9nZ2xlTWVudUlmUmVnaXN0ZXJlZCgndGFibGVjYXB0aW9uJywge1xuICAgICAgICBpY29uOiAndGFibGUtY2FwdGlvbicsXG4gICAgICAgIHRleHQ6ICdUYWJsZSBjYXB0aW9uJyxcbiAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlVG9nZ2xlQ2FwdGlvbicsXG4gICAgICAgIG9uU2V0dXA6IHNlbGVjdGlvblRhcmdldHMub25TZXR1cFRhYmxlV2l0aENhcHRpb25cbiAgICAgIH0pO1xuICAgICAgYWRkVG9nZ2xlTWVudUlmUmVnaXN0ZXJlZCgndGFibGVyb3doZWFkZXInLCB7XG4gICAgICAgIHRleHQ6ICdSb3cgaGVhZGVyJyxcbiAgICAgICAgaWNvbjogJ3RhYmxlLXRvcC1oZWFkZXInLFxuICAgICAgICBjb21tYW5kOiAnbWNlVGFibGVSb3dUeXBlJyxcbiAgICAgICAgb25BY3Rpb246IGNoYW5nZVJvd0hlYWRlcihlZGl0b3IpLFxuICAgICAgICBvblNldHVwOiBzZWxlY3Rpb25UYXJnZXRzLm9uU2V0dXBUYWJsZVJvd0hlYWRlcnNcbiAgICAgIH0pO1xuICAgICAgYWRkVG9nZ2xlTWVudUlmUmVnaXN0ZXJlZCgndGFibGVjb2xoZWFkZXInLCB7XG4gICAgICAgIHRleHQ6ICdDb2x1bW4gaGVhZGVyJyxcbiAgICAgICAgaWNvbjogJ3RhYmxlLWxlZnQtaGVhZGVyJyxcbiAgICAgICAgY29tbWFuZDogJ21jZVRhYmxlQ29sVHlwZScsXG4gICAgICAgIG9uQWN0aW9uOiBjaGFuZ2VDb2x1bW5IZWFkZXIoZWRpdG9yKSxcbiAgICAgICAgb25TZXR1cDogc2VsZWN0aW9uVGFyZ2V0cy5vblNldHVwVGFibGVSb3dIZWFkZXJzXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgUGx1Z2luID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvblRhcmdldHMgPSBnZXRTZWxlY3Rpb25UYXJnZXRzKGVkaXRvcik7XG4gICAgICByZWdpc3RlcihlZGl0b3IpO1xuICAgICAgcmVnaXN0ZXJDb21tYW5kcyhlZGl0b3IpO1xuICAgICAgYWRkTWVudUl0ZW1zKGVkaXRvciwgc2VsZWN0aW9uVGFyZ2V0cyk7XG4gICAgICBhZGRCdXR0b25zKGVkaXRvciwgc2VsZWN0aW9uVGFyZ2V0cyk7XG4gICAgICBhZGRUb29sYmFycyhlZGl0b3IpO1xuICAgIH07XG4gICAgdmFyIFBsdWdpbiQxID0gKCkgPT4ge1xuICAgICAgZ2xvYmFsJDMuYWRkKCd0YWJsZScsIFBsdWdpbik7XG4gICAgfTtcblxuICAgIFBsdWdpbiQxKCk7XG5cbn0pKCk7XG4iLCIvLyBFeHBvcnRzIHRoZSBcInNpbHZlclwiIHRoZW1lIGZvciB1c2FnZSB3aXRoIG1vZHVsZSBsb2FkZXJzXG4vLyBVc2FnZTpcbi8vICAgQ29tbW9uSlM6XG4vLyAgICAgcmVxdWlyZSgndGlueW1jZS90aGVtZXMvc2lsdmVyJylcbi8vICAgRVMyMDE1OlxuLy8gICAgIGltcG9ydCAndGlueW1jZS90aGVtZXMvc2lsdmVyJ1xucmVxdWlyZSgnLi90aGVtZS5qcycpOyIsIi8qKlxuICogVGlueU1DRSB2ZXJzaW9uIDYuNy4wICgyMDIzLTA4LTMwKVxuICovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgY29uc3QgZ2V0UHJvdG90eXBlT2YkMiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgICBjb25zdCBoYXNQcm90byA9ICh2LCBjb25zdHJ1Y3RvciwgcHJlZGljYXRlKSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBpZiAocHJlZGljYXRlKHYsIGNvbnN0cnVjdG9yLnByb3RvdHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKChfYSA9IHYuY29uc3RydWN0b3IpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5uYW1lKSA9PT0gY29uc3RydWN0b3IubmFtZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHR5cGVPZiA9IHggPT4ge1xuICAgICAgY29uc3QgdCA9IHR5cGVvZiB4O1xuICAgICAgaWYgKHggPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICAgIH0gZWxzZSBpZiAodCA9PT0gJ29iamVjdCcgJiYgQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgICByZXR1cm4gJ2FycmF5JztcbiAgICAgIH0gZWxzZSBpZiAodCA9PT0gJ29iamVjdCcgJiYgaGFzUHJvdG8oeCwgU3RyaW5nLCAobywgcHJvdG8pID0+IHByb3RvLmlzUHJvdG90eXBlT2YobykpKSB7XG4gICAgICAgIHJldHVybiAnc3RyaW5nJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0O1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNUeXBlJDEgPSB0eXBlID0+IHZhbHVlID0+IHR5cGVPZih2YWx1ZSkgPT09IHR5cGU7XG4gICAgY29uc3QgaXNTaW1wbGVUeXBlID0gdHlwZSA9PiB2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09IHR5cGU7XG4gICAgY29uc3QgZXEkMSA9IHQgPT4gYSA9PiB0ID09PSBhO1xuICAgIGNvbnN0IGlzJDIgPSAodmFsdWUsIGNvbnN0cnVjdG9yKSA9PiBpc09iamVjdCh2YWx1ZSkgJiYgaGFzUHJvdG8odmFsdWUsIGNvbnN0cnVjdG9yLCAobywgcHJvdG8pID0+IGdldFByb3RvdHlwZU9mJDIobykgPT09IHByb3RvKTtcbiAgICBjb25zdCBpc1N0cmluZyA9IGlzVHlwZSQxKCdzdHJpbmcnKTtcbiAgICBjb25zdCBpc09iamVjdCA9IGlzVHlwZSQxKCdvYmplY3QnKTtcbiAgICBjb25zdCBpc1BsYWluT2JqZWN0ID0gdmFsdWUgPT4gaXMkMih2YWx1ZSwgT2JqZWN0KTtcbiAgICBjb25zdCBpc0FycmF5ID0gaXNUeXBlJDEoJ2FycmF5Jyk7XG4gICAgY29uc3QgaXNOdWxsID0gZXEkMShudWxsKTtcbiAgICBjb25zdCBpc0Jvb2xlYW4gPSBpc1NpbXBsZVR5cGUoJ2Jvb2xlYW4nKTtcbiAgICBjb25zdCBpc1VuZGVmaW5lZCA9IGVxJDEodW5kZWZpbmVkKTtcbiAgICBjb25zdCBpc051bGxhYmxlID0gYSA9PiBhID09PSBudWxsIHx8IGEgPT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpc05vbk51bGxhYmxlID0gYSA9PiAhaXNOdWxsYWJsZShhKTtcbiAgICBjb25zdCBpc0Z1bmN0aW9uID0gaXNTaW1wbGVUeXBlKCdmdW5jdGlvbicpO1xuICAgIGNvbnN0IGlzTnVtYmVyID0gaXNTaW1wbGVUeXBlKCdudW1iZXInKTtcbiAgICBjb25zdCBpc0FycmF5T2YgPSAodmFsdWUsIHByZWQpID0+IHtcbiAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdmFsdWUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICBpZiAoIXByZWQodmFsdWVbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICBjb25zdCBub29wID0gKCkgPT4ge1xuICAgIH07XG4gICAgY29uc3Qgbm9hcmcgPSBmID0+ICgpID0+IGYoKTtcbiAgICBjb25zdCBjb21wb3NlID0gKGZhLCBmYikgPT4ge1xuICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHJldHVybiBmYShmYi5hcHBseShudWxsLCBhcmdzKSk7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgY29tcG9zZTEgPSAoZmJjLCBmYWIpID0+IGEgPT4gZmJjKGZhYihhKSk7XG4gICAgY29uc3QgY29uc3RhbnQkMSA9IHZhbHVlID0+IHtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBpZGVudGl0eSA9IHggPT4ge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgICBjb25zdCB0cmlwbGVFcXVhbHMgPSAoYSwgYikgPT4ge1xuICAgICAgcmV0dXJuIGEgPT09IGI7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBjdXJyeShmbiwgLi4uaW5pdGlhbEFyZ3MpIHtcbiAgICAgIHJldHVybiAoLi4ucmVzdEFyZ3MpID0+IHtcbiAgICAgICAgY29uc3QgYWxsID0gaW5pdGlhbEFyZ3MuY29uY2F0KHJlc3RBcmdzKTtcbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIGFsbCk7XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBub3QgPSBmID0+IHQgPT4gIWYodCk7XG4gICAgY29uc3QgZGllID0gbXNnID0+IHtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5JDEgPSBmID0+IHtcbiAgICAgIHJldHVybiBmKCk7XG4gICAgfTtcbiAgICBjb25zdCBuZXZlciA9IGNvbnN0YW50JDEoZmFsc2UpO1xuICAgIGNvbnN0IGFsd2F5cyA9IGNvbnN0YW50JDEodHJ1ZSk7XG5cbiAgICBjbGFzcyBPcHRpb25hbCB7XG4gICAgICBjb25zdHJ1Y3Rvcih0YWcsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMudGFnID0gdGFnO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgICBzdGF0aWMgc29tZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IE9wdGlvbmFsKHRydWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHN0YXRpYyBub25lKCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc2luZ2xldG9uTm9uZTtcbiAgICAgIH1cbiAgICAgIGZvbGQob25Ob25lLCBvblNvbWUpIHtcbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgcmV0dXJuIG9uU29tZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb25Ob25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlzU29tZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnO1xuICAgICAgfVxuICAgICAgaXNOb25lKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudGFnO1xuICAgICAgfVxuICAgICAgbWFwKG1hcHBlcikge1xuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShtYXBwZXIodGhpcy52YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJpbmQoYmluZGVyKSB7XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgIHJldHVybiBiaW5kZXIodGhpcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXhpc3RzKHByZWRpY2F0ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgJiYgcHJlZGljYXRlKHRoaXMudmFsdWUpO1xuICAgICAgfVxuICAgICAgZm9yYWxsKHByZWRpY2F0ZSkge1xuICAgICAgICByZXR1cm4gIXRoaXMudGFnIHx8IHByZWRpY2F0ZSh0aGlzLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZpbHRlcihwcmVkaWNhdGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhZyB8fCBwcmVkaWNhdGUodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBnZXRPcihyZXBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzLnZhbHVlIDogcmVwbGFjZW1lbnQ7XG4gICAgICB9XG4gICAgICBvcihyZXBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzIDogcmVwbGFjZW1lbnQ7XG4gICAgICB9XG4gICAgICBnZXRPclRodW5rKHRodW5rKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMudmFsdWUgOiB0aHVuaygpO1xuICAgICAgfVxuICAgICAgb3JUaHVuayh0aHVuaykge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzIDogdGh1bmsoKTtcbiAgICAgIH1cbiAgICAgIGdldE9yRGllKG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhZykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlICE9PSBudWxsICYmIG1lc3NhZ2UgIT09IHZvaWQgMCA/IG1lc3NhZ2UgOiAnQ2FsbGVkIGdldE9yRGllIG9uIE5vbmUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RhdGljIGZyb20odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUodmFsdWUpID8gT3B0aW9uYWwuc29tZSh2YWx1ZSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICBnZXRPck51bGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZyA/IHRoaXMudmFsdWUgOiBudWxsO1xuICAgICAgfVxuICAgICAgZ2V0T3JVbmRlZmluZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgICAgfVxuICAgICAgZWFjaCh3b3JrZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgd29ya2VyKHRoaXMudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0b0FycmF5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyBbdGhpcy52YWx1ZV0gOiBbXTtcbiAgICAgIH1cbiAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyBgc29tZSgkeyB0aGlzLnZhbHVlIH0pYCA6ICdub25lKCknO1xuICAgICAgfVxuICAgIH1cbiAgICBPcHRpb25hbC5zaW5nbGV0b25Ob25lID0gbmV3IE9wdGlvbmFsKGZhbHNlKTtcblxuICAgIGNvbnN0IG5hdGl2ZVNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuICAgIGNvbnN0IG5hdGl2ZUluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbiAgICBjb25zdCBuYXRpdmVQdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7XG4gICAgY29uc3QgcmF3SW5kZXhPZiA9ICh0cywgdCkgPT4gbmF0aXZlSW5kZXhPZi5jYWxsKHRzLCB0KTtcbiAgICBjb25zdCBpbmRleE9mID0gKHhzLCB4KSA9PiB7XG4gICAgICBjb25zdCByID0gcmF3SW5kZXhPZih4cywgeCk7XG4gICAgICByZXR1cm4gciA9PT0gLTEgPyBPcHRpb25hbC5ub25lKCkgOiBPcHRpb25hbC5zb21lKHIpO1xuICAgIH07XG4gICAgY29uc3QgY29udGFpbnMkMiA9ICh4cywgeCkgPT4gcmF3SW5kZXhPZih4cywgeCkgPiAtMTtcbiAgICBjb25zdCBleGlzdHMgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IHJhbmdlJDIgPSAobnVtLCBmKSA9PiB7XG4gICAgICBjb25zdCByID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bTsgaSsrKSB7XG4gICAgICAgIHIucHVzaChmKGkpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3QgY2h1bmskMSA9IChhcnJheSwgc2l6ZSkgPT4ge1xuICAgICAgY29uc3QgciA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkgKz0gc2l6ZSkge1xuICAgICAgICBjb25zdCBzID0gbmF0aXZlU2xpY2UuY2FsbChhcnJheSwgaSwgaSArIHNpemUpO1xuICAgICAgICByLnB1c2gocyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IG1hcCQyID0gKHhzLCBmKSA9PiB7XG4gICAgICBjb25zdCBsZW4gPSB4cy5sZW5ndGg7XG4gICAgICBjb25zdCByID0gbmV3IEFycmF5KGxlbik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgcltpXSA9IGYoeCwgaSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IGVhY2gkMSA9ICh4cywgZikgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgZih4LCBpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGVhY2hyID0gKHhzLCBmKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0geHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgeCA9IHhzW2ldO1xuICAgICAgICBmKHgsIGkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcGFydGl0aW9uJDMgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGNvbnN0IHBhc3MgPSBbXTtcbiAgICAgIGNvbnN0IGZhaWwgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGNvbnN0IGFyciA9IHByZWQoeCwgaSkgPyBwYXNzIDogZmFpbDtcbiAgICAgICAgYXJyLnB1c2goeCk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXNzLFxuICAgICAgICBmYWlsXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZmlsdGVyJDIgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpKSB7XG4gICAgICAgICAgci5wdXNoKHgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IGZvbGRyID0gKHhzLCBmLCBhY2MpID0+IHtcbiAgICAgIGVhY2hyKHhzLCAoeCwgaSkgPT4ge1xuICAgICAgICBhY2MgPSBmKGFjYywgeCwgaSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfTtcbiAgICBjb25zdCBmb2xkbCA9ICh4cywgZiwgYWNjKSA9PiB7XG4gICAgICBlYWNoJDEoeHMsICh4LCBpKSA9PiB7XG4gICAgICAgIGFjYyA9IGYoYWNjLCB4LCBpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRVbnRpbCA9ICh4cywgcHJlZCwgdW50aWwpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoeCk7XG4gICAgICAgIH0gZWxzZSBpZiAodW50aWwoeCwgaSkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmQkNSA9ICh4cywgcHJlZCkgPT4ge1xuICAgICAgcmV0dXJuIGZpbmRVbnRpbCh4cywgcHJlZCwgbmV2ZXIpO1xuICAgIH07XG4gICAgY29uc3QgZmluZEluZGV4JDEgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoaSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBmbGF0dGVuID0geHMgPT4ge1xuICAgICAgY29uc3QgciA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgIGlmICghaXNBcnJheSh4c1tpXSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Fyci5mbGF0dGVuIGl0ZW0gJyArIGkgKyAnIHdhcyBub3QgYW4gYXJyYXksIGlucHV0OiAnICsgeHMpO1xuICAgICAgICB9XG4gICAgICAgIG5hdGl2ZVB1c2guYXBwbHkociwgeHNbaV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBiaW5kJDMgPSAoeHMsIGYpID0+IGZsYXR0ZW4obWFwJDIoeHMsIGYpKTtcbiAgICBjb25zdCBmb3JhbGwgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpICE9PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIGNvbnN0IHJldmVyc2UgPSB4cyA9PiB7XG4gICAgICBjb25zdCByID0gbmF0aXZlU2xpY2UuY2FsbCh4cywgMCk7XG4gICAgICByLnJldmVyc2UoKTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IChhMSwgYTIpID0+IGZpbHRlciQyKGExLCB4ID0+ICFjb250YWlucyQyKGEyLCB4KSk7XG4gICAgY29uc3QgbWFwVG9PYmplY3QgPSAoeHMsIGYpID0+IHtcbiAgICAgIGNvbnN0IHIgPSB7fTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIHJbU3RyaW5nKHgpXSA9IGYoeCwgaSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IHB1cmUkMiA9IHggPT4gW3hdO1xuICAgIGNvbnN0IHNvcnQgPSAoeHMsIGNvbXBhcmF0b3IpID0+IHtcbiAgICAgIGNvbnN0IGNvcHkgPSBuYXRpdmVTbGljZS5jYWxsKHhzLCAwKTtcbiAgICAgIGNvcHkuc29ydChjb21wYXJhdG9yKTtcbiAgICAgIHJldHVybiBjb3B5O1xuICAgIH07XG4gICAgY29uc3QgZ2V0JGggPSAoeHMsIGkpID0+IGkgPj0gMCAmJiBpIDwgeHMubGVuZ3RoID8gT3B0aW9uYWwuc29tZSh4c1tpXSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgY29uc3QgaGVhZCA9IHhzID0+IGdldCRoKHhzLCAwKTtcbiAgICBjb25zdCBsYXN0JDEgPSB4cyA9PiBnZXQkaCh4cywgeHMubGVuZ3RoIC0gMSk7XG4gICAgY29uc3QgZnJvbSA9IGlzRnVuY3Rpb24oQXJyYXkuZnJvbSkgPyBBcnJheS5mcm9tIDogeCA9PiBuYXRpdmVTbGljZS5jYWxsKHgpO1xuICAgIGNvbnN0IGZpbmRNYXAgPSAoYXJyLCBmKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByID0gZihhcnJbaV0sIGkpO1xuICAgICAgICBpZiAoci5pc1NvbWUoKSkge1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG5cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgY29uc3QgaGFzT3duUHJvcGVydHkkMSA9IE9iamVjdC5oYXNPd25Qcm9wZXJ0eTtcbiAgICBjb25zdCBlYWNoID0gKG9iaiwgZikgPT4ge1xuICAgICAgY29uc3QgcHJvcHMgPSBrZXlzKG9iaik7XG4gICAgICBmb3IgKGxldCBrID0gMCwgbGVuID0gcHJvcHMubGVuZ3RoOyBrIDwgbGVuOyBrKyspIHtcbiAgICAgICAgY29uc3QgaSA9IHByb3BzW2tdO1xuICAgICAgICBjb25zdCB4ID0gb2JqW2ldO1xuICAgICAgICBmKHgsIGkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbWFwJDEgPSAob2JqLCBmKSA9PiB7XG4gICAgICByZXR1cm4gdHVwbGVNYXAob2JqLCAoeCwgaSkgPT4gKHtcbiAgICAgICAgazogaSxcbiAgICAgICAgdjogZih4LCBpKVxuICAgICAgfSkpO1xuICAgIH07XG4gICAgY29uc3QgdHVwbGVNYXAgPSAob2JqLCBmKSA9PiB7XG4gICAgICBjb25zdCByID0ge307XG4gICAgICBlYWNoKG9iaiwgKHgsIGkpID0+IHtcbiAgICAgICAgY29uc3QgdHVwbGUgPSBmKHgsIGkpO1xuICAgICAgICByW3R1cGxlLmtdID0gdHVwbGUudjtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBvYmpBY2MgPSByID0+ICh4LCBpKSA9PiB7XG4gICAgICByW2ldID0geDtcbiAgICB9O1xuICAgIGNvbnN0IGludGVybmFsRmlsdGVyID0gKG9iaiwgcHJlZCwgb25UcnVlLCBvbkZhbHNlKSA9PiB7XG4gICAgICBlYWNoKG9iaiwgKHgsIGkpID0+IHtcbiAgICAgICAgKHByZWQoeCwgaSkgPyBvblRydWUgOiBvbkZhbHNlKSh4LCBpKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYmlmaWx0ZXIgPSAob2JqLCBwcmVkKSA9PiB7XG4gICAgICBjb25zdCB0ID0ge307XG4gICAgICBjb25zdCBmID0ge307XG4gICAgICBpbnRlcm5hbEZpbHRlcihvYmosIHByZWQsIG9iakFjYyh0KSwgb2JqQWNjKGYpKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHQsXG4gICAgICAgIGZcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXIkMSA9IChvYmosIHByZWQpID0+IHtcbiAgICAgIGNvbnN0IHQgPSB7fTtcbiAgICAgIGludGVybmFsRmlsdGVyKG9iaiwgcHJlZCwgb2JqQWNjKHQpLCBub29wKTtcbiAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgY29uc3QgbWFwVG9BcnJheSA9IChvYmosIGYpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgIGVhY2gob2JqLCAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgci5wdXNoKGYodmFsdWUsIG5hbWUpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kJDQgPSAob2JqLCBwcmVkKSA9PiB7XG4gICAgICBjb25zdCBwcm9wcyA9IGtleXMob2JqKTtcbiAgICAgIGZvciAobGV0IGsgPSAwLCBsZW4gPSBwcm9wcy5sZW5ndGg7IGsgPCBsZW47IGsrKykge1xuICAgICAgICBjb25zdCBpID0gcHJvcHNba107XG4gICAgICAgIGNvbnN0IHggPSBvYmpbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGksIG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IHZhbHVlcyA9IG9iaiA9PiB7XG4gICAgICByZXR1cm4gbWFwVG9BcnJheShvYmosIGlkZW50aXR5KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldCRnID0gKG9iaiwga2V5KSA9PiB7XG4gICAgICByZXR1cm4gaGFzJDIob2JqLCBrZXkpID8gT3B0aW9uYWwuZnJvbShvYmpba2V5XSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBoYXMkMiA9IChvYmosIGtleSkgPT4gaGFzT3duUHJvcGVydHkkMS5jYWxsKG9iaiwga2V5KTtcbiAgICBjb25zdCBoYXNOb25OdWxsYWJsZUtleSA9IChvYmosIGtleSkgPT4gaGFzJDIob2JqLCBrZXkpICYmIG9ialtrZXldICE9PSB1bmRlZmluZWQgJiYgb2JqW2tleV0gIT09IG51bGw7XG5cbiAgICBjb25zdCBpcyQxID0gKGxocywgcmhzLCBjb21wYXJhdG9yID0gdHJpcGxlRXF1YWxzKSA9PiBsaHMuZXhpc3RzKGxlZnQgPT4gY29tcGFyYXRvcihsZWZ0LCByaHMpKTtcbiAgICBjb25zdCBlcXVhbHMgPSAobGhzLCByaHMsIGNvbXBhcmF0b3IgPSB0cmlwbGVFcXVhbHMpID0+IGxpZnQyKGxocywgcmhzLCBjb21wYXJhdG9yKS5nZXRPcihsaHMuaXNOb25lKCkgJiYgcmhzLmlzTm9uZSgpKTtcbiAgICBjb25zdCBjYXQgPSBhcnIgPT4ge1xuICAgICAgY29uc3QgciA9IFtdO1xuICAgICAgY29uc3QgcHVzaCA9IHggPT4ge1xuICAgICAgICByLnB1c2goeCk7XG4gICAgICB9O1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXJyW2ldLmVhY2gocHVzaCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IHNlcXVlbmNlID0gYXJyID0+IHtcbiAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSBhcnJbaV07XG4gICAgICAgIGlmICh4LmlzU29tZSgpKSB7XG4gICAgICAgICAgci5wdXNoKHguZ2V0T3JEaWUoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUocik7XG4gICAgfTtcbiAgICBjb25zdCBsaWZ0MiA9IChvYSwgb2IsIGYpID0+IG9hLmlzU29tZSgpICYmIG9iLmlzU29tZSgpID8gT3B0aW9uYWwuc29tZShmKG9hLmdldE9yRGllKCksIG9iLmdldE9yRGllKCkpKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICBjb25zdCBsaWZ0MyA9IChvYSwgb2IsIG9jLCBmKSA9PiBvYS5pc1NvbWUoKSAmJiBvYi5pc1NvbWUoKSAmJiBvYy5pc1NvbWUoKSA/IE9wdGlvbmFsLnNvbWUoZihvYS5nZXRPckRpZSgpLCBvYi5nZXRPckRpZSgpLCBvYy5nZXRPckRpZSgpKSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgY29uc3QgbWFwRnJvbSA9IChhLCBmKSA9PiBhICE9PSB1bmRlZmluZWQgJiYgYSAhPT0gbnVsbCA/IE9wdGlvbmFsLnNvbWUoZihhKSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgY29uc3Qgc29tZUlmID0gKGIsIGEpID0+IGIgPyBPcHRpb25hbC5zb21lKGEpIDogT3B0aW9uYWwubm9uZSgpO1xuXG4gICAgY29uc3QgYWRkVG9FbmQgPSAoc3RyLCBzdWZmaXgpID0+IHtcbiAgICAgIHJldHVybiBzdHIgKyBzdWZmaXg7XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVGcm9tU3RhcnQgPSAoc3RyLCBudW1DaGFycykgPT4ge1xuICAgICAgcmV0dXJuIHN0ci5zdWJzdHJpbmcobnVtQ2hhcnMpO1xuICAgIH07XG5cbiAgICBjb25zdCBjaGVja1JhbmdlID0gKHN0ciwgc3Vic3RyLCBzdGFydCkgPT4gc3Vic3RyID09PSAnJyB8fCBzdHIubGVuZ3RoID49IHN1YnN0ci5sZW5ndGggJiYgc3RyLnN1YnN0cihzdGFydCwgc3RhcnQgKyBzdWJzdHIubGVuZ3RoKSA9PT0gc3Vic3RyO1xuICAgIGNvbnN0IHJlbW92ZUxlYWRpbmcgPSAoc3RyLCBwcmVmaXgpID0+IHtcbiAgICAgIHJldHVybiBzdGFydHNXaXRoKHN0ciwgcHJlZml4KSA/IHJlbW92ZUZyb21TdGFydChzdHIsIHByZWZpeC5sZW5ndGgpIDogc3RyO1xuICAgIH07XG4gICAgY29uc3QgZW5zdXJlVHJhaWxpbmcgPSAoc3RyLCBzdWZmaXgpID0+IHtcbiAgICAgIHJldHVybiBlbmRzV2l0aChzdHIsIHN1ZmZpeCkgPyBzdHIgOiBhZGRUb0VuZChzdHIsIHN1ZmZpeCk7XG4gICAgfTtcbiAgICBjb25zdCBjb250YWlucyQxID0gKHN0ciwgc3Vic3RyLCBzdGFydCA9IDAsIGVuZCkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gc3RyLmluZGV4T2Yoc3Vic3RyLCBzdGFydCk7XG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gaXNVbmRlZmluZWQoZW5kKSA/IHRydWUgOiBpZHggKyBzdWJzdHIubGVuZ3RoIDw9IGVuZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHN0YXJ0c1dpdGggPSAoc3RyLCBwcmVmaXgpID0+IHtcbiAgICAgIHJldHVybiBjaGVja1JhbmdlKHN0ciwgcHJlZml4LCAwKTtcbiAgICB9O1xuICAgIGNvbnN0IGVuZHNXaXRoID0gKHN0ciwgc3VmZml4KSA9PiB7XG4gICAgICByZXR1cm4gY2hlY2tSYW5nZShzdHIsIHN1ZmZpeCwgc3RyLmxlbmd0aCAtIHN1ZmZpeC5sZW5ndGgpO1xuICAgIH07XG4gICAgY29uc3QgYmxhbmsgPSByID0+IHMgPT4gcy5yZXBsYWNlKHIsICcnKTtcbiAgICBjb25zdCB0cmltJDEgPSBibGFuaygvXlxccyt8XFxzKyQvZyk7XG4gICAgY29uc3QgaXNOb3RFbXB0eSA9IHMgPT4gcy5sZW5ndGggPiAwO1xuICAgIGNvbnN0IGlzRW1wdHkgPSBzID0+ICFpc05vdEVtcHR5KHMpO1xuXG4gICAgY29uc3QgaXNTdXBwb3J0ZWQkMSA9IGRvbSA9PiBkb20uc3R5bGUgIT09IHVuZGVmaW5lZCAmJiBpc0Z1bmN0aW9uKGRvbS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKTtcblxuICAgIGNvbnN0IGZyb21IdG1sJDIgPSAoaHRtbCwgc2NvcGUpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IHNjb3BlIHx8IGRvY3VtZW50O1xuICAgICAgY29uc3QgZGl2ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZGl2LmlubmVySFRNTCA9IGh0bWw7XG4gICAgICBpZiAoIWRpdi5oYXNDaGlsZE5vZGVzKCkgfHwgZGl2LmNoaWxkTm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gJ0hUTUwgZG9lcyBub3QgaGF2ZSBhIHNpbmdsZSByb290IG5vZGUnO1xuICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UsIGh0bWwpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnJvbURvbShkaXYuY2hpbGROb2Rlc1swXSk7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tVGFnID0gKHRhZywgc2NvcGUpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IHNjb3BlIHx8IGRvY3VtZW50O1xuICAgICAgY29uc3Qgbm9kZSA9IGRvYy5jcmVhdGVFbGVtZW50KHRhZyk7XG4gICAgICByZXR1cm4gZnJvbURvbShub2RlKTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21UZXh0ID0gKHRleHQsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBzY29wZSB8fCBkb2N1bWVudDtcbiAgICAgIGNvbnN0IG5vZGUgPSBkb2MuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG4gICAgICByZXR1cm4gZnJvbURvbShub2RlKTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21Eb20gPSBub2RlID0+IHtcbiAgICAgIGlmIChub2RlID09PSBudWxsIHx8IG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vZGUgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBkb206IG5vZGUgfTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21Qb2ludCA9IChkb2NFbG0sIHgsIHkpID0+IE9wdGlvbmFsLmZyb20oZG9jRWxtLmRvbS5lbGVtZW50RnJvbVBvaW50KHgsIHkpKS5tYXAoZnJvbURvbSk7XG4gICAgY29uc3QgU3VnYXJFbGVtZW50ID0ge1xuICAgICAgZnJvbUh0bWw6IGZyb21IdG1sJDIsXG4gICAgICBmcm9tVGFnLFxuICAgICAgZnJvbVRleHQsXG4gICAgICBmcm9tRG9tLFxuICAgICAgZnJvbVBvaW50XG4gICAgfTtcblxuICAgIGNvbnN0IEdsb2JhbCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogRnVuY3Rpb24oJ3JldHVybiB0aGlzOycpKCk7XG5cbiAgICBjb25zdCBwYXRoJDEgPSAocGFydHMsIHNjb3BlKSA9PiB7XG4gICAgICBsZXQgbyA9IHNjb3BlICE9PSB1bmRlZmluZWQgJiYgc2NvcGUgIT09IG51bGwgPyBzY29wZSA6IEdsb2JhbDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoICYmIG8gIT09IHVuZGVmaW5lZCAmJiBvICE9PSBudWxsOyArK2kpIHtcbiAgICAgICAgbyA9IG9bcGFydHNbaV1dO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICBjb25zdCByZXNvbHZlID0gKHAsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHAuc3BsaXQoJy4nKTtcbiAgICAgIHJldHVybiBwYXRoJDEocGFydHMsIHNjb3BlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgdW5zYWZlID0gKG5hbWUsIHNjb3BlKSA9PiB7XG4gICAgICByZXR1cm4gcmVzb2x2ZShuYW1lLCBzY29wZSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRPckRpZSQxID0gKG5hbWUsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBhY3R1YWwgPSB1bnNhZmUobmFtZSwgc2NvcGUpO1xuICAgICAgaWYgKGFjdHVhbCA9PT0gdW5kZWZpbmVkIHx8IGFjdHVhbCA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobmFtZSArICcgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGJyb3dzZXInKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY3R1YWw7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldFByb3RvdHlwZU9mJDEgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gICAgY29uc3Qgc2FuZEhUTUxFbGVtZW50ID0gc2NvcGUgPT4ge1xuICAgICAgcmV0dXJuIGdldE9yRGllJDEoJ0hUTUxFbGVtZW50Jywgc2NvcGUpO1xuICAgIH07XG4gICAgY29uc3QgaXNQcm90b3R5cGVPZiA9IHggPT4ge1xuICAgICAgY29uc3Qgc2NvcGUgPSByZXNvbHZlKCdvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3JywgeCk7XG4gICAgICByZXR1cm4gaXNPYmplY3QoeCkgJiYgKHNhbmRIVE1MRWxlbWVudChzY29wZSkucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoeCkgfHwgL15IVE1MXFx3KkVsZW1lbnQkLy50ZXN0KGdldFByb3RvdHlwZU9mJDEoeCkuY29uc3RydWN0b3IubmFtZSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBET0NVTUVOVCA9IDk7XG4gICAgY29uc3QgRE9DVU1FTlRfRlJBR01FTlQgPSAxMTtcbiAgICBjb25zdCBFTEVNRU5UID0gMTtcbiAgICBjb25zdCBURVhUID0gMztcblxuICAgIGNvbnN0IG5hbWUkMyA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgciA9IGVsZW1lbnQuZG9tLm5vZGVOYW1lO1xuICAgICAgcmV0dXJuIHIudG9Mb3dlckNhc2UoKTtcbiAgICB9O1xuICAgIGNvbnN0IHR5cGUkMSA9IGVsZW1lbnQgPT4gZWxlbWVudC5kb20ubm9kZVR5cGU7XG4gICAgY29uc3QgaXNUeXBlID0gdCA9PiBlbGVtZW50ID0+IHR5cGUkMShlbGVtZW50KSA9PT0gdDtcbiAgICBjb25zdCBpc0hUTUxFbGVtZW50ID0gZWxlbWVudCA9PiBpc0VsZW1lbnQkMShlbGVtZW50KSAmJiBpc1Byb3RvdHlwZU9mKGVsZW1lbnQuZG9tKTtcbiAgICBjb25zdCBpc0VsZW1lbnQkMSA9IGlzVHlwZShFTEVNRU5UKTtcbiAgICBjb25zdCBpc1RleHQgPSBpc1R5cGUoVEVYVCk7XG4gICAgY29uc3QgaXNEb2N1bWVudCA9IGlzVHlwZShET0NVTUVOVCk7XG4gICAgY29uc3QgaXNEb2N1bWVudEZyYWdtZW50ID0gaXNUeXBlKERPQ1VNRU5UX0ZSQUdNRU5UKTtcbiAgICBjb25zdCBpc1RhZyA9IHRhZyA9PiBlID0+IGlzRWxlbWVudCQxKGUpICYmIG5hbWUkMyhlKSA9PT0gdGFnO1xuXG4gICAgY29uc3QgaXMgPSAoZWxlbWVudCwgc2VsZWN0b3IpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgaWYgKGRvbS5ub2RlVHlwZSAhPT0gRUxFTUVOVCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlbGVtID0gZG9tO1xuICAgICAgICBpZiAoZWxlbS5tYXRjaGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbS5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtLm1zTWF0Y2hlc1NlbGVjdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbS5tc01hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBlbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBlbGVtLm1vek1hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdCcm93c2VyIGxhY2tzIG5hdGl2ZSBzZWxlY3RvcnMnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYnlwYXNzU2VsZWN0b3IgPSBkb20gPT4gZG9tLm5vZGVUeXBlICE9PSBFTEVNRU5UICYmIGRvbS5ub2RlVHlwZSAhPT0gRE9DVU1FTlQgJiYgZG9tLm5vZGVUeXBlICE9PSBET0NVTUVOVF9GUkFHTUVOVCB8fCBkb20uY2hpbGRFbGVtZW50Q291bnQgPT09IDA7XG4gICAgY29uc3QgYWxsJDMgPSAoc2VsZWN0b3IsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBiYXNlID0gc2NvcGUgPT09IHVuZGVmaW5lZCA/IGRvY3VtZW50IDogc2NvcGUuZG9tO1xuICAgICAgcmV0dXJuIGJ5cGFzc1NlbGVjdG9yKGJhc2UpID8gW10gOiBtYXAkMihiYXNlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpLCBTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgfTtcbiAgICBjb25zdCBvbmUgPSAoc2VsZWN0b3IsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBiYXNlID0gc2NvcGUgPT09IHVuZGVmaW5lZCA/IGRvY3VtZW50IDogc2NvcGUuZG9tO1xuICAgICAgcmV0dXJuIGJ5cGFzc1NlbGVjdG9yKGJhc2UpID8gT3B0aW9uYWwubm9uZSgpIDogT3B0aW9uYWwuZnJvbShiYXNlLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpKS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIH07XG5cbiAgICBjb25zdCBlcSA9IChlMSwgZTIpID0+IGUxLmRvbSA9PT0gZTIuZG9tO1xuICAgIGNvbnN0IGNvbnRhaW5zID0gKGUxLCBlMikgPT4ge1xuICAgICAgY29uc3QgZDEgPSBlMS5kb207XG4gICAgICBjb25zdCBkMiA9IGUyLmRvbTtcbiAgICAgIHJldHVybiBkMSA9PT0gZDIgPyBmYWxzZSA6IGQxLmNvbnRhaW5zKGQyKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb3duZXIkNCA9IGVsZW1lbnQgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20oZWxlbWVudC5kb20ub3duZXJEb2N1bWVudCk7XG4gICAgY29uc3QgZG9jdW1lbnRPck93bmVyID0gZG9zID0+IGlzRG9jdW1lbnQoZG9zKSA/IGRvcyA6IG93bmVyJDQoZG9zKTtcbiAgICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBlbGVtZW50ID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGRvY3VtZW50T3JPd25lcihlbGVtZW50KS5kb20uZG9jdW1lbnRFbGVtZW50KTtcbiAgICBjb25zdCBkZWZhdWx0VmlldyA9IGVsZW1lbnQgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20oZG9jdW1lbnRPck93bmVyKGVsZW1lbnQpLmRvbS5kZWZhdWx0Vmlldyk7XG4gICAgY29uc3QgcGFyZW50ID0gZWxlbWVudCA9PiBPcHRpb25hbC5mcm9tKGVsZW1lbnQuZG9tLnBhcmVudE5vZGUpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IGVsZW1lbnQgPT4gcGFyZW50KGVsZW1lbnQpO1xuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBlbGVtZW50ID0+IE9wdGlvbmFsLmZyb20oZWxlbWVudC5kb20ucGFyZW50RWxlbWVudCkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBwYXJlbnRzID0gKGVsZW1lbnQsIGlzUm9vdCkgPT4ge1xuICAgICAgY29uc3Qgc3RvcCA9IGlzRnVuY3Rpb24oaXNSb290KSA/IGlzUm9vdCA6IG5ldmVyO1xuICAgICAgbGV0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgY29uc3QgcmV0ID0gW107XG4gICAgICB3aGlsZSAoZG9tLnBhcmVudE5vZGUgIT09IG51bGwgJiYgZG9tLnBhcmVudE5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCByYXdQYXJlbnQgPSBkb20ucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgcCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJhd1BhcmVudCk7XG4gICAgICAgIHJldC5wdXNoKHApO1xuICAgICAgICBpZiAoc3RvcChwKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbSA9IHJhd1BhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9O1xuICAgIGNvbnN0IG9mZnNldFBhcmVudCA9IGVsZW1lbnQgPT4gT3B0aW9uYWwuZnJvbShlbGVtZW50LmRvbS5vZmZzZXRQYXJlbnQpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgY29uc3QgbmV4dFNpYmxpbmcgPSBlbGVtZW50ID0+IE9wdGlvbmFsLmZyb20oZWxlbWVudC5kb20ubmV4dFNpYmxpbmcpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBlbGVtZW50ID0+IG1hcCQyKGVsZW1lbnQuZG9tLmNoaWxkTm9kZXMsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBjaGlsZCQyID0gKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBjcyA9IGVsZW1lbnQuZG9tLmNoaWxkTm9kZXM7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShjc1tpbmRleF0pLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJzdENoaWxkID0gZWxlbWVudCA9PiBjaGlsZCQyKGVsZW1lbnQsIDApO1xuICAgIGNvbnN0IHNwb3QgPSAoZWxlbWVudCwgb2Zmc2V0KSA9PiAoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIG9mZnNldFxuICAgIH0pO1xuICAgIGNvbnN0IGxlYWYgPSAoZWxlbWVudCwgb2Zmc2V0KSA9PiB7XG4gICAgICBjb25zdCBjcyA9IGNoaWxkcmVuKGVsZW1lbnQpO1xuICAgICAgcmV0dXJuIGNzLmxlbmd0aCA+IDAgJiYgb2Zmc2V0IDwgY3MubGVuZ3RoID8gc3BvdChjc1tvZmZzZXRdLCAwKSA6IHNwb3QoZWxlbWVudCwgb2Zmc2V0KTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNTaGFkb3dSb290ID0gZG9zID0+IGlzRG9jdW1lbnRGcmFnbWVudChkb3MpICYmIGlzTm9uTnVsbGFibGUoZG9zLmRvbS5ob3N0KTtcbiAgICBjb25zdCBzdXBwb3J0ZWQgPSBpc0Z1bmN0aW9uKEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvdykgJiYgaXNGdW5jdGlvbihOb2RlLnByb3RvdHlwZS5nZXRSb290Tm9kZSk7XG4gICAgY29uc3QgaXNTdXBwb3J0ZWQgPSBjb25zdGFudCQxKHN1cHBvcnRlZCk7XG4gICAgY29uc3QgZ2V0Um9vdE5vZGUgPSBzdXBwb3J0ZWQgPyBlID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGUuZG9tLmdldFJvb3ROb2RlKCkpIDogZG9jdW1lbnRPck93bmVyO1xuICAgIGNvbnN0IGdldENvbnRlbnRDb250YWluZXIgPSBkb3MgPT4gaXNTaGFkb3dSb290KGRvcykgPyBkb3MgOiBTdWdhckVsZW1lbnQuZnJvbURvbShkb2N1bWVudE9yT3duZXIoZG9zKS5kb20uYm9keSk7XG4gICAgY29uc3QgaXNJblNoYWRvd1Jvb3QgPSBlID0+IGdldFNoYWRvd1Jvb3QoZSkuaXNTb21lKCk7XG4gICAgY29uc3QgZ2V0U2hhZG93Um9vdCA9IGUgPT4ge1xuICAgICAgY29uc3QgciA9IGdldFJvb3ROb2RlKGUpO1xuICAgICAgcmV0dXJuIGlzU2hhZG93Um9vdChyKSA/IE9wdGlvbmFsLnNvbWUocikgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRTaGFkb3dIb3N0ID0gZSA9PiBTdWdhckVsZW1lbnQuZnJvbURvbShlLmRvbS5ob3N0KTtcbiAgICBjb25zdCBnZXRPcmlnaW5hbEV2ZW50VGFyZ2V0ID0gZXZlbnQgPT4ge1xuICAgICAgaWYgKGlzU3VwcG9ydGVkKCkgJiYgaXNOb25OdWxsYWJsZShldmVudC50YXJnZXQpKSB7XG4gICAgICAgIGNvbnN0IGVsID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgaWYgKGlzRWxlbWVudCQxKGVsKSAmJiBpc09wZW5TaGFkb3dIb3N0KGVsKSkge1xuICAgICAgICAgIGlmIChldmVudC5jb21wb3NlZCAmJiBldmVudC5jb21wb3NlZFBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvc2VkUGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuICAgICAgICAgICAgaWYgKGNvbXBvc2VkUGF0aCkge1xuICAgICAgICAgICAgICByZXR1cm4gaGVhZChjb21wb3NlZFBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oZXZlbnQudGFyZ2V0KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzT3BlblNoYWRvd0hvc3QgPSBlbGVtZW50ID0+IGlzTm9uTnVsbGFibGUoZWxlbWVudC5kb20uc2hhZG93Um9vdCk7XG5cbiAgICBjb25zdCBpbkJvZHkgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGlzVGV4dChlbGVtZW50KSA/IGVsZW1lbnQuZG9tLnBhcmVudE5vZGUgOiBlbGVtZW50LmRvbTtcbiAgICAgIGlmIChkb20gPT09IHVuZGVmaW5lZCB8fCBkb20gPT09IG51bGwgfHwgZG9tLm93bmVyRG9jdW1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgZG9jID0gZG9tLm93bmVyRG9jdW1lbnQ7XG4gICAgICByZXR1cm4gZ2V0U2hhZG93Um9vdChTdWdhckVsZW1lbnQuZnJvbURvbShkb20pKS5mb2xkKCgpID0+IGRvYy5ib2R5LmNvbnRhaW5zKGRvbSksIGNvbXBvc2UxKGluQm9keSwgZ2V0U2hhZG93SG9zdCkpO1xuICAgIH07XG4gICAgY29uc3QgYm9keSA9ICgpID0+IGdldEJvZHkoU3VnYXJFbGVtZW50LmZyb21Eb20oZG9jdW1lbnQpKTtcbiAgICBjb25zdCBnZXRCb2R5ID0gZG9jID0+IHtcbiAgICAgIGNvbnN0IGIgPSBkb2MuZG9tLmJvZHk7XG4gICAgICBpZiAoYiA9PT0gbnVsbCB8fCBiID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdCb2R5IGlzIG5vdCBhdmFpbGFibGUgeWV0Jyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gU3VnYXJFbGVtZW50LmZyb21Eb20oYik7XG4gICAgfTtcblxuICAgIGNvbnN0IHJhd1NldCA9IChkb20sIGtleSwgdmFsdWUpID0+IHtcbiAgICAgIGlmIChpc1N0cmluZyh2YWx1ZSkgfHwgaXNCb29sZWFuKHZhbHVlKSB8fCBpc051bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlICsgJycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBjYWxsIHRvIEF0dHJpYnV0ZS5zZXQuIEtleSAnLCBrZXksICc6OiBWYWx1ZSAnLCB2YWx1ZSwgJzo6IEVsZW1lbnQgJywgZG9tKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRyaWJ1dGUgdmFsdWUgd2FzIG5vdCBzaW1wbGUnKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldCQ5ID0gKGVsZW1lbnQsIGtleSwgdmFsdWUpID0+IHtcbiAgICAgIHJhd1NldChlbGVtZW50LmRvbSwga2V5LCB2YWx1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRBbGwkMSA9IChlbGVtZW50LCBhdHRycykgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBlYWNoKGF0dHJzLCAodiwgaykgPT4ge1xuICAgICAgICByYXdTZXQoZG9tLCBrLCB2KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0JGYgPSAoZWxlbWVudCwga2V5KSA9PiB7XG4gICAgICBjb25zdCB2ID0gZWxlbWVudC5kb20uZ2V0QXR0cmlidXRlKGtleSk7XG4gICAgICByZXR1cm4gdiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHY7XG4gICAgfTtcbiAgICBjb25zdCBnZXRPcHQgPSAoZWxlbWVudCwga2V5KSA9PiBPcHRpb25hbC5mcm9tKGdldCRmKGVsZW1lbnQsIGtleSkpO1xuICAgIGNvbnN0IGhhcyQxID0gKGVsZW1lbnQsIGtleSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICByZXR1cm4gZG9tICYmIGRvbS5oYXNBdHRyaWJ1dGUgPyBkb20uaGFzQXR0cmlidXRlKGtleSkgOiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSQ3ID0gKGVsZW1lbnQsIGtleSkgPT4ge1xuICAgICAgZWxlbWVudC5kb20ucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgfTtcbiAgICBjb25zdCBjbG9uZSQyID0gZWxlbWVudCA9PiBmb2xkbChlbGVtZW50LmRvbS5hdHRyaWJ1dGVzLCAoYWNjLCBhdHRyKSA9PiB7XG4gICAgICBhY2NbYXR0ci5uYW1lXSA9IGF0dHIudmFsdWU7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICAgIGNvbnN0IGludGVybmFsU2V0ID0gKGRvbSwgcHJvcGVydHksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIGNhbGwgdG8gQ1NTLnNldC4gUHJvcGVydHkgJywgcHJvcGVydHksICc6OiBWYWx1ZSAnLCB2YWx1ZSwgJzo6IEVsZW1lbnQgJywgZG9tKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDU1MgdmFsdWUgbXVzdCBiZSBhIHN0cmluZzogJyArIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1N1cHBvcnRlZCQxKGRvbSkpIHtcbiAgICAgICAgZG9tLnN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbnRlcm5hbFJlbW92ZSA9IChkb20sIHByb3BlcnR5KSA9PiB7XG4gICAgICBpZiAoaXNTdXBwb3J0ZWQkMShkb20pKSB7XG4gICAgICAgIGRvbS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXQkOCA9IChlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgaW50ZXJuYWxTZXQoZG9tLCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0QWxsID0gKGVsZW1lbnQsIGNzcykgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBlYWNoKGNzcywgKHYsIGspID0+IHtcbiAgICAgICAgaW50ZXJuYWxTZXQoZG9tLCBrLCB2KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2V0T3B0aW9ucyA9IChlbGVtZW50LCBjc3MpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgZWFjaChjc3MsICh2LCBrKSA9PiB7XG4gICAgICAgIHYuZm9sZCgoKSA9PiB7XG4gICAgICAgICAgaW50ZXJuYWxSZW1vdmUoZG9tLCBrKTtcbiAgICAgICAgfSwgdmFsdWUgPT4ge1xuICAgICAgICAgIGludGVybmFsU2V0KGRvbSwgaywgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0JGUgPSAoZWxlbWVudCwgcHJvcGVydHkpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgY29uc3Qgc3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9tKTtcbiAgICAgIGNvbnN0IHIgPSBzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eSk7XG4gICAgICByZXR1cm4gciA9PT0gJycgJiYgIWluQm9keShlbGVtZW50KSA/IGdldFVuc2FmZVByb3BlcnR5KGRvbSwgcHJvcGVydHkpIDogcjtcbiAgICB9O1xuICAgIGNvbnN0IGdldFVuc2FmZVByb3BlcnR5ID0gKGRvbSwgcHJvcGVydHkpID0+IGlzU3VwcG9ydGVkJDEoZG9tKSA/IGRvbS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KSA6ICcnO1xuICAgIGNvbnN0IGdldFJhdyA9IChlbGVtZW50LCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBjb25zdCByYXcgPSBnZXRVbnNhZmVQcm9wZXJ0eShkb20sIHByb3BlcnR5KTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKHJhdykuZmlsdGVyKHIgPT4gci5sZW5ndGggPiAwKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEFsbFJhdyA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgY3NzID0ge307XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGlmIChpc1N1cHBvcnRlZCQxKGRvbSkpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb20uc3R5bGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBydWxlTmFtZSA9IGRvbS5zdHlsZS5pdGVtKGkpO1xuICAgICAgICAgIGNzc1tydWxlTmFtZV0gPSBkb20uc3R5bGVbcnVsZU5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY3NzO1xuICAgIH07XG4gICAgY29uc3QgaXNWYWxpZFZhbHVlJDEgPSAodGFnLCBwcm9wZXJ0eSwgdmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBTdWdhckVsZW1lbnQuZnJvbVRhZyh0YWcpO1xuICAgICAgc2V0JDgoZWxlbWVudCwgcHJvcGVydHksIHZhbHVlKTtcbiAgICAgIGNvbnN0IHN0eWxlID0gZ2V0UmF3KGVsZW1lbnQsIHByb3BlcnR5KTtcbiAgICAgIHJldHVybiBzdHlsZS5pc1NvbWUoKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSQ2ID0gKGVsZW1lbnQsIHByb3BlcnR5KSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGludGVybmFsUmVtb3ZlKGRvbSwgcHJvcGVydHkpO1xuICAgICAgaWYgKGlzJDEoZ2V0T3B0KGVsZW1lbnQsICdzdHlsZScpLm1hcCh0cmltJDEpLCAnJykpIHtcbiAgICAgICAgcmVtb3ZlJDcoZWxlbWVudCwgJ3N0eWxlJyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZWZsb3cgPSBlID0+IGUuZG9tLm9mZnNldFdpZHRoO1xuXG4gICAgY29uc3QgRGltZW5zaW9uID0gKG5hbWUsIGdldE9mZnNldCkgPT4ge1xuICAgICAgY29uc3Qgc2V0ID0gKGVsZW1lbnQsIGgpID0+IHtcbiAgICAgICAgaWYgKCFpc051bWJlcihoKSAmJiAhaC5tYXRjaCgvXlswLTldKyQvKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihuYW1lICsgJy5zZXQgYWNjZXB0cyBvbmx5IHBvc2l0aXZlIGludGVnZXIgdmFsdWVzLiBWYWx1ZSB3YXMgJyArIGgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgICBpZiAoaXNTdXBwb3J0ZWQkMShkb20pKSB7XG4gICAgICAgICAgZG9tLnN0eWxlW25hbWVdID0gaCArICdweCc7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBnZXQgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgY29uc3QgciA9IGdldE9mZnNldChlbGVtZW50KTtcbiAgICAgICAgaWYgKHIgPD0gMCB8fCByID09PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgY3NzID0gZ2V0JGUoZWxlbWVudCwgbmFtZSk7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoY3NzKSB8fCAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldE91dGVyID0gZ2V0O1xuICAgICAgY29uc3QgYWdncmVnYXRlID0gKGVsZW1lbnQsIHByb3BlcnRpZXMpID0+IGZvbGRsKHByb3BlcnRpZXMsIChhY2MsIHByb3BlcnR5KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IGdldCRlKGVsZW1lbnQsIHByb3BlcnR5KTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB2YWwgPT09IHVuZGVmaW5lZCA/IDAgOiBwYXJzZUludCh2YWwsIDEwKTtcbiAgICAgICAgcmV0dXJuIGlzTmFOKHZhbHVlKSA/IGFjYyA6IGFjYyArIHZhbHVlO1xuICAgICAgfSwgMCk7XG4gICAgICBjb25zdCBtYXggPSAoZWxlbWVudCwgdmFsdWUsIHByb3BlcnRpZXMpID0+IHtcbiAgICAgICAgY29uc3QgY3VtdWxhdGl2ZUluY2x1c2lvbnMgPSBhZ2dyZWdhdGUoZWxlbWVudCwgcHJvcGVydGllcyk7XG4gICAgICAgIGNvbnN0IGFic29sdXRlTWF4ID0gdmFsdWUgPiBjdW11bGF0aXZlSW5jbHVzaW9ucyA/IHZhbHVlIC0gY3VtdWxhdGl2ZUluY2x1c2lvbnMgOiAwO1xuICAgICAgICByZXR1cm4gYWJzb2x1dGVNYXg7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0LFxuICAgICAgICBnZXQsXG4gICAgICAgIGdldE91dGVyLFxuICAgICAgICBhZ2dyZWdhdGUsXG4gICAgICAgIG1heFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgYXBpJDIgPSBEaW1lbnNpb24oJ2hlaWdodCcsIGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICByZXR1cm4gaW5Cb2R5KGVsZW1lbnQpID8gZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCA6IGRvbS5vZmZzZXRIZWlnaHQ7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0JGQgPSBlbGVtZW50ID0+IGFwaSQyLmdldChlbGVtZW50KTtcbiAgICBjb25zdCBnZXRPdXRlciQyID0gZWxlbWVudCA9PiBhcGkkMi5nZXRPdXRlcihlbGVtZW50KTtcbiAgICBjb25zdCBzZXRNYXgkMSA9IChlbGVtZW50LCB2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgaW5jbHVzaW9ucyA9IFtcbiAgICAgICAgJ21hcmdpbi10b3AnLFxuICAgICAgICAnYm9yZGVyLXRvcC13aWR0aCcsXG4gICAgICAgICdwYWRkaW5nLXRvcCcsXG4gICAgICAgICdwYWRkaW5nLWJvdHRvbScsXG4gICAgICAgICdib3JkZXItYm90dG9tLXdpZHRoJyxcbiAgICAgICAgJ21hcmdpbi1ib3R0b20nXG4gICAgICBdO1xuICAgICAgY29uc3QgYWJzTWF4ID0gYXBpJDIubWF4KGVsZW1lbnQsIHZhbHVlLCBpbmNsdXNpb25zKTtcbiAgICAgIHNldCQ4KGVsZW1lbnQsICdtYXgtaGVpZ2h0JywgYWJzTWF4ICsgJ3B4Jyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHIkMSA9IChsZWZ0LCB0b3ApID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zbGF0ZSA9ICh4LCB5KSA9PiByJDEobGVmdCArIHgsIHRvcCArIHkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdCxcbiAgICAgICAgdG9wLFxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBTdWdhclBvc2l0aW9uID0gciQxO1xuXG4gICAgY29uc3QgYm94UG9zaXRpb24gPSBkb20gPT4ge1xuICAgICAgY29uc3QgYm94ID0gZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgcmV0dXJuIFN1Z2FyUG9zaXRpb24oYm94LmxlZnQsIGJveC50b3ApO1xuICAgIH07XG4gICAgY29uc3QgZmlyc3REZWZpbmVkT3JaZXJvID0gKGEsIGIpID0+IHtcbiAgICAgIGlmIChhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYiAhPT0gdW5kZWZpbmVkID8gYiA6IDA7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhYnNvbHV0ZSQzID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBlbGVtZW50LmRvbS5vd25lckRvY3VtZW50O1xuICAgICAgY29uc3QgYm9keSA9IGRvYy5ib2R5O1xuICAgICAgY29uc3Qgd2luID0gZG9jLmRlZmF1bHRWaWV3O1xuICAgICAgY29uc3QgaHRtbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICBpZiAoYm9keSA9PT0gZWxlbWVudC5kb20pIHtcbiAgICAgICAgcmV0dXJuIFN1Z2FyUG9zaXRpb24oYm9keS5vZmZzZXRMZWZ0LCBib2R5Lm9mZnNldFRvcCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzY3JvbGxUb3AgPSBmaXJzdERlZmluZWRPclplcm8od2luID09PSBudWxsIHx8IHdpbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2luLnBhZ2VZT2Zmc2V0LCBodG1sLnNjcm9sbFRvcCk7XG4gICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gZmlyc3REZWZpbmVkT3JaZXJvKHdpbiA9PT0gbnVsbCB8fCB3aW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpbi5wYWdlWE9mZnNldCwgaHRtbC5zY3JvbGxMZWZ0KTtcbiAgICAgIGNvbnN0IGNsaWVudFRvcCA9IGZpcnN0RGVmaW5lZE9yWmVybyhodG1sLmNsaWVudFRvcCwgYm9keS5jbGllbnRUb3ApO1xuICAgICAgY29uc3QgY2xpZW50TGVmdCA9IGZpcnN0RGVmaW5lZE9yWmVybyhodG1sLmNsaWVudExlZnQsIGJvZHkuY2xpZW50TGVmdCk7XG4gICAgICByZXR1cm4gdmlld3BvcnQkMShlbGVtZW50KS50cmFuc2xhdGUoc2Nyb2xsTGVmdCAtIGNsaWVudExlZnQsIHNjcm9sbFRvcCAtIGNsaWVudFRvcCk7XG4gICAgfTtcbiAgICBjb25zdCB2aWV3cG9ydCQxID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGNvbnN0IGRvYyA9IGRvbS5vd25lckRvY3VtZW50O1xuICAgICAgY29uc3QgYm9keSA9IGRvYy5ib2R5O1xuICAgICAgaWYgKGJvZHkgPT09IGRvbSkge1xuICAgICAgICByZXR1cm4gU3VnYXJQb3NpdGlvbihib2R5Lm9mZnNldExlZnQsIGJvZHkub2Zmc2V0VG9wKTtcbiAgICAgIH1cbiAgICAgIGlmICghaW5Cb2R5KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBTdWdhclBvc2l0aW9uKDAsIDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJveFBvc2l0aW9uKGRvbSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFwaSQxID0gRGltZW5zaW9uKCd3aWR0aCcsIGVsZW1lbnQgPT4gZWxlbWVudC5kb20ub2Zmc2V0V2lkdGgpO1xuICAgIGNvbnN0IHNldCQ3ID0gKGVsZW1lbnQsIGgpID0+IGFwaSQxLnNldChlbGVtZW50LCBoKTtcbiAgICBjb25zdCBnZXQkYyA9IGVsZW1lbnQgPT4gYXBpJDEuZ2V0KGVsZW1lbnQpO1xuICAgIGNvbnN0IGdldE91dGVyJDEgPSBlbGVtZW50ID0+IGFwaSQxLmdldE91dGVyKGVsZW1lbnQpO1xuICAgIGNvbnN0IHNldE1heCA9IChlbGVtZW50LCB2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgaW5jbHVzaW9ucyA9IFtcbiAgICAgICAgJ21hcmdpbi1sZWZ0JyxcbiAgICAgICAgJ2JvcmRlci1sZWZ0LXdpZHRoJyxcbiAgICAgICAgJ3BhZGRpbmctbGVmdCcsXG4gICAgICAgICdwYWRkaW5nLXJpZ2h0JyxcbiAgICAgICAgJ2JvcmRlci1yaWdodC13aWR0aCcsXG4gICAgICAgICdtYXJnaW4tcmlnaHQnXG4gICAgICBdO1xuICAgICAgY29uc3QgYWJzTWF4ID0gYXBpJDEubWF4KGVsZW1lbnQsIHZhbHVlLCBpbmNsdXNpb25zKTtcbiAgICAgIHNldCQ4KGVsZW1lbnQsICdtYXgtd2lkdGgnLCBhYnNNYXggKyAncHgnKTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2FjaGVkID0gZiA9PiB7XG4gICAgICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gICAgICBsZXQgcjtcbiAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgciA9IGYuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBEZXZpY2VUeXBlID0gKG9zLCBicm93c2VyLCB1c2VyQWdlbnQsIG1lZGlhTWF0Y2gpID0+IHtcbiAgICAgIGNvbnN0IGlzaVBhZCA9IG9zLmlzaU9TKCkgJiYgL2lwYWQvaS50ZXN0KHVzZXJBZ2VudCkgPT09IHRydWU7XG4gICAgICBjb25zdCBpc2lQaG9uZSA9IG9zLmlzaU9TKCkgJiYgIWlzaVBhZDtcbiAgICAgIGNvbnN0IGlzTW9iaWxlID0gb3MuaXNpT1MoKSB8fCBvcy5pc0FuZHJvaWQoKTtcbiAgICAgIGNvbnN0IGlzVG91Y2ggPSBpc01vYmlsZSB8fCBtZWRpYU1hdGNoKCcocG9pbnRlcjpjb2Fyc2UpJyk7XG4gICAgICBjb25zdCBpc1RhYmxldCA9IGlzaVBhZCB8fCAhaXNpUGhvbmUgJiYgaXNNb2JpbGUgJiYgbWVkaWFNYXRjaCgnKG1pbi1kZXZpY2Utd2lkdGg6NzY4cHgpJyk7XG4gICAgICBjb25zdCBpc1Bob25lID0gaXNpUGhvbmUgfHwgaXNNb2JpbGUgJiYgIWlzVGFibGV0O1xuICAgICAgY29uc3QgaU9Td2VidmlldyA9IGJyb3dzZXIuaXNTYWZhcmkoKSAmJiBvcy5pc2lPUygpICYmIC9zYWZhcmkvaS50ZXN0KHVzZXJBZ2VudCkgPT09IGZhbHNlO1xuICAgICAgY29uc3QgaXNEZXNrdG9wID0gIWlzUGhvbmUgJiYgIWlzVGFibGV0ICYmICFpT1N3ZWJ2aWV3O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNpUGFkOiBjb25zdGFudCQxKGlzaVBhZCksXG4gICAgICAgIGlzaVBob25lOiBjb25zdGFudCQxKGlzaVBob25lKSxcbiAgICAgICAgaXNUYWJsZXQ6IGNvbnN0YW50JDEoaXNUYWJsZXQpLFxuICAgICAgICBpc1Bob25lOiBjb25zdGFudCQxKGlzUGhvbmUpLFxuICAgICAgICBpc1RvdWNoOiBjb25zdGFudCQxKGlzVG91Y2gpLFxuICAgICAgICBpc0FuZHJvaWQ6IG9zLmlzQW5kcm9pZCxcbiAgICAgICAgaXNpT1M6IG9zLmlzaU9TLFxuICAgICAgICBpc1dlYlZpZXc6IGNvbnN0YW50JDEoaU9Td2VidmlldyksXG4gICAgICAgIGlzRGVza3RvcDogY29uc3RhbnQkMShpc0Rlc2t0b3ApXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBmaXJzdE1hdGNoID0gKHJlZ2V4ZXMsIHMpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVnZXhlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB4ID0gcmVnZXhlc1tpXTtcbiAgICAgICAgaWYgKHgudGVzdChzKSkge1xuICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgY29uc3QgZmluZCQzID0gKHJlZ2V4ZXMsIGFnZW50KSA9PiB7XG4gICAgICBjb25zdCByID0gZmlyc3RNYXRjaChyZWdleGVzLCBhZ2VudCk7XG4gICAgICBpZiAoIXIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtYWpvcjogMCxcbiAgICAgICAgICBtaW5vcjogMFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgZ3JvdXAgPSBpID0+IHtcbiAgICAgICAgcmV0dXJuIE51bWJlcihhZ2VudC5yZXBsYWNlKHIsICckJyArIGkpKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gbnUkZChncm91cCgxKSwgZ3JvdXAoMikpO1xuICAgIH07XG4gICAgY29uc3QgZGV0ZWN0JDUgPSAodmVyc2lvblJlZ2V4ZXMsIGFnZW50KSA9PiB7XG4gICAgICBjb25zdCBjbGVhbmVkQWdlbnQgPSBTdHJpbmcoYWdlbnQpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAodmVyc2lvblJlZ2V4ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB1bmtub3duJDMoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmaW5kJDModmVyc2lvblJlZ2V4ZXMsIGNsZWFuZWRBZ2VudCk7XG4gICAgfTtcbiAgICBjb25zdCB1bmtub3duJDMgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gbnUkZCgwLCAwKTtcbiAgICB9O1xuICAgIGNvbnN0IG51JGQgPSAobWFqb3IsIG1pbm9yKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYWpvcixcbiAgICAgICAgbWlub3JcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBWZXJzaW9uID0ge1xuICAgICAgbnU6IG51JGQsXG4gICAgICBkZXRlY3Q6IGRldGVjdCQ1LFxuICAgICAgdW5rbm93bjogdW5rbm93biQzXG4gICAgfTtcblxuICAgIGNvbnN0IGRldGVjdEJyb3dzZXIkMSA9IChicm93c2VycywgdXNlckFnZW50RGF0YSkgPT4ge1xuICAgICAgcmV0dXJuIGZpbmRNYXAodXNlckFnZW50RGF0YS5icmFuZHMsIHVhQnJhbmQgPT4ge1xuICAgICAgICBjb25zdCBsY0JyYW5kID0gdWFCcmFuZC5icmFuZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gZmluZCQ1KGJyb3dzZXJzLCBicm93c2VyID0+IHtcbiAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgcmV0dXJuIGxjQnJhbmQgPT09ICgoX2EgPSBicm93c2VyLmJyYW5kKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH0pLm1hcChpbmZvID0+ICh7XG4gICAgICAgICAgY3VycmVudDogaW5mby5uYW1lLFxuICAgICAgICAgIHZlcnNpb246IFZlcnNpb24ubnUocGFyc2VJbnQodWFCcmFuZC52ZXJzaW9uLCAxMCksIDApXG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBkZXRlY3QkNCA9IChjYW5kaWRhdGVzLCB1c2VyQWdlbnQpID0+IHtcbiAgICAgIGNvbnN0IGFnZW50ID0gU3RyaW5nKHVzZXJBZ2VudCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBmaW5kJDUoY2FuZGlkYXRlcywgY2FuZGlkYXRlID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZS5zZWFyY2goYWdlbnQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBkZXRlY3RCcm93c2VyID0gKGJyb3dzZXJzLCB1c2VyQWdlbnQpID0+IHtcbiAgICAgIHJldHVybiBkZXRlY3QkNChicm93c2VycywgdXNlckFnZW50KS5tYXAoYnJvd3NlciA9PiB7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBWZXJzaW9uLmRldGVjdChicm93c2VyLnZlcnNpb25SZWdleGVzLCB1c2VyQWdlbnQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGN1cnJlbnQ6IGJyb3dzZXIubmFtZSxcbiAgICAgICAgICB2ZXJzaW9uXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGRldGVjdE9zID0gKG9zZXMsIHVzZXJBZ2VudCkgPT4ge1xuICAgICAgcmV0dXJuIGRldGVjdCQ0KG9zZXMsIHVzZXJBZ2VudCkubWFwKG9zID0+IHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IFZlcnNpb24uZGV0ZWN0KG9zLnZlcnNpb25SZWdleGVzLCB1c2VyQWdlbnQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGN1cnJlbnQ6IG9zLm5hbWUsXG4gICAgICAgICAgdmVyc2lvblxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG5vcm1hbFZlcnNpb25SZWdleCA9IC8uKj92ZXJzaW9uXFwvXFwgPyhbMC05XSspXFwuKFswLTldKykuKi87XG4gICAgY29uc3QgY2hlY2tDb250YWlucyA9IHRhcmdldCA9PiB7XG4gICAgICByZXR1cm4gdWFzdHJpbmcgPT4ge1xuICAgICAgICByZXR1cm4gY29udGFpbnMkMSh1YXN0cmluZywgdGFyZ2V0KTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBicm93c2VycyA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0VkZ2UnLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogWy8uKj9lZGdlXFwvID8oWzAtOV0rKVxcLihbMC05XSspJC9dLFxuICAgICAgICBzZWFyY2g6IHVhc3RyaW5nID0+IHtcbiAgICAgICAgICByZXR1cm4gY29udGFpbnMkMSh1YXN0cmluZywgJ2VkZ2UvJykgJiYgY29udGFpbnMkMSh1YXN0cmluZywgJ2Nocm9tZScpICYmIGNvbnRhaW5zJDEodWFzdHJpbmcsICdzYWZhcmknKSAmJiBjb250YWlucyQxKHVhc3RyaW5nLCAnYXBwbGV3ZWJraXQnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0Nocm9taXVtJyxcbiAgICAgICAgYnJhbmQ6ICdDaHJvbWl1bScsXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbXG4gICAgICAgICAgLy4qP2Nocm9tZVxcLyhbMC05XSspXFwuKFswLTldKykuKi8sXG4gICAgICAgICAgbm9ybWFsVmVyc2lvblJlZ2V4XG4gICAgICAgIF0sXG4gICAgICAgIHNlYXJjaDogdWFzdHJpbmcgPT4ge1xuICAgICAgICAgIHJldHVybiBjb250YWlucyQxKHVhc3RyaW5nLCAnY2hyb21lJykgJiYgIWNvbnRhaW5zJDEodWFzdHJpbmcsICdjaHJvbWVmcmFtZScpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnSUUnLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogW1xuICAgICAgICAgIC8uKj9tc2llXFwgPyhbMC05XSspXFwuKFswLTldKykuKi8sXG4gICAgICAgICAgLy4qP3J2OihbMC05XSspXFwuKFswLTldKykuKi9cbiAgICAgICAgXSxcbiAgICAgICAgc2VhcmNoOiB1YXN0cmluZyA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRhaW5zJDEodWFzdHJpbmcsICdtc2llJykgfHwgY29udGFpbnMkMSh1YXN0cmluZywgJ3RyaWRlbnQnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ09wZXJhJyxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFtcbiAgICAgICAgICBub3JtYWxWZXJzaW9uUmVnZXgsXG4gICAgICAgICAgLy4qP29wZXJhXFwvKFswLTldKylcXC4oWzAtOV0rKS4qL1xuICAgICAgICBdLFxuICAgICAgICBzZWFyY2g6IGNoZWNrQ29udGFpbnMoJ29wZXJhJylcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdGaXJlZm94JyxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFsvLio/ZmlyZWZveFxcL1xcID8oWzAtOV0rKVxcLihbMC05XSspLiovXSxcbiAgICAgICAgc2VhcmNoOiBjaGVja0NvbnRhaW5zKCdmaXJlZm94JylcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTYWZhcmknLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogW1xuICAgICAgICAgIG5vcm1hbFZlcnNpb25SZWdleCxcbiAgICAgICAgICAvLio/Y3B1IG9zIChbMC05XSspXyhbMC05XSspLiovXG4gICAgICAgIF0sXG4gICAgICAgIHNlYXJjaDogdWFzdHJpbmcgPT4ge1xuICAgICAgICAgIHJldHVybiAoY29udGFpbnMkMSh1YXN0cmluZywgJ3NhZmFyaScpIHx8IGNvbnRhaW5zJDEodWFzdHJpbmcsICdtb2JpbGUvJykpICYmIGNvbnRhaW5zJDEodWFzdHJpbmcsICdhcHBsZXdlYmtpdCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgXTtcbiAgICBjb25zdCBvc2VzID0gW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnV2luZG93cycsXG4gICAgICAgIHNlYXJjaDogY2hlY2tDb250YWlucygnd2luJyksXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbLy4qP3dpbmRvd3NcXCBudFxcID8oWzAtOV0rKVxcLihbMC05XSspLiovXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2lPUycsXG4gICAgICAgIHNlYXJjaDogdWFzdHJpbmcgPT4ge1xuICAgICAgICAgIHJldHVybiBjb250YWlucyQxKHVhc3RyaW5nLCAnaXBob25lJykgfHwgY29udGFpbnMkMSh1YXN0cmluZywgJ2lwYWQnKTtcbiAgICAgICAgfSxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFtcbiAgICAgICAgICAvLio/dmVyc2lvblxcL1xcID8oWzAtOV0rKVxcLihbMC05XSspLiovLFxuICAgICAgICAgIC8uKmNwdSBvcyAoWzAtOV0rKV8oWzAtOV0rKS4qLyxcbiAgICAgICAgICAvLipjcHUgaXBob25lIG9zIChbMC05XSspXyhbMC05XSspLiovXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdBbmRyb2lkJyxcbiAgICAgICAgc2VhcmNoOiBjaGVja0NvbnRhaW5zKCdhbmRyb2lkJyksXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbLy4qP2FuZHJvaWRcXCA/KFswLTldKylcXC4oWzAtOV0rKS4qL11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdtYWNPUycsXG4gICAgICAgIHNlYXJjaDogY2hlY2tDb250YWlucygnbWFjIG9zIHgnKSxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFsvLio/bWFjXFwgb3NcXCB4XFwgPyhbMC05XSspXyhbMC05XSspLiovXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0xpbnV4JyxcbiAgICAgICAgc2VhcmNoOiBjaGVja0NvbnRhaW5zKCdsaW51eCcpLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogW11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTb2xhcmlzJyxcbiAgICAgICAgc2VhcmNoOiBjaGVja0NvbnRhaW5zKCdzdW5vcycpLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogW11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdGcmVlQlNEJyxcbiAgICAgICAgc2VhcmNoOiBjaGVja0NvbnRhaW5zKCdmcmVlYnNkJyksXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0Nocm9tZU9TJyxcbiAgICAgICAgc2VhcmNoOiBjaGVja0NvbnRhaW5zKCdjcm9zJyksXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbLy4qP2Nocm9tZVxcLyhbMC05XSspXFwuKFswLTldKykuKi9dXG4gICAgICB9XG4gICAgXTtcbiAgICBjb25zdCBQbGF0Zm9ybUluZm8gPSB7XG4gICAgICBicm93c2VyczogY29uc3RhbnQkMShicm93c2VycyksXG4gICAgICBvc2VzOiBjb25zdGFudCQxKG9zZXMpXG4gICAgfTtcblxuICAgIGNvbnN0IGVkZ2UgPSAnRWRnZSc7XG4gICAgY29uc3QgY2hyb21pdW0gPSAnQ2hyb21pdW0nO1xuICAgIGNvbnN0IGllID0gJ0lFJztcbiAgICBjb25zdCBvcGVyYSA9ICdPcGVyYSc7XG4gICAgY29uc3QgZmlyZWZveCA9ICdGaXJlZm94JztcbiAgICBjb25zdCBzYWZhcmkgPSAnU2FmYXJpJztcbiAgICBjb25zdCB1bmtub3duJDIgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gbnUkYyh7XG4gICAgICAgIGN1cnJlbnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgdmVyc2lvbjogVmVyc2lvbi51bmtub3duKClcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbnUkYyA9IGluZm8gPT4ge1xuICAgICAgY29uc3QgY3VycmVudCA9IGluZm8uY3VycmVudDtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSBpbmZvLnZlcnNpb247XG4gICAgICBjb25zdCBpc0Jyb3dzZXIgPSBuYW1lID0+ICgpID0+IGN1cnJlbnQgPT09IG5hbWU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50LFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICBpc0VkZ2U6IGlzQnJvd3NlcihlZGdlKSxcbiAgICAgICAgaXNDaHJvbWl1bTogaXNCcm93c2VyKGNocm9taXVtKSxcbiAgICAgICAgaXNJRTogaXNCcm93c2VyKGllKSxcbiAgICAgICAgaXNPcGVyYTogaXNCcm93c2VyKG9wZXJhKSxcbiAgICAgICAgaXNGaXJlZm94OiBpc0Jyb3dzZXIoZmlyZWZveCksXG4gICAgICAgIGlzU2FmYXJpOiBpc0Jyb3dzZXIoc2FmYXJpKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IEJyb3dzZXIgPSB7XG4gICAgICB1bmtub3duOiB1bmtub3duJDIsXG4gICAgICBudTogbnUkYyxcbiAgICAgIGVkZ2U6IGNvbnN0YW50JDEoZWRnZSksXG4gICAgICBjaHJvbWl1bTogY29uc3RhbnQkMShjaHJvbWl1bSksXG4gICAgICBpZTogY29uc3RhbnQkMShpZSksXG4gICAgICBvcGVyYTogY29uc3RhbnQkMShvcGVyYSksXG4gICAgICBmaXJlZm94OiBjb25zdGFudCQxKGZpcmVmb3gpLFxuICAgICAgc2FmYXJpOiBjb25zdGFudCQxKHNhZmFyaSlcbiAgICB9O1xuXG4gICAgY29uc3Qgd2luZG93cyA9ICdXaW5kb3dzJztcbiAgICBjb25zdCBpb3MgPSAnaU9TJztcbiAgICBjb25zdCBhbmRyb2lkID0gJ0FuZHJvaWQnO1xuICAgIGNvbnN0IGxpbnV4ID0gJ0xpbnV4JztcbiAgICBjb25zdCBtYWNvcyA9ICdtYWNPUyc7XG4gICAgY29uc3Qgc29sYXJpcyA9ICdTb2xhcmlzJztcbiAgICBjb25zdCBmcmVlYnNkID0gJ0ZyZWVCU0QnO1xuICAgIGNvbnN0IGNocm9tZW9zID0gJ0Nocm9tZU9TJztcbiAgICBjb25zdCB1bmtub3duJDEgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gbnUkYih7XG4gICAgICAgIGN1cnJlbnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgdmVyc2lvbjogVmVyc2lvbi51bmtub3duKClcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbnUkYiA9IGluZm8gPT4ge1xuICAgICAgY29uc3QgY3VycmVudCA9IGluZm8uY3VycmVudDtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSBpbmZvLnZlcnNpb247XG4gICAgICBjb25zdCBpc09TID0gbmFtZSA9PiAoKSA9PiBjdXJyZW50ID09PSBuYW1lO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgaXNXaW5kb3dzOiBpc09TKHdpbmRvd3MpLFxuICAgICAgICBpc2lPUzogaXNPUyhpb3MpLFxuICAgICAgICBpc0FuZHJvaWQ6IGlzT1MoYW5kcm9pZCksXG4gICAgICAgIGlzTWFjT1M6IGlzT1MobWFjb3MpLFxuICAgICAgICBpc0xpbnV4OiBpc09TKGxpbnV4KSxcbiAgICAgICAgaXNTb2xhcmlzOiBpc09TKHNvbGFyaXMpLFxuICAgICAgICBpc0ZyZWVCU0Q6IGlzT1MoZnJlZWJzZCksXG4gICAgICAgIGlzQ2hyb21lT1M6IGlzT1MoY2hyb21lb3MpXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgT3BlcmF0aW5nU3lzdGVtID0ge1xuICAgICAgdW5rbm93bjogdW5rbm93biQxLFxuICAgICAgbnU6IG51JGIsXG4gICAgICB3aW5kb3dzOiBjb25zdGFudCQxKHdpbmRvd3MpLFxuICAgICAgaW9zOiBjb25zdGFudCQxKGlvcyksXG4gICAgICBhbmRyb2lkOiBjb25zdGFudCQxKGFuZHJvaWQpLFxuICAgICAgbGludXg6IGNvbnN0YW50JDEobGludXgpLFxuICAgICAgbWFjb3M6IGNvbnN0YW50JDEobWFjb3MpLFxuICAgICAgc29sYXJpczogY29uc3RhbnQkMShzb2xhcmlzKSxcbiAgICAgIGZyZWVic2Q6IGNvbnN0YW50JDEoZnJlZWJzZCksXG4gICAgICBjaHJvbWVvczogY29uc3RhbnQkMShjaHJvbWVvcylcbiAgICB9O1xuXG4gICAgY29uc3QgZGV0ZWN0JDMgPSAodXNlckFnZW50LCB1c2VyQWdlbnREYXRhT3B0LCBtZWRpYU1hdGNoKSA9PiB7XG4gICAgICBjb25zdCBicm93c2VycyA9IFBsYXRmb3JtSW5mby5icm93c2VycygpO1xuICAgICAgY29uc3Qgb3NlcyA9IFBsYXRmb3JtSW5mby5vc2VzKCk7XG4gICAgICBjb25zdCBicm93c2VyID0gdXNlckFnZW50RGF0YU9wdC5iaW5kKHVzZXJBZ2VudERhdGEgPT4gZGV0ZWN0QnJvd3NlciQxKGJyb3dzZXJzLCB1c2VyQWdlbnREYXRhKSkub3JUaHVuaygoKSA9PiBkZXRlY3RCcm93c2VyKGJyb3dzZXJzLCB1c2VyQWdlbnQpKS5mb2xkKEJyb3dzZXIudW5rbm93biwgQnJvd3Nlci5udSk7XG4gICAgICBjb25zdCBvcyA9IGRldGVjdE9zKG9zZXMsIHVzZXJBZ2VudCkuZm9sZChPcGVyYXRpbmdTeXN0ZW0udW5rbm93biwgT3BlcmF0aW5nU3lzdGVtLm51KTtcbiAgICAgIGNvbnN0IGRldmljZVR5cGUgPSBEZXZpY2VUeXBlKG9zLCBicm93c2VyLCB1c2VyQWdlbnQsIG1lZGlhTWF0Y2gpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYnJvd3NlcixcbiAgICAgICAgb3MsXG4gICAgICAgIGRldmljZVR5cGVcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBQbGF0Zm9ybURldGVjdGlvbiA9IHsgZGV0ZWN0OiBkZXRlY3QkMyB9O1xuXG4gICAgY29uc3QgbWVkaWFNYXRjaCA9IHF1ZXJ5ID0+IHdpbmRvdy5tYXRjaE1lZGlhKHF1ZXJ5KS5tYXRjaGVzO1xuICAgIGxldCBwbGF0Zm9ybSA9IGNhY2hlZCgoKSA9PiBQbGF0Zm9ybURldGVjdGlvbi5kZXRlY3QobmF2aWdhdG9yLnVzZXJBZ2VudCwgT3B0aW9uYWwuZnJvbShuYXZpZ2F0b3IudXNlckFnZW50RGF0YSksIG1lZGlhTWF0Y2gpKTtcbiAgICBjb25zdCBkZXRlY3QkMiA9ICgpID0+IHBsYXRmb3JtKCk7XG5cbiAgICBjb25zdCBta0V2ZW50ID0gKHRhcmdldCwgeCwgeSwgc3RvcCwgcHJldmVudCwga2lsbCwgcmF3KSA9PiAoe1xuICAgICAgdGFyZ2V0LFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBzdG9wLFxuICAgICAgcHJldmVudCxcbiAgICAgIGtpbGwsXG4gICAgICByYXdcbiAgICB9KTtcbiAgICBjb25zdCBmcm9tUmF3RXZlbnQkMSA9IHJhd0V2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGdldE9yaWdpbmFsRXZlbnRUYXJnZXQocmF3RXZlbnQpLmdldE9yKHJhd0V2ZW50LnRhcmdldCkpO1xuICAgICAgY29uc3Qgc3RvcCA9ICgpID0+IHJhd0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY29uc3QgcHJldmVudCA9ICgpID0+IHJhd0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBraWxsID0gY29tcG9zZShwcmV2ZW50LCBzdG9wKTtcbiAgICAgIHJldHVybiBta0V2ZW50KHRhcmdldCwgcmF3RXZlbnQuY2xpZW50WCwgcmF3RXZlbnQuY2xpZW50WSwgc3RvcCwgcHJldmVudCwga2lsbCwgcmF3RXZlbnQpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlID0gKGZpbHRlciwgaGFuZGxlcikgPT4gcmF3RXZlbnQgPT4ge1xuICAgICAgaWYgKGZpbHRlcihyYXdFdmVudCkpIHtcbiAgICAgICAgaGFuZGxlcihmcm9tUmF3RXZlbnQkMShyYXdFdmVudCkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYmluZGVyID0gKGVsZW1lbnQsIGV2ZW50LCBmaWx0ZXIsIGhhbmRsZXIsIHVzZUNhcHR1cmUpID0+IHtcbiAgICAgIGNvbnN0IHdyYXBwZWQgPSBoYW5kbGUoZmlsdGVyLCBoYW5kbGVyKTtcbiAgICAgIGVsZW1lbnQuZG9tLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIHdyYXBwZWQsIHVzZUNhcHR1cmUpO1xuICAgICAgcmV0dXJuIHsgdW5iaW5kOiBjdXJyeSh1bmJpbmQsIGVsZW1lbnQsIGV2ZW50LCB3cmFwcGVkLCB1c2VDYXB0dXJlKSB9O1xuICAgIH07XG4gICAgY29uc3QgYmluZCQyID0gKGVsZW1lbnQsIGV2ZW50LCBmaWx0ZXIsIGhhbmRsZXIpID0+IGJpbmRlcihlbGVtZW50LCBldmVudCwgZmlsdGVyLCBoYW5kbGVyLCBmYWxzZSk7XG4gICAgY29uc3QgY2FwdHVyZSQxID0gKGVsZW1lbnQsIGV2ZW50LCBmaWx0ZXIsIGhhbmRsZXIpID0+IGJpbmRlcihlbGVtZW50LCBldmVudCwgZmlsdGVyLCBoYW5kbGVyLCB0cnVlKTtcbiAgICBjb25zdCB1bmJpbmQgPSAoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIHVzZUNhcHR1cmUpID0+IHtcbiAgICAgIGVsZW1lbnQuZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIsIHVzZUNhcHR1cmUpO1xuICAgIH07XG5cbiAgICBjb25zdCBiZWZvcmUkMSA9IChtYXJrZXIsIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCQxID0gcGFyZW50KG1hcmtlcik7XG4gICAgICBwYXJlbnQkMS5lYWNoKHYgPT4ge1xuICAgICAgICB2LmRvbS5pbnNlcnRCZWZvcmUoZWxlbWVudC5kb20sIG1hcmtlci5kb20pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBhZnRlciQyID0gKG1hcmtlciwgZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3Qgc2libGluZyA9IG5leHRTaWJsaW5nKG1hcmtlcik7XG4gICAgICBzaWJsaW5nLmZvbGQoKCkgPT4ge1xuICAgICAgICBjb25zdCBwYXJlbnQkMSA9IHBhcmVudChtYXJrZXIpO1xuICAgICAgICBwYXJlbnQkMS5lYWNoKHYgPT4ge1xuICAgICAgICAgIGFwcGVuZCQyKHYsIGVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHYgPT4ge1xuICAgICAgICBiZWZvcmUkMSh2LCBlbGVtZW50KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcHJlcGVuZCQxID0gKHBhcmVudCwgZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgZmlyc3RDaGlsZCQxID0gZmlyc3RDaGlsZChwYXJlbnQpO1xuICAgICAgZmlyc3RDaGlsZCQxLmZvbGQoKCkgPT4ge1xuICAgICAgICBhcHBlbmQkMihwYXJlbnQsIGVsZW1lbnQpO1xuICAgICAgfSwgdiA9PiB7XG4gICAgICAgIHBhcmVudC5kb20uaW5zZXJ0QmVmb3JlKGVsZW1lbnQuZG9tLCB2LmRvbSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGVuZCQyID0gKHBhcmVudCwgZWxlbWVudCkgPT4ge1xuICAgICAgcGFyZW50LmRvbS5hcHBlbmRDaGlsZChlbGVtZW50LmRvbSk7XG4gICAgfTtcbiAgICBjb25zdCBhcHBlbmRBdCA9IChwYXJlbnQsIGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjaGlsZCQyKHBhcmVudCwgaW5kZXgpLmZvbGQoKCkgPT4ge1xuICAgICAgICBhcHBlbmQkMihwYXJlbnQsIGVsZW1lbnQpO1xuICAgICAgfSwgdiA9PiB7XG4gICAgICAgIGJlZm9yZSQxKHYsIGVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFwcGVuZCQxID0gKHBhcmVudCwgZWxlbWVudHMpID0+IHtcbiAgICAgIGVhY2gkMShlbGVtZW50cywgeCA9PiB7XG4gICAgICAgIGFwcGVuZCQyKHBhcmVudCwgeCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZW1wdHkgPSBlbGVtZW50ID0+IHtcbiAgICAgIGVsZW1lbnQuZG9tLnRleHRDb250ZW50ID0gJyc7XG4gICAgICBlYWNoJDEoY2hpbGRyZW4oZWxlbWVudCksIHJvZ3VlID0+IHtcbiAgICAgICAgcmVtb3ZlJDUocm9ndWUpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmUkNSA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBpZiAoZG9tLnBhcmVudE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgZG9tLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG9tKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0JGIgPSBfRE9DID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IF9ET0MgIT09IHVuZGVmaW5lZCA/IF9ET0MuZG9tIDogZG9jdW1lbnQ7XG4gICAgICBjb25zdCB4ID0gZG9jLmJvZHkuc2Nyb2xsTGVmdCB8fCBkb2MuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICBjb25zdCB5ID0gZG9jLmJvZHkuc2Nyb2xsVG9wIHx8IGRvYy5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgICAgcmV0dXJuIFN1Z2FyUG9zaXRpb24oeCwgeSk7XG4gICAgfTtcbiAgICBjb25zdCB0byA9ICh4LCB5LCBfRE9DKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBfRE9DICE9PSB1bmRlZmluZWQgPyBfRE9DLmRvbSA6IGRvY3VtZW50O1xuICAgICAgY29uc3Qgd2luID0gZG9jLmRlZmF1bHRWaWV3O1xuICAgICAgaWYgKHdpbikge1xuICAgICAgICB3aW4uc2Nyb2xsVG8oeCwgeSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGdldCRhID0gX3dpbiA9PiB7XG4gICAgICBjb25zdCB3aW4gPSBfd2luID09PSB1bmRlZmluZWQgPyB3aW5kb3cgOiBfd2luO1xuICAgICAgaWYgKGRldGVjdCQyKCkuYnJvd3Nlci5pc0ZpcmVmb3goKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20od2luLnZpc3VhbFZpZXdwb3J0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGJvdW5kcyQxID0gKHgsIHksIHdpZHRoLCBoZWlnaHQpID0+ICh7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICAgIGJvdHRvbTogeSArIGhlaWdodFxuICAgIH0pO1xuICAgIGNvbnN0IGdldEJvdW5kcyQzID0gX3dpbiA9PiB7XG4gICAgICBjb25zdCB3aW4gPSBfd2luID09PSB1bmRlZmluZWQgPyB3aW5kb3cgOiBfd2luO1xuICAgICAgY29uc3QgZG9jID0gd2luLmRvY3VtZW50O1xuICAgICAgY29uc3Qgc2Nyb2xsID0gZ2V0JGIoU3VnYXJFbGVtZW50LmZyb21Eb20oZG9jKSk7XG4gICAgICByZXR1cm4gZ2V0JGEod2luKS5mb2xkKCgpID0+IHtcbiAgICAgICAgY29uc3QgaHRtbCA9IHdpbi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gaHRtbC5jbGllbnRXaWR0aDtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gICAgICAgIHJldHVybiBib3VuZHMkMShzY3JvbGwubGVmdCwgc2Nyb2xsLnRvcCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICB9LCB2aXN1YWxWaWV3cG9ydCA9PiBib3VuZHMkMShNYXRoLm1heCh2aXN1YWxWaWV3cG9ydC5wYWdlTGVmdCwgc2Nyb2xsLmxlZnQpLCBNYXRoLm1heCh2aXN1YWxWaWV3cG9ydC5wYWdlVG9wLCBzY3JvbGwudG9wKSwgdmlzdWFsVmlld3BvcnQud2lkdGgsIHZpc3VhbFZpZXdwb3J0LmhlaWdodCkpO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXREb2N1bWVudCA9ICgpID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGRvY3VtZW50KTtcblxuICAgIGNvbnN0IHdhbGtVcCA9IChuYXZpZ2F0aW9uLCBkb2MpID0+IHtcbiAgICAgIGNvbnN0IGZyYW1lID0gbmF2aWdhdGlvbi52aWV3KGRvYyk7XG4gICAgICByZXR1cm4gZnJhbWUuZm9sZChjb25zdGFudCQxKFtdKSwgZiA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IG5hdmlnYXRpb24ub3duZXIoZik7XG4gICAgICAgIGNvbnN0IHJlc3QgPSB3YWxrVXAobmF2aWdhdGlvbiwgcGFyZW50KTtcbiAgICAgICAgcmV0dXJuIFtmXS5jb25jYXQocmVzdCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHBhdGhUbyA9IChlbGVtZW50LCBuYXZpZ2F0aW9uKSA9PiB7XG4gICAgICBjb25zdCBkID0gbmF2aWdhdGlvbi5vd25lcihlbGVtZW50KTtcbiAgICAgIGNvbnN0IHBhdGhzID0gd2Fsa1VwKG5hdmlnYXRpb24sIGQpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUocGF0aHMpO1xuICAgIH07XG5cbiAgICBjb25zdCB2aWV3ID0gZG9jID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2MuZG9tID09PSBkb2N1bWVudCA/IE9wdGlvbmFsLm5vbmUoKSA6IE9wdGlvbmFsLmZyb20oKF9hID0gZG9jLmRvbS5kZWZhdWx0VmlldykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZyYW1lRWxlbWVudCk7XG4gICAgICByZXR1cm4gZWxlbWVudC5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIH07XG4gICAgY29uc3Qgb3duZXIkMyA9IGVsZW1lbnQgPT4gb3duZXIkNChlbGVtZW50KTtcblxuICAgIHZhciBOYXZpZ2F0aW9uID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIHZpZXc6IHZpZXcsXG4gICAgICAgIG93bmVyOiBvd25lciQzXG4gICAgfSk7XG5cbiAgICBjb25zdCBmaW5kJDIgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IGdldERvY3VtZW50KCk7XG4gICAgICBjb25zdCBzY3JvbGwgPSBnZXQkYihkb2MpO1xuICAgICAgY29uc3QgcGF0aCA9IHBhdGhUbyhlbGVtZW50LCBOYXZpZ2F0aW9uKTtcbiAgICAgIHJldHVybiBwYXRoLmZvbGQoY3VycnkoYWJzb2x1dGUkMywgZWxlbWVudCksIGZyYW1lcyA9PiB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHZpZXdwb3J0JDEoZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHIgPSBmb2xkcihmcmFtZXMsIChiLCBhKSA9PiB7XG4gICAgICAgICAgY29uc3QgbG9jID0gdmlld3BvcnQkMShhKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGVmdDogYi5sZWZ0ICsgbG9jLmxlZnQsXG4gICAgICAgICAgICB0b3A6IGIudG9wICsgbG9jLnRvcFxuICAgICAgICAgIH07XG4gICAgICAgIH0sIHtcbiAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgIHRvcDogMFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFN1Z2FyUG9zaXRpb24oci5sZWZ0ICsgb2Zmc2V0LmxlZnQgKyBzY3JvbGwubGVmdCwgci50b3AgKyBvZmZzZXQudG9wICsgc2Nyb2xsLnRvcCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcG9pbnRlZCA9IChwb2ludCwgd2lkdGgsIGhlaWdodCkgPT4gKHtcbiAgICAgIHBvaW50LFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9KTtcbiAgICBjb25zdCByZWN0ID0gKHgsIHksIHdpZHRoLCBoZWlnaHQpID0+ICh7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0XG4gICAgfSk7XG4gICAgY29uc3QgYm91bmRzID0gKHgsIHksIHdpZHRoLCBoZWlnaHQpID0+ICh7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICAgIGJvdHRvbTogeSArIGhlaWdodFxuICAgIH0pO1xuICAgIGNvbnN0IGJveCQxID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCB4eSA9IGFic29sdXRlJDMoZWxlbWVudCk7XG4gICAgICBjb25zdCB3ID0gZ2V0T3V0ZXIkMShlbGVtZW50KTtcbiAgICAgIGNvbnN0IGggPSBnZXRPdXRlciQyKGVsZW1lbnQpO1xuICAgICAgcmV0dXJuIGJvdW5kcyh4eS5sZWZ0LCB4eS50b3AsIHcsIGgpO1xuICAgIH07XG4gICAgY29uc3QgYWJzb2x1dGUkMiA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSBmaW5kJDIoZWxlbWVudCk7XG4gICAgICBjb25zdCB3aWR0aCA9IGdldE91dGVyJDEoZWxlbWVudCk7XG4gICAgICBjb25zdCBoZWlnaHQgPSBnZXRPdXRlciQyKGVsZW1lbnQpO1xuICAgICAgcmV0dXJuIGJvdW5kcyhwb3NpdGlvbi5sZWZ0LCBwb3NpdGlvbi50b3AsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH07XG4gICAgY29uc3QgY29uc3RyYWluID0gKG9yaWdpbmFsLCBjb25zdHJhaW50KSA9PiB7XG4gICAgICBjb25zdCBsZWZ0ID0gTWF0aC5tYXgob3JpZ2luYWwueCwgY29uc3RyYWludC54KTtcbiAgICAgIGNvbnN0IHRvcCA9IE1hdGgubWF4KG9yaWdpbmFsLnksIGNvbnN0cmFpbnQueSk7XG4gICAgICBjb25zdCByaWdodCA9IE1hdGgubWluKG9yaWdpbmFsLnJpZ2h0LCBjb25zdHJhaW50LnJpZ2h0KTtcbiAgICAgIGNvbnN0IGJvdHRvbSA9IE1hdGgubWluKG9yaWdpbmFsLmJvdHRvbSwgY29uc3RyYWludC5ib3R0b20pO1xuICAgICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgICBjb25zdCBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gICAgICByZXR1cm4gYm91bmRzKGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCk7XG4gICAgfTtcbiAgICBjb25zdCBjb25zdHJhaW5CeU1hbnkgPSAob3JpZ2luYWwsIGNvbnN0cmFpbnRzKSA9PiB7XG4gICAgICByZXR1cm4gZm9sZGwoY29uc3RyYWludHMsIChhY2MsIGMpID0+IGNvbnN0cmFpbihhY2MsIGMpLCBvcmlnaW5hbCk7XG4gICAgfTtcbiAgICBjb25zdCB3aW4gPSAoKSA9PiBnZXRCb3VuZHMkMyh3aW5kb3cpO1xuXG4gICAgdmFyIGdsb2JhbCRhID0gdGlueW1jZS51dGlsLlRvb2xzLnJlc29sdmUoJ3RpbnltY2UuVGhlbWVNYW5hZ2VyJyk7XG5cbiAgICBjb25zdCB2YWx1ZSQ0ID0gdmFsdWUgPT4ge1xuICAgICAgY29uc3QgYXBwbHlIZWxwZXIgPSBmbiA9PiBmbih2YWx1ZSk7XG4gICAgICBjb25zdCBjb25zdEhlbHBlciA9IGNvbnN0YW50JDEodmFsdWUpO1xuICAgICAgY29uc3Qgb3V0cHV0SGVscGVyID0gKCkgPT4gb3V0cHV0O1xuICAgICAgY29uc3Qgb3V0cHV0ID0ge1xuICAgICAgICB0YWc6IHRydWUsXG4gICAgICAgIGlubmVyOiB2YWx1ZSxcbiAgICAgICAgZm9sZDogKF9vbkVycm9yLCBvblZhbHVlKSA9PiBvblZhbHVlKHZhbHVlKSxcbiAgICAgICAgaXNWYWx1ZTogYWx3YXlzLFxuICAgICAgICBpc0Vycm9yOiBuZXZlcixcbiAgICAgICAgbWFwOiBtYXBwZXIgPT4gUmVzdWx0LnZhbHVlKG1hcHBlcih2YWx1ZSkpLFxuICAgICAgICBtYXBFcnJvcjogb3V0cHV0SGVscGVyLFxuICAgICAgICBiaW5kOiBhcHBseUhlbHBlcixcbiAgICAgICAgZXhpc3RzOiBhcHBseUhlbHBlcixcbiAgICAgICAgZm9yYWxsOiBhcHBseUhlbHBlcixcbiAgICAgICAgZ2V0T3I6IGNvbnN0SGVscGVyLFxuICAgICAgICBvcjogb3V0cHV0SGVscGVyLFxuICAgICAgICBnZXRPclRodW5rOiBjb25zdEhlbHBlcixcbiAgICAgICAgb3JUaHVuazogb3V0cHV0SGVscGVyLFxuICAgICAgICBnZXRPckRpZTogY29uc3RIZWxwZXIsXG4gICAgICAgIGVhY2g6IGZuID0+IHtcbiAgICAgICAgICBmbih2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRvT3B0aW9uYWw6ICgpID0+IE9wdGlvbmFsLnNvbWUodmFsdWUpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yJDEgPSBlcnJvciA9PiB7XG4gICAgICBjb25zdCBvdXRwdXRIZWxwZXIgPSAoKSA9PiBvdXRwdXQ7XG4gICAgICBjb25zdCBvdXRwdXQgPSB7XG4gICAgICAgIHRhZzogZmFsc2UsXG4gICAgICAgIGlubmVyOiBlcnJvcixcbiAgICAgICAgZm9sZDogKG9uRXJyb3IsIF9vblZhbHVlKSA9PiBvbkVycm9yKGVycm9yKSxcbiAgICAgICAgaXNWYWx1ZTogbmV2ZXIsXG4gICAgICAgIGlzRXJyb3I6IGFsd2F5cyxcbiAgICAgICAgbWFwOiBvdXRwdXRIZWxwZXIsXG4gICAgICAgIG1hcEVycm9yOiBtYXBwZXIgPT4gUmVzdWx0LmVycm9yKG1hcHBlcihlcnJvcikpLFxuICAgICAgICBiaW5kOiBvdXRwdXRIZWxwZXIsXG4gICAgICAgIGV4aXN0czogbmV2ZXIsXG4gICAgICAgIGZvcmFsbDogYWx3YXlzLFxuICAgICAgICBnZXRPcjogaWRlbnRpdHksXG4gICAgICAgIG9yOiBpZGVudGl0eSxcbiAgICAgICAgZ2V0T3JUaHVuazogYXBwbHkkMSxcbiAgICAgICAgb3JUaHVuazogYXBwbHkkMSxcbiAgICAgICAgZ2V0T3JEaWU6IGRpZShTdHJpbmcoZXJyb3IpKSxcbiAgICAgICAgZWFjaDogbm9vcCxcbiAgICAgICAgdG9PcHRpb25hbDogT3B0aW9uYWwubm9uZVxuICAgICAgfTtcbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tT3B0aW9uID0gKG9wdGlvbmFsLCBlcnIpID0+IG9wdGlvbmFsLmZvbGQoKCkgPT4gZXJyb3IkMShlcnIpLCB2YWx1ZSQ0KTtcbiAgICBjb25zdCBSZXN1bHQgPSB7XG4gICAgICB2YWx1ZTogdmFsdWUkNCxcbiAgICAgIGVycm9yOiBlcnJvciQxLFxuICAgICAgZnJvbU9wdGlvblxuICAgIH07XG5cbiAgICB2YXIgU2ltcGxlUmVzdWx0VHlwZTtcbiAgICAoZnVuY3Rpb24gKFNpbXBsZVJlc3VsdFR5cGUpIHtcbiAgICAgIFNpbXBsZVJlc3VsdFR5cGVbU2ltcGxlUmVzdWx0VHlwZVsnRXJyb3InXSA9IDBdID0gJ0Vycm9yJztcbiAgICAgIFNpbXBsZVJlc3VsdFR5cGVbU2ltcGxlUmVzdWx0VHlwZVsnVmFsdWUnXSA9IDFdID0gJ1ZhbHVlJztcbiAgICB9KFNpbXBsZVJlc3VsdFR5cGUgfHwgKFNpbXBsZVJlc3VsdFR5cGUgPSB7fSkpKTtcbiAgICBjb25zdCBmb2xkJDEgPSAocmVzLCBvbkVycm9yLCBvblZhbHVlKSA9PiByZXMuc3R5cGUgPT09IFNpbXBsZVJlc3VsdFR5cGUuRXJyb3IgPyBvbkVycm9yKHJlcy5zZXJyb3IpIDogb25WYWx1ZShyZXMuc3ZhbHVlKTtcbiAgICBjb25zdCBwYXJ0aXRpb24kMiA9IHJlc3VsdHMgPT4ge1xuICAgICAgY29uc3QgdmFsdWVzID0gW107XG4gICAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICAgIGVhY2gkMShyZXN1bHRzLCBvYmogPT4ge1xuICAgICAgICBmb2xkJDEob2JqLCBlcnIgPT4gZXJyb3JzLnB1c2goZXJyKSwgdmFsID0+IHZhbHVlcy5wdXNoKHZhbCkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIGVycm9yc1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG1hcEVycm9yID0gKHJlcywgZikgPT4ge1xuICAgICAgaWYgKHJlcy5zdHlwZSA9PT0gU2ltcGxlUmVzdWx0VHlwZS5FcnJvcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0eXBlOiBTaW1wbGVSZXN1bHRUeXBlLkVycm9yLFxuICAgICAgICAgIHNlcnJvcjogZihyZXMuc2Vycm9yKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1hcCA9IChyZXMsIGYpID0+IHtcbiAgICAgIGlmIChyZXMuc3R5cGUgPT09IFNpbXBsZVJlc3VsdFR5cGUuVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdHlwZTogU2ltcGxlUmVzdWx0VHlwZS5WYWx1ZSxcbiAgICAgICAgICBzdmFsdWU6IGYocmVzLnN2YWx1ZSlcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBiaW5kJDEgPSAocmVzLCBmKSA9PiB7XG4gICAgICBpZiAocmVzLnN0eXBlID09PSBTaW1wbGVSZXN1bHRUeXBlLlZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmKHJlcy5zdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGJpbmRFcnJvciA9IChyZXMsIGYpID0+IHtcbiAgICAgIGlmIChyZXMuc3R5cGUgPT09IFNpbXBsZVJlc3VsdFR5cGUuRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGYocmVzLnNlcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc3ZhbHVlID0gdiA9PiAoe1xuICAgICAgc3R5cGU6IFNpbXBsZVJlc3VsdFR5cGUuVmFsdWUsXG4gICAgICBzdmFsdWU6IHZcbiAgICB9KTtcbiAgICBjb25zdCBzZXJyb3IgPSBlID0+ICh7XG4gICAgICBzdHlwZTogU2ltcGxlUmVzdWx0VHlwZS5FcnJvcixcbiAgICAgIHNlcnJvcjogZVxuICAgIH0pO1xuICAgIGNvbnN0IHRvUmVzdWx0JDEgPSByZXMgPT4gZm9sZCQxKHJlcywgUmVzdWx0LmVycm9yLCBSZXN1bHQudmFsdWUpO1xuICAgIGNvbnN0IGZyb21SZXN1bHQkMSA9IHJlcyA9PiByZXMuZm9sZChzZXJyb3IsIHN2YWx1ZSk7XG4gICAgY29uc3QgU2ltcGxlUmVzdWx0ID0ge1xuICAgICAgZnJvbVJlc3VsdDogZnJvbVJlc3VsdCQxLFxuICAgICAgdG9SZXN1bHQ6IHRvUmVzdWx0JDEsXG4gICAgICBzdmFsdWUsXG4gICAgICBwYXJ0aXRpb246IHBhcnRpdGlvbiQyLFxuICAgICAgc2Vycm9yLFxuICAgICAgYmluZDogYmluZCQxLFxuICAgICAgYmluZEVycm9yLFxuICAgICAgbWFwLFxuICAgICAgbWFwRXJyb3IsXG4gICAgICBmb2xkOiBmb2xkJDFcbiAgICB9O1xuXG4gICAgY29uc3QgZmllbGQkMiA9IChrZXksIG5ld0tleSwgcHJlc2VuY2UsIHByb3ApID0+ICh7XG4gICAgICB0YWc6ICdmaWVsZCcsXG4gICAgICBrZXksXG4gICAgICBuZXdLZXksXG4gICAgICBwcmVzZW5jZSxcbiAgICAgIHByb3BcbiAgICB9KTtcbiAgICBjb25zdCBjdXN0b21GaWVsZCQxID0gKG5ld0tleSwgaW5zdGFudGlhdG9yKSA9PiAoe1xuICAgICAgdGFnOiAnY3VzdG9tJyxcbiAgICAgIG5ld0tleSxcbiAgICAgIGluc3RhbnRpYXRvclxuICAgIH0pO1xuICAgIGNvbnN0IGZvbGQgPSAodmFsdWUsIGlmRmllbGQsIGlmQ3VzdG9tKSA9PiB7XG4gICAgICBzd2l0Y2ggKHZhbHVlLnRhZykge1xuICAgICAgY2FzZSAnZmllbGQnOlxuICAgICAgICByZXR1cm4gaWZGaWVsZCh2YWx1ZS5rZXksIHZhbHVlLm5ld0tleSwgdmFsdWUucHJlc2VuY2UsIHZhbHVlLnByb3ApO1xuICAgICAgY2FzZSAnY3VzdG9tJzpcbiAgICAgICAgcmV0dXJuIGlmQ3VzdG9tKHZhbHVlLm5ld0tleSwgdmFsdWUuaW5zdGFudGlhdG9yKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgc2hhbGxvdyQxID0gKG9sZCwgbnUpID0+IHtcbiAgICAgIHJldHVybiBudTtcbiAgICB9O1xuICAgIGNvbnN0IGRlZXAgPSAob2xkLCBudSkgPT4ge1xuICAgICAgY29uc3QgYm90aE9iamVjdHMgPSBpc1BsYWluT2JqZWN0KG9sZCkgJiYgaXNQbGFpbk9iamVjdChudSk7XG4gICAgICByZXR1cm4gYm90aE9iamVjdHMgPyBkZWVwTWVyZ2Uob2xkLCBudSkgOiBudTtcbiAgICB9O1xuICAgIGNvbnN0IGJhc2VNZXJnZSA9IG1lcmdlciA9PiB7XG4gICAgICByZXR1cm4gKC4uLm9iamVjdHMpID0+IHtcbiAgICAgICAgaWYgKG9iamVjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBtZXJnZSB6ZXJvIG9iamVjdHNgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXQgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBvYmplY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgY29uc3QgY3VyT2JqZWN0ID0gb2JqZWN0c1tqXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjdXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChoYXMkMihjdXJPYmplY3QsIGtleSkpIHtcbiAgICAgICAgICAgICAgcmV0W2tleV0gPSBtZXJnZXIocmV0W2tleV0sIGN1ck9iamVjdFtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBkZWVwTWVyZ2UgPSBiYXNlTWVyZ2UoZGVlcCk7XG4gICAgY29uc3QgbWVyZ2UkMSA9IGJhc2VNZXJnZShzaGFsbG93JDEpO1xuXG4gICAgY29uc3QgcmVxdWlyZWQkMiA9ICgpID0+ICh7XG4gICAgICB0YWc6ICdyZXF1aXJlZCcsXG4gICAgICBwcm9jZXNzOiB7fVxuICAgIH0pO1xuICAgIGNvbnN0IGRlZmF1bHRlZFRodW5rID0gZmFsbGJhY2tUaHVuayA9PiAoe1xuICAgICAgdGFnOiAnZGVmYXVsdGVkVGh1bmsnLFxuICAgICAgcHJvY2VzczogZmFsbGJhY2tUaHVua1xuICAgIH0pO1xuICAgIGNvbnN0IGRlZmF1bHRlZCQxID0gZmFsbGJhY2sgPT4gZGVmYXVsdGVkVGh1bmsoY29uc3RhbnQkMShmYWxsYmFjaykpO1xuICAgIGNvbnN0IGFzT3B0aW9uID0gKCkgPT4gKHtcbiAgICAgIHRhZzogJ29wdGlvbicsXG4gICAgICBwcm9jZXNzOiB7fVxuICAgIH0pO1xuICAgIGNvbnN0IG1lcmdlV2l0aFRodW5rID0gYmFzZVRodW5rID0+ICh7XG4gICAgICB0YWc6ICdtZXJnZVdpdGhUaHVuaycsXG4gICAgICBwcm9jZXNzOiBiYXNlVGh1bmtcbiAgICB9KTtcbiAgICBjb25zdCBtZXJnZVdpdGggPSBiYXNlID0+IG1lcmdlV2l0aFRodW5rKGNvbnN0YW50JDEoYmFzZSkpO1xuXG4gICAgY29uc3QgbWVyZ2VWYWx1ZXMkMSA9ICh2YWx1ZXMsIGJhc2UpID0+IHZhbHVlcy5sZW5ndGggPiAwID8gU2ltcGxlUmVzdWx0LnN2YWx1ZShkZWVwTWVyZ2UoYmFzZSwgbWVyZ2UkMS5hcHBseSh1bmRlZmluZWQsIHZhbHVlcykpKSA6IFNpbXBsZVJlc3VsdC5zdmFsdWUoYmFzZSk7XG4gICAgY29uc3QgbWVyZ2VFcnJvcnMkMSA9IGVycm9ycyA9PiBjb21wb3NlKFNpbXBsZVJlc3VsdC5zZXJyb3IsIGZsYXR0ZW4pKGVycm9ycyk7XG4gICAgY29uc3QgY29uc29saWRhdGVPYmogPSAob2JqZWN0cywgYmFzZSkgPT4ge1xuICAgICAgY29uc3QgcGFydGl0aW9uID0gU2ltcGxlUmVzdWx0LnBhcnRpdGlvbihvYmplY3RzKTtcbiAgICAgIHJldHVybiBwYXJ0aXRpb24uZXJyb3JzLmxlbmd0aCA+IDAgPyBtZXJnZUVycm9ycyQxKHBhcnRpdGlvbi5lcnJvcnMpIDogbWVyZ2VWYWx1ZXMkMShwYXJ0aXRpb24udmFsdWVzLCBiYXNlKTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbnNvbGlkYXRlQXJyID0gb2JqZWN0cyA9PiB7XG4gICAgICBjb25zdCBwYXJ0aXRpb25zID0gU2ltcGxlUmVzdWx0LnBhcnRpdGlvbihvYmplY3RzKTtcbiAgICAgIHJldHVybiBwYXJ0aXRpb25zLmVycm9ycy5sZW5ndGggPiAwID8gbWVyZ2VFcnJvcnMkMShwYXJ0aXRpb25zLmVycm9ycykgOiBTaW1wbGVSZXN1bHQuc3ZhbHVlKHBhcnRpdGlvbnMudmFsdWVzKTtcbiAgICB9O1xuICAgIGNvbnN0IFJlc3VsdENvbWJpbmUgPSB7XG4gICAgICBjb25zb2xpZGF0ZU9iaixcbiAgICAgIGNvbnNvbGlkYXRlQXJyXG4gICAgfTtcblxuICAgIGNvbnN0IGZvcm1hdE9iaiA9IGlucHV0ID0+IHtcbiAgICAgIHJldHVybiBpc09iamVjdChpbnB1dCkgJiYga2V5cyhpbnB1dCkubGVuZ3RoID4gMTAwID8gJyByZW1vdmVkIGR1ZSB0byBzaXplJyA6IEpTT04uc3RyaW5naWZ5KGlucHV0LCBudWxsLCAyKTtcbiAgICB9O1xuICAgIGNvbnN0IGZvcm1hdEVycm9ycyA9IGVycm9ycyA9PiB7XG4gICAgICBjb25zdCBlcyA9IGVycm9ycy5sZW5ndGggPiAxMCA/IGVycm9ycy5zbGljZSgwLCAxMCkuY29uY2F0KFt7XG4gICAgICAgICAgcGF0aDogW10sXG4gICAgICAgICAgZ2V0RXJyb3JJbmZvOiBjb25zdGFudCQxKCcuLi4gKG9ubHkgc2hvd2luZyBmaXJzdCB0ZW4gZmFpbHVyZXMpJylcbiAgICAgICAgfV0pIDogZXJyb3JzO1xuICAgICAgcmV0dXJuIG1hcCQyKGVzLCBlID0+IHtcbiAgICAgICAgcmV0dXJuICdGYWlsZWQgcGF0aDogKCcgKyBlLnBhdGguam9pbignID4gJykgKyAnKVxcbicgKyBlLmdldEVycm9ySW5mbygpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG51JGEgPSAocGF0aCwgZ2V0RXJyb3JJbmZvKSA9PiB7XG4gICAgICByZXR1cm4gU2ltcGxlUmVzdWx0LnNlcnJvcihbe1xuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgZ2V0RXJyb3JJbmZvXG4gICAgICAgIH1dKTtcbiAgICB9O1xuICAgIGNvbnN0IG1pc3NpbmdSZXF1aXJlZCA9IChwYXRoLCBrZXksIG9iaikgPT4gbnUkYShwYXRoLCAoKSA9PiAnQ291bGQgbm90IGZpbmQgdmFsaWQgKnJlcXVpcmVkKiB2YWx1ZSBmb3IgXCInICsga2V5ICsgJ1wiIGluICcgKyBmb3JtYXRPYmoob2JqKSk7XG4gICAgY29uc3QgbWlzc2luZ0tleSA9IChwYXRoLCBrZXkpID0+IG51JGEocGF0aCwgKCkgPT4gJ0Nob2ljZSBzY2hlbWEgZGlkIG5vdCBjb250YWluIGNob2ljZSBrZXk6IFwiJyArIGtleSArICdcIicpO1xuICAgIGNvbnN0IG1pc3NpbmdCcmFuY2ggPSAocGF0aCwgYnJhbmNoZXMsIGJyYW5jaCkgPT4gbnUkYShwYXRoLCAoKSA9PiAnVGhlIGNob3NlbiBzY2hlbWE6IFwiJyArIGJyYW5jaCArICdcIiBkaWQgbm90IGV4aXN0IGluIGJyYW5jaGVzOiAnICsgZm9ybWF0T2JqKGJyYW5jaGVzKSk7XG4gICAgY29uc3QgdW5zdXBwb3J0ZWRGaWVsZHMgPSAocGF0aCwgdW5zdXBwb3J0ZWQpID0+IG51JGEocGF0aCwgKCkgPT4gJ1RoZXJlIGFyZSB1bnN1cHBvcnRlZCBmaWVsZHM6IFsnICsgdW5zdXBwb3J0ZWQuam9pbignLCAnKSArICddIHNwZWNpZmllZCcpO1xuICAgIGNvbnN0IGN1c3RvbSA9IChwYXRoLCBlcnIpID0+IG51JGEocGF0aCwgY29uc3RhbnQkMShlcnIpKTtcblxuICAgIGNvbnN0IHZhbHVlJDMgPSB2YWxpZGF0b3IgPT4ge1xuICAgICAgY29uc3QgZXh0cmFjdCA9IChwYXRoLCB2YWwpID0+IHtcbiAgICAgICAgcmV0dXJuIFNpbXBsZVJlc3VsdC5iaW5kRXJyb3IodmFsaWRhdG9yKHZhbCksIGVyciA9PiBjdXN0b20ocGF0aCwgZXJyKSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdG9TdHJpbmcgPSBjb25zdGFudCQxKCd2YWwnKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4dHJhY3QsXG4gICAgICAgIHRvU3RyaW5nXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgYW55VmFsdWUkMSA9IHZhbHVlJDMoU2ltcGxlUmVzdWx0LnN2YWx1ZSk7XG5cbiAgICBjb25zdCByZXF1aXJlZEFjY2VzcyA9IChwYXRoLCBvYmosIGtleSwgYnVuZGxlKSA9PiBnZXQkZyhvYmosIGtleSkuZm9sZCgoKSA9PiBtaXNzaW5nUmVxdWlyZWQocGF0aCwga2V5LCBvYmopLCBidW5kbGUpO1xuICAgIGNvbnN0IGZhbGxiYWNrQWNjZXNzID0gKG9iaiwga2V5LCBmYWxsYmFjaywgYnVuZGxlKSA9PiB7XG4gICAgICBjb25zdCB2ID0gZ2V0JGcob2JqLCBrZXkpLmdldE9yVGh1bmsoKCkgPT4gZmFsbGJhY2sob2JqKSk7XG4gICAgICByZXR1cm4gYnVuZGxlKHYpO1xuICAgIH07XG4gICAgY29uc3Qgb3B0aW9uQWNjZXNzID0gKG9iaiwga2V5LCBidW5kbGUpID0+IGJ1bmRsZShnZXQkZyhvYmosIGtleSkpO1xuICAgIGNvbnN0IG9wdGlvbkRlZmF1bHRlZEFjY2VzcyA9IChvYmosIGtleSwgZmFsbGJhY2ssIGJ1bmRsZSkgPT4ge1xuICAgICAgY29uc3Qgb3B0ID0gZ2V0JGcob2JqLCBrZXkpLm1hcCh2YWwgPT4gdmFsID09PSB0cnVlID8gZmFsbGJhY2sob2JqKSA6IHZhbCk7XG4gICAgICByZXR1cm4gYnVuZGxlKG9wdCk7XG4gICAgfTtcbiAgICBjb25zdCBleHRyYWN0RmllbGQgPSAoZmllbGQsIHBhdGgsIG9iaiwga2V5LCBwcm9wKSA9PiB7XG4gICAgICBjb25zdCBidW5kbGUgPSBhdiA9PiBwcm9wLmV4dHJhY3QocGF0aC5jb25jYXQoW2tleV0pLCBhdik7XG4gICAgICBjb25zdCBidW5kbGVBc09wdGlvbiA9IG9wdFZhbHVlID0+IG9wdFZhbHVlLmZvbGQoKCkgPT4gU2ltcGxlUmVzdWx0LnN2YWx1ZShPcHRpb25hbC5ub25lKCkpLCBvdiA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHByb3AuZXh0cmFjdChwYXRoLmNvbmNhdChba2V5XSksIG92KTtcbiAgICAgICAgcmV0dXJuIFNpbXBsZVJlc3VsdC5tYXAocmVzdWx0LCBPcHRpb25hbC5zb21lKTtcbiAgICAgIH0pO1xuICAgICAgc3dpdGNoIChmaWVsZC50YWcpIHtcbiAgICAgIGNhc2UgJ3JlcXVpcmVkJzpcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVkQWNjZXNzKHBhdGgsIG9iaiwga2V5LCBidW5kbGUpO1xuICAgICAgY2FzZSAnZGVmYXVsdGVkVGh1bmsnOlxuICAgICAgICByZXR1cm4gZmFsbGJhY2tBY2Nlc3Mob2JqLCBrZXksIGZpZWxkLnByb2Nlc3MsIGJ1bmRsZSk7XG4gICAgICBjYXNlICdvcHRpb24nOlxuICAgICAgICByZXR1cm4gb3B0aW9uQWNjZXNzKG9iaiwga2V5LCBidW5kbGVBc09wdGlvbik7XG4gICAgICBjYXNlICdkZWZhdWx0ZWRPcHRpb25UaHVuayc6XG4gICAgICAgIHJldHVybiBvcHRpb25EZWZhdWx0ZWRBY2Nlc3Mob2JqLCBrZXksIGZpZWxkLnByb2Nlc3MsIGJ1bmRsZUFzT3B0aW9uKTtcbiAgICAgIGNhc2UgJ21lcmdlV2l0aFRodW5rJzoge1xuICAgICAgICAgIHJldHVybiBmYWxsYmFja0FjY2VzcyhvYmosIGtleSwgY29uc3RhbnQkMSh7fSksIHYgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVlcE1lcmdlKGZpZWxkLnByb2Nlc3Mob2JqKSwgdik7XG4gICAgICAgICAgICByZXR1cm4gYnVuZGxlKHJlc3VsdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGV4dHJhY3RGaWVsZHMgPSAocGF0aCwgb2JqLCBmaWVsZHMpID0+IHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB7fTtcbiAgICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgZm9sZChmaWVsZCwgKGtleSwgbmV3S2V5LCBwcmVzZW5jZSwgcHJvcCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3RGaWVsZChwcmVzZW5jZSwgcGF0aCwgb2JqLCBrZXksIHByb3ApO1xuICAgICAgICAgIFNpbXBsZVJlc3VsdC5mb2xkKHJlc3VsdCwgZXJyID0+IHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKC4uLmVycik7XG4gICAgICAgICAgfSwgcmVzID0+IHtcbiAgICAgICAgICAgIHN1Y2Nlc3NbbmV3S2V5XSA9IHJlcztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgKG5ld0tleSwgaW5zdGFudGlhdG9yKSA9PiB7XG4gICAgICAgICAgc3VjY2Vzc1tuZXdLZXldID0gaW5zdGFudGlhdG9yKG9iaik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVycm9ycy5sZW5ndGggPiAwID8gU2ltcGxlUmVzdWx0LnNlcnJvcihlcnJvcnMpIDogU2ltcGxlUmVzdWx0LnN2YWx1ZShzdWNjZXNzKTtcbiAgICB9O1xuICAgIGNvbnN0IHZhbHVlVGh1bmsgPSBnZXREZWxlZ2F0ZSA9PiB7XG4gICAgICBjb25zdCBleHRyYWN0ID0gKHBhdGgsIHZhbCkgPT4gZ2V0RGVsZWdhdGUoKS5leHRyYWN0KHBhdGgsIHZhbCk7XG4gICAgICBjb25zdCB0b1N0cmluZyA9ICgpID0+IGdldERlbGVnYXRlKCkudG9TdHJpbmcoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4dHJhY3QsXG4gICAgICAgIHRvU3RyaW5nXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZ2V0U2V0S2V5cyA9IG9iaiA9PiBrZXlzKGZpbHRlciQxKG9iaiwgaXNOb25OdWxsYWJsZSkpO1xuICAgIGNvbnN0IG9iak9mT25seSA9IGZpZWxkcyA9PiB7XG4gICAgICBjb25zdCBkZWxlZ2F0ZSA9IG9iak9mKGZpZWxkcyk7XG4gICAgICBjb25zdCBmaWVsZE5hbWVzID0gZm9sZHIoZmllbGRzLCAoYWNjLCB2YWx1ZSkgPT4ge1xuICAgICAgICByZXR1cm4gZm9sZCh2YWx1ZSwga2V5ID0+IGRlZXBNZXJnZShhY2MsIHsgW2tleV06IHRydWUgfSksIGNvbnN0YW50JDEoYWNjKSk7XG4gICAgICB9LCB7fSk7XG4gICAgICBjb25zdCBleHRyYWN0ID0gKHBhdGgsIG8pID0+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGlzQm9vbGVhbihvKSA/IFtdIDogZ2V0U2V0S2V5cyhvKTtcbiAgICAgICAgY29uc3QgZXh0cmEgPSBmaWx0ZXIkMihrZXlzLCBrID0+ICFoYXNOb25OdWxsYWJsZUtleShmaWVsZE5hbWVzLCBrKSk7XG4gICAgICAgIHJldHVybiBleHRyYS5sZW5ndGggPT09IDAgPyBkZWxlZ2F0ZS5leHRyYWN0KHBhdGgsIG8pIDogdW5zdXBwb3J0ZWRGaWVsZHMocGF0aCwgZXh0cmEpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4dHJhY3QsXG4gICAgICAgIHRvU3RyaW5nOiBkZWxlZ2F0ZS50b1N0cmluZ1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG9iak9mID0gdmFsdWVzID0+IHtcbiAgICAgIGNvbnN0IGV4dHJhY3QgPSAocGF0aCwgbykgPT4gZXh0cmFjdEZpZWxkcyhwYXRoLCBvLCB2YWx1ZXMpO1xuICAgICAgY29uc3QgdG9TdHJpbmcgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkU3RyaW5ncyA9IG1hcCQyKHZhbHVlcywgdmFsdWUgPT4gZm9sZCh2YWx1ZSwgKGtleSwgX29rZXksIF9wcmVzZW5jZSwgcHJvcCkgPT4ga2V5ICsgJyAtPiAnICsgcHJvcC50b1N0cmluZygpLCAobmV3S2V5LCBfaW5zdGFudGlhdG9yKSA9PiAnc3RhdGUoJyArIG5ld0tleSArICcpJykpO1xuICAgICAgICByZXR1cm4gJ29iantcXG4nICsgZmllbGRTdHJpbmdzLmpvaW4oJ1xcbicpICsgJ30nO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4dHJhY3QsXG4gICAgICAgIHRvU3RyaW5nXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgYXJyT2YgPSBwcm9wID0+IHtcbiAgICAgIGNvbnN0IGV4dHJhY3QgPSAocGF0aCwgYXJyYXkpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IG1hcCQyKGFycmF5LCAoYSwgaSkgPT4gcHJvcC5leHRyYWN0KHBhdGguY29uY2F0KFsnWycgKyBpICsgJ10nXSksIGEpKTtcbiAgICAgICAgcmV0dXJuIFJlc3VsdENvbWJpbmUuY29uc29saWRhdGVBcnIocmVzdWx0cyk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdG9TdHJpbmcgPSAoKSA9PiAnYXJyYXkoJyArIHByb3AudG9TdHJpbmcoKSArICcpJztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4dHJhY3QsXG4gICAgICAgIHRvU3RyaW5nXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3Qgb25lT2YgPSAocHJvcHMsIHJhd0YpID0+IHtcbiAgICAgIGNvbnN0IGYgPSByYXdGICE9PSB1bmRlZmluZWQgPyByYXdGIDogaWRlbnRpdHk7XG4gICAgICBjb25zdCBleHRyYWN0ID0gKHBhdGgsIHZhbCkgPT4ge1xuICAgICAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BzKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gcHJvcC5leHRyYWN0KHBhdGgsIHZhbCk7XG4gICAgICAgICAgaWYgKHJlcy5zdHlwZSA9PT0gU2ltcGxlUmVzdWx0VHlwZS5WYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3R5cGU6IFNpbXBsZVJlc3VsdFR5cGUuVmFsdWUsXG4gICAgICAgICAgICAgIHN2YWx1ZTogZihyZXMuc3ZhbHVlKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3JzLnB1c2gocmVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUmVzdWx0Q29tYmluZS5jb25zb2xpZGF0ZUFycihlcnJvcnMpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHRvU3RyaW5nID0gKCkgPT4gJ29uZU9mKCcgKyBtYXAkMihwcm9wcywgcHJvcCA9PiBwcm9wLnRvU3RyaW5nKCkpLmpvaW4oJywgJykgKyAnKSc7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBleHRyYWN0LFxuICAgICAgICB0b1N0cmluZ1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHNldE9mJDEgPSAodmFsaWRhdG9yLCBwcm9wKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZUtleXMgPSAocGF0aCwga2V5cykgPT4gYXJyT2YodmFsdWUkMyh2YWxpZGF0b3IpKS5leHRyYWN0KHBhdGgsIGtleXMpO1xuICAgICAgY29uc3QgZXh0cmFjdCA9IChwYXRoLCBvKSA9PiB7XG4gICAgICAgIGNvbnN0IGtleXMkMSA9IGtleXMobyk7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZEtleXMgPSB2YWxpZGF0ZUtleXMocGF0aCwga2V5cyQxKTtcbiAgICAgICAgcmV0dXJuIFNpbXBsZVJlc3VsdC5iaW5kKHZhbGlkYXRlZEtleXMsIHZhbGlkS2V5cyA9PiB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hID0gbWFwJDIodmFsaWRLZXlzLCB2ayA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZmllbGQkMih2aywgdmssIHJlcXVpcmVkJDIoKSwgcHJvcCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIG9iak9mKHNjaGVtYSkuZXh0cmFjdChwYXRoLCBvKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdG9TdHJpbmcgPSAoKSA9PiAnc2V0T2YoJyArIHByb3AudG9TdHJpbmcoKSArICcpJztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4dHJhY3QsXG4gICAgICAgIHRvU3RyaW5nXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgdGh1bmsgPSAoX2Rlc2MsIHByb2Nlc3NvcikgPT4ge1xuICAgICAgY29uc3QgZ2V0UCA9IGNhY2hlZChwcm9jZXNzb3IpO1xuICAgICAgY29uc3QgZXh0cmFjdCA9IChwYXRoLCB2YWwpID0+IGdldFAoKS5leHRyYWN0KHBhdGgsIHZhbCk7XG4gICAgICBjb25zdCB0b1N0cmluZyA9ICgpID0+IGdldFAoKS50b1N0cmluZygpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXh0cmFjdCxcbiAgICAgICAgdG9TdHJpbmdcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBhcnJPZk9iaiA9IGNvbXBvc2UoYXJyT2YsIG9iak9mKTtcblxuICAgIGNvbnN0IGFueVZhbHVlID0gY29uc3RhbnQkMShhbnlWYWx1ZSQxKTtcbiAgICBjb25zdCB0eXBlZFZhbHVlID0gKHZhbGlkYXRvciwgZXhwZWN0ZWRUeXBlKSA9PiB2YWx1ZSQzKGEgPT4ge1xuICAgICAgY29uc3QgYWN0dWFsVHlwZSA9IHR5cGVvZiBhO1xuICAgICAgcmV0dXJuIHZhbGlkYXRvcihhKSA/IFNpbXBsZVJlc3VsdC5zdmFsdWUoYSkgOiBTaW1wbGVSZXN1bHQuc2Vycm9yKGBFeHBlY3RlZCB0eXBlOiAkeyBleHBlY3RlZFR5cGUgfSBidXQgZ290OiAkeyBhY3R1YWxUeXBlIH1gKTtcbiAgICB9KTtcbiAgICBjb25zdCBudW1iZXIgPSB0eXBlZFZhbHVlKGlzTnVtYmVyLCAnbnVtYmVyJyk7XG4gICAgY29uc3Qgc3RyaW5nID0gdHlwZWRWYWx1ZShpc1N0cmluZywgJ3N0cmluZycpO1xuICAgIGNvbnN0IGJvb2xlYW4gPSB0eXBlZFZhbHVlKGlzQm9vbGVhbiwgJ2Jvb2xlYW4nKTtcbiAgICBjb25zdCBmdW5jdGlvblByb2Nlc3NvciA9IHR5cGVkVmFsdWUoaXNGdW5jdGlvbiwgJ2Z1bmN0aW9uJyk7XG4gICAgY29uc3QgaXNQb3N0TWVzc2FnZWFibGUgPSB2YWwgPT4ge1xuICAgICAgaWYgKE9iamVjdCh2YWwpICE9PSB2YWwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHt9LnRvU3RyaW5nLmNhbGwodmFsKS5zbGljZSg4LCAtMSkpIHtcbiAgICAgIGNhc2UgJ0Jvb2xlYW4nOlxuICAgICAgY2FzZSAnTnVtYmVyJzpcbiAgICAgIGNhc2UgJ1N0cmluZyc6XG4gICAgICBjYXNlICdEYXRlJzpcbiAgICAgIGNhc2UgJ1JlZ0V4cCc6XG4gICAgICBjYXNlICdCbG9iJzpcbiAgICAgIGNhc2UgJ0ZpbGVMaXN0JzpcbiAgICAgIGNhc2UgJ0ltYWdlRGF0YSc6XG4gICAgICBjYXNlICdJbWFnZUJpdG1hcCc6XG4gICAgICBjYXNlICdBcnJheUJ1ZmZlcic6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnQXJyYXknOlxuICAgICAgY2FzZSAnT2JqZWN0JzpcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbCkuZXZlcnkocHJvcCA9PiBpc1Bvc3RNZXNzYWdlYWJsZSh2YWxbcHJvcF0pKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHBvc3RNZXNzYWdlYWJsZSA9IHZhbHVlJDMoYSA9PiB7XG4gICAgICBpZiAoaXNQb3N0TWVzc2FnZWFibGUoYSkpIHtcbiAgICAgICAgcmV0dXJuIFNpbXBsZVJlc3VsdC5zdmFsdWUoYSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gU2ltcGxlUmVzdWx0LnNlcnJvcignRXhwZWN0ZWQgdmFsdWUgdG8gYmUgYWNjZXB0YWJsZSBmb3Igc2VuZGluZyB2aWEgcG9zdE1lc3NhZ2UnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGNob29zZUZyb20gPSAocGF0aCwgaW5wdXQsIGJyYW5jaGVzLCBjaCkgPT4ge1xuICAgICAgY29uc3QgZmllbGRzID0gZ2V0JGcoYnJhbmNoZXMsIGNoKTtcbiAgICAgIHJldHVybiBmaWVsZHMuZm9sZCgoKSA9PiBtaXNzaW5nQnJhbmNoKHBhdGgsIGJyYW5jaGVzLCBjaCksIHZwID0+IHZwLmV4dHJhY3QocGF0aC5jb25jYXQoWydicmFuY2g6ICcgKyBjaF0pLCBpbnB1dCkpO1xuICAgIH07XG4gICAgY29uc3QgY2hvb3NlJDIgPSAoa2V5LCBicmFuY2hlcykgPT4ge1xuICAgICAgY29uc3QgZXh0cmFjdCA9IChwYXRoLCBpbnB1dCkgPT4ge1xuICAgICAgICBjb25zdCBjaG9pY2UgPSBnZXQkZyhpbnB1dCwga2V5KTtcbiAgICAgICAgcmV0dXJuIGNob2ljZS5mb2xkKCgpID0+IG1pc3NpbmdLZXkocGF0aCwga2V5KSwgY2hvc2VuID0+IGNob29zZUZyb20ocGF0aCwgaW5wdXQsIGJyYW5jaGVzLCBjaG9zZW4pKTtcbiAgICAgIH07XG4gICAgICBjb25zdCB0b1N0cmluZyA9ICgpID0+ICdjaG9vc2VPbignICsga2V5ICsgJykuIFBvc3NpYmxlIHZhbHVlczogJyArIGtleXMoYnJhbmNoZXMpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXh0cmFjdCxcbiAgICAgICAgdG9TdHJpbmdcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGFyck9mVmFsID0gKCkgPT4gYXJyT2YoYW55VmFsdWUkMSk7XG4gICAgY29uc3QgdmFsdWVPZiA9IHZhbGlkYXRvciA9PiB2YWx1ZSQzKHYgPT4gdmFsaWRhdG9yKHYpLmZvbGQoU2ltcGxlUmVzdWx0LnNlcnJvciwgU2ltcGxlUmVzdWx0LnN2YWx1ZSkpO1xuICAgIGNvbnN0IHNldE9mID0gKHZhbGlkYXRvciwgcHJvcCkgPT4gc2V0T2YkMSh2ID0+IFNpbXBsZVJlc3VsdC5mcm9tUmVzdWx0KHZhbGlkYXRvcih2KSksIHByb3ApO1xuICAgIGNvbnN0IGV4dHJhY3RWYWx1ZSA9IChsYWJlbCwgcHJvcCwgb2JqKSA9PiB7XG4gICAgICBjb25zdCByZXMgPSBwcm9wLmV4dHJhY3QoW2xhYmVsXSwgb2JqKTtcbiAgICAgIHJldHVybiBTaW1wbGVSZXN1bHQubWFwRXJyb3IocmVzLCBlcnJzID0+ICh7XG4gICAgICAgIGlucHV0OiBvYmosXG4gICAgICAgIGVycm9yczogZXJyc1xuICAgICAgfSkpO1xuICAgIH07XG4gICAgY29uc3QgYXNSYXcgPSAobGFiZWwsIHByb3AsIG9iaikgPT4gU2ltcGxlUmVzdWx0LnRvUmVzdWx0KGV4dHJhY3RWYWx1ZShsYWJlbCwgcHJvcCwgb2JqKSk7XG4gICAgY29uc3QgZ2V0T3JEaWUgPSBleHRyYWN0aW9uID0+IHtcbiAgICAgIHJldHVybiBleHRyYWN0aW9uLmZvbGQoZXJySW5mbyA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihmb3JtYXRFcnJvcihlcnJJbmZvKSk7XG4gICAgICB9LCBpZGVudGl0eSk7XG4gICAgfTtcbiAgICBjb25zdCBhc1Jhd09yRGllJDEgPSAobGFiZWwsIHByb3AsIG9iaikgPT4gZ2V0T3JEaWUoYXNSYXcobGFiZWwsIHByb3AsIG9iaikpO1xuICAgIGNvbnN0IGZvcm1hdEVycm9yID0gZXJySW5mbyA9PiB7XG4gICAgICByZXR1cm4gJ0Vycm9yczogXFxuJyArIGZvcm1hdEVycm9ycyhlcnJJbmZvLmVycm9ycykuam9pbignXFxuJykgKyAnXFxuXFxuSW5wdXQgb2JqZWN0OiAnICsgZm9ybWF0T2JqKGVyckluZm8uaW5wdXQpO1xuICAgIH07XG4gICAgY29uc3QgY2hvb3NlJDEgPSAoa2V5LCBicmFuY2hlcykgPT4gY2hvb3NlJDIoa2V5LCBtYXAkMShicmFuY2hlcywgb2JqT2YpKTtcbiAgICBjb25zdCB0aHVua09mID0gKGRlc2MsIHNjaGVtYSkgPT4gdGh1bmsoZGVzYywgc2NoZW1hKTtcblxuICAgIGNvbnN0IGZpZWxkJDEgPSBmaWVsZCQyO1xuICAgIGNvbnN0IGN1c3RvbUZpZWxkID0gY3VzdG9tRmllbGQkMTtcbiAgICBjb25zdCB2YWxpZGF0ZUVudW0gPSB2YWx1ZXMgPT4gdmFsdWVPZih2YWx1ZSA9PiBjb250YWlucyQyKHZhbHVlcywgdmFsdWUpID8gUmVzdWx0LnZhbHVlKHZhbHVlKSA6IFJlc3VsdC5lcnJvcihgVW5zdXBwb3J0ZWQgdmFsdWU6IFwiJHsgdmFsdWUgfVwiLCBjaG9vc2Ugb25lIG9mIFwiJHsgdmFsdWVzLmpvaW4oJywgJykgfVwiLmApKTtcbiAgICBjb25zdCByZXF1aXJlZCQxID0ga2V5ID0+IGZpZWxkJDEoa2V5LCBrZXksIHJlcXVpcmVkJDIoKSwgYW55VmFsdWUoKSk7XG4gICAgY29uc3QgcmVxdWlyZWRPZiA9IChrZXksIHNjaGVtYSkgPT4gZmllbGQkMShrZXksIGtleSwgcmVxdWlyZWQkMigpLCBzY2hlbWEpO1xuICAgIGNvbnN0IHJlcXVpcmVkTnVtYmVyID0ga2V5ID0+IHJlcXVpcmVkT2Yoa2V5LCBudW1iZXIpO1xuICAgIGNvbnN0IHJlcXVpcmVkU3RyaW5nID0ga2V5ID0+IHJlcXVpcmVkT2Yoa2V5LCBzdHJpbmcpO1xuICAgIGNvbnN0IHJlcXVpcmVkU3RyaW5nRW51bSA9IChrZXksIHZhbHVlcykgPT4gZmllbGQkMShrZXksIGtleSwgcmVxdWlyZWQkMigpLCB2YWxpZGF0ZUVudW0odmFsdWVzKSk7XG4gICAgY29uc3QgcmVxdWlyZWRCb29sZWFuID0ga2V5ID0+IHJlcXVpcmVkT2Yoa2V5LCBib29sZWFuKTtcbiAgICBjb25zdCByZXF1aXJlZEZ1bmN0aW9uID0ga2V5ID0+IHJlcXVpcmVkT2Yoa2V5LCBmdW5jdGlvblByb2Nlc3Nvcik7XG4gICAgY29uc3QgZm9yYmlkID0gKGtleSwgbWVzc2FnZSkgPT4gZmllbGQkMShrZXksIGtleSwgYXNPcHRpb24oKSwgdmFsdWUkMyhfdiA9PiBTaW1wbGVSZXN1bHQuc2Vycm9yKCdUaGUgZmllbGQ6ICcgKyBrZXkgKyAnIGlzIGZvcmJpZGRlbi4gJyArIG1lc3NhZ2UpKSk7XG4gICAgY29uc3QgcmVxdWlyZWRPYmpPZiA9IChrZXksIG9ialNjaGVtYSkgPT4gZmllbGQkMShrZXksIGtleSwgcmVxdWlyZWQkMigpLCBvYmpPZihvYmpTY2hlbWEpKTtcbiAgICBjb25zdCByZXF1aXJlZEFycmF5T2ZPYmogPSAoa2V5LCBvYmpGaWVsZHMpID0+IGZpZWxkJDEoa2V5LCBrZXksIHJlcXVpcmVkJDIoKSwgYXJyT2ZPYmoob2JqRmllbGRzKSk7XG4gICAgY29uc3QgcmVxdWlyZWRBcnJheU9mID0gKGtleSwgc2NoZW1hKSA9PiBmaWVsZCQxKGtleSwga2V5LCByZXF1aXJlZCQyKCksIGFyck9mKHNjaGVtYSkpO1xuICAgIGNvbnN0IG9wdGlvbiQzID0ga2V5ID0+IGZpZWxkJDEoa2V5LCBrZXksIGFzT3B0aW9uKCksIGFueVZhbHVlKCkpO1xuICAgIGNvbnN0IG9wdGlvbk9mID0gKGtleSwgc2NoZW1hKSA9PiBmaWVsZCQxKGtleSwga2V5LCBhc09wdGlvbigpLCBzY2hlbWEpO1xuICAgIGNvbnN0IG9wdGlvbk51bWJlciA9IGtleSA9PiBvcHRpb25PZihrZXksIG51bWJlcik7XG4gICAgY29uc3Qgb3B0aW9uU3RyaW5nID0ga2V5ID0+IG9wdGlvbk9mKGtleSwgc3RyaW5nKTtcbiAgICBjb25zdCBvcHRpb25TdHJpbmdFbnVtID0gKGtleSwgdmFsdWVzKSA9PiBvcHRpb25PZihrZXksIHZhbGlkYXRlRW51bSh2YWx1ZXMpKTtcbiAgICBjb25zdCBvcHRpb25GdW5jdGlvbiA9IGtleSA9PiBvcHRpb25PZihrZXksIGZ1bmN0aW9uUHJvY2Vzc29yKTtcbiAgICBjb25zdCBvcHRpb25BcnJheU9mID0gKGtleSwgc2NoZW1hKSA9PiBvcHRpb25PZihrZXksIGFyck9mKHNjaGVtYSkpO1xuICAgIGNvbnN0IG9wdGlvbk9iak9mID0gKGtleSwgb2JqU2NoZW1hKSA9PiBvcHRpb25PZihrZXksIG9iak9mKG9ialNjaGVtYSkpO1xuICAgIGNvbnN0IG9wdGlvbk9iak9mT25seSA9IChrZXksIG9ialNjaGVtYSkgPT4gb3B0aW9uT2Yoa2V5LCBvYmpPZk9ubHkob2JqU2NoZW1hKSk7XG4gICAgY29uc3QgZGVmYXVsdGVkID0gKGtleSwgZmFsbGJhY2spID0+IGZpZWxkJDEoa2V5LCBrZXksIGRlZmF1bHRlZCQxKGZhbGxiYWNrKSwgYW55VmFsdWUoKSk7XG4gICAgY29uc3QgZGVmYXVsdGVkT2YgPSAoa2V5LCBmYWxsYmFjaywgc2NoZW1hKSA9PiBmaWVsZCQxKGtleSwga2V5LCBkZWZhdWx0ZWQkMShmYWxsYmFjayksIHNjaGVtYSk7XG4gICAgY29uc3QgZGVmYXVsdGVkTnVtYmVyID0gKGtleSwgZmFsbGJhY2spID0+IGRlZmF1bHRlZE9mKGtleSwgZmFsbGJhY2ssIG51bWJlcik7XG4gICAgY29uc3QgZGVmYXVsdGVkU3RyaW5nID0gKGtleSwgZmFsbGJhY2spID0+IGRlZmF1bHRlZE9mKGtleSwgZmFsbGJhY2ssIHN0cmluZyk7XG4gICAgY29uc3QgZGVmYXVsdGVkU3RyaW5nRW51bSA9IChrZXksIGZhbGxiYWNrLCB2YWx1ZXMpID0+IGRlZmF1bHRlZE9mKGtleSwgZmFsbGJhY2ssIHZhbGlkYXRlRW51bSh2YWx1ZXMpKTtcbiAgICBjb25zdCBkZWZhdWx0ZWRCb29sZWFuID0gKGtleSwgZmFsbGJhY2spID0+IGRlZmF1bHRlZE9mKGtleSwgZmFsbGJhY2ssIGJvb2xlYW4pO1xuICAgIGNvbnN0IGRlZmF1bHRlZEZ1bmN0aW9uID0gKGtleSwgZmFsbGJhY2spID0+IGRlZmF1bHRlZE9mKGtleSwgZmFsbGJhY2ssIGZ1bmN0aW9uUHJvY2Vzc29yKTtcbiAgICBjb25zdCBkZWZhdWx0ZWRQb3N0TXNnID0gKGtleSwgZmFsbGJhY2spID0+IGRlZmF1bHRlZE9mKGtleSwgZmFsbGJhY2ssIHBvc3RNZXNzYWdlYWJsZSk7XG4gICAgY29uc3QgZGVmYXVsdGVkQXJyYXlPZiA9IChrZXksIGZhbGxiYWNrLCBzY2hlbWEpID0+IGRlZmF1bHRlZE9mKGtleSwgZmFsbGJhY2ssIGFyck9mKHNjaGVtYSkpO1xuICAgIGNvbnN0IGRlZmF1bHRlZE9iak9mID0gKGtleSwgZmFsbGJhY2ssIG9ialNjaGVtYSkgPT4gZGVmYXVsdGVkT2Yoa2V5LCBmYWxsYmFjaywgb2JqT2Yob2JqU2NoZW1hKSk7XG5cbiAgICBjb25zdCBDZWxsID0gaW5pdGlhbCA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBpbml0aWFsO1xuICAgICAgY29uc3QgZ2V0ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0ID0gdiA9PiB7XG4gICAgICAgIHZhbHVlID0gdjtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBnZXQsXG4gICAgICAgIHNldFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2VuZXJhdGUkNyA9IGNhc2VzID0+IHtcbiAgICAgIGlmICghaXNBcnJheShjYXNlcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYXNlcyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICB9XG4gICAgICBpZiAoY2FzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgY2FzZScpO1xuICAgICAgfVxuICAgICAgY29uc3QgY29uc3RydWN0b3JzID0gW107XG4gICAgICBjb25zdCBhZHQgPSB7fTtcbiAgICAgIGVhY2gkMShjYXNlcywgKGFjYXNlLCBjb3VudCkgPT4ge1xuICAgICAgICBjb25zdCBrZXlzJDEgPSBrZXlzKGFjYXNlKTtcbiAgICAgICAgaWYgKGtleXMkMS5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ29uZSBhbmQgb25seSBvbmUgbmFtZSBwZXIgY2FzZScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXMkMVswXTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBhY2FzZVtrZXldO1xuICAgICAgICBpZiAoYWR0W2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZHVwbGljYXRlIGtleSBkZXRlY3RlZDonICsga2V5KTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdjYXRhJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IGhhdmUgYSBjYXNlIG5hbWVkIGNhdGEgKHNvcnJ5KScpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2FzZSBhcmd1bWVudHMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdG9ycy5wdXNoKGtleSk7XG4gICAgICAgIGFkdFtrZXldID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICBjb25zdCBhcmdMZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgICAgICAgICBpZiAoYXJnTGVuZ3RoICE9PSB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBjYXNlICcgKyBrZXkgKyAnLiBFeHBlY3RlZCAnICsgdmFsdWUubGVuZ3RoICsgJyAoJyArIHZhbHVlICsgJyksIGdvdCAnICsgYXJnTGVuZ3RoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgbWF0Y2ggPSBicmFuY2hlcyA9PiB7XG4gICAgICAgICAgICBjb25zdCBicmFuY2hLZXlzID0ga2V5cyhicmFuY2hlcyk7XG4gICAgICAgICAgICBpZiAoY29uc3RydWN0b3JzLmxlbmd0aCAhPT0gYnJhbmNoS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIHRvIG1hdGNoLiBFeHBlY3RlZDogJyArIGNvbnN0cnVjdG9ycy5qb2luKCcsJykgKyAnXFxuQWN0dWFsOiAnICsgYnJhbmNoS2V5cy5qb2luKCcsJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWxsUmVxZCA9IGZvcmFsbChjb25zdHJ1Y3RvcnMsIHJlcUtleSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBjb250YWlucyQyKGJyYW5jaEtleXMsIHJlcUtleSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghYWxsUmVxZCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhbGwgYnJhbmNoZXMgd2VyZSBzcGVjaWZpZWQgd2hlbiB1c2luZyBtYXRjaC4gU3BlY2lmaWVkOiAnICsgYnJhbmNoS2V5cy5qb2luKCcsICcpICsgJ1xcblJlcXVpcmVkOiAnICsgY29uc3RydWN0b3JzLmpvaW4oJywgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJyYW5jaGVzW2tleV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZm9sZDogKC4uLmZvbGRBcmdzKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChmb2xkQXJncy5sZW5ndGggIT09IGNhc2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBmb2xkLiBFeHBlY3RlZCAnICsgY2FzZXMubGVuZ3RoICsgJywgZ290ICcgKyBmb2xkQXJncy5sZW5ndGgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGZvbGRBcmdzW2NvdW50XTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXRjaCxcbiAgICAgICAgICAgIGxvZzogbGFiZWwgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsYWJlbCwge1xuICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9ycyxcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvcjoga2V5LFxuICAgICAgICAgICAgICAgIHBhcmFtczogYXJnc1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWR0O1xuICAgIH07XG4gICAgY29uc3QgQWR0ID0geyBnZW5lcmF0ZTogZ2VuZXJhdGUkNyB9O1xuXG4gICAgQWR0LmdlbmVyYXRlKFtcbiAgICAgIHtcbiAgICAgICAgYm90aEVycm9yczogW1xuICAgICAgICAgICdlcnJvcjEnLFxuICAgICAgICAgICdlcnJvcjInXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGZpcnN0RXJyb3I6IFtcbiAgICAgICAgICAnZXJyb3IxJyxcbiAgICAgICAgICAndmFsdWUyJ1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzZWNvbmRFcnJvcjogW1xuICAgICAgICAgICd2YWx1ZTEnLFxuICAgICAgICAgICdlcnJvcjInXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJvdGhWYWx1ZXM6IFtcbiAgICAgICAgICAndmFsdWUxJyxcbiAgICAgICAgICAndmFsdWUyJ1xuICAgICAgICBdXG4gICAgICB9XG4gICAgXSk7XG4gICAgY29uc3QgcGFydGl0aW9uJDEgPSByZXN1bHRzID0+IHtcbiAgICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgICAgY29uc3QgdmFsdWVzID0gW107XG4gICAgICBlYWNoJDEocmVzdWx0cywgcmVzdWx0ID0+IHtcbiAgICAgICAgcmVzdWx0LmZvbGQoZXJyID0+IHtcbiAgICAgICAgICBlcnJvcnMucHVzaChlcnIpO1xuICAgICAgICB9LCB2YWx1ZSA9PiB7XG4gICAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXJyb3JzLFxuICAgICAgICB2YWx1ZXNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGV4Y2x1ZGUkMSA9IChvYmosIGZpZWxkcykgPT4ge1xuICAgICAgY29uc3QgciA9IHt9O1xuICAgICAgZWFjaChvYmosICh2LCBrKSA9PiB7XG4gICAgICAgIGlmICghY29udGFpbnMkMihmaWVsZHMsIGspKSB7XG4gICAgICAgICAgcltrXSA9IHY7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIGNvbnN0IHdyYXAkMiA9IChrZXksIHZhbHVlKSA9PiAoeyBba2V5XTogdmFsdWUgfSk7XG4gICAgY29uc3Qgd3JhcEFsbCQxID0ga2V5dmFsdWVzID0+IHtcbiAgICAgIGNvbnN0IHIgPSB7fTtcbiAgICAgIGVhY2gkMShrZXl2YWx1ZXMsIGt2ID0+IHtcbiAgICAgICAgcltrdi5rZXldID0ga3YudmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG5cbiAgICBjb25zdCBleGNsdWRlID0gKG9iaiwgZmllbGRzKSA9PiBleGNsdWRlJDEob2JqLCBmaWVsZHMpO1xuICAgIGNvbnN0IHdyYXAkMSA9IChrZXksIHZhbHVlKSA9PiB3cmFwJDIoa2V5LCB2YWx1ZSk7XG4gICAgY29uc3Qgd3JhcEFsbCA9IGtleXZhbHVlcyA9PiB3cmFwQWxsJDEoa2V5dmFsdWVzKTtcbiAgICBjb25zdCBtZXJnZVZhbHVlcyA9ICh2YWx1ZXMsIGJhc2UpID0+IHtcbiAgICAgIHJldHVybiB2YWx1ZXMubGVuZ3RoID09PSAwID8gUmVzdWx0LnZhbHVlKGJhc2UpIDogUmVzdWx0LnZhbHVlKGRlZXBNZXJnZShiYXNlLCBtZXJnZSQxLmFwcGx5KHVuZGVmaW5lZCwgdmFsdWVzKSkpO1xuICAgIH07XG4gICAgY29uc3QgbWVyZ2VFcnJvcnMgPSBlcnJvcnMgPT4gUmVzdWx0LmVycm9yKGZsYXR0ZW4oZXJyb3JzKSk7XG4gICAgY29uc3QgY29uc29saWRhdGUgPSAob2JqcywgYmFzZSkgPT4ge1xuICAgICAgY29uc3QgcGFydGl0aW9ucyA9IHBhcnRpdGlvbiQxKG9ianMpO1xuICAgICAgcmV0dXJuIHBhcnRpdGlvbnMuZXJyb3JzLmxlbmd0aCA+IDAgPyBtZXJnZUVycm9ycyhwYXJ0aXRpb25zLmVycm9ycykgOiBtZXJnZVZhbHVlcyhwYXJ0aXRpb25zLnZhbHVlcywgYmFzZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGVuc3VyZUlzUm9vdCA9IGlzUm9vdCA9PiBpc0Z1bmN0aW9uKGlzUm9vdCkgPyBpc1Jvb3QgOiBuZXZlcjtcbiAgICBjb25zdCBhbmNlc3RvciQyID0gKHNjb3BlLCB0cmFuc2Zvcm0sIGlzUm9vdCkgPT4ge1xuICAgICAgbGV0IGVsZW1lbnQgPSBzY29wZS5kb207XG4gICAgICBjb25zdCBzdG9wID0gZW5zdXJlSXNSb290KGlzUm9vdCk7XG4gICAgICB3aGlsZSAoZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gICAgICAgIGNvbnN0IGVsID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkID0gdHJhbnNmb3JtKGVsKTtcbiAgICAgICAgaWYgKHRyYW5zZm9ybWVkLmlzU29tZSgpKSB7XG4gICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkO1xuICAgICAgICB9IGVsc2UgaWYgKHN0b3AoZWwpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBjbG9zZXN0JDQgPSAoc2NvcGUsIHRyYW5zZm9ybSwgaXNSb290KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdHJhbnNmb3JtKHNjb3BlKTtcbiAgICAgIGNvbnN0IHN0b3AgPSBlbnN1cmVJc1Jvb3QoaXNSb290KTtcbiAgICAgIHJldHVybiBjdXJyZW50Lm9yVGh1bmsoKCkgPT4gc3RvcChzY29wZSkgPyBPcHRpb25hbC5ub25lKCkgOiBhbmNlc3RvciQyKHNjb3BlLCB0cmFuc2Zvcm0sIHN0b3ApKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNTb3VyY2UgPSAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCkgPT4gZXEoY29tcG9uZW50LmVsZW1lbnQsIHNpbXVsYXRlZEV2ZW50LmV2ZW50LnRhcmdldCk7XG5cbiAgICBjb25zdCBkZWZhdWx0RXZlbnRIYW5kbGVyID0ge1xuICAgICAgY2FuOiBhbHdheXMsXG4gICAgICBhYm9ydDogbmV2ZXIsXG4gICAgICBydW46IG5vb3BcbiAgICB9O1xuICAgIGNvbnN0IG51JDkgPSBwYXJ0cyA9PiB7XG4gICAgICBpZiAoIWhhc05vbk51bGxhYmxlS2V5KHBhcnRzLCAnY2FuJykgJiYgIWhhc05vbk51bGxhYmxlS2V5KHBhcnRzLCAnYWJvcnQnKSAmJiAhaGFzTm9uTnVsbGFibGVLZXkocGFydHMsICdydW4nKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V2ZW50SGFuZGxlciBkZWZpbmVkIGJ5OiAnICsgSlNPTi5zdHJpbmdpZnkocGFydHMsIG51bGwsIDIpICsgJyBkb2VzIG5vdCBoYXZlIGNhbiwgYWJvcnQsIG9yIHJ1biEnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRlZmF1bHRFdmVudEhhbmRsZXIsXG4gICAgICAgIC4uLnBhcnRzXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgYWxsJDIgPSAoaGFuZGxlcnMsIGYpID0+ICguLi5hcmdzKSA9PiBmb2xkbChoYW5kbGVycywgKGFjYywgaGFuZGxlcikgPT4gYWNjICYmIGYoaGFuZGxlcikuYXBwbHkodW5kZWZpbmVkLCBhcmdzKSwgdHJ1ZSk7XG4gICAgY29uc3QgYW55ID0gKGhhbmRsZXJzLCBmKSA9PiAoLi4uYXJncykgPT4gZm9sZGwoaGFuZGxlcnMsIChhY2MsIGhhbmRsZXIpID0+IGFjYyB8fCBmKGhhbmRsZXIpLmFwcGx5KHVuZGVmaW5lZCwgYXJncyksIGZhbHNlKTtcbiAgICBjb25zdCByZWFkJDIgPSBoYW5kbGVyID0+IGlzRnVuY3Rpb24oaGFuZGxlcikgPyB7XG4gICAgICBjYW46IGFsd2F5cyxcbiAgICAgIGFib3J0OiBuZXZlcixcbiAgICAgIHJ1bjogaGFuZGxlclxuICAgIH0gOiBoYW5kbGVyO1xuICAgIGNvbnN0IGZ1c2UkMSA9IGhhbmRsZXJzID0+IHtcbiAgICAgIGNvbnN0IGNhbiA9IGFsbCQyKGhhbmRsZXJzLCBoYW5kbGVyID0+IGhhbmRsZXIuY2FuKTtcbiAgICAgIGNvbnN0IGFib3J0ID0gYW55KGhhbmRsZXJzLCBoYW5kbGVyID0+IGhhbmRsZXIuYWJvcnQpO1xuICAgICAgY29uc3QgcnVuID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgZWFjaCQxKGhhbmRsZXJzLCBoYW5kbGVyID0+IHtcbiAgICAgICAgICBoYW5kbGVyLnJ1bi5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjYW4sXG4gICAgICAgIGFib3J0LFxuICAgICAgICBydW5cbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnN0YW50ID0gY29uc3RhbnQkMTtcbiAgICBjb25zdCB0b3VjaHN0YXJ0ID0gY29uc3RhbnQoJ3RvdWNoc3RhcnQnKTtcbiAgICBjb25zdCB0b3VjaG1vdmUgPSBjb25zdGFudCgndG91Y2htb3ZlJyk7XG4gICAgY29uc3QgdG91Y2hlbmQgPSBjb25zdGFudCgndG91Y2hlbmQnKTtcbiAgICBjb25zdCB0b3VjaGNhbmNlbCA9IGNvbnN0YW50KCd0b3VjaGNhbmNlbCcpO1xuICAgIGNvbnN0IG1vdXNlZG93biA9IGNvbnN0YW50KCdtb3VzZWRvd24nKTtcbiAgICBjb25zdCBtb3VzZW1vdmUgPSBjb25zdGFudCgnbW91c2Vtb3ZlJyk7XG4gICAgY29uc3QgbW91c2VvdXQgPSBjb25zdGFudCgnbW91c2VvdXQnKTtcbiAgICBjb25zdCBtb3VzZXVwID0gY29uc3RhbnQoJ21vdXNldXAnKTtcbiAgICBjb25zdCBtb3VzZW92ZXIgPSBjb25zdGFudCgnbW91c2VvdmVyJyk7XG4gICAgY29uc3QgZm9jdXNpbiA9IGNvbnN0YW50KCdmb2N1c2luJyk7XG4gICAgY29uc3QgZm9jdXNvdXQgPSBjb25zdGFudCgnZm9jdXNvdXQnKTtcbiAgICBjb25zdCBrZXlkb3duID0gY29uc3RhbnQoJ2tleWRvd24nKTtcbiAgICBjb25zdCBrZXl1cCA9IGNvbnN0YW50KCdrZXl1cCcpO1xuICAgIGNvbnN0IGlucHV0ID0gY29uc3RhbnQoJ2lucHV0Jyk7XG4gICAgY29uc3QgY2hhbmdlID0gY29uc3RhbnQoJ2NoYW5nZScpO1xuICAgIGNvbnN0IGNsaWNrID0gY29uc3RhbnQoJ2NsaWNrJyk7XG4gICAgY29uc3QgdHJhbnNpdGlvbmNhbmNlbCA9IGNvbnN0YW50KCd0cmFuc2l0aW9uY2FuY2VsJyk7XG4gICAgY29uc3QgdHJhbnNpdGlvbmVuZCA9IGNvbnN0YW50KCd0cmFuc2l0aW9uZW5kJyk7XG4gICAgY29uc3QgdHJhbnNpdGlvbnN0YXJ0ID0gY29uc3RhbnQoJ3RyYW5zaXRpb25zdGFydCcpO1xuICAgIGNvbnN0IHNlbGVjdHN0YXJ0ID0gY29uc3RhbnQoJ3NlbGVjdHN0YXJ0Jyk7XG5cbiAgICBjb25zdCBwcmVmaXhOYW1lID0gbmFtZSA9PiBjb25zdGFudCQxKCdhbGxveS4nICsgbmFtZSk7XG4gICAgY29uc3QgYWxsb3kgPSB7IHRhcDogcHJlZml4TmFtZSgndGFwJykgfTtcbiAgICBjb25zdCBmb2N1cyQ0ID0gcHJlZml4TmFtZSgnZm9jdXMnKTtcbiAgICBjb25zdCBwb3N0Qmx1ciA9IHByZWZpeE5hbWUoJ2JsdXIucG9zdCcpO1xuICAgIGNvbnN0IHBvc3RQYXN0ZSA9IHByZWZpeE5hbWUoJ3Bhc3RlLnBvc3QnKTtcbiAgICBjb25zdCByZWNlaXZlID0gcHJlZml4TmFtZSgncmVjZWl2ZScpO1xuICAgIGNvbnN0IGV4ZWN1dGUkNSA9IHByZWZpeE5hbWUoJ2V4ZWN1dGUnKTtcbiAgICBjb25zdCBmb2N1c0l0ZW0gPSBwcmVmaXhOYW1lKCdmb2N1cy5pdGVtJyk7XG4gICAgY29uc3QgdGFwID0gYWxsb3kudGFwO1xuICAgIGNvbnN0IGxvbmdwcmVzcyA9IHByZWZpeE5hbWUoJ2xvbmdwcmVzcycpO1xuICAgIGNvbnN0IHNhbmRib3hDbG9zZSA9IHByZWZpeE5hbWUoJ3NhbmRib3guY2xvc2UnKTtcbiAgICBjb25zdCB0eXBlYWhlYWRDYW5jZWwgPSBwcmVmaXhOYW1lKCd0eXBlYWhlYWQuY2FuY2VsJyk7XG4gICAgY29uc3Qgc3lzdGVtSW5pdCA9IHByZWZpeE5hbWUoJ3N5c3RlbS5pbml0Jyk7XG4gICAgY29uc3QgZG9jdW1lbnRUb3VjaG1vdmUgPSBwcmVmaXhOYW1lKCdzeXN0ZW0udG91Y2htb3ZlJyk7XG4gICAgY29uc3QgZG9jdW1lbnRUb3VjaGVuZCA9IHByZWZpeE5hbWUoJ3N5c3RlbS50b3VjaGVuZCcpO1xuICAgIGNvbnN0IHdpbmRvd1Njcm9sbCA9IHByZWZpeE5hbWUoJ3N5c3RlbS5zY3JvbGwnKTtcbiAgICBjb25zdCB3aW5kb3dSZXNpemUgPSBwcmVmaXhOYW1lKCdzeXN0ZW0ucmVzaXplJyk7XG4gICAgY29uc3QgYXR0YWNoZWRUb0RvbSA9IHByZWZpeE5hbWUoJ3N5c3RlbS5hdHRhY2hlZCcpO1xuICAgIGNvbnN0IGRldGFjaGVkRnJvbURvbSA9IHByZWZpeE5hbWUoJ3N5c3RlbS5kZXRhY2hlZCcpO1xuICAgIGNvbnN0IGRpc21pc3NSZXF1ZXN0ZWQgPSBwcmVmaXhOYW1lKCdzeXN0ZW0uZGlzbWlzc1JlcXVlc3RlZCcpO1xuICAgIGNvbnN0IHJlcG9zaXRpb25SZXF1ZXN0ZWQgPSBwcmVmaXhOYW1lKCdzeXN0ZW0ucmVwb3NpdGlvblJlcXVlc3RlZCcpO1xuICAgIGNvbnN0IGZvY3VzU2hpZnRlZCA9IHByZWZpeE5hbWUoJ2ZvY3VzbWFuYWdlci5zaGlmdGVkJyk7XG4gICAgY29uc3Qgc2xvdFZpc2liaWxpdHkgPSBwcmVmaXhOYW1lKCdzbG90Y29udGFpbmVyLnZpc2liaWxpdHknKTtcbiAgICBjb25zdCBleHRlcm5hbEVsZW1lbnRTY3JvbGwgPSBwcmVmaXhOYW1lKCdzeXN0ZW0uZXh0ZXJuYWwuZWxlbWVudC5zY3JvbGwnKTtcbiAgICBjb25zdCBjaGFuZ2VUYWIgPSBwcmVmaXhOYW1lKCdjaGFuZ2UudGFiJyk7XG4gICAgY29uc3QgZGlzbWlzc1RhYiA9IHByZWZpeE5hbWUoJ2Rpc21pc3MudGFiJyk7XG4gICAgY29uc3QgaGlnaGxpZ2h0JDEgPSBwcmVmaXhOYW1lKCdoaWdobGlnaHQnKTtcbiAgICBjb25zdCBkZWhpZ2hsaWdodCQxID0gcHJlZml4TmFtZSgnZGVoaWdobGlnaHQnKTtcblxuICAgIGNvbnN0IGVtaXQgPSAoY29tcG9uZW50LCBldmVudCkgPT4ge1xuICAgICAgZGlzcGF0Y2hXaXRoKGNvbXBvbmVudCwgY29tcG9uZW50LmVsZW1lbnQsIGV2ZW50LCB7fSk7XG4gICAgfTtcbiAgICBjb25zdCBlbWl0V2l0aCA9IChjb21wb25lbnQsIGV2ZW50LCBwcm9wZXJ0aWVzKSA9PiB7XG4gICAgICBkaXNwYXRjaFdpdGgoY29tcG9uZW50LCBjb21wb25lbnQuZWxlbWVudCwgZXZlbnQsIHByb3BlcnRpZXMpO1xuICAgIH07XG4gICAgY29uc3QgZW1pdEV4ZWN1dGUgPSBjb21wb25lbnQgPT4ge1xuICAgICAgZW1pdChjb21wb25lbnQsIGV4ZWN1dGUkNSgpKTtcbiAgICB9O1xuICAgIGNvbnN0IGRpc3BhdGNoID0gKGNvbXBvbmVudCwgdGFyZ2V0LCBldmVudCkgPT4ge1xuICAgICAgZGlzcGF0Y2hXaXRoKGNvbXBvbmVudCwgdGFyZ2V0LCBldmVudCwge30pO1xuICAgIH07XG4gICAgY29uc3QgZGlzcGF0Y2hXaXRoID0gKGNvbXBvbmVudCwgdGFyZ2V0LCBldmVudCwgcHJvcGVydGllcykgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICAuLi5wcm9wZXJ0aWVzXG4gICAgICB9O1xuICAgICAgY29tcG9uZW50LmdldFN5c3RlbSgpLnRyaWdnZXJFdmVudChldmVudCwgdGFyZ2V0LCBkYXRhKTtcbiAgICB9O1xuICAgIGNvbnN0IHJldGFyZ2V0QW5kRGlzcGF0Y2hXaXRoID0gKGNvbXBvbmVudCwgdGFyZ2V0LCBldmVudE5hbWUsIHByb3BlcnRpZXMpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgIC4uLnByb3BlcnRpZXMsXG4gICAgICAgIHRhcmdldFxuICAgICAgfTtcbiAgICAgIGNvbXBvbmVudC5nZXRTeXN0ZW0oKS50cmlnZ2VyRXZlbnQoZXZlbnROYW1lLCB0YXJnZXQsIGRhdGEpO1xuICAgIH07XG4gICAgY29uc3QgZGlzcGF0Y2hFdmVudCA9IChjb21wb25lbnQsIHRhcmdldCwgZXZlbnQsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICBjb21wb25lbnQuZ2V0U3lzdGVtKCkudHJpZ2dlckV2ZW50KGV2ZW50LCB0YXJnZXQsIHNpbXVsYXRlZEV2ZW50LmV2ZW50KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGVyaXZlJDIgPSBjb25maWdzID0+IHdyYXBBbGwoY29uZmlncyk7XG4gICAgY29uc3QgYWJvcnQgPSAobmFtZSwgcHJlZGljYXRlKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IG5hbWUsXG4gICAgICAgIHZhbHVlOiBudSQ5KHsgYWJvcnQ6IHByZWRpY2F0ZSB9KVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNhbiA9IChuYW1lLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleTogbmFtZSxcbiAgICAgICAgdmFsdWU6IG51JDkoeyBjYW46IHByZWRpY2F0ZSB9KVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHByZXZlbnREZWZhdWx0ID0gbmFtZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IG5hbWUsXG4gICAgICAgIHZhbHVlOiBudSQ5KHtcbiAgICAgICAgICBydW46IChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICBzaW11bGF0ZWRFdmVudC5ldmVudC5wcmV2ZW50KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHJ1biQxID0gKG5hbWUsIGhhbmRsZXIpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleTogbmFtZSxcbiAgICAgICAgdmFsdWU6IG51JDkoeyBydW46IGhhbmRsZXIgfSlcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBydW5BY3Rpb25FeHRyYSA9IChuYW1lLCBhY3Rpb24sIGV4dHJhKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IG5hbWUsXG4gICAgICAgIHZhbHVlOiBudSQ5KHtcbiAgICAgICAgICBydW46IChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICBhY3Rpb24uYXBwbHkodW5kZWZpbmVkLCBbXG4gICAgICAgICAgICAgIGNvbXBvbmVudCxcbiAgICAgICAgICAgICAgc2ltdWxhdGVkRXZlbnRcbiAgICAgICAgICAgIF0uY29uY2F0KGV4dHJhKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHJ1bk9uTmFtZSA9IG5hbWUgPT4ge1xuICAgICAgcmV0dXJuIGhhbmRsZXIgPT4gcnVuJDEobmFtZSwgaGFuZGxlcik7XG4gICAgfTtcbiAgICBjb25zdCBydW5PblNvdXJjZU5hbWUgPSBuYW1lID0+IHtcbiAgICAgIHJldHVybiBoYW5kbGVyID0+ICh7XG4gICAgICAgIGtleTogbmFtZSxcbiAgICAgICAgdmFsdWU6IG51JDkoe1xuICAgICAgICAgIHJ1bjogKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChpc1NvdXJjZShjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50KSkge1xuICAgICAgICAgICAgICBoYW5kbGVyKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVkaXJlY3RUb1VpZCA9IChuYW1lLCB1aWQpID0+IHtcbiAgICAgIHJldHVybiBydW4kMShuYW1lLCAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICBjb21wb25lbnQuZ2V0U3lzdGVtKCkuZ2V0QnlVaWQodWlkKS5lYWNoKHJlZGlyZWN0ZWUgPT4ge1xuICAgICAgICAgIGRpc3BhdGNoRXZlbnQocmVkaXJlY3RlZSwgcmVkaXJlY3RlZS5lbGVtZW50LCBuYW1lLCBzaW11bGF0ZWRFdmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWRpcmVjdFRvUGFydCA9IChuYW1lLCBkZXRhaWwsIHBhcnROYW1lKSA9PiB7XG4gICAgICBjb25zdCB1aWQgPSBkZXRhaWwucGFydFVpZHNbcGFydE5hbWVdO1xuICAgICAgcmV0dXJuIHJlZGlyZWN0VG9VaWQobmFtZSwgdWlkKTtcbiAgICB9O1xuICAgIGNvbnN0IHJ1bldpdGhUYXJnZXQgPSAobmFtZSwgZikgPT4ge1xuICAgICAgcmV0dXJuIHJ1biQxKG5hbWUsIChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGV2ID0gc2ltdWxhdGVkRXZlbnQuZXZlbnQ7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGNvbXBvbmVudC5nZXRTeXN0ZW0oKS5nZXRCeURvbShldi50YXJnZXQpLmdldE9yVGh1bmsoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNsb3Nlc3QgPSBjbG9zZXN0JDQoZXYudGFyZ2V0LCBlbCA9PiBjb21wb25lbnQuZ2V0U3lzdGVtKCkuZ2V0QnlEb20oZWwpLnRvT3B0aW9uYWwoKSwgbmV2ZXIpO1xuICAgICAgICAgIHJldHVybiBjbG9zZXN0LmdldE9yKGNvbXBvbmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICBmKGNvbXBvbmVudCwgdGFyZ2V0LCBzaW11bGF0ZWRFdmVudCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGN1dHRlciA9IG5hbWUgPT4ge1xuICAgICAgcmV0dXJuIHJ1biQxKG5hbWUsIChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgIHNpbXVsYXRlZEV2ZW50LmN1dCgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzdG9wcGVyID0gbmFtZSA9PiB7XG4gICAgICByZXR1cm4gcnVuJDEobmFtZSwgKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgc2ltdWxhdGVkRXZlbnQuc3RvcCgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBydW5PblNvdXJjZSA9IChuYW1lLCBmKSA9PiB7XG4gICAgICByZXR1cm4gcnVuT25Tb3VyY2VOYW1lKG5hbWUpKGYpO1xuICAgIH07XG4gICAgY29uc3QgcnVuT25BdHRhY2hlZCA9IHJ1bk9uU291cmNlTmFtZShhdHRhY2hlZFRvRG9tKCkpO1xuICAgIGNvbnN0IHJ1bk9uRGV0YWNoZWQgPSBydW5PblNvdXJjZU5hbWUoZGV0YWNoZWRGcm9tRG9tKCkpO1xuICAgIGNvbnN0IHJ1bk9uSW5pdCA9IHJ1bk9uU291cmNlTmFtZShzeXN0ZW1Jbml0KCkpO1xuICAgIGNvbnN0IHJ1bk9uRXhlY3V0ZSQxID0gcnVuT25OYW1lKGV4ZWN1dGUkNSgpKTtcblxuICAgIGNvbnN0IGZyb21IdG1sJDEgPSAoaHRtbCwgc2NvcGUpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IHNjb3BlIHx8IGRvY3VtZW50O1xuICAgICAgY29uc3QgZGl2ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZGl2LmlubmVySFRNTCA9IGh0bWw7XG4gICAgICByZXR1cm4gY2hpbGRyZW4oU3VnYXJFbGVtZW50LmZyb21Eb20oZGl2KSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldCQ5ID0gZWxlbWVudCA9PiBlbGVtZW50LmRvbS5pbm5lckhUTUw7XG4gICAgY29uc3Qgc2V0JDYgPSAoZWxlbWVudCwgY29udGVudCkgPT4ge1xuICAgICAgY29uc3Qgb3duZXIgPSBvd25lciQ0KGVsZW1lbnQpO1xuICAgICAgY29uc3QgZG9jRG9tID0gb3duZXIuZG9tO1xuICAgICAgY29uc3QgZnJhZ21lbnQgPSBTdWdhckVsZW1lbnQuZnJvbURvbShkb2NEb20uY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRFbGVtZW50cyA9IGZyb21IdG1sJDEoY29udGVudCwgZG9jRG9tKTtcbiAgICAgIGFwcGVuZCQxKGZyYWdtZW50LCBjb250ZW50RWxlbWVudHMpO1xuICAgICAgZW1wdHkoZWxlbWVudCk7XG4gICAgICBhcHBlbmQkMihlbGVtZW50LCBmcmFnbWVudCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRPdXRlciA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gU3VnYXJFbGVtZW50LmZyb21UYWcoJ2RpdicpO1xuICAgICAgY29uc3QgY2xvbmUgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlbGVtZW50LmRvbS5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgYXBwZW5kJDIoY29udGFpbmVyLCBjbG9uZSk7XG4gICAgICByZXR1cm4gZ2V0JDkoY29udGFpbmVyKTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2xvbmUkMSA9IChvcmlnaW5hbCwgaXNEZWVwKSA9PiBTdWdhckVsZW1lbnQuZnJvbURvbShvcmlnaW5hbC5kb20uY2xvbmVOb2RlKGlzRGVlcCkpO1xuICAgIGNvbnN0IHNoYWxsb3cgPSBvcmlnaW5hbCA9PiBjbG9uZSQxKG9yaWdpbmFsLCBmYWxzZSk7XG5cbiAgICBjb25zdCBnZXRIdG1sID0gZWxlbWVudCA9PiB7XG4gICAgICBpZiAoaXNTaGFkb3dSb290KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiAnI3NoYWRvdy1yb290JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gc2hhbGxvdyhlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGdldE91dGVyKGNsb25lKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZWxlbWVudCA9IGVsZW0gPT4gZ2V0SHRtbChlbGVtKTtcblxuICAgIGNvbnN0IGlzUmVjdXJzaXZlID0gKGNvbXBvbmVudCwgb3JpZ2luYXRvciwgdGFyZ2V0KSA9PiBlcShvcmlnaW5hdG9yLCBjb21wb25lbnQuZWxlbWVudCkgJiYgIWVxKG9yaWdpbmF0b3IsIHRhcmdldCk7XG4gICAgY29uc3QgZXZlbnRzJGkgPSBkZXJpdmUkMihbY2FuKGZvY3VzJDQoKSwgKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBzaW11bGF0ZWRFdmVudC5ldmVudDtcbiAgICAgICAgY29uc3Qgb3JpZ2luYXRvciA9IGV2ZW50Lm9yaWdpbmF0b3I7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgaWYgKGlzUmVjdXJzaXZlKGNvbXBvbmVudCwgb3JpZ2luYXRvciwgdGFyZ2V0KSkge1xuICAgICAgICAgIGNvbnNvbGUud2Fybihmb2N1cyQ0KCkgKyAnIGRpZCBub3QgZ2V0IGludGVycHJldGVkIGJ5IHRoZSBkZXNpcmVkIHRhcmdldC4gJyArICdcXG5PcmlnaW5hdG9yOiAnICsgZWxlbWVudChvcmlnaW5hdG9yKSArICdcXG5UYXJnZXQ6ICcgKyBlbGVtZW50KHRhcmdldCkgKyAnXFxuQ2hlY2sgdGhlICcgKyBmb2N1cyQ0KCkgKyAnIGV2ZW50IGhhbmRsZXJzJyk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KV0pO1xuXG4gICAgdmFyIERlZmF1bHRFdmVudHMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgZXZlbnRzOiBldmVudHMkaVxuICAgIH0pO1xuXG4gICAgbGV0IHVuaXF1ZSA9IDA7XG4gICAgY29uc3QgZ2VuZXJhdGUkNiA9IHByZWZpeCA9PiB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IHRpbWUgPSBkYXRlLmdldFRpbWUoKTtcbiAgICAgIGNvbnN0IHJhbmRvbSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMDApO1xuICAgICAgdW5pcXVlKys7XG4gICAgICByZXR1cm4gcHJlZml4ICsgJ18nICsgcmFuZG9tICsgdW5pcXVlICsgU3RyaW5nKHRpbWUpO1xuICAgIH07XG5cbiAgICBjb25zdCBwcmVmaXgkMSA9IGNvbnN0YW50JDEoJ2FsbG95LWlkLScpO1xuICAgIGNvbnN0IGlkQXR0ciQxID0gY29uc3RhbnQkMSgnZGF0YS1hbGxveS1pZCcpO1xuXG4gICAgY29uc3QgcHJlZml4ID0gcHJlZml4JDEoKTtcbiAgICBjb25zdCBpZEF0dHIgPSBpZEF0dHIkMSgpO1xuICAgIGNvbnN0IHdyaXRlID0gKGxhYmVsLCBlbGVtKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IGdlbmVyYXRlJDYocHJlZml4ICsgbGFiZWwpO1xuICAgICAgd3JpdGVPbmx5KGVsZW0sIGlkKTtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9O1xuICAgIGNvbnN0IHdyaXRlT25seSA9IChlbGVtLCB1aWQpID0+IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtLmRvbSwgaWRBdHRyLCB7XG4gICAgICAgIHZhbHVlOiB1aWQsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlYWQkMSA9IGVsZW0gPT4ge1xuICAgICAgY29uc3QgaWQgPSBpc0VsZW1lbnQkMShlbGVtKSA/IGVsZW0uZG9tW2lkQXR0cl0gOiBudWxsO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oaWQpO1xuICAgIH07XG4gICAgY29uc3QgZ2VuZXJhdGUkNSA9IHByZWZpeCA9PiBnZW5lcmF0ZSQ2KHByZWZpeCk7XG5cbiAgICBjb25zdCBtYWtlJDggPSBpZGVudGl0eTtcblxuICAgIGNvbnN0IE5vQ29udGV4dEFwaSA9IGdldENvbXAgPT4ge1xuICAgICAgY29uc3QgZ2V0TWVzc2FnZSA9IGV2ZW50ID0+IGBUaGUgY29tcG9uZW50IG11c3QgYmUgaW4gYSBjb250ZXh0IHRvIGV4ZWN1dGU6ICR7IGV2ZW50IH1gICsgKGdldENvbXAgPyAnXFxuJyArIGVsZW1lbnQoZ2V0Q29tcCgpLmVsZW1lbnQpICsgJyBpcyBub3QgaW4gY29udGV4dC4nIDogJycpO1xuICAgICAgY29uc3QgZmFpbCA9IGV2ZW50ID0+ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGdldE1lc3NhZ2UoZXZlbnQpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCB3YXJuID0gZXZlbnQgPT4gKCkgPT4ge1xuICAgICAgICBjb25zb2xlLndhcm4oZ2V0TWVzc2FnZShldmVudCkpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlYnVnSW5mbzogY29uc3RhbnQkMSgnZmFrZScpLFxuICAgICAgICB0cmlnZ2VyRXZlbnQ6IHdhcm4oJ3RyaWdnZXJFdmVudCcpLFxuICAgICAgICB0cmlnZ2VyRm9jdXM6IHdhcm4oJ3RyaWdnZXJGb2N1cycpLFxuICAgICAgICB0cmlnZ2VyRXNjYXBlOiB3YXJuKCd0cmlnZ2VyRXNjYXBlJyksXG4gICAgICAgIGJyb2FkY2FzdDogd2FybignYnJvYWRjYXN0JyksXG4gICAgICAgIGJyb2FkY2FzdE9uOiB3YXJuKCdicm9hZGNhc3RPbicpLFxuICAgICAgICBicm9hZGNhc3RFdmVudDogd2FybignYnJvYWRjYXN0RXZlbnQnKSxcbiAgICAgICAgYnVpbGQ6IGZhaWwoJ2J1aWxkJyksXG4gICAgICAgIGJ1aWxkT3JQYXRjaDogZmFpbCgnYnVpbGRPclBhdGNoJyksXG4gICAgICAgIGFkZFRvV29ybGQ6IGZhaWwoJ2FkZFRvV29ybGQnKSxcbiAgICAgICAgcmVtb3ZlRnJvbVdvcmxkOiBmYWlsKCdyZW1vdmVGcm9tV29ybGQnKSxcbiAgICAgICAgYWRkVG9HdWk6IGZhaWwoJ2FkZFRvR3VpJyksXG4gICAgICAgIHJlbW92ZUZyb21HdWk6IGZhaWwoJ3JlbW92ZUZyb21HdWknKSxcbiAgICAgICAgZ2V0QnlVaWQ6IGZhaWwoJ2dldEJ5VWlkJyksXG4gICAgICAgIGdldEJ5RG9tOiBmYWlsKCdnZXRCeURvbScpLFxuICAgICAgICBpc0Nvbm5lY3RlZDogbmV2ZXJcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBzaW5nbGV0b24kMSA9IE5vQ29udGV4dEFwaSgpO1xuXG4gICAgY29uc3QgbWFya0FzQmVoYXZpb3VyQXBpID0gKGYsIGFwaU5hbWUsIGFwaUZ1bmN0aW9uKSA9PiB7XG4gICAgICBjb25zdCBkZWxlZ2F0ZSA9IGFwaUZ1bmN0aW9uLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBlbmRJbmRleCA9IGRlbGVnYXRlLmluZGV4T2YoJyknKSArIDE7XG4gICAgICBjb25zdCBvcGVuQnJhY2tldEluZGV4ID0gZGVsZWdhdGUuaW5kZXhPZignKCcpO1xuICAgICAgY29uc3QgcGFyYW1ldGVycyA9IGRlbGVnYXRlLnN1YnN0cmluZyhvcGVuQnJhY2tldEluZGV4ICsgMSwgZW5kSW5kZXggLSAxKS5zcGxpdCgvLFxccyovKTtcbiAgICAgIGYudG9GdW5jdGlvbkFubm90YXRpb24gPSAoKSA9PiAoe1xuICAgICAgICBuYW1lOiBhcGlOYW1lLFxuICAgICAgICBwYXJhbWV0ZXJzOiBjbGVhblBhcmFtZXRlcnMocGFyYW1ldGVycy5zbGljZSgwLCAxKS5jb25jYXQocGFyYW1ldGVycy5zbGljZSgzKSkpXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmO1xuICAgIH07XG4gICAgY29uc3QgY2xlYW5QYXJhbWV0ZXJzID0gcGFyYW1ldGVycyA9PiBtYXAkMihwYXJhbWV0ZXJzLCBwID0+IGVuZHNXaXRoKHAsICcvKicpID8gcC5zdWJzdHJpbmcoMCwgcC5sZW5ndGggLSAnLyonLmxlbmd0aCkgOiBwKTtcbiAgICBjb25zdCBtYXJrQXNFeHRyYUFwaSA9IChmLCBleHRyYU5hbWUpID0+IHtcbiAgICAgIGNvbnN0IGRlbGVnYXRlID0gZi50b1N0cmluZygpO1xuICAgICAgY29uc3QgZW5kSW5kZXggPSBkZWxlZ2F0ZS5pbmRleE9mKCcpJykgKyAxO1xuICAgICAgY29uc3Qgb3BlbkJyYWNrZXRJbmRleCA9IGRlbGVnYXRlLmluZGV4T2YoJygnKTtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBkZWxlZ2F0ZS5zdWJzdHJpbmcob3BlbkJyYWNrZXRJbmRleCArIDEsIGVuZEluZGV4IC0gMSkuc3BsaXQoLyxcXHMqLyk7XG4gICAgICBmLnRvRnVuY3Rpb25Bbm5vdGF0aW9uID0gKCkgPT4gKHtcbiAgICAgICAgbmFtZTogZXh0cmFOYW1lLFxuICAgICAgICBwYXJhbWV0ZXJzOiBjbGVhblBhcmFtZXRlcnMocGFyYW1ldGVycylcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGY7XG4gICAgfTtcbiAgICBjb25zdCBtYXJrQXNTa2V0Y2hBcGkgPSAoZiwgYXBpRnVuY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IGRlbGVnYXRlID0gYXBpRnVuY3Rpb24udG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IGVuZEluZGV4ID0gZGVsZWdhdGUuaW5kZXhPZignKScpICsgMTtcbiAgICAgIGNvbnN0IG9wZW5CcmFja2V0SW5kZXggPSBkZWxlZ2F0ZS5pbmRleE9mKCcoJyk7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJzID0gZGVsZWdhdGUuc3Vic3RyaW5nKG9wZW5CcmFja2V0SW5kZXggKyAxLCBlbmRJbmRleCAtIDEpLnNwbGl0KC8sXFxzKi8pO1xuICAgICAgZi50b0Z1bmN0aW9uQW5ub3RhdGlvbiA9ICgpID0+ICh7XG4gICAgICAgIG5hbWU6ICdPVkVSUklERScsXG4gICAgICAgIHBhcmFtZXRlcnM6IGNsZWFuUGFyYW1ldGVycyhwYXJhbWV0ZXJzLnNsaWNlKDEpKVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJlbWFkZVRhZyA9IGdlbmVyYXRlJDYoJ2FsbG95LXByZW1hZGUnKTtcbiAgICBjb25zdCBwcmVtYWRlJDEgPSBjb21wID0+IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb21wLmVsZW1lbnQuZG9tLCBwcmVtYWRlVGFnLCB7XG4gICAgICAgIHZhbHVlOiBjb21wLnVpZCxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHdyYXAkMShwcmVtYWRlVGFnLCBjb21wKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzUHJlbWFkZSA9IGVsZW1lbnQgPT4gaGFzJDIoZWxlbWVudC5kb20sIHByZW1hZGVUYWcpO1xuICAgIGNvbnN0IGdldFByZW1hZGUgPSBzcGVjID0+IGdldCRnKHNwZWMsIHByZW1hZGVUYWcpO1xuICAgIGNvbnN0IG1ha2VBcGkgPSBmID0+IG1hcmtBc1NrZXRjaEFwaSgoY29tcG9uZW50LCAuLi5yZXN0KSA9PiBmKGNvbXBvbmVudC5nZXRBcGlzKCksIGNvbXBvbmVudCwgLi4ucmVzdCksIGYpO1xuXG4gICAgY29uc3QgTm9TdGF0ZSA9IHsgaW5pdDogKCkgPT4gbnUkOCh7IHJlYWRTdGF0ZTogY29uc3RhbnQkMSgnTm8gU3RhdGUgcmVxdWlyZWQnKSB9KSB9O1xuICAgIGNvbnN0IG51JDggPSBzcGVjID0+IHNwZWM7XG5cbiAgICBjb25zdCBnZW5lcmF0ZUZyb20kMSA9IChzcGVjLCBhbGwpID0+IHtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IG1hcCQyKGFsbCwgYSA9PiBvcHRpb25PYmpPZihhLm5hbWUoKSwgW1xuICAgICAgICByZXF1aXJlZCQxKCdjb25maWcnKSxcbiAgICAgICAgZGVmYXVsdGVkKCdzdGF0ZScsIE5vU3RhdGUpXG4gICAgICBdKSk7XG4gICAgICBjb25zdCB2YWxpZGF0ZWQgPSBhc1JhdygnY29tcG9uZW50LmJlaGF2aW91cnMnLCBvYmpPZihzY2hlbWEpLCBzcGVjLmJlaGF2aW91cnMpLmZvbGQoZXJySW5mbyA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihmb3JtYXRFcnJvcihlcnJJbmZvKSArICdcXG5Db21wbGV0ZSBzcGVjOlxcbicgKyBKU09OLnN0cmluZ2lmeShzcGVjLCBudWxsLCAyKSk7XG4gICAgICB9LCBpZGVudGl0eSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaXN0OiBhbGwsXG4gICAgICAgIGRhdGE6IG1hcCQxKHZhbGlkYXRlZCwgb3B0QmxvYlRodW5rID0+IHtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSBvcHRCbG9iVGh1bmsubWFwKGJsb2IgPT4gKHtcbiAgICAgICAgICAgIGNvbmZpZzogYmxvYi5jb25maWcsXG4gICAgICAgICAgICBzdGF0ZTogYmxvYi5zdGF0ZS5pbml0KGJsb2IuY29uZmlnKVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICByZXR1cm4gY29uc3RhbnQkMShvdXRwdXQpO1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEJlaGF2aW91cnMkMyA9IGJEYXRhID0+IGJEYXRhLmxpc3Q7XG4gICAgY29uc3QgZ2V0RGF0YSQyID0gYkRhdGEgPT4gYkRhdGEuZGF0YTtcblxuICAgIGNvbnN0IGJ5SW5uZXJLZXkgPSAoZGF0YSwgdHVwbGUpID0+IHtcbiAgICAgIGNvbnN0IHIgPSB7fTtcbiAgICAgIGVhY2goZGF0YSwgKGRldGFpbCwga2V5KSA9PiB7XG4gICAgICAgIGVhY2goZGV0YWlsLCAodmFsdWUsIGluZGV4S2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgY2hhaW4gPSBnZXQkZyhyLCBpbmRleEtleSkuZ2V0T3IoW10pO1xuICAgICAgICAgIHJbaW5kZXhLZXldID0gY2hhaW4uY29uY2F0KFt0dXBsZShrZXksIHZhbHVlKV0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIGNvbnN0IG51JDcgPSBzID0+ICh7XG4gICAgICBjbGFzc2VzOiBpc1VuZGVmaW5lZChzLmNsYXNzZXMpID8gW10gOiBzLmNsYXNzZXMsXG4gICAgICBhdHRyaWJ1dGVzOiBpc1VuZGVmaW5lZChzLmF0dHJpYnV0ZXMpID8ge30gOiBzLmF0dHJpYnV0ZXMsXG4gICAgICBzdHlsZXM6IGlzVW5kZWZpbmVkKHMuc3R5bGVzKSA/IHt9IDogcy5zdHlsZXNcbiAgICB9KTtcbiAgICBjb25zdCBtZXJnZSA9IChkZWZuQSwgbW9kKSA9PiAoe1xuICAgICAgLi4uZGVmbkEsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIC4uLmRlZm5BLmF0dHJpYnV0ZXMsXG4gICAgICAgIC4uLm1vZC5hdHRyaWJ1dGVzXG4gICAgICB9LFxuICAgICAgc3R5bGVzOiB7XG4gICAgICAgIC4uLmRlZm5BLnN0eWxlcyxcbiAgICAgICAgLi4ubW9kLnN0eWxlc1xuICAgICAgfSxcbiAgICAgIGNsYXNzZXM6IGRlZm5BLmNsYXNzZXMuY29uY2F0KG1vZC5jbGFzc2VzKVxuICAgIH0pO1xuXG4gICAgY29uc3QgY29tYmluZSQyID0gKGluZm8sIGJhc2VNb2QsIGJlaGF2aW91cnMsIGJhc2UpID0+IHtcbiAgICAgIGNvbnN0IG1vZHNCeUJlaGF2aW91ciA9IHsgLi4uYmFzZU1vZCB9O1xuICAgICAgZWFjaCQxKGJlaGF2aW91cnMsIGJlaGF2aW91ciA9PiB7XG4gICAgICAgIG1vZHNCeUJlaGF2aW91cltiZWhhdmlvdXIubmFtZSgpXSA9IGJlaGF2aW91ci5leGhpYml0KGluZm8sIGJhc2UpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBieUFzcGVjdCA9IGJ5SW5uZXJLZXkobW9kc0J5QmVoYXZpb3VyLCAobmFtZSwgbW9kaWZpY2F0aW9uKSA9PiAoe1xuICAgICAgICBuYW1lLFxuICAgICAgICBtb2RpZmljYXRpb25cbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IGNvbWJpbmVPYmplY3RzID0gb2JqZWN0cyA9PiBmb2xkcihvYmplY3RzLCAoYiwgYSkgPT4gKHtcbiAgICAgICAgLi4uYS5tb2RpZmljYXRpb24sXG4gICAgICAgIC4uLmJcbiAgICAgIH0pLCB7fSk7XG4gICAgICBjb25zdCBjb21iaW5lZENsYXNzZXMgPSBmb2xkcihieUFzcGVjdC5jbGFzc2VzLCAoYiwgYSkgPT4gYS5tb2RpZmljYXRpb24uY29uY2F0KGIpLCBbXSk7XG4gICAgICBjb25zdCBjb21iaW5lZEF0dHJpYnV0ZXMgPSBjb21iaW5lT2JqZWN0cyhieUFzcGVjdC5hdHRyaWJ1dGVzKTtcbiAgICAgIGNvbnN0IGNvbWJpbmVkU3R5bGVzID0gY29tYmluZU9iamVjdHMoYnlBc3BlY3Quc3R5bGVzKTtcbiAgICAgIHJldHVybiBudSQ3KHtcbiAgICAgICAgY2xhc3NlczogY29tYmluZWRDbGFzc2VzLFxuICAgICAgICBhdHRyaWJ1dGVzOiBjb21iaW5lZEF0dHJpYnV0ZXMsXG4gICAgICAgIHN0eWxlczogY29tYmluZWRTdHlsZXNcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBzb3J0S2V5cyA9IChsYWJlbCwga2V5TmFtZSwgYXJyYXksIG9yZGVyKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzb3J0ZWQgPSBzb3J0KGFycmF5LCAoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGFLZXkgPSBhW2tleU5hbWVdO1xuICAgICAgICAgIGNvbnN0IGJLZXkgPSBiW2tleU5hbWVdO1xuICAgICAgICAgIGNvbnN0IGFJbmRleCA9IG9yZGVyLmluZGV4T2YoYUtleSk7XG4gICAgICAgICAgY29uc3QgYkluZGV4ID0gb3JkZXIuaW5kZXhPZihiS2V5KTtcbiAgICAgICAgICBpZiAoYUluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgb3JkZXJpbmcgZm9yICcgKyBsYWJlbCArICcgZG9lcyBub3QgaGF2ZSBhbiBlbnRyeSBmb3IgJyArIGFLZXkgKyAnLlxcbk9yZGVyIHNwZWNpZmllZDogJyArIEpTT04uc3RyaW5naWZ5KG9yZGVyLCBudWxsLCAyKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChiSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBvcmRlcmluZyBmb3IgJyArIGxhYmVsICsgJyBkb2VzIG5vdCBoYXZlIGFuIGVudHJ5IGZvciAnICsgYktleSArICcuXFxuT3JkZXIgc3BlY2lmaWVkOiAnICsgSlNPTi5zdHJpbmdpZnkob3JkZXIsIG51bGwsIDIpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGFJbmRleCA8IGJJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYkluZGV4IDwgYUluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFJlc3VsdC52YWx1ZShzb3J0ZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3IoW2Vycl0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB1bmN1cnJpZWQgPSAoaGFuZGxlciwgcHVycG9zZSkgPT4gKHtcbiAgICAgIGhhbmRsZXIsXG4gICAgICBwdXJwb3NlXG4gICAgfSk7XG4gICAgY29uc3QgY3VycmllZCA9IChoYW5kbGVyLCBwdXJwb3NlKSA9PiAoe1xuICAgICAgY0hhbmRsZXI6IGhhbmRsZXIsXG4gICAgICBwdXJwb3NlXG4gICAgfSk7XG4gICAgY29uc3QgY3VycnlBcmdzID0gKGRlc2NIYW5kbGVyLCBleHRyYUFyZ3MpID0+IGN1cnJpZWQoY3VycnkuYXBwbHkodW5kZWZpbmVkLCBbZGVzY0hhbmRsZXIuaGFuZGxlcl0uY29uY2F0KGV4dHJhQXJncykpLCBkZXNjSGFuZGxlci5wdXJwb3NlKTtcbiAgICBjb25zdCBnZXRDdXJyaWVkID0gZGVzY0hhbmRsZXIgPT4gZGVzY0hhbmRsZXIuY0hhbmRsZXI7XG5cbiAgICBjb25zdCBiZWhhdmlvdXJUdXBsZSA9IChuYW1lLCBoYW5kbGVyKSA9PiAoe1xuICAgICAgbmFtZSxcbiAgICAgIGhhbmRsZXJcbiAgICB9KTtcbiAgICBjb25zdCBuYW1lVG9IYW5kbGVycyA9IChiZWhhdmlvdXJzLCBpbmZvKSA9PiB7XG4gICAgICBjb25zdCByID0ge307XG4gICAgICBlYWNoJDEoYmVoYXZpb3VycywgYmVoYXZpb3VyID0+IHtcbiAgICAgICAgcltiZWhhdmlvdXIubmFtZSgpXSA9IGJlaGF2aW91ci5oYW5kbGVycyhpbmZvKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBncm91cEJ5RXZlbnRzID0gKGluZm8sIGJlaGF2aW91cnMsIGJhc2UpID0+IHtcbiAgICAgIGNvbnN0IGJlaGF2aW91ckV2ZW50cyA9IHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgLi4ubmFtZVRvSGFuZGxlcnMoYmVoYXZpb3VycywgaW5mbylcbiAgICAgIH07XG4gICAgICByZXR1cm4gYnlJbm5lcktleShiZWhhdmlvdXJFdmVudHMsIGJlaGF2aW91clR1cGxlKTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbWJpbmUkMSA9IChpbmZvLCBldmVudE9yZGVyLCBiZWhhdmlvdXJzLCBiYXNlKSA9PiB7XG4gICAgICBjb25zdCBieUV2ZW50TmFtZSA9IGdyb3VwQnlFdmVudHMoaW5mbywgYmVoYXZpb3VycywgYmFzZSk7XG4gICAgICByZXR1cm4gY29tYmluZUdyb3VwcyhieUV2ZW50TmFtZSwgZXZlbnRPcmRlcik7XG4gICAgfTtcbiAgICBjb25zdCBhc3NlbWJsZSA9IHJhd0hhbmRsZXIgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlciA9IHJlYWQkMihyYXdIYW5kbGVyKTtcbiAgICAgIHJldHVybiAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgLi4ucmVzdCkgPT4ge1xuICAgICAgICBjb25zdCBhcmdzID0gW1xuICAgICAgICAgIGNvbXBvbmVudCxcbiAgICAgICAgICBzaW11bGF0ZWRFdmVudFxuICAgICAgICBdLmNvbmNhdChyZXN0KTtcbiAgICAgICAgaWYgKGhhbmRsZXIuYWJvcnQuYXBwbHkodW5kZWZpbmVkLCBhcmdzKSkge1xuICAgICAgICAgIHNpbXVsYXRlZEV2ZW50LnN0b3AoKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyLmNhbi5hcHBseSh1bmRlZmluZWQsIGFyZ3MpKSB7XG4gICAgICAgICAgaGFuZGxlci5ydW4uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG1pc3NpbmdPcmRlckVycm9yID0gKGV2ZW50TmFtZSwgdHVwbGVzKSA9PiBSZXN1bHQuZXJyb3IoWydUaGUgZXZlbnQgKCcgKyBldmVudE5hbWUgKyAnKSBoYXMgbW9yZSB0aGFuIG9uZSBiZWhhdmlvdXIgdGhhdCBsaXN0ZW5zIHRvIGl0LlxcbldoZW4gdGhpcyBvY2N1cnMsIHlvdSBtdXN0ICcgKyAnc3BlY2lmeSBhbiBldmVudCBvcmRlcmluZyBmb3IgdGhlIGJlaGF2aW91cnMgaW4geW91ciBzcGVjIChlLmcuIFsgXCJsaXN0aW5nXCIsIFwidG9nZ2xpbmdcIiBdKS5cXG5UaGUgYmVoYXZpb3VycyB0aGF0ICcgKyAnY2FuIHRyaWdnZXIgaXQgYXJlOiAnICsgSlNPTi5zdHJpbmdpZnkobWFwJDIodHVwbGVzLCBjID0+IGMubmFtZSksIG51bGwsIDIpXSk7XG4gICAgY29uc3QgZnVzZSA9ICh0dXBsZXMsIGV2ZW50T3JkZXIsIGV2ZW50TmFtZSkgPT4ge1xuICAgICAgY29uc3Qgb3JkZXIgPSBldmVudE9yZGVyW2V2ZW50TmFtZV07XG4gICAgICBpZiAoIW9yZGVyKSB7XG4gICAgICAgIHJldHVybiBtaXNzaW5nT3JkZXJFcnJvcihldmVudE5hbWUsIHR1cGxlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc29ydEtleXMoJ0V2ZW50OiAnICsgZXZlbnROYW1lLCAnbmFtZScsIHR1cGxlcywgb3JkZXIpLm1hcChzb3J0ZWRUdXBsZXMgPT4ge1xuICAgICAgICAgIGNvbnN0IGhhbmRsZXJzID0gbWFwJDIoc29ydGVkVHVwbGVzLCB0dXBsZSA9PiB0dXBsZS5oYW5kbGVyKTtcbiAgICAgICAgICByZXR1cm4gZnVzZSQxKGhhbmRsZXJzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjb21iaW5lR3JvdXBzID0gKGJ5RXZlbnROYW1lLCBldmVudE9yZGVyKSA9PiB7XG4gICAgICBjb25zdCByID0gbWFwVG9BcnJheShieUV2ZW50TmFtZSwgKHR1cGxlcywgZXZlbnROYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbWJpbmVkID0gdHVwbGVzLmxlbmd0aCA9PT0gMSA/IFJlc3VsdC52YWx1ZSh0dXBsZXNbMF0uaGFuZGxlcikgOiBmdXNlKHR1cGxlcywgZXZlbnRPcmRlciwgZXZlbnROYW1lKTtcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVkLm1hcChoYW5kbGVyID0+IHtcbiAgICAgICAgICBjb25zdCBhc3NlbWJsZWQgPSBhc3NlbWJsZShoYW5kbGVyKTtcbiAgICAgICAgICBjb25zdCBwdXJwb3NlID0gdHVwbGVzLmxlbmd0aCA+IDEgPyBmaWx0ZXIkMihldmVudE9yZGVyW2V2ZW50TmFtZV0sIG8gPT4gZXhpc3RzKHR1cGxlcywgdCA9PiB0Lm5hbWUgPT09IG8pKS5qb2luKCcgPiAnKSA6IHR1cGxlc1swXS5uYW1lO1xuICAgICAgICAgIHJldHVybiB3cmFwJDEoZXZlbnROYW1lLCB1bmN1cnJpZWQoYXNzZW1ibGVkLCBwdXJwb3NlKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29uc29saWRhdGUociwge30pO1xuICAgIH07XG5cbiAgICBjb25zdCBiYXNlQmVoYXZpb3VyID0gJ2FsbG95LmJhc2UuYmVoYXZpb3VyJztcbiAgICBjb25zdCBzY2hlbWEkeiA9IG9iak9mKFtcbiAgICAgIGZpZWxkJDEoJ2RvbScsICdkb20nLCByZXF1aXJlZCQyKCksIG9iak9mKFtcbiAgICAgICAgcmVxdWlyZWQkMSgndGFnJyksXG4gICAgICAgIGRlZmF1bHRlZCgnc3R5bGVzJywge30pLFxuICAgICAgICBkZWZhdWx0ZWQoJ2NsYXNzZXMnLCBbXSksXG4gICAgICAgIGRlZmF1bHRlZCgnYXR0cmlidXRlcycsIHt9KSxcbiAgICAgICAgb3B0aW9uJDMoJ3ZhbHVlJyksXG4gICAgICAgIG9wdGlvbiQzKCdpbm5lckh0bWwnKVxuICAgICAgXSkpLFxuICAgICAgcmVxdWlyZWQkMSgnY29tcG9uZW50cycpLFxuICAgICAgcmVxdWlyZWQkMSgndWlkJyksXG4gICAgICBkZWZhdWx0ZWQoJ2V2ZW50cycsIHt9KSxcbiAgICAgIGRlZmF1bHRlZCgnYXBpcycsIHt9KSxcbiAgICAgIGZpZWxkJDEoJ2V2ZW50T3JkZXInLCAnZXZlbnRPcmRlcicsIG1lcmdlV2l0aCh7XG4gICAgICAgIFtleGVjdXRlJDUoKV06IFtcbiAgICAgICAgICAnZGlzYWJsaW5nJyxcbiAgICAgICAgICBiYXNlQmVoYXZpb3VyLFxuICAgICAgICAgICd0b2dnbGluZycsXG4gICAgICAgICAgJ3R5cGVhaGVhZGV2ZW50cydcbiAgICAgICAgXSxcbiAgICAgICAgW2ZvY3VzJDQoKV06IFtcbiAgICAgICAgICBiYXNlQmVoYXZpb3VyLFxuICAgICAgICAgICdmb2N1c2luZycsXG4gICAgICAgICAgJ2tleWluZydcbiAgICAgICAgXSxcbiAgICAgICAgW3N5c3RlbUluaXQoKV06IFtcbiAgICAgICAgICBiYXNlQmVoYXZpb3VyLFxuICAgICAgICAgICdkaXNhYmxpbmcnLFxuICAgICAgICAgICd0b2dnbGluZycsXG4gICAgICAgICAgJ3JlcHJlc2VudGluZydcbiAgICAgICAgXSxcbiAgICAgICAgW2lucHV0KCldOiBbXG4gICAgICAgICAgYmFzZUJlaGF2aW91cixcbiAgICAgICAgICAncmVwcmVzZW50aW5nJyxcbiAgICAgICAgICAnc3RyZWFtaW5nJyxcbiAgICAgICAgICAnaW52YWxpZGF0aW5nJ1xuICAgICAgICBdLFxuICAgICAgICBbZGV0YWNoZWRGcm9tRG9tKCldOiBbXG4gICAgICAgICAgYmFzZUJlaGF2aW91cixcbiAgICAgICAgICAncmVwcmVzZW50aW5nJyxcbiAgICAgICAgICAnaXRlbS1ldmVudHMnLFxuICAgICAgICAgICd0b29sdGlwcGluZydcbiAgICAgICAgXSxcbiAgICAgICAgW21vdXNlZG93bigpXTogW1xuICAgICAgICAgICdmb2N1c2luZycsXG4gICAgICAgICAgYmFzZUJlaGF2aW91cixcbiAgICAgICAgICAnaXRlbS10eXBlLWV2ZW50cydcbiAgICAgICAgXSxcbiAgICAgICAgW3RvdWNoc3RhcnQoKV06IFtcbiAgICAgICAgICAnZm9jdXNpbmcnLFxuICAgICAgICAgIGJhc2VCZWhhdmlvdXIsXG4gICAgICAgICAgJ2l0ZW0tdHlwZS1ldmVudHMnXG4gICAgICAgIF0sXG4gICAgICAgIFttb3VzZW92ZXIoKV06IFtcbiAgICAgICAgICAnaXRlbS10eXBlLWV2ZW50cycsXG4gICAgICAgICAgJ3Rvb2x0aXBwaW5nJ1xuICAgICAgICBdLFxuICAgICAgICBbcmVjZWl2ZSgpXTogW1xuICAgICAgICAgICdyZWNlaXZpbmcnLFxuICAgICAgICAgICdyZWZsZWN0aW5nJyxcbiAgICAgICAgICAndG9vbHRpcHBpbmcnXG4gICAgICAgIF1cbiAgICAgIH0pLCBhbnlWYWx1ZSgpKSxcbiAgICAgIG9wdGlvbiQzKCdkb21Nb2RpZmljYXRpb24nKVxuICAgIF0pO1xuICAgIGNvbnN0IHRvSW5mbyA9IHNwZWMgPT4gYXNSYXcoJ2N1c3RvbS5kZWZpbml0aW9uJywgc2NoZW1hJHosIHNwZWMpO1xuICAgIGNvbnN0IHRvRGVmaW5pdGlvbiA9IGRldGFpbCA9PiAoe1xuICAgICAgLi4uZGV0YWlsLmRvbSxcbiAgICAgIHVpZDogZGV0YWlsLnVpZCxcbiAgICAgIGRvbUNoaWxkcmVuOiBtYXAkMihkZXRhaWwuY29tcG9uZW50cywgY29tcCA9PiBjb21wLmVsZW1lbnQpXG4gICAgfSk7XG4gICAgY29uc3QgdG9Nb2RpZmljYXRpb24gPSBkZXRhaWwgPT4gZGV0YWlsLmRvbU1vZGlmaWNhdGlvbi5mb2xkKCgpID0+IG51JDcoe30pLCBudSQ3KTtcbiAgICBjb25zdCB0b0V2ZW50cyA9IGluZm8gPT4gaW5mby5ldmVudHM7XG5cbiAgICBjb25zdCByZWFkID0gKGVsZW1lbnQsIGF0dHIpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZ2V0JGYoZWxlbWVudCwgYXR0cik7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycgPyBbXSA6IHZhbHVlLnNwbGl0KCcgJyk7XG4gICAgfTtcbiAgICBjb25zdCBhZGQkNCA9IChlbGVtZW50LCBhdHRyLCBpZCkgPT4ge1xuICAgICAgY29uc3Qgb2xkID0gcmVhZChlbGVtZW50LCBhdHRyKTtcbiAgICAgIGNvbnN0IG51ID0gb2xkLmNvbmNhdChbaWRdKTtcbiAgICAgIHNldCQ5KGVsZW1lbnQsIGF0dHIsIG51LmpvaW4oJyAnKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSQ0ID0gKGVsZW1lbnQsIGF0dHIsIGlkKSA9PiB7XG4gICAgICBjb25zdCBudSA9IGZpbHRlciQyKHJlYWQoZWxlbWVudCwgYXR0ciksIHYgPT4gdiAhPT0gaWQpO1xuICAgICAgaWYgKG51Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgc2V0JDkoZWxlbWVudCwgYXR0ciwgbnUuam9pbignICcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZSQ3KGVsZW1lbnQsIGF0dHIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICBjb25zdCBzdXBwb3J0cyA9IGVsZW1lbnQgPT4gZWxlbWVudC5kb20uY2xhc3NMaXN0ICE9PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgZ2V0JDggPSBlbGVtZW50ID0+IHJlYWQoZWxlbWVudCwgJ2NsYXNzJyk7XG4gICAgY29uc3QgYWRkJDMgPSAoZWxlbWVudCwgY2xhenopID0+IGFkZCQ0KGVsZW1lbnQsICdjbGFzcycsIGNsYXp6KTtcbiAgICBjb25zdCByZW1vdmUkMyA9IChlbGVtZW50LCBjbGF6eikgPT4gcmVtb3ZlJDQoZWxlbWVudCwgJ2NsYXNzJywgY2xhenopO1xuXG4gICAgY29uc3QgYWRkJDIgPSAoZWxlbWVudCwgY2xhenopID0+IHtcbiAgICAgIGlmIChzdXBwb3J0cyhlbGVtZW50KSkge1xuICAgICAgICBlbGVtZW50LmRvbS5jbGFzc0xpc3QuYWRkKGNsYXp6KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkZCQzKGVsZW1lbnQsIGNsYXp6KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNsZWFuQ2xhc3MgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHN1cHBvcnRzKGVsZW1lbnQpID8gZWxlbWVudC5kb20uY2xhc3NMaXN0IDogZ2V0JDgoZWxlbWVudCk7XG4gICAgICBpZiAoY2xhc3NMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZW1vdmUkNyhlbGVtZW50LCAnY2xhc3MnKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSQyID0gKGVsZW1lbnQsIGNsYXp6KSA9PiB7XG4gICAgICBpZiAoc3VwcG9ydHMoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgY2xhc3NMaXN0ID0gZWxlbWVudC5kb20uY2xhc3NMaXN0O1xuICAgICAgICBjbGFzc0xpc3QucmVtb3ZlKGNsYXp6KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZSQzKGVsZW1lbnQsIGNsYXp6KTtcbiAgICAgIH1cbiAgICAgIGNsZWFuQ2xhc3MoZWxlbWVudCk7XG4gICAgfTtcbiAgICBjb25zdCBoYXMgPSAoZWxlbWVudCwgY2xhenopID0+IHN1cHBvcnRzKGVsZW1lbnQpICYmIGVsZW1lbnQuZG9tLmNsYXNzTGlzdC5jb250YWlucyhjbGF6eik7XG5cbiAgICBjb25zdCBhZGQkMSA9IChlbGVtZW50LCBjbGFzc2VzKSA9PiB7XG4gICAgICBlYWNoJDEoY2xhc3NlcywgeCA9PiB7XG4gICAgICAgIGFkZCQyKGVsZW1lbnQsIHgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmUkMSA9IChlbGVtZW50LCBjbGFzc2VzKSA9PiB7XG4gICAgICBlYWNoJDEoY2xhc3NlcywgeCA9PiB7XG4gICAgICAgIHJlbW92ZSQyKGVsZW1lbnQsIHgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNBbGwgPSAoZWxlbWVudCwgY2xhc3NlcykgPT4gZm9yYWxsKGNsYXNzZXMsIGNsYXp6ID0+IGhhcyhlbGVtZW50LCBjbGF6eikpO1xuICAgIGNvbnN0IGdldE5hdGl2ZSA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgY2xhc3NMaXN0ID0gZWxlbWVudC5kb20uY2xhc3NMaXN0O1xuICAgICAgY29uc3QgciA9IG5ldyBBcnJheShjbGFzc0xpc3QubGVuZ3RoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xhc3NMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBjbGFzc0xpc3QuaXRlbShpKTtcbiAgICAgICAgaWYgKGl0ZW0gIT09IG51bGwpIHtcbiAgICAgICAgICByW2ldID0gaXRlbTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBnZXQkNyA9IGVsZW1lbnQgPT4gc3VwcG9ydHMoZWxlbWVudCkgPyBnZXROYXRpdmUoZWxlbWVudCkgOiBnZXQkOChlbGVtZW50KTtcblxuICAgIGNvbnN0IGdldCQ2ID0gZWxlbWVudCA9PiBlbGVtZW50LmRvbS52YWx1ZTtcbiAgICBjb25zdCBzZXQkNSA9IChlbGVtZW50LCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWYWx1ZS5zZXQgd2FzIHVuZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgZWxlbWVudC5kb20udmFsdWUgPSB2YWx1ZTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGV0ZXJtaW5lT2Jzb2xldGVkID0gKHBhcmVudCwgaW5kZXgsIG9sZE9ic29sZXRlZCkgPT4ge1xuICAgICAgY29uc3QgbmV3T2Jzb2xldGVkID0gY2hpbGQkMihwYXJlbnQsIGluZGV4KTtcbiAgICAgIHJldHVybiBuZXdPYnNvbGV0ZWQubWFwKG5ld09icyA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1DaGFuZ2VkID0gb2xkT2Jzb2xldGVkLmV4aXN0cyhvID0+ICFlcShvLCBuZXdPYnMpKTtcbiAgICAgICAgaWYgKGVsZW1DaGFuZ2VkKSB7XG4gICAgICAgICAgY29uc3Qgb2xkVGFnID0gb2xkT2Jzb2xldGVkLm1hcChuYW1lJDMpLmdldE9yKCdzcGFuJyk7XG4gICAgICAgICAgY29uc3QgbWFya2VyID0gU3VnYXJFbGVtZW50LmZyb21UYWcob2xkVGFnKTtcbiAgICAgICAgICBiZWZvcmUkMShuZXdPYnMsIG1hcmtlcik7XG4gICAgICAgICAgcmV0dXJuIG1hcmtlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbmV3T2JzO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGVuc3VyZUluRG9tID0gKHBhcmVudCwgY2hpbGQsIG9ic29sZXRlZCkgPT4ge1xuICAgICAgb2Jzb2xldGVkLmZvbGQoKCkgPT4gYXBwZW5kJDIocGFyZW50LCBjaGlsZCksIG9icyA9PiB7XG4gICAgICAgIGlmICghZXEob2JzLCBjaGlsZCkpIHtcbiAgICAgICAgICBiZWZvcmUkMShvYnMsIGNoaWxkKTtcbiAgICAgICAgICByZW1vdmUkNShvYnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHBhdGNoQ2hpbGRyZW5XaXRoID0gKHBhcmVudCwgbnUsIGYpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWx0Q2hpbGRyZW4gPSBtYXAkMihudSwgZik7XG4gICAgICBjb25zdCBjdXJyZW50Q2hpbGRyZW4gPSBjaGlsZHJlbihwYXJlbnQpO1xuICAgICAgZWFjaCQxKGN1cnJlbnRDaGlsZHJlbi5zbGljZShidWlsdENoaWxkcmVuLmxlbmd0aCksIHJlbW92ZSQ1KTtcbiAgICAgIHJldHVybiBidWlsdENoaWxkcmVuO1xuICAgIH07XG4gICAgY29uc3QgcGF0Y2hTcGVjQ2hpbGQgPSAocGFyZW50LCBpbmRleCwgc3BlYywgYnVpbGQpID0+IHtcbiAgICAgIGNvbnN0IG9sZE9ic29sZXRlZCA9IGNoaWxkJDIocGFyZW50LCBpbmRleCk7XG4gICAgICBjb25zdCBjaGlsZENvbXAgPSBidWlsZChzcGVjLCBvbGRPYnNvbGV0ZWQpO1xuICAgICAgY29uc3Qgb2Jzb2xldGVkID0gZGV0ZXJtaW5lT2Jzb2xldGVkKHBhcmVudCwgaW5kZXgsIG9sZE9ic29sZXRlZCk7XG4gICAgICBlbnN1cmVJbkRvbShwYXJlbnQsIGNoaWxkQ29tcC5lbGVtZW50LCBvYnNvbGV0ZWQpO1xuICAgICAgcmV0dXJuIGNoaWxkQ29tcDtcbiAgICB9O1xuICAgIGNvbnN0IHBhdGNoU3BlY0NoaWxkcmVuID0gKHBhcmVudCwgc3BlY3MsIGJ1aWxkKSA9PiBwYXRjaENoaWxkcmVuV2l0aChwYXJlbnQsIHNwZWNzLCAoc3BlYywgaW5kZXgpID0+IHBhdGNoU3BlY0NoaWxkKHBhcmVudCwgaW5kZXgsIHNwZWMsIGJ1aWxkKSk7XG4gICAgY29uc3QgcGF0Y2hEb21DaGlsZHJlbiA9IChwYXJlbnQsIG5vZGVzKSA9PiBwYXRjaENoaWxkcmVuV2l0aChwYXJlbnQsIG5vZGVzLCAobm9kZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG9wdE9ic29sZXRlZCA9IGNoaWxkJDIocGFyZW50LCBpbmRleCk7XG4gICAgICBlbnN1cmVJbkRvbShwYXJlbnQsIG5vZGUsIG9wdE9ic29sZXRlZCk7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGRpZmZLZXlWYWx1ZVNldCA9IChuZXdPYmosIG9sZE9iaikgPT4ge1xuICAgICAgY29uc3QgbmV3S2V5cyA9IGtleXMobmV3T2JqKTtcbiAgICAgIGNvbnN0IG9sZEtleXMgPSBrZXlzKG9sZE9iaik7XG4gICAgICBjb25zdCB0b1JlbW92ZSA9IGRpZmZlcmVuY2Uob2xkS2V5cywgbmV3S2V5cyk7XG4gICAgICBjb25zdCB0b1NldCA9IGJpZmlsdGVyKG5ld09iaiwgKHYsIGspID0+IHtcbiAgICAgICAgcmV0dXJuICFoYXMkMihvbGRPYmosIGspIHx8IHYgIT09IG9sZE9ialtrXTtcbiAgICAgIH0pLnQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b1JlbW92ZSxcbiAgICAgICAgdG9TZXRcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCByZWNvbmNpbGVUb0RvbSA9IChkZWZpbml0aW9uLCBvYnNvbGV0ZWQpID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2xhc3M6IGNsYXp6LFxuICAgICAgICBzdHlsZSxcbiAgICAgICAgLi4uZXhpc3RpbmdBdHRyaWJ1dGVzXG4gICAgICB9ID0gY2xvbmUkMihvYnNvbGV0ZWQpO1xuICAgICAgY29uc3Qge1xuICAgICAgICB0b1NldDogYXR0cnNUb1NldCxcbiAgICAgICAgdG9SZW1vdmU6IGF0dHJzVG9SZW1vdmVcbiAgICAgIH0gPSBkaWZmS2V5VmFsdWVTZXQoZGVmaW5pdGlvbi5hdHRyaWJ1dGVzLCBleGlzdGluZ0F0dHJpYnV0ZXMpO1xuICAgICAgY29uc3QgdXBkYXRlQXR0cnMgPSAoKSA9PiB7XG4gICAgICAgIGVhY2gkMShhdHRyc1RvUmVtb3ZlLCBhID0+IHJlbW92ZSQ3KG9ic29sZXRlZCwgYSkpO1xuICAgICAgICBzZXRBbGwkMShvYnNvbGV0ZWQsIGF0dHJzVG9TZXQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nU3R5bGVzID0gZ2V0QWxsUmF3KG9ic29sZXRlZCk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHRvU2V0OiBzdHlsZXNUb1NldCxcbiAgICAgICAgdG9SZW1vdmU6IHN0eWxlc1RvUmVtb3ZlXG4gICAgICB9ID0gZGlmZktleVZhbHVlU2V0KGRlZmluaXRpb24uc3R5bGVzLCBleGlzdGluZ1N0eWxlcyk7XG4gICAgICBjb25zdCB1cGRhdGVTdHlsZXMgPSAoKSA9PiB7XG4gICAgICAgIGVhY2gkMShzdHlsZXNUb1JlbW92ZSwgcyA9PiByZW1vdmUkNihvYnNvbGV0ZWQsIHMpKTtcbiAgICAgICAgc2V0QWxsKG9ic29sZXRlZCwgc3R5bGVzVG9TZXQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nQ2xhc3NlcyA9IGdldCQ3KG9ic29sZXRlZCk7XG4gICAgICBjb25zdCBjbGFzc2VzVG9SZW1vdmUgPSBkaWZmZXJlbmNlKGV4aXN0aW5nQ2xhc3NlcywgZGVmaW5pdGlvbi5jbGFzc2VzKTtcbiAgICAgIGNvbnN0IGNsYXNzZXNUb0FkZCA9IGRpZmZlcmVuY2UoZGVmaW5pdGlvbi5jbGFzc2VzLCBleGlzdGluZ0NsYXNzZXMpO1xuICAgICAgY29uc3QgdXBkYXRlQ2xhc3NlcyA9ICgpID0+IHtcbiAgICAgICAgYWRkJDEob2Jzb2xldGVkLCBjbGFzc2VzVG9BZGQpO1xuICAgICAgICByZW1vdmUkMShvYnNvbGV0ZWQsIGNsYXNzZXNUb1JlbW92ZSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdXBkYXRlSHRtbCA9IGh0bWwgPT4ge1xuICAgICAgICBzZXQkNihvYnNvbGV0ZWQsIGh0bWwpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVwZGF0ZUNoaWxkcmVuID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGRlZmluaXRpb24uZG9tQ2hpbGRyZW47XG4gICAgICAgIHBhdGNoRG9tQ2hpbGRyZW4ob2Jzb2xldGVkLCBjaGlsZHJlbik7XG4gICAgICB9O1xuICAgICAgY29uc3QgdXBkYXRlVmFsdWUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlRWxlbWVudCA9IG9ic29sZXRlZDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBkZWZpbml0aW9uLnZhbHVlLmdldE9yVW5kZWZpbmVkKCk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gZ2V0JDYodmFsdWVFbGVtZW50KSkge1xuICAgICAgICAgIHNldCQ1KHZhbHVlRWxlbWVudCwgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHZvaWQgMCA/IHZhbHVlIDogJycpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdXBkYXRlQXR0cnMoKTtcbiAgICAgIHVwZGF0ZUNsYXNzZXMoKTtcbiAgICAgIHVwZGF0ZVN0eWxlcygpO1xuICAgICAgZGVmaW5pdGlvbi5pbm5lckh0bWwuZm9sZCh1cGRhdGVDaGlsZHJlbiwgdXBkYXRlSHRtbCk7XG4gICAgICB1cGRhdGVWYWx1ZSgpO1xuICAgICAgcmV0dXJuIG9ic29sZXRlZDtcbiAgICB9O1xuXG4gICAgY29uc3QgaW50cm9kdWNlVG9Eb20gPSBkZWZpbml0aW9uID0+IHtcbiAgICAgIGNvbnN0IHN1YmplY3QgPSBTdWdhckVsZW1lbnQuZnJvbVRhZyhkZWZpbml0aW9uLnRhZyk7XG4gICAgICBzZXRBbGwkMShzdWJqZWN0LCBkZWZpbml0aW9uLmF0dHJpYnV0ZXMpO1xuICAgICAgYWRkJDEoc3ViamVjdCwgZGVmaW5pdGlvbi5jbGFzc2VzKTtcbiAgICAgIHNldEFsbChzdWJqZWN0LCBkZWZpbml0aW9uLnN0eWxlcyk7XG4gICAgICBkZWZpbml0aW9uLmlubmVySHRtbC5lYWNoKGh0bWwgPT4gc2V0JDYoc3ViamVjdCwgaHRtbCkpO1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBkZWZpbml0aW9uLmRvbUNoaWxkcmVuO1xuICAgICAgYXBwZW5kJDEoc3ViamVjdCwgY2hpbGRyZW4pO1xuICAgICAgZGVmaW5pdGlvbi52YWx1ZS5lYWNoKHZhbHVlID0+IHtcbiAgICAgICAgc2V0JDUoc3ViamVjdCwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9O1xuICAgIGNvbnN0IGF0dGVtcHRQYXRjaCA9IChkZWZpbml0aW9uLCBvYnNvbGV0ZWQpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGUgPSByZWNvbmNpbGVUb0RvbShkZWZpbml0aW9uLCBvYnNvbGV0ZWQpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShlKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaGFzTWl4ZWRDaGlsZHJlbiA9IGRlZmluaXRpb24gPT4gZGVmaW5pdGlvbi5pbm5lckh0bWwuaXNTb21lKCkgJiYgZGVmaW5pdGlvbi5kb21DaGlsZHJlbi5sZW5ndGggPiAwO1xuICAgIGNvbnN0IHJlbmRlclRvRG9tID0gKGRlZmluaXRpb24sIG9wdE9ic29sZXRlZCkgPT4ge1xuICAgICAgY29uc3QgY2FuQmVQYXRjaGVkID0gY2FuZGlkYXRlID0+IG5hbWUkMyhjYW5kaWRhdGUpID09PSBkZWZpbml0aW9uLnRhZyAmJiAhaGFzTWl4ZWRDaGlsZHJlbihkZWZpbml0aW9uKSAmJiAhaXNQcmVtYWRlKGNhbmRpZGF0ZSk7XG4gICAgICBjb25zdCBlbGVtID0gb3B0T2Jzb2xldGVkLmZpbHRlcihjYW5CZVBhdGNoZWQpLmJpbmQob2Jzb2xldGVkID0+IGF0dGVtcHRQYXRjaChkZWZpbml0aW9uLCBvYnNvbGV0ZWQpKS5nZXRPclRodW5rKCgpID0+IGludHJvZHVjZVRvRG9tKGRlZmluaXRpb24pKTtcbiAgICAgIHdyaXRlT25seShlbGVtLCBkZWZpbml0aW9uLnVpZCk7XG4gICAgICByZXR1cm4gZWxlbTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0QmVoYXZpb3VycyQyID0gc3BlYyA9PiB7XG4gICAgICBjb25zdCBiZWhhdmlvdXJzID0gZ2V0JGcoc3BlYywgJ2JlaGF2aW91cnMnKS5nZXRPcih7fSk7XG4gICAgICByZXR1cm4gYmluZCQzKGtleXMoYmVoYXZpb3VycyksIG5hbWUgPT4ge1xuICAgICAgICBjb25zdCBiZWhhdmlvdXIgPSBiZWhhdmlvdXJzW25hbWVdO1xuICAgICAgICByZXR1cm4gaXNOb25OdWxsYWJsZShiZWhhdmlvdXIpID8gW2JlaGF2aW91ci5tZV0gOiBbXTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2VuZXJhdGVGcm9tID0gKHNwZWMsIGFsbCkgPT4gZ2VuZXJhdGVGcm9tJDEoc3BlYywgYWxsKTtcbiAgICBjb25zdCBnZW5lcmF0ZSQ0ID0gc3BlYyA9PiB7XG4gICAgICBjb25zdCBhbGwgPSBnZXRCZWhhdmlvdXJzJDIoc3BlYyk7XG4gICAgICByZXR1cm4gZ2VuZXJhdGVGcm9tKHNwZWMsIGFsbCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldERvbURlZmluaXRpb24gPSAoaW5mbywgYkxpc3QsIGJEYXRhKSA9PiB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uID0gdG9EZWZpbml0aW9uKGluZm8pO1xuICAgICAgY29uc3QgaW5mb01vZGlmaWNhdGlvbiA9IHRvTW9kaWZpY2F0aW9uKGluZm8pO1xuICAgICAgY29uc3QgYmFzZU1vZGlmaWNhdGlvbiA9IHsgJ2FsbG95LmJhc2UubW9kaWZpY2F0aW9uJzogaW5mb01vZGlmaWNhdGlvbiB9O1xuICAgICAgY29uc3QgbW9kaWZpY2F0aW9uID0gYkxpc3QubGVuZ3RoID4gMCA/IGNvbWJpbmUkMihiRGF0YSwgYmFzZU1vZGlmaWNhdGlvbiwgYkxpc3QsIGRlZmluaXRpb24pIDogaW5mb01vZGlmaWNhdGlvbjtcbiAgICAgIHJldHVybiBtZXJnZShkZWZpbml0aW9uLCBtb2RpZmljYXRpb24pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0RXZlbnRzID0gKGluZm8sIGJMaXN0LCBiRGF0YSkgPT4ge1xuICAgICAgY29uc3QgYmFzZUV2ZW50cyA9IHsgJ2FsbG95LmJhc2UuYmVoYXZpb3VyJzogdG9FdmVudHMoaW5mbykgfTtcbiAgICAgIHJldHVybiBjb21iaW5lJDEoYkRhdGEsIGluZm8uZXZlbnRPcmRlciwgYkxpc3QsIGJhc2VFdmVudHMpLmdldE9yRGllKCk7XG4gICAgfTtcbiAgICBjb25zdCBidWlsZCQyID0gKHNwZWMsIG9ic29sZXRlZCkgPT4ge1xuICAgICAgY29uc3QgZ2V0TWUgPSAoKSA9PiBtZTtcbiAgICAgIGNvbnN0IHN5c3RlbUFwaSA9IENlbGwoc2luZ2xldG9uJDEpO1xuICAgICAgY29uc3QgaW5mbyA9IGdldE9yRGllKHRvSW5mbyhzcGVjKSk7XG4gICAgICBjb25zdCBiQmxvYiA9IGdlbmVyYXRlJDQoc3BlYyk7XG4gICAgICBjb25zdCBiTGlzdCA9IGdldEJlaGF2aW91cnMkMyhiQmxvYik7XG4gICAgICBjb25zdCBiRGF0YSA9IGdldERhdGEkMihiQmxvYik7XG4gICAgICBjb25zdCBtb2REZWZpbml0aW9uID0gZ2V0RG9tRGVmaW5pdGlvbihpbmZvLCBiTGlzdCwgYkRhdGEpO1xuICAgICAgY29uc3QgaXRlbSA9IHJlbmRlclRvRG9tKG1vZERlZmluaXRpb24sIG9ic29sZXRlZCk7XG4gICAgICBjb25zdCBldmVudHMgPSBnZXRFdmVudHMoaW5mbywgYkxpc3QsIGJEYXRhKTtcbiAgICAgIGNvbnN0IHN1YmNvbXBvbmVudHMgPSBDZWxsKGluZm8uY29tcG9uZW50cyk7XG4gICAgICBjb25zdCBjb25uZWN0ID0gbmV3QXBpID0+IHtcbiAgICAgICAgc3lzdGVtQXBpLnNldChuZXdBcGkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRpc2Nvbm5lY3QgPSAoKSA9PiB7XG4gICAgICAgIHN5c3RlbUFwaS5zZXQoTm9Db250ZXh0QXBpKGdldE1lKSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc3luY0NvbXBvbmVudHMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuJDEgPSBjaGlsZHJlbihpdGVtKTtcbiAgICAgICAgY29uc3Qgc3VicyA9IGJpbmQkMyhjaGlsZHJlbiQxLCBjaGlsZCA9PiBzeXN0ZW1BcGkuZ2V0KCkuZ2V0QnlEb20oY2hpbGQpLmZvbGQoKCkgPT4gW10sIHB1cmUkMikpO1xuICAgICAgICBzdWJjb21wb25lbnRzLnNldChzdWJzKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjb25maWcgPSBiZWhhdmlvdXIgPT4ge1xuICAgICAgICBjb25zdCBiID0gYkRhdGE7XG4gICAgICAgIGNvbnN0IGYgPSBpc0Z1bmN0aW9uKGJbYmVoYXZpb3VyLm5hbWUoKV0pID8gYltiZWhhdmlvdXIubmFtZSgpXSA6ICgpID0+IHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kICcgKyBiZWhhdmlvdXIubmFtZSgpICsgJyBpbiAnICsgSlNPTi5zdHJpbmdpZnkoc3BlYywgbnVsbCwgMikpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZigpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGhhc0NvbmZpZ3VyZWQgPSBiZWhhdmlvdXIgPT4gaXNGdW5jdGlvbihiRGF0YVtiZWhhdmlvdXIubmFtZSgpXSk7XG4gICAgICBjb25zdCBnZXRBcGlzID0gKCkgPT4gaW5mby5hcGlzO1xuICAgICAgY29uc3QgcmVhZFN0YXRlID0gYmVoYXZpb3VyTmFtZSA9PiBiRGF0YVtiZWhhdmlvdXJOYW1lXSgpLm1hcChiID0+IGIuc3RhdGUucmVhZFN0YXRlKCkpLmdldE9yKCdub3QgZW5hYmxlZCcpO1xuICAgICAgY29uc3QgbWUgPSB7XG4gICAgICAgIHVpZDogc3BlYy51aWQsXG4gICAgICAgIGdldFN5c3RlbTogc3lzdGVtQXBpLmdldCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBoYXNDb25maWd1cmVkLFxuICAgICAgICBzcGVjLFxuICAgICAgICByZWFkU3RhdGUsXG4gICAgICAgIGdldEFwaXMsXG4gICAgICAgIGNvbm5lY3QsXG4gICAgICAgIGRpc2Nvbm5lY3QsXG4gICAgICAgIGVsZW1lbnQ6IGl0ZW0sXG4gICAgICAgIHN5bmNDb21wb25lbnRzLFxuICAgICAgICBjb21wb25lbnRzOiBzdWJjb21wb25lbnRzLmdldCxcbiAgICAgICAgZXZlbnRzXG4gICAgICB9O1xuICAgICAgcmV0dXJuIG1lO1xuICAgIH07XG5cbiAgICBjb25zdCBidWlsZFN1YmNvbXBvbmVudHMgPSAoc3BlYywgb2Jzb2xldGVkKSA9PiB7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gZ2V0JGcoc3BlYywgJ2NvbXBvbmVudHMnKS5nZXRPcihbXSk7XG4gICAgICByZXR1cm4gb2Jzb2xldGVkLmZvbGQoKCkgPT4gbWFwJDIoY29tcG9uZW50cywgYnVpbGQkMSksIG9icyA9PiBtYXAkMihjb21wb25lbnRzLCAoYywgaSkgPT4ge1xuICAgICAgICByZXR1cm4gYnVpbGRPclBhdGNoKGMsIGNoaWxkJDIob2JzLCBpKSk7XG4gICAgICB9KSk7XG4gICAgfTtcbiAgICBjb25zdCBidWlsZEZyb21TcGVjID0gKHVzZXJTcGVjLCBvYnNvbGV0ZWQpID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZXZlbnRzOiBzcGVjRXZlbnRzLFxuICAgICAgICAuLi5zcGVjXG4gICAgICB9ID0gbWFrZSQ4KHVzZXJTcGVjKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBidWlsZFN1YmNvbXBvbmVudHMoc3BlYywgb2Jzb2xldGVkKTtcbiAgICAgIGNvbnN0IGNvbXBsZXRlU3BlYyA9IHtcbiAgICAgICAgLi4uc3BlYyxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgLi4uRGVmYXVsdEV2ZW50cyxcbiAgICAgICAgICAuLi5zcGVjRXZlbnRzXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHNcbiAgICAgIH07XG4gICAgICByZXR1cm4gUmVzdWx0LnZhbHVlKGJ1aWxkJDIoY29tcGxldGVTcGVjLCBvYnNvbGV0ZWQpKTtcbiAgICB9O1xuICAgIGNvbnN0IHRleHQkMiA9IHRleHRDb250ZW50ID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBTdWdhckVsZW1lbnQuZnJvbVRleHQodGV4dENvbnRlbnQpO1xuICAgICAgcmV0dXJuIGV4dGVybmFsJDEoeyBlbGVtZW50IH0pO1xuICAgIH07XG4gICAgY29uc3QgZXh0ZXJuYWwkMSA9IHNwZWMgPT4ge1xuICAgICAgY29uc3QgZXh0U3BlYyA9IGFzUmF3T3JEaWUkMSgnZXh0ZXJuYWwuY29tcG9uZW50Jywgb2JqT2ZPbmx5KFtcbiAgICAgICAgcmVxdWlyZWQkMSgnZWxlbWVudCcpLFxuICAgICAgICBvcHRpb24kMygndWlkJylcbiAgICAgIF0pLCBzcGVjKTtcbiAgICAgIGNvbnN0IHN5c3RlbUFwaSA9IENlbGwoTm9Db250ZXh0QXBpKCkpO1xuICAgICAgY29uc3QgY29ubmVjdCA9IG5ld0FwaSA9PiB7XG4gICAgICAgIHN5c3RlbUFwaS5zZXQobmV3QXBpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBkaXNjb25uZWN0ID0gKCkgPT4ge1xuICAgICAgICBzeXN0ZW1BcGkuc2V0KE5vQ29udGV4dEFwaSgoKSA9PiBtZSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVpZCA9IGV4dFNwZWMudWlkLmdldE9yVGh1bmsoKCkgPT4gZ2VuZXJhdGUkNSgnZXh0ZXJuYWwnKSk7XG4gICAgICB3cml0ZU9ubHkoZXh0U3BlYy5lbGVtZW50LCB1aWQpO1xuICAgICAgY29uc3QgbWUgPSB7XG4gICAgICAgIHVpZCxcbiAgICAgICAgZ2V0U3lzdGVtOiBzeXN0ZW1BcGkuZ2V0LFxuICAgICAgICBjb25maWc6IE9wdGlvbmFsLm5vbmUsXG4gICAgICAgIGhhc0NvbmZpZ3VyZWQ6IG5ldmVyLFxuICAgICAgICBjb25uZWN0LFxuICAgICAgICBkaXNjb25uZWN0LFxuICAgICAgICBnZXRBcGlzOiAoKSA9PiAoe30pLFxuICAgICAgICBlbGVtZW50OiBleHRTcGVjLmVsZW1lbnQsXG4gICAgICAgIHNwZWMsXG4gICAgICAgIHJlYWRTdGF0ZTogY29uc3RhbnQkMSgnTm8gc3RhdGUnKSxcbiAgICAgICAgc3luY0NvbXBvbmVudHM6IG5vb3AsXG4gICAgICAgIGNvbXBvbmVudHM6IGNvbnN0YW50JDEoW10pLFxuICAgICAgICBldmVudHM6IHt9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHByZW1hZGUkMShtZSk7XG4gICAgfTtcbiAgICBjb25zdCB1aWRzID0gZ2VuZXJhdGUkNTtcbiAgICBjb25zdCBpc1NrZXRjaFNwZWMkMSA9IHNwZWMgPT4gaGFzJDIoc3BlYywgJ3VpZCcpO1xuICAgIGNvbnN0IGJ1aWxkT3JQYXRjaCA9IChzcGVjLCBvYnNvbGV0ZWQpID0+IGdldFByZW1hZGUoc3BlYykuZ2V0T3JUaHVuaygoKSA9PiB7XG4gICAgICBjb25zdCB1c2VyU3BlY1dpdGhVaWQgPSBpc1NrZXRjaFNwZWMkMShzcGVjKSA/IHNwZWMgOiB7XG4gICAgICAgIHVpZDogdWlkcygnJyksXG4gICAgICAgIC4uLnNwZWNcbiAgICAgIH07XG4gICAgICByZXR1cm4gYnVpbGRGcm9tU3BlYyh1c2VyU3BlY1dpdGhVaWQsIG9ic29sZXRlZCkuZ2V0T3JEaWUoKTtcbiAgICB9KTtcbiAgICBjb25zdCBidWlsZCQxID0gc3BlYyA9PiBidWlsZE9yUGF0Y2goc3BlYywgT3B0aW9uYWwubm9uZSgpKTtcbiAgICBjb25zdCBwcmVtYWRlID0gcHJlbWFkZSQxO1xuXG4gICAgdmFyIENsb3Nlc3RPckFuY2VzdG9yID0gKGlzLCBhbmNlc3Rvciwgc2NvcGUsIGEsIGlzUm9vdCkgPT4ge1xuICAgICAgaWYgKGlzKHNjb3BlLCBhKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShzY29wZSk7XG4gICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24oaXNSb290KSAmJiBpc1Jvb3Qoc2NvcGUpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYW5jZXN0b3Ioc2NvcGUsIGEsIGlzUm9vdCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGFuY2VzdG9yJDEgPSAoc2NvcGUsIHByZWRpY2F0ZSwgaXNSb290KSA9PiB7XG4gICAgICBsZXQgZWxlbWVudCA9IHNjb3BlLmRvbTtcbiAgICAgIGNvbnN0IHN0b3AgPSBpc0Z1bmN0aW9uKGlzUm9vdCkgPyBpc1Jvb3QgOiBuZXZlcjtcbiAgICAgIHdoaWxlIChlbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgZWwgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlbGVtZW50KTtcbiAgICAgICAgaWYgKHByZWRpY2F0ZShlbCkpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShlbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RvcChlbCkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGNsb3Nlc3QkMyA9IChzY29wZSwgcHJlZGljYXRlLCBpc1Jvb3QpID0+IHtcbiAgICAgIGNvbnN0IGlzID0gKHMsIHRlc3QpID0+IHRlc3Qocyk7XG4gICAgICByZXR1cm4gQ2xvc2VzdE9yQW5jZXN0b3IoaXMsIGFuY2VzdG9yJDEsIHNjb3BlLCBwcmVkaWNhdGUsIGlzUm9vdCk7XG4gICAgfTtcbiAgICBjb25zdCBjaGlsZCQxID0gKHNjb3BlLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGNvbnN0IHByZWQgPSBub2RlID0+IHByZWRpY2F0ZShTdWdhckVsZW1lbnQuZnJvbURvbShub2RlKSk7XG4gICAgICBjb25zdCByZXN1bHQgPSBmaW5kJDUoc2NvcGUuZG9tLmNoaWxkTm9kZXMsIHByZWQpO1xuICAgICAgcmV0dXJuIHJlc3VsdC5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIH07XG4gICAgY29uc3QgZGVzY2VuZGFudCQxID0gKHNjb3BlLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGNvbnN0IGRlc2NlbmQgPSBub2RlID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjaGlsZCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5vZGUuY2hpbGROb2Rlc1tpXSk7XG4gICAgICAgICAgaWYgKHByZWRpY2F0ZShjaGlsZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGNoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVzID0gZGVzY2VuZChub2RlLmNoaWxkTm9kZXNbaV0pO1xuICAgICAgICAgIGlmIChyZXMuaXNTb21lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGRlc2NlbmQoc2NvcGUuZG9tKTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2xvc2VzdCQyID0gKHNjb3BlLCBwcmVkaWNhdGUsIGlzUm9vdCkgPT4gY2xvc2VzdCQzKHNjb3BlLCBwcmVkaWNhdGUsIGlzUm9vdCkuaXNTb21lKCk7XG5cbiAgICBjb25zdCBhbmNlc3RvciA9IChzY29wZSwgc2VsZWN0b3IsIGlzUm9vdCkgPT4gYW5jZXN0b3IkMShzY29wZSwgZSA9PiBpcyhlLCBzZWxlY3RvciksIGlzUm9vdCk7XG4gICAgY29uc3QgY2hpbGQgPSAoc2NvcGUsIHNlbGVjdG9yKSA9PiBjaGlsZCQxKHNjb3BlLCBlID0+IGlzKGUsIHNlbGVjdG9yKSk7XG4gICAgY29uc3QgZGVzY2VuZGFudCA9IChzY29wZSwgc2VsZWN0b3IpID0+IG9uZShzZWxlY3Rvciwgc2NvcGUpO1xuICAgIGNvbnN0IGNsb3Nlc3QkMSA9IChzY29wZSwgc2VsZWN0b3IsIGlzUm9vdCkgPT4ge1xuICAgICAgY29uc3QgaXMkMSA9IChlbGVtZW50LCBzZWxlY3RvcikgPT4gaXMoZWxlbWVudCwgc2VsZWN0b3IpO1xuICAgICAgcmV0dXJuIENsb3Nlc3RPckFuY2VzdG9yKGlzJDEsIGFuY2VzdG9yLCBzY29wZSwgc2VsZWN0b3IsIGlzUm9vdCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGF0dHJpYnV0ZSA9ICdhcmlhLWNvbnRyb2xzJztcbiAgICBjb25zdCBmaW5kJDEgPSBxdWVyeUVsZW0gPT4ge1xuICAgICAgY29uc3QgZGVwZW5kZW50ID0gY2xvc2VzdCQzKHF1ZXJ5RWxlbSwgZWxlbSA9PiB7XG4gICAgICAgIGlmICghaXNFbGVtZW50JDEoZWxlbSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWQgPSBnZXQkZihlbGVtLCAnaWQnKTtcbiAgICAgICAgcmV0dXJuIGlkICE9PSB1bmRlZmluZWQgJiYgaWQuaW5kZXhPZihhdHRyaWJ1dGUpID4gLTE7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkZXBlbmRlbnQuYmluZChkZXAgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IGdldCRmKGRlcCwgJ2lkJyk7XG4gICAgICAgIGNvbnN0IGRvcyA9IGdldFJvb3ROb2RlKGRlcCk7XG4gICAgICAgIHJldHVybiBkZXNjZW5kYW50KGRvcywgYFskeyBhdHRyaWJ1dGUgfT1cIiR7IGlkIH1cIl1gKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbWFuYWdlciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGFyaWFJZCA9IGdlbmVyYXRlJDYoYXR0cmlidXRlKTtcbiAgICAgIGNvbnN0IGxpbmsgPSBlbGVtID0+IHtcbiAgICAgICAgc2V0JDkoZWxlbSwgYXR0cmlidXRlLCBhcmlhSWQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVubGluayA9IGVsZW0gPT4ge1xuICAgICAgICByZW1vdmUkNyhlbGVtLCBhdHRyaWJ1dGUpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBhcmlhSWQsXG4gICAgICAgIGxpbmssXG4gICAgICAgIHVubGlua1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNBcmlhUGFydE9mID0gKGNvbXBvbmVudCwgcXVlcnlFbGVtKSA9PiBmaW5kJDEocXVlcnlFbGVtKS5leGlzdHMob3duZXIgPT4gaXNQYXJ0T2YkMShjb21wb25lbnQsIG93bmVyKSk7XG4gICAgY29uc3QgaXNQYXJ0T2YkMSA9IChjb21wb25lbnQsIHF1ZXJ5RWxlbSkgPT4gY2xvc2VzdCQyKHF1ZXJ5RWxlbSwgZWwgPT4gZXEoZWwsIGNvbXBvbmVudC5lbGVtZW50KSwgbmV2ZXIpIHx8IGlzQXJpYVBhcnRPZihjb21wb25lbnQsIHF1ZXJ5RWxlbSk7XG5cbiAgICBjb25zdCB1bmtub3duID0gJ3Vua25vd24nO1xuICAgIHZhciBFdmVudENvbmZpZ3VyYXRpb247XG4gICAgKGZ1bmN0aW9uIChFdmVudENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIEV2ZW50Q29uZmlndXJhdGlvbltFdmVudENvbmZpZ3VyYXRpb25bJ1NUT1AnXSA9IDBdID0gJ1NUT1AnO1xuICAgICAgRXZlbnRDb25maWd1cmF0aW9uW0V2ZW50Q29uZmlndXJhdGlvblsnTk9STUFMJ10gPSAxXSA9ICdOT1JNQUwnO1xuICAgICAgRXZlbnRDb25maWd1cmF0aW9uW0V2ZW50Q29uZmlndXJhdGlvblsnTE9HR0lORyddID0gMl0gPSAnTE9HR0lORyc7XG4gICAgfShFdmVudENvbmZpZ3VyYXRpb24gfHwgKEV2ZW50Q29uZmlndXJhdGlvbiA9IHt9KSkpO1xuICAgIGNvbnN0IGV2ZW50Q29uZmlnID0gQ2VsbCh7fSk7XG4gICAgY29uc3QgbWFrZUV2ZW50TG9nZ2VyID0gKGV2ZW50TmFtZSwgaW5pdGlhbFRhcmdldCkgPT4ge1xuICAgICAgY29uc3Qgc2VxdWVuY2UgPSBbXTtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbG9nRXZlbnRDdXQ6IChfbmFtZSwgdGFyZ2V0LCBwdXJwb3NlKSA9PiB7XG4gICAgICAgICAgc2VxdWVuY2UucHVzaCh7XG4gICAgICAgICAgICBvdXRjb21lOiAnY3V0JyxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHB1cnBvc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbG9nRXZlbnRTdG9wcGVkOiAoX25hbWUsIHRhcmdldCwgcHVycG9zZSkgPT4ge1xuICAgICAgICAgIHNlcXVlbmNlLnB1c2goe1xuICAgICAgICAgICAgb3V0Y29tZTogJ3N0b3BwZWQnLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgcHVycG9zZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBsb2dOb1BhcmVudDogKF9uYW1lLCB0YXJnZXQsIHB1cnBvc2UpID0+IHtcbiAgICAgICAgICBzZXF1ZW5jZS5wdXNoKHtcbiAgICAgICAgICAgIG91dGNvbWU6ICduby1wYXJlbnQnLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgcHVycG9zZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBsb2dFdmVudE5vSGFuZGxlcnM6IChfbmFtZSwgdGFyZ2V0KSA9PiB7XG4gICAgICAgICAgc2VxdWVuY2UucHVzaCh7XG4gICAgICAgICAgICBvdXRjb21lOiAnbm8taGFuZGxlcnMtbGVmdCcsXG4gICAgICAgICAgICB0YXJnZXRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbG9nRXZlbnRSZXNwb25zZTogKF9uYW1lLCB0YXJnZXQsIHB1cnBvc2UpID0+IHtcbiAgICAgICAgICBzZXF1ZW5jZS5wdXNoKHtcbiAgICAgICAgICAgIG91dGNvbWU6ICdyZXNwb25zZScsXG4gICAgICAgICAgICBwdXJwb3NlLFxuICAgICAgICAgICAgdGFyZ2V0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHdyaXRlOiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmluaXNoVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgIGlmIChjb250YWlucyQyKFtcbiAgICAgICAgICAgICAgJ21vdXNlbW92ZScsXG4gICAgICAgICAgICAgICdtb3VzZW92ZXInLFxuICAgICAgICAgICAgICAnbW91c2VvdXQnLFxuICAgICAgICAgICAgICBzeXN0ZW1Jbml0KClcbiAgICAgICAgICAgIF0sIGV2ZW50TmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5sb2coZXZlbnROYW1lLCB7XG4gICAgICAgICAgICBldmVudDogZXZlbnROYW1lLFxuICAgICAgICAgICAgdGltZTogZmluaXNoVGltZSAtIHN0YXJ0VGltZSxcbiAgICAgICAgICAgIHRhcmdldDogaW5pdGlhbFRhcmdldC5kb20sXG4gICAgICAgICAgICBzZXF1ZW5jZTogbWFwJDIoc2VxdWVuY2UsIHMgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNvbnRhaW5zJDIoW1xuICAgICAgICAgICAgICAgICAgJ2N1dCcsXG4gICAgICAgICAgICAgICAgICAnc3RvcHBlZCcsXG4gICAgICAgICAgICAgICAgICAncmVzcG9uc2UnXG4gICAgICAgICAgICAgICAgXSwgcy5vdXRjb21lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzLm91dGNvbWU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd7JyArIHMucHVycG9zZSArICd9ICcgKyBzLm91dGNvbWUgKyAnIGF0ICgnICsgZWxlbWVudChzLnRhcmdldCkgKyAnKSc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBwcm9jZXNzRXZlbnQgPSAoZXZlbnROYW1lLCBpbml0aWFsVGFyZ2V0LCBmKSA9PiB7XG4gICAgICBjb25zdCBzdGF0dXMgPSBnZXQkZyhldmVudENvbmZpZy5nZXQoKSwgZXZlbnROYW1lKS5vclRodW5rKCgpID0+IHtcbiAgICAgICAgY29uc3QgcGF0dGVybnMgPSBrZXlzKGV2ZW50Q29uZmlnLmdldCgpKTtcbiAgICAgICAgcmV0dXJuIGZpbmRNYXAocGF0dGVybnMsIHAgPT4gZXZlbnROYW1lLmluZGV4T2YocCkgPiAtMSA/IE9wdGlvbmFsLnNvbWUoZXZlbnRDb25maWcuZ2V0KClbcF0pIDogT3B0aW9uYWwubm9uZSgpKTtcbiAgICAgIH0pLmdldE9yKEV2ZW50Q29uZmlndXJhdGlvbi5OT1JNQUwpO1xuICAgICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgRXZlbnRDb25maWd1cmF0aW9uLk5PUk1BTDpcbiAgICAgICAgcmV0dXJuIGYobm9Mb2dnZXIoKSk7XG4gICAgICBjYXNlIEV2ZW50Q29uZmlndXJhdGlvbi5MT0dHSU5HOiB7XG4gICAgICAgICAgY29uc3QgbG9nZ2VyID0gbWFrZUV2ZW50TG9nZ2VyKGV2ZW50TmFtZSwgaW5pdGlhbFRhcmdldCk7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0ID0gZihsb2dnZXIpO1xuICAgICAgICAgIGxvZ2dlci53cml0ZSgpO1xuICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgRXZlbnRDb25maWd1cmF0aW9uLlNUT1A6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcGF0aCA9IFtcbiAgICAgICdhbGxveS9kYXRhL0ZpZWxkcycsXG4gICAgICAnYWxsb3kvZGVidWdnaW5nL0RlYnVnZ2luZydcbiAgICBdO1xuICAgIGNvbnN0IGdldFRyYWNlID0gKCkgPT4ge1xuICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKCk7XG4gICAgICBpZiAoZXJyLnN0YWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgbGluZXMgPSBlcnIuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgICByZXR1cm4gZmluZCQ1KGxpbmVzLCBsaW5lID0+IGxpbmUuaW5kZXhPZignYWxsb3knKSA+IDAgJiYgIWV4aXN0cyhwYXRoLCBwID0+IGxpbmUuaW5kZXhPZihwKSA+IC0xKSkuZ2V0T3IodW5rbm93bik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5rbm93bjtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlnbm9yZUV2ZW50ID0ge1xuICAgICAgbG9nRXZlbnRDdXQ6IG5vb3AsXG4gICAgICBsb2dFdmVudFN0b3BwZWQ6IG5vb3AsXG4gICAgICBsb2dOb1BhcmVudDogbm9vcCxcbiAgICAgIGxvZ0V2ZW50Tm9IYW5kbGVyczogbm9vcCxcbiAgICAgIGxvZ0V2ZW50UmVzcG9uc2U6IG5vb3AsXG4gICAgICB3cml0ZTogbm9vcFxuICAgIH07XG4gICAgY29uc3QgbW9uaXRvckV2ZW50ID0gKGV2ZW50TmFtZSwgaW5pdGlhbFRhcmdldCwgZikgPT4gcHJvY2Vzc0V2ZW50KGV2ZW50TmFtZSwgaW5pdGlhbFRhcmdldCwgZik7XG4gICAgY29uc3Qgbm9Mb2dnZXIgPSBjb25zdGFudCQxKGlnbm9yZUV2ZW50KTtcblxuICAgIGNvbnN0IG1lbnVGaWVsZHMgPSBjb25zdGFudCQxKFtcbiAgICAgIHJlcXVpcmVkJDEoJ21lbnUnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ3NlbGVjdGVkTWVudScpXG4gICAgXSk7XG4gICAgY29uc3QgaXRlbUZpZWxkcyA9IGNvbnN0YW50JDEoW1xuICAgICAgcmVxdWlyZWQkMSgnaXRlbScpLFxuICAgICAgcmVxdWlyZWQkMSgnc2VsZWN0ZWRJdGVtJylcbiAgICBdKTtcbiAgICBjb25zdGFudCQxKG9iak9mKGl0ZW1GaWVsZHMoKS5jb25jYXQobWVudUZpZWxkcygpKSkpO1xuICAgIGNvbnN0IGl0ZW1TY2hlbWEkMyA9IGNvbnN0YW50JDEob2JqT2YoaXRlbUZpZWxkcygpKSk7XG5cbiAgICBjb25zdCBfaW5pdFNpemUgPSByZXF1aXJlZE9iak9mKCdpbml0U2l6ZScsIFtcbiAgICAgIHJlcXVpcmVkJDEoJ251bUNvbHVtbnMnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ251bVJvd3MnKVxuICAgIF0pO1xuICAgIGNvbnN0IGl0ZW1NYXJrZXJzID0gKCkgPT4gcmVxdWlyZWRPZignbWFya2VycycsIGl0ZW1TY2hlbWEkMygpKTtcbiAgICBjb25zdCB0aWVyZWRNZW51TWFya2VycyA9ICgpID0+IHJlcXVpcmVkT2JqT2YoJ21hcmtlcnMnLCBbcmVxdWlyZWQkMSgnYmFja2dyb3VuZE1lbnUnKV0uY29uY2F0KG1lbnVGaWVsZHMoKSkuY29uY2F0KGl0ZW1GaWVsZHMoKSkpO1xuICAgIGNvbnN0IG1hcmtlcnMkMSA9IHJlcXVpcmVkID0+IHJlcXVpcmVkT2JqT2YoJ21hcmtlcnMnLCBtYXAkMihyZXF1aXJlZCwgcmVxdWlyZWQkMSkpO1xuICAgIGNvbnN0IG9uUHJlc2VuY2VIYW5kbGVyID0gKGxhYmVsLCBmaWVsZE5hbWUsIHByZXNlbmNlKSA9PiB7XG4gICAgICBnZXRUcmFjZSgpO1xuICAgICAgcmV0dXJuIGZpZWxkJDEoZmllbGROYW1lLCBmaWVsZE5hbWUsIHByZXNlbmNlLCB2YWx1ZU9mKGYgPT4gUmVzdWx0LnZhbHVlKCguLi5hcmdzKSA9PiB7XG4gICAgICAgIHJldHVybiBmLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICB9KSkpO1xuICAgIH07XG4gICAgY29uc3Qgb25IYW5kbGVyID0gZmllbGROYW1lID0+IG9uUHJlc2VuY2VIYW5kbGVyKCdvbkhhbmRsZXInLCBmaWVsZE5hbWUsIGRlZmF1bHRlZCQxKG5vb3ApKTtcbiAgICBjb25zdCBvbktleWJvYXJkSGFuZGxlciA9IGZpZWxkTmFtZSA9PiBvblByZXNlbmNlSGFuZGxlcignb25LZXlib2FyZEhhbmRsZXInLCBmaWVsZE5hbWUsIGRlZmF1bHRlZCQxKE9wdGlvbmFsLm5vbmUpKTtcbiAgICBjb25zdCBvblN0cmljdEhhbmRsZXIgPSBmaWVsZE5hbWUgPT4gb25QcmVzZW5jZUhhbmRsZXIoJ29uSGFuZGxlcicsIGZpZWxkTmFtZSwgcmVxdWlyZWQkMigpKTtcbiAgICBjb25zdCBvblN0cmljdEtleWJvYXJkSGFuZGxlciA9IGZpZWxkTmFtZSA9PiBvblByZXNlbmNlSGFuZGxlcignb25LZXlib2FyZEhhbmRsZXInLCBmaWVsZE5hbWUsIHJlcXVpcmVkJDIoKSk7XG4gICAgY29uc3Qgb3V0cHV0JDEgPSAobmFtZSwgdmFsdWUpID0+IGN1c3RvbUZpZWxkKG5hbWUsIGNvbnN0YW50JDEodmFsdWUpKTtcbiAgICBjb25zdCBzbmFwc2hvdCA9IG5hbWUgPT4gY3VzdG9tRmllbGQobmFtZSwgaWRlbnRpdHkpO1xuICAgIGNvbnN0IGluaXRTaXplID0gY29uc3RhbnQkMShfaW5pdFNpemUpO1xuXG4gICAgY29uc3QgbnUkNiA9ICh4LCB5LCBidWJibGUsIGRpcmVjdGlvbiwgcGxhY2VtZW50LCBib3VuZHNSZXN0cmljdGlvbiwgbGFiZWxQcmVmaXgsIGFsd2F5c0ZpdCA9IGZhbHNlKSA9PiAoe1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBidWJibGUsXG4gICAgICBkaXJlY3Rpb24sXG4gICAgICBwbGFjZW1lbnQsXG4gICAgICByZXN0cmljdGlvbjogYm91bmRzUmVzdHJpY3Rpb24sXG4gICAgICBsYWJlbDogYCR7IGxhYmVsUHJlZml4IH0tJHsgcGxhY2VtZW50IH1gLFxuICAgICAgYWx3YXlzRml0XG4gICAgfSk7XG5cbiAgICBjb25zdCBhZHQkYSA9IEFkdC5nZW5lcmF0ZShbXG4gICAgICB7IHNvdXRoZWFzdDogW10gfSxcbiAgICAgIHsgc291dGh3ZXN0OiBbXSB9LFxuICAgICAgeyBub3J0aGVhc3Q6IFtdIH0sXG4gICAgICB7IG5vcnRod2VzdDogW10gfSxcbiAgICAgIHsgc291dGg6IFtdIH0sXG4gICAgICB7IG5vcnRoOiBbXSB9LFxuICAgICAgeyBlYXN0OiBbXSB9LFxuICAgICAgeyB3ZXN0OiBbXSB9XG4gICAgXSk7XG4gICAgY29uc3QgY2F0YSQyID0gKHN1YmplY3QsIHNvdXRoZWFzdCwgc291dGh3ZXN0LCBub3J0aGVhc3QsIG5vcnRod2VzdCwgc291dGgsIG5vcnRoLCBlYXN0LCB3ZXN0KSA9PiBzdWJqZWN0LmZvbGQoc291dGhlYXN0LCBzb3V0aHdlc3QsIG5vcnRoZWFzdCwgbm9ydGh3ZXN0LCBzb3V0aCwgbm9ydGgsIGVhc3QsIHdlc3QpO1xuICAgIGNvbnN0IGNhdGFWZXJ0aWNhbCA9IChzdWJqZWN0LCBzb3V0aCwgbWlkZGxlLCBub3J0aCkgPT4gc3ViamVjdC5mb2xkKHNvdXRoLCBzb3V0aCwgbm9ydGgsIG5vcnRoLCBzb3V0aCwgbm9ydGgsIG1pZGRsZSwgbWlkZGxlKTtcbiAgICBjb25zdCBjYXRhSG9yaXpvbnRhbCA9IChzdWJqZWN0LCBlYXN0LCBtaWRkbGUsIHdlc3QpID0+IHN1YmplY3QuZm9sZChlYXN0LCB3ZXN0LCBlYXN0LCB3ZXN0LCBtaWRkbGUsIG1pZGRsZSwgZWFzdCwgd2VzdCk7XG4gICAgY29uc3Qgc291dGhlYXN0JDMgPSBhZHQkYS5zb3V0aGVhc3Q7XG4gICAgY29uc3Qgc291dGh3ZXN0JDMgPSBhZHQkYS5zb3V0aHdlc3Q7XG4gICAgY29uc3Qgbm9ydGhlYXN0JDMgPSBhZHQkYS5ub3J0aGVhc3Q7XG4gICAgY29uc3Qgbm9ydGh3ZXN0JDMgPSBhZHQkYS5ub3J0aHdlc3Q7XG4gICAgY29uc3Qgc291dGgkMyA9IGFkdCRhLnNvdXRoO1xuICAgIGNvbnN0IG5vcnRoJDMgPSBhZHQkYS5ub3J0aDtcbiAgICBjb25zdCBlYXN0JDMgPSBhZHQkYS5lYXN0O1xuICAgIGNvbnN0IHdlc3QkMyA9IGFkdCRhLndlc3Q7XG5cbiAgICBjb25zdCBjeWNsZUJ5ID0gKHZhbHVlLCBkZWx0YSwgbWluLCBtYXgpID0+IHtcbiAgICAgIGNvbnN0IHIgPSB2YWx1ZSArIGRlbHRhO1xuICAgICAgaWYgKHIgPiBtYXgpIHtcbiAgICAgICAgcmV0dXJuIG1pbjtcbiAgICAgIH0gZWxzZSBpZiAociA8IG1pbikge1xuICAgICAgICByZXR1cm4gbWF4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjbGFtcCA9ICh2YWx1ZSwgbWluLCBtYXgpID0+IE1hdGgubWluKE1hdGgubWF4KHZhbHVlLCBtaW4pLCBtYXgpO1xuXG4gICAgY29uc3QgZ2V0UmVzdHJpY3Rpb24gPSAoYW5jaG9yLCByZXN0cmljdGlvbikgPT4ge1xuICAgICAgc3dpdGNoIChyZXN0cmljdGlvbikge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gYW5jaG9yLng7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJldHVybiBhbmNob3IueCArIGFuY2hvci53aWR0aDtcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIGFuY2hvci55O1xuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gYW5jaG9yLnkgKyBhbmNob3IuaGVpZ2h0O1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYm91bmRzUmVzdHJpY3Rpb24gPSAoYW5jaG9yLCByZXN0cmljdGlvbnMpID0+IG1hcFRvT2JqZWN0KFtcbiAgICAgICdsZWZ0JyxcbiAgICAgICdyaWdodCcsXG4gICAgICAndG9wJyxcbiAgICAgICdib3R0b20nXG4gICAgXSwgZGlyID0+IGdldCRnKHJlc3RyaWN0aW9ucywgZGlyKS5tYXAocmVzdHJpY3Rpb24gPT4gZ2V0UmVzdHJpY3Rpb24oYW5jaG9yLCByZXN0cmljdGlvbikpKTtcbiAgICBjb25zdCBhZGp1c3RCb3VuZHMgPSAoYm91bmRzJDEsIHJlc3RyaWN0aW9uLCBidWJibGVPZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IGFwcGx5UmVzdHJpY3Rpb24gPSAoZGlyLCBjdXJyZW50KSA9PiByZXN0cmljdGlvbltkaXJdLm1hcChwb3MgPT4ge1xuICAgICAgICBjb25zdCBpc1ZlcnRpY2FsQXhpcyA9IGRpciA9PT0gJ3RvcCcgfHwgZGlyID09PSAnYm90dG9tJztcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gaXNWZXJ0aWNhbEF4aXMgPyBidWJibGVPZmZzZXQudG9wIDogYnViYmxlT2Zmc2V0LmxlZnQ7XG4gICAgICAgIGNvbnN0IGNvbXBhcmF0b3IgPSBkaXIgPT09ICdsZWZ0JyB8fCBkaXIgPT09ICd0b3AnID8gTWF0aC5tYXggOiBNYXRoLm1pbjtcbiAgICAgICAgY29uc3QgbmV3UG9zID0gY29tcGFyYXRvcihwb3MsIGN1cnJlbnQpICsgb2Zmc2V0O1xuICAgICAgICByZXR1cm4gaXNWZXJ0aWNhbEF4aXMgPyBjbGFtcChuZXdQb3MsIGJvdW5kcyQxLnksIGJvdW5kcyQxLmJvdHRvbSkgOiBjbGFtcChuZXdQb3MsIGJvdW5kcyQxLngsIGJvdW5kcyQxLnJpZ2h0KTtcbiAgICAgIH0pLmdldE9yKGN1cnJlbnQpO1xuICAgICAgY29uc3QgYWRqdXN0ZWRMZWZ0ID0gYXBwbHlSZXN0cmljdGlvbignbGVmdCcsIGJvdW5kcyQxLngpO1xuICAgICAgY29uc3QgYWRqdXN0ZWRUb3AgPSBhcHBseVJlc3RyaWN0aW9uKCd0b3AnLCBib3VuZHMkMS55KTtcbiAgICAgIGNvbnN0IGFkanVzdGVkUmlnaHQgPSBhcHBseVJlc3RyaWN0aW9uKCdyaWdodCcsIGJvdW5kcyQxLnJpZ2h0KTtcbiAgICAgIGNvbnN0IGFkanVzdGVkQm90dG9tID0gYXBwbHlSZXN0cmljdGlvbignYm90dG9tJywgYm91bmRzJDEuYm90dG9tKTtcbiAgICAgIHJldHVybiBib3VuZHMoYWRqdXN0ZWRMZWZ0LCBhZGp1c3RlZFRvcCwgYWRqdXN0ZWRSaWdodCAtIGFkanVzdGVkTGVmdCwgYWRqdXN0ZWRCb3R0b20gLSBhZGp1c3RlZFRvcCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsUHJlZml4JDIgPSAnbGF5b3V0JztcbiAgICBjb25zdCBlYXN0WCQxID0gYW5jaG9yID0+IGFuY2hvci54O1xuICAgIGNvbnN0IG1pZGRsZVgkMSA9IChhbmNob3IsIGVsZW1lbnQpID0+IGFuY2hvci54ICsgYW5jaG9yLndpZHRoIC8gMiAtIGVsZW1lbnQud2lkdGggLyAyO1xuICAgIGNvbnN0IHdlc3RYJDEgPSAoYW5jaG9yLCBlbGVtZW50KSA9PiBhbmNob3IueCArIGFuY2hvci53aWR0aCAtIGVsZW1lbnQud2lkdGg7XG4gICAgY29uc3Qgbm9ydGhZJDIgPSAoYW5jaG9yLCBlbGVtZW50KSA9PiBhbmNob3IueSAtIGVsZW1lbnQuaGVpZ2h0O1xuICAgIGNvbnN0IHNvdXRoWSQyID0gYW5jaG9yID0+IGFuY2hvci55ICsgYW5jaG9yLmhlaWdodDtcbiAgICBjb25zdCBjZW50cmVZJDEgPSAoYW5jaG9yLCBlbGVtZW50KSA9PiBhbmNob3IueSArIGFuY2hvci5oZWlnaHQgLyAyIC0gZWxlbWVudC5oZWlnaHQgLyAyO1xuICAgIGNvbnN0IGVhc3RFZGdlWCQxID0gYW5jaG9yID0+IGFuY2hvci54ICsgYW5jaG9yLndpZHRoO1xuICAgIGNvbnN0IHdlc3RFZGdlWCQxID0gKGFuY2hvciwgZWxlbWVudCkgPT4gYW5jaG9yLnggLSBlbGVtZW50LndpZHRoO1xuICAgIGNvbnN0IHNvdXRoZWFzdCQyID0gKGFuY2hvciwgZWxlbWVudCwgYnViYmxlcykgPT4gbnUkNihlYXN0WCQxKGFuY2hvciksIHNvdXRoWSQyKGFuY2hvciksIGJ1YmJsZXMuc291dGhlYXN0KCksIHNvdXRoZWFzdCQzKCksICdzb3V0aGVhc3QnLCBib3VuZHNSZXN0cmljdGlvbihhbmNob3IsIHtcbiAgICAgIGxlZnQ6IDEsXG4gICAgICB0b3A6IDNcbiAgICB9KSwgbGFiZWxQcmVmaXgkMik7XG4gICAgY29uc3Qgc291dGh3ZXN0JDIgPSAoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzKSA9PiBudSQ2KHdlc3RYJDEoYW5jaG9yLCBlbGVtZW50KSwgc291dGhZJDIoYW5jaG9yKSwgYnViYmxlcy5zb3V0aHdlc3QoKSwgc291dGh3ZXN0JDMoKSwgJ3NvdXRod2VzdCcsIGJvdW5kc1Jlc3RyaWN0aW9uKGFuY2hvciwge1xuICAgICAgcmlnaHQ6IDAsXG4gICAgICB0b3A6IDNcbiAgICB9KSwgbGFiZWxQcmVmaXgkMik7XG4gICAgY29uc3Qgbm9ydGhlYXN0JDIgPSAoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzKSA9PiBudSQ2KGVhc3RYJDEoYW5jaG9yKSwgbm9ydGhZJDIoYW5jaG9yLCBlbGVtZW50KSwgYnViYmxlcy5ub3J0aGVhc3QoKSwgbm9ydGhlYXN0JDMoKSwgJ25vcnRoZWFzdCcsIGJvdW5kc1Jlc3RyaWN0aW9uKGFuY2hvciwge1xuICAgICAgbGVmdDogMSxcbiAgICAgIGJvdHRvbTogMlxuICAgIH0pLCBsYWJlbFByZWZpeCQyKTtcbiAgICBjb25zdCBub3J0aHdlc3QkMiA9IChhbmNob3IsIGVsZW1lbnQsIGJ1YmJsZXMpID0+IG51JDYod2VzdFgkMShhbmNob3IsIGVsZW1lbnQpLCBub3J0aFkkMihhbmNob3IsIGVsZW1lbnQpLCBidWJibGVzLm5vcnRod2VzdCgpLCBub3J0aHdlc3QkMygpLCAnbm9ydGh3ZXN0JywgYm91bmRzUmVzdHJpY3Rpb24oYW5jaG9yLCB7XG4gICAgICByaWdodDogMCxcbiAgICAgIGJvdHRvbTogMlxuICAgIH0pLCBsYWJlbFByZWZpeCQyKTtcbiAgICBjb25zdCBub3J0aCQyID0gKGFuY2hvciwgZWxlbWVudCwgYnViYmxlcykgPT4gbnUkNihtaWRkbGVYJDEoYW5jaG9yLCBlbGVtZW50KSwgbm9ydGhZJDIoYW5jaG9yLCBlbGVtZW50KSwgYnViYmxlcy5ub3J0aCgpLCBub3J0aCQzKCksICdub3J0aCcsIGJvdW5kc1Jlc3RyaWN0aW9uKGFuY2hvciwgeyBib3R0b206IDIgfSksIGxhYmVsUHJlZml4JDIpO1xuICAgIGNvbnN0IHNvdXRoJDIgPSAoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzKSA9PiBudSQ2KG1pZGRsZVgkMShhbmNob3IsIGVsZW1lbnQpLCBzb3V0aFkkMihhbmNob3IpLCBidWJibGVzLnNvdXRoKCksIHNvdXRoJDMoKSwgJ3NvdXRoJywgYm91bmRzUmVzdHJpY3Rpb24oYW5jaG9yLCB7IHRvcDogMyB9KSwgbGFiZWxQcmVmaXgkMik7XG4gICAgY29uc3QgZWFzdCQyID0gKGFuY2hvciwgZWxlbWVudCwgYnViYmxlcykgPT4gbnUkNihlYXN0RWRnZVgkMShhbmNob3IpLCBjZW50cmVZJDEoYW5jaG9yLCBlbGVtZW50KSwgYnViYmxlcy5lYXN0KCksIGVhc3QkMygpLCAnZWFzdCcsIGJvdW5kc1Jlc3RyaWN0aW9uKGFuY2hvciwgeyBsZWZ0OiAwIH0pLCBsYWJlbFByZWZpeCQyKTtcbiAgICBjb25zdCB3ZXN0JDIgPSAoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzKSA9PiBudSQ2KHdlc3RFZGdlWCQxKGFuY2hvciwgZWxlbWVudCksIGNlbnRyZVkkMShhbmNob3IsIGVsZW1lbnQpLCBidWJibGVzLndlc3QoKSwgd2VzdCQzKCksICd3ZXN0JywgYm91bmRzUmVzdHJpY3Rpb24oYW5jaG9yLCB7IHJpZ2h0OiAxIH0pLCBsYWJlbFByZWZpeCQyKTtcbiAgICBjb25zdCBhbGwkMSA9ICgpID0+IFtcbiAgICAgIHNvdXRoZWFzdCQyLFxuICAgICAgc291dGh3ZXN0JDIsXG4gICAgICBub3J0aGVhc3QkMixcbiAgICAgIG5vcnRod2VzdCQyLFxuICAgICAgc291dGgkMixcbiAgICAgIG5vcnRoJDIsXG4gICAgICBlYXN0JDIsXG4gICAgICB3ZXN0JDJcbiAgICBdO1xuICAgIGNvbnN0IGFsbFJ0bCQxID0gKCkgPT4gW1xuICAgICAgc291dGh3ZXN0JDIsXG4gICAgICBzb3V0aGVhc3QkMixcbiAgICAgIG5vcnRod2VzdCQyLFxuICAgICAgbm9ydGhlYXN0JDIsXG4gICAgICBzb3V0aCQyLFxuICAgICAgbm9ydGgkMixcbiAgICAgIGVhc3QkMixcbiAgICAgIHdlc3QkMlxuICAgIF07XG4gICAgY29uc3QgYWJvdmVPckJlbG93ID0gKCkgPT4gW1xuICAgICAgbm9ydGhlYXN0JDIsXG4gICAgICBub3J0aHdlc3QkMixcbiAgICAgIHNvdXRoZWFzdCQyLFxuICAgICAgc291dGh3ZXN0JDIsXG4gICAgICBub3J0aCQyLFxuICAgICAgc291dGgkMlxuICAgIF07XG4gICAgY29uc3QgYWJvdmVPckJlbG93UnRsID0gKCkgPT4gW1xuICAgICAgbm9ydGh3ZXN0JDIsXG4gICAgICBub3J0aGVhc3QkMixcbiAgICAgIHNvdXRod2VzdCQyLFxuICAgICAgc291dGhlYXN0JDIsXG4gICAgICBub3J0aCQyLFxuICAgICAgc291dGgkMlxuICAgIF07XG4gICAgY29uc3QgYmVsb3dPckFib3ZlID0gKCkgPT4gW1xuICAgICAgc291dGhlYXN0JDIsXG4gICAgICBzb3V0aHdlc3QkMixcbiAgICAgIG5vcnRoZWFzdCQyLFxuICAgICAgbm9ydGh3ZXN0JDIsXG4gICAgICBzb3V0aCQyLFxuICAgICAgbm9ydGgkMlxuICAgIF07XG4gICAgY29uc3QgYmVsb3dPckFib3ZlUnRsID0gKCkgPT4gW1xuICAgICAgc291dGh3ZXN0JDIsXG4gICAgICBzb3V0aGVhc3QkMixcbiAgICAgIG5vcnRod2VzdCQyLFxuICAgICAgbm9ydGhlYXN0JDIsXG4gICAgICBzb3V0aCQyLFxuICAgICAgbm9ydGgkMlxuICAgIF07XG5cbiAgICBjb25zdCBjaG9vc2VDaGFubmVscyA9IChjaGFubmVscywgbWVzc2FnZSkgPT4gbWVzc2FnZS51bml2ZXJzYWwgPyBjaGFubmVscyA6IGZpbHRlciQyKGNoYW5uZWxzLCBjaCA9PiBjb250YWlucyQyKG1lc3NhZ2UuY2hhbm5lbHMsIGNoKSk7XG4gICAgY29uc3QgZXZlbnRzJGggPSByZWNlaXZlQ29uZmlnID0+IGRlcml2ZSQyKFtydW4kMShyZWNlaXZlKCksIChjb21wb25lbnQsIG1lc3NhZ2UpID0+IHtcbiAgICAgICAgY29uc3QgY2hhbm5lbE1hcCA9IHJlY2VpdmVDb25maWcuY2hhbm5lbHM7XG4gICAgICAgIGNvbnN0IGNoYW5uZWxzID0ga2V5cyhjaGFubmVsTWFwKTtcbiAgICAgICAgY29uc3QgcmVjZWl2aW5nRGF0YSA9IG1lc3NhZ2U7XG4gICAgICAgIGNvbnN0IHRhcmdldENoYW5uZWxzID0gY2hvb3NlQ2hhbm5lbHMoY2hhbm5lbHMsIHJlY2VpdmluZ0RhdGEpO1xuICAgICAgICBlYWNoJDEodGFyZ2V0Q2hhbm5lbHMsIGNoID0+IHtcbiAgICAgICAgICBjb25zdCBjaGFubmVsSW5mbyA9IGNoYW5uZWxNYXBbY2hdO1xuICAgICAgICAgIGNvbnN0IGNoYW5uZWxTY2hlbWEgPSBjaGFubmVsSW5mby5zY2hlbWE7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IGFzUmF3T3JEaWUkMSgnY2hhbm5lbFsnICsgY2ggKyAnXSBkYXRhXFxuUmVjZWl2ZXI6ICcgKyBlbGVtZW50KGNvbXBvbmVudC5lbGVtZW50KSwgY2hhbm5lbFNjaGVtYSwgcmVjZWl2aW5nRGF0YS5kYXRhKTtcbiAgICAgICAgICBjaGFubmVsSW5mby5vblJlY2VpdmUoY29tcG9uZW50LCBkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICB9KV0pO1xuXG4gICAgdmFyIEFjdGl2ZVJlY2VpdmluZyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBldmVudHM6IGV2ZW50cyRoXG4gICAgfSk7XG5cbiAgICB2YXIgUmVjZWl2aW5nU2NoZW1hID0gW3JlcXVpcmVkT2YoJ2NoYW5uZWxzJywgc2V0T2YoUmVzdWx0LnZhbHVlLCBvYmpPZk9ubHkoW1xuICAgICAgICBvblN0cmljdEhhbmRsZXIoJ29uUmVjZWl2ZScpLFxuICAgICAgICBkZWZhdWx0ZWQoJ3NjaGVtYScsIGFueVZhbHVlKCkpXG4gICAgICBdKSkpXTtcblxuICAgIGNvbnN0IGV4ZWN1dGVFdmVudCA9IChiQ29uZmlnLCBiU3RhdGUsIGV4ZWN1dG9yKSA9PiBydW5PbkV4ZWN1dGUkMShjb21wb25lbnQgPT4ge1xuICAgICAgZXhlY3V0b3IoY29tcG9uZW50LCBiQ29uZmlnLCBiU3RhdGUpO1xuICAgIH0pO1xuICAgIGNvbnN0IGxvYWRFdmVudCA9IChiQ29uZmlnLCBiU3RhdGUsIGYpID0+IHJ1bk9uSW5pdCgoY29tcG9uZW50LCBfc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgIGYoY29tcG9uZW50LCBiQ29uZmlnLCBiU3RhdGUpO1xuICAgIH0pO1xuICAgIGNvbnN0IGNyZWF0ZSQ1ID0gKHNjaGVtYSwgbmFtZSwgYWN0aXZlLCBhcGlzLCBleHRyYSwgc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpZ1NjaGVtYSA9IG9iak9mT25seShzY2hlbWEpO1xuICAgICAgY29uc3Qgc2NoZW1hU2NoZW1hID0gb3B0aW9uT2JqT2YobmFtZSwgW29wdGlvbk9iak9mT25seSgnY29uZmlnJywgc2NoZW1hKV0pO1xuICAgICAgcmV0dXJuIGRvQ3JlYXRlKGNvbmZpZ1NjaGVtYSwgc2NoZW1hU2NoZW1hLCBuYW1lLCBhY3RpdmUsIGFwaXMsIGV4dHJhLCBzdGF0ZSk7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVNb2RlcyQxID0gKG1vZGVzLCBuYW1lLCBhY3RpdmUsIGFwaXMsIGV4dHJhLCBzdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnU2NoZW1hID0gbW9kZXM7XG4gICAgICBjb25zdCBzY2hlbWFTY2hlbWEgPSBvcHRpb25PYmpPZihuYW1lLCBbb3B0aW9uT2YoJ2NvbmZpZycsIG1vZGVzKV0pO1xuICAgICAgcmV0dXJuIGRvQ3JlYXRlKGNvbmZpZ1NjaGVtYSwgc2NoZW1hU2NoZW1hLCBuYW1lLCBhY3RpdmUsIGFwaXMsIGV4dHJhLCBzdGF0ZSk7XG4gICAgfTtcbiAgICBjb25zdCB3cmFwQXBpID0gKGJOYW1lLCBhcGlGdW5jdGlvbiwgYXBpTmFtZSkgPT4ge1xuICAgICAgY29uc3QgZiA9IChjb21wb25lbnQsIC4uLnJlc3QpID0+IHtcbiAgICAgICAgY29uc3QgYXJncyA9IFtjb21wb25lbnRdLmNvbmNhdChyZXN0KTtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5jb25maWcoeyBuYW1lOiBjb25zdGFudCQxKGJOYW1lKSB9KS5mb2xkKCgpID0+IHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlIGNvdWxkIG5vdCBmaW5kIGFueSBiZWhhdmlvdXIgY29uZmlndXJhdGlvbiBmb3I6ICcgKyBiTmFtZSArICcuIFVzaW5nIEFQSTogJyArIGFwaU5hbWUpO1xuICAgICAgICB9LCBpbmZvID0+IHtcbiAgICAgICAgICBjb25zdCByZXN0ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncywgMSk7XG4gICAgICAgICAgcmV0dXJuIGFwaUZ1bmN0aW9uLmFwcGx5KHVuZGVmaW5lZCwgW1xuICAgICAgICAgICAgY29tcG9uZW50LFxuICAgICAgICAgICAgaW5mby5jb25maWcsXG4gICAgICAgICAgICBpbmZvLnN0YXRlXG4gICAgICAgICAgXS5jb25jYXQocmVzdCkpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gbWFya0FzQmVoYXZpb3VyQXBpKGYsIGFwaU5hbWUsIGFwaUZ1bmN0aW9uKTtcbiAgICB9O1xuICAgIGNvbnN0IHJldm9rZUJlaGF2aW91ciA9IG5hbWUgPT4gKHtcbiAgICAgIGtleTogbmFtZSxcbiAgICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgICBjb25zdCBkb0NyZWF0ZSA9IChjb25maWdTY2hlbWEsIHNjaGVtYVNjaGVtYSwgbmFtZSwgYWN0aXZlLCBhcGlzLCBleHRyYSwgc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGdldENvbmZpZyA9IGluZm8gPT4gaGFzTm9uTnVsbGFibGVLZXkoaW5mbywgbmFtZSkgPyBpbmZvW25hbWVdKCkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICBjb25zdCB3cmFwcGVkQXBpcyA9IG1hcCQxKGFwaXMsIChhcGlGLCBhcGlOYW1lKSA9PiB3cmFwQXBpKG5hbWUsIGFwaUYsIGFwaU5hbWUpKTtcbiAgICAgIGNvbnN0IHdyYXBwZWRFeHRyYSA9IG1hcCQxKGV4dHJhLCAoZXh0cmFGLCBleHRyYU5hbWUpID0+IG1hcmtBc0V4dHJhQXBpKGV4dHJhRiwgZXh0cmFOYW1lKSk7XG4gICAgICBjb25zdCBtZSA9IHtcbiAgICAgICAgLi4ud3JhcHBlZEV4dHJhLFxuICAgICAgICAuLi53cmFwcGVkQXBpcyxcbiAgICAgICAgcmV2b2tlOiBjdXJyeShyZXZva2VCZWhhdmlvdXIsIG5hbWUpLFxuICAgICAgICBjb25maWc6IHNwZWMgPT4ge1xuICAgICAgICAgIGNvbnN0IHByZXBhcmVkID0gYXNSYXdPckRpZSQxKG5hbWUgKyAnLWNvbmZpZycsIGNvbmZpZ1NjaGVtYSwgc3BlYyk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtleTogbmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgIGNvbmZpZzogcHJlcGFyZWQsXG4gICAgICAgICAgICAgIG1lLFxuICAgICAgICAgICAgICBjb25maWdBc1JhdzogY2FjaGVkKCgpID0+IGFzUmF3T3JEaWUkMShuYW1lICsgJy1jb25maWcnLCBjb25maWdTY2hlbWEsIHNwZWMpKSxcbiAgICAgICAgICAgICAgaW5pdGlhbENvbmZpZzogc3BlYyxcbiAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBzY2hlbWE6IGNvbnN0YW50JDEoc2NoZW1hU2NoZW1hKSxcbiAgICAgICAgZXhoaWJpdDogKGluZm8sIGJhc2UpID0+IHtcbiAgICAgICAgICByZXR1cm4gbGlmdDIoZ2V0Q29uZmlnKGluZm8pLCBnZXQkZyhhY3RpdmUsICdleGhpYml0JyksIChiZWhhdmlvdXJJbmZvLCBleGhpYml0b3IpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBleGhpYml0b3IoYmFzZSwgYmVoYXZpb3VySW5mby5jb25maWcsIGJlaGF2aW91ckluZm8uc3RhdGUpO1xuICAgICAgICAgIH0pLmdldE9yVGh1bmsoKCkgPT4gbnUkNyh7fSkpO1xuICAgICAgICB9LFxuICAgICAgICBuYW1lOiBjb25zdGFudCQxKG5hbWUpLFxuICAgICAgICBoYW5kbGVyczogaW5mbyA9PiB7XG4gICAgICAgICAgcmV0dXJuIGdldENvbmZpZyhpbmZvKS5tYXAoYmVoYXZpb3VySW5mbyA9PiB7XG4gICAgICAgICAgICBjb25zdCBnZXRFdmVudHMgPSBnZXQkZyhhY3RpdmUsICdldmVudHMnKS5nZXRPcigoKSA9PiAoe30pKTtcbiAgICAgICAgICAgIHJldHVybiBnZXRFdmVudHMoYmVoYXZpb3VySW5mby5jb25maWcsIGJlaGF2aW91ckluZm8uc3RhdGUpO1xuICAgICAgICAgIH0pLmdldE9yKHt9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiBtZTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGVyaXZlJDEgPSBjYXBhYmlsaXRpZXMgPT4gd3JhcEFsbChjYXBhYmlsaXRpZXMpO1xuICAgIGNvbnN0IHNpbXBsZVNjaGVtYSA9IG9iak9mT25seShbXG4gICAgICByZXF1aXJlZCQxKCdmaWVsZHMnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ25hbWUnKSxcbiAgICAgIGRlZmF1bHRlZCgnYWN0aXZlJywge30pLFxuICAgICAgZGVmYXVsdGVkKCdhcGlzJywge30pLFxuICAgICAgZGVmYXVsdGVkKCdzdGF0ZScsIE5vU3RhdGUpLFxuICAgICAgZGVmYXVsdGVkKCdleHRyYScsIHt9KVxuICAgIF0pO1xuICAgIGNvbnN0IGNyZWF0ZSQ0ID0gZGF0YSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGFzUmF3T3JEaWUkMSgnQ3JlYXRpbmcgYmVoYXZpb3VyOiAnICsgZGF0YS5uYW1lLCBzaW1wbGVTY2hlbWEsIGRhdGEpO1xuICAgICAgcmV0dXJuIGNyZWF0ZSQ1KHZhbHVlLmZpZWxkcywgdmFsdWUubmFtZSwgdmFsdWUuYWN0aXZlLCB2YWx1ZS5hcGlzLCB2YWx1ZS5leHRyYSwgdmFsdWUuc3RhdGUpO1xuICAgIH07XG4gICAgY29uc3QgbW9kZVNjaGVtYSA9IG9iak9mT25seShbXG4gICAgICByZXF1aXJlZCQxKCdicmFuY2hLZXknKSxcbiAgICAgIHJlcXVpcmVkJDEoJ2JyYW5jaGVzJyksXG4gICAgICByZXF1aXJlZCQxKCduYW1lJyksXG4gICAgICBkZWZhdWx0ZWQoJ2FjdGl2ZScsIHt9KSxcbiAgICAgIGRlZmF1bHRlZCgnYXBpcycsIHt9KSxcbiAgICAgIGRlZmF1bHRlZCgnc3RhdGUnLCBOb1N0YXRlKSxcbiAgICAgIGRlZmF1bHRlZCgnZXh0cmEnLCB7fSlcbiAgICBdKTtcbiAgICBjb25zdCBjcmVhdGVNb2RlcyA9IGRhdGEgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBhc1Jhd09yRGllJDEoJ0NyZWF0aW5nIGJlaGF2aW91cjogJyArIGRhdGEubmFtZSwgbW9kZVNjaGVtYSwgZGF0YSk7XG4gICAgICByZXR1cm4gY3JlYXRlTW9kZXMkMShjaG9vc2UkMSh2YWx1ZS5icmFuY2hLZXksIHZhbHVlLmJyYW5jaGVzKSwgdmFsdWUubmFtZSwgdmFsdWUuYWN0aXZlLCB2YWx1ZS5hcGlzLCB2YWx1ZS5leHRyYSwgdmFsdWUuc3RhdGUpO1xuICAgIH07XG4gICAgY29uc3QgcmV2b2tlID0gY29uc3RhbnQkMSh1bmRlZmluZWQpO1xuXG4gICAgY29uc3QgUmVjZWl2aW5nID0gY3JlYXRlJDQoe1xuICAgICAgZmllbGRzOiBSZWNlaXZpbmdTY2hlbWEsXG4gICAgICBuYW1lOiAncmVjZWl2aW5nJyxcbiAgICAgIGFjdGl2ZTogQWN0aXZlUmVjZWl2aW5nXG4gICAgfSk7XG5cbiAgICBjb25zdCBleGhpYml0JDYgPSAoYmFzZSwgcG9zQ29uZmlnKSA9PiBudSQ3KHtcbiAgICAgIGNsYXNzZXM6IFtdLFxuICAgICAgc3R5bGVzOiBwb3NDb25maWcudXNlRml4ZWQoKSA/IHt9IDogeyBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9XG4gICAgfSk7XG5cbiAgICB2YXIgQWN0aXZlUG9zaXRpb24gPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgZXhoaWJpdDogZXhoaWJpdCQ2XG4gICAgfSk7XG5cbiAgICBjb25zdCBmb2N1cyQzID0gZWxlbWVudCA9PiBlbGVtZW50LmRvbS5mb2N1cygpO1xuICAgIGNvbnN0IGJsdXIkMSA9IGVsZW1lbnQgPT4gZWxlbWVudC5kb20uYmx1cigpO1xuICAgIGNvbnN0IGhhc0ZvY3VzID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCByb290ID0gZ2V0Um9vdE5vZGUoZWxlbWVudCkuZG9tO1xuICAgICAgcmV0dXJuIGVsZW1lbnQuZG9tID09PSByb290LmFjdGl2ZUVsZW1lbnQ7XG4gICAgfTtcbiAgICBjb25zdCBhY3RpdmUkMSA9IChyb290ID0gZ2V0RG9jdW1lbnQoKSkgPT4gT3B0aW9uYWwuZnJvbShyb290LmRvbS5hY3RpdmVFbGVtZW50KS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIGNvbnN0IHNlYXJjaCA9IGVsZW1lbnQgPT4gYWN0aXZlJDEoZ2V0Um9vdE5vZGUoZWxlbWVudCkpLmZpbHRlcihlID0+IGVsZW1lbnQuZG9tLmNvbnRhaW5zKGUuZG9tKSk7XG5cbiAgICBjb25zdCBwcmVzZXJ2ZSQxID0gKGYsIGNvbnRhaW5lcikgPT4ge1xuICAgICAgY29uc3QgZG9zID0gZ2V0Um9vdE5vZGUoY29udGFpbmVyKTtcbiAgICAgIGNvbnN0IHJlZm9jdXMgPSBhY3RpdmUkMShkb3MpLmJpbmQoZm9jdXNlZCA9PiB7XG4gICAgICAgIGNvbnN0IGhhc0ZvY3VzID0gZWxlbSA9PiBlcShmb2N1c2VkLCBlbGVtKTtcbiAgICAgICAgcmV0dXJuIGhhc0ZvY3VzKGNvbnRhaW5lcikgPyBPcHRpb25hbC5zb21lKGNvbnRhaW5lcikgOiBkZXNjZW5kYW50JDEoY29udGFpbmVyLCBoYXNGb2N1cyk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGYoY29udGFpbmVyKTtcbiAgICAgIHJlZm9jdXMuZWFjaChvbGRGb2N1cyA9PiB7XG4gICAgICAgIGFjdGl2ZSQxKGRvcykuZmlsdGVyKG5ld0ZvY3VzID0+IGVxKG5ld0ZvY3VzLCBvbGRGb2N1cykpLmZvbGQoKCkgPT4ge1xuICAgICAgICAgIGZvY3VzJDMob2xkRm9jdXMpO1xuICAgICAgICB9LCBub29wKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgY29uc3QgTnVQb3NpdGlvbkNzcyA9IChwb3NpdGlvbiwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKSA9PiB7XG4gICAgICBjb25zdCB0b1B4ID0gbnVtID0+IG51bSArICdweCc7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgbGVmdDogbGVmdC5tYXAodG9QeCksXG4gICAgICAgIHRvcDogdG9wLm1hcCh0b1B4KSxcbiAgICAgICAgcmlnaHQ6IHJpZ2h0Lm1hcCh0b1B4KSxcbiAgICAgICAgYm90dG9tOiBib3R0b20ubWFwKHRvUHgpXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgdG9PcHRpb25zID0gcG9zaXRpb24gPT4gKHtcbiAgICAgIC4uLnBvc2l0aW9uLFxuICAgICAgcG9zaXRpb246IE9wdGlvbmFsLnNvbWUocG9zaXRpb24ucG9zaXRpb24pXG4gICAgfSk7XG4gICAgY29uc3QgYXBwbHlQb3NpdGlvbkNzcyA9IChlbGVtZW50LCBwb3NpdGlvbikgPT4ge1xuICAgICAgc2V0T3B0aW9ucyhlbGVtZW50LCB0b09wdGlvbnMocG9zaXRpb24pKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYWR0JDkgPSBBZHQuZ2VuZXJhdGUoW1xuICAgICAgeyBub25lOiBbXSB9LFxuICAgICAge1xuICAgICAgICByZWxhdGl2ZTogW1xuICAgICAgICAgICd4JyxcbiAgICAgICAgICAneScsXG4gICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAnaGVpZ2h0J1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBmaXhlZDogW1xuICAgICAgICAgICd4JyxcbiAgICAgICAgICAneScsXG4gICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAnaGVpZ2h0J1xuICAgICAgICBdXG4gICAgICB9XG4gICAgXSk7XG4gICAgY29uc3QgcG9zaXRpb25XaXRoRGlyZWN0aW9uID0gKHBvc05hbWUsIGRlY2lzaW9uLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gICAgICBjb25zdCBkZWNpc2lvblJlY3QgPSBkZWNpc2lvbi5yZWN0O1xuICAgICAgY29uc3QgZGVjaXNpb25YID0gZGVjaXNpb25SZWN0LnggLSB4O1xuICAgICAgY29uc3QgZGVjaXNpb25ZID0gZGVjaXNpb25SZWN0LnkgLSB5O1xuICAgICAgY29uc3QgZGVjaXNpb25XaWR0aCA9IGRlY2lzaW9uUmVjdC53aWR0aDtcbiAgICAgIGNvbnN0IGRlY2lzaW9uSGVpZ2h0ID0gZGVjaXNpb25SZWN0LmhlaWdodDtcbiAgICAgIGNvbnN0IGRlY2lzaW9uUmlnaHQgPSB3aWR0aCAtIChkZWNpc2lvblggKyBkZWNpc2lvbldpZHRoKTtcbiAgICAgIGNvbnN0IGRlY2lzaW9uQm90dG9tID0gaGVpZ2h0IC0gKGRlY2lzaW9uWSArIGRlY2lzaW9uSGVpZ2h0KTtcbiAgICAgIGNvbnN0IGxlZnQgPSBPcHRpb25hbC5zb21lKGRlY2lzaW9uWCk7XG4gICAgICBjb25zdCB0b3AgPSBPcHRpb25hbC5zb21lKGRlY2lzaW9uWSk7XG4gICAgICBjb25zdCByaWdodCA9IE9wdGlvbmFsLnNvbWUoZGVjaXNpb25SaWdodCk7XG4gICAgICBjb25zdCBib3R0b20gPSBPcHRpb25hbC5zb21lKGRlY2lzaW9uQm90dG9tKTtcbiAgICAgIGNvbnN0IG5vbmUgPSBPcHRpb25hbC5ub25lKCk7XG4gICAgICByZXR1cm4gY2F0YSQyKGRlY2lzaW9uLmRpcmVjdGlvbiwgKCkgPT4gTnVQb3NpdGlvbkNzcyhwb3NOYW1lLCBsZWZ0LCB0b3AsIG5vbmUsIG5vbmUpLCAoKSA9PiBOdVBvc2l0aW9uQ3NzKHBvc05hbWUsIG5vbmUsIHRvcCwgcmlnaHQsIG5vbmUpLCAoKSA9PiBOdVBvc2l0aW9uQ3NzKHBvc05hbWUsIGxlZnQsIG5vbmUsIG5vbmUsIGJvdHRvbSksICgpID0+IE51UG9zaXRpb25Dc3MocG9zTmFtZSwgbm9uZSwgbm9uZSwgcmlnaHQsIGJvdHRvbSksICgpID0+IE51UG9zaXRpb25Dc3MocG9zTmFtZSwgbGVmdCwgdG9wLCBub25lLCBub25lKSwgKCkgPT4gTnVQb3NpdGlvbkNzcyhwb3NOYW1lLCBsZWZ0LCBub25lLCBub25lLCBib3R0b20pLCAoKSA9PiBOdVBvc2l0aW9uQ3NzKHBvc05hbWUsIGxlZnQsIHRvcCwgbm9uZSwgbm9uZSksICgpID0+IE51UG9zaXRpb25Dc3MocG9zTmFtZSwgbm9uZSwgdG9wLCByaWdodCwgbm9uZSkpO1xuICAgIH07XG4gICAgY29uc3QgcmVwb3NpdGlvbiA9IChvcmlnaW4sIGRlY2lzaW9uKSA9PiBvcmlnaW4uZm9sZCgoKSA9PiB7XG4gICAgICBjb25zdCBkZWNpc2lvblJlY3QgPSBkZWNpc2lvbi5yZWN0O1xuICAgICAgcmV0dXJuIE51UG9zaXRpb25Dc3MoJ2Fic29sdXRlJywgT3B0aW9uYWwuc29tZShkZWNpc2lvblJlY3QueCksIE9wdGlvbmFsLnNvbWUoZGVjaXNpb25SZWN0LnkpLCBPcHRpb25hbC5ub25lKCksIE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgfSwgKHgsIHksIHdpZHRoLCBoZWlnaHQpID0+IHtcbiAgICAgIHJldHVybiBwb3NpdGlvbldpdGhEaXJlY3Rpb24oJ2Fic29sdXRlJywgZGVjaXNpb24sIHgsIHksIHdpZHRoLCBoZWlnaHQpO1xuICAgIH0sICh4LCB5LCB3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gICAgICByZXR1cm4gcG9zaXRpb25XaXRoRGlyZWN0aW9uKCdmaXhlZCcsIGRlY2lzaW9uLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9KTtcbiAgICBjb25zdCB0b0JveCA9IChvcmlnaW4sIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHJlbCA9IGN1cnJ5KGZpbmQkMiwgZWxlbWVudCk7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IG9yaWdpbi5mb2xkKHJlbCwgcmVsLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNjcm9sbCA9IGdldCRiKCk7XG4gICAgICAgIHJldHVybiBmaW5kJDIoZWxlbWVudCkudHJhbnNsYXRlKC1zY3JvbGwubGVmdCwgLXNjcm9sbC50b3ApO1xuICAgICAgfSk7XG4gICAgICBjb25zdCB3aWR0aCA9IGdldE91dGVyJDEoZWxlbWVudCk7XG4gICAgICBjb25zdCBoZWlnaHQgPSBnZXRPdXRlciQyKGVsZW1lbnQpO1xuICAgICAgcmV0dXJuIGJvdW5kcyhwb3NpdGlvbi5sZWZ0LCBwb3NpdGlvbi50b3AsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH07XG4gICAgY29uc3Qgdmlld3BvcnQgPSAob3JpZ2luLCBvcHRCb3VuZHMpID0+IG9wdEJvdW5kcy5mb2xkKCgpID0+IG9yaWdpbi5mb2xkKHdpbiwgd2luLCBib3VuZHMpLCBib3VuZHMkMSA9PiBvcmlnaW4uZm9sZChjb25zdGFudCQxKGJvdW5kcyQxKSwgY29uc3RhbnQkMShib3VuZHMkMSksICgpID0+IHtcbiAgICAgIGNvbnN0IHBvcyA9IHRyYW5zbGF0ZSQyKG9yaWdpbiwgYm91bmRzJDEueCwgYm91bmRzJDEueSk7XG4gICAgICByZXR1cm4gYm91bmRzKHBvcy5sZWZ0LCBwb3MudG9wLCBib3VuZHMkMS53aWR0aCwgYm91bmRzJDEuaGVpZ2h0KTtcbiAgICB9KSk7XG4gICAgY29uc3QgdHJhbnNsYXRlJDIgPSAob3JpZ2luLCB4LCB5KSA9PiB7XG4gICAgICBjb25zdCBwb3MgPSBTdWdhclBvc2l0aW9uKHgsIHkpO1xuICAgICAgY29uc3QgcmVtb3ZlU2Nyb2xsID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBvdXRlclNjcm9sbCA9IGdldCRiKCk7XG4gICAgICAgIHJldHVybiBwb3MudHJhbnNsYXRlKC1vdXRlclNjcm9sbC5sZWZ0LCAtb3V0ZXJTY3JvbGwudG9wKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gb3JpZ2luLmZvbGQoY29uc3RhbnQkMShwb3MpLCBjb25zdGFudCQxKHBvcyksIHJlbW92ZVNjcm9sbCk7XG4gICAgfTtcbiAgICBjb25zdCBjYXRhJDEgPSAoc3ViamVjdCwgb25Ob25lLCBvblJlbGF0aXZlLCBvbkZpeGVkKSA9PiBzdWJqZWN0LmZvbGQob25Ob25lLCBvblJlbGF0aXZlLCBvbkZpeGVkKTtcbiAgICBhZHQkOS5ub25lO1xuICAgIGNvbnN0IHJlbGF0aXZlJDEgPSBhZHQkOS5yZWxhdGl2ZTtcbiAgICBjb25zdCBmaXhlZCQxID0gYWR0JDkuZml4ZWQ7XG5cbiAgICBjb25zdCBhbmNob3IgPSAoYW5jaG9yQm94LCBvcmlnaW4pID0+ICh7XG4gICAgICBhbmNob3JCb3gsXG4gICAgICBvcmlnaW5cbiAgICB9KTtcbiAgICBjb25zdCBib3ggPSAoYW5jaG9yQm94LCBvcmlnaW4pID0+IGFuY2hvcihhbmNob3JCb3gsIG9yaWdpbik7XG5cbiAgICBjb25zdCBwbGFjZW1lbnRBdHRyaWJ1dGUgPSAnZGF0YS1hbGxveS1wbGFjZW1lbnQnO1xuICAgIGNvbnN0IHNldFBsYWNlbWVudCQxID0gKGVsZW1lbnQsIHBsYWNlbWVudCkgPT4ge1xuICAgICAgc2V0JDkoZWxlbWVudCwgcGxhY2VtZW50QXR0cmlidXRlLCBwbGFjZW1lbnQpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0UGxhY2VtZW50ID0gZWxlbWVudCA9PiBnZXRPcHQoZWxlbWVudCwgcGxhY2VtZW50QXR0cmlidXRlKTtcbiAgICBjb25zdCByZXNldCQyID0gZWxlbWVudCA9PiByZW1vdmUkNyhlbGVtZW50LCBwbGFjZW1lbnRBdHRyaWJ1dGUpO1xuXG4gICAgY29uc3QgYWR0JDggPSBBZHQuZ2VuZXJhdGUoW1xuICAgICAgeyBmaXQ6IFsncmVwb3NpdGlvbiddIH0sXG4gICAgICB7XG4gICAgICAgIG5vZml0OiBbXG4gICAgICAgICAgJ3JlcG9zaXRpb24nLFxuICAgICAgICAgICd2aXNpYmxlVycsXG4gICAgICAgICAgJ3Zpc2libGVIJyxcbiAgICAgICAgICAnaXNWaXNpYmxlJ1xuICAgICAgICBdXG4gICAgICB9XG4gICAgXSk7XG4gICAgY29uc3QgZGV0ZXJtaW5lUG9zaXRpb24gPSAoYm94LCBib3VuZHMpID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeDogYm91bmRzWCxcbiAgICAgICAgeTogYm91bmRzWSxcbiAgICAgICAgcmlnaHQ6IGJvdW5kc1JpZ2h0LFxuICAgICAgICBib3R0b206IGJvdW5kc0JvdHRvbVxuICAgICAgfSA9IGJvdW5kcztcbiAgICAgIGNvbnN0IHt4LCB5LCByaWdodCwgYm90dG9tLCB3aWR0aCwgaGVpZ2h0fSA9IGJveDtcbiAgICAgIGNvbnN0IHhJbkJvdW5kcyA9IHggPj0gYm91bmRzWCAmJiB4IDw9IGJvdW5kc1JpZ2h0O1xuICAgICAgY29uc3QgeUluQm91bmRzID0geSA+PSBib3VuZHNZICYmIHkgPD0gYm91bmRzQm90dG9tO1xuICAgICAgY29uc3Qgb3JpZ2luSW5Cb3VuZHMgPSB4SW5Cb3VuZHMgJiYgeUluQm91bmRzO1xuICAgICAgY29uc3QgcmlnaHRJbkJvdW5kcyA9IHJpZ2h0IDw9IGJvdW5kc1JpZ2h0ICYmIHJpZ2h0ID49IGJvdW5kc1g7XG4gICAgICBjb25zdCBib3R0b21JbkJvdW5kcyA9IGJvdHRvbSA8PSBib3VuZHNCb3R0b20gJiYgYm90dG9tID49IGJvdW5kc1k7XG4gICAgICBjb25zdCBzaXplSW5Cb3VuZHMgPSByaWdodEluQm91bmRzICYmIGJvdHRvbUluQm91bmRzO1xuICAgICAgY29uc3QgdmlzaWJsZVcgPSBNYXRoLm1pbih3aWR0aCwgeCA+PSBib3VuZHNYID8gYm91bmRzUmlnaHQgLSB4IDogcmlnaHQgLSBib3VuZHNYKTtcbiAgICAgIGNvbnN0IHZpc2libGVIID0gTWF0aC5taW4oaGVpZ2h0LCB5ID49IGJvdW5kc1kgPyBib3VuZHNCb3R0b20gLSB5IDogYm90dG9tIC0gYm91bmRzWSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcmlnaW5JbkJvdW5kcyxcbiAgICAgICAgc2l6ZUluQm91bmRzLFxuICAgICAgICB2aXNpYmxlVyxcbiAgICAgICAgdmlzaWJsZUhcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjYWxjUmVwb3NpdGlvbiA9IChib3gsIGJvdW5kcyQxKSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHg6IGJvdW5kc1gsXG4gICAgICAgIHk6IGJvdW5kc1ksXG4gICAgICAgIHJpZ2h0OiBib3VuZHNSaWdodCxcbiAgICAgICAgYm90dG9tOiBib3VuZHNCb3R0b21cbiAgICAgIH0gPSBib3VuZHMkMTtcbiAgICAgIGNvbnN0IHt4LCB5LCB3aWR0aCwgaGVpZ2h0fSA9IGJveDtcbiAgICAgIGNvbnN0IG1heFggPSBNYXRoLm1heChib3VuZHNYLCBib3VuZHNSaWdodCAtIHdpZHRoKTtcbiAgICAgIGNvbnN0IG1heFkgPSBNYXRoLm1heChib3VuZHNZLCBib3VuZHNCb3R0b20gLSBoZWlnaHQpO1xuICAgICAgY29uc3QgcmVzdHJpY3RlZFggPSBjbGFtcCh4LCBib3VuZHNYLCBtYXhYKTtcbiAgICAgIGNvbnN0IHJlc3RyaWN0ZWRZID0gY2xhbXAoeSwgYm91bmRzWSwgbWF4WSk7XG4gICAgICBjb25zdCByZXN0cmljdGVkV2lkdGggPSBNYXRoLm1pbihyZXN0cmljdGVkWCArIHdpZHRoLCBib3VuZHNSaWdodCkgLSByZXN0cmljdGVkWDtcbiAgICAgIGNvbnN0IHJlc3RyaWN0ZWRIZWlnaHQgPSBNYXRoLm1pbihyZXN0cmljdGVkWSArIGhlaWdodCwgYm91bmRzQm90dG9tKSAtIHJlc3RyaWN0ZWRZO1xuICAgICAgcmV0dXJuIGJvdW5kcyhyZXN0cmljdGVkWCwgcmVzdHJpY3RlZFksIHJlc3RyaWN0ZWRXaWR0aCwgcmVzdHJpY3RlZEhlaWdodCk7XG4gICAgfTtcbiAgICBjb25zdCBjYWxjTWF4U2l6ZXMgPSAoZGlyZWN0aW9uLCBib3gsIGJvdW5kcykgPT4ge1xuICAgICAgY29uc3QgdXBBdmFpbGFibGUgPSBjb25zdGFudCQxKGJveC5ib3R0b20gLSBib3VuZHMueSk7XG4gICAgICBjb25zdCBkb3duQXZhaWxhYmxlID0gY29uc3RhbnQkMShib3VuZHMuYm90dG9tIC0gYm94LnkpO1xuICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gY2F0YVZlcnRpY2FsKGRpcmVjdGlvbiwgZG93bkF2YWlsYWJsZSwgZG93bkF2YWlsYWJsZSwgdXBBdmFpbGFibGUpO1xuICAgICAgY29uc3Qgd2VzdEF2YWlsYWJsZSA9IGNvbnN0YW50JDEoYm94LnJpZ2h0IC0gYm91bmRzLngpO1xuICAgICAgY29uc3QgZWFzdEF2YWlsYWJsZSA9IGNvbnN0YW50JDEoYm91bmRzLnJpZ2h0IC0gYm94LngpO1xuICAgICAgY29uc3QgbWF4V2lkdGggPSBjYXRhSG9yaXpvbnRhbChkaXJlY3Rpb24sIGVhc3RBdmFpbGFibGUsIGVhc3RBdmFpbGFibGUsIHdlc3RBdmFpbGFibGUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWF4V2lkdGgsXG4gICAgICAgIG1heEhlaWdodFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGF0dGVtcHQgPSAoY2FuZGlkYXRlLCB3aWR0aCwgaGVpZ2h0LCBib3VuZHMkMSkgPT4ge1xuICAgICAgY29uc3QgYnViYmxlID0gY2FuZGlkYXRlLmJ1YmJsZTtcbiAgICAgIGNvbnN0IGJ1YmJsZU9mZnNldCA9IGJ1YmJsZS5vZmZzZXQ7XG4gICAgICBjb25zdCBhZGp1c3RlZEJvdW5kcyA9IGFkanVzdEJvdW5kcyhib3VuZHMkMSwgY2FuZGlkYXRlLnJlc3RyaWN0aW9uLCBidWJibGVPZmZzZXQpO1xuICAgICAgY29uc3QgbmV3WCA9IGNhbmRpZGF0ZS54ICsgYnViYmxlT2Zmc2V0LmxlZnQ7XG4gICAgICBjb25zdCBuZXdZID0gY2FuZGlkYXRlLnkgKyBidWJibGVPZmZzZXQudG9wO1xuICAgICAgY29uc3QgYm94ID0gYm91bmRzKG5ld1gsIG5ld1ksIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgY29uc3Qge29yaWdpbkluQm91bmRzLCBzaXplSW5Cb3VuZHMsIHZpc2libGVXLCB2aXNpYmxlSH0gPSBkZXRlcm1pbmVQb3NpdGlvbihib3gsIGFkanVzdGVkQm91bmRzKTtcbiAgICAgIGNvbnN0IGZpdHMgPSBvcmlnaW5JbkJvdW5kcyAmJiBzaXplSW5Cb3VuZHM7XG4gICAgICBjb25zdCBmaXR0ZWRCb3ggPSBmaXRzID8gYm94IDogY2FsY1JlcG9zaXRpb24oYm94LCBhZGp1c3RlZEJvdW5kcyk7XG4gICAgICBjb25zdCBpc1BhcnRseVZpc2libGUgPSBmaXR0ZWRCb3gud2lkdGggPiAwICYmIGZpdHRlZEJveC5oZWlnaHQgPiAwO1xuICAgICAgY29uc3Qge21heFdpZHRoLCBtYXhIZWlnaHR9ID0gY2FsY01heFNpemVzKGNhbmRpZGF0ZS5kaXJlY3Rpb24sIGZpdHRlZEJveCwgYm91bmRzJDEpO1xuICAgICAgY29uc3QgcmVwb3NpdGlvbiA9IHtcbiAgICAgICAgcmVjdDogZml0dGVkQm94LFxuICAgICAgICBtYXhIZWlnaHQsXG4gICAgICAgIG1heFdpZHRoLFxuICAgICAgICBkaXJlY3Rpb246IGNhbmRpZGF0ZS5kaXJlY3Rpb24sXG4gICAgICAgIHBsYWNlbWVudDogY2FuZGlkYXRlLnBsYWNlbWVudCxcbiAgICAgICAgY2xhc3Nlczoge1xuICAgICAgICAgIG9uOiBidWJibGUuY2xhc3Nlc09uLFxuICAgICAgICAgIG9mZjogYnViYmxlLmNsYXNzZXNPZmZcbiAgICAgICAgfSxcbiAgICAgICAgbGF5b3V0OiBjYW5kaWRhdGUubGFiZWwsXG4gICAgICAgIHRlc3RZOiBuZXdZXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGZpdHMgfHwgY2FuZGlkYXRlLmFsd2F5c0ZpdCA/IGFkdCQ4LmZpdChyZXBvc2l0aW9uKSA6IGFkdCQ4Lm5vZml0KHJlcG9zaXRpb24sIHZpc2libGVXLCB2aXNpYmxlSCwgaXNQYXJ0bHlWaXNpYmxlKTtcbiAgICB9O1xuICAgIGNvbnN0IGF0dGVtcHRzID0gKGVsZW1lbnQsIGNhbmRpZGF0ZXMsIGFuY2hvckJveCwgZWxlbWVudEJveCwgYnViYmxlcywgYm91bmRzKSA9PiB7XG4gICAgICBjb25zdCBwYW5lbFdpZHRoID0gZWxlbWVudEJveC53aWR0aDtcbiAgICAgIGNvbnN0IHBhbmVsSGVpZ2h0ID0gZWxlbWVudEJveC5oZWlnaHQ7XG4gICAgICBjb25zdCBhdHRlbXB0QmVzdEZpdCA9IChsYXlvdXQsIHJlcG9zaXRpb24sIHZpc2libGVXLCB2aXNpYmxlSCwgaXNWaXNpYmxlKSA9PiB7XG4gICAgICAgIGNvbnN0IG5leHQgPSBsYXlvdXQoYW5jaG9yQm94LCBlbGVtZW50Qm94LCBidWJibGVzLCBlbGVtZW50LCBib3VuZHMpO1xuICAgICAgICBjb25zdCBhdHRlbXB0TGF5b3V0ID0gYXR0ZW1wdChuZXh0LCBwYW5lbFdpZHRoLCBwYW5lbEhlaWdodCwgYm91bmRzKTtcbiAgICAgICAgcmV0dXJuIGF0dGVtcHRMYXlvdXQuZm9sZChjb25zdGFudCQxKGF0dGVtcHRMYXlvdXQpLCAobmV3UmVwb3NpdGlvbiwgbmV3VmlzaWJsZVcsIG5ld1Zpc2libGVILCBuZXdJc1Zpc2libGUpID0+IHtcbiAgICAgICAgICBjb25zdCBpbXByb3ZlZCA9IGlzVmlzaWJsZSA9PT0gbmV3SXNWaXNpYmxlID8gbmV3VmlzaWJsZUggPiB2aXNpYmxlSCB8fCBuZXdWaXNpYmxlVyA+IHZpc2libGVXIDogIWlzVmlzaWJsZSAmJiBuZXdJc1Zpc2libGU7XG4gICAgICAgICAgcmV0dXJuIGltcHJvdmVkID8gYXR0ZW1wdExheW91dCA6IGFkdCQ4Lm5vZml0KHJlcG9zaXRpb24sIHZpc2libGVXLCB2aXNpYmxlSCwgaXNWaXNpYmxlKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgYWJjID0gZm9sZGwoY2FuZGlkYXRlcywgKGIsIGEpID0+IHtcbiAgICAgICAgY29uc3QgYmVzdE5leHQgPSBjdXJyeShhdHRlbXB0QmVzdEZpdCwgYSk7XG4gICAgICAgIHJldHVybiBiLmZvbGQoY29uc3RhbnQkMShiKSwgYmVzdE5leHQpO1xuICAgICAgfSwgYWR0JDgubm9maXQoe1xuICAgICAgICByZWN0OiBhbmNob3JCb3gsXG4gICAgICAgIG1heEhlaWdodDogZWxlbWVudEJveC5oZWlnaHQsXG4gICAgICAgIG1heFdpZHRoOiBlbGVtZW50Qm94LndpZHRoLFxuICAgICAgICBkaXJlY3Rpb246IHNvdXRoZWFzdCQzKCksXG4gICAgICAgIHBsYWNlbWVudDogJ3NvdXRoZWFzdCcsXG4gICAgICAgIGNsYXNzZXM6IHtcbiAgICAgICAgICBvbjogW10sXG4gICAgICAgICAgb2ZmOiBbXVxuICAgICAgICB9LFxuICAgICAgICBsYXlvdXQ6ICdub25lJyxcbiAgICAgICAgdGVzdFk6IGFuY2hvckJveC55XG4gICAgICB9LCAtMSwgLTEsIGZhbHNlKSk7XG4gICAgICByZXR1cm4gYWJjLmZvbGQoaWRlbnRpdHksIGlkZW50aXR5KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2luZ2xldG9uID0gZG9SZXZva2UgPT4ge1xuICAgICAgY29uc3Qgc3ViamVjdCA9IENlbGwoT3B0aW9uYWwubm9uZSgpKTtcbiAgICAgIGNvbnN0IHJldm9rZSA9ICgpID0+IHN1YmplY3QuZ2V0KCkuZWFjaChkb1Jldm9rZSk7XG4gICAgICBjb25zdCBjbGVhciA9ICgpID0+IHtcbiAgICAgICAgcmV2b2tlKCk7XG4gICAgICAgIHN1YmplY3Quc2V0KE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNTZXQgPSAoKSA9PiBzdWJqZWN0LmdldCgpLmlzU29tZSgpO1xuICAgICAgY29uc3QgZ2V0ID0gKCkgPT4gc3ViamVjdC5nZXQoKTtcbiAgICAgIGNvbnN0IHNldCA9IHMgPT4ge1xuICAgICAgICByZXZva2UoKTtcbiAgICAgICAgc3ViamVjdC5zZXQoT3B0aW9uYWwuc29tZShzKSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xlYXIsXG4gICAgICAgIGlzU2V0LFxuICAgICAgICBnZXQsXG4gICAgICAgIHNldFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGRlc3Ryb3lhYmxlID0gKCkgPT4gc2luZ2xldG9uKHMgPT4gcy5kZXN0cm95KCkpO1xuICAgIGNvbnN0IHVuYmluZGFibGUgPSAoKSA9PiBzaW5nbGV0b24ocyA9PiBzLnVuYmluZCgpKTtcbiAgICBjb25zdCB2YWx1ZSQyID0gKCkgPT4ge1xuICAgICAgY29uc3Qgc3ViamVjdCA9IHNpbmdsZXRvbihub29wKTtcbiAgICAgIGNvbnN0IG9uID0gZiA9PiBzdWJqZWN0LmdldCgpLmVhY2goZik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdWJqZWN0LFxuICAgICAgICBvblxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmlsdGVyID0gYWx3YXlzO1xuICAgIGNvbnN0IGJpbmQgPSAoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIpID0+IGJpbmQkMihlbGVtZW50LCBldmVudCwgZmlsdGVyLCBoYW5kbGVyKTtcbiAgICBjb25zdCBjYXB0dXJlID0gKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyKSA9PiBjYXB0dXJlJDEoZWxlbWVudCwgZXZlbnQsIGZpbHRlciwgaGFuZGxlcik7XG4gICAgY29uc3QgZnJvbVJhd0V2ZW50ID0gZnJvbVJhd0V2ZW50JDE7XG5cbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gW1xuICAgICAgJ3RvcCcsXG4gICAgICAnYm90dG9tJyxcbiAgICAgICdyaWdodCcsXG4gICAgICAnbGVmdCdcbiAgICBdO1xuICAgIGNvbnN0IHRpbWVyQXR0ciA9ICdkYXRhLWFsbG95LXRyYW5zaXRpb24tdGltZXInO1xuICAgIGNvbnN0IGlzVHJhbnNpdGlvbmluZyQxID0gKGVsZW1lbnQsIHRyYW5zaXRpb24pID0+IGhhc0FsbChlbGVtZW50LCB0cmFuc2l0aW9uLmNsYXNzZXMpO1xuICAgIGNvbnN0IHNob3VsZEFwcGx5VHJhbnNpdGlvbkNzcyA9ICh0cmFuc2l0aW9uLCBkZWNpc2lvbiwgbGFzdFBsYWNlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIGxhc3RQbGFjZW1lbnQuZXhpc3RzKHBsYWNlciA9PiB7XG4gICAgICAgIGNvbnN0IG1vZGUgPSB0cmFuc2l0aW9uLm1vZGU7XG4gICAgICAgIHJldHVybiBtb2RlID09PSAnYWxsJyA/IHRydWUgOiBwbGFjZXJbbW9kZV0gIT09IGRlY2lzaW9uW21vZGVdO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNDaGFuZ2VzID0gKHBvc2l0aW9uLCBpbnRlcm1lZGlhdGUpID0+IHtcbiAgICAgIGNvbnN0IHJvdW5kID0gdmFsdWUgPT4gcGFyc2VGbG9hdCh2YWx1ZSkudG9GaXhlZCgzKTtcbiAgICAgIHJldHVybiBmaW5kJDQoaW50ZXJtZWRpYXRlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHBvc2l0aW9uW2tleV0ubWFwKHJvdW5kKTtcbiAgICAgICAgY29uc3QgdmFsID0gdmFsdWUubWFwKHJvdW5kKTtcbiAgICAgICAgcmV0dXJuICFlcXVhbHMobmV3VmFsdWUsIHZhbCk7XG4gICAgICB9KS5pc1NvbWUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFRyYW5zaXRpb25EdXJhdGlvbiA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgZ2V0ID0gbmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IHN0eWxlID0gZ2V0JGUoZWxlbWVudCwgbmFtZSk7XG4gICAgICAgIGNvbnN0IHRpbWVzID0gc3R5bGUuc3BsaXQoL1xccyosXFxzKi8pO1xuICAgICAgICByZXR1cm4gZmlsdGVyJDIodGltZXMsIGlzTm90RW1wdHkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHBhcnNlID0gdmFsdWUgPT4ge1xuICAgICAgICBpZiAoaXNTdHJpbmcodmFsdWUpICYmIC9eW1xcZC5dKy8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBudW0gPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgICByZXR1cm4gZW5kc1dpdGgodmFsdWUsICdtcycpID8gbnVtIDogbnVtICogMTAwMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGRlbGF5ID0gZ2V0KCd0cmFuc2l0aW9uLWRlbGF5Jyk7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IGdldCgndHJhbnNpdGlvbi1kdXJhdGlvbicpO1xuICAgICAgcmV0dXJuIGZvbGRsKGR1cmF0aW9uLCAoYWNjLCBkdXIsIGkpID0+IHtcbiAgICAgICAgY29uc3QgdGltZSA9IHBhcnNlKGRlbGF5W2ldKSArIHBhcnNlKGR1cik7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChhY2MsIHRpbWUpO1xuICAgICAgfSwgMCk7XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cFRyYW5zaXRpb25MaXN0ZW5lcnMgPSAoZWxlbWVudCwgdHJhbnNpdGlvbikgPT4ge1xuICAgICAgY29uc3QgdHJhbnNpdGlvbkVuZCA9IHVuYmluZGFibGUoKTtcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25DYW5jZWwgPSB1bmJpbmRhYmxlKCk7XG4gICAgICBsZXQgdGltZXI7XG4gICAgICBjb25zdCBpc1NvdXJjZVRyYW5zaXRpb24gPSBlID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBwc2V1ZG9FbGVtZW50ID0gKF9hID0gZS5yYXcucHNldWRvRWxlbWVudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgICAgIHJldHVybiBlcShlLnRhcmdldCwgZWxlbWVudCkgJiYgaXNFbXB0eShwc2V1ZG9FbGVtZW50KSAmJiBjb250YWlucyQyKHByb3BlcnRpZXMsIGUucmF3LnByb3BlcnR5TmFtZSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdHJhbnNpdGlvbkRvbmUgPSBlID0+IHtcbiAgICAgICAgaWYgKGlzTnVsbGFibGUoZSkgfHwgaXNTb3VyY2VUcmFuc2l0aW9uKGUpKSB7XG4gICAgICAgICAgdHJhbnNpdGlvbkVuZC5jbGVhcigpO1xuICAgICAgICAgIHRyYW5zaXRpb25DYW5jZWwuY2xlYXIoKTtcbiAgICAgICAgICBjb25zdCB0eXBlID0gZSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnJhdy50eXBlO1xuICAgICAgICAgIGlmIChpc051bGxhYmxlKHR5cGUpIHx8IHR5cGUgPT09IHRyYW5zaXRpb25lbmQoKSkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgIHJlbW92ZSQ3KGVsZW1lbnQsIHRpbWVyQXR0cik7XG4gICAgICAgICAgICByZW1vdmUkMShlbGVtZW50LCB0cmFuc2l0aW9uLmNsYXNzZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25TdGFydCA9IGJpbmQoZWxlbWVudCwgdHJhbnNpdGlvbnN0YXJ0KCksIGUgPT4ge1xuICAgICAgICBpZiAoaXNTb3VyY2VUcmFuc2l0aW9uKGUpKSB7XG4gICAgICAgICAgdHJhbnNpdGlvblN0YXJ0LnVuYmluZCgpO1xuICAgICAgICAgIHRyYW5zaXRpb25FbmQuc2V0KGJpbmQoZWxlbWVudCwgdHJhbnNpdGlvbmVuZCgpLCB0cmFuc2l0aW9uRG9uZSkpO1xuICAgICAgICAgIHRyYW5zaXRpb25DYW5jZWwuc2V0KGJpbmQoZWxlbWVudCwgdHJhbnNpdGlvbmNhbmNlbCgpLCB0cmFuc2l0aW9uRG9uZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gZ2V0VHJhbnNpdGlvbkR1cmF0aW9uKGVsZW1lbnQpO1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KHRyYW5zaXRpb25Eb25lLCBkdXJhdGlvbiArIDE3KTtcbiAgICAgICAgc2V0JDkoZWxlbWVudCwgdGltZXJBdHRyLCB0aW1lcik7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHN0YXJ0VHJhbnNpdGlvbmluZyA9IChlbGVtZW50LCB0cmFuc2l0aW9uKSA9PiB7XG4gICAgICBhZGQkMShlbGVtZW50LCB0cmFuc2l0aW9uLmNsYXNzZXMpO1xuICAgICAgZ2V0T3B0KGVsZW1lbnQsIHRpbWVyQXR0cikuZWFjaCh0aW1lcklkID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHBhcnNlSW50KHRpbWVySWQsIDEwKSk7XG4gICAgICAgIHJlbW92ZSQ3KGVsZW1lbnQsIHRpbWVyQXR0cik7XG4gICAgICB9KTtcbiAgICAgIHNldHVwVHJhbnNpdGlvbkxpc3RlbmVycyhlbGVtZW50LCB0cmFuc2l0aW9uKTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5VHJhbnNpdGlvbkNzcyA9IChlbGVtZW50LCBvcmlnaW4sIHBvc2l0aW9uLCB0cmFuc2l0aW9uLCBkZWNpc2lvbiwgbGFzdFBsYWNlbWVudCkgPT4ge1xuICAgICAgY29uc3Qgc2hvdWxkVHJhbnNpdGlvbiA9IHNob3VsZEFwcGx5VHJhbnNpdGlvbkNzcyh0cmFuc2l0aW9uLCBkZWNpc2lvbiwgbGFzdFBsYWNlbWVudCk7XG4gICAgICBpZiAoc2hvdWxkVHJhbnNpdGlvbiB8fCBpc1RyYW5zaXRpb25pbmckMShlbGVtZW50LCB0cmFuc2l0aW9uKSkge1xuICAgICAgICBzZXQkOChlbGVtZW50LCAncG9zaXRpb24nLCBwb3NpdGlvbi5wb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0b0JveChvcmlnaW4sIGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBpbnRlcm1lZGlhdGVQb3NpdGlvbiA9IHJlcG9zaXRpb24ob3JpZ2luLCB7XG4gICAgICAgICAgLi4uZGVjaXNpb24sXG4gICAgICAgICAgcmVjdFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaW50ZXJtZWRpYXRlQ3NzT3B0aW9ucyA9IG1hcFRvT2JqZWN0KHByb3BlcnRpZXMsIHByb3AgPT4gaW50ZXJtZWRpYXRlUG9zaXRpb25bcHJvcF0pO1xuICAgICAgICBpZiAoaGFzQ2hhbmdlcyhwb3NpdGlvbiwgaW50ZXJtZWRpYXRlQ3NzT3B0aW9ucykpIHtcbiAgICAgICAgICBzZXRPcHRpb25zKGVsZW1lbnQsIGludGVybWVkaWF0ZUNzc09wdGlvbnMpO1xuICAgICAgICAgIGlmIChzaG91bGRUcmFuc2l0aW9uKSB7XG4gICAgICAgICAgICBzdGFydFRyYW5zaXRpb25pbmcoZWxlbWVudCwgdHJhbnNpdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlZmxvdyhlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVtb3ZlJDEoZWxlbWVudCwgdHJhbnNpdGlvbi5jbGFzc2VzKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZWxlbWVudFNpemUgPSBwID0+ICh7XG4gICAgICB3aWR0aDogZ2V0T3V0ZXIkMShwKSxcbiAgICAgIGhlaWdodDogZ2V0T3V0ZXIkMihwKVxuICAgIH0pO1xuICAgIGNvbnN0IGxheW91dCA9IChhbmNob3JCb3gsIGVsZW1lbnQsIGJ1YmJsZXMsIG9wdGlvbnMpID0+IHtcbiAgICAgIHJlbW92ZSQ2KGVsZW1lbnQsICdtYXgtaGVpZ2h0Jyk7XG4gICAgICByZW1vdmUkNihlbGVtZW50LCAnbWF4LXdpZHRoJyk7XG4gICAgICBjb25zdCBlbGVtZW50Qm94ID0gZWxlbWVudFNpemUoZWxlbWVudCk7XG4gICAgICByZXR1cm4gYXR0ZW1wdHMoZWxlbWVudCwgb3B0aW9ucy5wcmVmZXJlbmNlLCBhbmNob3JCb3gsIGVsZW1lbnRCb3gsIGJ1YmJsZXMsIG9wdGlvbnMuYm91bmRzKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldENsYXNzZXMgPSAoZWxlbWVudCwgZGVjaXNpb24pID0+IHtcbiAgICAgIGNvbnN0IGNsYXNzSW5mbyA9IGRlY2lzaW9uLmNsYXNzZXM7XG4gICAgICByZW1vdmUkMShlbGVtZW50LCBjbGFzc0luZm8ub2ZmKTtcbiAgICAgIGFkZCQxKGVsZW1lbnQsIGNsYXNzSW5mby5vbik7XG4gICAgfTtcbiAgICBjb25zdCBzZXRIZWlnaHQgPSAoZWxlbWVudCwgZGVjaXNpb24sIG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IG1heEhlaWdodEZ1bmN0aW9uID0gb3B0aW9ucy5tYXhIZWlnaHRGdW5jdGlvbjtcbiAgICAgIG1heEhlaWdodEZ1bmN0aW9uKGVsZW1lbnQsIGRlY2lzaW9uLm1heEhlaWdodCk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRXaWR0aCA9IChlbGVtZW50LCBkZWNpc2lvbiwgb3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgbWF4V2lkdGhGdW5jdGlvbiA9IG9wdGlvbnMubWF4V2lkdGhGdW5jdGlvbjtcbiAgICAgIG1heFdpZHRoRnVuY3Rpb24oZWxlbWVudCwgZGVjaXNpb24ubWF4V2lkdGgpO1xuICAgIH07XG4gICAgY29uc3QgcG9zaXRpb24kMiA9IChlbGVtZW50LCBkZWNpc2lvbiwgb3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgcG9zaXRpb25Dc3MgPSByZXBvc2l0aW9uKG9wdGlvbnMub3JpZ2luLCBkZWNpc2lvbik7XG4gICAgICBvcHRpb25zLnRyYW5zaXRpb24uZWFjaCh0cmFuc2l0aW9uID0+IHtcbiAgICAgICAgYXBwbHlUcmFuc2l0aW9uQ3NzKGVsZW1lbnQsIG9wdGlvbnMub3JpZ2luLCBwb3NpdGlvbkNzcywgdHJhbnNpdGlvbiwgZGVjaXNpb24sIG9wdGlvbnMubGFzdFBsYWNlbWVudCk7XG4gICAgICB9KTtcbiAgICAgIGFwcGx5UG9zaXRpb25Dc3MoZWxlbWVudCwgcG9zaXRpb25Dc3MpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0UGxhY2VtZW50ID0gKGVsZW1lbnQsIGRlY2lzaW9uKSA9PiB7XG4gICAgICBzZXRQbGFjZW1lbnQkMShlbGVtZW50LCBkZWNpc2lvbi5wbGFjZW1lbnQpO1xuICAgIH07XG5cbiAgICBjb25zdCBzZXRNYXhIZWlnaHQgPSAoZWxlbWVudCwgbWF4SGVpZ2h0KSA9PiB7XG4gICAgICBzZXRNYXgkMShlbGVtZW50LCBNYXRoLmZsb29yKG1heEhlaWdodCkpO1xuICAgIH07XG4gICAgY29uc3QgYW5jaG9yZWQgPSBjb25zdGFudCQxKChlbGVtZW50LCBhdmFpbGFibGUpID0+IHtcbiAgICAgIHNldE1heEhlaWdodChlbGVtZW50LCBhdmFpbGFibGUpO1xuICAgICAgc2V0QWxsKGVsZW1lbnQsIHtcbiAgICAgICAgJ292ZXJmbG93LXgnOiAnaGlkZGVuJyxcbiAgICAgICAgJ292ZXJmbG93LXknOiAnYXV0bydcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IGV4cGFuZGFibGUkMSA9IGNvbnN0YW50JDEoKGVsZW1lbnQsIGF2YWlsYWJsZSkgPT4ge1xuICAgICAgc2V0TWF4SGVpZ2h0KGVsZW1lbnQsIGF2YWlsYWJsZSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBkZWZhdWx0T3IgPSAob3B0aW9ucywga2V5LCBkZXBoYXVsdCkgPT4gb3B0aW9uc1trZXldID09PSB1bmRlZmluZWQgPyBkZXBoYXVsdCA6IG9wdGlvbnNba2V5XTtcbiAgICBjb25zdCBzaW1wbGUgPSAoYW5jaG9yLCBlbGVtZW50LCBidWJibGUsIGxheW91dHMsIGxhc3RQbGFjZW1lbnQsIG9wdEJvdW5kcywgb3ZlcnJpZGVPcHRpb25zLCB0cmFuc2l0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXhIZWlnaHRGdW5jdGlvbiA9IGRlZmF1bHRPcihvdmVycmlkZU9wdGlvbnMsICdtYXhIZWlnaHRGdW5jdGlvbicsIGFuY2hvcmVkKCkpO1xuICAgICAgY29uc3QgbWF4V2lkdGhGdW5jdGlvbiA9IGRlZmF1bHRPcihvdmVycmlkZU9wdGlvbnMsICdtYXhXaWR0aEZ1bmN0aW9uJywgbm9vcCk7XG4gICAgICBjb25zdCBhbmNob3JCb3ggPSBhbmNob3IuYW5jaG9yQm94O1xuICAgICAgY29uc3Qgb3JpZ2luID0gYW5jaG9yLm9yaWdpbjtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIGJvdW5kczogdmlld3BvcnQob3JpZ2luLCBvcHRCb3VuZHMpLFxuICAgICAgICBvcmlnaW4sXG4gICAgICAgIHByZWZlcmVuY2U6IGxheW91dHMsXG4gICAgICAgIG1heEhlaWdodEZ1bmN0aW9uLFxuICAgICAgICBtYXhXaWR0aEZ1bmN0aW9uLFxuICAgICAgICBsYXN0UGxhY2VtZW50LFxuICAgICAgICB0cmFuc2l0aW9uXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGdvKGFuY2hvckJveCwgZWxlbWVudCwgYnViYmxlLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIGNvbnN0IGdvID0gKGFuY2hvckJveCwgZWxlbWVudCwgYnViYmxlLCBvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBkZWNpc2lvbiA9IGxheW91dChhbmNob3JCb3gsIGVsZW1lbnQsIGJ1YmJsZSwgb3B0aW9ucyk7XG4gICAgICBwb3NpdGlvbiQyKGVsZW1lbnQsIGRlY2lzaW9uLCBvcHRpb25zKTtcbiAgICAgIHNldFBsYWNlbWVudChlbGVtZW50LCBkZWNpc2lvbik7XG4gICAgICBzZXRDbGFzc2VzKGVsZW1lbnQsIGRlY2lzaW9uKTtcbiAgICAgIHNldEhlaWdodChlbGVtZW50LCBkZWNpc2lvbiwgb3B0aW9ucyk7XG4gICAgICBzZXRXaWR0aChlbGVtZW50LCBkZWNpc2lvbiwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYXlvdXQ6IGRlY2lzaW9uLmxheW91dCxcbiAgICAgICAgcGxhY2VtZW50OiBkZWNpc2lvbi5wbGFjZW1lbnRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGFsbEFsaWdubWVudHMgPSBbXG4gICAgICAndmFsaWduQ2VudHJlJyxcbiAgICAgICdhbGlnbkxlZnQnLFxuICAgICAgJ2FsaWduUmlnaHQnLFxuICAgICAgJ2FsaWduQ2VudHJlJyxcbiAgICAgICd0b3AnLFxuICAgICAgJ2JvdHRvbScsXG4gICAgICAnbGVmdCcsXG4gICAgICAncmlnaHQnLFxuICAgICAgJ2luc2V0J1xuICAgIF07XG4gICAgY29uc3QgbnUkNSA9ICh4T2Zmc2V0LCB5T2Zmc2V0LCBjbGFzc2VzLCBpbnNldE1vZGlmaWVyID0gMSkgPT4ge1xuICAgICAgY29uc3QgaW5zZXRYT2Zmc2V0ID0geE9mZnNldCAqIGluc2V0TW9kaWZpZXI7XG4gICAgICBjb25zdCBpbnNldFlPZmZzZXQgPSB5T2Zmc2V0ICogaW5zZXRNb2RpZmllcjtcbiAgICAgIGNvbnN0IGdldENsYXNzZXMgPSBwcm9wID0+IGdldCRnKGNsYXNzZXMsIHByb3ApLmdldE9yKFtdKTtcbiAgICAgIGNvbnN0IG1ha2UgPSAoeERlbHRhLCB5RGVsdGEsIGFsaWdubWVudHNPbikgPT4ge1xuICAgICAgICBjb25zdCBhbGlnbm1lbnRzT2ZmID0gZGlmZmVyZW5jZShhbGxBbGlnbm1lbnRzLCBhbGlnbm1lbnRzT24pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9mZnNldDogU3VnYXJQb3NpdGlvbih4RGVsdGEsIHlEZWx0YSksXG4gICAgICAgICAgY2xhc3Nlc09uOiBiaW5kJDMoYWxpZ25tZW50c09uLCBnZXRDbGFzc2VzKSxcbiAgICAgICAgICBjbGFzc2VzT2ZmOiBiaW5kJDMoYWxpZ25tZW50c09mZiwgZ2V0Q2xhc3NlcylcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3V0aGVhc3Q6ICgpID0+IG1ha2UoLXhPZmZzZXQsIHlPZmZzZXQsIFtcbiAgICAgICAgICAndG9wJyxcbiAgICAgICAgICAnYWxpZ25MZWZ0J1xuICAgICAgICBdKSxcbiAgICAgICAgc291dGh3ZXN0OiAoKSA9PiBtYWtlKHhPZmZzZXQsIHlPZmZzZXQsIFtcbiAgICAgICAgICAndG9wJyxcbiAgICAgICAgICAnYWxpZ25SaWdodCdcbiAgICAgICAgXSksXG4gICAgICAgIHNvdXRoOiAoKSA9PiBtYWtlKC14T2Zmc2V0IC8gMiwgeU9mZnNldCwgW1xuICAgICAgICAgICd0b3AnLFxuICAgICAgICAgICdhbGlnbkNlbnRyZSdcbiAgICAgICAgXSksXG4gICAgICAgIG5vcnRoZWFzdDogKCkgPT4gbWFrZSgteE9mZnNldCwgLXlPZmZzZXQsIFtcbiAgICAgICAgICAnYm90dG9tJyxcbiAgICAgICAgICAnYWxpZ25MZWZ0J1xuICAgICAgICBdKSxcbiAgICAgICAgbm9ydGh3ZXN0OiAoKSA9PiBtYWtlKHhPZmZzZXQsIC15T2Zmc2V0LCBbXG4gICAgICAgICAgJ2JvdHRvbScsXG4gICAgICAgICAgJ2FsaWduUmlnaHQnXG4gICAgICAgIF0pLFxuICAgICAgICBub3J0aDogKCkgPT4gbWFrZSgteE9mZnNldCAvIDIsIC15T2Zmc2V0LCBbXG4gICAgICAgICAgJ2JvdHRvbScsXG4gICAgICAgICAgJ2FsaWduQ2VudHJlJ1xuICAgICAgICBdKSxcbiAgICAgICAgZWFzdDogKCkgPT4gbWFrZSh4T2Zmc2V0LCAteU9mZnNldCAvIDIsIFtcbiAgICAgICAgICAndmFsaWduQ2VudHJlJyxcbiAgICAgICAgICAnbGVmdCdcbiAgICAgICAgXSksXG4gICAgICAgIHdlc3Q6ICgpID0+IG1ha2UoLXhPZmZzZXQsIC15T2Zmc2V0IC8gMiwgW1xuICAgICAgICAgICd2YWxpZ25DZW50cmUnLFxuICAgICAgICAgICdyaWdodCdcbiAgICAgICAgXSksXG4gICAgICAgIGluc2V0Tm9ydGhlYXN0OiAoKSA9PiBtYWtlKGluc2V0WE9mZnNldCwgaW5zZXRZT2Zmc2V0LCBbXG4gICAgICAgICAgJ3RvcCcsXG4gICAgICAgICAgJ2FsaWduTGVmdCcsXG4gICAgICAgICAgJ2luc2V0J1xuICAgICAgICBdKSxcbiAgICAgICAgaW5zZXROb3J0aHdlc3Q6ICgpID0+IG1ha2UoLWluc2V0WE9mZnNldCwgaW5zZXRZT2Zmc2V0LCBbXG4gICAgICAgICAgJ3RvcCcsXG4gICAgICAgICAgJ2FsaWduUmlnaHQnLFxuICAgICAgICAgICdpbnNldCdcbiAgICAgICAgXSksXG4gICAgICAgIGluc2V0Tm9ydGg6ICgpID0+IG1ha2UoLWluc2V0WE9mZnNldCAvIDIsIGluc2V0WU9mZnNldCwgW1xuICAgICAgICAgICd0b3AnLFxuICAgICAgICAgICdhbGlnbkNlbnRyZScsXG4gICAgICAgICAgJ2luc2V0J1xuICAgICAgICBdKSxcbiAgICAgICAgaW5zZXRTb3V0aGVhc3Q6ICgpID0+IG1ha2UoaW5zZXRYT2Zmc2V0LCAtaW5zZXRZT2Zmc2V0LCBbXG4gICAgICAgICAgJ2JvdHRvbScsXG4gICAgICAgICAgJ2FsaWduTGVmdCcsXG4gICAgICAgICAgJ2luc2V0J1xuICAgICAgICBdKSxcbiAgICAgICAgaW5zZXRTb3V0aHdlc3Q6ICgpID0+IG1ha2UoLWluc2V0WE9mZnNldCwgLWluc2V0WU9mZnNldCwgW1xuICAgICAgICAgICdib3R0b20nLFxuICAgICAgICAgICdhbGlnblJpZ2h0JyxcbiAgICAgICAgICAnaW5zZXQnXG4gICAgICAgIF0pLFxuICAgICAgICBpbnNldFNvdXRoOiAoKSA9PiBtYWtlKC1pbnNldFhPZmZzZXQgLyAyLCAtaW5zZXRZT2Zmc2V0LCBbXG4gICAgICAgICAgJ2JvdHRvbScsXG4gICAgICAgICAgJ2FsaWduQ2VudHJlJyxcbiAgICAgICAgICAnaW5zZXQnXG4gICAgICAgIF0pLFxuICAgICAgICBpbnNldEVhc3Q6ICgpID0+IG1ha2UoLWluc2V0WE9mZnNldCwgLWluc2V0WU9mZnNldCAvIDIsIFtcbiAgICAgICAgICAndmFsaWduQ2VudHJlJyxcbiAgICAgICAgICAncmlnaHQnLFxuICAgICAgICAgICdpbnNldCdcbiAgICAgICAgXSksXG4gICAgICAgIGluc2V0V2VzdDogKCkgPT4gbWFrZShpbnNldFhPZmZzZXQsIC1pbnNldFlPZmZzZXQgLyAyLCBbXG4gICAgICAgICAgJ3ZhbGlnbkNlbnRyZScsXG4gICAgICAgICAgJ2xlZnQnLFxuICAgICAgICAgICdpbnNldCdcbiAgICAgICAgXSlcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBmYWxsYmFjayA9ICgpID0+IG51JDUoMCwgMCwge30pO1xuXG4gICAgY29uc3QgbnUkNCA9IGlkZW50aXR5O1xuXG4gICAgY29uc3Qgb25EaXJlY3Rpb24gPSAoaXNMdHIsIGlzUnRsKSA9PiBlbGVtZW50ID0+IGdldERpcmVjdGlvbihlbGVtZW50KSA9PT0gJ3J0bCcgPyBpc1J0bCA6IGlzTHRyO1xuICAgIGNvbnN0IGdldERpcmVjdGlvbiA9IGVsZW1lbnQgPT4gZ2V0JGUoZWxlbWVudCwgJ2RpcmVjdGlvbicpID09PSAncnRsJyA/ICdydGwnIDogJ2x0cic7XG5cbiAgICB2YXIgQXR0cmlidXRlVmFsdWU7XG4gICAgKGZ1bmN0aW9uIChBdHRyaWJ1dGVWYWx1ZSkge1xuICAgICAgQXR0cmlidXRlVmFsdWVbJ1RvcFRvQm90dG9tJ10gPSAndG9wdG9ib3R0b20nO1xuICAgICAgQXR0cmlidXRlVmFsdWVbJ0JvdHRvbVRvVG9wJ10gPSAnYm90dG9tdG90b3AnO1xuICAgIH0oQXR0cmlidXRlVmFsdWUgfHwgKEF0dHJpYnV0ZVZhbHVlID0ge30pKSk7XG4gICAgY29uc3QgQXR0cmlidXRlID0gJ2RhdGEtYWxsb3ktdmVydGljYWwtZGlyJztcbiAgICBjb25zdCBpc0JvdHRvbVRvVG9wRGlyID0gZWwgPT4gY2xvc2VzdCQyKGVsLCBjdXJyZW50ID0+IGlzRWxlbWVudCQxKGN1cnJlbnQpICYmIGdldCRmKGN1cnJlbnQsICdkYXRhLWFsbG95LXZlcnRpY2FsLWRpcicpID09PSBBdHRyaWJ1dGVWYWx1ZS5Cb3R0b21Ub1RvcCk7XG5cbiAgICBjb25zdCBzY2hlbWEkeSA9ICgpID0+IG9wdGlvbk9iak9mKCdsYXlvdXRzJywgW1xuICAgICAgcmVxdWlyZWQkMSgnb25MdHInKSxcbiAgICAgIHJlcXVpcmVkJDEoJ29uUnRsJyksXG4gICAgICBvcHRpb24kMygnb25Cb3R0b21MdHInKSxcbiAgICAgIG9wdGlvbiQzKCdvbkJvdHRvbVJ0bCcpXG4gICAgXSk7XG4gICAgY29uc3QgZ2V0JDUgPSAoZWxlbSwgaW5mbywgZGVmYXVsdEx0ciwgZGVmYXVsdFJ0bCwgZGVmYXVsdEJvdHRvbUx0ciwgZGVmYXVsdEJvdHRvbVJ0bCwgZGlyRWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgaXNCb3R0b21Ub1RvcCA9IGRpckVsZW1lbnQubWFwKGlzQm90dG9tVG9Ub3BEaXIpLmdldE9yKGZhbHNlKTtcbiAgICAgIGNvbnN0IGN1c3RvbUx0ciA9IGluZm8ubGF5b3V0cy5tYXAobHMgPT4gbHMub25MdHIoZWxlbSkpO1xuICAgICAgY29uc3QgY3VzdG9tUnRsID0gaW5mby5sYXlvdXRzLm1hcChscyA9PiBscy5vblJ0bChlbGVtKSk7XG4gICAgICBjb25zdCBsdHIgPSBpc0JvdHRvbVRvVG9wID8gaW5mby5sYXlvdXRzLmJpbmQobHMgPT4gbHMub25Cb3R0b21MdHIubWFwKGYgPT4gZihlbGVtKSkpLm9yKGN1c3RvbUx0cikuZ2V0T3IoZGVmYXVsdEJvdHRvbUx0cikgOiBjdXN0b21MdHIuZ2V0T3IoZGVmYXVsdEx0cik7XG4gICAgICBjb25zdCBydGwgPSBpc0JvdHRvbVRvVG9wID8gaW5mby5sYXlvdXRzLmJpbmQobHMgPT4gbHMub25Cb3R0b21SdGwubWFwKGYgPT4gZihlbGVtKSkpLm9yKGN1c3RvbVJ0bCkuZ2V0T3IoZGVmYXVsdEJvdHRvbVJ0bCkgOiBjdXN0b21SdGwuZ2V0T3IoZGVmYXVsdFJ0bCk7XG4gICAgICBjb25zdCBmID0gb25EaXJlY3Rpb24obHRyLCBydGwpO1xuICAgICAgcmV0dXJuIGYoZWxlbSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHBsYWNlbWVudCQ0ID0gKGNvbXBvbmVudCwgYW5jaG9ySW5mbywgb3JpZ2luKSA9PiB7XG4gICAgICBjb25zdCBob3RzcG90ID0gYW5jaG9ySW5mby5ob3RzcG90O1xuICAgICAgY29uc3QgYW5jaG9yQm94ID0gdG9Cb3gob3JpZ2luLCBob3RzcG90LmVsZW1lbnQpO1xuICAgICAgY29uc3QgbGF5b3V0cyA9IGdldCQ1KGNvbXBvbmVudC5lbGVtZW50LCBhbmNob3JJbmZvLCBiZWxvd09yQWJvdmUoKSwgYmVsb3dPckFib3ZlUnRsKCksIGFib3ZlT3JCZWxvdygpLCBhYm92ZU9yQmVsb3dSdGwoKSwgT3B0aW9uYWwuc29tZShhbmNob3JJbmZvLmhvdHNwb3QuZWxlbWVudCkpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUobnUkNCh7XG4gICAgICAgIGFuY2hvckJveCxcbiAgICAgICAgYnViYmxlOiBhbmNob3JJbmZvLmJ1YmJsZS5nZXRPcihmYWxsYmFjaygpKSxcbiAgICAgICAgb3ZlcnJpZGVzOiBhbmNob3JJbmZvLm92ZXJyaWRlcyxcbiAgICAgICAgbGF5b3V0c1xuICAgICAgfSkpO1xuICAgIH07XG4gICAgdmFyIEhvdHNwb3RBbmNob3IgPSBbXG4gICAgICByZXF1aXJlZCQxKCdob3RzcG90JyksXG4gICAgICBvcHRpb24kMygnYnViYmxlJyksXG4gICAgICBkZWZhdWx0ZWQoJ292ZXJyaWRlcycsIHt9KSxcbiAgICAgIHNjaGVtYSR5KCksXG4gICAgICBvdXRwdXQkMSgncGxhY2VtZW50JywgcGxhY2VtZW50JDQpXG4gICAgXTtcblxuICAgIGNvbnN0IHBsYWNlbWVudCQzID0gKGNvbXBvbmVudCwgYW5jaG9ySW5mbywgb3JpZ2luKSA9PiB7XG4gICAgICBjb25zdCBwb3MgPSB0cmFuc2xhdGUkMihvcmlnaW4sIGFuY2hvckluZm8ueCwgYW5jaG9ySW5mby55KTtcbiAgICAgIGNvbnN0IGFuY2hvckJveCA9IGJvdW5kcyhwb3MubGVmdCwgcG9zLnRvcCwgYW5jaG9ySW5mby53aWR0aCwgYW5jaG9ySW5mby5oZWlnaHQpO1xuICAgICAgY29uc3QgbGF5b3V0cyA9IGdldCQ1KGNvbXBvbmVudC5lbGVtZW50LCBhbmNob3JJbmZvLCBhbGwkMSgpLCBhbGxSdGwkMSgpLCBhbGwkMSgpLCBhbGxSdGwkMSgpLCBPcHRpb25hbC5ub25lKCkpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUobnUkNCh7XG4gICAgICAgIGFuY2hvckJveCxcbiAgICAgICAgYnViYmxlOiBhbmNob3JJbmZvLmJ1YmJsZSxcbiAgICAgICAgb3ZlcnJpZGVzOiBhbmNob3JJbmZvLm92ZXJyaWRlcyxcbiAgICAgICAgbGF5b3V0c1xuICAgICAgfSkpO1xuICAgIH07XG4gICAgdmFyIE1ha2VzaGlmdEFuY2hvciA9IFtcbiAgICAgIHJlcXVpcmVkJDEoJ3gnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ3knKSxcbiAgICAgIGRlZmF1bHRlZCgnaGVpZ2h0JywgMCksXG4gICAgICBkZWZhdWx0ZWQoJ3dpZHRoJywgMCksXG4gICAgICBkZWZhdWx0ZWQoJ2J1YmJsZScsIGZhbGxiYWNrKCkpLFxuICAgICAgZGVmYXVsdGVkKCdvdmVycmlkZXMnLCB7fSksXG4gICAgICBzY2hlbWEkeSgpLFxuICAgICAgb3V0cHV0JDEoJ3BsYWNlbWVudCcsIHBsYWNlbWVudCQzKVxuICAgIF07XG5cbiAgICBjb25zdCBhZHQkNyA9IEFkdC5nZW5lcmF0ZShbXG4gICAgICB7IHNjcmVlbjogWydwb2ludCddIH0sXG4gICAgICB7XG4gICAgICAgIGFic29sdXRlOiBbXG4gICAgICAgICAgJ3BvaW50JyxcbiAgICAgICAgICAnc2Nyb2xsTGVmdCcsXG4gICAgICAgICAgJ3Njcm9sbFRvcCdcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0pO1xuICAgIGNvbnN0IHRvRml4ZWQgPSBwb3MgPT4gcG9zLmZvbGQoaWRlbnRpdHksIChwb2ludCwgc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wKSA9PiBwb2ludC50cmFuc2xhdGUoLXNjcm9sbExlZnQsIC1zY3JvbGxUb3ApKTtcbiAgICBjb25zdCB0b0Fic29sdXRlID0gcG9zID0+IHBvcy5mb2xkKGlkZW50aXR5LCBpZGVudGl0eSk7XG4gICAgY29uc3Qgc3VtID0gcG9pbnRzID0+IGZvbGRsKHBvaW50cywgKGIsIGEpID0+IGIudHJhbnNsYXRlKGEubGVmdCwgYS50b3ApLCBTdWdhclBvc2l0aW9uKDAsIDApKTtcbiAgICBjb25zdCBzdW1Bc0ZpeGVkID0gcG9zaXRpb25zID0+IHtcbiAgICAgIGNvbnN0IHBvaW50cyA9IG1hcCQyKHBvc2l0aW9ucywgdG9GaXhlZCk7XG4gICAgICByZXR1cm4gc3VtKHBvaW50cyk7XG4gICAgfTtcbiAgICBjb25zdCBzdW1Bc0Fic29sdXRlID0gcG9zaXRpb25zID0+IHtcbiAgICAgIGNvbnN0IHBvaW50cyA9IG1hcCQyKHBvc2l0aW9ucywgdG9BYnNvbHV0ZSk7XG4gICAgICByZXR1cm4gc3VtKHBvaW50cyk7XG4gICAgfTtcbiAgICBjb25zdCBzY3JlZW4gPSBhZHQkNy5zY3JlZW47XG4gICAgY29uc3QgYWJzb2x1dGUkMSA9IGFkdCQ3LmFic29sdXRlO1xuXG4gICAgY29uc3QgZ2V0T2Zmc2V0ID0gKGNvbXBvbmVudCwgb3JpZ2luLCBhbmNob3JJbmZvKSA9PiB7XG4gICAgICBjb25zdCB3aW4gPSBkZWZhdWx0VmlldyhhbmNob3JJbmZvLnJvb3QpLmRvbTtcbiAgICAgIGNvbnN0IGhhc1NhbWVPd25lciA9IGZyYW1lID0+IHtcbiAgICAgICAgY29uc3QgZnJhbWVPd25lciA9IG93bmVyJDQoZnJhbWUpO1xuICAgICAgICBjb25zdCBjb21wT3duZXIgPSBvd25lciQ0KGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGVxKGZyYW1lT3duZXIsIGNvbXBPd25lcik7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20od2luLmZyYW1lRWxlbWVudCkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKS5maWx0ZXIoaGFzU2FtZU93bmVyKS5tYXAoYWJzb2x1dGUkMyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRSb290UG9pbnQgPSAoY29tcG9uZW50LCBvcmlnaW4sIGFuY2hvckluZm8pID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IG93bmVyJDQoY29tcG9uZW50LmVsZW1lbnQpO1xuICAgICAgY29uc3Qgb3V0ZXJTY3JvbGwgPSBnZXQkYihkb2MpO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0KGNvbXBvbmVudCwgb3JpZ2luLCBhbmNob3JJbmZvKS5nZXRPcihvdXRlclNjcm9sbCk7XG4gICAgICByZXR1cm4gYWJzb2x1dGUkMShvZmZzZXQsIG91dGVyU2Nyb2xsLmxlZnQsIG91dGVyU2Nyb2xsLnRvcCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldEJveCA9IChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpID0+IHtcbiAgICAgIGNvbnN0IHBvaW50ID0gc2NyZWVuKFN1Z2FyUG9zaXRpb24obGVmdCwgdG9wKSk7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShwb2ludGVkKHBvaW50LCB3aWR0aCwgaGVpZ2h0KSk7XG4gICAgfTtcbiAgICBjb25zdCBjYWxjTmV3QW5jaG9yID0gKG9wdEJveCwgcm9vdFBvaW50LCBhbmNob3JJbmZvLCBvcmlnaW4sIGVsZW0pID0+IG9wdEJveC5tYXAoYm94ID0+IHtcbiAgICAgIGNvbnN0IHBvaW50cyA9IFtcbiAgICAgICAgcm9vdFBvaW50LFxuICAgICAgICBib3gucG9pbnRcbiAgICAgIF07XG4gICAgICBjb25zdCB0b3BMZWZ0ID0gY2F0YSQxKG9yaWdpbiwgKCkgPT4gc3VtQXNBYnNvbHV0ZShwb2ludHMpLCAoKSA9PiBzdW1Bc0Fic29sdXRlKHBvaW50cyksICgpID0+IHN1bUFzRml4ZWQocG9pbnRzKSk7XG4gICAgICBjb25zdCBhbmNob3JCb3ggPSByZWN0KHRvcExlZnQubGVmdCwgdG9wTGVmdC50b3AsIGJveC53aWR0aCwgYm94LmhlaWdodCk7XG4gICAgICBjb25zdCBsYXlvdXRzTHRyID0gYW5jaG9ySW5mby5zaG93QWJvdmUgPyBhYm92ZU9yQmVsb3coKSA6IGJlbG93T3JBYm92ZSgpO1xuICAgICAgY29uc3QgbGF5b3V0c1J0bCA9IGFuY2hvckluZm8uc2hvd0Fib3ZlID8gYWJvdmVPckJlbG93UnRsKCkgOiBiZWxvd09yQWJvdmVSdGwoKTtcbiAgICAgIGNvbnN0IGxheW91dHMgPSBnZXQkNShlbGVtLCBhbmNob3JJbmZvLCBsYXlvdXRzTHRyLCBsYXlvdXRzUnRsLCBsYXlvdXRzTHRyLCBsYXlvdXRzUnRsLCBPcHRpb25hbC5ub25lKCkpO1xuICAgICAgcmV0dXJuIG51JDQoe1xuICAgICAgICBhbmNob3JCb3gsXG4gICAgICAgIGJ1YmJsZTogYW5jaG9ySW5mby5idWJibGUuZ2V0T3IoZmFsbGJhY2soKSksXG4gICAgICAgIG92ZXJyaWRlczogYW5jaG9ySW5mby5vdmVycmlkZXMsXG4gICAgICAgIGxheW91dHNcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcGxhY2VtZW50JDIgPSAoY29tcG9uZW50LCBhbmNob3JJbmZvLCBvcmlnaW4pID0+IHtcbiAgICAgIGNvbnN0IHJvb3RQb2ludCA9IGdldFJvb3RQb2ludChjb21wb25lbnQsIG9yaWdpbiwgYW5jaG9ySW5mbyk7XG4gICAgICByZXR1cm4gYW5jaG9ySW5mby5ub2RlLmZpbHRlcihpbkJvZHkpLmJpbmQodGFyZ2V0ID0+IHtcbiAgICAgICAgY29uc3QgcmVjdCA9IHRhcmdldC5kb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IG5vZGVCb3ggPSBnZXRCb3gocmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpO1xuICAgICAgICBjb25zdCBlbGVtID0gYW5jaG9ySW5mby5ub2RlLmdldE9yKGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGNhbGNOZXdBbmNob3Iobm9kZUJveCwgcm9vdFBvaW50LCBhbmNob3JJbmZvLCBvcmlnaW4sIGVsZW0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgTm9kZUFuY2hvciA9IFtcbiAgICAgIHJlcXVpcmVkJDEoJ25vZGUnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ3Jvb3QnKSxcbiAgICAgIG9wdGlvbiQzKCdidWJibGUnKSxcbiAgICAgIHNjaGVtYSR5KCksXG4gICAgICBkZWZhdWx0ZWQoJ292ZXJyaWRlcycsIHt9KSxcbiAgICAgIGRlZmF1bHRlZCgnc2hvd0Fib3ZlJywgZmFsc2UpLFxuICAgICAgb3V0cHV0JDEoJ3BsYWNlbWVudCcsIHBsYWNlbWVudCQyKVxuICAgIF07XG5cbiAgICBjb25zdCB6ZXJvV2lkdGggPSAnXFx1RkVGRic7XG4gICAgY29uc3QgbmJzcCA9ICdcXHhBMCc7XG5cbiAgICBjb25zdCBjcmVhdGUkMyA9IChzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSA9PiAoe1xuICAgICAgc3RhcnQsXG4gICAgICBzb2Zmc2V0LFxuICAgICAgZmluaXNoLFxuICAgICAgZm9mZnNldFxuICAgIH0pO1xuICAgIGNvbnN0IFNpbVJhbmdlID0geyBjcmVhdGU6IGNyZWF0ZSQzIH07XG5cbiAgICBjb25zdCBhZHQkNiA9IEFkdC5nZW5lcmF0ZShbXG4gICAgICB7IGJlZm9yZTogWydlbGVtZW50J10gfSxcbiAgICAgIHtcbiAgICAgICAgb246IFtcbiAgICAgICAgICAnZWxlbWVudCcsXG4gICAgICAgICAgJ29mZnNldCdcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHsgYWZ0ZXI6IFsnZWxlbWVudCddIH1cbiAgICBdKTtcbiAgICBjb25zdCBjYXRhID0gKHN1YmplY3QsIG9uQmVmb3JlLCBvbk9uLCBvbkFmdGVyKSA9PiBzdWJqZWN0LmZvbGQob25CZWZvcmUsIG9uT24sIG9uQWZ0ZXIpO1xuICAgIGNvbnN0IGdldFN0YXJ0JDEgPSBzaXR1ID0+IHNpdHUuZm9sZChpZGVudGl0eSwgaWRlbnRpdHksIGlkZW50aXR5KTtcbiAgICBjb25zdCBiZWZvcmUgPSBhZHQkNi5iZWZvcmU7XG4gICAgY29uc3Qgb24kMSA9IGFkdCQ2Lm9uO1xuICAgIGNvbnN0IGFmdGVyJDEgPSBhZHQkNi5hZnRlcjtcbiAgICBjb25zdCBTaXR1ID0ge1xuICAgICAgYmVmb3JlLFxuICAgICAgb246IG9uJDEsXG4gICAgICBhZnRlcjogYWZ0ZXIkMSxcbiAgICAgIGNhdGEsXG4gICAgICBnZXRTdGFydDogZ2V0U3RhcnQkMVxuICAgIH07XG5cbiAgICBjb25zdCBhZHQkNSA9IEFkdC5nZW5lcmF0ZShbXG4gICAgICB7IGRvbVJhbmdlOiBbJ3JuZyddIH0sXG4gICAgICB7XG4gICAgICAgIHJlbGF0aXZlOiBbXG4gICAgICAgICAgJ3N0YXJ0U2l0dScsXG4gICAgICAgICAgJ2ZpbmlzaFNpdHUnXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGV4YWN0OiBbXG4gICAgICAgICAgJ3N0YXJ0JyxcbiAgICAgICAgICAnc29mZnNldCcsXG4gICAgICAgICAgJ2ZpbmlzaCcsXG4gICAgICAgICAgJ2ZvZmZzZXQnXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdKTtcbiAgICBjb25zdCBleGFjdEZyb21SYW5nZSA9IHNpbVJhbmdlID0+IGFkdCQ1LmV4YWN0KHNpbVJhbmdlLnN0YXJ0LCBzaW1SYW5nZS5zb2Zmc2V0LCBzaW1SYW5nZS5maW5pc2gsIHNpbVJhbmdlLmZvZmZzZXQpO1xuICAgIGNvbnN0IGdldFN0YXJ0ID0gc2VsZWN0aW9uID0+IHNlbGVjdGlvbi5tYXRjaCh7XG4gICAgICBkb21SYW5nZTogcm5nID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJuZy5zdGFydENvbnRhaW5lciksXG4gICAgICByZWxhdGl2ZTogKHN0YXJ0U2l0dSwgX2ZpbmlzaFNpdHUpID0+IFNpdHUuZ2V0U3RhcnQoc3RhcnRTaXR1KSxcbiAgICAgIGV4YWN0OiAoc3RhcnQsIF9zb2Zmc2V0LCBfZmluaXNoLCBfZm9mZnNldCkgPT4gc3RhcnRcbiAgICB9KTtcbiAgICBjb25zdCBkb21SYW5nZSA9IGFkdCQ1LmRvbVJhbmdlO1xuICAgIGNvbnN0IHJlbGF0aXZlID0gYWR0JDUucmVsYXRpdmU7XG4gICAgY29uc3QgZXhhY3QgPSBhZHQkNS5leGFjdDtcbiAgICBjb25zdCBnZXRXaW4gPSBzZWxlY3Rpb24gPT4ge1xuICAgICAgY29uc3Qgc3RhcnQgPSBnZXRTdGFydChzZWxlY3Rpb24pO1xuICAgICAgcmV0dXJuIGRlZmF1bHRWaWV3KHN0YXJ0KTtcbiAgICB9O1xuICAgIGNvbnN0IHJhbmdlJDEgPSBTaW1SYW5nZS5jcmVhdGU7XG4gICAgY29uc3QgU2ltU2VsZWN0aW9uID0ge1xuICAgICAgZG9tUmFuZ2UsXG4gICAgICByZWxhdGl2ZSxcbiAgICAgIGV4YWN0LFxuICAgICAgZXhhY3RGcm9tUmFuZ2UsXG4gICAgICBnZXRXaW4sXG4gICAgICByYW5nZTogcmFuZ2UkMVxuICAgIH07XG5cbiAgICBjb25zdCBzZXRTdGFydCA9IChybmcsIHNpdHUpID0+IHtcbiAgICAgIHNpdHUuZm9sZChlID0+IHtcbiAgICAgICAgcm5nLnNldFN0YXJ0QmVmb3JlKGUuZG9tKTtcbiAgICAgIH0sIChlLCBvKSA9PiB7XG4gICAgICAgIHJuZy5zZXRTdGFydChlLmRvbSwgbyk7XG4gICAgICB9LCBlID0+IHtcbiAgICAgICAgcm5nLnNldFN0YXJ0QWZ0ZXIoZS5kb20pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRGaW5pc2ggPSAocm5nLCBzaXR1KSA9PiB7XG4gICAgICBzaXR1LmZvbGQoZSA9PiB7XG4gICAgICAgIHJuZy5zZXRFbmRCZWZvcmUoZS5kb20pO1xuICAgICAgfSwgKGUsIG8pID0+IHtcbiAgICAgICAgcm5nLnNldEVuZChlLmRvbSwgbyk7XG4gICAgICB9LCBlID0+IHtcbiAgICAgICAgcm5nLnNldEVuZEFmdGVyKGUuZG9tKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVsYXRpdmVUb05hdGl2ZSA9ICh3aW4sIHN0YXJ0U2l0dSwgZmluaXNoU2l0dSkgPT4ge1xuICAgICAgY29uc3QgcmFuZ2UgPSB3aW4uZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHNldFN0YXJ0KHJhbmdlLCBzdGFydFNpdHUpO1xuICAgICAgc2V0RmluaXNoKHJhbmdlLCBmaW5pc2hTaXR1KTtcbiAgICAgIHJldHVybiByYW5nZTtcbiAgICB9O1xuICAgIGNvbnN0IGV4YWN0VG9OYXRpdmUgPSAod2luLCBzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSA9PiB7XG4gICAgICBjb25zdCBybmcgPSB3aW4uZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHJuZy5zZXRTdGFydChzdGFydC5kb20sIHNvZmZzZXQpO1xuICAgICAgcm5nLnNldEVuZChmaW5pc2guZG9tLCBmb2Zmc2V0KTtcbiAgICAgIHJldHVybiBybmc7XG4gICAgfTtcbiAgICBjb25zdCB0b1JlY3QgPSByZWN0ID0+ICh7XG4gICAgICBsZWZ0OiByZWN0LmxlZnQsXG4gICAgICB0b3A6IHJlY3QudG9wLFxuICAgICAgcmlnaHQ6IHJlY3QucmlnaHQsXG4gICAgICBib3R0b206IHJlY3QuYm90dG9tLFxuICAgICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0Rmlyc3RSZWN0JDEgPSBybmcgPT4ge1xuICAgICAgY29uc3QgcmVjdHMgPSBybmcuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgICAgIGNvbnN0IHJlY3QgPSByZWN0cy5sZW5ndGggPiAwID8gcmVjdHNbMF0gOiBybmcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICByZXR1cm4gcmVjdC53aWR0aCA+IDAgfHwgcmVjdC5oZWlnaHQgPiAwID8gT3B0aW9uYWwuc29tZShyZWN0KS5tYXAodG9SZWN0KSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEJvdW5kcyQyID0gcm5nID0+IHtcbiAgICAgIGNvbnN0IHJlY3QgPSBybmcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICByZXR1cm4gcmVjdC53aWR0aCA+IDAgfHwgcmVjdC5oZWlnaHQgPiAwID8gT3B0aW9uYWwuc29tZShyZWN0KS5tYXAodG9SZWN0KSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYWR0JDQgPSBBZHQuZ2VuZXJhdGUoW1xuICAgICAge1xuICAgICAgICBsdHI6IFtcbiAgICAgICAgICAnc3RhcnQnLFxuICAgICAgICAgICdzb2Zmc2V0JyxcbiAgICAgICAgICAnZmluaXNoJyxcbiAgICAgICAgICAnZm9mZnNldCdcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcnRsOiBbXG4gICAgICAgICAgJ3N0YXJ0JyxcbiAgICAgICAgICAnc29mZnNldCcsXG4gICAgICAgICAgJ2ZpbmlzaCcsXG4gICAgICAgICAgJ2ZvZmZzZXQnXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdKTtcbiAgICBjb25zdCBmcm9tUmFuZ2UgPSAod2luLCB0eXBlLCByYW5nZSkgPT4gdHlwZShTdWdhckVsZW1lbnQuZnJvbURvbShyYW5nZS5zdGFydENvbnRhaW5lciksIHJhbmdlLnN0YXJ0T2Zmc2V0LCBTdWdhckVsZW1lbnQuZnJvbURvbShyYW5nZS5lbmRDb250YWluZXIpLCByYW5nZS5lbmRPZmZzZXQpO1xuICAgIGNvbnN0IGdldFJhbmdlcyA9ICh3aW4sIHNlbGVjdGlvbikgPT4gc2VsZWN0aW9uLm1hdGNoKHtcbiAgICAgIGRvbVJhbmdlOiBybmcgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGx0cjogY29uc3RhbnQkMShybmcpLFxuICAgICAgICAgIHJ0bDogT3B0aW9uYWwubm9uZVxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHJlbGF0aXZlOiAoc3RhcnRTaXR1LCBmaW5pc2hTaXR1KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbHRyOiBjYWNoZWQoKCkgPT4gcmVsYXRpdmVUb05hdGl2ZSh3aW4sIHN0YXJ0U2l0dSwgZmluaXNoU2l0dSkpLFxuICAgICAgICAgIHJ0bDogY2FjaGVkKCgpID0+IE9wdGlvbmFsLnNvbWUocmVsYXRpdmVUb05hdGl2ZSh3aW4sIGZpbmlzaFNpdHUsIHN0YXJ0U2l0dSkpKVxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIGV4YWN0OiAoc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGx0cjogY2FjaGVkKCgpID0+IGV4YWN0VG9OYXRpdmUod2luLCBzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSksXG4gICAgICAgICAgcnRsOiBjYWNoZWQoKCkgPT4gT3B0aW9uYWwuc29tZShleGFjdFRvTmF0aXZlKHdpbiwgZmluaXNoLCBmb2Zmc2V0LCBzdGFydCwgc29mZnNldCkpKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGRvRGlhZ25vc2UgPSAod2luLCByYW5nZXMpID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IHJhbmdlcy5sdHIoKTtcbiAgICAgIGlmIChybmcuY29sbGFwc2VkKSB7XG4gICAgICAgIGNvbnN0IHJldmVyc2VkID0gcmFuZ2VzLnJ0bCgpLmZpbHRlcihyZXYgPT4gcmV2LmNvbGxhcHNlZCA9PT0gZmFsc2UpO1xuICAgICAgICByZXR1cm4gcmV2ZXJzZWQubWFwKHJldiA9PiBhZHQkNC5ydGwoU3VnYXJFbGVtZW50LmZyb21Eb20ocmV2LmVuZENvbnRhaW5lciksIHJldi5lbmRPZmZzZXQsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJldi5zdGFydENvbnRhaW5lciksIHJldi5zdGFydE9mZnNldCkpLmdldE9yVGh1bmsoKCkgPT4gZnJvbVJhbmdlKHdpbiwgYWR0JDQubHRyLCBybmcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmcm9tUmFuZ2Uod2luLCBhZHQkNC5sdHIsIHJuZyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBkaWFnbm9zZSA9ICh3aW4sIHNlbGVjdGlvbikgPT4ge1xuICAgICAgY29uc3QgcmFuZ2VzID0gZ2V0UmFuZ2VzKHdpbiwgc2VsZWN0aW9uKTtcbiAgICAgIHJldHVybiBkb0RpYWdub3NlKHdpbiwgcmFuZ2VzKTtcbiAgICB9O1xuICAgIGNvbnN0IGFzTHRyUmFuZ2UgPSAod2luLCBzZWxlY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IGRpYWdub3NpcyA9IGRpYWdub3NlKHdpbiwgc2VsZWN0aW9uKTtcbiAgICAgIHJldHVybiBkaWFnbm9zaXMubWF0Y2goe1xuICAgICAgICBsdHI6IChzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSA9PiB7XG4gICAgICAgICAgY29uc3Qgcm5nID0gd2luLmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgICAgcm5nLnNldFN0YXJ0KHN0YXJ0LmRvbSwgc29mZnNldCk7XG4gICAgICAgICAgcm5nLnNldEVuZChmaW5pc2guZG9tLCBmb2Zmc2V0KTtcbiAgICAgICAgICByZXR1cm4gcm5nO1xuICAgICAgICB9LFxuICAgICAgICBydGw6IChzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSA9PiB7XG4gICAgICAgICAgY29uc3Qgcm5nID0gd2luLmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgICAgcm5nLnNldFN0YXJ0KGZpbmlzaC5kb20sIGZvZmZzZXQpO1xuICAgICAgICAgIHJuZy5zZXRFbmQoc3RhcnQuZG9tLCBzb2Zmc2V0KTtcbiAgICAgICAgICByZXR1cm4gcm5nO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGFkdCQ0Lmx0cjtcbiAgICBhZHQkNC5ydGw7XG5cbiAgICBjb25zdCBhbmNlc3RvcnMgPSAoc2NvcGUsIHByZWRpY2F0ZSwgaXNSb290KSA9PiBmaWx0ZXIkMihwYXJlbnRzKHNjb3BlLCBpc1Jvb3QpLCBwcmVkaWNhdGUpO1xuXG4gICAgY29uc3QgZGVzY2VuZGFudHMgPSAoc2NvcGUsIHNlbGVjdG9yKSA9PiBhbGwkMyhzZWxlY3Rvciwgc2NvcGUpO1xuXG4gICAgY29uc3QgbWFrZVJhbmdlID0gKHN0YXJ0LCBzb2Zmc2V0LCBmaW5pc2gsIGZvZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IG93bmVyJDQoc3RhcnQpO1xuICAgICAgY29uc3Qgcm5nID0gZG9jLmRvbS5jcmVhdGVSYW5nZSgpO1xuICAgICAgcm5nLnNldFN0YXJ0KHN0YXJ0LmRvbSwgc29mZnNldCk7XG4gICAgICBybmcuc2V0RW5kKGZpbmlzaC5kb20sIGZvZmZzZXQpO1xuICAgICAgcmV0dXJuIHJuZztcbiAgICB9O1xuICAgIGNvbnN0IGFmdGVyID0gKHN0YXJ0LCBzb2Zmc2V0LCBmaW5pc2gsIGZvZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBtYWtlUmFuZ2Uoc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCk7XG4gICAgICBjb25zdCBzYW1lID0gZXEoc3RhcnQsIGZpbmlzaCkgJiYgc29mZnNldCA9PT0gZm9mZnNldDtcbiAgICAgIHJldHVybiByLmNvbGxhcHNlZCAmJiAhc2FtZTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0TmF0aXZlU2VsZWN0aW9uID0gd2luID0+IE9wdGlvbmFsLmZyb20od2luLmdldFNlbGVjdGlvbigpKTtcbiAgICBjb25zdCByZWFkUmFuZ2UgPSBzZWxlY3Rpb24gPT4ge1xuICAgICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xuICAgICAgICBjb25zdCBmaXJzdFJuZyA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuICAgICAgICBjb25zdCBsYXN0Um5nID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoc2VsZWN0aW9uLnJhbmdlQ291bnQgLSAxKTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoU2ltUmFuZ2UuY3JlYXRlKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGZpcnN0Um5nLnN0YXJ0Q29udGFpbmVyKSwgZmlyc3RSbmcuc3RhcnRPZmZzZXQsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKGxhc3RSbmcuZW5kQ29udGFpbmVyKSwgbGFzdFJuZy5lbmRPZmZzZXQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBkb0dldEV4YWN0ID0gc2VsZWN0aW9uID0+IHtcbiAgICAgIGlmIChzZWxlY3Rpb24uYW5jaG9yTm9kZSA9PT0gbnVsbCB8fCBzZWxlY3Rpb24uZm9jdXNOb2RlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZWFkUmFuZ2Uoc2VsZWN0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGFuY2hvciA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHNlbGVjdGlvbi5hbmNob3JOb2RlKTtcbiAgICAgICAgY29uc3QgZm9jdXMgPSBTdWdhckVsZW1lbnQuZnJvbURvbShzZWxlY3Rpb24uZm9jdXNOb2RlKTtcbiAgICAgICAgcmV0dXJuIGFmdGVyKGFuY2hvciwgc2VsZWN0aW9uLmFuY2hvck9mZnNldCwgZm9jdXMsIHNlbGVjdGlvbi5mb2N1c09mZnNldCkgPyBPcHRpb25hbC5zb21lKFNpbVJhbmdlLmNyZWF0ZShhbmNob3IsIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsIGZvY3VzLCBzZWxlY3Rpb24uZm9jdXNPZmZzZXQpKSA6IHJlYWRSYW5nZShzZWxlY3Rpb24pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ2V0RXhhY3QgPSB3aW4gPT4gZ2V0TmF0aXZlU2VsZWN0aW9uKHdpbikuZmlsdGVyKHNlbCA9PiBzZWwucmFuZ2VDb3VudCA+IDApLmJpbmQoZG9HZXRFeGFjdCk7XG4gICAgY29uc3QgZ2V0Rmlyc3RSZWN0ID0gKHdpbiwgc2VsZWN0aW9uKSA9PiB7XG4gICAgICBjb25zdCBybmcgPSBhc0x0clJhbmdlKHdpbiwgc2VsZWN0aW9uKTtcbiAgICAgIHJldHVybiBnZXRGaXJzdFJlY3QkMShybmcpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Qm91bmRzJDEgPSAod2luLCBzZWxlY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGFzTHRyUmFuZ2Uod2luLCBzZWxlY3Rpb24pO1xuICAgICAgcmV0dXJuIGdldEJvdW5kcyQyKHJuZyk7XG4gICAgfTtcblxuICAgIGNvbnN0IE5vZGVWYWx1ZSA9IChpcywgbmFtZSkgPT4ge1xuICAgICAgY29uc3QgZ2V0ID0gZWxlbWVudCA9PiB7XG4gICAgICAgIGlmICghaXMoZWxlbWVudCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBvbmx5IGdldCAnICsgbmFtZSArICcgdmFsdWUgb2YgYSAnICsgbmFtZSArICcgbm9kZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXRPcHRpb24oZWxlbWVudCkuZ2V0T3IoJycpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldE9wdGlvbiA9IGVsZW1lbnQgPT4gaXMoZWxlbWVudCkgPyBPcHRpb25hbC5mcm9tKGVsZW1lbnQuZG9tLm5vZGVWYWx1ZSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICBjb25zdCBzZXQgPSAoZWxlbWVudCwgdmFsdWUpID0+IHtcbiAgICAgICAgaWYgKCFpcyhlbGVtZW50KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG9ubHkgc2V0IHJhdyAnICsgbmFtZSArICcgdmFsdWUgb2YgYSAnICsgbmFtZSArICcgbm9kZScpO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnQuZG9tLm5vZGVWYWx1ZSA9IHZhbHVlO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdldCxcbiAgICAgICAgZ2V0T3B0aW9uLFxuICAgICAgICBzZXRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGFwaSA9IE5vZGVWYWx1ZShpc1RleHQsICd0ZXh0Jyk7XG4gICAgY29uc3QgZ2V0JDQgPSBlbGVtZW50ID0+IGFwaS5nZXQoZWxlbWVudCk7XG5cbiAgICBjb25zdCBwb2ludCA9IChlbGVtZW50LCBvZmZzZXQpID0+ICh7XG4gICAgICBlbGVtZW50LFxuICAgICAgb2Zmc2V0XG4gICAgfSk7XG4gICAgY29uc3QgZGVzY2VuZE9uY2UkMSA9IChlbGVtZW50LCBvZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkcmVuJDEgPSBjaGlsZHJlbihlbGVtZW50KTtcbiAgICAgIGlmIChjaGlsZHJlbiQxLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcG9pbnQoZWxlbWVudCwgb2Zmc2V0KTtcbiAgICAgIH0gZWxzZSBpZiAob2Zmc2V0IDwgY2hpbGRyZW4kMS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHBvaW50KGNoaWxkcmVuJDFbb2Zmc2V0XSwgMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsYXN0ID0gY2hpbGRyZW4kMVtjaGlsZHJlbiQxLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBsZW4gPSBpc1RleHQobGFzdCkgPyBnZXQkNChsYXN0KS5sZW5ndGggOiBjaGlsZHJlbihsYXN0KS5sZW5ndGg7XG4gICAgICAgIHJldHVybiBwb2ludChsYXN0LCBsZW4pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBkZXNjZW5kT25jZSA9IChlbGVtZW50LCBvZmZzZXQpID0+IGlzVGV4dChlbGVtZW50KSA/IHBvaW50KGVsZW1lbnQsIG9mZnNldCkgOiBkZXNjZW5kT25jZSQxKGVsZW1lbnQsIG9mZnNldCk7XG4gICAgY29uc3QgaXNTaW1SYW5nZSA9IGRldGFpbCA9PiBkZXRhaWwuZm9mZnNldCAhPT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGdldEFuY2hvclNlbGVjdGlvbiA9ICh3aW4sIGFuY2hvckluZm8pID0+IHtcbiAgICAgIGNvbnN0IGdldFNlbGVjdGlvbiA9IGFuY2hvckluZm8uZ2V0U2VsZWN0aW9uLmdldE9yVGh1bmsoKCkgPT4gKCkgPT4gZ2V0RXhhY3Qod2luKSk7XG4gICAgICByZXR1cm4gZ2V0U2VsZWN0aW9uKCkubWFwKHNlbCA9PiB7XG4gICAgICAgIGlmIChpc1NpbVJhbmdlKHNlbCkpIHtcbiAgICAgICAgICBjb25zdCBtb2RTdGFydCA9IGRlc2NlbmRPbmNlKHNlbC5zdGFydCwgc2VsLnNvZmZzZXQpO1xuICAgICAgICAgIGNvbnN0IG1vZEZpbmlzaCA9IGRlc2NlbmRPbmNlKHNlbC5maW5pc2gsIHNlbC5mb2Zmc2V0KTtcbiAgICAgICAgICByZXR1cm4gU2ltU2VsZWN0aW9uLnJhbmdlKG1vZFN0YXJ0LmVsZW1lbnQsIG1vZFN0YXJ0Lm9mZnNldCwgbW9kRmluaXNoLmVsZW1lbnQsIG1vZEZpbmlzaC5vZmZzZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBzZWw7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcGxhY2VtZW50JDEgPSAoY29tcG9uZW50LCBhbmNob3JJbmZvLCBvcmlnaW4pID0+IHtcbiAgICAgIGNvbnN0IHdpbiA9IGRlZmF1bHRWaWV3KGFuY2hvckluZm8ucm9vdCkuZG9tO1xuICAgICAgY29uc3Qgcm9vdFBvaW50ID0gZ2V0Um9vdFBvaW50KGNvbXBvbmVudCwgb3JpZ2luLCBhbmNob3JJbmZvKTtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbkJveCA9IGdldEFuY2hvclNlbGVjdGlvbih3aW4sIGFuY2hvckluZm8pLmJpbmQoc2VsID0+IHtcbiAgICAgICAgaWYgKGlzU2ltUmFuZ2Uoc2VsKSkge1xuICAgICAgICAgIGNvbnN0IG9wdFJlY3QgPSBnZXRCb3VuZHMkMSh3aW4sIFNpbVNlbGVjdGlvbi5leGFjdEZyb21SYW5nZShzZWwpKS5vclRodW5rKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHplcm9XaWR0aCQxID0gU3VnYXJFbGVtZW50LmZyb21UZXh0KHplcm9XaWR0aCk7XG4gICAgICAgICAgICBiZWZvcmUkMShzZWwuc3RhcnQsIHplcm9XaWR0aCQxKTtcbiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSBnZXRGaXJzdFJlY3Qod2luLCBTaW1TZWxlY3Rpb24uZXhhY3QoemVyb1dpZHRoJDEsIDAsIHplcm9XaWR0aCQxLCAxKSk7XG4gICAgICAgICAgICByZW1vdmUkNSh6ZXJvV2lkdGgkMSk7XG4gICAgICAgICAgICByZXR1cm4gcmVjdDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gb3B0UmVjdC5iaW5kKHJhd1JlY3QgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGdldEJveChyYXdSZWN0LmxlZnQsIHJhd1JlY3QudG9wLCByYXdSZWN0LndpZHRoLCByYXdSZWN0LmhlaWdodCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0aW9uUmVjdCA9IG1hcCQxKHNlbCwgY2VsbCA9PiBjZWxsLmRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gICAgICAgICAgY29uc3QgYm91bmRzID0ge1xuICAgICAgICAgICAgbGVmdDogTWF0aC5taW4oc2VsZWN0aW9uUmVjdC5maXJzdENlbGwubGVmdCwgc2VsZWN0aW9uUmVjdC5sYXN0Q2VsbC5sZWZ0KSxcbiAgICAgICAgICAgIHJpZ2h0OiBNYXRoLm1heChzZWxlY3Rpb25SZWN0LmZpcnN0Q2VsbC5yaWdodCwgc2VsZWN0aW9uUmVjdC5sYXN0Q2VsbC5yaWdodCksXG4gICAgICAgICAgICB0b3A6IE1hdGgubWluKHNlbGVjdGlvblJlY3QuZmlyc3RDZWxsLnRvcCwgc2VsZWN0aW9uUmVjdC5sYXN0Q2VsbC50b3ApLFxuICAgICAgICAgICAgYm90dG9tOiBNYXRoLm1heChzZWxlY3Rpb25SZWN0LmZpcnN0Q2VsbC5ib3R0b20sIHNlbGVjdGlvblJlY3QubGFzdENlbGwuYm90dG9tKVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGdldEJveChib3VuZHMubGVmdCwgYm91bmRzLnRvcCwgYm91bmRzLnJpZ2h0IC0gYm91bmRzLmxlZnQsIGJvdW5kcy5ib3R0b20gLSBib3VuZHMudG9wKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gZ2V0QW5jaG9yU2VsZWN0aW9uKHdpbiwgYW5jaG9ySW5mbykuYmluZChzZWwgPT4ge1xuICAgICAgICBpZiAoaXNTaW1SYW5nZShzZWwpKSB7XG4gICAgICAgICAgcmV0dXJuIGlzRWxlbWVudCQxKHNlbC5zdGFydCkgPyBPcHRpb25hbC5zb21lKHNlbC5zdGFydCkgOiBwYXJlbnRFbGVtZW50KHNlbC5zdGFydCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoc2VsLmZpcnN0Q2VsbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgZWxlbSA9IHRhcmdldEVsZW1lbnQuZ2V0T3IoY29tcG9uZW50LmVsZW1lbnQpO1xuICAgICAgcmV0dXJuIGNhbGNOZXdBbmNob3Ioc2VsZWN0aW9uQm94LCByb290UG9pbnQsIGFuY2hvckluZm8sIG9yaWdpbiwgZWxlbSk7XG4gICAgfTtcbiAgICB2YXIgU2VsZWN0aW9uQW5jaG9yID0gW1xuICAgICAgb3B0aW9uJDMoJ2dldFNlbGVjdGlvbicpLFxuICAgICAgcmVxdWlyZWQkMSgncm9vdCcpLFxuICAgICAgb3B0aW9uJDMoJ2J1YmJsZScpLFxuICAgICAgc2NoZW1hJHkoKSxcbiAgICAgIGRlZmF1bHRlZCgnb3ZlcnJpZGVzJywge30pLFxuICAgICAgZGVmYXVsdGVkKCdzaG93QWJvdmUnLCBmYWxzZSksXG4gICAgICBvdXRwdXQkMSgncGxhY2VtZW50JywgcGxhY2VtZW50JDEpXG4gICAgXTtcblxuICAgIGNvbnN0IGxhYmVsUHJlZml4JDEgPSAnbGluay1sYXlvdXQnO1xuICAgIGNvbnN0IGVhc3RYID0gYW5jaG9yID0+IGFuY2hvci54ICsgYW5jaG9yLndpZHRoO1xuICAgIGNvbnN0IHdlc3RYID0gKGFuY2hvciwgZWxlbWVudCkgPT4gYW5jaG9yLnggLSBlbGVtZW50LndpZHRoO1xuICAgIGNvbnN0IG5vcnRoWSQxID0gKGFuY2hvciwgZWxlbWVudCkgPT4gYW5jaG9yLnkgLSBlbGVtZW50LmhlaWdodCArIGFuY2hvci5oZWlnaHQ7XG4gICAgY29uc3Qgc291dGhZJDEgPSBhbmNob3IgPT4gYW5jaG9yLnk7XG4gICAgY29uc3Qgc291dGhlYXN0JDEgPSAoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzKSA9PiBudSQ2KGVhc3RYKGFuY2hvciksIHNvdXRoWSQxKGFuY2hvciksIGJ1YmJsZXMuc291dGhlYXN0KCksIHNvdXRoZWFzdCQzKCksICdzb3V0aGVhc3QnLCBib3VuZHNSZXN0cmljdGlvbihhbmNob3IsIHtcbiAgICAgIGxlZnQ6IDAsXG4gICAgICB0b3A6IDJcbiAgICB9KSwgbGFiZWxQcmVmaXgkMSk7XG4gICAgY29uc3Qgc291dGh3ZXN0JDEgPSAoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzKSA9PiBudSQ2KHdlc3RYKGFuY2hvciwgZWxlbWVudCksIHNvdXRoWSQxKGFuY2hvciksIGJ1YmJsZXMuc291dGh3ZXN0KCksIHNvdXRod2VzdCQzKCksICdzb3V0aHdlc3QnLCBib3VuZHNSZXN0cmljdGlvbihhbmNob3IsIHtcbiAgICAgIHJpZ2h0OiAxLFxuICAgICAgdG9wOiAyXG4gICAgfSksIGxhYmVsUHJlZml4JDEpO1xuICAgIGNvbnN0IG5vcnRoZWFzdCQxID0gKGFuY2hvciwgZWxlbWVudCwgYnViYmxlcykgPT4gbnUkNihlYXN0WChhbmNob3IpLCBub3J0aFkkMShhbmNob3IsIGVsZW1lbnQpLCBidWJibGVzLm5vcnRoZWFzdCgpLCBub3J0aGVhc3QkMygpLCAnbm9ydGhlYXN0JywgYm91bmRzUmVzdHJpY3Rpb24oYW5jaG9yLCB7XG4gICAgICBsZWZ0OiAwLFxuICAgICAgYm90dG9tOiAzXG4gICAgfSksIGxhYmVsUHJlZml4JDEpO1xuICAgIGNvbnN0IG5vcnRod2VzdCQxID0gKGFuY2hvciwgZWxlbWVudCwgYnViYmxlcykgPT4gbnUkNih3ZXN0WChhbmNob3IsIGVsZW1lbnQpLCBub3J0aFkkMShhbmNob3IsIGVsZW1lbnQpLCBidWJibGVzLm5vcnRod2VzdCgpLCBub3J0aHdlc3QkMygpLCAnbm9ydGh3ZXN0JywgYm91bmRzUmVzdHJpY3Rpb24oYW5jaG9yLCB7XG4gICAgICByaWdodDogMSxcbiAgICAgIGJvdHRvbTogM1xuICAgIH0pLCBsYWJlbFByZWZpeCQxKTtcbiAgICBjb25zdCBhbGwgPSAoKSA9PiBbXG4gICAgICBzb3V0aGVhc3QkMSxcbiAgICAgIHNvdXRod2VzdCQxLFxuICAgICAgbm9ydGhlYXN0JDEsXG4gICAgICBub3J0aHdlc3QkMVxuICAgIF07XG4gICAgY29uc3QgYWxsUnRsID0gKCkgPT4gW1xuICAgICAgc291dGh3ZXN0JDEsXG4gICAgICBzb3V0aGVhc3QkMSxcbiAgICAgIG5vcnRod2VzdCQxLFxuICAgICAgbm9ydGhlYXN0JDFcbiAgICBdO1xuXG4gICAgY29uc3QgcGxhY2VtZW50ID0gKGNvbXBvbmVudCwgc3VibWVudUluZm8sIG9yaWdpbikgPT4ge1xuICAgICAgY29uc3QgYW5jaG9yQm94ID0gdG9Cb3gob3JpZ2luLCBzdWJtZW51SW5mby5pdGVtLmVsZW1lbnQpO1xuICAgICAgY29uc3QgbGF5b3V0cyA9IGdldCQ1KGNvbXBvbmVudC5lbGVtZW50LCBzdWJtZW51SW5mbywgYWxsKCksIGFsbFJ0bCgpLCBhbGwoKSwgYWxsUnRsKCksIE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShudSQ0KHtcbiAgICAgICAgYW5jaG9yQm94LFxuICAgICAgICBidWJibGU6IGZhbGxiYWNrKCksXG4gICAgICAgIG92ZXJyaWRlczogc3VibWVudUluZm8ub3ZlcnJpZGVzLFxuICAgICAgICBsYXlvdXRzXG4gICAgICB9KSk7XG4gICAgfTtcbiAgICB2YXIgU3VibWVudUFuY2hvciA9IFtcbiAgICAgIHJlcXVpcmVkJDEoJ2l0ZW0nKSxcbiAgICAgIHNjaGVtYSR5KCksXG4gICAgICBkZWZhdWx0ZWQoJ292ZXJyaWRlcycsIHt9KSxcbiAgICAgIG91dHB1dCQxKCdwbGFjZW1lbnQnLCBwbGFjZW1lbnQpXG4gICAgXTtcblxuICAgIHZhciBBbmNob3JTY2hlbWEgPSBjaG9vc2UkMSgndHlwZScsIHtcbiAgICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uQW5jaG9yLFxuICAgICAgbm9kZTogTm9kZUFuY2hvcixcbiAgICAgIGhvdHNwb3Q6IEhvdHNwb3RBbmNob3IsXG4gICAgICBzdWJtZW51OiBTdWJtZW51QW5jaG9yLFxuICAgICAgbWFrZXNoaWZ0OiBNYWtlc2hpZnRBbmNob3JcbiAgICB9KTtcblxuICAgIGNvbnN0IFRyYW5zaXRpb25TY2hlbWEgPSBbXG4gICAgICByZXF1aXJlZEFycmF5T2YoJ2NsYXNzZXMnLCBzdHJpbmcpLFxuICAgICAgZGVmYXVsdGVkU3RyaW5nRW51bSgnbW9kZScsICdhbGwnLCBbXG4gICAgICAgICdhbGwnLFxuICAgICAgICAnbGF5b3V0JyxcbiAgICAgICAgJ3BsYWNlbWVudCdcbiAgICAgIF0pXG4gICAgXTtcbiAgICBjb25zdCBQb3NpdGlvblNjaGVtYSA9IFtcbiAgICAgIGRlZmF1bHRlZCgndXNlRml4ZWQnLCBuZXZlciksXG4gICAgICBvcHRpb24kMygnZ2V0Qm91bmRzJylcbiAgICBdO1xuICAgIGNvbnN0IFBsYWNlbWVudFNjaGVtYSA9IFtcbiAgICAgIHJlcXVpcmVkT2YoJ2FuY2hvcicsIEFuY2hvclNjaGVtYSksXG4gICAgICBvcHRpb25PYmpPZigndHJhbnNpdGlvbicsIFRyYW5zaXRpb25TY2hlbWEpXG4gICAgXTtcblxuICAgIGNvbnN0IGdldEZpeGVkT3JpZ2luID0gKCkgPT4ge1xuICAgICAgY29uc3QgaHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgIHJldHVybiBmaXhlZCQxKDAsIDAsIGh0bWwuY2xpZW50V2lkdGgsIGh0bWwuY2xpZW50SGVpZ2h0KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFJlbGF0aXZlT3JpZ2luID0gY29tcG9uZW50ID0+IHtcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gYWJzb2x1dGUkMyhjb21wb25lbnQuZWxlbWVudCk7XG4gICAgICBjb25zdCBib3VuZHMgPSBjb21wb25lbnQuZWxlbWVudC5kb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICByZXR1cm4gcmVsYXRpdmUkMShwb3NpdGlvbi5sZWZ0LCBwb3NpdGlvbi50b3AsIGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfTtcbiAgICBjb25zdCBwbGFjZSA9IChvcmlnaW4sIGFuY2hvcmluZywgb3B0Qm91bmRzLCBwbGFjZWUsIGxhc3RQbGFjZSwgdHJhbnNpdGlvbikgPT4ge1xuICAgICAgY29uc3QgYW5jaG9yID0gYm94KGFuY2hvcmluZy5hbmNob3JCb3gsIG9yaWdpbik7XG4gICAgICByZXR1cm4gc2ltcGxlKGFuY2hvciwgcGxhY2VlLmVsZW1lbnQsIGFuY2hvcmluZy5idWJibGUsIGFuY2hvcmluZy5sYXlvdXRzLCBsYXN0UGxhY2UsIG9wdEJvdW5kcywgYW5jaG9yaW5nLm92ZXJyaWRlcywgdHJhbnNpdGlvbik7XG4gICAgfTtcbiAgICBjb25zdCBwb3NpdGlvbiQxID0gKGNvbXBvbmVudCwgcG9zQ29uZmlnLCBwb3NTdGF0ZSwgcGxhY2VlLCBwbGFjZW1lbnRTcGVjKSA9PiB7XG4gICAgICBjb25zdCBvcHRXaXRoaW5Cb3VuZHMgPSBPcHRpb25hbC5ub25lKCk7XG4gICAgICBwb3NpdGlvbldpdGhpbkJvdW5kcyhjb21wb25lbnQsIHBvc0NvbmZpZywgcG9zU3RhdGUsIHBsYWNlZSwgcGxhY2VtZW50U3BlYywgb3B0V2l0aGluQm91bmRzKTtcbiAgICB9O1xuICAgIGNvbnN0IHBvc2l0aW9uV2l0aGluQm91bmRzID0gKGNvbXBvbmVudCwgcG9zQ29uZmlnLCBwb3NTdGF0ZSwgcGxhY2VlLCBwbGFjZW1lbnRTcGVjLCBvcHRXaXRoaW5Cb3VuZHMpID0+IHtcbiAgICAgIGNvbnN0IHBsYWNlZURldGFpbCA9IGFzUmF3T3JEaWUkMSgncGxhY2VtZW50LmluZm8nLCBvYmpPZihQbGFjZW1lbnRTY2hlbWEpLCBwbGFjZW1lbnRTcGVjKTtcbiAgICAgIGNvbnN0IGFuY2hvcmFnZSA9IHBsYWNlZURldGFpbC5hbmNob3I7XG4gICAgICBjb25zdCBlbGVtZW50ID0gcGxhY2VlLmVsZW1lbnQ7XG4gICAgICBjb25zdCBwbGFjZWVTdGF0ZSA9IHBvc1N0YXRlLmdldChwbGFjZWUudWlkKTtcbiAgICAgIHByZXNlcnZlJDEoKCkgPT4ge1xuICAgICAgICBzZXQkOChlbGVtZW50LCAncG9zaXRpb24nLCAnZml4ZWQnKTtcbiAgICAgICAgY29uc3Qgb2xkVmlzaWJpbGl0eSA9IGdldFJhdyhlbGVtZW50LCAndmlzaWJpbGl0eScpO1xuICAgICAgICBzZXQkOChlbGVtZW50LCAndmlzaWJpbGl0eScsICdoaWRkZW4nKTtcbiAgICAgICAgY29uc3Qgb3JpZ2luID0gcG9zQ29uZmlnLnVzZUZpeGVkKCkgPyBnZXRGaXhlZE9yaWdpbigpIDogZ2V0UmVsYXRpdmVPcmlnaW4oY29tcG9uZW50KTtcbiAgICAgICAgYW5jaG9yYWdlLnBsYWNlbWVudChjb21wb25lbnQsIGFuY2hvcmFnZSwgb3JpZ2luKS5lYWNoKGFuY2hvcmluZyA9PiB7XG4gICAgICAgICAgY29uc3Qgb3B0Qm91bmRzID0gb3B0V2l0aGluQm91bmRzLm9yVGh1bmsoKCkgPT4gcG9zQ29uZmlnLmdldEJvdW5kcy5tYXAoYXBwbHkkMSkpO1xuICAgICAgICAgIGNvbnN0IG5ld1N0YXRlID0gcGxhY2Uob3JpZ2luLCBhbmNob3JpbmcsIG9wdEJvdW5kcywgcGxhY2VlLCBwbGFjZWVTdGF0ZSwgcGxhY2VlRGV0YWlsLnRyYW5zaXRpb24pO1xuICAgICAgICAgIHBvc1N0YXRlLnNldChwbGFjZWUudWlkLCBuZXdTdGF0ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBvbGRWaXNpYmlsaXR5LmZvbGQoKCkgPT4ge1xuICAgICAgICAgIHJlbW92ZSQ2KGVsZW1lbnQsICd2aXNpYmlsaXR5Jyk7XG4gICAgICAgIH0sIHZpcyA9PiB7XG4gICAgICAgICAgc2V0JDgoZWxlbWVudCwgJ3Zpc2liaWxpdHknLCB2aXMpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGdldFJhdyhlbGVtZW50LCAnbGVmdCcpLmlzTm9uZSgpICYmIGdldFJhdyhlbGVtZW50LCAndG9wJykuaXNOb25lKCkgJiYgZ2V0UmF3KGVsZW1lbnQsICdyaWdodCcpLmlzTm9uZSgpICYmIGdldFJhdyhlbGVtZW50LCAnYm90dG9tJykuaXNOb25lKCkgJiYgaXMkMShnZXRSYXcoZWxlbWVudCwgJ3Bvc2l0aW9uJyksICdmaXhlZCcpKSB7XG4gICAgICAgICAgcmVtb3ZlJDYoZWxlbWVudCwgJ3Bvc2l0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgIH0sIGVsZW1lbnQpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0TW9kZSA9IChjb21wb25lbnQsIHBDb25maWcsIF9wU3RhdGUpID0+IHBDb25maWcudXNlRml4ZWQoKSA/ICdmaXhlZCcgOiAnYWJzb2x1dGUnO1xuICAgIGNvbnN0IHJlc2V0JDEgPSAoY29tcG9uZW50LCBwQ29uZmlnLCBwb3NTdGF0ZSwgcGxhY2VlKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gcGxhY2VlLmVsZW1lbnQ7XG4gICAgICBlYWNoJDEoW1xuICAgICAgICAncG9zaXRpb24nLFxuICAgICAgICAnbGVmdCcsXG4gICAgICAgICdyaWdodCcsXG4gICAgICAgICd0b3AnLFxuICAgICAgICAnYm90dG9tJ1xuICAgICAgXSwgcHJvcCA9PiByZW1vdmUkNihlbGVtZW50LCBwcm9wKSk7XG4gICAgICByZXNldCQyKGVsZW1lbnQpO1xuICAgICAgcG9zU3RhdGUuY2xlYXIocGxhY2VlLnVpZCk7XG4gICAgfTtcblxuICAgIHZhciBQb3NpdGlvbkFwaXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uJDEsXG4gICAgICAgIHBvc2l0aW9uV2l0aGluQm91bmRzOiBwb3NpdGlvbldpdGhpbkJvdW5kcyxcbiAgICAgICAgZ2V0TW9kZTogZ2V0TW9kZSxcbiAgICAgICAgcmVzZXQ6IHJlc2V0JDFcbiAgICB9KTtcblxuICAgIGNvbnN0IGluaXQkZyA9ICgpID0+IHtcbiAgICAgIGxldCBzdGF0ZSA9IHt9O1xuICAgICAgY29uc3Qgc2V0ID0gKGlkLCBkYXRhKSA9PiB7XG4gICAgICAgIHN0YXRlW2lkXSA9IGRhdGE7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0ID0gaWQgPT4gZ2V0JGcoc3RhdGUsIGlkKTtcbiAgICAgIGNvbnN0IGNsZWFyID0gaWQgPT4ge1xuICAgICAgICBpZiAoaXNOb25OdWxsYWJsZShpZCkpIHtcbiAgICAgICAgICBkZWxldGUgc3RhdGVbaWRdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlID0ge307XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gbnUkOCh7XG4gICAgICAgIHJlYWRTdGF0ZTogKCkgPT4gc3RhdGUsXG4gICAgICAgIGNsZWFyLFxuICAgICAgICBzZXQsXG4gICAgICAgIGdldFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHZhciBQb3NpdGlvbmluZ1N0YXRlID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIGluaXQ6IGluaXQkZ1xuICAgIH0pO1xuXG4gICAgY29uc3QgUG9zaXRpb25pbmcgPSBjcmVhdGUkNCh7XG4gICAgICBmaWVsZHM6IFBvc2l0aW9uU2NoZW1hLFxuICAgICAgbmFtZTogJ3Bvc2l0aW9uaW5nJyxcbiAgICAgIGFjdGl2ZTogQWN0aXZlUG9zaXRpb24sXG4gICAgICBhcGlzOiBQb3NpdGlvbkFwaXMsXG4gICAgICBzdGF0ZTogUG9zaXRpb25pbmdTdGF0ZVxuICAgIH0pO1xuXG4gICAgY29uc3QgaXNDb25uZWN0ZWQgPSBjb21wID0+IGNvbXAuZ2V0U3lzdGVtKCkuaXNDb25uZWN0ZWQoKTtcbiAgICBjb25zdCBmaXJlRGV0YWNoaW5nID0gY29tcG9uZW50ID0+IHtcbiAgICAgIGVtaXQoY29tcG9uZW50LCBkZXRhY2hlZEZyb21Eb20oKSk7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGNvbXBvbmVudC5jb21wb25lbnRzKCk7XG4gICAgICBlYWNoJDEoY2hpbGRyZW4sIGZpcmVEZXRhY2hpbmcpO1xuICAgIH07XG4gICAgY29uc3QgZmlyZUF0dGFjaGluZyA9IGNvbXBvbmVudCA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGNvbXBvbmVudC5jb21wb25lbnRzKCk7XG4gICAgICBlYWNoJDEoY2hpbGRyZW4sIGZpcmVBdHRhY2hpbmcpO1xuICAgICAgZW1pdChjb21wb25lbnQsIGF0dGFjaGVkVG9Eb20oKSk7XG4gICAgfTtcbiAgICBjb25zdCB2aXJ0dWFsQXR0YWNoID0gKHBhcmVudCwgY2hpbGQpID0+IHtcbiAgICAgIHBhcmVudC5nZXRTeXN0ZW0oKS5hZGRUb1dvcmxkKGNoaWxkKTtcbiAgICAgIGlmIChpbkJvZHkocGFyZW50LmVsZW1lbnQpKSB7XG4gICAgICAgIGZpcmVBdHRhY2hpbmcoY2hpbGQpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdmlydHVhbERldGFjaCA9IGNvbXAgPT4ge1xuICAgICAgZmlyZURldGFjaGluZyhjb21wKTtcbiAgICAgIGNvbXAuZ2V0U3lzdGVtKCkucmVtb3ZlRnJvbVdvcmxkKGNvbXApO1xuICAgIH07XG4gICAgY29uc3QgYXR0YWNoJDEgPSAocGFyZW50LCBjaGlsZCkgPT4ge1xuICAgICAgYXBwZW5kJDIocGFyZW50LmVsZW1lbnQsIGNoaWxkLmVsZW1lbnQpO1xuICAgIH07XG4gICAgY29uc3QgZGV0YWNoQ2hpbGRyZW4kMSA9IGNvbXBvbmVudCA9PiB7XG4gICAgICBlYWNoJDEoY29tcG9uZW50LmNvbXBvbmVudHMoKSwgY2hpbGRDb21wID0+IHJlbW92ZSQ1KGNoaWxkQ29tcC5lbGVtZW50KSk7XG4gICAgICBlbXB0eShjb21wb25lbnQuZWxlbWVudCk7XG4gICAgICBjb21wb25lbnQuc3luY0NvbXBvbmVudHMoKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlcGxhY2VDaGlsZHJlbiA9IChjb21wb25lbnQsIG5ld1NwZWNzLCBidWlsZE5ld0NoaWxkcmVuKSA9PiB7XG4gICAgICBjb25zdCBzdWJzID0gY29tcG9uZW50LmNvbXBvbmVudHMoKTtcbiAgICAgIGRldGFjaENoaWxkcmVuJDEoY29tcG9uZW50KTtcbiAgICAgIGNvbnN0IG5ld0NoaWxkcmVuID0gYnVpbGROZXdDaGlsZHJlbihuZXdTcGVjcyk7XG4gICAgICBjb25zdCBkZWxldGVkID0gZGlmZmVyZW5jZShzdWJzLCBuZXdDaGlsZHJlbik7XG4gICAgICBlYWNoJDEoZGVsZXRlZCwgY29tcCA9PiB7XG4gICAgICAgIGZpcmVEZXRhY2hpbmcoY29tcCk7XG4gICAgICAgIGNvbXBvbmVudC5nZXRTeXN0ZW0oKS5yZW1vdmVGcm9tV29ybGQoY29tcCk7XG4gICAgICB9KTtcbiAgICAgIGVhY2gkMShuZXdDaGlsZHJlbiwgY2hpbGRDb21wID0+IHtcbiAgICAgICAgaWYgKCFpc0Nvbm5lY3RlZChjaGlsZENvbXApKSB7XG4gICAgICAgICAgY29tcG9uZW50LmdldFN5c3RlbSgpLmFkZFRvV29ybGQoY2hpbGRDb21wKTtcbiAgICAgICAgICBhdHRhY2gkMShjb21wb25lbnQsIGNoaWxkQ29tcCk7XG4gICAgICAgICAgaWYgKGluQm9keShjb21wb25lbnQuZWxlbWVudCkpIHtcbiAgICAgICAgICAgIGZpcmVBdHRhY2hpbmcoY2hpbGRDb21wKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXR0YWNoJDEoY29tcG9uZW50LCBjaGlsZENvbXApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbXBvbmVudC5zeW5jQ29tcG9uZW50cygpO1xuICAgIH07XG4gICAgY29uc3QgdmlydHVhbFJlcGxhY2VDaGlsZHJlbiA9IChjb21wb25lbnQsIG5ld1NwZWNzLCBidWlsZE5ld0NoaWxkcmVuKSA9PiB7XG4gICAgICBjb25zdCBzdWJzID0gY29tcG9uZW50LmNvbXBvbmVudHMoKTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nQ29tcHMgPSBiaW5kJDMobmV3U3BlY3MsIHNwZWMgPT4gZ2V0UHJlbWFkZShzcGVjKS50b0FycmF5KCkpO1xuICAgICAgZWFjaCQxKHN1YnMsIGNoaWxkQ29tcCA9PiB7XG4gICAgICAgIGlmICghY29udGFpbnMkMihleGlzdGluZ0NvbXBzLCBjaGlsZENvbXApKSB7XG4gICAgICAgICAgdmlydHVhbERldGFjaChjaGlsZENvbXApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5ld0NoaWxkcmVuID0gYnVpbGROZXdDaGlsZHJlbihuZXdTcGVjcyk7XG4gICAgICBjb25zdCBkZWxldGVkID0gZGlmZmVyZW5jZShzdWJzLCBuZXdDaGlsZHJlbik7XG4gICAgICBlYWNoJDEoZGVsZXRlZCwgZGVsZXRlZENvbXAgPT4ge1xuICAgICAgICBpZiAoaXNDb25uZWN0ZWQoZGVsZXRlZENvbXApKSB7XG4gICAgICAgICAgdmlydHVhbERldGFjaChkZWxldGVkQ29tcCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWFjaCQxKG5ld0NoaWxkcmVuLCBjaGlsZENvbXAgPT4ge1xuICAgICAgICBpZiAoIWlzQ29ubmVjdGVkKGNoaWxkQ29tcCkpIHtcbiAgICAgICAgICB2aXJ0dWFsQXR0YWNoKGNvbXBvbmVudCwgY2hpbGRDb21wKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb21wb25lbnQuc3luY0NvbXBvbmVudHMoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYXR0YWNoID0gKHBhcmVudCwgY2hpbGQpID0+IHtcbiAgICAgIGF0dGFjaFdpdGgocGFyZW50LCBjaGlsZCwgYXBwZW5kJDIpO1xuICAgIH07XG4gICAgY29uc3QgYXR0YWNoV2l0aCA9IChwYXJlbnQsIGNoaWxkLCBpbnNlcnRpb24pID0+IHtcbiAgICAgIHBhcmVudC5nZXRTeXN0ZW0oKS5hZGRUb1dvcmxkKGNoaWxkKTtcbiAgICAgIGluc2VydGlvbihwYXJlbnQuZWxlbWVudCwgY2hpbGQuZWxlbWVudCk7XG4gICAgICBpZiAoaW5Cb2R5KHBhcmVudC5lbGVtZW50KSkge1xuICAgICAgICBmaXJlQXR0YWNoaW5nKGNoaWxkKTtcbiAgICAgIH1cbiAgICAgIHBhcmVudC5zeW5jQ29tcG9uZW50cygpO1xuICAgIH07XG4gICAgY29uc3QgZG9EZXRhY2ggPSBjb21wb25lbnQgPT4ge1xuICAgICAgZmlyZURldGFjaGluZyhjb21wb25lbnQpO1xuICAgICAgcmVtb3ZlJDUoY29tcG9uZW50LmVsZW1lbnQpO1xuICAgICAgY29tcG9uZW50LmdldFN5c3RlbSgpLnJlbW92ZUZyb21Xb3JsZChjb21wb25lbnQpO1xuICAgIH07XG4gICAgY29uc3QgZGV0YWNoID0gY29tcG9uZW50ID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCQxID0gcGFyZW50KGNvbXBvbmVudC5lbGVtZW50KS5iaW5kKHAgPT4gY29tcG9uZW50LmdldFN5c3RlbSgpLmdldEJ5RG9tKHApLnRvT3B0aW9uYWwoKSk7XG4gICAgICBkb0RldGFjaChjb21wb25lbnQpO1xuICAgICAgcGFyZW50JDEuZWFjaChwID0+IHtcbiAgICAgICAgcC5zeW5jQ29tcG9uZW50cygpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBkZXRhY2hDaGlsZHJlbiA9IGNvbXBvbmVudCA9PiB7XG4gICAgICBjb25zdCBzdWJzID0gY29tcG9uZW50LmNvbXBvbmVudHMoKTtcbiAgICAgIGVhY2gkMShzdWJzLCBkb0RldGFjaCk7XG4gICAgICBlbXB0eShjb21wb25lbnQuZWxlbWVudCk7XG4gICAgICBjb21wb25lbnQuc3luY0NvbXBvbmVudHMoKTtcbiAgICB9O1xuICAgIGNvbnN0IGF0dGFjaFN5c3RlbSA9IChlbGVtZW50LCBndWlTeXN0ZW0pID0+IHtcbiAgICAgIGF0dGFjaFN5c3RlbVdpdGgoZWxlbWVudCwgZ3VpU3lzdGVtLCBhcHBlbmQkMik7XG4gICAgfTtcbiAgICBjb25zdCBhdHRhY2hTeXN0ZW1BZnRlciA9IChlbGVtZW50LCBndWlTeXN0ZW0pID0+IHtcbiAgICAgIGF0dGFjaFN5c3RlbVdpdGgoZWxlbWVudCwgZ3VpU3lzdGVtLCBhZnRlciQyKTtcbiAgICB9O1xuICAgIGNvbnN0IGF0dGFjaFN5c3RlbVdpdGggPSAoZWxlbWVudCwgZ3VpU3lzdGVtLCBpbnNlcnRlcikgPT4ge1xuICAgICAgaW5zZXJ0ZXIoZWxlbWVudCwgZ3VpU3lzdGVtLmVsZW1lbnQpO1xuICAgICAgY29uc3QgY2hpbGRyZW4kMSA9IGNoaWxkcmVuKGd1aVN5c3RlbS5lbGVtZW50KTtcbiAgICAgIGVhY2gkMShjaGlsZHJlbiQxLCBjaGlsZCA9PiB7XG4gICAgICAgIGd1aVN5c3RlbS5nZXRCeURvbShjaGlsZCkuZWFjaChmaXJlQXR0YWNoaW5nKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZGV0YWNoU3lzdGVtID0gZ3VpU3lzdGVtID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkcmVuJDEgPSBjaGlsZHJlbihndWlTeXN0ZW0uZWxlbWVudCk7XG4gICAgICBlYWNoJDEoY2hpbGRyZW4kMSwgY2hpbGQgPT4ge1xuICAgICAgICBndWlTeXN0ZW0uZ2V0QnlEb20oY2hpbGQpLmVhY2goZmlyZURldGFjaGluZyk7XG4gICAgICB9KTtcbiAgICAgIHJlbW92ZSQ1KGd1aVN5c3RlbS5lbGVtZW50KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVidWlsZCA9IChzYW5kYm94LCBzQ29uZmlnLCBzU3RhdGUsIGRhdGEpID0+IHtcbiAgICAgIHNTdGF0ZS5nZXQoKS5lYWNoKF9kYXRhID0+IHtcbiAgICAgICAgZGV0YWNoQ2hpbGRyZW4oc2FuZGJveCk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBvaW50ID0gc0NvbmZpZy5nZXRBdHRhY2hQb2ludChzYW5kYm94KTtcbiAgICAgIGF0dGFjaChwb2ludCwgc2FuZGJveCk7XG4gICAgICBjb25zdCBidWlsdCA9IHNhbmRib3guZ2V0U3lzdGVtKCkuYnVpbGQoZGF0YSk7XG4gICAgICBhdHRhY2goc2FuZGJveCwgYnVpbHQpO1xuICAgICAgc1N0YXRlLnNldChidWlsdCk7XG4gICAgICByZXR1cm4gYnVpbHQ7XG4gICAgfTtcbiAgICBjb25zdCBvcGVuJDEgPSAoc2FuZGJveCwgc0NvbmZpZywgc1N0YXRlLCBkYXRhKSA9PiB7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHJlYnVpbGQoc2FuZGJveCwgc0NvbmZpZywgc1N0YXRlLCBkYXRhKTtcbiAgICAgIHNDb25maWcub25PcGVuKHNhbmRib3gsIG5ld1N0YXRlKTtcbiAgICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgICB9O1xuICAgIGNvbnN0IHNldENvbnRlbnQgPSAoc2FuZGJveCwgc0NvbmZpZywgc1N0YXRlLCBkYXRhKSA9PiBzU3RhdGUuZ2V0KCkubWFwKCgpID0+IHJlYnVpbGQoc2FuZGJveCwgc0NvbmZpZywgc1N0YXRlLCBkYXRhKSk7XG4gICAgY29uc3Qgb3BlbldoaWxlQ2xvYWtlZCA9IChzYW5kYm94LCBzQ29uZmlnLCBzU3RhdGUsIGRhdGEsIHRyYW5zYWN0aW9uKSA9PiB7XG4gICAgICBjbG9hayhzYW5kYm94LCBzQ29uZmlnKTtcbiAgICAgIG9wZW4kMShzYW5kYm94LCBzQ29uZmlnLCBzU3RhdGUsIGRhdGEpO1xuICAgICAgdHJhbnNhY3Rpb24oKTtcbiAgICAgIGRlY2xvYWsoc2FuZGJveCwgc0NvbmZpZyk7XG4gICAgfTtcbiAgICBjb25zdCBjbG9zZSQxID0gKHNhbmRib3gsIHNDb25maWcsIHNTdGF0ZSkgPT4ge1xuICAgICAgc1N0YXRlLmdldCgpLmVhY2goZGF0YSA9PiB7XG4gICAgICAgIGRldGFjaENoaWxkcmVuKHNhbmRib3gpO1xuICAgICAgICBkZXRhY2goc2FuZGJveCk7XG4gICAgICAgIHNDb25maWcub25DbG9zZShzYW5kYm94LCBkYXRhKTtcbiAgICAgICAgc1N0YXRlLmNsZWFyKCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzT3BlbiQxID0gKF9zYW5kYm94LCBfc0NvbmZpZywgc1N0YXRlKSA9PiBzU3RhdGUuaXNPcGVuKCk7XG4gICAgY29uc3QgaXNQYXJ0T2YgPSAoc2FuZGJveCwgc0NvbmZpZywgc1N0YXRlLCBxdWVyeUVsZW0pID0+IGlzT3BlbiQxKHNhbmRib3gsIHNDb25maWcsIHNTdGF0ZSkgJiYgc1N0YXRlLmdldCgpLmV4aXN0cyhkYXRhID0+IHNDb25maWcuaXNQYXJ0T2Yoc2FuZGJveCwgZGF0YSwgcXVlcnlFbGVtKSk7XG4gICAgY29uc3QgZ2V0U3RhdGUkMiA9IChfc2FuZGJveCwgX3NDb25maWcsIHNTdGF0ZSkgPT4gc1N0YXRlLmdldCgpO1xuICAgIGNvbnN0IHN0b3JlID0gKHNhbmRib3gsIGNzc0tleSwgYXR0ciwgbmV3VmFsdWUpID0+IHtcbiAgICAgIGdldFJhdyhzYW5kYm94LmVsZW1lbnQsIGNzc0tleSkuZm9sZCgoKSA9PiB7XG4gICAgICAgIHJlbW92ZSQ3KHNhbmRib3guZWxlbWVudCwgYXR0cik7XG4gICAgICB9LCB2ID0+IHtcbiAgICAgICAgc2V0JDkoc2FuZGJveC5lbGVtZW50LCBhdHRyLCB2KTtcbiAgICAgIH0pO1xuICAgICAgc2V0JDgoc2FuZGJveC5lbGVtZW50LCBjc3NLZXksIG5ld1ZhbHVlKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlc3RvcmUgPSAoc2FuZGJveCwgY3NzS2V5LCBhdHRyKSA9PiB7XG4gICAgICBnZXRPcHQoc2FuZGJveC5lbGVtZW50LCBhdHRyKS5mb2xkKCgpID0+IHJlbW92ZSQ2KHNhbmRib3guZWxlbWVudCwgY3NzS2V5KSwgb2xkVmFsdWUgPT4gc2V0JDgoc2FuZGJveC5lbGVtZW50LCBjc3NLZXksIG9sZFZhbHVlKSk7XG4gICAgfTtcbiAgICBjb25zdCBjbG9hayA9IChzYW5kYm94LCBzQ29uZmlnLCBfc1N0YXRlKSA9PiB7XG4gICAgICBjb25zdCBzaW5rID0gc0NvbmZpZy5nZXRBdHRhY2hQb2ludChzYW5kYm94KTtcbiAgICAgIHNldCQ4KHNhbmRib3guZWxlbWVudCwgJ3Bvc2l0aW9uJywgUG9zaXRpb25pbmcuZ2V0TW9kZShzaW5rKSk7XG4gICAgICBzdG9yZShzYW5kYm94LCAndmlzaWJpbGl0eScsIHNDb25maWcuY2xvYWtWaXNpYmlsaXR5QXR0ciwgJ2hpZGRlbicpO1xuICAgIH07XG4gICAgY29uc3QgaGFzUG9zaXRpb24gPSBlbGVtZW50ID0+IGV4aXN0cyhbXG4gICAgICAndG9wJyxcbiAgICAgICdsZWZ0JyxcbiAgICAgICdyaWdodCcsXG4gICAgICAnYm90dG9tJ1xuICAgIF0sIHBvcyA9PiBnZXRSYXcoZWxlbWVudCwgcG9zKS5pc1NvbWUoKSk7XG4gICAgY29uc3QgZGVjbG9hayA9IChzYW5kYm94LCBzQ29uZmlnLCBfc1N0YXRlKSA9PiB7XG4gICAgICBpZiAoIWhhc1Bvc2l0aW9uKHNhbmRib3guZWxlbWVudCkpIHtcbiAgICAgICAgcmVtb3ZlJDYoc2FuZGJveC5lbGVtZW50LCAncG9zaXRpb24nKTtcbiAgICAgIH1cbiAgICAgIHJlc3RvcmUoc2FuZGJveCwgJ3Zpc2liaWxpdHknLCBzQ29uZmlnLmNsb2FrVmlzaWJpbGl0eUF0dHIpO1xuICAgIH07XG5cbiAgICB2YXIgU2FuZGJveEFwaXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgY2xvYWs6IGNsb2FrLFxuICAgICAgICBkZWNsb2FrOiBkZWNsb2FrLFxuICAgICAgICBvcGVuOiBvcGVuJDEsXG4gICAgICAgIG9wZW5XaGlsZUNsb2FrZWQ6IG9wZW5XaGlsZUNsb2FrZWQsXG4gICAgICAgIGNsb3NlOiBjbG9zZSQxLFxuICAgICAgICBpc09wZW46IGlzT3BlbiQxLFxuICAgICAgICBpc1BhcnRPZjogaXNQYXJ0T2YsXG4gICAgICAgIGdldFN0YXRlOiBnZXRTdGF0ZSQyLFxuICAgICAgICBzZXRDb250ZW50OiBzZXRDb250ZW50XG4gICAgfSk7XG5cbiAgICBjb25zdCBldmVudHMkZyA9IChzYW5kYm94Q29uZmlnLCBzYW5kYm94U3RhdGUpID0+IGRlcml2ZSQyKFtydW4kMShzYW5kYm94Q2xvc2UoKSwgKHNhbmRib3gsIF9zaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICBjbG9zZSQxKHNhbmRib3gsIHNhbmRib3hDb25maWcsIHNhbmRib3hTdGF0ZSk7XG4gICAgICB9KV0pO1xuXG4gICAgdmFyIEFjdGl2ZVNhbmRib3ggPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgZXZlbnRzOiBldmVudHMkZ1xuICAgIH0pO1xuXG4gICAgdmFyIFNhbmRib3hTY2hlbWEgPSBbXG4gICAgICBvbkhhbmRsZXIoJ29uT3BlbicpLFxuICAgICAgb25IYW5kbGVyKCdvbkNsb3NlJyksXG4gICAgICByZXF1aXJlZCQxKCdpc1BhcnRPZicpLFxuICAgICAgcmVxdWlyZWQkMSgnZ2V0QXR0YWNoUG9pbnQnKSxcbiAgICAgIGRlZmF1bHRlZCgnY2xvYWtWaXNpYmlsaXR5QXR0cicsICdkYXRhLXByZWNsb2FrLXZpc2liaWxpdHknKVxuICAgIF07XG5cbiAgICBjb25zdCBpbml0JGYgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjb250ZW50cyA9IHZhbHVlJDIoKTtcbiAgICAgIGNvbnN0IHJlYWRTdGF0ZSA9IGNvbnN0YW50JDEoJ25vdC1pbXBsZW1lbnRlZCcpO1xuICAgICAgcmV0dXJuIG51JDgoe1xuICAgICAgICByZWFkU3RhdGUsXG4gICAgICAgIGlzT3BlbjogY29udGVudHMuaXNTZXQsXG4gICAgICAgIGNsZWFyOiBjb250ZW50cy5jbGVhcixcbiAgICAgICAgc2V0OiBjb250ZW50cy5zZXQsXG4gICAgICAgIGdldDogY29udGVudHMuZ2V0XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdmFyIFNhbmRib3hTdGF0ZSA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBpbml0OiBpbml0JGZcbiAgICB9KTtcblxuICAgIGNvbnN0IFNhbmRib3hpbmcgPSBjcmVhdGUkNCh7XG4gICAgICBmaWVsZHM6IFNhbmRib3hTY2hlbWEsXG4gICAgICBuYW1lOiAnc2FuZGJveGluZycsXG4gICAgICBhY3RpdmU6IEFjdGl2ZVNhbmRib3gsXG4gICAgICBhcGlzOiBTYW5kYm94QXBpcyxcbiAgICAgIHN0YXRlOiBTYW5kYm94U3RhdGVcbiAgICB9KTtcblxuICAgIGNvbnN0IGRpc21pc3NQb3B1cHMgPSBjb25zdGFudCQxKCdkaXNtaXNzLnBvcHVwcycpO1xuICAgIGNvbnN0IHJlcG9zaXRpb25Qb3B1cHMgPSBjb25zdGFudCQxKCdyZXBvc2l0aW9uLnBvcHVwcycpO1xuICAgIGNvbnN0IG1vdXNlUmVsZWFzZWQgPSBjb25zdGFudCQxKCdtb3VzZS5yZWxlYXNlZCcpO1xuXG4gICAgY29uc3Qgc2NoZW1hJHggPSBvYmpPZk9ubHkoW1xuICAgICAgZGVmYXVsdGVkKCdpc0V4dHJhUGFydCcsIG5ldmVyKSxcbiAgICAgIG9wdGlvbk9iak9mKCdmaXJlRXZlbnRJbnN0ZWFkJywgW2RlZmF1bHRlZCgnZXZlbnQnLCBkaXNtaXNzUmVxdWVzdGVkKCkpXSlcbiAgICBdKTtcbiAgICBjb25zdCByZWNlaXZpbmdDaGFubmVsJDEgPSByYXdTcGVjID0+IHtcbiAgICAgIGNvbnN0IGRldGFpbCA9IGFzUmF3T3JEaWUkMSgnRGlzbWlzc2FsJywgc2NoZW1hJHgsIHJhd1NwZWMpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Rpc21pc3NQb3B1cHMoKV06IHtcbiAgICAgICAgICBzY2hlbWE6IG9iak9mT25seShbcmVxdWlyZWQkMSgndGFyZ2V0JyldKSxcbiAgICAgICAgICBvblJlY2VpdmU6IChzYW5kYm94LCBkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAoU2FuZGJveGluZy5pc09wZW4oc2FuZGJveCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgaXNQYXJ0ID0gU2FuZGJveGluZy5pc1BhcnRPZihzYW5kYm94LCBkYXRhLnRhcmdldCkgfHwgZGV0YWlsLmlzRXh0cmFQYXJ0KHNhbmRib3gsIGRhdGEudGFyZ2V0KTtcbiAgICAgICAgICAgICAgaWYgKCFpc1BhcnQpIHtcbiAgICAgICAgICAgICAgICBkZXRhaWwuZmlyZUV2ZW50SW5zdGVhZC5mb2xkKCgpID0+IFNhbmRib3hpbmcuY2xvc2Uoc2FuZGJveCksIGZlID0+IGVtaXQoc2FuZGJveCwgZmUuZXZlbnQpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2NoZW1hJHcgPSBvYmpPZk9ubHkoW1xuICAgICAgb3B0aW9uT2JqT2YoJ2ZpcmVFdmVudEluc3RlYWQnLCBbZGVmYXVsdGVkKCdldmVudCcsIHJlcG9zaXRpb25SZXF1ZXN0ZWQoKSldKSxcbiAgICAgIHJlcXVpcmVkRnVuY3Rpb24oJ2RvUmVwb3NpdGlvbicpXG4gICAgXSk7XG4gICAgY29uc3QgcmVjZWl2aW5nQ2hhbm5lbCA9IHJhd1NwZWMgPT4ge1xuICAgICAgY29uc3QgZGV0YWlsID0gYXNSYXdPckRpZSQxKCdSZXBvc2l0aW9uJywgc2NoZW1hJHcsIHJhd1NwZWMpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW3JlcG9zaXRpb25Qb3B1cHMoKV06IHtcbiAgICAgICAgICBvblJlY2VpdmU6IHNhbmRib3ggPT4ge1xuICAgICAgICAgICAgaWYgKFNhbmRib3hpbmcuaXNPcGVuKHNhbmRib3gpKSB7XG4gICAgICAgICAgICAgIGRldGFpbC5maXJlRXZlbnRJbnN0ZWFkLmZvbGQoKCkgPT4gZGV0YWlsLmRvUmVwb3NpdGlvbihzYW5kYm94KSwgZmUgPT4gZW1pdChzYW5kYm94LCBmZS5ldmVudCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25Mb2FkJDUgPSAoY29tcG9uZW50LCByZXBDb25maWcsIHJlcFN0YXRlKSA9PiB7XG4gICAgICByZXBDb25maWcuc3RvcmUubWFuYWdlci5vbkxvYWQoY29tcG9uZW50LCByZXBDb25maWcsIHJlcFN0YXRlKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uVW5sb2FkJDIgPSAoY29tcG9uZW50LCByZXBDb25maWcsIHJlcFN0YXRlKSA9PiB7XG4gICAgICByZXBDb25maWcuc3RvcmUubWFuYWdlci5vblVubG9hZChjb21wb25lbnQsIHJlcENvbmZpZywgcmVwU3RhdGUpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0VmFsdWUkMyA9IChjb21wb25lbnQsIHJlcENvbmZpZywgcmVwU3RhdGUsIGRhdGEpID0+IHtcbiAgICAgIHJlcENvbmZpZy5zdG9yZS5tYW5hZ2VyLnNldFZhbHVlKGNvbXBvbmVudCwgcmVwQ29uZmlnLCByZXBTdGF0ZSwgZGF0YSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRWYWx1ZSQzID0gKGNvbXBvbmVudCwgcmVwQ29uZmlnLCByZXBTdGF0ZSkgPT4gcmVwQ29uZmlnLnN0b3JlLm1hbmFnZXIuZ2V0VmFsdWUoY29tcG9uZW50LCByZXBDb25maWcsIHJlcFN0YXRlKTtcbiAgICBjb25zdCBnZXRTdGF0ZSQxID0gKGNvbXBvbmVudCwgcmVwQ29uZmlnLCByZXBTdGF0ZSkgPT4gcmVwU3RhdGU7XG5cbiAgICB2YXIgUmVwcmVzZW50QXBpcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBvbkxvYWQ6IG9uTG9hZCQ1LFxuICAgICAgICBvblVubG9hZDogb25VbmxvYWQkMixcbiAgICAgICAgc2V0VmFsdWU6IHNldFZhbHVlJDMsXG4gICAgICAgIGdldFZhbHVlOiBnZXRWYWx1ZSQzLFxuICAgICAgICBnZXRTdGF0ZTogZ2V0U3RhdGUkMVxuICAgIH0pO1xuXG4gICAgY29uc3QgZXZlbnRzJGYgPSAocmVwQ29uZmlnLCByZXBTdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgZXMgPSByZXBDb25maWcucmVzZXRPbkRvbSA/IFtcbiAgICAgICAgcnVuT25BdHRhY2hlZCgoY29tcCwgX3NlKSA9PiB7XG4gICAgICAgICAgb25Mb2FkJDUoY29tcCwgcmVwQ29uZmlnLCByZXBTdGF0ZSk7XG4gICAgICAgIH0pLFxuICAgICAgICBydW5PbkRldGFjaGVkKChjb21wLCBfc2UpID0+IHtcbiAgICAgICAgICBvblVubG9hZCQyKGNvbXAsIHJlcENvbmZpZywgcmVwU3RhdGUpO1xuICAgICAgICB9KVxuICAgICAgXSA6IFtsb2FkRXZlbnQocmVwQ29uZmlnLCByZXBTdGF0ZSwgb25Mb2FkJDUpXTtcbiAgICAgIHJldHVybiBkZXJpdmUkMihlcyk7XG4gICAgfTtcblxuICAgIHZhciBBY3RpdmVSZXByZXNlbnRpbmcgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgZXZlbnRzOiBldmVudHMkZlxuICAgIH0pO1xuXG4gICAgY29uc3QgbWVtb3J5JDEgPSAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gQ2VsbChudWxsKTtcbiAgICAgIGNvbnN0IHJlYWRTdGF0ZSA9ICgpID0+ICh7XG4gICAgICAgIG1vZGU6ICdtZW1vcnknLFxuICAgICAgICB2YWx1ZTogZGF0YS5nZXQoKVxuICAgICAgfSk7XG4gICAgICBjb25zdCBpc05vdFNldCA9ICgpID0+IGRhdGEuZ2V0KCkgPT09IG51bGw7XG4gICAgICBjb25zdCBjbGVhciA9ICgpID0+IHtcbiAgICAgICAgZGF0YS5zZXQobnVsbCk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIG51JDgoe1xuICAgICAgICBzZXQ6IGRhdGEuc2V0LFxuICAgICAgICBnZXQ6IGRhdGEuZ2V0LFxuICAgICAgICBpc05vdFNldCxcbiAgICAgICAgY2xlYXIsXG4gICAgICAgIHJlYWRTdGF0ZVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBtYW51YWwgPSAoKSA9PiB7XG4gICAgICBjb25zdCByZWFkU3RhdGUgPSBub29wO1xuICAgICAgcmV0dXJuIG51JDgoeyByZWFkU3RhdGUgfSk7XG4gICAgfTtcbiAgICBjb25zdCBkYXRhc2V0ID0gKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YUJ5VmFsdWUgPSBDZWxsKHt9KTtcbiAgICAgIGNvbnN0IGRhdGFCeVRleHQgPSBDZWxsKHt9KTtcbiAgICAgIGNvbnN0IHJlYWRTdGF0ZSA9ICgpID0+ICh7XG4gICAgICAgIG1vZGU6ICdkYXRhc2V0JyxcbiAgICAgICAgZGF0YUJ5VmFsdWU6IGRhdGFCeVZhbHVlLmdldCgpLFxuICAgICAgICBkYXRhQnlUZXh0OiBkYXRhQnlUZXh0LmdldCgpXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNsZWFyID0gKCkgPT4ge1xuICAgICAgICBkYXRhQnlWYWx1ZS5zZXQoe30pO1xuICAgICAgICBkYXRhQnlUZXh0LnNldCh7fSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgbG9va3VwID0gaXRlbVN0cmluZyA9PiBnZXQkZyhkYXRhQnlWYWx1ZS5nZXQoKSwgaXRlbVN0cmluZykub3JUaHVuaygoKSA9PiBnZXQkZyhkYXRhQnlUZXh0LmdldCgpLCBpdGVtU3RyaW5nKSk7XG4gICAgICBjb25zdCB1cGRhdGUgPSBpdGVtcyA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRhQnlWYWx1ZSA9IGRhdGFCeVZhbHVlLmdldCgpO1xuICAgICAgICBjb25zdCBjdXJyZW50RGF0YUJ5VGV4dCA9IGRhdGFCeVRleHQuZ2V0KCk7XG4gICAgICAgIGNvbnN0IG5ld0RhdGFCeVZhbHVlID0ge307XG4gICAgICAgIGNvbnN0IG5ld0RhdGFCeVRleHQgPSB7fTtcbiAgICAgICAgZWFjaCQxKGl0ZW1zLCBpdGVtID0+IHtcbiAgICAgICAgICBuZXdEYXRhQnlWYWx1ZVtpdGVtLnZhbHVlXSA9IGl0ZW07XG4gICAgICAgICAgZ2V0JGcoaXRlbSwgJ21ldGEnKS5lYWNoKG1ldGEgPT4ge1xuICAgICAgICAgICAgZ2V0JGcobWV0YSwgJ3RleHQnKS5lYWNoKHRleHQgPT4ge1xuICAgICAgICAgICAgICBuZXdEYXRhQnlUZXh0W3RleHRdID0gaXRlbTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgZGF0YUJ5VmFsdWUuc2V0KHtcbiAgICAgICAgICAuLi5jdXJyZW50RGF0YUJ5VmFsdWUsXG4gICAgICAgICAgLi4ubmV3RGF0YUJ5VmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIGRhdGFCeVRleHQuc2V0KHtcbiAgICAgICAgICAuLi5jdXJyZW50RGF0YUJ5VGV4dCxcbiAgICAgICAgICAuLi5uZXdEYXRhQnlUZXh0XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBudSQ4KHtcbiAgICAgICAgcmVhZFN0YXRlLFxuICAgICAgICBsb29rdXAsXG4gICAgICAgIHVwZGF0ZSxcbiAgICAgICAgY2xlYXJcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW5pdCRlID0gc3BlYyA9PiBzcGVjLnN0b3JlLm1hbmFnZXIuc3RhdGUoc3BlYyk7XG5cbiAgICB2YXIgUmVwcmVzZW50U3RhdGUgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgbWVtb3J5OiBtZW1vcnkkMSxcbiAgICAgICAgZGF0YXNldDogZGF0YXNldCxcbiAgICAgICAgbWFudWFsOiBtYW51YWwsXG4gICAgICAgIGluaXQ6IGluaXQkZVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2V0VmFsdWUkMiA9IChjb21wb25lbnQsIHJlcENvbmZpZywgcmVwU3RhdGUsIGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlID0gcmVwQ29uZmlnLnN0b3JlO1xuICAgICAgcmVwU3RhdGUudXBkYXRlKFtkYXRhXSk7XG4gICAgICBzdG9yZS5zZXRWYWx1ZShjb21wb25lbnQsIGRhdGEpO1xuICAgICAgcmVwQ29uZmlnLm9uU2V0VmFsdWUoY29tcG9uZW50LCBkYXRhKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFZhbHVlJDIgPSAoY29tcG9uZW50LCByZXBDb25maWcsIHJlcFN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBzdG9yZSA9IHJlcENvbmZpZy5zdG9yZTtcbiAgICAgIGNvbnN0IGtleSA9IHN0b3JlLmdldERhdGFLZXkoY29tcG9uZW50KTtcbiAgICAgIHJldHVybiByZXBTdGF0ZS5sb29rdXAoa2V5KS5nZXRPclRodW5rKCgpID0+IHN0b3JlLmdldEZhbGxiYWNrRW50cnkoa2V5KSk7XG4gICAgfTtcbiAgICBjb25zdCBvbkxvYWQkNCA9IChjb21wb25lbnQsIHJlcENvbmZpZywgcmVwU3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlID0gcmVwQ29uZmlnLnN0b3JlO1xuICAgICAgc3RvcmUuaW5pdGlhbFZhbHVlLmVhY2goZGF0YSA9PiB7XG4gICAgICAgIHNldFZhbHVlJDIoY29tcG9uZW50LCByZXBDb25maWcsIHJlcFN0YXRlLCBkYXRhKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25VbmxvYWQkMSA9IChjb21wb25lbnQsIHJlcENvbmZpZywgcmVwU3RhdGUpID0+IHtcbiAgICAgIHJlcFN0YXRlLmNsZWFyKCk7XG4gICAgfTtcbiAgICB2YXIgRGF0YXNldFN0b3JlID0gW1xuICAgICAgb3B0aW9uJDMoJ2luaXRpYWxWYWx1ZScpLFxuICAgICAgcmVxdWlyZWQkMSgnZ2V0RmFsbGJhY2tFbnRyeScpLFxuICAgICAgcmVxdWlyZWQkMSgnZ2V0RGF0YUtleScpLFxuICAgICAgcmVxdWlyZWQkMSgnc2V0VmFsdWUnKSxcbiAgICAgIG91dHB1dCQxKCdtYW5hZ2VyJywge1xuICAgICAgICBzZXRWYWx1ZTogc2V0VmFsdWUkMixcbiAgICAgICAgZ2V0VmFsdWU6IGdldFZhbHVlJDIsXG4gICAgICAgIG9uTG9hZDogb25Mb2FkJDQsXG4gICAgICAgIG9uVW5sb2FkOiBvblVubG9hZCQxLFxuICAgICAgICBzdGF0ZTogZGF0YXNldFxuICAgICAgfSlcbiAgICBdO1xuXG4gICAgY29uc3QgZ2V0VmFsdWUkMSA9IChjb21wb25lbnQsIHJlcENvbmZpZywgX3JlcFN0YXRlKSA9PiByZXBDb25maWcuc3RvcmUuZ2V0VmFsdWUoY29tcG9uZW50KTtcbiAgICBjb25zdCBzZXRWYWx1ZSQxID0gKGNvbXBvbmVudCwgcmVwQ29uZmlnLCBfcmVwU3RhdGUsIGRhdGEpID0+IHtcbiAgICAgIHJlcENvbmZpZy5zdG9yZS5zZXRWYWx1ZShjb21wb25lbnQsIGRhdGEpO1xuICAgICAgcmVwQ29uZmlnLm9uU2V0VmFsdWUoY29tcG9uZW50LCBkYXRhKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uTG9hZCQzID0gKGNvbXBvbmVudCwgcmVwQ29uZmlnLCBfcmVwU3RhdGUpID0+IHtcbiAgICAgIHJlcENvbmZpZy5zdG9yZS5pbml0aWFsVmFsdWUuZWFjaChkYXRhID0+IHtcbiAgICAgICAgcmVwQ29uZmlnLnN0b3JlLnNldFZhbHVlKGNvbXBvbmVudCwgZGF0YSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHZhciBNYW51YWxTdG9yZSA9IFtcbiAgICAgIHJlcXVpcmVkJDEoJ2dldFZhbHVlJyksXG4gICAgICBkZWZhdWx0ZWQoJ3NldFZhbHVlJywgbm9vcCksXG4gICAgICBvcHRpb24kMygnaW5pdGlhbFZhbHVlJyksXG4gICAgICBvdXRwdXQkMSgnbWFuYWdlcicsIHtcbiAgICAgICAgc2V0VmFsdWU6IHNldFZhbHVlJDEsXG4gICAgICAgIGdldFZhbHVlOiBnZXRWYWx1ZSQxLFxuICAgICAgICBvbkxvYWQ6IG9uTG9hZCQzLFxuICAgICAgICBvblVubG9hZDogbm9vcCxcbiAgICAgICAgc3RhdGU6IE5vU3RhdGUuaW5pdFxuICAgICAgfSlcbiAgICBdO1xuXG4gICAgY29uc3Qgc2V0VmFsdWUgPSAoY29tcG9uZW50LCByZXBDb25maWcsIHJlcFN0YXRlLCBkYXRhKSA9PiB7XG4gICAgICByZXBTdGF0ZS5zZXQoZGF0YSk7XG4gICAgICByZXBDb25maWcub25TZXRWYWx1ZShjb21wb25lbnQsIGRhdGEpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0VmFsdWUgPSAoY29tcG9uZW50LCByZXBDb25maWcsIHJlcFN0YXRlKSA9PiByZXBTdGF0ZS5nZXQoKTtcbiAgICBjb25zdCBvbkxvYWQkMiA9IChjb21wb25lbnQsIHJlcENvbmZpZywgcmVwU3RhdGUpID0+IHtcbiAgICAgIHJlcENvbmZpZy5zdG9yZS5pbml0aWFsVmFsdWUuZWFjaChpbml0VmFsID0+IHtcbiAgICAgICAgaWYgKHJlcFN0YXRlLmlzTm90U2V0KCkpIHtcbiAgICAgICAgICByZXBTdGF0ZS5zZXQoaW5pdFZhbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25VbmxvYWQgPSAoY29tcG9uZW50LCByZXBDb25maWcsIHJlcFN0YXRlKSA9PiB7XG4gICAgICByZXBTdGF0ZS5jbGVhcigpO1xuICAgIH07XG4gICAgdmFyIE1lbW9yeVN0b3JlID0gW1xuICAgICAgb3B0aW9uJDMoJ2luaXRpYWxWYWx1ZScpLFxuICAgICAgb3V0cHV0JDEoJ21hbmFnZXInLCB7XG4gICAgICAgIHNldFZhbHVlLFxuICAgICAgICBnZXRWYWx1ZSxcbiAgICAgICAgb25Mb2FkOiBvbkxvYWQkMixcbiAgICAgICAgb25VbmxvYWQsXG4gICAgICAgIHN0YXRlOiBtZW1vcnkkMVxuICAgICAgfSlcbiAgICBdO1xuXG4gICAgdmFyIFJlcHJlc2VudFNjaGVtYSA9IFtcbiAgICAgIGRlZmF1bHRlZE9mKCdzdG9yZScsIHsgbW9kZTogJ21lbW9yeScgfSwgY2hvb3NlJDEoJ21vZGUnLCB7XG4gICAgICAgIG1lbW9yeTogTWVtb3J5U3RvcmUsXG4gICAgICAgIG1hbnVhbDogTWFudWFsU3RvcmUsXG4gICAgICAgIGRhdGFzZXQ6IERhdGFzZXRTdG9yZVxuICAgICAgfSkpLFxuICAgICAgb25IYW5kbGVyKCdvblNldFZhbHVlJyksXG4gICAgICBkZWZhdWx0ZWQoJ3Jlc2V0T25Eb20nLCBmYWxzZSlcbiAgICBdO1xuXG4gICAgY29uc3QgUmVwcmVzZW50aW5nID0gY3JlYXRlJDQoe1xuICAgICAgZmllbGRzOiBSZXByZXNlbnRTY2hlbWEsXG4gICAgICBuYW1lOiAncmVwcmVzZW50aW5nJyxcbiAgICAgIGFjdGl2ZTogQWN0aXZlUmVwcmVzZW50aW5nLFxuICAgICAgYXBpczogUmVwcmVzZW50QXBpcyxcbiAgICAgIGV4dHJhOiB7XG4gICAgICAgIHNldFZhbHVlRnJvbTogKGNvbXBvbmVudCwgc291cmNlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBSZXByZXNlbnRpbmcuZ2V0VmFsdWUoc291cmNlKTtcbiAgICAgICAgICBSZXByZXNlbnRpbmcuc2V0VmFsdWUoY29tcG9uZW50LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzdGF0ZTogUmVwcmVzZW50U3RhdGVcbiAgICB9KTtcblxuICAgIGNvbnN0IGZpZWxkID0gKG5hbWUsIGZvcmJpZGRlbikgPT4gZGVmYXVsdGVkT2JqT2YobmFtZSwge30sIG1hcCQyKGZvcmJpZGRlbiwgZiA9PiBmb3JiaWQoZi5uYW1lKCksICdDYW5ub3QgY29uZmlndXJlICcgKyBmLm5hbWUoKSArICcgZm9yICcgKyBuYW1lKSkuY29uY2F0KFtjdXN0b21GaWVsZCgnZHVtcCcsIGlkZW50aXR5KV0pKTtcbiAgICBjb25zdCBnZXQkMyA9IGRhdGEgPT4gZGF0YS5kdW1wO1xuICAgIGNvbnN0IGF1Z21lbnQgPSAoZGF0YSwgb3JpZ2luYWwpID0+ICh7XG4gICAgICAuLi5kZXJpdmUkMShvcmlnaW5hbCksXG4gICAgICAuLi5kYXRhLmR1bXBcbiAgICB9KTtcbiAgICBjb25zdCBTa2V0Y2hCZWhhdmlvdXJzID0ge1xuICAgICAgZmllbGQsXG4gICAgICBhdWdtZW50LFxuICAgICAgZ2V0OiBnZXQkM1xuICAgIH07XG5cbiAgICBjb25zdCBfcGxhY2Vob2xkZXIgPSAncGxhY2Vob2xkZXInO1xuICAgIGNvbnN0IGFkdCQzID0gQWR0LmdlbmVyYXRlKFtcbiAgICAgIHtcbiAgICAgICAgc2luZ2xlOiBbXG4gICAgICAgICAgJ3JlcXVpcmVkJyxcbiAgICAgICAgICAndmFsdWVUaHVuaydcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbXVsdGlwbGU6IFtcbiAgICAgICAgICAncmVxdWlyZWQnLFxuICAgICAgICAgICd2YWx1ZVRodW5rcydcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0pO1xuICAgIGNvbnN0IGlzU3Vic3RpdHV0ZWQgPSBzcGVjID0+IGhhcyQyKHNwZWMsICd1aVR5cGUnKTtcbiAgICBjb25zdCBzdWJQbGFjZWhvbGRlciA9IChvd25lciwgZGV0YWlsLCBjb21wU3BlYywgcGxhY2Vob2xkZXJzKSA9PiB7XG4gICAgICBpZiAob3duZXIuZXhpc3RzKG8gPT4gbyAhPT0gY29tcFNwZWMub3duZXIpKSB7XG4gICAgICAgIHJldHVybiBhZHQkMy5zaW5nbGUodHJ1ZSwgY29uc3RhbnQkMShjb21wU3BlYykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldCRnKHBsYWNlaG9sZGVycywgY29tcFNwZWMubmFtZSkuZm9sZCgoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBwbGFjZWhvbGRlciBjb21wb25lbnQ6ICcgKyBjb21wU3BlYy5uYW1lICsgJ1xcbktub3duOiBbJyArIGtleXMocGxhY2Vob2xkZXJzKSArICddXFxuTmFtZXNwYWNlOiAnICsgb3duZXIuZ2V0T3IoJ25vbmUnKSArICdcXG5TcGVjOiAnICsgSlNPTi5zdHJpbmdpZnkoY29tcFNwZWMsIG51bGwsIDIpKTtcbiAgICAgIH0sIG5ld1NwZWMgPT4gbmV3U3BlYy5yZXBsYWNlKCkpO1xuICAgIH07XG4gICAgY29uc3Qgc2NhbiA9IChvd25lciwgZGV0YWlsLCBjb21wU3BlYywgcGxhY2Vob2xkZXJzKSA9PiB7XG4gICAgICBpZiAoaXNTdWJzdGl0dXRlZChjb21wU3BlYykgJiYgY29tcFNwZWMudWlUeXBlID09PSBfcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgcmV0dXJuIHN1YlBsYWNlaG9sZGVyKG93bmVyLCBkZXRhaWwsIGNvbXBTcGVjLCBwbGFjZWhvbGRlcnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFkdCQzLnNpbmdsZShmYWxzZSwgY29uc3RhbnQkMShjb21wU3BlYykpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc3Vic3RpdHV0ZSA9IChvd25lciwgZGV0YWlsLCBjb21wU3BlYywgcGxhY2Vob2xkZXJzKSA9PiB7XG4gICAgICBjb25zdCBiYXNlID0gc2Nhbihvd25lciwgZGV0YWlsLCBjb21wU3BlYywgcGxhY2Vob2xkZXJzKTtcbiAgICAgIHJldHVybiBiYXNlLmZvbGQoKHJlcSwgdmFsdWVUaHVuaykgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzU3Vic3RpdHV0ZWQoY29tcFNwZWMpID8gdmFsdWVUaHVuayhkZXRhaWwsIGNvbXBTcGVjLmNvbmZpZywgY29tcFNwZWMudmFsaWRhdGVkKSA6IHZhbHVlVGh1bmsoZGV0YWlsKTtcbiAgICAgICAgY29uc3QgY2hpbGRTcGVjcyA9IGdldCRnKHZhbHVlLCAnY29tcG9uZW50cycpLmdldE9yKFtdKTtcbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0ZWQgPSBiaW5kJDMoY2hpbGRTcGVjcywgYyA9PiBzdWJzdGl0dXRlKG93bmVyLCBkZXRhaWwsIGMsIHBsYWNlaG9sZGVycykpO1xuICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICAgIC4uLnZhbHVlLFxuICAgICAgICAgICAgY29tcG9uZW50czogc3Vic3RpdHV0ZWRcbiAgICAgICAgICB9XTtcbiAgICAgIH0sIChyZXEsIHZhbHVlc1RodW5rKSA9PiB7XG4gICAgICAgIGlmIChpc1N1YnN0aXR1dGVkKGNvbXBTcGVjKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHZhbHVlc1RodW5rKGRldGFpbCwgY29tcFNwZWMuY29uZmlnLCBjb21wU3BlYy52YWxpZGF0ZWQpO1xuICAgICAgICAgIGNvbnN0IHByZXByb2Nlc3NvciA9IGNvbXBTcGVjLnZhbGlkYXRlZC5wcmVwcm9jZXNzLmdldE9yKGlkZW50aXR5KTtcbiAgICAgICAgICByZXR1cm4gcHJlcHJvY2Vzc29yKHZhbHVlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlc1RodW5rKGRldGFpbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc3Vic3RpdHV0ZUFsbCA9IChvd25lciwgZGV0YWlsLCBjb21wb25lbnRzLCBwbGFjZWhvbGRlcnMpID0+IGJpbmQkMyhjb21wb25lbnRzLCBjID0+IHN1YnN0aXR1dGUob3duZXIsIGRldGFpbCwgYywgcGxhY2Vob2xkZXJzKSk7XG4gICAgY29uc3Qgb25lUmVwbGFjZSA9IChsYWJlbCwgcmVwbGFjZW1lbnRzKSA9PiB7XG4gICAgICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gICAgICBjb25zdCB1c2VkID0gKCkgPT4gY2FsbGVkO1xuICAgICAgY29uc3QgcmVwbGFjZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKGNhbGxlZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIHVzZSB0aGUgc2FtZSBwbGFjZWhvbGRlciBtb3JlIHRoYW4gb25jZTogJyArIGxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnRzO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlcXVpcmVkID0gKCkgPT4gcmVwbGFjZW1lbnRzLmZvbGQoKHJlcSwgXykgPT4gcmVxLCAocmVxLCBfKSA9PiByZXEpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogY29uc3RhbnQkMShsYWJlbCksXG4gICAgICAgIHJlcXVpcmVkLFxuICAgICAgICB1c2VkLFxuICAgICAgICByZXBsYWNlXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3Qgc3Vic3RpdHV0ZVBsYWNlcyA9IChvd25lciwgZGV0YWlsLCBjb21wb25lbnRzLCBwbGFjZWhvbGRlcnMpID0+IHtcbiAgICAgIGNvbnN0IHBzID0gbWFwJDEocGxhY2Vob2xkZXJzLCAocGgsIG5hbWUpID0+IG9uZVJlcGxhY2UobmFtZSwgcGgpKTtcbiAgICAgIGNvbnN0IG91dGNvbWUgPSBzdWJzdGl0dXRlQWxsKG93bmVyLCBkZXRhaWwsIGNvbXBvbmVudHMsIHBzKTtcbiAgICAgIGVhY2gocHMsIHAgPT4ge1xuICAgICAgICBpZiAocC51c2VkKCkgPT09IGZhbHNlICYmIHAucmVxdWlyZWQoKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGxhY2Vob2xkZXI6ICcgKyBwLm5hbWUoKSArICcgd2FzIG5vdCBmb3VuZCBpbiBjb21wb25lbnRzIGxpc3RcXG5OYW1lc3BhY2U6ICcgKyBvd25lci5nZXRPcignbm9uZScpICsgJ1xcbkNvbXBvbmVudHM6ICcgKyBKU09OLnN0cmluZ2lmeShkZXRhaWwuY29tcG9uZW50cywgbnVsbCwgMikpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvdXRjb21lO1xuICAgIH07XG4gICAgY29uc3Qgc2luZ2xlJDIgPSBhZHQkMy5zaW5nbGU7XG4gICAgY29uc3QgbXVsdGlwbGUgPSBhZHQkMy5tdWx0aXBsZTtcbiAgICBjb25zdCBwbGFjZWhvbGRlciA9IGNvbnN0YW50JDEoX3BsYWNlaG9sZGVyKTtcblxuICAgIGNvbnN0IGFkdCQyID0gQWR0LmdlbmVyYXRlKFtcbiAgICAgIHsgcmVxdWlyZWQ6IFsnZGF0YSddIH0sXG4gICAgICB7IGV4dGVybmFsOiBbJ2RhdGEnXSB9LFxuICAgICAgeyBvcHRpb25hbDogWydkYXRhJ10gfSxcbiAgICAgIHsgZ3JvdXA6IFsnZGF0YSddIH1cbiAgICBdKTtcbiAgICBjb25zdCBmRmFjdG9yeSA9IGRlZmF1bHRlZCgnZmFjdG9yeScsIHsgc2tldGNoOiBpZGVudGl0eSB9KTtcbiAgICBjb25zdCBmU2NoZW1hID0gZGVmYXVsdGVkKCdzY2hlbWEnLCBbXSk7XG4gICAgY29uc3QgZk5hbWUgPSByZXF1aXJlZCQxKCduYW1lJyk7XG4gICAgY29uc3QgZlBuYW1lID0gZmllbGQkMSgncG5hbWUnLCAncG5hbWUnLCBkZWZhdWx0ZWRUaHVuayh0eXBlU3BlYyA9PiAnPGFsbG95LicgKyBnZW5lcmF0ZSQ2KHR5cGVTcGVjLm5hbWUpICsgJz4nKSwgYW55VmFsdWUoKSk7XG4gICAgY29uc3QgZkdyb3VwU2NoZW1hID0gY3VzdG9tRmllbGQoJ3NjaGVtYScsICgpID0+IFtvcHRpb24kMygncHJlcHJvY2VzcycpXSk7XG4gICAgY29uc3QgZkRlZmF1bHRzID0gZGVmYXVsdGVkKCdkZWZhdWx0cycsIGNvbnN0YW50JDEoe30pKTtcbiAgICBjb25zdCBmT3ZlcnJpZGVzID0gZGVmYXVsdGVkKCdvdmVycmlkZXMnLCBjb25zdGFudCQxKHt9KSk7XG4gICAgY29uc3QgcmVxdWlyZWRTcGVjID0gb2JqT2YoW1xuICAgICAgZkZhY3RvcnksXG4gICAgICBmU2NoZW1hLFxuICAgICAgZk5hbWUsXG4gICAgICBmUG5hbWUsXG4gICAgICBmRGVmYXVsdHMsXG4gICAgICBmT3ZlcnJpZGVzXG4gICAgXSk7XG4gICAgY29uc3QgZXh0ZXJuYWxTcGVjID0gb2JqT2YoW1xuICAgICAgZkZhY3RvcnksXG4gICAgICBmU2NoZW1hLFxuICAgICAgZk5hbWUsXG4gICAgICBmRGVmYXVsdHMsXG4gICAgICBmT3ZlcnJpZGVzXG4gICAgXSk7XG4gICAgY29uc3Qgb3B0aW9uYWxTcGVjID0gb2JqT2YoW1xuICAgICAgZkZhY3RvcnksXG4gICAgICBmU2NoZW1hLFxuICAgICAgZk5hbWUsXG4gICAgICBmUG5hbWUsXG4gICAgICBmRGVmYXVsdHMsXG4gICAgICBmT3ZlcnJpZGVzXG4gICAgXSk7XG4gICAgY29uc3QgZ3JvdXBTcGVjID0gb2JqT2YoW1xuICAgICAgZkZhY3RvcnksXG4gICAgICBmR3JvdXBTY2hlbWEsXG4gICAgICBmTmFtZSxcbiAgICAgIHJlcXVpcmVkJDEoJ3VuaXQnKSxcbiAgICAgIGZQbmFtZSxcbiAgICAgIGZEZWZhdWx0cyxcbiAgICAgIGZPdmVycmlkZXNcbiAgICBdKTtcbiAgICBjb25zdCBhc05hbWVkUGFydCA9IHBhcnQgPT4ge1xuICAgICAgcmV0dXJuIHBhcnQuZm9sZChPcHRpb25hbC5zb21lLCBPcHRpb25hbC5ub25lLCBPcHRpb25hbC5zb21lLCBPcHRpb25hbC5zb21lKTtcbiAgICB9O1xuICAgIGNvbnN0IG5hbWUkMiA9IHBhcnQgPT4ge1xuICAgICAgY29uc3QgZ2V0ID0gZGF0YSA9PiBkYXRhLm5hbWU7XG4gICAgICByZXR1cm4gcGFydC5mb2xkKGdldCwgZ2V0LCBnZXQsIGdldCk7XG4gICAgfTtcbiAgICBjb25zdCBhc0NvbW1vbiA9IHBhcnQgPT4ge1xuICAgICAgcmV0dXJuIHBhcnQuZm9sZChpZGVudGl0eSwgaWRlbnRpdHksIGlkZW50aXR5LCBpZGVudGl0eSk7XG4gICAgfTtcbiAgICBjb25zdCBjb252ZXJ0ID0gKGFkdENvbnN0cnVjdG9yLCBwYXJ0U2NoZW1hKSA9PiBzcGVjID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhc1Jhd09yRGllJDEoJ0NvbnZlcnRpbmcgcGFydCB0eXBlJywgcGFydFNjaGVtYSwgc3BlYyk7XG4gICAgICByZXR1cm4gYWR0Q29uc3RydWN0b3IoZGF0YSk7XG4gICAgfTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGNvbnZlcnQoYWR0JDIucmVxdWlyZWQsIHJlcXVpcmVkU3BlYyk7XG4gICAgY29uc3QgZXh0ZXJuYWwgPSBjb252ZXJ0KGFkdCQyLmV4dGVybmFsLCBleHRlcm5hbFNwZWMpO1xuICAgIGNvbnN0IG9wdGlvbmFsID0gY29udmVydChhZHQkMi5vcHRpb25hbCwgb3B0aW9uYWxTcGVjKTtcbiAgICBjb25zdCBncm91cCA9IGNvbnZlcnQoYWR0JDIuZ3JvdXAsIGdyb3VwU3BlYyk7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSBjb25zdGFudCQxKCdlbnRpcmV0eScpO1xuXG4gICAgdmFyIFBhcnRUeXBlID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIHJlcXVpcmVkOiByZXF1aXJlZCxcbiAgICAgICAgZXh0ZXJuYWw6IGV4dGVybmFsLFxuICAgICAgICBvcHRpb25hbDogb3B0aW9uYWwsXG4gICAgICAgIGdyb3VwOiBncm91cCxcbiAgICAgICAgYXNOYW1lZFBhcnQ6IGFzTmFtZWRQYXJ0LFxuICAgICAgICBuYW1lOiBuYW1lJDIsXG4gICAgICAgIGFzQ29tbW9uOiBhc0NvbW1vbixcbiAgICAgICAgb3JpZ2luYWw6IG9yaWdpbmFsXG4gICAgfSk7XG5cbiAgICBjb25zdCBjb21iaW5lID0gKGRldGFpbCwgZGF0YSwgcGFydFNwZWMsIHBhcnRWYWxpZGF0ZWQpID0+IGRlZXBNZXJnZShkYXRhLmRlZmF1bHRzKGRldGFpbCwgcGFydFNwZWMsIHBhcnRWYWxpZGF0ZWQpLCBwYXJ0U3BlYywgeyB1aWQ6IGRldGFpbC5wYXJ0VWlkc1tkYXRhLm5hbWVdIH0sIGRhdGEub3ZlcnJpZGVzKGRldGFpbCwgcGFydFNwZWMsIHBhcnRWYWxpZGF0ZWQpKTtcbiAgICBjb25zdCBzdWJzID0gKG93bmVyLCBkZXRhaWwsIHBhcnRzKSA9PiB7XG4gICAgICBjb25zdCBpbnRlcm5hbHMgPSB7fTtcbiAgICAgIGNvbnN0IGV4dGVybmFscyA9IHt9O1xuICAgICAgZWFjaCQxKHBhcnRzLCBwYXJ0ID0+IHtcbiAgICAgICAgcGFydC5mb2xkKGRhdGEgPT4ge1xuICAgICAgICAgIGludGVybmFsc1tkYXRhLnBuYW1lXSA9IHNpbmdsZSQyKHRydWUsIChkZXRhaWwsIHBhcnRTcGVjLCBwYXJ0VmFsaWRhdGVkKSA9PiBkYXRhLmZhY3Rvcnkuc2tldGNoKGNvbWJpbmUoZGV0YWlsLCBkYXRhLCBwYXJ0U3BlYywgcGFydFZhbGlkYXRlZCkpKTtcbiAgICAgICAgfSwgZGF0YSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFydFNwZWMgPSBkZXRhaWwucGFydHNbZGF0YS5uYW1lXTtcbiAgICAgICAgICBleHRlcm5hbHNbZGF0YS5uYW1lXSA9IGNvbnN0YW50JDEoZGF0YS5mYWN0b3J5LnNrZXRjaChjb21iaW5lKGRldGFpbCwgZGF0YSwgcGFydFNwZWNbb3JpZ2luYWwoKV0pLCBwYXJ0U3BlYykpO1xuICAgICAgICB9LCBkYXRhID0+IHtcbiAgICAgICAgICBpbnRlcm5hbHNbZGF0YS5wbmFtZV0gPSBzaW5nbGUkMihmYWxzZSwgKGRldGFpbCwgcGFydFNwZWMsIHBhcnRWYWxpZGF0ZWQpID0+IGRhdGEuZmFjdG9yeS5za2V0Y2goY29tYmluZShkZXRhaWwsIGRhdGEsIHBhcnRTcGVjLCBwYXJ0VmFsaWRhdGVkKSkpO1xuICAgICAgICB9LCBkYXRhID0+IHtcbiAgICAgICAgICBpbnRlcm5hbHNbZGF0YS5wbmFtZV0gPSBtdWx0aXBsZSh0cnVlLCAoZGV0YWlsLCBfcGFydFNwZWMsIF9wYXJ0VmFsaWRhdGVkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1bml0cyA9IGRldGFpbFtkYXRhLm5hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIG1hcCQyKHVuaXRzLCB1ID0+IGRhdGEuZmFjdG9yeS5za2V0Y2goZGVlcE1lcmdlKGRhdGEuZGVmYXVsdHMoZGV0YWlsLCB1LCBfcGFydFZhbGlkYXRlZCksIHUsIGRhdGEub3ZlcnJpZGVzKGRldGFpbCwgdSkpKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnRlcm5hbHM6IGNvbnN0YW50JDEoaW50ZXJuYWxzKSxcbiAgICAgICAgZXh0ZXJuYWxzOiBjb25zdGFudCQxKGV4dGVybmFscylcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGdlbmVyYXRlJDMgPSAob3duZXIsIHBhcnRzKSA9PiB7XG4gICAgICBjb25zdCByID0ge307XG4gICAgICBlYWNoJDEocGFydHMsIHBhcnQgPT4ge1xuICAgICAgICBhc05hbWVkUGFydChwYXJ0KS5lYWNoKG5wID0+IHtcbiAgICAgICAgICBjb25zdCBnID0gZG9HZW5lcmF0ZU9uZShvd25lciwgbnAucG5hbWUpO1xuICAgICAgICAgIHJbbnAubmFtZV0gPSBjb25maWcgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkID0gYXNSYXdPckRpZSQxKCdQYXJ0OiAnICsgbnAubmFtZSArICcgaW4gJyArIG93bmVyLCBvYmpPZihucC5zY2hlbWEpLCBjb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uZyxcbiAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICB2YWxpZGF0ZWRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3QgZG9HZW5lcmF0ZU9uZSA9IChvd25lciwgcG5hbWUpID0+ICh7XG4gICAgICB1aVR5cGU6IHBsYWNlaG9sZGVyKCksXG4gICAgICBvd25lcixcbiAgICAgIG5hbWU6IHBuYW1lXG4gICAgfSk7XG4gICAgY29uc3QgZ2VuZXJhdGVPbmUkMSA9IChvd25lciwgcG5hbWUsIGNvbmZpZykgPT4gKHtcbiAgICAgIHVpVHlwZTogcGxhY2Vob2xkZXIoKSxcbiAgICAgIG93bmVyLFxuICAgICAgbmFtZTogcG5hbWUsXG4gICAgICBjb25maWcsXG4gICAgICB2YWxpZGF0ZWQ6IHt9XG4gICAgfSk7XG4gICAgY29uc3Qgc2NoZW1hcyA9IHBhcnRzID0+IGJpbmQkMyhwYXJ0cywgcGFydCA9PiBwYXJ0LmZvbGQoT3B0aW9uYWwubm9uZSwgT3B0aW9uYWwuc29tZSwgT3B0aW9uYWwubm9uZSwgT3B0aW9uYWwubm9uZSkubWFwKGRhdGEgPT4gcmVxdWlyZWRPYmpPZihkYXRhLm5hbWUsIGRhdGEuc2NoZW1hLmNvbmNhdChbc25hcHNob3Qob3JpZ2luYWwoKSldKSkpLnRvQXJyYXkoKSk7XG4gICAgY29uc3QgbmFtZXMgPSBwYXJ0cyA9PiBtYXAkMihwYXJ0cywgbmFtZSQyKTtcbiAgICBjb25zdCBzdWJzdGl0dXRlcyA9IChvd25lciwgZGV0YWlsLCBwYXJ0cykgPT4gc3Vicyhvd25lciwgZGV0YWlsLCBwYXJ0cyk7XG4gICAgY29uc3QgY29tcG9uZW50cyQxID0gKG93bmVyLCBkZXRhaWwsIGludGVybmFscykgPT4gc3Vic3RpdHV0ZVBsYWNlcyhPcHRpb25hbC5zb21lKG93bmVyKSwgZGV0YWlsLCBkZXRhaWwuY29tcG9uZW50cywgaW50ZXJuYWxzKTtcbiAgICBjb25zdCBnZXRQYXJ0ID0gKGNvbXBvbmVudCwgZGV0YWlsLCBwYXJ0S2V5KSA9PiB7XG4gICAgICBjb25zdCB1aWQgPSBkZXRhaWwucGFydFVpZHNbcGFydEtleV07XG4gICAgICByZXR1cm4gY29tcG9uZW50LmdldFN5c3RlbSgpLmdldEJ5VWlkKHVpZCkudG9PcHRpb25hbCgpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0UGFydE9yRGllID0gKGNvbXBvbmVudCwgZGV0YWlsLCBwYXJ0S2V5KSA9PiBnZXRQYXJ0KGNvbXBvbmVudCwgZGV0YWlsLCBwYXJ0S2V5KS5nZXRPckRpZSgnQ291bGQgbm90IGZpbmQgcGFydDogJyArIHBhcnRLZXkpO1xuICAgIGNvbnN0IGdldFBhcnRzID0gKGNvbXBvbmVudCwgZGV0YWlsLCBwYXJ0S2V5cykgPT4ge1xuICAgICAgY29uc3QgciA9IHt9O1xuICAgICAgY29uc3QgdWlkcyA9IGRldGFpbC5wYXJ0VWlkcztcbiAgICAgIGNvbnN0IHN5c3RlbSA9IGNvbXBvbmVudC5nZXRTeXN0ZW0oKTtcbiAgICAgIGVhY2gkMShwYXJ0S2V5cywgcGsgPT4ge1xuICAgICAgICByW3BrXSA9IGNvbnN0YW50JDEoc3lzdGVtLmdldEJ5VWlkKHVpZHNbcGtdKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3QgZ2V0QWxsUGFydHMgPSAoY29tcG9uZW50LCBkZXRhaWwpID0+IHtcbiAgICAgIGNvbnN0IHN5c3RlbSA9IGNvbXBvbmVudC5nZXRTeXN0ZW0oKTtcbiAgICAgIHJldHVybiBtYXAkMShkZXRhaWwucGFydFVpZHMsIChwVWlkLCBfaykgPT4gY29uc3RhbnQkMShzeXN0ZW0uZ2V0QnlVaWQocFVpZCkpKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEFsbFBhcnROYW1lcyA9IGRldGFpbCA9PiBrZXlzKGRldGFpbC5wYXJ0VWlkcyk7XG4gICAgY29uc3QgZ2V0UGFydHNPckRpZSA9IChjb21wb25lbnQsIGRldGFpbCwgcGFydEtleXMpID0+IHtcbiAgICAgIGNvbnN0IHIgPSB7fTtcbiAgICAgIGNvbnN0IHVpZHMgPSBkZXRhaWwucGFydFVpZHM7XG4gICAgICBjb25zdCBzeXN0ZW0gPSBjb21wb25lbnQuZ2V0U3lzdGVtKCk7XG4gICAgICBlYWNoJDEocGFydEtleXMsIHBrID0+IHtcbiAgICAgICAgcltwa10gPSBjb25zdGFudCQxKHN5c3RlbS5nZXRCeVVpZCh1aWRzW3BrXSkuZ2V0T3JEaWUoKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3QgZGVmYXVsdFVpZHMgPSAoYmFzZVVpZCwgcGFydFR5cGVzKSA9PiB7XG4gICAgICBjb25zdCBwYXJ0TmFtZXMgPSBuYW1lcyhwYXJ0VHlwZXMpO1xuICAgICAgcmV0dXJuIHdyYXBBbGwobWFwJDIocGFydE5hbWVzLCBwbiA9PiAoe1xuICAgICAgICBrZXk6IHBuLFxuICAgICAgICB2YWx1ZTogYmFzZVVpZCArICctJyArIHBuXG4gICAgICB9KSkpO1xuICAgIH07XG4gICAgY29uc3QgZGVmYXVsdFVpZHNTY2hlbWEgPSBwYXJ0VHlwZXMgPT4gZmllbGQkMSgncGFydFVpZHMnLCAncGFydFVpZHMnLCBtZXJnZVdpdGhUaHVuayhzcGVjID0+IGRlZmF1bHRVaWRzKHNwZWMudWlkLCBwYXJ0VHlwZXMpKSwgYW55VmFsdWUoKSk7XG5cbiAgICB2YXIgQWxsb3lQYXJ0cyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBnZW5lcmF0ZTogZ2VuZXJhdGUkMyxcbiAgICAgICAgZ2VuZXJhdGVPbmU6IGdlbmVyYXRlT25lJDEsXG4gICAgICAgIHNjaGVtYXM6IHNjaGVtYXMsXG4gICAgICAgIG5hbWVzOiBuYW1lcyxcbiAgICAgICAgc3Vic3RpdHV0ZXM6IHN1YnN0aXR1dGVzLFxuICAgICAgICBjb21wb25lbnRzOiBjb21wb25lbnRzJDEsXG4gICAgICAgIGRlZmF1bHRVaWRzOiBkZWZhdWx0VWlkcyxcbiAgICAgICAgZGVmYXVsdFVpZHNTY2hlbWE6IGRlZmF1bHRVaWRzU2NoZW1hLFxuICAgICAgICBnZXRBbGxQYXJ0czogZ2V0QWxsUGFydHMsXG4gICAgICAgIGdldEFsbFBhcnROYW1lczogZ2V0QWxsUGFydE5hbWVzLFxuICAgICAgICBnZXRQYXJ0OiBnZXRQYXJ0LFxuICAgICAgICBnZXRQYXJ0T3JEaWU6IGdldFBhcnRPckRpZSxcbiAgICAgICAgZ2V0UGFydHM6IGdldFBhcnRzLFxuICAgICAgICBnZXRQYXJ0c09yRGllOiBnZXRQYXJ0c09yRGllXG4gICAgfSk7XG5cbiAgICBjb25zdCBiYXNlID0gKHBhcnRTY2hlbWFzLCBwYXJ0VWlkc1NjaGVtYXMpID0+IHtcbiAgICAgIGNvbnN0IHBzID0gcGFydFNjaGVtYXMubGVuZ3RoID4gMCA/IFtyZXF1aXJlZE9iak9mKCdwYXJ0cycsIHBhcnRTY2hlbWFzKV0gOiBbXTtcbiAgICAgIHJldHVybiBwcy5jb25jYXQoW1xuICAgICAgICByZXF1aXJlZCQxKCd1aWQnKSxcbiAgICAgICAgZGVmYXVsdGVkKCdkb20nLCB7fSksXG4gICAgICAgIGRlZmF1bHRlZCgnY29tcG9uZW50cycsIFtdKSxcbiAgICAgICAgc25hcHNob3QoJ29yaWdpbmFsU3BlYycpLFxuICAgICAgICBkZWZhdWx0ZWQoJ2RlYnVnLnNrZXRjaGVyJywge30pXG4gICAgICBdKS5jb25jYXQocGFydFVpZHNTY2hlbWFzKTtcbiAgICB9O1xuICAgIGNvbnN0IGFzUmF3T3JEaWUgPSAobGFiZWwsIHNjaGVtYSwgc3BlYywgcGFydFNjaGVtYXMsIHBhcnRVaWRzU2NoZW1hcykgPT4ge1xuICAgICAgY29uc3QgYmFzZVMgPSBiYXNlKHBhcnRTY2hlbWFzLCBwYXJ0VWlkc1NjaGVtYXMpO1xuICAgICAgcmV0dXJuIGFzUmF3T3JEaWUkMShsYWJlbCArICcgW1NwZWNTY2hlbWFdJywgb2JqT2ZPbmx5KGJhc2VTLmNvbmNhdChzY2hlbWEpKSwgc3BlYyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNpbmdsZSQxID0gKG93bmVyLCBzY2hlbWEsIGZhY3RvcnksIHNwZWMpID0+IHtcbiAgICAgIGNvbnN0IHNwZWNXaXRoVWlkID0gc3VwcGx5VWlkKHNwZWMpO1xuICAgICAgY29uc3QgZGV0YWlsID0gYXNSYXdPckRpZShvd25lciwgc2NoZW1hLCBzcGVjV2l0aFVpZCwgW10sIFtdKTtcbiAgICAgIHJldHVybiBmYWN0b3J5KGRldGFpbCwgc3BlY1dpdGhVaWQpO1xuICAgIH07XG4gICAgY29uc3QgY29tcG9zaXRlJDEgPSAob3duZXIsIHNjaGVtYSwgcGFydFR5cGVzLCBmYWN0b3J5LCBzcGVjKSA9PiB7XG4gICAgICBjb25zdCBzcGVjV2l0aFVpZCA9IHN1cHBseVVpZChzcGVjKTtcbiAgICAgIGNvbnN0IHBhcnRTY2hlbWFzID0gc2NoZW1hcyhwYXJ0VHlwZXMpO1xuICAgICAgY29uc3QgcGFydFVpZHNTY2hlbWEgPSBkZWZhdWx0VWlkc1NjaGVtYShwYXJ0VHlwZXMpO1xuICAgICAgY29uc3QgZGV0YWlsID0gYXNSYXdPckRpZShvd25lciwgc2NoZW1hLCBzcGVjV2l0aFVpZCwgcGFydFNjaGVtYXMsIFtwYXJ0VWlkc1NjaGVtYV0pO1xuICAgICAgY29uc3Qgc3VicyA9IHN1YnN0aXR1dGVzKG93bmVyLCBkZXRhaWwsIHBhcnRUeXBlcyk7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gY29tcG9uZW50cyQxKG93bmVyLCBkZXRhaWwsIHN1YnMuaW50ZXJuYWxzKCkpO1xuICAgICAgcmV0dXJuIGZhY3RvcnkoZGV0YWlsLCBjb21wb25lbnRzLCBzcGVjV2l0aFVpZCwgc3Vicy5leHRlcm5hbHMoKSk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNVaWQgPSBzcGVjID0+IGhhcyQyKHNwZWMsICd1aWQnKTtcbiAgICBjb25zdCBzdXBwbHlVaWQgPSBzcGVjID0+IHtcbiAgICAgIHJldHVybiBoYXNVaWQoc3BlYykgPyBzcGVjIDoge1xuICAgICAgICAuLi5zcGVjLFxuICAgICAgICB1aWQ6IGdlbmVyYXRlJDUoJ3VpZCcpXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBpc1NrZXRjaFNwZWMgPSBzcGVjID0+IHtcbiAgICAgIHJldHVybiBzcGVjLnVpZCAhPT0gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgY29uc3Qgc2luZ2xlU2NoZW1hID0gb2JqT2ZPbmx5KFtcbiAgICAgIHJlcXVpcmVkJDEoJ25hbWUnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ2ZhY3RvcnknKSxcbiAgICAgIHJlcXVpcmVkJDEoJ2NvbmZpZ0ZpZWxkcycpLFxuICAgICAgZGVmYXVsdGVkKCdhcGlzJywge30pLFxuICAgICAgZGVmYXVsdGVkKCdleHRyYUFwaXMnLCB7fSlcbiAgICBdKTtcbiAgICBjb25zdCBjb21wb3NpdGVTY2hlbWEgPSBvYmpPZk9ubHkoW1xuICAgICAgcmVxdWlyZWQkMSgnbmFtZScpLFxuICAgICAgcmVxdWlyZWQkMSgnZmFjdG9yeScpLFxuICAgICAgcmVxdWlyZWQkMSgnY29uZmlnRmllbGRzJyksXG4gICAgICByZXF1aXJlZCQxKCdwYXJ0RmllbGRzJyksXG4gICAgICBkZWZhdWx0ZWQoJ2FwaXMnLCB7fSksXG4gICAgICBkZWZhdWx0ZWQoJ2V4dHJhQXBpcycsIHt9KVxuICAgIF0pO1xuICAgIGNvbnN0IHNpbmdsZSA9IHJhd0NvbmZpZyA9PiB7XG4gICAgICBjb25zdCBjb25maWcgPSBhc1Jhd09yRGllJDEoJ1NrZXRjaGVyIGZvciAnICsgcmF3Q29uZmlnLm5hbWUsIHNpbmdsZVNjaGVtYSwgcmF3Q29uZmlnKTtcbiAgICAgIGNvbnN0IHNrZXRjaCA9IHNwZWMgPT4gc2luZ2xlJDEoY29uZmlnLm5hbWUsIGNvbmZpZy5jb25maWdGaWVsZHMsIGNvbmZpZy5mYWN0b3J5LCBzcGVjKTtcbiAgICAgIGNvbnN0IGFwaXMgPSBtYXAkMShjb25maWcuYXBpcywgbWFrZUFwaSk7XG4gICAgICBjb25zdCBleHRyYUFwaXMgPSBtYXAkMShjb25maWcuZXh0cmFBcGlzLCAoZiwgaykgPT4gbWFya0FzRXh0cmFBcGkoZiwgaykpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICAgIGNvbmZpZ0ZpZWxkczogY29uZmlnLmNvbmZpZ0ZpZWxkcyxcbiAgICAgICAgc2tldGNoLFxuICAgICAgICAuLi5hcGlzLFxuICAgICAgICAuLi5leHRyYUFwaXNcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjb21wb3NpdGUgPSByYXdDb25maWcgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gYXNSYXdPckRpZSQxKCdTa2V0Y2hlciBmb3IgJyArIHJhd0NvbmZpZy5uYW1lLCBjb21wb3NpdGVTY2hlbWEsIHJhd0NvbmZpZyk7XG4gICAgICBjb25zdCBza2V0Y2ggPSBzcGVjID0+IGNvbXBvc2l0ZSQxKGNvbmZpZy5uYW1lLCBjb25maWcuY29uZmlnRmllbGRzLCBjb25maWcucGFydEZpZWxkcywgY29uZmlnLmZhY3RvcnksIHNwZWMpO1xuICAgICAgY29uc3QgcGFydHMgPSBnZW5lcmF0ZSQzKGNvbmZpZy5uYW1lLCBjb25maWcucGFydEZpZWxkcyk7XG4gICAgICBjb25zdCBhcGlzID0gbWFwJDEoY29uZmlnLmFwaXMsIG1ha2VBcGkpO1xuICAgICAgY29uc3QgZXh0cmFBcGlzID0gbWFwJDEoY29uZmlnLmV4dHJhQXBpcywgKGYsIGspID0+IG1hcmtBc0V4dHJhQXBpKGYsIGspKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGNvbmZpZy5uYW1lLFxuICAgICAgICBwYXJ0RmllbGRzOiBjb25maWcucGFydEZpZWxkcyxcbiAgICAgICAgY29uZmlnRmllbGRzOiBjb25maWcuY29uZmlnRmllbGRzLFxuICAgICAgICBza2V0Y2gsXG4gICAgICAgIHBhcnRzLFxuICAgICAgICAuLi5hcGlzLFxuICAgICAgICAuLi5leHRyYUFwaXNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGluc2lkZSA9IHRhcmdldCA9PiBpc1RhZygnaW5wdXQnKSh0YXJnZXQpICYmIGdldCRmKHRhcmdldCwgJ3R5cGUnKSAhPT0gJ3JhZGlvJyB8fCBpc1RhZygndGV4dGFyZWEnKSh0YXJnZXQpO1xuXG4gICAgY29uc3QgZ2V0Q3VycmVudCA9IChjb21wb25lbnQsIGNvbXBvc2VDb25maWcsIF9jb21wb3NlU3RhdGUpID0+IGNvbXBvc2VDb25maWcuZmluZChjb21wb25lbnQpO1xuXG4gICAgdmFyIENvbXBvc2VBcGlzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIGdldEN1cnJlbnQ6IGdldEN1cnJlbnRcbiAgICB9KTtcblxuICAgIGNvbnN0IENvbXBvc2VTY2hlbWEgPSBbcmVxdWlyZWQkMSgnZmluZCcpXTtcblxuICAgIGNvbnN0IENvbXBvc2luZyA9IGNyZWF0ZSQ0KHtcbiAgICAgIGZpZWxkczogQ29tcG9zZVNjaGVtYSxcbiAgICAgIG5hbWU6ICdjb21wb3NpbmcnLFxuICAgICAgYXBpczogQ29tcG9zZUFwaXNcbiAgICB9KTtcblxuICAgIGNvbnN0IG5hdGl2ZURpc2FibGVkID0gW1xuICAgICAgJ2lucHV0JyxcbiAgICAgICdidXR0b24nLFxuICAgICAgJ3RleHRhcmVhJyxcbiAgICAgICdzZWxlY3QnXG4gICAgXTtcbiAgICBjb25zdCBvbkxvYWQkMSA9IChjb21wb25lbnQsIGRpc2FibGVDb25maWcsIGRpc2FibGVTdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgZiA9IGRpc2FibGVDb25maWcuZGlzYWJsZWQoKSA/IGRpc2FibGUgOiBlbmFibGU7XG4gICAgICBmKGNvbXBvbmVudCwgZGlzYWJsZUNvbmZpZyk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNOYXRpdmUgPSAoY29tcG9uZW50LCBjb25maWcpID0+IGNvbmZpZy51c2VOYXRpdmUgPT09IHRydWUgJiYgY29udGFpbnMkMihuYXRpdmVEaXNhYmxlZCwgbmFtZSQzKGNvbXBvbmVudC5lbGVtZW50KSk7XG4gICAgY29uc3QgbmF0aXZlSXNEaXNhYmxlZCA9IGNvbXBvbmVudCA9PiBoYXMkMShjb21wb25lbnQuZWxlbWVudCwgJ2Rpc2FibGVkJyk7XG4gICAgY29uc3QgbmF0aXZlRGlzYWJsZSA9IGNvbXBvbmVudCA9PiB7XG4gICAgICBzZXQkOShjb21wb25lbnQuZWxlbWVudCwgJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XG4gICAgfTtcbiAgICBjb25zdCBuYXRpdmVFbmFibGUgPSBjb21wb25lbnQgPT4ge1xuICAgICAgcmVtb3ZlJDcoY29tcG9uZW50LmVsZW1lbnQsICdkaXNhYmxlZCcpO1xuICAgIH07XG4gICAgY29uc3QgYXJpYUlzRGlzYWJsZWQgPSBjb21wb25lbnQgPT4gZ2V0JGYoY29tcG9uZW50LmVsZW1lbnQsICdhcmlhLWRpc2FibGVkJykgPT09ICd0cnVlJztcbiAgICBjb25zdCBhcmlhRGlzYWJsZSA9IGNvbXBvbmVudCA9PiB7XG4gICAgICBzZXQkOShjb21wb25lbnQuZWxlbWVudCwgJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xuICAgIH07XG4gICAgY29uc3QgYXJpYUVuYWJsZSA9IGNvbXBvbmVudCA9PiB7XG4gICAgICBzZXQkOShjb21wb25lbnQuZWxlbWVudCwgJ2FyaWEtZGlzYWJsZWQnLCAnZmFsc2UnKTtcbiAgICB9O1xuICAgIGNvbnN0IGRpc2FibGUgPSAoY29tcG9uZW50LCBkaXNhYmxlQ29uZmlnLCBfZGlzYWJsZVN0YXRlKSA9PiB7XG4gICAgICBkaXNhYmxlQ29uZmlnLmRpc2FibGVDbGFzcy5lYWNoKGRpc2FibGVDbGFzcyA9PiB7XG4gICAgICAgIGFkZCQyKGNvbXBvbmVudC5lbGVtZW50LCBkaXNhYmxlQ2xhc3MpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBmID0gaGFzTmF0aXZlKGNvbXBvbmVudCwgZGlzYWJsZUNvbmZpZykgPyBuYXRpdmVEaXNhYmxlIDogYXJpYURpc2FibGU7XG4gICAgICBmKGNvbXBvbmVudCk7XG4gICAgICBkaXNhYmxlQ29uZmlnLm9uRGlzYWJsZWQoY29tcG9uZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IGVuYWJsZSA9IChjb21wb25lbnQsIGRpc2FibGVDb25maWcsIF9kaXNhYmxlU3RhdGUpID0+IHtcbiAgICAgIGRpc2FibGVDb25maWcuZGlzYWJsZUNsYXNzLmVhY2goZGlzYWJsZUNsYXNzID0+IHtcbiAgICAgICAgcmVtb3ZlJDIoY29tcG9uZW50LmVsZW1lbnQsIGRpc2FibGVDbGFzcyk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGYgPSBoYXNOYXRpdmUoY29tcG9uZW50LCBkaXNhYmxlQ29uZmlnKSA/IG5hdGl2ZUVuYWJsZSA6IGFyaWFFbmFibGU7XG4gICAgICBmKGNvbXBvbmVudCk7XG4gICAgICBkaXNhYmxlQ29uZmlnLm9uRW5hYmxlZChjb21wb25lbnQpO1xuICAgIH07XG4gICAgY29uc3QgaXNEaXNhYmxlZCA9IChjb21wb25lbnQsIGRpc2FibGVDb25maWcpID0+IGhhc05hdGl2ZShjb21wb25lbnQsIGRpc2FibGVDb25maWcpID8gbmF0aXZlSXNEaXNhYmxlZChjb21wb25lbnQpIDogYXJpYUlzRGlzYWJsZWQoY29tcG9uZW50KTtcbiAgICBjb25zdCBzZXQkNCA9IChjb21wb25lbnQsIGRpc2FibGVDb25maWcsIGRpc2FibGVTdGF0ZSwgZGlzYWJsZWQpID0+IHtcbiAgICAgIGNvbnN0IGYgPSBkaXNhYmxlZCA/IGRpc2FibGUgOiBlbmFibGU7XG4gICAgICBmKGNvbXBvbmVudCwgZGlzYWJsZUNvbmZpZyk7XG4gICAgfTtcblxuICAgIHZhciBEaXNhYmxlQXBpcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBlbmFibGU6IGVuYWJsZSxcbiAgICAgICAgZGlzYWJsZTogZGlzYWJsZSxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgb25Mb2FkOiBvbkxvYWQkMSxcbiAgICAgICAgc2V0OiBzZXQkNFxuICAgIH0pO1xuXG4gICAgY29uc3QgZXhoaWJpdCQ1ID0gKGJhc2UsIGRpc2FibGVDb25maWcpID0+IG51JDcoeyBjbGFzc2VzOiBkaXNhYmxlQ29uZmlnLmRpc2FibGVkKCkgPyBkaXNhYmxlQ29uZmlnLmRpc2FibGVDbGFzcy50b0FycmF5KCkgOiBbXSB9KTtcbiAgICBjb25zdCBldmVudHMkZSA9IChkaXNhYmxlQ29uZmlnLCBkaXNhYmxlU3RhdGUpID0+IGRlcml2ZSQyKFtcbiAgICAgIGFib3J0KGV4ZWN1dGUkNSgpLCAoY29tcG9uZW50LCBfc2ltdWxhdGVkRXZlbnQpID0+IGlzRGlzYWJsZWQoY29tcG9uZW50LCBkaXNhYmxlQ29uZmlnKSksXG4gICAgICBsb2FkRXZlbnQoZGlzYWJsZUNvbmZpZywgZGlzYWJsZVN0YXRlLCBvbkxvYWQkMSlcbiAgICBdKTtcblxuICAgIHZhciBBY3RpdmVEaXNhYmxlID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIGV4aGliaXQ6IGV4aGliaXQkNSxcbiAgICAgICAgZXZlbnRzOiBldmVudHMkZVxuICAgIH0pO1xuXG4gICAgdmFyIERpc2FibGVTY2hlbWEgPSBbXG4gICAgICBkZWZhdWx0ZWRGdW5jdGlvbignZGlzYWJsZWQnLCBuZXZlciksXG4gICAgICBkZWZhdWx0ZWQoJ3VzZU5hdGl2ZScsIHRydWUpLFxuICAgICAgb3B0aW9uJDMoJ2Rpc2FibGVDbGFzcycpLFxuICAgICAgb25IYW5kbGVyKCdvbkRpc2FibGVkJyksXG4gICAgICBvbkhhbmRsZXIoJ29uRW5hYmxlZCcpXG4gICAgXTtcblxuICAgIGNvbnN0IERpc2FibGluZyA9IGNyZWF0ZSQ0KHtcbiAgICAgIGZpZWxkczogRGlzYWJsZVNjaGVtYSxcbiAgICAgIG5hbWU6ICdkaXNhYmxpbmcnLFxuICAgICAgYWN0aXZlOiBBY3RpdmVEaXNhYmxlLFxuICAgICAgYXBpczogRGlzYWJsZUFwaXNcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlaGlnaGxpZ2h0QWxsRXhjZXB0ID0gKGNvbXBvbmVudCwgaENvbmZpZywgaFN0YXRlLCBza2lwKSA9PiB7XG4gICAgICBjb25zdCBoaWdobGlnaHRlZCA9IGRlc2NlbmRhbnRzKGNvbXBvbmVudC5lbGVtZW50LCAnLicgKyBoQ29uZmlnLmhpZ2hsaWdodENsYXNzKTtcbiAgICAgIGVhY2gkMShoaWdobGlnaHRlZCwgaCA9PiB7XG4gICAgICAgIGNvbnN0IHNob3VsZFNraXAgPSBleGlzdHMoc2tpcCwgc2tpcENvbXAgPT4gZXEoc2tpcENvbXAuZWxlbWVudCwgaCkpO1xuICAgICAgICBpZiAoIXNob3VsZFNraXApIHtcbiAgICAgICAgICByZW1vdmUkMihoLCBoQ29uZmlnLmhpZ2hsaWdodENsYXNzKTtcbiAgICAgICAgICBjb21wb25lbnQuZ2V0U3lzdGVtKCkuZ2V0QnlEb20oaCkuZWFjaCh0YXJnZXQgPT4ge1xuICAgICAgICAgICAgaENvbmZpZy5vbkRlaGlnaGxpZ2h0KGNvbXBvbmVudCwgdGFyZ2V0KTtcbiAgICAgICAgICAgIGVtaXQodGFyZ2V0LCBkZWhpZ2hsaWdodCQxKCkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGRlaGlnaGxpZ2h0QWxsID0gKGNvbXBvbmVudCwgaENvbmZpZywgaFN0YXRlKSA9PiBkZWhpZ2hsaWdodEFsbEV4Y2VwdChjb21wb25lbnQsIGhDb25maWcsIGhTdGF0ZSwgW10pO1xuICAgIGNvbnN0IGRlaGlnaGxpZ2h0ID0gKGNvbXBvbmVudCwgaENvbmZpZywgaFN0YXRlLCB0YXJnZXQpID0+IHtcbiAgICAgIGlmIChpc0hpZ2hsaWdodGVkKGNvbXBvbmVudCwgaENvbmZpZywgaFN0YXRlLCB0YXJnZXQpKSB7XG4gICAgICAgIHJlbW92ZSQyKHRhcmdldC5lbGVtZW50LCBoQ29uZmlnLmhpZ2hsaWdodENsYXNzKTtcbiAgICAgICAgaENvbmZpZy5vbkRlaGlnaGxpZ2h0KGNvbXBvbmVudCwgdGFyZ2V0KTtcbiAgICAgICAgZW1pdCh0YXJnZXQsIGRlaGlnaGxpZ2h0JDEoKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoaWdobGlnaHQgPSAoY29tcG9uZW50LCBoQ29uZmlnLCBoU3RhdGUsIHRhcmdldCkgPT4ge1xuICAgICAgZGVoaWdobGlnaHRBbGxFeGNlcHQoY29tcG9uZW50LCBoQ29uZmlnLCBoU3RhdGUsIFt0YXJnZXRdKTtcbiAgICAgIGlmICghaXNIaWdobGlnaHRlZChjb21wb25lbnQsIGhDb25maWcsIGhTdGF0ZSwgdGFyZ2V0KSkge1xuICAgICAgICBhZGQkMih0YXJnZXQuZWxlbWVudCwgaENvbmZpZy5oaWdobGlnaHRDbGFzcyk7XG4gICAgICAgIGhDb25maWcub25IaWdobGlnaHQoY29tcG9uZW50LCB0YXJnZXQpO1xuICAgICAgICBlbWl0KHRhcmdldCwgaGlnaGxpZ2h0JDEoKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoaWdobGlnaHRGaXJzdCA9IChjb21wb25lbnQsIGhDb25maWcsIGhTdGF0ZSkgPT4ge1xuICAgICAgZ2V0Rmlyc3QoY29tcG9uZW50LCBoQ29uZmlnKS5lYWNoKGZpcnN0Q29tcCA9PiB7XG4gICAgICAgIGhpZ2hsaWdodChjb21wb25lbnQsIGhDb25maWcsIGhTdGF0ZSwgZmlyc3RDb21wKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaGlnaGxpZ2h0TGFzdCA9IChjb21wb25lbnQsIGhDb25maWcsIGhTdGF0ZSkgPT4ge1xuICAgICAgZ2V0TGFzdChjb21wb25lbnQsIGhDb25maWcpLmVhY2gobGFzdENvbXAgPT4ge1xuICAgICAgICBoaWdobGlnaHQoY29tcG9uZW50LCBoQ29uZmlnLCBoU3RhdGUsIGxhc3RDb21wKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaGlnaGxpZ2h0QXQgPSAoY29tcG9uZW50LCBoQ29uZmlnLCBoU3RhdGUsIGluZGV4KSA9PiB7XG4gICAgICBnZXRCeUluZGV4KGNvbXBvbmVudCwgaENvbmZpZywgaFN0YXRlLCBpbmRleCkuZm9sZChlcnIgPT4ge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9LCBmaXJzdENvbXAgPT4ge1xuICAgICAgICBoaWdobGlnaHQoY29tcG9uZW50LCBoQ29uZmlnLCBoU3RhdGUsIGZpcnN0Q29tcCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGhpZ2hsaWdodEJ5ID0gKGNvbXBvbmVudCwgaENvbmZpZywgaFN0YXRlLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzKGNvbXBvbmVudCwgaENvbmZpZyk7XG4gICAgICBjb25zdCB0YXJnZXRDb21wID0gZmluZCQ1KGNhbmRpZGF0ZXMsIHByZWRpY2F0ZSk7XG4gICAgICB0YXJnZXRDb21wLmVhY2goYyA9PiB7XG4gICAgICAgIGhpZ2hsaWdodChjb21wb25lbnQsIGhDb25maWcsIGhTdGF0ZSwgYyk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzSGlnaGxpZ2h0ZWQgPSAoY29tcG9uZW50LCBoQ29uZmlnLCBoU3RhdGUsIHF1ZXJ5VGFyZ2V0KSA9PiBoYXMocXVlcnlUYXJnZXQuZWxlbWVudCwgaENvbmZpZy5oaWdobGlnaHRDbGFzcyk7XG4gICAgY29uc3QgZ2V0SGlnaGxpZ2h0ZWQgPSAoY29tcG9uZW50LCBoQ29uZmlnLCBfaFN0YXRlKSA9PiBkZXNjZW5kYW50KGNvbXBvbmVudC5lbGVtZW50LCAnLicgKyBoQ29uZmlnLmhpZ2hsaWdodENsYXNzKS5iaW5kKGUgPT4gY29tcG9uZW50LmdldFN5c3RlbSgpLmdldEJ5RG9tKGUpLnRvT3B0aW9uYWwoKSk7XG4gICAgY29uc3QgZ2V0QnlJbmRleCA9IChjb21wb25lbnQsIGhDb25maWcsIGhTdGF0ZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gZGVzY2VuZGFudHMoY29tcG9uZW50LmVsZW1lbnQsICcuJyArIGhDb25maWcuaXRlbUNsYXNzKTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKGl0ZW1zW2luZGV4XSkuZm9sZCgoKSA9PiBSZXN1bHQuZXJyb3IobmV3IEVycm9yKCdObyBlbGVtZW50IGZvdW5kIHdpdGggaW5kZXggJyArIGluZGV4KSksIGNvbXBvbmVudC5nZXRTeXN0ZW0oKS5nZXRCeURvbSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRGaXJzdCA9IChjb21wb25lbnQsIGhDb25maWcsIF9oU3RhdGUpID0+IGRlc2NlbmRhbnQoY29tcG9uZW50LmVsZW1lbnQsICcuJyArIGhDb25maWcuaXRlbUNsYXNzKS5iaW5kKGUgPT4gY29tcG9uZW50LmdldFN5c3RlbSgpLmdldEJ5RG9tKGUpLnRvT3B0aW9uYWwoKSk7XG4gICAgY29uc3QgZ2V0TGFzdCA9IChjb21wb25lbnQsIGhDb25maWcsIF9oU3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gZGVzY2VuZGFudHMoY29tcG9uZW50LmVsZW1lbnQsICcuJyArIGhDb25maWcuaXRlbUNsYXNzKTtcbiAgICAgIGNvbnN0IGxhc3QgPSBpdGVtcy5sZW5ndGggPiAwID8gT3B0aW9uYWwuc29tZShpdGVtc1tpdGVtcy5sZW5ndGggLSAxXSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICByZXR1cm4gbGFzdC5iaW5kKGMgPT4gY29tcG9uZW50LmdldFN5c3RlbSgpLmdldEJ5RG9tKGMpLnRvT3B0aW9uYWwoKSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXREZWx0YSQyID0gKGNvbXBvbmVudCwgaENvbmZpZywgaFN0YXRlLCBkZWx0YSkgPT4ge1xuICAgICAgY29uc3QgaXRlbXMgPSBkZXNjZW5kYW50cyhjb21wb25lbnQuZWxlbWVudCwgJy4nICsgaENvbmZpZy5pdGVtQ2xhc3MpO1xuICAgICAgY29uc3QgY3VycmVudCA9IGZpbmRJbmRleCQxKGl0ZW1zLCBpdGVtID0+IGhhcyhpdGVtLCBoQ29uZmlnLmhpZ2hsaWdodENsYXNzKSk7XG4gICAgICByZXR1cm4gY3VycmVudC5iaW5kKHNlbGVjdGVkID0+IHtcbiAgICAgICAgY29uc3QgZGVzdCA9IGN5Y2xlQnkoc2VsZWN0ZWQsIGRlbHRhLCAwLCBpdGVtcy5sZW5ndGggLSAxKTtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5nZXRTeXN0ZW0oKS5nZXRCeURvbShpdGVtc1tkZXN0XSkudG9PcHRpb25hbCgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRQcmV2aW91cyA9IChjb21wb25lbnQsIGhDb25maWcsIGhTdGF0ZSkgPT4gZ2V0RGVsdGEkMihjb21wb25lbnQsIGhDb25maWcsIGhTdGF0ZSwgLTEpO1xuICAgIGNvbnN0IGdldE5leHQgPSAoY29tcG9uZW50LCBoQ29uZmlnLCBoU3RhdGUpID0+IGdldERlbHRhJDIoY29tcG9uZW50LCBoQ29uZmlnLCBoU3RhdGUsICsxKTtcbiAgICBjb25zdCBnZXRDYW5kaWRhdGVzID0gKGNvbXBvbmVudCwgaENvbmZpZywgX2hTdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgaXRlbXMgPSBkZXNjZW5kYW50cyhjb21wb25lbnQuZWxlbWVudCwgJy4nICsgaENvbmZpZy5pdGVtQ2xhc3MpO1xuICAgICAgcmV0dXJuIGNhdChtYXAkMihpdGVtcywgaSA9PiBjb21wb25lbnQuZ2V0U3lzdGVtKCkuZ2V0QnlEb20oaSkudG9PcHRpb25hbCgpKSk7XG4gICAgfTtcblxuICAgIHZhciBIaWdobGlnaHRBcGlzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIGRlaGlnaGxpZ2h0QWxsOiBkZWhpZ2hsaWdodEFsbCxcbiAgICAgICAgZGVoaWdobGlnaHQ6IGRlaGlnaGxpZ2h0LFxuICAgICAgICBoaWdobGlnaHQ6IGhpZ2hsaWdodCxcbiAgICAgICAgaGlnaGxpZ2h0Rmlyc3Q6IGhpZ2hsaWdodEZpcnN0LFxuICAgICAgICBoaWdobGlnaHRMYXN0OiBoaWdobGlnaHRMYXN0LFxuICAgICAgICBoaWdobGlnaHRBdDogaGlnaGxpZ2h0QXQsXG4gICAgICAgIGhpZ2hsaWdodEJ5OiBoaWdobGlnaHRCeSxcbiAgICAgICAgaXNIaWdobGlnaHRlZDogaXNIaWdobGlnaHRlZCxcbiAgICAgICAgZ2V0SGlnaGxpZ2h0ZWQ6IGdldEhpZ2hsaWdodGVkLFxuICAgICAgICBnZXRGaXJzdDogZ2V0Rmlyc3QsXG4gICAgICAgIGdldExhc3Q6IGdldExhc3QsXG4gICAgICAgIGdldFByZXZpb3VzOiBnZXRQcmV2aW91cyxcbiAgICAgICAgZ2V0TmV4dDogZ2V0TmV4dCxcbiAgICAgICAgZ2V0Q2FuZGlkYXRlczogZ2V0Q2FuZGlkYXRlc1xuICAgIH0pO1xuXG4gICAgdmFyIEhpZ2hsaWdodFNjaGVtYSA9IFtcbiAgICAgIHJlcXVpcmVkJDEoJ2hpZ2hsaWdodENsYXNzJyksXG4gICAgICByZXF1aXJlZCQxKCdpdGVtQ2xhc3MnKSxcbiAgICAgIG9uSGFuZGxlcignb25IaWdobGlnaHQnKSxcbiAgICAgIG9uSGFuZGxlcignb25EZWhpZ2hsaWdodCcpXG4gICAgXTtcblxuICAgIGNvbnN0IEhpZ2hsaWdodGluZyA9IGNyZWF0ZSQ0KHtcbiAgICAgIGZpZWxkczogSGlnaGxpZ2h0U2NoZW1hLFxuICAgICAgbmFtZTogJ2hpZ2hsaWdodGluZycsXG4gICAgICBhcGlzOiBIaWdobGlnaHRBcGlzXG4gICAgfSk7XG5cbiAgICBjb25zdCBCQUNLU1BBQ0UgPSBbOF07XG4gICAgY29uc3QgVEFCID0gWzldO1xuICAgIGNvbnN0IEVOVEVSID0gWzEzXTtcbiAgICBjb25zdCBFU0NBUEUgPSBbMjddO1xuICAgIGNvbnN0IFNQQUNFID0gWzMyXTtcbiAgICBjb25zdCBMRUZUID0gWzM3XTtcbiAgICBjb25zdCBVUCA9IFszOF07XG4gICAgY29uc3QgUklHSFQgPSBbMzldO1xuICAgIGNvbnN0IERPV04gPSBbNDBdO1xuXG4gICAgY29uc3QgY3ljbGVQcmV2ID0gKHZhbHVlcywgaW5kZXgsIHByZWRpY2F0ZSkgPT4ge1xuICAgICAgY29uc3QgYmVmb3JlID0gcmV2ZXJzZSh2YWx1ZXMuc2xpY2UoMCwgaW5kZXgpKTtcbiAgICAgIGNvbnN0IGFmdGVyID0gcmV2ZXJzZSh2YWx1ZXMuc2xpY2UoaW5kZXggKyAxKSk7XG4gICAgICByZXR1cm4gZmluZCQ1KGJlZm9yZS5jb25jYXQoYWZ0ZXIpLCBwcmVkaWNhdGUpO1xuICAgIH07XG4gICAgY29uc3QgdHJ5UHJldiA9ICh2YWx1ZXMsIGluZGV4LCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGNvbnN0IGJlZm9yZSA9IHJldmVyc2UodmFsdWVzLnNsaWNlKDAsIGluZGV4KSk7XG4gICAgICByZXR1cm4gZmluZCQ1KGJlZm9yZSwgcHJlZGljYXRlKTtcbiAgICB9O1xuICAgIGNvbnN0IGN5Y2xlTmV4dCA9ICh2YWx1ZXMsIGluZGV4LCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGNvbnN0IGJlZm9yZSA9IHZhbHVlcy5zbGljZSgwLCBpbmRleCk7XG4gICAgICBjb25zdCBhZnRlciA9IHZhbHVlcy5zbGljZShpbmRleCArIDEpO1xuICAgICAgcmV0dXJuIGZpbmQkNShhZnRlci5jb25jYXQoYmVmb3JlKSwgcHJlZGljYXRlKTtcbiAgICB9O1xuICAgIGNvbnN0IHRyeU5leHQgPSAodmFsdWVzLCBpbmRleCwgcHJlZGljYXRlKSA9PiB7XG4gICAgICBjb25zdCBhZnRlciA9IHZhbHVlcy5zbGljZShpbmRleCArIDEpO1xuICAgICAgcmV0dXJuIGZpbmQkNShhZnRlciwgcHJlZGljYXRlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaW5TZXQgPSBrZXlzID0+IGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHJhdyA9IGV2ZW50LnJhdztcbiAgICAgIHJldHVybiBjb250YWlucyQyKGtleXMsIHJhdy53aGljaCk7XG4gICAgfTtcbiAgICBjb25zdCBhbmQgPSBwcmVkcyA9PiBldmVudCA9PiBmb3JhbGwocHJlZHMsIHByZWQgPT4gcHJlZChldmVudCkpO1xuICAgIGNvbnN0IGlzU2hpZnQgPSBldmVudCA9PiB7XG4gICAgICBjb25zdCByYXcgPSBldmVudC5yYXc7XG4gICAgICByZXR1cm4gcmF3LnNoaWZ0S2V5ID09PSB0cnVlO1xuICAgIH07XG4gICAgY29uc3QgaXNDb250cm9sID0gZXZlbnQgPT4ge1xuICAgICAgY29uc3QgcmF3ID0gZXZlbnQucmF3O1xuICAgICAgcmV0dXJuIHJhdy5jdHJsS2V5ID09PSB0cnVlO1xuICAgIH07XG4gICAgY29uc3QgaXNOb3RTaGlmdCA9IG5vdChpc1NoaWZ0KTtcblxuICAgIGNvbnN0IHJ1bGUgPSAobWF0Y2hlcywgYWN0aW9uKSA9PiAoe1xuICAgICAgbWF0Y2hlcyxcbiAgICAgIGNsYXNzaWZpY2F0aW9uOiBhY3Rpb25cbiAgICB9KTtcbiAgICBjb25zdCBjaG9vc2UgPSAodHJhbnNpdGlvbnMsIGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uID0gZmluZCQ1KHRyYW5zaXRpb25zLCB0ID0+IHQubWF0Y2hlcyhldmVudCkpO1xuICAgICAgcmV0dXJuIHRyYW5zaXRpb24ubWFwKHQgPT4gdC5jbGFzc2lmaWNhdGlvbik7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlcG9ydEZvY3VzU2hpZnRpbmcgPSAoY29tcG9uZW50LCBwcmV2Rm9jdXMsIG5ld0ZvY3VzKSA9PiB7XG4gICAgICBjb25zdCBub0NoYW5nZSA9IHByZXZGb2N1cy5leGlzdHMocCA9PiBuZXdGb2N1cy5leGlzdHMobiA9PiBlcShuLCBwKSkpO1xuICAgICAgaWYgKCFub0NoYW5nZSkge1xuICAgICAgICBlbWl0V2l0aChjb21wb25lbnQsIGZvY3VzU2hpZnRlZCgpLCB7XG4gICAgICAgICAgcHJldkZvY3VzLFxuICAgICAgICAgIG5ld0ZvY3VzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZG9tJDIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBnZXQgPSBjb21wb25lbnQgPT4gc2VhcmNoKGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgIGNvbnN0IHNldCA9IChjb21wb25lbnQsIGZvY3VzZWUpID0+IHtcbiAgICAgICAgY29uc3QgcHJldkZvY3VzID0gZ2V0KGNvbXBvbmVudCk7XG4gICAgICAgIGNvbXBvbmVudC5nZXRTeXN0ZW0oKS50cmlnZ2VyRm9jdXMoZm9jdXNlZSwgY29tcG9uZW50LmVsZW1lbnQpO1xuICAgICAgICBjb25zdCBuZXdGb2N1cyA9IGdldChjb21wb25lbnQpO1xuICAgICAgICByZXBvcnRGb2N1c1NoaWZ0aW5nKGNvbXBvbmVudCwgcHJldkZvY3VzLCBuZXdGb2N1cyk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0LFxuICAgICAgICBzZXRcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBoaWdobGlnaHRzID0gKCkgPT4ge1xuICAgICAgY29uc3QgZ2V0ID0gY29tcG9uZW50ID0+IEhpZ2hsaWdodGluZy5nZXRIaWdobGlnaHRlZChjb21wb25lbnQpLm1hcChpdGVtID0+IGl0ZW0uZWxlbWVudCk7XG4gICAgICBjb25zdCBzZXQgPSAoY29tcG9uZW50LCBlbGVtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHByZXZGb2N1cyA9IGdldChjb21wb25lbnQpO1xuICAgICAgICBjb21wb25lbnQuZ2V0U3lzdGVtKCkuZ2V0QnlEb20oZWxlbWVudCkuZm9sZChub29wLCBpdGVtID0+IHtcbiAgICAgICAgICBIaWdobGlnaHRpbmcuaGlnaGxpZ2h0KGNvbXBvbmVudCwgaXRlbSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBuZXdGb2N1cyA9IGdldChjb21wb25lbnQpO1xuICAgICAgICByZXBvcnRGb2N1c1NoaWZ0aW5nKGNvbXBvbmVudCwgcHJldkZvY3VzLCBuZXdGb2N1cyk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0LFxuICAgICAgICBzZXRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBGb2N1c0luc2lkZU1vZGVzO1xuICAgIChmdW5jdGlvbiAoRm9jdXNJbnNpZGVNb2Rlcykge1xuICAgICAgRm9jdXNJbnNpZGVNb2Rlc1snT25Gb2N1c01vZGUnXSA9ICdvbkZvY3VzJztcbiAgICAgIEZvY3VzSW5zaWRlTW9kZXNbJ09uRW50ZXJPclNwYWNlTW9kZSddID0gJ29uRW50ZXJPclNwYWNlJztcbiAgICAgIEZvY3VzSW5zaWRlTW9kZXNbJ09uQXBpTW9kZSddID0gJ29uQXBpJztcbiAgICB9KEZvY3VzSW5zaWRlTW9kZXMgfHwgKEZvY3VzSW5zaWRlTW9kZXMgPSB7fSkpKTtcblxuICAgIGNvbnN0IHR5cGljYWwgPSAoaW5mb1NjaGVtYSwgc3RhdGVJbml0LCBnZXRLZXlkb3duUnVsZXMsIGdldEtleXVwUnVsZXMsIG9wdEZvY3VzSW4pID0+IHtcbiAgICAgIGNvbnN0IHNjaGVtYSA9ICgpID0+IGluZm9TY2hlbWEuY29uY2F0KFtcbiAgICAgICAgZGVmYXVsdGVkKCdmb2N1c01hbmFnZXInLCBkb20kMigpKSxcbiAgICAgICAgZGVmYXVsdGVkT2YoJ2ZvY3VzSW5zaWRlJywgJ29uRm9jdXMnLCB2YWx1ZU9mKHZhbCA9PiBjb250YWlucyQyKFtcbiAgICAgICAgICAnb25Gb2N1cycsXG4gICAgICAgICAgJ29uRW50ZXJPclNwYWNlJyxcbiAgICAgICAgICAnb25BcGknXG4gICAgICAgIF0sIHZhbCkgPyBSZXN1bHQudmFsdWUodmFsKSA6IFJlc3VsdC5lcnJvcignSW52YWxpZCB2YWx1ZSBmb3IgZm9jdXNJbnNpZGUnKSkpLFxuICAgICAgICBvdXRwdXQkMSgnaGFuZGxlcicsIG1lKSxcbiAgICAgICAgb3V0cHV0JDEoJ3N0YXRlJywgc3RhdGVJbml0KSxcbiAgICAgICAgb3V0cHV0JDEoJ3NlbmRGb2N1c0luJywgb3B0Rm9jdXNJbilcbiAgICAgIF0pO1xuICAgICAgY29uc3QgcHJvY2Vzc0tleSA9IChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50LCBnZXRSdWxlcywga2V5aW5nQ29uZmlnLCBrZXlpbmdTdGF0ZSkgPT4ge1xuICAgICAgICBjb25zdCBydWxlcyA9IGdldFJ1bGVzKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIGtleWluZ0NvbmZpZywga2V5aW5nU3RhdGUpO1xuICAgICAgICByZXR1cm4gY2hvb3NlKHJ1bGVzLCBzaW11bGF0ZWRFdmVudC5ldmVudCkuYmluZChydWxlID0+IHJ1bGUoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwga2V5aW5nQ29uZmlnLCBrZXlpbmdTdGF0ZSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHRvRXZlbnRzID0gKGtleWluZ0NvbmZpZywga2V5aW5nU3RhdGUpID0+IHtcbiAgICAgICAgY29uc3Qgb25Gb2N1c0hhbmRsZXIgPSBrZXlpbmdDb25maWcuZm9jdXNJbnNpZGUgIT09IEZvY3VzSW5zaWRlTW9kZXMuT25Gb2N1c01vZGUgPyBPcHRpb25hbC5ub25lKCkgOiBvcHRGb2N1c0luKGtleWluZ0NvbmZpZykubWFwKGZvY3VzSW4gPT4gcnVuJDEoZm9jdXMkNCgpLCAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgIGZvY3VzSW4oY29tcG9uZW50LCBrZXlpbmdDb25maWcsIGtleWluZ1N0YXRlKTtcbiAgICAgICAgICBzaW11bGF0ZWRFdmVudC5zdG9wKCk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgY29uc3QgdHJ5R29JbnNpZGVDb21wb25lbnQgPSAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzRW50ZXJPclNwYWNlID0gaW5TZXQoU1BBQ0UuY29uY2F0KEVOVEVSKSkoc2ltdWxhdGVkRXZlbnQuZXZlbnQpO1xuICAgICAgICAgIGlmIChrZXlpbmdDb25maWcuZm9jdXNJbnNpZGUgPT09IEZvY3VzSW5zaWRlTW9kZXMuT25FbnRlck9yU3BhY2VNb2RlICYmIGlzRW50ZXJPclNwYWNlICYmIGlzU291cmNlKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpKSB7XG4gICAgICAgICAgICBvcHRGb2N1c0luKGtleWluZ0NvbmZpZykuZWFjaChmb2N1c0luID0+IHtcbiAgICAgICAgICAgICAgZm9jdXNJbihjb21wb25lbnQsIGtleWluZ0NvbmZpZywga2V5aW5nU3RhdGUpO1xuICAgICAgICAgICAgICBzaW11bGF0ZWRFdmVudC5zdG9wKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGtleWJvYXJkRXZlbnRzID0gW1xuICAgICAgICAgIHJ1biQxKGtleWRvd24oKSwgKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHByb2Nlc3NLZXkoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgZ2V0S2V5ZG93blJ1bGVzLCBrZXlpbmdDb25maWcsIGtleWluZ1N0YXRlKS5mb2xkKCgpID0+IHtcbiAgICAgICAgICAgICAgdHJ5R29JbnNpZGVDb21wb25lbnQoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCk7XG4gICAgICAgICAgICB9LCBfID0+IHtcbiAgICAgICAgICAgICAgc2ltdWxhdGVkRXZlbnQuc3RvcCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVuJDEoa2V5dXAoKSwgKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHByb2Nlc3NLZXkoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgZ2V0S2V5dXBSdWxlcywga2V5aW5nQ29uZmlnLCBrZXlpbmdTdGF0ZSkuZWFjaChfID0+IHtcbiAgICAgICAgICAgICAgc2ltdWxhdGVkRXZlbnQuc3RvcCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIGRlcml2ZSQyKG9uRm9jdXNIYW5kbGVyLnRvQXJyYXkoKS5jb25jYXQoa2V5Ym9hcmRFdmVudHMpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBtZSA9IHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBwcm9jZXNzS2V5LFxuICAgICAgICB0b0V2ZW50c1xuICAgICAgfTtcbiAgICAgIHJldHVybiBtZTtcbiAgICB9O1xuXG4gICAgY29uc3QgY3JlYXRlJDIgPSBjeWNsaWNGaWVsZCA9PiB7XG4gICAgICBjb25zdCBzY2hlbWEgPSBbXG4gICAgICAgIG9wdGlvbiQzKCdvbkVzY2FwZScpLFxuICAgICAgICBvcHRpb24kMygnb25FbnRlcicpLFxuICAgICAgICBkZWZhdWx0ZWQoJ3NlbGVjdG9yJywgJ1tkYXRhLWFsbG95LXRhYnN0b3A9XCJ0cnVlXCJdOm5vdCg6ZGlzYWJsZWQpJyksXG4gICAgICAgIGRlZmF1bHRlZCgnZmlyc3RUYWJzdG9wJywgMCksXG4gICAgICAgIGRlZmF1bHRlZCgndXNlVGFic3RvcEF0JywgYWx3YXlzKSxcbiAgICAgICAgb3B0aW9uJDMoJ3Zpc2liaWxpdHlTZWxlY3RvcicpXG4gICAgICBdLmNvbmNhdChbY3ljbGljRmllbGRdKTtcbiAgICAgIGNvbnN0IGlzVmlzaWJsZSA9ICh0YWJiaW5nQ29uZmlnLCBlbGVtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRhYmJpbmdDb25maWcudmlzaWJpbGl0eVNlbGVjdG9yLmJpbmQoc2VsID0+IGNsb3Nlc3QkMShlbGVtZW50LCBzZWwpKS5nZXRPcihlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGdldCRkKHRhcmdldCkgPiAwO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZpbmRJbml0aWFsID0gKGNvbXBvbmVudCwgdGFiYmluZ0NvbmZpZykgPT4ge1xuICAgICAgICBjb25zdCB0YWJzdG9wcyA9IGRlc2NlbmRhbnRzKGNvbXBvbmVudC5lbGVtZW50LCB0YWJiaW5nQ29uZmlnLnNlbGVjdG9yKTtcbiAgICAgICAgY29uc3QgdmlzaWJsZXMgPSBmaWx0ZXIkMih0YWJzdG9wcywgZWxlbSA9PiBpc1Zpc2libGUodGFiYmluZ0NvbmZpZywgZWxlbSkpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbSh2aXNpYmxlc1t0YWJiaW5nQ29uZmlnLmZpcnN0VGFic3RvcF0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZpbmRDdXJyZW50ID0gKGNvbXBvbmVudCwgdGFiYmluZ0NvbmZpZykgPT4gdGFiYmluZ0NvbmZpZy5mb2N1c01hbmFnZXIuZ2V0KGNvbXBvbmVudCkuYmluZChlbGVtID0+IGNsb3Nlc3QkMShlbGVtLCB0YWJiaW5nQ29uZmlnLnNlbGVjdG9yKSk7XG4gICAgICBjb25zdCBpc1RhYnN0b3AgPSAodGFiYmluZ0NvbmZpZywgZWxlbWVudCkgPT4gaXNWaXNpYmxlKHRhYmJpbmdDb25maWcsIGVsZW1lbnQpICYmIHRhYmJpbmdDb25maWcudXNlVGFic3RvcEF0KGVsZW1lbnQpO1xuICAgICAgY29uc3QgZm9jdXNJbiA9IChjb21wb25lbnQsIHRhYmJpbmdDb25maWcsIF90YWJiaW5nU3RhdGUpID0+IHtcbiAgICAgICAgZmluZEluaXRpYWwoY29tcG9uZW50LCB0YWJiaW5nQ29uZmlnKS5lYWNoKHRhcmdldCA9PiB7XG4gICAgICAgICAgdGFiYmluZ0NvbmZpZy5mb2N1c01hbmFnZXIuc2V0KGNvbXBvbmVudCwgdGFyZ2V0KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ29Gcm9tVGFic3RvcCA9IChjb21wb25lbnQsIHRhYnN0b3BzLCBzdG9wSW5kZXgsIHRhYmJpbmdDb25maWcsIGN5Y2xlKSA9PiBjeWNsZSh0YWJzdG9wcywgc3RvcEluZGV4LCBlbGVtID0+IGlzVGFic3RvcCh0YWJiaW5nQ29uZmlnLCBlbGVtKSkuZm9sZCgoKSA9PiB0YWJiaW5nQ29uZmlnLmN5Y2xpYyA/IE9wdGlvbmFsLnNvbWUodHJ1ZSkgOiBPcHRpb25hbC5ub25lKCksIHRhcmdldCA9PiB7XG4gICAgICAgIHRhYmJpbmdDb25maWcuZm9jdXNNYW5hZ2VyLnNldChjb21wb25lbnQsIHRhcmdldCk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHRydWUpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBnbyA9IChjb21wb25lbnQsIF9zaW11bGF0ZWRFdmVudCwgdGFiYmluZ0NvbmZpZywgY3ljbGUpID0+IHtcbiAgICAgICAgY29uc3QgdGFic3RvcHMgPSBkZXNjZW5kYW50cyhjb21wb25lbnQuZWxlbWVudCwgdGFiYmluZ0NvbmZpZy5zZWxlY3Rvcik7XG4gICAgICAgIHJldHVybiBmaW5kQ3VycmVudChjb21wb25lbnQsIHRhYmJpbmdDb25maWcpLmJpbmQodGFic3RvcCA9PiB7XG4gICAgICAgICAgY29uc3Qgb3B0U3RvcEluZGV4ID0gZmluZEluZGV4JDEodGFic3RvcHMsIGN1cnJ5KGVxLCB0YWJzdG9wKSk7XG4gICAgICAgICAgcmV0dXJuIG9wdFN0b3BJbmRleC5iaW5kKHN0b3BJbmRleCA9PiBnb0Zyb21UYWJzdG9wKGNvbXBvbmVudCwgdGFic3RvcHMsIHN0b3BJbmRleCwgdGFiYmluZ0NvbmZpZywgY3ljbGUpKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ29CYWNrd2FyZHMgPSAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgdGFiYmluZ0NvbmZpZykgPT4ge1xuICAgICAgICBjb25zdCBuYXZpZ2F0ZSA9IHRhYmJpbmdDb25maWcuY3ljbGljID8gY3ljbGVQcmV2IDogdHJ5UHJldjtcbiAgICAgICAgcmV0dXJuIGdvKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIHRhYmJpbmdDb25maWcsIG5hdmlnYXRlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnb0ZvcndhcmRzID0gKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIHRhYmJpbmdDb25maWcpID0+IHtcbiAgICAgICAgY29uc3QgbmF2aWdhdGUgPSB0YWJiaW5nQ29uZmlnLmN5Y2xpYyA/IGN5Y2xlTmV4dCA6IHRyeU5leHQ7XG4gICAgICAgIHJldHVybiBnbyhjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50LCB0YWJiaW5nQ29uZmlnLCBuYXZpZ2F0ZSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNGaXJzdENoaWxkID0gZWxlbSA9PiBwYXJlbnROb2RlKGVsZW0pLmJpbmQoZmlyc3RDaGlsZCkuZXhpc3RzKGNoaWxkID0+IGVxKGNoaWxkLCBlbGVtKSk7XG4gICAgICBjb25zdCBnb0Zyb21Qc2V1ZG9UYWJzdG9wID0gKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIHRhYmJpbmdDb25maWcpID0+IGZpbmRDdXJyZW50KGNvbXBvbmVudCwgdGFiYmluZ0NvbmZpZykuZmlsdGVyKGVsZW0gPT4gIXRhYmJpbmdDb25maWcudXNlVGFic3RvcEF0KGVsZW0pKS5iaW5kKGVsZW0gPT4gKGlzRmlyc3RDaGlsZChlbGVtKSA/IGdvQmFja3dhcmRzIDogZ29Gb3J3YXJkcykoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgdGFiYmluZ0NvbmZpZykpO1xuICAgICAgY29uc3QgZXhlY3V0ZSA9IChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50LCB0YWJiaW5nQ29uZmlnKSA9PiB0YWJiaW5nQ29uZmlnLm9uRW50ZXIuYmluZChmID0+IGYoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCkpO1xuICAgICAgY29uc3QgZXhpdCA9IChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50LCB0YWJiaW5nQ29uZmlnKSA9PiB0YWJiaW5nQ29uZmlnLm9uRXNjYXBlLmJpbmQoZiA9PiBmKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpKTtcbiAgICAgIGNvbnN0IGdldEtleWRvd25SdWxlcyA9IGNvbnN0YW50JDEoW1xuICAgICAgICBydWxlKGFuZChbXG4gICAgICAgICAgaXNTaGlmdCxcbiAgICAgICAgICBpblNldChUQUIpXG4gICAgICAgIF0pLCBnb0JhY2t3YXJkcyksXG4gICAgICAgIHJ1bGUoaW5TZXQoVEFCKSwgZ29Gb3J3YXJkcyksXG4gICAgICAgIHJ1bGUoYW5kKFtcbiAgICAgICAgICBpc05vdFNoaWZ0LFxuICAgICAgICAgIGluU2V0KEVOVEVSKVxuICAgICAgICBdKSwgZXhlY3V0ZSlcbiAgICAgIF0pO1xuICAgICAgY29uc3QgZ2V0S2V5dXBSdWxlcyA9IGNvbnN0YW50JDEoW1xuICAgICAgICBydWxlKGluU2V0KEVTQ0FQRSksIGV4aXQpLFxuICAgICAgICBydWxlKGluU2V0KFRBQiksIGdvRnJvbVBzZXVkb1RhYnN0b3ApXG4gICAgICBdKTtcbiAgICAgIHJldHVybiB0eXBpY2FsKHNjaGVtYSwgTm9TdGF0ZS5pbml0LCBnZXRLZXlkb3duUnVsZXMsIGdldEtleXVwUnVsZXMsICgpID0+IE9wdGlvbmFsLnNvbWUoZm9jdXNJbikpO1xuICAgIH07XG5cbiAgICB2YXIgQWN5Y2xpY1R5cGUgPSBjcmVhdGUkMihjdXN0b21GaWVsZCgnY3ljbGljJywgbmV2ZXIpKTtcblxuICAgIHZhciBDeWNsaWNUeXBlID0gY3JlYXRlJDIoY3VzdG9tRmllbGQoJ2N5Y2xpYycsIGFsd2F5cykpO1xuXG4gICAgY29uc3QgZG9EZWZhdWx0RXhlY3V0ZSA9IChjb21wb25lbnQsIF9zaW11bGF0ZWRFdmVudCwgZm9jdXNlZCkgPT4ge1xuICAgICAgZGlzcGF0Y2goY29tcG9uZW50LCBmb2N1c2VkLCBleGVjdXRlJDUoKSk7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICB9O1xuICAgIGNvbnN0IGRlZmF1bHRFeGVjdXRlID0gKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIGZvY3VzZWQpID0+IHtcbiAgICAgIGNvbnN0IGlzQ29tcGxleCA9IGluc2lkZShmb2N1c2VkKSAmJiBpblNldChTUEFDRSkoc2ltdWxhdGVkRXZlbnQuZXZlbnQpO1xuICAgICAgcmV0dXJuIGlzQ29tcGxleCA/IE9wdGlvbmFsLm5vbmUoKSA6IGRvRGVmYXVsdEV4ZWN1dGUoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgZm9jdXNlZCk7XG4gICAgfTtcbiAgICBjb25zdCBzdG9wRXZlbnRGb3JGaXJlZm94ID0gKF9jb21wb25lbnQsIF9zaW11bGF0ZWRFdmVudCkgPT4gT3B0aW9uYWwuc29tZSh0cnVlKTtcblxuICAgIGNvbnN0IHNjaGVtYSR2ID0gW1xuICAgICAgZGVmYXVsdGVkKCdleGVjdXRlJywgZGVmYXVsdEV4ZWN1dGUpLFxuICAgICAgZGVmYXVsdGVkKCd1c2VTcGFjZScsIGZhbHNlKSxcbiAgICAgIGRlZmF1bHRlZCgndXNlRW50ZXInLCB0cnVlKSxcbiAgICAgIGRlZmF1bHRlZCgndXNlQ29udHJvbEVudGVyJywgZmFsc2UpLFxuICAgICAgZGVmYXVsdGVkKCd1c2VEb3duJywgZmFsc2UpXG4gICAgXTtcbiAgICBjb25zdCBleGVjdXRlJDQgPSAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgZXhlY3V0ZUNvbmZpZykgPT4gZXhlY3V0ZUNvbmZpZy5leGVjdXRlKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICBjb25zdCBnZXRLZXlkb3duUnVsZXMkNSA9IChjb21wb25lbnQsIF9zaW11bGF0ZWRFdmVudCwgZXhlY3V0ZUNvbmZpZywgX2V4ZWN1dGVTdGF0ZSkgPT4ge1xuICAgICAgY29uc3Qgc3BhY2VFeGVjID0gZXhlY3V0ZUNvbmZpZy51c2VTcGFjZSAmJiAhaW5zaWRlKGNvbXBvbmVudC5lbGVtZW50KSA/IFNQQUNFIDogW107XG4gICAgICBjb25zdCBlbnRlckV4ZWMgPSBleGVjdXRlQ29uZmlnLnVzZUVudGVyID8gRU5URVIgOiBbXTtcbiAgICAgIGNvbnN0IGRvd25FeGVjID0gZXhlY3V0ZUNvbmZpZy51c2VEb3duID8gRE9XTiA6IFtdO1xuICAgICAgY29uc3QgZXhlY0tleXMgPSBzcGFjZUV4ZWMuY29uY2F0KGVudGVyRXhlYykuY29uY2F0KGRvd25FeGVjKTtcbiAgICAgIHJldHVybiBbcnVsZShpblNldChleGVjS2V5cyksIGV4ZWN1dGUkNCldLmNvbmNhdChleGVjdXRlQ29uZmlnLnVzZUNvbnRyb2xFbnRlciA/IFtydWxlKGFuZChbXG4gICAgICAgICAgaXNDb250cm9sLFxuICAgICAgICAgIGluU2V0KEVOVEVSKVxuICAgICAgICBdKSwgZXhlY3V0ZSQ0KV0gOiBbXSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRLZXl1cFJ1bGVzJDUgPSAoY29tcG9uZW50LCBfc2ltdWxhdGVkRXZlbnQsIGV4ZWN1dGVDb25maWcsIF9leGVjdXRlU3RhdGUpID0+IGV4ZWN1dGVDb25maWcudXNlU3BhY2UgJiYgIWluc2lkZShjb21wb25lbnQuZWxlbWVudCkgPyBbcnVsZShpblNldChTUEFDRSksIHN0b3BFdmVudEZvckZpcmVmb3gpXSA6IFtdO1xuICAgIHZhciBFeGVjdXRpb25UeXBlID0gdHlwaWNhbChzY2hlbWEkdiwgTm9TdGF0ZS5pbml0LCBnZXRLZXlkb3duUnVsZXMkNSwgZ2V0S2V5dXBSdWxlcyQ1LCAoKSA9PiBPcHRpb25hbC5ub25lKCkpO1xuXG4gICAgY29uc3QgZmxhdGdyaWQkMSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBzZXRHcmlkU2l6ZSA9IChudW1Sb3dzLCBudW1Db2x1bW5zKSA9PiB7XG4gICAgICAgIGRpbWVuc2lvbnMuc2V0KHtcbiAgICAgICAgICBudW1Sb3dzLFxuICAgICAgICAgIG51bUNvbHVtbnNcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0TnVtUm93cyA9ICgpID0+IGRpbWVuc2lvbnMuZ2V0KCkubWFwKGQgPT4gZC5udW1Sb3dzKTtcbiAgICAgIGNvbnN0IGdldE51bUNvbHVtbnMgPSAoKSA9PiBkaW1lbnNpb25zLmdldCgpLm1hcChkID0+IGQubnVtQ29sdW1ucyk7XG4gICAgICByZXR1cm4gbnUkOCh7XG4gICAgICAgIHJlYWRTdGF0ZTogKCkgPT4gZGltZW5zaW9ucy5nZXQoKS5tYXAoZCA9PiAoe1xuICAgICAgICAgIG51bVJvd3M6IFN0cmluZyhkLm51bVJvd3MpLFxuICAgICAgICAgIG51bUNvbHVtbnM6IFN0cmluZyhkLm51bUNvbHVtbnMpXG4gICAgICAgIH0pKS5nZXRPcih7XG4gICAgICAgICAgbnVtUm93czogJz8nLFxuICAgICAgICAgIG51bUNvbHVtbnM6ICc/J1xuICAgICAgICB9KSxcbiAgICAgICAgc2V0R3JpZFNpemUsXG4gICAgICAgIGdldE51bVJvd3MsXG4gICAgICAgIGdldE51bUNvbHVtbnNcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW5pdCRkID0gc3BlYyA9PiBzcGVjLnN0YXRlKHNwZWMpO1xuXG4gICAgdmFyIEtleWluZ1N0YXRlID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIGZsYXRncmlkOiBmbGF0Z3JpZCQxLFxuICAgICAgICBpbml0OiBpbml0JGRcbiAgICB9KTtcblxuICAgIGNvbnN0IHVzZUggPSBtb3ZlbWVudCA9PiAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgY29uZmlnLCBzdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgbW92ZSA9IG1vdmVtZW50KGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgIHJldHVybiB1c2UobW92ZSwgY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgY29uZmlnLCBzdGF0ZSk7XG4gICAgfTtcbiAgICBjb25zdCB3ZXN0JDEgPSAobW92ZUxlZnQsIG1vdmVSaWdodCkgPT4ge1xuICAgICAgY29uc3QgbW92ZW1lbnQgPSBvbkRpcmVjdGlvbihtb3ZlTGVmdCwgbW92ZVJpZ2h0KTtcbiAgICAgIHJldHVybiB1c2VIKG1vdmVtZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IGVhc3QkMSA9IChtb3ZlTGVmdCwgbW92ZVJpZ2h0KSA9PiB7XG4gICAgICBjb25zdCBtb3ZlbWVudCA9IG9uRGlyZWN0aW9uKG1vdmVSaWdodCwgbW92ZUxlZnQpO1xuICAgICAgcmV0dXJuIHVzZUgobW92ZW1lbnQpO1xuICAgIH07XG4gICAgY29uc3QgdXNlViA9IG1vdmUgPT4gKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIGNvbmZpZywgc3RhdGUpID0+IHVzZShtb3ZlLCBjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50LCBjb25maWcsIHN0YXRlKTtcbiAgICBjb25zdCB1c2UgPSAobW92ZSwgY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgY29uZmlnLCBzdGF0ZSkgPT4ge1xuICAgICAgY29uc3Qgb3V0Y29tZSA9IGNvbmZpZy5mb2N1c01hbmFnZXIuZ2V0KGNvbXBvbmVudCkuYmluZChmb2N1c2VkID0+IG1vdmUoY29tcG9uZW50LmVsZW1lbnQsIGZvY3VzZWQsIGNvbmZpZywgc3RhdGUpKTtcbiAgICAgIHJldHVybiBvdXRjb21lLm1hcChuZXdGb2N1cyA9PiB7XG4gICAgICAgIGNvbmZpZy5mb2N1c01hbmFnZXIuc2V0KGNvbXBvbmVudCwgbmV3Rm9jdXMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgbm9ydGgkMSA9IHVzZVY7XG4gICAgY29uc3Qgc291dGgkMSA9IHVzZVY7XG4gICAgY29uc3QgbW92ZSQxID0gdXNlVjtcblxuICAgIGNvbnN0IGlzSGlkZGVuJDEgPSBkb20gPT4gZG9tLm9mZnNldFdpZHRoIDw9IDAgJiYgZG9tLm9mZnNldEhlaWdodCA8PSAwO1xuICAgIGNvbnN0IGlzVmlzaWJsZSA9IGVsZW1lbnQgPT4gIWlzSGlkZGVuJDEoZWxlbWVudC5kb20pO1xuXG4gICAgY29uc3QgbG9jYXRlID0gKGNhbmRpZGF0ZXMsIHByZWRpY2F0ZSkgPT4gZmluZEluZGV4JDEoY2FuZGlkYXRlcywgcHJlZGljYXRlKS5tYXAoaW5kZXggPT4gKHtcbiAgICAgIGluZGV4LFxuICAgICAgY2FuZGlkYXRlc1xuICAgIH0pKTtcblxuICAgIGNvbnN0IGxvY2F0ZVZpc2libGUgPSAoY29udGFpbmVyLCBjdXJyZW50LCBzZWxlY3RvcikgPT4ge1xuICAgICAgY29uc3QgcHJlZGljYXRlID0geCA9PiBlcSh4LCBjdXJyZW50KTtcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBkZXNjZW5kYW50cyhjb250YWluZXIsIHNlbGVjdG9yKTtcbiAgICAgIGNvbnN0IHZpc2libGUgPSBmaWx0ZXIkMihjYW5kaWRhdGVzLCBpc1Zpc2libGUpO1xuICAgICAgcmV0dXJuIGxvY2F0ZSh2aXNpYmxlLCBwcmVkaWNhdGUpO1xuICAgIH07XG4gICAgY29uc3QgZmluZEluZGV4ID0gKGVsZW1lbnRzLCB0YXJnZXQpID0+IGZpbmRJbmRleCQxKGVsZW1lbnRzLCBlbGVtID0+IGVxKHRhcmdldCwgZWxlbSkpO1xuXG4gICAgY29uc3Qgd2l0aEdyaWQgPSAodmFsdWVzLCBpbmRleCwgbnVtQ29scywgZikgPT4ge1xuICAgICAgY29uc3Qgb2xkUm93ID0gTWF0aC5mbG9vcihpbmRleCAvIG51bUNvbHMpO1xuICAgICAgY29uc3Qgb2xkQ29sdW1uID0gaW5kZXggJSBudW1Db2xzO1xuICAgICAgcmV0dXJuIGYob2xkUm93LCBvbGRDb2x1bW4pLmJpbmQoYWRkcmVzcyA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gYWRkcmVzcy5yb3cgKiBudW1Db2xzICsgYWRkcmVzcy5jb2x1bW47XG4gICAgICAgIHJldHVybiBuZXdJbmRleCA+PSAwICYmIG5ld0luZGV4IDwgdmFsdWVzLmxlbmd0aCA/IE9wdGlvbmFsLnNvbWUodmFsdWVzW25ld0luZGV4XSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGN5Y2xlSG9yaXpvbnRhbCQxID0gKHZhbHVlcywgaW5kZXgsIG51bVJvd3MsIG51bUNvbHMsIGRlbHRhKSA9PiB3aXRoR3JpZCh2YWx1ZXMsIGluZGV4LCBudW1Db2xzLCAob2xkUm93LCBvbGRDb2x1bW4pID0+IHtcbiAgICAgIGNvbnN0IG9uTGFzdFJvdyA9IG9sZFJvdyA9PT0gbnVtUm93cyAtIDE7XG4gICAgICBjb25zdCBjb2xzSW5Sb3cgPSBvbkxhc3RSb3cgPyB2YWx1ZXMubGVuZ3RoIC0gb2xkUm93ICogbnVtQ29scyA6IG51bUNvbHM7XG4gICAgICBjb25zdCBuZXdDb2x1bW4gPSBjeWNsZUJ5KG9sZENvbHVtbiwgZGVsdGEsIDAsIGNvbHNJblJvdyAtIDEpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICByb3c6IG9sZFJvdyxcbiAgICAgICAgY29sdW1uOiBuZXdDb2x1bW5cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IGN5Y2xlVmVydGljYWwkMSA9ICh2YWx1ZXMsIGluZGV4LCBudW1Sb3dzLCBudW1Db2xzLCBkZWx0YSkgPT4gd2l0aEdyaWQodmFsdWVzLCBpbmRleCwgbnVtQ29scywgKG9sZFJvdywgb2xkQ29sdW1uKSA9PiB7XG4gICAgICBjb25zdCBuZXdSb3cgPSBjeWNsZUJ5KG9sZFJvdywgZGVsdGEsIDAsIG51bVJvd3MgLSAxKTtcbiAgICAgIGNvbnN0IG9uTGFzdFJvdyA9IG5ld1JvdyA9PT0gbnVtUm93cyAtIDE7XG4gICAgICBjb25zdCBjb2xzSW5Sb3cgPSBvbkxhc3RSb3cgPyB2YWx1ZXMubGVuZ3RoIC0gbmV3Um93ICogbnVtQ29scyA6IG51bUNvbHM7XG4gICAgICBjb25zdCBuZXdDb2wgPSBjbGFtcChvbGRDb2x1bW4sIDAsIGNvbHNJblJvdyAtIDEpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICByb3c6IG5ld1JvdyxcbiAgICAgICAgY29sdW1uOiBuZXdDb2xcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IGN5Y2xlUmlnaHQkMSA9ICh2YWx1ZXMsIGluZGV4LCBudW1Sb3dzLCBudW1Db2xzKSA9PiBjeWNsZUhvcml6b250YWwkMSh2YWx1ZXMsIGluZGV4LCBudW1Sb3dzLCBudW1Db2xzLCArMSk7XG4gICAgY29uc3QgY3ljbGVMZWZ0JDEgPSAodmFsdWVzLCBpbmRleCwgbnVtUm93cywgbnVtQ29scykgPT4gY3ljbGVIb3Jpem9udGFsJDEodmFsdWVzLCBpbmRleCwgbnVtUm93cywgbnVtQ29scywgLTEpO1xuICAgIGNvbnN0IGN5Y2xlVXAkMSA9ICh2YWx1ZXMsIGluZGV4LCBudW1Sb3dzLCBudW1Db2xzKSA9PiBjeWNsZVZlcnRpY2FsJDEodmFsdWVzLCBpbmRleCwgbnVtUm93cywgbnVtQ29scywgLTEpO1xuICAgIGNvbnN0IGN5Y2xlRG93biQxID0gKHZhbHVlcywgaW5kZXgsIG51bVJvd3MsIG51bUNvbHMpID0+IGN5Y2xlVmVydGljYWwkMSh2YWx1ZXMsIGluZGV4LCBudW1Sb3dzLCBudW1Db2xzLCArMSk7XG5cbiAgICBjb25zdCBzY2hlbWEkdSA9IFtcbiAgICAgIHJlcXVpcmVkJDEoJ3NlbGVjdG9yJyksXG4gICAgICBkZWZhdWx0ZWQoJ2V4ZWN1dGUnLCBkZWZhdWx0RXhlY3V0ZSksXG4gICAgICBvbktleWJvYXJkSGFuZGxlcignb25Fc2NhcGUnKSxcbiAgICAgIGRlZmF1bHRlZCgnY2FwdHVyZVRhYicsIGZhbHNlKSxcbiAgICAgIGluaXRTaXplKClcbiAgICBdO1xuICAgIGNvbnN0IGZvY3VzSW4kMyA9IChjb21wb25lbnQsIGdyaWRDb25maWcsIF9ncmlkU3RhdGUpID0+IHtcbiAgICAgIGRlc2NlbmRhbnQoY29tcG9uZW50LmVsZW1lbnQsIGdyaWRDb25maWcuc2VsZWN0b3IpLmVhY2goZmlyc3QgPT4ge1xuICAgICAgICBncmlkQ29uZmlnLmZvY3VzTWFuYWdlci5zZXQoY29tcG9uZW50LCBmaXJzdCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRDdXJyZW50JDEgPSAoY29tcG9uZW50LCBncmlkQ29uZmlnKSA9PiBncmlkQ29uZmlnLmZvY3VzTWFuYWdlci5nZXQoY29tcG9uZW50KS5iaW5kKGVsZW0gPT4gY2xvc2VzdCQxKGVsZW0sIGdyaWRDb25maWcuc2VsZWN0b3IpKTtcbiAgICBjb25zdCBleGVjdXRlJDMgPSAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgZ3JpZENvbmZpZywgX2dyaWRTdGF0ZSkgPT4gZmluZEN1cnJlbnQkMShjb21wb25lbnQsIGdyaWRDb25maWcpLmJpbmQoZm9jdXNlZCA9PiBncmlkQ29uZmlnLmV4ZWN1dGUoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgZm9jdXNlZCkpO1xuICAgIGNvbnN0IGRvTW92ZSQyID0gY3ljbGUgPT4gKGVsZW1lbnQsIGZvY3VzZWQsIGdyaWRDb25maWcsIGdyaWRTdGF0ZSkgPT4gbG9jYXRlVmlzaWJsZShlbGVtZW50LCBmb2N1c2VkLCBncmlkQ29uZmlnLnNlbGVjdG9yKS5iaW5kKGlkZW50aWZpZWQgPT4gY3ljbGUoaWRlbnRpZmllZC5jYW5kaWRhdGVzLCBpZGVudGlmaWVkLmluZGV4LCBncmlkU3RhdGUuZ2V0TnVtUm93cygpLmdldE9yKGdyaWRDb25maWcuaW5pdFNpemUubnVtUm93cyksIGdyaWRTdGF0ZS5nZXROdW1Db2x1bW5zKCkuZ2V0T3IoZ3JpZENvbmZpZy5pbml0U2l6ZS5udW1Db2x1bW5zKSkpO1xuICAgIGNvbnN0IGhhbmRsZVRhYiA9IChfY29tcG9uZW50LCBfc2ltdWxhdGVkRXZlbnQsIGdyaWRDb25maWcpID0+IGdyaWRDb25maWcuY2FwdHVyZVRhYiA/IE9wdGlvbmFsLnNvbWUodHJ1ZSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgY29uc3QgZG9Fc2NhcGUkMSA9IChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50LCBncmlkQ29uZmlnKSA9PiBncmlkQ29uZmlnLm9uRXNjYXBlKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpO1xuICAgIGNvbnN0IG1vdmVMZWZ0JDMgPSBkb01vdmUkMihjeWNsZUxlZnQkMSk7XG4gICAgY29uc3QgbW92ZVJpZ2h0JDMgPSBkb01vdmUkMihjeWNsZVJpZ2h0JDEpO1xuICAgIGNvbnN0IG1vdmVOb3J0aCQxID0gZG9Nb3ZlJDIoY3ljbGVVcCQxKTtcbiAgICBjb25zdCBtb3ZlU291dGgkMSA9IGRvTW92ZSQyKGN5Y2xlRG93biQxKTtcbiAgICBjb25zdCBnZXRLZXlkb3duUnVsZXMkNCA9IGNvbnN0YW50JDEoW1xuICAgICAgcnVsZShpblNldChMRUZUKSwgd2VzdCQxKG1vdmVMZWZ0JDMsIG1vdmVSaWdodCQzKSksXG4gICAgICBydWxlKGluU2V0KFJJR0hUKSwgZWFzdCQxKG1vdmVMZWZ0JDMsIG1vdmVSaWdodCQzKSksXG4gICAgICBydWxlKGluU2V0KFVQKSwgbm9ydGgkMShtb3ZlTm9ydGgkMSkpLFxuICAgICAgcnVsZShpblNldChET1dOKSwgc291dGgkMShtb3ZlU291dGgkMSkpLFxuICAgICAgcnVsZShhbmQoW1xuICAgICAgICBpc1NoaWZ0LFxuICAgICAgICBpblNldChUQUIpXG4gICAgICBdKSwgaGFuZGxlVGFiKSxcbiAgICAgIHJ1bGUoYW5kKFtcbiAgICAgICAgaXNOb3RTaGlmdCxcbiAgICAgICAgaW5TZXQoVEFCKVxuICAgICAgXSksIGhhbmRsZVRhYiksXG4gICAgICBydWxlKGluU2V0KFNQQUNFLmNvbmNhdChFTlRFUikpLCBleGVjdXRlJDMpXG4gICAgXSk7XG4gICAgY29uc3QgZ2V0S2V5dXBSdWxlcyQ0ID0gY29uc3RhbnQkMShbXG4gICAgICBydWxlKGluU2V0KEVTQ0FQRSksIGRvRXNjYXBlJDEpLFxuICAgICAgcnVsZShpblNldChTUEFDRSksIHN0b3BFdmVudEZvckZpcmVmb3gpXG4gICAgXSk7XG4gICAgdmFyIEZsYXRncmlkVHlwZSA9IHR5cGljYWwoc2NoZW1hJHUsIGZsYXRncmlkJDEsIGdldEtleWRvd25SdWxlcyQ0LCBnZXRLZXl1cFJ1bGVzJDQsICgpID0+IE9wdGlvbmFsLnNvbWUoZm9jdXNJbiQzKSk7XG5cbiAgICBjb25zdCBmID0gKGNvbnRhaW5lciwgc2VsZWN0b3IsIGN1cnJlbnQsIGRlbHRhLCBnZXROZXdJbmRleCkgPT4ge1xuICAgICAgY29uc3QgaXNEaXNhYmxlZEJ1dHRvbiA9IGNhbmRpZGF0ZSA9PiBuYW1lJDMoY2FuZGlkYXRlKSA9PT0gJ2J1dHRvbicgJiYgZ2V0JGYoY2FuZGlkYXRlLCAnZGlzYWJsZWQnKSA9PT0gJ2Rpc2FibGVkJztcbiAgICAgIGNvbnN0IHRyeU5ld0luZGV4ID0gKGluaXRpYWwsIGluZGV4LCBjYW5kaWRhdGVzKSA9PiBnZXROZXdJbmRleChpbml0aWFsLCBpbmRleCwgZGVsdGEsIDAsIGNhbmRpZGF0ZXMubGVuZ3RoIC0gMSwgY2FuZGlkYXRlc1tpbmRleF0sIG5ld0luZGV4ID0+IGlzRGlzYWJsZWRCdXR0b24oY2FuZGlkYXRlc1tuZXdJbmRleF0pID8gdHJ5TmV3SW5kZXgoaW5pdGlhbCwgbmV3SW5kZXgsIGNhbmRpZGF0ZXMpIDogT3B0aW9uYWwuZnJvbShjYW5kaWRhdGVzW25ld0luZGV4XSkpO1xuICAgICAgcmV0dXJuIGxvY2F0ZVZpc2libGUoY29udGFpbmVyLCBjdXJyZW50LCBzZWxlY3RvcikuYmluZChpZGVudGlmaWVkID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBpZGVudGlmaWVkLmluZGV4O1xuICAgICAgICBjb25zdCBjYW5kaWRhdGVzID0gaWRlbnRpZmllZC5jYW5kaWRhdGVzO1xuICAgICAgICByZXR1cm4gdHJ5TmV3SW5kZXgoaW5kZXgsIGluZGV4LCBjYW5kaWRhdGVzKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaG9yaXpvbnRhbFdpdGhvdXRDeWNsZXMgPSAoY29udGFpbmVyLCBzZWxlY3RvciwgY3VycmVudCwgZGVsdGEpID0+IGYoY29udGFpbmVyLCBzZWxlY3RvciwgY3VycmVudCwgZGVsdGEsIChwcmV2SW5kZXgsIHYsIGQsIG1pbiwgbWF4LCBvbGRDYW5kaWRhdGUsIG9uTmV3SW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG5ld0luZGV4ID0gY2xhbXAodiArIGQsIG1pbiwgbWF4KTtcbiAgICAgIHJldHVybiBuZXdJbmRleCA9PT0gcHJldkluZGV4ID8gT3B0aW9uYWwuZnJvbShvbGRDYW5kaWRhdGUpIDogb25OZXdJbmRleChuZXdJbmRleCk7XG4gICAgfSk7XG4gICAgY29uc3QgaG9yaXpvbnRhbCA9IChjb250YWluZXIsIHNlbGVjdG9yLCBjdXJyZW50LCBkZWx0YSkgPT4gZihjb250YWluZXIsIHNlbGVjdG9yLCBjdXJyZW50LCBkZWx0YSwgKHByZXZJbmRleCwgdiwgZCwgbWluLCBtYXgsIF9vbGRDYW5kaWRhdGUsIG9uTmV3SW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG5ld0luZGV4ID0gY3ljbGVCeSh2LCBkLCBtaW4sIG1heCk7XG4gICAgICByZXR1cm4gbmV3SW5kZXggPT09IHByZXZJbmRleCA/IE9wdGlvbmFsLm5vbmUoKSA6IG9uTmV3SW5kZXgobmV3SW5kZXgpO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc2NoZW1hJHQgPSBbXG4gICAgICByZXF1aXJlZCQxKCdzZWxlY3RvcicpLFxuICAgICAgZGVmYXVsdGVkKCdnZXRJbml0aWFsJywgT3B0aW9uYWwubm9uZSksXG4gICAgICBkZWZhdWx0ZWQoJ2V4ZWN1dGUnLCBkZWZhdWx0RXhlY3V0ZSksXG4gICAgICBvbktleWJvYXJkSGFuZGxlcignb25Fc2NhcGUnKSxcbiAgICAgIGRlZmF1bHRlZCgnZXhlY3V0ZU9uTW92ZScsIGZhbHNlKSxcbiAgICAgIGRlZmF1bHRlZCgnYWxsb3dWZXJ0aWNhbCcsIHRydWUpLFxuICAgICAgZGVmYXVsdGVkKCdhbGxvd0hvcml6b250YWwnLCB0cnVlKSxcbiAgICAgIGRlZmF1bHRlZCgnY3ljbGVzJywgdHJ1ZSlcbiAgICBdO1xuICAgIGNvbnN0IGZpbmRDdXJyZW50ID0gKGNvbXBvbmVudCwgZmxvd0NvbmZpZykgPT4gZmxvd0NvbmZpZy5mb2N1c01hbmFnZXIuZ2V0KGNvbXBvbmVudCkuYmluZChlbGVtID0+IGNsb3Nlc3QkMShlbGVtLCBmbG93Q29uZmlnLnNlbGVjdG9yKSk7XG4gICAgY29uc3QgZXhlY3V0ZSQyID0gKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIGZsb3dDb25maWcpID0+IGZpbmRDdXJyZW50KGNvbXBvbmVudCwgZmxvd0NvbmZpZykuYmluZChmb2N1c2VkID0+IGZsb3dDb25maWcuZXhlY3V0ZShjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50LCBmb2N1c2VkKSk7XG4gICAgY29uc3QgZm9jdXNJbiQyID0gKGNvbXBvbmVudCwgZmxvd0NvbmZpZywgX3N0YXRlKSA9PiB7XG4gICAgICBmbG93Q29uZmlnLmdldEluaXRpYWwoY29tcG9uZW50KS5vclRodW5rKCgpID0+IGRlc2NlbmRhbnQoY29tcG9uZW50LmVsZW1lbnQsIGZsb3dDb25maWcuc2VsZWN0b3IpKS5lYWNoKGZpcnN0ID0+IHtcbiAgICAgICAgZmxvd0NvbmZpZy5mb2N1c01hbmFnZXIuc2V0KGNvbXBvbmVudCwgZmlyc3QpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBtb3ZlTGVmdCQyID0gKGVsZW1lbnQsIGZvY3VzZWQsIGluZm8pID0+IChpbmZvLmN5Y2xlcyA/IGhvcml6b250YWwgOiBob3Jpem9udGFsV2l0aG91dEN5Y2xlcykoZWxlbWVudCwgaW5mby5zZWxlY3RvciwgZm9jdXNlZCwgLTEpO1xuICAgIGNvbnN0IG1vdmVSaWdodCQyID0gKGVsZW1lbnQsIGZvY3VzZWQsIGluZm8pID0+IChpbmZvLmN5Y2xlcyA/IGhvcml6b250YWwgOiBob3Jpem9udGFsV2l0aG91dEN5Y2xlcykoZWxlbWVudCwgaW5mby5zZWxlY3RvciwgZm9jdXNlZCwgKzEpO1xuICAgIGNvbnN0IGRvTW92ZSQxID0gbW92ZW1lbnQgPT4gKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIGZsb3dDb25maWcsIGZsb3dTdGF0ZSkgPT4gbW92ZW1lbnQoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgZmxvd0NvbmZpZywgZmxvd1N0YXRlKS5iaW5kKCgpID0+IGZsb3dDb25maWcuZXhlY3V0ZU9uTW92ZSA/IGV4ZWN1dGUkMihjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50LCBmbG93Q29uZmlnKSA6IE9wdGlvbmFsLnNvbWUodHJ1ZSkpO1xuICAgIGNvbnN0IGRvRXNjYXBlID0gKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIGZsb3dDb25maWcpID0+IGZsb3dDb25maWcub25Fc2NhcGUoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCk7XG4gICAgY29uc3QgZ2V0S2V5ZG93blJ1bGVzJDMgPSAoX2NvbXBvbmVudCwgX3NlLCBmbG93Q29uZmlnLCBfZmxvd1N0YXRlKSA9PiB7XG4gICAgICBjb25zdCB3ZXN0TW92ZXJzID0gWy4uLmZsb3dDb25maWcuYWxsb3dIb3Jpem9udGFsID8gTEVGVCA6IFtdXS5jb25jYXQoZmxvd0NvbmZpZy5hbGxvd1ZlcnRpY2FsID8gVVAgOiBbXSk7XG4gICAgICBjb25zdCBlYXN0TW92ZXJzID0gWy4uLmZsb3dDb25maWcuYWxsb3dIb3Jpem9udGFsID8gUklHSFQgOiBbXV0uY29uY2F0KGZsb3dDb25maWcuYWxsb3dWZXJ0aWNhbCA/IERPV04gOiBbXSk7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBydWxlKGluU2V0KHdlc3RNb3ZlcnMpLCBkb01vdmUkMSh3ZXN0JDEobW92ZUxlZnQkMiwgbW92ZVJpZ2h0JDIpKSksXG4gICAgICAgIHJ1bGUoaW5TZXQoZWFzdE1vdmVycyksIGRvTW92ZSQxKGVhc3QkMShtb3ZlTGVmdCQyLCBtb3ZlUmlnaHQkMikpKSxcbiAgICAgICAgcnVsZShpblNldChFTlRFUiksIGV4ZWN1dGUkMiksXG4gICAgICAgIHJ1bGUoaW5TZXQoU1BBQ0UpLCBleGVjdXRlJDIpXG4gICAgICBdO1xuICAgIH07XG4gICAgY29uc3QgZ2V0S2V5dXBSdWxlcyQzID0gY29uc3RhbnQkMShbXG4gICAgICBydWxlKGluU2V0KFNQQUNFKSwgc3RvcEV2ZW50Rm9yRmlyZWZveCksXG4gICAgICBydWxlKGluU2V0KEVTQ0FQRSksIGRvRXNjYXBlKVxuICAgIF0pO1xuICAgIHZhciBGbG93VHlwZSA9IHR5cGljYWwoc2NoZW1hJHQsIE5vU3RhdGUuaW5pdCwgZ2V0S2V5ZG93blJ1bGVzJDMsIGdldEtleXVwUnVsZXMkMywgKCkgPT4gT3B0aW9uYWwuc29tZShmb2N1c0luJDIpKTtcblxuICAgIGNvbnN0IHRvQ2VsbCA9IChtYXRyaXgsIHJvd0luZGV4LCBjb2x1bW5JbmRleCkgPT4gT3B0aW9uYWwuZnJvbShtYXRyaXhbcm93SW5kZXhdKS5iaW5kKHJvdyA9PiBPcHRpb25hbC5mcm9tKHJvd1tjb2x1bW5JbmRleF0pLm1hcChjZWxsID0+ICh7XG4gICAgICByb3dJbmRleCxcbiAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgY2VsbFxuICAgIH0pKSk7XG4gICAgY29uc3QgY3ljbGVIb3Jpem9udGFsID0gKG1hdHJpeCwgcm93SW5kZXgsIHN0YXJ0Q29sLCBkZWx0YUNvbCkgPT4ge1xuICAgICAgY29uc3Qgcm93ID0gbWF0cml4W3Jvd0luZGV4XTtcbiAgICAgIGNvbnN0IGNvbHNJblJvdyA9IHJvdy5sZW5ndGg7XG4gICAgICBjb25zdCBuZXdDb2xJbmRleCA9IGN5Y2xlQnkoc3RhcnRDb2wsIGRlbHRhQ29sLCAwLCBjb2xzSW5Sb3cgLSAxKTtcbiAgICAgIHJldHVybiB0b0NlbGwobWF0cml4LCByb3dJbmRleCwgbmV3Q29sSW5kZXgpO1xuICAgIH07XG4gICAgY29uc3QgY3ljbGVWZXJ0aWNhbCA9IChtYXRyaXgsIGNvbEluZGV4LCBzdGFydFJvdywgZGVsdGFSb3cpID0+IHtcbiAgICAgIGNvbnN0IG5leHRSb3dJbmRleCA9IGN5Y2xlQnkoc3RhcnRSb3csIGRlbHRhUm93LCAwLCBtYXRyaXgubGVuZ3RoIC0gMSk7XG4gICAgICBjb25zdCBjb2xzSW5OZXh0Um93ID0gbWF0cml4W25leHRSb3dJbmRleF0ubGVuZ3RoO1xuICAgICAgY29uc3QgbmV4dENvbEluZGV4ID0gY2xhbXAoY29sSW5kZXgsIDAsIGNvbHNJbk5leHRSb3cgLSAxKTtcbiAgICAgIHJldHVybiB0b0NlbGwobWF0cml4LCBuZXh0Um93SW5kZXgsIG5leHRDb2xJbmRleCk7XG4gICAgfTtcbiAgICBjb25zdCBtb3ZlSG9yaXpvbnRhbCA9IChtYXRyaXgsIHJvd0luZGV4LCBzdGFydENvbCwgZGVsdGFDb2wpID0+IHtcbiAgICAgIGNvbnN0IHJvdyA9IG1hdHJpeFtyb3dJbmRleF07XG4gICAgICBjb25zdCBjb2xzSW5Sb3cgPSByb3cubGVuZ3RoO1xuICAgICAgY29uc3QgbmV3Q29sSW5kZXggPSBjbGFtcChzdGFydENvbCArIGRlbHRhQ29sLCAwLCBjb2xzSW5Sb3cgLSAxKTtcbiAgICAgIHJldHVybiB0b0NlbGwobWF0cml4LCByb3dJbmRleCwgbmV3Q29sSW5kZXgpO1xuICAgIH07XG4gICAgY29uc3QgbW92ZVZlcnRpY2FsID0gKG1hdHJpeCwgY29sSW5kZXgsIHN0YXJ0Um93LCBkZWx0YVJvdykgPT4ge1xuICAgICAgY29uc3QgbmV4dFJvd0luZGV4ID0gY2xhbXAoc3RhcnRSb3cgKyBkZWx0YVJvdywgMCwgbWF0cml4Lmxlbmd0aCAtIDEpO1xuICAgICAgY29uc3QgY29sc0luTmV4dFJvdyA9IG1hdHJpeFtuZXh0Um93SW5kZXhdLmxlbmd0aDtcbiAgICAgIGNvbnN0IG5leHRDb2xJbmRleCA9IGNsYW1wKGNvbEluZGV4LCAwLCBjb2xzSW5OZXh0Um93IC0gMSk7XG4gICAgICByZXR1cm4gdG9DZWxsKG1hdHJpeCwgbmV4dFJvd0luZGV4LCBuZXh0Q29sSW5kZXgpO1xuICAgIH07XG4gICAgY29uc3QgY3ljbGVSaWdodCA9IChtYXRyaXgsIHN0YXJ0Um93LCBzdGFydENvbCkgPT4gY3ljbGVIb3Jpem9udGFsKG1hdHJpeCwgc3RhcnRSb3csIHN0YXJ0Q29sLCArMSk7XG4gICAgY29uc3QgY3ljbGVMZWZ0ID0gKG1hdHJpeCwgc3RhcnRSb3csIHN0YXJ0Q29sKSA9PiBjeWNsZUhvcml6b250YWwobWF0cml4LCBzdGFydFJvdywgc3RhcnRDb2wsIC0xKTtcbiAgICBjb25zdCBjeWNsZVVwID0gKG1hdHJpeCwgc3RhcnRSb3csIHN0YXJ0Q29sKSA9PiBjeWNsZVZlcnRpY2FsKG1hdHJpeCwgc3RhcnRDb2wsIHN0YXJ0Um93LCAtMSk7XG4gICAgY29uc3QgY3ljbGVEb3duID0gKG1hdHJpeCwgc3RhcnRSb3csIHN0YXJ0Q29sKSA9PiBjeWNsZVZlcnRpY2FsKG1hdHJpeCwgc3RhcnRDb2wsIHN0YXJ0Um93LCArMSk7XG4gICAgY29uc3QgbW92ZUxlZnQkMSA9IChtYXRyaXgsIHN0YXJ0Um93LCBzdGFydENvbCkgPT4gbW92ZUhvcml6b250YWwobWF0cml4LCBzdGFydFJvdywgc3RhcnRDb2wsIC0xKTtcbiAgICBjb25zdCBtb3ZlUmlnaHQkMSA9IChtYXRyaXgsIHN0YXJ0Um93LCBzdGFydENvbCkgPT4gbW92ZUhvcml6b250YWwobWF0cml4LCBzdGFydFJvdywgc3RhcnRDb2wsICsxKTtcbiAgICBjb25zdCBtb3ZlVXAkMSA9IChtYXRyaXgsIHN0YXJ0Um93LCBzdGFydENvbCkgPT4gbW92ZVZlcnRpY2FsKG1hdHJpeCwgc3RhcnRDb2wsIHN0YXJ0Um93LCAtMSk7XG4gICAgY29uc3QgbW92ZURvd24kMSA9IChtYXRyaXgsIHN0YXJ0Um93LCBzdGFydENvbCkgPT4gbW92ZVZlcnRpY2FsKG1hdHJpeCwgc3RhcnRDb2wsIHN0YXJ0Um93LCArMSk7XG5cbiAgICBjb25zdCBzY2hlbWEkcyA9IFtcbiAgICAgIHJlcXVpcmVkT2JqT2YoJ3NlbGVjdG9ycycsIFtcbiAgICAgICAgcmVxdWlyZWQkMSgncm93JyksXG4gICAgICAgIHJlcXVpcmVkJDEoJ2NlbGwnKVxuICAgICAgXSksXG4gICAgICBkZWZhdWx0ZWQoJ2N5Y2xlcycsIHRydWUpLFxuICAgICAgZGVmYXVsdGVkKCdwcmV2aW91c1NlbGVjdG9yJywgT3B0aW9uYWwubm9uZSksXG4gICAgICBkZWZhdWx0ZWQoJ2V4ZWN1dGUnLCBkZWZhdWx0RXhlY3V0ZSlcbiAgICBdO1xuICAgIGNvbnN0IGZvY3VzSW4kMSA9IChjb21wb25lbnQsIG1hdHJpeENvbmZpZywgX3N0YXRlKSA9PiB7XG4gICAgICBjb25zdCBmb2N1c2VkID0gbWF0cml4Q29uZmlnLnByZXZpb3VzU2VsZWN0b3IoY29tcG9uZW50KS5vclRodW5rKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3JzID0gbWF0cml4Q29uZmlnLnNlbGVjdG9ycztcbiAgICAgICAgcmV0dXJuIGRlc2NlbmRhbnQoY29tcG9uZW50LmVsZW1lbnQsIHNlbGVjdG9ycy5jZWxsKTtcbiAgICAgIH0pO1xuICAgICAgZm9jdXNlZC5lYWNoKGNlbGwgPT4ge1xuICAgICAgICBtYXRyaXhDb25maWcuZm9jdXNNYW5hZ2VyLnNldChjb21wb25lbnQsIGNlbGwpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBleGVjdXRlJDEgPSAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgbWF0cml4Q29uZmlnKSA9PiBzZWFyY2goY29tcG9uZW50LmVsZW1lbnQpLmJpbmQoZm9jdXNlZCA9PiBtYXRyaXhDb25maWcuZXhlY3V0ZShjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50LCBmb2N1c2VkKSk7XG4gICAgY29uc3QgdG9NYXRyaXggPSAocm93cywgbWF0cml4Q29uZmlnKSA9PiBtYXAkMihyb3dzLCByb3cgPT4gZGVzY2VuZGFudHMocm93LCBtYXRyaXhDb25maWcuc2VsZWN0b3JzLmNlbGwpKTtcbiAgICBjb25zdCBkb01vdmUgPSAoaWZDeWNsZSwgaWZNb3ZlKSA9PiAoZWxlbWVudCwgZm9jdXNlZCwgbWF0cml4Q29uZmlnKSA9PiB7XG4gICAgICBjb25zdCBtb3ZlID0gbWF0cml4Q29uZmlnLmN5Y2xlcyA/IGlmQ3ljbGUgOiBpZk1vdmU7XG4gICAgICByZXR1cm4gY2xvc2VzdCQxKGZvY3VzZWQsIG1hdHJpeENvbmZpZy5zZWxlY3RvcnMucm93KS5iaW5kKGluUm93ID0+IHtcbiAgICAgICAgY29uc3QgY2VsbHNJblJvdyA9IGRlc2NlbmRhbnRzKGluUm93LCBtYXRyaXhDb25maWcuc2VsZWN0b3JzLmNlbGwpO1xuICAgICAgICByZXR1cm4gZmluZEluZGV4KGNlbGxzSW5Sb3csIGZvY3VzZWQpLmJpbmQoY29sSW5kZXggPT4ge1xuICAgICAgICAgIGNvbnN0IGFsbFJvd3MgPSBkZXNjZW5kYW50cyhlbGVtZW50LCBtYXRyaXhDb25maWcuc2VsZWN0b3JzLnJvdyk7XG4gICAgICAgICAgcmV0dXJuIGZpbmRJbmRleChhbGxSb3dzLCBpblJvdykuYmluZChyb3dJbmRleCA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYXRyaXggPSB0b01hdHJpeChhbGxSb3dzLCBtYXRyaXhDb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuIG1vdmUobWF0cml4LCByb3dJbmRleCwgY29sSW5kZXgpLm1hcChuZXh0ID0+IG5leHQuY2VsbCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBtb3ZlTGVmdCA9IGRvTW92ZShjeWNsZUxlZnQsIG1vdmVMZWZ0JDEpO1xuICAgIGNvbnN0IG1vdmVSaWdodCA9IGRvTW92ZShjeWNsZVJpZ2h0LCBtb3ZlUmlnaHQkMSk7XG4gICAgY29uc3QgbW92ZU5vcnRoID0gZG9Nb3ZlKGN5Y2xlVXAsIG1vdmVVcCQxKTtcbiAgICBjb25zdCBtb3ZlU291dGggPSBkb01vdmUoY3ljbGVEb3duLCBtb3ZlRG93biQxKTtcbiAgICBjb25zdCBnZXRLZXlkb3duUnVsZXMkMiA9IGNvbnN0YW50JDEoW1xuICAgICAgcnVsZShpblNldChMRUZUKSwgd2VzdCQxKG1vdmVMZWZ0LCBtb3ZlUmlnaHQpKSxcbiAgICAgIHJ1bGUoaW5TZXQoUklHSFQpLCBlYXN0JDEobW92ZUxlZnQsIG1vdmVSaWdodCkpLFxuICAgICAgcnVsZShpblNldChVUCksIG5vcnRoJDEobW92ZU5vcnRoKSksXG4gICAgICBydWxlKGluU2V0KERPV04pLCBzb3V0aCQxKG1vdmVTb3V0aCkpLFxuICAgICAgcnVsZShpblNldChTUEFDRS5jb25jYXQoRU5URVIpKSwgZXhlY3V0ZSQxKVxuICAgIF0pO1xuICAgIGNvbnN0IGdldEtleXVwUnVsZXMkMiA9IGNvbnN0YW50JDEoW3J1bGUoaW5TZXQoU1BBQ0UpLCBzdG9wRXZlbnRGb3JGaXJlZm94KV0pO1xuICAgIHZhciBNYXRyaXhUeXBlID0gdHlwaWNhbChzY2hlbWEkcywgTm9TdGF0ZS5pbml0LCBnZXRLZXlkb3duUnVsZXMkMiwgZ2V0S2V5dXBSdWxlcyQyLCAoKSA9PiBPcHRpb25hbC5zb21lKGZvY3VzSW4kMSkpO1xuXG4gICAgY29uc3Qgc2NoZW1hJHIgPSBbXG4gICAgICByZXF1aXJlZCQxKCdzZWxlY3RvcicpLFxuICAgICAgZGVmYXVsdGVkKCdleGVjdXRlJywgZGVmYXVsdEV4ZWN1dGUpLFxuICAgICAgZGVmYXVsdGVkKCdtb3ZlT25UYWInLCBmYWxzZSlcbiAgICBdO1xuICAgIGNvbnN0IGV4ZWN1dGUgPSAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgbWVudUNvbmZpZykgPT4gbWVudUNvbmZpZy5mb2N1c01hbmFnZXIuZ2V0KGNvbXBvbmVudCkuYmluZChmb2N1c2VkID0+IG1lbnVDb25maWcuZXhlY3V0ZShjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50LCBmb2N1c2VkKSk7XG4gICAgY29uc3QgZm9jdXNJbiA9IChjb21wb25lbnQsIG1lbnVDb25maWcsIF9zdGF0ZSkgPT4ge1xuICAgICAgZGVzY2VuZGFudChjb21wb25lbnQuZWxlbWVudCwgbWVudUNvbmZpZy5zZWxlY3RvcikuZWFjaChmaXJzdCA9PiB7XG4gICAgICAgIG1lbnVDb25maWcuZm9jdXNNYW5hZ2VyLnNldChjb21wb25lbnQsIGZpcnN0KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbW92ZVVwID0gKGVsZW1lbnQsIGZvY3VzZWQsIGluZm8pID0+IGhvcml6b250YWwoZWxlbWVudCwgaW5mby5zZWxlY3RvciwgZm9jdXNlZCwgLTEpO1xuICAgIGNvbnN0IG1vdmVEb3duID0gKGVsZW1lbnQsIGZvY3VzZWQsIGluZm8pID0+IGhvcml6b250YWwoZWxlbWVudCwgaW5mby5zZWxlY3RvciwgZm9jdXNlZCwgKzEpO1xuICAgIGNvbnN0IGZpcmVTaGlmdFRhYiA9IChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50LCBtZW51Q29uZmlnLCBtZW51U3RhdGUpID0+IG1lbnVDb25maWcubW92ZU9uVGFiID8gbW92ZSQxKG1vdmVVcCkoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgbWVudUNvbmZpZywgbWVudVN0YXRlKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICBjb25zdCBmaXJlVGFiID0gKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIG1lbnVDb25maWcsIG1lbnVTdGF0ZSkgPT4gbWVudUNvbmZpZy5tb3ZlT25UYWIgPyBtb3ZlJDEobW92ZURvd24pKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIG1lbnVDb25maWcsIG1lbnVTdGF0ZSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgY29uc3QgZ2V0S2V5ZG93blJ1bGVzJDEgPSBjb25zdGFudCQxKFtcbiAgICAgIHJ1bGUoaW5TZXQoVVApLCBtb3ZlJDEobW92ZVVwKSksXG4gICAgICBydWxlKGluU2V0KERPV04pLCBtb3ZlJDEobW92ZURvd24pKSxcbiAgICAgIHJ1bGUoYW5kKFtcbiAgICAgICAgaXNTaGlmdCxcbiAgICAgICAgaW5TZXQoVEFCKVxuICAgICAgXSksIGZpcmVTaGlmdFRhYiksXG4gICAgICBydWxlKGFuZChbXG4gICAgICAgIGlzTm90U2hpZnQsXG4gICAgICAgIGluU2V0KFRBQilcbiAgICAgIF0pLCBmaXJlVGFiKSxcbiAgICAgIHJ1bGUoaW5TZXQoRU5URVIpLCBleGVjdXRlKSxcbiAgICAgIHJ1bGUoaW5TZXQoU1BBQ0UpLCBleGVjdXRlKVxuICAgIF0pO1xuICAgIGNvbnN0IGdldEtleXVwUnVsZXMkMSA9IGNvbnN0YW50JDEoW3J1bGUoaW5TZXQoU1BBQ0UpLCBzdG9wRXZlbnRGb3JGaXJlZm94KV0pO1xuICAgIHZhciBNZW51VHlwZSA9IHR5cGljYWwoc2NoZW1hJHIsIE5vU3RhdGUuaW5pdCwgZ2V0S2V5ZG93blJ1bGVzJDEsIGdldEtleXVwUnVsZXMkMSwgKCkgPT4gT3B0aW9uYWwuc29tZShmb2N1c0luKSk7XG5cbiAgICBjb25zdCBzY2hlbWEkcSA9IFtcbiAgICAgIG9uS2V5Ym9hcmRIYW5kbGVyKCdvblNwYWNlJyksXG4gICAgICBvbktleWJvYXJkSGFuZGxlcignb25FbnRlcicpLFxuICAgICAgb25LZXlib2FyZEhhbmRsZXIoJ29uU2hpZnRFbnRlcicpLFxuICAgICAgb25LZXlib2FyZEhhbmRsZXIoJ29uTGVmdCcpLFxuICAgICAgb25LZXlib2FyZEhhbmRsZXIoJ29uUmlnaHQnKSxcbiAgICAgIG9uS2V5Ym9hcmRIYW5kbGVyKCdvblRhYicpLFxuICAgICAgb25LZXlib2FyZEhhbmRsZXIoJ29uU2hpZnRUYWInKSxcbiAgICAgIG9uS2V5Ym9hcmRIYW5kbGVyKCdvblVwJyksXG4gICAgICBvbktleWJvYXJkSGFuZGxlcignb25Eb3duJyksXG4gICAgICBvbktleWJvYXJkSGFuZGxlcignb25Fc2NhcGUnKSxcbiAgICAgIGRlZmF1bHRlZCgnc3RvcFNwYWNlS2V5dXAnLCBmYWxzZSksXG4gICAgICBvcHRpb24kMygnZm9jdXNJbicpXG4gICAgXTtcbiAgICBjb25zdCBnZXRLZXlkb3duUnVsZXMgPSAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCwgc3BlY2lhbEluZm8pID0+IFtcbiAgICAgIHJ1bGUoaW5TZXQoU1BBQ0UpLCBzcGVjaWFsSW5mby5vblNwYWNlKSxcbiAgICAgIHJ1bGUoYW5kKFtcbiAgICAgICAgaXNOb3RTaGlmdCxcbiAgICAgICAgaW5TZXQoRU5URVIpXG4gICAgICBdKSwgc3BlY2lhbEluZm8ub25FbnRlciksXG4gICAgICBydWxlKGFuZChbXG4gICAgICAgIGlzU2hpZnQsXG4gICAgICAgIGluU2V0KEVOVEVSKVxuICAgICAgXSksIHNwZWNpYWxJbmZvLm9uU2hpZnRFbnRlciksXG4gICAgICBydWxlKGFuZChbXG4gICAgICAgIGlzU2hpZnQsXG4gICAgICAgIGluU2V0KFRBQilcbiAgICAgIF0pLCBzcGVjaWFsSW5mby5vblNoaWZ0VGFiKSxcbiAgICAgIHJ1bGUoYW5kKFtcbiAgICAgICAgaXNOb3RTaGlmdCxcbiAgICAgICAgaW5TZXQoVEFCKVxuICAgICAgXSksIHNwZWNpYWxJbmZvLm9uVGFiKSxcbiAgICAgIHJ1bGUoaW5TZXQoVVApLCBzcGVjaWFsSW5mby5vblVwKSxcbiAgICAgIHJ1bGUoaW5TZXQoRE9XTiksIHNwZWNpYWxJbmZvLm9uRG93biksXG4gICAgICBydWxlKGluU2V0KExFRlQpLCBzcGVjaWFsSW5mby5vbkxlZnQpLFxuICAgICAgcnVsZShpblNldChSSUdIVCksIHNwZWNpYWxJbmZvLm9uUmlnaHQpLFxuICAgICAgcnVsZShpblNldChTUEFDRSksIHNwZWNpYWxJbmZvLm9uU3BhY2UpXG4gICAgXTtcbiAgICBjb25zdCBnZXRLZXl1cFJ1bGVzID0gKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQsIHNwZWNpYWxJbmZvKSA9PiBbXG4gICAgICAuLi5zcGVjaWFsSW5mby5zdG9wU3BhY2VLZXl1cCA/IFtydWxlKGluU2V0KFNQQUNFKSwgc3RvcEV2ZW50Rm9yRmlyZWZveCldIDogW10sXG4gICAgICBydWxlKGluU2V0KEVTQ0FQRSksIHNwZWNpYWxJbmZvLm9uRXNjYXBlKVxuICAgIF07XG4gICAgdmFyIFNwZWNpYWxUeXBlID0gdHlwaWNhbChzY2hlbWEkcSwgTm9TdGF0ZS5pbml0LCBnZXRLZXlkb3duUnVsZXMsIGdldEtleXVwUnVsZXMsIHNwZWNpYWxJbmZvID0+IHNwZWNpYWxJbmZvLmZvY3VzSW4pO1xuXG4gICAgY29uc3QgYWN5Y2xpYyA9IEFjeWNsaWNUeXBlLnNjaGVtYSgpO1xuICAgIGNvbnN0IGN5Y2xpYyA9IEN5Y2xpY1R5cGUuc2NoZW1hKCk7XG4gICAgY29uc3QgZmxvdyA9IEZsb3dUeXBlLnNjaGVtYSgpO1xuICAgIGNvbnN0IGZsYXRncmlkID0gRmxhdGdyaWRUeXBlLnNjaGVtYSgpO1xuICAgIGNvbnN0IG1hdHJpeCA9IE1hdHJpeFR5cGUuc2NoZW1hKCk7XG4gICAgY29uc3QgZXhlY3V0aW9uID0gRXhlY3V0aW9uVHlwZS5zY2hlbWEoKTtcbiAgICBjb25zdCBtZW51ID0gTWVudVR5cGUuc2NoZW1hKCk7XG4gICAgY29uc3Qgc3BlY2lhbCA9IFNwZWNpYWxUeXBlLnNjaGVtYSgpO1xuXG4gICAgdmFyIEtleWJvYXJkQnJhbmNoZXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgYWN5Y2xpYzogYWN5Y2xpYyxcbiAgICAgICAgY3ljbGljOiBjeWNsaWMsXG4gICAgICAgIGZsb3c6IGZsb3csXG4gICAgICAgIGZsYXRncmlkOiBmbGF0Z3JpZCxcbiAgICAgICAgbWF0cml4OiBtYXRyaXgsXG4gICAgICAgIGV4ZWN1dGlvbjogZXhlY3V0aW9uLFxuICAgICAgICBtZW51OiBtZW51LFxuICAgICAgICBzcGVjaWFsOiBzcGVjaWFsXG4gICAgfSk7XG5cbiAgICBjb25zdCBpc0ZsYXRncmlkU3RhdGUgPSBrZXlTdGF0ZSA9PiBoYXNOb25OdWxsYWJsZUtleShrZXlTdGF0ZSwgJ3NldEdyaWRTaXplJyk7XG4gICAgY29uc3QgS2V5aW5nID0gY3JlYXRlTW9kZXMoe1xuICAgICAgYnJhbmNoS2V5OiAnbW9kZScsXG4gICAgICBicmFuY2hlczogS2V5Ym9hcmRCcmFuY2hlcyxcbiAgICAgIG5hbWU6ICdrZXlpbmcnLFxuICAgICAgYWN0aXZlOiB7XG4gICAgICAgIGV2ZW50czogKGtleWluZ0NvbmZpZywga2V5aW5nU3RhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBoYW5kbGVyID0ga2V5aW5nQ29uZmlnLmhhbmRsZXI7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZXIudG9FdmVudHMoa2V5aW5nQ29uZmlnLCBrZXlpbmdTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhcGlzOiB7XG4gICAgICAgIGZvY3VzSW46IChjb21wb25lbnQsIGtleUNvbmZpZywga2V5U3RhdGUpID0+IHtcbiAgICAgICAgICBrZXlDb25maWcuc2VuZEZvY3VzSW4oa2V5Q29uZmlnKS5mb2xkKCgpID0+IHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5nZXRTeXN0ZW0oKS50cmlnZ2VyRm9jdXMoY29tcG9uZW50LmVsZW1lbnQsIGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgICAgICB9LCBzZW5kRm9jdXNJbiA9PiB7XG4gICAgICAgICAgICBzZW5kRm9jdXNJbihjb21wb25lbnQsIGtleUNvbmZpZywga2V5U3RhdGUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBzZXRHcmlkU2l6ZTogKGNvbXBvbmVudCwga2V5Q29uZmlnLCBrZXlTdGF0ZSwgbnVtUm93cywgbnVtQ29sdW1ucykgPT4ge1xuICAgICAgICAgIGlmICghaXNGbGF0Z3JpZFN0YXRlKGtleVN0YXRlKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignTGF5b3V0IGRvZXMgbm90IHN1cHBvcnQgc2V0R3JpZFNpemUnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAga2V5U3RhdGUuc2V0R3JpZFNpemUobnVtUm93cywgbnVtQ29sdW1ucyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc3RhdGU6IEtleWluZ1N0YXRlXG4gICAgfSk7XG5cbiAgICBjb25zdCB3aXRob3V0UmV1c2UgPSAocGFyZW50LCBkYXRhKSA9PiB7XG4gICAgICBwcmVzZXJ2ZSQxKCgpID0+IHtcbiAgICAgICAgcmVwbGFjZUNoaWxkcmVuKHBhcmVudCwgZGF0YSwgKCkgPT4gbWFwJDIoZGF0YSwgcGFyZW50LmdldFN5c3RlbSgpLmJ1aWxkKSk7XG4gICAgICB9LCBwYXJlbnQuZWxlbWVudCk7XG4gICAgfTtcbiAgICBjb25zdCB3aXRoUmV1c2UgPSAocGFyZW50LCBkYXRhKSA9PiB7XG4gICAgICBwcmVzZXJ2ZSQxKCgpID0+IHtcbiAgICAgICAgdmlydHVhbFJlcGxhY2VDaGlsZHJlbihwYXJlbnQsIGRhdGEsICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGF0Y2hTcGVjQ2hpbGRyZW4ocGFyZW50LmVsZW1lbnQsIGRhdGEsIHBhcmVudC5nZXRTeXN0ZW0oKS5idWlsZE9yUGF0Y2gpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHBhcmVudC5lbGVtZW50KTtcbiAgICB9O1xuXG4gICAgY29uc3QgdmlydHVhbFJlcGxhY2UgPSAoY29tcG9uZW50LCByZXBsYWNlZSwgcmVwbGFjZWVJbmRleCwgY2hpbGRTcGVjKSA9PiB7XG4gICAgICB2aXJ0dWFsRGV0YWNoKHJlcGxhY2VlKTtcbiAgICAgIGNvbnN0IGNoaWxkID0gcGF0Y2hTcGVjQ2hpbGQoY29tcG9uZW50LmVsZW1lbnQsIHJlcGxhY2VlSW5kZXgsIGNoaWxkU3BlYywgY29tcG9uZW50LmdldFN5c3RlbSgpLmJ1aWxkT3JQYXRjaCk7XG4gICAgICB2aXJ0dWFsQXR0YWNoKGNvbXBvbmVudCwgY2hpbGQpO1xuICAgICAgY29tcG9uZW50LnN5bmNDb21wb25lbnRzKCk7XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnQgPSAoY29tcG9uZW50LCBpbnNlcnRpb24sIGNoaWxkU3BlYykgPT4ge1xuICAgICAgY29uc3QgY2hpbGQgPSBjb21wb25lbnQuZ2V0U3lzdGVtKCkuYnVpbGQoY2hpbGRTcGVjKTtcbiAgICAgIGF0dGFjaFdpdGgoY29tcG9uZW50LCBjaGlsZCwgaW5zZXJ0aW9uKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlcGxhY2UgPSAoY29tcG9uZW50LCByZXBsYWNlZSwgcmVwbGFjZWVJbmRleCwgY2hpbGRTcGVjKSA9PiB7XG4gICAgICBkZXRhY2gocmVwbGFjZWUpO1xuICAgICAgaW5zZXJ0KGNvbXBvbmVudCwgKHAsIGMpID0+IGFwcGVuZEF0KHAsIGMsIHJlcGxhY2VlSW5kZXgpLCBjaGlsZFNwZWMpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0JDMgPSAoY29tcG9uZW50LCByZXBsYWNlQ29uZmlnLCByZXBsYWNlU3RhdGUsIGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IHJlcGxhY2VyID0gcmVwbGFjZUNvbmZpZy5yZXVzZURvbSA/IHdpdGhSZXVzZSA6IHdpdGhvdXRSZXVzZTtcbiAgICAgIHJldHVybiByZXBsYWNlcihjb21wb25lbnQsIGRhdGEpO1xuICAgIH07XG4gICAgY29uc3QgYXBwZW5kID0gKGNvbXBvbmVudCwgcmVwbGFjZUNvbmZpZywgcmVwbGFjZVN0YXRlLCBhcHBlbmRlZSkgPT4ge1xuICAgICAgaW5zZXJ0KGNvbXBvbmVudCwgYXBwZW5kJDIsIGFwcGVuZGVlKTtcbiAgICB9O1xuICAgIGNvbnN0IHByZXBlbmQgPSAoY29tcG9uZW50LCByZXBsYWNlQ29uZmlnLCByZXBsYWNlU3RhdGUsIHByZXBlbmRlZSkgPT4ge1xuICAgICAgaW5zZXJ0KGNvbXBvbmVudCwgcHJlcGVuZCQxLCBwcmVwZW5kZWUpO1xuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlID0gKGNvbXBvbmVudCwgcmVwbGFjZUNvbmZpZywgcmVwbGFjZVN0YXRlLCByZW1vdmVlKSA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGNvbnRlbnRzKGNvbXBvbmVudCk7XG4gICAgICBjb25zdCBmb3VuZENoaWxkID0gZmluZCQ1KGNoaWxkcmVuLCBjaGlsZCA9PiBlcShyZW1vdmVlLmVsZW1lbnQsIGNoaWxkLmVsZW1lbnQpKTtcbiAgICAgIGZvdW5kQ2hpbGQuZWFjaChkZXRhY2gpO1xuICAgIH07XG4gICAgY29uc3QgY29udGVudHMgPSAoY29tcG9uZW50LCBfcmVwbGFjZUNvbmZpZykgPT4gY29tcG9uZW50LmNvbXBvbmVudHMoKTtcbiAgICBjb25zdCByZXBsYWNlQXQgPSAoY29tcG9uZW50LCByZXBsYWNlQ29uZmlnLCByZXBsYWNlU3RhdGUsIHJlcGxhY2VlSW5kZXgsIHJlcGxhY2VyKSA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGNvbnRlbnRzKGNvbXBvbmVudCk7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShjaGlsZHJlbltyZXBsYWNlZUluZGV4XSkubWFwKHJlcGxhY2VlID0+IHtcbiAgICAgICAgcmVwbGFjZXIuZm9sZCgoKSA9PiBkZXRhY2gocmVwbGFjZWUpLCByID0+IHtcbiAgICAgICAgICBjb25zdCByZXBsYWNlciA9IHJlcGxhY2VDb25maWcucmV1c2VEb20gPyB2aXJ0dWFsUmVwbGFjZSA6IHJlcGxhY2U7XG4gICAgICAgICAgcmVwbGFjZXIoY29tcG9uZW50LCByZXBsYWNlZSwgcmVwbGFjZWVJbmRleCwgcik7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVwbGFjZWU7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlcGxhY2VCeSA9IChjb21wb25lbnQsIHJlcGxhY2VDb25maWcsIHJlcGxhY2VTdGF0ZSwgcmVwbGFjZWVQcmVkLCByZXBsYWNlcikgPT4ge1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBjb250ZW50cyhjb21wb25lbnQpO1xuICAgICAgcmV0dXJuIGZpbmRJbmRleCQxKGNoaWxkcmVuLCByZXBsYWNlZVByZWQpLmJpbmQocmVwbGFjZWVJbmRleCA9PiByZXBsYWNlQXQoY29tcG9uZW50LCByZXBsYWNlQ29uZmlnLCByZXBsYWNlU3RhdGUsIHJlcGxhY2VlSW5kZXgsIHJlcGxhY2VyKSk7XG4gICAgfTtcblxuICAgIHZhciBSZXBsYWNlQXBpcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBhcHBlbmQ6IGFwcGVuZCxcbiAgICAgICAgcHJlcGVuZDogcHJlcGVuZCxcbiAgICAgICAgcmVtb3ZlOiByZW1vdmUsXG4gICAgICAgIHJlcGxhY2VBdDogcmVwbGFjZUF0LFxuICAgICAgICByZXBsYWNlQnk6IHJlcGxhY2VCeSxcbiAgICAgICAgc2V0OiBzZXQkMyxcbiAgICAgICAgY29udGVudHM6IGNvbnRlbnRzXG4gICAgfSk7XG5cbiAgICBjb25zdCBSZXBsYWNpbmcgPSBjcmVhdGUkNCh7XG4gICAgICBmaWVsZHM6IFtkZWZhdWx0ZWRCb29sZWFuKCdyZXVzZURvbScsIHRydWUpXSxcbiAgICAgIG5hbWU6ICdyZXBsYWNpbmcnLFxuICAgICAgYXBpczogUmVwbGFjZUFwaXNcbiAgICB9KTtcblxuICAgIGNvbnN0IGV2ZW50cyRkID0gKG5hbWUsIGV2ZW50SGFuZGxlcnMpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IGRlcml2ZSQyKGV2ZW50SGFuZGxlcnMpO1xuICAgICAgcmV0dXJuIGNyZWF0ZSQ0KHtcbiAgICAgICAgZmllbGRzOiBbcmVxdWlyZWQkMSgnZW5hYmxlZCcpXSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgYWN0aXZlOiB7IGV2ZW50czogY29uc3RhbnQkMShldmVudHMpIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgY29uZmlnID0gKG5hbWUsIGV2ZW50SGFuZGxlcnMpID0+IHtcbiAgICAgIGNvbnN0IG1lID0gZXZlbnRzJGQobmFtZSwgZXZlbnRIYW5kbGVycyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IG5hbWUsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgY29uZmlnOiB7fSxcbiAgICAgICAgICBtZSxcbiAgICAgICAgICBjb25maWdBc1JhdzogY29uc3RhbnQkMSh7fSksXG4gICAgICAgICAgaW5pdGlhbENvbmZpZzoge30sXG4gICAgICAgICAgc3RhdGU6IE5vU3RhdGVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZm9jdXMkMiA9IChjb21wb25lbnQsIGZvY3VzQ29uZmlnKSA9PiB7XG4gICAgICBpZiAoIWZvY3VzQ29uZmlnLmlnbm9yZSkge1xuICAgICAgICBmb2N1cyQzKGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgICAgZm9jdXNDb25maWcub25Gb2N1cyhjb21wb25lbnQpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYmx1ciA9IChjb21wb25lbnQsIGZvY3VzQ29uZmlnKSA9PiB7XG4gICAgICBpZiAoIWZvY3VzQ29uZmlnLmlnbm9yZSkge1xuICAgICAgICBibHVyJDEoY29tcG9uZW50LmVsZW1lbnQpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNGb2N1c2VkID0gY29tcG9uZW50ID0+IGhhc0ZvY3VzKGNvbXBvbmVudC5lbGVtZW50KTtcblxuICAgIHZhciBGb2N1c0FwaXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgZm9jdXM6IGZvY3VzJDIsXG4gICAgICAgIGJsdXI6IGJsdXIsXG4gICAgICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkXG4gICAgfSk7XG5cbiAgICBjb25zdCBleGhpYml0JDQgPSAoYmFzZSwgZm9jdXNDb25maWcpID0+IHtcbiAgICAgIGNvbnN0IG1vZCA9IGZvY3VzQ29uZmlnLmlnbm9yZSA/IHt9IDogeyBhdHRyaWJ1dGVzOiB7IHRhYmluZGV4OiAnLTEnIH0gfTtcbiAgICAgIHJldHVybiBudSQ3KG1vZCk7XG4gICAgfTtcbiAgICBjb25zdCBldmVudHMkYyA9IGZvY3VzQ29uZmlnID0+IGRlcml2ZSQyKFtydW4kMShmb2N1cyQ0KCksIChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgIGZvY3VzJDIoY29tcG9uZW50LCBmb2N1c0NvbmZpZyk7XG4gICAgICAgIHNpbXVsYXRlZEV2ZW50LnN0b3AoKTtcbiAgICAgIH0pXS5jb25jYXQoZm9jdXNDb25maWcuc3RvcE1vdXNlZG93biA/IFtydW4kMShtb3VzZWRvd24oKSwgKF8sIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgIHNpbXVsYXRlZEV2ZW50LmV2ZW50LnByZXZlbnQoKTtcbiAgICAgIH0pXSA6IFtdKSk7XG5cbiAgICB2YXIgQWN0aXZlRm9jdXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgZXhoaWJpdDogZXhoaWJpdCQ0LFxuICAgICAgICBldmVudHM6IGV2ZW50cyRjXG4gICAgfSk7XG5cbiAgICB2YXIgRm9jdXNTY2hlbWEgPSBbXG4gICAgICBvbkhhbmRsZXIoJ29uRm9jdXMnKSxcbiAgICAgIGRlZmF1bHRlZCgnc3RvcE1vdXNlZG93bicsIGZhbHNlKSxcbiAgICAgIGRlZmF1bHRlZCgnaWdub3JlJywgZmFsc2UpXG4gICAgXTtcblxuICAgIGNvbnN0IEZvY3VzaW5nID0gY3JlYXRlJDQoe1xuICAgICAgZmllbGRzOiBGb2N1c1NjaGVtYSxcbiAgICAgIG5hbWU6ICdmb2N1c2luZycsXG4gICAgICBhY3RpdmU6IEFjdGl2ZUZvY3VzLFxuICAgICAgYXBpczogRm9jdXNBcGlzXG4gICAgfSk7XG5cbiAgICBjb25zdCBTZXR1cEJlaGF2aW91ckNlbGxTdGF0ZSA9IGluaXRpYWxTdGF0ZSA9PiB7XG4gICAgICBjb25zdCBpbml0ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBjZWxsID0gQ2VsbChpbml0aWFsU3RhdGUpO1xuICAgICAgICBjb25zdCBnZXQgPSAoKSA9PiBjZWxsLmdldCgpO1xuICAgICAgICBjb25zdCBzZXQgPSBuZXdTdGF0ZSA9PiBjZWxsLnNldChuZXdTdGF0ZSk7XG4gICAgICAgIGNvbnN0IGNsZWFyID0gKCkgPT4gY2VsbC5zZXQoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgY29uc3QgcmVhZFN0YXRlID0gKCkgPT4gY2VsbC5nZXQoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBnZXQsXG4gICAgICAgICAgc2V0LFxuICAgICAgICAgIGNsZWFyLFxuICAgICAgICAgIHJlYWRTdGF0ZVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7IGluaXQgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlQXJpYVN0YXRlID0gKGNvbXBvbmVudCwgdG9nZ2xlQ29uZmlnLCB0b2dnbGVTdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgYXJpYUluZm8gPSB0b2dnbGVDb25maWcuYXJpYTtcbiAgICAgIGFyaWFJbmZvLnVwZGF0ZShjb21wb25lbnQsIGFyaWFJbmZvLCB0b2dnbGVTdGF0ZS5nZXQoKSk7XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVDbGFzcyA9IChjb21wb25lbnQsIHRvZ2dsZUNvbmZpZywgdG9nZ2xlU3RhdGUpID0+IHtcbiAgICAgIHRvZ2dsZUNvbmZpZy50b2dnbGVDbGFzcy5lYWNoKHRvZ2dsZUNsYXNzID0+IHtcbiAgICAgICAgaWYgKHRvZ2dsZVN0YXRlLmdldCgpKSB7XG4gICAgICAgICAgYWRkJDIoY29tcG9uZW50LmVsZW1lbnQsIHRvZ2dsZUNsYXNzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZW1vdmUkMihjb21wb25lbnQuZWxlbWVudCwgdG9nZ2xlQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHNldCQyID0gKGNvbXBvbmVudCwgdG9nZ2xlQ29uZmlnLCB0b2dnbGVTdGF0ZSwgc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHRvZ2dsZVN0YXRlLmdldCgpO1xuICAgICAgdG9nZ2xlU3RhdGUuc2V0KHN0YXRlKTtcbiAgICAgIHVwZGF0ZUNsYXNzKGNvbXBvbmVudCwgdG9nZ2xlQ29uZmlnLCB0b2dnbGVTdGF0ZSk7XG4gICAgICB1cGRhdGVBcmlhU3RhdGUoY29tcG9uZW50LCB0b2dnbGVDb25maWcsIHRvZ2dsZVN0YXRlKTtcbiAgICAgIGlmIChpbml0aWFsU3RhdGUgIT09IHN0YXRlKSB7XG4gICAgICAgIHRvZ2dsZUNvbmZpZy5vblRvZ2dsZWQoY29tcG9uZW50LCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB0b2dnbGUkMiA9IChjb21wb25lbnQsIHRvZ2dsZUNvbmZpZywgdG9nZ2xlU3RhdGUpID0+IHtcbiAgICAgIHNldCQyKGNvbXBvbmVudCwgdG9nZ2xlQ29uZmlnLCB0b2dnbGVTdGF0ZSwgIXRvZ2dsZVN0YXRlLmdldCgpKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uID0gKGNvbXBvbmVudCwgdG9nZ2xlQ29uZmlnLCB0b2dnbGVTdGF0ZSkgPT4ge1xuICAgICAgc2V0JDIoY29tcG9uZW50LCB0b2dnbGVDb25maWcsIHRvZ2dsZVN0YXRlLCB0cnVlKTtcbiAgICB9O1xuICAgIGNvbnN0IG9mZiA9IChjb21wb25lbnQsIHRvZ2dsZUNvbmZpZywgdG9nZ2xlU3RhdGUpID0+IHtcbiAgICAgIHNldCQyKGNvbXBvbmVudCwgdG9nZ2xlQ29uZmlnLCB0b2dnbGVTdGF0ZSwgZmFsc2UpO1xuICAgIH07XG4gICAgY29uc3QgaXNPbiA9IChjb21wb25lbnQsIHRvZ2dsZUNvbmZpZywgdG9nZ2xlU3RhdGUpID0+IHRvZ2dsZVN0YXRlLmdldCgpO1xuICAgIGNvbnN0IG9uTG9hZCA9IChjb21wb25lbnQsIHRvZ2dsZUNvbmZpZywgdG9nZ2xlU3RhdGUpID0+IHtcbiAgICAgIHNldCQyKGNvbXBvbmVudCwgdG9nZ2xlQ29uZmlnLCB0b2dnbGVTdGF0ZSwgdG9nZ2xlQ29uZmlnLnNlbGVjdGVkKTtcbiAgICB9O1xuXG4gICAgdmFyIFRvZ2dsZUFwaXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgb25Mb2FkOiBvbkxvYWQsXG4gICAgICAgIHRvZ2dsZTogdG9nZ2xlJDIsXG4gICAgICAgIGlzT246IGlzT24sXG4gICAgICAgIG9uOiBvbixcbiAgICAgICAgb2ZmOiBvZmYsXG4gICAgICAgIHNldDogc2V0JDJcbiAgICB9KTtcblxuICAgIGNvbnN0IGV4aGliaXQkMyA9ICgpID0+IG51JDcoe30pO1xuICAgIGNvbnN0IGV2ZW50cyRiID0gKHRvZ2dsZUNvbmZpZywgdG9nZ2xlU3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGUgPSBleGVjdXRlRXZlbnQodG9nZ2xlQ29uZmlnLCB0b2dnbGVTdGF0ZSwgdG9nZ2xlJDIpO1xuICAgICAgY29uc3QgbG9hZCA9IGxvYWRFdmVudCh0b2dnbGVDb25maWcsIHRvZ2dsZVN0YXRlLCBvbkxvYWQpO1xuICAgICAgcmV0dXJuIGRlcml2ZSQyKGZsYXR0ZW4oW1xuICAgICAgICB0b2dnbGVDb25maWcudG9nZ2xlT25FeGVjdXRlID8gW2V4ZWN1dGVdIDogW10sXG4gICAgICAgIFtsb2FkXVxuICAgICAgXSkpO1xuICAgIH07XG5cbiAgICB2YXIgQWN0aXZlVG9nZ2xlID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIGV4aGliaXQ6IGV4aGliaXQkMyxcbiAgICAgICAgZXZlbnRzOiBldmVudHMkYlxuICAgIH0pO1xuXG4gICAgY29uc3QgdXBkYXRlUHJlc3NlZCA9IChjb21wb25lbnQsIGFyaWFJbmZvLCBzdGF0dXMpID0+IHtcbiAgICAgIHNldCQ5KGNvbXBvbmVudC5lbGVtZW50LCAnYXJpYS1wcmVzc2VkJywgc3RhdHVzKTtcbiAgICAgIGlmIChhcmlhSW5mby5zeW5jV2l0aEV4cGFuZGVkKSB7XG4gICAgICAgIHVwZGF0ZUV4cGFuZGVkKGNvbXBvbmVudCwgYXJpYUluZm8sIHN0YXR1cyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVTZWxlY3RlZCA9IChjb21wb25lbnQsIGFyaWFJbmZvLCBzdGF0dXMpID0+IHtcbiAgICAgIHNldCQ5KGNvbXBvbmVudC5lbGVtZW50LCAnYXJpYS1zZWxlY3RlZCcsIHN0YXR1cyk7XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVDaGVja2VkID0gKGNvbXBvbmVudCwgYXJpYUluZm8sIHN0YXR1cykgPT4ge1xuICAgICAgc2V0JDkoY29tcG9uZW50LmVsZW1lbnQsICdhcmlhLWNoZWNrZWQnLCBzdGF0dXMpO1xuICAgIH07XG4gICAgY29uc3QgdXBkYXRlRXhwYW5kZWQgPSAoY29tcG9uZW50LCBhcmlhSW5mbywgc3RhdHVzKSA9PiB7XG4gICAgICBzZXQkOShjb21wb25lbnQuZWxlbWVudCwgJ2FyaWEtZXhwYW5kZWQnLCBzdGF0dXMpO1xuICAgIH07XG5cbiAgICB2YXIgVG9nZ2xlU2NoZW1hID0gW1xuICAgICAgZGVmYXVsdGVkKCdzZWxlY3RlZCcsIGZhbHNlKSxcbiAgICAgIG9wdGlvbiQzKCd0b2dnbGVDbGFzcycpLFxuICAgICAgZGVmYXVsdGVkKCd0b2dnbGVPbkV4ZWN1dGUnLCB0cnVlKSxcbiAgICAgIG9uSGFuZGxlcignb25Ub2dnbGVkJyksXG4gICAgICBkZWZhdWx0ZWRPZignYXJpYScsIHsgbW9kZTogJ25vbmUnIH0sIGNob29zZSQxKCdtb2RlJywge1xuICAgICAgICBwcmVzc2VkOiBbXG4gICAgICAgICAgZGVmYXVsdGVkKCdzeW5jV2l0aEV4cGFuZGVkJywgZmFsc2UpLFxuICAgICAgICAgIG91dHB1dCQxKCd1cGRhdGUnLCB1cGRhdGVQcmVzc2VkKVxuICAgICAgICBdLFxuICAgICAgICBjaGVja2VkOiBbb3V0cHV0JDEoJ3VwZGF0ZScsIHVwZGF0ZUNoZWNrZWQpXSxcbiAgICAgICAgZXhwYW5kZWQ6IFtvdXRwdXQkMSgndXBkYXRlJywgdXBkYXRlRXhwYW5kZWQpXSxcbiAgICAgICAgc2VsZWN0ZWQ6IFtvdXRwdXQkMSgndXBkYXRlJywgdXBkYXRlU2VsZWN0ZWQpXSxcbiAgICAgICAgbm9uZTogW291dHB1dCQxKCd1cGRhdGUnLCBub29wKV1cbiAgICAgIH0pKVxuICAgIF07XG5cbiAgICBjb25zdCBUb2dnbGluZyA9IGNyZWF0ZSQ0KHtcbiAgICAgIGZpZWxkczogVG9nZ2xlU2NoZW1hLFxuICAgICAgbmFtZTogJ3RvZ2dsaW5nJyxcbiAgICAgIGFjdGl2ZTogQWN0aXZlVG9nZ2xlLFxuICAgICAgYXBpczogVG9nZ2xlQXBpcyxcbiAgICAgIHN0YXRlOiBTZXR1cEJlaGF2aW91ckNlbGxTdGF0ZShmYWxzZSlcbiAgICB9KTtcblxuICAgIGNvbnN0IHBvaW50ZXJFdmVudHMgPSAoKSA9PiB7XG4gICAgICBjb25zdCBvbkNsaWNrID0gKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgc2ltdWxhdGVkRXZlbnQuc3RvcCgpO1xuICAgICAgICBlbWl0RXhlY3V0ZShjb21wb25lbnQpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHJ1biQxKGNsaWNrKCksIG9uQ2xpY2spLFxuICAgICAgICBydW4kMSh0YXAoKSwgb25DbGljayksXG4gICAgICAgIGN1dHRlcih0b3VjaHN0YXJ0KCkpLFxuICAgICAgICBjdXR0ZXIobW91c2Vkb3duKCkpXG4gICAgICBdO1xuICAgIH07XG4gICAgY29uc3QgZXZlbnRzJGEgPSBvcHRBY3Rpb24gPT4ge1xuICAgICAgY29uc3QgZXhlY3V0ZUhhbmRsZXIgPSBhY3Rpb24gPT4gcnVuT25FeGVjdXRlJDEoKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgYWN0aW9uKGNvbXBvbmVudCk7XG4gICAgICAgIHNpbXVsYXRlZEV2ZW50LnN0b3AoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRlcml2ZSQyKGZsYXR0ZW4oW1xuICAgICAgICBvcHRBY3Rpb24ubWFwKGV4ZWN1dGVIYW5kbGVyKS50b0FycmF5KCksXG4gICAgICAgIHBvaW50ZXJFdmVudHMoKVxuICAgICAgXSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBob3ZlckV2ZW50ID0gJ2FsbG95Lml0ZW0taG92ZXInO1xuICAgIGNvbnN0IGZvY3VzRXZlbnQgPSAnYWxsb3kuaXRlbS1mb2N1cyc7XG4gICAgY29uc3QgdG9nZ2xlZEV2ZW50ID0gJ2FsbG95Lml0ZW0tdG9nZ2xlZCc7XG4gICAgY29uc3Qgb25Ib3ZlciA9IGl0ZW0gPT4ge1xuICAgICAgaWYgKHNlYXJjaChpdGVtLmVsZW1lbnQpLmlzTm9uZSgpIHx8IEZvY3VzaW5nLmlzRm9jdXNlZChpdGVtKSkge1xuICAgICAgICBpZiAoIUZvY3VzaW5nLmlzRm9jdXNlZChpdGVtKSkge1xuICAgICAgICAgIEZvY3VzaW5nLmZvY3VzKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVtaXRXaXRoKGl0ZW0sIGhvdmVyRXZlbnQsIHsgaXRlbSB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG9uRm9jdXMkMSA9IGl0ZW0gPT4ge1xuICAgICAgZW1pdFdpdGgoaXRlbSwgZm9jdXNFdmVudCwgeyBpdGVtIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25Ub2dnbGVkID0gKGl0ZW0sIHN0YXRlKSA9PiB7XG4gICAgICBlbWl0V2l0aChpdGVtLCB0b2dnbGVkRXZlbnQsIHtcbiAgICAgICAgaXRlbSxcbiAgICAgICAgc3RhdGVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaG92ZXIgPSBjb25zdGFudCQxKGhvdmVyRXZlbnQpO1xuICAgIGNvbnN0IGZvY3VzJDEgPSBjb25zdGFudCQxKGZvY3VzRXZlbnQpO1xuICAgIGNvbnN0IHRvZ2dsZWQgPSBjb25zdGFudCQxKHRvZ2dsZWRFdmVudCk7XG5cbiAgICBjb25zdCBnZXRJdGVtUm9sZSA9IGRldGFpbCA9PiBkZXRhaWwudG9nZ2xpbmcubWFwKHRvZ2dsaW5nID0+IHRvZ2dsaW5nLmV4Y2x1c2l2ZSA/ICdtZW51aXRlbXJhZGlvJyA6ICdtZW51aXRlbWNoZWNrYm94JykuZ2V0T3IoJ21lbnVpdGVtJyk7XG4gICAgY29uc3QgZ2V0VG9nZ2xpbmdTcGVjID0gdENvbmZpZyA9PiAoe1xuICAgICAgYXJpYTogeyBtb2RlOiAnY2hlY2tlZCcgfSxcbiAgICAgIC4uLmZpbHRlciQxKHRDb25maWcsIChfdmFsdWUsIG5hbWUpID0+IG5hbWUgIT09ICdleGNsdXNpdmUnKSxcbiAgICAgIG9uVG9nZ2xlZDogKGNvbXBvbmVudCwgc3RhdGUpID0+IHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odENvbmZpZy5vblRvZ2dsZWQpKSB7XG4gICAgICAgICAgdENvbmZpZy5vblRvZ2dsZWQoY29tcG9uZW50LCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Ub2dnbGVkKGNvbXBvbmVudCwgc3RhdGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGJ1aWxkZXIkMiA9IGRldGFpbCA9PiAoe1xuICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgZG9tTW9kaWZpY2F0aW9uOiB7XG4gICAgICAgIC4uLmRldGFpbC5kb21Nb2RpZmljYXRpb24sXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAncm9sZSc6IGdldEl0ZW1Sb2xlKGRldGFpbCksXG4gICAgICAgICAgLi4uZGV0YWlsLmRvbU1vZGlmaWNhdGlvbi5hdHRyaWJ1dGVzLFxuICAgICAgICAgICdhcmlhLWhhc3BvcHVwJzogZGV0YWlsLmhhc1N1Ym1lbnUsXG4gICAgICAgICAgLi4uZGV0YWlsLmhhc1N1Ym1lbnUgPyB7ICdhcmlhLWV4cGFuZGVkJzogZmFsc2UgfSA6IHt9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBiZWhhdmlvdXJzOiBTa2V0Y2hCZWhhdmlvdXJzLmF1Z21lbnQoZGV0YWlsLml0ZW1CZWhhdmlvdXJzLCBbXG4gICAgICAgIGRldGFpbC50b2dnbGluZy5mb2xkKFRvZ2dsaW5nLnJldm9rZSwgdENvbmZpZyA9PiBUb2dnbGluZy5jb25maWcoZ2V0VG9nZ2xpbmdTcGVjKHRDb25maWcpKSksXG4gICAgICAgIEZvY3VzaW5nLmNvbmZpZyh7XG4gICAgICAgICAgaWdub3JlOiBkZXRhaWwuaWdub3JlRm9jdXMsXG4gICAgICAgICAgc3RvcE1vdXNlZG93bjogZGV0YWlsLmlnbm9yZUZvY3VzLFxuICAgICAgICAgIG9uRm9jdXM6IGNvbXBvbmVudCA9PiB7XG4gICAgICAgICAgICBvbkZvY3VzJDEoY29tcG9uZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBLZXlpbmcuY29uZmlnKHsgbW9kZTogJ2V4ZWN1dGlvbicgfSksXG4gICAgICAgIFJlcHJlc2VudGluZy5jb25maWcoe1xuICAgICAgICAgIHN0b3JlOiB7XG4gICAgICAgICAgICBtb2RlOiAnbWVtb3J5JyxcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogZGV0YWlsLmRhdGFcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBjb25maWcoJ2l0ZW0tdHlwZS1ldmVudHMnLCBbXG4gICAgICAgICAgLi4ucG9pbnRlckV2ZW50cygpLFxuICAgICAgICAgIHJ1biQxKG1vdXNlb3ZlcigpLCBvbkhvdmVyKSxcbiAgICAgICAgICBydW4kMShmb2N1c0l0ZW0oKSwgRm9jdXNpbmcuZm9jdXMpXG4gICAgICAgIF0pXG4gICAgICBdKSxcbiAgICAgIGNvbXBvbmVudHM6IGRldGFpbC5jb21wb25lbnRzLFxuICAgICAgZXZlbnRPcmRlcjogZGV0YWlsLmV2ZW50T3JkZXJcbiAgICB9KTtcbiAgICBjb25zdCBzY2hlbWEkcCA9IFtcbiAgICAgIHJlcXVpcmVkJDEoJ2RhdGEnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ2NvbXBvbmVudHMnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ2RvbScpLFxuICAgICAgZGVmYXVsdGVkKCdoYXNTdWJtZW51JywgZmFsc2UpLFxuICAgICAgb3B0aW9uJDMoJ3RvZ2dsaW5nJyksXG4gICAgICBTa2V0Y2hCZWhhdmlvdXJzLmZpZWxkKCdpdGVtQmVoYXZpb3VycycsIFtcbiAgICAgICAgVG9nZ2xpbmcsXG4gICAgICAgIEZvY3VzaW5nLFxuICAgICAgICBLZXlpbmcsXG4gICAgICAgIFJlcHJlc2VudGluZ1xuICAgICAgXSksXG4gICAgICBkZWZhdWx0ZWQoJ2lnbm9yZUZvY3VzJywgZmFsc2UpLFxuICAgICAgZGVmYXVsdGVkKCdkb21Nb2RpZmljYXRpb24nLCB7fSksXG4gICAgICBvdXRwdXQkMSgnYnVpbGRlcicsIGJ1aWxkZXIkMiksXG4gICAgICBkZWZhdWx0ZWQoJ2V2ZW50T3JkZXInLCB7fSlcbiAgICBdO1xuXG4gICAgY29uc3QgYnVpbGRlciQxID0gZGV0YWlsID0+ICh7XG4gICAgICBkb206IGRldGFpbC5kb20sXG4gICAgICBjb21wb25lbnRzOiBkZXRhaWwuY29tcG9uZW50cyxcbiAgICAgIGV2ZW50czogZGVyaXZlJDIoW3N0b3BwZXIoZm9jdXNJdGVtKCkpXSlcbiAgICB9KTtcbiAgICBjb25zdCBzY2hlbWEkbyA9IFtcbiAgICAgIHJlcXVpcmVkJDEoJ2RvbScpLFxuICAgICAgcmVxdWlyZWQkMSgnY29tcG9uZW50cycpLFxuICAgICAgb3V0cHV0JDEoJ2J1aWxkZXInLCBidWlsZGVyJDEpXG4gICAgXTtcblxuICAgIGNvbnN0IG93bmVyJDIgPSBjb25zdGFudCQxKCdpdGVtLXdpZGdldCcpO1xuICAgIGNvbnN0IHBhcnRzJGggPSBjb25zdGFudCQxKFtyZXF1aXJlZCh7XG4gICAgICAgIG5hbWU6ICd3aWRnZXQnLFxuICAgICAgICBvdmVycmlkZXM6IGRldGFpbCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtSZXByZXNlbnRpbmcuY29uZmlnKHtcbiAgICAgICAgICAgICAgICBzdG9yZToge1xuICAgICAgICAgICAgICAgICAgbW9kZTogJ21hbnVhbCcsXG4gICAgICAgICAgICAgICAgICBnZXRWYWx1ZTogX2NvbXBvbmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXRhaWwuZGF0YTtcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBzZXRWYWx1ZTogbm9vcFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSldKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pXSk7XG5cbiAgICBjb25zdCBidWlsZGVyID0gZGV0YWlsID0+IHtcbiAgICAgIGNvbnN0IHN1YnMgPSBzdWJzdGl0dXRlcyhvd25lciQyKCksIGRldGFpbCwgcGFydHMkaCgpKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb21wb25lbnRzJDEob3duZXIkMigpLCBkZXRhaWwsIHN1YnMuaW50ZXJuYWxzKCkpO1xuICAgICAgY29uc3QgZm9jdXNXaWRnZXQgPSBjb21wb25lbnQgPT4gZ2V0UGFydChjb21wb25lbnQsIGRldGFpbCwgJ3dpZGdldCcpLm1hcCh3aWRnZXQgPT4ge1xuICAgICAgICBLZXlpbmcuZm9jdXNJbih3aWRnZXQpO1xuICAgICAgICByZXR1cm4gd2lkZ2V0O1xuICAgICAgfSk7XG4gICAgICBjb25zdCBvbkhvcml6b250YWxBcnJvdyA9IChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50KSA9PiBpbnNpZGUoc2ltdWxhdGVkRXZlbnQuZXZlbnQudGFyZ2V0KSA/IE9wdGlvbmFsLm5vbmUoKSA6ICgoKSA9PiB7XG4gICAgICAgIGlmIChkZXRhaWwuYXV0b2ZvY3VzKSB7XG4gICAgICAgICAgc2ltdWxhdGVkRXZlbnQuc2V0U291cmNlKGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH0pKCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IGRldGFpbC5kb20sXG4gICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgIGRvbU1vZGlmaWNhdGlvbjogZGV0YWlsLmRvbU1vZGlmaWNhdGlvbixcbiAgICAgICAgZXZlbnRzOiBkZXJpdmUkMihbXG4gICAgICAgICAgcnVuT25FeGVjdXRlJDEoKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGZvY3VzV2lkZ2V0KGNvbXBvbmVudCkuZWFjaChfd2lkZ2V0ID0+IHtcbiAgICAgICAgICAgICAgc2ltdWxhdGVkRXZlbnQuc3RvcCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVuJDEobW91c2VvdmVyKCksIG9uSG92ZXIpLFxuICAgICAgICAgIHJ1biQxKGZvY3VzSXRlbSgpLCAoY29tcG9uZW50LCBfc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChkZXRhaWwuYXV0b2ZvY3VzKSB7XG4gICAgICAgICAgICAgIGZvY3VzV2lkZ2V0KGNvbXBvbmVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBGb2N1c2luZy5mb2N1cyhjb21wb25lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF0pLFxuICAgICAgICBiZWhhdmlvdXJzOiBTa2V0Y2hCZWhhdmlvdXJzLmF1Z21lbnQoZGV0YWlsLndpZGdldEJlaGF2aW91cnMsIFtcbiAgICAgICAgICBSZXByZXNlbnRpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIHN0b3JlOiB7XG4gICAgICAgICAgICAgIG1vZGU6ICdtZW1vcnknLFxuICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IGRldGFpbC5kYXRhXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgRm9jdXNpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIGlnbm9yZTogZGV0YWlsLmlnbm9yZUZvY3VzLFxuICAgICAgICAgICAgb25Gb2N1czogY29tcG9uZW50ID0+IHtcbiAgICAgICAgICAgICAgb25Gb2N1cyQxKGNvbXBvbmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBtb2RlOiAnc3BlY2lhbCcsXG4gICAgICAgICAgICBmb2N1c0luOiBkZXRhaWwuYXV0b2ZvY3VzID8gY29tcG9uZW50ID0+IHtcbiAgICAgICAgICAgICAgZm9jdXNXaWRnZXQoY29tcG9uZW50KTtcbiAgICAgICAgICAgIH0gOiByZXZva2UoKSxcbiAgICAgICAgICAgIG9uTGVmdDogb25Ib3Jpem9udGFsQXJyb3csXG4gICAgICAgICAgICBvblJpZ2h0OiBvbkhvcml6b250YWxBcnJvdyxcbiAgICAgICAgICAgIG9uRXNjYXBlOiAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIUZvY3VzaW5nLmlzRm9jdXNlZChjb21wb25lbnQpICYmICFkZXRhaWwuYXV0b2ZvY3VzKSB7XG4gICAgICAgICAgICAgICAgRm9jdXNpbmcuZm9jdXMoY29tcG9uZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZXRhaWwuYXV0b2ZvY3VzKSB7XG4gICAgICAgICAgICAgICAgc2ltdWxhdGVkRXZlbnQuc2V0U291cmNlKGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHNjaGVtYSRuID0gW1xuICAgICAgcmVxdWlyZWQkMSgndWlkJyksXG4gICAgICByZXF1aXJlZCQxKCdkYXRhJyksXG4gICAgICByZXF1aXJlZCQxKCdjb21wb25lbnRzJyksXG4gICAgICByZXF1aXJlZCQxKCdkb20nKSxcbiAgICAgIGRlZmF1bHRlZCgnYXV0b2ZvY3VzJywgZmFsc2UpLFxuICAgICAgZGVmYXVsdGVkKCdpZ25vcmVGb2N1cycsIGZhbHNlKSxcbiAgICAgIFNrZXRjaEJlaGF2aW91cnMuZmllbGQoJ3dpZGdldEJlaGF2aW91cnMnLCBbXG4gICAgICAgIFJlcHJlc2VudGluZyxcbiAgICAgICAgRm9jdXNpbmcsXG4gICAgICAgIEtleWluZ1xuICAgICAgXSksXG4gICAgICBkZWZhdWx0ZWQoJ2RvbU1vZGlmaWNhdGlvbicsIHt9KSxcbiAgICAgIGRlZmF1bHRVaWRzU2NoZW1hKHBhcnRzJGgoKSksXG4gICAgICBvdXRwdXQkMSgnYnVpbGRlcicsIGJ1aWxkZXIpXG4gICAgXTtcblxuICAgIGNvbnN0IGl0ZW1TY2hlbWEkMiA9IGNob29zZSQxKCd0eXBlJywge1xuICAgICAgd2lkZ2V0OiBzY2hlbWEkbixcbiAgICAgIGl0ZW06IHNjaGVtYSRwLFxuICAgICAgc2VwYXJhdG9yOiBzY2hlbWEkb1xuICAgIH0pO1xuICAgIGNvbnN0IGNvbmZpZ3VyZUdyaWQgPSAoZGV0YWlsLCBtb3ZlbWVudEluZm8pID0+ICh7XG4gICAgICBtb2RlOiAnZmxhdGdyaWQnLFxuICAgICAgc2VsZWN0b3I6ICcuJyArIGRldGFpbC5tYXJrZXJzLml0ZW0sXG4gICAgICBpbml0U2l6ZToge1xuICAgICAgICBudW1Db2x1bW5zOiBtb3ZlbWVudEluZm8uaW5pdFNpemUubnVtQ29sdW1ucyxcbiAgICAgICAgbnVtUm93czogbW92ZW1lbnRJbmZvLmluaXRTaXplLm51bVJvd3NcbiAgICAgIH0sXG4gICAgICBmb2N1c01hbmFnZXI6IGRldGFpbC5mb2N1c01hbmFnZXJcbiAgICB9KTtcbiAgICBjb25zdCBjb25maWd1cmVNYXRyaXggPSAoZGV0YWlsLCBtb3ZlbWVudEluZm8pID0+ICh7XG4gICAgICBtb2RlOiAnbWF0cml4JyxcbiAgICAgIHNlbGVjdG9yczoge1xuICAgICAgICByb3c6IG1vdmVtZW50SW5mby5yb3dTZWxlY3RvcixcbiAgICAgICAgY2VsbDogJy4nICsgZGV0YWlsLm1hcmtlcnMuaXRlbVxuICAgICAgfSxcbiAgICAgIHByZXZpb3VzU2VsZWN0b3I6IG1vdmVtZW50SW5mby5wcmV2aW91c1NlbGVjdG9yLFxuICAgICAgZm9jdXNNYW5hZ2VyOiBkZXRhaWwuZm9jdXNNYW5hZ2VyXG4gICAgfSk7XG4gICAgY29uc3QgY29uZmlndXJlTWVudSA9IChkZXRhaWwsIG1vdmVtZW50SW5mbykgPT4gKHtcbiAgICAgIG1vZGU6ICdtZW51JyxcbiAgICAgIHNlbGVjdG9yOiAnLicgKyBkZXRhaWwubWFya2Vycy5pdGVtLFxuICAgICAgbW92ZU9uVGFiOiBtb3ZlbWVudEluZm8ubW92ZU9uVGFiLFxuICAgICAgZm9jdXNNYW5hZ2VyOiBkZXRhaWwuZm9jdXNNYW5hZ2VyXG4gICAgfSk7XG4gICAgY29uc3QgcGFydHMkZyA9IGNvbnN0YW50JDEoW2dyb3VwKHtcbiAgICAgICAgZmFjdG9yeToge1xuICAgICAgICAgIHNrZXRjaDogc3BlYyA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtSW5mbyA9IGFzUmF3T3JEaWUkMSgnbWVudS5zcGVjIGl0ZW0nLCBpdGVtU2NoZW1hJDIsIHNwZWMpO1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1JbmZvLmJ1aWxkZXIoaXRlbUluZm8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbmFtZTogJ2l0ZW1zJyxcbiAgICAgICAgdW5pdDogJ2l0ZW0nLFxuICAgICAgICBkZWZhdWx0czogKGRldGFpbCwgdSkgPT4ge1xuICAgICAgICAgIHJldHVybiBoYXMkMih1LCAndWlkJykgPyB1IDoge1xuICAgICAgICAgICAgLi4udSxcbiAgICAgICAgICAgIHVpZDogZ2VuZXJhdGUkNSgnaXRlbScpXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgb3ZlcnJpZGVzOiAoZGV0YWlsLCB1KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHUudHlwZSxcbiAgICAgICAgICAgIGlnbm9yZUZvY3VzOiBkZXRhaWwuZmFrZUZvY3VzLFxuICAgICAgICAgICAgZG9tTW9kaWZpY2F0aW9uOiB7IGNsYXNzZXM6IFtkZXRhaWwubWFya2Vycy5pdGVtXSB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSldKTtcbiAgICBjb25zdCBzY2hlbWEkbSA9IGNvbnN0YW50JDEoW1xuICAgICAgcmVxdWlyZWQkMSgndmFsdWUnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ2l0ZW1zJyksXG4gICAgICByZXF1aXJlZCQxKCdkb20nKSxcbiAgICAgIHJlcXVpcmVkJDEoJ2NvbXBvbmVudHMnKSxcbiAgICAgIGRlZmF1bHRlZCgnZXZlbnRPcmRlcicsIHt9KSxcbiAgICAgIGZpZWxkKCdtZW51QmVoYXZpb3VycycsIFtcbiAgICAgICAgSGlnaGxpZ2h0aW5nLFxuICAgICAgICBSZXByZXNlbnRpbmcsXG4gICAgICAgIENvbXBvc2luZyxcbiAgICAgICAgS2V5aW5nXG4gICAgICBdKSxcbiAgICAgIGRlZmF1bHRlZE9mKCdtb3ZlbWVudCcsIHtcbiAgICAgICAgbW9kZTogJ21lbnUnLFxuICAgICAgICBtb3ZlT25UYWI6IHRydWVcbiAgICAgIH0sIGNob29zZSQxKCdtb2RlJywge1xuICAgICAgICBncmlkOiBbXG4gICAgICAgICAgaW5pdFNpemUoKSxcbiAgICAgICAgICBvdXRwdXQkMSgnY29uZmlnJywgY29uZmlndXJlR3JpZClcbiAgICAgICAgXSxcbiAgICAgICAgbWF0cml4OiBbXG4gICAgICAgICAgb3V0cHV0JDEoJ2NvbmZpZycsIGNvbmZpZ3VyZU1hdHJpeCksXG4gICAgICAgICAgcmVxdWlyZWQkMSgncm93U2VsZWN0b3InKSxcbiAgICAgICAgICBkZWZhdWx0ZWQoJ3ByZXZpb3VzU2VsZWN0b3InLCBPcHRpb25hbC5ub25lKVxuICAgICAgICBdLFxuICAgICAgICBtZW51OiBbXG4gICAgICAgICAgZGVmYXVsdGVkKCdtb3ZlT25UYWInLCB0cnVlKSxcbiAgICAgICAgICBvdXRwdXQkMSgnY29uZmlnJywgY29uZmlndXJlTWVudSlcbiAgICAgICAgXVxuICAgICAgfSkpLFxuICAgICAgaXRlbU1hcmtlcnMoKSxcbiAgICAgIGRlZmF1bHRlZCgnZmFrZUZvY3VzJywgZmFsc2UpLFxuICAgICAgZGVmYXVsdGVkKCdmb2N1c01hbmFnZXInLCBkb20kMigpKSxcbiAgICAgIG9uSGFuZGxlcignb25IaWdobGlnaHQnKSxcbiAgICAgIG9uSGFuZGxlcignb25EZWhpZ2hsaWdodCcpXG4gICAgXSk7XG5cbiAgICBjb25zdCBmb2N1cyA9IGNvbnN0YW50JDEoJ2FsbG95Lm1lbnUtZm9jdXMnKTtcblxuICAgIGNvbnN0IGRlc2VsZWN0T3RoZXJSYWRpb0l0ZW1zID0gKG1lbnUsIGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGNoZWNrZWRSYWRpb0l0ZW1zID0gZGVzY2VuZGFudHMobWVudS5lbGVtZW50LCAnW3JvbGU9XCJtZW51aXRlbXJhZGlvXCJdW2FyaWEtY2hlY2tlZD1cInRydWVcIl0nKTtcbiAgICAgIGVhY2gkMShjaGVja2VkUmFkaW9JdGVtcywgZWxlID0+IHtcbiAgICAgICAgaWYgKCFlcShlbGUsIGl0ZW0uZWxlbWVudCkpIHtcbiAgICAgICAgICBtZW51LmdldFN5c3RlbSgpLmdldEJ5RG9tKGVsZSkuZWFjaChjID0+IHtcbiAgICAgICAgICAgIFRvZ2dsaW5nLm9mZihjKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBtYWtlJDcgPSAoZGV0YWlsLCBjb21wb25lbnRzLCBfc3BlYywgX2V4dGVybmFscykgPT4gKHtcbiAgICAgIHVpZDogZGV0YWlsLnVpZCxcbiAgICAgIGRvbTogZGV0YWlsLmRvbSxcbiAgICAgIG1hcmtlcnM6IGRldGFpbC5tYXJrZXJzLFxuICAgICAgYmVoYXZpb3VyczogYXVnbWVudChkZXRhaWwubWVudUJlaGF2aW91cnMsIFtcbiAgICAgICAgSGlnaGxpZ2h0aW5nLmNvbmZpZyh7XG4gICAgICAgICAgaGlnaGxpZ2h0Q2xhc3M6IGRldGFpbC5tYXJrZXJzLnNlbGVjdGVkSXRlbSxcbiAgICAgICAgICBpdGVtQ2xhc3M6IGRldGFpbC5tYXJrZXJzLml0ZW0sXG4gICAgICAgICAgb25IaWdobGlnaHQ6IGRldGFpbC5vbkhpZ2hsaWdodCxcbiAgICAgICAgICBvbkRlaGlnaGxpZ2h0OiBkZXRhaWwub25EZWhpZ2hsaWdodFxuICAgICAgICB9KSxcbiAgICAgICAgUmVwcmVzZW50aW5nLmNvbmZpZyh7XG4gICAgICAgICAgc3RvcmU6IHtcbiAgICAgICAgICAgIG1vZGU6ICdtZW1vcnknLFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiBkZXRhaWwudmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBDb21wb3NpbmcuY29uZmlnKHsgZmluZDogT3B0aW9uYWwuc29tZSB9KSxcbiAgICAgICAgS2V5aW5nLmNvbmZpZyhkZXRhaWwubW92ZW1lbnQuY29uZmlnKGRldGFpbCwgZGV0YWlsLm1vdmVtZW50KSlcbiAgICAgIF0pLFxuICAgICAgZXZlbnRzOiBkZXJpdmUkMihbXG4gICAgICAgIHJ1biQxKGZvY3VzJDEoKSwgKG1lbnUsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgZXZlbnQgPSBzaW11bGF0ZWRFdmVudC5ldmVudDtcbiAgICAgICAgICBtZW51LmdldFN5c3RlbSgpLmdldEJ5RG9tKGV2ZW50LnRhcmdldCkuZWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIEhpZ2hsaWdodGluZy5oaWdobGlnaHQobWVudSwgaXRlbSk7XG4gICAgICAgICAgICBzaW11bGF0ZWRFdmVudC5zdG9wKCk7XG4gICAgICAgICAgICBlbWl0V2l0aChtZW51LCBmb2N1cygpLCB7XG4gICAgICAgICAgICAgIG1lbnUsXG4gICAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgcnVuJDEoaG92ZXIoKSwgKG1lbnUsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbSA9IHNpbXVsYXRlZEV2ZW50LmV2ZW50Lml0ZW07XG4gICAgICAgICAgSGlnaGxpZ2h0aW5nLmhpZ2hsaWdodChtZW51LCBpdGVtKTtcbiAgICAgICAgfSksXG4gICAgICAgIHJ1biQxKHRvZ2dsZWQoKSwgKG1lbnUsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3Qge2l0ZW0sIHN0YXRlfSA9IHNpbXVsYXRlZEV2ZW50LmV2ZW50O1xuICAgICAgICAgIGlmIChzdGF0ZSAmJiBnZXQkZihpdGVtLmVsZW1lbnQsICdyb2xlJykgPT09ICdtZW51aXRlbXJhZGlvJykge1xuICAgICAgICAgICAgZGVzZWxlY3RPdGhlclJhZGlvSXRlbXMobWVudSwgaXRlbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgXSksXG4gICAgICBjb21wb25lbnRzLFxuICAgICAgZXZlbnRPcmRlcjogZGV0YWlsLmV2ZW50T3JkZXIsXG4gICAgICBkb21Nb2RpZmljYXRpb246IHsgYXR0cmlidXRlczogeyByb2xlOiAnbWVudScgfSB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBNZW51ID0gY29tcG9zaXRlKHtcbiAgICAgIG5hbWU6ICdNZW51JyxcbiAgICAgIGNvbmZpZ0ZpZWxkczogc2NoZW1hJG0oKSxcbiAgICAgIHBhcnRGaWVsZHM6IHBhcnRzJGcoKSxcbiAgICAgIGZhY3Rvcnk6IG1ha2UkN1xuICAgIH0pO1xuXG4gICAgY29uc3QgdHJhbnNwb3NlJDEgPSBvYmogPT4gdHVwbGVNYXAob2JqLCAodiwgaykgPT4gKHtcbiAgICAgIGs6IHYsXG4gICAgICB2OiBrXG4gICAgfSkpO1xuICAgIGNvbnN0IHRyYWNlID0gKGl0ZW1zLCBieUl0ZW0sIGJ5TWVudSwgZmluaXNoKSA9PiBnZXQkZyhieU1lbnUsIGZpbmlzaCkuYmluZCh0cmlnZ2VySXRlbSA9PiBnZXQkZyhpdGVtcywgdHJpZ2dlckl0ZW0pLmJpbmQodHJpZ2dlck1lbnUgPT4ge1xuICAgICAgY29uc3QgcmVzdCA9IHRyYWNlKGl0ZW1zLCBieUl0ZW0sIGJ5TWVudSwgdHJpZ2dlck1lbnUpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoW3RyaWdnZXJNZW51XS5jb25jYXQocmVzdCkpO1xuICAgIH0pKS5nZXRPcihbXSk7XG4gICAgY29uc3QgZ2VuZXJhdGUkMiA9IChtZW51cywgZXhwYW5zaW9ucykgPT4ge1xuICAgICAgY29uc3QgaXRlbXMgPSB7fTtcbiAgICAgIGVhY2gobWVudXMsIChtZW51SXRlbXMsIG1lbnUpID0+IHtcbiAgICAgICAgZWFjaCQxKG1lbnVJdGVtcywgaXRlbSA9PiB7XG4gICAgICAgICAgaXRlbXNbaXRlbV0gPSBtZW51O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYnlJdGVtID0gZXhwYW5zaW9ucztcbiAgICAgIGNvbnN0IGJ5TWVudSA9IHRyYW5zcG9zZSQxKGV4cGFuc2lvbnMpO1xuICAgICAgY29uc3QgbWVudVBhdGhzID0gbWFwJDEoYnlNZW51LCAoX3RyaWdnZXJJdGVtLCBzdWJtZW51KSA9PiBbc3VibWVudV0uY29uY2F0KHRyYWNlKGl0ZW1zLCBieUl0ZW0sIGJ5TWVudSwgc3VibWVudSkpKTtcbiAgICAgIHJldHVybiBtYXAkMShpdGVtcywgbWVudSA9PiBnZXQkZyhtZW51UGF0aHMsIG1lbnUpLmdldE9yKFttZW51XSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBpbml0JGMgPSAoKSA9PiB7XG4gICAgICBjb25zdCBleHBhbnNpb25zID0gQ2VsbCh7fSk7XG4gICAgICBjb25zdCBtZW51cyA9IENlbGwoe30pO1xuICAgICAgY29uc3QgcGF0aHMgPSBDZWxsKHt9KTtcbiAgICAgIGNvbnN0IHByaW1hcnkgPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBkaXJlY3RvcnkgPSBDZWxsKHt9KTtcbiAgICAgIGNvbnN0IGNsZWFyID0gKCkgPT4ge1xuICAgICAgICBleHBhbnNpb25zLnNldCh7fSk7XG4gICAgICAgIG1lbnVzLnNldCh7fSk7XG4gICAgICAgIHBhdGhzLnNldCh7fSk7XG4gICAgICAgIHByaW1hcnkuY2xlYXIoKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0NsZWFyID0gKCkgPT4gcHJpbWFyeS5nZXQoKS5pc05vbmUoKTtcbiAgICAgIGNvbnN0IHNldE1lbnVCdWlsdCA9IChtZW51TmFtZSwgYnVpbHQpID0+IHtcbiAgICAgICAgbWVudXMuc2V0KHtcbiAgICAgICAgICAuLi5tZW51cy5nZXQoKSxcbiAgICAgICAgICBbbWVudU5hbWVdOiB7XG4gICAgICAgICAgICB0eXBlOiAncHJlcGFyZWQnLFxuICAgICAgICAgICAgbWVudTogYnVpbHRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldENvbnRlbnRzID0gKHNQcmltYXJ5LCBzTWVudXMsIHNFeHBhbnNpb25zLCBkaXIpID0+IHtcbiAgICAgICAgcHJpbWFyeS5zZXQoc1ByaW1hcnkpO1xuICAgICAgICBleHBhbnNpb25zLnNldChzRXhwYW5zaW9ucyk7XG4gICAgICAgIG1lbnVzLnNldChzTWVudXMpO1xuICAgICAgICBkaXJlY3Rvcnkuc2V0KGRpcik7XG4gICAgICAgIGNvbnN0IHNQYXRocyA9IGdlbmVyYXRlJDIoZGlyLCBzRXhwYW5zaW9ucyk7XG4gICAgICAgIHBhdGhzLnNldChzUGF0aHMpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldFRyaWdnZXJpbmdJdGVtID0gbWVudVZhbHVlID0+IGZpbmQkNChleHBhbnNpb25zLmdldCgpLCAodiwgX2spID0+IHYgPT09IG1lbnVWYWx1ZSk7XG4gICAgICBjb25zdCBnZXRUcmlnZ2VyRGF0YSA9IChtZW51VmFsdWUsIGdldEl0ZW1CeVZhbHVlLCBwYXRoKSA9PiBnZXRQcmVwYXJlZE1lbnUobWVudVZhbHVlKS5iaW5kKG1lbnUgPT4gZ2V0VHJpZ2dlcmluZ0l0ZW0obWVudVZhbHVlKS5iaW5kKHRyaWdnZXJpbmdJdGVtVmFsdWUgPT4gZ2V0SXRlbUJ5VmFsdWUodHJpZ2dlcmluZ0l0ZW1WYWx1ZSkubWFwKHRyaWdnZXJlZEl0ZW0gPT4gKHtcbiAgICAgICAgdHJpZ2dlcmVkTWVudTogbWVudSxcbiAgICAgICAgdHJpZ2dlcmluZ0l0ZW06IHRyaWdnZXJlZEl0ZW0sXG4gICAgICAgIHRyaWdnZXJpbmdQYXRoOiBwYXRoXG4gICAgICB9KSkpKTtcbiAgICAgIGNvbnN0IGdldFRyaWdnZXJpbmdQYXRoID0gKGl0ZW1WYWx1ZSwgZ2V0SXRlbUJ5VmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgZXh0cmFQYXRoID0gZmlsdGVyJDIobG9va3VwSXRlbShpdGVtVmFsdWUpLnRvQXJyYXkoKSwgbWVudVZhbHVlID0+IGdldFByZXBhcmVkTWVudShtZW51VmFsdWUpLmlzU29tZSgpKTtcbiAgICAgICAgcmV0dXJuIGdldCRnKHBhdGhzLmdldCgpLCBpdGVtVmFsdWUpLmJpbmQocGF0aCA9PiB7XG4gICAgICAgICAgY29uc3QgcmV2UGF0aCA9IHJldmVyc2UoZXh0cmFQYXRoLmNvbmNhdChwYXRoKSk7XG4gICAgICAgICAgY29uc3QgdHJpZ2dlcnMgPSBiaW5kJDMocmV2UGF0aCwgKG1lbnVWYWx1ZSwgbWVudUluZGV4KSA9PiBnZXRUcmlnZ2VyRGF0YShtZW51VmFsdWUsIGdldEl0ZW1CeVZhbHVlLCByZXZQYXRoLnNsaWNlKDAsIG1lbnVJbmRleCArIDEpKS5mb2xkKCgpID0+IGlzJDEocHJpbWFyeS5nZXQoKSwgbWVudVZhbHVlKSA/IFtdIDogW09wdGlvbmFsLm5vbmUoKV0sIGRhdGEgPT4gW09wdGlvbmFsLnNvbWUoZGF0YSldKSk7XG4gICAgICAgICAgcmV0dXJuIHNlcXVlbmNlKHRyaWdnZXJzKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZXhwYW5kID0gaXRlbVZhbHVlID0+IGdldCRnKGV4cGFuc2lvbnMuZ2V0KCksIGl0ZW1WYWx1ZSkubWFwKG1lbnUgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gZ2V0JGcocGF0aHMuZ2V0KCksIGl0ZW1WYWx1ZSkuZ2V0T3IoW10pO1xuICAgICAgICByZXR1cm4gW21lbnVdLmNvbmNhdChjdXJyZW50KTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY29sbGFwc2UgPSBpdGVtVmFsdWUgPT4gZ2V0JGcocGF0aHMuZ2V0KCksIGl0ZW1WYWx1ZSkuYmluZChwYXRoID0+IHBhdGgubGVuZ3RoID4gMSA/IE9wdGlvbmFsLnNvbWUocGF0aC5zbGljZSgxKSkgOiBPcHRpb25hbC5ub25lKCkpO1xuICAgICAgY29uc3QgcmVmcmVzaCA9IGl0ZW1WYWx1ZSA9PiBnZXQkZyhwYXRocy5nZXQoKSwgaXRlbVZhbHVlKTtcbiAgICAgIGNvbnN0IGdldFByZXBhcmVkTWVudSA9IG1lbnVWYWx1ZSA9PiBsb29rdXBNZW51KG1lbnVWYWx1ZSkuYmluZChleHRyYWN0UHJlcGFyZWRNZW51KTtcbiAgICAgIGNvbnN0IGxvb2t1cE1lbnUgPSBtZW51VmFsdWUgPT4gZ2V0JGcobWVudXMuZ2V0KCksIG1lbnVWYWx1ZSk7XG4gICAgICBjb25zdCBsb29rdXBJdGVtID0gaXRlbVZhbHVlID0+IGdldCRnKGV4cGFuc2lvbnMuZ2V0KCksIGl0ZW1WYWx1ZSk7XG4gICAgICBjb25zdCBvdGhlck1lbnVzID0gcGF0aCA9PiB7XG4gICAgICAgIGNvbnN0IG1lbnVWYWx1ZXMgPSBkaXJlY3RvcnkuZ2V0KCk7XG4gICAgICAgIHJldHVybiBkaWZmZXJlbmNlKGtleXMobWVudVZhbHVlcyksIHBhdGgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldFByaW1hcnkgPSAoKSA9PiBwcmltYXJ5LmdldCgpLmJpbmQoZ2V0UHJlcGFyZWRNZW51KTtcbiAgICAgIGNvbnN0IGdldE1lbnVzID0gKCkgPT4gbWVudXMuZ2V0KCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXRNZW51QnVpbHQsXG4gICAgICAgIHNldENvbnRlbnRzLFxuICAgICAgICBleHBhbmQsXG4gICAgICAgIHJlZnJlc2gsXG4gICAgICAgIGNvbGxhcHNlLFxuICAgICAgICBsb29rdXBNZW51LFxuICAgICAgICBsb29rdXBJdGVtLFxuICAgICAgICBvdGhlck1lbnVzLFxuICAgICAgICBnZXRQcmltYXJ5LFxuICAgICAgICBnZXRNZW51cyxcbiAgICAgICAgY2xlYXIsXG4gICAgICAgIGlzQ2xlYXIsXG4gICAgICAgIGdldFRyaWdnZXJpbmdQYXRoXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZXh0cmFjdFByZXBhcmVkTWVudSA9IHByZXAgPT4gcHJlcC50eXBlID09PSAncHJlcGFyZWQnID8gT3B0aW9uYWwuc29tZShwcmVwLm1lbnUpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIGNvbnN0IExheWVyZWRTdGF0ZSA9IHtcbiAgICAgIGluaXQ6IGluaXQkYyxcbiAgICAgIGV4dHJhY3RQcmVwYXJlZE1lbnVcbiAgICB9O1xuXG4gICAgY29uc3Qgb25NZW51SXRlbUhpZ2hsaWdodGVkRXZlbnQgPSBnZW5lcmF0ZSQ2KCd0aWVyZWQtbWVudS1pdGVtLWhpZ2hsaWdodCcpO1xuICAgIGNvbnN0IG9uTWVudUl0ZW1EZWhpZ2hsaWdodGVkRXZlbnQgPSBnZW5lcmF0ZSQ2KCd0aWVyZWQtbWVudS1pdGVtLWRlaGlnaGxpZ2h0Jyk7XG5cbiAgICB2YXIgSGlnaGxpZ2h0T25PcGVuO1xuICAgIChmdW5jdGlvbiAoSGlnaGxpZ2h0T25PcGVuKSB7XG4gICAgICBIaWdobGlnaHRPbk9wZW5bSGlnaGxpZ2h0T25PcGVuWydIaWdobGlnaHRNZW51QW5kSXRlbSddID0gMF0gPSAnSGlnaGxpZ2h0TWVudUFuZEl0ZW0nO1xuICAgICAgSGlnaGxpZ2h0T25PcGVuW0hpZ2hsaWdodE9uT3BlblsnSGlnaGxpZ2h0SnVzdE1lbnUnXSA9IDFdID0gJ0hpZ2hsaWdodEp1c3RNZW51JztcbiAgICAgIEhpZ2hsaWdodE9uT3BlbltIaWdobGlnaHRPbk9wZW5bJ0hpZ2hsaWdodE5vbmUnXSA9IDJdID0gJ0hpZ2hsaWdodE5vbmUnO1xuICAgIH0oSGlnaGxpZ2h0T25PcGVuIHx8IChIaWdobGlnaHRPbk9wZW4gPSB7fSkpKTtcblxuICAgIGNvbnN0IG1ha2UkNiA9IChkZXRhaWwsIF9yYXdVaVNwZWMpID0+IHtcbiAgICAgIGNvbnN0IHN1Ym1lbnVQYXJlbnRJdGVtcyA9IHZhbHVlJDIoKTtcbiAgICAgIGNvbnN0IGJ1aWxkTWVudXMgPSAoY29udGFpbmVyLCBwcmltYXJ5TmFtZSwgbWVudXMpID0+IG1hcCQxKG1lbnVzLCAoc3BlYywgbmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBtYWtlU2tldGNoID0gKCkgPT4gTWVudS5za2V0Y2goe1xuICAgICAgICAgIC4uLnNwZWMsXG4gICAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgICAgbWFya2VyczogZGV0YWlsLm1hcmtlcnMsXG4gICAgICAgICAgZmFrZUZvY3VzOiBkZXRhaWwuZmFrZUZvY3VzLFxuICAgICAgICAgIG9uSGlnaGxpZ2h0OiAobWVudUNvbXAsIGl0ZW1Db21wKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBoaWdobGlnaHREYXRhID0ge1xuICAgICAgICAgICAgICBtZW51Q29tcCxcbiAgICAgICAgICAgICAgaXRlbUNvbXBcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBlbWl0V2l0aChtZW51Q29tcCwgb25NZW51SXRlbUhpZ2hsaWdodGVkRXZlbnQsIGhpZ2hsaWdodERhdGEpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25EZWhpZ2hsaWdodDogKG1lbnVDb21wLCBpdGVtQ29tcCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVoaWdobGlnaHREYXRhID0ge1xuICAgICAgICAgICAgICBtZW51Q29tcCxcbiAgICAgICAgICAgICAgaXRlbUNvbXBcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBlbWl0V2l0aChtZW51Q29tcCwgb25NZW51SXRlbURlaGlnaGxpZ2h0ZWRFdmVudCwgZGVoaWdobGlnaHREYXRhKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZvY3VzTWFuYWdlcjogZGV0YWlsLmZha2VGb2N1cyA/IGhpZ2hsaWdodHMoKSA6IGRvbSQyKClcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuYW1lID09PSBwcmltYXJ5TmFtZSA/IHtcbiAgICAgICAgICB0eXBlOiAncHJlcGFyZWQnLFxuICAgICAgICAgIG1lbnU6IGNvbnRhaW5lci5nZXRTeXN0ZW0oKS5idWlsZChtYWtlU2tldGNoKCkpXG4gICAgICAgIH0gOiB7XG4gICAgICAgICAgdHlwZTogJ25vdGJ1aWx0JyxcbiAgICAgICAgICBuYk1lbnU6IG1ha2VTa2V0Y2hcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbGF5ZXJlZFN0YXRlID0gTGF5ZXJlZFN0YXRlLmluaXQoKTtcbiAgICAgIGNvbnN0IHNldHVwID0gY29udGFpbmVyID0+IHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50TWFwID0gYnVpbGRNZW51cyhjb250YWluZXIsIGRldGFpbC5kYXRhLnByaW1hcnksIGRldGFpbC5kYXRhLm1lbnVzKTtcbiAgICAgICAgY29uc3QgZGlyZWN0b3J5ID0gdG9EaXJlY3RvcnkoKTtcbiAgICAgICAgbGF5ZXJlZFN0YXRlLnNldENvbnRlbnRzKGRldGFpbC5kYXRhLnByaW1hcnksIGNvbXBvbmVudE1hcCwgZGV0YWlsLmRhdGEuZXhwYW5zaW9ucywgZGlyZWN0b3J5KTtcbiAgICAgICAgcmV0dXJuIGxheWVyZWRTdGF0ZS5nZXRQcmltYXJ5KCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0SXRlbVZhbHVlID0gaXRlbSA9PiBSZXByZXNlbnRpbmcuZ2V0VmFsdWUoaXRlbSkudmFsdWU7XG4gICAgICBjb25zdCBnZXRJdGVtQnlWYWx1ZSA9IChfY29udGFpbmVyLCBtZW51cywgaXRlbVZhbHVlKSA9PiBmaW5kTWFwKG1lbnVzLCBtZW51ID0+IHtcbiAgICAgICAgaWYgKCFtZW51LmdldFN5c3RlbSgpLmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBIaWdobGlnaHRpbmcuZ2V0Q2FuZGlkYXRlcyhtZW51KTtcbiAgICAgICAgcmV0dXJuIGZpbmQkNShjYW5kaWRhdGVzLCBjID0+IGdldEl0ZW1WYWx1ZShjKSA9PT0gaXRlbVZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdG9EaXJlY3RvcnkgPSBfY29udGFpbmVyID0+IG1hcCQxKGRldGFpbC5kYXRhLm1lbnVzLCAoZGF0YSwgX21lbnVOYW1lKSA9PiBiaW5kJDMoZGF0YS5pdGVtcywgaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdzZXBhcmF0b3InID8gW10gOiBbaXRlbS5kYXRhLnZhbHVlXSkpO1xuICAgICAgY29uc3Qgc2V0QWN0aXZlTWVudSA9IEhpZ2hsaWdodGluZy5oaWdobGlnaHQ7XG4gICAgICBjb25zdCBzZXRBY3RpdmVNZW51QW5kSXRlbSA9IChjb250YWluZXIsIG1lbnUpID0+IHtcbiAgICAgICAgc2V0QWN0aXZlTWVudShjb250YWluZXIsIG1lbnUpO1xuICAgICAgICBIaWdobGlnaHRpbmcuZ2V0SGlnaGxpZ2h0ZWQobWVudSkub3JUaHVuaygoKSA9PiBIaWdobGlnaHRpbmcuZ2V0Rmlyc3QobWVudSkpLmVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgaWYgKGRldGFpbC5mYWtlRm9jdXMpIHtcbiAgICAgICAgICAgIEhpZ2hsaWdodGluZy5oaWdobGlnaHQobWVudSwgaXRlbSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKGNvbnRhaW5lciwgaXRlbS5lbGVtZW50LCBmb2N1c0l0ZW0oKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRNZW51cyA9IChzdGF0ZSwgbWVudVZhbHVlcykgPT4gY2F0KG1hcCQyKG1lbnVWYWx1ZXMsIG12ID0+IHN0YXRlLmxvb2t1cE1lbnUobXYpLmJpbmQocHJlcCA9PiBwcmVwLnR5cGUgPT09ICdwcmVwYXJlZCcgPyBPcHRpb25hbC5zb21lKHByZXAubWVudSkgOiBPcHRpb25hbC5ub25lKCkpKSk7XG4gICAgICBjb25zdCBjbG9zZU90aGVycyA9IChjb250YWluZXIsIHN0YXRlLCBwYXRoKSA9PiB7XG4gICAgICAgIGNvbnN0IG90aGVycyA9IGdldE1lbnVzKHN0YXRlLCBzdGF0ZS5vdGhlck1lbnVzKHBhdGgpKTtcbiAgICAgICAgZWFjaCQxKG90aGVycywgbyA9PiB7XG4gICAgICAgICAgcmVtb3ZlJDEoby5lbGVtZW50LCBbZGV0YWlsLm1hcmtlcnMuYmFja2dyb3VuZE1lbnVdKTtcbiAgICAgICAgICBpZiAoIWRldGFpbC5zdGF5SW5Eb20pIHtcbiAgICAgICAgICAgIFJlcGxhY2luZy5yZW1vdmUoY29udGFpbmVyLCBvKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldFN1Ym1lbnVQYXJlbnRzID0gY29udGFpbmVyID0+IHN1Ym1lbnVQYXJlbnRJdGVtcy5nZXQoKS5nZXRPclRodW5rKCgpID0+IHtcbiAgICAgICAgY29uc3QgciA9IHt9O1xuICAgICAgICBjb25zdCBpdGVtcyA9IGRlc2NlbmRhbnRzKGNvbnRhaW5lci5lbGVtZW50LCBgLiR7IGRldGFpbC5tYXJrZXJzLml0ZW0gfWApO1xuICAgICAgICBjb25zdCBwYXJlbnRJdGVtcyA9IGZpbHRlciQyKGl0ZW1zLCBpID0+IGdldCRmKGksICdhcmlhLWhhc3BvcHVwJykgPT09ICd0cnVlJyk7XG4gICAgICAgIGVhY2gkMShwYXJlbnRJdGVtcywgaSA9PiB7XG4gICAgICAgICAgY29udGFpbmVyLmdldFN5c3RlbSgpLmdldEJ5RG9tKGkpLmVhY2goaXRlbUNvbXAgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gZ2V0SXRlbVZhbHVlKGl0ZW1Db21wKTtcbiAgICAgICAgICAgIHJba2V5XSA9IGl0ZW1Db21wO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgc3VibWVudVBhcmVudEl0ZW1zLnNldChyKTtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHVwZGF0ZUFyaWFFeHBhbnNpb25zID0gKGNvbnRhaW5lciwgcGF0aCkgPT4ge1xuICAgICAgICBjb25zdCBwYXJlbnRJdGVtcyA9IGdldFN1Ym1lbnVQYXJlbnRzKGNvbnRhaW5lcik7XG4gICAgICAgIGVhY2gocGFyZW50SXRlbXMsICh2LCBrKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBjb250YWlucyQyKHBhdGgsIGspO1xuICAgICAgICAgIHNldCQ5KHYuZWxlbWVudCwgJ2FyaWEtZXhwYW5kZWQnLCBleHBhbmRlZCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVwZGF0ZU1lbnVQYXRoID0gKGNvbnRhaW5lciwgc3RhdGUsIHBhdGgpID0+IE9wdGlvbmFsLmZyb20ocGF0aFswXSkuYmluZChsYXRlc3RNZW51TmFtZSA9PiBzdGF0ZS5sb29rdXBNZW51KGxhdGVzdE1lbnVOYW1lKS5iaW5kKG1lbnVQcmVwID0+IHtcbiAgICAgICAgaWYgKG1lbnVQcmVwLnR5cGUgPT09ICdub3RidWlsdCcpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZU1lbnUgPSBtZW51UHJlcC5tZW51O1xuICAgICAgICAgIGNvbnN0IHJlc3QgPSBnZXRNZW51cyhzdGF0ZSwgcGF0aC5zbGljZSgxKSk7XG4gICAgICAgICAgZWFjaCQxKHJlc3QsIHIgPT4ge1xuICAgICAgICAgICAgYWRkJDIoci5lbGVtZW50LCBkZXRhaWwubWFya2Vycy5iYWNrZ3JvdW5kTWVudSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKCFpbkJvZHkoYWN0aXZlTWVudS5lbGVtZW50KSkge1xuICAgICAgICAgICAgUmVwbGFjaW5nLmFwcGVuZChjb250YWluZXIsIHByZW1hZGUoYWN0aXZlTWVudSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZW1vdmUkMShhY3RpdmVNZW51LmVsZW1lbnQsIFtkZXRhaWwubWFya2Vycy5iYWNrZ3JvdW5kTWVudV0pO1xuICAgICAgICAgIHNldEFjdGl2ZU1lbnVBbmRJdGVtKGNvbnRhaW5lciwgYWN0aXZlTWVudSk7XG4gICAgICAgICAgY2xvc2VPdGhlcnMoY29udGFpbmVyLCBzdGF0ZSwgcGF0aCk7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoYWN0aXZlTWVudSk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICAgIGxldCBFeHBhbmRIaWdobGlnaHREZWNpc2lvbjtcbiAgICAgIChmdW5jdGlvbiAoRXhwYW5kSGlnaGxpZ2h0RGVjaXNpb24pIHtcbiAgICAgICAgRXhwYW5kSGlnaGxpZ2h0RGVjaXNpb25bRXhwYW5kSGlnaGxpZ2h0RGVjaXNpb25bJ0hpZ2hsaWdodFN1Ym1lbnUnXSA9IDBdID0gJ0hpZ2hsaWdodFN1Ym1lbnUnO1xuICAgICAgICBFeHBhbmRIaWdobGlnaHREZWNpc2lvbltFeHBhbmRIaWdobGlnaHREZWNpc2lvblsnSGlnaGxpZ2h0UGFyZW50J10gPSAxXSA9ICdIaWdobGlnaHRQYXJlbnQnO1xuICAgICAgfShFeHBhbmRIaWdobGlnaHREZWNpc2lvbiB8fCAoRXhwYW5kSGlnaGxpZ2h0RGVjaXNpb24gPSB7fSkpKTtcbiAgICAgIGNvbnN0IGJ1aWxkSWZSZXF1aXJlZCA9IChjb250YWluZXIsIG1lbnVOYW1lLCBtZW51UHJlcCkgPT4ge1xuICAgICAgICBpZiAobWVudVByZXAudHlwZSA9PT0gJ25vdGJ1aWx0Jykge1xuICAgICAgICAgIGNvbnN0IG1lbnUgPSBjb250YWluZXIuZ2V0U3lzdGVtKCkuYnVpbGQobWVudVByZXAubmJNZW51KCkpO1xuICAgICAgICAgIGxheWVyZWRTdGF0ZS5zZXRNZW51QnVpbHQobWVudU5hbWUsIG1lbnUpO1xuICAgICAgICAgIHJldHVybiBtZW51O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtZW51UHJlcC5tZW51O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgZXhwYW5kUmlnaHQgPSAoY29udGFpbmVyLCBpdGVtLCBkZWNpc2lvbiA9IEV4cGFuZEhpZ2hsaWdodERlY2lzaW9uLkhpZ2hsaWdodFN1Ym1lbnUpID0+IHtcbiAgICAgICAgaWYgKGl0ZW0uaGFzQ29uZmlndXJlZChEaXNhYmxpbmcpICYmIERpc2FibGluZy5pc0Rpc2FibGVkKGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRJdGVtVmFsdWUoaXRlbSk7XG4gICAgICAgICAgcmV0dXJuIGxheWVyZWRTdGF0ZS5leHBhbmQodmFsdWUpLmJpbmQocGF0aCA9PiB7XG4gICAgICAgICAgICB1cGRhdGVBcmlhRXhwYW5zaW9ucyhjb250YWluZXIsIHBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20ocGF0aFswXSkuYmluZChtZW51TmFtZSA9PiBsYXllcmVkU3RhdGUubG9va3VwTWVudShtZW51TmFtZSkuYmluZChhY3RpdmVNZW51UHJlcCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZU1lbnUgPSBidWlsZElmUmVxdWlyZWQoY29udGFpbmVyLCBtZW51TmFtZSwgYWN0aXZlTWVudVByZXApO1xuICAgICAgICAgICAgICBpZiAoIWluQm9keShhY3RpdmVNZW51LmVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgUmVwbGFjaW5nLmFwcGVuZChjb250YWluZXIsIHByZW1hZGUoYWN0aXZlTWVudSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRldGFpbC5vbk9wZW5TdWJtZW51KGNvbnRhaW5lciwgaXRlbSwgYWN0aXZlTWVudSwgcmV2ZXJzZShwYXRoKSk7XG4gICAgICAgICAgICAgIGlmIChkZWNpc2lvbiA9PT0gRXhwYW5kSGlnaGxpZ2h0RGVjaXNpb24uSGlnaGxpZ2h0U3VibWVudSkge1xuICAgICAgICAgICAgICAgIEhpZ2hsaWdodGluZy5oaWdobGlnaHRGaXJzdChhY3RpdmVNZW51KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlTWVudVBhdGgoY29udGFpbmVyLCBsYXllcmVkU3RhdGUsIHBhdGgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIEhpZ2hsaWdodGluZy5kZWhpZ2hsaWdodEFsbChhY3RpdmVNZW51KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShpdGVtKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgY29sbGFwc2VMZWZ0ID0gKGNvbnRhaW5lciwgaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGdldEl0ZW1WYWx1ZShpdGVtKTtcbiAgICAgICAgcmV0dXJuIGxheWVyZWRTdGF0ZS5jb2xsYXBzZSh2YWx1ZSkuYmluZChwYXRoID0+IHtcbiAgICAgICAgICB1cGRhdGVBcmlhRXhwYW5zaW9ucyhjb250YWluZXIsIHBhdGgpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVNZW51UGF0aChjb250YWluZXIsIGxheWVyZWRTdGF0ZSwgcGF0aCkubWFwKGFjdGl2ZU1lbnUgPT4ge1xuICAgICAgICAgICAgZGV0YWlsLm9uQ29sbGFwc2VNZW51KGNvbnRhaW5lciwgaXRlbSwgYWN0aXZlTWVudSk7XG4gICAgICAgICAgICByZXR1cm4gYWN0aXZlTWVudTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdXBkYXRlVmlldyA9IChjb250YWluZXIsIGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRJdGVtVmFsdWUoaXRlbSk7XG4gICAgICAgIHJldHVybiBsYXllcmVkU3RhdGUucmVmcmVzaCh2YWx1ZSkuYmluZChwYXRoID0+IHtcbiAgICAgICAgICB1cGRhdGVBcmlhRXhwYW5zaW9ucyhjb250YWluZXIsIHBhdGgpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVNZW51UGF0aChjb250YWluZXIsIGxheWVyZWRTdGF0ZSwgcGF0aCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG9uUmlnaHQgPSAoY29udGFpbmVyLCBpdGVtKSA9PiBpbnNpZGUoaXRlbS5lbGVtZW50KSA/IE9wdGlvbmFsLm5vbmUoKSA6IGV4cGFuZFJpZ2h0KGNvbnRhaW5lciwgaXRlbSwgRXhwYW5kSGlnaGxpZ2h0RGVjaXNpb24uSGlnaGxpZ2h0U3VibWVudSk7XG4gICAgICBjb25zdCBvbkxlZnQgPSAoY29udGFpbmVyLCBpdGVtKSA9PiBpbnNpZGUoaXRlbS5lbGVtZW50KSA/IE9wdGlvbmFsLm5vbmUoKSA6IGNvbGxhcHNlTGVmdChjb250YWluZXIsIGl0ZW0pO1xuICAgICAgY29uc3Qgb25Fc2NhcGUgPSAoY29udGFpbmVyLCBpdGVtKSA9PiBjb2xsYXBzZUxlZnQoY29udGFpbmVyLCBpdGVtKS5vclRodW5rKCgpID0+IGRldGFpbC5vbkVzY2FwZShjb250YWluZXIsIGl0ZW0pLm1hcCgoKSA9PiBjb250YWluZXIpKTtcbiAgICAgIGNvbnN0IGtleU9uSXRlbSA9IGYgPT4gKGNvbnRhaW5lciwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIGNsb3Nlc3QkMShzaW11bGF0ZWRFdmVudC5nZXRTb3VyY2UoKSwgYC4keyBkZXRhaWwubWFya2Vycy5pdGVtIH1gKS5iaW5kKHRhcmdldCA9PiBjb250YWluZXIuZ2V0U3lzdGVtKCkuZ2V0QnlEb20odGFyZ2V0KS50b09wdGlvbmFsKCkuYmluZChpdGVtID0+IGYoY29udGFpbmVyLCBpdGVtKS5tYXAoYWx3YXlzKSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IGRlcml2ZSQyKFtcbiAgICAgICAgcnVuJDEoZm9jdXMoKSwgKHRtZW51LCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBzaW11bGF0ZWRFdmVudC5ldmVudC5pdGVtO1xuICAgICAgICAgIGxheWVyZWRTdGF0ZS5sb29rdXBJdGVtKGdldEl0ZW1WYWx1ZShpdGVtKSkuZWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZW51ID0gc2ltdWxhdGVkRXZlbnQuZXZlbnQubWVudTtcbiAgICAgICAgICAgIEhpZ2hsaWdodGluZy5oaWdobGlnaHQodG1lbnUsIG1lbnUpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRJdGVtVmFsdWUoc2ltdWxhdGVkRXZlbnQuZXZlbnQuaXRlbSk7XG4gICAgICAgICAgICBsYXllcmVkU3RhdGUucmVmcmVzaCh2YWx1ZSkuZWFjaChwYXRoID0+IGNsb3NlT3RoZXJzKHRtZW51LCBsYXllcmVkU3RhdGUsIHBhdGgpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIHJ1bk9uRXhlY3V0ZSQxKChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gc2ltdWxhdGVkRXZlbnQuZXZlbnQudGFyZ2V0O1xuICAgICAgICAgIGNvbXBvbmVudC5nZXRTeXN0ZW0oKS5nZXRCeURvbSh0YXJnZXQpLmVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtVmFsdWUgPSBnZXRJdGVtVmFsdWUoaXRlbSk7XG4gICAgICAgICAgICBpZiAoaXRlbVZhbHVlLmluZGV4T2YoJ2NvbGxhcHNlLWl0ZW0nKSA9PT0gMCkge1xuICAgICAgICAgICAgICBjb2xsYXBzZUxlZnQoY29tcG9uZW50LCBpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV4cGFuZFJpZ2h0KGNvbXBvbmVudCwgaXRlbSwgRXhwYW5kSGlnaGxpZ2h0RGVjaXNpb24uSGlnaGxpZ2h0U3VibWVudSkuZm9sZCgoKSA9PiB7XG4gICAgICAgICAgICAgIGRldGFpbC5vbkV4ZWN1dGUoY29tcG9uZW50LCBpdGVtKTtcbiAgICAgICAgICAgIH0sIG5vb3ApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgcnVuT25BdHRhY2hlZCgoY29udGFpbmVyLCBfc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICBzZXR1cChjb250YWluZXIpLmVhY2gocHJpbWFyeSA9PiB7XG4gICAgICAgICAgICBSZXBsYWNpbmcuYXBwZW5kKGNvbnRhaW5lciwgcHJlbWFkZShwcmltYXJ5KSk7XG4gICAgICAgICAgICBkZXRhaWwub25PcGVuTWVudShjb250YWluZXIsIHByaW1hcnkpO1xuICAgICAgICAgICAgaWYgKGRldGFpbC5oaWdobGlnaHRPbk9wZW4gPT09IEhpZ2hsaWdodE9uT3Blbi5IaWdobGlnaHRNZW51QW5kSXRlbSkge1xuICAgICAgICAgICAgICBzZXRBY3RpdmVNZW51QW5kSXRlbShjb250YWluZXIsIHByaW1hcnkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkZXRhaWwuaGlnaGxpZ2h0T25PcGVuID09PSBIaWdobGlnaHRPbk9wZW4uSGlnaGxpZ2h0SnVzdE1lbnUpIHtcbiAgICAgICAgICAgICAgc2V0QWN0aXZlTWVudShjb250YWluZXIsIHByaW1hcnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgcnVuJDEob25NZW51SXRlbUhpZ2hsaWdodGVkRXZlbnQsICh0bWVudUNvbXAsIHNlKSA9PiB7XG4gICAgICAgICAgZGV0YWlsLm9uSGlnaGxpZ2h0SXRlbSh0bWVudUNvbXAsIHNlLmV2ZW50Lm1lbnVDb21wLCBzZS5ldmVudC5pdGVtQ29tcCk7XG4gICAgICAgIH0pLFxuICAgICAgICBydW4kMShvbk1lbnVJdGVtRGVoaWdobGlnaHRlZEV2ZW50LCAodG1lbnVDb21wLCBzZSkgPT4ge1xuICAgICAgICAgIGRldGFpbC5vbkRlaGlnaGxpZ2h0SXRlbSh0bWVudUNvbXAsIHNlLmV2ZW50Lm1lbnVDb21wLCBzZS5ldmVudC5pdGVtQ29tcCk7XG4gICAgICAgIH0pLFxuICAgICAgICAuLi5kZXRhaWwubmF2aWdhdGVPbkhvdmVyID8gW3J1biQxKGhvdmVyKCksICh0bWVudSwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBzaW11bGF0ZWRFdmVudC5ldmVudC5pdGVtO1xuICAgICAgICAgICAgdXBkYXRlVmlldyh0bWVudSwgaXRlbSk7XG4gICAgICAgICAgICBleHBhbmRSaWdodCh0bWVudSwgaXRlbSwgRXhwYW5kSGlnaGxpZ2h0RGVjaXNpb24uSGlnaGxpZ2h0UGFyZW50KTtcbiAgICAgICAgICAgIGRldGFpbC5vbkhvdmVyKHRtZW51LCBpdGVtKTtcbiAgICAgICAgICB9KV0gOiBbXVxuICAgICAgXSk7XG4gICAgICBjb25zdCBnZXRBY3RpdmVJdGVtID0gY29udGFpbmVyID0+IEhpZ2hsaWdodGluZy5nZXRIaWdobGlnaHRlZChjb250YWluZXIpLmJpbmQoSGlnaGxpZ2h0aW5nLmdldEhpZ2hsaWdodGVkKTtcbiAgICAgIGNvbnN0IGNvbGxhcHNlTWVudUFwaSA9IGNvbnRhaW5lciA9PiB7XG4gICAgICAgIGdldEFjdGl2ZUl0ZW0oY29udGFpbmVyKS5lYWNoKGN1cnJlbnRJdGVtID0+IHtcbiAgICAgICAgICBjb2xsYXBzZUxlZnQoY29udGFpbmVyLCBjdXJyZW50SXRlbSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGhpZ2hsaWdodFByaW1hcnkgPSBjb250YWluZXIgPT4ge1xuICAgICAgICBsYXllcmVkU3RhdGUuZ2V0UHJpbWFyeSgpLmVhY2gocHJpbWFyeSA9PiB7XG4gICAgICAgICAgc2V0QWN0aXZlTWVudUFuZEl0ZW0oY29udGFpbmVyLCBwcmltYXJ5KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZXh0cmFjdE1lbnVGcm9tQ29udGFpbmVyID0gY29udGFpbmVyID0+IE9wdGlvbmFsLmZyb20oY29udGFpbmVyLmNvbXBvbmVudHMoKVswXSkuZmlsdGVyKGNvbXAgPT4gZ2V0JGYoY29tcC5lbGVtZW50LCAncm9sZScpID09PSAnbWVudScpO1xuICAgICAgY29uc3QgcmVwb3NpdGlvbk1lbnVzID0gY29udGFpbmVyID0+IHtcbiAgICAgICAgY29uc3QgbWF5YmVBY3RpdmVQcmltYXJ5ID0gbGF5ZXJlZFN0YXRlLmdldFByaW1hcnkoKS5iaW5kKHByaW1hcnkgPT4gZ2V0QWN0aXZlSXRlbShjb250YWluZXIpLmJpbmQoY3VycmVudEl0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IGdldEl0ZW1WYWx1ZShjdXJyZW50SXRlbSk7XG4gICAgICAgICAgY29uc3QgYWxsTWVudXMgPSB2YWx1ZXMobGF5ZXJlZFN0YXRlLmdldE1lbnVzKCkpO1xuICAgICAgICAgIGNvbnN0IHByZXBhcmVkTWVudXMgPSBjYXQobWFwJDIoYWxsTWVudXMsIExheWVyZWRTdGF0ZS5leHRyYWN0UHJlcGFyZWRNZW51KSk7XG4gICAgICAgICAgcmV0dXJuIGxheWVyZWRTdGF0ZS5nZXRUcmlnZ2VyaW5nUGF0aChpdGVtVmFsdWUsIHYgPT4gZ2V0SXRlbUJ5VmFsdWUoY29udGFpbmVyLCBwcmVwYXJlZE1lbnVzLCB2KSk7XG4gICAgICAgIH0pLm1hcCh0cmlnZ2VyaW5nUGF0aCA9PiAoe1xuICAgICAgICAgIHByaW1hcnksXG4gICAgICAgICAgdHJpZ2dlcmluZ1BhdGhcbiAgICAgICAgfSkpKTtcbiAgICAgICAgbWF5YmVBY3RpdmVQcmltYXJ5LmZvbGQoKCkgPT4ge1xuICAgICAgICAgIGV4dHJhY3RNZW51RnJvbUNvbnRhaW5lcihjb250YWluZXIpLmVhY2gocHJpbWFyeU1lbnUgPT4ge1xuICAgICAgICAgICAgZGV0YWlsLm9uUmVwb3NpdGlvbk1lbnUoY29udGFpbmVyLCBwcmltYXJ5TWVudSwgW10pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCAoe3ByaW1hcnksIHRyaWdnZXJpbmdQYXRofSkgPT4ge1xuICAgICAgICAgIGRldGFpbC5vblJlcG9zaXRpb25NZW51KGNvbnRhaW5lciwgcHJpbWFyeSwgdHJpZ2dlcmluZ1BhdGgpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBhcGlzID0ge1xuICAgICAgICBjb2xsYXBzZU1lbnU6IGNvbGxhcHNlTWVudUFwaSxcbiAgICAgICAgaGlnaGxpZ2h0UHJpbWFyeSxcbiAgICAgICAgcmVwb3NpdGlvbk1lbnVzXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgICBkb206IGRldGFpbC5kb20sXG4gICAgICAgIG1hcmtlcnM6IGRldGFpbC5tYXJrZXJzLFxuICAgICAgICBiZWhhdmlvdXJzOiBhdWdtZW50KGRldGFpbC50bWVudUJlaGF2aW91cnMsIFtcbiAgICAgICAgICBLZXlpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIG1vZGU6ICdzcGVjaWFsJyxcbiAgICAgICAgICAgIG9uUmlnaHQ6IGtleU9uSXRlbShvblJpZ2h0KSxcbiAgICAgICAgICAgIG9uTGVmdDoga2V5T25JdGVtKG9uTGVmdCksXG4gICAgICAgICAgICBvbkVzY2FwZToga2V5T25JdGVtKG9uRXNjYXBlKSxcbiAgICAgICAgICAgIGZvY3VzSW46IChjb250YWluZXIsIF9rZXlJbmZvKSA9PiB7XG4gICAgICAgICAgICAgIGxheWVyZWRTdGF0ZS5nZXRQcmltYXJ5KCkuZWFjaChwcmltYXJ5ID0+IHtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChjb250YWluZXIsIHByaW1hcnkuZWxlbWVudCwgZm9jdXNJdGVtKCkpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBIaWdobGlnaHRpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIGhpZ2hsaWdodENsYXNzOiBkZXRhaWwubWFya2Vycy5zZWxlY3RlZE1lbnUsXG4gICAgICAgICAgICBpdGVtQ2xhc3M6IGRldGFpbC5tYXJrZXJzLm1lbnVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBDb21wb3NpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIGZpbmQ6IGNvbnRhaW5lciA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBIaWdobGlnaHRpbmcuZ2V0SGlnaGxpZ2h0ZWQoY29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBSZXBsYWNpbmcuY29uZmlnKHt9KVxuICAgICAgICBdKSxcbiAgICAgICAgZXZlbnRPcmRlcjogZGV0YWlsLmV2ZW50T3JkZXIsXG4gICAgICAgIGFwaXMsXG4gICAgICAgIGV2ZW50c1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbGxhcHNlSXRlbSQxID0gY29uc3RhbnQkMSgnY29sbGFwc2UtaXRlbScpO1xuXG4gICAgY29uc3QgdGllcmVkRGF0YSA9IChwcmltYXJ5LCBtZW51cywgZXhwYW5zaW9ucykgPT4gKHtcbiAgICAgIHByaW1hcnksXG4gICAgICBtZW51cyxcbiAgICAgIGV4cGFuc2lvbnNcbiAgICB9KTtcbiAgICBjb25zdCBzaW5nbGVEYXRhID0gKG5hbWUsIG1lbnUpID0+ICh7XG4gICAgICBwcmltYXJ5OiBuYW1lLFxuICAgICAgbWVudXM6IHdyYXAkMShuYW1lLCBtZW51KSxcbiAgICAgIGV4cGFuc2lvbnM6IHt9XG4gICAgfSk7XG4gICAgY29uc3QgY29sbGFwc2VJdGVtID0gdGV4dCA9PiAoe1xuICAgICAgdmFsdWU6IGdlbmVyYXRlJDYoY29sbGFwc2VJdGVtJDEoKSksXG4gICAgICBtZXRhOiB7IHRleHQgfVxuICAgIH0pO1xuICAgIGNvbnN0IHRpZXJlZE1lbnUgPSBzaW5nbGUoe1xuICAgICAgbmFtZTogJ1RpZXJlZE1lbnUnLFxuICAgICAgY29uZmlnRmllbGRzOiBbXG4gICAgICAgIG9uU3RyaWN0S2V5Ym9hcmRIYW5kbGVyKCdvbkV4ZWN1dGUnKSxcbiAgICAgICAgb25TdHJpY3RLZXlib2FyZEhhbmRsZXIoJ29uRXNjYXBlJyksXG4gICAgICAgIG9uU3RyaWN0SGFuZGxlcignb25PcGVuTWVudScpLFxuICAgICAgICBvblN0cmljdEhhbmRsZXIoJ29uT3BlblN1Ym1lbnUnKSxcbiAgICAgICAgb25IYW5kbGVyKCdvblJlcG9zaXRpb25NZW51JyksXG4gICAgICAgIG9uSGFuZGxlcignb25Db2xsYXBzZU1lbnUnKSxcbiAgICAgICAgZGVmYXVsdGVkKCdoaWdobGlnaHRPbk9wZW4nLCBIaWdobGlnaHRPbk9wZW4uSGlnaGxpZ2h0TWVudUFuZEl0ZW0pLFxuICAgICAgICByZXF1aXJlZE9iak9mKCdkYXRhJywgW1xuICAgICAgICAgIHJlcXVpcmVkJDEoJ3ByaW1hcnknKSxcbiAgICAgICAgICByZXF1aXJlZCQxKCdtZW51cycpLFxuICAgICAgICAgIHJlcXVpcmVkJDEoJ2V4cGFuc2lvbnMnKVxuICAgICAgICBdKSxcbiAgICAgICAgZGVmYXVsdGVkKCdmYWtlRm9jdXMnLCBmYWxzZSksXG4gICAgICAgIG9uSGFuZGxlcignb25IaWdobGlnaHRJdGVtJyksXG4gICAgICAgIG9uSGFuZGxlcignb25EZWhpZ2hsaWdodEl0ZW0nKSxcbiAgICAgICAgb25IYW5kbGVyKCdvbkhvdmVyJyksXG4gICAgICAgIHRpZXJlZE1lbnVNYXJrZXJzKCksXG4gICAgICAgIHJlcXVpcmVkJDEoJ2RvbScpLFxuICAgICAgICBkZWZhdWx0ZWQoJ25hdmlnYXRlT25Ib3ZlcicsIHRydWUpLFxuICAgICAgICBkZWZhdWx0ZWQoJ3N0YXlJbkRvbScsIGZhbHNlKSxcbiAgICAgICAgZmllbGQoJ3RtZW51QmVoYXZpb3VycycsIFtcbiAgICAgICAgICBLZXlpbmcsXG4gICAgICAgICAgSGlnaGxpZ2h0aW5nLFxuICAgICAgICAgIENvbXBvc2luZyxcbiAgICAgICAgICBSZXBsYWNpbmdcbiAgICAgICAgXSksXG4gICAgICAgIGRlZmF1bHRlZCgnZXZlbnRPcmRlcicsIHt9KVxuICAgICAgXSxcbiAgICAgIGFwaXM6IHtcbiAgICAgICAgY29sbGFwc2VNZW51OiAoYXBpcywgdG1lbnUpID0+IHtcbiAgICAgICAgICBhcGlzLmNvbGxhcHNlTWVudSh0bWVudSk7XG4gICAgICAgIH0sXG4gICAgICAgIGhpZ2hsaWdodFByaW1hcnk6IChhcGlzLCB0bWVudSkgPT4ge1xuICAgICAgICAgIGFwaXMuaGlnaGxpZ2h0UHJpbWFyeSh0bWVudSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlcG9zaXRpb25NZW51czogKGFwaXMsIHRtZW51KSA9PiB7XG4gICAgICAgICAgYXBpcy5yZXBvc2l0aW9uTWVudXModG1lbnUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZmFjdG9yeTogbWFrZSQ2LFxuICAgICAgZXh0cmFBcGlzOiB7XG4gICAgICAgIHRpZXJlZERhdGEsXG4gICAgICAgIHNpbmdsZURhdGEsXG4gICAgICAgIGNvbGxhcHNlSXRlbVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgbWFrZU1lbnUgPSAoZGV0YWlsLCBtZW51U2FuZGJveCwgcGxhY2VtZW50U3BlYywgbWVudVNwZWMsIGdldEJvdW5kcykgPT4ge1xuICAgICAgY29uc3QgbGF6eVNpbmsgPSAoKSA9PiBkZXRhaWwubGF6eVNpbmsobWVudVNhbmRib3gpO1xuICAgICAgY29uc3QgbGF5b3V0cyA9IG1lbnVTcGVjLnR5cGUgPT09ICdob3Jpem9udGFsJyA/IHtcbiAgICAgICAgbGF5b3V0czoge1xuICAgICAgICAgIG9uTHRyOiAoKSA9PiBiZWxvd09yQWJvdmUoKSxcbiAgICAgICAgICBvblJ0bDogKCkgPT4gYmVsb3dPckFib3ZlUnRsKClcbiAgICAgICAgfVxuICAgICAgfSA6IHt9O1xuICAgICAgY29uc3QgaXNGaXJzdFRpZXJTdWJtZW51ID0gdHJpZ2dlcmluZ1BhdGhzID0+IHRyaWdnZXJpbmdQYXRocy5sZW5ndGggPT09IDI7XG4gICAgICBjb25zdCBnZXRTdWJtZW51TGF5b3V0cyA9IHRyaWdnZXJpbmdQYXRocyA9PiBpc0ZpcnN0VGllclN1Ym1lbnUodHJpZ2dlcmluZ1BhdGhzKSA/IGxheW91dHMgOiB7fTtcbiAgICAgIHJldHVybiB0aWVyZWRNZW51LnNrZXRjaCh7XG4gICAgICAgIGRvbTogeyB0YWc6ICdkaXYnIH0sXG4gICAgICAgIGRhdGE6IG1lbnVTcGVjLmRhdGEsXG4gICAgICAgIG1hcmtlcnM6IG1lbnVTcGVjLm1lbnUubWFya2VycyxcbiAgICAgICAgaGlnaGxpZ2h0T25PcGVuOiBtZW51U3BlYy5tZW51LmhpZ2hsaWdodE9uT3BlbixcbiAgICAgICAgZmFrZUZvY3VzOiBtZW51U3BlYy5tZW51LmZha2VGb2N1cyxcbiAgICAgICAgb25Fc2NhcGU6ICgpID0+IHtcbiAgICAgICAgICBTYW5kYm94aW5nLmNsb3NlKG1lbnVTYW5kYm94KTtcbiAgICAgICAgICBkZXRhaWwub25Fc2NhcGUubWFwKGhhbmRsZXIgPT4gaGFuZGxlcihtZW51U2FuZGJveCkpO1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHRydWUpO1xuICAgICAgICB9LFxuICAgICAgICBvbkV4ZWN1dGU6ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25PcGVuTWVudTogKHRtZW51LCBtZW51KSA9PiB7XG4gICAgICAgICAgUG9zaXRpb25pbmcucG9zaXRpb25XaXRoaW5Cb3VuZHMobGF6eVNpbmsoKS5nZXRPckRpZSgpLCBtZW51LCBwbGFjZW1lbnRTcGVjLCBnZXRCb3VuZHMoKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uT3BlblN1Ym1lbnU6ICh0bWVudSwgaXRlbSwgc3VibWVudSwgdHJpZ2dlcmluZ1BhdGhzKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2luayA9IGxhenlTaW5rKCkuZ2V0T3JEaWUoKTtcbiAgICAgICAgICBQb3NpdGlvbmluZy5wb3NpdGlvbihzaW5rLCBzdWJtZW51LCB7XG4gICAgICAgICAgICBhbmNob3I6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Ym1lbnUnLFxuICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAuLi5nZXRTdWJtZW51TGF5b3V0cyh0cmlnZ2VyaW5nUGF0aHMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUmVwb3NpdGlvbk1lbnU6ICh0bWVudSwgcHJpbWFyeU1lbnUsIHN1Ym1lbnVUcmlnZ2VycykgPT4ge1xuICAgICAgICAgIGNvbnN0IHNpbmsgPSBsYXp5U2luaygpLmdldE9yRGllKCk7XG4gICAgICAgICAgUG9zaXRpb25pbmcucG9zaXRpb25XaXRoaW5Cb3VuZHMoc2luaywgcHJpbWFyeU1lbnUsIHBsYWNlbWVudFNwZWMsIGdldEJvdW5kcygpKTtcbiAgICAgICAgICBlYWNoJDEoc3VibWVudVRyaWdnZXJzLCBzdCA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWJtZW51TGF5b3V0cyA9IGdldFN1Ym1lbnVMYXlvdXRzKHN0LnRyaWdnZXJpbmdQYXRoKTtcbiAgICAgICAgICAgIFBvc2l0aW9uaW5nLnBvc2l0aW9uKHNpbmssIHN0LnRyaWdnZXJlZE1lbnUsIHtcbiAgICAgICAgICAgICAgYW5jaG9yOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3N1Ym1lbnUnLFxuICAgICAgICAgICAgICAgIGl0ZW06IHN0LnRyaWdnZXJpbmdJdGVtLFxuICAgICAgICAgICAgICAgIC4uLnN1Ym1lbnVMYXlvdXRzXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZhY3RvcnkkbyA9IChkZXRhaWwsIHNwZWMpID0+IHtcbiAgICAgIGNvbnN0IGlzUGFydE9mUmVsYXRlZCA9IChzYW5kYm94LCBxdWVyeUVsZW0pID0+IHtcbiAgICAgICAgY29uc3QgcmVsYXRlZCA9IGRldGFpbC5nZXRSZWxhdGVkKHNhbmRib3gpO1xuICAgICAgICByZXR1cm4gcmVsYXRlZC5leGlzdHMocmVsID0+IGlzUGFydE9mJDEocmVsLCBxdWVyeUVsZW0pKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXRDb250ZW50ID0gKHNhbmRib3gsIHRoaW5nKSA9PiB7XG4gICAgICAgIFNhbmRib3hpbmcuc2V0Q29udGVudChzYW5kYm94LCB0aGluZyk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2hvd0F0ID0gKHNhbmRib3gsIHRoaW5nLCBwbGFjZW1lbnRTcGVjKSA9PiB7XG4gICAgICAgIGNvbnN0IGdldEJvdW5kcyA9IE9wdGlvbmFsLm5vbmU7XG4gICAgICAgIHNob3dXaXRoaW5Cb3VuZHMoc2FuZGJveCwgdGhpbmcsIHBsYWNlbWVudFNwZWMsIGdldEJvdW5kcyk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2hvd1dpdGhpbkJvdW5kcyA9IChzYW5kYm94LCB0aGluZywgcGxhY2VtZW50U3BlYywgZ2V0Qm91bmRzKSA9PiB7XG4gICAgICAgIGNvbnN0IHNpbmsgPSBkZXRhaWwubGF6eVNpbmsoc2FuZGJveCkuZ2V0T3JEaWUoKTtcbiAgICAgICAgU2FuZGJveGluZy5vcGVuV2hpbGVDbG9ha2VkKHNhbmRib3gsIHRoaW5nLCAoKSA9PiBQb3NpdGlvbmluZy5wb3NpdGlvbldpdGhpbkJvdW5kcyhzaW5rLCBzYW5kYm94LCBwbGFjZW1lbnRTcGVjLCBnZXRCb3VuZHMoKSkpO1xuICAgICAgICBSZXByZXNlbnRpbmcuc2V0VmFsdWUoc2FuZGJveCwgT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgbW9kZTogJ3Bvc2l0aW9uJyxcbiAgICAgICAgICBjb25maWc6IHBsYWNlbWVudFNwZWMsXG4gICAgICAgICAgZ2V0Qm91bmRzXG4gICAgICAgIH0pKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzaG93TWVudUF0ID0gKHNhbmRib3gsIHBsYWNlbWVudFNwZWMsIG1lbnVTcGVjKSA9PiB7XG4gICAgICAgIHNob3dNZW51V2l0aGluQm91bmRzKHNhbmRib3gsIHBsYWNlbWVudFNwZWMsIG1lbnVTcGVjLCBPcHRpb25hbC5ub25lKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzaG93TWVudVdpdGhpbkJvdW5kcyA9IChzYW5kYm94LCBwbGFjZW1lbnRTcGVjLCBtZW51U3BlYywgZ2V0Qm91bmRzKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lbnUgPSBtYWtlTWVudShkZXRhaWwsIHNhbmRib3gsIHBsYWNlbWVudFNwZWMsIG1lbnVTcGVjLCBnZXRCb3VuZHMpO1xuICAgICAgICBTYW5kYm94aW5nLm9wZW4oc2FuZGJveCwgbWVudSk7XG4gICAgICAgIFJlcHJlc2VudGluZy5zZXRWYWx1ZShzYW5kYm94LCBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICBtb2RlOiAnbWVudScsXG4gICAgICAgICAgbWVudVxuICAgICAgICB9KSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaGlkZSA9IHNhbmRib3ggPT4ge1xuICAgICAgICBpZiAoU2FuZGJveGluZy5pc09wZW4oc2FuZGJveCkpIHtcbiAgICAgICAgICBSZXByZXNlbnRpbmcuc2V0VmFsdWUoc2FuZGJveCwgT3B0aW9uYWwubm9uZSgpKTtcbiAgICAgICAgICBTYW5kYm94aW5nLmNsb3NlKHNhbmRib3gpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0Q29udGVudCA9IHNhbmRib3ggPT4gU2FuZGJveGluZy5nZXRTdGF0ZShzYW5kYm94KTtcbiAgICAgIGNvbnN0IHJlcG9zaXRpb24gPSBzYW5kYm94ID0+IHtcbiAgICAgICAgaWYgKFNhbmRib3hpbmcuaXNPcGVuKHNhbmRib3gpKSB7XG4gICAgICAgICAgUmVwcmVzZW50aW5nLmdldFZhbHVlKHNhbmRib3gpLmVhY2goc3RhdGUgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChzdGF0ZS5tb2RlKSB7XG4gICAgICAgICAgICBjYXNlICdtZW51JzpcbiAgICAgICAgICAgICAgU2FuZGJveGluZy5nZXRTdGF0ZShzYW5kYm94KS5lYWNoKHRpZXJlZE1lbnUucmVwb3NpdGlvbk1lbnVzKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwb3NpdGlvbic6XG4gICAgICAgICAgICAgIGNvbnN0IHNpbmsgPSBkZXRhaWwubGF6eVNpbmsoc2FuZGJveCkuZ2V0T3JEaWUoKTtcbiAgICAgICAgICAgICAgUG9zaXRpb25pbmcucG9zaXRpb25XaXRoaW5Cb3VuZHMoc2luaywgc2FuZGJveCwgc3RhdGUuY29uZmlnLCBzdGF0ZS5nZXRCb3VuZHMoKSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgYXBpcyA9IHtcbiAgICAgICAgc2V0Q29udGVudCxcbiAgICAgICAgc2hvd0F0LFxuICAgICAgICBzaG93V2l0aGluQm91bmRzLFxuICAgICAgICBzaG93TWVudUF0LFxuICAgICAgICBzaG93TWVudVdpdGhpbkJvdW5kcyxcbiAgICAgICAgaGlkZSxcbiAgICAgICAgZ2V0Q29udGVudCxcbiAgICAgICAgcmVwb3NpdGlvbixcbiAgICAgICAgaXNPcGVuOiBTYW5kYm94aW5nLmlzT3BlblxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVpZDogZGV0YWlsLnVpZCxcbiAgICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgICBiZWhhdmlvdXJzOiBhdWdtZW50KGRldGFpbC5pbmxpbmVCZWhhdmlvdXJzLCBbXG4gICAgICAgICAgU2FuZGJveGluZy5jb25maWcoe1xuICAgICAgICAgICAgaXNQYXJ0T2Y6IChzYW5kYm94LCBkYXRhLCBxdWVyeUVsZW0pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGlzUGFydE9mJDEoZGF0YSwgcXVlcnlFbGVtKSB8fCBpc1BhcnRPZlJlbGF0ZWQoc2FuZGJveCwgcXVlcnlFbGVtKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRBdHRhY2hQb2ludDogc2FuZGJveCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBkZXRhaWwubGF6eVNpbmsoc2FuZGJveCkuZ2V0T3JEaWUoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbk9wZW46IHNhbmRib3ggPT4ge1xuICAgICAgICAgICAgICBkZXRhaWwub25TaG93KHNhbmRib3gpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQ2xvc2U6IHNhbmRib3ggPT4ge1xuICAgICAgICAgICAgICBkZXRhaWwub25IaWRlKHNhbmRib3gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIFJlcHJlc2VudGluZy5jb25maWcoe1xuICAgICAgICAgICAgc3RvcmU6IHtcbiAgICAgICAgICAgICAgbW9kZTogJ21lbW9yeScsXG4gICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogT3B0aW9uYWwubm9uZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgUmVjZWl2aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBjaGFubmVsczoge1xuICAgICAgICAgICAgICAuLi5yZWNlaXZpbmdDaGFubmVsJDEoe1xuICAgICAgICAgICAgICAgIGlzRXh0cmFQYXJ0OiBzcGVjLmlzRXh0cmFQYXJ0LFxuICAgICAgICAgICAgICAgIC4uLmRldGFpbC5maXJlRGlzbWlzc2FsRXZlbnRJbnN0ZWFkLm1hcChmZSA9PiAoeyBmaXJlRXZlbnRJbnN0ZWFkOiB7IGV2ZW50OiBmZS5ldmVudCB9IH0pKS5nZXRPcih7fSlcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIC4uLnJlY2VpdmluZ0NoYW5uZWwoe1xuICAgICAgICAgICAgICAgIC4uLmRldGFpbC5maXJlUmVwb3NpdGlvbkV2ZW50SW5zdGVhZC5tYXAoZmUgPT4gKHsgZmlyZUV2ZW50SW5zdGVhZDogeyBldmVudDogZmUuZXZlbnQgfSB9KSkuZ2V0T3Ioe30pLFxuICAgICAgICAgICAgICAgIGRvUmVwb3NpdGlvbjogcmVwb3NpdGlvblxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF0pLFxuICAgICAgICBldmVudE9yZGVyOiBkZXRhaWwuZXZlbnRPcmRlcixcbiAgICAgICAgYXBpc1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IElubGluZVZpZXcgPSBzaW5nbGUoe1xuICAgICAgbmFtZTogJ0lubGluZVZpZXcnLFxuICAgICAgY29uZmlnRmllbGRzOiBbXG4gICAgICAgIHJlcXVpcmVkJDEoJ2xhenlTaW5rJyksXG4gICAgICAgIG9uSGFuZGxlcignb25TaG93JyksXG4gICAgICAgIG9uSGFuZGxlcignb25IaWRlJyksXG4gICAgICAgIG9wdGlvbkZ1bmN0aW9uKCdvbkVzY2FwZScpLFxuICAgICAgICBmaWVsZCgnaW5saW5lQmVoYXZpb3VycycsIFtcbiAgICAgICAgICBTYW5kYm94aW5nLFxuICAgICAgICAgIFJlcHJlc2VudGluZyxcbiAgICAgICAgICBSZWNlaXZpbmdcbiAgICAgICAgXSksXG4gICAgICAgIG9wdGlvbk9iak9mKCdmaXJlRGlzbWlzc2FsRXZlbnRJbnN0ZWFkJywgW2RlZmF1bHRlZCgnZXZlbnQnLCBkaXNtaXNzUmVxdWVzdGVkKCkpXSksXG4gICAgICAgIG9wdGlvbk9iak9mKCdmaXJlUmVwb3NpdGlvbkV2ZW50SW5zdGVhZCcsIFtkZWZhdWx0ZWQoJ2V2ZW50JywgcmVwb3NpdGlvblJlcXVlc3RlZCgpKV0pLFxuICAgICAgICBkZWZhdWx0ZWQoJ2dldFJlbGF0ZWQnLCBPcHRpb25hbC5ub25lKSxcbiAgICAgICAgZGVmYXVsdGVkKCdpc0V4dHJhUGFydCcsIG5ldmVyKSxcbiAgICAgICAgZGVmYXVsdGVkKCdldmVudE9yZGVyJywgT3B0aW9uYWwubm9uZSlcbiAgICAgIF0sXG4gICAgICBmYWN0b3J5OiBmYWN0b3J5JG8sXG4gICAgICBhcGlzOiB7XG4gICAgICAgIHNob3dBdDogKGFwaXMsIGNvbXBvbmVudCwgYW5jaG9yLCB0aGluZykgPT4ge1xuICAgICAgICAgIGFwaXMuc2hvd0F0KGNvbXBvbmVudCwgYW5jaG9yLCB0aGluZyk7XG4gICAgICAgIH0sXG4gICAgICAgIHNob3dXaXRoaW5Cb3VuZHM6IChhcGlzLCBjb21wb25lbnQsIGFuY2hvciwgdGhpbmcsIGJvdW5kcykgPT4ge1xuICAgICAgICAgIGFwaXMuc2hvd1dpdGhpbkJvdW5kcyhjb21wb25lbnQsIGFuY2hvciwgdGhpbmcsIGJvdW5kcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHNob3dNZW51QXQ6IChhcGlzLCBjb21wb25lbnQsIGFuY2hvciwgbWVudVNwZWMpID0+IHtcbiAgICAgICAgICBhcGlzLnNob3dNZW51QXQoY29tcG9uZW50LCBhbmNob3IsIG1lbnVTcGVjKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2hvd01lbnVXaXRoaW5Cb3VuZHM6IChhcGlzLCBjb21wb25lbnQsIGFuY2hvciwgbWVudVNwZWMsIGJvdW5kcykgPT4ge1xuICAgICAgICAgIGFwaXMuc2hvd01lbnVXaXRoaW5Cb3VuZHMoY29tcG9uZW50LCBhbmNob3IsIG1lbnVTcGVjLCBib3VuZHMpO1xuICAgICAgICB9LFxuICAgICAgICBoaWRlOiAoYXBpcywgY29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgYXBpcy5oaWRlKGNvbXBvbmVudCk7XG4gICAgICAgIH0sXG4gICAgICAgIGlzT3BlbjogKGFwaXMsIGNvbXBvbmVudCkgPT4gYXBpcy5pc09wZW4oY29tcG9uZW50KSxcbiAgICAgICAgZ2V0Q29udGVudDogKGFwaXMsIGNvbXBvbmVudCkgPT4gYXBpcy5nZXRDb250ZW50KGNvbXBvbmVudCksXG4gICAgICAgIHNldENvbnRlbnQ6IChhcGlzLCBjb21wb25lbnQsIHRoaW5nKSA9PiB7XG4gICAgICAgICAgYXBpcy5zZXRDb250ZW50KGNvbXBvbmVudCwgdGhpbmcpO1xuICAgICAgICB9LFxuICAgICAgICByZXBvc2l0aW9uOiAoYXBpcywgY29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgYXBpcy5yZXBvc2l0aW9uKGNvbXBvbmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBnbG9iYWwkOSA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLnV0aWwuRGVsYXknKTtcblxuICAgIGNvbnN0IGZhY3RvcnkkbiA9IGRldGFpbCA9PiB7XG4gICAgICBjb25zdCBldmVudHMgPSBldmVudHMkYShkZXRhaWwuYWN0aW9uKTtcbiAgICAgIGNvbnN0IHRhZyA9IGRldGFpbC5kb20udGFnO1xuICAgICAgY29uc3QgbG9va3VwQXR0ciA9IGF0dHIgPT4gZ2V0JGcoZGV0YWlsLmRvbSwgJ2F0dHJpYnV0ZXMnKS5iaW5kKGF0dHJzID0+IGdldCRnKGF0dHJzLCBhdHRyKSk7XG4gICAgICBjb25zdCBnZXRNb2RBdHRyaWJ1dGVzID0gKCkgPT4ge1xuICAgICAgICBpZiAodGFnID09PSAnYnV0dG9uJykge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSBsb29rdXBBdHRyKCd0eXBlJykuZ2V0T3IoJ2J1dHRvbicpO1xuICAgICAgICAgIGNvbnN0IHJvbGVBdHRycyA9IGxvb2t1cEF0dHIoJ3JvbGUnKS5tYXAocm9sZSA9PiAoeyByb2xlIH0pKS5nZXRPcih7fSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAuLi5yb2xlQXR0cnNcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJvbGUgPSBkZXRhaWwucm9sZS5nZXRPcihsb29rdXBBdHRyKCdyb2xlJykuZ2V0T3IoJ2J1dHRvbicpKTtcbiAgICAgICAgICByZXR1cm4geyByb2xlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1aWQ6IGRldGFpbC51aWQsXG4gICAgICAgIGRvbTogZGV0YWlsLmRvbSxcbiAgICAgICAgY29tcG9uZW50czogZGV0YWlsLmNvbXBvbmVudHMsXG4gICAgICAgIGV2ZW50cyxcbiAgICAgICAgYmVoYXZpb3VyczogU2tldGNoQmVoYXZpb3Vycy5hdWdtZW50KGRldGFpbC5idXR0b25CZWhhdmlvdXJzLCBbXG4gICAgICAgICAgRm9jdXNpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICBLZXlpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIG1vZGU6ICdleGVjdXRpb24nLFxuICAgICAgICAgICAgdXNlU3BhY2U6IHRydWUsXG4gICAgICAgICAgICB1c2VFbnRlcjogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIF0pLFxuICAgICAgICBkb21Nb2RpZmljYXRpb246IHsgYXR0cmlidXRlczogZ2V0TW9kQXR0cmlidXRlcygpIH0sXG4gICAgICAgIGV2ZW50T3JkZXI6IGRldGFpbC5ldmVudE9yZGVyXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgQnV0dG9uID0gc2luZ2xlKHtcbiAgICAgIG5hbWU6ICdCdXR0b24nLFxuICAgICAgZmFjdG9yeTogZmFjdG9yeSRuLFxuICAgICAgY29uZmlnRmllbGRzOiBbXG4gICAgICAgIGRlZmF1bHRlZCgndWlkJywgdW5kZWZpbmVkKSxcbiAgICAgICAgcmVxdWlyZWQkMSgnZG9tJyksXG4gICAgICAgIGRlZmF1bHRlZCgnY29tcG9uZW50cycsIFtdKSxcbiAgICAgICAgU2tldGNoQmVoYXZpb3Vycy5maWVsZCgnYnV0dG9uQmVoYXZpb3VycycsIFtcbiAgICAgICAgICBGb2N1c2luZyxcbiAgICAgICAgICBLZXlpbmdcbiAgICAgICAgXSksXG4gICAgICAgIG9wdGlvbiQzKCdhY3Rpb24nKSxcbiAgICAgICAgb3B0aW9uJDMoJ3JvbGUnKSxcbiAgICAgICAgZGVmYXVsdGVkKCdldmVudE9yZGVyJywge30pXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBjb25zdCByZWNvcmQgPSBzcGVjID0+IHtcbiAgICAgIGNvbnN0IHVpZCA9IGlzU2tldGNoU3BlYyhzcGVjKSAmJiBoYXNOb25OdWxsYWJsZUtleShzcGVjLCAndWlkJykgPyBzcGVjLnVpZCA6IGdlbmVyYXRlJDUoJ21lbWVudG8nKTtcbiAgICAgIGNvbnN0IGdldCA9IGFueUluU3lzdGVtID0+IGFueUluU3lzdGVtLmdldFN5c3RlbSgpLmdldEJ5VWlkKHVpZCkuZ2V0T3JEaWUoKTtcbiAgICAgIGNvbnN0IGdldE9wdCA9IGFueUluU3lzdGVtID0+IGFueUluU3lzdGVtLmdldFN5c3RlbSgpLmdldEJ5VWlkKHVpZCkudG9PcHRpb25hbCgpO1xuICAgICAgY29uc3QgYXNTcGVjID0gKCkgPT4gKHtcbiAgICAgICAgLi4uc3BlYyxcbiAgICAgICAgdWlkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdldCxcbiAgICAgICAgZ2V0T3B0LFxuICAgICAgICBhc1NwZWNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBnbG9iYWwkOCA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLnV0aWwuSTE4bicpO1xuXG4gICAgY29uc3QgcnRsVHJhbnNmb3JtID0ge1xuICAgICAgJ2luZGVudCc6IHRydWUsXG4gICAgICAnb3V0ZGVudCc6IHRydWUsXG4gICAgICAndGFibGUtaW5zZXJ0LWNvbHVtbi1hZnRlcic6IHRydWUsXG4gICAgICAndGFibGUtaW5zZXJ0LWNvbHVtbi1iZWZvcmUnOiB0cnVlLFxuICAgICAgJ3Bhc3RlLWNvbHVtbi1hZnRlcic6IHRydWUsXG4gICAgICAncGFzdGUtY29sdW1uLWJlZm9yZSc6IHRydWUsXG4gICAgICAndW5vcmRlcmVkLWxpc3QnOiB0cnVlLFxuICAgICAgJ2xpc3QtYnVsbC1jaXJjbGUnOiB0cnVlLFxuICAgICAgJ2xpc3QtYnVsbC1kZWZhdWx0JzogdHJ1ZSxcbiAgICAgICdsaXN0LWJ1bGwtc3F1YXJlJzogdHJ1ZVxuICAgIH07XG4gICAgY29uc3QgZGVmYXVsdEljb25OYW1lID0gJ3RlbXBvcmFyeS1wbGFjZWhvbGRlcic7XG4gICAgY29uc3QgZGVmYXVsdEljb24gPSBpY29ucyA9PiAoKSA9PiBnZXQkZyhpY29ucywgZGVmYXVsdEljb25OYW1lKS5nZXRPcignIW5vdCBmb3VuZCEnKTtcbiAgICBjb25zdCBnZXRJY29uTmFtZSA9IChuYW1lLCBpY29ucykgPT4ge1xuICAgICAgY29uc3QgbGNOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGdsb2JhbCQ4LmlzUnRsKCkpIHtcbiAgICAgICAgY29uc3QgcnRsTmFtZSA9IGVuc3VyZVRyYWlsaW5nKGxjTmFtZSwgJy1ydGwnKTtcbiAgICAgICAgcmV0dXJuIGhhcyQyKGljb25zLCBydGxOYW1lKSA/IHJ0bE5hbWUgOiBsY05hbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbGNOYW1lO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbG9va3VwSWNvbiA9IChuYW1lLCBpY29ucykgPT4gZ2V0JGcoaWNvbnMsIGdldEljb25OYW1lKG5hbWUsIGljb25zKSk7XG4gICAgY29uc3QgZ2V0JDIgPSAobmFtZSwgaWNvblByb3ZpZGVyKSA9PiB7XG4gICAgICBjb25zdCBpY29ucyA9IGljb25Qcm92aWRlcigpO1xuICAgICAgcmV0dXJuIGxvb2t1cEljb24obmFtZSwgaWNvbnMpLmdldE9yVGh1bmsoZGVmYXVsdEljb24oaWNvbnMpKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldE9yID0gKG5hbWUsIGljb25Qcm92aWRlciwgZmFsbGJhY2tJY29uKSA9PiB7XG4gICAgICBjb25zdCBpY29ucyA9IGljb25Qcm92aWRlcigpO1xuICAgICAgcmV0dXJuIGxvb2t1cEljb24obmFtZSwgaWNvbnMpLm9yKGZhbGxiYWNrSWNvbikuZ2V0T3JUaHVuayhkZWZhdWx0SWNvbihpY29ucykpO1xuICAgIH07XG4gICAgY29uc3QgbmVlZHNSdGxUcmFuc2Zvcm0gPSBpY29uTmFtZSA9PiBnbG9iYWwkOC5pc1J0bCgpID8gaGFzJDIocnRsVHJhbnNmb3JtLCBpY29uTmFtZSkgOiBmYWxzZTtcbiAgICBjb25zdCBhZGRGb2N1c2FibGVCZWhhdmlvdXIgPSAoKSA9PiBjb25maWcoJ2FkZC1mb2N1c2FibGUnLCBbcnVuT25BdHRhY2hlZChjb21wID0+IHtcbiAgICAgICAgY2hpbGQoY29tcC5lbGVtZW50LCAnc3ZnJykuZWFjaChzdmcgPT4gc2V0JDkoc3ZnLCAnZm9jdXNhYmxlJywgJ2ZhbHNlJykpO1xuICAgICAgfSldKTtcbiAgICBjb25zdCByZW5kZXJJY29uJDMgPSAoc3BlYywgaWNvbk5hbWUsIGljb25zLCBmYWxsYmFja0ljb24pID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICBjb25zdCBydGxJY29uQ2xhc3NlcyA9IG5lZWRzUnRsVHJhbnNmb3JtKGljb25OYW1lKSA/IFsndG94LWljb24tLWZsaXAnXSA6IFtdO1xuICAgICAgY29uc3QgaWNvbkh0bWwgPSBnZXQkZyhpY29ucywgZ2V0SWNvbk5hbWUoaWNvbk5hbWUsIGljb25zKSkub3IoZmFsbGJhY2tJY29uKS5nZXRPclRodW5rKGRlZmF1bHRJY29uKGljb25zKSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6IHNwZWMudGFnLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IChfYSA9IHNwZWMuYXR0cmlidXRlcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30sXG4gICAgICAgICAgY2xhc3Nlczogc3BlYy5jbGFzc2VzLmNvbmNhdChydGxJY29uQ2xhc3NlcyksXG4gICAgICAgICAgaW5uZXJIdG1sOiBpY29uSHRtbFxuICAgICAgICB9LFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgLi4uKF9iID0gc3BlYy5iZWhhdmlvdXJzKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBbXSxcbiAgICAgICAgICBhZGRGb2N1c2FibGVCZWhhdmlvdXIoKVxuICAgICAgICBdKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlciQzID0gKGljb25OYW1lLCBzcGVjLCBpY29uUHJvdmlkZXIsIGZhbGxiYWNrSWNvbiA9IE9wdGlvbmFsLm5vbmUoKSkgPT4gcmVuZGVySWNvbiQzKHNwZWMsIGljb25OYW1lLCBpY29uUHJvdmlkZXIoKSwgZmFsbGJhY2tJY29uKTtcbiAgICBjb25zdCByZW5kZXJGaXJzdCA9IChpY29uTmFtZXMsIHNwZWMsIGljb25Qcm92aWRlcikgPT4ge1xuICAgICAgY29uc3QgaWNvbnMgPSBpY29uUHJvdmlkZXIoKTtcbiAgICAgIGNvbnN0IGljb25OYW1lID0gZmluZCQ1KGljb25OYW1lcywgbmFtZSA9PiBoYXMkMihpY29ucywgZ2V0SWNvbk5hbWUobmFtZSwgaWNvbnMpKSk7XG4gICAgICByZXR1cm4gcmVuZGVySWNvbiQzKHNwZWMsIGljb25OYW1lLmdldE9yKGRlZmF1bHRJY29uTmFtZSksIGljb25zLCBPcHRpb25hbC5ub25lKCkpO1xuICAgIH07XG5cbiAgICBjb25zdCBub3RpZmljYXRpb25JY29uTWFwID0ge1xuICAgICAgc3VjY2VzczogJ2NoZWNrbWFyaycsXG4gICAgICBlcnJvcjogJ3dhcm5pbmcnLFxuICAgICAgZXJyOiAnZXJyb3InLFxuICAgICAgd2FybmluZzogJ3dhcm5pbmcnLFxuICAgICAgd2FybjogJ3dhcm5pbmcnLFxuICAgICAgaW5mbzogJ2luZm8nXG4gICAgfTtcbiAgICBjb25zdCBmYWN0b3J5JG0gPSBkZXRhaWwgPT4ge1xuICAgICAgY29uc3QgbWVtQmFubmVyVGV4dCA9IHJlY29yZCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ3AnLFxuICAgICAgICAgIGlubmVySHRtbDogZGV0YWlsLnRyYW5zbGF0aW9uUHJvdmlkZXIoZGV0YWlsLnRleHQpXG4gICAgICAgIH0sXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtSZXBsYWNpbmcuY29uZmlnKHt9KV0pXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlbmRlclBlcmNlbnRCYXIgPSBwZXJjZW50ID0+ICh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtYmFyJ10sXG4gICAgICAgICAgc3R5bGVzOiB7IHdpZHRoOiBgJHsgcGVyY2VudCB9JWAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlbmRlclBlcmNlbnRUZXh0ID0gcGVyY2VudCA9PiAoe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXRleHQnXSxcbiAgICAgICAgICBpbm5lckh0bWw6IGAkeyBwZXJjZW50IH0lYFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG1lbUJhbm5lclByb2dyZXNzID0gcmVjb3JkKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBkZXRhaWwucHJvZ3Jlc3MgPyBbXG4gICAgICAgICAgICAndG94LXByb2dyZXNzLWJhcicsXG4gICAgICAgICAgICAndG94LXByb2dyZXNzLWluZGljYXRvcidcbiAgICAgICAgICBdIDogWyd0b3gtcHJvZ3Jlc3MtYmFyJ11cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1iYXItY29udGFpbmVyJ11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wb25lbnRzOiBbcmVuZGVyUGVyY2VudEJhcigwKV1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlbmRlclBlcmNlbnRUZXh0KDApXG4gICAgICAgIF0sXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtSZXBsYWNpbmcuY29uZmlnKHt9KV0pXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHVwZGF0ZVByb2dyZXNzID0gKGNvbXAsIHBlcmNlbnQpID0+IHtcbiAgICAgICAgaWYgKGNvbXAuZ2V0U3lzdGVtKCkuaXNDb25uZWN0ZWQoKSkge1xuICAgICAgICAgIG1lbUJhbm5lclByb2dyZXNzLmdldE9wdChjb21wKS5lYWNoKHByb2dyZXNzID0+IHtcbiAgICAgICAgICAgIFJlcGxhY2luZy5zZXQocHJvZ3Jlc3MsIFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LWJhci1jb250YWluZXInXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29tcG9uZW50czogW3JlbmRlclBlcmNlbnRCYXIocGVyY2VudCldXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHJlbmRlclBlcmNlbnRUZXh0KHBlcmNlbnQpXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHVwZGF0ZVRleHQgPSAoY29tcCwgdGV4dCkgPT4ge1xuICAgICAgICBpZiAoY29tcC5nZXRTeXN0ZW0oKS5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgICAgY29uc3QgYmFubmVyID0gbWVtQmFubmVyVGV4dC5nZXQoY29tcCk7XG4gICAgICAgICAgUmVwbGFjaW5nLnNldChiYW5uZXIsIFt0ZXh0JDIodGV4dCldKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFwaXMgPSB7XG4gICAgICAgIHVwZGF0ZVByb2dyZXNzLFxuICAgICAgICB1cGRhdGVUZXh0XG4gICAgICB9O1xuICAgICAgY29uc3QgaWNvbkNob2ljZXMgPSBmbGF0dGVuKFtcbiAgICAgICAgZGV0YWlsLmljb24udG9BcnJheSgpLFxuICAgICAgICBkZXRhaWwubGV2ZWwudG9BcnJheSgpLFxuICAgICAgICBkZXRhaWwubGV2ZWwuYmluZChsZXZlbCA9PiBPcHRpb25hbC5mcm9tKG5vdGlmaWNhdGlvbkljb25NYXBbbGV2ZWxdKSkudG9BcnJheSgpXG4gICAgICBdKTtcbiAgICAgIGNvbnN0IG1lbUJ1dHRvbiA9IHJlY29yZChCdXR0b24uc2tldGNoKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnYnV0dG9uJyxcbiAgICAgICAgICBjbGFzc2VzOiBbXG4gICAgICAgICAgICAndG94LW5vdGlmaWNhdGlvbl9fZGlzbWlzcycsXG4gICAgICAgICAgICAndG94LWJ1dHRvbicsXG4gICAgICAgICAgICAndG94LWJ1dHRvbi0tbmFrZWQnLFxuICAgICAgICAgICAgJ3RveC1idXR0b24tLWljb24nXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbcmVuZGVyJDMoJ2Nsb3NlJywge1xuICAgICAgICAgICAgdGFnOiAnc3BhbicsXG4gICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1pY29uJ10sXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7ICdhcmlhLWxhYmVsJzogZGV0YWlsLnRyYW5zbGF0aW9uUHJvdmlkZXIoJ0Nsb3NlJykgfVxuICAgICAgICAgIH0sIGRldGFpbC5pY29uUHJvdmlkZXIpXSxcbiAgICAgICAgYWN0aW9uOiBjb21wID0+IHtcbiAgICAgICAgICBkZXRhaWwub25BY3Rpb24oY29tcCk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbkljb25TcGVjID0gcmVuZGVyRmlyc3QoaWNvbkNob2ljZXMsIHtcbiAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgY2xhc3NlczogWyd0b3gtbm90aWZpY2F0aW9uX19pY29uJ11cbiAgICAgIH0sIGRldGFpbC5pY29uUHJvdmlkZXIpO1xuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uQm9keVNwZWMgPSB7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtbm90aWZpY2F0aW9uX19ib2R5J11cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW21lbUJhbm5lclRleHQuYXNTcGVjKCldLFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbUmVwbGFjaW5nLmNvbmZpZyh7fSldKVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBbXG4gICAgICAgIG5vdGlmaWNhdGlvbkljb25TcGVjLFxuICAgICAgICBub3RpZmljYXRpb25Cb2R5U3BlY1xuICAgICAgXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVpZDogZGV0YWlsLnVpZCxcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7IHJvbGU6ICdhbGVydCcgfSxcbiAgICAgICAgICBjbGFzc2VzOiBkZXRhaWwubGV2ZWwubWFwKGxldmVsID0+IFtcbiAgICAgICAgICAgICd0b3gtbm90aWZpY2F0aW9uJyxcbiAgICAgICAgICAgICd0b3gtbm90aWZpY2F0aW9uLS1pbicsXG4gICAgICAgICAgICBgdG94LW5vdGlmaWNhdGlvbi0tJHsgbGV2ZWwgfWBcbiAgICAgICAgICBdKS5nZXRPcihbXG4gICAgICAgICAgICAndG94LW5vdGlmaWNhdGlvbicsXG4gICAgICAgICAgICAndG94LW5vdGlmaWNhdGlvbi0taW4nXG4gICAgICAgICAgXSlcbiAgICAgICAgfSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIEZvY3VzaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgY29uZmlnKCdub3RpZmljYXRpb24tZXZlbnRzJywgW3J1biQxKGZvY3VzaW4oKSwgY29tcCA9PiB7XG4gICAgICAgICAgICAgIG1lbUJ1dHRvbi5nZXRPcHQoY29tcCkuZWFjaChGb2N1c2luZy5mb2N1cyk7XG4gICAgICAgICAgICB9KV0pXG4gICAgICAgIF0pLFxuICAgICAgICBjb21wb25lbnRzOiBjb21wb25lbnRzLmNvbmNhdChkZXRhaWwucHJvZ3Jlc3MgPyBbbWVtQmFubmVyUHJvZ3Jlc3MuYXNTcGVjKCldIDogW10pLmNvbmNhdCghZGV0YWlsLmNsb3NlQnV0dG9uID8gW10gOiBbbWVtQnV0dG9uLmFzU3BlYygpXSksXG4gICAgICAgIGFwaXNcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBOb3RpZmljYXRpb24gPSBzaW5nbGUoe1xuICAgICAgbmFtZTogJ05vdGlmaWNhdGlvbicsXG4gICAgICBmYWN0b3J5OiBmYWN0b3J5JG0sXG4gICAgICBjb25maWdGaWVsZHM6IFtcbiAgICAgICAgb3B0aW9uJDMoJ2xldmVsJyksXG4gICAgICAgIHJlcXVpcmVkJDEoJ3Byb2dyZXNzJyksXG4gICAgICAgIG9wdGlvbiQzKCdpY29uJyksXG4gICAgICAgIHJlcXVpcmVkJDEoJ29uQWN0aW9uJyksXG4gICAgICAgIHJlcXVpcmVkJDEoJ3RleHQnKSxcbiAgICAgICAgcmVxdWlyZWQkMSgnaWNvblByb3ZpZGVyJyksXG4gICAgICAgIHJlcXVpcmVkJDEoJ3RyYW5zbGF0aW9uUHJvdmlkZXInKSxcbiAgICAgICAgZGVmYXVsdGVkQm9vbGVhbignY2xvc2VCdXR0b24nLCB0cnVlKVxuICAgICAgXSxcbiAgICAgIGFwaXM6IHtcbiAgICAgICAgdXBkYXRlUHJvZ3Jlc3M6IChhcGlzLCBjb21wLCBwZXJjZW50KSA9PiB7XG4gICAgICAgICAgYXBpcy51cGRhdGVQcm9ncmVzcyhjb21wLCBwZXJjZW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgdXBkYXRlVGV4dDogKGFwaXMsIGNvbXAsIHRleHQpID0+IHtcbiAgICAgICAgICBhcGlzLnVwZGF0ZVRleHQoY29tcCwgdGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBOb3RpZmljYXRpb25NYW5hZ2VySW1wbCA9IChlZGl0b3IsIGV4dHJhcywgdWlNb3RoZXJzaGlwKSA9PiB7XG4gICAgICBjb25zdCBzaGFyZWRCYWNrc3RhZ2UgPSBleHRyYXMuYmFja3N0YWdlLnNoYXJlZDtcbiAgICAgIGNvbnN0IGdldEJvdW5kcyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgY29udGVudEFyZWEgPSBib3gkMShTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Q29udGVudEFyZWFDb250YWluZXIoKSkpO1xuICAgICAgICBjb25zdCB3aW4kMSA9IHdpbigpO1xuICAgICAgICBjb25zdCB4ID0gY2xhbXAod2luJDEueCwgY29udGVudEFyZWEueCwgY29udGVudEFyZWEucmlnaHQpO1xuICAgICAgICBjb25zdCB5ID0gY2xhbXAod2luJDEueSwgY29udGVudEFyZWEueSwgY29udGVudEFyZWEuYm90dG9tKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBNYXRoLm1heChjb250ZW50QXJlYS5yaWdodCwgd2luJDEucmlnaHQpO1xuICAgICAgICBjb25zdCBib3R0b20gPSBNYXRoLm1heChjb250ZW50QXJlYS5ib3R0b20sIHdpbiQxLmJvdHRvbSk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGJvdW5kcyh4LCB5LCByaWdodCAtIHgsIGJvdHRvbSAtIHkpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBvcGVuID0gKHNldHRpbmdzLCBjbG9zZUNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IGNsb3NlID0gKCkgPT4ge1xuICAgICAgICAgIGNsb3NlQ2FsbGJhY2soKTtcbiAgICAgICAgICBJbmxpbmVWaWV3LmhpZGUobm90aWZpY2F0aW9uV3JhcHBlcik7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IGJ1aWxkJDEoTm90aWZpY2F0aW9uLnNrZXRjaCh7XG4gICAgICAgICAgdGV4dDogc2V0dGluZ3MudGV4dCxcbiAgICAgICAgICBsZXZlbDogY29udGFpbnMkMihbXG4gICAgICAgICAgICAnc3VjY2VzcycsXG4gICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgJ3dhcm5pbmcnLFxuICAgICAgICAgICAgJ3dhcm4nLFxuICAgICAgICAgICAgJ2luZm8nXG4gICAgICAgICAgXSwgc2V0dGluZ3MudHlwZSkgPyBzZXR0aW5ncy50eXBlIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHByb2dyZXNzOiBzZXR0aW5ncy5wcm9ncmVzc0JhciA9PT0gdHJ1ZSxcbiAgICAgICAgICBpY29uOiBzZXR0aW5ncy5pY29uLFxuICAgICAgICAgIGNsb3NlQnV0dG9uOiBzZXR0aW5ncy5jbG9zZUJ1dHRvbixcbiAgICAgICAgICBvbkFjdGlvbjogY2xvc2UsXG4gICAgICAgICAgaWNvblByb3ZpZGVyOiBzaGFyZWRCYWNrc3RhZ2UucHJvdmlkZXJzLmljb25zLFxuICAgICAgICAgIHRyYW5zbGF0aW9uUHJvdmlkZXI6IHNoYXJlZEJhY2tzdGFnZS5wcm92aWRlcnMudHJhbnNsYXRlXG4gICAgICAgIH0pKTtcbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uV3JhcHBlciA9IGJ1aWxkJDEoSW5saW5lVmlldy5za2V0Y2goe1xuICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LW5vdGlmaWNhdGlvbnMtY29udGFpbmVyJ11cbiAgICAgICAgICB9LFxuICAgICAgICAgIGxhenlTaW5rOiBzaGFyZWRCYWNrc3RhZ2UuZ2V0U2luayxcbiAgICAgICAgICBmaXJlRGlzbWlzc2FsRXZlbnRJbnN0ZWFkOiB7fSxcbiAgICAgICAgICAuLi5zaGFyZWRCYWNrc3RhZ2UuaGVhZGVyLmlzUG9zaXRpb25lZEF0VG9wKCkgPyB7fSA6IHsgZmlyZVJlcG9zaXRpb25FdmVudEluc3RlYWQ6IHt9IH1cbiAgICAgICAgfSkpO1xuICAgICAgICB1aU1vdGhlcnNoaXAuYWRkKG5vdGlmaWNhdGlvbldyYXBwZXIpO1xuICAgICAgICBpZiAoaXNOdW1iZXIoc2V0dGluZ3MudGltZW91dCkgJiYgc2V0dGluZ3MudGltZW91dCA+IDApIHtcbiAgICAgICAgICBnbG9iYWwkOS5zZXRFZGl0b3JUaW1lb3V0KGVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgY2xvc2UoKTtcbiAgICAgICAgICB9LCBzZXR0aW5ncy50aW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXBvc2l0aW9uID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvblNwZWMgPSBwcmVtYWRlKG5vdGlmaWNhdGlvbik7XG4gICAgICAgICAgY29uc3QgYW5jaG9yT3ZlcnJpZGVzID0geyBtYXhIZWlnaHRGdW5jdGlvbjogZXhwYW5kYWJsZSQxKCkgfTtcbiAgICAgICAgICBjb25zdCBhbGxOb3RpZmljYXRpb25zID0gZWRpdG9yLm5vdGlmaWNhdGlvbk1hbmFnZXIuZ2V0Tm90aWZpY2F0aW9ucygpO1xuICAgICAgICAgIGlmIChhbGxOb3RpZmljYXRpb25zWzBdID09PSB0aGlzTm90aWZpY2F0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBhbmNob3IgPSB7XG4gICAgICAgICAgICAgIC4uLnNoYXJlZEJhY2tzdGFnZS5hbmNob3JzLmJhbm5lcigpLFxuICAgICAgICAgICAgICBvdmVycmlkZXM6IGFuY2hvck92ZXJyaWRlc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIElubGluZVZpZXcuc2hvd1dpdGhpbkJvdW5kcyhub3RpZmljYXRpb25XcmFwcGVyLCBub3RpZmljYXRpb25TcGVjLCB7IGFuY2hvciB9LCBnZXRCb3VuZHMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmRleE9mKGFsbE5vdGlmaWNhdGlvbnMsIHRoaXNOb3RpZmljYXRpb24pLmVhY2goaWR4ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNOb3RpZmljYXRpb24gPSBhbGxOb3RpZmljYXRpb25zW2lkeCAtIDFdLmdldEVsKCk7XG4gICAgICAgICAgICAgIGNvbnN0IG5vZGVBbmNob3IgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ25vZGUnLFxuICAgICAgICAgICAgICAgIHJvb3Q6IGJvZHkoKSxcbiAgICAgICAgICAgICAgICBub2RlOiBPcHRpb25hbC5zb21lKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHByZXZpb3VzTm90aWZpY2F0aW9uKSksXG4gICAgICAgICAgICAgICAgb3ZlcnJpZGVzOiBhbmNob3JPdmVycmlkZXMsXG4gICAgICAgICAgICAgICAgbGF5b3V0czoge1xuICAgICAgICAgICAgICAgICAgb25SdGw6ICgpID0+IFtzb3V0aCQyXSxcbiAgICAgICAgICAgICAgICAgIG9uTHRyOiAoKSA9PiBbc291dGgkMl1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIElubGluZVZpZXcuc2hvd1dpdGhpbkJvdW5kcyhub3RpZmljYXRpb25XcmFwcGVyLCBub3RpZmljYXRpb25TcGVjLCB7IGFuY2hvcjogbm9kZUFuY2hvciB9LCBnZXRCb3VuZHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0aGlzTm90aWZpY2F0aW9uID0ge1xuICAgICAgICAgIGNsb3NlLFxuICAgICAgICAgIHJlcG9zaXRpb24sXG4gICAgICAgICAgdGV4dDogbnVUZXh0ID0+IHtcbiAgICAgICAgICAgIE5vdGlmaWNhdGlvbi51cGRhdGVUZXh0KG5vdGlmaWNhdGlvbiwgbnVUZXh0KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldHRpbmdzLFxuICAgICAgICAgIGdldEVsOiAoKSA9PiBub3RpZmljYXRpb24uZWxlbWVudC5kb20sXG4gICAgICAgICAgcHJvZ3Jlc3NCYXI6IHtcbiAgICAgICAgICAgIHZhbHVlOiBwZXJjZW50ID0+IHtcbiAgICAgICAgICAgICAgTm90aWZpY2F0aW9uLnVwZGF0ZVByb2dyZXNzKG5vdGlmaWNhdGlvbiwgcGVyY2VudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpc05vdGlmaWNhdGlvbjtcbiAgICAgIH07XG4gICAgICBjb25zdCBjbG9zZSA9IG5vdGlmaWNhdGlvbiA9PiB7XG4gICAgICAgIG5vdGlmaWNhdGlvbi5jbG9zZSgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldEFyZ3MgPSBub3RpZmljYXRpb24gPT4ge1xuICAgICAgICByZXR1cm4gbm90aWZpY2F0aW9uLnNldHRpbmdzO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wZW4sXG4gICAgICAgIGNsb3NlLFxuICAgICAgICBnZXRBcmdzXG4gICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgZ2xvYmFsJDcgPSB0aW55bWNlLnV0aWwuVG9vbHMucmVzb2x2ZSgndGlueW1jZS5kb20uRE9NVXRpbHMnKTtcblxuICAgIHZhciBnbG9iYWwkNiA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLkVkaXRvck1hbmFnZXInKTtcblxuICAgIHZhciBnbG9iYWwkNSA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLkVudicpO1xuXG4gICAgdmFyIFRvb2xiYXJNb2RlJDE7XG4gICAgKGZ1bmN0aW9uIChUb29sYmFyTW9kZSkge1xuICAgICAgVG9vbGJhck1vZGVbJ2RlZmF1bHQnXSA9ICd3cmFwJztcbiAgICAgIFRvb2xiYXJNb2RlWydmbG9hdGluZyddID0gJ2Zsb2F0aW5nJztcbiAgICAgIFRvb2xiYXJNb2RlWydzbGlkaW5nJ10gPSAnc2xpZGluZyc7XG4gICAgICBUb29sYmFyTW9kZVsnc2Nyb2xsaW5nJ10gPSAnc2Nyb2xsaW5nJztcbiAgICB9KFRvb2xiYXJNb2RlJDEgfHwgKFRvb2xiYXJNb2RlJDEgPSB7fSkpKTtcbiAgICB2YXIgVG9vbGJhckxvY2F0aW9uJDE7XG4gICAgKGZ1bmN0aW9uIChUb29sYmFyTG9jYXRpb24pIHtcbiAgICAgIFRvb2xiYXJMb2NhdGlvblsnYXV0byddID0gJ2F1dG8nO1xuICAgICAgVG9vbGJhckxvY2F0aW9uWyd0b3AnXSA9ICd0b3AnO1xuICAgICAgVG9vbGJhckxvY2F0aW9uWydib3R0b20nXSA9ICdib3R0b20nO1xuICAgIH0oVG9vbGJhckxvY2F0aW9uJDEgfHwgKFRvb2xiYXJMb2NhdGlvbiQxID0ge30pKSk7XG4gICAgY29uc3Qgb3B0aW9uJDIgPSBuYW1lID0+IGVkaXRvciA9PiBlZGl0b3Iub3B0aW9ucy5nZXQobmFtZSk7XG4gICAgY29uc3Qgd3JhcE9wdGlvbmFsID0gZm4gPT4gZWRpdG9yID0+IE9wdGlvbmFsLmZyb20oZm4oZWRpdG9yKSk7XG4gICAgY29uc3QgcmVnaXN0ZXIkZSA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBpc1Bob25lID0gZ2xvYmFsJDUuZGV2aWNlVHlwZS5pc1Bob25lKCk7XG4gICAgICBjb25zdCBpc01vYmlsZSA9IGdsb2JhbCQ1LmRldmljZVR5cGUuaXNUYWJsZXQoKSB8fCBpc1Bob25lO1xuICAgICAgY29uc3QgcmVnaXN0ZXJPcHRpb24gPSBlZGl0b3Iub3B0aW9ucy5yZWdpc3RlcjtcbiAgICAgIGNvbnN0IHN0cmluZ09yRmFsc2VQcm9jZXNzb3IgPSB2YWx1ZSA9PiBpc1N0cmluZyh2YWx1ZSkgfHwgdmFsdWUgPT09IGZhbHNlO1xuICAgICAgY29uc3Qgc3RyaW5nT3JOdW1iZXJQcm9jZXNzb3IgPSB2YWx1ZSA9PiBpc1N0cmluZyh2YWx1ZSkgfHwgaXNOdW1iZXIodmFsdWUpO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3NraW4nLCB7XG4gICAgICAgIHByb2Nlc3NvcjogdmFsdWUgPT4gaXNTdHJpbmcodmFsdWUpIHx8IHZhbHVlID09PSBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogJ294aWRlJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignc2tpbl91cmwnLCB7IHByb2Nlc3NvcjogJ3N0cmluZycgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaGVpZ2h0Jywge1xuICAgICAgICBwcm9jZXNzb3I6IHN0cmluZ09yTnVtYmVyUHJvY2Vzc29yLFxuICAgICAgICBkZWZhdWx0OiBNYXRoLm1heChlZGl0b3IuZ2V0RWxlbWVudCgpLm9mZnNldEhlaWdodCwgNDAwKVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignd2lkdGgnLCB7XG4gICAgICAgIHByb2Nlc3Nvcjogc3RyaW5nT3JOdW1iZXJQcm9jZXNzb3IsXG4gICAgICAgIGRlZmF1bHQ6IGdsb2JhbCQ3LkRPTS5nZXRTdHlsZShlZGl0b3IuZ2V0RWxlbWVudCgpLCAnd2lkdGgnKVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignbWluX2hlaWdodCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnbnVtYmVyJyxcbiAgICAgICAgZGVmYXVsdDogMTAwXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdtaW5fd2lkdGgnLCB7IHByb2Nlc3NvcjogJ251bWJlcicgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignbWF4X2hlaWdodCcsIHsgcHJvY2Vzc29yOiAnbnVtYmVyJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdtYXhfd2lkdGgnLCB7IHByb2Nlc3NvcjogJ251bWJlcicgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignc3R5bGVfZm9ybWF0cycsIHsgcHJvY2Vzc29yOiAnb2JqZWN0W10nIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3N0eWxlX2Zvcm1hdHNfbWVyZ2UnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignc3R5bGVfZm9ybWF0c19hdXRvaGlkZScsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdsaW5lX2hlaWdodF9mb3JtYXRzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnMSAxLjEgMS4yIDEuMyAxLjQgMS41IDInXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdmb250X2ZhbWlseV9mb3JtYXRzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnQW5kYWxlIE1vbm89YW5kYWxlIG1vbm8sbW9ub3NwYWNlOycgKyAnQXJpYWw9YXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWY7JyArICdBcmlhbCBCbGFjaz1hcmlhbCBibGFjayxzYW5zLXNlcmlmOycgKyAnQm9vayBBbnRpcXVhPWJvb2sgYW50aXF1YSxwYWxhdGlubyxzZXJpZjsnICsgJ0NvbWljIFNhbnMgTVM9Y29taWMgc2FucyBtcyxzYW5zLXNlcmlmOycgKyAnQ291cmllciBOZXc9Y291cmllciBuZXcsY291cmllcixtb25vc3BhY2U7JyArICdHZW9yZ2lhPWdlb3JnaWEscGFsYXRpbm8sc2VyaWY7JyArICdIZWx2ZXRpY2E9aGVsdmV0aWNhLGFyaWFsLHNhbnMtc2VyaWY7JyArICdJbXBhY3Q9aW1wYWN0LHNhbnMtc2VyaWY7JyArICdTeW1ib2w9c3ltYm9sOycgKyAnVGFob21hPXRhaG9tYSxhcmlhbCxoZWx2ZXRpY2Esc2Fucy1zZXJpZjsnICsgJ1Rlcm1pbmFsPXRlcm1pbmFsLG1vbmFjbyxtb25vc3BhY2U7JyArICdUaW1lcyBOZXcgUm9tYW49dGltZXMgbmV3IHJvbWFuLHRpbWVzLHNlcmlmOycgKyAnVHJlYnVjaGV0IE1TPXRyZWJ1Y2hldCBtcyxnZW5ldmEsc2Fucy1zZXJpZjsnICsgJ1ZlcmRhbmE9dmVyZGFuYSxnZW5ldmEsc2Fucy1zZXJpZjsnICsgJ1dlYmRpbmdzPXdlYmRpbmdzOycgKyAnV2luZ2RpbmdzPXdpbmdkaW5ncyx6YXBmIGRpbmdiYXRzJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignZm9udF9zaXplX2Zvcm1hdHMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICc4cHQgMTBwdCAxMnB0IDE0cHQgMThwdCAyNHB0IDM2cHQnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdmb250X3NpemVfaW5wdXRfZGVmYXVsdF91bml0Jywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAncHQnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdibG9ja19mb3JtYXRzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnUGFyYWdyYXBoPXA7JyArICdIZWFkaW5nIDE9aDE7JyArICdIZWFkaW5nIDI9aDI7JyArICdIZWFkaW5nIDM9aDM7JyArICdIZWFkaW5nIDQ9aDQ7JyArICdIZWFkaW5nIDU9aDU7JyArICdIZWFkaW5nIDY9aDY7JyArICdQcmVmb3JtYXR0ZWQ9cHJlJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignY29udGVudF9sYW5ncycsIHsgcHJvY2Vzc29yOiAnb2JqZWN0W10nIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3JlbW92ZWRfbWVudWl0ZW1zJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignbWVudWJhcicsIHtcbiAgICAgICAgcHJvY2Vzc29yOiB2YWx1ZSA9PiBpc1N0cmluZyh2YWx1ZSkgfHwgaXNCb29sZWFuKHZhbHVlKSxcbiAgICAgICAgZGVmYXVsdDogIWlzUGhvbmVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ21lbnUnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ29iamVjdCcsXG4gICAgICAgIGRlZmF1bHQ6IHt9XG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd0b29sYmFyJywge1xuICAgICAgICBwcm9jZXNzb3I6IHZhbHVlID0+IHtcbiAgICAgICAgICBpZiAoaXNCb29sZWFuKHZhbHVlKSB8fCBpc1N0cmluZyh2YWx1ZSkgfHwgaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICB2YWxpZDogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnTXVzdCBiZSBhIGJvb2xlYW4sIHN0cmluZyBvciBhcnJheS4nXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByYW5nZSQyKDksIG51bSA9PiB7XG4gICAgICAgIHJlZ2lzdGVyT3B0aW9uKCd0b29sYmFyJyArIChudW0gKyAxKSwgeyBwcm9jZXNzb3I6ICdzdHJpbmcnIH0pO1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndG9vbGJhcl9tb2RlJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiBpc01vYmlsZSA/ICdzY3JvbGxpbmcnIDogJ2Zsb2F0aW5nJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndG9vbGJhcl9ncm91cHMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ29iamVjdCcsXG4gICAgICAgIGRlZmF1bHQ6IHt9XG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd0b29sYmFyX2xvY2F0aW9uJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiBUb29sYmFyTG9jYXRpb24kMS5hdXRvXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd0b29sYmFyX3BlcnNpc3QnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndG9vbGJhcl9zdGlja3knLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBlZGl0b3IuaW5saW5lXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd0b29sYmFyX3N0aWNreV9vZmZzZXQnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ251bWJlcicsXG4gICAgICAgIGRlZmF1bHQ6IDBcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2ZpeGVkX3Rvb2xiYXJfY29udGFpbmVyJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignZml4ZWRfdG9vbGJhcl9jb250YWluZXJfdGFyZ2V0JywgeyBwcm9jZXNzb3I6ICdvYmplY3QnIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3VpX21vZGUnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICdjb21iaW5lZCdcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2ZpbGVfcGlja2VyX2NhbGxiYWNrJywgeyBwcm9jZXNzb3I6ICdmdW5jdGlvbicgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignZmlsZV9waWNrZXJfdmFsaWRhdG9yX2hhbmRsZXInLCB7IHByb2Nlc3NvcjogJ2Z1bmN0aW9uJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdmaWxlX3BpY2tlcl90eXBlcycsIHsgcHJvY2Vzc29yOiAnc3RyaW5nJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd0eXBlYWhlYWRfdXJscycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2FuY2hvcl90b3AnLCB7XG4gICAgICAgIHByb2Nlc3Nvcjogc3RyaW5nT3JGYWxzZVByb2Nlc3NvcixcbiAgICAgICAgZGVmYXVsdDogJyN0b3AnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdhbmNob3JfYm90dG9tJywge1xuICAgICAgICBwcm9jZXNzb3I6IHN0cmluZ09yRmFsc2VQcm9jZXNzb3IsXG4gICAgICAgIGRlZmF1bHQ6ICcjYm90dG9tJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignZHJhZ2dhYmxlX21vZGFsJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3N0YXR1c2JhcicsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2VsZW1lbnRwYXRoJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYnJhbmRpbmcnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdwcm9tb3Rpb24nLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdyZXNpemUnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogdmFsdWUgPT4gdmFsdWUgPT09ICdib3RoJyB8fCBpc0Jvb2xlYW4odmFsdWUpLFxuICAgICAgICBkZWZhdWx0OiAhZ2xvYmFsJDUuZGV2aWNlVHlwZS5pc1RvdWNoKClcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3NpZGViYXJfc2hvdycsIHsgcHJvY2Vzc29yOiAnc3RyaW5nJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdoZWxwX2FjY2Vzc2liaWxpdHknLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBlZGl0b3IuaGFzUGx1Z2luKCdoZWxwJylcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaXNSZWFkT25seSA9IG9wdGlvbiQyKCdyZWFkb25seScpO1xuICAgIGNvbnN0IGdldEhlaWdodE9wdGlvbiA9IG9wdGlvbiQyKCdoZWlnaHQnKTtcbiAgICBjb25zdCBnZXRXaWR0aE9wdGlvbiA9IG9wdGlvbiQyKCd3aWR0aCcpO1xuICAgIGNvbnN0IGdldE1pbldpZHRoT3B0aW9uID0gd3JhcE9wdGlvbmFsKG9wdGlvbiQyKCdtaW5fd2lkdGgnKSk7XG4gICAgY29uc3QgZ2V0TWluSGVpZ2h0T3B0aW9uID0gd3JhcE9wdGlvbmFsKG9wdGlvbiQyKCdtaW5faGVpZ2h0JykpO1xuICAgIGNvbnN0IGdldE1heFdpZHRoT3B0aW9uID0gd3JhcE9wdGlvbmFsKG9wdGlvbiQyKCdtYXhfd2lkdGgnKSk7XG4gICAgY29uc3QgZ2V0TWF4SGVpZ2h0T3B0aW9uID0gd3JhcE9wdGlvbmFsKG9wdGlvbiQyKCdtYXhfaGVpZ2h0JykpO1xuICAgIGNvbnN0IGdldFVzZXJTdHlsZUZvcm1hdHMgPSB3cmFwT3B0aW9uYWwob3B0aW9uJDIoJ3N0eWxlX2Zvcm1hdHMnKSk7XG4gICAgY29uc3Qgc2hvdWxkTWVyZ2VTdHlsZUZvcm1hdHMgPSBvcHRpb24kMignc3R5bGVfZm9ybWF0c19tZXJnZScpO1xuICAgIGNvbnN0IHNob3VsZEF1dG9IaWRlU3R5bGVGb3JtYXRzID0gb3B0aW9uJDIoJ3N0eWxlX2Zvcm1hdHNfYXV0b2hpZGUnKTtcbiAgICBjb25zdCBnZXRDb250ZW50TGFuZ3VhZ2VzID0gb3B0aW9uJDIoJ2NvbnRlbnRfbGFuZ3MnKTtcbiAgICBjb25zdCBnZXRSZW1vdmVkTWVudUl0ZW1zID0gb3B0aW9uJDIoJ3JlbW92ZWRfbWVudWl0ZW1zJyk7XG4gICAgY29uc3QgZ2V0VG9vbGJhck1vZGUgPSBvcHRpb24kMigndG9vbGJhcl9tb2RlJyk7XG4gICAgY29uc3QgZ2V0VG9vbGJhckdyb3VwcyA9IG9wdGlvbiQyKCd0b29sYmFyX2dyb3VwcycpO1xuICAgIGNvbnN0IGdldFRvb2xiYXJMb2NhdGlvbiA9IG9wdGlvbiQyKCd0b29sYmFyX2xvY2F0aW9uJyk7XG4gICAgY29uc3QgZml4ZWRDb250YWluZXJTZWxlY3RvciA9IG9wdGlvbiQyKCdmaXhlZF90b29sYmFyX2NvbnRhaW5lcicpO1xuICAgIGNvbnN0IGZpeGVkVG9vbGJhckNvbnRhaW5lclRhcmdldCA9IG9wdGlvbiQyKCdmaXhlZF90b29sYmFyX2NvbnRhaW5lcl90YXJnZXQnKTtcbiAgICBjb25zdCBpc1Rvb2xiYXJQZXJzaXN0ID0gb3B0aW9uJDIoJ3Rvb2xiYXJfcGVyc2lzdCcpO1xuICAgIGNvbnN0IGdldFN0aWNreVRvb2xiYXJPZmZzZXQgPSBvcHRpb24kMigndG9vbGJhcl9zdGlja3lfb2Zmc2V0Jyk7XG4gICAgY29uc3QgZ2V0TWVudWJhciA9IG9wdGlvbiQyKCdtZW51YmFyJyk7XG4gICAgY29uc3QgZ2V0VG9vbGJhciA9IG9wdGlvbiQyKCd0b29sYmFyJyk7XG4gICAgY29uc3QgZ2V0RmlsZVBpY2tlckNhbGxiYWNrID0gb3B0aW9uJDIoJ2ZpbGVfcGlja2VyX2NhbGxiYWNrJyk7XG4gICAgY29uc3QgZ2V0RmlsZVBpY2tlclZhbGlkYXRvckhhbmRsZXIgPSBvcHRpb24kMignZmlsZV9waWNrZXJfdmFsaWRhdG9yX2hhbmRsZXInKTtcbiAgICBjb25zdCBnZXRGb250U2l6ZUlucHV0RGVmYXVsdFVuaXQgPSBvcHRpb24kMignZm9udF9zaXplX2lucHV0X2RlZmF1bHRfdW5pdCcpO1xuICAgIGNvbnN0IGdldEZpbGVQaWNrZXJUeXBlcyA9IG9wdGlvbiQyKCdmaWxlX3BpY2tlcl90eXBlcycpO1xuICAgIGNvbnN0IHVzZVR5cGVhaGVhZFVybHMgPSBvcHRpb24kMigndHlwZWFoZWFkX3VybHMnKTtcbiAgICBjb25zdCBnZXRBbmNob3JUb3AgPSBvcHRpb24kMignYW5jaG9yX3RvcCcpO1xuICAgIGNvbnN0IGdldEFuY2hvckJvdHRvbSA9IG9wdGlvbiQyKCdhbmNob3JfYm90dG9tJyk7XG4gICAgY29uc3QgaXNEcmFnZ2FibGVNb2RhbCQxID0gb3B0aW9uJDIoJ2RyYWdnYWJsZV9tb2RhbCcpO1xuICAgIGNvbnN0IHVzZVN0YXR1c0JhciA9IG9wdGlvbiQyKCdzdGF0dXNiYXInKTtcbiAgICBjb25zdCB1c2VFbGVtZW50UGF0aCA9IG9wdGlvbiQyKCdlbGVtZW50cGF0aCcpO1xuICAgIGNvbnN0IHVzZUJyYW5kaW5nID0gb3B0aW9uJDIoJ2JyYW5kaW5nJyk7XG4gICAgY29uc3QgZ2V0UmVzaXplID0gb3B0aW9uJDIoJ3Jlc2l6ZScpO1xuICAgIGNvbnN0IGdldFBhc3RlQXNUZXh0ID0gb3B0aW9uJDIoJ3Bhc3RlX2FzX3RleHQnKTtcbiAgICBjb25zdCBnZXRTaWRlYmFyU2hvdyA9IG9wdGlvbiQyKCdzaWRlYmFyX3Nob3cnKTtcbiAgICBjb25zdCBwcm9tb3Rpb25FbmFibGVkID0gb3B0aW9uJDIoJ3Byb21vdGlvbicpO1xuICAgIGNvbnN0IHVzZUhlbHBBY2Nlc3NpYmlsaXR5ID0gb3B0aW9uJDIoJ2hlbHBfYWNjZXNzaWJpbGl0eScpO1xuICAgIGNvbnN0IGlzU2tpbkRpc2FibGVkID0gZWRpdG9yID0+IGVkaXRvci5vcHRpb25zLmdldCgnc2tpbicpID09PSBmYWxzZTtcbiAgICBjb25zdCBpc01lbnViYXJFbmFibGVkID0gZWRpdG9yID0+IGVkaXRvci5vcHRpb25zLmdldCgnbWVudWJhcicpICE9PSBmYWxzZTtcbiAgICBjb25zdCBnZXRTa2luVXJsID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHNraW5VcmwgPSBlZGl0b3Iub3B0aW9ucy5nZXQoJ3NraW5fdXJsJyk7XG4gICAgICBpZiAoaXNTa2luRGlzYWJsZWQoZWRpdG9yKSkge1xuICAgICAgICByZXR1cm4gc2tpblVybDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChza2luVXJsKSB7XG4gICAgICAgICAgcmV0dXJuIGVkaXRvci5kb2N1bWVudEJhc2VVUkkudG9BYnNvbHV0ZShza2luVXJsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBza2luID0gZWRpdG9yLm9wdGlvbnMuZ2V0KCdza2luJyk7XG4gICAgICAgICAgcmV0dXJuIGdsb2JhbCQ2LmJhc2VVUkwgKyAnL3NraW5zL3VpLycgKyBza2luO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRMaW5lSGVpZ2h0Rm9ybWF0cyA9IGVkaXRvciA9PiBlZGl0b3Iub3B0aW9ucy5nZXQoJ2xpbmVfaGVpZ2h0X2Zvcm1hdHMnKS5zcGxpdCgnICcpO1xuICAgIGNvbnN0IGlzVG9vbGJhckVuYWJsZWQgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgdG9vbGJhciA9IGdldFRvb2xiYXIoZWRpdG9yKTtcbiAgICAgIGNvbnN0IGlzVG9vbGJhclN0cmluZyA9IGlzU3RyaW5nKHRvb2xiYXIpO1xuICAgICAgY29uc3QgaXNUb29sYmFyT2JqZWN0QXJyYXkgPSBpc0FycmF5KHRvb2xiYXIpICYmIHRvb2xiYXIubGVuZ3RoID4gMDtcbiAgICAgIHJldHVybiAhaXNNdWx0aXBsZVRvb2xiYXJzKGVkaXRvcikgJiYgKGlzVG9vbGJhck9iamVjdEFycmF5IHx8IGlzVG9vbGJhclN0cmluZyB8fCB0b29sYmFyID09PSB0cnVlKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldE11bHRpcGxlVG9vbGJhcnNPcHRpb24gPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgdG9vbGJhcnMgPSByYW5nZSQyKDksIG51bSA9PiBlZGl0b3Iub3B0aW9ucy5nZXQoJ3Rvb2xiYXInICsgKG51bSArIDEpKSk7XG4gICAgICBjb25zdCB0b29sYmFyQXJyYXkgPSBmaWx0ZXIkMih0b29sYmFycywgaXNTdHJpbmcpO1xuICAgICAgcmV0dXJuIHNvbWVJZih0b29sYmFyQXJyYXkubGVuZ3RoID4gMCwgdG9vbGJhckFycmF5KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzTXVsdGlwbGVUb29sYmFycyA9IGVkaXRvciA9PiBnZXRNdWx0aXBsZVRvb2xiYXJzT3B0aW9uKGVkaXRvcikuZm9sZCgoKSA9PiB7XG4gICAgICBjb25zdCB0b29sYmFyID0gZ2V0VG9vbGJhcihlZGl0b3IpO1xuICAgICAgcmV0dXJuIGlzQXJyYXlPZih0b29sYmFyLCBpc1N0cmluZykgJiYgdG9vbGJhci5sZW5ndGggPiAwO1xuICAgIH0sIGFsd2F5cyk7XG4gICAgY29uc3QgaXNUb29sYmFyTG9jYXRpb25Cb3R0b20gPSBlZGl0b3IgPT4gZ2V0VG9vbGJhckxvY2F0aW9uKGVkaXRvcikgPT09IFRvb2xiYXJMb2NhdGlvbiQxLmJvdHRvbTtcbiAgICBjb25zdCBmaXhlZENvbnRhaW5lclRhcmdldCA9IGVkaXRvciA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBpZiAoIWVkaXRvci5pbmxpbmUpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gKF9hID0gZml4ZWRDb250YWluZXJTZWxlY3RvcihlZGl0b3IpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgIGlmIChzZWxlY3Rvci5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBkZXNjZW5kYW50KGJvZHkoKSwgc2VsZWN0b3IpO1xuICAgICAgfVxuICAgICAgY29uc3QgZWxlbWVudCA9IGZpeGVkVG9vbGJhckNvbnRhaW5lclRhcmdldChlZGl0b3IpO1xuICAgICAgaWYgKGlzTm9uTnVsbGFibGUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoU3VnYXJFbGVtZW50LmZyb21Eb20oZWxlbWVudCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IHVzZUZpeGVkQ29udGFpbmVyID0gZWRpdG9yID0+IGVkaXRvci5pbmxpbmUgJiYgZml4ZWRDb250YWluZXJUYXJnZXQoZWRpdG9yKS5pc1NvbWUoKTtcbiAgICBjb25zdCBnZXRVaUNvbnRhaW5lciA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBmaXhlZENvbnRhaW5lciA9IGZpeGVkQ29udGFpbmVyVGFyZ2V0KGVkaXRvcik7XG4gICAgICByZXR1cm4gZml4ZWRDb250YWluZXIuZ2V0T3JUaHVuaygoKSA9PiBnZXRDb250ZW50Q29udGFpbmVyKGdldFJvb3ROb2RlKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRFbGVtZW50KCkpKSkpO1xuICAgIH07XG4gICAgY29uc3QgaXNEaXN0cmFjdGlvbkZyZWUgPSBlZGl0b3IgPT4gZWRpdG9yLmlubGluZSAmJiAhaXNNZW51YmFyRW5hYmxlZChlZGl0b3IpICYmICFpc1Rvb2xiYXJFbmFibGVkKGVkaXRvcikgJiYgIWlzTXVsdGlwbGVUb29sYmFycyhlZGl0b3IpO1xuICAgIGNvbnN0IGlzU3RpY2t5VG9vbGJhciA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBpc1N0aWNreVRvb2xiYXIgPSBlZGl0b3Iub3B0aW9ucy5nZXQoJ3Rvb2xiYXJfc3RpY2t5Jyk7XG4gICAgICByZXR1cm4gKGlzU3RpY2t5VG9vbGJhciB8fCBlZGl0b3IuaW5saW5lKSAmJiAhdXNlRml4ZWRDb250YWluZXIoZWRpdG9yKSAmJiAhaXNEaXN0cmFjdGlvbkZyZWUoZWRpdG9yKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzU3BsaXRVaU1vZGUgPSBlZGl0b3IgPT4gIXVzZUZpeGVkQ29udGFpbmVyKGVkaXRvcikgJiYgZWRpdG9yLm9wdGlvbnMuZ2V0KCd1aV9tb2RlJykgPT09ICdzcGxpdCc7XG4gICAgY29uc3QgZ2V0TWVudXMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgbWVudSA9IGVkaXRvci5vcHRpb25zLmdldCgnbWVudScpO1xuICAgICAgcmV0dXJuIG1hcCQxKG1lbnUsIG1lbnUgPT4gKHtcbiAgICAgICAgLi4ubWVudSxcbiAgICAgICAgaXRlbXM6IG1lbnUuaXRlbXNcbiAgICAgIH0pKTtcbiAgICB9O1xuXG4gICAgdmFyIE9wdGlvbnMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgZ2V0IFRvb2xiYXJNb2RlICgpIHsgcmV0dXJuIFRvb2xiYXJNb2RlJDE7IH0sXG4gICAgICAgIGdldCBUb29sYmFyTG9jYXRpb24gKCkgeyByZXR1cm4gVG9vbGJhckxvY2F0aW9uJDE7IH0sXG4gICAgICAgIHJlZ2lzdGVyOiByZWdpc3RlciRlLFxuICAgICAgICBnZXRTa2luVXJsOiBnZXRTa2luVXJsLFxuICAgICAgICBpc1JlYWRPbmx5OiBpc1JlYWRPbmx5LFxuICAgICAgICBpc1NraW5EaXNhYmxlZDogaXNTa2luRGlzYWJsZWQsXG4gICAgICAgIGdldEhlaWdodE9wdGlvbjogZ2V0SGVpZ2h0T3B0aW9uLFxuICAgICAgICBnZXRXaWR0aE9wdGlvbjogZ2V0V2lkdGhPcHRpb24sXG4gICAgICAgIGdldE1pbldpZHRoT3B0aW9uOiBnZXRNaW5XaWR0aE9wdGlvbixcbiAgICAgICAgZ2V0TWluSGVpZ2h0T3B0aW9uOiBnZXRNaW5IZWlnaHRPcHRpb24sXG4gICAgICAgIGdldE1heFdpZHRoT3B0aW9uOiBnZXRNYXhXaWR0aE9wdGlvbixcbiAgICAgICAgZ2V0TWF4SGVpZ2h0T3B0aW9uOiBnZXRNYXhIZWlnaHRPcHRpb24sXG4gICAgICAgIGdldFVzZXJTdHlsZUZvcm1hdHM6IGdldFVzZXJTdHlsZUZvcm1hdHMsXG4gICAgICAgIHNob3VsZE1lcmdlU3R5bGVGb3JtYXRzOiBzaG91bGRNZXJnZVN0eWxlRm9ybWF0cyxcbiAgICAgICAgc2hvdWxkQXV0b0hpZGVTdHlsZUZvcm1hdHM6IHNob3VsZEF1dG9IaWRlU3R5bGVGb3JtYXRzLFxuICAgICAgICBnZXRMaW5lSGVpZ2h0Rm9ybWF0czogZ2V0TGluZUhlaWdodEZvcm1hdHMsXG4gICAgICAgIGdldENvbnRlbnRMYW5ndWFnZXM6IGdldENvbnRlbnRMYW5ndWFnZXMsXG4gICAgICAgIGdldFJlbW92ZWRNZW51SXRlbXM6IGdldFJlbW92ZWRNZW51SXRlbXMsXG4gICAgICAgIGlzTWVudWJhckVuYWJsZWQ6IGlzTWVudWJhckVuYWJsZWQsXG4gICAgICAgIGlzTXVsdGlwbGVUb29sYmFyczogaXNNdWx0aXBsZVRvb2xiYXJzLFxuICAgICAgICBpc1Rvb2xiYXJFbmFibGVkOiBpc1Rvb2xiYXJFbmFibGVkLFxuICAgICAgICBpc1Rvb2xiYXJQZXJzaXN0OiBpc1Rvb2xiYXJQZXJzaXN0LFxuICAgICAgICBnZXRNdWx0aXBsZVRvb2xiYXJzT3B0aW9uOiBnZXRNdWx0aXBsZVRvb2xiYXJzT3B0aW9uLFxuICAgICAgICBnZXRVaUNvbnRhaW5lcjogZ2V0VWlDb250YWluZXIsXG4gICAgICAgIHVzZUZpeGVkQ29udGFpbmVyOiB1c2VGaXhlZENvbnRhaW5lcixcbiAgICAgICAgaXNTcGxpdFVpTW9kZTogaXNTcGxpdFVpTW9kZSxcbiAgICAgICAgZ2V0VG9vbGJhck1vZGU6IGdldFRvb2xiYXJNb2RlLFxuICAgICAgICBpc0RyYWdnYWJsZU1vZGFsOiBpc0RyYWdnYWJsZU1vZGFsJDEsXG4gICAgICAgIGlzRGlzdHJhY3Rpb25GcmVlOiBpc0Rpc3RyYWN0aW9uRnJlZSxcbiAgICAgICAgaXNTdGlja3lUb29sYmFyOiBpc1N0aWNreVRvb2xiYXIsXG4gICAgICAgIGdldFN0aWNreVRvb2xiYXJPZmZzZXQ6IGdldFN0aWNreVRvb2xiYXJPZmZzZXQsXG4gICAgICAgIGdldFRvb2xiYXJMb2NhdGlvbjogZ2V0VG9vbGJhckxvY2F0aW9uLFxuICAgICAgICBpc1Rvb2xiYXJMb2NhdGlvbkJvdHRvbTogaXNUb29sYmFyTG9jYXRpb25Cb3R0b20sXG4gICAgICAgIGdldFRvb2xiYXJHcm91cHM6IGdldFRvb2xiYXJHcm91cHMsXG4gICAgICAgIGdldE1lbnVzOiBnZXRNZW51cyxcbiAgICAgICAgZ2V0TWVudWJhcjogZ2V0TWVudWJhcixcbiAgICAgICAgZ2V0VG9vbGJhcjogZ2V0VG9vbGJhcixcbiAgICAgICAgZ2V0RmlsZVBpY2tlckNhbGxiYWNrOiBnZXRGaWxlUGlja2VyQ2FsbGJhY2ssXG4gICAgICAgIGdldEZpbGVQaWNrZXJUeXBlczogZ2V0RmlsZVBpY2tlclR5cGVzLFxuICAgICAgICB1c2VUeXBlYWhlYWRVcmxzOiB1c2VUeXBlYWhlYWRVcmxzLFxuICAgICAgICBnZXRBbmNob3JUb3A6IGdldEFuY2hvclRvcCxcbiAgICAgICAgZ2V0QW5jaG9yQm90dG9tOiBnZXRBbmNob3JCb3R0b20sXG4gICAgICAgIGdldEZpbGVQaWNrZXJWYWxpZGF0b3JIYW5kbGVyOiBnZXRGaWxlUGlja2VyVmFsaWRhdG9ySGFuZGxlcixcbiAgICAgICAgZ2V0Rm9udFNpemVJbnB1dERlZmF1bHRVbml0OiBnZXRGb250U2l6ZUlucHV0RGVmYXVsdFVuaXQsXG4gICAgICAgIHVzZVN0YXR1c0JhcjogdXNlU3RhdHVzQmFyLFxuICAgICAgICB1c2VFbGVtZW50UGF0aDogdXNlRWxlbWVudFBhdGgsXG4gICAgICAgIHByb21vdGlvbkVuYWJsZWQ6IHByb21vdGlvbkVuYWJsZWQsXG4gICAgICAgIHVzZUJyYW5kaW5nOiB1c2VCcmFuZGluZyxcbiAgICAgICAgZ2V0UmVzaXplOiBnZXRSZXNpemUsXG4gICAgICAgIGdldFBhc3RlQXNUZXh0OiBnZXRQYXN0ZUFzVGV4dCxcbiAgICAgICAgZ2V0U2lkZWJhclNob3c6IGdldFNpZGViYXJTaG93LFxuICAgICAgICB1c2VIZWxwQWNjZXNzaWJpbGl0eTogdXNlSGVscEFjY2Vzc2liaWxpdHlcbiAgICB9KTtcblxuICAgIGNvbnN0IGF1dG9jb21wbGV0ZVNlbGVjdG9yID0gJ1tkYXRhLW1jZS1hdXRvY29tcGxldGVyXSc7XG4gICAgY29uc3QgZGV0ZWN0JDEgPSBlbG0gPT4gY2xvc2VzdCQxKGVsbSwgYXV0b2NvbXBsZXRlU2VsZWN0b3IpO1xuICAgIGNvbnN0IGZpbmRJbiA9IGVsbSA9PiBkZXNjZW5kYW50KGVsbSwgYXV0b2NvbXBsZXRlU2VsZWN0b3IpO1xuXG4gICAgY29uc3Qgc2V0dXAkZSA9IChhcGksIGVkaXRvcikgPT4ge1xuICAgICAgY29uc3QgcmVkaXJlY3RLZXlUb0l0ZW0gPSAoaXRlbSwgZSkgPT4ge1xuICAgICAgICBlbWl0V2l0aChpdGVtLCBrZXlkb3duKCksIHsgcmF3OiBlIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldEl0ZW0gPSAoKSA9PiBhcGkuZ2V0TWVudSgpLmJpbmQoSGlnaGxpZ2h0aW5nLmdldEhpZ2hsaWdodGVkKTtcbiAgICAgIGVkaXRvci5vbigna2V5ZG93bicsIGUgPT4ge1xuICAgICAgICBjb25zdCBrZXlDb2RlID0gZS53aGljaDtcbiAgICAgICAgaWYgKCFhcGkuaXNBY3RpdmUoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXBpLmlzTWVudU9wZW4oKSkge1xuICAgICAgICAgIGlmIChrZXlDb2RlID09PSAxMykge1xuICAgICAgICAgICAgZ2V0SXRlbSgpLmVhY2goZW1pdEV4ZWN1dGUpO1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoa2V5Q29kZSA9PT0gNDApIHtcbiAgICAgICAgICAgIGdldEl0ZW0oKS5mb2xkKCgpID0+IHtcbiAgICAgICAgICAgICAgYXBpLmdldE1lbnUoKS5lYWNoKEhpZ2hsaWdodGluZy5oaWdobGlnaHRGaXJzdCk7XG4gICAgICAgICAgICB9LCBpdGVtID0+IHtcbiAgICAgICAgICAgICAgcmVkaXJlY3RLZXlUb0l0ZW0oaXRlbSwgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChrZXlDb2RlID09PSAzNyB8fCBrZXlDb2RlID09PSAzOCB8fCBrZXlDb2RlID09PSAzOSkge1xuICAgICAgICAgICAgZ2V0SXRlbSgpLmVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgIHJlZGlyZWN0S2V5VG9JdGVtKGl0ZW0sIGUpO1xuICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGtleUNvZGUgPT09IDEzIHx8IGtleUNvZGUgPT09IDM4IHx8IGtleUNvZGUgPT09IDQwKSB7XG4gICAgICAgICAgICBhcGkuY2FuY2VsSWZOZWNlc3NhcnkoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdOb2RlQ2hhbmdlJywgZSA9PiB7XG4gICAgICAgIGlmIChhcGkuaXNBY3RpdmUoKSAmJiAhYXBpLmlzUHJvY2Vzc2luZ0FjdGlvbigpICYmIGRldGVjdCQxKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGUuZWxlbWVudCkpLmlzTm9uZSgpKSB7XG4gICAgICAgICAgYXBpLmNhbmNlbElmTmVjZXNzYXJ5KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgQXV0b2NvbXBsZXRlckVkaXRvckV2ZW50cyA9IHsgc2V0dXA6IHNldHVwJGUgfTtcblxuICAgIHZhciBJdGVtUmVzcG9uc2U7XG4gICAgKGZ1bmN0aW9uIChJdGVtUmVzcG9uc2UpIHtcbiAgICAgIEl0ZW1SZXNwb25zZVtJdGVtUmVzcG9uc2VbJ0NMT1NFX09OX0VYRUNVVEUnXSA9IDBdID0gJ0NMT1NFX09OX0VYRUNVVEUnO1xuICAgICAgSXRlbVJlc3BvbnNlW0l0ZW1SZXNwb25zZVsnQlVCQkxFX1RPX1NBTkRCT1gnXSA9IDFdID0gJ0JVQkJMRV9UT19TQU5EQk9YJztcbiAgICB9KEl0ZW1SZXNwb25zZSB8fCAoSXRlbVJlc3BvbnNlID0ge30pKSk7XG4gICAgdmFyIEl0ZW1SZXNwb25zZSQxID0gSXRlbVJlc3BvbnNlO1xuXG4gICAgY29uc3QgbmF2Q2xhc3MgPSAndG94LW1lbnUtbmF2X19qcyc7XG4gICAgY29uc3Qgc2VsZWN0YWJsZUNsYXNzID0gJ3RveC1jb2xsZWN0aW9uX19pdGVtJztcbiAgICBjb25zdCBjb2xvckNsYXNzID0gJ3RveC1zd2F0Y2gnO1xuICAgIGNvbnN0IHByZXNldENsYXNzZXMgPSB7XG4gICAgICBub3JtYWw6IG5hdkNsYXNzLFxuICAgICAgY29sb3I6IGNvbG9yQ2xhc3NcbiAgICB9O1xuICAgIGNvbnN0IHRpY2tlZENsYXNzID0gJ3RveC1jb2xsZWN0aW9uX19pdGVtLS1lbmFibGVkJztcbiAgICBjb25zdCBncm91cEhlYWRpbmdDbGFzcyA9ICd0b3gtY29sbGVjdGlvbl9fZ3JvdXAtaGVhZGluZyc7XG4gICAgY29uc3QgaWNvbkNsYXNzID0gJ3RveC1jb2xsZWN0aW9uX19pdGVtLWljb24nO1xuICAgIGNvbnN0IHRleHRDbGFzcyA9ICd0b3gtY29sbGVjdGlvbl9faXRlbS1sYWJlbCc7XG4gICAgY29uc3QgYWNjZXNzb3J5Q2xhc3MgPSAndG94LWNvbGxlY3Rpb25fX2l0ZW0tYWNjZXNzb3J5JztcbiAgICBjb25zdCBjYXJldENsYXNzID0gJ3RveC1jb2xsZWN0aW9uX19pdGVtLWNhcmV0JztcbiAgICBjb25zdCBjaGVja21hcmtDbGFzcyA9ICd0b3gtY29sbGVjdGlvbl9faXRlbS1jaGVja21hcmsnO1xuICAgIGNvbnN0IGFjdGl2ZUNsYXNzID0gJ3RveC1jb2xsZWN0aW9uX19pdGVtLS1hY3RpdmUnO1xuICAgIGNvbnN0IGNvbnRhaW5lckNsYXNzID0gJ3RveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lcic7XG4gICAgY29uc3QgY29udGFpbmVyQ29sdW1uQ2xhc3MgPSAndG94LWNvbGxlY3Rpb25fX2l0ZW0tY29udGFpbmVyLS1jb2x1bW4nO1xuICAgIGNvbnN0IGNvbnRhaW5lclJvd0NsYXNzID0gJ3RveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tcm93JztcbiAgICBjb25zdCBjb250YWluZXJBbGlnblJpZ2h0Q2xhc3MgPSAndG94LWNvbGxlY3Rpb25fX2l0ZW0tY29udGFpbmVyLS1hbGlnbi1yaWdodCc7XG4gICAgY29uc3QgY29udGFpbmVyQWxpZ25MZWZ0Q2xhc3MgPSAndG94LWNvbGxlY3Rpb25fX2l0ZW0tY29udGFpbmVyLS1hbGlnbi1sZWZ0JztcbiAgICBjb25zdCBjb250YWluZXJWYWxpZ25Ub3BDbGFzcyA9ICd0b3gtY29sbGVjdGlvbl9faXRlbS1jb250YWluZXItLXZhbGlnbi10b3AnO1xuICAgIGNvbnN0IGNvbnRhaW5lclZhbGlnbk1pZGRsZUNsYXNzID0gJ3RveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tdmFsaWduLW1pZGRsZSc7XG4gICAgY29uc3QgY29udGFpbmVyVmFsaWduQm90dG9tQ2xhc3MgPSAndG94LWNvbGxlY3Rpb25fX2l0ZW0tY29udGFpbmVyLS12YWxpZ24tYm90dG9tJztcbiAgICBjb25zdCBjbGFzc0ZvclByZXNldCA9IHByZXNldHMgPT4gZ2V0JGcocHJlc2V0Q2xhc3NlcywgcHJlc2V0cykuZ2V0T3IobmF2Q2xhc3MpO1xuXG4gICAgY29uc3QgZm9yTWVudSA9IHByZXNldHMgPT4ge1xuICAgICAgaWYgKHByZXNldHMgPT09ICdjb2xvcicpIHtcbiAgICAgICAgcmV0dXJuICd0b3gtc3dhdGNoZXMnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICd0b3gtbWVudSc7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjbGFzc2VzID0gcHJlc2V0cyA9PiAoe1xuICAgICAgYmFja2dyb3VuZE1lbnU6ICd0b3gtYmFja2dyb3VuZC1tZW51JyxcbiAgICAgIHNlbGVjdGVkTWVudTogJ3RveC1zZWxlY3RlZC1tZW51JyxcbiAgICAgIHNlbGVjdGVkSXRlbTogJ3RveC1jb2xsZWN0aW9uX19pdGVtLS1hY3RpdmUnLFxuICAgICAgaGFzSWNvbnM6ICd0b3gtbWVudS0taGFzLWljb25zJyxcbiAgICAgIG1lbnU6IGZvck1lbnUocHJlc2V0cyksXG4gICAgICB0aWVyZWRNZW51OiAndG94LXRpZXJlZC1tZW51J1xuICAgIH0pO1xuXG4gICAgY29uc3QgbWFya2VycyA9IHByZXNldHMgPT4ge1xuICAgICAgY29uc3QgbWVudUNsYXNzZXMgPSBjbGFzc2VzKHByZXNldHMpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmFja2dyb3VuZE1lbnU6IG1lbnVDbGFzc2VzLmJhY2tncm91bmRNZW51LFxuICAgICAgICBzZWxlY3RlZE1lbnU6IG1lbnVDbGFzc2VzLnNlbGVjdGVkTWVudSxcbiAgICAgICAgbWVudTogbWVudUNsYXNzZXMubWVudSxcbiAgICAgICAgc2VsZWN0ZWRJdGVtOiBtZW51Q2xhc3Nlcy5zZWxlY3RlZEl0ZW0sXG4gICAgICAgIGl0ZW06IGNsYXNzRm9yUHJlc2V0KHByZXNldHMpXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZG9tJDEgPSAoaGFzSWNvbnMsIGNvbHVtbnMsIHByZXNldHMpID0+IHtcbiAgICAgIGNvbnN0IG1lbnVDbGFzc2VzID0gY2xhc3NlcyhwcmVzZXRzKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IGZsYXR0ZW4oW1xuICAgICAgICAgIFtcbiAgICAgICAgICAgIG1lbnVDbGFzc2VzLm1lbnUsXG4gICAgICAgICAgICBgdG94LW1lbnUtJHsgY29sdW1ucyB9LWNvbHVtbmBcbiAgICAgICAgICBdLFxuICAgICAgICAgIGhhc0ljb25zID8gW21lbnVDbGFzc2VzLmhhc0ljb25zXSA6IFtdXG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgY29tcG9uZW50cyA9IFtNZW51LnBhcnRzLml0ZW1zKHt9KV07XG4gICAgY29uc3QgcGFydCA9IChoYXNJY29ucywgY29sdW1ucywgcHJlc2V0cykgPT4ge1xuICAgICAgY29uc3QgbWVudUNsYXNzZXMgPSBjbGFzc2VzKHByZXNldHMpO1xuICAgICAgY29uc3QgZCA9IHtcbiAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgY2xhc3NlczogZmxhdHRlbihbW21lbnVDbGFzc2VzLnRpZXJlZE1lbnVdXSlcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IGQsXG4gICAgICAgIG1hcmtlcnM6IG1hcmtlcnMocHJlc2V0cylcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHNjaGVtYSRsID0gY29uc3RhbnQkMShbXG4gICAgICBvcHRpb24kMygnZGF0YScpLFxuICAgICAgZGVmYXVsdGVkKCdpbnB1dEF0dHJpYnV0ZXMnLCB7fSksXG4gICAgICBkZWZhdWx0ZWQoJ2lucHV0U3R5bGVzJywge30pLFxuICAgICAgZGVmYXVsdGVkKCd0YWcnLCAnaW5wdXQnKSxcbiAgICAgIGRlZmF1bHRlZCgnaW5wdXRDbGFzc2VzJywgW10pLFxuICAgICAgb25IYW5kbGVyKCdvblNldFZhbHVlJyksXG4gICAgICBkZWZhdWx0ZWQoJ3N0eWxlcycsIHt9KSxcbiAgICAgIGRlZmF1bHRlZCgnZXZlbnRPcmRlcicsIHt9KSxcbiAgICAgIGZpZWxkKCdpbnB1dEJlaGF2aW91cnMnLCBbXG4gICAgICAgIFJlcHJlc2VudGluZyxcbiAgICAgICAgRm9jdXNpbmdcbiAgICAgIF0pLFxuICAgICAgZGVmYXVsdGVkKCdzZWxlY3RPbkZvY3VzJywgdHJ1ZSlcbiAgICBdKTtcbiAgICBjb25zdCBmb2N1c0JlaGF2aW91cnMgPSBkZXRhaWwgPT4gZGVyaXZlJDEoW0ZvY3VzaW5nLmNvbmZpZyh7XG4gICAgICAgIG9uRm9jdXM6ICFkZXRhaWwuc2VsZWN0T25Gb2N1cyA/IG5vb3AgOiBjb21wb25lbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IGlucHV0ID0gY29tcG9uZW50LmVsZW1lbnQ7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXQkNihpbnB1dCk7XG4gICAgICAgICAgaW5wdXQuZG9tLnNldFNlbGVjdGlvblJhbmdlKDAsIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgIH0pXSk7XG4gICAgY29uc3QgYmVoYXZpb3VycyA9IGRldGFpbCA9PiAoe1xuICAgICAgLi4uZm9jdXNCZWhhdmlvdXJzKGRldGFpbCksXG4gICAgICAuLi5hdWdtZW50KGRldGFpbC5pbnB1dEJlaGF2aW91cnMsIFtSZXByZXNlbnRpbmcuY29uZmlnKHtcbiAgICAgICAgICBzdG9yZToge1xuICAgICAgICAgICAgbW9kZTogJ21hbnVhbCcsXG4gICAgICAgICAgICAuLi5kZXRhaWwuZGF0YS5tYXAoZGF0YSA9PiAoeyBpbml0aWFsVmFsdWU6IGRhdGEgfSkpLmdldE9yKHt9KSxcbiAgICAgICAgICAgIGdldFZhbHVlOiBpbnB1dCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXQkNihpbnB1dC5lbGVtZW50KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRWYWx1ZTogKGlucHV0LCBkYXRhKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBnZXQkNihpbnB1dC5lbGVtZW50KTtcbiAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgIT09IGRhdGEpIHtcbiAgICAgICAgICAgICAgICBzZXQkNShpbnB1dC5lbGVtZW50LCBkYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25TZXRWYWx1ZTogZGV0YWlsLm9uU2V0VmFsdWVcbiAgICAgICAgfSldKVxuICAgIH0pO1xuICAgIGNvbnN0IGRvbSA9IGRldGFpbCA9PiAoe1xuICAgICAgdGFnOiBkZXRhaWwudGFnLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIC4uLmRldGFpbC5pbnB1dEF0dHJpYnV0ZXNcbiAgICAgIH0sXG4gICAgICBzdHlsZXM6IGRldGFpbC5pbnB1dFN0eWxlcyxcbiAgICAgIGNsYXNzZXM6IGRldGFpbC5pbnB1dENsYXNzZXNcbiAgICB9KTtcblxuICAgIGNvbnN0IGZhY3RvcnkkbCA9IChkZXRhaWwsIF9zcGVjKSA9PiAoe1xuICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgZG9tOiBkb20oZGV0YWlsKSxcbiAgICAgIGNvbXBvbmVudHM6IFtdLFxuICAgICAgYmVoYXZpb3VyczogYmVoYXZpb3VycyhkZXRhaWwpLFxuICAgICAgZXZlbnRPcmRlcjogZGV0YWlsLmV2ZW50T3JkZXJcbiAgICB9KTtcbiAgICBjb25zdCBJbnB1dCA9IHNpbmdsZSh7XG4gICAgICBuYW1lOiAnSW5wdXQnLFxuICAgICAgY29uZmlnRmllbGRzOiBzY2hlbWEkbCgpLFxuICAgICAgZmFjdG9yeTogZmFjdG9yeSRsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZWZldGNoVHJpZ2dlckV2ZW50ID0gZ2VuZXJhdGUkNigncmVmZXRjaC10cmlnZ2VyLWV2ZW50Jyk7XG4gICAgY29uc3QgcmVkaXJlY3RNZW51SXRlbUludGVyYWN0aW9uRXZlbnQgPSBnZW5lcmF0ZSQ2KCdyZWRpcmVjdC1tZW51LWl0ZW0taW50ZXJhY3Rpb24nKTtcblxuICAgIGNvbnN0IG1lbnVTZWFyY2hlckNsYXNzID0gJ3RveC1tZW51X19zZWFyY2hlcic7XG4gICAgY29uc3QgZmluZFdpdGhpblNhbmRib3ggPSBzYW5kYm94Q29tcCA9PiB7XG4gICAgICByZXR1cm4gZGVzY2VuZGFudChzYW5kYm94Q29tcC5lbGVtZW50LCBgLiR7IG1lbnVTZWFyY2hlckNsYXNzIH1gKS5iaW5kKGlucHV0RWxlbSA9PiBzYW5kYm94Q29tcC5nZXRTeXN0ZW0oKS5nZXRCeURvbShpbnB1dEVsZW0pLnRvT3B0aW9uYWwoKSk7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kV2l0aGluTWVudSA9IGZpbmRXaXRoaW5TYW5kYm94O1xuICAgIGNvbnN0IHJlc3RvcmVTdGF0ZSA9IChpbnB1dENvbXAsIHNlYXJjaGVyU3RhdGUpID0+IHtcbiAgICAgIFJlcHJlc2VudGluZy5zZXRWYWx1ZShpbnB1dENvbXAsIHNlYXJjaGVyU3RhdGUuZmV0Y2hQYXR0ZXJuKTtcbiAgICAgIGlucHV0Q29tcC5lbGVtZW50LmRvbS5zZWxlY3Rpb25TdGFydCA9IHNlYXJjaGVyU3RhdGUuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICBpbnB1dENvbXAuZWxlbWVudC5kb20uc2VsZWN0aW9uRW5kID0gc2VhcmNoZXJTdGF0ZS5zZWxlY3Rpb25FbmQ7XG4gICAgfTtcbiAgICBjb25zdCBzYXZlU3RhdGUgPSBpbnB1dENvbXAgPT4ge1xuICAgICAgY29uc3QgZmV0Y2hQYXR0ZXJuID0gUmVwcmVzZW50aW5nLmdldFZhbHVlKGlucHV0Q29tcCk7XG4gICAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IGlucHV0Q29tcC5lbGVtZW50LmRvbS5zZWxlY3Rpb25TdGFydDtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbkVuZCA9IGlucHV0Q29tcC5lbGVtZW50LmRvbS5zZWxlY3Rpb25FbmQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmZXRjaFBhdHRlcm4sXG4gICAgICAgIHNlbGVjdGlvblN0YXJ0LFxuICAgICAgICBzZWxlY3Rpb25FbmRcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBzZXRBY3RpdmVEZXNjZW5kYW50ID0gKGlucHV0Q29tcCwgYWN0aXZlKSA9PiB7XG4gICAgICBnZXRPcHQoYWN0aXZlLmVsZW1lbnQsICdpZCcpLmVhY2goaWQgPT4gc2V0JDkoaW5wdXRDb21wLmVsZW1lbnQsICdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLCBpZCkpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyTWVudVNlYXJjaGVyID0gc3BlYyA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVCeUJyb3dzZXIgPSAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgc2UuY3V0KCk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaGFuZGxlQnlIaWdobGlnaHRlZEl0ZW0gPSAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgY29uc3QgZXZlbnREYXRhID0ge1xuICAgICAgICAgIGludGVyYWN0aW9uRXZlbnQ6IHNlLmV2ZW50LFxuICAgICAgICAgIGV2ZW50VHlwZTogc2UuZXZlbnQucmF3LnR5cGVcbiAgICAgICAgfTtcbiAgICAgICAgZW1pdFdpdGgoY29tcCwgcmVkaXJlY3RNZW51SXRlbUludGVyYWN0aW9uRXZlbnQsIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHRydWUpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGN1c3RvbVNlYXJjaGVyRXZlbnRzTmFtZSA9ICdzZWFyY2hlci1ldmVudHMnO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbc2VsZWN0YWJsZUNsYXNzXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbSW5wdXQuc2tldGNoKHtcbiAgICAgICAgICAgIGlucHV0Q2xhc3NlczogW1xuICAgICAgICAgICAgICBtZW51U2VhcmNoZXJDbGFzcyxcbiAgICAgICAgICAgICAgJ3RveC10ZXh0ZmllbGQnXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaW5wdXRBdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgIC4uLnNwZWMucGxhY2Vob2xkZXIubWFwKHBsYWNlaG9sZGVyID0+ICh7IHBsYWNlaG9sZGVyOiBzcGVjLmkxOG4ocGxhY2Vob2xkZXIpIH0pKS5nZXRPcih7fSksXG4gICAgICAgICAgICAgICd0eXBlJzogJ3NlYXJjaCcsXG4gICAgICAgICAgICAgICdhcmlhLWF1dG9jb21wbGV0ZSc6ICdsaXN0J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlucHV0QmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgICAgICBjb25maWcoY3VzdG9tU2VhcmNoZXJFdmVudHNOYW1lLCBbXG4gICAgICAgICAgICAgICAgcnVuJDEoaW5wdXQoKSwgaW5wdXRDb21wID0+IHtcbiAgICAgICAgICAgICAgICAgIGVtaXQoaW5wdXRDb21wLCByZWZldGNoVHJpZ2dlckV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBydW4kMShrZXlkb3duKCksIChpbnB1dENvbXAsIHNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoc2UuZXZlbnQucmF3LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgc2Uuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBLZXlpbmcuY29uZmlnKHtcbiAgICAgICAgICAgICAgICBtb2RlOiAnc3BlY2lhbCcsXG4gICAgICAgICAgICAgICAgb25MZWZ0OiBoYW5kbGVCeUJyb3dzZXIsXG4gICAgICAgICAgICAgICAgb25SaWdodDogaGFuZGxlQnlCcm93c2VyLFxuICAgICAgICAgICAgICAgIG9uU3BhY2U6IGhhbmRsZUJ5QnJvd3NlcixcbiAgICAgICAgICAgICAgICBvbkVudGVyOiBoYW5kbGVCeUhpZ2hsaWdodGVkSXRlbSxcbiAgICAgICAgICAgICAgICBvbkVzY2FwZTogaGFuZGxlQnlIaWdobGlnaHRlZEl0ZW0sXG4gICAgICAgICAgICAgICAgb25VcDogaGFuZGxlQnlIaWdobGlnaHRlZEl0ZW0sXG4gICAgICAgICAgICAgICAgb25Eb3duOiBoYW5kbGVCeUhpZ2hsaWdodGVkSXRlbVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBldmVudE9yZGVyOiB7XG4gICAgICAgICAgICAgIGtleWRvd246IFtcbiAgICAgICAgICAgICAgICBjdXN0b21TZWFyY2hlckV2ZW50c05hbWUsXG4gICAgICAgICAgICAgICAgS2V5aW5nLm5hbWUoKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSldXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBzZWFyY2hSZXN1bHRzQ2xhc3MgPSAndG94LWNvbGxlY3Rpb24tLXJlc3VsdHNfX2pzJztcbiAgICBjb25zdCBhdWdtZW50V2l0aEFyaWEgPSBpdGVtID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGlmIChpdGVtLmRvbSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICAuLi5pdGVtLmRvbSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgLi4uKF9hID0gaXRlbS5kb20uYXR0cmlidXRlcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30sXG4gICAgICAgICAgICAgICdpZCc6IGdlbmVyYXRlJDYoJ2FyaWEtaXRlbS1zZWFyY2gtcmVzdWx0LWlkJyksXG4gICAgICAgICAgICAgICdhcmlhLXNlbGVjdGVkJzogJ2ZhbHNlJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjaHVuayA9IChyb3dEb20sIG51bUNvbHVtbnMpID0+IGl0ZW1zID0+IHtcbiAgICAgIGNvbnN0IGNodW5rcyA9IGNodW5rJDEoaXRlbXMsIG51bUNvbHVtbnMpO1xuICAgICAgcmV0dXJuIG1hcCQyKGNodW5rcywgYyA9PiAoe1xuICAgICAgICBkb206IHJvd0RvbSxcbiAgICAgICAgY29tcG9uZW50czogY1xuICAgICAgfSkpO1xuICAgIH07XG4gICAgY29uc3QgZm9yU3dhdGNoID0gY29sdW1ucyA9PiAoe1xuICAgICAgZG9tOiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAndG94LW1lbnUnLFxuICAgICAgICAgICd0b3gtc3dhdGNoZXMtbWVudSdcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIGNvbXBvbmVudHM6IFt7XG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgY2xhc3NlczogWyd0b3gtc3dhdGNoZXMnXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcG9uZW50czogW01lbnUucGFydHMuaXRlbXMoe1xuICAgICAgICAgICAgICBwcmVwcm9jZXNzOiBjb2x1bW5zICE9PSAnYXV0bycgPyBjaHVuayh7XG4gICAgICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1zd2F0Y2hlc19fcm93J11cbiAgICAgICAgICAgICAgfSwgY29sdW1ucykgOiBpZGVudGl0eVxuICAgICAgICAgICAgfSldXG4gICAgICAgIH1dXG4gICAgfSk7XG4gICAgY29uc3QgZm9yVG9vbGJhciA9IGNvbHVtbnMgPT4gKHtcbiAgICAgIGRvbToge1xuICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICBjbGFzc2VzOiBbXG4gICAgICAgICAgJ3RveC1tZW51JyxcbiAgICAgICAgICAndG94LWNvbGxlY3Rpb24nLFxuICAgICAgICAgICd0b3gtY29sbGVjdGlvbi0tdG9vbGJhcicsXG4gICAgICAgICAgJ3RveC1jb2xsZWN0aW9uLS10b29sYmFyLWxnJ1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czogW01lbnUucGFydHMuaXRlbXMoe1xuICAgICAgICAgIHByZXByb2Nlc3M6IGNodW5rKHtcbiAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1jb2xsZWN0aW9uX19ncm91cCddXG4gICAgICAgICAgfSwgY29sdW1ucylcbiAgICAgICAgfSldXG4gICAgfSk7XG4gICAgY29uc3QgcHJlcHJvY2Vzc0NvbGxlY3Rpb24gPSAoaXRlbXMsIGlzU2VwYXJhdG9yKSA9PiB7XG4gICAgICBjb25zdCBhbGxTcGxpdHMgPSBbXTtcbiAgICAgIGxldCBjdXJyZW50U3BsaXQgPSBbXTtcbiAgICAgIGVhY2gkMShpdGVtcywgKGl0ZW0sIGkpID0+IHtcbiAgICAgICAgaWYgKGlzU2VwYXJhdG9yKGl0ZW0sIGkpKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnRTcGxpdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhbGxTcGxpdHMucHVzaChjdXJyZW50U3BsaXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50U3BsaXQgPSBbXTtcbiAgICAgICAgICBpZiAoaGFzJDIoaXRlbS5kb20sICdpbm5lckh0bWwnKSB8fCBpdGVtLmNvbXBvbmVudHMgJiYgaXRlbS5jb21wb25lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGN1cnJlbnRTcGxpdC5wdXNoKGl0ZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50U3BsaXQucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoY3VycmVudFNwbGl0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgYWxsU3BsaXRzLnB1c2goY3VycmVudFNwbGl0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXAkMihhbGxTcGxpdHMsIHMgPT4gKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1jb2xsZWN0aW9uX19ncm91cCddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IHNcbiAgICAgIH0pKTtcbiAgICB9O1xuICAgIGNvbnN0IGluc2VydEl0ZW1zUGxhY2Vob2xkZXIgPSAoY29sdW1ucywgaW5pdEl0ZW1zLCBvbkl0ZW0pID0+IHtcbiAgICAgIHJldHVybiBNZW51LnBhcnRzLml0ZW1zKHtcbiAgICAgICAgcHJlcHJvY2VzczogcmF3SXRlbXMgPT4ge1xuICAgICAgICAgIGNvbnN0IGVucmljaGVkSXRlbXMgPSBtYXAkMihyYXdJdGVtcywgb25JdGVtKTtcbiAgICAgICAgICBpZiAoY29sdW1ucyAhPT0gJ2F1dG8nICYmIGNvbHVtbnMgPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gY2h1bmsoe1xuICAgICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1jb2xsZWN0aW9uX19ncm91cCddXG4gICAgICAgICAgICB9LCBjb2x1bW5zKShlbnJpY2hlZEl0ZW1zKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHByZXByb2Nlc3NDb2xsZWN0aW9uKGVucmljaGVkSXRlbXMsIChfaXRlbSwgaSkgPT4gaW5pdEl0ZW1zW2ldLnR5cGUgPT09ICdzZXBhcmF0b3InKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZm9yQ29sbGVjdGlvbiA9IChjb2x1bW5zLCBpbml0SXRlbXMsIF9oYXNJY29ucyA9IHRydWUpID0+ICh7XG4gICAgICBkb206IHtcbiAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICd0b3gtbWVudScsXG4gICAgICAgICAgJ3RveC1jb2xsZWN0aW9uJ1xuICAgICAgICBdLmNvbmNhdChjb2x1bW5zID09PSAxID8gWyd0b3gtY29sbGVjdGlvbi0tbGlzdCddIDogWyd0b3gtY29sbGVjdGlvbi0tZ3JpZCddKVxuICAgICAgfSxcbiAgICAgIGNvbXBvbmVudHM6IFtpbnNlcnRJdGVtc1BsYWNlaG9sZGVyKGNvbHVtbnMsIGluaXRJdGVtcywgaWRlbnRpdHkpXVxuICAgIH0pO1xuICAgIGNvbnN0IGZvckNvbGxlY3Rpb25XaXRoU2VhcmNoUmVzdWx0cyA9IChjb2x1bW5zLCBpbml0SXRlbXMsIF9oYXNJY29ucyA9IHRydWUpID0+IHtcbiAgICAgIGNvbnN0IGFyaWFDb250cm9sc1NlYXJjaFJlc3VsdHMgPSBnZW5lcmF0ZSQ2KCdhcmlhLWNvbnRyb2xzLXNlYXJjaC1yZXN1bHRzJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAgICd0b3gtbWVudScsXG4gICAgICAgICAgICAndG94LWNvbGxlY3Rpb24nLFxuICAgICAgICAgICAgc2VhcmNoUmVzdWx0c0NsYXNzXG4gICAgICAgICAgXS5jb25jYXQoY29sdW1ucyA9PT0gMSA/IFsndG94LWNvbGxlY3Rpb24tLWxpc3QnXSA6IFsndG94LWNvbGxlY3Rpb24tLWdyaWQnXSksXG4gICAgICAgICAgYXR0cmlidXRlczogeyBpZDogYXJpYUNvbnRyb2xzU2VhcmNoUmVzdWx0cyB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtpbnNlcnRJdGVtc1BsYWNlaG9sZGVyKGNvbHVtbnMsIGluaXRJdGVtcywgYXVnbWVudFdpdGhBcmlhKV1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBmb3JDb2xsZWN0aW9uV2l0aFNlYXJjaEZpZWxkID0gKGNvbHVtbnMsIGluaXRJdGVtcywgc2VhcmNoRmllbGQpID0+IHtcbiAgICAgIGNvbnN0IGFyaWFDb250cm9sc1NlYXJjaFJlc3VsdHMgPSBnZW5lcmF0ZSQ2KCdhcmlhLWNvbnRyb2xzLXNlYXJjaC1yZXN1bHRzJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAgICd0b3gtbWVudScsXG4gICAgICAgICAgICAndG94LWNvbGxlY3Rpb24nXG4gICAgICAgICAgXS5jb25jYXQoY29sdW1ucyA9PT0gMSA/IFsndG94LWNvbGxlY3Rpb24tLWxpc3QnXSA6IFsndG94LWNvbGxlY3Rpb24tLWdyaWQnXSlcbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgIHJlbmRlck1lbnVTZWFyY2hlcih7XG4gICAgICAgICAgICBpMThuOiBnbG9iYWwkOC50cmFuc2xhdGUsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogc2VhcmNoRmllbGQucGxhY2Vob2xkZXJcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICAgICAgIC4uLmNvbHVtbnMgPT09IDEgPyBbJ3RveC1jb2xsZWN0aW9uLS1saXN0J10gOiBbJ3RveC1jb2xsZWN0aW9uLS1ncmlkJ10sXG4gICAgICAgICAgICAgICAgc2VhcmNoUmVzdWx0c0NsYXNzXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgaWQ6IGFyaWFDb250cm9sc1NlYXJjaFJlc3VsdHMgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IFtpbnNlcnRJdGVtc1BsYWNlaG9sZGVyKGNvbHVtbnMsIGluaXRJdGVtcywgYXVnbWVudFdpdGhBcmlhKV1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBmb3JIb3Jpem9udGFsQ29sbGVjdGlvbiA9IChpbml0SXRlbXMsIF9oYXNJY29ucyA9IHRydWUpID0+ICh7XG4gICAgICBkb206IHtcbiAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICd0b3gtY29sbGVjdGlvbicsXG4gICAgICAgICAgJ3RveC1jb2xsZWN0aW9uLS1ob3Jpem9udGFsJ1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czogW01lbnUucGFydHMuaXRlbXMoeyBwcmVwcm9jZXNzOiBpdGVtcyA9PiBwcmVwcm9jZXNzQ29sbGVjdGlvbihpdGVtcywgKF9pdGVtLCBpKSA9PiBpbml0SXRlbXNbaV0udHlwZSA9PT0gJ3NlcGFyYXRvcicpIH0pXVxuICAgIH0pO1xuXG4gICAgY29uc3QgbWVudUhhc0ljb25zID0geHMgPT4gZXhpc3RzKHhzLCBpdGVtID0+ICdpY29uJyBpbiBpdGVtICYmIGl0ZW0uaWNvbiAhPT0gdW5kZWZpbmVkKTtcbiAgICBjb25zdCBoYW5kbGVFcnJvciA9IGVycm9yID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IpKTtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVIb3Jpem9udGFsUGFydGlhbE1lbnVXaXRoQWxsb3lJdGVtcyA9ICh2YWx1ZSwgX2hhc0ljb25zLCBpdGVtcywgX2NvbHVtbnMsIF9tZW51TGF5b3V0KSA9PiB7XG4gICAgICBjb25zdCBzdHJ1Y3R1cmUgPSBmb3JIb3Jpem9udGFsQ29sbGVjdGlvbihpdGVtcyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZG9tOiBzdHJ1Y3R1cmUuZG9tLFxuICAgICAgICBjb21wb25lbnRzOiBzdHJ1Y3R1cmUuY29tcG9uZW50cyxcbiAgICAgICAgaXRlbXNcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVQYXJ0aWFsTWVudVdpdGhBbGxveUl0ZW1zID0gKHZhbHVlLCBoYXNJY29ucywgaXRlbXMsIGNvbHVtbnMsIG1lbnVMYXlvdXQpID0+IHtcbiAgICAgIGNvbnN0IGdldE5vcm1hbFN0cnVjdHVyZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKG1lbnVMYXlvdXQubWVudVR5cGUgIT09ICdzZWFyY2hhYmxlJykge1xuICAgICAgICAgIHJldHVybiBmb3JDb2xsZWN0aW9uKGNvbHVtbnMsIGl0ZW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWVudUxheW91dC5zZWFyY2hNb2RlLnNlYXJjaE1vZGUgPT09ICdzZWFyY2gtd2l0aC1maWVsZCcgPyBmb3JDb2xsZWN0aW9uV2l0aFNlYXJjaEZpZWxkKGNvbHVtbnMsIGl0ZW1zLCBtZW51TGF5b3V0LnNlYXJjaE1vZGUpIDogZm9yQ29sbGVjdGlvbldpdGhTZWFyY2hSZXN1bHRzKGNvbHVtbnMsIGl0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChtZW51TGF5b3V0Lm1lbnVUeXBlID09PSAnY29sb3InKSB7XG4gICAgICAgIGNvbnN0IHN0cnVjdHVyZSA9IGZvclN3YXRjaChjb2x1bW5zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBkb206IHN0cnVjdHVyZS5kb20sXG4gICAgICAgICAgY29tcG9uZW50czogc3RydWN0dXJlLmNvbXBvbmVudHMsXG4gICAgICAgICAgaXRlbXNcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAobWVudUxheW91dC5tZW51VHlwZSA9PT0gJ25vcm1hbCcgJiYgY29sdW1ucyA9PT0gJ2F1dG8nKSB7XG4gICAgICAgIGNvbnN0IHN0cnVjdHVyZSA9IGZvckNvbGxlY3Rpb24oY29sdW1ucywgaXRlbXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIGRvbTogc3RydWN0dXJlLmRvbSxcbiAgICAgICAgICBjb21wb25lbnRzOiBzdHJ1Y3R1cmUuY29tcG9uZW50cyxcbiAgICAgICAgICBpdGVtc1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChtZW51TGF5b3V0Lm1lbnVUeXBlID09PSAnbm9ybWFsJyB8fCBtZW51TGF5b3V0Lm1lbnVUeXBlID09PSAnc2VhcmNoYWJsZScpIHtcbiAgICAgICAgY29uc3Qgc3RydWN0dXJlID0gZ2V0Tm9ybWFsU3RydWN0dXJlKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgZG9tOiBzdHJ1Y3R1cmUuZG9tLFxuICAgICAgICAgIGNvbXBvbmVudHM6IHN0cnVjdHVyZS5jb21wb25lbnRzLFxuICAgICAgICAgIGl0ZW1zXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKG1lbnVMYXlvdXQubWVudVR5cGUgPT09ICdsaXN0cHJldmlldycgJiYgY29sdW1ucyAhPT0gJ2F1dG8nKSB7XG4gICAgICAgIGNvbnN0IHN0cnVjdHVyZSA9IGZvclRvb2xiYXIoY29sdW1ucyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgZG9tOiBzdHJ1Y3R1cmUuZG9tLFxuICAgICAgICAgIGNvbXBvbmVudHM6IHN0cnVjdHVyZS5jb21wb25lbnRzLFxuICAgICAgICAgIGl0ZW1zXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIGRvbTogZG9tJDEoaGFzSWNvbnMsIGNvbHVtbnMsIG1lbnVMYXlvdXQubWVudVR5cGUpLFxuICAgICAgICAgIGNvbXBvbmVudHM6IGNvbXBvbmVudHMsXG4gICAgICAgICAgaXRlbXNcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdHlwZSA9IHJlcXVpcmVkU3RyaW5nKCd0eXBlJyk7XG4gICAgY29uc3QgbmFtZSQxID0gcmVxdWlyZWRTdHJpbmcoJ25hbWUnKTtcbiAgICBjb25zdCBsYWJlbCA9IHJlcXVpcmVkU3RyaW5nKCdsYWJlbCcpO1xuICAgIGNvbnN0IHRleHQkMSA9IHJlcXVpcmVkU3RyaW5nKCd0ZXh0Jyk7XG4gICAgY29uc3QgdGl0bGUgPSByZXF1aXJlZFN0cmluZygndGl0bGUnKTtcbiAgICBjb25zdCBpY29uID0gcmVxdWlyZWRTdHJpbmcoJ2ljb24nKTtcbiAgICBjb25zdCB2YWx1ZSQxID0gcmVxdWlyZWRTdHJpbmcoJ3ZhbHVlJyk7XG4gICAgY29uc3QgZmV0Y2gkMSA9IHJlcXVpcmVkRnVuY3Rpb24oJ2ZldGNoJyk7XG4gICAgY29uc3QgZ2V0U3VibWVudUl0ZW1zID0gcmVxdWlyZWRGdW5jdGlvbignZ2V0U3VibWVudUl0ZW1zJyk7XG4gICAgY29uc3Qgb25BY3Rpb24gPSByZXF1aXJlZEZ1bmN0aW9uKCdvbkFjdGlvbicpO1xuICAgIGNvbnN0IG9uSXRlbUFjdGlvbiA9IHJlcXVpcmVkRnVuY3Rpb24oJ29uSXRlbUFjdGlvbicpO1xuICAgIGNvbnN0IG9uU2V0dXAgPSBkZWZhdWx0ZWRGdW5jdGlvbignb25TZXR1cCcsICgpID0+IG5vb3ApO1xuICAgIGNvbnN0IG9wdGlvbmFsTmFtZSA9IG9wdGlvblN0cmluZygnbmFtZScpO1xuICAgIGNvbnN0IG9wdGlvbmFsVGV4dCA9IG9wdGlvblN0cmluZygndGV4dCcpO1xuICAgIGNvbnN0IG9wdGlvbmFsSWNvbiA9IG9wdGlvblN0cmluZygnaWNvbicpO1xuICAgIGNvbnN0IG9wdGlvbmFsVG9vbHRpcCA9IG9wdGlvblN0cmluZygndG9vbHRpcCcpO1xuICAgIGNvbnN0IG9wdGlvbmFsTGFiZWwgPSBvcHRpb25TdHJpbmcoJ2xhYmVsJyk7XG4gICAgY29uc3Qgb3B0aW9uYWxTaG9ydGN1dCA9IG9wdGlvblN0cmluZygnc2hvcnRjdXQnKTtcbiAgICBjb25zdCBvcHRpb25hbFNlbGVjdCA9IG9wdGlvbkZ1bmN0aW9uKCdzZWxlY3QnKTtcbiAgICBjb25zdCBhY3RpdmUgPSBkZWZhdWx0ZWRCb29sZWFuKCdhY3RpdmUnLCBmYWxzZSk7XG4gICAgY29uc3QgYm9yZGVybGVzcyA9IGRlZmF1bHRlZEJvb2xlYW4oJ2JvcmRlcmxlc3MnLCBmYWxzZSk7XG4gICAgY29uc3QgZW5hYmxlZCA9IGRlZmF1bHRlZEJvb2xlYW4oJ2VuYWJsZWQnLCB0cnVlKTtcbiAgICBjb25zdCBwcmltYXJ5ID0gZGVmYXVsdGVkQm9vbGVhbigncHJpbWFyeScsIGZhbHNlKTtcbiAgICBjb25zdCBkZWZhdWx0ZWRDb2x1bW5zID0gbnVtID0+IGRlZmF1bHRlZCgnY29sdW1ucycsIG51bSk7XG4gICAgY29uc3QgZGVmYXVsdGVkTWV0YSA9IGRlZmF1bHRlZCgnbWV0YScsIHt9KTtcbiAgICBjb25zdCBkZWZhdWx0ZWRPbkFjdGlvbiA9IGRlZmF1bHRlZEZ1bmN0aW9uKCdvbkFjdGlvbicsIG5vb3ApO1xuICAgIGNvbnN0IGRlZmF1bHRlZFR5cGUgPSB0eXBlID0+IGRlZmF1bHRlZFN0cmluZygndHlwZScsIHR5cGUpO1xuICAgIGNvbnN0IGdlbmVyYXRlZE5hbWUgPSBuYW1lUHJlZml4ID0+IGZpZWxkJDEoJ25hbWUnLCAnbmFtZScsIGRlZmF1bHRlZFRodW5rKCgpID0+IGdlbmVyYXRlJDYoYCR7IG5hbWVQcmVmaXggfS1uYW1lYCkpLCBzdHJpbmcpO1xuICAgIGNvbnN0IGdlbmVyYXRlZFZhbHVlID0gdmFsdWVQcmVmaXggPT4gZmllbGQkMSgndmFsdWUnLCAndmFsdWUnLCBkZWZhdWx0ZWRUaHVuaygoKSA9PiBnZW5lcmF0ZSQ2KGAkeyB2YWx1ZVByZWZpeCB9LXZhbHVlYCkpLCBhbnlWYWx1ZSgpKTtcblxuICAgIGNvbnN0IHNlcGFyYXRvck1lbnVJdGVtU2NoZW1hID0gb2JqT2YoW1xuICAgICAgdHlwZSxcbiAgICAgIG9wdGlvbmFsVGV4dFxuICAgIF0pO1xuICAgIGNvbnN0IGNyZWF0ZVNlcGFyYXRvck1lbnVJdGVtID0gc3BlYyA9PiBhc1Jhdygnc2VwYXJhdG9ybWVudWl0ZW0nLCBzZXBhcmF0b3JNZW51SXRlbVNjaGVtYSwgc3BlYyk7XG5cbiAgICBjb25zdCBhdXRvY29tcGxldGVySXRlbVNjaGVtYSA9IG9iak9mKFtcbiAgICAgIGRlZmF1bHRlZFR5cGUoJ2F1dG9jb21wbGV0ZWl0ZW0nKSxcbiAgICAgIGFjdGl2ZSxcbiAgICAgIGVuYWJsZWQsXG4gICAgICBkZWZhdWx0ZWRNZXRhLFxuICAgICAgdmFsdWUkMSxcbiAgICAgIG9wdGlvbmFsVGV4dCxcbiAgICAgIG9wdGlvbmFsSWNvblxuICAgIF0pO1xuICAgIGNvbnN0IGNyZWF0ZVNlcGFyYXRvckl0ZW0gPSBzcGVjID0+IGFzUmF3KCdBdXRvY29tcGxldGVyLlNlcGFyYXRvcicsIHNlcGFyYXRvck1lbnVJdGVtU2NoZW1hLCBzcGVjKTtcbiAgICBjb25zdCBjcmVhdGVBdXRvY29tcGxldGVySXRlbSA9IHNwZWMgPT4gYXNSYXcoJ0F1dG9jb21wbGV0ZXIuSXRlbScsIGF1dG9jb21wbGV0ZXJJdGVtU2NoZW1hLCBzcGVjKTtcblxuICAgIGNvbnN0IGJhc2VUb29sYmFyQnV0dG9uRmllbGRzID0gW1xuICAgICAgZW5hYmxlZCxcbiAgICAgIG9wdGlvbmFsVG9vbHRpcCxcbiAgICAgIG9wdGlvbmFsSWNvbixcbiAgICAgIG9wdGlvbmFsVGV4dCxcbiAgICAgIG9uU2V0dXBcbiAgICBdO1xuICAgIGNvbnN0IHRvb2xiYXJCdXR0b25TY2hlbWEgPSBvYmpPZihbXG4gICAgICB0eXBlLFxuICAgICAgb25BY3Rpb25cbiAgICBdLmNvbmNhdChiYXNlVG9vbGJhckJ1dHRvbkZpZWxkcykpO1xuICAgIGNvbnN0IGNyZWF0ZVRvb2xiYXJCdXR0b24gPSBzcGVjID0+IGFzUmF3KCd0b29sYmFyYnV0dG9uJywgdG9vbGJhckJ1dHRvblNjaGVtYSwgc3BlYyk7XG5cbiAgICBjb25zdCBiYXNlVG9vbGJhclRvZ2dsZUJ1dHRvbkZpZWxkcyA9IFthY3RpdmVdLmNvbmNhdChiYXNlVG9vbGJhckJ1dHRvbkZpZWxkcyk7XG4gICAgY29uc3QgdG9nZ2xlQnV0dG9uU2NoZW1hID0gb2JqT2YoYmFzZVRvb2xiYXJUb2dnbGVCdXR0b25GaWVsZHMuY29uY2F0KFtcbiAgICAgIHR5cGUsXG4gICAgICBvbkFjdGlvblxuICAgIF0pKTtcbiAgICBjb25zdCBjcmVhdGVUb2dnbGVCdXR0b24gPSBzcGVjID0+IGFzUmF3KCdUb2dnbGVCdXR0b24nLCB0b2dnbGVCdXR0b25TY2hlbWEsIHNwZWMpO1xuXG4gICAgY29uc3QgY29udGV4dEJhckZpZWxkcyA9IFtcbiAgICAgIGRlZmF1bHRlZEZ1bmN0aW9uKCdwcmVkaWNhdGUnLCBuZXZlciksXG4gICAgICBkZWZhdWx0ZWRTdHJpbmdFbnVtKCdzY29wZScsICdub2RlJywgW1xuICAgICAgICAnbm9kZScsXG4gICAgICAgICdlZGl0b3InXG4gICAgICBdKSxcbiAgICAgIGRlZmF1bHRlZFN0cmluZ0VudW0oJ3Bvc2l0aW9uJywgJ3NlbGVjdGlvbicsIFtcbiAgICAgICAgJ25vZGUnLFxuICAgICAgICAnc2VsZWN0aW9uJyxcbiAgICAgICAgJ2xpbmUnXG4gICAgICBdKVxuICAgIF07XG5cbiAgICBjb25zdCBjb250ZXh0QnV0dG9uRmllbGRzID0gYmFzZVRvb2xiYXJCdXR0b25GaWVsZHMuY29uY2F0KFtcbiAgICAgIGRlZmF1bHRlZFR5cGUoJ2NvbnRleHRmb3JtYnV0dG9uJyksXG4gICAgICBwcmltYXJ5LFxuICAgICAgb25BY3Rpb24sXG4gICAgICBjdXN0b21GaWVsZCgnb3JpZ2luYWwnLCBpZGVudGl0eSlcbiAgICBdKTtcbiAgICBjb25zdCBjb250ZXh0VG9nZ2xlQnV0dG9uRmllbGRzID0gYmFzZVRvb2xiYXJUb2dnbGVCdXR0b25GaWVsZHMuY29uY2F0KFtcbiAgICAgIGRlZmF1bHRlZFR5cGUoJ2NvbnRleHRmb3JtYnV0dG9uJyksXG4gICAgICBwcmltYXJ5LFxuICAgICAgb25BY3Rpb24sXG4gICAgICBjdXN0b21GaWVsZCgnb3JpZ2luYWwnLCBpZGVudGl0eSlcbiAgICBdKTtcbiAgICBjb25zdCBsYXVuY2hCdXR0b25GaWVsZHMgPSBiYXNlVG9vbGJhckJ1dHRvbkZpZWxkcy5jb25jYXQoW2RlZmF1bHRlZFR5cGUoJ2NvbnRleHRmb3JtYnV0dG9uJyldKTtcbiAgICBjb25zdCBsYXVuY2hUb2dnbGVCdXR0b25GaWVsZHMgPSBiYXNlVG9vbGJhclRvZ2dsZUJ1dHRvbkZpZWxkcy5jb25jYXQoW2RlZmF1bHRlZFR5cGUoJ2NvbnRleHRmb3JtdG9nZ2xlYnV0dG9uJyldKTtcbiAgICBjb25zdCB0b2dnbGVPck5vcm1hbCA9IGNob29zZSQxKCd0eXBlJywge1xuICAgICAgY29udGV4dGZvcm1idXR0b246IGNvbnRleHRCdXR0b25GaWVsZHMsXG4gICAgICBjb250ZXh0Zm9ybXRvZ2dsZWJ1dHRvbjogY29udGV4dFRvZ2dsZUJ1dHRvbkZpZWxkc1xuICAgIH0pO1xuICAgIGNvbnN0IGNvbnRleHRGb3JtU2NoZW1hID0gb2JqT2YoW1xuICAgICAgZGVmYXVsdGVkVHlwZSgnY29udGV4dGZvcm0nKSxcbiAgICAgIGRlZmF1bHRlZEZ1bmN0aW9uKCdpbml0VmFsdWUnLCBjb25zdGFudCQxKCcnKSksXG4gICAgICBvcHRpb25hbExhYmVsLFxuICAgICAgcmVxdWlyZWRBcnJheU9mKCdjb21tYW5kcycsIHRvZ2dsZU9yTm9ybWFsKSxcbiAgICAgIG9wdGlvbk9mKCdsYXVuY2gnLCBjaG9vc2UkMSgndHlwZScsIHtcbiAgICAgICAgY29udGV4dGZvcm1idXR0b246IGxhdW5jaEJ1dHRvbkZpZWxkcyxcbiAgICAgICAgY29udGV4dGZvcm10b2dnbGVidXR0b246IGxhdW5jaFRvZ2dsZUJ1dHRvbkZpZWxkc1xuICAgICAgfSkpXG4gICAgXS5jb25jYXQoY29udGV4dEJhckZpZWxkcykpO1xuICAgIGNvbnN0IGNyZWF0ZUNvbnRleHRGb3JtID0gc3BlYyA9PiBhc1JhdygnQ29udGV4dEZvcm0nLCBjb250ZXh0Rm9ybVNjaGVtYSwgc3BlYyk7XG5cbiAgICBjb25zdCBjb250ZXh0VG9vbGJhclNjaGVtYSA9IG9iak9mKFtcbiAgICAgIGRlZmF1bHRlZFR5cGUoJ2NvbnRleHR0b29sYmFyJyksXG4gICAgICByZXF1aXJlZFN0cmluZygnaXRlbXMnKVxuICAgIF0uY29uY2F0KGNvbnRleHRCYXJGaWVsZHMpKTtcbiAgICBjb25zdCBjcmVhdGVDb250ZXh0VG9vbGJhciA9IHNwZWMgPT4gYXNSYXcoJ0NvbnRleHRUb29sYmFyJywgY29udGV4dFRvb2xiYXJTY2hlbWEsIHNwZWMpO1xuXG4gICAgY29uc3QgY2FyZEltYWdlRmllbGRzID0gW1xuICAgICAgdHlwZSxcbiAgICAgIHJlcXVpcmVkU3RyaW5nKCdzcmMnKSxcbiAgICAgIG9wdGlvblN0cmluZygnYWx0JyksXG4gICAgICBkZWZhdWx0ZWRBcnJheU9mKCdjbGFzc2VzJywgW10sIHN0cmluZylcbiAgICBdO1xuICAgIGNvbnN0IGNhcmRJbWFnZVNjaGVtYSA9IG9iak9mKGNhcmRJbWFnZUZpZWxkcyk7XG5cbiAgICBjb25zdCBjYXJkVGV4dEZpZWxkcyA9IFtcbiAgICAgIHR5cGUsXG4gICAgICB0ZXh0JDEsXG4gICAgICBvcHRpb25hbE5hbWUsXG4gICAgICBkZWZhdWx0ZWRBcnJheU9mKCdjbGFzc2VzJywgWyd0b3gtY29sbGVjdGlvbl9faXRlbS1sYWJlbCddLCBzdHJpbmcpXG4gICAgXTtcbiAgICBjb25zdCBjYXJkVGV4dFNjaGVtYSA9IG9iak9mKGNhcmRUZXh0RmllbGRzKTtcblxuICAgIGNvbnN0IGl0ZW1TY2hlbWEkMSA9IHZhbHVlVGh1bmsoKCkgPT4gY2hvb3NlJDIoJ3R5cGUnLCB7XG4gICAgICBjYXJkaW1hZ2U6IGNhcmRJbWFnZVNjaGVtYSxcbiAgICAgIGNhcmR0ZXh0OiBjYXJkVGV4dFNjaGVtYSxcbiAgICAgIGNhcmRjb250YWluZXI6IGNhcmRDb250YWluZXJTY2hlbWFcbiAgICB9KSk7XG4gICAgY29uc3QgY2FyZENvbnRhaW5lclNjaGVtYSA9IG9iak9mKFtcbiAgICAgIHR5cGUsXG4gICAgICBkZWZhdWx0ZWRTdHJpbmcoJ2RpcmVjdGlvbicsICdob3Jpem9udGFsJyksXG4gICAgICBkZWZhdWx0ZWRTdHJpbmcoJ2FsaWduJywgJ2xlZnQnKSxcbiAgICAgIGRlZmF1bHRlZFN0cmluZygndmFsaWduJywgJ21pZGRsZScpLFxuICAgICAgcmVxdWlyZWRBcnJheU9mKCdpdGVtcycsIGl0ZW1TY2hlbWEkMSlcbiAgICBdKTtcblxuICAgIGNvbnN0IGNvbW1vbk1lbnVJdGVtRmllbGRzID0gW1xuICAgICAgZW5hYmxlZCxcbiAgICAgIG9wdGlvbmFsVGV4dCxcbiAgICAgIG9wdGlvbmFsU2hvcnRjdXQsXG4gICAgICBnZW5lcmF0ZWRWYWx1ZSgnbWVudWl0ZW0nKSxcbiAgICAgIGRlZmF1bHRlZE1ldGFcbiAgICBdO1xuXG4gICAgY29uc3QgY2FyZE1lbnVJdGVtU2NoZW1hID0gb2JqT2YoW1xuICAgICAgdHlwZSxcbiAgICAgIG9wdGlvbmFsTGFiZWwsXG4gICAgICByZXF1aXJlZEFycmF5T2YoJ2l0ZW1zJywgaXRlbVNjaGVtYSQxKSxcbiAgICAgIG9uU2V0dXAsXG4gICAgICBkZWZhdWx0ZWRPbkFjdGlvblxuICAgIF0uY29uY2F0KGNvbW1vbk1lbnVJdGVtRmllbGRzKSk7XG4gICAgY29uc3QgY3JlYXRlQ2FyZE1lbnVJdGVtID0gc3BlYyA9PiBhc1JhdygnY2FyZG1lbnVpdGVtJywgY2FyZE1lbnVJdGVtU2NoZW1hLCBzcGVjKTtcblxuICAgIGNvbnN0IGNob2ljZU1lbnVJdGVtU2NoZW1hID0gb2JqT2YoW1xuICAgICAgdHlwZSxcbiAgICAgIGFjdGl2ZSxcbiAgICAgIG9wdGlvbmFsSWNvblxuICAgIF0uY29uY2F0KGNvbW1vbk1lbnVJdGVtRmllbGRzKSk7XG4gICAgY29uc3QgY3JlYXRlQ2hvaWNlTWVudUl0ZW0gPSBzcGVjID0+IGFzUmF3KCdjaG9pY2VtZW51aXRlbScsIGNob2ljZU1lbnVJdGVtU2NoZW1hLCBzcGVjKTtcblxuICAgIGNvbnN0IGJhc2VGaWVsZHMgPSBbXG4gICAgICB0eXBlLFxuICAgICAgcmVxdWlyZWRTdHJpbmcoJ2ZhbmN5dHlwZScpLFxuICAgICAgZGVmYXVsdGVkT25BY3Rpb25cbiAgICBdO1xuICAgIGNvbnN0IGluc2VydFRhYmxlRmllbGRzID0gW2RlZmF1bHRlZCgnaW5pdERhdGEnLCB7fSldLmNvbmNhdChiYXNlRmllbGRzKTtcbiAgICBjb25zdCBjb2xvclN3YXRjaEZpZWxkcyA9IFtcbiAgICAgIG9wdGlvbkZ1bmN0aW9uKCdzZWxlY3QnKSxcbiAgICAgIGRlZmF1bHRlZE9iak9mKCdpbml0RGF0YScsIHt9LCBbXG4gICAgICAgIGRlZmF1bHRlZEJvb2xlYW4oJ2FsbG93Q3VzdG9tQ29sb3JzJywgdHJ1ZSksXG4gICAgICAgIGRlZmF1bHRlZFN0cmluZygnc3RvcmFnZUtleScsICdkZWZhdWx0JyksXG4gICAgICAgIG9wdGlvbkFycmF5T2YoJ2NvbG9ycycsIGFueVZhbHVlKCkpXG4gICAgICBdKVxuICAgIF0uY29uY2F0KGJhc2VGaWVsZHMpO1xuICAgIGNvbnN0IGZhbmN5TWVudUl0ZW1TY2hlbWEgPSBjaG9vc2UkMSgnZmFuY3l0eXBlJywge1xuICAgICAgaW5zZXJ0dGFibGU6IGluc2VydFRhYmxlRmllbGRzLFxuICAgICAgY29sb3Jzd2F0Y2g6IGNvbG9yU3dhdGNoRmllbGRzXG4gICAgfSk7XG4gICAgY29uc3QgY3JlYXRlRmFuY3lNZW51SXRlbSA9IHNwZWMgPT4gYXNSYXcoJ2ZhbmN5bWVudWl0ZW0nLCBmYW5jeU1lbnVJdGVtU2NoZW1hLCBzcGVjKTtcblxuICAgIGNvbnN0IG1lbnVJdGVtU2NoZW1hID0gb2JqT2YoW1xuICAgICAgdHlwZSxcbiAgICAgIG9uU2V0dXAsXG4gICAgICBkZWZhdWx0ZWRPbkFjdGlvbixcbiAgICAgIG9wdGlvbmFsSWNvblxuICAgIF0uY29uY2F0KGNvbW1vbk1lbnVJdGVtRmllbGRzKSk7XG4gICAgY29uc3QgY3JlYXRlTWVudUl0ZW0gPSBzcGVjID0+IGFzUmF3KCdtZW51aXRlbScsIG1lbnVJdGVtU2NoZW1hLCBzcGVjKTtcblxuICAgIGNvbnN0IG5lc3RlZE1lbnVJdGVtU2NoZW1hID0gb2JqT2YoW1xuICAgICAgdHlwZSxcbiAgICAgIGdldFN1Ym1lbnVJdGVtcyxcbiAgICAgIG9uU2V0dXAsXG4gICAgICBvcHRpb25hbEljb25cbiAgICBdLmNvbmNhdChjb21tb25NZW51SXRlbUZpZWxkcykpO1xuICAgIGNvbnN0IGNyZWF0ZU5lc3RlZE1lbnVJdGVtID0gc3BlYyA9PiBhc1JhdygnbmVzdGVkbWVudWl0ZW0nLCBuZXN0ZWRNZW51SXRlbVNjaGVtYSwgc3BlYyk7XG5cbiAgICBjb25zdCB0b2dnbGVNZW51SXRlbVNjaGVtYSA9IG9iak9mKFtcbiAgICAgIHR5cGUsXG4gICAgICBvcHRpb25hbEljb24sXG4gICAgICBhY3RpdmUsXG4gICAgICBvblNldHVwLFxuICAgICAgb25BY3Rpb25cbiAgICBdLmNvbmNhdChjb21tb25NZW51SXRlbUZpZWxkcykpO1xuICAgIGNvbnN0IGNyZWF0ZVRvZ2dsZU1lbnVJdGVtID0gc3BlYyA9PiBhc1JhdygndG9nZ2xlbWVudWl0ZW0nLCB0b2dnbGVNZW51SXRlbVNjaGVtYSwgc3BlYyk7XG5cbiAgICBjb25zdCBkZXRlY3RTaXplID0gKGNvbXAsIG1hcmdpbiwgc2VsZWN0b3JDbGFzcykgPT4ge1xuICAgICAgY29uc3QgZGVzY2VuZGFudHMkMSA9IGRlc2NlbmRhbnRzKGNvbXAuZWxlbWVudCwgJy4nICsgc2VsZWN0b3JDbGFzcyk7XG4gICAgICBpZiAoZGVzY2VuZGFudHMkMS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbkxlbmd0aCA9IGZpbmRJbmRleCQxKGRlc2NlbmRhbnRzJDEsIGMgPT4ge1xuICAgICAgICAgIGNvbnN0IHRoaXNUb3AgPSBjLmRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG4gICAgICAgICAgY29uc3QgY1RvcCA9IGRlc2NlbmRhbnRzJDFbMF0uZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICAgICAgICByZXR1cm4gTWF0aC5hYnModGhpc1RvcCAtIGNUb3ApID4gbWFyZ2luO1xuICAgICAgICB9KS5nZXRPcihkZXNjZW5kYW50cyQxLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICBudW1Db2x1bW5zOiBjb2x1bW5MZW5ndGgsXG4gICAgICAgICAgbnVtUm93czogTWF0aC5jZWlsKGRlc2NlbmRhbnRzJDEubGVuZ3RoIC8gY29sdW1uTGVuZ3RoKVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG5hbWVkRXZlbnRzID0gKG5hbWUsIGhhbmRsZXJzKSA9PiBkZXJpdmUkMShbY29uZmlnKG5hbWUsIGhhbmRsZXJzKV0pO1xuICAgIGNvbnN0IHVubmFtZWRFdmVudHMgPSBoYW5kbGVycyA9PiBuYW1lZEV2ZW50cyhnZW5lcmF0ZSQ2KCd1bm5hbWVkLWV2ZW50cycpLCBoYW5kbGVycyk7XG4gICAgY29uc3QgU2ltcGxlQmVoYXZpb3VycyA9IHtcbiAgICAgIG5hbWVkRXZlbnRzLFxuICAgICAgdW5uYW1lZEV2ZW50c1xuICAgIH07XG5cbiAgICBjb25zdCBFeGNsdXNpdml0eUNoYW5uZWwgPSBnZW5lcmF0ZSQ2KCd0b29sdGlwLmV4Y2x1c2l2ZScpO1xuICAgIGNvbnN0IFNob3dUb29sdGlwRXZlbnQgPSBnZW5lcmF0ZSQ2KCd0b29sdGlwLnNob3cnKTtcbiAgICBjb25zdCBIaWRlVG9vbHRpcEV2ZW50ID0gZ2VuZXJhdGUkNigndG9vbHRpcC5oaWRlJyk7XG5cbiAgICBjb25zdCBoaWRlQWxsRXhjbHVzaXZlID0gKGNvbXBvbmVudCwgX3RDb25maWcsIF90U3RhdGUpID0+IHtcbiAgICAgIGNvbXBvbmVudC5nZXRTeXN0ZW0oKS5icm9hZGNhc3RPbihbRXhjbHVzaXZpdHlDaGFubmVsXSwge30pO1xuICAgIH07XG4gICAgY29uc3Qgc2V0Q29tcG9uZW50cyA9IChjb21wb25lbnQsIHRDb25maWcsIHRTdGF0ZSwgc3BlY3MpID0+IHtcbiAgICAgIHRTdGF0ZS5nZXRUb29sdGlwKCkuZWFjaCh0b29sdGlwID0+IHtcbiAgICAgICAgaWYgKHRvb2x0aXAuZ2V0U3lzdGVtKCkuaXNDb25uZWN0ZWQoKSkge1xuICAgICAgICAgIFJlcGxhY2luZy5zZXQodG9vbHRpcCwgc3BlY3MpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdmFyIFRvb2x0aXBwaW5nQXBpcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBoaWRlQWxsRXhjbHVzaXZlOiBoaWRlQWxsRXhjbHVzaXZlLFxuICAgICAgICBzZXRDb21wb25lbnRzOiBzZXRDb21wb25lbnRzXG4gICAgfSk7XG5cbiAgICBjb25zdCBldmVudHMkOSA9ICh0b29sdGlwQ29uZmlnLCBzdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgaGlkZSA9IGNvbXAgPT4ge1xuICAgICAgICBzdGF0ZS5nZXRUb29sdGlwKCkuZWFjaChwID0+IHtcbiAgICAgICAgICBkZXRhY2gocCk7XG4gICAgICAgICAgdG9vbHRpcENvbmZpZy5vbkhpZGUoY29tcCwgcCk7XG4gICAgICAgICAgc3RhdGUuY2xlYXJUb29sdGlwKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBzdGF0ZS5jbGVhclRpbWVyKCk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2hvdyA9IGNvbXAgPT4ge1xuICAgICAgICBpZiAoIXN0YXRlLmlzU2hvd2luZygpKSB7XG4gICAgICAgICAgaGlkZUFsbEV4Y2x1c2l2ZShjb21wKTtcbiAgICAgICAgICBjb25zdCBzaW5rID0gdG9vbHRpcENvbmZpZy5sYXp5U2luayhjb21wKS5nZXRPckRpZSgpO1xuICAgICAgICAgIGNvbnN0IHBvcHVwID0gY29tcC5nZXRTeXN0ZW0oKS5idWlsZCh7XG4gICAgICAgICAgICBkb206IHRvb2x0aXBDb25maWcudG9vbHRpcERvbSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHRvb2x0aXBDb25maWcudG9vbHRpcENvbXBvbmVudHMsXG4gICAgICAgICAgICBldmVudHM6IGRlcml2ZSQyKHRvb2x0aXBDb25maWcubW9kZSA9PT0gJ25vcm1hbCcgPyBbXG4gICAgICAgICAgICAgIHJ1biQxKG1vdXNlb3ZlcigpLCBfID0+IHtcbiAgICAgICAgICAgICAgICBlbWl0KGNvbXAsIFNob3dUb29sdGlwRXZlbnQpO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgcnVuJDEobW91c2VvdXQoKSwgXyA9PiB7XG4gICAgICAgICAgICAgICAgZW1pdChjb21wLCBIaWRlVG9vbHRpcEV2ZW50KTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0gOiBbXSksXG4gICAgICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbUmVwbGFjaW5nLmNvbmZpZyh7fSldKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHN0YXRlLnNldFRvb2x0aXAocG9wdXApO1xuICAgICAgICAgIGF0dGFjaChzaW5rLCBwb3B1cCk7XG4gICAgICAgICAgdG9vbHRpcENvbmZpZy5vblNob3coY29tcCwgcG9wdXApO1xuICAgICAgICAgIFBvc2l0aW9uaW5nLnBvc2l0aW9uKHNpbmssIHBvcHVwLCB7IGFuY2hvcjogdG9vbHRpcENvbmZpZy5hbmNob3IoY29tcCkgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gZGVyaXZlJDIoZmxhdHRlbihbXG4gICAgICAgIFtcbiAgICAgICAgICBydW4kMShTaG93VG9vbHRpcEV2ZW50LCBjb21wID0+IHtcbiAgICAgICAgICAgIHN0YXRlLnJlc2V0VGltZXIoKCkgPT4ge1xuICAgICAgICAgICAgICBzaG93KGNvbXApO1xuICAgICAgICAgICAgfSwgdG9vbHRpcENvbmZpZy5kZWxheSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVuJDEoSGlkZVRvb2x0aXBFdmVudCwgY29tcCA9PiB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNldFRpbWVyKCgpID0+IHtcbiAgICAgICAgICAgICAgaGlkZShjb21wKTtcbiAgICAgICAgICAgIH0sIHRvb2x0aXBDb25maWcuZGVsYXkpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJ1biQxKHJlY2VpdmUoKSwgKGNvbXAsIG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlY2VpdmluZ0RhdGEgPSBtZXNzYWdlO1xuICAgICAgICAgICAgaWYgKCFyZWNlaXZpbmdEYXRhLnVuaXZlcnNhbCkge1xuICAgICAgICAgICAgICBpZiAoY29udGFpbnMkMihyZWNlaXZpbmdEYXRhLmNoYW5uZWxzLCBFeGNsdXNpdml0eUNoYW5uZWwpKSB7XG4gICAgICAgICAgICAgICAgaGlkZShjb21wKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJ1bk9uRGV0YWNoZWQoY29tcCA9PiB7XG4gICAgICAgICAgICBoaWRlKGNvbXApO1xuICAgICAgICAgIH0pXG4gICAgICAgIF0sXG4gICAgICAgIHRvb2x0aXBDb25maWcubW9kZSA9PT0gJ25vcm1hbCcgPyBbXG4gICAgICAgICAgcnVuJDEoZm9jdXNpbigpLCBjb21wID0+IHtcbiAgICAgICAgICAgIGVtaXQoY29tcCwgU2hvd1Rvb2x0aXBFdmVudCk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVuJDEocG9zdEJsdXIoKSwgY29tcCA9PiB7XG4gICAgICAgICAgICBlbWl0KGNvbXAsIEhpZGVUb29sdGlwRXZlbnQpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJ1biQxKG1vdXNlb3ZlcigpLCBjb21wID0+IHtcbiAgICAgICAgICAgIGVtaXQoY29tcCwgU2hvd1Rvb2x0aXBFdmVudCk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVuJDEobW91c2VvdXQoKSwgY29tcCA9PiB7XG4gICAgICAgICAgICBlbWl0KGNvbXAsIEhpZGVUb29sdGlwRXZlbnQpO1xuICAgICAgICAgIH0pXG4gICAgICAgIF0gOiBbXG4gICAgICAgICAgcnVuJDEoaGlnaGxpZ2h0JDEoKSwgKGNvbXAsIF9zZSkgPT4ge1xuICAgICAgICAgICAgZW1pdChjb21wLCBTaG93VG9vbHRpcEV2ZW50KTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBydW4kMShkZWhpZ2hsaWdodCQxKCksIGNvbXAgPT4ge1xuICAgICAgICAgICAgZW1pdChjb21wLCBIaWRlVG9vbHRpcEV2ZW50KTtcbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICBdKSk7XG4gICAgfTtcblxuICAgIHZhciBBY3RpdmVUb29sdGlwcGluZyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBldmVudHM6IGV2ZW50cyQ5XG4gICAgfSk7XG5cbiAgICB2YXIgVG9vbHRpcHBpbmdTY2hlbWEgPSBbXG4gICAgICByZXF1aXJlZCQxKCdsYXp5U2luaycpLFxuICAgICAgcmVxdWlyZWQkMSgndG9vbHRpcERvbScpLFxuICAgICAgZGVmYXVsdGVkKCdleGNsdXNpdmUnLCB0cnVlKSxcbiAgICAgIGRlZmF1bHRlZCgndG9vbHRpcENvbXBvbmVudHMnLCBbXSksXG4gICAgICBkZWZhdWx0ZWQoJ2RlbGF5JywgMzAwKSxcbiAgICAgIGRlZmF1bHRlZFN0cmluZ0VudW0oJ21vZGUnLCAnbm9ybWFsJywgW1xuICAgICAgICAnbm9ybWFsJyxcbiAgICAgICAgJ2ZvbGxvdy1oaWdobGlnaHQnXG4gICAgICBdKSxcbiAgICAgIGRlZmF1bHRlZCgnYW5jaG9yJywgY29tcCA9PiAoe1xuICAgICAgICB0eXBlOiAnaG90c3BvdCcsXG4gICAgICAgIGhvdHNwb3Q6IGNvbXAsXG4gICAgICAgIGxheW91dHM6IHtcbiAgICAgICAgICBvbkx0cjogY29uc3RhbnQkMShbXG4gICAgICAgICAgICBzb3V0aCQyLFxuICAgICAgICAgICAgbm9ydGgkMixcbiAgICAgICAgICAgIHNvdXRoZWFzdCQyLFxuICAgICAgICAgICAgbm9ydGhlYXN0JDIsXG4gICAgICAgICAgICBzb3V0aHdlc3QkMixcbiAgICAgICAgICAgIG5vcnRod2VzdCQyXG4gICAgICAgICAgXSksXG4gICAgICAgICAgb25SdGw6IGNvbnN0YW50JDEoW1xuICAgICAgICAgICAgc291dGgkMixcbiAgICAgICAgICAgIG5vcnRoJDIsXG4gICAgICAgICAgICBzb3V0aGVhc3QkMixcbiAgICAgICAgICAgIG5vcnRoZWFzdCQyLFxuICAgICAgICAgICAgc291dGh3ZXN0JDIsXG4gICAgICAgICAgICBub3J0aHdlc3QkMlxuICAgICAgICAgIF0pXG4gICAgICAgIH1cbiAgICAgIH0pKSxcbiAgICAgIG9uSGFuZGxlcignb25IaWRlJyksXG4gICAgICBvbkhhbmRsZXIoJ29uU2hvdycpXG4gICAgXTtcblxuICAgIGNvbnN0IGluaXQkYiA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVyID0gdmFsdWUkMigpO1xuICAgICAgY29uc3QgcG9wdXAgPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBjbGVhclRpbWVyID0gKCkgPT4ge1xuICAgICAgICB0aW1lci5vbihjbGVhclRpbWVvdXQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc2V0VGltZXIgPSAoZiwgZGVsYXkpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lcigpO1xuICAgICAgICB0aW1lci5zZXQoc2V0VGltZW91dChmLCBkZWxheSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlYWRTdGF0ZSA9IGNvbnN0YW50JDEoJ25vdC1pbXBsZW1lbnRlZCcpO1xuICAgICAgcmV0dXJuIG51JDgoe1xuICAgICAgICBnZXRUb29sdGlwOiBwb3B1cC5nZXQsXG4gICAgICAgIGlzU2hvd2luZzogcG9wdXAuaXNTZXQsXG4gICAgICAgIHNldFRvb2x0aXA6IHBvcHVwLnNldCxcbiAgICAgICAgY2xlYXJUb29sdGlwOiBwb3B1cC5jbGVhcixcbiAgICAgICAgY2xlYXJUaW1lcixcbiAgICAgICAgcmVzZXRUaW1lcixcbiAgICAgICAgcmVhZFN0YXRlXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdmFyIFRvb2x0aXBwaW5nU3RhdGUgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgaW5pdDogaW5pdCRiXG4gICAgfSk7XG5cbiAgICBjb25zdCBUb29sdGlwcGluZyA9IGNyZWF0ZSQ0KHtcbiAgICAgIGZpZWxkczogVG9vbHRpcHBpbmdTY2hlbWEsXG4gICAgICBuYW1lOiAndG9vbHRpcHBpbmcnLFxuICAgICAgYWN0aXZlOiBBY3RpdmVUb29sdGlwcGluZyxcbiAgICAgIHN0YXRlOiBUb29sdGlwcGluZ1N0YXRlLFxuICAgICAgYXBpczogVG9vbHRpcHBpbmdBcGlzXG4gICAgfSk7XG5cbiAgICBjb25zdCBlc2NhcGUgPSB0ZXh0ID0+IHRleHQucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcblxuICAgIGNvbnN0IFJlYWRPbmx5Q2hhbm5lbCA9ICdzaWx2ZXIucmVhZG9ubHknO1xuICAgIGNvbnN0IFJlYWRPbmx5RGF0YVNjaGVtYSA9IG9iak9mKFtyZXF1aXJlZEJvb2xlYW4oJ3JlYWRvbmx5JyldKTtcbiAgICBjb25zdCBicm9hZGNhc3RSZWFkb25seSA9ICh1aVJlZnMsIHJlYWRvbmx5KSA9PiB7XG4gICAgICBjb25zdCBvdXRlckNvbnRhaW5lciA9IHVpUmVmcy5tYWluVWkub3V0ZXJDb250YWluZXI7XG4gICAgICBjb25zdCB0YXJnZXQgPSBvdXRlckNvbnRhaW5lci5lbGVtZW50O1xuICAgICAgY29uc3QgbW90aGVyc2hpcHMgPSBbXG4gICAgICAgIHVpUmVmcy5tYWluVWkubW90aGVyc2hpcCxcbiAgICAgICAgLi4udWlSZWZzLnVpTW90aGVyc2hpcHNcbiAgICAgIF07XG4gICAgICBpZiAocmVhZG9ubHkpIHtcbiAgICAgICAgZWFjaCQxKG1vdGhlcnNoaXBzLCBtID0+IHtcbiAgICAgICAgICBtLmJyb2FkY2FzdE9uKFtkaXNtaXNzUG9wdXBzKCldLCB7IHRhcmdldCB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlYWNoJDEobW90aGVyc2hpcHMsIG0gPT4ge1xuICAgICAgICBtLmJyb2FkY2FzdE9uKFtSZWFkT25seUNoYW5uZWxdLCB7IHJlYWRvbmx5IH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cFJlYWRvbmx5TW9kZVN3aXRjaCA9IChlZGl0b3IsIHVpUmVmcykgPT4ge1xuICAgICAgZWRpdG9yLm9uKCdpbml0JywgKCkgPT4ge1xuICAgICAgICBpZiAoZWRpdG9yLm1vZGUuaXNSZWFkT25seSgpKSB7XG4gICAgICAgICAgYnJvYWRjYXN0UmVhZG9ubHkodWlSZWZzLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ1N3aXRjaE1vZGUnLCAoKSA9PiBicm9hZGNhc3RSZWFkb25seSh1aVJlZnMsIGVkaXRvci5tb2RlLmlzUmVhZE9ubHkoKSkpO1xuICAgICAgaWYgKGlzUmVhZE9ubHkoZWRpdG9yKSkge1xuICAgICAgICBlZGl0b3IubW9kZS5zZXQoJ3JlYWRvbmx5Jyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZWNlaXZpbmdDb25maWcgPSAoKSA9PiBSZWNlaXZpbmcuY29uZmlnKHtcbiAgICAgIGNoYW5uZWxzOiB7XG4gICAgICAgIFtSZWFkT25seUNoYW5uZWxdOiB7XG4gICAgICAgICAgc2NoZW1hOiBSZWFkT25seURhdGFTY2hlbWEsXG4gICAgICAgICAgb25SZWNlaXZlOiAoY29tcCwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgRGlzYWJsaW5nLnNldChjb21wLCBkYXRhLnJlYWRvbmx5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGl0ZW0gPSBkaXNhYmxlZCA9PiBEaXNhYmxpbmcuY29uZmlnKHtcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZGlzYWJsZUNsYXNzOiAndG94LWNvbGxlY3Rpb25fX2l0ZW0tLXN0YXRlLWRpc2FibGVkJ1xuICAgIH0pO1xuICAgIGNvbnN0IGJ1dHRvbiA9IGRpc2FibGVkID0+IERpc2FibGluZy5jb25maWcoeyBkaXNhYmxlZCB9KTtcbiAgICBjb25zdCBzcGxpdEJ1dHRvbiA9IGRpc2FibGVkID0+IERpc2FibGluZy5jb25maWcoe1xuICAgICAgZGlzYWJsZWQsXG4gICAgICBkaXNhYmxlQ2xhc3M6ICd0b3gtdGJ0bi0tZGlzYWJsZWQnXG4gICAgfSk7XG4gICAgY29uc3QgdG9vbGJhckJ1dHRvbiA9IGRpc2FibGVkID0+IERpc2FibGluZy5jb25maWcoe1xuICAgICAgZGlzYWJsZWQsXG4gICAgICBkaXNhYmxlQ2xhc3M6ICd0b3gtdGJ0bi0tZGlzYWJsZWQnLFxuICAgICAgdXNlTmF0aXZlOiBmYWxzZVxuICAgIH0pO1xuICAgIGNvbnN0IERpc2FibGluZ0NvbmZpZ3MgPSB7XG4gICAgICBpdGVtLFxuICAgICAgYnV0dG9uLFxuICAgICAgc3BsaXRCdXR0b24sXG4gICAgICB0b29sYmFyQnV0dG9uXG4gICAgfTtcblxuICAgIGNvbnN0IHJ1bldpdGhBcGkgPSAoaW5mbywgY29tcCkgPT4ge1xuICAgICAgY29uc3QgYXBpID0gaW5mby5nZXRBcGkoY29tcCk7XG4gICAgICByZXR1cm4gZiA9PiB7XG4gICAgICAgIGYoYXBpKTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBvbkNvbnRyb2xBdHRhY2hlZCA9IChpbmZvLCBlZGl0b3JPZmZDZWxsKSA9PiBydW5PbkF0dGFjaGVkKGNvbXAgPT4ge1xuICAgICAgY29uc3QgcnVuID0gcnVuV2l0aEFwaShpbmZvLCBjb21wKTtcbiAgICAgIHJ1bihhcGkgPT4ge1xuICAgICAgICBjb25zdCBvbkRlc3Ryb3kgPSBpbmZvLm9uU2V0dXAoYXBpKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob25EZXN0cm95KSkge1xuICAgICAgICAgIGVkaXRvck9mZkNlbGwuc2V0KG9uRGVzdHJveSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IG9uQ29udHJvbERldGFjaGVkID0gKGdldEFwaSwgZWRpdG9yT2ZmQ2VsbCkgPT4gcnVuT25EZXRhY2hlZChjb21wID0+IHJ1bldpdGhBcGkoZ2V0QXBpLCBjb21wKShlZGl0b3JPZmZDZWxsLmdldCgpKSk7XG5cbiAgICBjb25zdCBvbk1lbnVJdGVtRXhlY3V0ZSA9IChpbmZvLCBpdGVtUmVzcG9uc2UpID0+IHJ1bk9uRXhlY3V0ZSQxKChjb21wLCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgcnVuV2l0aEFwaShpbmZvLCBjb21wKShpbmZvLm9uQWN0aW9uKTtcbiAgICAgIGlmICghaW5mby50cmlnZ2Vyc1N1Ym1lbnUgJiYgaXRlbVJlc3BvbnNlID09PSBJdGVtUmVzcG9uc2UkMS5DTE9TRV9PTl9FWEVDVVRFKSB7XG4gICAgICAgIGlmIChjb21wLmdldFN5c3RlbSgpLmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgICBlbWl0KGNvbXAsIHNhbmRib3hDbG9zZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBzaW11bGF0ZWRFdmVudC5zdG9wKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgbWVudUl0ZW1FdmVudE9yZGVyID0ge1xuICAgICAgW2V4ZWN1dGUkNSgpXTogW1xuICAgICAgICAnZGlzYWJsaW5nJyxcbiAgICAgICAgJ2FsbG95LmJhc2UuYmVoYXZpb3VyJyxcbiAgICAgICAgJ3RvZ2dsaW5nJyxcbiAgICAgICAgJ2l0ZW0tZXZlbnRzJ1xuICAgICAgXVxuICAgIH07XG5cbiAgICBjb25zdCBjb21wb25lbnRSZW5kZXJQaXBlbGluZSA9IGNhdDtcbiAgICBjb25zdCByZW5kZXJDb21tb25JdGVtID0gKHNwZWMsIHN0cnVjdHVyZSwgaXRlbVJlc3BvbnNlLCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IGVkaXRvck9mZkNlbGwgPSBDZWxsKG5vb3ApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2l0ZW0nLFxuICAgICAgICBkb206IHN0cnVjdHVyZS5kb20sXG4gICAgICAgIGNvbXBvbmVudHM6IGNvbXBvbmVudFJlbmRlclBpcGVsaW5lKHN0cnVjdHVyZS5vcHRDb21wb25lbnRzKSxcbiAgICAgICAgZGF0YTogc3BlYy5kYXRhLFxuICAgICAgICBldmVudE9yZGVyOiBtZW51SXRlbUV2ZW50T3JkZXIsXG4gICAgICAgIGhhc1N1Ym1lbnU6IHNwZWMudHJpZ2dlcnNTdWJtZW51LFxuICAgICAgICBpdGVtQmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIGNvbmZpZygnaXRlbS1ldmVudHMnLCBbXG4gICAgICAgICAgICBvbk1lbnVJdGVtRXhlY3V0ZShzcGVjLCBpdGVtUmVzcG9uc2UpLFxuICAgICAgICAgICAgb25Db250cm9sQXR0YWNoZWQoc3BlYywgZWRpdG9yT2ZmQ2VsbCksXG4gICAgICAgICAgICBvbkNvbnRyb2xEZXRhY2hlZChzcGVjLCBlZGl0b3JPZmZDZWxsKVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIERpc2FibGluZ0NvbmZpZ3MuaXRlbSgoKSA9PiAhc3BlYy5lbmFibGVkIHx8IHByb3ZpZGVyc0JhY2tzdGFnZS5pc0Rpc2FibGVkKCkpLFxuICAgICAgICAgIHJlY2VpdmluZ0NvbmZpZygpLFxuICAgICAgICAgIFJlcGxhY2luZy5jb25maWcoe30pXG4gICAgICAgIF0uY29uY2F0KHNwZWMuaXRlbUJlaGF2aW91cnMpKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGJ1aWxkRGF0YSA9IHNvdXJjZSA9PiAoe1xuICAgICAgdmFsdWU6IHNvdXJjZS52YWx1ZSxcbiAgICAgIG1ldGE6IHtcbiAgICAgICAgdGV4dDogc291cmNlLnRleHQuZ2V0T3IoJycpLFxuICAgICAgICAuLi5zb3VyY2UubWV0YVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgY29udmVydFRleHQgPSBzb3VyY2UgPT4ge1xuICAgICAgY29uc3QgaXNNYWMgPSBnbG9iYWwkNS5vcy5pc01hY09TKCkgfHwgZ2xvYmFsJDUub3MuaXNpT1MoKTtcbiAgICAgIGNvbnN0IG1hYyA9IHtcbiAgICAgICAgYWx0OiAnXFx1MjMyNScsXG4gICAgICAgIGN0cmw6ICdcXHUyMzAzJyxcbiAgICAgICAgc2hpZnQ6ICdcXHUyMUU3JyxcbiAgICAgICAgbWV0YTogJ1xcdTIzMTgnLFxuICAgICAgICBhY2Nlc3M6ICdcXHUyMzAzXFx1MjMyNSdcbiAgICAgIH07XG4gICAgICBjb25zdCBvdGhlciA9IHtcbiAgICAgICAgbWV0YTogJ0N0cmwnLFxuICAgICAgICBhY2Nlc3M6ICdTaGlmdCtBbHQnXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVwbGFjZSA9IGlzTWFjID8gbWFjIDogb3RoZXI7XG4gICAgICBjb25zdCBzaG9ydGN1dCA9IHNvdXJjZS5zcGxpdCgnKycpO1xuICAgICAgY29uc3QgdXBkYXRlZCA9IG1hcCQyKHNob3J0Y3V0LCBzZWdtZW50ID0+IHtcbiAgICAgICAgY29uc3Qgc2VhcmNoID0gc2VnbWVudC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgICAgcmV0dXJuIGhhcyQyKHJlcGxhY2UsIHNlYXJjaCkgPyByZXBsYWNlW3NlYXJjaF0gOiBzZWdtZW50O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gaXNNYWMgPyB1cGRhdGVkLmpvaW4oJycpIDogdXBkYXRlZC5qb2luKCcrJyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlckljb24kMiA9IChuYW1lLCBpY29ucywgY2xhc3NlcyA9IFtpY29uQ2xhc3NdKSA9PiByZW5kZXIkMyhuYW1lLCB7XG4gICAgICB0YWc6ICdkaXYnLFxuICAgICAgY2xhc3Nlc1xuICAgIH0sIGljb25zKTtcbiAgICBjb25zdCByZW5kZXJUZXh0ID0gdGV4dCA9PiAoe1xuICAgICAgZG9tOiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFt0ZXh0Q2xhc3NdXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czogW3RleHQkMihnbG9iYWwkOC50cmFuc2xhdGUodGV4dCkpXVxuICAgIH0pO1xuICAgIGNvbnN0IHJlbmRlckh0bWwgPSAoaHRtbCwgY2xhc3NlcykgPT4gKHtcbiAgICAgIGRvbToge1xuICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICBjbGFzc2VzLFxuICAgICAgICBpbm5lckh0bWw6IGh0bWxcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZW5kZXJTdHlsZWRUZXh0ID0gKHN0eWxlLCB0ZXh0KSA9PiAoe1xuICAgICAgZG9tOiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFt0ZXh0Q2xhc3NdXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czogW3tcbiAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgIHRhZzogc3R5bGUudGFnLFxuICAgICAgICAgICAgc3R5bGVzOiBzdHlsZS5zdHlsZXNcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbXBvbmVudHM6IFt0ZXh0JDIoZ2xvYmFsJDgudHJhbnNsYXRlKHRleHQpKV1cbiAgICAgICAgfV1cbiAgICB9KTtcbiAgICBjb25zdCByZW5kZXJTaG9ydGN1dCA9IHNob3J0Y3V0ID0+ICh7XG4gICAgICBkb206IHtcbiAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgY2xhc3NlczogW2FjY2Vzc29yeUNsYXNzXVxuICAgICAgfSxcbiAgICAgIGNvbXBvbmVudHM6IFt0ZXh0JDIoY29udmVydFRleHQoc2hvcnRjdXQpKV1cbiAgICB9KTtcbiAgICBjb25zdCByZW5kZXJDaGVja21hcmsgPSBpY29ucyA9PiByZW5kZXJJY29uJDIoJ2NoZWNrbWFyaycsIGljb25zLCBbY2hlY2ttYXJrQ2xhc3NdKTtcbiAgICBjb25zdCByZW5kZXJTdWJtZW51Q2FyZXQgPSBpY29ucyA9PiByZW5kZXJJY29uJDIoJ2NoZXZyb24tcmlnaHQnLCBpY29ucywgW2NhcmV0Q2xhc3NdKTtcbiAgICBjb25zdCByZW5kZXJEb3dud2FyZHNDYXJldCA9IGljb25zID0+IHJlbmRlckljb24kMignY2hldnJvbi1kb3duJywgaWNvbnMsIFtjYXJldENsYXNzXSk7XG4gICAgY29uc3QgcmVuZGVyQ29udGFpbmVyID0gKGNvbnRhaW5lciwgY29tcG9uZW50cykgPT4ge1xuICAgICAgY29uc3QgZGlyZWN0aW9uQ2xhc3MgPSBjb250YWluZXIuZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gY29udGFpbmVyQ29sdW1uQ2xhc3MgOiBjb250YWluZXJSb3dDbGFzcztcbiAgICAgIGNvbnN0IGFsaWduQ2xhc3MgPSBjb250YWluZXIuYWxpZ24gPT09ICdsZWZ0JyA/IGNvbnRhaW5lckFsaWduTGVmdENsYXNzIDogY29udGFpbmVyQWxpZ25SaWdodENsYXNzO1xuICAgICAgY29uc3QgZ2V0VmFsaWduQ2xhc3MgPSAoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoY29udGFpbmVyLnZhbGlnbikge1xuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgIHJldHVybiBjb250YWluZXJWYWxpZ25Ub3BDbGFzcztcbiAgICAgICAgY2FzZSAnbWlkZGxlJzpcbiAgICAgICAgICByZXR1cm4gY29udGFpbmVyVmFsaWduTWlkZGxlQ2xhc3M7XG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgcmV0dXJuIGNvbnRhaW5lclZhbGlnbkJvdHRvbUNsYXNzO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbXG4gICAgICAgICAgICBjb250YWluZXJDbGFzcyxcbiAgICAgICAgICAgIGRpcmVjdGlvbkNsYXNzLFxuICAgICAgICAgICAgYWxpZ25DbGFzcyxcbiAgICAgICAgICAgIGdldFZhbGlnbkNsYXNzKClcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHNcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJJbWFnZSA9IChzcmMsIGNsYXNzZXMsIGFsdCkgPT4gKHtcbiAgICAgIGRvbToge1xuICAgICAgICB0YWc6ICdpbWcnLFxuICAgICAgICBjbGFzc2VzLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgc3JjLFxuICAgICAgICAgIGFsdDogYWx0LmdldE9yKCcnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCByZW5kZXJDb2xvclN0cnVjdHVyZSA9IChpdGVtLCBwcm92aWRlckJhY2tzdGFnZSwgZmFsbGJhY2tJY29uKSA9PiB7XG4gICAgICBjb25zdCBjb2xvclBpY2tlckNvbW1hbmQgPSAnY3VzdG9tJztcbiAgICAgIGNvbnN0IHJlbW92ZUNvbG9yQ29tbWFuZCA9ICdyZW1vdmUnO1xuICAgICAgY29uc3QgaXRlbVRleHQgPSBpdGVtLmFyaWFMYWJlbDtcbiAgICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IGl0ZW0udmFsdWU7XG4gICAgICBjb25zdCBpY29uU3ZnID0gaXRlbS5pY29uQ29udGVudC5tYXAobmFtZSA9PiBnZXRPcihuYW1lLCBwcm92aWRlckJhY2tzdGFnZS5pY29ucywgZmFsbGJhY2tJY29uKSk7XG4gICAgICBjb25zdCBnZXREb20gPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbW1vbiA9IGNvbG9yQ2xhc3M7XG4gICAgICAgIGNvbnN0IGljb24gPSBpY29uU3ZnLmdldE9yKCcnKTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGl0ZW1UZXh0Lm1hcCh0ZXh0ID0+ICh7IHRpdGxlOiBwcm92aWRlckJhY2tzdGFnZS50cmFuc2xhdGUodGV4dCkgfSkpLmdldE9yKHt9KTtcbiAgICAgICAgY29uc3QgYmFzZURvbSA9IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgY2xhc3NlczogW2NvbW1vbl1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGl0ZW1WYWx1ZSA9PT0gY29sb3JQaWNrZXJDb21tYW5kKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmJhc2VEb20sXG4gICAgICAgICAgICB0YWc6ICdidXR0b24nLFxuICAgICAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICAgICAuLi5iYXNlRG9tLmNsYXNzZXMsXG4gICAgICAgICAgICAgICd0b3gtc3dhdGNoZXNfX3BpY2tlci1idG4nXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaW5uZXJIdG1sOiBpY29uXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtVmFsdWUgPT09IHJlbW92ZUNvbG9yQ29tbWFuZCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5iYXNlRG9tLFxuICAgICAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICAgICAuLi5iYXNlRG9tLmNsYXNzZXMsXG4gICAgICAgICAgICAgICd0b3gtc3dhdGNoLS1yZW1vdmUnXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaW5uZXJIdG1sOiBpY29uXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc05vbk51bGxhYmxlKGl0ZW1WYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uYmFzZURvbSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgLi4uYmFzZURvbS5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAnZGF0YS1tY2UtY29sb3InOiBpdGVtVmFsdWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdHlsZXM6IHsgJ2JhY2tncm91bmQtY29sb3InOiBpdGVtVmFsdWUgfSxcbiAgICAgICAgICAgIGlubmVySHRtbDogaWNvblxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGJhc2VEb207XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IGdldERvbSgpLFxuICAgICAgICBvcHRDb21wb25lbnRzOiBbXVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckl0ZW1Eb21TdHJ1Y3R1cmUgPSBhcmlhTGFiZWwgPT4ge1xuICAgICAgY29uc3QgZG9tVGl0bGUgPSBhcmlhTGFiZWwubWFwKGxhYmVsID0+ICh7XG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICB0aXRsZTogZ2xvYmFsJDgudHJhbnNsYXRlKGxhYmVsKSxcbiAgICAgICAgICBpZDogZ2VuZXJhdGUkNignbWVudS1pdGVtJylcbiAgICAgICAgfVxuICAgICAgfSkpLmdldE9yKHt9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICBuYXZDbGFzcyxcbiAgICAgICAgICBzZWxlY3RhYmxlQ2xhc3NcbiAgICAgICAgXSxcbiAgICAgICAgLi4uZG9tVGl0bGVcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJOb3JtYWxJdGVtU3RydWN0dXJlID0gKGluZm8sIHByb3ZpZGVyc0JhY2tzdGFnZSwgcmVuZGVySWNvbnMsIGZhbGxiYWNrSWNvbikgPT4ge1xuICAgICAgY29uc3QgaWNvblNwZWMgPSB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFtpY29uQ2xhc3NdXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVuZGVySWNvbiA9IGljb25OYW1lID0+IHJlbmRlciQzKGljb25OYW1lLCBpY29uU3BlYywgcHJvdmlkZXJzQmFja3N0YWdlLmljb25zLCBmYWxsYmFja0ljb24pO1xuICAgICAgY29uc3QgcmVuZGVyRW1wdHlJY29uID0gKCkgPT4gT3B0aW9uYWwuc29tZSh7IGRvbTogaWNvblNwZWMgfSk7XG4gICAgICBjb25zdCBsZWZ0SWNvbiA9IHJlbmRlckljb25zID8gaW5mby5pY29uQ29udGVudC5tYXAocmVuZGVySWNvbikub3JUaHVuayhyZW5kZXJFbXB0eUljb24pIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgY29uc3QgY2hlY2ttYXJrID0gaW5mby5jaGVja01hcms7XG4gICAgICBjb25zdCB0ZXh0UmVuZGVyID0gT3B0aW9uYWwuZnJvbShpbmZvLm1ldGEpLmZvbGQoKCkgPT4gcmVuZGVyVGV4dCwgbWV0YSA9PiBoYXMkMihtZXRhLCAnc3R5bGUnKSA/IGN1cnJ5KHJlbmRlclN0eWxlZFRleHQsIG1ldGEuc3R5bGUpIDogcmVuZGVyVGV4dCk7XG4gICAgICBjb25zdCBjb250ZW50ID0gaW5mby5odG1sQ29udGVudC5mb2xkKCgpID0+IGluZm8udGV4dENvbnRlbnQubWFwKHRleHRSZW5kZXIpLCBodG1sID0+IE9wdGlvbmFsLnNvbWUocmVuZGVySHRtbChodG1sLCBbdGV4dENsYXNzXSkpKTtcbiAgICAgIGNvbnN0IG1lbnVJdGVtID0ge1xuICAgICAgICBkb206IHJlbmRlckl0ZW1Eb21TdHJ1Y3R1cmUoaW5mby5hcmlhTGFiZWwpLFxuICAgICAgICBvcHRDb21wb25lbnRzOiBbXG4gICAgICAgICAgbGVmdEljb24sXG4gICAgICAgICAgY29udGVudCxcbiAgICAgICAgICBpbmZvLnNob3J0Y3V0Q29udGVudC5tYXAocmVuZGVyU2hvcnRjdXQpLFxuICAgICAgICAgIGNoZWNrbWFyayxcbiAgICAgICAgICBpbmZvLmNhcmV0XG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgICByZXR1cm4gbWVudUl0ZW07XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJJdGVtU3RydWN0dXJlID0gKGluZm8sIHByb3ZpZGVyc0JhY2tzdGFnZSwgcmVuZGVySWNvbnMsIGZhbGxiYWNrSWNvbiA9IE9wdGlvbmFsLm5vbmUoKSkgPT4ge1xuICAgICAgaWYgKGluZm8ucHJlc2V0cyA9PT0gJ2NvbG9yJykge1xuICAgICAgICByZXR1cm4gcmVuZGVyQ29sb3JTdHJ1Y3R1cmUoaW5mbywgcHJvdmlkZXJzQmFja3N0YWdlLCBmYWxsYmFja0ljb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlck5vcm1hbEl0ZW1TdHJ1Y3R1cmUoaW5mbywgcHJvdmlkZXJzQmFja3N0YWdlLCByZW5kZXJJY29ucywgZmFsbGJhY2tJY29uKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdG9vbHRpcEJlaGF2aW91ciA9IChtZXRhLCBzaGFyZWRCYWNrc3RhZ2UpID0+IGdldCRnKG1ldGEsICd0b29sdGlwV29ya2VyJykubWFwKHRvb2x0aXBXb3JrZXIgPT4gW1Rvb2x0aXBwaW5nLmNvbmZpZyh7XG4gICAgICAgIGxhenlTaW5rOiBzaGFyZWRCYWNrc3RhZ2UuZ2V0U2luayxcbiAgICAgICAgdG9vbHRpcERvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtdG9vbHRpcC13b3JrZXItY29udGFpbmVyJ11cbiAgICAgICAgfSxcbiAgICAgICAgdG9vbHRpcENvbXBvbmVudHM6IFtdLFxuICAgICAgICBhbmNob3I6IGNvbXAgPT4gKHtcbiAgICAgICAgICB0eXBlOiAnc3VibWVudScsXG4gICAgICAgICAgaXRlbTogY29tcCxcbiAgICAgICAgICBvdmVycmlkZXM6IHsgbWF4SGVpZ2h0RnVuY3Rpb246IGV4cGFuZGFibGUkMSB9XG4gICAgICAgIH0pLFxuICAgICAgICBtb2RlOiAnZm9sbG93LWhpZ2hsaWdodCcsXG4gICAgICAgIG9uU2hvdzogKGNvbXBvbmVudCwgX3Rvb2x0aXApID0+IHtcbiAgICAgICAgICB0b29sdGlwV29ya2VyKGVsbSA9PiB7XG4gICAgICAgICAgICBUb29sdGlwcGluZy5zZXRDb21wb25lbnRzKGNvbXBvbmVudCwgW2V4dGVybmFsJDEoeyBlbGVtZW50OiBTdWdhckVsZW1lbnQuZnJvbURvbShlbG0pIH0pXSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXSkuZ2V0T3IoW10pO1xuICAgIGNvbnN0IGVuY29kZVRleHQgPSB0ZXh0ID0+IGdsb2JhbCQ3LkRPTS5lbmNvZGUodGV4dCk7XG4gICAgY29uc3QgcmVwbGFjZVRleHQgPSAodGV4dCwgbWF0Y2hUZXh0KSA9PiB7XG4gICAgICBjb25zdCB0cmFuc2xhdGVkID0gZ2xvYmFsJDgudHJhbnNsYXRlKHRleHQpO1xuICAgICAgY29uc3QgZW5jb2RlZCA9IGVuY29kZVRleHQodHJhbnNsYXRlZCk7XG4gICAgICBpZiAobWF0Y2hUZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZXNjYXBlZE1hdGNoUmVnZXggPSBuZXcgUmVnRXhwKGVzY2FwZShtYXRjaFRleHQpLCAnZ2knKTtcbiAgICAgICAgcmV0dXJuIGVuY29kZWQucmVwbGFjZShlc2NhcGVkTWF0Y2hSZWdleCwgbWF0Y2ggPT4gYDxzcGFuIGNsYXNzPVwidG94LWF1dG9jb21wbGV0ZXItaGlnaGxpZ2h0XCI+JHsgbWF0Y2ggfTwvc3Bhbj5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlbmNvZGVkO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVuZGVyQXV0b2NvbXBsZXRlSXRlbSA9IChzcGVjLCBtYXRjaFRleHQsIHVzZVRleHQsIHByZXNldHMsIG9uSXRlbVZhbHVlSGFuZGxlciwgaXRlbVJlc3BvbnNlLCBzaGFyZWRCYWNrc3RhZ2UsIHJlbmRlckljb25zID0gdHJ1ZSkgPT4ge1xuICAgICAgY29uc3Qgc3RydWN0dXJlID0gcmVuZGVySXRlbVN0cnVjdHVyZSh7XG4gICAgICAgIHByZXNldHMsXG4gICAgICAgIHRleHRDb250ZW50OiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGh0bWxDb250ZW50OiB1c2VUZXh0ID8gc3BlYy50ZXh0Lm1hcCh0ZXh0ID0+IHJlcGxhY2VUZXh0KHRleHQsIG1hdGNoVGV4dCkpIDogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICBhcmlhTGFiZWw6IHNwZWMudGV4dCxcbiAgICAgICAgaWNvbkNvbnRlbnQ6IHNwZWMuaWNvbixcbiAgICAgICAgc2hvcnRjdXRDb250ZW50OiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGNoZWNrTWFyazogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICBjYXJldDogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICB2YWx1ZTogc3BlYy52YWx1ZVxuICAgICAgfSwgc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVycywgcmVuZGVySWNvbnMsIHNwZWMuaWNvbik7XG4gICAgICByZXR1cm4gcmVuZGVyQ29tbW9uSXRlbSh7XG4gICAgICAgIGRhdGE6IGJ1aWxkRGF0YShzcGVjKSxcbiAgICAgICAgZW5hYmxlZDogc3BlYy5lbmFibGVkLFxuICAgICAgICBnZXRBcGk6IGNvbnN0YW50JDEoe30pLFxuICAgICAgICBvbkFjdGlvbjogX2FwaSA9PiBvbkl0ZW1WYWx1ZUhhbmRsZXIoc3BlYy52YWx1ZSwgc3BlYy5tZXRhKSxcbiAgICAgICAgb25TZXR1cDogY29uc3RhbnQkMShub29wKSxcbiAgICAgICAgdHJpZ2dlcnNTdWJtZW51OiBmYWxzZSxcbiAgICAgICAgaXRlbUJlaGF2aW91cnM6IHRvb2x0aXBCZWhhdmlvdXIoc3BlYy5tZXRhLCBzaGFyZWRCYWNrc3RhZ2UpXG4gICAgICB9LCBzdHJ1Y3R1cmUsIGl0ZW1SZXNwb25zZSwgc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVycyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlciQyID0gKGl0ZW1zLCBleHRyYXMpID0+IG1hcCQyKGl0ZW1zLCBpdGVtID0+IHtcbiAgICAgIHN3aXRjaCAoaXRlbS50eXBlKSB7XG4gICAgICBjYXNlICdjYXJkY29udGFpbmVyJzpcbiAgICAgICAgcmV0dXJuIHJlbmRlckNvbnRhaW5lcihpdGVtLCByZW5kZXIkMihpdGVtLml0ZW1zLCBleHRyYXMpKTtcbiAgICAgIGNhc2UgJ2NhcmRpbWFnZSc6XG4gICAgICAgIHJldHVybiByZW5kZXJJbWFnZShpdGVtLnNyYywgaXRlbS5jbGFzc2VzLCBpdGVtLmFsdCk7XG4gICAgICBjYXNlICdjYXJkdGV4dCc6XG4gICAgICAgIGNvbnN0IHNob3VsZEhpZ2hsaWdodCA9IGl0ZW0ubmFtZS5leGlzdHMobmFtZSA9PiBjb250YWlucyQyKGV4dHJhcy5jYXJkVGV4dC5oaWdobGlnaHRPbiwgbmFtZSkpO1xuICAgICAgICBjb25zdCBtYXRjaFRleHQgPSBzaG91bGRIaWdobGlnaHQgPyBPcHRpb25hbC5mcm9tKGV4dHJhcy5jYXJkVGV4dC5tYXRjaFRleHQpLmdldE9yKCcnKSA6ICcnO1xuICAgICAgICByZXR1cm4gcmVuZGVySHRtbChyZXBsYWNlVGV4dChpdGVtLnRleHQsIG1hdGNoVGV4dCksIGl0ZW0uY2xhc3Nlcyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVuZGVyQ2FyZE1lbnVJdGVtID0gKHNwZWMsIGl0ZW1SZXNwb25zZSwgc2hhcmVkQmFja3N0YWdlLCBleHRyYXMpID0+IHtcbiAgICAgIGNvbnN0IGdldEFwaSA9IGNvbXBvbmVudCA9PiAoe1xuICAgICAgICBpc0VuYWJsZWQ6ICgpID0+ICFEaXNhYmxpbmcuaXNEaXNhYmxlZChjb21wb25lbnQpLFxuICAgICAgICBzZXRFbmFibGVkOiBzdGF0ZSA9PiB7XG4gICAgICAgICAgRGlzYWJsaW5nLnNldChjb21wb25lbnQsICFzdGF0ZSk7XG4gICAgICAgICAgZWFjaCQxKGRlc2NlbmRhbnRzKGNvbXBvbmVudC5lbGVtZW50LCAnKicpLCBlbG0gPT4ge1xuICAgICAgICAgICAgY29tcG9uZW50LmdldFN5c3RlbSgpLmdldEJ5RG9tKGVsbSkuZWFjaChjb21wID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNvbXAuaGFzQ29uZmlndXJlZChEaXNhYmxpbmcpKSB7XG4gICAgICAgICAgICAgICAgRGlzYWJsaW5nLnNldChjb21wLCAhc3RhdGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzdHJ1Y3R1cmUgPSB7XG4gICAgICAgIGRvbTogcmVuZGVySXRlbURvbVN0cnVjdHVyZShzcGVjLmxhYmVsKSxcbiAgICAgICAgb3B0Q29tcG9uZW50czogW09wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAgICAgICBjb250YWluZXJDbGFzcyxcbiAgICAgICAgICAgICAgICBjb250YWluZXJSb3dDbGFzc1xuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcG9uZW50czogcmVuZGVyJDIoc3BlYy5pdGVtcywgZXh0cmFzKVxuICAgICAgICAgIH0pXVxuICAgICAgfTtcbiAgICAgIHJldHVybiByZW5kZXJDb21tb25JdGVtKHtcbiAgICAgICAgZGF0YTogYnVpbGREYXRhKHtcbiAgICAgICAgICB0ZXh0OiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgICAgLi4uc3BlY1xuICAgICAgICB9KSxcbiAgICAgICAgZW5hYmxlZDogc3BlYy5lbmFibGVkLFxuICAgICAgICBnZXRBcGksXG4gICAgICAgIG9uQWN0aW9uOiBzcGVjLm9uQWN0aW9uLFxuICAgICAgICBvblNldHVwOiBzcGVjLm9uU2V0dXAsXG4gICAgICAgIHRyaWdnZXJzU3VibWVudTogZmFsc2UsXG4gICAgICAgIGl0ZW1CZWhhdmlvdXJzOiBPcHRpb25hbC5mcm9tKGV4dHJhcy5pdGVtQmVoYXZpb3VycykuZ2V0T3IoW10pXG4gICAgICB9LCBzdHJ1Y3R1cmUsIGl0ZW1SZXNwb25zZSwgc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVycyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlckNob2ljZUl0ZW0gPSAoc3BlYywgdXNlVGV4dCwgcHJlc2V0cywgb25JdGVtVmFsdWVIYW5kbGVyLCBpc1NlbGVjdGVkLCBpdGVtUmVzcG9uc2UsIHByb3ZpZGVyc0JhY2tzdGFnZSwgcmVuZGVySWNvbnMgPSB0cnVlKSA9PiB7XG4gICAgICBjb25zdCBnZXRBcGkgPSBjb21wb25lbnQgPT4gKHtcbiAgICAgICAgc2V0QWN0aXZlOiBzdGF0ZSA9PiB7XG4gICAgICAgICAgVG9nZ2xpbmcuc2V0KGNvbXBvbmVudCwgc3RhdGUpO1xuICAgICAgICB9LFxuICAgICAgICBpc0FjdGl2ZTogKCkgPT4gVG9nZ2xpbmcuaXNPbihjb21wb25lbnQpLFxuICAgICAgICBpc0VuYWJsZWQ6ICgpID0+ICFEaXNhYmxpbmcuaXNEaXNhYmxlZChjb21wb25lbnQpLFxuICAgICAgICBzZXRFbmFibGVkOiBzdGF0ZSA9PiBEaXNhYmxpbmcuc2V0KGNvbXBvbmVudCwgIXN0YXRlKVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzdHJ1Y3R1cmUgPSByZW5kZXJJdGVtU3RydWN0dXJlKHtcbiAgICAgICAgcHJlc2V0cyxcbiAgICAgICAgdGV4dENvbnRlbnQ6IHVzZVRleHQgPyBzcGVjLnRleHQgOiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGh0bWxDb250ZW50OiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGFyaWFMYWJlbDogc3BlYy50ZXh0LFxuICAgICAgICBpY29uQ29udGVudDogc3BlYy5pY29uLFxuICAgICAgICBzaG9ydGN1dENvbnRlbnQ6IHVzZVRleHQgPyBzcGVjLnNob3J0Y3V0IDogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICBjaGVja01hcms6IHVzZVRleHQgPyBPcHRpb25hbC5zb21lKHJlbmRlckNoZWNrbWFyayhwcm92aWRlcnNCYWNrc3RhZ2UuaWNvbnMpKSA6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICAgY2FyZXQ6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICAgdmFsdWU6IHNwZWMudmFsdWVcbiAgICAgIH0sIHByb3ZpZGVyc0JhY2tzdGFnZSwgcmVuZGVySWNvbnMpO1xuICAgICAgcmV0dXJuIGRlZXBNZXJnZShyZW5kZXJDb21tb25JdGVtKHtcbiAgICAgICAgZGF0YTogYnVpbGREYXRhKHNwZWMpLFxuICAgICAgICBlbmFibGVkOiBzcGVjLmVuYWJsZWQsXG4gICAgICAgIGdldEFwaSxcbiAgICAgICAgb25BY3Rpb246IF9hcGkgPT4gb25JdGVtVmFsdWVIYW5kbGVyKHNwZWMudmFsdWUpLFxuICAgICAgICBvblNldHVwOiBhcGkgPT4ge1xuICAgICAgICAgIGFwaS5zZXRBY3RpdmUoaXNTZWxlY3RlZCk7XG4gICAgICAgICAgcmV0dXJuIG5vb3A7XG4gICAgICAgIH0sXG4gICAgICAgIHRyaWdnZXJzU3VibWVudTogZmFsc2UsXG4gICAgICAgIGl0ZW1CZWhhdmlvdXJzOiBbXVxuICAgICAgfSwgc3RydWN0dXJlLCBpdGVtUmVzcG9uc2UsIHByb3ZpZGVyc0JhY2tzdGFnZSksIHtcbiAgICAgICAgdG9nZ2xpbmc6IHtcbiAgICAgICAgICB0b2dnbGVDbGFzczogdGlja2VkQ2xhc3MsXG4gICAgICAgICAgdG9nZ2xlT25FeGVjdXRlOiBmYWxzZSxcbiAgICAgICAgICBzZWxlY3RlZDogc3BlYy5hY3RpdmUsXG4gICAgICAgICAgZXhjbHVzaXZlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBwYXJ0cyRmID0gZ2VuZXJhdGUkMyhvd25lciQyKCksIHBhcnRzJGgoKSk7XG5cbiAgICBjb25zdCBoZXhDb2xvdXIgPSB2YWx1ZSA9PiAoeyB2YWx1ZTogbm9ybWFsaXplSGV4KHZhbHVlKSB9KTtcbiAgICBjb25zdCBzaG9ydGhhbmRSZWdleCA9IC9eIz8oW2EtZlxcZF0pKFthLWZcXGRdKShbYS1mXFxkXSkkL2k7XG4gICAgY29uc3QgbG9uZ2Zvcm1SZWdleCA9IC9eIz8oW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkkL2k7XG4gICAgY29uc3QgaXNIZXhTdHJpbmcgPSBoZXggPT4gc2hvcnRoYW5kUmVnZXgudGVzdChoZXgpIHx8IGxvbmdmb3JtUmVnZXgudGVzdChoZXgpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZUhleCA9IGhleCA9PiByZW1vdmVMZWFkaW5nKGhleCwgJyMnKS50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IGZyb21TdHJpbmckMSA9IGhleCA9PiBpc0hleFN0cmluZyhoZXgpID8gT3B0aW9uYWwuc29tZSh7IHZhbHVlOiBub3JtYWxpemVIZXgoaGV4KSB9KSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICBjb25zdCBnZXRMb25nRm9ybSA9IGhleCA9PiB7XG4gICAgICBjb25zdCBoZXhTdHJpbmcgPSBoZXgudmFsdWUucmVwbGFjZShzaG9ydGhhbmRSZWdleCwgKG0sIHIsIGcsIGIpID0+IHIgKyByICsgZyArIGcgKyBiICsgYik7XG4gICAgICByZXR1cm4geyB2YWx1ZTogaGV4U3RyaW5nIH07XG4gICAgfTtcbiAgICBjb25zdCBleHRyYWN0VmFsdWVzID0gaGV4ID0+IHtcbiAgICAgIGNvbnN0IGxvbmdGb3JtID0gZ2V0TG9uZ0Zvcm0oaGV4KTtcbiAgICAgIGNvbnN0IHNwbGl0Rm9ybSA9IGxvbmdmb3JtUmVnZXguZXhlYyhsb25nRm9ybS52YWx1ZSk7XG4gICAgICByZXR1cm4gc3BsaXRGb3JtID09PSBudWxsID8gW1xuICAgICAgICAnRkZGRkZGJyxcbiAgICAgICAgJ0ZGJyxcbiAgICAgICAgJ0ZGJyxcbiAgICAgICAgJ0ZGJ1xuICAgICAgXSA6IHNwbGl0Rm9ybTtcbiAgICB9O1xuICAgIGNvbnN0IHRvSGV4ID0gY29tcG9uZW50ID0+IHtcbiAgICAgIGNvbnN0IGhleCA9IGNvbXBvbmVudC50b1N0cmluZygxNik7XG4gICAgICByZXR1cm4gKGhleC5sZW5ndGggPT09IDEgPyAnMCcgKyBoZXggOiBoZXgpLnRvVXBwZXJDYXNlKCk7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tUmdiYSA9IHJnYmFDb2xvdXIgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0b0hleChyZ2JhQ29sb3VyLnJlZCkgKyB0b0hleChyZ2JhQ29sb3VyLmdyZWVuKSArIHRvSGV4KHJnYmFDb2xvdXIuYmx1ZSk7XG4gICAgICByZXR1cm4gaGV4Q29sb3VyKHZhbHVlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbWluID0gTWF0aC5taW47XG4gICAgY29uc3QgbWF4ID0gTWF0aC5tYXg7XG4gICAgY29uc3Qgcm91bmQkMSA9IE1hdGgucm91bmQ7XG4gICAgY29uc3QgcmdiUmVnZXggPSAvXlxccypyZ2JcXHMqXFwoXFxzKihcXGQrKVxccyosXFxzKihcXGQrKVxccyosXFxzKihcXGQrKVxccypcXClcXHMqJC9pO1xuICAgIGNvbnN0IHJnYmFSZWdleCA9IC9eXFxzKnJnYmFcXHMqXFwoXFxzKihcXGQrKVxccyosXFxzKihcXGQrKVxccyosXFxzKihcXGQrKVxccyosXFxzKihcXGQ/KD86XFwuXFxkKyk/KVxccypcXClcXHMqJC9pO1xuICAgIGNvbnN0IHJnYmFDb2xvdXIgPSAocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpID0+ICh7XG4gICAgICByZWQsXG4gICAgICBncmVlbixcbiAgICAgIGJsdWUsXG4gICAgICBhbHBoYVxuICAgIH0pO1xuICAgIGNvbnN0IGlzUmdiYUNvbXBvbmVudCA9IHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IG51bSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgICByZXR1cm4gbnVtLnRvU3RyaW5nKCkgPT09IHZhbHVlICYmIG51bSA+PSAwICYmIG51bSA8PSAyNTU7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tSHN2ID0gaHN2ID0+IHtcbiAgICAgIGxldCByO1xuICAgICAgbGV0IGc7XG4gICAgICBsZXQgYjtcbiAgICAgIGNvbnN0IGh1ZSA9IChoc3YuaHVlIHx8IDApICUgMzYwO1xuICAgICAgbGV0IHNhdHVyYXRpb24gPSBoc3Yuc2F0dXJhdGlvbiAvIDEwMDtcbiAgICAgIGxldCBicmlnaHRuZXNzID0gaHN2LnZhbHVlIC8gMTAwO1xuICAgICAgc2F0dXJhdGlvbiA9IG1heCgwLCBtaW4oc2F0dXJhdGlvbiwgMSkpO1xuICAgICAgYnJpZ2h0bmVzcyA9IG1heCgwLCBtaW4oYnJpZ2h0bmVzcywgMSkpO1xuICAgICAgaWYgKHNhdHVyYXRpb24gPT09IDApIHtcbiAgICAgICAgciA9IGcgPSBiID0gcm91bmQkMSgyNTUgKiBicmlnaHRuZXNzKTtcbiAgICAgICAgcmV0dXJuIHJnYmFDb2xvdXIociwgZywgYiwgMSk7XG4gICAgICB9XG4gICAgICBjb25zdCBzaWRlID0gaHVlIC8gNjA7XG4gICAgICBjb25zdCBjaHJvbWEgPSBicmlnaHRuZXNzICogc2F0dXJhdGlvbjtcbiAgICAgIGNvbnN0IHggPSBjaHJvbWEgKiAoMSAtIE1hdGguYWJzKHNpZGUgJSAyIC0gMSkpO1xuICAgICAgY29uc3QgbWF0Y2ggPSBicmlnaHRuZXNzIC0gY2hyb21hO1xuICAgICAgc3dpdGNoIChNYXRoLmZsb29yKHNpZGUpKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHIgPSBjaHJvbWE7XG4gICAgICAgIGcgPSB4O1xuICAgICAgICBiID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHIgPSB4O1xuICAgICAgICBnID0gY2hyb21hO1xuICAgICAgICBiID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHIgPSAwO1xuICAgICAgICBnID0gY2hyb21hO1xuICAgICAgICBiID0geDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHIgPSAwO1xuICAgICAgICBnID0geDtcbiAgICAgICAgYiA9IGNocm9tYTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDQ6XG4gICAgICAgIHIgPSB4O1xuICAgICAgICBnID0gMDtcbiAgICAgICAgYiA9IGNocm9tYTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDU6XG4gICAgICAgIHIgPSBjaHJvbWE7XG4gICAgICAgIGcgPSAwO1xuICAgICAgICBiID0geDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByID0gZyA9IGIgPSAwO1xuICAgICAgfVxuICAgICAgciA9IHJvdW5kJDEoMjU1ICogKHIgKyBtYXRjaCkpO1xuICAgICAgZyA9IHJvdW5kJDEoMjU1ICogKGcgKyBtYXRjaCkpO1xuICAgICAgYiA9IHJvdW5kJDEoMjU1ICogKGIgKyBtYXRjaCkpO1xuICAgICAgcmV0dXJuIHJnYmFDb2xvdXIociwgZywgYiwgMSk7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tSGV4ID0gaGV4Q29sb3VyID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3RWYWx1ZXMoaGV4Q29sb3VyKTtcbiAgICAgIGNvbnN0IHJlZCA9IHBhcnNlSW50KHJlc3VsdFsxXSwgMTYpO1xuICAgICAgY29uc3QgZ3JlZW4gPSBwYXJzZUludChyZXN1bHRbMl0sIDE2KTtcbiAgICAgIGNvbnN0IGJsdWUgPSBwYXJzZUludChyZXN1bHRbM10sIDE2KTtcbiAgICAgIHJldHVybiByZ2JhQ29sb3VyKHJlZCwgZ3JlZW4sIGJsdWUsIDEpO1xuICAgIH07XG4gICAgY29uc3QgZnJvbVN0cmluZ1ZhbHVlcyA9IChyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSkgPT4ge1xuICAgICAgY29uc3QgciA9IHBhcnNlSW50KHJlZCwgMTApO1xuICAgICAgY29uc3QgZyA9IHBhcnNlSW50KGdyZWVuLCAxMCk7XG4gICAgICBjb25zdCBiID0gcGFyc2VJbnQoYmx1ZSwgMTApO1xuICAgICAgY29uc3QgYSA9IHBhcnNlRmxvYXQoYWxwaGEpO1xuICAgICAgcmV0dXJuIHJnYmFDb2xvdXIociwgZywgYiwgYSk7XG4gICAgfTtcbiAgICBjb25zdCBmcm9tU3RyaW5nID0gcmdiYVN0cmluZyA9PiB7XG4gICAgICBpZiAocmdiYVN0cmluZyA9PT0gJ3RyYW5zcGFyZW50Jykge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShyZ2JhQ29sb3VyKDAsIDAsIDAsIDApKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJnYk1hdGNoID0gcmdiUmVnZXguZXhlYyhyZ2JhU3RyaW5nKTtcbiAgICAgIGlmIChyZ2JNYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShmcm9tU3RyaW5nVmFsdWVzKHJnYk1hdGNoWzFdLCByZ2JNYXRjaFsyXSwgcmdiTWF0Y2hbM10sICcxJykpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmdiYU1hdGNoID0gcmdiYVJlZ2V4LmV4ZWMocmdiYVN0cmluZyk7XG4gICAgICBpZiAocmdiYU1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGZyb21TdHJpbmdWYWx1ZXMocmdiYU1hdGNoWzFdLCByZ2JhTWF0Y2hbMl0sIHJnYmFNYXRjaFszXSwgcmdiYU1hdGNoWzRdKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgdG9TdHJpbmcgPSByZ2JhID0+IGByZ2JhKCR7IHJnYmEucmVkIH0sJHsgcmdiYS5ncmVlbiB9LCR7IHJnYmEuYmx1ZSB9LCR7IHJnYmEuYWxwaGEgfSlgO1xuICAgIGNvbnN0IHJlZCA9IHJnYmFDb2xvdXIoMjU1LCAwLCAwLCAxKTtcblxuICAgIGNvbnN0IGZpcmVTa2luTG9hZGVkJDEgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdTa2luTG9hZGVkJyk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJlU2tpbkxvYWRFcnJvciQxID0gKGVkaXRvciwgZXJyb3IpID0+IHtcbiAgICAgIGVkaXRvci5kaXNwYXRjaCgnU2tpbkxvYWRFcnJvcicsIGVycm9yKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVSZXNpemVFZGl0b3IgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdSZXNpemVFZGl0b3InKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVSZXNpemVDb250ZW50ID0gKGVkaXRvciwgZSkgPT4ge1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdSZXNpemVDb250ZW50JywgZSk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJlU2Nyb2xsQ29udGVudCA9IChlZGl0b3IsIGUpID0+IHtcbiAgICAgIGVkaXRvci5kaXNwYXRjaCgnU2Nyb2xsQ29udGVudCcsIGUpO1xuICAgIH07XG4gICAgY29uc3QgZmlyZVRleHRDb2xvckNoYW5nZSA9IChlZGl0b3IsIGRhdGEpID0+IHtcbiAgICAgIGVkaXRvci5kaXNwYXRjaCgnVGV4dENvbG9yQ2hhbmdlJywgZGF0YSk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJlQWZ0ZXJQcm9ncmVzc1N0YXRlID0gKGVkaXRvciwgc3RhdGUpID0+IHtcbiAgICAgIGVkaXRvci5kaXNwYXRjaCgnQWZ0ZXJQcm9ncmVzc1N0YXRlJywgeyBzdGF0ZSB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVSZXNvbHZlTmFtZSA9IChlZGl0b3IsIG5vZGUpID0+IGVkaXRvci5kaXNwYXRjaCgnUmVzb2x2ZU5hbWUnLCB7XG4gICAgICBuYW1lOiBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICB0YXJnZXQ6IG5vZGVcbiAgICB9KTtcbiAgICBjb25zdCBmaXJlVG9nZ2xlVG9vbGJhckRyYXdlciA9IChlZGl0b3IsIHN0YXRlKSA9PiB7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ1RvZ2dsZVRvb2xiYXJEcmF3ZXInLCB7IHN0YXRlIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBjb21wb3NlVW5iaW5kZXJzID0gKGYsIGcpID0+ICgpID0+IHtcbiAgICAgIGYoKTtcbiAgICAgIGcoKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uU2V0dXBFZGl0YWJsZVRvZ2dsZSA9IGVkaXRvciA9PiBvblNldHVwRXZlbnQoZWRpdG9yLCAnTm9kZUNoYW5nZScsIGFwaSA9PiB7XG4gICAgICBhcGkuc2V0RW5hYmxlZChlZGl0b3Iuc2VsZWN0aW9uLmlzRWRpdGFibGUoKSk7XG4gICAgfSk7XG4gICAgY29uc3Qgb25TZXR1cEZvcm1hdFRvZ2dsZSA9IChlZGl0b3IsIG5hbWUpID0+IGFwaSA9PiB7XG4gICAgICBjb25zdCBib3VuZEZvcm1hdENoYW5nZUNhbGxiYWNrID0gdW5iaW5kYWJsZSgpO1xuICAgICAgY29uc3QgaW5pdCA9ICgpID0+IHtcbiAgICAgICAgYXBpLnNldEFjdGl2ZShlZGl0b3IuZm9ybWF0dGVyLm1hdGNoKG5hbWUpKTtcbiAgICAgICAgY29uc3QgYmluZGluZyA9IGVkaXRvci5mb3JtYXR0ZXIuZm9ybWF0Q2hhbmdlZChuYW1lLCBhcGkuc2V0QWN0aXZlKTtcbiAgICAgICAgYm91bmRGb3JtYXRDaGFuZ2VDYWxsYmFjay5zZXQoYmluZGluZyk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLmluaXRpYWxpemVkID8gaW5pdCgpIDogZWRpdG9yLm9uY2UoJ2luaXQnLCBpbml0KTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5vZmYoJ2luaXQnLCBpbml0KTtcbiAgICAgICAgYm91bmRGb3JtYXRDaGFuZ2VDYWxsYmFjay5jbGVhcigpO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG9uU2V0dXBTdGF0ZVRvZ2dsZSA9IChlZGl0b3IsIG5hbWUpID0+IGFwaSA9PiB7XG4gICAgICBjb25zdCB1bmJpbmRFZGl0YWJsZVRvb2dsZSA9IG9uU2V0dXBFZGl0YWJsZVRvZ2dsZShlZGl0b3IpKGFwaSk7XG4gICAgICBjb25zdCB1bmJpbmRGb3JtYXRUb2dnbGUgPSBvblNldHVwRm9ybWF0VG9nZ2xlKGVkaXRvciwgbmFtZSkoYXBpKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHVuYmluZEVkaXRhYmxlVG9vZ2xlKCk7XG4gICAgICAgIHVuYmluZEZvcm1hdFRvZ2dsZSgpO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG9uU2V0dXBFdmVudCA9IChlZGl0b3IsIGV2ZW50LCBmKSA9PiBhcGkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlRXZlbnQgPSAoKSA9PiBmKGFwaSk7XG4gICAgICBjb25zdCBpbml0ID0gKCkgPT4ge1xuICAgICAgICBmKGFwaSk7XG4gICAgICAgIGVkaXRvci5vbihldmVudCwgaGFuZGxlRXZlbnQpO1xuICAgICAgfTtcbiAgICAgIGVkaXRvci5pbml0aWFsaXplZCA/IGluaXQoKSA6IGVkaXRvci5vbmNlKCdpbml0JywgaW5pdCk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBlZGl0b3Iub2ZmKCdpbml0JywgaW5pdCk7XG4gICAgICAgIGVkaXRvci5vZmYoZXZlbnQsIGhhbmRsZUV2ZW50KTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBvbkFjdGlvblRvZ2dsZUZvcm1hdCQxID0gZWRpdG9yID0+IHJhd0l0ZW0gPT4gKCkgPT4ge1xuICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnbWNlVG9nZ2xlRm9ybWF0JywgZmFsc2UsIHJhd0l0ZW0uZm9ybWF0KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25BY3Rpb25FeGVjQ29tbWFuZCA9IChlZGl0b3IsIGNvbW1hbmQpID0+ICgpID0+IGVkaXRvci5leGVjQ29tbWFuZChjb21tYW5kKTtcblxuICAgIHZhciBnbG9iYWwkNCA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLnV0aWwuTG9jYWxTdG9yYWdlJyk7XG5cbiAgICBjb25zdCBjYWNoZVN0b3JhZ2UgPSB7fTtcbiAgICBjb25zdCBDb2xvckNhY2hlID0gKHN0b3JhZ2VJZCwgbWF4ID0gMTApID0+IHtcbiAgICAgIGNvbnN0IHN0b3JhZ2VTdHJpbmcgPSBnbG9iYWwkNC5nZXRJdGVtKHN0b3JhZ2VJZCk7XG4gICAgICBjb25zdCBsb2NhbHN0b3JhZ2UgPSBpc1N0cmluZyhzdG9yYWdlU3RyaW5nKSA/IEpTT04ucGFyc2Uoc3RvcmFnZVN0cmluZykgOiBbXTtcbiAgICAgIGNvbnN0IHBydW5lID0gbGlzdCA9PiB7XG4gICAgICAgIGNvbnN0IGRpZmYgPSBtYXggLSBsaXN0Lmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGRpZmYgPCAwID8gbGlzdC5zbGljZSgwLCBtYXgpIDogbGlzdDtcbiAgICAgIH07XG4gICAgICBjb25zdCBjYWNoZSA9IHBydW5lKGxvY2Fsc3RvcmFnZSk7XG4gICAgICBjb25zdCBhZGQgPSBrZXkgPT4ge1xuICAgICAgICBpbmRleE9mKGNhY2hlLCBrZXkpLmVhY2gocmVtb3ZlKTtcbiAgICAgICAgY2FjaGUudW5zaGlmdChrZXkpO1xuICAgICAgICBpZiAoY2FjaGUubGVuZ3RoID4gbWF4KSB7XG4gICAgICAgICAgY2FjaGUucG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2xvYmFsJDQuc2V0SXRlbShzdG9yYWdlSWQsIEpTT04uc3RyaW5naWZ5KGNhY2hlKSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVtb3ZlID0gaWR4ID0+IHtcbiAgICAgICAgY2FjaGUuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc3RhdGUgPSAoKSA9PiBjYWNoZS5zbGljZSgwKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFkZCxcbiAgICAgICAgc3RhdGVcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBnZXRDYWNoZUZvcklkID0gaWQgPT4gZ2V0JGcoY2FjaGVTdG9yYWdlLCBpZCkuZ2V0T3JUaHVuaygoKSA9PiB7XG4gICAgICBjb25zdCBzdG9yYWdlSWQgPSBgdGlueW1jZS1jdXN0b20tY29sb3JzLSR7IGlkIH1gO1xuICAgICAgY29uc3QgY3VycmVudERhdGEgPSBnbG9iYWwkNC5nZXRJdGVtKHN0b3JhZ2VJZCk7XG4gICAgICBpZiAoaXNOdWxsYWJsZShjdXJyZW50RGF0YSkpIHtcbiAgICAgICAgY29uc3QgbGVnYWN5RGVmYXVsdCA9IGdsb2JhbCQ0LmdldEl0ZW0oJ3RpbnltY2UtY3VzdG9tLWNvbG9ycycpO1xuICAgICAgICBnbG9iYWwkNC5zZXRJdGVtKHN0b3JhZ2VJZCwgaXNOb25OdWxsYWJsZShsZWdhY3lEZWZhdWx0KSA/IGxlZ2FjeURlZmF1bHQgOiAnW10nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0b3JhZ2UgPSBDb2xvckNhY2hlKHN0b3JhZ2VJZCwgMTApO1xuICAgICAgY2FjaGVTdG9yYWdlW2lkXSA9IHN0b3JhZ2U7XG4gICAgICByZXR1cm4gc3RvcmFnZTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRDdXJyZW50Q29sb3JzID0gaWQgPT4gbWFwJDIoZ2V0Q2FjaGVGb3JJZChpZCkuc3RhdGUoKSwgY29sb3IgPT4gKHtcbiAgICAgIHR5cGU6ICdjaG9pY2VpdGVtJyxcbiAgICAgIHRleHQ6IGNvbG9yLFxuICAgICAgaWNvbjogJ2NoZWNrbWFyaycsXG4gICAgICB2YWx1ZTogY29sb3JcbiAgICB9KSk7XG4gICAgY29uc3QgYWRkQ29sb3IgPSAoaWQsIGNvbG9yKSA9PiB7XG4gICAgICBnZXRDYWNoZUZvcklkKGlkKS5hZGQoY29sb3IpO1xuICAgIH07XG5cbiAgICBjb25zdCBoc3ZDb2xvdXIgPSAoaHVlLCBzYXR1cmF0aW9uLCB2YWx1ZSkgPT4gKHtcbiAgICAgIGh1ZSxcbiAgICAgIHNhdHVyYXRpb24sXG4gICAgICB2YWx1ZVxuICAgIH0pO1xuICAgIGNvbnN0IGZyb21SZ2IgPSByZ2JhQ29sb3VyID0+IHtcbiAgICAgIGxldCBoID0gMDtcbiAgICAgIGxldCBzID0gMDtcbiAgICAgIGxldCB2ID0gMDtcbiAgICAgIGNvbnN0IHIgPSByZ2JhQ29sb3VyLnJlZCAvIDI1NTtcbiAgICAgIGNvbnN0IGcgPSByZ2JhQ29sb3VyLmdyZWVuIC8gMjU1O1xuICAgICAgY29uc3QgYiA9IHJnYmFDb2xvdXIuYmx1ZSAvIDI1NTtcbiAgICAgIGNvbnN0IG1pblJHQiA9IE1hdGgubWluKHIsIE1hdGgubWluKGcsIGIpKTtcbiAgICAgIGNvbnN0IG1heFJHQiA9IE1hdGgubWF4KHIsIE1hdGgubWF4KGcsIGIpKTtcbiAgICAgIGlmIChtaW5SR0IgPT09IG1heFJHQikge1xuICAgICAgICB2ID0gbWluUkdCO1xuICAgICAgICByZXR1cm4gaHN2Q29sb3VyKDAsIDAsIHYgKiAxMDApO1xuICAgICAgfVxuICAgICAgY29uc3QgZCA9IHIgPT09IG1pblJHQiA/IGcgLSBiIDogYiA9PT0gbWluUkdCID8gciAtIGcgOiBiIC0gcjtcbiAgICAgIGggPSByID09PSBtaW5SR0IgPyAzIDogYiA9PT0gbWluUkdCID8gMSA6IDU7XG4gICAgICBoID0gNjAgKiAoaCAtIGQgLyAobWF4UkdCIC0gbWluUkdCKSk7XG4gICAgICBzID0gKG1heFJHQiAtIG1pblJHQikgLyBtYXhSR0I7XG4gICAgICB2ID0gbWF4UkdCO1xuICAgICAgcmV0dXJuIGhzdkNvbG91cihNYXRoLnJvdW5kKGgpLCBNYXRoLnJvdW5kKHMgKiAxMDApLCBNYXRoLnJvdW5kKHYgKiAxMDApKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGV4VG9Ic3YgPSBoZXggPT4gZnJvbVJnYihmcm9tSGV4KGhleCkpO1xuICAgIGNvbnN0IGhzdlRvSGV4ID0gaHN2ID0+IGZyb21SZ2JhKGZyb21Ic3YoaHN2KSk7XG4gICAgY29uc3QgYW55VG9IZXggPSBjb2xvciA9PiBmcm9tU3RyaW5nJDEoY29sb3IpLm9yVGh1bmsoKCkgPT4gZnJvbVN0cmluZyhjb2xvcikubWFwKGZyb21SZ2JhKSkuZ2V0T3JUaHVuaygoKSA9PiB7XG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgIGNhbnZhcy5oZWlnaHQgPSAxO1xuICAgICAgY2FudmFzLndpZHRoID0gMTtcbiAgICAgIGNvbnN0IGNhbnZhc0NvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgIGNhbnZhc0NvbnRleHQuY2xlYXJSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgICBjYW52YXNDb250ZXh0LmZpbGxTdHlsZSA9ICcjRkZGRkZGJztcbiAgICAgIGNhbnZhc0NvbnRleHQuZmlsbFN0eWxlID0gY29sb3I7XG4gICAgICBjYW52YXNDb250ZXh0LmZpbGxSZWN0KDAsIDAsIDEsIDEpO1xuICAgICAgY29uc3QgcmdiYSA9IGNhbnZhc0NvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIDEsIDEpLmRhdGE7XG4gICAgICBjb25zdCByID0gcmdiYVswXTtcbiAgICAgIGNvbnN0IGcgPSByZ2JhWzFdO1xuICAgICAgY29uc3QgYiA9IHJnYmFbMl07XG4gICAgICBjb25zdCBhID0gcmdiYVszXTtcbiAgICAgIHJldHVybiBmcm9tUmdiYShyZ2JhQ29sb3VyKHIsIGcsIGIsIGEpKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGZvcmVncm91bmRJZCA9ICdmb3JlY29sb3InO1xuICAgIGNvbnN0IGJhY2tncm91bmRJZCA9ICdoaWxpdGVjb2xvcic7XG4gICAgY29uc3QgZmFsbGJhY2tDb2xzID0gNTtcbiAgICBjb25zdCBtYXBDb2xvcnMgPSBjb2xvck1hcCA9PiB7XG4gICAgICBjb25zdCBjb2xvcnMgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sb3JNYXAubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgY29sb3JzLnB1c2goe1xuICAgICAgICAgIHRleHQ6IGNvbG9yTWFwW2kgKyAxXSxcbiAgICAgICAgICB2YWx1ZTogJyMnICsgYW55VG9IZXgoY29sb3JNYXBbaV0pLnZhbHVlLFxuICAgICAgICAgIGljb246ICdjaGVja21hcmsnLFxuICAgICAgICAgIHR5cGU6ICdjaG9pY2VpdGVtJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb2xvcnM7XG4gICAgfTtcbiAgICBjb25zdCBvcHRpb24kMSA9IG5hbWUgPT4gZWRpdG9yID0+IGVkaXRvci5vcHRpb25zLmdldChuYW1lKTtcbiAgICBjb25zdCBmYWxsYmFja0NvbG9yID0gJyMwMDAwMDAnO1xuICAgIGNvbnN0IHJlZ2lzdGVyJGQgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgcmVnaXN0ZXJPcHRpb24gPSBlZGl0b3Iub3B0aW9ucy5yZWdpc3RlcjtcbiAgICAgIGNvbnN0IGNvbG9yUHJvY2Vzc29yID0gdmFsdWUgPT4ge1xuICAgICAgICBpZiAoaXNBcnJheU9mKHZhbHVlLCBpc1N0cmluZykpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IG1hcENvbG9ycyh2YWx1ZSksXG4gICAgICAgICAgICB2YWxpZDogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdNdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MuJ1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBjb2xvckNvbHNQcm9jZXNzb3IgPSB2YWx1ZSA9PiB7XG4gICAgICAgIGlmIChpc051bWJlcih2YWx1ZSkgJiYgdmFsdWUgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdmFsaWQ6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiAnTXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlci4nXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdjb2xvcl9tYXAnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogY29sb3JQcm9jZXNzb3IsXG4gICAgICAgIGRlZmF1bHQ6IFtcbiAgICAgICAgICAnI0JGRUREMicsXG4gICAgICAgICAgJ0xpZ2h0IEdyZWVuJyxcbiAgICAgICAgICAnI0ZCRUVCOCcsXG4gICAgICAgICAgJ0xpZ2h0IFllbGxvdycsXG4gICAgICAgICAgJyNGOENBQzYnLFxuICAgICAgICAgICdMaWdodCBSZWQnLFxuICAgICAgICAgICcjRUNDQUZBJyxcbiAgICAgICAgICAnTGlnaHQgUHVycGxlJyxcbiAgICAgICAgICAnI0MyRTBGNCcsXG4gICAgICAgICAgJ0xpZ2h0IEJsdWUnLFxuICAgICAgICAgICcjMkRDMjZCJyxcbiAgICAgICAgICAnR3JlZW4nLFxuICAgICAgICAgICcjRjFDNDBGJyxcbiAgICAgICAgICAnWWVsbG93JyxcbiAgICAgICAgICAnI0UwM0UyRCcsXG4gICAgICAgICAgJ1JlZCcsXG4gICAgICAgICAgJyNCOTZBRDknLFxuICAgICAgICAgICdQdXJwbGUnLFxuICAgICAgICAgICcjMzU5OERCJyxcbiAgICAgICAgICAnQmx1ZScsXG4gICAgICAgICAgJyMxNjkxNzknLFxuICAgICAgICAgICdEYXJrIFR1cnF1b2lzZScsXG4gICAgICAgICAgJyNFNjdFMjMnLFxuICAgICAgICAgICdPcmFuZ2UnLFxuICAgICAgICAgICcjQkEzNzJBJyxcbiAgICAgICAgICAnRGFyayBSZWQnLFxuICAgICAgICAgICcjODQzRkExJyxcbiAgICAgICAgICAnRGFyayBQdXJwbGUnLFxuICAgICAgICAgICcjMjM2RkExJyxcbiAgICAgICAgICAnRGFyayBCbHVlJyxcbiAgICAgICAgICAnI0VDRjBGMScsXG4gICAgICAgICAgJ0xpZ2h0IEdyYXknLFxuICAgICAgICAgICcjQ0VENEQ5JyxcbiAgICAgICAgICAnTWVkaXVtIEdyYXknLFxuICAgICAgICAgICcjOTVBNUE2JyxcbiAgICAgICAgICAnR3JheScsXG4gICAgICAgICAgJyM3RThDOEQnLFxuICAgICAgICAgICdEYXJrIEdyYXknLFxuICAgICAgICAgICcjMzQ0OTVFJyxcbiAgICAgICAgICAnTmF2eSBCbHVlJyxcbiAgICAgICAgICAnIzAwMDAwMCcsXG4gICAgICAgICAgJ0JsYWNrJyxcbiAgICAgICAgICAnI2ZmZmZmZicsXG4gICAgICAgICAgJ1doaXRlJ1xuICAgICAgICBdXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdjb2xvcl9tYXBfYmFja2dyb3VuZCcsIHsgcHJvY2Vzc29yOiBjb2xvclByb2Nlc3NvciB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdjb2xvcl9tYXBfZm9yZWdyb3VuZCcsIHsgcHJvY2Vzc29yOiBjb2xvclByb2Nlc3NvciB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdjb2xvcl9jb2xzJywge1xuICAgICAgICBwcm9jZXNzb3I6IGNvbG9yQ29sc1Byb2Nlc3NvcixcbiAgICAgICAgZGVmYXVsdDogY2FsY0NvbHMoZWRpdG9yKVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignY29sb3JfY29sc19mb3JlZ3JvdW5kJywge1xuICAgICAgICBwcm9jZXNzb3I6IGNvbG9yQ29sc1Byb2Nlc3NvcixcbiAgICAgICAgZGVmYXVsdDogZGVmYXVsdENvbHMoZWRpdG9yLCBmb3JlZ3JvdW5kSWQpXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdjb2xvcl9jb2xzX2JhY2tncm91bmQnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogY29sb3JDb2xzUHJvY2Vzc29yLFxuICAgICAgICBkZWZhdWx0OiBkZWZhdWx0Q29scyhlZGl0b3IsIGJhY2tncm91bmRJZClcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2N1c3RvbV9jb2xvcnMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdjb2xvcl9kZWZhdWx0X2ZvcmVncm91bmQnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6IGZhbGxiYWNrQ29sb3JcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2NvbG9yX2RlZmF1bHRfYmFja2dyb3VuZCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogZmFsbGJhY2tDb2xvclxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRDb2xvcnMkMiA9IChlZGl0b3IsIGlkKSA9PiB7XG4gICAgICBpZiAoaWQgPT09IGZvcmVncm91bmRJZCAmJiBlZGl0b3Iub3B0aW9ucy5pc1NldCgnY29sb3JfbWFwX2ZvcmVncm91bmQnKSkge1xuICAgICAgICByZXR1cm4gb3B0aW9uJDEoJ2NvbG9yX21hcF9mb3JlZ3JvdW5kJykoZWRpdG9yKTtcbiAgICAgIH0gZWxzZSBpZiAoaWQgPT09IGJhY2tncm91bmRJZCAmJiBlZGl0b3Iub3B0aW9ucy5pc1NldCgnY29sb3JfbWFwX2JhY2tncm91bmQnKSkge1xuICAgICAgICByZXR1cm4gb3B0aW9uJDEoJ2NvbG9yX21hcF9iYWNrZ3JvdW5kJykoZWRpdG9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvcHRpb24kMSgnY29sb3JfbWFwJykoZWRpdG9yKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNhbGNDb2xzID0gKGVkaXRvciwgaWQgPSAnZGVmYXVsdCcpID0+IE1hdGgubWF4KGZhbGxiYWNrQ29scywgTWF0aC5jZWlsKE1hdGguc3FydChnZXRDb2xvcnMkMihlZGl0b3IsIGlkKS5sZW5ndGgpKSk7XG4gICAgY29uc3QgZGVmYXVsdENvbHMgPSAoZWRpdG9yLCBpZCkgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdENvbHMgPSBvcHRpb24kMSgnY29sb3JfY29scycpKGVkaXRvcik7XG4gICAgICBjb25zdCBjYWxjdWxhdGVkQ29scyA9IGNhbGNDb2xzKGVkaXRvciwgaWQpO1xuICAgICAgaWYgKGRlZmF1bHRDb2xzID09PSBjYWxjQ29scyhlZGl0b3IpKSB7XG4gICAgICAgIHJldHVybiBjYWxjdWxhdGVkQ29scztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0Q29scztcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdldENvbG9yQ29scyQxID0gKGVkaXRvciwgaWQgPSAnZGVmYXVsdCcpID0+IHtcbiAgICAgIGNvbnN0IGdldENvbHMgPSAoKSA9PiB7XG4gICAgICAgIGlmIChpZCA9PT0gZm9yZWdyb3VuZElkKSB7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbiQxKCdjb2xvcl9jb2xzX2ZvcmVncm91bmQnKShlZGl0b3IpO1xuICAgICAgICB9IGVsc2UgaWYgKGlkID09PSBiYWNrZ3JvdW5kSWQpIHtcbiAgICAgICAgICByZXR1cm4gb3B0aW9uJDEoJ2NvbG9yX2NvbHNfYmFja2dyb3VuZCcpKGVkaXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbiQxKCdjb2xvcl9jb2xzJykoZWRpdG9yKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiBNYXRoLnJvdW5kKGdldENvbHMoKSk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNDdXN0b21Db2xvcnMkMSA9IG9wdGlvbiQxKCdjdXN0b21fY29sb3JzJyk7XG4gICAgY29uc3QgZ2V0RGVmYXVsdEZvcmVncm91bmRDb2xvciA9IG9wdGlvbiQxKCdjb2xvcl9kZWZhdWx0X2ZvcmVncm91bmQnKTtcbiAgICBjb25zdCBnZXREZWZhdWx0QmFja2dyb3VuZENvbG9yID0gb3B0aW9uJDEoJ2NvbG9yX2RlZmF1bHRfYmFja2dyb3VuZCcpO1xuXG4gICAgY29uc3QgZGVmYXVsdEJhY2tncm91bmRDb2xvciA9ICdyZ2JhKDAsIDAsIDAsIDApJztcbiAgICBjb25zdCBpc1ZhbGlkQmFja2dyb3VuZENvbG9yID0gdmFsdWUgPT4gZnJvbVN0cmluZyh2YWx1ZSkuZXhpc3RzKGMgPT4gYy5hbHBoYSAhPT0gMCk7XG4gICAgY29uc3QgZ2V0Q2xvc2VzdENzc0JhY2tncm91bmRDb2xvclZhbHVlID0gc2NvcGUgPT4ge1xuICAgICAgcmV0dXJuIGNsb3Nlc3QkNChzY29wZSwgbm9kZSA9PiB7XG4gICAgICAgIGlmIChpc0VsZW1lbnQkMShub2RlKSkge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gZ2V0JGUobm9kZSwgJ2JhY2tncm91bmQtY29sb3InKTtcbiAgICAgICAgICByZXR1cm4gc29tZUlmKGlzVmFsaWRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpLCBjb2xvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfSkuZ2V0T3IoZGVmYXVsdEJhY2tncm91bmRDb2xvcik7XG4gICAgfTtcbiAgICBjb25zdCBnZXRDdXJyZW50Q29sb3IgPSAoZWRpdG9yLCBmb3JtYXQpID0+IHtcbiAgICAgIGNvbnN0IG5vZGUgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KCkpO1xuICAgICAgY29uc3QgY3NzUmdiVmFsdWUgPSBmb3JtYXQgPT09ICdoaWxpdGVjb2xvcicgPyBnZXRDbG9zZXN0Q3NzQmFja2dyb3VuZENvbG9yVmFsdWUobm9kZSkgOiBnZXQkZShub2RlLCAnY29sb3InKTtcbiAgICAgIHJldHVybiBmcm9tU3RyaW5nKGNzc1JnYlZhbHVlKS5tYXAocmdiYSA9PiAnIycgKyBmcm9tUmdiYShyZ2JhKS52YWx1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBhcHBseUZvcm1hdCA9IChlZGl0b3IsIGZvcm1hdCwgdmFsdWUpID0+IHtcbiAgICAgIGVkaXRvci51bmRvTWFuYWdlci50cmFuc2FjdCgoKSA9PiB7XG4gICAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgICBlZGl0b3IuZm9ybWF0dGVyLmFwcGx5KGZvcm1hdCwgeyB2YWx1ZSB9KTtcbiAgICAgICAgZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZUZvcm1hdCA9IChlZGl0b3IsIGZvcm1hdCkgPT4ge1xuICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgIGVkaXRvci5mb3JtYXR0ZXIucmVtb3ZlKGZvcm1hdCwgeyB2YWx1ZTogbnVsbCB9LCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXJDb21tYW5kcyA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IuYWRkQ29tbWFuZCgnbWNlQXBwbHlUZXh0Y29sb3InLCAoZm9ybWF0LCB2YWx1ZSkgPT4ge1xuICAgICAgICBhcHBseUZvcm1hdChlZGl0b3IsIGZvcm1hdCwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3IuYWRkQ29tbWFuZCgnbWNlUmVtb3ZlVGV4dGNvbG9yJywgZm9ybWF0ID0+IHtcbiAgICAgICAgcmVtb3ZlRm9ybWF0KGVkaXRvciwgZm9ybWF0KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0QWRkaXRpb25hbENvbG9ycyA9IGhhc0N1c3RvbSA9PiB7XG4gICAgICBjb25zdCB0eXBlID0gJ2Nob2ljZWl0ZW0nO1xuICAgICAgY29uc3QgcmVtb3ZlID0ge1xuICAgICAgICB0eXBlLFxuICAgICAgICB0ZXh0OiAnUmVtb3ZlIGNvbG9yJyxcbiAgICAgICAgaWNvbjogJ2NvbG9yLXN3YXRjaC1yZW1vdmUtY29sb3InLFxuICAgICAgICB2YWx1ZTogJ3JlbW92ZSdcbiAgICAgIH07XG4gICAgICBjb25zdCBjdXN0b20gPSB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIHRleHQ6ICdDdXN0b20gY29sb3InLFxuICAgICAgICBpY29uOiAnY29sb3ItcGlja2VyJyxcbiAgICAgICAgdmFsdWU6ICdjdXN0b20nXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGhhc0N1c3RvbSA/IFtcbiAgICAgICAgcmVtb3ZlLFxuICAgICAgICBjdXN0b21cbiAgICAgIF0gOiBbcmVtb3ZlXTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5Q29sb3IgPSAoZWRpdG9yLCBmb3JtYXQsIHZhbHVlLCBvbkNob2ljZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlID09PSAnY3VzdG9tJykge1xuICAgICAgICBjb25zdCBkaWFsb2cgPSBjb2xvclBpY2tlckRpYWxvZyhlZGl0b3IpO1xuICAgICAgICBkaWFsb2coY29sb3JPcHQgPT4ge1xuICAgICAgICAgIGNvbG9yT3B0LmVhY2goY29sb3IgPT4ge1xuICAgICAgICAgICAgYWRkQ29sb3IoZm9ybWF0LCBjb2xvcik7XG4gICAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZUFwcGx5VGV4dGNvbG9yJywgZm9ybWF0LCBjb2xvcik7XG4gICAgICAgICAgICBvbkNob2ljZShjb2xvcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGdldEN1cnJlbnRDb2xvcihlZGl0b3IsIGZvcm1hdCkuZ2V0T3IoZmFsbGJhY2tDb2xvcikpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ3JlbW92ZScpIHtcbiAgICAgICAgb25DaG9pY2UoJycpO1xuICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZVJlbW92ZVRleHRjb2xvcicsIGZvcm1hdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbkNob2ljZSh2YWx1ZSk7XG4gICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnbWNlQXBwbHlUZXh0Y29sb3InLCBmb3JtYXQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdldENvbG9ycyQxID0gKGNvbG9ycywgaWQsIGhhc0N1c3RvbSkgPT4gY29sb3JzLmNvbmNhdChnZXRDdXJyZW50Q29sb3JzKGlkKS5jb25jYXQoZ2V0QWRkaXRpb25hbENvbG9ycyhoYXNDdXN0b20pKSk7XG4gICAgY29uc3QgZ2V0RmV0Y2gkMSA9IChjb2xvcnMsIGlkLCBoYXNDdXN0b20pID0+IGNhbGxiYWNrID0+IHtcbiAgICAgIGNhbGxiYWNrKGdldENvbG9ycyQxKGNvbG9ycywgaWQsIGhhc0N1c3RvbSkpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0SWNvbkNvbG9yID0gKHNwbGl0QnV0dG9uQXBpLCBuYW1lLCBuZXdDb2xvcikgPT4ge1xuICAgICAgY29uc3QgaWQgPSBuYW1lID09PSAnZm9yZWNvbG9yJyA/ICd0b3gtaWNvbi10ZXh0LWNvbG9yX19jb2xvcicgOiAndG94LWljb24taGlnaGxpZ2h0LWJnLWNvbG9yX19jb2xvcic7XG4gICAgICBzcGxpdEJ1dHRvbkFwaS5zZXRJY29uRmlsbChpZCwgbmV3Q29sb3IpO1xuICAgIH07XG4gICAgY29uc3Qgc2VsZWN0JDEgPSAoZWRpdG9yLCBmb3JtYXQpID0+IHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IG9wdEN1cnJlbnRIZXggPSBnZXRDdXJyZW50Q29sb3IoZWRpdG9yLCBmb3JtYXQpO1xuICAgICAgcmV0dXJuIGlzJDEob3B0Q3VycmVudEhleCwgdmFsdWUudG9VcHBlckNhc2UoKSk7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlclRleHRDb2xvckJ1dHRvbiA9IChlZGl0b3IsIG5hbWUsIGZvcm1hdCwgdG9vbHRpcCwgbGFzdENvbG9yKSA9PiB7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkU3BsaXRCdXR0b24obmFtZSwge1xuICAgICAgICB0b29sdGlwLFxuICAgICAgICBwcmVzZXRzOiAnY29sb3InLFxuICAgICAgICBpY29uOiBuYW1lID09PSAnZm9yZWNvbG9yJyA/ICd0ZXh0LWNvbG9yJyA6ICdoaWdobGlnaHQtYmctY29sb3InLFxuICAgICAgICBzZWxlY3Q6IHNlbGVjdCQxKGVkaXRvciwgZm9ybWF0KSxcbiAgICAgICAgY29sdW1uczogZ2V0Q29sb3JDb2xzJDEoZWRpdG9yLCBmb3JtYXQpLFxuICAgICAgICBmZXRjaDogZ2V0RmV0Y2gkMShnZXRDb2xvcnMkMihlZGl0b3IsIGZvcm1hdCksIGZvcm1hdCwgaGFzQ3VzdG9tQ29sb3JzJDEoZWRpdG9yKSksXG4gICAgICAgIG9uQWN0aW9uOiBfc3BsaXRCdXR0b25BcGkgPT4ge1xuICAgICAgICAgIGFwcGx5Q29sb3IoZWRpdG9yLCBmb3JtYXQsIGxhc3RDb2xvci5nZXQoKSwgbm9vcCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uSXRlbUFjdGlvbjogKF9zcGxpdEJ1dHRvbkFwaSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBhcHBseUNvbG9yKGVkaXRvciwgZm9ybWF0LCB2YWx1ZSwgbmV3Q29sb3IgPT4ge1xuICAgICAgICAgICAgbGFzdENvbG9yLnNldChuZXdDb2xvcik7XG4gICAgICAgICAgICBmaXJlVGV4dENvbG9yQ2hhbmdlKGVkaXRvciwge1xuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICBjb2xvcjogbmV3Q29sb3JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblNldHVwOiBzcGxpdEJ1dHRvbkFwaSA9PiB7XG4gICAgICAgICAgc2V0SWNvbkNvbG9yKHNwbGl0QnV0dG9uQXBpLCBuYW1lLCBsYXN0Q29sb3IuZ2V0KCkpO1xuICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBlID0+IHtcbiAgICAgICAgICAgIGlmIChlLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgc2V0SWNvbkNvbG9yKHNwbGl0QnV0dG9uQXBpLCBlLm5hbWUsIGUuY29sb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgZWRpdG9yLm9uKCdUZXh0Q29sb3JDaGFuZ2UnLCBoYW5kbGVyKTtcbiAgICAgICAgICByZXR1cm4gY29tcG9zZVVuYmluZGVycyhvblNldHVwRWRpdGFibGVUb2dnbGUoZWRpdG9yKShzcGxpdEJ1dHRvbkFwaSksICgpID0+IHtcbiAgICAgICAgICAgIGVkaXRvci5vZmYoJ1RleHRDb2xvckNoYW5nZScsIGhhbmRsZXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyVGV4dENvbG9yTWVudUl0ZW0gPSAoZWRpdG9yLCBuYW1lLCBmb3JtYXQsIHRleHQsIGxhc3RDb2xvcikgPT4ge1xuICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE5lc3RlZE1lbnVJdGVtKG5hbWUsIHtcbiAgICAgICAgdGV4dCxcbiAgICAgICAgaWNvbjogbmFtZSA9PT0gJ2ZvcmVjb2xvcicgPyAndGV4dC1jb2xvcicgOiAnaGlnaGxpZ2h0LWJnLWNvbG9yJyxcbiAgICAgICAgb25TZXR1cDogYXBpID0+IHtcbiAgICAgICAgICBzZXRJY29uQ29sb3IoYXBpLCBuYW1lLCBsYXN0Q29sb3IuZ2V0KCkpO1xuICAgICAgICAgIHJldHVybiBvblNldHVwRWRpdGFibGVUb2dnbGUoZWRpdG9yKShhcGkpO1xuICAgICAgICB9LFxuICAgICAgICBnZXRTdWJtZW51SXRlbXM6ICgpID0+IFt7XG4gICAgICAgICAgICB0eXBlOiAnZmFuY3ltZW51aXRlbScsXG4gICAgICAgICAgICBmYW5jeXR5cGU6ICdjb2xvcnN3YXRjaCcsXG4gICAgICAgICAgICBzZWxlY3Q6IHNlbGVjdCQxKGVkaXRvciwgZm9ybWF0KSxcbiAgICAgICAgICAgIGluaXREYXRhOiB7IHN0b3JhZ2VLZXk6IGZvcm1hdCB9LFxuICAgICAgICAgICAgb25BY3Rpb246IGRhdGEgPT4ge1xuICAgICAgICAgICAgICBhcHBseUNvbG9yKGVkaXRvciwgZm9ybWF0LCBkYXRhLnZhbHVlLCBuZXdDb2xvciA9PiB7XG4gICAgICAgICAgICAgICAgbGFzdENvbG9yLnNldChuZXdDb2xvcik7XG4gICAgICAgICAgICAgICAgZmlyZVRleHRDb2xvckNoYW5nZShlZGl0b3IsIHtcbiAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogbmV3Q29sb3JcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfV1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgY29sb3JQaWNrZXJEaWFsb2cgPSBlZGl0b3IgPT4gKGNhbGxiYWNrLCB2YWx1ZSkgPT4ge1xuICAgICAgbGV0IGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IG9uU3VibWl0ID0gYXBpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGFwaS5nZXREYXRhKCk7XG4gICAgICAgIGNvbnN0IGhleCA9IGRhdGEuY29sb3JwaWNrZXI7XG4gICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgY2FsbGJhY2soT3B0aW9uYWwuZnJvbShoZXgpKTtcbiAgICAgICAgICBhcGkuY2xvc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlZGl0b3Iud2luZG93TWFuYWdlci5hbGVydChlZGl0b3IudHJhbnNsYXRlKFtcbiAgICAgICAgICAgICdJbnZhbGlkIGhleCBjb2xvciBjb2RlOiB7MH0nLFxuICAgICAgICAgICAgaGV4XG4gICAgICAgICAgXSkpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25BY3Rpb24gPSAoX2FwaSwgZGV0YWlscykgPT4ge1xuICAgICAgICBpZiAoZGV0YWlscy5uYW1lID09PSAnaGV4LXZhbGlkJykge1xuICAgICAgICAgIGlzVmFsaWQgPSBkZXRhaWxzLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgaW5pdGlhbERhdGEgPSB7IGNvbG9ycGlja2VyOiB2YWx1ZSB9O1xuICAgICAgZWRpdG9yLndpbmRvd01hbmFnZXIub3Blbih7XG4gICAgICAgIHRpdGxlOiAnQ29sb3IgUGlja2VyJyxcbiAgICAgICAgc2l6ZTogJ25vcm1hbCcsXG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB0eXBlOiAncGFuZWwnLFxuICAgICAgICAgIGl0ZW1zOiBbe1xuICAgICAgICAgICAgICB0eXBlOiAnY29sb3JwaWNrZXInLFxuICAgICAgICAgICAgICBuYW1lOiAnY29sb3JwaWNrZXInLFxuICAgICAgICAgICAgICBsYWJlbDogJ0NvbG9yJ1xuICAgICAgICAgICAgfV1cbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICdjYW5jZWwnLFxuICAgICAgICAgICAgbmFtZTogJ2NhbmNlbCcsXG4gICAgICAgICAgICB0ZXh0OiAnQ2FuY2VsJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICBuYW1lOiAnc2F2ZScsXG4gICAgICAgICAgICB0ZXh0OiAnU2F2ZScsXG4gICAgICAgICAgICBwcmltYXJ5OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBpbml0aWFsRGF0YSxcbiAgICAgICAgb25BY3Rpb24sXG4gICAgICAgIG9uU3VibWl0LFxuICAgICAgICBvbkNsb3NlOiBub29wLFxuICAgICAgICBvbkNhbmNlbDogKCkgPT4ge1xuICAgICAgICAgIGNhbGxiYWNrKE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXIkYyA9IGVkaXRvciA9PiB7XG4gICAgICByZWdpc3RlckNvbW1hbmRzKGVkaXRvcik7XG4gICAgICBjb25zdCBmYWxsYmFja0NvbG9yRm9yZWdyb3VuZCA9IGdldERlZmF1bHRGb3JlZ3JvdW5kQ29sb3IoZWRpdG9yKTtcbiAgICAgIGNvbnN0IGZhbGxiYWNrQ29sb3JCYWNrZ3JvdW5kID0gZ2V0RGVmYXVsdEJhY2tncm91bmRDb2xvcihlZGl0b3IpO1xuICAgICAgY29uc3QgbGFzdEZvcmVDb2xvciA9IENlbGwoZmFsbGJhY2tDb2xvckZvcmVncm91bmQpO1xuICAgICAgY29uc3QgbGFzdEJhY2tDb2xvciA9IENlbGwoZmFsbGJhY2tDb2xvckJhY2tncm91bmQpO1xuICAgICAgcmVnaXN0ZXJUZXh0Q29sb3JCdXR0b24oZWRpdG9yLCAnZm9yZWNvbG9yJywgJ2ZvcmVjb2xvcicsICdUZXh0IGNvbG9yJywgbGFzdEZvcmVDb2xvcik7XG4gICAgICByZWdpc3RlclRleHRDb2xvckJ1dHRvbihlZGl0b3IsICdiYWNrY29sb3InLCAnaGlsaXRlY29sb3InLCAnQmFja2dyb3VuZCBjb2xvcicsIGxhc3RCYWNrQ29sb3IpO1xuICAgICAgcmVnaXN0ZXJUZXh0Q29sb3JNZW51SXRlbShlZGl0b3IsICdmb3JlY29sb3InLCAnZm9yZWNvbG9yJywgJ1RleHQgY29sb3InLCBsYXN0Rm9yZUNvbG9yKTtcbiAgICAgIHJlZ2lzdGVyVGV4dENvbG9yTWVudUl0ZW0oZWRpdG9yLCAnYmFja2NvbG9yJywgJ2hpbGl0ZWNvbG9yJywgJ0JhY2tncm91bmQgY29sb3InLCBsYXN0QmFja0NvbG9yKTtcbiAgICB9O1xuXG4gICAgY29uc3QgY3JlYXRlUGFydGlhbENob2ljZU1lbnUgPSAodmFsdWUsIGl0ZW1zLCBvbkl0ZW1WYWx1ZUhhbmRsZXIsIGNvbHVtbnMsIHByZXNldHMsIGl0ZW1SZXNwb25zZSwgc2VsZWN0LCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IGhhc0ljb25zID0gbWVudUhhc0ljb25zKGl0ZW1zKTtcbiAgICAgIGNvbnN0IHByZXNldEl0ZW1UeXBlcyA9IHByZXNldHMgIT09ICdjb2xvcicgPyAnbm9ybWFsJyA6ICdjb2xvcic7XG4gICAgICBjb25zdCBhbGxveUl0ZW1zID0gY3JlYXRlQ2hvaWNlSXRlbXMoaXRlbXMsIG9uSXRlbVZhbHVlSGFuZGxlciwgY29sdW1ucywgcHJlc2V0SXRlbVR5cGVzLCBpdGVtUmVzcG9uc2UsIHNlbGVjdCwgcHJvdmlkZXJzQmFja3N0YWdlKTtcbiAgICAgIGNvbnN0IG1lbnVMYXlvdXQgPSB7IG1lbnVUeXBlOiBwcmVzZXRzIH07XG4gICAgICByZXR1cm4gY3JlYXRlUGFydGlhbE1lbnVXaXRoQWxsb3lJdGVtcyh2YWx1ZSwgaGFzSWNvbnMsIGFsbG95SXRlbXMsIGNvbHVtbnMsIG1lbnVMYXlvdXQpO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlQ2hvaWNlSXRlbXMgPSAoaXRlbXMsIG9uSXRlbVZhbHVlSGFuZGxlciwgY29sdW1ucywgaXRlbVByZXNldHMsIGl0ZW1SZXNwb25zZSwgc2VsZWN0LCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IGNhdChtYXAkMihpdGVtcywgaXRlbSA9PiB7XG4gICAgICBpZiAoaXRlbS50eXBlID09PSAnY2hvaWNlaXRlbScpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUNob2ljZU1lbnVJdGVtKGl0ZW0pLmZvbGQoaGFuZGxlRXJyb3IsIGQgPT4gT3B0aW9uYWwuc29tZShyZW5kZXJDaG9pY2VJdGVtKGQsIGNvbHVtbnMgPT09IDEsIGl0ZW1QcmVzZXRzLCBvbkl0ZW1WYWx1ZUhhbmRsZXIsIHNlbGVjdChkLnZhbHVlKSwgaXRlbVJlc3BvbnNlLCBwcm92aWRlcnNCYWNrc3RhZ2UsIG1lbnVIYXNJY29ucyhpdGVtcykpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH0pKTtcblxuICAgIGNvbnN0IGRlcml2ZU1lbnVNb3ZlbWVudCA9IChjb2x1bW5zLCBwcmVzZXRzKSA9PiB7XG4gICAgICBjb25zdCBtZW51TWFya2VycyA9IG1hcmtlcnMocHJlc2V0cyk7XG4gICAgICBpZiAoY29sdW1ucyA9PT0gMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1vZGU6ICdtZW51JyxcbiAgICAgICAgICBtb3ZlT25UYWI6IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1ucyA9PT0gJ2F1dG8nKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbW9kZTogJ2dyaWQnLFxuICAgICAgICAgIHNlbGVjdG9yOiAnLicgKyBtZW51TWFya2Vycy5pdGVtLFxuICAgICAgICAgIGluaXRTaXplOiB7XG4gICAgICAgICAgICBudW1Db2x1bW5zOiAxLFxuICAgICAgICAgICAgbnVtUm93czogMVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJvd0NsYXNzID0gcHJlc2V0cyA9PT0gJ2NvbG9yJyA/ICd0b3gtc3dhdGNoZXNfX3JvdycgOiAndG94LWNvbGxlY3Rpb25fX2dyb3VwJztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtb2RlOiAnbWF0cml4JyxcbiAgICAgICAgICByb3dTZWxlY3RvcjogJy4nICsgcm93Q2xhc3MsXG4gICAgICAgICAgcHJldmlvdXNTZWxlY3RvcjogbWVudSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcHJlc2V0cyA9PT0gJ2NvbG9yJyA/IGRlc2NlbmRhbnQobWVudS5lbGVtZW50LCAnW2FyaWEtY2hlY2tlZD10cnVlXScpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGRlcml2ZUNvbGxlY3Rpb25Nb3ZlbWVudCA9IChjb2x1bW5zLCBwcmVzZXRzKSA9PiB7XG4gICAgICBpZiAoY29sdW1ucyA9PT0gMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1vZGU6ICdtZW51JyxcbiAgICAgICAgICBtb3ZlT25UYWI6IGZhbHNlLFxuICAgICAgICAgIHNlbGVjdG9yOiAnLnRveC1jb2xsZWN0aW9uX19pdGVtJ1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChjb2x1bW5zID09PSAnYXV0bycpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtb2RlOiAnZmxhdGdyaWQnLFxuICAgICAgICAgIHNlbGVjdG9yOiAnLicgKyAndG94LWNvbGxlY3Rpb25fX2l0ZW0nLFxuICAgICAgICAgIGluaXRTaXplOiB7XG4gICAgICAgICAgICBudW1Db2x1bW5zOiAxLFxuICAgICAgICAgICAgbnVtUm93czogMVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbW9kZTogJ21hdHJpeCcsXG4gICAgICAgICAgc2VsZWN0b3JzOiB7XG4gICAgICAgICAgICByb3c6IHByZXNldHMgPT09ICdjb2xvcicgPyAnLnRveC1zd2F0Y2hlc19fcm93JyA6ICcudG94LWNvbGxlY3Rpb25fX2dyb3VwJyxcbiAgICAgICAgICAgIGNlbGw6IHByZXNldHMgPT09ICdjb2xvcicgPyBgLiR7IGNvbG9yQ2xhc3MgfWAgOiBgLiR7IHNlbGVjdGFibGVDbGFzcyB9YFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVyQ29sb3JTd2F0Y2hJdGVtID0gKHNwZWMsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgaXRlbXMgPSBnZXRDb2xvckl0ZW1zKHNwZWMsIGJhY2tzdGFnZSk7XG4gICAgICBjb25zdCBjb2x1bW5zID0gYmFja3N0YWdlLmNvbG9yaW5wdXQuZ2V0Q29sb3JDb2xzKHNwZWMuaW5pdERhdGEuc3RvcmFnZUtleSk7XG4gICAgICBjb25zdCBwcmVzZXRzID0gJ2NvbG9yJztcbiAgICAgIGNvbnN0IG1lbnVTcGVjID0gY3JlYXRlUGFydGlhbENob2ljZU1lbnUoZ2VuZXJhdGUkNignbWVudS12YWx1ZScpLCBpdGVtcywgdmFsdWUgPT4ge1xuICAgICAgICBzcGVjLm9uQWN0aW9uKHsgdmFsdWUgfSk7XG4gICAgICB9LCBjb2x1bW5zLCBwcmVzZXRzLCBJdGVtUmVzcG9uc2UkMS5DTE9TRV9PTl9FWEVDVVRFLCBzcGVjLnNlbGVjdC5nZXRPcihuZXZlciksIGJhY2tzdGFnZS5zaGFyZWQucHJvdmlkZXJzKTtcbiAgICAgIGNvbnN0IHdpZGdldFNwZWMgPSB7XG4gICAgICAgIC4uLm1lbnVTcGVjLFxuICAgICAgICBtYXJrZXJzOiBtYXJrZXJzKHByZXNldHMpLFxuICAgICAgICBtb3ZlbWVudDogZGVyaXZlTWVudU1vdmVtZW50KGNvbHVtbnMsIHByZXNldHMpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ3dpZGdldCcsXG4gICAgICAgIGRhdGE6IHsgdmFsdWU6IGdlbmVyYXRlJDYoJ3dpZGdldC1pZCcpIH0sXG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtZmFuY3ltZW51aXRlbSddXG4gICAgICAgIH0sXG4gICAgICAgIGF1dG9mb2N1czogdHJ1ZSxcbiAgICAgICAgY29tcG9uZW50czogW3BhcnRzJGYud2lkZ2V0KE1lbnUuc2tldGNoKHdpZGdldFNwZWMpKV1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBnZXRDb2xvckl0ZW1zID0gKHNwZWMsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgdXNlQ3VzdG9tQ29sb3JzID0gc3BlYy5pbml0RGF0YS5hbGxvd0N1c3RvbUNvbG9ycyAmJiBiYWNrc3RhZ2UuY29sb3JpbnB1dC5oYXNDdXN0b21Db2xvcnMoKTtcbiAgICAgIHJldHVybiBzcGVjLmluaXREYXRhLmNvbG9ycy5mb2xkKCgpID0+IGdldENvbG9ycyQxKGJhY2tzdGFnZS5jb2xvcmlucHV0LmdldENvbG9ycyhzcGVjLmluaXREYXRhLnN0b3JhZ2VLZXkpLCBzcGVjLmluaXREYXRhLnN0b3JhZ2VLZXksIHVzZUN1c3RvbUNvbG9ycyksIGNvbG9ycyA9PiBjb2xvcnMuY29uY2F0KGdldEFkZGl0aW9uYWxDb2xvcnModXNlQ3VzdG9tQ29sb3JzKSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBjZWxsT3ZlckV2ZW50ID0gZ2VuZXJhdGUkNignY2VsbC1vdmVyJyk7XG4gICAgY29uc3QgY2VsbEV4ZWN1dGVFdmVudCA9IGdlbmVyYXRlJDYoJ2NlbGwtZXhlY3V0ZScpO1xuICAgIGNvbnN0IG1ha2VBbm5vdW5jZW1lbnRUZXh0ID0gYmFja3N0YWdlID0+IChyb3csIGNvbCkgPT4gYmFja3N0YWdlLnNoYXJlZC5wcm92aWRlcnMudHJhbnNsYXRlKGAkeyBjb2wgfSBjb2x1bW5zLCAkeyByb3cgfSByb3dzYCk7XG4gICAgY29uc3QgbWFrZUNlbGwgPSAocm93LCBjb2wsIGxhYmVsKSA9PiB7XG4gICAgICBjb25zdCBlbWl0Q2VsbE92ZXIgPSBjID0+IGVtaXRXaXRoKGMsIGNlbGxPdmVyRXZlbnQsIHtcbiAgICAgICAgcm93LFxuICAgICAgICBjb2xcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW1pdEV4ZWN1dGUgPSBjID0+IGVtaXRXaXRoKGMsIGNlbGxFeGVjdXRlRXZlbnQsIHtcbiAgICAgICAgcm93LFxuICAgICAgICBjb2xcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgb25DbGljayA9IChjLCBzZSkgPT4ge1xuICAgICAgICBzZS5zdG9wKCk7XG4gICAgICAgIGVtaXRFeGVjdXRlKGMpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBidWlsZCQxKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICByb2xlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgIFsnYXJpYS1sYWJlbCddOiBsYWJlbFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIGNvbmZpZygnaW5zZXJ0LXRhYmxlLXBpY2tlci1jZWxsJywgW1xuICAgICAgICAgICAgcnVuJDEobW91c2VvdmVyKCksIEZvY3VzaW5nLmZvY3VzKSxcbiAgICAgICAgICAgIHJ1biQxKGV4ZWN1dGUkNSgpLCBlbWl0RXhlY3V0ZSksXG4gICAgICAgICAgICBydW4kMShjbGljaygpLCBvbkNsaWNrKSxcbiAgICAgICAgICAgIHJ1biQxKHRhcCgpLCBvbkNsaWNrKVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIFRvZ2dsaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICB0b2dnbGVDbGFzczogJ3RveC1pbnNlcnQtdGFibGUtcGlja2VyX19zZWxlY3RlZCcsXG4gICAgICAgICAgICB0b2dnbGVPbkV4ZWN1dGU6IGZhbHNlXG4gICAgICAgICAgfSksXG4gICAgICAgICAgRm9jdXNpbmcuY29uZmlnKHsgb25Gb2N1czogZW1pdENlbGxPdmVyIH0pXG4gICAgICAgIF0pXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG1ha2VDZWxscyA9IChnZXRDZWxsTGFiZWwsIG51bVJvd3MsIG51bUNvbHMpID0+IHtcbiAgICAgIGNvbnN0IGNlbGxzID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVJvd3M7IGkrKykge1xuICAgICAgICBjb25zdCByb3cgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1Db2xzOyBqKyspIHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IGdldENlbGxMYWJlbChpICsgMSwgaiArIDEpO1xuICAgICAgICAgIHJvdy5wdXNoKG1ha2VDZWxsKGksIGosIGxhYmVsKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2VsbHMucHVzaChyb3cpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNlbGxzO1xuICAgIH07XG4gICAgY29uc3Qgc2VsZWN0Q2VsbHMgPSAoY2VsbHMsIHNlbGVjdGVkUm93LCBzZWxlY3RlZENvbHVtbiwgbnVtUm93cywgbnVtQ29sdW1ucykgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Sb3dzOyBpKyspIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1Db2x1bW5zOyBqKyspIHtcbiAgICAgICAgICBUb2dnbGluZy5zZXQoY2VsbHNbaV1bal0sIGkgPD0gc2VsZWN0ZWRSb3cgJiYgaiA8PSBzZWxlY3RlZENvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1ha2VDb21wb25lbnRzID0gY2VsbHMgPT4gYmluZCQzKGNlbGxzLCBjZWxsUm93ID0+IG1hcCQyKGNlbGxSb3csIHByZW1hZGUpKTtcbiAgICBjb25zdCBtYWtlTGFiZWxUZXh0ID0gKHJvdywgY29sKSA9PiB0ZXh0JDIoYCR7IGNvbCB9eCR7IHJvdyB9YCk7XG4gICAgY29uc3QgcmVuZGVySW5zZXJ0VGFibGVNZW51SXRlbSA9IChzcGVjLCBiYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IG51bVJvd3MgPSAxMDtcbiAgICAgIGNvbnN0IG51bUNvbHVtbnMgPSAxMDtcbiAgICAgIGNvbnN0IGdldENlbGxMYWJlbCA9IG1ha2VBbm5vdW5jZW1lbnRUZXh0KGJhY2tzdGFnZSk7XG4gICAgICBjb25zdCBjZWxscyA9IG1ha2VDZWxscyhnZXRDZWxsTGFiZWwsIG51bVJvd3MsIG51bUNvbHVtbnMpO1xuICAgICAgY29uc3QgZW1wdHlMYWJlbFRleHQgPSBtYWtlTGFiZWxUZXh0KDAsIDApO1xuICAgICAgY29uc3QgbWVtTGFiZWwgPSByZWNvcmQoe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdzcGFuJyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1pbnNlcnQtdGFibGUtcGlja2VyX19sYWJlbCddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtlbXB0eUxhYmVsVGV4dF0sXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtSZXBsYWNpbmcuY29uZmlnKHt9KV0pXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICd3aWRnZXQnLFxuICAgICAgICBkYXRhOiB7IHZhbHVlOiBnZW5lcmF0ZSQ2KCd3aWRnZXQtaWQnKSB9LFxuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LWZhbmN5bWVudWl0ZW0nXVxuICAgICAgICB9LFxuICAgICAgICBhdXRvZm9jdXM6IHRydWUsXG4gICAgICAgIGNvbXBvbmVudHM6IFtwYXJ0cyRmLndpZGdldCh7XG4gICAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgICAgY2xhc3NlczogWyd0b3gtaW5zZXJ0LXRhYmxlLXBpY2tlciddXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcG9uZW50czogbWFrZUNvbXBvbmVudHMoY2VsbHMpLmNvbmNhdChtZW1MYWJlbC5hc1NwZWMoKSksXG4gICAgICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgICAgIGNvbmZpZygnaW5zZXJ0LXRhYmxlLXBpY2tlcicsIFtcbiAgICAgICAgICAgICAgICBydW5PbkF0dGFjaGVkKGMgPT4ge1xuICAgICAgICAgICAgICAgICAgUmVwbGFjaW5nLnNldChtZW1MYWJlbC5nZXQoYyksIFtlbXB0eUxhYmVsVGV4dF0pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHJ1bldpdGhUYXJnZXQoY2VsbE92ZXJFdmVudCwgKGMsIHQsIGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHtyb3csIGNvbH0gPSBlLmV2ZW50O1xuICAgICAgICAgICAgICAgICAgc2VsZWN0Q2VsbHMoY2VsbHMsIHJvdywgY29sLCBudW1Sb3dzLCBudW1Db2x1bW5zKTtcbiAgICAgICAgICAgICAgICAgIFJlcGxhY2luZy5zZXQobWVtTGFiZWwuZ2V0KGMpLCBbbWFrZUxhYmVsVGV4dChyb3cgKyAxLCBjb2wgKyAxKV0pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHJ1bldpdGhUYXJnZXQoY2VsbEV4ZWN1dGVFdmVudCwgKGMsIF8sIGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHtyb3csIGNvbH0gPSBlLmV2ZW50O1xuICAgICAgICAgICAgICAgICAgc3BlYy5vbkFjdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIG51bVJvd3M6IHJvdyArIDEsXG4gICAgICAgICAgICAgICAgICAgIG51bUNvbHVtbnM6IGNvbCArIDFcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgZW1pdChjLCBzYW5kYm94Q2xvc2UoKSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgICAgICAgIGluaXRTaXplOiB7XG4gICAgICAgICAgICAgICAgICBudW1Sb3dzLFxuICAgICAgICAgICAgICAgICAgbnVtQ29sdW1uc1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbW9kZTogJ2ZsYXRncmlkJyxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1tyb2xlPVwiYnV0dG9uXCJdJ1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICB9KV1cbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGZhbmN5TWVudUl0ZW1zID0ge1xuICAgICAgaW5zZXJ0dGFibGU6IHJlbmRlckluc2VydFRhYmxlTWVudUl0ZW0sXG4gICAgICBjb2xvcnN3YXRjaDogcmVuZGVyQ29sb3JTd2F0Y2hJdGVtXG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJGYW5jeU1lbnVJdGVtID0gKHNwZWMsIGJhY2tzdGFnZSkgPT4gZ2V0JGcoZmFuY3lNZW51SXRlbXMsIHNwZWMuZmFuY3l0eXBlKS5tYXAocmVuZGVyID0+IHJlbmRlcihzcGVjLCBiYWNrc3RhZ2UpKTtcblxuICAgIGNvbnN0IHJlbmRlck5lc3RlZEl0ZW0gPSAoc3BlYywgaXRlbVJlc3BvbnNlLCBwcm92aWRlcnNCYWNrc3RhZ2UsIHJlbmRlckljb25zID0gdHJ1ZSwgZG93bndhcmRzQ2FyZXQgPSBmYWxzZSkgPT4ge1xuICAgICAgY29uc3QgY2FyZXQgPSBkb3dud2FyZHNDYXJldCA/IHJlbmRlckRvd253YXJkc0NhcmV0KHByb3ZpZGVyc0JhY2tzdGFnZS5pY29ucykgOiByZW5kZXJTdWJtZW51Q2FyZXQocHJvdmlkZXJzQmFja3N0YWdlLmljb25zKTtcbiAgICAgIGNvbnN0IGdldEFwaSA9IGNvbXBvbmVudCA9PiAoe1xuICAgICAgICBpc0VuYWJsZWQ6ICgpID0+ICFEaXNhYmxpbmcuaXNEaXNhYmxlZChjb21wb25lbnQpLFxuICAgICAgICBzZXRFbmFibGVkOiBzdGF0ZSA9PiBEaXNhYmxpbmcuc2V0KGNvbXBvbmVudCwgIXN0YXRlKSxcbiAgICAgICAgc2V0SWNvbkZpbGw6IChpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICBkZXNjZW5kYW50KGNvbXBvbmVudC5lbGVtZW50LCBgc3ZnIHBhdGhbY2xhc3M9XCIkeyBpZCB9XCJdLCByZWN0W2NsYXNzPVwiJHsgaWQgfVwiXWApLmVhY2godW5kZXJsaW5lUGF0aCA9PiB7XG4gICAgICAgICAgICBzZXQkOSh1bmRlcmxpbmVQYXRoLCAnZmlsbCcsIHZhbHVlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzdHJ1Y3R1cmUgPSByZW5kZXJJdGVtU3RydWN0dXJlKHtcbiAgICAgICAgcHJlc2V0czogJ25vcm1hbCcsXG4gICAgICAgIGljb25Db250ZW50OiBzcGVjLmljb24sXG4gICAgICAgIHRleHRDb250ZW50OiBzcGVjLnRleHQsXG4gICAgICAgIGh0bWxDb250ZW50OiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGFyaWFMYWJlbDogc3BlYy50ZXh0LFxuICAgICAgICBjYXJldDogT3B0aW9uYWwuc29tZShjYXJldCksXG4gICAgICAgIGNoZWNrTWFyazogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICBzaG9ydGN1dENvbnRlbnQ6IHNwZWMuc2hvcnRjdXRcbiAgICAgIH0sIHByb3ZpZGVyc0JhY2tzdGFnZSwgcmVuZGVySWNvbnMpO1xuICAgICAgcmV0dXJuIHJlbmRlckNvbW1vbkl0ZW0oe1xuICAgICAgICBkYXRhOiBidWlsZERhdGEoc3BlYyksXG4gICAgICAgIGdldEFwaSxcbiAgICAgICAgZW5hYmxlZDogc3BlYy5lbmFibGVkLFxuICAgICAgICBvbkFjdGlvbjogbm9vcCxcbiAgICAgICAgb25TZXR1cDogc3BlYy5vblNldHVwLFxuICAgICAgICB0cmlnZ2Vyc1N1Ym1lbnU6IHRydWUsXG4gICAgICAgIGl0ZW1CZWhhdmlvdXJzOiBbXVxuICAgICAgfSwgc3RydWN0dXJlLCBpdGVtUmVzcG9uc2UsIHByb3ZpZGVyc0JhY2tzdGFnZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlck5vcm1hbEl0ZW0gPSAoc3BlYywgaXRlbVJlc3BvbnNlLCBwcm92aWRlcnNCYWNrc3RhZ2UsIHJlbmRlckljb25zID0gdHJ1ZSkgPT4ge1xuICAgICAgY29uc3QgZ2V0QXBpID0gY29tcG9uZW50ID0+ICh7XG4gICAgICAgIGlzRW5hYmxlZDogKCkgPT4gIURpc2FibGluZy5pc0Rpc2FibGVkKGNvbXBvbmVudCksXG4gICAgICAgIHNldEVuYWJsZWQ6IHN0YXRlID0+IERpc2FibGluZy5zZXQoY29tcG9uZW50LCAhc3RhdGUpXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0cnVjdHVyZSA9IHJlbmRlckl0ZW1TdHJ1Y3R1cmUoe1xuICAgICAgICBwcmVzZXRzOiAnbm9ybWFsJyxcbiAgICAgICAgaWNvbkNvbnRlbnQ6IHNwZWMuaWNvbixcbiAgICAgICAgdGV4dENvbnRlbnQ6IHNwZWMudGV4dCxcbiAgICAgICAgaHRtbENvbnRlbnQ6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICAgYXJpYUxhYmVsOiBzcGVjLnRleHQsXG4gICAgICAgIGNhcmV0OiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGNoZWNrTWFyazogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICBzaG9ydGN1dENvbnRlbnQ6IHNwZWMuc2hvcnRjdXRcbiAgICAgIH0sIHByb3ZpZGVyc0JhY2tzdGFnZSwgcmVuZGVySWNvbnMpO1xuICAgICAgcmV0dXJuIHJlbmRlckNvbW1vbkl0ZW0oe1xuICAgICAgICBkYXRhOiBidWlsZERhdGEoc3BlYyksXG4gICAgICAgIGdldEFwaSxcbiAgICAgICAgZW5hYmxlZDogc3BlYy5lbmFibGVkLFxuICAgICAgICBvbkFjdGlvbjogc3BlYy5vbkFjdGlvbixcbiAgICAgICAgb25TZXR1cDogc3BlYy5vblNldHVwLFxuICAgICAgICB0cmlnZ2Vyc1N1Ym1lbnU6IGZhbHNlLFxuICAgICAgICBpdGVtQmVoYXZpb3VyczogW11cbiAgICAgIH0sIHN0cnVjdHVyZSwgaXRlbVJlc3BvbnNlLCBwcm92aWRlcnNCYWNrc3RhZ2UpO1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJTZXBhcmF0b3JJdGVtID0gc3BlYyA9PiAoe1xuICAgICAgdHlwZTogJ3NlcGFyYXRvcicsXG4gICAgICBkb206IHtcbiAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgIHNlbGVjdGFibGVDbGFzcyxcbiAgICAgICAgICBncm91cEhlYWRpbmdDbGFzc1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czogc3BlYy50ZXh0Lm1hcCh0ZXh0JDIpLnRvQXJyYXkoKVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVuZGVyVG9nZ2xlTWVudUl0ZW0gPSAoc3BlYywgaXRlbVJlc3BvbnNlLCBwcm92aWRlcnNCYWNrc3RhZ2UsIHJlbmRlckljb25zID0gdHJ1ZSkgPT4ge1xuICAgICAgY29uc3QgZ2V0QXBpID0gY29tcG9uZW50ID0+ICh7XG4gICAgICAgIHNldEFjdGl2ZTogc3RhdGUgPT4ge1xuICAgICAgICAgIFRvZ2dsaW5nLnNldChjb21wb25lbnQsIHN0YXRlKTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNBY3RpdmU6ICgpID0+IFRvZ2dsaW5nLmlzT24oY29tcG9uZW50KSxcbiAgICAgICAgaXNFbmFibGVkOiAoKSA9PiAhRGlzYWJsaW5nLmlzRGlzYWJsZWQoY29tcG9uZW50KSxcbiAgICAgICAgc2V0RW5hYmxlZDogc3RhdGUgPT4gRGlzYWJsaW5nLnNldChjb21wb25lbnQsICFzdGF0ZSlcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RydWN0dXJlID0gcmVuZGVySXRlbVN0cnVjdHVyZSh7XG4gICAgICAgIGljb25Db250ZW50OiBzcGVjLmljb24sXG4gICAgICAgIHRleHRDb250ZW50OiBzcGVjLnRleHQsXG4gICAgICAgIGh0bWxDb250ZW50OiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGFyaWFMYWJlbDogc3BlYy50ZXh0LFxuICAgICAgICBjaGVja01hcms6IE9wdGlvbmFsLnNvbWUocmVuZGVyQ2hlY2ttYXJrKHByb3ZpZGVyc0JhY2tzdGFnZS5pY29ucykpLFxuICAgICAgICBjYXJldDogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICBzaG9ydGN1dENvbnRlbnQ6IHNwZWMuc2hvcnRjdXQsXG4gICAgICAgIHByZXNldHM6ICdub3JtYWwnLFxuICAgICAgICBtZXRhOiBzcGVjLm1ldGFcbiAgICAgIH0sIHByb3ZpZGVyc0JhY2tzdGFnZSwgcmVuZGVySWNvbnMpO1xuICAgICAgcmV0dXJuIGRlZXBNZXJnZShyZW5kZXJDb21tb25JdGVtKHtcbiAgICAgICAgZGF0YTogYnVpbGREYXRhKHNwZWMpLFxuICAgICAgICBlbmFibGVkOiBzcGVjLmVuYWJsZWQsXG4gICAgICAgIGdldEFwaSxcbiAgICAgICAgb25BY3Rpb246IHNwZWMub25BY3Rpb24sXG4gICAgICAgIG9uU2V0dXA6IHNwZWMub25TZXR1cCxcbiAgICAgICAgdHJpZ2dlcnNTdWJtZW51OiBmYWxzZSxcbiAgICAgICAgaXRlbUJlaGF2aW91cnM6IFtdXG4gICAgICB9LCBzdHJ1Y3R1cmUsIGl0ZW1SZXNwb25zZSwgcHJvdmlkZXJzQmFja3N0YWdlKSwge1xuICAgICAgICB0b2dnbGluZzoge1xuICAgICAgICAgIHRvZ2dsZUNsYXNzOiB0aWNrZWRDbGFzcyxcbiAgICAgICAgICB0b2dnbGVPbkV4ZWN1dGU6IGZhbHNlLFxuICAgICAgICAgIHNlbGVjdGVkOiBzcGVjLmFjdGl2ZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgYXV0b2NvbXBsZXRlID0gcmVuZGVyQXV0b2NvbXBsZXRlSXRlbTtcbiAgICBjb25zdCBzZXBhcmF0b3IkMyA9IHJlbmRlclNlcGFyYXRvckl0ZW07XG4gICAgY29uc3Qgbm9ybWFsID0gcmVuZGVyTm9ybWFsSXRlbTtcbiAgICBjb25zdCBuZXN0ZWQgPSByZW5kZXJOZXN0ZWRJdGVtO1xuICAgIGNvbnN0IHRvZ2dsZSQxID0gcmVuZGVyVG9nZ2xlTWVudUl0ZW07XG4gICAgY29uc3QgZmFuY3kgPSByZW5kZXJGYW5jeU1lbnVJdGVtO1xuICAgIGNvbnN0IGNhcmQgPSByZW5kZXJDYXJkTWVudUl0ZW07XG5cbiAgICBjb25zdCBnZXRDb3VwbGVkID0gKGNvbXBvbmVudCwgY291cGxlQ29uZmlnLCBjb3VwbGVTdGF0ZSwgbmFtZSkgPT4gY291cGxlU3RhdGUuZ2V0T3JDcmVhdGUoY29tcG9uZW50LCBjb3VwbGVDb25maWcsIG5hbWUpO1xuICAgIGNvbnN0IGdldEV4aXN0aW5nQ291cGxlZCA9IChjb21wb25lbnQsIGNvdXBsZUNvbmZpZywgY291cGxlU3RhdGUsIG5hbWUpID0+IGNvdXBsZVN0YXRlLmdldEV4aXN0aW5nKGNvbXBvbmVudCwgY291cGxlQ29uZmlnLCBuYW1lKTtcblxuICAgIHZhciBDb3VwbGluZ0FwaXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgZ2V0Q291cGxlZDogZ2V0Q291cGxlZCxcbiAgICAgICAgZ2V0RXhpc3RpbmdDb3VwbGVkOiBnZXRFeGlzdGluZ0NvdXBsZWRcbiAgICB9KTtcblxuICAgIHZhciBDb3VwbGluZ1NjaGVtYSA9IFtyZXF1aXJlZE9mKCdvdGhlcnMnLCBzZXRPZihSZXN1bHQudmFsdWUsIGFueVZhbHVlKCkpKV07XG5cbiAgICBjb25zdCBpbml0JGEgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjb3VwbGVkID0ge307XG4gICAgICBjb25zdCBsb29rdXBDb3VwbGVkID0gKGNvdXBsZUNvbmZpZywgY291cGxlZE5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgYXZhaWxhYmxlID0ga2V5cyhjb3VwbGVDb25maWcub3RoZXJzKTtcbiAgICAgICAgaWYgKGF2YWlsYWJsZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBmaW5kIGFueSBrbm93biBjb3VwbGVkIGNvbXBvbmVudHMnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZ2V0JGcoY291cGxlZCwgY291cGxlZE5hbWUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0T3JDcmVhdGUgPSAoY29tcG9uZW50LCBjb3VwbGVDb25maWcsIG5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIGxvb2t1cENvdXBsZWQoY291cGxlQ29uZmlnLCBuYW1lKS5nZXRPclRodW5rKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBidWlsZGVyID0gZ2V0JGcoY291cGxlQ29uZmlnLm90aGVycywgbmFtZSkuZ2V0T3JEaWUoJ05vIGluZm9ybWF0aW9uIGZvdW5kIGZvciBjb3VwbGVkIGNvbXBvbmVudDogJyArIG5hbWUpO1xuICAgICAgICAgIGNvbnN0IHNwZWMgPSBidWlsZGVyKGNvbXBvbmVudCk7XG4gICAgICAgICAgY29uc3QgYnVpbHQgPSBjb21wb25lbnQuZ2V0U3lzdGVtKCkuYnVpbGQoc3BlYyk7XG4gICAgICAgICAgY291cGxlZFtuYW1lXSA9IGJ1aWx0O1xuICAgICAgICAgIHJldHVybiBidWlsdDtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0RXhpc3RpbmcgPSAoY29tcG9uZW50LCBjb3VwbGVDb25maWcsIG5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIGxvb2t1cENvdXBsZWQoY291cGxlQ29uZmlnLCBuYW1lKS5vclRodW5rKCgpID0+IHtcbiAgICAgICAgICBnZXQkZyhjb3VwbGVDb25maWcub3RoZXJzLCBuYW1lKS5nZXRPckRpZSgnTm8gaW5mb3JtYXRpb24gZm91bmQgZm9yIGNvdXBsZWQgY29tcG9uZW50OiAnICsgbmFtZSk7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVhZFN0YXRlID0gY29uc3RhbnQkMSh7fSk7XG4gICAgICByZXR1cm4gbnUkOCh7XG4gICAgICAgIHJlYWRTdGF0ZSxcbiAgICAgICAgZ2V0RXhpc3RpbmcsXG4gICAgICAgIGdldE9yQ3JlYXRlXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdmFyIENvdXBsaW5nU3RhdGUgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgaW5pdDogaW5pdCRhXG4gICAgfSk7XG5cbiAgICBjb25zdCBDb3VwbGluZyA9IGNyZWF0ZSQ0KHtcbiAgICAgIGZpZWxkczogQ291cGxpbmdTY2hlbWEsXG4gICAgICBuYW1lOiAnY291cGxpbmcnLFxuICAgICAgYXBpczogQ291cGxpbmdBcGlzLFxuICAgICAgc3RhdGU6IENvdXBsaW5nU3RhdGVcbiAgICB9KTtcblxuICAgIGNvbnN0IG51JDMgPSBiYXNlRm4gPT4ge1xuICAgICAgbGV0IGRhdGEgPSBPcHRpb25hbC5ub25lKCk7XG4gICAgICBsZXQgY2FsbGJhY2tzID0gW107XG4gICAgICBjb25zdCBtYXAgPSBmID0+IG51JDMobkNhbGxiYWNrID0+IHtcbiAgICAgICAgZ2V0KGRhdGEgPT4ge1xuICAgICAgICAgIG5DYWxsYmFjayhmKGRhdGEpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGdldCA9IG5DYWxsYmFjayA9PiB7XG4gICAgICAgIGlmIChpc1JlYWR5KCkpIHtcbiAgICAgICAgICBjYWxsKG5DYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2tzLnB1c2gobkNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldCA9IHggPT4ge1xuICAgICAgICBpZiAoIWlzUmVhZHkoKSkge1xuICAgICAgICAgIGRhdGEgPSBPcHRpb25hbC5zb21lKHgpO1xuICAgICAgICAgIHJ1bihjYWxsYmFja3MpO1xuICAgICAgICAgIGNhbGxiYWNrcyA9IFtdO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNSZWFkeSA9ICgpID0+IGRhdGEuaXNTb21lKCk7XG4gICAgICBjb25zdCBydW4gPSBjYnMgPT4ge1xuICAgICAgICBlYWNoJDEoY2JzLCBjYWxsKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjYWxsID0gY2IgPT4ge1xuICAgICAgICBkYXRhLmVhY2goeCA9PiB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjYih4KTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgYmFzZUZuKHNldCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBnZXQsXG4gICAgICAgIG1hcCxcbiAgICAgICAgaXNSZWFkeVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHB1cmUkMSA9IGEgPT4gbnUkMyhjYWxsYmFjayA9PiB7XG4gICAgICBjYWxsYmFjayhhKTtcbiAgICB9KTtcbiAgICBjb25zdCBMYXp5VmFsdWUgPSB7XG4gICAgICBudTogbnUkMyxcbiAgICAgIHB1cmU6IHB1cmUkMVxuICAgIH07XG5cbiAgICBjb25zdCBlcnJvclJlcG9ydGVyID0gZXJyID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9LCAwKTtcbiAgICB9O1xuICAgIGNvbnN0IG1ha2UkNSA9IHJ1biA9PiB7XG4gICAgICBjb25zdCBnZXQgPSBjYWxsYmFjayA9PiB7XG4gICAgICAgIHJ1bigpLnRoZW4oY2FsbGJhY2ssIGVycm9yUmVwb3J0ZXIpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG1hcCA9IGZhYiA9PiB7XG4gICAgICAgIHJldHVybiBtYWtlJDUoKCkgPT4gcnVuKCkudGhlbihmYWIpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBiaW5kID0gYUZ1dHVyZUIgPT4ge1xuICAgICAgICByZXR1cm4gbWFrZSQ1KCgpID0+IHJ1bigpLnRoZW4odiA9PiBhRnV0dXJlQih2KS50b1Byb21pc2UoKSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFub25CaW5kID0gZnV0dXJlQiA9PiB7XG4gICAgICAgIHJldHVybiBtYWtlJDUoKCkgPT4gcnVuKCkudGhlbigoKSA9PiBmdXR1cmVCLnRvUHJvbWlzZSgpKSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdG9MYXp5ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gTGF6eVZhbHVlLm51KGdldCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdG9DYWNoZWQgPSAoKSA9PiB7XG4gICAgICAgIGxldCBjYWNoZSA9IG51bGw7XG4gICAgICAgIHJldHVybiBtYWtlJDUoKCkgPT4ge1xuICAgICAgICAgIGlmIChjYWNoZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY2FjaGUgPSBydW4oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNhY2hlO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCB0b1Byb21pc2UgPSBydW47XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXAsXG4gICAgICAgIGJpbmQsXG4gICAgICAgIGFub25CaW5kLFxuICAgICAgICB0b0xhenksXG4gICAgICAgIHRvQ2FjaGVkLFxuICAgICAgICB0b1Byb21pc2UsXG4gICAgICAgIGdldFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG51JDIgPSBiYXNlRm4gPT4ge1xuICAgICAgcmV0dXJuIG1ha2UkNSgoKSA9PiBuZXcgUHJvbWlzZShiYXNlRm4pKTtcbiAgICB9O1xuICAgIGNvbnN0IHB1cmUgPSBhID0+IHtcbiAgICAgIHJldHVybiBtYWtlJDUoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKGEpKTtcbiAgICB9O1xuICAgIGNvbnN0IEZ1dHVyZSA9IHtcbiAgICAgIG51OiBudSQyLFxuICAgICAgcHVyZVxuICAgIH07XG5cbiAgICBjb25zdCBzdWZmaXggPSBjb25zdGFudCQxKCdzaW5rJyk7XG4gICAgY29uc3QgcGFydFR5cGUkMSA9IGNvbnN0YW50JDEob3B0aW9uYWwoe1xuICAgICAgbmFtZTogc3VmZml4KCksXG4gICAgICBvdmVycmlkZXM6IGNvbnN0YW50JDEoe1xuICAgICAgICBkb206IHsgdGFnOiAnZGl2JyB9LFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbUG9zaXRpb25pbmcuY29uZmlnKHsgdXNlRml4ZWQ6IGFsd2F5cyB9KV0pLFxuICAgICAgICBldmVudHM6IGRlcml2ZSQyKFtcbiAgICAgICAgICBjdXR0ZXIoa2V5ZG93bigpKSxcbiAgICAgICAgICBjdXR0ZXIobW91c2Vkb3duKCkpLFxuICAgICAgICAgIGN1dHRlcihjbGljaygpKVxuICAgICAgICBdKVxuICAgICAgfSlcbiAgICB9KSk7XG5cbiAgICBjb25zdCBnZXRBbmNob3IgPSAoZGV0YWlsLCBjb21wb25lbnQpID0+IHtcbiAgICAgIGNvbnN0IGhvdHNwb3QgPSBkZXRhaWwuZ2V0SG90c3BvdChjb21wb25lbnQpLmdldE9yKGNvbXBvbmVudCk7XG4gICAgICBjb25zdCB0eXBlID0gJ2hvdHNwb3QnO1xuICAgICAgY29uc3Qgb3ZlcnJpZGVzID0gZGV0YWlsLmdldEFuY2hvck92ZXJyaWRlcygpO1xuICAgICAgcmV0dXJuIGRldGFpbC5sYXlvdXRzLmZvbGQoKCkgPT4gKHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgaG90c3BvdCxcbiAgICAgICAgb3ZlcnJpZGVzXG4gICAgICB9KSwgbGF5b3V0cyA9PiAoe1xuICAgICAgICB0eXBlLFxuICAgICAgICBob3RzcG90LFxuICAgICAgICBvdmVycmlkZXMsXG4gICAgICAgIGxheW91dHNcbiAgICAgIH0pKTtcbiAgICB9O1xuICAgIGNvbnN0IGZldGNoID0gKGRldGFpbCwgbWFwRmV0Y2gsIGNvbXBvbmVudCkgPT4ge1xuICAgICAgY29uc3QgZmV0Y2hlciA9IGRldGFpbC5mZXRjaDtcbiAgICAgIHJldHVybiBmZXRjaGVyKGNvbXBvbmVudCkubWFwKG1hcEZldGNoKTtcbiAgICB9O1xuICAgIGNvbnN0IG9wZW5GID0gKGRldGFpbCwgbWFwRmV0Y2gsIGFuY2hvciwgY29tcG9uZW50LCBzYW5kYm94LCBleHRlcm5hbHMsIGhpZ2hsaWdodE9uT3BlbikgPT4ge1xuICAgICAgY29uc3QgZnV0dXJlRGF0YSA9IGZldGNoKGRldGFpbCwgbWFwRmV0Y2gsIGNvbXBvbmVudCk7XG4gICAgICBjb25zdCBnZXRMYXp5U2luayA9IGdldFNpbmsoY29tcG9uZW50LCBkZXRhaWwpO1xuICAgICAgcmV0dXJuIGZ1dHVyZURhdGEubWFwKHRkYXRhID0+IHRkYXRhLmJpbmQoZGF0YSA9PiBPcHRpb25hbC5mcm9tKHRpZXJlZE1lbnUuc2tldGNoKHtcbiAgICAgICAgLi4uZXh0ZXJuYWxzLm1lbnUoKSxcbiAgICAgICAgdWlkOiBnZW5lcmF0ZSQ1KCcnKSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgaGlnaGxpZ2h0T25PcGVuLFxuICAgICAgICBvbk9wZW5NZW51OiAodG1lbnUsIG1lbnUpID0+IHtcbiAgICAgICAgICBjb25zdCBzaW5rID0gZ2V0TGF6eVNpbmsoKS5nZXRPckRpZSgpO1xuICAgICAgICAgIFBvc2l0aW9uaW5nLnBvc2l0aW9uKHNpbmssIG1lbnUsIHsgYW5jaG9yIH0pO1xuICAgICAgICAgIFNhbmRib3hpbmcuZGVjbG9hayhzYW5kYm94KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25PcGVuU3VibWVudTogKHRtZW51LCBpdGVtLCBzdWJtZW51KSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2luayA9IGdldExhenlTaW5rKCkuZ2V0T3JEaWUoKTtcbiAgICAgICAgICBQb3NpdGlvbmluZy5wb3NpdGlvbihzaW5rLCBzdWJtZW51LCB7XG4gICAgICAgICAgICBhbmNob3I6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Ym1lbnUnLFxuICAgICAgICAgICAgICBpdGVtXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgU2FuZGJveGluZy5kZWNsb2FrKHNhbmRib3gpO1xuICAgICAgICB9LFxuICAgICAgICBvblJlcG9zaXRpb25NZW51OiAodG1lbnUsIHByaW1hcnlNZW51LCBzdWJtZW51VHJpZ2dlcnMpID0+IHtcbiAgICAgICAgICBjb25zdCBzaW5rID0gZ2V0TGF6eVNpbmsoKS5nZXRPckRpZSgpO1xuICAgICAgICAgIFBvc2l0aW9uaW5nLnBvc2l0aW9uKHNpbmssIHByaW1hcnlNZW51LCB7IGFuY2hvciB9KTtcbiAgICAgICAgICBlYWNoJDEoc3VibWVudVRyaWdnZXJzLCBzdCA9PiB7XG4gICAgICAgICAgICBQb3NpdGlvbmluZy5wb3NpdGlvbihzaW5rLCBzdC50cmlnZ2VyZWRNZW51LCB7XG4gICAgICAgICAgICAgIGFuY2hvcjoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdzdWJtZW51JyxcbiAgICAgICAgICAgICAgICBpdGVtOiBzdC50cmlnZ2VyaW5nSXRlbVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Fc2NhcGU6ICgpID0+IHtcbiAgICAgICAgICBGb2N1c2luZy5mb2N1cyhjb21wb25lbnQpO1xuICAgICAgICAgIFNhbmRib3hpbmcuY2xvc2Uoc2FuZGJveCk7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pKSkpO1xuICAgIH07XG4gICAgY29uc3Qgb3BlbiA9IChkZXRhaWwsIG1hcEZldGNoLCBob3RzcG90LCBzYW5kYm94LCBleHRlcm5hbHMsIG9uT3BlblN5bmMsIGhpZ2hsaWdodE9uT3BlbikgPT4ge1xuICAgICAgY29uc3QgYW5jaG9yID0gZ2V0QW5jaG9yKGRldGFpbCwgaG90c3BvdCk7XG4gICAgICBjb25zdCBwcm9jZXNzZWQgPSBvcGVuRihkZXRhaWwsIG1hcEZldGNoLCBhbmNob3IsIGhvdHNwb3QsIHNhbmRib3gsIGV4dGVybmFscywgaGlnaGxpZ2h0T25PcGVuKTtcbiAgICAgIHJldHVybiBwcm9jZXNzZWQubWFwKHRkYXRhID0+IHtcbiAgICAgICAgdGRhdGEuZm9sZCgoKSA9PiB7XG4gICAgICAgICAgaWYgKFNhbmRib3hpbmcuaXNPcGVuKHNhbmRib3gpKSB7XG4gICAgICAgICAgICBTYW5kYm94aW5nLmNsb3NlKHNhbmRib3gpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgZGF0YSA9PiB7XG4gICAgICAgICAgU2FuZGJveGluZy5jbG9hayhzYW5kYm94KTtcbiAgICAgICAgICBTYW5kYm94aW5nLm9wZW4oc2FuZGJveCwgZGF0YSk7XG4gICAgICAgICAgb25PcGVuU3luYyhzYW5kYm94KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzYW5kYm94O1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBjbG9zZSA9IChkZXRhaWwsIG1hcEZldGNoLCBjb21wb25lbnQsIHNhbmRib3gsIF9leHRlcm5hbHMsIF9vbk9wZW5TeW5jLCBfaGlnaGxpZ2h0T25PcGVuKSA9PiB7XG4gICAgICBTYW5kYm94aW5nLmNsb3NlKHNhbmRib3gpO1xuICAgICAgcmV0dXJuIEZ1dHVyZS5wdXJlKHNhbmRib3gpO1xuICAgIH07XG4gICAgY29uc3QgdG9nZ2xlUG9wdXAgPSAoZGV0YWlsLCBtYXBGZXRjaCwgaG90c3BvdCwgZXh0ZXJuYWxzLCBvbk9wZW5TeW5jLCBoaWdobGlnaHRPbk9wZW4pID0+IHtcbiAgICAgIGNvbnN0IHNhbmRib3ggPSBDb3VwbGluZy5nZXRDb3VwbGVkKGhvdHNwb3QsICdzYW5kYm94Jyk7XG4gICAgICBjb25zdCBzaG93aW5nID0gU2FuZGJveGluZy5pc09wZW4oc2FuZGJveCk7XG4gICAgICBjb25zdCBhY3Rpb24gPSBzaG93aW5nID8gY2xvc2UgOiBvcGVuO1xuICAgICAgcmV0dXJuIGFjdGlvbihkZXRhaWwsIG1hcEZldGNoLCBob3RzcG90LCBzYW5kYm94LCBleHRlcm5hbHMsIG9uT3BlblN5bmMsIGhpZ2hsaWdodE9uT3Blbik7XG4gICAgfTtcbiAgICBjb25zdCBtYXRjaFdpZHRoID0gKGhvdHNwb3QsIGNvbnRhaW5lciwgdXNlTWluV2lkdGgpID0+IHtcbiAgICAgIGNvbnN0IG1lbnUgPSBDb21wb3NpbmcuZ2V0Q3VycmVudChjb250YWluZXIpLmdldE9yKGNvbnRhaW5lcik7XG4gICAgICBjb25zdCBidXR0b25XaWR0aCA9IGdldCRjKGhvdHNwb3QuZWxlbWVudCk7XG4gICAgICBpZiAodXNlTWluV2lkdGgpIHtcbiAgICAgICAgc2V0JDgobWVudS5lbGVtZW50LCAnbWluLXdpZHRoJywgYnV0dG9uV2lkdGggKyAncHgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldCQ3KG1lbnUuZWxlbWVudCwgYnV0dG9uV2lkdGgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ2V0U2luayA9IChhbnlJblN5c3RlbSwgc2lua0RldGFpbCkgPT4gYW55SW5TeXN0ZW0uZ2V0U3lzdGVtKCkuZ2V0QnlVaWQoc2lua0RldGFpbC51aWQgKyAnLScgKyBzdWZmaXgoKSkubWFwKGludGVybmFsU2luayA9PiAoKSA9PiBSZXN1bHQudmFsdWUoaW50ZXJuYWxTaW5rKSkuZ2V0T3JUaHVuaygoKSA9PiBzaW5rRGV0YWlsLmxhenlTaW5rLmZvbGQoKCkgPT4gKCkgPT4gUmVzdWx0LmVycm9yKG5ldyBFcnJvcignTm8gaW50ZXJuYWwgc2luayBpcyBzcGVjaWZpZWQsIG5vciBjb3VsZCBhbiBleHRlcm5hbCBzaW5rIGJlIGZvdW5kJykpLCBsYXp5U2lua0ZuID0+ICgpID0+IGxhenlTaW5rRm4oYW55SW5TeXN0ZW0pKSk7XG4gICAgY29uc3QgZG9SZXBvc2l0aW9uTWVudXMgPSBzYW5kYm94ID0+IHtcbiAgICAgIFNhbmRib3hpbmcuZ2V0U3RhdGUoc2FuZGJveCkuZWFjaCh0bWVudSA9PiB7XG4gICAgICAgIHRpZXJlZE1lbnUucmVwb3NpdGlvbk1lbnVzKHRtZW51KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbWFrZVNhbmRib3gkMSA9IChkZXRhaWwsIGhvdHNwb3QsIGV4dHJhcykgPT4ge1xuICAgICAgY29uc3QgYXJpYUNvbnRyb2xzID0gbWFuYWdlcigpO1xuICAgICAgY29uc3Qgb25PcGVuID0gKGNvbXBvbmVudCwgbWVudSkgPT4ge1xuICAgICAgICBjb25zdCBhbmNob3IgPSBnZXRBbmNob3IoZGV0YWlsLCBob3RzcG90KTtcbiAgICAgICAgYXJpYUNvbnRyb2xzLmxpbmsoaG90c3BvdC5lbGVtZW50KTtcbiAgICAgICAgaWYgKGRldGFpbC5tYXRjaFdpZHRoKSB7XG4gICAgICAgICAgbWF0Y2hXaWR0aChhbmNob3IuaG90c3BvdCwgbWVudSwgZGV0YWlsLnVzZU1pbldpZHRoKTtcbiAgICAgICAgfVxuICAgICAgICBkZXRhaWwub25PcGVuKGFuY2hvciwgY29tcG9uZW50LCBtZW51KTtcbiAgICAgICAgaWYgKGV4dHJhcyAhPT0gdW5kZWZpbmVkICYmIGV4dHJhcy5vbk9wZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGV4dHJhcy5vbk9wZW4oY29tcG9uZW50LCBtZW51KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG9uQ2xvc2UgPSAoY29tcG9uZW50LCBtZW51KSA9PiB7XG4gICAgICAgIGFyaWFDb250cm9scy51bmxpbmsoaG90c3BvdC5lbGVtZW50KTtcbiAgICAgICAgaWYgKGV4dHJhcyAhPT0gdW5kZWZpbmVkICYmIGV4dHJhcy5vbkNsb3NlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleHRyYXMub25DbG9zZShjb21wb25lbnQsIG1lbnUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgbGF6eVNpbmsgPSBnZXRTaW5rKGhvdHNwb3QsIGRldGFpbCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IGRldGFpbC5zYW5kYm94Q2xhc3NlcyxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICBpZDogYXJpYUNvbnRyb2xzLmlkLFxuICAgICAgICAgICAgcm9sZTogJ2xpc3Rib3gnXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBiZWhhdmlvdXJzOiBTa2V0Y2hCZWhhdmlvdXJzLmF1Z21lbnQoZGV0YWlsLnNhbmRib3hCZWhhdmlvdXJzLCBbXG4gICAgICAgICAgUmVwcmVzZW50aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBzdG9yZToge1xuICAgICAgICAgICAgICBtb2RlOiAnbWVtb3J5JyxcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiBob3RzcG90XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgU2FuZGJveGluZy5jb25maWcoe1xuICAgICAgICAgICAgb25PcGVuLFxuICAgICAgICAgICAgb25DbG9zZSxcbiAgICAgICAgICAgIGlzUGFydE9mOiAoY29udGFpbmVyLCBkYXRhLCBxdWVyeUVsZW0pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGlzUGFydE9mJDEoZGF0YSwgcXVlcnlFbGVtKSB8fCBpc1BhcnRPZiQxKGhvdHNwb3QsIHF1ZXJ5RWxlbSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0QXR0YWNoUG9pbnQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGxhenlTaW5rKCkuZ2V0T3JEaWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBDb21wb3NpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIGZpbmQ6IHNhbmRib3ggPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gU2FuZGJveGluZy5nZXRTdGF0ZShzYW5kYm94KS5iaW5kKG1lbnUgPT4gQ29tcG9zaW5nLmdldEN1cnJlbnQobWVudSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIFJlY2VpdmluZy5jb25maWcoe1xuICAgICAgICAgICAgY2hhbm5lbHM6IHtcbiAgICAgICAgICAgICAgLi4ucmVjZWl2aW5nQ2hhbm5lbCQxKHsgaXNFeHRyYVBhcnQ6IG5ldmVyIH0pLFxuICAgICAgICAgICAgICAuLi5yZWNlaXZpbmdDaGFubmVsKHsgZG9SZXBvc2l0aW9uOiBkb1JlcG9zaXRpb25NZW51cyB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgcmVwb3NpdGlvbk1lbnVzID0gY29tcCA9PiB7XG4gICAgICBjb25zdCBzYW5kYm94ID0gQ291cGxpbmcuZ2V0Q291cGxlZChjb21wLCAnc2FuZGJveCcpO1xuICAgICAgZG9SZXBvc2l0aW9uTWVudXMoc2FuZGJveCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNhbmRib3hGaWVsZHMgPSAoKSA9PiBbXG4gICAgICBkZWZhdWx0ZWQoJ3NhbmRib3hDbGFzc2VzJywgW10pLFxuICAgICAgU2tldGNoQmVoYXZpb3Vycy5maWVsZCgnc2FuZGJveEJlaGF2aW91cnMnLCBbXG4gICAgICAgIENvbXBvc2luZyxcbiAgICAgICAgUmVjZWl2aW5nLFxuICAgICAgICBTYW5kYm94aW5nLFxuICAgICAgICBSZXByZXNlbnRpbmdcbiAgICAgIF0pXG4gICAgXTtcblxuICAgIGNvbnN0IHNjaGVtYSRrID0gY29uc3RhbnQkMShbXG4gICAgICByZXF1aXJlZCQxKCdkb20nKSxcbiAgICAgIHJlcXVpcmVkJDEoJ2ZldGNoJyksXG4gICAgICBvbkhhbmRsZXIoJ29uT3BlbicpLFxuICAgICAgb25LZXlib2FyZEhhbmRsZXIoJ29uRXhlY3V0ZScpLFxuICAgICAgZGVmYXVsdGVkKCdnZXRIb3RzcG90JywgT3B0aW9uYWwuc29tZSksXG4gICAgICBkZWZhdWx0ZWQoJ2dldEFuY2hvck92ZXJyaWRlcycsIGNvbnN0YW50JDEoe30pKSxcbiAgICAgIHNjaGVtYSR5KCksXG4gICAgICBmaWVsZCgnZHJvcGRvd25CZWhhdmlvdXJzJywgW1xuICAgICAgICBUb2dnbGluZyxcbiAgICAgICAgQ291cGxpbmcsXG4gICAgICAgIEtleWluZyxcbiAgICAgICAgRm9jdXNpbmdcbiAgICAgIF0pLFxuICAgICAgcmVxdWlyZWQkMSgndG9nZ2xlQ2xhc3MnKSxcbiAgICAgIGRlZmF1bHRlZCgnZXZlbnRPcmRlcicsIHt9KSxcbiAgICAgIG9wdGlvbiQzKCdsYXp5U2luaycpLFxuICAgICAgZGVmYXVsdGVkKCdtYXRjaFdpZHRoJywgZmFsc2UpLFxuICAgICAgZGVmYXVsdGVkKCd1c2VNaW5XaWR0aCcsIGZhbHNlKSxcbiAgICAgIG9wdGlvbiQzKCdyb2xlJylcbiAgICBdLmNvbmNhdChzYW5kYm94RmllbGRzKCkpKTtcbiAgICBjb25zdCBwYXJ0cyRlID0gY29uc3RhbnQkMShbXG4gICAgICBleHRlcm5hbCh7XG4gICAgICAgIHNjaGVtYTogW1xuICAgICAgICAgIHRpZXJlZE1lbnVNYXJrZXJzKCksXG4gICAgICAgICAgZGVmYXVsdGVkKCdmYWtlRm9jdXMnLCBmYWxzZSlcbiAgICAgICAgXSxcbiAgICAgICAgbmFtZTogJ21lbnUnLFxuICAgICAgICBkZWZhdWx0czogZGV0YWlsID0+IHtcbiAgICAgICAgICByZXR1cm4geyBvbkV4ZWN1dGU6IGRldGFpbC5vbkV4ZWN1dGUgfTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBwYXJ0VHlwZSQxKClcbiAgICBdKTtcblxuICAgIGNvbnN0IGZhY3RvcnkkayA9IChkZXRhaWwsIGNvbXBvbmVudHMsIF9zcGVjLCBleHRlcm5hbHMpID0+IHtcbiAgICAgIGNvbnN0IGxvb2t1cEF0dHIgPSBhdHRyID0+IGdldCRnKGRldGFpbC5kb20sICdhdHRyaWJ1dGVzJykuYmluZChhdHRycyA9PiBnZXQkZyhhdHRycywgYXR0cikpO1xuICAgICAgY29uc3Qgc3dpdGNoVG9NZW51ID0gc2FuZGJveCA9PiB7XG4gICAgICAgIFNhbmRib3hpbmcuZ2V0U3RhdGUoc2FuZGJveCkuZWFjaCh0bWVudSA9PiB7XG4gICAgICAgICAgdGllcmVkTWVudS5oaWdobGlnaHRQcmltYXJ5KHRtZW51KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdG9nZ2xlUG9wdXAkMSA9IChkcm9wZG93bkNvbXAsIG9uT3BlblN5bmMsIGhpZ2hsaWdodE9uT3BlbikgPT4ge1xuICAgICAgICByZXR1cm4gdG9nZ2xlUG9wdXAoZGV0YWlsLCBpZGVudGl0eSwgZHJvcGRvd25Db21wLCBleHRlcm5hbHMsIG9uT3BlblN5bmMsIGhpZ2hsaWdodE9uT3Blbik7XG4gICAgICB9O1xuICAgICAgY29uc3QgYWN0aW9uID0gY29tcG9uZW50ID0+IHtcbiAgICAgICAgY29uc3Qgb25PcGVuU3luYyA9IHN3aXRjaFRvTWVudTtcbiAgICAgICAgdG9nZ2xlUG9wdXAkMShjb21wb25lbnQsIG9uT3BlblN5bmMsIEhpZ2hsaWdodE9uT3Blbi5IaWdobGlnaHRNZW51QW5kSXRlbSkuZ2V0KG5vb3ApO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFwaXMgPSB7XG4gICAgICAgIGV4cGFuZDogY29tcCA9PiB7XG4gICAgICAgICAgaWYgKCFUb2dnbGluZy5pc09uKGNvbXApKSB7XG4gICAgICAgICAgICB0b2dnbGVQb3B1cCQxKGNvbXAsIG5vb3AsIEhpZ2hsaWdodE9uT3Blbi5IaWdobGlnaHROb25lKS5nZXQobm9vcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvcGVuOiBjb21wID0+IHtcbiAgICAgICAgICBpZiAoIVRvZ2dsaW5nLmlzT24oY29tcCkpIHtcbiAgICAgICAgICAgIHRvZ2dsZVBvcHVwJDEoY29tcCwgbm9vcCwgSGlnaGxpZ2h0T25PcGVuLkhpZ2hsaWdodE1lbnVBbmRJdGVtKS5nZXQobm9vcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZWZldGNoOiBjb21wID0+IHtcbiAgICAgICAgICBjb25zdCBvcHRTYW5kYm94ID0gQ291cGxpbmcuZ2V0RXhpc3RpbmdDb3VwbGVkKGNvbXAsICdzYW5kYm94Jyk7XG4gICAgICAgICAgcmV0dXJuIG9wdFNhbmRib3guZm9sZCgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdG9nZ2xlUG9wdXAkMShjb21wLCBub29wLCBIaWdobGlnaHRPbk9wZW4uSGlnaGxpZ2h0TWVudUFuZEl0ZW0pLm1hcChub29wKTtcbiAgICAgICAgICB9LCBzYW5kYm94Q29tcCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gb3BlbihkZXRhaWwsIGlkZW50aXR5LCBjb21wLCBzYW5kYm94Q29tcCwgZXh0ZXJuYWxzLCBub29wLCBIaWdobGlnaHRPbk9wZW4uSGlnaGxpZ2h0TWVudUFuZEl0ZW0pLm1hcChub29wKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNPcGVuOiBUb2dnbGluZy5pc09uLFxuICAgICAgICBjbG9zZTogY29tcCA9PiB7XG4gICAgICAgICAgaWYgKFRvZ2dsaW5nLmlzT24oY29tcCkpIHtcbiAgICAgICAgICAgIHRvZ2dsZVBvcHVwJDEoY29tcCwgbm9vcCwgSGlnaGxpZ2h0T25PcGVuLkhpZ2hsaWdodE1lbnVBbmRJdGVtKS5nZXQobm9vcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZXBvc2l0aW9uTWVudXM6IGNvbXAgPT4ge1xuICAgICAgICAgIGlmIChUb2dnbGluZy5pc09uKGNvbXApKSB7XG4gICAgICAgICAgICByZXBvc2l0aW9uTWVudXMoY29tcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgdHJpZ2dlckV4ZWN1dGUgPSAoY29tcCwgX3NlKSA9PiB7XG4gICAgICAgIGVtaXRFeGVjdXRlKGNvbXApO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1aWQ6IGRldGFpbC51aWQsXG4gICAgICAgIGRvbTogZGV0YWlsLmRvbSxcbiAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgYmVoYXZpb3VyczogYXVnbWVudChkZXRhaWwuZHJvcGRvd25CZWhhdmlvdXJzLCBbXG4gICAgICAgICAgVG9nZ2xpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzOiBkZXRhaWwudG9nZ2xlQ2xhc3MsXG4gICAgICAgICAgICBhcmlhOiB7IG1vZGU6ICdleHBhbmRlZCcgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIENvdXBsaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBvdGhlcnM6IHtcbiAgICAgICAgICAgICAgc2FuZGJveDogaG90c3BvdCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VTYW5kYm94JDEoZGV0YWlsLCBob3RzcG90LCB7XG4gICAgICAgICAgICAgICAgICBvbk9wZW46ICgpID0+IFRvZ2dsaW5nLm9uKGhvdHNwb3QpLFxuICAgICAgICAgICAgICAgICAgb25DbG9zZTogKCkgPT4gVG9nZ2xpbmcub2ZmKGhvdHNwb3QpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBLZXlpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIG1vZGU6ICdzcGVjaWFsJyxcbiAgICAgICAgICAgIG9uU3BhY2U6IHRyaWdnZXJFeGVjdXRlLFxuICAgICAgICAgICAgb25FbnRlcjogdHJpZ2dlckV4ZWN1dGUsXG4gICAgICAgICAgICBvbkRvd246IChjb21wLCBfc2UpID0+IHtcbiAgICAgICAgICAgICAgaWYgKERyb3Bkb3duLmlzT3Blbihjb21wKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNhbmRib3ggPSBDb3VwbGluZy5nZXRDb3VwbGVkKGNvbXAsICdzYW5kYm94Jyk7XG4gICAgICAgICAgICAgICAgc3dpdGNoVG9NZW51KHNhbmRib3gpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIERyb3Bkb3duLm9wZW4oY29tcCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25Fc2NhcGU6IChjb21wLCBfc2UpID0+IHtcbiAgICAgICAgICAgICAgaWYgKERyb3Bkb3duLmlzT3Blbihjb21wKSkge1xuICAgICAgICAgICAgICAgIERyb3Bkb3duLmNsb3NlKGNvbXApO1xuICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHRydWUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBGb2N1c2luZy5jb25maWcoe30pXG4gICAgICAgIF0pLFxuICAgICAgICBldmVudHM6IGV2ZW50cyRhKE9wdGlvbmFsLnNvbWUoYWN0aW9uKSksXG4gICAgICAgIGV2ZW50T3JkZXI6IHtcbiAgICAgICAgICAuLi5kZXRhaWwuZXZlbnRPcmRlcixcbiAgICAgICAgICBbZXhlY3V0ZSQ1KCldOiBbXG4gICAgICAgICAgICAnZGlzYWJsaW5nJyxcbiAgICAgICAgICAgICd0b2dnbGluZycsXG4gICAgICAgICAgICAnYWxsb3kuYmFzZS5iZWhhdmlvdXInXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBhcGlzLFxuICAgICAgICBkb21Nb2RpZmljYXRpb246IHtcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAnYXJpYS1oYXNwb3B1cCc6ICd0cnVlJyxcbiAgICAgICAgICAgIC4uLmRldGFpbC5yb2xlLmZvbGQoKCkgPT4gKHt9KSwgcm9sZSA9PiAoeyByb2xlIH0pKSxcbiAgICAgICAgICAgIC4uLmRldGFpbC5kb20udGFnID09PSAnYnV0dG9uJyA/IHsgdHlwZTogbG9va3VwQXR0cigndHlwZScpLmdldE9yKCdidXR0b24nKSB9IDoge31cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBEcm9wZG93biA9IGNvbXBvc2l0ZSh7XG4gICAgICBuYW1lOiAnRHJvcGRvd24nLFxuICAgICAgY29uZmlnRmllbGRzOiBzY2hlbWEkaygpLFxuICAgICAgcGFydEZpZWxkczogcGFydHMkZSgpLFxuICAgICAgZmFjdG9yeTogZmFjdG9yeSRrLFxuICAgICAgYXBpczoge1xuICAgICAgICBvcGVuOiAoYXBpcywgY29tcCkgPT4gYXBpcy5vcGVuKGNvbXApLFxuICAgICAgICByZWZldGNoOiAoYXBpcywgY29tcCkgPT4gYXBpcy5yZWZldGNoKGNvbXApLFxuICAgICAgICBleHBhbmQ6IChhcGlzLCBjb21wKSA9PiBhcGlzLmV4cGFuZChjb21wKSxcbiAgICAgICAgY2xvc2U6IChhcGlzLCBjb21wKSA9PiBhcGlzLmNsb3NlKGNvbXApLFxuICAgICAgICBpc09wZW46IChhcGlzLCBjb21wKSA9PiBhcGlzLmlzT3Blbihjb21wKSxcbiAgICAgICAgcmVwb3NpdGlvbk1lbnVzOiAoYXBpcywgY29tcCkgPT4gYXBpcy5yZXBvc2l0aW9uTWVudXMoY29tcClcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGlkZW50aWZ5TWVudUxheW91dCA9IHNlYXJjaE1vZGUgPT4ge1xuICAgICAgc3dpdGNoIChzZWFyY2hNb2RlLnNlYXJjaE1vZGUpIHtcbiAgICAgIGNhc2UgJ25vLXNlYXJjaCc6IHtcbiAgICAgICAgICByZXR1cm4geyBtZW51VHlwZTogJ25vcm1hbCcgfTtcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtZW51VHlwZTogJ3NlYXJjaGFibGUnLFxuICAgICAgICAgICAgc2VhcmNoTW9kZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZVJlZmV0Y2hUcmlnZ2VyID0gb3JpZ2luYWxTYW5kYm94Q29tcCA9PiB7XG4gICAgICBjb25zdCBkcm9wZG93biA9IFJlcHJlc2VudGluZy5nZXRWYWx1ZShvcmlnaW5hbFNhbmRib3hDb21wKTtcbiAgICAgIGNvbnN0IG9wdFNlYXJjaGVyU3RhdGUgPSBmaW5kV2l0aGluU2FuZGJveChvcmlnaW5hbFNhbmRib3hDb21wKS5tYXAoc2F2ZVN0YXRlKTtcbiAgICAgIERyb3Bkb3duLnJlZmV0Y2goZHJvcGRvd24pLmdldCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1NhbmRib3hDb21wID0gQ291cGxpbmcuZ2V0Q291cGxlZChkcm9wZG93biwgJ3NhbmRib3gnKTtcbiAgICAgICAgb3B0U2VhcmNoZXJTdGF0ZS5lYWNoKHNlYXJjaGVyU3RhdGUgPT4gZmluZFdpdGhpblNhbmRib3gobmV3U2FuZGJveENvbXApLmVhY2goaW5wdXRDb21wID0+IHJlc3RvcmVTdGF0ZShpbnB1dENvbXAsIHNlYXJjaGVyU3RhdGUpKSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZVJlZGlyZWN0VG9NZW51SXRlbSA9IChzYW5kYm94Q29tcCwgc2UpID0+IHtcbiAgICAgIGdldEFjdGl2ZU1lbnVJdGVtRnJvbShzYW5kYm94Q29tcCkuZWFjaChhY3RpdmVJdGVtID0+IHtcbiAgICAgICAgcmV0YXJnZXRBbmREaXNwYXRjaFdpdGgoc2FuZGJveENvbXAsIGFjdGl2ZUl0ZW0uZWxlbWVudCwgc2UuZXZlbnQuZXZlbnRUeXBlLCBzZS5ldmVudC5pbnRlcmFjdGlvbkV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0QWN0aXZlTWVudUl0ZW1Gcm9tID0gc2FuZGJveENvbXAgPT4ge1xuICAgICAgcmV0dXJuIFNhbmRib3hpbmcuZ2V0U3RhdGUoc2FuZGJveENvbXApLmJpbmQoSGlnaGxpZ2h0aW5nLmdldEhpZ2hsaWdodGVkKS5iaW5kKEhpZ2hsaWdodGluZy5nZXRIaWdobGlnaHRlZCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRTZWFyY2hSZXN1bHRzID0gYWN0aXZlTWVudUNvbXAgPT4ge1xuICAgICAgcmV0dXJuIGhhcyhhY3RpdmVNZW51Q29tcC5lbGVtZW50LCBzZWFyY2hSZXN1bHRzQ2xhc3MpID8gT3B0aW9uYWwuc29tZShhY3RpdmVNZW51Q29tcC5lbGVtZW50KSA6IGRlc2NlbmRhbnQoYWN0aXZlTWVudUNvbXAuZWxlbWVudCwgJy4nICsgc2VhcmNoUmVzdWx0c0NsYXNzKTtcbiAgICB9O1xuICAgIGNvbnN0IHVwZGF0ZUFyaWFPbkhpZ2hsaWdodCA9ICh0bWVudUNvbXAsIG1lbnVDb21wLCBpdGVtQ29tcCkgPT4ge1xuICAgICAgZmluZFdpdGhpbk1lbnUodG1lbnVDb21wKS5lYWNoKGlucHV0Q29tcCA9PiB7XG4gICAgICAgIHNldEFjdGl2ZURlc2NlbmRhbnQoaW5wdXRDb21wLCBpdGVtQ29tcCk7XG4gICAgICAgIGNvbnN0IG9wdEFjdGl2ZVJlc3VsdHMgPSBnZXRTZWFyY2hSZXN1bHRzKG1lbnVDb21wKTtcbiAgICAgICAgb3B0QWN0aXZlUmVzdWx0cy5lYWNoKHJlc3VsdHNFbGVtID0+IHtcbiAgICAgICAgICBnZXRPcHQocmVzdWx0c0VsZW0sICdpZCcpLmVhY2goY29udHJvbGxlZElkID0+IHNldCQ5KGlucHV0Q29tcC5lbGVtZW50LCAnYXJpYS1jb250cm9scycsIGNvbnRyb2xsZWRJZCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgc2V0JDkoaXRlbUNvbXAuZWxlbWVudCwgJ2FyaWEtc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgIH07XG4gICAgY29uc3QgdXBkYXRlQXJpYU9uRGVoaWdobGlnaHQgPSAodG1lbnVDb21wLCBtZW51Q29tcCwgaXRlbUNvbXApID0+IHtcbiAgICAgIHNldCQ5KGl0ZW1Db21wLmVsZW1lbnQsICdhcmlhLXNlbGVjdGVkJywgJ2ZhbHNlJyk7XG4gICAgfTtcbiAgICBjb25zdCBmb2N1c1NlYXJjaEZpZWxkID0gdG1lbnVDb21wID0+IHtcbiAgICAgIGZpbmRXaXRoaW5NZW51KHRtZW51Q29tcCkuZWFjaChzZWFyY2hlckNvbXAgPT4gRm9jdXNpbmcuZm9jdXMoc2VhcmNoZXJDb21wKSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRTZWFyY2hQYXR0ZXJuID0gZHJvcGRvd25Db21wID0+IHtcbiAgICAgIGNvbnN0IG9wdFNhbmRib3hDb21wID0gQ291cGxpbmcuZ2V0RXhpc3RpbmdDb3VwbGVkKGRyb3Bkb3duQ29tcCwgJ3NhbmRib3gnKTtcbiAgICAgIHJldHVybiBvcHRTYW5kYm94Q29tcC5iaW5kKGZpbmRXaXRoaW5TYW5kYm94KS5tYXAoc2F2ZVN0YXRlKS5tYXAoc3RhdGUgPT4gc3RhdGUuZmV0Y2hQYXR0ZXJuKS5nZXRPcignJyk7XG4gICAgfTtcblxuICAgIHZhciBGb2N1c01vZGU7XG4gICAgKGZ1bmN0aW9uIChGb2N1c01vZGUpIHtcbiAgICAgIEZvY3VzTW9kZVtGb2N1c01vZGVbJ0NvbnRlbnRGb2N1cyddID0gMF0gPSAnQ29udGVudEZvY3VzJztcbiAgICAgIEZvY3VzTW9kZVtGb2N1c01vZGVbJ1VpRm9jdXMnXSA9IDFdID0gJ1VpRm9jdXMnO1xuICAgIH0oRm9jdXNNb2RlIHx8IChGb2N1c01vZGUgPSB7fSkpKTtcbiAgICBjb25zdCBjcmVhdGVNZW51SXRlbUZyb21CcmlkZ2UgPSAoaXRlbSwgaXRlbVJlc3BvbnNlLCBiYWNrc3RhZ2UsIG1lbnVIYXNJY29ucywgaXNIb3Jpem9udGFsTWVudSkgPT4ge1xuICAgICAgY29uc3QgcHJvdmlkZXJzQmFja3N0YWdlID0gYmFja3N0YWdlLnNoYXJlZC5wcm92aWRlcnM7XG4gICAgICBjb25zdCBwYXJzZUZvckhvcml6b250YWxNZW51ID0gbWVudWl0ZW0gPT4gIWlzSG9yaXpvbnRhbE1lbnUgPyBtZW51aXRlbSA6IHtcbiAgICAgICAgLi4ubWVudWl0ZW0sXG4gICAgICAgIHNob3J0Y3V0OiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGljb246IG1lbnVpdGVtLnRleHQuaXNTb21lKCkgPyBPcHRpb25hbC5ub25lKCkgOiBtZW51aXRlbS5pY29uXG4gICAgICB9O1xuICAgICAgc3dpdGNoIChpdGVtLnR5cGUpIHtcbiAgICAgIGNhc2UgJ21lbnVpdGVtJzpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lbnVJdGVtKGl0ZW0pLmZvbGQoaGFuZGxlRXJyb3IsIGQgPT4gT3B0aW9uYWwuc29tZShub3JtYWwocGFyc2VGb3JIb3Jpem9udGFsTWVudShkKSwgaXRlbVJlc3BvbnNlLCBwcm92aWRlcnNCYWNrc3RhZ2UsIG1lbnVIYXNJY29ucykpKTtcbiAgICAgIGNhc2UgJ25lc3RlZG1lbnVpdGVtJzpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU5lc3RlZE1lbnVJdGVtKGl0ZW0pLmZvbGQoaGFuZGxlRXJyb3IsIGQgPT4gT3B0aW9uYWwuc29tZShuZXN0ZWQocGFyc2VGb3JIb3Jpem9udGFsTWVudShkKSwgaXRlbVJlc3BvbnNlLCBwcm92aWRlcnNCYWNrc3RhZ2UsIG1lbnVIYXNJY29ucywgaXNIb3Jpem9udGFsTWVudSkpKTtcbiAgICAgIGNhc2UgJ3RvZ2dsZW1lbnVpdGVtJzpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVRvZ2dsZU1lbnVJdGVtKGl0ZW0pLmZvbGQoaGFuZGxlRXJyb3IsIGQgPT4gT3B0aW9uYWwuc29tZSh0b2dnbGUkMShwYXJzZUZvckhvcml6b250YWxNZW51KGQpLCBpdGVtUmVzcG9uc2UsIHByb3ZpZGVyc0JhY2tzdGFnZSwgbWVudUhhc0ljb25zKSkpO1xuICAgICAgY2FzZSAnc2VwYXJhdG9yJzpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVNlcGFyYXRvck1lbnVJdGVtKGl0ZW0pLmZvbGQoaGFuZGxlRXJyb3IsIGQgPT4gT3B0aW9uYWwuc29tZShzZXBhcmF0b3IkMyhkKSkpO1xuICAgICAgY2FzZSAnZmFuY3ltZW51aXRlbSc6XG4gICAgICAgIHJldHVybiBjcmVhdGVGYW5jeU1lbnVJdGVtKGl0ZW0pLmZvbGQoaGFuZGxlRXJyb3IsIGQgPT4gZmFuY3koZCwgYmFja3N0YWdlKSk7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVW5rbm93biBpdGVtIGluIGdlbmVyYWwgbWVudScsIGl0ZW0pO1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUF1dG9jb21wbGV0ZUl0ZW1zID0gKGl0ZW1zLCBtYXRjaFRleHQsIG9uSXRlbVZhbHVlSGFuZGxlciwgY29sdW1ucywgaXRlbVJlc3BvbnNlLCBzaGFyZWRCYWNrc3RhZ2UsIGhpZ2hsaWdodE9uKSA9PiB7XG4gICAgICBjb25zdCByZW5kZXJUZXh0ID0gY29sdW1ucyA9PT0gMTtcbiAgICAgIGNvbnN0IHJlbmRlckljb25zID0gIXJlbmRlclRleHQgfHwgbWVudUhhc0ljb25zKGl0ZW1zKTtcbiAgICAgIHJldHVybiBjYXQobWFwJDIoaXRlbXMsIGl0ZW0gPT4ge1xuICAgICAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xuICAgICAgICBjYXNlICdzZXBhcmF0b3InOlxuICAgICAgICAgIHJldHVybiBjcmVhdGVTZXBhcmF0b3JJdGVtKGl0ZW0pLmZvbGQoaGFuZGxlRXJyb3IsIGQgPT4gT3B0aW9uYWwuc29tZShzZXBhcmF0b3IkMyhkKSkpO1xuICAgICAgICBjYXNlICdjYXJkbWVudWl0ZW0nOlxuICAgICAgICAgIHJldHVybiBjcmVhdGVDYXJkTWVudUl0ZW0oaXRlbSkuZm9sZChoYW5kbGVFcnJvciwgZCA9PiBPcHRpb25hbC5zb21lKGNhcmQoe1xuICAgICAgICAgICAgLi4uZCxcbiAgICAgICAgICAgIG9uQWN0aW9uOiBhcGkgPT4ge1xuICAgICAgICAgICAgICBkLm9uQWN0aW9uKGFwaSk7XG4gICAgICAgICAgICAgIG9uSXRlbVZhbHVlSGFuZGxlcihkLnZhbHVlLCBkLm1ldGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGl0ZW1SZXNwb25zZSwgc2hhcmVkQmFja3N0YWdlLCB7XG4gICAgICAgICAgICBpdGVtQmVoYXZpb3VyczogdG9vbHRpcEJlaGF2aW91cihkLm1ldGEsIHNoYXJlZEJhY2tzdGFnZSksXG4gICAgICAgICAgICBjYXJkVGV4dDoge1xuICAgICAgICAgICAgICBtYXRjaFRleHQsXG4gICAgICAgICAgICAgIGhpZ2hsaWdodE9uXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpKTtcbiAgICAgICAgY2FzZSAnYXV0b2NvbXBsZXRlaXRlbSc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUF1dG9jb21wbGV0ZXJJdGVtKGl0ZW0pLmZvbGQoaGFuZGxlRXJyb3IsIGQgPT4gT3B0aW9uYWwuc29tZShhdXRvY29tcGxldGUoZCwgbWF0Y2hUZXh0LCByZW5kZXJUZXh0LCAnbm9ybWFsJywgb25JdGVtVmFsdWVIYW5kbGVyLCBpdGVtUmVzcG9uc2UsIHNoYXJlZEJhY2tzdGFnZSwgcmVuZGVySWNvbnMpKSk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZVBhcnRpYWxNZW51ID0gKHZhbHVlLCBpdGVtcywgaXRlbVJlc3BvbnNlLCBiYWNrc3RhZ2UsIGlzSG9yaXpvbnRhbE1lbnUsIHNlYXJjaE1vZGUpID0+IHtcbiAgICAgIGNvbnN0IGhhc0ljb25zID0gbWVudUhhc0ljb25zKGl0ZW1zKTtcbiAgICAgIGNvbnN0IGFsbG95SXRlbXMgPSBjYXQobWFwJDIoaXRlbXMsIGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBpdGVtSGFzSWNvbiA9IGkgPT4gaXNIb3Jpem9udGFsTWVudSA/ICFoYXMkMihpLCAndGV4dCcpIDogaGFzSWNvbnM7XG4gICAgICAgIGNvbnN0IGNyZWF0ZUl0ZW0gPSBpID0+IGNyZWF0ZU1lbnVJdGVtRnJvbUJyaWRnZShpLCBpdGVtUmVzcG9uc2UsIGJhY2tzdGFnZSwgaXRlbUhhc0ljb24oaSksIGlzSG9yaXpvbnRhbE1lbnUpO1xuICAgICAgICBpZiAoaXRlbS50eXBlID09PSAnbmVzdGVkbWVudWl0ZW0nICYmIGl0ZW0uZ2V0U3VibWVudUl0ZW1zKCkubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlSXRlbSh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlSXRlbShpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgICAgY29uc3QgbWVudUxheW91dCA9IGlkZW50aWZ5TWVudUxheW91dChzZWFyY2hNb2RlKTtcbiAgICAgIGNvbnN0IGNyZWF0ZVBhcnRpYWwgPSBpc0hvcml6b250YWxNZW51ID8gY3JlYXRlSG9yaXpvbnRhbFBhcnRpYWxNZW51V2l0aEFsbG95SXRlbXMgOiBjcmVhdGVQYXJ0aWFsTWVudVdpdGhBbGxveUl0ZW1zO1xuICAgICAgcmV0dXJuIGNyZWF0ZVBhcnRpYWwodmFsdWUsIGhhc0ljb25zLCBhbGxveUl0ZW1zLCAxLCBtZW51TGF5b3V0KTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZVRpZXJlZERhdGFGcm9tID0gcGFydGlhbE1lbnUgPT4gdGllcmVkTWVudS5zaW5nbGVEYXRhKHBhcnRpYWxNZW51LnZhbHVlLCBwYXJ0aWFsTWVudSk7XG4gICAgY29uc3QgY3JlYXRlSW5saW5lTWVudUZyb20gPSAocGFydGlhbE1lbnUsIGNvbHVtbnMsIGZvY3VzTW9kZSwgcHJlc2V0cykgPT4ge1xuICAgICAgY29uc3QgbW92ZW1lbnQgPSBkZXJpdmVNZW51TW92ZW1lbnQoY29sdW1ucywgcHJlc2V0cyk7XG4gICAgICBjb25zdCBtZW51TWFya2VycyA9IG1hcmtlcnMocHJlc2V0cyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBjcmVhdGVUaWVyZWREYXRhRnJvbSh7XG4gICAgICAgICAgLi4ucGFydGlhbE1lbnUsXG4gICAgICAgICAgbW92ZW1lbnQsXG4gICAgICAgICAgbWVudUJlaGF2aW91cnM6IFNpbXBsZUJlaGF2aW91cnMudW5uYW1lZEV2ZW50cyhjb2x1bW5zICE9PSAnYXV0bycgPyBbXSA6IFtydW5PbkF0dGFjaGVkKChjb21wLCBfc2UpID0+IHtcbiAgICAgICAgICAgICAgZGV0ZWN0U2l6ZShjb21wLCA0LCBtZW51TWFya2Vycy5pdGVtKS5lYWNoKCh7bnVtQ29sdW1ucywgbnVtUm93c30pID0+IHtcbiAgICAgICAgICAgICAgICBLZXlpbmcuc2V0R3JpZFNpemUoY29tcCwgbnVtUm93cywgbnVtQ29sdW1ucyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSldKVxuICAgICAgICB9KSxcbiAgICAgICAgbWVudToge1xuICAgICAgICAgIG1hcmtlcnM6IG1hcmtlcnMocHJlc2V0cyksXG4gICAgICAgICAgZmFrZUZvY3VzOiBmb2N1c01vZGUgPT09IEZvY3VzTW9kZS5Db250ZW50Rm9jdXNcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0QXV0b2NvbXBsZXRlclJhbmdlID0gKGRvbSwgaW5pdFJhbmdlKSA9PiB7XG4gICAgICByZXR1cm4gZGV0ZWN0JDEoU3VnYXJFbGVtZW50LmZyb21Eb20oaW5pdFJhbmdlLnN0YXJ0Q29udGFpbmVyKSkubWFwKGVsbSA9PiB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgICByYW5nZS5zZWxlY3ROb2RlKGVsbS5kb20pO1xuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyJGIgPSAoZWRpdG9yLCBzaGFyZWRCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IHByb2Nlc3NpbmdBY3Rpb24gPSBDZWxsKGZhbHNlKTtcbiAgICAgIGNvbnN0IGFjdGl2ZVN0YXRlID0gQ2VsbChmYWxzZSk7XG4gICAgICBjb25zdCBhdXRvY29tcGxldGVyID0gYnVpbGQkMShJbmxpbmVWaWV3LnNrZXRjaCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtYXV0b2NvbXBsZXRlciddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtdLFxuICAgICAgICBmaXJlRGlzbWlzc2FsRXZlbnRJbnN0ZWFkOiB7fSxcbiAgICAgICAgaW5saW5lQmVoYXZpb3VyczogZGVyaXZlJDEoW2NvbmZpZygnZGlzbWlzc0F1dG9jb21wbGV0ZXInLCBbcnVuJDEoZGlzbWlzc1JlcXVlc3RlZCgpLCAoKSA9PiBjYW5jZWxJZk5lY2Vzc2FyeSgpKV0pXSksXG4gICAgICAgIGxhenlTaW5rOiBzaGFyZWRCYWNrc3RhZ2UuZ2V0U2lua1xuICAgICAgfSkpO1xuICAgICAgY29uc3QgaXNNZW51T3BlbiA9ICgpID0+IElubGluZVZpZXcuaXNPcGVuKGF1dG9jb21wbGV0ZXIpO1xuICAgICAgY29uc3QgaXNBY3RpdmUgPSBhY3RpdmVTdGF0ZS5nZXQ7XG4gICAgICBjb25zdCBoaWRlSWZOZWNlc3NhcnkgPSAoKSA9PiB7XG4gICAgICAgIGlmIChpc01lbnVPcGVuKCkpIHtcbiAgICAgICAgICBJbmxpbmVWaWV3LmhpZGUoYXV0b2NvbXBsZXRlcik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRNZW51ID0gKCkgPT4gSW5saW5lVmlldy5nZXRDb250ZW50KGF1dG9jb21wbGV0ZXIpLmJpbmQodG1lbnUgPT4ge1xuICAgICAgICByZXR1cm4gZ2V0JGgodG1lbnUuY29tcG9uZW50cygpLCAwKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2FuY2VsSWZOZWNlc3NhcnkgPSAoKSA9PiBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZUF1dG9jb21wbGV0ZXJDbG9zZScpO1xuICAgICAgY29uc3QgZ2V0Q29tYmluZWRJdGVtcyA9IG1hdGNoZXMgPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gZmluZE1hcChtYXRjaGVzLCBtID0+IE9wdGlvbmFsLmZyb20obS5jb2x1bW5zKSkuZ2V0T3IoMSk7XG4gICAgICAgIHJldHVybiBiaW5kJDMobWF0Y2hlcywgbWF0Y2ggPT4ge1xuICAgICAgICAgIGNvbnN0IGNob2ljZXMgPSBtYXRjaC5pdGVtcztcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQXV0b2NvbXBsZXRlSXRlbXMoY2hvaWNlcywgbWF0Y2gubWF0Y2hUZXh0LCAoaXRlbVZhbHVlLCBpdGVtTWV0YSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbnIgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgICAgICAgZ2V0QXV0b2NvbXBsZXRlclJhbmdlKGVkaXRvci5kb20sIG5yKS5lYWNoKHJhbmdlID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgYXV0b2NvbXBsZXRlckFwaSA9IHtcbiAgICAgICAgICAgICAgICBoaWRlOiAoKSA9PiBjYW5jZWxJZk5lY2Vzc2FyeSgpLFxuICAgICAgICAgICAgICAgIHJlbG9hZDogZmV0Y2hPcHRpb25zID0+IHtcbiAgICAgICAgICAgICAgICAgIGhpZGVJZk5lY2Vzc2FyeSgpO1xuICAgICAgICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VBdXRvY29tcGxldGVyUmVsb2FkJywgZmFsc2UsIHsgZmV0Y2hPcHRpb25zIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgcHJvY2Vzc2luZ0FjdGlvbi5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgIG1hdGNoLm9uQWN0aW9uKGF1dG9jb21wbGV0ZXJBcGksIHJhbmdlLCBpdGVtVmFsdWUsIGl0ZW1NZXRhKTtcbiAgICAgICAgICAgICAgcHJvY2Vzc2luZ0FjdGlvbi5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwgY29sdW1ucywgSXRlbVJlc3BvbnNlJDEuQlVCQkxFX1RPX1NBTkRCT1gsIHNoYXJlZEJhY2tzdGFnZSwgbWF0Y2guaGlnaGxpZ2h0T24pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBkaXNwbGF5ID0gKGxvb2t1cERhdGEsIGl0ZW1zKSA9PiB7XG4gICAgICAgIGZpbmRJbihTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKSkuZWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW5zID0gZmluZE1hcChsb29rdXBEYXRhLCBsZCA9PiBPcHRpb25hbC5mcm9tKGxkLmNvbHVtbnMpKS5nZXRPcigxKTtcbiAgICAgICAgICBJbmxpbmVWaWV3LnNob3dNZW51QXQoYXV0b2NvbXBsZXRlciwge1xuICAgICAgICAgICAgYW5jaG9yOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdub2RlJyxcbiAgICAgICAgICAgICAgcm9vdDogU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSksXG4gICAgICAgICAgICAgIG5vZGU6IE9wdGlvbmFsLmZyb20oZWxlbWVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBjcmVhdGVJbmxpbmVNZW51RnJvbShjcmVhdGVQYXJ0aWFsTWVudVdpdGhBbGxveUl0ZW1zKCdhdXRvY29tcGxldGVyLXZhbHVlJywgdHJ1ZSwgaXRlbXMsIGNvbHVtbnMsIHsgbWVudVR5cGU6ICdub3JtYWwnIH0pLCBjb2x1bW5zLCBGb2N1c01vZGUuQ29udGVudEZvY3VzLCAnbm9ybWFsJykpO1xuICAgICAgICB9KTtcbiAgICAgICAgZ2V0TWVudSgpLmVhY2goSGlnaGxpZ2h0aW5nLmhpZ2hsaWdodEZpcnN0KTtcbiAgICAgIH07XG4gICAgICBjb25zdCB1cGRhdGVEaXNwbGF5ID0gbG9va3VwRGF0YSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbWJpbmVkSXRlbXMgPSBnZXRDb21iaW5lZEl0ZW1zKGxvb2t1cERhdGEpO1xuICAgICAgICBpZiAoY29tYmluZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZGlzcGxheShsb29rdXBEYXRhLCBjb21iaW5lZEl0ZW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWRlSWZOZWNlc3NhcnkoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGVkaXRvci5vbignQXV0b2NvbXBsZXRlclN0YXJ0JywgKHtsb29rdXBEYXRhfSkgPT4ge1xuICAgICAgICBhY3RpdmVTdGF0ZS5zZXQodHJ1ZSk7XG4gICAgICAgIHByb2Nlc3NpbmdBY3Rpb24uc2V0KGZhbHNlKTtcbiAgICAgICAgdXBkYXRlRGlzcGxheShsb29rdXBEYXRhKTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdBdXRvY29tcGxldGVyVXBkYXRlJywgKHtsb29rdXBEYXRhfSkgPT4gdXBkYXRlRGlzcGxheShsb29rdXBEYXRhKSk7XG4gICAgICBlZGl0b3Iub24oJ0F1dG9jb21wbGV0ZXJFbmQnLCAoKSA9PiB7XG4gICAgICAgIGhpZGVJZk5lY2Vzc2FyeSgpO1xuICAgICAgICBhY3RpdmVTdGF0ZS5zZXQoZmFsc2UpO1xuICAgICAgICBwcm9jZXNzaW5nQWN0aW9uLnNldChmYWxzZSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGF1dG9jb21wbGV0ZXJVaUFwaSA9IHtcbiAgICAgICAgY2FuY2VsSWZOZWNlc3NhcnksXG4gICAgICAgIGlzTWVudU9wZW4sXG4gICAgICAgIGlzQWN0aXZlLFxuICAgICAgICBpc1Byb2Nlc3NpbmdBY3Rpb246IHByb2Nlc3NpbmdBY3Rpb24uZ2V0LFxuICAgICAgICBnZXRNZW51XG4gICAgICB9O1xuICAgICAgQXV0b2NvbXBsZXRlckVkaXRvckV2ZW50cy5zZXR1cChhdXRvY29tcGxldGVyVWlBcGksIGVkaXRvcik7XG4gICAgfTtcbiAgICBjb25zdCBBdXRvY29tcGxldGVyID0geyByZWdpc3RlcjogcmVnaXN0ZXIkYiB9O1xuXG4gICAgY29uc3Qgbm9uU2Nyb2xsaW5nT3ZlcmZsb3dzID0gW1xuICAgICAgJ3Zpc2libGUnLFxuICAgICAgJ2hpZGRlbicsXG4gICAgICAnY2xpcCdcbiAgICBdO1xuICAgIGNvbnN0IGlzU2Nyb2xsaW5nT3ZlcmZsb3dWYWx1ZSA9IHZhbHVlID0+IHRyaW0kMSh2YWx1ZSkubGVuZ3RoID4gMCAmJiAhY29udGFpbnMkMihub25TY3JvbGxpbmdPdmVyZmxvd3MsIHZhbHVlKTtcbiAgICBjb25zdCBpc1Njcm9sbGVyID0gZWxlbSA9PiB7XG4gICAgICBpZiAoaXNIVE1MRWxlbWVudChlbGVtKSkge1xuICAgICAgICBjb25zdCBvdmVyZmxvd1ggPSBnZXQkZShlbGVtLCAnb3ZlcmZsb3cteCcpO1xuICAgICAgICBjb25zdCBvdmVyZmxvd1kgPSBnZXQkZShlbGVtLCAnb3ZlcmZsb3cteScpO1xuICAgICAgICByZXR1cm4gaXNTY3JvbGxpbmdPdmVyZmxvd1ZhbHVlKG92ZXJmbG93WCkgfHwgaXNTY3JvbGxpbmdPdmVyZmxvd1ZhbHVlKG92ZXJmbG93WSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBkZXRlY3QgPSBwb3B1cFNpbmtFbGVtID0+IHtcbiAgICAgIGNvbnN0IGFuY2VzdG9yc1Njcm9sbGVycyA9IGFuY2VzdG9ycyhwb3B1cFNpbmtFbGVtLCBpc1Njcm9sbGVyKTtcbiAgICAgIGNvbnN0IHNjcm9sbGVycyA9IGFuY2VzdG9yc1Njcm9sbGVycy5sZW5ndGggPT09IDAgPyBnZXRTaGFkb3dSb290KHBvcHVwU2lua0VsZW0pLm1hcChnZXRTaGFkb3dIb3N0KS5tYXAoeCA9PiBhbmNlc3RvcnMoeCwgaXNTY3JvbGxlcikpLmdldE9yKFtdKSA6IGFuY2VzdG9yc1Njcm9sbGVycztcbiAgICAgIHJldHVybiBoZWFkKHNjcm9sbGVycykubWFwKGVsZW1lbnQgPT4gKHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgb3RoZXJzOiBzY3JvbGxlcnMuc2xpY2UoMSlcbiAgICAgIH0pKTtcbiAgICB9O1xuICAgIGNvbnN0IGRldGVjdFdoZW5TcGxpdFVpTW9kZSA9IChlZGl0b3IsIHBvcHVwU2lua0VsZW0pID0+IGlzU3BsaXRVaU1vZGUoZWRpdG9yKSA/IGRldGVjdChwb3B1cFNpbmtFbGVtKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICBjb25zdCBnZXRCb3VuZHNGcm9tID0gc2MgPT4ge1xuICAgICAgY29uc3Qgc2Nyb2xsYWJsZUJveGVzID0gW1xuICAgICAgICAuLi5tYXAkMihzYy5vdGhlcnMsIGJveCQxKSxcbiAgICAgICAgd2luKClcbiAgICAgIF07XG4gICAgICByZXR1cm4gY29uc3RyYWluQnlNYW55KGJveCQxKHNjLmVsZW1lbnQpLCBzY3JvbGxhYmxlQm94ZXMpO1xuICAgIH07XG5cbiAgICBjb25zdCBjbG9zZXN0ID0gKHNjb3BlLCBzZWxlY3RvciwgaXNSb290KSA9PiBjbG9zZXN0JDEoc2NvcGUsIHNlbGVjdG9yLCBpc1Jvb3QpLmlzU29tZSgpO1xuXG4gICAgY29uc3QgRGVsYXllZEZ1bmN0aW9uID0gKGZ1biwgZGVsYXkpID0+IHtcbiAgICAgIGxldCByZWYgPSBudWxsO1xuICAgICAgY29uc3Qgc2NoZWR1bGUgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICByZWYgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBmdW4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgcmVmID0gbnVsbDtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgaWYgKHJlZiAhPT0gbnVsbCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dChyZWYpO1xuICAgICAgICAgIHJlZiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjYW5jZWwsXG4gICAgICAgIHNjaGVkdWxlXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBTSUdOSUZJQ0FOVF9NT1ZFID0gNTtcbiAgICBjb25zdCBMT05HUFJFU1NfREVMQVkgPSA0MDA7XG4gICAgY29uc3QgZ2V0VG91Y2ggPSBldmVudCA9PiB7XG4gICAgICBjb25zdCByYXcgPSBldmVudC5yYXc7XG4gICAgICBpZiAocmF3LnRvdWNoZXMgPT09IHVuZGVmaW5lZCB8fCByYXcudG91Y2hlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHJhdy50b3VjaGVzWzBdKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzRmFyRW5vdWdoID0gKHRvdWNoLCBkYXRhKSA9PiB7XG4gICAgICBjb25zdCBkaXN0WCA9IE1hdGguYWJzKHRvdWNoLmNsaWVudFggLSBkYXRhLngpO1xuICAgICAgY29uc3QgZGlzdFkgPSBNYXRoLmFicyh0b3VjaC5jbGllbnRZIC0gZGF0YS55KTtcbiAgICAgIHJldHVybiBkaXN0WCA+IFNJR05JRklDQU5UX01PVkUgfHwgZGlzdFkgPiBTSUdOSUZJQ0FOVF9NT1ZFO1xuICAgIH07XG4gICAgY29uc3QgbW9uaXRvciA9IHNldHRpbmdzID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0RGF0YSA9IHZhbHVlJDIoKTtcbiAgICAgIGNvbnN0IGxvbmdwcmVzc0ZpcmVkID0gQ2VsbChmYWxzZSk7XG4gICAgICBjb25zdCBsb25ncHJlc3MkMSA9IERlbGF5ZWRGdW5jdGlvbihldmVudCA9PiB7XG4gICAgICAgIHNldHRpbmdzLnRyaWdnZXJFdmVudChsb25ncHJlc3MoKSwgZXZlbnQpO1xuICAgICAgICBsb25ncHJlc3NGaXJlZC5zZXQodHJ1ZSk7XG4gICAgICB9LCBMT05HUFJFU1NfREVMQVkpO1xuICAgICAgY29uc3QgaGFuZGxlVG91Y2hzdGFydCA9IGV2ZW50ID0+IHtcbiAgICAgICAgZ2V0VG91Y2goZXZlbnQpLmVhY2godG91Y2ggPT4ge1xuICAgICAgICAgIGxvbmdwcmVzcyQxLmNhbmNlbCgpO1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICB4OiB0b3VjaC5jbGllbnRYLFxuICAgICAgICAgICAgeTogdG91Y2guY2xpZW50WSxcbiAgICAgICAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0XG4gICAgICAgICAgfTtcbiAgICAgICAgICBsb25ncHJlc3MkMS5zY2hlZHVsZShldmVudCk7XG4gICAgICAgICAgbG9uZ3ByZXNzRmlyZWQuc2V0KGZhbHNlKTtcbiAgICAgICAgICBzdGFydERhdGEuc2V0KGRhdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBoYW5kbGVUb3VjaG1vdmUgPSBldmVudCA9PiB7XG4gICAgICAgIGxvbmdwcmVzcyQxLmNhbmNlbCgpO1xuICAgICAgICBnZXRUb3VjaChldmVudCkuZWFjaCh0b3VjaCA9PiB7XG4gICAgICAgICAgc3RhcnREYXRhLm9uKGRhdGEgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRmFyRW5vdWdoKHRvdWNoLCBkYXRhKSkge1xuICAgICAgICAgICAgICBzdGFydERhdGEuY2xlYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaGFuZGxlVG91Y2hlbmQgPSBldmVudCA9PiB7XG4gICAgICAgIGxvbmdwcmVzcyQxLmNhbmNlbCgpO1xuICAgICAgICBjb25zdCBpc1NhbWUgPSBkYXRhID0+IGVxKGRhdGEudGFyZ2V0LCBldmVudC50YXJnZXQpO1xuICAgICAgICByZXR1cm4gc3RhcnREYXRhLmdldCgpLmZpbHRlcihpc1NhbWUpLm1hcChfZGF0YSA9PiB7XG4gICAgICAgICAgaWYgKGxvbmdwcmVzc0ZpcmVkLmdldCgpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50KCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzZXR0aW5ncy50cmlnZ2VyRXZlbnQodGFwKCksIGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGhhbmRsZXJzID0gd3JhcEFsbChbXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6IHRvdWNoc3RhcnQoKSxcbiAgICAgICAgICB2YWx1ZTogaGFuZGxlVG91Y2hzdGFydFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5OiB0b3VjaG1vdmUoKSxcbiAgICAgICAgICB2YWx1ZTogaGFuZGxlVG91Y2htb3ZlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6IHRvdWNoZW5kKCksXG4gICAgICAgICAgdmFsdWU6IGhhbmRsZVRvdWNoZW5kXG4gICAgICAgIH1cbiAgICAgIF0pO1xuICAgICAgY29uc3QgZmlyZUlmUmVhZHkgPSAoZXZlbnQsIHR5cGUpID0+IGdldCRnKGhhbmRsZXJzLCB0eXBlKS5iaW5kKGhhbmRsZXIgPT4gaGFuZGxlcihldmVudCkpO1xuICAgICAgcmV0dXJuIHsgZmlyZUlmUmVhZHkgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNEYW5nZXJvdXMgPSBldmVudCA9PiB7XG4gICAgICBjb25zdCBrZXlFdiA9IGV2ZW50LnJhdztcbiAgICAgIHJldHVybiBrZXlFdi53aGljaCA9PT0gQkFDS1NQQUNFWzBdICYmICFjb250YWlucyQyKFtcbiAgICAgICAgJ2lucHV0JyxcbiAgICAgICAgJ3RleHRhcmVhJ1xuICAgICAgXSwgbmFtZSQzKGV2ZW50LnRhcmdldCkpICYmICFjbG9zZXN0KGV2ZW50LnRhcmdldCwgJ1tjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJdJyk7XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cCRkID0gKGNvbnRhaW5lciwgcmF3U2V0dGluZ3MpID0+IHtcbiAgICAgIGNvbnN0IHNldHRpbmdzID0ge1xuICAgICAgICBzdG9wQmFja3NwYWNlOiB0cnVlLFxuICAgICAgICAuLi5yYXdTZXR0aW5nc1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHBvaW50ZXJFdmVudHMgPSBbXG4gICAgICAgICd0b3VjaHN0YXJ0JyxcbiAgICAgICAgJ3RvdWNobW92ZScsXG4gICAgICAgICd0b3VjaGVuZCcsXG4gICAgICAgICd0b3VjaGNhbmNlbCcsXG4gICAgICAgICdnZXN0dXJlc3RhcnQnLFxuICAgICAgICAnbW91c2Vkb3duJyxcbiAgICAgICAgJ21vdXNldXAnLFxuICAgICAgICAnbW91c2VvdmVyJyxcbiAgICAgICAgJ21vdXNlbW92ZScsXG4gICAgICAgICdtb3VzZW91dCcsXG4gICAgICAgICdjbGljaydcbiAgICAgIF07XG4gICAgICBjb25zdCB0YXBFdmVudCA9IG1vbml0b3Ioc2V0dGluZ3MpO1xuICAgICAgY29uc3Qgc2ltcGxlRXZlbnRzID0gbWFwJDIocG9pbnRlckV2ZW50cy5jb25jYXQoW1xuICAgICAgICAnc2VsZWN0c3RhcnQnLFxuICAgICAgICAnaW5wdXQnLFxuICAgICAgICAnY29udGV4dG1lbnUnLFxuICAgICAgICAnY2hhbmdlJyxcbiAgICAgICAgJ3RyYW5zaXRpb25lbmQnLFxuICAgICAgICAndHJhbnNpdGlvbmNhbmNlbCcsXG4gICAgICAgICdkcmFnJyxcbiAgICAgICAgJ2RyYWdzdGFydCcsXG4gICAgICAgICdkcmFnZW5kJyxcbiAgICAgICAgJ2RyYWdlbnRlcicsXG4gICAgICAgICdkcmFnbGVhdmUnLFxuICAgICAgICAnZHJhZ292ZXInLFxuICAgICAgICAnZHJvcCcsXG4gICAgICAgICdrZXl1cCdcbiAgICAgIF0pLCB0eXBlID0+IGJpbmQoY29udGFpbmVyLCB0eXBlLCBldmVudCA9PiB7XG4gICAgICAgIHRhcEV2ZW50LmZpcmVJZlJlYWR5KGV2ZW50LCB0eXBlKS5lYWNoKHRhcFN0b3BwZWQgPT4ge1xuICAgICAgICAgIGlmICh0YXBTdG9wcGVkKSB7XG4gICAgICAgICAgICBldmVudC5raWxsKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc3RvcHBlZCA9IHNldHRpbmdzLnRyaWdnZXJFdmVudCh0eXBlLCBldmVudCk7XG4gICAgICAgIGlmIChzdG9wcGVkKSB7XG4gICAgICAgICAgZXZlbnQua2lsbCgpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgICBjb25zdCBwYXN0ZVRpbWVvdXQgPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBvblBhc3RlID0gYmluZChjb250YWluZXIsICdwYXN0ZScsIGV2ZW50ID0+IHtcbiAgICAgICAgdGFwRXZlbnQuZmlyZUlmUmVhZHkoZXZlbnQsICdwYXN0ZScpLmVhY2godGFwU3RvcHBlZCA9PiB7XG4gICAgICAgICAgaWYgKHRhcFN0b3BwZWQpIHtcbiAgICAgICAgICAgIGV2ZW50LmtpbGwoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzdG9wcGVkID0gc2V0dGluZ3MudHJpZ2dlckV2ZW50KCdwYXN0ZScsIGV2ZW50KTtcbiAgICAgICAgaWYgKHN0b3BwZWQpIHtcbiAgICAgICAgICBldmVudC5raWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcGFzdGVUaW1lb3V0LnNldChzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBzZXR0aW5ncy50cmlnZ2VyRXZlbnQocG9zdFBhc3RlKCksIGV2ZW50KTtcbiAgICAgICAgfSwgMCkpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBvbktleWRvd24gPSBiaW5kKGNvbnRhaW5lciwgJ2tleWRvd24nLCBldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHN0b3BwZWQgPSBzZXR0aW5ncy50cmlnZ2VyRXZlbnQoJ2tleWRvd24nLCBldmVudCk7XG4gICAgICAgIGlmIChzdG9wcGVkKSB7XG4gICAgICAgICAgZXZlbnQua2lsbCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHNldHRpbmdzLnN0b3BCYWNrc3BhY2UgJiYgaXNEYW5nZXJvdXMoZXZlbnQpKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG9uRm9jdXNJbiA9IGJpbmQoY29udGFpbmVyLCAnZm9jdXNpbicsIGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3Qgc3RvcHBlZCA9IHNldHRpbmdzLnRyaWdnZXJFdmVudCgnZm9jdXNpbicsIGV2ZW50KTtcbiAgICAgICAgaWYgKHN0b3BwZWQpIHtcbiAgICAgICAgICBldmVudC5raWxsKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgZm9jdXNvdXRUaW1lb3V0ID0gdmFsdWUkMigpO1xuICAgICAgY29uc3Qgb25Gb2N1c091dCA9IGJpbmQoY29udGFpbmVyLCAnZm9jdXNvdXQnLCBldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHN0b3BwZWQgPSBzZXR0aW5ncy50cmlnZ2VyRXZlbnQoJ2ZvY3Vzb3V0JywgZXZlbnQpO1xuICAgICAgICBpZiAoc3RvcHBlZCkge1xuICAgICAgICAgIGV2ZW50LmtpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBmb2N1c291dFRpbWVvdXQuc2V0KHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXJFdmVudChwb3N0Qmx1cigpLCBldmVudCk7XG4gICAgICAgIH0sIDApKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdW5iaW5kID0gKCkgPT4ge1xuICAgICAgICBlYWNoJDEoc2ltcGxlRXZlbnRzLCBlID0+IHtcbiAgICAgICAgICBlLnVuYmluZCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgb25LZXlkb3duLnVuYmluZCgpO1xuICAgICAgICBvbkZvY3VzSW4udW5iaW5kKCk7XG4gICAgICAgIG9uRm9jdXNPdXQudW5iaW5kKCk7XG4gICAgICAgIG9uUGFzdGUudW5iaW5kKCk7XG4gICAgICAgIHBhc3RlVGltZW91dC5vbihjbGVhclRpbWVvdXQpO1xuICAgICAgICBmb2N1c291dFRpbWVvdXQub24oY2xlYXJUaW1lb3V0KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4geyB1bmJpbmQgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGVyaXZlID0gKHJhd0V2ZW50LCByYXdUYXJnZXQpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGdldCRnKHJhd0V2ZW50LCAndGFyZ2V0JykuZ2V0T3IocmF3VGFyZ2V0KTtcbiAgICAgIHJldHVybiBDZWxsKHNvdXJjZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZyb21Tb3VyY2UgPSAoZXZlbnQsIHNvdXJjZSkgPT4ge1xuICAgICAgY29uc3Qgc3RvcHBlciA9IENlbGwoZmFsc2UpO1xuICAgICAgY29uc3QgY3V0dGVyID0gQ2VsbChmYWxzZSk7XG4gICAgICBjb25zdCBzdG9wID0gKCkgPT4ge1xuICAgICAgICBzdG9wcGVyLnNldCh0cnVlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjdXQgPSAoKSA9PiB7XG4gICAgICAgIGN1dHRlci5zZXQodHJ1ZSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RvcCxcbiAgICAgICAgY3V0LFxuICAgICAgICBpc1N0b3BwZWQ6IHN0b3BwZXIuZ2V0LFxuICAgICAgICBpc0N1dDogY3V0dGVyLmdldCxcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHNldFNvdXJjZTogc291cmNlLnNldCxcbiAgICAgICAgZ2V0U291cmNlOiBzb3VyY2UuZ2V0XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZnJvbUV4dGVybmFsID0gZXZlbnQgPT4ge1xuICAgICAgY29uc3Qgc3RvcHBlciA9IENlbGwoZmFsc2UpO1xuICAgICAgY29uc3Qgc3RvcCA9ICgpID0+IHtcbiAgICAgICAgc3RvcHBlci5zZXQodHJ1ZSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RvcCxcbiAgICAgICAgY3V0OiBub29wLFxuICAgICAgICBpc1N0b3BwZWQ6IHN0b3BwZXIuZ2V0LFxuICAgICAgICBpc0N1dDogbmV2ZXIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBzZXRTb3VyY2U6IGRpZSgnQ2Fubm90IHNldCBzb3VyY2Ugb2YgYSBicm9hZGNhc3RlZCBldmVudCcpLFxuICAgICAgICBnZXRTb3VyY2U6IGRpZSgnQ2Fubm90IGdldCBzb3VyY2Ugb2YgYSBicm9hZGNhc3RlZCBldmVudCcpXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBhZHQkMSA9IEFkdC5nZW5lcmF0ZShbXG4gICAgICB7IHN0b3BwZWQ6IFtdIH0sXG4gICAgICB7IHJlc3VtZTogWydlbGVtZW50J10gfSxcbiAgICAgIHsgY29tcGxldGU6IFtdIH1cbiAgICBdKTtcbiAgICBjb25zdCBkb1RyaWdnZXJIYW5kbGVyID0gKGxvb2t1cCwgZXZlbnRUeXBlLCByYXdFdmVudCwgdGFyZ2V0LCBzb3VyY2UsIGxvZ2dlcikgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlciA9IGxvb2t1cChldmVudFR5cGUsIHRhcmdldCk7XG4gICAgICBjb25zdCBzaW11bGF0ZWRFdmVudCA9IGZyb21Tb3VyY2UocmF3RXZlbnQsIHNvdXJjZSk7XG4gICAgICByZXR1cm4gaGFuZGxlci5mb2xkKCgpID0+IHtcbiAgICAgICAgbG9nZ2VyLmxvZ0V2ZW50Tm9IYW5kbGVycyhldmVudFR5cGUsIHRhcmdldCk7XG4gICAgICAgIHJldHVybiBhZHQkMS5jb21wbGV0ZSgpO1xuICAgICAgfSwgaGFuZGxlckluZm8gPT4ge1xuICAgICAgICBjb25zdCBkZXNjSGFuZGxlciA9IGhhbmRsZXJJbmZvLmRlc2NIYW5kbGVyO1xuICAgICAgICBjb25zdCBldmVudEhhbmRsZXIgPSBnZXRDdXJyaWVkKGRlc2NIYW5kbGVyKTtcbiAgICAgICAgZXZlbnRIYW5kbGVyKHNpbXVsYXRlZEV2ZW50KTtcbiAgICAgICAgaWYgKHNpbXVsYXRlZEV2ZW50LmlzU3RvcHBlZCgpKSB7XG4gICAgICAgICAgbG9nZ2VyLmxvZ0V2ZW50U3RvcHBlZChldmVudFR5cGUsIGhhbmRsZXJJbmZvLmVsZW1lbnQsIGRlc2NIYW5kbGVyLnB1cnBvc2UpO1xuICAgICAgICAgIHJldHVybiBhZHQkMS5zdG9wcGVkKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2ltdWxhdGVkRXZlbnQuaXNDdXQoKSkge1xuICAgICAgICAgIGxvZ2dlci5sb2dFdmVudEN1dChldmVudFR5cGUsIGhhbmRsZXJJbmZvLmVsZW1lbnQsIGRlc2NIYW5kbGVyLnB1cnBvc2UpO1xuICAgICAgICAgIHJldHVybiBhZHQkMS5jb21wbGV0ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBwYXJlbnQoaGFuZGxlckluZm8uZWxlbWVudCkuZm9sZCgoKSA9PiB7XG4gICAgICAgICAgICBsb2dnZXIubG9nTm9QYXJlbnQoZXZlbnRUeXBlLCBoYW5kbGVySW5mby5lbGVtZW50LCBkZXNjSGFuZGxlci5wdXJwb3NlKTtcbiAgICAgICAgICAgIHJldHVybiBhZHQkMS5jb21wbGV0ZSgpO1xuICAgICAgICAgIH0sIHBhcmVudCA9PiB7XG4gICAgICAgICAgICBsb2dnZXIubG9nRXZlbnRSZXNwb25zZShldmVudFR5cGUsIGhhbmRsZXJJbmZvLmVsZW1lbnQsIGRlc2NIYW5kbGVyLnB1cnBvc2UpO1xuICAgICAgICAgICAgcmV0dXJuIGFkdCQxLnJlc3VtZShwYXJlbnQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGRvVHJpZ2dlck9uVW50aWxTdG9wcGVkID0gKGxvb2t1cCwgZXZlbnRUeXBlLCByYXdFdmVudCwgcmF3VGFyZ2V0LCBzb3VyY2UsIGxvZ2dlcikgPT4gZG9UcmlnZ2VySGFuZGxlcihsb29rdXAsIGV2ZW50VHlwZSwgcmF3RXZlbnQsIHJhd1RhcmdldCwgc291cmNlLCBsb2dnZXIpLmZvbGQoYWx3YXlzLCBwYXJlbnQgPT4gZG9UcmlnZ2VyT25VbnRpbFN0b3BwZWQobG9va3VwLCBldmVudFR5cGUsIHJhd0V2ZW50LCBwYXJlbnQsIHNvdXJjZSwgbG9nZ2VyKSwgbmV2ZXIpO1xuICAgIGNvbnN0IHRyaWdnZXJIYW5kbGVyID0gKGxvb2t1cCwgZXZlbnRUeXBlLCByYXdFdmVudCwgdGFyZ2V0LCBsb2dnZXIpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGRlcml2ZShyYXdFdmVudCwgdGFyZ2V0KTtcbiAgICAgIHJldHVybiBkb1RyaWdnZXJIYW5kbGVyKGxvb2t1cCwgZXZlbnRUeXBlLCByYXdFdmVudCwgdGFyZ2V0LCBzb3VyY2UsIGxvZ2dlcik7XG4gICAgfTtcbiAgICBjb25zdCBicm9hZGNhc3QgPSAobGlzdGVuZXJzLCByYXdFdmVudCwgX2xvZ2dlcikgPT4ge1xuICAgICAgY29uc3Qgc2ltdWxhdGVkRXZlbnQgPSBmcm9tRXh0ZXJuYWwocmF3RXZlbnQpO1xuICAgICAgZWFjaCQxKGxpc3RlbmVycywgbGlzdGVuZXIgPT4ge1xuICAgICAgICBjb25zdCBkZXNjSGFuZGxlciA9IGxpc3RlbmVyLmRlc2NIYW5kbGVyO1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gZ2V0Q3VycmllZChkZXNjSGFuZGxlcik7XG4gICAgICAgIGhhbmRsZXIoc2ltdWxhdGVkRXZlbnQpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gc2ltdWxhdGVkRXZlbnQuaXNTdG9wcGVkKCk7XG4gICAgfTtcbiAgICBjb25zdCB0cmlnZ2VyVW50aWxTdG9wcGVkID0gKGxvb2t1cCwgZXZlbnRUeXBlLCByYXdFdmVudCwgbG9nZ2VyKSA9PiB0cmlnZ2VyT25VbnRpbFN0b3BwZWQobG9va3VwLCBldmVudFR5cGUsIHJhd0V2ZW50LCByYXdFdmVudC50YXJnZXQsIGxvZ2dlcik7XG4gICAgY29uc3QgdHJpZ2dlck9uVW50aWxTdG9wcGVkID0gKGxvb2t1cCwgZXZlbnRUeXBlLCByYXdFdmVudCwgcmF3VGFyZ2V0LCBsb2dnZXIpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGRlcml2ZShyYXdFdmVudCwgcmF3VGFyZ2V0KTtcbiAgICAgIHJldHVybiBkb1RyaWdnZXJPblVudGlsU3RvcHBlZChsb29rdXAsIGV2ZW50VHlwZSwgcmF3RXZlbnQsIHJhd1RhcmdldCwgc291cmNlLCBsb2dnZXIpO1xuICAgIH07XG5cbiAgICBjb25zdCBldmVudEhhbmRsZXIgPSAoZWxlbWVudCwgZGVzY0hhbmRsZXIpID0+ICh7XG4gICAgICBlbGVtZW50LFxuICAgICAgZGVzY0hhbmRsZXJcbiAgICB9KTtcbiAgICBjb25zdCBicm9hZGNhc3RIYW5kbGVyID0gKGlkLCBoYW5kbGVyKSA9PiAoe1xuICAgICAgaWQsXG4gICAgICBkZXNjSGFuZGxlcjogaGFuZGxlclxuICAgIH0pO1xuICAgIGNvbnN0IEV2ZW50UmVnaXN0cnkgPSAoKSA9PiB7XG4gICAgICBjb25zdCByZWdpc3RyeSA9IHt9O1xuICAgICAgY29uc3QgcmVnaXN0ZXJJZCA9IChleHRyYUFyZ3MsIGlkLCBldmVudHMpID0+IHtcbiAgICAgICAgZWFjaChldmVudHMsICh2LCBrKSA9PiB7XG4gICAgICAgICAgY29uc3QgaGFuZGxlcnMgPSByZWdpc3RyeVtrXSAhPT0gdW5kZWZpbmVkID8gcmVnaXN0cnlba10gOiB7fTtcbiAgICAgICAgICBoYW5kbGVyc1tpZF0gPSBjdXJyeUFyZ3ModiwgZXh0cmFBcmdzKTtcbiAgICAgICAgICByZWdpc3RyeVtrXSA9IGhhbmRsZXJzO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBmaW5kSGFuZGxlciA9IChoYW5kbGVycywgZWxlbSkgPT4gcmVhZCQxKGVsZW0pLmJpbmQoaWQgPT4gZ2V0JGcoaGFuZGxlcnMsIGlkKSkubWFwKGRlc2NIYW5kbGVyID0+IGV2ZW50SGFuZGxlcihlbGVtLCBkZXNjSGFuZGxlcikpO1xuICAgICAgY29uc3QgZmlsdGVyQnlUeXBlID0gdHlwZSA9PiBnZXQkZyhyZWdpc3RyeSwgdHlwZSkubWFwKGhhbmRsZXJzID0+IG1hcFRvQXJyYXkoaGFuZGxlcnMsIChmLCBpZCkgPT4gYnJvYWRjYXN0SGFuZGxlcihpZCwgZikpKS5nZXRPcihbXSk7XG4gICAgICBjb25zdCBmaW5kID0gKGlzQWJvdmVSb290LCB0eXBlLCB0YXJnZXQpID0+IGdldCRnKHJlZ2lzdHJ5LCB0eXBlKS5iaW5kKGhhbmRsZXJzID0+IGNsb3Nlc3QkNCh0YXJnZXQsIGVsZW0gPT4gZmluZEhhbmRsZXIoaGFuZGxlcnMsIGVsZW0pLCBpc0Fib3ZlUm9vdCkpO1xuICAgICAgY29uc3QgdW5yZWdpc3RlcklkID0gaWQgPT4ge1xuICAgICAgICBlYWNoKHJlZ2lzdHJ5LCAoaGFuZGxlcnNCeUlkLCBfZXZlbnROYW1lKSA9PiB7XG4gICAgICAgICAgaWYgKGhhcyQyKGhhbmRsZXJzQnlJZCwgaWQpKSB7XG4gICAgICAgICAgICBkZWxldGUgaGFuZGxlcnNCeUlkW2lkXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlZ2lzdGVySWQsXG4gICAgICAgIHVucmVnaXN0ZXJJZCxcbiAgICAgICAgZmlsdGVyQnlUeXBlLFxuICAgICAgICBmaW5kXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBSZWdpc3RyeSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IEV2ZW50UmVnaXN0cnkoKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB7fTtcbiAgICAgIGNvbnN0IHJlYWRPclRhZyA9IGNvbXBvbmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW0gPSBjb21wb25lbnQuZWxlbWVudDtcbiAgICAgICAgcmV0dXJuIHJlYWQkMShlbGVtKS5nZXRPclRodW5rKCgpID0+IHdyaXRlKCd1aWQtJywgY29tcG9uZW50LmVsZW1lbnQpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBmYWlsT25EdXBsaWNhdGUgPSAoY29tcG9uZW50LCB0YWdJZCkgPT4ge1xuICAgICAgICBjb25zdCBjb25mbGljdCA9IGNvbXBvbmVudHNbdGFnSWRdO1xuICAgICAgICBpZiAoY29uZmxpY3QgPT09IGNvbXBvbmVudCkge1xuICAgICAgICAgIHVucmVnaXN0ZXIoY29tcG9uZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB0YWdJZCBcIicgKyB0YWdJZCArICdcIiBpcyBhbHJlYWR5IHVzZWQgYnk6ICcgKyBlbGVtZW50KGNvbmZsaWN0LmVsZW1lbnQpICsgJ1xcbkNhbm5vdCB1c2UgaXQgZm9yOiAnICsgZWxlbWVudChjb21wb25lbnQuZWxlbWVudCkgKyAnXFxuJyArICdUaGUgY29uZmxpY3RpbmcgZWxlbWVudCBpcycgKyAoaW5Cb2R5KGNvbmZsaWN0LmVsZW1lbnQpID8gJyAnIDogJyBub3QgJykgKyAnYWxyZWFkeSBpbiB0aGUgRE9NJyk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCByZWdpc3RlciA9IGNvbXBvbmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHRhZ0lkID0gcmVhZE9yVGFnKGNvbXBvbmVudCk7XG4gICAgICAgIGlmIChoYXNOb25OdWxsYWJsZUtleShjb21wb25lbnRzLCB0YWdJZCkpIHtcbiAgICAgICAgICBmYWlsT25EdXBsaWNhdGUoY29tcG9uZW50LCB0YWdJZCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXh0cmFBcmdzID0gW2NvbXBvbmVudF07XG4gICAgICAgIGV2ZW50cy5yZWdpc3RlcklkKGV4dHJhQXJncywgdGFnSWQsIGNvbXBvbmVudC5ldmVudHMpO1xuICAgICAgICBjb21wb25lbnRzW3RhZ0lkXSA9IGNvbXBvbmVudDtcbiAgICAgIH07XG4gICAgICBjb25zdCB1bnJlZ2lzdGVyID0gY29tcG9uZW50ID0+IHtcbiAgICAgICAgcmVhZCQxKGNvbXBvbmVudC5lbGVtZW50KS5lYWNoKHRhZ0lkID0+IHtcbiAgICAgICAgICBkZWxldGUgY29tcG9uZW50c1t0YWdJZF07XG4gICAgICAgICAgZXZlbnRzLnVucmVnaXN0ZXJJZCh0YWdJZCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZpbHRlciA9IHR5cGUgPT4gZXZlbnRzLmZpbHRlckJ5VHlwZSh0eXBlKTtcbiAgICAgIGNvbnN0IGZpbmQgPSAoaXNBYm92ZVJvb3QsIHR5cGUsIHRhcmdldCkgPT4gZXZlbnRzLmZpbmQoaXNBYm92ZVJvb3QsIHR5cGUsIHRhcmdldCk7XG4gICAgICBjb25zdCBnZXRCeUlkID0gaWQgPT4gZ2V0JGcoY29tcG9uZW50cywgaWQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmluZCxcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICByZWdpc3RlcixcbiAgICAgICAgdW5yZWdpc3RlcixcbiAgICAgICAgZ2V0QnlJZFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmFjdG9yeSRqID0gZGV0YWlsID0+IHtcbiAgICAgIGNvbnN0IHthdHRyaWJ1dGVzLCAuLi5kb21XaXRob3V0QXR0cmlidXRlc30gPSBkZXRhaWwuZG9tO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIHJvbGU6ICdwcmVzZW50YXRpb24nLFxuICAgICAgICAgICAgLi4uYXR0cmlidXRlc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uZG9tV2l0aG91dEF0dHJpYnV0ZXNcbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogZGV0YWlsLmNvbXBvbmVudHMsXG4gICAgICAgIGJlaGF2aW91cnM6IGdldCQzKGRldGFpbC5jb250YWluZXJCZWhhdmlvdXJzKSxcbiAgICAgICAgZXZlbnRzOiBkZXRhaWwuZXZlbnRzLFxuICAgICAgICBkb21Nb2RpZmljYXRpb246IGRldGFpbC5kb21Nb2RpZmljYXRpb24sXG4gICAgICAgIGV2ZW50T3JkZXI6IGRldGFpbC5ldmVudE9yZGVyXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgQ29udGFpbmVyID0gc2luZ2xlKHtcbiAgICAgIG5hbWU6ICdDb250YWluZXInLFxuICAgICAgZmFjdG9yeTogZmFjdG9yeSRqLFxuICAgICAgY29uZmlnRmllbGRzOiBbXG4gICAgICAgIGRlZmF1bHRlZCgnY29tcG9uZW50cycsIFtdKSxcbiAgICAgICAgZmllbGQoJ2NvbnRhaW5lckJlaGF2aW91cnMnLCBbXSksXG4gICAgICAgIGRlZmF1bHRlZCgnZXZlbnRzJywge30pLFxuICAgICAgICBkZWZhdWx0ZWQoJ2RvbU1vZGlmaWNhdGlvbicsIHt9KSxcbiAgICAgICAgZGVmYXVsdGVkKCdldmVudE9yZGVyJywge30pXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBjb25zdCB0YWtlb3ZlciA9IHJvb3QgPT4ge1xuICAgICAgY29uc3QgaXNBYm92ZVJvb3QgPSBlbCA9PiBwYXJlbnQocm9vdC5lbGVtZW50KS5mb2xkKGFsd2F5cywgcGFyZW50ID0+IGVxKGVsLCBwYXJlbnQpKTtcbiAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gUmVnaXN0cnkoKTtcbiAgICAgIGNvbnN0IGxvb2t1cCA9IChldmVudE5hbWUsIHRhcmdldCkgPT4gcmVnaXN0cnkuZmluZChpc0Fib3ZlUm9vdCwgZXZlbnROYW1lLCB0YXJnZXQpO1xuICAgICAgY29uc3QgZG9tRXZlbnRzID0gc2V0dXAkZChyb290LmVsZW1lbnQsIHtcbiAgICAgICAgdHJpZ2dlckV2ZW50OiAoZXZlbnROYW1lLCBldmVudCkgPT4ge1xuICAgICAgICAgIHJldHVybiBtb25pdG9yRXZlbnQoZXZlbnROYW1lLCBldmVudC50YXJnZXQsIGxvZ2dlciA9PiB0cmlnZ2VyVW50aWxTdG9wcGVkKGxvb2t1cCwgZXZlbnROYW1lLCBldmVudCwgbG9nZ2VyKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3lzdGVtQXBpID0ge1xuICAgICAgICBkZWJ1Z0luZm86IGNvbnN0YW50JDEoJ3JlYWwnKSxcbiAgICAgICAgdHJpZ2dlckV2ZW50OiAoZXZlbnROYW1lLCB0YXJnZXQsIGRhdGEpID0+IHtcbiAgICAgICAgICBtb25pdG9yRXZlbnQoZXZlbnROYW1lLCB0YXJnZXQsIGxvZ2dlciA9PiB0cmlnZ2VyT25VbnRpbFN0b3BwZWQobG9va3VwLCBldmVudE5hbWUsIGRhdGEsIHRhcmdldCwgbG9nZ2VyKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRyaWdnZXJGb2N1czogKHRhcmdldCwgb3JpZ2luYXRvcikgPT4ge1xuICAgICAgICAgIHJlYWQkMSh0YXJnZXQpLmZvbGQoKCkgPT4ge1xuICAgICAgICAgICAgZm9jdXMkMyh0YXJnZXQpO1xuICAgICAgICAgIH0sIF9hbGxveUlkID0+IHtcbiAgICAgICAgICAgIG1vbml0b3JFdmVudChmb2N1cyQ0KCksIHRhcmdldCwgbG9nZ2VyID0+IHtcbiAgICAgICAgICAgICAgdHJpZ2dlckhhbmRsZXIobG9va3VwLCBmb2N1cyQ0KCksIHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hdG9yLFxuICAgICAgICAgICAgICAgIGtpbGw6IG5vb3AsXG4gICAgICAgICAgICAgICAgcHJldmVudDogbm9vcCxcbiAgICAgICAgICAgICAgICB0YXJnZXRcbiAgICAgICAgICAgICAgfSwgdGFyZ2V0LCBsb2dnZXIpO1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgdHJpZ2dlckVzY2FwZTogKGNvbXAsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgc3lzdGVtQXBpLnRyaWdnZXJFdmVudCgna2V5ZG93bicsIGNvbXAuZWxlbWVudCwgc2ltdWxhdGVkRXZlbnQuZXZlbnQpO1xuICAgICAgICB9LFxuICAgICAgICBnZXRCeVVpZDogdWlkID0+IHtcbiAgICAgICAgICByZXR1cm4gZ2V0QnlVaWQodWlkKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0QnlEb206IGVsZW0gPT4ge1xuICAgICAgICAgIHJldHVybiBnZXRCeURvbShlbGVtKTtcbiAgICAgICAgfSxcbiAgICAgICAgYnVpbGQ6IGJ1aWxkJDEsXG4gICAgICAgIGJ1aWxkT3JQYXRjaDogYnVpbGRPclBhdGNoLFxuICAgICAgICBhZGRUb0d1aTogYyA9PiB7XG4gICAgICAgICAgYWRkKGMpO1xuICAgICAgICB9LFxuICAgICAgICByZW1vdmVGcm9tR3VpOiBjID0+IHtcbiAgICAgICAgICByZW1vdmUoYyk7XG4gICAgICAgIH0sXG4gICAgICAgIGFkZFRvV29ybGQ6IGMgPT4ge1xuICAgICAgICAgIGFkZFRvV29ybGQoYyk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbW92ZUZyb21Xb3JsZDogYyA9PiB7XG4gICAgICAgICAgcmVtb3ZlRnJvbVdvcmxkKGMpO1xuICAgICAgICB9LFxuICAgICAgICBicm9hZGNhc3Q6IG1lc3NhZ2UgPT4ge1xuICAgICAgICAgIGJyb2FkY2FzdCQxKG1lc3NhZ2UpO1xuICAgICAgICB9LFxuICAgICAgICBicm9hZGNhc3RPbjogKGNoYW5uZWxzLCBtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgYnJvYWRjYXN0T24oY2hhbm5lbHMsIG1lc3NhZ2UpO1xuICAgICAgICB9LFxuICAgICAgICBicm9hZGNhc3RFdmVudDogKGV2ZW50TmFtZSwgZXZlbnQpID0+IHtcbiAgICAgICAgICBicm9hZGNhc3RFdmVudChldmVudE5hbWUsIGV2ZW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNDb25uZWN0ZWQ6IGFsd2F5c1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkZFRvV29ybGQgPSBjb21wb25lbnQgPT4ge1xuICAgICAgICBjb21wb25lbnQuY29ubmVjdChzeXN0ZW1BcGkpO1xuICAgICAgICBpZiAoIWlzVGV4dChjb21wb25lbnQuZWxlbWVudCkpIHtcbiAgICAgICAgICByZWdpc3RyeS5yZWdpc3Rlcihjb21wb25lbnQpO1xuICAgICAgICAgIGVhY2gkMShjb21wb25lbnQuY29tcG9uZW50cygpLCBhZGRUb1dvcmxkKTtcbiAgICAgICAgICBzeXN0ZW1BcGkudHJpZ2dlckV2ZW50KHN5c3RlbUluaXQoKSwgY29tcG9uZW50LmVsZW1lbnQsIHsgdGFyZ2V0OiBjb21wb25lbnQuZWxlbWVudCB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlbW92ZUZyb21Xb3JsZCA9IGNvbXBvbmVudCA9PiB7XG4gICAgICAgIGlmICghaXNUZXh0KGNvbXBvbmVudC5lbGVtZW50KSkge1xuICAgICAgICAgIGVhY2gkMShjb21wb25lbnQuY29tcG9uZW50cygpLCByZW1vdmVGcm9tV29ybGQpO1xuICAgICAgICAgIHJlZ2lzdHJ5LnVucmVnaXN0ZXIoY29tcG9uZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjb21wb25lbnQuZGlzY29ubmVjdCgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkZCA9IGNvbXBvbmVudCA9PiB7XG4gICAgICAgIGF0dGFjaChyb290LCBjb21wb25lbnQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlbW92ZSA9IGNvbXBvbmVudCA9PiB7XG4gICAgICAgIGRldGFjaChjb21wb25lbnQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICAgIGRvbUV2ZW50cy51bmJpbmQoKTtcbiAgICAgICAgcmVtb3ZlJDUocm9vdC5lbGVtZW50KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBicm9hZGNhc3REYXRhID0gZGF0YSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVycyA9IHJlZ2lzdHJ5LmZpbHRlcihyZWNlaXZlKCkpO1xuICAgICAgICBlYWNoJDEocmVjZWl2ZXJzLCByZWNlaXZlciA9PiB7XG4gICAgICAgICAgY29uc3QgZGVzY0hhbmRsZXIgPSByZWNlaXZlci5kZXNjSGFuZGxlcjtcbiAgICAgICAgICBjb25zdCBoYW5kbGVyID0gZ2V0Q3VycmllZChkZXNjSGFuZGxlcik7XG4gICAgICAgICAgaGFuZGxlcihkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgYnJvYWRjYXN0JDEgPSBtZXNzYWdlID0+IHtcbiAgICAgICAgYnJvYWRjYXN0RGF0YSh7XG4gICAgICAgICAgdW5pdmVyc2FsOiB0cnVlLFxuICAgICAgICAgIGRhdGE6IG1lc3NhZ2VcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgYnJvYWRjYXN0T24gPSAoY2hhbm5lbHMsIG1lc3NhZ2UpID0+IHtcbiAgICAgICAgYnJvYWRjYXN0RGF0YSh7XG4gICAgICAgICAgdW5pdmVyc2FsOiBmYWxzZSxcbiAgICAgICAgICBjaGFubmVscyxcbiAgICAgICAgICBkYXRhOiBtZXNzYWdlXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGJyb2FkY2FzdEV2ZW50ID0gKGV2ZW50TmFtZSwgZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gcmVnaXN0cnkuZmlsdGVyKGV2ZW50TmFtZSk7XG4gICAgICAgIHJldHVybiBicm9hZGNhc3QobGlzdGVuZXJzLCBldmVudCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0QnlVaWQgPSB1aWQgPT4gcmVnaXN0cnkuZ2V0QnlJZCh1aWQpLmZvbGQoKCkgPT4gUmVzdWx0LmVycm9yKG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgY29tcG9uZW50IHdpdGggdWlkOiBcIicgKyB1aWQgKyAnXCIgaW4gc3lzdGVtLicpKSwgUmVzdWx0LnZhbHVlKTtcbiAgICAgIGNvbnN0IGdldEJ5RG9tID0gZWxlbSA9PiB7XG4gICAgICAgIGNvbnN0IHVpZCA9IHJlYWQkMShlbGVtKS5nZXRPcignbm90IGZvdW5kJyk7XG4gICAgICAgIHJldHVybiBnZXRCeVVpZCh1aWQpO1xuICAgICAgfTtcbiAgICAgIGFkZFRvV29ybGQocm9vdCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByb290LFxuICAgICAgICBlbGVtZW50OiByb290LmVsZW1lbnQsXG4gICAgICAgIGRlc3Ryb3ksXG4gICAgICAgIGFkZCxcbiAgICAgICAgcmVtb3ZlLFxuICAgICAgICBnZXRCeVVpZCxcbiAgICAgICAgZ2V0QnlEb20sXG4gICAgICAgIGFkZFRvV29ybGQsXG4gICAgICAgIHJlbW92ZUZyb21Xb3JsZCxcbiAgICAgICAgYnJvYWRjYXN0OiBicm9hZGNhc3QkMSxcbiAgICAgICAgYnJvYWRjYXN0T24sXG4gICAgICAgIGJyb2FkY2FzdEV2ZW50XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJCYXIgPSAoc3BlYywgYmFja3N0YWdlKSA9PiAoe1xuICAgICAgZG9tOiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAndG94LWJhcicsXG4gICAgICAgICAgJ3RveC1mb3JtX19jb250cm9scy1oLXN0YWNrJ1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czogbWFwJDIoc3BlYy5pdGVtcywgYmFja3N0YWdlLmludGVycHJldGVyKVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2NoZW1hJGogPSBjb25zdGFudCQxKFtcbiAgICAgIGRlZmF1bHRlZCgncHJlZml4JywgJ2Zvcm0tZmllbGQnKSxcbiAgICAgIGZpZWxkKCdmaWVsZEJlaGF2aW91cnMnLCBbXG4gICAgICAgIENvbXBvc2luZyxcbiAgICAgICAgUmVwcmVzZW50aW5nXG4gICAgICBdKVxuICAgIF0pO1xuICAgIGNvbnN0IHBhcnRzJGQgPSBjb25zdGFudCQxKFtcbiAgICAgIG9wdGlvbmFsKHtcbiAgICAgICAgc2NoZW1hOiBbcmVxdWlyZWQkMSgnZG9tJyldLFxuICAgICAgICBuYW1lOiAnbGFiZWwnXG4gICAgICB9KSxcbiAgICAgIG9wdGlvbmFsKHtcbiAgICAgICAgZmFjdG9yeToge1xuICAgICAgICAgIHNrZXRjaDogc3BlYyA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB1aWQ6IHNwZWMudWlkLFxuICAgICAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgICAgICB0YWc6ICdzcGFuJyxcbiAgICAgICAgICAgICAgICBzdHlsZXM6IHsgZGlzcGxheTogJ25vbmUnIH0sXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogeyAnYXJpYS1oaWRkZW4nOiAndHJ1ZScgfSxcbiAgICAgICAgICAgICAgICBpbm5lckh0bWw6IHNwZWMudGV4dFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc2NoZW1hOiBbcmVxdWlyZWQkMSgndGV4dCcpXSxcbiAgICAgICAgbmFtZTogJ2FyaWEtZGVzY3JpcHRvcidcbiAgICAgIH0pLFxuICAgICAgcmVxdWlyZWQoe1xuICAgICAgICBmYWN0b3J5OiB7XG4gICAgICAgICAgc2tldGNoOiBzcGVjID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVGYWN0b3J5ID0gZXhjbHVkZShzcGVjLCBbJ2ZhY3RvcnknXSk7XG4gICAgICAgICAgICByZXR1cm4gc3BlYy5mYWN0b3J5LnNrZXRjaChleGNsdWRlRmFjdG9yeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzY2hlbWE6IFtyZXF1aXJlZCQxKCdmYWN0b3J5JyldLFxuICAgICAgICBuYW1lOiAnZmllbGQnXG4gICAgICB9KVxuICAgIF0pO1xuXG4gICAgY29uc3QgZmFjdG9yeSRpID0gKGRldGFpbCwgY29tcG9uZW50cywgX3NwZWMsIF9leHRlcm5hbHMpID0+IHtcbiAgICAgIGNvbnN0IGJlaGF2aW91cnMgPSBhdWdtZW50KGRldGFpbC5maWVsZEJlaGF2aW91cnMsIFtcbiAgICAgICAgQ29tcG9zaW5nLmNvbmZpZyh7XG4gICAgICAgICAgZmluZDogY29udGFpbmVyID0+IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRQYXJ0KGNvbnRhaW5lciwgZGV0YWlsLCAnZmllbGQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBSZXByZXNlbnRpbmcuY29uZmlnKHtcbiAgICAgICAgICBzdG9yZToge1xuICAgICAgICAgICAgbW9kZTogJ21hbnVhbCcsXG4gICAgICAgICAgICBnZXRWYWx1ZTogZmllbGQgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gQ29tcG9zaW5nLmdldEN1cnJlbnQoZmllbGQpLmJpbmQoUmVwcmVzZW50aW5nLmdldFZhbHVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRWYWx1ZTogKGZpZWxkLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICBDb21wb3NpbmcuZ2V0Q3VycmVudChmaWVsZCkuZWFjaChjdXJyZW50ID0+IHtcbiAgICAgICAgICAgICAgICBSZXByZXNlbnRpbmcuc2V0VmFsdWUoY3VycmVudCwgdmFsdWUpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICBdKTtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IGRlcml2ZSQyKFtydW5PbkF0dGFjaGVkKChjb21wb25lbnQsIF9zaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBzID0gZ2V0UGFydHMoY29tcG9uZW50LCBkZXRhaWwsIFtcbiAgICAgICAgICAgICdsYWJlbCcsXG4gICAgICAgICAgICAnZmllbGQnLFxuICAgICAgICAgICAgJ2FyaWEtZGVzY3JpcHRvcidcbiAgICAgICAgICBdKTtcbiAgICAgICAgICBwcy5maWVsZCgpLmVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBnZW5lcmF0ZSQ2KGRldGFpbC5wcmVmaXgpO1xuICAgICAgICAgICAgcHMubGFiZWwoKS5lYWNoKGxhYmVsID0+IHtcbiAgICAgICAgICAgICAgc2V0JDkobGFiZWwuZWxlbWVudCwgJ2ZvcicsIGlkKTtcbiAgICAgICAgICAgICAgc2V0JDkoZmllbGQuZWxlbWVudCwgJ2lkJywgaWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwc1snYXJpYS1kZXNjcmlwdG9yJ10oKS5lYWNoKGRlc2NyaXB0b3IgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBkZXNjcmlwdG9ySWQgPSBnZW5lcmF0ZSQ2KGRldGFpbC5wcmVmaXgpO1xuICAgICAgICAgICAgICBzZXQkOShkZXNjcmlwdG9yLmVsZW1lbnQsICdpZCcsIGRlc2NyaXB0b3JJZCk7XG4gICAgICAgICAgICAgIHNldCQ5KGZpZWxkLmVsZW1lbnQsICdhcmlhLWRlc2NyaWJlZGJ5JywgZGVzY3JpcHRvcklkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KV0pO1xuICAgICAgY29uc3QgYXBpcyA9IHtcbiAgICAgICAgZ2V0RmllbGQ6IGNvbnRhaW5lciA9PiBnZXRQYXJ0KGNvbnRhaW5lciwgZGV0YWlsLCAnZmllbGQnKSxcbiAgICAgICAgZ2V0TGFiZWw6IGNvbnRhaW5lciA9PiBnZXRQYXJ0KGNvbnRhaW5lciwgZGV0YWlsLCAnbGFiZWwnKVxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVpZDogZGV0YWlsLnVpZCxcbiAgICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICBiZWhhdmlvdXJzLFxuICAgICAgICBldmVudHMsXG4gICAgICAgIGFwaXNcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBGb3JtRmllbGQgPSBjb21wb3NpdGUoe1xuICAgICAgbmFtZTogJ0Zvcm1GaWVsZCcsXG4gICAgICBjb25maWdGaWVsZHM6IHNjaGVtYSRqKCksXG4gICAgICBwYXJ0RmllbGRzOiBwYXJ0cyRkKCksXG4gICAgICBmYWN0b3J5OiBmYWN0b3J5JGksXG4gICAgICBhcGlzOiB7XG4gICAgICAgIGdldEZpZWxkOiAoYXBpcywgY29tcCkgPT4gYXBpcy5nZXRGaWVsZChjb21wKSxcbiAgICAgICAgZ2V0TGFiZWw6IChhcGlzLCBjb21wKSA9PiBhcGlzLmdldExhYmVsKGNvbXApXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBleGhpYml0JDIgPSAoYmFzZSwgdGFiQ29uZmlnKSA9PiBudSQ3KHtcbiAgICAgIGF0dHJpYnV0ZXM6IHdyYXBBbGwoW3tcbiAgICAgICAgICBrZXk6IHRhYkNvbmZpZy50YWJBdHRyLFxuICAgICAgICAgIHZhbHVlOiAndHJ1ZSdcbiAgICAgICAgfV0pXG4gICAgfSk7XG5cbiAgICB2YXIgQWN0aXZlVGFic3RvcHBpbmcgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgZXhoaWJpdDogZXhoaWJpdCQyXG4gICAgfSk7XG5cbiAgICB2YXIgVGFic3RvcFNjaGVtYSA9IFtkZWZhdWx0ZWQoJ3RhYkF0dHInLCAnZGF0YS1hbGxveS10YWJzdG9wJyldO1xuXG4gICAgY29uc3QgVGFic3RvcHBpbmcgPSBjcmVhdGUkNCh7XG4gICAgICBmaWVsZHM6IFRhYnN0b3BTY2hlbWEsXG4gICAgICBuYW1lOiAndGFic3RvcHBpbmcnLFxuICAgICAgYWN0aXZlOiBBY3RpdmVUYWJzdG9wcGluZ1xuICAgIH0pO1xuXG4gICAgdmFyIGdsb2JhbCQzID0gdGlueW1jZS51dGlsLlRvb2xzLnJlc29sdmUoJ3RpbnltY2UuaHRtbC5FbnRpdGllcycpO1xuXG4gICAgY29uc3QgcmVuZGVyRm9ybUZpZWxkV2l0aCA9IChwTGFiZWwsIHBGaWVsZCwgZXh0cmFDbGFzc2VzLCBleHRyYUJlaGF2aW91cnMpID0+IHtcbiAgICAgIGNvbnN0IHNwZWMgPSByZW5kZXJGb3JtRmllbGRTcGVjV2l0aChwTGFiZWwsIHBGaWVsZCwgZXh0cmFDbGFzc2VzLCBleHRyYUJlaGF2aW91cnMpO1xuICAgICAgcmV0dXJuIEZvcm1GaWVsZC5za2V0Y2goc3BlYyk7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJGb3JtRmllbGQgPSAocExhYmVsLCBwRmllbGQpID0+IHJlbmRlckZvcm1GaWVsZFdpdGgocExhYmVsLCBwRmllbGQsIFtdLCBbXSk7XG4gICAgY29uc3QgcmVuZGVyRm9ybUZpZWxkU3BlY1dpdGggPSAocExhYmVsLCBwRmllbGQsIGV4dHJhQ2xhc3NlcywgZXh0cmFCZWhhdmlvdXJzKSA9PiAoe1xuICAgICAgZG9tOiByZW5kZXJGb3JtRmllbGREb21XaXRoKGV4dHJhQ2xhc3NlcyksXG4gICAgICBjb21wb25lbnRzOiBwTGFiZWwudG9BcnJheSgpLmNvbmNhdChbcEZpZWxkXSksXG4gICAgICBmaWVsZEJlaGF2aW91cnM6IGRlcml2ZSQxKGV4dHJhQmVoYXZpb3VycylcbiAgICB9KTtcbiAgICBjb25zdCByZW5kZXJGb3JtRmllbGREb20gPSAoKSA9PiByZW5kZXJGb3JtRmllbGREb21XaXRoKFtdKTtcbiAgICBjb25zdCByZW5kZXJGb3JtRmllbGREb21XaXRoID0gZXh0cmFDbGFzc2VzID0+ICh7XG4gICAgICB0YWc6ICdkaXYnLFxuICAgICAgY2xhc3NlczogWyd0b3gtZm9ybV9fZ3JvdXAnXS5jb25jYXQoZXh0cmFDbGFzc2VzKVxuICAgIH0pO1xuICAgIGNvbnN0IHJlbmRlckxhYmVsJDMgPSAobGFiZWwsIHByb3ZpZGVyc0JhY2tzdGFnZSkgPT4gRm9ybUZpZWxkLnBhcnRzLmxhYmVsKHtcbiAgICAgIGRvbToge1xuICAgICAgICB0YWc6ICdsYWJlbCcsXG4gICAgICAgIGNsYXNzZXM6IFsndG94LWxhYmVsJ11cbiAgICAgIH0sXG4gICAgICBjb21wb25lbnRzOiBbdGV4dCQyKHByb3ZpZGVyc0JhY2tzdGFnZS50cmFuc2xhdGUobGFiZWwpKV1cbiAgICB9KTtcblxuICAgIGNvbnN0IGZvcm1DaGFuZ2VFdmVudCA9IGdlbmVyYXRlJDYoJ2Zvcm0tY29tcG9uZW50LWNoYW5nZScpO1xuICAgIGNvbnN0IGZvcm1DbG9zZUV2ZW50ID0gZ2VuZXJhdGUkNignZm9ybS1jbG9zZScpO1xuICAgIGNvbnN0IGZvcm1DYW5jZWxFdmVudCA9IGdlbmVyYXRlJDYoJ2Zvcm0tY2FuY2VsJyk7XG4gICAgY29uc3QgZm9ybUFjdGlvbkV2ZW50ID0gZ2VuZXJhdGUkNignZm9ybS1hY3Rpb24nKTtcbiAgICBjb25zdCBmb3JtU3VibWl0RXZlbnQgPSBnZW5lcmF0ZSQ2KCdmb3JtLXN1Ym1pdCcpO1xuICAgIGNvbnN0IGZvcm1CbG9ja0V2ZW50ID0gZ2VuZXJhdGUkNignZm9ybS1ibG9jaycpO1xuICAgIGNvbnN0IGZvcm1VbmJsb2NrRXZlbnQgPSBnZW5lcmF0ZSQ2KCdmb3JtLXVuYmxvY2snKTtcbiAgICBjb25zdCBmb3JtVGFiQ2hhbmdlRXZlbnQgPSBnZW5lcmF0ZSQ2KCdmb3JtLXRhYmNoYW5nZScpO1xuICAgIGNvbnN0IGZvcm1SZXNpemVFdmVudCA9IGdlbmVyYXRlJDYoJ2Zvcm0tcmVzaXplJyk7XG5cbiAgICBjb25zdCByZW5kZXJDb2xsZWN0aW9uID0gKHNwZWMsIHByb3ZpZGVyc0JhY2tzdGFnZSwgaW5pdGlhbERhdGEpID0+IHtcbiAgICAgIGNvbnN0IHBMYWJlbCA9IHNwZWMubGFiZWwubWFwKGxhYmVsID0+IHJlbmRlckxhYmVsJDMobGFiZWwsIHByb3ZpZGVyc0JhY2tzdGFnZSkpO1xuICAgICAgY29uc3QgcnVuT25JdGVtID0gZiA9PiAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgY2xvc2VzdCQxKHNlLmV2ZW50LnRhcmdldCwgJ1tkYXRhLWNvbGxlY3Rpb24taXRlbS12YWx1ZV0nKS5lYWNoKHRhcmdldCA9PiB7XG4gICAgICAgICAgZihjb21wLCBzZSwgdGFyZ2V0LCBnZXQkZih0YXJnZXQsICdkYXRhLWNvbGxlY3Rpb24taXRlbS12YWx1ZScpKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0Q29udGVudHMgPSAoY29tcCwgaXRlbXMpID0+IHtcbiAgICAgICAgY29uc3QgaHRtbExpbmVzID0gbWFwJDIoaXRlbXMsIGl0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW1UZXh0ID0gZ2xvYmFsJDgudHJhbnNsYXRlKGl0ZW0udGV4dCk7XG4gICAgICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSBzcGVjLmNvbHVtbnMgPT09IDEgPyBgPGRpdiBjbGFzcz1cInRveC1jb2xsZWN0aW9uX19pdGVtLWxhYmVsXCI+JHsgaXRlbVRleHQgfTwvZGl2PmAgOiAnJztcbiAgICAgICAgICBjb25zdCBpY29uQ29udGVudCA9IGA8ZGl2IGNsYXNzPVwidG94LWNvbGxlY3Rpb25fX2l0ZW0taWNvblwiPiR7IGl0ZW0uaWNvbiB9PC9kaXY+YDtcbiAgICAgICAgICBjb25zdCBtYXBJdGVtTmFtZSA9IHtcbiAgICAgICAgICAgICdfJzogJyAnLFxuICAgICAgICAgICAgJyAtICc6ICcgJyxcbiAgICAgICAgICAgICctJzogJyAnXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBhcmlhTGFiZWwgPSBpdGVtVGV4dC5yZXBsYWNlKC9cXF98IFxcLSB8XFwtL2csIG1hdGNoID0+IG1hcEl0ZW1OYW1lW21hdGNoXSk7XG4gICAgICAgICAgY29uc3QgZGlzYWJsZWRDbGFzcyA9IHByb3ZpZGVyc0JhY2tzdGFnZS5pc0Rpc2FibGVkKCkgPyAnIHRveC1jb2xsZWN0aW9uX19pdGVtLS1zdGF0ZS1kaXNhYmxlZCcgOiAnJztcbiAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJ0b3gtY29sbGVjdGlvbl9faXRlbSR7IGRpc2FibGVkQ2xhc3MgfVwiIHRhYmluZGV4PVwiLTFcIiBkYXRhLWNvbGxlY3Rpb24taXRlbS12YWx1ZT1cIiR7IGdsb2JhbCQzLmVuY29kZUFsbFJhdyhpdGVtLnZhbHVlKSB9XCIgdGl0bGU9XCIkeyBhcmlhTGFiZWwgfVwiIGFyaWEtbGFiZWw9XCIkeyBhcmlhTGFiZWwgfVwiPiR7IGljb25Db250ZW50IH0keyB0ZXh0Q29udGVudCB9PC9kaXY+YDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNodW5rcyA9IHNwZWMuY29sdW1ucyAhPT0gJ2F1dG8nICYmIHNwZWMuY29sdW1ucyA+IDEgPyBjaHVuayQxKGh0bWxMaW5lcywgc3BlYy5jb2x1bW5zKSA6IFtodG1sTGluZXNdO1xuICAgICAgICBjb25zdCBodG1sID0gbWFwJDIoY2h1bmtzLCBjaCA9PiBgPGRpdiBjbGFzcz1cInRveC1jb2xsZWN0aW9uX19ncm91cFwiPiR7IGNoLmpvaW4oJycpIH08L2Rpdj5gKTtcbiAgICAgICAgc2V0JDYoY29tcC5lbGVtZW50LCBodG1sLmpvaW4oJycpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBvbkNsaWNrID0gcnVuT25JdGVtKChjb21wLCBzZSwgdGd0LCBpdGVtVmFsdWUpID0+IHtcbiAgICAgICAgc2Uuc3RvcCgpO1xuICAgICAgICBpZiAoIXByb3ZpZGVyc0JhY2tzdGFnZS5pc0Rpc2FibGVkKCkpIHtcbiAgICAgICAgICBlbWl0V2l0aChjb21wLCBmb3JtQWN0aW9uRXZlbnQsIHtcbiAgICAgICAgICAgIG5hbWU6IHNwZWMubmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtVmFsdWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBjb2xsZWN0aW9uRXZlbnRzID0gW1xuICAgICAgICBydW4kMShtb3VzZW92ZXIoKSwgcnVuT25JdGVtKChjb21wLCBzZSwgdGd0KSA9PiB7XG4gICAgICAgICAgZm9jdXMkMyh0Z3QpO1xuICAgICAgICB9KSksXG4gICAgICAgIHJ1biQxKGNsaWNrKCksIG9uQ2xpY2spLFxuICAgICAgICBydW4kMSh0YXAoKSwgb25DbGljayksXG4gICAgICAgIHJ1biQxKGZvY3VzaW4oKSwgcnVuT25JdGVtKChjb21wLCBzZSwgdGd0KSA9PiB7XG4gICAgICAgICAgZGVzY2VuZGFudChjb21wLmVsZW1lbnQsICcuJyArIGFjdGl2ZUNsYXNzKS5lYWNoKGN1cnJlbnRBY3RpdmUgPT4ge1xuICAgICAgICAgICAgcmVtb3ZlJDIoY3VycmVudEFjdGl2ZSwgYWN0aXZlQ2xhc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGFkZCQyKHRndCwgYWN0aXZlQ2xhc3MpO1xuICAgICAgICB9KSksXG4gICAgICAgIHJ1biQxKGZvY3Vzb3V0KCksIHJ1bk9uSXRlbShjb21wID0+IHtcbiAgICAgICAgICBkZXNjZW5kYW50KGNvbXAuZWxlbWVudCwgJy4nICsgYWN0aXZlQ2xhc3MpLmVhY2goY3VycmVudEFjdGl2ZSA9PiB7XG4gICAgICAgICAgICByZW1vdmUkMihjdXJyZW50QWN0aXZlLCBhY3RpdmVDbGFzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pKSxcbiAgICAgICAgcnVuT25FeGVjdXRlJDEocnVuT25JdGVtKChjb21wLCBzZSwgdGd0LCBpdGVtVmFsdWUpID0+IHtcbiAgICAgICAgICBlbWl0V2l0aChjb21wLCBmb3JtQWN0aW9uRXZlbnQsIHtcbiAgICAgICAgICAgIG5hbWU6IHNwZWMubmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtVmFsdWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkpXG4gICAgICBdO1xuICAgICAgY29uc3QgaXRlckNvbGxlY3Rpb25JdGVtcyA9IChjb21wLCBhcHBseUF0dHJpYnV0ZXMpID0+IG1hcCQyKGRlc2NlbmRhbnRzKGNvbXAuZWxlbWVudCwgJy50b3gtY29sbGVjdGlvbl9faXRlbScpLCBhcHBseUF0dHJpYnV0ZXMpO1xuICAgICAgY29uc3QgcEZpZWxkID0gRm9ybUZpZWxkLnBhcnRzLmZpZWxkKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1jb2xsZWN0aW9uJ10uY29uY2F0KHNwZWMuY29sdW1ucyAhPT0gMSA/IFsndG94LWNvbGxlY3Rpb24tLWdyaWQnXSA6IFsndG94LWNvbGxlY3Rpb24tLWxpc3QnXSlcbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW10sXG4gICAgICAgIGZhY3Rvcnk6IHsgc2tldGNoOiBpZGVudGl0eSB9LFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgRGlzYWJsaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBkaXNhYmxlZDogcHJvdmlkZXJzQmFja3N0YWdlLmlzRGlzYWJsZWQsXG4gICAgICAgICAgICBvbkRpc2FibGVkOiBjb21wID0+IHtcbiAgICAgICAgICAgICAgaXRlckNvbGxlY3Rpb25JdGVtcyhjb21wLCBjaGlsZEVsbSA9PiB7XG4gICAgICAgICAgICAgICAgYWRkJDIoY2hpbGRFbG0sICd0b3gtY29sbGVjdGlvbl9faXRlbS0tc3RhdGUtZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICBzZXQkOShjaGlsZEVsbSwgJ2FyaWEtZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25FbmFibGVkOiBjb21wID0+IHtcbiAgICAgICAgICAgICAgaXRlckNvbGxlY3Rpb25JdGVtcyhjb21wLCBjaGlsZEVsbSA9PiB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlJDIoY2hpbGRFbG0sICd0b3gtY29sbGVjdGlvbl9faXRlbS0tc3RhdGUtZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICByZW1vdmUkNyhjaGlsZEVsbSwgJ2FyaWEtZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcmVjZWl2aW5nQ29uZmlnKCksXG4gICAgICAgICAgUmVwbGFjaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgUmVwcmVzZW50aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBzdG9yZToge1xuICAgICAgICAgICAgICBtb2RlOiAnbWVtb3J5JyxcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiBpbml0aWFsRGF0YS5nZXRPcihbXSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblNldFZhbHVlOiAoY29tcCwgaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgc2V0Q29udGVudHMoY29tcCwgaXRlbXMpO1xuICAgICAgICAgICAgICBpZiAoc3BlYy5jb2x1bW5zID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgICAgICBkZXRlY3RTaXplKGNvbXAsIDUsICd0b3gtY29sbGVjdGlvbl9faXRlbScpLmVhY2goKHtudW1Sb3dzLCBudW1Db2x1bW5zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgS2V5aW5nLnNldEdyaWRTaXplKGNvbXAsIG51bVJvd3MsIG51bUNvbHVtbnMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVtaXQoY29tcCwgZm9ybVJlc2l6ZUV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBUYWJzdG9wcGluZy5jb25maWcoe30pLFxuICAgICAgICAgIEtleWluZy5jb25maWcoZGVyaXZlQ29sbGVjdGlvbk1vdmVtZW50KHNwZWMuY29sdW1ucywgJ25vcm1hbCcpKSxcbiAgICAgICAgICBjb25maWcoJ2NvbGxlY3Rpb24tZXZlbnRzJywgY29sbGVjdGlvbkV2ZW50cylcbiAgICAgICAgXSksXG4gICAgICAgIGV2ZW50T3JkZXI6IHtcbiAgICAgICAgICBbZXhlY3V0ZSQ1KCldOiBbXG4gICAgICAgICAgICAnZGlzYWJsaW5nJyxcbiAgICAgICAgICAgICdhbGxveS5iYXNlLmJlaGF2aW91cicsXG4gICAgICAgICAgICAnY29sbGVjdGlvbi1ldmVudHMnXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGV4dHJhQ2xhc3NlcyA9IFsndG94LWZvcm1fX2dyb3VwLS1jb2xsZWN0aW9uJ107XG4gICAgICByZXR1cm4gcmVuZGVyRm9ybUZpZWxkV2l0aChwTGFiZWwsIHBGaWVsZCwgZXh0cmFDbGFzc2VzLCBbXSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFyaWFFbGVtZW50cyA9IFtcbiAgICAgICdpbnB1dCcsXG4gICAgICAndGV4dGFyZWEnXG4gICAgXTtcbiAgICBjb25zdCBpc0FyaWFFbGVtZW50ID0gZWxlbSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gbmFtZSQzKGVsZW0pO1xuICAgICAgcmV0dXJuIGNvbnRhaW5zJDIoYXJpYUVsZW1lbnRzLCBuYW1lKTtcbiAgICB9O1xuICAgIGNvbnN0IG1hcmtWYWxpZCA9IChjb21wb25lbnQsIGludmFsaWRDb25maWcpID0+IHtcbiAgICAgIGNvbnN0IGVsZW0gPSBpbnZhbGlkQ29uZmlnLmdldFJvb3QoY29tcG9uZW50KS5nZXRPcihjb21wb25lbnQuZWxlbWVudCk7XG4gICAgICByZW1vdmUkMihlbGVtLCBpbnZhbGlkQ29uZmlnLmludmFsaWRDbGFzcyk7XG4gICAgICBpbnZhbGlkQ29uZmlnLm5vdGlmeS5lYWNoKG5vdGlmeUluZm8gPT4ge1xuICAgICAgICBpZiAoaXNBcmlhRWxlbWVudChjb21wb25lbnQuZWxlbWVudCkpIHtcbiAgICAgICAgICBzZXQkOShjb21wb25lbnQuZWxlbWVudCwgJ2FyaWEtaW52YWxpZCcsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBub3RpZnlJbmZvLmdldENvbnRhaW5lcihjb21wb25lbnQpLmVhY2goY29udGFpbmVyID0+IHtcbiAgICAgICAgICBzZXQkNihjb250YWluZXIsIG5vdGlmeUluZm8udmFsaWRIdG1sKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG5vdGlmeUluZm8ub25WYWxpZChjb21wb25lbnQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBtYXJrSW52YWxpZCA9IChjb21wb25lbnQsIGludmFsaWRDb25maWcsIGludmFsaWRTdGF0ZSwgdGV4dCkgPT4ge1xuICAgICAgY29uc3QgZWxlbSA9IGludmFsaWRDb25maWcuZ2V0Um9vdChjb21wb25lbnQpLmdldE9yKGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgIGFkZCQyKGVsZW0sIGludmFsaWRDb25maWcuaW52YWxpZENsYXNzKTtcbiAgICAgIGludmFsaWRDb25maWcubm90aWZ5LmVhY2gobm90aWZ5SW5mbyA9PiB7XG4gICAgICAgIGlmIChpc0FyaWFFbGVtZW50KGNvbXBvbmVudC5lbGVtZW50KSkge1xuICAgICAgICAgIHNldCQ5KGNvbXBvbmVudC5lbGVtZW50LCAnYXJpYS1pbnZhbGlkJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgbm90aWZ5SW5mby5nZXRDb250YWluZXIoY29tcG9uZW50KS5lYWNoKGNvbnRhaW5lciA9PiB7XG4gICAgICAgICAgc2V0JDYoY29udGFpbmVyLCB0ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIG5vdGlmeUluZm8ub25JbnZhbGlkKGNvbXBvbmVudCwgdGV4dCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHF1ZXJ5ID0gKGNvbXBvbmVudCwgaW52YWxpZENvbmZpZywgX2ludmFsaWRTdGF0ZSkgPT4gaW52YWxpZENvbmZpZy52YWxpZGF0b3IuZm9sZCgoKSA9PiBGdXR1cmUucHVyZShSZXN1bHQudmFsdWUodHJ1ZSkpLCB2YWxpZGF0b3JJbmZvID0+IHZhbGlkYXRvckluZm8udmFsaWRhdGUoY29tcG9uZW50KSk7XG4gICAgY29uc3QgcnVuID0gKGNvbXBvbmVudCwgaW52YWxpZENvbmZpZywgaW52YWxpZFN0YXRlKSA9PiB7XG4gICAgICBpbnZhbGlkQ29uZmlnLm5vdGlmeS5lYWNoKG5vdGlmeUluZm8gPT4ge1xuICAgICAgICBub3RpZnlJbmZvLm9uVmFsaWRhdGUoY29tcG9uZW50KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHF1ZXJ5KGNvbXBvbmVudCwgaW52YWxpZENvbmZpZykubWFwKHZhbGlkID0+IHtcbiAgICAgICAgaWYgKGNvbXBvbmVudC5nZXRTeXN0ZW0oKS5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbGlkLmZvbGQoZXJyID0+IHtcbiAgICAgICAgICAgIG1hcmtJbnZhbGlkKGNvbXBvbmVudCwgaW52YWxpZENvbmZpZywgaW52YWxpZFN0YXRlLCBlcnIpO1xuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvcihlcnIpO1xuICAgICAgICAgIH0sIHYgPT4ge1xuICAgICAgICAgICAgbWFya1ZhbGlkKGNvbXBvbmVudCwgaW52YWxpZENvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnZhbHVlKHYpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3IoJ05vIGxvbmdlciBpbiBzeXN0ZW0nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBpc0ludmFsaWQgPSAoY29tcG9uZW50LCBpbnZhbGlkQ29uZmlnKSA9PiB7XG4gICAgICBjb25zdCBlbGVtID0gaW52YWxpZENvbmZpZy5nZXRSb290KGNvbXBvbmVudCkuZ2V0T3IoY29tcG9uZW50LmVsZW1lbnQpO1xuICAgICAgcmV0dXJuIGhhcyhlbGVtLCBpbnZhbGlkQ29uZmlnLmludmFsaWRDbGFzcyk7XG4gICAgfTtcblxuICAgIHZhciBJbnZhbGlkYXRlQXBpcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBtYXJrVmFsaWQ6IG1hcmtWYWxpZCxcbiAgICAgICAgbWFya0ludmFsaWQ6IG1hcmtJbnZhbGlkLFxuICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgIHJ1bjogcnVuLFxuICAgICAgICBpc0ludmFsaWQ6IGlzSW52YWxpZFxuICAgIH0pO1xuXG4gICAgY29uc3QgZXZlbnRzJDggPSAoaW52YWxpZENvbmZpZywgaW52YWxpZFN0YXRlKSA9PiBpbnZhbGlkQ29uZmlnLnZhbGlkYXRvci5tYXAodmFsaWRhdG9ySW5mbyA9PiBkZXJpdmUkMihbcnVuJDEodmFsaWRhdG9ySW5mby5vbkV2ZW50LCBjb21wb25lbnQgPT4ge1xuICAgICAgICBydW4oY29tcG9uZW50LCBpbnZhbGlkQ29uZmlnLCBpbnZhbGlkU3RhdGUpLmdldChpZGVudGl0eSk7XG4gICAgICB9KV0uY29uY2F0KHZhbGlkYXRvckluZm8udmFsaWRhdGVPbkxvYWQgPyBbcnVuT25BdHRhY2hlZChjb21wb25lbnQgPT4ge1xuICAgICAgICBydW4oY29tcG9uZW50LCBpbnZhbGlkQ29uZmlnLCBpbnZhbGlkU3RhdGUpLmdldChub29wKTtcbiAgICAgIH0pXSA6IFtdKSkpLmdldE9yKHt9KTtcblxuICAgIHZhciBBY3RpdmVJbnZhbGlkYXRlID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIGV2ZW50czogZXZlbnRzJDhcbiAgICB9KTtcblxuICAgIHZhciBJbnZhbGlkYXRlU2NoZW1hID0gW1xuICAgICAgcmVxdWlyZWQkMSgnaW52YWxpZENsYXNzJyksXG4gICAgICBkZWZhdWx0ZWQoJ2dldFJvb3QnLCBPcHRpb25hbC5ub25lKSxcbiAgICAgIG9wdGlvbk9iak9mKCdub3RpZnknLCBbXG4gICAgICAgIGRlZmF1bHRlZCgnYXJpYScsICdhbGVydCcpLFxuICAgICAgICBkZWZhdWx0ZWQoJ2dldENvbnRhaW5lcicsIE9wdGlvbmFsLm5vbmUpLFxuICAgICAgICBkZWZhdWx0ZWQoJ3ZhbGlkSHRtbCcsICcnKSxcbiAgICAgICAgb25IYW5kbGVyKCdvblZhbGlkJyksXG4gICAgICAgIG9uSGFuZGxlcignb25JbnZhbGlkJyksXG4gICAgICAgIG9uSGFuZGxlcignb25WYWxpZGF0ZScpXG4gICAgICBdKSxcbiAgICAgIG9wdGlvbk9iak9mKCd2YWxpZGF0b3InLCBbXG4gICAgICAgIHJlcXVpcmVkJDEoJ3ZhbGlkYXRlJyksXG4gICAgICAgIGRlZmF1bHRlZCgnb25FdmVudCcsICdpbnB1dCcpLFxuICAgICAgICBkZWZhdWx0ZWQoJ3ZhbGlkYXRlT25Mb2FkJywgdHJ1ZSlcbiAgICAgIF0pXG4gICAgXTtcblxuICAgIGNvbnN0IEludmFsaWRhdGluZyA9IGNyZWF0ZSQ0KHtcbiAgICAgIGZpZWxkczogSW52YWxpZGF0ZVNjaGVtYSxcbiAgICAgIG5hbWU6ICdpbnZhbGlkYXRpbmcnLFxuICAgICAgYWN0aXZlOiBBY3RpdmVJbnZhbGlkYXRlLFxuICAgICAgYXBpczogSW52YWxpZGF0ZUFwaXMsXG4gICAgICBleHRyYToge1xuICAgICAgICB2YWxpZGF0aW9uOiB2YWxpZGF0b3IgPT4ge1xuICAgICAgICAgIHJldHVybiBjb21wb25lbnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgdiA9IFJlcHJlc2VudGluZy5nZXRWYWx1ZShjb21wb25lbnQpO1xuICAgICAgICAgICAgcmV0dXJuIEZ1dHVyZS5wdXJlKHZhbGlkYXRvcih2KSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZXhoaWJpdCQxID0gKCkgPT4gbnUkNyh7XG4gICAgICBzdHlsZXM6IHtcbiAgICAgICAgJy13ZWJraXQtdXNlci1zZWxlY3QnOiAnbm9uZScsXG4gICAgICAgICd1c2VyLXNlbGVjdCc6ICdub25lJyxcbiAgICAgICAgJy1tcy11c2VyLXNlbGVjdCc6ICdub25lJyxcbiAgICAgICAgJy1tb3otdXNlci1zZWxlY3QnOiAnLW1vei1ub25lJ1xuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZXM6IHsgdW5zZWxlY3RhYmxlOiAnb24nIH1cbiAgICB9KTtcbiAgICBjb25zdCBldmVudHMkNyA9ICgpID0+IGRlcml2ZSQyKFthYm9ydChzZWxlY3RzdGFydCgpLCBhbHdheXMpXSk7XG5cbiAgICB2YXIgQWN0aXZlVW5zZWxlY3RpbmcgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgZXZlbnRzOiBldmVudHMkNyxcbiAgICAgICAgZXhoaWJpdDogZXhoaWJpdCQxXG4gICAgfSk7XG5cbiAgICBjb25zdCBVbnNlbGVjdGluZyA9IGNyZWF0ZSQ0KHtcbiAgICAgIGZpZWxkczogW10sXG4gICAgICBuYW1lOiAndW5zZWxlY3RpbmcnLFxuICAgICAgYWN0aXZlOiBBY3RpdmVVbnNlbGVjdGluZ1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVuZGVyUGFuZWxCdXR0b24gPSAoc3BlYywgc2hhcmVkQmFja3N0YWdlKSA9PiBEcm9wZG93bi5za2V0Y2goe1xuICAgICAgZG9tOiBzcGVjLmRvbSxcbiAgICAgIGNvbXBvbmVudHM6IHNwZWMuY29tcG9uZW50cyxcbiAgICAgIHRvZ2dsZUNsYXNzOiAnbWNlLWFjdGl2ZScsXG4gICAgICBkcm9wZG93bkJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgRGlzYWJsaW5nQ29uZmlncy5idXR0b24oc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVycy5pc0Rpc2FibGVkKSxcbiAgICAgICAgcmVjZWl2aW5nQ29uZmlnKCksXG4gICAgICAgIFVuc2VsZWN0aW5nLmNvbmZpZyh7fSksXG4gICAgICAgIFRhYnN0b3BwaW5nLmNvbmZpZyh7fSlcbiAgICAgIF0pLFxuICAgICAgbGF5b3V0czogc3BlYy5sYXlvdXRzLFxuICAgICAgc2FuZGJveENsYXNzZXM6IFsndG94LWRpYWxvZ19fcG9wdXBzJ10sXG4gICAgICBsYXp5U2luazogc2hhcmVkQmFja3N0YWdlLmdldFNpbmssXG4gICAgICBmZXRjaDogY29tcCA9PiBGdXR1cmUubnUoY2FsbGJhY2sgPT4gc3BlYy5mZXRjaChjYWxsYmFjaykpLm1hcChpdGVtcyA9PiBPcHRpb25hbC5mcm9tKGNyZWF0ZVRpZXJlZERhdGFGcm9tKGRlZXBNZXJnZShjcmVhdGVQYXJ0aWFsQ2hvaWNlTWVudShnZW5lcmF0ZSQ2KCdtZW51LXZhbHVlJyksIGl0ZW1zLCB2YWx1ZSA9PiB7XG4gICAgICAgIHNwZWMub25JdGVtQWN0aW9uKGNvbXAsIHZhbHVlKTtcbiAgICAgIH0sIHNwZWMuY29sdW1ucywgc3BlYy5wcmVzZXRzLCBJdGVtUmVzcG9uc2UkMS5DTE9TRV9PTl9FWEVDVVRFLCBuZXZlciwgc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVycyksIHsgbW92ZW1lbnQ6IGRlcml2ZU1lbnVNb3ZlbWVudChzcGVjLmNvbHVtbnMsIHNwZWMucHJlc2V0cykgfSkpKSksXG4gICAgICBwYXJ0czogeyBtZW51OiBwYXJ0KGZhbHNlLCAxLCBzcGVjLnByZXNldHMpIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbG9ySW5wdXRDaGFuZ2VFdmVudCA9IGdlbmVyYXRlJDYoJ2NvbG9yLWlucHV0LWNoYW5nZScpO1xuICAgIGNvbnN0IGNvbG9yU3dhdGNoQ2hhbmdlRXZlbnQgPSBnZW5lcmF0ZSQ2KCdjb2xvci1zd2F0Y2gtY2hhbmdlJyk7XG4gICAgY29uc3QgY29sb3JQaWNrZXJDYW5jZWxFdmVudCA9IGdlbmVyYXRlJDYoJ2NvbG9yLXBpY2tlci1jYW5jZWwnKTtcbiAgICBjb25zdCByZW5kZXJDb2xvcklucHV0ID0gKHNwZWMsIHNoYXJlZEJhY2tzdGFnZSwgY29sb3JJbnB1dEJhY2tzdGFnZSwgaW5pdGlhbERhdGEpID0+IHtcbiAgICAgIGNvbnN0IHBGaWVsZCA9IEZvcm1GaWVsZC5wYXJ0cy5maWVsZCh7XG4gICAgICAgIGZhY3Rvcnk6IElucHV0LFxuICAgICAgICBpbnB1dENsYXNzZXM6IFsndG94LXRleHRmaWVsZCddLFxuICAgICAgICBkYXRhOiBpbml0aWFsRGF0YSxcbiAgICAgICAgb25TZXRWYWx1ZTogYyA9PiBJbnZhbGlkYXRpbmcucnVuKGMpLmdldChub29wKSxcbiAgICAgICAgaW5wdXRCZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgRGlzYWJsaW5nLmNvbmZpZyh7IGRpc2FibGVkOiBzaGFyZWRCYWNrc3RhZ2UucHJvdmlkZXJzLmlzRGlzYWJsZWQgfSksXG4gICAgICAgICAgcmVjZWl2aW5nQ29uZmlnKCksXG4gICAgICAgICAgVGFic3RvcHBpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICBJbnZhbGlkYXRpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIGludmFsaWRDbGFzczogJ3RveC10ZXh0Ym94LWZpZWxkLWludmFsaWQnLFxuICAgICAgICAgICAgZ2V0Um9vdDogY29tcCA9PiBwYXJlbnRFbGVtZW50KGNvbXAuZWxlbWVudCksXG4gICAgICAgICAgICBub3RpZnk6IHtcbiAgICAgICAgICAgICAgb25WYWxpZDogY29tcCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsID0gUmVwcmVzZW50aW5nLmdldFZhbHVlKGNvbXApO1xuICAgICAgICAgICAgICAgIGVtaXRXaXRoKGNvbXAsIGNvbG9ySW5wdXRDaGFuZ2VFdmVudCwgeyBjb2xvcjogdmFsIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmFsaWRhdG9yOiB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlT25Mb2FkOiBmYWxzZSxcbiAgICAgICAgICAgICAgdmFsaWRhdGU6IGlucHV0ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dFZhbHVlID0gUmVwcmVzZW50aW5nLmdldFZhbHVlKGlucHV0KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRWYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBGdXR1cmUucHVyZShSZXN1bHQudmFsdWUodHJ1ZSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gU3VnYXJFbGVtZW50LmZyb21UYWcoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgICAgIHNldCQ4KHNwYW4sICdiYWNrZ3JvdW5kLWNvbG9yJywgaW5wdXRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBnZXRSYXcoc3BhbiwgJ2JhY2tncm91bmQtY29sb3InKS5mb2xkKCgpID0+IFJlc3VsdC5lcnJvcignYmxhaCcpLCBfID0+IFJlc3VsdC52YWx1ZShpbnB1dFZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gRnV0dXJlLnB1cmUocmVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdKSxcbiAgICAgICAgc2VsZWN0T25Gb2N1czogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcExhYmVsID0gc3BlYy5sYWJlbC5tYXAobGFiZWwgPT4gcmVuZGVyTGFiZWwkMyhsYWJlbCwgc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVycykpO1xuICAgICAgY29uc3QgZW1pdFN3YXRjaENoYW5nZSA9IChjb2xvckJpdCwgdmFsdWUpID0+IHtcbiAgICAgICAgZW1pdFdpdGgoY29sb3JCaXQsIGNvbG9yU3dhdGNoQ2hhbmdlRXZlbnQsIHsgdmFsdWUgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25JdGVtQWN0aW9uID0gKGNvbXAsIHZhbHVlKSA9PiB7XG4gICAgICAgIG1lbUNvbG9yQnV0dG9uLmdldE9wdChjb21wKS5lYWNoKGNvbG9yQml0ID0+IHtcbiAgICAgICAgICBpZiAodmFsdWUgPT09ICdjdXN0b20nKSB7XG4gICAgICAgICAgICBjb2xvcklucHV0QmFja3N0YWdlLmNvbG9yUGlja2VyKHZhbHVlT3B0ID0+IHtcbiAgICAgICAgICAgICAgdmFsdWVPcHQuZm9sZCgoKSA9PiBlbWl0KGNvbG9yQml0LCBjb2xvclBpY2tlckNhbmNlbEV2ZW50KSwgdmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIGVtaXRTd2F0Y2hDaGFuZ2UoY29sb3JCaXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBhZGRDb2xvcihzcGVjLnN0b3JhZ2VLZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCAnI2ZmZmZmZicpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdyZW1vdmUnKSB7XG4gICAgICAgICAgICBlbWl0U3dhdGNoQ2hhbmdlKGNvbG9yQml0LCAnJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVtaXRTd2F0Y2hDaGFuZ2UoY29sb3JCaXQsIHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG1lbUNvbG9yQnV0dG9uID0gcmVjb3JkKHJlbmRlclBhbmVsQnV0dG9uKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnc3BhbicsXG4gICAgICAgICAgYXR0cmlidXRlczogeyAnYXJpYS1sYWJlbCc6IHNoYXJlZEJhY2tzdGFnZS5wcm92aWRlcnMudHJhbnNsYXRlKCdDb2xvciBzd2F0Y2gnKSB9XG4gICAgICAgIH0sXG4gICAgICAgIGxheW91dHM6IHtcbiAgICAgICAgICBvblJ0bDogKCkgPT4gW1xuICAgICAgICAgICAgc291dGh3ZXN0JDIsXG4gICAgICAgICAgICBzb3V0aGVhc3QkMixcbiAgICAgICAgICAgIHNvdXRoJDJcbiAgICAgICAgICBdLFxuICAgICAgICAgIG9uTHRyOiAoKSA9PiBbXG4gICAgICAgICAgICBzb3V0aGVhc3QkMixcbiAgICAgICAgICAgIHNvdXRod2VzdCQyLFxuICAgICAgICAgICAgc291dGgkMlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW10sXG4gICAgICAgIGZldGNoOiBnZXRGZXRjaCQxKGNvbG9ySW5wdXRCYWNrc3RhZ2UuZ2V0Q29sb3JzKHNwZWMuc3RvcmFnZUtleSksIHNwZWMuc3RvcmFnZUtleSwgY29sb3JJbnB1dEJhY2tzdGFnZS5oYXNDdXN0b21Db2xvcnMoKSksXG4gICAgICAgIGNvbHVtbnM6IGNvbG9ySW5wdXRCYWNrc3RhZ2UuZ2V0Q29sb3JDb2xzKHNwZWMuc3RvcmFnZUtleSksXG4gICAgICAgIHByZXNldHM6ICdjb2xvcicsXG4gICAgICAgIG9uSXRlbUFjdGlvblxuICAgICAgfSwgc2hhcmVkQmFja3N0YWdlKSk7XG4gICAgICByZXR1cm4gRm9ybUZpZWxkLnNrZXRjaCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtZm9ybV9fZ3JvdXAnXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBwTGFiZWwudG9BcnJheSgpLmNvbmNhdChbe1xuICAgICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LWNvbG9yLWlucHV0J11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgICAgIHBGaWVsZCxcbiAgICAgICAgICAgICAgbWVtQ29sb3JCdXR0b24uYXNTcGVjKClcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XSksXG4gICAgICAgIGZpZWxkQmVoYXZpb3VyczogZGVyaXZlJDEoW2NvbmZpZygnZm9ybS1maWVsZC1ldmVudHMnLCBbXG4gICAgICAgICAgICBydW4kMShjb2xvcklucHV0Q2hhbmdlRXZlbnQsIChjb21wLCBzZSkgPT4ge1xuICAgICAgICAgICAgICBtZW1Db2xvckJ1dHRvbi5nZXRPcHQoY29tcCkuZWFjaChjb2xvckJ1dHRvbiA9PiB7XG4gICAgICAgICAgICAgICAgc2V0JDgoY29sb3JCdXR0b24uZWxlbWVudCwgJ2JhY2tncm91bmQtY29sb3InLCBzZS5ldmVudC5jb2xvcik7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBlbWl0V2l0aChjb21wLCBmb3JtQ2hhbmdlRXZlbnQsIHsgbmFtZTogc3BlYy5uYW1lIH0pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBydW4kMShjb2xvclN3YXRjaENoYW5nZUV2ZW50LCAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgICAgICAgRm9ybUZpZWxkLmdldEZpZWxkKGNvbXApLmVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIFJlcHJlc2VudGluZy5zZXRWYWx1ZShmaWVsZCwgc2UuZXZlbnQudmFsdWUpO1xuICAgICAgICAgICAgICAgIENvbXBvc2luZy5nZXRDdXJyZW50KGNvbXApLmVhY2goRm9jdXNpbmcuZm9jdXMpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcnVuJDEoY29sb3JQaWNrZXJDYW5jZWxFdmVudCwgKGNvbXAsIF9zZSkgPT4ge1xuICAgICAgICAgICAgICBGb3JtRmllbGQuZ2V0RmllbGQoY29tcCkuZWFjaChfZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIENvbXBvc2luZy5nZXRDdXJyZW50KGNvbXApLmVhY2goRm9jdXNpbmcuZm9jdXMpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSldKVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsUGFydCA9IG9wdGlvbmFsKHtcbiAgICAgIHNjaGVtYTogW3JlcXVpcmVkJDEoJ2RvbScpXSxcbiAgICAgIG5hbWU6ICdsYWJlbCdcbiAgICB9KTtcbiAgICBjb25zdCBlZGdlUGFydCA9IG5hbWUgPT4gb3B0aW9uYWwoe1xuICAgICAgbmFtZTogJycgKyBuYW1lICsgJy1lZGdlJyxcbiAgICAgIG92ZXJyaWRlczogZGV0YWlsID0+IHtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gZGV0YWlsLm1vZGVsLm1hbmFnZXIuZWRnZUFjdGlvbnNbbmFtZV07XG4gICAgICAgIHJldHVybiBhY3Rpb24uZm9sZCgoKSA9PiAoe30pLCBhID0+ICh7XG4gICAgICAgICAgZXZlbnRzOiBkZXJpdmUkMihbXG4gICAgICAgICAgICBydW5BY3Rpb25FeHRyYSh0b3VjaHN0YXJ0KCksIChjb21wLCBzZSwgZCkgPT4gYShjb21wLCBkKSwgW2RldGFpbF0pLFxuICAgICAgICAgICAgcnVuQWN0aW9uRXh0cmEobW91c2Vkb3duKCksIChjb21wLCBzZSwgZCkgPT4gYShjb21wLCBkKSwgW2RldGFpbF0pLFxuICAgICAgICAgICAgcnVuQWN0aW9uRXh0cmEobW91c2Vtb3ZlKCksIChjb21wLCBzZSwgZGV0KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChkZXQubW91c2VJc0Rvd24uZ2V0KCkpIHtcbiAgICAgICAgICAgICAgICBhKGNvbXAsIGRldCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIFtkZXRhaWxdKVxuICAgICAgICAgIF0pXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB0bEVkZ2VQYXJ0ID0gZWRnZVBhcnQoJ3RvcC1sZWZ0Jyk7XG4gICAgY29uc3QgdGVkZ2VQYXJ0ID0gZWRnZVBhcnQoJ3RvcCcpO1xuICAgIGNvbnN0IHRyRWRnZVBhcnQgPSBlZGdlUGFydCgndG9wLXJpZ2h0Jyk7XG4gICAgY29uc3QgcmVkZ2VQYXJ0ID0gZWRnZVBhcnQoJ3JpZ2h0Jyk7XG4gICAgY29uc3QgYnJFZGdlUGFydCA9IGVkZ2VQYXJ0KCdib3R0b20tcmlnaHQnKTtcbiAgICBjb25zdCBiZWRnZVBhcnQgPSBlZGdlUGFydCgnYm90dG9tJyk7XG4gICAgY29uc3QgYmxFZGdlUGFydCA9IGVkZ2VQYXJ0KCdib3R0b20tbGVmdCcpO1xuICAgIGNvbnN0IGxlZGdlUGFydCA9IGVkZ2VQYXJ0KCdsZWZ0Jyk7XG4gICAgY29uc3QgdGh1bWJQYXJ0ID0gcmVxdWlyZWQoe1xuICAgICAgbmFtZTogJ3RodW1iJyxcbiAgICAgIGRlZmF1bHRzOiBjb25zdGFudCQxKHsgZG9tOiB7IHN0eWxlczogeyBwb3NpdGlvbjogJ2Fic29sdXRlJyB9IH0gfSksXG4gICAgICBvdmVycmlkZXM6IGRldGFpbCA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZXZlbnRzOiBkZXJpdmUkMihbXG4gICAgICAgICAgICByZWRpcmVjdFRvUGFydCh0b3VjaHN0YXJ0KCksIGRldGFpbCwgJ3NwZWN0cnVtJyksXG4gICAgICAgICAgICByZWRpcmVjdFRvUGFydCh0b3VjaG1vdmUoKSwgZGV0YWlsLCAnc3BlY3RydW0nKSxcbiAgICAgICAgICAgIHJlZGlyZWN0VG9QYXJ0KHRvdWNoZW5kKCksIGRldGFpbCwgJ3NwZWN0cnVtJyksXG4gICAgICAgICAgICByZWRpcmVjdFRvUGFydChtb3VzZWRvd24oKSwgZGV0YWlsLCAnc3BlY3RydW0nKSxcbiAgICAgICAgICAgIHJlZGlyZWN0VG9QYXJ0KG1vdXNlbW92ZSgpLCBkZXRhaWwsICdzcGVjdHJ1bScpLFxuICAgICAgICAgICAgcmVkaXJlY3RUb1BhcnQobW91c2V1cCgpLCBkZXRhaWwsICdzcGVjdHJ1bScpXG4gICAgICAgICAgXSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzcGVjdHJ1bVBhcnQgPSByZXF1aXJlZCh7XG4gICAgICBzY2hlbWE6IFtjdXN0b21GaWVsZCgnbW91c2VJc0Rvd24nLCAoKSA9PiBDZWxsKGZhbHNlKSldLFxuICAgICAgbmFtZTogJ3NwZWN0cnVtJyxcbiAgICAgIG92ZXJyaWRlczogZGV0YWlsID0+IHtcbiAgICAgICAgY29uc3QgbW9kZWxEZXRhaWwgPSBkZXRhaWwubW9kZWw7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gbW9kZWxEZXRhaWwubWFuYWdlcjtcbiAgICAgICAgY29uc3Qgc2V0VmFsdWVGcm9tID0gKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpID0+IG1vZGVsLmdldFZhbHVlRnJvbUV2ZW50KHNpbXVsYXRlZEV2ZW50KS5tYXAodmFsdWUgPT4gbW9kZWwuc2V0VmFsdWVGcm9tKGNvbXBvbmVudCwgZGV0YWlsLCB2YWx1ZSkpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgICAgICBtb2RlOiAnc3BlY2lhbCcsXG4gICAgICAgICAgICAgIG9uTGVmdDogc3BlY3RydW0gPT4gbW9kZWwub25MZWZ0KHNwZWN0cnVtLCBkZXRhaWwpLFxuICAgICAgICAgICAgICBvblJpZ2h0OiBzcGVjdHJ1bSA9PiBtb2RlbC5vblJpZ2h0KHNwZWN0cnVtLCBkZXRhaWwpLFxuICAgICAgICAgICAgICBvblVwOiBzcGVjdHJ1bSA9PiBtb2RlbC5vblVwKHNwZWN0cnVtLCBkZXRhaWwpLFxuICAgICAgICAgICAgICBvbkRvd246IHNwZWN0cnVtID0+IG1vZGVsLm9uRG93bihzcGVjdHJ1bSwgZGV0YWlsKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBGb2N1c2luZy5jb25maWcoe30pXG4gICAgICAgICAgXSksXG4gICAgICAgICAgZXZlbnRzOiBkZXJpdmUkMihbXG4gICAgICAgICAgICBydW4kMSh0b3VjaHN0YXJ0KCksIHNldFZhbHVlRnJvbSksXG4gICAgICAgICAgICBydW4kMSh0b3VjaG1vdmUoKSwgc2V0VmFsdWVGcm9tKSxcbiAgICAgICAgICAgIHJ1biQxKG1vdXNlZG93bigpLCBzZXRWYWx1ZUZyb20pLFxuICAgICAgICAgICAgcnVuJDEobW91c2Vtb3ZlKCksIChzcGVjdHJ1bSwgc2UpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGRldGFpbC5tb3VzZUlzRG93bi5nZXQoKSkge1xuICAgICAgICAgICAgICAgIHNldFZhbHVlRnJvbShzcGVjdHJ1bSwgc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgdmFyIFNsaWRlclBhcnRzID0gW1xuICAgICAgbGFiZWxQYXJ0LFxuICAgICAgbGVkZ2VQYXJ0LFxuICAgICAgcmVkZ2VQYXJ0LFxuICAgICAgdGVkZ2VQYXJ0LFxuICAgICAgYmVkZ2VQYXJ0LFxuICAgICAgdGxFZGdlUGFydCxcbiAgICAgIHRyRWRnZVBhcnQsXG4gICAgICBibEVkZ2VQYXJ0LFxuICAgICAgYnJFZGdlUGFydCxcbiAgICAgIHRodW1iUGFydCxcbiAgICAgIHNwZWN0cnVtUGFydFxuICAgIF07XG5cbiAgICBjb25zdCBfc2xpZGVyQ2hhbmdlRXZlbnQgPSAnc2xpZGVyLmNoYW5nZS52YWx1ZSc7XG4gICAgY29uc3Qgc2xpZGVyQ2hhbmdlRXZlbnQgPSBjb25zdGFudCQxKF9zbGlkZXJDaGFuZ2VFdmVudCk7XG4gICAgY29uc3QgaXNUb3VjaEV2ZW50JDIgPSBldnQgPT4gZXZ0LnR5cGUuaW5kZXhPZigndG91Y2gnKSAhPT0gLTE7XG4gICAgY29uc3QgZ2V0RXZlbnRTb3VyY2UgPSBzaW11bGF0ZWRFdmVudCA9PiB7XG4gICAgICBjb25zdCBldnQgPSBzaW11bGF0ZWRFdmVudC5ldmVudC5yYXc7XG4gICAgICBpZiAoaXNUb3VjaEV2ZW50JDIoZXZ0KSkge1xuICAgICAgICBjb25zdCB0b3VjaEV2ZW50ID0gZXZ0O1xuICAgICAgICByZXR1cm4gdG91Y2hFdmVudC50b3VjaGVzICE9PSB1bmRlZmluZWQgJiYgdG91Y2hFdmVudC50b3VjaGVzLmxlbmd0aCA9PT0gMSA/IE9wdGlvbmFsLnNvbWUodG91Y2hFdmVudC50b3VjaGVzWzBdKS5tYXAodCA9PiBTdWdhclBvc2l0aW9uKHQuY2xpZW50WCwgdC5jbGllbnRZKSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtb3VzZUV2ZW50ID0gZXZ0O1xuICAgICAgICByZXR1cm4gbW91c2VFdmVudC5jbGllbnRYICE9PSB1bmRlZmluZWQgPyBPcHRpb25hbC5zb21lKG1vdXNlRXZlbnQpLm1hcChtZSA9PiBTdWdhclBvc2l0aW9uKG1lLmNsaWVudFgsIG1lLmNsaWVudFkpKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdCA9ICd0b3AnLCByID0gJ3JpZ2h0JywgYiA9ICdib3R0b20nLCBsID0gJ2xlZnQnO1xuICAgIGNvbnN0IG1pblggPSBkZXRhaWwgPT4gZGV0YWlsLm1vZGVsLm1pblg7XG4gICAgY29uc3QgbWluWSA9IGRldGFpbCA9PiBkZXRhaWwubW9kZWwubWluWTtcbiAgICBjb25zdCBtaW4xWCA9IGRldGFpbCA9PiBkZXRhaWwubW9kZWwubWluWCAtIDE7XG4gICAgY29uc3QgbWluMVkgPSBkZXRhaWwgPT4gZGV0YWlsLm1vZGVsLm1pblkgLSAxO1xuICAgIGNvbnN0IG1heFggPSBkZXRhaWwgPT4gZGV0YWlsLm1vZGVsLm1heFg7XG4gICAgY29uc3QgbWF4WSA9IGRldGFpbCA9PiBkZXRhaWwubW9kZWwubWF4WTtcbiAgICBjb25zdCBtYXgxWCA9IGRldGFpbCA9PiBkZXRhaWwubW9kZWwubWF4WCArIDE7XG4gICAgY29uc3QgbWF4MVkgPSBkZXRhaWwgPT4gZGV0YWlsLm1vZGVsLm1heFkgKyAxO1xuICAgIGNvbnN0IHJhbmdlID0gKGRldGFpbCwgbWF4LCBtaW4pID0+IG1heChkZXRhaWwpIC0gbWluKGRldGFpbCk7XG4gICAgY29uc3QgeFJhbmdlID0gZGV0YWlsID0+IHJhbmdlKGRldGFpbCwgbWF4WCwgbWluWCk7XG4gICAgY29uc3QgeVJhbmdlID0gZGV0YWlsID0+IHJhbmdlKGRldGFpbCwgbWF4WSwgbWluWSk7XG4gICAgY29uc3QgaGFsZlggPSBkZXRhaWwgPT4geFJhbmdlKGRldGFpbCkgLyAyO1xuICAgIGNvbnN0IGhhbGZZID0gZGV0YWlsID0+IHlSYW5nZShkZXRhaWwpIC8gMjtcbiAgICBjb25zdCBzdGVwID0gZGV0YWlsID0+IGRldGFpbC5zdGVwU2l6ZTtcbiAgICBjb25zdCBzbmFwID0gZGV0YWlsID0+IGRldGFpbC5zbmFwVG9HcmlkO1xuICAgIGNvbnN0IHNuYXBTdGFydCA9IGRldGFpbCA9PiBkZXRhaWwuc25hcFN0YXJ0O1xuICAgIGNvbnN0IHJvdW5kZWQgPSBkZXRhaWwgPT4gZGV0YWlsLnJvdW5kZWQ7XG4gICAgY29uc3QgaGFzRWRnZSA9IChkZXRhaWwsIGVkZ2VOYW1lKSA9PiBkZXRhaWxbZWRnZU5hbWUgKyAnLWVkZ2UnXSAhPT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGhhc0xFZGdlID0gZGV0YWlsID0+IGhhc0VkZ2UoZGV0YWlsLCBsKTtcbiAgICBjb25zdCBoYXNSRWRnZSA9IGRldGFpbCA9PiBoYXNFZGdlKGRldGFpbCwgcik7XG4gICAgY29uc3QgaGFzVEVkZ2UgPSBkZXRhaWwgPT4gaGFzRWRnZShkZXRhaWwsIHQpO1xuICAgIGNvbnN0IGhhc0JFZGdlID0gZGV0YWlsID0+IGhhc0VkZ2UoZGV0YWlsLCBiKTtcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBkZXRhaWwgPT4gZGV0YWlsLm1vZGVsLnZhbHVlLmdldCgpO1xuXG4gICAgY29uc3QgeHlWYWx1ZSA9ICh4LCB5KSA9PiAoe1xuICAgICAgeCxcbiAgICAgIHlcbiAgICB9KTtcbiAgICBjb25zdCBmaXJlU2xpZGVyQ2hhbmdlJDMgPSAoY29tcG9uZW50LCB2YWx1ZSkgPT4ge1xuICAgICAgZW1pdFdpdGgoY29tcG9uZW50LCBzbGlkZXJDaGFuZ2VFdmVudCgpLCB7IHZhbHVlIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2V0VG9UTEVkZ2VYWSA9IChlZGdlLCBkZXRhaWwpID0+IHtcbiAgICAgIGZpcmVTbGlkZXJDaGFuZ2UkMyhlZGdlLCB4eVZhbHVlKG1pbjFYKGRldGFpbCksIG1pbjFZKGRldGFpbCkpKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldFRvVEVkZ2UgPSAoZWRnZSwgZGV0YWlsKSA9PiB7XG4gICAgICBmaXJlU2xpZGVyQ2hhbmdlJDMoZWRnZSwgbWluMVkoZGV0YWlsKSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRUb1RFZGdlWFkgPSAoZWRnZSwgZGV0YWlsKSA9PiB7XG4gICAgICBmaXJlU2xpZGVyQ2hhbmdlJDMoZWRnZSwgeHlWYWx1ZShoYWxmWChkZXRhaWwpLCBtaW4xWShkZXRhaWwpKSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRUb1RSRWRnZVhZID0gKGVkZ2UsIGRldGFpbCkgPT4ge1xuICAgICAgZmlyZVNsaWRlckNoYW5nZSQzKGVkZ2UsIHh5VmFsdWUobWF4MVgoZGV0YWlsKSwgbWluMVkoZGV0YWlsKSkpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0VG9SRWRnZSA9IChlZGdlLCBkZXRhaWwpID0+IHtcbiAgICAgIGZpcmVTbGlkZXJDaGFuZ2UkMyhlZGdlLCBtYXgxWChkZXRhaWwpKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldFRvUkVkZ2VYWSA9IChlZGdlLCBkZXRhaWwpID0+IHtcbiAgICAgIGZpcmVTbGlkZXJDaGFuZ2UkMyhlZGdlLCB4eVZhbHVlKG1heDFYKGRldGFpbCksIGhhbGZZKGRldGFpbCkpKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldFRvQlJFZGdlWFkgPSAoZWRnZSwgZGV0YWlsKSA9PiB7XG4gICAgICBmaXJlU2xpZGVyQ2hhbmdlJDMoZWRnZSwgeHlWYWx1ZShtYXgxWChkZXRhaWwpLCBtYXgxWShkZXRhaWwpKSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRUb0JFZGdlID0gKGVkZ2UsIGRldGFpbCkgPT4ge1xuICAgICAgZmlyZVNsaWRlckNoYW5nZSQzKGVkZ2UsIG1heDFZKGRldGFpbCkpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0VG9CRWRnZVhZID0gKGVkZ2UsIGRldGFpbCkgPT4ge1xuICAgICAgZmlyZVNsaWRlckNoYW5nZSQzKGVkZ2UsIHh5VmFsdWUoaGFsZlgoZGV0YWlsKSwgbWF4MVkoZGV0YWlsKSkpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0VG9CTEVkZ2VYWSA9IChlZGdlLCBkZXRhaWwpID0+IHtcbiAgICAgIGZpcmVTbGlkZXJDaGFuZ2UkMyhlZGdlLCB4eVZhbHVlKG1pbjFYKGRldGFpbCksIG1heDFZKGRldGFpbCkpKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldFRvTEVkZ2UgPSAoZWRnZSwgZGV0YWlsKSA9PiB7XG4gICAgICBmaXJlU2xpZGVyQ2hhbmdlJDMoZWRnZSwgbWluMVgoZGV0YWlsKSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRUb0xFZGdlWFkgPSAoZWRnZSwgZGV0YWlsKSA9PiB7XG4gICAgICBmaXJlU2xpZGVyQ2hhbmdlJDMoZWRnZSwgeHlWYWx1ZShtaW4xWChkZXRhaWwpLCBoYWxmWShkZXRhaWwpKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlZHVjZUJ5ID0gKHZhbHVlLCBtaW4sIG1heCwgc3RlcCkgPT4ge1xuICAgICAgaWYgKHZhbHVlIDwgbWluKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPiBtYXgpIHtcbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IG1pbikge1xuICAgICAgICByZXR1cm4gbWluIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChtaW4sIHZhbHVlIC0gc3RlcCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbmNyZWFzZUJ5ID0gKHZhbHVlLCBtaW4sIG1heCwgc3RlcCkgPT4ge1xuICAgICAgaWYgKHZhbHVlID4gbWF4KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPCBtaW4pIHtcbiAgICAgICAgcmV0dXJuIG1pbjtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IG1heCkge1xuICAgICAgICByZXR1cm4gbWF4ICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1pbihtYXgsIHZhbHVlICsgc3RlcCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjYXBWYWx1ZSA9ICh2YWx1ZSwgbWluLCBtYXgpID0+IE1hdGgubWF4KG1pbiwgTWF0aC5taW4obWF4LCB2YWx1ZSkpO1xuICAgIGNvbnN0IHNuYXBWYWx1ZU9mID0gKHZhbHVlLCBtaW4sIG1heCwgc3RlcCwgc25hcFN0YXJ0KSA9PiBzbmFwU3RhcnQuZm9sZCgoKSA9PiB7XG4gICAgICBjb25zdCBpbml0VmFsdWUgPSB2YWx1ZSAtIG1pbjtcbiAgICAgIGNvbnN0IGV4dHJhVmFsdWUgPSBNYXRoLnJvdW5kKGluaXRWYWx1ZSAvIHN0ZXApICogc3RlcDtcbiAgICAgIHJldHVybiBjYXBWYWx1ZShtaW4gKyBleHRyYVZhbHVlLCBtaW4gLSAxLCBtYXggKyAxKTtcbiAgICB9LCBzdGFydCA9PiB7XG4gICAgICBjb25zdCByZW1haW5kZXIgPSAodmFsdWUgLSBzdGFydCkgJSBzdGVwO1xuICAgICAgY29uc3QgYWRqdXN0bWVudCA9IE1hdGgucm91bmQocmVtYWluZGVyIC8gc3RlcCk7XG4gICAgICBjb25zdCByYXdTdGVwcyA9IE1hdGguZmxvb3IoKHZhbHVlIC0gc3RhcnQpIC8gc3RlcCk7XG4gICAgICBjb25zdCBtYXhTdGVwcyA9IE1hdGguZmxvb3IoKG1heCAtIHN0YXJ0KSAvIHN0ZXApO1xuICAgICAgY29uc3QgbnVtU3RlcHMgPSBNYXRoLm1pbihtYXhTdGVwcywgcmF3U3RlcHMgKyBhZGp1c3RtZW50KTtcbiAgICAgIGNvbnN0IHIgPSBzdGFydCArIG51bVN0ZXBzICogc3RlcDtcbiAgICAgIHJldHVybiBNYXRoLm1heChzdGFydCwgcik7XG4gICAgfSk7XG4gICAgY29uc3QgZmluZE9mZnNldE9mID0gKHZhbHVlLCBtaW4sIG1heCkgPT4gTWF0aC5taW4obWF4LCBNYXRoLm1heCh2YWx1ZSwgbWluKSkgLSBtaW47XG4gICAgY29uc3QgZmluZFZhbHVlT2YgPSBhcmdzID0+IHtcbiAgICAgIGNvbnN0IHttaW4sIG1heCwgcmFuZ2UsIHZhbHVlLCBzdGVwLCBzbmFwLCBzbmFwU3RhcnQsIHJvdW5kZWQsIGhhc01pbkVkZ2UsIGhhc01heEVkZ2UsIG1pbkJvdW5kLCBtYXhCb3VuZCwgc2NyZWVuUmFuZ2V9ID0gYXJncztcbiAgICAgIGNvbnN0IGNhcE1pbiA9IGhhc01pbkVkZ2UgPyBtaW4gLSAxIDogbWluO1xuICAgICAgY29uc3QgY2FwTWF4ID0gaGFzTWF4RWRnZSA/IG1heCArIDEgOiBtYXg7XG4gICAgICBpZiAodmFsdWUgPCBtaW5Cb3VuZCkge1xuICAgICAgICByZXR1cm4gY2FwTWluO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+IG1heEJvdW5kKSB7XG4gICAgICAgIHJldHVybiBjYXBNYXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBmaW5kT2Zmc2V0T2YodmFsdWUsIG1pbkJvdW5kLCBtYXhCb3VuZCk7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gY2FwVmFsdWUob2Zmc2V0IC8gc2NyZWVuUmFuZ2UgKiByYW5nZSArIG1pbiwgY2FwTWluLCBjYXBNYXgpO1xuICAgICAgICBpZiAoc25hcCAmJiBuZXdWYWx1ZSA+PSBtaW4gJiYgbmV3VmFsdWUgPD0gbWF4KSB7XG4gICAgICAgICAgcmV0dXJuIHNuYXBWYWx1ZU9mKG5ld1ZhbHVlLCBtaW4sIG1heCwgc3RlcCwgc25hcFN0YXJ0KTtcbiAgICAgICAgfSBlbHNlIGlmIChyb3VuZGVkKSB7XG4gICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZmluZE9mZnNldE9mVmFsdWUkMiA9IGFyZ3MgPT4ge1xuICAgICAgY29uc3Qge21pbiwgbWF4LCByYW5nZSwgdmFsdWUsIGhhc01pbkVkZ2UsIGhhc01heEVkZ2UsIG1heEJvdW5kLCBtYXhPZmZzZXQsIGNlbnRlck1pbkVkZ2UsIGNlbnRlck1heEVkZ2V9ID0gYXJncztcbiAgICAgIGlmICh2YWx1ZSA8IG1pbikge1xuICAgICAgICByZXR1cm4gaGFzTWluRWRnZSA/IDAgOiBjZW50ZXJNaW5FZGdlO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+IG1heCkge1xuICAgICAgICByZXR1cm4gaGFzTWF4RWRnZSA/IG1heEJvdW5kIDogY2VudGVyTWF4RWRnZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAodmFsdWUgLSBtaW4pIC8gcmFuZ2UgKiBtYXhPZmZzZXQ7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHRvcCA9ICd0b3AnLCByaWdodCA9ICdyaWdodCcsIGJvdHRvbSA9ICdib3R0b20nLCBsZWZ0ID0gJ2xlZnQnLCB3aWR0aCA9ICd3aWR0aCcsIGhlaWdodCA9ICdoZWlnaHQnO1xuICAgIGNvbnN0IGdldEJvdW5kcyA9IGNvbXBvbmVudCA9PiBjb21wb25lbnQuZWxlbWVudC5kb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgZ2V0Qm91bmRzUHJvcGVydHkgPSAoYm91bmRzLCBwcm9wZXJ0eSkgPT4gYm91bmRzW3Byb3BlcnR5XTtcbiAgICBjb25zdCBnZXRNaW5YQm91bmRzID0gY29tcG9uZW50ID0+IHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IGdldEJvdW5kcyhjb21wb25lbnQpO1xuICAgICAgcmV0dXJuIGdldEJvdW5kc1Byb3BlcnR5KGJvdW5kcywgbGVmdCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRNYXhYQm91bmRzID0gY29tcG9uZW50ID0+IHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IGdldEJvdW5kcyhjb21wb25lbnQpO1xuICAgICAgcmV0dXJuIGdldEJvdW5kc1Byb3BlcnR5KGJvdW5kcywgcmlnaHQpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0TWluWUJvdW5kcyA9IGNvbXBvbmVudCA9PiB7XG4gICAgICBjb25zdCBib3VuZHMgPSBnZXRCb3VuZHMoY29tcG9uZW50KTtcbiAgICAgIHJldHVybiBnZXRCb3VuZHNQcm9wZXJ0eShib3VuZHMsIHRvcCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRNYXhZQm91bmRzID0gY29tcG9uZW50ID0+IHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IGdldEJvdW5kcyhjb21wb25lbnQpO1xuICAgICAgcmV0dXJuIGdldEJvdW5kc1Byb3BlcnR5KGJvdW5kcywgYm90dG9tKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFhTY3JlZW5SYW5nZSA9IGNvbXBvbmVudCA9PiB7XG4gICAgICBjb25zdCBib3VuZHMgPSBnZXRCb3VuZHMoY29tcG9uZW50KTtcbiAgICAgIHJldHVybiBnZXRCb3VuZHNQcm9wZXJ0eShib3VuZHMsIHdpZHRoKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFlTY3JlZW5SYW5nZSA9IGNvbXBvbmVudCA9PiB7XG4gICAgICBjb25zdCBib3VuZHMgPSBnZXRCb3VuZHMoY29tcG9uZW50KTtcbiAgICAgIHJldHVybiBnZXRCb3VuZHNQcm9wZXJ0eShib3VuZHMsIGhlaWdodCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRDZW50ZXJPZmZzZXRPZiA9IChjb21wb25lbnRNaW5FZGdlLCBjb21wb25lbnRNYXhFZGdlLCBzcGVjdHJ1bU1pbkVkZ2UpID0+IChjb21wb25lbnRNaW5FZGdlICsgY29tcG9uZW50TWF4RWRnZSkgLyAyIC0gc3BlY3RydW1NaW5FZGdlO1xuICAgIGNvbnN0IGdldFhDZW50ZXJPZmZTZXRPZiA9IChjb21wb25lbnQsIHNwZWN0cnVtKSA9PiB7XG4gICAgICBjb25zdCBjb21wb25lbnRCb3VuZHMgPSBnZXRCb3VuZHMoY29tcG9uZW50KTtcbiAgICAgIGNvbnN0IHNwZWN0cnVtQm91bmRzID0gZ2V0Qm91bmRzKHNwZWN0cnVtKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudE1pbkVkZ2UgPSBnZXRCb3VuZHNQcm9wZXJ0eShjb21wb25lbnRCb3VuZHMsIGxlZnQpO1xuICAgICAgY29uc3QgY29tcG9uZW50TWF4RWRnZSA9IGdldEJvdW5kc1Byb3BlcnR5KGNvbXBvbmVudEJvdW5kcywgcmlnaHQpO1xuICAgICAgY29uc3Qgc3BlY3RydW1NaW5FZGdlID0gZ2V0Qm91bmRzUHJvcGVydHkoc3BlY3RydW1Cb3VuZHMsIGxlZnQpO1xuICAgICAgcmV0dXJuIGdldENlbnRlck9mZnNldE9mKGNvbXBvbmVudE1pbkVkZ2UsIGNvbXBvbmVudE1heEVkZ2UsIHNwZWN0cnVtTWluRWRnZSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRZQ2VudGVyT2ZmU2V0T2YgPSAoY29tcG9uZW50LCBzcGVjdHJ1bSkgPT4ge1xuICAgICAgY29uc3QgY29tcG9uZW50Qm91bmRzID0gZ2V0Qm91bmRzKGNvbXBvbmVudCk7XG4gICAgICBjb25zdCBzcGVjdHJ1bUJvdW5kcyA9IGdldEJvdW5kcyhzcGVjdHJ1bSk7XG4gICAgICBjb25zdCBjb21wb25lbnRNaW5FZGdlID0gZ2V0Qm91bmRzUHJvcGVydHkoY29tcG9uZW50Qm91bmRzLCB0b3ApO1xuICAgICAgY29uc3QgY29tcG9uZW50TWF4RWRnZSA9IGdldEJvdW5kc1Byb3BlcnR5KGNvbXBvbmVudEJvdW5kcywgYm90dG9tKTtcbiAgICAgIGNvbnN0IHNwZWN0cnVtTWluRWRnZSA9IGdldEJvdW5kc1Byb3BlcnR5KHNwZWN0cnVtQm91bmRzLCB0b3ApO1xuICAgICAgcmV0dXJuIGdldENlbnRlck9mZnNldE9mKGNvbXBvbmVudE1pbkVkZ2UsIGNvbXBvbmVudE1heEVkZ2UsIHNwZWN0cnVtTWluRWRnZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZpcmVTbGlkZXJDaGFuZ2UkMiA9IChzcGVjdHJ1bSwgdmFsdWUpID0+IHtcbiAgICAgIGVtaXRXaXRoKHNwZWN0cnVtLCBzbGlkZXJDaGFuZ2VFdmVudCgpLCB7IHZhbHVlIH0pO1xuICAgIH07XG4gICAgY29uc3QgZmluZFZhbHVlT2ZPZmZzZXQkMSA9IChzcGVjdHJ1bSwgZGV0YWlsLCBsZWZ0KSA9PiB7XG4gICAgICBjb25zdCBhcmdzID0ge1xuICAgICAgICBtaW46IG1pblgoZGV0YWlsKSxcbiAgICAgICAgbWF4OiBtYXhYKGRldGFpbCksXG4gICAgICAgIHJhbmdlOiB4UmFuZ2UoZGV0YWlsKSxcbiAgICAgICAgdmFsdWU6IGxlZnQsXG4gICAgICAgIHN0ZXA6IHN0ZXAoZGV0YWlsKSxcbiAgICAgICAgc25hcDogc25hcChkZXRhaWwpLFxuICAgICAgICBzbmFwU3RhcnQ6IHNuYXBTdGFydChkZXRhaWwpLFxuICAgICAgICByb3VuZGVkOiByb3VuZGVkKGRldGFpbCksXG4gICAgICAgIGhhc01pbkVkZ2U6IGhhc0xFZGdlKGRldGFpbCksXG4gICAgICAgIGhhc01heEVkZ2U6IGhhc1JFZGdlKGRldGFpbCksXG4gICAgICAgIG1pbkJvdW5kOiBnZXRNaW5YQm91bmRzKHNwZWN0cnVtKSxcbiAgICAgICAgbWF4Qm91bmQ6IGdldE1heFhCb3VuZHMoc3BlY3RydW0pLFxuICAgICAgICBzY3JlZW5SYW5nZTogZ2V0WFNjcmVlblJhbmdlKHNwZWN0cnVtKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBmaW5kVmFsdWVPZihhcmdzKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldFZhbHVlRnJvbSQyID0gKHNwZWN0cnVtLCBkZXRhaWwsIHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCB4VmFsdWUgPSBmaW5kVmFsdWVPZk9mZnNldCQxKHNwZWN0cnVtLCBkZXRhaWwsIHZhbHVlKTtcbiAgICAgIGNvbnN0IHNsaWRlclZhbCA9IHhWYWx1ZTtcbiAgICAgIGZpcmVTbGlkZXJDaGFuZ2UkMihzcGVjdHJ1bSwgc2xpZGVyVmFsKTtcbiAgICAgIHJldHVybiB4VmFsdWU7XG4gICAgfTtcbiAgICBjb25zdCBzZXRUb01pbiQyID0gKHNwZWN0cnVtLCBkZXRhaWwpID0+IHtcbiAgICAgIGNvbnN0IG1pbiA9IG1pblgoZGV0YWlsKTtcbiAgICAgIGZpcmVTbGlkZXJDaGFuZ2UkMihzcGVjdHJ1bSwgbWluKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldFRvTWF4JDIgPSAoc3BlY3RydW0sIGRldGFpbCkgPT4ge1xuICAgICAgY29uc3QgbWF4ID0gbWF4WChkZXRhaWwpO1xuICAgICAgZmlyZVNsaWRlckNoYW5nZSQyKHNwZWN0cnVtLCBtYXgpO1xuICAgIH07XG4gICAgY29uc3QgbW92ZUJ5JDIgPSAoZGlyZWN0aW9uLCBzcGVjdHJ1bSwgZGV0YWlsKSA9PiB7XG4gICAgICBjb25zdCBmID0gZGlyZWN0aW9uID4gMCA/IGluY3JlYXNlQnkgOiByZWR1Y2VCeTtcbiAgICAgIGNvbnN0IHhWYWx1ZSA9IGYoY3VycmVudFZhbHVlKGRldGFpbCksIG1pblgoZGV0YWlsKSwgbWF4WChkZXRhaWwpLCBzdGVwKGRldGFpbCkpO1xuICAgICAgZmlyZVNsaWRlckNoYW5nZSQyKHNwZWN0cnVtLCB4VmFsdWUpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoeFZhbHVlKTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZU1vdmVtZW50JDIgPSBkaXJlY3Rpb24gPT4gKHNwZWN0cnVtLCBkZXRhaWwpID0+IG1vdmVCeSQyKGRpcmVjdGlvbiwgc3BlY3RydW0sIGRldGFpbCkubWFwKGFsd2F5cyk7XG4gICAgY29uc3QgZ2V0VmFsdWVGcm9tRXZlbnQkMiA9IHNpbXVsYXRlZEV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHBvcyA9IGdldEV2ZW50U291cmNlKHNpbXVsYXRlZEV2ZW50KTtcbiAgICAgIHJldHVybiBwb3MubWFwKHAgPT4gcC5sZWZ0KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRPZmZzZXRPZlZhbHVlJDEgPSAoc3BlY3RydW0sIGRldGFpbCwgdmFsdWUsIG1pbkVkZ2UsIG1heEVkZ2UpID0+IHtcbiAgICAgIGNvbnN0IG1pbk9mZnNldCA9IDA7XG4gICAgICBjb25zdCBtYXhPZmZzZXQgPSBnZXRYU2NyZWVuUmFuZ2Uoc3BlY3RydW0pO1xuICAgICAgY29uc3QgY2VudGVyTWluRWRnZSA9IG1pbkVkZ2UuYmluZChlZGdlID0+IE9wdGlvbmFsLnNvbWUoZ2V0WENlbnRlck9mZlNldE9mKGVkZ2UsIHNwZWN0cnVtKSkpLmdldE9yKG1pbk9mZnNldCk7XG4gICAgICBjb25zdCBjZW50ZXJNYXhFZGdlID0gbWF4RWRnZS5iaW5kKGVkZ2UgPT4gT3B0aW9uYWwuc29tZShnZXRYQ2VudGVyT2ZmU2V0T2YoZWRnZSwgc3BlY3RydW0pKSkuZ2V0T3IobWF4T2Zmc2V0KTtcbiAgICAgIGNvbnN0IGFyZ3MgPSB7XG4gICAgICAgIG1pbjogbWluWChkZXRhaWwpLFxuICAgICAgICBtYXg6IG1heFgoZGV0YWlsKSxcbiAgICAgICAgcmFuZ2U6IHhSYW5nZShkZXRhaWwpLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgaGFzTWluRWRnZTogaGFzTEVkZ2UoZGV0YWlsKSxcbiAgICAgICAgaGFzTWF4RWRnZTogaGFzUkVkZ2UoZGV0YWlsKSxcbiAgICAgICAgbWluQm91bmQ6IGdldE1pblhCb3VuZHMoc3BlY3RydW0pLFxuICAgICAgICBtaW5PZmZzZXQsXG4gICAgICAgIG1heEJvdW5kOiBnZXRNYXhYQm91bmRzKHNwZWN0cnVtKSxcbiAgICAgICAgbWF4T2Zmc2V0LFxuICAgICAgICBjZW50ZXJNaW5FZGdlLFxuICAgICAgICBjZW50ZXJNYXhFZGdlXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGZpbmRPZmZzZXRPZlZhbHVlJDIoYXJncyk7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kUG9zaXRpb25PZlZhbHVlJDEgPSAoc2xpZGVyLCBzcGVjdHJ1bSwgdmFsdWUsIG1pbkVkZ2UsIG1heEVkZ2UsIGRldGFpbCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZmluZE9mZnNldE9mVmFsdWUkMShzcGVjdHJ1bSwgZGV0YWlsLCB2YWx1ZSwgbWluRWRnZSwgbWF4RWRnZSk7XG4gICAgICByZXR1cm4gZ2V0TWluWEJvdW5kcyhzcGVjdHJ1bSkgLSBnZXRNaW5YQm91bmRzKHNsaWRlcikgKyBvZmZzZXQ7XG4gICAgfTtcbiAgICBjb25zdCBzZXRQb3NpdGlvbkZyb21WYWx1ZSQyID0gKHNsaWRlciwgdGh1bWIsIGRldGFpbCwgZWRnZXMpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY3VycmVudFZhbHVlKGRldGFpbCk7XG4gICAgICBjb25zdCBwb3MgPSBmaW5kUG9zaXRpb25PZlZhbHVlJDEoc2xpZGVyLCBlZGdlcy5nZXRTcGVjdHJ1bShzbGlkZXIpLCB2YWx1ZSwgZWRnZXMuZ2V0TGVmdEVkZ2Uoc2xpZGVyKSwgZWRnZXMuZ2V0UmlnaHRFZGdlKHNsaWRlciksIGRldGFpbCk7XG4gICAgICBjb25zdCB0aHVtYlJhZGl1cyA9IGdldCRjKHRodW1iLmVsZW1lbnQpIC8gMjtcbiAgICAgIHNldCQ4KHRodW1iLmVsZW1lbnQsICdsZWZ0JywgcG9zIC0gdGh1bWJSYWRpdXMgKyAncHgnKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uTGVmdCQyID0gaGFuZGxlTW92ZW1lbnQkMigtMSk7XG4gICAgY29uc3Qgb25SaWdodCQyID0gaGFuZGxlTW92ZW1lbnQkMigxKTtcbiAgICBjb25zdCBvblVwJDIgPSBPcHRpb25hbC5ub25lO1xuICAgIGNvbnN0IG9uRG93biQyID0gT3B0aW9uYWwubm9uZTtcbiAgICBjb25zdCBlZGdlQWN0aW9ucyQyID0ge1xuICAgICAgJ3RvcC1sZWZ0JzogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgJ3RvcCc6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICd0b3AtcmlnaHQnOiBPcHRpb25hbC5ub25lKCksXG4gICAgICAncmlnaHQnOiBPcHRpb25hbC5zb21lKHNldFRvUkVkZ2UpLFxuICAgICAgJ2JvdHRvbS1yaWdodCc6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICdib3R0b20nOiBPcHRpb25hbC5ub25lKCksXG4gICAgICAnYm90dG9tLWxlZnQnOiBPcHRpb25hbC5ub25lKCksXG4gICAgICAnbGVmdCc6IE9wdGlvbmFsLnNvbWUoc2V0VG9MRWRnZSlcbiAgICB9O1xuXG4gICAgdmFyIEhvcml6b250YWxNb2RlbCA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBzZXRWYWx1ZUZyb206IHNldFZhbHVlRnJvbSQyLFxuICAgICAgICBzZXRUb01pbjogc2V0VG9NaW4kMixcbiAgICAgICAgc2V0VG9NYXg6IHNldFRvTWF4JDIsXG4gICAgICAgIGZpbmRWYWx1ZU9mT2Zmc2V0OiBmaW5kVmFsdWVPZk9mZnNldCQxLFxuICAgICAgICBnZXRWYWx1ZUZyb21FdmVudDogZ2V0VmFsdWVGcm9tRXZlbnQkMixcbiAgICAgICAgZmluZFBvc2l0aW9uT2ZWYWx1ZTogZmluZFBvc2l0aW9uT2ZWYWx1ZSQxLFxuICAgICAgICBzZXRQb3NpdGlvbkZyb21WYWx1ZTogc2V0UG9zaXRpb25Gcm9tVmFsdWUkMixcbiAgICAgICAgb25MZWZ0OiBvbkxlZnQkMixcbiAgICAgICAgb25SaWdodDogb25SaWdodCQyLFxuICAgICAgICBvblVwOiBvblVwJDIsXG4gICAgICAgIG9uRG93bjogb25Eb3duJDIsXG4gICAgICAgIGVkZ2VBY3Rpb25zOiBlZGdlQWN0aW9ucyQyXG4gICAgfSk7XG5cbiAgICBjb25zdCBmaXJlU2xpZGVyQ2hhbmdlJDEgPSAoc3BlY3RydW0sIHZhbHVlKSA9PiB7XG4gICAgICBlbWl0V2l0aChzcGVjdHJ1bSwgc2xpZGVyQ2hhbmdlRXZlbnQoKSwgeyB2YWx1ZSB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRWYWx1ZU9mT2Zmc2V0ID0gKHNwZWN0cnVtLCBkZXRhaWwsIHRvcCkgPT4ge1xuICAgICAgY29uc3QgYXJncyA9IHtcbiAgICAgICAgbWluOiBtaW5ZKGRldGFpbCksXG4gICAgICAgIG1heDogbWF4WShkZXRhaWwpLFxuICAgICAgICByYW5nZTogeVJhbmdlKGRldGFpbCksXG4gICAgICAgIHZhbHVlOiB0b3AsXG4gICAgICAgIHN0ZXA6IHN0ZXAoZGV0YWlsKSxcbiAgICAgICAgc25hcDogc25hcChkZXRhaWwpLFxuICAgICAgICBzbmFwU3RhcnQ6IHNuYXBTdGFydChkZXRhaWwpLFxuICAgICAgICByb3VuZGVkOiByb3VuZGVkKGRldGFpbCksXG4gICAgICAgIGhhc01pbkVkZ2U6IGhhc1RFZGdlKGRldGFpbCksXG4gICAgICAgIGhhc01heEVkZ2U6IGhhc0JFZGdlKGRldGFpbCksXG4gICAgICAgIG1pbkJvdW5kOiBnZXRNaW5ZQm91bmRzKHNwZWN0cnVtKSxcbiAgICAgICAgbWF4Qm91bmQ6IGdldE1heFlCb3VuZHMoc3BlY3RydW0pLFxuICAgICAgICBzY3JlZW5SYW5nZTogZ2V0WVNjcmVlblJhbmdlKHNwZWN0cnVtKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBmaW5kVmFsdWVPZihhcmdzKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldFZhbHVlRnJvbSQxID0gKHNwZWN0cnVtLCBkZXRhaWwsIHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCB5VmFsdWUgPSBmaW5kVmFsdWVPZk9mZnNldChzcGVjdHJ1bSwgZGV0YWlsLCB2YWx1ZSk7XG4gICAgICBjb25zdCBzbGlkZXJWYWwgPSB5VmFsdWU7XG4gICAgICBmaXJlU2xpZGVyQ2hhbmdlJDEoc3BlY3RydW0sIHNsaWRlclZhbCk7XG4gICAgICByZXR1cm4geVZhbHVlO1xuICAgIH07XG4gICAgY29uc3Qgc2V0VG9NaW4kMSA9IChzcGVjdHJ1bSwgZGV0YWlsKSA9PiB7XG4gICAgICBjb25zdCBtaW4gPSBtaW5ZKGRldGFpbCk7XG4gICAgICBmaXJlU2xpZGVyQ2hhbmdlJDEoc3BlY3RydW0sIG1pbik7XG4gICAgfTtcbiAgICBjb25zdCBzZXRUb01heCQxID0gKHNwZWN0cnVtLCBkZXRhaWwpID0+IHtcbiAgICAgIGNvbnN0IG1heCA9IG1heFkoZGV0YWlsKTtcbiAgICAgIGZpcmVTbGlkZXJDaGFuZ2UkMShzcGVjdHJ1bSwgbWF4KTtcbiAgICB9O1xuICAgIGNvbnN0IG1vdmVCeSQxID0gKGRpcmVjdGlvbiwgc3BlY3RydW0sIGRldGFpbCkgPT4ge1xuICAgICAgY29uc3QgZiA9IGRpcmVjdGlvbiA+IDAgPyBpbmNyZWFzZUJ5IDogcmVkdWNlQnk7XG4gICAgICBjb25zdCB5VmFsdWUgPSBmKGN1cnJlbnRWYWx1ZShkZXRhaWwpLCBtaW5ZKGRldGFpbCksIG1heFkoZGV0YWlsKSwgc3RlcChkZXRhaWwpKTtcbiAgICAgIGZpcmVTbGlkZXJDaGFuZ2UkMShzcGVjdHJ1bSwgeVZhbHVlKTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHlWYWx1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVNb3ZlbWVudCQxID0gZGlyZWN0aW9uID0+IChzcGVjdHJ1bSwgZGV0YWlsKSA9PiBtb3ZlQnkkMShkaXJlY3Rpb24sIHNwZWN0cnVtLCBkZXRhaWwpLm1hcChhbHdheXMpO1xuICAgIGNvbnN0IGdldFZhbHVlRnJvbUV2ZW50JDEgPSBzaW11bGF0ZWRFdmVudCA9PiB7XG4gICAgICBjb25zdCBwb3MgPSBnZXRFdmVudFNvdXJjZShzaW11bGF0ZWRFdmVudCk7XG4gICAgICByZXR1cm4gcG9zLm1hcChwID0+IHtcbiAgICAgICAgcmV0dXJuIHAudG9wO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kT2Zmc2V0T2ZWYWx1ZSA9IChzcGVjdHJ1bSwgZGV0YWlsLCB2YWx1ZSwgbWluRWRnZSwgbWF4RWRnZSkgPT4ge1xuICAgICAgY29uc3QgbWluT2Zmc2V0ID0gMDtcbiAgICAgIGNvbnN0IG1heE9mZnNldCA9IGdldFlTY3JlZW5SYW5nZShzcGVjdHJ1bSk7XG4gICAgICBjb25zdCBjZW50ZXJNaW5FZGdlID0gbWluRWRnZS5iaW5kKGVkZ2UgPT4gT3B0aW9uYWwuc29tZShnZXRZQ2VudGVyT2ZmU2V0T2YoZWRnZSwgc3BlY3RydW0pKSkuZ2V0T3IobWluT2Zmc2V0KTtcbiAgICAgIGNvbnN0IGNlbnRlck1heEVkZ2UgPSBtYXhFZGdlLmJpbmQoZWRnZSA9PiBPcHRpb25hbC5zb21lKGdldFlDZW50ZXJPZmZTZXRPZihlZGdlLCBzcGVjdHJ1bSkpKS5nZXRPcihtYXhPZmZzZXQpO1xuICAgICAgY29uc3QgYXJncyA9IHtcbiAgICAgICAgbWluOiBtaW5ZKGRldGFpbCksXG4gICAgICAgIG1heDogbWF4WShkZXRhaWwpLFxuICAgICAgICByYW5nZTogeVJhbmdlKGRldGFpbCksXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBoYXNNaW5FZGdlOiBoYXNURWRnZShkZXRhaWwpLFxuICAgICAgICBoYXNNYXhFZGdlOiBoYXNCRWRnZShkZXRhaWwpLFxuICAgICAgICBtaW5Cb3VuZDogZ2V0TWluWUJvdW5kcyhzcGVjdHJ1bSksXG4gICAgICAgIG1pbk9mZnNldCxcbiAgICAgICAgbWF4Qm91bmQ6IGdldE1heFlCb3VuZHMoc3BlY3RydW0pLFxuICAgICAgICBtYXhPZmZzZXQsXG4gICAgICAgIGNlbnRlck1pbkVkZ2UsXG4gICAgICAgIGNlbnRlck1heEVkZ2VcbiAgICAgIH07XG4gICAgICByZXR1cm4gZmluZE9mZnNldE9mVmFsdWUkMihhcmdzKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRQb3NpdGlvbk9mVmFsdWUgPSAoc2xpZGVyLCBzcGVjdHJ1bSwgdmFsdWUsIG1pbkVkZ2UsIG1heEVkZ2UsIGRldGFpbCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZmluZE9mZnNldE9mVmFsdWUoc3BlY3RydW0sIGRldGFpbCwgdmFsdWUsIG1pbkVkZ2UsIG1heEVkZ2UpO1xuICAgICAgcmV0dXJuIGdldE1pbllCb3VuZHMoc3BlY3RydW0pIC0gZ2V0TWluWUJvdW5kcyhzbGlkZXIpICsgb2Zmc2V0O1xuICAgIH07XG4gICAgY29uc3Qgc2V0UG9zaXRpb25Gcm9tVmFsdWUkMSA9IChzbGlkZXIsIHRodW1iLCBkZXRhaWwsIGVkZ2VzKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGN1cnJlbnRWYWx1ZShkZXRhaWwpO1xuICAgICAgY29uc3QgcG9zID0gZmluZFBvc2l0aW9uT2ZWYWx1ZShzbGlkZXIsIGVkZ2VzLmdldFNwZWN0cnVtKHNsaWRlciksIHZhbHVlLCBlZGdlcy5nZXRUb3BFZGdlKHNsaWRlciksIGVkZ2VzLmdldEJvdHRvbUVkZ2Uoc2xpZGVyKSwgZGV0YWlsKTtcbiAgICAgIGNvbnN0IHRodW1iUmFkaXVzID0gZ2V0JGQodGh1bWIuZWxlbWVudCkgLyAyO1xuICAgICAgc2V0JDgodGh1bWIuZWxlbWVudCwgJ3RvcCcsIHBvcyAtIHRodW1iUmFkaXVzICsgJ3B4Jyk7XG4gICAgfTtcbiAgICBjb25zdCBvbkxlZnQkMSA9IE9wdGlvbmFsLm5vbmU7XG4gICAgY29uc3Qgb25SaWdodCQxID0gT3B0aW9uYWwubm9uZTtcbiAgICBjb25zdCBvblVwJDEgPSBoYW5kbGVNb3ZlbWVudCQxKC0xKTtcbiAgICBjb25zdCBvbkRvd24kMSA9IGhhbmRsZU1vdmVtZW50JDEoMSk7XG4gICAgY29uc3QgZWRnZUFjdGlvbnMkMSA9IHtcbiAgICAgICd0b3AtbGVmdCc6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICd0b3AnOiBPcHRpb25hbC5zb21lKHNldFRvVEVkZ2UpLFxuICAgICAgJ3RvcC1yaWdodCc6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICdyaWdodCc6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICdib3R0b20tcmlnaHQnOiBPcHRpb25hbC5ub25lKCksXG4gICAgICAnYm90dG9tJzogT3B0aW9uYWwuc29tZShzZXRUb0JFZGdlKSxcbiAgICAgICdib3R0b20tbGVmdCc6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICdsZWZ0JzogT3B0aW9uYWwubm9uZSgpXG4gICAgfTtcblxuICAgIHZhciBWZXJ0aWNhbE1vZGVsID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIHNldFZhbHVlRnJvbTogc2V0VmFsdWVGcm9tJDEsXG4gICAgICAgIHNldFRvTWluOiBzZXRUb01pbiQxLFxuICAgICAgICBzZXRUb01heDogc2V0VG9NYXgkMSxcbiAgICAgICAgZmluZFZhbHVlT2ZPZmZzZXQ6IGZpbmRWYWx1ZU9mT2Zmc2V0LFxuICAgICAgICBnZXRWYWx1ZUZyb21FdmVudDogZ2V0VmFsdWVGcm9tRXZlbnQkMSxcbiAgICAgICAgZmluZFBvc2l0aW9uT2ZWYWx1ZTogZmluZFBvc2l0aW9uT2ZWYWx1ZSxcbiAgICAgICAgc2V0UG9zaXRpb25Gcm9tVmFsdWU6IHNldFBvc2l0aW9uRnJvbVZhbHVlJDEsXG4gICAgICAgIG9uTGVmdDogb25MZWZ0JDEsXG4gICAgICAgIG9uUmlnaHQ6IG9uUmlnaHQkMSxcbiAgICAgICAgb25VcDogb25VcCQxLFxuICAgICAgICBvbkRvd246IG9uRG93biQxLFxuICAgICAgICBlZGdlQWN0aW9uczogZWRnZUFjdGlvbnMkMVxuICAgIH0pO1xuXG4gICAgY29uc3QgZmlyZVNsaWRlckNoYW5nZSA9IChzcGVjdHJ1bSwgdmFsdWUpID0+IHtcbiAgICAgIGVtaXRXaXRoKHNwZWN0cnVtLCBzbGlkZXJDaGFuZ2VFdmVudCgpLCB7IHZhbHVlIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2xpZGVyVmFsdWUgPSAoeCwgeSkgPT4gKHtcbiAgICAgIHgsXG4gICAgICB5XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0VmFsdWVGcm9tID0gKHNwZWN0cnVtLCBkZXRhaWwsIHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCB4VmFsdWUgPSBmaW5kVmFsdWVPZk9mZnNldCQxKHNwZWN0cnVtLCBkZXRhaWwsIHZhbHVlLmxlZnQpO1xuICAgICAgY29uc3QgeVZhbHVlID0gZmluZFZhbHVlT2ZPZmZzZXQoc3BlY3RydW0sIGRldGFpbCwgdmFsdWUudG9wKTtcbiAgICAgIGNvbnN0IHZhbCA9IHNsaWRlclZhbHVlKHhWYWx1ZSwgeVZhbHVlKTtcbiAgICAgIGZpcmVTbGlkZXJDaGFuZ2Uoc3BlY3RydW0sIHZhbCk7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH07XG4gICAgY29uc3QgbW92ZUJ5ID0gKGRpcmVjdGlvbiwgaXNWZXJ0aWNhbE1vdmVtZW50LCBzcGVjdHJ1bSwgZGV0YWlsKSA9PiB7XG4gICAgICBjb25zdCBmID0gZGlyZWN0aW9uID4gMCA/IGluY3JlYXNlQnkgOiByZWR1Y2VCeTtcbiAgICAgIGNvbnN0IHhWYWx1ZSA9IGlzVmVydGljYWxNb3ZlbWVudCA/IGN1cnJlbnRWYWx1ZShkZXRhaWwpLnggOiBmKGN1cnJlbnRWYWx1ZShkZXRhaWwpLngsIG1pblgoZGV0YWlsKSwgbWF4WChkZXRhaWwpLCBzdGVwKGRldGFpbCkpO1xuICAgICAgY29uc3QgeVZhbHVlID0gIWlzVmVydGljYWxNb3ZlbWVudCA/IGN1cnJlbnRWYWx1ZShkZXRhaWwpLnkgOiBmKGN1cnJlbnRWYWx1ZShkZXRhaWwpLnksIG1pblkoZGV0YWlsKSwgbWF4WShkZXRhaWwpLCBzdGVwKGRldGFpbCkpO1xuICAgICAgZmlyZVNsaWRlckNoYW5nZShzcGVjdHJ1bSwgc2xpZGVyVmFsdWUoeFZhbHVlLCB5VmFsdWUpKTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHhWYWx1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVNb3ZlbWVudCA9IChkaXJlY3Rpb24sIGlzVmVydGljYWxNb3ZlbWVudCkgPT4gKHNwZWN0cnVtLCBkZXRhaWwpID0+IG1vdmVCeShkaXJlY3Rpb24sIGlzVmVydGljYWxNb3ZlbWVudCwgc3BlY3RydW0sIGRldGFpbCkubWFwKGFsd2F5cyk7XG4gICAgY29uc3Qgc2V0VG9NaW4gPSAoc3BlY3RydW0sIGRldGFpbCkgPT4ge1xuICAgICAgY29uc3QgbVggPSBtaW5YKGRldGFpbCk7XG4gICAgICBjb25zdCBtWSA9IG1pblkoZGV0YWlsKTtcbiAgICAgIGZpcmVTbGlkZXJDaGFuZ2Uoc3BlY3RydW0sIHNsaWRlclZhbHVlKG1YLCBtWSkpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0VG9NYXggPSAoc3BlY3RydW0sIGRldGFpbCkgPT4ge1xuICAgICAgY29uc3QgbVggPSBtYXhYKGRldGFpbCk7XG4gICAgICBjb25zdCBtWSA9IG1heFkoZGV0YWlsKTtcbiAgICAgIGZpcmVTbGlkZXJDaGFuZ2Uoc3BlY3RydW0sIHNsaWRlclZhbHVlKG1YLCBtWSkpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0VmFsdWVGcm9tRXZlbnQgPSBzaW11bGF0ZWRFdmVudCA9PiBnZXRFdmVudFNvdXJjZShzaW11bGF0ZWRFdmVudCk7XG4gICAgY29uc3Qgc2V0UG9zaXRpb25Gcm9tVmFsdWUgPSAoc2xpZGVyLCB0aHVtYiwgZGV0YWlsLCBlZGdlcykgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBjdXJyZW50VmFsdWUoZGV0YWlsKTtcbiAgICAgIGNvbnN0IHhQb3MgPSBmaW5kUG9zaXRpb25PZlZhbHVlJDEoc2xpZGVyLCBlZGdlcy5nZXRTcGVjdHJ1bShzbGlkZXIpLCB2YWx1ZS54LCBlZGdlcy5nZXRMZWZ0RWRnZShzbGlkZXIpLCBlZGdlcy5nZXRSaWdodEVkZ2Uoc2xpZGVyKSwgZGV0YWlsKTtcbiAgICAgIGNvbnN0IHlQb3MgPSBmaW5kUG9zaXRpb25PZlZhbHVlKHNsaWRlciwgZWRnZXMuZ2V0U3BlY3RydW0oc2xpZGVyKSwgdmFsdWUueSwgZWRnZXMuZ2V0VG9wRWRnZShzbGlkZXIpLCBlZGdlcy5nZXRCb3R0b21FZGdlKHNsaWRlciksIGRldGFpbCk7XG4gICAgICBjb25zdCB0aHVtYlhSYWRpdXMgPSBnZXQkYyh0aHVtYi5lbGVtZW50KSAvIDI7XG4gICAgICBjb25zdCB0aHVtYllSYWRpdXMgPSBnZXQkZCh0aHVtYi5lbGVtZW50KSAvIDI7XG4gICAgICBzZXQkOCh0aHVtYi5lbGVtZW50LCAnbGVmdCcsIHhQb3MgLSB0aHVtYlhSYWRpdXMgKyAncHgnKTtcbiAgICAgIHNldCQ4KHRodW1iLmVsZW1lbnQsICd0b3AnLCB5UG9zIC0gdGh1bWJZUmFkaXVzICsgJ3B4Jyk7XG4gICAgfTtcbiAgICBjb25zdCBvbkxlZnQgPSBoYW5kbGVNb3ZlbWVudCgtMSwgZmFsc2UpO1xuICAgIGNvbnN0IG9uUmlnaHQgPSBoYW5kbGVNb3ZlbWVudCgxLCBmYWxzZSk7XG4gICAgY29uc3Qgb25VcCA9IGhhbmRsZU1vdmVtZW50KC0xLCB0cnVlKTtcbiAgICBjb25zdCBvbkRvd24gPSBoYW5kbGVNb3ZlbWVudCgxLCB0cnVlKTtcbiAgICBjb25zdCBlZGdlQWN0aW9ucyA9IHtcbiAgICAgICd0b3AtbGVmdCc6IE9wdGlvbmFsLnNvbWUoc2V0VG9UTEVkZ2VYWSksXG4gICAgICAndG9wJzogT3B0aW9uYWwuc29tZShzZXRUb1RFZGdlWFkpLFxuICAgICAgJ3RvcC1yaWdodCc6IE9wdGlvbmFsLnNvbWUoc2V0VG9UUkVkZ2VYWSksXG4gICAgICAncmlnaHQnOiBPcHRpb25hbC5zb21lKHNldFRvUkVkZ2VYWSksXG4gICAgICAnYm90dG9tLXJpZ2h0JzogT3B0aW9uYWwuc29tZShzZXRUb0JSRWRnZVhZKSxcbiAgICAgICdib3R0b20nOiBPcHRpb25hbC5zb21lKHNldFRvQkVkZ2VYWSksXG4gICAgICAnYm90dG9tLWxlZnQnOiBPcHRpb25hbC5zb21lKHNldFRvQkxFZGdlWFkpLFxuICAgICAgJ2xlZnQnOiBPcHRpb25hbC5zb21lKHNldFRvTEVkZ2VYWSlcbiAgICB9O1xuXG4gICAgdmFyIFR3b0RNb2RlbCA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBzZXRWYWx1ZUZyb206IHNldFZhbHVlRnJvbSxcbiAgICAgICAgc2V0VG9NaW46IHNldFRvTWluLFxuICAgICAgICBzZXRUb01heDogc2V0VG9NYXgsXG4gICAgICAgIGdldFZhbHVlRnJvbUV2ZW50OiBnZXRWYWx1ZUZyb21FdmVudCxcbiAgICAgICAgc2V0UG9zaXRpb25Gcm9tVmFsdWU6IHNldFBvc2l0aW9uRnJvbVZhbHVlLFxuICAgICAgICBvbkxlZnQ6IG9uTGVmdCxcbiAgICAgICAgb25SaWdodDogb25SaWdodCxcbiAgICAgICAgb25VcDogb25VcCxcbiAgICAgICAgb25Eb3duOiBvbkRvd24sXG4gICAgICAgIGVkZ2VBY3Rpb25zOiBlZGdlQWN0aW9uc1xuICAgIH0pO1xuXG4gICAgY29uc3QgU2xpZGVyU2NoZW1hID0gW1xuICAgICAgZGVmYXVsdGVkKCdzdGVwU2l6ZScsIDEpLFxuICAgICAgZGVmYXVsdGVkKCdvbkNoYW5nZScsIG5vb3ApLFxuICAgICAgZGVmYXVsdGVkKCdvbkNob29zZScsIG5vb3ApLFxuICAgICAgZGVmYXVsdGVkKCdvbkluaXQnLCBub29wKSxcbiAgICAgIGRlZmF1bHRlZCgnb25EcmFnU3RhcnQnLCBub29wKSxcbiAgICAgIGRlZmF1bHRlZCgnb25EcmFnRW5kJywgbm9vcCksXG4gICAgICBkZWZhdWx0ZWQoJ3NuYXBUb0dyaWQnLCBmYWxzZSksXG4gICAgICBkZWZhdWx0ZWQoJ3JvdW5kZWQnLCB0cnVlKSxcbiAgICAgIG9wdGlvbiQzKCdzbmFwU3RhcnQnKSxcbiAgICAgIHJlcXVpcmVkT2YoJ21vZGVsJywgY2hvb3NlJDEoJ21vZGUnLCB7XG4gICAgICAgIHg6IFtcbiAgICAgICAgICBkZWZhdWx0ZWQoJ21pblgnLCAwKSxcbiAgICAgICAgICBkZWZhdWx0ZWQoJ21heFgnLCAxMDApLFxuICAgICAgICAgIGN1c3RvbUZpZWxkKCd2YWx1ZScsIHNwZWMgPT4gQ2VsbChzcGVjLm1vZGUubWluWCkpLFxuICAgICAgICAgIHJlcXVpcmVkJDEoJ2dldEluaXRpYWxWYWx1ZScpLFxuICAgICAgICAgIG91dHB1dCQxKCdtYW5hZ2VyJywgSG9yaXpvbnRhbE1vZGVsKVxuICAgICAgICBdLFxuICAgICAgICB5OiBbXG4gICAgICAgICAgZGVmYXVsdGVkKCdtaW5ZJywgMCksXG4gICAgICAgICAgZGVmYXVsdGVkKCdtYXhZJywgMTAwKSxcbiAgICAgICAgICBjdXN0b21GaWVsZCgndmFsdWUnLCBzcGVjID0+IENlbGwoc3BlYy5tb2RlLm1pblkpKSxcbiAgICAgICAgICByZXF1aXJlZCQxKCdnZXRJbml0aWFsVmFsdWUnKSxcbiAgICAgICAgICBvdXRwdXQkMSgnbWFuYWdlcicsIFZlcnRpY2FsTW9kZWwpXG4gICAgICAgIF0sXG4gICAgICAgIHh5OiBbXG4gICAgICAgICAgZGVmYXVsdGVkKCdtaW5YJywgMCksXG4gICAgICAgICAgZGVmYXVsdGVkKCdtYXhYJywgMTAwKSxcbiAgICAgICAgICBkZWZhdWx0ZWQoJ21pblknLCAwKSxcbiAgICAgICAgICBkZWZhdWx0ZWQoJ21heFknLCAxMDApLFxuICAgICAgICAgIGN1c3RvbUZpZWxkKCd2YWx1ZScsIHNwZWMgPT4gQ2VsbCh7XG4gICAgICAgICAgICB4OiBzcGVjLm1vZGUubWluWCxcbiAgICAgICAgICAgIHk6IHNwZWMubW9kZS5taW5ZXG4gICAgICAgICAgfSkpLFxuICAgICAgICAgIHJlcXVpcmVkJDEoJ2dldEluaXRpYWxWYWx1ZScpLFxuICAgICAgICAgIG91dHB1dCQxKCdtYW5hZ2VyJywgVHdvRE1vZGVsKVxuICAgICAgICBdXG4gICAgICB9KSksXG4gICAgICBmaWVsZCgnc2xpZGVyQmVoYXZpb3VycycsIFtcbiAgICAgICAgS2V5aW5nLFxuICAgICAgICBSZXByZXNlbnRpbmdcbiAgICAgIF0pLFxuICAgICAgY3VzdG9tRmllbGQoJ21vdXNlSXNEb3duJywgKCkgPT4gQ2VsbChmYWxzZSkpXG4gICAgXTtcblxuICAgIGNvbnN0IHNrZXRjaCQyID0gKGRldGFpbCwgY29tcG9uZW50cywgX3NwZWMsIF9leHRlcm5hbHMpID0+IHtcbiAgICAgIGNvbnN0IGdldFRodW1iID0gY29tcG9uZW50ID0+IGdldFBhcnRPckRpZShjb21wb25lbnQsIGRldGFpbCwgJ3RodW1iJyk7XG4gICAgICBjb25zdCBnZXRTcGVjdHJ1bSA9IGNvbXBvbmVudCA9PiBnZXRQYXJ0T3JEaWUoY29tcG9uZW50LCBkZXRhaWwsICdzcGVjdHJ1bScpO1xuICAgICAgY29uc3QgZ2V0TGVmdEVkZ2UgPSBjb21wb25lbnQgPT4gZ2V0UGFydChjb21wb25lbnQsIGRldGFpbCwgJ2xlZnQtZWRnZScpO1xuICAgICAgY29uc3QgZ2V0UmlnaHRFZGdlID0gY29tcG9uZW50ID0+IGdldFBhcnQoY29tcG9uZW50LCBkZXRhaWwsICdyaWdodC1lZGdlJyk7XG4gICAgICBjb25zdCBnZXRUb3BFZGdlID0gY29tcG9uZW50ID0+IGdldFBhcnQoY29tcG9uZW50LCBkZXRhaWwsICd0b3AtZWRnZScpO1xuICAgICAgY29uc3QgZ2V0Qm90dG9tRWRnZSA9IGNvbXBvbmVudCA9PiBnZXRQYXJ0KGNvbXBvbmVudCwgZGV0YWlsLCAnYm90dG9tLWVkZ2UnKTtcbiAgICAgIGNvbnN0IG1vZGVsRGV0YWlsID0gZGV0YWlsLm1vZGVsO1xuICAgICAgY29uc3QgbW9kZWwgPSBtb2RlbERldGFpbC5tYW5hZ2VyO1xuICAgICAgY29uc3QgcmVmcmVzaCA9IChzbGlkZXIsIHRodW1iKSA9PiB7XG4gICAgICAgIG1vZGVsLnNldFBvc2l0aW9uRnJvbVZhbHVlKHNsaWRlciwgdGh1bWIsIGRldGFpbCwge1xuICAgICAgICAgIGdldExlZnRFZGdlLFxuICAgICAgICAgIGdldFJpZ2h0RWRnZSxcbiAgICAgICAgICBnZXRUb3BFZGdlLFxuICAgICAgICAgIGdldEJvdHRvbUVkZ2UsXG4gICAgICAgICAgZ2V0U3BlY3RydW1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0VmFsdWUgPSAoc2xpZGVyLCBuZXdWYWx1ZSkgPT4ge1xuICAgICAgICBtb2RlbERldGFpbC52YWx1ZS5zZXQobmV3VmFsdWUpO1xuICAgICAgICBjb25zdCB0aHVtYiA9IGdldFRodW1iKHNsaWRlcik7XG4gICAgICAgIHJlZnJlc2goc2xpZGVyLCB0aHVtYik7XG4gICAgICB9O1xuICAgICAgY29uc3QgY2hhbmdlVmFsdWUgPSAoc2xpZGVyLCBuZXdWYWx1ZSkgPT4ge1xuICAgICAgICBzZXRWYWx1ZShzbGlkZXIsIG5ld1ZhbHVlKTtcbiAgICAgICAgY29uc3QgdGh1bWIgPSBnZXRUaHVtYihzbGlkZXIpO1xuICAgICAgICBkZXRhaWwub25DaGFuZ2Uoc2xpZGVyLCB0aHVtYiwgbmV3VmFsdWUpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNldFRvTWluID0gc2xpZGVyID0+IHtcbiAgICAgICAgbW9kZWwuc2V0VG9NaW4oc2xpZGVyLCBkZXRhaWwpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc2V0VG9NYXggPSBzbGlkZXIgPT4ge1xuICAgICAgICBtb2RlbC5zZXRUb01heChzbGlkZXIsIGRldGFpbCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgY2hvb3NlID0gc2xpZGVyID0+IHtcbiAgICAgICAgY29uc3QgZmlyZU9uQ2hvb3NlID0gKCkgPT4ge1xuICAgICAgICAgIGdldFBhcnQoc2xpZGVyLCBkZXRhaWwsICd0aHVtYicpLmVhY2godGh1bWIgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtb2RlbERldGFpbC52YWx1ZS5nZXQoKTtcbiAgICAgICAgICAgIGRldGFpbC5vbkNob29zZShzbGlkZXIsIHRodW1iLCB2YWx1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHdhc0Rvd24gPSBkZXRhaWwubW91c2VJc0Rvd24uZ2V0KCk7XG4gICAgICAgIGRldGFpbC5tb3VzZUlzRG93bi5zZXQoZmFsc2UpO1xuICAgICAgICBpZiAod2FzRG93bikge1xuICAgICAgICAgIGZpcmVPbkNob29zZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25EcmFnU3RhcnQgPSAoc2xpZGVyLCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICBzaW11bGF0ZWRFdmVudC5zdG9wKCk7XG4gICAgICAgIGRldGFpbC5tb3VzZUlzRG93bi5zZXQodHJ1ZSk7XG4gICAgICAgIGRldGFpbC5vbkRyYWdTdGFydChzbGlkZXIsIGdldFRodW1iKHNsaWRlcikpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG9uRHJhZ0VuZCA9IChzbGlkZXIsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgIHNpbXVsYXRlZEV2ZW50LnN0b3AoKTtcbiAgICAgICAgZGV0YWlsLm9uRHJhZ0VuZChzbGlkZXIsIGdldFRodW1iKHNsaWRlcikpO1xuICAgICAgICBjaG9vc2Uoc2xpZGVyKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1aWQ6IGRldGFpbC51aWQsXG4gICAgICAgIGRvbTogZGV0YWlsLmRvbSxcbiAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgYmVoYXZpb3VyczogYXVnbWVudChkZXRhaWwuc2xpZGVyQmVoYXZpb3VycywgW1xuICAgICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgICAgbW9kZTogJ3NwZWNpYWwnLFxuICAgICAgICAgICAgZm9jdXNJbjogc2xpZGVyID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldFBhcnQoc2xpZGVyLCBkZXRhaWwsICdzcGVjdHJ1bScpLm1hcChLZXlpbmcuZm9jdXNJbikubWFwKGFsd2F5cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgUmVwcmVzZW50aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBzdG9yZToge1xuICAgICAgICAgICAgICBtb2RlOiAnbWFudWFsJyxcbiAgICAgICAgICAgICAgZ2V0VmFsdWU6IF8gPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2RlbERldGFpbC52YWx1ZS5nZXQoKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc2V0VmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBSZWNlaXZpbmcuY29uZmlnKHsgY2hhbm5lbHM6IHsgW21vdXNlUmVsZWFzZWQoKV06IHsgb25SZWNlaXZlOiBjaG9vc2UgfSB9IH0pXG4gICAgICAgIF0pLFxuICAgICAgICBldmVudHM6IGRlcml2ZSQyKFtcbiAgICAgICAgICBydW4kMShzbGlkZXJDaGFuZ2VFdmVudCgpLCAoc2xpZGVyLCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgY2hhbmdlVmFsdWUoc2xpZGVyLCBzaW11bGF0ZWRFdmVudC5ldmVudC52YWx1ZSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVuT25BdHRhY2hlZCgoc2xpZGVyLCBfc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdldEluaXRpYWwgPSBtb2RlbERldGFpbC5nZXRJbml0aWFsVmFsdWUoKTtcbiAgICAgICAgICAgIG1vZGVsRGV0YWlsLnZhbHVlLnNldChnZXRJbml0aWFsKTtcbiAgICAgICAgICAgIGNvbnN0IHRodW1iID0gZ2V0VGh1bWIoc2xpZGVyKTtcbiAgICAgICAgICAgIHJlZnJlc2goc2xpZGVyLCB0aHVtYik7XG4gICAgICAgICAgICBjb25zdCBzcGVjdHJ1bSA9IGdldFNwZWN0cnVtKHNsaWRlcik7XG4gICAgICAgICAgICBkZXRhaWwub25Jbml0KHNsaWRlciwgdGh1bWIsIHNwZWN0cnVtLCBtb2RlbERldGFpbC52YWx1ZS5nZXQoKSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVuJDEodG91Y2hzdGFydCgpLCBvbkRyYWdTdGFydCksXG4gICAgICAgICAgcnVuJDEodG91Y2hlbmQoKSwgb25EcmFnRW5kKSxcbiAgICAgICAgICBydW4kMShtb3VzZWRvd24oKSwgb25EcmFnU3RhcnQpLFxuICAgICAgICAgIHJ1biQxKG1vdXNldXAoKSwgb25EcmFnRW5kKVxuICAgICAgICBdKSxcbiAgICAgICAgYXBpczoge1xuICAgICAgICAgIHJlc2V0VG9NaW4sXG4gICAgICAgICAgcmVzZXRUb01heCxcbiAgICAgICAgICBzZXRWYWx1ZSxcbiAgICAgICAgICByZWZyZXNoXG4gICAgICAgIH0sXG4gICAgICAgIGRvbU1vZGlmaWNhdGlvbjogeyBzdHlsZXM6IHsgcG9zaXRpb246ICdyZWxhdGl2ZScgfSB9XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBTbGlkZXIgPSBjb21wb3NpdGUoe1xuICAgICAgbmFtZTogJ1NsaWRlcicsXG4gICAgICBjb25maWdGaWVsZHM6IFNsaWRlclNjaGVtYSxcbiAgICAgIHBhcnRGaWVsZHM6IFNsaWRlclBhcnRzLFxuICAgICAgZmFjdG9yeTogc2tldGNoJDIsXG4gICAgICBhcGlzOiB7XG4gICAgICAgIHNldFZhbHVlOiAoYXBpcywgc2xpZGVyLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGFwaXMuc2V0VmFsdWUoc2xpZGVyLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlc2V0VG9NaW46IChhcGlzLCBzbGlkZXIpID0+IHtcbiAgICAgICAgICBhcGlzLnJlc2V0VG9NaW4oc2xpZGVyKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVzZXRUb01heDogKGFwaXMsIHNsaWRlcikgPT4ge1xuICAgICAgICAgIGFwaXMucmVzZXRUb01heChzbGlkZXIpO1xuICAgICAgICB9LFxuICAgICAgICByZWZyZXNoOiAoYXBpcywgc2xpZGVyKSA9PiB7XG4gICAgICAgICAgYXBpcy5yZWZyZXNoKHNsaWRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGZpZWxkc1VwZGF0ZSA9IGdlbmVyYXRlJDYoJ3JnYi1oZXgtdXBkYXRlJyk7XG4gICAgY29uc3Qgc2xpZGVyVXBkYXRlID0gZ2VuZXJhdGUkNignc2xpZGVyLXVwZGF0ZScpO1xuICAgIGNvbnN0IHBhbGV0dGVVcGRhdGUgPSBnZW5lcmF0ZSQ2KCdwYWxldHRlLXVwZGF0ZScpO1xuXG4gICAgY29uc3Qgc2xpZGVyRmFjdG9yeSA9ICh0cmFuc2xhdGUsIGdldENsYXNzKSA9PiB7XG4gICAgICBjb25zdCBzcGVjdHJ1bSA9IFNsaWRlci5wYXJ0cy5zcGVjdHJ1bSh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogW2dldENsYXNzKCdodWUtc2xpZGVyLXNwZWN0cnVtJyldLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3ByZXNlbnRhdGlvbicgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHRodW1iID0gU2xpZGVyLnBhcnRzLnRodW1iKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbZ2V0Q2xhc3MoJ2h1ZS1zbGlkZXItdGh1bWInKV0sXG4gICAgICAgICAgYXR0cmlidXRlczogeyByb2xlOiAncHJlc2VudGF0aW9uJyB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFNsaWRlci5za2V0Y2goe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFtnZXRDbGFzcygnaHVlLXNsaWRlcicpXSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7IHJvbGU6ICdwcmVzZW50YXRpb24nIH1cbiAgICAgICAgfSxcbiAgICAgICAgcm91bmRlZDogZmFsc2UsXG4gICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgbW9kZTogJ3knLFxuICAgICAgICAgIGdldEluaXRpYWxWYWx1ZTogY29uc3RhbnQkMSgwKVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgc3BlY3RydW0sXG4gICAgICAgICAgdGh1bWJcbiAgICAgICAgXSxcbiAgICAgICAgc2xpZGVyQmVoYXZpb3VyczogZGVyaXZlJDEoW0ZvY3VzaW5nLmNvbmZpZyh7fSldKSxcbiAgICAgICAgb25DaGFuZ2U6IChzbGlkZXIsIF90aHVtYiwgdmFsdWUpID0+IHtcbiAgICAgICAgICBlbWl0V2l0aChzbGlkZXIsIHNsaWRlclVwZGF0ZSwgeyB2YWx1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG93bmVyJDEgPSAnZm9ybSc7XG4gICAgY29uc3Qgc2NoZW1hJGkgPSBbZmllbGQoJ2Zvcm1CZWhhdmlvdXJzJywgW1JlcHJlc2VudGluZ10pXTtcbiAgICBjb25zdCBnZXRQYXJ0TmFtZSQxID0gbmFtZSA9PiAnPGFsbG95LmZpZWxkLicgKyBuYW1lICsgJz4nO1xuICAgIGNvbnN0IHNrZXRjaCQxID0gZlNwZWMgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSAoKCkgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBbXTtcbiAgICAgICAgY29uc3QgZmllbGQgPSAobmFtZSwgY29uZmlnKSA9PiB7XG4gICAgICAgICAgcmVjb3JkLnB1c2gobmFtZSk7XG4gICAgICAgICAgcmV0dXJuIGdlbmVyYXRlT25lJDEob3duZXIkMSwgZ2V0UGFydE5hbWUkMShuYW1lKSwgY29uZmlnKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICByZWNvcmQ6IGNvbnN0YW50JDEocmVjb3JkKVxuICAgICAgICB9O1xuICAgICAgfSkoKTtcbiAgICAgIGNvbnN0IHNwZWMgPSBmU3BlYyhwYXJ0cyk7XG4gICAgICBjb25zdCBwYXJ0TmFtZXMgPSBwYXJ0cy5yZWNvcmQoKTtcbiAgICAgIGNvbnN0IGZpZWxkUGFydHMgPSBtYXAkMihwYXJ0TmFtZXMsIG4gPT4gcmVxdWlyZWQoe1xuICAgICAgICBuYW1lOiBuLFxuICAgICAgICBwbmFtZTogZ2V0UGFydE5hbWUkMShuKVxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIGNvbXBvc2l0ZSQxKG93bmVyJDEsIHNjaGVtYSRpLCBmaWVsZFBhcnRzLCBtYWtlJDQsIHNwZWMpO1xuICAgIH07XG4gICAgY29uc3QgdG9SZXN1bHQgPSAobywgZSkgPT4gby5mb2xkKCgpID0+IFJlc3VsdC5lcnJvcihlKSwgUmVzdWx0LnZhbHVlKTtcbiAgICBjb25zdCBtYWtlJDQgPSAoZGV0YWlsLCBjb21wb25lbnRzKSA9PiAoe1xuICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgY29tcG9uZW50cyxcbiAgICAgIGJlaGF2aW91cnM6IGF1Z21lbnQoZGV0YWlsLmZvcm1CZWhhdmlvdXJzLCBbUmVwcmVzZW50aW5nLmNvbmZpZyh7XG4gICAgICAgICAgc3RvcmU6IHtcbiAgICAgICAgICAgIG1vZGU6ICdtYW51YWwnLFxuICAgICAgICAgICAgZ2V0VmFsdWU6IGZvcm0gPT4ge1xuICAgICAgICAgICAgICBjb25zdCByZXNQcyA9IGdldEFsbFBhcnRzKGZvcm0sIGRldGFpbCk7XG4gICAgICAgICAgICAgIHJldHVybiBtYXAkMShyZXNQcywgKHJlc1BUaHVuaywgcE5hbWUpID0+IHJlc1BUaHVuaygpLmJpbmQodiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0ID0gQ29tcG9zaW5nLmdldEN1cnJlbnQodik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvUmVzdWx0KG9wdCwgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBhIGN1cnJlbnQgY29tcG9uZW50IHRvIGV4dHJhY3QgdGhlIHZhbHVlIGZyb20gZm9yIGZvcm0gcGFydCAnJHsgcE5hbWUgfSc6IGAgKyBlbGVtZW50KHYuZWxlbWVudCkpKTtcbiAgICAgICAgICAgICAgfSkubWFwKFJlcHJlc2VudGluZy5nZXRWYWx1ZSkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldFZhbHVlOiAoZm9ybSwgdmFsdWVzKSA9PiB7XG4gICAgICAgICAgICAgIGVhY2godmFsdWVzLCAobmV3VmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGdldFBhcnQoZm9ybSwgZGV0YWlsLCBrZXkpLmVhY2god3JhcHBlciA9PiB7XG4gICAgICAgICAgICAgICAgICBDb21wb3NpbmcuZ2V0Q3VycmVudCh3cmFwcGVyKS5lYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgUmVwcmVzZW50aW5nLnNldFZhbHVlKGZpZWxkLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KV0pLFxuICAgICAgYXBpczoge1xuICAgICAgICBnZXRGaWVsZDogKGZvcm0sIGtleSkgPT4ge1xuICAgICAgICAgIHJldHVybiBnZXRQYXJ0KGZvcm0sIGRldGFpbCwga2V5KS5iaW5kKENvbXBvc2luZy5nZXRDdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IEZvcm0gPSB7XG4gICAgICBnZXRGaWVsZDogbWFrZUFwaSgoYXBpcywgY29tcG9uZW50LCBrZXkpID0+IGFwaXMuZ2V0RmllbGQoY29tcG9uZW50LCBrZXkpKSxcbiAgICAgIHNrZXRjaDogc2tldGNoJDFcbiAgICB9O1xuXG4gICAgY29uc3QgdmFsaWRJbnB1dCA9IGdlbmVyYXRlJDYoJ3ZhbGlkLWlucHV0Jyk7XG4gICAgY29uc3QgaW52YWxpZElucHV0ID0gZ2VuZXJhdGUkNignaW52YWxpZC1pbnB1dCcpO1xuICAgIGNvbnN0IHZhbGlkYXRpbmdJbnB1dCA9IGdlbmVyYXRlJDYoJ3ZhbGlkYXRpbmctaW5wdXQnKTtcbiAgICBjb25zdCB0cmFuc2xhdGVQcmVmaXggPSAnY29sb3JjdXN0b20ucmdiLic7XG4gICAgY29uc3QgcmdiRm9ybUZhY3RvcnkgPSAodHJhbnNsYXRlLCBnZXRDbGFzcywgb25WYWxpZEhleHgsIG9uSW52YWxpZEhleHgpID0+IHtcbiAgICAgIGNvbnN0IGludmFsaWRhdGlvbiA9IChsYWJlbCwgaXNWYWxpZCkgPT4gSW52YWxpZGF0aW5nLmNvbmZpZyh7XG4gICAgICAgIGludmFsaWRDbGFzczogZ2V0Q2xhc3MoJ2ludmFsaWQnKSxcbiAgICAgICAgbm90aWZ5OiB7XG4gICAgICAgICAgb25WYWxpZGF0ZTogY29tcCA9PiB7XG4gICAgICAgICAgICBlbWl0V2l0aChjb21wLCB2YWxpZGF0aW5nSW5wdXQsIHsgdHlwZTogbGFiZWwgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvblZhbGlkOiBjb21wID0+IHtcbiAgICAgICAgICAgIGVtaXRXaXRoKGNvbXAsIHZhbGlkSW5wdXQsIHtcbiAgICAgICAgICAgICAgdHlwZTogbGFiZWwsXG4gICAgICAgICAgICAgIHZhbHVlOiBSZXByZXNlbnRpbmcuZ2V0VmFsdWUoY29tcClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25JbnZhbGlkOiBjb21wID0+IHtcbiAgICAgICAgICAgIGVtaXRXaXRoKGNvbXAsIGludmFsaWRJbnB1dCwge1xuICAgICAgICAgICAgICB0eXBlOiBsYWJlbCxcbiAgICAgICAgICAgICAgdmFsdWU6IFJlcHJlc2VudGluZy5nZXRWYWx1ZShjb21wKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0b3I6IHtcbiAgICAgICAgICB2YWxpZGF0ZTogY29tcCA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IFJlcHJlc2VudGluZy5nZXRWYWx1ZShjb21wKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGlzVmFsaWQodmFsdWUpID8gUmVzdWx0LnZhbHVlKHRydWUpIDogUmVzdWx0LmVycm9yKHRyYW5zbGF0ZSgnYXJpYS5pbnB1dC5pbnZhbGlkJykpO1xuICAgICAgICAgICAgcmV0dXJuIEZ1dHVyZS5wdXJlKHJlcyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB2YWxpZGF0ZU9uTG9hZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCByZW5kZXJUZXh0RmllbGQgPSAoaXNWYWxpZCwgbmFtZSwgbGFiZWwsIGRlc2NyaXB0aW9uLCBkYXRhKSA9PiB7XG4gICAgICAgIGNvbnN0IGhlbHB0ZXh0ID0gdHJhbnNsYXRlKHRyYW5zbGF0ZVByZWZpeCArICdyYW5nZScpO1xuICAgICAgICBjb25zdCBwTGFiZWwgPSBGb3JtRmllbGQucGFydHMubGFiZWwoe1xuICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgdGFnOiAnbGFiZWwnLFxuICAgICAgICAgICAgYXR0cmlidXRlczogeyAnYXJpYS1sYWJlbCc6IGRlc2NyaXB0aW9uIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbXBvbmVudHM6IFt0ZXh0JDIobGFiZWwpXVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcEZpZWxkID0gRm9ybUZpZWxkLnBhcnRzLmZpZWxkKHtcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGZhY3Rvcnk6IElucHV0LFxuICAgICAgICAgIGlucHV0QXR0cmlidXRlczoge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgLi4ubmFtZSA9PT0gJ2hleCcgPyB7ICdhcmlhLWxpdmUnOiAncG9saXRlJyB9IDoge31cbiAgICAgICAgICB9LFxuICAgICAgICAgIGlucHV0Q2xhc3NlczogW2dldENsYXNzKCd0ZXh0ZmllbGQnKV0sXG4gICAgICAgICAgaW5wdXRCZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgICBpbnZhbGlkYXRpb24obmFtZSwgaXNWYWxpZCksXG4gICAgICAgICAgICBUYWJzdG9wcGluZy5jb25maWcoe30pXG4gICAgICAgICAgXSksXG4gICAgICAgICAgb25TZXRWYWx1ZTogaW5wdXQgPT4ge1xuICAgICAgICAgICAgaWYgKEludmFsaWRhdGluZy5pc0ludmFsaWQoaW5wdXQpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJ1biA9IEludmFsaWRhdGluZy5ydW4oaW5wdXQpO1xuICAgICAgICAgICAgICBydW4uZ2V0KG5vb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNvbXBzID0gW1xuICAgICAgICAgIHBMYWJlbCxcbiAgICAgICAgICBwRmllbGRcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgY29uY2F0cyA9IG5hbWUgIT09ICdoZXgnID8gW0Zvcm1GaWVsZC5wYXJ0c1snYXJpYS1kZXNjcmlwdG9yJ10oeyB0ZXh0OiBoZWxwdGV4dCB9KV0gOiBbXTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGNvbXBzLmNvbmNhdChjb25jYXRzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IHJvbGU6ICdwcmVzZW50YXRpb24nIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbXBvbmVudHNcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjb3B5UmdiVG9IZXggPSAoZm9ybSwgcmdiYSkgPT4ge1xuICAgICAgICBjb25zdCBoZXggPSBmcm9tUmdiYShyZ2JhKTtcbiAgICAgICAgRm9ybS5nZXRGaWVsZChmb3JtLCAnaGV4JykuZWFjaChoZXhGaWVsZCA9PiB7XG4gICAgICAgICAgaWYgKCFGb2N1c2luZy5pc0ZvY3VzZWQoaGV4RmllbGQpKSB7XG4gICAgICAgICAgICBSZXByZXNlbnRpbmcuc2V0VmFsdWUoZm9ybSwgeyBoZXg6IGhleC52YWx1ZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaGV4O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvcHlSZ2JUb0Zvcm0gPSAoZm9ybSwgcmdiKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlZCA9IHJnYi5yZWQ7XG4gICAgICAgIGNvbnN0IGdyZWVuID0gcmdiLmdyZWVuO1xuICAgICAgICBjb25zdCBibHVlID0gcmdiLmJsdWU7XG4gICAgICAgIFJlcHJlc2VudGluZy5zZXRWYWx1ZShmb3JtLCB7XG4gICAgICAgICAgcmVkLFxuICAgICAgICAgIGdyZWVuLFxuICAgICAgICAgIGJsdWVcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgbWVtUHJldmlldyA9IHJlY29yZCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogW2dldENsYXNzKCdyZ2JhLXByZXZpZXcnKV0sXG4gICAgICAgICAgc3R5bGVzOiB7ICdiYWNrZ3JvdW5kLWNvbG9yJzogJ3doaXRlJyB9LFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3ByZXNlbnRhdGlvbicgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHVwZGF0ZVByZXZpZXcgPSAoYW55SW5TeXN0ZW0sIGhleCkgPT4ge1xuICAgICAgICBtZW1QcmV2aWV3LmdldE9wdChhbnlJblN5c3RlbSkuZWFjaChwcmV2aWV3ID0+IHtcbiAgICAgICAgICBzZXQkOChwcmV2aWV3LmVsZW1lbnQsICdiYWNrZ3JvdW5kLWNvbG9yJywgJyMnICsgaGV4LnZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZmFjdG9yeSA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICAgICAgcmVkOiBDZWxsKE9wdGlvbmFsLnNvbWUoMjU1KSksXG4gICAgICAgICAgZ3JlZW46IENlbGwoT3B0aW9uYWwuc29tZSgyNTUpKSxcbiAgICAgICAgICBibHVlOiBDZWxsKE9wdGlvbmFsLnNvbWUoMjU1KSksXG4gICAgICAgICAgaGV4OiBDZWxsKE9wdGlvbmFsLnNvbWUoJ2ZmZmZmZicpKVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjb3B5SGV4VG9SZ2IgPSAoZm9ybSwgaGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmdiID0gZnJvbUhleChoZXgpO1xuICAgICAgICAgIGNvcHlSZ2JUb0Zvcm0oZm9ybSwgcmdiKTtcbiAgICAgICAgICBzZXRWYWx1ZVJnYihyZ2IpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBnZXQgPSBwcm9wID0+IHN0YXRlW3Byb3BdLmdldCgpO1xuICAgICAgICBjb25zdCBzZXQgPSAocHJvcCwgdmFsdWUpID0+IHtcbiAgICAgICAgICBzdGF0ZVtwcm9wXS5zZXQodmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBnZXRWYWx1ZVJnYiA9ICgpID0+IGdldCgncmVkJykuYmluZChyZWQgPT4gZ2V0KCdncmVlbicpLmJpbmQoZ3JlZW4gPT4gZ2V0KCdibHVlJykubWFwKGJsdWUgPT4gcmdiYUNvbG91cihyZWQsIGdyZWVuLCBibHVlLCAxKSkpKTtcbiAgICAgICAgY29uc3Qgc2V0VmFsdWVSZ2IgPSByZ2IgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZCA9IHJnYi5yZWQ7XG4gICAgICAgICAgY29uc3QgZ3JlZW4gPSByZ2IuZ3JlZW47XG4gICAgICAgICAgY29uc3QgYmx1ZSA9IHJnYi5ibHVlO1xuICAgICAgICAgIHNldCgncmVkJywgT3B0aW9uYWwuc29tZShyZWQpKTtcbiAgICAgICAgICBzZXQoJ2dyZWVuJywgT3B0aW9uYWwuc29tZShncmVlbikpO1xuICAgICAgICAgIHNldCgnYmx1ZScsIE9wdGlvbmFsLnNvbWUoYmx1ZSkpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBvbkludmFsaWRJbnB1dCA9IChmb3JtLCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBzaW11bGF0ZWRFdmVudC5ldmVudDtcbiAgICAgICAgICBpZiAoZGF0YS50eXBlICE9PSAnaGV4Jykge1xuICAgICAgICAgICAgc2V0KGRhdGEudHlwZSwgT3B0aW9uYWwubm9uZSgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb25JbnZhbGlkSGV4eChmb3JtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG9uVmFsaWRIZXggPSAoZm9ybSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBvblZhbGlkSGV4eChmb3JtKTtcbiAgICAgICAgICBjb25zdCBoZXggPSBoZXhDb2xvdXIodmFsdWUpO1xuICAgICAgICAgIHNldCgnaGV4JywgT3B0aW9uYWwuc29tZShoZXgudmFsdWUpKTtcbiAgICAgICAgICBjb25zdCByZ2IgPSBmcm9tSGV4KGhleCk7XG4gICAgICAgICAgY29weVJnYlRvRm9ybShmb3JtLCByZ2IpO1xuICAgICAgICAgIHNldFZhbHVlUmdiKHJnYik7XG4gICAgICAgICAgZW1pdFdpdGgoZm9ybSwgZmllbGRzVXBkYXRlLCB7IGhleCB9KTtcbiAgICAgICAgICB1cGRhdGVQcmV2aWV3KGZvcm0sIGhleCk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG9uVmFsaWRSZ2IgPSAoZm9ybSwgcHJvcCwgdmFsdWUpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWwgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgICAgICAgIHNldChwcm9wLCBPcHRpb25hbC5zb21lKHZhbCkpO1xuICAgICAgICAgIGdldFZhbHVlUmdiKCkuZWFjaChyZ2IgPT4ge1xuICAgICAgICAgICAgY29uc3QgaGV4ID0gY29weVJnYlRvSGV4KGZvcm0sIHJnYik7XG4gICAgICAgICAgICBlbWl0V2l0aChmb3JtLCBmaWVsZHNVcGRhdGUsIHsgaGV4IH0pO1xuICAgICAgICAgICAgdXBkYXRlUHJldmlldyhmb3JtLCBoZXgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpc0hleElucHV0RXZlbnQgPSBkYXRhID0+IGRhdGEudHlwZSA9PT0gJ2hleCc7XG4gICAgICAgIGNvbnN0IG9uVmFsaWRJbnB1dCA9IChmb3JtLCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBzaW11bGF0ZWRFdmVudC5ldmVudDtcbiAgICAgICAgICBpZiAoaXNIZXhJbnB1dEV2ZW50KGRhdGEpKSB7XG4gICAgICAgICAgICBvblZhbGlkSGV4KGZvcm0sIGRhdGEudmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvblZhbGlkUmdiKGZvcm0sIGRhdGEudHlwZSwgZGF0YS52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBmb3JtUGFydFN0cmluZ3MgPSBrZXkgPT4gKHtcbiAgICAgICAgICBsYWJlbDogdHJhbnNsYXRlKHRyYW5zbGF0ZVByZWZpeCArIGtleSArICcubGFiZWwnKSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogdHJhbnNsYXRlKHRyYW5zbGF0ZVByZWZpeCArIGtleSArICcuZGVzY3JpcHRpb24nKVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVkU3RyaW5ncyA9IGZvcm1QYXJ0U3RyaW5ncygncmVkJyk7XG4gICAgICAgIGNvbnN0IGdyZWVuU3RyaW5ncyA9IGZvcm1QYXJ0U3RyaW5ncygnZ3JlZW4nKTtcbiAgICAgICAgY29uc3QgYmx1ZVN0cmluZ3MgPSBmb3JtUGFydFN0cmluZ3MoJ2JsdWUnKTtcbiAgICAgICAgY29uc3QgaGV4U3RyaW5ncyA9IGZvcm1QYXJ0U3RyaW5ncygnaGV4Jyk7XG4gICAgICAgIHJldHVybiBkZWVwTWVyZ2UoRm9ybS5za2V0Y2gocGFydHMgPT4gKHtcbiAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgIHRhZzogJ2Zvcm0nLFxuICAgICAgICAgICAgY2xhc3NlczogW2dldENsYXNzKCdyZ2ItZm9ybScpXSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgJ2FyaWEtbGFiZWwnOiB0cmFuc2xhdGUoJ2FyaWEuY29sb3IucGlja2VyJykgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgICAgcGFydHMuZmllbGQoJ3JlZCcsIEZvcm1GaWVsZC5za2V0Y2gocmVuZGVyVGV4dEZpZWxkKGlzUmdiYUNvbXBvbmVudCwgJ3JlZCcsIHJlZFN0cmluZ3MubGFiZWwsIHJlZFN0cmluZ3MuZGVzY3JpcHRpb24sIDI1NSkpKSxcbiAgICAgICAgICAgIHBhcnRzLmZpZWxkKCdncmVlbicsIEZvcm1GaWVsZC5za2V0Y2gocmVuZGVyVGV4dEZpZWxkKGlzUmdiYUNvbXBvbmVudCwgJ2dyZWVuJywgZ3JlZW5TdHJpbmdzLmxhYmVsLCBncmVlblN0cmluZ3MuZGVzY3JpcHRpb24sIDI1NSkpKSxcbiAgICAgICAgICAgIHBhcnRzLmZpZWxkKCdibHVlJywgRm9ybUZpZWxkLnNrZXRjaChyZW5kZXJUZXh0RmllbGQoaXNSZ2JhQ29tcG9uZW50LCAnYmx1ZScsIGJsdWVTdHJpbmdzLmxhYmVsLCBibHVlU3RyaW5ncy5kZXNjcmlwdGlvbiwgMjU1KSkpLFxuICAgICAgICAgICAgcGFydHMuZmllbGQoJ2hleCcsIEZvcm1GaWVsZC5za2V0Y2gocmVuZGVyVGV4dEZpZWxkKGlzSGV4U3RyaW5nLCAnaGV4JywgaGV4U3RyaW5ncy5sYWJlbCwgaGV4U3RyaW5ncy5kZXNjcmlwdGlvbiwgJ2ZmZmZmZicpKSksXG4gICAgICAgICAgICBtZW1QcmV2aWV3LmFzU3BlYygpXG4gICAgICAgICAgXSxcbiAgICAgICAgICBmb3JtQmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgICAgSW52YWxpZGF0aW5nLmNvbmZpZyh7IGludmFsaWRDbGFzczogZ2V0Q2xhc3MoJ2Zvcm0taW52YWxpZCcpIH0pLFxuICAgICAgICAgICAgY29uZmlnKCdyZ2ItZm9ybS1ldmVudHMnLCBbXG4gICAgICAgICAgICAgIHJ1biQxKHZhbGlkSW5wdXQsIG9uVmFsaWRJbnB1dCksXG4gICAgICAgICAgICAgIHJ1biQxKGludmFsaWRJbnB1dCwgb25JbnZhbGlkSW5wdXQpLFxuICAgICAgICAgICAgICBydW4kMSh2YWxpZGF0aW5nSW5wdXQsIG9uSW52YWxpZElucHV0KVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICBdKVxuICAgICAgICB9KSksIHtcbiAgICAgICAgICBhcGlzOiB7XG4gICAgICAgICAgICB1cGRhdGVIZXg6IChmb3JtLCBoZXgpID0+IHtcbiAgICAgICAgICAgICAgUmVwcmVzZW50aW5nLnNldFZhbHVlKGZvcm0sIHsgaGV4OiBoZXgudmFsdWUgfSk7XG4gICAgICAgICAgICAgIGNvcHlIZXhUb1JnYihmb3JtLCBoZXgpO1xuICAgICAgICAgICAgICB1cGRhdGVQcmV2aWV3KGZvcm0sIGhleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZ2JGb3JtU2tldGNoZXIgPSBzaW5nbGUoe1xuICAgICAgICBmYWN0b3J5LFxuICAgICAgICBuYW1lOiAnUmdiRm9ybScsXG4gICAgICAgIGNvbmZpZ0ZpZWxkczogW10sXG4gICAgICAgIGFwaXM6IHtcbiAgICAgICAgICB1cGRhdGVIZXg6IChhcGlzLCBmb3JtLCBoZXgpID0+IHtcbiAgICAgICAgICAgIGFwaXMudXBkYXRlSGV4KGZvcm0sIGhleCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBleHRyYUFwaXM6IHt9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZ2JGb3JtU2tldGNoZXI7XG4gICAgfTtcblxuICAgIGNvbnN0IHBhbGV0dGVGYWN0b3J5ID0gKF90cmFuc2xhdGUsIGdldENsYXNzKSA9PiB7XG4gICAgICBjb25zdCBzcGVjdHJ1bVBhcnQgPSBTbGlkZXIucGFydHMuc3BlY3RydW0oe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdjYW52YXMnLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3ByZXNlbnRhdGlvbicgfSxcbiAgICAgICAgICBjbGFzc2VzOiBbZ2V0Q2xhc3MoJ3N2LXBhbGV0dGUtc3BlY3RydW0nKV1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCB0aHVtYlBhcnQgPSBTbGlkZXIucGFydHMudGh1bWIoe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3ByZXNlbnRhdGlvbicgfSxcbiAgICAgICAgICBjbGFzc2VzOiBbZ2V0Q2xhc3MoJ3N2LXBhbGV0dGUtdGh1bWInKV0sXG4gICAgICAgICAgaW5uZXJIdG1sOiBgPGRpdiBjbGFzcz0keyBnZXRDbGFzcygnc3YtcGFsZXR0ZS1pbm5lci10aHVtYicpIH0gcm9sZT1cInByZXNlbnRhdGlvblwiPjwvZGl2PmBcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzZXRDb2xvdXIgPSAoY2FudmFzLCByZ2JhKSA9PiB7XG4gICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGNhbnZhcztcbiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIGlmIChjdHggPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHJnYmE7XG4gICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY29uc3QgZ3JkV2hpdGUgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQoMCwgMCwgd2lkdGgsIDApO1xuICAgICAgICBncmRXaGl0ZS5hZGRDb2xvclN0b3AoMCwgJ3JnYmEoMjU1LDI1NSwyNTUsMSknKTtcbiAgICAgICAgZ3JkV2hpdGUuYWRkQ29sb3JTdG9wKDEsICdyZ2JhKDI1NSwyNTUsMjU1LDApJyk7XG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBncmRXaGl0ZTtcbiAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICBjb25zdCBncmRCbGFjayA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCgwLCAwLCAwLCBoZWlnaHQpO1xuICAgICAgICBncmRCbGFjay5hZGRDb2xvclN0b3AoMCwgJ3JnYmEoMCwwLDAsMCknKTtcbiAgICAgICAgZ3JkQmxhY2suYWRkQ29sb3JTdG9wKDEsICdyZ2JhKDAsMCwwLDEpJyk7XG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBncmRCbGFjaztcbiAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldFBhbGV0dGVIdWUgPSAoc2xpZGVyLCBodWUpID0+IHtcbiAgICAgICAgY29uc3QgY2FudmFzID0gc2xpZGVyLmNvbXBvbmVudHMoKVswXS5lbGVtZW50LmRvbTtcbiAgICAgICAgY29uc3QgaHN2ID0gaHN2Q29sb3VyKGh1ZSwgMTAwLCAxMDApO1xuICAgICAgICBjb25zdCByZ2JhID0gZnJvbUhzdihoc3YpO1xuICAgICAgICBzZXRDb2xvdXIoY2FudmFzLCB0b1N0cmluZyhyZ2JhKSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0UGFsZXR0ZVRodW1iID0gKHNsaWRlciwgaGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGhzdiA9IGZyb21SZ2IoZnJvbUhleChoZXgpKTtcbiAgICAgICAgU2xpZGVyLnNldFZhbHVlKHNsaWRlciwge1xuICAgICAgICAgIHg6IGhzdi5zYXR1cmF0aW9uLFxuICAgICAgICAgIHk6IDEwMCAtIGhzdi52YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBmYWN0b3J5ID0gX2RldGFpbCA9PiB7XG4gICAgICAgIGNvbnN0IGdldEluaXRpYWxWYWx1ZSA9IGNvbnN0YW50JDEoe1xuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgb25DaGFuZ2UgPSAoc2xpZGVyLCBfdGh1bWIsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgZW1pdFdpdGgoc2xpZGVyLCBwYWxldHRlVXBkYXRlLCB7IHZhbHVlIH0pO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBvbkluaXQgPSAoX3NsaWRlciwgX3RodW1iLCBzcGVjdHJ1bSwgX3ZhbHVlKSA9PiB7XG4gICAgICAgICAgc2V0Q29sb3VyKHNwZWN0cnVtLmVsZW1lbnQuZG9tLCB0b1N0cmluZyhyZWQpKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2xpZGVyQmVoYXZpb3VycyA9IGRlcml2ZSQxKFtcbiAgICAgICAgICBDb21wb3NpbmcuY29uZmlnKHsgZmluZDogT3B0aW9uYWwuc29tZSB9KSxcbiAgICAgICAgICBGb2N1c2luZy5jb25maWcoe30pXG4gICAgICAgIF0pO1xuICAgICAgICByZXR1cm4gU2xpZGVyLnNrZXRjaCh7XG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgYXR0cmlidXRlczogeyByb2xlOiAncHJlc2VudGF0aW9uJyB9LFxuICAgICAgICAgICAgY2xhc3NlczogW2dldENsYXNzKCdzdi1wYWxldHRlJyldXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtb2RlbDoge1xuICAgICAgICAgICAgbW9kZTogJ3h5JyxcbiAgICAgICAgICAgIGdldEluaXRpYWxWYWx1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcm91bmRlZDogZmFsc2UsXG4gICAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgICAgc3BlY3RydW1QYXJ0LFxuICAgICAgICAgICAgdGh1bWJQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBvbkNoYW5nZSxcbiAgICAgICAgICBvbkluaXQsXG4gICAgICAgICAgc2xpZGVyQmVoYXZpb3Vyc1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzYXR1cmF0aW9uQnJpZ2h0bmVzc1BhbGV0dGVTa2V0Y2hlciA9IHNpbmdsZSh7XG4gICAgICAgIGZhY3RvcnksXG4gICAgICAgIG5hbWU6ICdTYXR1cmF0aW9uQnJpZ2h0bmVzc1BhbGV0dGUnLFxuICAgICAgICBjb25maWdGaWVsZHM6IFtdLFxuICAgICAgICBhcGlzOiB7XG4gICAgICAgICAgc2V0SHVlOiAoX2FwaXMsIHNsaWRlciwgaHVlKSA9PiB7XG4gICAgICAgICAgICBzZXRQYWxldHRlSHVlKHNsaWRlciwgaHVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldFRodW1iOiAoX2FwaXMsIHNsaWRlciwgaGV4KSA9PiB7XG4gICAgICAgICAgICBzZXRQYWxldHRlVGh1bWIoc2xpZGVyLCBoZXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXh0cmFBcGlzOiB7fVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc2F0dXJhdGlvbkJyaWdodG5lc3NQYWxldHRlU2tldGNoZXI7XG4gICAgfTtcblxuICAgIGNvbnN0IG1ha2VGYWN0b3J5ID0gKHRyYW5zbGF0ZSwgZ2V0Q2xhc3MpID0+IHtcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSBkZXRhaWwgPT4ge1xuICAgICAgICBjb25zdCByZ2JGb3JtID0gcmdiRm9ybUZhY3RvcnkodHJhbnNsYXRlLCBnZXRDbGFzcywgZGV0YWlsLm9uVmFsaWRIZXgsIGRldGFpbC5vbkludmFsaWRIZXgpO1xuICAgICAgICBjb25zdCBzYlBhbGV0dGUgPSBwYWxldHRlRmFjdG9yeSh0cmFuc2xhdGUsIGdldENsYXNzKTtcbiAgICAgICAgY29uc3QgaHVlU2xpZGVyVG9EZWdyZWVzID0gaHVlID0+ICgxMDAgLSBodWUpIC8gMTAwICogMzYwO1xuICAgICAgICBjb25zdCBodWVEZWdyZWVzVG9TbGlkZXIgPSBodWUgPT4gMTAwIC0gaHVlIC8gMzYwICogMTAwO1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgICAgICBwYWxldHRlUmdiYTogQ2VsbChyZWQpLFxuICAgICAgICAgIHBhbGV0dGVIdWU6IENlbGwoMClcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbWVtU2xpZGVyID0gcmVjb3JkKHNsaWRlckZhY3RvcnkodHJhbnNsYXRlLCBnZXRDbGFzcykpO1xuICAgICAgICBjb25zdCBtZW1QYWxldHRlID0gcmVjb3JkKHNiUGFsZXR0ZS5za2V0Y2goe30pKTtcbiAgICAgICAgY29uc3QgbWVtUmdiID0gcmVjb3JkKHJnYkZvcm0uc2tldGNoKHt9KSk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZVBhbGV0dGUgPSAoYW55SW5TeXN0ZW0sIF9oZXgsIGh1ZSkgPT4ge1xuICAgICAgICAgIG1lbVBhbGV0dGUuZ2V0T3B0KGFueUluU3lzdGVtKS5lYWNoKHBhbGV0dGUgPT4ge1xuICAgICAgICAgICAgc2JQYWxldHRlLnNldEh1ZShwYWxldHRlLCBodWUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCB1cGRhdGVGaWVsZHMgPSAoYW55SW5TeXN0ZW0sIGhleCkgPT4ge1xuICAgICAgICAgIG1lbVJnYi5nZXRPcHQoYW55SW5TeXN0ZW0pLmVhY2goZm9ybSA9PiB7XG4gICAgICAgICAgICByZ2JGb3JtLnVwZGF0ZUhleChmb3JtLCBoZXgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCB1cGRhdGVTbGlkZXIgPSAoYW55SW5TeXN0ZW0sIF9oZXgsIGh1ZSkgPT4ge1xuICAgICAgICAgIG1lbVNsaWRlci5nZXRPcHQoYW55SW5TeXN0ZW0pLmVhY2goc2xpZGVyID0+IHtcbiAgICAgICAgICAgIFNsaWRlci5zZXRWYWx1ZShzbGlkZXIsIGh1ZURlZ3JlZXNUb1NsaWRlcihodWUpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdXBkYXRlUGFsZXR0ZVRodW1iID0gKGFueUluU3lzdGVtLCBoZXgpID0+IHtcbiAgICAgICAgICBtZW1QYWxldHRlLmdldE9wdChhbnlJblN5c3RlbSkuZWFjaChwYWxldHRlID0+IHtcbiAgICAgICAgICAgIHNiUGFsZXR0ZS5zZXRUaHVtYihwYWxldHRlLCBoZXgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCB1cGRhdGVTdGF0ZSA9IChoZXgsIGh1ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJnYmEgPSBmcm9tSGV4KGhleCk7XG4gICAgICAgICAgc3RhdGUucGFsZXR0ZVJnYmEuc2V0KHJnYmEpO1xuICAgICAgICAgIHN0YXRlLnBhbGV0dGVIdWUuc2V0KGh1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJ1blVwZGF0ZXMgPSAoYW55SW5TeXN0ZW0sIGhleCwgaHVlLCB1cGRhdGVzKSA9PiB7XG4gICAgICAgICAgdXBkYXRlU3RhdGUoaGV4LCBodWUpO1xuICAgICAgICAgIGVhY2gkMSh1cGRhdGVzLCB1cGRhdGUgPT4ge1xuICAgICAgICAgICAgdXBkYXRlKGFueUluU3lzdGVtLCBoZXgsIGh1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG9uUGFsZXR0ZVVwZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCB1cGRhdGVzID0gW3VwZGF0ZUZpZWxkc107XG4gICAgICAgICAgcmV0dXJuIChmb3JtLCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBzaW11bGF0ZWRFdmVudC5ldmVudC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IG9sZEh1ZSA9IHN0YXRlLnBhbGV0dGVIdWUuZ2V0KCk7XG4gICAgICAgICAgICBjb25zdCBuZXdIc3YgPSBoc3ZDb2xvdXIob2xkSHVlLCB2YWx1ZS54LCAxMDAgLSB2YWx1ZS55KTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0hleCA9IGhzdlRvSGV4KG5ld0hzdik7XG4gICAgICAgICAgICBydW5VcGRhdGVzKGZvcm0sIG5ld0hleCwgb2xkSHVlLCB1cGRhdGVzKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBvblNsaWRlclVwZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCB1cGRhdGVzID0gW1xuICAgICAgICAgICAgdXBkYXRlUGFsZXR0ZSxcbiAgICAgICAgICAgIHVwZGF0ZUZpZWxkc1xuICAgICAgICAgIF07XG4gICAgICAgICAgcmV0dXJuIChmb3JtLCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaHVlID0gaHVlU2xpZGVyVG9EZWdyZWVzKHNpbXVsYXRlZEV2ZW50LmV2ZW50LnZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IG9sZFJnYiA9IHN0YXRlLnBhbGV0dGVSZ2JhLmdldCgpO1xuICAgICAgICAgICAgY29uc3Qgb2xkSHN2ID0gZnJvbVJnYihvbGRSZ2IpO1xuICAgICAgICAgICAgY29uc3QgbmV3SHN2ID0gaHN2Q29sb3VyKGh1ZSwgb2xkSHN2LnNhdHVyYXRpb24sIG9sZEhzdi52YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBuZXdIZXggPSBoc3ZUb0hleChuZXdIc3YpO1xuICAgICAgICAgICAgcnVuVXBkYXRlcyhmb3JtLCBuZXdIZXgsIGh1ZSwgdXBkYXRlcyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb25GaWVsZHNVcGRhdGUgPSAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlcyA9IFtcbiAgICAgICAgICAgIHVwZGF0ZVBhbGV0dGUsXG4gICAgICAgICAgICB1cGRhdGVTbGlkZXIsXG4gICAgICAgICAgICB1cGRhdGVQYWxldHRlVGh1bWJcbiAgICAgICAgICBdO1xuICAgICAgICAgIHJldHVybiAoZm9ybSwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhleCA9IHNpbXVsYXRlZEV2ZW50LmV2ZW50LmhleDtcbiAgICAgICAgICAgIGNvbnN0IGhzdiA9IGhleFRvSHN2KGhleCk7XG4gICAgICAgICAgICBydW5VcGRhdGVzKGZvcm0sIGhleCwgaHN2Lmh1ZSwgdXBkYXRlcyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB1aWQ6IGRldGFpbC51aWQsXG4gICAgICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICAgIG1lbVBhbGV0dGUuYXNTcGVjKCksXG4gICAgICAgICAgICBtZW1TbGlkZXIuYXNTcGVjKCksXG4gICAgICAgICAgICBtZW1SZ2IuYXNTcGVjKClcbiAgICAgICAgICBdLFxuICAgICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICAgIGNvbmZpZygnY29sb3VyLXBpY2tlci1ldmVudHMnLCBbXG4gICAgICAgICAgICAgIHJ1biQxKGZpZWxkc1VwZGF0ZSwgb25GaWVsZHNVcGRhdGUoKSksXG4gICAgICAgICAgICAgIHJ1biQxKHBhbGV0dGVVcGRhdGUsIG9uUGFsZXR0ZVVwZGF0ZSgpKSxcbiAgICAgICAgICAgICAgcnVuJDEoc2xpZGVyVXBkYXRlLCBvblNsaWRlclVwZGF0ZSgpKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBDb21wb3NpbmcuY29uZmlnKHsgZmluZDogY29tcCA9PiBtZW1SZ2IuZ2V0T3B0KGNvbXApIH0pLFxuICAgICAgICAgICAgS2V5aW5nLmNvbmZpZyh7IG1vZGU6ICdhY3ljbGljJyB9KVxuICAgICAgICAgIF0pXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uc3QgY29sb3VyUGlja2VyU2tldGNoZXIgPSBzaW5nbGUoe1xuICAgICAgICBuYW1lOiAnQ29sb3VyUGlja2VyJyxcbiAgICAgICAgY29uZmlnRmllbGRzOiBbXG4gICAgICAgICAgcmVxdWlyZWQkMSgnZG9tJyksXG4gICAgICAgICAgZGVmYXVsdGVkKCdvblZhbGlkSGV4Jywgbm9vcCksXG4gICAgICAgICAgZGVmYXVsdGVkKCdvbkludmFsaWRIZXgnLCBub29wKVxuICAgICAgICBdLFxuICAgICAgICBmYWN0b3J5XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb2xvdXJQaWNrZXJTa2V0Y2hlcjtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2VsZiA9ICgpID0+IENvbXBvc2luZy5jb25maWcoeyBmaW5kOiBPcHRpb25hbC5zb21lIH0pO1xuICAgIGNvbnN0IG1lbWVudG8kMSA9IG1lbSA9PiBDb21wb3NpbmcuY29uZmlnKHsgZmluZDogbWVtLmdldE9wdCB9KTtcbiAgICBjb25zdCBjaGlsZEF0ID0gaW5kZXggPT4gQ29tcG9zaW5nLmNvbmZpZyh7IGZpbmQ6IGNvbXAgPT4gY2hpbGQkMihjb21wLmVsZW1lbnQsIGluZGV4KS5iaW5kKGVsZW1lbnQgPT4gY29tcC5nZXRTeXN0ZW0oKS5nZXRCeURvbShlbGVtZW50KS50b09wdGlvbmFsKCkpIH0pO1xuICAgIGNvbnN0IENvbXBvc2luZ0NvbmZpZ3MgPSB7XG4gICAgICBzZWxmLFxuICAgICAgbWVtZW50bzogbWVtZW50byQxLFxuICAgICAgY2hpbGRBdFxuICAgIH07XG5cbiAgICBjb25zdCBwcm9jZXNzb3JzID0gb2JqT2YoW1xuICAgICAgZGVmYXVsdGVkKCdwcmVwcm9jZXNzJywgaWRlbnRpdHkpLFxuICAgICAgZGVmYXVsdGVkKCdwb3N0cHJvY2VzcycsIGlkZW50aXR5KVxuICAgIF0pO1xuICAgIGNvbnN0IG1lbWVudG8gPSAobWVtLCByYXdQcm9jZXNzb3JzKSA9PiB7XG4gICAgICBjb25zdCBwcyA9IGFzUmF3T3JEaWUkMSgnUmVwcmVzZW50aW5nQ29uZmlncy5tZW1lbnRvIHByb2Nlc3NvcnMnLCBwcm9jZXNzb3JzLCByYXdQcm9jZXNzb3JzKTtcbiAgICAgIHJldHVybiBSZXByZXNlbnRpbmcuY29uZmlnKHtcbiAgICAgICAgc3RvcmU6IHtcbiAgICAgICAgICBtb2RlOiAnbWFudWFsJyxcbiAgICAgICAgICBnZXRWYWx1ZTogY29tcCA9PiB7XG4gICAgICAgICAgICBjb25zdCBvdGhlciA9IG1lbS5nZXQoY29tcCk7XG4gICAgICAgICAgICBjb25zdCByYXdWYWx1ZSA9IFJlcHJlc2VudGluZy5nZXRWYWx1ZShvdGhlcik7XG4gICAgICAgICAgICByZXR1cm4gcHMucG9zdHByb2Nlc3MocmF3VmFsdWUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0VmFsdWU6IChjb21wLCByYXdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBwcy5wcmVwcm9jZXNzKHJhd1ZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IG90aGVyID0gbWVtLmdldChjb21wKTtcbiAgICAgICAgICAgIFJlcHJlc2VudGluZy5zZXRWYWx1ZShvdGhlciwgbmV3VmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCB3aXRoQ29tcCA9IChvcHRJbml0aWFsVmFsdWUsIGdldHRlciwgc2V0dGVyKSA9PiBSZXByZXNlbnRpbmcuY29uZmlnKHtcbiAgICAgIHN0b3JlOiB7XG4gICAgICAgIG1vZGU6ICdtYW51YWwnLFxuICAgICAgICAuLi5vcHRJbml0aWFsVmFsdWUubWFwKGluaXRpYWxWYWx1ZSA9PiAoeyBpbml0aWFsVmFsdWUgfSkpLmdldE9yKHt9KSxcbiAgICAgICAgZ2V0VmFsdWU6IGdldHRlcixcbiAgICAgICAgc2V0VmFsdWU6IHNldHRlclxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHdpdGhFbGVtZW50ID0gKGluaXRpYWxWYWx1ZSwgZ2V0dGVyLCBzZXR0ZXIpID0+IHdpdGhDb21wKGluaXRpYWxWYWx1ZSwgYyA9PiBnZXR0ZXIoYy5lbGVtZW50KSwgKGMsIHYpID0+IHNldHRlcihjLmVsZW1lbnQsIHYpKTtcbiAgICBjb25zdCBkb21IdG1sID0gb3B0SW5pdGlhbFZhbHVlID0+IHdpdGhFbGVtZW50KG9wdEluaXRpYWxWYWx1ZSwgZ2V0JDksIHNldCQ2KTtcbiAgICBjb25zdCBtZW1vcnkgPSBpbml0aWFsVmFsdWUgPT4gUmVwcmVzZW50aW5nLmNvbmZpZyh7XG4gICAgICBzdG9yZToge1xuICAgICAgICBtb2RlOiAnbWVtb3J5JyxcbiAgICAgICAgaW5pdGlhbFZhbHVlXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBlbmdsaXNoID0ge1xuICAgICAgJ2NvbG9yY3VzdG9tLnJnYi5yZWQubGFiZWwnOiAnUicsXG4gICAgICAnY29sb3JjdXN0b20ucmdiLnJlZC5kZXNjcmlwdGlvbic6ICdSZWQgY29tcG9uZW50JyxcbiAgICAgICdjb2xvcmN1c3RvbS5yZ2IuZ3JlZW4ubGFiZWwnOiAnRycsXG4gICAgICAnY29sb3JjdXN0b20ucmdiLmdyZWVuLmRlc2NyaXB0aW9uJzogJ0dyZWVuIGNvbXBvbmVudCcsXG4gICAgICAnY29sb3JjdXN0b20ucmdiLmJsdWUubGFiZWwnOiAnQicsXG4gICAgICAnY29sb3JjdXN0b20ucmdiLmJsdWUuZGVzY3JpcHRpb24nOiAnQmx1ZSBjb21wb25lbnQnLFxuICAgICAgJ2NvbG9yY3VzdG9tLnJnYi5oZXgubGFiZWwnOiAnIycsXG4gICAgICAnY29sb3JjdXN0b20ucmdiLmhleC5kZXNjcmlwdGlvbic6ICdIZXggY29sb3IgY29kZScsXG4gICAgICAnY29sb3JjdXN0b20ucmdiLnJhbmdlJzogJ1JhbmdlIDAgdG8gMjU1JyxcbiAgICAgICdhcmlhLmNvbG9yLnBpY2tlcic6ICdDb2xvciBQaWNrZXInLFxuICAgICAgJ2FyaWEuaW5wdXQuaW52YWxpZCc6ICdJbnZhbGlkIGlucHV0J1xuICAgIH07XG4gICAgY29uc3QgdHJhbnNsYXRlJDEgPSBwcm92aWRlckJhY2tzdGFnZSA9PiBrZXkgPT4ge1xuICAgICAgcmV0dXJuIHByb3ZpZGVyQmFja3N0YWdlLnRyYW5zbGF0ZShlbmdsaXNoW2tleV0pO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyQ29sb3JQaWNrZXIgPSAoX3NwZWMsIHByb3ZpZGVyQmFja3N0YWdlLCBpbml0aWFsRGF0YSkgPT4ge1xuICAgICAgY29uc3QgZ2V0Q2xhc3MgPSBrZXkgPT4gJ3RveC0nICsga2V5O1xuICAgICAgY29uc3QgY29sb3VyUGlja2VyRmFjdG9yeSA9IG1ha2VGYWN0b3J5KHRyYW5zbGF0ZSQxKHByb3ZpZGVyQmFja3N0YWdlKSwgZ2V0Q2xhc3MpO1xuICAgICAgY29uc3Qgb25WYWxpZEhleCA9IGZvcm0gPT4ge1xuICAgICAgICBlbWl0V2l0aChmb3JtLCBmb3JtQWN0aW9uRXZlbnQsIHtcbiAgICAgICAgICBuYW1lOiAnaGV4LXZhbGlkJyxcbiAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBvbkludmFsaWRIZXggPSBmb3JtID0+IHtcbiAgICAgICAgZW1pdFdpdGgoZm9ybSwgZm9ybUFjdGlvbkV2ZW50LCB7XG4gICAgICAgICAgbmFtZTogJ2hleC12YWxpZCcsXG4gICAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG1lbVBpY2tlciA9IHJlY29yZChjb2xvdXJQaWNrZXJGYWN0b3J5LnNrZXRjaCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogW2dldENsYXNzKCdjb2xvci1waWNrZXItY29udGFpbmVyJyldLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3ByZXNlbnRhdGlvbicgfVxuICAgICAgICB9LFxuICAgICAgICBvblZhbGlkSGV4LFxuICAgICAgICBvbkludmFsaWRIZXhcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRvbTogeyB0YWc6ICdkaXYnIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFttZW1QaWNrZXIuYXNTcGVjKCldLFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgd2l0aENvbXAoaW5pdGlhbERhdGEsIGNvbXAgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGlja2VyID0gbWVtUGlja2VyLmdldChjb21wKTtcbiAgICAgICAgICAgIGNvbnN0IG9wdFJnYkZvcm0gPSBDb21wb3NpbmcuZ2V0Q3VycmVudChwaWNrZXIpO1xuICAgICAgICAgICAgY29uc3Qgb3B0SGV4ID0gb3B0UmdiRm9ybS5iaW5kKHJnYkZvcm0gPT4ge1xuICAgICAgICAgICAgICBjb25zdCBmb3JtVmFsdWVzID0gUmVwcmVzZW50aW5nLmdldFZhbHVlKHJnYkZvcm0pO1xuICAgICAgICAgICAgICByZXR1cm4gZm9ybVZhbHVlcy5oZXg7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBvcHRIZXgubWFwKGhleCA9PiAnIycgKyByZW1vdmVMZWFkaW5nKGhleCwgJyMnKSkuZ2V0T3IoJycpO1xuICAgICAgICAgIH0sIChjb21wLCBuZXdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0dGVybiA9IC9eIyhbYS1mQS1GMC05XXszfSg/OlthLWZBLUYwLTldezN9KT8pLztcbiAgICAgICAgICAgIGNvbnN0IHZhbE9wdCA9IE9wdGlvbmFsLmZyb20ocGF0dGVybi5leGVjKG5ld1ZhbHVlKSkuYmluZChtYXRjaGVzID0+IGdldCRoKG1hdGNoZXMsIDEpKTtcbiAgICAgICAgICAgIGNvbnN0IHBpY2tlciA9IG1lbVBpY2tlci5nZXQoY29tcCk7XG4gICAgICAgICAgICBjb25zdCBvcHRSZ2JGb3JtID0gQ29tcG9zaW5nLmdldEN1cnJlbnQocGlja2VyKTtcbiAgICAgICAgICAgIG9wdFJnYkZvcm0uZm9sZCgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDYW4gbm90IGZpbmQgZm9ybScpO1xuICAgICAgICAgICAgfSwgcmdiRm9ybSA9PiB7XG4gICAgICAgICAgICAgIFJlcHJlc2VudGluZy5zZXRWYWx1ZShyZ2JGb3JtLCB7IGhleDogdmFsT3B0LmdldE9yKCcnKSB9KTtcbiAgICAgICAgICAgICAgRm9ybS5nZXRGaWVsZChyZ2JGb3JtLCAnaGV4JykuZWFjaChoZXhGaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgZW1pdChoZXhGaWVsZCwgaW5wdXQoKSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgQ29tcG9zaW5nQ29uZmlncy5zZWxmKClcbiAgICAgICAgXSlcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBnbG9iYWwkMiA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLlJlc291cmNlJyk7XG5cbiAgICBjb25zdCBpc09sZEN1c3RvbUVkaXRvciA9IHNwZWMgPT4gaGFzJDIoc3BlYywgJ2luaXQnKTtcbiAgICBjb25zdCByZW5kZXJDdXN0b21FZGl0b3IgPSBzcGVjID0+IHtcbiAgICAgIGNvbnN0IGVkaXRvckFwaSA9IHZhbHVlJDIoKTtcbiAgICAgIGNvbnN0IG1lbVJlcGxhY2VkID0gcmVjb3JkKHsgZG9tOiB7IHRhZzogc3BlYy50YWcgfSB9KTtcbiAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IHZhbHVlJDIoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtY3VzdG9tLWVkaXRvciddXG4gICAgICAgIH0sXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBjb25maWcoJ2N1c3RvbS1lZGl0b3ItZXZlbnRzJywgW3J1bk9uQXR0YWNoZWQoY29tcG9uZW50ID0+IHtcbiAgICAgICAgICAgICAgbWVtUmVwbGFjZWQuZ2V0T3B0KGNvbXBvbmVudCkuZWFjaCh0YSA9PiB7XG4gICAgICAgICAgICAgICAgKGlzT2xkQ3VzdG9tRWRpdG9yKHNwZWMpID8gc3BlYy5pbml0KHRhLmVsZW1lbnQuZG9tKSA6IGdsb2JhbCQyLmxvYWQoc3BlYy5zY3JpcHRJZCwgc3BlYy5zY3JpcHRVcmwpLnRoZW4oaW5pdCA9PiBpbml0KHRhLmVsZW1lbnQuZG9tLCBzcGVjLnNldHRpbmdzKSkpLnRoZW4oZWEgPT4ge1xuICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlLm9uKGN2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVhLnNldFZhbHVlKGN2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZS5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgZWRpdG9yQXBpLnNldChlYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSldKSxcbiAgICAgICAgICB3aXRoQ29tcChPcHRpb25hbC5ub25lKCksICgpID0+IGVkaXRvckFwaS5nZXQoKS5mb2xkKCgpID0+IGluaXRpYWxWYWx1ZS5nZXQoKS5nZXRPcignJyksIGVkID0+IGVkLmdldFZhbHVlKCkpLCAoY29tcG9uZW50LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgZWRpdG9yQXBpLmdldCgpLmZvbGQoKCkgPT4gaW5pdGlhbFZhbHVlLnNldCh2YWx1ZSksIGVkID0+IGVkLnNldFZhbHVlKHZhbHVlKSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgQ29tcG9zaW5nQ29uZmlncy5zZWxmKClcbiAgICAgICAgXSksXG4gICAgICAgIGNvbXBvbmVudHM6IFttZW1SZXBsYWNlZC5hc1NwZWMoKV1cbiAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBnbG9iYWwkMSA9IHRpbnltY2UudXRpbC5Ub29scy5yZXNvbHZlKCd0aW55bWNlLnV0aWwuVG9vbHMnKTtcblxuICAgIGNvbnN0IGZpbHRlckJ5RXh0ZW5zaW9uID0gKGZpbGVzLCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IGFsbG93ZWRJbWFnZUZpbGVUeXBlcyA9IGdsb2JhbCQxLmV4cGxvZGUocHJvdmlkZXJzQmFja3N0YWdlLmdldE9wdGlvbignaW1hZ2VzX2ZpbGVfdHlwZXMnKSk7XG4gICAgICBjb25zdCBpc0ZpbGVJbkFsbG93ZWRUeXBlcyA9IGZpbGUgPT4gZXhpc3RzKGFsbG93ZWRJbWFnZUZpbGVUeXBlcywgdHlwZSA9PiBlbmRzV2l0aChmaWxlLm5hbWUudG9Mb3dlckNhc2UoKSwgYC4keyB0eXBlLnRvTG93ZXJDYXNlKCkgfWApKTtcbiAgICAgIHJldHVybiBmaWx0ZXIkMihmcm9tKGZpbGVzKSwgaXNGaWxlSW5BbGxvd2VkVHlwZXMpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyRHJvcFpvbmUgPSAoc3BlYywgcHJvdmlkZXJzQmFja3N0YWdlLCBpbml0aWFsRGF0YSkgPT4ge1xuICAgICAgY29uc3Qgc3RvcHBlciA9IChfLCBzZSkgPT4ge1xuICAgICAgICBzZS5zdG9wKCk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VxdWVuY2UgPSBhY3Rpb25zID0+IChjb21wLCBzZSkgPT4ge1xuICAgICAgICBlYWNoJDEoYWN0aW9ucywgYSA9PiB7XG4gICAgICAgICAgYShjb21wLCBzZSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG9uRHJvcCA9IChjb21wLCBzZSkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghRGlzYWJsaW5nLmlzRGlzYWJsZWQoY29tcCkpIHtcbiAgICAgICAgICBjb25zdCB0cmFuc2ZlckV2ZW50ID0gc2UuZXZlbnQucmF3O1xuICAgICAgICAgIGhhbmRsZUZpbGVzKGNvbXAsIChfYSA9IHRyYW5zZmVyRXZlbnQuZGF0YVRyYW5zZmVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZmlsZXMpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25TZWxlY3QgPSAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHNpbXVsYXRlZEV2ZW50LmV2ZW50LnJhdy50YXJnZXQ7XG4gICAgICAgIGhhbmRsZUZpbGVzKGNvbXBvbmVudCwgaW5wdXQuZmlsZXMpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGhhbmRsZUZpbGVzID0gKGNvbXBvbmVudCwgZmlsZXMpID0+IHtcbiAgICAgICAgaWYgKGZpbGVzKSB7XG4gICAgICAgICAgUmVwcmVzZW50aW5nLnNldFZhbHVlKGNvbXBvbmVudCwgZmlsdGVyQnlFeHRlbnNpb24oZmlsZXMsIHByb3ZpZGVyc0JhY2tzdGFnZSkpO1xuICAgICAgICAgIGVtaXRXaXRoKGNvbXBvbmVudCwgZm9ybUNoYW5nZUV2ZW50LCB7IG5hbWU6IHNwZWMubmFtZSB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG1lbUlucHV0ID0gcmVjb3JkKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnaW5wdXQnLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdmaWxlJyxcbiAgICAgICAgICAgIGFjY2VwdDogJ2ltYWdlLyonXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdHlsZXM6IHsgZGlzcGxheTogJ25vbmUnIH1cbiAgICAgICAgfSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW2NvbmZpZygnaW5wdXQtZmlsZS1ldmVudHMnLCBbXG4gICAgICAgICAgICBjdXR0ZXIoY2xpY2soKSksXG4gICAgICAgICAgICBjdXR0ZXIodGFwKCkpXG4gICAgICAgICAgXSldKVxuICAgICAgfSk7XG4gICAgICBjb25zdCByZW5kZXJGaWVsZCA9IHMgPT4gKHtcbiAgICAgICAgdWlkOiBzLnVpZCxcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1kcm9wem9uZS1jb250YWluZXInXVxuICAgICAgICB9LFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgbWVtb3J5KGluaXRpYWxEYXRhLmdldE9yKFtdKSksXG4gICAgICAgICAgQ29tcG9zaW5nQ29uZmlncy5zZWxmKCksXG4gICAgICAgICAgRGlzYWJsaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgVG9nZ2xpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzOiAnZHJhZ2VudGVyJyxcbiAgICAgICAgICAgIHRvZ2dsZU9uRXhlY3V0ZTogZmFsc2VcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjb25maWcoJ2Ryb3B6b25lLWV2ZW50cycsIFtcbiAgICAgICAgICAgIHJ1biQxKCdkcmFnZW50ZXInLCBzZXF1ZW5jZShbXG4gICAgICAgICAgICAgIHN0b3BwZXIsXG4gICAgICAgICAgICAgIFRvZ2dsaW5nLnRvZ2dsZVxuICAgICAgICAgICAgXSkpLFxuICAgICAgICAgICAgcnVuJDEoJ2RyYWdsZWF2ZScsIHNlcXVlbmNlKFtcbiAgICAgICAgICAgICAgc3RvcHBlcixcbiAgICAgICAgICAgICAgVG9nZ2xpbmcudG9nZ2xlXG4gICAgICAgICAgICBdKSksXG4gICAgICAgICAgICBydW4kMSgnZHJhZ292ZXInLCBzdG9wcGVyKSxcbiAgICAgICAgICAgIHJ1biQxKCdkcm9wJywgc2VxdWVuY2UoW1xuICAgICAgICAgICAgICBzdG9wcGVyLFxuICAgICAgICAgICAgICBvbkRyb3BcbiAgICAgICAgICAgIF0pKSxcbiAgICAgICAgICAgIHJ1biQxKGNoYW5nZSgpLCBvblNlbGVjdClcbiAgICAgICAgICBdKVxuICAgICAgICBdKSxcbiAgICAgICAgY29tcG9uZW50czogW3tcbiAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1kcm9wem9uZSddLFxuICAgICAgICAgICAgICBzdHlsZXM6IHt9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZG9tOiB7IHRhZzogJ3AnIH0sXG4gICAgICAgICAgICAgICAgY29tcG9uZW50czogW3RleHQkMihwcm92aWRlcnNCYWNrc3RhZ2UudHJhbnNsYXRlKCdEcm9wIGFuIGltYWdlIGhlcmUnKSldXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIEJ1dHRvbi5za2V0Y2goe1xuICAgICAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICAgICAgdGFnOiAnYnV0dG9uJyxcbiAgICAgICAgICAgICAgICAgIHN0eWxlczogeyBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9LFxuICAgICAgICAgICAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICAgICAgICAgICAndG94LWJ1dHRvbicsXG4gICAgICAgICAgICAgICAgICAgICd0b3gtYnV0dG9uLS1zZWNvbmRhcnknXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgICAgICAgICB0ZXh0JDIocHJvdmlkZXJzQmFja3N0YWdlLnRyYW5zbGF0ZSgnQnJvd3NlIGZvciBhbiBpbWFnZScpKSxcbiAgICAgICAgICAgICAgICAgIG1lbUlucHV0LmFzU3BlYygpXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBhY3Rpb246IGNvbXAgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXRDb21wID0gbWVtSW5wdXQuZ2V0KGNvbXApO1xuICAgICAgICAgICAgICAgICAgaW5wdXRDb21wLmVsZW1lbnQuZG9tLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBidXR0b25CZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgICAgICAgICBUYWJzdG9wcGluZy5jb25maWcoe30pLFxuICAgICAgICAgICAgICAgICAgRGlzYWJsaW5nQ29uZmlncy5idXR0b24ocHJvdmlkZXJzQmFja3N0YWdlLmlzRGlzYWJsZWQpLFxuICAgICAgICAgICAgICAgICAgcmVjZWl2aW5nQ29uZmlnKClcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1dXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBMYWJlbCA9IHNwZWMubGFiZWwubWFwKGxhYmVsID0+IHJlbmRlckxhYmVsJDMobGFiZWwsIHByb3ZpZGVyc0JhY2tzdGFnZSkpO1xuICAgICAgY29uc3QgcEZpZWxkID0gRm9ybUZpZWxkLnBhcnRzLmZpZWxkKHsgZmFjdG9yeTogeyBza2V0Y2g6IHJlbmRlckZpZWxkIH0gfSk7XG4gICAgICByZXR1cm4gcmVuZGVyRm9ybUZpZWxkV2l0aChwTGFiZWwsIHBGaWVsZCwgWyd0b3gtZm9ybV9fZ3JvdXAtLXN0cmV0Y2hlZCddLCBbXSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlckdyaWQgPSAoc3BlYywgYmFja3N0YWdlKSA9PiAoe1xuICAgICAgZG9tOiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAndG94LWZvcm1fX2dyaWQnLFxuICAgICAgICAgIGB0b3gtZm9ybV9fZ3JpZC0tJHsgc3BlYy5jb2x1bW5zIH1jb2xgXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBjb21wb25lbnRzOiBtYXAkMihzcGVjLml0ZW1zLCBiYWNrc3RhZ2UuaW50ZXJwcmV0ZXIpXG4gICAgfSk7XG5cbiAgICBjb25zdCBhZGFwdGFibGUgPSAoZm4sIHJhdGUpID0+IHtcbiAgICAgIGxldCB0aW1lciA9IG51bGw7XG4gICAgICBsZXQgYXJncyA9IG51bGw7XG4gICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGlmICghaXNOdWxsKHRpbWVyKSkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICAgIGFyZ3MgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgdGhyb3R0bGUgPSAoLi4ubmV3QXJncykgPT4ge1xuICAgICAgICBhcmdzID0gbmV3QXJncztcbiAgICAgICAgaWYgKGlzTnVsbCh0aW1lcikpIHtcbiAgICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVtcEFyZ3MgPSBhcmdzO1xuICAgICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICAgICAgYXJncyA9IG51bGw7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCB0ZW1wQXJncyk7XG4gICAgICAgICAgfSwgcmF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjYW5jZWwsXG4gICAgICAgIHRocm90dGxlXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZmlyc3QgPSAoZm4sIHJhdGUpID0+IHtcbiAgICAgIGxldCB0aW1lciA9IG51bGw7XG4gICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGlmICghaXNOdWxsKHRpbWVyKSkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgdGhyb3R0bGUgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoaXNOdWxsKHRpbWVyKSkge1xuICAgICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICB9LCByYXRlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNhbmNlbCxcbiAgICAgICAgdGhyb3R0bGVcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBsYXN0ID0gKGZuLCByYXRlKSA9PiB7XG4gICAgICBsZXQgdGltZXIgPSBudWxsO1xuICAgICAgY29uc3QgY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWlzTnVsbCh0aW1lcikpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHRocm90dGxlID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgY2FuY2VsKCk7XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICB9LCByYXRlKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjYW5jZWwsXG4gICAgICAgIHRocm90dGxlXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBiZWZvcmVPYmplY3QgPSBnZW5lcmF0ZSQ2KCdhbGxveS1mYWtlLWJlZm9yZS10YWJzdG9wJyk7XG4gICAgY29uc3QgYWZ0ZXJPYmplY3QgPSBnZW5lcmF0ZSQ2KCdhbGxveS1mYWtlLWFmdGVyLXRhYnN0b3AnKTtcbiAgICBjb25zdCBjcmFmdFdpdGhDbGFzc2VzID0gY2xhc3NlcyA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIHN0eWxlczoge1xuICAgICAgICAgICAgd2lkdGg6ICcxcHgnLFxuICAgICAgICAgICAgaGVpZ2h0OiAnMXB4JyxcbiAgICAgICAgICAgIG91dGxpbmU6ICdub25lJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgYXR0cmlidXRlczogeyB0YWJpbmRleDogJzAnIH0sXG4gICAgICAgICAgY2xhc3Nlc1xuICAgICAgICB9LFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgRm9jdXNpbmcuY29uZmlnKHsgaWdub3JlOiB0cnVlIH0pLFxuICAgICAgICAgIFRhYnN0b3BwaW5nLmNvbmZpZyh7fSlcbiAgICAgICAgXSlcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjcmFmdCA9IChjb250YWluZXJDbGFzc2VzLCBzcGVjKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAgICd0b3gtbmF2b2JqJyxcbiAgICAgICAgICAgIC4uLmNvbnRhaW5lckNsYXNzZXMuZ2V0T3IoW10pXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgY3JhZnRXaXRoQ2xhc3NlcyhbYmVmb3JlT2JqZWN0XSksXG4gICAgICAgICAgc3BlYyxcbiAgICAgICAgICBjcmFmdFdpdGhDbGFzc2VzKFthZnRlck9iamVjdF0pXG4gICAgICAgIF0sXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtDb21wb3NpbmdDb25maWdzLmNoaWxkQXQoMSldKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHRyaWdnZXJUYWIgPSAocGxhY2Vob2xkZXIsIHNoaWZ0S2V5KSA9PiB7XG4gICAgICBlbWl0V2l0aChwbGFjZWhvbGRlciwga2V5ZG93bigpLCB7XG4gICAgICAgIHJhdzoge1xuICAgICAgICAgIHdoaWNoOiA5LFxuICAgICAgICAgIHNoaWZ0S2V5XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25Gb2N1cyA9IChjb250YWluZXIsIHRhcmdldENvbXApID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRhcmdldENvbXAuZWxlbWVudDtcbiAgICAgIGlmIChoYXModGFyZ2V0LCBiZWZvcmVPYmplY3QpKSB7XG4gICAgICAgIHRyaWdnZXJUYWIoY29udGFpbmVyLCB0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAoaGFzKHRhcmdldCwgYWZ0ZXJPYmplY3QpKSB7XG4gICAgICAgIHRyaWdnZXJUYWIoY29udGFpbmVyLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc1BzZXVkb1N0b3AgPSBlbGVtZW50ID0+IHtcbiAgICAgIHJldHVybiBjbG9zZXN0KGVsZW1lbnQsIFtcbiAgICAgICAgJy4nICsgYmVmb3JlT2JqZWN0LFxuICAgICAgICAnLicgKyBhZnRlck9iamVjdFxuICAgICAgXS5qb2luKCcsJyksIG5ldmVyKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGlhbG9nQ2hhbm5lbCA9IGdlbmVyYXRlJDYoJ3VwZGF0ZS1kaWFsb2cnKTtcbiAgICBjb25zdCB0aXRsZUNoYW5uZWwgPSBnZW5lcmF0ZSQ2KCd1cGRhdGUtdGl0bGUnKTtcbiAgICBjb25zdCBib2R5Q2hhbm5lbCA9IGdlbmVyYXRlJDYoJ3VwZGF0ZS1ib2R5Jyk7XG4gICAgY29uc3QgZm9vdGVyQ2hhbm5lbCA9IGdlbmVyYXRlJDYoJ3VwZGF0ZS1mb290ZXInKTtcbiAgICBjb25zdCBib2R5U2VuZE1lc3NhZ2VDaGFubmVsID0gZ2VuZXJhdGUkNignYm9keS1zZW5kLW1lc3NhZ2UnKTtcbiAgICBjb25zdCBkaWFsb2dGb2N1c1NoaWZ0ZWRDaGFubmVsID0gZ2VuZXJhdGUkNignZGlhbG9nLWZvY3VzLXNoaWZ0ZWQnKTtcblxuICAgIGNvbnN0IGJyb3dzZXIgPSBkZXRlY3QkMigpLmJyb3dzZXI7XG4gICAgY29uc3QgaXNTYWZhcmkgPSBicm93c2VyLmlzU2FmYXJpKCk7XG4gICAgY29uc3QgaXNGaXJlZm94ID0gYnJvd3Nlci5pc0ZpcmVmb3goKTtcbiAgICBjb25zdCBpc1NhZmFyaU9yRmlyZWZveCA9IGlzU2FmYXJpIHx8IGlzRmlyZWZveDtcbiAgICBjb25zdCBpc0Nocm9taXVtID0gYnJvd3Nlci5pc0Nocm9taXVtKCk7XG4gICAgY29uc3QgaXNFbGVtZW50U2Nyb2xsQXRCb3R0b20gPSAoe3Njcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHR9KSA9PiBNYXRoLmNlaWwoc2Nyb2xsVG9wKSArIGNsaWVudEhlaWdodCA+PSBzY3JvbGxIZWlnaHQ7XG4gICAgY29uc3Qgc2Nyb2xsVG9ZID0gKHdpbiwgeSkgPT4gd2luLnNjcm9sbFRvKDAsIHkgPT09ICdib3R0b20nID8gOTk5OTk5OTkgOiB5KTtcbiAgICBjb25zdCBnZXRTY3JvbGxpbmdFbGVtZW50ID0gKGRvYywgaHRtbCkgPT4ge1xuICAgICAgY29uc3QgYm9keSA9IGRvYy5ib2R5O1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oIS9ePCFET0NUWVBFIChodG1sfEhUTUwpLy50ZXN0KGh0bWwpICYmICghaXNDaHJvbWl1bSAmJiAhaXNTYWZhcmkgfHwgaXNOb25OdWxsYWJsZShib2R5KSAmJiAoYm9keS5zY3JvbGxUb3AgIT09IDAgfHwgTWF0aC5hYnMoYm9keS5zY3JvbGxIZWlnaHQgLSBib2R5LmNsaWVudEhlaWdodCkgPiAxKSkgPyBib2R5IDogZG9jLmRvY3VtZW50RWxlbWVudCk7XG4gICAgfTtcbiAgICBjb25zdCB3cml0ZVZhbHVlID0gKGlmcmFtZUVsZW1lbnQsIGh0bWwsIGZhbGxiYWNrRm4pID0+IHtcbiAgICAgIGNvbnN0IGlmcmFtZSA9IGlmcmFtZUVsZW1lbnQuZG9tO1xuICAgICAgT3B0aW9uYWwuZnJvbShpZnJhbWUuY29udGVudERvY3VtZW50KS5mb2xkKGZhbGxiYWNrRm4sIGRvYyA9PiB7XG4gICAgICAgIGxldCBsYXN0U2Nyb2xsVG9wID0gMDtcbiAgICAgICAgY29uc3QgaXNTY3JvbGxBdEJvdHRvbSA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jLCBodG1sKS5tYXAoZWwgPT4ge1xuICAgICAgICAgIGxhc3RTY3JvbGxUb3AgPSBlbC5zY3JvbGxUb3A7XG4gICAgICAgICAgcmV0dXJuIGVsO1xuICAgICAgICB9KS5mb3JhbGwoaXNFbGVtZW50U2Nyb2xsQXRCb3R0b20pO1xuICAgICAgICBjb25zdCBzY3JvbGxBZnRlcldyaXRlID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHdpbiA9IGlmcmFtZS5jb250ZW50V2luZG93O1xuICAgICAgICAgIGlmIChpc05vbk51bGxhYmxlKHdpbikpIHtcbiAgICAgICAgICAgIGlmIChpc1Njcm9sbEF0Qm90dG9tKSB7XG4gICAgICAgICAgICAgIHNjcm9sbFRvWSh3aW4sICdib3R0b20nKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzU2Nyb2xsQXRCb3R0b20gJiYgaXNTYWZhcmlPckZpcmVmb3ggJiYgbGFzdFNjcm9sbFRvcCAhPT0gMCkge1xuICAgICAgICAgICAgICBzY3JvbGxUb1kod2luLCBsYXN0U2Nyb2xsVG9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChpc1NhZmFyaSkge1xuICAgICAgICAgIGlmcmFtZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgc2Nyb2xsQWZ0ZXJXcml0ZSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGRvYy5vcGVuKCk7XG4gICAgICAgIGRvYy53cml0ZShodG1sKTtcbiAgICAgICAgZG9jLmNsb3NlKCk7XG4gICAgICAgIGlmICghaXNTYWZhcmkpIHtcbiAgICAgICAgICBzY3JvbGxBZnRlcldyaXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgdGhyb3R0bGVJbnRlcnZhbCA9IHNvbWVJZihpc1NhZmFyaU9yRmlyZWZveCwgaXNTYWZhcmkgPyA1MDAgOiAyMDApO1xuICAgIGNvbnN0IHdyaXRlVmFsdWVUaHJvdHRsZXIgPSB0aHJvdHRsZUludGVydmFsLm1hcChpbnRlcnZhbCA9PiBhZGFwdGFibGUod3JpdGVWYWx1ZSwgaW50ZXJ2YWwpKTtcbiAgICBjb25zdCBnZXREeW5hbWljU291cmNlID0gKGluaXRpYWxEYXRhLCBzdHJlYW0pID0+IHtcbiAgICAgIGNvbnN0IGNhY2hlZFZhbHVlID0gQ2VsbChpbml0aWFsRGF0YS5nZXRPcignJykpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0VmFsdWU6IF9mcmFtZUNvbXBvbmVudCA9PiBjYWNoZWRWYWx1ZS5nZXQoKSxcbiAgICAgICAgc2V0VmFsdWU6IChmcmFtZUNvbXBvbmVudCwgaHRtbCkgPT4ge1xuICAgICAgICAgIGlmIChjYWNoZWRWYWx1ZS5nZXQoKSAhPT0gaHRtbCkge1xuICAgICAgICAgICAgY29uc3QgaWZyYW1lRWxlbWVudCA9IGZyYW1lQ29tcG9uZW50LmVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBzZXRTcmNkb2NWYWx1ZSA9ICgpID0+IHNldCQ5KGlmcmFtZUVsZW1lbnQsICdzcmNkb2MnLCBodG1sKTtcbiAgICAgICAgICAgIGlmIChzdHJlYW0pIHtcbiAgICAgICAgICAgICAgd3JpdGVWYWx1ZVRocm90dGxlci5mb2xkKGNvbnN0YW50JDEod3JpdGVWYWx1ZSksIHRocm90dGxlciA9PiB0aHJvdHRsZXIudGhyb3R0bGUpKGlmcmFtZUVsZW1lbnQsIGh0bWwsIHNldFNyY2RvY1ZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNldFNyY2RvY1ZhbHVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhY2hlZFZhbHVlLnNldChodG1sKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlcklGcmFtZSA9IChzcGVjLCBwcm92aWRlcnNCYWNrc3RhZ2UsIGluaXRpYWxEYXRhKSA9PiB7XG4gICAgICBjb25zdCBiYXNlQ2xhc3MgPSAndG94LWRpYWxvZ19faWZyYW1lJztcbiAgICAgIGNvbnN0IG9wYXF1ZUNsYXNzID0gc3BlYy50cmFuc3BhcmVudCA/IFtdIDogW2AkeyBiYXNlQ2xhc3MgfS0tb3BhcXVlYF07XG4gICAgICBjb25zdCBjb250YWluZXJCb3JkZXJlZENsYXNzID0gc3BlYy5ib3JkZXIgPyBbYHRveC1uYXZvYmotYm9yZGVyZWRgXSA6IFtdO1xuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgLi4uc3BlYy5sYWJlbC5tYXAodGl0bGUgPT4gKHsgdGl0bGUgfSkpLmdldE9yKHt9KSxcbiAgICAgICAgLi4uaW5pdGlhbERhdGEubWFwKGh0bWwgPT4gKHsgc3JjZG9jOiBodG1sIH0pKS5nZXRPcih7fSksXG4gICAgICAgIC4uLnNwZWMuc2FuZGJveGVkID8geyBzYW5kYm94OiAnYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbicgfSA6IHt9XG4gICAgICB9O1xuICAgICAgY29uc3Qgc291cmNpbmcgPSBnZXREeW5hbWljU291cmNlKGluaXRpYWxEYXRhLCBzcGVjLnN0cmVhbUNvbnRlbnQpO1xuICAgICAgY29uc3QgcExhYmVsID0gc3BlYy5sYWJlbC5tYXAobGFiZWwgPT4gcmVuZGVyTGFiZWwkMyhsYWJlbCwgcHJvdmlkZXJzQmFja3N0YWdlKSk7XG4gICAgICBjb25zdCBmYWN0b3J5ID0gbmV3U3BlYyA9PiBjcmFmdChPcHRpb25hbC5mcm9tKGNvbnRhaW5lckJvcmRlcmVkQ2xhc3MpLCB7XG4gICAgICAgIHVpZDogbmV3U3BlYy51aWQsXG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2lmcmFtZScsXG4gICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICBjbGFzc2VzOiBbXG4gICAgICAgICAgICBiYXNlQ2xhc3MsXG4gICAgICAgICAgICAuLi5vcGFxdWVDbGFzc1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIFRhYnN0b3BwaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgRm9jdXNpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICB3aXRoQ29tcChpbml0aWFsRGF0YSwgc291cmNpbmcuZ2V0VmFsdWUsIHNvdXJjaW5nLnNldFZhbHVlKSxcbiAgICAgICAgICBSZWNlaXZpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIGNoYW5uZWxzOiB7XG4gICAgICAgICAgICAgIFtkaWFsb2dGb2N1c1NoaWZ0ZWRDaGFubmVsXToge1xuICAgICAgICAgICAgICAgIG9uUmVjZWl2ZTogKGNvbXAsIG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubmV3Rm9jdXMuZWFjaChuZXdGb2N1cyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQoY29tcC5lbGVtZW50KS5lYWNoKHBhcmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgZiA9IGVxKGNvbXAuZWxlbWVudCwgbmV3Rm9jdXMpID8gYWRkJDIgOiByZW1vdmUkMjtcbiAgICAgICAgICAgICAgICAgICAgICBmKHBhcmVudCwgJ3RveC1uYXZvYmotYm9yZGVyZWQtZm9jdXMnKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdKVxuICAgICAgfSk7XG4gICAgICBjb25zdCBwRmllbGQgPSBGb3JtRmllbGQucGFydHMuZmllbGQoeyBmYWN0b3J5OiB7IHNrZXRjaDogZmFjdG9yeSB9IH0pO1xuICAgICAgcmV0dXJuIHJlbmRlckZvcm1GaWVsZFdpdGgocExhYmVsLCBwRmllbGQsIFsndG94LWZvcm1fX2dyb3VwLS1zdHJldGNoZWQnXSwgW10pO1xuICAgIH07XG5cbiAgICBjb25zdCBpbWFnZSA9IGltYWdlID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGxvYWRlZCA9ICgpID0+IHtcbiAgICAgICAgZGVzdHJveSgpO1xuICAgICAgICByZXNvbHZlKGltYWdlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBsaXN0ZW5lcnMgPSBbXG4gICAgICAgIGJpbmQoaW1hZ2UsICdsb2FkJywgbG9hZGVkKSxcbiAgICAgICAgYmluZChpbWFnZSwgJ2Vycm9yJywgKCkgPT4ge1xuICAgICAgICAgIGRlc3Ryb3koKTtcbiAgICAgICAgICByZWplY3QoJ1VuYWJsZSB0byBsb2FkIGRhdGEgZnJvbSBpbWFnZTogJyArIGltYWdlLmRvbS5zcmMpO1xuICAgICAgICB9KVxuICAgICAgXTtcbiAgICAgIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiBlYWNoJDEobGlzdGVuZXJzLCBsID0+IGwudW5iaW5kKCkpO1xuICAgICAgaWYgKGltYWdlLmRvbS5jb21wbGV0ZSkge1xuICAgICAgICBsb2FkZWQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGNhbGN1bGF0ZUltYWdlUG9zaXRpb24gPSAocGFuZWxXaWR0aCwgcGFuZWxIZWlnaHQsIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0LCB6b29tKSA9PiB7XG4gICAgICBjb25zdCB3aWR0aCA9IGltYWdlV2lkdGggKiB6b29tO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gaW1hZ2VIZWlnaHQgKiB6b29tO1xuICAgICAgY29uc3QgbGVmdCA9IE1hdGgubWF4KDAsIHBhbmVsV2lkdGggLyAyIC0gd2lkdGggLyAyKTtcbiAgICAgIGNvbnN0IHRvcCA9IE1hdGgubWF4KDAsIHBhbmVsSGVpZ2h0IC8gMiAtIGhlaWdodCAvIDIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdDogbGVmdC50b1N0cmluZygpICsgJ3B4JyxcbiAgICAgICAgdG9wOiB0b3AudG9TdHJpbmcoKSArICdweCcsXG4gICAgICAgIHdpZHRoOiB3aWR0aC50b1N0cmluZygpICsgJ3B4JyxcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQudG9TdHJpbmcoKSArICdweCdcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCB6b29tVG9GaXQgPSAocGFuZWwsIHdpZHRoLCBoZWlnaHQpID0+IHtcbiAgICAgIGNvbnN0IHBhbmVsVyA9IGdldCRjKHBhbmVsKTtcbiAgICAgIGNvbnN0IHBhbmVsSCA9IGdldCRkKHBhbmVsKTtcbiAgICAgIHJldHVybiBNYXRoLm1pbihwYW5lbFcgLyB3aWR0aCwgcGFuZWxIIC8gaGVpZ2h0LCAxKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckltYWdlUHJldmlldyA9IChzcGVjLCBpbml0aWFsRGF0YSkgPT4ge1xuICAgICAgY29uc3QgY2FjaGVkRGF0YSA9IENlbGwoaW5pdGlhbERhdGEuZ2V0T3IoeyB1cmw6ICcnIH0pKTtcbiAgICAgIGNvbnN0IG1lbUltYWdlID0gcmVjb3JkKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnaW1nJyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1pbWFnZXByZXZpZXdfX2ltYWdlJ10sXG4gICAgICAgICAgYXR0cmlidXRlczogaW5pdGlhbERhdGEubWFwKGRhdGEgPT4gKHsgc3JjOiBkYXRhLnVybCB9KSkuZ2V0T3Ioe30pXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgbWVtQ29udGFpbmVyID0gcmVjb3JkKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1pbWFnZXByZXZpZXdfX2NvbnRhaW5lciddLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3ByZXNlbnRhdGlvbicgfVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbbWVtSW1hZ2UuYXNTcGVjKCldXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNldFZhbHVlID0gKGZyYW1lQ29tcG9uZW50LCBkYXRhKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWREYXRhID0geyB1cmw6IGRhdGEudXJsIH07XG4gICAgICAgIGRhdGEuem9vbS5lYWNoKHogPT4gdHJhbnNsYXRlZERhdGEuem9vbSA9IHopO1xuICAgICAgICBkYXRhLmNhY2hlZFdpZHRoLmVhY2goeiA9PiB0cmFuc2xhdGVkRGF0YS5jYWNoZWRXaWR0aCA9IHopO1xuICAgICAgICBkYXRhLmNhY2hlZEhlaWdodC5lYWNoKHogPT4gdHJhbnNsYXRlZERhdGEuY2FjaGVkSGVpZ2h0ID0geik7XG4gICAgICAgIGNhY2hlZERhdGEuc2V0KHRyYW5zbGF0ZWREYXRhKTtcbiAgICAgICAgY29uc3QgYXBwbHlGcmFtZVBvc2l0aW9uaW5nID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHtjYWNoZWRXaWR0aCwgY2FjaGVkSGVpZ2h0LCB6b29tfSA9IHRyYW5zbGF0ZWREYXRhO1xuICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoY2FjaGVkV2lkdGgpICYmICFpc1VuZGVmaW5lZChjYWNoZWRIZWlnaHQpKSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQoem9vbSkpIHtcbiAgICAgICAgICAgICAgY29uc3QgeiA9IHpvb21Ub0ZpdChmcmFtZUNvbXBvbmVudC5lbGVtZW50LCBjYWNoZWRXaWR0aCwgY2FjaGVkSGVpZ2h0KTtcbiAgICAgICAgICAgICAgdHJhbnNsYXRlZERhdGEuem9vbSA9IHo7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGNhbGN1bGF0ZUltYWdlUG9zaXRpb24oZ2V0JGMoZnJhbWVDb21wb25lbnQuZWxlbWVudCksIGdldCRkKGZyYW1lQ29tcG9uZW50LmVsZW1lbnQpLCBjYWNoZWRXaWR0aCwgY2FjaGVkSGVpZ2h0LCB0cmFuc2xhdGVkRGF0YS56b29tKTtcbiAgICAgICAgICAgIG1lbUNvbnRhaW5lci5nZXRPcHQoZnJhbWVDb21wb25lbnQpLmVhY2goY29udGFpbmVyID0+IHtcbiAgICAgICAgICAgICAgc2V0QWxsKGNvbnRhaW5lci5lbGVtZW50LCBwb3NpdGlvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbUltYWdlLmdldE9wdChmcmFtZUNvbXBvbmVudCkuZWFjaChpbWFnZUNvbXBvbmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgaW1nID0gaW1hZ2VDb21wb25lbnQuZWxlbWVudDtcbiAgICAgICAgICBpZiAoZGF0YS51cmwgIT09IGdldCRmKGltZywgJ3NyYycpKSB7XG4gICAgICAgICAgICBzZXQkOShpbWcsICdzcmMnLCBkYXRhLnVybCk7XG4gICAgICAgICAgICByZW1vdmUkMihmcmFtZUNvbXBvbmVudC5lbGVtZW50LCAndG94LWltYWdlcHJldmlld19fbG9hZGVkJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFwcGx5RnJhbWVQb3NpdGlvbmluZygpO1xuICAgICAgICAgIGltYWdlKGltZykudGhlbihpbWcgPT4ge1xuICAgICAgICAgICAgaWYgKGZyYW1lQ29tcG9uZW50LmdldFN5c3RlbSgpLmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgYWRkJDIoZnJhbWVDb21wb25lbnQuZWxlbWVudCwgJ3RveC1pbWFnZXByZXZpZXdfX2xvYWRlZCcpO1xuICAgICAgICAgICAgICB0cmFuc2xhdGVkRGF0YS5jYWNoZWRXaWR0aCA9IGltZy5kb20ubmF0dXJhbFdpZHRoO1xuICAgICAgICAgICAgICB0cmFuc2xhdGVkRGF0YS5jYWNoZWRIZWlnaHQgPSBpbWcuZG9tLm5hdHVyYWxIZWlnaHQ7XG4gICAgICAgICAgICAgIGFwcGx5RnJhbWVQb3NpdGlvbmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzdHlsZXMgPSB7fTtcbiAgICAgIHNwZWMuaGVpZ2h0LmVhY2goaCA9PiBzdHlsZXMuaGVpZ2h0ID0gaCk7XG4gICAgICBjb25zdCBmYWtlVmFsaWRhdGVkRGF0YSA9IGluaXRpYWxEYXRhLm1hcChkID0+ICh7XG4gICAgICAgIHVybDogZC51cmwsXG4gICAgICAgIHpvb206IE9wdGlvbmFsLmZyb20oZC56b29tKSxcbiAgICAgICAgY2FjaGVkV2lkdGg6IE9wdGlvbmFsLmZyb20oZC5jYWNoZWRXaWR0aCksXG4gICAgICAgIGNhY2hlZEhlaWdodDogT3B0aW9uYWwuZnJvbShkLmNhY2hlZEhlaWdodClcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtaW1hZ2VwcmV2aWV3J10sXG4gICAgICAgICAgc3R5bGVzLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3ByZXNlbnRhdGlvbicgfVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbbWVtQ29udGFpbmVyLmFzU3BlYygpXSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIENvbXBvc2luZ0NvbmZpZ3Muc2VsZigpLFxuICAgICAgICAgIHdpdGhDb21wKGZha2VWYWxpZGF0ZWREYXRhLCAoKSA9PiBjYWNoZWREYXRhLmdldCgpLCBzZXRWYWx1ZSlcbiAgICAgICAgXSlcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlckxhYmVsJDIgPSAoc3BlYywgYmFja3N0YWdlU2hhcmVkKSA9PiB7XG4gICAgICBjb25zdCBiYXNlQ2xhc3MgPSAndG94LWxhYmVsJztcbiAgICAgIGNvbnN0IGNlbnRlckNsYXNzID0gc3BlYy5hbGlnbiA9PT0gJ2NlbnRlcicgPyBbYCR7IGJhc2VDbGFzcyB9LS1jZW50ZXJgXSA6IFtdO1xuICAgICAgY29uc3QgZW5kQ2xhc3MgPSBzcGVjLmFsaWduID09PSAnZW5kJyA/IFtgJHsgYmFzZUNsYXNzIH0tLWVuZGBdIDogW107XG4gICAgICBjb25zdCBsYWJlbCA9IHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnbGFiZWwnLFxuICAgICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAgIGJhc2VDbGFzcyxcbiAgICAgICAgICAgIC4uLmNlbnRlckNsYXNzLFxuICAgICAgICAgICAgLi4uZW5kQ2xhc3NcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFt0ZXh0JDIoYmFja3N0YWdlU2hhcmVkLnByb3ZpZGVycy50cmFuc2xhdGUoc3BlYy5sYWJlbCkpXVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbXBzID0gbWFwJDIoc3BlYy5pdGVtcywgYmFja3N0YWdlU2hhcmVkLmludGVycHJldGVyKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtZm9ybV9fZ3JvdXAnXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgLi4uY29tcHNcbiAgICAgICAgXSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIENvbXBvc2luZ0NvbmZpZ3Muc2VsZigpLFxuICAgICAgICAgIFJlcGxhY2luZy5jb25maWcoe30pLFxuICAgICAgICAgIGRvbUh0bWwoT3B0aW9uYWwubm9uZSgpKSxcbiAgICAgICAgICBLZXlpbmcuY29uZmlnKHsgbW9kZTogJ2FjeWNsaWMnIH0pXG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBpbnRlcm5hbFRvb2xiYXJCdXR0b25FeGVjdXRlID0gZ2VuZXJhdGUkNigndG9vbGJhci5idXR0b24uZXhlY3V0ZScpO1xuICAgIGNvbnN0IG9uVG9vbGJhckJ1dHRvbkV4ZWN1dGUgPSBpbmZvID0+IHJ1bk9uRXhlY3V0ZSQxKChjb21wLCBfc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgIHJ1bldpdGhBcGkoaW5mbywgY29tcCkoaXRlbUFwaSA9PiB7XG4gICAgICAgIGVtaXRXaXRoKGNvbXAsIGludGVybmFsVG9vbGJhckJ1dHRvbkV4ZWN1dGUsIHsgYnV0dG9uQXBpOiBpdGVtQXBpIH0pO1xuICAgICAgICBpbmZvLm9uQWN0aW9uKGl0ZW1BcGkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgY29tbW9uQnV0dG9uRGlzcGxheUV2ZW50ID0gZ2VuZXJhdGUkNignY29tbW9uLWJ1dHRvbi1kaXNwbGF5LWV2ZW50cycpO1xuICAgIGNvbnN0IHRvb2xiYXJCdXR0b25FdmVudE9yZGVyID0ge1xuICAgICAgW2V4ZWN1dGUkNSgpXTogW1xuICAgICAgICAnZGlzYWJsaW5nJyxcbiAgICAgICAgJ2FsbG95LmJhc2UuYmVoYXZpb3VyJyxcbiAgICAgICAgJ3RvZ2dsaW5nJyxcbiAgICAgICAgJ3Rvb2xiYXItYnV0dG9uLWV2ZW50cydcbiAgICAgIF0sXG4gICAgICBbYXR0YWNoZWRUb0RvbSgpXTogW1xuICAgICAgICAndG9vbGJhci1idXR0b24tZXZlbnRzJyxcbiAgICAgICAgY29tbW9uQnV0dG9uRGlzcGxheUV2ZW50XG4gICAgICBdLFxuICAgICAgW21vdXNlZG93bigpXTogW1xuICAgICAgICAnZm9jdXNpbmcnLFxuICAgICAgICAnYWxsb3kuYmFzZS5iZWhhdmlvdXInLFxuICAgICAgICBjb21tb25CdXR0b25EaXNwbGF5RXZlbnRcbiAgICAgIF1cbiAgICB9O1xuXG4gICAgY29uc3QgZm9yY2VJbml0aWFsU2l6ZSA9IGNvbXAgPT4gc2V0JDgoY29tcC5lbGVtZW50LCAnd2lkdGgnLCBnZXQkZShjb21wLmVsZW1lbnQsICd3aWR0aCcpKTtcblxuICAgIGNvbnN0IHJlbmRlckljb24kMSA9IChpY29uTmFtZSwgaWNvbnNQcm92aWRlciwgYmVoYXZpb3VycykgPT4gcmVuZGVyJDMoaWNvbk5hbWUsIHtcbiAgICAgIHRhZzogJ3NwYW4nLFxuICAgICAgY2xhc3NlczogW1xuICAgICAgICAndG94LWljb24nLFxuICAgICAgICAndG94LXRidG5fX2ljb24td3JhcCdcbiAgICAgIF0sXG4gICAgICBiZWhhdmlvdXJzXG4gICAgfSwgaWNvbnNQcm92aWRlcik7XG4gICAgY29uc3QgcmVuZGVySWNvbkZyb21QYWNrJDEgPSAoaWNvbk5hbWUsIGljb25zUHJvdmlkZXIpID0+IHJlbmRlckljb24kMShpY29uTmFtZSwgaWNvbnNQcm92aWRlciwgW10pO1xuICAgIGNvbnN0IHJlbmRlclJlcGxhY2VhYmxlSWNvbkZyb21QYWNrID0gKGljb25OYW1lLCBpY29uc1Byb3ZpZGVyKSA9PiByZW5kZXJJY29uJDEoaWNvbk5hbWUsIGljb25zUHJvdmlkZXIsIFtSZXBsYWNpbmcuY29uZmlnKHt9KV0pO1xuICAgIGNvbnN0IHJlbmRlckxhYmVsJDEgPSAodGV4dCwgcHJlZml4LCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+ICh7XG4gICAgICBkb206IHtcbiAgICAgICAgdGFnOiAnc3BhbicsXG4gICAgICAgIGNsYXNzZXM6IFtgJHsgcHJlZml4IH1fX3NlbGVjdC1sYWJlbGBdXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czogW3RleHQkMihwcm92aWRlcnNCYWNrc3RhZ2UudHJhbnNsYXRlKHRleHQpKV0sXG4gICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbUmVwbGFjaW5nLmNvbmZpZyh7fSldKVxuICAgIH0pO1xuXG4gICAgY29uc3QgdXBkYXRlTWVudVRleHQgPSBnZW5lcmF0ZSQ2KCd1cGRhdGUtbWVudS10ZXh0Jyk7XG4gICAgY29uc3QgdXBkYXRlTWVudUljb24gPSBnZW5lcmF0ZSQ2KCd1cGRhdGUtbWVudS1pY29uJyk7XG4gICAgY29uc3QgcmVuZGVyQ29tbW9uRHJvcGRvd24gPSAoc3BlYywgcHJlZml4LCBzaGFyZWRCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IGVkaXRvck9mZkNlbGwgPSBDZWxsKG5vb3ApO1xuICAgICAgY29uc3Qgb3B0TWVtRGlzcGxheVRleHQgPSBzcGVjLnRleHQubWFwKHRleHQgPT4gcmVjb3JkKHJlbmRlckxhYmVsJDEodGV4dCwgcHJlZml4LCBzaGFyZWRCYWNrc3RhZ2UucHJvdmlkZXJzKSkpO1xuICAgICAgY29uc3Qgb3B0TWVtRGlzcGxheUljb24gPSBzcGVjLmljb24ubWFwKGljb25OYW1lID0+IHJlY29yZChyZW5kZXJSZXBsYWNlYWJsZUljb25Gcm9tUGFjayhpY29uTmFtZSwgc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVycy5pY29ucykpKTtcbiAgICAgIGNvbnN0IG9uTGVmdE9yUmlnaHRJbk1lbnUgPSAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgY29uc3QgZHJvcGRvd24gPSBSZXByZXNlbnRpbmcuZ2V0VmFsdWUoY29tcCk7XG4gICAgICAgIEZvY3VzaW5nLmZvY3VzKGRyb3Bkb3duKTtcbiAgICAgICAgZW1pdFdpdGgoZHJvcGRvd24sICdrZXlkb3duJywgeyByYXc6IHNlLmV2ZW50LnJhdyB9KTtcbiAgICAgICAgRHJvcGRvd24uY2xvc2UoZHJvcGRvd24pO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCByb2xlID0gc3BlYy5yb2xlLmZvbGQoKCkgPT4gKHt9KSwgcm9sZSA9PiAoeyByb2xlIH0pKTtcbiAgICAgIGNvbnN0IHRvb2x0aXBBdHRyaWJ1dGVzID0gc3BlYy50b29sdGlwLmZvbGQoKCkgPT4gKHt9KSwgdG9vbHRpcCA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRUb29sdGlwID0gc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVycy50cmFuc2xhdGUodG9vbHRpcCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgJ3RpdGxlJzogdHJhbnNsYXRlZFRvb2x0aXAsXG4gICAgICAgICAgJ2FyaWEtbGFiZWwnOiB0cmFuc2xhdGVkVG9vbHRpcFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICBjb25zdCBpY29uU3BlYyA9IHJlbmRlciQzKCdjaGV2cm9uLWRvd24nLCB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFtgJHsgcHJlZml4IH1fX3NlbGVjdC1jaGV2cm9uYF1cbiAgICAgIH0sIHNoYXJlZEJhY2tzdGFnZS5wcm92aWRlcnMuaWNvbnMpO1xuICAgICAgY29uc3QgZml4V2lkdGhCZWhhdmlvdXJOYW1lID0gZ2VuZXJhdGUkNignY29tbW9uLWJ1dHRvbi1kaXNwbGF5LWV2ZW50cycpO1xuICAgICAgY29uc3QgbWVtRHJvcGRvd24gPSByZWNvcmQoRHJvcGRvd24uc2tldGNoKHtcbiAgICAgICAgLi4uc3BlYy51aWQgPyB7IHVpZDogc3BlYy51aWQgfSA6IHt9LFxuICAgICAgICAuLi5yb2xlLFxuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdidXR0b24nLFxuICAgICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIGAkeyBwcmVmaXggfS0tc2VsZWN0YFxuICAgICAgICAgIF0uY29uY2F0KG1hcCQyKHNwZWMuY2xhc3NlcywgYyA9PiBgJHsgcHJlZml4IH0tLSR7IGMgfWApKSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7IC4uLnRvb2x0aXBBdHRyaWJ1dGVzIH1cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogY29tcG9uZW50UmVuZGVyUGlwZWxpbmUoW1xuICAgICAgICAgIG9wdE1lbURpc3BsYXlJY29uLm1hcChtZW0gPT4gbWVtLmFzU3BlYygpKSxcbiAgICAgICAgICBvcHRNZW1EaXNwbGF5VGV4dC5tYXAobWVtID0+IG1lbS5hc1NwZWMoKSksXG4gICAgICAgICAgT3B0aW9uYWwuc29tZShpY29uU3BlYylcbiAgICAgICAgXSksXG4gICAgICAgIG1hdGNoV2lkdGg6IHRydWUsXG4gICAgICAgIHVzZU1pbldpZHRoOiB0cnVlLFxuICAgICAgICBvbk9wZW46IChhbmNob3IsIGRyb3Bkb3duQ29tcCwgdG1lbnVDb21wKSA9PiB7XG4gICAgICAgICAgaWYgKHNwZWMuc2VhcmNoYWJsZSkge1xuICAgICAgICAgICAgZm9jdXNTZWFyY2hGaWVsZCh0bWVudUNvbXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZHJvcGRvd25CZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgLi4uc3BlYy5kcm9wZG93bkJlaGF2aW91cnMsXG4gICAgICAgICAgRGlzYWJsaW5nQ29uZmlncy5idXR0b24oKCkgPT4gc3BlYy5kaXNhYmxlZCB8fCBzaGFyZWRCYWNrc3RhZ2UucHJvdmlkZXJzLmlzRGlzYWJsZWQoKSksXG4gICAgICAgICAgcmVjZWl2aW5nQ29uZmlnKCksXG4gICAgICAgICAgVW5zZWxlY3RpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICBSZXBsYWNpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICBjb25maWcoJ2Ryb3Bkb3duLWV2ZW50cycsIFtcbiAgICAgICAgICAgIG9uQ29udHJvbEF0dGFjaGVkKHNwZWMsIGVkaXRvck9mZkNlbGwpLFxuICAgICAgICAgICAgb25Db250cm9sRGV0YWNoZWQoc3BlYywgZWRpdG9yT2ZmQ2VsbClcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBjb25maWcoZml4V2lkdGhCZWhhdmlvdXJOYW1lLCBbcnVuT25BdHRhY2hlZCgoY29tcCwgX3NlKSA9PiBmb3JjZUluaXRpYWxTaXplKGNvbXApKV0pLFxuICAgICAgICAgIGNvbmZpZygnbWVudWJ1dHRvbi11cGRhdGUtZGlzcGxheS10ZXh0JywgW1xuICAgICAgICAgICAgcnVuJDEodXBkYXRlTWVudVRleHQsIChjb21wLCBzZSkgPT4ge1xuICAgICAgICAgICAgICBvcHRNZW1EaXNwbGF5VGV4dC5iaW5kKG1lbSA9PiBtZW0uZ2V0T3B0KGNvbXApKS5lYWNoKGRpc3BsYXlUZXh0ID0+IHtcbiAgICAgICAgICAgICAgICBSZXBsYWNpbmcuc2V0KGRpc3BsYXlUZXh0LCBbdGV4dCQyKHNoYXJlZEJhY2tzdGFnZS5wcm92aWRlcnMudHJhbnNsYXRlKHNlLmV2ZW50LnRleHQpKV0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcnVuJDEodXBkYXRlTWVudUljb24sIChjb21wLCBzZSkgPT4ge1xuICAgICAgICAgICAgICBvcHRNZW1EaXNwbGF5SWNvbi5iaW5kKG1lbSA9PiBtZW0uZ2V0T3B0KGNvbXApKS5lYWNoKGRpc3BsYXlJY29uID0+IHtcbiAgICAgICAgICAgICAgICBSZXBsYWNpbmcuc2V0KGRpc3BsYXlJY29uLCBbcmVuZGVyUmVwbGFjZWFibGVJY29uRnJvbVBhY2soc2UuZXZlbnQuaWNvbiwgc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVycy5pY29ucyldKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0pXG4gICAgICAgIF0pLFxuICAgICAgICBldmVudE9yZGVyOiBkZWVwTWVyZ2UodG9vbGJhckJ1dHRvbkV2ZW50T3JkZXIsIHtcbiAgICAgICAgICBtb3VzZWRvd246IFtcbiAgICAgICAgICAgICdmb2N1c2luZycsXG4gICAgICAgICAgICAnYWxsb3kuYmFzZS5iZWhhdmlvdXInLFxuICAgICAgICAgICAgJ2l0ZW0tdHlwZS1ldmVudHMnLFxuICAgICAgICAgICAgJ25vcm1hbC1kcm9wZG93bi1ldmVudHMnXG4gICAgICAgICAgXSxcbiAgICAgICAgICBbYXR0YWNoZWRUb0RvbSgpXTogW1xuICAgICAgICAgICAgJ3Rvb2xiYXItYnV0dG9uLWV2ZW50cycsXG4gICAgICAgICAgICAnZHJvcGRvd24tZXZlbnRzJyxcbiAgICAgICAgICAgIGZpeFdpZHRoQmVoYXZpb3VyTmFtZVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIHNhbmRib3hCZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBtb2RlOiAnc3BlY2lhbCcsXG4gICAgICAgICAgICBvbkxlZnQ6IG9uTGVmdE9yUmlnaHRJbk1lbnUsXG4gICAgICAgICAgICBvblJpZ2h0OiBvbkxlZnRPclJpZ2h0SW5NZW51XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY29uZmlnKCdkcm9wZG93bi1zYW5kYm94LWV2ZW50cycsIFtcbiAgICAgICAgICAgIHJ1biQxKHJlZmV0Y2hUcmlnZ2VyRXZlbnQsIChvcmlnaW5hbFNhbmRib3hDb21wLCBzZSkgPT4ge1xuICAgICAgICAgICAgICBoYW5kbGVSZWZldGNoVHJpZ2dlcihvcmlnaW5hbFNhbmRib3hDb21wKTtcbiAgICAgICAgICAgICAgc2Uuc3RvcCgpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBydW4kMShyZWRpcmVjdE1lbnVJdGVtSW50ZXJhY3Rpb25FdmVudCwgKHNhbmRib3hDb21wLCBzZSkgPT4ge1xuICAgICAgICAgICAgICBoYW5kbGVSZWRpcmVjdFRvTWVudUl0ZW0oc2FuZGJveENvbXAsIHNlKTtcbiAgICAgICAgICAgICAgc2Uuc3RvcCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdKVxuICAgICAgICBdKSxcbiAgICAgICAgbGF6eVNpbms6IHNoYXJlZEJhY2tzdGFnZS5nZXRTaW5rLFxuICAgICAgICB0b2dnbGVDbGFzczogYCR7IHByZWZpeCB9LS1hY3RpdmVgLFxuICAgICAgICBwYXJ0czoge1xuICAgICAgICAgIG1lbnU6IHtcbiAgICAgICAgICAgIC4uLnBhcnQoZmFsc2UsIHNwZWMuY29sdW1ucywgc3BlYy5wcmVzZXRzKSxcbiAgICAgICAgICAgIGZha2VGb2N1czogc3BlYy5zZWFyY2hhYmxlLFxuICAgICAgICAgICAgb25IaWdobGlnaHRJdGVtOiB1cGRhdGVBcmlhT25IaWdobGlnaHQsXG4gICAgICAgICAgICBvbkNvbGxhcHNlTWVudTogKHRtZW51Q29tcCwgaXRlbUNvbXBDYXVzaW5nQ29sbGFwc2UsIG5vd0FjdGl2ZU1lbnVDb21wKSA9PiB7XG4gICAgICAgICAgICAgIEhpZ2hsaWdodGluZy5nZXRIaWdobGlnaHRlZChub3dBY3RpdmVNZW51Q29tcCkuZWFjaChpdGVtQ29tcCA9PiB7XG4gICAgICAgICAgICAgICAgdXBkYXRlQXJpYU9uSGlnaGxpZ2h0KHRtZW51Q29tcCwgbm93QWN0aXZlTWVudUNvbXAsIGl0ZW1Db21wKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25EZWhpZ2hsaWdodEl0ZW06IHVwZGF0ZUFyaWFPbkRlaGlnaGxpZ2h0XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXRBbmNob3JPdmVycmlkZXM6ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWF4SGVpZ2h0RnVuY3Rpb246IChlbGVtZW50LCBhdmFpbGFibGUpID0+IHtcbiAgICAgICAgICAgICAgYW5jaG9yZWQoKShlbGVtZW50LCBhdmFpbGFibGUgLSAxMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgZmV0Y2g6IGNvbXAgPT4gRnV0dXJlLm51KGN1cnJ5KHNwZWMuZmV0Y2gsIGNvbXApKVxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIG1lbURyb3Bkb3duLmFzU3BlYygpO1xuICAgIH07XG5cbiAgICBjb25zdCBpc01lbnVJdGVtUmVmZXJlbmNlID0gaXRlbSA9PiBpc1N0cmluZyhpdGVtKTtcbiAgICBjb25zdCBpc1NlcGFyYXRvciQyID0gaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdzZXBhcmF0b3InO1xuICAgIGNvbnN0IGlzRXhwYW5kaW5nTWVudUl0ZW0gPSBpdGVtID0+IGhhcyQyKGl0ZW0sICdnZXRTdWJtZW51SXRlbXMnKTtcbiAgICBjb25zdCBzZXBhcmF0b3IkMiA9IHsgdHlwZTogJ3NlcGFyYXRvcicgfTtcbiAgICBjb25zdCB1bndyYXBSZWZlcmVuY2VzID0gKGl0ZW1zLCBtZW51SXRlbXMpID0+IHtcbiAgICAgIGNvbnN0IHJlYWxJdGVtcyA9IGZvbGRsKGl0ZW1zLCAoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgIGlmIChpc01lbnVJdGVtUmVmZXJlbmNlKGl0ZW0pKSB7XG4gICAgICAgICAgaWYgKGl0ZW0gPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbSA9PT0gJ3wnKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjLmxlbmd0aCA+IDAgJiYgIWlzU2VwYXJhdG9yJDIoYWNjW2FjYy5sZW5ndGggLSAxXSkgPyBhY2MuY29uY2F0KFtzZXBhcmF0b3IkMl0pIDogYWNjO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzJDIobWVudUl0ZW1zLCBpdGVtLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChbbWVudUl0ZW1zW2l0ZW0udG9Mb3dlckNhc2UoKV1dKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoW2l0ZW1dKTtcbiAgICAgICAgfVxuICAgICAgfSwgW10pO1xuICAgICAgaWYgKHJlYWxJdGVtcy5sZW5ndGggPiAwICYmIGlzU2VwYXJhdG9yJDIocmVhbEl0ZW1zW3JlYWxJdGVtcy5sZW5ndGggLSAxXSkpIHtcbiAgICAgICAgcmVhbEl0ZW1zLnBvcCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlYWxJdGVtcztcbiAgICB9O1xuICAgIGNvbnN0IGdldEZyb21FeHBhbmRpbmdJdGVtID0gKGl0ZW0sIG1lbnVJdGVtcykgPT4ge1xuICAgICAgY29uc3Qgc3VibWVudUl0ZW1zID0gaXRlbS5nZXRTdWJtZW51SXRlbXMoKTtcbiAgICAgIGNvbnN0IHJlc3QgPSBleHBhbmQoc3VibWVudUl0ZW1zLCBtZW51SXRlbXMpO1xuICAgICAgY29uc3QgbmV3TWVudXMgPSBkZWVwTWVyZ2UocmVzdC5tZW51cywgeyBbaXRlbS52YWx1ZV06IHJlc3QuaXRlbXMgfSk7XG4gICAgICBjb25zdCBuZXdFeHBhbnNpb25zID0gZGVlcE1lcmdlKHJlc3QuZXhwYW5zaW9ucywgeyBbaXRlbS52YWx1ZV06IGl0ZW0udmFsdWUgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpdGVtLFxuICAgICAgICBtZW51czogbmV3TWVudXMsXG4gICAgICAgIGV4cGFuc2lvbnM6IG5ld0V4cGFuc2lvbnNcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBnZW5lcmF0ZVZhbHVlSWZSZXF1aXJlZCA9IGl0ZW0gPT4ge1xuICAgICAgY29uc3QgaXRlbVZhbHVlID0gZ2V0JGcoaXRlbSwgJ3ZhbHVlJykuZ2V0T3JUaHVuaygoKSA9PiBnZW5lcmF0ZSQ2KCdnZW5lcmF0ZWQtbWVudS1pdGVtJykpO1xuICAgICAgcmV0dXJuIGRlZXBNZXJnZSh7IHZhbHVlOiBpdGVtVmFsdWUgfSwgaXRlbSk7XG4gICAgfTtcbiAgICBjb25zdCBleHBhbmQgPSAoaXRlbXMsIG1lbnVJdGVtcykgPT4ge1xuICAgICAgY29uc3QgcmVhbEl0ZW1zID0gdW53cmFwUmVmZXJlbmNlcyhpc1N0cmluZyhpdGVtcykgPyBpdGVtcy5zcGxpdCgnICcpIDogaXRlbXMsIG1lbnVJdGVtcyk7XG4gICAgICByZXR1cm4gZm9sZHIocmVhbEl0ZW1zLCAoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgIGlmIChpc0V4cGFuZGluZ01lbnVJdGVtKGl0ZW0pKSB7XG4gICAgICAgICAgY29uc3QgaXRlbVdpdGhWYWx1ZSA9IGdlbmVyYXRlVmFsdWVJZlJlcXVpcmVkKGl0ZW0pO1xuICAgICAgICAgIGNvbnN0IG5ld0RhdGEgPSBnZXRGcm9tRXhwYW5kaW5nSXRlbShpdGVtV2l0aFZhbHVlLCBtZW51SXRlbXMpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtZW51czogZGVlcE1lcmdlKGFjYy5tZW51cywgbmV3RGF0YS5tZW51cyksXG4gICAgICAgICAgICBpdGVtczogW1xuICAgICAgICAgICAgICBuZXdEYXRhLml0ZW0sXG4gICAgICAgICAgICAgIC4uLmFjYy5pdGVtc1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGV4cGFuc2lvbnM6IGRlZXBNZXJnZShhY2MuZXhwYW5zaW9ucywgbmV3RGF0YS5leHBhbnNpb25zKVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgIC4uLmFjYy5pdGVtc1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbWVudXM6IHt9LFxuICAgICAgICBleHBhbnNpb25zOiB7fSxcbiAgICAgICAgaXRlbXM6IFtdXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0U2VhcmNoTW9kZUZvckZpZWxkID0gc2V0dGluZ3MgPT4ge1xuICAgICAgcmV0dXJuIHNldHRpbmdzLnNlYXJjaC5mb2xkKCgpID0+ICh7IHNlYXJjaE1vZGU6ICduby1zZWFyY2gnIH0pLCBzZWFyY2hTZXR0aW5ncyA9PiAoe1xuICAgICAgICBzZWFyY2hNb2RlOiAnc2VhcmNoLXdpdGgtZmllbGQnLFxuICAgICAgICBwbGFjZWhvbGRlcjogc2VhcmNoU2V0dGluZ3MucGxhY2Vob2xkZXJcbiAgICAgIH0pKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNlYXJjaE1vZGVGb3JSZXN1bHRzID0gc2V0dGluZ3MgPT4ge1xuICAgICAgcmV0dXJuIHNldHRpbmdzLnNlYXJjaC5mb2xkKCgpID0+ICh7IHNlYXJjaE1vZGU6ICduby1zZWFyY2gnIH0pLCBfID0+ICh7IHNlYXJjaE1vZGU6ICdzZWFyY2gtd2l0aC1yZXN1bHRzJyB9KSk7XG4gICAgfTtcbiAgICBjb25zdCBidWlsZCA9IChpdGVtcywgaXRlbVJlc3BvbnNlLCBiYWNrc3RhZ2UsIHNldHRpbmdzKSA9PiB7XG4gICAgICBjb25zdCBwcmltYXJ5ID0gZ2VuZXJhdGUkNigncHJpbWFyeS1tZW51Jyk7XG4gICAgICBjb25zdCBkYXRhID0gZXhwYW5kKGl0ZW1zLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycy5tZW51SXRlbXMoKSk7XG4gICAgICBpZiAoZGF0YS5pdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1haW5NZW51U2VhcmNoTW9kZSA9IGdldFNlYXJjaE1vZGVGb3JGaWVsZChzZXR0aW5ncyk7XG4gICAgICBjb25zdCBtYWluTWVudSA9IGNyZWF0ZVBhcnRpYWxNZW51KHByaW1hcnksIGRhdGEuaXRlbXMsIGl0ZW1SZXNwb25zZSwgYmFja3N0YWdlLCBzZXR0aW5ncy5pc0hvcml6b250YWxNZW51LCBtYWluTWVudVNlYXJjaE1vZGUpO1xuICAgICAgY29uc3Qgc3VibWVudVNlYXJjaE1vZGUgPSBnZXRTZWFyY2hNb2RlRm9yUmVzdWx0cyhzZXR0aW5ncyk7XG4gICAgICBjb25zdCBzdWJtZW51cyA9IG1hcCQxKGRhdGEubWVudXMsIChtZW51SXRlbXMsIG1lbnVOYW1lKSA9PiBjcmVhdGVQYXJ0aWFsTWVudShtZW51TmFtZSwgbWVudUl0ZW1zLCBpdGVtUmVzcG9uc2UsIGJhY2tzdGFnZSwgZmFsc2UsIHN1Ym1lbnVTZWFyY2hNb2RlKSk7XG4gICAgICBjb25zdCBtZW51cyA9IGRlZXBNZXJnZShzdWJtZW51cywgd3JhcCQxKHByaW1hcnksIG1haW5NZW51KSk7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbSh0aWVyZWRNZW51LnRpZXJlZERhdGEocHJpbWFyeSwgbWVudXMsIGRhdGEuZXhwYW5zaW9ucykpO1xuICAgIH07XG5cbiAgICBjb25zdCBpc1NpbmdsZUxpc3RJdGVtID0gaXRlbSA9PiAhaGFzJDIoaXRlbSwgJ2l0ZW1zJyk7XG4gICAgY29uc3QgZGF0YUF0dHJpYnV0ZSA9ICdkYXRhLXZhbHVlJztcbiAgICBjb25zdCBmZXRjaEl0ZW1zID0gKGRyb3Bkb3duQ29tcCwgbmFtZSwgaXRlbXMsIHNlbGVjdGVkVmFsdWUpID0+IG1hcCQyKGl0ZW1zLCBpdGVtID0+IHtcbiAgICAgIGlmICghaXNTaW5nbGVMaXN0SXRlbShpdGVtKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6ICduZXN0ZWRtZW51aXRlbScsXG4gICAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICAgIGdldFN1Ym1lbnVJdGVtczogKCkgPT4gZmV0Y2hJdGVtcyhkcm9wZG93bkNvbXAsIG5hbWUsIGl0ZW0uaXRlbXMsIHNlbGVjdGVkVmFsdWUpXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6ICd0b2dnbGVtZW51aXRlbScsXG4gICAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICAgIHZhbHVlOiBpdGVtLnZhbHVlLFxuICAgICAgICAgIGFjdGl2ZTogaXRlbS52YWx1ZSA9PT0gc2VsZWN0ZWRWYWx1ZSxcbiAgICAgICAgICBvbkFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgUmVwcmVzZW50aW5nLnNldFZhbHVlKGRyb3Bkb3duQ29tcCwgaXRlbS52YWx1ZSk7XG4gICAgICAgICAgICBlbWl0V2l0aChkcm9wZG93bkNvbXAsIGZvcm1DaGFuZ2VFdmVudCwgeyBuYW1lIH0pO1xuICAgICAgICAgICAgRm9jdXNpbmcuZm9jdXMoZHJvcGRvd25Db21wKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgZmluZEl0ZW1CeVZhbHVlID0gKGl0ZW1zLCB2YWx1ZSkgPT4gZmluZE1hcChpdGVtcywgaXRlbSA9PiB7XG4gICAgICBpZiAoIWlzU2luZ2xlTGlzdEl0ZW0oaXRlbSkpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRJdGVtQnlWYWx1ZShpdGVtLml0ZW1zLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc29tZUlmKGl0ZW0udmFsdWUgPT09IHZhbHVlLCBpdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZW5kZXJMaXN0Qm94ID0gKHNwZWMsIGJhY2tzdGFnZSwgaW5pdGlhbERhdGEpID0+IHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyc0JhY2tzdGFnZSA9IGJhY2tzdGFnZS5zaGFyZWQucHJvdmlkZXJzO1xuICAgICAgY29uc3QgaW5pdGlhbEl0ZW0gPSBpbml0aWFsRGF0YS5iaW5kKHZhbHVlID0+IGZpbmRJdGVtQnlWYWx1ZShzcGVjLml0ZW1zLCB2YWx1ZSkpLm9yVGh1bmsoKCkgPT4gaGVhZChzcGVjLml0ZW1zKS5maWx0ZXIoaXNTaW5nbGVMaXN0SXRlbSkpO1xuICAgICAgY29uc3QgcExhYmVsID0gc3BlYy5sYWJlbC5tYXAobGFiZWwgPT4gcmVuZGVyTGFiZWwkMyhsYWJlbCwgcHJvdmlkZXJzQmFja3N0YWdlKSk7XG4gICAgICBjb25zdCBwRmllbGQgPSBGb3JtRmllbGQucGFydHMuZmllbGQoe1xuICAgICAgICBkb206IHt9LFxuICAgICAgICBmYWN0b3J5OiB7XG4gICAgICAgICAgc2tldGNoOiBza2V0Y2hTcGVjID0+IHJlbmRlckNvbW1vbkRyb3Bkb3duKHtcbiAgICAgICAgICAgIHVpZDogc2tldGNoU3BlYy51aWQsXG4gICAgICAgICAgICB0ZXh0OiBpbml0aWFsSXRlbS5tYXAoaXRlbSA9PiBpdGVtLnRleHQpLFxuICAgICAgICAgICAgaWNvbjogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICAgICAgdG9vbHRpcDogc3BlYy5sYWJlbCxcbiAgICAgICAgICAgIHJvbGU6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICAgICAgIGZldGNoOiAoY29tcCwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBmZXRjaEl0ZW1zKGNvbXAsIHNwZWMubmFtZSwgc3BlYy5pdGVtcywgUmVwcmVzZW50aW5nLmdldFZhbHVlKGNvbXApKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2soYnVpbGQoaXRlbXMsIEl0ZW1SZXNwb25zZSQxLkNMT1NFX09OX0VYRUNVVEUsIGJhY2tzdGFnZSwge1xuICAgICAgICAgICAgICAgIGlzSG9yaXpvbnRhbE1lbnU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNlYXJjaDogT3B0aW9uYWwubm9uZSgpXG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblNldHVwOiBjb25zdGFudCQxKG5vb3ApLFxuICAgICAgICAgICAgZ2V0QXBpOiBjb25zdGFudCQxKHt9KSxcbiAgICAgICAgICAgIGNvbHVtbnM6IDEsXG4gICAgICAgICAgICBwcmVzZXRzOiAnbm9ybWFsJyxcbiAgICAgICAgICAgIGNsYXNzZXM6IFtdLFxuICAgICAgICAgICAgZHJvcGRvd25CZWhhdmlvdXJzOiBbXG4gICAgICAgICAgICAgIFRhYnN0b3BwaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgICAgIHdpdGhDb21wKGluaXRpYWxJdGVtLm1hcChpdGVtID0+IGl0ZW0udmFsdWUpLCBjb21wID0+IGdldCRmKGNvbXAuZWxlbWVudCwgZGF0YUF0dHJpYnV0ZSksIChjb21wLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgZmluZEl0ZW1CeVZhbHVlKHNwZWMuaXRlbXMsIGRhdGEpLmVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXQkOShjb21wLmVsZW1lbnQsIGRhdGFBdHRyaWJ1dGUsIGl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgICAgICAgZW1pdFdpdGgoY29tcCwgdXBkYXRlTWVudVRleHQsIHsgdGV4dDogaXRlbS50ZXh0IH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sICd0b3gtbGlzdGJveCcsIGJhY2tzdGFnZS5zaGFyZWQpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgbGlzdEJveFdyYXAgPSB7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtbGlzdGJveGZpZWxkJ11cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW3BGaWVsZF1cbiAgICAgIH07XG4gICAgICByZXR1cm4gRm9ybUZpZWxkLnNrZXRjaCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtZm9ybV9fZ3JvdXAnXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBmbGF0dGVuKFtcbiAgICAgICAgICBwTGFiZWwudG9BcnJheSgpLFxuICAgICAgICAgIFtsaXN0Qm94V3JhcF1cbiAgICAgICAgXSksXG4gICAgICAgIGZpZWxkQmVoYXZpb3VyczogZGVyaXZlJDEoW0Rpc2FibGluZy5jb25maWcoe1xuICAgICAgICAgICAgZGlzYWJsZWQ6IGNvbnN0YW50JDEoIXNwZWMuZW5hYmxlZCksXG4gICAgICAgICAgICBvbkRpc2FibGVkOiBjb21wID0+IHtcbiAgICAgICAgICAgICAgRm9ybUZpZWxkLmdldEZpZWxkKGNvbXApLmVhY2goRGlzYWJsaW5nLmRpc2FibGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRW5hYmxlZDogY29tcCA9PiB7XG4gICAgICAgICAgICAgIEZvcm1GaWVsZC5nZXRGaWVsZChjb21wKS5lYWNoKERpc2FibGluZy5lbmFibGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXSlcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJQYW5lbCA9IChzcGVjLCBiYWNrc3RhZ2UpID0+ICh7XG4gICAgICBkb206IHtcbiAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgY2xhc3Nlczogc3BlYy5jbGFzc2VzXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czogbWFwJDIoc3BlYy5pdGVtcywgYmFja3N0YWdlLnNoYXJlZC5pbnRlcnByZXRlcilcbiAgICB9KTtcblxuICAgIGNvbnN0IGZhY3RvcnkkaCA9IChkZXRhaWwsIF9zcGVjKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25zID0gbWFwJDIoZGV0YWlsLm9wdGlvbnMsIG9wdGlvbiA9PiAoe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdvcHRpb24nLFxuICAgICAgICAgIHZhbHVlOiBvcHRpb24udmFsdWUsXG4gICAgICAgICAgaW5uZXJIdG1sOiBvcHRpb24udGV4dFxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgICBjb25zdCBpbml0aWFsVmFsdWVzID0gZGV0YWlsLmRhdGEubWFwKHYgPT4gd3JhcCQxKCdpbml0aWFsVmFsdWUnLCB2KSkuZ2V0T3Ioe30pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdzZWxlY3QnLFxuICAgICAgICAgIGNsYXNzZXM6IGRldGFpbC5zZWxlY3RDbGFzc2VzLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IGRldGFpbC5zZWxlY3RBdHRyaWJ1dGVzXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IG9wdGlvbnMsXG4gICAgICAgIGJlaGF2aW91cnM6IGF1Z21lbnQoZGV0YWlsLnNlbGVjdEJlaGF2aW91cnMsIFtcbiAgICAgICAgICBGb2N1c2luZy5jb25maWcoe30pLFxuICAgICAgICAgIFJlcHJlc2VudGluZy5jb25maWcoe1xuICAgICAgICAgICAgc3RvcmU6IHtcbiAgICAgICAgICAgICAgbW9kZTogJ21hbnVhbCcsXG4gICAgICAgICAgICAgIGdldFZhbHVlOiBzZWxlY3QgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXQkNihzZWxlY3QuZWxlbWVudCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHNldFZhbHVlOiAoc2VsZWN0LCBuZXdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0T3B0aW9uID0gaGVhZChkZXRhaWwub3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZm91bmQgPSBmaW5kJDUoZGV0YWlsLm9wdGlvbnMsIG9wdCA9PiBvcHQudmFsdWUgPT09IG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoZm91bmQuaXNTb21lKCkpIHtcbiAgICAgICAgICAgICAgICAgIHNldCQ1KHNlbGVjdC5lbGVtZW50LCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3QuZWxlbWVudC5kb20uc2VsZWN0ZWRJbmRleCA9PT0gLTEgJiYgbmV3VmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICBmaXJzdE9wdGlvbi5lYWNoKHZhbHVlID0+IHNldCQ1KHNlbGVjdC5lbGVtZW50LCB2YWx1ZS52YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgLi4uaW5pdGlhbFZhbHVlc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgSHRtbFNlbGVjdCA9IHNpbmdsZSh7XG4gICAgICBuYW1lOiAnSHRtbFNlbGVjdCcsXG4gICAgICBjb25maWdGaWVsZHM6IFtcbiAgICAgICAgcmVxdWlyZWQkMSgnb3B0aW9ucycpLFxuICAgICAgICBmaWVsZCgnc2VsZWN0QmVoYXZpb3VycycsIFtcbiAgICAgICAgICBGb2N1c2luZyxcbiAgICAgICAgICBSZXByZXNlbnRpbmdcbiAgICAgICAgXSksXG4gICAgICAgIGRlZmF1bHRlZCgnc2VsZWN0Q2xhc3NlcycsIFtdKSxcbiAgICAgICAgZGVmYXVsdGVkKCdzZWxlY3RBdHRyaWJ1dGVzJywge30pLFxuICAgICAgICBvcHRpb24kMygnZGF0YScpXG4gICAgICBdLFxuICAgICAgZmFjdG9yeTogZmFjdG9yeSRoXG4gICAgfSk7XG5cbiAgICBjb25zdCByZW5kZXJTZWxlY3RCb3ggPSAoc3BlYywgcHJvdmlkZXJzQmFja3N0YWdlLCBpbml0aWFsRGF0YSkgPT4ge1xuICAgICAgY29uc3QgdHJhbnNsYXRlZE9wdGlvbnMgPSBtYXAkMihzcGVjLml0ZW1zLCBpdGVtID0+ICh7XG4gICAgICAgIHRleHQ6IHByb3ZpZGVyc0JhY2tzdGFnZS50cmFuc2xhdGUoaXRlbS50ZXh0KSxcbiAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWVcbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IHBMYWJlbCA9IHNwZWMubGFiZWwubWFwKGxhYmVsID0+IHJlbmRlckxhYmVsJDMobGFiZWwsIHByb3ZpZGVyc0JhY2tzdGFnZSkpO1xuICAgICAgY29uc3QgcEZpZWxkID0gRm9ybUZpZWxkLnBhcnRzLmZpZWxkKHtcbiAgICAgICAgZG9tOiB7fSxcbiAgICAgICAgLi4uaW5pdGlhbERhdGEubWFwKGRhdGEgPT4gKHsgZGF0YSB9KSkuZ2V0T3Ioe30pLFxuICAgICAgICBzZWxlY3RBdHRyaWJ1dGVzOiB7IHNpemU6IHNwZWMuc2l6ZSB9LFxuICAgICAgICBvcHRpb25zOiB0cmFuc2xhdGVkT3B0aW9ucyxcbiAgICAgICAgZmFjdG9yeTogSHRtbFNlbGVjdCxcbiAgICAgICAgc2VsZWN0QmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIERpc2FibGluZy5jb25maWcoeyBkaXNhYmxlZDogKCkgPT4gIXNwZWMuZW5hYmxlZCB8fCBwcm92aWRlcnNCYWNrc3RhZ2UuaXNEaXNhYmxlZCgpIH0pLFxuICAgICAgICAgIFRhYnN0b3BwaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgY29uZmlnKCdzZWxlY3Rib3gtY2hhbmdlJywgW3J1biQxKGNoYW5nZSgpLCAoY29tcG9uZW50LCBfKSA9PiB7XG4gICAgICAgICAgICAgIGVtaXRXaXRoKGNvbXBvbmVudCwgZm9ybUNoYW5nZUV2ZW50LCB7IG5hbWU6IHNwZWMubmFtZSB9KTtcbiAgICAgICAgICAgIH0pXSlcbiAgICAgICAgXSlcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2hldnJvbiA9IHNwZWMuc2l6ZSA+IDEgPyBPcHRpb25hbC5ub25lKCkgOiBPcHRpb25hbC5zb21lKHJlbmRlciQzKCdjaGV2cm9uLWRvd24nLCB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFsndG94LXNlbGVjdGZpZWxkX19pY29uLWpzJ11cbiAgICAgIH0sIHByb3ZpZGVyc0JhY2tzdGFnZS5pY29ucykpO1xuICAgICAgY29uc3Qgc2VsZWN0V3JhcCA9IHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1zZWxlY3RmaWVsZCddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IGZsYXR0ZW4oW1xuICAgICAgICAgIFtwRmllbGRdLFxuICAgICAgICAgIGNoZXZyb24udG9BcnJheSgpXG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgICAgcmV0dXJuIEZvcm1GaWVsZC5za2V0Y2goe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LWZvcm1fX2dyb3VwJ11cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogZmxhdHRlbihbXG4gICAgICAgICAgcExhYmVsLnRvQXJyYXkoKSxcbiAgICAgICAgICBbc2VsZWN0V3JhcF1cbiAgICAgICAgXSksXG4gICAgICAgIGZpZWxkQmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIERpc2FibGluZy5jb25maWcoe1xuICAgICAgICAgICAgZGlzYWJsZWQ6ICgpID0+ICFzcGVjLmVuYWJsZWQgfHwgcHJvdmlkZXJzQmFja3N0YWdlLmlzRGlzYWJsZWQoKSxcbiAgICAgICAgICAgIG9uRGlzYWJsZWQ6IGNvbXAgPT4ge1xuICAgICAgICAgICAgICBGb3JtRmllbGQuZ2V0RmllbGQoY29tcCkuZWFjaChEaXNhYmxpbmcuZGlzYWJsZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25FbmFibGVkOiBjb21wID0+IHtcbiAgICAgICAgICAgICAgRm9ybUZpZWxkLmdldEZpZWxkKGNvbXApLmVhY2goRGlzYWJsaW5nLmVuYWJsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcmVjZWl2aW5nQ29uZmlnKClcbiAgICAgICAgXSlcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBzY2hlbWEkaCA9IGNvbnN0YW50JDEoW1xuICAgICAgZGVmYXVsdGVkKCdmaWVsZDFOYW1lJywgJ2ZpZWxkMScpLFxuICAgICAgZGVmYXVsdGVkKCdmaWVsZDJOYW1lJywgJ2ZpZWxkMicpLFxuICAgICAgb25TdHJpY3RIYW5kbGVyKCdvbkxvY2tlZENoYW5nZScpLFxuICAgICAgbWFya2VycyQxKFsnbG9ja0NsYXNzJ10pLFxuICAgICAgZGVmYXVsdGVkKCdsb2NrZWQnLCBmYWxzZSksXG4gICAgICBTa2V0Y2hCZWhhdmlvdXJzLmZpZWxkKCdjb3VwbGVkRmllbGRCZWhhdmlvdXJzJywgW1xuICAgICAgICBDb21wb3NpbmcsXG4gICAgICAgIFJlcHJlc2VudGluZ1xuICAgICAgXSlcbiAgICBdKTtcbiAgICBjb25zdCBnZXRGaWVsZCA9IChjb21wLCBkZXRhaWwsIHBhcnROYW1lKSA9PiBnZXRQYXJ0KGNvbXAsIGRldGFpbCwgcGFydE5hbWUpLmJpbmQoQ29tcG9zaW5nLmdldEN1cnJlbnQpO1xuICAgIGNvbnN0IGNvdXBsZWRQYXJ0ID0gKHNlbGZOYW1lLCBvdGhlck5hbWUpID0+IHJlcXVpcmVkKHtcbiAgICAgIGZhY3Rvcnk6IEZvcm1GaWVsZCxcbiAgICAgIG5hbWU6IHNlbGZOYW1lLFxuICAgICAgb3ZlcnJpZGVzOiBkZXRhaWwgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZpZWxkQmVoYXZpb3VyczogZGVyaXZlJDEoW2NvbmZpZygnY291cGxlZC1pbnB1dC1iZWhhdmlvdXInLCBbcnVuJDEoaW5wdXQoKSwgbWUgPT4ge1xuICAgICAgICAgICAgICAgIGdldEZpZWxkKG1lLCBkZXRhaWwsIG90aGVyTmFtZSkuZWFjaChvdGhlciA9PiB7XG4gICAgICAgICAgICAgICAgICBnZXRQYXJ0KG1lLCBkZXRhaWwsICdsb2NrJykuZWFjaChsb2NrID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFRvZ2dsaW5nLmlzT24obG9jaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICBkZXRhaWwub25Mb2NrZWRDaGFuZ2UobWUsIG90aGVyLCBsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pXSldKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHBhcnRzJGMgPSBjb25zdGFudCQxKFtcbiAgICAgIGNvdXBsZWRQYXJ0KCdmaWVsZDEnLCAnZmllbGQyJyksXG4gICAgICBjb3VwbGVkUGFydCgnZmllbGQyJywgJ2ZpZWxkMScpLFxuICAgICAgcmVxdWlyZWQoe1xuICAgICAgICBmYWN0b3J5OiBCdXR0b24sXG4gICAgICAgIHNjaGVtYTogW3JlcXVpcmVkJDEoJ2RvbScpXSxcbiAgICAgICAgbmFtZTogJ2xvY2snLFxuICAgICAgICBvdmVycmlkZXM6IGRldGFpbCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJ1dHRvbkJlaGF2aW91cnM6IGRlcml2ZSQxKFtUb2dnbGluZy5jb25maWcoe1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBkZXRhaWwubG9ja2VkLFxuICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzOiBkZXRhaWwubWFya2Vycy5sb2NrQ2xhc3MsXG4gICAgICAgICAgICAgICAgYXJpYTogeyBtb2RlOiAncHJlc3NlZCcgfVxuICAgICAgICAgICAgICB9KV0pXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICBdKTtcblxuICAgIGNvbnN0IGZhY3RvcnkkZyA9IChkZXRhaWwsIGNvbXBvbmVudHMsIF9zcGVjLCBfZXh0ZXJuYWxzKSA9PiAoe1xuICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgY29tcG9uZW50cyxcbiAgICAgIGJlaGF2aW91cnM6IFNrZXRjaEJlaGF2aW91cnMuYXVnbWVudChkZXRhaWwuY291cGxlZEZpZWxkQmVoYXZpb3VycywgW1xuICAgICAgICBDb21wb3NpbmcuY29uZmlnKHsgZmluZDogT3B0aW9uYWwuc29tZSB9KSxcbiAgICAgICAgUmVwcmVzZW50aW5nLmNvbmZpZyh7XG4gICAgICAgICAgc3RvcmU6IHtcbiAgICAgICAgICAgIG1vZGU6ICdtYW51YWwnLFxuICAgICAgICAgICAgZ2V0VmFsdWU6IGNvbXAgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGdldFBhcnRzT3JEaWUoY29tcCwgZGV0YWlsLCBbXG4gICAgICAgICAgICAgICAgJ2ZpZWxkMScsXG4gICAgICAgICAgICAgICAgJ2ZpZWxkMidcbiAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgW2RldGFpbC5maWVsZDFOYW1lXTogUmVwcmVzZW50aW5nLmdldFZhbHVlKHBhcnRzLmZpZWxkMSgpKSxcbiAgICAgICAgICAgICAgICBbZGV0YWlsLmZpZWxkMk5hbWVdOiBSZXByZXNlbnRpbmcuZ2V0VmFsdWUocGFydHMuZmllbGQyKCkpXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0VmFsdWU6IChjb21wLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGdldFBhcnRzT3JEaWUoY29tcCwgZGV0YWlsLCBbXG4gICAgICAgICAgICAgICAgJ2ZpZWxkMScsXG4gICAgICAgICAgICAgICAgJ2ZpZWxkMidcbiAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgIGlmIChoYXNOb25OdWxsYWJsZUtleSh2YWx1ZSwgZGV0YWlsLmZpZWxkMU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgUmVwcmVzZW50aW5nLnNldFZhbHVlKHBhcnRzLmZpZWxkMSgpLCB2YWx1ZVtkZXRhaWwuZmllbGQxTmFtZV0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChoYXNOb25OdWxsYWJsZUtleSh2YWx1ZSwgZGV0YWlsLmZpZWxkMk5hbWUpKSB7XG4gICAgICAgICAgICAgICAgUmVwcmVzZW50aW5nLnNldFZhbHVlKHBhcnRzLmZpZWxkMigpLCB2YWx1ZVtkZXRhaWwuZmllbGQyTmFtZV0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgXSksXG4gICAgICBhcGlzOiB7XG4gICAgICAgIGdldEZpZWxkMTogY29tcG9uZW50ID0+IGdldFBhcnQoY29tcG9uZW50LCBkZXRhaWwsICdmaWVsZDEnKSxcbiAgICAgICAgZ2V0RmllbGQyOiBjb21wb25lbnQgPT4gZ2V0UGFydChjb21wb25lbnQsIGRldGFpbCwgJ2ZpZWxkMicpLFxuICAgICAgICBnZXRMb2NrOiBjb21wb25lbnQgPT4gZ2V0UGFydChjb21wb25lbnQsIGRldGFpbCwgJ2xvY2snKVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IEZvcm1Db3VwbGVkSW5wdXRzID0gY29tcG9zaXRlKHtcbiAgICAgIG5hbWU6ICdGb3JtQ291cGxlZElucHV0cycsXG4gICAgICBjb25maWdGaWVsZHM6IHNjaGVtYSRoKCksXG4gICAgICBwYXJ0RmllbGRzOiBwYXJ0cyRjKCksXG4gICAgICBmYWN0b3J5OiBmYWN0b3J5JGcsXG4gICAgICBhcGlzOiB7XG4gICAgICAgIGdldEZpZWxkMTogKGFwaXMsIGNvbXBvbmVudCkgPT4gYXBpcy5nZXRGaWVsZDEoY29tcG9uZW50KSxcbiAgICAgICAgZ2V0RmllbGQyOiAoYXBpcywgY29tcG9uZW50KSA9PiBhcGlzLmdldEZpZWxkMihjb21wb25lbnQpLFxuICAgICAgICBnZXRMb2NrOiAoYXBpcywgY29tcG9uZW50KSA9PiBhcGlzLmdldExvY2soY29tcG9uZW50KVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZm9ybWF0U2l6ZSA9IHNpemUgPT4ge1xuICAgICAgY29uc3QgdW5pdERlYyA9IHtcbiAgICAgICAgJyc6IDAsXG4gICAgICAgICdweCc6IDAsXG4gICAgICAgICdwdCc6IDEsXG4gICAgICAgICdtbSc6IDEsXG4gICAgICAgICdwYyc6IDIsXG4gICAgICAgICdleCc6IDIsXG4gICAgICAgICdlbSc6IDIsXG4gICAgICAgICdjaCc6IDIsXG4gICAgICAgICdyZW0nOiAyLFxuICAgICAgICAnY20nOiAzLFxuICAgICAgICAnaW4nOiA0LFxuICAgICAgICAnJSc6IDRcbiAgICAgIH07XG4gICAgICBjb25zdCBtYXhEZWNpbWFsID0gdW5pdCA9PiB1bml0IGluIHVuaXREZWMgPyB1bml0RGVjW3VuaXRdIDogMTtcbiAgICAgIGxldCBudW1UZXh0ID0gc2l6ZS52YWx1ZS50b0ZpeGVkKG1heERlY2ltYWwoc2l6ZS51bml0KSk7XG4gICAgICBpZiAobnVtVGV4dC5pbmRleE9mKCcuJykgIT09IC0xKSB7XG4gICAgICAgIG51bVRleHQgPSBudW1UZXh0LnJlcGxhY2UoL1xcLj8wKiQvLCAnJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVtVGV4dCArIHNpemUudW5pdDtcbiAgICB9O1xuICAgIGNvbnN0IHBhcnNlU2l6ZSA9IHNpemVUZXh0ID0+IHtcbiAgICAgIGNvbnN0IG51bVBhdHRlcm4gPSAvXlxccyooXFxkKyg/OlxcLlxcZCspPylcXHMqKHxjbXxtbXxpbnxweHxwdHxwY3xlbXxleHxjaHxyZW18dnd8dmh8dm1pbnx2bWF4fCUpXFxzKiQvO1xuICAgICAgY29uc3QgbWF0Y2ggPSBudW1QYXR0ZXJuLmV4ZWMoc2l6ZVRleHQpO1xuICAgICAgaWYgKG1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdChtYXRjaFsxXSk7XG4gICAgICAgIGNvbnN0IHVuaXQgPSBtYXRjaFsyXTtcbiAgICAgICAgcmV0dXJuIFJlc3VsdC52YWx1ZSh7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgdW5pdFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3Ioc2l6ZVRleHQpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY29udmVydFVuaXQgPSAoc2l6ZSwgdW5pdCkgPT4ge1xuICAgICAgY29uc3QgaW5JbmNoID0ge1xuICAgICAgICAnJzogOTYsXG4gICAgICAgICdweCc6IDk2LFxuICAgICAgICAncHQnOiA3MixcbiAgICAgICAgJ2NtJzogMi41NCxcbiAgICAgICAgJ3BjJzogMTIsXG4gICAgICAgICdtbSc6IDI1LjQsXG4gICAgICAgICdpbic6IDFcbiAgICAgIH07XG4gICAgICBjb25zdCBzdXBwb3J0ZWQgPSB1ID0+IGhhcyQyKGluSW5jaCwgdSk7XG4gICAgICBpZiAoc2l6ZS51bml0ID09PSB1bml0KSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHNpemUudmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0ZWQoc2l6ZS51bml0KSAmJiBzdXBwb3J0ZWQodW5pdCkpIHtcbiAgICAgICAgaWYgKGluSW5jaFtzaXplLnVuaXRdID09PSBpbkluY2hbdW5pdF0pIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShzaXplLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShzaXplLnZhbHVlIC8gaW5JbmNoW3NpemUudW5pdF0gKiBpbkluY2hbdW5pdF0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgbm9TaXplQ29udmVyc2lvbiA9IF9pbnB1dCA9PiBPcHRpb25hbC5ub25lKCk7XG4gICAgY29uc3QgcmF0aW9TaXplQ29udmVyc2lvbiA9IChzY2FsZSwgdW5pdCkgPT4gc2l6ZSA9PiBjb252ZXJ0VW5pdChzaXplLCB1bml0KS5tYXAodmFsdWUgPT4gKHtcbiAgICAgIHZhbHVlOiB2YWx1ZSAqIHNjYWxlLFxuICAgICAgdW5pdFxuICAgIH0pKTtcbiAgICBjb25zdCBtYWtlUmF0aW9Db252ZXJ0ZXIgPSAoY3VycmVudEZpZWxkVGV4dCwgb3RoZXJGaWVsZFRleHQpID0+IHtcbiAgICAgIGNvbnN0IGNWYWx1ZSA9IHBhcnNlU2l6ZShjdXJyZW50RmllbGRUZXh0KS50b09wdGlvbmFsKCk7XG4gICAgICBjb25zdCBvVmFsdWUgPSBwYXJzZVNpemUob3RoZXJGaWVsZFRleHQpLnRvT3B0aW9uYWwoKTtcbiAgICAgIHJldHVybiBsaWZ0MihjVmFsdWUsIG9WYWx1ZSwgKGNTaXplLCBvU2l6ZSkgPT4gY29udmVydFVuaXQoY1NpemUsIG9TaXplLnVuaXQpLm1hcCh2YWwgPT4gb1NpemUudmFsdWUgLyB2YWwpLm1hcChyID0+IHJhdGlvU2l6ZUNvbnZlcnNpb24ociwgb1NpemUudW5pdCkpLmdldE9yKG5vU2l6ZUNvbnZlcnNpb24pKS5nZXRPcihub1NpemVDb252ZXJzaW9uKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVyU2l6ZUlucHV0ID0gKHNwZWMsIHByb3ZpZGVyc0JhY2tzdGFnZSkgPT4ge1xuICAgICAgbGV0IGNvbnZlcnRlciA9IG5vU2l6ZUNvbnZlcnNpb247XG4gICAgICBjb25zdCByYXRpb0V2ZW50ID0gZ2VuZXJhdGUkNigncmF0aW8tZXZlbnQnKTtcbiAgICAgIGNvbnN0IG1ha2VJY29uID0gaWNvbk5hbWUgPT4gcmVuZGVyJDMoaWNvbk5hbWUsIHtcbiAgICAgICAgdGFnOiAnc3BhbicsXG4gICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAndG94LWljb24nLFxuICAgICAgICAgICd0b3gtbG9jay1pY29uX18nICsgaWNvbk5hbWVcbiAgICAgICAgXVxuICAgICAgfSwgcHJvdmlkZXJzQmFja3N0YWdlLmljb25zKTtcbiAgICAgIGNvbnN0IHBMb2NrID0gRm9ybUNvdXBsZWRJbnB1dHMucGFydHMubG9jayh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2J1dHRvbicsXG4gICAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICAgJ3RveC1sb2NrJyxcbiAgICAgICAgICAgICd0b3gtYnV0dG9uJyxcbiAgICAgICAgICAgICd0b3gtYnV0dG9uLS1uYWtlZCcsXG4gICAgICAgICAgICAndG94LWJ1dHRvbi0taWNvbidcbiAgICAgICAgICBdLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgdGl0bGU6IHByb3ZpZGVyc0JhY2tzdGFnZS50cmFuc2xhdGUoc3BlYy5sYWJlbC5nZXRPcignQ29uc3RyYWluIHByb3BvcnRpb25zJykpIH1cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgIG1ha2VJY29uKCdsb2NrJyksXG4gICAgICAgICAgbWFrZUljb24oJ3VubG9jaycpXG4gICAgICAgIF0sXG4gICAgICAgIGJ1dHRvbkJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBEaXNhYmxpbmcuY29uZmlnKHsgZGlzYWJsZWQ6ICgpID0+ICFzcGVjLmVuYWJsZWQgfHwgcHJvdmlkZXJzQmFja3N0YWdlLmlzRGlzYWJsZWQoKSB9KSxcbiAgICAgICAgICByZWNlaXZpbmdDb25maWcoKSxcbiAgICAgICAgICBUYWJzdG9wcGluZy5jb25maWcoe30pXG4gICAgICAgIF0pXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IGNvbXBvbmVudHMgPT4gKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1mb3JtX19ncm91cCddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZ2V0RmllbGRQYXJ0ID0gaXNGaWVsZDEgPT4gRm9ybUZpZWxkLnBhcnRzLmZpZWxkKHtcbiAgICAgICAgZmFjdG9yeTogSW5wdXQsXG4gICAgICAgIGlucHV0Q2xhc3NlczogWyd0b3gtdGV4dGZpZWxkJ10sXG4gICAgICAgIGlucHV0QmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIERpc2FibGluZy5jb25maWcoeyBkaXNhYmxlZDogKCkgPT4gIXNwZWMuZW5hYmxlZCB8fCBwcm92aWRlcnNCYWNrc3RhZ2UuaXNEaXNhYmxlZCgpIH0pLFxuICAgICAgICAgIHJlY2VpdmluZ0NvbmZpZygpLFxuICAgICAgICAgIFRhYnN0b3BwaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgY29uZmlnKCdzaXplLWlucHV0LWV2ZW50cycsIFtcbiAgICAgICAgICAgIHJ1biQxKGZvY3VzaW4oKSwgKGNvbXBvbmVudCwgX3NpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGVtaXRXaXRoKGNvbXBvbmVudCwgcmF0aW9FdmVudCwgeyBpc0ZpZWxkMSB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcnVuJDEoY2hhbmdlKCksIChjb21wb25lbnQsIF9zaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICBlbWl0V2l0aChjb21wb25lbnQsIGZvcm1DaGFuZ2VFdmVudCwgeyBuYW1lOiBzcGVjLm5hbWUgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0pXG4gICAgICAgIF0pLFxuICAgICAgICBzZWxlY3RPbkZvY3VzOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBjb25zdCBnZXRMYWJlbCA9IGxhYmVsID0+ICh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2xhYmVsJyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1sYWJlbCddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFt0ZXh0JDIocHJvdmlkZXJzQmFja3N0YWdlLnRyYW5zbGF0ZShsYWJlbCkpXVxuICAgICAgfSk7XG4gICAgICBjb25zdCB3aWR0aEZpZWxkID0gRm9ybUNvdXBsZWRJbnB1dHMucGFydHMuZmllbGQxKGZvcm1Hcm91cChbXG4gICAgICAgIEZvcm1GaWVsZC5wYXJ0cy5sYWJlbChnZXRMYWJlbCgnV2lkdGgnKSksXG4gICAgICAgIGdldEZpZWxkUGFydCh0cnVlKVxuICAgICAgXSkpO1xuICAgICAgY29uc3QgaGVpZ2h0RmllbGQgPSBGb3JtQ291cGxlZElucHV0cy5wYXJ0cy5maWVsZDIoZm9ybUdyb3VwKFtcbiAgICAgICAgRm9ybUZpZWxkLnBhcnRzLmxhYmVsKGdldExhYmVsKCdIZWlnaHQnKSksXG4gICAgICAgIGdldEZpZWxkUGFydChmYWxzZSlcbiAgICAgIF0pKTtcbiAgICAgIHJldHVybiBGb3JtQ291cGxlZElucHV0cy5za2V0Y2goe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LWZvcm1fX2dyb3VwJ11cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW3tcbiAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1mb3JtX19jb250cm9scy1oLXN0YWNrJ11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgICAgIHdpZHRoRmllbGQsXG4gICAgICAgICAgICAgIGhlaWdodEZpZWxkLFxuICAgICAgICAgICAgICBmb3JtR3JvdXAoW1xuICAgICAgICAgICAgICAgIGdldExhYmVsKG5ic3ApLFxuICAgICAgICAgICAgICAgIHBMb2NrXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfV0sXG4gICAgICAgIGZpZWxkMU5hbWU6ICd3aWR0aCcsXG4gICAgICAgIGZpZWxkMk5hbWU6ICdoZWlnaHQnLFxuICAgICAgICBsb2NrZWQ6IHRydWUsXG4gICAgICAgIG1hcmtlcnM6IHsgbG9ja0NsYXNzOiAndG94LWxvY2tlZCcgfSxcbiAgICAgICAgb25Mb2NrZWRDaGFuZ2U6IChjdXJyZW50LCBvdGhlciwgX2xvY2spID0+IHtcbiAgICAgICAgICBwYXJzZVNpemUoUmVwcmVzZW50aW5nLmdldFZhbHVlKGN1cnJlbnQpKS5lYWNoKHNpemUgPT4ge1xuICAgICAgICAgICAgY29udmVydGVyKHNpemUpLmVhY2gobmV3U2l6ZSA9PiB7XG4gICAgICAgICAgICAgIFJlcHJlc2VudGluZy5zZXRWYWx1ZShvdGhlciwgZm9ybWF0U2l6ZShuZXdTaXplKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgY291cGxlZEZpZWxkQmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIERpc2FibGluZy5jb25maWcoe1xuICAgICAgICAgICAgZGlzYWJsZWQ6ICgpID0+ICFzcGVjLmVuYWJsZWQgfHwgcHJvdmlkZXJzQmFja3N0YWdlLmlzRGlzYWJsZWQoKSxcbiAgICAgICAgICAgIG9uRGlzYWJsZWQ6IGNvbXAgPT4ge1xuICAgICAgICAgICAgICBGb3JtQ291cGxlZElucHV0cy5nZXRGaWVsZDEoY29tcCkuYmluZChGb3JtRmllbGQuZ2V0RmllbGQpLmVhY2goRGlzYWJsaW5nLmRpc2FibGUpO1xuICAgICAgICAgICAgICBGb3JtQ291cGxlZElucHV0cy5nZXRGaWVsZDIoY29tcCkuYmluZChGb3JtRmllbGQuZ2V0RmllbGQpLmVhY2goRGlzYWJsaW5nLmRpc2FibGUpO1xuICAgICAgICAgICAgICBGb3JtQ291cGxlZElucHV0cy5nZXRMb2NrKGNvbXApLmVhY2goRGlzYWJsaW5nLmRpc2FibGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRW5hYmxlZDogY29tcCA9PiB7XG4gICAgICAgICAgICAgIEZvcm1Db3VwbGVkSW5wdXRzLmdldEZpZWxkMShjb21wKS5iaW5kKEZvcm1GaWVsZC5nZXRGaWVsZCkuZWFjaChEaXNhYmxpbmcuZW5hYmxlKTtcbiAgICAgICAgICAgICAgRm9ybUNvdXBsZWRJbnB1dHMuZ2V0RmllbGQyKGNvbXApLmJpbmQoRm9ybUZpZWxkLmdldEZpZWxkKS5lYWNoKERpc2FibGluZy5lbmFibGUpO1xuICAgICAgICAgICAgICBGb3JtQ291cGxlZElucHV0cy5nZXRMb2NrKGNvbXApLmVhY2goRGlzYWJsaW5nLmVuYWJsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcmVjZWl2aW5nQ29uZmlnKCksXG4gICAgICAgICAgY29uZmlnKCdzaXplLWlucHV0LWV2ZW50czInLCBbcnVuJDEocmF0aW9FdmVudCwgKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaXNGaWVsZDEgPSBzaW11bGF0ZWRFdmVudC5ldmVudC5pc0ZpZWxkMTtcbiAgICAgICAgICAgICAgY29uc3Qgb3B0Q3VycmVudCA9IGlzRmllbGQxID8gRm9ybUNvdXBsZWRJbnB1dHMuZ2V0RmllbGQxKGNvbXBvbmVudCkgOiBGb3JtQ291cGxlZElucHV0cy5nZXRGaWVsZDIoY29tcG9uZW50KTtcbiAgICAgICAgICAgICAgY29uc3Qgb3B0T3RoZXIgPSBpc0ZpZWxkMSA/IEZvcm1Db3VwbGVkSW5wdXRzLmdldEZpZWxkMihjb21wb25lbnQpIDogRm9ybUNvdXBsZWRJbnB1dHMuZ2V0RmllbGQxKGNvbXBvbmVudCk7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlMSA9IG9wdEN1cnJlbnQubWFwKFJlcHJlc2VudGluZy5nZXRWYWx1ZSkuZ2V0T3IoJycpO1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZTIgPSBvcHRPdGhlci5tYXAoUmVwcmVzZW50aW5nLmdldFZhbHVlKS5nZXRPcignJyk7XG4gICAgICAgICAgICAgIGNvbnZlcnRlciA9IG1ha2VSYXRpb0NvbnZlcnRlcih2YWx1ZTEsIHZhbHVlMik7XG4gICAgICAgICAgICB9KV0pXG4gICAgICAgIF0pXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVyU2xpZGVyID0gKHNwZWMsIHByb3ZpZGVyQmFja3N0YWdlLCBpbml0aWFsRGF0YSkgPT4ge1xuICAgICAgY29uc3QgbGFiZWxQYXJ0ID0gU2xpZGVyLnBhcnRzLmxhYmVsKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnbGFiZWwnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LWxhYmVsJ11cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW3RleHQkMihwcm92aWRlckJhY2tzdGFnZS50cmFuc2xhdGUoc3BlYy5sYWJlbCkpXVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzcGVjdHJ1bSA9IFNsaWRlci5wYXJ0cy5zcGVjdHJ1bSh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtc2xpZGVyX19yYWlsJ10sXG4gICAgICAgICAgYXR0cmlidXRlczogeyByb2xlOiAncHJlc2VudGF0aW9uJyB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgdGh1bWIgPSBTbGlkZXIucGFydHMudGh1bWIoe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXNsaWRlcl9faGFuZGxlJ10sXG4gICAgICAgICAgYXR0cmlidXRlczogeyByb2xlOiAncHJlc2VudGF0aW9uJyB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFNsaWRlci5za2V0Y2goe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXNsaWRlciddLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3ByZXNlbnRhdGlvbicgfVxuICAgICAgICB9LFxuICAgICAgICBtb2RlbDoge1xuICAgICAgICAgIG1vZGU6ICd4JyxcbiAgICAgICAgICBtaW5YOiBzcGVjLm1pbixcbiAgICAgICAgICBtYXhYOiBzcGVjLm1heCxcbiAgICAgICAgICBnZXRJbml0aWFsVmFsdWU6IGNvbnN0YW50JDEoaW5pdGlhbERhdGEuZ2V0T3JUaHVuaygoKSA9PiAoTWF0aC5hYnMoc3BlYy5tYXgpIC0gTWF0aC5hYnMoc3BlYy5taW4pKSAvIDIpKVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgbGFiZWxQYXJ0LFxuICAgICAgICAgIHNwZWN0cnVtLFxuICAgICAgICAgIHRodW1iXG4gICAgICAgIF0sXG4gICAgICAgIHNsaWRlckJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBDb21wb3NpbmdDb25maWdzLnNlbGYoKSxcbiAgICAgICAgICBGb2N1c2luZy5jb25maWcoe30pXG4gICAgICAgIF0pLFxuICAgICAgICBvbkNob29zZTogKGNvbXBvbmVudCwgdGh1bWIsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgZW1pdFdpdGgoY29tcG9uZW50LCBmb3JtQ2hhbmdlRXZlbnQsIHtcbiAgICAgICAgICAgIG5hbWU6IHNwZWMubmFtZSxcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJUYWJsZSA9IChzcGVjLCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IHJlbmRlclRoID0gdGV4dCA9PiAoe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICd0aCcsXG4gICAgICAgICAgaW5uZXJIdG1sOiBwcm92aWRlcnNCYWNrc3RhZ2UudHJhbnNsYXRlKHRleHQpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVuZGVySGVhZGVyID0gaGVhZGVyID0+ICh7XG4gICAgICAgIGRvbTogeyB0YWc6ICd0aGVhZCcgfSxcbiAgICAgICAgY29tcG9uZW50czogW3tcbiAgICAgICAgICAgIGRvbTogeyB0YWc6ICd0cicgfSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IG1hcCQyKGhlYWRlciwgcmVuZGVyVGgpXG4gICAgICAgICAgfV1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVuZGVyVGQgPSB0ZXh0ID0+ICh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ3RkJyxcbiAgICAgICAgICBpbm5lckh0bWw6IHByb3ZpZGVyc0JhY2tzdGFnZS50cmFuc2xhdGUodGV4dClcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCByZW5kZXJUciA9IHJvdyA9PiAoe1xuICAgICAgICBkb206IHsgdGFnOiAndHInIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IG1hcCQyKHJvdywgcmVuZGVyVGQpXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlbmRlclJvd3MgPSByb3dzID0+ICh7XG4gICAgICAgIGRvbTogeyB0YWc6ICd0Ym9keScgfSxcbiAgICAgICAgY29tcG9uZW50czogbWFwJDIocm93cywgcmVuZGVyVHIpXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ3RhYmxlJyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1kaWFsb2dfX3RhYmxlJ11cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgIHJlbmRlckhlYWRlcihzcGVjLmhlYWRlciksXG4gICAgICAgICAgcmVuZGVyUm93cyhzcGVjLmNlbGxzKVxuICAgICAgICBdLFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgVGFic3RvcHBpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICBGb2N1c2luZy5jb25maWcoe30pXG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJUZXh0RmllbGQgPSAoc3BlYywgcHJvdmlkZXJzQmFja3N0YWdlKSA9PiB7XG4gICAgICBjb25zdCBwTGFiZWwgPSBzcGVjLmxhYmVsLm1hcChsYWJlbCA9PiByZW5kZXJMYWJlbCQzKGxhYmVsLCBwcm92aWRlcnNCYWNrc3RhZ2UpKTtcbiAgICAgIGNvbnN0IGJhc2VJbnB1dEJlaGF2aW91cnMgPSBbXG4gICAgICAgIERpc2FibGluZy5jb25maWcoeyBkaXNhYmxlZDogKCkgPT4gc3BlYy5kaXNhYmxlZCB8fCBwcm92aWRlcnNCYWNrc3RhZ2UuaXNEaXNhYmxlZCgpIH0pLFxuICAgICAgICByZWNlaXZpbmdDb25maWcoKSxcbiAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgbW9kZTogJ2V4ZWN1dGlvbicsXG4gICAgICAgICAgdXNlRW50ZXI6IHNwZWMubXVsdGlsaW5lICE9PSB0cnVlLFxuICAgICAgICAgIHVzZUNvbnRyb2xFbnRlcjogc3BlYy5tdWx0aWxpbmUgPT09IHRydWUsXG4gICAgICAgICAgZXhlY3V0ZTogY29tcCA9PiB7XG4gICAgICAgICAgICBlbWl0KGNvbXAsIGZvcm1TdWJtaXRFdmVudCk7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBjb25maWcoJ3RleHRmaWVsZC1jaGFuZ2UnLCBbXG4gICAgICAgICAgcnVuJDEoaW5wdXQoKSwgKGNvbXBvbmVudCwgXykgPT4ge1xuICAgICAgICAgICAgZW1pdFdpdGgoY29tcG9uZW50LCBmb3JtQ2hhbmdlRXZlbnQsIHsgbmFtZTogc3BlYy5uYW1lIH0pO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJ1biQxKHBvc3RQYXN0ZSgpLCAoY29tcG9uZW50LCBfKSA9PiB7XG4gICAgICAgICAgICBlbWl0V2l0aChjb21wb25lbnQsIGZvcm1DaGFuZ2VFdmVudCwgeyBuYW1lOiBzcGVjLm5hbWUgfSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgXSksXG4gICAgICAgIFRhYnN0b3BwaW5nLmNvbmZpZyh7fSlcbiAgICAgIF07XG4gICAgICBjb25zdCB2YWxpZGF0aW5nQmVoYXZpb3VycyA9IHNwZWMudmFsaWRhdGlvbi5tYXAodmwgPT4gSW52YWxpZGF0aW5nLmNvbmZpZyh7XG4gICAgICAgIGdldFJvb3Q6IGlucHV0ID0+IHtcbiAgICAgICAgICByZXR1cm4gcGFyZW50RWxlbWVudChpbnB1dC5lbGVtZW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgaW52YWxpZENsYXNzOiAndG94LWludmFsaWQnLFxuICAgICAgICB2YWxpZGF0b3I6IHtcbiAgICAgICAgICB2YWxpZGF0ZTogaW5wdXQgPT4ge1xuICAgICAgICAgICAgY29uc3QgdiA9IFJlcHJlc2VudGluZy5nZXRWYWx1ZShpbnB1dCk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB2bC52YWxpZGF0b3Iodik7XG4gICAgICAgICAgICByZXR1cm4gRnV0dXJlLnB1cmUocmVzdWx0ID09PSB0cnVlID8gUmVzdWx0LnZhbHVlKHYpIDogUmVzdWx0LmVycm9yKHJlc3VsdCkpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdmFsaWRhdGVPbkxvYWQ6IHZsLnZhbGlkYXRlT25Mb2FkXG4gICAgICAgIH1cbiAgICAgIH0pKS50b0FycmF5KCk7XG4gICAgICBjb25zdCBwbGFjZWhvbGRlciA9IHNwZWMucGxhY2Vob2xkZXIuZm9sZChjb25zdGFudCQxKHt9KSwgcCA9PiAoeyBwbGFjZWhvbGRlcjogcHJvdmlkZXJzQmFja3N0YWdlLnRyYW5zbGF0ZShwKSB9KSk7XG4gICAgICBjb25zdCBpbnB1dE1vZGUgPSBzcGVjLmlucHV0TW9kZS5mb2xkKGNvbnN0YW50JDEoe30pLCBtb2RlID0+ICh7IGlucHV0bW9kZTogbW9kZSB9KSk7XG4gICAgICBjb25zdCBpbnB1dEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIC4uLnBsYWNlaG9sZGVyLFxuICAgICAgICAuLi5pbnB1dE1vZGVcbiAgICAgIH07XG4gICAgICBjb25zdCBwRmllbGQgPSBGb3JtRmllbGQucGFydHMuZmllbGQoe1xuICAgICAgICB0YWc6IHNwZWMubXVsdGlsaW5lID09PSB0cnVlID8gJ3RleHRhcmVhJyA6ICdpbnB1dCcsXG4gICAgICAgIC4uLnNwZWMuZGF0YS5tYXAoZGF0YSA9PiAoeyBkYXRhIH0pKS5nZXRPcih7fSksXG4gICAgICAgIGlucHV0QXR0cmlidXRlcyxcbiAgICAgICAgaW5wdXRDbGFzc2VzOiBbc3BlYy5jbGFzc25hbWVdLFxuICAgICAgICBpbnB1dEJlaGF2aW91cnM6IGRlcml2ZSQxKGZsYXR0ZW4oW1xuICAgICAgICAgIGJhc2VJbnB1dEJlaGF2aW91cnMsXG4gICAgICAgICAgdmFsaWRhdGluZ0JlaGF2aW91cnNcbiAgICAgICAgXSkpLFxuICAgICAgICBzZWxlY3RPbkZvY3VzOiBmYWxzZSxcbiAgICAgICAgZmFjdG9yeTogSW5wdXRcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcFRleHRGaWVsZCA9IHNwZWMubXVsdGlsaW5lID8ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXRleHRhcmVhLXdyYXAnXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbcEZpZWxkXVxuICAgICAgfSA6IHBGaWVsZDtcbiAgICAgIGNvbnN0IGV4dHJhQ2xhc3NlcyA9IHNwZWMuZmxleCA/IFsndG94LWZvcm1fX2dyb3VwLS1zdHJldGNoZWQnXSA6IFtdO1xuICAgICAgY29uc3QgZXh0cmFDbGFzc2VzMiA9IGV4dHJhQ2xhc3Nlcy5jb25jYXQoc3BlYy5tYXhpbWl6ZWQgPyBbJ3RveC1mb3JtLWdyb3VwLS1tYXhpbWl6ZSddIDogW10pO1xuICAgICAgY29uc3QgZXh0cmFCZWhhdmlvdXJzID0gW1xuICAgICAgICBEaXNhYmxpbmcuY29uZmlnKHtcbiAgICAgICAgICBkaXNhYmxlZDogKCkgPT4gc3BlYy5kaXNhYmxlZCB8fCBwcm92aWRlcnNCYWNrc3RhZ2UuaXNEaXNhYmxlZCgpLFxuICAgICAgICAgIG9uRGlzYWJsZWQ6IGNvbXAgPT4ge1xuICAgICAgICAgICAgRm9ybUZpZWxkLmdldEZpZWxkKGNvbXApLmVhY2goRGlzYWJsaW5nLmRpc2FibGUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25FbmFibGVkOiBjb21wID0+IHtcbiAgICAgICAgICAgIEZvcm1GaWVsZC5nZXRGaWVsZChjb21wKS5lYWNoKERpc2FibGluZy5lbmFibGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHJlY2VpdmluZ0NvbmZpZygpXG4gICAgICBdO1xuICAgICAgcmV0dXJuIHJlbmRlckZvcm1GaWVsZFdpdGgocExhYmVsLCBwVGV4dEZpZWxkLCBleHRyYUNsYXNzZXMyLCBleHRyYUJlaGF2aW91cnMpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVySW5wdXQgPSAoc3BlYywgcHJvdmlkZXJzQmFja3N0YWdlLCBpbml0aWFsRGF0YSkgPT4gcmVuZGVyVGV4dEZpZWxkKHtcbiAgICAgIG5hbWU6IHNwZWMubmFtZSxcbiAgICAgIG11bHRpbGluZTogZmFsc2UsXG4gICAgICBsYWJlbDogc3BlYy5sYWJlbCxcbiAgICAgIGlucHV0TW9kZTogc3BlYy5pbnB1dE1vZGUsXG4gICAgICBwbGFjZWhvbGRlcjogc3BlYy5wbGFjZWhvbGRlcixcbiAgICAgIGZsZXg6IGZhbHNlLFxuICAgICAgZGlzYWJsZWQ6ICFzcGVjLmVuYWJsZWQsXG4gICAgICBjbGFzc25hbWU6ICd0b3gtdGV4dGZpZWxkJyxcbiAgICAgIHZhbGlkYXRpb246IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgIG1heGltaXplZDogc3BlYy5tYXhpbWl6ZWQsXG4gICAgICBkYXRhOiBpbml0aWFsRGF0YVxuICAgIH0sIHByb3ZpZGVyc0JhY2tzdGFnZSk7XG4gICAgY29uc3QgcmVuZGVyVGV4dGFyZWEgPSAoc3BlYywgcHJvdmlkZXJzQmFja3N0YWdlLCBpbml0aWFsRGF0YSkgPT4gcmVuZGVyVGV4dEZpZWxkKHtcbiAgICAgIG5hbWU6IHNwZWMubmFtZSxcbiAgICAgIG11bHRpbGluZTogdHJ1ZSxcbiAgICAgIGxhYmVsOiBzcGVjLmxhYmVsLFxuICAgICAgaW5wdXRNb2RlOiBPcHRpb25hbC5ub25lKCksXG4gICAgICBwbGFjZWhvbGRlcjogc3BlYy5wbGFjZWhvbGRlcixcbiAgICAgIGZsZXg6IHRydWUsXG4gICAgICBkaXNhYmxlZDogIXNwZWMuZW5hYmxlZCxcbiAgICAgIGNsYXNzbmFtZTogJ3RveC10ZXh0YXJlYScsXG4gICAgICB2YWxpZGF0aW9uOiBPcHRpb25hbC5ub25lKCksXG4gICAgICBtYXhpbWl6ZWQ6IHNwZWMubWF4aW1pemVkLFxuICAgICAgZGF0YTogaW5pdGlhbERhdGFcbiAgICB9LCBwcm92aWRlcnNCYWNrc3RhZ2UpO1xuXG4gICAgY29uc3QgZ2V0QW5pbWF0aW9uUm9vdCA9IChjb21wb25lbnQsIHNsaWRlQ29uZmlnKSA9PiBzbGlkZUNvbmZpZy5nZXRBbmltYXRpb25Sb290LmZvbGQoKCkgPT4gY29tcG9uZW50LmVsZW1lbnQsIGdldCA9PiBnZXQoY29tcG9uZW50KSk7XG5cbiAgICBjb25zdCBnZXREaW1lbnNpb25Qcm9wZXJ0eSA9IHNsaWRlQ29uZmlnID0+IHNsaWRlQ29uZmlnLmRpbWVuc2lvbi5wcm9wZXJ0eTtcbiAgICBjb25zdCBnZXREaW1lbnNpb24gPSAoc2xpZGVDb25maWcsIGVsZW0pID0+IHNsaWRlQ29uZmlnLmRpbWVuc2lvbi5nZXREaW1lbnNpb24oZWxlbSk7XG4gICAgY29uc3QgZGlzYWJsZVRyYW5zaXRpb25zID0gKGNvbXBvbmVudCwgc2xpZGVDb25maWcpID0+IHtcbiAgICAgIGNvbnN0IHJvb3QgPSBnZXRBbmltYXRpb25Sb290KGNvbXBvbmVudCwgc2xpZGVDb25maWcpO1xuICAgICAgcmVtb3ZlJDEocm9vdCwgW1xuICAgICAgICBzbGlkZUNvbmZpZy5zaHJpbmtpbmdDbGFzcyxcbiAgICAgICAgc2xpZGVDb25maWcuZ3Jvd2luZ0NsYXNzXG4gICAgICBdKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldFNocnVuayA9IChjb21wb25lbnQsIHNsaWRlQ29uZmlnKSA9PiB7XG4gICAgICByZW1vdmUkMihjb21wb25lbnQuZWxlbWVudCwgc2xpZGVDb25maWcub3BlbkNsYXNzKTtcbiAgICAgIGFkZCQyKGNvbXBvbmVudC5lbGVtZW50LCBzbGlkZUNvbmZpZy5jbG9zZWRDbGFzcyk7XG4gICAgICBzZXQkOChjb21wb25lbnQuZWxlbWVudCwgZ2V0RGltZW5zaW9uUHJvcGVydHkoc2xpZGVDb25maWcpLCAnMHB4Jyk7XG4gICAgICByZWZsb3coY29tcG9uZW50LmVsZW1lbnQpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0R3Jvd24gPSAoY29tcG9uZW50LCBzbGlkZUNvbmZpZykgPT4ge1xuICAgICAgcmVtb3ZlJDIoY29tcG9uZW50LmVsZW1lbnQsIHNsaWRlQ29uZmlnLmNsb3NlZENsYXNzKTtcbiAgICAgIGFkZCQyKGNvbXBvbmVudC5lbGVtZW50LCBzbGlkZUNvbmZpZy5vcGVuQ2xhc3MpO1xuICAgICAgcmVtb3ZlJDYoY29tcG9uZW50LmVsZW1lbnQsIGdldERpbWVuc2lvblByb3BlcnR5KHNsaWRlQ29uZmlnKSk7XG4gICAgfTtcbiAgICBjb25zdCBkb0ltbWVkaWF0ZVNocmluayA9IChjb21wb25lbnQsIHNsaWRlQ29uZmlnLCBzbGlkZVN0YXRlLCBfY2FsY3VsYXRlZFNpemUpID0+IHtcbiAgICAgIHNsaWRlU3RhdGUuc2V0Q29sbGFwc2VkKCk7XG4gICAgICBzZXQkOChjb21wb25lbnQuZWxlbWVudCwgZ2V0RGltZW5zaW9uUHJvcGVydHkoc2xpZGVDb25maWcpLCBnZXREaW1lbnNpb24oc2xpZGVDb25maWcsIGNvbXBvbmVudC5lbGVtZW50KSk7XG4gICAgICBkaXNhYmxlVHJhbnNpdGlvbnMoY29tcG9uZW50LCBzbGlkZUNvbmZpZyk7XG4gICAgICBzZXRTaHJ1bmsoY29tcG9uZW50LCBzbGlkZUNvbmZpZyk7XG4gICAgICBzbGlkZUNvbmZpZy5vblN0YXJ0U2hyaW5rKGNvbXBvbmVudCk7XG4gICAgICBzbGlkZUNvbmZpZy5vblNocnVuayhjb21wb25lbnQpO1xuICAgIH07XG4gICAgY29uc3QgZG9TdGFydFNocmluayA9IChjb21wb25lbnQsIHNsaWRlQ29uZmlnLCBzbGlkZVN0YXRlLCBjYWxjdWxhdGVkU2l6ZSkgPT4ge1xuICAgICAgY29uc3Qgc2l6ZSA9IGNhbGN1bGF0ZWRTaXplLmdldE9yVGh1bmsoKCkgPT4gZ2V0RGltZW5zaW9uKHNsaWRlQ29uZmlnLCBjb21wb25lbnQuZWxlbWVudCkpO1xuICAgICAgc2xpZGVTdGF0ZS5zZXRDb2xsYXBzZWQoKTtcbiAgICAgIHNldCQ4KGNvbXBvbmVudC5lbGVtZW50LCBnZXREaW1lbnNpb25Qcm9wZXJ0eShzbGlkZUNvbmZpZyksIHNpemUpO1xuICAgICAgcmVmbG93KGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgIGNvbnN0IHJvb3QgPSBnZXRBbmltYXRpb25Sb290KGNvbXBvbmVudCwgc2xpZGVDb25maWcpO1xuICAgICAgcmVtb3ZlJDIocm9vdCwgc2xpZGVDb25maWcuZ3Jvd2luZ0NsYXNzKTtcbiAgICAgIGFkZCQyKHJvb3QsIHNsaWRlQ29uZmlnLnNocmlua2luZ0NsYXNzKTtcbiAgICAgIHNldFNocnVuayhjb21wb25lbnQsIHNsaWRlQ29uZmlnKTtcbiAgICAgIHNsaWRlQ29uZmlnLm9uU3RhcnRTaHJpbmsoY29tcG9uZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IGRvU3RhcnRTbWFydFNocmluayA9IChjb21wb25lbnQsIHNsaWRlQ29uZmlnLCBzbGlkZVN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBzaXplID0gZ2V0RGltZW5zaW9uKHNsaWRlQ29uZmlnLCBjb21wb25lbnQuZWxlbWVudCk7XG4gICAgICBjb25zdCBzaHJpbmtlciA9IHNpemUgPT09ICcwcHgnID8gZG9JbW1lZGlhdGVTaHJpbmsgOiBkb1N0YXJ0U2hyaW5rO1xuICAgICAgc2hyaW5rZXIoY29tcG9uZW50LCBzbGlkZUNvbmZpZywgc2xpZGVTdGF0ZSwgT3B0aW9uYWwuc29tZShzaXplKSk7XG4gICAgfTtcbiAgICBjb25zdCBkb1N0YXJ0R3JvdyA9IChjb21wb25lbnQsIHNsaWRlQ29uZmlnLCBzbGlkZVN0YXRlKSA9PiB7XG4gICAgICBjb25zdCByb290ID0gZ2V0QW5pbWF0aW9uUm9vdChjb21wb25lbnQsIHNsaWRlQ29uZmlnKTtcbiAgICAgIGNvbnN0IHdhc1Nocmlua2luZyA9IGhhcyhyb290LCBzbGlkZUNvbmZpZy5zaHJpbmtpbmdDbGFzcyk7XG4gICAgICBjb25zdCBiZWZvcmVTaXplID0gZ2V0RGltZW5zaW9uKHNsaWRlQ29uZmlnLCBjb21wb25lbnQuZWxlbWVudCk7XG4gICAgICBzZXRHcm93bihjb21wb25lbnQsIHNsaWRlQ29uZmlnKTtcbiAgICAgIGNvbnN0IGZ1bGxTaXplID0gZ2V0RGltZW5zaW9uKHNsaWRlQ29uZmlnLCBjb21wb25lbnQuZWxlbWVudCk7XG4gICAgICBjb25zdCBzdGFydFBhcnRpYWxHcm93ID0gKCkgPT4ge1xuICAgICAgICBzZXQkOChjb21wb25lbnQuZWxlbWVudCwgZ2V0RGltZW5zaW9uUHJvcGVydHkoc2xpZGVDb25maWcpLCBiZWZvcmVTaXplKTtcbiAgICAgICAgcmVmbG93KGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzdGFydENvbXBsZXRlR3JvdyA9ICgpID0+IHtcbiAgICAgICAgc2V0U2hydW5rKGNvbXBvbmVudCwgc2xpZGVDb25maWcpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldFN0YXJ0U2l6ZSA9IHdhc1Nocmlua2luZyA/IHN0YXJ0UGFydGlhbEdyb3cgOiBzdGFydENvbXBsZXRlR3JvdztcbiAgICAgIHNldFN0YXJ0U2l6ZSgpO1xuICAgICAgcmVtb3ZlJDIocm9vdCwgc2xpZGVDb25maWcuc2hyaW5raW5nQ2xhc3MpO1xuICAgICAgYWRkJDIocm9vdCwgc2xpZGVDb25maWcuZ3Jvd2luZ0NsYXNzKTtcbiAgICAgIHNldEdyb3duKGNvbXBvbmVudCwgc2xpZGVDb25maWcpO1xuICAgICAgc2V0JDgoY29tcG9uZW50LmVsZW1lbnQsIGdldERpbWVuc2lvblByb3BlcnR5KHNsaWRlQ29uZmlnKSwgZnVsbFNpemUpO1xuICAgICAgc2xpZGVTdGF0ZS5zZXRFeHBhbmRlZCgpO1xuICAgICAgc2xpZGVDb25maWcub25TdGFydEdyb3coY29tcG9uZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZnJlc2gkNCA9IChjb21wb25lbnQsIHNsaWRlQ29uZmlnLCBzbGlkZVN0YXRlKSA9PiB7XG4gICAgICBpZiAoc2xpZGVTdGF0ZS5pc0V4cGFuZGVkKCkpIHtcbiAgICAgICAgcmVtb3ZlJDYoY29tcG9uZW50LmVsZW1lbnQsIGdldERpbWVuc2lvblByb3BlcnR5KHNsaWRlQ29uZmlnKSk7XG4gICAgICAgIGNvbnN0IGZ1bGxTaXplID0gZ2V0RGltZW5zaW9uKHNsaWRlQ29uZmlnLCBjb21wb25lbnQuZWxlbWVudCk7XG4gICAgICAgIHNldCQ4KGNvbXBvbmVudC5lbGVtZW50LCBnZXREaW1lbnNpb25Qcm9wZXJ0eShzbGlkZUNvbmZpZyksIGZ1bGxTaXplKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdyb3cgPSAoY29tcG9uZW50LCBzbGlkZUNvbmZpZywgc2xpZGVTdGF0ZSkgPT4ge1xuICAgICAgaWYgKCFzbGlkZVN0YXRlLmlzRXhwYW5kZWQoKSkge1xuICAgICAgICBkb1N0YXJ0R3Jvdyhjb21wb25lbnQsIHNsaWRlQ29uZmlnLCBzbGlkZVN0YXRlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNocmluayA9IChjb21wb25lbnQsIHNsaWRlQ29uZmlnLCBzbGlkZVN0YXRlKSA9PiB7XG4gICAgICBpZiAoc2xpZGVTdGF0ZS5pc0V4cGFuZGVkKCkpIHtcbiAgICAgICAgZG9TdGFydFNtYXJ0U2hyaW5rKGNvbXBvbmVudCwgc2xpZGVDb25maWcsIHNsaWRlU3RhdGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaW1tZWRpYXRlU2hyaW5rID0gKGNvbXBvbmVudCwgc2xpZGVDb25maWcsIHNsaWRlU3RhdGUpID0+IHtcbiAgICAgIGlmIChzbGlkZVN0YXRlLmlzRXhwYW5kZWQoKSkge1xuICAgICAgICBkb0ltbWVkaWF0ZVNocmluayhjb21wb25lbnQsIHNsaWRlQ29uZmlnLCBzbGlkZVN0YXRlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGhhc0dyb3duID0gKGNvbXBvbmVudCwgc2xpZGVDb25maWcsIHNsaWRlU3RhdGUpID0+IHNsaWRlU3RhdGUuaXNFeHBhbmRlZCgpO1xuICAgIGNvbnN0IGhhc1NocnVuayA9IChjb21wb25lbnQsIHNsaWRlQ29uZmlnLCBzbGlkZVN0YXRlKSA9PiBzbGlkZVN0YXRlLmlzQ29sbGFwc2VkKCk7XG4gICAgY29uc3QgaXNHcm93aW5nID0gKGNvbXBvbmVudCwgc2xpZGVDb25maWcsIF9zbGlkZVN0YXRlKSA9PiB7XG4gICAgICBjb25zdCByb290ID0gZ2V0QW5pbWF0aW9uUm9vdChjb21wb25lbnQsIHNsaWRlQ29uZmlnKTtcbiAgICAgIHJldHVybiBoYXMocm9vdCwgc2xpZGVDb25maWcuZ3Jvd2luZ0NsYXNzKSA9PT0gdHJ1ZTtcbiAgICB9O1xuICAgIGNvbnN0IGlzU2hyaW5raW5nID0gKGNvbXBvbmVudCwgc2xpZGVDb25maWcsIF9zbGlkZVN0YXRlKSA9PiB7XG4gICAgICBjb25zdCByb290ID0gZ2V0QW5pbWF0aW9uUm9vdChjb21wb25lbnQsIHNsaWRlQ29uZmlnKTtcbiAgICAgIHJldHVybiBoYXMocm9vdCwgc2xpZGVDb25maWcuc2hyaW5raW5nQ2xhc3MpID09PSB0cnVlO1xuICAgIH07XG4gICAgY29uc3QgaXNUcmFuc2l0aW9uaW5nID0gKGNvbXBvbmVudCwgc2xpZGVDb25maWcsIHNsaWRlU3RhdGUpID0+IGlzR3Jvd2luZyhjb21wb25lbnQsIHNsaWRlQ29uZmlnKSB8fCBpc1Nocmlua2luZyhjb21wb25lbnQsIHNsaWRlQ29uZmlnKTtcbiAgICBjb25zdCB0b2dnbGVHcm93ID0gKGNvbXBvbmVudCwgc2xpZGVDb25maWcsIHNsaWRlU3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGYgPSBzbGlkZVN0YXRlLmlzRXhwYW5kZWQoKSA/IGRvU3RhcnRTbWFydFNocmluayA6IGRvU3RhcnRHcm93O1xuICAgICAgZihjb21wb25lbnQsIHNsaWRlQ29uZmlnLCBzbGlkZVN0YXRlKTtcbiAgICB9O1xuICAgIGNvbnN0IGltbWVkaWF0ZUdyb3cgPSAoY29tcG9uZW50LCBzbGlkZUNvbmZpZywgc2xpZGVTdGF0ZSkgPT4ge1xuICAgICAgaWYgKCFzbGlkZVN0YXRlLmlzRXhwYW5kZWQoKSkge1xuICAgICAgICBzZXRHcm93bihjb21wb25lbnQsIHNsaWRlQ29uZmlnKTtcbiAgICAgICAgc2V0JDgoY29tcG9uZW50LmVsZW1lbnQsIGdldERpbWVuc2lvblByb3BlcnR5KHNsaWRlQ29uZmlnKSwgZ2V0RGltZW5zaW9uKHNsaWRlQ29uZmlnLCBjb21wb25lbnQuZWxlbWVudCkpO1xuICAgICAgICBkaXNhYmxlVHJhbnNpdGlvbnMoY29tcG9uZW50LCBzbGlkZUNvbmZpZyk7XG4gICAgICAgIHNsaWRlU3RhdGUuc2V0RXhwYW5kZWQoKTtcbiAgICAgICAgc2xpZGVDb25maWcub25TdGFydEdyb3coY29tcG9uZW50KTtcbiAgICAgICAgc2xpZGVDb25maWcub25Hcm93bihjb21wb25lbnQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgU2xpZGluZ0FwaXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgcmVmcmVzaDogcmVmcmVzaCQ0LFxuICAgICAgICBncm93OiBncm93LFxuICAgICAgICBzaHJpbms6IHNocmluayxcbiAgICAgICAgaW1tZWRpYXRlU2hyaW5rOiBpbW1lZGlhdGVTaHJpbmssXG4gICAgICAgIGhhc0dyb3duOiBoYXNHcm93bixcbiAgICAgICAgaGFzU2hydW5rOiBoYXNTaHJ1bmssXG4gICAgICAgIGlzR3Jvd2luZzogaXNHcm93aW5nLFxuICAgICAgICBpc1Nocmlua2luZzogaXNTaHJpbmtpbmcsXG4gICAgICAgIGlzVHJhbnNpdGlvbmluZzogaXNUcmFuc2l0aW9uaW5nLFxuICAgICAgICB0b2dnbGVHcm93OiB0b2dnbGVHcm93LFxuICAgICAgICBkaXNhYmxlVHJhbnNpdGlvbnM6IGRpc2FibGVUcmFuc2l0aW9ucyxcbiAgICAgICAgaW1tZWRpYXRlR3JvdzogaW1tZWRpYXRlR3Jvd1xuICAgIH0pO1xuXG4gICAgY29uc3QgZXhoaWJpdCA9IChiYXNlLCBzbGlkZUNvbmZpZywgX3NsaWRlU3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGV4cGFuZGVkID0gc2xpZGVDb25maWcuZXhwYW5kZWQ7XG4gICAgICByZXR1cm4gZXhwYW5kZWQgPyBudSQ3KHtcbiAgICAgICAgY2xhc3NlczogW3NsaWRlQ29uZmlnLm9wZW5DbGFzc10sXG4gICAgICAgIHN0eWxlczoge31cbiAgICAgIH0pIDogbnUkNyh7XG4gICAgICAgIGNsYXNzZXM6IFtzbGlkZUNvbmZpZy5jbG9zZWRDbGFzc10sXG4gICAgICAgIHN0eWxlczogd3JhcCQxKHNsaWRlQ29uZmlnLmRpbWVuc2lvbi5wcm9wZXJ0eSwgJzBweCcpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGV2ZW50cyQ2ID0gKHNsaWRlQ29uZmlnLCBzbGlkZVN0YXRlKSA9PiBkZXJpdmUkMihbcnVuT25Tb3VyY2UodHJhbnNpdGlvbmVuZCgpLCAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCByYXcgPSBzaW11bGF0ZWRFdmVudC5ldmVudC5yYXc7XG4gICAgICAgIGlmIChyYXcucHJvcGVydHlOYW1lID09PSBzbGlkZUNvbmZpZy5kaW1lbnNpb24ucHJvcGVydHkpIHtcbiAgICAgICAgICBkaXNhYmxlVHJhbnNpdGlvbnMoY29tcG9uZW50LCBzbGlkZUNvbmZpZyk7XG4gICAgICAgICAgaWYgKHNsaWRlU3RhdGUuaXNFeHBhbmRlZCgpKSB7XG4gICAgICAgICAgICByZW1vdmUkNihjb21wb25lbnQuZWxlbWVudCwgc2xpZGVDb25maWcuZGltZW5zaW9uLnByb3BlcnR5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgbm90aWZ5ID0gc2xpZGVTdGF0ZS5pc0V4cGFuZGVkKCkgPyBzbGlkZUNvbmZpZy5vbkdyb3duIDogc2xpZGVDb25maWcub25TaHJ1bms7XG4gICAgICAgICAgbm90aWZ5KGNvbXBvbmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pXSk7XG5cbiAgICB2YXIgQWN0aXZlU2xpZGluZyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBleGhpYml0OiBleGhpYml0LFxuICAgICAgICBldmVudHM6IGV2ZW50cyQ2XG4gICAgfSk7XG5cbiAgICB2YXIgU2xpZGluZ1NjaGVtYSA9IFtcbiAgICAgIHJlcXVpcmVkJDEoJ2Nsb3NlZENsYXNzJyksXG4gICAgICByZXF1aXJlZCQxKCdvcGVuQ2xhc3MnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ3Nocmlua2luZ0NsYXNzJyksXG4gICAgICByZXF1aXJlZCQxKCdncm93aW5nQ2xhc3MnKSxcbiAgICAgIG9wdGlvbiQzKCdnZXRBbmltYXRpb25Sb290JyksXG4gICAgICBvbkhhbmRsZXIoJ29uU2hydW5rJyksXG4gICAgICBvbkhhbmRsZXIoJ29uU3RhcnRTaHJpbmsnKSxcbiAgICAgIG9uSGFuZGxlcignb25Hcm93bicpLFxuICAgICAgb25IYW5kbGVyKCdvblN0YXJ0R3JvdycpLFxuICAgICAgZGVmYXVsdGVkKCdleHBhbmRlZCcsIGZhbHNlKSxcbiAgICAgIHJlcXVpcmVkT2YoJ2RpbWVuc2lvbicsIGNob29zZSQxKCdwcm9wZXJ0eScsIHtcbiAgICAgICAgd2lkdGg6IFtcbiAgICAgICAgICBvdXRwdXQkMSgncHJvcGVydHknLCAnd2lkdGgnKSxcbiAgICAgICAgICBvdXRwdXQkMSgnZ2V0RGltZW5zaW9uJywgZWxlbSA9PiBnZXQkYyhlbGVtKSArICdweCcpXG4gICAgICAgIF0sXG4gICAgICAgIGhlaWdodDogW1xuICAgICAgICAgIG91dHB1dCQxKCdwcm9wZXJ0eScsICdoZWlnaHQnKSxcbiAgICAgICAgICBvdXRwdXQkMSgnZ2V0RGltZW5zaW9uJywgZWxlbSA9PiBnZXQkZChlbGVtKSArICdweCcpXG4gICAgICAgIF1cbiAgICAgIH0pKVxuICAgIF07XG5cbiAgICBjb25zdCBpbml0JDkgPSBzcGVjID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlID0gQ2VsbChzcGVjLmV4cGFuZGVkKTtcbiAgICAgIGNvbnN0IHJlYWRTdGF0ZSA9ICgpID0+ICdleHBhbmRlZDogJyArIHN0YXRlLmdldCgpO1xuICAgICAgcmV0dXJuIG51JDgoe1xuICAgICAgICBpc0V4cGFuZGVkOiAoKSA9PiBzdGF0ZS5nZXQoKSA9PT0gdHJ1ZSxcbiAgICAgICAgaXNDb2xsYXBzZWQ6ICgpID0+IHN0YXRlLmdldCgpID09PSBmYWxzZSxcbiAgICAgICAgc2V0Q29sbGFwc2VkOiBjdXJyeShzdGF0ZS5zZXQsIGZhbHNlKSxcbiAgICAgICAgc2V0RXhwYW5kZWQ6IGN1cnJ5KHN0YXRlLnNldCwgdHJ1ZSksXG4gICAgICAgIHJlYWRTdGF0ZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHZhciBTbGlkaW5nU3RhdGUgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgaW5pdDogaW5pdCQ5XG4gICAgfSk7XG5cbiAgICBjb25zdCBTbGlkaW5nID0gY3JlYXRlJDQoe1xuICAgICAgZmllbGRzOiBTbGlkaW5nU2NoZW1hLFxuICAgICAgbmFtZTogJ3NsaWRpbmcnLFxuICAgICAgYWN0aXZlOiBBY3RpdmVTbGlkaW5nLFxuICAgICAgYXBpczogU2xpZGluZ0FwaXMsXG4gICAgICBzdGF0ZTogU2xpZGluZ1N0YXRlXG4gICAgfSk7XG5cbiAgICBjb25zdCBnZXRNZW51QnV0dG9uQXBpID0gY29tcG9uZW50ID0+ICh7XG4gICAgICBpc0VuYWJsZWQ6ICgpID0+ICFEaXNhYmxpbmcuaXNEaXNhYmxlZChjb21wb25lbnQpLFxuICAgICAgc2V0RW5hYmxlZDogc3RhdGUgPT4gRGlzYWJsaW5nLnNldChjb21wb25lbnQsICFzdGF0ZSksXG4gICAgICBzZXRBY3RpdmU6IHN0YXRlID0+IHtcbiAgICAgICAgY29uc3QgZWxtID0gY29tcG9uZW50LmVsZW1lbnQ7XG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgIGFkZCQyKGVsbSwgJ3RveC10YnRuLS1lbmFibGVkJyk7XG4gICAgICAgICAgc2V0JDkoZWxtLCAnYXJpYS1wcmVzc2VkJywgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVtb3ZlJDIoZWxtLCAndG94LXRidG4tLWVuYWJsZWQnKTtcbiAgICAgICAgICByZW1vdmUkNyhlbG0sICdhcmlhLXByZXNzZWQnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGlzQWN0aXZlOiAoKSA9PiBoYXMoY29tcG9uZW50LmVsZW1lbnQsICd0b3gtdGJ0bi0tZW5hYmxlZCcpLFxuICAgICAgc2V0VGV4dDogdGV4dCA9PiB7XG4gICAgICAgIGVtaXRXaXRoKGNvbXBvbmVudCwgdXBkYXRlTWVudVRleHQsIHsgdGV4dCB9KTtcbiAgICAgIH0sXG4gICAgICBzZXRJY29uOiBpY29uID0+IGVtaXRXaXRoKGNvbXBvbmVudCwgdXBkYXRlTWVudUljb24sIHsgaWNvbiB9KVxuICAgIH0pO1xuICAgIGNvbnN0IHJlbmRlck1lbnVCdXR0b24gPSAoc3BlYywgcHJlZml4LCBiYWNrc3RhZ2UsIHJvbGUsIHRhYnN0b3BwaW5nID0gdHJ1ZSkgPT4ge1xuICAgICAgcmV0dXJuIHJlbmRlckNvbW1vbkRyb3Bkb3duKHtcbiAgICAgICAgdGV4dDogc3BlYy50ZXh0LFxuICAgICAgICBpY29uOiBzcGVjLmljb24sXG4gICAgICAgIHRvb2x0aXA6IHNwZWMudG9vbHRpcCxcbiAgICAgICAgc2VhcmNoYWJsZTogc3BlYy5zZWFyY2guaXNTb21lKCksXG4gICAgICAgIHJvbGUsXG4gICAgICAgIGZldGNoOiAoZHJvcGRvd25Db21wLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgIGNvbnN0IGZldGNoQ29udGV4dCA9IHsgcGF0dGVybjogc3BlYy5zZWFyY2guaXNTb21lKCkgPyBnZXRTZWFyY2hQYXR0ZXJuKGRyb3Bkb3duQ29tcCkgOiAnJyB9O1xuICAgICAgICAgIHNwZWMuZmV0Y2goaXRlbXMgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2soYnVpbGQoaXRlbXMsIEl0ZW1SZXNwb25zZSQxLkNMT1NFX09OX0VYRUNVVEUsIGJhY2tzdGFnZSwge1xuICAgICAgICAgICAgICBpc0hvcml6b250YWxNZW51OiBmYWxzZSxcbiAgICAgICAgICAgICAgc2VhcmNoOiBzcGVjLnNlYXJjaFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0sIGZldGNoQ29udGV4dCwgZ2V0TWVudUJ1dHRvbkFwaShkcm9wZG93bkNvbXApKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25TZXR1cDogc3BlYy5vblNldHVwLFxuICAgICAgICBnZXRBcGk6IGdldE1lbnVCdXR0b25BcGksXG4gICAgICAgIGNvbHVtbnM6IDEsXG4gICAgICAgIHByZXNldHM6ICdub3JtYWwnLFxuICAgICAgICBjbGFzc2VzOiBbXSxcbiAgICAgICAgZHJvcGRvd25CZWhhdmlvdXJzOiBbLi4udGFic3RvcHBpbmcgPyBbVGFic3RvcHBpbmcuY29uZmlnKHt9KV0gOiBbXV1cbiAgICAgIH0sIHByZWZpeCwgYmFja3N0YWdlLnNoYXJlZCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRGZXRjaCA9IChpdGVtcywgZ2V0QnV0dG9uLCBiYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IGdldE1lbnVJdGVtQWN0aW9uID0gaXRlbSA9PiBhcGkgPT4ge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9ICFhcGkuaXNBY3RpdmUoKTtcbiAgICAgICAgYXBpLnNldEFjdGl2ZShuZXdWYWx1ZSk7XG4gICAgICAgIGl0ZW0uc3RvcmFnZS5zZXQobmV3VmFsdWUpO1xuICAgICAgICBiYWNrc3RhZ2Uuc2hhcmVkLmdldFNpbmsoKS5lYWNoKHNpbmsgPT4ge1xuICAgICAgICAgIGdldEJ1dHRvbigpLmdldE9wdChzaW5rKS5lYWNoKG9yaWcgPT4ge1xuICAgICAgICAgICAgZm9jdXMkMyhvcmlnLmVsZW1lbnQpO1xuICAgICAgICAgICAgZW1pdFdpdGgob3JpZywgZm9ybUFjdGlvbkV2ZW50LCB7XG4gICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0uc3RvcmFnZS5nZXQoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldE1lbnVJdGVtU2V0dXAgPSBpdGVtID0+IGFwaSA9PiB7XG4gICAgICAgIGFwaS5zZXRBY3RpdmUoaXRlbS5zdG9yYWdlLmdldCgpKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gc3VjY2VzcyA9PiB7XG4gICAgICAgIHN1Y2Nlc3MobWFwJDIoaXRlbXMsIGl0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSBpdGVtLnRleHQuZm9sZCgoKSA9PiAoe30pLCB0ZXh0ID0+ICh7IHRleHQgfSkpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgICAgICAgLi4udGV4dCxcbiAgICAgICAgICAgIG9uQWN0aW9uOiBnZXRNZW51SXRlbUFjdGlvbihpdGVtKSxcbiAgICAgICAgICAgIG9uU2V0dXA6IGdldE1lbnVJdGVtU2V0dXAoaXRlbSlcbiAgICAgICAgICB9O1xuICAgICAgICB9KSk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJMYWJlbCA9IHRleHQgPT4gKHtcbiAgICAgIGRvbToge1xuICAgICAgICB0YWc6ICdzcGFuJyxcbiAgICAgICAgY2xhc3NlczogWyd0b3gtdHJlZV9fbGFiZWwnXSxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICd0aXRsZSc6IHRleHQsXG4gICAgICAgICAgJ2FyaWEtbGFiZWwnOiB0ZXh0XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjb21wb25lbnRzOiBbdGV4dCQyKHRleHQpXVxuICAgIH0pO1xuICAgIGNvbnN0IGxlYWZMYWJlbEV2ZW50c0lkID0gZ2VuZXJhdGUkNignbGVhZi1sYWJlbC1ldmVudC1pZCcpO1xuICAgIGNvbnN0IHJlbmRlckxlYWZMYWJlbCA9ICh7bGVhZiwgb25MZWFmQWN0aW9uLCB2aXNpYmxlLCB0cmVlSWQsIHNlbGVjdGVkSWQsIGJhY2tzdGFnZX0pID0+IHtcbiAgICAgIGNvbnN0IGludGVybmFsTWVudUJ1dHRvbiA9IGxlYWYubWVudS5tYXAoYnRuID0+IHJlbmRlck1lbnVCdXR0b24oYnRuLCAndG94LW1idG4nLCBiYWNrc3RhZ2UsIE9wdGlvbmFsLm5vbmUoKSwgdmlzaWJsZSkpO1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IFtyZW5kZXJMYWJlbChsZWFmLnRpdGxlKV07XG4gICAgICBpbnRlcm5hbE1lbnVCdXR0b24uZWFjaChidG4gPT4gY29tcG9uZW50cy5wdXNoKGJ0bikpO1xuICAgICAgcmV0dXJuIEJ1dHRvbi5za2V0Y2goe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAgICd0b3gtdHJlZS0tbGVhZl9fbGFiZWwnLFxuICAgICAgICAgICAgJ3RveC10cmJ0bidcbiAgICAgICAgICBdLmNvbmNhdCh2aXNpYmxlID8gWyd0b3gtdHJlZS0tbGVhZl9fbGFiZWwtLXZpc2libGUnXSA6IFtdKVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICByb2xlOiAndHJlZWl0ZW0nLFxuICAgICAgICBhY3Rpb246IGJ1dHRvbiA9PiB7XG4gICAgICAgICAgb25MZWFmQWN0aW9uKGxlYWYuaWQpO1xuICAgICAgICAgIGJ1dHRvbi5nZXRTeXN0ZW0oKS5icm9hZGNhc3RPbihbYHVwZGF0ZS1hY3RpdmUtaXRlbS0keyB0cmVlSWQgfWBdLCB7IHZhbHVlOiBsZWFmLmlkIH0pO1xuICAgICAgICB9LFxuICAgICAgICBldmVudE9yZGVyOiB7XG4gICAgICAgICAgW2tleWRvd24oKV06IFtcbiAgICAgICAgICAgIGxlYWZMYWJlbEV2ZW50c0lkLFxuICAgICAgICAgICAgJ2tleWluZydcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbkJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICAuLi52aXNpYmxlID8gW1RhYnN0b3BwaW5nLmNvbmZpZyh7fSldIDogW10sXG4gICAgICAgICAgVG9nZ2xpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzOiAndG94LXRyYnRuLS1lbmFibGVkJyxcbiAgICAgICAgICAgIHRvZ2dsZU9uRXhlY3V0ZTogZmFsc2UsXG4gICAgICAgICAgICBhcmlhOiB7IG1vZGU6ICdzZWxlY3RlZCcgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIFJlY2VpdmluZy5jb25maWcoe1xuICAgICAgICAgICAgY2hhbm5lbHM6IHtcbiAgICAgICAgICAgICAgW2B1cGRhdGUtYWN0aXZlLWl0ZW0tJHsgdHJlZUlkIH1gXToge1xuICAgICAgICAgICAgICAgIG9uUmVjZWl2ZTogKGNvbXAsIG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgICAgICAgIChtZXNzYWdlLnZhbHVlID09PSBsZWFmLmlkID8gVG9nZ2xpbmcub24gOiBUb2dnbGluZy5vZmYpKGNvbXApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNvbmZpZyhsZWFmTGFiZWxFdmVudHNJZCwgW1xuICAgICAgICAgICAgcnVuT25BdHRhY2hlZCgoY29tcCwgX3NlKSA9PiB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkSWQuZWFjaChpZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9nZ2xlID0gaWQgPT09IGxlYWYuaWQgPyBUb2dnbGluZy5vbiA6IFRvZ2dsaW5nLm9mZjtcbiAgICAgICAgICAgICAgICB0b2dnbGUoY29tcCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBydW4kMShrZXlkb3duKCksIChjb21wLCBzZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpc0xlZnRBcnJvd0tleSA9IHNlLmV2ZW50LnJhdy5jb2RlID09PSAnQXJyb3dMZWZ0JztcbiAgICAgICAgICAgICAgY29uc3QgaXNSaWdodEFycm93S2V5ID0gc2UuZXZlbnQucmF3LmNvZGUgPT09ICdBcnJvd1JpZ2h0JztcbiAgICAgICAgICAgICAgaWYgKGlzTGVmdEFycm93S2V5KSB7XG4gICAgICAgICAgICAgICAgYW5jZXN0b3IoY29tcC5lbGVtZW50LCAnLnRveC10cmVlLS1kaXJlY3RvcnknKS5lYWNoKGRpckVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgY29tcC5nZXRTeXN0ZW0oKS5nZXRCeURvbShkaXJFbGVtZW50KS5lYWNoKGRpckNvbXAgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZChkaXJFbGVtZW50LCAnLnRveC10cmVlLS1kaXJlY3RvcnlfX2xhYmVsJykuZWFjaChkaXJMYWJlbEVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGRpckNvbXAuZ2V0U3lzdGVtKCkuZ2V0QnlEb20oZGlyTGFiZWxFbGVtZW50KS5lYWNoKEZvY3VzaW5nLmZvY3VzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzZS5zdG9wKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNSaWdodEFycm93S2V5KSB7XG4gICAgICAgICAgICAgICAgc2Uuc3RvcCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0pXG4gICAgICAgIF0pXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckljb24gPSAoaWNvbk5hbWUsIGljb25zUHJvdmlkZXIsIGJlaGF2aW91cnMpID0+IHJlbmRlciQzKGljb25OYW1lLCB7XG4gICAgICB0YWc6ICdzcGFuJyxcbiAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgJ3RveC10cmVlX19pY29uLXdyYXAnLFxuICAgICAgICAndG94LWljb24nXG4gICAgICBdLFxuICAgICAgYmVoYXZpb3Vyc1xuICAgIH0sIGljb25zUHJvdmlkZXIpO1xuICAgIGNvbnN0IHJlbmRlckljb25Gcm9tUGFjayA9IChpY29uTmFtZSwgaWNvbnNQcm92aWRlcikgPT4gcmVuZGVySWNvbihpY29uTmFtZSwgaWNvbnNQcm92aWRlciwgW10pO1xuICAgIGNvbnN0IGRpcmVjdG9yeUxhYmVsRXZlbnRzSWQgPSBnZW5lcmF0ZSQ2KCdkaXJlY3RvcnktbGFiZWwtZXZlbnQtaWQnKTtcbiAgICBjb25zdCByZW5kZXJEaXJlY3RvcnlMYWJlbCA9ICh7ZGlyZWN0b3J5LCB2aXNpYmxlLCBub0NoaWxkcmVuLCBiYWNrc3RhZ2V9KSA9PiB7XG4gICAgICBjb25zdCBpbnRlcm5hbE1lbnVCdXR0b24gPSBkaXJlY3RvcnkubWVudS5tYXAoYnRuID0+IHJlbmRlck1lbnVCdXR0b24oYnRuLCAndG94LW1idG4nLCBiYWNrc3RhZ2UsIE9wdGlvbmFsLm5vbmUoKSkpO1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LWNoZXZyb24nXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcG9uZW50czogW3JlbmRlckljb25Gcm9tUGFjaygnY2hldnJvbi1yaWdodCcsIGJhY2tzdGFnZS5zaGFyZWQucHJvdmlkZXJzLmljb25zKV1cbiAgICAgICAgfSxcbiAgICAgICAgcmVuZGVyTGFiZWwoZGlyZWN0b3J5LnRpdGxlKVxuICAgICAgXTtcbiAgICAgIGludGVybmFsTWVudUJ1dHRvbi5lYWNoKGJ0biA9PiB7XG4gICAgICAgIGNvbXBvbmVudHMucHVzaChidG4pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCB0b2dnbGVFeHBhbmRDaGlsZHJlbiA9IGJ1dHRvbiA9PiB7XG4gICAgICAgIGFuY2VzdG9yKGJ1dHRvbi5lbGVtZW50LCAnLnRveC10cmVlLS1kaXJlY3RvcnknKS5lYWNoKGRpcmVjdG9yeUVsZSA9PiB7XG4gICAgICAgICAgYnV0dG9uLmdldFN5c3RlbSgpLmdldEJ5RG9tKGRpcmVjdG9yeUVsZSkuZWFjaChkaXJlY3RvcnlDb21wID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHdpbGxFeHBhbmQgPSAhVG9nZ2xpbmcuaXNPbihkaXJlY3RvcnlDb21wKTtcbiAgICAgICAgICAgIFRvZ2dsaW5nLnRvZ2dsZShkaXJlY3RvcnlDb21wKTtcbiAgICAgICAgICAgIGVtaXRXaXRoKGJ1dHRvbiwgJ2V4cGFuZC10cmVlLW5vZGUnLCB7XG4gICAgICAgICAgICAgIGV4cGFuZGVkOiB3aWxsRXhwYW5kLFxuICAgICAgICAgICAgICBub2RlOiBkaXJlY3RvcnkuaWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gQnV0dG9uLnNrZXRjaCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICAgJ3RveC10cmVlLS1kaXJlY3RvcnlfX2xhYmVsJyxcbiAgICAgICAgICAgICd0b3gtdHJidG4nXG4gICAgICAgICAgXS5jb25jYXQodmlzaWJsZSA/IFsndG94LXRyZWUtLWRpcmVjdG9yeV9fbGFiZWwtLXZpc2libGUnXSA6IFtdKVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICBhY3Rpb246IHRvZ2dsZUV4cGFuZENoaWxkcmVuLFxuICAgICAgICBldmVudE9yZGVyOiB7XG4gICAgICAgICAgW2tleWRvd24oKV06IFtcbiAgICAgICAgICAgIGRpcmVjdG9yeUxhYmVsRXZlbnRzSWQsXG4gICAgICAgICAgICAna2V5aW5nJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uQmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIC4uLnZpc2libGUgPyBbVGFic3RvcHBpbmcuY29uZmlnKHt9KV0gOiBbXSxcbiAgICAgICAgICBjb25maWcoZGlyZWN0b3J5TGFiZWxFdmVudHNJZCwgW3J1biQxKGtleWRvd24oKSwgKGNvbXAsIHNlKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGlzUmlnaHRBcnJvd0tleSA9IHNlLmV2ZW50LnJhdy5jb2RlID09PSAnQXJyb3dSaWdodCc7XG4gICAgICAgICAgICAgIGNvbnN0IGlzTGVmdEFycm93S2V5ID0gc2UuZXZlbnQucmF3LmNvZGUgPT09ICdBcnJvd0xlZnQnO1xuICAgICAgICAgICAgICBpZiAoaXNSaWdodEFycm93S2V5ICYmIG5vQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBzZS5zdG9wKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGlzUmlnaHRBcnJvd0tleSB8fCBpc0xlZnRBcnJvd0tleSkge1xuICAgICAgICAgICAgICAgIGFuY2VzdG9yKGNvbXAuZWxlbWVudCwgJy50b3gtdHJlZS0tZGlyZWN0b3J5JykuZWFjaChkaXJlY3RvcnlFbGUgPT4ge1xuICAgICAgICAgICAgICAgICAgY29tcC5nZXRTeXN0ZW0oKS5nZXRCeURvbShkaXJlY3RvcnlFbGUpLmVhY2goZGlyZWN0b3J5Q29tcCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVG9nZ2xpbmcuaXNPbihkaXJlY3RvcnlDb21wKSAmJiBpc1JpZ2h0QXJyb3dLZXkgfHwgVG9nZ2xpbmcuaXNPbihkaXJlY3RvcnlDb21wKSAmJiBpc0xlZnRBcnJvd0tleSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZUV4cGFuZENoaWxkcmVuKGNvbXApO1xuICAgICAgICAgICAgICAgICAgICAgIHNlLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xlZnRBcnJvd0tleSAmJiAhVG9nZ2xpbmcuaXNPbihkaXJlY3RvcnlDb21wKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yKGRpcmVjdG9yeUNvbXAuZWxlbWVudCwgJy50b3gtdHJlZS0tZGlyZWN0b3J5JykuZWFjaChwYXJlbnREaXJFbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkKHBhcmVudERpckVsZW1lbnQsICcudG94LXRyZWUtLWRpcmVjdG9yeV9fbGFiZWwnKS5lYWNoKHBhcmVudERpckxhYmVsRWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeUNvbXAuZ2V0U3lzdGVtKCkuZ2V0QnlEb20ocGFyZW50RGlyTGFiZWxFbGVtZW50KS5lYWNoKEZvY3VzaW5nLmZvY3VzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIHNlLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXSlcbiAgICAgICAgXSlcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyRGlyZWN0b3J5Q2hpbGRyZW4gPSAoe2NoaWxkcmVuLCBvbkxlYWZBY3Rpb24sIHZpc2libGUsIHRyZWVJZCwgZXhwYW5kZWRJZHMsIHNlbGVjdGVkSWQsIGJhY2tzdGFnZX0pID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtdHJlZS0tZGlyZWN0b3J5X19jaGlsZHJlbiddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IGNoaWxkcmVuLm1hcChpdGVtID0+IHtcbiAgICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnbGVhZicgPyByZW5kZXJMZWFmTGFiZWwoe1xuICAgICAgICAgICAgbGVhZjogaXRlbSxcbiAgICAgICAgICAgIHNlbGVjdGVkSWQsXG4gICAgICAgICAgICBvbkxlYWZBY3Rpb24sXG4gICAgICAgICAgICB2aXNpYmxlLFxuICAgICAgICAgICAgdHJlZUlkLFxuICAgICAgICAgICAgYmFja3N0YWdlXG4gICAgICAgICAgfSkgOiByZW5kZXJEaXJlY3Rvcnkoe1xuICAgICAgICAgICAgZGlyZWN0b3J5OiBpdGVtLFxuICAgICAgICAgICAgZXhwYW5kZWRJZHMsXG4gICAgICAgICAgICBzZWxlY3RlZElkLFxuICAgICAgICAgICAgb25MZWFmQWN0aW9uLFxuICAgICAgICAgICAgbGFiZWxUYWJzdG9wcGluZzogdmlzaWJsZSxcbiAgICAgICAgICAgIHRyZWVJZCxcbiAgICAgICAgICAgIGJhY2tzdGFnZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIFNsaWRpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIGRpbWVuc2lvbjogeyBwcm9wZXJ0eTogJ2hlaWdodCcgfSxcbiAgICAgICAgICAgIGNsb3NlZENsYXNzOiAndG94LXRyZWUtLWRpcmVjdG9yeV9fY2hpbGRyZW4tLWNsb3NlZCcsXG4gICAgICAgICAgICBvcGVuQ2xhc3M6ICd0b3gtdHJlZS0tZGlyZWN0b3J5X19jaGlsZHJlbi0tb3BlbicsXG4gICAgICAgICAgICBncm93aW5nQ2xhc3M6ICd0b3gtdHJlZS0tZGlyZWN0b3J5X19jaGlsZHJlbi0tZ3Jvd2luZycsXG4gICAgICAgICAgICBzaHJpbmtpbmdDbGFzczogJ3RveC10cmVlLS1kaXJlY3RvcnlfX2NoaWxkcmVuLS1zaHJpbmtpbmcnLFxuICAgICAgICAgICAgZXhwYW5kZWQ6IHZpc2libGVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBSZXBsYWNpbmcuY29uZmlnKHt9KVxuICAgICAgICBdKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGRpcmVjdG9yeUV2ZW50c0lkID0gZ2VuZXJhdGUkNignZGlyZWN0b3J5LWV2ZW50LWlkJyk7XG4gICAgY29uc3QgcmVuZGVyRGlyZWN0b3J5ID0gKHtkaXJlY3RvcnksIG9uTGVhZkFjdGlvbiwgbGFiZWxUYWJzdG9wcGluZywgdHJlZUlkLCBiYWNrc3RhZ2UsIGV4cGFuZGVkSWRzLCBzZWxlY3RlZElkfSkgPT4ge1xuICAgICAgY29uc3Qge2NoaWxkcmVufSA9IGRpcmVjdG9yeTtcbiAgICAgIGNvbnN0IGV4cGFuZGVkSWRzQ2VsbCA9IENlbGwoZXhwYW5kZWRJZHMpO1xuICAgICAgY29uc3QgY29tcHV0ZWRDaGlsZHJlbkNvbXBvbmVudHMgPSB2aXNpYmxlID0+IGNoaWxkcmVuLm1hcChpdGVtID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ2xlYWYnID8gcmVuZGVyTGVhZkxhYmVsKHtcbiAgICAgICAgICBsZWFmOiBpdGVtLFxuICAgICAgICAgIHNlbGVjdGVkSWQsXG4gICAgICAgICAgb25MZWFmQWN0aW9uLFxuICAgICAgICAgIHZpc2libGUsXG4gICAgICAgICAgdHJlZUlkLFxuICAgICAgICAgIGJhY2tzdGFnZVxuICAgICAgICB9KSA6IHJlbmRlckRpcmVjdG9yeSh7XG4gICAgICAgICAgZGlyZWN0b3J5OiBpdGVtLFxuICAgICAgICAgIGV4cGFuZGVkSWRzOiBleHBhbmRlZElkc0NlbGwuZ2V0KCksXG4gICAgICAgICAgc2VsZWN0ZWRJZCxcbiAgICAgICAgICBvbkxlYWZBY3Rpb24sXG4gICAgICAgICAgbGFiZWxUYWJzdG9wcGluZzogdmlzaWJsZSxcbiAgICAgICAgICB0cmVlSWQsXG4gICAgICAgICAgYmFja3N0YWdlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjaGlsZHJlblZpc2libGUgPSBleHBhbmRlZElkcy5pbmNsdWRlcyhkaXJlY3RvcnkuaWQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC10cmVlLS1kaXJlY3RvcnknXSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7IHJvbGU6ICd0cmVlaXRlbScgfVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgcmVuZGVyRGlyZWN0b3J5TGFiZWwoe1xuICAgICAgICAgICAgZGlyZWN0b3J5LFxuICAgICAgICAgICAgdmlzaWJsZTogbGFiZWxUYWJzdG9wcGluZyxcbiAgICAgICAgICAgIG5vQ2hpbGRyZW46IGRpcmVjdG9yeS5jaGlsZHJlbi5sZW5ndGggPT09IDAsXG4gICAgICAgICAgICBiYWNrc3RhZ2VcbiAgICAgICAgICB9KSxcbiAgICAgICAgICByZW5kZXJEaXJlY3RvcnlDaGlsZHJlbih7XG4gICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgIGV4cGFuZGVkSWRzLFxuICAgICAgICAgICAgc2VsZWN0ZWRJZCxcbiAgICAgICAgICAgIG9uTGVhZkFjdGlvbixcbiAgICAgICAgICAgIHZpc2libGU6IGNoaWxkcmVuVmlzaWJsZSxcbiAgICAgICAgICAgIHRyZWVJZCxcbiAgICAgICAgICAgIGJhY2tzdGFnZVxuICAgICAgICAgIH0pXG4gICAgICAgIF0sXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBjb25maWcoZGlyZWN0b3J5RXZlbnRzSWQsIFtcbiAgICAgICAgICAgIHJ1bk9uQXR0YWNoZWQoKGNvbXAsIF9zZSkgPT4ge1xuICAgICAgICAgICAgICBUb2dnbGluZy5zZXQoY29tcCwgY2hpbGRyZW5WaXNpYmxlKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcnVuJDEoJ2V4cGFuZC10cmVlLW5vZGUnLCAoX2NtcCwgc2UpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qge2V4cGFuZGVkLCBub2RlfSA9IHNlLmV2ZW50O1xuICAgICAgICAgICAgICBleHBhbmRlZElkc0NlbGwuc2V0KGV4cGFuZGVkID8gW1xuICAgICAgICAgICAgICAgIC4uLmV4cGFuZGVkSWRzQ2VsbC5nZXQoKSxcbiAgICAgICAgICAgICAgICBub2RlXG4gICAgICAgICAgICAgIF0gOiBleHBhbmRlZElkc0NlbGwuZ2V0KCkuZmlsdGVyKGlkID0+IGlkICE9PSBub2RlKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIFRvZ2dsaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICAuLi5kaXJlY3RvcnkuY2hpbGRyZW4ubGVuZ3RoID4gMCA/IHsgYXJpYTogeyBtb2RlOiAnZXhwYW5kZWQnIH0gfSA6IHt9LFxuICAgICAgICAgICAgdG9nZ2xlQ2xhc3M6ICd0b3gtdHJlZS0tZGlyZWN0b3J5LS1leHBhbmRlZCcsXG4gICAgICAgICAgICBvblRvZ2dsZWQ6IChjb21wLCBjaGlsZHJlblZpc2libGUpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW5Db21wID0gY29tcC5jb21wb25lbnRzKClbMV07XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0NoaWxkcmVuID0gY29tcHV0ZWRDaGlsZHJlbkNvbXBvbmVudHMoY2hpbGRyZW5WaXNpYmxlKTtcbiAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuVmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIFNsaWRpbmcuZ3JvdyhjaGlsZHJlbkNvbXApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFNsaWRpbmcuc2hyaW5rKGNoaWxkcmVuQ29tcCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgUmVwbGFjaW5nLnNldChjaGlsZHJlbkNvbXAsIG5ld0NoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHRyZWVFdmVudHNJZCA9IGdlbmVyYXRlJDYoJ3RyZWUtZXZlbnQtaWQnKTtcbiAgICBjb25zdCByZW5kZXJUcmVlID0gKHNwZWMsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3Qgb25MZWFmQWN0aW9uID0gc3BlYy5vbkxlYWZBY3Rpb24uZ2V0T3Iobm9vcCk7XG4gICAgICBjb25zdCBvblRvZ2dsZUV4cGFuZCA9IHNwZWMub25Ub2dnbGVFeHBhbmQuZ2V0T3Iobm9vcCk7XG4gICAgICBjb25zdCBkZWZhdWx0RXhwYW5kZWRJZHMgPSBzcGVjLmRlZmF1bHRFeHBhbmRlZElkcztcbiAgICAgIGNvbnN0IGV4cGFuZGVkSWRzID0gQ2VsbChkZWZhdWx0RXhwYW5kZWRJZHMpO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRJZENlbGwgPSBDZWxsKHNwZWMuZGVmYXVsdFNlbGVjdGVkSWQpO1xuICAgICAgY29uc3QgdHJlZUlkID0gZ2VuZXJhdGUkNigndHJlZS1pZCcpO1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSAoc2VsZWN0ZWRJZCwgZXhwYW5kZWRJZHMpID0+IHNwZWMuaXRlbXMubWFwKGl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnbGVhZicgPyByZW5kZXJMZWFmTGFiZWwoe1xuICAgICAgICAgIGxlYWY6IGl0ZW0sXG4gICAgICAgICAgc2VsZWN0ZWRJZCxcbiAgICAgICAgICBvbkxlYWZBY3Rpb24sXG4gICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICB0cmVlSWQsXG4gICAgICAgICAgYmFja3N0YWdlXG4gICAgICAgIH0pIDogcmVuZGVyRGlyZWN0b3J5KHtcbiAgICAgICAgICBkaXJlY3Rvcnk6IGl0ZW0sXG4gICAgICAgICAgc2VsZWN0ZWRJZCxcbiAgICAgICAgICBvbkxlYWZBY3Rpb24sXG4gICAgICAgICAgZXhwYW5kZWRJZHMsXG4gICAgICAgICAgbGFiZWxUYWJzdG9wcGluZzogdHJ1ZSxcbiAgICAgICAgICB0cmVlSWQsXG4gICAgICAgICAgYmFja3N0YWdlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXRyZWUnXSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7IHJvbGU6ICd0cmVlJyB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IGNoaWxkcmVuKHNlbGVjdGVkSWRDZWxsLmdldCgpLCBleHBhbmRlZElkcy5nZXQoKSksXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBLZXlpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIG1vZGU6ICdmbG93JyxcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnLnRveC10cmVlLS1sZWFmX19sYWJlbC0tdmlzaWJsZSwgLnRveC10cmVlLS1kaXJlY3RvcnlfX2xhYmVsLS12aXNpYmxlJyxcbiAgICAgICAgICAgIGN5Y2xlczogZmFsc2VcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjb25maWcodHJlZUV2ZW50c0lkLCBbcnVuJDEoJ2V4cGFuZC10cmVlLW5vZGUnLCAoX2NtcCwgc2UpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qge2V4cGFuZGVkLCBub2RlfSA9IHNlLmV2ZW50O1xuICAgICAgICAgICAgICBleHBhbmRlZElkcy5zZXQoZXhwYW5kZWQgPyBbXG4gICAgICAgICAgICAgICAgLi4uZXhwYW5kZWRJZHMuZ2V0KCksXG4gICAgICAgICAgICAgICAgbm9kZVxuICAgICAgICAgICAgICBdIDogZXhwYW5kZWRJZHMuZ2V0KCkuZmlsdGVyKGlkID0+IGlkICE9PSBub2RlKSk7XG4gICAgICAgICAgICAgIG9uVG9nZ2xlRXhwYW5kKGV4cGFuZGVkSWRzLmdldCgpLCB7XG4gICAgICAgICAgICAgICAgZXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgbm9kZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXSksXG4gICAgICAgICAgUmVjZWl2aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBjaGFubmVsczoge1xuICAgICAgICAgICAgICBbYHVwZGF0ZS1hY3RpdmUtaXRlbS0keyB0cmVlSWQgfWBdOiB7XG4gICAgICAgICAgICAgICAgb25SZWNlaXZlOiAoY29tcCwgbWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJZENlbGwuc2V0KE9wdGlvbmFsLnNvbWUobWVzc2FnZS52YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgUmVwbGFjaW5nLnNldChjb21wLCBjaGlsZHJlbihPcHRpb25hbC5zb21lKG1lc3NhZ2UudmFsdWUpLCBleHBhbmRlZElkcy5nZXQoKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIFJlcGxhY2luZy5jb25maWcoe30pXG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBldmVudHMkNSA9IChzdHJlYW1Db25maWcsIHN0cmVhbVN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBzdHJlYW1zID0gc3RyZWFtQ29uZmlnLnN0cmVhbS5zdHJlYW1zO1xuICAgICAgY29uc3QgcHJvY2Vzc29yID0gc3RyZWFtcy5zZXR1cChzdHJlYW1Db25maWcsIHN0cmVhbVN0YXRlKTtcbiAgICAgIHJldHVybiBkZXJpdmUkMihbXG4gICAgICAgIHJ1biQxKHN0cmVhbUNvbmZpZy5ldmVudCwgcHJvY2Vzc29yKSxcbiAgICAgICAgcnVuT25EZXRhY2hlZCgoKSA9PiBzdHJlYW1TdGF0ZS5jYW5jZWwoKSlcbiAgICAgIF0uY29uY2F0KHN0cmVhbUNvbmZpZy5jYW5jZWxFdmVudC5tYXAoZSA9PiBbcnVuJDEoZSwgKCkgPT4gc3RyZWFtU3RhdGUuY2FuY2VsKCkpXSkuZ2V0T3IoW10pKSk7XG4gICAgfTtcblxuICAgIHZhciBBY3RpdmVTdHJlYW1pbmcgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgZXZlbnRzOiBldmVudHMkNVxuICAgIH0pO1xuXG4gICAgY29uc3QgdGhyb3R0bGUgPSBfY29uZmlnID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlID0gQ2VsbChudWxsKTtcbiAgICAgIGNvbnN0IHJlYWRTdGF0ZSA9ICgpID0+ICh7IHRpbWVyOiBzdGF0ZS5nZXQoKSAhPT0gbnVsbCA/ICdzZXQnIDogJ3Vuc2V0JyB9KTtcbiAgICAgIGNvbnN0IHNldFRpbWVyID0gdCA9PiB7XG4gICAgICAgIHN0YXRlLnNldCh0KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHQgPSBzdGF0ZS5nZXQoKTtcbiAgICAgICAgaWYgKHQgIT09IG51bGwpIHtcbiAgICAgICAgICB0LmNhbmNlbCgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIG51JDgoe1xuICAgICAgICByZWFkU3RhdGUsXG4gICAgICAgIHNldFRpbWVyLFxuICAgICAgICBjYW5jZWxcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW5pdCQ4ID0gc3BlYyA9PiBzcGVjLnN0cmVhbS5zdHJlYW1zLnN0YXRlKHNwZWMpO1xuXG4gICAgdmFyIFN0cmVhbWluZ1N0YXRlID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIHRocm90dGxlOiB0aHJvdHRsZSxcbiAgICAgICAgaW5pdDogaW5pdCQ4XG4gICAgfSk7XG5cbiAgICBjb25zdCBzZXR1cCRjID0gKHN0cmVhbUluZm8sIHN0cmVhbVN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBzSW5mbyA9IHN0cmVhbUluZm8uc3RyZWFtO1xuICAgICAgY29uc3QgdGhyb3R0bGVyID0gbGFzdChzdHJlYW1JbmZvLm9uU3RyZWFtLCBzSW5mby5kZWxheSk7XG4gICAgICBzdHJlYW1TdGF0ZS5zZXRUaW1lcih0aHJvdHRsZXIpO1xuICAgICAgcmV0dXJuIChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgIHRocm90dGxlci50aHJvdHRsZShjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50KTtcbiAgICAgICAgaWYgKHNJbmZvLnN0b3BFdmVudCkge1xuICAgICAgICAgIHNpbXVsYXRlZEV2ZW50LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBTdHJlYW1pbmdTY2hlbWEgPSBbXG4gICAgICByZXF1aXJlZE9mKCdzdHJlYW0nLCBjaG9vc2UkMSgnbW9kZScsIHtcbiAgICAgICAgdGhyb3R0bGU6IFtcbiAgICAgICAgICByZXF1aXJlZCQxKCdkZWxheScpLFxuICAgICAgICAgIGRlZmF1bHRlZCgnc3RvcEV2ZW50JywgdHJ1ZSksXG4gICAgICAgICAgb3V0cHV0JDEoJ3N0cmVhbXMnLCB7XG4gICAgICAgICAgICBzZXR1cDogc2V0dXAkYyxcbiAgICAgICAgICAgIHN0YXRlOiB0aHJvdHRsZVxuICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgIH0pKSxcbiAgICAgIGRlZmF1bHRlZCgnZXZlbnQnLCAnaW5wdXQnKSxcbiAgICAgIG9wdGlvbiQzKCdjYW5jZWxFdmVudCcpLFxuICAgICAgb25TdHJpY3RIYW5kbGVyKCdvblN0cmVhbScpXG4gICAgXTtcblxuICAgIGNvbnN0IFN0cmVhbWluZyA9IGNyZWF0ZSQ0KHtcbiAgICAgIGZpZWxkczogU3RyZWFtaW5nU2NoZW1hLFxuICAgICAgbmFtZTogJ3N0cmVhbWluZycsXG4gICAgICBhY3RpdmU6IEFjdGl2ZVN0cmVhbWluZyxcbiAgICAgIHN0YXRlOiBTdHJlYW1pbmdTdGF0ZVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2V0VmFsdWVGcm9tSXRlbSA9IChtb2RlbCwgaW5wdXQsIGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1EYXRhID0gUmVwcmVzZW50aW5nLmdldFZhbHVlKGl0ZW0pO1xuICAgICAgUmVwcmVzZW50aW5nLnNldFZhbHVlKGlucHV0LCBpdGVtRGF0YSk7XG4gICAgICBzZXRDdXJzb3JBdEVuZChpbnB1dCk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRTZWxlY3Rpb25PbiA9IChpbnB1dCwgZikgPT4ge1xuICAgICAgY29uc3QgZWwgPSBpbnB1dC5lbGVtZW50O1xuICAgICAgY29uc3QgdmFsdWUgPSBnZXQkNihlbCk7XG4gICAgICBjb25zdCBub2RlID0gZWwuZG9tO1xuICAgICAgaWYgKGdldCRmKGVsLCAndHlwZScpICE9PSAnbnVtYmVyJykge1xuICAgICAgICBmKG5vZGUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldEN1cnNvckF0RW5kID0gaW5wdXQgPT4ge1xuICAgICAgc2V0U2VsZWN0aW9uT24oaW5wdXQsIChub2RlLCB2YWx1ZSkgPT4gbm9kZS5zZXRTZWxlY3Rpb25SYW5nZSh2YWx1ZS5sZW5ndGgsIHZhbHVlLmxlbmd0aCkpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0U2VsZWN0aW9uVG9FbmQgPSAoaW5wdXQsIHN0YXJ0T2Zmc2V0KSA9PiB7XG4gICAgICBzZXRTZWxlY3Rpb25PbihpbnB1dCwgKG5vZGUsIHZhbHVlKSA9PiBub2RlLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0T2Zmc2V0LCB2YWx1ZS5sZW5ndGgpKTtcbiAgICB9O1xuICAgIGNvbnN0IGF0dGVtcHRTZWxlY3RPdmVyID0gKG1vZGVsLCBpbnB1dCwgaXRlbSkgPT4ge1xuICAgICAgaWYgKCFtb2RlbC5zZWxlY3RzT3Zlcikge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gUmVwcmVzZW50aW5nLmdldFZhbHVlKGlucHV0KTtcbiAgICAgICAgY29uc3QgaW5wdXREaXNwbGF5ID0gbW9kZWwuZ2V0RGlzcGxheVRleHQoY3VycmVudFZhbHVlKTtcbiAgICAgICAgY29uc3QgaXRlbVZhbHVlID0gUmVwcmVzZW50aW5nLmdldFZhbHVlKGl0ZW0pO1xuICAgICAgICBjb25zdCBpdGVtRGlzcGxheSA9IG1vZGVsLmdldERpc3BsYXlUZXh0KGl0ZW1WYWx1ZSk7XG4gICAgICAgIHJldHVybiBpdGVtRGlzcGxheS5pbmRleE9mKGlucHV0RGlzcGxheSkgPT09IDAgPyBPcHRpb25hbC5zb21lKCgpID0+IHtcbiAgICAgICAgICBzZXRWYWx1ZUZyb21JdGVtKG1vZGVsLCBpbnB1dCwgaXRlbSk7XG4gICAgICAgICAgc2V0U2VsZWN0aW9uVG9FbmQoaW5wdXQsIGlucHV0RGlzcGxheS5sZW5ndGgpO1xuICAgICAgICB9KSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaXRlbUV4ZWN1dGUgPSBjb25zdGFudCQxKCdhbGxveS50eXBlYWhlYWQuaXRlbWV4ZWN1dGUnKTtcblxuICAgIGNvbnN0IG1ha2UkMyA9IChkZXRhaWwsIGNvbXBvbmVudHMsIHNwZWMsIGV4dGVybmFscykgPT4ge1xuICAgICAgY29uc3QgbmF2aWdhdGVMaXN0ID0gKGNvbXAsIHNpbXVsYXRlZEV2ZW50LCBoaWdobGlnaHRlcikgPT4ge1xuICAgICAgICBkZXRhaWwucHJldmlld2luZy5zZXQoZmFsc2UpO1xuICAgICAgICBjb25zdCBzYW5kYm94ID0gQ291cGxpbmcuZ2V0Q291cGxlZChjb21wLCAnc2FuZGJveCcpO1xuICAgICAgICBpZiAoU2FuZGJveGluZy5pc09wZW4oc2FuZGJveCkpIHtcbiAgICAgICAgICBDb21wb3NpbmcuZ2V0Q3VycmVudChzYW5kYm94KS5lYWNoKG1lbnUgPT4ge1xuICAgICAgICAgICAgSGlnaGxpZ2h0aW5nLmdldEhpZ2hsaWdodGVkKG1lbnUpLmZvbGQoKCkgPT4ge1xuICAgICAgICAgICAgICBoaWdobGlnaHRlcihtZW51KTtcbiAgICAgICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgICAgZGlzcGF0Y2hFdmVudChzYW5kYm94LCBtZW51LmVsZW1lbnQsICdrZXlkb3duJywgc2ltdWxhdGVkRXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgb25PcGVuU3luYyA9IHNhbmRib3ggPT4ge1xuICAgICAgICAgICAgQ29tcG9zaW5nLmdldEN1cnJlbnQoc2FuZGJveCkuZWFjaChoaWdobGlnaHRlcik7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBvcGVuKGRldGFpbCwgbWFwRmV0Y2goY29tcCksIGNvbXAsIHNhbmRib3gsIGV4dGVybmFscywgb25PcGVuU3luYywgSGlnaGxpZ2h0T25PcGVuLkhpZ2hsaWdodE1lbnVBbmRJdGVtKS5nZXQobm9vcCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBmb2N1c0JlaGF2aW91cnMkMSA9IGZvY3VzQmVoYXZpb3VycyhkZXRhaWwpO1xuICAgICAgY29uc3QgbWFwRmV0Y2ggPSBjb21wID0+IHRkYXRhID0+IHRkYXRhLm1hcChkYXRhID0+IHtcbiAgICAgICAgY29uc3QgbWVudXMgPSB2YWx1ZXMoZGF0YS5tZW51cyk7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gYmluZCQzKG1lbnVzLCBtZW51ID0+IGZpbHRlciQyKG1lbnUuaXRlbXMsIGl0ZW0gPT4gaXRlbS50eXBlID09PSAnaXRlbScpKTtcbiAgICAgICAgY29uc3QgcmVwU3RhdGUgPSBSZXByZXNlbnRpbmcuZ2V0U3RhdGUoY29tcCk7XG4gICAgICAgIHJlcFN0YXRlLnVwZGF0ZShtYXAkMihpdGVtcywgaXRlbSA9PiBpdGVtLmRhdGEpKTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGdldEFjdGl2ZU1lbnUgPSBzYW5kYm94Q29tcCA9PiBDb21wb3NpbmcuZ2V0Q3VycmVudChzYW5kYm94Q29tcCk7XG4gICAgICBjb25zdCB0eXBlYWhlYWRDdXN0b21FdmVudHMgPSAndHlwZWFoZWFkZXZlbnRzJztcbiAgICAgIGNvbnN0IGJlaGF2aW91cnMgPSBbXG4gICAgICAgIEZvY3VzaW5nLmNvbmZpZyh7fSksXG4gICAgICAgIFJlcHJlc2VudGluZy5jb25maWcoe1xuICAgICAgICAgIG9uU2V0VmFsdWU6IGRldGFpbC5vblNldFZhbHVlLFxuICAgICAgICAgIHN0b3JlOiB7XG4gICAgICAgICAgICBtb2RlOiAnZGF0YXNldCcsXG4gICAgICAgICAgICBnZXREYXRhS2V5OiBjb21wID0+IGdldCQ2KGNvbXAuZWxlbWVudCksXG4gICAgICAgICAgICBnZXRGYWxsYmFja0VudHJ5OiBpdGVtU3RyaW5nID0+ICh7XG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtU3RyaW5nLFxuICAgICAgICAgICAgICBtZXRhOiB7fVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzZXRWYWx1ZTogKGNvbXAsIGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgc2V0JDUoY29tcC5lbGVtZW50LCBkZXRhaWwubW9kZWwuZ2V0RGlzcGxheVRleHQoZGF0YSkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC4uLmRldGFpbC5pbml0aWFsRGF0YS5tYXAoZCA9PiB3cmFwJDEoJ2luaXRpYWxWYWx1ZScsIGQpKS5nZXRPcih7fSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBTdHJlYW1pbmcuY29uZmlnKHtcbiAgICAgICAgICBzdHJlYW06IHtcbiAgICAgICAgICAgIG1vZGU6ICd0aHJvdHRsZScsXG4gICAgICAgICAgICBkZWxheTogZGV0YWlsLnJlc3BvbnNlVGltZSxcbiAgICAgICAgICAgIHN0b3BFdmVudDogZmFsc2VcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uU3RyZWFtOiAoY29tcG9uZW50LCBfc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNhbmRib3ggPSBDb3VwbGluZy5nZXRDb3VwbGVkKGNvbXBvbmVudCwgJ3NhbmRib3gnKTtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzSW5JbnB1dCA9IEZvY3VzaW5nLmlzRm9jdXNlZChjb21wb25lbnQpO1xuICAgICAgICAgICAgaWYgKGZvY3VzSW5JbnB1dCkge1xuICAgICAgICAgICAgICBpZiAoZ2V0JDYoY29tcG9uZW50LmVsZW1lbnQpLmxlbmd0aCA+PSBkZXRhaWwubWluQ2hhcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gZ2V0QWN0aXZlTWVudShzYW5kYm94KS5iaW5kKGFjdGl2ZU1lbnUgPT4gSGlnaGxpZ2h0aW5nLmdldEhpZ2hsaWdodGVkKGFjdGl2ZU1lbnUpLm1hcChSZXByZXNlbnRpbmcuZ2V0VmFsdWUpKTtcbiAgICAgICAgICAgICAgICBkZXRhaWwucHJldmlld2luZy5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb25PcGVuU3luYyA9IF9zYW5kYm94ID0+IHtcbiAgICAgICAgICAgICAgICAgIGdldEFjdGl2ZU1lbnUoc2FuZGJveCkuZWFjaChhY3RpdmVNZW51ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNWYWx1ZS5mb2xkKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoZGV0YWlsLm1vZGVsLnNlbGVjdHNPdmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBIaWdobGlnaHRpbmcuaGlnaGxpZ2h0Rmlyc3QoYWN0aXZlTWVudSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCBwdiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgSGlnaGxpZ2h0aW5nLmhpZ2hsaWdodEJ5KGFjdGl2ZU1lbnUsIGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbURhdGEgPSBSZXByZXNlbnRpbmcuZ2V0VmFsdWUoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbURhdGEudmFsdWUgPT09IHB2LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIEhpZ2hsaWdodGluZy5nZXRIaWdobGlnaHRlZChhY3RpdmVNZW51KS5vclRodW5rKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEhpZ2hsaWdodGluZy5oaWdobGlnaHRGaXJzdChhY3RpdmVNZW51KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBvcGVuKGRldGFpbCwgbWFwRmV0Y2goY29tcG9uZW50KSwgY29tcG9uZW50LCBzYW5kYm94LCBleHRlcm5hbHMsIG9uT3BlblN5bmMsIEhpZ2hsaWdodE9uT3Blbi5IaWdobGlnaHRKdXN0TWVudSkuZ2V0KG5vb3ApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjYW5jZWxFdmVudDogdHlwZWFoZWFkQ2FuY2VsKClcbiAgICAgICAgfSksXG4gICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgIG1vZGU6ICdzcGVjaWFsJyxcbiAgICAgICAgICBvbkRvd246IChjb21wLCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgbmF2aWdhdGVMaXN0KGNvbXAsIHNpbXVsYXRlZEV2ZW50LCBIaWdobGlnaHRpbmcuaGlnaGxpZ2h0Rmlyc3QpO1xuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVzY2FwZTogY29tcCA9PiB7XG4gICAgICAgICAgICBjb25zdCBzYW5kYm94ID0gQ291cGxpbmcuZ2V0Q291cGxlZChjb21wLCAnc2FuZGJveCcpO1xuICAgICAgICAgICAgaWYgKFNhbmRib3hpbmcuaXNPcGVuKHNhbmRib3gpKSB7XG4gICAgICAgICAgICAgIFNhbmRib3hpbmcuY2xvc2Uoc2FuZGJveCk7XG4gICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uVXA6IChjb21wLCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgbmF2aWdhdGVMaXN0KGNvbXAsIHNpbXVsYXRlZEV2ZW50LCBIaWdobGlnaHRpbmcuaGlnaGxpZ2h0TGFzdCk7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uRW50ZXI6IGNvbXAgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2FuZGJveCA9IENvdXBsaW5nLmdldENvdXBsZWQoY29tcCwgJ3NhbmRib3gnKTtcbiAgICAgICAgICAgIGNvbnN0IHNhbmRib3hJc09wZW4gPSBTYW5kYm94aW5nLmlzT3BlbihzYW5kYm94KTtcbiAgICAgICAgICAgIGlmIChzYW5kYm94SXNPcGVuICYmICFkZXRhaWwucHJldmlld2luZy5nZXQoKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0QWN0aXZlTWVudShzYW5kYm94KS5iaW5kKGFjdGl2ZU1lbnUgPT4gSGlnaGxpZ2h0aW5nLmdldEhpZ2hsaWdodGVkKGFjdGl2ZU1lbnUpKS5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgZW1pdFdpdGgoY29tcCwgaXRlbUV4ZWN1dGUoKSwgeyBpdGVtIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IFJlcHJlc2VudGluZy5nZXRWYWx1ZShjb21wKTtcbiAgICAgICAgICAgICAgZW1pdChjb21wLCB0eXBlYWhlYWRDYW5jZWwoKSk7XG4gICAgICAgICAgICAgIGRldGFpbC5vbkV4ZWN1dGUoc2FuZGJveCwgY29tcCwgY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgICAgaWYgKHNhbmRib3hJc09wZW4pIHtcbiAgICAgICAgICAgICAgICBTYW5kYm94aW5nLmNsb3NlKHNhbmRib3gpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIFRvZ2dsaW5nLmNvbmZpZyh7XG4gICAgICAgICAgdG9nZ2xlQ2xhc3M6IGRldGFpbC5tYXJrZXJzLm9wZW5DbGFzcyxcbiAgICAgICAgICBhcmlhOiB7IG1vZGU6ICdleHBhbmRlZCcgfVxuICAgICAgICB9KSxcbiAgICAgICAgQ291cGxpbmcuY29uZmlnKHtcbiAgICAgICAgICBvdGhlcnM6IHtcbiAgICAgICAgICAgIHNhbmRib3g6IGhvdHNwb3QgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gbWFrZVNhbmRib3gkMShkZXRhaWwsIGhvdHNwb3QsIHtcbiAgICAgICAgICAgICAgICBvbk9wZW46ICgpID0+IFRvZ2dsaW5nLm9uKGhvdHNwb3QpLFxuICAgICAgICAgICAgICAgIG9uQ2xvc2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGRldGFpbC5sYXp5VHlwZWFoZWFkQ29tcC5nZXQoKS5lYWNoKGlucHV0ID0+IHJlbW92ZSQ3KGlucHV0LmVsZW1lbnQsICdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKSk7XG4gICAgICAgICAgICAgICAgICBUb2dnbGluZy5vZmYoaG90c3BvdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBjb25maWcodHlwZWFoZWFkQ3VzdG9tRXZlbnRzLCBbXG4gICAgICAgICAgcnVuT25BdHRhY2hlZCh0eXBlYWhlYWRDb21wID0+IHtcbiAgICAgICAgICAgIGRldGFpbC5sYXp5VHlwZWFoZWFkQ29tcC5zZXQoT3B0aW9uYWwuc29tZSh0eXBlYWhlYWRDb21wKSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVuT25EZXRhY2hlZChfdHlwZWFoZWFkQ29tcCA9PiB7XG4gICAgICAgICAgICBkZXRhaWwubGF6eVR5cGVhaGVhZENvbXAuc2V0KE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVuT25FeGVjdXRlJDEoY29tcCA9PiB7XG4gICAgICAgICAgICBjb25zdCBvbk9wZW5TeW5jID0gbm9vcDtcbiAgICAgICAgICAgIHRvZ2dsZVBvcHVwKGRldGFpbCwgbWFwRmV0Y2goY29tcCksIGNvbXAsIGV4dGVybmFscywgb25PcGVuU3luYywgSGlnaGxpZ2h0T25PcGVuLkhpZ2hsaWdodE1lbnVBbmRJdGVtKS5nZXQobm9vcCk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVuJDEoaXRlbUV4ZWN1dGUoKSwgKGNvbXAsIHNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzYW5kYm94ID0gQ291cGxpbmcuZ2V0Q291cGxlZChjb21wLCAnc2FuZGJveCcpO1xuICAgICAgICAgICAgc2V0VmFsdWVGcm9tSXRlbShkZXRhaWwubW9kZWwsIGNvbXAsIHNlLmV2ZW50Lml0ZW0pO1xuICAgICAgICAgICAgZW1pdChjb21wLCB0eXBlYWhlYWRDYW5jZWwoKSk7XG4gICAgICAgICAgICBkZXRhaWwub25JdGVtRXhlY3V0ZShjb21wLCBzYW5kYm94LCBzZS5ldmVudC5pdGVtLCBSZXByZXNlbnRpbmcuZ2V0VmFsdWUoY29tcCkpO1xuICAgICAgICAgICAgU2FuZGJveGluZy5jbG9zZShzYW5kYm94KTtcbiAgICAgICAgICAgIHNldEN1cnNvckF0RW5kKGNvbXApO1xuICAgICAgICAgIH0pXG4gICAgICAgIF0uY29uY2F0KGRldGFpbC5kaXNtaXNzT25CbHVyID8gW3J1biQxKHBvc3RCbHVyKCksIHR5cGVhaGVhZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBzYW5kYm94ID0gQ291cGxpbmcuZ2V0Q291cGxlZCh0eXBlYWhlYWQsICdzYW5kYm94Jyk7XG4gICAgICAgICAgICBpZiAoc2VhcmNoKHNhbmRib3guZWxlbWVudCkuaXNOb25lKCkpIHtcbiAgICAgICAgICAgICAgU2FuZGJveGluZy5jbG9zZShzYW5kYm94KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KV0gOiBbXSkpXG4gICAgICBdO1xuICAgICAgY29uc3QgZXZlbnRPcmRlciA9IHtcbiAgICAgICAgW2RldGFjaGVkRnJvbURvbSgpXTogW1xuICAgICAgICAgIFJlcHJlc2VudGluZy5uYW1lKCksXG4gICAgICAgICAgU3RyZWFtaW5nLm5hbWUoKSxcbiAgICAgICAgICB0eXBlYWhlYWRDdXN0b21FdmVudHNcbiAgICAgICAgXSxcbiAgICAgICAgLi4uZGV0YWlsLmV2ZW50T3JkZXJcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1aWQ6IGRldGFpbC51aWQsXG4gICAgICAgIGRvbTogZG9tKGRlZXBNZXJnZShkZXRhaWwsIHtcbiAgICAgICAgICBpbnB1dEF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICdyb2xlJzogJ2NvbWJvYm94JyxcbiAgICAgICAgICAgICdhcmlhLWF1dG9jb21wbGV0ZSc6ICdsaXN0JyxcbiAgICAgICAgICAgICdhcmlhLWhhc3BvcHVwJzogJ3RydWUnXG4gICAgICAgICAgfVxuICAgICAgICB9KSksXG4gICAgICAgIGJlaGF2aW91cnM6IHtcbiAgICAgICAgICAuLi5mb2N1c0JlaGF2aW91cnMkMSxcbiAgICAgICAgICAuLi5hdWdtZW50KGRldGFpbC50eXBlYWhlYWRCZWhhdmlvdXJzLCBiZWhhdmlvdXJzKVxuICAgICAgICB9LFxuICAgICAgICBldmVudE9yZGVyXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBzY2hlbWEkZyA9IGNvbnN0YW50JDEoW1xuICAgICAgb3B0aW9uJDMoJ2xhenlTaW5rJyksXG4gICAgICByZXF1aXJlZCQxKCdmZXRjaCcpLFxuICAgICAgZGVmYXVsdGVkKCdtaW5DaGFycycsIDUpLFxuICAgICAgZGVmYXVsdGVkKCdyZXNwb25zZVRpbWUnLCAxMDAwKSxcbiAgICAgIG9uSGFuZGxlcignb25PcGVuJyksXG4gICAgICBkZWZhdWx0ZWQoJ2dldEhvdHNwb3QnLCBPcHRpb25hbC5zb21lKSxcbiAgICAgIGRlZmF1bHRlZCgnZ2V0QW5jaG9yT3ZlcnJpZGVzJywgY29uc3RhbnQkMSh7fSkpLFxuICAgICAgZGVmYXVsdGVkKCdsYXlvdXRzJywgT3B0aW9uYWwubm9uZSgpKSxcbiAgICAgIGRlZmF1bHRlZCgnZXZlbnRPcmRlcicsIHt9KSxcbiAgICAgIGRlZmF1bHRlZE9iak9mKCdtb2RlbCcsIHt9LCBbXG4gICAgICAgIGRlZmF1bHRlZCgnZ2V0RGlzcGxheVRleHQnLCBpdGVtRGF0YSA9PiBpdGVtRGF0YS5tZXRhICE9PSB1bmRlZmluZWQgJiYgaXRlbURhdGEubWV0YS50ZXh0ICE9PSB1bmRlZmluZWQgPyBpdGVtRGF0YS5tZXRhLnRleHQgOiBpdGVtRGF0YS52YWx1ZSksXG4gICAgICAgIGRlZmF1bHRlZCgnc2VsZWN0c092ZXInLCB0cnVlKSxcbiAgICAgICAgZGVmYXVsdGVkKCdwb3B1bGF0ZUZyb21Ccm93c2UnLCB0cnVlKVxuICAgICAgXSksXG4gICAgICBvbkhhbmRsZXIoJ29uU2V0VmFsdWUnKSxcbiAgICAgIG9uS2V5Ym9hcmRIYW5kbGVyKCdvbkV4ZWN1dGUnKSxcbiAgICAgIG9uSGFuZGxlcignb25JdGVtRXhlY3V0ZScpLFxuICAgICAgZGVmYXVsdGVkKCdpbnB1dENsYXNzZXMnLCBbXSksXG4gICAgICBkZWZhdWx0ZWQoJ2lucHV0QXR0cmlidXRlcycsIHt9KSxcbiAgICAgIGRlZmF1bHRlZCgnaW5wdXRTdHlsZXMnLCB7fSksXG4gICAgICBkZWZhdWx0ZWQoJ21hdGNoV2lkdGgnLCB0cnVlKSxcbiAgICAgIGRlZmF1bHRlZCgndXNlTWluV2lkdGgnLCBmYWxzZSksXG4gICAgICBkZWZhdWx0ZWQoJ2Rpc21pc3NPbkJsdXInLCB0cnVlKSxcbiAgICAgIG1hcmtlcnMkMShbJ29wZW5DbGFzcyddKSxcbiAgICAgIG9wdGlvbiQzKCdpbml0aWFsRGF0YScpLFxuICAgICAgZmllbGQoJ3R5cGVhaGVhZEJlaGF2aW91cnMnLCBbXG4gICAgICAgIEZvY3VzaW5nLFxuICAgICAgICBSZXByZXNlbnRpbmcsXG4gICAgICAgIFN0cmVhbWluZyxcbiAgICAgICAgS2V5aW5nLFxuICAgICAgICBUb2dnbGluZyxcbiAgICAgICAgQ291cGxpbmdcbiAgICAgIF0pLFxuICAgICAgY3VzdG9tRmllbGQoJ2xhenlUeXBlYWhlYWRDb21wJywgKCkgPT4gQ2VsbChPcHRpb25hbC5ub25lKSksXG4gICAgICBjdXN0b21GaWVsZCgncHJldmlld2luZycsICgpID0+IENlbGwodHJ1ZSkpXG4gICAgXS5jb25jYXQoc2NoZW1hJGwoKSkuY29uY2F0KHNhbmRib3hGaWVsZHMoKSkpO1xuICAgIGNvbnN0IHBhcnRzJGIgPSBjb25zdGFudCQxKFtleHRlcm5hbCh7XG4gICAgICAgIHNjaGVtYTogW3RpZXJlZE1lbnVNYXJrZXJzKCldLFxuICAgICAgICBuYW1lOiAnbWVudScsXG4gICAgICAgIG92ZXJyaWRlczogZGV0YWlsID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZmFrZUZvY3VzOiB0cnVlLFxuICAgICAgICAgICAgb25IaWdobGlnaHRJdGVtOiAoX3RtZW51LCBtZW51LCBpdGVtKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghZGV0YWlsLnByZXZpZXdpbmcuZ2V0KCkpIHtcbiAgICAgICAgICAgICAgICBkZXRhaWwubGF6eVR5cGVhaGVhZENvbXAuZ2V0KCkuZWFjaChpbnB1dCA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZGV0YWlsLm1vZGVsLnBvcHVsYXRlRnJvbUJyb3dzZSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZUZyb21JdGVtKGRldGFpbC5tb2RlbCwgaW5wdXQsIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZ2V0T3B0KGl0ZW0uZWxlbWVudCwgJ2lkJykuZWFjaChpZCA9PiBzZXQkOShpbnB1dC5lbGVtZW50LCAnYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgaWQpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZXRhaWwubGF6eVR5cGVhaGVhZENvbXAuZ2V0KCkuZWFjaChpbnB1dCA9PiB7XG4gICAgICAgICAgICAgICAgICBhdHRlbXB0U2VsZWN0T3ZlcihkZXRhaWwubW9kZWwsIGlucHV0LCBpdGVtKS5mb2xkKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRldGFpbC5tb2RlbC5zZWxlY3RzT3Zlcikge1xuICAgICAgICAgICAgICAgICAgICAgIEhpZ2hsaWdodGluZy5kZWhpZ2hsaWdodChtZW51LCBpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICBkZXRhaWwucHJldmlld2luZy5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGV0YWlsLnByZXZpZXdpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSwgc2VsZWN0T3ZlclRleHRJbklucHV0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0T3ZlclRleHRJbklucHV0KCk7XG4gICAgICAgICAgICAgICAgICAgIGRldGFpbC5wcmV2aWV3aW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRXhlY3V0ZTogKF9tZW51LCBpdGVtKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBkZXRhaWwubGF6eVR5cGVhaGVhZENvbXAuZ2V0KCkubWFwKHR5cGVhaGVhZCA9PiB7XG4gICAgICAgICAgICAgICAgZW1pdFdpdGgodHlwZWFoZWFkLCBpdGVtRXhlY3V0ZSgpLCB7IGl0ZW0gfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uSG92ZXI6IChtZW51LCBpdGVtKSA9PiB7XG4gICAgICAgICAgICAgIGRldGFpbC5wcmV2aWV3aW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgIGRldGFpbC5sYXp5VHlwZWFoZWFkQ29tcC5nZXQoKS5lYWNoKGlucHV0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGV0YWlsLm1vZGVsLnBvcHVsYXRlRnJvbUJyb3dzZSkge1xuICAgICAgICAgICAgICAgICAgc2V0VmFsdWVGcm9tSXRlbShkZXRhaWwubW9kZWwsIGlucHV0LCBpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pXSk7XG5cbiAgICBjb25zdCBUeXBlYWhlYWQgPSBjb21wb3NpdGUoe1xuICAgICAgbmFtZTogJ1R5cGVhaGVhZCcsXG4gICAgICBjb25maWdGaWVsZHM6IHNjaGVtYSRnKCksXG4gICAgICBwYXJ0RmllbGRzOiBwYXJ0cyRiKCksXG4gICAgICBmYWN0b3J5OiBtYWtlJDNcbiAgICB9KTtcblxuICAgIGNvbnN0IHdyYXAgPSBkZWxlZ2F0ZSA9PiB7XG4gICAgICBjb25zdCB0b0NhY2hlZCA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHdyYXAoZGVsZWdhdGUudG9DYWNoZWQoKSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgYmluZEZ1dHVyZSA9IGYgPT4ge1xuICAgICAgICByZXR1cm4gd3JhcChkZWxlZ2F0ZS5iaW5kKHJlc0EgPT4gcmVzQS5mb2xkKGVyciA9PiBGdXR1cmUucHVyZShSZXN1bHQuZXJyb3IoZXJyKSksIGEgPT4gZihhKSkpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBiaW5kUmVzdWx0ID0gZiA9PiB7XG4gICAgICAgIHJldHVybiB3cmFwKGRlbGVnYXRlLm1hcChyZXNBID0+IHJlc0EuYmluZChmKSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG1hcFJlc3VsdCA9IGYgPT4ge1xuICAgICAgICByZXR1cm4gd3JhcChkZWxlZ2F0ZS5tYXAocmVzQSA9PiByZXNBLm1hcChmKSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG1hcEVycm9yID0gZiA9PiB7XG4gICAgICAgIHJldHVybiB3cmFwKGRlbGVnYXRlLm1hcChyZXNBID0+IHJlc0EubWFwRXJyb3IoZikpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBmb2xkUmVzdWx0ID0gKHdoZW5FcnJvciwgd2hlblZhbHVlKSA9PiB7XG4gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXAocmVzID0+IHJlcy5mb2xkKHdoZW5FcnJvciwgd2hlblZhbHVlKSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgd2l0aFRpbWVvdXQgPSAodGltZW91dCwgZXJyb3JUaHVuaykgPT4ge1xuICAgICAgICByZXR1cm4gd3JhcChGdXR1cmUubnUoY2FsbGJhY2sgPT4ge1xuICAgICAgICAgIGxldCB0aW1lZE91dCA9IGZhbHNlO1xuICAgICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aW1lZE91dCA9IHRydWU7XG4gICAgICAgICAgICBjYWxsYmFjayhSZXN1bHQuZXJyb3IoZXJyb3JUaHVuaygpKSk7XG4gICAgICAgICAgfSwgdGltZW91dCk7XG4gICAgICAgICAgZGVsZWdhdGUuZ2V0KHJlc3VsdCA9PiB7XG4gICAgICAgICAgICBpZiAoIXRpbWVkT3V0KSB7XG4gICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5kZWxlZ2F0ZSxcbiAgICAgICAgdG9DYWNoZWQsXG4gICAgICAgIGJpbmRGdXR1cmUsXG4gICAgICAgIGJpbmRSZXN1bHQsXG4gICAgICAgIG1hcFJlc3VsdCxcbiAgICAgICAgbWFwRXJyb3IsXG4gICAgICAgIGZvbGRSZXN1bHQsXG4gICAgICAgIHdpdGhUaW1lb3V0XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgbnUkMSA9IHdvcmtlciA9PiB7XG4gICAgICByZXR1cm4gd3JhcChGdXR1cmUubnUod29ya2VyKSk7XG4gICAgfTtcbiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlID0+IHtcbiAgICAgIHJldHVybiB3cmFwKEZ1dHVyZS5wdXJlKFJlc3VsdC52YWx1ZSh2YWx1ZSkpKTtcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yID0gZXJyb3IgPT4ge1xuICAgICAgcmV0dXJuIHdyYXAoRnV0dXJlLnB1cmUoUmVzdWx0LmVycm9yKGVycm9yKSkpO1xuICAgIH07XG4gICAgY29uc3QgZnJvbVJlc3VsdCA9IHJlc3VsdCA9PiB7XG4gICAgICByZXR1cm4gd3JhcChGdXR1cmUucHVyZShyZXN1bHQpKTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21GdXR1cmUgPSBmdXR1cmUgPT4ge1xuICAgICAgcmV0dXJuIHdyYXAoZnV0dXJlLm1hcChSZXN1bHQudmFsdWUpKTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21Qcm9taXNlID0gcHJvbWlzZSA9PiB7XG4gICAgICByZXR1cm4gbnUkMShjb21wbGV0ZXIgPT4ge1xuICAgICAgICBwcm9taXNlLnRoZW4odmFsdWUgPT4ge1xuICAgICAgICAgIGNvbXBsZXRlcihSZXN1bHQudmFsdWUodmFsdWUpKTtcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgIGNvbXBsZXRlcihSZXN1bHQuZXJyb3IoZXJyb3IpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IEZ1dHVyZVJlc3VsdCA9IHtcbiAgICAgIG51OiBudSQxLFxuICAgICAgd3JhcCxcbiAgICAgIHB1cmU6IHZhbHVlLFxuICAgICAgdmFsdWUsXG4gICAgICBlcnJvcixcbiAgICAgIGZyb21SZXN1bHQsXG4gICAgICBmcm9tRnV0dXJlLFxuICAgICAgZnJvbVByb21pc2VcbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVyQ29tbW9uU3BlYyA9IChzcGVjLCBhY3Rpb25PcHQsIGV4dHJhQmVoYXZpb3VycyA9IFtdLCBkb20sIGNvbXBvbmVudHMsIHByb3ZpZGVyc0JhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgYWN0aW9uID0gYWN0aW9uT3B0LmZvbGQoKCkgPT4gKHt9KSwgYWN0aW9uID0+ICh7IGFjdGlvbiB9KSk7XG4gICAgICBjb25zdCBjb21tb24gPSB7XG4gICAgICAgIGJ1dHRvbkJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBEaXNhYmxpbmdDb25maWdzLmJ1dHRvbigoKSA9PiAhc3BlYy5lbmFibGVkIHx8IHByb3ZpZGVyc0JhY2tzdGFnZS5pc0Rpc2FibGVkKCkpLFxuICAgICAgICAgIHJlY2VpdmluZ0NvbmZpZygpLFxuICAgICAgICAgIFRhYnN0b3BwaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgY29uZmlnKCdidXR0b24gcHJlc3MnLCBbXG4gICAgICAgICAgICBwcmV2ZW50RGVmYXVsdCgnY2xpY2snKSxcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0KCdtb3VzZWRvd24nKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0uY29uY2F0KGV4dHJhQmVoYXZpb3VycykpLFxuICAgICAgICBldmVudE9yZGVyOiB7XG4gICAgICAgICAgY2xpY2s6IFtcbiAgICAgICAgICAgICdidXR0b24gcHJlc3MnLFxuICAgICAgICAgICAgJ2FsbG95LmJhc2UuYmVoYXZpb3VyJ1xuICAgICAgICAgIF0sXG4gICAgICAgICAgbW91c2Vkb3duOiBbXG4gICAgICAgICAgICAnYnV0dG9uIHByZXNzJyxcbiAgICAgICAgICAgICdhbGxveS5iYXNlLmJlaGF2aW91cidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmFjdGlvblxuICAgICAgfTtcbiAgICAgIGNvbnN0IGRvbUZpbmFsID0gZGVlcE1lcmdlKGNvbW1vbiwgeyBkb20gfSk7XG4gICAgICByZXR1cm4gZGVlcE1lcmdlKGRvbUZpbmFsLCB7IGNvbXBvbmVudHMgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJJY29uQnV0dG9uU3BlYyA9IChzcGVjLCBhY3Rpb24sIHByb3ZpZGVyc0JhY2tzdGFnZSwgZXh0cmFCZWhhdmlvdXJzID0gW10pID0+IHtcbiAgICAgIGNvbnN0IHRvb2x0aXBBdHRyaWJ1dGVzID0gc3BlYy50b29sdGlwLm1hcCh0b29sdGlwID0+ICh7XG4gICAgICAgICdhcmlhLWxhYmVsJzogcHJvdmlkZXJzQmFja3N0YWdlLnRyYW5zbGF0ZSh0b29sdGlwKSxcbiAgICAgICAgJ3RpdGxlJzogcHJvdmlkZXJzQmFja3N0YWdlLnRyYW5zbGF0ZSh0b29sdGlwKVxuICAgICAgfSkpLmdldE9yKHt9KTtcbiAgICAgIGNvbnN0IGRvbSA9IHtcbiAgICAgICAgdGFnOiAnYnV0dG9uJyxcbiAgICAgICAgY2xhc3NlczogWyd0b3gtdGJ0biddLFxuICAgICAgICBhdHRyaWJ1dGVzOiB0b29sdGlwQXR0cmlidXRlc1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGljb24gPSBzcGVjLmljb24ubWFwKGljb25OYW1lID0+IHJlbmRlckljb25Gcm9tUGFjayQxKGljb25OYW1lLCBwcm92aWRlcnNCYWNrc3RhZ2UuaWNvbnMpKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb21wb25lbnRSZW5kZXJQaXBlbGluZShbaWNvbl0pO1xuICAgICAgcmV0dXJuIHJlbmRlckNvbW1vblNwZWMoc3BlYywgYWN0aW9uLCBleHRyYUJlaGF2aW91cnMsIGRvbSwgY29tcG9uZW50cywgcHJvdmlkZXJzQmFja3N0YWdlKTtcbiAgICB9O1xuICAgIGNvbnN0IGNhbGN1bGF0ZUNsYXNzZXNGcm9tQnV0dG9uVHlwZSA9IGJ1dHRvblR5cGUgPT4ge1xuICAgICAgc3dpdGNoIChidXR0b25UeXBlKSB7XG4gICAgICBjYXNlICdwcmltYXJ5JzpcbiAgICAgICAgcmV0dXJuIFsndG94LWJ1dHRvbiddO1xuICAgICAgY2FzZSAndG9vbGJhcic6XG4gICAgICAgIHJldHVybiBbJ3RveC10YnRuJ107XG4gICAgICBjYXNlICdzZWNvbmRhcnknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAndG94LWJ1dHRvbicsXG4gICAgICAgICAgJ3RveC1idXR0b24tLXNlY29uZGFyeSdcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckJ1dHRvblNwZWMgPSAoc3BlYywgYWN0aW9uLCBwcm92aWRlcnNCYWNrc3RhZ2UsIGV4dHJhQmVoYXZpb3VycyA9IFtdLCBleHRyYUNsYXNzZXMgPSBbXSkgPT4ge1xuICAgICAgY29uc3QgdHJhbnNsYXRlZFRleHQgPSBwcm92aWRlcnNCYWNrc3RhZ2UudHJhbnNsYXRlKHNwZWMudGV4dCk7XG4gICAgICBjb25zdCBpY29uID0gc3BlYy5pY29uLm1hcChpY29uTmFtZSA9PiByZW5kZXJJY29uRnJvbVBhY2skMShpY29uTmFtZSwgcHJvdmlkZXJzQmFja3N0YWdlLmljb25zKSk7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gW2ljb24uZ2V0T3JUaHVuaygoKSA9PiB0ZXh0JDIodHJhbnNsYXRlZFRleHQpKV07XG4gICAgICBjb25zdCBidXR0b25UeXBlID0gc3BlYy5idXR0b25UeXBlLmdldE9yKCFzcGVjLnByaW1hcnkgJiYgIXNwZWMuYm9yZGVybGVzcyA/ICdzZWNvbmRhcnknIDogJ3ByaW1hcnknKTtcbiAgICAgIGNvbnN0IGJhc2VDbGFzc2VzID0gY2FsY3VsYXRlQ2xhc3Nlc0Zyb21CdXR0b25UeXBlKGJ1dHRvblR5cGUpO1xuICAgICAgY29uc3QgY2xhc3NlcyA9IFtcbiAgICAgICAgLi4uYmFzZUNsYXNzZXMsXG4gICAgICAgIC4uLmljb24uaXNTb21lKCkgPyBbJ3RveC1idXR0b24tLWljb24nXSA6IFtdLFxuICAgICAgICAuLi5zcGVjLmJvcmRlcmxlc3MgPyBbJ3RveC1idXR0b24tLW5ha2VkJ10gOiBbXSxcbiAgICAgICAgLi4uZXh0cmFDbGFzc2VzXG4gICAgICBdO1xuICAgICAgY29uc3QgZG9tID0ge1xuICAgICAgICB0YWc6ICdidXR0b24nLFxuICAgICAgICBjbGFzc2VzLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7IHRpdGxlOiB0cmFuc2xhdGVkVGV4dCB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlbmRlckNvbW1vblNwZWMoc3BlYywgYWN0aW9uLCBleHRyYUJlaGF2aW91cnMsIGRvbSwgY29tcG9uZW50cywgcHJvdmlkZXJzQmFja3N0YWdlKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckJ1dHRvbiQxID0gKHNwZWMsIGFjdGlvbiwgcHJvdmlkZXJzQmFja3N0YWdlLCBleHRyYUJlaGF2aW91cnMgPSBbXSwgZXh0cmFDbGFzc2VzID0gW10pID0+IHtcbiAgICAgIGNvbnN0IGJ1dHRvblNwZWMgPSByZW5kZXJCdXR0b25TcGVjKHNwZWMsIE9wdGlvbmFsLnNvbWUoYWN0aW9uKSwgcHJvdmlkZXJzQmFja3N0YWdlLCBleHRyYUJlaGF2aW91cnMsIGV4dHJhQ2xhc3Nlcyk7XG4gICAgICByZXR1cm4gQnV0dG9uLnNrZXRjaChidXR0b25TcGVjKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEFjdGlvbiA9IChuYW1lLCBidXR0b25UeXBlKSA9PiBjb21wID0+IHtcbiAgICAgIGlmIChidXR0b25UeXBlID09PSAnY3VzdG9tJykge1xuICAgICAgICBlbWl0V2l0aChjb21wLCBmb3JtQWN0aW9uRXZlbnQsIHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHZhbHVlOiB7fVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoYnV0dG9uVHlwZSA9PT0gJ3N1Ym1pdCcpIHtcbiAgICAgICAgZW1pdChjb21wLCBmb3JtU3VibWl0RXZlbnQpO1xuICAgICAgfSBlbHNlIGlmIChidXR0b25UeXBlID09PSAnY2FuY2VsJykge1xuICAgICAgICBlbWl0KGNvbXAsIGZvcm1DYW5jZWxFdmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdVbmtub3duIGJ1dHRvbiB0eXBlOiAnLCBidXR0b25UeXBlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlzTWVudUZvb3RlckJ1dHRvblNwZWMgPSAoc3BlYywgYnV0dG9uVHlwZSkgPT4gYnV0dG9uVHlwZSA9PT0gJ21lbnUnO1xuICAgIGNvbnN0IGlzTm9ybWFsRm9vdGVyQnV0dG9uU3BlYyA9IChzcGVjLCBidXR0b25UeXBlKSA9PiBidXR0b25UeXBlID09PSAnY3VzdG9tJyB8fCBidXR0b25UeXBlID09PSAnY2FuY2VsJyB8fCBidXR0b25UeXBlID09PSAnc3VibWl0JztcbiAgICBjb25zdCBpc1RvZ2dsZUJ1dHRvblNwZWMgPSAoc3BlYywgYnV0dG9uVHlwZSkgPT4gYnV0dG9uVHlwZSA9PT0gJ3RvZ2dsZWJ1dHRvbic7XG4gICAgY29uc3QgcmVuZGVyVG9nZ2xlQnV0dG9uID0gKHNwZWMsIHByb3ZpZGVycykgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGNvbnN0IG9wdE1lbUljb24gPSBzcGVjLmljb24ubWFwKG1lbUljb24gPT4gcmVuZGVyUmVwbGFjZWFibGVJY29uRnJvbVBhY2sobWVtSWNvbiwgcHJvdmlkZXJzLmljb25zKSkubWFwKHJlY29yZCk7XG4gICAgICBjb25zdCBhY3Rpb24gPSBjb21wID0+IHtcbiAgICAgICAgZW1pdFdpdGgoY29tcCwgZm9ybUFjdGlvbkV2ZW50LCB7XG4gICAgICAgICAgbmFtZTogc3BlYy5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICBzZXRJY29uOiBuZXdJY29uID0+IHtcbiAgICAgICAgICAgICAgb3B0TWVtSWNvbi5tYXAobWVtSWNvbiA9PiBtZW1JY29uLmdldE9wdChjb21wKS5lYWNoKGRpc3BsYXlJY29uID0+IHtcbiAgICAgICAgICAgICAgICBSZXBsYWNpbmcuc2V0KGRpc3BsYXlJY29uLCBbcmVuZGVyUmVwbGFjZWFibGVJY29uRnJvbVBhY2sobmV3SWNvbiwgcHJvdmlkZXJzLmljb25zKV0pO1xuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBidXR0b25UeXBlID0gc3BlYy5idXR0b25UeXBlLmdldE9yKCFzcGVjLnByaW1hcnkgPyAnc2Vjb25kYXJ5JyA6ICdwcmltYXJ5Jyk7XG4gICAgICBjb25zdCBidXR0b25TcGVjID0ge1xuICAgICAgICAuLi5zcGVjLFxuICAgICAgICBuYW1lOiAoX2EgPSBzcGVjLm5hbWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnLFxuICAgICAgICBwcmltYXJ5OiBidXR0b25UeXBlID09PSAncHJpbWFyeScsXG4gICAgICAgIHRvb2x0aXA6IE9wdGlvbmFsLmZyb20oc3BlYy50b29sdGlwKSxcbiAgICAgICAgZW5hYmxlZDogKF9iID0gc3BlYy5lbmFibGVkKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZSxcbiAgICAgICAgYm9yZGVybGVzczogZmFsc2VcbiAgICAgIH07XG4gICAgICBjb25zdCB0b29sdGlwQXR0cmlidXRlcyA9IGJ1dHRvblNwZWMudG9vbHRpcC5tYXAodG9vbHRpcCA9PiAoe1xuICAgICAgICAnYXJpYS1sYWJlbCc6IHByb3ZpZGVycy50cmFuc2xhdGUodG9vbHRpcCksXG4gICAgICAgICd0aXRsZSc6IHByb3ZpZGVycy50cmFuc2xhdGUodG9vbHRpcClcbiAgICAgIH0pKS5nZXRPcih7fSk7XG4gICAgICBjb25zdCBidXR0b25UeXBlQ2xhc3NlcyA9IGNhbGN1bGF0ZUNsYXNzZXNGcm9tQnV0dG9uVHlwZShidXR0b25UeXBlICE9PSBudWxsICYmIGJ1dHRvblR5cGUgIT09IHZvaWQgMCA/IGJ1dHRvblR5cGUgOiAnc2Vjb25kYXJ5Jyk7XG4gICAgICBjb25zdCBzaG93SWNvbkFuZFRleHQgPSBzcGVjLmljb24uaXNTb21lKCkgJiYgc3BlYy50ZXh0LmlzU29tZSgpO1xuICAgICAgY29uc3QgZG9tID0ge1xuICAgICAgICB0YWc6ICdidXR0b24nLFxuICAgICAgICBjbGFzc2VzOiBbXG4gICAgICAgICAgLi4uYnV0dG9uVHlwZUNsYXNzZXMuY29uY2F0KHNwZWMuaWNvbi5pc1NvbWUoKSA/IFsndG94LWJ1dHRvbi0taWNvbiddIDogW10pLFxuICAgICAgICAgIC4uLnNwZWMuYWN0aXZlID8gWyd0b3gtYnV0dG9uLS1lbmFibGVkJ10gOiBbXSxcbiAgICAgICAgICAuLi5zaG93SWNvbkFuZFRleHQgPyBbJ3RveC1idXR0b24tLWljb24tYW5kLXRleHQnXSA6IFtdXG4gICAgICAgIF0sXG4gICAgICAgIGF0dHJpYnV0ZXM6IHRvb2x0aXBBdHRyaWJ1dGVzXG4gICAgICB9O1xuICAgICAgY29uc3QgZXh0cmFCZWhhdmlvdXJzID0gW107XG4gICAgICBjb25zdCB0cmFuc2xhdGVkVGV4dCA9IHByb3ZpZGVycy50cmFuc2xhdGUoc3BlYy50ZXh0LmdldE9yKCcnKSk7XG4gICAgICBjb25zdCB0cmFuc2xhdGVkVGV4dENvbXBvbmVkID0gdGV4dCQyKHRyYW5zbGF0ZWRUZXh0KTtcbiAgICAgIGNvbnN0IGljb25Db21wID0gY29tcG9uZW50UmVuZGVyUGlwZWxpbmUoW29wdE1lbUljb24ubWFwKG1lbUljb24gPT4gbWVtSWNvbi5hc1NwZWMoKSldKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBbXG4gICAgICAgIC4uLmljb25Db21wLFxuICAgICAgICAuLi5zcGVjLnRleHQuaXNTb21lKCkgPyBbdHJhbnNsYXRlZFRleHRDb21wb25lZF0gOiBbXVxuICAgICAgXTtcbiAgICAgIGNvbnN0IGljb25CdXR0b25TcGVjID0gcmVuZGVyQ29tbW9uU3BlYyhidXR0b25TcGVjLCBPcHRpb25hbC5zb21lKGFjdGlvbiksIGV4dHJhQmVoYXZpb3VycywgZG9tLCBjb21wb25lbnRzLCBwcm92aWRlcnMpO1xuICAgICAgcmV0dXJuIEJ1dHRvbi5za2V0Y2goaWNvbkJ1dHRvblNwZWMpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyRm9vdGVyQnV0dG9uID0gKHNwZWMsIGJ1dHRvblR5cGUsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgaWYgKGlzTWVudUZvb3RlckJ1dHRvblNwZWMoc3BlYywgYnV0dG9uVHlwZSkpIHtcbiAgICAgICAgY29uc3QgZ2V0QnV0dG9uID0gKCkgPT4gbWVtQnV0dG9uO1xuICAgICAgICBjb25zdCBtZW51QnV0dG9uU3BlYyA9IHNwZWM7XG4gICAgICAgIGNvbnN0IGZpeGVkU3BlYyA9IHtcbiAgICAgICAgICAuLi5zcGVjLFxuICAgICAgICAgIHR5cGU6ICdtZW51YnV0dG9uJyxcbiAgICAgICAgICBzZWFyY2g6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICAgICBvblNldHVwOiBhcGkgPT4ge1xuICAgICAgICAgICAgYXBpLnNldEVuYWJsZWQoc3BlYy5lbmFibGVkKTtcbiAgICAgICAgICAgIHJldHVybiBub29wO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZmV0Y2g6IGdldEZldGNoKG1lbnVCdXR0b25TcGVjLml0ZW1zLCBnZXRCdXR0b24sIGJhY2tzdGFnZSlcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbWVtQnV0dG9uID0gcmVjb3JkKHJlbmRlck1lbnVCdXR0b24oZml4ZWRTcGVjLCAndG94LXRidG4nLCBiYWNrc3RhZ2UsIE9wdGlvbmFsLm5vbmUoKSkpO1xuICAgICAgICByZXR1cm4gbWVtQnV0dG9uLmFzU3BlYygpO1xuICAgICAgfSBlbHNlIGlmIChpc05vcm1hbEZvb3RlckJ1dHRvblNwZWMoc3BlYywgYnV0dG9uVHlwZSkpIHtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gZ2V0QWN0aW9uKHNwZWMubmFtZSwgYnV0dG9uVHlwZSk7XG4gICAgICAgIGNvbnN0IGJ1dHRvblNwZWMgPSB7XG4gICAgICAgICAgLi4uc3BlYyxcbiAgICAgICAgICBib3JkZXJsZXNzOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVuZGVyQnV0dG9uJDEoYnV0dG9uU3BlYywgYWN0aW9uLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycywgW10pO1xuICAgICAgfSBlbHNlIGlmIChpc1RvZ2dsZUJ1dHRvblNwZWMoc3BlYywgYnV0dG9uVHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlclRvZ2dsZUJ1dHRvbihzcGVjLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdVbmtub3duIGZvb3RlciBidXR0b24gdHlwZTogJywgYnV0dG9uVHlwZSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBmb290ZXIgYnV0dG9uIHR5cGUnKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckRpYWxvZ0J1dHRvbiA9IChzcGVjLCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IGFjdGlvbiA9IGdldEFjdGlvbihzcGVjLm5hbWUsICdjdXN0b20nKTtcbiAgICAgIHJldHVybiByZW5kZXJGb3JtRmllbGQoT3B0aW9uYWwubm9uZSgpLCBGb3JtRmllbGQucGFydHMuZmllbGQoe1xuICAgICAgICBmYWN0b3J5OiBCdXR0b24sXG4gICAgICAgIC4uLnJlbmRlckJ1dHRvblNwZWMoc3BlYywgT3B0aW9uYWwuc29tZShhY3Rpb24pLCBwcm92aWRlcnNCYWNrc3RhZ2UsIFtcbiAgICAgICAgICBtZW1vcnkoJycpLFxuICAgICAgICAgIENvbXBvc2luZ0NvbmZpZ3Muc2VsZigpXG4gICAgICAgIF0pXG4gICAgICB9KSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNlcGFyYXRvciQxID0geyB0eXBlOiAnc2VwYXJhdG9yJyB9O1xuICAgIGNvbnN0IHRvTWVudUl0ZW0gPSB0YXJnZXQgPT4gKHtcbiAgICAgIHR5cGU6ICdtZW51aXRlbScsXG4gICAgICB2YWx1ZTogdGFyZ2V0LnVybCxcbiAgICAgIHRleHQ6IHRhcmdldC50aXRsZSxcbiAgICAgIG1ldGE6IHsgYXR0YWNoOiB0YXJnZXQuYXR0YWNoIH0sXG4gICAgICBvbkFjdGlvbjogbm9vcFxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXRpY01lbnVJdGVtID0gKHRpdGxlLCB1cmwpID0+ICh7XG4gICAgICB0eXBlOiAnbWVudWl0ZW0nLFxuICAgICAgdmFsdWU6IHVybCxcbiAgICAgIHRleHQ6IHRpdGxlLFxuICAgICAgbWV0YTogeyBhdHRhY2g6IHVuZGVmaW5lZCB9LFxuICAgICAgb25BY3Rpb246IG5vb3BcbiAgICB9KTtcbiAgICBjb25zdCB0b01lbnVJdGVtcyA9IHRhcmdldHMgPT4gbWFwJDIodGFyZ2V0cywgdG9NZW51SXRlbSk7XG4gICAgY29uc3QgZmlsdGVyTGlua1RhcmdldHMgPSAodHlwZSwgdGFyZ2V0cykgPT4gZmlsdGVyJDIodGFyZ2V0cywgdGFyZ2V0ID0+IHRhcmdldC50eXBlID09PSB0eXBlKTtcbiAgICBjb25zdCBmaWx0ZXJlZFRhcmdldHMgPSAodHlwZSwgdGFyZ2V0cykgPT4gdG9NZW51SXRlbXMoZmlsdGVyTGlua1RhcmdldHModHlwZSwgdGFyZ2V0cykpO1xuICAgIGNvbnN0IGhlYWRlclRhcmdldHMgPSBsaW5rSW5mbyA9PiBmaWx0ZXJlZFRhcmdldHMoJ2hlYWRlcicsIGxpbmtJbmZvLnRhcmdldHMpO1xuICAgIGNvbnN0IGFuY2hvclRhcmdldHMgPSBsaW5rSW5mbyA9PiBmaWx0ZXJlZFRhcmdldHMoJ2FuY2hvcicsIGxpbmtJbmZvLnRhcmdldHMpO1xuICAgIGNvbnN0IGFuY2hvclRhcmdldFRvcCA9IGxpbmtJbmZvID0+IE9wdGlvbmFsLmZyb20obGlua0luZm8uYW5jaG9yVG9wKS5tYXAodXJsID0+IHN0YXRpY01lbnVJdGVtKCc8dG9wPicsIHVybCkpLnRvQXJyYXkoKTtcbiAgICBjb25zdCBhbmNob3JUYXJnZXRCb3R0b20gPSBsaW5rSW5mbyA9PiBPcHRpb25hbC5mcm9tKGxpbmtJbmZvLmFuY2hvckJvdHRvbSkubWFwKHVybCA9PiBzdGF0aWNNZW51SXRlbSgnPGJvdHRvbT4nLCB1cmwpKS50b0FycmF5KCk7XG4gICAgY29uc3QgaGlzdG9yeVRhcmdldHMgPSBoaXN0b3J5ID0+IG1hcCQyKGhpc3RvcnksIHVybCA9PiBzdGF0aWNNZW51SXRlbSh1cmwsIHVybCkpO1xuICAgIGNvbnN0IGpvaW5NZW51TGlzdHMgPSBpdGVtcyA9PiB7XG4gICAgICByZXR1cm4gZm9sZGwoaXRlbXMsIChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGJvdGhFbXB0eSA9IGEubGVuZ3RoID09PSAwIHx8IGIubGVuZ3RoID09PSAwO1xuICAgICAgICByZXR1cm4gYm90aEVtcHR5ID8gYS5jb25jYXQoYikgOiBhLmNvbmNhdChzZXBhcmF0b3IkMSwgYik7XG4gICAgICB9LCBbXSk7XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXJCeVF1ZXJ5ID0gKHRlcm0sIG1lbnVJdGVtcykgPT4ge1xuICAgICAgY29uc3QgbG93ZXJDYXNlVGVybSA9IHRlcm0udG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBmaWx0ZXIkMihtZW51SXRlbXMsIGl0ZW0gPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHRleHQgPSBpdGVtLm1ldGEgIT09IHVuZGVmaW5lZCAmJiBpdGVtLm1ldGEudGV4dCAhPT0gdW5kZWZpbmVkID8gaXRlbS5tZXRhLnRleHQgOiBpdGVtLnRleHQ7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gKF9hID0gaXRlbS52YWx1ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgICAgIHJldHVybiBjb250YWlucyQxKHRleHQudG9Mb3dlckNhc2UoKSwgbG93ZXJDYXNlVGVybSkgfHwgY29udGFpbnMkMSh2YWx1ZS50b0xvd2VyQ2FzZSgpLCBsb3dlckNhc2VUZXJtKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRJdGVtcyA9IChmaWxlVHlwZSwgaW5wdXQsIHVybEJhY2tzdGFnZSkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGNvbnN0IHVybElucHV0VmFsdWUgPSBSZXByZXNlbnRpbmcuZ2V0VmFsdWUoaW5wdXQpO1xuICAgICAgY29uc3QgdGVybSA9IChfYiA9IChfYSA9IHVybElucHV0VmFsdWUgPT09IG51bGwgfHwgdXJsSW5wdXRWYWx1ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdXJsSW5wdXRWYWx1ZS5tZXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGV4dCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogdXJsSW5wdXRWYWx1ZS52YWx1ZTtcbiAgICAgIGNvbnN0IGluZm8gPSB1cmxCYWNrc3RhZ2UuZ2V0TGlua0luZm9ybWF0aW9uKCk7XG4gICAgICByZXR1cm4gaW5mby5mb2xkKCgpID0+IFtdLCBsaW5rSW5mbyA9PiB7XG4gICAgICAgIGNvbnN0IGhpc3RvcnkgPSBmaWx0ZXJCeVF1ZXJ5KHRlcm0sIGhpc3RvcnlUYXJnZXRzKHVybEJhY2tzdGFnZS5nZXRIaXN0b3J5KGZpbGVUeXBlKSkpO1xuICAgICAgICByZXR1cm4gZmlsZVR5cGUgPT09ICdmaWxlJyA/IGpvaW5NZW51TGlzdHMoW1xuICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgZmlsdGVyQnlRdWVyeSh0ZXJtLCBoZWFkZXJUYXJnZXRzKGxpbmtJbmZvKSksXG4gICAgICAgICAgZmlsdGVyQnlRdWVyeSh0ZXJtLCBmbGF0dGVuKFtcbiAgICAgICAgICAgIGFuY2hvclRhcmdldFRvcChsaW5rSW5mbyksXG4gICAgICAgICAgICBhbmNob3JUYXJnZXRzKGxpbmtJbmZvKSxcbiAgICAgICAgICAgIGFuY2hvclRhcmdldEJvdHRvbShsaW5rSW5mbylcbiAgICAgICAgICBdKSlcbiAgICAgICAgXSkgOiBoaXN0b3J5O1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBlcnJvcklkID0gZ2VuZXJhdGUkNignYXJpYS1pbnZhbGlkJyk7XG4gICAgY29uc3QgcmVuZGVyVXJsSW5wdXQgPSAoc3BlYywgYmFja3N0YWdlLCB1cmxCYWNrc3RhZ2UsIGluaXRpYWxEYXRhKSA9PiB7XG4gICAgICBjb25zdCBwcm92aWRlcnNCYWNrc3RhZ2UgPSBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycztcbiAgICAgIGNvbnN0IHVwZGF0ZUhpc3RvcnkgPSBjb21wb25lbnQgPT4ge1xuICAgICAgICBjb25zdCB1cmxFbnRyeSA9IFJlcHJlc2VudGluZy5nZXRWYWx1ZShjb21wb25lbnQpO1xuICAgICAgICB1cmxCYWNrc3RhZ2UuYWRkVG9IaXN0b3J5KHVybEVudHJ5LnZhbHVlLCBzcGVjLmZpbGV0eXBlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCB0eXBlYWhlYWRTcGVjID0ge1xuICAgICAgICAuLi5pbml0aWFsRGF0YS5tYXAoaW5pdGlhbERhdGEgPT4gKHsgaW5pdGlhbERhdGEgfSkpLmdldE9yKHt9KSxcbiAgICAgICAgZGlzbWlzc09uQmx1cjogdHJ1ZSxcbiAgICAgICAgaW5wdXRDbGFzc2VzOiBbJ3RveC10ZXh0ZmllbGQnXSxcbiAgICAgICAgc2FuZGJveENsYXNzZXM6IFsndG94LWRpYWxvZ19fcG9wdXBzJ10sXG4gICAgICAgIGlucHV0QXR0cmlidXRlczoge1xuICAgICAgICAgICdhcmlhLWVycm9ybWVzc2FnZSc6IGVycm9ySWQsXG4gICAgICAgICAgJ3R5cGUnOiAndXJsJ1xuICAgICAgICB9LFxuICAgICAgICBtaW5DaGFyczogMCxcbiAgICAgICAgcmVzcG9uc2VUaW1lOiAwLFxuICAgICAgICBmZXRjaDogaW5wdXQgPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW1zID0gZ2V0SXRlbXMoc3BlYy5maWxldHlwZSwgaW5wdXQsIHVybEJhY2tzdGFnZSk7XG4gICAgICAgICAgY29uc3QgdGRhdGEgPSBidWlsZChpdGVtcywgSXRlbVJlc3BvbnNlJDEuQlVCQkxFX1RPX1NBTkRCT1gsIGJhY2tzdGFnZSwge1xuICAgICAgICAgICAgaXNIb3Jpem9udGFsTWVudTogZmFsc2UsXG4gICAgICAgICAgICBzZWFyY2g6IE9wdGlvbmFsLm5vbmUoKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBGdXR1cmUucHVyZSh0ZGF0YSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldEhvdHNwb3Q6IGNvbXAgPT4gbWVtVXJsQm94LmdldE9wdChjb21wKSxcbiAgICAgICAgb25TZXRWYWx1ZTogKGNvbXAsIF9uZXdWYWx1ZSkgPT4ge1xuICAgICAgICAgIGlmIChjb21wLmhhc0NvbmZpZ3VyZWQoSW52YWxpZGF0aW5nKSkge1xuICAgICAgICAgICAgSW52YWxpZGF0aW5nLnJ1bihjb21wKS5nZXQobm9vcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB0eXBlYWhlYWRCZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgLi4udXJsQmFja3N0YWdlLmdldFZhbGlkYXRpb25IYW5kbGVyKCkubWFwKGhhbmRsZXIgPT4gSW52YWxpZGF0aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBnZXRSb290OiBjb21wID0+IHBhcmVudEVsZW1lbnQoY29tcC5lbGVtZW50KSxcbiAgICAgICAgICAgIGludmFsaWRDbGFzczogJ3RveC1jb250cm9sLXdyYXAtLXN0YXR1cy1pbnZhbGlkJyxcbiAgICAgICAgICAgIG5vdGlmeToge1xuICAgICAgICAgICAgICBvbkludmFsaWQ6IChjb21wLCBlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBtZW1JbnZhbGlkSWNvbi5nZXRPcHQoY29tcCkuZWFjaChpbnZhbGlkQ29tcCA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXQkOShpbnZhbGlkQ29tcC5lbGVtZW50LCAndGl0bGUnLCBwcm92aWRlcnNCYWNrc3RhZ2UudHJhbnNsYXRlKGVycikpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmFsaWRhdG9yOiB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlOiBpbnB1dCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsRW50cnkgPSBSZXByZXNlbnRpbmcuZ2V0VmFsdWUoaW5wdXQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBGdXR1cmVSZXN1bHQubnUoY29tcGxldGVyID0+IHtcbiAgICAgICAgICAgICAgICAgIGhhbmRsZXIoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBzcGVjLmZpbGV0eXBlLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHVybEVudHJ5LnZhbHVlXG4gICAgICAgICAgICAgICAgICB9LCB2YWxpZGF0aW9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb24uc3RhdHVzID09PSAnaW52YWxpZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBSZXN1bHQuZXJyb3IodmFsaWRhdGlvbi5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZXIoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSBSZXN1bHQudmFsdWUodmFsaWRhdGlvbi5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZXIodmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRlT25Mb2FkOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKS50b0FycmF5KCksXG4gICAgICAgICAgRGlzYWJsaW5nLmNvbmZpZyh7IGRpc2FibGVkOiAoKSA9PiAhc3BlYy5lbmFibGVkIHx8IHByb3ZpZGVyc0JhY2tzdGFnZS5pc0Rpc2FibGVkKCkgfSksXG4gICAgICAgICAgVGFic3RvcHBpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICBjb25maWcoJ3VybGlucHV0LWV2ZW50cycsIFtcbiAgICAgICAgICAgIHJ1biQxKGlucHV0KCksIGNvbXAgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBnZXQkNihjb21wLmVsZW1lbnQpO1xuICAgICAgICAgICAgICBjb25zdCB0cmltbWVkVmFsdWUgPSBjdXJyZW50VmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgICBpZiAodHJpbW1lZFZhbHVlICE9PSBjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzZXQkNShjb21wLmVsZW1lbnQsIHRyaW1tZWRWYWx1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHNwZWMuZmlsZXR5cGUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgIGVtaXRXaXRoKGNvbXAsIGZvcm1DaGFuZ2VFdmVudCwgeyBuYW1lOiBzcGVjLm5hbWUgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcnVuJDEoY2hhbmdlKCksIGNvbXAgPT4ge1xuICAgICAgICAgICAgICBlbWl0V2l0aChjb21wLCBmb3JtQ2hhbmdlRXZlbnQsIHsgbmFtZTogc3BlYy5uYW1lIH0pO1xuICAgICAgICAgICAgICB1cGRhdGVIaXN0b3J5KGNvbXApO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBydW4kMShwb3N0UGFzdGUoKSwgY29tcCA9PiB7XG4gICAgICAgICAgICAgIGVtaXRXaXRoKGNvbXAsIGZvcm1DaGFuZ2VFdmVudCwgeyBuYW1lOiBzcGVjLm5hbWUgfSk7XG4gICAgICAgICAgICAgIHVwZGF0ZUhpc3RvcnkoY29tcCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0pXG4gICAgICAgIF0pLFxuICAgICAgICBldmVudE9yZGVyOiB7XG4gICAgICAgICAgW2lucHV0KCldOiBbXG4gICAgICAgICAgICAnc3RyZWFtaW5nJyxcbiAgICAgICAgICAgICd1cmxpbnB1dC1ldmVudHMnLFxuICAgICAgICAgICAgJ2ludmFsaWRhdGluZydcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgZ2V0RGlzcGxheVRleHQ6IGl0ZW1EYXRhID0+IGl0ZW1EYXRhLnZhbHVlLFxuICAgICAgICAgIHNlbGVjdHNPdmVyOiBmYWxzZSxcbiAgICAgICAgICBwb3B1bGF0ZUZyb21Ccm93c2U6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIG1hcmtlcnM6IHsgb3BlbkNsYXNzOiAndG94LXRleHRmaWVsZC0tcG9wdXAtb3BlbicgfSxcbiAgICAgICAgbGF6eVNpbms6IGJhY2tzdGFnZS5zaGFyZWQuZ2V0U2luayxcbiAgICAgICAgcGFydHM6IHsgbWVudTogcGFydChmYWxzZSwgMSwgJ25vcm1hbCcpIH0sXG4gICAgICAgIG9uRXhlY3V0ZTogKF9tZW51LCBjb21wb25lbnQsIF9lbnRyeSkgPT4ge1xuICAgICAgICAgIGVtaXRXaXRoKGNvbXBvbmVudCwgZm9ybVN1Ym1pdEV2ZW50LCB7fSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uSXRlbUV4ZWN1dGU6ICh0eXBlYWhlYWQsIF9zYW5kYm94LCBfaXRlbSwgX3ZhbHVlKSA9PiB7XG4gICAgICAgICAgdXBkYXRlSGlzdG9yeSh0eXBlYWhlYWQpO1xuICAgICAgICAgIGVtaXRXaXRoKHR5cGVhaGVhZCwgZm9ybUNoYW5nZUV2ZW50LCB7IG5hbWU6IHNwZWMubmFtZSB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBGaWVsZCA9IEZvcm1GaWVsZC5wYXJ0cy5maWVsZCh7XG4gICAgICAgIC4uLnR5cGVhaGVhZFNwZWMsXG4gICAgICAgIGZhY3Rvcnk6IFR5cGVhaGVhZFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwTGFiZWwgPSBzcGVjLmxhYmVsLm1hcChsYWJlbCA9PiByZW5kZXJMYWJlbCQzKGxhYmVsLCBwcm92aWRlcnNCYWNrc3RhZ2UpKTtcbiAgICAgIGNvbnN0IG1ha2VJY29uID0gKG5hbWUsIGVycklkLCBpY29uID0gbmFtZSwgbGFiZWwgPSBuYW1lKSA9PiByZW5kZXIkMyhpY29uLCB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAndG94LWljb24nLFxuICAgICAgICAgICd0b3gtY29udHJvbC13cmFwX19zdGF0dXMtaWNvbi0nICsgbmFtZVxuICAgICAgICBdLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgJ3RpdGxlJzogcHJvdmlkZXJzQmFja3N0YWdlLnRyYW5zbGF0ZShsYWJlbCksXG4gICAgICAgICAgJ2FyaWEtbGl2ZSc6ICdwb2xpdGUnLFxuICAgICAgICAgIC4uLmVycklkLmZvbGQoKCkgPT4gKHt9KSwgaWQgPT4gKHsgaWQgfSkpXG4gICAgICAgIH1cbiAgICAgIH0sIHByb3ZpZGVyc0JhY2tzdGFnZS5pY29ucyk7XG4gICAgICBjb25zdCBtZW1JbnZhbGlkSWNvbiA9IHJlY29yZChtYWtlSWNvbignaW52YWxpZCcsIE9wdGlvbmFsLnNvbWUoZXJyb3JJZCksICd3YXJuaW5nJykpO1xuICAgICAgY29uc3QgbWVtU3RhdHVzID0gcmVjb3JkKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1jb250cm9sLXdyYXBfX3N0YXR1cy1pY29uLXdyYXAnXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbbWVtSW52YWxpZEljb24uYXNTcGVjKCldXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG9wdFVybFBpY2tlciA9IHVybEJhY2tzdGFnZS5nZXRVcmxQaWNrZXIoc3BlYy5maWxldHlwZSk7XG4gICAgICBjb25zdCBicm93c2VVcmxFdmVudCA9IGdlbmVyYXRlJDYoJ2Jyb3dzZXIudXJsLmV2ZW50Jyk7XG4gICAgICBjb25zdCBtZW1VcmxCb3ggPSByZWNvcmQoe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LWNvbnRyb2wtd3JhcCddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICBwRmllbGQsXG4gICAgICAgICAgbWVtU3RhdHVzLmFzU3BlYygpXG4gICAgICAgIF0sXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtEaXNhYmxpbmcuY29uZmlnKHsgZGlzYWJsZWQ6ICgpID0+ICFzcGVjLmVuYWJsZWQgfHwgcHJvdmlkZXJzQmFja3N0YWdlLmlzRGlzYWJsZWQoKSB9KV0pXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG1lbVVybFBpY2tlckJ1dHRvbiA9IHJlY29yZChyZW5kZXJCdXR0b24kMSh7XG4gICAgICAgIG5hbWU6IHNwZWMubmFtZSxcbiAgICAgICAgaWNvbjogT3B0aW9uYWwuc29tZSgnYnJvd3NlJyksXG4gICAgICAgIHRleHQ6IHNwZWMubGFiZWwuZ2V0T3IoJycpLFxuICAgICAgICBlbmFibGVkOiBzcGVjLmVuYWJsZWQsXG4gICAgICAgIHByaW1hcnk6IGZhbHNlLFxuICAgICAgICBidXR0b25UeXBlOiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGJvcmRlcmxlc3M6IHRydWVcbiAgICAgIH0sIGNvbXBvbmVudCA9PiBlbWl0KGNvbXBvbmVudCwgYnJvd3NlVXJsRXZlbnQpLCBwcm92aWRlcnNCYWNrc3RhZ2UsIFtdLCBbJ3RveC1icm93c2UtdXJsJ10pKTtcbiAgICAgIGNvbnN0IGNvbnRyb2xIV3JhcHBlciA9ICgpID0+ICh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtZm9ybV9fY29udHJvbHMtaC1zdGFjayddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IGZsYXR0ZW4oW1xuICAgICAgICAgIFttZW1VcmxCb3guYXNTcGVjKCldLFxuICAgICAgICAgIG9wdFVybFBpY2tlci5tYXAoKCkgPT4gbWVtVXJsUGlja2VyQnV0dG9uLmFzU3BlYygpKS50b0FycmF5KClcbiAgICAgICAgXSlcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgb3BlblVybFBpY2tlciA9IGNvbXAgPT4ge1xuICAgICAgICBDb21wb3NpbmcuZ2V0Q3VycmVudChjb21wKS5lYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnREYXRhID0gUmVwcmVzZW50aW5nLmdldFZhbHVlKGZpZWxkKTtcbiAgICAgICAgICBjb25zdCB1cmxEYXRhID0ge1xuICAgICAgICAgICAgZmllbGRuYW1lOiBzcGVjLm5hbWUsXG4gICAgICAgICAgICAuLi5jb21wb25lbnREYXRhXG4gICAgICAgICAgfTtcbiAgICAgICAgICBvcHRVcmxQaWNrZXIuZWFjaChwaWNrZXIgPT4ge1xuICAgICAgICAgICAgcGlja2VyKHVybERhdGEpLmdldChjaG9zZW5EYXRhID0+IHtcbiAgICAgICAgICAgICAgUmVwcmVzZW50aW5nLnNldFZhbHVlKGZpZWxkLCBjaG9zZW5EYXRhKTtcbiAgICAgICAgICAgICAgZW1pdFdpdGgoY29tcCwgZm9ybUNoYW5nZUV2ZW50LCB7IG5hbWU6IHNwZWMubmFtZSB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gRm9ybUZpZWxkLnNrZXRjaCh7XG4gICAgICAgIGRvbTogcmVuZGVyRm9ybUZpZWxkRG9tKCksXG4gICAgICAgIGNvbXBvbmVudHM6IHBMYWJlbC50b0FycmF5KCkuY29uY2F0KFtjb250cm9sSFdyYXBwZXIoKV0pLFxuICAgICAgICBmaWVsZEJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBEaXNhYmxpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIGRpc2FibGVkOiAoKSA9PiAhc3BlYy5lbmFibGVkIHx8IHByb3ZpZGVyc0JhY2tzdGFnZS5pc0Rpc2FibGVkKCksXG4gICAgICAgICAgICBvbkRpc2FibGVkOiBjb21wID0+IHtcbiAgICAgICAgICAgICAgRm9ybUZpZWxkLmdldEZpZWxkKGNvbXApLmVhY2goRGlzYWJsaW5nLmRpc2FibGUpO1xuICAgICAgICAgICAgICBtZW1VcmxQaWNrZXJCdXR0b24uZ2V0T3B0KGNvbXApLmVhY2goRGlzYWJsaW5nLmRpc2FibGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRW5hYmxlZDogY29tcCA9PiB7XG4gICAgICAgICAgICAgIEZvcm1GaWVsZC5nZXRGaWVsZChjb21wKS5lYWNoKERpc2FibGluZy5lbmFibGUpO1xuICAgICAgICAgICAgICBtZW1VcmxQaWNrZXJCdXR0b24uZ2V0T3B0KGNvbXApLmVhY2goRGlzYWJsaW5nLmVuYWJsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcmVjZWl2aW5nQ29uZmlnKCksXG4gICAgICAgICAgY29uZmlnKCd1cmwtaW5wdXQtZXZlbnRzJywgW3J1biQxKGJyb3dzZVVybEV2ZW50LCBvcGVuVXJsUGlja2VyKV0pXG4gICAgICAgIF0pXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVyQWxlcnRCYW5uZXIgPSAoc3BlYywgcHJvdmlkZXJzQmFja3N0YWdlKSA9PiB7XG4gICAgICBjb25zdCBpY29uID0gZ2V0JDIoc3BlYy5pY29uLCBwcm92aWRlcnNCYWNrc3RhZ2UuaWNvbnMpO1xuICAgICAgcmV0dXJuIENvbnRhaW5lci5za2V0Y2goe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ2FsZXJ0JyB9LFxuICAgICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAgICd0b3gtbm90aWZpY2F0aW9uJyxcbiAgICAgICAgICAgICd0b3gtbm90aWZpY2F0aW9uLS1pbicsXG4gICAgICAgICAgICBgdG94LW5vdGlmaWNhdGlvbi0tJHsgc3BlYy5sZXZlbCB9YFxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1ub3RpZmljYXRpb25fX2ljb24nXSxcbiAgICAgICAgICAgICAgaW5uZXJIdG1sOiAhc3BlYy51cmwgPyBpY29uIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcG9uZW50czogc3BlYy51cmwgPyBbQnV0dG9uLnNrZXRjaCh7XG4gICAgICAgICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICAgICAgICB0YWc6ICdidXR0b24nLFxuICAgICAgICAgICAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICAgICAgICAgICAndG94LWJ1dHRvbicsXG4gICAgICAgICAgICAgICAgICAgICd0b3gtYnV0dG9uLS1uYWtlZCcsXG4gICAgICAgICAgICAgICAgICAgICd0b3gtYnV0dG9uLS1pY29uJ1xuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIGlubmVySHRtbDogaWNvbixcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgdGl0bGU6IHByb3ZpZGVyc0JhY2tzdGFnZS50cmFuc2xhdGUoc3BlYy5pY29uVG9vbHRpcCkgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYWN0aW9uOiBjb21wID0+IGVtaXRXaXRoKGNvbXAsIGZvcm1BY3Rpb25FdmVudCwge1xuICAgICAgICAgICAgICAgICAgbmFtZTogJ2FsZXJ0LWJhbm5lcicsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogc3BlYy51cmxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBidXR0b25CZWhhdmlvdXJzOiBkZXJpdmUkMShbYWRkRm9jdXNhYmxlQmVoYXZpb3VyKCldKVxuICAgICAgICAgICAgICB9KV0gOiB1bmRlZmluZWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1ub3RpZmljYXRpb25fX2JvZHknXSxcbiAgICAgICAgICAgICAgaW5uZXJIdG1sOiBwcm92aWRlcnNCYWNrc3RhZ2UudHJhbnNsYXRlKHNwZWMudGV4dClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBzZXQkMSA9IChlbGVtZW50LCBzdGF0dXMpID0+IHtcbiAgICAgIGVsZW1lbnQuZG9tLmNoZWNrZWQgPSBzdGF0dXM7XG4gICAgfTtcbiAgICBjb25zdCBnZXQkMSA9IGVsZW1lbnQgPT4gZWxlbWVudC5kb20uY2hlY2tlZDtcblxuICAgIGNvbnN0IHJlbmRlckNoZWNrYm94ID0gKHNwZWMsIHByb3ZpZGVyQmFja3N0YWdlLCBpbml0aWFsRGF0YSkgPT4ge1xuICAgICAgY29uc3QgdG9nZ2xlQ2hlY2tib3hIYW5kbGVyID0gY29tcCA9PiB7XG4gICAgICAgIGNvbXAuZWxlbWVudC5kb20uY2xpY2soKTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcEZpZWxkID0gRm9ybUZpZWxkLnBhcnRzLmZpZWxkKHtcbiAgICAgICAgZmFjdG9yeTogeyBza2V0Y2g6IGlkZW50aXR5IH0sXG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2lucHV0JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1jaGVja2JveF9faW5wdXQnXSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7IHR5cGU6ICdjaGVja2JveCcgfVxuICAgICAgICB9LFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgQ29tcG9zaW5nQ29uZmlncy5zZWxmKCksXG4gICAgICAgICAgRGlzYWJsaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBkaXNhYmxlZDogKCkgPT4gIXNwZWMuZW5hYmxlZCB8fCBwcm92aWRlckJhY2tzdGFnZS5pc0Rpc2FibGVkKCksXG4gICAgICAgICAgICBvbkRpc2FibGVkOiBjb21wb25lbnQgPT4ge1xuICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50KGNvbXBvbmVudC5lbGVtZW50KS5lYWNoKGVsZW1lbnQgPT4gYWRkJDIoZWxlbWVudCwgJ3RveC1jaGVja2JveC0tZGlzYWJsZWQnKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25FbmFibGVkOiBjb21wb25lbnQgPT4ge1xuICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50KGNvbXBvbmVudC5lbGVtZW50KS5lYWNoKGVsZW1lbnQgPT4gcmVtb3ZlJDIoZWxlbWVudCwgJ3RveC1jaGVja2JveC0tZGlzYWJsZWQnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgVGFic3RvcHBpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICBGb2N1c2luZy5jb25maWcoe30pLFxuICAgICAgICAgIHdpdGhFbGVtZW50KGluaXRpYWxEYXRhLCBnZXQkMSwgc2V0JDEpLFxuICAgICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgICAgbW9kZTogJ3NwZWNpYWwnLFxuICAgICAgICAgICAgb25FbnRlcjogdG9nZ2xlQ2hlY2tib3hIYW5kbGVyLFxuICAgICAgICAgICAgb25TcGFjZTogdG9nZ2xlQ2hlY2tib3hIYW5kbGVyLFxuICAgICAgICAgICAgc3RvcFNwYWNlS2V5dXA6IHRydWVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjb25maWcoJ2NoZWNrYm94LWV2ZW50cycsIFtydW4kMShjaGFuZ2UoKSwgKGNvbXBvbmVudCwgXykgPT4ge1xuICAgICAgICAgICAgICBlbWl0V2l0aChjb21wb25lbnQsIGZvcm1DaGFuZ2VFdmVudCwgeyBuYW1lOiBzcGVjLm5hbWUgfSk7XG4gICAgICAgICAgICB9KV0pXG4gICAgICAgIF0pXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBMYWJlbCA9IEZvcm1GaWVsZC5wYXJ0cy5sYWJlbCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ3NwYW4nLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LWNoZWNrYm94X19sYWJlbCddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFt0ZXh0JDIocHJvdmlkZXJCYWNrc3RhZ2UudHJhbnNsYXRlKHNwZWMubGFiZWwpKV0sXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtVbnNlbGVjdGluZy5jb25maWcoe30pXSlcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbWFrZUljb24gPSBjbGFzc05hbWUgPT4ge1xuICAgICAgICBjb25zdCBpY29uTmFtZSA9IGNsYXNzTmFtZSA9PT0gJ2NoZWNrZWQnID8gJ3NlbGVjdGVkJyA6ICd1bnNlbGVjdGVkJztcbiAgICAgICAgcmV0dXJuIHJlbmRlciQzKGljb25OYW1lLCB7XG4gICAgICAgICAgdGFnOiAnc3BhbicsXG4gICAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICAgJ3RveC1pY29uJyxcbiAgICAgICAgICAgICd0b3gtY2hlY2tib3gtaWNvbl9fJyArIGNsYXNzTmFtZVxuICAgICAgICAgIF1cbiAgICAgICAgfSwgcHJvdmlkZXJCYWNrc3RhZ2UuaWNvbnMpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG1lbUljb25zID0gcmVjb3JkKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1jaGVja2JveF9faWNvbnMnXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgbWFrZUljb24oJ2NoZWNrZWQnKSxcbiAgICAgICAgICBtYWtlSWNvbigndW5jaGVja2VkJylcbiAgICAgICAgXVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gRm9ybUZpZWxkLnNrZXRjaCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2xhYmVsJyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1jaGVja2JveCddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICBwRmllbGQsXG4gICAgICAgICAgbWVtSWNvbnMuYXNTcGVjKCksXG4gICAgICAgICAgcExhYmVsXG4gICAgICAgIF0sXG4gICAgICAgIGZpZWxkQmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIERpc2FibGluZy5jb25maWcoeyBkaXNhYmxlZDogKCkgPT4gIXNwZWMuZW5hYmxlZCB8fCBwcm92aWRlckJhY2tzdGFnZS5pc0Rpc2FibGVkKCkgfSksXG4gICAgICAgICAgcmVjZWl2aW5nQ29uZmlnKClcbiAgICAgICAgXSlcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJIdG1sUGFuZWwgPSBzcGVjID0+IHtcbiAgICAgIGlmIChzcGVjLnByZXNldHMgPT09ICdwcmVzZW50YXRpb24nKSB7XG4gICAgICAgIHJldHVybiBDb250YWluZXIuc2tldGNoKHtcbiAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1mb3JtX19ncm91cCddLFxuICAgICAgICAgICAgaW5uZXJIdG1sOiBzcGVjLmh0bWxcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIENvbnRhaW5lci5za2V0Y2goe1xuICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LWZvcm1fX2dyb3VwJ10sXG4gICAgICAgICAgICBpbm5lckh0bWw6IHNwZWMuaHRtbCxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ2RvY3VtZW50JyB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb250YWluZXJCZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgICBUYWJzdG9wcGluZy5jb25maWcoe30pLFxuICAgICAgICAgICAgRm9jdXNpbmcuY29uZmlnKHt9KVxuICAgICAgICAgIF0pXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBtYWtlJDIgPSByZW5kZXIgPT4ge1xuICAgICAgcmV0dXJuIChwYXJ0cywgc3BlYywgZGlhbG9nRGF0YSwgYmFja3N0YWdlKSA9PiBnZXQkZyhzcGVjLCAnbmFtZScpLmZvbGQoKCkgPT4gcmVuZGVyKHNwZWMsIGJhY2tzdGFnZSwgT3B0aW9uYWwubm9uZSgpKSwgZmllbGROYW1lID0+IHBhcnRzLmZpZWxkKGZpZWxkTmFtZSwgcmVuZGVyKHNwZWMsIGJhY2tzdGFnZSwgZ2V0JGcoZGlhbG9nRGF0YSwgZmllbGROYW1lKSkpKTtcbiAgICB9O1xuICAgIGNvbnN0IG1ha2VJZnJhbWUgPSByZW5kZXIgPT4gKHBhcnRzLCBzcGVjLCBkaWFsb2dEYXRhLCBiYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IGlmcmFtZVNwZWMgPSBkZWVwTWVyZ2Uoc3BlYywgeyBzb3VyY2U6ICdkeW5hbWljJyB9KTtcbiAgICAgIHJldHVybiBtYWtlJDIocmVuZGVyKShwYXJ0cywgaWZyYW1lU3BlYywgZGlhbG9nRGF0YSwgYmFja3N0YWdlKTtcbiAgICB9O1xuICAgIGNvbnN0IGZhY3RvcmllcyA9IHtcbiAgICAgIGJhcjogbWFrZSQyKChzcGVjLCBiYWNrc3RhZ2UpID0+IHJlbmRlckJhcihzcGVjLCBiYWNrc3RhZ2Uuc2hhcmVkKSksXG4gICAgICBjb2xsZWN0aW9uOiBtYWtlJDIoKHNwZWMsIGJhY2tzdGFnZSwgZGF0YSkgPT4gcmVuZGVyQ29sbGVjdGlvbihzcGVjLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycywgZGF0YSkpLFxuICAgICAgYWxlcnRiYW5uZXI6IG1ha2UkMigoc3BlYywgYmFja3N0YWdlKSA9PiByZW5kZXJBbGVydEJhbm5lcihzcGVjLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycykpLFxuICAgICAgaW5wdXQ6IG1ha2UkMigoc3BlYywgYmFja3N0YWdlLCBkYXRhKSA9PiByZW5kZXJJbnB1dChzcGVjLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycywgZGF0YSkpLFxuICAgICAgdGV4dGFyZWE6IG1ha2UkMigoc3BlYywgYmFja3N0YWdlLCBkYXRhKSA9PiByZW5kZXJUZXh0YXJlYShzcGVjLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycywgZGF0YSkpLFxuICAgICAgbGFiZWw6IG1ha2UkMigoc3BlYywgYmFja3N0YWdlKSA9PiByZW5kZXJMYWJlbCQyKHNwZWMsIGJhY2tzdGFnZS5zaGFyZWQpKSxcbiAgICAgIGlmcmFtZTogbWFrZUlmcmFtZSgoc3BlYywgYmFja3N0YWdlLCBkYXRhKSA9PiByZW5kZXJJRnJhbWUoc3BlYywgYmFja3N0YWdlLnNoYXJlZC5wcm92aWRlcnMsIGRhdGEpKSxcbiAgICAgIGJ1dHRvbjogbWFrZSQyKChzcGVjLCBiYWNrc3RhZ2UpID0+IHJlbmRlckRpYWxvZ0J1dHRvbihzcGVjLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycykpLFxuICAgICAgY2hlY2tib3g6IG1ha2UkMigoc3BlYywgYmFja3N0YWdlLCBkYXRhKSA9PiByZW5kZXJDaGVja2JveChzcGVjLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycywgZGF0YSkpLFxuICAgICAgY29sb3JpbnB1dDogbWFrZSQyKChzcGVjLCBiYWNrc3RhZ2UsIGRhdGEpID0+IHJlbmRlckNvbG9ySW5wdXQoc3BlYywgYmFja3N0YWdlLnNoYXJlZCwgYmFja3N0YWdlLmNvbG9yaW5wdXQsIGRhdGEpKSxcbiAgICAgIGNvbG9ycGlja2VyOiBtYWtlJDIoKHNwZWMsIGJhY2tzdGFnZSwgZGF0YSkgPT4gcmVuZGVyQ29sb3JQaWNrZXIoc3BlYywgYmFja3N0YWdlLnNoYXJlZC5wcm92aWRlcnMsIGRhdGEpKSxcbiAgICAgIGRyb3B6b25lOiBtYWtlJDIoKHNwZWMsIGJhY2tzdGFnZSwgZGF0YSkgPT4gcmVuZGVyRHJvcFpvbmUoc3BlYywgYmFja3N0YWdlLnNoYXJlZC5wcm92aWRlcnMsIGRhdGEpKSxcbiAgICAgIGdyaWQ6IG1ha2UkMigoc3BlYywgYmFja3N0YWdlKSA9PiByZW5kZXJHcmlkKHNwZWMsIGJhY2tzdGFnZS5zaGFyZWQpKSxcbiAgICAgIGxpc3Rib3g6IG1ha2UkMigoc3BlYywgYmFja3N0YWdlLCBkYXRhKSA9PiByZW5kZXJMaXN0Qm94KHNwZWMsIGJhY2tzdGFnZSwgZGF0YSkpLFxuICAgICAgc2VsZWN0Ym94OiBtYWtlJDIoKHNwZWMsIGJhY2tzdGFnZSwgZGF0YSkgPT4gcmVuZGVyU2VsZWN0Qm94KHNwZWMsIGJhY2tzdGFnZS5zaGFyZWQucHJvdmlkZXJzLCBkYXRhKSksXG4gICAgICBzaXplaW5wdXQ6IG1ha2UkMigoc3BlYywgYmFja3N0YWdlKSA9PiByZW5kZXJTaXplSW5wdXQoc3BlYywgYmFja3N0YWdlLnNoYXJlZC5wcm92aWRlcnMpKSxcbiAgICAgIHNsaWRlcjogbWFrZSQyKChzcGVjLCBiYWNrc3RhZ2UsIGRhdGEpID0+IHJlbmRlclNsaWRlcihzcGVjLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycywgZGF0YSkpLFxuICAgICAgdXJsaW5wdXQ6IG1ha2UkMigoc3BlYywgYmFja3N0YWdlLCBkYXRhKSA9PiByZW5kZXJVcmxJbnB1dChzcGVjLCBiYWNrc3RhZ2UsIGJhY2tzdGFnZS51cmxpbnB1dCwgZGF0YSkpLFxuICAgICAgY3VzdG9tZWRpdG9yOiBtYWtlJDIocmVuZGVyQ3VzdG9tRWRpdG9yKSxcbiAgICAgIGh0bWxwYW5lbDogbWFrZSQyKHJlbmRlckh0bWxQYW5lbCksXG4gICAgICBpbWFnZXByZXZpZXc6IG1ha2UkMigoc3BlYywgXywgZGF0YSkgPT4gcmVuZGVySW1hZ2VQcmV2aWV3KHNwZWMsIGRhdGEpKSxcbiAgICAgIHRhYmxlOiBtYWtlJDIoKHNwZWMsIGJhY2tzdGFnZSkgPT4gcmVuZGVyVGFibGUoc3BlYywgYmFja3N0YWdlLnNoYXJlZC5wcm92aWRlcnMpKSxcbiAgICAgIHRyZWU6IG1ha2UkMigoc3BlYywgYmFja3N0YWdlKSA9PiByZW5kZXJUcmVlKHNwZWMsIGJhY2tzdGFnZSkpLFxuICAgICAgcGFuZWw6IG1ha2UkMigoc3BlYywgYmFja3N0YWdlKSA9PiByZW5kZXJQYW5lbChzcGVjLCBiYWNrc3RhZ2UpKVxuICAgIH07XG4gICAgY29uc3Qgbm9Gb3JtUGFydHMgPSB7XG4gICAgICBmaWVsZDogKF9uYW1lLCBzcGVjKSA9PiBzcGVjLFxuICAgICAgcmVjb3JkOiBjb25zdGFudCQxKFtdKVxuICAgIH07XG4gICAgY29uc3QgaW50ZXJwcmV0SW5Gb3JtID0gKHBhcnRzLCBzcGVjLCBkaWFsb2dEYXRhLCBvbGRCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IG5ld0JhY2tzdGFnZSA9IGRlZXBNZXJnZShvbGRCYWNrc3RhZ2UsIHsgc2hhcmVkOiB7IGludGVycHJldGVyOiBjaGlsZFNwZWMgPT4gaW50ZXJwcmV0UGFydHMocGFydHMsIGNoaWxkU3BlYywgZGlhbG9nRGF0YSwgbmV3QmFja3N0YWdlKSB9IH0pO1xuICAgICAgcmV0dXJuIGludGVycHJldFBhcnRzKHBhcnRzLCBzcGVjLCBkaWFsb2dEYXRhLCBuZXdCYWNrc3RhZ2UpO1xuICAgIH07XG4gICAgY29uc3QgaW50ZXJwcmV0UGFydHMgPSAocGFydHMsIHNwZWMsIGRpYWxvZ0RhdGEsIGJhY2tzdGFnZSkgPT4gZ2V0JGcoZmFjdG9yaWVzLCBzcGVjLnR5cGUpLmZvbGQoKCkgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihgVW5rbm93biBmYWN0b3J5IHR5cGUgXCIkeyBzcGVjLnR5cGUgfVwiLCBkZWZhdWx0aW5nIHRvIGNvbnRhaW5lcjogYCwgc3BlYyk7XG4gICAgICByZXR1cm4gc3BlYztcbiAgICB9LCBmYWN0b3J5ID0+IGZhY3RvcnkocGFydHMsIHNwZWMsIGRpYWxvZ0RhdGEsIGJhY2tzdGFnZSkpO1xuICAgIGNvbnN0IGludGVycHJldFdpdGhvdXRGb3JtID0gKHNwZWMsIGRpYWxvZ0RhdGEsIGJhY2tzdGFnZSkgPT4gaW50ZXJwcmV0UGFydHMobm9Gb3JtUGFydHMsIHNwZWMsIGRpYWxvZ0RhdGEsIGJhY2tzdGFnZSk7XG5cbiAgICBjb25zdCBsYWJlbFByZWZpeCA9ICdsYXlvdXQtaW5zZXQnO1xuICAgIGNvbnN0IHdlc3RFZGdlWCA9IGFuY2hvciA9PiBhbmNob3IueDtcbiAgICBjb25zdCBtaWRkbGVYID0gKGFuY2hvciwgZWxlbWVudCkgPT4gYW5jaG9yLnggKyBhbmNob3Iud2lkdGggLyAyIC0gZWxlbWVudC53aWR0aCAvIDI7XG4gICAgY29uc3QgZWFzdEVkZ2VYID0gKGFuY2hvciwgZWxlbWVudCkgPT4gYW5jaG9yLnggKyBhbmNob3Iud2lkdGggLSBlbGVtZW50LndpZHRoO1xuICAgIGNvbnN0IG5vcnRoWSA9IGFuY2hvciA9PiBhbmNob3IueTtcbiAgICBjb25zdCBzb3V0aFkgPSAoYW5jaG9yLCBlbGVtZW50KSA9PiBhbmNob3IueSArIGFuY2hvci5oZWlnaHQgLSBlbGVtZW50LmhlaWdodDtcbiAgICBjb25zdCBjZW50cmVZID0gKGFuY2hvciwgZWxlbWVudCkgPT4gYW5jaG9yLnkgKyBhbmNob3IuaGVpZ2h0IC8gMiAtIGVsZW1lbnQuaGVpZ2h0IC8gMjtcbiAgICBjb25zdCBzb3V0aHdlc3QgPSAoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzKSA9PiBudSQ2KGVhc3RFZGdlWChhbmNob3IsIGVsZW1lbnQpLCBzb3V0aFkoYW5jaG9yLCBlbGVtZW50KSwgYnViYmxlcy5pbnNldFNvdXRod2VzdCgpLCBub3J0aHdlc3QkMygpLCAnc291dGh3ZXN0JywgYm91bmRzUmVzdHJpY3Rpb24oYW5jaG9yLCB7XG4gICAgICByaWdodDogMCxcbiAgICAgIGJvdHRvbTogM1xuICAgIH0pLCBsYWJlbFByZWZpeCk7XG4gICAgY29uc3Qgc291dGhlYXN0ID0gKGFuY2hvciwgZWxlbWVudCwgYnViYmxlcykgPT4gbnUkNih3ZXN0RWRnZVgoYW5jaG9yKSwgc291dGhZKGFuY2hvciwgZWxlbWVudCksIGJ1YmJsZXMuaW5zZXRTb3V0aGVhc3QoKSwgbm9ydGhlYXN0JDMoKSwgJ3NvdXRoZWFzdCcsIGJvdW5kc1Jlc3RyaWN0aW9uKGFuY2hvciwge1xuICAgICAgbGVmdDogMSxcbiAgICAgIGJvdHRvbTogM1xuICAgIH0pLCBsYWJlbFByZWZpeCk7XG4gICAgY29uc3Qgbm9ydGh3ZXN0ID0gKGFuY2hvciwgZWxlbWVudCwgYnViYmxlcykgPT4gbnUkNihlYXN0RWRnZVgoYW5jaG9yLCBlbGVtZW50KSwgbm9ydGhZKGFuY2hvciksIGJ1YmJsZXMuaW5zZXROb3J0aHdlc3QoKSwgc291dGh3ZXN0JDMoKSwgJ25vcnRod2VzdCcsIGJvdW5kc1Jlc3RyaWN0aW9uKGFuY2hvciwge1xuICAgICAgcmlnaHQ6IDAsXG4gICAgICB0b3A6IDJcbiAgICB9KSwgbGFiZWxQcmVmaXgpO1xuICAgIGNvbnN0IG5vcnRoZWFzdCA9IChhbmNob3IsIGVsZW1lbnQsIGJ1YmJsZXMpID0+IG51JDYod2VzdEVkZ2VYKGFuY2hvciksIG5vcnRoWShhbmNob3IpLCBidWJibGVzLmluc2V0Tm9ydGhlYXN0KCksIHNvdXRoZWFzdCQzKCksICdub3J0aGVhc3QnLCBib3VuZHNSZXN0cmljdGlvbihhbmNob3IsIHtcbiAgICAgIGxlZnQ6IDEsXG4gICAgICB0b3A6IDJcbiAgICB9KSwgbGFiZWxQcmVmaXgpO1xuICAgIGNvbnN0IG5vcnRoID0gKGFuY2hvciwgZWxlbWVudCwgYnViYmxlcykgPT4gbnUkNihtaWRkbGVYKGFuY2hvciwgZWxlbWVudCksIG5vcnRoWShhbmNob3IpLCBidWJibGVzLmluc2V0Tm9ydGgoKSwgc291dGgkMygpLCAnbm9ydGgnLCBib3VuZHNSZXN0cmljdGlvbihhbmNob3IsIHsgdG9wOiAyIH0pLCBsYWJlbFByZWZpeCk7XG4gICAgY29uc3Qgc291dGggPSAoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzKSA9PiBudSQ2KG1pZGRsZVgoYW5jaG9yLCBlbGVtZW50KSwgc291dGhZKGFuY2hvciwgZWxlbWVudCksIGJ1YmJsZXMuaW5zZXRTb3V0aCgpLCBub3J0aCQzKCksICdzb3V0aCcsIGJvdW5kc1Jlc3RyaWN0aW9uKGFuY2hvciwgeyBib3R0b206IDMgfSksIGxhYmVsUHJlZml4KTtcbiAgICBjb25zdCBlYXN0ID0gKGFuY2hvciwgZWxlbWVudCwgYnViYmxlcykgPT4gbnUkNihlYXN0RWRnZVgoYW5jaG9yLCBlbGVtZW50KSwgY2VudHJlWShhbmNob3IsIGVsZW1lbnQpLCBidWJibGVzLmluc2V0RWFzdCgpLCB3ZXN0JDMoKSwgJ2Vhc3QnLCBib3VuZHNSZXN0cmljdGlvbihhbmNob3IsIHsgcmlnaHQ6IDAgfSksIGxhYmVsUHJlZml4KTtcbiAgICBjb25zdCB3ZXN0ID0gKGFuY2hvciwgZWxlbWVudCwgYnViYmxlcykgPT4gbnUkNih3ZXN0RWRnZVgoYW5jaG9yKSwgY2VudHJlWShhbmNob3IsIGVsZW1lbnQpLCBidWJibGVzLmluc2V0V2VzdCgpLCBlYXN0JDMoKSwgJ3dlc3QnLCBib3VuZHNSZXN0cmljdGlvbihhbmNob3IsIHsgbGVmdDogMSB9KSwgbGFiZWxQcmVmaXgpO1xuICAgIGNvbnN0IGxvb2t1cFByZXNlcnZlTGF5b3V0ID0gbGFzdFBsYWNlbWVudCA9PiB7XG4gICAgICBzd2l0Y2ggKGxhc3RQbGFjZW1lbnQpIHtcbiAgICAgIGNhc2UgJ25vcnRoJzpcbiAgICAgICAgcmV0dXJuIG5vcnRoO1xuICAgICAgY2FzZSAnbm9ydGhlYXN0JzpcbiAgICAgICAgcmV0dXJuIG5vcnRoZWFzdDtcbiAgICAgIGNhc2UgJ25vcnRod2VzdCc6XG4gICAgICAgIHJldHVybiBub3J0aHdlc3Q7XG4gICAgICBjYXNlICdzb3V0aCc6XG4gICAgICAgIHJldHVybiBzb3V0aDtcbiAgICAgIGNhc2UgJ3NvdXRoZWFzdCc6XG4gICAgICAgIHJldHVybiBzb3V0aGVhc3Q7XG4gICAgICBjYXNlICdzb3V0aHdlc3QnOlxuICAgICAgICByZXR1cm4gc291dGh3ZXN0O1xuICAgICAgY2FzZSAnZWFzdCc6XG4gICAgICAgIHJldHVybiBlYXN0O1xuICAgICAgY2FzZSAnd2VzdCc6XG4gICAgICAgIHJldHVybiB3ZXN0O1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcHJlc2VydmUgPSAoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzLCBwbGFjZWUsIGJvdW5kcykgPT4ge1xuICAgICAgY29uc3QgbGF5b3V0ID0gZ2V0UGxhY2VtZW50KHBsYWNlZSkubWFwKGxvb2t1cFByZXNlcnZlTGF5b3V0KS5nZXRPcihub3J0aCk7XG4gICAgICByZXR1cm4gbGF5b3V0KGFuY2hvciwgZWxlbWVudCwgYnViYmxlcywgcGxhY2VlLCBib3VuZHMpO1xuICAgIH07XG4gICAgY29uc3QgbG9va3VwRmxpcHBlZExheW91dCA9IGxhc3RQbGFjZW1lbnQgPT4ge1xuICAgICAgc3dpdGNoIChsYXN0UGxhY2VtZW50KSB7XG4gICAgICBjYXNlICdub3J0aCc6XG4gICAgICAgIHJldHVybiBzb3V0aDtcbiAgICAgIGNhc2UgJ25vcnRoZWFzdCc6XG4gICAgICAgIHJldHVybiBzb3V0aGVhc3Q7XG4gICAgICBjYXNlICdub3J0aHdlc3QnOlxuICAgICAgICByZXR1cm4gc291dGh3ZXN0O1xuICAgICAgY2FzZSAnc291dGgnOlxuICAgICAgICByZXR1cm4gbm9ydGg7XG4gICAgICBjYXNlICdzb3V0aGVhc3QnOlxuICAgICAgICByZXR1cm4gbm9ydGhlYXN0O1xuICAgICAgY2FzZSAnc291dGh3ZXN0JzpcbiAgICAgICAgcmV0dXJuIG5vcnRod2VzdDtcbiAgICAgIGNhc2UgJ2Vhc3QnOlxuICAgICAgICByZXR1cm4gd2VzdDtcbiAgICAgIGNhc2UgJ3dlc3QnOlxuICAgICAgICByZXR1cm4gZWFzdDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZsaXAgPSAoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzLCBwbGFjZWUsIGJvdW5kcykgPT4ge1xuICAgICAgY29uc3QgbGF5b3V0ID0gZ2V0UGxhY2VtZW50KHBsYWNlZSkubWFwKGxvb2t1cEZsaXBwZWRMYXlvdXQpLmdldE9yKG5vcnRoKTtcbiAgICAgIHJldHVybiBsYXlvdXQoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzLCBwbGFjZWUsIGJvdW5kcyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ1YmJsZUFsaWdubWVudHMkMiA9IHtcbiAgICAgIHZhbGlnbkNlbnRyZTogW10sXG4gICAgICBhbGlnbkNlbnRyZTogW10sXG4gICAgICBhbGlnbkxlZnQ6IFtdLFxuICAgICAgYWxpZ25SaWdodDogW10sXG4gICAgICByaWdodDogW10sXG4gICAgICBsZWZ0OiBbXSxcbiAgICAgIGJvdHRvbTogW10sXG4gICAgICB0b3A6IFtdXG4gICAgfTtcbiAgICBjb25zdCBnZXRJbmxpbmVEaWFsb2dBbmNob3IgPSAoY29udGVudEFyZWFFbGVtZW50LCBsYXp5QW5jaG9yYmFyLCBsYXp5VXNlRWRpdGFibGVBcmVhQW5jaG9yKSA9PiB7XG4gICAgICBjb25zdCBidWJibGVTaXplID0gMTI7XG4gICAgICBjb25zdCBvdmVycmlkZXMgPSB7IG1heEhlaWdodEZ1bmN0aW9uOiBleHBhbmRhYmxlJDEoKSB9O1xuICAgICAgY29uc3QgZWRpdGFibGVBcmVhQW5jaG9yID0gKCkgPT4gKHtcbiAgICAgICAgdHlwZTogJ25vZGUnLFxuICAgICAgICByb290OiBnZXRDb250ZW50Q29udGFpbmVyKGdldFJvb3ROb2RlKGNvbnRlbnRBcmVhRWxlbWVudCgpKSksXG4gICAgICAgIG5vZGU6IE9wdGlvbmFsLmZyb20oY29udGVudEFyZWFFbGVtZW50KCkpLFxuICAgICAgICBidWJibGU6IG51JDUoYnViYmxlU2l6ZSwgYnViYmxlU2l6ZSwgYnViYmxlQWxpZ25tZW50cyQyKSxcbiAgICAgICAgbGF5b3V0czoge1xuICAgICAgICAgIG9uUnRsOiAoKSA9PiBbbm9ydGhlYXN0XSxcbiAgICAgICAgICBvbkx0cjogKCkgPT4gW25vcnRod2VzdF1cbiAgICAgICAgfSxcbiAgICAgICAgb3ZlcnJpZGVzXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0YW5kYXJkQW5jaG9yID0gKCkgPT4gKHtcbiAgICAgICAgdHlwZTogJ2hvdHNwb3QnLFxuICAgICAgICBob3RzcG90OiBsYXp5QW5jaG9yYmFyKCksXG4gICAgICAgIGJ1YmJsZTogbnUkNSgtYnViYmxlU2l6ZSwgYnViYmxlU2l6ZSwgYnViYmxlQWxpZ25tZW50cyQyKSxcbiAgICAgICAgbGF5b3V0czoge1xuICAgICAgICAgIG9uUnRsOiAoKSA9PiBbXG4gICAgICAgICAgICBzb3V0aGVhc3QkMixcbiAgICAgICAgICAgIHNvdXRod2VzdCQyLFxuICAgICAgICAgICAgc291dGgkMlxuICAgICAgICAgIF0sXG4gICAgICAgICAgb25MdHI6ICgpID0+IFtcbiAgICAgICAgICAgIHNvdXRod2VzdCQyLFxuICAgICAgICAgICAgc291dGhlYXN0JDIsXG4gICAgICAgICAgICBzb3V0aCQyXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBvdmVycmlkZXNcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuICgpID0+IGxhenlVc2VFZGl0YWJsZUFyZWFBbmNob3IoKSA/IGVkaXRhYmxlQXJlYUFuY2hvcigpIDogc3RhbmRhcmRBbmNob3IoKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldElubGluZUJvdHRvbURpYWxvZ0FuY2hvciA9IChpbmxpbmUsIGNvbnRlbnRBcmVhRWxlbWVudCwgbGF6eUJvdHRvbUFuY2hvckJhciwgbGF6eVVzZUVkaXRhYmxlQXJlYUFuY2hvcikgPT4ge1xuICAgICAgY29uc3QgYnViYmxlU2l6ZSA9IDEyO1xuICAgICAgY29uc3Qgb3ZlcnJpZGVzID0geyBtYXhIZWlnaHRGdW5jdGlvbjogZXhwYW5kYWJsZSQxKCkgfTtcbiAgICAgIGNvbnN0IGVkaXRhYmxlQXJlYUFuY2hvciA9ICgpID0+ICh7XG4gICAgICAgIHR5cGU6ICdub2RlJyxcbiAgICAgICAgcm9vdDogZ2V0Q29udGVudENvbnRhaW5lcihnZXRSb290Tm9kZShjb250ZW50QXJlYUVsZW1lbnQoKSkpLFxuICAgICAgICBub2RlOiBPcHRpb25hbC5mcm9tKGNvbnRlbnRBcmVhRWxlbWVudCgpKSxcbiAgICAgICAgYnViYmxlOiBudSQ1KGJ1YmJsZVNpemUsIGJ1YmJsZVNpemUsIGJ1YmJsZUFsaWdubWVudHMkMiksXG4gICAgICAgIGxheW91dHM6IHtcbiAgICAgICAgICBvblJ0bDogKCkgPT4gW25vcnRoXSxcbiAgICAgICAgICBvbkx0cjogKCkgPT4gW25vcnRoXVxuICAgICAgICB9LFxuICAgICAgICBvdmVycmlkZXNcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RhbmRhcmRBbmNob3IgPSAoKSA9PiBpbmxpbmUgPyB7XG4gICAgICAgIHR5cGU6ICdub2RlJyxcbiAgICAgICAgcm9vdDogZ2V0Q29udGVudENvbnRhaW5lcihnZXRSb290Tm9kZShjb250ZW50QXJlYUVsZW1lbnQoKSkpLFxuICAgICAgICBub2RlOiBPcHRpb25hbC5mcm9tKGNvbnRlbnRBcmVhRWxlbWVudCgpKSxcbiAgICAgICAgYnViYmxlOiBudSQ1KDAsIC1nZXRPdXRlciQyKGNvbnRlbnRBcmVhRWxlbWVudCgpKSwgYnViYmxlQWxpZ25tZW50cyQyKSxcbiAgICAgICAgbGF5b3V0czoge1xuICAgICAgICAgIG9uUnRsOiAoKSA9PiBbbm9ydGgkMl0sXG4gICAgICAgICAgb25MdHI6ICgpID0+IFtub3J0aCQyXVxuICAgICAgICB9LFxuICAgICAgICBvdmVycmlkZXNcbiAgICAgIH0gOiB7XG4gICAgICAgIHR5cGU6ICdob3RzcG90JyxcbiAgICAgICAgaG90c3BvdDogbGF6eUJvdHRvbUFuY2hvckJhcigpLFxuICAgICAgICBidWJibGU6IG51JDUoMCwgMCwgYnViYmxlQWxpZ25tZW50cyQyKSxcbiAgICAgICAgbGF5b3V0czoge1xuICAgICAgICAgIG9uUnRsOiAoKSA9PiBbbm9ydGgkMl0sXG4gICAgICAgICAgb25MdHI6ICgpID0+IFtub3J0aCQyXVxuICAgICAgICB9LFxuICAgICAgICBvdmVycmlkZXNcbiAgICAgIH07XG4gICAgICByZXR1cm4gKCkgPT4gbGF6eVVzZUVkaXRhYmxlQXJlYUFuY2hvcigpID8gZWRpdGFibGVBcmVhQW5jaG9yKCkgOiBzdGFuZGFyZEFuY2hvcigpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0QmFubmVyQW5jaG9yID0gKGNvbnRlbnRBcmVhRWxlbWVudCwgbGF6eUFuY2hvcmJhciwgbGF6eVVzZUVkaXRhYmxlQXJlYUFuY2hvcikgPT4ge1xuICAgICAgY29uc3QgZWRpdGFibGVBcmVhQW5jaG9yID0gKCkgPT4gKHtcbiAgICAgICAgdHlwZTogJ25vZGUnLFxuICAgICAgICByb290OiBnZXRDb250ZW50Q29udGFpbmVyKGdldFJvb3ROb2RlKGNvbnRlbnRBcmVhRWxlbWVudCgpKSksXG4gICAgICAgIG5vZGU6IE9wdGlvbmFsLmZyb20oY29udGVudEFyZWFFbGVtZW50KCkpLFxuICAgICAgICBsYXlvdXRzOiB7XG4gICAgICAgICAgb25SdGw6ICgpID0+IFtub3J0aF0sXG4gICAgICAgICAgb25MdHI6ICgpID0+IFtub3J0aF1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzdGFuZGFyZEFuY2hvciA9ICgpID0+ICh7XG4gICAgICAgIHR5cGU6ICdob3RzcG90JyxcbiAgICAgICAgaG90c3BvdDogbGF6eUFuY2hvcmJhcigpLFxuICAgICAgICBsYXlvdXRzOiB7XG4gICAgICAgICAgb25SdGw6ICgpID0+IFtzb3V0aCQyXSxcbiAgICAgICAgICBvbkx0cjogKCkgPT4gW3NvdXRoJDJdXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuICgpID0+IGxhenlVc2VFZGl0YWJsZUFyZWFBbmNob3IoKSA/IGVkaXRhYmxlQXJlYUFuY2hvcigpIDogc3RhbmRhcmRBbmNob3IoKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEN1cnNvckFuY2hvciA9IChlZGl0b3IsIGJvZHlFbGVtZW50KSA9PiAoKSA9PiAoe1xuICAgICAgdHlwZTogJ3NlbGVjdGlvbicsXG4gICAgICByb290OiBib2R5RWxlbWVudCgpLFxuICAgICAgZ2V0U2VsZWN0aW9uOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbHMgPSBlZGl0b3IubW9kZWwudGFibGUuZ2V0U2VsZWN0ZWRDZWxscygpO1xuICAgICAgICBpZiAoc2VsZWN0ZWRDZWxscy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgY29uc3QgZmlyc3RDZWxsID0gc2VsZWN0ZWRDZWxsc1swXTtcbiAgICAgICAgICBjb25zdCBsYXN0Q2VsbCA9IHNlbGVjdGVkQ2VsbHNbc2VsZWN0ZWRDZWxscy5sZW5ndGggLSAxXTtcbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb25UYWJsZUNlbGxSYW5nZSA9IHtcbiAgICAgICAgICAgIGZpcnN0Q2VsbDogU3VnYXJFbGVtZW50LmZyb21Eb20oZmlyc3RDZWxsKSxcbiAgICAgICAgICAgIGxhc3RDZWxsOiBTdWdhckVsZW1lbnQuZnJvbURvbShsYXN0Q2VsbClcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHNlbGVjdGlvblRhYmxlQ2VsbFJhbmdlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShTaW1TZWxlY3Rpb24ucmFuZ2UoU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLnN0YXJ0Q29udGFpbmVyKSwgcm5nLnN0YXJ0T2Zmc2V0LCBTdWdhckVsZW1lbnQuZnJvbURvbShybmcuZW5kQ29udGFpbmVyKSwgcm5nLmVuZE9mZnNldCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGdldE5vZGVBbmNob3IkMSA9IGJvZHlFbGVtZW50ID0+IGVsZW1lbnQgPT4gKHtcbiAgICAgIHR5cGU6ICdub2RlJyxcbiAgICAgIHJvb3Q6IGJvZHlFbGVtZW50KCksXG4gICAgICBub2RlOiBlbGVtZW50XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0QW5jaG9ycyA9IChlZGl0b3IsIGxhenlBbmNob3JiYXIsIGxhenlCb3R0b21BbmNob3JCYXIsIGlzVG9vbGJhclRvcCkgPT4ge1xuICAgICAgY29uc3QgdXNlRml4ZWRUb29sYmFyQ29udGFpbmVyID0gdXNlRml4ZWRDb250YWluZXIoZWRpdG9yKTtcbiAgICAgIGNvbnN0IGJvZHlFbGVtZW50ID0gKCkgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBjb25zdCBjb250ZW50QXJlYUVsZW1lbnQgPSAoKSA9PiBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Q29udGVudEFyZWFDb250YWluZXIoKSk7XG4gICAgICBjb25zdCBsYXp5VXNlRWRpdGFibGVBcmVhQW5jaG9yID0gKCkgPT4gdXNlRml4ZWRUb29sYmFyQ29udGFpbmVyIHx8ICFpc1Rvb2xiYXJUb3AoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlubGluZURpYWxvZzogZ2V0SW5saW5lRGlhbG9nQW5jaG9yKGNvbnRlbnRBcmVhRWxlbWVudCwgbGF6eUFuY2hvcmJhciwgbGF6eVVzZUVkaXRhYmxlQXJlYUFuY2hvciksXG4gICAgICAgIGlubGluZUJvdHRvbURpYWxvZzogZ2V0SW5saW5lQm90dG9tRGlhbG9nQW5jaG9yKGVkaXRvci5pbmxpbmUsIGNvbnRlbnRBcmVhRWxlbWVudCwgbGF6eUJvdHRvbUFuY2hvckJhciwgbGF6eVVzZUVkaXRhYmxlQXJlYUFuY2hvciksXG4gICAgICAgIGJhbm5lcjogZ2V0QmFubmVyQW5jaG9yKGNvbnRlbnRBcmVhRWxlbWVudCwgbGF6eUFuY2hvcmJhciwgbGF6eVVzZUVkaXRhYmxlQXJlYUFuY2hvciksXG4gICAgICAgIGN1cnNvcjogZ2V0Q3Vyc29yQW5jaG9yKGVkaXRvciwgYm9keUVsZW1lbnQpLFxuICAgICAgICBub2RlOiBnZXROb2RlQW5jaG9yJDEoYm9keUVsZW1lbnQpXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBjb2xvclBpY2tlciA9IGVkaXRvciA9PiAoY2FsbGJhY2ssIHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBkaWFsb2cgPSBjb2xvclBpY2tlckRpYWxvZyhlZGl0b3IpO1xuICAgICAgZGlhbG9nKGNhbGxiYWNrLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNDdXN0b21Db2xvcnMgPSBlZGl0b3IgPT4gKCkgPT4gaGFzQ3VzdG9tQ29sb3JzJDEoZWRpdG9yKTtcbiAgICBjb25zdCBnZXRDb2xvcnMgPSBlZGl0b3IgPT4gaWQgPT4gZ2V0Q29sb3JzJDIoZWRpdG9yLCBpZCk7XG4gICAgY29uc3QgZ2V0Q29sb3JDb2xzID0gZWRpdG9yID0+IGlkID0+IGdldENvbG9yQ29scyQxKGVkaXRvciwgaWQpO1xuICAgIGNvbnN0IENvbG9ySW5wdXRCYWNrc3RhZ2UgPSBlZGl0b3IgPT4gKHtcbiAgICAgIGNvbG9yUGlja2VyOiBjb2xvclBpY2tlcihlZGl0b3IpLFxuICAgICAgaGFzQ3VzdG9tQ29sb3JzOiBoYXNDdXN0b21Db2xvcnMoZWRpdG9yKSxcbiAgICAgIGdldENvbG9yczogZ2V0Q29sb3JzKGVkaXRvciksXG4gICAgICBnZXRDb2xvckNvbHM6IGdldENvbG9yQ29scyhlZGl0b3IpXG4gICAgfSk7XG5cbiAgICBjb25zdCBpc0RyYWdnYWJsZU1vZGFsID0gZWRpdG9yID0+ICgpID0+IGlzRHJhZ2dhYmxlTW9kYWwkMShlZGl0b3IpO1xuICAgIGNvbnN0IERpYWxvZ0JhY2tzdGFnZSA9IGVkaXRvciA9PiAoeyBpc0RyYWdnYWJsZU1vZGFsOiBpc0RyYWdnYWJsZU1vZGFsKGVkaXRvcikgfSk7XG5cbiAgICBjb25zdCBIZWFkZXJCYWNrc3RhZ2UgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgbW9kZSA9IENlbGwoaXNUb29sYmFyTG9jYXRpb25Cb3R0b20oZWRpdG9yKSA/ICdib3R0b20nIDogJ3RvcCcpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNQb3NpdGlvbmVkQXRUb3A6ICgpID0+IG1vZGUuZ2V0KCkgPT09ICd0b3AnLFxuICAgICAgICBnZXREb2NraW5nTW9kZTogbW9kZS5nZXQsXG4gICAgICAgIHNldERvY2tpbmdNb2RlOiBtb2RlLnNldFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNOZXN0ZWRGb3JtYXQgPSBmb3JtYXQgPT4gaGFzTm9uTnVsbGFibGVLZXkoZm9ybWF0LCAnaXRlbXMnKTtcbiAgICBjb25zdCBpc0Zvcm1hdFJlZmVyZW5jZSA9IGZvcm1hdCA9PiBoYXNOb25OdWxsYWJsZUtleShmb3JtYXQsICdmb3JtYXQnKTtcbiAgICBjb25zdCBkZWZhdWx0U3R5bGVGb3JtYXRzID0gW1xuICAgICAge1xuICAgICAgICB0aXRsZTogJ0hlYWRpbmdzJyxcbiAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ0hlYWRpbmcgMScsXG4gICAgICAgICAgICBmb3JtYXQ6ICdoMSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiAnSGVhZGluZyAyJyxcbiAgICAgICAgICAgIGZvcm1hdDogJ2gyJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6ICdIZWFkaW5nIDMnLFxuICAgICAgICAgICAgZm9ybWF0OiAnaDMnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ0hlYWRpbmcgNCcsXG4gICAgICAgICAgICBmb3JtYXQ6ICdoNCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiAnSGVhZGluZyA1JyxcbiAgICAgICAgICAgIGZvcm1hdDogJ2g1J1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6ICdIZWFkaW5nIDYnLFxuICAgICAgICAgICAgZm9ybWF0OiAnaDYnXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ0lubGluZScsXG4gICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6ICdCb2xkJyxcbiAgICAgICAgICAgIGZvcm1hdDogJ2JvbGQnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ0l0YWxpYycsXG4gICAgICAgICAgICBmb3JtYXQ6ICdpdGFsaWMnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ1VuZGVybGluZScsXG4gICAgICAgICAgICBmb3JtYXQ6ICd1bmRlcmxpbmUnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ1N0cmlrZXRocm91Z2gnLFxuICAgICAgICAgICAgZm9ybWF0OiAnc3RyaWtldGhyb3VnaCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiAnU3VwZXJzY3JpcHQnLFxuICAgICAgICAgICAgZm9ybWF0OiAnc3VwZXJzY3JpcHQnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ1N1YnNjcmlwdCcsXG4gICAgICAgICAgICBmb3JtYXQ6ICdzdWJzY3JpcHQnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ0NvZGUnLFxuICAgICAgICAgICAgZm9ybWF0OiAnY29kZSdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnQmxvY2tzJyxcbiAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ1BhcmFncmFwaCcsXG4gICAgICAgICAgICBmb3JtYXQ6ICdwJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6ICdCbG9ja3F1b3RlJyxcbiAgICAgICAgICAgIGZvcm1hdDogJ2Jsb2NrcXVvdGUnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ0RpdicsXG4gICAgICAgICAgICBmb3JtYXQ6ICdkaXYnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ1ByZScsXG4gICAgICAgICAgICBmb3JtYXQ6ICdwcmUnXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ0FsaWduJyxcbiAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ0xlZnQnLFxuICAgICAgICAgICAgZm9ybWF0OiAnYWxpZ25sZWZ0J1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6ICdDZW50ZXInLFxuICAgICAgICAgICAgZm9ybWF0OiAnYWxpZ25jZW50ZXInXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ1JpZ2h0JyxcbiAgICAgICAgICAgIGZvcm1hdDogJ2FsaWducmlnaHQnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ0p1c3RpZnknLFxuICAgICAgICAgICAgZm9ybWF0OiAnYWxpZ25qdXN0aWZ5J1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF07XG4gICAgY29uc3QgaXNOZXN0ZWRGb3JtYXRzID0gZm9ybWF0ID0+IGhhcyQyKGZvcm1hdCwgJ2l0ZW1zJyk7XG4gICAgY29uc3QgaXNCbG9ja0Zvcm1hdCA9IGZvcm1hdCA9PiBoYXMkMihmb3JtYXQsICdibG9jaycpO1xuICAgIGNvbnN0IGlzSW5saW5lRm9ybWF0ID0gZm9ybWF0ID0+IGhhcyQyKGZvcm1hdCwgJ2lubGluZScpO1xuICAgIGNvbnN0IGlzU2VsZWN0b3JGb3JtYXQgPSBmb3JtYXQgPT4gaGFzJDIoZm9ybWF0LCAnc2VsZWN0b3InKTtcbiAgICBjb25zdCBtYXBGb3JtYXRzID0gdXNlckZvcm1hdHMgPT4gZm9sZGwodXNlckZvcm1hdHMsIChhY2MsIGZtdCkgPT4ge1xuICAgICAgaWYgKGlzTmVzdGVkRm9ybWF0cyhmbXQpKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG1hcEZvcm1hdHMoZm10Lml0ZW1zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjdXN0b21Gb3JtYXRzOiBhY2MuY3VzdG9tRm9ybWF0cy5jb25jYXQocmVzdWx0LmN1c3RvbUZvcm1hdHMpLFxuICAgICAgICAgIGZvcm1hdHM6IGFjYy5mb3JtYXRzLmNvbmNhdChbe1xuICAgICAgICAgICAgICB0aXRsZTogZm10LnRpdGxlLFxuICAgICAgICAgICAgICBpdGVtczogcmVzdWx0LmZvcm1hdHNcbiAgICAgICAgICAgIH1dKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChpc0lubGluZUZvcm1hdChmbXQpIHx8IGlzQmxvY2tGb3JtYXQoZm10KSB8fCBpc1NlbGVjdG9yRm9ybWF0KGZtdCkpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0TmFtZSA9IGlzU3RyaW5nKGZtdC5uYW1lKSA/IGZtdC5uYW1lIDogZm10LnRpdGxlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGZvcm1hdE5hbWVXaXRoUHJlZml4ID0gYGN1c3RvbS0keyBmb3JtYXROYW1lIH1gO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGN1c3RvbUZvcm1hdHM6IGFjYy5jdXN0b21Gb3JtYXRzLmNvbmNhdChbe1xuICAgICAgICAgICAgICBuYW1lOiBmb3JtYXROYW1lV2l0aFByZWZpeCxcbiAgICAgICAgICAgICAgZm9ybWF0OiBmbXRcbiAgICAgICAgICAgIH1dKSxcbiAgICAgICAgICBmb3JtYXRzOiBhY2MuZm9ybWF0cy5jb25jYXQoW3tcbiAgICAgICAgICAgICAgdGl0bGU6IGZtdC50aXRsZSxcbiAgICAgICAgICAgICAgZm9ybWF0OiBmb3JtYXROYW1lV2l0aFByZWZpeCxcbiAgICAgICAgICAgICAgaWNvbjogZm10Lmljb25cbiAgICAgICAgICAgIH1dKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgZm9ybWF0czogYWNjLmZvcm1hdHMuY29uY2F0KGZtdClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBjdXN0b21Gb3JtYXRzOiBbXSxcbiAgICAgIGZvcm1hdHM6IFtdXG4gICAgfSk7XG4gICAgY29uc3QgcmVnaXN0ZXJDdXN0b21Gb3JtYXRzID0gKGVkaXRvciwgdXNlckZvcm1hdHMpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG1hcEZvcm1hdHModXNlckZvcm1hdHMpO1xuICAgICAgY29uc3QgcmVnaXN0ZXJGb3JtYXRzID0gY3VzdG9tRm9ybWF0cyA9PiB7XG4gICAgICAgIGVhY2gkMShjdXN0b21Gb3JtYXRzLCBmbXQgPT4ge1xuICAgICAgICAgIGlmICghZWRpdG9yLmZvcm1hdHRlci5oYXMoZm10Lm5hbWUpKSB7XG4gICAgICAgICAgICBlZGl0b3IuZm9ybWF0dGVyLnJlZ2lzdGVyKGZtdC5uYW1lLCBmbXQuZm9ybWF0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGlmIChlZGl0b3IuZm9ybWF0dGVyKSB7XG4gICAgICAgIHJlZ2lzdGVyRm9ybWF0cyhyZXN1bHQuY3VzdG9tRm9ybWF0cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGl0b3Iub24oJ2luaXQnLCAoKSA9PiB7XG4gICAgICAgICAgcmVnaXN0ZXJGb3JtYXRzKHJlc3VsdC5jdXN0b21Gb3JtYXRzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0LmZvcm1hdHM7XG4gICAgfTtcbiAgICBjb25zdCBnZXRTdHlsZUZvcm1hdHMgPSBlZGl0b3IgPT4gZ2V0VXNlclN0eWxlRm9ybWF0cyhlZGl0b3IpLm1hcCh1c2VyRm9ybWF0cyA9PiB7XG4gICAgICBjb25zdCByZWdpc3RlcmVkVXNlckZvcm1hdHMgPSByZWdpc3RlckN1c3RvbUZvcm1hdHMoZWRpdG9yLCB1c2VyRm9ybWF0cyk7XG4gICAgICByZXR1cm4gc2hvdWxkTWVyZ2VTdHlsZUZvcm1hdHMoZWRpdG9yKSA/IGRlZmF1bHRTdHlsZUZvcm1hdHMuY29uY2F0KHJlZ2lzdGVyZWRVc2VyRm9ybWF0cykgOiByZWdpc3RlcmVkVXNlckZvcm1hdHM7XG4gICAgfSkuZ2V0T3IoZGVmYXVsdFN0eWxlRm9ybWF0cyk7XG5cbiAgICBjb25zdCBpc1NlcGFyYXRvciQxID0gZm9ybWF0ID0+IHtcbiAgICAgIGNvbnN0IGtleXMkMSA9IGtleXMoZm9ybWF0KTtcbiAgICAgIHJldHVybiBrZXlzJDEubGVuZ3RoID09PSAxICYmIGNvbnRhaW5zJDIoa2V5cyQxLCAndGl0bGUnKTtcbiAgICB9O1xuICAgIGNvbnN0IHByb2Nlc3NCYXNpYyA9IChpdGVtLCBpc1NlbGVjdGVkRm9yLCBnZXRQcmV2aWV3Rm9yKSA9PiAoe1xuICAgICAgLi4uaXRlbSxcbiAgICAgIHR5cGU6ICdmb3JtYXR0ZXInLFxuICAgICAgaXNTZWxlY3RlZDogaXNTZWxlY3RlZEZvcihpdGVtLmZvcm1hdCksXG4gICAgICBnZXRTdHlsZVByZXZpZXc6IGdldFByZXZpZXdGb3IoaXRlbS5mb3JtYXQpXG4gICAgfSk7XG4gICAgY29uc3QgcmVnaXN0ZXIkYSA9IChlZGl0b3IsIGZvcm1hdHMsIGlzU2VsZWN0ZWRGb3IsIGdldFByZXZpZXdGb3IpID0+IHtcbiAgICAgIGNvbnN0IGVucmljaFN1cHBvcnRlZCA9IGl0ZW0gPT4gcHJvY2Vzc0Jhc2ljKGl0ZW0sIGlzU2VsZWN0ZWRGb3IsIGdldFByZXZpZXdGb3IpO1xuICAgICAgY29uc3QgZW5yaWNoTWVudSA9IGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBuZXdJdGVtcyA9IGRvRW5yaWNoKGl0ZW0uaXRlbXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgdHlwZTogJ3N1Ym1lbnUnLFxuICAgICAgICAgIGdldFN0eWxlSXRlbXM6IGNvbnN0YW50JDEobmV3SXRlbXMpXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uc3QgZW5yaWNoQ3VzdG9tID0gaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IGZvcm1hdE5hbWUgPSBpc1N0cmluZyhpdGVtLm5hbWUpID8gaXRlbS5uYW1lIDogZ2VuZXJhdGUkNihpdGVtLnRpdGxlKTtcbiAgICAgICAgY29uc3QgZm9ybWF0TmFtZVdpdGhQcmVmaXggPSBgY3VzdG9tLSR7IGZvcm1hdE5hbWUgfWA7XG4gICAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7XG4gICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICB0eXBlOiAnZm9ybWF0dGVyJyxcbiAgICAgICAgICBmb3JtYXQ6IGZvcm1hdE5hbWVXaXRoUHJlZml4LFxuICAgICAgICAgIGlzU2VsZWN0ZWQ6IGlzU2VsZWN0ZWRGb3IoZm9ybWF0TmFtZVdpdGhQcmVmaXgpLFxuICAgICAgICAgIGdldFN0eWxlUHJldmlldzogZ2V0UHJldmlld0Zvcihmb3JtYXROYW1lV2l0aFByZWZpeClcbiAgICAgICAgfTtcbiAgICAgICAgZWRpdG9yLmZvcm1hdHRlci5yZWdpc3Rlcihmb3JtYXROYW1lLCBuZXdJdGVtKTtcbiAgICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgICB9O1xuICAgICAgY29uc3QgZG9FbnJpY2ggPSBpdGVtcyA9PiBtYXAkMihpdGVtcywgaXRlbSA9PiB7XG4gICAgICAgIGlmIChpc05lc3RlZEZvcm1hdChpdGVtKSkge1xuICAgICAgICAgIHJldHVybiBlbnJpY2hNZW51KGl0ZW0pO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRm9ybWF0UmVmZXJlbmNlKGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuIGVucmljaFN1cHBvcnRlZChpdGVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1NlcGFyYXRvciQxKGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICB0eXBlOiAnc2VwYXJhdG9yJ1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGVucmljaEN1c3RvbShpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZG9FbnJpY2goZm9ybWF0cyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGluaXQkNyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBpc1NlbGVjdGVkRm9yID0gZm9ybWF0ID0+ICgpID0+IGVkaXRvci5mb3JtYXR0ZXIubWF0Y2goZm9ybWF0KTtcbiAgICAgIGNvbnN0IGdldFByZXZpZXdGb3IgPSBmb3JtYXQgPT4gKCkgPT4ge1xuICAgICAgICBjb25zdCBmbXQgPSBlZGl0b3IuZm9ybWF0dGVyLmdldChmb3JtYXQpO1xuICAgICAgICByZXR1cm4gZm10ICE9PSB1bmRlZmluZWQgPyBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICB0YWc6IGZtdC5sZW5ndGggPiAwID8gZm10WzBdLmlubGluZSB8fCBmbXRbMF0uYmxvY2sgfHwgJ2RpdicgOiAnZGl2JyxcbiAgICAgICAgICBzdHlsZXM6IGVkaXRvci5kb20ucGFyc2VTdHlsZShlZGl0b3IuZm9ybWF0dGVyLmdldENzc1RleHQoZm9ybWF0KSlcbiAgICAgICAgfSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0dGluZ3NGb3JtYXRzID0gQ2VsbChbXSk7XG4gICAgICBjb25zdCBldmVudHNGb3JtYXRzID0gQ2VsbChbXSk7XG4gICAgICBjb25zdCByZXBsYWNlU2V0dGluZ3MgPSBDZWxsKGZhbHNlKTtcbiAgICAgIGVkaXRvci5vbignUHJlSW5pdCcsIF9lID0+IHtcbiAgICAgICAgY29uc3QgZm9ybWF0cyA9IGdldFN0eWxlRm9ybWF0cyhlZGl0b3IpO1xuICAgICAgICBjb25zdCBlbnJpY2hlZCA9IHJlZ2lzdGVyJGEoZWRpdG9yLCBmb3JtYXRzLCBpc1NlbGVjdGVkRm9yLCBnZXRQcmV2aWV3Rm9yKTtcbiAgICAgICAgc2V0dGluZ3NGb3JtYXRzLnNldChlbnJpY2hlZCk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignYWRkU3R5bGVNb2RpZmljYXRpb25zJywgZSA9PiB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWNhdGlvbnMgPSByZWdpc3RlciRhKGVkaXRvciwgZS5pdGVtcywgaXNTZWxlY3RlZEZvciwgZ2V0UHJldmlld0Zvcik7XG4gICAgICAgIGV2ZW50c0Zvcm1hdHMuc2V0KG1vZGlmaWNhdGlvbnMpO1xuICAgICAgICByZXBsYWNlU2V0dGluZ3Muc2V0KGUucmVwbGFjZSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGdldERhdGEgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZyb21TZXR0aW5ncyA9IHJlcGxhY2VTZXR0aW5ncy5nZXQoKSA/IFtdIDogc2V0dGluZ3NGb3JtYXRzLmdldCgpO1xuICAgICAgICBjb25zdCBmcm9tRXZlbnRzID0gZXZlbnRzRm9ybWF0cy5nZXQoKTtcbiAgICAgICAgcmV0dXJuIGZyb21TZXR0aW5ncy5jb25jYXQoZnJvbUV2ZW50cyk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgZ2V0RGF0YSB9O1xuICAgIH07XG5cbiAgICBjb25zdCBpc0VsZW1lbnQgPSBub2RlID0+IGlzTm9uTnVsbGFibGUobm9kZSkgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMTtcbiAgICBjb25zdCB0cmltID0gZ2xvYmFsJDEudHJpbTtcbiAgICBjb25zdCBoYXNDb250ZW50RWRpdGFibGVTdGF0ZSA9IHZhbHVlID0+IHtcbiAgICAgIHJldHVybiBub2RlID0+IHtcbiAgICAgICAgaWYgKGlzRWxlbWVudChub2RlKSkge1xuICAgICAgICAgIGlmIChub2RlLmNvbnRlbnRFZGl0YWJsZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWNlLWNvbnRlbnRlZGl0YWJsZScpID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBpc0NvbnRlbnRFZGl0YWJsZVRydWUgPSBoYXNDb250ZW50RWRpdGFibGVTdGF0ZSgndHJ1ZScpO1xuICAgIGNvbnN0IGlzQ29udGVudEVkaXRhYmxlRmFsc2UgPSBoYXNDb250ZW50RWRpdGFibGVTdGF0ZSgnZmFsc2UnKTtcbiAgICBjb25zdCBjcmVhdGUkMSA9ICh0eXBlLCB0aXRsZSwgdXJsLCBsZXZlbCwgYXR0YWNoKSA9PiAoe1xuICAgICAgdHlwZSxcbiAgICAgIHRpdGxlLFxuICAgICAgdXJsLFxuICAgICAgbGV2ZWwsXG4gICAgICBhdHRhY2hcbiAgICB9KTtcbiAgICBjb25zdCBpc0NoaWxkT2ZDb250ZW50RWRpdGFibGVUcnVlID0gbm9kZSA9PiB7XG4gICAgICBsZXQgdGVtcE5vZGUgPSBub2RlO1xuICAgICAgd2hpbGUgKHRlbXBOb2RlID0gdGVtcE5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRlbXBOb2RlLmNvbnRlbnRFZGl0YWJsZTtcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlICE9PSAnaW5oZXJpdCcpIHtcbiAgICAgICAgICByZXR1cm4gaXNDb250ZW50RWRpdGFibGVUcnVlKHRlbXBOb2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgY29uc3Qgc2VsZWN0ID0gKHNlbGVjdG9yLCByb290KSA9PiB7XG4gICAgICByZXR1cm4gbWFwJDIoZGVzY2VuZGFudHMoU3VnYXJFbGVtZW50LmZyb21Eb20ocm9vdCksIHNlbGVjdG9yKSwgZWxlbWVudCA9PiB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmRvbTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0RWxlbWVudFRleHQgPSBlbG0gPT4ge1xuICAgICAgcmV0dXJuIGVsbS5pbm5lclRleHQgfHwgZWxtLnRleHRDb250ZW50O1xuICAgIH07XG4gICAgY29uc3QgZ2V0T3JHZW5lcmF0ZUlkID0gZWxtID0+IHtcbiAgICAgIHJldHVybiBlbG0uaWQgPyBlbG0uaWQgOiBnZW5lcmF0ZSQ2KCdoJyk7XG4gICAgfTtcbiAgICBjb25zdCBpc0FuY2hvciA9IGVsbSA9PiB7XG4gICAgICByZXR1cm4gZWxtICYmIGVsbS5ub2RlTmFtZSA9PT0gJ0EnICYmIChlbG0uaWQgfHwgZWxtLm5hbWUpICE9PSB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBjb25zdCBpc1ZhbGlkQW5jaG9yID0gZWxtID0+IHtcbiAgICAgIHJldHVybiBpc0FuY2hvcihlbG0pICYmIGlzRWRpdGFibGUoZWxtKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzSGVhZGVyID0gZWxtID0+IHtcbiAgICAgIHJldHVybiBlbG0gJiYgL14oSFsxLTZdKSQvLnRlc3QoZWxtLm5vZGVOYW1lKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzRWRpdGFibGUgPSBlbG0gPT4ge1xuICAgICAgcmV0dXJuIGlzQ2hpbGRPZkNvbnRlbnRFZGl0YWJsZVRydWUoZWxtKSAmJiAhaXNDb250ZW50RWRpdGFibGVGYWxzZShlbG0pO1xuICAgIH07XG4gICAgY29uc3QgaXNWYWxpZEhlYWRlciA9IGVsbSA9PiB7XG4gICAgICByZXR1cm4gaXNIZWFkZXIoZWxtKSAmJiBpc0VkaXRhYmxlKGVsbSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRMZXZlbCA9IGVsbSA9PiB7XG4gICAgICByZXR1cm4gaXNIZWFkZXIoZWxtKSA/IHBhcnNlSW50KGVsbS5ub2RlTmFtZS5zdWJzdHIoMSksIDEwKSA6IDA7XG4gICAgfTtcbiAgICBjb25zdCBoZWFkZXJUYXJnZXQgPSBlbG0gPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgaGVhZGVySWQgPSBnZXRPckdlbmVyYXRlSWQoZWxtKTtcbiAgICAgIGNvbnN0IGF0dGFjaCA9ICgpID0+IHtcbiAgICAgICAgZWxtLmlkID0gaGVhZGVySWQ7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGNyZWF0ZSQxKCdoZWFkZXInLCAoX2EgPSBnZXRFbGVtZW50VGV4dChlbG0pKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJywgJyMnICsgaGVhZGVySWQsIGdldExldmVsKGVsbSksIGF0dGFjaCk7XG4gICAgfTtcbiAgICBjb25zdCBhbmNob3JUYXJnZXQgPSBlbG0gPT4ge1xuICAgICAgY29uc3QgYW5jaG9ySWQgPSBlbG0uaWQgfHwgZWxtLm5hbWU7XG4gICAgICBjb25zdCBhbmNob3JUZXh0ID0gZ2V0RWxlbWVudFRleHQoZWxtKTtcbiAgICAgIHJldHVybiBjcmVhdGUkMSgnYW5jaG9yJywgYW5jaG9yVGV4dCA/IGFuY2hvclRleHQgOiAnIycgKyBhbmNob3JJZCwgJyMnICsgYW5jaG9ySWQsIDAsIG5vb3ApO1xuICAgIH07XG4gICAgY29uc3QgZ2V0SGVhZGVyVGFyZ2V0cyA9IGVsbXMgPT4ge1xuICAgICAgcmV0dXJuIG1hcCQyKGZpbHRlciQyKGVsbXMsIGlzVmFsaWRIZWFkZXIpLCBoZWFkZXJUYXJnZXQpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0QW5jaG9yVGFyZ2V0cyA9IGVsbXMgPT4ge1xuICAgICAgcmV0dXJuIG1hcCQyKGZpbHRlciQyKGVsbXMsIGlzVmFsaWRBbmNob3IpLCBhbmNob3JUYXJnZXQpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0VGFyZ2V0RWxlbWVudHMgPSBlbG0gPT4ge1xuICAgICAgY29uc3QgZWxtcyA9IHNlbGVjdCgnaDEsaDIsaDMsaDQsaDUsaDYsYTpub3QoW2hyZWZdKScsIGVsbSk7XG4gICAgICByZXR1cm4gZWxtcztcbiAgICB9O1xuICAgIGNvbnN0IGhhc1RpdGxlID0gdGFyZ2V0ID0+IHtcbiAgICAgIHJldHVybiB0cmltKHRhcmdldC50aXRsZSkubGVuZ3RoID4gMDtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmQgPSBlbG0gPT4ge1xuICAgICAgY29uc3QgZWxtcyA9IGdldFRhcmdldEVsZW1lbnRzKGVsbSk7XG4gICAgICByZXR1cm4gZmlsdGVyJDIoZ2V0SGVhZGVyVGFyZ2V0cyhlbG1zKS5jb25jYXQoZ2V0QW5jaG9yVGFyZ2V0cyhlbG1zKSksIGhhc1RpdGxlKTtcbiAgICB9O1xuICAgIGNvbnN0IExpbmtUYXJnZXRzID0geyBmaW5kIH07XG5cbiAgICBjb25zdCBTVE9SQUdFX0tFWSA9ICd0aW55bWNlLXVybC1oaXN0b3J5JztcbiAgICBjb25zdCBISVNUT1JZX0xFTkdUSCA9IDU7XG4gICAgY29uc3QgaXNIdHRwVXJsID0gdXJsID0+IGlzU3RyaW5nKHVybCkgJiYgL15odHRwcz8vLnRlc3QodXJsKTtcbiAgICBjb25zdCBpc0FycmF5T2ZVcmwgPSBhID0+IGlzQXJyYXkoYSkgJiYgYS5sZW5ndGggPD0gSElTVE9SWV9MRU5HVEggJiYgZm9yYWxsKGEsIGlzSHR0cFVybCk7XG4gICAgY29uc3QgaXNSZWNvcmRPZlVybEFycmF5ID0gciA9PiBpc09iamVjdChyKSAmJiBmaW5kJDQociwgdmFsdWUgPT4gIWlzQXJyYXlPZlVybCh2YWx1ZSkpLmlzTm9uZSgpO1xuICAgIGNvbnN0IGdldEFsbEhpc3RvcnkgPSAoKSA9PiB7XG4gICAgICBjb25zdCB1bnBhcnNlZEhpc3RvcnkgPSBnbG9iYWwkNC5nZXRJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgIGlmICh1bnBhcnNlZEhpc3RvcnkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgbGV0IGhpc3Rvcnk7XG4gICAgICB0cnkge1xuICAgICAgICBoaXN0b3J5ID0gSlNPTi5wYXJzZSh1bnBhcnNlZEhpc3RvcnkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0xvY2FsIHN0b3JhZ2UgJyArIFNUT1JBR0VfS0VZICsgJyB3YXMgbm90IHZhbGlkIEpTT04nLCBlKTtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNSZWNvcmRPZlVybEFycmF5KGhpc3RvcnkpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdMb2NhbCBzdG9yYWdlICcgKyBTVE9SQUdFX0tFWSArICcgd2FzIG5vdCB2YWxpZCBmb3JtYXQnLCBoaXN0b3J5KTtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhpc3Rvcnk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRBbGxIaXN0b3J5ID0gaGlzdG9yeSA9PiB7XG4gICAgICBpZiAoIWlzUmVjb3JkT2ZVcmxBcnJheShoaXN0b3J5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JhZCBmb3JtYXQgZm9yIGhpc3Rvcnk6XFxuJyArIEpTT04uc3RyaW5naWZ5KGhpc3RvcnkpKTtcbiAgICAgIH1cbiAgICAgIGdsb2JhbCQ0LnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KGhpc3RvcnkpKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEhpc3RvcnkgPSBmaWxlVHlwZSA9PiB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gZ2V0QWxsSGlzdG9yeSgpO1xuICAgICAgcmV0dXJuIGdldCRnKGhpc3RvcnksIGZpbGVUeXBlKS5nZXRPcihbXSk7XG4gICAgfTtcbiAgICBjb25zdCBhZGRUb0hpc3RvcnkgPSAodXJsLCBmaWxlVHlwZSkgPT4ge1xuICAgICAgaWYgKCFpc0h0dHBVcmwodXJsKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBoaXN0b3J5ID0gZ2V0QWxsSGlzdG9yeSgpO1xuICAgICAgY29uc3QgaXRlbXMgPSBnZXQkZyhoaXN0b3J5LCBmaWxlVHlwZSkuZ2V0T3IoW10pO1xuICAgICAgY29uc3QgaXRlbXNXaXRob3V0VXJsID0gZmlsdGVyJDIoaXRlbXMsIGl0ZW0gPT4gaXRlbSAhPT0gdXJsKTtcbiAgICAgIGhpc3RvcnlbZmlsZVR5cGVdID0gW3VybF0uY29uY2F0KGl0ZW1zV2l0aG91dFVybCkuc2xpY2UoMCwgSElTVE9SWV9MRU5HVEgpO1xuICAgICAgc2V0QWxsSGlzdG9yeShoaXN0b3J5KTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNUcnV0aHkgPSB2YWx1ZSA9PiAhIXZhbHVlO1xuICAgIGNvbnN0IG1ha2VNYXAgPSB2YWx1ZSA9PiBtYXAkMShnbG9iYWwkMS5tYWtlTWFwKHZhbHVlLCAvWywgXS8pLCBpc1RydXRoeSk7XG4gICAgY29uc3QgZ2V0UGlja2VyID0gZWRpdG9yID0+IE9wdGlvbmFsLmZyb20oZ2V0RmlsZVBpY2tlckNhbGxiYWNrKGVkaXRvcikpO1xuICAgIGNvbnN0IGdldFBpY2tlclR5cGVzID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IG9wdEZpbGVUeXBlcyA9IE9wdGlvbmFsLmZyb20oZ2V0RmlsZVBpY2tlclR5cGVzKGVkaXRvcikpLmZpbHRlcihpc1RydXRoeSkubWFwKG1ha2VNYXApO1xuICAgICAgcmV0dXJuIGdldFBpY2tlcihlZGl0b3IpLmZvbGQobmV2ZXIsIF9waWNrZXIgPT4gb3B0RmlsZVR5cGVzLmZvbGQoYWx3YXlzLCB0eXBlcyA9PiBrZXlzKHR5cGVzKS5sZW5ndGggPiAwID8gdHlwZXMgOiBmYWxzZSkpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0UGlja2VyU2V0dGluZyA9IChlZGl0b3IsIGZpbGV0eXBlKSA9PiB7XG4gICAgICBjb25zdCBwaWNrZXJUeXBlcyA9IGdldFBpY2tlclR5cGVzKGVkaXRvcik7XG4gICAgICBpZiAoaXNCb29sZWFuKHBpY2tlclR5cGVzKSkge1xuICAgICAgICByZXR1cm4gcGlja2VyVHlwZXMgPyBnZXRQaWNrZXIoZWRpdG9yKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwaWNrZXJUeXBlc1tmaWxldHlwZV0gPyBnZXRQaWNrZXIoZWRpdG9yKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdldFVybFBpY2tlciA9IChlZGl0b3IsIGZpbGV0eXBlKSA9PiBnZXRQaWNrZXJTZXR0aW5nKGVkaXRvciwgZmlsZXR5cGUpLm1hcChwaWNrZXIgPT4gZW50cnkgPT4gRnV0dXJlLm51KGNvbXBsZXRlciA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gKHZhbHVlLCBtZXRhKSA9PiB7XG4gICAgICAgIGlmICghaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB2YWx1ZSB0byBiZSBzdHJpbmcnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YSAhPT0gdW5kZWZpbmVkICYmICFpc09iamVjdChtZXRhKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgbWV0YSB0byBiZSBhIG9iamVjdCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHIgPSB7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgbWV0YVxuICAgICAgICB9O1xuICAgICAgICBjb21wbGV0ZXIocik7XG4gICAgICB9O1xuICAgICAgY29uc3QgbWV0YSA9IHtcbiAgICAgICAgZmlsZXR5cGUsXG4gICAgICAgIGZpZWxkbmFtZTogZW50cnkuZmllbGRuYW1lLFxuICAgICAgICAuLi5PcHRpb25hbC5mcm9tKGVudHJ5Lm1ldGEpLmdldE9yKHt9KVxuICAgICAgfTtcbiAgICAgIHBpY2tlci5jYWxsKGVkaXRvciwgaGFuZGxlciwgZW50cnkudmFsdWUsIG1ldGEpO1xuICAgIH0pKTtcbiAgICBjb25zdCBnZXRUZXh0U2V0dGluZyA9IHZhbHVlID0+IE9wdGlvbmFsLmZyb20odmFsdWUpLmZpbHRlcihpc1N0cmluZykuZ2V0T3JVbmRlZmluZWQoKTtcbiAgICBjb25zdCBnZXRMaW5rSW5mb3JtYXRpb24gPSBlZGl0b3IgPT4ge1xuICAgICAgaWYgKCF1c2VUeXBlYWhlYWRVcmxzKGVkaXRvcikpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgdGFyZ2V0czogTGlua1RhcmdldHMuZmluZChlZGl0b3IuZ2V0Qm9keSgpKSxcbiAgICAgICAgYW5jaG9yVG9wOiBnZXRUZXh0U2V0dGluZyhnZXRBbmNob3JUb3AoZWRpdG9yKSksXG4gICAgICAgIGFuY2hvckJvdHRvbTogZ2V0VGV4dFNldHRpbmcoZ2V0QW5jaG9yQm90dG9tKGVkaXRvcikpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFZhbGlkYXRpb25IYW5kbGVyID0gZWRpdG9yID0+IE9wdGlvbmFsLmZyb20oZ2V0RmlsZVBpY2tlclZhbGlkYXRvckhhbmRsZXIoZWRpdG9yKSk7XG4gICAgY29uc3QgVXJsSW5wdXRCYWNrc3RhZ2UgPSBlZGl0b3IgPT4gKHtcbiAgICAgIGdldEhpc3RvcnksXG4gICAgICBhZGRUb0hpc3RvcnksXG4gICAgICBnZXRMaW5rSW5mb3JtYXRpb246ICgpID0+IGdldExpbmtJbmZvcm1hdGlvbihlZGl0b3IpLFxuICAgICAgZ2V0VmFsaWRhdGlvbkhhbmRsZXI6ICgpID0+IGdldFZhbGlkYXRpb25IYW5kbGVyKGVkaXRvciksXG4gICAgICBnZXRVcmxQaWNrZXI6IGZpbGV0eXBlID0+IGdldFVybFBpY2tlcihlZGl0b3IsIGZpbGV0eXBlKVxuICAgIH0pO1xuXG4gICAgY29uc3QgaW5pdCQ2ID0gKGxhenlTaW5rcywgZWRpdG9yLCBsYXp5QW5jaG9yYmFyLCBsYXp5Qm90dG9tQW5jaG9yQmFyKSA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0TWVudVN0YXRlID0gQ2VsbChmYWxzZSk7XG4gICAgICBjb25zdCB0b29sYmFyID0gSGVhZGVyQmFja3N0YWdlKGVkaXRvcik7XG4gICAgICBjb25zdCBwcm92aWRlcnMgPSB7XG4gICAgICAgIGljb25zOiAoKSA9PiBlZGl0b3IudWkucmVnaXN0cnkuZ2V0QWxsKCkuaWNvbnMsXG4gICAgICAgIG1lbnVJdGVtczogKCkgPT4gZWRpdG9yLnVpLnJlZ2lzdHJ5LmdldEFsbCgpLm1lbnVJdGVtcyxcbiAgICAgICAgdHJhbnNsYXRlOiBnbG9iYWwkOC50cmFuc2xhdGUsXG4gICAgICAgIGlzRGlzYWJsZWQ6ICgpID0+IGVkaXRvci5tb2RlLmlzUmVhZE9ubHkoKSB8fCAhZWRpdG9yLnVpLmlzRW5hYmxlZCgpLFxuICAgICAgICBnZXRPcHRpb246IGVkaXRvci5vcHRpb25zLmdldFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHVybGlucHV0ID0gVXJsSW5wdXRCYWNrc3RhZ2UoZWRpdG9yKTtcbiAgICAgIGNvbnN0IHN0eWxlcyA9IGluaXQkNyhlZGl0b3IpO1xuICAgICAgY29uc3QgY29sb3JpbnB1dCA9IENvbG9ySW5wdXRCYWNrc3RhZ2UoZWRpdG9yKTtcbiAgICAgIGNvbnN0IGRpYWxvZ1NldHRpbmdzID0gRGlhbG9nQmFja3N0YWdlKGVkaXRvcik7XG4gICAgICBjb25zdCBpc0NvbnRleHRNZW51T3BlbiA9ICgpID0+IGNvbnRleHRNZW51U3RhdGUuZ2V0KCk7XG4gICAgICBjb25zdCBzZXRDb250ZXh0TWVudVN0YXRlID0gc3RhdGUgPT4gY29udGV4dE1lbnVTdGF0ZS5zZXQoc3RhdGUpO1xuICAgICAgY29uc3QgY29tbW9uQmFja3N0YWdlID0ge1xuICAgICAgICBzaGFyZWQ6IHtcbiAgICAgICAgICBwcm92aWRlcnMsXG4gICAgICAgICAgYW5jaG9yczogZ2V0QW5jaG9ycyhlZGl0b3IsIGxhenlBbmNob3JiYXIsIGxhenlCb3R0b21BbmNob3JCYXIsIHRvb2xiYXIuaXNQb3NpdGlvbmVkQXRUb3ApLFxuICAgICAgICAgIGhlYWRlcjogdG9vbGJhclxuICAgICAgICB9LFxuICAgICAgICB1cmxpbnB1dCxcbiAgICAgICAgc3R5bGVzLFxuICAgICAgICBjb2xvcmlucHV0LFxuICAgICAgICBkaWFsb2c6IGRpYWxvZ1NldHRpbmdzLFxuICAgICAgICBpc0NvbnRleHRNZW51T3BlbixcbiAgICAgICAgc2V0Q29udGV4dE1lbnVTdGF0ZVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBvcHVwQmFja3N0YWdlID0ge1xuICAgICAgICAuLi5jb21tb25CYWNrc3RhZ2UsXG4gICAgICAgIHNoYXJlZDoge1xuICAgICAgICAgIC4uLmNvbW1vbkJhY2tzdGFnZS5zaGFyZWQsXG4gICAgICAgICAgaW50ZXJwcmV0ZXI6IHMgPT4gaW50ZXJwcmV0V2l0aG91dEZvcm0ocywge30sIHBvcHVwQmFja3N0YWdlKSxcbiAgICAgICAgICBnZXRTaW5rOiBsYXp5U2lua3MucG9wdXBcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGRpYWxvZ0JhY2tzdGFnZSA9IHtcbiAgICAgICAgLi4uY29tbW9uQmFja3N0YWdlLFxuICAgICAgICBzaGFyZWQ6IHtcbiAgICAgICAgICAuLi5jb21tb25CYWNrc3RhZ2Uuc2hhcmVkLFxuICAgICAgICAgIGludGVycHJldGVyOiBzID0+IGludGVycHJldFdpdGhvdXRGb3JtKHMsIHt9LCBkaWFsb2dCYWNrc3RhZ2UpLFxuICAgICAgICAgIGdldFNpbms6IGxhenlTaW5rcy5kaWFsb2dcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBvcHVwOiBwb3B1cEJhY2tzdGFnZSxcbiAgICAgICAgZGlhbG9nOiBkaWFsb2dCYWNrc3RhZ2VcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHNldHVwJGIgPSAoZWRpdG9yLCBtb3RoZXJzaGlwLCB1aU1vdGhlcnNoaXBzKSA9PiB7XG4gICAgICBjb25zdCBicm9hZGNhc3RFdmVudCA9IChuYW1lLCBldnQpID0+IHtcbiAgICAgICAgZWFjaCQxKFtcbiAgICAgICAgICBtb3RoZXJzaGlwLFxuICAgICAgICAgIC4uLnVpTW90aGVyc2hpcHNcbiAgICAgICAgXSwgbSA9PiB7XG4gICAgICAgICAgbS5icm9hZGNhc3RFdmVudChuYW1lLCBldnQpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBicm9hZGNhc3RPbiA9IChjaGFubmVsLCBtZXNzYWdlKSA9PiB7XG4gICAgICAgIGVhY2gkMShbXG4gICAgICAgICAgbW90aGVyc2hpcCxcbiAgICAgICAgICAuLi51aU1vdGhlcnNoaXBzXG4gICAgICAgIF0sIG0gPT4ge1xuICAgICAgICAgIG0uYnJvYWRjYXN0T24oW2NoYW5uZWxdLCBtZXNzYWdlKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZmlyZURpc21pc3NQb3B1cHMgPSBldnQgPT4gYnJvYWRjYXN0T24oZGlzbWlzc1BvcHVwcygpLCB7IHRhcmdldDogZXZ0LnRhcmdldCB9KTtcbiAgICAgIGNvbnN0IGRvYyA9IGdldERvY3VtZW50KCk7XG4gICAgICBjb25zdCBvblRvdWNoc3RhcnQgPSBiaW5kKGRvYywgJ3RvdWNoc3RhcnQnLCBmaXJlRGlzbWlzc1BvcHVwcyk7XG4gICAgICBjb25zdCBvblRvdWNobW92ZSA9IGJpbmQoZG9jLCAndG91Y2htb3ZlJywgZXZ0ID0+IGJyb2FkY2FzdEV2ZW50KGRvY3VtZW50VG91Y2htb3ZlKCksIGV2dCkpO1xuICAgICAgY29uc3Qgb25Ub3VjaGVuZCA9IGJpbmQoZG9jLCAndG91Y2hlbmQnLCBldnQgPT4gYnJvYWRjYXN0RXZlbnQoZG9jdW1lbnRUb3VjaGVuZCgpLCBldnQpKTtcbiAgICAgIGNvbnN0IG9uTW91c2Vkb3duID0gYmluZChkb2MsICdtb3VzZWRvd24nLCBmaXJlRGlzbWlzc1BvcHVwcyk7XG4gICAgICBjb25zdCBvbk1vdXNldXAgPSBiaW5kKGRvYywgJ21vdXNldXAnLCBldnQgPT4ge1xuICAgICAgICBpZiAoZXZ0LnJhdy5idXR0b24gPT09IDApIHtcbiAgICAgICAgICBicm9hZGNhc3RPbihtb3VzZVJlbGVhc2VkKCksIHsgdGFyZ2V0OiBldnQudGFyZ2V0IH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG9uQ29udGVudENsaWNrID0gcmF3ID0+IGJyb2FkY2FzdE9uKGRpc21pc3NQb3B1cHMoKSwgeyB0YXJnZXQ6IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJhdy50YXJnZXQpIH0pO1xuICAgICAgY29uc3Qgb25Db250ZW50TW91c2V1cCA9IHJhdyA9PiB7XG4gICAgICAgIGlmIChyYXcuYnV0dG9uID09PSAwKSB7XG4gICAgICAgICAgYnJvYWRjYXN0T24obW91c2VSZWxlYXNlZCgpLCB7IHRhcmdldDogU3VnYXJFbGVtZW50LmZyb21Eb20ocmF3LnRhcmdldCkgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBvbkNvbnRlbnRNb3VzZWRvd24gPSAoKSA9PiB7XG4gICAgICAgIGVhY2gkMShlZGl0b3IuZWRpdG9yTWFuYWdlci5nZXQoKSwgbG9vcEVkaXRvciA9PiB7XG4gICAgICAgICAgaWYgKGVkaXRvciAhPT0gbG9vcEVkaXRvcikge1xuICAgICAgICAgICAgbG9vcEVkaXRvci5kaXNwYXRjaCgnRGlzbWlzc1BvcHVwcycsIHsgcmVsYXRlZFRhcmdldDogZWRpdG9yIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25XaW5kb3dTY3JvbGwgPSBldnQgPT4gYnJvYWRjYXN0RXZlbnQod2luZG93U2Nyb2xsKCksIGZyb21SYXdFdmVudChldnQpKTtcbiAgICAgIGNvbnN0IG9uV2luZG93UmVzaXplID0gZXZ0ID0+IHtcbiAgICAgICAgYnJvYWRjYXN0T24ocmVwb3NpdGlvblBvcHVwcygpLCB7fSk7XG4gICAgICAgIGJyb2FkY2FzdEV2ZW50KHdpbmRvd1Jlc2l6ZSgpLCBmcm9tUmF3RXZlbnQoZXZ0KSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZG9zID0gZ2V0Um9vdE5vZGUoU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEVsZW1lbnQoKSkpO1xuICAgICAgY29uc3Qgb25FbGVtZW50U2Nyb2xsID0gY2FwdHVyZShkb3MsICdzY3JvbGwnLCBldnQgPT4ge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGMgPSBlZGl0b3IuZ2V0Q29udGFpbmVyKCk7XG4gICAgICAgICAgaWYgKGMgIT09IHVuZGVmaW5lZCAmJiBjICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRTY3JvbGxpbmdDb250ZXh0ID0gZGV0ZWN0V2hlblNwbGl0VWlNb2RlKGVkaXRvciwgbW90aGVyc2hpcC5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVycyA9IG9wdFNjcm9sbGluZ0NvbnRleHQubWFwKHNjID0+IFtcbiAgICAgICAgICAgICAgc2MuZWxlbWVudCxcbiAgICAgICAgICAgICAgLi4uc2Mub3RoZXJzXG4gICAgICAgICAgICBdKS5nZXRPcihbXSk7XG4gICAgICAgICAgICBpZiAoZXhpc3RzKHNjcm9sbGVycywgcyA9PiBlcShzLCBldnQudGFyZ2V0KSkpIHtcbiAgICAgICAgICAgICAgZWRpdG9yLmRpc3BhdGNoKCdFbGVtZW50U2Nyb2xsJywgeyB0YXJnZXQ6IGV2dC50YXJnZXQuZG9tIH0pO1xuICAgICAgICAgICAgICBicm9hZGNhc3RFdmVudChleHRlcm5hbEVsZW1lbnRTY3JvbGwoKSwgZXZ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBvbkVkaXRvclJlc2l6ZSA9ICgpID0+IGJyb2FkY2FzdE9uKHJlcG9zaXRpb25Qb3B1cHMoKSwge30pO1xuICAgICAgY29uc3Qgb25FZGl0b3JQcm9ncmVzcyA9IGV2dCA9PiB7XG4gICAgICAgIGlmIChldnQuc3RhdGUpIHtcbiAgICAgICAgICBicm9hZGNhc3RPbihkaXNtaXNzUG9wdXBzKCksIHsgdGFyZ2V0OiBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Q29udGFpbmVyKCkpIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25EaXNtaXNzUG9wdXBzID0gZXZlbnQgPT4ge1xuICAgICAgICBicm9hZGNhc3RPbihkaXNtaXNzUG9wdXBzKCksIHsgdGFyZ2V0OiBTdWdhckVsZW1lbnQuZnJvbURvbShldmVudC5yZWxhdGVkVGFyZ2V0LmdldENvbnRhaW5lcigpKSB9KTtcbiAgICAgIH07XG4gICAgICBlZGl0b3Iub24oJ1Bvc3RSZW5kZXInLCAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5vbignY2xpY2snLCBvbkNvbnRlbnRDbGljayk7XG4gICAgICAgIGVkaXRvci5vbigndGFwJywgb25Db250ZW50Q2xpY2spO1xuICAgICAgICBlZGl0b3Iub24oJ21vdXNldXAnLCBvbkNvbnRlbnRNb3VzZXVwKTtcbiAgICAgICAgZWRpdG9yLm9uKCdtb3VzZWRvd24nLCBvbkNvbnRlbnRNb3VzZWRvd24pO1xuICAgICAgICBlZGl0b3Iub24oJ1Njcm9sbFdpbmRvdycsIG9uV2luZG93U2Nyb2xsKTtcbiAgICAgICAgZWRpdG9yLm9uKCdSZXNpemVXaW5kb3cnLCBvbldpbmRvd1Jlc2l6ZSk7XG4gICAgICAgIGVkaXRvci5vbignUmVzaXplRWRpdG9yJywgb25FZGl0b3JSZXNpemUpO1xuICAgICAgICBlZGl0b3Iub24oJ0FmdGVyUHJvZ3Jlc3NTdGF0ZScsIG9uRWRpdG9yUHJvZ3Jlc3MpO1xuICAgICAgICBlZGl0b3Iub24oJ0Rpc21pc3NQb3B1cHMnLCBvbkRpc21pc3NQb3B1cHMpO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ3JlbW92ZScsICgpID0+IHtcbiAgICAgICAgZWRpdG9yLm9mZignY2xpY2snLCBvbkNvbnRlbnRDbGljayk7XG4gICAgICAgIGVkaXRvci5vZmYoJ3RhcCcsIG9uQ29udGVudENsaWNrKTtcbiAgICAgICAgZWRpdG9yLm9mZignbW91c2V1cCcsIG9uQ29udGVudE1vdXNldXApO1xuICAgICAgICBlZGl0b3Iub2ZmKCdtb3VzZWRvd24nLCBvbkNvbnRlbnRNb3VzZWRvd24pO1xuICAgICAgICBlZGl0b3Iub2ZmKCdTY3JvbGxXaW5kb3cnLCBvbldpbmRvd1Njcm9sbCk7XG4gICAgICAgIGVkaXRvci5vZmYoJ1Jlc2l6ZVdpbmRvdycsIG9uV2luZG93UmVzaXplKTtcbiAgICAgICAgZWRpdG9yLm9mZignUmVzaXplRWRpdG9yJywgb25FZGl0b3JSZXNpemUpO1xuICAgICAgICBlZGl0b3Iub2ZmKCdBZnRlclByb2dyZXNzU3RhdGUnLCBvbkVkaXRvclByb2dyZXNzKTtcbiAgICAgICAgZWRpdG9yLm9mZignRGlzbWlzc1BvcHVwcycsIG9uRGlzbWlzc1BvcHVwcyk7XG4gICAgICAgIG9uTW91c2Vkb3duLnVuYmluZCgpO1xuICAgICAgICBvblRvdWNoc3RhcnQudW5iaW5kKCk7XG4gICAgICAgIG9uVG91Y2htb3ZlLnVuYmluZCgpO1xuICAgICAgICBvblRvdWNoZW5kLnVuYmluZCgpO1xuICAgICAgICBvbk1vdXNldXAudW5iaW5kKCk7XG4gICAgICAgIG9uRWxlbWVudFNjcm9sbC51bmJpbmQoKTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdkZXRhY2gnLCAoKSA9PiB7XG4gICAgICAgIGVhY2gkMShbXG4gICAgICAgICAgbW90aGVyc2hpcCxcbiAgICAgICAgICAuLi51aU1vdGhlcnNoaXBzXG4gICAgICAgIF0sIGRldGFjaFN5c3RlbSk7XG4gICAgICAgIGVhY2gkMShbXG4gICAgICAgICAgbW90aGVyc2hpcCxcbiAgICAgICAgICAuLi51aU1vdGhlcnNoaXBzXG4gICAgICAgIF0sIG0gPT4gbS5kZXN0cm95KCkpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHBhcnRzJGEgPSBBbGxveVBhcnRzO1xuICAgIGNvbnN0IHBhcnRUeXBlID0gUGFydFR5cGU7XG5cbiAgICBjb25zdCBzY2hlbWEkZiA9IGNvbnN0YW50JDEoW1xuICAgICAgZGVmYXVsdGVkKCdzaGVsbCcsIGZhbHNlKSxcbiAgICAgIHJlcXVpcmVkJDEoJ21ha2VJdGVtJyksXG4gICAgICBkZWZhdWx0ZWQoJ3NldHVwSXRlbScsIG5vb3ApLFxuICAgICAgU2tldGNoQmVoYXZpb3Vycy5maWVsZCgnbGlzdEJlaGF2aW91cnMnLCBbUmVwbGFjaW5nXSlcbiAgICBdKTtcbiAgICBjb25zdCBjdXN0b21MaXN0RGV0YWlsID0gKCkgPT4gKHsgYmVoYXZpb3VyczogZGVyaXZlJDEoW1JlcGxhY2luZy5jb25maWcoe30pXSkgfSk7XG4gICAgY29uc3QgaXRlbXNQYXJ0ID0gb3B0aW9uYWwoe1xuICAgICAgbmFtZTogJ2l0ZW1zJyxcbiAgICAgIG92ZXJyaWRlczogY3VzdG9tTGlzdERldGFpbFxuICAgIH0pO1xuICAgIGNvbnN0IHBhcnRzJDkgPSBjb25zdGFudCQxKFtpdGVtc1BhcnRdKTtcbiAgICBjb25zdCBuYW1lID0gY29uc3RhbnQkMSgnQ3VzdG9tTGlzdCcpO1xuXG4gICAgY29uc3QgZmFjdG9yeSRmID0gKGRldGFpbCwgY29tcG9uZW50cywgX3NwZWMsIF9leHRlcm5hbCkgPT4ge1xuICAgICAgY29uc3Qgc2V0SXRlbXMgPSAobGlzdCwgaXRlbXMpID0+IHtcbiAgICAgICAgZ2V0TGlzdENvbnRhaW5lcihsaXN0KS5mb2xkKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdDdXN0b20gTGlzdCB3YXMgZGVmaW5lZCB0byBub3QgYmUgYSBzaGVsbCwgYnV0IG5vIGl0ZW0gY29udGFpbmVyIHdhcyBzcGVjaWZpZWQgaW4gY29tcG9uZW50cycpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ3VzdG9tIExpc3Qgd2FzIGRlZmluZWQgdG8gbm90IGJlIGEgc2hlbGwsIGJ1dCBubyBpdGVtIGNvbnRhaW5lciB3YXMgc3BlY2lmaWVkIGluIGNvbXBvbmVudHMnKTtcbiAgICAgICAgfSwgY29udGFpbmVyID0+IHtcbiAgICAgICAgICBjb25zdCBpdGVtQ29tcHMgPSBSZXBsYWNpbmcuY29udGVudHMoY29udGFpbmVyKTtcbiAgICAgICAgICBjb25zdCBudW1MaXN0c1JlcXVpcmVkID0gaXRlbXMubGVuZ3RoO1xuICAgICAgICAgIGNvbnN0IG51bUxpc3RzVG9BZGQgPSBudW1MaXN0c1JlcXVpcmVkIC0gaXRlbUNvbXBzLmxlbmd0aDtcbiAgICAgICAgICBjb25zdCBpdGVtc1RvQWRkID0gbnVtTGlzdHNUb0FkZCA+IDAgPyByYW5nZSQyKG51bUxpc3RzVG9BZGQsICgpID0+IGRldGFpbC5tYWtlSXRlbSgpKSA6IFtdO1xuICAgICAgICAgIGNvbnN0IGl0ZW1zVG9SZW1vdmUgPSBpdGVtQ29tcHMuc2xpY2UobnVtTGlzdHNSZXF1aXJlZCk7XG4gICAgICAgICAgZWFjaCQxKGl0ZW1zVG9SZW1vdmUsIGl0ZW0gPT4gUmVwbGFjaW5nLnJlbW92ZShjb250YWluZXIsIGl0ZW0pKTtcbiAgICAgICAgICBlYWNoJDEoaXRlbXNUb0FkZCwgaXRlbSA9PiBSZXBsYWNpbmcuYXBwZW5kKGNvbnRhaW5lciwgaXRlbSkpO1xuICAgICAgICAgIGNvbnN0IGJ1aWx0TGlzdHMgPSBSZXBsYWNpbmcuY29udGVudHMoY29udGFpbmVyKTtcbiAgICAgICAgICBlYWNoJDEoYnVpbHRMaXN0cywgKGl0ZW0sIGkpID0+IHtcbiAgICAgICAgICAgIGRldGFpbC5zZXR1cEl0ZW0obGlzdCwgaXRlbSwgaXRlbXNbaV0sIGkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBleHRyYSA9IGRldGFpbC5zaGVsbCA/IHtcbiAgICAgICAgYmVoYXZpb3VyczogW1JlcGxhY2luZy5jb25maWcoe30pXSxcbiAgICAgICAgY29tcG9uZW50czogW11cbiAgICAgIH0gOiB7XG4gICAgICAgIGJlaGF2aW91cnM6IFtdLFxuICAgICAgICBjb21wb25lbnRzXG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0TGlzdENvbnRhaW5lciA9IGNvbXBvbmVudCA9PiBkZXRhaWwuc2hlbGwgPyBPcHRpb25hbC5zb21lKGNvbXBvbmVudCkgOiBnZXRQYXJ0KGNvbXBvbmVudCwgZGV0YWlsLCAnaXRlbXMnKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVpZDogZGV0YWlsLnVpZCxcbiAgICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgICBjb21wb25lbnRzOiBleHRyYS5jb21wb25lbnRzLFxuICAgICAgICBiZWhhdmlvdXJzOiBhdWdtZW50KGRldGFpbC5saXN0QmVoYXZpb3VycywgZXh0cmEuYmVoYXZpb3VycyksXG4gICAgICAgIGFwaXM6IHsgc2V0SXRlbXMgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IEN1c3RvbUxpc3QgPSBjb21wb3NpdGUoe1xuICAgICAgbmFtZTogbmFtZSgpLFxuICAgICAgY29uZmlnRmllbGRzOiBzY2hlbWEkZigpLFxuICAgICAgcGFydEZpZWxkczogcGFydHMkOSgpLFxuICAgICAgZmFjdG9yeTogZmFjdG9yeSRmLFxuICAgICAgYXBpczoge1xuICAgICAgICBzZXRJdGVtczogKGFwaXMsIGxpc3QsIGl0ZW1zKSA9PiB7XG4gICAgICAgICAgYXBpcy5zZXRJdGVtcyhsaXN0LCBpdGVtcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHNjaGVtYSRlID0gY29uc3RhbnQkMShbXG4gICAgICByZXF1aXJlZCQxKCdkb20nKSxcbiAgICAgIGRlZmF1bHRlZCgnc2hlbGwnLCB0cnVlKSxcbiAgICAgIGZpZWxkKCd0b29sYmFyQmVoYXZpb3VycycsIFtSZXBsYWNpbmddKVxuICAgIF0pO1xuICAgIGNvbnN0IGVuaGFuY2VHcm91cHMgPSAoKSA9PiAoeyBiZWhhdmlvdXJzOiBkZXJpdmUkMShbUmVwbGFjaW5nLmNvbmZpZyh7fSldKSB9KTtcbiAgICBjb25zdCBwYXJ0cyQ4ID0gY29uc3RhbnQkMShbb3B0aW9uYWwoe1xuICAgICAgICBuYW1lOiAnZ3JvdXBzJyxcbiAgICAgICAgb3ZlcnJpZGVzOiBlbmhhbmNlR3JvdXBzXG4gICAgICB9KV0pO1xuXG4gICAgY29uc3QgZmFjdG9yeSRlID0gKGRldGFpbCwgY29tcG9uZW50cywgX3NwZWMsIF9leHRlcm5hbHMpID0+IHtcbiAgICAgIGNvbnN0IHNldEdyb3VwcyA9ICh0b29sYmFyLCBncm91cHMpID0+IHtcbiAgICAgICAgZ2V0R3JvdXBDb250YWluZXIodG9vbGJhcikuZm9sZCgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVG9vbGJhciB3YXMgZGVmaW5lZCB0byBub3QgYmUgYSBzaGVsbCwgYnV0IG5vIGdyb3VwcyBjb250YWluZXIgd2FzIHNwZWNpZmllZCBpbiBjb21wb25lbnRzJyk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb29sYmFyIHdhcyBkZWZpbmVkIHRvIG5vdCBiZSBhIHNoZWxsLCBidXQgbm8gZ3JvdXBzIGNvbnRhaW5lciB3YXMgc3BlY2lmaWVkIGluIGNvbXBvbmVudHMnKTtcbiAgICAgICAgfSwgY29udGFpbmVyID0+IHtcbiAgICAgICAgICBSZXBsYWNpbmcuc2V0KGNvbnRhaW5lciwgZ3JvdXBzKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0R3JvdXBDb250YWluZXIgPSBjb21wb25lbnQgPT4gZGV0YWlsLnNoZWxsID8gT3B0aW9uYWwuc29tZShjb21wb25lbnQpIDogZ2V0UGFydChjb21wb25lbnQsIGRldGFpbCwgJ2dyb3VwcycpO1xuICAgICAgY29uc3QgZXh0cmEgPSBkZXRhaWwuc2hlbGwgPyB7XG4gICAgICAgIGJlaGF2aW91cnM6IFtSZXBsYWNpbmcuY29uZmlnKHt9KV0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtdXG4gICAgICB9IDoge1xuICAgICAgICBiZWhhdmlvdXJzOiBbXSxcbiAgICAgICAgY29tcG9uZW50c1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVpZDogZGV0YWlsLnVpZCxcbiAgICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgICBjb21wb25lbnRzOiBleHRyYS5jb21wb25lbnRzLFxuICAgICAgICBiZWhhdmlvdXJzOiBhdWdtZW50KGRldGFpbC50b29sYmFyQmVoYXZpb3VycywgZXh0cmEuYmVoYXZpb3VycyksXG4gICAgICAgIGFwaXM6IHtcbiAgICAgICAgICBzZXRHcm91cHMsXG4gICAgICAgICAgcmVmcmVzaDogbm9vcFxuICAgICAgICB9LFxuICAgICAgICBkb21Nb2RpZmljYXRpb246IHsgYXR0cmlidXRlczogeyByb2xlOiAnZ3JvdXAnIH0gfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IFRvb2xiYXIgPSBjb21wb3NpdGUoe1xuICAgICAgbmFtZTogJ1Rvb2xiYXInLFxuICAgICAgY29uZmlnRmllbGRzOiBzY2hlbWEkZSgpLFxuICAgICAgcGFydEZpZWxkczogcGFydHMkOCgpLFxuICAgICAgZmFjdG9yeTogZmFjdG9yeSRlLFxuICAgICAgYXBpczoge1xuICAgICAgICBzZXRHcm91cHM6IChhcGlzLCB0b29sYmFyLCBncm91cHMpID0+IHtcbiAgICAgICAgICBhcGlzLnNldEdyb3Vwcyh0b29sYmFyLCBncm91cHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzZXR1cCRhID0gbm9vcDtcbiAgICBjb25zdCBpc0RvY2tlZCQyID0gbmV2ZXI7XG4gICAgY29uc3QgZ2V0QmVoYXZpb3VycyQxID0gY29uc3RhbnQkMShbXSk7XG5cbiAgICB2YXIgU3RhdGljSGVhZGVyID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIHNldHVwOiBzZXR1cCRhLFxuICAgICAgICBpc0RvY2tlZDogaXNEb2NrZWQkMixcbiAgICAgICAgZ2V0QmVoYXZpb3VyczogZ2V0QmVoYXZpb3VycyQxXG4gICAgfSk7XG5cbiAgICBjb25zdCBnZXRPZmZzZXRQYXJlbnQgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IGlzRml4ZWQgPSBpcyQxKGdldFJhdyhlbGVtZW50LCAncG9zaXRpb24nKSwgJ2ZpeGVkJyk7XG4gICAgICBjb25zdCBvZmZzZXRQYXJlbnQkMSA9IGlzRml4ZWQgPyBPcHRpb25hbC5ub25lKCkgOiBvZmZzZXRQYXJlbnQoZWxlbWVudCk7XG4gICAgICByZXR1cm4gb2Zmc2V0UGFyZW50JDEub3JUaHVuaygoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hcmtlciA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdzcGFuJyk7XG4gICAgICAgIHJldHVybiBwYXJlbnQoZWxlbWVudCkuYmluZChwYXJlbnQgPT4ge1xuICAgICAgICAgIGFwcGVuZCQyKHBhcmVudCwgbWFya2VyKTtcbiAgICAgICAgICBjb25zdCBvZmZzZXRQYXJlbnQkMSA9IG9mZnNldFBhcmVudChtYXJrZXIpO1xuICAgICAgICAgIHJlbW92ZSQ1KG1hcmtlcik7XG4gICAgICAgICAgcmV0dXJuIG9mZnNldFBhcmVudCQxO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0T3JpZ2luID0gZWxlbWVudCA9PiBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkubWFwKGFic29sdXRlJDMpLmdldE9yVGh1bmsoKCkgPT4gU3VnYXJQb3NpdGlvbigwLCAwKSk7XG5cbiAgICBjb25zdCBhcHBlYXIgPSAoY29tcG9uZW50LCBjb250ZXh0dWFsSW5mbykgPT4ge1xuICAgICAgY29uc3QgZWxlbSA9IGNvbXBvbmVudC5lbGVtZW50O1xuICAgICAgYWRkJDIoZWxlbSwgY29udGV4dHVhbEluZm8udHJhbnNpdGlvbkNsYXNzKTtcbiAgICAgIHJlbW92ZSQyKGVsZW0sIGNvbnRleHR1YWxJbmZvLmZhZGVPdXRDbGFzcyk7XG4gICAgICBhZGQkMihlbGVtLCBjb250ZXh0dWFsSW5mby5mYWRlSW5DbGFzcyk7XG4gICAgICBjb250ZXh0dWFsSW5mby5vblNob3coY29tcG9uZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IGRpc2FwcGVhciA9IChjb21wb25lbnQsIGNvbnRleHR1YWxJbmZvKSA9PiB7XG4gICAgICBjb25zdCBlbGVtID0gY29tcG9uZW50LmVsZW1lbnQ7XG4gICAgICBhZGQkMihlbGVtLCBjb250ZXh0dWFsSW5mby50cmFuc2l0aW9uQ2xhc3MpO1xuICAgICAgcmVtb3ZlJDIoZWxlbSwgY29udGV4dHVhbEluZm8uZmFkZUluQ2xhc3MpO1xuICAgICAgYWRkJDIoZWxlbSwgY29udGV4dHVhbEluZm8uZmFkZU91dENsYXNzKTtcbiAgICAgIGNvbnRleHR1YWxJbmZvLm9uSGlkZShjb21wb25lbnQpO1xuICAgIH07XG4gICAgY29uc3QgaXNQYXJ0aWFsbHlWaXNpYmxlID0gKGJveCwgYm91bmRzKSA9PiBib3gueSA8IGJvdW5kcy5ib3R0b20gJiYgYm94LmJvdHRvbSA+IGJvdW5kcy55O1xuICAgIGNvbnN0IGlzVG9wQ29tcGxldGVseVZpc2libGUgPSAoYm94LCBib3VuZHMpID0+IGJveC55ID49IGJvdW5kcy55O1xuICAgIGNvbnN0IGlzQm90dG9tQ29tcGxldGVseVZpc2libGUgPSAoYm94LCBib3VuZHMpID0+IGJveC5ib3R0b20gPD0gYm91bmRzLmJvdHRvbTtcbiAgICBjb25zdCBmb3JjZVRvcFBvc2l0aW9uID0gKHdpbkJveCwgbGVmdFgsIHZpZXdwb3J0KSA9PiAoe1xuICAgICAgbG9jYXRpb246ICd0b3AnLFxuICAgICAgbGVmdFgsXG4gICAgICB0b3BZOiB2aWV3cG9ydC5ib3VuZHMueSAtIHdpbkJveC55XG4gICAgfSk7XG4gICAgY29uc3QgZm9yY2VCb3R0b21Qb3NpdGlvbiA9ICh3aW5Cb3gsIGxlZnRYLCB2aWV3cG9ydCkgPT4gKHtcbiAgICAgIGxvY2F0aW9uOiAnYm90dG9tJyxcbiAgICAgIGxlZnRYLFxuICAgICAgYm90dG9tWTogd2luQm94LmJvdHRvbSAtIHZpZXdwb3J0LmJvdW5kcy5ib3R0b21cbiAgICB9KTtcbiAgICBjb25zdCBnZXREb2NrZWRMZWZ0UG9zaXRpb24gPSBib3VuZHMgPT4ge1xuICAgICAgcmV0dXJuIGJvdW5kcy5ib3gueCAtIGJvdW5kcy53aW4ueDtcbiAgICB9O1xuICAgIGNvbnN0IHRyeURvY2tpbmdQb3NpdGlvbiA9IChtb2RlcywgYm91bmRzLCB2aWV3cG9ydCkgPT4ge1xuICAgICAgY29uc3Qgd2luQm94ID0gYm91bmRzLndpbjtcbiAgICAgIGNvbnN0IGJveCA9IGJvdW5kcy5ib3g7XG4gICAgICBjb25zdCBsZWZ0WCA9IGdldERvY2tlZExlZnRQb3NpdGlvbihib3VuZHMpO1xuICAgICAgcmV0dXJuIGZpbmRNYXAobW9kZXMsIG1vZGUgPT4ge1xuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICByZXR1cm4gIWlzQm90dG9tQ29tcGxldGVseVZpc2libGUoYm94LCB2aWV3cG9ydC5ib3VuZHMpID8gT3B0aW9uYWwuc29tZShmb3JjZUJvdHRvbVBvc2l0aW9uKHdpbkJveCwgbGVmdFgsIHZpZXdwb3J0KSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgcmV0dXJuICFpc1RvcENvbXBsZXRlbHlWaXNpYmxlKGJveCwgdmlld3BvcnQuYm91bmRzKSA/IE9wdGlvbmFsLnNvbWUoZm9yY2VUb3BQb3NpdGlvbih3aW5Cb3gsIGxlZnRYLCB2aWV3cG9ydCkpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH0pLmdldE9yKHsgbG9jYXRpb246ICduby1kb2NrJyB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzVmlzaWJsZUZvck1vZGVzID0gKG1vZGVzLCBib3gsIHZpZXdwb3J0KSA9PiBmb3JhbGwobW9kZXMsIG1vZGUgPT4ge1xuICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICByZXR1cm4gaXNCb3R0b21Db21wbGV0ZWx5VmlzaWJsZShib3gsIHZpZXdwb3J0LmJvdW5kcyk7XG4gICAgICBjYXNlICd0b3AnOlxuICAgICAgICByZXR1cm4gaXNUb3BDb21wbGV0ZWx5VmlzaWJsZShib3gsIHZpZXdwb3J0LmJvdW5kcyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0WFlGb3JSZXN0b3JpbmcgPSAocG9zLCB2aWV3cG9ydCkgPT4ge1xuICAgICAgY29uc3QgcHJpb3JZID0gdmlld3BvcnQub3B0U2Nyb2xsRW52LmZvbGQoY29uc3RhbnQkMShwb3MuYm91bmRzLnkpLCBzY3JvbGxFbnYgPT4gc2Nyb2xsRW52LnNjcm9sbEVsbVRvcCArIChwb3MuYm91bmRzLnkgLSBzY3JvbGxFbnYuY3VycmVudFNjcm9sbFRvcCkpO1xuICAgICAgcmV0dXJuIFN1Z2FyUG9zaXRpb24ocG9zLmJvdW5kcy54LCBwcmlvclkpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0WFlGb3JTYXZpbmcgPSAoYm94LCB2aWV3cG9ydCkgPT4ge1xuICAgICAgY29uc3QgcHJpb3JZID0gdmlld3BvcnQub3B0U2Nyb2xsRW52LmZvbGQoY29uc3RhbnQkMShib3gueSksIHNjcm9sbEVudiA9PiBib3gueSArIHNjcm9sbEVudi5jdXJyZW50U2Nyb2xsVG9wIC0gc2Nyb2xsRW52LnNjcm9sbEVsbVRvcCk7XG4gICAgICByZXR1cm4gU3VnYXJQb3NpdGlvbihib3gueCwgcHJpb3JZKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFByaW9yID0gKGVsZW0sIHZpZXdwb3J0LCBzdGF0ZSkgPT4gc3RhdGUuZ2V0SW5pdGlhbFBvcygpLm1hcChwb3MgPT4ge1xuICAgICAgY29uc3QgeHkgPSBnZXRYWUZvclJlc3RvcmluZyhwb3MsIHZpZXdwb3J0KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJveDogYm91bmRzKHh5LmxlZnQsIHh5LnRvcCwgZ2V0JGMoZWxlbSksIGdldCRkKGVsZW0pKSxcbiAgICAgICAgbG9jYXRpb246IHBvcy5sb2NhdGlvblxuICAgICAgfTtcbiAgICB9KTtcbiAgICBjb25zdCBzdG9yZVByaW9yID0gKGVsZW0sIGJveCwgdmlld3BvcnQsIHN0YXRlLCBkZWNpc2lvbikgPT4ge1xuICAgICAgY29uc3QgeHkgPSBnZXRYWUZvclNhdmluZyhib3gsIHZpZXdwb3J0KTtcbiAgICAgIGNvbnN0IGJvdW5kcyQxID0gYm91bmRzKHh5LmxlZnQsIHh5LnRvcCwgYm94LndpZHRoLCBib3guaGVpZ2h0KTtcbiAgICAgIHN0YXRlLnNldEluaXRpYWxQb3Moe1xuICAgICAgICBzdHlsZTogZ2V0QWxsUmF3KGVsZW0pLFxuICAgICAgICBwb3NpdGlvbjogZ2V0JGUoZWxlbSwgJ3Bvc2l0aW9uJykgfHwgJ3N0YXRpYycsXG4gICAgICAgIGJvdW5kczogYm91bmRzJDEsXG4gICAgICAgIGxvY2F0aW9uOiBkZWNpc2lvbi5sb2NhdGlvblxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzdG9yZVByaW9ySWZOb25lID0gKGVsZW0sIGJveCwgdmlld3BvcnQsIHN0YXRlLCBkZWNpc2lvbikgPT4ge1xuICAgICAgc3RhdGUuZ2V0SW5pdGlhbFBvcygpLmZvbGQoKCkgPT4gc3RvcmVQcmlvcihlbGVtLCBib3gsIHZpZXdwb3J0LCBzdGF0ZSwgZGVjaXNpb24pLCAoKSA9PiBub29wKTtcbiAgICB9O1xuICAgIGNvbnN0IHJldmVydFRvT3JpZ2luYWwgPSAoZWxlbSwgYm94LCBzdGF0ZSkgPT4gc3RhdGUuZ2V0SW5pdGlhbFBvcygpLmJpbmQocG9zaXRpb24gPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgc3RhdGUuY2xlYXJJbml0aWFsUG9zKCk7XG4gICAgICBzd2l0Y2ggKHBvc2l0aW9uLnBvc2l0aW9uKSB7XG4gICAgICBjYXNlICdzdGF0aWMnOlxuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh7IG1vcnBoOiAnc3RhdGljJyB9KTtcbiAgICAgIGNhc2UgJ2Fic29sdXRlJzpcbiAgICAgICAgY29uc3Qgb2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGVsZW0pLmdldE9yKGJvZHkoKSk7XG4gICAgICAgIGNvbnN0IG9mZnNldEJveCA9IGJveCQxKG9mZnNldFBhcmVudCk7XG4gICAgICAgIGNvbnN0IHNjcm9sbERlbHRhID0gKF9hID0gb2Zmc2V0UGFyZW50LmRvbS5zY3JvbGxUb3ApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDA7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICBtb3JwaDogJ2Fic29sdXRlJyxcbiAgICAgICAgICBwb3NpdGlvbkNzczogTnVQb3NpdGlvbkNzcygnYWJzb2x1dGUnLCBnZXQkZyhwb3NpdGlvbi5zdHlsZSwgJ2xlZnQnKS5tYXAoX2xlZnQgPT4gYm94LnggLSBvZmZzZXRCb3gueCksIGdldCRnKHBvc2l0aW9uLnN0eWxlLCAndG9wJykubWFwKF90b3AgPT4gYm94LnkgLSBvZmZzZXRCb3gueSArIHNjcm9sbERlbHRhKSwgZ2V0JGcocG9zaXRpb24uc3R5bGUsICdyaWdodCcpLm1hcChfcmlnaHQgPT4gb2Zmc2V0Qm94LnJpZ2h0IC0gYm94LnJpZ2h0KSwgZ2V0JGcocG9zaXRpb24uc3R5bGUsICdib3R0b20nKS5tYXAoX2JvdHRvbSA9PiBvZmZzZXRCb3guYm90dG9tIC0gYm94LmJvdHRvbSkpXG4gICAgICAgIH0pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB0cnlNb3JwaFRvT3JpZ2luYWwgPSAoZWxlbSwgdmlld3BvcnQsIHN0YXRlKSA9PiBnZXRQcmlvcihlbGVtLCB2aWV3cG9ydCwgc3RhdGUpLmZpbHRlcigoe2JveH0pID0+IGlzVmlzaWJsZUZvck1vZGVzKHN0YXRlLmdldE1vZGVzKCksIGJveCwgdmlld3BvcnQpKS5iaW5kKCh7Ym94fSkgPT4gcmV2ZXJ0VG9PcmlnaW5hbChlbGVtLCBib3gsIHN0YXRlKSk7XG4gICAgY29uc3QgdHJ5RGVjaXNpb25Ub0ZpeGVkTW9ycGggPSBkZWNpc2lvbiA9PiB7XG4gICAgICBzd2l0Y2ggKGRlY2lzaW9uLmxvY2F0aW9uKSB7XG4gICAgICBjYXNlICd0b3AnOiB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgICAgbW9ycGg6ICdmaXhlZCcsXG4gICAgICAgICAgICBwb3NpdGlvbkNzczogTnVQb3NpdGlvbkNzcygnZml4ZWQnLCBPcHRpb25hbC5zb21lKGRlY2lzaW9uLmxlZnRYKSwgT3B0aW9uYWwuc29tZShkZWNpc2lvbi50b3BZKSwgT3B0aW9uYWwubm9uZSgpLCBPcHRpb25hbC5ub25lKCkpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2JvdHRvbSc6IHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgICBtb3JwaDogJ2ZpeGVkJyxcbiAgICAgICAgICAgIHBvc2l0aW9uQ3NzOiBOdVBvc2l0aW9uQ3NzKCdmaXhlZCcsIE9wdGlvbmFsLnNvbWUoZGVjaXNpb24ubGVmdFgpLCBPcHRpb25hbC5ub25lKCksIE9wdGlvbmFsLm5vbmUoKSwgT3B0aW9uYWwuc29tZShkZWNpc2lvbi5ib3R0b21ZKSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHRyeU1vcnBoVG9GaXhlZCA9IChlbGVtLCB2aWV3cG9ydCwgc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGJveCA9IGJveCQxKGVsZW0pO1xuICAgICAgY29uc3Qgd2luQm94ID0gd2luKCk7XG4gICAgICBjb25zdCBkZWNpc2lvbiA9IHRyeURvY2tpbmdQb3NpdGlvbihzdGF0ZS5nZXRNb2RlcygpLCB7XG4gICAgICAgIHdpbjogd2luQm94LFxuICAgICAgICBib3hcbiAgICAgIH0sIHZpZXdwb3J0KTtcbiAgICAgIGlmIChkZWNpc2lvbi5sb2NhdGlvbiA9PT0gJ3RvcCcgfHwgZGVjaXNpb24ubG9jYXRpb24gPT09ICdib3R0b20nKSB7XG4gICAgICAgIHN0b3JlUHJpb3IoZWxlbSwgYm94LCB2aWV3cG9ydCwgc3RhdGUsIGRlY2lzaW9uKTtcbiAgICAgICAgcmV0dXJuIHRyeURlY2lzaW9uVG9GaXhlZE1vcnBoKGRlY2lzaW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB0cnlNb3JwaFRvT3JpZ2luYWxPclVwZGF0ZUZpeGVkID0gKGVsZW0sIHZpZXdwb3J0LCBzdGF0ZSkgPT4ge1xuICAgICAgcmV0dXJuIHRyeU1vcnBoVG9PcmlnaW5hbChlbGVtLCB2aWV3cG9ydCwgc3RhdGUpLm9yVGh1bmsoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdmlld3BvcnQub3B0U2Nyb2xsRW52LmJpbmQoXyA9PiBnZXRQcmlvcihlbGVtLCB2aWV3cG9ydCwgc3RhdGUpKS5iaW5kKCh7Ym94LCBsb2NhdGlvbn0pID0+IHtcbiAgICAgICAgICBjb25zdCB3aW5Cb3ggPSB3aW4oKTtcbiAgICAgICAgICBjb25zdCBsZWZ0WCA9IGdldERvY2tlZExlZnRQb3NpdGlvbih7XG4gICAgICAgICAgICB3aW46IHdpbkJveCxcbiAgICAgICAgICAgIGJveFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGRlY2lzaW9uID0gbG9jYXRpb24gPT09ICd0b3AnID8gZm9yY2VUb3BQb3NpdGlvbih3aW5Cb3gsIGxlZnRYLCB2aWV3cG9ydCkgOiBmb3JjZUJvdHRvbVBvc2l0aW9uKHdpbkJveCwgbGVmdFgsIHZpZXdwb3J0KTtcbiAgICAgICAgICByZXR1cm4gdHJ5RGVjaXNpb25Ub0ZpeGVkTW9ycGgoZGVjaXNpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgdHJ5TW9ycGggPSAoY29tcG9uZW50LCB2aWV3cG9ydCwgc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGVsZW0gPSBjb21wb25lbnQuZWxlbWVudDtcbiAgICAgIGNvbnN0IGlzRG9ja2VkID0gaXMkMShnZXRSYXcoZWxlbSwgJ3Bvc2l0aW9uJyksICdmaXhlZCcpO1xuICAgICAgcmV0dXJuIGlzRG9ja2VkID8gdHJ5TW9ycGhUb09yaWdpbmFsT3JVcGRhdGVGaXhlZChlbGVtLCB2aWV3cG9ydCwgc3RhdGUpIDogdHJ5TW9ycGhUb0ZpeGVkKGVsZW0sIHZpZXdwb3J0LCBzdGF0ZSk7XG4gICAgfTtcbiAgICBjb25zdCBjYWxjdWxhdGVNb3JwaFRvT3JpZ2luYWwgPSAoY29tcG9uZW50LCB2aWV3cG9ydCwgc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGVsZW0gPSBjb21wb25lbnQuZWxlbWVudDtcbiAgICAgIHJldHVybiBnZXRQcmlvcihlbGVtLCB2aWV3cG9ydCwgc3RhdGUpLmJpbmQoKHtib3h9KSA9PiByZXZlcnRUb09yaWdpbmFsKGVsZW0sIGJveCwgc3RhdGUpKTtcbiAgICB9O1xuICAgIGNvbnN0IGZvcmNlRG9ja1dpdGggPSAoZWxlbSwgdmlld3BvcnQsIHN0YXRlLCBnZXREZWNpc2lvbikgPT4ge1xuICAgICAgY29uc3QgYm94ID0gYm94JDEoZWxlbSk7XG4gICAgICBjb25zdCB3aW5Cb3ggPSB3aW4oKTtcbiAgICAgIGNvbnN0IGxlZnRYID0gZ2V0RG9ja2VkTGVmdFBvc2l0aW9uKHtcbiAgICAgICAgd2luOiB3aW5Cb3gsXG4gICAgICAgIGJveFxuICAgICAgfSk7XG4gICAgICBjb25zdCBkZWNpc2lvbiA9IGdldERlY2lzaW9uKHdpbkJveCwgbGVmdFgsIHZpZXdwb3J0KTtcbiAgICAgIGlmIChkZWNpc2lvbi5sb2NhdGlvbiA9PT0gJ2JvdHRvbScgfHwgZGVjaXNpb24ubG9jYXRpb24gPT09ICd0b3AnKSB7XG4gICAgICAgIHN0b3JlUHJpb3JJZk5vbmUoZWxlbSwgYm94LCB2aWV3cG9ydCwgc3RhdGUsIGRlY2lzaW9uKTtcbiAgICAgICAgcmV0dXJuIHRyeURlY2lzaW9uVG9GaXhlZE1vcnBoKGRlY2lzaW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG1vcnBoVG9TdGF0aWMgPSAoY29tcG9uZW50LCBjb25maWcsIHN0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5zZXREb2NrZWQoZmFsc2UpO1xuICAgICAgZWFjaCQxKFtcbiAgICAgICAgJ2xlZnQnLFxuICAgICAgICAncmlnaHQnLFxuICAgICAgICAndG9wJyxcbiAgICAgICAgJ2JvdHRvbScsXG4gICAgICAgICdwb3NpdGlvbidcbiAgICAgIF0sIHByb3AgPT4gcmVtb3ZlJDYoY29tcG9uZW50LmVsZW1lbnQsIHByb3ApKTtcbiAgICAgIGNvbmZpZy5vblVuZG9ja2VkKGNvbXBvbmVudCk7XG4gICAgfTtcbiAgICBjb25zdCBtb3JwaFRvQ29vcmQgPSAoY29tcG9uZW50LCBjb25maWcsIHN0YXRlLCBwb3NpdGlvbikgPT4ge1xuICAgICAgY29uc3QgaXNEb2NrZWQgPSBwb3NpdGlvbi5wb3NpdGlvbiA9PT0gJ2ZpeGVkJztcbiAgICAgIHN0YXRlLnNldERvY2tlZChpc0RvY2tlZCk7XG4gICAgICBhcHBseVBvc2l0aW9uQ3NzKGNvbXBvbmVudC5lbGVtZW50LCBwb3NpdGlvbik7XG4gICAgICBjb25zdCBtZXRob2QgPSBpc0RvY2tlZCA/IGNvbmZpZy5vbkRvY2tlZCA6IGNvbmZpZy5vblVuZG9ja2VkO1xuICAgICAgbWV0aG9kKGNvbXBvbmVudCk7XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVWaXNpYmlsaXR5ID0gKGNvbXBvbmVudCwgY29uZmlnLCBzdGF0ZSwgdmlld3BvcnQsIG1vcnBoVG9Eb2NrZWQgPSBmYWxzZSkgPT4ge1xuICAgICAgY29uZmlnLmNvbnRleHR1YWwuZWFjaChjb250ZXh0SW5mbyA9PiB7XG4gICAgICAgIGNvbnRleHRJbmZvLmxhenlDb250ZXh0KGNvbXBvbmVudCkuZWFjaChib3ggPT4ge1xuICAgICAgICAgIGNvbnN0IGlzVmlzaWJsZSA9IGlzUGFydGlhbGx5VmlzaWJsZShib3gsIHZpZXdwb3J0LmJvdW5kcyk7XG4gICAgICAgICAgaWYgKGlzVmlzaWJsZSAhPT0gc3RhdGUuaXNWaXNpYmxlKCkpIHtcbiAgICAgICAgICAgIHN0YXRlLnNldFZpc2libGUoaXNWaXNpYmxlKTtcbiAgICAgICAgICAgIGlmIChtb3JwaFRvRG9ja2VkICYmICFpc1Zpc2libGUpIHtcbiAgICAgICAgICAgICAgYWRkJDEoY29tcG9uZW50LmVsZW1lbnQsIFtjb250ZXh0SW5mby5mYWRlT3V0Q2xhc3NdKTtcbiAgICAgICAgICAgICAgY29udGV4dEluZm8ub25IaWRlKGNvbXBvbmVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBtZXRob2QgPSBpc1Zpc2libGUgPyBhcHBlYXIgOiBkaXNhcHBlYXI7XG4gICAgICAgICAgICAgIG1ldGhvZChjb21wb25lbnQsIGNvbnRleHRJbmZvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBhcHBseUZpeGVkTW9ycGggPSAoY29tcG9uZW50LCBjb25maWcsIHN0YXRlLCB2aWV3cG9ydCwgbW9ycGgpID0+IHtcbiAgICAgIHVwZGF0ZVZpc2liaWxpdHkoY29tcG9uZW50LCBjb25maWcsIHN0YXRlLCB2aWV3cG9ydCwgdHJ1ZSk7XG4gICAgICBtb3JwaFRvQ29vcmQoY29tcG9uZW50LCBjb25maWcsIHN0YXRlLCBtb3JwaC5wb3NpdGlvbkNzcyk7XG4gICAgfTtcbiAgICBjb25zdCBhcHBseU1vcnBoID0gKGNvbXBvbmVudCwgY29uZmlnLCBzdGF0ZSwgdmlld3BvcnQsIG1vcnBoKSA9PiB7XG4gICAgICBzd2l0Y2ggKG1vcnBoLm1vcnBoKSB7XG4gICAgICBjYXNlICdzdGF0aWMnOiB7XG4gICAgICAgICAgcmV0dXJuIG1vcnBoVG9TdGF0aWMoY29tcG9uZW50LCBjb25maWcsIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgY2FzZSAnYWJzb2x1dGUnOiB7XG4gICAgICAgICAgcmV0dXJuIG1vcnBoVG9Db29yZChjb21wb25lbnQsIGNvbmZpZywgc3RhdGUsIG1vcnBoLnBvc2l0aW9uQ3NzKTtcbiAgICAgICAgfVxuICAgICAgY2FzZSAnZml4ZWQnOiB7XG4gICAgICAgICAgcmV0dXJuIGFwcGx5Rml4ZWRNb3JwaChjb21wb25lbnQsIGNvbmZpZywgc3RhdGUsIHZpZXdwb3J0LCBtb3JwaCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlZnJlc2hJbnRlcm5hbCA9IChjb21wb25lbnQsIGNvbmZpZywgc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IHZpZXdwb3J0ID0gY29uZmlnLmxhenlWaWV3cG9ydChjb21wb25lbnQpO1xuICAgICAgdXBkYXRlVmlzaWJpbGl0eShjb21wb25lbnQsIGNvbmZpZywgc3RhdGUsIHZpZXdwb3J0KTtcbiAgICAgIHRyeU1vcnBoKGNvbXBvbmVudCwgdmlld3BvcnQsIHN0YXRlKS5lYWNoKG1vcnBoID0+IHtcbiAgICAgICAgYXBwbHlNb3JwaChjb21wb25lbnQsIGNvbmZpZywgc3RhdGUsIHZpZXdwb3J0LCBtb3JwaCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlc2V0SW50ZXJuYWwgPSAoY29tcG9uZW50LCBjb25maWcsIHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBlbGVtID0gY29tcG9uZW50LmVsZW1lbnQ7XG4gICAgICBzdGF0ZS5zZXREb2NrZWQoZmFsc2UpO1xuICAgICAgY29uc3Qgdmlld3BvcnQgPSBjb25maWcubGF6eVZpZXdwb3J0KGNvbXBvbmVudCk7XG4gICAgICBjYWxjdWxhdGVNb3JwaFRvT3JpZ2luYWwoY29tcG9uZW50LCB2aWV3cG9ydCwgc3RhdGUpLmVhY2goc3RhdGljT3JBYnNvbHV0ZU1vcnBoID0+IHtcbiAgICAgICAgc3dpdGNoIChzdGF0aWNPckFic29sdXRlTW9ycGgubW9ycGgpIHtcbiAgICAgICAgY2FzZSAnc3RhdGljJzoge1xuICAgICAgICAgICAgbW9ycGhUb1N0YXRpYyhjb21wb25lbnQsIGNvbmZpZywgc3RhdGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICdhYnNvbHV0ZSc6IHtcbiAgICAgICAgICAgIG1vcnBoVG9Db29yZChjb21wb25lbnQsIGNvbmZpZywgc3RhdGUsIHN0YXRpY09yQWJzb2x1dGVNb3JwaC5wb3NpdGlvbkNzcyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgc3RhdGUuc2V0VmlzaWJsZSh0cnVlKTtcbiAgICAgIGNvbmZpZy5jb250ZXh0dWFsLmVhY2goY29udGV4dEluZm8gPT4ge1xuICAgICAgICByZW1vdmUkMShlbGVtLCBbXG4gICAgICAgICAgY29udGV4dEluZm8uZmFkZUluQ2xhc3MsXG4gICAgICAgICAgY29udGV4dEluZm8uZmFkZU91dENsYXNzLFxuICAgICAgICAgIGNvbnRleHRJbmZvLnRyYW5zaXRpb25DbGFzc1xuICAgICAgICBdKTtcbiAgICAgICAgY29udGV4dEluZm8ub25TaG93KGNvbXBvbmVudCk7XG4gICAgICB9KTtcbiAgICAgIHJlZnJlc2gkMyhjb21wb25lbnQsIGNvbmZpZywgc3RhdGUpO1xuICAgIH07XG4gICAgY29uc3QgcmVmcmVzaCQzID0gKGNvbXBvbmVudCwgY29uZmlnLCBzdGF0ZSkgPT4ge1xuICAgICAgaWYgKGNvbXBvbmVudC5nZXRTeXN0ZW0oKS5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgIHJlZnJlc2hJbnRlcm5hbChjb21wb25lbnQsIGNvbmZpZywgc3RhdGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVzZXQgPSAoY29tcG9uZW50LCBjb25maWcsIHN0YXRlKSA9PiB7XG4gICAgICBpZiAoc3RhdGUuaXNEb2NrZWQoKSkge1xuICAgICAgICByZXNldEludGVybmFsKGNvbXBvbmVudCwgY29uZmlnLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBmb3JjZURvY2tXaXRoRGVjaXNpb24gPSBnZXREZWNpc2lvbiA9PiAoY29tcG9uZW50LCBjb25maWcsIHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCB2aWV3cG9ydCA9IGNvbmZpZy5sYXp5Vmlld3BvcnQoY29tcG9uZW50KTtcbiAgICAgIGNvbnN0IG9wdE1vcnBoID0gZm9yY2VEb2NrV2l0aChjb21wb25lbnQuZWxlbWVudCwgdmlld3BvcnQsIHN0YXRlLCBnZXREZWNpc2lvbik7XG4gICAgICBvcHRNb3JwaC5lYWNoKG1vcnBoID0+IHtcbiAgICAgICAgYXBwbHlGaXhlZE1vcnBoKGNvbXBvbmVudCwgY29uZmlnLCBzdGF0ZSwgdmlld3BvcnQsIG1vcnBoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZm9yY2VEb2NrVG9Ub3AgPSBmb3JjZURvY2tXaXRoRGVjaXNpb24oZm9yY2VUb3BQb3NpdGlvbik7XG4gICAgY29uc3QgZm9yY2VEb2NrVG9Cb3R0b20gPSBmb3JjZURvY2tXaXRoRGVjaXNpb24oZm9yY2VCb3R0b21Qb3NpdGlvbik7XG4gICAgY29uc3QgaXNEb2NrZWQkMSA9IChjb21wb25lbnQsIGNvbmZpZywgc3RhdGUpID0+IHN0YXRlLmlzRG9ja2VkKCk7XG4gICAgY29uc3Qgc2V0TW9kZXMgPSAoY29tcG9uZW50LCBjb25maWcsIHN0YXRlLCBtb2RlcykgPT4gc3RhdGUuc2V0TW9kZXMobW9kZXMpO1xuICAgIGNvbnN0IGdldE1vZGVzID0gKGNvbXBvbmVudCwgY29uZmlnLCBzdGF0ZSkgPT4gc3RhdGUuZ2V0TW9kZXMoKTtcblxuICAgIHZhciBEb2NraW5nQXBpcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICByZWZyZXNoOiByZWZyZXNoJDMsXG4gICAgICAgIHJlc2V0OiByZXNldCxcbiAgICAgICAgaXNEb2NrZWQ6IGlzRG9ja2VkJDEsXG4gICAgICAgIGdldE1vZGVzOiBnZXRNb2RlcyxcbiAgICAgICAgc2V0TW9kZXM6IHNldE1vZGVzLFxuICAgICAgICBmb3JjZURvY2tUb1RvcDogZm9yY2VEb2NrVG9Ub3AsXG4gICAgICAgIGZvcmNlRG9ja1RvQm90dG9tOiBmb3JjZURvY2tUb0JvdHRvbVxuICAgIH0pO1xuXG4gICAgY29uc3QgZXZlbnRzJDQgPSAoZG9ja0luZm8sIGRvY2tTdGF0ZSkgPT4gZGVyaXZlJDIoW1xuICAgICAgcnVuT25Tb3VyY2UodHJhbnNpdGlvbmVuZCgpLCAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICBkb2NrSW5mby5jb250ZXh0dWFsLmVhY2goY29udGV4dEluZm8gPT4ge1xuICAgICAgICAgIGlmIChoYXMoY29tcG9uZW50LmVsZW1lbnQsIGNvbnRleHRJbmZvLnRyYW5zaXRpb25DbGFzcykpIHtcbiAgICAgICAgICAgIHJlbW92ZSQxKGNvbXBvbmVudC5lbGVtZW50LCBbXG4gICAgICAgICAgICAgIGNvbnRleHRJbmZvLnRyYW5zaXRpb25DbGFzcyxcbiAgICAgICAgICAgICAgY29udGV4dEluZm8uZmFkZUluQ2xhc3NcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgY29uc3Qgbm90aWZ5ID0gZG9ja1N0YXRlLmlzVmlzaWJsZSgpID8gY29udGV4dEluZm8ub25TaG93biA6IGNvbnRleHRJbmZvLm9uSGlkZGVuO1xuICAgICAgICAgICAgbm90aWZ5KGNvbXBvbmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNpbXVsYXRlZEV2ZW50LnN0b3AoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIHJ1biQxKHdpbmRvd1Njcm9sbCgpLCAoY29tcG9uZW50LCBfKSA9PiB7XG4gICAgICAgIHJlZnJlc2gkMyhjb21wb25lbnQsIGRvY2tJbmZvLCBkb2NrU3RhdGUpO1xuICAgICAgfSksXG4gICAgICBydW4kMShleHRlcm5hbEVsZW1lbnRTY3JvbGwoKSwgKGNvbXBvbmVudCwgXykgPT4ge1xuICAgICAgICByZWZyZXNoJDMoY29tcG9uZW50LCBkb2NrSW5mbywgZG9ja1N0YXRlKTtcbiAgICAgIH0pLFxuICAgICAgcnVuJDEod2luZG93UmVzaXplKCksIChjb21wb25lbnQsIF8pID0+IHtcbiAgICAgICAgcmVzZXQoY29tcG9uZW50LCBkb2NrSW5mbywgZG9ja1N0YXRlKTtcbiAgICAgIH0pXG4gICAgXSk7XG5cbiAgICB2YXIgQWN0aXZlRG9ja2luZyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBldmVudHM6IGV2ZW50cyQ0XG4gICAgfSk7XG5cbiAgICB2YXIgRG9ja2luZ1NjaGVtYSA9IFtcbiAgICAgIG9wdGlvbk9iak9mKCdjb250ZXh0dWFsJywgW1xuICAgICAgICByZXF1aXJlZFN0cmluZygnZmFkZUluQ2xhc3MnKSxcbiAgICAgICAgcmVxdWlyZWRTdHJpbmcoJ2ZhZGVPdXRDbGFzcycpLFxuICAgICAgICByZXF1aXJlZFN0cmluZygndHJhbnNpdGlvbkNsYXNzJyksXG4gICAgICAgIHJlcXVpcmVkRnVuY3Rpb24oJ2xhenlDb250ZXh0JyksXG4gICAgICAgIG9uSGFuZGxlcignb25TaG93JyksXG4gICAgICAgIG9uSGFuZGxlcignb25TaG93bicpLFxuICAgICAgICBvbkhhbmRsZXIoJ29uSGlkZScpLFxuICAgICAgICBvbkhhbmRsZXIoJ29uSGlkZGVuJylcbiAgICAgIF0pLFxuICAgICAgZGVmYXVsdGVkRnVuY3Rpb24oJ2xhenlWaWV3cG9ydCcsICgpID0+ICh7XG4gICAgICAgIGJvdW5kczogd2luKCksXG4gICAgICAgIG9wdFNjcm9sbEVudjogT3B0aW9uYWwubm9uZSgpXG4gICAgICB9KSksXG4gICAgICBkZWZhdWx0ZWRBcnJheU9mKCdtb2RlcycsIFtcbiAgICAgICAgJ3RvcCcsXG4gICAgICAgICdib3R0b20nXG4gICAgICBdLCBzdHJpbmcpLFxuICAgICAgb25IYW5kbGVyKCdvbkRvY2tlZCcpLFxuICAgICAgb25IYW5kbGVyKCdvblVuZG9ja2VkJylcbiAgICBdO1xuXG4gICAgY29uc3QgaW5pdCQ1ID0gc3BlYyA9PiB7XG4gICAgICBjb25zdCBkb2NrZWQgPSBDZWxsKGZhbHNlKTtcbiAgICAgIGNvbnN0IHZpc2libGUgPSBDZWxsKHRydWUpO1xuICAgICAgY29uc3QgaW5pdGlhbEJvdW5kcyA9IHZhbHVlJDIoKTtcbiAgICAgIGNvbnN0IG1vZGVzID0gQ2VsbChzcGVjLm1vZGVzKTtcbiAgICAgIGNvbnN0IHJlYWRTdGF0ZSA9ICgpID0+IGBkb2NrZWQ6ICAkeyBkb2NrZWQuZ2V0KCkgfSwgdmlzaWJsZTogJHsgdmlzaWJsZS5nZXQoKSB9LCBtb2RlczogJHsgbW9kZXMuZ2V0KCkuam9pbignLCcpIH1gO1xuICAgICAgcmV0dXJuIG51JDgoe1xuICAgICAgICBpc0RvY2tlZDogZG9ja2VkLmdldCxcbiAgICAgICAgc2V0RG9ja2VkOiBkb2NrZWQuc2V0LFxuICAgICAgICBnZXRJbml0aWFsUG9zOiBpbml0aWFsQm91bmRzLmdldCxcbiAgICAgICAgc2V0SW5pdGlhbFBvczogaW5pdGlhbEJvdW5kcy5zZXQsXG4gICAgICAgIGNsZWFySW5pdGlhbFBvczogaW5pdGlhbEJvdW5kcy5jbGVhcixcbiAgICAgICAgaXNWaXNpYmxlOiB2aXNpYmxlLmdldCxcbiAgICAgICAgc2V0VmlzaWJsZTogdmlzaWJsZS5zZXQsXG4gICAgICAgIGdldE1vZGVzOiBtb2Rlcy5nZXQsXG4gICAgICAgIHNldE1vZGVzOiBtb2Rlcy5zZXQsXG4gICAgICAgIHJlYWRTdGF0ZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHZhciBEb2NraW5nU3RhdGUgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgaW5pdDogaW5pdCQ1XG4gICAgfSk7XG5cbiAgICBjb25zdCBEb2NraW5nID0gY3JlYXRlJDQoe1xuICAgICAgZmllbGRzOiBEb2NraW5nU2NoZW1hLFxuICAgICAgbmFtZTogJ2RvY2tpbmcnLFxuICAgICAgYWN0aXZlOiBBY3RpdmVEb2NraW5nLFxuICAgICAgYXBpczogRG9ja2luZ0FwaXMsXG4gICAgICBzdGF0ZTogRG9ja2luZ1N0YXRlXG4gICAgfSk7XG5cbiAgICBjb25zdCB0b29sYmFySGVpZ2h0Q2hhbmdlID0gY29uc3RhbnQkMShnZW5lcmF0ZSQ2KCd0b29sYmFyLWhlaWdodC1jaGFuZ2UnKSk7XG5cbiAgICBjb25zdCB2aXNpYmlsaXR5ID0ge1xuICAgICAgZmFkZUluQ2xhc3M6ICd0b3gtZWRpdG9yLWRvY2stZmFkZWluJyxcbiAgICAgIGZhZGVPdXRDbGFzczogJ3RveC1lZGl0b3ItZG9jay1mYWRlb3V0JyxcbiAgICAgIHRyYW5zaXRpb25DbGFzczogJ3RveC1lZGl0b3ItZG9jay10cmFuc2l0aW9uJ1xuICAgIH07XG4gICAgY29uc3QgZWRpdG9yU3RpY2t5T25DbGFzcyA9ICd0b3gtdGlueW1jZS0tdG9vbGJhci1zdGlja3ktb24nO1xuICAgIGNvbnN0IGVkaXRvclN0aWNreU9mZkNsYXNzID0gJ3RveC10aW55bWNlLS10b29sYmFyLXN0aWNreS1vZmYnO1xuICAgIGNvbnN0IHNjcm9sbEZyb21CZWhpbmRIZWFkZXIgPSAoZSwgY29udGFpbmVySGVhZGVyKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBvd25lciQ0KGNvbnRhaW5lckhlYWRlcik7XG4gICAgICBjb25zdCB3aW4gPSBkZWZhdWx0Vmlldyhjb250YWluZXJIZWFkZXIpO1xuICAgICAgY29uc3Qgdmlld0hlaWdodCA9IHdpbi5kb20uaW5uZXJIZWlnaHQ7XG4gICAgICBjb25zdCBzY3JvbGxQb3MgPSBnZXQkYihkb2MpO1xuICAgICAgY29uc3QgbWFya2VyRWxlbWVudCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGUuZWxtKTtcbiAgICAgIGNvbnN0IG1hcmtlclBvcyA9IGFic29sdXRlJDIobWFya2VyRWxlbWVudCk7XG4gICAgICBjb25zdCBtYXJrZXJIZWlnaHQgPSBnZXQkZChtYXJrZXJFbGVtZW50KTtcbiAgICAgIGNvbnN0IG1hcmtlclRvcCA9IG1hcmtlclBvcy55O1xuICAgICAgY29uc3QgbWFya2VyQm90dG9tID0gbWFya2VyVG9wICsgbWFya2VySGVpZ2h0O1xuICAgICAgY29uc3QgZWRpdG9ySGVhZGVyUG9zID0gYWJzb2x1dGUkMyhjb250YWluZXJIZWFkZXIpO1xuICAgICAgY29uc3QgZWRpdG9ySGVhZGVySGVpZ2h0ID0gZ2V0JGQoY29udGFpbmVySGVhZGVyKTtcbiAgICAgIGNvbnN0IGVkaXRvckhlYWRlclRvcCA9IGVkaXRvckhlYWRlclBvcy50b3A7XG4gICAgICBjb25zdCBlZGl0b3JIZWFkZXJCb3R0b20gPSBlZGl0b3JIZWFkZXJUb3AgKyBlZGl0b3JIZWFkZXJIZWlnaHQ7XG4gICAgICBjb25zdCBlZGl0b3JIZWFkZXJEb2NrZWRBdFRvcCA9IE1hdGguYWJzKGVkaXRvckhlYWRlclRvcCAtIHNjcm9sbFBvcy50b3ApIDwgMjtcbiAgICAgIGNvbnN0IGVkaXRvckhlYWRlckRvY2tlZEF0Qm90dG9tID0gTWF0aC5hYnMoZWRpdG9ySGVhZGVyQm90dG9tIC0gKHNjcm9sbFBvcy50b3AgKyB2aWV3SGVpZ2h0KSkgPCAyO1xuICAgICAgaWYgKGVkaXRvckhlYWRlckRvY2tlZEF0VG9wICYmIG1hcmtlclRvcCA8IGVkaXRvckhlYWRlckJvdHRvbSkge1xuICAgICAgICB0byhzY3JvbGxQb3MubGVmdCwgbWFya2VyVG9wIC0gZWRpdG9ySGVhZGVySGVpZ2h0LCBkb2MpO1xuICAgICAgfSBlbHNlIGlmIChlZGl0b3JIZWFkZXJEb2NrZWRBdEJvdHRvbSAmJiBtYXJrZXJCb3R0b20gPiBlZGl0b3JIZWFkZXJUb3ApIHtcbiAgICAgICAgY29uc3QgeSA9IG1hcmtlclRvcCAtIHZpZXdIZWlnaHQgKyBtYXJrZXJIZWlnaHQgKyBlZGl0b3JIZWFkZXJIZWlnaHQ7XG4gICAgICAgIHRvKHNjcm9sbFBvcy5sZWZ0LCB5LCBkb2MpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNEb2NrZWRNb2RlID0gKGhlYWRlciwgbW9kZSkgPT4gY29udGFpbnMkMihEb2NraW5nLmdldE1vZGVzKGhlYWRlciksIG1vZGUpO1xuICAgIGNvbnN0IHVwZGF0ZUlmcmFtZUNvbnRlbnRGbG93ID0gaGVhZGVyID0+IHtcbiAgICAgIGNvbnN0IGdldE9jY3VwaWVkSGVpZ2h0ID0gZWxtID0+IGdldE91dGVyJDIoZWxtKSArIChwYXJzZUludChnZXQkZShlbG0sICdtYXJnaW4tdG9wJyksIDEwKSB8fCAwKSArIChwYXJzZUludChnZXQkZShlbG0sICdtYXJnaW4tYm90dG9tJyksIDEwKSB8fCAwKTtcbiAgICAgIGNvbnN0IGVsbSA9IGhlYWRlci5lbGVtZW50O1xuICAgICAgcGFyZW50RWxlbWVudChlbG0pLmVhY2gocGFyZW50RWxlbSA9PiB7XG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSAncGFkZGluZy0nICsgRG9ja2luZy5nZXRNb2RlcyhoZWFkZXIpWzBdO1xuICAgICAgICBpZiAoRG9ja2luZy5pc0RvY2tlZChoZWFkZXIpKSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50V2lkdGggPSBnZXQkYyhwYXJlbnRFbGVtKTtcbiAgICAgICAgICBzZXQkOChlbG0sICd3aWR0aCcsIHBhcmVudFdpZHRoICsgJ3B4Jyk7XG4gICAgICAgICAgc2V0JDgocGFyZW50RWxlbSwgcGFkZGluZywgZ2V0T2NjdXBpZWRIZWlnaHQoZWxtKSArICdweCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbW92ZSQ2KGVsbSwgJ3dpZHRoJyk7XG4gICAgICAgICAgcmVtb3ZlJDYocGFyZW50RWxlbSwgcGFkZGluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgdXBkYXRlU2lua1Zpc2liaWxpdHkgPSAoc2lua0VsZW0sIHZpc2libGUpID0+IHtcbiAgICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICAgIHJlbW92ZSQyKHNpbmtFbGVtLCB2aXNpYmlsaXR5LmZhZGVPdXRDbGFzcyk7XG4gICAgICAgIGFkZCQxKHNpbmtFbGVtLCBbXG4gICAgICAgICAgdmlzaWJpbGl0eS50cmFuc2l0aW9uQ2xhc3MsXG4gICAgICAgICAgdmlzaWJpbGl0eS5mYWRlSW5DbGFzc1xuICAgICAgICBdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZSQyKHNpbmtFbGVtLCB2aXNpYmlsaXR5LmZhZGVJbkNsYXNzKTtcbiAgICAgICAgYWRkJDEoc2lua0VsZW0sIFtcbiAgICAgICAgICB2aXNpYmlsaXR5LmZhZGVPdXRDbGFzcyxcbiAgICAgICAgICB2aXNpYmlsaXR5LnRyYW5zaXRpb25DbGFzc1xuICAgICAgICBdKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHVwZGF0ZUVkaXRvckNsYXNzZXMgPSAoZWRpdG9yLCBkb2NrZWQpID0+IHtcbiAgICAgIGNvbnN0IGVkaXRvckNvbnRhaW5lciA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRDb250YWluZXIoKSk7XG4gICAgICBpZiAoZG9ja2VkKSB7XG4gICAgICAgIGFkZCQyKGVkaXRvckNvbnRhaW5lciwgZWRpdG9yU3RpY2t5T25DbGFzcyk7XG4gICAgICAgIHJlbW92ZSQyKGVkaXRvckNvbnRhaW5lciwgZWRpdG9yU3RpY2t5T2ZmQ2xhc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWRkJDIoZWRpdG9yQ29udGFpbmVyLCBlZGl0b3JTdGlja3lPZmZDbGFzcyk7XG4gICAgICAgIHJlbW92ZSQyKGVkaXRvckNvbnRhaW5lciwgZWRpdG9yU3RpY2t5T25DbGFzcyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZXN0b3JlRm9jdXMgPSAoaGVhZGVyRWxlbSwgZm9jdXNlZEVsZW0pID0+IHtcbiAgICAgIGNvbnN0IG93bmVyRG9jID0gb3duZXIkNChmb2N1c2VkRWxlbSk7XG4gICAgICBhY3RpdmUkMShvd25lckRvYykuZmlsdGVyKGFjdGl2ZUVsbSA9PiAhZXEoZm9jdXNlZEVsZW0sIGFjdGl2ZUVsbSkpLmZpbHRlcihhY3RpdmVFbG0gPT4gZXEoYWN0aXZlRWxtLCBTdWdhckVsZW1lbnQuZnJvbURvbShvd25lckRvYy5kb20uYm9keSkpIHx8IGNvbnRhaW5zKGhlYWRlckVsZW0sIGFjdGl2ZUVsbSkpLmVhY2goKCkgPT4gZm9jdXMkMyhmb2N1c2VkRWxlbSkpO1xuICAgIH07XG4gICAgY29uc3QgZmluZEZvY3VzZWRFbGVtID0gKHJvb3RFbG0sIGxhenlTaW5rKSA9PiBzZWFyY2gocm9vdEVsbSkub3JUaHVuaygoKSA9PiBsYXp5U2luaygpLnRvT3B0aW9uYWwoKS5iaW5kKHNpbmsgPT4gc2VhcmNoKHNpbmsuZWxlbWVudCkpKTtcbiAgICBjb25zdCBzZXR1cCQ5ID0gKGVkaXRvciwgc2hhcmVkQmFja3N0YWdlLCBsYXp5SGVhZGVyKSA9PiB7XG4gICAgICBpZiAoIWVkaXRvci5pbmxpbmUpIHtcbiAgICAgICAgaWYgKCFzaGFyZWRCYWNrc3RhZ2UuaGVhZGVyLmlzUG9zaXRpb25lZEF0VG9wKCkpIHtcbiAgICAgICAgICBlZGl0b3Iub24oJ1Jlc2l6ZUVkaXRvcicsICgpID0+IHtcbiAgICAgICAgICAgIGxhenlIZWFkZXIoKS5lYWNoKERvY2tpbmcucmVzZXQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVkaXRvci5vbignUmVzaXplV2luZG93IFJlc2l6ZUVkaXRvcicsICgpID0+IHtcbiAgICAgICAgICBsYXp5SGVhZGVyKCkuZWFjaCh1cGRhdGVJZnJhbWVDb250ZW50Rmxvdyk7XG4gICAgICAgIH0pO1xuICAgICAgICBlZGl0b3Iub24oJ1NraW5Mb2FkZWQnLCAoKSA9PiB7XG4gICAgICAgICAgbGF6eUhlYWRlcigpLmVhY2goY29tcCA9PiB7XG4gICAgICAgICAgICBEb2NraW5nLmlzRG9ja2VkKGNvbXApID8gRG9ja2luZy5yZXNldChjb21wKSA6IERvY2tpbmcucmVmcmVzaChjb21wKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVkaXRvci5vbignRnVsbHNjcmVlblN0YXRlQ2hhbmdlZCcsICgpID0+IHtcbiAgICAgICAgICBsYXp5SGVhZGVyKCkuZWFjaChEb2NraW5nLnJlc2V0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlZGl0b3Iub24oJ0FmdGVyU2Nyb2xsSW50b1ZpZXcnLCBlID0+IHtcbiAgICAgICAgbGF6eUhlYWRlcigpLmVhY2goaGVhZGVyID0+IHtcbiAgICAgICAgICBEb2NraW5nLnJlZnJlc2goaGVhZGVyKTtcbiAgICAgICAgICBjb25zdCBoZWFkZXJFbGVtID0gaGVhZGVyLmVsZW1lbnQ7XG4gICAgICAgICAgaWYgKGlzVmlzaWJsZShoZWFkZXJFbGVtKSkge1xuICAgICAgICAgICAgc2Nyb2xsRnJvbUJlaGluZEhlYWRlcihlLCBoZWFkZXJFbGVtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ1Bvc3RSZW5kZXInLCAoKSA9PiB7XG4gICAgICAgIHVwZGF0ZUVkaXRvckNsYXNzZXMoZWRpdG9yLCBmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzRG9ja2VkID0gbGF6eUhlYWRlciA9PiBsYXp5SGVhZGVyKCkubWFwKERvY2tpbmcuaXNEb2NrZWQpLmdldE9yKGZhbHNlKTtcbiAgICBjb25zdCBnZXRJZnJhbWVCZWhhdmlvdXJzID0gKCkgPT4gW1JlY2VpdmluZy5jb25maWcoeyBjaGFubmVsczogeyBbdG9vbGJhckhlaWdodENoYW5nZSgpXTogeyBvblJlY2VpdmU6IHVwZGF0ZUlmcmFtZUNvbnRlbnRGbG93IH0gfSB9KV07XG4gICAgY29uc3QgZ2V0QmVoYXZpb3VycyA9IChlZGl0b3IsIHNoYXJlZEJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgZm9jdXNlZEVsbSA9IHZhbHVlJDIoKTtcbiAgICAgIGNvbnN0IGxhenlTaW5rID0gc2hhcmVkQmFja3N0YWdlLmdldFNpbms7XG4gICAgICBjb25zdCBydW5PblNpbmtFbGVtZW50ID0gZiA9PiB7XG4gICAgICAgIGxhenlTaW5rKCkuZWFjaChzaW5rID0+IGYoc2luay5lbGVtZW50KSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25Eb2NraW5nU3dpdGNoID0gY29tcCA9PiB7XG4gICAgICAgIGlmICghZWRpdG9yLmlubGluZSkge1xuICAgICAgICAgIHVwZGF0ZUlmcmFtZUNvbnRlbnRGbG93KGNvbXApO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZUVkaXRvckNsYXNzZXMoZWRpdG9yLCBEb2NraW5nLmlzRG9ja2VkKGNvbXApKTtcbiAgICAgICAgY29tcC5nZXRTeXN0ZW0oKS5icm9hZGNhc3RPbihbcmVwb3NpdGlvblBvcHVwcygpXSwge30pO1xuICAgICAgICBsYXp5U2luaygpLmVhY2goc2luayA9PiBzaW5rLmdldFN5c3RlbSgpLmJyb2FkY2FzdE9uKFtyZXBvc2l0aW9uUG9wdXBzKCldLCB7fSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxCZWhhdmlvdXJzID0gZWRpdG9yLmlubGluZSA/IFtdIDogZ2V0SWZyYW1lQmVoYXZpb3VycygpO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgRm9jdXNpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgRG9ja2luZy5jb25maWcoe1xuICAgICAgICAgIGNvbnRleHR1YWw6IHtcbiAgICAgICAgICAgIGxhenlDb250ZXh0OiBjb21wID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaGVhZGVySGVpZ2h0ID0gZ2V0T3V0ZXIkMihjb21wLmVsZW1lbnQpO1xuICAgICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBlZGl0b3IuaW5saW5lID8gZWRpdG9yLmdldENvbnRlbnRBcmVhQ29udGFpbmVyKCkgOiBlZGl0b3IuZ2V0Q29udGFpbmVyKCk7XG4gICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKGNvbnRhaW5lcikubWFwKGMgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJveCA9IGJveCQxKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGMpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRTY3JvbGxpbmdDb250ZXh0ID0gZGV0ZWN0V2hlblNwbGl0VWlNb2RlKGVkaXRvciwgY29tcC5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0U2Nyb2xsaW5nQ29udGV4dC5mb2xkKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGJveEhlaWdodCA9IGJveC5oZWlnaHQgLSBoZWFkZXJIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0b3BCb3VuZCA9IGJveC55ICsgKGlzRG9ja2VkTW9kZShjb21wLCAndG9wJykgPyAwIDogaGVhZGVySGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBib3VuZHMoYm94LngsIHRvcEJvdW5kLCBib3gud2lkdGgsIGJveEhlaWdodCk7XG4gICAgICAgICAgICAgICAgfSwgc2Nyb2xsRW52ID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnN0cmFpbmVkQm91bmRzID0gY29uc3RyYWluKGJveCwgZ2V0Qm91bmRzRnJvbShzY3JvbGxFbnYpKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnN0cmFpbmVkQm91bmRzWSA9IGlzRG9ja2VkTW9kZShjb21wLCAndG9wJykgPyBjb25zdHJhaW5lZEJvdW5kcy55IDogY29uc3RyYWluZWRCb3VuZHMueSArIGhlYWRlckhlaWdodDtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBib3VuZHMoY29uc3RyYWluZWRCb3VuZHMueCwgY29uc3RyYWluZWRCb3VuZHNZLCBjb25zdHJhaW5lZEJvdW5kcy53aWR0aCwgY29uc3RyYWluZWRCb3VuZHMuaGVpZ2h0IC0gaGVhZGVySGVpZ2h0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25TaG93OiAoKSA9PiB7XG4gICAgICAgICAgICAgIHJ1bk9uU2lua0VsZW1lbnQoZWxlbSA9PiB1cGRhdGVTaW5rVmlzaWJpbGl0eShlbGVtLCB0cnVlKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25TaG93bjogY29tcCA9PiB7XG4gICAgICAgICAgICAgIHJ1bk9uU2lua0VsZW1lbnQoZWxlbSA9PiByZW1vdmUkMShlbGVtLCBbXG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eS50cmFuc2l0aW9uQ2xhc3MsXG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eS5mYWRlSW5DbGFzc1xuICAgICAgICAgICAgICBdKSk7XG4gICAgICAgICAgICAgIGZvY3VzZWRFbG0uZ2V0KCkuZWFjaChlbGVtID0+IHtcbiAgICAgICAgICAgICAgICByZXN0b3JlRm9jdXMoY29tcC5lbGVtZW50LCBlbGVtKTtcbiAgICAgICAgICAgICAgICBmb2N1c2VkRWxtLmNsZWFyKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uSGlkZTogY29tcCA9PiB7XG4gICAgICAgICAgICAgIGZpbmRGb2N1c2VkRWxlbShjb21wLmVsZW1lbnQsIGxhenlTaW5rKS5mb2xkKGZvY3VzZWRFbG0uY2xlYXIsIGZvY3VzZWRFbG0uc2V0KTtcbiAgICAgICAgICAgICAgcnVuT25TaW5rRWxlbWVudChlbGVtID0+IHVwZGF0ZVNpbmtWaXNpYmlsaXR5KGVsZW0sIGZhbHNlKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25IaWRkZW46ICgpID0+IHtcbiAgICAgICAgICAgICAgcnVuT25TaW5rRWxlbWVudChlbGVtID0+IHJlbW92ZSQxKGVsZW0sIFt2aXNpYmlsaXR5LnRyYW5zaXRpb25DbGFzc10pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi52aXNpYmlsaXR5XG4gICAgICAgICAgfSxcbiAgICAgICAgICBsYXp5Vmlld3BvcnQ6IGNvbXAgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3B0U2Nyb2xsaW5nQ29udGV4dCA9IGRldGVjdFdoZW5TcGxpdFVpTW9kZShlZGl0b3IsIGNvbXAuZWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm4gb3B0U2Nyb2xsaW5nQ29udGV4dC5mb2xkKCgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgYm91bmRzV2l0aG91dE9mZnNldCA9IHdpbigpO1xuICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBnZXRTdGlja3lUb29sYmFyT2Zmc2V0KGVkaXRvcik7XG4gICAgICAgICAgICAgIGNvbnN0IHRvcCA9IGJvdW5kc1dpdGhvdXRPZmZzZXQueSArIChpc0RvY2tlZE1vZGUoY29tcCwgJ3RvcCcpID8gb2Zmc2V0IDogMCk7XG4gICAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdW5kc1dpdGhvdXRPZmZzZXQuaGVpZ2h0IC0gKGlzRG9ja2VkTW9kZShjb21wLCAnYm90dG9tJykgPyBvZmZzZXQgOiAwKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBib3VuZHM6IGJvdW5kcyhib3VuZHNXaXRob3V0T2Zmc2V0LngsIHRvcCwgYm91bmRzV2l0aG91dE9mZnNldC53aWR0aCwgaGVpZ2h0KSxcbiAgICAgICAgICAgICAgICBvcHRTY3JvbGxFbnY6IE9wdGlvbmFsLm5vbmUoKVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSwgc2MgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb21iaW5lZEJvdW5kcyA9IGdldEJvdW5kc0Zyb20oc2MpO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGJvdW5kczogY29tYmluZWRCb3VuZHMsXG4gICAgICAgICAgICAgICAgb3B0U2Nyb2xsRW52OiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY3JvbGxUb3A6IHNjLmVsZW1lbnQuZG9tLnNjcm9sbFRvcCxcbiAgICAgICAgICAgICAgICAgIHNjcm9sbEVsbVRvcDogYWJzb2x1dGUkMyhzYy5lbGVtZW50KS50b3BcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBtb2RlczogW3NoYXJlZEJhY2tzdGFnZS5oZWFkZXIuZ2V0RG9ja2luZ01vZGUoKV0sXG4gICAgICAgICAgb25Eb2NrZWQ6IG9uRG9ja2luZ1N3aXRjaCxcbiAgICAgICAgICBvblVuZG9ja2VkOiBvbkRvY2tpbmdTd2l0Y2hcbiAgICAgICAgfSksXG4gICAgICAgIC4uLmFkZGl0aW9uYWxCZWhhdmlvdXJzXG4gICAgICBdO1xuICAgIH07XG5cbiAgICB2YXIgU3RpY2t5SGVhZGVyID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIHNldHVwOiBzZXR1cCQ5LFxuICAgICAgICBpc0RvY2tlZDogaXNEb2NrZWQsXG4gICAgICAgIGdldEJlaGF2aW91cnM6IGdldEJlaGF2aW91cnNcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlbmRlckhlYWRlciA9IHNwZWMgPT4ge1xuICAgICAgY29uc3QgZWRpdG9yID0gc3BlYy5lZGl0b3I7XG4gICAgICBjb25zdCBnZXRCZWhhdmlvdXJzJDIgPSBzcGVjLnN0aWNreSA/IGdldEJlaGF2aW91cnMgOiBnZXRCZWhhdmlvdXJzJDE7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1aWQ6IHNwZWMudWlkLFxuICAgICAgICBkb206IHNwZWMuZG9tLFxuICAgICAgICBjb21wb25lbnRzOiBzcGVjLmNvbXBvbmVudHMsXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKGdldEJlaGF2aW91cnMkMihlZGl0b3IsIHNwZWMuc2hhcmVkQmFja3N0YWdlKSlcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGdyb3VwVG9vbGJhckJ1dHRvblNjaGVtYSA9IG9iak9mKFtcbiAgICAgIHR5cGUsXG4gICAgICByZXF1aXJlZE9mKCdpdGVtcycsIG9uZU9mKFtcbiAgICAgICAgYXJyT2ZPYmooW1xuICAgICAgICAgIG5hbWUkMSxcbiAgICAgICAgICByZXF1aXJlZEFycmF5T2YoJ2l0ZW1zJywgc3RyaW5nKVxuICAgICAgICBdKSxcbiAgICAgICAgc3RyaW5nXG4gICAgICBdKSlcbiAgICBdLmNvbmNhdChiYXNlVG9vbGJhckJ1dHRvbkZpZWxkcykpO1xuICAgIGNvbnN0IGNyZWF0ZUdyb3VwVG9vbGJhckJ1dHRvbiA9IHNwZWMgPT4gYXNSYXcoJ0dyb3VwVG9vbGJhckJ1dHRvbicsIGdyb3VwVG9vbGJhckJ1dHRvblNjaGVtYSwgc3BlYyk7XG5cbiAgICBjb25zdCBiYXNlTWVudUJ1dHRvbkZpZWxkcyA9IFtcbiAgICAgIG9wdGlvblN0cmluZygndGV4dCcpLFxuICAgICAgb3B0aW9uU3RyaW5nKCd0b29sdGlwJyksXG4gICAgICBvcHRpb25TdHJpbmcoJ2ljb24nKSxcbiAgICAgIGRlZmF1bHRlZE9mKCdzZWFyY2gnLCBmYWxzZSwgb25lT2YoW1xuICAgICAgICBib29sZWFuLFxuICAgICAgICBvYmpPZihbb3B0aW9uU3RyaW5nKCdwbGFjZWhvbGRlcicpXSlcbiAgICAgIF0sIHggPT4ge1xuICAgICAgICBpZiAoaXNCb29sZWFuKHgpKSB7XG4gICAgICAgICAgcmV0dXJuIHggPyBPcHRpb25hbC5zb21lKHsgcGxhY2Vob2xkZXI6IE9wdGlvbmFsLm5vbmUoKSB9KSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh4KTtcbiAgICAgICAgfVxuICAgICAgfSkpLFxuICAgICAgcmVxdWlyZWRGdW5jdGlvbignZmV0Y2gnKSxcbiAgICAgIGRlZmF1bHRlZEZ1bmN0aW9uKCdvblNldHVwJywgKCkgPT4gbm9vcClcbiAgICBdO1xuXG4gICAgY29uc3QgTWVudUJ1dHRvblNjaGVtYSA9IG9iak9mKFtcbiAgICAgIHR5cGUsXG4gICAgICAuLi5iYXNlTWVudUJ1dHRvbkZpZWxkc1xuICAgIF0pO1xuICAgIGNvbnN0IGNyZWF0ZU1lbnVCdXR0b24gPSBzcGVjID0+IGFzUmF3KCdtZW51YnV0dG9uJywgTWVudUJ1dHRvblNjaGVtYSwgc3BlYyk7XG5cbiAgICBjb25zdCBzcGxpdEJ1dHRvblNjaGVtYSA9IG9iak9mKFtcbiAgICAgIHR5cGUsXG4gICAgICBvcHRpb25hbFRvb2x0aXAsXG4gICAgICBvcHRpb25hbEljb24sXG4gICAgICBvcHRpb25hbFRleHQsXG4gICAgICBvcHRpb25hbFNlbGVjdCxcbiAgICAgIGZldGNoJDEsXG4gICAgICBvblNldHVwLFxuICAgICAgZGVmYXVsdGVkU3RyaW5nRW51bSgncHJlc2V0cycsICdub3JtYWwnLCBbXG4gICAgICAgICdub3JtYWwnLFxuICAgICAgICAnY29sb3InLFxuICAgICAgICAnbGlzdHByZXZpZXcnXG4gICAgICBdKSxcbiAgICAgIGRlZmF1bHRlZENvbHVtbnMoMSksXG4gICAgICBvbkFjdGlvbixcbiAgICAgIG9uSXRlbUFjdGlvblxuICAgIF0pO1xuICAgIGNvbnN0IGNyZWF0ZVNwbGl0QnV0dG9uID0gc3BlYyA9PiBhc1JhdygnU3BsaXRCdXR0b24nLCBzcGxpdEJ1dHRvblNjaGVtYSwgc3BlYyk7XG5cbiAgICBjb25zdCBmYWN0b3J5JGQgPSAoZGV0YWlsLCBzcGVjKSA9PiB7XG4gICAgICBjb25zdCBzZXRNZW51cyA9IChjb21wLCBtZW51cykgPT4ge1xuICAgICAgICBjb25zdCBuZXdNZW51cyA9IG1hcCQyKG1lbnVzLCBtID0+IHtcbiAgICAgICAgICBjb25zdCBidXR0b25TcGVjID0ge1xuICAgICAgICAgICAgdHlwZTogJ21lbnVidXR0b24nLFxuICAgICAgICAgICAgdGV4dDogbS50ZXh0LFxuICAgICAgICAgICAgZmV0Y2g6IGNhbGxiYWNrID0+IHtcbiAgICAgICAgICAgICAgY2FsbGJhY2sobS5nZXRJdGVtcygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGludGVybmFsID0gY3JlYXRlTWVudUJ1dHRvbihidXR0b25TcGVjKS5tYXBFcnJvcihlcnJJbmZvID0+IGZvcm1hdEVycm9yKGVyckluZm8pKS5nZXRPckRpZSgpO1xuICAgICAgICAgIHJldHVybiByZW5kZXJNZW51QnV0dG9uKGludGVybmFsLCAndG94LW1idG4nLCBzcGVjLmJhY2tzdGFnZSwgT3B0aW9uYWwuc29tZSgnbWVudWl0ZW0nKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBSZXBsYWNpbmcuc2V0KGNvbXAsIG5ld01lbnVzKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBhcGlzID0ge1xuICAgICAgICBmb2N1czogS2V5aW5nLmZvY3VzSW4sXG4gICAgICAgIHNldE1lbnVzXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgICBkb206IGRldGFpbC5kb20sXG4gICAgICAgIGNvbXBvbmVudHM6IFtdLFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgUmVwbGFjaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgY29uZmlnKCdtZW51YmFyLWV2ZW50cycsIFtcbiAgICAgICAgICAgIHJ1bk9uQXR0YWNoZWQoY29tcG9uZW50ID0+IHtcbiAgICAgICAgICAgICAgZGV0YWlsLm9uU2V0dXAoY29tcG9uZW50KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcnVuJDEobW91c2VvdmVyKCksIChjb21wLCBzZSkgPT4ge1xuICAgICAgICAgICAgICBkZXNjZW5kYW50KGNvbXAuZWxlbWVudCwgJy4nICsgJ3RveC1tYnRuLS1hY3RpdmUnKS5lYWNoKGFjdGl2ZUJ1dHRvbiA9PiB7XG4gICAgICAgICAgICAgICAgY2xvc2VzdCQxKHNlLmV2ZW50LnRhcmdldCwgJy4nICsgJ3RveC1tYnRuJykuZWFjaChob3ZlcmVkQnV0dG9uID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICghZXEoYWN0aXZlQnV0dG9uLCBob3ZlcmVkQnV0dG9uKSkge1xuICAgICAgICAgICAgICAgICAgICBjb21wLmdldFN5c3RlbSgpLmdldEJ5RG9tKGFjdGl2ZUJ1dHRvbikuZWFjaChhY3RpdmVDb21wID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb21wLmdldFN5c3RlbSgpLmdldEJ5RG9tKGhvdmVyZWRCdXR0b24pLmVhY2goaG92ZXJlZENvbXAgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgRHJvcGRvd24uZXhwYW5kKGhvdmVyZWRDb21wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIERyb3Bkb3duLmNsb3NlKGFjdGl2ZUNvbXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgRm9jdXNpbmcuZm9jdXMoaG92ZXJlZENvbXApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHJ1biQxKGZvY3VzU2hpZnRlZCgpLCAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgICAgICAgc2UuZXZlbnQucHJldkZvY3VzLmJpbmQocHJldiA9PiBjb21wLmdldFN5c3RlbSgpLmdldEJ5RG9tKHByZXYpLnRvT3B0aW9uYWwoKSkuZWFjaChwcmV2ID0+IHtcbiAgICAgICAgICAgICAgICBzZS5ldmVudC5uZXdGb2N1cy5iaW5kKG51ID0+IGNvbXAuZ2V0U3lzdGVtKCkuZ2V0QnlEb20obnUpLnRvT3B0aW9uYWwoKSkuZWFjaChudSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoRHJvcGRvd24uaXNPcGVuKHByZXYpKSB7XG4gICAgICAgICAgICAgICAgICAgIERyb3Bkb3duLmV4cGFuZChudSk7XG4gICAgICAgICAgICAgICAgICAgIERyb3Bkb3duLmNsb3NlKHByZXYpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSksXG4gICAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBtb2RlOiAnZmxvdycsXG4gICAgICAgICAgICBzZWxlY3RvcjogJy4nICsgJ3RveC1tYnRuJyxcbiAgICAgICAgICAgIG9uRXNjYXBlOiBjb21wID0+IHtcbiAgICAgICAgICAgICAgZGV0YWlsLm9uRXNjYXBlKGNvbXApO1xuICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBUYWJzdG9wcGluZy5jb25maWcoe30pXG4gICAgICAgIF0pLFxuICAgICAgICBhcGlzLFxuICAgICAgICBkb21Nb2RpZmljYXRpb246IHsgYXR0cmlidXRlczogeyByb2xlOiAnbWVudWJhcicgfSB9XG4gICAgICB9O1xuICAgIH07XG4gICAgdmFyIFNpbHZlck1lbnViYXIgPSBzaW5nbGUoe1xuICAgICAgZmFjdG9yeTogZmFjdG9yeSRkLFxuICAgICAgbmFtZTogJ3NpbHZlci5NZW51YmFyJyxcbiAgICAgIGNvbmZpZ0ZpZWxkczogW1xuICAgICAgICByZXF1aXJlZCQxKCdkb20nKSxcbiAgICAgICAgcmVxdWlyZWQkMSgndWlkJyksXG4gICAgICAgIHJlcXVpcmVkJDEoJ29uRXNjYXBlJyksXG4gICAgICAgIHJlcXVpcmVkJDEoJ2JhY2tzdGFnZScpLFxuICAgICAgICBkZWZhdWx0ZWQoJ29uU2V0dXAnLCBub29wKVxuICAgICAgXSxcbiAgICAgIGFwaXM6IHtcbiAgICAgICAgZm9jdXM6IChhcGlzLCBjb21wKSA9PiB7XG4gICAgICAgICAgYXBpcy5mb2N1cyhjb21wKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0TWVudXM6IChhcGlzLCBjb21wLCBtZW51cykgPT4ge1xuICAgICAgICAgIGFwaXMuc2V0TWVudXMoY29tcCwgbWVudXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBwcm9tb3Rpb25NZXNzYWdlID0gJ1xcdTI2QTFcXHVmZTBmVXBncmFkZSc7XG4gICAgY29uc3QgcHJvbW90aW9uTGluayA9ICdodHRwczovL3d3dy50aW55LmNsb3VkL3RpbnltY2Utc2VsZi1ob3N0ZWQtcHJlbWl1bS1mZWF0dXJlcy8/dXRtX3NvdXJjZT1UaW55TUNFJnV0bV9tZWRpdW09U1BBUCZ1dG1fY2FtcGFpZ249U1BBUCZ1dG1faWQ9ZWRpdG9ycmVmZXJyYWwnO1xuICAgIGNvbnN0IHJlbmRlclByb21vdGlvbiA9IHNwZWMgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdWlkOiBzcGVjLnVpZCxcbiAgICAgICAgZG9tOiBzcGVjLmRvbSxcbiAgICAgICAgY29tcG9uZW50czogW3tcbiAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICB0YWc6ICdhJyxcbiAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICdocmVmJzogcHJvbW90aW9uTGluayxcbiAgICAgICAgICAgICAgICAncmVsJzogJ25vb3BlbmVyJyxcbiAgICAgICAgICAgICAgICAndGFyZ2V0JzogJ19ibGFuaycsXG4gICAgICAgICAgICAgICAgJ2FyaWEtaGlkZGVuJzogJ3RydWUnXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LXByb21vdGlvbi1saW5rJ10sXG4gICAgICAgICAgICAgIGlubmVySHRtbDogcHJvbW90aW9uTWVzc2FnZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1dXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBvd25lciA9ICdjb250YWluZXInO1xuICAgIGNvbnN0IHNjaGVtYSRkID0gW2ZpZWxkKCdzbG90QmVoYXZpb3VycycsIFtdKV07XG4gICAgY29uc3QgZ2V0UGFydE5hbWUgPSBuYW1lID0+ICc8YWxsb3kuZmllbGQuJyArIG5hbWUgKyAnPic7XG4gICAgY29uc3Qgc2tldGNoID0gc1NwZWMgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSAoKCkgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBbXTtcbiAgICAgICAgY29uc3Qgc2xvdCA9IChuYW1lLCBjb25maWcpID0+IHtcbiAgICAgICAgICByZWNvcmQucHVzaChuYW1lKTtcbiAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVPbmUkMShvd25lciwgZ2V0UGFydE5hbWUobmFtZSksIGNvbmZpZyk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2xvdCxcbiAgICAgICAgICByZWNvcmQ6IGNvbnN0YW50JDEocmVjb3JkKVxuICAgICAgICB9O1xuICAgICAgfSkoKTtcbiAgICAgIGNvbnN0IHNwZWMgPSBzU3BlYyhwYXJ0cyk7XG4gICAgICBjb25zdCBwYXJ0TmFtZXMgPSBwYXJ0cy5yZWNvcmQoKTtcbiAgICAgIGNvbnN0IGZpZWxkUGFydHMgPSBtYXAkMihwYXJ0TmFtZXMsIG4gPT4gcmVxdWlyZWQoe1xuICAgICAgICBuYW1lOiBuLFxuICAgICAgICBwbmFtZTogZ2V0UGFydE5hbWUobilcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBjb21wb3NpdGUkMShvd25lciwgc2NoZW1hJGQsIGZpZWxkUGFydHMsIG1ha2UkMSwgc3BlYyk7XG4gICAgfTtcbiAgICBjb25zdCBtYWtlJDEgPSAoZGV0YWlsLCBjb21wb25lbnRzKSA9PiB7XG4gICAgICBjb25zdCBnZXRTbG90TmFtZXMgPSBfID0+IGdldEFsbFBhcnROYW1lcyhkZXRhaWwpO1xuICAgICAgY29uc3QgZ2V0U2xvdCA9IChjb250YWluZXIsIGtleSkgPT4gZ2V0UGFydChjb250YWluZXIsIGRldGFpbCwga2V5KTtcbiAgICAgIGNvbnN0IG9uU2xvdCA9IChmLCBkZWYpID0+IChjb250YWluZXIsIGtleSkgPT4gZ2V0UGFydChjb250YWluZXIsIGRldGFpbCwga2V5KS5tYXAoc2xvdCA9PiBmKHNsb3QsIGtleSkpLmdldE9yKGRlZik7XG4gICAgICBjb25zdCBvblNsb3RzID0gZiA9PiAoY29udGFpbmVyLCBrZXlzKSA9PiB7XG4gICAgICAgIGVhY2gkMShrZXlzLCBrZXkgPT4gZihjb250YWluZXIsIGtleSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRvU2hvd2luZyA9IChjb21wLCBfa2V5KSA9PiBnZXQkZihjb21wLmVsZW1lbnQsICdhcmlhLWhpZGRlbicpICE9PSAndHJ1ZSc7XG4gICAgICBjb25zdCBkb1Nob3cgPSAoY29tcCwga2V5KSA9PiB7XG4gICAgICAgIGlmICghZG9TaG93aW5nKGNvbXApKSB7XG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IGNvbXAuZWxlbWVudDtcbiAgICAgICAgICByZW1vdmUkNihlbGVtZW50LCAnZGlzcGxheScpO1xuICAgICAgICAgIHJlbW92ZSQ3KGVsZW1lbnQsICdhcmlhLWhpZGRlbicpO1xuICAgICAgICAgIGVtaXRXaXRoKGNvbXAsIHNsb3RWaXNpYmlsaXR5KCksIHtcbiAgICAgICAgICAgIG5hbWU6IGtleSxcbiAgICAgICAgICAgIHZpc2libGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGRvSGlkZSA9IChjb21wLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGRvU2hvd2luZyhjb21wKSkge1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb21wLmVsZW1lbnQ7XG4gICAgICAgICAgc2V0JDgoZWxlbWVudCwgJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgICAgIHNldCQ5KGVsZW1lbnQsICdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG4gICAgICAgICAgZW1pdFdpdGgoY29tcCwgc2xvdFZpc2liaWxpdHkoKSwge1xuICAgICAgICAgICAgbmFtZToga2V5LFxuICAgICAgICAgICAgdmlzaWJsZTogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzU2hvd2luZyA9IG9uU2xvdChkb1Nob3dpbmcsIGZhbHNlKTtcbiAgICAgIGNvbnN0IGhpZGVTbG90ID0gb25TbG90KGRvSGlkZSk7XG4gICAgICBjb25zdCBoaWRlU2xvdHMgPSBvblNsb3RzKGhpZGVTbG90KTtcbiAgICAgIGNvbnN0IGhpZGVBbGxTbG90cyA9IGNvbnRhaW5lciA9PiBoaWRlU2xvdHMoY29udGFpbmVyLCBnZXRTbG90TmFtZXMoKSk7XG4gICAgICBjb25zdCBzaG93U2xvdCA9IG9uU2xvdChkb1Nob3cpO1xuICAgICAgY29uc3QgYXBpcyA9IHtcbiAgICAgICAgZ2V0U2xvdE5hbWVzLFxuICAgICAgICBnZXRTbG90LFxuICAgICAgICBpc1Nob3dpbmcsXG4gICAgICAgIGhpZGVTbG90LFxuICAgICAgICBoaWRlQWxsU2xvdHMsXG4gICAgICAgIHNob3dTbG90XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgICBkb206IGRldGFpbC5kb20sXG4gICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgIGJlaGF2aW91cnM6IGdldCQzKGRldGFpbC5zbG90QmVoYXZpb3VycyksXG4gICAgICAgIGFwaXNcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBzbG90QXBpcyA9IG1hcCQxKHtcbiAgICAgIGdldFNsb3ROYW1lczogKGFwaXMsIGMpID0+IGFwaXMuZ2V0U2xvdE5hbWVzKGMpLFxuICAgICAgZ2V0U2xvdDogKGFwaXMsIGMsIGtleSkgPT4gYXBpcy5nZXRTbG90KGMsIGtleSksXG4gICAgICBpc1Nob3dpbmc6IChhcGlzLCBjLCBrZXkpID0+IGFwaXMuaXNTaG93aW5nKGMsIGtleSksXG4gICAgICBoaWRlU2xvdDogKGFwaXMsIGMsIGtleSkgPT4gYXBpcy5oaWRlU2xvdChjLCBrZXkpLFxuICAgICAgaGlkZUFsbFNsb3RzOiAoYXBpcywgYykgPT4gYXBpcy5oaWRlQWxsU2xvdHMoYyksXG4gICAgICBzaG93U2xvdDogKGFwaXMsIGMsIGtleSkgPT4gYXBpcy5zaG93U2xvdChjLCBrZXkpXG4gICAgfSwgdmFsdWUgPT4gbWFrZUFwaSh2YWx1ZSkpO1xuICAgIGNvbnN0IFNsb3RDb250YWluZXIgPSB7XG4gICAgICAuLi5zbG90QXBpcyxcbiAgICAgIC4uLnsgc2tldGNoIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgc2lkZWJhclNjaGVtYSA9IG9iak9mKFtcbiAgICAgIG9wdGlvbmFsSWNvbixcbiAgICAgIG9wdGlvbmFsVG9vbHRpcCxcbiAgICAgIGRlZmF1bHRlZEZ1bmN0aW9uKCdvblNob3cnLCBub29wKSxcbiAgICAgIGRlZmF1bHRlZEZ1bmN0aW9uKCdvbkhpZGUnLCBub29wKSxcbiAgICAgIG9uU2V0dXBcbiAgICBdKTtcbiAgICBjb25zdCBjcmVhdGVTaWRlYmFyID0gc3BlYyA9PiBhc1Jhdygnc2lkZWJhcicsIHNpZGViYXJTY2hlbWEsIHNwZWMpO1xuXG4gICAgY29uc3Qgc2V0dXAkOCA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCB7c2lkZWJhcnN9ID0gZWRpdG9yLnVpLnJlZ2lzdHJ5LmdldEFsbCgpO1xuICAgICAgZWFjaCQxKGtleXMoc2lkZWJhcnMpLCBuYW1lID0+IHtcbiAgICAgICAgY29uc3Qgc3BlYyA9IHNpZGViYXJzW25hbWVdO1xuICAgICAgICBjb25zdCBpc0FjdGl2ZSA9ICgpID0+IGlzJDEoT3B0aW9uYWwuZnJvbShlZGl0b3IucXVlcnlDb21tYW5kVmFsdWUoJ1RvZ2dsZVNpZGViYXInKSksIG5hbWUpO1xuICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkVG9nZ2xlQnV0dG9uKG5hbWUsIHtcbiAgICAgICAgICBpY29uOiBzcGVjLmljb24sXG4gICAgICAgICAgdG9vbHRpcDogc3BlYy50b29sdGlwLFxuICAgICAgICAgIG9uQWN0aW9uOiBidXR0b25BcGkgPT4ge1xuICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdUb2dnbGVTaWRlYmFyJywgZmFsc2UsIG5hbWUpO1xuICAgICAgICAgICAgYnV0dG9uQXBpLnNldEFjdGl2ZShpc0FjdGl2ZSgpKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uU2V0dXA6IGJ1dHRvbkFwaSA9PiB7XG4gICAgICAgICAgICBidXR0b25BcGkuc2V0QWN0aXZlKGlzQWN0aXZlKCkpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlVG9nZ2xlID0gKCkgPT4gYnV0dG9uQXBpLnNldEFjdGl2ZShpc0FjdGl2ZSgpKTtcbiAgICAgICAgICAgIGVkaXRvci5vbignVG9nZ2xlU2lkZWJhcicsIGhhbmRsZVRvZ2dsZSk7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICBlZGl0b3Iub2ZmKCdUb2dnbGVTaWRlYmFyJywgaGFuZGxlVG9nZ2xlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0QXBpID0gY29tcCA9PiAoeyBlbGVtZW50OiAoKSA9PiBjb21wLmVsZW1lbnQuZG9tIH0pO1xuICAgIGNvbnN0IG1ha2VQYW5lbHMgPSAocGFydHMsIHBhbmVsQ29uZmlncykgPT4ge1xuICAgICAgY29uc3Qgc3BlY3MgPSBtYXAkMihrZXlzKHBhbmVsQ29uZmlncyksIG5hbWUgPT4ge1xuICAgICAgICBjb25zdCBzcGVjID0gcGFuZWxDb25maWdzW25hbWVdO1xuICAgICAgICBjb25zdCBicmlkZ2VkID0gZ2V0T3JEaWUoY3JlYXRlU2lkZWJhcihzcGVjKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBnZXRBcGksXG4gICAgICAgICAgb25TZXR1cDogYnJpZGdlZC5vblNldHVwLFxuICAgICAgICAgIG9uU2hvdzogYnJpZGdlZC5vblNob3csXG4gICAgICAgICAgb25IaWRlOiBicmlkZ2VkLm9uSGlkZVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbWFwJDIoc3BlY3MsIHNwZWMgPT4ge1xuICAgICAgICBjb25zdCBlZGl0b3JPZmZDZWxsID0gQ2VsbChub29wKTtcbiAgICAgICAgcmV0dXJuIHBhcnRzLnNsb3Qoc3BlYy5uYW1lLCB7XG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgY2xhc3NlczogWyd0b3gtc2lkZWJhcl9fcGFuZSddXG4gICAgICAgICAgfSxcbiAgICAgICAgICBiZWhhdmlvdXJzOiBTaW1wbGVCZWhhdmlvdXJzLnVubmFtZWRFdmVudHMoW1xuICAgICAgICAgICAgb25Db250cm9sQXR0YWNoZWQoc3BlYywgZWRpdG9yT2ZmQ2VsbCksXG4gICAgICAgICAgICBvbkNvbnRyb2xEZXRhY2hlZChzcGVjLCBlZGl0b3JPZmZDZWxsKSxcbiAgICAgICAgICAgIHJ1biQxKHNsb3RWaXNpYmlsaXR5KCksIChzaWRlcGFuZWwsIHNlKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBzZS5ldmVudDtcbiAgICAgICAgICAgICAgY29uc3Qgb3B0U2lkZVBhbmVsU3BlYyA9IGZpbmQkNShzcGVjcywgY29uZmlnID0+IGNvbmZpZy5uYW1lID09PSBkYXRhLm5hbWUpO1xuICAgICAgICAgICAgICBvcHRTaWRlUGFuZWxTcGVjLmVhY2goc2lkZVBhbmVsU3BlYyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IGRhdGEudmlzaWJsZSA/IHNpZGVQYW5lbFNwZWMub25TaG93IDogc2lkZVBhbmVsU3BlYy5vbkhpZGU7XG4gICAgICAgICAgICAgICAgaGFuZGxlcihzaWRlUGFuZWxTcGVjLmdldEFwaShzaWRlcGFuZWwpKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0pXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBtYWtlU2lkZWJhciA9IHBhbmVsQ29uZmlncyA9PiBTbG90Q29udGFpbmVyLnNrZXRjaChwYXJ0cyA9PiAoe1xuICAgICAgZG9tOiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFsndG94LXNpZGViYXJfX3BhbmUtY29udGFpbmVyJ11cbiAgICAgIH0sXG4gICAgICBjb21wb25lbnRzOiBtYWtlUGFuZWxzKHBhcnRzLCBwYW5lbENvbmZpZ3MpLFxuICAgICAgc2xvdEJlaGF2aW91cnM6IFNpbXBsZUJlaGF2aW91cnMudW5uYW1lZEV2ZW50cyhbcnVuT25BdHRhY2hlZChzbG90Q29udGFpbmVyID0+IFNsb3RDb250YWluZXIuaGlkZUFsbFNsb3RzKHNsb3RDb250YWluZXIpKV0pXG4gICAgfSkpO1xuICAgIGNvbnN0IHNldFNpZGViYXIgPSAoc2lkZWJhciwgcGFuZWxDb25maWdzLCBzaG93U2lkZWJhcikgPT4ge1xuICAgICAgY29uc3Qgb3B0U2xpZGVyID0gQ29tcG9zaW5nLmdldEN1cnJlbnQoc2lkZWJhcik7XG4gICAgICBvcHRTbGlkZXIuZWFjaChzbGlkZXIgPT4ge1xuICAgICAgICBSZXBsYWNpbmcuc2V0KHNsaWRlciwgW21ha2VTaWRlYmFyKHBhbmVsQ29uZmlncyldKTtcbiAgICAgICAgY29uc3QgY29uZmlnS2V5ID0gc2hvd1NpZGViYXIgPT09IG51bGwgfHwgc2hvd1NpZGViYXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNob3dTaWRlYmFyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChpc1N0cmluZyhjb25maWdLZXkpICYmIGhhcyQyKHBhbmVsQ29uZmlncywgY29uZmlnS2V5KSkge1xuICAgICAgICAgIENvbXBvc2luZy5nZXRDdXJyZW50KHNsaWRlcikuZWFjaChzbG90Q29udGFpbmVyID0+IHtcbiAgICAgICAgICAgIFNsb3RDb250YWluZXIuc2hvd1Nsb3Qoc2xvdENvbnRhaW5lciwgY29uZmlnS2V5KTtcbiAgICAgICAgICAgIFNsaWRpbmcuaW1tZWRpYXRlR3JvdyhzbGlkZXIpO1xuICAgICAgICAgICAgcmVtb3ZlJDYoc2xpZGVyLmVsZW1lbnQsICd3aWR0aCcpO1xuICAgICAgICAgICAgdXBkYXRlU2lkZWJhclJvbGVPblRvZ2dsZShzaWRlYmFyLmVsZW1lbnQsICdyZWdpb24nKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVTaWRlYmFyUm9sZU9uVG9nZ2xlID0gKHNpZGViYXIsIHNpZGViYXJTdGF0ZSkgPT4ge1xuICAgICAgc2V0JDkoc2lkZWJhciwgJ3JvbGUnLCBzaWRlYmFyU3RhdGUpO1xuICAgIH07XG4gICAgY29uc3QgdG9nZ2xlU2lkZWJhciA9IChzaWRlYmFyLCBuYW1lKSA9PiB7XG4gICAgICBjb25zdCBvcHRTbGlkZXIgPSBDb21wb3NpbmcuZ2V0Q3VycmVudChzaWRlYmFyKTtcbiAgICAgIG9wdFNsaWRlci5lYWNoKHNsaWRlciA9PiB7XG4gICAgICAgIGNvbnN0IG9wdFNsb3RDb250YWluZXIgPSBDb21wb3NpbmcuZ2V0Q3VycmVudChzbGlkZXIpO1xuICAgICAgICBvcHRTbG90Q29udGFpbmVyLmVhY2goc2xvdENvbnRhaW5lciA9PiB7XG4gICAgICAgICAgaWYgKFNsaWRpbmcuaGFzR3Jvd24oc2xpZGVyKSkge1xuICAgICAgICAgICAgaWYgKFNsb3RDb250YWluZXIuaXNTaG93aW5nKHNsb3RDb250YWluZXIsIG5hbWUpKSB7XG4gICAgICAgICAgICAgIFNsaWRpbmcuc2hyaW5rKHNsaWRlcik7XG4gICAgICAgICAgICAgIHVwZGF0ZVNpZGViYXJSb2xlT25Ub2dnbGUoc2lkZWJhci5lbGVtZW50LCAncHJlc2VudGF0aW9uJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBTbG90Q29udGFpbmVyLmhpZGVBbGxTbG90cyhzbG90Q29udGFpbmVyKTtcbiAgICAgICAgICAgICAgU2xvdENvbnRhaW5lci5zaG93U2xvdChzbG90Q29udGFpbmVyLCBuYW1lKTtcbiAgICAgICAgICAgICAgdXBkYXRlU2lkZWJhclJvbGVPblRvZ2dsZShzaWRlYmFyLmVsZW1lbnQsICdyZWdpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgU2xvdENvbnRhaW5lci5oaWRlQWxsU2xvdHMoc2xvdENvbnRhaW5lcik7XG4gICAgICAgICAgICBTbG90Q29udGFpbmVyLnNob3dTbG90KHNsb3RDb250YWluZXIsIG5hbWUpO1xuICAgICAgICAgICAgU2xpZGluZy5ncm93KHNsaWRlcik7XG4gICAgICAgICAgICB1cGRhdGVTaWRlYmFyUm9sZU9uVG9nZ2xlKHNpZGViYXIuZWxlbWVudCwgJ3JlZ2lvbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHdoaWNoU2lkZWJhciA9IHNpZGViYXIgPT4ge1xuICAgICAgY29uc3Qgb3B0U2xpZGVyID0gQ29tcG9zaW5nLmdldEN1cnJlbnQoc2lkZWJhcik7XG4gICAgICByZXR1cm4gb3B0U2xpZGVyLmJpbmQoc2xpZGVyID0+IHtcbiAgICAgICAgY29uc3Qgc2lkZWJhck9wZW4gPSBTbGlkaW5nLmlzR3Jvd2luZyhzbGlkZXIpIHx8IFNsaWRpbmcuaGFzR3Jvd24oc2xpZGVyKTtcbiAgICAgICAgaWYgKHNpZGViYXJPcGVuKSB7XG4gICAgICAgICAgY29uc3Qgb3B0U2xvdENvbnRhaW5lciA9IENvbXBvc2luZy5nZXRDdXJyZW50KHNsaWRlcik7XG4gICAgICAgICAgcmV0dXJuIG9wdFNsb3RDb250YWluZXIuYmluZChzbG90Q29udGFpbmVyID0+IGZpbmQkNShTbG90Q29udGFpbmVyLmdldFNsb3ROYW1lcyhzbG90Q29udGFpbmVyKSwgbmFtZSA9PiBTbG90Q29udGFpbmVyLmlzU2hvd2luZyhzbG90Q29udGFpbmVyLCBuYW1lKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZml4U2l6ZSA9IGdlbmVyYXRlJDYoJ0ZpeFNpemVFdmVudCcpO1xuICAgIGNvbnN0IGF1dG9TaXplID0gZ2VuZXJhdGUkNignQXV0b1NpemVFdmVudCcpO1xuICAgIGNvbnN0IHJlbmRlclNpZGViYXIgPSBzcGVjID0+ICh7XG4gICAgICB1aWQ6IHNwZWMudWlkLFxuICAgICAgZG9tOiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFsndG94LXNpZGViYXInXSxcbiAgICAgICAgYXR0cmlidXRlczogeyByb2xlOiAncHJlc2VudGF0aW9uJyB9XG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czogW3tcbiAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1zaWRlYmFyX19zbGlkZXInXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcG9uZW50czogW10sXG4gICAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgICAgVGFic3RvcHBpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICAgIEZvY3VzaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgICBTbGlkaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICAgIGRpbWVuc2lvbjogeyBwcm9wZXJ0eTogJ3dpZHRoJyB9LFxuICAgICAgICAgICAgICBjbG9zZWRDbGFzczogJ3RveC1zaWRlYmFyLS1zbGlkaW5nLWNsb3NlZCcsXG4gICAgICAgICAgICAgIG9wZW5DbGFzczogJ3RveC1zaWRlYmFyLS1zbGlkaW5nLW9wZW4nLFxuICAgICAgICAgICAgICBzaHJpbmtpbmdDbGFzczogJ3RveC1zaWRlYmFyLS1zbGlkaW5nLXNocmlua2luZycsXG4gICAgICAgICAgICAgIGdyb3dpbmdDbGFzczogJ3RveC1zaWRlYmFyLS1zbGlkaW5nLWdyb3dpbmcnLFxuICAgICAgICAgICAgICBvblNocnVuazogc2xpZGVyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRTbG90Q29udGFpbmVyID0gQ29tcG9zaW5nLmdldEN1cnJlbnQoc2xpZGVyKTtcbiAgICAgICAgICAgICAgICBvcHRTbG90Q29udGFpbmVyLmVhY2goU2xvdENvbnRhaW5lci5oaWRlQWxsU2xvdHMpO1xuICAgICAgICAgICAgICAgIGVtaXQoc2xpZGVyLCBhdXRvU2l6ZSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uR3Jvd246IHNsaWRlciA9PiB7XG4gICAgICAgICAgICAgICAgZW1pdChzbGlkZXIsIGF1dG9TaXplKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb25TdGFydEdyb3c6IHNsaWRlciA9PiB7XG4gICAgICAgICAgICAgICAgZW1pdFdpdGgoc2xpZGVyLCBmaXhTaXplLCB7IHdpZHRoOiBnZXRSYXcoc2xpZGVyLmVsZW1lbnQsICd3aWR0aCcpLmdldE9yKCcnKSB9KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb25TdGFydFNocmluazogc2xpZGVyID0+IHtcbiAgICAgICAgICAgICAgICBlbWl0V2l0aChzbGlkZXIsIGZpeFNpemUsIHsgd2lkdGg6IGdldCRjKHNsaWRlci5lbGVtZW50KSArICdweCcgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgUmVwbGFjaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgICBDb21wb3NpbmcuY29uZmlnKHtcbiAgICAgICAgICAgICAgZmluZDogY29tcCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBSZXBsYWNpbmcuY29udGVudHMoY29tcCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhlYWQoY2hpbGRyZW4pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0pXG4gICAgICAgIH1dLFxuICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICBDb21wb3NpbmdDb25maWdzLmNoaWxkQXQoMCksXG4gICAgICAgIGNvbmZpZygnc2lkZWJhci1zbGlkaW5nLWV2ZW50cycsIFtcbiAgICAgICAgICBydW4kMShmaXhTaXplLCAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgICAgIHNldCQ4KGNvbXAuZWxlbWVudCwgJ3dpZHRoJywgc2UuZXZlbnQud2lkdGgpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJ1biQxKGF1dG9TaXplLCAoY29tcCwgX3NlKSA9PiB7XG4gICAgICAgICAgICByZW1vdmUkNihjb21wLmVsZW1lbnQsICd3aWR0aCcpO1xuICAgICAgICAgIH0pXG4gICAgICAgIF0pXG4gICAgICBdKVxuICAgIH0pO1xuXG4gICAgY29uc3QgYmxvY2sgPSAoY29tcG9uZW50LCBjb25maWcsIHN0YXRlLCBnZXRCdXN5U3BlYykgPT4ge1xuICAgICAgc2V0JDkoY29tcG9uZW50LmVsZW1lbnQsICdhcmlhLWJ1c3knLCB0cnVlKTtcbiAgICAgIGNvbnN0IHJvb3QgPSBjb25maWcuZ2V0Um9vdChjb21wb25lbnQpLmdldE9yKGNvbXBvbmVudCk7XG4gICAgICBjb25zdCBibG9ja2VyQmVoYXZpb3VycyA9IGRlcml2ZSQxKFtcbiAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgbW9kZTogJ3NwZWNpYWwnLFxuICAgICAgICAgIG9uVGFiOiAoKSA9PiBPcHRpb25hbC5zb21lKHRydWUpLFxuICAgICAgICAgIG9uU2hpZnRUYWI6ICgpID0+IE9wdGlvbmFsLnNvbWUodHJ1ZSlcbiAgICAgICAgfSksXG4gICAgICAgIEZvY3VzaW5nLmNvbmZpZyh7fSlcbiAgICAgIF0pO1xuICAgICAgY29uc3QgYmxvY2tTcGVjID0gZ2V0QnVzeVNwZWMocm9vdCwgYmxvY2tlckJlaGF2aW91cnMpO1xuICAgICAgY29uc3QgYmxvY2tlciA9IHJvb3QuZ2V0U3lzdGVtKCkuYnVpbGQoYmxvY2tTcGVjKTtcbiAgICAgIFJlcGxhY2luZy5hcHBlbmQocm9vdCwgcHJlbWFkZShibG9ja2VyKSk7XG4gICAgICBpZiAoYmxvY2tlci5oYXNDb25maWd1cmVkKEtleWluZykgJiYgY29uZmlnLmZvY3VzKSB7XG4gICAgICAgIEtleWluZy5mb2N1c0luKGJsb2NrZXIpO1xuICAgICAgfVxuICAgICAgaWYgKCFzdGF0ZS5pc0Jsb2NrZWQoKSkge1xuICAgICAgICBjb25maWcub25CbG9jayhjb21wb25lbnQpO1xuICAgICAgfVxuICAgICAgc3RhdGUuYmxvY2tXaXRoKCgpID0+IFJlcGxhY2luZy5yZW1vdmUocm9vdCwgYmxvY2tlcikpO1xuICAgIH07XG4gICAgY29uc3QgdW5ibG9jayA9IChjb21wb25lbnQsIGNvbmZpZywgc3RhdGUpID0+IHtcbiAgICAgIHJlbW92ZSQ3KGNvbXBvbmVudC5lbGVtZW50LCAnYXJpYS1idXN5Jyk7XG4gICAgICBpZiAoc3RhdGUuaXNCbG9ja2VkKCkpIHtcbiAgICAgICAgY29uZmlnLm9uVW5ibG9jayhjb21wb25lbnQpO1xuICAgICAgfVxuICAgICAgc3RhdGUuY2xlYXIoKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQmxvY2tlZCA9IChjb21wb25lbnQsIGJsb2NraW5nQ29uZmlnLCBibG9ja2luZ1N0YXRlKSA9PiBibG9ja2luZ1N0YXRlLmlzQmxvY2tlZCgpO1xuXG4gICAgdmFyIEJsb2NraW5nQXBpcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBibG9jazogYmxvY2ssXG4gICAgICAgIHVuYmxvY2s6IHVuYmxvY2ssXG4gICAgICAgIGlzQmxvY2tlZDogaXNCbG9ja2VkXG4gICAgfSk7XG5cbiAgICB2YXIgQmxvY2tpbmdTY2hlbWEgPSBbXG4gICAgICBkZWZhdWx0ZWRGdW5jdGlvbignZ2V0Um9vdCcsIE9wdGlvbmFsLm5vbmUpLFxuICAgICAgZGVmYXVsdGVkQm9vbGVhbignZm9jdXMnLCB0cnVlKSxcbiAgICAgIG9uSGFuZGxlcignb25CbG9jaycpLFxuICAgICAgb25IYW5kbGVyKCdvblVuYmxvY2snKVxuICAgIF07XG5cbiAgICBjb25zdCBpbml0JDQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBibG9ja2VyID0gZGVzdHJveWFibGUoKTtcbiAgICAgIGNvbnN0IGJsb2NrV2l0aCA9IGRlc3Ryb3kgPT4ge1xuICAgICAgICBibG9ja2VyLnNldCh7IGRlc3Ryb3kgfSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIG51JDgoe1xuICAgICAgICByZWFkU3RhdGU6IGJsb2NrZXIuaXNTZXQsXG4gICAgICAgIGJsb2NrV2l0aCxcbiAgICAgICAgY2xlYXI6IGJsb2NrZXIuY2xlYXIsXG4gICAgICAgIGlzQmxvY2tlZDogYmxvY2tlci5pc1NldFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHZhciBCbG9ja2luZ1N0YXRlID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIGluaXQ6IGluaXQkNFxuICAgIH0pO1xuXG4gICAgY29uc3QgQmxvY2tpbmcgPSBjcmVhdGUkNCh7XG4gICAgICBmaWVsZHM6IEJsb2NraW5nU2NoZW1hLFxuICAgICAgbmFtZTogJ2Jsb2NraW5nJyxcbiAgICAgIGFwaXM6IEJsb2NraW5nQXBpcyxcbiAgICAgIHN0YXRlOiBCbG9ja2luZ1N0YXRlXG4gICAgfSk7XG5cbiAgICBjb25zdCBnZXRBdHRycyA9IGVsZW0gPT4ge1xuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGVsZW0uZG9tLmF0dHJpYnV0ZXMgIT09IHVuZGVmaW5lZCA/IGVsZW0uZG9tLmF0dHJpYnV0ZXMgOiBbXTtcbiAgICAgIHJldHVybiBmb2xkbChhdHRyaWJ1dGVzLCAoYiwgYXR0cikgPT4ge1xuICAgICAgICBpZiAoYXR0ci5uYW1lID09PSAnY2xhc3MnKSB7XG4gICAgICAgICAgcmV0dXJuIGI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmIsXG4gICAgICAgICAgICBbYXR0ci5uYW1lXTogYXR0ci52YWx1ZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sIHt9KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldENsYXNzZXMgPSBlbGVtID0+IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGVsZW0uZG9tLmNsYXNzTGlzdCwgMCk7XG4gICAgY29uc3QgZnJvbUh0bWwgPSBodG1sID0+IHtcbiAgICAgIGNvbnN0IGVsZW0gPSBTdWdhckVsZW1lbnQuZnJvbUh0bWwoaHRtbCk7XG4gICAgICBjb25zdCBjaGlsZHJlbiQxID0gY2hpbGRyZW4oZWxlbSk7XG4gICAgICBjb25zdCBhdHRycyA9IGdldEF0dHJzKGVsZW0pO1xuICAgICAgY29uc3QgY2xhc3NlcyA9IGdldENsYXNzZXMoZWxlbSk7XG4gICAgICBjb25zdCBjb250ZW50cyA9IGNoaWxkcmVuJDEubGVuZ3RoID09PSAwID8ge30gOiB7IGlubmVySHRtbDogZ2V0JDkoZWxlbSkgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhZzogbmFtZSQzKGVsZW0pLFxuICAgICAgICBjbGFzc2VzLFxuICAgICAgICBhdHRyaWJ1dGVzOiBhdHRycyxcbiAgICAgICAgLi4uY29udGVudHNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGdldEJ1c3lTcGVjJDEgPSBwcm92aWRlckJhY2tzdGFnZSA9PiAoX3Jvb3QsIF9iZWhhdmlvdXJzKSA9PiAoe1xuICAgICAgZG9tOiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAnYXJpYS1sYWJlbCc6IHByb3ZpZGVyQmFja3N0YWdlLnRyYW5zbGF0ZSgnTG9hZGluZy4uLicpLFxuICAgICAgICAgICd0YWJpbmRleCc6ICcwJ1xuICAgICAgICB9LFxuICAgICAgICBjbGFzc2VzOiBbJ3RveC10aHJvYmJlcl9fYnVzeS1zcGlubmVyJ11cbiAgICAgIH0sXG4gICAgICBjb21wb25lbnRzOiBbeyBkb206IGZyb21IdG1sKCc8ZGl2IGNsYXNzPVwidG94LXNwaW5uZXJcIj48ZGl2PjwvZGl2PjxkaXY+PC9kaXY+PGRpdj48L2Rpdj48L2Rpdj4nKSB9XVxuICAgIH0pO1xuICAgIGNvbnN0IGZvY3VzQnVzeUNvbXBvbmVudCA9IHRocm9iYmVyID0+IENvbXBvc2luZy5nZXRDdXJyZW50KHRocm9iYmVyKS5lYWNoKGNvbXAgPT4gZm9jdXMkMyhjb21wLmVsZW1lbnQpKTtcbiAgICBjb25zdCB0b2dnbGVFZGl0b3JUYWJJbmRleCA9IChlZGl0b3IsIHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCB0YWJJbmRleEF0dHIgPSAndGFiaW5kZXgnO1xuICAgICAgY29uc3QgZGF0YVRhYkluZGV4QXR0ciA9IGBkYXRhLW1jZS0keyB0YWJJbmRleEF0dHIgfWA7XG4gICAgICBPcHRpb25hbC5mcm9tKGVkaXRvci5pZnJhbWVFbGVtZW50KS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pLmVhY2goaWZyYW1lID0+IHtcbiAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgZ2V0T3B0KGlmcmFtZSwgdGFiSW5kZXhBdHRyKS5lYWNoKHRhYkluZGV4ID0+IHNldCQ5KGlmcmFtZSwgZGF0YVRhYkluZGV4QXR0ciwgdGFiSW5kZXgpKTtcbiAgICAgICAgICBzZXQkOShpZnJhbWUsIHRhYkluZGV4QXR0ciwgLTEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbW92ZSQ3KGlmcmFtZSwgdGFiSW5kZXhBdHRyKTtcbiAgICAgICAgICBnZXRPcHQoaWZyYW1lLCBkYXRhVGFiSW5kZXhBdHRyKS5lYWNoKHRhYkluZGV4ID0+IHtcbiAgICAgICAgICAgIHNldCQ5KGlmcmFtZSwgdGFiSW5kZXhBdHRyLCB0YWJJbmRleCk7XG4gICAgICAgICAgICByZW1vdmUkNyhpZnJhbWUsIGRhdGFUYWJJbmRleEF0dHIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHRvZ2dsZVRocm9iYmVyID0gKGVkaXRvciwgY29tcCwgc3RhdGUsIHByb3ZpZGVyQmFja3N0YWdlKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gY29tcC5lbGVtZW50O1xuICAgICAgdG9nZ2xlRWRpdG9yVGFiSW5kZXgoZWRpdG9yLCBzdGF0ZSk7XG4gICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgQmxvY2tpbmcuYmxvY2soY29tcCwgZ2V0QnVzeVNwZWMkMShwcm92aWRlckJhY2tzdGFnZSkpO1xuICAgICAgICByZW1vdmUkNihlbGVtZW50LCAnZGlzcGxheScpO1xuICAgICAgICByZW1vdmUkNyhlbGVtZW50LCAnYXJpYS1oaWRkZW4nKTtcbiAgICAgICAgaWYgKGVkaXRvci5oYXNGb2N1cygpKSB7XG4gICAgICAgICAgZm9jdXNCdXN5Q29tcG9uZW50KGNvbXApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0aHJvYmJlckZvY3VzID0gQ29tcG9zaW5nLmdldEN1cnJlbnQoY29tcCkuZXhpc3RzKGJ1c3lDb21wID0+IGhhc0ZvY3VzKGJ1c3lDb21wLmVsZW1lbnQpKTtcbiAgICAgICAgQmxvY2tpbmcudW5ibG9jayhjb21wKTtcbiAgICAgICAgc2V0JDgoZWxlbWVudCwgJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgICBzZXQkOShlbGVtZW50LCAnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgICAgICBpZiAodGhyb2JiZXJGb2N1cykge1xuICAgICAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJUaHJvYmJlciA9IHNwZWMgPT4gKHtcbiAgICAgIHVpZDogc3BlYy51aWQsXG4gICAgICBkb206IHtcbiAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgYXR0cmlidXRlczogeyAnYXJpYS1oaWRkZW4nOiAndHJ1ZScgfSxcbiAgICAgICAgY2xhc3NlczogWyd0b3gtdGhyb2JiZXInXSxcbiAgICAgICAgc3R5bGVzOiB7IGRpc3BsYXk6ICdub25lJyB9XG4gICAgICB9LFxuICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICBSZXBsYWNpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgQmxvY2tpbmcuY29uZmlnKHsgZm9jdXM6IGZhbHNlIH0pLFxuICAgICAgICBDb21wb3NpbmcuY29uZmlnKHsgZmluZDogY29tcCA9PiBoZWFkKGNvbXAuY29tcG9uZW50cygpKSB9KVxuICAgICAgXSksXG4gICAgICBjb21wb25lbnRzOiBbXVxuICAgIH0pO1xuICAgIGNvbnN0IGlzRm9jdXNFdmVudCA9IGV2ZW50ID0+IGV2ZW50LnR5cGUgPT09ICdmb2N1c2luJztcbiAgICBjb25zdCBpc1Bhc3RlQmluVGFyZ2V0ID0gZXZlbnQgPT4ge1xuICAgICAgaWYgKGlzRm9jdXNFdmVudChldmVudCkpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGV2ZW50LmNvbXBvc2VkID8gaGVhZChldmVudC5jb21wb3NlZFBhdGgoKSkgOiBPcHRpb25hbC5mcm9tKGV2ZW50LnRhcmdldCk7XG4gICAgICAgIHJldHVybiBub2RlLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSkuZmlsdGVyKGlzRWxlbWVudCQxKS5leGlzdHModGFyZ2V0RWxtID0+IGhhcyh0YXJnZXRFbG0sICdtY2UtcGFzdGViaW4nKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cCQ3ID0gKGVkaXRvciwgbGF6eVRocm9iYmVyLCBzaGFyZWRCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IHRocm9iYmVyU3RhdGUgPSBDZWxsKGZhbHNlKTtcbiAgICAgIGNvbnN0IHRpbWVyID0gdmFsdWUkMigpO1xuICAgICAgY29uc3Qgc3RlYWxGb2N1cyA9IGUgPT4ge1xuICAgICAgICBpZiAodGhyb2JiZXJTdGF0ZS5nZXQoKSAmJiAhaXNQYXN0ZUJpblRhcmdldChlKSkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBmb2N1c0J1c3lDb21wb25lbnQobGF6eVRocm9iYmVyKCkpO1xuICAgICAgICAgIGVkaXRvci5lZGl0b3JNYW5hZ2VyLnNldEFjdGl2ZShlZGl0b3IpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKCFlZGl0b3IuaW5saW5lKSB7XG4gICAgICAgIGVkaXRvci5vbignUHJlSW5pdCcsICgpID0+IHtcbiAgICAgICAgICBlZGl0b3IuZG9tLmJpbmQoZWRpdG9yLmdldFdpbigpLCAnZm9jdXNpbicsIHN0ZWFsRm9jdXMpO1xuICAgICAgICAgIGVkaXRvci5vbignQmVmb3JlRXhlY0NvbW1hbmQnLCBlID0+IHtcbiAgICAgICAgICAgIGlmIChlLmNvbW1hbmQudG9Mb3dlckNhc2UoKSA9PT0gJ21jZWZvY3VzJyAmJiBlLnZhbHVlICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgIHN0ZWFsRm9jdXMoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgdG9nZ2xlID0gc3RhdGUgPT4ge1xuICAgICAgICBpZiAoc3RhdGUgIT09IHRocm9iYmVyU3RhdGUuZ2V0KCkpIHtcbiAgICAgICAgICB0aHJvYmJlclN0YXRlLnNldChzdGF0ZSk7XG4gICAgICAgICAgdG9nZ2xlVGhyb2JiZXIoZWRpdG9yLCBsYXp5VGhyb2JiZXIoKSwgc3RhdGUsIHNoYXJlZEJhY2tzdGFnZS5wcm92aWRlcnMpO1xuICAgICAgICAgIGZpcmVBZnRlclByb2dyZXNzU3RhdGUoZWRpdG9yLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBlZGl0b3Iub24oJ1Byb2dyZXNzU3RhdGUnLCBlID0+IHtcbiAgICAgICAgdGltZXIub24oY2xlYXJUaW1lb3V0KTtcbiAgICAgICAgaWYgKGlzTnVtYmVyKGUudGltZSkpIHtcbiAgICAgICAgICBjb25zdCB0aW1lcklkID0gZ2xvYmFsJDkuc2V0RWRpdG9yVGltZW91dChlZGl0b3IsICgpID0+IHRvZ2dsZShlLnN0YXRlKSwgZS50aW1lKTtcbiAgICAgICAgICB0aW1lci5zZXQodGltZXJJZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9nZ2xlKGUuc3RhdGUpO1xuICAgICAgICAgIHRpbWVyLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBnZW5lcmF0ZSQxID0gKHhzLCBmKSA9PiB7XG4gICAgICBjb25zdCBpbml0ID0ge1xuICAgICAgICBsZW46IDAsXG4gICAgICAgIGxpc3Q6IFtdXG4gICAgICB9O1xuICAgICAgY29uc3QgciA9IGZvbGRsKHhzLCAoYiwgYSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGYoYSwgYi5sZW4pO1xuICAgICAgICByZXR1cm4gdmFsdWUuZm9sZChjb25zdGFudCQxKGIpLCB2ID0+ICh7XG4gICAgICAgICAgbGVuOiB2LmZpbmlzaCxcbiAgICAgICAgICBsaXN0OiBiLmxpc3QuY29uY2F0KFt2XSlcbiAgICAgICAgfSkpO1xuICAgICAgfSwgaW5pdCk7XG4gICAgICByZXR1cm4gci5saXN0O1xuICAgIH07XG5cbiAgICBjb25zdCBvdXRwdXQgPSAod2l0aGluLCBleHRyYSwgd2l0aGluV2lkdGgpID0+ICh7XG4gICAgICB3aXRoaW4sXG4gICAgICBleHRyYSxcbiAgICAgIHdpdGhpbldpZHRoXG4gICAgfSk7XG4gICAgY29uc3QgYXBwb3J0aW9uID0gKHVuaXRzLCB0b3RhbCwgbGVuKSA9PiB7XG4gICAgICBjb25zdCBwYXJyYXkgPSBnZW5lcmF0ZSQxKHVuaXRzLCAodW5pdCwgY3VycmVudCkgPT4ge1xuICAgICAgICBjb25zdCB3aWR0aCA9IGxlbih1bml0KTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgIGVsZW1lbnQ6IHVuaXQsXG4gICAgICAgICAgc3RhcnQ6IGN1cnJlbnQsXG4gICAgICAgICAgZmluaXNoOiBjdXJyZW50ICsgd2lkdGgsXG4gICAgICAgICAgd2lkdGhcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHdpdGhpbiA9IGZpbHRlciQyKHBhcnJheSwgdW5pdCA9PiB1bml0LmZpbmlzaCA8PSB0b3RhbCk7XG4gICAgICBjb25zdCB3aXRoaW5XaWR0aCA9IGZvbGRyKHdpdGhpbiwgKGFjYywgZWwpID0+IGFjYyArIGVsLndpZHRoLCAwKTtcbiAgICAgIGNvbnN0IGV4dHJhID0gcGFycmF5LnNsaWNlKHdpdGhpbi5sZW5ndGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2l0aGluLFxuICAgICAgICBleHRyYSxcbiAgICAgICAgd2l0aGluV2lkdGhcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCB0b1VuaXQgPSBwYXJyYXkgPT4gbWFwJDIocGFycmF5LCB1bml0ID0+IHVuaXQuZWxlbWVudCk7XG4gICAgY29uc3QgZml0TGFzdCA9ICh3aXRoaW4sIGV4dHJhLCB3aXRoaW5XaWR0aCkgPT4ge1xuICAgICAgY29uc3QgZml0cyA9IHRvVW5pdCh3aXRoaW4uY29uY2F0KGV4dHJhKSk7XG4gICAgICByZXR1cm4gb3V0cHV0KGZpdHMsIFtdLCB3aXRoaW5XaWR0aCk7XG4gICAgfTtcbiAgICBjb25zdCBvdmVyZmxvdyA9ICh3aXRoaW4sIGV4dHJhLCBvdmVyZmxvd2VyLCB3aXRoaW5XaWR0aCkgPT4ge1xuICAgICAgY29uc3QgZml0cyA9IHRvVW5pdCh3aXRoaW4pLmNvbmNhdChbb3ZlcmZsb3dlcl0pO1xuICAgICAgcmV0dXJuIG91dHB1dChmaXRzLCB0b1VuaXQoZXh0cmEpLCB3aXRoaW5XaWR0aCk7XG4gICAgfTtcbiAgICBjb25zdCBmaXRBbGwgPSAod2l0aGluLCBleHRyYSwgd2l0aGluV2lkdGgpID0+IG91dHB1dCh0b1VuaXQod2l0aGluKSwgW10sIHdpdGhpbldpZHRoKTtcbiAgICBjb25zdCB0cnlGaXQgPSAodG90YWwsIHVuaXRzLCBsZW4pID0+IHtcbiAgICAgIGNvbnN0IGRpdmlkZSA9IGFwcG9ydGlvbih1bml0cywgdG90YWwsIGxlbik7XG4gICAgICByZXR1cm4gZGl2aWRlLmV4dHJhLmxlbmd0aCA9PT0gMCA/IE9wdGlvbmFsLnNvbWUoZGl2aWRlKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IHBhcnRpdGlvbiA9ICh0b3RhbCwgdW5pdHMsIGxlbiwgb3ZlcmZsb3dlcikgPT4ge1xuICAgICAgY29uc3QgZGl2aWRlID0gdHJ5Rml0KHRvdGFsLCB1bml0cywgbGVuKS5nZXRPclRodW5rKCgpID0+IGFwcG9ydGlvbih1bml0cywgdG90YWwgLSBsZW4ob3ZlcmZsb3dlciksIGxlbikpO1xuICAgICAgY29uc3Qgd2l0aGluID0gZGl2aWRlLndpdGhpbjtcbiAgICAgIGNvbnN0IGV4dHJhID0gZGl2aWRlLmV4dHJhO1xuICAgICAgY29uc3Qgd2l0aGluV2lkdGggPSBkaXZpZGUud2l0aGluV2lkdGg7XG4gICAgICBpZiAoZXh0cmEubGVuZ3RoID09PSAxICYmIGV4dHJhWzBdLndpZHRoIDw9IGxlbihvdmVyZmxvd2VyKSkge1xuICAgICAgICByZXR1cm4gZml0TGFzdCh3aXRoaW4sIGV4dHJhLCB3aXRoaW5XaWR0aCk7XG4gICAgICB9IGVsc2UgaWYgKGV4dHJhLmxlbmd0aCA+PSAxKSB7XG4gICAgICAgIHJldHVybiBvdmVyZmxvdyh3aXRoaW4sIGV4dHJhLCBvdmVyZmxvd2VyLCB3aXRoaW5XaWR0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZml0QWxsKHdpdGhpbiwgZXh0cmEsIHdpdGhpbldpZHRoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0R3JvdXBzJDEgPSAodG9vbGJhciwgc3RvcmVkR3JvdXBzKSA9PiB7XG4gICAgICBjb25zdCBiR3JvdXBzID0gbWFwJDIoc3RvcmVkR3JvdXBzLCBnID0+IHByZW1hZGUoZykpO1xuICAgICAgVG9vbGJhci5zZXRHcm91cHModG9vbGJhciwgYkdyb3Vwcyk7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kRm9jdXNlZENvbXAgPSBjb21wcyA9PiBmaW5kTWFwKGNvbXBzLCBjb21wID0+IHNlYXJjaChjb21wLmVsZW1lbnQpLmJpbmQoZm9jdXNlZEVsbSA9PiBjb21wLmdldFN5c3RlbSgpLmdldEJ5RG9tKGZvY3VzZWRFbG0pLnRvT3B0aW9uYWwoKSkpO1xuICAgIGNvbnN0IHJlZnJlc2gkMiA9ICh0b29sYmFyLCBkZXRhaWwsIHNldE92ZXJmbG93KSA9PiB7XG4gICAgICBjb25zdCBidWlsdEdyb3VwcyA9IGRldGFpbC5idWlsdEdyb3Vwcy5nZXQoKTtcbiAgICAgIGlmIChidWlsdEdyb3Vwcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcHJpbWFyeSA9IGdldFBhcnRPckRpZSh0b29sYmFyLCBkZXRhaWwsICdwcmltYXJ5Jyk7XG4gICAgICBjb25zdCBvdmVyZmxvd0dyb3VwID0gQ291cGxpbmcuZ2V0Q291cGxlZCh0b29sYmFyLCAnb3ZlcmZsb3dHcm91cCcpO1xuICAgICAgc2V0JDgocHJpbWFyeS5lbGVtZW50LCAndmlzaWJpbGl0eScsICdoaWRkZW4nKTtcbiAgICAgIGNvbnN0IGdyb3VwcyA9IGJ1aWx0R3JvdXBzLmNvbmNhdChbb3ZlcmZsb3dHcm91cF0pO1xuICAgICAgY29uc3QgZm9jdXNlZENvbXAgPSBmaW5kRm9jdXNlZENvbXAoZ3JvdXBzKTtcbiAgICAgIHNldE92ZXJmbG93KFtdKTtcbiAgICAgIHNldEdyb3VwcyQxKHByaW1hcnksIGdyb3Vwcyk7XG4gICAgICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IGdldCRjKHByaW1hcnkuZWxlbWVudCk7XG4gICAgICBjb25zdCBvdmVyZmxvd3MgPSBwYXJ0aXRpb24oYXZhaWxhYmxlV2lkdGgsIGRldGFpbC5idWlsdEdyb3Vwcy5nZXQoKSwgY29tcCA9PiBnZXQkYyhjb21wLmVsZW1lbnQpLCBvdmVyZmxvd0dyb3VwKTtcbiAgICAgIGlmIChvdmVyZmxvd3MuZXh0cmEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIFJlcGxhY2luZy5yZW1vdmUocHJpbWFyeSwgb3ZlcmZsb3dHcm91cCk7XG4gICAgICAgIHNldE92ZXJmbG93KFtdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldEdyb3VwcyQxKHByaW1hcnksIG92ZXJmbG93cy53aXRoaW4pO1xuICAgICAgICBzZXRPdmVyZmxvdyhvdmVyZmxvd3MuZXh0cmEpO1xuICAgICAgfVxuICAgICAgcmVtb3ZlJDYocHJpbWFyeS5lbGVtZW50LCAndmlzaWJpbGl0eScpO1xuICAgICAgcmVmbG93KHByaW1hcnkuZWxlbWVudCk7XG4gICAgICBmb2N1c2VkQ29tcC5lYWNoKEZvY3VzaW5nLmZvY3VzKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2NoZW1hJGMgPSBjb25zdGFudCQxKFtcbiAgICAgIGZpZWxkKCdzcGxpdFRvb2xiYXJCZWhhdmlvdXJzJywgW0NvdXBsaW5nXSksXG4gICAgICBjdXN0b21GaWVsZCgnYnVpbHRHcm91cHMnLCAoKSA9PiBDZWxsKFtdKSlcbiAgICBdKTtcblxuICAgIGNvbnN0IHNjaGVtYSRiID0gY29uc3RhbnQkMShbXG4gICAgICBtYXJrZXJzJDEoWydvdmVyZmxvd1RvZ2dsZWRDbGFzcyddKSxcbiAgICAgIG9wdGlvbkZ1bmN0aW9uKCdnZXRPdmVyZmxvd0JvdW5kcycpLFxuICAgICAgcmVxdWlyZWQkMSgnbGF6eVNpbmsnKSxcbiAgICAgIGN1c3RvbUZpZWxkKCdvdmVyZmxvd0dyb3VwcycsICgpID0+IENlbGwoW10pKSxcbiAgICAgIG9uSGFuZGxlcignb25PcGVuZWQnKSxcbiAgICAgIG9uSGFuZGxlcignb25DbG9zZWQnKVxuICAgIF0uY29uY2F0KHNjaGVtYSRjKCkpKTtcbiAgICBjb25zdCBwYXJ0cyQ3ID0gY29uc3RhbnQkMShbXG4gICAgICByZXF1aXJlZCh7XG4gICAgICAgIGZhY3Rvcnk6IFRvb2xiYXIsXG4gICAgICAgIHNjaGVtYTogc2NoZW1hJGUoKSxcbiAgICAgICAgbmFtZTogJ3ByaW1hcnknXG4gICAgICB9KSxcbiAgICAgIGV4dGVybmFsKHtcbiAgICAgICAgc2NoZW1hOiBzY2hlbWEkZSgpLFxuICAgICAgICBuYW1lOiAnb3ZlcmZsb3cnXG4gICAgICB9KSxcbiAgICAgIGV4dGVybmFsKHsgbmFtZTogJ292ZXJmbG93LWJ1dHRvbicgfSksXG4gICAgICBleHRlcm5hbCh7IG5hbWU6ICdvdmVyZmxvdy1ncm91cCcgfSlcbiAgICBdKTtcblxuICAgIGNvbnN0IGV4cGFuZGFibGUgPSBjb25zdGFudCQxKChlbGVtZW50LCBhdmFpbGFibGUpID0+IHtcbiAgICAgIHNldE1heChlbGVtZW50LCBNYXRoLmZsb29yKGF2YWlsYWJsZSkpO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc2NoZW1hJGEgPSBjb25zdGFudCQxKFtcbiAgICAgIG1hcmtlcnMkMShbJ3RvZ2dsZWRDbGFzcyddKSxcbiAgICAgIHJlcXVpcmVkJDEoJ2xhenlTaW5rJyksXG4gICAgICByZXF1aXJlZEZ1bmN0aW9uKCdmZXRjaCcpLFxuICAgICAgb3B0aW9uRnVuY3Rpb24oJ2dldEJvdW5kcycpLFxuICAgICAgb3B0aW9uT2JqT2YoJ2ZpcmVEaXNtaXNzYWxFdmVudEluc3RlYWQnLCBbZGVmYXVsdGVkKCdldmVudCcsIGRpc21pc3NSZXF1ZXN0ZWQoKSldKSxcbiAgICAgIHNjaGVtYSR5KCksXG4gICAgICBvbkhhbmRsZXIoJ29uVG9nZ2xlZCcpXG4gICAgXSk7XG4gICAgY29uc3QgcGFydHMkNiA9IGNvbnN0YW50JDEoW1xuICAgICAgZXh0ZXJuYWwoe1xuICAgICAgICBuYW1lOiAnYnV0dG9uJyxcbiAgICAgICAgb3ZlcnJpZGVzOiBkZXRhaWwgPT4gKHtcbiAgICAgICAgICBkb206IHsgYXR0cmlidXRlczogeyAnYXJpYS1oYXNwb3B1cCc6ICd0cnVlJyB9IH0sXG4gICAgICAgICAgYnV0dG9uQmVoYXZpb3VyczogZGVyaXZlJDEoW1RvZ2dsaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICAgIHRvZ2dsZUNsYXNzOiBkZXRhaWwubWFya2Vycy50b2dnbGVkQ2xhc3MsXG4gICAgICAgICAgICAgIGFyaWE6IHsgbW9kZTogJ2V4cGFuZGVkJyB9LFxuICAgICAgICAgICAgICB0b2dnbGVPbkV4ZWN1dGU6IGZhbHNlLFxuICAgICAgICAgICAgICBvblRvZ2dsZWQ6IGRldGFpbC5vblRvZ2dsZWRcbiAgICAgICAgICAgIH0pXSlcbiAgICAgICAgfSlcbiAgICAgIH0pLFxuICAgICAgZXh0ZXJuYWwoe1xuICAgICAgICBmYWN0b3J5OiBUb29sYmFyLFxuICAgICAgICBzY2hlbWE6IHNjaGVtYSRlKCksXG4gICAgICAgIG5hbWU6ICd0b29sYmFyJyxcbiAgICAgICAgb3ZlcnJpZGVzOiBkZXRhaWwgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b29sYmFyQmVoYXZpb3VyczogZGVyaXZlJDEoW0tleWluZy5jb25maWcoe1xuICAgICAgICAgICAgICAgIG1vZGU6ICdjeWNsaWMnLFxuICAgICAgICAgICAgICAgIG9uRXNjYXBlOiBjb21wID0+IHtcbiAgICAgICAgICAgICAgICAgIGdldFBhcnQoY29tcCwgZGV0YWlsLCAnYnV0dG9uJykuZWFjaChGb2N1c2luZy5mb2N1cyk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSldKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgXSk7XG5cbiAgICBjb25zdCBzaG91bGRTa2lwRm9jdXMgPSB2YWx1ZSQyKCk7XG4gICAgY29uc3QgdG9nZ2xlV2l0aG91dEZvY3VzaW5nID0gKGJ1dHRvbiwgZXh0ZXJuYWxzKSA9PiB7XG4gICAgICBzaG91bGRTa2lwRm9jdXMuc2V0KHRydWUpO1xuICAgICAgdG9nZ2xlKGJ1dHRvbiwgZXh0ZXJuYWxzKTtcbiAgICAgIHNob3VsZFNraXBGb2N1cy5jbGVhcigpO1xuICAgIH07XG4gICAgY29uc3QgdG9nZ2xlID0gKGJ1dHRvbiwgZXh0ZXJuYWxzKSA9PiB7XG4gICAgICBjb25zdCB0b29sYmFyU2FuZGJveCA9IENvdXBsaW5nLmdldENvdXBsZWQoYnV0dG9uLCAndG9vbGJhclNhbmRib3gnKTtcbiAgICAgIGlmIChTYW5kYm94aW5nLmlzT3Blbih0b29sYmFyU2FuZGJveCkpIHtcbiAgICAgICAgU2FuZGJveGluZy5jbG9zZSh0b29sYmFyU2FuZGJveCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBTYW5kYm94aW5nLm9wZW4odG9vbGJhclNhbmRib3gsIGV4dGVybmFscy50b29sYmFyKCkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcG9zaXRpb24gPSAoYnV0dG9uLCB0b29sYmFyLCBkZXRhaWwsIGxheW91dHMpID0+IHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IGRldGFpbC5nZXRCb3VuZHMubWFwKGJvdW5kZXIgPT4gYm91bmRlcigpKTtcbiAgICAgIGNvbnN0IHNpbmsgPSBkZXRhaWwubGF6eVNpbmsoYnV0dG9uKS5nZXRPckRpZSgpO1xuICAgICAgUG9zaXRpb25pbmcucG9zaXRpb25XaXRoaW5Cb3VuZHMoc2luaywgdG9vbGJhciwge1xuICAgICAgICBhbmNob3I6IHtcbiAgICAgICAgICB0eXBlOiAnaG90c3BvdCcsXG4gICAgICAgICAgaG90c3BvdDogYnV0dG9uLFxuICAgICAgICAgIGxheW91dHMsXG4gICAgICAgICAgb3ZlcnJpZGVzOiB7IG1heFdpZHRoRnVuY3Rpb246IGV4cGFuZGFibGUoKSB9XG4gICAgICAgIH1cbiAgICAgIH0sIGJvdW5kcyk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRHcm91cHMgPSAoYnV0dG9uLCB0b29sYmFyLCBkZXRhaWwsIGxheW91dHMsIGdyb3VwcykgPT4ge1xuICAgICAgVG9vbGJhci5zZXRHcm91cHModG9vbGJhciwgZ3JvdXBzKTtcbiAgICAgIHBvc2l0aW9uKGJ1dHRvbiwgdG9vbGJhciwgZGV0YWlsLCBsYXlvdXRzKTtcbiAgICAgIFRvZ2dsaW5nLm9uKGJ1dHRvbik7XG4gICAgfTtcbiAgICBjb25zdCBtYWtlU2FuZGJveCA9IChidXR0b24sIHNwZWMsIGRldGFpbCkgPT4ge1xuICAgICAgY29uc3QgYXJpYUNvbnRyb2xzID0gbWFuYWdlcigpO1xuICAgICAgY29uc3Qgb25PcGVuID0gKHNhbmRib3gsIHRvb2xiYXIpID0+IHtcbiAgICAgICAgY29uc3Qgc2tpcEZvY3VzID0gc2hvdWxkU2tpcEZvY3VzLmdldCgpLmdldE9yKGZhbHNlKTtcbiAgICAgICAgZGV0YWlsLmZldGNoKCkuZ2V0KGdyb3VwcyA9PiB7XG4gICAgICAgICAgc2V0R3JvdXBzKGJ1dHRvbiwgdG9vbGJhciwgZGV0YWlsLCBzcGVjLmxheW91dHMsIGdyb3Vwcyk7XG4gICAgICAgICAgYXJpYUNvbnRyb2xzLmxpbmsoYnV0dG9uLmVsZW1lbnQpO1xuICAgICAgICAgIGlmICghc2tpcEZvY3VzKSB7XG4gICAgICAgICAgICBLZXlpbmcuZm9jdXNJbih0b29sYmFyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG9uQ2xvc2UgPSAoKSA9PiB7XG4gICAgICAgIFRvZ2dsaW5nLm9mZihidXR0b24pO1xuICAgICAgICBpZiAoIXNob3VsZFNraXBGb2N1cy5nZXQoKS5nZXRPcihmYWxzZSkpIHtcbiAgICAgICAgICBGb2N1c2luZy5mb2N1cyhidXR0b24pO1xuICAgICAgICB9XG4gICAgICAgIGFyaWFDb250cm9scy51bmxpbmsoYnV0dG9uLmVsZW1lbnQpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgYXR0cmlidXRlczogeyBpZDogYXJpYUNvbnRyb2xzLmlkIH1cbiAgICAgICAgfSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgICAgbW9kZTogJ3NwZWNpYWwnLFxuICAgICAgICAgICAgb25Fc2NhcGU6IGNvbXAgPT4ge1xuICAgICAgICAgICAgICBTYW5kYm94aW5nLmNsb3NlKGNvbXApO1xuICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBTYW5kYm94aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBvbk9wZW4sXG4gICAgICAgICAgICBvbkNsb3NlLFxuICAgICAgICAgICAgaXNQYXJ0T2Y6IChjb250YWluZXIsIGRhdGEsIHF1ZXJ5RWxlbSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gaXNQYXJ0T2YkMShkYXRhLCBxdWVyeUVsZW0pIHx8IGlzUGFydE9mJDEoYnV0dG9uLCBxdWVyeUVsZW0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldEF0dGFjaFBvaW50OiAoKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBkZXRhaWwubGF6eVNpbmsoYnV0dG9uKS5nZXRPckRpZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIFJlY2VpdmluZy5jb25maWcoe1xuICAgICAgICAgICAgY2hhbm5lbHM6IHtcbiAgICAgICAgICAgICAgLi4ucmVjZWl2aW5nQ2hhbm5lbCQxKHtcbiAgICAgICAgICAgICAgICBpc0V4dHJhUGFydDogbmV2ZXIsXG4gICAgICAgICAgICAgICAgLi4uZGV0YWlsLmZpcmVEaXNtaXNzYWxFdmVudEluc3RlYWQubWFwKGZlID0+ICh7IGZpcmVFdmVudEluc3RlYWQ6IHsgZXZlbnQ6IGZlLmV2ZW50IH0gfSkpLmdldE9yKHt9KVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgLi4ucmVjZWl2aW5nQ2hhbm5lbCh7XG4gICAgICAgICAgICAgICAgZG9SZXBvc2l0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBTYW5kYm94aW5nLmdldFN0YXRlKENvdXBsaW5nLmdldENvdXBsZWQoYnV0dG9uLCAndG9vbGJhclNhbmRib3gnKSkuZWFjaCh0b29sYmFyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24oYnV0dG9uLCB0b29sYmFyLCBkZXRhaWwsIHNwZWMubGF5b3V0cyk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgXSlcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBmYWN0b3J5JGMgPSAoZGV0YWlsLCBjb21wb25lbnRzLCBzcGVjLCBleHRlcm5hbHMpID0+ICh7XG4gICAgICAuLi5CdXR0b24uc2tldGNoKHtcbiAgICAgICAgLi4uZXh0ZXJuYWxzLmJ1dHRvbigpLFxuICAgICAgICBhY3Rpb246IGJ1dHRvbiA9PiB7XG4gICAgICAgICAgdG9nZ2xlKGJ1dHRvbiwgZXh0ZXJuYWxzKTtcbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uQmVoYXZpb3VyczogU2tldGNoQmVoYXZpb3Vycy5hdWdtZW50KHsgZHVtcDogZXh0ZXJuYWxzLmJ1dHRvbigpLmJ1dHRvbkJlaGF2aW91cnMgfSwgW0NvdXBsaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBvdGhlcnM6IHtcbiAgICAgICAgICAgICAgdG9vbGJhclNhbmRib3g6IGJ1dHRvbiA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VTYW5kYm94KGJ1dHRvbiwgc3BlYywgZGV0YWlsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXSlcbiAgICAgIH0pLFxuICAgICAgYXBpczoge1xuICAgICAgICBzZXRHcm91cHM6IChidXR0b24sIGdyb3VwcykgPT4ge1xuICAgICAgICAgIFNhbmRib3hpbmcuZ2V0U3RhdGUoQ291cGxpbmcuZ2V0Q291cGxlZChidXR0b24sICd0b29sYmFyU2FuZGJveCcpKS5lYWNoKHRvb2xiYXIgPT4ge1xuICAgICAgICAgICAgc2V0R3JvdXBzKGJ1dHRvbiwgdG9vbGJhciwgZGV0YWlsLCBzcGVjLmxheW91dHMsIGdyb3Vwcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlcG9zaXRpb246IGJ1dHRvbiA9PiB7XG4gICAgICAgICAgU2FuZGJveGluZy5nZXRTdGF0ZShDb3VwbGluZy5nZXRDb3VwbGVkKGJ1dHRvbiwgJ3Rvb2xiYXJTYW5kYm94JykpLmVhY2godG9vbGJhciA9PiB7XG4gICAgICAgICAgICBwb3NpdGlvbihidXR0b24sIHRvb2xiYXIsIGRldGFpbCwgc3BlYy5sYXlvdXRzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgdG9nZ2xlOiBidXR0b24gPT4ge1xuICAgICAgICAgIHRvZ2dsZShidXR0b24sIGV4dGVybmFscyk7XG4gICAgICAgIH0sXG4gICAgICAgIHRvZ2dsZVdpdGhvdXRGb2N1c2luZzogYnV0dG9uID0+IHtcbiAgICAgICAgICB0b2dnbGVXaXRob3V0Rm9jdXNpbmcoYnV0dG9uLCBleHRlcm5hbHMpO1xuICAgICAgICB9LFxuICAgICAgICBnZXRUb29sYmFyOiBidXR0b24gPT4ge1xuICAgICAgICAgIHJldHVybiBTYW5kYm94aW5nLmdldFN0YXRlKENvdXBsaW5nLmdldENvdXBsZWQoYnV0dG9uLCAndG9vbGJhclNhbmRib3gnKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGlzT3BlbjogYnV0dG9uID0+IHtcbiAgICAgICAgICByZXR1cm4gU2FuZGJveGluZy5pc09wZW4oQ291cGxpbmcuZ2V0Q291cGxlZChidXR0b24sICd0b29sYmFyU2FuZGJveCcpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IEZsb2F0aW5nVG9vbGJhckJ1dHRvbiA9IGNvbXBvc2l0ZSh7XG4gICAgICBuYW1lOiAnRmxvYXRpbmdUb29sYmFyQnV0dG9uJyxcbiAgICAgIGZhY3Rvcnk6IGZhY3RvcnkkYyxcbiAgICAgIGNvbmZpZ0ZpZWxkczogc2NoZW1hJGEoKSxcbiAgICAgIHBhcnRGaWVsZHM6IHBhcnRzJDYoKSxcbiAgICAgIGFwaXM6IHtcbiAgICAgICAgc2V0R3JvdXBzOiAoYXBpcywgYnV0dG9uLCBncm91cHMpID0+IHtcbiAgICAgICAgICBhcGlzLnNldEdyb3VwcyhidXR0b24sIGdyb3Vwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlcG9zaXRpb246IChhcGlzLCBidXR0b24pID0+IHtcbiAgICAgICAgICBhcGlzLnJlcG9zaXRpb24oYnV0dG9uKTtcbiAgICAgICAgfSxcbiAgICAgICAgdG9nZ2xlOiAoYXBpcywgYnV0dG9uKSA9PiB7XG4gICAgICAgICAgYXBpcy50b2dnbGUoYnV0dG9uKTtcbiAgICAgICAgfSxcbiAgICAgICAgdG9nZ2xlV2l0aG91dEZvY3VzaW5nOiAoYXBpcywgYnV0dG9uKSA9PiB7XG4gICAgICAgICAgYXBpcy50b2dnbGVXaXRob3V0Rm9jdXNpbmcoYnV0dG9uKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0VG9vbGJhcjogKGFwaXMsIGJ1dHRvbikgPT4gYXBpcy5nZXRUb29sYmFyKGJ1dHRvbiksXG4gICAgICAgIGlzT3BlbjogKGFwaXMsIGJ1dHRvbikgPT4gYXBpcy5pc09wZW4oYnV0dG9uKVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2NoZW1hJDkgPSBjb25zdGFudCQxKFtcbiAgICAgIHJlcXVpcmVkJDEoJ2l0ZW1zJyksXG4gICAgICBtYXJrZXJzJDEoWydpdGVtU2VsZWN0b3InXSksXG4gICAgICBmaWVsZCgndGdyb3VwQmVoYXZpb3VycycsIFtLZXlpbmddKVxuICAgIF0pO1xuICAgIGNvbnN0IHBhcnRzJDUgPSBjb25zdGFudCQxKFtncm91cCh7XG4gICAgICAgIG5hbWU6ICdpdGVtcycsXG4gICAgICAgIHVuaXQ6ICdpdGVtJ1xuICAgICAgfSldKTtcblxuICAgIGNvbnN0IGZhY3RvcnkkYiA9IChkZXRhaWwsIGNvbXBvbmVudHMsIF9zcGVjLCBfZXh0ZXJuYWxzKSA9PiAoe1xuICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgY29tcG9uZW50cyxcbiAgICAgIGJlaGF2aW91cnM6IGF1Z21lbnQoZGV0YWlsLnRncm91cEJlaGF2aW91cnMsIFtLZXlpbmcuY29uZmlnKHtcbiAgICAgICAgICBtb2RlOiAnZmxvdycsXG4gICAgICAgICAgc2VsZWN0b3I6IGRldGFpbC5tYXJrZXJzLml0ZW1TZWxlY3RvclxuICAgICAgICB9KV0pLFxuICAgICAgZG9tTW9kaWZpY2F0aW9uOiB7IGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3Rvb2xiYXInIH0gfVxuICAgIH0pO1xuICAgIGNvbnN0IFRvb2xiYXJHcm91cCA9IGNvbXBvc2l0ZSh7XG4gICAgICBuYW1lOiAnVG9vbGJhckdyb3VwJyxcbiAgICAgIGNvbmZpZ0ZpZWxkczogc2NoZW1hJDkoKSxcbiAgICAgIHBhcnRGaWVsZHM6IHBhcnRzJDUoKSxcbiAgICAgIGZhY3Rvcnk6IGZhY3RvcnkkYlxuICAgIH0pO1xuXG4gICAgY29uc3QgYnVpbGRHcm91cHMgPSBjb21wcyA9PiBtYXAkMihjb21wcywgZyA9PiBwcmVtYWRlKGcpKTtcbiAgICBjb25zdCByZWZyZXNoJDEgPSAodG9vbGJhciwgbWVtRmxvYXRpbmdUb29sYmFyQnV0dG9uLCBkZXRhaWwpID0+IHtcbiAgICAgIHJlZnJlc2gkMih0b29sYmFyLCBkZXRhaWwsIG92ZXJmbG93R3JvdXBzID0+IHtcbiAgICAgICAgZGV0YWlsLm92ZXJmbG93R3JvdXBzLnNldChvdmVyZmxvd0dyb3Vwcyk7XG4gICAgICAgIG1lbUZsb2F0aW5nVG9vbGJhckJ1dHRvbi5nZXRPcHQodG9vbGJhcikuZWFjaChmbG9hdGluZ1Rvb2xiYXJCdXR0b24gPT4ge1xuICAgICAgICAgIEZsb2F0aW5nVG9vbGJhckJ1dHRvbi5zZXRHcm91cHMoZmxvYXRpbmdUb29sYmFyQnV0dG9uLCBidWlsZEdyb3VwcyhvdmVyZmxvd0dyb3VwcykpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZmFjdG9yeSRhID0gKGRldGFpbCwgY29tcG9uZW50cywgc3BlYywgZXh0ZXJuYWxzKSA9PiB7XG4gICAgICBjb25zdCBtZW1GbG9hdGluZ1Rvb2xiYXJCdXR0b24gPSByZWNvcmQoRmxvYXRpbmdUb29sYmFyQnV0dG9uLnNrZXRjaCh7XG4gICAgICAgIGZldGNoOiAoKSA9PiBGdXR1cmUubnUocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShidWlsZEdyb3VwcyhkZXRhaWwub3ZlcmZsb3dHcm91cHMuZ2V0KCkpKTtcbiAgICAgICAgfSksXG4gICAgICAgIGxheW91dHM6IHtcbiAgICAgICAgICBvbkx0cjogKCkgPT4gW1xuICAgICAgICAgICAgc291dGh3ZXN0JDIsXG4gICAgICAgICAgICBzb3V0aGVhc3QkMlxuICAgICAgICAgIF0sXG4gICAgICAgICAgb25SdGw6ICgpID0+IFtcbiAgICAgICAgICAgIHNvdXRoZWFzdCQyLFxuICAgICAgICAgICAgc291dGh3ZXN0JDJcbiAgICAgICAgICBdLFxuICAgICAgICAgIG9uQm90dG9tTHRyOiAoKSA9PiBbXG4gICAgICAgICAgICBub3J0aHdlc3QkMixcbiAgICAgICAgICAgIG5vcnRoZWFzdCQyXG4gICAgICAgICAgXSxcbiAgICAgICAgICBvbkJvdHRvbVJ0bDogKCkgPT4gW1xuICAgICAgICAgICAgbm9ydGhlYXN0JDIsXG4gICAgICAgICAgICBub3J0aHdlc3QkMlxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgZ2V0Qm91bmRzOiBzcGVjLmdldE92ZXJmbG93Qm91bmRzLFxuICAgICAgICBsYXp5U2luazogZGV0YWlsLmxhenlTaW5rLFxuICAgICAgICBmaXJlRGlzbWlzc2FsRXZlbnRJbnN0ZWFkOiB7fSxcbiAgICAgICAgbWFya2VyczogeyB0b2dnbGVkQ2xhc3M6IGRldGFpbC5tYXJrZXJzLm92ZXJmbG93VG9nZ2xlZENsYXNzIH0sXG4gICAgICAgIHBhcnRzOiB7XG4gICAgICAgICAgYnV0dG9uOiBleHRlcm5hbHNbJ292ZXJmbG93LWJ1dHRvbiddKCksXG4gICAgICAgICAgdG9vbGJhcjogZXh0ZXJuYWxzLm92ZXJmbG93KClcbiAgICAgICAgfSxcbiAgICAgICAgb25Ub2dnbGVkOiAoY29tcCwgc3RhdGUpID0+IGRldGFpbFtzdGF0ZSA/ICdvbk9wZW5lZCcgOiAnb25DbG9zZWQnXShjb21wKVxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgICBkb206IGRldGFpbC5kb20sXG4gICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgIGJlaGF2aW91cnM6IGF1Z21lbnQoZGV0YWlsLnNwbGl0VG9vbGJhckJlaGF2aW91cnMsIFtDb3VwbGluZy5jb25maWcoe1xuICAgICAgICAgICAgb3RoZXJzOiB7XG4gICAgICAgICAgICAgIG92ZXJmbG93R3JvdXA6ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gVG9vbGJhckdyb3VwLnNrZXRjaCh7XG4gICAgICAgICAgICAgICAgICAuLi5leHRlcm5hbHNbJ292ZXJmbG93LWdyb3VwJ10oKSxcbiAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbbWVtRmxvYXRpbmdUb29sYmFyQnV0dG9uLmFzU3BlYygpXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSldKSxcbiAgICAgICAgYXBpczoge1xuICAgICAgICAgIHNldEdyb3VwczogKHRvb2xiYXIsIGdyb3VwcykgPT4ge1xuICAgICAgICAgICAgZGV0YWlsLmJ1aWx0R3JvdXBzLnNldChtYXAkMihncm91cHMsIHRvb2xiYXIuZ2V0U3lzdGVtKCkuYnVpbGQpKTtcbiAgICAgICAgICAgIHJlZnJlc2gkMSh0b29sYmFyLCBtZW1GbG9hdGluZ1Rvb2xiYXJCdXR0b24sIGRldGFpbCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZWZyZXNoOiB0b29sYmFyID0+IHJlZnJlc2gkMSh0b29sYmFyLCBtZW1GbG9hdGluZ1Rvb2xiYXJCdXR0b24sIGRldGFpbCksXG4gICAgICAgICAgdG9nZ2xlOiB0b29sYmFyID0+IHtcbiAgICAgICAgICAgIG1lbUZsb2F0aW5nVG9vbGJhckJ1dHRvbi5nZXRPcHQodG9vbGJhcikuZWFjaChmbG9hdGluZ1Rvb2xiYXJCdXR0b24gPT4ge1xuICAgICAgICAgICAgICBGbG9hdGluZ1Rvb2xiYXJCdXR0b24udG9nZ2xlKGZsb2F0aW5nVG9vbGJhckJ1dHRvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRvZ2dsZVdpdGhvdXRGb2N1c2luZzogdG9vbGJhciA9PiB7XG4gICAgICAgICAgICBtZW1GbG9hdGluZ1Rvb2xiYXJCdXR0b24uZ2V0T3B0KHRvb2xiYXIpLmVhY2goRmxvYXRpbmdUb29sYmFyQnV0dG9uLnRvZ2dsZVdpdGhvdXRGb2N1c2luZyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpc09wZW46IHRvb2xiYXIgPT4gbWVtRmxvYXRpbmdUb29sYmFyQnV0dG9uLmdldE9wdCh0b29sYmFyKS5tYXAoRmxvYXRpbmdUb29sYmFyQnV0dG9uLmlzT3BlbikuZ2V0T3IoZmFsc2UpLFxuICAgICAgICAgIHJlcG9zaXRpb246IHRvb2xiYXIgPT4ge1xuICAgICAgICAgICAgbWVtRmxvYXRpbmdUb29sYmFyQnV0dG9uLmdldE9wdCh0b29sYmFyKS5lYWNoKGZsb2F0aW5nVG9vbGJhckJ1dHRvbiA9PiB7XG4gICAgICAgICAgICAgIEZsb2F0aW5nVG9vbGJhckJ1dHRvbi5yZXBvc2l0aW9uKGZsb2F0aW5nVG9vbGJhckJ1dHRvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdldE92ZXJmbG93OiB0b29sYmFyID0+IG1lbUZsb2F0aW5nVG9vbGJhckJ1dHRvbi5nZXRPcHQodG9vbGJhcikuYmluZChGbG9hdGluZ1Rvb2xiYXJCdXR0b24uZ2V0VG9vbGJhcilcbiAgICAgICAgfSxcbiAgICAgICAgZG9tTW9kaWZpY2F0aW9uOiB7IGF0dHJpYnV0ZXM6IHsgcm9sZTogJ2dyb3VwJyB9IH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBTcGxpdEZsb2F0aW5nVG9vbGJhciA9IGNvbXBvc2l0ZSh7XG4gICAgICBuYW1lOiAnU3BsaXRGbG9hdGluZ1Rvb2xiYXInLFxuICAgICAgY29uZmlnRmllbGRzOiBzY2hlbWEkYigpLFxuICAgICAgcGFydEZpZWxkczogcGFydHMkNygpLFxuICAgICAgZmFjdG9yeTogZmFjdG9yeSRhLFxuICAgICAgYXBpczoge1xuICAgICAgICBzZXRHcm91cHM6IChhcGlzLCB0b29sYmFyLCBncm91cHMpID0+IHtcbiAgICAgICAgICBhcGlzLnNldEdyb3Vwcyh0b29sYmFyLCBncm91cHMpO1xuICAgICAgICB9LFxuICAgICAgICByZWZyZXNoOiAoYXBpcywgdG9vbGJhcikgPT4ge1xuICAgICAgICAgIGFwaXMucmVmcmVzaCh0b29sYmFyKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVwb3NpdGlvbjogKGFwaXMsIHRvb2xiYXIpID0+IHtcbiAgICAgICAgICBhcGlzLnJlcG9zaXRpb24odG9vbGJhcik7XG4gICAgICAgIH0sXG4gICAgICAgIHRvZ2dsZTogKGFwaXMsIHRvb2xiYXIpID0+IHtcbiAgICAgICAgICBhcGlzLnRvZ2dsZSh0b29sYmFyKTtcbiAgICAgICAgfSxcbiAgICAgICAgdG9nZ2xlV2l0aG91dEZvY3VzaW5nOiAoYXBpcywgdG9vbGJhcikgPT4ge1xuICAgICAgICAgIGFwaXMudG9nZ2xlKHRvb2xiYXIpO1xuICAgICAgICB9LFxuICAgICAgICBpc09wZW46IChhcGlzLCB0b29sYmFyKSA9PiBhcGlzLmlzT3Blbih0b29sYmFyKSxcbiAgICAgICAgZ2V0T3ZlcmZsb3c6IChhcGlzLCB0b29sYmFyKSA9PiBhcGlzLmdldE92ZXJmbG93KHRvb2xiYXIpXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzY2hlbWEkOCA9IGNvbnN0YW50JDEoW1xuICAgICAgbWFya2VycyQxKFtcbiAgICAgICAgJ2Nsb3NlZENsYXNzJyxcbiAgICAgICAgJ29wZW5DbGFzcycsXG4gICAgICAgICdzaHJpbmtpbmdDbGFzcycsXG4gICAgICAgICdncm93aW5nQ2xhc3MnLFxuICAgICAgICAnb3ZlcmZsb3dUb2dnbGVkQ2xhc3MnXG4gICAgICBdKSxcbiAgICAgIG9uSGFuZGxlcignb25PcGVuZWQnKSxcbiAgICAgIG9uSGFuZGxlcignb25DbG9zZWQnKVxuICAgIF0uY29uY2F0KHNjaGVtYSRjKCkpKTtcbiAgICBjb25zdCBwYXJ0cyQ0ID0gY29uc3RhbnQkMShbXG4gICAgICByZXF1aXJlZCh7XG4gICAgICAgIGZhY3Rvcnk6IFRvb2xiYXIsXG4gICAgICAgIHNjaGVtYTogc2NoZW1hJGUoKSxcbiAgICAgICAgbmFtZTogJ3ByaW1hcnknXG4gICAgICB9KSxcbiAgICAgIHJlcXVpcmVkKHtcbiAgICAgICAgZmFjdG9yeTogVG9vbGJhcixcbiAgICAgICAgc2NoZW1hOiBzY2hlbWEkZSgpLFxuICAgICAgICBuYW1lOiAnb3ZlcmZsb3cnLFxuICAgICAgICBvdmVycmlkZXM6IGRldGFpbCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvb2xiYXJCZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgICAgIFNsaWRpbmcuY29uZmlnKHtcbiAgICAgICAgICAgICAgICBkaW1lbnNpb246IHsgcHJvcGVydHk6ICdoZWlnaHQnIH0sXG4gICAgICAgICAgICAgICAgY2xvc2VkQ2xhc3M6IGRldGFpbC5tYXJrZXJzLmNsb3NlZENsYXNzLFxuICAgICAgICAgICAgICAgIG9wZW5DbGFzczogZGV0YWlsLm1hcmtlcnMub3BlbkNsYXNzLFxuICAgICAgICAgICAgICAgIHNocmlua2luZ0NsYXNzOiBkZXRhaWwubWFya2Vycy5zaHJpbmtpbmdDbGFzcyxcbiAgICAgICAgICAgICAgICBncm93aW5nQ2xhc3M6IGRldGFpbC5tYXJrZXJzLmdyb3dpbmdDbGFzcyxcbiAgICAgICAgICAgICAgICBvblNocnVuazogY29tcCA9PiB7XG4gICAgICAgICAgICAgICAgICBnZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ292ZXJmbG93LWJ1dHRvbicpLmVhY2goYnV0dG9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgVG9nZ2xpbmcub2ZmKGJ1dHRvbik7XG4gICAgICAgICAgICAgICAgICAgIEZvY3VzaW5nLmZvY3VzKGJ1dHRvbik7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIGRldGFpbC5vbkNsb3NlZChjb21wKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uR3Jvd246IGNvbXAgPT4ge1xuICAgICAgICAgICAgICAgICAgS2V5aW5nLmZvY3VzSW4oY29tcCk7XG4gICAgICAgICAgICAgICAgICBkZXRhaWwub25PcGVuZWQoY29tcCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvblN0YXJ0R3JvdzogY29tcCA9PiB7XG4gICAgICAgICAgICAgICAgICBnZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ292ZXJmbG93LWJ1dHRvbicpLmVhY2goVG9nZ2xpbmcub24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgICAgICAgIG1vZGU6ICdhY3ljbGljJyxcbiAgICAgICAgICAgICAgICBvbkVzY2FwZTogY29tcCA9PiB7XG4gICAgICAgICAgICAgICAgICBnZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ292ZXJmbG93LWJ1dHRvbicpLmVhY2goRm9jdXNpbmcuZm9jdXMpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGV4dGVybmFsKHtcbiAgICAgICAgbmFtZTogJ292ZXJmbG93LWJ1dHRvbicsXG4gICAgICAgIG92ZXJyaWRlczogZGV0YWlsID0+ICh7XG4gICAgICAgICAgYnV0dG9uQmVoYXZpb3VyczogZGVyaXZlJDEoW1RvZ2dsaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICAgIHRvZ2dsZUNsYXNzOiBkZXRhaWwubWFya2Vycy5vdmVyZmxvd1RvZ2dsZWRDbGFzcyxcbiAgICAgICAgICAgICAgYXJpYTogeyBtb2RlOiAncHJlc3NlZCcgfSxcbiAgICAgICAgICAgICAgdG9nZ2xlT25FeGVjdXRlOiBmYWxzZVxuICAgICAgICAgICAgfSldKVxuICAgICAgICB9KVxuICAgICAgfSksXG4gICAgICBleHRlcm5hbCh7IG5hbWU6ICdvdmVyZmxvdy1ncm91cCcgfSlcbiAgICBdKTtcblxuICAgIGNvbnN0IGlzT3BlbiA9ICh0b29sYmFyLCBkZXRhaWwpID0+IGdldFBhcnQodG9vbGJhciwgZGV0YWlsLCAnb3ZlcmZsb3cnKS5tYXAoU2xpZGluZy5oYXNHcm93bikuZ2V0T3IoZmFsc2UpO1xuICAgIGNvbnN0IHRvZ2dsZVRvb2xiYXIgPSAodG9vbGJhciwgZGV0YWlsKSA9PiB7XG4gICAgICBnZXRQYXJ0KHRvb2xiYXIsIGRldGFpbCwgJ292ZXJmbG93LWJ1dHRvbicpLmJpbmQoKCkgPT4gZ2V0UGFydCh0b29sYmFyLCBkZXRhaWwsICdvdmVyZmxvdycpKS5lYWNoKG92ZXJmID0+IHtcbiAgICAgICAgcmVmcmVzaCh0b29sYmFyLCBkZXRhaWwpO1xuICAgICAgICBTbGlkaW5nLnRvZ2dsZUdyb3cob3ZlcmYpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWZyZXNoID0gKHRvb2xiYXIsIGRldGFpbCkgPT4ge1xuICAgICAgZ2V0UGFydCh0b29sYmFyLCBkZXRhaWwsICdvdmVyZmxvdycpLmVhY2gob3ZlcmZsb3cgPT4ge1xuICAgICAgICByZWZyZXNoJDIodG9vbGJhciwgZGV0YWlsLCBncm91cHMgPT4ge1xuICAgICAgICAgIGNvbnN0IGJ1aWx0R3JvdXBzID0gbWFwJDIoZ3JvdXBzLCBnID0+IHByZW1hZGUoZykpO1xuICAgICAgICAgIFRvb2xiYXIuc2V0R3JvdXBzKG92ZXJmbG93LCBidWlsdEdyb3Vwcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBnZXRQYXJ0KHRvb2xiYXIsIGRldGFpbCwgJ292ZXJmbG93LWJ1dHRvbicpLmVhY2goYnV0dG9uID0+IHtcbiAgICAgICAgICBpZiAoU2xpZGluZy5oYXNHcm93bihvdmVyZmxvdykpIHtcbiAgICAgICAgICAgIFRvZ2dsaW5nLm9uKGJ1dHRvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgU2xpZGluZy5yZWZyZXNoKG92ZXJmbG93KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZmFjdG9yeSQ5ID0gKGRldGFpbCwgY29tcG9uZW50cywgc3BlYywgZXh0ZXJuYWxzKSA9PiB7XG4gICAgICBjb25zdCB0b29sYmFyVG9nZ2xlRXZlbnQgPSAnYWxsb3kudG9vbGJhci50b2dnbGUnO1xuICAgICAgY29uc3QgZG9TZXRHcm91cHMgPSAodG9vbGJhciwgZ3JvdXBzKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWx0ID0gbWFwJDIoZ3JvdXBzLCB0b29sYmFyLmdldFN5c3RlbSgpLmJ1aWxkKTtcbiAgICAgICAgZGV0YWlsLmJ1aWx0R3JvdXBzLnNldChidWlsdCk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgICBkb206IGRldGFpbC5kb20sXG4gICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgIGJlaGF2aW91cnM6IGF1Z21lbnQoZGV0YWlsLnNwbGl0VG9vbGJhckJlaGF2aW91cnMsIFtcbiAgICAgICAgICBDb3VwbGluZy5jb25maWcoe1xuICAgICAgICAgICAgb3RoZXJzOiB7XG4gICAgICAgICAgICAgIG92ZXJmbG93R3JvdXA6IHRvb2xiYXIgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBUb29sYmFyR3JvdXAuc2tldGNoKHtcbiAgICAgICAgICAgICAgICAgIC4uLmV4dGVybmFsc1snb3ZlcmZsb3ctZ3JvdXAnXSgpLFxuICAgICAgICAgICAgICAgICAgaXRlbXM6IFtCdXR0b24uc2tldGNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5leHRlcm5hbHNbJ292ZXJmbG93LWJ1dHRvbiddKCksXG4gICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBfYnV0dG9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtaXQodG9vbGJhciwgdG9vbGJhclRvZ2dsZUV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY29uZmlnKCd0b29sYmFyLXRvZ2dsZS1ldmVudHMnLCBbcnVuJDEodG9vbGJhclRvZ2dsZUV2ZW50LCB0b29sYmFyID0+IHtcbiAgICAgICAgICAgICAgdG9nZ2xlVG9vbGJhcih0b29sYmFyLCBkZXRhaWwpO1xuICAgICAgICAgICAgfSldKVxuICAgICAgICBdKSxcbiAgICAgICAgYXBpczoge1xuICAgICAgICAgIHNldEdyb3VwczogKHRvb2xiYXIsIGdyb3VwcykgPT4ge1xuICAgICAgICAgICAgZG9TZXRHcm91cHModG9vbGJhciwgZ3JvdXBzKTtcbiAgICAgICAgICAgIHJlZnJlc2godG9vbGJhciwgZGV0YWlsKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlZnJlc2g6IHRvb2xiYXIgPT4gcmVmcmVzaCh0b29sYmFyLCBkZXRhaWwpLFxuICAgICAgICAgIHRvZ2dsZTogdG9vbGJhciA9PiB0b2dnbGVUb29sYmFyKHRvb2xiYXIsIGRldGFpbCksXG4gICAgICAgICAgaXNPcGVuOiB0b29sYmFyID0+IGlzT3Blbih0b29sYmFyLCBkZXRhaWwpXG4gICAgICAgIH0sXG4gICAgICAgIGRvbU1vZGlmaWNhdGlvbjogeyBhdHRyaWJ1dGVzOiB7IHJvbGU6ICdncm91cCcgfSB9XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgU3BsaXRTbGlkaW5nVG9vbGJhciA9IGNvbXBvc2l0ZSh7XG4gICAgICBuYW1lOiAnU3BsaXRTbGlkaW5nVG9vbGJhcicsXG4gICAgICBjb25maWdGaWVsZHM6IHNjaGVtYSQ4KCksXG4gICAgICBwYXJ0RmllbGRzOiBwYXJ0cyQ0KCksXG4gICAgICBmYWN0b3J5OiBmYWN0b3J5JDksXG4gICAgICBhcGlzOiB7XG4gICAgICAgIHNldEdyb3VwczogKGFwaXMsIHRvb2xiYXIsIGdyb3VwcykgPT4ge1xuICAgICAgICAgIGFwaXMuc2V0R3JvdXBzKHRvb2xiYXIsIGdyb3Vwcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZnJlc2g6IChhcGlzLCB0b29sYmFyKSA9PiB7XG4gICAgICAgICAgYXBpcy5yZWZyZXNoKHRvb2xiYXIpO1xuICAgICAgICB9LFxuICAgICAgICB0b2dnbGU6IChhcGlzLCB0b29sYmFyKSA9PiB7XG4gICAgICAgICAgYXBpcy50b2dnbGUodG9vbGJhcik7XG4gICAgICAgIH0sXG4gICAgICAgIGlzT3BlbjogKGFwaXMsIHRvb2xiYXIpID0+IGFwaXMuaXNPcGVuKHRvb2xiYXIpXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCByZW5kZXJUb29sYmFyR3JvdXBDb21tb24gPSB0b29sYmFyR3JvdXAgPT4ge1xuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHRvb2xiYXJHcm91cC50aXRsZS5mb2xkKCgpID0+ICh7fSksIHRpdGxlID0+ICh7IGF0dHJpYnV0ZXM6IHsgdGl0bGUgfSB9KSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXRvb2xiYXJfX2dyb3VwJ10sXG4gICAgICAgICAgLi4uYXR0cmlidXRlc1xuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbVG9vbGJhckdyb3VwLnBhcnRzLml0ZW1zKHt9KV0sXG4gICAgICAgIGl0ZW1zOiB0b29sYmFyR3JvdXAuaXRlbXMsXG4gICAgICAgIG1hcmtlcnM6IHsgaXRlbVNlbGVjdG9yOiAnKjpub3QoLnRveC1zcGxpdC1idXR0b24pID4gLnRveC10YnRuOm5vdChbZGlzYWJsZWRdKSwgJyArICcudG94LXNwbGl0LWJ1dHRvbjpub3QoW2Rpc2FibGVkXSksICcgKyAnLnRveC10b29sYmFyLW5hdi1qczpub3QoW2Rpc2FibGVkXSksICcgKyAnLnRveC1udW1iZXItaW5wdXQ6bm90KFtkaXNhYmxlZF0pJyB9LFxuICAgICAgICB0Z3JvdXBCZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgVGFic3RvcHBpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICBGb2N1c2luZy5jb25maWcoe30pXG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyVG9vbGJhckdyb3VwID0gdG9vbGJhckdyb3VwID0+IFRvb2xiYXJHcm91cC5za2V0Y2gocmVuZGVyVG9vbGJhckdyb3VwQ29tbW9uKHRvb2xiYXJHcm91cCkpO1xuICAgIGNvbnN0IGdldFRvb2xiYXJCZWhhdmlvdXJzID0gKHRvb2xiYXJTcGVjLCBtb2RlTmFtZSkgPT4ge1xuICAgICAgY29uc3Qgb25BdHRhY2hlZCA9IHJ1bk9uQXR0YWNoZWQoY29tcG9uZW50ID0+IHtcbiAgICAgICAgY29uc3QgZ3JvdXBzID0gbWFwJDIodG9vbGJhclNwZWMuaW5pdEdyb3VwcywgcmVuZGVyVG9vbGJhckdyb3VwKTtcbiAgICAgICAgVG9vbGJhci5zZXRHcm91cHMoY29tcG9uZW50LCBncm91cHMpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGVyaXZlJDEoW1xuICAgICAgICBEaXNhYmxpbmdDb25maWdzLnRvb2xiYXJCdXR0b24odG9vbGJhclNwZWMucHJvdmlkZXJzLmlzRGlzYWJsZWQpLFxuICAgICAgICByZWNlaXZpbmdDb25maWcoKSxcbiAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgbW9kZTogbW9kZU5hbWUsXG4gICAgICAgICAgb25Fc2NhcGU6IHRvb2xiYXJTcGVjLm9uRXNjYXBlLFxuICAgICAgICAgIHNlbGVjdG9yOiAnLnRveC10b29sYmFyX19ncm91cCdcbiAgICAgICAgfSksXG4gICAgICAgIGNvbmZpZygndG9vbGJhci1ldmVudHMnLCBbb25BdHRhY2hlZF0pXG4gICAgICBdKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlck1vcmVUb29sYmFyQ29tbW9uID0gdG9vbGJhclNwZWMgPT4ge1xuICAgICAgY29uc3QgbW9kZU5hbWUgPSB0b29sYmFyU3BlYy5jeWNsaWNLZXlpbmcgPyAnY3ljbGljJyA6ICdhY3ljbGljJztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVpZDogdG9vbGJhclNwZWMudWlkLFxuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXRvb2xiYXItb3ZlcmxvcmQnXVxuICAgICAgICB9LFxuICAgICAgICBwYXJ0czoge1xuICAgICAgICAgICdvdmVyZmxvdy1ncm91cCc6IHJlbmRlclRvb2xiYXJHcm91cENvbW1vbih7XG4gICAgICAgICAgICB0aXRsZTogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICAgICAgaXRlbXM6IFtdXG4gICAgICAgICAgfSksXG4gICAgICAgICAgJ292ZXJmbG93LWJ1dHRvbic6IHJlbmRlckljb25CdXR0b25TcGVjKHtcbiAgICAgICAgICAgIG5hbWU6ICdtb3JlJyxcbiAgICAgICAgICAgIGljb246IE9wdGlvbmFsLnNvbWUoJ21vcmUtZHJhd2VyJyksXG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgdG9vbHRpcDogT3B0aW9uYWwuc29tZSgnUmV2ZWFsIG9yIGhpZGUgYWRkaXRpb25hbCB0b29sYmFyIGl0ZW1zJyksXG4gICAgICAgICAgICBwcmltYXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIGJ1dHRvblR5cGU6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICAgICAgIGJvcmRlcmxlc3M6IGZhbHNlXG4gICAgICAgICAgfSwgT3B0aW9uYWwubm9uZSgpLCB0b29sYmFyU3BlYy5wcm92aWRlcnMpXG4gICAgICAgIH0sXG4gICAgICAgIHNwbGl0VG9vbGJhckJlaGF2aW91cnM6IGdldFRvb2xiYXJCZWhhdmlvdXJzKHRvb2xiYXJTcGVjLCBtb2RlTmFtZSlcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJGbG9hdGluZ01vcmVUb29sYmFyID0gdG9vbGJhclNwZWMgPT4ge1xuICAgICAgY29uc3QgYmFzZVNwZWMgPSByZW5kZXJNb3JlVG9vbGJhckNvbW1vbih0b29sYmFyU3BlYyk7XG4gICAgICBjb25zdCBvdmVyZmxvd1hPZmZzZXQgPSA0O1xuICAgICAgY29uc3QgcHJpbWFyeSA9IFNwbGl0RmxvYXRpbmdUb29sYmFyLnBhcnRzLnByaW1hcnkoe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXRvb2xiYXJfX3ByaW1hcnknXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBTcGxpdEZsb2F0aW5nVG9vbGJhci5za2V0Y2goe1xuICAgICAgICAuLi5iYXNlU3BlYyxcbiAgICAgICAgbGF6eVNpbms6IHRvb2xiYXJTcGVjLmdldFNpbmssXG4gICAgICAgIGdldE92ZXJmbG93Qm91bmRzOiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgaGVhZGVyRWxlbSA9IHRvb2xiYXJTcGVjLm1vcmVEcmF3ZXJEYXRhLmxhenlIZWFkZXIoKS5lbGVtZW50O1xuICAgICAgICAgIGNvbnN0IGhlYWRlckJvdW5kcyA9IGFic29sdXRlJDIoaGVhZGVyRWxlbSk7XG4gICAgICAgICAgY29uc3QgZG9jRWxlbSA9IGRvY3VtZW50RWxlbWVudChoZWFkZXJFbGVtKTtcbiAgICAgICAgICBjb25zdCBkb2NCb3VuZHMgPSBhYnNvbHV0ZSQyKGRvY0VsZW0pO1xuICAgICAgICAgIGNvbnN0IGhlaWdodCA9IE1hdGgubWF4KGRvY0VsZW0uZG9tLnNjcm9sbEhlaWdodCwgZG9jQm91bmRzLmhlaWdodCk7XG4gICAgICAgICAgcmV0dXJuIGJvdW5kcyhoZWFkZXJCb3VuZHMueCArIG92ZXJmbG93WE9mZnNldCwgZG9jQm91bmRzLnksIGhlYWRlckJvdW5kcy53aWR0aCAtIG92ZXJmbG93WE9mZnNldCAqIDIsIGhlaWdodCk7XG4gICAgICAgIH0sXG4gICAgICAgIHBhcnRzOiB7XG4gICAgICAgICAgLi4uYmFzZVNwZWMucGFydHMsXG4gICAgICAgICAgb3ZlcmZsb3c6IHtcbiAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC10b29sYmFyX19vdmVyZmxvdyddLFxuICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB0b29sYmFyU3BlYy5hdHRyaWJ1dGVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbcHJpbWFyeV0sXG4gICAgICAgIG1hcmtlcnM6IHsgb3ZlcmZsb3dUb2dnbGVkQ2xhc3M6ICd0b3gtdGJ0bi0tZW5hYmxlZCcgfSxcbiAgICAgICAgb25PcGVuZWQ6IGNvbXAgPT4gdG9vbGJhclNwZWMub25Ub2dnbGVkKGNvbXAsIHRydWUpLFxuICAgICAgICBvbkNsb3NlZDogY29tcCA9PiB0b29sYmFyU3BlYy5vblRvZ2dsZWQoY29tcCwgZmFsc2UpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlclNsaWRpbmdNb3JlVG9vbGJhciA9IHRvb2xiYXJTcGVjID0+IHtcbiAgICAgIGNvbnN0IHByaW1hcnkgPSBTcGxpdFNsaWRpbmdUb29sYmFyLnBhcnRzLnByaW1hcnkoe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXRvb2xiYXJfX3ByaW1hcnknXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gU3BsaXRTbGlkaW5nVG9vbGJhci5wYXJ0cy5vdmVyZmxvdyh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtdG9vbGJhcl9fb3ZlcmZsb3cnXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGJhc2VTcGVjID0gcmVuZGVyTW9yZVRvb2xiYXJDb21tb24odG9vbGJhclNwZWMpO1xuICAgICAgcmV0dXJuIFNwbGl0U2xpZGluZ1Rvb2xiYXIuc2tldGNoKHtcbiAgICAgICAgLi4uYmFzZVNwZWMsXG4gICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICBwcmltYXJ5LFxuICAgICAgICAgIG92ZXJmbG93XG4gICAgICAgIF0sXG4gICAgICAgIG1hcmtlcnM6IHtcbiAgICAgICAgICBvcGVuQ2xhc3M6ICd0b3gtdG9vbGJhcl9fb3ZlcmZsb3ctLW9wZW4nLFxuICAgICAgICAgIGNsb3NlZENsYXNzOiAndG94LXRvb2xiYXJfX292ZXJmbG93LS1jbG9zZWQnLFxuICAgICAgICAgIGdyb3dpbmdDbGFzczogJ3RveC10b29sYmFyX19vdmVyZmxvdy0tZ3Jvd2luZycsXG4gICAgICAgICAgc2hyaW5raW5nQ2xhc3M6ICd0b3gtdG9vbGJhcl9fb3ZlcmZsb3ctLXNocmlua2luZycsXG4gICAgICAgICAgb3ZlcmZsb3dUb2dnbGVkQ2xhc3M6ICd0b3gtdGJ0bi0tZW5hYmxlZCdcbiAgICAgICAgfSxcbiAgICAgICAgb25PcGVuZWQ6IGNvbXAgPT4ge1xuICAgICAgICAgIGNvbXAuZ2V0U3lzdGVtKCkuYnJvYWRjYXN0T24oW3Rvb2xiYXJIZWlnaHRDaGFuZ2UoKV0sIHsgdHlwZTogJ29wZW5lZCcgfSk7XG4gICAgICAgICAgdG9vbGJhclNwZWMub25Ub2dnbGVkKGNvbXAsIHRydWUpO1xuICAgICAgICB9LFxuICAgICAgICBvbkNsb3NlZDogY29tcCA9PiB7XG4gICAgICAgICAgY29tcC5nZXRTeXN0ZW0oKS5icm9hZGNhc3RPbihbdG9vbGJhckhlaWdodENoYW5nZSgpXSwgeyB0eXBlOiAnY2xvc2VkJyB9KTtcbiAgICAgICAgICB0b29sYmFyU3BlYy5vblRvZ2dsZWQoY29tcCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlclRvb2xiYXIgPSB0b29sYmFyU3BlYyA9PiB7XG4gICAgICBjb25zdCBtb2RlTmFtZSA9IHRvb2xiYXJTcGVjLmN5Y2xpY0tleWluZyA/ICdjeWNsaWMnIDogJ2FjeWNsaWMnO1xuICAgICAgcmV0dXJuIFRvb2xiYXIuc2tldGNoKHtcbiAgICAgICAgdWlkOiB0b29sYmFyU3BlYy51aWQsXG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtdG9vbGJhciddLmNvbmNhdCh0b29sYmFyU3BlYy50eXBlID09PSBUb29sYmFyTW9kZSQxLnNjcm9sbGluZyA/IFsndG94LXRvb2xiYXItLXNjcm9sbGluZyddIDogW10pXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtUb29sYmFyLnBhcnRzLmdyb3Vwcyh7fSldLFxuICAgICAgICB0b29sYmFyQmVoYXZpb3VyczogZ2V0VG9vbGJhckJlaGF2aW91cnModG9vbGJhclNwZWMsIG1vZGVOYW1lKVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJhc2VCdXR0b25GaWVsZHMgPSBbXG4gICAgICBvcHRpb25hbFRleHQsXG4gICAgICBvcHRpb25hbEljb24sXG4gICAgICBvcHRpb25TdHJpbmcoJ3Rvb2x0aXAnKSxcbiAgICAgIGRlZmF1bHRlZFN0cmluZ0VudW0oJ2J1dHRvblR5cGUnLCAnc2Vjb25kYXJ5JywgW1xuICAgICAgICAncHJpbWFyeScsXG4gICAgICAgICdzZWNvbmRhcnknXG4gICAgICBdKSxcbiAgICAgIGRlZmF1bHRlZEJvb2xlYW4oJ2JvcmRlcmxlc3MnLCBmYWxzZSksXG4gICAgICByZXF1aXJlZEZ1bmN0aW9uKCdvbkFjdGlvbicpXG4gICAgXTtcbiAgICBjb25zdCBub3JtYWxCdXR0b25GaWVsZHMgPSBbXG4gICAgICAuLi5iYXNlQnV0dG9uRmllbGRzLFxuICAgICAgdGV4dCQxLFxuICAgICAgcmVxdWlyZWRTdHJpbmdFbnVtKCd0eXBlJywgWydidXR0b24nXSlcbiAgICBdO1xuICAgIGNvbnN0IHRvZ2dsZUJ1dHRvbkZpZWxkcyA9IFtcbiAgICAgIC4uLmJhc2VCdXR0b25GaWVsZHMsXG4gICAgICBkZWZhdWx0ZWRCb29sZWFuKCdhY3RpdmUnLCBmYWxzZSksXG4gICAgICByZXF1aXJlZFN0cmluZ0VudW0oJ3R5cGUnLCBbJ3RvZ2dsZWJ1dHRvbiddKVxuICAgIF07XG4gICAgY29uc3Qgc2NoZW1hV2l0aG91dEdyb3VwQnV0dG9uID0ge1xuICAgICAgYnV0dG9uOiBub3JtYWxCdXR0b25GaWVsZHMsXG4gICAgICB0b2dnbGVidXR0b246IHRvZ2dsZUJ1dHRvbkZpZWxkc1xuICAgIH07XG4gICAgY29uc3QgZ3JvdXBGaWVsZHMgPSBbXG4gICAgICByZXF1aXJlZFN0cmluZ0VudW0oJ3R5cGUnLCBbJ2dyb3VwJ10pLFxuICAgICAgZGVmYXVsdGVkQXJyYXlPZignYnV0dG9ucycsIFtdLCBjaG9vc2UkMSgndHlwZScsIHNjaGVtYVdpdGhvdXRHcm91cEJ1dHRvbikpXG4gICAgXTtcbiAgICBjb25zdCB2aWV3QnV0dG9uU2NoZW1hID0gY2hvb3NlJDEoJ3R5cGUnLCB7XG4gICAgICAuLi5zY2hlbWFXaXRob3V0R3JvdXBCdXR0b24sXG4gICAgICBncm91cDogZ3JvdXBGaWVsZHNcbiAgICB9KTtcblxuICAgIGNvbnN0IHZpZXdTY2hlbWEgPSBvYmpPZihbXG4gICAgICBkZWZhdWx0ZWRBcnJheU9mKCdidXR0b25zJywgW10sIHZpZXdCdXR0b25TY2hlbWEpLFxuICAgICAgcmVxdWlyZWRGdW5jdGlvbignb25TaG93JyksXG4gICAgICByZXF1aXJlZEZ1bmN0aW9uKCdvbkhpZGUnKVxuICAgIF0pO1xuICAgIGNvbnN0IGNyZWF0ZVZpZXcgPSBzcGVjID0+IGFzUmF3KCd2aWV3Jywgdmlld1NjaGVtYSwgc3BlYyk7XG5cbiAgICBjb25zdCByZW5kZXJCdXR0b24gPSAoc3BlYywgcHJvdmlkZXJzKSA9PiB7XG4gICAgICB2YXIgX2EsIF9iO1xuICAgICAgY29uc3QgaXNUb2dnbGVCdXR0b24gPSBzcGVjLnR5cGUgPT09ICd0b2dnbGVidXR0b24nO1xuICAgICAgY29uc3Qgb3B0TWVtSWNvbiA9IHNwZWMuaWNvbi5tYXAobWVtSWNvbiA9PiByZW5kZXJSZXBsYWNlYWJsZUljb25Gcm9tUGFjayhtZW1JY29uLCBwcm92aWRlcnMuaWNvbnMpKS5tYXAocmVjb3JkKTtcbiAgICAgIGNvbnN0IGdldEFjdGlvbiA9ICgpID0+IGNvbXAgPT4ge1xuICAgICAgICBjb25zdCBzZXRJY29uID0gbmV3SWNvbiA9PiB7XG4gICAgICAgICAgb3B0TWVtSWNvbi5tYXAobWVtSWNvbiA9PiBtZW1JY29uLmdldE9wdChjb21wKS5lYWNoKGRpc3BsYXlJY29uID0+IHtcbiAgICAgICAgICAgIFJlcGxhY2luZy5zZXQoZGlzcGxheUljb24sIFtyZW5kZXJSZXBsYWNlYWJsZUljb25Gcm9tUGFjayhuZXdJY29uLCBwcm92aWRlcnMuaWNvbnMpXSk7XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzZXRBY3RpdmUgPSBzdGF0ZSA9PiB7XG4gICAgICAgICAgY29uc3QgZWxtID0gY29tcC5lbGVtZW50O1xuICAgICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgICAgYWRkJDIoZWxtLCAndG94LWJ1dHRvbi0tZW5hYmxlZCcpO1xuICAgICAgICAgICAgc2V0JDkoZWxtLCAnYXJpYS1wcmVzc2VkJywgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbW92ZSQyKGVsbSwgJ3RveC1idXR0b24tLWVuYWJsZWQnKTtcbiAgICAgICAgICAgIHJlbW92ZSQ3KGVsbSwgJ2FyaWEtcHJlc3NlZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaXNBY3RpdmUgPSAoKSA9PiBoYXMoY29tcC5lbGVtZW50LCAndG94LWJ1dHRvbi0tZW5hYmxlZCcpO1xuICAgICAgICBpZiAoaXNUb2dnbGVCdXR0b24pIHtcbiAgICAgICAgICByZXR1cm4gc3BlYy5vbkFjdGlvbih7XG4gICAgICAgICAgICBzZXRJY29uLFxuICAgICAgICAgICAgc2V0QWN0aXZlLFxuICAgICAgICAgICAgaXNBY3RpdmVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3BlYy50eXBlID09PSAnYnV0dG9uJykge1xuICAgICAgICAgIHJldHVybiBzcGVjLm9uQWN0aW9uKHsgc2V0SWNvbiB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFjdGlvbiA9IGdldEFjdGlvbigpO1xuICAgICAgY29uc3QgYnV0dG9uU3BlYyA9IHtcbiAgICAgICAgLi4uc3BlYyxcbiAgICAgICAgbmFtZTogaXNUb2dnbGVCdXR0b24gPyBzcGVjLnRleHQuZ2V0T3Ioc3BlYy5pY29uLmdldE9yKCcnKSkgOiAoX2EgPSBzcGVjLnRleHQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHNwZWMuaWNvbi5nZXRPcignJyksXG4gICAgICAgIHByaW1hcnk6IHNwZWMuYnV0dG9uVHlwZSA9PT0gJ3ByaW1hcnknLFxuICAgICAgICBidXR0b25UeXBlOiBPcHRpb25hbC5mcm9tKHNwZWMuYnV0dG9uVHlwZSksXG4gICAgICAgIHRvb2x0aXA6IHNwZWMudG9vbHRpcCxcbiAgICAgICAgaWNvbjogc3BlYy5pY29uLFxuICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICBib3JkZXJsZXNzOiBzcGVjLmJvcmRlcmxlc3NcbiAgICAgIH07XG4gICAgICBjb25zdCBidXR0b25UeXBlQ2xhc3NlcyA9IGNhbGN1bGF0ZUNsYXNzZXNGcm9tQnV0dG9uVHlwZSgoX2IgPSBzcGVjLmJ1dHRvblR5cGUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICdzZWNvbmRhcnknKTtcbiAgICAgIGNvbnN0IG9wdFRyYW5zbGF0ZWRUZXh0ID0gaXNUb2dnbGVCdXR0b24gPyBzcGVjLnRleHQubWFwKHByb3ZpZGVycy50cmFuc2xhdGUpIDogT3B0aW9uYWwuc29tZShwcm92aWRlcnMudHJhbnNsYXRlKHNwZWMudGV4dCkpO1xuICAgICAgY29uc3Qgb3B0VHJhbnNsYXRlZFRleHRDb21wb25lZCA9IG9wdFRyYW5zbGF0ZWRUZXh0Lm1hcCh0ZXh0JDIpO1xuICAgICAgY29uc3QgdG9vbHRpcEF0dHJpYnV0ZXMgPSBidXR0b25TcGVjLnRvb2x0aXAub3Iob3B0VHJhbnNsYXRlZFRleHQpLm1hcCh0b29sdGlwID0+ICh7XG4gICAgICAgICdhcmlhLWxhYmVsJzogcHJvdmlkZXJzLnRyYW5zbGF0ZSh0b29sdGlwKSxcbiAgICAgICAgJ3RpdGxlJzogcHJvdmlkZXJzLnRyYW5zbGF0ZSh0b29sdGlwKVxuICAgICAgfSkpLmdldE9yKHt9KTtcbiAgICAgIGNvbnN0IG9wdEljb25TcGVjID0gb3B0TWVtSWNvbi5tYXAobWVtSWNvbiA9PiBtZW1JY29uLmFzU3BlYygpKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb21wb25lbnRSZW5kZXJQaXBlbGluZShbXG4gICAgICAgIG9wdEljb25TcGVjLFxuICAgICAgICBvcHRUcmFuc2xhdGVkVGV4dENvbXBvbmVkXG4gICAgICBdKTtcbiAgICAgIGNvbnN0IGhhc0ljb25BbmRUZXh0ID0gc3BlYy5pY29uLmlzU29tZSgpICYmIG9wdFRyYW5zbGF0ZWRUZXh0Q29tcG9uZWQuaXNTb21lKCk7XG4gICAgICBjb25zdCBkb20gPSB7XG4gICAgICAgIHRhZzogJ2J1dHRvbicsXG4gICAgICAgIGNsYXNzZXM6IGJ1dHRvblR5cGVDbGFzc2VzLmNvbmNhdCguLi5zcGVjLmljb24uaXNTb21lKCkgJiYgIWhhc0ljb25BbmRUZXh0ID8gWyd0b3gtYnV0dG9uLS1pY29uJ10gOiBbXSkuY29uY2F0KC4uLmhhc0ljb25BbmRUZXh0ID8gWyd0b3gtYnV0dG9uLS1pY29uLWFuZC10ZXh0J10gOiBbXSkuY29uY2F0KC4uLnNwZWMuYm9yZGVybGVzcyA/IFsndG94LWJ1dHRvbi0tbmFrZWQnXSA6IFtdKS5jb25jYXQoLi4uc3BlYy50eXBlID09PSAndG9nZ2xlYnV0dG9uJyAmJiBzcGVjLmFjdGl2ZSA/IFsndG94LWJ1dHRvbi0tZW5hYmxlZCddIDogW10pLFxuICAgICAgICBhdHRyaWJ1dGVzOiB0b29sdGlwQXR0cmlidXRlc1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4dHJhQmVoYXZpb3VycyA9IFtdO1xuICAgICAgY29uc3QgaWNvbkJ1dHRvblNwZWMgPSByZW5kZXJDb21tb25TcGVjKGJ1dHRvblNwZWMsIE9wdGlvbmFsLnNvbWUoYWN0aW9uKSwgZXh0cmFCZWhhdmlvdXJzLCBkb20sIGNvbXBvbmVudHMsIHByb3ZpZGVycyk7XG4gICAgICByZXR1cm4gQnV0dG9uLnNrZXRjaChpY29uQnV0dG9uU3BlYyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlclZpZXdCdXR0b24gPSAoc3BlYywgcHJvdmlkZXJzKSA9PiByZW5kZXJCdXR0b24oc3BlYywgcHJvdmlkZXJzKTtcbiAgICBjb25zdCByZW5kZXJCdXR0b25zR3JvdXAgPSAoc3BlYywgcHJvdmlkZXJzKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXZpZXdfX3Rvb2xiYXJfX2dyb3VwJ11cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogbWFwJDIoc3BlYy5idXR0b25zLCBidXR0b24gPT4gcmVuZGVyVmlld0J1dHRvbihidXR0b24sIHByb3ZpZGVycykpXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZGV2aWNlRGV0ZWN0aW9uID0gZGV0ZWN0JDIoKS5kZXZpY2VUeXBlO1xuICAgIGNvbnN0IGlzUGhvbmUgPSBkZXZpY2VEZXRlY3Rpb24uaXNQaG9uZSgpO1xuICAgIGNvbnN0IGlzVGFibGV0ID0gZGV2aWNlRGV0ZWN0aW9uLmlzVGFibGV0KCk7XG4gICAgY29uc3QgcmVuZGVyVmlld0hlYWRlciA9IHNwZWMgPT4ge1xuICAgICAgbGV0IGhhc0dyb3VwcyA9IGZhbHNlO1xuICAgICAgY29uc3QgZW5kQnV0dG9ucyA9IG1hcCQyKHNwZWMuYnV0dG9ucywgYnRuc3BlYyA9PiB7XG4gICAgICAgIGlmIChidG5zcGVjLnR5cGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgICBoYXNHcm91cHMgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiByZW5kZXJCdXR0b25zR3JvdXAoYnRuc3BlYywgc3BlYy5wcm92aWRlcnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiByZW5kZXJWaWV3QnV0dG9uKGJ0bnNwZWMsIHNwZWMucHJvdmlkZXJzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1aWQ6IHNwZWMudWlkLFxuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAgICFoYXNHcm91cHMgPyAndG94LXZpZXdfX2hlYWRlcicgOiAndG94LXZpZXdfX3Rvb2xiYXInLFxuICAgICAgICAgICAgLi4uaXNQaG9uZSB8fCBpc1RhYmxldCA/IFtcbiAgICAgICAgICAgICAgJ3RveC12aWV3LS1tb2JpbGUnLFxuICAgICAgICAgICAgICAndG94LXZpZXctLXNjcm9sbGluZydcbiAgICAgICAgICAgIF0gOiBbXVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIEZvY3VzaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBtb2RlOiAnZmxvdycsXG4gICAgICAgICAgICBzZWxlY3RvcjogJ2J1dHRvbiwgLnRveC1idXR0b24nLFxuICAgICAgICAgICAgZm9jdXNJbnNpZGU6IEZvY3VzSW5zaWRlTW9kZXMuT25FbnRlck9yU3BhY2VNb2RlXG4gICAgICAgICAgfSlcbiAgICAgICAgXSksXG4gICAgICAgIGNvbXBvbmVudHM6IGhhc0dyb3VwcyA/IGVuZEJ1dHRvbnMgOiBbXG4gICAgICAgICAgQ29udGFpbmVyLnNrZXRjaCh7XG4gICAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgICAgY2xhc3NlczogWyd0b3gtdmlld19faGVhZGVyLXN0YXJ0J11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wb25lbnRzOiBbXVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIENvbnRhaW5lci5za2V0Y2goe1xuICAgICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LXZpZXdfX2hlYWRlci1lbmQnXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IGVuZEJ1dHRvbnNcbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyVmlld1BhbmUgPSBzcGVjID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVpZDogc3BlYy51aWQsXG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtdmlld19fcGFuZSddXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBmYWN0b3J5JDggPSAoZGV0YWlsLCBjb21wb25lbnRzLCBfc3BlYywgX2V4dGVybmFscykgPT4ge1xuICAgICAgY29uc3QgYXBpcyA9IHtcbiAgICAgICAgZ2V0UGFuZTogY29tcCA9PiBwYXJ0cyRhLmdldFBhcnQoY29tcCwgZGV0YWlsLCAncGFuZScpLFxuICAgICAgICBnZXRPblNob3c6IF9jb21wID0+IGRldGFpbC52aWV3Q29uZmlnLm9uU2hvdyxcbiAgICAgICAgZ2V0T25IaWRlOiBfY29tcCA9PiBkZXRhaWwudmlld0NvbmZpZy5vbkhpZGVcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1aWQ6IGRldGFpbC51aWQsXG4gICAgICAgIGRvbTogZGV0YWlsLmRvbSxcbiAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgYXBpc1xuICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBWaWV3ID0gY29tcG9zaXRlKHtcbiAgICAgIG5hbWU6ICdzaWx2ZXIuVmlldycsXG4gICAgICBjb25maWdGaWVsZHM6IFtyZXF1aXJlZCQxKCd2aWV3Q29uZmlnJyldLFxuICAgICAgcGFydEZpZWxkczogW1xuICAgICAgICBvcHRpb25hbCh7XG4gICAgICAgICAgZmFjdG9yeTogeyBza2V0Y2g6IHJlbmRlclZpZXdIZWFkZXIgfSxcbiAgICAgICAgICBzY2hlbWE6IFtcbiAgICAgICAgICAgIHJlcXVpcmVkJDEoJ2J1dHRvbnMnKSxcbiAgICAgICAgICAgIHJlcXVpcmVkJDEoJ3Byb3ZpZGVycycpXG4gICAgICAgICAgXSxcbiAgICAgICAgICBuYW1lOiAnaGVhZGVyJ1xuICAgICAgICB9KSxcbiAgICAgICAgb3B0aW9uYWwoe1xuICAgICAgICAgIGZhY3Rvcnk6IHsgc2tldGNoOiByZW5kZXJWaWV3UGFuZSB9LFxuICAgICAgICAgIHNjaGVtYTogW10sXG4gICAgICAgICAgbmFtZTogJ3BhbmUnXG4gICAgICAgIH0pXG4gICAgICBdLFxuICAgICAgZmFjdG9yeTogZmFjdG9yeSQ4LFxuICAgICAgYXBpczoge1xuICAgICAgICBnZXRQYW5lOiAoYXBpcywgY29tcCkgPT4gYXBpcy5nZXRQYW5lKGNvbXApLFxuICAgICAgICBnZXRPblNob3c6IChhcGlzLCBjb21wKSA9PiBhcGlzLmdldE9uU2hvdyhjb21wKSxcbiAgICAgICAgZ2V0T25IaWRlOiAoYXBpcywgY29tcCkgPT4gYXBpcy5nZXRPbkhpZGUoY29tcClcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IG1ha2VWaWV3cyA9IChwYXJ0cywgdmlld0NvbmZpZ3MsIHByb3ZpZGVycykgPT4ge1xuICAgICAgcmV0dXJuIG1hcFRvQXJyYXkodmlld0NvbmZpZ3MsIChjb25maWcsIG5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxWaWV3Q29uZmlnID0gZ2V0T3JEaWUoY3JlYXRlVmlldyhjb25maWcpKTtcbiAgICAgICAgcmV0dXJuIHBhcnRzLnNsb3QobmFtZSwgVmlldy5za2V0Y2goe1xuICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LXZpZXcnXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdmlld0NvbmZpZzogaW50ZXJuYWxWaWV3Q29uZmlnLFxuICAgICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICAgIC4uLmludGVybmFsVmlld0NvbmZpZy5idXR0b25zLmxlbmd0aCA+IDAgPyBbVmlldy5wYXJ0cy5oZWFkZXIoe1xuICAgICAgICAgICAgICAgIGJ1dHRvbnM6IGludGVybmFsVmlld0NvbmZpZy5idXR0b25zLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyc1xuICAgICAgICAgICAgICB9KV0gOiBbXSxcbiAgICAgICAgICAgIFZpZXcucGFydHMucGFuZSh7fSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbWFrZVNsb3RDb250YWluZXIgPSAodmlld0NvbmZpZ3MsIHByb3ZpZGVycykgPT4gU2xvdENvbnRhaW5lci5za2V0Y2gocGFydHMgPT4gKHtcbiAgICAgIGRvbToge1xuICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICBjbGFzc2VzOiBbJ3RveC12aWV3LXdyYXBfX3Nsb3QtY29udGFpbmVyJ11cbiAgICAgIH0sXG4gICAgICBjb21wb25lbnRzOiBtYWtlVmlld3MocGFydHMsIHZpZXdDb25maWdzLCBwcm92aWRlcnMpLFxuICAgICAgc2xvdEJlaGF2aW91cnM6IFNpbXBsZUJlaGF2aW91cnMudW5uYW1lZEV2ZW50cyhbcnVuT25BdHRhY2hlZChzbG90Q29udGFpbmVyID0+IFNsb3RDb250YWluZXIuaGlkZUFsbFNsb3RzKHNsb3RDb250YWluZXIpKV0pXG4gICAgfSkpO1xuICAgIGNvbnN0IGdldEN1cnJlbnROYW1lID0gc2xvdENvbnRhaW5lciA9PiB7XG4gICAgICByZXR1cm4gZmluZCQ1KFNsb3RDb250YWluZXIuZ2V0U2xvdE5hbWVzKHNsb3RDb250YWluZXIpLCBuYW1lID0+IFNsb3RDb250YWluZXIuaXNTaG93aW5nKHNsb3RDb250YWluZXIsIG5hbWUpKTtcbiAgICB9O1xuICAgIGNvbnN0IGhpZGVDb250YWluZXIgPSBjb21wID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb21wLmVsZW1lbnQ7XG4gICAgICBzZXQkOChlbGVtZW50LCAnZGlzcGxheScsICdub25lJyk7XG4gICAgICBzZXQkOShlbGVtZW50LCAnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgIH07XG4gICAgY29uc3Qgc2hvd0NvbnRhaW5lciA9IGNvbXAgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGNvbXAuZWxlbWVudDtcbiAgICAgIHJlbW92ZSQ2KGVsZW1lbnQsICdkaXNwbGF5Jyk7XG4gICAgICByZW1vdmUkNyhlbGVtZW50LCAnYXJpYS1oaWRkZW4nKTtcbiAgICB9O1xuICAgIGNvbnN0IG1ha2VWaWV3SW5zdGFuY2VBcGkgPSBzbG90ID0+ICh7IGdldENvbnRhaW5lcjogY29uc3RhbnQkMShzbG90KSB9KTtcbiAgICBjb25zdCBydW5PblBhbmVXaXRoSW5zdGFuY2VBcGkgPSAoc2xvdENvbnRhaW5lciwgbmFtZSwgZ2V0KSA9PiB7XG4gICAgICBTbG90Q29udGFpbmVyLmdldFNsb3Qoc2xvdENvbnRhaW5lciwgbmFtZSkuZWFjaCh2aWV3ID0+IHtcbiAgICAgICAgVmlldy5nZXRQYW5lKHZpZXcpLmVhY2gocGFuZSA9PiB7XG4gICAgICAgICAgY29uc3Qgb25DYWxsYmFjayA9IGdldCh2aWV3KTtcbiAgICAgICAgICBvbkNhbGxiYWNrKG1ha2VWaWV3SW5zdGFuY2VBcGkocGFuZS5lbGVtZW50LmRvbSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcnVuT25TaG93ID0gKHNsb3RDb250YWluZXIsIG5hbWUpID0+IHJ1bk9uUGFuZVdpdGhJbnN0YW5jZUFwaShzbG90Q29udGFpbmVyLCBuYW1lLCBWaWV3LmdldE9uU2hvdyk7XG4gICAgY29uc3QgcnVuT25IaWRlID0gKHNsb3RDb250YWluZXIsIG5hbWUpID0+IHJ1bk9uUGFuZVdpdGhJbnN0YW5jZUFwaShzbG90Q29udGFpbmVyLCBuYW1lLCBWaWV3LmdldE9uSGlkZSk7XG4gICAgY29uc3QgZmFjdG9yeSQ3ID0gKGRldGFpbCwgc3BlYykgPT4ge1xuICAgICAgY29uc3Qgc2V0Vmlld3MgPSAoY29tcCwgdmlld0NvbmZpZ3MpID0+IHtcbiAgICAgICAgUmVwbGFjaW5nLnNldChjb21wLCBbbWFrZVNsb3RDb250YWluZXIodmlld0NvbmZpZ3MsIHNwZWMuYmFja3N0YWdlLnNoYXJlZC5wcm92aWRlcnMpXSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgd2hpY2hWaWV3ID0gY29tcCA9PiB7XG4gICAgICAgIHJldHVybiBDb21wb3NpbmcuZ2V0Q3VycmVudChjb21wKS5iaW5kKGdldEN1cnJlbnROYW1lKTtcbiAgICAgIH07XG4gICAgICBjb25zdCB0b2dnbGVWaWV3ID0gKGNvbXAsIHNob3dNYWluVmlldywgaGlkZU1haW5WaWV3LCBuYW1lKSA9PiB7XG4gICAgICAgIHJldHVybiBDb21wb3NpbmcuZ2V0Q3VycmVudChjb21wKS5leGlzdHMoc2xvdENvbnRhaW5lciA9PiB7XG4gICAgICAgICAgY29uc3Qgb3B0Q3VycmVudFNsb3ROYW1lID0gZ2V0Q3VycmVudE5hbWUoc2xvdENvbnRhaW5lcik7XG4gICAgICAgICAgY29uc3QgaXNUb2dnbGluZ0N1cnJlbnRWaWV3ID0gb3B0Q3VycmVudFNsb3ROYW1lLmV4aXN0cyhjdXJyZW50ID0+IG5hbWUgPT09IGN1cnJlbnQpO1xuICAgICAgICAgIGNvbnN0IGV4aXN0cyA9IFNsb3RDb250YWluZXIuZ2V0U2xvdChzbG90Q29udGFpbmVyLCBuYW1lKS5pc1NvbWUoKTtcbiAgICAgICAgICBpZiAoZXhpc3RzKSB7XG4gICAgICAgICAgICBTbG90Q29udGFpbmVyLmhpZGVBbGxTbG90cyhzbG90Q29udGFpbmVyKTtcbiAgICAgICAgICAgIGlmICghaXNUb2dnbGluZ0N1cnJlbnRWaWV3KSB7XG4gICAgICAgICAgICAgIGhpZGVNYWluVmlldygpO1xuICAgICAgICAgICAgICBzaG93Q29udGFpbmVyKGNvbXApO1xuICAgICAgICAgICAgICBTbG90Q29udGFpbmVyLnNob3dTbG90KHNsb3RDb250YWluZXIsIG5hbWUpO1xuICAgICAgICAgICAgICBydW5PblNob3coc2xvdENvbnRhaW5lciwgbmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBoaWRlQ29udGFpbmVyKGNvbXApO1xuICAgICAgICAgICAgICBzaG93TWFpblZpZXcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdEN1cnJlbnRTbG90TmFtZS5lYWNoKHByZXZOYW1lID0+IHJ1bk9uSGlkZShzbG90Q29udGFpbmVyLCBwcmV2TmFtZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZXhpc3RzO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBhcGlzID0ge1xuICAgICAgICBzZXRWaWV3cyxcbiAgICAgICAgd2hpY2hWaWV3LFxuICAgICAgICB0b2dnbGVWaWV3XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXZpZXctd3JhcCddLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgJ2FyaWEtaGlkZGVuJzogJ3RydWUnIH0sXG4gICAgICAgICAgc3R5bGVzOiB7IGRpc3BsYXk6ICdub25lJyB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtdLFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgUmVwbGFjaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgQ29tcG9zaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBmaW5kOiBjb21wID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBSZXBsYWNpbmcuY29udGVudHMoY29tcCk7XG4gICAgICAgICAgICAgIHJldHVybiBoZWFkKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdKSxcbiAgICAgICAgYXBpc1xuICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBWaWV3V3JhcHBlciA9IHNpbmdsZSh7XG4gICAgICBmYWN0b3J5OiBmYWN0b3J5JDcsXG4gICAgICBuYW1lOiAnc2lsdmVyLlZpZXdXcmFwcGVyJyxcbiAgICAgIGNvbmZpZ0ZpZWxkczogW3JlcXVpcmVkJDEoJ2JhY2tzdGFnZScpXSxcbiAgICAgIGFwaXM6IHtcbiAgICAgICAgc2V0Vmlld3M6IChhcGlzLCBjb21wLCB2aWV3cykgPT4gYXBpcy5zZXRWaWV3cyhjb21wLCB2aWV3cyksXG4gICAgICAgIHRvZ2dsZVZpZXc6IChhcGlzLCBjb21wLCBvdXRlckNvbnRhaW5lciwgZWRpdG9yQ29udCwgbmFtZSkgPT4gYXBpcy50b2dnbGVWaWV3KGNvbXAsIG91dGVyQ29udGFpbmVyLCBlZGl0b3JDb250LCBuYW1lKSxcbiAgICAgICAgd2hpY2hWaWV3OiAoYXBpcywgY29tcCkgPT4gYXBpcy53aGljaFZpZXcoY29tcClcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGZhY3RvcnkkNiA9IChkZXRhaWwsIGNvbXBvbmVudHMsIF9zcGVjKSA9PiB7XG4gICAgICBsZXQgdG9vbGJhckRyYXdlck9wZW5TdGF0ZSA9IGZhbHNlO1xuICAgICAgY29uc3QgYXBpcyA9IHtcbiAgICAgICAgZ2V0U29ja2V0OiBjb21wID0+IHtcbiAgICAgICAgICByZXR1cm4gcGFydHMkYS5nZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ3NvY2tldCcpO1xuICAgICAgICB9LFxuICAgICAgICBzZXRTaWRlYmFyOiAoY29tcCwgcGFuZWxDb25maWdzLCBzaG93U2lkZWJhcikgPT4ge1xuICAgICAgICAgIHBhcnRzJGEuZ2V0UGFydChjb21wLCBkZXRhaWwsICdzaWRlYmFyJykuZWFjaChzaWRlYmFyID0+IHNldFNpZGViYXIoc2lkZWJhciwgcGFuZWxDb25maWdzLCBzaG93U2lkZWJhcikpO1xuICAgICAgICB9LFxuICAgICAgICB0b2dnbGVTaWRlYmFyOiAoY29tcCwgbmFtZSkgPT4ge1xuICAgICAgICAgIHBhcnRzJGEuZ2V0UGFydChjb21wLCBkZXRhaWwsICdzaWRlYmFyJykuZWFjaChzaWRlYmFyID0+IHRvZ2dsZVNpZGViYXIoc2lkZWJhciwgbmFtZSkpO1xuICAgICAgICB9LFxuICAgICAgICB3aGljaFNpZGViYXI6IGNvbXAgPT4ge1xuICAgICAgICAgIHJldHVybiBwYXJ0cyRhLmdldFBhcnQoY29tcCwgZGV0YWlsLCAnc2lkZWJhcicpLmJpbmQod2hpY2hTaWRlYmFyKS5nZXRPck51bGwoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0SGVhZGVyOiBjb21wID0+IHtcbiAgICAgICAgICByZXR1cm4gcGFydHMkYS5nZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ2hlYWRlcicpO1xuICAgICAgICB9LFxuICAgICAgICBnZXRUb29sYmFyOiBjb21wID0+IHtcbiAgICAgICAgICByZXR1cm4gcGFydHMkYS5nZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ3Rvb2xiYXInKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0VG9vbGJhcjogKGNvbXAsIGdyb3VwcykgPT4ge1xuICAgICAgICAgIHBhcnRzJGEuZ2V0UGFydChjb21wLCBkZXRhaWwsICd0b29sYmFyJykuZWFjaCh0b29sYmFyID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcmVkR3JvdXBzID0gbWFwJDIoZ3JvdXBzLCByZW5kZXJUb29sYmFyR3JvdXApO1xuICAgICAgICAgICAgdG9vbGJhci5nZXRBcGlzKCkuc2V0R3JvdXBzKHRvb2xiYXIsIHJlbmRlcmVkR3JvdXBzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0VG9vbGJhcnM6IChjb21wLCB0b29sYmFycykgPT4ge1xuICAgICAgICAgIHBhcnRzJGEuZ2V0UGFydChjb21wLCBkZXRhaWwsICdtdWx0aXBsZS10b29sYmFyJykuZWFjaChtVG9vbGJhciA9PiB7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJlZFRvb2xiYXJzID0gbWFwJDIodG9vbGJhcnMsIGcgPT4gbWFwJDIoZywgcmVuZGVyVG9vbGJhckdyb3VwKSk7XG4gICAgICAgICAgICBDdXN0b21MaXN0LnNldEl0ZW1zKG1Ub29sYmFyLCByZW5kZXJlZFRvb2xiYXJzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVmcmVzaFRvb2xiYXI6IGNvbXAgPT4ge1xuICAgICAgICAgIGNvbnN0IHRvb2xiYXIgPSBwYXJ0cyRhLmdldFBhcnQoY29tcCwgZGV0YWlsLCAndG9vbGJhcicpO1xuICAgICAgICAgIHRvb2xiYXIuZWFjaCh0b29sYmFyID0+IHRvb2xiYXIuZ2V0QXBpcygpLnJlZnJlc2godG9vbGJhcikpO1xuICAgICAgICB9LFxuICAgICAgICB0b2dnbGVUb29sYmFyRHJhd2VyOiBjb21wID0+IHtcbiAgICAgICAgICBwYXJ0cyRhLmdldFBhcnQoY29tcCwgZGV0YWlsLCAndG9vbGJhcicpLmVhY2godG9vbGJhciA9PiB7XG4gICAgICAgICAgICBtYXBGcm9tKHRvb2xiYXIuZ2V0QXBpcygpLnRvZ2dsZSwgdG9nZ2xlID0+IHRvZ2dsZSh0b29sYmFyKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRvZ2dsZVRvb2xiYXJEcmF3ZXJXaXRob3V0Rm9jdXNpbmc6IGNvbXAgPT4ge1xuICAgICAgICAgIHBhcnRzJGEuZ2V0UGFydChjb21wLCBkZXRhaWwsICd0b29sYmFyJykuZWFjaCh0b29sYmFyID0+IHtcbiAgICAgICAgICAgIG1hcEZyb20odG9vbGJhci5nZXRBcGlzKCkudG9nZ2xlV2l0aG91dEZvY3VzaW5nLCB0b2dnbGVXaXRob3V0Rm9jdXNpbmcgPT4gdG9nZ2xlV2l0aG91dEZvY3VzaW5nKHRvb2xiYXIpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNUb29sYmFyRHJhd2VyVG9nZ2xlZDogY29tcCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBhcnRzJGEuZ2V0UGFydChjb21wLCBkZXRhaWwsICd0b29sYmFyJykuYmluZCh0b29sYmFyID0+IE9wdGlvbmFsLmZyb20odG9vbGJhci5nZXRBcGlzKCkuaXNPcGVuKS5tYXAoaXNPcGVuID0+IGlzT3Blbih0b29sYmFyKSkpLmdldE9yKGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0VGhyb2JiZXI6IGNvbXAgPT4ge1xuICAgICAgICAgIHJldHVybiBwYXJ0cyRhLmdldFBhcnQoY29tcCwgZGV0YWlsLCAndGhyb2JiZXInKTtcbiAgICAgICAgfSxcbiAgICAgICAgZm9jdXNUb29sYmFyOiBjb21wID0+IHtcbiAgICAgICAgICBjb25zdCBvcHRUb29sYmFyID0gcGFydHMkYS5nZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ3Rvb2xiYXInKS5vclRodW5rKCgpID0+IHBhcnRzJGEuZ2V0UGFydChjb21wLCBkZXRhaWwsICdtdWx0aXBsZS10b29sYmFyJykpO1xuICAgICAgICAgIG9wdFRvb2xiYXIuZWFjaCh0b29sYmFyID0+IHtcbiAgICAgICAgICAgIEtleWluZy5mb2N1c0luKHRvb2xiYXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBzZXRNZW51YmFyOiAoY29tcCwgbWVudXMpID0+IHtcbiAgICAgICAgICBwYXJ0cyRhLmdldFBhcnQoY29tcCwgZGV0YWlsLCAnbWVudWJhcicpLmVhY2gobWVudWJhciA9PiB7XG4gICAgICAgICAgICBTaWx2ZXJNZW51YmFyLnNldE1lbnVzKG1lbnViYXIsIG1lbnVzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZm9jdXNNZW51YmFyOiBjb21wID0+IHtcbiAgICAgICAgICBwYXJ0cyRhLmdldFBhcnQoY29tcCwgZGV0YWlsLCAnbWVudWJhcicpLmVhY2gobWVudWJhciA9PiB7XG4gICAgICAgICAgICBTaWx2ZXJNZW51YmFyLmZvY3VzKG1lbnViYXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBzZXRWaWV3czogKGNvbXAsIHZpZXdDb25maWdzKSA9PiB7XG4gICAgICAgICAgcGFydHMkYS5nZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ3ZpZXdXcmFwcGVyJykuZWFjaCh3cmFwcGVyID0+IHtcbiAgICAgICAgICAgIFZpZXdXcmFwcGVyLnNldFZpZXdzKHdyYXBwZXIsIHZpZXdDb25maWdzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgdG9nZ2xlVmlldzogKGNvbXAsIG5hbWUpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGFydHMkYS5nZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ3ZpZXdXcmFwcGVyJykuZXhpc3RzKHdyYXBwZXIgPT4gVmlld1dyYXBwZXIudG9nZ2xlVmlldyh3cmFwcGVyLCAoKSA9PiBhcGlzLnNob3dNYWluVmlldyhjb21wKSwgKCkgPT4gYXBpcy5oaWRlTWFpblZpZXcoY29tcCksIG5hbWUpKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2hpY2hWaWV3OiBjb21wID0+IHtcbiAgICAgICAgICByZXR1cm4gcGFydHMkYS5nZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ3ZpZXdXcmFwcGVyJykuYmluZChWaWV3V3JhcHBlci53aGljaFZpZXcpLmdldE9yTnVsbCgpO1xuICAgICAgICB9LFxuICAgICAgICBoaWRlTWFpblZpZXc6IGNvbXAgPT4ge1xuICAgICAgICAgIHRvb2xiYXJEcmF3ZXJPcGVuU3RhdGUgPSBhcGlzLmlzVG9vbGJhckRyYXdlclRvZ2dsZWQoY29tcCk7XG4gICAgICAgICAgaWYgKHRvb2xiYXJEcmF3ZXJPcGVuU3RhdGUpIHtcbiAgICAgICAgICAgIGFwaXMudG9nZ2xlVG9vbGJhckRyYXdlcihjb21wKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFydHMkYS5nZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ2VkaXRvckNvbnRhaW5lcicpLmVhY2goZWRpdG9yQ29udGFpbmVyID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBlZGl0b3JDb250YWluZXIuZWxlbWVudDtcbiAgICAgICAgICAgIHNldCQ4KGVsZW1lbnQsICdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAgICAgICAgIHNldCQ5KGVsZW1lbnQsICdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNob3dNYWluVmlldzogY29tcCA9PiB7XG4gICAgICAgICAgaWYgKHRvb2xiYXJEcmF3ZXJPcGVuU3RhdGUpIHtcbiAgICAgICAgICAgIGFwaXMudG9nZ2xlVG9vbGJhckRyYXdlcihjb21wKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFydHMkYS5nZXRQYXJ0KGNvbXAsIGRldGFpbCwgJ2VkaXRvckNvbnRhaW5lcicpLmVhY2goZWRpdG9yQ29udGFpbmVyID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBlZGl0b3JDb250YWluZXIuZWxlbWVudDtcbiAgICAgICAgICAgIHJlbW92ZSQ2KGVsZW1lbnQsICdkaXNwbGF5Jyk7XG4gICAgICAgICAgICByZW1vdmUkNyhlbGVtZW50LCAnYXJpYS1oaWRkZW4nKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVpZDogZGV0YWlsLnVpZCxcbiAgICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICBhcGlzLFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXRhaWwuYmVoYXZpb3Vyc1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHBhcnRNZW51YmFyID0gcGFydFR5cGUub3B0aW9uYWwoe1xuICAgICAgZmFjdG9yeTogU2lsdmVyTWVudWJhcixcbiAgICAgIG5hbWU6ICdtZW51YmFyJyxcbiAgICAgIHNjaGVtYTogW3JlcXVpcmVkJDEoJ2JhY2tzdGFnZScpXVxuICAgIH0pO1xuICAgIGNvbnN0IHRvb2xiYXJGYWN0b3J5ID0gc3BlYyA9PiB7XG4gICAgICBpZiAoc3BlYy50eXBlID09PSBUb29sYmFyTW9kZSQxLnNsaWRpbmcpIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlclNsaWRpbmdNb3JlVG9vbGJhcjtcbiAgICAgIH0gZWxzZSBpZiAoc3BlYy50eXBlID09PSBUb29sYmFyTW9kZSQxLmZsb2F0aW5nKSB7XG4gICAgICAgIHJldHVybiByZW5kZXJGbG9hdGluZ01vcmVUb29sYmFyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlclRvb2xiYXI7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBwYXJ0TXVsdGlwbGVUb29sYmFyID0gcGFydFR5cGUub3B0aW9uYWwoe1xuICAgICAgZmFjdG9yeToge1xuICAgICAgICBza2V0Y2g6IHNwZWMgPT4gQ3VzdG9tTGlzdC5za2V0Y2goe1xuICAgICAgICAgIHVpZDogc3BlYy51aWQsXG4gICAgICAgICAgZG9tOiBzcGVjLmRvbSxcbiAgICAgICAgICBsaXN0QmVoYXZpb3VyczogZGVyaXZlJDEoW0tleWluZy5jb25maWcoe1xuICAgICAgICAgICAgICBtb2RlOiAnYWN5Y2xpYycsXG4gICAgICAgICAgICAgIHNlbGVjdG9yOiAnLnRveC10b29sYmFyJ1xuICAgICAgICAgICAgfSldKSxcbiAgICAgICAgICBtYWtlSXRlbTogKCkgPT4gcmVuZGVyVG9vbGJhcih7XG4gICAgICAgICAgICB0eXBlOiBzcGVjLnR5cGUsXG4gICAgICAgICAgICB1aWQ6IGdlbmVyYXRlJDYoJ211bHRpcGxlLXRvb2xiYXItaXRlbScpLFxuICAgICAgICAgICAgY3ljbGljS2V5aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGluaXRHcm91cHM6IFtdLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiBzcGVjLnByb3ZpZGVycyxcbiAgICAgICAgICAgIG9uRXNjYXBlOiAoKSA9PiB7XG4gICAgICAgICAgICAgIHNwZWMub25Fc2NhcGUoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgc2V0dXBJdGVtOiAoX21Ub29sYmFyLCB0YywgZGF0YSwgX2luZGV4KSA9PiB7XG4gICAgICAgICAgICBUb29sYmFyLnNldEdyb3Vwcyh0YywgZGF0YSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzaGVsbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIG5hbWU6ICdtdWx0aXBsZS10b29sYmFyJyxcbiAgICAgIHNjaGVtYTogW1xuICAgICAgICByZXF1aXJlZCQxKCdkb20nKSxcbiAgICAgICAgcmVxdWlyZWQkMSgnb25Fc2NhcGUnKVxuICAgICAgXVxuICAgIH0pO1xuICAgIGNvbnN0IHBhcnRUb29sYmFyID0gcGFydFR5cGUub3B0aW9uYWwoe1xuICAgICAgZmFjdG9yeToge1xuICAgICAgICBza2V0Y2g6IHNwZWMgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlbmRlcmVyID0gdG9vbGJhckZhY3Rvcnkoc3BlYyk7XG4gICAgICAgICAgY29uc3QgdG9vbGJhclNwZWMgPSB7XG4gICAgICAgICAgICB0eXBlOiBzcGVjLnR5cGUsXG4gICAgICAgICAgICB1aWQ6IHNwZWMudWlkLFxuICAgICAgICAgICAgb25Fc2NhcGU6ICgpID0+IHtcbiAgICAgICAgICAgICAgc3BlYy5vbkVzY2FwZSgpO1xuICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblRvZ2dsZWQ6IChfY29tcCwgc3RhdGUpID0+IHNwZWMub25Ub29sYmFyVG9nZ2xlZChzdGF0ZSksXG4gICAgICAgICAgICBjeWNsaWNLZXlpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaW5pdEdyb3VwczogW10sXG4gICAgICAgICAgICBnZXRTaW5rOiBzcGVjLmdldFNpbmssXG4gICAgICAgICAgICBwcm92aWRlcnM6IHNwZWMucHJvdmlkZXJzLFxuICAgICAgICAgICAgbW9yZURyYXdlckRhdGE6IHtcbiAgICAgICAgICAgICAgbGF6eVRvb2xiYXI6IHNwZWMubGF6eVRvb2xiYXIsXG4gICAgICAgICAgICAgIGxhenlNb3JlQnV0dG9uOiBzcGVjLmxhenlNb3JlQnV0dG9uLFxuICAgICAgICAgICAgICBsYXp5SGVhZGVyOiBzcGVjLmxhenlIZWFkZXJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBzcGVjLmF0dHJpYnV0ZXNcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiByZW5kZXJlcih0b29sYmFyU3BlYyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBuYW1lOiAndG9vbGJhcicsXG4gICAgICBzY2hlbWE6IFtcbiAgICAgICAgcmVxdWlyZWQkMSgnZG9tJyksXG4gICAgICAgIHJlcXVpcmVkJDEoJ29uRXNjYXBlJyksXG4gICAgICAgIHJlcXVpcmVkJDEoJ2dldFNpbmsnKVxuICAgICAgXVxuICAgIH0pO1xuICAgIGNvbnN0IHBhcnRIZWFkZXIgPSBwYXJ0VHlwZS5vcHRpb25hbCh7XG4gICAgICBmYWN0b3J5OiB7IHNrZXRjaDogcmVuZGVySGVhZGVyIH0sXG4gICAgICBuYW1lOiAnaGVhZGVyJyxcbiAgICAgIHNjaGVtYTogW3JlcXVpcmVkJDEoJ2RvbScpXVxuICAgIH0pO1xuICAgIGNvbnN0IHBhcnRQcm9tb3Rpb24gPSBwYXJ0VHlwZS5vcHRpb25hbCh7XG4gICAgICBmYWN0b3J5OiB7IHNrZXRjaDogcmVuZGVyUHJvbW90aW9uIH0sXG4gICAgICBuYW1lOiAncHJvbW90aW9uJyxcbiAgICAgIHNjaGVtYTogW3JlcXVpcmVkJDEoJ2RvbScpXVxuICAgIH0pO1xuICAgIGNvbnN0IHBhcnRTb2NrZXQgPSBwYXJ0VHlwZS5vcHRpb25hbCh7XG4gICAgICBuYW1lOiAnc29ja2V0JyxcbiAgICAgIHNjaGVtYTogW3JlcXVpcmVkJDEoJ2RvbScpXVxuICAgIH0pO1xuICAgIGNvbnN0IHBhcnRTaWRlYmFyID0gcGFydFR5cGUub3B0aW9uYWwoe1xuICAgICAgZmFjdG9yeTogeyBza2V0Y2g6IHJlbmRlclNpZGViYXIgfSxcbiAgICAgIG5hbWU6ICdzaWRlYmFyJyxcbiAgICAgIHNjaGVtYTogW3JlcXVpcmVkJDEoJ2RvbScpXVxuICAgIH0pO1xuICAgIGNvbnN0IHBhcnRUaHJvYmJlciA9IHBhcnRUeXBlLm9wdGlvbmFsKHtcbiAgICAgIGZhY3Rvcnk6IHsgc2tldGNoOiByZW5kZXJUaHJvYmJlciB9LFxuICAgICAgbmFtZTogJ3Rocm9iYmVyJyxcbiAgICAgIHNjaGVtYTogW3JlcXVpcmVkJDEoJ2RvbScpXVxuICAgIH0pO1xuICAgIGNvbnN0IHBhcnRWaWV3V3JhcHBlciA9IHBhcnRUeXBlLm9wdGlvbmFsKHtcbiAgICAgIGZhY3Rvcnk6IFZpZXdXcmFwcGVyLFxuICAgICAgbmFtZTogJ3ZpZXdXcmFwcGVyJyxcbiAgICAgIHNjaGVtYTogW3JlcXVpcmVkJDEoJ2JhY2tzdGFnZScpXVxuICAgIH0pO1xuICAgIGNvbnN0IHJlbmRlckVkaXRvckNvbnRhaW5lciA9IHNwZWMgPT4gKHtcbiAgICAgIHVpZDogc3BlYy51aWQsXG4gICAgICBkb206IHtcbiAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgY2xhc3NlczogWyd0b3gtZWRpdG9yLWNvbnRhaW5lciddXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czogc3BlYy5jb21wb25lbnRzXG4gICAgfSk7XG4gICAgY29uc3QgcGFydEVkaXRvckNvbnRhaW5lciA9IHBhcnRUeXBlLm9wdGlvbmFsKHtcbiAgICAgIGZhY3Rvcnk6IHsgc2tldGNoOiByZW5kZXJFZGl0b3JDb250YWluZXIgfSxcbiAgICAgIG5hbWU6ICdlZGl0b3JDb250YWluZXInLFxuICAgICAgc2NoZW1hOiBbXVxuICAgIH0pO1xuICAgIHZhciBPdXRlckNvbnRhaW5lciA9IGNvbXBvc2l0ZSh7XG4gICAgICBuYW1lOiAnT3V0ZXJDb250YWluZXInLFxuICAgICAgZmFjdG9yeTogZmFjdG9yeSQ2LFxuICAgICAgY29uZmlnRmllbGRzOiBbXG4gICAgICAgIHJlcXVpcmVkJDEoJ2RvbScpLFxuICAgICAgICByZXF1aXJlZCQxKCdiZWhhdmlvdXJzJylcbiAgICAgIF0sXG4gICAgICBwYXJ0RmllbGRzOiBbXG4gICAgICAgIHBhcnRIZWFkZXIsXG4gICAgICAgIHBhcnRNZW51YmFyLFxuICAgICAgICBwYXJ0VG9vbGJhcixcbiAgICAgICAgcGFydE11bHRpcGxlVG9vbGJhcixcbiAgICAgICAgcGFydFNvY2tldCxcbiAgICAgICAgcGFydFNpZGViYXIsXG4gICAgICAgIHBhcnRQcm9tb3Rpb24sXG4gICAgICAgIHBhcnRUaHJvYmJlcixcbiAgICAgICAgcGFydFZpZXdXcmFwcGVyLFxuICAgICAgICBwYXJ0RWRpdG9yQ29udGFpbmVyXG4gICAgICBdLFxuICAgICAgYXBpczoge1xuICAgICAgICBnZXRTb2NrZXQ6IChhcGlzLCBjb21wKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFwaXMuZ2V0U29ja2V0KGNvbXApO1xuICAgICAgICB9LFxuICAgICAgICBzZXRTaWRlYmFyOiAoYXBpcywgY29tcCwgcGFuZWxDb25maWdzLCBzaG93U2lkZWJhcikgPT4ge1xuICAgICAgICAgIGFwaXMuc2V0U2lkZWJhcihjb21wLCBwYW5lbENvbmZpZ3MsIHNob3dTaWRlYmFyKTtcbiAgICAgICAgfSxcbiAgICAgICAgdG9nZ2xlU2lkZWJhcjogKGFwaXMsIGNvbXAsIG5hbWUpID0+IHtcbiAgICAgICAgICBhcGlzLnRvZ2dsZVNpZGViYXIoY29tcCwgbmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHdoaWNoU2lkZWJhcjogKGFwaXMsIGNvbXApID0+IHtcbiAgICAgICAgICByZXR1cm4gYXBpcy53aGljaFNpZGViYXIoY29tcCk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldEhlYWRlcjogKGFwaXMsIGNvbXApID0+IHtcbiAgICAgICAgICByZXR1cm4gYXBpcy5nZXRIZWFkZXIoY29tcCk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldFRvb2xiYXI6IChhcGlzLCBjb21wKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFwaXMuZ2V0VG9vbGJhcihjb21wKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0VG9vbGJhcjogKGFwaXMsIGNvbXAsIGdyb3VwcykgPT4ge1xuICAgICAgICAgIGFwaXMuc2V0VG9vbGJhcihjb21wLCBncm91cHMpO1xuICAgICAgICB9LFxuICAgICAgICBzZXRUb29sYmFyczogKGFwaXMsIGNvbXAsIHRvb2xiYXJzKSA9PiB7XG4gICAgICAgICAgYXBpcy5zZXRUb29sYmFycyhjb21wLCB0b29sYmFycyk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZnJlc2hUb29sYmFyOiAoYXBpcywgY29tcCkgPT4ge1xuICAgICAgICAgIHJldHVybiBhcGlzLnJlZnJlc2hUb29sYmFyKGNvbXApO1xuICAgICAgICB9LFxuICAgICAgICB0b2dnbGVUb29sYmFyRHJhd2VyOiAoYXBpcywgY29tcCkgPT4ge1xuICAgICAgICAgIGFwaXMudG9nZ2xlVG9vbGJhckRyYXdlcihjb21wKTtcbiAgICAgICAgfSxcbiAgICAgICAgdG9nZ2xlVG9vbGJhckRyYXdlcldpdGhvdXRGb2N1c2luZzogKGFwaXMsIGNvbXApID0+IHtcbiAgICAgICAgICBhcGlzLnRvZ2dsZVRvb2xiYXJEcmF3ZXJXaXRob3V0Rm9jdXNpbmcoY29tcCk7XG4gICAgICAgIH0sXG4gICAgICAgIGlzVG9vbGJhckRyYXdlclRvZ2dsZWQ6IChhcGlzLCBjb21wKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFwaXMuaXNUb29sYmFyRHJhd2VyVG9nZ2xlZChjb21wKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0VGhyb2JiZXI6IChhcGlzLCBjb21wKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFwaXMuZ2V0VGhyb2JiZXIoY29tcCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldE1lbnViYXI6IChhcGlzLCBjb21wLCBtZW51cykgPT4ge1xuICAgICAgICAgIGFwaXMuc2V0TWVudWJhcihjb21wLCBtZW51cyk7XG4gICAgICAgIH0sXG4gICAgICAgIGZvY3VzTWVudWJhcjogKGFwaXMsIGNvbXApID0+IHtcbiAgICAgICAgICBhcGlzLmZvY3VzTWVudWJhcihjb21wKTtcbiAgICAgICAgfSxcbiAgICAgICAgZm9jdXNUb29sYmFyOiAoYXBpcywgY29tcCkgPT4ge1xuICAgICAgICAgIGFwaXMuZm9jdXNUb29sYmFyKGNvbXApO1xuICAgICAgICB9LFxuICAgICAgICBzZXRWaWV3czogKGFwaXMsIGNvbXAsIHZpZXdzKSA9PiB7XG4gICAgICAgICAgYXBpcy5zZXRWaWV3cyhjb21wLCB2aWV3cyk7XG4gICAgICAgIH0sXG4gICAgICAgIHRvZ2dsZVZpZXc6IChhcGlzLCBjb21wLCBuYW1lKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFwaXMudG9nZ2xlVmlldyhjb21wLCBuYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2hpY2hWaWV3OiAoYXBpcywgY29tcCkgPT4ge1xuICAgICAgICAgIHJldHVybiBhcGlzLndoaWNoVmlldyhjb21wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVmYXVsdE1lbnViYXIgPSAnZmlsZSBlZGl0IHZpZXcgaW5zZXJ0IGZvcm1hdCB0b29scyB0YWJsZSBoZWxwJztcbiAgICBjb25zdCBkZWZhdWx0TWVudXMgPSB7XG4gICAgICBmaWxlOiB7XG4gICAgICAgIHRpdGxlOiAnRmlsZScsXG4gICAgICAgIGl0ZW1zOiAnbmV3ZG9jdW1lbnQgcmVzdG9yZWRyYWZ0IHwgcHJldmlldyB8IGV4cG9ydCBwcmludCB8IGRlbGV0ZWFsbGNvbnZlcnNhdGlvbnMnXG4gICAgICB9LFxuICAgICAgZWRpdDoge1xuICAgICAgICB0aXRsZTogJ0VkaXQnLFxuICAgICAgICBpdGVtczogJ3VuZG8gcmVkbyB8IGN1dCBjb3B5IHBhc3RlIHBhc3RldGV4dCB8IHNlbGVjdGFsbCB8IHNlYXJjaHJlcGxhY2UnXG4gICAgICB9LFxuICAgICAgdmlldzoge1xuICAgICAgICB0aXRsZTogJ1ZpZXcnLFxuICAgICAgICBpdGVtczogJ2NvZGUgfCB2aXN1YWxhaWQgdmlzdWFsY2hhcnMgdmlzdWFsYmxvY2tzIHwgc3BlbGxjaGVja2VyIHwgcHJldmlldyBmdWxsc2NyZWVuIHwgc2hvd2NvbW1lbnRzJ1xuICAgICAgfSxcbiAgICAgIGluc2VydDoge1xuICAgICAgICB0aXRsZTogJ0luc2VydCcsXG4gICAgICAgIGl0ZW1zOiAnaW1hZ2UgbGluayBtZWRpYSBhZGRjb21tZW50IHBhZ2VlbWJlZCB0ZW1wbGF0ZSBpbnNlcnR0ZW1wbGF0ZSBjb2Rlc2FtcGxlIGluc2VydHRhYmxlIGFjY29yZGlvbiB8IGNoYXJtYXAgZW1vdGljb25zIGhyIHwgcGFnZWJyZWFrIG5vbmJyZWFraW5nIGFuY2hvciB0YWJsZW9mY29udGVudHMgZm9vdG5vdGVzIHwgbWVyZ2V0YWdzIHwgaW5zZXJ0ZGF0ZXRpbWUnXG4gICAgICB9LFxuICAgICAgZm9ybWF0OiB7XG4gICAgICAgIHRpdGxlOiAnRm9ybWF0JyxcbiAgICAgICAgaXRlbXM6ICdib2xkIGl0YWxpYyB1bmRlcmxpbmUgc3RyaWtldGhyb3VnaCBzdXBlcnNjcmlwdCBzdWJzY3JpcHQgY29kZWZvcm1hdCB8IHN0eWxlcyBibG9ja3MgZm9udGZhbWlseSBmb250c2l6ZSBhbGlnbiBsaW5laGVpZ2h0IHwgZm9yZWNvbG9yIGJhY2tjb2xvciB8IGxhbmd1YWdlIHwgcmVtb3ZlZm9ybWF0J1xuICAgICAgfSxcbiAgICAgIHRvb2xzOiB7XG4gICAgICAgIHRpdGxlOiAnVG9vbHMnLFxuICAgICAgICBpdGVtczogJ2FpZGlhbG9nIGFpc2hvcnRjdXRzIHwgc3BlbGxjaGVja2VyIHNwZWxsY2hlY2tlcmxhbmd1YWdlIHwgYXV0b2NvcnJlY3QgY2FwaXRhbGl6YXRpb24gfCBhMTF5Y2hlY2sgY29kZSB0eXBvZ3JhcGh5IHdvcmRjb3VudCBhZGR0ZW1wbGF0ZSdcbiAgICAgIH0sXG4gICAgICB0YWJsZToge1xuICAgICAgICB0aXRsZTogJ1RhYmxlJyxcbiAgICAgICAgaXRlbXM6ICdpbnNlcnR0YWJsZSB8IGNlbGwgcm93IGNvbHVtbiB8IGFkdnRhYmxlc29ydCB8IHRhYmxlcHJvcHMgZGVsZXRldGFibGUnXG4gICAgICB9LFxuICAgICAgaGVscDoge1xuICAgICAgICB0aXRsZTogJ0hlbHAnLFxuICAgICAgICBpdGVtczogJ2hlbHAnXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBtYWtlID0gKG1lbnUsIHJlZ2lzdHJ5LCBlZGl0b3IpID0+IHtcbiAgICAgIGNvbnN0IHJlbW92ZWRNZW51SXRlbXMgPSBnZXRSZW1vdmVkTWVudUl0ZW1zKGVkaXRvcikuc3BsaXQoL1sgLF0vKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRleHQ6IG1lbnUudGl0bGUsXG4gICAgICAgIGdldEl0ZW1zOiAoKSA9PiBiaW5kJDMobWVudS5pdGVtcywgaSA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbU5hbWUgPSBpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKGl0ZW1OYW1lLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGV4aXN0cyhyZW1vdmVkTWVudUl0ZW1zLCByZW1vdmVkTWVudUl0ZW0gPT4gcmVtb3ZlZE1lbnVJdGVtID09PSBpdGVtTmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW1OYW1lID09PSAnc2VwYXJhdG9yJyB8fCBpdGVtTmFtZSA9PT0gJ3wnKSB7XG4gICAgICAgICAgICByZXR1cm4gW3sgdHlwZTogJ3NlcGFyYXRvcicgfV07XG4gICAgICAgICAgfSBlbHNlIGlmIChyZWdpc3RyeS5tZW51SXRlbXNbaXRlbU5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gW3JlZ2lzdHJ5Lm1lbnVJdGVtc1tpdGVtTmFtZV1dO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHBhcnNlSXRlbXNTdHJpbmcgPSBpdGVtcyA9PiB7XG4gICAgICByZXR1cm4gaXRlbXMuc3BsaXQoJyAnKTtcbiAgICB9O1xuICAgIGNvbnN0IGlkZW50aWZ5TWVudXMgPSAoZWRpdG9yLCByZWdpc3RyeSkgPT4ge1xuICAgICAgY29uc3QgcmF3TWVudURhdGEgPSB7XG4gICAgICAgIC4uLmRlZmF1bHRNZW51cyxcbiAgICAgICAgLi4ucmVnaXN0cnkubWVudXNcbiAgICAgIH07XG4gICAgICBjb25zdCB1c2VyRGVmaW5lZE1lbnVzID0ga2V5cyhyZWdpc3RyeS5tZW51cykubGVuZ3RoID4gMDtcbiAgICAgIGNvbnN0IG1lbnViYXIgPSByZWdpc3RyeS5tZW51YmFyID09PSB1bmRlZmluZWQgfHwgcmVnaXN0cnkubWVudWJhciA9PT0gdHJ1ZSA/IHBhcnNlSXRlbXNTdHJpbmcoZGVmYXVsdE1lbnViYXIpIDogcGFyc2VJdGVtc1N0cmluZyhyZWdpc3RyeS5tZW51YmFyID09PSBmYWxzZSA/ICcnIDogcmVnaXN0cnkubWVudWJhcik7XG4gICAgICBjb25zdCB2YWxpZE1lbnVzID0gZmlsdGVyJDIobWVudWJhciwgbWVudU5hbWUgPT4ge1xuICAgICAgICBjb25zdCBpc0RlZmF1bHRNZW51ID0gaGFzJDIoZGVmYXVsdE1lbnVzLCBtZW51TmFtZSk7XG4gICAgICAgIGlmICh1c2VyRGVmaW5lZE1lbnVzKSB7XG4gICAgICAgICAgcmV0dXJuIGlzRGVmYXVsdE1lbnUgfHwgZ2V0JGcocmVnaXN0cnkubWVudXMsIG1lbnVOYW1lKS5leGlzdHMobWVudSA9PiBoYXMkMihtZW51LCAnaXRlbXMnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGlzRGVmYXVsdE1lbnU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgbWVudXMgPSBtYXAkMih2YWxpZE1lbnVzLCBtZW51TmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IG1lbnVEYXRhID0gcmF3TWVudURhdGFbbWVudU5hbWVdO1xuICAgICAgICByZXR1cm4gbWFrZSh7XG4gICAgICAgICAgdGl0bGU6IG1lbnVEYXRhLnRpdGxlLFxuICAgICAgICAgIGl0ZW1zOiBwYXJzZUl0ZW1zU3RyaW5nKG1lbnVEYXRhLml0ZW1zKVxuICAgICAgICB9LCByZWdpc3RyeSwgZWRpdG9yKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZpbHRlciQyKG1lbnVzLCBtZW51ID0+IHtcbiAgICAgICAgY29uc3QgaXNOb3RTZXBhcmF0b3IgPSBpdGVtID0+IGlzU3RyaW5nKGl0ZW0pIHx8IGl0ZW0udHlwZSAhPT0gJ3NlcGFyYXRvcic7XG4gICAgICAgIHJldHVybiBtZW51LmdldEl0ZW1zKCkubGVuZ3RoID4gMCAmJiBleGlzdHMobWVudS5nZXRJdGVtcygpLCBpc05vdFNlcGFyYXRvcik7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmlyZVNraW5Mb2FkZWQgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZG9uZSA9ICgpID0+IHtcbiAgICAgICAgZWRpdG9yLl9za2luTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgZmlyZVNraW5Mb2FkZWQkMShlZGl0b3IpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmIChlZGl0b3IuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWRpdG9yLm9uKCdpbml0JywgZG9uZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBmaXJlU2tpbkxvYWRFcnJvciA9IChlZGl0b3IsIGVycikgPT4gKCkgPT4gZmlyZVNraW5Mb2FkRXJyb3IkMShlZGl0b3IsIHsgbWVzc2FnZTogZXJyIH0pO1xuXG4gICAgY29uc3QgbG9hZFN0eWxlc2hlZXQgPSAoZWRpdG9yLCBzdHlsZXNoZWV0VXJsLCBzdHlsZVNoZWV0TG9hZGVyKSA9PiB7XG4gICAgICBlZGl0b3Iub24oJ3JlbW92ZScsICgpID0+IHN0eWxlU2hlZXRMb2FkZXIudW5sb2FkKHN0eWxlc2hlZXRVcmwpKTtcbiAgICAgIHJldHVybiBzdHlsZVNoZWV0TG9hZGVyLmxvYWQoc3R5bGVzaGVldFVybCk7XG4gICAgfTtcbiAgICBjb25zdCBsb2FkVWlTa2lucyA9IChlZGl0b3IsIHNraW5VcmwpID0+IHtcbiAgICAgIGNvbnN0IHNraW5VaUNzcyA9IHNraW5VcmwgKyAnL3NraW4ubWluLmNzcyc7XG4gICAgICByZXR1cm4gbG9hZFN0eWxlc2hlZXQoZWRpdG9yLCBza2luVWlDc3MsIGVkaXRvci51aS5zdHlsZVNoZWV0TG9hZGVyKTtcbiAgICB9O1xuICAgIGNvbnN0IGxvYWRTaGFkb3dEb21VaVNraW5zID0gKGVkaXRvciwgc2tpblVybCkgPT4ge1xuICAgICAgY29uc3QgaXNJblNoYWRvd1Jvb3QkMSA9IGlzSW5TaGFkb3dSb290KFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRFbGVtZW50KCkpKTtcbiAgICAgIGlmIChpc0luU2hhZG93Um9vdCQxKSB7XG4gICAgICAgIGNvbnN0IHNoYWRvd0RvbVNraW5Dc3MgPSBza2luVXJsICsgJy9za2luLnNoYWRvd2RvbS5taW4uY3NzJztcbiAgICAgICAgcmV0dXJuIGxvYWRTdHlsZXNoZWV0KGVkaXRvciwgc2hhZG93RG9tU2tpbkNzcywgZ2xvYmFsJDcuRE9NLnN0eWxlU2hlZXRMb2FkZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbG9hZFNraW4gPSAoaXNJbmxpbmUsIGVkaXRvcikgPT4ge1xuICAgICAgY29uc3Qgc2tpblVybCA9IGdldFNraW5VcmwoZWRpdG9yKTtcbiAgICAgIGlmIChza2luVXJsKSB7XG4gICAgICAgIGVkaXRvci5jb250ZW50Q1NTLnB1c2goc2tpblVybCArIChpc0lubGluZSA/ICcvY29udGVudC5pbmxpbmUnIDogJy9jb250ZW50JykgKyAnLm1pbi5jc3MnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNTa2luRGlzYWJsZWQoZWRpdG9yKSAmJiBpc1N0cmluZyhza2luVXJsKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgICAgIGxvYWRVaVNraW5zKGVkaXRvciwgc2tpblVybCksXG4gICAgICAgICAgbG9hZFNoYWRvd0RvbVVpU2tpbnMoZWRpdG9yLCBza2luVXJsKVxuICAgICAgICBdKS50aGVuKGZpcmVTa2luTG9hZGVkKGVkaXRvciksIGZpcmVTa2luTG9hZEVycm9yKGVkaXRvciwgJ1NraW4gY291bGQgbm90IGJlIGxvYWRlZCcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmlyZVNraW5Mb2FkZWQoZWRpdG9yKSgpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlmcmFtZSA9IGN1cnJ5KGxvYWRTa2luLCBmYWxzZSk7XG4gICAgY29uc3QgaW5saW5lID0gY3VycnkobG9hZFNraW4sIHRydWUpO1xuXG4gICAgY29uc3QgZ2VuZXJhdGVTZWxlY3RJdGVtcyA9IChfZWRpdG9yLCBiYWNrc3RhZ2UsIHNwZWMpID0+IHtcbiAgICAgIGNvbnN0IGdlbmVyYXRlSXRlbSA9IChyYXdJdGVtLCByZXNwb25zZSwgaW52YWxpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlZFRleHQgPSBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycy50cmFuc2xhdGUocmF3SXRlbS50aXRsZSk7XG4gICAgICAgIGlmIChyYXdJdGVtLnR5cGUgPT09ICdzZXBhcmF0b3InKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgICAgdHlwZTogJ3NlcGFyYXRvcicsXG4gICAgICAgICAgICB0ZXh0OiB0cmFuc2xhdGVkVGV4dFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHJhd0l0ZW0udHlwZSA9PT0gJ3N1Ym1lbnUnKSB7XG4gICAgICAgICAgY29uc3QgaXRlbXMgPSBiaW5kJDMocmF3SXRlbS5nZXRTdHlsZUl0ZW1zKCksIHNpID0+IHZhbGlkYXRlKHNpLCByZXNwb25zZSwgdmFsdWUpKTtcbiAgICAgICAgICBpZiAocmVzcG9uc2UgPT09IDAgJiYgaXRlbXMubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgICAgdHlwZTogJ25lc3RlZG1lbnVpdGVtJyxcbiAgICAgICAgICAgICAgdGV4dDogdHJhbnNsYXRlZFRleHQsXG4gICAgICAgICAgICAgIGVuYWJsZWQ6IGl0ZW1zLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICAgIGdldFN1Ym1lbnVJdGVtczogKCkgPT4gYmluZCQzKHJhd0l0ZW0uZ2V0U3R5bGVJdGVtcygpLCBzaSA9PiB2YWxpZGF0ZShzaSwgcmVzcG9uc2UsIHZhbHVlKSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgICB0eXBlOiAndG9nZ2xlbWVudWl0ZW0nLFxuICAgICAgICAgICAgdGV4dDogdHJhbnNsYXRlZFRleHQsXG4gICAgICAgICAgICBpY29uOiByYXdJdGVtLmljb24sXG4gICAgICAgICAgICBhY3RpdmU6IHJhd0l0ZW0uaXNTZWxlY3RlZCh2YWx1ZSksXG4gICAgICAgICAgICBlbmFibGVkOiAhaW52YWxpZCxcbiAgICAgICAgICAgIG9uQWN0aW9uOiBzcGVjLm9uQWN0aW9uKHJhd0l0ZW0pLFxuICAgICAgICAgICAgLi4ucmF3SXRlbS5nZXRTdHlsZVByZXZpZXcoKS5mb2xkKCgpID0+ICh7fSksIHByZXZpZXcgPT4gKHsgbWV0YTogeyBzdHlsZTogcHJldmlldyB9IH0pKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgdmFsaWRhdGUgPSAoaXRlbSwgcmVzcG9uc2UsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGludmFsaWQgPSBpdGVtLnR5cGUgPT09ICdmb3JtYXR0ZXInICYmIHNwZWMuaXNJbnZhbGlkKGl0ZW0pO1xuICAgICAgICBpZiAocmVzcG9uc2UgPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZCA/IFtdIDogZ2VuZXJhdGVJdGVtKGl0ZW0sIHJlc3BvbnNlLCBmYWxzZSwgdmFsdWUpLnRvQXJyYXkoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVJdGVtKGl0ZW0sIHJlc3BvbnNlLCBpbnZhbGlkLCB2YWx1ZSkudG9BcnJheSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgdmFsaWRhdGVJdGVtcyA9IHByZUl0ZW1zID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBzcGVjLmdldEN1cnJlbnRWYWx1ZSgpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IHNwZWMuc2hvdWxkSGlkZSA/IDAgOiAxO1xuICAgICAgICByZXR1cm4gYmluZCQzKHByZUl0ZW1zLCBpdGVtID0+IHZhbGlkYXRlKGl0ZW0sIHJlc3BvbnNlLCB2YWx1ZSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldEZldGNoID0gKGJhY2tzdGFnZSwgZ2V0U3R5bGVJdGVtcykgPT4gKGNvbXAsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IHByZUl0ZW1zID0gZ2V0U3R5bGVJdGVtcygpO1xuICAgICAgICBjb25zdCBpdGVtcyA9IHZhbGlkYXRlSXRlbXMocHJlSXRlbXMpO1xuICAgICAgICBjb25zdCBtZW51ID0gYnVpbGQoaXRlbXMsIEl0ZW1SZXNwb25zZSQxLkNMT1NFX09OX0VYRUNVVEUsIGJhY2tzdGFnZSwge1xuICAgICAgICAgIGlzSG9yaXpvbnRhbE1lbnU6IGZhbHNlLFxuICAgICAgICAgIHNlYXJjaDogT3B0aW9uYWwubm9uZSgpXG4gICAgICAgIH0pO1xuICAgICAgICBjYWxsYmFjayhtZW51KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZGF0ZUl0ZW1zLFxuICAgICAgICBnZXRGZXRjaFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZU1lbnVJdGVtcyA9IChlZGl0b3IsIGJhY2tzdGFnZSwgc3BlYykgPT4ge1xuICAgICAgY29uc3QgZGF0YXNldCA9IHNwZWMuZGF0YXNldDtcbiAgICAgIGNvbnN0IGdldFN0eWxlSXRlbXMgPSBkYXRhc2V0LnR5cGUgPT09ICdiYXNpYycgPyAoKSA9PiBtYXAkMihkYXRhc2V0LmRhdGEsIGQgPT4gcHJvY2Vzc0Jhc2ljKGQsIHNwZWMuaXNTZWxlY3RlZEZvciwgc3BlYy5nZXRQcmV2aWV3Rm9yKSkgOiBkYXRhc2V0LmdldERhdGE7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpdGVtczogZ2VuZXJhdGVTZWxlY3RJdGVtcyhlZGl0b3IsIGJhY2tzdGFnZSwgc3BlYyksXG4gICAgICAgIGdldFN0eWxlSXRlbXNcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVTZWxlY3RCdXR0b24gPSAoZWRpdG9yLCBiYWNrc3RhZ2UsIHNwZWMpID0+IHtcbiAgICAgIGNvbnN0IHtpdGVtcywgZ2V0U3R5bGVJdGVtc30gPSBjcmVhdGVNZW51SXRlbXMoZWRpdG9yLCBiYWNrc3RhZ2UsIHNwZWMpO1xuICAgICAgY29uc3QgZ2V0QXBpID0gY29tcCA9PiAoeyBnZXRDb21wb25lbnQ6IGNvbnN0YW50JDEoY29tcCkgfSk7XG4gICAgICBjb25zdCBvblNldHVwID0gb25TZXR1cEV2ZW50KGVkaXRvciwgJ05vZGVDaGFuZ2UnLCBhcGkgPT4ge1xuICAgICAgICBjb25zdCBjb21wID0gYXBpLmdldENvbXBvbmVudCgpO1xuICAgICAgICBzcGVjLnVwZGF0ZVRleHQoY29tcCk7XG4gICAgICAgIERpc2FibGluZy5zZXQoYXBpLmdldENvbXBvbmVudCgpLCAhZWRpdG9yLnNlbGVjdGlvbi5pc0VkaXRhYmxlKCkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVuZGVyQ29tbW9uRHJvcGRvd24oe1xuICAgICAgICB0ZXh0OiBzcGVjLmljb24uaXNTb21lKCkgPyBPcHRpb25hbC5ub25lKCkgOiBzcGVjLnRleHQsXG4gICAgICAgIGljb246IHNwZWMuaWNvbixcbiAgICAgICAgdG9vbHRpcDogT3B0aW9uYWwuZnJvbShzcGVjLnRvb2x0aXApLFxuICAgICAgICByb2xlOiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGZldGNoOiBpdGVtcy5nZXRGZXRjaChiYWNrc3RhZ2UsIGdldFN0eWxlSXRlbXMpLFxuICAgICAgICBvblNldHVwLFxuICAgICAgICBnZXRBcGksXG4gICAgICAgIGNvbHVtbnM6IDEsXG4gICAgICAgIHByZXNldHM6ICdub3JtYWwnLFxuICAgICAgICBjbGFzc2VzOiBzcGVjLmljb24uaXNTb21lKCkgPyBbXSA6IFsnYmVzcG9rZSddLFxuICAgICAgICBkcm9wZG93bkJlaGF2aW91cnM6IFtdXG4gICAgICB9LCAndG94LXRidG4nLCBiYWNrc3RhZ2Uuc2hhcmVkKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJvY2VzcyA9IHJhd0Zvcm1hdHMgPT4gbWFwJDIocmF3Rm9ybWF0cywgaXRlbSA9PiB7XG4gICAgICBsZXQgdGl0bGUgPSBpdGVtLCBmb3JtYXQgPSBpdGVtO1xuICAgICAgY29uc3QgdmFsdWVzID0gaXRlbS5zcGxpdCgnPScpO1xuICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRpdGxlID0gdmFsdWVzWzBdO1xuICAgICAgICBmb3JtYXQgPSB2YWx1ZXNbMV07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0aXRsZSxcbiAgICAgICAgZm9ybWF0XG4gICAgICB9O1xuICAgIH0pO1xuICAgIGNvbnN0IGJ1aWxkQmFzaWNTdGF0aWNEYXRhc2V0ID0gZGF0YSA9PiAoe1xuICAgICAgdHlwZTogJ2Jhc2ljJyxcbiAgICAgIGRhdGFcbiAgICB9KTtcbiAgICB2YXIgRGVsaW1pdGVyO1xuICAgIChmdW5jdGlvbiAoRGVsaW1pdGVyKSB7XG4gICAgICBEZWxpbWl0ZXJbRGVsaW1pdGVyWydTZW1pQ29sb24nXSA9IDBdID0gJ1NlbWlDb2xvbic7XG4gICAgICBEZWxpbWl0ZXJbRGVsaW1pdGVyWydTcGFjZSddID0gMV0gPSAnU3BhY2UnO1xuICAgIH0oRGVsaW1pdGVyIHx8IChEZWxpbWl0ZXIgPSB7fSkpKTtcbiAgICBjb25zdCBzcGxpdCA9IChyYXdGb3JtYXRzLCBkZWxpbWl0ZXIpID0+IHtcbiAgICAgIGlmIChkZWxpbWl0ZXIgPT09IERlbGltaXRlci5TZW1pQ29sb24pIHtcbiAgICAgICAgcmV0dXJuIHJhd0Zvcm1hdHMucmVwbGFjZSgvOyQvLCAnJykuc3BsaXQoJzsnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByYXdGb3JtYXRzLnNwbGl0KCcgJyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBidWlsZEJhc2ljU2V0dGluZ3NEYXRhc2V0ID0gKGVkaXRvciwgc2V0dGluZ05hbWUsIGRlbGltaXRlcikgPT4ge1xuICAgICAgY29uc3QgcmF3Rm9ybWF0cyA9IGVkaXRvci5vcHRpb25zLmdldChzZXR0aW5nTmFtZSk7XG4gICAgICBjb25zdCBkYXRhID0gcHJvY2VzcyhzcGxpdChyYXdGb3JtYXRzLCBkZWxpbWl0ZXIpKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdiYXNpYycsXG4gICAgICAgIGRhdGFcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGFsaWduTWVudUl0ZW1zID0gW1xuICAgICAge1xuICAgICAgICB0aXRsZTogJ0xlZnQnLFxuICAgICAgICBpY29uOiAnYWxpZ24tbGVmdCcsXG4gICAgICAgIGZvcm1hdDogJ2FsaWdubGVmdCcsXG4gICAgICAgIGNvbW1hbmQ6ICdKdXN0aWZ5TGVmdCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnQ2VudGVyJyxcbiAgICAgICAgaWNvbjogJ2FsaWduLWNlbnRlcicsXG4gICAgICAgIGZvcm1hdDogJ2FsaWduY2VudGVyJyxcbiAgICAgICAgY29tbWFuZDogJ0p1c3RpZnlDZW50ZXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ1JpZ2h0JyxcbiAgICAgICAgaWNvbjogJ2FsaWduLXJpZ2h0JyxcbiAgICAgICAgZm9ybWF0OiAnYWxpZ25yaWdodCcsXG4gICAgICAgIGNvbW1hbmQ6ICdKdXN0aWZ5UmlnaHQnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ0p1c3RpZnknLFxuICAgICAgICBpY29uOiAnYWxpZ24tanVzdGlmeScsXG4gICAgICAgIGZvcm1hdDogJ2FsaWduanVzdGlmeScsXG4gICAgICAgIGNvbW1hbmQ6ICdKdXN0aWZ5RnVsbCdcbiAgICAgIH1cbiAgICBdO1xuICAgIGNvbnN0IGdldFNwZWMkNCA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBnZXRNYXRjaGluZ1ZhbHVlID0gKCkgPT4gZmluZCQ1KGFsaWduTWVudUl0ZW1zLCBpdGVtID0+IGVkaXRvci5mb3JtYXR0ZXIubWF0Y2goaXRlbS5mb3JtYXQpKTtcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWRGb3IgPSBmb3JtYXQgPT4gKCkgPT4gZWRpdG9yLmZvcm1hdHRlci5tYXRjaChmb3JtYXQpO1xuICAgICAgY29uc3QgZ2V0UHJldmlld0ZvciA9IF9mb3JtYXQgPT4gT3B0aW9uYWwubm9uZTtcbiAgICAgIGNvbnN0IHVwZGF0ZVNlbGVjdE1lbnVJY29uID0gY29tcCA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gZ2V0TWF0Y2hpbmdWYWx1ZSgpO1xuICAgICAgICBjb25zdCBhbGlnbm1lbnQgPSBtYXRjaC5mb2xkKGNvbnN0YW50JDEoJ2xlZnQnKSwgaXRlbSA9PiBpdGVtLnRpdGxlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBlbWl0V2l0aChjb21wLCB1cGRhdGVNZW51SWNvbiwgeyBpY29uOiBgYWxpZ24tJHsgYWxpZ25tZW50IH1gIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSBidWlsZEJhc2ljU3RhdGljRGF0YXNldChhbGlnbk1lbnVJdGVtcyk7XG4gICAgICBjb25zdCBvbkFjdGlvbiA9IHJhd0l0ZW0gPT4gKCkgPT4gZmluZCQ1KGFsaWduTWVudUl0ZW1zLCBpdGVtID0+IGl0ZW0uZm9ybWF0ID09PSByYXdJdGVtLmZvcm1hdCkuZWFjaChpdGVtID0+IGVkaXRvci5leGVjQ29tbWFuZChpdGVtLmNvbW1hbmQpKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvb2x0aXA6ICdBbGlnbicsXG4gICAgICAgIHRleHQ6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICAgaWNvbjogT3B0aW9uYWwuc29tZSgnYWxpZ24tbGVmdCcpLFxuICAgICAgICBpc1NlbGVjdGVkRm9yLFxuICAgICAgICBnZXRDdXJyZW50VmFsdWU6IE9wdGlvbmFsLm5vbmUsXG4gICAgICAgIGdldFByZXZpZXdGb3IsXG4gICAgICAgIG9uQWN0aW9uLFxuICAgICAgICB1cGRhdGVUZXh0OiB1cGRhdGVTZWxlY3RNZW51SWNvbixcbiAgICAgICAgZGF0YXNldCxcbiAgICAgICAgc2hvdWxkSGlkZTogZmFsc2UsXG4gICAgICAgIGlzSW52YWxpZDogaXRlbSA9PiAhZWRpdG9yLmZvcm1hdHRlci5jYW5BcHBseShpdGVtLmZvcm1hdClcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVBbGlnbkJ1dHRvbiA9IChlZGl0b3IsIGJhY2tzdGFnZSkgPT4gY3JlYXRlU2VsZWN0QnV0dG9uKGVkaXRvciwgYmFja3N0YWdlLCBnZXRTcGVjJDQoZWRpdG9yKSk7XG4gICAgY29uc3QgY3JlYXRlQWxpZ25NZW51ID0gKGVkaXRvciwgYmFja3N0YWdlKSA9PiB7XG4gICAgICBjb25zdCBtZW51SXRlbXMgPSBjcmVhdGVNZW51SXRlbXMoZWRpdG9yLCBiYWNrc3RhZ2UsIGdldFNwZWMkNChlZGl0b3IpKTtcbiAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGROZXN0ZWRNZW51SXRlbSgnYWxpZ24nLCB7XG4gICAgICAgIHRleHQ6IGJhY2tzdGFnZS5zaGFyZWQucHJvdmlkZXJzLnRyYW5zbGF0ZSgnQWxpZ24nKSxcbiAgICAgICAgb25TZXR1cDogb25TZXR1cEVkaXRhYmxlVG9nZ2xlKGVkaXRvciksXG4gICAgICAgIGdldFN1Ym1lbnVJdGVtczogKCkgPT4gbWVudUl0ZW1zLml0ZW1zLnZhbGlkYXRlSXRlbXMobWVudUl0ZW1zLmdldFN0eWxlSXRlbXMoKSlcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBmaW5kTmVhcmVzdCA9IChlZGl0b3IsIGdldFN0eWxlcykgPT4ge1xuICAgICAgY29uc3Qgc3R5bGVzID0gZ2V0U3R5bGVzKCk7XG4gICAgICBjb25zdCBmb3JtYXRzID0gbWFwJDIoc3R5bGVzLCBzdHlsZSA9PiBzdHlsZS5mb3JtYXQpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oZWRpdG9yLmZvcm1hdHRlci5jbG9zZXN0KGZvcm1hdHMpKS5iaW5kKGZtdCA9PiBmaW5kJDUoc3R5bGVzLCBkYXRhID0+IGRhdGEuZm9ybWF0ID09PSBmbXQpKS5vclRodW5rKCgpID0+IHNvbWVJZihlZGl0b3IuZm9ybWF0dGVyLm1hdGNoKCdwJyksIHtcbiAgICAgICAgdGl0bGU6ICdQYXJhZ3JhcGgnLFxuICAgICAgICBmb3JtYXQ6ICdwJ1xuICAgICAgfSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRTcGVjJDMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZmFsbGJhY2tGb3JtYXQgPSAnUGFyYWdyYXBoJztcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWRGb3IgPSBmb3JtYXQgPT4gKCkgPT4gZWRpdG9yLmZvcm1hdHRlci5tYXRjaChmb3JtYXQpO1xuICAgICAgY29uc3QgZ2V0UHJldmlld0ZvciA9IGZvcm1hdCA9PiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZtdCA9IGVkaXRvci5mb3JtYXR0ZXIuZ2V0KGZvcm1hdCk7XG4gICAgICAgIGlmIChmbXQpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgICB0YWc6IGZtdC5sZW5ndGggPiAwID8gZm10WzBdLmlubGluZSB8fCBmbXRbMF0uYmxvY2sgfHwgJ2RpdicgOiAnZGl2JyxcbiAgICAgICAgICAgIHN0eWxlczogZWRpdG9yLmRvbS5wYXJzZVN0eWxlKGVkaXRvci5mb3JtYXR0ZXIuZ2V0Q3NzVGV4dChmb3JtYXQpKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCB1cGRhdGVTZWxlY3RNZW51VGV4dCA9IGNvbXAgPT4ge1xuICAgICAgICBjb25zdCBkZXRlY3RlZEZvcm1hdCA9IGZpbmROZWFyZXN0KGVkaXRvciwgKCkgPT4gZGF0YXNldC5kYXRhKTtcbiAgICAgICAgY29uc3QgdGV4dCA9IGRldGVjdGVkRm9ybWF0LmZvbGQoY29uc3RhbnQkMShmYWxsYmFja0Zvcm1hdCksIGZtdCA9PiBmbXQudGl0bGUpO1xuICAgICAgICBlbWl0V2l0aChjb21wLCB1cGRhdGVNZW51VGV4dCwgeyB0ZXh0IH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSBidWlsZEJhc2ljU2V0dGluZ3NEYXRhc2V0KGVkaXRvciwgJ2Jsb2NrX2Zvcm1hdHMnLCBEZWxpbWl0ZXIuU2VtaUNvbG9uKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvb2x0aXA6ICdCbG9ja3MnLFxuICAgICAgICB0ZXh0OiBPcHRpb25hbC5zb21lKGZhbGxiYWNrRm9ybWF0KSxcbiAgICAgICAgaWNvbjogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICBpc1NlbGVjdGVkRm9yLFxuICAgICAgICBnZXRDdXJyZW50VmFsdWU6IE9wdGlvbmFsLm5vbmUsXG4gICAgICAgIGdldFByZXZpZXdGb3IsXG4gICAgICAgIG9uQWN0aW9uOiBvbkFjdGlvblRvZ2dsZUZvcm1hdCQxKGVkaXRvciksXG4gICAgICAgIHVwZGF0ZVRleHQ6IHVwZGF0ZVNlbGVjdE1lbnVUZXh0LFxuICAgICAgICBkYXRhc2V0LFxuICAgICAgICBzaG91bGRIaWRlOiBmYWxzZSxcbiAgICAgICAgaXNJbnZhbGlkOiBpdGVtID0+ICFlZGl0b3IuZm9ybWF0dGVyLmNhbkFwcGx5KGl0ZW0uZm9ybWF0KVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUJsb2Nrc0J1dHRvbiA9IChlZGl0b3IsIGJhY2tzdGFnZSkgPT4gY3JlYXRlU2VsZWN0QnV0dG9uKGVkaXRvciwgYmFja3N0YWdlLCBnZXRTcGVjJDMoZWRpdG9yKSk7XG4gICAgY29uc3QgY3JlYXRlQmxvY2tzTWVudSA9IChlZGl0b3IsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgbWVudUl0ZW1zID0gY3JlYXRlTWVudUl0ZW1zKGVkaXRvciwgYmFja3N0YWdlLCBnZXRTcGVjJDMoZWRpdG9yKSk7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTmVzdGVkTWVudUl0ZW0oJ2Jsb2NrcycsIHtcbiAgICAgICAgdGV4dDogJ0Jsb2NrcycsXG4gICAgICAgIG9uU2V0dXA6IG9uU2V0dXBFZGl0YWJsZVRvZ2dsZShlZGl0b3IpLFxuICAgICAgICBnZXRTdWJtZW51SXRlbXM6ICgpID0+IG1lbnVJdGVtcy5pdGVtcy52YWxpZGF0ZUl0ZW1zKG1lbnVJdGVtcy5nZXRTdHlsZUl0ZW1zKCkpXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3lzdGVtU3RhY2tGb250cyA9IFtcbiAgICAgICctYXBwbGUtc3lzdGVtJyxcbiAgICAgICdTZWdvZSBVSScsXG4gICAgICAnUm9ib3RvJyxcbiAgICAgICdIZWx2ZXRpY2EgTmV1ZScsXG4gICAgICAnc2Fucy1zZXJpZidcbiAgICBdO1xuICAgIGNvbnN0IHNwbGl0Rm9udHMgPSBmb250RmFtaWx5ID0+IHtcbiAgICAgIGNvbnN0IGZvbnRzID0gZm9udEZhbWlseS5zcGxpdCgvXFxzKixcXHMqLyk7XG4gICAgICByZXR1cm4gbWFwJDIoZm9udHMsIGZvbnQgPT4gZm9udC5yZXBsYWNlKC9eWydcIl0rfFsnXCJdKyQvZywgJycpKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzU3lzdGVtRm9udFN0YWNrID0gZm9udEZhbWlseSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGVzU3lzdGVtU3RhY2sgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZvbnRzID0gc3BsaXRGb250cyhmb250RmFtaWx5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICByZXR1cm4gZm9yYWxsKHN5c3RlbVN0YWNrRm9udHMsIGZvbnQgPT4gZm9udHMuaW5kZXhPZihmb250LnRvTG93ZXJDYXNlKCkpID4gLTEpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBmb250RmFtaWx5LmluZGV4T2YoJy1hcHBsZS1zeXN0ZW0nKSA9PT0gMCAmJiBtYXRjaGVzU3lzdGVtU3RhY2soKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNwZWMkMiA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBzeXN0ZW1Gb250ID0gJ1N5c3RlbSBGb250JztcbiAgICAgIGNvbnN0IGdldE1hdGNoaW5nVmFsdWUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGdldEZpcnN0Rm9udCA9IGZvbnRGYW1pbHkgPT4gZm9udEZhbWlseSA/IHNwbGl0Rm9udHMoZm9udEZhbWlseSlbMF0gOiAnJztcbiAgICAgICAgY29uc3QgZm9udEZhbWlseSA9IGVkaXRvci5xdWVyeUNvbW1hbmRWYWx1ZSgnRm9udE5hbWUnKTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBkYXRhc2V0LmRhdGE7XG4gICAgICAgIGNvbnN0IGZvbnQgPSBmb250RmFtaWx5ID8gZm9udEZhbWlseS50b0xvd2VyQ2FzZSgpIDogJyc7XG4gICAgICAgIGNvbnN0IG1hdGNoT3B0ID0gZmluZCQ1KGl0ZW1zLCBpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBmb3JtYXQgPSBpdGVtLmZvcm1hdDtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0LnRvTG93ZXJDYXNlKCkgPT09IGZvbnQgfHwgZ2V0Rmlyc3RGb250KGZvcm1hdCkudG9Mb3dlckNhc2UoKSA9PT0gZ2V0Rmlyc3RGb250KGZvbnQpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH0pLm9yVGh1bmsoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBzb21lSWYoaXNTeXN0ZW1Gb250U3RhY2soZm9udCksIHtcbiAgICAgICAgICAgIHRpdGxlOiBzeXN0ZW1Gb250LFxuICAgICAgICAgICAgZm9ybWF0OiBmb250XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1hdGNoT3B0LFxuICAgICAgICAgIGZvbnQ6IGZvbnRGYW1pbHlcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1NlbGVjdGVkRm9yID0gaXRlbSA9PiB2YWx1ZU9wdCA9PiB2YWx1ZU9wdC5leGlzdHModmFsdWUgPT4gdmFsdWUuZm9ybWF0ID09PSBpdGVtKTtcbiAgICAgIGNvbnN0IGdldEN1cnJlbnRWYWx1ZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qge21hdGNoT3B0fSA9IGdldE1hdGNoaW5nVmFsdWUoKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoT3B0O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldFByZXZpZXdGb3IgPSBpdGVtID0+ICgpID0+IE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICBzdHlsZXM6IGl0ZW0uaW5kZXhPZignZGluZ3MnKSA9PT0gLTEgPyB7ICdmb250LWZhbWlseSc6IGl0ZW0gfSA6IHt9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG9uQWN0aW9uID0gcmF3SXRlbSA9PiAoKSA9PiB7XG4gICAgICAgIGVkaXRvci51bmRvTWFuYWdlci50cmFuc2FjdCgoKSA9PiB7XG4gICAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdGb250TmFtZScsIGZhbHNlLCByYXdJdGVtLmZvcm1hdCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVwZGF0ZVNlbGVjdE1lbnVUZXh0ID0gY29tcCA9PiB7XG4gICAgICAgIGNvbnN0IHttYXRjaE9wdCwgZm9udH0gPSBnZXRNYXRjaGluZ1ZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHRleHQgPSBtYXRjaE9wdC5mb2xkKGNvbnN0YW50JDEoZm9udCksIGl0ZW0gPT4gaXRlbS50aXRsZSk7XG4gICAgICAgIGVtaXRXaXRoKGNvbXAsIHVwZGF0ZU1lbnVUZXh0LCB7IHRleHQgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZGF0YXNldCA9IGJ1aWxkQmFzaWNTZXR0aW5nc0RhdGFzZXQoZWRpdG9yLCAnZm9udF9mYW1pbHlfZm9ybWF0cycsIERlbGltaXRlci5TZW1pQ29sb24pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9vbHRpcDogJ0ZvbnRzJyxcbiAgICAgICAgdGV4dDogT3B0aW9uYWwuc29tZShzeXN0ZW1Gb250KSxcbiAgICAgICAgaWNvbjogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICBpc1NlbGVjdGVkRm9yLFxuICAgICAgICBnZXRDdXJyZW50VmFsdWUsXG4gICAgICAgIGdldFByZXZpZXdGb3IsXG4gICAgICAgIG9uQWN0aW9uLFxuICAgICAgICB1cGRhdGVUZXh0OiB1cGRhdGVTZWxlY3RNZW51VGV4dCxcbiAgICAgICAgZGF0YXNldCxcbiAgICAgICAgc2hvdWxkSGlkZTogZmFsc2UsXG4gICAgICAgIGlzSW52YWxpZDogbmV2ZXJcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVGb250RmFtaWx5QnV0dG9uID0gKGVkaXRvciwgYmFja3N0YWdlKSA9PiBjcmVhdGVTZWxlY3RCdXR0b24oZWRpdG9yLCBiYWNrc3RhZ2UsIGdldFNwZWMkMihlZGl0b3IpKTtcbiAgICBjb25zdCBjcmVhdGVGb250RmFtaWx5TWVudSA9IChlZGl0b3IsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgbWVudUl0ZW1zID0gY3JlYXRlTWVudUl0ZW1zKGVkaXRvciwgYmFja3N0YWdlLCBnZXRTcGVjJDIoZWRpdG9yKSk7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTmVzdGVkTWVudUl0ZW0oJ2ZvbnRmYW1pbHknLCB7XG4gICAgICAgIHRleHQ6IGJhY2tzdGFnZS5zaGFyZWQucHJvdmlkZXJzLnRyYW5zbGF0ZSgnRm9udHMnKSxcbiAgICAgICAgb25TZXR1cDogb25TZXR1cEVkaXRhYmxlVG9nZ2xlKGVkaXRvciksXG4gICAgICAgIGdldFN1Ym1lbnVJdGVtczogKCkgPT4gbWVudUl0ZW1zLml0ZW1zLnZhbGlkYXRlSXRlbXMobWVudUl0ZW1zLmdldFN0eWxlSXRlbXMoKSlcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCB1bml0cyA9IHtcbiAgICAgIHVuc3VwcG9ydGVkTGVuZ3RoOiBbXG4gICAgICAgICdlbScsXG4gICAgICAgICdleCcsXG4gICAgICAgICdjYXAnLFxuICAgICAgICAnY2gnLFxuICAgICAgICAnaWMnLFxuICAgICAgICAncmVtJyxcbiAgICAgICAgJ2xoJyxcbiAgICAgICAgJ3JsaCcsXG4gICAgICAgICd2dycsXG4gICAgICAgICd2aCcsXG4gICAgICAgICd2aScsXG4gICAgICAgICd2YicsXG4gICAgICAgICd2bWluJyxcbiAgICAgICAgJ3ZtYXgnLFxuICAgICAgICAnY20nLFxuICAgICAgICAnbW0nLFxuICAgICAgICAnUScsXG4gICAgICAgICdpbicsXG4gICAgICAgICdwYycsXG4gICAgICAgICdwdCcsXG4gICAgICAgICdweCdcbiAgICAgIF0sXG4gICAgICBmaXhlZDogW1xuICAgICAgICAncHgnLFxuICAgICAgICAncHQnXG4gICAgICBdLFxuICAgICAgcmVsYXRpdmU6IFsnJSddLFxuICAgICAgZW1wdHk6IFsnJ11cbiAgICB9O1xuICAgIGNvbnN0IHBhdHRlcm4gPSAoKCkgPT4ge1xuICAgICAgY29uc3QgZGVjaW1hbERpZ2l0cyA9ICdbMC05XSsnO1xuICAgICAgY29uc3Qgc2lnbmVkSW50ZWdlciA9ICdbKy1dPycgKyBkZWNpbWFsRGlnaXRzO1xuICAgICAgY29uc3QgZXhwb25lbnRQYXJ0ID0gJ1tlRV0nICsgc2lnbmVkSW50ZWdlcjtcbiAgICAgIGNvbnN0IGRvdCA9ICdcXFxcLic7XG4gICAgICBjb25zdCBvcHQgPSBpbnB1dCA9PiBgKD86JHsgaW5wdXQgfSk/YDtcbiAgICAgIGNvbnN0IHVuc2lnbmVkRGVjaW1hbExpdGVyYWwgPSBbXG4gICAgICAgICdJbmZpbml0eScsXG4gICAgICAgIGRlY2ltYWxEaWdpdHMgKyBkb3QgKyBvcHQoZGVjaW1hbERpZ2l0cykgKyBvcHQoZXhwb25lbnRQYXJ0KSxcbiAgICAgICAgZG90ICsgZGVjaW1hbERpZ2l0cyArIG9wdChleHBvbmVudFBhcnQpLFxuICAgICAgICBkZWNpbWFsRGlnaXRzICsgb3B0KGV4cG9uZW50UGFydClcbiAgICAgIF0uam9pbignfCcpO1xuICAgICAgY29uc3QgZmxvYXQgPSBgWystXT8oPzokeyB1bnNpZ25lZERlY2ltYWxMaXRlcmFsIH0pYDtcbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKGBeKCR7IGZsb2F0IH0pKC4qKSRgKTtcbiAgICB9KSgpO1xuICAgIGNvbnN0IGlzVW5pdCA9ICh1bml0LCBhY2NlcHRlZCkgPT4gZXhpc3RzKGFjY2VwdGVkLCBhY2MgPT4gZXhpc3RzKHVuaXRzW2FjY10sIGNoZWNrID0+IHVuaXQgPT09IGNoZWNrKSk7XG4gICAgY29uc3QgcGFyc2UgPSAoaW5wdXQsIGFjY2VwdGVkKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaCA9IE9wdGlvbmFsLmZyb20ocGF0dGVybi5leGVjKGlucHV0KSk7XG4gICAgICByZXR1cm4gbWF0Y2guYmluZChhcnJheSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gTnVtYmVyKGFycmF5WzFdKTtcbiAgICAgICAgY29uc3QgdW5pdFJhdyA9IGFycmF5WzJdO1xuICAgICAgICBpZiAoaXNVbml0KHVuaXRSYXcsIGFjY2VwdGVkKSkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdW5pdDogdW5pdFJhd1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXNlID0gKGlucHV0LCBhY2NlcHRlZCkgPT4gcGFyc2UoaW5wdXQsIGFjY2VwdGVkKS5tYXAoKHt2YWx1ZSwgdW5pdH0pID0+IHZhbHVlICsgdW5pdCk7XG5cbiAgICBjb25zdCBLZXlzID0ge1xuICAgICAgdGFiOiBjb25zdGFudCQxKDkpLFxuICAgICAgZXNjYXBlOiBjb25zdGFudCQxKDI3KSxcbiAgICAgIGVudGVyOiBjb25zdGFudCQxKDEzKSxcbiAgICAgIGJhY2tzcGFjZTogY29uc3RhbnQkMSg4KSxcbiAgICAgIGRlbGV0ZTogY29uc3RhbnQkMSg0NiksXG4gICAgICBsZWZ0OiBjb25zdGFudCQxKDM3KSxcbiAgICAgIHVwOiBjb25zdGFudCQxKDM4KSxcbiAgICAgIHJpZ2h0OiBjb25zdGFudCQxKDM5KSxcbiAgICAgIGRvd246IGNvbnN0YW50JDEoNDApLFxuICAgICAgc3BhY2U6IGNvbnN0YW50JDEoMzIpLFxuICAgICAgaG9tZTogY29uc3RhbnQkMSgzNiksXG4gICAgICBlbmQ6IGNvbnN0YW50JDEoMzUpLFxuICAgICAgcGFnZVVwOiBjb25zdGFudCQxKDMzKSxcbiAgICAgIHBhZ2VEb3duOiBjb25zdGFudCQxKDM0KVxuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGVCZXNwb2tlTnVtYmVySW5wdXQgPSAoZWRpdG9yLCBiYWNrc3RhZ2UsIHNwZWMpID0+IHtcbiAgICAgIGxldCBjdXJyZW50Q29tcCA9IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIGNvbnN0IGdldFZhbHVlRnJvbUN1cnJlbnRDb21wID0gY29tcCA9PiBjb21wLm1hcChhbGxveUNvbXAgPT4gUmVwcmVzZW50aW5nLmdldFZhbHVlKGFsbG95Q29tcCkpLmdldE9yKCcnKTtcbiAgICAgIGNvbnN0IG9uU2V0dXAgPSBvblNldHVwRXZlbnQoZWRpdG9yLCAnTm9kZUNoYW5nZSBTd2l0Y2hNb2RlJywgYXBpID0+IHtcbiAgICAgICAgY29uc3QgY29tcCA9IGFwaS5nZXRDb21wb25lbnQoKTtcbiAgICAgICAgY3VycmVudENvbXAgPSBPcHRpb25hbC5zb21lKGNvbXApO1xuICAgICAgICBzcGVjLnVwZGF0ZUlucHV0VmFsdWUoY29tcCk7XG4gICAgICAgIERpc2FibGluZy5zZXQoY29tcCwgIWVkaXRvci5zZWxlY3Rpb24uaXNFZGl0YWJsZSgpKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZ2V0QXBpID0gY29tcCA9PiAoeyBnZXRDb21wb25lbnQ6IGNvbnN0YW50JDEoY29tcCkgfSk7XG4gICAgICBjb25zdCBlZGl0b3JPZmZDZWxsID0gQ2VsbChub29wKTtcbiAgICAgIGNvbnN0IGN1c3RvbUV2ZW50cyA9IGdlbmVyYXRlJDYoJ2N1c3RvbS1udW1iZXItaW5wdXQtZXZlbnRzJyk7XG4gICAgICBjb25zdCBjaGFuZ2VWYWx1ZSA9IChmLCBmcm9tSW5wdXQsIGZvY3VzQmFjaykgPT4ge1xuICAgICAgICBjb25zdCB0ZXh0ID0gZ2V0VmFsdWVGcm9tQ3VycmVudENvbXAoY3VycmVudENvbXApO1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHNwZWMuZ2V0TmV3VmFsdWUodGV4dCwgZik7XG4gICAgICAgIGNvbnN0IGxlbmdodERlbHRhID0gdGV4dC5sZW5ndGggLSBgJHsgbmV3VmFsdWUgfWAubGVuZ3RoO1xuICAgICAgICBjb25zdCBvbGRTdGFydCA9IGN1cnJlbnRDb21wLm1hcChjb21wID0+IGNvbXAuZWxlbWVudC5kb20uc2VsZWN0aW9uU3RhcnQgLSBsZW5naHREZWx0YSk7XG4gICAgICAgIGNvbnN0IG9sZEVuZCA9IGN1cnJlbnRDb21wLm1hcChjb21wID0+IGNvbXAuZWxlbWVudC5kb20uc2VsZWN0aW9uRW5kIC0gbGVuZ2h0RGVsdGEpO1xuICAgICAgICBzcGVjLm9uQWN0aW9uKG5ld1ZhbHVlLCBmb2N1c0JhY2spO1xuICAgICAgICBjdXJyZW50Q29tcC5lYWNoKGNvbXAgPT4ge1xuICAgICAgICAgIFJlcHJlc2VudGluZy5zZXRWYWx1ZShjb21wLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgaWYgKGZyb21JbnB1dCkge1xuICAgICAgICAgICAgb2xkU3RhcnQuZWFjaChvbGRTdGFydCA9PiBjb21wLmVsZW1lbnQuZG9tLnNlbGVjdGlvblN0YXJ0ID0gb2xkU3RhcnQpO1xuICAgICAgICAgICAgb2xkRW5kLmVhY2gob2xkRW5kID0+IGNvbXAuZWxlbWVudC5kb20uc2VsZWN0aW9uRW5kID0gb2xkRW5kKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRlY3JlYXNlID0gKGZyb21JbnB1dCwgZm9jdXNCYWNrKSA9PiBjaGFuZ2VWYWx1ZSgobiwgcykgPT4gbiAtIHMsIGZyb21JbnB1dCwgZm9jdXNCYWNrKTtcbiAgICAgIGNvbnN0IGluY3JlYXNlID0gKGZyb21JbnB1dCwgZm9jdXNCYWNrKSA9PiBjaGFuZ2VWYWx1ZSgobiwgcykgPT4gbiArIHMsIGZyb21JbnB1dCwgZm9jdXNCYWNrKTtcbiAgICAgIGNvbnN0IGdvVG9QYXJlbnQgPSBjb21wID0+IHBhcmVudEVsZW1lbnQoY29tcC5lbGVtZW50KS5mb2xkKE9wdGlvbmFsLm5vbmUsIHBhcmVudCA9PiB7XG4gICAgICAgIGZvY3VzJDMocGFyZW50KTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZvY3VzSW5wdXQgPSBjb21wID0+IHtcbiAgICAgICAgaWYgKGhhc0ZvY3VzKGNvbXAuZWxlbWVudCkpIHtcbiAgICAgICAgICBmaXJzdENoaWxkKGNvbXAuZWxlbWVudCkuZWFjaChpbnB1dCA9PiBmb2N1cyQzKGlucHV0KSk7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG1ha2VTdGVwcGVyQnV0dG9uID0gKGFjdGlvbiwgdGl0bGUsIHRvb2x0aXAsIGNsYXNzZXMpID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlZFRvb2x0aXAgPSBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycy50cmFuc2xhdGUodG9vbHRpcCk7XG4gICAgICAgIGNvbnN0IGFsdEV4ZWN1dGluZyA9IGdlbmVyYXRlJDYoJ2FsdEV4ZWN1dGluZycpO1xuICAgICAgICBjb25zdCBvblNldHVwID0gb25TZXR1cEV2ZW50KGVkaXRvciwgJ05vZGVDaGFuZ2UgU3dpdGNoTW9kZScsIGFwaSA9PiB7XG4gICAgICAgICAgRGlzYWJsaW5nLnNldChhcGkuZ2V0Q29tcG9uZW50KCksICFlZGl0b3Iuc2VsZWN0aW9uLmlzRWRpdGFibGUoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBvbkNsaWNrID0gY29tcCA9PiB7XG4gICAgICAgICAgaWYgKCFEaXNhYmxpbmcuaXNEaXNhYmxlZChjb21wKSkge1xuICAgICAgICAgICAgYWN0aW9uKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIEJ1dHRvbi5za2V0Y2goe1xuICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgdGFnOiAnYnV0dG9uJyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgJ3RpdGxlJzogdHJhbnNsYXRlZFRvb2x0aXAsXG4gICAgICAgICAgICAgICdhcmlhLWxhYmVsJzogdHJhbnNsYXRlZFRvb2x0aXBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGFzc2VzOiBjbGFzc2VzLmNvbmNhdCh0aXRsZSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbXBvbmVudHM6IFtyZW5kZXJJY29uRnJvbVBhY2skMSh0aXRsZSwgYmFja3N0YWdlLnNoYXJlZC5wcm92aWRlcnMuaWNvbnMpXSxcbiAgICAgICAgICBidXR0b25CZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgICBEaXNhYmxpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICAgIGNvbmZpZyhhbHRFeGVjdXRpbmcsIFtcbiAgICAgICAgICAgICAgb25Db250cm9sQXR0YWNoZWQoe1xuICAgICAgICAgICAgICAgIG9uU2V0dXAsXG4gICAgICAgICAgICAgICAgZ2V0QXBpXG4gICAgICAgICAgICAgIH0sIGVkaXRvck9mZkNlbGwpLFxuICAgICAgICAgICAgICBvbkNvbnRyb2xEZXRhY2hlZCh7IGdldEFwaSB9LCBlZGl0b3JPZmZDZWxsKSxcbiAgICAgICAgICAgICAgcnVuJDEoa2V5ZG93bigpLCAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc2UuZXZlbnQucmF3LmtleUNvZGUgPT09IEtleXMuc3BhY2UoKSB8fCBzZS5ldmVudC5yYXcua2V5Q29kZSA9PT0gS2V5cy5lbnRlcigpKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoIURpc2FibGluZy5pc0Rpc2FibGVkKGNvbXApKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgcnVuJDEoY2xpY2soKSwgb25DbGljayksXG4gICAgICAgICAgICAgIHJ1biQxKHRvdWNoZW5kKCksIG9uQ2xpY2spXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIGV2ZW50T3JkZXI6IHtcbiAgICAgICAgICAgIFtrZXlkb3duKCldOiBbXG4gICAgICAgICAgICAgIGFsdEV4ZWN1dGluZyxcbiAgICAgICAgICAgICAgJ2tleWluZydcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbY2xpY2soKV06IFtcbiAgICAgICAgICAgICAgYWx0RXhlY3V0aW5nLFxuICAgICAgICAgICAgICAnYWxsb3kuYmFzZS5iZWhhdmlvdXInXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW3RvdWNoZW5kKCldOiBbXG4gICAgICAgICAgICAgIGFsdEV4ZWN1dGluZyxcbiAgICAgICAgICAgICAgJ2FsbG95LmJhc2UuYmVoYXZpb3VyJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgbWVtTWludXMgPSByZWNvcmQobWFrZVN0ZXBwZXJCdXR0b24oZm9jdXNCYWNrID0+IGRlY3JlYXNlKGZhbHNlLCBmb2N1c0JhY2spLCAnbWludXMnLCAnRGVjcmVhc2UgZm9udCBzaXplJywgWydoaWdobGlnaHQtb24tZm9jdXMnXSkpO1xuICAgICAgY29uc3QgbWVtUGx1cyA9IHJlY29yZChtYWtlU3RlcHBlckJ1dHRvbihmb2N1c0JhY2sgPT4gaW5jcmVhc2UoZmFsc2UsIGZvY3VzQmFjayksICdwbHVzJywgJ0luY3JlYXNlIGZvbnQgc2l6ZScsIFsnaGlnaGxpZ2h0LW9uLWZvY3VzJ10pKTtcbiAgICAgIGNvbnN0IG1lbUlucHV0ID0gcmVjb3JkKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbXG4gICAgICAgICAgICAndG94LWlucHV0LXdyYXBwZXInLFxuICAgICAgICAgICAgJ2hpZ2hsaWdodC1vbi1mb2N1cydcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtJbnB1dC5za2V0Y2goe1xuICAgICAgICAgICAgaW5wdXRCZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgICAgIERpc2FibGluZy5jb25maWcoe30pLFxuICAgICAgICAgICAgICBjb25maWcoY3VzdG9tRXZlbnRzLCBbXG4gICAgICAgICAgICAgICAgb25Db250cm9sQXR0YWNoZWQoe1xuICAgICAgICAgICAgICAgICAgb25TZXR1cCxcbiAgICAgICAgICAgICAgICAgIGdldEFwaVxuICAgICAgICAgICAgICAgIH0sIGVkaXRvck9mZkNlbGwpLFxuICAgICAgICAgICAgICAgIG9uQ29udHJvbERldGFjaGVkKHsgZ2V0QXBpIH0sIGVkaXRvck9mZkNlbGwpXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBjb25maWcoJ2lucHV0LXVwZGF0ZS1kaXNwbGF5LXRleHQnLCBbXG4gICAgICAgICAgICAgICAgcnVuJDEodXBkYXRlTWVudVRleHQsIChjb21wLCBzZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgUmVwcmVzZW50aW5nLnNldFZhbHVlKGNvbXAsIHNlLmV2ZW50LnRleHQpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHJ1biQxKGZvY3Vzb3V0KCksIGNvbXAgPT4ge1xuICAgICAgICAgICAgICAgICAgc3BlYy5vbkFjdGlvbihSZXByZXNlbnRpbmcuZ2V0VmFsdWUoY29tcCkpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHJ1biQxKGNoYW5nZSgpLCBjb21wID0+IHtcbiAgICAgICAgICAgICAgICAgIHNwZWMub25BY3Rpb24oUmVwcmVzZW50aW5nLmdldFZhbHVlKGNvbXApKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICAgICAgbW9kZTogJ3NwZWNpYWwnLFxuICAgICAgICAgICAgICAgIG9uRW50ZXI6IF9jb21wID0+IHtcbiAgICAgICAgICAgICAgICAgIGNoYW5nZVZhbHVlKGlkZW50aXR5LCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHRydWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25Fc2NhcGU6IGdvVG9QYXJlbnQsXG4gICAgICAgICAgICAgICAgb25VcDogX2NvbXAgPT4ge1xuICAgICAgICAgICAgICAgICAgaW5jcmVhc2UodHJ1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbkRvd246IF9jb21wID0+IHtcbiAgICAgICAgICAgICAgICAgIGRlY3JlYXNlKHRydWUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHRydWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25MZWZ0OiAoX2NvbXAsIHNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZS5jdXQoKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvblJpZ2h0OiAoX2NvbXAsIHNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZS5jdXQoKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICB9KV0sXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBGb2N1c2luZy5jb25maWcoe30pLFxuICAgICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgICAgbW9kZTogJ3NwZWNpYWwnLFxuICAgICAgICAgICAgb25FbnRlcjogZm9jdXNJbnB1dCxcbiAgICAgICAgICAgIG9uU3BhY2U6IGZvY3VzSW5wdXQsXG4gICAgICAgICAgICBvbkVzY2FwZTogZ29Ub1BhcmVudFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNvbmZpZygnaW5wdXQtd3JhcHBlci1ldmVudHMnLCBbcnVuJDEobW91c2VvdmVyKCksIGNvbXAgPT4ge1xuICAgICAgICAgICAgICBlYWNoJDEoW1xuICAgICAgICAgICAgICAgIG1lbU1pbnVzLFxuICAgICAgICAgICAgICAgIG1lbVBsdXNcbiAgICAgICAgICAgICAgXSwgYnV0dG9uID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBidXR0b25Ob2RlID0gU3VnYXJFbGVtZW50LmZyb21Eb20oYnV0dG9uLmdldChjb21wKS5lbGVtZW50LmRvbSk7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0ZvY3VzKGJ1dHRvbk5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICBibHVyJDEoYnV0dG9uTm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXSlcbiAgICAgICAgXSlcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1udW1iZXItaW5wdXQnXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgbWVtTWludXMuYXNTcGVjKCksXG4gICAgICAgICAgbWVtSW5wdXQuYXNTcGVjKCksXG4gICAgICAgICAgbWVtUGx1cy5hc1NwZWMoKVxuICAgICAgICBdLFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgRm9jdXNpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICBLZXlpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIG1vZGU6ICdmbG93JyxcbiAgICAgICAgICAgIGZvY3VzSW5zaWRlOiBGb2N1c0luc2lkZU1vZGVzLk9uRW50ZXJPclNwYWNlTW9kZSxcbiAgICAgICAgICAgIGN5Y2xlczogZmFsc2UsXG4gICAgICAgICAgICBzZWxlY3RvcjogJ2J1dHRvbiwgLnRveC1pbnB1dC13cmFwcGVyJyxcbiAgICAgICAgICAgIG9uRXNjYXBlOiB3cmFwcGVyQ29tcCA9PiB7XG4gICAgICAgICAgICAgIGlmIChoYXNGb2N1cyh3cmFwcGVyQ29tcC5lbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9jdXMkMyh3cmFwcGVyQ29tcC5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBsZWdhY3lGb250U2l6ZXMgPSB7XG4gICAgICAnOHB0JzogJzEnLFxuICAgICAgJzEwcHQnOiAnMicsXG4gICAgICAnMTJwdCc6ICczJyxcbiAgICAgICcxNHB0JzogJzQnLFxuICAgICAgJzE4cHQnOiAnNScsXG4gICAgICAnMjRwdCc6ICc2JyxcbiAgICAgICczNnB0JzogJzcnXG4gICAgfTtcbiAgICBjb25zdCBrZXl3b3JkRm9udFNpemVzID0ge1xuICAgICAgJ3h4LXNtYWxsJzogJzdwdCcsXG4gICAgICAneC1zbWFsbCc6ICc4cHQnLFxuICAgICAgJ3NtYWxsJzogJzEwcHQnLFxuICAgICAgJ21lZGl1bSc6ICcxMnB0JyxcbiAgICAgICdsYXJnZSc6ICcxNHB0JyxcbiAgICAgICd4LWxhcmdlJzogJzE4cHQnLFxuICAgICAgJ3h4LWxhcmdlJzogJzI0cHQnXG4gICAgfTtcbiAgICBjb25zdCByb3VuZCA9IChudW1iZXIsIHByZWNpc2lvbikgPT4ge1xuICAgICAgY29uc3QgZmFjdG9yID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbik7XG4gICAgICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIgKiBmYWN0b3IpIC8gZmFjdG9yO1xuICAgIH07XG4gICAgY29uc3QgdG9QdCA9IChmb250U2l6ZSwgcHJlY2lzaW9uKSA9PiB7XG4gICAgICBpZiAoL1swLTkuXStweCQvLnRlc3QoZm9udFNpemUpKSB7XG4gICAgICAgIHJldHVybiByb3VuZChwYXJzZUludChmb250U2l6ZSwgMTApICogNzIgLyA5NiwgcHJlY2lzaW9uIHx8IDApICsgJ3B0JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBnZXQkZyhrZXl3b3JkRm9udFNpemVzLCBmb250U2l6ZSkuZ2V0T3IoZm9udFNpemUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdG9MZWdhY3kgPSBmb250U2l6ZSA9PiBnZXQkZyhsZWdhY3lGb250U2l6ZXMsIGZvbnRTaXplKS5nZXRPcignJyk7XG4gICAgY29uc3QgZ2V0U3BlYyQxID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGdldE1hdGNoaW5nVmFsdWUgPSAoKSA9PiB7XG4gICAgICAgIGxldCBtYXRjaE9wdCA9IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBkYXRhc2V0LmRhdGE7XG4gICAgICAgIGNvbnN0IGZvbnRTaXplID0gZWRpdG9yLnF1ZXJ5Q29tbWFuZFZhbHVlKCdGb250U2l6ZScpO1xuICAgICAgICBpZiAoZm9udFNpemUpIHtcbiAgICAgICAgICBmb3IgKGxldCBwcmVjaXNpb24gPSAzOyBtYXRjaE9wdC5pc05vbmUoKSAmJiBwcmVjaXNpb24gPj0gMDsgcHJlY2lzaW9uLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHB0ID0gdG9QdChmb250U2l6ZSwgcHJlY2lzaW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGxlZ2FjeSA9IHRvTGVnYWN5KHB0KTtcbiAgICAgICAgICAgIG1hdGNoT3B0ID0gZmluZCQ1KGl0ZW1zLCBpdGVtID0+IGl0ZW0uZm9ybWF0ID09PSBmb250U2l6ZSB8fCBpdGVtLmZvcm1hdCA9PT0gcHQgfHwgaXRlbS5mb3JtYXQgPT09IGxlZ2FjeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWF0Y2hPcHQsXG4gICAgICAgICAgc2l6ZTogZm9udFNpemVcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1NlbGVjdGVkRm9yID0gaXRlbSA9PiB2YWx1ZU9wdCA9PiB2YWx1ZU9wdC5leGlzdHModmFsdWUgPT4gdmFsdWUuZm9ybWF0ID09PSBpdGVtKTtcbiAgICAgIGNvbnN0IGdldEN1cnJlbnRWYWx1ZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qge21hdGNoT3B0fSA9IGdldE1hdGNoaW5nVmFsdWUoKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoT3B0O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldFByZXZpZXdGb3IgPSBjb25zdGFudCQxKE9wdGlvbmFsLm5vbmUpO1xuICAgICAgY29uc3Qgb25BY3Rpb24gPSByYXdJdGVtID0+ICgpID0+IHtcbiAgICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ0ZvbnRTaXplJywgZmFsc2UsIHJhd0l0ZW0uZm9ybWF0KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdXBkYXRlU2VsZWN0TWVudVRleHQgPSBjb21wID0+IHtcbiAgICAgICAgY29uc3Qge21hdGNoT3B0LCBzaXplfSA9IGdldE1hdGNoaW5nVmFsdWUoKTtcbiAgICAgICAgY29uc3QgdGV4dCA9IG1hdGNoT3B0LmZvbGQoY29uc3RhbnQkMShzaXplKSwgbWF0Y2ggPT4gbWF0Y2gudGl0bGUpO1xuICAgICAgICBlbWl0V2l0aChjb21wLCB1cGRhdGVNZW51VGV4dCwgeyB0ZXh0IH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSBidWlsZEJhc2ljU2V0dGluZ3NEYXRhc2V0KGVkaXRvciwgJ2ZvbnRfc2l6ZV9mb3JtYXRzJywgRGVsaW1pdGVyLlNwYWNlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvb2x0aXA6ICdGb250IHNpemVzJyxcbiAgICAgICAgdGV4dDogT3B0aW9uYWwuc29tZSgnMTJwdCcpLFxuICAgICAgICBpY29uOiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGlzU2VsZWN0ZWRGb3IsXG4gICAgICAgIGdldFByZXZpZXdGb3IsXG4gICAgICAgIGdldEN1cnJlbnRWYWx1ZSxcbiAgICAgICAgb25BY3Rpb24sXG4gICAgICAgIHVwZGF0ZVRleHQ6IHVwZGF0ZVNlbGVjdE1lbnVUZXh0LFxuICAgICAgICBkYXRhc2V0LFxuICAgICAgICBzaG91bGRIaWRlOiBmYWxzZSxcbiAgICAgICAgaXNJbnZhbGlkOiBuZXZlclxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUZvbnRTaXplQnV0dG9uID0gKGVkaXRvciwgYmFja3N0YWdlKSA9PiBjcmVhdGVTZWxlY3RCdXR0b24oZWRpdG9yLCBiYWNrc3RhZ2UsIGdldFNwZWMkMShlZGl0b3IpKTtcbiAgICBjb25zdCBnZXRDb25maWdGcm9tVW5pdCA9IHVuaXQgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgYmFzZUNvbmZpZyA9IHsgc3RlcDogMSB9O1xuICAgICAgY29uc3QgY29uZmlncyA9IHtcbiAgICAgICAgZW06IHsgc3RlcDogMC4xIH0sXG4gICAgICAgIGNtOiB7IHN0ZXA6IDAuMSB9LFxuICAgICAgICBpbjogeyBzdGVwOiAwLjEgfSxcbiAgICAgICAgcGM6IHsgc3RlcDogMC4xIH0sXG4gICAgICAgIGNoOiB7IHN0ZXA6IDAuMSB9LFxuICAgICAgICByZW06IHsgc3RlcDogMC4xIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gKF9hID0gY29uZmlnc1t1bml0XSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogYmFzZUNvbmZpZztcbiAgICB9O1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IDE2O1xuICAgIGNvbnN0IGlzVmFsaWRWYWx1ZSA9IHZhbHVlID0+IHZhbHVlID49IDA7XG4gICAgY29uc3QgZ2V0TnVtYmVySW5wdXRTcGVjID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGdldEN1cnJlbnRWYWx1ZSA9ICgpID0+IGVkaXRvci5xdWVyeUNvbW1hbmRWYWx1ZSgnRm9udFNpemUnKTtcbiAgICAgIGNvbnN0IHVwZGF0ZUlucHV0VmFsdWUgPSBjb21wID0+IGVtaXRXaXRoKGNvbXAsIHVwZGF0ZU1lbnVUZXh0LCB7IHRleHQ6IGdldEN1cnJlbnRWYWx1ZSgpIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdXBkYXRlSW5wdXRWYWx1ZSxcbiAgICAgICAgb25BY3Rpb246IChmb3JtYXQsIGZvY3VzQmFjaykgPT4gZWRpdG9yLmV4ZWNDb21tYW5kKCdGb250U2l6ZScsIGZhbHNlLCBmb3JtYXQsIHsgc2tpcF9mb2N1czogIWZvY3VzQmFjayB9KSxcbiAgICAgICAgZ2V0TmV3VmFsdWU6ICh0ZXh0LCB1cGRhdGVGdW5jdGlvbikgPT4ge1xuICAgICAgICAgIHBhcnNlKHRleHQsIFtcbiAgICAgICAgICAgICd1bnN1cHBvcnRlZExlbmd0aCcsXG4gICAgICAgICAgICAnZW1wdHknXG4gICAgICAgICAgXSk7XG4gICAgICAgICAgY29uc3QgcGFyc2VkVGV4dCA9IHBhcnNlKHRleHQsIFtcbiAgICAgICAgICAgICd1bnN1cHBvcnRlZExlbmd0aCcsXG4gICAgICAgICAgICAnZW1wdHknXG4gICAgICAgICAgXSkub3IocGFyc2UoZ2V0Q3VycmVudFZhbHVlKCksIFtcbiAgICAgICAgICAgICd1bnN1cHBvcnRlZExlbmd0aCcsXG4gICAgICAgICAgICAnZW1wdHknXG4gICAgICAgICAgXSkpO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VkVGV4dC5tYXAocmVzID0+IHJlcy52YWx1ZSkuZ2V0T3IoZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICBjb25zdCBkZWZhdWx0VW5pdCA9IGdldEZvbnRTaXplSW5wdXREZWZhdWx0VW5pdChlZGl0b3IpO1xuICAgICAgICAgIGNvbnN0IHVuaXQgPSBwYXJzZWRUZXh0Lm1hcChyZXMgPT4gcmVzLnVuaXQpLmZpbHRlcih1ID0+IHUgIT09ICcnKS5nZXRPcihkZWZhdWx0VW5pdCk7XG4gICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB1cGRhdGVGdW5jdGlvbih2YWx1ZSwgZ2V0Q29uZmlnRnJvbVVuaXQodW5pdCkuc3RlcCk7XG4gICAgICAgICAgcmV0dXJuIGAkeyBpc1ZhbGlkVmFsdWUobmV3VmFsdWUpID8gbmV3VmFsdWUgOiB2YWx1ZSB9JHsgdW5pdCB9YDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUZvbnRTaXplSW5wdXRCdXR0b24gPSAoZWRpdG9yLCBiYWNrc3RhZ2UpID0+IGNyZWF0ZUJlc3Bva2VOdW1iZXJJbnB1dChlZGl0b3IsIGJhY2tzdGFnZSwgZ2V0TnVtYmVySW5wdXRTcGVjKGVkaXRvcikpO1xuICAgIGNvbnN0IGNyZWF0ZUZvbnRTaXplTWVudSA9IChlZGl0b3IsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgbWVudUl0ZW1zID0gY3JlYXRlTWVudUl0ZW1zKGVkaXRvciwgYmFja3N0YWdlLCBnZXRTcGVjJDEoZWRpdG9yKSk7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTmVzdGVkTWVudUl0ZW0oJ2ZvbnRzaXplJywge1xuICAgICAgICB0ZXh0OiAnRm9udCBzaXplcycsXG4gICAgICAgIG9uU2V0dXA6IG9uU2V0dXBFZGl0YWJsZVRvZ2dsZShlZGl0b3IpLFxuICAgICAgICBnZXRTdWJtZW51SXRlbXM6ICgpID0+IG1lbnVJdGVtcy5pdGVtcy52YWxpZGF0ZUl0ZW1zKG1lbnVJdGVtcy5nZXRTdHlsZUl0ZW1zKCkpXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0U3BlYyA9IChlZGl0b3IsIGRhdGFzZXQpID0+IHtcbiAgICAgIGNvbnN0IGZhbGxiYWNrRm9ybWF0ID0gJ1BhcmFncmFwaCc7XG4gICAgICBjb25zdCBpc1NlbGVjdGVkRm9yID0gZm9ybWF0ID0+ICgpID0+IGVkaXRvci5mb3JtYXR0ZXIubWF0Y2goZm9ybWF0KTtcbiAgICAgIGNvbnN0IGdldFByZXZpZXdGb3IgPSBmb3JtYXQgPT4gKCkgPT4ge1xuICAgICAgICBjb25zdCBmbXQgPSBlZGl0b3IuZm9ybWF0dGVyLmdldChmb3JtYXQpO1xuICAgICAgICByZXR1cm4gZm10ICE9PSB1bmRlZmluZWQgPyBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICB0YWc6IGZtdC5sZW5ndGggPiAwID8gZm10WzBdLmlubGluZSB8fCBmbXRbMF0uYmxvY2sgfHwgJ2RpdicgOiAnZGl2JyxcbiAgICAgICAgICBzdHlsZXM6IGVkaXRvci5kb20ucGFyc2VTdHlsZShlZGl0b3IuZm9ybWF0dGVyLmdldENzc1RleHQoZm9ybWF0KSlcbiAgICAgICAgfSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdXBkYXRlU2VsZWN0TWVudVRleHQgPSBjb21wID0+IHtcbiAgICAgICAgY29uc3QgZ2V0Rm9ybWF0SXRlbXMgPSBmbXQgPT4ge1xuICAgICAgICAgIGlmIChpc05lc3RlZEZvcm1hdChmbXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gYmluZCQzKGZtdC5pdGVtcywgZ2V0Rm9ybWF0SXRlbXMpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNGb3JtYXRSZWZlcmVuY2UoZm10KSkge1xuICAgICAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgICAgICAgdGl0bGU6IGZtdC50aXRsZSxcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IGZtdC5mb3JtYXRcbiAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZsYXR0ZW5lZEl0ZW1zID0gYmluZCQzKGdldFN0eWxlRm9ybWF0cyhlZGl0b3IpLCBnZXRGb3JtYXRJdGVtcyk7XG4gICAgICAgIGNvbnN0IGRldGVjdGVkRm9ybWF0ID0gZmluZE5lYXJlc3QoZWRpdG9yLCBjb25zdGFudCQxKGZsYXR0ZW5lZEl0ZW1zKSk7XG4gICAgICAgIGNvbnN0IHRleHQgPSBkZXRlY3RlZEZvcm1hdC5mb2xkKGNvbnN0YW50JDEoZmFsbGJhY2tGb3JtYXQpLCBmbXQgPT4gZm10LnRpdGxlKTtcbiAgICAgICAgZW1pdFdpdGgoY29tcCwgdXBkYXRlTWVudVRleHQsIHsgdGV4dCB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b29sdGlwOiAnRm9ybWF0cycsXG4gICAgICAgIHRleHQ6IE9wdGlvbmFsLnNvbWUoZmFsbGJhY2tGb3JtYXQpLFxuICAgICAgICBpY29uOiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIGlzU2VsZWN0ZWRGb3IsXG4gICAgICAgIGdldEN1cnJlbnRWYWx1ZTogT3B0aW9uYWwubm9uZSxcbiAgICAgICAgZ2V0UHJldmlld0ZvcixcbiAgICAgICAgb25BY3Rpb246IG9uQWN0aW9uVG9nZ2xlRm9ybWF0JDEoZWRpdG9yKSxcbiAgICAgICAgdXBkYXRlVGV4dDogdXBkYXRlU2VsZWN0TWVudVRleHQsXG4gICAgICAgIHNob3VsZEhpZGU6IHNob3VsZEF1dG9IaWRlU3R5bGVGb3JtYXRzKGVkaXRvciksXG4gICAgICAgIGlzSW52YWxpZDogaXRlbSA9PiAhZWRpdG9yLmZvcm1hdHRlci5jYW5BcHBseShpdGVtLmZvcm1hdCksXG4gICAgICAgIGRhdGFzZXRcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVTdHlsZXNCdXR0b24gPSAoZWRpdG9yLCBiYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSB7XG4gICAgICAgIHR5cGU6ICdhZHZhbmNlZCcsXG4gICAgICAgIC4uLmJhY2tzdGFnZS5zdHlsZXNcbiAgICAgIH07XG4gICAgICByZXR1cm4gY3JlYXRlU2VsZWN0QnV0dG9uKGVkaXRvciwgYmFja3N0YWdlLCBnZXRTcGVjKGVkaXRvciwgZGF0YXNldCkpO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlU3R5bGVzTWVudSA9IChlZGl0b3IsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgZGF0YXNldCA9IHtcbiAgICAgICAgdHlwZTogJ2FkdmFuY2VkJyxcbiAgICAgICAgLi4uYmFja3N0YWdlLnN0eWxlc1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG1lbnVJdGVtcyA9IGNyZWF0ZU1lbnVJdGVtcyhlZGl0b3IsIGJhY2tzdGFnZSwgZ2V0U3BlYyhlZGl0b3IsIGRhdGFzZXQpKTtcbiAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGROZXN0ZWRNZW51SXRlbSgnc3R5bGVzJywge1xuICAgICAgICB0ZXh0OiAnRm9ybWF0cycsXG4gICAgICAgIG9uU2V0dXA6IG9uU2V0dXBFZGl0YWJsZVRvZ2dsZShlZGl0b3IpLFxuICAgICAgICBnZXRTdWJtZW51SXRlbXM6ICgpID0+IG1lbnVJdGVtcy5pdGVtcy52YWxpZGF0ZUl0ZW1zKG1lbnVJdGVtcy5nZXRTdHlsZUl0ZW1zKCkpXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2NoZW1hJDcgPSBjb25zdGFudCQxKFtcbiAgICAgIHJlcXVpcmVkJDEoJ3RvZ2dsZUNsYXNzJyksXG4gICAgICByZXF1aXJlZCQxKCdmZXRjaCcpLFxuICAgICAgb25TdHJpY3RIYW5kbGVyKCdvbkV4ZWN1dGUnKSxcbiAgICAgIGRlZmF1bHRlZCgnZ2V0SG90c3BvdCcsIE9wdGlvbmFsLnNvbWUpLFxuICAgICAgZGVmYXVsdGVkKCdnZXRBbmNob3JPdmVycmlkZXMnLCBjb25zdGFudCQxKHt9KSksXG4gICAgICBzY2hlbWEkeSgpLFxuICAgICAgb25TdHJpY3RIYW5kbGVyKCdvbkl0ZW1FeGVjdXRlJyksXG4gICAgICBvcHRpb24kMygnbGF6eVNpbmsnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ2RvbScpLFxuICAgICAgb25IYW5kbGVyKCdvbk9wZW4nKSxcbiAgICAgIGZpZWxkKCdzcGxpdERyb3Bkb3duQmVoYXZpb3VycycsIFtcbiAgICAgICAgQ291cGxpbmcsXG4gICAgICAgIEtleWluZyxcbiAgICAgICAgRm9jdXNpbmdcbiAgICAgIF0pLFxuICAgICAgZGVmYXVsdGVkKCdtYXRjaFdpZHRoJywgZmFsc2UpLFxuICAgICAgZGVmYXVsdGVkKCd1c2VNaW5XaWR0aCcsIGZhbHNlKSxcbiAgICAgIGRlZmF1bHRlZCgnZXZlbnRPcmRlcicsIHt9KSxcbiAgICAgIG9wdGlvbiQzKCdyb2xlJylcbiAgICBdLmNvbmNhdChzYW5kYm94RmllbGRzKCkpKTtcbiAgICBjb25zdCBhcnJvd1BhcnQgPSByZXF1aXJlZCh7XG4gICAgICBmYWN0b3J5OiBCdXR0b24sXG4gICAgICBzY2hlbWE6IFtyZXF1aXJlZCQxKCdkb20nKV0sXG4gICAgICBuYW1lOiAnYXJyb3cnLFxuICAgICAgZGVmYXVsdHM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgYnV0dG9uQmVoYXZpb3VyczogZGVyaXZlJDEoW0ZvY3VzaW5nLnJldm9rZSgpXSkgfTtcbiAgICAgIH0sXG4gICAgICBvdmVycmlkZXM6IGRldGFpbCA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICB0YWc6ICdzcGFuJyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3ByZXNlbnRhdGlvbicgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWN0aW9uOiBhcnJvdyA9PiB7XG4gICAgICAgICAgICBhcnJvdy5nZXRTeXN0ZW0oKS5nZXRCeVVpZChkZXRhaWwudWlkKS5lYWNoKGVtaXRFeGVjdXRlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJ1dHRvbkJlaGF2aW91cnM6IGRlcml2ZSQxKFtUb2dnbGluZy5jb25maWcoe1xuICAgICAgICAgICAgICB0b2dnbGVPbkV4ZWN1dGU6IGZhbHNlLFxuICAgICAgICAgICAgICB0b2dnbGVDbGFzczogZGV0YWlsLnRvZ2dsZUNsYXNzXG4gICAgICAgICAgICB9KV0pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgYnV0dG9uUGFydCA9IHJlcXVpcmVkKHtcbiAgICAgIGZhY3Rvcnk6IEJ1dHRvbixcbiAgICAgIHNjaGVtYTogW3JlcXVpcmVkJDEoJ2RvbScpXSxcbiAgICAgIG5hbWU6ICdidXR0b24nLFxuICAgICAgZGVmYXVsdHM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgYnV0dG9uQmVoYXZpb3VyczogZGVyaXZlJDEoW0ZvY3VzaW5nLnJldm9rZSgpXSkgfTtcbiAgICAgIH0sXG4gICAgICBvdmVycmlkZXM6IGRldGFpbCA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICB0YWc6ICdzcGFuJyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3ByZXNlbnRhdGlvbicgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWN0aW9uOiBidG4gPT4ge1xuICAgICAgICAgICAgYnRuLmdldFN5c3RlbSgpLmdldEJ5VWlkKGRldGFpbC51aWQpLmVhY2goc3BsaXREcm9wZG93biA9PiB7XG4gICAgICAgICAgICAgIGRldGFpbC5vbkV4ZWN1dGUoc3BsaXREcm9wZG93biwgYnRuKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBwYXJ0cyQzID0gY29uc3RhbnQkMShbXG4gICAgICBhcnJvd1BhcnQsXG4gICAgICBidXR0b25QYXJ0LFxuICAgICAgb3B0aW9uYWwoe1xuICAgICAgICBmYWN0b3J5OiB7XG4gICAgICAgICAgc2tldGNoOiBzcGVjID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHVpZDogc3BlYy51aWQsXG4gICAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICAgIHRhZzogJ3NwYW4nLFxuICAgICAgICAgICAgICAgIHN0eWxlczogeyBkaXNwbGF5OiAnbm9uZScgfSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7ICdhcmlhLWhpZGRlbic6ICd0cnVlJyB9LFxuICAgICAgICAgICAgICAgIGlubmVySHRtbDogc3BlYy50ZXh0XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzY2hlbWE6IFtyZXF1aXJlZCQxKCd0ZXh0JyldLFxuICAgICAgICBuYW1lOiAnYXJpYS1kZXNjcmlwdG9yJ1xuICAgICAgfSksXG4gICAgICBleHRlcm5hbCh7XG4gICAgICAgIHNjaGVtYTogW3RpZXJlZE1lbnVNYXJrZXJzKCldLFxuICAgICAgICBuYW1lOiAnbWVudScsXG4gICAgICAgIGRlZmF1bHRzOiBkZXRhaWwgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvbkV4ZWN1dGU6ICh0bWVudSwgaXRlbSkgPT4ge1xuICAgICAgICAgICAgICB0bWVudS5nZXRTeXN0ZW0oKS5nZXRCeVVpZChkZXRhaWwudWlkKS5lYWNoKHNwbGl0RHJvcGRvd24gPT4ge1xuICAgICAgICAgICAgICAgIGRldGFpbC5vbkl0ZW1FeGVjdXRlKHNwbGl0RHJvcGRvd24sIHRtZW51LCBpdGVtKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBwYXJ0VHlwZSQxKClcbiAgICBdKTtcblxuICAgIGNvbnN0IGZhY3RvcnkkNSA9IChkZXRhaWwsIGNvbXBvbmVudHMsIHNwZWMsIGV4dGVybmFscykgPT4ge1xuICAgICAgY29uc3Qgc3dpdGNoVG9NZW51ID0gc2FuZGJveCA9PiB7XG4gICAgICAgIENvbXBvc2luZy5nZXRDdXJyZW50KHNhbmRib3gpLmVhY2goY3VycmVudCA9PiB7XG4gICAgICAgICAgSGlnaGxpZ2h0aW5nLmhpZ2hsaWdodEZpcnN0KGN1cnJlbnQpO1xuICAgICAgICAgIEtleWluZy5mb2N1c0luKGN1cnJlbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBhY3Rpb24gPSBjb21wb25lbnQgPT4ge1xuICAgICAgICBjb25zdCBvbk9wZW5TeW5jID0gc3dpdGNoVG9NZW51O1xuICAgICAgICB0b2dnbGVQb3B1cChkZXRhaWwsIGlkZW50aXR5LCBjb21wb25lbnQsIGV4dGVybmFscywgb25PcGVuU3luYywgSGlnaGxpZ2h0T25PcGVuLkhpZ2hsaWdodE1lbnVBbmRJdGVtKS5nZXQobm9vcCk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgb3Blbk1lbnUgPSBjb21wID0+IHtcbiAgICAgICAgYWN0aW9uKGNvbXApO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBleGVjdXRlT25CdXR0b24gPSBjb21wID0+IHtcbiAgICAgICAgY29uc3QgYnV0dG9uID0gZ2V0UGFydE9yRGllKGNvbXAsIGRldGFpbCwgJ2J1dHRvbicpO1xuICAgICAgICBlbWl0RXhlY3V0ZShidXR0b24pO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBidXR0b25FdmVudHMgPSB7XG4gICAgICAgIC4uLmRlcml2ZSQyKFtydW5PbkF0dGFjaGVkKChjb21wb25lbnQsIF9zaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXJpYURlc2NyaXB0b3IgPSBnZXRQYXJ0KGNvbXBvbmVudCwgZGV0YWlsLCAnYXJpYS1kZXNjcmlwdG9yJyk7XG4gICAgICAgICAgICBhcmlhRGVzY3JpcHRvci5lYWNoKGRlc2NyaXB0b3IgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBkZXNjcmlwdG9ySWQgPSBnZW5lcmF0ZSQ2KCdhcmlhJyk7XG4gICAgICAgICAgICAgIHNldCQ5KGRlc2NyaXB0b3IuZWxlbWVudCwgJ2lkJywgZGVzY3JpcHRvcklkKTtcbiAgICAgICAgICAgICAgc2V0JDkoY29tcG9uZW50LmVsZW1lbnQsICdhcmlhLWRlc2NyaWJlZGJ5JywgZGVzY3JpcHRvcklkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pXSksXG4gICAgICAgIC4uLmV2ZW50cyRhKE9wdGlvbmFsLnNvbWUoYWN0aW9uKSlcbiAgICAgIH07XG4gICAgICBjb25zdCBhcGlzID0ge1xuICAgICAgICByZXBvc2l0aW9uTWVudXM6IGNvbXAgPT4ge1xuICAgICAgICAgIGlmIChUb2dnbGluZy5pc09uKGNvbXApKSB7XG4gICAgICAgICAgICByZXBvc2l0aW9uTWVudXMoY29tcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgICBkb206IGRldGFpbC5kb20sXG4gICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgIGFwaXMsXG4gICAgICAgIGV2ZW50T3JkZXI6IHtcbiAgICAgICAgICAuLi5kZXRhaWwuZXZlbnRPcmRlcixcbiAgICAgICAgICBbZXhlY3V0ZSQ1KCldOiBbXG4gICAgICAgICAgICAnZGlzYWJsaW5nJyxcbiAgICAgICAgICAgICd0b2dnbGluZycsXG4gICAgICAgICAgICAnYWxsb3kuYmFzZS5iZWhhdmlvdXInXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBldmVudHM6IGJ1dHRvbkV2ZW50cyxcbiAgICAgICAgYmVoYXZpb3VyczogYXVnbWVudChkZXRhaWwuc3BsaXREcm9wZG93bkJlaGF2aW91cnMsIFtcbiAgICAgICAgICBDb3VwbGluZy5jb25maWcoe1xuICAgICAgICAgICAgb3RoZXJzOiB7XG4gICAgICAgICAgICAgIHNhbmRib3g6IGhvdHNwb3QgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFycm93ID0gZ2V0UGFydE9yRGllKGhvdHNwb3QsIGRldGFpbCwgJ2Fycm93Jyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXh0cmFzID0ge1xuICAgICAgICAgICAgICAgICAgb25PcGVuOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIFRvZ2dsaW5nLm9uKGFycm93KTtcbiAgICAgICAgICAgICAgICAgICAgVG9nZ2xpbmcub24oaG90c3BvdCk7XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgb25DbG9zZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBUb2dnbGluZy5vZmYoYXJyb3cpO1xuICAgICAgICAgICAgICAgICAgICBUb2dnbGluZy5vZmYoaG90c3BvdCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVNhbmRib3gkMShkZXRhaWwsIGhvdHNwb3QsIGV4dHJhcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBLZXlpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIG1vZGU6ICdzcGVjaWFsJyxcbiAgICAgICAgICAgIG9uU3BhY2U6IGV4ZWN1dGVPbkJ1dHRvbixcbiAgICAgICAgICAgIG9uRW50ZXI6IGV4ZWN1dGVPbkJ1dHRvbixcbiAgICAgICAgICAgIG9uRG93bjogb3Blbk1lbnVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBGb2N1c2luZy5jb25maWcoe30pLFxuICAgICAgICAgIFRvZ2dsaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICB0b2dnbGVPbkV4ZWN1dGU6IGZhbHNlLFxuICAgICAgICAgICAgYXJpYTogeyBtb2RlOiAnZXhwYW5kZWQnIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdKSxcbiAgICAgICAgZG9tTW9kaWZpY2F0aW9uOiB7XG4gICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgJ3JvbGUnOiBkZXRhaWwucm9sZS5nZXRPcignYnV0dG9uJyksXG4gICAgICAgICAgICAnYXJpYS1oYXNwb3B1cCc6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBTcGxpdERyb3Bkb3duID0gY29tcG9zaXRlKHtcbiAgICAgIG5hbWU6ICdTcGxpdERyb3Bkb3duJyxcbiAgICAgIGNvbmZpZ0ZpZWxkczogc2NoZW1hJDcoKSxcbiAgICAgIHBhcnRGaWVsZHM6IHBhcnRzJDMoKSxcbiAgICAgIGZhY3Rvcnk6IGZhY3RvcnkkNSxcbiAgICAgIGFwaXM6IHsgcmVwb3NpdGlvbk1lbnVzOiAoYXBpcywgY29tcCkgPT4gYXBpcy5yZXBvc2l0aW9uTWVudXMoY29tcCkgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZ2V0QnV0dG9uQXBpID0gY29tcG9uZW50ID0+ICh7XG4gICAgICBpc0VuYWJsZWQ6ICgpID0+ICFEaXNhYmxpbmcuaXNEaXNhYmxlZChjb21wb25lbnQpLFxuICAgICAgc2V0RW5hYmxlZDogc3RhdGUgPT4gRGlzYWJsaW5nLnNldChjb21wb25lbnQsICFzdGF0ZSksXG4gICAgICBzZXRUZXh0OiB0ZXh0ID0+IGVtaXRXaXRoKGNvbXBvbmVudCwgdXBkYXRlTWVudVRleHQsIHsgdGV4dCB9KSxcbiAgICAgIHNldEljb246IGljb24gPT4gZW1pdFdpdGgoY29tcG9uZW50LCB1cGRhdGVNZW51SWNvbiwgeyBpY29uIH0pXG4gICAgfSk7XG4gICAgY29uc3QgZ2V0VG9nZ2xlQXBpID0gY29tcG9uZW50ID0+ICh7XG4gICAgICBzZXRBY3RpdmU6IHN0YXRlID0+IHtcbiAgICAgICAgVG9nZ2xpbmcuc2V0KGNvbXBvbmVudCwgc3RhdGUpO1xuICAgICAgfSxcbiAgICAgIGlzQWN0aXZlOiAoKSA9PiBUb2dnbGluZy5pc09uKGNvbXBvbmVudCksXG4gICAgICBpc0VuYWJsZWQ6ICgpID0+ICFEaXNhYmxpbmcuaXNEaXNhYmxlZChjb21wb25lbnQpLFxuICAgICAgc2V0RW5hYmxlZDogc3RhdGUgPT4gRGlzYWJsaW5nLnNldChjb21wb25lbnQsICFzdGF0ZSksXG4gICAgICBzZXRUZXh0OiB0ZXh0ID0+IGVtaXRXaXRoKGNvbXBvbmVudCwgdXBkYXRlTWVudVRleHQsIHsgdGV4dCB9KSxcbiAgICAgIHNldEljb246IGljb24gPT4gZW1pdFdpdGgoY29tcG9uZW50LCB1cGRhdGVNZW51SWNvbiwgeyBpY29uIH0pXG4gICAgfSk7XG4gICAgY29uc3QgZ2V0VG9vbHRpcEF0dHJpYnV0ZXMgPSAodG9vbHRpcCwgcHJvdmlkZXJzQmFja3N0YWdlKSA9PiB0b29sdGlwLm1hcCh0b29sdGlwID0+ICh7XG4gICAgICAnYXJpYS1sYWJlbCc6IHByb3ZpZGVyc0JhY2tzdGFnZS50cmFuc2xhdGUodG9vbHRpcCksXG4gICAgICAndGl0bGUnOiBwcm92aWRlcnNCYWNrc3RhZ2UudHJhbnNsYXRlKHRvb2x0aXApXG4gICAgfSkpLmdldE9yKHt9KTtcbiAgICBjb25zdCBmb2N1c0J1dHRvbkV2ZW50ID0gZ2VuZXJhdGUkNignZm9jdXMtYnV0dG9uJyk7XG4gICAgY29uc3QgcmVuZGVyQ29tbW9uU3RydWN0dXJlID0gKG9wdEljb24sIG9wdFRleHQsIHRvb2x0aXAsIGJlaGF2aW91cnMsIHByb3ZpZGVyc0JhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3Qgb3B0TWVtRGlzcGxheVRleHQgPSBvcHRUZXh0Lm1hcCh0ZXh0ID0+IHJlY29yZChyZW5kZXJMYWJlbCQxKHRleHQsICd0b3gtdGJ0bicsIHByb3ZpZGVyc0JhY2tzdGFnZSkpKTtcbiAgICAgIGNvbnN0IG9wdE1lbURpc3BsYXlJY29uID0gb3B0SWNvbi5tYXAoaWNvbiA9PiByZWNvcmQocmVuZGVyUmVwbGFjZWFibGVJY29uRnJvbVBhY2soaWNvbiwgcHJvdmlkZXJzQmFja3N0YWdlLmljb25zKSkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnYnV0dG9uJyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC10YnRuJ10uY29uY2F0KG9wdFRleHQuaXNTb21lKCkgPyBbJ3RveC10YnRuLS1zZWxlY3QnXSA6IFtdKSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiBnZXRUb29sdGlwQXR0cmlidXRlcyh0b29sdGlwLCBwcm92aWRlcnNCYWNrc3RhZ2UpXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IGNvbXBvbmVudFJlbmRlclBpcGVsaW5lKFtcbiAgICAgICAgICBvcHRNZW1EaXNwbGF5SWNvbi5tYXAobWVtID0+IG1lbS5hc1NwZWMoKSksXG4gICAgICAgICAgb3B0TWVtRGlzcGxheVRleHQubWFwKG1lbSA9PiBtZW0uYXNTcGVjKCkpXG4gICAgICAgIF0pLFxuICAgICAgICBldmVudE9yZGVyOiB7XG4gICAgICAgICAgW21vdXNlZG93bigpXTogW1xuICAgICAgICAgICAgJ2ZvY3VzaW5nJyxcbiAgICAgICAgICAgICdhbGxveS5iYXNlLmJlaGF2aW91cicsXG4gICAgICAgICAgICBjb21tb25CdXR0b25EaXNwbGF5RXZlbnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIFthdHRhY2hlZFRvRG9tKCldOiBbXG4gICAgICAgICAgICBjb21tb25CdXR0b25EaXNwbGF5RXZlbnQsXG4gICAgICAgICAgICAndG9vbGJhci1ncm91cC1idXR0b24tZXZlbnRzJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uQmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIERpc2FibGluZ0NvbmZpZ3MudG9vbGJhckJ1dHRvbihwcm92aWRlcnNCYWNrc3RhZ2UuaXNEaXNhYmxlZCksXG4gICAgICAgICAgcmVjZWl2aW5nQ29uZmlnKCksXG4gICAgICAgICAgY29uZmlnKGNvbW1vbkJ1dHRvbkRpc3BsYXlFdmVudCwgW1xuICAgICAgICAgICAgcnVuT25BdHRhY2hlZCgoY29tcCwgX3NlKSA9PiBmb3JjZUluaXRpYWxTaXplKGNvbXApKSxcbiAgICAgICAgICAgIHJ1biQxKHVwZGF0ZU1lbnVUZXh0LCAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgICAgICAgb3B0TWVtRGlzcGxheVRleHQuYmluZChtZW0gPT4gbWVtLmdldE9wdChjb21wKSkuZWFjaChkaXNwbGF5VGV4dCA9PiB7XG4gICAgICAgICAgICAgICAgUmVwbGFjaW5nLnNldChkaXNwbGF5VGV4dCwgW3RleHQkMihwcm92aWRlcnNCYWNrc3RhZ2UudHJhbnNsYXRlKHNlLmV2ZW50LnRleHQpKV0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcnVuJDEodXBkYXRlTWVudUljb24sIChjb21wLCBzZSkgPT4ge1xuICAgICAgICAgICAgICBvcHRNZW1EaXNwbGF5SWNvbi5iaW5kKG1lbSA9PiBtZW0uZ2V0T3B0KGNvbXApKS5lYWNoKGRpc3BsYXlJY29uID0+IHtcbiAgICAgICAgICAgICAgICBSZXBsYWNpbmcuc2V0KGRpc3BsYXlJY29uLCBbcmVuZGVyUmVwbGFjZWFibGVJY29uRnJvbVBhY2soc2UuZXZlbnQuaWNvbiwgcHJvdmlkZXJzQmFja3N0YWdlLmljb25zKV0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcnVuJDEobW91c2Vkb3duKCksIChidXR0b24sIHNlKSA9PiB7XG4gICAgICAgICAgICAgIHNlLmV2ZW50LnByZXZlbnQoKTtcbiAgICAgICAgICAgICAgZW1pdChidXR0b24sIGZvY3VzQnV0dG9uRXZlbnQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdKVxuICAgICAgICBdLmNvbmNhdChiZWhhdmlvdXJzLmdldE9yKFtdKSkpXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyRmxvYXRpbmdUb29sYmFyQnV0dG9uID0gKHNwZWMsIGJhY2tzdGFnZSwgaWRlbnRpZnlCdXR0b25zLCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICBjb25zdCBzaGFyZWRCYWNrc3RhZ2UgPSBiYWNrc3RhZ2Uuc2hhcmVkO1xuICAgICAgY29uc3QgZWRpdG9yT2ZmQ2VsbCA9IENlbGwobm9vcCk7XG4gICAgICBjb25zdCBzcGVjaWFsaXNhdGlvbiA9IHtcbiAgICAgICAgdG9vbGJhckJ1dHRvbkJlaGF2aW91cnM6IFtdLFxuICAgICAgICBnZXRBcGk6IGdldEJ1dHRvbkFwaSxcbiAgICAgICAgb25TZXR1cDogc3BlYy5vblNldHVwXG4gICAgICB9O1xuICAgICAgY29uc3QgYmVoYXZpb3VycyA9IFtjb25maWcoJ3Rvb2xiYXItZ3JvdXAtYnV0dG9uLWV2ZW50cycsIFtcbiAgICAgICAgICBvbkNvbnRyb2xBdHRhY2hlZChzcGVjaWFsaXNhdGlvbiwgZWRpdG9yT2ZmQ2VsbCksXG4gICAgICAgICAgb25Db250cm9sRGV0YWNoZWQoc3BlY2lhbGlzYXRpb24sIGVkaXRvck9mZkNlbGwpXG4gICAgICAgIF0pXTtcbiAgICAgIHJldHVybiBGbG9hdGluZ1Rvb2xiYXJCdXR0b24uc2tldGNoKHtcbiAgICAgICAgbGF6eVNpbms6IHNoYXJlZEJhY2tzdGFnZS5nZXRTaW5rLFxuICAgICAgICBmZXRjaDogKCkgPT4gRnV0dXJlLm51KHJlc29sdmUgPT4ge1xuICAgICAgICAgIHJlc29sdmUobWFwJDIoaWRlbnRpZnlCdXR0b25zKHNwZWMuaXRlbXMpLCByZW5kZXJUb29sYmFyR3JvdXApKTtcbiAgICAgICAgfSksXG4gICAgICAgIG1hcmtlcnM6IHsgdG9nZ2xlZENsYXNzOiAndG94LXRidG4tLWVuYWJsZWQnIH0sXG4gICAgICAgIHBhcnRzOiB7XG4gICAgICAgICAgYnV0dG9uOiByZW5kZXJDb21tb25TdHJ1Y3R1cmUoc3BlYy5pY29uLCBzcGVjLnRleHQsIHNwZWMudG9vbHRpcCwgT3B0aW9uYWwuc29tZShiZWhhdmlvdXJzKSwgc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVycyksXG4gICAgICAgICAgdG9vbGJhcjoge1xuICAgICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LXRvb2xiYXJfX292ZXJmbG93J10sXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyQ29tbW9uVG9vbGJhckJ1dHRvbiA9IChzcGVjLCBzcGVjaWFsaXNhdGlvbiwgcHJvdmlkZXJzQmFja3N0YWdlKSA9PiB7XG4gICAgICB2YXIgX2Q7XG4gICAgICBjb25zdCBlZGl0b3JPZmZDZWxsID0gQ2VsbChub29wKTtcbiAgICAgIGNvbnN0IHN0cnVjdHVyZSA9IHJlbmRlckNvbW1vblN0cnVjdHVyZShzcGVjLmljb24sIHNwZWMudGV4dCwgc3BlYy50b29sdGlwLCBPcHRpb25hbC5ub25lKCksIHByb3ZpZGVyc0JhY2tzdGFnZSk7XG4gICAgICByZXR1cm4gQnV0dG9uLnNrZXRjaCh7XG4gICAgICAgIGRvbTogc3RydWN0dXJlLmRvbSxcbiAgICAgICAgY29tcG9uZW50czogc3RydWN0dXJlLmNvbXBvbmVudHMsXG4gICAgICAgIGV2ZW50T3JkZXI6IHRvb2xiYXJCdXR0b25FdmVudE9yZGVyLFxuICAgICAgICBidXR0b25CZWhhdmlvdXJzOiB7XG4gICAgICAgICAgLi4uZGVyaXZlJDEoW1xuICAgICAgICAgICAgY29uZmlnKCd0b29sYmFyLWJ1dHRvbi1ldmVudHMnLCBbXG4gICAgICAgICAgICAgIG9uVG9vbGJhckJ1dHRvbkV4ZWN1dGUoe1xuICAgICAgICAgICAgICAgIG9uQWN0aW9uOiBzcGVjLm9uQWN0aW9uLFxuICAgICAgICAgICAgICAgIGdldEFwaTogc3BlY2lhbGlzYXRpb24uZ2V0QXBpXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBvbkNvbnRyb2xBdHRhY2hlZChzcGVjaWFsaXNhdGlvbiwgZWRpdG9yT2ZmQ2VsbCksXG4gICAgICAgICAgICAgIG9uQ29udHJvbERldGFjaGVkKHNwZWNpYWxpc2F0aW9uLCBlZGl0b3JPZmZDZWxsKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBEaXNhYmxpbmdDb25maWdzLnRvb2xiYXJCdXR0b24oKCkgPT4gIXNwZWMuZW5hYmxlZCB8fCBwcm92aWRlcnNCYWNrc3RhZ2UuaXNEaXNhYmxlZCgpKSxcbiAgICAgICAgICAgIHJlY2VpdmluZ0NvbmZpZygpXG4gICAgICAgICAgXS5jb25jYXQoc3BlY2lhbGlzYXRpb24udG9vbGJhckJ1dHRvbkJlaGF2aW91cnMpKSxcbiAgICAgICAgICBbY29tbW9uQnV0dG9uRGlzcGxheUV2ZW50XTogKF9kID0gc3RydWN0dXJlLmJ1dHRvbkJlaGF2aW91cnMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZFtjb21tb25CdXR0b25EaXNwbGF5RXZlbnRdXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyVG9vbGJhckJ1dHRvbiA9IChzcGVjLCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IHJlbmRlclRvb2xiYXJCdXR0b25XaXRoKHNwZWMsIHByb3ZpZGVyc0JhY2tzdGFnZSwgW10pO1xuICAgIGNvbnN0IHJlbmRlclRvb2xiYXJCdXR0b25XaXRoID0gKHNwZWMsIHByb3ZpZGVyc0JhY2tzdGFnZSwgYm9udXNFdmVudHMpID0+IHJlbmRlckNvbW1vblRvb2xiYXJCdXR0b24oc3BlYywge1xuICAgICAgdG9vbGJhckJ1dHRvbkJlaGF2aW91cnM6IGJvbnVzRXZlbnRzLmxlbmd0aCA+IDAgPyBbY29uZmlnKCd0b29sYmFyQnV0dG9uV2l0aCcsIGJvbnVzRXZlbnRzKV0gOiBbXSxcbiAgICAgIGdldEFwaTogZ2V0QnV0dG9uQXBpLFxuICAgICAgb25TZXR1cDogc3BlYy5vblNldHVwXG4gICAgfSwgcHJvdmlkZXJzQmFja3N0YWdlKTtcbiAgICBjb25zdCByZW5kZXJUb29sYmFyVG9nZ2xlQnV0dG9uID0gKHNwZWMsIHByb3ZpZGVyc0JhY2tzdGFnZSkgPT4gcmVuZGVyVG9vbGJhclRvZ2dsZUJ1dHRvbldpdGgoc3BlYywgcHJvdmlkZXJzQmFja3N0YWdlLCBbXSk7XG4gICAgY29uc3QgcmVuZGVyVG9vbGJhclRvZ2dsZUJ1dHRvbldpdGggPSAoc3BlYywgcHJvdmlkZXJzQmFja3N0YWdlLCBib251c0V2ZW50cykgPT4gcmVuZGVyQ29tbW9uVG9vbGJhckJ1dHRvbihzcGVjLCB7XG4gICAgICB0b29sYmFyQnV0dG9uQmVoYXZpb3VyczogW1xuICAgICAgICBSZXBsYWNpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgVG9nZ2xpbmcuY29uZmlnKHtcbiAgICAgICAgICB0b2dnbGVDbGFzczogJ3RveC10YnRuLS1lbmFibGVkJyxcbiAgICAgICAgICBhcmlhOiB7IG1vZGU6ICdwcmVzc2VkJyB9LFxuICAgICAgICAgIHRvZ2dsZU9uRXhlY3V0ZTogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIF0uY29uY2F0KGJvbnVzRXZlbnRzLmxlbmd0aCA+IDAgPyBbY29uZmlnKCd0b29sYmFyVG9nZ2xlQnV0dG9uV2l0aCcsIGJvbnVzRXZlbnRzKV0gOiBbXSksXG4gICAgICBnZXRBcGk6IGdldFRvZ2dsZUFwaSxcbiAgICAgIG9uU2V0dXA6IHNwZWMub25TZXR1cFxuICAgIH0sIHByb3ZpZGVyc0JhY2tzdGFnZSk7XG4gICAgY29uc3QgZmV0Y2hDaG9pY2VzID0gKGdldEFwaSwgc3BlYywgcHJvdmlkZXJzQmFja3N0YWdlKSA9PiBjb21wID0+IEZ1dHVyZS5udShjYWxsYmFjayA9PiBzcGVjLmZldGNoKGNhbGxiYWNrKSkubWFwKGl0ZW1zID0+IE9wdGlvbmFsLmZyb20oY3JlYXRlVGllcmVkRGF0YUZyb20oZGVlcE1lcmdlKGNyZWF0ZVBhcnRpYWxDaG9pY2VNZW51KGdlbmVyYXRlJDYoJ21lbnUtdmFsdWUnKSwgaXRlbXMsIHZhbHVlID0+IHtcbiAgICAgIHNwZWMub25JdGVtQWN0aW9uKGdldEFwaShjb21wKSwgdmFsdWUpO1xuICAgIH0sIHNwZWMuY29sdW1ucywgc3BlYy5wcmVzZXRzLCBJdGVtUmVzcG9uc2UkMS5DTE9TRV9PTl9FWEVDVVRFLCBzcGVjLnNlbGVjdC5nZXRPcihuZXZlciksIHByb3ZpZGVyc0JhY2tzdGFnZSksIHtcbiAgICAgIG1vdmVtZW50OiBkZXJpdmVNZW51TW92ZW1lbnQoc3BlYy5jb2x1bW5zLCBzcGVjLnByZXNldHMpLFxuICAgICAgbWVudUJlaGF2aW91cnM6IFNpbXBsZUJlaGF2aW91cnMudW5uYW1lZEV2ZW50cyhzcGVjLmNvbHVtbnMgIT09ICdhdXRvJyA/IFtdIDogW3J1bk9uQXR0YWNoZWQoKGNvbXAsIF9zZSkgPT4ge1xuICAgICAgICAgIGRldGVjdFNpemUoY29tcCwgNCwgY2xhc3NGb3JQcmVzZXQoc3BlYy5wcmVzZXRzKSkuZWFjaCgoe251bVJvd3MsIG51bUNvbHVtbnN9KSA9PiB7XG4gICAgICAgICAgICBLZXlpbmcuc2V0R3JpZFNpemUoY29tcCwgbnVtUm93cywgbnVtQ29sdW1ucyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pXSlcbiAgICB9KSkpKTtcbiAgICBjb25zdCByZW5kZXJTcGxpdEJ1dHRvbiA9IChzcGVjLCBzaGFyZWRCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IGdldEFwaSA9IGNvbXAgPT4gKHtcbiAgICAgICAgaXNFbmFibGVkOiAoKSA9PiAhRGlzYWJsaW5nLmlzRGlzYWJsZWQoY29tcCksXG4gICAgICAgIHNldEVuYWJsZWQ6IHN0YXRlID0+IERpc2FibGluZy5zZXQoY29tcCwgIXN0YXRlKSxcbiAgICAgICAgc2V0SWNvbkZpbGw6IChpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICBkZXNjZW5kYW50KGNvbXAuZWxlbWVudCwgYHN2ZyBwYXRoW2NsYXNzPVwiJHsgaWQgfVwiXSwgcmVjdFtjbGFzcz1cIiR7IGlkIH1cIl1gKS5lYWNoKHVuZGVybGluZVBhdGggPT4ge1xuICAgICAgICAgICAgc2V0JDkodW5kZXJsaW5lUGF0aCwgJ2ZpbGwnLCB2YWx1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldEFjdGl2ZTogc3RhdGUgPT4ge1xuICAgICAgICAgIHNldCQ5KGNvbXAuZWxlbWVudCwgJ2FyaWEtcHJlc3NlZCcsIHN0YXRlKTtcbiAgICAgICAgICBkZXNjZW5kYW50KGNvbXAuZWxlbWVudCwgJ3NwYW4nKS5lYWNoKGJ1dHRvbiA9PiB7XG4gICAgICAgICAgICBjb21wLmdldFN5c3RlbSgpLmdldEJ5RG9tKGJ1dHRvbikuZWFjaChidXR0b25Db21wID0+IFRvZ2dsaW5nLnNldChidXR0b25Db21wLCBzdGF0ZSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBpc0FjdGl2ZTogKCkgPT4gZGVzY2VuZGFudChjb21wLmVsZW1lbnQsICdzcGFuJykuZXhpc3RzKGJ1dHRvbiA9PiBjb21wLmdldFN5c3RlbSgpLmdldEJ5RG9tKGJ1dHRvbikuZXhpc3RzKFRvZ2dsaW5nLmlzT24pKSxcbiAgICAgICAgc2V0VGV4dDogdGV4dCA9PiBkZXNjZW5kYW50KGNvbXAuZWxlbWVudCwgJ3NwYW4nKS5lYWNoKGJ1dHRvbiA9PiBjb21wLmdldFN5c3RlbSgpLmdldEJ5RG9tKGJ1dHRvbikuZWFjaChidXR0b25Db21wID0+IGVtaXRXaXRoKGJ1dHRvbkNvbXAsIHVwZGF0ZU1lbnVUZXh0LCB7IHRleHQgfSkpKSxcbiAgICAgICAgc2V0SWNvbjogaWNvbiA9PiBkZXNjZW5kYW50KGNvbXAuZWxlbWVudCwgJ3NwYW4nKS5lYWNoKGJ1dHRvbiA9PiBjb21wLmdldFN5c3RlbSgpLmdldEJ5RG9tKGJ1dHRvbikuZWFjaChidXR0b25Db21wID0+IGVtaXRXaXRoKGJ1dHRvbkNvbXAsIHVwZGF0ZU1lbnVJY29uLCB7IGljb24gfSkpKVxuICAgICAgfSk7XG4gICAgICBjb25zdCBlZGl0b3JPZmZDZWxsID0gQ2VsbChub29wKTtcbiAgICAgIGNvbnN0IHNwZWNpYWxpc2F0aW9uID0ge1xuICAgICAgICBnZXRBcGksXG4gICAgICAgIG9uU2V0dXA6IHNwZWMub25TZXR1cFxuICAgICAgfTtcbiAgICAgIHJldHVybiBTcGxpdERyb3Bkb3duLnNrZXRjaCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtc3BsaXQtYnV0dG9uJ10sXG4gICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgJ2FyaWEtcHJlc3NlZCc6IGZhbHNlLFxuICAgICAgICAgICAgLi4uZ2V0VG9vbHRpcEF0dHJpYnV0ZXMoc3BlYy50b29sdGlwLCBzaGFyZWRCYWNrc3RhZ2UucHJvdmlkZXJzKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25FeGVjdXRlOiBidXR0b24gPT4ge1xuICAgICAgICAgIGNvbnN0IGFwaSA9IGdldEFwaShidXR0b24pO1xuICAgICAgICAgIGlmIChhcGkuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgIHNwZWMub25BY3Rpb24oYXBpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uSXRlbUV4ZWN1dGU6IChfYSwgX2IsIF9jKSA9PiB7XG4gICAgICAgIH0sXG4gICAgICAgIHNwbGl0RHJvcGRvd25CZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgRGlzYWJsaW5nQ29uZmlncy5zcGxpdEJ1dHRvbihzaGFyZWRCYWNrc3RhZ2UucHJvdmlkZXJzLmlzRGlzYWJsZWQpLFxuICAgICAgICAgIHJlY2VpdmluZ0NvbmZpZygpLFxuICAgICAgICAgIGNvbmZpZygnc3BsaXQtZHJvcGRvd24tZXZlbnRzJywgW1xuICAgICAgICAgICAgcnVuT25BdHRhY2hlZCgoY29tcCwgX3NlKSA9PiBmb3JjZUluaXRpYWxTaXplKGNvbXApKSxcbiAgICAgICAgICAgIHJ1biQxKGZvY3VzQnV0dG9uRXZlbnQsIEZvY3VzaW5nLmZvY3VzKSxcbiAgICAgICAgICAgIG9uQ29udHJvbEF0dGFjaGVkKHNwZWNpYWxpc2F0aW9uLCBlZGl0b3JPZmZDZWxsKSxcbiAgICAgICAgICAgIG9uQ29udHJvbERldGFjaGVkKHNwZWNpYWxpc2F0aW9uLCBlZGl0b3JPZmZDZWxsKVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIFVuc2VsZWN0aW5nLmNvbmZpZyh7fSlcbiAgICAgICAgXSksXG4gICAgICAgIGV2ZW50T3JkZXI6IHtcbiAgICAgICAgICBbYXR0YWNoZWRUb0RvbSgpXTogW1xuICAgICAgICAgICAgJ2FsbG95LmJhc2UuYmVoYXZpb3VyJyxcbiAgICAgICAgICAgICdzcGxpdC1kcm9wZG93bi1ldmVudHMnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB0b2dnbGVDbGFzczogJ3RveC10YnRuLS1lbmFibGVkJyxcbiAgICAgICAgbGF6eVNpbms6IHNoYXJlZEJhY2tzdGFnZS5nZXRTaW5rLFxuICAgICAgICBmZXRjaDogZmV0Y2hDaG9pY2VzKGdldEFwaSwgc3BlYywgc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVycyksXG4gICAgICAgIHBhcnRzOiB7IG1lbnU6IHBhcnQoZmFsc2UsIHNwZWMuY29sdW1ucywgc3BlYy5wcmVzZXRzKSB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgU3BsaXREcm9wZG93bi5wYXJ0cy5idXR0b24ocmVuZGVyQ29tbW9uU3RydWN0dXJlKHNwZWMuaWNvbiwgc3BlYy50ZXh0LCBPcHRpb25hbC5ub25lKCksIE9wdGlvbmFsLnNvbWUoW1RvZ2dsaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICAgIHRvZ2dsZUNsYXNzOiAndG94LXRidG4tLWVuYWJsZWQnLFxuICAgICAgICAgICAgICB0b2dnbGVPbkV4ZWN1dGU6IGZhbHNlXG4gICAgICAgICAgICB9KV0pLCBzaGFyZWRCYWNrc3RhZ2UucHJvdmlkZXJzKSksXG4gICAgICAgICAgU3BsaXREcm9wZG93bi5wYXJ0cy5hcnJvdyh7XG4gICAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgICAgdGFnOiAnYnV0dG9uJyxcbiAgICAgICAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICAgICAgICd0b3gtdGJ0bicsXG4gICAgICAgICAgICAgICAgJ3RveC1zcGxpdC1idXR0b25fX2NoZXZyb24nXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGlubmVySHRtbDogZ2V0JDIoJ2NoZXZyb24tZG93bicsIHNoYXJlZEJhY2tzdGFnZS5wcm92aWRlcnMuaWNvbnMpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYnV0dG9uQmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgICAgICBEaXNhYmxpbmdDb25maWdzLnNwbGl0QnV0dG9uKHNoYXJlZEJhY2tzdGFnZS5wcm92aWRlcnMuaXNEaXNhYmxlZCksXG4gICAgICAgICAgICAgIHJlY2VpdmluZ0NvbmZpZygpLFxuICAgICAgICAgICAgICBhZGRGb2N1c2FibGVCZWhhdmlvdXIoKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBTcGxpdERyb3Bkb3duLnBhcnRzWydhcmlhLWRlc2NyaXB0b3InXSh7IHRleHQ6IHNoYXJlZEJhY2tzdGFnZS5wcm92aWRlcnMudHJhbnNsYXRlKCdUbyBvcGVuIHRoZSBwb3B1cCwgcHJlc3MgU2hpZnQrRW50ZXInKSB9KVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGVmYXVsdFRvb2xiYXIgPSBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdoaXN0b3J5JyxcbiAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICAndW5kbycsXG4gICAgICAgICAgJ3JlZG8nXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdhaScsXG4gICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgJ2FpZGlhbG9nJyxcbiAgICAgICAgICAnYWlzaG9ydGN1dHMnXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzdHlsZXMnLFxuICAgICAgICBpdGVtczogWydzdHlsZXMnXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2Zvcm1hdHRpbmcnLFxuICAgICAgICBpdGVtczogW1xuICAgICAgICAgICdib2xkJyxcbiAgICAgICAgICAnaXRhbGljJ1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnYWxpZ25tZW50JyxcbiAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICAnYWxpZ25sZWZ0JyxcbiAgICAgICAgICAnYWxpZ25jZW50ZXInLFxuICAgICAgICAgICdhbGlnbnJpZ2h0JyxcbiAgICAgICAgICAnYWxpZ25qdXN0aWZ5J1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnaW5kZW50YXRpb24nLFxuICAgICAgICBpdGVtczogW1xuICAgICAgICAgICdvdXRkZW50JyxcbiAgICAgICAgICAnaW5kZW50J1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAncGVybWFuZW50IHBlbicsXG4gICAgICAgIGl0ZW1zOiBbJ3Blcm1hbmVudHBlbiddXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnY29tbWVudHMnLFxuICAgICAgICBpdGVtczogWydhZGRjb21tZW50J11cbiAgICAgIH1cbiAgICBdO1xuICAgIGNvbnN0IHJlbmRlckZyb21CcmlkZ2UgPSAoYnJpZGdlQnVpbGRlciwgcmVuZGVyKSA9PiAoc3BlYywgYmFja3N0YWdlLCBlZGl0b3IpID0+IHtcbiAgICAgIGNvbnN0IGludGVybmFsID0gYnJpZGdlQnVpbGRlcihzcGVjKS5tYXBFcnJvcihlcnJJbmZvID0+IGZvcm1hdEVycm9yKGVyckluZm8pKS5nZXRPckRpZSgpO1xuICAgICAgcmV0dXJuIHJlbmRlcihpbnRlcm5hbCwgYmFja3N0YWdlLCBlZGl0b3IpO1xuICAgIH07XG4gICAgY29uc3QgdHlwZXMgPSB7XG4gICAgICBidXR0b246IHJlbmRlckZyb21CcmlkZ2UoY3JlYXRlVG9vbGJhckJ1dHRvbiwgKHMsIGJhY2tzdGFnZSkgPT4gcmVuZGVyVG9vbGJhckJ1dHRvbihzLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycykpLFxuICAgICAgdG9nZ2xlYnV0dG9uOiByZW5kZXJGcm9tQnJpZGdlKGNyZWF0ZVRvZ2dsZUJ1dHRvbiwgKHMsIGJhY2tzdGFnZSkgPT4gcmVuZGVyVG9vbGJhclRvZ2dsZUJ1dHRvbihzLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycykpLFxuICAgICAgbWVudWJ1dHRvbjogcmVuZGVyRnJvbUJyaWRnZShjcmVhdGVNZW51QnV0dG9uLCAocywgYmFja3N0YWdlKSA9PiByZW5kZXJNZW51QnV0dG9uKHMsICd0b3gtdGJ0bicsIGJhY2tzdGFnZSwgT3B0aW9uYWwubm9uZSgpLCBmYWxzZSkpLFxuICAgICAgc3BsaXRidXR0b246IHJlbmRlckZyb21CcmlkZ2UoY3JlYXRlU3BsaXRCdXR0b24sIChzLCBiYWNrc3RhZ2UpID0+IHJlbmRlclNwbGl0QnV0dG9uKHMsIGJhY2tzdGFnZS5zaGFyZWQpKSxcbiAgICAgIGdyb3VwdG9vbGJhcmJ1dHRvbjogcmVuZGVyRnJvbUJyaWRnZShjcmVhdGVHcm91cFRvb2xiYXJCdXR0b24sIChzLCBiYWNrc3RhZ2UsIGVkaXRvcikgPT4ge1xuICAgICAgICBjb25zdCBidXR0b25zID0gZWRpdG9yLnVpLnJlZ2lzdHJ5LmdldEFsbCgpLmJ1dHRvbnM7XG4gICAgICAgIGNvbnN0IGlkZW50aWZ5ID0gdG9vbGJhciA9PiBpZGVudGlmeUJ1dHRvbnMoZWRpdG9yLCB7XG4gICAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgICB0b29sYmFyLFxuICAgICAgICAgIGFsbG93VG9vbGJhckdyb3VwczogZmFsc2VcbiAgICAgICAgfSwgYmFja3N0YWdlLCBPcHRpb25hbC5ub25lKCkpO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0geyBbQXR0cmlidXRlXTogYmFja3N0YWdlLnNoYXJlZC5oZWFkZXIuaXNQb3NpdGlvbmVkQXRUb3AoKSA/IEF0dHJpYnV0ZVZhbHVlLlRvcFRvQm90dG9tIDogQXR0cmlidXRlVmFsdWUuQm90dG9tVG9Ub3AgfTtcbiAgICAgICAgc3dpdGNoIChnZXRUb29sYmFyTW9kZShlZGl0b3IpKSB7XG4gICAgICAgIGNhc2UgVG9vbGJhck1vZGUkMS5mbG9hdGluZzpcbiAgICAgICAgICByZXR1cm4gcmVuZGVyRmxvYXRpbmdUb29sYmFyQnV0dG9uKHMsIGJhY2tzdGFnZSwgaWRlbnRpZnksIGF0dHJpYnV0ZXMpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9vbGJhciBncm91cHMgYXJlIG9ubHkgc3VwcG9ydGVkIHdoZW4gdXNpbmcgZmxvYXRpbmcgdG9vbGJhciBtb2RlJyk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfTtcbiAgICBjb25zdCBleHRyYWN0RnJvbSA9IChzcGVjLCBiYWNrc3RhZ2UsIGVkaXRvcikgPT4gZ2V0JGcodHlwZXMsIHNwZWMudHlwZSkuZm9sZCgoKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdza2lwcGluZyBidXR0b24gZGVmaW5lZCBieScsIHNwZWMpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9LCByZW5kZXIgPT4gT3B0aW9uYWwuc29tZShyZW5kZXIoc3BlYywgYmFja3N0YWdlLCBlZGl0b3IpKSk7XG4gICAgY29uc3QgYmVzcG9rZUJ1dHRvbnMgPSB7XG4gICAgICBzdHlsZXM6IGNyZWF0ZVN0eWxlc0J1dHRvbixcbiAgICAgIGZvbnRzaXplOiBjcmVhdGVGb250U2l6ZUJ1dHRvbixcbiAgICAgIGZvbnRzaXplaW5wdXQ6IGNyZWF0ZUZvbnRTaXplSW5wdXRCdXR0b24sXG4gICAgICBmb250ZmFtaWx5OiBjcmVhdGVGb250RmFtaWx5QnV0dG9uLFxuICAgICAgYmxvY2tzOiBjcmVhdGVCbG9ja3NCdXR0b24sXG4gICAgICBhbGlnbjogY3JlYXRlQWxpZ25CdXR0b25cbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZVVudXNlZERlZmF1bHRzID0gYnV0dG9ucyA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJlZEl0ZW1Hcm91cHMgPSBtYXAkMihkZWZhdWx0VG9vbGJhciwgZ3JvdXAgPT4ge1xuICAgICAgICBjb25zdCBpdGVtcyA9IGZpbHRlciQyKGdyb3VwLml0ZW1zLCBzdWJJdGVtID0+IGhhcyQyKGJ1dHRvbnMsIHN1Ykl0ZW0pIHx8IGhhcyQyKGJlc3Bva2VCdXR0b25zLCBzdWJJdGVtKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogZ3JvdXAubmFtZSxcbiAgICAgICAgICBpdGVtc1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmlsdGVyJDIoZmlsdGVyZWRJdGVtR3JvdXBzLCBncm91cCA9PiBncm91cC5pdGVtcy5sZW5ndGggPiAwKTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbnZlcnRTdHJpbmdUb29sYmFyID0gc3RyVG9vbGJhciA9PiB7XG4gICAgICBjb25zdCBncm91cHNTdHJpbmdzID0gc3RyVG9vbGJhci5zcGxpdCgnfCcpO1xuICAgICAgcmV0dXJuIG1hcCQyKGdyb3Vwc1N0cmluZ3MsIGcgPT4gKHsgaXRlbXM6IGcudHJpbSgpLnNwbGl0KCcgJykgfSkpO1xuICAgIH07XG4gICAgY29uc3QgaXNUb29sYmFyR3JvdXBTZXR0aW5nQXJyYXkgPSB0b29sYmFyID0+IGlzQXJyYXlPZih0b29sYmFyLCB0ID0+IGhhcyQyKHQsICduYW1lJykgJiYgaGFzJDIodCwgJ2l0ZW1zJykpO1xuICAgIGNvbnN0IGNyZWF0ZVRvb2xiYXIgPSB0b29sYmFyQ29uZmlnID0+IHtcbiAgICAgIGNvbnN0IHRvb2xiYXIgPSB0b29sYmFyQ29uZmlnLnRvb2xiYXI7XG4gICAgICBjb25zdCBidXR0b25zID0gdG9vbGJhckNvbmZpZy5idXR0b25zO1xuICAgICAgaWYgKHRvb2xiYXIgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH0gZWxzZSBpZiAodG9vbGJhciA9PT0gdW5kZWZpbmVkIHx8IHRvb2xiYXIgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIHJlbW92ZVVudXNlZERlZmF1bHRzKGJ1dHRvbnMpO1xuICAgICAgfSBlbHNlIGlmIChpc1N0cmluZyh0b29sYmFyKSkge1xuICAgICAgICByZXR1cm4gY29udmVydFN0cmluZ1Rvb2xiYXIodG9vbGJhcik7XG4gICAgICB9IGVsc2UgaWYgKGlzVG9vbGJhckdyb3VwU2V0dGluZ0FycmF5KHRvb2xiYXIpKSB7XG4gICAgICAgIHJldHVybiB0b29sYmFyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignVG9vbGJhciB0eXBlIHNob3VsZCBiZSBzdHJpbmcsIHN0cmluZ1tdLCBib29sZWFuIG9yIFRvb2xiYXJHcm91cFtdJyk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGxvb2t1cEJ1dHRvbiA9IChlZGl0b3IsIGJ1dHRvbnMsIHRvb2xiYXJJdGVtLCBhbGxvd1Rvb2xiYXJHcm91cHMsIGJhY2tzdGFnZSwgcHJlZml4ZXMpID0+IGdldCRnKGJ1dHRvbnMsIHRvb2xiYXJJdGVtLnRvTG93ZXJDYXNlKCkpLm9yVGh1bmsoKCkgPT4gcHJlZml4ZXMuYmluZChwcyA9PiBmaW5kTWFwKHBzLCBwcmVmaXggPT4gZ2V0JGcoYnV0dG9ucywgcHJlZml4ICsgdG9vbGJhckl0ZW0udG9Mb3dlckNhc2UoKSkpKSkuZm9sZCgoKSA9PiBnZXQkZyhiZXNwb2tlQnV0dG9ucywgdG9vbGJhckl0ZW0udG9Mb3dlckNhc2UoKSkubWFwKHIgPT4gcihlZGl0b3IsIGJhY2tzdGFnZSkpLCBzcGVjID0+IHtcbiAgICAgIGlmIChzcGVjLnR5cGUgPT09ICdncm91cHRvb2xiYXJidXR0b24nICYmICFhbGxvd1Rvb2xiYXJHcm91cHMpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBJZ25vcmluZyB0aGUgJyR7IHRvb2xiYXJJdGVtIH0nIHRvb2xiYXIgYnV0dG9uLiBHcm91cCB0b29sYmFyIGJ1dHRvbnMgYXJlIG9ubHkgc3VwcG9ydGVkIHdoZW4gdXNpbmcgZmxvYXRpbmcgdG9vbGJhciBtb2RlIGFuZCBjYW5ub3QgYmUgbmVzdGVkLmApO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGV4dHJhY3RGcm9tKHNwZWMsIGJhY2tzdGFnZSwgZWRpdG9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBpZGVudGlmeUJ1dHRvbnMgPSAoZWRpdG9yLCB0b29sYmFyQ29uZmlnLCBiYWNrc3RhZ2UsIHByZWZpeGVzKSA9PiB7XG4gICAgICBjb25zdCB0b29sYmFyR3JvdXBzID0gY3JlYXRlVG9vbGJhcih0b29sYmFyQ29uZmlnKTtcbiAgICAgIGNvbnN0IGdyb3VwcyA9IG1hcCQyKHRvb2xiYXJHcm91cHMsIGdyb3VwID0+IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBiaW5kJDMoZ3JvdXAuaXRlbXMsIHRvb2xiYXJJdGVtID0+IHtcbiAgICAgICAgICByZXR1cm4gdG9vbGJhckl0ZW0udHJpbSgpLmxlbmd0aCA9PT0gMCA/IFtdIDogbG9va3VwQnV0dG9uKGVkaXRvciwgdG9vbGJhckNvbmZpZy5idXR0b25zLCB0b29sYmFySXRlbSwgdG9vbGJhckNvbmZpZy5hbGxvd1Rvb2xiYXJHcm91cHMsIGJhY2tzdGFnZSwgcHJlZml4ZXMpLnRvQXJyYXkoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdGl0bGU6IE9wdGlvbmFsLmZyb20oZWRpdG9yLnRyYW5zbGF0ZShncm91cC5uYW1lKSksXG4gICAgICAgICAgaXRlbXNcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZpbHRlciQyKGdyb3VwcywgZ3JvdXAgPT4gZ3JvdXAuaXRlbXMubGVuZ3RoID4gMCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNldFRvb2xiYXIgPSAoZWRpdG9yLCB1aVJlZnMsIHJhd1VpQ29uZmlnLCBiYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IG91dGVyQ29udGFpbmVyID0gdWlSZWZzLm1haW5VaS5vdXRlckNvbnRhaW5lcjtcbiAgICAgIGNvbnN0IHRvb2xiYXJDb25maWcgPSByYXdVaUNvbmZpZy50b29sYmFyO1xuICAgICAgY29uc3QgdG9vbGJhckJ1dHRvbnNDb25maWcgPSByYXdVaUNvbmZpZy5idXR0b25zO1xuICAgICAgaWYgKGlzQXJyYXlPZih0b29sYmFyQ29uZmlnLCBpc1N0cmluZykpIHtcbiAgICAgICAgY29uc3QgdG9vbGJhcnMgPSB0b29sYmFyQ29uZmlnLm1hcCh0ID0+IHtcbiAgICAgICAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAgICAgICB0b29sYmFyOiB0LFxuICAgICAgICAgICAgYnV0dG9uczogdG9vbGJhckJ1dHRvbnNDb25maWcsXG4gICAgICAgICAgICBhbGxvd1Rvb2xiYXJHcm91cHM6IHJhd1VpQ29uZmlnLmFsbG93VG9vbGJhckdyb3Vwc1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGlkZW50aWZ5QnV0dG9ucyhlZGl0b3IsIGNvbmZpZywgYmFja3N0YWdlLCBPcHRpb25hbC5ub25lKCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgT3V0ZXJDb250YWluZXIuc2V0VG9vbGJhcnMob3V0ZXJDb250YWluZXIsIHRvb2xiYXJzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE91dGVyQ29udGFpbmVyLnNldFRvb2xiYXIob3V0ZXJDb250YWluZXIsIGlkZW50aWZ5QnV0dG9ucyhlZGl0b3IsIHJhd1VpQ29uZmlnLCBiYWNrc3RhZ2UsIE9wdGlvbmFsLm5vbmUoKSkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBkZXRlY3Rpb24gPSBkZXRlY3QkMigpO1xuICAgIGNvbnN0IGlzaU9TMTIgPSBkZXRlY3Rpb24ub3MuaXNpT1MoKSAmJiBkZXRlY3Rpb24ub3MudmVyc2lvbi5tYWpvciA8PSAxMjtcbiAgICBjb25zdCBzZXR1cEV2ZW50cyQxID0gKGVkaXRvciwgdWlSZWZzKSA9PiB7XG4gICAgICBjb25zdCB7dWlNb3RoZXJzaGlwc30gPSB1aVJlZnM7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgbGV0IGNvbnRlbnRXaW5kb3cgPSBlZGl0b3IuZ2V0V2luKCk7XG4gICAgICBjb25zdCBpbml0aWFsRG9jRWxlID0gZWRpdG9yLmdldERvYygpLmRvY3VtZW50RWxlbWVudDtcbiAgICAgIGNvbnN0IGxhc3RXaW5kb3dEaW1lbnNpb25zID0gQ2VsbChTdWdhclBvc2l0aW9uKGNvbnRlbnRXaW5kb3cuaW5uZXJXaWR0aCwgY29udGVudFdpbmRvdy5pbm5lckhlaWdodCkpO1xuICAgICAgY29uc3QgbGFzdERvY3VtZW50RGltZW5zaW9ucyA9IENlbGwoU3VnYXJQb3NpdGlvbihpbml0aWFsRG9jRWxlLm9mZnNldFdpZHRoLCBpbml0aWFsRG9jRWxlLm9mZnNldEhlaWdodCkpO1xuICAgICAgY29uc3QgcmVzaXplV2luZG93ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBvdXRlciA9IGxhc3RXaW5kb3dEaW1lbnNpb25zLmdldCgpO1xuICAgICAgICBpZiAob3V0ZXIubGVmdCAhPT0gY29udGVudFdpbmRvdy5pbm5lcldpZHRoIHx8IG91dGVyLnRvcCAhPT0gY29udGVudFdpbmRvdy5pbm5lckhlaWdodCkge1xuICAgICAgICAgIGxhc3RXaW5kb3dEaW1lbnNpb25zLnNldChTdWdhclBvc2l0aW9uKGNvbnRlbnRXaW5kb3cuaW5uZXJXaWR0aCwgY29udGVudFdpbmRvdy5pbm5lckhlaWdodCkpO1xuICAgICAgICAgIGZpcmVSZXNpemVDb250ZW50KGVkaXRvcik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCByZXNpemVEb2N1bWVudCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZG9jRWxlID0gZWRpdG9yLmdldERvYygpLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgY29uc3QgaW5uZXIgPSBsYXN0RG9jdW1lbnREaW1lbnNpb25zLmdldCgpO1xuICAgICAgICBpZiAoaW5uZXIubGVmdCAhPT0gZG9jRWxlLm9mZnNldFdpZHRoIHx8IGlubmVyLnRvcCAhPT0gZG9jRWxlLm9mZnNldEhlaWdodCkge1xuICAgICAgICAgIGxhc3REb2N1bWVudERpbWVuc2lvbnMuc2V0KFN1Z2FyUG9zaXRpb24oZG9jRWxlLm9mZnNldFdpZHRoLCBkb2NFbGUub2Zmc2V0SGVpZ2h0KSk7XG4gICAgICAgICAgZmlyZVJlc2l6ZUNvbnRlbnQoZWRpdG9yKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNjcm9sbCA9IGUgPT4ge1xuICAgICAgICBmaXJlU2Nyb2xsQ29udGVudChlZGl0b3IsIGUpO1xuICAgICAgfTtcbiAgICAgIGRvbS5iaW5kKGNvbnRlbnRXaW5kb3csICdyZXNpemUnLCByZXNpemVXaW5kb3cpO1xuICAgICAgZG9tLmJpbmQoY29udGVudFdpbmRvdywgJ3Njcm9sbCcsIHNjcm9sbCk7XG4gICAgICBjb25zdCBlbGVtZW50TG9hZCA9IGNhcHR1cmUoU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSksICdsb2FkJywgcmVzaXplRG9jdW1lbnQpO1xuICAgICAgZWRpdG9yLm9uKCdoaWRlJywgKCkgPT4ge1xuICAgICAgICBlYWNoJDEodWlNb3RoZXJzaGlwcywgbSA9PiB7XG4gICAgICAgICAgc2V0JDgobS5lbGVtZW50LCAnZGlzcGxheScsICdub25lJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ3Nob3cnLCAoKSA9PiB7XG4gICAgICAgIGVhY2gkMSh1aU1vdGhlcnNoaXBzLCBtID0+IHtcbiAgICAgICAgICByZW1vdmUkNihtLmVsZW1lbnQsICdkaXNwbGF5Jyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ05vZGVDaGFuZ2UnLCByZXNpemVEb2N1bWVudCk7XG4gICAgICBlZGl0b3Iub24oJ3JlbW92ZScsICgpID0+IHtcbiAgICAgICAgZWxlbWVudExvYWQudW5iaW5kKCk7XG4gICAgICAgIGRvbS51bmJpbmQoY29udGVudFdpbmRvdywgJ3Jlc2l6ZScsIHJlc2l6ZVdpbmRvdyk7XG4gICAgICAgIGRvbS51bmJpbmQoY29udGVudFdpbmRvdywgJ3Njcm9sbCcsIHNjcm9sbCk7XG4gICAgICAgIGNvbnRlbnRXaW5kb3cgPSBudWxsO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBhdHRhY2hVaU1vdGhlcnNoaXBzID0gKGVkaXRvciwgdWlSb290LCB1aVJlZnMpID0+IHtcbiAgICAgIGlmIChpc1NwbGl0VWlNb2RlKGVkaXRvcikpIHtcbiAgICAgICAgYXR0YWNoU3lzdGVtQWZ0ZXIodWlSZWZzLm1haW5VaS5tb3RoZXJzaGlwLmVsZW1lbnQsIHVpUmVmcy5wb3B1cFVpLm1vdGhlcnNoaXApO1xuICAgICAgfVxuICAgICAgYXR0YWNoU3lzdGVtKHVpUm9vdCwgdWlSZWZzLmRpYWxvZ1VpLm1vdGhlcnNoaXApO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyJDEgPSBhc3luYyAoZWRpdG9yLCB1aVJlZnMsIHJhd1VpQ29uZmlnLCBiYWNrc3RhZ2UsIGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHttYWluVWksIHVpTW90aGVyc2hpcHN9ID0gdWlSZWZzO1xuICAgICAgY29uc3QgbGFzdFRvb2xiYXJXaWR0aCA9IENlbGwoMCk7XG4gICAgICBjb25zdCBvdXRlckNvbnRhaW5lciA9IG1haW5VaS5vdXRlckNvbnRhaW5lcjtcbiAgICAgIGF3YWl0IGlmcmFtZShlZGl0b3IpO1xuICAgICAgY29uc3QgZVRhcmdldE5vZGUgPSBTdWdhckVsZW1lbnQuZnJvbURvbShhcmdzLnRhcmdldE5vZGUpO1xuICAgICAgY29uc3QgdWlSb290ID0gZ2V0Q29udGVudENvbnRhaW5lcihnZXRSb290Tm9kZShlVGFyZ2V0Tm9kZSkpO1xuICAgICAgYXR0YWNoU3lzdGVtQWZ0ZXIoZVRhcmdldE5vZGUsIG1haW5VaS5tb3RoZXJzaGlwKTtcbiAgICAgIGF0dGFjaFVpTW90aGVyc2hpcHMoZWRpdG9yLCB1aVJvb3QsIHVpUmVmcyk7XG4gICAgICBlZGl0b3Iub24oJ1Bvc3RSZW5kZXInLCAoKSA9PiB7XG4gICAgICAgIE91dGVyQ29udGFpbmVyLnNldFNpZGViYXIob3V0ZXJDb250YWluZXIsIHJhd1VpQ29uZmlnLnNpZGViYXIsIGdldFNpZGViYXJTaG93KGVkaXRvcikpO1xuICAgICAgICBzZXRUb29sYmFyKGVkaXRvciwgdWlSZWZzLCByYXdVaUNvbmZpZywgYmFja3N0YWdlKTtcbiAgICAgICAgbGFzdFRvb2xiYXJXaWR0aC5zZXQoZWRpdG9yLmdldFdpbigpLmlubmVyV2lkdGgpO1xuICAgICAgICBPdXRlckNvbnRhaW5lci5zZXRNZW51YmFyKG91dGVyQ29udGFpbmVyLCBpZGVudGlmeU1lbnVzKGVkaXRvciwgcmF3VWlDb25maWcpKTtcbiAgICAgICAgT3V0ZXJDb250YWluZXIuc2V0Vmlld3Mob3V0ZXJDb250YWluZXIsIHJhd1VpQ29uZmlnLnZpZXdzKTtcbiAgICAgICAgc2V0dXBFdmVudHMkMShlZGl0b3IsIHVpUmVmcyk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNvY2tldCA9IE91dGVyQ29udGFpbmVyLmdldFNvY2tldChvdXRlckNvbnRhaW5lcikuZ2V0T3JEaWUoJ0NvdWxkIG5vdCBmaW5kIGV4cGVjdGVkIHNvY2tldCBlbGVtZW50Jyk7XG4gICAgICBpZiAoaXNpT1MxMikge1xuICAgICAgICBzZXRBbGwoc29ja2V0LmVsZW1lbnQsIHtcbiAgICAgICAgICAnb3ZlcmZsb3cnOiAnc2Nyb2xsJyxcbiAgICAgICAgICAnLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmcnOiAndG91Y2gnXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBsaW1pdCA9IGZpcnN0KCgpID0+IHtcbiAgICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ1Njcm9sbENvbnRlbnQnKTtcbiAgICAgICAgfSwgMjApO1xuICAgICAgICBjb25zdCB1bmJpbmRlciA9IGJpbmQoc29ja2V0LmVsZW1lbnQsICdzY3JvbGwnLCBsaW1pdC50aHJvdHRsZSk7XG4gICAgICAgIGVkaXRvci5vbigncmVtb3ZlJywgdW5iaW5kZXIudW5iaW5kKTtcbiAgICAgIH1cbiAgICAgIHNldHVwUmVhZG9ubHlNb2RlU3dpdGNoKGVkaXRvciwgdWlSZWZzKTtcbiAgICAgIGVkaXRvci5hZGRDb21tYW5kKCdUb2dnbGVTaWRlYmFyJywgKF91aSwgdmFsdWUpID0+IHtcbiAgICAgICAgT3V0ZXJDb250YWluZXIudG9nZ2xlU2lkZWJhcihvdXRlckNvbnRhaW5lciwgdmFsdWUpO1xuICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ1RvZ2dsZVNpZGViYXInKTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLmFkZFF1ZXJ5VmFsdWVIYW5kbGVyKCdUb2dnbGVTaWRlYmFyJywgKCkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSBPdXRlckNvbnRhaW5lci53aGljaFNpZGViYXIob3V0ZXJDb250YWluZXIpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLmFkZENvbW1hbmQoJ1RvZ2dsZVZpZXcnLCAoX3VpLCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoT3V0ZXJDb250YWluZXIudG9nZ2xlVmlldyhvdXRlckNvbnRhaW5lciwgdmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gb3V0ZXJDb250YWluZXIuZWxlbWVudDtcbiAgICAgICAgICBtYWluVWkubW90aGVyc2hpcC5icm9hZGNhc3RPbihbZGlzbWlzc1BvcHVwcygpXSwgeyB0YXJnZXQgfSk7XG4gICAgICAgICAgZWFjaCQxKHVpTW90aGVyc2hpcHMsIG0gPT4ge1xuICAgICAgICAgICAgbS5icm9hZGNhc3RPbihbZGlzbWlzc1BvcHVwcygpXSwgeyB0YXJnZXQgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGlzTnVsbChPdXRlckNvbnRhaW5lci53aGljaFZpZXcob3V0ZXJDb250YWluZXIpKSkge1xuICAgICAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICAgICAgICAgIE91dGVyQ29udGFpbmVyLnJlZnJlc2hUb29sYmFyKG91dGVyQ29udGFpbmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLmFkZFF1ZXJ5VmFsdWVIYW5kbGVyKCdUb2dnbGVWaWV3JywgKCkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSBPdXRlckNvbnRhaW5lci53aGljaFZpZXcob3V0ZXJDb250YWluZXIpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdG9vbGJhck1vZGUgPSBnZXRUb29sYmFyTW9kZShlZGl0b3IpO1xuICAgICAgY29uc3QgcmVmcmVzaERyYXdlciA9ICgpID0+IHtcbiAgICAgICAgT3V0ZXJDb250YWluZXIucmVmcmVzaFRvb2xiYXIodWlSZWZzLm1haW5VaS5vdXRlckNvbnRhaW5lcik7XG4gICAgICB9O1xuICAgICAgaWYgKHRvb2xiYXJNb2RlID09PSBUb29sYmFyTW9kZSQxLnNsaWRpbmcgfHwgdG9vbGJhck1vZGUgPT09IFRvb2xiYXJNb2RlJDEuZmxvYXRpbmcpIHtcbiAgICAgICAgZWRpdG9yLm9uKCdSZXNpemVXaW5kb3cgUmVzaXplRWRpdG9yIFJlc2l6ZUNvbnRlbnQnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgd2lkdGggPSBlZGl0b3IuZ2V0V2luKCkuaW5uZXJXaWR0aDtcbiAgICAgICAgICBpZiAod2lkdGggIT09IGxhc3RUb29sYmFyV2lkdGguZ2V0KCkpIHtcbiAgICAgICAgICAgIHJlZnJlc2hEcmF3ZXIoKTtcbiAgICAgICAgICAgIGxhc3RUb29sYmFyV2lkdGguc2V0KHdpZHRoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgYXBpID0ge1xuICAgICAgICBzZXRFbmFibGVkOiBzdGF0ZSA9PiB7XG4gICAgICAgICAgYnJvYWRjYXN0UmVhZG9ubHkodWlSZWZzLCAhc3RhdGUpO1xuICAgICAgICB9LFxuICAgICAgICBpc0VuYWJsZWQ6ICgpID0+ICFEaXNhYmxpbmcuaXNEaXNhYmxlZChvdXRlckNvbnRhaW5lcilcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZnJhbWVDb250YWluZXI6IHNvY2tldC5lbGVtZW50LmRvbSxcbiAgICAgICAgZWRpdG9yQ29udGFpbmVyOiBvdXRlckNvbnRhaW5lci5lbGVtZW50LmRvbSxcbiAgICAgICAgYXBpXG4gICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgSWZyYW1lID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIHJlbmRlcjogcmVuZGVyJDFcbiAgICB9KTtcblxuICAgIGNvbnN0IHBhcnNlVG9JbnQgPSB2YWwgPT4ge1xuICAgICAgY29uc3QgcmUgPSAvXlswLTlcXC5dKyh8cHgpJC9pO1xuICAgICAgaWYgKHJlLnRlc3QoJycgKyB2YWwpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHBhcnNlSW50KCcnICsgdmFsLCAxMCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IG51bVRvUHggPSB2YWwgPT4gaXNOdW1iZXIodmFsKSA/IHZhbCArICdweCcgOiB2YWw7XG4gICAgY29uc3QgY2FsY0NhcHBlZFNpemUgPSAoc2l6ZSwgbWluU2l6ZSwgbWF4U2l6ZSkgPT4ge1xuICAgICAgY29uc3QgbWluT3ZlcnJpZGUgPSBtaW5TaXplLmZpbHRlcihtaW4gPT4gc2l6ZSA8IG1pbik7XG4gICAgICBjb25zdCBtYXhPdmVycmlkZSA9IG1heFNpemUuZmlsdGVyKG1heCA9PiBzaXplID4gbWF4KTtcbiAgICAgIHJldHVybiBtaW5PdmVycmlkZS5vcihtYXhPdmVycmlkZSkuZ2V0T3Ioc2l6ZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldEhlaWdodCA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBiYXNlSGVpZ2h0ID0gZ2V0SGVpZ2h0T3B0aW9uKGVkaXRvcik7XG4gICAgICBjb25zdCBtaW5IZWlnaHQgPSBnZXRNaW5IZWlnaHRPcHRpb24oZWRpdG9yKTtcbiAgICAgIGNvbnN0IG1heEhlaWdodCA9IGdldE1heEhlaWdodE9wdGlvbihlZGl0b3IpO1xuICAgICAgcmV0dXJuIHBhcnNlVG9JbnQoYmFzZUhlaWdodCkubWFwKGhlaWdodCA9PiBjYWxjQ2FwcGVkU2l6ZShoZWlnaHQsIG1pbkhlaWdodCwgbWF4SGVpZ2h0KSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRIZWlnaHRXaXRoRmFsbGJhY2sgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgaGVpZ2h0ID0gZ2V0SGVpZ2h0KGVkaXRvcik7XG4gICAgICByZXR1cm4gaGVpZ2h0LmdldE9yKGdldEhlaWdodE9wdGlvbihlZGl0b3IpKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFdpZHRoID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGJhc2VXaWR0aCA9IGdldFdpZHRoT3B0aW9uKGVkaXRvcik7XG4gICAgICBjb25zdCBtaW5XaWR0aCA9IGdldE1pbldpZHRoT3B0aW9uKGVkaXRvcik7XG4gICAgICBjb25zdCBtYXhXaWR0aCA9IGdldE1heFdpZHRoT3B0aW9uKGVkaXRvcik7XG4gICAgICByZXR1cm4gcGFyc2VUb0ludChiYXNlV2lkdGgpLm1hcCh3aWR0aCA9PiBjYWxjQ2FwcGVkU2l6ZSh3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoKSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRXaWR0aFdpdGhGYWxsYmFjayA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCB3aWR0aCA9IGdldFdpZHRoKGVkaXRvcik7XG4gICAgICByZXR1cm4gd2lkdGguZ2V0T3IoZ2V0V2lkdGhPcHRpb24oZWRpdG9yKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHtUb29sYmFyTG9jYXRpb24sIFRvb2xiYXJNb2RlfSA9IE9wdGlvbnM7XG4gICAgY29uc3QgbWF4aW11bURpc3RhbmNlVG9FZGdlID0gNDA7XG4gICAgY29uc3QgSW5saW5lSGVhZGVyID0gKGVkaXRvciwgdGFyZ2V0RWxtLCB1aVJlZnMsIGJhY2tzdGFnZSwgZmxvYXRDb250YWluZXIpID0+IHtcbiAgICAgIGNvbnN0IHttYWluVWksIHVpTW90aGVyc2hpcHN9ID0gdWlSZWZzO1xuICAgICAgY29uc3QgRE9NID0gZ2xvYmFsJDcuRE9NO1xuICAgICAgY29uc3QgdXNlRml4ZWRUb29sYmFyQ29udGFpbmVyID0gdXNlRml4ZWRDb250YWluZXIoZWRpdG9yKTtcbiAgICAgIGNvbnN0IGlzU3RpY2t5ID0gaXNTdGlja3lUb29sYmFyKGVkaXRvcik7XG4gICAgICBjb25zdCBlZGl0b3JNYXhXaWR0aE9wdCA9IGdldE1heFdpZHRoT3B0aW9uKGVkaXRvcikub3IoZ2V0V2lkdGgoZWRpdG9yKSk7XG4gICAgICBjb25zdCBoZWFkZXJCYWNrc3RhZ2UgPSBiYWNrc3RhZ2Uuc2hhcmVkLmhlYWRlcjtcbiAgICAgIGNvbnN0IGlzUG9zaXRpb25lZEF0VG9wID0gaGVhZGVyQmFja3N0YWdlLmlzUG9zaXRpb25lZEF0VG9wO1xuICAgICAgY29uc3QgdG9vbGJhck1vZGUgPSBnZXRUb29sYmFyTW9kZShlZGl0b3IpO1xuICAgICAgY29uc3QgaXNTcGxpdFRvb2xiYXIgPSB0b29sYmFyTW9kZSA9PT0gVG9vbGJhck1vZGUuc2xpZGluZyB8fCB0b29sYmFyTW9kZSA9PT0gVG9vbGJhck1vZGUuZmxvYXRpbmc7XG4gICAgICBjb25zdCB2aXNpYmxlID0gQ2VsbChmYWxzZSk7XG4gICAgICBjb25zdCBpc1Zpc2libGUgPSAoKSA9PiB2aXNpYmxlLmdldCgpICYmICFlZGl0b3IucmVtb3ZlZDtcbiAgICAgIGNvbnN0IGNhbGNUb29sYmFyT2Zmc2V0ID0gdG9vbGJhciA9PiBpc1NwbGl0VG9vbGJhciA/IHRvb2xiYXIuZm9sZChjb25zdGFudCQxKDApLCB0YmFyID0+IHRiYXIuY29tcG9uZW50cygpLmxlbmd0aCA+IDEgPyBnZXQkZCh0YmFyLmNvbXBvbmVudHMoKVsxXS5lbGVtZW50KSA6IDApIDogMDtcbiAgICAgIGNvbnN0IGNhbGNNb2RlID0gY29udGFpbmVyID0+IHtcbiAgICAgICAgc3dpdGNoIChnZXRUb29sYmFyTG9jYXRpb24oZWRpdG9yKSkge1xuICAgICAgICBjYXNlIFRvb2xiYXJMb2NhdGlvbi5hdXRvOlxuICAgICAgICAgIGNvbnN0IHRvb2xiYXIgPSBPdXRlckNvbnRhaW5lci5nZXRUb29sYmFyKG1haW5VaS5vdXRlckNvbnRhaW5lcik7XG4gICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gY2FsY1Rvb2xiYXJPZmZzZXQodG9vbGJhcik7XG4gICAgICAgICAgY29uc3QgdG9vbGJhckhlaWdodCA9IGdldCRkKGNvbnRhaW5lci5lbGVtZW50KSAtIG9mZnNldDtcbiAgICAgICAgICBjb25zdCB0YXJnZXRCb3VuZHMgPSBib3gkMSh0YXJnZXRFbG0pO1xuICAgICAgICAgIGNvbnN0IHJvb21BdFRvcCA9IHRhcmdldEJvdW5kcy55ID4gdG9vbGJhckhlaWdodDtcbiAgICAgICAgICBpZiAocm9vbUF0VG9wKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3RvcCc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IGRvY3VtZW50RWxlbWVudCh0YXJnZXRFbG0pO1xuICAgICAgICAgICAgY29uc3QgZG9jSGVpZ2h0ID0gTWF0aC5tYXgoZG9jLmRvbS5zY3JvbGxIZWlnaHQsIGdldCRkKGRvYykpO1xuICAgICAgICAgICAgY29uc3Qgcm9vbUF0Qm90dG9tID0gdGFyZ2V0Qm91bmRzLmJvdHRvbSA8IGRvY0hlaWdodCAtIHRvb2xiYXJIZWlnaHQ7XG4gICAgICAgICAgICBpZiAocm9vbUF0Qm90dG9tKSB7XG4gICAgICAgICAgICAgIHJldHVybiAnYm90dG9tJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IHdpbkJvdW5kcyA9IHdpbigpO1xuICAgICAgICAgICAgICBjb25zdCBpc1Jvb21BdEJvdHRvbVZpZXdwb3J0ID0gd2luQm91bmRzLmJvdHRvbSA8IHRhcmdldEJvdW5kcy5ib3R0b20gLSB0b29sYmFySGVpZ2h0O1xuICAgICAgICAgICAgICByZXR1cm4gaXNSb29tQXRCb3R0b21WaWV3cG9ydCA/ICdib3R0b20nIDogJ3RvcCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIFRvb2xiYXJMb2NhdGlvbi5ib3R0b206XG4gICAgICAgICAgcmV0dXJuICdib3R0b20nO1xuICAgICAgICBjYXNlIFRvb2xiYXJMb2NhdGlvbi50b3A6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuICd0b3AnO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0dXBNb2RlID0gbW9kZSA9PiB7XG4gICAgICAgIGZsb2F0Q29udGFpbmVyLm9uKGNvbnRhaW5lciA9PiB7XG4gICAgICAgICAgRG9ja2luZy5zZXRNb2Rlcyhjb250YWluZXIsIFttb2RlXSk7XG4gICAgICAgICAgaGVhZGVyQmFja3N0YWdlLnNldERvY2tpbmdNb2RlKG1vZGUpO1xuICAgICAgICAgIGNvbnN0IHZlcnRpY2FsRGlyID0gaXNQb3NpdGlvbmVkQXRUb3AoKSA/IEF0dHJpYnV0ZVZhbHVlLlRvcFRvQm90dG9tIDogQXR0cmlidXRlVmFsdWUuQm90dG9tVG9Ub3A7XG4gICAgICAgICAgc2V0JDkoY29udGFpbmVyLmVsZW1lbnQsIEF0dHJpYnV0ZSwgdmVydGljYWxEaXIpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCB1cGRhdGVDaHJvbWVXaWR0aCA9ICgpID0+IHtcbiAgICAgICAgZmxvYXRDb250YWluZXIub24oY29udGFpbmVyID0+IHtcbiAgICAgICAgICBjb25zdCBtYXhXaWR0aCA9IGVkaXRvck1heFdpZHRoT3B0LmdldE9yVGh1bmsoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYm9keU1hcmdpbiA9IHBhcnNlVG9JbnQoZ2V0JGUoYm9keSgpLCAnbWFyZ2luLWxlZnQnKSkuZ2V0T3IoMCk7XG4gICAgICAgICAgICByZXR1cm4gZ2V0JGMoYm9keSgpKSAtIGFic29sdXRlJDModGFyZ2V0RWxtKS5sZWZ0ICsgYm9keU1hcmdpbjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzZXQkOChjb250YWluZXIuZWxlbWVudCwgJ21heC13aWR0aCcsIG1heFdpZHRoICsgJ3B4Jyk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVwZGF0ZUNocm9tZVBvc2l0aW9uID0gb3B0VG9vbGJhcldpZHRoID0+IHtcbiAgICAgICAgZmxvYXRDb250YWluZXIub24oY29udGFpbmVyID0+IHtcbiAgICAgICAgICBjb25zdCB0b29sYmFyID0gT3V0ZXJDb250YWluZXIuZ2V0VG9vbGJhcihtYWluVWkub3V0ZXJDb250YWluZXIpO1xuICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGNhbGNUb29sYmFyT2Zmc2V0KHRvb2xiYXIpO1xuICAgICAgICAgIGNvbnN0IHRhcmdldEJvdW5kcyA9IGJveCQxKHRhcmdldEVsbSk7XG4gICAgICAgICAgY29uc3Qge3RvcCwgbGVmdH0gPSBnZXRPZmZzZXRQYXJlbnQkMShlZGl0b3IsIG1haW5VaS5vdXRlckNvbnRhaW5lci5lbGVtZW50KS5mb2xkKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHRvcDogaXNQb3NpdGlvbmVkQXRUb3AoKSA/IE1hdGgubWF4KHRhcmdldEJvdW5kcy55IC0gZ2V0JGQoY29udGFpbmVyLmVsZW1lbnQpICsgb2Zmc2V0LCAwKSA6IHRhcmdldEJvdW5kcy5ib3R0b20sXG4gICAgICAgICAgICAgIGxlZnQ6IHRhcmdldEJvdW5kcy54XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0sIG9mZnNldFBhcmVudCA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXRCb3ggPSBib3gkMShvZmZzZXRQYXJlbnQpO1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsRGVsdGEgPSAoX2EgPSBvZmZzZXRQYXJlbnQuZG9tLnNjcm9sbFRvcCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcbiAgICAgICAgICAgIGNvbnN0IGlzT2Zmc2V0UGFyZW50Qm9keSA9IGVxKG9mZnNldFBhcmVudCwgYm9keSgpKTtcbiAgICAgICAgICAgIGNvbnN0IHRvcFZhbHVlID0gaXNPZmZzZXRQYXJlbnRCb2R5ID8gTWF0aC5tYXgodGFyZ2V0Qm91bmRzLnkgLSBnZXQkZChjb250YWluZXIuZWxlbWVudCkgKyBvZmZzZXQsIDApIDogdGFyZ2V0Qm91bmRzLnkgLSBvZmZzZXRCb3gueSArIHNjcm9sbERlbHRhIC0gZ2V0JGQoY29udGFpbmVyLmVsZW1lbnQpICsgb2Zmc2V0O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdG9wOiBpc1Bvc2l0aW9uZWRBdFRvcCgpID8gdG9wVmFsdWUgOiB0YXJnZXRCb3VuZHMuYm90dG9tLFxuICAgICAgICAgICAgICBsZWZ0OiBpc09mZnNldFBhcmVudEJvZHkgPyB0YXJnZXRCb3VuZHMueCA6IHRhcmdldEJvdW5kcy54IC0gb2Zmc2V0Qm94LnhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgYmFzZVByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIGxlZnQ6IE1hdGgucm91bmQobGVmdCkgKyAncHgnLFxuICAgICAgICAgICAgdG9wOiBNYXRoLnJvdW5kKHRvcCkgKyAncHgnXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCB3aWR0aFByb3BlcnRpZXMgPSBvcHRUb29sYmFyV2lkdGgubWFwKHRvb2xiYXJXaWR0aCA9PiB7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGwgPSBnZXQkYigpO1xuICAgICAgICAgICAgY29uc3QgbWluaW11bVRvb2xiYXJXaWR0aCA9IDE1MDtcbiAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZVdpZHRoID0gd2luZG93LmlubmVyV2lkdGggLSAobGVmdCAtIHNjcm9sbC5sZWZ0KTtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgoTWF0aC5taW4odG9vbGJhcldpZHRoLCBhdmFpbGFibGVXaWR0aCksIG1pbmltdW1Ub29sYmFyV2lkdGgpO1xuICAgICAgICAgICAgcmV0dXJuIHsgd2lkdGg6IHdpZHRoICsgJ3B4JyB9O1xuICAgICAgICAgIH0pLmdldE9yKHt9KTtcbiAgICAgICAgICBzZXRBbGwobWFpblVpLm91dGVyQ29udGFpbmVyLmVsZW1lbnQsIHtcbiAgICAgICAgICAgIC4uLmJhc2VQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgLi4ud2lkdGhQcm9wZXJ0aWVzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldE9mZnNldFBhcmVudCQxID0gKGVkaXRvciwgZWxlbWVudCkgPT4gaXNTcGxpdFVpTW9kZShlZGl0b3IpID8gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgY29uc3QgcmVwb3NpdGlvblBvcHVwcyQxID0gKCkgPT4ge1xuICAgICAgICBlYWNoJDEodWlNb3RoZXJzaGlwcywgbSA9PiB7XG4gICAgICAgICAgbS5icm9hZGNhc3RPbihbcmVwb3NpdGlvblBvcHVwcygpXSwge30pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN0b3JlQW5kR2V0Q29tcGxldGVPdXRlckNvbnRhaW5lcldpZHRoID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXVzZUZpeGVkVG9vbGJhckNvbnRhaW5lcikge1xuICAgICAgICAgIGNvbnN0IHRvb2xiYXJDdXJyZW50UmlnaHRzaWRlUG9zaXRpb24gPSBhYnNvbHV0ZSQzKG1haW5VaS5vdXRlckNvbnRhaW5lci5lbGVtZW50KS5sZWZ0ICsgZ2V0T3V0ZXIkMShtYWluVWkub3V0ZXJDb250YWluZXIuZWxlbWVudCk7XG4gICAgICAgICAgaWYgKHRvb2xiYXJDdXJyZW50UmlnaHRzaWRlUG9zaXRpb24gPj0gd2luZG93LmlubmVyV2lkdGggLSBtYXhpbXVtRGlzdGFuY2VUb0VkZ2UgfHwgZ2V0UmF3KG1haW5VaS5vdXRlckNvbnRhaW5lci5lbGVtZW50LCAnd2lkdGgnKS5pc1NvbWUoKSkge1xuICAgICAgICAgICAgc2V0JDgobWFpblVpLm91dGVyQ29udGFpbmVyLmVsZW1lbnQsICdwb3NpdGlvbicsICdhYnNvbHV0ZScpO1xuICAgICAgICAgICAgc2V0JDgobWFpblVpLm91dGVyQ29udGFpbmVyLmVsZW1lbnQsICdsZWZ0JywgJzBweCcpO1xuICAgICAgICAgICAgcmVtb3ZlJDYobWFpblVpLm91dGVyQ29udGFpbmVyLmVsZW1lbnQsICd3aWR0aCcpO1xuICAgICAgICAgICAgY29uc3QgdyA9IGdldE91dGVyJDEobWFpblVpLm91dGVyQ29udGFpbmVyLmVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCB1cGRhdGUgPSBzdGlja3lBY3Rpb24gPT4ge1xuICAgICAgICBpZiAoIWlzVmlzaWJsZSgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdXNlRml4ZWRUb29sYmFyQ29udGFpbmVyKSB7XG4gICAgICAgICAgdXBkYXRlQ2hyb21lV2lkdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRUb29sYmFyV2lkdGggPSB1c2VGaXhlZFRvb2xiYXJDb250YWluZXIgPyBPcHRpb25hbC5ub25lKCkgOiByZXN0b3JlQW5kR2V0Q29tcGxldGVPdXRlckNvbnRhaW5lcldpZHRoKCk7XG4gICAgICAgIGlmIChpc1NwbGl0VG9vbGJhcikge1xuICAgICAgICAgIE91dGVyQ29udGFpbmVyLnJlZnJlc2hUb29sYmFyKG1haW5VaS5vdXRlckNvbnRhaW5lcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF1c2VGaXhlZFRvb2xiYXJDb250YWluZXIpIHtcbiAgICAgICAgICB1cGRhdGVDaHJvbWVQb3NpdGlvbihvcHRUb29sYmFyV2lkdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1N0aWNreSkge1xuICAgICAgICAgIGZsb2F0Q29udGFpbmVyLm9uKHN0aWNreUFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmVwb3NpdGlvblBvcHVwcyQxKCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZG9VcGRhdGVNb2RlID0gKCkgPT4ge1xuICAgICAgICBpZiAodXNlRml4ZWRUb29sYmFyQ29udGFpbmVyIHx8ICFpc1N0aWNreSB8fCAhaXNWaXNpYmxlKCkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZsb2F0Q29udGFpbmVyLmdldCgpLmV4aXN0cyhmYyA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudE1vZGUgPSBoZWFkZXJCYWNrc3RhZ2UuZ2V0RG9ja2luZ01vZGUoKTtcbiAgICAgICAgICBjb25zdCBuZXdNb2RlID0gY2FsY01vZGUoZmMpO1xuICAgICAgICAgIGlmIChuZXdNb2RlICE9PSBjdXJyZW50TW9kZSkge1xuICAgICAgICAgICAgc2V0dXBNb2RlKG5ld01vZGUpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNob3cgPSAoKSA9PiB7XG4gICAgICAgIHZpc2libGUuc2V0KHRydWUpO1xuICAgICAgICBzZXQkOChtYWluVWkub3V0ZXJDb250YWluZXIuZWxlbWVudCwgJ2Rpc3BsYXknLCAnZmxleCcpO1xuICAgICAgICBET00uYWRkQ2xhc3MoZWRpdG9yLmdldEJvZHkoKSwgJ21jZS1lZGl0LWZvY3VzJyk7XG4gICAgICAgIGVhY2gkMSh1aU1vdGhlcnNoaXBzLCBtID0+IHtcbiAgICAgICAgICByZW1vdmUkNihtLmVsZW1lbnQsICdkaXNwbGF5Jyk7XG4gICAgICAgIH0pO1xuICAgICAgICBkb1VwZGF0ZU1vZGUoKTtcbiAgICAgICAgaWYgKGlzU3BsaXRVaU1vZGUoZWRpdG9yKSkge1xuICAgICAgICAgIHVwZGF0ZShlbGVtID0+IERvY2tpbmcuaXNEb2NrZWQoZWxlbSkgPyBEb2NraW5nLnJlc2V0KGVsZW0pIDogRG9ja2luZy5yZWZyZXNoKGVsZW0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1cGRhdGUoRG9ja2luZy5yZWZyZXNoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGhpZGUgPSAoKSA9PiB7XG4gICAgICAgIHZpc2libGUuc2V0KGZhbHNlKTtcbiAgICAgICAgc2V0JDgobWFpblVpLm91dGVyQ29udGFpbmVyLmVsZW1lbnQsICdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAgICAgRE9NLnJlbW92ZUNsYXNzKGVkaXRvci5nZXRCb2R5KCksICdtY2UtZWRpdC1mb2N1cycpO1xuICAgICAgICBlYWNoJDEodWlNb3RoZXJzaGlwcywgbSA9PiB7XG4gICAgICAgICAgc2V0JDgobS5lbGVtZW50LCAnZGlzcGxheScsICdub25lJyk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVwZGF0ZU1vZGUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYW5nZWRNb2RlID0gZG9VcGRhdGVNb2RlKCk7XG4gICAgICAgIGlmIChjaGFuZ2VkTW9kZSkge1xuICAgICAgICAgIHVwZGF0ZShEb2NraW5nLnJlc2V0KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmlzaWJsZSxcbiAgICAgICAgaXNQb3NpdGlvbmVkQXRUb3AsXG4gICAgICAgIHNob3csXG4gICAgICAgIGhpZGUsXG4gICAgICAgIHVwZGF0ZSxcbiAgICAgICAgdXBkYXRlTW9kZSxcbiAgICAgICAgcmVwb3NpdGlvblBvcHVwczogcmVwb3NpdGlvblBvcHVwcyQxXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRUYXJnZXRQb3NBbmRCb3VuZHMgPSAodGFyZ2V0RWxtLCBpc1Rvb2xiYXJUb3ApID0+IHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IGJveCQxKHRhcmdldEVsbSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwb3M6IGlzVG9vbGJhclRvcCA/IGJvdW5kcy55IDogYm91bmRzLmJvdHRvbSxcbiAgICAgICAgYm91bmRzXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3Qgc2V0dXBFdmVudHMgPSAoZWRpdG9yLCB0YXJnZXRFbG0sIHVpLCB0b29sYmFyUGVyc2lzdCkgPT4ge1xuICAgICAgY29uc3QgcHJldlBvc0FuZEJvdW5kcyA9IENlbGwoZ2V0VGFyZ2V0UG9zQW5kQm91bmRzKHRhcmdldEVsbSwgdWkuaXNQb3NpdGlvbmVkQXRUb3AoKSkpO1xuICAgICAgY29uc3QgcmVzaXplQ29udGVudCA9IGUgPT4ge1xuICAgICAgICBjb25zdCB7cG9zLCBib3VuZHN9ID0gZ2V0VGFyZ2V0UG9zQW5kQm91bmRzKHRhcmdldEVsbSwgdWkuaXNQb3NpdGlvbmVkQXRUb3AoKSk7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBwb3M6IHByZXZQb3MsXG4gICAgICAgICAgYm91bmRzOiBwcmV2Qm91bmRzXG4gICAgICAgIH0gPSBwcmV2UG9zQW5kQm91bmRzLmdldCgpO1xuICAgICAgICBjb25zdCBoYXNSZXNpemVkID0gYm91bmRzLmhlaWdodCAhPT0gcHJldkJvdW5kcy5oZWlnaHQgfHwgYm91bmRzLndpZHRoICE9PSBwcmV2Qm91bmRzLndpZHRoO1xuICAgICAgICBwcmV2UG9zQW5kQm91bmRzLnNldCh7XG4gICAgICAgICAgcG9zLFxuICAgICAgICAgIGJvdW5kc1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGhhc1Jlc2l6ZWQpIHtcbiAgICAgICAgICBmaXJlUmVzaXplQ29udGVudChlZGl0b3IsIGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1aS5pc1Zpc2libGUoKSkge1xuICAgICAgICAgIGlmIChwcmV2UG9zICE9PSBwb3MpIHtcbiAgICAgICAgICAgIHVpLnVwZGF0ZShEb2NraW5nLnJlc2V0KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc1Jlc2l6ZWQpIHtcbiAgICAgICAgICAgIHVpLnVwZGF0ZU1vZGUoKTtcbiAgICAgICAgICAgIHVpLnJlcG9zaXRpb25Qb3B1cHMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpZiAoIXRvb2xiYXJQZXJzaXN0KSB7XG4gICAgICAgIGVkaXRvci5vbignYWN0aXZhdGUnLCB1aS5zaG93KTtcbiAgICAgICAgZWRpdG9yLm9uKCdkZWFjdGl2YXRlJywgdWkuaGlkZSk7XG4gICAgICB9XG4gICAgICBlZGl0b3Iub24oJ1NraW5Mb2FkZWQgUmVzaXplV2luZG93JywgKCkgPT4gdWkudXBkYXRlKERvY2tpbmcucmVzZXQpKTtcbiAgICAgIGVkaXRvci5vbignTm9kZUNoYW5nZSBrZXlkb3duJywgZSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiByZXNpemVDb250ZW50KGUpKTtcbiAgICAgIH0pO1xuICAgICAgbGV0IGxhc3RTY3JvbGxYID0gMDtcbiAgICAgIGNvbnN0IHVwZGF0ZVVpID0gbGFzdCgoKSA9PiB1aS51cGRhdGUoRG9ja2luZy5yZWZyZXNoKSwgMzMpO1xuICAgICAgZWRpdG9yLm9uKCdTY3JvbGxXaW5kb3cnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1Njcm9sbFggPSBnZXQkYigpLmxlZnQ7XG4gICAgICAgIGlmIChuZXdTY3JvbGxYICE9PSBsYXN0U2Nyb2xsWCkge1xuICAgICAgICAgIGxhc3RTY3JvbGxYID0gbmV3U2Nyb2xsWDtcbiAgICAgICAgICB1cGRhdGVVaS50aHJvdHRsZSgpO1xuICAgICAgICB9XG4gICAgICAgIHVpLnVwZGF0ZU1vZGUoKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGlzU3BsaXRVaU1vZGUoZWRpdG9yKSkge1xuICAgICAgICBlZGl0b3Iub24oJ0VsZW1lbnRTY3JvbGwnLCBfYXJncyA9PiB7XG4gICAgICAgICAgdWkudXBkYXRlKERvY2tpbmcucmVmcmVzaCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgZWxlbWVudExvYWQgPSB1bmJpbmRhYmxlKCk7XG4gICAgICBlbGVtZW50TG9hZC5zZXQoY2FwdHVyZShTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKSwgJ2xvYWQnLCBlID0+IHJlc2l6ZUNvbnRlbnQoZS5yYXcpKSk7XG4gICAgICBlZGl0b3Iub24oJ3JlbW92ZScsICgpID0+IHtcbiAgICAgICAgZWxlbWVudExvYWQuY2xlYXIoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyID0gYXN5bmMgKGVkaXRvciwgdWlSZWZzLCByYXdVaUNvbmZpZywgYmFja3N0YWdlLCBhcmdzKSA9PiB7XG4gICAgICBjb25zdCB7bWFpblVpfSA9IHVpUmVmcztcbiAgICAgIGNvbnN0IGZsb2F0Q29udGFpbmVyID0gdmFsdWUkMigpO1xuICAgICAgY29uc3QgdGFyZ2V0RWxtID0gU3VnYXJFbGVtZW50LmZyb21Eb20oYXJncy50YXJnZXROb2RlKTtcbiAgICAgIGNvbnN0IHVpID0gSW5saW5lSGVhZGVyKGVkaXRvciwgdGFyZ2V0RWxtLCB1aVJlZnMsIGJhY2tzdGFnZSwgZmxvYXRDb250YWluZXIpO1xuICAgICAgY29uc3QgdG9vbGJhclBlcnNpc3QgPSBpc1Rvb2xiYXJQZXJzaXN0KGVkaXRvcik7XG4gICAgICBhd2FpdCBpbmxpbmUoZWRpdG9yKTtcbiAgICAgIGNvbnN0IHJlbmRlciA9ICgpID0+IHtcbiAgICAgICAgaWYgKGZsb2F0Q29udGFpbmVyLmlzU2V0KCkpIHtcbiAgICAgICAgICB1aS5zaG93KCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZsb2F0Q29udGFpbmVyLnNldChPdXRlckNvbnRhaW5lci5nZXRIZWFkZXIobWFpblVpLm91dGVyQ29udGFpbmVyKS5nZXRPckRpZSgpKTtcbiAgICAgICAgY29uc3QgdWlDb250YWluZXIgPSBnZXRVaUNvbnRhaW5lcihlZGl0b3IpO1xuICAgICAgICBpZiAoaXNTcGxpdFVpTW9kZShlZGl0b3IpKSB7XG4gICAgICAgICAgYXR0YWNoU3lzdGVtQWZ0ZXIodGFyZ2V0RWxtLCBtYWluVWkubW90aGVyc2hpcCk7XG4gICAgICAgICAgYXR0YWNoU3lzdGVtQWZ0ZXIodGFyZ2V0RWxtLCB1aVJlZnMucG9wdXBVaS5tb3RoZXJzaGlwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhdHRhY2hTeXN0ZW0odWlDb250YWluZXIsIG1haW5VaS5tb3RoZXJzaGlwKTtcbiAgICAgICAgfVxuICAgICAgICBhdHRhY2hTeXN0ZW0odWlDb250YWluZXIsIHVpUmVmcy5kaWFsb2dVaS5tb3RoZXJzaGlwKTtcbiAgICAgICAgc2V0VG9vbGJhcihlZGl0b3IsIHVpUmVmcywgcmF3VWlDb25maWcsIGJhY2tzdGFnZSk7XG4gICAgICAgIE91dGVyQ29udGFpbmVyLnNldE1lbnViYXIobWFpblVpLm91dGVyQ29udGFpbmVyLCBpZGVudGlmeU1lbnVzKGVkaXRvciwgcmF3VWlDb25maWcpKTtcbiAgICAgICAgdWkuc2hvdygpO1xuICAgICAgICBzZXR1cEV2ZW50cyhlZGl0b3IsIHRhcmdldEVsbSwgdWksIHRvb2xiYXJQZXJzaXN0KTtcbiAgICAgICAgZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLm9uKCdzaG93JywgcmVuZGVyKTtcbiAgICAgIGVkaXRvci5vbignaGlkZScsIHVpLmhpZGUpO1xuICAgICAgaWYgKCF0b29sYmFyUGVyc2lzdCkge1xuICAgICAgICBlZGl0b3Iub24oJ2ZvY3VzJywgcmVuZGVyKTtcbiAgICAgICAgZWRpdG9yLm9uKCdibHVyJywgdWkuaGlkZSk7XG4gICAgICB9XG4gICAgICBlZGl0b3Iub24oJ2luaXQnLCAoKSA9PiB7XG4gICAgICAgIGlmIChlZGl0b3IuaGFzRm9jdXMoKSB8fCB0b29sYmFyUGVyc2lzdCkge1xuICAgICAgICAgIHJlbmRlcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHNldHVwUmVhZG9ubHlNb2RlU3dpdGNoKGVkaXRvciwgdWlSZWZzKTtcbiAgICAgIGNvbnN0IGFwaSA9IHtcbiAgICAgICAgc2hvdzogcmVuZGVyLFxuICAgICAgICBoaWRlOiB1aS5oaWRlLFxuICAgICAgICBzZXRFbmFibGVkOiBzdGF0ZSA9PiB7XG4gICAgICAgICAgYnJvYWRjYXN0UmVhZG9ubHkodWlSZWZzLCAhc3RhdGUpO1xuICAgICAgICB9LFxuICAgICAgICBpc0VuYWJsZWQ6ICgpID0+ICFEaXNhYmxpbmcuaXNEaXNhYmxlZChtYWluVWkub3V0ZXJDb250YWluZXIpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWRpdG9yQ29udGFpbmVyOiBtYWluVWkub3V0ZXJDb250YWluZXIuZWxlbWVudC5kb20sXG4gICAgICAgIGFwaVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgdmFyIElubGluZSA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICByZW5kZXI6IHJlbmRlclxuICAgIH0pO1xuXG4gICAgY29uc3QgTGF6eVVpUmVmZXJlbmNlcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGRpYWxvZ1VpID0gdmFsdWUkMigpO1xuICAgICAgY29uc3QgcG9wdXBVaSA9IHZhbHVlJDIoKTtcbiAgICAgIGNvbnN0IG1haW5VaSA9IHZhbHVlJDIoKTtcbiAgICAgIGNvbnN0IGxhenlHZXRJbk91dGVyT3JEaWUgPSAobGFiZWwsIGYpID0+ICgpID0+IG1haW5VaS5nZXQoKS5iaW5kKG9jID0+IGYob2Mub3V0ZXJDb250YWluZXIpKS5nZXRPckRpZShgQ291bGQgbm90IGZpbmQgJHsgbGFiZWwgfSBlbGVtZW50IGluIE91dGVyQ29udGFpbmVyYCk7XG4gICAgICBjb25zdCBnZXRVaU1vdGhlcnNoaXBzID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBvcHREaWFsb2dNb3RoZXJzaGlwID0gZGlhbG9nVWkuZ2V0KCkubWFwKHVpID0+IHVpLm1vdGhlcnNoaXApO1xuICAgICAgICBjb25zdCBvcHRQb3B1cE1vdGhlcnNoaXAgPSBwb3B1cFVpLmdldCgpLm1hcCh1aSA9PiB1aS5tb3RoZXJzaGlwKTtcbiAgICAgICAgcmV0dXJuIG9wdERpYWxvZ01vdGhlcnNoaXAuZm9sZCgoKSA9PiBvcHRQb3B1cE1vdGhlcnNoaXAudG9BcnJheSgpLCBkbSA9PiBvcHRQb3B1cE1vdGhlcnNoaXAuZm9sZCgoKSA9PiBbZG1dLCBwbSA9PiBlcShkbS5lbGVtZW50LCBwbS5lbGVtZW50KSA/IFtkbV0gOiBbXG4gICAgICAgICAgZG0sXG4gICAgICAgICAgcG1cbiAgICAgICAgXSkpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpYWxvZ1VpLFxuICAgICAgICBwb3B1cFVpLFxuICAgICAgICBtYWluVWksXG4gICAgICAgIGdldFVpTW90aGVyc2hpcHMsXG4gICAgICAgIGxhenlHZXRJbk91dGVyT3JEaWVcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHNob3dDb250ZXh0VG9vbGJhckV2ZW50ID0gJ2NvbnRleHR0b29sYmFyLXNob3cnO1xuICAgIGNvbnN0IGhpZGVDb250ZXh0VG9vbGJhckV2ZW50ID0gJ2NvbnRleHR0b29sYmFyLWhpZGUnO1xuXG4gICAgY29uc3QgZ2V0Rm9ybUFwaSA9IGlucHV0ID0+ICh7XG4gICAgICBoaWRlOiAoKSA9PiBlbWl0KGlucHV0LCBzYW5kYm94Q2xvc2UoKSksXG4gICAgICBnZXRWYWx1ZTogKCkgPT4gUmVwcmVzZW50aW5nLmdldFZhbHVlKGlucHV0KVxuICAgIH0pO1xuICAgIGNvbnN0IHJ1bk9uRXhlY3V0ZSA9IChtZW1JbnB1dCwgb3JpZ2luYWwpID0+IHJ1biQxKGludGVybmFsVG9vbGJhckJ1dHRvbkV4ZWN1dGUsIChjb21wLCBzZSkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBtZW1JbnB1dC5nZXQoY29tcCk7XG4gICAgICBjb25zdCBmb3JtQXBpID0gZ2V0Rm9ybUFwaShpbnB1dCk7XG4gICAgICBvcmlnaW5hbC5vbkFjdGlvbihmb3JtQXBpLCBzZS5ldmVudC5idXR0b25BcGkpO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlbmRlckNvbnRleHRCdXR0b24gPSAobWVtSW5wdXQsIGJ1dHRvbiwgcHJvdmlkZXJzKSA9PiB7XG4gICAgICBjb25zdCB7cHJpbWFyeSwgLi4ucmVzdH0gPSBidXR0b24ub3JpZ2luYWw7XG4gICAgICBjb25zdCBicmlkZ2VkID0gZ2V0T3JEaWUoY3JlYXRlVG9vbGJhckJ1dHRvbih7XG4gICAgICAgIC4uLnJlc3QsXG4gICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICBvbkFjdGlvbjogbm9vcFxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIHJlbmRlclRvb2xiYXJCdXR0b25XaXRoKGJyaWRnZWQsIHByb3ZpZGVycywgW3J1bk9uRXhlY3V0ZShtZW1JbnB1dCwgYnV0dG9uKV0pO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyQ29udGV4dFRvZ2dsZUJ1dHRvbiA9IChtZW1JbnB1dCwgYnV0dG9uLCBwcm92aWRlcnMpID0+IHtcbiAgICAgIGNvbnN0IHtwcmltYXJ5LCAuLi5yZXN0fSA9IGJ1dHRvbi5vcmlnaW5hbDtcbiAgICAgIGNvbnN0IGJyaWRnZWQgPSBnZXRPckRpZShjcmVhdGVUb2dnbGVCdXR0b24oe1xuICAgICAgICAuLi5yZXN0LFxuICAgICAgICB0eXBlOiAndG9nZ2xlYnV0dG9uJyxcbiAgICAgICAgb25BY3Rpb246IG5vb3BcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiByZW5kZXJUb29sYmFyVG9nZ2xlQnV0dG9uV2l0aChicmlkZ2VkLCBwcm92aWRlcnMsIFtydW5PbkV4ZWN1dGUobWVtSW5wdXQsIGJ1dHRvbildKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzVG9nZ2xlQnV0dG9uID0gYnV0dG9uID0+IGJ1dHRvbi50eXBlID09PSAnY29udGV4dGZvcm10b2dnbGVidXR0b24nO1xuICAgIGNvbnN0IGdlbmVyYXRlT25lID0gKG1lbUlucHV0LCBidXR0b24sIHByb3ZpZGVyc0JhY2tzdGFnZSkgPT4ge1xuICAgICAgaWYgKGlzVG9nZ2xlQnV0dG9uKGJ1dHRvbikpIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlckNvbnRleHRUb2dnbGVCdXR0b24obWVtSW5wdXQsIGJ1dHRvbiwgcHJvdmlkZXJzQmFja3N0YWdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZW5kZXJDb250ZXh0QnV0dG9uKG1lbUlucHV0LCBidXR0b24sIHByb3ZpZGVyc0JhY2tzdGFnZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZW5lcmF0ZSA9IChtZW1JbnB1dCwgYnV0dG9ucywgcHJvdmlkZXJzQmFja3N0YWdlKSA9PiB7XG4gICAgICBjb25zdCBtZW1lbnRvcyA9IG1hcCQyKGJ1dHRvbnMsIGJ1dHRvbiA9PiByZWNvcmQoZ2VuZXJhdGVPbmUobWVtSW5wdXQsIGJ1dHRvbiwgcHJvdmlkZXJzQmFja3N0YWdlKSkpO1xuICAgICAgY29uc3QgYXNTcGVjcyA9ICgpID0+IG1hcCQyKG1lbWVudG9zLCBtZW0gPT4gbWVtLmFzU3BlYygpKTtcbiAgICAgIGNvbnN0IGZpbmRQcmltYXJ5ID0gY29tcEluU3lzdGVtID0+IGZpbmRNYXAoYnV0dG9ucywgKGJ1dHRvbiwgaSkgPT4ge1xuICAgICAgICBpZiAoYnV0dG9uLnByaW1hcnkpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShtZW1lbnRvc1tpXSkuYmluZChtZW0gPT4gbWVtLmdldE9wdChjb21wSW5TeXN0ZW0pKS5maWx0ZXIobm90KERpc2FibGluZy5pc0Rpc2FibGVkKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhc1NwZWNzLFxuICAgICAgICBmaW5kUHJpbWFyeVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgYnVpbGRJbml0R3JvdXBzID0gKGN0eCwgcHJvdmlkZXJzKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dEF0dHJpYnV0ZXMgPSBjdHgubGFiZWwuZm9sZCgoKSA9PiAoe30pLCBsYWJlbCA9PiAoeyAnYXJpYS1sYWJlbCc6IGxhYmVsIH0pKTtcbiAgICAgIGNvbnN0IG1lbUlucHV0ID0gcmVjb3JkKElucHV0LnNrZXRjaCh7XG4gICAgICAgIGlucHV0Q2xhc3NlczogW1xuICAgICAgICAgICd0b3gtdG9vbGJhci10ZXh0ZmllbGQnLFxuICAgICAgICAgICd0b3gtdG9vbGJhci1uYXYtanMnXG4gICAgICAgIF0sXG4gICAgICAgIGRhdGE6IGN0eC5pbml0VmFsdWUoKSxcbiAgICAgICAgaW5wdXRBdHRyaWJ1dGVzLFxuICAgICAgICBzZWxlY3RPbkZvY3VzOiB0cnVlLFxuICAgICAgICBpbnB1dEJlaGF2aW91cnM6IGRlcml2ZSQxKFtLZXlpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIG1vZGU6ICdzcGVjaWFsJyxcbiAgICAgICAgICAgIG9uRW50ZXI6IGlucHV0ID0+IGNvbW1hbmRzLmZpbmRQcmltYXJ5KGlucHV0KS5tYXAocHJpbWFyeSA9PiB7XG4gICAgICAgICAgICAgIGVtaXRFeGVjdXRlKHByaW1hcnkpO1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgb25MZWZ0OiAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgICAgICAgc2UuY3V0KCk7XG4gICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25SaWdodDogKGNvbXAsIHNlKSA9PiB7XG4gICAgICAgICAgICAgIHNlLmN1dCgpO1xuICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXSlcbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IGNvbW1hbmRzID0gZ2VuZXJhdGUobWVtSW5wdXQsIGN0eC5jb21tYW5kcywgcHJvdmlkZXJzKTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICAgIGl0ZW1zOiBbbWVtSW5wdXQuYXNTcGVjKCldXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICAgIGl0ZW1zOiBjb21tYW5kcy5hc1NwZWNzKClcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckNvbnRleHRGb3JtID0gKHRvb2xiYXJUeXBlLCBjdHgsIHByb3ZpZGVycykgPT4gcmVuZGVyVG9vbGJhcih7XG4gICAgICB0eXBlOiB0b29sYmFyVHlwZSxcbiAgICAgIHVpZDogZ2VuZXJhdGUkNignY29udGV4dC10b29sYmFyJyksXG4gICAgICBpbml0R3JvdXBzOiBidWlsZEluaXRHcm91cHMoY3R4LCBwcm92aWRlcnMpLFxuICAgICAgb25Fc2NhcGU6IE9wdGlvbmFsLm5vbmUsXG4gICAgICBjeWNsaWNLZXlpbmc6IHRydWUsXG4gICAgICBwcm92aWRlcnNcbiAgICB9KTtcbiAgICBjb25zdCBDb250ZXh0Rm9ybSA9IHtcbiAgICAgIHJlbmRlckNvbnRleHRGb3JtLFxuICAgICAgYnVpbGRJbml0R3JvdXBzXG4gICAgfTtcblxuICAgIGNvbnN0IGlzVmVydGljYWxPdmVybGFwID0gKGEsIGIsIHRocmVzaG9sZCkgPT4gYi5ib3R0b20gLSBhLnkgPj0gdGhyZXNob2xkICYmIGEuYm90dG9tIC0gYi55ID49IHRocmVzaG9sZDtcbiAgICBjb25zdCBnZXRSYW5nZVJlY3QgPSBybmcgPT4ge1xuICAgICAgY29uc3QgcmVjdCA9IHJuZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGlmIChyZWN0LmhlaWdodCA8PSAwICYmIHJlY3Qud2lkdGggPD0gMCkge1xuICAgICAgICBjb25zdCBsZWFmJDEgPSBsZWFmKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJuZy5zdGFydENvbnRhaW5lciksIHJuZy5zdGFydE9mZnNldCkuZWxlbWVudDtcbiAgICAgICAgY29uc3QgZWxtID0gaXNUZXh0KGxlYWYkMSkgPyBwYXJlbnQobGVhZiQxKSA6IE9wdGlvbmFsLnNvbWUobGVhZiQxKTtcbiAgICAgICAgcmV0dXJuIGVsbS5maWx0ZXIoaXNFbGVtZW50JDEpLm1hcChlID0+IGUuZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKS5nZXRPcihyZWN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZWN0O1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ2V0U2VsZWN0aW9uQm91bmRzID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBjb25zdCByZWN0ID0gZ2V0UmFuZ2VSZWN0KHJuZyk7XG4gICAgICBpZiAoZWRpdG9yLmlubGluZSkge1xuICAgICAgICBjb25zdCBzY3JvbGwgPSBnZXQkYigpO1xuICAgICAgICByZXR1cm4gYm91bmRzKHNjcm9sbC5sZWZ0ICsgcmVjdC5sZWZ0LCBzY3JvbGwudG9wICsgcmVjdC50b3AsIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGJvZHlQb3MgPSBhYnNvbHV0ZSQyKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpKTtcbiAgICAgICAgcmV0dXJuIGJvdW5kcyhib2R5UG9zLnggKyByZWN0LmxlZnQsIGJvZHlQb3MueSArIHJlY3QudG9wLCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRBbmNob3JFbGVtZW50Qm91bmRzID0gKGVkaXRvciwgbGFzdEVsZW1lbnQpID0+IGxhc3RFbGVtZW50LmZpbHRlcihlbGVtID0+IGluQm9keShlbGVtKSAmJiBpc0hUTUxFbGVtZW50KGVsZW0pKS5tYXAoYWJzb2x1dGUkMikuZ2V0T3JUaHVuaygoKSA9PiBnZXRTZWxlY3Rpb25Cb3VuZHMoZWRpdG9yKSk7XG4gICAgY29uc3QgZ2V0SG9yaXpvbnRhbEJvdW5kcyA9IChjb250ZW50QXJlYUJveCwgdmlld3BvcnRCb3VuZHMsIG1hcmdpbikgPT4ge1xuICAgICAgY29uc3QgeCA9IE1hdGgubWF4KGNvbnRlbnRBcmVhQm94LnggKyBtYXJnaW4sIHZpZXdwb3J0Qm91bmRzLngpO1xuICAgICAgY29uc3QgcmlnaHQgPSBNYXRoLm1pbihjb250ZW50QXJlYUJveC5yaWdodCAtIG1hcmdpbiwgdmlld3BvcnRCb3VuZHMucmlnaHQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeCxcbiAgICAgICAgd2lkdGg6IHJpZ2h0IC0geFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFZlcnRpY2FsQm91bmRzID0gKGVkaXRvciwgY29udGVudEFyZWFCb3gsIHZpZXdwb3J0Qm91bmRzLCBpc1Rvb2xiYXJMb2NhdGlvblRvcCwgdG9vbGJhclR5cGUsIG1hcmdpbikgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldENvbnRhaW5lcigpKTtcbiAgICAgIGNvbnN0IGhlYWRlciA9IGRlc2NlbmRhbnQoY29udGFpbmVyLCAnLnRveC1lZGl0b3ItaGVhZGVyJykuZ2V0T3IoY29udGFpbmVyKTtcbiAgICAgIGNvbnN0IGhlYWRlckJveCA9IGJveCQxKGhlYWRlcik7XG4gICAgICBjb25zdCBpc1Rvb2xiYXJCZWxvd0NvbnRlbnRBcmVhID0gaGVhZGVyQm94LnkgPj0gY29udGVudEFyZWFCb3guYm90dG9tO1xuICAgICAgY29uc3QgaXNUb29sYmFyQWJvdmUgPSBpc1Rvb2xiYXJMb2NhdGlvblRvcCAmJiAhaXNUb29sYmFyQmVsb3dDb250ZW50QXJlYTtcbiAgICAgIGlmIChlZGl0b3IuaW5saW5lICYmIGlzVG9vbGJhckFib3ZlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeTogTWF0aC5tYXgoaGVhZGVyQm94LmJvdHRvbSArIG1hcmdpbiwgdmlld3BvcnRCb3VuZHMueSksXG4gICAgICAgICAgYm90dG9tOiB2aWV3cG9ydEJvdW5kcy5ib3R0b21cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChlZGl0b3IuaW5saW5lICYmICFpc1Rvb2xiYXJBYm92ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHk6IHZpZXdwb3J0Qm91bmRzLnksXG4gICAgICAgICAgYm90dG9tOiBNYXRoLm1pbihoZWFkZXJCb3gueSAtIG1hcmdpbiwgdmlld3BvcnRCb3VuZHMuYm90dG9tKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgY29udGFpbmVyQm91bmRzID0gdG9vbGJhclR5cGUgPT09ICdsaW5lJyA/IGJveCQxKGNvbnRhaW5lcikgOiBjb250ZW50QXJlYUJveDtcbiAgICAgIGlmIChpc1Rvb2xiYXJBYm92ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHk6IE1hdGgubWF4KGhlYWRlckJveC5ib3R0b20gKyBtYXJnaW4sIHZpZXdwb3J0Qm91bmRzLnkpLFxuICAgICAgICAgIGJvdHRvbTogTWF0aC5taW4oY29udGFpbmVyQm91bmRzLmJvdHRvbSAtIG1hcmdpbiwgdmlld3BvcnRCb3VuZHMuYm90dG9tKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeTogTWF0aC5tYXgoY29udGFpbmVyQm91bmRzLnkgKyBtYXJnaW4sIHZpZXdwb3J0Qm91bmRzLnkpLFxuICAgICAgICBib3R0b206IE1hdGgubWluKGhlYWRlckJveC55IC0gbWFyZ2luLCB2aWV3cG9ydEJvdW5kcy5ib3R0b20pXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZ2V0Q29udGV4dFRvb2xiYXJCb3VuZHMgPSAoZWRpdG9yLCBzaGFyZWRCYWNrc3RhZ2UsIHRvb2xiYXJUeXBlLCBtYXJnaW4gPSAwKSA9PiB7XG4gICAgICBjb25zdCB2aWV3cG9ydEJvdW5kcyA9IGdldEJvdW5kcyQzKHdpbmRvdyk7XG4gICAgICBjb25zdCBjb250ZW50QXJlYUJveCA9IGJveCQxKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRDb250ZW50QXJlYUNvbnRhaW5lcigpKSk7XG4gICAgICBjb25zdCB0b29sYmFyT3JNZW51YmFyRW5hYmxlZCA9IGlzTWVudWJhckVuYWJsZWQoZWRpdG9yKSB8fCBpc1Rvb2xiYXJFbmFibGVkKGVkaXRvcikgfHwgaXNNdWx0aXBsZVRvb2xiYXJzKGVkaXRvcik7XG4gICAgICBjb25zdCB7eCwgd2lkdGh9ID0gZ2V0SG9yaXpvbnRhbEJvdW5kcyhjb250ZW50QXJlYUJveCwgdmlld3BvcnRCb3VuZHMsIG1hcmdpbik7XG4gICAgICBpZiAoZWRpdG9yLmlubGluZSAmJiAhdG9vbGJhck9yTWVudWJhckVuYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIGJvdW5kcyh4LCB2aWV3cG9ydEJvdW5kcy55LCB3aWR0aCwgdmlld3BvcnRCb3VuZHMuaGVpZ2h0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGlzVG9vbGJhclRvcCA9IHNoYXJlZEJhY2tzdGFnZS5oZWFkZXIuaXNQb3NpdGlvbmVkQXRUb3AoKTtcbiAgICAgICAgY29uc3Qge3ksIGJvdHRvbX0gPSBnZXRWZXJ0aWNhbEJvdW5kcyhlZGl0b3IsIGNvbnRlbnRBcmVhQm94LCB2aWV3cG9ydEJvdW5kcywgaXNUb29sYmFyVG9wLCB0b29sYmFyVHlwZSwgbWFyZ2luKTtcbiAgICAgICAgcmV0dXJuIGJvdW5kcyh4LCB5LCB3aWR0aCwgYm90dG9tIC0geSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGJ1YmJsZVNpemUkMSA9IDEyO1xuICAgIGNvbnN0IGJ1YmJsZUFsaWdubWVudHMkMSA9IHtcbiAgICAgIHZhbGlnbkNlbnRyZTogW10sXG4gICAgICBhbGlnbkNlbnRyZTogW10sXG4gICAgICBhbGlnbkxlZnQ6IFsndG94LXBvcC0tYWxpZ24tbGVmdCddLFxuICAgICAgYWxpZ25SaWdodDogWyd0b3gtcG9wLS1hbGlnbi1yaWdodCddLFxuICAgICAgcmlnaHQ6IFsndG94LXBvcC0tcmlnaHQnXSxcbiAgICAgIGxlZnQ6IFsndG94LXBvcC0tbGVmdCddLFxuICAgICAgYm90dG9tOiBbJ3RveC1wb3AtLWJvdHRvbSddLFxuICAgICAgdG9wOiBbJ3RveC1wb3AtLXRvcCddLFxuICAgICAgaW5zZXQ6IFsndG94LXBvcC0taW5zZXQnXVxuICAgIH07XG4gICAgY29uc3QgYW5jaG9yT3ZlcnJpZGVzID0ge1xuICAgICAgbWF4SGVpZ2h0RnVuY3Rpb246IGV4cGFuZGFibGUkMSgpLFxuICAgICAgbWF4V2lkdGhGdW5jdGlvbjogZXhwYW5kYWJsZSgpXG4gICAgfTtcbiAgICBjb25zdCBpc0VudGlyZUVsZW1lbnRTZWxlY3RlZCA9IChlZGl0b3IsIGVsZW0pID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBjb25zdCBsZWFmJDEgPSBsZWFmKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJuZy5zdGFydENvbnRhaW5lciksIHJuZy5zdGFydE9mZnNldCk7XG4gICAgICByZXR1cm4gcm5nLnN0YXJ0Q29udGFpbmVyID09PSBybmcuZW5kQ29udGFpbmVyICYmIHJuZy5zdGFydE9mZnNldCA9PT0gcm5nLmVuZE9mZnNldCAtIDEgJiYgZXEobGVhZiQxLmVsZW1lbnQsIGVsZW0pO1xuICAgIH07XG4gICAgY29uc3QgcHJlc2VydmVQb3NpdGlvbiA9IChlbGVtLCBwb3NpdGlvbiwgZikgPT4ge1xuICAgICAgY29uc3QgY3VycmVudFBvc2l0aW9uID0gZ2V0UmF3KGVsZW0sICdwb3NpdGlvbicpO1xuICAgICAgc2V0JDgoZWxlbSwgJ3Bvc2l0aW9uJywgcG9zaXRpb24pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZihlbGVtKTtcbiAgICAgIGN1cnJlbnRQb3NpdGlvbi5lYWNoKHBvcyA9PiBzZXQkOChlbGVtLCAncG9zaXRpb24nLCBwb3MpKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBjb25zdCBzaG91bGRVc2VJbnNldExheW91dHMgPSBwb3NpdGlvbiA9PiBwb3NpdGlvbiA9PT0gJ25vZGUnO1xuICAgIGNvbnN0IGRldGVybWluZUluc2V0TGF5b3V0ID0gKGVkaXRvciwgY29udGV4dGJhciwgZWxlbSwgZGF0YSwgYm91bmRzKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3Rpb25Cb3VuZHMgPSBnZXRTZWxlY3Rpb25Cb3VuZHMoZWRpdG9yKTtcbiAgICAgIGNvbnN0IGlzU2FtZUFuY2hvckVsZW1lbnQgPSBkYXRhLmxhc3RFbGVtZW50KCkuZXhpc3RzKHByZXYgPT4gZXEoZWxlbSwgcHJldikpO1xuICAgICAgaWYgKGlzRW50aXJlRWxlbWVudFNlbGVjdGVkKGVkaXRvciwgZWxlbSkpIHtcbiAgICAgICAgcmV0dXJuIGlzU2FtZUFuY2hvckVsZW1lbnQgPyBwcmVzZXJ2ZSA6IG5vcnRoO1xuICAgICAgfSBlbHNlIGlmIChpc1NhbWVBbmNob3JFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBwcmVzZXJ2ZVBvc2l0aW9uKGNvbnRleHRiYXIsIGRhdGEuZ2V0TW9kZSgpLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNPdmVybGFwcGluZyA9IGlzVmVydGljYWxPdmVybGFwKHNlbGVjdGlvbkJvdW5kcywgYm94JDEoY29udGV4dGJhciksIC0yMCk7XG4gICAgICAgICAgcmV0dXJuIGlzT3ZlcmxhcHBpbmcgJiYgIWRhdGEuaXNSZXBvc2l0aW9uKCkgPyBmbGlwIDogcHJlc2VydmU7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeUJvdW5kcyA9IGRhdGEuZ2V0TW9kZSgpID09PSAnZml4ZWQnID8gYm91bmRzLnkgKyBnZXQkYigpLnRvcCA6IGJvdW5kcy55O1xuICAgICAgICBjb25zdCBjb250ZXh0YmFySGVpZ2h0ID0gZ2V0JGQoY29udGV4dGJhcikgKyBidWJibGVTaXplJDE7XG4gICAgICAgIHJldHVybiB5Qm91bmRzICsgY29udGV4dGJhckhlaWdodCA8PSBzZWxlY3Rpb25Cb3VuZHMueSA/IG5vcnRoIDogc291dGg7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRBbmNob3JTcGVjJDIgPSAoZWRpdG9yLCBtb2JpbGUsIGRhdGEsIHBvc2l0aW9uKSA9PiB7XG4gICAgICBjb25zdCBzbWFydEluc2V0TGF5b3V0ID0gZWxlbSA9PiAoYW5jaG9yLCBlbGVtZW50LCBidWJibGVzLCBwbGFjZWUsIGJvdW5kcykgPT4ge1xuICAgICAgICBjb25zdCBsYXlvdXQgPSBkZXRlcm1pbmVJbnNldExheW91dChlZGl0b3IsIHBsYWNlZSwgZWxlbSwgZGF0YSwgYm91bmRzKTtcbiAgICAgICAgY29uc3QgbmV3QW5jaG9yID0ge1xuICAgICAgICAgIC4uLmFuY2hvcixcbiAgICAgICAgICB5OiBib3VuZHMueSxcbiAgICAgICAgICBoZWlnaHQ6IGJvdW5kcy5oZWlnaHRcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5sYXlvdXQobmV3QW5jaG9yLCBlbGVtZW50LCBidWJibGVzLCBwbGFjZWUsIGJvdW5kcyksXG4gICAgICAgICAgYWx3YXlzRml0OiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0SW5zZXRMYXlvdXRzID0gZWxlbSA9PiBzaG91bGRVc2VJbnNldExheW91dHMocG9zaXRpb24pID8gW3NtYXJ0SW5zZXRMYXlvdXQoZWxlbSldIDogW107XG4gICAgICBjb25zdCBkZXNrdG9wQW5jaG9yU3BlY0xheW91dHMgPSB7XG4gICAgICAgIG9uTHRyOiBlbGVtID0+IFtcbiAgICAgICAgICBub3J0aCQyLFxuICAgICAgICAgIHNvdXRoJDIsXG4gICAgICAgICAgbm9ydGhlYXN0JDIsXG4gICAgICAgICAgc291dGhlYXN0JDIsXG4gICAgICAgICAgbm9ydGh3ZXN0JDIsXG4gICAgICAgICAgc291dGh3ZXN0JDJcbiAgICAgICAgXS5jb25jYXQoZ2V0SW5zZXRMYXlvdXRzKGVsZW0pKSxcbiAgICAgICAgb25SdGw6IGVsZW0gPT4gW1xuICAgICAgICAgIG5vcnRoJDIsXG4gICAgICAgICAgc291dGgkMixcbiAgICAgICAgICBub3J0aHdlc3QkMixcbiAgICAgICAgICBzb3V0aHdlc3QkMixcbiAgICAgICAgICBub3J0aGVhc3QkMixcbiAgICAgICAgICBzb3V0aGVhc3QkMlxuICAgICAgICBdLmNvbmNhdChnZXRJbnNldExheW91dHMoZWxlbSkpXG4gICAgICB9O1xuICAgICAgY29uc3QgbW9iaWxlQW5jaG9yU3BlY0xheW91dHMgPSB7XG4gICAgICAgIG9uTHRyOiBlbGVtID0+IFtcbiAgICAgICAgICBzb3V0aCQyLFxuICAgICAgICAgIHNvdXRoZWFzdCQyLFxuICAgICAgICAgIHNvdXRod2VzdCQyLFxuICAgICAgICAgIG5vcnRoZWFzdCQyLFxuICAgICAgICAgIG5vcnRod2VzdCQyLFxuICAgICAgICAgIG5vcnRoJDJcbiAgICAgICAgXS5jb25jYXQoZ2V0SW5zZXRMYXlvdXRzKGVsZW0pKSxcbiAgICAgICAgb25SdGw6IGVsZW0gPT4gW1xuICAgICAgICAgIHNvdXRoJDIsXG4gICAgICAgICAgc291dGh3ZXN0JDIsXG4gICAgICAgICAgc291dGhlYXN0JDIsXG4gICAgICAgICAgbm9ydGh3ZXN0JDIsXG4gICAgICAgICAgbm9ydGhlYXN0JDIsXG4gICAgICAgICAgbm9ydGgkMlxuICAgICAgICBdLmNvbmNhdChnZXRJbnNldExheW91dHMoZWxlbSkpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIG1vYmlsZSA/IG1vYmlsZUFuY2hvclNwZWNMYXlvdXRzIDogZGVza3RvcEFuY2hvclNwZWNMYXlvdXRzO1xuICAgIH07XG4gICAgY29uc3QgZ2V0QW5jaG9yTGF5b3V0ID0gKGVkaXRvciwgcG9zaXRpb24sIGlzVG91Y2gsIGRhdGEpID0+IHtcbiAgICAgIGlmIChwb3NpdGlvbiA9PT0gJ2xpbmUnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYnViYmxlOiBudSQ1KGJ1YmJsZVNpemUkMSwgMCwgYnViYmxlQWxpZ25tZW50cyQxKSxcbiAgICAgICAgICBsYXlvdXRzOiB7XG4gICAgICAgICAgICBvbkx0cjogKCkgPT4gW2Vhc3QkMl0sXG4gICAgICAgICAgICBvblJ0bDogKCkgPT4gW3dlc3QkMl1cbiAgICAgICAgICB9LFxuICAgICAgICAgIG92ZXJyaWRlczogYW5jaG9yT3ZlcnJpZGVzXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJ1YmJsZTogbnUkNSgwLCBidWJibGVTaXplJDEsIGJ1YmJsZUFsaWdubWVudHMkMSwgMSAvIGJ1YmJsZVNpemUkMSksXG4gICAgICAgICAgbGF5b3V0czogZ2V0QW5jaG9yU3BlYyQyKGVkaXRvciwgaXNUb3VjaCwgZGF0YSwgcG9zaXRpb24pLFxuICAgICAgICAgIG92ZXJyaWRlczogYW5jaG9yT3ZlcnJpZGVzXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG1hdGNoVGFyZ2V0V2l0aCA9IChlbGVtLCBjYW5kaWRhdGVzKSA9PiB7XG4gICAgICBjb25zdCBjdHhzID0gZmlsdGVyJDIoY2FuZGlkYXRlcywgdG9vbGJhckFwaSA9PiB0b29sYmFyQXBpLnByZWRpY2F0ZShlbGVtLmRvbSkpO1xuICAgICAgY29uc3Qge3Bhc3MsIGZhaWx9ID0gcGFydGl0aW9uJDMoY3R4cywgdCA9PiB0LnR5cGUgPT09ICdjb250ZXh0dG9vbGJhcicpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGV4dFRvb2xiYXJzOiBwYXNzLFxuICAgICAgICBjb250ZXh0Rm9ybXM6IGZhaWxcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXJCeVBvc2l0aW9uRm9yU3RhcnROb2RlID0gdG9vbGJhcnMgPT4ge1xuICAgICAgaWYgKHRvb2xiYXJzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgIHJldHVybiB0b29sYmFycztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRvZXNQb3NpdGlvbkV4aXN0ID0gdmFsdWUgPT4gZXhpc3RzKHRvb2xiYXJzLCB0ID0+IHQucG9zaXRpb24gPT09IHZhbHVlKTtcbiAgICAgICAgY29uc3QgZmlsdGVyVG9vbGJhcnNCeVBvc2l0aW9uID0gdmFsdWUgPT4gZmlsdGVyJDIodG9vbGJhcnMsIHQgPT4gdC5wb3NpdGlvbiA9PT0gdmFsdWUpO1xuICAgICAgICBjb25zdCBoYXNTZWxlY3Rpb25Ub29sYmFycyA9IGRvZXNQb3NpdGlvbkV4aXN0KCdzZWxlY3Rpb24nKTtcbiAgICAgICAgY29uc3QgaGFzTm9kZVRvb2xiYXJzID0gZG9lc1Bvc2l0aW9uRXhpc3QoJ25vZGUnKTtcbiAgICAgICAgaWYgKGhhc1NlbGVjdGlvblRvb2xiYXJzIHx8IGhhc05vZGVUb29sYmFycykge1xuICAgICAgICAgIGlmIChoYXNOb2RlVG9vbGJhcnMgJiYgaGFzU2VsZWN0aW9uVG9vbGJhcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVUb29sYmFycyA9IGZpbHRlclRvb2xiYXJzQnlQb3NpdGlvbignbm9kZScpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uVG9vbGJhcnMgPSBtYXAkMihmaWx0ZXJUb29sYmFyc0J5UG9zaXRpb24oJ3NlbGVjdGlvbicpLCB0ID0+ICh7XG4gICAgICAgICAgICAgIC4uLnQsXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiAnbm9kZSdcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiBub2RlVG9vbGJhcnMuY29uY2F0KHNlbGVjdGlvblRvb2xiYXJzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhhc1NlbGVjdGlvblRvb2xiYXJzID8gZmlsdGVyVG9vbGJhcnNCeVBvc2l0aW9uKCdzZWxlY3Rpb24nKSA6IGZpbHRlclRvb2xiYXJzQnlQb3NpdGlvbignbm9kZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmlsdGVyVG9vbGJhcnNCeVBvc2l0aW9uKCdsaW5lJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbHRlckJ5UG9zaXRpb25Gb3JBbmNlc3Rvck5vZGUgPSB0b29sYmFycyA9PiB7XG4gICAgICBpZiAodG9vbGJhcnMubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgcmV0dXJuIHRvb2xiYXJzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZmluZFBvc2l0aW9uID0gdmFsdWUgPT4gZmluZCQ1KHRvb2xiYXJzLCB0ID0+IHQucG9zaXRpb24gPT09IHZhbHVlKTtcbiAgICAgICAgY29uc3QgYmFzZVBvc2l0aW9uID0gZmluZFBvc2l0aW9uKCdzZWxlY3Rpb24nKS5vclRodW5rKCgpID0+IGZpbmRQb3NpdGlvbignbm9kZScpKS5vclRodW5rKCgpID0+IGZpbmRQb3NpdGlvbignbGluZScpKS5tYXAodCA9PiB0LnBvc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIGJhc2VQb3NpdGlvbi5mb2xkKCgpID0+IFtdLCBwb3MgPT4gZmlsdGVyJDIodG9vbGJhcnMsIHQgPT4gdC5wb3NpdGlvbiA9PT0gcG9zKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBtYXRjaFN0YXJ0Tm9kZSA9IChlbGVtLCBub2RlQ2FuZGlkYXRlcywgZWRpdG9yQ2FuZGlkYXRlcykgPT4ge1xuICAgICAgY29uc3Qgbm9kZU1hdGNoZXMgPSBtYXRjaFRhcmdldFdpdGgoZWxlbSwgbm9kZUNhbmRpZGF0ZXMpO1xuICAgICAgaWYgKG5vZGVNYXRjaGVzLmNvbnRleHRGb3Jtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICBlbGVtLFxuICAgICAgICAgIHRvb2xiYXJzOiBbbm9kZU1hdGNoZXMuY29udGV4dEZvcm1zWzBdXVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVkaXRvck1hdGNoZXMgPSBtYXRjaFRhcmdldFdpdGgoZWxlbSwgZWRpdG9yQ2FuZGlkYXRlcyk7XG4gICAgICAgIGlmIChlZGl0b3JNYXRjaGVzLmNvbnRleHRGb3Jtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgICAgZWxlbSxcbiAgICAgICAgICAgIHRvb2xiYXJzOiBbZWRpdG9yTWF0Y2hlcy5jb250ZXh0Rm9ybXNbMF1dXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZU1hdGNoZXMuY29udGV4dFRvb2xiYXJzLmxlbmd0aCA+IDAgfHwgZWRpdG9yTWF0Y2hlcy5jb250ZXh0VG9vbGJhcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHRvb2xiYXJzID0gZmlsdGVyQnlQb3NpdGlvbkZvclN0YXJ0Tm9kZShub2RlTWF0Y2hlcy5jb250ZXh0VG9vbGJhcnMuY29uY2F0KGVkaXRvck1hdGNoZXMuY29udGV4dFRvb2xiYXJzKSk7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgICAgZWxlbSxcbiAgICAgICAgICAgIHRvb2xiYXJzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbWF0Y2hBbmNlc3RvciA9IChpc1Jvb3QsIHN0YXJ0Tm9kZSwgc2NvcGVzKSA9PiB7XG4gICAgICBpZiAoaXNSb290KHN0YXJ0Tm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhbmNlc3RvciQyKHN0YXJ0Tm9kZSwgYW5jZXN0b3JFbGVtID0+IHtcbiAgICAgICAgICBpZiAoaXNFbGVtZW50JDEoYW5jZXN0b3JFbGVtKSkge1xuICAgICAgICAgICAgY29uc3Qge2NvbnRleHRUb29sYmFycywgY29udGV4dEZvcm1zfSA9IG1hdGNoVGFyZ2V0V2l0aChhbmNlc3RvckVsZW0sIHNjb3Blcy5pbk5vZGVTY29wZSk7XG4gICAgICAgICAgICBjb25zdCB0b29sYmFycyA9IGNvbnRleHRGb3Jtcy5sZW5ndGggPiAwID8gY29udGV4dEZvcm1zIDogZmlsdGVyQnlQb3NpdGlvbkZvckFuY2VzdG9yTm9kZShjb250ZXh0VG9vbGJhcnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRvb2xiYXJzLmxlbmd0aCA+IDAgPyBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgICAgZWxlbTogYW5jZXN0b3JFbGVtLFxuICAgICAgICAgICAgICB0b29sYmFyc1xuICAgICAgICAgICAgfSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBpc1Jvb3QpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbG9va3VwJDEgPSAoc2NvcGVzLCBlZGl0b3IpID0+IHtcbiAgICAgIGNvbnN0IHJvb3RFbGVtID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBjb25zdCBpc1Jvb3QgPSBlbGVtID0+IGVxKGVsZW0sIHJvb3RFbGVtKTtcbiAgICAgIGNvbnN0IGlzT3V0c2lkZVJvb3QgPSBzdGFydE5vZGUgPT4gIWlzUm9vdChzdGFydE5vZGUpICYmICFjb250YWlucyhyb290RWxlbSwgc3RhcnROb2RlKTtcbiAgICAgIGNvbnN0IHN0YXJ0Tm9kZSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5zZWxlY3Rpb24uZ2V0Tm9kZSgpKTtcbiAgICAgIGlmIChpc091dHNpZGVSb290KHN0YXJ0Tm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXRjaFN0YXJ0Tm9kZShzdGFydE5vZGUsIHNjb3Blcy5pbk5vZGVTY29wZSwgc2NvcGVzLmluRWRpdG9yU2NvcGUpLm9yVGh1bmsoKCkgPT4gbWF0Y2hBbmNlc3Rvcihpc1Jvb3QsIHN0YXJ0Tm9kZSwgc2NvcGVzKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNhdGVnb3Jpc2UgPSAoY29udGV4dFRvb2xiYXJzLCBuYXZpZ2F0ZSkgPT4ge1xuICAgICAgY29uc3QgZm9ybXMgPSB7fTtcbiAgICAgIGNvbnN0IGluTm9kZVNjb3BlID0gW107XG4gICAgICBjb25zdCBpbkVkaXRvclNjb3BlID0gW107XG4gICAgICBjb25zdCBmb3JtTmF2aWdhdG9ycyA9IHt9O1xuICAgICAgY29uc3QgbG9va3VwVGFibGUgPSB7fTtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyRm9ybSA9IChrZXksIHRvb2xiYXJTcGVjKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRGb3JtID0gZ2V0T3JEaWUoY3JlYXRlQ29udGV4dEZvcm0odG9vbGJhclNwZWMpKTtcbiAgICAgICAgZm9ybXNba2V5XSA9IGNvbnRleHRGb3JtO1xuICAgICAgICBjb250ZXh0Rm9ybS5sYXVuY2gubWFwKGxhdW5jaCA9PiB7XG4gICAgICAgICAgZm9ybU5hdmlnYXRvcnNbJ2Zvcm06JyArIGtleSArICcnXSA9IHtcbiAgICAgICAgICAgIC4uLnRvb2xiYXJTcGVjLmxhdW5jaCxcbiAgICAgICAgICAgIHR5cGU6IGxhdW5jaC50eXBlID09PSAnY29udGV4dGZvcm10b2dnbGVidXR0b24nID8gJ3RvZ2dsZWJ1dHRvbicgOiAnYnV0dG9uJyxcbiAgICAgICAgICAgIG9uQWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgIG5hdmlnYXRlKGNvbnRleHRGb3JtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNvbnRleHRGb3JtLnNjb3BlID09PSAnZWRpdG9yJykge1xuICAgICAgICAgIGluRWRpdG9yU2NvcGUucHVzaChjb250ZXh0Rm9ybSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5Ob2RlU2NvcGUucHVzaChjb250ZXh0Rm9ybSk7XG4gICAgICAgIH1cbiAgICAgICAgbG9va3VwVGFibGVba2V5XSA9IGNvbnRleHRGb3JtO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyVG9vbGJhciA9IChrZXksIHRvb2xiYXJTcGVjKSA9PiB7XG4gICAgICAgIGNyZWF0ZUNvbnRleHRUb29sYmFyKHRvb2xiYXJTcGVjKS5lYWNoKGNvbnRleHRUb29sYmFyID0+IHtcbiAgICAgICAgICBpZiAodG9vbGJhclNwZWMuc2NvcGUgPT09ICdlZGl0b3InKSB7XG4gICAgICAgICAgICBpbkVkaXRvclNjb3BlLnB1c2goY29udGV4dFRvb2xiYXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbk5vZGVTY29wZS5wdXNoKGNvbnRleHRUb29sYmFyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9va3VwVGFibGVba2V5XSA9IGNvbnRleHRUb29sYmFyO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBrZXlzJDEgPSBrZXlzKGNvbnRleHRUb29sYmFycyk7XG4gICAgICBlYWNoJDEoa2V5cyQxLCBrZXkgPT4ge1xuICAgICAgICBjb25zdCB0b29sYmFyQXBpID0gY29udGV4dFRvb2xiYXJzW2tleV07XG4gICAgICAgIGlmICh0b29sYmFyQXBpLnR5cGUgPT09ICdjb250ZXh0Zm9ybScpIHtcbiAgICAgICAgICByZWdpc3RlckZvcm0oa2V5LCB0b29sYmFyQXBpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0b29sYmFyQXBpLnR5cGUgPT09ICdjb250ZXh0dG9vbGJhcicpIHtcbiAgICAgICAgICByZWdpc3RlclRvb2xiYXIoa2V5LCB0b29sYmFyQXBpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb3JtcyxcbiAgICAgICAgaW5Ob2RlU2NvcGUsXG4gICAgICAgIGluRWRpdG9yU2NvcGUsXG4gICAgICAgIGxvb2t1cFRhYmxlLFxuICAgICAgICBmb3JtTmF2aWdhdG9yc1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZm9yd2FyZFNsaWRlRXZlbnQgPSBnZW5lcmF0ZSQ2KCdmb3J3YXJkLXNsaWRlJyk7XG4gICAgY29uc3QgYmFja1NsaWRlRXZlbnQgPSBnZW5lcmF0ZSQ2KCdiYWNrd2FyZC1zbGlkZScpO1xuICAgIGNvbnN0IGNoYW5nZVNsaWRlRXZlbnQgPSBnZW5lcmF0ZSQ2KCdjaGFuZ2Utc2xpZGUtZXZlbnQnKTtcbiAgICBjb25zdCByZXNpemluZ0NsYXNzID0gJ3RveC1wb3AtLXJlc2l6aW5nJztcbiAgICBjb25zdCByZW5kZXJDb250ZXh0VG9vbGJhciA9IHNwZWMgPT4ge1xuICAgICAgY29uc3Qgc3RhY2sgPSBDZWxsKFtdKTtcbiAgICAgIHJldHVybiBJbmxpbmVWaWV3LnNrZXRjaCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtcG9wJ11cbiAgICAgICAgfSxcbiAgICAgICAgZmlyZURpc21pc3NhbEV2ZW50SW5zdGVhZDogeyBldmVudDogJ2RvTm90RGlzbWlzc1lldCcgfSxcbiAgICAgICAgb25TaG93OiBjb21wID0+IHtcbiAgICAgICAgICBzdGFjay5zZXQoW10pO1xuICAgICAgICAgIElubGluZVZpZXcuZ2V0Q29udGVudChjb21wKS5lYWNoKGMgPT4ge1xuICAgICAgICAgICAgcmVtb3ZlJDYoYy5lbGVtZW50LCAndmlzaWJpbGl0eScpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlbW92ZSQyKGNvbXAuZWxlbWVudCwgcmVzaXppbmdDbGFzcyk7XG4gICAgICAgICAgcmVtb3ZlJDYoY29tcC5lbGVtZW50LCAnd2lkdGgnKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5saW5lQmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIGNvbmZpZygnY29udGV4dC10b29sYmFyLWV2ZW50cycsIFtcbiAgICAgICAgICAgIHJ1bk9uU291cmNlKHRyYW5zaXRpb25lbmQoKSwgKGNvbXAsIHNlKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChzZS5ldmVudC5yYXcucHJvcGVydHlOYW1lID09PSAnd2lkdGgnKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlJDIoY29tcC5lbGVtZW50LCByZXNpemluZ0NsYXNzKTtcbiAgICAgICAgICAgICAgICByZW1vdmUkNihjb21wLmVsZW1lbnQsICd3aWR0aCcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHJ1biQxKGNoYW5nZVNsaWRlRXZlbnQsIChjb21wLCBzZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBlbGVtID0gY29tcC5lbGVtZW50O1xuICAgICAgICAgICAgICByZW1vdmUkNihlbGVtLCAnd2lkdGgnKTtcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudFdpZHRoID0gZ2V0JGMoZWxlbSk7XG4gICAgICAgICAgICAgIElubGluZVZpZXcuc2V0Q29udGVudChjb21wLCBzZS5ldmVudC5jb250ZW50cyk7XG4gICAgICAgICAgICAgIGFkZCQyKGVsZW0sIHJlc2l6aW5nQ2xhc3MpO1xuICAgICAgICAgICAgICBjb25zdCBuZXdXaWR0aCA9IGdldCRjKGVsZW0pO1xuICAgICAgICAgICAgICBzZXQkOChlbGVtLCAnd2lkdGgnLCBjdXJyZW50V2lkdGggKyAncHgnKTtcbiAgICAgICAgICAgICAgSW5saW5lVmlldy5nZXRDb250ZW50KGNvbXApLmVhY2gobmV3Q29udGVudHMgPT4ge1xuICAgICAgICAgICAgICAgIHNlLmV2ZW50LmZvY3VzLmJpbmQoZiA9PiB7XG4gICAgICAgICAgICAgICAgICBmb2N1cyQzKGYpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlYXJjaChlbGVtKTtcbiAgICAgICAgICAgICAgICB9KS5vclRodW5rKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIEtleWluZy5mb2N1c0luKG5ld0NvbnRlbnRzKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhY3RpdmUkMShnZXRSb290Tm9kZShlbGVtKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBzZXQkOChjb21wLmVsZW1lbnQsICd3aWR0aCcsIG5ld1dpZHRoICsgJ3B4Jyk7XG4gICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBydW4kMShmb3J3YXJkU2xpZGVFdmVudCwgKGNvbXAsIHNlKSA9PiB7XG4gICAgICAgICAgICAgIElubGluZVZpZXcuZ2V0Q29udGVudChjb21wKS5lYWNoKG9sZENvbnRlbnRzID0+IHtcbiAgICAgICAgICAgICAgICBzdGFjay5zZXQoc3RhY2suZ2V0KCkuY29uY2F0KFt7XG4gICAgICAgICAgICAgICAgICAgIGJhcjogb2xkQ29udGVudHMsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzOiBhY3RpdmUkMShnZXRSb290Tm9kZShjb21wLmVsZW1lbnQpKVxuICAgICAgICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGVtaXRXaXRoKGNvbXAsIGNoYW5nZVNsaWRlRXZlbnQsIHtcbiAgICAgICAgICAgICAgICBjb250ZW50czogc2UuZXZlbnQuZm9yd2FyZENvbnRlbnRzLFxuICAgICAgICAgICAgICAgIGZvY3VzOiBPcHRpb25hbC5ub25lKClcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHJ1biQxKGJhY2tTbGlkZUV2ZW50LCAoY29tcCwgX3NlKSA9PiB7XG4gICAgICAgICAgICAgIGxhc3QkMShzdGFjay5nZXQoKSkuZWFjaChsYXN0ID0+IHtcbiAgICAgICAgICAgICAgICBzdGFjay5zZXQoc3RhY2suZ2V0KCkuc2xpY2UoMCwgc3RhY2suZ2V0KCkubGVuZ3RoIC0gMSkpO1xuICAgICAgICAgICAgICAgIGVtaXRXaXRoKGNvbXAsIGNoYW5nZVNsaWRlRXZlbnQsIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnRzOiBwcmVtYWRlKGxhc3QuYmFyKSxcbiAgICAgICAgICAgICAgICAgIGZvY3VzOiBsYXN0LmZvY3VzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBLZXlpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIG1vZGU6ICdzcGVjaWFsJyxcbiAgICAgICAgICAgIG9uRXNjYXBlOiBjb21wID0+IGxhc3QkMShzdGFjay5nZXQoKSkuZm9sZCgoKSA9PiBzcGVjLm9uRXNjYXBlKCksIF8gPT4ge1xuICAgICAgICAgICAgICBlbWl0KGNvbXAsIGJhY2tTbGlkZUV2ZW50KTtcbiAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIF0pLFxuICAgICAgICBsYXp5U2luazogKCkgPT4gUmVzdWx0LnZhbHVlKHNwZWMuc2luaylcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCB0cmFuc2l0aW9uQ2xhc3MgPSAndG94LXBvcC0tdHJhbnNpdGlvbic7XG4gICAgY29uc3QgcmVnaXN0ZXIkOSA9IChlZGl0b3IsIHJlZ2lzdHJ5Q29udGV4dFRvb2xiYXJzLCBzaW5rLCBleHRyYXMpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tzdGFnZSA9IGV4dHJhcy5iYWNrc3RhZ2U7XG4gICAgICBjb25zdCBzaGFyZWRCYWNrc3RhZ2UgPSBiYWNrc3RhZ2Uuc2hhcmVkO1xuICAgICAgY29uc3QgaXNUb3VjaCA9IGRldGVjdCQyKCkuZGV2aWNlVHlwZS5pc1RvdWNoO1xuICAgICAgY29uc3QgbGFzdEVsZW1lbnQgPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBsYXN0VHJpZ2dlciA9IHZhbHVlJDIoKTtcbiAgICAgIGNvbnN0IGxhc3RDb250ZXh0UG9zaXRpb24gPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBjb250ZXh0YmFyID0gYnVpbGQkMShyZW5kZXJDb250ZXh0VG9vbGJhcih7XG4gICAgICAgIHNpbmssXG4gICAgICAgIG9uRXNjYXBlOiAoKSA9PiB7XG4gICAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IGdldEJvdW5kcyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBsYXN0Q29udGV4dFBvc2l0aW9uLmdldCgpLmdldE9yKCdub2RlJyk7XG4gICAgICAgIGNvbnN0IG1hcmdpbiA9IHNob3VsZFVzZUluc2V0TGF5b3V0cyhwb3NpdGlvbikgPyAxIDogMDtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHRUb29sYmFyQm91bmRzKGVkaXRvciwgc2hhcmVkQmFja3N0YWdlLCBwb3NpdGlvbiwgbWFyZ2luKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjYW5MYXVuY2hUb29sYmFyID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gIWVkaXRvci5yZW1vdmVkICYmICEoaXNUb3VjaCgpICYmIGJhY2tzdGFnZS5pc0NvbnRleHRNZW51T3BlbigpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1NhbWVMYXVuY2hFbGVtZW50ID0gZWxlbSA9PiBpcyQxKGxpZnQyKGVsZW0sIGxhc3RFbGVtZW50LmdldCgpLCBlcSksIHRydWUpO1xuICAgICAgY29uc3Qgc2hvdWxkQ29udGV4dFRvb2xiYXJIaWRlID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWNhbkxhdW5jaFRvb2xiYXIoKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNvbnRleHRUb29sYmFyQm91bmRzID0gZ2V0Qm91bmRzKCk7XG4gICAgICAgICAgY29uc3QgYW5jaG9yQm91bmRzID0gaXMkMShsYXN0Q29udGV4dFBvc2l0aW9uLmdldCgpLCAnbm9kZScpID8gZ2V0QW5jaG9yRWxlbWVudEJvdW5kcyhlZGl0b3IsIGxhc3RFbGVtZW50LmdldCgpKSA6IGdldFNlbGVjdGlvbkJvdW5kcyhlZGl0b3IpO1xuICAgICAgICAgIHJldHVybiBjb250ZXh0VG9vbGJhckJvdW5kcy5oZWlnaHQgPD0gMCB8fCAhaXNWZXJ0aWNhbE92ZXJsYXAoYW5jaG9yQm91bmRzLCBjb250ZXh0VG9vbGJhckJvdW5kcywgMC4wMSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBjbG9zZSA9ICgpID0+IHtcbiAgICAgICAgbGFzdEVsZW1lbnQuY2xlYXIoKTtcbiAgICAgICAgbGFzdFRyaWdnZXIuY2xlYXIoKTtcbiAgICAgICAgbGFzdENvbnRleHRQb3NpdGlvbi5jbGVhcigpO1xuICAgICAgICBJbmxpbmVWaWV3LmhpZGUoY29udGV4dGJhcik7XG4gICAgICB9O1xuICAgICAgY29uc3QgaGlkZU9yUmVwb3NpdGlvbklmTmVjZXNzYXJ5ID0gKCkgPT4ge1xuICAgICAgICBpZiAoSW5saW5lVmlldy5pc09wZW4oY29udGV4dGJhcikpIHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0QmFyRWxlID0gY29udGV4dGJhci5lbGVtZW50O1xuICAgICAgICAgIHJlbW92ZSQ2KGNvbnRleHRCYXJFbGUsICdkaXNwbGF5Jyk7XG4gICAgICAgICAgaWYgKHNob3VsZENvbnRleHRUb29sYmFySGlkZSgpKSB7XG4gICAgICAgICAgICBzZXQkOChjb250ZXh0QmFyRWxlLCAnZGlzcGxheScsICdub25lJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxhc3RUcmlnZ2VyLnNldCgwKTtcbiAgICAgICAgICAgIElubGluZVZpZXcucmVwb3NpdGlvbihjb250ZXh0YmFyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCB3cmFwSW5Qb3BEaWFsb2cgPSB0b29sYmFyU3BlYyA9PiAoe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXBvcF9fZGlhbG9nJ11cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW3Rvb2xiYXJTcGVjXSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIEtleWluZy5jb25maWcoeyBtb2RlOiAnYWN5Y2xpYycgfSksXG4gICAgICAgICAgY29uZmlnKCdwb3AtZGlhbG9nLXdyYXAtZXZlbnRzJywgW1xuICAgICAgICAgICAgcnVuT25BdHRhY2hlZChjb21wID0+IHtcbiAgICAgICAgICAgICAgZWRpdG9yLnNob3J0Y3V0cy5hZGQoJ2N0cmwrRjknLCAnZm9jdXMgc3RhdHVzYmFyJywgKCkgPT4gS2V5aW5nLmZvY3VzSW4oY29tcCkpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBydW5PbkRldGFjaGVkKF9jb21wID0+IHtcbiAgICAgICAgICAgICAgZWRpdG9yLnNob3J0Y3V0cy5yZW1vdmUoJ2N0cmwrRjknKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSlcbiAgICAgICAgXSlcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZ2V0U2NvcGVzID0gY2FjaGVkKCgpID0+IGNhdGVnb3Jpc2UocmVnaXN0cnlDb250ZXh0VG9vbGJhcnMsIHRvb2xiYXJBcGkgPT4ge1xuICAgICAgICBjb25zdCBhbGxveVNwZWMgPSBidWlsZFRvb2xiYXIoW3Rvb2xiYXJBcGldKTtcbiAgICAgICAgZW1pdFdpdGgoY29udGV4dGJhciwgZm9yd2FyZFNsaWRlRXZlbnQsIHsgZm9yd2FyZENvbnRlbnRzOiB3cmFwSW5Qb3BEaWFsb2coYWxsb3lTcGVjKSB9KTtcbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IGJ1aWxkQ29udGV4dFRvb2xiYXJHcm91cHMgPSAoYWxsQnV0dG9ucywgY3R4KSA9PiBpZGVudGlmeUJ1dHRvbnMoZWRpdG9yLCB7XG4gICAgICAgIGJ1dHRvbnM6IGFsbEJ1dHRvbnMsXG4gICAgICAgIHRvb2xiYXI6IGN0eC5pdGVtcyxcbiAgICAgICAgYWxsb3dUb29sYmFyR3JvdXBzOiBmYWxzZVxuICAgICAgfSwgZXh0cmFzLmJhY2tzdGFnZSwgT3B0aW9uYWwuc29tZShbJ2Zvcm06J10pKTtcbiAgICAgIGNvbnN0IGJ1aWxkQ29udGV4dEZvcm1Hcm91cHMgPSAoY3R4LCBwcm92aWRlcnMpID0+IENvbnRleHRGb3JtLmJ1aWxkSW5pdEdyb3VwcyhjdHgsIHByb3ZpZGVycyk7XG4gICAgICBjb25zdCBidWlsZFRvb2xiYXIgPSB0b29sYmFycyA9PiB7XG4gICAgICAgIGNvbnN0IHtidXR0b25zfSA9IGVkaXRvci51aS5yZWdpc3RyeS5nZXRBbGwoKTtcbiAgICAgICAgY29uc3Qgc2NvcGVzID0gZ2V0U2NvcGVzKCk7XG4gICAgICAgIGNvbnN0IGFsbEJ1dHRvbnMgPSB7XG4gICAgICAgICAgLi4uYnV0dG9ucyxcbiAgICAgICAgICAuLi5zY29wZXMuZm9ybU5hdmlnYXRvcnNcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdG9vbGJhclR5cGUgPSBnZXRUb29sYmFyTW9kZShlZGl0b3IpID09PSBUb29sYmFyTW9kZSQxLnNjcm9sbGluZyA/IFRvb2xiYXJNb2RlJDEuc2Nyb2xsaW5nIDogVG9vbGJhck1vZGUkMS5kZWZhdWx0O1xuICAgICAgICBjb25zdCBpbml0R3JvdXBzID0gZmxhdHRlbihtYXAkMih0b29sYmFycywgY3R4ID0+IGN0eC50eXBlID09PSAnY29udGV4dHRvb2xiYXInID8gYnVpbGRDb250ZXh0VG9vbGJhckdyb3VwcyhhbGxCdXR0b25zLCBjdHgpIDogYnVpbGRDb250ZXh0Rm9ybUdyb3VwcyhjdHgsIHNoYXJlZEJhY2tzdGFnZS5wcm92aWRlcnMpKSk7XG4gICAgICAgIHJldHVybiByZW5kZXJUb29sYmFyKHtcbiAgICAgICAgICB0eXBlOiB0b29sYmFyVHlwZSxcbiAgICAgICAgICB1aWQ6IGdlbmVyYXRlJDYoJ2NvbnRleHQtdG9vbGJhcicpLFxuICAgICAgICAgIGluaXRHcm91cHMsXG4gICAgICAgICAgb25Fc2NhcGU6IE9wdGlvbmFsLm5vbmUsXG4gICAgICAgICAgY3ljbGljS2V5aW5nOiB0cnVlLFxuICAgICAgICAgIHByb3ZpZGVyczogc2hhcmVkQmFja3N0YWdlLnByb3ZpZGVyc1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRBbmNob3IgPSAocG9zaXRpb24sIGVsZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3QgYW5jaG9yYWdlID0gcG9zaXRpb24gPT09ICdub2RlJyA/IHNoYXJlZEJhY2tzdGFnZS5hbmNob3JzLm5vZGUoZWxlbWVudCkgOiBzaGFyZWRCYWNrc3RhZ2UuYW5jaG9ycy5jdXJzb3IoKTtcbiAgICAgICAgY29uc3QgYW5jaG9yTGF5b3V0ID0gZ2V0QW5jaG9yTGF5b3V0KGVkaXRvciwgcG9zaXRpb24sIGlzVG91Y2goKSwge1xuICAgICAgICAgIGxhc3RFbGVtZW50OiBsYXN0RWxlbWVudC5nZXQsXG4gICAgICAgICAgaXNSZXBvc2l0aW9uOiAoKSA9PiBpcyQxKGxhc3RUcmlnZ2VyLmdldCgpLCAwKSxcbiAgICAgICAgICBnZXRNb2RlOiAoKSA9PiBQb3NpdGlvbmluZy5nZXRNb2RlKHNpbmspXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZGVlcE1lcmdlKGFuY2hvcmFnZSwgYW5jaG9yTGF5b3V0KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBsYXVuY2hDb250ZXh0ID0gKHRvb2xiYXJBcGksIGVsZW0pID0+IHtcbiAgICAgICAgbGF1bmNoQ29udGV4dFRvb2xiYXIuY2FuY2VsKCk7XG4gICAgICAgIGlmICghY2FuTGF1bmNoVG9vbGJhcigpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRvb2xiYXJTcGVjID0gYnVpbGRUb29sYmFyKHRvb2xiYXJBcGkpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRvb2xiYXJBcGlbMF0ucG9zaXRpb247XG4gICAgICAgIGNvbnN0IGFuY2hvciA9IGdldEFuY2hvcihwb3NpdGlvbiwgZWxlbSk7XG4gICAgICAgIGxhc3RDb250ZXh0UG9zaXRpb24uc2V0KHBvc2l0aW9uKTtcbiAgICAgICAgbGFzdFRyaWdnZXIuc2V0KDEpO1xuICAgICAgICBjb25zdCBjb250ZXh0QmFyRWxlID0gY29udGV4dGJhci5lbGVtZW50O1xuICAgICAgICByZW1vdmUkNihjb250ZXh0QmFyRWxlLCAnZGlzcGxheScpO1xuICAgICAgICBpZiAoIWlzU2FtZUxhdW5jaEVsZW1lbnQoZWxlbSkpIHtcbiAgICAgICAgICByZW1vdmUkMihjb250ZXh0QmFyRWxlLCB0cmFuc2l0aW9uQ2xhc3MpO1xuICAgICAgICAgIFBvc2l0aW9uaW5nLnJlc2V0KHNpbmssIGNvbnRleHRiYXIpO1xuICAgICAgICB9XG4gICAgICAgIElubGluZVZpZXcuc2hvd1dpdGhpbkJvdW5kcyhjb250ZXh0YmFyLCB3cmFwSW5Qb3BEaWFsb2codG9vbGJhclNwZWMpLCB7XG4gICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgIHRyYW5zaXRpb246IHtcbiAgICAgICAgICAgIGNsYXNzZXM6IFt0cmFuc2l0aW9uQ2xhc3NdLFxuICAgICAgICAgICAgbW9kZTogJ3BsYWNlbWVudCdcbiAgICAgICAgICB9XG4gICAgICAgIH0sICgpID0+IE9wdGlvbmFsLnNvbWUoZ2V0Qm91bmRzKCkpKTtcbiAgICAgICAgZWxlbS5mb2xkKGxhc3RFbGVtZW50LmNsZWFyLCBsYXN0RWxlbWVudC5zZXQpO1xuICAgICAgICBpZiAoc2hvdWxkQ29udGV4dFRvb2xiYXJIaWRlKCkpIHtcbiAgICAgICAgICBzZXQkOChjb250ZXh0QmFyRWxlLCAnZGlzcGxheScsICdub25lJyk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBsZXQgaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgY29uc3QgbGF1bmNoQ29udGV4dFRvb2xiYXIgPSBsYXN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFlZGl0b3IuaGFzRm9jdXMoKSB8fCBlZGl0b3IucmVtb3ZlZCB8fCBpc0RyYWdnaW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXMoY29udGV4dGJhci5lbGVtZW50LCB0cmFuc2l0aW9uQ2xhc3MpKSB7XG4gICAgICAgICAgbGF1bmNoQ29udGV4dFRvb2xiYXIudGhyb3R0bGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzY29wZXMgPSBnZXRTY29wZXMoKTtcbiAgICAgICAgICBsb29rdXAkMShzY29wZXMsIGVkaXRvcikuZm9sZChjbG9zZSwgaW5mbyA9PiB7XG4gICAgICAgICAgICBsYXVuY2hDb250ZXh0KGluZm8udG9vbGJhcnMsIE9wdGlvbmFsLnNvbWUoaW5mby5lbGVtKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDE3KTtcbiAgICAgIGVkaXRvci5vbignaW5pdCcsICgpID0+IHtcbiAgICAgICAgZWRpdG9yLm9uKCdyZW1vdmUnLCBjbG9zZSk7XG4gICAgICAgIGVkaXRvci5vbignU2Nyb2xsQ29udGVudCBTY3JvbGxXaW5kb3cgT2JqZWN0UmVzaXplZCBSZXNpemVFZGl0b3IgbG9uZ3ByZXNzJywgaGlkZU9yUmVwb3NpdGlvbklmTmVjZXNzYXJ5KTtcbiAgICAgICAgZWRpdG9yLm9uKCdjbGljayBrZXl1cCBmb2N1cyBTZXRDb250ZW50JywgbGF1bmNoQ29udGV4dFRvb2xiYXIudGhyb3R0bGUpO1xuICAgICAgICBlZGl0b3Iub24oaGlkZUNvbnRleHRUb29sYmFyRXZlbnQsIGNsb3NlKTtcbiAgICAgICAgZWRpdG9yLm9uKHNob3dDb250ZXh0VG9vbGJhckV2ZW50LCBlID0+IHtcbiAgICAgICAgICBjb25zdCBzY29wZXMgPSBnZXRTY29wZXMoKTtcbiAgICAgICAgICBnZXQkZyhzY29wZXMubG9va3VwVGFibGUsIGUudG9vbGJhcktleSkuZWFjaChjdHggPT4ge1xuICAgICAgICAgICAgbGF1bmNoQ29udGV4dChbY3R4XSwgc29tZUlmKGUudGFyZ2V0ICE9PSBlZGl0b3IsIGUudGFyZ2V0KSk7XG4gICAgICAgICAgICBJbmxpbmVWaWV3LmdldENvbnRlbnQoY29udGV4dGJhcikuZWFjaChLZXlpbmcuZm9jdXNJbik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBlZGl0b3Iub24oJ2ZvY3Vzb3V0JywgX2UgPT4ge1xuICAgICAgICAgIGdsb2JhbCQ5LnNldEVkaXRvclRpbWVvdXQoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2VhcmNoKHNpbmsuZWxlbWVudCkuaXNOb25lKCkgJiYgc2VhcmNoKGNvbnRleHRiYXIuZWxlbWVudCkuaXNOb25lKCkpIHtcbiAgICAgICAgICAgICAgY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVkaXRvci5vbignU3dpdGNoTW9kZScsICgpID0+IHtcbiAgICAgICAgICBpZiAoZWRpdG9yLm1vZGUuaXNSZWFkT25seSgpKSB7XG4gICAgICAgICAgICBjbG9zZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVkaXRvci5vbignQWZ0ZXJQcm9ncmVzc1N0YXRlJywgZXZlbnQgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5zdGF0ZSkge1xuICAgICAgICAgICAgY2xvc2UoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvci5oYXNGb2N1cygpKSB7XG4gICAgICAgICAgICBsYXVuY2hDb250ZXh0VG9vbGJhci50aHJvdHRsZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVkaXRvci5vbignZHJhZ3N0YXJ0JywgKCkgPT4ge1xuICAgICAgICAgIGlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLm9uKCdkcmFnZW5kIGRyb3AnLCAoKSA9PiB7XG4gICAgICAgICAgaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLm9uKCdOb2RlQ2hhbmdlJywgX2UgPT4ge1xuICAgICAgICAgIHNlYXJjaChjb250ZXh0YmFyLmVsZW1lbnQpLmZvbGQobGF1bmNoQ29udGV4dFRvb2xiYXIudGhyb3R0bGUsIG5vb3ApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZWdpc3RlciQ4ID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGFsaWduVG9vbGJhckJ1dHRvbnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnYWxpZ25sZWZ0JyxcbiAgICAgICAgICB0ZXh0OiAnQWxpZ24gbGVmdCcsXG4gICAgICAgICAgY21kOiAnSnVzdGlmeUxlZnQnLFxuICAgICAgICAgIGljb246ICdhbGlnbi1sZWZ0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2FsaWduY2VudGVyJyxcbiAgICAgICAgICB0ZXh0OiAnQWxpZ24gY2VudGVyJyxcbiAgICAgICAgICBjbWQ6ICdKdXN0aWZ5Q2VudGVyJyxcbiAgICAgICAgICBpY29uOiAnYWxpZ24tY2VudGVyJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2FsaWducmlnaHQnLFxuICAgICAgICAgIHRleHQ6ICdBbGlnbiByaWdodCcsXG4gICAgICAgICAgY21kOiAnSnVzdGlmeVJpZ2h0JyxcbiAgICAgICAgICBpY29uOiAnYWxpZ24tcmlnaHQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnYWxpZ25qdXN0aWZ5JyxcbiAgICAgICAgICB0ZXh0OiAnSnVzdGlmeScsXG4gICAgICAgICAgY21kOiAnSnVzdGlmeUZ1bGwnLFxuICAgICAgICAgIGljb246ICdhbGlnbi1qdXN0aWZ5J1xuICAgICAgICB9XG4gICAgICBdO1xuICAgICAgZWFjaCQxKGFsaWduVG9vbGJhckJ1dHRvbnMsIGl0ZW0gPT4ge1xuICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkVG9nZ2xlQnV0dG9uKGl0ZW0ubmFtZSwge1xuICAgICAgICAgIHRvb2x0aXA6IGl0ZW0udGV4dCxcbiAgICAgICAgICBpY29uOiBpdGVtLmljb24sXG4gICAgICAgICAgb25BY3Rpb246IG9uQWN0aW9uRXhlY0NvbW1hbmQoZWRpdG9yLCBpdGVtLmNtZCksXG4gICAgICAgICAgb25TZXR1cDogb25TZXR1cFN0YXRlVG9nZ2xlKGVkaXRvciwgaXRlbS5uYW1lKVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZEJ1dHRvbignYWxpZ25ub25lJywge1xuICAgICAgICB0b29sdGlwOiAnTm8gYWxpZ25tZW50JyxcbiAgICAgICAgaWNvbjogJ2FsaWduLW5vbmUnLFxuICAgICAgICBvblNldHVwOiBvblNldHVwRWRpdGFibGVUb2dnbGUoZWRpdG9yKSxcbiAgICAgICAgb25BY3Rpb246IG9uQWN0aW9uRXhlY0NvbW1hbmQoZWRpdG9yLCAnSnVzdGlmeU5vbmUnKVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlZ2lzdGVyQ29udHJvbGxlciA9IChlZGl0b3IsIHNwZWMpID0+IHtcbiAgICAgIGNvbnN0IGdldE1lbnVJdGVtcyA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHNwZWMuZ2V0T3B0aW9ucyhlZGl0b3IpO1xuICAgICAgICBjb25zdCBpbml0aWFsID0gc3BlYy5nZXRDdXJyZW50KGVkaXRvcikubWFwKHNwZWMuaGFzaCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSB2YWx1ZSQyKCk7XG4gICAgICAgIHJldHVybiBtYXAkMihvcHRpb25zLCB2YWx1ZSA9PiAoe1xuICAgICAgICAgIHR5cGU6ICd0b2dnbGVtZW51aXRlbScsXG4gICAgICAgICAgdGV4dDogc3BlYy5kaXNwbGF5KHZhbHVlKSxcbiAgICAgICAgICBvblNldHVwOiBhcGkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2V0QWN0aXZlID0gYWN0aXZlID0+IHtcbiAgICAgICAgICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnQub24ob2xkQXBpID0+IG9sZEFwaS5zZXRBY3RpdmUoZmFsc2UpKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50LnNldChhcGkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFwaS5zZXRBY3RpdmUoYWN0aXZlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzZXRBY3RpdmUoaXMkMShpbml0aWFsLCBzcGVjLmhhc2godmFsdWUpKSk7XG4gICAgICAgICAgICBjb25zdCB1bmJpbmRXYXRjaGVyID0gc3BlYy53YXRjaGVyKGVkaXRvciwgdmFsdWUsIHNldEFjdGl2ZSk7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICBjdXJyZW50LmNsZWFyKCk7XG4gICAgICAgICAgICAgIHVuYmluZFdhdGNoZXIoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkFjdGlvbjogKCkgPT4gc3BlYy5zZXRDdXJyZW50KGVkaXRvciwgdmFsdWUpXG4gICAgICAgIH0pKTtcbiAgICAgIH07XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTWVudUJ1dHRvbihzcGVjLm5hbWUsIHtcbiAgICAgICAgdG9vbHRpcDogc3BlYy50ZXh0LFxuICAgICAgICBpY29uOiBzcGVjLmljb24sXG4gICAgICAgIGZldGNoOiBjYWxsYmFjayA9PiBjYWxsYmFjayhnZXRNZW51SXRlbXMoKSksXG4gICAgICAgIG9uU2V0dXA6IHNwZWMub25Ub29sYmFyU2V0dXBcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE5lc3RlZE1lbnVJdGVtKHNwZWMubmFtZSwge1xuICAgICAgICB0eXBlOiAnbmVzdGVkbWVudWl0ZW0nLFxuICAgICAgICB0ZXh0OiBzcGVjLnRleHQsXG4gICAgICAgIGdldFN1Ym1lbnVJdGVtczogZ2V0TWVudUl0ZW1zLFxuICAgICAgICBvblNldHVwOiBzcGVjLm9uTWVudVNldHVwXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGxpbmVIZWlnaHRTcGVjID0gZWRpdG9yID0+ICh7XG4gICAgICBuYW1lOiAnbGluZWhlaWdodCcsXG4gICAgICB0ZXh0OiAnTGluZSBoZWlnaHQnLFxuICAgICAgaWNvbjogJ2xpbmUtaGVpZ2h0JyxcbiAgICAgIGdldE9wdGlvbnM6IGdldExpbmVIZWlnaHRGb3JtYXRzLFxuICAgICAgaGFzaDogaW5wdXQgPT4gbm9ybWFsaXNlKGlucHV0LCBbXG4gICAgICAgICdmaXhlZCcsXG4gICAgICAgICdyZWxhdGl2ZScsXG4gICAgICAgICdlbXB0eSdcbiAgICAgIF0pLmdldE9yKGlucHV0KSxcbiAgICAgIGRpc3BsYXk6IGlkZW50aXR5LFxuICAgICAgd2F0Y2hlcjogKGVkaXRvciwgdmFsdWUsIGNhbGxiYWNrKSA9PiBlZGl0b3IuZm9ybWF0dGVyLmZvcm1hdENoYW5nZWQoJ2xpbmVoZWlnaHQnLCBjYWxsYmFjaywgZmFsc2UsIHsgdmFsdWUgfSkudW5iaW5kLFxuICAgICAgZ2V0Q3VycmVudDogZWRpdG9yID0+IE9wdGlvbmFsLmZyb20oZWRpdG9yLnF1ZXJ5Q29tbWFuZFZhbHVlKCdMaW5lSGVpZ2h0JykpLFxuICAgICAgc2V0Q3VycmVudDogKGVkaXRvciwgdmFsdWUpID0+IGVkaXRvci5leGVjQ29tbWFuZCgnTGluZUhlaWdodCcsIGZhbHNlLCB2YWx1ZSksXG4gICAgICBvblRvb2xiYXJTZXR1cDogb25TZXR1cEVkaXRhYmxlVG9nZ2xlKGVkaXRvciksXG4gICAgICBvbk1lbnVTZXR1cDogb25TZXR1cEVkaXRhYmxlVG9nZ2xlKGVkaXRvcilcbiAgICB9KTtcbiAgICBjb25zdCBsYW5ndWFnZVNwZWMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgc2V0dGluZ3NPcHQgPSBPcHRpb25hbC5mcm9tKGdldENvbnRlbnRMYW5ndWFnZXMoZWRpdG9yKSk7XG4gICAgICByZXR1cm4gc2V0dGluZ3NPcHQubWFwKHNldHRpbmdzID0+ICh7XG4gICAgICAgIG5hbWU6ICdsYW5ndWFnZScsXG4gICAgICAgIHRleHQ6ICdMYW5ndWFnZScsXG4gICAgICAgIGljb246ICdsYW5ndWFnZScsXG4gICAgICAgIGdldE9wdGlvbnM6IGNvbnN0YW50JDEoc2V0dGluZ3MpLFxuICAgICAgICBoYXNoOiBpbnB1dCA9PiBpc1VuZGVmaW5lZChpbnB1dC5jdXN0b21Db2RlKSA/IGlucHV0LmNvZGUgOiBgJHsgaW5wdXQuY29kZSB9LyR7IGlucHV0LmN1c3RvbUNvZGUgfWAsXG4gICAgICAgIGRpc3BsYXk6IGlucHV0ID0+IGlucHV0LnRpdGxlLFxuICAgICAgICB3YXRjaGVyOiAoZWRpdG9yLCB2YWx1ZSwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgcmV0dXJuIGVkaXRvci5mb3JtYXR0ZXIuZm9ybWF0Q2hhbmdlZCgnbGFuZycsIGNhbGxiYWNrLCBmYWxzZSwge1xuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLmNvZGUsXG4gICAgICAgICAgICBjdXN0b21WYWx1ZTogKF9hID0gdmFsdWUuY3VzdG9tQ29kZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbnVsbFxuICAgICAgICAgIH0pLnVuYmluZDtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0Q3VycmVudDogZWRpdG9yID0+IHtcbiAgICAgICAgICBjb25zdCBub2RlID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLnNlbGVjdGlvbi5nZXROb2RlKCkpO1xuICAgICAgICAgIHJldHVybiBjbG9zZXN0JDQobm9kZSwgbiA9PiBPcHRpb25hbC5zb21lKG4pLmZpbHRlcihpc0VsZW1lbnQkMSkuYmluZChlbGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29kZU9wdCA9IGdldE9wdChlbGUsICdsYW5nJyk7XG4gICAgICAgICAgICByZXR1cm4gY29kZU9wdC5tYXAoY29kZSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGN1c3RvbUNvZGUgPSBnZXRPcHQoZWxlLCAnZGF0YS1tY2UtbGFuZycpLmdldE9yVW5kZWZpbmVkKCk7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29kZSxcbiAgICAgICAgICAgICAgICBjdXN0b21Db2RlLFxuICAgICAgICAgICAgICAgIHRpdGxlOiAnJ1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9LFxuICAgICAgICBzZXRDdXJyZW50OiAoZWRpdG9yLCBsYW5nKSA9PiBlZGl0b3IuZXhlY0NvbW1hbmQoJ0xhbmcnLCBmYWxzZSwgbGFuZyksXG4gICAgICAgIG9uVG9vbGJhclNldHVwOiBhcGkgPT4ge1xuICAgICAgICAgIGNvbnN0IHVuYmluZGVyID0gdW5iaW5kYWJsZSgpO1xuICAgICAgICAgIGFwaS5zZXRBY3RpdmUoZWRpdG9yLmZvcm1hdHRlci5tYXRjaCgnbGFuZycsIHt9LCB1bmRlZmluZWQsIHRydWUpKTtcbiAgICAgICAgICB1bmJpbmRlci5zZXQoZWRpdG9yLmZvcm1hdHRlci5mb3JtYXRDaGFuZ2VkKCdsYW5nJywgYXBpLnNldEFjdGl2ZSwgdHJ1ZSkpO1xuICAgICAgICAgIHJldHVybiBjb21wb3NlVW5iaW5kZXJzKHVuYmluZGVyLmNsZWFyLCBvblNldHVwRWRpdGFibGVUb2dnbGUoZWRpdG9yKShhcGkpKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25NZW51U2V0dXA6IG9uU2V0dXBFZGl0YWJsZVRvZ2dsZShlZGl0b3IpXG4gICAgICB9KSk7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlciQ3ID0gZWRpdG9yID0+IHtcbiAgICAgIHJlZ2lzdGVyQ29udHJvbGxlcihlZGl0b3IsIGxpbmVIZWlnaHRTcGVjKGVkaXRvcikpO1xuICAgICAgbGFuZ3VhZ2VTcGVjKGVkaXRvcikuZWFjaChzcGVjID0+IHJlZ2lzdGVyQ29udHJvbGxlcihlZGl0b3IsIHNwZWMpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVnaXN0ZXIkNiA9IChlZGl0b3IsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY3JlYXRlQWxpZ25NZW51KGVkaXRvciwgYmFja3N0YWdlKTtcbiAgICAgIGNyZWF0ZUZvbnRGYW1pbHlNZW51KGVkaXRvciwgYmFja3N0YWdlKTtcbiAgICAgIGNyZWF0ZVN0eWxlc01lbnUoZWRpdG9yLCBiYWNrc3RhZ2UpO1xuICAgICAgY3JlYXRlQmxvY2tzTWVudShlZGl0b3IsIGJhY2tzdGFnZSk7XG4gICAgICBjcmVhdGVGb250U2l6ZU1lbnUoZWRpdG9yLCBiYWNrc3RhZ2UpO1xuICAgIH07XG5cbiAgICBjb25zdCBvblNldHVwT3V0ZGVudFN0YXRlID0gZWRpdG9yID0+IG9uU2V0dXBFdmVudChlZGl0b3IsICdOb2RlQ2hhbmdlJywgYXBpID0+IHtcbiAgICAgIGFwaS5zZXRFbmFibGVkKGVkaXRvci5xdWVyeUNvbW1hbmRTdGF0ZSgnb3V0ZGVudCcpICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFZGl0YWJsZSgpKTtcbiAgICB9KTtcbiAgICBjb25zdCByZWdpc3RlckJ1dHRvbnMkMiA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQnV0dG9uKCdvdXRkZW50Jywge1xuICAgICAgICB0b29sdGlwOiAnRGVjcmVhc2UgaW5kZW50JyxcbiAgICAgICAgaWNvbjogJ291dGRlbnQnLFxuICAgICAgICBvblNldHVwOiBvblNldHVwT3V0ZGVudFN0YXRlKGVkaXRvciksXG4gICAgICAgIG9uQWN0aW9uOiBvbkFjdGlvbkV4ZWNDb21tYW5kKGVkaXRvciwgJ291dGRlbnQnKVxuICAgICAgfSk7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQnV0dG9uKCdpbmRlbnQnLCB7XG4gICAgICAgIHRvb2x0aXA6ICdJbmNyZWFzZSBpbmRlbnQnLFxuICAgICAgICBpY29uOiAnaW5kZW50JyxcbiAgICAgICAgb25TZXR1cDogb25TZXR1cEVkaXRhYmxlVG9nZ2xlKGVkaXRvciksXG4gICAgICAgIG9uQWN0aW9uOiBvbkFjdGlvbkV4ZWNDb21tYW5kKGVkaXRvciwgJ2luZGVudCcpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyJDUgPSBlZGl0b3IgPT4ge1xuICAgICAgcmVnaXN0ZXJCdXR0b25zJDIoZWRpdG9yKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbWFrZVNldHVwSGFuZGxlciA9IChlZGl0b3IsIHBhc3RlQXNUZXh0KSA9PiBhcGkgPT4ge1xuICAgICAgYXBpLnNldEFjdGl2ZShwYXN0ZUFzVGV4dC5nZXQoKSk7XG4gICAgICBjb25zdCBwYXN0ZVBsYWluVGV4dFRvZ2dsZUhhbmRsZXIgPSBlID0+IHtcbiAgICAgICAgcGFzdGVBc1RleHQuc2V0KGUuc3RhdGUpO1xuICAgICAgICBhcGkuc2V0QWN0aXZlKGUuc3RhdGUpO1xuICAgICAgfTtcbiAgICAgIGVkaXRvci5vbignUGFzdGVQbGFpblRleHRUb2dnbGUnLCBwYXN0ZVBsYWluVGV4dFRvZ2dsZUhhbmRsZXIpO1xuICAgICAgcmV0dXJuIGNvbXBvc2VVbmJpbmRlcnMoKCkgPT4gZWRpdG9yLm9mZignUGFzdGVQbGFpblRleHRUb2dnbGUnLCBwYXN0ZVBsYWluVGV4dFRvZ2dsZUhhbmRsZXIpLCBvblNldHVwRWRpdGFibGVUb2dnbGUoZWRpdG9yKShhcGkpKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyJDQgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgcGFzdGVBc1RleHQgPSBDZWxsKGdldFBhc3RlQXNUZXh0KGVkaXRvcikpO1xuICAgICAgY29uc3Qgb25BY3Rpb24gPSAoKSA9PiBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZVRvZ2dsZVBsYWluVGV4dFBhc3RlJyk7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkVG9nZ2xlQnV0dG9uKCdwYXN0ZXRleHQnLCB7XG4gICAgICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgICAgIGljb246ICdwYXN0ZS10ZXh0JyxcbiAgICAgICAgdG9vbHRpcDogJ1Bhc3RlIGFzIHRleHQnLFxuICAgICAgICBvbkFjdGlvbixcbiAgICAgICAgb25TZXR1cDogbWFrZVNldHVwSGFuZGxlcihlZGl0b3IsIHBhc3RlQXNUZXh0KVxuICAgICAgfSk7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkVG9nZ2xlTWVudUl0ZW0oJ3Bhc3RldGV4dCcsIHtcbiAgICAgICAgdGV4dDogJ1Bhc3RlIGFzIHRleHQnLFxuICAgICAgICBpY29uOiAncGFzdGUtdGV4dCcsXG4gICAgICAgIG9uQWN0aW9uLFxuICAgICAgICBvblNldHVwOiBtYWtlU2V0dXBIYW5kbGVyKGVkaXRvciwgcGFzdGVBc1RleHQpXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25BY3Rpb25Ub2dnbGVGb3JtYXQgPSAoZWRpdG9yLCBmbXQpID0+ICgpID0+IHtcbiAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnbWNlVG9nZ2xlRm9ybWF0JywgZmFsc2UsIGZtdCk7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlckZvcm1hdEJ1dHRvbnMgPSBlZGl0b3IgPT4ge1xuICAgICAgZ2xvYmFsJDEuZWFjaChbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnYm9sZCcsXG4gICAgICAgICAgdGV4dDogJ0JvbGQnLFxuICAgICAgICAgIGljb246ICdib2xkJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2l0YWxpYycsXG4gICAgICAgICAgdGV4dDogJ0l0YWxpYycsXG4gICAgICAgICAgaWNvbjogJ2l0YWxpYydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICd1bmRlcmxpbmUnLFxuICAgICAgICAgIHRleHQ6ICdVbmRlcmxpbmUnLFxuICAgICAgICAgIGljb246ICd1bmRlcmxpbmUnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnc3RyaWtldGhyb3VnaCcsXG4gICAgICAgICAgdGV4dDogJ1N0cmlrZXRocm91Z2gnLFxuICAgICAgICAgIGljb246ICdzdHJpa2UtdGhyb3VnaCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdzdWJzY3JpcHQnLFxuICAgICAgICAgIHRleHQ6ICdTdWJzY3JpcHQnLFxuICAgICAgICAgIGljb246ICdzdWJzY3JpcHQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnc3VwZXJzY3JpcHQnLFxuICAgICAgICAgIHRleHQ6ICdTdXBlcnNjcmlwdCcsXG4gICAgICAgICAgaWNvbjogJ3N1cGVyc2NyaXB0J1xuICAgICAgICB9XG4gICAgICBdLCAoYnRuLCBfaWR4KSA9PiB7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRUb2dnbGVCdXR0b24oYnRuLm5hbWUsIHtcbiAgICAgICAgICB0b29sdGlwOiBidG4udGV4dCxcbiAgICAgICAgICBpY29uOiBidG4uaWNvbixcbiAgICAgICAgICBvblNldHVwOiBvblNldHVwU3RhdGVUb2dnbGUoZWRpdG9yLCBidG4ubmFtZSksXG4gICAgICAgICAgb25BY3Rpb246IG9uQWN0aW9uVG9nZ2xlRm9ybWF0KGVkaXRvciwgYnRuLm5hbWUpXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSA2OyBpKyspIHtcbiAgICAgICAgY29uc3QgbmFtZSA9ICdoJyArIGk7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRUb2dnbGVCdXR0b24obmFtZSwge1xuICAgICAgICAgIHRleHQ6IG5hbWUudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICB0b29sdGlwOiAnSGVhZGluZyAnICsgaSxcbiAgICAgICAgICBvblNldHVwOiBvblNldHVwU3RhdGVUb2dnbGUoZWRpdG9yLCBuYW1lKSxcbiAgICAgICAgICBvbkFjdGlvbjogb25BY3Rpb25Ub2dnbGVGb3JtYXQoZWRpdG9yLCBuYW1lKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyQ29tbWFuZEJ1dHRvbnMgPSBlZGl0b3IgPT4ge1xuICAgICAgZ2xvYmFsJDEuZWFjaChbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnY29weScsXG4gICAgICAgICAgdGV4dDogJ0NvcHknLFxuICAgICAgICAgIGFjdGlvbjogJ0NvcHknLFxuICAgICAgICAgIGljb246ICdjb3B5J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2hlbHAnLFxuICAgICAgICAgIHRleHQ6ICdIZWxwJyxcbiAgICAgICAgICBhY3Rpb246ICdtY2VIZWxwJyxcbiAgICAgICAgICBpY29uOiAnaGVscCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdzZWxlY3RhbGwnLFxuICAgICAgICAgIHRleHQ6ICdTZWxlY3QgYWxsJyxcbiAgICAgICAgICBhY3Rpb246ICdTZWxlY3RBbGwnLFxuICAgICAgICAgIGljb246ICdzZWxlY3QtYWxsJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ25ld2RvY3VtZW50JyxcbiAgICAgICAgICB0ZXh0OiAnTmV3IGRvY3VtZW50JyxcbiAgICAgICAgICBhY3Rpb246ICdtY2VOZXdEb2N1bWVudCcsXG4gICAgICAgICAgaWNvbjogJ25ldy1kb2N1bWVudCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdwcmludCcsXG4gICAgICAgICAgdGV4dDogJ1ByaW50JyxcbiAgICAgICAgICBhY3Rpb246ICdtY2VQcmludCcsXG4gICAgICAgICAgaWNvbjogJ3ByaW50J1xuICAgICAgICB9XG4gICAgICBdLCBidG4gPT4ge1xuICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQnV0dG9uKGJ0bi5uYW1lLCB7XG4gICAgICAgICAgdG9vbHRpcDogYnRuLnRleHQsXG4gICAgICAgICAgaWNvbjogYnRuLmljb24sXG4gICAgICAgICAgb25BY3Rpb246IG9uQWN0aW9uRXhlY0NvbW1hbmQoZWRpdG9yLCBidG4uYWN0aW9uKVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgZ2xvYmFsJDEuZWFjaChbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnY3V0JyxcbiAgICAgICAgICB0ZXh0OiAnQ3V0JyxcbiAgICAgICAgICBhY3Rpb246ICdDdXQnLFxuICAgICAgICAgIGljb246ICdjdXQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncGFzdGUnLFxuICAgICAgICAgIHRleHQ6ICdQYXN0ZScsXG4gICAgICAgICAgYWN0aW9uOiAnUGFzdGUnLFxuICAgICAgICAgIGljb246ICdwYXN0ZSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdyZW1vdmVmb3JtYXQnLFxuICAgICAgICAgIHRleHQ6ICdDbGVhciBmb3JtYXR0aW5nJyxcbiAgICAgICAgICBhY3Rpb246ICdSZW1vdmVGb3JtYXQnLFxuICAgICAgICAgIGljb246ICdyZW1vdmUtZm9ybWF0dGluZydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdyZW1vdmUnLFxuICAgICAgICAgIHRleHQ6ICdSZW1vdmUnLFxuICAgICAgICAgIGFjdGlvbjogJ0RlbGV0ZScsXG4gICAgICAgICAgaWNvbjogJ3JlbW92ZSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdocicsXG4gICAgICAgICAgdGV4dDogJ0hvcml6b250YWwgbGluZScsXG4gICAgICAgICAgYWN0aW9uOiAnSW5zZXJ0SG9yaXpvbnRhbFJ1bGUnLFxuICAgICAgICAgIGljb246ICdob3Jpem9udGFsLXJ1bGUnXG4gICAgICAgIH1cbiAgICAgIF0sIGJ0biA9PiB7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRCdXR0b24oYnRuLm5hbWUsIHtcbiAgICAgICAgICB0b29sdGlwOiBidG4udGV4dCxcbiAgICAgICAgICBpY29uOiBidG4uaWNvbixcbiAgICAgICAgICBvblNldHVwOiBvblNldHVwRWRpdGFibGVUb2dnbGUoZWRpdG9yKSxcbiAgICAgICAgICBvbkFjdGlvbjogb25BY3Rpb25FeGVjQ29tbWFuZChlZGl0b3IsIGJ0bi5hY3Rpb24pXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlckNvbW1hbmRUb2dnbGVCdXR0b25zID0gZWRpdG9yID0+IHtcbiAgICAgIGdsb2JhbCQxLmVhY2goW3tcbiAgICAgICAgICBuYW1lOiAnYmxvY2txdW90ZScsXG4gICAgICAgICAgdGV4dDogJ0Jsb2NrcXVvdGUnLFxuICAgICAgICAgIGFjdGlvbjogJ21jZUJsb2NrUXVvdGUnLFxuICAgICAgICAgIGljb246ICdxdW90ZSdcbiAgICAgICAgfV0sIGJ0biA9PiB7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRUb2dnbGVCdXR0b24oYnRuLm5hbWUsIHtcbiAgICAgICAgICB0b29sdGlwOiBidG4udGV4dCxcbiAgICAgICAgICBpY29uOiBidG4uaWNvbixcbiAgICAgICAgICBvbkFjdGlvbjogb25BY3Rpb25FeGVjQ29tbWFuZChlZGl0b3IsIGJ0bi5hY3Rpb24pLFxuICAgICAgICAgIG9uU2V0dXA6IG9uU2V0dXBTdGF0ZVRvZ2dsZShlZGl0b3IsIGJ0bi5uYW1lKVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXJCdXR0b25zJDEgPSBlZGl0b3IgPT4ge1xuICAgICAgcmVnaXN0ZXJGb3JtYXRCdXR0b25zKGVkaXRvcik7XG4gICAgICByZWdpc3RlckNvbW1hbmRCdXR0b25zKGVkaXRvcik7XG4gICAgICByZWdpc3RlckNvbW1hbmRUb2dnbGVCdXR0b25zKGVkaXRvcik7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3Rlck1lbnVJdGVtcyQyID0gZWRpdG9yID0+IHtcbiAgICAgIGdsb2JhbCQxLmVhY2goW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ25ld2RvY3VtZW50JyxcbiAgICAgICAgICB0ZXh0OiAnTmV3IGRvY3VtZW50JyxcbiAgICAgICAgICBhY3Rpb246ICdtY2VOZXdEb2N1bWVudCcsXG4gICAgICAgICAgaWNvbjogJ25ldy1kb2N1bWVudCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdjb3B5JyxcbiAgICAgICAgICB0ZXh0OiAnQ29weScsXG4gICAgICAgICAgYWN0aW9uOiAnQ29weScsXG4gICAgICAgICAgaWNvbjogJ2NvcHknLFxuICAgICAgICAgIHNob3J0Y3V0OiAnTWV0YStDJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3NlbGVjdGFsbCcsXG4gICAgICAgICAgdGV4dDogJ1NlbGVjdCBhbGwnLFxuICAgICAgICAgIGFjdGlvbjogJ1NlbGVjdEFsbCcsXG4gICAgICAgICAgaWNvbjogJ3NlbGVjdC1hbGwnLFxuICAgICAgICAgIHNob3J0Y3V0OiAnTWV0YStBJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3ByaW50JyxcbiAgICAgICAgICB0ZXh0OiAnUHJpbnQuLi4nLFxuICAgICAgICAgIGFjdGlvbjogJ21jZVByaW50JyxcbiAgICAgICAgICBpY29uOiAncHJpbnQnLFxuICAgICAgICAgIHNob3J0Y3V0OiAnTWV0YStQJ1xuICAgICAgICB9XG4gICAgICBdLCBtZW51aXRlbSA9PiB7XG4gICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRNZW51SXRlbShtZW51aXRlbS5uYW1lLCB7XG4gICAgICAgICAgdGV4dDogbWVudWl0ZW0udGV4dCxcbiAgICAgICAgICBpY29uOiBtZW51aXRlbS5pY29uLFxuICAgICAgICAgIHNob3J0Y3V0OiBtZW51aXRlbS5zaG9ydGN1dCxcbiAgICAgICAgICBvbkFjdGlvbjogb25BY3Rpb25FeGVjQ29tbWFuZChlZGl0b3IsIG1lbnVpdGVtLmFjdGlvbilcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGdsb2JhbCQxLmVhY2goW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2JvbGQnLFxuICAgICAgICAgIHRleHQ6ICdCb2xkJyxcbiAgICAgICAgICBhY3Rpb246ICdCb2xkJyxcbiAgICAgICAgICBpY29uOiAnYm9sZCcsXG4gICAgICAgICAgc2hvcnRjdXQ6ICdNZXRhK0InXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnaXRhbGljJyxcbiAgICAgICAgICB0ZXh0OiAnSXRhbGljJyxcbiAgICAgICAgICBhY3Rpb246ICdJdGFsaWMnLFxuICAgICAgICAgIGljb246ICdpdGFsaWMnLFxuICAgICAgICAgIHNob3J0Y3V0OiAnTWV0YStJJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3VuZGVybGluZScsXG4gICAgICAgICAgdGV4dDogJ1VuZGVybGluZScsXG4gICAgICAgICAgYWN0aW9uOiAnVW5kZXJsaW5lJyxcbiAgICAgICAgICBpY29uOiAndW5kZXJsaW5lJyxcbiAgICAgICAgICBzaG9ydGN1dDogJ01ldGErVSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdzdHJpa2V0aHJvdWdoJyxcbiAgICAgICAgICB0ZXh0OiAnU3RyaWtldGhyb3VnaCcsXG4gICAgICAgICAgYWN0aW9uOiAnU3RyaWtldGhyb3VnaCcsXG4gICAgICAgICAgaWNvbjogJ3N0cmlrZS10aHJvdWdoJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3N1YnNjcmlwdCcsXG4gICAgICAgICAgdGV4dDogJ1N1YnNjcmlwdCcsXG4gICAgICAgICAgYWN0aW9uOiAnU3Vic2NyaXB0JyxcbiAgICAgICAgICBpY29uOiAnc3Vic2NyaXB0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3N1cGVyc2NyaXB0JyxcbiAgICAgICAgICB0ZXh0OiAnU3VwZXJzY3JpcHQnLFxuICAgICAgICAgIGFjdGlvbjogJ1N1cGVyc2NyaXB0JyxcbiAgICAgICAgICBpY29uOiAnc3VwZXJzY3JpcHQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncmVtb3ZlZm9ybWF0JyxcbiAgICAgICAgICB0ZXh0OiAnQ2xlYXIgZm9ybWF0dGluZycsXG4gICAgICAgICAgYWN0aW9uOiAnUmVtb3ZlRm9ybWF0JyxcbiAgICAgICAgICBpY29uOiAncmVtb3ZlLWZvcm1hdHRpbmcnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnY3V0JyxcbiAgICAgICAgICB0ZXh0OiAnQ3V0JyxcbiAgICAgICAgICBhY3Rpb246ICdDdXQnLFxuICAgICAgICAgIGljb246ICdjdXQnLFxuICAgICAgICAgIHNob3J0Y3V0OiAnTWV0YStYJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3Bhc3RlJyxcbiAgICAgICAgICB0ZXh0OiAnUGFzdGUnLFxuICAgICAgICAgIGFjdGlvbjogJ1Bhc3RlJyxcbiAgICAgICAgICBpY29uOiAncGFzdGUnLFxuICAgICAgICAgIHNob3J0Y3V0OiAnTWV0YStWJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2hyJyxcbiAgICAgICAgICB0ZXh0OiAnSG9yaXpvbnRhbCBsaW5lJyxcbiAgICAgICAgICBhY3Rpb246ICdJbnNlcnRIb3Jpem9udGFsUnVsZScsXG4gICAgICAgICAgaWNvbjogJ2hvcml6b250YWwtcnVsZSdcbiAgICAgICAgfVxuICAgICAgXSwgbWVudWl0ZW0gPT4ge1xuICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTWVudUl0ZW0obWVudWl0ZW0ubmFtZSwge1xuICAgICAgICAgIHRleHQ6IG1lbnVpdGVtLnRleHQsXG4gICAgICAgICAgaWNvbjogbWVudWl0ZW0uaWNvbixcbiAgICAgICAgICBzaG9ydGN1dDogbWVudWl0ZW0uc2hvcnRjdXQsXG4gICAgICAgICAgb25TZXR1cDogb25TZXR1cEVkaXRhYmxlVG9nZ2xlKGVkaXRvciksXG4gICAgICAgICAgb25BY3Rpb246IG9uQWN0aW9uRXhlY0NvbW1hbmQoZWRpdG9yLCBtZW51aXRlbS5hY3Rpb24pXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTWVudUl0ZW0oJ2NvZGVmb3JtYXQnLCB7XG4gICAgICAgIHRleHQ6ICdDb2RlJyxcbiAgICAgICAgaWNvbjogJ3NvdXJjZWNvZGUnLFxuICAgICAgICBvblNldHVwOiBvblNldHVwRWRpdGFibGVUb2dnbGUoZWRpdG9yKSxcbiAgICAgICAgb25BY3Rpb246IG9uQWN0aW9uVG9nZ2xlRm9ybWF0KGVkaXRvciwgJ2NvZGUnKVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlciQzID0gZWRpdG9yID0+IHtcbiAgICAgIHJlZ2lzdGVyQnV0dG9ucyQxKGVkaXRvcik7XG4gICAgICByZWdpc3Rlck1lbnVJdGVtcyQyKGVkaXRvcik7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU2V0dXBVbmRvUmVkb1N0YXRlID0gKGVkaXRvciwgdHlwZSkgPT4gb25TZXR1cEV2ZW50KGVkaXRvciwgJ1VuZG8gUmVkbyBBZGRVbmRvIFR5cGluZ1VuZG8gQ2xlYXJVbmRvcyBTd2l0Y2hNb2RlJywgYXBpID0+IHtcbiAgICAgIGFwaS5zZXRFbmFibGVkKCFlZGl0b3IubW9kZS5pc1JlYWRPbmx5KCkgJiYgZWRpdG9yLnVuZG9NYW5hZ2VyW3R5cGVdKCkpO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlZ2lzdGVyTWVudUl0ZW1zJDEgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZE1lbnVJdGVtKCd1bmRvJywge1xuICAgICAgICB0ZXh0OiAnVW5kbycsXG4gICAgICAgIGljb246ICd1bmRvJyxcbiAgICAgICAgc2hvcnRjdXQ6ICdNZXRhK1onLFxuICAgICAgICBvblNldHVwOiBvblNldHVwVW5kb1JlZG9TdGF0ZShlZGl0b3IsICdoYXNVbmRvJyksXG4gICAgICAgIG9uQWN0aW9uOiBvbkFjdGlvbkV4ZWNDb21tYW5kKGVkaXRvciwgJ3VuZG8nKVxuICAgICAgfSk7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkTWVudUl0ZW0oJ3JlZG8nLCB7XG4gICAgICAgIHRleHQ6ICdSZWRvJyxcbiAgICAgICAgaWNvbjogJ3JlZG8nLFxuICAgICAgICBzaG9ydGN1dDogJ01ldGErWScsXG4gICAgICAgIG9uU2V0dXA6IG9uU2V0dXBVbmRvUmVkb1N0YXRlKGVkaXRvciwgJ2hhc1JlZG8nKSxcbiAgICAgICAgb25BY3Rpb246IG9uQWN0aW9uRXhlY0NvbW1hbmQoZWRpdG9yLCAncmVkbycpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyQnV0dG9ucyA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQnV0dG9uKCd1bmRvJywge1xuICAgICAgICB0b29sdGlwOiAnVW5kbycsXG4gICAgICAgIGljb246ICd1bmRvJyxcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIG9uU2V0dXA6IG9uU2V0dXBVbmRvUmVkb1N0YXRlKGVkaXRvciwgJ2hhc1VuZG8nKSxcbiAgICAgICAgb25BY3Rpb246IG9uQWN0aW9uRXhlY0NvbW1hbmQoZWRpdG9yLCAndW5kbycpXG4gICAgICB9KTtcbiAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRCdXR0b24oJ3JlZG8nLCB7XG4gICAgICAgIHRvb2x0aXA6ICdSZWRvJyxcbiAgICAgICAgaWNvbjogJ3JlZG8nLFxuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgb25TZXR1cDogb25TZXR1cFVuZG9SZWRvU3RhdGUoZWRpdG9yLCAnaGFzUmVkbycpLFxuICAgICAgICBvbkFjdGlvbjogb25BY3Rpb25FeGVjQ29tbWFuZChlZGl0b3IsICdyZWRvJylcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXIkMiA9IGVkaXRvciA9PiB7XG4gICAgICByZWdpc3Rlck1lbnVJdGVtcyQxKGVkaXRvcik7XG4gICAgICByZWdpc3RlckJ1dHRvbnMoZWRpdG9yKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25TZXR1cFZpc3VhbEFpZFN0YXRlID0gZWRpdG9yID0+IG9uU2V0dXBFdmVudChlZGl0b3IsICdWaXN1YWxBaWQnLCBhcGkgPT4ge1xuICAgICAgYXBpLnNldEFjdGl2ZShlZGl0b3IuaGFzVmlzdWFsKTtcbiAgICB9KTtcbiAgICBjb25zdCByZWdpc3Rlck1lbnVJdGVtcyA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkVG9nZ2xlTWVudUl0ZW0oJ3Zpc3VhbGFpZCcsIHtcbiAgICAgICAgdGV4dDogJ1Zpc3VhbCBhaWRzJyxcbiAgICAgICAgb25TZXR1cDogb25TZXR1cFZpc3VhbEFpZFN0YXRlKGVkaXRvciksXG4gICAgICAgIG9uQWN0aW9uOiBvbkFjdGlvbkV4ZWNDb21tYW5kKGVkaXRvciwgJ21jZVRvZ2dsZVZpc3VhbEFpZCcpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyVG9vbGJhckJ1dHRvbiA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQnV0dG9uKCd2aXN1YWxhaWQnLCB7XG4gICAgICAgIHRvb2x0aXA6ICdWaXN1YWwgYWlkcycsXG4gICAgICAgIHRleHQ6ICdWaXN1YWwgYWlkcycsXG4gICAgICAgIG9uQWN0aW9uOiBvbkFjdGlvbkV4ZWNDb21tYW5kKGVkaXRvciwgJ21jZVRvZ2dsZVZpc3VhbEFpZCcpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyJDEgPSBlZGl0b3IgPT4ge1xuICAgICAgcmVnaXN0ZXJUb29sYmFyQnV0dG9uKGVkaXRvcik7XG4gICAgICByZWdpc3Rlck1lbnVJdGVtcyhlZGl0b3IpO1xuICAgIH07XG5cbiAgICBjb25zdCBzZXR1cCQ2ID0gKGVkaXRvciwgYmFja3N0YWdlKSA9PiB7XG4gICAgICByZWdpc3RlciQ4KGVkaXRvcik7XG4gICAgICByZWdpc3RlciQzKGVkaXRvcik7XG4gICAgICByZWdpc3RlciQ2KGVkaXRvciwgYmFja3N0YWdlKTtcbiAgICAgIHJlZ2lzdGVyJDIoZWRpdG9yKTtcbiAgICAgIHJlZ2lzdGVyJGMoZWRpdG9yKTtcbiAgICAgIHJlZ2lzdGVyJDEoZWRpdG9yKTtcbiAgICAgIHJlZ2lzdGVyJDUoZWRpdG9yKTtcbiAgICAgIHJlZ2lzdGVyJDcoZWRpdG9yKTtcbiAgICAgIHJlZ2lzdGVyJDQoZWRpdG9yKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcGF0Y2hQaXBlQ29uZmlnID0gY29uZmlnID0+IGlzU3RyaW5nKGNvbmZpZykgPyBjb25maWcuc3BsaXQoL1sgLF0vKSA6IGNvbmZpZztcbiAgICBjb25zdCBvcHRpb24gPSBuYW1lID0+IGVkaXRvciA9PiBlZGl0b3Iub3B0aW9ucy5nZXQobmFtZSk7XG4gICAgY29uc3QgcmVnaXN0ZXIgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgcmVnaXN0ZXJPcHRpb24gPSBlZGl0b3Iub3B0aW9ucy5yZWdpc3RlcjtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdjb250ZXh0bWVudV9hdm9pZF9vdmVybGFwJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignY29udGV4dG1lbnVfbmV2ZXJfdXNlX25hdGl2ZScsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdjb250ZXh0bWVudScsIHtcbiAgICAgICAgcHJvY2Vzc29yOiB2YWx1ZSA9PiB7XG4gICAgICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsdWU6IFtdLFxuICAgICAgICAgICAgICB2YWxpZDogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKHZhbHVlKSB8fCBpc0FycmF5T2YodmFsdWUsIGlzU3RyaW5nKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsdWU6IHBhdGNoUGlwZUNvbmZpZyh2YWx1ZSksXG4gICAgICAgICAgICAgIHZhbGlkOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdNdXN0IGJlIGZhbHNlIG9yIGEgc3RyaW5nLidcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiAnbGluayBsaW5rY2hlY2tlciBpbWFnZSBlZGl0aW1hZ2UgdGFibGUgc3BlbGxjaGVja2VyIGNvbmZpZ3VyZXBlcm1hbmVudHBlbidcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2hvdWxkTmV2ZXJVc2VOYXRpdmUgPSBvcHRpb24oJ2NvbnRleHRtZW51X25ldmVyX3VzZV9uYXRpdmUnKTtcbiAgICBjb25zdCBnZXRBdm9pZE92ZXJsYXBTZWxlY3RvciA9IG9wdGlvbignY29udGV4dG1lbnVfYXZvaWRfb3ZlcmxhcCcpO1xuICAgIGNvbnN0IGlzQ29udGV4dE1lbnVEaXNhYmxlZCA9IGVkaXRvciA9PiBnZXRDb250ZXh0TWVudShlZGl0b3IpLmxlbmd0aCA9PT0gMDtcbiAgICBjb25zdCBnZXRDb250ZXh0TWVudSA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0TWVudXMgPSBlZGl0b3IudWkucmVnaXN0cnkuZ2V0QWxsKCkuY29udGV4dE1lbnVzO1xuICAgICAgY29uc3QgY29udGV4dE1lbnUgPSBlZGl0b3Iub3B0aW9ucy5nZXQoJ2NvbnRleHRtZW51Jyk7XG4gICAgICBpZiAoZWRpdG9yLm9wdGlvbnMuaXNTZXQoJ2NvbnRleHRtZW51JykpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlciQyKGNvbnRleHRNZW51LCBpdGVtID0+IGhhcyQyKGNvbnRleHRNZW51cywgaXRlbSkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBudSA9ICh4LCB5KSA9PiAoe1xuICAgICAgdHlwZTogJ21ha2VzaGlmdCcsXG4gICAgICB4LFxuICAgICAgeVxuICAgIH0pO1xuICAgIGNvbnN0IHRyYW5zcG9zZSA9IChwb3MsIGR4LCBkeSkgPT4ge1xuICAgICAgcmV0dXJuIG51KHBvcy54ICsgZHgsIHBvcy55ICsgZHkpO1xuICAgIH07XG4gICAgY29uc3QgaXNUb3VjaEV2ZW50JDEgPSBlID0+IGUudHlwZSA9PT0gJ2xvbmdwcmVzcycgfHwgZS50eXBlLmluZGV4T2YoJ3RvdWNoJykgPT09IDA7XG4gICAgY29uc3QgZnJvbVBhZ2VYWSA9IGUgPT4ge1xuICAgICAgaWYgKGlzVG91Y2hFdmVudCQxKGUpKSB7XG4gICAgICAgIGNvbnN0IHRvdWNoID0gZS50b3VjaGVzWzBdO1xuICAgICAgICByZXR1cm4gbnUodG91Y2gucGFnZVgsIHRvdWNoLnBhZ2VZKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudShlLnBhZ2VYLCBlLnBhZ2VZKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZyb21DbGllbnRYWSA9IGUgPT4ge1xuICAgICAgaWYgKGlzVG91Y2hFdmVudCQxKGUpKSB7XG4gICAgICAgIGNvbnN0IHRvdWNoID0gZS50b3VjaGVzWzBdO1xuICAgICAgICByZXR1cm4gbnUodG91Y2guY2xpZW50WCwgdG91Y2guY2xpZW50WSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnUoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdHJhbnNwb3NlQ29udGVudEFyZWFDb250YWluZXIgPSAoZWxlbWVudCwgcG9zKSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXJQb3MgPSBnbG9iYWwkNy5ET00uZ2V0UG9zKGVsZW1lbnQpO1xuICAgICAgcmV0dXJuIHRyYW5zcG9zZShwb3MsIGNvbnRhaW5lclBvcy54LCBjb250YWluZXJQb3MueSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRQb2ludEFuY2hvciA9IChlZGl0b3IsIGUpID0+IHtcbiAgICAgIGlmIChlLnR5cGUgPT09ICdjb250ZXh0bWVudScgfHwgZS50eXBlID09PSAnbG9uZ3ByZXNzJykge1xuICAgICAgICBpZiAoZWRpdG9yLmlubGluZSkge1xuICAgICAgICAgIHJldHVybiBmcm9tUGFnZVhZKGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0cmFuc3Bvc2VDb250ZW50QXJlYUNvbnRhaW5lcihlZGl0b3IuZ2V0Q29udGVudEFyZWFDb250YWluZXIoKSwgZnJvbUNsaWVudFhZKGUpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGdldFNlbGVjdGlvbkFuY2hvcihlZGl0b3IpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ2V0U2VsZWN0aW9uQW5jaG9yID0gZWRpdG9yID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdzZWxlY3Rpb24nLFxuICAgICAgICByb290OiBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKSlcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBnZXROb2RlQW5jaG9yID0gZWRpdG9yID0+ICh7XG4gICAgICB0eXBlOiAnbm9kZScsXG4gICAgICBub2RlOiBPcHRpb25hbC5zb21lKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5zZWxlY3Rpb24uZ2V0Tm9kZSgpKSksXG4gICAgICByb290OiBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKVxuICAgIH0pO1xuICAgIGNvbnN0IGdldEFuY2hvclNwZWMkMSA9IChlZGl0b3IsIGUsIGFuY2hvclR5cGUpID0+IHtcbiAgICAgIHN3aXRjaCAoYW5jaG9yVHlwZSkge1xuICAgICAgY2FzZSAnbm9kZSc6XG4gICAgICAgIHJldHVybiBnZXROb2RlQW5jaG9yKGVkaXRvcik7XG4gICAgICBjYXNlICdwb2ludCc6XG4gICAgICAgIHJldHVybiBnZXRQb2ludEFuY2hvcihlZGl0b3IsIGUpO1xuICAgICAgY2FzZSAnc2VsZWN0aW9uJzpcbiAgICAgICAgcmV0dXJuIGdldFNlbGVjdGlvbkFuY2hvcihlZGl0b3IpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBpbml0QW5kU2hvdyQxID0gKGVkaXRvciwgZSwgYnVpbGRNZW51LCBiYWNrc3RhZ2UsIGNvbnRleHRtZW51LCBhbmNob3JUeXBlKSA9PiB7XG4gICAgICBjb25zdCBpdGVtcyA9IGJ1aWxkTWVudSgpO1xuICAgICAgY29uc3QgYW5jaG9yU3BlYyA9IGdldEFuY2hvclNwZWMkMShlZGl0b3IsIGUsIGFuY2hvclR5cGUpO1xuICAgICAgYnVpbGQoaXRlbXMsIEl0ZW1SZXNwb25zZSQxLkNMT1NFX09OX0VYRUNVVEUsIGJhY2tzdGFnZSwge1xuICAgICAgICBpc0hvcml6b250YWxNZW51OiBmYWxzZSxcbiAgICAgICAgc2VhcmNoOiBPcHRpb25hbC5ub25lKClcbiAgICAgIH0pLm1hcChtZW51RGF0YSA9PiB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgSW5saW5lVmlldy5zaG93TWVudUF0KGNvbnRleHRtZW51LCB7IGFuY2hvcjogYW5jaG9yU3BlYyB9LCB7XG4gICAgICAgICAgbWVudTogeyBtYXJrZXJzOiBtYXJrZXJzKCdub3JtYWwnKSB9LFxuICAgICAgICAgIGRhdGE6IG1lbnVEYXRhXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxheW91dHMgPSB7XG4gICAgICBvbkx0cjogKCkgPT4gW1xuICAgICAgICBzb3V0aCQyLFxuICAgICAgICBzb3V0aGVhc3QkMixcbiAgICAgICAgc291dGh3ZXN0JDIsXG4gICAgICAgIG5vcnRoZWFzdCQyLFxuICAgICAgICBub3J0aHdlc3QkMixcbiAgICAgICAgbm9ydGgkMixcbiAgICAgICAgbm9ydGgsXG4gICAgICAgIHNvdXRoLFxuICAgICAgICBub3J0aGVhc3QsXG4gICAgICAgIHNvdXRoZWFzdCxcbiAgICAgICAgbm9ydGh3ZXN0LFxuICAgICAgICBzb3V0aHdlc3RcbiAgICAgIF0sXG4gICAgICBvblJ0bDogKCkgPT4gW1xuICAgICAgICBzb3V0aCQyLFxuICAgICAgICBzb3V0aHdlc3QkMixcbiAgICAgICAgc291dGhlYXN0JDIsXG4gICAgICAgIG5vcnRod2VzdCQyLFxuICAgICAgICBub3J0aGVhc3QkMixcbiAgICAgICAgbm9ydGgkMixcbiAgICAgICAgbm9ydGgsXG4gICAgICAgIHNvdXRoLFxuICAgICAgICBub3J0aHdlc3QsXG4gICAgICAgIHNvdXRod2VzdCxcbiAgICAgICAgbm9ydGhlYXN0LFxuICAgICAgICBzb3V0aGVhc3RcbiAgICAgIF1cbiAgICB9O1xuICAgIGNvbnN0IGJ1YmJsZVNpemUgPSAxMjtcbiAgICBjb25zdCBidWJibGVBbGlnbm1lbnRzID0ge1xuICAgICAgdmFsaWduQ2VudHJlOiBbXSxcbiAgICAgIGFsaWduQ2VudHJlOiBbXSxcbiAgICAgIGFsaWduTGVmdDogWyd0b3gtcG9wLS1hbGlnbi1sZWZ0J10sXG4gICAgICBhbGlnblJpZ2h0OiBbJ3RveC1wb3AtLWFsaWduLXJpZ2h0J10sXG4gICAgICByaWdodDogWyd0b3gtcG9wLS1yaWdodCddLFxuICAgICAgbGVmdDogWyd0b3gtcG9wLS1sZWZ0J10sXG4gICAgICBib3R0b206IFsndG94LXBvcC0tYm90dG9tJ10sXG4gICAgICB0b3A6IFsndG94LXBvcC0tdG9wJ11cbiAgICB9O1xuICAgIGNvbnN0IGlzVG91Y2hXaXRoaW5TZWxlY3Rpb24gPSAoZWRpdG9yLCBlKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uO1xuICAgICAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpIHx8IGUudG91Y2hlcy5sZW5ndGggPCAxKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRvdWNoID0gZS50b3VjaGVzWzBdO1xuICAgICAgICBjb25zdCBybmcgPSBzZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICAgIGNvbnN0IHJuZ1JlY3RPcHQgPSBnZXRGaXJzdFJlY3QoZWRpdG9yLmdldFdpbigpLCBTaW1TZWxlY3Rpb24uZG9tUmFuZ2Uocm5nKSk7XG4gICAgICAgIHJldHVybiBybmdSZWN0T3B0LmV4aXN0cyhybmdSZWN0ID0+IHJuZ1JlY3QubGVmdCA8PSB0b3VjaC5jbGllbnRYICYmIHJuZ1JlY3QucmlnaHQgPj0gdG91Y2guY2xpZW50WCAmJiBybmdSZWN0LnRvcCA8PSB0b3VjaC5jbGllbnRZICYmIHJuZ1JlY3QuYm90dG9tID49IHRvdWNoLmNsaWVudFkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2V0dXBpT1NPdmVycmlkZXMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgb3JpZ2luYWxTZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgY29uc3Qgc2VsZWN0aW9uUmVzZXQgPSAoKSA9PiB7XG4gICAgICAgIGdsb2JhbCQ5LnNldEVkaXRvclRpbWVvdXQoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcob3JpZ2luYWxTZWxlY3Rpb24pO1xuICAgICAgICB9LCAxMCk7XG4gICAgICAgIHVuYmluZEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLm9uY2UoJ3RvdWNoZW5kJywgc2VsZWN0aW9uUmVzZXQpO1xuICAgICAgY29uc3QgcHJldmVudE1vdXNlZG93biA9IGUgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLm9uKCdtb3VzZWRvd24nLCBwcmV2ZW50TW91c2Vkb3duLCB0cnVlKTtcbiAgICAgIGNvbnN0IGNsZWFyU2VsZWN0aW9uUmVzZXQgPSAoKSA9PiB1bmJpbmRFdmVudExpc3RlbmVycygpO1xuICAgICAgZWRpdG9yLm9uY2UoJ2xvbmdwcmVzc2NhbmNlbCcsIGNsZWFyU2VsZWN0aW9uUmVzZXQpO1xuICAgICAgY29uc3QgdW5iaW5kRXZlbnRMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5vZmYoJ3RvdWNoZW5kJywgc2VsZWN0aW9uUmVzZXQpO1xuICAgICAgICBlZGl0b3Iub2ZmKCdsb25ncHJlc3NjYW5jZWwnLCBjbGVhclNlbGVjdGlvblJlc2V0KTtcbiAgICAgICAgZWRpdG9yLm9mZignbW91c2Vkb3duJywgcHJldmVudE1vdXNlZG93bik7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZ2V0QW5jaG9yU3BlYyA9IChlZGl0b3IsIGUsIGFuY2hvclR5cGUpID0+IHtcbiAgICAgIGNvbnN0IGFuY2hvclNwZWMgPSBnZXRBbmNob3JTcGVjJDEoZWRpdG9yLCBlLCBhbmNob3JUeXBlKTtcbiAgICAgIGNvbnN0IGJ1YmJsZVlPZmZzZXQgPSBhbmNob3JUeXBlID09PSAncG9pbnQnID8gYnViYmxlU2l6ZSA6IDA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBidWJibGU6IG51JDUoMCwgYnViYmxlWU9mZnNldCwgYnViYmxlQWxpZ25tZW50cyksXG4gICAgICAgIGxheW91dHMsXG4gICAgICAgIG92ZXJyaWRlczoge1xuICAgICAgICAgIG1heFdpZHRoRnVuY3Rpb246IGV4cGFuZGFibGUoKSxcbiAgICAgICAgICBtYXhIZWlnaHRGdW5jdGlvbjogZXhwYW5kYWJsZSQxKClcbiAgICAgICAgfSxcbiAgICAgICAgLi4uYW5jaG9yU3BlY1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHNob3cgPSAoZWRpdG9yLCBlLCBpdGVtcywgYmFja3N0YWdlLCBjb250ZXh0bWVudSwgYW5jaG9yVHlwZSwgaGlnaGxpZ2h0SW1tZWRpYXRlbHkpID0+IHtcbiAgICAgIGNvbnN0IGFuY2hvclNwZWMgPSBnZXRBbmNob3JTcGVjKGVkaXRvciwgZSwgYW5jaG9yVHlwZSk7XG4gICAgICBidWlsZChpdGVtcywgSXRlbVJlc3BvbnNlJDEuQ0xPU0VfT05fRVhFQ1VURSwgYmFja3N0YWdlLCB7XG4gICAgICAgIGlzSG9yaXpvbnRhbE1lbnU6IHRydWUsXG4gICAgICAgIHNlYXJjaDogT3B0aW9uYWwubm9uZSgpXG4gICAgICB9KS5tYXAobWVudURhdGEgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodE9uT3BlbiA9IGhpZ2hsaWdodEltbWVkaWF0ZWx5ID8gSGlnaGxpZ2h0T25PcGVuLkhpZ2hsaWdodE1lbnVBbmRJdGVtIDogSGlnaGxpZ2h0T25PcGVuLkhpZ2hsaWdodE5vbmU7XG4gICAgICAgIElubGluZVZpZXcuc2hvd01lbnVXaXRoaW5Cb3VuZHMoY29udGV4dG1lbnUsIHsgYW5jaG9yOiBhbmNob3JTcGVjIH0sIHtcbiAgICAgICAgICBtZW51OiB7XG4gICAgICAgICAgICBtYXJrZXJzOiBtYXJrZXJzKCdub3JtYWwnKSxcbiAgICAgICAgICAgIGhpZ2hsaWdodE9uT3BlblxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGF0YTogbWVudURhdGEsXG4gICAgICAgICAgdHlwZTogJ2hvcml6b250YWwnXG4gICAgICAgIH0sICgpID0+IE9wdGlvbmFsLnNvbWUoZ2V0Q29udGV4dFRvb2xiYXJCb3VuZHMoZWRpdG9yLCBiYWNrc3RhZ2Uuc2hhcmVkLCBhbmNob3JUeXBlID09PSAnbm9kZScgPyAnbm9kZScgOiAnc2VsZWN0aW9uJykpKTtcbiAgICAgICAgZWRpdG9yLmRpc3BhdGNoKGhpZGVDb250ZXh0VG9vbGJhckV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW5pdEFuZFNob3cgPSAoZWRpdG9yLCBlLCBidWlsZE1lbnUsIGJhY2tzdGFnZSwgY29udGV4dG1lbnUsIGFuY2hvclR5cGUpID0+IHtcbiAgICAgIGNvbnN0IGRldGVjdGlvbiA9IGRldGVjdCQyKCk7XG4gICAgICBjb25zdCBpc2lPUyA9IGRldGVjdGlvbi5vcy5pc2lPUygpO1xuICAgICAgY29uc3QgaXNNYWNPUyA9IGRldGVjdGlvbi5vcy5pc01hY09TKCk7XG4gICAgICBjb25zdCBpc0FuZHJvaWQgPSBkZXRlY3Rpb24ub3MuaXNBbmRyb2lkKCk7XG4gICAgICBjb25zdCBpc1RvdWNoID0gZGV0ZWN0aW9uLmRldmljZVR5cGUuaXNUb3VjaCgpO1xuICAgICAgY29uc3Qgc2hvdWxkSGlnaGxpZ2h0SW1tZWRpYXRlbHkgPSAoKSA9PiAhKGlzQW5kcm9pZCB8fCBpc2lPUyB8fCBpc01hY09TICYmIGlzVG91Y2gpO1xuICAgICAgY29uc3Qgb3BlbiA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBidWlsZE1lbnUoKTtcbiAgICAgICAgc2hvdyhlZGl0b3IsIGUsIGl0ZW1zLCBiYWNrc3RhZ2UsIGNvbnRleHRtZW51LCBhbmNob3JUeXBlLCBzaG91bGRIaWdobGlnaHRJbW1lZGlhdGVseSgpKTtcbiAgICAgIH07XG4gICAgICBpZiAoKGlzTWFjT1MgfHwgaXNpT1MpICYmIGFuY2hvclR5cGUgIT09ICdub2RlJykge1xuICAgICAgICBjb25zdCBvcGVuaU9TID0gKCkgPT4ge1xuICAgICAgICAgIHNldHVwaU9TT3ZlcnJpZGVzKGVkaXRvcik7XG4gICAgICAgICAgb3BlbigpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoaXNUb3VjaFdpdGhpblNlbGVjdGlvbihlZGl0b3IsIGUpKSB7XG4gICAgICAgICAgb3BlbmlPUygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVkaXRvci5vbmNlKCdzZWxlY3Rpb25jaGFuZ2UnLCBvcGVuaU9TKTtcbiAgICAgICAgICBlZGl0b3Iub25jZSgndG91Y2hlbmQnLCAoKSA9PiBlZGl0b3Iub2ZmKCdzZWxlY3Rpb25jaGFuZ2UnLCBvcGVuaU9TKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wZW4oKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaXNTZXBhcmF0b3IgPSBpdGVtID0+IGlzU3RyaW5nKGl0ZW0pID8gaXRlbSA9PT0gJ3wnIDogaXRlbS50eXBlID09PSAnc2VwYXJhdG9yJztcbiAgICBjb25zdCBzZXBhcmF0b3IgPSB7IHR5cGU6ICdzZXBhcmF0b3InIH07XG4gICAgY29uc3QgbWFrZUNvbnRleHRJdGVtID0gaXRlbSA9PiB7XG4gICAgICBjb25zdCBjb21tb25NZW51SXRlbSA9IGl0ZW0gPT4gKHtcbiAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICBpY29uOiBpdGVtLmljb24sXG4gICAgICAgIGVuYWJsZWQ6IGl0ZW0uZW5hYmxlZCxcbiAgICAgICAgc2hvcnRjdXQ6IGl0ZW0uc2hvcnRjdXRcbiAgICAgIH0pO1xuICAgICAgaWYgKGlzU3RyaW5nKGl0ZW0pKSB7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpdGNoIChpdGVtLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnc2VwYXJhdG9yJzpcbiAgICAgICAgICByZXR1cm4gc2VwYXJhdG9yO1xuICAgICAgICBjYXNlICdzdWJtZW51JzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ25lc3RlZG1lbnVpdGVtJyxcbiAgICAgICAgICAgIC4uLmNvbW1vbk1lbnVJdGVtKGl0ZW0pLFxuICAgICAgICAgICAgZ2V0U3VibWVudUl0ZW1zOiAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gaXRlbS5nZXRTdWJtZW51SXRlbXMoKTtcbiAgICAgICAgICAgICAgaWYgKGlzU3RyaW5nKGl0ZW1zKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFwJDIoaXRlbXMsIG1ha2VDb250ZXh0SXRlbSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnN0IGNvbW1vbkl0ZW0gPSBpdGVtO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnbWVudWl0ZW0nLFxuICAgICAgICAgICAgLi4uY29tbW9uTWVudUl0ZW0oY29tbW9uSXRlbSksXG4gICAgICAgICAgICBvbkFjdGlvbjogbm9hcmcoY29tbW9uSXRlbS5vbkFjdGlvbilcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhZGRDb250ZXh0TWVudUdyb3VwID0gKHhzLCBncm91cEl0ZW1zKSA9PiB7XG4gICAgICBpZiAoZ3JvdXBJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHhzO1xuICAgICAgfVxuICAgICAgY29uc3QgbGFzdE1lbnVJdGVtID0gbGFzdCQxKHhzKS5maWx0ZXIoaXRlbSA9PiAhaXNTZXBhcmF0b3IoaXRlbSkpO1xuICAgICAgY29uc3QgYmVmb3JlID0gbGFzdE1lbnVJdGVtLmZvbGQoKCkgPT4gW10sIF8gPT4gW3NlcGFyYXRvcl0pO1xuICAgICAgcmV0dXJuIHhzLmNvbmNhdChiZWZvcmUpLmNvbmNhdChncm91cEl0ZW1zKS5jb25jYXQoW3NlcGFyYXRvcl0pO1xuICAgIH07XG4gICAgY29uc3QgZ2VuZXJhdGVDb250ZXh0TWVudSA9IChjb250ZXh0TWVudXMsIG1lbnVDb25maWcsIHNlbGVjdGVkRWxlbWVudCkgPT4ge1xuICAgICAgY29uc3Qgc2VjdGlvbnMgPSBmb2xkbChtZW51Q29uZmlnLCAoYWNjLCBuYW1lKSA9PiB7XG4gICAgICAgIHJldHVybiBnZXQkZyhjb250ZXh0TWVudXMsIG5hbWUudG9Mb3dlckNhc2UoKSkubWFwKG1lbnUgPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW1zID0gbWVudS51cGRhdGUoc2VsZWN0ZWRFbGVtZW50KTtcbiAgICAgICAgICBpZiAoaXNTdHJpbmcoaXRlbXMpICYmIGlzTm90RW1wdHkodHJpbSQxKGl0ZW1zKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBhZGRDb250ZXh0TWVudUdyb3VwKGFjYywgaXRlbXMuc3BsaXQoJyAnKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGl0ZW1zKSAmJiBpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxJdGVtcyA9IG1hcCQyKGl0ZW1zLCBtYWtlQ29udGV4dEl0ZW0pO1xuICAgICAgICAgICAgcmV0dXJuIGFkZENvbnRleHRNZW51R3JvdXAoYWNjLCBhbGxJdGVtcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgfVxuICAgICAgICB9KS5nZXRPclRodW5rKCgpID0+IGFjYy5jb25jYXQoW25hbWVdKSk7XG4gICAgICB9LCBbXSk7XG4gICAgICBpZiAoc2VjdGlvbnMubGVuZ3RoID4gMCAmJiBpc1NlcGFyYXRvcihzZWN0aW9uc1tzZWN0aW9ucy5sZW5ndGggLSAxXSkpIHtcbiAgICAgICAgc2VjdGlvbnMucG9wKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VjdGlvbnM7XG4gICAgfTtcbiAgICBjb25zdCBpc05hdGl2ZU92ZXJyaWRlS2V5RXZlbnQgPSAoZWRpdG9yLCBlKSA9PiBlLmN0cmxLZXkgJiYgIXNob3VsZE5ldmVyVXNlTmF0aXZlKGVkaXRvcik7XG4gICAgY29uc3QgaXNUb3VjaEV2ZW50ID0gZSA9PiBlLnR5cGUgPT09ICdsb25ncHJlc3MnIHx8IGhhcyQyKGUsICd0b3VjaGVzJyk7XG4gICAgY29uc3QgaXNUcmlnZ2VyZWRCeUtleWJvYXJkID0gKGVkaXRvciwgZSkgPT4gIWlzVG91Y2hFdmVudChlKSAmJiAoZS5idXR0b24gIT09IDIgfHwgZS50YXJnZXQgPT09IGVkaXRvci5nZXRCb2R5KCkgJiYgZS5wb2ludGVyVHlwZSA9PT0gJycpO1xuICAgIGNvbnN0IGdldFNlbGVjdGVkRWxlbWVudCA9IChlZGl0b3IsIGUpID0+IGlzVHJpZ2dlcmVkQnlLZXlib2FyZChlZGl0b3IsIGUpID8gZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCh0cnVlKSA6IGUudGFyZ2V0O1xuICAgIGNvbnN0IGdldEFuY2hvclR5cGUgPSAoZWRpdG9yLCBlKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IGdldEF2b2lkT3ZlcmxhcFNlbGVjdG9yKGVkaXRvcik7XG4gICAgICBjb25zdCBhbmNob3JUeXBlID0gaXNUcmlnZ2VyZWRCeUtleWJvYXJkKGVkaXRvciwgZSkgPyAnc2VsZWN0aW9uJyA6ICdwb2ludCc7XG4gICAgICBpZiAoaXNOb3RFbXB0eShzZWxlY3RvcikpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZ2V0U2VsZWN0ZWRFbGVtZW50KGVkaXRvciwgZSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yRXhpc3RzID0gY2xvc2VzdChTdWdhckVsZW1lbnQuZnJvbURvbSh0YXJnZXQpLCBzZWxlY3Rvcik7XG4gICAgICAgIHJldHVybiBzZWxlY3RvckV4aXN0cyA/ICdub2RlJyA6IGFuY2hvclR5cGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYW5jaG9yVHlwZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldHVwJDUgPSAoZWRpdG9yLCBsYXp5U2luaywgYmFja3N0YWdlKSA9PiB7XG4gICAgICBjb25zdCBkZXRlY3Rpb24gPSBkZXRlY3QkMigpO1xuICAgICAgY29uc3QgaXNUb3VjaCA9IGRldGVjdGlvbi5kZXZpY2VUeXBlLmlzVG91Y2g7XG4gICAgICBjb25zdCBjb250ZXh0bWVudSA9IGJ1aWxkJDEoSW5saW5lVmlldy5za2V0Y2goe1xuICAgICAgICBkb206IHsgdGFnOiAnZGl2JyB9LFxuICAgICAgICBsYXp5U2luayxcbiAgICAgICAgb25Fc2NhcGU6ICgpID0+IGVkaXRvci5mb2N1cygpLFxuICAgICAgICBvblNob3c6ICgpID0+IGJhY2tzdGFnZS5zZXRDb250ZXh0TWVudVN0YXRlKHRydWUpLFxuICAgICAgICBvbkhpZGU6ICgpID0+IGJhY2tzdGFnZS5zZXRDb250ZXh0TWVudVN0YXRlKGZhbHNlKSxcbiAgICAgICAgZmlyZURpc21pc3NhbEV2ZW50SW5zdGVhZDoge30sXG4gICAgICAgIGlubGluZUJlaGF2aW91cnM6IGRlcml2ZSQxKFtjb25maWcoJ2Rpc21pc3NDb250ZXh0TWVudScsIFtydW4kMShkaXNtaXNzUmVxdWVzdGVkKCksIChjb21wLCBfc2UpID0+IHtcbiAgICAgICAgICAgICAgU2FuZGJveGluZy5jbG9zZShjb21wKTtcbiAgICAgICAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgICAgICB9KV0pXSlcbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IGhpZGVDb250ZXh0TWVudSA9ICgpID0+IElubGluZVZpZXcuaGlkZShjb250ZXh0bWVudSk7XG4gICAgICBjb25zdCBzaG93Q29udGV4dE1lbnUgPSBlID0+IHtcbiAgICAgICAgaWYgKHNob3VsZE5ldmVyVXNlTmF0aXZlKGVkaXRvcikpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmF0aXZlT3ZlcnJpZGVLZXlFdmVudChlZGl0b3IsIGUpIHx8IGlzQ29udGV4dE1lbnVEaXNhYmxlZChlZGl0b3IpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFuY2hvclR5cGUgPSBnZXRBbmNob3JUeXBlKGVkaXRvciwgZSk7XG4gICAgICAgIGNvbnN0IGJ1aWxkTWVudSA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnQgPSBnZXRTZWxlY3RlZEVsZW1lbnQoZWRpdG9yLCBlKTtcbiAgICAgICAgICBjb25zdCByZWdpc3RyeSA9IGVkaXRvci51aS5yZWdpc3RyeS5nZXRBbGwoKTtcbiAgICAgICAgICBjb25zdCBtZW51Q29uZmlnID0gZ2V0Q29udGV4dE1lbnUoZWRpdG9yKTtcbiAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVDb250ZXh0TWVudShyZWdpc3RyeS5jb250ZXh0TWVudXMsIG1lbnVDb25maWcsIHNlbGVjdGVkRWxlbWVudCk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGluaXRBbmRTaG93JDIgPSBpc1RvdWNoKCkgPyBpbml0QW5kU2hvdyA6IGluaXRBbmRTaG93JDE7XG4gICAgICAgIGluaXRBbmRTaG93JDIoZWRpdG9yLCBlLCBidWlsZE1lbnUsIGJhY2tzdGFnZSwgY29udGV4dG1lbnUsIGFuY2hvclR5cGUpO1xuICAgICAgfTtcbiAgICAgIGVkaXRvci5vbignaW5pdCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGlkZUV2ZW50cyA9ICdSZXNpemVFZGl0b3IgU2Nyb2xsQ29udGVudCBTY3JvbGxXaW5kb3cgbG9uZ3ByZXNzY2FuY2VsJyArIChpc1RvdWNoKCkgPyAnJyA6ICcgUmVzaXplV2luZG93Jyk7XG4gICAgICAgIGVkaXRvci5vbihoaWRlRXZlbnRzLCBoaWRlQ29udGV4dE1lbnUpO1xuICAgICAgICBlZGl0b3Iub24oJ2xvbmdwcmVzcyBjb250ZXh0bWVudScsIHNob3dDb250ZXh0TWVudSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgYWR0ID0gQWR0LmdlbmVyYXRlKFtcbiAgICAgIHtcbiAgICAgICAgb2Zmc2V0OiBbXG4gICAgICAgICAgJ3gnLFxuICAgICAgICAgICd5J1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhYnNvbHV0ZTogW1xuICAgICAgICAgICd4JyxcbiAgICAgICAgICAneSdcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZml4ZWQ6IFtcbiAgICAgICAgICAneCcsXG4gICAgICAgICAgJ3knXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdKTtcbiAgICBjb25zdCBzdWJ0cmFjdCA9IGNoYW5nZSA9PiBwb2ludCA9PiBwb2ludC50cmFuc2xhdGUoLWNoYW5nZS5sZWZ0LCAtY2hhbmdlLnRvcCk7XG4gICAgY29uc3QgYWRkID0gY2hhbmdlID0+IHBvaW50ID0+IHBvaW50LnRyYW5zbGF0ZShjaGFuZ2UubGVmdCwgY2hhbmdlLnRvcCk7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gY2hhbmdlcyA9PiAoeCwgeSkgPT4gZm9sZGwoY2hhbmdlcywgKHJlc3QsIGYpID0+IGYocmVzdCksIFN1Z2FyUG9zaXRpb24oeCwgeSkpO1xuICAgIGNvbnN0IGFzRml4ZWQgPSAoY29vcmQsIHNjcm9sbCwgb3JpZ2luKSA9PiBjb29yZC5mb2xkKHRyYW5zZm9ybShbXG4gICAgICBhZGQob3JpZ2luKSxcbiAgICAgIHN1YnRyYWN0KHNjcm9sbClcbiAgICBdKSwgdHJhbnNmb3JtKFtzdWJ0cmFjdChzY3JvbGwpXSksIHRyYW5zZm9ybShbXSkpO1xuICAgIGNvbnN0IGFzQWJzb2x1dGUgPSAoY29vcmQsIHNjcm9sbCwgb3JpZ2luKSA9PiBjb29yZC5mb2xkKHRyYW5zZm9ybShbYWRkKG9yaWdpbildKSwgdHJhbnNmb3JtKFtdKSwgdHJhbnNmb3JtKFthZGQoc2Nyb2xsKV0pKTtcbiAgICBjb25zdCBhc09mZnNldCA9IChjb29yZCwgc2Nyb2xsLCBvcmlnaW4pID0+IGNvb3JkLmZvbGQodHJhbnNmb3JtKFtdKSwgdHJhbnNmb3JtKFtzdWJ0cmFjdChvcmlnaW4pXSksIHRyYW5zZm9ybShbXG4gICAgICBhZGQoc2Nyb2xsKSxcbiAgICAgIHN1YnRyYWN0KG9yaWdpbilcbiAgICBdKSk7XG4gICAgY29uc3Qgd2l0aGluUmFuZ2UgPSAoY29vcmQxLCBjb29yZDIsIHhSYW5nZSwgeVJhbmdlLCBzY3JvbGwsIG9yaWdpbikgPT4ge1xuICAgICAgY29uc3QgYTEgPSBhc0Fic29sdXRlKGNvb3JkMSwgc2Nyb2xsLCBvcmlnaW4pO1xuICAgICAgY29uc3QgYTIgPSBhc0Fic29sdXRlKGNvb3JkMiwgc2Nyb2xsLCBvcmlnaW4pO1xuICAgICAgcmV0dXJuIE1hdGguYWJzKGExLmxlZnQgLSBhMi5sZWZ0KSA8PSB4UmFuZ2UgJiYgTWF0aC5hYnMoYTEudG9wIC0gYTIudG9wKSA8PSB5UmFuZ2U7XG4gICAgfTtcbiAgICBjb25zdCBnZXREZWx0YXMgPSAoY29vcmQxLCBjb29yZDIsIHhSYW5nZSwgeVJhbmdlLCBzY3JvbGwsIG9yaWdpbikgPT4ge1xuICAgICAgY29uc3QgYTEgPSBhc0Fic29sdXRlKGNvb3JkMSwgc2Nyb2xsLCBvcmlnaW4pO1xuICAgICAgY29uc3QgYTIgPSBhc0Fic29sdXRlKGNvb3JkMiwgc2Nyb2xsLCBvcmlnaW4pO1xuICAgICAgY29uc3QgbGVmdCA9IE1hdGguYWJzKGExLmxlZnQgLSBhMi5sZWZ0KTtcbiAgICAgIGNvbnN0IHRvcCA9IE1hdGguYWJzKGExLnRvcCAtIGEyLnRvcCk7XG4gICAgICByZXR1cm4gU3VnYXJQb3NpdGlvbihsZWZ0LCB0b3ApO1xuICAgIH07XG4gICAgY29uc3QgdG9TdHlsZXMgPSAoY29vcmQsIHNjcm9sbCwgb3JpZ2luKSA9PiB7XG4gICAgICBjb25zdCBzdHlsZXNPcHQgPSBjb29yZC5mb2xkKCh4LCB5KSA9PiAoe1xuICAgICAgICBwb3NpdGlvbjogT3B0aW9uYWwuc29tZSgnYWJzb2x1dGUnKSxcbiAgICAgICAgbGVmdDogT3B0aW9uYWwuc29tZSh4ICsgJ3B4JyksXG4gICAgICAgIHRvcDogT3B0aW9uYWwuc29tZSh5ICsgJ3B4JylcbiAgICAgIH0pLCAoeCwgeSkgPT4gKHtcbiAgICAgICAgcG9zaXRpb246IE9wdGlvbmFsLnNvbWUoJ2Fic29sdXRlJyksXG4gICAgICAgIGxlZnQ6IE9wdGlvbmFsLnNvbWUoeCAtIG9yaWdpbi5sZWZ0ICsgJ3B4JyksXG4gICAgICAgIHRvcDogT3B0aW9uYWwuc29tZSh5IC0gb3JpZ2luLnRvcCArICdweCcpXG4gICAgICB9KSwgKHgsIHkpID0+ICh7XG4gICAgICAgIHBvc2l0aW9uOiBPcHRpb25hbC5zb21lKCdmaXhlZCcpLFxuICAgICAgICBsZWZ0OiBPcHRpb25hbC5zb21lKHggKyAncHgnKSxcbiAgICAgICAgdG9wOiBPcHRpb25hbC5zb21lKHkgKyAncHgnKVxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmlnaHQ6IE9wdGlvbmFsLm5vbmUoKSxcbiAgICAgICAgYm90dG9tOiBPcHRpb25hbC5ub25lKCksXG4gICAgICAgIC4uLnN0eWxlc09wdFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHRyYW5zbGF0ZSA9IChjb29yZCwgZGVsdGFYLCBkZWx0YVkpID0+IGNvb3JkLmZvbGQoKHgsIHkpID0+IG9mZnNldCh4ICsgZGVsdGFYLCB5ICsgZGVsdGFZKSwgKHgsIHkpID0+IGFic29sdXRlKHggKyBkZWx0YVgsIHkgKyBkZWx0YVkpLCAoeCwgeSkgPT4gZml4ZWQoeCArIGRlbHRhWCwgeSArIGRlbHRhWSkpO1xuICAgIGNvbnN0IGFic29yYiA9IChwYXJ0aWFsQ29vcmQsIG9yaWdpbmFsQ29vcmQsIHNjcm9sbCwgb3JpZ2luKSA9PiB7XG4gICAgICBjb25zdCBhYnNvcmJPbmUgPSAoc3RlbmNpbCwgbnUpID0+IChvcHRYLCBvcHRZKSA9PiB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsID0gc3RlbmNpbChvcmlnaW5hbENvb3JkLCBzY3JvbGwsIG9yaWdpbik7XG4gICAgICAgIHJldHVybiBudShvcHRYLmdldE9yKG9yaWdpbmFsLmxlZnQpLCBvcHRZLmdldE9yKG9yaWdpbmFsLnRvcCkpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBwYXJ0aWFsQ29vcmQuZm9sZChhYnNvcmJPbmUoYXNPZmZzZXQsIG9mZnNldCksIGFic29yYk9uZShhc0Fic29sdXRlLCBhYnNvbHV0ZSksIGFic29yYk9uZShhc0ZpeGVkLCBmaXhlZCkpO1xuICAgIH07XG4gICAgY29uc3Qgb2Zmc2V0ID0gYWR0Lm9mZnNldDtcbiAgICBjb25zdCBhYnNvbHV0ZSA9IGFkdC5hYnNvbHV0ZTtcbiAgICBjb25zdCBmaXhlZCA9IGFkdC5maXhlZDtcblxuICAgIGNvbnN0IHBhcnNlQXR0clRvSW50ID0gKGVsZW1lbnQsIG5hbWUpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZ2V0JGYoZWxlbWVudCwgbmFtZSk7XG4gICAgICByZXR1cm4gaXNVbmRlZmluZWQodmFsdWUpID8gTmFOIDogcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldCA9IChjb21wb25lbnQsIHNuYXBzSW5mbykgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGNvbXBvbmVudC5lbGVtZW50O1xuICAgICAgY29uc3QgeCA9IHBhcnNlQXR0clRvSW50KGVsZW1lbnQsIHNuYXBzSW5mby5sZWZ0QXR0cik7XG4gICAgICBjb25zdCB5ID0gcGFyc2VBdHRyVG9JbnQoZWxlbWVudCwgc25hcHNJbmZvLnRvcEF0dHIpO1xuICAgICAgcmV0dXJuIGlzTmFOKHgpIHx8IGlzTmFOKHkpID8gT3B0aW9uYWwubm9uZSgpIDogT3B0aW9uYWwuc29tZShTdWdhclBvc2l0aW9uKHgsIHkpKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldCA9IChjb21wb25lbnQsIHNuYXBzSW5mbywgcHQpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb21wb25lbnQuZWxlbWVudDtcbiAgICAgIHNldCQ5KGVsZW1lbnQsIHNuYXBzSW5mby5sZWZ0QXR0ciwgcHQubGVmdCArICdweCcpO1xuICAgICAgc2V0JDkoZWxlbWVudCwgc25hcHNJbmZvLnRvcEF0dHIsIHB0LnRvcCArICdweCcpO1xuICAgIH07XG4gICAgY29uc3QgY2xlYXIgPSAoY29tcG9uZW50LCBzbmFwc0luZm8pID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb21wb25lbnQuZWxlbWVudDtcbiAgICAgIHJlbW92ZSQ3KGVsZW1lbnQsIHNuYXBzSW5mby5sZWZ0QXR0cik7XG4gICAgICByZW1vdmUkNyhlbGVtZW50LCBzbmFwc0luZm8udG9wQXR0cik7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldENvb3JkcyA9IChjb21wb25lbnQsIHNuYXBJbmZvLCBjb29yZCwgZGVsdGEpID0+IGdldChjb21wb25lbnQsIHNuYXBJbmZvKS5mb2xkKCgpID0+IGNvb3JkLCBmaXhlZCQxID0+IGZpeGVkKGZpeGVkJDEubGVmdCArIGRlbHRhLmxlZnQsIGZpeGVkJDEudG9wICsgZGVsdGEudG9wKSk7XG4gICAgY29uc3QgbW92ZU9yU25hcCA9IChjb21wb25lbnQsIHNuYXBJbmZvLCBjb29yZCwgZGVsdGEsIHNjcm9sbCwgb3JpZ2luKSA9PiB7XG4gICAgICBjb25zdCBuZXdDb29yZCA9IGdldENvb3Jkcyhjb21wb25lbnQsIHNuYXBJbmZvLCBjb29yZCwgZGVsdGEpO1xuICAgICAgY29uc3Qgc25hcCA9IHNuYXBJbmZvLm11c3RTbmFwID8gZmluZENsb3Nlc3RTbmFwKGNvbXBvbmVudCwgc25hcEluZm8sIG5ld0Nvb3JkLCBzY3JvbGwsIG9yaWdpbikgOiBmaW5kU25hcChjb21wb25lbnQsIHNuYXBJbmZvLCBuZXdDb29yZCwgc2Nyb2xsLCBvcmlnaW4pO1xuICAgICAgY29uc3QgZml4ZWRDb29yZCA9IGFzRml4ZWQobmV3Q29vcmQsIHNjcm9sbCwgb3JpZ2luKTtcbiAgICAgIHNldChjb21wb25lbnQsIHNuYXBJbmZvLCBmaXhlZENvb3JkKTtcbiAgICAgIHJldHVybiBzbmFwLmZvbGQoKCkgPT4gKHtcbiAgICAgICAgY29vcmQ6IGZpeGVkKGZpeGVkQ29vcmQubGVmdCwgZml4ZWRDb29yZC50b3ApLFxuICAgICAgICBleHRyYTogT3B0aW9uYWwubm9uZSgpXG4gICAgICB9KSwgc3Bhbm5lZCA9PiAoe1xuICAgICAgICBjb29yZDogc3Bhbm5lZC5vdXRwdXQsXG4gICAgICAgIGV4dHJhOiBzcGFubmVkLmV4dHJhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgICBjb25zdCBzdG9wRHJhZyA9IChjb21wb25lbnQsIHNuYXBJbmZvKSA9PiB7XG4gICAgICBjbGVhcihjb21wb25lbnQsIHNuYXBJbmZvKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRNYXRjaGluZ1NuYXAgPSAoc25hcHMsIG5ld0Nvb3JkLCBzY3JvbGwsIG9yaWdpbikgPT4gZmluZE1hcChzbmFwcywgc25hcCA9PiB7XG4gICAgICBjb25zdCBzZW5zb3IgPSBzbmFwLnNlbnNvcjtcbiAgICAgIGNvbnN0IGluUmFuZ2UgPSB3aXRoaW5SYW5nZShuZXdDb29yZCwgc2Vuc29yLCBzbmFwLnJhbmdlLmxlZnQsIHNuYXAucmFuZ2UudG9wLCBzY3JvbGwsIG9yaWdpbik7XG4gICAgICByZXR1cm4gaW5SYW5nZSA/IE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICBvdXRwdXQ6IGFic29yYihzbmFwLm91dHB1dCwgbmV3Q29vcmQsIHNjcm9sbCwgb3JpZ2luKSxcbiAgICAgICAgZXh0cmE6IHNuYXAuZXh0cmFcbiAgICAgIH0pIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIH0pO1xuICAgIGNvbnN0IGZpbmRDbG9zZXN0U25hcCA9IChjb21wb25lbnQsIHNuYXBJbmZvLCBuZXdDb29yZCwgc2Nyb2xsLCBvcmlnaW4pID0+IHtcbiAgICAgIGNvbnN0IHNuYXBzID0gc25hcEluZm8uZ2V0U25hcFBvaW50cyhjb21wb25lbnQpO1xuICAgICAgY29uc3QgbWF0Y2hTbmFwID0gZmluZE1hdGNoaW5nU25hcChzbmFwcywgbmV3Q29vcmQsIHNjcm9sbCwgb3JpZ2luKTtcbiAgICAgIHJldHVybiBtYXRjaFNuYXAub3JUaHVuaygoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJlc3RTbmFwID0gZm9sZGwoc25hcHMsIChhY2MsIHNuYXApID0+IHtcbiAgICAgICAgICBjb25zdCBzZW5zb3IgPSBzbmFwLnNlbnNvcjtcbiAgICAgICAgICBjb25zdCBkZWx0YXMgPSBnZXREZWx0YXMobmV3Q29vcmQsIHNlbnNvciwgc25hcC5yYW5nZS5sZWZ0LCBzbmFwLnJhbmdlLnRvcCwgc2Nyb2xsLCBvcmlnaW4pO1xuICAgICAgICAgIHJldHVybiBhY2MuZGVsdGFzLmZvbGQoKCkgPT4gKHtcbiAgICAgICAgICAgIGRlbHRhczogT3B0aW9uYWwuc29tZShkZWx0YXMpLFxuICAgICAgICAgICAgc25hcDogT3B0aW9uYWwuc29tZShzbmFwKVxuICAgICAgICAgIH0pLCBiZXN0RGVsdGFzID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJBdmcgPSAoZGVsdGFzLmxlZnQgKyBkZWx0YXMudG9wKSAvIDI7XG4gICAgICAgICAgICBjb25zdCBiZXN0QXZnID0gKGJlc3REZWx0YXMubGVmdCArIGJlc3REZWx0YXMudG9wKSAvIDI7XG4gICAgICAgICAgICBpZiAoY3VyckF2ZyA8PSBiZXN0QXZnKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGVsdGFzOiBPcHRpb25hbC5zb21lKGRlbHRhcyksXG4gICAgICAgICAgICAgICAgc25hcDogT3B0aW9uYWwuc29tZShzbmFwKVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwge1xuICAgICAgICAgIGRlbHRhczogT3B0aW9uYWwubm9uZSgpLFxuICAgICAgICAgIHNuYXA6IE9wdGlvbmFsLm5vbmUoKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGJlc3RTbmFwLnNuYXAubWFwKHNuYXAgPT4gKHtcbiAgICAgICAgICBvdXRwdXQ6IGFic29yYihzbmFwLm91dHB1dCwgbmV3Q29vcmQsIHNjcm9sbCwgb3JpZ2luKSxcbiAgICAgICAgICBleHRyYTogc25hcC5leHRyYVxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRTbmFwID0gKGNvbXBvbmVudCwgc25hcEluZm8sIG5ld0Nvb3JkLCBzY3JvbGwsIG9yaWdpbikgPT4ge1xuICAgICAgY29uc3Qgc25hcHMgPSBzbmFwSW5mby5nZXRTbmFwUG9pbnRzKGNvbXBvbmVudCk7XG4gICAgICByZXR1cm4gZmluZE1hdGNoaW5nU25hcChzbmFwcywgbmV3Q29vcmQsIHNjcm9sbCwgb3JpZ2luKTtcbiAgICB9O1xuICAgIGNvbnN0IHNuYXBUbyQxID0gKHNuYXAsIHNjcm9sbCwgb3JpZ2luKSA9PiAoe1xuICAgICAgY29vcmQ6IGFic29yYihzbmFwLm91dHB1dCwgc25hcC5vdXRwdXQsIHNjcm9sbCwgb3JpZ2luKSxcbiAgICAgIGV4dHJhOiBzbmFwLmV4dHJhXG4gICAgfSk7XG5cbiAgICBjb25zdCBzbmFwVG8gPSAoY29tcG9uZW50LCBkcmFnQ29uZmlnLCBfc3RhdGUsIHNuYXApID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGRyYWdDb25maWcuZ2V0VGFyZ2V0KGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgIGlmIChkcmFnQ29uZmlnLnJlcG9zaXRpb25UYXJnZXQpIHtcbiAgICAgICAgY29uc3QgZG9jID0gb3duZXIkNChjb21wb25lbnQuZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHNjcm9sbCA9IGdldCRiKGRvYyk7XG4gICAgICAgIGNvbnN0IG9yaWdpbiA9IGdldE9yaWdpbih0YXJnZXQpO1xuICAgICAgICBjb25zdCBzbmFwUGluID0gc25hcFRvJDEoc25hcCwgc2Nyb2xsLCBvcmlnaW4pO1xuICAgICAgICBjb25zdCBzdHlsZXMgPSB0b1N0eWxlcyhzbmFwUGluLmNvb3JkLCBzY3JvbGwsIG9yaWdpbik7XG4gICAgICAgIHNldE9wdGlvbnModGFyZ2V0LCBzdHlsZXMpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgRHJhZ2dpbmdBcGlzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIHNuYXBUbzogc25hcFRvXG4gICAgfSk7XG5cbiAgICBjb25zdCBpbml0aWFsQXR0cmlidXRlID0gJ2RhdGEtaW5pdGlhbC16LWluZGV4JztcbiAgICBjb25zdCByZXNldFpJbmRleCA9IGJsb2NrZXIgPT4ge1xuICAgICAgcGFyZW50KGJsb2NrZXIuZWxlbWVudCkuZmlsdGVyKGlzRWxlbWVudCQxKS5lYWNoKHJvb3QgPT4ge1xuICAgICAgICBnZXRPcHQocm9vdCwgaW5pdGlhbEF0dHJpYnV0ZSkuZm9sZCgoKSA9PiByZW1vdmUkNihyb290LCAnei1pbmRleCcpLCB6SW5kZXggPT4gc2V0JDgocm9vdCwgJ3otaW5kZXgnLCB6SW5kZXgpKTtcbiAgICAgICAgcmVtb3ZlJDcocm9vdCwgaW5pdGlhbEF0dHJpYnV0ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGNoYW5nZVpJbmRleCA9IGJsb2NrZXIgPT4ge1xuICAgICAgcGFyZW50KGJsb2NrZXIuZWxlbWVudCkuZmlsdGVyKGlzRWxlbWVudCQxKS5lYWNoKHJvb3QgPT4ge1xuICAgICAgICBnZXRSYXcocm9vdCwgJ3otaW5kZXgnKS5lYWNoKHppbmRleCA9PiB7XG4gICAgICAgICAgc2V0JDkocm9vdCwgaW5pdGlhbEF0dHJpYnV0ZSwgemluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNldCQ4KHJvb3QsICd6LWluZGV4JywgZ2V0JGUoYmxvY2tlci5lbGVtZW50LCAnei1pbmRleCcpKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW5zdGlnYXRlID0gKGFueUNvbXBvbmVudCwgYmxvY2tlcikgPT4ge1xuICAgICAgYW55Q29tcG9uZW50LmdldFN5c3RlbSgpLmFkZFRvR3VpKGJsb2NrZXIpO1xuICAgICAgY2hhbmdlWkluZGV4KGJsb2NrZXIpO1xuICAgIH07XG4gICAgY29uc3QgZGlzY2FyZCA9IGJsb2NrZXIgPT4ge1xuICAgICAgcmVzZXRaSW5kZXgoYmxvY2tlcik7XG4gICAgICBibG9ja2VyLmdldFN5c3RlbSgpLnJlbW92ZUZyb21HdWkoYmxvY2tlcik7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVDb21wb25lbnQgPSAoY29tcG9uZW50LCBibG9ja2VyQ2xhc3MsIGJsb2NrZXJFdmVudHMpID0+IGNvbXBvbmVudC5nZXRTeXN0ZW0oKS5idWlsZChDb250YWluZXIuc2tldGNoKHtcbiAgICAgIGRvbToge1xuICAgICAgICBzdHlsZXM6IHtcbiAgICAgICAgICAnbGVmdCc6ICcwcHgnLFxuICAgICAgICAgICd0b3AnOiAnMHB4JyxcbiAgICAgICAgICAnd2lkdGgnOiAnMTAwJScsXG4gICAgICAgICAgJ2hlaWdodCc6ICcxMDAlJyxcbiAgICAgICAgICAncG9zaXRpb24nOiAnZml4ZWQnLFxuICAgICAgICAgICd6LWluZGV4JzogJzEwMDAwMDAwMDAwMDAwMDAnXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzZXM6IFtibG9ja2VyQ2xhc3NdXG4gICAgICB9LFxuICAgICAgZXZlbnRzOiBibG9ja2VyRXZlbnRzXG4gICAgfSkpO1xuXG4gICAgdmFyIFNuYXBTY2hlbWEgPSBvcHRpb25PYmpPZignc25hcHMnLCBbXG4gICAgICByZXF1aXJlZCQxKCdnZXRTbmFwUG9pbnRzJyksXG4gICAgICBvbkhhbmRsZXIoJ29uU2Vuc29yJyksXG4gICAgICByZXF1aXJlZCQxKCdsZWZ0QXR0cicpLFxuICAgICAgcmVxdWlyZWQkMSgndG9wQXR0cicpLFxuICAgICAgZGVmYXVsdGVkKCdsYXp5Vmlld3BvcnQnLCB3aW4pLFxuICAgICAgZGVmYXVsdGVkKCdtdXN0U25hcCcsIGZhbHNlKVxuICAgIF0pO1xuXG4gICAgY29uc3Qgc2NoZW1hJDYgPSBbXG4gICAgICBkZWZhdWx0ZWQoJ3VzZUZpeGVkJywgbmV2ZXIpLFxuICAgICAgcmVxdWlyZWQkMSgnYmxvY2tlckNsYXNzJyksXG4gICAgICBkZWZhdWx0ZWQoJ2dldFRhcmdldCcsIGlkZW50aXR5KSxcbiAgICAgIGRlZmF1bHRlZCgnb25EcmFnJywgbm9vcCksXG4gICAgICBkZWZhdWx0ZWQoJ3JlcG9zaXRpb25UYXJnZXQnLCB0cnVlKSxcbiAgICAgIGRlZmF1bHRlZCgnb25Ecm9wJywgbm9vcCksXG4gICAgICBkZWZhdWx0ZWRGdW5jdGlvbignZ2V0Qm91bmRzJywgd2luKSxcbiAgICAgIFNuYXBTY2hlbWFcbiAgICBdO1xuXG4gICAgY29uc3QgZ2V0Q3VycmVudENvb3JkID0gdGFyZ2V0ID0+IGxpZnQzKGdldFJhdyh0YXJnZXQsICdsZWZ0JyksIGdldFJhdyh0YXJnZXQsICd0b3AnKSwgZ2V0UmF3KHRhcmdldCwgJ3Bvc2l0aW9uJyksIChsZWZ0LCB0b3AsIHBvc2l0aW9uKSA9PiB7XG4gICAgICBjb25zdCBudSA9IHBvc2l0aW9uID09PSAnZml4ZWQnID8gZml4ZWQgOiBvZmZzZXQ7XG4gICAgICByZXR1cm4gbnUocGFyc2VJbnQobGVmdCwgMTApLCBwYXJzZUludCh0b3AsIDEwKSk7XG4gICAgfSkuZ2V0T3JUaHVuaygoKSA9PiB7XG4gICAgICBjb25zdCBsb2NhdGlvbiA9IGFic29sdXRlJDModGFyZ2V0KTtcbiAgICAgIHJldHVybiBhYnNvbHV0ZShsb2NhdGlvbi5sZWZ0LCBsb2NhdGlvbi50b3ApO1xuICAgIH0pO1xuICAgIGNvbnN0IGNsYW1wQ29vcmRzID0gKGNvbXBvbmVudCwgY29vcmRzLCBzY3JvbGwsIG9yaWdpbiwgc3RhcnREYXRhKSA9PiB7XG4gICAgICBjb25zdCBib3VuZHMgPSBzdGFydERhdGEuYm91bmRzO1xuICAgICAgY29uc3QgYWJzb2x1dGVDb29yZCA9IGFzQWJzb2x1dGUoY29vcmRzLCBzY3JvbGwsIG9yaWdpbik7XG4gICAgICBjb25zdCBuZXdYID0gY2xhbXAoYWJzb2x1dGVDb29yZC5sZWZ0LCBib3VuZHMueCwgYm91bmRzLnggKyBib3VuZHMud2lkdGggLSBzdGFydERhdGEud2lkdGgpO1xuICAgICAgY29uc3QgbmV3WSA9IGNsYW1wKGFic29sdXRlQ29vcmQudG9wLCBib3VuZHMueSwgYm91bmRzLnkgKyBib3VuZHMuaGVpZ2h0IC0gc3RhcnREYXRhLmhlaWdodCk7XG4gICAgICBjb25zdCBuZXdDb29yZHMgPSBhYnNvbHV0ZShuZXdYLCBuZXdZKTtcbiAgICAgIHJldHVybiBjb29yZHMuZm9sZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG9mZnNldCQxID0gYXNPZmZzZXQobmV3Q29vcmRzLCBzY3JvbGwsIG9yaWdpbik7XG4gICAgICAgIHJldHVybiBvZmZzZXQob2Zmc2V0JDEubGVmdCwgb2Zmc2V0JDEudG9wKTtcbiAgICAgIH0sIGNvbnN0YW50JDEobmV3Q29vcmRzKSwgKCkgPT4ge1xuICAgICAgICBjb25zdCBmaXhlZCQxID0gYXNGaXhlZChuZXdDb29yZHMsIHNjcm9sbCwgb3JpZ2luKTtcbiAgICAgICAgcmV0dXJuIGZpeGVkKGZpeGVkJDEubGVmdCwgZml4ZWQkMS50b3ApO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBjYWxjTmV3Q29vcmQgPSAoY29tcG9uZW50LCBvcHRTbmFwcywgY3VycmVudENvb3JkLCBzY3JvbGwsIG9yaWdpbiwgZGVsdGEsIHN0YXJ0RGF0YSkgPT4ge1xuICAgICAgY29uc3QgbmV3Q29vcmQgPSBvcHRTbmFwcy5mb2xkKCgpID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlZCA9IHRyYW5zbGF0ZShjdXJyZW50Q29vcmQsIGRlbHRhLmxlZnQsIGRlbHRhLnRvcCk7XG4gICAgICAgIGNvbnN0IGZpeGVkQ29vcmQgPSBhc0ZpeGVkKHRyYW5zbGF0ZWQsIHNjcm9sbCwgb3JpZ2luKTtcbiAgICAgICAgcmV0dXJuIGZpeGVkKGZpeGVkQ29vcmQubGVmdCwgZml4ZWRDb29yZC50b3ApO1xuICAgICAgfSwgc25hcEluZm8gPT4ge1xuICAgICAgICBjb25zdCBzbmFwcGluZyA9IG1vdmVPclNuYXAoY29tcG9uZW50LCBzbmFwSW5mbywgY3VycmVudENvb3JkLCBkZWx0YSwgc2Nyb2xsLCBvcmlnaW4pO1xuICAgICAgICBzbmFwcGluZy5leHRyYS5lYWNoKGV4dHJhID0+IHtcbiAgICAgICAgICBzbmFwSW5mby5vblNlbnNvcihjb21wb25lbnQsIGV4dHJhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzbmFwcGluZy5jb29yZDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNsYW1wQ29vcmRzKGNvbXBvbmVudCwgbmV3Q29vcmQsIHNjcm9sbCwgb3JpZ2luLCBzdGFydERhdGEpO1xuICAgIH07XG4gICAgY29uc3QgZHJhZ0J5ID0gKGNvbXBvbmVudCwgZHJhZ0NvbmZpZywgc3RhcnREYXRhLCBkZWx0YSkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZHJhZ0NvbmZpZy5nZXRUYXJnZXQoY29tcG9uZW50LmVsZW1lbnQpO1xuICAgICAgaWYgKGRyYWdDb25maWcucmVwb3NpdGlvblRhcmdldCkge1xuICAgICAgICBjb25zdCBkb2MgPSBvd25lciQ0KGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsID0gZ2V0JGIoZG9jKTtcbiAgICAgICAgY29uc3Qgb3JpZ2luID0gZ2V0T3JpZ2luKHRhcmdldCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb29yZCA9IGdldEN1cnJlbnRDb29yZCh0YXJnZXQpO1xuICAgICAgICBjb25zdCBuZXdDb29yZCA9IGNhbGNOZXdDb29yZChjb21wb25lbnQsIGRyYWdDb25maWcuc25hcHMsIGN1cnJlbnRDb29yZCwgc2Nyb2xsLCBvcmlnaW4sIGRlbHRhLCBzdGFydERhdGEpO1xuICAgICAgICBjb25zdCBzdHlsZXMgPSB0b1N0eWxlcyhuZXdDb29yZCwgc2Nyb2xsLCBvcmlnaW4pO1xuICAgICAgICBzZXRPcHRpb25zKHRhcmdldCwgc3R5bGVzKTtcbiAgICAgIH1cbiAgICAgIGRyYWdDb25maWcub25EcmFnKGNvbXBvbmVudCwgdGFyZ2V0LCBkZWx0YSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNhbGNTdGFydERhdGEgPSAoZHJhZ0NvbmZpZywgY29tcCkgPT4gKHtcbiAgICAgIGJvdW5kczogZHJhZ0NvbmZpZy5nZXRCb3VuZHMoKSxcbiAgICAgIGhlaWdodDogZ2V0T3V0ZXIkMihjb21wLmVsZW1lbnQpLFxuICAgICAgd2lkdGg6IGdldE91dGVyJDEoY29tcC5lbGVtZW50KVxuICAgIH0pO1xuICAgIGNvbnN0IG1vdmUgPSAoY29tcG9uZW50LCBkcmFnQ29uZmlnLCBkcmFnU3RhdGUsIGRyYWdNb2RlLCBldmVudCkgPT4ge1xuICAgICAgY29uc3QgZGVsdGEgPSBkcmFnU3RhdGUudXBkYXRlKGRyYWdNb2RlLCBldmVudCk7XG4gICAgICBjb25zdCBkcmFnU3RhcnREYXRhID0gZHJhZ1N0YXRlLmdldFN0YXJ0RGF0YSgpLmdldE9yVGh1bmsoKCkgPT4gY2FsY1N0YXJ0RGF0YShkcmFnQ29uZmlnLCBjb21wb25lbnQpKTtcbiAgICAgIGRlbHRhLmVhY2goZGx0ID0+IHtcbiAgICAgICAgZHJhZ0J5KGNvbXBvbmVudCwgZHJhZ0NvbmZpZywgZHJhZ1N0YXJ0RGF0YSwgZGx0KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc3RvcCA9IChjb21wb25lbnQsIGJsb2NrZXIsIGRyYWdDb25maWcsIGRyYWdTdGF0ZSkgPT4ge1xuICAgICAgYmxvY2tlci5lYWNoKGRpc2NhcmQpO1xuICAgICAgZHJhZ0NvbmZpZy5zbmFwcy5lYWNoKHNuYXBJbmZvID0+IHtcbiAgICAgICAgc3RvcERyYWcoY29tcG9uZW50LCBzbmFwSW5mbyk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGRyYWdDb25maWcuZ2V0VGFyZ2V0KGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgIGRyYWdTdGF0ZS5yZXNldCgpO1xuICAgICAgZHJhZ0NvbmZpZy5vbkRyb3AoY29tcG9uZW50LCB0YXJnZXQpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlcnMgPSBldmVudHMgPT4gKGRyYWdDb25maWcsIGRyYWdTdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlU3RhcnRTdGF0ZSA9IGNvbXAgPT4ge1xuICAgICAgICBkcmFnU3RhdGUuc2V0U3RhcnREYXRhKGNhbGNTdGFydERhdGEoZHJhZ0NvbmZpZywgY29tcCkpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBkZXJpdmUkMihbXG4gICAgICAgIHJ1biQxKHdpbmRvd1Njcm9sbCgpLCBjb21wID0+IHtcbiAgICAgICAgICBkcmFnU3RhdGUuZ2V0U3RhcnREYXRhKCkuZWFjaCgoKSA9PiB1cGRhdGVTdGFydFN0YXRlKGNvbXApKTtcbiAgICAgICAgfSksXG4gICAgICAgIC4uLmV2ZW50cyhkcmFnQ29uZmlnLCBkcmFnU3RhdGUsIHVwZGF0ZVN0YXJ0U3RhdGUpXG4gICAgICBdKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaW5pdCQzID0gZHJhZ0FwaSA9PiBkZXJpdmUkMihbXG4gICAgICBydW4kMShtb3VzZWRvd24oKSwgZHJhZ0FwaS5mb3JjZURyb3ApLFxuICAgICAgcnVuJDEobW91c2V1cCgpLCBkcmFnQXBpLmRyb3ApLFxuICAgICAgcnVuJDEobW91c2Vtb3ZlKCksIChjb21wLCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICBkcmFnQXBpLm1vdmUoc2ltdWxhdGVkRXZlbnQuZXZlbnQpO1xuICAgICAgfSksXG4gICAgICBydW4kMShtb3VzZW91dCgpLCBkcmFnQXBpLmRlbGF5RHJvcClcbiAgICBdKTtcblxuICAgIGNvbnN0IGdldERhdGEkMSA9IGV2ZW50ID0+IE9wdGlvbmFsLmZyb20oU3VnYXJQb3NpdGlvbihldmVudC54LCBldmVudC55KSk7XG4gICAgY29uc3QgZ2V0RGVsdGEkMSA9IChvbGQsIG51KSA9PiBTdWdhclBvc2l0aW9uKG51LmxlZnQgLSBvbGQubGVmdCwgbnUudG9wIC0gb2xkLnRvcCk7XG5cbiAgICB2YXIgTW91c2VEYXRhID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIGdldERhdGE6IGdldERhdGEkMSxcbiAgICAgICAgZ2V0RGVsdGE6IGdldERlbHRhJDFcbiAgICB9KTtcblxuICAgIGNvbnN0IGV2ZW50cyQzID0gKGRyYWdDb25maWcsIGRyYWdTdGF0ZSwgdXBkYXRlU3RhcnRTdGF0ZSkgPT4gW3J1biQxKG1vdXNlZG93bigpLCAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCByYXcgPSBzaW11bGF0ZWRFdmVudC5ldmVudC5yYXc7XG4gICAgICAgIGlmIChyYXcuYnV0dG9uICE9PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNpbXVsYXRlZEV2ZW50LnN0b3AoKTtcbiAgICAgICAgY29uc3Qgc3RvcCQxID0gKCkgPT4gc3RvcChjb21wb25lbnQsIE9wdGlvbmFsLnNvbWUoYmxvY2tlciksIGRyYWdDb25maWcsIGRyYWdTdGF0ZSk7XG4gICAgICAgIGNvbnN0IGRlbGF5RHJvcCA9IERlbGF5ZWRGdW5jdGlvbihzdG9wJDEsIDIwMCk7XG4gICAgICAgIGNvbnN0IGRyYWdBcGkgPSB7XG4gICAgICAgICAgZHJvcDogc3RvcCQxLFxuICAgICAgICAgIGRlbGF5RHJvcDogZGVsYXlEcm9wLnNjaGVkdWxlLFxuICAgICAgICAgIGZvcmNlRHJvcDogc3RvcCQxLFxuICAgICAgICAgIG1vdmU6IGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGRlbGF5RHJvcC5jYW5jZWwoKTtcbiAgICAgICAgICAgIG1vdmUoY29tcG9uZW50LCBkcmFnQ29uZmlnLCBkcmFnU3RhdGUsIE1vdXNlRGF0YSwgZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYmxvY2tlciA9IGNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQsIGRyYWdDb25maWcuYmxvY2tlckNsYXNzLCBpbml0JDMoZHJhZ0FwaSkpO1xuICAgICAgICBjb25zdCBzdGFydCA9ICgpID0+IHtcbiAgICAgICAgICB1cGRhdGVTdGFydFN0YXRlKGNvbXBvbmVudCk7XG4gICAgICAgICAgaW5zdGlnYXRlKGNvbXBvbmVudCwgYmxvY2tlcik7XG4gICAgICAgIH07XG4gICAgICAgIHN0YXJ0KCk7XG4gICAgICB9KV07XG4gICAgY29uc3Qgc2NoZW1hJDUgPSBbXG4gICAgICAuLi5zY2hlbWEkNixcbiAgICAgIG91dHB1dCQxKCdkcmFnZ2VyJywgeyBoYW5kbGVyczogaGFuZGxlcnMoZXZlbnRzJDMpIH0pXG4gICAgXTtcblxuICAgIGNvbnN0IGluaXQkMiA9IGRyYWdBcGkgPT4gZGVyaXZlJDIoW1xuICAgICAgcnVuJDEodG91Y2hzdGFydCgpLCBkcmFnQXBpLmZvcmNlRHJvcCksXG4gICAgICBydW4kMSh0b3VjaGVuZCgpLCBkcmFnQXBpLmRyb3ApLFxuICAgICAgcnVuJDEodG91Y2hjYW5jZWwoKSwgZHJhZ0FwaS5kcm9wKSxcbiAgICAgIHJ1biQxKHRvdWNobW92ZSgpLCAoY29tcCwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgZHJhZ0FwaS5tb3ZlKHNpbXVsYXRlZEV2ZW50LmV2ZW50KTtcbiAgICAgIH0pXG4gICAgXSk7XG5cbiAgICBjb25zdCBnZXREYXRhRnJvbSA9IHRvdWNoZXMgPT4ge1xuICAgICAgY29uc3QgdG91Y2ggPSB0b3VjaGVzWzBdO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoU3VnYXJQb3NpdGlvbih0b3VjaC5jbGllbnRYLCB0b3VjaC5jbGllbnRZKSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXREYXRhID0gZXZlbnQgPT4ge1xuICAgICAgY29uc3QgcmF3ID0gZXZlbnQucmF3O1xuICAgICAgY29uc3QgdG91Y2hlcyA9IHJhdy50b3VjaGVzO1xuICAgICAgcmV0dXJuIHRvdWNoZXMubGVuZ3RoID09PSAxID8gZ2V0RGF0YUZyb20odG91Y2hlcykgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXREZWx0YSA9IChvbGQsIG51KSA9PiBTdWdhclBvc2l0aW9uKG51LmxlZnQgLSBvbGQubGVmdCwgbnUudG9wIC0gb2xkLnRvcCk7XG5cbiAgICB2YXIgVG91Y2hEYXRhID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIGdldERhdGE6IGdldERhdGEsXG4gICAgICAgIGdldERlbHRhOiBnZXREZWx0YVxuICAgIH0pO1xuXG4gICAgY29uc3QgZXZlbnRzJDIgPSAoZHJhZ0NvbmZpZywgZHJhZ1N0YXRlLCB1cGRhdGVTdGFydFN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBibG9ja2VyU2luZ2xldG9uID0gdmFsdWUkMigpO1xuICAgICAgY29uc3Qgc3RvcEJsb2NraW5nID0gY29tcG9uZW50ID0+IHtcbiAgICAgICAgc3RvcChjb21wb25lbnQsIGJsb2NrZXJTaW5nbGV0b24uZ2V0KCksIGRyYWdDb25maWcsIGRyYWdTdGF0ZSk7XG4gICAgICAgIGJsb2NrZXJTaW5nbGV0b24uY2xlYXIoKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gW1xuICAgICAgICBydW4kMSh0b3VjaHN0YXJ0KCksIChjb21wb25lbnQsIHNpbXVsYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgc2ltdWxhdGVkRXZlbnQuc3RvcCgpO1xuICAgICAgICAgIGNvbnN0IHN0b3AgPSAoKSA9PiBzdG9wQmxvY2tpbmcoY29tcG9uZW50KTtcbiAgICAgICAgICBjb25zdCBkcmFnQXBpID0ge1xuICAgICAgICAgICAgZHJvcDogc3RvcCxcbiAgICAgICAgICAgIGRlbGF5RHJvcDogbm9vcCxcbiAgICAgICAgICAgIGZvcmNlRHJvcDogc3RvcCxcbiAgICAgICAgICAgIG1vdmU6IGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgbW92ZShjb21wb25lbnQsIGRyYWdDb25maWcsIGRyYWdTdGF0ZSwgVG91Y2hEYXRhLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBibG9ja2VyID0gY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCwgZHJhZ0NvbmZpZy5ibG9ja2VyQ2xhc3MsIGluaXQkMihkcmFnQXBpKSk7XG4gICAgICAgICAgYmxvY2tlclNpbmdsZXRvbi5zZXQoYmxvY2tlcik7XG4gICAgICAgICAgY29uc3Qgc3RhcnQgPSAoKSA9PiB7XG4gICAgICAgICAgICB1cGRhdGVTdGFydFN0YXRlKGNvbXBvbmVudCk7XG4gICAgICAgICAgICBpbnN0aWdhdGUoY29tcG9uZW50LCBibG9ja2VyKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHN0YXJ0KCk7XG4gICAgICAgIH0pLFxuICAgICAgICBydW4kMSh0b3VjaG1vdmUoKSwgKGNvbXBvbmVudCwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICBzaW11bGF0ZWRFdmVudC5zdG9wKCk7XG4gICAgICAgICAgbW92ZShjb21wb25lbnQsIGRyYWdDb25maWcsIGRyYWdTdGF0ZSwgVG91Y2hEYXRhLCBzaW11bGF0ZWRFdmVudC5ldmVudCk7XG4gICAgICAgIH0pLFxuICAgICAgICBydW4kMSh0b3VjaGVuZCgpLCAoY29tcG9uZW50LCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgIHNpbXVsYXRlZEV2ZW50LnN0b3AoKTtcbiAgICAgICAgICBzdG9wQmxvY2tpbmcoY29tcG9uZW50KTtcbiAgICAgICAgfSksXG4gICAgICAgIHJ1biQxKHRvdWNoY2FuY2VsKCksIHN0b3BCbG9ja2luZylcbiAgICAgIF07XG4gICAgfTtcbiAgICBjb25zdCBzY2hlbWEkNCA9IFtcbiAgICAgIC4uLnNjaGVtYSQ2LFxuICAgICAgb3V0cHV0JDEoJ2RyYWdnZXInLCB7IGhhbmRsZXJzOiBoYW5kbGVycyhldmVudHMkMikgfSlcbiAgICBdO1xuXG4gICAgY29uc3QgZXZlbnRzJDEgPSAoZHJhZ0NvbmZpZywgZHJhZ1N0YXRlLCB1cGRhdGVTdGFydFN0YXRlKSA9PiBbXG4gICAgICAuLi5ldmVudHMkMyhkcmFnQ29uZmlnLCBkcmFnU3RhdGUsIHVwZGF0ZVN0YXJ0U3RhdGUpLFxuICAgICAgLi4uZXZlbnRzJDIoZHJhZ0NvbmZpZywgZHJhZ1N0YXRlLCB1cGRhdGVTdGFydFN0YXRlKVxuICAgIF07XG4gICAgY29uc3Qgc2NoZW1hJDMgPSBbXG4gICAgICAuLi5zY2hlbWEkNixcbiAgICAgIG91dHB1dCQxKCdkcmFnZ2VyJywgeyBoYW5kbGVyczogaGFuZGxlcnMoZXZlbnRzJDEpIH0pXG4gICAgXTtcblxuICAgIGNvbnN0IG1vdXNlID0gc2NoZW1hJDU7XG4gICAgY29uc3QgdG91Y2ggPSBzY2hlbWEkNDtcbiAgICBjb25zdCBtb3VzZU9yVG91Y2ggPSBzY2hlbWEkMztcblxuICAgIHZhciBEcmFnZ2luZ0JyYW5jaGVzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIG1vdXNlOiBtb3VzZSxcbiAgICAgICAgdG91Y2g6IHRvdWNoLFxuICAgICAgICBtb3VzZU9yVG91Y2g6IG1vdXNlT3JUb3VjaFxuICAgIH0pO1xuXG4gICAgY29uc3QgaW5pdCQxID0gKCkgPT4ge1xuICAgICAgbGV0IHByZXZpb3VzID0gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgbGV0IHN0YXJ0RGF0YSA9IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIGNvbnN0IHJlc2V0ID0gKCkgPT4ge1xuICAgICAgICBwcmV2aW91cyA9IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgc3RhcnREYXRhID0gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZURlbHRhID0gKG1vZGUsIG51KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHByZXZpb3VzLm1hcChvbGQgPT4gbW9kZS5nZXREZWx0YShvbGQsIG51KSk7XG4gICAgICAgIHByZXZpb3VzID0gT3B0aW9uYWwuc29tZShudSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgdXBkYXRlID0gKG1vZGUsIGRyYWdFdmVudCkgPT4gbW9kZS5nZXREYXRhKGRyYWdFdmVudCkuYmluZChudURhdGEgPT4gY2FsY3VsYXRlRGVsdGEobW9kZSwgbnVEYXRhKSk7XG4gICAgICBjb25zdCBzZXRTdGFydERhdGEgPSBkYXRhID0+IHtcbiAgICAgICAgc3RhcnREYXRhID0gT3B0aW9uYWwuc29tZShkYXRhKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRTdGFydERhdGEgPSAoKSA9PiBzdGFydERhdGE7XG4gICAgICBjb25zdCByZWFkU3RhdGUgPSBjb25zdGFudCQxKHt9KTtcbiAgICAgIHJldHVybiBudSQ4KHtcbiAgICAgICAgcmVhZFN0YXRlLFxuICAgICAgICByZXNldCxcbiAgICAgICAgdXBkYXRlLFxuICAgICAgICBnZXRTdGFydERhdGEsXG4gICAgICAgIHNldFN0YXJ0RGF0YVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHZhciBEcmFnU3RhdGUgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgaW5pdDogaW5pdCQxXG4gICAgfSk7XG5cbiAgICBjb25zdCBEcmFnZ2luZyA9IGNyZWF0ZU1vZGVzKHtcbiAgICAgIGJyYW5jaEtleTogJ21vZGUnLFxuICAgICAgYnJhbmNoZXM6IERyYWdnaW5nQnJhbmNoZXMsXG4gICAgICBuYW1lOiAnZHJhZ2dpbmcnLFxuICAgICAgYWN0aXZlOiB7XG4gICAgICAgIGV2ZW50czogKGRyYWdDb25maWcsIGRyYWdTdGF0ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRyYWdnZXIgPSBkcmFnQ29uZmlnLmRyYWdnZXI7XG4gICAgICAgICAgcmV0dXJuIGRyYWdnZXIuaGFuZGxlcnMoZHJhZ0NvbmZpZywgZHJhZ1N0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGV4dHJhOiB7XG4gICAgICAgIHNuYXA6IHNDb25maWcgPT4gKHtcbiAgICAgICAgICBzZW5zb3I6IHNDb25maWcuc2Vuc29yLFxuICAgICAgICAgIHJhbmdlOiBzQ29uZmlnLnJhbmdlLFxuICAgICAgICAgIG91dHB1dDogc0NvbmZpZy5vdXRwdXQsXG4gICAgICAgICAgZXh0cmE6IE9wdGlvbmFsLmZyb20oc0NvbmZpZy5leHRyYSlcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogRHJhZ1N0YXRlLFxuICAgICAgYXBpczogRHJhZ2dpbmdBcGlzXG4gICAgfSk7XG5cbiAgICBjb25zdCBzbmFwV2lkdGggPSA0MDtcbiAgICBjb25zdCBzbmFwT2Zmc2V0ID0gc25hcFdpZHRoIC8gMjtcbiAgICBjb25zdCBjYWxjU25hcCA9IChzZWxlY3Rvck9wdCwgdGQsIHgsIHksIHdpZHRoLCBoZWlnaHQpID0+IHNlbGVjdG9yT3B0LmZvbGQoKCkgPT4gRHJhZ2dpbmcuc25hcCh7XG4gICAgICBzZW5zb3I6IGFic29sdXRlKHggLSBzbmFwT2Zmc2V0LCB5IC0gc25hcE9mZnNldCksXG4gICAgICByYW5nZTogU3VnYXJQb3NpdGlvbih3aWR0aCwgaGVpZ2h0KSxcbiAgICAgIG91dHB1dDogYWJzb2x1dGUoT3B0aW9uYWwuc29tZSh4KSwgT3B0aW9uYWwuc29tZSh5KSksXG4gICAgICBleHRyYTogeyB0ZCB9XG4gICAgfSksIHNlbGVjdG9ySGFuZGxlID0+IHtcbiAgICAgIGNvbnN0IHNlbnNvckxlZnQgPSB4IC0gc25hcE9mZnNldDtcbiAgICAgIGNvbnN0IHNlbnNvclRvcCA9IHkgLSBzbmFwT2Zmc2V0O1xuICAgICAgY29uc3Qgc2Vuc29yV2lkdGggPSBzbmFwV2lkdGg7XG4gICAgICBjb25zdCBzZW5zb3JIZWlnaHQgPSBzbmFwV2lkdGg7XG4gICAgICBjb25zdCByZWN0ID0gc2VsZWN0b3JIYW5kbGUuZWxlbWVudC5kb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICByZXR1cm4gRHJhZ2dpbmcuc25hcCh7XG4gICAgICAgIHNlbnNvcjogYWJzb2x1dGUoc2Vuc29yTGVmdCwgc2Vuc29yVG9wKSxcbiAgICAgICAgcmFuZ2U6IFN1Z2FyUG9zaXRpb24oc2Vuc29yV2lkdGgsIHNlbnNvckhlaWdodCksXG4gICAgICAgIG91dHB1dDogYWJzb2x1dGUoT3B0aW9uYWwuc29tZSh4IC0gcmVjdC53aWR0aCAvIDIpLCBPcHRpb25hbC5zb21lKHkgLSByZWN0LmhlaWdodCAvIDIpKSxcbiAgICAgICAgZXh0cmE6IHsgdGQgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0U25hcHNDb25maWcgPSAoZ2V0U25hcFBvaW50cywgY2VsbCwgb25DaGFuZ2UpID0+IHtcbiAgICAgIGNvbnN0IGlzU2FtZUNlbGwgPSAoY2VsbE9wdCwgdGQpID0+IGNlbGxPcHQuZXhpc3RzKGN1cnJlbnRUZCA9PiBlcShjdXJyZW50VGQsIHRkKSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBnZXRTbmFwUG9pbnRzLFxuICAgICAgICBsZWZ0QXR0cjogJ2RhdGEtZHJhZy1sZWZ0JyxcbiAgICAgICAgdG9wQXR0cjogJ2RhdGEtZHJhZy10b3AnLFxuICAgICAgICBvblNlbnNvcjogKGNvbXBvbmVudCwgZXh0cmEpID0+IHtcbiAgICAgICAgICBjb25zdCB0ZCA9IGV4dHJhLnRkO1xuICAgICAgICAgIGlmICghaXNTYW1lQ2VsbChjZWxsLmdldCgpLCB0ZCkpIHtcbiAgICAgICAgICAgIGNlbGwuc2V0KHRkKTtcbiAgICAgICAgICAgIG9uQ2hhbmdlKHRkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG11c3RTbmFwOiB0cnVlXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlU2VsZWN0b3IgPSBzbmFwcyA9PiByZWNvcmQoQnV0dG9uLnNrZXRjaCh7XG4gICAgICBkb206IHtcbiAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgY2xhc3NlczogWyd0b3gtc2VsZWN0b3InXVxuICAgICAgfSxcbiAgICAgIGJ1dHRvbkJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgRHJhZ2dpbmcuY29uZmlnKHtcbiAgICAgICAgICBtb2RlOiAnbW91c2VPclRvdWNoJyxcbiAgICAgICAgICBibG9ja2VyQ2xhc3M6ICdibG9ja2VyJyxcbiAgICAgICAgICBzbmFwc1xuICAgICAgICB9KSxcbiAgICAgICAgVW5zZWxlY3RpbmcuY29uZmlnKHt9KVxuICAgICAgXSksXG4gICAgICBldmVudE9yZGVyOiB7XG4gICAgICAgIG1vdXNlZG93bjogW1xuICAgICAgICAgICdkcmFnZ2luZycsXG4gICAgICAgICAgJ2FsbG95LmJhc2UuYmVoYXZpb3VyJ1xuICAgICAgICBdLFxuICAgICAgICB0b3VjaHN0YXJ0OiBbXG4gICAgICAgICAgJ2RyYWdnaW5nJyxcbiAgICAgICAgICAnYWxsb3kuYmFzZS5iZWhhdmlvdXInXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9KSk7XG4gICAgY29uc3Qgc2V0dXAkNCA9IChlZGl0b3IsIHNpbmspID0+IHtcbiAgICAgIGNvbnN0IHRsVGRzID0gQ2VsbChbXSk7XG4gICAgICBjb25zdCBiclRkcyA9IENlbGwoW10pO1xuICAgICAgY29uc3QgaXNWaXNpYmxlID0gQ2VsbChmYWxzZSk7XG4gICAgICBjb25zdCBzdGFydENlbGwgPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBmaW5pc2hDZWxsID0gdmFsdWUkMigpO1xuICAgICAgY29uc3QgZ2V0VG9wTGVmdFNuYXAgPSB0ZCA9PiB7XG4gICAgICAgIGNvbnN0IGJveCA9IGFic29sdXRlJDIodGQpO1xuICAgICAgICByZXR1cm4gY2FsY1NuYXAobWVtVG9wTGVmdC5nZXRPcHQoc2luayksIHRkLCBib3gueCwgYm94LnksIGJveC53aWR0aCwgYm94LmhlaWdodCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0VG9wTGVmdFNuYXBzID0gKCkgPT4gbWFwJDIodGxUZHMuZ2V0KCksIHRkID0+IGdldFRvcExlZnRTbmFwKHRkKSk7XG4gICAgICBjb25zdCBnZXRCb3R0b21SaWdodFNuYXAgPSB0ZCA9PiB7XG4gICAgICAgIGNvbnN0IGJveCA9IGFic29sdXRlJDIodGQpO1xuICAgICAgICByZXR1cm4gY2FsY1NuYXAobWVtQm90dG9tUmlnaHQuZ2V0T3B0KHNpbmspLCB0ZCwgYm94LnJpZ2h0LCBib3guYm90dG9tLCBib3gud2lkdGgsIGJveC5oZWlnaHQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldEJvdHRvbVJpZ2h0U25hcHMgPSAoKSA9PiBtYXAkMihiclRkcy5nZXQoKSwgdGQgPT4gZ2V0Qm90dG9tUmlnaHRTbmFwKHRkKSk7XG4gICAgICBjb25zdCB0b3BMZWZ0U25hcHMgPSBnZXRTbmFwc0NvbmZpZyhnZXRUb3BMZWZ0U25hcHMsIHN0YXJ0Q2VsbCwgc3RhcnQgPT4ge1xuICAgICAgICBmaW5pc2hDZWxsLmdldCgpLmVhY2goZmluaXNoID0+IHtcbiAgICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ1RhYmxlU2VsZWN0b3JDaGFuZ2UnLCB7XG4gICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgIGZpbmlzaFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYm90dG9tUmlnaHRTbmFwcyA9IGdldFNuYXBzQ29uZmlnKGdldEJvdHRvbVJpZ2h0U25hcHMsIGZpbmlzaENlbGwsIGZpbmlzaCA9PiB7XG4gICAgICAgIHN0YXJ0Q2VsbC5nZXQoKS5lYWNoKHN0YXJ0ID0+IHtcbiAgICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ1RhYmxlU2VsZWN0b3JDaGFuZ2UnLCB7XG4gICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgIGZpbmlzaFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbWVtVG9wTGVmdCA9IGNyZWF0ZVNlbGVjdG9yKHRvcExlZnRTbmFwcyk7XG4gICAgICBjb25zdCBtZW1Cb3R0b21SaWdodCA9IGNyZWF0ZVNlbGVjdG9yKGJvdHRvbVJpZ2h0U25hcHMpO1xuICAgICAgY29uc3QgdG9wTGVmdCA9IGJ1aWxkJDEobWVtVG9wTGVmdC5hc1NwZWMoKSk7XG4gICAgICBjb25zdCBib3R0b21SaWdodCA9IGJ1aWxkJDEobWVtQm90dG9tUmlnaHQuYXNTcGVjKCkpO1xuICAgICAgY29uc3Qgc2hvd09ySGlkZUhhbmRsZSA9IChzZWxlY3RvciwgY2VsbCwgaXNBYm92ZSwgaXNCZWxvdykgPT4ge1xuICAgICAgICBjb25zdCBjZWxsUmVjdCA9IGNlbGwuZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICByZW1vdmUkNihzZWxlY3Rvci5lbGVtZW50LCAnZGlzcGxheScpO1xuICAgICAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IGRlZmF1bHRWaWV3KFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpKS5kb20uaW5uZXJIZWlnaHQ7XG4gICAgICAgIGNvbnN0IGFib3ZlVmlld3BvcnQgPSBpc0Fib3ZlKGNlbGxSZWN0KTtcbiAgICAgICAgY29uc3QgYmVsb3dWaWV3cG9ydCA9IGlzQmVsb3coY2VsbFJlY3QsIHZpZXdwb3J0SGVpZ2h0KTtcbiAgICAgICAgaWYgKGFib3ZlVmlld3BvcnQgfHwgYmVsb3dWaWV3cG9ydCkge1xuICAgICAgICAgIHNldCQ4KHNlbGVjdG9yLmVsZW1lbnQsICdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNuYXBUbyA9IChzZWxlY3RvciwgY2VsbCwgZ2V0U25hcENvbmZpZywgcG9zKSA9PiB7XG4gICAgICAgIGNvbnN0IHNuYXAgPSBnZXRTbmFwQ29uZmlnKGNlbGwpO1xuICAgICAgICBEcmFnZ2luZy5zbmFwVG8oc2VsZWN0b3IsIHNuYXApO1xuICAgICAgICBjb25zdCBpc0Fib3ZlID0gcmVjdCA9PiByZWN0W3Bvc10gPCAwO1xuICAgICAgICBjb25zdCBpc0JlbG93ID0gKHJlY3QsIHZpZXdwb3J0SGVpZ2h0KSA9PiByZWN0W3Bvc10gPiB2aWV3cG9ydEhlaWdodDtcbiAgICAgICAgc2hvd09ySGlkZUhhbmRsZShzZWxlY3RvciwgY2VsbCwgaXNBYm92ZSwgaXNCZWxvdyk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc25hcFRvcExlZnQgPSBjZWxsID0+IHNuYXBUbyh0b3BMZWZ0LCBjZWxsLCBnZXRUb3BMZWZ0U25hcCwgJ3RvcCcpO1xuICAgICAgY29uc3Qgc25hcExhc3RUb3BMZWZ0ID0gKCkgPT4gc3RhcnRDZWxsLmdldCgpLmVhY2goc25hcFRvcExlZnQpO1xuICAgICAgY29uc3Qgc25hcEJvdHRvbVJpZ2h0ID0gY2VsbCA9PiBzbmFwVG8oYm90dG9tUmlnaHQsIGNlbGwsIGdldEJvdHRvbVJpZ2h0U25hcCwgJ2JvdHRvbScpO1xuICAgICAgY29uc3Qgc25hcExhc3RCb3R0b21SaWdodCA9ICgpID0+IGZpbmlzaENlbGwuZ2V0KCkuZWFjaChzbmFwQm90dG9tUmlnaHQpO1xuICAgICAgaWYgKGRldGVjdCQyKCkuZGV2aWNlVHlwZS5pc1RvdWNoKCkpIHtcbiAgICAgICAgZWRpdG9yLm9uKCdUYWJsZVNlbGVjdGlvbkNoYW5nZScsIGUgPT4ge1xuICAgICAgICAgIGlmICghaXNWaXNpYmxlLmdldCgpKSB7XG4gICAgICAgICAgICBhdHRhY2goc2luaywgdG9wTGVmdCk7XG4gICAgICAgICAgICBhdHRhY2goc2luaywgYm90dG9tUmlnaHQpO1xuICAgICAgICAgICAgaXNWaXNpYmxlLnNldCh0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RhcnRDZWxsLnNldChlLnN0YXJ0KTtcbiAgICAgICAgICBmaW5pc2hDZWxsLnNldChlLmZpbmlzaCk7XG4gICAgICAgICAgZS5vdGhlckNlbGxzLmVhY2gob3RoZXJDZWxscyA9PiB7XG4gICAgICAgICAgICB0bFRkcy5zZXQob3RoZXJDZWxscy51cE9yTGVmdENlbGxzKTtcbiAgICAgICAgICAgIGJyVGRzLnNldChvdGhlckNlbGxzLmRvd25PclJpZ2h0Q2VsbHMpO1xuICAgICAgICAgICAgc25hcFRvcExlZnQoZS5zdGFydCk7XG4gICAgICAgICAgICBzbmFwQm90dG9tUmlnaHQoZS5maW5pc2gpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLm9uKCdSZXNpemVFZGl0b3IgUmVzaXplV2luZG93IFNjcm9sbENvbnRlbnQnLCAoKSA9PiB7XG4gICAgICAgICAgc25hcExhc3RUb3BMZWZ0KCk7XG4gICAgICAgICAgc25hcExhc3RCb3R0b21SaWdodCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLm9uKCdUYWJsZVNlbGVjdGlvbkNsZWFyJywgKCkgPT4ge1xuICAgICAgICAgIGlmIChpc1Zpc2libGUuZ2V0KCkpIHtcbiAgICAgICAgICAgIGRldGFjaCh0b3BMZWZ0KTtcbiAgICAgICAgICAgIGRldGFjaChib3R0b21SaWdodCk7XG4gICAgICAgICAgICBpc1Zpc2libGUuc2V0KGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RhcnRDZWxsLmNsZWFyKCk7XG4gICAgICAgICAgZmluaXNoQ2VsbC5jbGVhcigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIExvZ28gPSBcIjxzdmcgd2lkdGg9XFxcIjUwcHhcXFwiIGhlaWdodD1cXFwiMTZweFxcXCIgdmlld0JveD1cXFwiMCAwIDUwIDE2XFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPlxcbiAgPHBhdGggZmlsbC1ydWxlPVxcXCJldmVub2RkXFxcIiBjbGlwLXJ1bGU9XFxcImV2ZW5vZGRcXFwiIGQ9XFxcIk0xMC4xNDMgMGMyLjYwOC4wMTUgNS4xODYgMi4xNzggNS4xODYgNS4zMzEgMCAwIC4wNzcgMy44MTItLjA4NCA0Ljg3LS4zNjEgMi40MS0yLjE2NCA0LjA3NC00LjY1IDQuNDk2LTEuNDUzLjI4NC0yLjUyMy40OS0zLjIxMi42MjMtLjM3My4wNzEtLjYzNC4xMjItLjc4NS4xNTItLjE4NC4wMzgtLjk5Ny4xNDUtMS4zNS4xNDUtMi43MzIgMC01LjIxLTIuMDQtNS4yNDgtNS4zMyAwIDAgMC0zLjUxNC4wMy00LjQ0Mi4wOTMtMi40IDEuNzU4LTQuMzQyIDQuOTI2LTQuOTYzIDAgMCAzLjg3NS0uNzUyIDQuMDM2LS43ODIuMzY4LS4wNy43NzUtLjEgMS4xNS0uMVptMS44MjYgMi44TDUuODMgMy45ODl2Mi4zOTNsLTIuNDU1LjQ3NXY1Ljk2OGw2LjEzNy0xLjE4OVY5LjI0M2wyLjQ1Ni0uNDc2VjIuOFpNNS44MyA2LjM4MmwzLjY4Mi0uNzEzdjMuNTc0bC0zLjY4Mi43MTNWNi4zODJabTI3LjE3My0xLjY0LS4wODQtMS4wNjZoLTIuMjI2djkuMTMyaDIuNDU2VjcuNzQzYy0uMDA4LTEuMTUxLjk5OC0yLjA2NCAyLjE0OS0yLjA3MiAxLjE1LS4wMDggMS45ODcuOTIgMS45OTUgMi4wNzJ2NS4wNjVoMi40NTVWNy4zNTljLS4wMTUtMi4xOC0xLjY1Ny0zLjkyOS0zLjgzNy0zLjkxM2EzLjk5MyAzLjk5MyAwIDAgMC0yLjkwOCAxLjI5NlptLTYuMy00LjI2NkwyOS4xNiAwdjIuMzg3bC0yLjQ1Ni40NzVWLjQ3NlptMCAzLjJ2OS4xMzJoMi40NTZWMy42NzZoLTIuNDU2Wm0xOC4xNzkgMTEuNzg3TDQ5LjExIDMuNjc2SDQ2LjU4bC0xLjYxMiA0LjUyNy0uNDYgMS4zODItLjM4NC0xLjM4Mi0xLjYxMS00LjUyN0gzOS45OGwzLjMgOS4xMzJMNDIuMTUgMTZsMi43MzItLjUzN1pNMjIuODY3IDkuNzM4YzAgLjc1Mi41NjggMS4wNzUuOTIxIDEuMDc1LjM1MyAwIC42NjgtLjA0Ny45OTgtLjE1NGwuNTM3IDEuNzY1Yy0uMjMuMTU0LS45Mi41MzctMi4yMjUuNTM3LTEuMzA1IDAtMi42NTUtLjk5Ny0yLjY4Ni0yLjY4NmExMzYuODc3IDEzNi44NzcgMCAwIDEgMC00LjM3NEgxOC44VjMuNjc2aDEuNjEydi0xLjk4bDIuNDU1LS40NzZ2Mi40NTZoMi4zMDJWNS45aC0yLjMwMnYzLjgzN1pcXFwiLz5cXG48L3N2Zz5cXG5cIjtcblxuICAgIGNvbnN0IGlzSGlkZGVuID0gZWxtID0+IGVsbS5ub2RlTmFtZSA9PT0gJ0JSJyB8fCAhIWVsbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWNlLWJvZ3VzJykgfHwgZWxtLmdldEF0dHJpYnV0ZSgnZGF0YS1tY2UtdHlwZScpID09PSAnYm9va21hcmsnO1xuICAgIGNvbnN0IHJlbmRlckVsZW1lbnRQYXRoID0gKGVkaXRvciwgc2V0dGluZ3MsIHByb3ZpZGVyc0JhY2tzdGFnZSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgZGVsaW1pdGVyID0gKF9hID0gc2V0dGluZ3MuZGVsaW1pdGVyKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnXFx1MjAzQSc7XG4gICAgICBjb25zdCByZW5kZXJFbGVtZW50ID0gKG5hbWUsIGVsZW1lbnQsIGluZGV4KSA9PiBCdXR0b24uc2tldGNoKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1zdGF0dXNiYXJfX3BhdGgtaXRlbSddLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICdkYXRhLWluZGV4JzogaW5kZXgsXG4gICAgICAgICAgICAnYXJpYS1sZXZlbCc6IGluZGV4ICsgMVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW3RleHQkMihuYW1lKV0sXG4gICAgICAgIGFjdGlvbjogX2J0biA9PiB7XG4gICAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3QoZWxlbWVudCk7XG4gICAgICAgICAgZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbkJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBEaXNhYmxpbmdDb25maWdzLmJ1dHRvbihwcm92aWRlcnNCYWNrc3RhZ2UuaXNEaXNhYmxlZCksXG4gICAgICAgICAgcmVjZWl2aW5nQ29uZmlnKClcbiAgICAgICAgXSlcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVuZGVyRGl2aWRlciA9ICgpID0+ICh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtc3RhdHVzYmFyX19wYXRoLWRpdmlkZXInXSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7ICdhcmlhLWhpZGRlbic6IHRydWUgfVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbdGV4dCQyKGAgJHsgZGVsaW1pdGVyIH0gYCldXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlbmRlclBhdGhEYXRhID0gZGF0YSA9PiBmb2xkbChkYXRhLCAoYWNjLCBwYXRoLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gcmVuZGVyRWxlbWVudChwYXRoLm5hbWUsIHBhdGguZWxlbWVudCwgaW5kZXgpO1xuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChbZWxlbWVudF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBhY2MuY29uY2F0KFtcbiAgICAgICAgICAgIHJlbmRlckRpdmlkZXIoKSxcbiAgICAgICAgICAgIGVsZW1lbnRcbiAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgfSwgW10pO1xuICAgICAgY29uc3QgdXBkYXRlUGF0aCA9IHBhcmVudHMgPT4ge1xuICAgICAgICBjb25zdCBuZXdQYXRoID0gW107XG4gICAgICAgIGxldCBpID0gcGFyZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50ID0gcGFyZW50c1tpXTtcbiAgICAgICAgICBpZiAocGFyZW50Lm5vZGVUeXBlID09PSAxICYmICFpc0hpZGRlbihwYXJlbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gZmlyZVJlc29sdmVOYW1lKGVkaXRvciwgcGFyZW50KTtcbiAgICAgICAgICAgIGlmICghYXJncy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgICAgICBuZXdQYXRoLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IGFyZ3MubmFtZSxcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBwYXJlbnRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYXJncy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3UGF0aDtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LXN0YXR1c2Jhcl9fcGF0aCddLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgcm9sZTogJ25hdmlnYXRpb24nIH1cbiAgICAgICAgfSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgICAgbW9kZTogJ2Zsb3cnLFxuICAgICAgICAgICAgc2VsZWN0b3I6ICdkaXZbcm9sZT1idXR0b25dJ1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIERpc2FibGluZy5jb25maWcoeyBkaXNhYmxlZDogcHJvdmlkZXJzQmFja3N0YWdlLmlzRGlzYWJsZWQgfSksXG4gICAgICAgICAgcmVjZWl2aW5nQ29uZmlnKCksXG4gICAgICAgICAgVGFic3RvcHBpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICBSZXBsYWNpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICBjb25maWcoJ2VsZW1lbnRQYXRoRXZlbnRzJywgW3J1bk9uQXR0YWNoZWQoKGNvbXAsIF9lKSA9PiB7XG4gICAgICAgICAgICAgIGVkaXRvci5zaG9ydGN1dHMuYWRkKCdhbHQrRjExJywgJ2ZvY3VzIHN0YXR1c2JhciBlbGVtZW50cGF0aCcsICgpID0+IEtleWluZy5mb2N1c0luKGNvbXApKTtcbiAgICAgICAgICAgICAgZWRpdG9yLm9uKCdOb2RlQ2hhbmdlJywgZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UGF0aCA9IHVwZGF0ZVBhdGgoZS5wYXJlbnRzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDaGlsZHJlbiA9IG5ld1BhdGgubGVuZ3RoID4gMCA/IHJlbmRlclBhdGhEYXRhKG5ld1BhdGgpIDogW107XG4gICAgICAgICAgICAgICAgUmVwbGFjaW5nLnNldChjb21wLCBuZXdDaGlsZHJlbik7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSldKVxuICAgICAgICBdKSxcbiAgICAgICAgY29tcG9uZW50czogW11cbiAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBSZXNpemVUeXBlcztcbiAgICAoZnVuY3Rpb24gKFJlc2l6ZVR5cGVzKSB7XG4gICAgICBSZXNpemVUeXBlc1tSZXNpemVUeXBlc1snTm9uZSddID0gMF0gPSAnTm9uZSc7XG4gICAgICBSZXNpemVUeXBlc1tSZXNpemVUeXBlc1snQm90aCddID0gMV0gPSAnQm90aCc7XG4gICAgICBSZXNpemVUeXBlc1tSZXNpemVUeXBlc1snVmVydGljYWwnXSA9IDJdID0gJ1ZlcnRpY2FsJztcbiAgICB9KFJlc2l6ZVR5cGVzIHx8IChSZXNpemVUeXBlcyA9IHt9KSkpO1xuICAgIGNvbnN0IGdldERpbWVuc2lvbnMgPSAoZWRpdG9yLCBkZWx0YXMsIHJlc2l6ZVR5cGUsIG9yaWdpbmFsSGVpZ2h0LCBvcmlnaW5hbFdpZHRoKSA9PiB7XG4gICAgICBjb25zdCBkaW1lbnNpb25zID0geyBoZWlnaHQ6IGNhbGNDYXBwZWRTaXplKG9yaWdpbmFsSGVpZ2h0ICsgZGVsdGFzLnRvcCwgZ2V0TWluSGVpZ2h0T3B0aW9uKGVkaXRvciksIGdldE1heEhlaWdodE9wdGlvbihlZGl0b3IpKSB9O1xuICAgICAgaWYgKHJlc2l6ZVR5cGUgPT09IFJlc2l6ZVR5cGVzLkJvdGgpIHtcbiAgICAgICAgZGltZW5zaW9ucy53aWR0aCA9IGNhbGNDYXBwZWRTaXplKG9yaWdpbmFsV2lkdGggKyBkZWx0YXMubGVmdCwgZ2V0TWluV2lkdGhPcHRpb24oZWRpdG9yKSwgZ2V0TWF4V2lkdGhPcHRpb24oZWRpdG9yKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGltZW5zaW9ucztcbiAgICB9O1xuICAgIGNvbnN0IHJlc2l6ZSA9IChlZGl0b3IsIGRlbHRhcywgcmVzaXplVHlwZSkgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldENvbnRhaW5lcigpKTtcbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSBnZXREaW1lbnNpb25zKGVkaXRvciwgZGVsdGFzLCByZXNpemVUeXBlLCBnZXQkZChjb250YWluZXIpLCBnZXQkYyhjb250YWluZXIpKTtcbiAgICAgIGVhY2goZGltZW5zaW9ucywgKHZhbCwgZGltKSA9PiB7XG4gICAgICAgIGlmIChpc051bWJlcih2YWwpKSB7XG4gICAgICAgICAgc2V0JDgoY29udGFpbmVyLCBkaW0sIG51bVRvUHgodmFsKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZmlyZVJlc2l6ZUVkaXRvcihlZGl0b3IpO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRSZXNpemVUeXBlID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHJlc2l6ZSA9IGdldFJlc2l6ZShlZGl0b3IpO1xuICAgICAgaWYgKHJlc2l6ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIFJlc2l6ZVR5cGVzLk5vbmU7XG4gICAgICB9IGVsc2UgaWYgKHJlc2l6ZSA9PT0gJ2JvdGgnKSB7XG4gICAgICAgIHJldHVybiBSZXNpemVUeXBlcy5Cb3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFJlc2l6ZVR5cGVzLlZlcnRpY2FsO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qga2V5Ym9hcmRIYW5kbGVyID0gKGVkaXRvciwgcmVzaXplVHlwZSwgeCwgeSkgPT4ge1xuICAgICAgY29uc3Qgc2NhbGUgPSAyMDtcbiAgICAgIGNvbnN0IGRlbHRhID0gU3VnYXJQb3NpdGlvbih4ICogc2NhbGUsIHkgKiBzY2FsZSk7XG4gICAgICByZXNpemUoZWRpdG9yLCBkZWx0YSwgcmVzaXplVHlwZSk7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlclJlc2l6ZUhhbmRsZXIgPSAoZWRpdG9yLCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IHJlc2l6ZVR5cGUgPSBnZXRSZXNpemVUeXBlKGVkaXRvcik7XG4gICAgICBpZiAocmVzaXplVHlwZSA9PT0gUmVzaXplVHlwZXMuTm9uZSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzaXplTGFiZWwgPSByZXNpemVUeXBlID09PSBSZXNpemVUeXBlcy5Cb3RoID8gJ1ByZXNzIHRoZSBhcnJvdyBrZXlzIHRvIHJlc2l6ZSB0aGUgZWRpdG9yLicgOiAnUHJlc3MgdGhlIFVwIGFuZCBEb3duIGFycm93IGtleXMgdG8gcmVzaXplIHRoZSBlZGl0b3IuJztcbiAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHJlbmRlciQzKCdyZXNpemUtaGFuZGxlJywge1xuICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICBjbGFzc2VzOiBbJ3RveC1zdGF0dXNiYXJfX3Jlc2l6ZS1oYW5kbGUnXSxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICd0aXRsZSc6IHByb3ZpZGVyc0JhY2tzdGFnZS50cmFuc2xhdGUoJ1Jlc2l6ZScpLFxuICAgICAgICAgICdhcmlhLWxhYmVsJzogcHJvdmlkZXJzQmFja3N0YWdlLnRyYW5zbGF0ZShyZXNpemVMYWJlbClcbiAgICAgICAgfSxcbiAgICAgICAgYmVoYXZpb3VyczogW1xuICAgICAgICAgIERyYWdnaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBtb2RlOiAnbW91c2UnLFxuICAgICAgICAgICAgcmVwb3NpdGlvblRhcmdldDogZmFsc2UsXG4gICAgICAgICAgICBvbkRyYWc6IChfY29tcCwgX3RhcmdldCwgZGVsdGEpID0+IHJlc2l6ZShlZGl0b3IsIGRlbHRhLCByZXNpemVUeXBlKSxcbiAgICAgICAgICAgIGJsb2NrZXJDbGFzczogJ3RveC1ibG9ja2VyJ1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgICAgbW9kZTogJ3NwZWNpYWwnLFxuICAgICAgICAgICAgb25MZWZ0OiAoKSA9PiBrZXlib2FyZEhhbmRsZXIoZWRpdG9yLCByZXNpemVUeXBlLCAtMSwgMCksXG4gICAgICAgICAgICBvblJpZ2h0OiAoKSA9PiBrZXlib2FyZEhhbmRsZXIoZWRpdG9yLCByZXNpemVUeXBlLCAxLCAwKSxcbiAgICAgICAgICAgIG9uVXA6ICgpID0+IGtleWJvYXJkSGFuZGxlcihlZGl0b3IsIHJlc2l6ZVR5cGUsIDAsIC0xKSxcbiAgICAgICAgICAgIG9uRG93bjogKCkgPT4ga2V5Ym9hcmRIYW5kbGVyKGVkaXRvciwgcmVzaXplVHlwZSwgMCwgMSlcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBUYWJzdG9wcGluZy5jb25maWcoe30pLFxuICAgICAgICAgIEZvY3VzaW5nLmNvbmZpZyh7fSlcbiAgICAgICAgXVxuICAgICAgfSwgcHJvdmlkZXJzQmFja3N0YWdlLmljb25zKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlcldvcmRDb3VudCA9IChlZGl0b3IsIHByb3ZpZGVyc0JhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgcmVwbGFjZUNvdW50VGV4dCA9IChjb21wLCBjb3VudCwgbW9kZSkgPT4gUmVwbGFjaW5nLnNldChjb21wLCBbdGV4dCQyKHByb3ZpZGVyc0JhY2tzdGFnZS50cmFuc2xhdGUoW1xuICAgICAgICAgICd7MH0gJyArIG1vZGUsXG4gICAgICAgICAgY291bnRbbW9kZV1cbiAgICAgICAgXSkpXSk7XG4gICAgICByZXR1cm4gQnV0dG9uLnNrZXRjaCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2J1dHRvbicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtc3RhdHVzYmFyX193b3JkY291bnQnXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXSxcbiAgICAgICAgYnV0dG9uQmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIERpc2FibGluZ0NvbmZpZ3MuYnV0dG9uKHByb3ZpZGVyc0JhY2tzdGFnZS5pc0Rpc2FibGVkKSxcbiAgICAgICAgICByZWNlaXZpbmdDb25maWcoKSxcbiAgICAgICAgICBUYWJzdG9wcGluZy5jb25maWcoe30pLFxuICAgICAgICAgIFJlcGxhY2luZy5jb25maWcoe30pLFxuICAgICAgICAgIFJlcHJlc2VudGluZy5jb25maWcoe1xuICAgICAgICAgICAgc3RvcmU6IHtcbiAgICAgICAgICAgICAgbW9kZTogJ21lbW9yeScsXG4gICAgICAgICAgICAgIGluaXRpYWxWYWx1ZToge1xuICAgICAgICAgICAgICAgIG1vZGU6ICd3b3JkcycsXG4gICAgICAgICAgICAgICAgY291bnQ6IHtcbiAgICAgICAgICAgICAgICAgIHdvcmRzOiAwLFxuICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyczogMFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNvbmZpZygnd29yZGNvdW50LWV2ZW50cycsIFtcbiAgICAgICAgICAgIHJ1bk9uRXhlY3V0ZSQxKGNvbXAgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsID0gUmVwcmVzZW50aW5nLmdldFZhbHVlKGNvbXApO1xuICAgICAgICAgICAgICBjb25zdCBuZXdNb2RlID0gY3VycmVudFZhbC5tb2RlID09PSAnd29yZHMnID8gJ2NoYXJhY3RlcnMnIDogJ3dvcmRzJztcbiAgICAgICAgICAgICAgUmVwcmVzZW50aW5nLnNldFZhbHVlKGNvbXAsIHtcbiAgICAgICAgICAgICAgICBtb2RlOiBuZXdNb2RlLFxuICAgICAgICAgICAgICAgIGNvdW50OiBjdXJyZW50VmFsLmNvdW50XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXBsYWNlQ291bnRUZXh0KGNvbXAsIGN1cnJlbnRWYWwuY291bnQsIG5ld01vZGUpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBydW5PbkF0dGFjaGVkKGNvbXAgPT4ge1xuICAgICAgICAgICAgICBlZGl0b3Iub24oJ3dvcmRDb3VudFVwZGF0ZScsIGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHttb2RlfSA9IFJlcHJlc2VudGluZy5nZXRWYWx1ZShjb21wKTtcbiAgICAgICAgICAgICAgICBSZXByZXNlbnRpbmcuc2V0VmFsdWUoY29tcCwge1xuICAgICAgICAgICAgICAgICAgbW9kZSxcbiAgICAgICAgICAgICAgICAgIGNvdW50OiBlLndvcmRDb3VudFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJlcGxhY2VDb3VudFRleHQoY29tcCwgZS53b3JkQ291bnQsIG1vZGUpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSlcbiAgICAgICAgXSksXG4gICAgICAgIGV2ZW50T3JkZXI6IHtcbiAgICAgICAgICBbZXhlY3V0ZSQ1KCldOiBbXG4gICAgICAgICAgICAnZGlzYWJsaW5nJyxcbiAgICAgICAgICAgICdhbGxveS5iYXNlLmJlaGF2aW91cicsXG4gICAgICAgICAgICAnd29yZGNvdW50LWV2ZW50cydcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJTdGF0dXNiYXIgPSAoZWRpdG9yLCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IHJlbmRlckJyYW5kaW5nID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgdGFnOiAnc3BhbicsXG4gICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1zdGF0dXNiYXJfX2JyYW5kaW5nJ11cbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbXBvbmVudHM6IFt7XG4gICAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICAgIHRhZzogJ2EnLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICdocmVmJzogJ2h0dHBzOi8vd3d3LnRpbnkuY2xvdWQvcG93ZXJlZC1ieS10aW55P3V0bV9jYW1wYWlnbj1lZGl0b3JfcmVmZXJyYWwmdXRtX21lZGl1bT1wb3dlcmVkYnkmdXRtX3NvdXJjZT10aW55bWNlJnV0bV9jb250ZW50PXY2JyxcbiAgICAgICAgICAgICAgICAgICdyZWwnOiAnbm9vcGVuZXInLFxuICAgICAgICAgICAgICAgICAgJ3RhcmdldCc6ICdfYmxhbmsnLFxuICAgICAgICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiBnbG9iYWwkOC50cmFuc2xhdGUoW1xuICAgICAgICAgICAgICAgICAgICAnUG93ZXJlZCBieSB7MH0nLFxuICAgICAgICAgICAgICAgICAgICAnVGlueSdcbiAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbm5lckh0bWw6IExvZ28udHJpbSgpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtGb2N1c2luZy5jb25maWcoe30pXSlcbiAgICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVuZGVySGVscEFjY2Vzc2liaWxpdHkgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNob3J0Y3V0VGV4dCA9IGNvbnZlcnRUZXh0KCdBbHQrMCcpO1xuICAgICAgICBjb25zdCB0ZXh0ID0gYFByZXNzIHswfSBmb3IgaGVscGA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgY2xhc3NlczogWyd0b3gtc3RhdHVzYmFyX19oZWxwLXRleHQnXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcG9uZW50czogW3RleHQkMihnbG9iYWwkOC50cmFuc2xhdGUoW1xuICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICBzaG9ydGN1dFRleHRcbiAgICAgICAgICAgIF0pKV1cbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZW5kZXJSaWdodENvbnRhaW5lciA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IFtdO1xuICAgICAgICBpZiAoZWRpdG9yLmhhc1BsdWdpbignd29yZGNvdW50JykpIHtcbiAgICAgICAgICBjb21wb25lbnRzLnB1c2gocmVuZGVyV29yZENvdW50KGVkaXRvciwgcHJvdmlkZXJzQmFja3N0YWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZUJyYW5kaW5nKGVkaXRvcikpIHtcbiAgICAgICAgICBjb21wb25lbnRzLnB1c2gocmVuZGVyQnJhbmRpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1zdGF0dXNiYXJfX3JpZ2h0LWNvbnRhaW5lciddXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21wb25lbnRzXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0VGV4dENvbXBvbmVudHMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBbXTtcbiAgICAgICAgY29uc3Qgc2hvdWxkUmVuZGVySGVscCA9IHVzZUhlbHBBY2Nlc3NpYmlsaXR5KGVkaXRvcik7XG4gICAgICAgIGNvbnN0IHNob3VsZFJlbmRlckVsZW1lbnRQYXRoID0gdXNlRWxlbWVudFBhdGgoZWRpdG9yKTtcbiAgICAgICAgY29uc3Qgc2hvdWxkUmVuZGVyUmlnaHRDb250YWluZXIgPSB1c2VCcmFuZGluZyhlZGl0b3IpIHx8IGVkaXRvci5oYXNQbHVnaW4oJ3dvcmRjb3VudCcpO1xuICAgICAgICBjb25zdCBnZXRUZXh0Q29tcG9uZW50Q2xhc3NlcyA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBmbGV4U3RhcnQgPSAndG94LXN0YXR1c2Jhcl9fdGV4dC1jb250YWluZXItLWZsZXgtc3RhcnQnO1xuICAgICAgICAgIGNvbnN0IGZsZXhFbmQgPSAndG94LXN0YXR1c2Jhcl9fdGV4dC1jb250YWluZXItLWZsZXgtZW5kJztcbiAgICAgICAgICBjb25zdCBzcGFjZUFyb3VuZCA9ICd0b3gtc3RhdHVzYmFyX190ZXh0LWNvbnRhaW5lci0tc3BhY2UtYXJvdW5kJztcbiAgICAgICAgICBpZiAoc2hvdWxkUmVuZGVySGVscCkge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyM0NvbHVtbnMgPSAndG94LXN0YXR1c2Jhcl9fdGV4dC1jb250YWluZXItMy1jb2xzJztcbiAgICAgICAgICAgIGlmICghc2hvdWxkUmVuZGVyUmlnaHRDb250YWluZXIgJiYgIXNob3VsZFJlbmRlckVsZW1lbnRQYXRoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgY29udGFpbmVyM0NvbHVtbnMsXG4gICAgICAgICAgICAgICAgc3BhY2VBcm91bmRcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaG91bGRSZW5kZXJSaWdodENvbnRhaW5lciAmJiAhc2hvdWxkUmVuZGVyRWxlbWVudFBhdGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBjb250YWluZXIzQ29sdW1ucyxcbiAgICAgICAgICAgICAgICBmbGV4RW5kXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICBjb250YWluZXIzQ29sdW1ucyxcbiAgICAgICAgICAgICAgZmxleFN0YXJ0XG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW3Nob3VsZFJlbmRlclJpZ2h0Q29udGFpbmVyICYmICFzaG91bGRSZW5kZXJFbGVtZW50UGF0aCA/IGZsZXhFbmQgOiBmbGV4U3RhcnRdO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoc2hvdWxkUmVuZGVyRWxlbWVudFBhdGgpIHtcbiAgICAgICAgICBjb21wb25lbnRzLnB1c2gocmVuZGVyRWxlbWVudFBhdGgoZWRpdG9yLCB7fSwgcHJvdmlkZXJzQmFja3N0YWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3VsZFJlbmRlckhlbHApIHtcbiAgICAgICAgICBjb21wb25lbnRzLnB1c2gocmVuZGVySGVscEFjY2Vzc2liaWxpdHkoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3VsZFJlbmRlclJpZ2h0Q29udGFpbmVyKSB7XG4gICAgICAgICAgY29tcG9uZW50cy5wdXNoKHJlbmRlclJpZ2h0Q29udGFpbmVyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wb25lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgICAgICBjbGFzc2VzOiBbXG4gICAgICAgICAgICAgICAgICAndG94LXN0YXR1c2Jhcl9fdGV4dC1jb250YWluZXInLFxuICAgICAgICAgICAgICAgICAgLi4uZ2V0VGV4dENvbXBvbmVudENsYXNzZXMoKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgY29tcG9uZW50c1xuICAgICAgICAgICAgfV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldENvbXBvbmVudHMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRUZXh0Q29tcG9uZW50cygpO1xuICAgICAgICBjb25zdCByZXNpemVIYW5kbGVyID0gcmVuZGVyUmVzaXplSGFuZGxlcihlZGl0b3IsIHByb3ZpZGVyc0JhY2tzdGFnZSk7XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzLmNvbmNhdChyZXNpemVIYW5kbGVyLnRvQXJyYXkoKSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1zdGF0dXNiYXInXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBnZXRDb21wb25lbnRzKClcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGdldExhenlNb3RoZXJzaGlwID0gKGxhYmVsLCBzaW5nbGV0b24pID0+IHNpbmdsZXRvbi5nZXQoKS5nZXRPckRpZShgVUkgZm9yICR7IGxhYmVsIH0gaGFzIG5vdCBiZWVuIHJlbmRlcmVkYCk7XG4gICAgY29uc3Qgc2V0dXAkMyA9IChlZGl0b3IsIHNldHVwRm9yVGhlbWUpID0+IHtcbiAgICAgIGNvbnN0IGlzSW5saW5lID0gZWRpdG9yLmlubGluZTtcbiAgICAgIGNvbnN0IG1vZGUgPSBpc0lubGluZSA/IElubGluZSA6IElmcmFtZTtcbiAgICAgIGNvbnN0IGhlYWRlciA9IGlzU3RpY2t5VG9vbGJhcihlZGl0b3IpID8gU3RpY2t5SGVhZGVyIDogU3RhdGljSGVhZGVyO1xuICAgICAgY29uc3QgbGF6eVVpUmVmcyA9IExhenlVaVJlZmVyZW5jZXMoKTtcbiAgICAgIGNvbnN0IGxhenlNb3RoZXJzaGlwID0gdmFsdWUkMigpO1xuICAgICAgY29uc3QgbGF6eURpYWxvZ01vdGhlcnNoaXAgPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBsYXp5UG9wdXBNb3RoZXJzaGlwID0gdmFsdWUkMigpO1xuICAgICAgY29uc3QgcGxhdGZvcm0gPSBkZXRlY3QkMigpO1xuICAgICAgY29uc3QgaXNUb3VjaCA9IHBsYXRmb3JtLmRldmljZVR5cGUuaXNUb3VjaCgpO1xuICAgICAgY29uc3QgdG91Y2hQbGF0Zm9ybUNsYXNzID0gJ3RveC1wbGF0Zm9ybS10b3VjaCc7XG4gICAgICBjb25zdCBkZXZpY2VDbGFzc2VzID0gaXNUb3VjaCA/IFt0b3VjaFBsYXRmb3JtQ2xhc3NdIDogW107XG4gICAgICBjb25zdCBpc1Rvb2xiYXJCb3R0b20gPSBpc1Rvb2xiYXJMb2NhdGlvbkJvdHRvbShlZGl0b3IpO1xuICAgICAgY29uc3QgdG9vbGJhck1vZGUgPSBnZXRUb29sYmFyTW9kZShlZGl0b3IpO1xuICAgICAgY29uc3QgbWVtQW5jaG9yQmFyID0gcmVjb3JkKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1hbmNob3JiYXInXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG1lbUJvdHRvbUFuY2hvckJhciA9IHJlY29yZCh7XG4gICAgICAgIGRvbToge1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgY2xhc3NlczogWyd0b3gtYm90dG9tLWFuY2hvcmJhciddXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgbGF6eUhlYWRlciA9ICgpID0+IGxhenlVaVJlZnMubWFpblVpLmdldCgpLm1hcCh1aSA9PiB1aS5vdXRlckNvbnRhaW5lcikuYmluZChPdXRlckNvbnRhaW5lci5nZXRIZWFkZXIpO1xuICAgICAgY29uc3QgbGF6eURpYWxvZ1NpbmtSZXN1bHQgPSAoKSA9PiBSZXN1bHQuZnJvbU9wdGlvbihsYXp5VWlSZWZzLmRpYWxvZ1VpLmdldCgpLm1hcCh1aSA9PiB1aS5zaW5rKSwgJ1VJIGhhcyBub3QgYmVlbiByZW5kZXJlZCcpO1xuICAgICAgY29uc3QgbGF6eVBvcHVwU2lua1Jlc3VsdCA9ICgpID0+IFJlc3VsdC5mcm9tT3B0aW9uKGxhenlVaVJlZnMucG9wdXBVaS5nZXQoKS5tYXAodWkgPT4gdWkuc2luayksICcocG9wdXApIFVJIGhhcyBub3QgYmVlbiByZW5kZXJlZCcpO1xuICAgICAgY29uc3QgbGF6eUFuY2hvckJhciA9IGxhenlVaVJlZnMubGF6eUdldEluT3V0ZXJPckRpZSgnYW5jaG9yIGJhcicsIG1lbUFuY2hvckJhci5nZXRPcHQpO1xuICAgICAgY29uc3QgbGF6eUJvdHRvbUFuY2hvckJhciA9IGxhenlVaVJlZnMubGF6eUdldEluT3V0ZXJPckRpZSgnYm90dG9tIGFuY2hvciBiYXInLCBtZW1Cb3R0b21BbmNob3JCYXIuZ2V0T3B0KTtcbiAgICAgIGNvbnN0IGxhenlUb29sYmFyID0gbGF6eVVpUmVmcy5sYXp5R2V0SW5PdXRlck9yRGllKCd0b29sYmFyJywgT3V0ZXJDb250YWluZXIuZ2V0VG9vbGJhcik7XG4gICAgICBjb25zdCBsYXp5VGhyb2JiZXIgPSBsYXp5VWlSZWZzLmxhenlHZXRJbk91dGVyT3JEaWUoJ3Rocm9iYmVyJywgT3V0ZXJDb250YWluZXIuZ2V0VGhyb2JiZXIpO1xuICAgICAgY29uc3QgYmFja3N0YWdlcyA9IGluaXQkNih7XG4gICAgICAgIHBvcHVwOiBsYXp5UG9wdXBTaW5rUmVzdWx0LFxuICAgICAgICBkaWFsb2c6IGxhenlEaWFsb2dTaW5rUmVzdWx0XG4gICAgICB9LCBlZGl0b3IsIGxhenlBbmNob3JCYXIsIGxhenlCb3R0b21BbmNob3JCYXIpO1xuICAgICAgY29uc3QgbWFrZUhlYWRlclBhcnQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZlcnRpY2FsRGlyQXR0cmlidXRlcyA9IHsgYXR0cmlidXRlczogeyBbQXR0cmlidXRlXTogaXNUb29sYmFyQm90dG9tID8gQXR0cmlidXRlVmFsdWUuQm90dG9tVG9Ub3AgOiBBdHRyaWJ1dGVWYWx1ZS5Ub3BUb0JvdHRvbSB9IH07XG4gICAgICAgIGNvbnN0IHBhcnRNZW51YmFyID0gT3V0ZXJDb250YWluZXIucGFydHMubWVudWJhcih7XG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgY2xhc3NlczogWyd0b3gtbWVudWJhciddXG4gICAgICAgICAgfSxcbiAgICAgICAgICBiYWNrc3RhZ2U6IGJhY2tzdGFnZXMucG9wdXAsXG4gICAgICAgICAgb25Fc2NhcGU6ICgpID0+IHtcbiAgICAgICAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBhcnRUb29sYmFyID0gT3V0ZXJDb250YWluZXIucGFydHMudG9vbGJhcih7XG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgY2xhc3NlczogWyd0b3gtdG9vbGJhciddXG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZXRTaW5rOiBiYWNrc3RhZ2VzLnBvcHVwLnNoYXJlZC5nZXRTaW5rLFxuICAgICAgICAgIHByb3ZpZGVyczogYmFja3N0YWdlcy5wb3B1cC5zaGFyZWQucHJvdmlkZXJzLFxuICAgICAgICAgIG9uRXNjYXBlOiAoKSA9PiB7XG4gICAgICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uVG9vbGJhclRvZ2dsZWQ6IHN0YXRlID0+IHtcbiAgICAgICAgICAgIGZpcmVUb2dnbGVUb29sYmFyRHJhd2VyKGVkaXRvciwgc3RhdGUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdHlwZTogdG9vbGJhck1vZGUsXG4gICAgICAgICAgbGF6eVRvb2xiYXIsXG4gICAgICAgICAgbGF6eUhlYWRlcjogKCkgPT4gbGF6eUhlYWRlcigpLmdldE9yRGllKCdDb3VsZCBub3QgZmluZCBoZWFkZXIgZWxlbWVudCcpLFxuICAgICAgICAgIC4uLnZlcnRpY2FsRGlyQXR0cmlidXRlc1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGFydE11bHRpcGxlVG9vbGJhciA9IE91dGVyQ29udGFpbmVyLnBhcnRzWydtdWx0aXBsZS10b29sYmFyJ10oe1xuICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LXRvb2xiYXItb3ZlcmxvcmQnXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJvdmlkZXJzOiBiYWNrc3RhZ2VzLnBvcHVwLnNoYXJlZC5wcm92aWRlcnMsXG4gICAgICAgICAgb25Fc2NhcGU6ICgpID0+IHtcbiAgICAgICAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdHlwZTogdG9vbGJhck1vZGVcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGhhc011bHRpcGxlVG9vbGJhciA9IGlzTXVsdGlwbGVUb29sYmFycyhlZGl0b3IpO1xuICAgICAgICBjb25zdCBoYXNUb29sYmFyID0gaXNUb29sYmFyRW5hYmxlZChlZGl0b3IpO1xuICAgICAgICBjb25zdCBoYXNNZW51YmFyID0gaXNNZW51YmFyRW5hYmxlZChlZGl0b3IpO1xuICAgICAgICBjb25zdCBzaG91bGRIYXZlUHJvbW90aW9uID0gcHJvbW90aW9uRW5hYmxlZChlZGl0b3IpO1xuICAgICAgICBjb25zdCBwYXJ0UHJvbW90aW9uID0gbWFrZVByb21vdGlvbigpO1xuICAgICAgICBjb25zdCBoYXNBbnlDb250ZW50cyA9IGhhc011bHRpcGxlVG9vbGJhciB8fCBoYXNUb29sYmFyIHx8IGhhc01lbnViYXI7XG4gICAgICAgIGNvbnN0IGdldFBhcnRUb29sYmFyID0gKCkgPT4ge1xuICAgICAgICAgIGlmIChoYXNNdWx0aXBsZVRvb2xiYXIpIHtcbiAgICAgICAgICAgIHJldHVybiBbcGFydE11bHRpcGxlVG9vbGJhcl07XG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNUb29sYmFyKSB7XG4gICAgICAgICAgICByZXR1cm4gW3BhcnRUb29sYmFyXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbWVudWJhckNvbGxlY3Rpb24gPSBzaG91bGRIYXZlUHJvbW90aW9uID8gW1xuICAgICAgICAgIHBhcnRQcm9tb3Rpb24sXG4gICAgICAgICAgcGFydE1lbnViYXJcbiAgICAgICAgXSA6IFtwYXJ0TWVudWJhcl07XG4gICAgICAgIHJldHVybiBPdXRlckNvbnRhaW5lci5wYXJ0cy5oZWFkZXIoe1xuICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LWVkaXRvci1oZWFkZXInXS5jb25jYXQoaGFzQW55Q29udGVudHMgPyBbXSA6IFsndG94LWVkaXRvci1oZWFkZXItLWVtcHR5J10pLFxuICAgICAgICAgICAgLi4udmVydGljYWxEaXJBdHRyaWJ1dGVzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21wb25lbnRzOiBmbGF0dGVuKFtcbiAgICAgICAgICAgIGhhc01lbnViYXIgPyBtZW51YmFyQ29sbGVjdGlvbiA6IFtdLFxuICAgICAgICAgICAgZ2V0UGFydFRvb2xiYXIoKSxcbiAgICAgICAgICAgIHVzZUZpeGVkQ29udGFpbmVyKGVkaXRvcikgPyBbXSA6IFttZW1BbmNob3JCYXIuYXNTcGVjKCldXG4gICAgICAgICAgXSksXG4gICAgICAgICAgc3RpY2t5OiBpc1N0aWNreVRvb2xiYXIoZWRpdG9yKSxcbiAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgc2hhcmVkQmFja3N0YWdlOiBiYWNrc3RhZ2VzLnBvcHVwLnNoYXJlZFxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBtYWtlUHJvbW90aW9uID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gT3V0ZXJDb250YWluZXIucGFydHMucHJvbW90aW9uKHtcbiAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1wcm9tb3Rpb24nXVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgbWFrZVNpZGViYXJEZWZpbml0aW9uID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBwYXJ0U29ja2V0ID0gT3V0ZXJDb250YWluZXIucGFydHMuc29ja2V0KHtcbiAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1lZGl0LWFyZWEnXVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBhcnRTaWRlYmFyID0gT3V0ZXJDb250YWluZXIucGFydHMuc2lkZWJhcih7XG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgY2xhc3NlczogWyd0b3gtc2lkZWJhciddXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1zaWRlYmFyLXdyYXAnXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgICAgcGFydFNvY2tldCxcbiAgICAgICAgICAgIHBhcnRTaWRlYmFyXG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlbmRlckRpYWxvZ1VpID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB1aUNvbnRhaW5lciA9IGdldFVpQ29udGFpbmVyKGVkaXRvcik7XG4gICAgICAgIGNvbnN0IGlzR3JpZFVpQ29udGFpbmVyID0gZXEoYm9keSgpLCB1aUNvbnRhaW5lcikgJiYgZ2V0JGUodWlDb250YWluZXIsICdkaXNwbGF5JykgPT09ICdncmlkJztcbiAgICAgICAgY29uc3Qgc2lua1NwZWMgPSB7XG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICAgICAndG94JyxcbiAgICAgICAgICAgICAgJ3RveC1zaWx2ZXItc2luaycsXG4gICAgICAgICAgICAgICd0b3gtdGlueW1jZS1hdXgnXG4gICAgICAgICAgICBdLmNvbmNhdChkZXZpY2VDbGFzc2VzKSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgLi4uZ2xvYmFsJDguaXNSdGwoKSA/IHsgZGlyOiAncnRsJyB9IDoge30gfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1Bvc2l0aW9uaW5nLmNvbmZpZyh7IHVzZUZpeGVkOiAoKSA9PiBoZWFkZXIuaXNEb2NrZWQobGF6eUhlYWRlcikgfSldKVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZWFjdGl2ZVdpZHRoU3BlYyA9IHtcbiAgICAgICAgICBkb206IHsgc3R5bGVzOiB7IHdpZHRoOiBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgJ3B4JyB9IH0sXG4gICAgICAgICAgZXZlbnRzOiBkZXJpdmUkMihbcnVuJDEod2luZG93UmVzaXplKCksIGNvbXAgPT4ge1xuICAgICAgICAgICAgICBzZXQkOChjb21wLmVsZW1lbnQsICd3aWR0aCcsIGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAncHgnKTtcbiAgICAgICAgICAgIH0pXSlcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2luayA9IGJ1aWxkJDEoZGVlcE1lcmdlKHNpbmtTcGVjLCBpc0dyaWRVaUNvbnRhaW5lciA/IHJlYWN0aXZlV2lkdGhTcGVjIDoge30pKTtcbiAgICAgICAgY29uc3QgdWlNb3RoZXJzaGlwID0gdGFrZW92ZXIoc2luayk7XG4gICAgICAgIGxhenlEaWFsb2dNb3RoZXJzaGlwLnNldCh1aU1vdGhlcnNoaXApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNpbmssXG4gICAgICAgICAgbW90aGVyc2hpcDogdWlNb3RoZXJzaGlwXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVuZGVyUG9wdXBVaSA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2lua1NwZWMgPSB7XG4gICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICAgICAndG94JyxcbiAgICAgICAgICAgICAgJ3RveC1zaWx2ZXItc2luaycsXG4gICAgICAgICAgICAgICd0b3gtc2lsdmVyLXBvcHVwLXNpbmsnLFxuICAgICAgICAgICAgICAndG94LXRpbnltY2UtYXV4J1xuICAgICAgICAgICAgXS5jb25jYXQoZGV2aWNlQ2xhc3NlcyksXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IC4uLmdsb2JhbCQ4LmlzUnRsKCkgPyB7IGRpcjogJ3J0bCcgfSA6IHt9IH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtQb3NpdGlvbmluZy5jb25maWcoe1xuICAgICAgICAgICAgICB1c2VGaXhlZDogKCkgPT4gaGVhZGVyLmlzRG9ja2VkKGxhenlIZWFkZXIpLFxuICAgICAgICAgICAgICBnZXRCb3VuZHM6ICgpID0+IHNldHVwRm9yVGhlbWUuZ2V0UG9wdXBTaW5rQm91bmRzKClcbiAgICAgICAgICAgIH0pXSlcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2luayA9IGJ1aWxkJDEoc2lua1NwZWMpO1xuICAgICAgICBjb25zdCB1aU1vdGhlcnNoaXAgPSB0YWtlb3ZlcihzaW5rKTtcbiAgICAgICAgbGF6eVBvcHVwTW90aGVyc2hpcC5zZXQodWlNb3RoZXJzaGlwKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzaW5rLFxuICAgICAgICAgIG1vdGhlcnNoaXA6IHVpTW90aGVyc2hpcFxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlbmRlck1haW5VaSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgcGFydEhlYWRlciA9IG1ha2VIZWFkZXJQYXJ0KCk7XG4gICAgICAgIGNvbnN0IHNpZGViYXJDb250YWluZXIgPSBtYWtlU2lkZWJhckRlZmluaXRpb24oKTtcbiAgICAgICAgY29uc3QgcGFydFRocm9iYmVyID0gT3V0ZXJDb250YWluZXIucGFydHMudGhyb2JiZXIoe1xuICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LXRocm9iYmVyJ11cbiAgICAgICAgICB9LFxuICAgICAgICAgIGJhY2tzdGFnZTogYmFja3N0YWdlcy5wb3B1cFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGFydFZpZXdXcmFwcGVyID0gT3V0ZXJDb250YWluZXIucGFydHMudmlld1dyYXBwZXIoeyBiYWNrc3RhZ2U6IGJhY2tzdGFnZXMucG9wdXAgfSk7XG4gICAgICAgIGNvbnN0IHN0YXR1c2JhciA9IHVzZVN0YXR1c0JhcihlZGl0b3IpICYmICFpc0lubGluZSA/IE9wdGlvbmFsLnNvbWUocmVuZGVyU3RhdHVzYmFyKGVkaXRvciwgYmFja3N0YWdlcy5wb3B1cC5zaGFyZWQucHJvdmlkZXJzKSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIGNvbnN0IGVkaXRvckNvbXBvbmVudHMgPSBmbGF0dGVuKFtcbiAgICAgICAgICBpc1Rvb2xiYXJCb3R0b20gPyBbXSA6IFtwYXJ0SGVhZGVyXSxcbiAgICAgICAgICBpc0lubGluZSA/IFtdIDogW3NpZGViYXJDb250YWluZXJdLFxuICAgICAgICAgIGlzVG9vbGJhckJvdHRvbSA/IFtwYXJ0SGVhZGVyXSA6IFtdXG4gICAgICAgIF0pO1xuICAgICAgICBjb25zdCBlZGl0b3JDb250YWluZXIgPSBPdXRlckNvbnRhaW5lci5wYXJ0cy5lZGl0b3JDb250YWluZXIoe1xuICAgICAgICAgIGNvbXBvbmVudHM6IGZsYXR0ZW4oW1xuICAgICAgICAgICAgZWRpdG9yQ29tcG9uZW50cyxcbiAgICAgICAgICAgIGlzSW5saW5lID8gW10gOiBbXG4gICAgICAgICAgICAgIG1lbUJvdHRvbUFuY2hvckJhci5hc1NwZWMoKSxcbiAgICAgICAgICAgICAgLi4uc3RhdHVzYmFyLnRvQXJyYXkoKVxuICAgICAgICAgICAgXVxuICAgICAgICAgIF0pXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBpc0hpZGRlbiA9IGlzRGlzdHJhY3Rpb25GcmVlKGVkaXRvcik7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgICAgcm9sZTogJ2FwcGxpY2F0aW9uJyxcbiAgICAgICAgICAuLi5nbG9iYWwkOC5pc1J0bCgpID8geyBkaXI6ICdydGwnIH0gOiB7fSxcbiAgICAgICAgICAuLi5pc0hpZGRlbiA/IHsgJ2FyaWEtaGlkZGVuJzogJ3RydWUnIH0gOiB7fVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBvdXRlckNvbnRhaW5lciA9IGJ1aWxkJDEoT3V0ZXJDb250YWluZXIuc2tldGNoKHtcbiAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICBjbGFzc2VzOiBbXG4gICAgICAgICAgICAgICd0b3gnLFxuICAgICAgICAgICAgICAndG94LXRpbnltY2UnXG4gICAgICAgICAgICBdLmNvbmNhdChpc0lubGluZSA/IFsndG94LXRpbnltY2UtaW5saW5lJ10gOiBbXSkuY29uY2F0KGlzVG9vbGJhckJvdHRvbSA/IFsndG94LXRpbnltY2UtLXRvb2xiYXItYm90dG9tJ10gOiBbXSkuY29uY2F0KGRldmljZUNsYXNzZXMpLFxuICAgICAgICAgICAgc3R5bGVzOiB7XG4gICAgICAgICAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAuLi5pc0hpZGRlbiA/IHtcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAnMCcsXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnMCdcbiAgICAgICAgICAgICAgfSA6IHt9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXR0cmlidXRlc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgICAgZWRpdG9yQ29udGFpbmVyLFxuICAgICAgICAgICAgLi4uaXNJbmxpbmUgPyBbXSA6IFtwYXJ0Vmlld1dyYXBwZXJdLFxuICAgICAgICAgICAgcGFydFRocm9iYmVyXG4gICAgICAgICAgXSxcbiAgICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgICByZWNlaXZpbmdDb25maWcoKSxcbiAgICAgICAgICAgIERpc2FibGluZy5jb25maWcoeyBkaXNhYmxlQ2xhc3M6ICd0b3gtdGlueW1jZS0tZGlzYWJsZWQnIH0pLFxuICAgICAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICAgIG1vZGU6ICdjeWNsaWMnLFxuICAgICAgICAgICAgICBzZWxlY3RvcjogJy50b3gtbWVudWJhciwgLnRveC10b29sYmFyLCAudG94LXRvb2xiYXJfX3ByaW1hcnksIC50b3gtdG9vbGJhcl9fb3ZlcmZsb3ctLW9wZW4sIC50b3gtc2lkZWJhcl9fb3ZlcmZsb3ctLW9wZW4sIC50b3gtc3RhdHVzYmFyX19wYXRoLCAudG94LXN0YXR1c2Jhcl9fd29yZGNvdW50LCAudG94LXN0YXR1c2Jhcl9fYnJhbmRpbmcgYSwgLnRveC1zdGF0dXNiYXJfX3Jlc2l6ZS1oYW5kbGUnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0pXG4gICAgICAgIH0pKTtcbiAgICAgICAgY29uc3QgbW90aGVyc2hpcCA9IHRha2VvdmVyKG91dGVyQ29udGFpbmVyKTtcbiAgICAgICAgbGF6eU1vdGhlcnNoaXAuc2V0KG1vdGhlcnNoaXApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1vdGhlcnNoaXAsXG4gICAgICAgICAgb3V0ZXJDb250YWluZXJcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXRFZGl0b3JTaXplID0gb3V0ZXJDb250YWluZXIgPT4ge1xuICAgICAgICBjb25zdCBwYXJzZWRIZWlnaHQgPSBudW1Ub1B4KGdldEhlaWdodFdpdGhGYWxsYmFjayhlZGl0b3IpKTtcbiAgICAgICAgY29uc3QgcGFyc2VkV2lkdGggPSBudW1Ub1B4KGdldFdpZHRoV2l0aEZhbGxiYWNrKGVkaXRvcikpO1xuICAgICAgICBpZiAoIWVkaXRvci5pbmxpbmUpIHtcbiAgICAgICAgICBpZiAoaXNWYWxpZFZhbHVlJDEoJ2RpdicsICd3aWR0aCcsIHBhcnNlZFdpZHRoKSkge1xuICAgICAgICAgICAgc2V0JDgob3V0ZXJDb250YWluZXIuZWxlbWVudCwgJ3dpZHRoJywgcGFyc2VkV2lkdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNWYWxpZFZhbHVlJDEoJ2RpdicsICdoZWlnaHQnLCBwYXJzZWRIZWlnaHQpKSB7XG4gICAgICAgICAgICBzZXQkOChvdXRlckNvbnRhaW5lci5lbGVtZW50LCAnaGVpZ2h0JywgcGFyc2VkSGVpZ2h0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0JDgob3V0ZXJDb250YWluZXIuZWxlbWVudCwgJ2hlaWdodCcsICc0MDBweCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VkSGVpZ2h0O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldHVwU2hvcnRjdXRzQW5kQ29tbWFuZHMgPSBvdXRlckNvbnRhaW5lciA9PiB7XG4gICAgICAgIGVkaXRvci5hZGRTaG9ydGN1dCgnYWx0K0Y5JywgJ2ZvY3VzIG1lbnViYXInLCAoKSA9PiB7XG4gICAgICAgICAgT3V0ZXJDb250YWluZXIuZm9jdXNNZW51YmFyKG91dGVyQ29udGFpbmVyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVkaXRvci5hZGRTaG9ydGN1dCgnYWx0K0YxMCcsICdmb2N1cyB0b29sYmFyJywgKCkgPT4ge1xuICAgICAgICAgIE91dGVyQ29udGFpbmVyLmZvY3VzVG9vbGJhcihvdXRlckNvbnRhaW5lcik7XG4gICAgICAgIH0pO1xuICAgICAgICBlZGl0b3IuYWRkQ29tbWFuZCgnVG9nZ2xlVG9vbGJhckRyYXdlcicsIChfdWksIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnNraXBGb2N1cykge1xuICAgICAgICAgICAgT3V0ZXJDb250YWluZXIudG9nZ2xlVG9vbGJhckRyYXdlcldpdGhvdXRGb2N1c2luZyhvdXRlckNvbnRhaW5lcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIE91dGVyQ29udGFpbmVyLnRvZ2dsZVRvb2xiYXJEcmF3ZXIob3V0ZXJDb250YWluZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVkaXRvci5hZGRRdWVyeVN0YXRlSGFuZGxlcignVG9nZ2xlVG9vbGJhckRyYXdlcicsICgpID0+IE91dGVyQ29udGFpbmVyLmlzVG9vbGJhckRyYXdlclRvZ2dsZWQob3V0ZXJDb250YWluZXIpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZW5kZXJVSVdpdGhSZWZzID0gdWlSZWZzID0+IHtcbiAgICAgICAgY29uc3Qge21haW5VaSwgcG9wdXBVaSwgdWlNb3RoZXJzaGlwc30gPSB1aVJlZnM7XG4gICAgICAgIG1hcCQxKGdldFRvb2xiYXJHcm91cHMoZWRpdG9yKSwgKHRvb2xiYXJHcm91cEJ1dHRvbkNvbmZpZywgbmFtZSkgPT4ge1xuICAgICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRHcm91cFRvb2xiYXJCdXR0b24obmFtZSwgdG9vbGJhckdyb3VwQnV0dG9uQ29uZmlnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHtidXR0b25zLCBtZW51SXRlbXMsIGNvbnRleHRUb29sYmFycywgc2lkZWJhcnMsIHZpZXdzfSA9IGVkaXRvci51aS5yZWdpc3RyeS5nZXRBbGwoKTtcbiAgICAgICAgY29uc3QgdG9vbGJhck9wdCA9IGdldE11bHRpcGxlVG9vbGJhcnNPcHRpb24oZWRpdG9yKTtcbiAgICAgICAgY29uc3QgcmF3VWlDb25maWcgPSB7XG4gICAgICAgICAgbWVudUl0ZW1zLFxuICAgICAgICAgIG1lbnVzOiBnZXRNZW51cyhlZGl0b3IpLFxuICAgICAgICAgIG1lbnViYXI6IGdldE1lbnViYXIoZWRpdG9yKSxcbiAgICAgICAgICB0b29sYmFyOiB0b29sYmFyT3B0LmdldE9yVGh1bmsoKCkgPT4gZ2V0VG9vbGJhcihlZGl0b3IpKSxcbiAgICAgICAgICBhbGxvd1Rvb2xiYXJHcm91cHM6IHRvb2xiYXJNb2RlID09PSBUb29sYmFyTW9kZSQxLmZsb2F0aW5nLFxuICAgICAgICAgIGJ1dHRvbnMsXG4gICAgICAgICAgc2lkZWJhcjogc2lkZWJhcnMsXG4gICAgICAgICAgdmlld3NcbiAgICAgICAgfTtcbiAgICAgICAgc2V0dXBTaG9ydGN1dHNBbmRDb21tYW5kcyhtYWluVWkub3V0ZXJDb250YWluZXIpO1xuICAgICAgICBzZXR1cCRiKGVkaXRvciwgbWFpblVpLm1vdGhlcnNoaXAsIHVpTW90aGVyc2hpcHMpO1xuICAgICAgICBoZWFkZXIuc2V0dXAoZWRpdG9yLCBiYWNrc3RhZ2VzLnBvcHVwLnNoYXJlZCwgbGF6eUhlYWRlcik7XG4gICAgICAgIHNldHVwJDYoZWRpdG9yLCBiYWNrc3RhZ2VzLnBvcHVwKTtcbiAgICAgICAgc2V0dXAkNShlZGl0b3IsIGJhY2tzdGFnZXMucG9wdXAuc2hhcmVkLmdldFNpbmssIGJhY2tzdGFnZXMucG9wdXApO1xuICAgICAgICBzZXR1cCQ4KGVkaXRvcik7XG4gICAgICAgIHNldHVwJDcoZWRpdG9yLCBsYXp5VGhyb2JiZXIsIGJhY2tzdGFnZXMucG9wdXAuc2hhcmVkKTtcbiAgICAgICAgcmVnaXN0ZXIkOShlZGl0b3IsIGNvbnRleHRUb29sYmFycywgcG9wdXBVaS5zaW5rLCB7IGJhY2tzdGFnZTogYmFja3N0YWdlcy5wb3B1cCB9KTtcbiAgICAgICAgc2V0dXAkNChlZGl0b3IsIHBvcHVwVWkuc2luayk7XG4gICAgICAgIGNvbnN0IGVsbSA9IGVkaXRvci5nZXRFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHNldEVkaXRvclNpemUobWFpblVpLm91dGVyQ29udGFpbmVyKTtcbiAgICAgICAgY29uc3QgYXJncyA9IHtcbiAgICAgICAgICB0YXJnZXROb2RlOiBlbG0sXG4gICAgICAgICAgaGVpZ2h0XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBtb2RlLnJlbmRlcihlZGl0b3IsIHVpUmVmcywgcmF3VWlDb25maWcsIGJhY2tzdGFnZXMucG9wdXAsIGFyZ3MpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJldXNlRGlhbG9nVWlGb3JQb3B1VWkgPSBkaWFsb2dVaSA9PiB7XG4gICAgICAgIGxhenlQb3B1cE1vdGhlcnNoaXAuc2V0KGRpYWxvZ1VpLm1vdGhlcnNoaXApO1xuICAgICAgICByZXR1cm4gZGlhbG9nVWk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVuZGVyVUkgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1haW5VaSA9IHJlbmRlck1haW5VaSgpO1xuICAgICAgICBjb25zdCBkaWFsb2dVaSA9IHJlbmRlckRpYWxvZ1VpKCk7XG4gICAgICAgIGNvbnN0IHBvcHVwVWkgPSBpc1NwbGl0VWlNb2RlKGVkaXRvcikgPyByZW5kZXJQb3B1cFVpKCkgOiByZXVzZURpYWxvZ1VpRm9yUG9wdVVpKGRpYWxvZ1VpKTtcbiAgICAgICAgbGF6eVVpUmVmcy5kaWFsb2dVaS5zZXQoZGlhbG9nVWkpO1xuICAgICAgICBsYXp5VWlSZWZzLnBvcHVwVWkuc2V0KHBvcHVwVWkpO1xuICAgICAgICBsYXp5VWlSZWZzLm1haW5VaS5zZXQobWFpblVpKTtcbiAgICAgICAgY29uc3QgdWlSZWZzID0ge1xuICAgICAgICAgIHBvcHVwVWksXG4gICAgICAgICAgZGlhbG9nVWksXG4gICAgICAgICAgbWFpblVpLFxuICAgICAgICAgIHVpTW90aGVyc2hpcHM6IGxhenlVaVJlZnMuZ2V0VWlNb3RoZXJzaGlwcygpXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZW5kZXJVSVdpdGhSZWZzKHVpUmVmcyk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcG9wdXBzOiB7XG4gICAgICAgICAgYmFja3N0YWdlOiBiYWNrc3RhZ2VzLnBvcHVwLFxuICAgICAgICAgIGdldE1vdGhlcnNoaXA6ICgpID0+IGdldExhenlNb3RoZXJzaGlwKCdwb3B1cHMnLCBsYXp5UG9wdXBNb3RoZXJzaGlwKVxuICAgICAgICB9LFxuICAgICAgICBkaWFsb2dzOiB7XG4gICAgICAgICAgYmFja3N0YWdlOiBiYWNrc3RhZ2VzLmRpYWxvZyxcbiAgICAgICAgICBnZXRNb3RoZXJzaGlwOiAoKSA9PiBnZXRMYXp5TW90aGVyc2hpcCgnZGlhbG9ncycsIGxhenlEaWFsb2dNb3RoZXJzaGlwKVxuICAgICAgICB9LFxuICAgICAgICByZW5kZXJVSVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWxsZWRCeSA9IChsYWJlbGxlZEVsZW1lbnQsIGxhYmVsRWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgbGFiZWxJZCA9IGdldE9wdChsYWJlbGxlZEVsZW1lbnQsICdpZCcpLmZvbGQoKCkgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IGdlbmVyYXRlJDYoJ2RpYWxvZy1sYWJlbCcpO1xuICAgICAgICBzZXQkOShsYWJlbEVsZW1lbnQsICdpZCcsIGlkKTtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgfSwgaWRlbnRpdHkpO1xuICAgICAgc2V0JDkobGFiZWxsZWRFbGVtZW50LCAnYXJpYS1sYWJlbGxlZGJ5JywgbGFiZWxJZCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNjaGVtYSQyID0gY29uc3RhbnQkMShbXG4gICAgICByZXF1aXJlZCQxKCdsYXp5U2luaycpLFxuICAgICAgb3B0aW9uJDMoJ2RyYWdCbG9ja0NsYXNzJyksXG4gICAgICBkZWZhdWx0ZWRGdW5jdGlvbignZ2V0Qm91bmRzJywgd2luKSxcbiAgICAgIGRlZmF1bHRlZCgndXNlVGFic3RvcEF0JywgYWx3YXlzKSxcbiAgICAgIGRlZmF1bHRlZCgnZmlyc3RUYWJzdG9wJywgMCksXG4gICAgICBkZWZhdWx0ZWQoJ2V2ZW50T3JkZXInLCB7fSksXG4gICAgICBmaWVsZCgnbW9kYWxCZWhhdmlvdXJzJywgW0tleWluZ10pLFxuICAgICAgb25LZXlib2FyZEhhbmRsZXIoJ29uRXhlY3V0ZScpLFxuICAgICAgb25TdHJpY3RLZXlib2FyZEhhbmRsZXIoJ29uRXNjYXBlJylcbiAgICBdKTtcbiAgICBjb25zdCBiYXNpYyA9IHsgc2tldGNoOiBpZGVudGl0eSB9O1xuICAgIGNvbnN0IHBhcnRzJDIgPSBjb25zdGFudCQxKFtcbiAgICAgIG9wdGlvbmFsKHtcbiAgICAgICAgbmFtZTogJ2RyYWdoYW5kbGUnLFxuICAgICAgICBvdmVycmlkZXM6IChkZXRhaWwsIHNwZWMpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW0RyYWdnaW5nLmNvbmZpZyh7XG4gICAgICAgICAgICAgICAgbW9kZTogJ21vdXNlJyxcbiAgICAgICAgICAgICAgICBnZXRUYXJnZXQ6IGhhbmRsZSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYW5jZXN0b3IoaGFuZGxlLCAnW3JvbGU9XCJkaWFsb2dcIl0nKS5nZXRPcihoYW5kbGUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmxvY2tlckNsYXNzOiBkZXRhaWwuZHJhZ0Jsb2NrQ2xhc3MuZ2V0T3JEaWUobmV3IEVycm9yKCdUaGUgZHJhZyBibG9ja2VyIGNsYXNzIHdhcyBub3Qgc3BlY2lmaWVkIGZvciBhIGRpYWxvZyB3aXRoIGEgZHJhZyBoYW5kbGU6IFxcbicgKyBKU09OLnN0cmluZ2lmeShzcGVjLCBudWxsLCAyKSkubWVzc2FnZSksXG4gICAgICAgICAgICAgICAgZ2V0Qm91bmRzOiBkZXRhaWwuZ2V0RHJhZ0JvdW5kc1xuICAgICAgICAgICAgICB9KV0pXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICByZXF1aXJlZCh7XG4gICAgICAgIHNjaGVtYTogW3JlcXVpcmVkJDEoJ2RvbScpXSxcbiAgICAgICAgbmFtZTogJ3RpdGxlJ1xuICAgICAgfSksXG4gICAgICByZXF1aXJlZCh7XG4gICAgICAgIGZhY3Rvcnk6IGJhc2ljLFxuICAgICAgICBzY2hlbWE6IFtyZXF1aXJlZCQxKCdkb20nKV0sXG4gICAgICAgIG5hbWU6ICdjbG9zZSdcbiAgICAgIH0pLFxuICAgICAgcmVxdWlyZWQoe1xuICAgICAgICBmYWN0b3J5OiBiYXNpYyxcbiAgICAgICAgc2NoZW1hOiBbcmVxdWlyZWQkMSgnZG9tJyldLFxuICAgICAgICBuYW1lOiAnYm9keSdcbiAgICAgIH0pLFxuICAgICAgb3B0aW9uYWwoe1xuICAgICAgICBmYWN0b3J5OiBiYXNpYyxcbiAgICAgICAgc2NoZW1hOiBbcmVxdWlyZWQkMSgnZG9tJyldLFxuICAgICAgICBuYW1lOiAnZm9vdGVyJ1xuICAgICAgfSksXG4gICAgICBleHRlcm5hbCh7XG4gICAgICAgIGZhY3Rvcnk6IHtcbiAgICAgICAgICBza2V0Y2g6IChzcGVjLCBkZXRhaWwpID0+ICh7XG4gICAgICAgICAgICAuLi5zcGVjLFxuICAgICAgICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgICAgICAgY29tcG9uZW50czogZGV0YWlsLmNvbXBvbmVudHNcbiAgICAgICAgICB9KVxuICAgICAgICB9LFxuICAgICAgICBzY2hlbWE6IFtcbiAgICAgICAgICBkZWZhdWx0ZWQoJ2RvbScsIHtcbiAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICBzdHlsZXM6IHtcbiAgICAgICAgICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICAgICAgICAgIGxlZnQ6ICcwcHgnLFxuICAgICAgICAgICAgICB0b3A6ICcwcHgnLFxuICAgICAgICAgICAgICByaWdodDogJzBweCcsXG4gICAgICAgICAgICAgIGJvdHRvbTogJzBweCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBkZWZhdWx0ZWQoJ2NvbXBvbmVudHMnLCBbXSlcbiAgICAgICAgXSxcbiAgICAgICAgbmFtZTogJ2Jsb2NrZXInXG4gICAgICB9KVxuICAgIF0pO1xuXG4gICAgY29uc3QgZmFjdG9yeSQ0ID0gKGRldGFpbCwgY29tcG9uZW50cywgc3BlYywgZXh0ZXJuYWxzKSA9PiB7XG4gICAgICBjb25zdCBkaWFsb2dDb21wID0gdmFsdWUkMigpO1xuICAgICAgY29uc3Qgc2hvd0RpYWxvZyA9IGRpYWxvZyA9PiB7XG4gICAgICAgIGRpYWxvZ0NvbXAuc2V0KGRpYWxvZyk7XG4gICAgICAgIGNvbnN0IHNpbmsgPSBkZXRhaWwubGF6eVNpbmsoZGlhbG9nKS5nZXRPckRpZSgpO1xuICAgICAgICBjb25zdCBleHRlcm5hbEJsb2NrZXIgPSBleHRlcm5hbHMuYmxvY2tlcigpO1xuICAgICAgICBjb25zdCBibG9ja2VyID0gc2luay5nZXRTeXN0ZW0oKS5idWlsZCh7XG4gICAgICAgICAgLi4uZXh0ZXJuYWxCbG9ja2VyLFxuICAgICAgICAgIGNvbXBvbmVudHM6IGV4dGVybmFsQmxvY2tlci5jb21wb25lbnRzLmNvbmNhdChbcHJlbWFkZShkaWFsb2cpXSksXG4gICAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgICAgRm9jdXNpbmcuY29uZmlnKHt9KSxcbiAgICAgICAgICAgIGNvbmZpZygnZGlhbG9nLWJsb2NrZXItZXZlbnRzJywgW3J1bk9uU291cmNlKGZvY3VzaW4oKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIEJsb2NraW5nLmlzQmxvY2tlZChkaWFsb2cpID8gbm9vcCgpIDogS2V5aW5nLmZvY3VzSW4oZGlhbG9nKTtcbiAgICAgICAgICAgICAgfSldKVxuICAgICAgICAgIF0pXG4gICAgICAgIH0pO1xuICAgICAgICBhdHRhY2goc2luaywgYmxvY2tlcik7XG4gICAgICAgIEtleWluZy5mb2N1c0luKGRpYWxvZyk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaGlkZURpYWxvZyA9IGRpYWxvZyA9PiB7XG4gICAgICAgIGRpYWxvZ0NvbXAuY2xlYXIoKTtcbiAgICAgICAgcGFyZW50KGRpYWxvZy5lbGVtZW50KS5lYWNoKGJsb2NrZXJEb20gPT4ge1xuICAgICAgICAgIGRpYWxvZy5nZXRTeXN0ZW0oKS5nZXRCeURvbShibG9ja2VyRG9tKS5lYWNoKGJsb2NrZXIgPT4ge1xuICAgICAgICAgICAgZGV0YWNoKGJsb2NrZXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXREaWFsb2dCb2R5ID0gZGlhbG9nID0+IGdldFBhcnRPckRpZShkaWFsb2csIGRldGFpbCwgJ2JvZHknKTtcbiAgICAgIGNvbnN0IGdldERpYWxvZ0Zvb3RlciA9IGRpYWxvZyA9PiBnZXRQYXJ0KGRpYWxvZywgZGV0YWlsLCAnZm9vdGVyJyk7XG4gICAgICBjb25zdCBzZXRCdXN5ID0gKGRpYWxvZywgZ2V0QnVzeVNwZWMpID0+IHtcbiAgICAgICAgQmxvY2tpbmcuYmxvY2soZGlhbG9nLCBnZXRCdXN5U3BlYyk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0SWRsZSA9IGRpYWxvZyA9PiB7XG4gICAgICAgIEJsb2NraW5nLnVuYmxvY2soZGlhbG9nKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBtb2RhbEV2ZW50c0lkID0gZ2VuZXJhdGUkNignbW9kYWwtZXZlbnRzJyk7XG4gICAgICBjb25zdCBldmVudE9yZGVyID0ge1xuICAgICAgICAuLi5kZXRhaWwuZXZlbnRPcmRlcixcbiAgICAgICAgW2F0dGFjaGVkVG9Eb20oKV06IFttb2RhbEV2ZW50c0lkXS5jb25jYXQoZGV0YWlsLmV2ZW50T3JkZXJbJ2FsbG95LnN5c3RlbS5hdHRhY2hlZCddIHx8IFtdKVxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVpZDogZGV0YWlsLnVpZCxcbiAgICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICBhcGlzOiB7XG4gICAgICAgICAgc2hvdzogc2hvd0RpYWxvZyxcbiAgICAgICAgICBoaWRlOiBoaWRlRGlhbG9nLFxuICAgICAgICAgIGdldEJvZHk6IGdldERpYWxvZ0JvZHksXG4gICAgICAgICAgZ2V0Rm9vdGVyOiBnZXREaWFsb2dGb290ZXIsXG4gICAgICAgICAgc2V0SWRsZSxcbiAgICAgICAgICBzZXRCdXN5XG4gICAgICAgIH0sXG4gICAgICAgIGV2ZW50T3JkZXIsXG4gICAgICAgIGRvbU1vZGlmaWNhdGlvbjoge1xuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICdyb2xlJzogJ2RpYWxvZycsXG4gICAgICAgICAgICAnYXJpYS1tb2RhbCc6ICd0cnVlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYmVoYXZpb3VyczogYXVnbWVudChkZXRhaWwubW9kYWxCZWhhdmlvdXJzLCBbXG4gICAgICAgICAgUmVwbGFjaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBtb2RlOiAnY3ljbGljJyxcbiAgICAgICAgICAgIG9uRW50ZXI6IGRldGFpbC5vbkV4ZWN1dGUsXG4gICAgICAgICAgICBvbkVzY2FwZTogZGV0YWlsLm9uRXNjYXBlLFxuICAgICAgICAgICAgdXNlVGFic3RvcEF0OiBkZXRhaWwudXNlVGFic3RvcEF0LFxuICAgICAgICAgICAgZmlyc3RUYWJzdG9wOiBkZXRhaWwuZmlyc3RUYWJzdG9wXG4gICAgICAgICAgfSksXG4gICAgICAgICAgQmxvY2tpbmcuY29uZmlnKHsgZ2V0Um9vdDogZGlhbG9nQ29tcC5nZXQgfSksXG4gICAgICAgICAgY29uZmlnKG1vZGFsRXZlbnRzSWQsIFtydW5PbkF0dGFjaGVkKGMgPT4ge1xuICAgICAgICAgICAgICBsYWJlbGxlZEJ5KGMuZWxlbWVudCwgZ2V0UGFydE9yRGllKGMsIGRldGFpbCwgJ3RpdGxlJykuZWxlbWVudCk7XG4gICAgICAgICAgICB9KV0pXG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgTW9kYWxEaWFsb2cgPSBjb21wb3NpdGUoe1xuICAgICAgbmFtZTogJ01vZGFsRGlhbG9nJyxcbiAgICAgIGNvbmZpZ0ZpZWxkczogc2NoZW1hJDIoKSxcbiAgICAgIHBhcnRGaWVsZHM6IHBhcnRzJDIoKSxcbiAgICAgIGZhY3Rvcnk6IGZhY3RvcnkkNCxcbiAgICAgIGFwaXM6IHtcbiAgICAgICAgc2hvdzogKGFwaXMsIGRpYWxvZykgPT4ge1xuICAgICAgICAgIGFwaXMuc2hvdyhkaWFsb2cpO1xuICAgICAgICB9LFxuICAgICAgICBoaWRlOiAoYXBpcywgZGlhbG9nKSA9PiB7XG4gICAgICAgICAgYXBpcy5oaWRlKGRpYWxvZyk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldEJvZHk6IChhcGlzLCBkaWFsb2cpID0+IGFwaXMuZ2V0Qm9keShkaWFsb2cpLFxuICAgICAgICBnZXRGb290ZXI6IChhcGlzLCBkaWFsb2cpID0+IGFwaXMuZ2V0Rm9vdGVyKGRpYWxvZyksXG4gICAgICAgIHNldEJ1c3k6IChhcGlzLCBkaWFsb2csIGdldEJ1c3lTcGVjKSA9PiB7XG4gICAgICAgICAgYXBpcy5zZXRCdXN5KGRpYWxvZywgZ2V0QnVzeVNwZWMpO1xuICAgICAgICB9LFxuICAgICAgICBzZXRJZGxlOiAoYXBpcywgZGlhbG9nKSA9PiB7XG4gICAgICAgICAgYXBpcy5zZXRJZGxlKGRpYWxvZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGRpYWxvZ1RvZ2dsZU1lbnVJdGVtU2NoZW1hID0gb2JqT2YoW1xuICAgICAgdHlwZSxcbiAgICAgIG5hbWUkMVxuICAgIF0uY29uY2F0KGNvbW1vbk1lbnVJdGVtRmllbGRzKSk7XG4gICAgY29uc3QgZGlhbG9nVG9nZ2xlTWVudUl0ZW1EYXRhUHJvY2Vzc29yID0gYm9vbGVhbjtcblxuICAgIGNvbnN0IGJhc2VGb290ZXJCdXR0b25GaWVsZHMgPSBbXG4gICAgICBnZW5lcmF0ZWROYW1lKCdidXR0b24nKSxcbiAgICAgIG9wdGlvbmFsSWNvbixcbiAgICAgIGRlZmF1bHRlZFN0cmluZ0VudW0oJ2FsaWduJywgJ2VuZCcsIFtcbiAgICAgICAgJ3N0YXJ0JyxcbiAgICAgICAgJ2VuZCdcbiAgICAgIF0pLFxuICAgICAgcHJpbWFyeSxcbiAgICAgIGVuYWJsZWQsXG4gICAgICBvcHRpb25TdHJpbmdFbnVtKCdidXR0b25UeXBlJywgW1xuICAgICAgICAncHJpbWFyeScsXG4gICAgICAgICdzZWNvbmRhcnknXG4gICAgICBdKVxuICAgIF07XG4gICAgY29uc3QgZGlhbG9nRm9vdGVyQnV0dG9uRmllbGRzID0gW1xuICAgICAgLi4uYmFzZUZvb3RlckJ1dHRvbkZpZWxkcyxcbiAgICAgIHRleHQkMVxuICAgIF07XG4gICAgY29uc3Qgbm9ybWFsRm9vdGVyQnV0dG9uRmllbGRzID0gW1xuICAgICAgcmVxdWlyZWRTdHJpbmdFbnVtKCd0eXBlJywgW1xuICAgICAgICAnc3VibWl0JyxcbiAgICAgICAgJ2NhbmNlbCcsXG4gICAgICAgICdjdXN0b20nXG4gICAgICBdKSxcbiAgICAgIC4uLmRpYWxvZ0Zvb3RlckJ1dHRvbkZpZWxkc1xuICAgIF07XG4gICAgY29uc3QgbWVudUZvb3RlckJ1dHRvbkZpZWxkcyA9IFtcbiAgICAgIHJlcXVpcmVkU3RyaW5nRW51bSgndHlwZScsIFsnbWVudSddKSxcbiAgICAgIG9wdGlvbmFsVGV4dCxcbiAgICAgIG9wdGlvbmFsVG9vbHRpcCxcbiAgICAgIG9wdGlvbmFsSWNvbixcbiAgICAgIHJlcXVpcmVkQXJyYXlPZignaXRlbXMnLCBkaWFsb2dUb2dnbGVNZW51SXRlbVNjaGVtYSksXG4gICAgICAuLi5iYXNlRm9vdGVyQnV0dG9uRmllbGRzXG4gICAgXTtcbiAgICBjb25zdCB0b2dnbGVCdXR0b25TcGVjRmllbGRzID0gW1xuICAgICAgLi4uYmFzZUZvb3RlckJ1dHRvbkZpZWxkcyxcbiAgICAgIHJlcXVpcmVkU3RyaW5nRW51bSgndHlwZScsIFsndG9nZ2xlYnV0dG9uJ10pLFxuICAgICAgcmVxdWlyZWRTdHJpbmcoJ3Rvb2x0aXAnKSxcbiAgICAgIG9wdGlvbmFsSWNvbixcbiAgICAgIG9wdGlvbmFsVGV4dCxcbiAgICAgIGRlZmF1bHRlZEJvb2xlYW4oJ2FjdGl2ZScsIGZhbHNlKVxuICAgIF07XG4gICAgY29uc3QgZGlhbG9nRm9vdGVyQnV0dG9uU2NoZW1hID0gY2hvb3NlJDEoJ3R5cGUnLCB7XG4gICAgICBzdWJtaXQ6IG5vcm1hbEZvb3RlckJ1dHRvbkZpZWxkcyxcbiAgICAgIGNhbmNlbDogbm9ybWFsRm9vdGVyQnV0dG9uRmllbGRzLFxuICAgICAgY3VzdG9tOiBub3JtYWxGb290ZXJCdXR0b25GaWVsZHMsXG4gICAgICBtZW51OiBtZW51Rm9vdGVyQnV0dG9uRmllbGRzLFxuICAgICAgdG9nZ2xlYnV0dG9uOiB0b2dnbGVCdXR0b25TcGVjRmllbGRzXG4gICAgfSk7XG5cbiAgICBjb25zdCBhbGVydEJhbm5lckZpZWxkcyA9IFtcbiAgICAgIHR5cGUsXG4gICAgICB0ZXh0JDEsXG4gICAgICByZXF1aXJlZFN0cmluZ0VudW0oJ2xldmVsJywgW1xuICAgICAgICAnaW5mbycsXG4gICAgICAgICd3YXJuJyxcbiAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgJ3N1Y2Nlc3MnXG4gICAgICBdKSxcbiAgICAgIGljb24sXG4gICAgICBkZWZhdWx0ZWQoJ3VybCcsICcnKVxuICAgIF07XG4gICAgY29uc3QgYWxlcnRCYW5uZXJTY2hlbWEgPSBvYmpPZihhbGVydEJhbm5lckZpZWxkcyk7XG5cbiAgICBjb25zdCBjcmVhdGVCYXJGaWVsZHMgPSBpdGVtc0ZpZWxkID0+IFtcbiAgICAgIHR5cGUsXG4gICAgICBpdGVtc0ZpZWxkXG4gICAgXTtcblxuICAgIGNvbnN0IGJ1dHRvbkZpZWxkcyA9IFtcbiAgICAgIHR5cGUsXG4gICAgICB0ZXh0JDEsXG4gICAgICBlbmFibGVkLFxuICAgICAgZ2VuZXJhdGVkTmFtZSgnYnV0dG9uJyksXG4gICAgICBvcHRpb25hbEljb24sXG4gICAgICBib3JkZXJsZXNzLFxuICAgICAgb3B0aW9uU3RyaW5nRW51bSgnYnV0dG9uVHlwZScsIFtcbiAgICAgICAgJ3ByaW1hcnknLFxuICAgICAgICAnc2Vjb25kYXJ5JyxcbiAgICAgICAgJ3Rvb2xiYXInXG4gICAgICBdKSxcbiAgICAgIHByaW1hcnlcbiAgICBdO1xuICAgIGNvbnN0IGJ1dHRvblNjaGVtYSA9IG9iak9mKGJ1dHRvbkZpZWxkcyk7XG5cbiAgICBjb25zdCBmb3JtQ29tcG9uZW50RmllbGRzID0gW1xuICAgICAgdHlwZSxcbiAgICAgIG5hbWUkMVxuICAgIF07XG4gICAgY29uc3QgZm9ybUNvbXBvbmVudFdpdGhMYWJlbEZpZWxkcyA9IGZvcm1Db21wb25lbnRGaWVsZHMuY29uY2F0KFtvcHRpb25hbExhYmVsXSk7XG5cbiAgICBjb25zdCBjaGVja2JveEZpZWxkcyA9IGZvcm1Db21wb25lbnRGaWVsZHMuY29uY2F0KFtcbiAgICAgIGxhYmVsLFxuICAgICAgZW5hYmxlZFxuICAgIF0pO1xuICAgIGNvbnN0IGNoZWNrYm94U2NoZW1hID0gb2JqT2YoY2hlY2tib3hGaWVsZHMpO1xuICAgIGNvbnN0IGNoZWNrYm94RGF0YVByb2Nlc3NvciA9IGJvb2xlYW47XG5cbiAgICBjb25zdCBjb2xsZWN0aW9uRmllbGRzID0gZm9ybUNvbXBvbmVudFdpdGhMYWJlbEZpZWxkcy5jb25jYXQoW2RlZmF1bHRlZENvbHVtbnMoJ2F1dG8nKV0pO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25TY2hlbWEgPSBvYmpPZihjb2xsZWN0aW9uRmllbGRzKTtcbiAgICBjb25zdCBjb2xsZWN0aW9uRGF0YVByb2Nlc3NvciA9IGFyck9mT2JqKFtcbiAgICAgIHZhbHVlJDEsXG4gICAgICB0ZXh0JDEsXG4gICAgICBpY29uXG4gICAgXSk7XG5cbiAgICBjb25zdCBjb2xvcklucHV0RmllbGRzID0gZm9ybUNvbXBvbmVudFdpdGhMYWJlbEZpZWxkcy5jb25jYXQoW2RlZmF1bHRlZFN0cmluZygnc3RvcmFnZUtleScsICdkZWZhdWx0JyldKTtcbiAgICBjb25zdCBjb2xvcklucHV0U2NoZW1hID0gb2JqT2YoY29sb3JJbnB1dEZpZWxkcyk7XG4gICAgY29uc3QgY29sb3JJbnB1dERhdGFQcm9jZXNzb3IgPSBzdHJpbmc7XG5cbiAgICBjb25zdCBjb2xvclBpY2tlckZpZWxkcyA9IGZvcm1Db21wb25lbnRXaXRoTGFiZWxGaWVsZHM7XG4gICAgY29uc3QgY29sb3JQaWNrZXJTY2hlbWEgPSBvYmpPZihjb2xvclBpY2tlckZpZWxkcyk7XG4gICAgY29uc3QgY29sb3JQaWNrZXJEYXRhUHJvY2Vzc29yID0gc3RyaW5nO1xuXG4gICAgY29uc3QgY3VzdG9tRWRpdG9yRmllbGRzID0gZm9ybUNvbXBvbmVudEZpZWxkcy5jb25jYXQoW1xuICAgICAgZGVmYXVsdGVkU3RyaW5nKCd0YWcnLCAndGV4dGFyZWEnKSxcbiAgICAgIHJlcXVpcmVkU3RyaW5nKCdzY3JpcHRJZCcpLFxuICAgICAgcmVxdWlyZWRTdHJpbmcoJ3NjcmlwdFVybCcpLFxuICAgICAgZGVmYXVsdGVkUG9zdE1zZygnc2V0dGluZ3MnLCB1bmRlZmluZWQpXG4gICAgXSk7XG4gICAgY29uc3QgY3VzdG9tRWRpdG9yRmllbGRzT2xkID0gZm9ybUNvbXBvbmVudEZpZWxkcy5jb25jYXQoW1xuICAgICAgZGVmYXVsdGVkU3RyaW5nKCd0YWcnLCAndGV4dGFyZWEnKSxcbiAgICAgIHJlcXVpcmVkRnVuY3Rpb24oJ2luaXQnKVxuICAgIF0pO1xuICAgIGNvbnN0IGN1c3RvbUVkaXRvclNjaGVtYSA9IHZhbHVlT2YodiA9PiBhc1JhdygnY3VzdG9tZWRpdG9yLm9sZCcsIG9iak9mT25seShjdXN0b21FZGl0b3JGaWVsZHNPbGQpLCB2KS5vclRodW5rKCgpID0+IGFzUmF3KCdjdXN0b21lZGl0b3IubmV3Jywgb2JqT2ZPbmx5KGN1c3RvbUVkaXRvckZpZWxkcyksIHYpKSk7XG4gICAgY29uc3QgY3VzdG9tRWRpdG9yRGF0YVByb2Nlc3NvciA9IHN0cmluZztcblxuICAgIGNvbnN0IGRyb3Bab25lRmllbGRzID0gZm9ybUNvbXBvbmVudFdpdGhMYWJlbEZpZWxkcztcbiAgICBjb25zdCBkcm9wWm9uZVNjaGVtYSA9IG9iak9mKGRyb3Bab25lRmllbGRzKTtcbiAgICBjb25zdCBkcm9wWm9uZURhdGFQcm9jZXNzb3IgPSBhcnJPZlZhbCgpO1xuXG4gICAgY29uc3QgY3JlYXRlR3JpZEZpZWxkcyA9IGl0ZW1zRmllbGQgPT4gW1xuICAgICAgdHlwZSxcbiAgICAgIHJlcXVpcmVkTnVtYmVyKCdjb2x1bW5zJyksXG4gICAgICBpdGVtc0ZpZWxkXG4gICAgXTtcblxuICAgIGNvbnN0IGh0bWxQYW5lbEZpZWxkcyA9IFtcbiAgICAgIHR5cGUsXG4gICAgICByZXF1aXJlZFN0cmluZygnaHRtbCcpLFxuICAgICAgZGVmYXVsdGVkU3RyaW5nRW51bSgncHJlc2V0cycsICdwcmVzZW50YXRpb24nLCBbXG4gICAgICAgICdwcmVzZW50YXRpb24nLFxuICAgICAgICAnZG9jdW1lbnQnXG4gICAgICBdKVxuICAgIF07XG4gICAgY29uc3QgaHRtbFBhbmVsU2NoZW1hID0gb2JqT2YoaHRtbFBhbmVsRmllbGRzKTtcblxuICAgIGNvbnN0IGlmcmFtZUZpZWxkcyA9IGZvcm1Db21wb25lbnRXaXRoTGFiZWxGaWVsZHMuY29uY2F0KFtcbiAgICAgIGRlZmF1bHRlZEJvb2xlYW4oJ2JvcmRlcicsIGZhbHNlKSxcbiAgICAgIGRlZmF1bHRlZEJvb2xlYW4oJ3NhbmRib3hlZCcsIHRydWUpLFxuICAgICAgZGVmYXVsdGVkQm9vbGVhbignc3RyZWFtQ29udGVudCcsIGZhbHNlKSxcbiAgICAgIGRlZmF1bHRlZEJvb2xlYW4oJ3RyYW5zcGFyZW50JywgdHJ1ZSlcbiAgICBdKTtcbiAgICBjb25zdCBpZnJhbWVTY2hlbWEgPSBvYmpPZihpZnJhbWVGaWVsZHMpO1xuICAgIGNvbnN0IGlmcmFtZURhdGFQcm9jZXNzb3IgPSBzdHJpbmc7XG5cbiAgICBjb25zdCBpbWFnZVByZXZpZXdTY2hlbWEgPSBvYmpPZihmb3JtQ29tcG9uZW50RmllbGRzLmNvbmNhdChbb3B0aW9uU3RyaW5nKCdoZWlnaHQnKV0pKTtcbiAgICBjb25zdCBpbWFnZVByZXZpZXdEYXRhUHJvY2Vzc29yID0gb2JqT2YoW1xuICAgICAgcmVxdWlyZWRTdHJpbmcoJ3VybCcpLFxuICAgICAgb3B0aW9uTnVtYmVyKCd6b29tJyksXG4gICAgICBvcHRpb25OdW1iZXIoJ2NhY2hlZFdpZHRoJyksXG4gICAgICBvcHRpb25OdW1iZXIoJ2NhY2hlZEhlaWdodCcpXG4gICAgXSk7XG5cbiAgICBjb25zdCBpbnB1dEZpZWxkcyA9IGZvcm1Db21wb25lbnRXaXRoTGFiZWxGaWVsZHMuY29uY2F0KFtcbiAgICAgIG9wdGlvblN0cmluZygnaW5wdXRNb2RlJyksXG4gICAgICBvcHRpb25TdHJpbmcoJ3BsYWNlaG9sZGVyJyksXG4gICAgICBkZWZhdWx0ZWRCb29sZWFuKCdtYXhpbWl6ZWQnLCBmYWxzZSksXG4gICAgICBlbmFibGVkXG4gICAgXSk7XG4gICAgY29uc3QgaW5wdXRTY2hlbWEgPSBvYmpPZihpbnB1dEZpZWxkcyk7XG4gICAgY29uc3QgaW5wdXREYXRhUHJvY2Vzc29yID0gc3RyaW5nO1xuXG4gICAgY29uc3QgY3JlYXRlTGFiZWxGaWVsZHMgPSBpdGVtc0ZpZWxkID0+IFtcbiAgICAgIHR5cGUsXG4gICAgICBsYWJlbCxcbiAgICAgIGl0ZW1zRmllbGQsXG4gICAgICBkZWZhdWx0ZWRTdHJpbmdFbnVtKCdhbGlnbicsICdzdGFydCcsIFtcbiAgICAgICAgJ3N0YXJ0JyxcbiAgICAgICAgJ2NlbnRlcicsXG4gICAgICAgICdlbmQnXG4gICAgICBdKVxuICAgIF07XG5cbiAgICBjb25zdCBsaXN0Qm94U2luZ2xlSXRlbUZpZWxkcyA9IFtcbiAgICAgIHRleHQkMSxcbiAgICAgIHZhbHVlJDFcbiAgICBdO1xuICAgIGNvbnN0IGxpc3RCb3hOZXN0ZWRJdGVtRmllbGRzID0gW1xuICAgICAgdGV4dCQxLFxuICAgICAgcmVxdWlyZWRBcnJheU9mKCdpdGVtcycsIHRodW5rT2YoJ2l0ZW1zJywgKCkgPT4gbGlzdEJveEl0ZW1TY2hlbWEpKVxuICAgIF07XG4gICAgY29uc3QgbGlzdEJveEl0ZW1TY2hlbWEgPSBvbmVPZihbXG4gICAgICBvYmpPZihsaXN0Qm94U2luZ2xlSXRlbUZpZWxkcyksXG4gICAgICBvYmpPZihsaXN0Qm94TmVzdGVkSXRlbUZpZWxkcylcbiAgICBdKTtcbiAgICBjb25zdCBsaXN0Qm94RmllbGRzID0gZm9ybUNvbXBvbmVudFdpdGhMYWJlbEZpZWxkcy5jb25jYXQoW1xuICAgICAgcmVxdWlyZWRBcnJheU9mKCdpdGVtcycsIGxpc3RCb3hJdGVtU2NoZW1hKSxcbiAgICAgIGVuYWJsZWRcbiAgICBdKTtcbiAgICBjb25zdCBsaXN0Qm94U2NoZW1hID0gb2JqT2YobGlzdEJveEZpZWxkcyk7XG4gICAgY29uc3QgbGlzdEJveERhdGFQcm9jZXNzb3IgPSBzdHJpbmc7XG5cbiAgICBjb25zdCBzZWxlY3RCb3hGaWVsZHMgPSBmb3JtQ29tcG9uZW50V2l0aExhYmVsRmllbGRzLmNvbmNhdChbXG4gICAgICByZXF1aXJlZEFycmF5T2ZPYmooJ2l0ZW1zJywgW1xuICAgICAgICB0ZXh0JDEsXG4gICAgICAgIHZhbHVlJDFcbiAgICAgIF0pLFxuICAgICAgZGVmYXVsdGVkTnVtYmVyKCdzaXplJywgMSksXG4gICAgICBlbmFibGVkXG4gICAgXSk7XG4gICAgY29uc3Qgc2VsZWN0Qm94U2NoZW1hID0gb2JqT2Yoc2VsZWN0Qm94RmllbGRzKTtcbiAgICBjb25zdCBzZWxlY3RCb3hEYXRhUHJvY2Vzc29yID0gc3RyaW5nO1xuXG4gICAgY29uc3Qgc2l6ZUlucHV0RmllbGRzID0gZm9ybUNvbXBvbmVudFdpdGhMYWJlbEZpZWxkcy5jb25jYXQoW1xuICAgICAgZGVmYXVsdGVkQm9vbGVhbignY29uc3RyYWluJywgdHJ1ZSksXG4gICAgICBlbmFibGVkXG4gICAgXSk7XG4gICAgY29uc3Qgc2l6ZUlucHV0U2NoZW1hID0gb2JqT2Yoc2l6ZUlucHV0RmllbGRzKTtcbiAgICBjb25zdCBzaXplSW5wdXREYXRhUHJvY2Vzc29yID0gb2JqT2YoW1xuICAgICAgcmVxdWlyZWRTdHJpbmcoJ3dpZHRoJyksXG4gICAgICByZXF1aXJlZFN0cmluZygnaGVpZ2h0JylcbiAgICBdKTtcblxuICAgIGNvbnN0IHNsaWRlckZpZWxkcyA9IGZvcm1Db21wb25lbnRGaWVsZHMuY29uY2F0KFtcbiAgICAgIGxhYmVsLFxuICAgICAgZGVmYXVsdGVkTnVtYmVyKCdtaW4nLCAwKSxcbiAgICAgIGRlZmF1bHRlZE51bWJlcignbWF4JywgMClcbiAgICBdKTtcbiAgICBjb25zdCBzbGlkZXJTY2hlbWEgPSBvYmpPZihzbGlkZXJGaWVsZHMpO1xuICAgIGNvbnN0IHNsaWRlcklucHV0RGF0YVByb2Nlc3NvciA9IG51bWJlcjtcblxuICAgIGNvbnN0IHRhYmxlRmllbGRzID0gW1xuICAgICAgdHlwZSxcbiAgICAgIHJlcXVpcmVkQXJyYXlPZignaGVhZGVyJywgc3RyaW5nKSxcbiAgICAgIHJlcXVpcmVkQXJyYXlPZignY2VsbHMnLCBhcnJPZihzdHJpbmcpKVxuICAgIF07XG4gICAgY29uc3QgdGFibGVTY2hlbWEgPSBvYmpPZih0YWJsZUZpZWxkcyk7XG5cbiAgICBjb25zdCB0ZXh0QXJlYUZpZWxkcyA9IGZvcm1Db21wb25lbnRXaXRoTGFiZWxGaWVsZHMuY29uY2F0KFtcbiAgICAgIG9wdGlvblN0cmluZygncGxhY2Vob2xkZXInKSxcbiAgICAgIGRlZmF1bHRlZEJvb2xlYW4oJ21heGltaXplZCcsIGZhbHNlKSxcbiAgICAgIGVuYWJsZWRcbiAgICBdKTtcbiAgICBjb25zdCB0ZXh0QXJlYVNjaGVtYSA9IG9iak9mKHRleHRBcmVhRmllbGRzKTtcbiAgICBjb25zdCB0ZXh0QXJlYURhdGFQcm9jZXNzb3IgPSBzdHJpbmc7XG5cbiAgICBjb25zdCBiYXNlVHJlZUl0ZW1GaWVsZHMgPSBbXG4gICAgICByZXF1aXJlZFN0cmluZ0VudW0oJ3R5cGUnLCBbXG4gICAgICAgICdkaXJlY3RvcnknLFxuICAgICAgICAnbGVhZidcbiAgICAgIF0pLFxuICAgICAgdGl0bGUsXG4gICAgICByZXF1aXJlZFN0cmluZygnaWQnKSxcbiAgICAgIG9wdGlvbk9mKCdtZW51JywgTWVudUJ1dHRvblNjaGVtYSlcbiAgICBdO1xuICAgIGNvbnN0IHRyZWVJdGVtTGVhZkZpZWxkcyA9IGJhc2VUcmVlSXRlbUZpZWxkcztcbiAgICBjb25zdCB0cmVlSXRlbUxlYWZTY2hlbWEgPSBvYmpPZih0cmVlSXRlbUxlYWZGaWVsZHMpO1xuICAgIGNvbnN0IHRyZWVJdGVtRGlyZWN0b3J5RmllbGRzID0gYmFzZVRyZWVJdGVtRmllbGRzLmNvbmNhdChbcmVxdWlyZWRBcnJheU9mKCdjaGlsZHJlbicsIHRodW5rT2YoJ2NoaWxkcmVuJywgKCkgPT4ge1xuICAgICAgICByZXR1cm4gY2hvb3NlJDIoJ3R5cGUnLCB7XG4gICAgICAgICAgZGlyZWN0b3J5OiB0cmVlSXRlbURpcmVjdG9yeVNjaGVtYSxcbiAgICAgICAgICBsZWFmOiB0cmVlSXRlbUxlYWZTY2hlbWFcbiAgICAgICAgfSk7XG4gICAgICB9KSldKTtcbiAgICBjb25zdCB0cmVlSXRlbURpcmVjdG9yeVNjaGVtYSA9IG9iak9mKHRyZWVJdGVtRGlyZWN0b3J5RmllbGRzKTtcbiAgICBjb25zdCB0cmVlSXRlbVNjaGVtYSA9IGNob29zZSQyKCd0eXBlJywge1xuICAgICAgZGlyZWN0b3J5OiB0cmVlSXRlbURpcmVjdG9yeVNjaGVtYSxcbiAgICAgIGxlYWY6IHRyZWVJdGVtTGVhZlNjaGVtYVxuICAgIH0pO1xuICAgIGNvbnN0IHRyZWVGaWVsZHMgPSBbXG4gICAgICB0eXBlLFxuICAgICAgcmVxdWlyZWRBcnJheU9mKCdpdGVtcycsIHRyZWVJdGVtU2NoZW1hKSxcbiAgICAgIG9wdGlvbkZ1bmN0aW9uKCdvbkxlYWZBY3Rpb24nKSxcbiAgICAgIG9wdGlvbkZ1bmN0aW9uKCdvblRvZ2dsZUV4cGFuZCcpLFxuICAgICAgZGVmYXVsdGVkQXJyYXlPZignZGVmYXVsdEV4cGFuZGVkSWRzJywgW10sIHN0cmluZyksXG4gICAgICBvcHRpb25TdHJpbmcoJ2RlZmF1bHRTZWxlY3RlZElkJylcbiAgICBdO1xuICAgIGNvbnN0IHRyZWVTY2hlbWEgPSBvYmpPZih0cmVlRmllbGRzKTtcblxuICAgIGNvbnN0IHVybElucHV0RmllbGRzID0gZm9ybUNvbXBvbmVudFdpdGhMYWJlbEZpZWxkcy5jb25jYXQoW1xuICAgICAgZGVmYXVsdGVkU3RyaW5nRW51bSgnZmlsZXR5cGUnLCAnZmlsZScsIFtcbiAgICAgICAgJ2ltYWdlJyxcbiAgICAgICAgJ21lZGlhJyxcbiAgICAgICAgJ2ZpbGUnXG4gICAgICBdKSxcbiAgICAgIGVuYWJsZWRcbiAgICBdKTtcbiAgICBjb25zdCB1cmxJbnB1dFNjaGVtYSA9IG9iak9mKHVybElucHV0RmllbGRzKTtcbiAgICBjb25zdCB1cmxJbnB1dERhdGFQcm9jZXNzb3IgPSBvYmpPZihbXG4gICAgICB2YWx1ZSQxLFxuICAgICAgZGVmYXVsdGVkTWV0YVxuICAgIF0pO1xuXG4gICAgY29uc3QgY3JlYXRlSXRlbXNGaWVsZCA9IG5hbWUgPT4gZmllbGQkMSgnaXRlbXMnLCAnaXRlbXMnLCByZXF1aXJlZCQyKCksIGFyck9mKHZhbHVlT2YodiA9PiBhc1JhdyhgQ2hlY2tpbmcgaXRlbSBvZiAkeyBuYW1lIH1gLCBpdGVtU2NoZW1hLCB2KS5mb2xkKHNFcnIgPT4gUmVzdWx0LmVycm9yKGZvcm1hdEVycm9yKHNFcnIpKSwgcGFzc1ZhbHVlID0+IFJlc3VsdC52YWx1ZShwYXNzVmFsdWUpKSkpKTtcbiAgICBjb25zdCBpdGVtU2NoZW1hID0gdmFsdWVUaHVuaygoKSA9PiBjaG9vc2UkMigndHlwZScsIHtcbiAgICAgIGFsZXJ0YmFubmVyOiBhbGVydEJhbm5lclNjaGVtYSxcbiAgICAgIGJhcjogb2JqT2YoY3JlYXRlQmFyRmllbGRzKGNyZWF0ZUl0ZW1zRmllbGQoJ2JhcicpKSksXG4gICAgICBidXR0b246IGJ1dHRvblNjaGVtYSxcbiAgICAgIGNoZWNrYm94OiBjaGVja2JveFNjaGVtYSxcbiAgICAgIGNvbG9yaW5wdXQ6IGNvbG9ySW5wdXRTY2hlbWEsXG4gICAgICBjb2xvcnBpY2tlcjogY29sb3JQaWNrZXJTY2hlbWEsXG4gICAgICBkcm9wem9uZTogZHJvcFpvbmVTY2hlbWEsXG4gICAgICBncmlkOiBvYmpPZihjcmVhdGVHcmlkRmllbGRzKGNyZWF0ZUl0ZW1zRmllbGQoJ2dyaWQnKSkpLFxuICAgICAgaWZyYW1lOiBpZnJhbWVTY2hlbWEsXG4gICAgICBpbnB1dDogaW5wdXRTY2hlbWEsXG4gICAgICBsaXN0Ym94OiBsaXN0Qm94U2NoZW1hLFxuICAgICAgc2VsZWN0Ym94OiBzZWxlY3RCb3hTY2hlbWEsXG4gICAgICBzaXplaW5wdXQ6IHNpemVJbnB1dFNjaGVtYSxcbiAgICAgIHNsaWRlcjogc2xpZGVyU2NoZW1hLFxuICAgICAgdGV4dGFyZWE6IHRleHRBcmVhU2NoZW1hLFxuICAgICAgdXJsaW5wdXQ6IHVybElucHV0U2NoZW1hLFxuICAgICAgY3VzdG9tZWRpdG9yOiBjdXN0b21FZGl0b3JTY2hlbWEsXG4gICAgICBodG1scGFuZWw6IGh0bWxQYW5lbFNjaGVtYSxcbiAgICAgIGltYWdlcHJldmlldzogaW1hZ2VQcmV2aWV3U2NoZW1hLFxuICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNjaGVtYSxcbiAgICAgIGxhYmVsOiBvYmpPZihjcmVhdGVMYWJlbEZpZWxkcyhjcmVhdGVJdGVtc0ZpZWxkKCdsYWJlbCcpKSksXG4gICAgICB0YWJsZTogdGFibGVTY2hlbWEsXG4gICAgICB0cmVlOiB0cmVlU2NoZW1hLFxuICAgICAgcGFuZWw6IHBhbmVsU2NoZW1hXG4gICAgfSkpO1xuICAgIGNvbnN0IHBhbmVsRmllbGRzID0gW1xuICAgICAgdHlwZSxcbiAgICAgIGRlZmF1bHRlZCgnY2xhc3NlcycsIFtdKSxcbiAgICAgIHJlcXVpcmVkQXJyYXlPZignaXRlbXMnLCBpdGVtU2NoZW1hKVxuICAgIF07XG4gICAgY29uc3QgcGFuZWxTY2hlbWEgPSBvYmpPZihwYW5lbEZpZWxkcyk7XG5cbiAgICBjb25zdCB0YWJGaWVsZHMgPSBbXG4gICAgICBnZW5lcmF0ZWROYW1lKCd0YWInKSxcbiAgICAgIHRpdGxlLFxuICAgICAgcmVxdWlyZWRBcnJheU9mKCdpdGVtcycsIGl0ZW1TY2hlbWEpXG4gICAgXTtcbiAgICBjb25zdCB0YWJQYW5lbEZpZWxkcyA9IFtcbiAgICAgIHR5cGUsXG4gICAgICByZXF1aXJlZEFycmF5T2ZPYmooJ3RhYnMnLCB0YWJGaWVsZHMpXG4gICAgXTtcbiAgICBjb25zdCB0YWJQYW5lbFNjaGVtYSA9IG9iak9mKHRhYlBhbmVsRmllbGRzKTtcblxuICAgIGNvbnN0IGRpYWxvZ0J1dHRvbkZpZWxkcyA9IGRpYWxvZ0Zvb3RlckJ1dHRvbkZpZWxkcztcbiAgICBjb25zdCBkaWFsb2dCdXR0b25TY2hlbWEgPSBkaWFsb2dGb290ZXJCdXR0b25TY2hlbWE7XG4gICAgY29uc3QgZGlhbG9nU2NoZW1hID0gb2JqT2YoW1xuICAgICAgcmVxdWlyZWRTdHJpbmcoJ3RpdGxlJyksXG4gICAgICByZXF1aXJlZE9mKCdib2R5JywgY2hvb3NlJDIoJ3R5cGUnLCB7XG4gICAgICAgIHBhbmVsOiBwYW5lbFNjaGVtYSxcbiAgICAgICAgdGFicGFuZWw6IHRhYlBhbmVsU2NoZW1hXG4gICAgICB9KSksXG4gICAgICBkZWZhdWx0ZWRTdHJpbmcoJ3NpemUnLCAnbm9ybWFsJyksXG4gICAgICBkZWZhdWx0ZWRBcnJheU9mKCdidXR0b25zJywgW10sIGRpYWxvZ0J1dHRvblNjaGVtYSksXG4gICAgICBkZWZhdWx0ZWQoJ2luaXRpYWxEYXRhJywge30pLFxuICAgICAgZGVmYXVsdGVkRnVuY3Rpb24oJ29uQWN0aW9uJywgbm9vcCksXG4gICAgICBkZWZhdWx0ZWRGdW5jdGlvbignb25DaGFuZ2UnLCBub29wKSxcbiAgICAgIGRlZmF1bHRlZEZ1bmN0aW9uKCdvblN1Ym1pdCcsIG5vb3ApLFxuICAgICAgZGVmYXVsdGVkRnVuY3Rpb24oJ29uQ2xvc2UnLCBub29wKSxcbiAgICAgIGRlZmF1bHRlZEZ1bmN0aW9uKCdvbkNhbmNlbCcsIG5vb3ApLFxuICAgICAgZGVmYXVsdGVkRnVuY3Rpb24oJ29uVGFiQ2hhbmdlJywgbm9vcClcbiAgICBdKTtcbiAgICBjb25zdCBjcmVhdGVEaWFsb2cgPSBzcGVjID0+IGFzUmF3KCdkaWFsb2cnLCBkaWFsb2dTY2hlbWEsIHNwZWMpO1xuXG4gICAgY29uc3QgdXJsRGlhbG9nQnV0dG9uU2NoZW1hID0gb2JqT2YoW1xuICAgICAgcmVxdWlyZWRTdHJpbmdFbnVtKCd0eXBlJywgW1xuICAgICAgICAnY2FuY2VsJyxcbiAgICAgICAgJ2N1c3RvbSdcbiAgICAgIF0pLFxuICAgICAgLi4uZGlhbG9nQnV0dG9uRmllbGRzXG4gICAgXSk7XG4gICAgY29uc3QgdXJsRGlhbG9nU2NoZW1hID0gb2JqT2YoW1xuICAgICAgcmVxdWlyZWRTdHJpbmcoJ3RpdGxlJyksXG4gICAgICByZXF1aXJlZFN0cmluZygndXJsJyksXG4gICAgICBvcHRpb25OdW1iZXIoJ2hlaWdodCcpLFxuICAgICAgb3B0aW9uTnVtYmVyKCd3aWR0aCcpLFxuICAgICAgb3B0aW9uQXJyYXlPZignYnV0dG9ucycsIHVybERpYWxvZ0J1dHRvblNjaGVtYSksXG4gICAgICBkZWZhdWx0ZWRGdW5jdGlvbignb25BY3Rpb24nLCBub29wKSxcbiAgICAgIGRlZmF1bHRlZEZ1bmN0aW9uKCdvbkNhbmNlbCcsIG5vb3ApLFxuICAgICAgZGVmYXVsdGVkRnVuY3Rpb24oJ29uQ2xvc2UnLCBub29wKSxcbiAgICAgIGRlZmF1bHRlZEZ1bmN0aW9uKCdvbk1lc3NhZ2UnLCBub29wKVxuICAgIF0pO1xuICAgIGNvbnN0IGNyZWF0ZVVybERpYWxvZyA9IHNwZWMgPT4gYXNSYXcoJ2RpYWxvZycsIHVybERpYWxvZ1NjaGVtYSwgc3BlYyk7XG5cbiAgICBjb25zdCBnZXRBbGxPYmplY3RzID0gb2JqID0+IHtcbiAgICAgIGlmIChpc09iamVjdChvYmopKSB7XG4gICAgICAgIHJldHVybiBbb2JqXS5jb25jYXQoYmluZCQzKHZhbHVlcyhvYmopLCBnZXRBbGxPYmplY3RzKSk7XG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgICAgICByZXR1cm4gYmluZCQzKG9iaiwgZ2V0QWxsT2JqZWN0cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGlzTmFtZWRJdGVtID0gb2JqID0+IGlzU3RyaW5nKG9iai50eXBlKSAmJiBpc1N0cmluZyhvYmoubmFtZSk7XG4gICAgY29uc3QgZGF0YVByb2Nlc3NvcnMgPSB7XG4gICAgICBjaGVja2JveDogY2hlY2tib3hEYXRhUHJvY2Vzc29yLFxuICAgICAgY29sb3JpbnB1dDogY29sb3JJbnB1dERhdGFQcm9jZXNzb3IsXG4gICAgICBjb2xvcnBpY2tlcjogY29sb3JQaWNrZXJEYXRhUHJvY2Vzc29yLFxuICAgICAgZHJvcHpvbmU6IGRyb3Bab25lRGF0YVByb2Nlc3NvcixcbiAgICAgIGlucHV0OiBpbnB1dERhdGFQcm9jZXNzb3IsXG4gICAgICBpZnJhbWU6IGlmcmFtZURhdGFQcm9jZXNzb3IsXG4gICAgICBpbWFnZXByZXZpZXc6IGltYWdlUHJldmlld0RhdGFQcm9jZXNzb3IsXG4gICAgICBzZWxlY3Rib3g6IHNlbGVjdEJveERhdGFQcm9jZXNzb3IsXG4gICAgICBzaXplaW5wdXQ6IHNpemVJbnB1dERhdGFQcm9jZXNzb3IsXG4gICAgICBzbGlkZXI6IHNsaWRlcklucHV0RGF0YVByb2Nlc3NvcixcbiAgICAgIGxpc3Rib3g6IGxpc3RCb3hEYXRhUHJvY2Vzc29yLFxuICAgICAgc2l6ZTogc2l6ZUlucHV0RGF0YVByb2Nlc3NvcixcbiAgICAgIHRleHRhcmVhOiB0ZXh0QXJlYURhdGFQcm9jZXNzb3IsXG4gICAgICB1cmxpbnB1dDogdXJsSW5wdXREYXRhUHJvY2Vzc29yLFxuICAgICAgY3VzdG9tZWRpdG9yOiBjdXN0b21FZGl0b3JEYXRhUHJvY2Vzc29yLFxuICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvbkRhdGFQcm9jZXNzb3IsXG4gICAgICB0b2dnbGVtZW51aXRlbTogZGlhbG9nVG9nZ2xlTWVudUl0ZW1EYXRhUHJvY2Vzc29yXG4gICAgfTtcbiAgICBjb25zdCBnZXREYXRhUHJvY2Vzc29yID0gaXRlbSA9PiBPcHRpb25hbC5mcm9tKGRhdGFQcm9jZXNzb3JzW2l0ZW0udHlwZV0pO1xuICAgIGNvbnN0IGdldE5hbWVkSXRlbXMgPSBzdHJ1Y3R1cmUgPT4gZmlsdGVyJDIoZ2V0QWxsT2JqZWN0cyhzdHJ1Y3R1cmUpLCBpc05hbWVkSXRlbSk7XG5cbiAgICBjb25zdCBjcmVhdGVEYXRhVmFsaWRhdG9yID0gc3RydWN0dXJlID0+IHtcbiAgICAgIGNvbnN0IG5hbWVkSXRlbXMgPSBnZXROYW1lZEl0ZW1zKHN0cnVjdHVyZSk7XG4gICAgICBjb25zdCBmaWVsZHMgPSBiaW5kJDMobmFtZWRJdGVtcywgaXRlbSA9PiBnZXREYXRhUHJvY2Vzc29yKGl0ZW0pLmZvbGQoKCkgPT4gW10sIHNjaGVtYSA9PiBbcmVxdWlyZWRPZihpdGVtLm5hbWUsIHNjaGVtYSldKSk7XG4gICAgICByZXR1cm4gb2JqT2YoZmllbGRzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZXh0cmFjdCA9IHN0cnVjdHVyZSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBpbnRlcm5hbERpYWxvZyA9IGdldE9yRGllKGNyZWF0ZURpYWxvZyhzdHJ1Y3R1cmUpKTtcbiAgICAgIGNvbnN0IGRhdGFWYWxpZGF0b3IgPSBjcmVhdGVEYXRhVmFsaWRhdG9yKHN0cnVjdHVyZSk7XG4gICAgICBjb25zdCBpbml0aWFsRGF0YSA9IChfYSA9IHN0cnVjdHVyZS5pbml0aWFsRGF0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge307XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnRlcm5hbERpYWxvZyxcbiAgICAgICAgZGF0YVZhbGlkYXRvcixcbiAgICAgICAgaW5pdGlhbERhdGFcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBEaWFsb2dNYW5hZ2VyID0ge1xuICAgICAgb3BlbjogKGZhY3RvcnksIHN0cnVjdHVyZSkgPT4ge1xuICAgICAgICBjb25zdCBleHRyYWN0aW9uID0gZXh0cmFjdChzdHJ1Y3R1cmUpO1xuICAgICAgICByZXR1cm4gZmFjdG9yeShleHRyYWN0aW9uLmludGVybmFsRGlhbG9nLCBleHRyYWN0aW9uLmluaXRpYWxEYXRhLCBleHRyYWN0aW9uLmRhdGFWYWxpZGF0b3IpO1xuICAgICAgfSxcbiAgICAgIG9wZW5Vcmw6IChmYWN0b3J5LCBzdHJ1Y3R1cmUpID0+IHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxEaWFsb2cgPSBnZXRPckRpZShjcmVhdGVVcmxEaWFsb2coc3RydWN0dXJlKSk7XG4gICAgICAgIHJldHVybiBmYWN0b3J5KGludGVybmFsRGlhbG9nKTtcbiAgICAgIH0sXG4gICAgICByZWRpYWw6IHN0cnVjdHVyZSA9PiBleHRyYWN0KHN0cnVjdHVyZSlcbiAgICB9O1xuXG4gICAgY29uc3QgZXZlbnRzID0gKHJlZmxlY3RpbmdDb25maWcsIHJlZmxlY3RpbmdTdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlID0gKGNvbXBvbmVudCwgZGF0YSkgPT4ge1xuICAgICAgICByZWZsZWN0aW5nQ29uZmlnLnVwZGF0ZVN0YXRlLmVhY2godXBkYXRlU3RhdGUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld1N0YXRlID0gdXBkYXRlU3RhdGUoY29tcG9uZW50LCBkYXRhKTtcbiAgICAgICAgICByZWZsZWN0aW5nU3RhdGUuc2V0KG5ld1N0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlZmxlY3RpbmdDb25maWcucmVuZGVyQ29tcG9uZW50cy5lYWNoKHJlbmRlckNvbXBvbmVudHMgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0NvbXBvbmVudHMgPSByZW5kZXJDb21wb25lbnRzKGRhdGEsIHJlZmxlY3RpbmdTdGF0ZS5nZXQoKSk7XG4gICAgICAgICAgY29uc3QgcmVwbGFjZXIgPSByZWZsZWN0aW5nQ29uZmlnLnJldXNlRG9tID8gd2l0aFJldXNlIDogd2l0aG91dFJldXNlO1xuICAgICAgICAgIHJlcGxhY2VyKGNvbXBvbmVudCwgbmV3Q29tcG9uZW50cyk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBkZXJpdmUkMihbXG4gICAgICAgIHJ1biQxKHJlY2VpdmUoKSwgKGNvbXBvbmVudCwgbWVzc2FnZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlY2VpdmluZ0RhdGEgPSBtZXNzYWdlO1xuICAgICAgICAgIGlmICghcmVjZWl2aW5nRGF0YS51bml2ZXJzYWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5uZWwgPSByZWZsZWN0aW5nQ29uZmlnLmNoYW5uZWw7XG4gICAgICAgICAgICBpZiAoY29udGFpbnMkMihyZWNlaXZpbmdEYXRhLmNoYW5uZWxzLCBjaGFubmVsKSkge1xuICAgICAgICAgICAgICB1cGRhdGUoY29tcG9uZW50LCByZWNlaXZpbmdEYXRhLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHJ1bk9uQXR0YWNoZWQoKGNvbXAsIF9zZSkgPT4ge1xuICAgICAgICAgIHJlZmxlY3RpbmdDb25maWcuaW5pdGlhbERhdGEuZWFjaChyYXdEYXRhID0+IHtcbiAgICAgICAgICAgIHVwZGF0ZShjb21wLCByYXdEYXRhKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgIF0pO1xuICAgIH07XG5cbiAgICB2YXIgQWN0aXZlUmVmbGVjdGluZyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBldmVudHM6IGV2ZW50c1xuICAgIH0pO1xuXG4gICAgY29uc3QgZ2V0U3RhdGUgPSAoY29tcG9uZW50LCByZXBsYWNlQ29uZmlnLCByZWZsZWN0U3RhdGUpID0+IHJlZmxlY3RTdGF0ZTtcblxuICAgIHZhciBSZWZsZWN0aW5nQXBpcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBnZXRTdGF0ZTogZ2V0U3RhdGVcbiAgICB9KTtcblxuICAgIHZhciBSZWZsZWN0aW5nU2NoZW1hID0gW1xuICAgICAgcmVxdWlyZWQkMSgnY2hhbm5lbCcpLFxuICAgICAgb3B0aW9uJDMoJ3JlbmRlckNvbXBvbmVudHMnKSxcbiAgICAgIG9wdGlvbiQzKCd1cGRhdGVTdGF0ZScpLFxuICAgICAgb3B0aW9uJDMoJ2luaXRpYWxEYXRhJyksXG4gICAgICBkZWZhdWx0ZWRCb29sZWFuKCdyZXVzZURvbScsIHRydWUpXG4gICAgXTtcblxuICAgIGNvbnN0IGluaXQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjZWxsID0gQ2VsbChPcHRpb25hbC5ub25lKCkpO1xuICAgICAgY29uc3QgY2xlYXIgPSAoKSA9PiBjZWxsLnNldChPcHRpb25hbC5ub25lKCkpO1xuICAgICAgY29uc3QgcmVhZFN0YXRlID0gKCkgPT4gY2VsbC5nZXQoKS5nZXRPcignbm9uZScpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVhZFN0YXRlLFxuICAgICAgICBnZXQ6IGNlbGwuZ2V0LFxuICAgICAgICBzZXQ6IGNlbGwuc2V0LFxuICAgICAgICBjbGVhclxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgdmFyIFJlZmxlY3RpbmdTdGF0ZSA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBpbml0OiBpbml0XG4gICAgfSk7XG5cbiAgICBjb25zdCBSZWZsZWN0aW5nID0gY3JlYXRlJDQoe1xuICAgICAgZmllbGRzOiBSZWZsZWN0aW5nU2NoZW1hLFxuICAgICAgbmFtZTogJ3JlZmxlY3RpbmcnLFxuICAgICAgYWN0aXZlOiBBY3RpdmVSZWZsZWN0aW5nLFxuICAgICAgYXBpczogUmVmbGVjdGluZ0FwaXMsXG4gICAgICBzdGF0ZTogUmVmbGVjdGluZ1N0YXRlXG4gICAgfSk7XG5cbiAgICBjb25zdCB0b1ZhbGlkVmFsdWVzID0gdmFsdWVzID0+IHtcbiAgICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICBlYWNoKHZhbHVlcywgKHZhbHVlLCBuYW1lKSA9PiB7XG4gICAgICAgIHZhbHVlLmZvbGQoKCkgPT4ge1xuICAgICAgICAgIGVycm9ycy5wdXNoKG5hbWUpO1xuICAgICAgICB9LCB2ID0+IHtcbiAgICAgICAgICByZXN1bHRbbmFtZV0gPSB2O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGVycm9ycy5sZW5ndGggPiAwID8gUmVzdWx0LmVycm9yKGVycm9ycykgOiBSZXN1bHQudmFsdWUocmVzdWx0KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVyQm9keVBhbmVsID0gKHNwZWMsIGRpYWxvZ0RhdGEsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgbWVtRm9ybSA9IHJlY29yZChGb3JtLnNrZXRjaChwYXJ0cyA9PiAoe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LWZvcm0nXS5jb25jYXQoc3BlYy5jbGFzc2VzKVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBtYXAkMihzcGVjLml0ZW1zLCBpdGVtID0+IGludGVycHJldEluRm9ybShwYXJ0cywgaXRlbSwgZGlhbG9nRGF0YSwgYmFja3N0YWdlKSlcbiAgICAgIH0pKSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LWRpYWxvZ19fYm9keSddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFt7XG4gICAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgICAgY2xhc3NlczogWyd0b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQnXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IFttZW1Gb3JtLmFzU3BlYygpXVxuICAgICAgICAgIH1dLFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBtb2RlOiAnYWN5Y2xpYycsXG4gICAgICAgICAgICB1c2VUYWJzdG9wQXQ6IG5vdChpc1BzZXVkb1N0b3ApXG4gICAgICAgICAgfSksXG4gICAgICAgICAgQ29tcG9zaW5nQ29uZmlncy5tZW1lbnRvKG1lbUZvcm0pLFxuICAgICAgICAgIG1lbWVudG8obWVtRm9ybSwge1xuICAgICAgICAgICAgcG9zdHByb2Nlc3M6IGZvcm1WYWx1ZSA9PiB0b1ZhbGlkVmFsdWVzKGZvcm1WYWx1ZSkuZm9sZChlcnIgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH0sIGlkZW50aXR5KVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNvbmZpZygnZGlhbG9nLWJvZHktcGFuZWwnLCBbcnVuJDEoZm9jdXNpbigpLCAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgICAgICAgY29tcC5nZXRTeXN0ZW0oKS5icm9hZGNhc3RPbihbZGlhbG9nRm9jdXNTaGlmdGVkQ2hhbm5lbF0sIHsgbmV3Rm9jdXM6IE9wdGlvbmFsLnNvbWUoc2UuZXZlbnQudGFyZ2V0KSB9KTtcbiAgICAgICAgICAgIH0pXSlcbiAgICAgICAgXSlcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGZhY3RvcnkkMyA9IChkZXRhaWwsIF9zcGVjKSA9PiAoe1xuICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgY29tcG9uZW50czogZGV0YWlsLmNvbXBvbmVudHMsXG4gICAgICBldmVudHM6IGV2ZW50cyRhKGRldGFpbC5hY3Rpb24pLFxuICAgICAgYmVoYXZpb3VyczogYXVnbWVudChkZXRhaWwudGFiQnV0dG9uQmVoYXZpb3VycywgW1xuICAgICAgICBGb2N1c2luZy5jb25maWcoe30pLFxuICAgICAgICBLZXlpbmcuY29uZmlnKHtcbiAgICAgICAgICBtb2RlOiAnZXhlY3V0aW9uJyxcbiAgICAgICAgICB1c2VTcGFjZTogdHJ1ZSxcbiAgICAgICAgICB1c2VFbnRlcjogdHJ1ZVxuICAgICAgICB9KSxcbiAgICAgICAgUmVwcmVzZW50aW5nLmNvbmZpZyh7XG4gICAgICAgICAgc3RvcmU6IHtcbiAgICAgICAgICAgIG1vZGU6ICdtZW1vcnknLFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiBkZXRhaWwudmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICBdKSxcbiAgICAgIGRvbU1vZGlmaWNhdGlvbjogZGV0YWlsLmRvbU1vZGlmaWNhdGlvblxuICAgIH0pO1xuICAgIGNvbnN0IFRhYkJ1dHRvbiA9IHNpbmdsZSh7XG4gICAgICBuYW1lOiAnVGFiQnV0dG9uJyxcbiAgICAgIGNvbmZpZ0ZpZWxkczogW1xuICAgICAgICBkZWZhdWx0ZWQoJ3VpZCcsIHVuZGVmaW5lZCksXG4gICAgICAgIHJlcXVpcmVkJDEoJ3ZhbHVlJyksXG4gICAgICAgIGZpZWxkJDEoJ2RvbScsICdkb20nLCBtZXJnZVdpdGhUaHVuaygoKSA9PiAoe1xuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICdyb2xlJzogJ3RhYicsXG4gICAgICAgICAgICAnaWQnOiBnZW5lcmF0ZSQ2KCdhcmlhJyksXG4gICAgICAgICAgICAnYXJpYS1zZWxlY3RlZCc6ICdmYWxzZSdcbiAgICAgICAgICB9XG4gICAgICAgIH0pKSwgYW55VmFsdWUoKSksXG4gICAgICAgIG9wdGlvbiQzKCdhY3Rpb24nKSxcbiAgICAgICAgZGVmYXVsdGVkKCdkb21Nb2RpZmljYXRpb24nLCB7fSksXG4gICAgICAgIGZpZWxkKCd0YWJCdXR0b25CZWhhdmlvdXJzJywgW1xuICAgICAgICAgIEZvY3VzaW5nLFxuICAgICAgICAgIEtleWluZyxcbiAgICAgICAgICBSZXByZXNlbnRpbmdcbiAgICAgICAgXSksXG4gICAgICAgIHJlcXVpcmVkJDEoJ3ZpZXcnKVxuICAgICAgXSxcbiAgICAgIGZhY3Rvcnk6IGZhY3RvcnkkM1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc2NoZW1hJDEgPSBjb25zdGFudCQxKFtcbiAgICAgIHJlcXVpcmVkJDEoJ3RhYnMnKSxcbiAgICAgIHJlcXVpcmVkJDEoJ2RvbScpLFxuICAgICAgZGVmYXVsdGVkKCdjbGlja1RvRGlzbWlzcycsIGZhbHNlKSxcbiAgICAgIGZpZWxkKCd0YWJiYXJCZWhhdmlvdXJzJywgW1xuICAgICAgICBIaWdobGlnaHRpbmcsXG4gICAgICAgIEtleWluZ1xuICAgICAgXSksXG4gICAgICBtYXJrZXJzJDEoW1xuICAgICAgICAndGFiQ2xhc3MnLFxuICAgICAgICAnc2VsZWN0ZWRDbGFzcydcbiAgICAgIF0pXG4gICAgXSk7XG4gICAgY29uc3QgdGFic1BhcnQgPSBncm91cCh7XG4gICAgICBmYWN0b3J5OiBUYWJCdXR0b24sXG4gICAgICBuYW1lOiAndGFicycsXG4gICAgICB1bml0OiAndGFiJyxcbiAgICAgIG92ZXJyaWRlczogYmFyRGV0YWlsID0+IHtcbiAgICAgICAgY29uc3QgZGlzbWlzc1RhYiQxID0gKHRhYmJhciwgYnV0dG9uKSA9PiB7XG4gICAgICAgICAgSGlnaGxpZ2h0aW5nLmRlaGlnaGxpZ2h0KHRhYmJhciwgYnV0dG9uKTtcbiAgICAgICAgICBlbWl0V2l0aCh0YWJiYXIsIGRpc21pc3NUYWIoKSwge1xuICAgICAgICAgICAgdGFiYmFyLFxuICAgICAgICAgICAgYnV0dG9uXG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNoYW5nZVRhYiQxID0gKHRhYmJhciwgYnV0dG9uKSA9PiB7XG4gICAgICAgICAgSGlnaGxpZ2h0aW5nLmhpZ2hsaWdodCh0YWJiYXIsIGJ1dHRvbik7XG4gICAgICAgICAgZW1pdFdpdGgodGFiYmFyLCBjaGFuZ2VUYWIoKSwge1xuICAgICAgICAgICAgdGFiYmFyLFxuICAgICAgICAgICAgYnV0dG9uXG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWN0aW9uOiBidXR0b24gPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFiYmFyID0gYnV0dG9uLmdldFN5c3RlbSgpLmdldEJ5VWlkKGJhckRldGFpbC51aWQpLmdldE9yRGllKCk7XG4gICAgICAgICAgICBjb25zdCBhY3RpdmVCdXR0b24gPSBIaWdobGlnaHRpbmcuaXNIaWdobGlnaHRlZCh0YWJiYXIsIGJ1dHRvbik7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9ICgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChhY3RpdmVCdXR0b24gJiYgYmFyRGV0YWlsLmNsaWNrVG9EaXNtaXNzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpc21pc3NUYWIkMTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICghYWN0aXZlQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZVRhYiQxO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBub29wO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgcmVzcG9uc2UodGFiYmFyLCBidXR0b24pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZG9tTW9kaWZpY2F0aW9uOiB7IGNsYXNzZXM6IFtiYXJEZXRhaWwubWFya2Vycy50YWJDbGFzc10gfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHBhcnRzJDEgPSBjb25zdGFudCQxKFt0YWJzUGFydF0pO1xuXG4gICAgY29uc3QgZmFjdG9yeSQyID0gKGRldGFpbCwgY29tcG9uZW50cywgX3NwZWMsIF9leHRlcm5hbHMpID0+ICh7XG4gICAgICAndWlkJzogZGV0YWlsLnVpZCxcbiAgICAgICdkb20nOiBkZXRhaWwuZG9tLFxuICAgICAgY29tcG9uZW50cyxcbiAgICAgICdkZWJ1Zy5za2V0Y2hlcic6ICdUYWJiYXInLFxuICAgICAgJ2RvbU1vZGlmaWNhdGlvbic6IHsgYXR0cmlidXRlczogeyByb2xlOiAndGFibGlzdCcgfSB9LFxuICAgICAgJ2JlaGF2aW91cnMnOiBhdWdtZW50KGRldGFpbC50YWJiYXJCZWhhdmlvdXJzLCBbXG4gICAgICAgIEhpZ2hsaWdodGluZy5jb25maWcoe1xuICAgICAgICAgIGhpZ2hsaWdodENsYXNzOiBkZXRhaWwubWFya2Vycy5zZWxlY3RlZENsYXNzLFxuICAgICAgICAgIGl0ZW1DbGFzczogZGV0YWlsLm1hcmtlcnMudGFiQ2xhc3MsXG4gICAgICAgICAgb25IaWdobGlnaHQ6ICh0YWJiYXIsIHRhYikgPT4ge1xuICAgICAgICAgICAgc2V0JDkodGFiLmVsZW1lbnQsICdhcmlhLXNlbGVjdGVkJywgJ3RydWUnKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uRGVoaWdobGlnaHQ6ICh0YWJiYXIsIHRhYikgPT4ge1xuICAgICAgICAgICAgc2V0JDkodGFiLmVsZW1lbnQsICdhcmlhLXNlbGVjdGVkJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgbW9kZTogJ2Zsb3cnLFxuICAgICAgICAgIGdldEluaXRpYWw6IHRhYmJhciA9PiB7XG4gICAgICAgICAgICByZXR1cm4gSGlnaGxpZ2h0aW5nLmdldEhpZ2hsaWdodGVkKHRhYmJhcikubWFwKHRhYiA9PiB0YWIuZWxlbWVudCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3RvcjogJy4nICsgZGV0YWlsLm1hcmtlcnMudGFiQ2xhc3MsXG4gICAgICAgICAgZXhlY3V0ZU9uTW92ZTogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgXSlcbiAgICB9KTtcbiAgICBjb25zdCBUYWJiYXIgPSBjb21wb3NpdGUoe1xuICAgICAgbmFtZTogJ1RhYmJhcicsXG4gICAgICBjb25maWdGaWVsZHM6IHNjaGVtYSQxKCksXG4gICAgICBwYXJ0RmllbGRzOiBwYXJ0cyQxKCksXG4gICAgICBmYWN0b3J5OiBmYWN0b3J5JDJcbiAgICB9KTtcblxuICAgIGNvbnN0IGZhY3RvcnkkMSA9IChkZXRhaWwsIF9zcGVjKSA9PiAoe1xuICAgICAgdWlkOiBkZXRhaWwudWlkLFxuICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgYmVoYXZpb3VyczogYXVnbWVudChkZXRhaWwudGFidmlld0JlaGF2aW91cnMsIFtSZXBsYWNpbmcuY29uZmlnKHt9KV0pLFxuICAgICAgZG9tTW9kaWZpY2F0aW9uOiB7IGF0dHJpYnV0ZXM6IHsgcm9sZTogJ3RhYnBhbmVsJyB9IH1cbiAgICB9KTtcbiAgICBjb25zdCBUYWJ2aWV3ID0gc2luZ2xlKHtcbiAgICAgIG5hbWU6ICdUYWJ2aWV3JyxcbiAgICAgIGNvbmZpZ0ZpZWxkczogW2ZpZWxkKCd0YWJ2aWV3QmVoYXZpb3VycycsIFtSZXBsYWNpbmddKV0sXG4gICAgICBmYWN0b3J5OiBmYWN0b3J5JDFcbiAgICB9KTtcblxuICAgIGNvbnN0IHNjaGVtYSA9IGNvbnN0YW50JDEoW1xuICAgICAgZGVmYXVsdGVkKCdzZWxlY3RGaXJzdCcsIHRydWUpLFxuICAgICAgb25IYW5kbGVyKCdvbkNoYW5nZVRhYicpLFxuICAgICAgb25IYW5kbGVyKCdvbkRpc21pc3NUYWInKSxcbiAgICAgIGRlZmF1bHRlZCgndGFicycsIFtdKSxcbiAgICAgIGZpZWxkKCd0YWJTZWN0aW9uQmVoYXZpb3VycycsIFtdKVxuICAgIF0pO1xuICAgIGNvbnN0IGJhclBhcnQgPSByZXF1aXJlZCh7XG4gICAgICBmYWN0b3J5OiBUYWJiYXIsXG4gICAgICBzY2hlbWE6IFtcbiAgICAgICAgcmVxdWlyZWQkMSgnZG9tJyksXG4gICAgICAgIHJlcXVpcmVkT2JqT2YoJ21hcmtlcnMnLCBbXG4gICAgICAgICAgcmVxdWlyZWQkMSgndGFiQ2xhc3MnKSxcbiAgICAgICAgICByZXF1aXJlZCQxKCdzZWxlY3RlZENsYXNzJylcbiAgICAgICAgXSlcbiAgICAgIF0sXG4gICAgICBuYW1lOiAndGFiYmFyJyxcbiAgICAgIGRlZmF1bHRzOiBkZXRhaWwgPT4ge1xuICAgICAgICByZXR1cm4geyB0YWJzOiBkZXRhaWwudGFicyB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHZpZXdQYXJ0ID0gcmVxdWlyZWQoe1xuICAgICAgZmFjdG9yeTogVGFidmlldyxcbiAgICAgIG5hbWU6ICd0YWJ2aWV3J1xuICAgIH0pO1xuICAgIGNvbnN0IHBhcnRzID0gY29uc3RhbnQkMShbXG4gICAgICBiYXJQYXJ0LFxuICAgICAgdmlld1BhcnRcbiAgICBdKTtcblxuICAgIGNvbnN0IGZhY3RvcnkgPSAoZGV0YWlsLCBjb21wb25lbnRzLCBfc3BlYywgX2V4dGVybmFscykgPT4ge1xuICAgICAgY29uc3QgY2hhbmdlVGFiJDEgPSBidXR0b24gPT4ge1xuICAgICAgICBjb25zdCB0YWJWYWx1ZSA9IFJlcHJlc2VudGluZy5nZXRWYWx1ZShidXR0b24pO1xuICAgICAgICBnZXRQYXJ0KGJ1dHRvbiwgZGV0YWlsLCAndGFidmlldycpLmVhY2godGFidmlldyA9PiB7XG4gICAgICAgICAgY29uc3QgdGFiV2l0aFZhbHVlID0gZmluZCQ1KGRldGFpbC50YWJzLCB0ID0+IHQudmFsdWUgPT09IHRhYlZhbHVlKTtcbiAgICAgICAgICB0YWJXaXRoVmFsdWUuZWFjaCh0YWJEYXRhID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhbmVsID0gdGFiRGF0YS52aWV3KCk7XG4gICAgICAgICAgICBnZXRPcHQoYnV0dG9uLmVsZW1lbnQsICdpZCcpLmVhY2goaWQgPT4ge1xuICAgICAgICAgICAgICBzZXQkOSh0YWJ2aWV3LmVsZW1lbnQsICdhcmlhLWxhYmVsbGVkYnknLCBpZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFJlcGxhY2luZy5zZXQodGFidmlldywgcGFuZWwpO1xuICAgICAgICAgICAgZGV0YWlsLm9uQ2hhbmdlVGFiKHRhYnZpZXcsIGJ1dHRvbiwgcGFuZWwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjaGFuZ2VUYWJCeSA9IChzZWN0aW9uLCBieVByZWQpID0+IHtcbiAgICAgICAgZ2V0UGFydChzZWN0aW9uLCBkZXRhaWwsICd0YWJiYXInKS5lYWNoKHRhYmJhciA9PiB7XG4gICAgICAgICAgYnlQcmVkKHRhYmJhcikuZWFjaChlbWl0RXhlY3V0ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVpZDogZGV0YWlsLnVpZCxcbiAgICAgICAgZG9tOiBkZXRhaWwuZG9tLFxuICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICBiZWhhdmlvdXJzOiBnZXQkMyhkZXRhaWwudGFiU2VjdGlvbkJlaGF2aW91cnMpLFxuICAgICAgICBldmVudHM6IGRlcml2ZSQyKGZsYXR0ZW4oW1xuICAgICAgICAgIGRldGFpbC5zZWxlY3RGaXJzdCA/IFtydW5PbkF0dGFjaGVkKChzZWN0aW9uLCBfc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgY2hhbmdlVGFiQnkoc2VjdGlvbiwgSGlnaGxpZ2h0aW5nLmdldEZpcnN0KTtcbiAgICAgICAgICAgIH0pXSA6IFtdLFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIHJ1biQxKGNoYW5nZVRhYigpLCAoc2VjdGlvbiwgc2ltdWxhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gc2ltdWxhdGVkRXZlbnQuZXZlbnQuYnV0dG9uO1xuICAgICAgICAgICAgICBjaGFuZ2VUYWIkMShidXR0b24pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBydW4kMShkaXNtaXNzVGFiKCksIChzZWN0aW9uLCBzaW11bGF0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBidXR0b24gPSBzaW11bGF0ZWRFdmVudC5ldmVudC5idXR0b247XG4gICAgICAgICAgICAgIGRldGFpbC5vbkRpc21pc3NUYWIoc2VjdGlvbiwgYnV0dG9uKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICBdKSksXG4gICAgICAgIGFwaXM6IHtcbiAgICAgICAgICBnZXRWaWV3SXRlbXM6IHNlY3Rpb24gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGdldFBhcnQoc2VjdGlvbiwgZGV0YWlsLCAndGFidmlldycpLm1hcCh0YWJ2aWV3ID0+IFJlcGxhY2luZy5jb250ZW50cyh0YWJ2aWV3KSkuZ2V0T3IoW10pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc2hvd1RhYjogKHNlY3Rpb24sIHRhYktleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2V0VGFiSWZOb3RBY3RpdmUgPSB0YWJiYXIgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVzID0gSGlnaGxpZ2h0aW5nLmdldENhbmRpZGF0ZXModGFiYmFyKTtcbiAgICAgICAgICAgICAgY29uc3Qgb3B0VGFiID0gZmluZCQ1KGNhbmRpZGF0ZXMsIGMgPT4gUmVwcmVzZW50aW5nLmdldFZhbHVlKGMpID09PSB0YWJLZXkpO1xuICAgICAgICAgICAgICByZXR1cm4gb3B0VGFiLmZpbHRlcih0YWIgPT4gIUhpZ2hsaWdodGluZy5pc0hpZ2hsaWdodGVkKHRhYmJhciwgdGFiKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2hhbmdlVGFiQnkoc2VjdGlvbiwgZ2V0VGFiSWZOb3RBY3RpdmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IFRhYlNlY3Rpb24gPSBjb21wb3NpdGUoe1xuICAgICAgbmFtZTogJ1RhYlNlY3Rpb24nLFxuICAgICAgY29uZmlnRmllbGRzOiBzY2hlbWEoKSxcbiAgICAgIHBhcnRGaWVsZHM6IHBhcnRzKCksXG4gICAgICBmYWN0b3J5LFxuICAgICAgYXBpczoge1xuICAgICAgICBnZXRWaWV3SXRlbXM6IChhcGlzLCBjb21wb25lbnQpID0+IGFwaXMuZ2V0Vmlld0l0ZW1zKGNvbXBvbmVudCksXG4gICAgICAgIHNob3dUYWI6IChhcGlzLCBjb21wb25lbnQsIHRhYktleSkgPT4ge1xuICAgICAgICAgIGFwaXMuc2hvd1RhYihjb21wb25lbnQsIHRhYktleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IG1lYXN1cmVIZWlnaHRzID0gKGFsbFRhYnMsIHRhYnZpZXcsIHRhYnZpZXdDb21wKSA9PiBtYXAkMihhbGxUYWJzLCAoX3RhYiwgaSkgPT4ge1xuICAgICAgUmVwbGFjaW5nLnNldCh0YWJ2aWV3Q29tcCwgYWxsVGFic1tpXS52aWV3KCkpO1xuICAgICAgY29uc3QgcmVjdCA9IHRhYnZpZXcuZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgUmVwbGFjaW5nLnNldCh0YWJ2aWV3Q29tcCwgW10pO1xuICAgICAgcmV0dXJuIHJlY3QuaGVpZ2h0O1xuICAgIH0pO1xuICAgIGNvbnN0IGdldE1heEhlaWdodCA9IGhlaWdodHMgPT4gaGVhZChzb3J0KGhlaWdodHMsIChhLCBiKSA9PiB7XG4gICAgICBpZiAoYSA+IGIpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIGlmIChhIDwgYikge1xuICAgICAgICByZXR1cm4gKzE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9KSk7XG4gICAgY29uc3QgZ2V0TWF4VGFidmlld0hlaWdodCA9IChkaWFsb2csIHRhYnZpZXcsIHRhYmxpc3QpID0+IHtcbiAgICAgIGNvbnN0IGRvY3VtZW50RWxlbWVudCQxID0gZG9jdW1lbnRFbGVtZW50KGRpYWxvZykuZG9tO1xuICAgICAgY29uc3Qgcm9vdEVsbSA9IGFuY2VzdG9yKGRpYWxvZywgJy50b3gtZGlhbG9nLXdyYXAnKS5nZXRPcihkaWFsb2cpO1xuICAgICAgY29uc3QgaXNGaXhlZCA9IGdldCRlKHJvb3RFbG0sICdwb3NpdGlvbicpID09PSAnZml4ZWQnO1xuICAgICAgbGV0IG1heEhlaWdodDtcbiAgICAgIGlmIChpc0ZpeGVkKSB7XG4gICAgICAgIG1heEhlaWdodCA9IE1hdGgubWF4KGRvY3VtZW50RWxlbWVudCQxLmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1heEhlaWdodCA9IE1hdGgubWF4KGRvY3VtZW50RWxlbWVudCQxLm9mZnNldEhlaWdodCwgZG9jdW1lbnRFbGVtZW50JDEuc2Nyb2xsSGVpZ2h0KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRhYnZpZXdIZWlnaHQgPSBnZXQkZCh0YWJ2aWV3KTtcbiAgICAgIGNvbnN0IGlzVGFiTGlzdEJlc2lkZSA9IHRhYnZpZXcuZG9tLm9mZnNldExlZnQgPj0gdGFibGlzdC5kb20ub2Zmc2V0TGVmdCArIGdldCRjKHRhYmxpc3QpO1xuICAgICAgY29uc3QgY3VycmVudFRhYkhlaWdodCA9IGlzVGFiTGlzdEJlc2lkZSA/IE1hdGgubWF4KGdldCRkKHRhYmxpc3QpLCB0YWJ2aWV3SGVpZ2h0KSA6IHRhYnZpZXdIZWlnaHQ7XG4gICAgICBjb25zdCBkaWFsb2dUb3BNYXJnaW4gPSBwYXJzZUludChnZXQkZShkaWFsb2csICdtYXJnaW4tdG9wJyksIDEwKSB8fCAwO1xuICAgICAgY29uc3QgZGlhbG9nQm90dG9tTWFyZ2luID0gcGFyc2VJbnQoZ2V0JGUoZGlhbG9nLCAnbWFyZ2luLWJvdHRvbScpLCAxMCkgfHwgMDtcbiAgICAgIGNvbnN0IGRpYWxvZ0hlaWdodCA9IGdldCRkKGRpYWxvZykgKyBkaWFsb2dUb3BNYXJnaW4gKyBkaWFsb2dCb3R0b21NYXJnaW47XG4gICAgICBjb25zdCBjaHJvbWVIZWlnaHQgPSBkaWFsb2dIZWlnaHQgLSBjdXJyZW50VGFiSGVpZ2h0O1xuICAgICAgcmV0dXJuIG1heEhlaWdodCAtIGNocm9tZUhlaWdodDtcbiAgICB9O1xuICAgIGNvbnN0IHNob3dUYWIgPSAoYWxsVGFicywgY29tcCkgPT4ge1xuICAgICAgaGVhZChhbGxUYWJzKS5lYWNoKHRhYiA9PiBUYWJTZWN0aW9uLnNob3dUYWIoY29tcCwgdGFiLnZhbHVlKSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRUYWJ2aWV3SGVpZ2h0ID0gKHRhYnZpZXcsIGhlaWdodCkgPT4ge1xuICAgICAgc2V0JDgodGFidmlldywgJ2hlaWdodCcsIGhlaWdodCArICdweCcpO1xuICAgICAgc2V0JDgodGFidmlldywgJ2ZsZXgtYmFzaXMnLCBoZWlnaHQgKyAncHgnKTtcbiAgICB9O1xuICAgIGNvbnN0IHVwZGF0ZVRhYnZpZXdIZWlnaHQgPSAoZGlhbG9nQm9keSwgdGFidmlldywgbWF4VGFiSGVpZ2h0KSA9PiB7XG4gICAgICBhbmNlc3RvcihkaWFsb2dCb2R5LCAnW3JvbGU9XCJkaWFsb2dcIl0nKS5lYWNoKGRpYWxvZyA9PiB7XG4gICAgICAgIGRlc2NlbmRhbnQoZGlhbG9nLCAnW3JvbGU9XCJ0YWJsaXN0XCJdJykuZWFjaCh0YWJsaXN0ID0+IHtcbiAgICAgICAgICBtYXhUYWJIZWlnaHQuZ2V0KCkubWFwKGhlaWdodCA9PiB7XG4gICAgICAgICAgICBzZXQkOCh0YWJ2aWV3LCAnaGVpZ2h0JywgJzAnKTtcbiAgICAgICAgICAgIHNldCQ4KHRhYnZpZXcsICdmbGV4LWJhc2lzJywgJzAnKTtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihoZWlnaHQsIGdldE1heFRhYnZpZXdIZWlnaHQoZGlhbG9nLCB0YWJ2aWV3LCB0YWJsaXN0KSk7XG4gICAgICAgICAgfSkuZWFjaChoZWlnaHQgPT4ge1xuICAgICAgICAgICAgc2V0VGFidmlld0hlaWdodCh0YWJ2aWV3LCBoZWlnaHQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0VGFidmlldyA9IGRpYWxvZyA9PiBkZXNjZW5kYW50KGRpYWxvZywgJ1tyb2xlPVwidGFicGFuZWxcIl0nKTtcbiAgICBjb25zdCBzbWFydE1vZGUgPSBhbGxUYWJzID0+IHtcbiAgICAgIGNvbnN0IG1heFRhYkhlaWdodCA9IHZhbHVlJDIoKTtcbiAgICAgIGNvbnN0IGV4dHJhRXZlbnRzID0gW1xuICAgICAgICBydW5PbkF0dGFjaGVkKGNvbXAgPT4ge1xuICAgICAgICAgIGNvbnN0IGRpYWxvZyA9IGNvbXAuZWxlbWVudDtcbiAgICAgICAgICBnZXRUYWJ2aWV3KGRpYWxvZykuZWFjaCh0YWJ2aWV3ID0+IHtcbiAgICAgICAgICAgIHNldCQ4KHRhYnZpZXcsICd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuICAgICAgICAgICAgY29tcC5nZXRTeXN0ZW0oKS5nZXRCeURvbSh0YWJ2aWV3KS50b09wdGlvbmFsKCkuZWFjaCh0YWJ2aWV3Q29tcCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGhlaWdodHMgPSBtZWFzdXJlSGVpZ2h0cyhhbGxUYWJzLCB0YWJ2aWV3LCB0YWJ2aWV3Q29tcCk7XG4gICAgICAgICAgICAgIGNvbnN0IG1heFRhYkhlaWdodE9wdCA9IGdldE1heEhlaWdodChoZWlnaHRzKTtcbiAgICAgICAgICAgICAgbWF4VGFiSGVpZ2h0T3B0LmZvbGQobWF4VGFiSGVpZ2h0LmNsZWFyLCBtYXhUYWJIZWlnaHQuc2V0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdXBkYXRlVGFidmlld0hlaWdodChkaWFsb2csIHRhYnZpZXcsIG1heFRhYkhlaWdodCk7XG4gICAgICAgICAgICByZW1vdmUkNih0YWJ2aWV3LCAndmlzaWJpbGl0eScpO1xuICAgICAgICAgICAgc2hvd1RhYihhbGxUYWJzLCBjb21wKTtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHVwZGF0ZVRhYnZpZXdIZWlnaHQoZGlhbG9nLCB0YWJ2aWV3LCBtYXhUYWJIZWlnaHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLFxuICAgICAgICBydW4kMSh3aW5kb3dSZXNpemUoKSwgY29tcCA9PiB7XG4gICAgICAgICAgY29uc3QgZGlhbG9nID0gY29tcC5lbGVtZW50O1xuICAgICAgICAgIGdldFRhYnZpZXcoZGlhbG9nKS5lYWNoKHRhYnZpZXcgPT4ge1xuICAgICAgICAgICAgdXBkYXRlVGFidmlld0hlaWdodChkaWFsb2csIHRhYnZpZXcsIG1heFRhYkhlaWdodCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLFxuICAgICAgICBydW4kMShmb3JtUmVzaXplRXZlbnQsIChjb21wLCBfc2UpID0+IHtcbiAgICAgICAgICBjb25zdCBkaWFsb2cgPSBjb21wLmVsZW1lbnQ7XG4gICAgICAgICAgZ2V0VGFidmlldyhkaWFsb2cpLmVhY2godGFidmlldyA9PiB7XG4gICAgICAgICAgICBjb25zdCBvbGRGb2N1cyA9IGFjdGl2ZSQxKGdldFJvb3ROb2RlKHRhYnZpZXcpKTtcbiAgICAgICAgICAgIHNldCQ4KHRhYnZpZXcsICd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuICAgICAgICAgICAgY29uc3Qgb2xkSGVpZ2h0ID0gZ2V0UmF3KHRhYnZpZXcsICdoZWlnaHQnKS5tYXAoaCA9PiBwYXJzZUludChoLCAxMCkpO1xuICAgICAgICAgICAgcmVtb3ZlJDYodGFidmlldywgJ2hlaWdodCcpO1xuICAgICAgICAgICAgcmVtb3ZlJDYodGFidmlldywgJ2ZsZXgtYmFzaXMnKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0hlaWdodCA9IHRhYnZpZXcuZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IGhhc0dyb3duID0gb2xkSGVpZ2h0LmZvcmFsbChoID0+IG5ld0hlaWdodCA+IGgpO1xuICAgICAgICAgICAgaWYgKGhhc0dyb3duKSB7XG4gICAgICAgICAgICAgIG1heFRhYkhlaWdodC5zZXQobmV3SGVpZ2h0KTtcbiAgICAgICAgICAgICAgdXBkYXRlVGFidmlld0hlaWdodChkaWFsb2csIHRhYnZpZXcsIG1heFRhYkhlaWdodCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvbGRIZWlnaHQuZWFjaChoID0+IHtcbiAgICAgICAgICAgICAgICBzZXRUYWJ2aWV3SGVpZ2h0KHRhYnZpZXcsIGgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlbW92ZSQ2KHRhYnZpZXcsICd2aXNpYmlsaXR5Jyk7XG4gICAgICAgICAgICBvbGRGb2N1cy5lYWNoKGZvY3VzJDMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgXTtcbiAgICAgIGNvbnN0IHNlbGVjdEZpcnN0ID0gZmFsc2U7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBleHRyYUV2ZW50cyxcbiAgICAgICAgc2VsZWN0Rmlyc3RcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IFNlbmREYXRhVG9TZWN0aW9uQ2hhbm5lbCA9ICdzZW5kLWRhdGEtdG8tc2VjdGlvbic7XG4gICAgY29uc3QgU2VuZERhdGFUb1ZpZXdDaGFubmVsID0gJ3NlbmQtZGF0YS10by12aWV3JztcbiAgICBjb25zdCByZW5kZXJUYWJQYW5lbCA9IChzcGVjLCBkaWFsb2dEYXRhLCBiYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlZFZhbHVlID0gQ2VsbCh7fSk7XG4gICAgICBjb25zdCB1cGRhdGVEYXRhV2l0aEZvcm0gPSBmb3JtID0+IHtcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBSZXByZXNlbnRpbmcuZ2V0VmFsdWUoZm9ybSk7XG4gICAgICAgIGNvbnN0IHZhbGlkRGF0YSA9IHRvVmFsaWRWYWx1ZXMoZm9ybURhdGEpLmdldE9yKHt9KTtcbiAgICAgICAgY29uc3QgY3VycmVudERhdGEgPSBzdG9yZWRWYWx1ZS5nZXQoKTtcbiAgICAgICAgY29uc3QgbmV3RGF0YSA9IGRlZXBNZXJnZShjdXJyZW50RGF0YSwgdmFsaWREYXRhKTtcbiAgICAgICAgc3RvcmVkVmFsdWUuc2V0KG5ld0RhdGEpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldERhdGFPbkZvcm0gPSBmb3JtID0+IHtcbiAgICAgICAgY29uc3QgdGFiRGF0YSA9IHN0b3JlZFZhbHVlLmdldCgpO1xuICAgICAgICBSZXByZXNlbnRpbmcuc2V0VmFsdWUoZm9ybSwgdGFiRGF0YSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgb2xkVGFiID0gQ2VsbChudWxsKTtcbiAgICAgIGNvbnN0IGFsbFRhYnMgPSBtYXAkMihzcGVjLnRhYnMsIHRhYiA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IHRhYi5uYW1lLFxuICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LWRpYWxvZ19fYm9keS1uYXYtaXRlbSddXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21wb25lbnRzOiBbdGV4dCQyKGJhY2tzdGFnZS5zaGFyZWQucHJvdmlkZXJzLnRyYW5zbGF0ZSh0YWIudGl0bGUpKV0sXG4gICAgICAgICAgdmlldzogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFtGb3JtLnNrZXRjaChwYXJ0cyA9PiAoe1xuICAgICAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LWZvcm0nXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29tcG9uZW50czogbWFwJDIodGFiLml0ZW1zLCBpdGVtID0+IGludGVycHJldEluRm9ybShwYXJ0cywgaXRlbSwgZGlhbG9nRGF0YSwgYmFja3N0YWdlKSksXG4gICAgICAgICAgICAgICAgZm9ybUJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICAgICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgICAgICAgICAgICBtb2RlOiAnYWN5Y2xpYycsXG4gICAgICAgICAgICAgICAgICAgIHVzZVRhYnN0b3BBdDogbm90KGlzUHNldWRvU3RvcClcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgY29uZmlnKCdUYWJWaWV3LmZvcm0uZXZlbnRzJywgW1xuICAgICAgICAgICAgICAgICAgICBydW5PbkF0dGFjaGVkKHNldERhdGFPbkZvcm0pLFxuICAgICAgICAgICAgICAgICAgICBydW5PbkRldGFjaGVkKHVwZGF0ZURhdGFXaXRoRm9ybSlcbiAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgUmVjZWl2aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5uZWxzOiB3cmFwQWxsKFtcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFNlbmREYXRhVG9TZWN0aW9uQ2hhbm5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IG9uUmVjZWl2ZTogdXBkYXRlRGF0YVdpdGhGb3JtIH1cbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogU2VuZERhdGFUb1ZpZXdDaGFubmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgb25SZWNlaXZlOiBzZXREYXRhT25Gb3JtIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIH0pKV07XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICBjb25zdCB0YWJNb2RlID0gc21hcnRNb2RlKGFsbFRhYnMpO1xuICAgICAgcmV0dXJuIFRhYlNlY3Rpb24uc2tldGNoKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1kaWFsb2dfX2JvZHknXVxuICAgICAgICB9LFxuICAgICAgICBvbkNoYW5nZVRhYjogKHNlY3Rpb24sIGJ1dHRvbiwgX3ZpZXdJdGVtcykgPT4ge1xuICAgICAgICAgIGNvbnN0IG5hbWUgPSBSZXByZXNlbnRpbmcuZ2V0VmFsdWUoYnV0dG9uKTtcbiAgICAgICAgICBlbWl0V2l0aChzZWN0aW9uLCBmb3JtVGFiQ2hhbmdlRXZlbnQsIHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBvbGROYW1lOiBvbGRUYWIuZ2V0KClcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBvbGRUYWIuc2V0KG5hbWUpO1xuICAgICAgICB9LFxuICAgICAgICB0YWJzOiBhbGxUYWJzLFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgVGFiU2VjdGlvbi5wYXJ0cy50YWJiYXIoe1xuICAgICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LWRpYWxvZ19fYm9keS1uYXYnXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IFtUYWJiYXIucGFydHMudGFicyh7fSldLFxuICAgICAgICAgICAgbWFya2Vyczoge1xuICAgICAgICAgICAgICB0YWJDbGFzczogJ3RveC10YWInLFxuICAgICAgICAgICAgICBzZWxlY3RlZENsYXNzOiAndG94LWRpYWxvZ19fYm9keS1uYXYtaXRlbS0tYWN0aXZlJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRhYmJhckJlaGF2aW91cnM6IGRlcml2ZSQxKFtUYWJzdG9wcGluZy5jb25maWcoe30pXSlcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBUYWJTZWN0aW9uLnBhcnRzLnRhYnZpZXcoe1xuICAgICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFsndG94LWRpYWxvZ19fYm9keS1jb250ZW50J11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RGaXJzdDogdGFiTW9kZS5zZWxlY3RGaXJzdCxcbiAgICAgICAgdGFiU2VjdGlvbkJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBjb25maWcoJ3RhYnBhbmVsJywgdGFiTW9kZS5leHRyYUV2ZW50cyksXG4gICAgICAgICAgS2V5aW5nLmNvbmZpZyh7IG1vZGU6ICdhY3ljbGljJyB9KSxcbiAgICAgICAgICBDb21wb3NpbmcuY29uZmlnKHsgZmluZDogY29tcCA9PiBoZWFkKFRhYlNlY3Rpb24uZ2V0Vmlld0l0ZW1zKGNvbXApKSB9KSxcbiAgICAgICAgICB3aXRoQ29tcChPcHRpb25hbC5ub25lKCksIHRzZWN0aW9uID0+IHtcbiAgICAgICAgICAgIHRzZWN0aW9uLmdldFN5c3RlbSgpLmJyb2FkY2FzdE9uKFtTZW5kRGF0YVRvU2VjdGlvbkNoYW5uZWxdLCB7fSk7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmVkVmFsdWUuZ2V0KCk7XG4gICAgICAgICAgfSwgKHRzZWN0aW9uLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgc3RvcmVkVmFsdWUuc2V0KHZhbHVlKTtcbiAgICAgICAgICAgIHRzZWN0aW9uLmdldFN5c3RlbSgpLmJyb2FkY2FzdE9uKFtTZW5kRGF0YVRvVmlld0NoYW5uZWxdLCB7fSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgXSlcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJCb2R5ID0gKHNwZWMsIGRpYWxvZ0lkLCBjb250ZW50SWQsIGJhY2tzdGFnZSwgYXJpYUF0dHJzKSA9PiB7XG4gICAgICBjb25zdCByZW5kZXJDb21wb25lbnRzID0gaW5jb21pbmcgPT4ge1xuICAgICAgICBjb25zdCBib2R5ID0gaW5jb21pbmcuYm9keTtcbiAgICAgICAgc3dpdGNoIChib2R5LnR5cGUpIHtcbiAgICAgICAgY2FzZSAndGFicGFuZWwnOiB7XG4gICAgICAgICAgICByZXR1cm4gW3JlbmRlclRhYlBhbmVsKGJvZHksIGluY29taW5nLmluaXRpYWxEYXRhLCBiYWNrc3RhZ2UpXTtcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHJldHVybiBbcmVuZGVyQm9keVBhbmVsKGJvZHksIGluY29taW5nLmluaXRpYWxEYXRhLCBiYWNrc3RhZ2UpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCB1cGRhdGVTdGF0ZSA9IChfY29tcCwgaW5jb21pbmcpID0+IE9wdGlvbmFsLnNvbWUoeyBpc1RhYlBhbmVsOiAoKSA9PiBpbmNvbWluZy5ib2R5LnR5cGUgPT09ICd0YWJwYW5lbCcgfSk7XG4gICAgICBjb25zdCBhcmlhQXR0cmlidXRlcyA9IHsgJ2FyaWEtbGl2ZSc6ICdwb2xpdGUnIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LWRpYWxvZ19fY29udGVudC1qcyddLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIC4uLmNvbnRlbnRJZC5tYXAoeCA9PiAoeyBpZDogeCB9KSkuZ2V0T3Ioe30pLFxuICAgICAgICAgICAgLi4uYXJpYUF0dHJzID8gYXJpYUF0dHJpYnV0ZXMgOiB7fVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW10sXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBDb21wb3NpbmdDb25maWdzLmNoaWxkQXQoMCksXG4gICAgICAgICAgUmVmbGVjdGluZy5jb25maWcoe1xuICAgICAgICAgICAgY2hhbm5lbDogYCR7IGJvZHlDaGFubmVsIH0tJHsgZGlhbG9nSWQgfWAsXG4gICAgICAgICAgICB1cGRhdGVTdGF0ZSxcbiAgICAgICAgICAgIHJlbmRlckNvbXBvbmVudHMsXG4gICAgICAgICAgICBpbml0aWFsRGF0YTogc3BlY1xuICAgICAgICAgIH0pXG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVySW5saW5lQm9keSA9IChzcGVjLCBkaWFsb2dJZCwgY29udGVudElkLCBiYWNrc3RhZ2UsIGFyaWFBdHRycykgPT4gcmVuZGVyQm9keShzcGVjLCBkaWFsb2dJZCwgT3B0aW9uYWwuc29tZShjb250ZW50SWQpLCBiYWNrc3RhZ2UsIGFyaWFBdHRycyk7XG4gICAgY29uc3QgcmVuZGVyTW9kYWxCb2R5ID0gKHNwZWMsIGRpYWxvZ0lkLCBiYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IGJvZHlTcGVjID0gcmVuZGVyQm9keShzcGVjLCBkaWFsb2dJZCwgT3B0aW9uYWwubm9uZSgpLCBiYWNrc3RhZ2UsIGZhbHNlKTtcbiAgICAgIHJldHVybiBNb2RhbERpYWxvZy5wYXJ0cy5ib2R5KGJvZHlTcGVjKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlcklmcmFtZUJvZHkgPSBzcGVjID0+IHtcbiAgICAgIGNvbnN0IGJvZHlTcGVjID0ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LWRpYWxvZ19fY29udGVudC1qcyddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFt7XG4gICAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgICAgY2xhc3NlczogWyd0b3gtZGlhbG9nX19ib2R5LWlmcmFtZSddXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcG9uZW50czogW2NyYWZ0KE9wdGlvbmFsLm5vbmUoKSwge1xuICAgICAgICAgICAgICAgIGRvbToge1xuICAgICAgICAgICAgICAgICAgdGFnOiAnaWZyYW1lJyxcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgc3JjOiBzcGVjLnVybCB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbXG4gICAgICAgICAgICAgICAgICBUYWJzdG9wcGluZy5jb25maWcoe30pLFxuICAgICAgICAgICAgICAgICAgRm9jdXNpbmcuY29uZmlnKHt9KVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIH0pXVxuICAgICAgICAgIH1dLFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbS2V5aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBtb2RlOiAnYWN5Y2xpYycsXG4gICAgICAgICAgICB1c2VUYWJzdG9wQXQ6IG5vdChpc1BzZXVkb1N0b3ApXG4gICAgICAgICAgfSldKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBNb2RhbERpYWxvZy5wYXJ0cy5ib2R5KGJvZHlTcGVjKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgICdAYmFiZWwvaGVscGVycyAtIHR5cGVvZic7XG4gICAgICByZXR1cm4gX3R5cGVvZiA9ICdmdW5jdGlvbicgPT0gdHlwZW9mIFN5bWJvbCAmJiAnc3ltYm9sJyA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICAgIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogJiYgJ2Z1bmN0aW9uJyA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/ICdzeW1ib2wnIDogdHlwZW9mIG9iajtcbiAgICAgIH0sIF90eXBlb2Yob2JqKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICd1bmRlZmluZWQnIHx8ICFSZWZsZWN0LmNvbnN0cnVjdClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICh0eXBlb2YgUHJveHkgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7XG4gICAgICBpZiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpKSB7XG4gICAgICAgIF9jb25zdHJ1Y3QgPSBSZWZsZWN0LmNvbnN0cnVjdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgICAgICB2YXIgYSA9IFtudWxsXTtcbiAgICAgICAgICBhLnB1c2guYXBwbHkoYSwgYXJncyk7XG4gICAgICAgICAgdmFyIENvbnN0cnVjdG9yID0gRnVuY3Rpb24uYmluZC5hcHBseShQYXJlbnQsIGEpO1xuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgICAgICAgIGlmIChDbGFzcylcbiAgICAgICAgICAgIF9zZXRQcm90b3R5cGVPZihpbnN0YW5jZSwgQ2xhc3MucHJvdG90eXBlKTtcbiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gICAgICByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKVxuICAgICAgICByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gICAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlclsnQEBpdGVyYXRvciddICE9IG51bGwpXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gICAgICBpZiAoIW8pXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICh0eXBlb2YgbyA9PT0gJ3N0cmluZycpXG4gICAgICAgIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICAgICAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICAgICAgaWYgKG4gPT09ICdPYmplY3QnICYmIG8uY29uc3RydWN0b3IpXG4gICAgICAgIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICBpZiAobiA9PT0gJ01hcCcgfHwgbiA9PT0gJ1NldCcpXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICAgICAgaWYgKG4gPT09ICdBcmd1bWVudHMnIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKVxuICAgICAgICByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgICAgIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKVxuICAgICAgICBsZW4gPSBhcnIubGVuZ3RoO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKVxuICAgICAgICBhcnIyW2ldID0gYXJyW2ldO1xuICAgICAgcmV0dXJuIGFycjI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4nKTtcbiAgICB9XG4gICAgdmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0Lmhhc093blByb3BlcnR5LCBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiwgaXNGcm96ZW4gPSBPYmplY3QuaXNGcm96ZW4sIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mLCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAgIHZhciBmcmVlemUgPSBPYmplY3QuZnJlZXplLCBzZWFsID0gT2JqZWN0LnNlYWwsIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG4gICAgdmFyIF9yZWYgPSB0eXBlb2YgUmVmbGVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgUmVmbGVjdCwgYXBwbHkgPSBfcmVmLmFwcGx5LCBjb25zdHJ1Y3QgPSBfcmVmLmNvbnN0cnVjdDtcbiAgICBpZiAoIWFwcGx5KSB7XG4gICAgICBhcHBseSA9IGZ1bmN0aW9uIGFwcGx5KGZ1biwgdGhpc1ZhbHVlLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiBmdW4uYXBwbHkodGhpc1ZhbHVlLCBhcmdzKTtcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghZnJlZXplKSB7XG4gICAgICBmcmVlemUgPSBmdW5jdGlvbiBmcmVlemUoeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghc2VhbCkge1xuICAgICAgc2VhbCA9IGZ1bmN0aW9uIHNlYWwoeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghY29uc3RydWN0KSB7XG4gICAgICBjb25zdHJ1Y3QgPSBmdW5jdGlvbiBjb25zdHJ1Y3QoRnVuYywgYXJncykge1xuICAgICAgICByZXR1cm4gX2NvbnN0cnVjdChGdW5jLCBfdG9Db25zdW1hYmxlQXJyYXkoYXJncykpO1xuICAgICAgfTtcbiAgICB9XG4gICAgdmFyIGFycmF5Rm9yRWFjaCA9IHVuYXBwbHkoQXJyYXkucHJvdG90eXBlLmZvckVhY2gpO1xuICAgIHZhciBhcnJheVBvcCA9IHVuYXBwbHkoQXJyYXkucHJvdG90eXBlLnBvcCk7XG4gICAgdmFyIGFycmF5UHVzaCA9IHVuYXBwbHkoQXJyYXkucHJvdG90eXBlLnB1c2gpO1xuICAgIHZhciBzdHJpbmdUb0xvd2VyQ2FzZSA9IHVuYXBwbHkoU3RyaW5nLnByb3RvdHlwZS50b0xvd2VyQ2FzZSk7XG4gICAgdmFyIHN0cmluZ01hdGNoID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLm1hdGNoKTtcbiAgICB2YXIgc3RyaW5nUmVwbGFjZSA9IHVuYXBwbHkoU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbiAgICB2YXIgc3RyaW5nSW5kZXhPZiA9IHVuYXBwbHkoU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mKTtcbiAgICB2YXIgc3RyaW5nVHJpbSA9IHVuYXBwbHkoU3RyaW5nLnByb3RvdHlwZS50cmltKTtcbiAgICB2YXIgcmVnRXhwVGVzdCA9IHVuYXBwbHkoUmVnRXhwLnByb3RvdHlwZS50ZXN0KTtcbiAgICB2YXIgdHlwZUVycm9yQ3JlYXRlID0gdW5jb25zdHJ1Y3QoVHlwZUVycm9yKTtcbiAgICBmdW5jdGlvbiB1bmFwcGx5KGZ1bmMpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAodGhpc0FyZykge1xuICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpO1xuICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdW5jb25zdHJ1Y3QoZnVuYykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb25zdHJ1Y3QoZnVuYywgYXJncyk7XG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRUb1NldChzZXQsIGFycmF5KSB7XG4gICAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgc2V0UHJvdG90eXBlT2Yoc2V0LCBudWxsKTtcbiAgICAgIH1cbiAgICAgIHZhciBsID0gYXJyYXkubGVuZ3RoO1xuICAgICAgd2hpbGUgKGwtLSkge1xuICAgICAgICB2YXIgZWxlbWVudCA9IGFycmF5W2xdO1xuICAgICAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdmFyIGxjRWxlbWVudCA9IHN0cmluZ1RvTG93ZXJDYXNlKGVsZW1lbnQpO1xuICAgICAgICAgIGlmIChsY0VsZW1lbnQgIT09IGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmICghaXNGcm96ZW4oYXJyYXkpKSB7XG4gICAgICAgICAgICAgIGFycmF5W2xdID0gbGNFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlbWVudCA9IGxjRWxlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0W2VsZW1lbnRdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsb25lKG9iamVjdCkge1xuICAgICAgdmFyIG5ld09iamVjdCA9IGNyZWF0ZShudWxsKTtcbiAgICAgIHZhciBwcm9wZXJ0eTtcbiAgICAgIGZvciAocHJvcGVydHkgaW4gb2JqZWN0KSB7XG4gICAgICAgIGlmIChhcHBseShoYXNPd25Qcm9wZXJ0eSwgb2JqZWN0LCBbcHJvcGVydHldKSkge1xuICAgICAgICAgIG5ld09iamVjdFtwcm9wZXJ0eV0gPSBvYmplY3RbcHJvcGVydHldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3T2JqZWN0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBsb29rdXBHZXR0ZXIob2JqZWN0LCBwcm9wKSB7XG4gICAgICB3aGlsZSAob2JqZWN0ICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBkZXNjID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcCk7XG4gICAgICAgIGlmIChkZXNjKSB7XG4gICAgICAgICAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5hcHBseShkZXNjLmdldCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2YgZGVzYy52YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHVuYXBwbHkoZGVzYy52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9iamVjdCA9IGdldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBmYWxsYmFja1ZhbHVlKGVsZW1lbnQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdmYWxsYmFjayB2YWx1ZSBmb3InLCBlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsbGJhY2tWYWx1ZTtcbiAgICB9XG4gICAgdmFyIGh0bWwkMSA9IGZyZWV6ZShbXG4gICAgICAnYScsXG4gICAgICAnYWJicicsXG4gICAgICAnYWNyb255bScsXG4gICAgICAnYWRkcmVzcycsXG4gICAgICAnYXJlYScsXG4gICAgICAnYXJ0aWNsZScsXG4gICAgICAnYXNpZGUnLFxuICAgICAgJ2F1ZGlvJyxcbiAgICAgICdiJyxcbiAgICAgICdiZGknLFxuICAgICAgJ2JkbycsXG4gICAgICAnYmlnJyxcbiAgICAgICdibGluaycsXG4gICAgICAnYmxvY2txdW90ZScsXG4gICAgICAnYm9keScsXG4gICAgICAnYnInLFxuICAgICAgJ2J1dHRvbicsXG4gICAgICAnY2FudmFzJyxcbiAgICAgICdjYXB0aW9uJyxcbiAgICAgICdjZW50ZXInLFxuICAgICAgJ2NpdGUnLFxuICAgICAgJ2NvZGUnLFxuICAgICAgJ2NvbCcsXG4gICAgICAnY29sZ3JvdXAnLFxuICAgICAgJ2NvbnRlbnQnLFxuICAgICAgJ2RhdGEnLFxuICAgICAgJ2RhdGFsaXN0JyxcbiAgICAgICdkZCcsXG4gICAgICAnZGVjb3JhdG9yJyxcbiAgICAgICdkZWwnLFxuICAgICAgJ2RldGFpbHMnLFxuICAgICAgJ2RmbicsXG4gICAgICAnZGlhbG9nJyxcbiAgICAgICdkaXInLFxuICAgICAgJ2RpdicsXG4gICAgICAnZGwnLFxuICAgICAgJ2R0JyxcbiAgICAgICdlbGVtZW50JyxcbiAgICAgICdlbScsXG4gICAgICAnZmllbGRzZXQnLFxuICAgICAgJ2ZpZ2NhcHRpb24nLFxuICAgICAgJ2ZpZ3VyZScsXG4gICAgICAnZm9udCcsXG4gICAgICAnZm9vdGVyJyxcbiAgICAgICdmb3JtJyxcbiAgICAgICdoMScsXG4gICAgICAnaDInLFxuICAgICAgJ2gzJyxcbiAgICAgICdoNCcsXG4gICAgICAnaDUnLFxuICAgICAgJ2g2JyxcbiAgICAgICdoZWFkJyxcbiAgICAgICdoZWFkZXInLFxuICAgICAgJ2hncm91cCcsXG4gICAgICAnaHInLFxuICAgICAgJ2h0bWwnLFxuICAgICAgJ2knLFxuICAgICAgJ2ltZycsXG4gICAgICAnaW5wdXQnLFxuICAgICAgJ2lucycsXG4gICAgICAna2JkJyxcbiAgICAgICdsYWJlbCcsXG4gICAgICAnbGVnZW5kJyxcbiAgICAgICdsaScsXG4gICAgICAnbWFpbicsXG4gICAgICAnbWFwJyxcbiAgICAgICdtYXJrJyxcbiAgICAgICdtYXJxdWVlJyxcbiAgICAgICdtZW51JyxcbiAgICAgICdtZW51aXRlbScsXG4gICAgICAnbWV0ZXInLFxuICAgICAgJ25hdicsXG4gICAgICAnbm9icicsXG4gICAgICAnb2wnLFxuICAgICAgJ29wdGdyb3VwJyxcbiAgICAgICdvcHRpb24nLFxuICAgICAgJ291dHB1dCcsXG4gICAgICAncCcsXG4gICAgICAncGljdHVyZScsXG4gICAgICAncHJlJyxcbiAgICAgICdwcm9ncmVzcycsXG4gICAgICAncScsXG4gICAgICAncnAnLFxuICAgICAgJ3J0JyxcbiAgICAgICdydWJ5JyxcbiAgICAgICdzJyxcbiAgICAgICdzYW1wJyxcbiAgICAgICdzZWN0aW9uJyxcbiAgICAgICdzZWxlY3QnLFxuICAgICAgJ3NoYWRvdycsXG4gICAgICAnc21hbGwnLFxuICAgICAgJ3NvdXJjZScsXG4gICAgICAnc3BhY2VyJyxcbiAgICAgICdzcGFuJyxcbiAgICAgICdzdHJpa2UnLFxuICAgICAgJ3N0cm9uZycsXG4gICAgICAnc3R5bGUnLFxuICAgICAgJ3N1YicsXG4gICAgICAnc3VtbWFyeScsXG4gICAgICAnc3VwJyxcbiAgICAgICd0YWJsZScsXG4gICAgICAndGJvZHknLFxuICAgICAgJ3RkJyxcbiAgICAgICd0ZW1wbGF0ZScsXG4gICAgICAndGV4dGFyZWEnLFxuICAgICAgJ3Rmb290JyxcbiAgICAgICd0aCcsXG4gICAgICAndGhlYWQnLFxuICAgICAgJ3RpbWUnLFxuICAgICAgJ3RyJyxcbiAgICAgICd0cmFjaycsXG4gICAgICAndHQnLFxuICAgICAgJ3UnLFxuICAgICAgJ3VsJyxcbiAgICAgICd2YXInLFxuICAgICAgJ3ZpZGVvJyxcbiAgICAgICd3YnInXG4gICAgXSk7XG4gICAgdmFyIHN2ZyQxID0gZnJlZXplKFtcbiAgICAgICdzdmcnLFxuICAgICAgJ2EnLFxuICAgICAgJ2FsdGdseXBoJyxcbiAgICAgICdhbHRnbHlwaGRlZicsXG4gICAgICAnYWx0Z2x5cGhpdGVtJyxcbiAgICAgICdhbmltYXRlY29sb3InLFxuICAgICAgJ2FuaW1hdGVtb3Rpb24nLFxuICAgICAgJ2FuaW1hdGV0cmFuc2Zvcm0nLFxuICAgICAgJ2NpcmNsZScsXG4gICAgICAnY2xpcHBhdGgnLFxuICAgICAgJ2RlZnMnLFxuICAgICAgJ2Rlc2MnLFxuICAgICAgJ2VsbGlwc2UnLFxuICAgICAgJ2ZpbHRlcicsXG4gICAgICAnZm9udCcsXG4gICAgICAnZycsXG4gICAgICAnZ2x5cGgnLFxuICAgICAgJ2dseXBocmVmJyxcbiAgICAgICdoa2VybicsXG4gICAgICAnaW1hZ2UnLFxuICAgICAgJ2xpbmUnLFxuICAgICAgJ2xpbmVhcmdyYWRpZW50JyxcbiAgICAgICdtYXJrZXInLFxuICAgICAgJ21hc2snLFxuICAgICAgJ21ldGFkYXRhJyxcbiAgICAgICdtcGF0aCcsXG4gICAgICAncGF0aCcsXG4gICAgICAncGF0dGVybicsXG4gICAgICAncG9seWdvbicsXG4gICAgICAncG9seWxpbmUnLFxuICAgICAgJ3JhZGlhbGdyYWRpZW50JyxcbiAgICAgICdyZWN0JyxcbiAgICAgICdzdG9wJyxcbiAgICAgICdzdHlsZScsXG4gICAgICAnc3dpdGNoJyxcbiAgICAgICdzeW1ib2wnLFxuICAgICAgJ3RleHQnLFxuICAgICAgJ3RleHRwYXRoJyxcbiAgICAgICd0aXRsZScsXG4gICAgICAndHJlZicsXG4gICAgICAndHNwYW4nLFxuICAgICAgJ3ZpZXcnLFxuICAgICAgJ3ZrZXJuJ1xuICAgIF0pO1xuICAgIHZhciBzdmdGaWx0ZXJzID0gZnJlZXplKFtcbiAgICAgICdmZUJsZW5kJyxcbiAgICAgICdmZUNvbG9yTWF0cml4JyxcbiAgICAgICdmZUNvbXBvbmVudFRyYW5zZmVyJyxcbiAgICAgICdmZUNvbXBvc2l0ZScsXG4gICAgICAnZmVDb252b2x2ZU1hdHJpeCcsXG4gICAgICAnZmVEaWZmdXNlTGlnaHRpbmcnLFxuICAgICAgJ2ZlRGlzcGxhY2VtZW50TWFwJyxcbiAgICAgICdmZURpc3RhbnRMaWdodCcsXG4gICAgICAnZmVGbG9vZCcsXG4gICAgICAnZmVGdW5jQScsXG4gICAgICAnZmVGdW5jQicsXG4gICAgICAnZmVGdW5jRycsXG4gICAgICAnZmVGdW5jUicsXG4gICAgICAnZmVHYXVzc2lhbkJsdXInLFxuICAgICAgJ2ZlSW1hZ2UnLFxuICAgICAgJ2ZlTWVyZ2UnLFxuICAgICAgJ2ZlTWVyZ2VOb2RlJyxcbiAgICAgICdmZU1vcnBob2xvZ3knLFxuICAgICAgJ2ZlT2Zmc2V0JyxcbiAgICAgICdmZVBvaW50TGlnaHQnLFxuICAgICAgJ2ZlU3BlY3VsYXJMaWdodGluZycsXG4gICAgICAnZmVTcG90TGlnaHQnLFxuICAgICAgJ2ZlVGlsZScsXG4gICAgICAnZmVUdXJidWxlbmNlJ1xuICAgIF0pO1xuICAgIHZhciBzdmdEaXNhbGxvd2VkID0gZnJlZXplKFtcbiAgICAgICdhbmltYXRlJyxcbiAgICAgICdjb2xvci1wcm9maWxlJyxcbiAgICAgICdjdXJzb3InLFxuICAgICAgJ2Rpc2NhcmQnLFxuICAgICAgJ2ZlZHJvcHNoYWRvdycsXG4gICAgICAnZm9udC1mYWNlJyxcbiAgICAgICdmb250LWZhY2UtZm9ybWF0JyxcbiAgICAgICdmb250LWZhY2UtbmFtZScsXG4gICAgICAnZm9udC1mYWNlLXNyYycsXG4gICAgICAnZm9udC1mYWNlLXVyaScsXG4gICAgICAnZm9yZWlnbm9iamVjdCcsXG4gICAgICAnaGF0Y2gnLFxuICAgICAgJ2hhdGNocGF0aCcsXG4gICAgICAnbWVzaCcsXG4gICAgICAnbWVzaGdyYWRpZW50JyxcbiAgICAgICdtZXNocGF0Y2gnLFxuICAgICAgJ21lc2hyb3cnLFxuICAgICAgJ21pc3NpbmctZ2x5cGgnLFxuICAgICAgJ3NjcmlwdCcsXG4gICAgICAnc2V0JyxcbiAgICAgICdzb2xpZGNvbG9yJyxcbiAgICAgICd1bmtub3duJyxcbiAgICAgICd1c2UnXG4gICAgXSk7XG4gICAgdmFyIG1hdGhNbCQxID0gZnJlZXplKFtcbiAgICAgICdtYXRoJyxcbiAgICAgICdtZW5jbG9zZScsXG4gICAgICAnbWVycm9yJyxcbiAgICAgICdtZmVuY2VkJyxcbiAgICAgICdtZnJhYycsXG4gICAgICAnbWdseXBoJyxcbiAgICAgICdtaScsXG4gICAgICAnbWxhYmVsZWR0cicsXG4gICAgICAnbW11bHRpc2NyaXB0cycsXG4gICAgICAnbW4nLFxuICAgICAgJ21vJyxcbiAgICAgICdtb3ZlcicsXG4gICAgICAnbXBhZGRlZCcsXG4gICAgICAnbXBoYW50b20nLFxuICAgICAgJ21yb290JyxcbiAgICAgICdtcm93JyxcbiAgICAgICdtcycsXG4gICAgICAnbXNwYWNlJyxcbiAgICAgICdtc3FydCcsXG4gICAgICAnbXN0eWxlJyxcbiAgICAgICdtc3ViJyxcbiAgICAgICdtc3VwJyxcbiAgICAgICdtc3Vic3VwJyxcbiAgICAgICdtdGFibGUnLFxuICAgICAgJ210ZCcsXG4gICAgICAnbXRleHQnLFxuICAgICAgJ210cicsXG4gICAgICAnbXVuZGVyJyxcbiAgICAgICdtdW5kZXJvdmVyJ1xuICAgIF0pO1xuICAgIHZhciBtYXRoTWxEaXNhbGxvd2VkID0gZnJlZXplKFtcbiAgICAgICdtYWN0aW9uJyxcbiAgICAgICdtYWxpZ25ncm91cCcsXG4gICAgICAnbWFsaWdubWFyaycsXG4gICAgICAnbWxvbmdkaXYnLFxuICAgICAgJ21zY2FycmllcycsXG4gICAgICAnbXNjYXJyeScsXG4gICAgICAnbXNncm91cCcsXG4gICAgICAnbXN0YWNrJyxcbiAgICAgICdtc2xpbmUnLFxuICAgICAgJ21zcm93JyxcbiAgICAgICdzZW1hbnRpY3MnLFxuICAgICAgJ2Fubm90YXRpb24nLFxuICAgICAgJ2Fubm90YXRpb24teG1sJyxcbiAgICAgICdtcHJlc2NyaXB0cycsXG4gICAgICAnbm9uZSdcbiAgICBdKTtcbiAgICB2YXIgdGV4dCA9IGZyZWV6ZShbJyN0ZXh0J10pO1xuICAgIHZhciBodG1sID0gZnJlZXplKFtcbiAgICAgICdhY2NlcHQnLFxuICAgICAgJ2FjdGlvbicsXG4gICAgICAnYWxpZ24nLFxuICAgICAgJ2FsdCcsXG4gICAgICAnYXV0b2NhcGl0YWxpemUnLFxuICAgICAgJ2F1dG9jb21wbGV0ZScsXG4gICAgICAnYXV0b3BpY3R1cmVpbnBpY3R1cmUnLFxuICAgICAgJ2F1dG9wbGF5JyxcbiAgICAgICdiYWNrZ3JvdW5kJyxcbiAgICAgICdiZ2NvbG9yJyxcbiAgICAgICdib3JkZXInLFxuICAgICAgJ2NhcHR1cmUnLFxuICAgICAgJ2NlbGxwYWRkaW5nJyxcbiAgICAgICdjZWxsc3BhY2luZycsXG4gICAgICAnY2hlY2tlZCcsXG4gICAgICAnY2l0ZScsXG4gICAgICAnY2xhc3MnLFxuICAgICAgJ2NsZWFyJyxcbiAgICAgICdjb2xvcicsXG4gICAgICAnY29scycsXG4gICAgICAnY29sc3BhbicsXG4gICAgICAnY29udHJvbHMnLFxuICAgICAgJ2NvbnRyb2xzbGlzdCcsXG4gICAgICAnY29vcmRzJyxcbiAgICAgICdjcm9zc29yaWdpbicsXG4gICAgICAnZGF0ZXRpbWUnLFxuICAgICAgJ2RlY29kaW5nJyxcbiAgICAgICdkZWZhdWx0JyxcbiAgICAgICdkaXInLFxuICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgICdkaXNhYmxlcGljdHVyZWlucGljdHVyZScsXG4gICAgICAnZGlzYWJsZXJlbW90ZXBsYXliYWNrJyxcbiAgICAgICdkb3dubG9hZCcsXG4gICAgICAnZHJhZ2dhYmxlJyxcbiAgICAgICdlbmN0eXBlJyxcbiAgICAgICdlbnRlcmtleWhpbnQnLFxuICAgICAgJ2ZhY2UnLFxuICAgICAgJ2ZvcicsXG4gICAgICAnaGVhZGVycycsXG4gICAgICAnaGVpZ2h0JyxcbiAgICAgICdoaWRkZW4nLFxuICAgICAgJ2hpZ2gnLFxuICAgICAgJ2hyZWYnLFxuICAgICAgJ2hyZWZsYW5nJyxcbiAgICAgICdpZCcsXG4gICAgICAnaW5wdXRtb2RlJyxcbiAgICAgICdpbnRlZ3JpdHknLFxuICAgICAgJ2lzbWFwJyxcbiAgICAgICdraW5kJyxcbiAgICAgICdsYWJlbCcsXG4gICAgICAnbGFuZycsXG4gICAgICAnbGlzdCcsXG4gICAgICAnbG9hZGluZycsXG4gICAgICAnbG9vcCcsXG4gICAgICAnbG93JyxcbiAgICAgICdtYXgnLFxuICAgICAgJ21heGxlbmd0aCcsXG4gICAgICAnbWVkaWEnLFxuICAgICAgJ21ldGhvZCcsXG4gICAgICAnbWluJyxcbiAgICAgICdtaW5sZW5ndGgnLFxuICAgICAgJ211bHRpcGxlJyxcbiAgICAgICdtdXRlZCcsXG4gICAgICAnbmFtZScsXG4gICAgICAnbm9uY2UnLFxuICAgICAgJ25vc2hhZGUnLFxuICAgICAgJ25vdmFsaWRhdGUnLFxuICAgICAgJ25vd3JhcCcsXG4gICAgICAnb3BlbicsXG4gICAgICAnb3B0aW11bScsXG4gICAgICAncGF0dGVybicsXG4gICAgICAncGxhY2Vob2xkZXInLFxuICAgICAgJ3BsYXlzaW5saW5lJyxcbiAgICAgICdwb3N0ZXInLFxuICAgICAgJ3ByZWxvYWQnLFxuICAgICAgJ3B1YmRhdGUnLFxuICAgICAgJ3JhZGlvZ3JvdXAnLFxuICAgICAgJ3JlYWRvbmx5JyxcbiAgICAgICdyZWwnLFxuICAgICAgJ3JlcXVpcmVkJyxcbiAgICAgICdyZXYnLFxuICAgICAgJ3JldmVyc2VkJyxcbiAgICAgICdyb2xlJyxcbiAgICAgICdyb3dzJyxcbiAgICAgICdyb3dzcGFuJyxcbiAgICAgICdzcGVsbGNoZWNrJyxcbiAgICAgICdzY29wZScsXG4gICAgICAnc2VsZWN0ZWQnLFxuICAgICAgJ3NoYXBlJyxcbiAgICAgICdzaXplJyxcbiAgICAgICdzaXplcycsXG4gICAgICAnc3BhbicsXG4gICAgICAnc3JjbGFuZycsXG4gICAgICAnc3RhcnQnLFxuICAgICAgJ3NyYycsXG4gICAgICAnc3Jjc2V0JyxcbiAgICAgICdzdGVwJyxcbiAgICAgICdzdHlsZScsXG4gICAgICAnc3VtbWFyeScsXG4gICAgICAndGFiaW5kZXgnLFxuICAgICAgJ3RpdGxlJyxcbiAgICAgICd0cmFuc2xhdGUnLFxuICAgICAgJ3R5cGUnLFxuICAgICAgJ3VzZW1hcCcsXG4gICAgICAndmFsaWduJyxcbiAgICAgICd2YWx1ZScsXG4gICAgICAnd2lkdGgnLFxuICAgICAgJ3htbG5zJyxcbiAgICAgICdzbG90J1xuICAgIF0pO1xuICAgIHZhciBzdmcgPSBmcmVlemUoW1xuICAgICAgJ2FjY2VudC1oZWlnaHQnLFxuICAgICAgJ2FjY3VtdWxhdGUnLFxuICAgICAgJ2FkZGl0aXZlJyxcbiAgICAgICdhbGlnbm1lbnQtYmFzZWxpbmUnLFxuICAgICAgJ2FzY2VudCcsXG4gICAgICAnYXR0cmlidXRlbmFtZScsXG4gICAgICAnYXR0cmlidXRldHlwZScsXG4gICAgICAnYXppbXV0aCcsXG4gICAgICAnYmFzZWZyZXF1ZW5jeScsXG4gICAgICAnYmFzZWxpbmUtc2hpZnQnLFxuICAgICAgJ2JlZ2luJyxcbiAgICAgICdiaWFzJyxcbiAgICAgICdieScsXG4gICAgICAnY2xhc3MnLFxuICAgICAgJ2NsaXAnLFxuICAgICAgJ2NsaXBwYXRodW5pdHMnLFxuICAgICAgJ2NsaXAtcGF0aCcsXG4gICAgICAnY2xpcC1ydWxlJyxcbiAgICAgICdjb2xvcicsXG4gICAgICAnY29sb3ItaW50ZXJwb2xhdGlvbicsXG4gICAgICAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJyxcbiAgICAgICdjb2xvci1wcm9maWxlJyxcbiAgICAgICdjb2xvci1yZW5kZXJpbmcnLFxuICAgICAgJ2N4JyxcbiAgICAgICdjeScsXG4gICAgICAnZCcsXG4gICAgICAnZHgnLFxuICAgICAgJ2R5JyxcbiAgICAgICdkaWZmdXNlY29uc3RhbnQnLFxuICAgICAgJ2RpcmVjdGlvbicsXG4gICAgICAnZGlzcGxheScsXG4gICAgICAnZGl2aXNvcicsXG4gICAgICAnZHVyJyxcbiAgICAgICdlZGdlbW9kZScsXG4gICAgICAnZWxldmF0aW9uJyxcbiAgICAgICdlbmQnLFxuICAgICAgJ2ZpbGwnLFxuICAgICAgJ2ZpbGwtb3BhY2l0eScsXG4gICAgICAnZmlsbC1ydWxlJyxcbiAgICAgICdmaWx0ZXInLFxuICAgICAgJ2ZpbHRlcnVuaXRzJyxcbiAgICAgICdmbG9vZC1jb2xvcicsXG4gICAgICAnZmxvb2Qtb3BhY2l0eScsXG4gICAgICAnZm9udC1mYW1pbHknLFxuICAgICAgJ2ZvbnQtc2l6ZScsXG4gICAgICAnZm9udC1zaXplLWFkanVzdCcsXG4gICAgICAnZm9udC1zdHJldGNoJyxcbiAgICAgICdmb250LXN0eWxlJyxcbiAgICAgICdmb250LXZhcmlhbnQnLFxuICAgICAgJ2ZvbnQtd2VpZ2h0JyxcbiAgICAgICdmeCcsXG4gICAgICAnZnknLFxuICAgICAgJ2cxJyxcbiAgICAgICdnMicsXG4gICAgICAnZ2x5cGgtbmFtZScsXG4gICAgICAnZ2x5cGhyZWYnLFxuICAgICAgJ2dyYWRpZW50dW5pdHMnLFxuICAgICAgJ2dyYWRpZW50dHJhbnNmb3JtJyxcbiAgICAgICdoZWlnaHQnLFxuICAgICAgJ2hyZWYnLFxuICAgICAgJ2lkJyxcbiAgICAgICdpbWFnZS1yZW5kZXJpbmcnLFxuICAgICAgJ2luJyxcbiAgICAgICdpbjInLFxuICAgICAgJ2snLFxuICAgICAgJ2sxJyxcbiAgICAgICdrMicsXG4gICAgICAnazMnLFxuICAgICAgJ2s0JyxcbiAgICAgICdrZXJuaW5nJyxcbiAgICAgICdrZXlwb2ludHMnLFxuICAgICAgJ2tleXNwbGluZXMnLFxuICAgICAgJ2tleXRpbWVzJyxcbiAgICAgICdsYW5nJyxcbiAgICAgICdsZW5ndGhhZGp1c3QnLFxuICAgICAgJ2xldHRlci1zcGFjaW5nJyxcbiAgICAgICdrZXJuZWxtYXRyaXgnLFxuICAgICAgJ2tlcm5lbHVuaXRsZW5ndGgnLFxuICAgICAgJ2xpZ2h0aW5nLWNvbG9yJyxcbiAgICAgICdsb2NhbCcsXG4gICAgICAnbWFya2VyLWVuZCcsXG4gICAgICAnbWFya2VyLW1pZCcsXG4gICAgICAnbWFya2VyLXN0YXJ0JyxcbiAgICAgICdtYXJrZXJoZWlnaHQnLFxuICAgICAgJ21hcmtlcnVuaXRzJyxcbiAgICAgICdtYXJrZXJ3aWR0aCcsXG4gICAgICAnbWFza2NvbnRlbnR1bml0cycsXG4gICAgICAnbWFza3VuaXRzJyxcbiAgICAgICdtYXgnLFxuICAgICAgJ21hc2snLFxuICAgICAgJ21lZGlhJyxcbiAgICAgICdtZXRob2QnLFxuICAgICAgJ21vZGUnLFxuICAgICAgJ21pbicsXG4gICAgICAnbmFtZScsXG4gICAgICAnbnVtb2N0YXZlcycsXG4gICAgICAnb2Zmc2V0JyxcbiAgICAgICdvcGVyYXRvcicsXG4gICAgICAnb3BhY2l0eScsXG4gICAgICAnb3JkZXInLFxuICAgICAgJ29yaWVudCcsXG4gICAgICAnb3JpZW50YXRpb24nLFxuICAgICAgJ29yaWdpbicsXG4gICAgICAnb3ZlcmZsb3cnLFxuICAgICAgJ3BhaW50LW9yZGVyJyxcbiAgICAgICdwYXRoJyxcbiAgICAgICdwYXRobGVuZ3RoJyxcbiAgICAgICdwYXR0ZXJuY29udGVudHVuaXRzJyxcbiAgICAgICdwYXR0ZXJudHJhbnNmb3JtJyxcbiAgICAgICdwYXR0ZXJudW5pdHMnLFxuICAgICAgJ3BvaW50cycsXG4gICAgICAncHJlc2VydmVhbHBoYScsXG4gICAgICAncHJlc2VydmVhc3BlY3RyYXRpbycsXG4gICAgICAncHJpbWl0aXZldW5pdHMnLFxuICAgICAgJ3InLFxuICAgICAgJ3J4JyxcbiAgICAgICdyeScsXG4gICAgICAncmFkaXVzJyxcbiAgICAgICdyZWZ4JyxcbiAgICAgICdyZWZ5JyxcbiAgICAgICdyZXBlYXRjb3VudCcsXG4gICAgICAncmVwZWF0ZHVyJyxcbiAgICAgICdyZXN0YXJ0JyxcbiAgICAgICdyZXN1bHQnLFxuICAgICAgJ3JvdGF0ZScsXG4gICAgICAnc2NhbGUnLFxuICAgICAgJ3NlZWQnLFxuICAgICAgJ3NoYXBlLXJlbmRlcmluZycsXG4gICAgICAnc3BlY3VsYXJjb25zdGFudCcsXG4gICAgICAnc3BlY3VsYXJleHBvbmVudCcsXG4gICAgICAnc3ByZWFkbWV0aG9kJyxcbiAgICAgICdzdGFydG9mZnNldCcsXG4gICAgICAnc3RkZGV2aWF0aW9uJyxcbiAgICAgICdzdGl0Y2h0aWxlcycsXG4gICAgICAnc3RvcC1jb2xvcicsXG4gICAgICAnc3RvcC1vcGFjaXR5JyxcbiAgICAgICdzdHJva2UtZGFzaGFycmF5JyxcbiAgICAgICdzdHJva2UtZGFzaG9mZnNldCcsXG4gICAgICAnc3Ryb2tlLWxpbmVjYXAnLFxuICAgICAgJ3N0cm9rZS1saW5lam9pbicsXG4gICAgICAnc3Ryb2tlLW1pdGVybGltaXQnLFxuICAgICAgJ3N0cm9rZS1vcGFjaXR5JyxcbiAgICAgICdzdHJva2UnLFxuICAgICAgJ3N0cm9rZS13aWR0aCcsXG4gICAgICAnc3R5bGUnLFxuICAgICAgJ3N1cmZhY2VzY2FsZScsXG4gICAgICAnc3lzdGVtbGFuZ3VhZ2UnLFxuICAgICAgJ3RhYmluZGV4JyxcbiAgICAgICd0YXJnZXR4JyxcbiAgICAgICd0YXJnZXR5JyxcbiAgICAgICd0cmFuc2Zvcm0nLFxuICAgICAgJ3RyYW5zZm9ybS1vcmlnaW4nLFxuICAgICAgJ3RleHQtYW5jaG9yJyxcbiAgICAgICd0ZXh0LWRlY29yYXRpb24nLFxuICAgICAgJ3RleHQtcmVuZGVyaW5nJyxcbiAgICAgICd0ZXh0bGVuZ3RoJyxcbiAgICAgICd0eXBlJyxcbiAgICAgICd1MScsXG4gICAgICAndTInLFxuICAgICAgJ3VuaWNvZGUnLFxuICAgICAgJ3ZhbHVlcycsXG4gICAgICAndmlld2JveCcsXG4gICAgICAndmlzaWJpbGl0eScsXG4gICAgICAndmVyc2lvbicsXG4gICAgICAndmVydC1hZHYteScsXG4gICAgICAndmVydC1vcmlnaW4teCcsXG4gICAgICAndmVydC1vcmlnaW4teScsXG4gICAgICAnd2lkdGgnLFxuICAgICAgJ3dvcmQtc3BhY2luZycsXG4gICAgICAnd3JhcCcsXG4gICAgICAnd3JpdGluZy1tb2RlJyxcbiAgICAgICd4Y2hhbm5lbHNlbGVjdG9yJyxcbiAgICAgICd5Y2hhbm5lbHNlbGVjdG9yJyxcbiAgICAgICd4JyxcbiAgICAgICd4MScsXG4gICAgICAneDInLFxuICAgICAgJ3htbG5zJyxcbiAgICAgICd5JyxcbiAgICAgICd5MScsXG4gICAgICAneTInLFxuICAgICAgJ3onLFxuICAgICAgJ3pvb21hbmRwYW4nXG4gICAgXSk7XG4gICAgdmFyIG1hdGhNbCA9IGZyZWV6ZShbXG4gICAgICAnYWNjZW50JyxcbiAgICAgICdhY2NlbnR1bmRlcicsXG4gICAgICAnYWxpZ24nLFxuICAgICAgJ2JldmVsbGVkJyxcbiAgICAgICdjbG9zZScsXG4gICAgICAnY29sdW1uc2FsaWduJyxcbiAgICAgICdjb2x1bW5saW5lcycsXG4gICAgICAnY29sdW1uc3BhbicsXG4gICAgICAnZGVub21hbGlnbicsXG4gICAgICAnZGVwdGgnLFxuICAgICAgJ2RpcicsXG4gICAgICAnZGlzcGxheScsXG4gICAgICAnZGlzcGxheXN0eWxlJyxcbiAgICAgICdlbmNvZGluZycsXG4gICAgICAnZmVuY2UnLFxuICAgICAgJ2ZyYW1lJyxcbiAgICAgICdoZWlnaHQnLFxuICAgICAgJ2hyZWYnLFxuICAgICAgJ2lkJyxcbiAgICAgICdsYXJnZW9wJyxcbiAgICAgICdsZW5ndGgnLFxuICAgICAgJ2xpbmV0aGlja25lc3MnLFxuICAgICAgJ2xzcGFjZScsXG4gICAgICAnbHF1b3RlJyxcbiAgICAgICdtYXRoYmFja2dyb3VuZCcsXG4gICAgICAnbWF0aGNvbG9yJyxcbiAgICAgICdtYXRoc2l6ZScsXG4gICAgICAnbWF0aHZhcmlhbnQnLFxuICAgICAgJ21heHNpemUnLFxuICAgICAgJ21pbnNpemUnLFxuICAgICAgJ21vdmFibGVsaW1pdHMnLFxuICAgICAgJ25vdGF0aW9uJyxcbiAgICAgICdudW1hbGlnbicsXG4gICAgICAnb3BlbicsXG4gICAgICAncm93YWxpZ24nLFxuICAgICAgJ3Jvd2xpbmVzJyxcbiAgICAgICdyb3dzcGFjaW5nJyxcbiAgICAgICdyb3dzcGFuJyxcbiAgICAgICdyc3BhY2UnLFxuICAgICAgJ3JxdW90ZScsXG4gICAgICAnc2NyaXB0bGV2ZWwnLFxuICAgICAgJ3NjcmlwdG1pbnNpemUnLFxuICAgICAgJ3NjcmlwdHNpemVtdWx0aXBsaWVyJyxcbiAgICAgICdzZWxlY3Rpb24nLFxuICAgICAgJ3NlcGFyYXRvcicsXG4gICAgICAnc2VwYXJhdG9ycycsXG4gICAgICAnc3RyZXRjaHknLFxuICAgICAgJ3N1YnNjcmlwdHNoaWZ0JyxcbiAgICAgICdzdXBzY3JpcHRzaGlmdCcsXG4gICAgICAnc3ltbWV0cmljJyxcbiAgICAgICd2b2Zmc2V0JyxcbiAgICAgICd3aWR0aCcsXG4gICAgICAneG1sbnMnXG4gICAgXSk7XG4gICAgdmFyIHhtbCA9IGZyZWV6ZShbXG4gICAgICAneGxpbms6aHJlZicsXG4gICAgICAneG1sOmlkJyxcbiAgICAgICd4bGluazp0aXRsZScsXG4gICAgICAneG1sOnNwYWNlJyxcbiAgICAgICd4bWxuczp4bGluaydcbiAgICBdKTtcbiAgICB2YXIgTVVTVEFDSEVfRVhQUiA9IHNlYWwoL1xce1xce1tcXHdcXFddKnxbXFx3XFxXXSpcXH1cXH0vZ20pO1xuICAgIHZhciBFUkJfRVhQUiA9IHNlYWwoLzwlW1xcd1xcV10qfFtcXHdcXFddKiU+L2dtKTtcbiAgICB2YXIgREFUQV9BVFRSID0gc2VhbCgvXmRhdGEtW1xcLVxcdy5cXHUwMEI3LVxcdUZGRkZdLyk7XG4gICAgdmFyIEFSSUFfQVRUUiA9IHNlYWwoL15hcmlhLVtcXC1cXHddKyQvKTtcbiAgICB2YXIgSVNfQUxMT1dFRF9VUkkgPSBzZWFsKC9eKD86KD86KD86ZnxodCl0cHM/fG1haWx0b3x0ZWx8Y2FsbHRvfGNpZHx4bXBwKTp8W15hLXpdfFthLXorLlxcLV0rKD86W15hLXorLlxcLTpdfCQpKS9pKTtcbiAgICB2YXIgSVNfU0NSSVBUX09SX0RBVEEgPSBzZWFsKC9eKD86XFx3K3NjcmlwdHxkYXRhKTovaSk7XG4gICAgdmFyIEFUVFJfV0hJVEVTUEFDRSA9IHNlYWwoL1tcXHUwMDAwLVxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwLVxcdTIwMjlcXHUyMDVGXFx1MzAwMF0vZyk7XG4gICAgdmFyIERPQ1RZUEVfTkFNRSA9IHNlYWwoL15odG1sJC9pKTtcbiAgICB2YXIgZ2V0R2xvYmFsID0gZnVuY3Rpb24gZ2V0R2xvYmFsKCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHdpbmRvdztcbiAgICB9O1xuICAgIHZhciBfY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5ID0gZnVuY3Rpb24gX2NyZWF0ZVRydXN0ZWRUeXBlc1BvbGljeSh0cnVzdGVkVHlwZXMsIGRvY3VtZW50KSB7XG4gICAgICBpZiAoX3R5cGVvZih0cnVzdGVkVHlwZXMpICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgdHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHZhciBzdWZmaXggPSBudWxsO1xuICAgICAgdmFyIEFUVFJfTkFNRSA9ICdkYXRhLXR0LXBvbGljeS1zdWZmaXgnO1xuICAgICAgaWYgKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdC5oYXNBdHRyaWJ1dGUoQVRUUl9OQU1FKSkge1xuICAgICAgICBzdWZmaXggPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LmdldEF0dHJpYnV0ZShBVFRSX05BTUUpO1xuICAgICAgfVxuICAgICAgdmFyIHBvbGljeU5hbWUgPSAnZG9tcHVyaWZ5JyArIChzdWZmaXggPyAnIycgKyBzdWZmaXggOiAnJyk7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeShwb2xpY3lOYW1lLCB7XG4gICAgICAgICAgY3JlYXRlSFRNTDogZnVuY3Rpb24gY3JlYXRlSFRNTChodG1sKSB7XG4gICAgICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RydXN0ZWRUeXBlcyBwb2xpY3kgJyArIHBvbGljeU5hbWUgKyAnIGNvdWxkIG5vdCBiZSBjcmVhdGVkLicpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGZ1bmN0aW9uIGNyZWF0ZURPTVB1cmlmeSgpIHtcbiAgICAgIHZhciB3aW5kb3cgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGdldEdsb2JhbCgpO1xuICAgICAgdmFyIERPTVB1cmlmeSA9IGZ1bmN0aW9uIERPTVB1cmlmeShyb290KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVET01QdXJpZnkocm9vdCk7XG4gICAgICB9O1xuICAgICAgRE9NUHVyaWZ5LnZlcnNpb24gPSAnMi4zLjgnO1xuICAgICAgRE9NUHVyaWZ5LnJlbW92ZWQgPSBbXTtcbiAgICAgIGlmICghd2luZG93IHx8ICF3aW5kb3cuZG9jdW1lbnQgfHwgd2luZG93LmRvY3VtZW50Lm5vZGVUeXBlICE9PSA5KSB7XG4gICAgICAgIERPTVB1cmlmeS5pc1N1cHBvcnRlZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gRE9NUHVyaWZ5O1xuICAgICAgfVxuICAgICAgdmFyIG9yaWdpbmFsRG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gICAgICB2YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gICAgICB2YXIgRG9jdW1lbnRGcmFnbWVudCA9IHdpbmRvdy5Eb2N1bWVudEZyYWdtZW50LCBIVE1MVGVtcGxhdGVFbGVtZW50ID0gd2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQsIE5vZGUgPSB3aW5kb3cuTm9kZSwgRWxlbWVudCA9IHdpbmRvdy5FbGVtZW50LCBOb2RlRmlsdGVyID0gd2luZG93Lk5vZGVGaWx0ZXIsIF93aW5kb3ckTmFtZWROb2RlTWFwID0gd2luZG93Lk5hbWVkTm9kZU1hcCwgTmFtZWROb2RlTWFwID0gX3dpbmRvdyROYW1lZE5vZGVNYXAgPT09IHZvaWQgMCA/IHdpbmRvdy5OYW1lZE5vZGVNYXAgfHwgd2luZG93Lk1vek5hbWVkQXR0ck1hcCA6IF93aW5kb3ckTmFtZWROb2RlTWFwLCBIVE1MRm9ybUVsZW1lbnQgPSB3aW5kb3cuSFRNTEZvcm1FbGVtZW50LCBET01QYXJzZXIgPSB3aW5kb3cuRE9NUGFyc2VyLCB0cnVzdGVkVHlwZXMgPSB3aW5kb3cudHJ1c3RlZFR5cGVzO1xuICAgICAgdmFyIEVsZW1lbnRQcm90b3R5cGUgPSBFbGVtZW50LnByb3RvdHlwZTtcbiAgICAgIHZhciBjbG9uZU5vZGUgPSBsb29rdXBHZXR0ZXIoRWxlbWVudFByb3RvdHlwZSwgJ2Nsb25lTm9kZScpO1xuICAgICAgdmFyIGdldE5leHRTaWJsaW5nID0gbG9va3VwR2V0dGVyKEVsZW1lbnRQcm90b3R5cGUsICduZXh0U2libGluZycpO1xuICAgICAgdmFyIGdldENoaWxkTm9kZXMgPSBsb29rdXBHZXR0ZXIoRWxlbWVudFByb3RvdHlwZSwgJ2NoaWxkTm9kZXMnKTtcbiAgICAgIHZhciBnZXRQYXJlbnROb2RlID0gbG9va3VwR2V0dGVyKEVsZW1lbnRQcm90b3R5cGUsICdwYXJlbnROb2RlJyk7XG4gICAgICBpZiAodHlwZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKTtcbiAgICAgICAgaWYgKHRlbXBsYXRlLmNvbnRlbnQgJiYgdGVtcGxhdGUuY29udGVudC5vd25lckRvY3VtZW50KSB7XG4gICAgICAgICAgZG9jdW1lbnQgPSB0ZW1wbGF0ZS5jb250ZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciB0cnVzdGVkVHlwZXNQb2xpY3kgPSBfY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5KHRydXN0ZWRUeXBlcywgb3JpZ2luYWxEb2N1bWVudCk7XG4gICAgICB2YXIgZW1wdHlIVE1MID0gdHJ1c3RlZFR5cGVzUG9saWN5ID8gdHJ1c3RlZFR5cGVzUG9saWN5LmNyZWF0ZUhUTUwoJycpIDogJyc7XG4gICAgICB2YXIgX2RvY3VtZW50ID0gZG9jdW1lbnQsIGltcGxlbWVudGF0aW9uID0gX2RvY3VtZW50LmltcGxlbWVudGF0aW9uLCBjcmVhdGVOb2RlSXRlcmF0b3IgPSBfZG9jdW1lbnQuY3JlYXRlTm9kZUl0ZXJhdG9yLCBjcmVhdGVEb2N1bWVudEZyYWdtZW50ID0gX2RvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQsIGdldEVsZW1lbnRzQnlUYWdOYW1lID0gX2RvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lO1xuICAgICAgdmFyIGltcG9ydE5vZGUgPSBvcmlnaW5hbERvY3VtZW50LmltcG9ydE5vZGU7XG4gICAgICB2YXIgZG9jdW1lbnRNb2RlID0ge307XG4gICAgICB0cnkge1xuICAgICAgICBkb2N1bWVudE1vZGUgPSBjbG9uZShkb2N1bWVudCkuZG9jdW1lbnRNb2RlID8gZG9jdW1lbnQuZG9jdW1lbnRNb2RlIDoge307XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICB9XG4gICAgICB2YXIgaG9va3MgPSB7fTtcbiAgICAgIERPTVB1cmlmeS5pc1N1cHBvcnRlZCA9IHR5cGVvZiBnZXRQYXJlbnROb2RlID09PSAnZnVuY3Rpb24nICYmIGltcGxlbWVudGF0aW9uICYmIHR5cGVvZiBpbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50TW9kZSAhPT0gOTtcbiAgICAgIHZhciBNVVNUQUNIRV9FWFBSJDEgPSBNVVNUQUNIRV9FWFBSLCBFUkJfRVhQUiQxID0gRVJCX0VYUFIsIERBVEFfQVRUUiQxID0gREFUQV9BVFRSLCBBUklBX0FUVFIkMSA9IEFSSUFfQVRUUiwgSVNfU0NSSVBUX09SX0RBVEEkMSA9IElTX1NDUklQVF9PUl9EQVRBLCBBVFRSX1dISVRFU1BBQ0UkMSA9IEFUVFJfV0hJVEVTUEFDRTtcbiAgICAgIHZhciBJU19BTExPV0VEX1VSSSQxID0gSVNfQUxMT1dFRF9VUkk7XG4gICAgICB2YXIgQUxMT1dFRF9UQUdTID0gbnVsbDtcbiAgICAgIHZhciBERUZBVUxUX0FMTE9XRURfVEFHUyA9IGFkZFRvU2V0KHt9LCBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGh0bWwkMSksIF90b0NvbnN1bWFibGVBcnJheShzdmckMSksIF90b0NvbnN1bWFibGVBcnJheShzdmdGaWx0ZXJzKSwgX3RvQ29uc3VtYWJsZUFycmF5KG1hdGhNbCQxKSwgX3RvQ29uc3VtYWJsZUFycmF5KHRleHQpKSk7XG4gICAgICB2YXIgQUxMT1dFRF9BVFRSID0gbnVsbDtcbiAgICAgIHZhciBERUZBVUxUX0FMTE9XRURfQVRUUiA9IGFkZFRvU2V0KHt9LCBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGh0bWwpLCBfdG9Db25zdW1hYmxlQXJyYXkoc3ZnKSwgX3RvQ29uc3VtYWJsZUFycmF5KG1hdGhNbCksIF90b0NvbnN1bWFibGVBcnJheSh4bWwpKSk7XG4gICAgICB2YXIgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcgPSBPYmplY3Quc2VhbChPYmplY3QuY3JlYXRlKG51bGwsIHtcbiAgICAgICAgdGFnTmFtZUNoZWNrOiB7XG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIGF0dHJpYnV0ZU5hbWVDaGVjazoge1xuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICB9LFxuICAgICAgICBhbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM6IHtcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICAgIHZhciBGT1JCSURfVEFHUyA9IG51bGw7XG4gICAgICB2YXIgRk9SQklEX0FUVFIgPSBudWxsO1xuICAgICAgdmFyIEFMTE9XX0FSSUFfQVRUUiA9IHRydWU7XG4gICAgICB2YXIgQUxMT1dfREFUQV9BVFRSID0gdHJ1ZTtcbiAgICAgIHZhciBBTExPV19VTktOT1dOX1BST1RPQ09MUyA9IGZhbHNlO1xuICAgICAgdmFyIFNBRkVfRk9SX1RFTVBMQVRFUyA9IGZhbHNlO1xuICAgICAgdmFyIFdIT0xFX0RPQ1VNRU5UID0gZmFsc2U7XG4gICAgICB2YXIgU0VUX0NPTkZJRyA9IGZhbHNlO1xuICAgICAgdmFyIEZPUkNFX0JPRFkgPSBmYWxzZTtcbiAgICAgIHZhciBSRVRVUk5fRE9NID0gZmFsc2U7XG4gICAgICB2YXIgUkVUVVJOX0RPTV9GUkFHTUVOVCA9IGZhbHNlO1xuICAgICAgdmFyIFJFVFVSTl9UUlVTVEVEX1RZUEUgPSBmYWxzZTtcbiAgICAgIHZhciBTQU5JVElaRV9ET00gPSB0cnVlO1xuICAgICAgdmFyIEtFRVBfQ09OVEVOVCA9IHRydWU7XG4gICAgICB2YXIgSU5fUExBQ0UgPSBmYWxzZTtcbiAgICAgIHZhciBVU0VfUFJPRklMRVMgPSB7fTtcbiAgICAgIHZhciBGT1JCSURfQ09OVEVOVFMgPSBudWxsO1xuICAgICAgdmFyIERFRkFVTFRfRk9SQklEX0NPTlRFTlRTID0gYWRkVG9TZXQoe30sIFtcbiAgICAgICAgJ2Fubm90YXRpb24teG1sJyxcbiAgICAgICAgJ2F1ZGlvJyxcbiAgICAgICAgJ2NvbGdyb3VwJyxcbiAgICAgICAgJ2Rlc2MnLFxuICAgICAgICAnZm9yZWlnbm9iamVjdCcsXG4gICAgICAgICdoZWFkJyxcbiAgICAgICAgJ2lmcmFtZScsXG4gICAgICAgICdtYXRoJyxcbiAgICAgICAgJ21pJyxcbiAgICAgICAgJ21uJyxcbiAgICAgICAgJ21vJyxcbiAgICAgICAgJ21zJyxcbiAgICAgICAgJ210ZXh0JyxcbiAgICAgICAgJ25vZW1iZWQnLFxuICAgICAgICAnbm9mcmFtZXMnLFxuICAgICAgICAnbm9zY3JpcHQnLFxuICAgICAgICAncGxhaW50ZXh0JyxcbiAgICAgICAgJ3NjcmlwdCcsXG4gICAgICAgICdzdHlsZScsXG4gICAgICAgICdzdmcnLFxuICAgICAgICAndGVtcGxhdGUnLFxuICAgICAgICAndGhlYWQnLFxuICAgICAgICAndGl0bGUnLFxuICAgICAgICAndmlkZW8nLFxuICAgICAgICAneG1wJ1xuICAgICAgXSk7XG4gICAgICB2YXIgREFUQV9VUklfVEFHUyA9IG51bGw7XG4gICAgICB2YXIgREVGQVVMVF9EQVRBX1VSSV9UQUdTID0gYWRkVG9TZXQoe30sIFtcbiAgICAgICAgJ2F1ZGlvJyxcbiAgICAgICAgJ3ZpZGVvJyxcbiAgICAgICAgJ2ltZycsXG4gICAgICAgICdzb3VyY2UnLFxuICAgICAgICAnaW1hZ2UnLFxuICAgICAgICAndHJhY2snXG4gICAgICBdKTtcbiAgICAgIHZhciBVUklfU0FGRV9BVFRSSUJVVEVTID0gbnVsbDtcbiAgICAgIHZhciBERUZBVUxUX1VSSV9TQUZFX0FUVFJJQlVURVMgPSBhZGRUb1NldCh7fSwgW1xuICAgICAgICAnYWx0JyxcbiAgICAgICAgJ2NsYXNzJyxcbiAgICAgICAgJ2ZvcicsXG4gICAgICAgICdpZCcsXG4gICAgICAgICdsYWJlbCcsXG4gICAgICAgICduYW1lJyxcbiAgICAgICAgJ3BhdHRlcm4nLFxuICAgICAgICAncGxhY2Vob2xkZXInLFxuICAgICAgICAncm9sZScsXG4gICAgICAgICdzdW1tYXJ5JyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ3ZhbHVlJyxcbiAgICAgICAgJ3N0eWxlJyxcbiAgICAgICAgJ3htbG5zJ1xuICAgICAgXSk7XG4gICAgICB2YXIgTUFUSE1MX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJztcbiAgICAgIHZhciBTVkdfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcbiAgICAgIHZhciBIVE1MX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJztcbiAgICAgIHZhciBOQU1FU1BBQ0UgPSBIVE1MX05BTUVTUEFDRTtcbiAgICAgIHZhciBJU19FTVBUWV9JTlBVVCA9IGZhbHNlO1xuICAgICAgdmFyIFBBUlNFUl9NRURJQV9UWVBFO1xuICAgICAgdmFyIFNVUFBPUlRFRF9QQVJTRVJfTUVESUFfVFlQRVMgPSBbXG4gICAgICAgICdhcHBsaWNhdGlvbi94aHRtbCt4bWwnLFxuICAgICAgICAndGV4dC9odG1sJ1xuICAgICAgXTtcbiAgICAgIHZhciBERUZBVUxUX1BBUlNFUl9NRURJQV9UWVBFID0gJ3RleHQvaHRtbCc7XG4gICAgICB2YXIgdHJhbnNmb3JtQ2FzZUZ1bmM7XG4gICAgICB2YXIgQ09ORklHID0gbnVsbDtcbiAgICAgIHZhciBmb3JtRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcbiAgICAgIHZhciBpc1JlZ2V4T3JGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzUmVnZXhPckZ1bmN0aW9uKHRlc3RWYWx1ZSkge1xuICAgICAgICByZXR1cm4gdGVzdFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwIHx8IHRlc3RWYWx1ZSBpbnN0YW5jZW9mIEZ1bmN0aW9uO1xuICAgICAgfTtcbiAgICAgIHZhciBfcGFyc2VDb25maWcgPSBmdW5jdGlvbiBfcGFyc2VDb25maWcoY2ZnKSB7XG4gICAgICAgIGlmIChDT05GSUcgJiYgQ09ORklHID09PSBjZmcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjZmcgfHwgX3R5cGVvZihjZmcpICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGNmZyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGNmZyA9IGNsb25lKGNmZyk7XG4gICAgICAgIEFMTE9XRURfVEFHUyA9ICdBTExPV0VEX1RBR1MnIGluIGNmZyA/IGFkZFRvU2V0KHt9LCBjZmcuQUxMT1dFRF9UQUdTKSA6IERFRkFVTFRfQUxMT1dFRF9UQUdTO1xuICAgICAgICBBTExPV0VEX0FUVFIgPSAnQUxMT1dFRF9BVFRSJyBpbiBjZmcgPyBhZGRUb1NldCh7fSwgY2ZnLkFMTE9XRURfQVRUUikgOiBERUZBVUxUX0FMTE9XRURfQVRUUjtcbiAgICAgICAgVVJJX1NBRkVfQVRUUklCVVRFUyA9ICdBRERfVVJJX1NBRkVfQVRUUicgaW4gY2ZnID8gYWRkVG9TZXQoY2xvbmUoREVGQVVMVF9VUklfU0FGRV9BVFRSSUJVVEVTKSwgY2ZnLkFERF9VUklfU0FGRV9BVFRSKSA6IERFRkFVTFRfVVJJX1NBRkVfQVRUUklCVVRFUztcbiAgICAgICAgREFUQV9VUklfVEFHUyA9ICdBRERfREFUQV9VUklfVEFHUycgaW4gY2ZnID8gYWRkVG9TZXQoY2xvbmUoREVGQVVMVF9EQVRBX1VSSV9UQUdTKSwgY2ZnLkFERF9EQVRBX1VSSV9UQUdTKSA6IERFRkFVTFRfREFUQV9VUklfVEFHUztcbiAgICAgICAgRk9SQklEX0NPTlRFTlRTID0gJ0ZPUkJJRF9DT05URU5UUycgaW4gY2ZnID8gYWRkVG9TZXQoe30sIGNmZy5GT1JCSURfQ09OVEVOVFMpIDogREVGQVVMVF9GT1JCSURfQ09OVEVOVFM7XG4gICAgICAgIEZPUkJJRF9UQUdTID0gJ0ZPUkJJRF9UQUdTJyBpbiBjZmcgPyBhZGRUb1NldCh7fSwgY2ZnLkZPUkJJRF9UQUdTKSA6IHt9O1xuICAgICAgICBGT1JCSURfQVRUUiA9ICdGT1JCSURfQVRUUicgaW4gY2ZnID8gYWRkVG9TZXQoe30sIGNmZy5GT1JCSURfQVRUUikgOiB7fTtcbiAgICAgICAgVVNFX1BST0ZJTEVTID0gJ1VTRV9QUk9GSUxFUycgaW4gY2ZnID8gY2ZnLlVTRV9QUk9GSUxFUyA6IGZhbHNlO1xuICAgICAgICBBTExPV19BUklBX0FUVFIgPSBjZmcuQUxMT1dfQVJJQV9BVFRSICE9PSBmYWxzZTtcbiAgICAgICAgQUxMT1dfREFUQV9BVFRSID0gY2ZnLkFMTE9XX0RBVEFfQVRUUiAhPT0gZmFsc2U7XG4gICAgICAgIEFMTE9XX1VOS05PV05fUFJPVE9DT0xTID0gY2ZnLkFMTE9XX1VOS05PV05fUFJPVE9DT0xTIHx8IGZhbHNlO1xuICAgICAgICBTQUZFX0ZPUl9URU1QTEFURVMgPSBjZmcuU0FGRV9GT1JfVEVNUExBVEVTIHx8IGZhbHNlO1xuICAgICAgICBXSE9MRV9ET0NVTUVOVCA9IGNmZy5XSE9MRV9ET0NVTUVOVCB8fCBmYWxzZTtcbiAgICAgICAgUkVUVVJOX0RPTSA9IGNmZy5SRVRVUk5fRE9NIHx8IGZhbHNlO1xuICAgICAgICBSRVRVUk5fRE9NX0ZSQUdNRU5UID0gY2ZnLlJFVFVSTl9ET01fRlJBR01FTlQgfHwgZmFsc2U7XG4gICAgICAgIFJFVFVSTl9UUlVTVEVEX1RZUEUgPSBjZmcuUkVUVVJOX1RSVVNURURfVFlQRSB8fCBmYWxzZTtcbiAgICAgICAgRk9SQ0VfQk9EWSA9IGNmZy5GT1JDRV9CT0RZIHx8IGZhbHNlO1xuICAgICAgICBTQU5JVElaRV9ET00gPSBjZmcuU0FOSVRJWkVfRE9NICE9PSBmYWxzZTtcbiAgICAgICAgS0VFUF9DT05URU5UID0gY2ZnLktFRVBfQ09OVEVOVCAhPT0gZmFsc2U7XG4gICAgICAgIElOX1BMQUNFID0gY2ZnLklOX1BMQUNFIHx8IGZhbHNlO1xuICAgICAgICBJU19BTExPV0VEX1VSSSQxID0gY2ZnLkFMTE9XRURfVVJJX1JFR0VYUCB8fCBJU19BTExPV0VEX1VSSSQxO1xuICAgICAgICBOQU1FU1BBQ0UgPSBjZmcuTkFNRVNQQUNFIHx8IEhUTUxfTkFNRVNQQUNFO1xuICAgICAgICBpZiAoY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HICYmIGlzUmVnZXhPckZ1bmN0aW9uKGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spKSB7XG4gICAgICAgICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrID0gY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HICYmIGlzUmVnZXhPckZ1bmN0aW9uKGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spKSB7XG4gICAgICAgICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrID0gY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HICYmIHR5cGVvZiBjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICBDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMgPSBjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzO1xuICAgICAgICB9XG4gICAgICAgIFBBUlNFUl9NRURJQV9UWVBFID0gU1VQUE9SVEVEX1BBUlNFUl9NRURJQV9UWVBFUy5pbmRleE9mKGNmZy5QQVJTRVJfTUVESUFfVFlQRSkgPT09IC0xID8gUEFSU0VSX01FRElBX1RZUEUgPSBERUZBVUxUX1BBUlNFUl9NRURJQV9UWVBFIDogUEFSU0VSX01FRElBX1RZUEUgPSBjZmcuUEFSU0VSX01FRElBX1RZUEU7XG4gICAgICAgIHRyYW5zZm9ybUNhc2VGdW5jID0gUEFSU0VSX01FRElBX1RZUEUgPT09ICdhcHBsaWNhdGlvbi94aHRtbCt4bWwnID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSA6IHN0cmluZ1RvTG93ZXJDYXNlO1xuICAgICAgICBpZiAoU0FGRV9GT1JfVEVNUExBVEVTKSB7XG4gICAgICAgICAgQUxMT1dfREFUQV9BVFRSID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFJFVFVSTl9ET01fRlJBR01FTlQpIHtcbiAgICAgICAgICBSRVRVUk5fRE9NID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVVNFX1BST0ZJTEVTKSB7XG4gICAgICAgICAgQUxMT1dFRF9UQUdTID0gYWRkVG9TZXQoe30sIF90b0NvbnN1bWFibGVBcnJheSh0ZXh0KSk7XG4gICAgICAgICAgQUxMT1dFRF9BVFRSID0gW107XG4gICAgICAgICAgaWYgKFVTRV9QUk9GSUxFUy5odG1sID09PSB0cnVlKSB7XG4gICAgICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIGh0bWwkMSk7XG4gICAgICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIGh0bWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoVVNFX1BST0ZJTEVTLnN2ZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBzdmckMSk7XG4gICAgICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIHN2Zyk7XG4gICAgICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIHhtbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChVU0VfUFJPRklMRVMuc3ZnRmlsdGVycyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBzdmdGaWx0ZXJzKTtcbiAgICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgc3ZnKTtcbiAgICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgeG1sKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFVTRV9QUk9GSUxFUy5tYXRoTWwgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgbWF0aE1sJDEpO1xuICAgICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBtYXRoTWwpO1xuICAgICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCB4bWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ZnLkFERF9UQUdTKSB7XG4gICAgICAgICAgaWYgKEFMTE9XRURfVEFHUyA9PT0gREVGQVVMVF9BTExPV0VEX1RBR1MpIHtcbiAgICAgICAgICAgIEFMTE9XRURfVEFHUyA9IGNsb25lKEFMTE9XRURfVEFHUyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgY2ZnLkFERF9UQUdTKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ZnLkFERF9BVFRSKSB7XG4gICAgICAgICAgaWYgKEFMTE9XRURfQVRUUiA9PT0gREVGQVVMVF9BTExPV0VEX0FUVFIpIHtcbiAgICAgICAgICAgIEFMTE9XRURfQVRUUiA9IGNsb25lKEFMTE9XRURfQVRUUik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgY2ZnLkFERF9BVFRSKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ZnLkFERF9VUklfU0FGRV9BVFRSKSB7XG4gICAgICAgICAgYWRkVG9TZXQoVVJJX1NBRkVfQVRUUklCVVRFUywgY2ZnLkFERF9VUklfU0FGRV9BVFRSKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ZnLkZPUkJJRF9DT05URU5UUykge1xuICAgICAgICAgIGlmIChGT1JCSURfQ09OVEVOVFMgPT09IERFRkFVTFRfRk9SQklEX0NPTlRFTlRTKSB7XG4gICAgICAgICAgICBGT1JCSURfQ09OVEVOVFMgPSBjbG9uZShGT1JCSURfQ09OVEVOVFMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhZGRUb1NldChGT1JCSURfQ09OVEVOVFMsIGNmZy5GT1JCSURfQ09OVEVOVFMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChLRUVQX0NPTlRFTlQpIHtcbiAgICAgICAgICBBTExPV0VEX1RBR1NbJyN0ZXh0J10gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChXSE9MRV9ET0NVTUVOVCkge1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgW1xuICAgICAgICAgICAgJ2h0bWwnLFxuICAgICAgICAgICAgJ2hlYWQnLFxuICAgICAgICAgICAgJ2JvZHknXG4gICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFMTE9XRURfVEFHUy50YWJsZSkge1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgWyd0Ym9keSddKTtcbiAgICAgICAgICBkZWxldGUgRk9SQklEX1RBR1MudGJvZHk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZyZWV6ZSkge1xuICAgICAgICAgIGZyZWV6ZShjZmcpO1xuICAgICAgICB9XG4gICAgICAgIENPTkZJRyA9IGNmZztcbiAgICAgIH07XG4gICAgICB2YXIgTUFUSE1MX1RFWFRfSU5URUdSQVRJT05fUE9JTlRTID0gYWRkVG9TZXQoe30sIFtcbiAgICAgICAgJ21pJyxcbiAgICAgICAgJ21vJyxcbiAgICAgICAgJ21uJyxcbiAgICAgICAgJ21zJyxcbiAgICAgICAgJ210ZXh0J1xuICAgICAgXSk7XG4gICAgICB2YXIgSFRNTF9JTlRFR1JBVElPTl9QT0lOVFMgPSBhZGRUb1NldCh7fSwgW1xuICAgICAgICAnZm9yZWlnbm9iamVjdCcsXG4gICAgICAgICdkZXNjJyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ2Fubm90YXRpb24teG1sJ1xuICAgICAgXSk7XG4gICAgICB2YXIgQ09NTU9OX1NWR19BTkRfSFRNTF9FTEVNRU5UUyA9IGFkZFRvU2V0KHt9LCBbXG4gICAgICAgICd0aXRsZScsXG4gICAgICAgICdzdHlsZScsXG4gICAgICAgICdmb250JyxcbiAgICAgICAgJ2EnLFxuICAgICAgICAnc2NyaXB0J1xuICAgICAgXSk7XG4gICAgICB2YXIgQUxMX1NWR19UQUdTID0gYWRkVG9TZXQoe30sIHN2ZyQxKTtcbiAgICAgIGFkZFRvU2V0KEFMTF9TVkdfVEFHUywgc3ZnRmlsdGVycyk7XG4gICAgICBhZGRUb1NldChBTExfU1ZHX1RBR1MsIHN2Z0Rpc2FsbG93ZWQpO1xuICAgICAgdmFyIEFMTF9NQVRITUxfVEFHUyA9IGFkZFRvU2V0KHt9LCBtYXRoTWwkMSk7XG4gICAgICBhZGRUb1NldChBTExfTUFUSE1MX1RBR1MsIG1hdGhNbERpc2FsbG93ZWQpO1xuICAgICAgdmFyIF9jaGVja1ZhbGlkTmFtZXNwYWNlID0gZnVuY3Rpb24gX2NoZWNrVmFsaWROYW1lc3BhY2UoZWxlbWVudCkge1xuICAgICAgICB2YXIgcGFyZW50ID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcbiAgICAgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC50YWdOYW1lKSB7XG4gICAgICAgICAgcGFyZW50ID0ge1xuICAgICAgICAgICAgbmFtZXNwYWNlVVJJOiBIVE1MX05BTUVTUEFDRSxcbiAgICAgICAgICAgIHRhZ05hbWU6ICd0ZW1wbGF0ZSdcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHZhciB0YWdOYW1lID0gc3RyaW5nVG9Mb3dlckNhc2UoZWxlbWVudC50YWdOYW1lKTtcbiAgICAgICAgdmFyIHBhcmVudFRhZ05hbWUgPSBzdHJpbmdUb0xvd2VyQ2FzZShwYXJlbnQudGFnTmFtZSk7XG4gICAgICAgIGlmIChlbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRSkge1xuICAgICAgICAgIGlmIChwYXJlbnQubmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09ICdzdmcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gTUFUSE1MX05BTUVTUEFDRSkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09ICdzdmcnICYmIChwYXJlbnRUYWdOYW1lID09PSAnYW5ub3RhdGlvbi14bWwnIHx8IE1BVEhNTF9URVhUX0lOVEVHUkFUSU9OX1BPSU5UU1twYXJlbnRUYWdOYW1lXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBCb29sZWFuKEFMTF9TVkdfVEFHU1t0YWdOYW1lXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQubmFtZXNwYWNlVVJJID09PSBNQVRITUxfTkFNRVNQQUNFKSB7XG4gICAgICAgICAgaWYgKHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFnTmFtZSA9PT0gJ21hdGgnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRSkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09ICdtYXRoJyAmJiBIVE1MX0lOVEVHUkFUSU9OX1BPSU5UU1twYXJlbnRUYWdOYW1lXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIEJvb2xlYW4oQUxMX01BVEhNTF9UQUdTW3RhZ05hbWVdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgICAgaWYgKHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0UgJiYgIUhUTUxfSU5URUdSQVRJT05fUE9JTlRTW3BhcmVudFRhZ05hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXJlbnQubmFtZXNwYWNlVVJJID09PSBNQVRITUxfTkFNRVNQQUNFICYmICFNQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFNbcGFyZW50VGFnTmFtZV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICFBTExfTUFUSE1MX1RBR1NbdGFnTmFtZV0gJiYgKENPTU1PTl9TVkdfQU5EX0hUTUxfRUxFTUVOVFNbdGFnTmFtZV0gfHwgIUFMTF9TVkdfVEFHU1t0YWdOYW1lXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfTtcbiAgICAgIHZhciBfZm9yY2VSZW1vdmUgPSBmdW5jdGlvbiBfZm9yY2VSZW1vdmUobm9kZSkge1xuICAgICAgICBhcnJheVB1c2goRE9NUHVyaWZ5LnJlbW92ZWQsIHsgZWxlbWVudDogbm9kZSB9KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbm9kZS5vdXRlckhUTUwgPSBlbXB0eUhUTUw7XG4gICAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB2YXIgX3JlbW92ZUF0dHJpYnV0ZSA9IGZ1bmN0aW9uIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgbm9kZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGFycmF5UHVzaChET01QdXJpZnkucmVtb3ZlZCwge1xuICAgICAgICAgICAgYXR0cmlidXRlOiBub2RlLmdldEF0dHJpYnV0ZU5vZGUobmFtZSksXG4gICAgICAgICAgICBmcm9tOiBub2RlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICBhcnJheVB1c2goRE9NUHVyaWZ5LnJlbW92ZWQsIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTogbnVsbCxcbiAgICAgICAgICAgIGZyb206IG5vZGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgaWYgKG5hbWUgPT09ICdpcycgJiYgIUFMTE9XRURfQVRUUltuYW1lXSkge1xuICAgICAgICAgIGlmIChSRVRVUk5fRE9NIHx8IFJFVFVSTl9ET01fRlJBR01FTlQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIF9mb3JjZVJlbW92ZShub2RlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwgJycpO1xuICAgICAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHZhciBfaW5pdERvY3VtZW50ID0gZnVuY3Rpb24gX2luaXREb2N1bWVudChkaXJ0eSkge1xuICAgICAgICB2YXIgZG9jO1xuICAgICAgICB2YXIgbGVhZGluZ1doaXRlc3BhY2U7XG4gICAgICAgIGlmIChGT1JDRV9CT0RZKSB7XG4gICAgICAgICAgZGlydHkgPSAnPHJlbW92ZT48L3JlbW92ZT4nICsgZGlydHk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIG1hdGNoZXMgPSBzdHJpbmdNYXRjaChkaXJ0eSwgL15bXFxyXFxuXFx0IF0rLyk7XG4gICAgICAgICAgbGVhZGluZ1doaXRlc3BhY2UgPSBtYXRjaGVzICYmIG1hdGNoZXNbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFBBUlNFUl9NRURJQV9UWVBFID09PSAnYXBwbGljYXRpb24veGh0bWwreG1sJykge1xuICAgICAgICAgIGRpcnR5ID0gJzxodG1sIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiPjxoZWFkPjwvaGVhZD48Ym9keT4nICsgZGlydHkgKyAnPC9ib2R5PjwvaHRtbD4nO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkaXJ0eVBheWxvYWQgPSB0cnVzdGVkVHlwZXNQb2xpY3kgPyB0cnVzdGVkVHlwZXNQb2xpY3kuY3JlYXRlSFRNTChkaXJ0eSkgOiBkaXJ0eTtcbiAgICAgICAgaWYgKE5BTUVTUEFDRSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhkaXJ0eVBheWxvYWQsIFBBUlNFUl9NRURJQV9UWVBFKTtcbiAgICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZG9jIHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICAgZG9jID0gaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQoTkFNRVNQQUNFLCAndGVtcGxhdGUnLCBudWxsKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZG9jLmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUwgPSBJU19FTVBUWV9JTlBVVCA/ICcnIDogZGlydHlQYXlsb2FkO1xuICAgICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGJvZHkgPSBkb2MuYm9keSB8fCBkb2MuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBpZiAoZGlydHkgJiYgbGVhZGluZ1doaXRlc3BhY2UpIHtcbiAgICAgICAgICBib2R5Lmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsZWFkaW5nV2hpdGVzcGFjZSksIGJvZHkuY2hpbGROb2Rlc1swXSB8fCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoTkFNRVNQQUNFID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgICAgIHJldHVybiBnZXRFbGVtZW50c0J5VGFnTmFtZS5jYWxsKGRvYywgV0hPTEVfRE9DVU1FTlQgPyAnaHRtbCcgOiAnYm9keScpWzBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBXSE9MRV9ET0NVTUVOVCA/IGRvYy5kb2N1bWVudEVsZW1lbnQgOiBib2R5O1xuICAgICAgfTtcbiAgICAgIHZhciBfY3JlYXRlSXRlcmF0b3IgPSBmdW5jdGlvbiBfY3JlYXRlSXRlcmF0b3Iocm9vdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTm9kZUl0ZXJhdG9yLmNhbGwocm9vdC5vd25lckRvY3VtZW50IHx8IHJvb3QsIHJvb3QsIE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UIHwgTm9kZUZpbHRlci5TSE9XX0NPTU1FTlQgfCBOb2RlRmlsdGVyLlNIT1dfVEVYVCwgbnVsbCwgZmFsc2UpO1xuICAgICAgfTtcbiAgICAgIHZhciBfaXNDbG9iYmVyZWQgPSBmdW5jdGlvbiBfaXNDbG9iYmVyZWQoZWxtKSB7XG4gICAgICAgIHJldHVybiBlbG0gaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQgJiYgKHR5cGVvZiBlbG0ubm9kZU5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBlbG0udGV4dENvbnRlbnQgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBlbG0ucmVtb3ZlQ2hpbGQgIT09ICdmdW5jdGlvbicgfHwgIShlbG0uYXR0cmlidXRlcyBpbnN0YW5jZW9mIE5hbWVkTm9kZU1hcCkgfHwgdHlwZW9mIGVsbS5yZW1vdmVBdHRyaWJ1dGUgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGVsbS5zZXRBdHRyaWJ1dGUgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGVsbS5uYW1lc3BhY2VVUkkgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBlbG0uaW5zZXJ0QmVmb3JlICE9PSAnZnVuY3Rpb24nKTtcbiAgICAgIH07XG4gICAgICB2YXIgX2lzTm9kZSA9IGZ1bmN0aW9uIF9pc05vZGUob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBfdHlwZW9mKE5vZGUpID09PSAnb2JqZWN0JyA/IG9iamVjdCBpbnN0YW5jZW9mIE5vZGUgOiBvYmplY3QgJiYgX3R5cGVvZihvYmplY3QpID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb2JqZWN0Lm5vZGVUeXBlID09PSAnbnVtYmVyJyAmJiB0eXBlb2Ygb2JqZWN0Lm5vZGVOYW1lID09PSAnc3RyaW5nJztcbiAgICAgIH07XG4gICAgICB2YXIgX2V4ZWN1dGVIb29rID0gZnVuY3Rpb24gX2V4ZWN1dGVIb29rKGVudHJ5UG9pbnQsIGN1cnJlbnROb2RlLCBkYXRhKSB7XG4gICAgICAgIGlmICghaG9va3NbZW50cnlQb2ludF0pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXJyYXlGb3JFYWNoKGhvb2tzW2VudHJ5UG9pbnRdLCBmdW5jdGlvbiAoaG9vaykge1xuICAgICAgICAgIGhvb2suY2FsbChET01QdXJpZnksIGN1cnJlbnROb2RlLCBkYXRhLCBDT05GSUcpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICB2YXIgX3Nhbml0aXplRWxlbWVudHMgPSBmdW5jdGlvbiBfc2FuaXRpemVFbGVtZW50cyhjdXJyZW50Tm9kZSkge1xuICAgICAgICB2YXIgY29udGVudDtcbiAgICAgICAgX2V4ZWN1dGVIb29rKCdiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzJywgY3VycmVudE5vZGUsIG51bGwpO1xuICAgICAgICBpZiAoX2lzQ2xvYmJlcmVkKGN1cnJlbnROb2RlKSkge1xuICAgICAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlZ0V4cFRlc3QoL1tcXHUwMDgwLVxcdUZGRkZdLywgY3VycmVudE5vZGUubm9kZU5hbWUpKSB7XG4gICAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGFnTmFtZSA9IHRyYW5zZm9ybUNhc2VGdW5jKGN1cnJlbnROb2RlLm5vZGVOYW1lKTtcbiAgICAgICAgX2V4ZWN1dGVIb29rKCd1cG9uU2FuaXRpemVFbGVtZW50JywgY3VycmVudE5vZGUsIHtcbiAgICAgICAgICB0YWdOYW1lOiB0YWdOYW1lLFxuICAgICAgICAgIGFsbG93ZWRUYWdzOiBBTExPV0VEX1RBR1NcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjdXJyZW50Tm9kZS5oYXNDaGlsZE5vZGVzKCkgJiYgIV9pc05vZGUoY3VycmVudE5vZGUuZmlyc3RFbGVtZW50Q2hpbGQpICYmICghX2lzTm9kZShjdXJyZW50Tm9kZS5jb250ZW50KSB8fCAhX2lzTm9kZShjdXJyZW50Tm9kZS5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkKSkgJiYgcmVnRXhwVGVzdCgvPFsvXFx3XS9nLCBjdXJyZW50Tm9kZS5pbm5lckhUTUwpICYmIHJlZ0V4cFRlc3QoLzxbL1xcd10vZywgY3VycmVudE5vZGUudGV4dENvbnRlbnQpKSB7XG4gICAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFnTmFtZSA9PT0gJ3NlbGVjdCcgJiYgcmVnRXhwVGVzdCgvPHRlbXBsYXRlL2ksIGN1cnJlbnROb2RlLmlubmVySFRNTCkpIHtcbiAgICAgICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghQUxMT1dFRF9UQUdTW3RhZ05hbWVdIHx8IEZPUkJJRF9UQUdTW3RhZ05hbWVdKSB7XG4gICAgICAgICAgaWYgKCFGT1JCSURfVEFHU1t0YWdOYW1lXSAmJiBfYmFzaWNDdXN0b21FbGVtZW50VGVzdCh0YWdOYW1lKSkge1xuICAgICAgICAgICAgaWYgKENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCAmJiByZWdFeHBUZXN0KENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaywgdGFnTmFtZSkpXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmIChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sodGFnTmFtZSkpXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKEtFRVBfQ09OVEVOVCAmJiAhRk9SQklEX0NPTlRFTlRTW3RhZ05hbWVdKSB7XG4gICAgICAgICAgICB2YXIgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoY3VycmVudE5vZGUpIHx8IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgICAgICAgICB2YXIgY2hpbGROb2RlcyA9IGdldENoaWxkTm9kZXMoY3VycmVudE5vZGUpIHx8IGN1cnJlbnROb2RlLmNoaWxkTm9kZXM7XG4gICAgICAgICAgICBpZiAoY2hpbGROb2RlcyAmJiBwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgIHZhciBjaGlsZENvdW50ID0gY2hpbGROb2Rlcy5sZW5ndGg7XG4gICAgICAgICAgICAgIGZvciAodmFyIGkgPSBjaGlsZENvdW50IC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShjbG9uZU5vZGUoY2hpbGROb2Rlc1tpXSwgdHJ1ZSksIGdldE5leHRTaWJsaW5nKGN1cnJlbnROb2RlKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudE5vZGUgaW5zdGFuY2VvZiBFbGVtZW50ICYmICFfY2hlY2tWYWxpZE5hbWVzcGFjZShjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgodGFnTmFtZSA9PT0gJ25vc2NyaXB0JyB8fCB0YWdOYW1lID09PSAnbm9lbWJlZCcpICYmIHJlZ0V4cFRlc3QoLzxcXC9ubyhzY3JpcHR8ZW1iZWQpL2ksIGN1cnJlbnROb2RlLmlubmVySFRNTCkpIHtcbiAgICAgICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChTQUZFX0ZPUl9URU1QTEFURVMgJiYgY3VycmVudE5vZGUubm9kZVR5cGUgPT09IDMpIHtcbiAgICAgICAgICBjb250ZW50ID0gY3VycmVudE5vZGUudGV4dENvbnRlbnQ7XG4gICAgICAgICAgY29udGVudCA9IHN0cmluZ1JlcGxhY2UoY29udGVudCwgTVVTVEFDSEVfRVhQUiQxLCAnICcpO1xuICAgICAgICAgIGNvbnRlbnQgPSBzdHJpbmdSZXBsYWNlKGNvbnRlbnQsIEVSQl9FWFBSJDEsICcgJyk7XG4gICAgICAgICAgaWYgKGN1cnJlbnROb2RlLnRleHRDb250ZW50ICE9PSBjb250ZW50KSB7XG4gICAgICAgICAgICBhcnJheVB1c2goRE9NUHVyaWZ5LnJlbW92ZWQsIHsgZWxlbWVudDogY3VycmVudE5vZGUuY2xvbmVOb2RlKCkgfSk7XG4gICAgICAgICAgICBjdXJyZW50Tm9kZS50ZXh0Q29udGVudCA9IGNvbnRlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9leGVjdXRlSG9vaygnYWZ0ZXJTYW5pdGl6ZUVsZW1lbnRzJywgY3VycmVudE5vZGUsIG51bGwpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9O1xuICAgICAgdmFyIF9pc1ZhbGlkQXR0cmlidXRlID0gZnVuY3Rpb24gX2lzVmFsaWRBdHRyaWJ1dGUobGNUYWcsIGxjTmFtZSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKFNBTklUSVpFX0RPTSAmJiAobGNOYW1lID09PSAnaWQnIHx8IGxjTmFtZSA9PT0gJ25hbWUnKSAmJiAodmFsdWUgaW4gZG9jdW1lbnQgfHwgdmFsdWUgaW4gZm9ybUVsZW1lbnQpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBTExPV19EQVRBX0FUVFIgJiYgIUZPUkJJRF9BVFRSW2xjTmFtZV0gJiYgcmVnRXhwVGVzdChEQVRBX0FUVFIkMSwgbGNOYW1lKSk7XG4gICAgICAgIGVsc2UgaWYgKEFMTE9XX0FSSUFfQVRUUiAmJiByZWdFeHBUZXN0KEFSSUFfQVRUUiQxLCBsY05hbWUpKTtcbiAgICAgICAgZWxzZSBpZiAoIUFMTE9XRURfQVRUUltsY05hbWVdIHx8IEZPUkJJRF9BVFRSW2xjTmFtZV0pIHtcbiAgICAgICAgICBpZiAoX2Jhc2ljQ3VzdG9tRWxlbWVudFRlc3QobGNUYWcpICYmIChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAgJiYgcmVnRXhwVGVzdChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2ssIGxjVGFnKSB8fCBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sobGNUYWcpKSAmJiAoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwICYmIHJlZ0V4cFRlc3QoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrLCBsY05hbWUpIHx8IENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayhsY05hbWUpKSB8fCBsY05hbWUgPT09ICdpcycgJiYgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzICYmIChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAgJiYgcmVnRXhwVGVzdChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2ssIHZhbHVlKSB8fCBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sodmFsdWUpKSk7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFVSSV9TQUZFX0FUVFJJQlVURVNbbGNOYW1lXSk7XG4gICAgICAgIGVsc2UgaWYgKHJlZ0V4cFRlc3QoSVNfQUxMT1dFRF9VUkkkMSwgc3RyaW5nUmVwbGFjZSh2YWx1ZSwgQVRUUl9XSElURVNQQUNFJDEsICcnKSkpO1xuICAgICAgICBlbHNlIGlmICgobGNOYW1lID09PSAnc3JjJyB8fCBsY05hbWUgPT09ICd4bGluazpocmVmJyB8fCBsY05hbWUgPT09ICdocmVmJykgJiYgbGNUYWcgIT09ICdzY3JpcHQnICYmIHN0cmluZ0luZGV4T2YodmFsdWUsICdkYXRhOicpID09PSAwICYmIERBVEFfVVJJX1RBR1NbbGNUYWddKTtcbiAgICAgICAgZWxzZSBpZiAoQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFMgJiYgIXJlZ0V4cFRlc3QoSVNfU0NSSVBUX09SX0RBVEEkMSwgc3RyaW5nUmVwbGFjZSh2YWx1ZSwgQVRUUl9XSElURVNQQUNFJDEsICcnKSkpO1xuICAgICAgICBlbHNlIGlmICghdmFsdWUpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgICAgdmFyIF9iYXNpY0N1c3RvbUVsZW1lbnRUZXN0ID0gZnVuY3Rpb24gX2Jhc2ljQ3VzdG9tRWxlbWVudFRlc3QodGFnTmFtZSkge1xuICAgICAgICByZXR1cm4gdGFnTmFtZS5pbmRleE9mKCctJykgPiAwO1xuICAgICAgfTtcbiAgICAgIHZhciBfc2FuaXRpemVBdHRyaWJ1dGVzID0gZnVuY3Rpb24gX3Nhbml0aXplQXR0cmlidXRlcyhjdXJyZW50Tm9kZSkge1xuICAgICAgICB2YXIgYXR0cjtcbiAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICB2YXIgbGNOYW1lO1xuICAgICAgICB2YXIgbDtcbiAgICAgICAgX2V4ZWN1dGVIb29rKCdiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXMnLCBjdXJyZW50Tm9kZSwgbnVsbCk7XG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gY3VycmVudE5vZGUuYXR0cmlidXRlcztcbiAgICAgICAgaWYgKCFhdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBob29rRXZlbnQgPSB7XG4gICAgICAgICAgYXR0ck5hbWU6ICcnLFxuICAgICAgICAgIGF0dHJWYWx1ZTogJycsXG4gICAgICAgICAga2VlcEF0dHI6IHRydWUsXG4gICAgICAgICAgYWxsb3dlZEF0dHJpYnV0ZXM6IEFMTE9XRURfQVRUUlxuICAgICAgICB9O1xuICAgICAgICBsID0gYXR0cmlidXRlcy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChsLS0pIHtcbiAgICAgICAgICBhdHRyID0gYXR0cmlidXRlc1tsXTtcbiAgICAgICAgICB2YXIgX2F0dHIgPSBhdHRyLCBuYW1lID0gX2F0dHIubmFtZSwgbmFtZXNwYWNlVVJJID0gX2F0dHIubmFtZXNwYWNlVVJJO1xuICAgICAgICAgIHZhbHVlID0gbmFtZSA9PT0gJ3ZhbHVlJyA/IGF0dHIudmFsdWUgOiBzdHJpbmdUcmltKGF0dHIudmFsdWUpO1xuICAgICAgICAgIGxjTmFtZSA9IHRyYW5zZm9ybUNhc2VGdW5jKG5hbWUpO1xuICAgICAgICAgIHZhciBpbml0VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICBob29rRXZlbnQuYXR0ck5hbWUgPSBsY05hbWU7XG4gICAgICAgICAgaG9va0V2ZW50LmF0dHJWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgIGhvb2tFdmVudC5rZWVwQXR0ciA9IHRydWU7XG4gICAgICAgICAgaG9va0V2ZW50LmZvcmNlS2VlcEF0dHIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgX2V4ZWN1dGVIb29rKCd1cG9uU2FuaXRpemVBdHRyaWJ1dGUnLCBjdXJyZW50Tm9kZSwgaG9va0V2ZW50KTtcbiAgICAgICAgICB2YWx1ZSA9IGhvb2tFdmVudC5hdHRyVmFsdWU7XG4gICAgICAgICAgaWYgKGhvb2tFdmVudC5mb3JjZUtlZXBBdHRyKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFob29rRXZlbnQua2VlcEF0dHIpIHtcbiAgICAgICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZWdFeHBUZXN0KC9cXC8+L2ksIHZhbHVlKSkge1xuICAgICAgICAgICAgX3JlbW92ZUF0dHJpYnV0ZShuYW1lLCBjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFNBRkVfRk9SX1RFTVBMQVRFUykge1xuICAgICAgICAgICAgdmFsdWUgPSBzdHJpbmdSZXBsYWNlKHZhbHVlLCBNVVNUQUNIRV9FWFBSJDEsICcgJyk7XG4gICAgICAgICAgICB2YWx1ZSA9IHN0cmluZ1JlcGxhY2UodmFsdWUsIEVSQl9FWFBSJDEsICcgJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBsY1RhZyA9IHRyYW5zZm9ybUNhc2VGdW5jKGN1cnJlbnROb2RlLm5vZGVOYW1lKTtcbiAgICAgICAgICBpZiAoIV9pc1ZhbGlkQXR0cmlidXRlKGxjVGFnLCBsY05hbWUsIHZhbHVlKSkge1xuICAgICAgICAgICAgX3JlbW92ZUF0dHJpYnV0ZShuYW1lLCBjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSBpbml0VmFsdWUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGlmIChuYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5zZXRBdHRyaWJ1dGVOUyhuYW1lc3BhY2VVUkksIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfZXhlY3V0ZUhvb2soJ2FmdGVyU2FuaXRpemVBdHRyaWJ1dGVzJywgY3VycmVudE5vZGUsIG51bGwpO1xuICAgICAgfTtcbiAgICAgIHZhciBfc2FuaXRpemVTaGFkb3dET00gPSBmdW5jdGlvbiBfc2FuaXRpemVTaGFkb3dET00oZnJhZ21lbnQpIHtcbiAgICAgICAgdmFyIHNoYWRvd05vZGU7XG4gICAgICAgIHZhciBzaGFkb3dJdGVyYXRvciA9IF9jcmVhdGVJdGVyYXRvcihmcmFnbWVudCk7XG4gICAgICAgIF9leGVjdXRlSG9vaygnYmVmb3JlU2FuaXRpemVTaGFkb3dET00nLCBmcmFnbWVudCwgbnVsbCk7XG4gICAgICAgIHdoaWxlIChzaGFkb3dOb2RlID0gc2hhZG93SXRlcmF0b3IubmV4dE5vZGUoKSkge1xuICAgICAgICAgIF9leGVjdXRlSG9vaygndXBvblNhbml0aXplU2hhZG93Tm9kZScsIHNoYWRvd05vZGUsIG51bGwpO1xuICAgICAgICAgIGlmIChfc2FuaXRpemVFbGVtZW50cyhzaGFkb3dOb2RlKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzaGFkb3dOb2RlLmNvbnRlbnQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSB7XG4gICAgICAgICAgICBfc2FuaXRpemVTaGFkb3dET00oc2hhZG93Tm9kZS5jb250ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgX3Nhbml0aXplQXR0cmlidXRlcyhzaGFkb3dOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBfZXhlY3V0ZUhvb2soJ2FmdGVyU2FuaXRpemVTaGFkb3dET00nLCBmcmFnbWVudCwgbnVsbCk7XG4gICAgICB9O1xuICAgICAgRE9NUHVyaWZ5LnNhbml0aXplID0gZnVuY3Rpb24gKGRpcnR5LCBjZmcpIHtcbiAgICAgICAgdmFyIGJvZHk7XG4gICAgICAgIHZhciBpbXBvcnRlZE5vZGU7XG4gICAgICAgIHZhciBjdXJyZW50Tm9kZTtcbiAgICAgICAgdmFyIG9sZE5vZGU7XG4gICAgICAgIHZhciByZXR1cm5Ob2RlO1xuICAgICAgICBJU19FTVBUWV9JTlBVVCA9ICFkaXJ0eTtcbiAgICAgICAgaWYgKElTX0VNUFRZX0lOUFVUKSB7XG4gICAgICAgICAgZGlydHkgPSAnPCEtLT4nO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZGlydHkgIT09ICdzdHJpbmcnICYmICFfaXNOb2RlKGRpcnR5KSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGlydHkudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IHR5cGVFcnJvckNyZWF0ZSgndG9TdHJpbmcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGlydHkgPSBkaXJ0eS50b1N0cmluZygpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkaXJ0eSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgdGhyb3cgdHlwZUVycm9yQ3JlYXRlKCdkaXJ0eSBpcyBub3QgYSBzdHJpbmcsIGFib3J0aW5nJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghRE9NUHVyaWZ5LmlzU3VwcG9ydGVkKSB7XG4gICAgICAgICAgaWYgKF90eXBlb2Yod2luZG93LnRvU3RhdGljSFRNTCkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB3aW5kb3cudG9TdGF0aWNIVE1MID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRpcnR5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICByZXR1cm4gd2luZG93LnRvU3RhdGljSFRNTChkaXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoX2lzTm9kZShkaXJ0eSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy50b1N0YXRpY0hUTUwoZGlydHkub3V0ZXJIVE1MKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGRpcnR5O1xuICAgICAgICB9XG4gICAgICAgIGlmICghU0VUX0NPTkZJRykge1xuICAgICAgICAgIF9wYXJzZUNvbmZpZyhjZmcpO1xuICAgICAgICB9XG4gICAgICAgIERPTVB1cmlmeS5yZW1vdmVkID0gW107XG4gICAgICAgIGlmICh0eXBlb2YgZGlydHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgSU5fUExBQ0UgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSU5fUExBQ0UpIHtcbiAgICAgICAgICBpZiAoZGlydHkubm9kZU5hbWUpIHtcbiAgICAgICAgICAgIHZhciB0YWdOYW1lID0gdHJhbnNmb3JtQ2FzZUZ1bmMoZGlydHkubm9kZU5hbWUpO1xuICAgICAgICAgICAgaWYgKCFBTExPV0VEX1RBR1NbdGFnTmFtZV0gfHwgRk9SQklEX1RBR1NbdGFnTmFtZV0pIHtcbiAgICAgICAgICAgICAgdGhyb3cgdHlwZUVycm9yQ3JlYXRlKCdyb290IG5vZGUgaXMgZm9yYmlkZGVuIGFuZCBjYW5ub3QgYmUgc2FuaXRpemVkIGluLXBsYWNlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRpcnR5IGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgICAgIGJvZHkgPSBfaW5pdERvY3VtZW50KCc8IS0tLS0+Jyk7XG4gICAgICAgICAgaW1wb3J0ZWROb2RlID0gYm9keS5vd25lckRvY3VtZW50LmltcG9ydE5vZGUoZGlydHksIHRydWUpO1xuICAgICAgICAgIGlmIChpbXBvcnRlZE5vZGUubm9kZVR5cGUgPT09IDEgJiYgaW1wb3J0ZWROb2RlLm5vZGVOYW1lID09PSAnQk9EWScpIHtcbiAgICAgICAgICAgIGJvZHkgPSBpbXBvcnRlZE5vZGU7XG4gICAgICAgICAgfSBlbHNlIGlmIChpbXBvcnRlZE5vZGUubm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgICAgICAgICAgYm9keSA9IGltcG9ydGVkTm9kZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYm9keS5hcHBlbmRDaGlsZChpbXBvcnRlZE5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIVJFVFVSTl9ET00gJiYgIVNBRkVfRk9SX1RFTVBMQVRFUyAmJiAhV0hPTEVfRE9DVU1FTlQgJiYgZGlydHkuaW5kZXhPZignPCcpID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydXN0ZWRUeXBlc1BvbGljeSAmJiBSRVRVUk5fVFJVU1RFRF9UWVBFID8gdHJ1c3RlZFR5cGVzUG9saWN5LmNyZWF0ZUhUTUwoZGlydHkpIDogZGlydHk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJvZHkgPSBfaW5pdERvY3VtZW50KGRpcnR5KTtcbiAgICAgICAgICBpZiAoIWJvZHkpIHtcbiAgICAgICAgICAgIHJldHVybiBSRVRVUk5fRE9NID8gbnVsbCA6IFJFVFVSTl9UUlVTVEVEX1RZUEUgPyBlbXB0eUhUTUwgOiAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJvZHkgJiYgRk9SQ0VfQk9EWSkge1xuICAgICAgICAgIF9mb3JjZVJlbW92ZShib2R5LmZpcnN0Q2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBub2RlSXRlcmF0b3IgPSBfY3JlYXRlSXRlcmF0b3IoSU5fUExBQ0UgPyBkaXJ0eSA6IGJvZHkpO1xuICAgICAgICB3aGlsZSAoY3VycmVudE5vZGUgPSBub2RlSXRlcmF0b3IubmV4dE5vZGUoKSkge1xuICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gMyAmJiBjdXJyZW50Tm9kZSA9PT0gb2xkTm9kZSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChfc2FuaXRpemVFbGVtZW50cyhjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY3VycmVudE5vZGUuY29udGVudCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgICAgICAgIF9zYW5pdGl6ZVNoYWRvd0RPTShjdXJyZW50Tm9kZS5jb250ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgX3Nhbml0aXplQXR0cmlidXRlcyhjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgb2xkTm9kZSA9IGN1cnJlbnROb2RlO1xuICAgICAgICB9XG4gICAgICAgIG9sZE5vZGUgPSBudWxsO1xuICAgICAgICBpZiAoSU5fUExBQ0UpIHtcbiAgICAgICAgICByZXR1cm4gZGlydHk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFJFVFVSTl9ET00pIHtcbiAgICAgICAgICBpZiAoUkVUVVJOX0RPTV9GUkFHTUVOVCkge1xuICAgICAgICAgICAgcmV0dXJuTm9kZSA9IGNyZWF0ZURvY3VtZW50RnJhZ21lbnQuY2FsbChib2R5Lm93bmVyRG9jdW1lbnQpO1xuICAgICAgICAgICAgd2hpbGUgKGJvZHkuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICByZXR1cm5Ob2RlLmFwcGVuZENoaWxkKGJvZHkuZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybk5vZGUgPSBib2R5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoQUxMT1dFRF9BVFRSLnNoYWRvd3Jvb3QpIHtcbiAgICAgICAgICAgIHJldHVybk5vZGUgPSBpbXBvcnROb2RlLmNhbGwob3JpZ2luYWxEb2N1bWVudCwgcmV0dXJuTm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXR1cm5Ob2RlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzZXJpYWxpemVkSFRNTCA9IFdIT0xFX0RPQ1VNRU5UID8gYm9keS5vdXRlckhUTUwgOiBib2R5LmlubmVySFRNTDtcbiAgICAgICAgaWYgKFdIT0xFX0RPQ1VNRU5UICYmIEFMTE9XRURfVEFHU1snIWRvY3R5cGUnXSAmJiBib2R5Lm93bmVyRG9jdW1lbnQgJiYgYm9keS5vd25lckRvY3VtZW50LmRvY3R5cGUgJiYgYm9keS5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSAmJiByZWdFeHBUZXN0KERPQ1RZUEVfTkFNRSwgYm9keS5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSkpIHtcbiAgICAgICAgICBzZXJpYWxpemVkSFRNTCA9ICc8IURPQ1RZUEUgJyArIGJvZHkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUgKyAnPlxcbicgKyBzZXJpYWxpemVkSFRNTDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoU0FGRV9GT1JfVEVNUExBVEVTKSB7XG4gICAgICAgICAgc2VyaWFsaXplZEhUTUwgPSBzdHJpbmdSZXBsYWNlKHNlcmlhbGl6ZWRIVE1MLCBNVVNUQUNIRV9FWFBSJDEsICcgJyk7XG4gICAgICAgICAgc2VyaWFsaXplZEhUTUwgPSBzdHJpbmdSZXBsYWNlKHNlcmlhbGl6ZWRIVE1MLCBFUkJfRVhQUiQxLCAnICcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVzdGVkVHlwZXNQb2xpY3kgJiYgUkVUVVJOX1RSVVNURURfVFlQRSA/IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKHNlcmlhbGl6ZWRIVE1MKSA6IHNlcmlhbGl6ZWRIVE1MO1xuICAgICAgfTtcbiAgICAgIERPTVB1cmlmeS5zZXRDb25maWcgPSBmdW5jdGlvbiAoY2ZnKSB7XG4gICAgICAgIF9wYXJzZUNvbmZpZyhjZmcpO1xuICAgICAgICBTRVRfQ09ORklHID0gdHJ1ZTtcbiAgICAgIH07XG4gICAgICBET01QdXJpZnkuY2xlYXJDb25maWcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIENPTkZJRyA9IG51bGw7XG4gICAgICAgIFNFVF9DT05GSUcgPSBmYWxzZTtcbiAgICAgIH07XG4gICAgICBET01QdXJpZnkuaXNWYWxpZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uICh0YWcsIGF0dHIsIHZhbHVlKSB7XG4gICAgICAgIGlmICghQ09ORklHKSB7XG4gICAgICAgICAgX3BhcnNlQ29uZmlnKHt9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbGNUYWcgPSB0cmFuc2Zvcm1DYXNlRnVuYyh0YWcpO1xuICAgICAgICB2YXIgbGNOYW1lID0gdHJhbnNmb3JtQ2FzZUZ1bmMoYXR0cik7XG4gICAgICAgIHJldHVybiBfaXNWYWxpZEF0dHJpYnV0ZShsY1RhZywgbGNOYW1lLCB2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgRE9NUHVyaWZ5LmFkZEhvb2sgPSBmdW5jdGlvbiAoZW50cnlQb2ludCwgaG9va0Z1bmN0aW9uKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaG9va0Z1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGhvb2tzW2VudHJ5UG9pbnRdID0gaG9va3NbZW50cnlQb2ludF0gfHwgW107XG4gICAgICAgIGFycmF5UHVzaChob29rc1tlbnRyeVBvaW50XSwgaG9va0Z1bmN0aW9uKTtcbiAgICAgIH07XG4gICAgICBET01QdXJpZnkucmVtb3ZlSG9vayA9IGZ1bmN0aW9uIChlbnRyeVBvaW50KSB7XG4gICAgICAgIGlmIChob29rc1tlbnRyeVBvaW50XSkge1xuICAgICAgICAgIHJldHVybiBhcnJheVBvcChob29rc1tlbnRyeVBvaW50XSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBET01QdXJpZnkucmVtb3ZlSG9va3MgPSBmdW5jdGlvbiAoZW50cnlQb2ludCkge1xuICAgICAgICBpZiAoaG9va3NbZW50cnlQb2ludF0pIHtcbiAgICAgICAgICBob29rc1tlbnRyeVBvaW50XSA9IFtdO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgRE9NUHVyaWZ5LnJlbW92ZUFsbEhvb2tzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBob29rcyA9IHt9O1xuICAgICAgfTtcbiAgICAgIHJldHVybiBET01QdXJpZnk7XG4gICAgfVxuICAgIHZhciBwdXJpZnkgPSBjcmVhdGVET01QdXJpZnkoKTtcblxuICAgIGNvbnN0IHNhbml0aXplSHRtbFN0cmluZyA9IGh0bWwgPT4gcHVyaWZ5KCkuc2FuaXRpemUoaHRtbCk7XG5cbiAgICBjb25zdCBpc1RvdWNoID0gZ2xvYmFsJDUuZGV2aWNlVHlwZS5pc1RvdWNoKCk7XG4gICAgY29uc3QgaGlkZGVuSGVhZGVyID0gKHRpdGxlLCBjbG9zZSkgPT4gKHtcbiAgICAgIGRvbToge1xuICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICBzdHlsZXM6IHsgZGlzcGxheTogJ25vbmUnIH0sXG4gICAgICAgIGNsYXNzZXM6IFsndG94LWRpYWxvZ19faGVhZGVyJ11cbiAgICAgIH0sXG4gICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBjbG9zZVxuICAgICAgXVxuICAgIH0pO1xuICAgIGNvbnN0IHBDbG9zZSA9IChvbkNsb3NlLCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IE1vZGFsRGlhbG9nLnBhcnRzLmNsb3NlKEJ1dHRvbi5za2V0Y2goe1xuICAgICAgZG9tOiB7XG4gICAgICAgIHRhZzogJ2J1dHRvbicsXG4gICAgICAgIGNsYXNzZXM6IFtcbiAgICAgICAgICAndG94LWJ1dHRvbicsXG4gICAgICAgICAgJ3RveC1idXR0b24tLWljb24nLFxuICAgICAgICAgICd0b3gtYnV0dG9uLS1uYWtlZCdcbiAgICAgICAgXSxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICd0eXBlJzogJ2J1dHRvbicsXG4gICAgICAgICAgJ2FyaWEtbGFiZWwnOiBwcm92aWRlcnNCYWNrc3RhZ2UudHJhbnNsYXRlKCdDbG9zZScpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhY3Rpb246IG9uQ2xvc2UsXG4gICAgICBidXR0b25CZWhhdmlvdXJzOiBkZXJpdmUkMShbVGFic3RvcHBpbmcuY29uZmlnKHt9KV0pXG4gICAgfSkpO1xuICAgIGNvbnN0IHBVbnRpdGxlZCA9ICgpID0+IE1vZGFsRGlhbG9nLnBhcnRzLnRpdGxlKHtcbiAgICAgIGRvbToge1xuICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICBjbGFzc2VzOiBbJ3RveC1kaWFsb2dfX3RpdGxlJ10sXG4gICAgICAgIGlubmVySHRtbDogJycsXG4gICAgICAgIHN0eWxlczogeyBkaXNwbGF5OiAnbm9uZScgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHBCb2R5TWVzc2FnZSA9IChtZXNzYWdlLCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IE1vZGFsRGlhbG9nLnBhcnRzLmJvZHkoe1xuICAgICAgZG9tOiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFsndG94LWRpYWxvZ19fYm9keSddXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czogW3tcbiAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1kaWFsb2dfX2JvZHktY29udGVudCddXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21wb25lbnRzOiBbeyBkb206IGZyb21IdG1sKGA8cD4keyBzYW5pdGl6ZUh0bWxTdHJpbmcocHJvdmlkZXJzQmFja3N0YWdlLnRyYW5zbGF0ZShtZXNzYWdlKSkgfTwvcD5gKSB9XVxuICAgICAgICB9XVxuICAgIH0pO1xuICAgIGNvbnN0IHBGb290ZXIgPSBidXR0b25zID0+IE1vZGFsRGlhbG9nLnBhcnRzLmZvb3Rlcih7XG4gICAgICBkb206IHtcbiAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgY2xhc3NlczogWyd0b3gtZGlhbG9nX19mb290ZXInXVxuICAgICAgfSxcbiAgICAgIGNvbXBvbmVudHM6IGJ1dHRvbnNcbiAgICB9KTtcbiAgICBjb25zdCBwRm9vdGVyR3JvdXAgPSAoc3RhcnRCdXR0b25zLCBlbmRCdXR0b25zKSA9PiBbXG4gICAgICBDb250YWluZXIuc2tldGNoKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1kaWFsb2dfX2Zvb3Rlci1zdGFydCddXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IHN0YXJ0QnV0dG9uc1xuICAgICAgfSksXG4gICAgICBDb250YWluZXIuc2tldGNoKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1kaWFsb2dfX2Zvb3Rlci1lbmQnXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBlbmRCdXR0b25zXG4gICAgICB9KVxuICAgIF07XG4gICAgY29uc3QgcmVuZGVyRGlhbG9nJDEgPSBzcGVjID0+IHtcbiAgICAgIGNvbnN0IGRpYWxvZ0NsYXNzID0gJ3RveC1kaWFsb2cnO1xuICAgICAgY29uc3QgYmxvY2tlckNsYXNzID0gZGlhbG9nQ2xhc3MgKyAnLXdyYXAnO1xuICAgICAgY29uc3QgYmxvY2tlckJhY2tkcm9wQ2xhc3MgPSBibG9ja2VyQ2xhc3MgKyAnX19iYWNrZHJvcCc7XG4gICAgICBjb25zdCBzY3JvbGxMb2NrQ2xhc3MgPSBkaWFsb2dDbGFzcyArICdfX2Rpc2FibGUtc2Nyb2xsJztcbiAgICAgIHJldHVybiBNb2RhbERpYWxvZy5za2V0Y2goe1xuICAgICAgICBsYXp5U2luazogc3BlYy5sYXp5U2luayxcbiAgICAgICAgb25Fc2NhcGU6IGNvbXAgPT4ge1xuICAgICAgICAgIHNwZWMub25Fc2NhcGUoY29tcCk7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUodHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZVRhYnN0b3BBdDogZWxlbSA9PiAhaXNQc2V1ZG9TdG9wKGVsZW0pLFxuICAgICAgICBmaXJzdFRhYnN0b3A6IHNwZWMuZmlyc3RUYWJzdG9wLFxuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFtkaWFsb2dDbGFzc10uY29uY2F0KHNwZWMuZXh0cmFDbGFzc2VzKSxcbiAgICAgICAgICBzdHlsZXM6IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgICAgLi4uc3BlYy5leHRyYVN0eWxlc1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgIHNwZWMuaGVhZGVyLFxuICAgICAgICAgIHNwZWMuYm9keSxcbiAgICAgICAgICAuLi5zcGVjLmZvb3Rlci50b0FycmF5KClcbiAgICAgICAgXSxcbiAgICAgICAgcGFydHM6IHtcbiAgICAgICAgICBibG9ja2VyOiB7XG4gICAgICAgICAgICBkb206IGZyb21IdG1sKGA8ZGl2IGNsYXNzPVwiJHsgYmxvY2tlckNsYXNzIH1cIj48L2Rpdj5gKSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IFt7XG4gICAgICAgICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgICAgICAgICAgY2xhc3NlczogaXNUb3VjaCA/IFtcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tlckJhY2tkcm9wQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrZXJCYWNrZHJvcENsYXNzICsgJy0tb3BhcXVlJ1xuICAgICAgICAgICAgICAgICAgXSA6IFtibG9ja2VyQmFja2Ryb3BDbGFzc11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkcmFnQmxvY2tDbGFzczogYmxvY2tlckNsYXNzLFxuICAgICAgICBtb2RhbEJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICBGb2N1c2luZy5jb25maWcoe30pLFxuICAgICAgICAgIGNvbmZpZygnZGlhbG9nLWV2ZW50cycsIHNwZWMuZGlhbG9nRXZlbnRzLmNvbmNhdChbXG4gICAgICAgICAgICBydW5PblNvdXJjZShmb2N1c2luKCksIChjb21wLCBfc2UpID0+IHtcbiAgICAgICAgICAgICAgQmxvY2tpbmcuaXNCbG9ja2VkKGNvbXApID8gbm9vcCgpIDogS2V5aW5nLmZvY3VzSW4oY29tcCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHJ1biQxKGZvY3VzU2hpZnRlZCgpLCAoY29tcCwgc2UpID0+IHtcbiAgICAgICAgICAgICAgY29tcC5nZXRTeXN0ZW0oKS5icm9hZGNhc3RPbihbZGlhbG9nRm9jdXNTaGlmdGVkQ2hhbm5lbF0sIHsgbmV3Rm9jdXM6IHNlLmV2ZW50Lm5ld0ZvY3VzIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdKSksXG4gICAgICAgICAgY29uZmlnKCdzY3JvbGwtbG9jaycsIFtcbiAgICAgICAgICAgIHJ1bk9uQXR0YWNoZWQoKCkgPT4ge1xuICAgICAgICAgICAgICBhZGQkMihib2R5KCksIHNjcm9sbExvY2tDbGFzcyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHJ1bk9uRGV0YWNoZWQoKCkgPT4ge1xuICAgICAgICAgICAgICByZW1vdmUkMihib2R5KCksIHNjcm9sbExvY2tDbGFzcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIC4uLnNwZWMuZXh0cmFCZWhhdmlvdXJzXG4gICAgICAgIF0pLFxuICAgICAgICBldmVudE9yZGVyOiB7XG4gICAgICAgICAgW2V4ZWN1dGUkNSgpXTogWydkaWFsb2ctZXZlbnRzJ10sXG4gICAgICAgICAgW2F0dGFjaGVkVG9Eb20oKV06IFtcbiAgICAgICAgICAgICdzY3JvbGwtbG9jaycsXG4gICAgICAgICAgICAnZGlhbG9nLWV2ZW50cycsXG4gICAgICAgICAgICAnYWxsb3kuYmFzZS5iZWhhdmlvdXInXG4gICAgICAgICAgXSxcbiAgICAgICAgICBbZGV0YWNoZWRGcm9tRG9tKCldOiBbXG4gICAgICAgICAgICAnYWxsb3kuYmFzZS5iZWhhdmlvdXInLFxuICAgICAgICAgICAgJ2RpYWxvZy1ldmVudHMnLFxuICAgICAgICAgICAgJ3Njcm9sbC1sb2NrJ1xuICAgICAgICAgIF0sXG4gICAgICAgICAgLi4uc3BlYy5ldmVudE9yZGVyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJDbG9zZSA9IHByb3ZpZGVyc0JhY2tzdGFnZSA9PiBCdXR0b24uc2tldGNoKHtcbiAgICAgIGRvbToge1xuICAgICAgICB0YWc6ICdidXR0b24nLFxuICAgICAgICBjbGFzc2VzOiBbXG4gICAgICAgICAgJ3RveC1idXR0b24nLFxuICAgICAgICAgICd0b3gtYnV0dG9uLS1pY29uJyxcbiAgICAgICAgICAndG94LWJ1dHRvbi0tbmFrZWQnXG4gICAgICAgIF0sXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAndHlwZSc6ICdidXR0b24nLFxuICAgICAgICAgICdhcmlhLWxhYmVsJzogcHJvdmlkZXJzQmFja3N0YWdlLnRyYW5zbGF0ZSgnQ2xvc2UnKSxcbiAgICAgICAgICAndGl0bGUnOiBwcm92aWRlcnNCYWNrc3RhZ2UudHJhbnNsYXRlKCdDbG9zZScpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBidXR0b25CZWhhdmlvdXJzOiBkZXJpdmUkMShbVGFic3RvcHBpbmcuY29uZmlnKHt9KV0pLFxuICAgICAgY29tcG9uZW50czogW3JlbmRlciQzKCdjbG9zZScsIHtcbiAgICAgICAgICB0YWc6ICdzcGFuJyxcbiAgICAgICAgICBjbGFzc2VzOiBbJ3RveC1pY29uJ11cbiAgICAgICAgfSwgcHJvdmlkZXJzQmFja3N0YWdlLmljb25zKV0sXG4gICAgICBhY3Rpb246IGNvbXAgPT4ge1xuICAgICAgICBlbWl0KGNvbXAsIGZvcm1DYW5jZWxFdmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVuZGVyVGl0bGUgPSAoc3BlYywgZGlhbG9nSWQsIHRpdGxlSWQsIHByb3ZpZGVyc0JhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgcmVuZGVyQ29tcG9uZW50cyA9IGRhdGEgPT4gW3RleHQkMihwcm92aWRlcnNCYWNrc3RhZ2UudHJhbnNsYXRlKGRhdGEudGl0bGUpKV07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFsndG94LWRpYWxvZ19fdGl0bGUnXSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7IC4uLnRpdGxlSWQubWFwKHggPT4gKHsgaWQ6IHggfSkpLmdldE9yKHt9KSB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtdLFxuICAgICAgICBiZWhhdmlvdXJzOiBkZXJpdmUkMShbUmVmbGVjdGluZy5jb25maWcoe1xuICAgICAgICAgICAgY2hhbm5lbDogYCR7IHRpdGxlQ2hhbm5lbCB9LSR7IGRpYWxvZ0lkIH1gLFxuICAgICAgICAgICAgaW5pdGlhbERhdGE6IHNwZWMsXG4gICAgICAgICAgICByZW5kZXJDb21wb25lbnRzXG4gICAgICAgICAgfSldKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckRyYWdIYW5kbGUgPSAoKSA9PiAoeyBkb206IGZyb21IdG1sKCc8ZGl2IGNsYXNzPVwidG94LWRpYWxvZ19fZHJhZ2hhbmRsZVwiPjwvZGl2PicpIH0pO1xuICAgIGNvbnN0IHJlbmRlcklubGluZUhlYWRlciA9IChzcGVjLCBkaWFsb2dJZCwgdGl0bGVJZCwgcHJvdmlkZXJzQmFja3N0YWdlKSA9PiBDb250YWluZXIuc2tldGNoKHtcbiAgICAgIGRvbTogZnJvbUh0bWwoJzxkaXYgY2xhc3M9XCJ0b3gtZGlhbG9nX19oZWFkZXJcIj48L2Rpdj4nKSxcbiAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgcmVuZGVyVGl0bGUoc3BlYywgZGlhbG9nSWQsIE9wdGlvbmFsLnNvbWUodGl0bGVJZCksIHByb3ZpZGVyc0JhY2tzdGFnZSksXG4gICAgICAgIHJlbmRlckRyYWdIYW5kbGUoKSxcbiAgICAgICAgcmVuZGVyQ2xvc2UocHJvdmlkZXJzQmFja3N0YWdlKVxuICAgICAgXSxcbiAgICAgIGNvbnRhaW5lckJlaGF2aW91cnM6IGRlcml2ZSQxKFtEcmFnZ2luZy5jb25maWcoe1xuICAgICAgICAgIG1vZGU6ICdtb3VzZScsXG4gICAgICAgICAgYmxvY2tlckNsYXNzOiAnYmxvY2tlcicsXG4gICAgICAgICAgZ2V0VGFyZ2V0OiBoYW5kbGUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3QkMShoYW5kbGUsICdbcm9sZT1cImRpYWxvZ1wiXScpLmdldE9yRGllKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzbmFwczoge1xuICAgICAgICAgICAgZ2V0U25hcFBvaW50czogKCkgPT4gW10sXG4gICAgICAgICAgICBsZWZ0QXR0cjogJ2RhdGEtZHJhZy1sZWZ0JyxcbiAgICAgICAgICAgIHRvcEF0dHI6ICdkYXRhLWRyYWctdG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSldKVxuICAgIH0pO1xuICAgIGNvbnN0IHJlbmRlck1vZGFsSGVhZGVyID0gKHNwZWMsIGRpYWxvZ0lkLCBwcm92aWRlcnNCYWNrc3RhZ2UpID0+IHtcbiAgICAgIGNvbnN0IHBUaXRsZSA9IE1vZGFsRGlhbG9nLnBhcnRzLnRpdGxlKHJlbmRlclRpdGxlKHNwZWMsIGRpYWxvZ0lkLCBPcHRpb25hbC5ub25lKCksIHByb3ZpZGVyc0JhY2tzdGFnZSkpO1xuICAgICAgY29uc3QgcEhhbmRsZSA9IE1vZGFsRGlhbG9nLnBhcnRzLmRyYWdoYW5kbGUocmVuZGVyRHJhZ0hhbmRsZSgpKTtcbiAgICAgIGNvbnN0IHBDbG9zZSA9IE1vZGFsRGlhbG9nLnBhcnRzLmNsb3NlKHJlbmRlckNsb3NlKHByb3ZpZGVyc0JhY2tzdGFnZSkpO1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IFtwVGl0bGVdLmNvbmNhdChzcGVjLmRyYWdnYWJsZSA/IFtwSGFuZGxlXSA6IFtdKS5jb25jYXQoW3BDbG9zZV0pO1xuICAgICAgcmV0dXJuIENvbnRhaW5lci5za2V0Y2goe1xuICAgICAgICBkb206IGZyb21IdG1sKCc8ZGl2IGNsYXNzPVwidG94LWRpYWxvZ19faGVhZGVyXCI+PC9kaXY+JyksXG4gICAgICAgIGNvbXBvbmVudHNcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRIZWFkZXIgPSAodGl0bGUsIGRpYWxvZ0lkLCBiYWNrc3RhZ2UpID0+IHJlbmRlck1vZGFsSGVhZGVyKHtcbiAgICAgIHRpdGxlOiBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycy50cmFuc2xhdGUodGl0bGUpLFxuICAgICAgZHJhZ2dhYmxlOiBiYWNrc3RhZ2UuZGlhbG9nLmlzRHJhZ2dhYmxlTW9kYWwoKVxuICAgIH0sIGRpYWxvZ0lkLCBiYWNrc3RhZ2Uuc2hhcmVkLnByb3ZpZGVycyk7XG4gICAgY29uc3QgZ2V0QnVzeVNwZWMgPSAobWVzc2FnZSwgYnMsIHByb3ZpZGVycywgaGVhZGVySGVpZ2h0KSA9PiAoe1xuICAgICAgZG9tOiB7XG4gICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgIGNsYXNzZXM6IFsndG94LWRpYWxvZ19fYnVzeS1zcGlubmVyJ10sXG4gICAgICAgIGF0dHJpYnV0ZXM6IHsgJ2FyaWEtbGFiZWwnOiBwcm92aWRlcnMudHJhbnNsYXRlKG1lc3NhZ2UpIH0sXG4gICAgICAgIHN0eWxlczoge1xuICAgICAgICAgIGxlZnQ6ICcwcHgnLFxuICAgICAgICAgIHJpZ2h0OiAnMHB4JyxcbiAgICAgICAgICBib3R0b206ICcwcHgnLFxuICAgICAgICAgIHRvcDogYCR7IGhlYWRlckhlaWdodC5nZXRPcigwKSB9cHhgLFxuICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBiZWhhdmlvdXJzOiBicyxcbiAgICAgIGNvbXBvbmVudHM6IFt7IGRvbTogZnJvbUh0bWwoJzxkaXYgY2xhc3M9XCJ0b3gtc3Bpbm5lclwiPjxkaXY+PC9kaXY+PGRpdj48L2Rpdj48ZGl2PjwvZGl2PjwvZGl2PicpIH1dXG4gICAgfSk7XG4gICAgY29uc3QgZ2V0RXZlbnRFeHRyYXMgPSAobGF6eURpYWxvZywgcHJvdmlkZXJzLCBleHRyYSkgPT4gKHtcbiAgICAgIG9uQ2xvc2U6ICgpID0+IGV4dHJhLmNsb3NlV2luZG93KCksXG4gICAgICBvbkJsb2NrOiBibG9ja0V2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgaGVhZGVySGVpZ2h0ID0gZGVzY2VuZGFudChsYXp5RGlhbG9nKCkuZWxlbWVudCwgJy50b3gtZGlhbG9nX19oZWFkZXInKS5tYXAoaGVhZGVyID0+IGdldCRkKGhlYWRlcikpO1xuICAgICAgICBNb2RhbERpYWxvZy5zZXRCdXN5KGxhenlEaWFsb2coKSwgKF9jb21wLCBicykgPT4gZ2V0QnVzeVNwZWMoYmxvY2tFdmVudC5tZXNzYWdlLCBicywgcHJvdmlkZXJzLCBoZWFkZXJIZWlnaHQpKTtcbiAgICAgIH0sXG4gICAgICBvblVuYmxvY2s6ICgpID0+IHtcbiAgICAgICAgTW9kYWxEaWFsb2cuc2V0SWRsZShsYXp5RGlhbG9nKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlbmRlck1vZGFsRGlhbG9nID0gKHNwZWMsIGluaXRpYWxEYXRhLCBkaWFsb2dFdmVudHMsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlU3RhdGUgPSAoX2NvbXAsIGluY29taW5nKSA9PiBPcHRpb25hbC5zb21lKGluY29taW5nKTtcbiAgICAgIHJldHVybiBidWlsZCQxKHJlbmRlckRpYWxvZyQxKHtcbiAgICAgICAgLi4uc3BlYyxcbiAgICAgICAgZmlyc3RUYWJzdG9wOiAxLFxuICAgICAgICBsYXp5U2luazogYmFja3N0YWdlLnNoYXJlZC5nZXRTaW5rLFxuICAgICAgICBleHRyYUJlaGF2aW91cnM6IFtcbiAgICAgICAgICBSZWZsZWN0aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBjaGFubmVsOiBgJHsgZGlhbG9nQ2hhbm5lbCB9LSR7IHNwZWMuaWQgfWAsXG4gICAgICAgICAgICB1cGRhdGVTdGF0ZSxcbiAgICAgICAgICAgIGluaXRpYWxEYXRhXG4gICAgICAgICAgfSksXG4gICAgICAgICAgbWVtb3J5KHt9KSxcbiAgICAgICAgICAuLi5zcGVjLmV4dHJhQmVoYXZpb3Vyc1xuICAgICAgICBdLFxuICAgICAgICBvbkVzY2FwZTogY29tcCA9PiB7XG4gICAgICAgICAgZW1pdChjb21wLCBmb3JtQ2FuY2VsRXZlbnQpO1xuICAgICAgICB9LFxuICAgICAgICBkaWFsb2dFdmVudHMsXG4gICAgICAgIGV2ZW50T3JkZXI6IHtcbiAgICAgICAgICBbcmVjZWl2ZSgpXTogW1xuICAgICAgICAgICAgUmVmbGVjdGluZy5uYW1lKCksXG4gICAgICAgICAgICBSZWNlaXZpbmcubmFtZSgpXG4gICAgICAgICAgXSxcbiAgICAgICAgICBbYXR0YWNoZWRUb0RvbSgpXTogW1xuICAgICAgICAgICAgJ3Njcm9sbC1sb2NrJyxcbiAgICAgICAgICAgIFJlZmxlY3RpbmcubmFtZSgpLFxuICAgICAgICAgICAgJ21lc3NhZ2VzJyxcbiAgICAgICAgICAgICdkaWFsb2ctZXZlbnRzJyxcbiAgICAgICAgICAgICdhbGxveS5iYXNlLmJlaGF2aW91cidcbiAgICAgICAgICBdLFxuICAgICAgICAgIFtkZXRhY2hlZEZyb21Eb20oKV06IFtcbiAgICAgICAgICAgICdhbGxveS5iYXNlLmJlaGF2aW91cicsXG4gICAgICAgICAgICAnZGlhbG9nLWV2ZW50cycsXG4gICAgICAgICAgICAnbWVzc2FnZXMnLFxuICAgICAgICAgICAgUmVmbGVjdGluZy5uYW1lKCksXG4gICAgICAgICAgICAnc2Nyb2xsLWxvY2snXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfTtcbiAgICBjb25zdCBtYXBNZW51QnV0dG9ucyA9IChidXR0b25zLCBtZW51SXRlbVN0YXRlcyA9IHt9KSA9PiB7XG4gICAgICBjb25zdCBtYXBJdGVtcyA9IGJ1dHRvbiA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gbWFwJDIoYnV0dG9uLml0ZW1zLCBpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBjZWxsID0gZ2V0JGcobWVudUl0ZW1TdGF0ZXMsIGl0ZW0ubmFtZSkuZ2V0T3IoQ2VsbChmYWxzZSkpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgc3RvcmFnZTogY2VsbFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmJ1dHRvbixcbiAgICAgICAgICBpdGVtc1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHJldHVybiBtYXAkMihidXR0b25zLCBidXR0b24gPT4ge1xuICAgICAgICByZXR1cm4gYnV0dG9uLnR5cGUgPT09ICdtZW51JyA/IG1hcEl0ZW1zKGJ1dHRvbikgOiBidXR0b247XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGV4dHJhY3RDZWxsc1RvT2JqZWN0ID0gYnV0dG9ucyA9PiBmb2xkbChidXR0b25zLCAoYWNjLCBidXR0b24pID0+IHtcbiAgICAgIGlmIChidXR0b24udHlwZSA9PT0gJ21lbnUnKSB7XG4gICAgICAgIGNvbnN0IG1lbnVCdXR0b24gPSBidXR0b247XG4gICAgICAgIHJldHVybiBmb2xkbChtZW51QnV0dG9uLml0ZW1zLCAoaW5uZXJBY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgICBpbm5lckFjY1tpdGVtLm5hbWVdID0gaXRlbS5zdG9yYWdlO1xuICAgICAgICAgIHJldHVybiBpbm5lckFjYztcbiAgICAgICAgfSwgYWNjKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuXG4gICAgY29uc3QgaW5pdENvbW1vbkV2ZW50cyA9IChmaXJlQXBpRXZlbnQsIGV4dHJhcykgPT4gW1xuICAgICAgcnVuV2l0aFRhcmdldChmb2N1c2luKCksIG9uRm9jdXMpLFxuICAgICAgZmlyZUFwaUV2ZW50KGZvcm1DbG9zZUV2ZW50LCAoX2FwaSwgc3BlYywgX2V2ZW50LCBzZWxmKSA9PiB7XG4gICAgICAgIGFjdGl2ZSQxKGdldFJvb3ROb2RlKHNlbGYuZWxlbWVudCkpLmZvbGQobm9vcCwgYmx1ciQxKTtcbiAgICAgICAgZXh0cmFzLm9uQ2xvc2UoKTtcbiAgICAgICAgc3BlYy5vbkNsb3NlKCk7XG4gICAgICB9KSxcbiAgICAgIGZpcmVBcGlFdmVudChmb3JtQ2FuY2VsRXZlbnQsIChhcGksIHNwZWMsIF9ldmVudCwgc2VsZikgPT4ge1xuICAgICAgICBzcGVjLm9uQ2FuY2VsKGFwaSk7XG4gICAgICAgIGVtaXQoc2VsZiwgZm9ybUNsb3NlRXZlbnQpO1xuICAgICAgfSksXG4gICAgICBydW4kMShmb3JtVW5ibG9ja0V2ZW50LCAoX2MsIF9zZSkgPT4gZXh0cmFzLm9uVW5ibG9jaygpKSxcbiAgICAgIHJ1biQxKGZvcm1CbG9ja0V2ZW50LCAoX2MsIHNlKSA9PiBleHRyYXMub25CbG9jayhzZS5ldmVudCkpXG4gICAgXTtcbiAgICBjb25zdCBpbml0VXJsRGlhbG9nID0gKGdldEluc3RhbmNlQXBpLCBleHRyYXMpID0+IHtcbiAgICAgIGNvbnN0IGZpcmVBcGlFdmVudCA9IChldmVudE5hbWUsIGYpID0+IHJ1biQxKGV2ZW50TmFtZSwgKGMsIHNlKSA9PiB7XG4gICAgICAgIHdpdGhTcGVjKGMsIChzcGVjLCBfYykgPT4ge1xuICAgICAgICAgIGYoZ2V0SW5zdGFuY2VBcGkoKSwgc3BlYywgc2UuZXZlbnQsIGMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgd2l0aFNwZWMgPSAoYywgZikgPT4ge1xuICAgICAgICBSZWZsZWN0aW5nLmdldFN0YXRlKGMpLmdldCgpLmVhY2goY3VycmVudERpYWxvZyA9PiB7XG4gICAgICAgICAgZihjdXJyZW50RGlhbG9nLCBjKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4uaW5pdENvbW1vbkV2ZW50cyhmaXJlQXBpRXZlbnQsIGV4dHJhcyksXG4gICAgICAgIGZpcmVBcGlFdmVudChmb3JtQWN0aW9uRXZlbnQsIChhcGksIHNwZWMsIGV2ZW50KSA9PiB7XG4gICAgICAgICAgc3BlYy5vbkFjdGlvbihhcGksIHsgbmFtZTogZXZlbnQubmFtZSB9KTtcbiAgICAgICAgfSlcbiAgICAgIF07XG4gICAgfTtcbiAgICBjb25zdCBpbml0RGlhbG9nID0gKGdldEluc3RhbmNlQXBpLCBleHRyYXMsIGdldFNpbmspID0+IHtcbiAgICAgIGNvbnN0IGZpcmVBcGlFdmVudCA9IChldmVudE5hbWUsIGYpID0+IHJ1biQxKGV2ZW50TmFtZSwgKGMsIHNlKSA9PiB7XG4gICAgICAgIHdpdGhTcGVjKGMsIChzcGVjLCBfYykgPT4ge1xuICAgICAgICAgIGYoZ2V0SW5zdGFuY2VBcGkoKSwgc3BlYywgc2UuZXZlbnQsIGMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgd2l0aFNwZWMgPSAoYywgZikgPT4ge1xuICAgICAgICBSZWZsZWN0aW5nLmdldFN0YXRlKGMpLmdldCgpLmVhY2goY3VycmVudERpYWxvZ0luaXQgPT4ge1xuICAgICAgICAgIGYoY3VycmVudERpYWxvZ0luaXQuaW50ZXJuYWxEaWFsb2csIGMpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gW1xuICAgICAgICAuLi5pbml0Q29tbW9uRXZlbnRzKGZpcmVBcGlFdmVudCwgZXh0cmFzKSxcbiAgICAgICAgZmlyZUFwaUV2ZW50KGZvcm1TdWJtaXRFdmVudCwgKGFwaSwgc3BlYykgPT4gc3BlYy5vblN1Ym1pdChhcGkpKSxcbiAgICAgICAgZmlyZUFwaUV2ZW50KGZvcm1DaGFuZ2VFdmVudCwgKGFwaSwgc3BlYywgZXZlbnQpID0+IHtcbiAgICAgICAgICBzcGVjLm9uQ2hhbmdlKGFwaSwgeyBuYW1lOiBldmVudC5uYW1lIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgZmlyZUFwaUV2ZW50KGZvcm1BY3Rpb25FdmVudCwgKGFwaSwgc3BlYywgZXZlbnQsIGNvbXBvbmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZvY3VzSW4gPSAoKSA9PiBjb21wb25lbnQuZ2V0U3lzdGVtKCkuaXNDb25uZWN0ZWQoKSA/IEtleWluZy5mb2N1c0luKGNvbXBvbmVudCkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgY29uc3QgaXNEaXNhYmxlZCA9IGZvY3VzZWQgPT4gaGFzJDEoZm9jdXNlZCwgJ2Rpc2FibGVkJykgfHwgZ2V0T3B0KGZvY3VzZWQsICdhcmlhLWRpc2FibGVkJykuZXhpc3RzKHZhbCA9PiB2YWwgPT09ICd0cnVlJyk7XG4gICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSBnZXRSb290Tm9kZShjb21wb25lbnQuZWxlbWVudCk7XG4gICAgICAgICAgY29uc3QgY3VycmVudCA9IGFjdGl2ZSQxKHJvb3ROb2RlKTtcbiAgICAgICAgICBzcGVjLm9uQWN0aW9uKGFwaSwge1xuICAgICAgICAgICAgbmFtZTogZXZlbnQubmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiBldmVudC52YWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGFjdGl2ZSQxKHJvb3ROb2RlKS5mb2xkKGZvY3VzSW4sIGZvY3VzZWQgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRGlzYWJsZWQoZm9jdXNlZCkpIHtcbiAgICAgICAgICAgICAgZm9jdXNJbigpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LmV4aXN0cyhjdXIgPT4gY29udGFpbnMoZm9jdXNlZCwgY3VyKSAmJiBpc0Rpc2FibGVkKGN1cikpKSB7XG4gICAgICAgICAgICAgIGZvY3VzSW4oKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGdldFNpbmsoKS50b09wdGlvbmFsKCkuZmlsdGVyKHNpbmsgPT4gIWNvbnRhaW5zKHNpbmsuZWxlbWVudCwgZm9jdXNlZCkpLmVhY2goZm9jdXNJbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLFxuICAgICAgICBmaXJlQXBpRXZlbnQoZm9ybVRhYkNoYW5nZUV2ZW50LCAoYXBpLCBzcGVjLCBldmVudCkgPT4ge1xuICAgICAgICAgIHNwZWMub25UYWJDaGFuZ2UoYXBpLCB7XG4gICAgICAgICAgICBuZXdUYWJOYW1lOiBldmVudC5uYW1lLFxuICAgICAgICAgICAgb2xkVGFiTmFtZTogZXZlbnQub2xkTmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgcnVuT25EZXRhY2hlZChjb21wb25lbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IGFwaSA9IGdldEluc3RhbmNlQXBpKCk7XG4gICAgICAgICAgUmVwcmVzZW50aW5nLnNldFZhbHVlKGNvbXBvbmVudCwgYXBpLmdldERhdGEoKSk7XG4gICAgICAgIH0pXG4gICAgICBdO1xuICAgIH07XG5cbiAgICBjb25zdCBtYWtlQnV0dG9uID0gKGJ1dHRvbiwgYmFja3N0YWdlKSA9PiByZW5kZXJGb290ZXJCdXR0b24oYnV0dG9uLCBidXR0b24udHlwZSwgYmFja3N0YWdlKTtcbiAgICBjb25zdCBsb29rdXAgPSAoY29tcEluU3lzdGVtLCBmb290ZXJCdXR0b25zLCBidXR0b25OYW1lKSA9PiBmaW5kJDUoZm9vdGVyQnV0dG9ucywgYnV0dG9uID0+IGJ1dHRvbi5uYW1lID09PSBidXR0b25OYW1lKS5iaW5kKG1lbUJ1dHRvbiA9PiBtZW1CdXR0b24ubWVtZW50by5nZXRPcHQoY29tcEluU3lzdGVtKSk7XG4gICAgY29uc3QgcmVuZGVyQ29tcG9uZW50cyA9IChfZGF0YSwgc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGZvb3RlckJ1dHRvbnMgPSBzdGF0ZS5tYXAocyA9PiBzLmZvb3RlckJ1dHRvbnMpLmdldE9yKFtdKTtcbiAgICAgIGNvbnN0IGJ1dHRvbkdyb3VwcyA9IHBhcnRpdGlvbiQzKGZvb3RlckJ1dHRvbnMsIGJ1dHRvbiA9PiBidXR0b24uYWxpZ24gPT09ICdzdGFydCcpO1xuICAgICAgY29uc3QgbWFrZUdyb3VwID0gKGVkZ2UsIGJ1dHRvbnMpID0+IENvbnRhaW5lci5za2V0Y2goe1xuICAgICAgICBkb206IHtcbiAgICAgICAgICB0YWc6ICdkaXYnLFxuICAgICAgICAgIGNsYXNzZXM6IFtgdG94LWRpYWxvZ19fZm9vdGVyLSR7IGVkZ2UgfWBdXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IG1hcCQyKGJ1dHRvbnMsIGJ1dHRvbiA9PiBidXR0b24ubWVtZW50by5hc1NwZWMoKSlcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RhcnRCdXR0b25zID0gbWFrZUdyb3VwKCdzdGFydCcsIGJ1dHRvbkdyb3Vwcy5wYXNzKTtcbiAgICAgIGNvbnN0IGVuZEJ1dHRvbnMgPSBtYWtlR3JvdXAoJ2VuZCcsIGJ1dHRvbkdyb3Vwcy5mYWlsKTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHN0YXJ0QnV0dG9ucyxcbiAgICAgICAgZW5kQnV0dG9uc1xuICAgICAgXTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckZvb3RlciA9IChpbml0U3BlYywgZGlhbG9nSWQsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlU3RhdGUgPSAoY29tcCwgZGF0YSkgPT4ge1xuICAgICAgICBjb25zdCBmb290ZXJCdXR0b25zID0gbWFwJDIoZGF0YS5idXR0b25zLCBidXR0b24gPT4ge1xuICAgICAgICAgIGNvbnN0IG1lbUJ1dHRvbiA9IHJlY29yZChtYWtlQnV0dG9uKGJ1dHRvbiwgYmFja3N0YWdlKSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGJ1dHRvbi5uYW1lLFxuICAgICAgICAgICAgYWxpZ246IGJ1dHRvbi5hbGlnbixcbiAgICAgICAgICAgIG1lbWVudG86IG1lbUJ1dHRvblxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBsb29rdXBCeU5hbWUgPSBidXR0b25OYW1lID0+IGxvb2t1cChjb21wLCBmb290ZXJCdXR0b25zLCBidXR0b25OYW1lKTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgIGxvb2t1cEJ5TmFtZSxcbiAgICAgICAgICBmb290ZXJCdXR0b25zXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRvbTogZnJvbUh0bWwoJzxkaXYgY2xhc3M9XCJ0b3gtZGlhbG9nX19mb290ZXJcIj48L2Rpdj4nKSxcbiAgICAgICAgY29tcG9uZW50czogW10sXG4gICAgICAgIGJlaGF2aW91cnM6IGRlcml2ZSQxKFtSZWZsZWN0aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBjaGFubmVsOiBgJHsgZm9vdGVyQ2hhbm5lbCB9LSR7IGRpYWxvZ0lkIH1gLFxuICAgICAgICAgICAgaW5pdGlhbERhdGE6IGluaXRTcGVjLFxuICAgICAgICAgICAgdXBkYXRlU3RhdGUsXG4gICAgICAgICAgICByZW5kZXJDb21wb25lbnRzXG4gICAgICAgICAgfSldKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlcklubGluZUZvb3RlciA9IChpbml0U3BlYywgZGlhbG9nSWQsIGJhY2tzdGFnZSkgPT4gcmVuZGVyRm9vdGVyKGluaXRTcGVjLCBkaWFsb2dJZCwgYmFja3N0YWdlKTtcbiAgICBjb25zdCByZW5kZXJNb2RhbEZvb3RlciA9IChpbml0U3BlYywgZGlhbG9nSWQsIGJhY2tzdGFnZSkgPT4gTW9kYWxEaWFsb2cucGFydHMuZm9vdGVyKHJlbmRlckZvb3Rlcihpbml0U3BlYywgZGlhbG9nSWQsIGJhY2tzdGFnZSkpO1xuXG4gICAgY29uc3QgZ2V0Q29tcEJ5TmFtZSA9IChhY2Nlc3MsIG5hbWUpID0+IHtcbiAgICAgIGNvbnN0IHJvb3QgPSBhY2Nlc3MuZ2V0Um9vdCgpO1xuICAgICAgaWYgKHJvb3QuZ2V0U3lzdGVtKCkuaXNDb25uZWN0ZWQoKSkge1xuICAgICAgICBjb25zdCBmb3JtID0gQ29tcG9zaW5nLmdldEN1cnJlbnQoYWNjZXNzLmdldEZvcm1XcmFwcGVyKCkpLmdldE9yKGFjY2Vzcy5nZXRGb3JtV3JhcHBlcigpKTtcbiAgICAgICAgcmV0dXJuIEZvcm0uZ2V0RmllbGQoZm9ybSwgbmFtZSkub3JUaHVuaygoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9vdGVyID0gYWNjZXNzLmdldEZvb3RlcigpO1xuICAgICAgICAgIGNvbnN0IGZvb3RlclN0YXRlID0gZm9vdGVyLmJpbmQoZiA9PiBSZWZsZWN0aW5nLmdldFN0YXRlKGYpLmdldCgpKTtcbiAgICAgICAgICByZXR1cm4gZm9vdGVyU3RhdGUuYmluZChmID0+IGYubG9va3VwQnlOYW1lKG5hbWUpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdmFsaWRhdGVEYXRhJDEgPSAoYWNjZXNzLCBkYXRhKSA9PiB7XG4gICAgICBjb25zdCByb290ID0gYWNjZXNzLmdldFJvb3QoKTtcbiAgICAgIHJldHVybiBSZWZsZWN0aW5nLmdldFN0YXRlKHJvb3QpLmdldCgpLm1hcChkaWFsb2dTdGF0ZSA9PiBnZXRPckRpZShhc1JhdygnZGF0YScsIGRpYWxvZ1N0YXRlLmRhdGFWYWxpZGF0b3IsIGRhdGEpKSkuZ2V0T3IoZGF0YSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXREaWFsb2dBcGkgPSAoYWNjZXNzLCBkb1JlZGlhbCwgbWVudUl0ZW1TdGF0ZXMpID0+IHtcbiAgICAgIGNvbnN0IHdpdGhSb290ID0gZiA9PiB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBhY2Nlc3MuZ2V0Um9vdCgpO1xuICAgICAgICBpZiAocm9vdC5nZXRTeXN0ZW0oKS5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgICAgZihyb290KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldERhdGEgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBhY2Nlc3MuZ2V0Um9vdCgpO1xuICAgICAgICBjb25zdCB2YWx1ZUNvbXAgPSByb290LmdldFN5c3RlbSgpLmlzQ29ubmVjdGVkKCkgPyBhY2Nlc3MuZ2V0Rm9ybVdyYXBwZXIoKSA6IHJvb3Q7XG4gICAgICAgIGNvbnN0IHJlcHJlc2VudGVkVmFsdWVzID0gUmVwcmVzZW50aW5nLmdldFZhbHVlKHZhbHVlQ29tcCk7XG4gICAgICAgIGNvbnN0IG1lbnVJdGVtQ3VycmVudFN0YXRlID0gbWFwJDEobWVudUl0ZW1TdGF0ZXMsIGNlbGwgPT4gY2VsbC5nZXQoKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmVwcmVzZW50ZWRWYWx1ZXMsXG4gICAgICAgICAgLi4ubWVudUl0ZW1DdXJyZW50U3RhdGVcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXREYXRhID0gbmV3RGF0YSA9PiB7XG4gICAgICAgIHdpdGhSb290KF8gPT4ge1xuICAgICAgICAgIGNvbnN0IHByZXZEYXRhID0gaW5zdGFuY2VBcGkuZ2V0RGF0YSgpO1xuICAgICAgICAgIGNvbnN0IG1lcmdlZERhdGEgPSBkZWVwTWVyZ2UocHJldkRhdGEsIG5ld0RhdGEpO1xuICAgICAgICAgIGNvbnN0IG5ld0ludGVybmFsRGF0YSA9IHZhbGlkYXRlRGF0YSQxKGFjY2VzcywgbWVyZ2VkRGF0YSk7XG4gICAgICAgICAgY29uc3QgZm9ybSA9IGFjY2Vzcy5nZXRGb3JtV3JhcHBlcigpO1xuICAgICAgICAgIFJlcHJlc2VudGluZy5zZXRWYWx1ZShmb3JtLCBuZXdJbnRlcm5hbERhdGEpO1xuICAgICAgICAgIGVhY2gobWVudUl0ZW1TdGF0ZXMsICh2LCBrKSA9PiB7XG4gICAgICAgICAgICBpZiAoaGFzJDIobWVyZ2VkRGF0YSwgaykpIHtcbiAgICAgICAgICAgICAgdi5zZXQobWVyZ2VkRGF0YVtrXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldEVuYWJsZWQgPSAobmFtZSwgc3RhdGUpID0+IHtcbiAgICAgICAgZ2V0Q29tcEJ5TmFtZShhY2Nlc3MsIG5hbWUpLmVhY2goc3RhdGUgPyBEaXNhYmxpbmcuZW5hYmxlIDogRGlzYWJsaW5nLmRpc2FibGUpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZvY3VzID0gbmFtZSA9PiB7XG4gICAgICAgIGdldENvbXBCeU5hbWUoYWNjZXNzLCBuYW1lKS5lYWNoKEZvY3VzaW5nLmZvY3VzKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBibG9jayA9IG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAoIWlzU3RyaW5nKG1lc3NhZ2UpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZGlhbG9nSW5zdGFuY2VBUEkuYmxvY2sgZnVuY3Rpb24gc2hvdWxkIGJlIHBhc3NlZCBhIGJsb2NraW5nIG1lc3NhZ2Ugb2YgdHlwZSBzdHJpbmcgYXMgYW4gYXJndW1lbnQnKTtcbiAgICAgICAgfVxuICAgICAgICB3aXRoUm9vdChyb290ID0+IHtcbiAgICAgICAgICBlbWl0V2l0aChyb290LCBmb3JtQmxvY2tFdmVudCwgeyBtZXNzYWdlIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCB1bmJsb2NrID0gKCkgPT4ge1xuICAgICAgICB3aXRoUm9vdChyb290ID0+IHtcbiAgICAgICAgICBlbWl0KHJvb3QsIGZvcm1VbmJsb2NrRXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzaG93VGFiID0gbmFtZSA9PiB7XG4gICAgICAgIHdpdGhSb290KF8gPT4ge1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSBhY2Nlc3MuZ2V0Qm9keSgpO1xuICAgICAgICAgIGNvbnN0IGJvZHlTdGF0ZSA9IFJlZmxlY3RpbmcuZ2V0U3RhdGUoYm9keSk7XG4gICAgICAgICAgaWYgKGJvZHlTdGF0ZS5nZXQoKS5leGlzdHMoYiA9PiBiLmlzVGFiUGFuZWwoKSkpIHtcbiAgICAgICAgICAgIENvbXBvc2luZy5nZXRDdXJyZW50KGJvZHkpLmVhY2godGFiU2VjdGlvbiA9PiB7XG4gICAgICAgICAgICAgIFRhYlNlY3Rpb24uc2hvd1RhYih0YWJTZWN0aW9uLCBuYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVkaWFsID0gZCA9PiB7XG4gICAgICAgIHdpdGhSb290KHJvb3QgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gYWNjZXNzLmdldElkKCk7XG4gICAgICAgICAgY29uc3QgZGlhbG9nSW5pdCA9IGRvUmVkaWFsKGQpO1xuICAgICAgICAgIGNvbnN0IHN0b3JlZE1lbnVCdXR0b25zID0gbWFwTWVudUJ1dHRvbnMoZGlhbG9nSW5pdC5pbnRlcm5hbERpYWxvZy5idXR0b25zLCBtZW51SXRlbVN0YXRlcyk7XG4gICAgICAgICAgcm9vdC5nZXRTeXN0ZW0oKS5icm9hZGNhc3RPbihbYCR7IGRpYWxvZ0NoYW5uZWwgfS0keyBpZCB9YF0sIGRpYWxvZ0luaXQpO1xuICAgICAgICAgIHJvb3QuZ2V0U3lzdGVtKCkuYnJvYWRjYXN0T24oW2AkeyB0aXRsZUNoYW5uZWwgfS0keyBpZCB9YF0sIGRpYWxvZ0luaXQuaW50ZXJuYWxEaWFsb2cpO1xuICAgICAgICAgIHJvb3QuZ2V0U3lzdGVtKCkuYnJvYWRjYXN0T24oW2AkeyBib2R5Q2hhbm5lbCB9LSR7IGlkIH1gXSwgZGlhbG9nSW5pdC5pbnRlcm5hbERpYWxvZyk7XG4gICAgICAgICAgcm9vdC5nZXRTeXN0ZW0oKS5icm9hZGNhc3RPbihbYCR7IGZvb3RlckNoYW5uZWwgfS0keyBpZCB9YF0sIHtcbiAgICAgICAgICAgIC4uLmRpYWxvZ0luaXQuaW50ZXJuYWxEaWFsb2csXG4gICAgICAgICAgICBidXR0b25zOiBzdG9yZWRNZW51QnV0dG9uc1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGluc3RhbmNlQXBpLnNldERhdGEoZGlhbG9nSW5pdC5pbml0aWFsRGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNsb3NlID0gKCkgPT4ge1xuICAgICAgICB3aXRoUm9vdChyb290ID0+IHtcbiAgICAgICAgICBlbWl0KHJvb3QsIGZvcm1DbG9zZUV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaW5zdGFuY2VBcGkgPSB7XG4gICAgICAgIGdldERhdGEsXG4gICAgICAgIHNldERhdGEsXG4gICAgICAgIHNldEVuYWJsZWQsXG4gICAgICAgIGZvY3VzLFxuICAgICAgICBibG9jayxcbiAgICAgICAgdW5ibG9jayxcbiAgICAgICAgc2hvd1RhYixcbiAgICAgICAgcmVkaWFsLFxuICAgICAgICBjbG9zZSxcbiAgICAgICAgdG9nZ2xlRnVsbHNjcmVlbjogYWNjZXNzLnRvZ2dsZUZ1bGxzY3JlZW5cbiAgICAgIH07XG4gICAgICByZXR1cm4gaW5zdGFuY2VBcGk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldERpYWxvZ1NpemVDbGFzc2VzID0gc2l6ZSA9PiB7XG4gICAgICBzd2l0Y2ggKHNpemUpIHtcbiAgICAgIGNhc2UgJ2xhcmdlJzpcbiAgICAgICAgcmV0dXJuIFsndG94LWRpYWxvZy0td2lkdGgtbGcnXTtcbiAgICAgIGNhc2UgJ21lZGl1bSc6XG4gICAgICAgIHJldHVybiBbJ3RveC1kaWFsb2ctLXdpZHRoLW1kJ107XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJEaWFsb2cgPSAoZGlhbG9nSW5pdCwgZXh0cmEsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgZGlhbG9nSWQgPSBnZW5lcmF0ZSQ2KCdkaWFsb2cnKTtcbiAgICAgIGNvbnN0IGludGVybmFsRGlhbG9nID0gZGlhbG9nSW5pdC5pbnRlcm5hbERpYWxvZztcbiAgICAgIGNvbnN0IGhlYWRlciA9IGdldEhlYWRlcihpbnRlcm5hbERpYWxvZy50aXRsZSwgZGlhbG9nSWQsIGJhY2tzdGFnZSk7XG4gICAgICBjb25zdCBib2R5ID0gcmVuZGVyTW9kYWxCb2R5KHtcbiAgICAgICAgYm9keTogaW50ZXJuYWxEaWFsb2cuYm9keSxcbiAgICAgICAgaW5pdGlhbERhdGE6IGludGVybmFsRGlhbG9nLmluaXRpYWxEYXRhXG4gICAgICB9LCBkaWFsb2dJZCwgYmFja3N0YWdlKTtcbiAgICAgIGNvbnN0IHN0b3JlZE1lbnVCdXR0b25zID0gbWFwTWVudUJ1dHRvbnMoaW50ZXJuYWxEaWFsb2cuYnV0dG9ucyk7XG4gICAgICBjb25zdCBvYmpPZkNlbGxzID0gZXh0cmFjdENlbGxzVG9PYmplY3Qoc3RvcmVkTWVudUJ1dHRvbnMpO1xuICAgICAgY29uc3QgZm9vdGVyID0gc29tZUlmKHN0b3JlZE1lbnVCdXR0b25zLmxlbmd0aCAhPT0gMCwgcmVuZGVyTW9kYWxGb290ZXIoeyBidXR0b25zOiBzdG9yZWRNZW51QnV0dG9ucyB9LCBkaWFsb2dJZCwgYmFja3N0YWdlKSk7XG4gICAgICBjb25zdCBkaWFsb2dFdmVudHMgPSBpbml0RGlhbG9nKCgpID0+IGluc3RhbmNlQXBpLCBnZXRFdmVudEV4dHJhcygoKSA9PiBkaWFsb2csIGJhY2tzdGFnZS5zaGFyZWQucHJvdmlkZXJzLCBleHRyYSksIGJhY2tzdGFnZS5zaGFyZWQuZ2V0U2luayk7XG4gICAgICBjb25zdCBkaWFsb2dTaXplID0gZ2V0RGlhbG9nU2l6ZUNsYXNzZXMoaW50ZXJuYWxEaWFsb2cuc2l6ZSk7XG4gICAgICBjb25zdCBzcGVjID0ge1xuICAgICAgICBpZDogZGlhbG9nSWQsXG4gICAgICAgIGhlYWRlcixcbiAgICAgICAgYm9keSxcbiAgICAgICAgZm9vdGVyLFxuICAgICAgICBleHRyYUNsYXNzZXM6IGRpYWxvZ1NpemUsXG4gICAgICAgIGV4dHJhQmVoYXZpb3VyczogW10sXG4gICAgICAgIGV4dHJhU3R5bGVzOiB7fVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGRpYWxvZyA9IHJlbmRlck1vZGFsRGlhbG9nKHNwZWMsIGRpYWxvZ0luaXQsIGRpYWxvZ0V2ZW50cywgYmFja3N0YWdlKTtcbiAgICAgIGNvbnN0IG1vZGFsQWNjZXNzID0gKCgpID0+IHtcbiAgICAgICAgY29uc3QgZ2V0Rm9ybSA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBvdXRlckZvcm0gPSBNb2RhbERpYWxvZy5nZXRCb2R5KGRpYWxvZyk7XG4gICAgICAgICAgcmV0dXJuIENvbXBvc2luZy5nZXRDdXJyZW50KG91dGVyRm9ybSkuZ2V0T3Iob3V0ZXJGb3JtKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdG9nZ2xlRnVsbHNjcmVlbiA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBmdWxsc2NyZWVuQ2xhc3MgPSAndG94LWRpYWxvZy0tZnVsbHNjcmVlbic7XG4gICAgICAgICAgY29uc3Qgc3VnYXJCb2R5ID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZGlhbG9nLmVsZW1lbnQuZG9tKTtcbiAgICAgICAgICBpZiAoIWhhcyhzdWdhckJvZHksIGZ1bGxzY3JlZW5DbGFzcykpIHtcbiAgICAgICAgICAgIHJlbW92ZSQxKHN1Z2FyQm9keSwgZGlhbG9nU2l6ZSk7XG4gICAgICAgICAgICBhZGQkMihzdWdhckJvZHksIGZ1bGxzY3JlZW5DbGFzcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbW92ZSQyKHN1Z2FyQm9keSwgZnVsbHNjcmVlbkNsYXNzKTtcbiAgICAgICAgICAgIGFkZCQxKHN1Z2FyQm9keSwgZGlhbG9nU2l6ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGdldElkOiBjb25zdGFudCQxKGRpYWxvZ0lkKSxcbiAgICAgICAgICBnZXRSb290OiBjb25zdGFudCQxKGRpYWxvZyksXG4gICAgICAgICAgZ2V0Qm9keTogKCkgPT4gTW9kYWxEaWFsb2cuZ2V0Qm9keShkaWFsb2cpLFxuICAgICAgICAgIGdldEZvb3RlcjogKCkgPT4gTW9kYWxEaWFsb2cuZ2V0Rm9vdGVyKGRpYWxvZyksXG4gICAgICAgICAgZ2V0Rm9ybVdyYXBwZXI6IGdldEZvcm0sXG4gICAgICAgICAgdG9nZ2xlRnVsbHNjcmVlblxuICAgICAgICB9O1xuICAgICAgfSkoKTtcbiAgICAgIGNvbnN0IGluc3RhbmNlQXBpID0gZ2V0RGlhbG9nQXBpKG1vZGFsQWNjZXNzLCBleHRyYS5yZWRpYWwsIG9iak9mQ2VsbHMpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGlhbG9nLFxuICAgICAgICBpbnN0YW5jZUFwaVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0SW5saW5lRGlhbG9nU2l6ZUNsYXNzID0gc2l6ZSA9PiB7XG4gICAgICBzd2l0Y2ggKHNpemUpIHtcbiAgICAgIGNhc2UgJ21lZGl1bSc6XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKCd0b3gtZGlhbG9nLS13aWR0aC1tZCcpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlcklubGluZURpYWxvZyA9IChkaWFsb2dJbml0LCBleHRyYSwgYmFja3N0YWdlLCBhcmlhQXR0cnMgPSBmYWxzZSkgPT4ge1xuICAgICAgY29uc3QgZGlhbG9nSWQgPSBnZW5lcmF0ZSQ2KCdkaWFsb2cnKTtcbiAgICAgIGNvbnN0IGRpYWxvZ0xhYmVsSWQgPSBnZW5lcmF0ZSQ2KCdkaWFsb2ctbGFiZWwnKTtcbiAgICAgIGNvbnN0IGRpYWxvZ0NvbnRlbnRJZCA9IGdlbmVyYXRlJDYoJ2RpYWxvZy1jb250ZW50Jyk7XG4gICAgICBjb25zdCBpbnRlcm5hbERpYWxvZyA9IGRpYWxvZ0luaXQuaW50ZXJuYWxEaWFsb2c7XG4gICAgICBjb25zdCBkaWFsb2dTaXplID0gZ2V0SW5saW5lRGlhbG9nU2l6ZUNsYXNzKGludGVybmFsRGlhbG9nLnNpemUpO1xuICAgICAgY29uc3QgdXBkYXRlU3RhdGUgPSAoX2NvbXAsIGluY29taW5nKSA9PiBPcHRpb25hbC5zb21lKGluY29taW5nKTtcbiAgICAgIGNvbnN0IG1lbUhlYWRlciA9IHJlY29yZChyZW5kZXJJbmxpbmVIZWFkZXIoe1xuICAgICAgICB0aXRsZTogaW50ZXJuYWxEaWFsb2cudGl0bGUsXG4gICAgICAgIGRyYWdnYWJsZTogdHJ1ZVxuICAgICAgfSwgZGlhbG9nSWQsIGRpYWxvZ0xhYmVsSWQsIGJhY2tzdGFnZS5zaGFyZWQucHJvdmlkZXJzKSk7XG4gICAgICBjb25zdCBtZW1Cb2R5ID0gcmVjb3JkKHJlbmRlcklubGluZUJvZHkoe1xuICAgICAgICBib2R5OiBpbnRlcm5hbERpYWxvZy5ib2R5LFxuICAgICAgICBpbml0aWFsRGF0YTogaW50ZXJuYWxEaWFsb2cuaW5pdGlhbERhdGFcbiAgICAgIH0sIGRpYWxvZ0lkLCBkaWFsb2dDb250ZW50SWQsIGJhY2tzdGFnZSwgYXJpYUF0dHJzKSk7XG4gICAgICBjb25zdCBzdG9yYWdlZE1lbnVCdXR0b25zID0gbWFwTWVudUJ1dHRvbnMoaW50ZXJuYWxEaWFsb2cuYnV0dG9ucyk7XG4gICAgICBjb25zdCBvYmpPZkNlbGxzID0gZXh0cmFjdENlbGxzVG9PYmplY3Qoc3RvcmFnZWRNZW51QnV0dG9ucyk7XG4gICAgICBjb25zdCBvcHRNZW1Gb290ZXIgPSBzb21lSWYoc3RvcmFnZWRNZW51QnV0dG9ucy5sZW5ndGggIT09IDAsIHJlY29yZChyZW5kZXJJbmxpbmVGb290ZXIoeyBidXR0b25zOiBzdG9yYWdlZE1lbnVCdXR0b25zIH0sIGRpYWxvZ0lkLCBiYWNrc3RhZ2UpKSk7XG4gICAgICBjb25zdCBkaWFsb2dFdmVudHMgPSBpbml0RGlhbG9nKCgpID0+IGluc3RhbmNlQXBpLCB7XG4gICAgICAgIG9uQmxvY2s6IGV2ZW50ID0+IHtcbiAgICAgICAgICBCbG9ja2luZy5ibG9jayhkaWFsb2csIChfY29tcCwgYnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlckhlaWdodCA9IG1lbUhlYWRlci5nZXRPcHQoZGlhbG9nKS5tYXAoZGlhbG9nID0+IGdldCRkKGRpYWxvZy5lbGVtZW50KSk7XG4gICAgICAgICAgICByZXR1cm4gZ2V0QnVzeVNwZWMoZXZlbnQubWVzc2FnZSwgYnMsIGJhY2tzdGFnZS5zaGFyZWQucHJvdmlkZXJzLCBoZWFkZXJIZWlnaHQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblVuYmxvY2s6ICgpID0+IHtcbiAgICAgICAgICBCbG9ja2luZy51bmJsb2NrKGRpYWxvZyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ2xvc2U6ICgpID0+IGV4dHJhLmNsb3NlV2luZG93KClcbiAgICAgIH0sIGJhY2tzdGFnZS5zaGFyZWQuZ2V0U2luayk7XG4gICAgICBjb25zdCBpbmxpbmVDbGFzcyA9ICd0b3gtZGlhbG9nLWlubGluZSc7XG4gICAgICBjb25zdCBkaWFsb2cgPSBidWlsZCQxKHtcbiAgICAgICAgZG9tOiB7XG4gICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICBjbGFzc2VzOiBbXG4gICAgICAgICAgICAndG94LWRpYWxvZycsXG4gICAgICAgICAgICBpbmxpbmVDbGFzcyxcbiAgICAgICAgICAgIC4uLmRpYWxvZ1NpemUudG9BcnJheSgpXG4gICAgICAgICAgXSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICByb2xlOiAnZGlhbG9nJyxcbiAgICAgICAgICAgIFsnYXJpYS1sYWJlbGxlZGJ5J106IGRpYWxvZ0xhYmVsSWRcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGV2ZW50T3JkZXI6IHtcbiAgICAgICAgICBbcmVjZWl2ZSgpXTogW1xuICAgICAgICAgICAgUmVmbGVjdGluZy5uYW1lKCksXG4gICAgICAgICAgICBSZWNlaXZpbmcubmFtZSgpXG4gICAgICAgICAgXSxcbiAgICAgICAgICBbZXhlY3V0ZSQ1KCldOiBbJ2V4ZWN1dGUtb24tZm9ybSddLFxuICAgICAgICAgIFthdHRhY2hlZFRvRG9tKCldOiBbXG4gICAgICAgICAgICAncmVmbGVjdGluZycsXG4gICAgICAgICAgICAnZXhlY3V0ZS1vbi1mb3JtJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgYmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgIEtleWluZy5jb25maWcoe1xuICAgICAgICAgICAgbW9kZTogJ2N5Y2xpYycsXG4gICAgICAgICAgICBvbkVzY2FwZTogYyA9PiB7XG4gICAgICAgICAgICAgIGVtaXQoYywgZm9ybUNsb3NlRXZlbnQpO1xuICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0cnVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1c2VUYWJzdG9wQXQ6IGVsZW0gPT4gIWlzUHNldWRvU3RvcChlbGVtKSAmJiAobmFtZSQzKGVsZW0pICE9PSAnYnV0dG9uJyB8fCBnZXQkZihlbGVtLCAnZGlzYWJsZWQnKSAhPT0gJ2Rpc2FibGVkJyksXG4gICAgICAgICAgICBmaXJzdFRhYnN0b3A6IDFcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBSZWZsZWN0aW5nLmNvbmZpZyh7XG4gICAgICAgICAgICBjaGFubmVsOiBgJHsgZGlhbG9nQ2hhbm5lbCB9LSR7IGRpYWxvZ0lkIH1gLFxuICAgICAgICAgICAgdXBkYXRlU3RhdGUsXG4gICAgICAgICAgICBpbml0aWFsRGF0YTogZGlhbG9nSW5pdFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIEZvY3VzaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgY29uZmlnKCdleGVjdXRlLW9uLWZvcm0nLCBkaWFsb2dFdmVudHMuY29uY2F0KFtcbiAgICAgICAgICAgIHJ1bk9uU291cmNlKGZvY3VzaW4oKSwgKGNvbXAsIF9zZSkgPT4ge1xuICAgICAgICAgICAgICBLZXlpbmcuZm9jdXNJbihjb21wKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcnVuJDEoZm9jdXNTaGlmdGVkKCksIChjb21wLCBzZSkgPT4ge1xuICAgICAgICAgICAgICBjb21wLmdldFN5c3RlbSgpLmJyb2FkY2FzdE9uKFtkaWFsb2dGb2N1c1NoaWZ0ZWRDaGFubmVsXSwgeyBuZXdGb2N1czogc2UuZXZlbnQubmV3Rm9jdXMgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0pKSxcbiAgICAgICAgICBCbG9ja2luZy5jb25maWcoeyBnZXRSb290OiAoKSA9PiBPcHRpb25hbC5zb21lKGRpYWxvZykgfSksXG4gICAgICAgICAgUmVwbGFjaW5nLmNvbmZpZyh7fSksXG4gICAgICAgICAgbWVtb3J5KHt9KVxuICAgICAgICBdKSxcbiAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgIG1lbUhlYWRlci5hc1NwZWMoKSxcbiAgICAgICAgICBtZW1Cb2R5LmFzU3BlYygpLFxuICAgICAgICAgIC4uLm9wdE1lbUZvb3Rlci5tYXAobWVtRm9vdGVyID0+IG1lbUZvb3Rlci5hc1NwZWMoKSkudG9BcnJheSgpXG4gICAgICAgIF1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgdG9nZ2xlRnVsbHNjcmVlbiA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZnVsbHNjcmVlbkNsYXNzID0gJ3RveC1kaWFsb2ctLWZ1bGxzY3JlZW4nO1xuICAgICAgICBjb25zdCBzdWdhckJvZHkgPSBTdWdhckVsZW1lbnQuZnJvbURvbShkaWFsb2cuZWxlbWVudC5kb20pO1xuICAgICAgICBpZiAoIWhhc0FsbChzdWdhckJvZHksIFtmdWxsc2NyZWVuQ2xhc3NdKSkge1xuICAgICAgICAgIHJlbW92ZSQxKHN1Z2FyQm9keSwgW2lubGluZUNsYXNzXSk7XG4gICAgICAgICAgYWRkJDEoc3VnYXJCb2R5LCBbZnVsbHNjcmVlbkNsYXNzXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVtb3ZlJDEoc3VnYXJCb2R5LCBbZnVsbHNjcmVlbkNsYXNzXSk7XG4gICAgICAgICAgYWRkJDEoc3VnYXJCb2R5LCBbaW5saW5lQ2xhc3NdKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGluc3RhbmNlQXBpID0gZ2V0RGlhbG9nQXBpKHtcbiAgICAgICAgZ2V0SWQ6IGNvbnN0YW50JDEoZGlhbG9nSWQpLFxuICAgICAgICBnZXRSb290OiBjb25zdGFudCQxKGRpYWxvZyksXG4gICAgICAgIGdldEZvb3RlcjogKCkgPT4gb3B0TWVtRm9vdGVyLm1hcChtZW1Gb290ZXIgPT4gbWVtRm9vdGVyLmdldChkaWFsb2cpKSxcbiAgICAgICAgZ2V0Qm9keTogKCkgPT4gbWVtQm9keS5nZXQoZGlhbG9nKSxcbiAgICAgICAgZ2V0Rm9ybVdyYXBwZXI6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBib2R5ID0gbWVtQm9keS5nZXQoZGlhbG9nKTtcbiAgICAgICAgICByZXR1cm4gQ29tcG9zaW5nLmdldEN1cnJlbnQoYm9keSkuZ2V0T3IoYm9keSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRvZ2dsZUZ1bGxzY3JlZW5cbiAgICAgIH0sIGV4dHJhLnJlZGlhbCwgb2JqT2ZDZWxscyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaWFsb2csXG4gICAgICAgIGluc3RhbmNlQXBpXG4gICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgZ2xvYmFsID0gdGlueW1jZS51dGlsLlRvb2xzLnJlc29sdmUoJ3RpbnltY2UudXRpbC5VUkknKTtcblxuICAgIGNvbnN0IGdldFVybERpYWxvZ0FwaSA9IHJvb3QgPT4ge1xuICAgICAgY29uc3Qgd2l0aFJvb3QgPSBmID0+IHtcbiAgICAgICAgaWYgKHJvb3QuZ2V0U3lzdGVtKCkuaXNDb25uZWN0ZWQoKSkge1xuICAgICAgICAgIGYocm9vdCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBibG9jayA9IG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAoIWlzU3RyaW5nKG1lc3NhZ2UpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdXJsRGlhbG9nSW5zdGFuY2VBUEkuYmxvY2sgZnVuY3Rpb24gc2hvdWxkIGJlIHBhc3NlZCBhIGJsb2NraW5nIG1lc3NhZ2Ugb2YgdHlwZSBzdHJpbmcgYXMgYW4gYXJndW1lbnQnKTtcbiAgICAgICAgfVxuICAgICAgICB3aXRoUm9vdChyb290ID0+IHtcbiAgICAgICAgICBlbWl0V2l0aChyb290LCBmb3JtQmxvY2tFdmVudCwgeyBtZXNzYWdlIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCB1bmJsb2NrID0gKCkgPT4ge1xuICAgICAgICB3aXRoUm9vdChyb290ID0+IHtcbiAgICAgICAgICBlbWl0KHJvb3QsIGZvcm1VbmJsb2NrRXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjbG9zZSA9ICgpID0+IHtcbiAgICAgICAgd2l0aFJvb3Qocm9vdCA9PiB7XG4gICAgICAgICAgZW1pdChyb290LCBmb3JtQ2xvc2VFdmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlbmRNZXNzYWdlID0gZGF0YSA9PiB7XG4gICAgICAgIHdpdGhSb290KHJvb3QgPT4ge1xuICAgICAgICAgIHJvb3QuZ2V0U3lzdGVtKCkuYnJvYWRjYXN0T24oW2JvZHlTZW5kTWVzc2FnZUNoYW5uZWxdLCBkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmxvY2ssXG4gICAgICAgIHVuYmxvY2ssXG4gICAgICAgIGNsb3NlLFxuICAgICAgICBzZW5kTWVzc2FnZVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgU1VQUE9SVEVEX01FU1NBR0VfQUNUSU9OUyA9IFtcbiAgICAgICdpbnNlcnRDb250ZW50JyxcbiAgICAgICdzZXRDb250ZW50JyxcbiAgICAgICdleGVjQ29tbWFuZCcsXG4gICAgICAnY2xvc2UnLFxuICAgICAgJ2Jsb2NrJyxcbiAgICAgICd1bmJsb2NrJ1xuICAgIF07XG4gICAgY29uc3QgaXNTdXBwb3J0ZWRNZXNzYWdlID0gZGF0YSA9PiBpc09iamVjdChkYXRhKSAmJiBTVVBQT1JURURfTUVTU0FHRV9BQ1RJT05TLmluZGV4T2YoZGF0YS5tY2VBY3Rpb24pICE9PSAtMTtcbiAgICBjb25zdCBpc0N1c3RvbU1lc3NhZ2UgPSBkYXRhID0+ICFpc1N1cHBvcnRlZE1lc3NhZ2UoZGF0YSkgJiYgaXNPYmplY3QoZGF0YSkgJiYgaGFzJDIoZGF0YSwgJ21jZUFjdGlvbicpO1xuICAgIGNvbnN0IGhhbmRsZU1lc3NhZ2UgPSAoZWRpdG9yLCBhcGksIGRhdGEpID0+IHtcbiAgICAgIHN3aXRjaCAoZGF0YS5tY2VBY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2luc2VydENvbnRlbnQnOlxuICAgICAgICBlZGl0b3IuaW5zZXJ0Q29udGVudChkYXRhLmNvbnRlbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NldENvbnRlbnQnOlxuICAgICAgICBlZGl0b3Iuc2V0Q29udGVudChkYXRhLmNvbnRlbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V4ZWNDb21tYW5kJzpcbiAgICAgICAgY29uc3QgdWkgPSBpc0Jvb2xlYW4oZGF0YS51aSkgPyBkYXRhLnVpIDogZmFsc2U7XG4gICAgICAgIGVkaXRvci5leGVjQ29tbWFuZChkYXRhLmNtZCwgdWksIGRhdGEudmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Nsb3NlJzpcbiAgICAgICAgYXBpLmNsb3NlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYmxvY2snOlxuICAgICAgICBhcGkuYmxvY2soZGF0YS5tZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1bmJsb2NrJzpcbiAgICAgICAgYXBpLnVuYmxvY2soKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJVcmxEaWFsb2cgPSAoaW50ZXJuYWxEaWFsb2csIGV4dHJhLCBlZGl0b3IsIGJhY2tzdGFnZSkgPT4ge1xuICAgICAgY29uc3QgZGlhbG9nSWQgPSBnZW5lcmF0ZSQ2KCdkaWFsb2cnKTtcbiAgICAgIGNvbnN0IGhlYWRlciA9IGdldEhlYWRlcihpbnRlcm5hbERpYWxvZy50aXRsZSwgZGlhbG9nSWQsIGJhY2tzdGFnZSk7XG4gICAgICBjb25zdCBib2R5ID0gcmVuZGVySWZyYW1lQm9keShpbnRlcm5hbERpYWxvZyk7XG4gICAgICBjb25zdCBmb290ZXIgPSBpbnRlcm5hbERpYWxvZy5idXR0b25zLmJpbmQoYnV0dG9ucyA9PiB7XG4gICAgICAgIGlmIChidXR0b25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUocmVuZGVyTW9kYWxGb290ZXIoeyBidXR0b25zIH0sIGRpYWxvZ0lkLCBiYWNrc3RhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBkaWFsb2dFdmVudHMgPSBpbml0VXJsRGlhbG9nKCgpID0+IGluc3RhbmNlQXBpLCBnZXRFdmVudEV4dHJhcygoKSA9PiBkaWFsb2csIGJhY2tzdGFnZS5zaGFyZWQucHJvdmlkZXJzLCBleHRyYSkpO1xuICAgICAgY29uc3Qgc3R5bGVzID0ge1xuICAgICAgICAuLi5pbnRlcm5hbERpYWxvZy5oZWlnaHQuZm9sZCgoKSA9PiAoe30pLCBoZWlnaHQgPT4gKHtcbiAgICAgICAgICAnaGVpZ2h0JzogaGVpZ2h0ICsgJ3B4JyxcbiAgICAgICAgICAnbWF4LWhlaWdodCc6IGhlaWdodCArICdweCdcbiAgICAgICAgfSkpLFxuICAgICAgICAuLi5pbnRlcm5hbERpYWxvZy53aWR0aC5mb2xkKCgpID0+ICh7fSksIHdpZHRoID0+ICh7XG4gICAgICAgICAgJ3dpZHRoJzogd2lkdGggKyAncHgnLFxuICAgICAgICAgICdtYXgtd2lkdGgnOiB3aWR0aCArICdweCdcbiAgICAgICAgfSkpXG4gICAgICB9O1xuICAgICAgY29uc3QgY2xhc3NlcyA9IGludGVybmFsRGlhbG9nLndpZHRoLmlzTm9uZSgpICYmIGludGVybmFsRGlhbG9nLmhlaWdodC5pc05vbmUoKSA/IFsndG94LWRpYWxvZy0td2lkdGgtbGcnXSA6IFtdO1xuICAgICAgY29uc3QgaWZyYW1lVXJpID0gbmV3IGdsb2JhbChpbnRlcm5hbERpYWxvZy51cmwsIHsgYmFzZV91cmk6IG5ldyBnbG9iYWwod2luZG93LmxvY2F0aW9uLmhyZWYpIH0pO1xuICAgICAgY29uc3QgaWZyYW1lRG9tYWluID0gYCR7IGlmcmFtZVVyaS5wcm90b2NvbCB9Oi8vJHsgaWZyYW1lVXJpLmhvc3QgfSR7IGlmcmFtZVVyaS5wb3J0ID8gJzonICsgaWZyYW1lVXJpLnBvcnQgOiAnJyB9YDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VIYW5kbGVyVW5iaW5kZXIgPSB1bmJpbmRhYmxlKCk7XG4gICAgICBjb25zdCBleHRyYUJlaGF2aW91cnMgPSBbXG4gICAgICAgIGNvbmZpZygnbWVzc2FnZXMnLCBbXG4gICAgICAgICAgcnVuT25BdHRhY2hlZCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1bmJpbmQgPSBiaW5kKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHdpbmRvdyksICdtZXNzYWdlJywgZSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpZnJhbWVVcmkuaXNTYW1lT3JpZ2luKG5ldyBnbG9iYWwoZS5yYXcub3JpZ2luKSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gZS5yYXcuZGF0YTtcbiAgICAgICAgICAgICAgICBpZiAoaXNTdXBwb3J0ZWRNZXNzYWdlKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICBoYW5kbGVNZXNzYWdlKGVkaXRvciwgaW5zdGFuY2VBcGksIGRhdGEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNDdXN0b21NZXNzYWdlKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICBpbnRlcm5hbERpYWxvZy5vbk1lc3NhZ2UoaW5zdGFuY2VBcGksIGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBtZXNzYWdlSGFuZGxlclVuYmluZGVyLnNldCh1bmJpbmQpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJ1bk9uRGV0YWNoZWQobWVzc2FnZUhhbmRsZXJVbmJpbmRlci5jbGVhcilcbiAgICAgICAgXSksXG4gICAgICAgIFJlY2VpdmluZy5jb25maWcoe1xuICAgICAgICAgIGNoYW5uZWxzOiB7XG4gICAgICAgICAgICBbYm9keVNlbmRNZXNzYWdlQ2hhbm5lbF06IHtcbiAgICAgICAgICAgICAgb25SZWNlaXZlOiAoY29tcCwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGRlc2NlbmRhbnQoY29tcC5lbGVtZW50LCAnaWZyYW1lJykuZWFjaChpZnJhbWVFbGUgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaWZyYW1lV2luID0gaWZyYW1lRWxlLmRvbS5jb250ZW50V2luZG93O1xuICAgICAgICAgICAgICAgICAgaWYgKGlzTm9uTnVsbGFibGUoaWZyYW1lV2luKSkge1xuICAgICAgICAgICAgICAgICAgICBpZnJhbWVXaW4ucG9zdE1lc3NhZ2UoZGF0YSwgaWZyYW1lRG9tYWluKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIF07XG4gICAgICBjb25zdCBzcGVjID0ge1xuICAgICAgICBpZDogZGlhbG9nSWQsXG4gICAgICAgIGhlYWRlcixcbiAgICAgICAgYm9keSxcbiAgICAgICAgZm9vdGVyLFxuICAgICAgICBleHRyYUNsYXNzZXM6IGNsYXNzZXMsXG4gICAgICAgIGV4dHJhQmVoYXZpb3VycyxcbiAgICAgICAgZXh0cmFTdHlsZXM6IHN0eWxlc1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRpYWxvZyA9IHJlbmRlck1vZGFsRGlhbG9nKHNwZWMsIGludGVybmFsRGlhbG9nLCBkaWFsb2dFdmVudHMsIGJhY2tzdGFnZSk7XG4gICAgICBjb25zdCBpbnN0YW5jZUFwaSA9IGdldFVybERpYWxvZ0FwaShkaWFsb2cpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGlhbG9nLFxuICAgICAgICBpbnN0YW5jZUFwaVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0dXAkMiA9IGJhY2tzdGFnZSA9PiB7XG4gICAgICBjb25zdCBzaGFyZWRCYWNrc3RhZ2UgPSBiYWNrc3RhZ2Uuc2hhcmVkO1xuICAgICAgY29uc3Qgb3BlbiA9IChtZXNzYWdlLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBjb25zdCBjbG9zZURpYWxvZyA9ICgpID0+IHtcbiAgICAgICAgICBNb2RhbERpYWxvZy5oaWRlKGFsZXJ0RGlhbG9nKTtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBtZW1Gb290ZXJDbG9zZSA9IHJlY29yZChyZW5kZXJGb290ZXJCdXR0b24oe1xuICAgICAgICAgIG5hbWU6ICdjbG9zZS1hbGVydCcsXG4gICAgICAgICAgdGV4dDogJ09LJyxcbiAgICAgICAgICBwcmltYXJ5OiB0cnVlLFxuICAgICAgICAgIGJ1dHRvblR5cGU6IE9wdGlvbmFsLnNvbWUoJ3ByaW1hcnknKSxcbiAgICAgICAgICBhbGlnbjogJ2VuZCcsXG4gICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBpY29uOiBPcHRpb25hbC5ub25lKClcbiAgICAgICAgfSwgJ2NhbmNlbCcsIGJhY2tzdGFnZSkpO1xuICAgICAgICBjb25zdCB0aXRsZVNwZWMgPSBwVW50aXRsZWQoKTtcbiAgICAgICAgY29uc3QgY2xvc2VTcGVjID0gcENsb3NlKGNsb3NlRGlhbG9nLCBzaGFyZWRCYWNrc3RhZ2UucHJvdmlkZXJzKTtcbiAgICAgICAgY29uc3QgYWxlcnREaWFsb2cgPSBidWlsZCQxKHJlbmRlckRpYWxvZyQxKHtcbiAgICAgICAgICBsYXp5U2luazogKCkgPT4gc2hhcmVkQmFja3N0YWdlLmdldFNpbmsoKSxcbiAgICAgICAgICBoZWFkZXI6IGhpZGRlbkhlYWRlcih0aXRsZVNwZWMsIGNsb3NlU3BlYyksXG4gICAgICAgICAgYm9keTogcEJvZHlNZXNzYWdlKG1lc3NhZ2UsIHNoYXJlZEJhY2tzdGFnZS5wcm92aWRlcnMpLFxuICAgICAgICAgIGZvb3RlcjogT3B0aW9uYWwuc29tZShwRm9vdGVyKHBGb290ZXJHcm91cChbXSwgW21lbUZvb3RlckNsb3NlLmFzU3BlYygpXSkpKSxcbiAgICAgICAgICBvbkVzY2FwZTogY2xvc2VEaWFsb2csXG4gICAgICAgICAgZXh0cmFDbGFzc2VzOiBbJ3RveC1hbGVydC1kaWFsb2cnXSxcbiAgICAgICAgICBleHRyYUJlaGF2aW91cnM6IFtdLFxuICAgICAgICAgIGV4dHJhU3R5bGVzOiB7fSxcbiAgICAgICAgICBkaWFsb2dFdmVudHM6IFtydW4kMShmb3JtQ2FuY2VsRXZlbnQsIGNsb3NlRGlhbG9nKV0sXG4gICAgICAgICAgZXZlbnRPcmRlcjoge31cbiAgICAgICAgfSkpO1xuICAgICAgICBNb2RhbERpYWxvZy5zaG93KGFsZXJ0RGlhbG9nKTtcbiAgICAgICAgY29uc3QgZm9vdGVyQ2xvc2VCdXR0b24gPSBtZW1Gb290ZXJDbG9zZS5nZXQoYWxlcnREaWFsb2cpO1xuICAgICAgICBGb2N1c2luZy5mb2N1cyhmb290ZXJDbG9zZUJ1dHRvbik7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgb3BlbiB9O1xuICAgIH07XG5cbiAgICBjb25zdCBzZXR1cCQxID0gYmFja3N0YWdlID0+IHtcbiAgICAgIGNvbnN0IHNoYXJlZEJhY2tzdGFnZSA9IGJhY2tzdGFnZS5zaGFyZWQ7XG4gICAgICBjb25zdCBvcGVuID0gKG1lc3NhZ2UsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IGNsb3NlRGlhbG9nID0gc3RhdGUgPT4ge1xuICAgICAgICAgIE1vZGFsRGlhbG9nLmhpZGUoY29uZmlybURpYWxvZyk7XG4gICAgICAgICAgY2FsbGJhY2soc3RhdGUpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBtZW1Gb290ZXJZZXMgPSByZWNvcmQocmVuZGVyRm9vdGVyQnV0dG9uKHtcbiAgICAgICAgICBuYW1lOiAneWVzJyxcbiAgICAgICAgICB0ZXh0OiAnWWVzJyxcbiAgICAgICAgICBwcmltYXJ5OiB0cnVlLFxuICAgICAgICAgIGJ1dHRvblR5cGU6IE9wdGlvbmFsLnNvbWUoJ3ByaW1hcnknKSxcbiAgICAgICAgICBhbGlnbjogJ2VuZCcsXG4gICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBpY29uOiBPcHRpb25hbC5ub25lKClcbiAgICAgICAgfSwgJ3N1Ym1pdCcsIGJhY2tzdGFnZSkpO1xuICAgICAgICBjb25zdCBmb290ZXJObyA9IHJlbmRlckZvb3RlckJ1dHRvbih7XG4gICAgICAgICAgbmFtZTogJ25vJyxcbiAgICAgICAgICB0ZXh0OiAnTm8nLFxuICAgICAgICAgIHByaW1hcnk6IGZhbHNlLFxuICAgICAgICAgIGJ1dHRvblR5cGU6IE9wdGlvbmFsLnNvbWUoJ3NlY29uZGFyeScpLFxuICAgICAgICAgIGFsaWduOiAnZW5kJyxcbiAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgIGljb246IE9wdGlvbmFsLm5vbmUoKVxuICAgICAgICB9LCAnY2FuY2VsJywgYmFja3N0YWdlKTtcbiAgICAgICAgY29uc3QgdGl0bGVTcGVjID0gcFVudGl0bGVkKCk7XG4gICAgICAgIGNvbnN0IGNsb3NlU3BlYyA9IHBDbG9zZSgoKSA9PiBjbG9zZURpYWxvZyhmYWxzZSksIHNoYXJlZEJhY2tzdGFnZS5wcm92aWRlcnMpO1xuICAgICAgICBjb25zdCBjb25maXJtRGlhbG9nID0gYnVpbGQkMShyZW5kZXJEaWFsb2ckMSh7XG4gICAgICAgICAgbGF6eVNpbms6ICgpID0+IHNoYXJlZEJhY2tzdGFnZS5nZXRTaW5rKCksXG4gICAgICAgICAgaGVhZGVyOiBoaWRkZW5IZWFkZXIodGl0bGVTcGVjLCBjbG9zZVNwZWMpLFxuICAgICAgICAgIGJvZHk6IHBCb2R5TWVzc2FnZShtZXNzYWdlLCBzaGFyZWRCYWNrc3RhZ2UucHJvdmlkZXJzKSxcbiAgICAgICAgICBmb290ZXI6IE9wdGlvbmFsLnNvbWUocEZvb3RlcihwRm9vdGVyR3JvdXAoW10sIFtcbiAgICAgICAgICAgIGZvb3Rlck5vLFxuICAgICAgICAgICAgbWVtRm9vdGVyWWVzLmFzU3BlYygpXG4gICAgICAgICAgXSkpKSxcbiAgICAgICAgICBvbkVzY2FwZTogKCkgPT4gY2xvc2VEaWFsb2coZmFsc2UpLFxuICAgICAgICAgIGV4dHJhQ2xhc3NlczogWyd0b3gtY29uZmlybS1kaWFsb2cnXSxcbiAgICAgICAgICBleHRyYUJlaGF2aW91cnM6IFtdLFxuICAgICAgICAgIGV4dHJhU3R5bGVzOiB7fSxcbiAgICAgICAgICBkaWFsb2dFdmVudHM6IFtcbiAgICAgICAgICAgIHJ1biQxKGZvcm1DYW5jZWxFdmVudCwgKCkgPT4gY2xvc2VEaWFsb2coZmFsc2UpKSxcbiAgICAgICAgICAgIHJ1biQxKGZvcm1TdWJtaXRFdmVudCwgKCkgPT4gY2xvc2VEaWFsb2codHJ1ZSkpXG4gICAgICAgICAgXSxcbiAgICAgICAgICBldmVudE9yZGVyOiB7fVxuICAgICAgICB9KSk7XG4gICAgICAgIE1vZGFsRGlhbG9nLnNob3coY29uZmlybURpYWxvZyk7XG4gICAgICAgIGNvbnN0IGZvb3Rlclllc0J1dHRvbiA9IG1lbUZvb3Rlclllcy5nZXQoY29uZmlybURpYWxvZyk7XG4gICAgICAgIEZvY3VzaW5nLmZvY3VzKGZvb3Rlclllc0J1dHRvbik7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgb3BlbiB9O1xuICAgIH07XG5cbiAgICBjb25zdCB2YWxpZGF0ZURhdGEgPSAoZGF0YSwgdmFsaWRhdG9yKSA9PiBnZXRPckRpZShhc1JhdygnZGF0YScsIHZhbGlkYXRvciwgZGF0YSkpO1xuICAgIGNvbnN0IGlzQWxlcnRPckNvbmZpcm1EaWFsb2cgPSB0YXJnZXQgPT4gY2xvc2VzdCh0YXJnZXQsICcudG94LWFsZXJ0LWRpYWxvZycpIHx8IGNsb3Nlc3QodGFyZ2V0LCAnLnRveC1jb25maXJtLWRpYWxvZycpO1xuICAgIGNvbnN0IGlubGluZUFkZGl0aW9uYWxCZWhhdmlvdXJzID0gKGVkaXRvciwgaXNTdGlja3lUb29sYmFyLCBpc1Rvb2xiYXJMb2NhdGlvblRvcCkgPT4ge1xuICAgICAgaWYgKGlzU3RpY2t5VG9vbGJhciAmJiBpc1Rvb2xiYXJMb2NhdGlvblRvcCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW0RvY2tpbmcuY29uZmlnKHtcbiAgICAgICAgICAgIGNvbnRleHR1YWw6IHtcbiAgICAgICAgICAgICAgbGF6eUNvbnRleHQ6ICgpID0+IE9wdGlvbmFsLnNvbWUoYm94JDEoU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldENvbnRlbnRBcmVhQ29udGFpbmVyKCkpKSksXG4gICAgICAgICAgICAgIGZhZGVJbkNsYXNzOiAndG94LWRpYWxvZy1kb2NrLWZhZGVpbicsXG4gICAgICAgICAgICAgIGZhZGVPdXRDbGFzczogJ3RveC1kaWFsb2ctZG9jay1mYWRlb3V0JyxcbiAgICAgICAgICAgICAgdHJhbnNpdGlvbkNsYXNzOiAndG94LWRpYWxvZy1kb2NrLXRyYW5zaXRpb24nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbW9kZXM6IFsndG9wJ10sXG4gICAgICAgICAgICBsYXp5Vmlld3BvcnQ6IGNvbXAgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBvcHRTY3JvbGxpbmdDb250ZXh0ID0gZGV0ZWN0V2hlblNwbGl0VWlNb2RlKGVkaXRvciwgY29tcC5lbGVtZW50KTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9wdFNjcm9sbGluZ0NvbnRleHQubWFwKHNjID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21iaW5lZEJvdW5kcyA9IGdldEJvdW5kc0Zyb20oc2MpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBib3VuZHM6IGNvbWJpbmVkQm91bmRzLFxuICAgICAgICAgICAgICAgICAgb3B0U2Nyb2xsRW52OiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjcm9sbFRvcDogc2MuZWxlbWVudC5kb20uc2Nyb2xsVG9wLFxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxFbG1Ub3A6IGFic29sdXRlJDMoc2MuZWxlbWVudCkudG9wXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0pLmdldE9yVGh1bmsoKCkgPT4gKHtcbiAgICAgICAgICAgICAgICBib3VuZHM6IHdpbigpLFxuICAgICAgICAgICAgICAgIG9wdFNjcm9sbEVudjogT3B0aW9uYWwubm9uZSgpXG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KV07XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cCA9IGV4dHJhcyA9PiB7XG4gICAgICBjb25zdCBlZGl0b3IgPSBleHRyYXMuZWRpdG9yO1xuICAgICAgY29uc3QgaXNTdGlja3lUb29sYmFyJDEgPSBpc1N0aWNreVRvb2xiYXIoZWRpdG9yKTtcbiAgICAgIGNvbnN0IGFsZXJ0RGlhbG9nID0gc2V0dXAkMihleHRyYXMuYmFja3N0YWdlcy5kaWFsb2cpO1xuICAgICAgY29uc3QgY29uZmlybURpYWxvZyA9IHNldHVwJDEoZXh0cmFzLmJhY2tzdGFnZXMuZGlhbG9nKTtcbiAgICAgIGNvbnN0IG9wZW4gPSAoY29uZmlnLCBwYXJhbXMsIGNsb3NlV2luZG93KSA9PiB7XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQocGFyYW1zKSkge1xuICAgICAgICAgIGlmIChwYXJhbXMuaW5saW5lID09PSAndG9vbGJhcicpIHtcbiAgICAgICAgICAgIHJldHVybiBvcGVuSW5saW5lRGlhbG9nKGNvbmZpZywgZXh0cmFzLmJhY2tzdGFnZXMucG9wdXAuc2hhcmVkLmFuY2hvcnMuaW5saW5lRGlhbG9nKCksIGNsb3NlV2luZG93LCBwYXJhbXMpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1zLmlubGluZSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgIHJldHVybiBvcGVuQm90dG9tSW5saW5lRGlhbG9nKGNvbmZpZywgZXh0cmFzLmJhY2tzdGFnZXMucG9wdXAuc2hhcmVkLmFuY2hvcnMuaW5saW5lQm90dG9tRGlhbG9nKCksIGNsb3NlV2luZG93LCBwYXJhbXMpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1zLmlubGluZSA9PT0gJ2N1cnNvcicpIHtcbiAgICAgICAgICAgIHJldHVybiBvcGVuSW5saW5lRGlhbG9nKGNvbmZpZywgZXh0cmFzLmJhY2tzdGFnZXMucG9wdXAuc2hhcmVkLmFuY2hvcnMuY3Vyc29yKCksIGNsb3NlV2luZG93LCBwYXJhbXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3Blbk1vZGFsRGlhbG9nKGNvbmZpZywgY2xvc2VXaW5kb3cpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG9wZW5VcmwgPSAoY29uZmlnLCBjbG9zZVdpbmRvdykgPT4gb3Blbk1vZGFsVXJsRGlhbG9nKGNvbmZpZywgY2xvc2VXaW5kb3cpO1xuICAgICAgY29uc3Qgb3Blbk1vZGFsVXJsRGlhbG9nID0gKGNvbmZpZywgY2xvc2VXaW5kb3cpID0+IHtcbiAgICAgICAgY29uc3QgZmFjdG9yeSA9IGNvbnRlbnRzID0+IHtcbiAgICAgICAgICBjb25zdCBkaWFsb2cgPSByZW5kZXJVcmxEaWFsb2coY29udGVudHMsIHtcbiAgICAgICAgICAgIGNsb3NlV2luZG93OiAoKSA9PiB7XG4gICAgICAgICAgICAgIE1vZGFsRGlhbG9nLmhpZGUoZGlhbG9nLmRpYWxvZyk7XG4gICAgICAgICAgICAgIGNsb3NlV2luZG93KGRpYWxvZy5pbnN0YW5jZUFwaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgZWRpdG9yLCBleHRyYXMuYmFja3N0YWdlcy5kaWFsb2cpO1xuICAgICAgICAgIE1vZGFsRGlhbG9nLnNob3coZGlhbG9nLmRpYWxvZyk7XG4gICAgICAgICAgcmV0dXJuIGRpYWxvZy5pbnN0YW5jZUFwaTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIERpYWxvZ01hbmFnZXIub3BlblVybChmYWN0b3J5LCBjb25maWcpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG9wZW5Nb2RhbERpYWxvZyA9IChjb25maWcsIGNsb3NlV2luZG93KSA9PiB7XG4gICAgICAgIGNvbnN0IGZhY3RvcnkgPSAoY29udGVudHMsIGludGVybmFsSW5pdGlhbERhdGEsIGRhdGFWYWxpZGF0b3IpID0+IHtcbiAgICAgICAgICBjb25zdCBpbml0aWFsRGF0YSA9IGludGVybmFsSW5pdGlhbERhdGE7XG4gICAgICAgICAgY29uc3QgZGlhbG9nSW5pdCA9IHtcbiAgICAgICAgICAgIGRhdGFWYWxpZGF0b3IsXG4gICAgICAgICAgICBpbml0aWFsRGF0YSxcbiAgICAgICAgICAgIGludGVybmFsRGlhbG9nOiBjb250ZW50c1xuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgZGlhbG9nID0gcmVuZGVyRGlhbG9nKGRpYWxvZ0luaXQsIHtcbiAgICAgICAgICAgIHJlZGlhbDogRGlhbG9nTWFuYWdlci5yZWRpYWwsXG4gICAgICAgICAgICBjbG9zZVdpbmRvdzogKCkgPT4ge1xuICAgICAgICAgICAgICBNb2RhbERpYWxvZy5oaWRlKGRpYWxvZy5kaWFsb2cpO1xuICAgICAgICAgICAgICBjbG9zZVdpbmRvdyhkaWFsb2cuaW5zdGFuY2VBcGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGV4dHJhcy5iYWNrc3RhZ2VzLmRpYWxvZyk7XG4gICAgICAgICAgTW9kYWxEaWFsb2cuc2hvdyhkaWFsb2cuZGlhbG9nKTtcbiAgICAgICAgICBkaWFsb2cuaW5zdGFuY2VBcGkuc2V0RGF0YShpbml0aWFsRGF0YSk7XG4gICAgICAgICAgcmV0dXJuIGRpYWxvZy5pbnN0YW5jZUFwaTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIERpYWxvZ01hbmFnZXIub3BlbihmYWN0b3J5LCBjb25maWcpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG9wZW5JbmxpbmVEaWFsb2cgPSAoY29uZmlnJDEsIGFuY2hvciwgY2xvc2VXaW5kb3csIHdpbmRvd1BhcmFtcykgPT4ge1xuICAgICAgICBjb25zdCBmYWN0b3J5ID0gKGNvbnRlbnRzLCBpbnRlcm5hbEluaXRpYWxEYXRhLCBkYXRhVmFsaWRhdG9yKSA9PiB7XG4gICAgICAgICAgY29uc3QgaW5pdGlhbERhdGEgPSB2YWxpZGF0ZURhdGEoaW50ZXJuYWxJbml0aWFsRGF0YSwgZGF0YVZhbGlkYXRvcik7XG4gICAgICAgICAgY29uc3QgaW5saW5lRGlhbG9nID0gdmFsdWUkMigpO1xuICAgICAgICAgIGNvbnN0IGlzVG9vbGJhckxvY2F0aW9uVG9wID0gZXh0cmFzLmJhY2tzdGFnZXMucG9wdXAuc2hhcmVkLmhlYWRlci5pc1Bvc2l0aW9uZWRBdFRvcCgpO1xuICAgICAgICAgIGNvbnN0IGRpYWxvZ0luaXQgPSB7XG4gICAgICAgICAgICBkYXRhVmFsaWRhdG9yLFxuICAgICAgICAgICAgaW5pdGlhbERhdGEsXG4gICAgICAgICAgICBpbnRlcm5hbERpYWxvZzogY29udGVudHNcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IHJlZnJlc2hEb2NraW5nID0gKCkgPT4gaW5saW5lRGlhbG9nLm9uKGRpYWxvZyA9PiB7XG4gICAgICAgICAgICBJbmxpbmVWaWV3LnJlcG9zaXRpb24oZGlhbG9nKTtcbiAgICAgICAgICAgIERvY2tpbmcucmVmcmVzaChkaWFsb2cpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGRpYWxvZ1VpID0gcmVuZGVySW5saW5lRGlhbG9nKGRpYWxvZ0luaXQsIHtcbiAgICAgICAgICAgIHJlZGlhbDogRGlhbG9nTWFuYWdlci5yZWRpYWwsXG4gICAgICAgICAgICBjbG9zZVdpbmRvdzogKCkgPT4ge1xuICAgICAgICAgICAgICBpbmxpbmVEaWFsb2cub24oSW5saW5lVmlldy5oaWRlKTtcbiAgICAgICAgICAgICAgZWRpdG9yLm9mZignUmVzaXplRWRpdG9yJywgcmVmcmVzaERvY2tpbmcpO1xuICAgICAgICAgICAgICBpbmxpbmVEaWFsb2cuY2xlYXIoKTtcbiAgICAgICAgICAgICAgY2xvc2VXaW5kb3coZGlhbG9nVWkuaW5zdGFuY2VBcGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGV4dHJhcy5iYWNrc3RhZ2VzLnBvcHVwLCB3aW5kb3dQYXJhbXMuYXJpYUF0dHJzKTtcbiAgICAgICAgICBjb25zdCBpbmxpbmVEaWFsb2dDb21wID0gYnVpbGQkMShJbmxpbmVWaWV3LnNrZXRjaCh7XG4gICAgICAgICAgICBsYXp5U2luazogZXh0cmFzLmJhY2tzdGFnZXMucG9wdXAuc2hhcmVkLmdldFNpbmssXG4gICAgICAgICAgICBkb206IHtcbiAgICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgICAgY2xhc3NlczogW11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaXJlRGlzbWlzc2FsRXZlbnRJbnN0ZWFkOiB3aW5kb3dQYXJhbXMucGVyc2lzdGVudCA/IHsgZXZlbnQ6ICdkb05vdERpc21pc3NZZXQnIH0gOiB7fSxcbiAgICAgICAgICAgIC4uLmlzVG9vbGJhckxvY2F0aW9uVG9wID8ge30gOiB7IGZpcmVSZXBvc2l0aW9uRXZlbnRJbnN0ZWFkOiB7fSB9LFxuICAgICAgICAgICAgaW5saW5lQmVoYXZpb3VyczogZGVyaXZlJDEoW1xuICAgICAgICAgICAgICBjb25maWcoJ3dpbmRvdy1tYW5hZ2VyLWlubGluZS1ldmVudHMnLCBbcnVuJDEoZGlzbWlzc1JlcXVlc3RlZCgpLCAoX2NvbXAsIF9zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgZW1pdChkaWFsb2dVaS5kaWFsb2csIGZvcm1DYW5jZWxFdmVudCk7XG4gICAgICAgICAgICAgICAgfSldKSxcbiAgICAgICAgICAgICAgLi4uaW5saW5lQWRkaXRpb25hbEJlaGF2aW91cnMoZWRpdG9yLCBpc1N0aWNreVRvb2xiYXIkMSwgaXNUb29sYmFyTG9jYXRpb25Ub3ApXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIGlzRXh0cmFQYXJ0OiAoX2NvbXAsIHRhcmdldCkgPT4gaXNBbGVydE9yQ29uZmlybURpYWxvZyh0YXJnZXQpXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIGlubGluZURpYWxvZy5zZXQoaW5saW5lRGlhbG9nQ29tcCk7XG4gICAgICAgICAgY29uc3QgZ2V0SW5saW5lRGlhbG9nQm91bmRzID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbSA9IGVkaXRvci5pbmxpbmUgPyBib2R5KCkgOiBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Q29udGFpbmVyKCkpO1xuICAgICAgICAgICAgY29uc3QgYm91bmRzID0gYm94JDEoZWxlbSk7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShib3VuZHMpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgSW5saW5lVmlldy5zaG93V2l0aGluQm91bmRzKGlubGluZURpYWxvZ0NvbXAsIHByZW1hZGUoZGlhbG9nVWkuZGlhbG9nKSwgeyBhbmNob3IgfSwgZ2V0SW5saW5lRGlhbG9nQm91bmRzKTtcbiAgICAgICAgICBpZiAoIWlzU3RpY2t5VG9vbGJhciQxIHx8ICFpc1Rvb2xiYXJMb2NhdGlvblRvcCkge1xuICAgICAgICAgICAgRG9ja2luZy5yZWZyZXNoKGlubGluZURpYWxvZ0NvbXApO1xuICAgICAgICAgICAgZWRpdG9yLm9uKCdSZXNpemVFZGl0b3InLCByZWZyZXNoRG9ja2luZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRpYWxvZ1VpLmluc3RhbmNlQXBpLnNldERhdGEoaW5pdGlhbERhdGEpO1xuICAgICAgICAgIEtleWluZy5mb2N1c0luKGRpYWxvZ1VpLmRpYWxvZyk7XG4gICAgICAgICAgcmV0dXJuIGRpYWxvZ1VpLmluc3RhbmNlQXBpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gRGlhbG9nTWFuYWdlci5vcGVuKGZhY3RvcnksIGNvbmZpZyQxKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBvcGVuQm90dG9tSW5saW5lRGlhbG9nID0gKGNvbmZpZyQxLCBhbmNob3IsIGNsb3NlV2luZG93LCB3aW5kb3dQYXJhbXMpID0+IHtcbiAgICAgICAgY29uc3QgZmFjdG9yeSA9IChjb250ZW50cywgaW50ZXJuYWxJbml0aWFsRGF0YSwgZGF0YVZhbGlkYXRvcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGluaXRpYWxEYXRhID0gdmFsaWRhdGVEYXRhKGludGVybmFsSW5pdGlhbERhdGEsIGRhdGFWYWxpZGF0b3IpO1xuICAgICAgICAgIGNvbnN0IGlubGluZURpYWxvZyA9IHZhbHVlJDIoKTtcbiAgICAgICAgICBjb25zdCBpc1Rvb2xiYXJMb2NhdGlvblRvcCA9IGV4dHJhcy5iYWNrc3RhZ2VzLnBvcHVwLnNoYXJlZC5oZWFkZXIuaXNQb3NpdGlvbmVkQXRUb3AoKTtcbiAgICAgICAgICBjb25zdCBkaWFsb2dJbml0ID0ge1xuICAgICAgICAgICAgZGF0YVZhbGlkYXRvcixcbiAgICAgICAgICAgIGluaXRpYWxEYXRhLFxuICAgICAgICAgICAgaW50ZXJuYWxEaWFsb2c6IGNvbnRlbnRzXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCByZWZyZXNoRG9ja2luZyA9ICgpID0+IGlubGluZURpYWxvZy5vbihkaWFsb2cgPT4ge1xuICAgICAgICAgICAgSW5saW5lVmlldy5yZXBvc2l0aW9uKGRpYWxvZyk7XG4gICAgICAgICAgICBEb2NraW5nLnJlZnJlc2goZGlhbG9nKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBkaWFsb2dVaSA9IHJlbmRlcklubGluZURpYWxvZyhkaWFsb2dJbml0LCB7XG4gICAgICAgICAgICByZWRpYWw6IERpYWxvZ01hbmFnZXIucmVkaWFsLFxuICAgICAgICAgICAgY2xvc2VXaW5kb3c6ICgpID0+IHtcbiAgICAgICAgICAgICAgaW5saW5lRGlhbG9nLm9uKElubGluZVZpZXcuaGlkZSk7XG4gICAgICAgICAgICAgIGVkaXRvci5vZmYoJ1Jlc2l6ZUVkaXRvciBTY3JvbGxXaW5kb3cgRWxlbWVudFNjcm9sbCcsIHJlZnJlc2hEb2NraW5nKTtcbiAgICAgICAgICAgICAgaW5saW5lRGlhbG9nLmNsZWFyKCk7XG4gICAgICAgICAgICAgIGNsb3NlV2luZG93KGRpYWxvZ1VpLmluc3RhbmNlQXBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBleHRyYXMuYmFja3N0YWdlcy5wb3B1cCwgd2luZG93UGFyYW1zLmFyaWFBdHRycyk7XG4gICAgICAgICAgY29uc3QgaW5saW5lRGlhbG9nQ29tcCA9IGJ1aWxkJDEoSW5saW5lVmlldy5za2V0Y2goe1xuICAgICAgICAgICAgbGF6eVNpbms6IGV4dHJhcy5iYWNrc3RhZ2VzLnBvcHVwLnNoYXJlZC5nZXRTaW5rLFxuICAgICAgICAgICAgZG9tOiB7XG4gICAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFtdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmlyZURpc21pc3NhbEV2ZW50SW5zdGVhZDogd2luZG93UGFyYW1zLnBlcnNpc3RlbnQgPyB7IGV2ZW50OiAnZG9Ob3REaXNtaXNzWWV0JyB9IDoge30sXG4gICAgICAgICAgICAuLi5pc1Rvb2xiYXJMb2NhdGlvblRvcCA/IHt9IDogeyBmaXJlUmVwb3NpdGlvbkV2ZW50SW5zdGVhZDoge30gfSxcbiAgICAgICAgICAgIGlubGluZUJlaGF2aW91cnM6IGRlcml2ZSQxKFtcbiAgICAgICAgICAgICAgY29uZmlnKCd3aW5kb3ctbWFuYWdlci1pbmxpbmUtZXZlbnRzJywgW3J1biQxKGRpc21pc3NSZXF1ZXN0ZWQoKSwgKF9jb21wLCBfc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgIGVtaXQoZGlhbG9nVWkuZGlhbG9nLCBmb3JtQ2FuY2VsRXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pXSksXG4gICAgICAgICAgICAgIERvY2tpbmcuY29uZmlnKHtcbiAgICAgICAgICAgICAgICBjb250ZXh0dWFsOiB7XG4gICAgICAgICAgICAgICAgICBsYXp5Q29udGV4dDogKCkgPT4gT3B0aW9uYWwuc29tZShib3gkMShTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Q29udGVudEFyZWFDb250YWluZXIoKSkpKSxcbiAgICAgICAgICAgICAgICAgIGZhZGVJbkNsYXNzOiAndG94LWRpYWxvZy1kb2NrLWZhZGVpbicsXG4gICAgICAgICAgICAgICAgICBmYWRlT3V0Q2xhc3M6ICd0b3gtZGlhbG9nLWRvY2stZmFkZW91dCcsXG4gICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uQ2xhc3M6ICd0b3gtZGlhbG9nLWRvY2stdHJhbnNpdGlvbidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1vZGVzOiBbXG4gICAgICAgICAgICAgICAgICAndG9wJyxcbiAgICAgICAgICAgICAgICAgICdib3R0b20nXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBsYXp5Vmlld3BvcnQ6IGNvbXAgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0U2Nyb2xsaW5nQ29udGV4dCA9IGRldGVjdFdoZW5TcGxpdFVpTW9kZShlZGl0b3IsIGNvbXAuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gb3B0U2Nyb2xsaW5nQ29udGV4dC5tYXAoc2MgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21iaW5lZEJvdW5kcyA9IGdldEJvdW5kc0Zyb20oc2MpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kczogY29tYmluZWRCb3VuZHMsXG4gICAgICAgICAgICAgICAgICAgICAgb3B0U2Nyb2xsRW52OiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY3JvbGxUb3A6IHNjLmVsZW1lbnQuZG9tLnNjcm9sbFRvcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbEVsbVRvcDogYWJzb2x1dGUkMyhzYy5lbGVtZW50KS50b3BcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgfSkuZ2V0T3JUaHVuaygoKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBib3VuZHM6IHdpbigpLFxuICAgICAgICAgICAgICAgICAgICBvcHRTY3JvbGxFbnY6IE9wdGlvbmFsLm5vbmUoKVxuICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgaXNFeHRyYVBhcnQ6IChfY29tcCwgdGFyZ2V0KSA9PiBpc0FsZXJ0T3JDb25maXJtRGlhbG9nKHRhcmdldClcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgaW5saW5lRGlhbG9nLnNldChpbmxpbmVEaWFsb2dDb21wKTtcbiAgICAgICAgICBjb25zdCBnZXRJbmxpbmVEaWFsb2dCb3VuZHMgPSAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLmJhY2tzdGFnZXMucG9wdXAuc2hhcmVkLmdldFNpbmsoKS50b09wdGlvbmFsKCkuYmluZChzID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgb3B0U2Nyb2xsaW5nQ29udGV4dCA9IGRldGVjdFdoZW5TcGxpdFVpTW9kZShlZGl0b3IsIHMuZWxlbWVudCk7XG4gICAgICAgICAgICAgIGNvbnN0IG1hcmdpbiA9IDE1O1xuICAgICAgICAgICAgICBjb25zdCBib3VuZHMkMSA9IG9wdFNjcm9sbGluZ0NvbnRleHQubWFwKHNjID0+IGdldEJvdW5kc0Zyb20oc2MpKS5nZXRPcih3aW4oKSk7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRBcmVhQ29udGFpbmVyID0gYm94JDEoU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldENvbnRlbnRBcmVhQ29udGFpbmVyKCkpKTtcbiAgICAgICAgICAgICAgY29uc3QgY29uc3RyYWluZWRCb3VuZHMgPSBjb25zdHJhaW4oY29udGVudEFyZWFDb250YWluZXIsIGJvdW5kcyQxKTtcbiAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoYm91bmRzKGNvbnN0cmFpbmVkQm91bmRzLngsIGNvbnN0cmFpbmVkQm91bmRzLnksIGNvbnN0cmFpbmVkQm91bmRzLndpZHRoLCBjb25zdHJhaW5lZEJvdW5kcy5oZWlnaHQgLSBtYXJnaW4pKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG4gICAgICAgICAgSW5saW5lVmlldy5zaG93V2l0aGluQm91bmRzKGlubGluZURpYWxvZ0NvbXAsIHByZW1hZGUoZGlhbG9nVWkuZGlhbG9nKSwgeyBhbmNob3IgfSwgZ2V0SW5saW5lRGlhbG9nQm91bmRzKTtcbiAgICAgICAgICBEb2NraW5nLnJlZnJlc2goaW5saW5lRGlhbG9nQ29tcCk7XG4gICAgICAgICAgZWRpdG9yLm9uKCdSZXNpemVFZGl0b3IgU2Nyb2xsV2luZG93IEVsZW1lbnRTY3JvbGwnLCByZWZyZXNoRG9ja2luZyk7XG4gICAgICAgICAgZGlhbG9nVWkuaW5zdGFuY2VBcGkuc2V0RGF0YShpbml0aWFsRGF0YSk7XG4gICAgICAgICAgS2V5aW5nLmZvY3VzSW4oZGlhbG9nVWkuZGlhbG9nKTtcbiAgICAgICAgICByZXR1cm4gZGlhbG9nVWkuaW5zdGFuY2VBcGk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBEaWFsb2dNYW5hZ2VyLm9wZW4oZmFjdG9yeSwgY29uZmlnJDEpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbmZpcm0gPSAobWVzc2FnZSwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgY29uZmlybURpYWxvZy5vcGVuKG1lc3NhZ2UsIGNhbGxiYWNrKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBhbGVydCA9IChtZXNzYWdlLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBhbGVydERpYWxvZy5vcGVuKG1lc3NhZ2UsIGNhbGxiYWNrKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjbG9zZSA9IGluc3RhbmNlQXBpID0+IHtcbiAgICAgICAgaW5zdGFuY2VBcGkuY2xvc2UoKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcGVuLFxuICAgICAgICBvcGVuVXJsLFxuICAgICAgICBhbGVydCxcbiAgICAgICAgY2xvc2UsXG4gICAgICAgIGNvbmZpcm1cbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHJlZ2lzdGVyT3B0aW9ucyA9IGVkaXRvciA9PiB7XG4gICAgICByZWdpc3RlciRlKGVkaXRvcik7XG4gICAgICByZWdpc3RlciRkKGVkaXRvcik7XG4gICAgICByZWdpc3RlcihlZGl0b3IpO1xuICAgIH07XG4gICAgdmFyIFRoZW1lID0gKCkgPT4ge1xuICAgICAgZ2xvYmFsJGEuYWRkKCdzaWx2ZXInLCBlZGl0b3IgPT4ge1xuICAgICAgICByZWdpc3Rlck9wdGlvbnMoZWRpdG9yKTtcbiAgICAgICAgbGV0IHBvcHVwU2lua0JvdW5kcyA9ICgpID0+IHdpbigpO1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgZGlhbG9ncyxcbiAgICAgICAgICBwb3B1cHMsXG4gICAgICAgICAgcmVuZGVyVUk6IHJlbmRlck1vZGVVSVxuICAgICAgICB9ID0gc2V0dXAkMyhlZGl0b3IsIHsgZ2V0UG9wdXBTaW5rQm91bmRzOiAoKSA9PiBwb3B1cFNpbmtCb3VuZHMoKSB9KTtcbiAgICAgICAgY29uc3QgcmVuZGVyVUkgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVuZGVyUmVzdWx0ID0gYXdhaXQgcmVuZGVyTW9kZVVJKCk7XG4gICAgICAgICAgY29uc3Qgb3B0U2Nyb2xsaW5nQ29udGV4dCA9IGRldGVjdFdoZW5TcGxpdFVpTW9kZShlZGl0b3IsIHBvcHVwcy5nZXRNb3RoZXJzaGlwKCkuZWxlbWVudCk7XG4gICAgICAgICAgb3B0U2Nyb2xsaW5nQ29udGV4dC5lYWNoKHNjID0+IHtcbiAgICAgICAgICAgIHBvcHVwU2lua0JvdW5kcyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEJvdW5kc0Zyb20oc2MpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcmVuZGVyUmVzdWx0O1xuICAgICAgICB9O1xuICAgICAgICBBdXRvY29tcGxldGVyLnJlZ2lzdGVyKGVkaXRvciwgcG9wdXBzLmJhY2tzdGFnZS5zaGFyZWQpO1xuICAgICAgICBjb25zdCB3aW5kb3dNZ3IgPSBzZXR1cCh7XG4gICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgIGJhY2tzdGFnZXM6IHtcbiAgICAgICAgICAgIHBvcHVwOiBwb3B1cHMuYmFja3N0YWdlLFxuICAgICAgICAgICAgZGlhbG9nOiBkaWFsb2dzLmJhY2tzdGFnZVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGdldE5vdGlmaWNhdGlvbk1hbmFnZXJJbXBsID0gKCkgPT4gTm90aWZpY2F0aW9uTWFuYWdlckltcGwoZWRpdG9yLCB7IGJhY2tzdGFnZTogcG9wdXBzLmJhY2tzdGFnZSB9LCBwb3B1cHMuZ2V0TW90aGVyc2hpcCgpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZW5kZXJVSSxcbiAgICAgICAgICBnZXRXaW5kb3dNYW5hZ2VySW1wbDogY29uc3RhbnQkMSh3aW5kb3dNZ3IpLFxuICAgICAgICAgIGdldE5vdGlmaWNhdGlvbk1hbmFnZXJJbXBsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgVGhlbWUoKTtcblxufSkoKTtcbiIsIi8qKlxuICogVGlueU1DRSB2ZXJzaW9uIDYuNy4wICgyMDIzLTA4LTMwKVxuICovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIHR5cGVPZiQxID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgIGlmICh4ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgICB9XG4gICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAndW5kZWZpbmVkJztcbiAgICAgIH1cbiAgICAgIHZhciB0ID0gdHlwZW9mIHg7XG4gICAgICBpZiAodCA9PT0gJ29iamVjdCcgJiYgKEFycmF5LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHgpIHx8IHguY29uc3RydWN0b3IgJiYgeC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnQXJyYXknKSkge1xuICAgICAgICByZXR1cm4gJ2FycmF5JztcbiAgICAgIH1cbiAgICAgIGlmICh0ID09PSAnb2JqZWN0JyAmJiAoU3RyaW5nLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHgpIHx8IHguY29uc3RydWN0b3IgJiYgeC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnU3RyaW5nJykpIHtcbiAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICB2YXIgaXNFcXVhdGFibGVUeXBlID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgICd1bmRlZmluZWQnLFxuICAgICAgICAnYm9vbGVhbicsXG4gICAgICAgICdudW1iZXInLFxuICAgICAgICAnc3RyaW5nJyxcbiAgICAgICAgJ2Z1bmN0aW9uJyxcbiAgICAgICAgJ3htbCcsXG4gICAgICAgICdudWxsJ1xuICAgICAgXS5pbmRleE9mKHgpICE9PSAtMTtcbiAgICB9O1xuXG4gICAgdmFyIHNvcnQkMSA9IGZ1bmN0aW9uICh4cywgY29tcGFyZUZuKSB7XG4gICAgICB2YXIgY2xvbmUgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh4cyk7XG4gICAgICByZXR1cm4gY2xvbmUuc29ydChjb21wYXJlRm4pO1xuICAgIH07XG5cbiAgICB2YXIgY29udHJhbWFwID0gZnVuY3Rpb24gKGVxYSwgZikge1xuICAgICAgcmV0dXJuIGVxJDIoZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgICAgcmV0dXJuIGVxYS5lcShmKHgpLCBmKHkpKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdmFyIGVxJDIgPSBmdW5jdGlvbiAoZikge1xuICAgICAgcmV0dXJuIHsgZXE6IGYgfTtcbiAgICB9O1xuICAgIHZhciB0cmlwbGVFcSA9IGVxJDIoZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgIHJldHVybiB4ID09PSB5O1xuICAgIH0pO1xuICAgIHZhciBlcVN0cmluZyA9IHRyaXBsZUVxO1xuICAgIHZhciBlcUFycmF5ID0gZnVuY3Rpb24gKGVxYSkge1xuICAgICAgcmV0dXJuIGVxJDIoZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgICAgaWYgKHgubGVuZ3RoICE9PSB5Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbGVuID0geC5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBpZiAoIWVxYS5lcSh4W2ldLCB5W2ldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdmFyIGVxU29ydGVkQXJyYXkgPSBmdW5jdGlvbiAoZXFhLCBjb21wYXJlRm4pIHtcbiAgICAgIHJldHVybiBjb250cmFtYXAoZXFBcnJheShlcWEpLCBmdW5jdGlvbiAoeHMpIHtcbiAgICAgICAgcmV0dXJuIHNvcnQkMSh4cywgY29tcGFyZUZuKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdmFyIGVxUmVjb3JkID0gZnVuY3Rpb24gKGVxYSkge1xuICAgICAgcmV0dXJuIGVxJDIoZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgICAgdmFyIGt4ID0gT2JqZWN0LmtleXMoeCk7XG4gICAgICAgIHZhciBreSA9IE9iamVjdC5rZXlzKHkpO1xuICAgICAgICBpZiAoIWVxU29ydGVkQXJyYXkoZXFTdHJpbmcpLmVxKGt4LCBreSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxlbiA9IGt4Lmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIHZhciBxID0ga3hbaV07XG4gICAgICAgICAgaWYgKCFlcWEuZXEoeFtxXSwgeVtxXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHZhciBlcUFueSA9IGVxJDIoZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgIGlmICh4ID09PSB5KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIHR4ID0gdHlwZU9mJDEoeCk7XG4gICAgICB2YXIgdHkgPSB0eXBlT2YkMSh5KTtcbiAgICAgIGlmICh0eCAhPT0gdHkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGlzRXF1YXRhYmxlVHlwZSh0eCkpIHtcbiAgICAgICAgcmV0dXJuIHggPT09IHk7XG4gICAgICB9IGVsc2UgaWYgKHR4ID09PSAnYXJyYXknKSB7XG4gICAgICAgIHJldHVybiBlcUFycmF5KGVxQW55KS5lcSh4LCB5KTtcbiAgICAgIH0gZWxzZSBpZiAodHggPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBlcVJlY29yZChlcUFueSkuZXEoeCwgeSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG5cbiAgICBjb25zdCBnZXRQcm90b3R5cGVPZiQyID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuICAgIGNvbnN0IGhhc1Byb3RvID0gKHYsIGNvbnN0cnVjdG9yLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGlmIChwcmVkaWNhdGUodiwgY29uc3RydWN0b3IucHJvdG90eXBlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoKF9hID0gdi5jb25zdHJ1Y3RvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5hbWUpID09PSBjb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdHlwZU9mID0geCA9PiB7XG4gICAgICBjb25zdCB0ID0gdHlwZW9mIHg7XG4gICAgICBpZiAoeCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgICAgfSBlbHNlIGlmICh0ID09PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgICAgIHJldHVybiAnYXJyYXknO1xuICAgICAgfSBlbHNlIGlmICh0ID09PSAnb2JqZWN0JyAmJiBoYXNQcm90byh4LCBTdHJpbmcsIChvLCBwcm90bykgPT4gcHJvdG8uaXNQcm90b3R5cGVPZihvKSkpIHtcbiAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc1R5cGUkMSA9IHR5cGUgPT4gdmFsdWUgPT4gdHlwZU9mKHZhbHVlKSA9PT0gdHlwZTtcbiAgICBjb25zdCBpc1NpbXBsZVR5cGUgPSB0eXBlID0+IHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gdHlwZTtcbiAgICBjb25zdCBlcSQxID0gdCA9PiBhID0+IHQgPT09IGE7XG4gICAgY29uc3QgaXMkNCA9ICh2YWx1ZSwgY29uc3RydWN0b3IpID0+IGlzT2JqZWN0KHZhbHVlKSAmJiBoYXNQcm90byh2YWx1ZSwgY29uc3RydWN0b3IsIChvLCBwcm90bykgPT4gZ2V0UHJvdG90eXBlT2YkMihvKSA9PT0gcHJvdG8pO1xuICAgIGNvbnN0IGlzU3RyaW5nID0gaXNUeXBlJDEoJ3N0cmluZycpO1xuICAgIGNvbnN0IGlzT2JqZWN0ID0gaXNUeXBlJDEoJ29iamVjdCcpO1xuICAgIGNvbnN0IGlzUGxhaW5PYmplY3QgPSB2YWx1ZSA9PiBpcyQ0KHZhbHVlLCBPYmplY3QpO1xuICAgIGNvbnN0IGlzQXJyYXkkMSA9IGlzVHlwZSQxKCdhcnJheScpO1xuICAgIGNvbnN0IGlzTnVsbCA9IGVxJDEobnVsbCk7XG4gICAgY29uc3QgaXNCb29sZWFuID0gaXNTaW1wbGVUeXBlKCdib29sZWFuJyk7XG4gICAgY29uc3QgaXNVbmRlZmluZWQgPSBlcSQxKHVuZGVmaW5lZCk7XG4gICAgY29uc3QgaXNOdWxsYWJsZSA9IGEgPT4gYSA9PT0gbnVsbCB8fCBhID09PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgaXNOb25OdWxsYWJsZSA9IGEgPT4gIWlzTnVsbGFibGUoYSk7XG4gICAgY29uc3QgaXNGdW5jdGlvbiA9IGlzU2ltcGxlVHlwZSgnZnVuY3Rpb24nKTtcbiAgICBjb25zdCBpc051bWJlciA9IGlzU2ltcGxlVHlwZSgnbnVtYmVyJyk7XG4gICAgY29uc3QgaXNBcnJheU9mID0gKHZhbHVlLCBwcmVkKSA9PiB7XG4gICAgICBpZiAoaXNBcnJheSQxKHZhbHVlKSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdmFsdWUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICBpZiAoIXByZWQodmFsdWVbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICBjb25zdCBub29wID0gKCkgPT4ge1xuICAgIH07XG4gICAgY29uc3QgY29tcG9zZSA9IChmYSwgZmIpID0+IHtcbiAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICByZXR1cm4gZmEoZmIuYXBwbHkobnVsbCwgYXJncykpO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbXBvc2UxID0gKGZiYywgZmFiKSA9PiBhID0+IGZiYyhmYWIoYSkpO1xuICAgIGNvbnN0IGNvbnN0YW50ID0gdmFsdWUgPT4ge1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGlkZW50aXR5ID0geCA9PiB7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICAgIGNvbnN0IHRyaXBsZUVxdWFscyA9IChhLCBiKSA9PiB7XG4gICAgICByZXR1cm4gYSA9PT0gYjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGN1cnJ5KGZuLCAuLi5pbml0aWFsQXJncykge1xuICAgICAgcmV0dXJuICguLi5yZXN0QXJncykgPT4ge1xuICAgICAgICBjb25zdCBhbGwgPSBpbml0aWFsQXJncy5jb25jYXQocmVzdEFyZ3MpO1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgYWxsKTtcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IG5vdCA9IGYgPT4gdCA9PiAhZih0KTtcbiAgICBjb25zdCBkaWUgPSBtc2cgPT4ge1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgYXBwbHkkMSA9IGYgPT4ge1xuICAgICAgcmV0dXJuIGYoKTtcbiAgICB9O1xuICAgIGNvbnN0IGNhbGwgPSBmID0+IHtcbiAgICAgIGYoKTtcbiAgICB9O1xuICAgIGNvbnN0IG5ldmVyID0gY29uc3RhbnQoZmFsc2UpO1xuICAgIGNvbnN0IGFsd2F5cyA9IGNvbnN0YW50KHRydWUpO1xuXG4gICAgY2xhc3MgT3B0aW9uYWwge1xuICAgICAgY29uc3RydWN0b3IodGFnLCB2YWx1ZSkge1xuICAgICAgICB0aGlzLnRhZyA9IHRhZztcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgc3RhdGljIHNvbWUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPcHRpb25hbCh0cnVlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBzdGF0aWMgbm9uZSgpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNpbmdsZXRvbk5vbmU7XG4gICAgICB9XG4gICAgICBmb2xkKG9uTm9uZSwgb25Tb21lKSB7XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgIHJldHVybiBvblNvbWUodGhpcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG9uTm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpc1NvbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZztcbiAgICAgIH1cbiAgICAgIGlzTm9uZSgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnRhZztcbiAgICAgIH1cbiAgICAgIG1hcChtYXBwZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUobWFwcGVyKHRoaXMudmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBiaW5kKGJpbmRlcikge1xuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICByZXR1cm4gYmluZGVyKHRoaXMudmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV4aXN0cyhwcmVkaWNhdGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnICYmIHByZWRpY2F0ZSh0aGlzLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZvcmFsbChwcmVkaWNhdGUpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnRhZyB8fCBwcmVkaWNhdGUodGhpcy52YWx1ZSk7XG4gICAgICB9XG4gICAgICBmaWx0ZXIocHJlZGljYXRlKSB7XG4gICAgICAgIGlmICghdGhpcy50YWcgfHwgcHJlZGljYXRlKHRoaXMudmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZ2V0T3IocmVwbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gdGhpcy52YWx1ZSA6IHJlcGxhY2VtZW50O1xuICAgICAgfVxuICAgICAgb3IocmVwbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gdGhpcyA6IHJlcGxhY2VtZW50O1xuICAgICAgfVxuICAgICAgZ2V0T3JUaHVuayh0aHVuaykge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzLnZhbHVlIDogdGh1bmsoKTtcbiAgICAgIH1cbiAgICAgIG9yVGh1bmsodGh1bmspIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gdGhpcyA6IHRodW5rKCk7XG4gICAgICB9XG4gICAgICBnZXRPckRpZShtZXNzYWdlKSB7XG4gICAgICAgIGlmICghdGhpcy50YWcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSAhPT0gbnVsbCAmJiBtZXNzYWdlICE9PSB2b2lkIDAgPyBtZXNzYWdlIDogJ0NhbGxlZCBnZXRPckRpZSBvbiBOb25lJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0YXRpYyBmcm9tKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpc05vbk51bGxhYmxlKHZhbHVlKSA/IE9wdGlvbmFsLnNvbWUodmFsdWUpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgICAgZ2V0T3JOdWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWcgPyB0aGlzLnZhbHVlIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIGdldE9yVW5kZWZpbmVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgIH1cbiAgICAgIGVhY2god29ya2VyKSB7XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgIHdvcmtlcih0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdG9BcnJheSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gW3RoaXMudmFsdWVdIDogW107XG4gICAgICB9XG4gICAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnID8gYHNvbWUoJHsgdGhpcy52YWx1ZSB9KWAgOiAnbm9uZSgpJztcbiAgICAgIH1cbiAgICB9XG4gICAgT3B0aW9uYWwuc2luZ2xldG9uTm9uZSA9IG5ldyBPcHRpb25hbChmYWxzZSk7XG5cbiAgICBjb25zdCBuYXRpdmVTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbiAgICBjb25zdCBuYXRpdmVJbmRleE9mID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2Y7XG4gICAgY29uc3QgbmF0aXZlUHVzaCA9IEFycmF5LnByb3RvdHlwZS5wdXNoO1xuICAgIGNvbnN0IHJhd0luZGV4T2YgPSAodHMsIHQpID0+IG5hdGl2ZUluZGV4T2YuY2FsbCh0cywgdCk7XG4gICAgY29uc3QgaW5kZXhPZiQxID0gKHhzLCB4KSA9PiB7XG4gICAgICBjb25zdCByID0gcmF3SW5kZXhPZih4cywgeCk7XG4gICAgICByZXR1cm4gciA9PT0gLTEgPyBPcHRpb25hbC5ub25lKCkgOiBPcHRpb25hbC5zb21lKHIpO1xuICAgIH07XG4gICAgY29uc3QgY29udGFpbnMkMiA9ICh4cywgeCkgPT4gcmF3SW5kZXhPZih4cywgeCkgPiAtMTtcbiAgICBjb25zdCBleGlzdHMgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IG1hcCQzID0gKHhzLCBmKSA9PiB7XG4gICAgICBjb25zdCBsZW4gPSB4cy5sZW5ndGg7XG4gICAgICBjb25zdCByID0gbmV3IEFycmF5KGxlbik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgcltpXSA9IGYoeCwgaSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IGVhY2gkZSA9ICh4cywgZikgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgZih4LCBpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGVhY2hyID0gKHhzLCBmKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0geHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgeCA9IHhzW2ldO1xuICAgICAgICBmKHgsIGkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcGFydGl0aW9uJDIgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGNvbnN0IHBhc3MgPSBbXTtcbiAgICAgIGNvbnN0IGZhaWwgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGNvbnN0IGFyciA9IHByZWQoeCwgaSkgPyBwYXNzIDogZmFpbDtcbiAgICAgICAgYXJyLnB1c2goeCk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXNzLFxuICAgICAgICBmYWlsXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZmlsdGVyJDUgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpKSB7XG4gICAgICAgICAgci5wdXNoKHgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IGZvbGRyID0gKHhzLCBmLCBhY2MpID0+IHtcbiAgICAgIGVhY2hyKHhzLCAoeCwgaSkgPT4ge1xuICAgICAgICBhY2MgPSBmKGFjYywgeCwgaSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfTtcbiAgICBjb25zdCBmb2xkbCA9ICh4cywgZiwgYWNjKSA9PiB7XG4gICAgICBlYWNoJGUoeHMsICh4LCBpKSA9PiB7XG4gICAgICAgIGFjYyA9IGYoYWNjLCB4LCBpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRVbnRpbCQxID0gKHhzLCBwcmVkLCB1bnRpbCkgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgaWYgKHByZWQoeCwgaSkpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh4KTtcbiAgICAgICAgfSBlbHNlIGlmICh1bnRpbCh4LCBpKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgZmluZCQyID0gKHhzLCBwcmVkKSA9PiB7XG4gICAgICByZXR1cm4gZmluZFVudGlsJDEoeHMsIHByZWQsIG5ldmVyKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRJbmRleCQyID0gKHhzLCBwcmVkKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0geHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgeCA9IHhzW2ldO1xuICAgICAgICBpZiAocHJlZCh4LCBpKSkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgZmxhdHRlbiA9IHhzID0+IHtcbiAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoIWlzQXJyYXkkMSh4c1tpXSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Fyci5mbGF0dGVuIGl0ZW0gJyArIGkgKyAnIHdhcyBub3QgYW4gYXJyYXksIGlucHV0OiAnICsgeHMpO1xuICAgICAgICB9XG4gICAgICAgIG5hdGl2ZVB1c2guYXBwbHkociwgeHNbaV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBjb25zdCBiaW5kJDMgPSAoeHMsIGYpID0+IGZsYXR0ZW4obWFwJDMoeHMsIGYpKTtcbiAgICBjb25zdCBmb3JhbGwgPSAoeHMsIHByZWQpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIGlmIChwcmVkKHgsIGkpICE9PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIGNvbnN0IHJldmVyc2UgPSB4cyA9PiB7XG4gICAgICBjb25zdCByID0gbmF0aXZlU2xpY2UuY2FsbCh4cywgMCk7XG4gICAgICByLnJldmVyc2UoKTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IChhMSwgYTIpID0+IGZpbHRlciQ1KGExLCB4ID0+ICFjb250YWlucyQyKGEyLCB4KSk7XG4gICAgY29uc3QgbWFwVG9PYmplY3QgPSAoeHMsIGYpID0+IHtcbiAgICAgIGNvbnN0IHIgPSB7fTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB4cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCB4ID0geHNbaV07XG4gICAgICAgIHJbU3RyaW5nKHgpXSA9IGYoeCwgaSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IHNvcnQgPSAoeHMsIGNvbXBhcmF0b3IpID0+IHtcbiAgICAgIGNvbnN0IGNvcHkgPSBuYXRpdmVTbGljZS5jYWxsKHhzLCAwKTtcbiAgICAgIGNvcHkuc29ydChjb21wYXJhdG9yKTtcbiAgICAgIHJldHVybiBjb3B5O1xuICAgIH07XG4gICAgY29uc3QgZ2V0JGIgPSAoeHMsIGkpID0+IGkgPj0gMCAmJiBpIDwgeHMubGVuZ3RoID8gT3B0aW9uYWwuc29tZSh4c1tpXSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgY29uc3QgaGVhZCA9IHhzID0+IGdldCRiKHhzLCAwKTtcbiAgICBjb25zdCBsYXN0JDMgPSB4cyA9PiBnZXQkYih4cywgeHMubGVuZ3RoIC0gMSk7XG4gICAgY29uc3QgZnJvbSA9IGlzRnVuY3Rpb24oQXJyYXkuZnJvbSkgPyBBcnJheS5mcm9tIDogeCA9PiBuYXRpdmVTbGljZS5jYWxsKHgpO1xuICAgIGNvbnN0IGZpbmRNYXAgPSAoYXJyLCBmKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByID0gZihhcnJbaV0sIGkpO1xuICAgICAgICBpZiAoci5pc1NvbWUoKSkge1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3QgdW5pcXVlJDEgPSAoeHMsIGNvbXBhcmF0b3IpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgIGNvbnN0IGlzRHVwbGljYXRlZCA9IGlzRnVuY3Rpb24oY29tcGFyYXRvcikgPyB4ID0+IGV4aXN0cyhyLCBpID0+IGNvbXBhcmF0b3IoaSwgeCkpIDogeCA9PiBjb250YWlucyQyKHIsIHgpO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXTtcbiAgICAgICAgaWYgKCFpc0R1cGxpY2F0ZWQoeCkpIHtcbiAgICAgICAgICByLnB1c2goeCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByO1xuICAgIH07XG5cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgY29uc3QgaGFzT3duUHJvcGVydHkkMiA9IE9iamVjdC5oYXNPd25Qcm9wZXJ0eTtcbiAgICBjb25zdCBlYWNoJGQgPSAob2JqLCBmKSA9PiB7XG4gICAgICBjb25zdCBwcm9wcyA9IGtleXMob2JqKTtcbiAgICAgIGZvciAobGV0IGsgPSAwLCBsZW4gPSBwcm9wcy5sZW5ndGg7IGsgPCBsZW47IGsrKykge1xuICAgICAgICBjb25zdCBpID0gcHJvcHNba107XG4gICAgICAgIGNvbnN0IHggPSBvYmpbaV07XG4gICAgICAgIGYoeCwgaSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBtYXAkMiA9IChvYmosIGYpID0+IHtcbiAgICAgIHJldHVybiB0dXBsZU1hcChvYmosICh4LCBpKSA9PiAoe1xuICAgICAgICBrOiBpLFxuICAgICAgICB2OiBmKHgsIGkpXG4gICAgICB9KSk7XG4gICAgfTtcbiAgICBjb25zdCB0dXBsZU1hcCA9IChvYmosIGYpID0+IHtcbiAgICAgIGNvbnN0IHIgPSB7fTtcbiAgICAgIGVhY2gkZChvYmosICh4LCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IHR1cGxlID0gZih4LCBpKTtcbiAgICAgICAgclt0dXBsZS5rXSA9IHR1cGxlLnY7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG4gICAgY29uc3Qgb2JqQWNjID0gciA9PiAoeCwgaSkgPT4ge1xuICAgICAgcltpXSA9IHg7XG4gICAgfTtcbiAgICBjb25zdCBpbnRlcm5hbEZpbHRlciA9IChvYmosIHByZWQsIG9uVHJ1ZSwgb25GYWxzZSkgPT4ge1xuICAgICAgZWFjaCRkKG9iaiwgKHgsIGkpID0+IHtcbiAgICAgICAgKHByZWQoeCwgaSkgPyBvblRydWUgOiBvbkZhbHNlKSh4LCBpKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYmlmaWx0ZXIgPSAob2JqLCBwcmVkKSA9PiB7XG4gICAgICBjb25zdCB0ID0ge307XG4gICAgICBjb25zdCBmID0ge307XG4gICAgICBpbnRlcm5hbEZpbHRlcihvYmosIHByZWQsIG9iakFjYyh0KSwgb2JqQWNjKGYpKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHQsXG4gICAgICAgIGZcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXIkNCA9IChvYmosIHByZWQpID0+IHtcbiAgICAgIGNvbnN0IHQgPSB7fTtcbiAgICAgIGludGVybmFsRmlsdGVyKG9iaiwgcHJlZCwgb2JqQWNjKHQpLCBub29wKTtcbiAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgY29uc3QgbWFwVG9BcnJheSA9IChvYmosIGYpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgIGVhY2gkZChvYmosICh2YWx1ZSwgbmFtZSkgPT4ge1xuICAgICAgICByLnB1c2goZih2YWx1ZSwgbmFtZSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IHZhbHVlcyA9IG9iaiA9PiB7XG4gICAgICByZXR1cm4gbWFwVG9BcnJheShvYmosIGlkZW50aXR5KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldCRhID0gKG9iaiwga2V5KSA9PiB7XG4gICAgICByZXR1cm4gaGFzJDIob2JqLCBrZXkpID8gT3B0aW9uYWwuZnJvbShvYmpba2V5XSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBoYXMkMiA9IChvYmosIGtleSkgPT4gaGFzT3duUHJvcGVydHkkMi5jYWxsKG9iaiwga2V5KTtcbiAgICBjb25zdCBoYXNOb25OdWxsYWJsZUtleSA9IChvYmosIGtleSkgPT4gaGFzJDIob2JqLCBrZXkpICYmIG9ialtrZXldICE9PSB1bmRlZmluZWQgJiYgb2JqW2tleV0gIT09IG51bGw7XG4gICAgY29uc3QgZXF1YWwkMSA9IChhMSwgYTIsIGVxID0gZXFBbnkpID0+IGVxUmVjb3JkKGVxKS5lcShhMSwgYTIpO1xuXG4gICAgY29uc3Qgc3RyaW5nQXJyYXkgPSBhID0+IHtcbiAgICAgIGNvbnN0IGFsbCA9IHt9O1xuICAgICAgZWFjaCRlKGEsIGtleSA9PiB7XG4gICAgICAgIGFsbFtrZXldID0ge307XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBrZXlzKGFsbCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzQXJyYXlMaWtlID0gbyA9PiBvLmxlbmd0aCAhPT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuICAgIGNvbnN0IHRvQXJyYXkkMSA9IG9iaiA9PiB7XG4gICAgICBpZiAoIWlzQXJyYXkob2JqKSkge1xuICAgICAgICBjb25zdCBhcnJheSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBhcnJheVtpXSA9IG9ialtpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZWFjaCRjID0gKG8sIGNiLCBzKSA9PiB7XG4gICAgICBpZiAoIW8pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcyA9IHMgfHwgbztcbiAgICAgIGlmIChpc0FycmF5TGlrZShvKSkge1xuICAgICAgICBmb3IgKGxldCBuID0gMCwgbCA9IG8ubGVuZ3RoOyBuIDwgbDsgbisrKSB7XG4gICAgICAgICAgaWYgKGNiLmNhbGwocywgb1tuXSwgbiwgbykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IG4gaW4gbykge1xuICAgICAgICAgIGlmIChoYXMkMihvLCBuKSkge1xuICAgICAgICAgICAgaWYgKGNiLmNhbGwocywgb1tuXSwgbiwgbykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgY29uc3QgbWFwJDEgPSAoYXJyYXksIGNhbGxiYWNrKSA9PiB7XG4gICAgICBjb25zdCBvdXQgPSBbXTtcbiAgICAgIGVhY2gkYyhhcnJheSwgKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgIG91dC5wdXNoKGNhbGxiYWNrKGl0ZW0sIGluZGV4LCBhcnJheSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH07XG4gICAgY29uc3QgZmlsdGVyJDMgPSAoYSwgZikgPT4ge1xuICAgICAgY29uc3QgbyA9IFtdO1xuICAgICAgZWFjaCRjKGEsICh2LCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoIWYgfHwgZih2LCBpbmRleCwgYSkpIHtcbiAgICAgICAgICBvLnB1c2godik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICBjb25zdCBpbmRleE9mID0gKGEsIHYpID0+IHtcbiAgICAgIGlmIChhKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gYS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBpZiAoYVtpXSA9PT0gdikge1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgICBjb25zdCByZWR1Y2UgPSAoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yLCB0aGlzQXJnKSA9PiB7XG4gICAgICBsZXQgYWNjID0gaXNVbmRlZmluZWQoYWNjdW11bGF0b3IpID8gY29sbGVjdGlvblswXSA6IGFjY3VtdWxhdG9yO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xsZWN0aW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFjYyA9IGl0ZXJhdGVlLmNhbGwodGhpc0FyZywgYWNjLCBjb2xsZWN0aW9uW2ldLCBpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kSW5kZXgkMSA9IChhcnJheSwgcHJlZGljYXRlLCB0aGlzQXJnKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAocHJlZGljYXRlLmNhbGwodGhpc0FyZywgYXJyYXlbaV0sIGksIGFycmF5KSkge1xuICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgICBjb25zdCBsYXN0JDIgPSBjb2xsZWN0aW9uID0+IGNvbGxlY3Rpb25bY29sbGVjdGlvbi5sZW5ndGggLSAxXTtcblxuICAgIGNvbnN0IGNhY2hlZCA9IGYgPT4ge1xuICAgICAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuICAgICAgbGV0IHI7XG4gICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHIgPSBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgRGV2aWNlVHlwZSA9IChvcywgYnJvd3NlciwgdXNlckFnZW50LCBtZWRpYU1hdGNoKSA9PiB7XG4gICAgICBjb25zdCBpc2lQYWQgPSBvcy5pc2lPUygpICYmIC9pcGFkL2kudGVzdCh1c2VyQWdlbnQpID09PSB0cnVlO1xuICAgICAgY29uc3QgaXNpUGhvbmUgPSBvcy5pc2lPUygpICYmICFpc2lQYWQ7XG4gICAgICBjb25zdCBpc01vYmlsZSA9IG9zLmlzaU9TKCkgfHwgb3MuaXNBbmRyb2lkKCk7XG4gICAgICBjb25zdCBpc1RvdWNoID0gaXNNb2JpbGUgfHwgbWVkaWFNYXRjaCgnKHBvaW50ZXI6Y29hcnNlKScpO1xuICAgICAgY29uc3QgaXNUYWJsZXQgPSBpc2lQYWQgfHwgIWlzaVBob25lICYmIGlzTW9iaWxlICYmIG1lZGlhTWF0Y2goJyhtaW4tZGV2aWNlLXdpZHRoOjc2OHB4KScpO1xuICAgICAgY29uc3QgaXNQaG9uZSA9IGlzaVBob25lIHx8IGlzTW9iaWxlICYmICFpc1RhYmxldDtcbiAgICAgIGNvbnN0IGlPU3dlYnZpZXcgPSBicm93c2VyLmlzU2FmYXJpKCkgJiYgb3MuaXNpT1MoKSAmJiAvc2FmYXJpL2kudGVzdCh1c2VyQWdlbnQpID09PSBmYWxzZTtcbiAgICAgIGNvbnN0IGlzRGVza3RvcCA9ICFpc1Bob25lICYmICFpc1RhYmxldCAmJiAhaU9Td2VidmlldztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzaVBhZDogY29uc3RhbnQoaXNpUGFkKSxcbiAgICAgICAgaXNpUGhvbmU6IGNvbnN0YW50KGlzaVBob25lKSxcbiAgICAgICAgaXNUYWJsZXQ6IGNvbnN0YW50KGlzVGFibGV0KSxcbiAgICAgICAgaXNQaG9uZTogY29uc3RhbnQoaXNQaG9uZSksXG4gICAgICAgIGlzVG91Y2g6IGNvbnN0YW50KGlzVG91Y2gpLFxuICAgICAgICBpc0FuZHJvaWQ6IG9zLmlzQW5kcm9pZCxcbiAgICAgICAgaXNpT1M6IG9zLmlzaU9TLFxuICAgICAgICBpc1dlYlZpZXc6IGNvbnN0YW50KGlPU3dlYnZpZXcpLFxuICAgICAgICBpc0Rlc2t0b3A6IGNvbnN0YW50KGlzRGVza3RvcClcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSAocmVnZXhlcywgcykgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWdleGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSByZWdleGVzW2ldO1xuICAgICAgICBpZiAoeC50ZXN0KHMpKSB7XG4gICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kJDEgPSAocmVnZXhlcywgYWdlbnQpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBmaXJzdE1hdGNoKHJlZ2V4ZXMsIGFnZW50KTtcbiAgICAgIGlmICghcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1ham9yOiAwLFxuICAgICAgICAgIG1pbm9yOiAwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBncm91cCA9IGkgPT4ge1xuICAgICAgICByZXR1cm4gTnVtYmVyKGFnZW50LnJlcGxhY2UociwgJyQnICsgaSkpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBudSQzKGdyb3VwKDEpLCBncm91cCgyKSk7XG4gICAgfTtcbiAgICBjb25zdCBkZXRlY3QkNSA9ICh2ZXJzaW9uUmVnZXhlcywgYWdlbnQpID0+IHtcbiAgICAgIGNvbnN0IGNsZWFuZWRBZ2VudCA9IFN0cmluZyhhZ2VudCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmICh2ZXJzaW9uUmVnZXhlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVua25vd24kMigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZpbmQkMSh2ZXJzaW9uUmVnZXhlcywgY2xlYW5lZEFnZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IHVua25vd24kMiA9ICgpID0+IHtcbiAgICAgIHJldHVybiBudSQzKDAsIDApO1xuICAgIH07XG4gICAgY29uc3QgbnUkMyA9IChtYWpvciwgbWlub3IpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1ham9yLFxuICAgICAgICBtaW5vclxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IFZlcnNpb24gPSB7XG4gICAgICBudTogbnUkMyxcbiAgICAgIGRldGVjdDogZGV0ZWN0JDUsXG4gICAgICB1bmtub3duOiB1bmtub3duJDJcbiAgICB9O1xuXG4gICAgY29uc3QgZGV0ZWN0QnJvd3NlciQxID0gKGJyb3dzZXJzLCB1c2VyQWdlbnREYXRhKSA9PiB7XG4gICAgICByZXR1cm4gZmluZE1hcCh1c2VyQWdlbnREYXRhLmJyYW5kcywgdWFCcmFuZCA9PiB7XG4gICAgICAgIGNvbnN0IGxjQnJhbmQgPSB1YUJyYW5kLmJyYW5kLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBmaW5kJDIoYnJvd3NlcnMsIGJyb3dzZXIgPT4ge1xuICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICByZXR1cm4gbGNCcmFuZCA9PT0gKChfYSA9IGJyb3dzZXIuYnJhbmQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSkubWFwKGluZm8gPT4gKHtcbiAgICAgICAgICBjdXJyZW50OiBpbmZvLm5hbWUsXG4gICAgICAgICAgdmVyc2lvbjogVmVyc2lvbi5udShwYXJzZUludCh1YUJyYW5kLnZlcnNpb24sIDEwKSwgMClcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGRldGVjdCQ0ID0gKGNhbmRpZGF0ZXMsIHVzZXJBZ2VudCkgPT4ge1xuICAgICAgY29uc3QgYWdlbnQgPSBTdHJpbmcodXNlckFnZW50KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIGZpbmQkMihjYW5kaWRhdGVzLCBjYW5kaWRhdGUgPT4ge1xuICAgICAgICByZXR1cm4gY2FuZGlkYXRlLnNlYXJjaChhZ2VudCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGRldGVjdEJyb3dzZXIgPSAoYnJvd3NlcnMsIHVzZXJBZ2VudCkgPT4ge1xuICAgICAgcmV0dXJuIGRldGVjdCQ0KGJyb3dzZXJzLCB1c2VyQWdlbnQpLm1hcChicm93c2VyID0+IHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IFZlcnNpb24uZGV0ZWN0KGJyb3dzZXIudmVyc2lvblJlZ2V4ZXMsIHVzZXJBZ2VudCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY3VycmVudDogYnJvd3Nlci5uYW1lLFxuICAgICAgICAgIHZlcnNpb25cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZGV0ZWN0T3MgPSAob3NlcywgdXNlckFnZW50KSA9PiB7XG4gICAgICByZXR1cm4gZGV0ZWN0JDQob3NlcywgdXNlckFnZW50KS5tYXAob3MgPT4ge1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gVmVyc2lvbi5kZXRlY3Qob3MudmVyc2lvblJlZ2V4ZXMsIHVzZXJBZ2VudCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY3VycmVudDogb3MubmFtZSxcbiAgICAgICAgICB2ZXJzaW9uXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVtb3ZlRnJvbVN0YXJ0ID0gKHN0ciwgbnVtQ2hhcnMpID0+IHtcbiAgICAgIHJldHVybiBzdHIuc3Vic3RyaW5nKG51bUNoYXJzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2hlY2tSYW5nZSA9IChzdHIsIHN1YnN0ciwgc3RhcnQpID0+IHN1YnN0ciA9PT0gJycgfHwgc3RyLmxlbmd0aCA+PSBzdWJzdHIubGVuZ3RoICYmIHN0ci5zdWJzdHIoc3RhcnQsIHN0YXJ0ICsgc3Vic3RyLmxlbmd0aCkgPT09IHN1YnN0cjtcbiAgICBjb25zdCByZW1vdmVMZWFkaW5nID0gKHN0ciwgcHJlZml4KSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRzV2l0aChzdHIsIHByZWZpeCkgPyByZW1vdmVGcm9tU3RhcnQoc3RyLCBwcmVmaXgubGVuZ3RoKSA6IHN0cjtcbiAgICB9O1xuICAgIGNvbnN0IGNvbnRhaW5zJDEgPSAoc3RyLCBzdWJzdHIsIHN0YXJ0ID0gMCwgZW5kKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBzdHIuaW5kZXhPZihzdWJzdHIsIHN0YXJ0KTtcbiAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgIHJldHVybiBpc1VuZGVmaW5lZChlbmQpID8gdHJ1ZSA6IGlkeCArIHN1YnN0ci5sZW5ndGggPD0gZW5kO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc3RhcnRzV2l0aCA9IChzdHIsIHByZWZpeCkgPT4ge1xuICAgICAgcmV0dXJuIGNoZWNrUmFuZ2Uoc3RyLCBwcmVmaXgsIDApO1xuICAgIH07XG4gICAgY29uc3QgZW5kc1dpdGggPSAoc3RyLCBzdWZmaXgpID0+IHtcbiAgICAgIHJldHVybiBjaGVja1JhbmdlKHN0ciwgc3VmZml4LCBzdHIubGVuZ3RoIC0gc3VmZml4Lmxlbmd0aCk7XG4gICAgfTtcbiAgICBjb25zdCBibGFuayA9IHIgPT4gcyA9PiBzLnJlcGxhY2UociwgJycpO1xuICAgIGNvbnN0IHRyaW0kMyA9IGJsYW5rKC9eXFxzK3xcXHMrJC9nKTtcbiAgICBjb25zdCBsVHJpbSA9IGJsYW5rKC9eXFxzKy9nKTtcbiAgICBjb25zdCByVHJpbSA9IGJsYW5rKC9cXHMrJC9nKTtcbiAgICBjb25zdCBpc05vdEVtcHR5ID0gcyA9PiBzLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgaXNFbXB0eSQzID0gcyA9PiAhaXNOb3RFbXB0eShzKTtcbiAgICBjb25zdCByZXBlYXQgPSAocywgY291bnQpID0+IGNvdW50IDw9IDAgPyAnJyA6IG5ldyBBcnJheShjb3VudCArIDEpLmpvaW4ocyk7XG4gICAgY29uc3QgdG9JbnQgPSAodmFsdWUsIHJhZGl4ID0gMTApID0+IHtcbiAgICAgIGNvbnN0IG51bSA9IHBhcnNlSW50KHZhbHVlLCByYWRpeCk7XG4gICAgICByZXR1cm4gaXNOYU4obnVtKSA/IE9wdGlvbmFsLm5vbmUoKSA6IE9wdGlvbmFsLnNvbWUobnVtKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgbm9ybWFsVmVyc2lvblJlZ2V4ID0gLy4qP3ZlcnNpb25cXC9cXCA/KFswLTldKylcXC4oWzAtOV0rKS4qLztcbiAgICBjb25zdCBjaGVja0NvbnRhaW5zID0gdGFyZ2V0ID0+IHtcbiAgICAgIHJldHVybiB1YXN0cmluZyA9PiB7XG4gICAgICAgIHJldHVybiBjb250YWlucyQxKHVhc3RyaW5nLCB0YXJnZXQpO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGJyb3dzZXJzID0gW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnRWRnZScsXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbLy4qP2VkZ2VcXC8gPyhbMC05XSspXFwuKFswLTldKykkL10sXG4gICAgICAgIHNlYXJjaDogdWFzdHJpbmcgPT4ge1xuICAgICAgICAgIHJldHVybiBjb250YWlucyQxKHVhc3RyaW5nLCAnZWRnZS8nKSAmJiBjb250YWlucyQxKHVhc3RyaW5nLCAnY2hyb21lJykgJiYgY29udGFpbnMkMSh1YXN0cmluZywgJ3NhZmFyaScpICYmIGNvbnRhaW5zJDEodWFzdHJpbmcsICdhcHBsZXdlYmtpdCcpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnQ2hyb21pdW0nLFxuICAgICAgICBicmFuZDogJ0Nocm9taXVtJyxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFtcbiAgICAgICAgICAvLio/Y2hyb21lXFwvKFswLTldKylcXC4oWzAtOV0rKS4qLyxcbiAgICAgICAgICBub3JtYWxWZXJzaW9uUmVnZXhcbiAgICAgICAgXSxcbiAgICAgICAgc2VhcmNoOiB1YXN0cmluZyA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRhaW5zJDEodWFzdHJpbmcsICdjaHJvbWUnKSAmJiAhY29udGFpbnMkMSh1YXN0cmluZywgJ2Nocm9tZWZyYW1lJyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdJRScsXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbXG4gICAgICAgICAgLy4qP21zaWVcXCA/KFswLTldKylcXC4oWzAtOV0rKS4qLyxcbiAgICAgICAgICAvLio/cnY6KFswLTldKylcXC4oWzAtOV0rKS4qL1xuICAgICAgICBdLFxuICAgICAgICBzZWFyY2g6IHVhc3RyaW5nID0+IHtcbiAgICAgICAgICByZXR1cm4gY29udGFpbnMkMSh1YXN0cmluZywgJ21zaWUnKSB8fCBjb250YWlucyQxKHVhc3RyaW5nLCAndHJpZGVudCcpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnT3BlcmEnLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogW1xuICAgICAgICAgIG5vcm1hbFZlcnNpb25SZWdleCxcbiAgICAgICAgICAvLio/b3BlcmFcXC8oWzAtOV0rKVxcLihbMC05XSspLiovXG4gICAgICAgIF0sXG4gICAgICAgIHNlYXJjaDogY2hlY2tDb250YWlucygnb3BlcmEnKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0ZpcmVmb3gnLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogWy8uKj9maXJlZm94XFwvXFwgPyhbMC05XSspXFwuKFswLTldKykuKi9dLFxuICAgICAgICBzZWFyY2g6IGNoZWNrQ29udGFpbnMoJ2ZpcmVmb3gnKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1NhZmFyaScsXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbXG4gICAgICAgICAgbm9ybWFsVmVyc2lvblJlZ2V4LFxuICAgICAgICAgIC8uKj9jcHUgb3MgKFswLTldKylfKFswLTldKykuKi9cbiAgICAgICAgXSxcbiAgICAgICAgc2VhcmNoOiB1YXN0cmluZyA9PiB7XG4gICAgICAgICAgcmV0dXJuIChjb250YWlucyQxKHVhc3RyaW5nLCAnc2FmYXJpJykgfHwgY29udGFpbnMkMSh1YXN0cmluZywgJ21vYmlsZS8nKSkgJiYgY29udGFpbnMkMSh1YXN0cmluZywgJ2FwcGxld2Via2l0Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdO1xuICAgIGNvbnN0IG9zZXMgPSBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdXaW5kb3dzJyxcbiAgICAgICAgc2VhcmNoOiBjaGVja0NvbnRhaW5zKCd3aW4nKSxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFsvLio/d2luZG93c1xcIG50XFwgPyhbMC05XSspXFwuKFswLTldKykuKi9dXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnaU9TJyxcbiAgICAgICAgc2VhcmNoOiB1YXN0cmluZyA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRhaW5zJDEodWFzdHJpbmcsICdpcGhvbmUnKSB8fCBjb250YWlucyQxKHVhc3RyaW5nLCAnaXBhZCcpO1xuICAgICAgICB9LFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogW1xuICAgICAgICAgIC8uKj92ZXJzaW9uXFwvXFwgPyhbMC05XSspXFwuKFswLTldKykuKi8sXG4gICAgICAgICAgLy4qY3B1IG9zIChbMC05XSspXyhbMC05XSspLiovLFxuICAgICAgICAgIC8uKmNwdSBpcGhvbmUgb3MgKFswLTldKylfKFswLTldKykuKi9cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0FuZHJvaWQnLFxuICAgICAgICBzZWFyY2g6IGNoZWNrQ29udGFpbnMoJ2FuZHJvaWQnKSxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFsvLio/YW5kcm9pZFxcID8oWzAtOV0rKVxcLihbMC05XSspLiovXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ21hY09TJyxcbiAgICAgICAgc2VhcmNoOiBjaGVja0NvbnRhaW5zKCdtYWMgb3MgeCcpLFxuICAgICAgICB2ZXJzaW9uUmVnZXhlczogWy8uKj9tYWNcXCBvc1xcIHhcXCA/KFswLTldKylfKFswLTldKykuKi9dXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnTGludXgnLFxuICAgICAgICBzZWFyY2g6IGNoZWNrQ29udGFpbnMoJ2xpbnV4JyksXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1NvbGFyaXMnLFxuICAgICAgICBzZWFyY2g6IGNoZWNrQ29udGFpbnMoJ3N1bm9zJyksXG4gICAgICAgIHZlcnNpb25SZWdleGVzOiBbXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0ZyZWVCU0QnLFxuICAgICAgICBzZWFyY2g6IGNoZWNrQ29udGFpbnMoJ2ZyZWVic2QnKSxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFtdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnQ2hyb21lT1MnLFxuICAgICAgICBzZWFyY2g6IGNoZWNrQ29udGFpbnMoJ2Nyb3MnKSxcbiAgICAgICAgdmVyc2lvblJlZ2V4ZXM6IFsvLio/Y2hyb21lXFwvKFswLTldKylcXC4oWzAtOV0rKS4qL11cbiAgICAgIH1cbiAgICBdO1xuICAgIGNvbnN0IFBsYXRmb3JtSW5mbyA9IHtcbiAgICAgIGJyb3dzZXJzOiBjb25zdGFudChicm93c2VycyksXG4gICAgICBvc2VzOiBjb25zdGFudChvc2VzKVxuICAgIH07XG5cbiAgICBjb25zdCBlZGdlID0gJ0VkZ2UnO1xuICAgIGNvbnN0IGNocm9taXVtID0gJ0Nocm9taXVtJztcbiAgICBjb25zdCBpZSA9ICdJRSc7XG4gICAgY29uc3Qgb3BlcmEgPSAnT3BlcmEnO1xuICAgIGNvbnN0IGZpcmVmb3ggPSAnRmlyZWZveCc7XG4gICAgY29uc3Qgc2FmYXJpID0gJ1NhZmFyaSc7XG4gICAgY29uc3QgdW5rbm93biQxID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIG51JDIoe1xuICAgICAgICBjdXJyZW50OiB1bmRlZmluZWQsXG4gICAgICAgIHZlcnNpb246IFZlcnNpb24udW5rbm93bigpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG51JDIgPSBpbmZvID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBpbmZvLmN1cnJlbnQ7XG4gICAgICBjb25zdCB2ZXJzaW9uID0gaW5mby52ZXJzaW9uO1xuICAgICAgY29uc3QgaXNCcm93c2VyID0gbmFtZSA9PiAoKSA9PiBjdXJyZW50ID09PSBuYW1lO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgaXNFZGdlOiBpc0Jyb3dzZXIoZWRnZSksXG4gICAgICAgIGlzQ2hyb21pdW06IGlzQnJvd3NlcihjaHJvbWl1bSksXG4gICAgICAgIGlzSUU6IGlzQnJvd3NlcihpZSksXG4gICAgICAgIGlzT3BlcmE6IGlzQnJvd3NlcihvcGVyYSksXG4gICAgICAgIGlzRmlyZWZveDogaXNCcm93c2VyKGZpcmVmb3gpLFxuICAgICAgICBpc1NhZmFyaTogaXNCcm93c2VyKHNhZmFyaSlcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBCcm93c2VyID0ge1xuICAgICAgdW5rbm93bjogdW5rbm93biQxLFxuICAgICAgbnU6IG51JDIsXG4gICAgICBlZGdlOiBjb25zdGFudChlZGdlKSxcbiAgICAgIGNocm9taXVtOiBjb25zdGFudChjaHJvbWl1bSksXG4gICAgICBpZTogY29uc3RhbnQoaWUpLFxuICAgICAgb3BlcmE6IGNvbnN0YW50KG9wZXJhKSxcbiAgICAgIGZpcmVmb3g6IGNvbnN0YW50KGZpcmVmb3gpLFxuICAgICAgc2FmYXJpOiBjb25zdGFudChzYWZhcmkpXG4gICAgfTtcblxuICAgIGNvbnN0IHdpbmRvd3MgPSAnV2luZG93cyc7XG4gICAgY29uc3QgaW9zID0gJ2lPUyc7XG4gICAgY29uc3QgYW5kcm9pZCA9ICdBbmRyb2lkJztcbiAgICBjb25zdCBsaW51eCA9ICdMaW51eCc7XG4gICAgY29uc3QgbWFjb3MgPSAnbWFjT1MnO1xuICAgIGNvbnN0IHNvbGFyaXMgPSAnU29sYXJpcyc7XG4gICAgY29uc3QgZnJlZWJzZCA9ICdGcmVlQlNEJztcbiAgICBjb25zdCBjaHJvbWVvcyA9ICdDaHJvbWVPUyc7XG4gICAgY29uc3QgdW5rbm93biA9ICgpID0+IHtcbiAgICAgIHJldHVybiBudSQxKHtcbiAgICAgICAgY3VycmVudDogdW5kZWZpbmVkLFxuICAgICAgICB2ZXJzaW9uOiBWZXJzaW9uLnVua25vd24oKVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBudSQxID0gaW5mbyA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gaW5mby5jdXJyZW50O1xuICAgICAgY29uc3QgdmVyc2lvbiA9IGluZm8udmVyc2lvbjtcbiAgICAgIGNvbnN0IGlzT1MgPSBuYW1lID0+ICgpID0+IGN1cnJlbnQgPT09IG5hbWU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50LFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICBpc1dpbmRvd3M6IGlzT1Mod2luZG93cyksXG4gICAgICAgIGlzaU9TOiBpc09TKGlvcyksXG4gICAgICAgIGlzQW5kcm9pZDogaXNPUyhhbmRyb2lkKSxcbiAgICAgICAgaXNNYWNPUzogaXNPUyhtYWNvcyksXG4gICAgICAgIGlzTGludXg6IGlzT1MobGludXgpLFxuICAgICAgICBpc1NvbGFyaXM6IGlzT1Moc29sYXJpcyksXG4gICAgICAgIGlzRnJlZUJTRDogaXNPUyhmcmVlYnNkKSxcbiAgICAgICAgaXNDaHJvbWVPUzogaXNPUyhjaHJvbWVvcylcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBPcGVyYXRpbmdTeXN0ZW0gPSB7XG4gICAgICB1bmtub3duLFxuICAgICAgbnU6IG51JDEsXG4gICAgICB3aW5kb3dzOiBjb25zdGFudCh3aW5kb3dzKSxcbiAgICAgIGlvczogY29uc3RhbnQoaW9zKSxcbiAgICAgIGFuZHJvaWQ6IGNvbnN0YW50KGFuZHJvaWQpLFxuICAgICAgbGludXg6IGNvbnN0YW50KGxpbnV4KSxcbiAgICAgIG1hY29zOiBjb25zdGFudChtYWNvcyksXG4gICAgICBzb2xhcmlzOiBjb25zdGFudChzb2xhcmlzKSxcbiAgICAgIGZyZWVic2Q6IGNvbnN0YW50KGZyZWVic2QpLFxuICAgICAgY2hyb21lb3M6IGNvbnN0YW50KGNocm9tZW9zKVxuICAgIH07XG5cbiAgICBjb25zdCBkZXRlY3QkMyA9ICh1c2VyQWdlbnQsIHVzZXJBZ2VudERhdGFPcHQsIG1lZGlhTWF0Y2gpID0+IHtcbiAgICAgIGNvbnN0IGJyb3dzZXJzID0gUGxhdGZvcm1JbmZvLmJyb3dzZXJzKCk7XG4gICAgICBjb25zdCBvc2VzID0gUGxhdGZvcm1JbmZvLm9zZXMoKTtcbiAgICAgIGNvbnN0IGJyb3dzZXIgPSB1c2VyQWdlbnREYXRhT3B0LmJpbmQodXNlckFnZW50RGF0YSA9PiBkZXRlY3RCcm93c2VyJDEoYnJvd3NlcnMsIHVzZXJBZ2VudERhdGEpKS5vclRodW5rKCgpID0+IGRldGVjdEJyb3dzZXIoYnJvd3NlcnMsIHVzZXJBZ2VudCkpLmZvbGQoQnJvd3Nlci51bmtub3duLCBCcm93c2VyLm51KTtcbiAgICAgIGNvbnN0IG9zID0gZGV0ZWN0T3Mob3NlcywgdXNlckFnZW50KS5mb2xkKE9wZXJhdGluZ1N5c3RlbS51bmtub3duLCBPcGVyYXRpbmdTeXN0ZW0ubnUpO1xuICAgICAgY29uc3QgZGV2aWNlVHlwZSA9IERldmljZVR5cGUob3MsIGJyb3dzZXIsIHVzZXJBZ2VudCwgbWVkaWFNYXRjaCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBicm93c2VyLFxuICAgICAgICBvcyxcbiAgICAgICAgZGV2aWNlVHlwZVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IFBsYXRmb3JtRGV0ZWN0aW9uID0geyBkZXRlY3Q6IGRldGVjdCQzIH07XG5cbiAgICBjb25zdCBtZWRpYU1hdGNoID0gcXVlcnkgPT4gd2luZG93Lm1hdGNoTWVkaWEocXVlcnkpLm1hdGNoZXM7XG4gICAgbGV0IHBsYXRmb3JtJDQgPSBjYWNoZWQoKCkgPT4gUGxhdGZvcm1EZXRlY3Rpb24uZGV0ZWN0KG5hdmlnYXRvci51c2VyQWdlbnQsIE9wdGlvbmFsLmZyb20obmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpLCBtZWRpYU1hdGNoKSk7XG4gICAgY29uc3QgZGV0ZWN0JDIgPSAoKSA9PiBwbGF0Zm9ybSQ0KCk7XG5cbiAgICBjb25zdCB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIGNvbnN0IHBsYXRmb3JtJDMgPSBkZXRlY3QkMigpO1xuICAgIGNvbnN0IGJyb3dzZXIkMyA9IHBsYXRmb3JtJDMuYnJvd3NlcjtcbiAgICBjb25zdCBvcyQxID0gcGxhdGZvcm0kMy5vcztcbiAgICBjb25zdCBkZXZpY2VUeXBlID0gcGxhdGZvcm0kMy5kZXZpY2VUeXBlO1xuICAgIGNvbnN0IHdpbmRvd3NQaG9uZSA9IHVzZXJBZ2VudC5pbmRleE9mKCdXaW5kb3dzIFBob25lJykgIT09IC0xO1xuICAgIGNvbnN0IEVudiA9IHtcbiAgICAgIHRyYW5zcGFyZW50U3JjOiAnZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBQUFBQVAvLy95SDVCQUVBQUFBQUxBQUFBQUFCQUFFQUFBSUJSQUE3JyxcbiAgICAgIGRvY3VtZW50TW9kZTogYnJvd3NlciQzLmlzSUUoKSA/IGRvY3VtZW50LmRvY3VtZW50TW9kZSB8fCA3IDogMTAsXG4gICAgICBjYWNoZVN1ZmZpeDogbnVsbCxcbiAgICAgIGNvbnRhaW5lcjogbnVsbCxcbiAgICAgIGNhbkhhdmVDU1A6ICFicm93c2VyJDMuaXNJRSgpLFxuICAgICAgd2luZG93c1Bob25lLFxuICAgICAgYnJvd3Nlcjoge1xuICAgICAgICBjdXJyZW50OiBicm93c2VyJDMuY3VycmVudCxcbiAgICAgICAgdmVyc2lvbjogYnJvd3NlciQzLnZlcnNpb24sXG4gICAgICAgIGlzQ2hyb21pdW06IGJyb3dzZXIkMy5pc0Nocm9taXVtLFxuICAgICAgICBpc0VkZ2U6IGJyb3dzZXIkMy5pc0VkZ2UsXG4gICAgICAgIGlzRmlyZWZveDogYnJvd3NlciQzLmlzRmlyZWZveCxcbiAgICAgICAgaXNJRTogYnJvd3NlciQzLmlzSUUsXG4gICAgICAgIGlzT3BlcmE6IGJyb3dzZXIkMy5pc09wZXJhLFxuICAgICAgICBpc1NhZmFyaTogYnJvd3NlciQzLmlzU2FmYXJpXG4gICAgICB9LFxuICAgICAgb3M6IHtcbiAgICAgICAgY3VycmVudDogb3MkMS5jdXJyZW50LFxuICAgICAgICB2ZXJzaW9uOiBvcyQxLnZlcnNpb24sXG4gICAgICAgIGlzQW5kcm9pZDogb3MkMS5pc0FuZHJvaWQsXG4gICAgICAgIGlzQ2hyb21lT1M6IG9zJDEuaXNDaHJvbWVPUyxcbiAgICAgICAgaXNGcmVlQlNEOiBvcyQxLmlzRnJlZUJTRCxcbiAgICAgICAgaXNpT1M6IG9zJDEuaXNpT1MsXG4gICAgICAgIGlzTGludXg6IG9zJDEuaXNMaW51eCxcbiAgICAgICAgaXNNYWNPUzogb3MkMS5pc01hY09TLFxuICAgICAgICBpc1NvbGFyaXM6IG9zJDEuaXNTb2xhcmlzLFxuICAgICAgICBpc1dpbmRvd3M6IG9zJDEuaXNXaW5kb3dzXG4gICAgICB9LFxuICAgICAgZGV2aWNlVHlwZToge1xuICAgICAgICBpc0Rlc2t0b3A6IGRldmljZVR5cGUuaXNEZXNrdG9wLFxuICAgICAgICBpc2lQYWQ6IGRldmljZVR5cGUuaXNpUGFkLFxuICAgICAgICBpc2lQaG9uZTogZGV2aWNlVHlwZS5pc2lQaG9uZSxcbiAgICAgICAgaXNQaG9uZTogZGV2aWNlVHlwZS5pc1Bob25lLFxuICAgICAgICBpc1RhYmxldDogZGV2aWNlVHlwZS5pc1RhYmxldCxcbiAgICAgICAgaXNUb3VjaDogZGV2aWNlVHlwZS5pc1RvdWNoLFxuICAgICAgICBpc1dlYlZpZXc6IGRldmljZVR5cGUuaXNXZWJWaWV3XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHdoaXRlU3BhY2VSZWdFeHAkMSA9IC9eXFxzKnxcXHMqJC9nO1xuICAgIGNvbnN0IHRyaW0kMiA9IHN0ciA9PiB7XG4gICAgICByZXR1cm4gaXNOdWxsYWJsZShzdHIpID8gJycgOiAoJycgKyBzdHIpLnJlcGxhY2Uod2hpdGVTcGFjZVJlZ0V4cCQxLCAnJyk7XG4gICAgfTtcbiAgICBjb25zdCBpcyQzID0gKG9iaiwgdHlwZSkgPT4ge1xuICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgIHJldHVybiBvYmogIT09IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlID09PSAnYXJyYXknICYmIGlzQXJyYXkob2JqKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSB0eXBlO1xuICAgIH07XG4gICAgY29uc3QgbWFrZU1hcCQ0ID0gKGl0ZW1zLCBkZWxpbSwgbWFwID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHJlc29sdmVkSXRlbXMgPSBpc1N0cmluZyhpdGVtcykgPyBpdGVtcy5zcGxpdChkZWxpbSB8fCAnLCcpIDogaXRlbXMgfHwgW107XG4gICAgICBsZXQgaSA9IHJlc29sdmVkSXRlbXMubGVuZ3RoO1xuICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICBtYXBbcmVzb2x2ZWRJdGVtc1tpXV0gPSB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXA7XG4gICAgfTtcbiAgICBjb25zdCBoYXNPd25Qcm9wZXJ0eSQxID0gaGFzJDI7XG4gICAgY29uc3QgZXh0ZW5kJDMgPSAob2JqLCAuLi5leHRzKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZXh0ID0gZXh0c1tpXTtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIGV4dCkge1xuICAgICAgICAgIGlmIChoYXMkMihleHQsIG5hbWUpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGV4dFtuYW1lXTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIG9ialtuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICAgIGNvbnN0IHdhbGskNCA9IGZ1bmN0aW9uIChvLCBmLCBuLCBzKSB7XG4gICAgICBzID0gcyB8fCB0aGlzO1xuICAgICAgaWYgKG8pIHtcbiAgICAgICAgaWYgKG4pIHtcbiAgICAgICAgICBvID0gb1tuXTtcbiAgICAgICAgfVxuICAgICAgICBlYWNoJGMobywgKG8sIGkpID0+IHtcbiAgICAgICAgICBpZiAoZi5jYWxsKHMsIG8sIGksIG4pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3YWxrJDQobywgZiwgbiwgcyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVzb2x2ZSQzID0gKG4sIG8gPSB3aW5kb3cpID0+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBuLnNwbGl0KCcuJyk7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHBhdGgubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIG8gPSBvW3BhdGhbaV1dO1xuICAgICAgICBpZiAoIW8pIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICBjb25zdCBleHBsb2RlJDMgPSAocywgZCkgPT4ge1xuICAgICAgaWYgKGlzQXJyYXkkMShzKSkge1xuICAgICAgICByZXR1cm4gcztcbiAgICAgIH0gZWxzZSBpZiAocyA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG1hcCQxKHMuc3BsaXQoZCB8fCAnLCcpLCB0cmltJDIpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgX2FkZENhY2hlU3VmZml4ID0gdXJsID0+IHtcbiAgICAgIGNvbnN0IGNhY2hlU3VmZml4ID0gRW52LmNhY2hlU3VmZml4O1xuICAgICAgaWYgKGNhY2hlU3VmZml4KSB7XG4gICAgICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgY2FjaGVTdWZmaXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH07XG4gICAgY29uc3QgVG9vbHMgPSB7XG4gICAgICB0cmltOiB0cmltJDIsXG4gICAgICBpc0FycmF5OiBpc0FycmF5LFxuICAgICAgaXM6IGlzJDMsXG4gICAgICB0b0FycmF5OiB0b0FycmF5JDEsXG4gICAgICBtYWtlTWFwOiBtYWtlTWFwJDQsXG4gICAgICBlYWNoOiBlYWNoJGMsXG4gICAgICBtYXA6IG1hcCQxLFxuICAgICAgZ3JlcDogZmlsdGVyJDMsXG4gICAgICBpbkFycmF5OiBpbmRleE9mLFxuICAgICAgaGFzT3duOiBoYXNPd25Qcm9wZXJ0eSQxLFxuICAgICAgZXh0ZW5kOiBleHRlbmQkMyxcbiAgICAgIHdhbGs6IHdhbGskNCxcbiAgICAgIHJlc29sdmU6IHJlc29sdmUkMyxcbiAgICAgIGV4cGxvZGU6IGV4cGxvZGUkMyxcbiAgICAgIF9hZGRDYWNoZVN1ZmZpeFxuICAgIH07XG5cbiAgICBjb25zdCBpcyQyID0gKGxocywgcmhzLCBjb21wYXJhdG9yID0gdHJpcGxlRXF1YWxzKSA9PiBsaHMuZXhpc3RzKGxlZnQgPT4gY29tcGFyYXRvcihsZWZ0LCByaHMpKTtcbiAgICBjb25zdCBlcXVhbHMgPSAobGhzLCByaHMsIGNvbXBhcmF0b3IgPSB0cmlwbGVFcXVhbHMpID0+IGxpZnQyKGxocywgcmhzLCBjb21wYXJhdG9yKS5nZXRPcihsaHMuaXNOb25lKCkgJiYgcmhzLmlzTm9uZSgpKTtcbiAgICBjb25zdCBjYXQgPSBhcnIgPT4ge1xuICAgICAgY29uc3QgciA9IFtdO1xuICAgICAgY29uc3QgcHVzaCA9IHggPT4ge1xuICAgICAgICByLnB1c2goeCk7XG4gICAgICB9O1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXJyW2ldLmVhY2gocHVzaCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuICAgIGNvbnN0IGxpZnQyID0gKG9hLCBvYiwgZikgPT4gb2EuaXNTb21lKCkgJiYgb2IuaXNTb21lKCkgPyBPcHRpb25hbC5zb21lKGYob2EuZ2V0T3JEaWUoKSwgb2IuZ2V0T3JEaWUoKSkpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgIGNvbnN0IGxpZnQzID0gKG9hLCBvYiwgb2MsIGYpID0+IG9hLmlzU29tZSgpICYmIG9iLmlzU29tZSgpICYmIG9jLmlzU29tZSgpID8gT3B0aW9uYWwuc29tZShmKG9hLmdldE9yRGllKCksIG9iLmdldE9yRGllKCksIG9jLmdldE9yRGllKCkpKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICBjb25zdCBzb21lSWYgPSAoYiwgYSkgPT4gYiA/IE9wdGlvbmFsLnNvbWUoYSkgOiBPcHRpb25hbC5ub25lKCk7XG5cbiAgICBjb25zdCBHbG9iYWwgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpczsnKSgpO1xuXG4gICAgY29uc3QgcGF0aCA9IChwYXJ0cywgc2NvcGUpID0+IHtcbiAgICAgIGxldCBvID0gc2NvcGUgIT09IHVuZGVmaW5lZCAmJiBzY29wZSAhPT0gbnVsbCA/IHNjb3BlIDogR2xvYmFsO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGggJiYgbyAhPT0gdW5kZWZpbmVkICYmIG8gIT09IG51bGw7ICsraSkge1xuICAgICAgICBvID0gb1twYXJ0c1tpXV07XG4gICAgICB9XG4gICAgICByZXR1cm4gbztcbiAgICB9O1xuICAgIGNvbnN0IHJlc29sdmUkMiA9IChwLCBzY29wZSkgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSBwLnNwbGl0KCcuJyk7XG4gICAgICByZXR1cm4gcGF0aChwYXJ0cywgc2NvcGUpO1xuICAgIH07XG5cbiAgICBjb25zdCB1bnNhZmUgPSAobmFtZSwgc2NvcGUpID0+IHtcbiAgICAgIHJldHVybiByZXNvbHZlJDIobmFtZSwgc2NvcGUpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0T3JEaWUgPSAobmFtZSwgc2NvcGUpID0+IHtcbiAgICAgIGNvbnN0IGFjdHVhbCA9IHVuc2FmZShuYW1lLCBzY29wZSk7XG4gICAgICBpZiAoYWN0dWFsID09PSB1bmRlZmluZWQgfHwgYWN0dWFsID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihuYW1lICsgJyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgYnJvd3NlcicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjdHVhbDtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0UHJvdG90eXBlT2YkMSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgICBjb25zdCBzYW5kSFRNTEVsZW1lbnQgPSBzY29wZSA9PiB7XG4gICAgICByZXR1cm4gZ2V0T3JEaWUoJ0hUTUxFbGVtZW50Jywgc2NvcGUpO1xuICAgIH07XG4gICAgY29uc3QgaXNQcm90b3R5cGVPZiA9IHggPT4ge1xuICAgICAgY29uc3Qgc2NvcGUgPSByZXNvbHZlJDIoJ293bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcnLCB4KTtcbiAgICAgIHJldHVybiBpc09iamVjdCh4KSAmJiAoc2FuZEhUTUxFbGVtZW50KHNjb3BlKS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZih4KSB8fCAvXkhUTUxcXHcqRWxlbWVudCQvLnRlc3QoZ2V0UHJvdG90eXBlT2YkMSh4KS5jb25zdHJ1Y3Rvci5uYW1lKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IENPTU1FTlQgPSA4O1xuICAgIGNvbnN0IERPQ1VNRU5UID0gOTtcbiAgICBjb25zdCBET0NVTUVOVF9GUkFHTUVOVCA9IDExO1xuICAgIGNvbnN0IEVMRU1FTlQgPSAxO1xuICAgIGNvbnN0IFRFWFQgPSAzO1xuXG4gICAgY29uc3QgbmFtZSA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgciA9IGVsZW1lbnQuZG9tLm5vZGVOYW1lO1xuICAgICAgcmV0dXJuIHIudG9Mb3dlckNhc2UoKTtcbiAgICB9O1xuICAgIGNvbnN0IHR5cGUkMSA9IGVsZW1lbnQgPT4gZWxlbWVudC5kb20ubm9kZVR5cGU7XG4gICAgY29uc3QgaXNUeXBlID0gdCA9PiBlbGVtZW50ID0+IHR5cGUkMShlbGVtZW50KSA9PT0gdDtcbiAgICBjb25zdCBpc0NvbW1lbnQkMSA9IGVsZW1lbnQgPT4gdHlwZSQxKGVsZW1lbnQpID09PSBDT01NRU5UIHx8IG5hbWUoZWxlbWVudCkgPT09ICcjY29tbWVudCc7XG4gICAgY29uc3QgaXNIVE1MRWxlbWVudCA9IGVsZW1lbnQgPT4gaXNFbGVtZW50JDcoZWxlbWVudCkgJiYgaXNQcm90b3R5cGVPZihlbGVtZW50LmRvbSk7XG4gICAgY29uc3QgaXNFbGVtZW50JDcgPSBpc1R5cGUoRUxFTUVOVCk7XG4gICAgY29uc3QgaXNUZXh0JGIgPSBpc1R5cGUoVEVYVCk7XG4gICAgY29uc3QgaXNEb2N1bWVudCQyID0gaXNUeXBlKERPQ1VNRU5UKTtcbiAgICBjb25zdCBpc0RvY3VtZW50RnJhZ21lbnQkMSA9IGlzVHlwZShET0NVTUVOVF9GUkFHTUVOVCk7XG4gICAgY29uc3QgaXNUYWcgPSB0YWcgPT4gZSA9PiBpc0VsZW1lbnQkNyhlKSAmJiBuYW1lKGUpID09PSB0YWc7XG5cbiAgICBjb25zdCByYXdTZXQgPSAoZG9tLCBrZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoaXNTdHJpbmcodmFsdWUpIHx8IGlzQm9vbGVhbih2YWx1ZSkgfHwgaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSArICcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgY2FsbCB0byBBdHRyaWJ1dGUuc2V0LiBLZXkgJywga2V5LCAnOjogVmFsdWUgJywgdmFsdWUsICc6OiBFbGVtZW50ICcsIGRvbSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQXR0cmlidXRlIHZhbHVlIHdhcyBub3Qgc2ltcGxlJyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXQkMyA9IChlbGVtZW50LCBrZXksIHZhbHVlKSA9PiB7XG4gICAgICByYXdTZXQoZWxlbWVudC5kb20sIGtleSwgdmFsdWUpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0QWxsJDEgPSAoZWxlbWVudCwgYXR0cnMpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgZWFjaCRkKGF0dHJzLCAodiwgaykgPT4ge1xuICAgICAgICByYXdTZXQoZG9tLCBrLCB2KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0JDkgPSAoZWxlbWVudCwga2V5KSA9PiB7XG4gICAgICBjb25zdCB2ID0gZWxlbWVudC5kb20uZ2V0QXR0cmlidXRlKGtleSk7XG4gICAgICByZXR1cm4gdiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHY7XG4gICAgfTtcbiAgICBjb25zdCBnZXRPcHQgPSAoZWxlbWVudCwga2V5KSA9PiBPcHRpb25hbC5mcm9tKGdldCQ5KGVsZW1lbnQsIGtleSkpO1xuICAgIGNvbnN0IGhhcyQxID0gKGVsZW1lbnQsIGtleSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICByZXR1cm4gZG9tICYmIGRvbS5oYXNBdHRyaWJ1dGUgPyBkb20uaGFzQXR0cmlidXRlKGtleSkgOiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSRhID0gKGVsZW1lbnQsIGtleSkgPT4ge1xuICAgICAgZWxlbWVudC5kb20ucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNOb25lID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBhdHRycyA9IGVsZW1lbnQuZG9tLmF0dHJpYnV0ZXM7XG4gICAgICByZXR1cm4gYXR0cnMgPT09IHVuZGVmaW5lZCB8fCBhdHRycyA9PT0gbnVsbCB8fCBhdHRycy5sZW5ndGggPT09IDA7XG4gICAgfTtcbiAgICBjb25zdCBjbG9uZSQ0ID0gZWxlbWVudCA9PiBmb2xkbChlbGVtZW50LmRvbS5hdHRyaWJ1dGVzLCAoYWNjLCBhdHRyKSA9PiB7XG4gICAgICBhY2NbYXR0ci5uYW1lXSA9IGF0dHIudmFsdWU7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICAgIGNvbnN0IHJlYWQkNCA9IChlbGVtZW50LCBhdHRyKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGdldCQ5KGVsZW1lbnQsIGF0dHIpO1xuICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnID8gW10gOiB2YWx1ZS5zcGxpdCgnICcpO1xuICAgIH07XG4gICAgY29uc3QgYWRkJDQgPSAoZWxlbWVudCwgYXR0ciwgaWQpID0+IHtcbiAgICAgIGNvbnN0IG9sZCA9IHJlYWQkNChlbGVtZW50LCBhdHRyKTtcbiAgICAgIGNvbnN0IG51ID0gb2xkLmNvbmNhdChbaWRdKTtcbiAgICAgIHNldCQzKGVsZW1lbnQsIGF0dHIsIG51LmpvaW4oJyAnKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSQ5ID0gKGVsZW1lbnQsIGF0dHIsIGlkKSA9PiB7XG4gICAgICBjb25zdCBudSA9IGZpbHRlciQ1KHJlYWQkNChlbGVtZW50LCBhdHRyKSwgdiA9PiB2ICE9PSBpZCk7XG4gICAgICBpZiAobnUubGVuZ3RoID4gMCkge1xuICAgICAgICBzZXQkMyhlbGVtZW50LCBhdHRyLCBudS5qb2luKCcgJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVtb3ZlJGEoZWxlbWVudCwgYXR0cik7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIGNvbnN0IHN1cHBvcnRzID0gZWxlbWVudCA9PiBlbGVtZW50LmRvbS5jbGFzc0xpc3QgIT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBnZXQkOCA9IGVsZW1lbnQgPT4gcmVhZCQ0KGVsZW1lbnQsICdjbGFzcycpO1xuICAgIGNvbnN0IGFkZCQzID0gKGVsZW1lbnQsIGNsYXp6KSA9PiBhZGQkNChlbGVtZW50LCAnY2xhc3MnLCBjbGF6eik7XG4gICAgY29uc3QgcmVtb3ZlJDggPSAoZWxlbWVudCwgY2xhenopID0+IHJlbW92ZSQ5KGVsZW1lbnQsICdjbGFzcycsIGNsYXp6KTtcbiAgICBjb25zdCB0b2dnbGUkMiA9IChlbGVtZW50LCBjbGF6eikgPT4ge1xuICAgICAgaWYgKGNvbnRhaW5zJDIoZ2V0JDgoZWxlbWVudCksIGNsYXp6KSkge1xuICAgICAgICByZXR1cm4gcmVtb3ZlJDgoZWxlbWVudCwgY2xhenopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFkZCQzKGVsZW1lbnQsIGNsYXp6KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgYWRkJDIgPSAoZWxlbWVudCwgY2xhenopID0+IHtcbiAgICAgIGlmIChzdXBwb3J0cyhlbGVtZW50KSkge1xuICAgICAgICBlbGVtZW50LmRvbS5jbGFzc0xpc3QuYWRkKGNsYXp6KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkZCQzKGVsZW1lbnQsIGNsYXp6KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNsZWFuQ2xhc3MgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHN1cHBvcnRzKGVsZW1lbnQpID8gZWxlbWVudC5kb20uY2xhc3NMaXN0IDogZ2V0JDgoZWxlbWVudCk7XG4gICAgICBpZiAoY2xhc3NMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZW1vdmUkYShlbGVtZW50LCAnY2xhc3MnKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSQ3ID0gKGVsZW1lbnQsIGNsYXp6KSA9PiB7XG4gICAgICBpZiAoc3VwcG9ydHMoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgY2xhc3NMaXN0ID0gZWxlbWVudC5kb20uY2xhc3NMaXN0O1xuICAgICAgICBjbGFzc0xpc3QucmVtb3ZlKGNsYXp6KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZSQ4KGVsZW1lbnQsIGNsYXp6KTtcbiAgICAgIH1cbiAgICAgIGNsZWFuQ2xhc3MoZWxlbWVudCk7XG4gICAgfTtcbiAgICBjb25zdCB0b2dnbGUkMSA9IChlbGVtZW50LCBjbGF6eikgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gc3VwcG9ydHMoZWxlbWVudCkgPyBlbGVtZW50LmRvbS5jbGFzc0xpc3QudG9nZ2xlKGNsYXp6KSA6IHRvZ2dsZSQyKGVsZW1lbnQsIGNsYXp6KTtcbiAgICAgIGNsZWFuQ2xhc3MoZWxlbWVudCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgY29uc3QgaGFzID0gKGVsZW1lbnQsIGNsYXp6KSA9PiBzdXBwb3J0cyhlbGVtZW50KSAmJiBlbGVtZW50LmRvbS5jbGFzc0xpc3QuY29udGFpbnMoY2xhenopO1xuXG4gICAgY29uc3QgZnJvbUh0bWwkMSA9IChodG1sLCBzY29wZSkgPT4ge1xuICAgICAgY29uc3QgZG9jID0gc2NvcGUgfHwgZG9jdW1lbnQ7XG4gICAgICBjb25zdCBkaXYgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBkaXYuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgIGlmICghZGl2Lmhhc0NoaWxkTm9kZXMoKSB8fCBkaXYuY2hpbGROb2Rlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnSFRNTCBkb2VzIG5vdCBoYXZlIGEgc2luZ2xlIHJvb3Qgbm9kZSc7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSwgaHRtbCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmcm9tRG9tJDIoZGl2LmNoaWxkTm9kZXNbMF0pO1xuICAgIH07XG4gICAgY29uc3QgZnJvbVRhZyA9ICh0YWcsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBzY29wZSB8fCBkb2N1bWVudDtcbiAgICAgIGNvbnN0IG5vZGUgPSBkb2MuY3JlYXRlRWxlbWVudCh0YWcpO1xuICAgICAgcmV0dXJuIGZyb21Eb20kMihub2RlKTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21UZXh0ID0gKHRleHQsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBzY29wZSB8fCBkb2N1bWVudDtcbiAgICAgIGNvbnN0IG5vZGUgPSBkb2MuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG4gICAgICByZXR1cm4gZnJvbURvbSQyKG5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgZnJvbURvbSQyID0gbm9kZSA9PiB7XG4gICAgICBpZiAobm9kZSA9PT0gbnVsbCB8fCBub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb2RlIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZG9tOiBub2RlIH07XG4gICAgfTtcbiAgICBjb25zdCBmcm9tUG9pbnQkMiA9IChkb2NFbG0sIHgsIHkpID0+IE9wdGlvbmFsLmZyb20oZG9jRWxtLmRvbS5lbGVtZW50RnJvbVBvaW50KHgsIHkpKS5tYXAoZnJvbURvbSQyKTtcbiAgICBjb25zdCBTdWdhckVsZW1lbnQgPSB7XG4gICAgICBmcm9tSHRtbDogZnJvbUh0bWwkMSxcbiAgICAgIGZyb21UYWcsXG4gICAgICBmcm9tVGV4dCxcbiAgICAgIGZyb21Eb206IGZyb21Eb20kMixcbiAgICAgIGZyb21Qb2ludDogZnJvbVBvaW50JDJcbiAgICB9O1xuXG4gICAgY29uc3QgdG9BcnJheSA9ICh0YXJnZXQsIGYpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgIGNvbnN0IHJlY3Vyc2UgPSBlID0+IHtcbiAgICAgICAgci5wdXNoKGUpO1xuICAgICAgICByZXR1cm4gZihlKTtcbiAgICAgIH07XG4gICAgICBsZXQgY3VyID0gZih0YXJnZXQpO1xuICAgICAgZG8ge1xuICAgICAgICBjdXIgPSBjdXIuYmluZChyZWN1cnNlKTtcbiAgICAgIH0gd2hpbGUgKGN1ci5pc1NvbWUoKSk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuXG4gICAgY29uc3QgaXMkMSA9IChlbGVtZW50LCBzZWxlY3RvcikgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBpZiAoZG9tLm5vZGVUeXBlICE9PSBFTEVNRU5UKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVsZW0gPSBkb207XG4gICAgICAgIGlmIChlbGVtLm1hdGNoZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBlbGVtLm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW0ubXNNYXRjaGVzU2VsZWN0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBlbGVtLm1zTWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZW0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtLm1vek1hdGNoZXNTZWxlY3RvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZW0ubW96TWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jyb3dzZXIgbGFja3MgbmF0aXZlIHNlbGVjdG9ycycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBieXBhc3NTZWxlY3RvciA9IGRvbSA9PiBkb20ubm9kZVR5cGUgIT09IEVMRU1FTlQgJiYgZG9tLm5vZGVUeXBlICE9PSBET0NVTUVOVCAmJiBkb20ubm9kZVR5cGUgIT09IERPQ1VNRU5UX0ZSQUdNRU5UIHx8IGRvbS5jaGlsZEVsZW1lbnRDb3VudCA9PT0gMDtcbiAgICBjb25zdCBhbGwgPSAoc2VsZWN0b3IsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBiYXNlID0gc2NvcGUgPT09IHVuZGVmaW5lZCA/IGRvY3VtZW50IDogc2NvcGUuZG9tO1xuICAgICAgcmV0dXJuIGJ5cGFzc1NlbGVjdG9yKGJhc2UpID8gW10gOiBtYXAkMyhiYXNlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpLCBTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgfTtcbiAgICBjb25zdCBvbmUgPSAoc2VsZWN0b3IsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCBiYXNlID0gc2NvcGUgPT09IHVuZGVmaW5lZCA/IGRvY3VtZW50IDogc2NvcGUuZG9tO1xuICAgICAgcmV0dXJuIGJ5cGFzc1NlbGVjdG9yKGJhc2UpID8gT3B0aW9uYWwubm9uZSgpIDogT3B0aW9uYWwuZnJvbShiYXNlLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpKS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIH07XG5cbiAgICBjb25zdCBlcSA9IChlMSwgZTIpID0+IGUxLmRvbSA9PT0gZTIuZG9tO1xuICAgIGNvbnN0IGNvbnRhaW5zID0gKGUxLCBlMikgPT4ge1xuICAgICAgY29uc3QgZDEgPSBlMS5kb207XG4gICAgICBjb25zdCBkMiA9IGUyLmRvbTtcbiAgICAgIHJldHVybiBkMSA9PT0gZDIgPyBmYWxzZSA6IGQxLmNvbnRhaW5zKGQyKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb3duZXIkMSA9IGVsZW1lbnQgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20oZWxlbWVudC5kb20ub3duZXJEb2N1bWVudCk7XG4gICAgY29uc3QgZG9jdW1lbnRPck93bmVyID0gZG9zID0+IGlzRG9jdW1lbnQkMihkb3MpID8gZG9zIDogb3duZXIkMShkb3MpO1xuICAgIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGVsZW1lbnQgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20oZG9jdW1lbnRPck93bmVyKGVsZW1lbnQpLmRvbS5kb2N1bWVudEVsZW1lbnQpO1xuICAgIGNvbnN0IGRlZmF1bHRWaWV3ID0gZWxlbWVudCA9PiBTdWdhckVsZW1lbnQuZnJvbURvbShkb2N1bWVudE9yT3duZXIoZWxlbWVudCkuZG9tLmRlZmF1bHRWaWV3KTtcbiAgICBjb25zdCBwYXJlbnQgPSBlbGVtZW50ID0+IE9wdGlvbmFsLmZyb20oZWxlbWVudC5kb20ucGFyZW50Tm9kZSkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gZWxlbWVudCA9PiBPcHRpb25hbC5mcm9tKGVsZW1lbnQuZG9tLnBhcmVudEVsZW1lbnQpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgY29uc3QgcGFyZW50cyQxID0gKGVsZW1lbnQsIGlzUm9vdCkgPT4ge1xuICAgICAgY29uc3Qgc3RvcCA9IGlzRnVuY3Rpb24oaXNSb290KSA/IGlzUm9vdCA6IG5ldmVyO1xuICAgICAgbGV0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgY29uc3QgcmV0ID0gW107XG4gICAgICB3aGlsZSAoZG9tLnBhcmVudE5vZGUgIT09IG51bGwgJiYgZG9tLnBhcmVudE5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCByYXdQYXJlbnQgPSBkb20ucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgcCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJhd1BhcmVudCk7XG4gICAgICAgIHJldC5wdXNoKHApO1xuICAgICAgICBpZiAoc3RvcChwKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbSA9IHJhd1BhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9O1xuICAgIGNvbnN0IHNpYmxpbmdzID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJTZWxmID0gZWxlbWVudHMgPT4gZmlsdGVyJDUoZWxlbWVudHMsIHggPT4gIWVxKGVsZW1lbnQsIHgpKTtcbiAgICAgIHJldHVybiBwYXJlbnQoZWxlbWVudCkubWFwKGNoaWxkcmVuJDEpLm1hcChmaWx0ZXJTZWxmKS5nZXRPcihbXSk7XG4gICAgfTtcbiAgICBjb25zdCBwcmV2U2libGluZyA9IGVsZW1lbnQgPT4gT3B0aW9uYWwuZnJvbShlbGVtZW50LmRvbS5wcmV2aW91c1NpYmxpbmcpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgY29uc3QgbmV4dFNpYmxpbmcgPSBlbGVtZW50ID0+IE9wdGlvbmFsLmZyb20oZWxlbWVudC5kb20ubmV4dFNpYmxpbmcpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgY29uc3QgcHJldlNpYmxpbmdzID0gZWxlbWVudCA9PiByZXZlcnNlKHRvQXJyYXkoZWxlbWVudCwgcHJldlNpYmxpbmcpKTtcbiAgICBjb25zdCBuZXh0U2libGluZ3MgPSBlbGVtZW50ID0+IHRvQXJyYXkoZWxlbWVudCwgbmV4dFNpYmxpbmcpO1xuICAgIGNvbnN0IGNoaWxkcmVuJDEgPSBlbGVtZW50ID0+IG1hcCQzKGVsZW1lbnQuZG9tLmNoaWxkTm9kZXMsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBjaGlsZCQxID0gKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBjcyA9IGVsZW1lbnQuZG9tLmNoaWxkTm9kZXM7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShjc1tpbmRleF0pLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJzdENoaWxkID0gZWxlbWVudCA9PiBjaGlsZCQxKGVsZW1lbnQsIDApO1xuICAgIGNvbnN0IGxhc3RDaGlsZCA9IGVsZW1lbnQgPT4gY2hpbGQkMShlbGVtZW50LCBlbGVtZW50LmRvbS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEpO1xuICAgIGNvbnN0IGNoaWxkTm9kZXNDb3VudCA9IGVsZW1lbnQgPT4gZWxlbWVudC5kb20uY2hpbGROb2Rlcy5sZW5ndGg7XG4gICAgY29uc3QgaGFzQ2hpbGROb2RlcyA9IGVsZW1lbnQgPT4gZWxlbWVudC5kb20uaGFzQ2hpbGROb2RlcygpO1xuXG4gICAgY29uc3QgZ2V0SGVhZCA9IGRvYyA9PiB7XG4gICAgICBjb25zdCBiID0gZG9jLmRvbS5oZWFkO1xuICAgICAgaWYgKGIgPT09IG51bGwgfHwgYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSGVhZCBpcyBub3QgYXZhaWxhYmxlIHlldCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFN1Z2FyRWxlbWVudC5mcm9tRG9tKGIpO1xuICAgIH07XG5cbiAgICBjb25zdCBpc1NoYWRvd1Jvb3QgPSBkb3MgPT4gaXNEb2N1bWVudEZyYWdtZW50JDEoZG9zKSAmJiBpc05vbk51bGxhYmxlKGRvcy5kb20uaG9zdCk7XG4gICAgY29uc3Qgc3VwcG9ydGVkID0gaXNGdW5jdGlvbihFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hTaGFkb3cpICYmIGlzRnVuY3Rpb24oTm9kZS5wcm90b3R5cGUuZ2V0Um9vdE5vZGUpO1xuICAgIGNvbnN0IGlzU3VwcG9ydGVkJDEgPSBjb25zdGFudChzdXBwb3J0ZWQpO1xuICAgIGNvbnN0IGdldFJvb3ROb2RlID0gc3VwcG9ydGVkID8gZSA9PiBTdWdhckVsZW1lbnQuZnJvbURvbShlLmRvbS5nZXRSb290Tm9kZSgpKSA6IGRvY3VtZW50T3JPd25lcjtcbiAgICBjb25zdCBnZXRTdHlsZUNvbnRhaW5lciA9IGRvcyA9PiBpc1NoYWRvd1Jvb3QoZG9zKSA/IGRvcyA6IGdldEhlYWQoZG9jdW1lbnRPck93bmVyKGRvcykpO1xuICAgIGNvbnN0IGdldENvbnRlbnRDb250YWluZXIgPSBkb3MgPT4gaXNTaGFkb3dSb290KGRvcykgPyBkb3MgOiBTdWdhckVsZW1lbnQuZnJvbURvbShkb2N1bWVudE9yT3duZXIoZG9zKS5kb20uYm9keSk7XG4gICAgY29uc3QgZ2V0U2hhZG93Um9vdCA9IGUgPT4ge1xuICAgICAgY29uc3QgciA9IGdldFJvb3ROb2RlKGUpO1xuICAgICAgcmV0dXJuIGlzU2hhZG93Um9vdChyKSA/IE9wdGlvbmFsLnNvbWUocikgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRTaGFkb3dIb3N0ID0gZSA9PiBTdWdhckVsZW1lbnQuZnJvbURvbShlLmRvbS5ob3N0KTtcbiAgICBjb25zdCBnZXRPcmlnaW5hbEV2ZW50VGFyZ2V0ID0gZXZlbnQgPT4ge1xuICAgICAgaWYgKGlzU3VwcG9ydGVkJDEoKSAmJiBpc05vbk51bGxhYmxlKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgY29uc3QgZWwgPSBTdWdhckVsZW1lbnQuZnJvbURvbShldmVudC50YXJnZXQpO1xuICAgICAgICBpZiAoaXNFbGVtZW50JDcoZWwpICYmIGlzT3BlblNoYWRvd0hvc3QoZWwpKSB7XG4gICAgICAgICAgaWYgKGV2ZW50LmNvbXBvc2VkICYmIGV2ZW50LmNvbXBvc2VkUGF0aCkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9zZWRQYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG4gICAgICAgICAgICBpZiAoY29tcG9zZWRQYXRoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoZWFkKGNvbXBvc2VkUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShldmVudC50YXJnZXQpO1xuICAgIH07XG4gICAgY29uc3QgaXNPcGVuU2hhZG93SG9zdCA9IGVsZW1lbnQgPT4gaXNOb25OdWxsYWJsZShlbGVtZW50LmRvbS5zaGFkb3dSb290KTtcblxuICAgIGNvbnN0IGluQm9keSA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgZG9tID0gaXNUZXh0JGIoZWxlbWVudCkgPyBlbGVtZW50LmRvbS5wYXJlbnROb2RlIDogZWxlbWVudC5kb207XG4gICAgICBpZiAoZG9tID09PSB1bmRlZmluZWQgfHwgZG9tID09PSBudWxsIHx8IGRvbS5vd25lckRvY3VtZW50ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvYyA9IGRvbS5vd25lckRvY3VtZW50O1xuICAgICAgcmV0dXJuIGdldFNoYWRvd1Jvb3QoU3VnYXJFbGVtZW50LmZyb21Eb20oZG9tKSkuZm9sZCgoKSA9PiBkb2MuYm9keS5jb250YWlucyhkb20pLCBjb21wb3NlMShpbkJvZHksIGdldFNoYWRvd0hvc3QpKTtcbiAgICB9O1xuXG4gICAgdmFyIENsb3Nlc3RPckFuY2VzdG9yID0gKGlzLCBhbmNlc3Rvciwgc2NvcGUsIGEsIGlzUm9vdCkgPT4ge1xuICAgICAgaWYgKGlzKHNjb3BlLCBhKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShzY29wZSk7XG4gICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24oaXNSb290KSAmJiBpc1Jvb3Qoc2NvcGUpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYW5jZXN0b3Ioc2NvcGUsIGEsIGlzUm9vdCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGFuY2VzdG9yJDQgPSAoc2NvcGUsIHByZWRpY2F0ZSwgaXNSb290KSA9PiB7XG4gICAgICBsZXQgZWxlbWVudCA9IHNjb3BlLmRvbTtcbiAgICAgIGNvbnN0IHN0b3AgPSBpc0Z1bmN0aW9uKGlzUm9vdCkgPyBpc1Jvb3QgOiBuZXZlcjtcbiAgICAgIHdoaWxlIChlbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgZWwgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlbGVtZW50KTtcbiAgICAgICAgaWYgKHByZWRpY2F0ZShlbCkpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShlbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RvcChlbCkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGNsb3Nlc3QkNCA9IChzY29wZSwgcHJlZGljYXRlLCBpc1Jvb3QpID0+IHtcbiAgICAgIGNvbnN0IGlzID0gKHMsIHRlc3QpID0+IHRlc3Qocyk7XG4gICAgICByZXR1cm4gQ2xvc2VzdE9yQW5jZXN0b3IoaXMsIGFuY2VzdG9yJDQsIHNjb3BlLCBwcmVkaWNhdGUsIGlzUm9vdCk7XG4gICAgfTtcbiAgICBjb25zdCBzaWJsaW5nJDEgPSAoc2NvcGUsIHByZWRpY2F0ZSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHNjb3BlLmRvbTtcbiAgICAgIGlmICghZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2hpbGQoU3VnYXJFbGVtZW50LmZyb21Eb20oZWxlbWVudC5wYXJlbnROb2RlKSwgeCA9PiAhZXEoc2NvcGUsIHgpICYmIHByZWRpY2F0ZSh4KSk7XG4gICAgfTtcbiAgICBjb25zdCBjaGlsZCA9IChzY29wZSwgcHJlZGljYXRlKSA9PiB7XG4gICAgICBjb25zdCBwcmVkID0gbm9kZSA9PiBwcmVkaWNhdGUoU3VnYXJFbGVtZW50LmZyb21Eb20obm9kZSkpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmluZCQyKHNjb3BlLmRvbS5jaGlsZE5vZGVzLCBwcmVkKTtcbiAgICAgIHJldHVybiByZXN1bHQubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICB9O1xuICAgIGNvbnN0IGRlc2NlbmRhbnQkMSA9IChzY29wZSwgcHJlZGljYXRlKSA9PiB7XG4gICAgICBjb25zdCBkZXNjZW5kID0gbm9kZSA9PiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGQgPSBTdWdhckVsZW1lbnQuZnJvbURvbShub2RlLmNoaWxkTm9kZXNbaV0pO1xuICAgICAgICAgIGlmIChwcmVkaWNhdGUoY2hpbGQpKSB7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShjaGlsZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlcyA9IGRlc2NlbmQobm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgICAgICAgICBpZiAocmVzLmlzU29tZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBkZXNjZW5kKHNjb3BlLmRvbSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFuY2VzdG9yJDMgPSAoc2NvcGUsIHNlbGVjdG9yLCBpc1Jvb3QpID0+IGFuY2VzdG9yJDQoc2NvcGUsIGUgPT4gaXMkMShlLCBzZWxlY3RvciksIGlzUm9vdCk7XG4gICAgY29uc3QgZGVzY2VuZGFudCA9IChzY29wZSwgc2VsZWN0b3IpID0+IG9uZShzZWxlY3Rvciwgc2NvcGUpO1xuICAgIGNvbnN0IGNsb3Nlc3QkMyA9IChzY29wZSwgc2VsZWN0b3IsIGlzUm9vdCkgPT4ge1xuICAgICAgY29uc3QgaXMgPSAoZWxlbWVudCwgc2VsZWN0b3IpID0+IGlzJDEoZWxlbWVudCwgc2VsZWN0b3IpO1xuICAgICAgcmV0dXJuIENsb3Nlc3RPckFuY2VzdG9yKGlzLCBhbmNlc3RvciQzLCBzY29wZSwgc2VsZWN0b3IsIGlzUm9vdCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNsb3Nlc3QkMiA9IHRhcmdldCA9PiBjbG9zZXN0JDModGFyZ2V0LCAnW2NvbnRlbnRlZGl0YWJsZV0nKTtcbiAgICBjb25zdCBpc0VkaXRhYmxlJDMgPSAoZWxlbWVudCwgYXNzdW1lRWRpdGFibGUgPSBmYWxzZSkgPT4ge1xuICAgICAgaWYgKGluQm9keShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5kb20uaXNDb250ZW50RWRpdGFibGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY2xvc2VzdCQyKGVsZW1lbnQpLmZvbGQoY29uc3RhbnQoYXNzdW1lRWRpdGFibGUpLCBlZGl0YWJsZSA9PiBnZXRSYXckMShlZGl0YWJsZSkgPT09ICd0cnVlJyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRSYXckMSA9IGVsZW1lbnQgPT4gZWxlbWVudC5kb20uY29udGVudEVkaXRhYmxlO1xuXG4gICAgY29uc3QgaXNTdXBwb3J0ZWQgPSBkb20gPT4gZG9tLnN0eWxlICE9PSB1bmRlZmluZWQgJiYgaXNGdW5jdGlvbihkb20uc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSk7XG5cbiAgICBjb25zdCBpbnRlcm5hbFNldCA9IChkb20sIHByb3BlcnR5LCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBjYWxsIHRvIENTUy5zZXQuIFByb3BlcnR5ICcsIHByb3BlcnR5LCAnOjogVmFsdWUgJywgdmFsdWUsICc6OiBFbGVtZW50ICcsIGRvbSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ1NTIHZhbHVlIG11c3QgYmUgYSBzdHJpbmc6ICcgKyB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNTdXBwb3J0ZWQoZG9tKSkge1xuICAgICAgICBkb20uc3R5bGUuc2V0UHJvcGVydHkocHJvcGVydHksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGludGVybmFsUmVtb3ZlID0gKGRvbSwgcHJvcGVydHkpID0+IHtcbiAgICAgIGlmIChpc1N1cHBvcnRlZChkb20pKSB7XG4gICAgICAgIGRvbS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXQkMiA9IChlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVsZW1lbnQuZG9tO1xuICAgICAgaW50ZXJuYWxTZXQoZG9tLCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0QWxsID0gKGVsZW1lbnQsIGNzcykgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBlYWNoJGQoY3NzLCAodiwgaykgPT4ge1xuICAgICAgICBpbnRlcm5hbFNldChkb20sIGssIHYpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXQkNyA9IChlbGVtZW50LCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBjb25zdCBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb20pO1xuICAgICAgY29uc3QgciA9IHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KTtcbiAgICAgIHJldHVybiByID09PSAnJyAmJiAhaW5Cb2R5KGVsZW1lbnQpID8gZ2V0VW5zYWZlUHJvcGVydHkoZG9tLCBwcm9wZXJ0eSkgOiByO1xuICAgIH07XG4gICAgY29uc3QgZ2V0VW5zYWZlUHJvcGVydHkgPSAoZG9tLCBwcm9wZXJ0eSkgPT4gaXNTdXBwb3J0ZWQoZG9tKSA/IGRvbS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KSA6ICcnO1xuICAgIGNvbnN0IGdldFJhdyA9IChlbGVtZW50LCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBjb25zdCByYXcgPSBnZXRVbnNhZmVQcm9wZXJ0eShkb20sIHByb3BlcnR5KTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKHJhdykuZmlsdGVyKHIgPT4gci5sZW5ndGggPiAwKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEFsbFJhdyA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgY3NzID0ge307XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGlmIChpc1N1cHBvcnRlZChkb20pKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9tLnN0eWxlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgcnVsZU5hbWUgPSBkb20uc3R5bGUuaXRlbShpKTtcbiAgICAgICAgICBjc3NbcnVsZU5hbWVdID0gZG9tLnN0eWxlW3J1bGVOYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNzcztcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSQ2ID0gKGVsZW1lbnQsIHByb3BlcnR5KSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGludGVybmFsUmVtb3ZlKGRvbSwgcHJvcGVydHkpO1xuICAgICAgaWYgKGlzJDIoZ2V0T3B0KGVsZW1lbnQsICdzdHlsZScpLm1hcCh0cmltJDMpLCAnJykpIHtcbiAgICAgICAgcmVtb3ZlJGEoZWxlbWVudCwgJ3N0eWxlJyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZWZsb3cgPSBlID0+IGUuZG9tLm9mZnNldFdpZHRoO1xuXG4gICAgY29uc3QgYmVmb3JlJDMgPSAobWFya2VyLCBlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQkMSA9IHBhcmVudChtYXJrZXIpO1xuICAgICAgcGFyZW50JDEuZWFjaCh2ID0+IHtcbiAgICAgICAgdi5kb20uaW5zZXJ0QmVmb3JlKGVsZW1lbnQuZG9tLCBtYXJrZXIuZG9tKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYWZ0ZXIkNCA9IChtYXJrZXIsIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHNpYmxpbmcgPSBuZXh0U2libGluZyhtYXJrZXIpO1xuICAgICAgc2libGluZy5mb2xkKCgpID0+IHtcbiAgICAgICAgY29uc3QgcGFyZW50JDEgPSBwYXJlbnQobWFya2VyKTtcbiAgICAgICAgcGFyZW50JDEuZWFjaCh2ID0+IHtcbiAgICAgICAgICBhcHBlbmQkMSh2LCBlbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9LCB2ID0+IHtcbiAgICAgICAgYmVmb3JlJDModiwgZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHByZXBlbmQgPSAocGFyZW50LCBlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBmaXJzdENoaWxkJDEgPSBmaXJzdENoaWxkKHBhcmVudCk7XG4gICAgICBmaXJzdENoaWxkJDEuZm9sZCgoKSA9PiB7XG4gICAgICAgIGFwcGVuZCQxKHBhcmVudCwgZWxlbWVudCk7XG4gICAgICB9LCB2ID0+IHtcbiAgICAgICAgcGFyZW50LmRvbS5pbnNlcnRCZWZvcmUoZWxlbWVudC5kb20sIHYuZG9tKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYXBwZW5kJDEgPSAocGFyZW50LCBlbGVtZW50KSA9PiB7XG4gICAgICBwYXJlbnQuZG9tLmFwcGVuZENoaWxkKGVsZW1lbnQuZG9tKTtcbiAgICB9O1xuICAgIGNvbnN0IHdyYXAkMiA9IChlbGVtZW50LCB3cmFwcGVyKSA9PiB7XG4gICAgICBiZWZvcmUkMyhlbGVtZW50LCB3cmFwcGVyKTtcbiAgICAgIGFwcGVuZCQxKHdyYXBwZXIsIGVsZW1lbnQpO1xuICAgIH07XG5cbiAgICBjb25zdCBhZnRlciQzID0gKG1hcmtlciwgZWxlbWVudHMpID0+IHtcbiAgICAgIGVhY2gkZShlbGVtZW50cywgKHgsIGkpID0+IHtcbiAgICAgICAgY29uc3QgZSA9IGkgPT09IDAgPyBtYXJrZXIgOiBlbGVtZW50c1tpIC0gMV07XG4gICAgICAgIGFmdGVyJDQoZSwgeCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGVuZCA9IChwYXJlbnQsIGVsZW1lbnRzKSA9PiB7XG4gICAgICBlYWNoJGUoZWxlbWVudHMsIHggPT4ge1xuICAgICAgICBhcHBlbmQkMShwYXJlbnQsIHgpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGVtcHR5ID0gZWxlbWVudCA9PiB7XG4gICAgICBlbGVtZW50LmRvbS50ZXh0Q29udGVudCA9ICcnO1xuICAgICAgZWFjaCRlKGNoaWxkcmVuJDEoZWxlbWVudCksIHJvZ3VlID0+IHtcbiAgICAgICAgcmVtb3ZlJDUocm9ndWUpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmUkNSA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICBpZiAoZG9tLnBhcmVudE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgZG9tLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG9tKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHVud3JhcCA9IHdyYXBwZXIgPT4ge1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBjaGlsZHJlbiQxKHdyYXBwZXIpO1xuICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYWZ0ZXIkMyh3cmFwcGVyLCBjaGlsZHJlbik7XG4gICAgICB9XG4gICAgICByZW1vdmUkNSh3cmFwcGVyKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZnJvbUh0bWwgPSAoaHRtbCwgc2NvcGUpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IHNjb3BlIHx8IGRvY3VtZW50O1xuICAgICAgY29uc3QgZGl2ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZGl2LmlubmVySFRNTCA9IGh0bWw7XG4gICAgICByZXR1cm4gY2hpbGRyZW4kMShTdWdhckVsZW1lbnQuZnJvbURvbShkaXYpKTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21Eb20kMSA9IG5vZGVzID0+IG1hcCQzKG5vZGVzLCBTdWdhckVsZW1lbnQuZnJvbURvbSk7XG5cbiAgICBjb25zdCBnZXQkNiA9IGVsZW1lbnQgPT4gZWxlbWVudC5kb20uaW5uZXJIVE1MO1xuICAgIGNvbnN0IHNldCQxID0gKGVsZW1lbnQsIGNvbnRlbnQpID0+IHtcbiAgICAgIGNvbnN0IG93bmVyID0gb3duZXIkMShlbGVtZW50KTtcbiAgICAgIGNvbnN0IGRvY0RvbSA9IG93bmVyLmRvbTtcbiAgICAgIGNvbnN0IGZyYWdtZW50ID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZG9jRG9tLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG4gICAgICBjb25zdCBjb250ZW50RWxlbWVudHMgPSBmcm9tSHRtbChjb250ZW50LCBkb2NEb20pO1xuICAgICAgYXBwZW5kKGZyYWdtZW50LCBjb250ZW50RWxlbWVudHMpO1xuICAgICAgZW1wdHkoZWxlbWVudCk7XG4gICAgICBhcHBlbmQkMShlbGVtZW50LCBmcmFnbWVudCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRPdXRlciA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gU3VnYXJFbGVtZW50LmZyb21UYWcoJ2RpdicpO1xuICAgICAgY29uc3QgY2xvbmUgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlbGVtZW50LmRvbS5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgYXBwZW5kJDEoY29udGFpbmVyLCBjbG9uZSk7XG4gICAgICByZXR1cm4gZ2V0JDYoY29udGFpbmVyKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbWtFdmVudCA9ICh0YXJnZXQsIHgsIHksIHN0b3AsIHByZXZlbnQsIGtpbGwsIHJhdykgPT4gKHtcbiAgICAgIHRhcmdldCxcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgc3RvcCxcbiAgICAgIHByZXZlbnQsXG4gICAgICBraWxsLFxuICAgICAgcmF3XG4gICAgfSk7XG4gICAgY29uc3QgZnJvbVJhd0V2ZW50ID0gcmF3RXZlbnQgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZ2V0T3JpZ2luYWxFdmVudFRhcmdldChyYXdFdmVudCkuZ2V0T3IocmF3RXZlbnQudGFyZ2V0KSk7XG4gICAgICBjb25zdCBzdG9wID0gKCkgPT4gcmF3RXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBjb25zdCBwcmV2ZW50ID0gKCkgPT4gcmF3RXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IGtpbGwgPSBjb21wb3NlKHByZXZlbnQsIHN0b3ApO1xuICAgICAgcmV0dXJuIG1rRXZlbnQodGFyZ2V0LCByYXdFdmVudC5jbGllbnRYLCByYXdFdmVudC5jbGllbnRZLCBzdG9wLCBwcmV2ZW50LCBraWxsLCByYXdFdmVudCk7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGUkMSA9IChmaWx0ZXIsIGhhbmRsZXIpID0+IHJhd0V2ZW50ID0+IHtcbiAgICAgIGlmIChmaWx0ZXIocmF3RXZlbnQpKSB7XG4gICAgICAgIGhhbmRsZXIoZnJvbVJhd0V2ZW50KHJhd0V2ZW50KSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBiaW5kZXIgPSAoZWxlbWVudCwgZXZlbnQsIGZpbHRlciwgaGFuZGxlciwgdXNlQ2FwdHVyZSkgPT4ge1xuICAgICAgY29uc3Qgd3JhcHBlZCA9IGhhbmRsZSQxKGZpbHRlciwgaGFuZGxlcik7XG4gICAgICBlbGVtZW50LmRvbS5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCB3cmFwcGVkLCB1c2VDYXB0dXJlKTtcbiAgICAgIHJldHVybiB7IHVuYmluZDogY3VycnkodW5iaW5kLCBlbGVtZW50LCBldmVudCwgd3JhcHBlZCwgdXNlQ2FwdHVyZSkgfTtcbiAgICB9O1xuICAgIGNvbnN0IGJpbmQkMiA9IChlbGVtZW50LCBldmVudCwgZmlsdGVyLCBoYW5kbGVyKSA9PiBiaW5kZXIoZWxlbWVudCwgZXZlbnQsIGZpbHRlciwgaGFuZGxlciwgZmFsc2UpO1xuICAgIGNvbnN0IHVuYmluZCA9IChlbGVtZW50LCBldmVudCwgaGFuZGxlciwgdXNlQ2FwdHVyZSkgPT4ge1xuICAgICAgZWxlbWVudC5kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHIgPSAobGVmdCwgdG9wKSA9PiB7XG4gICAgICBjb25zdCB0cmFuc2xhdGUgPSAoeCwgeSkgPT4gcihsZWZ0ICsgeCwgdG9wICsgeSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0LFxuICAgICAgICB0b3AsXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IFN1Z2FyUG9zaXRpb24gPSByO1xuXG4gICAgY29uc3QgYm94UG9zaXRpb24gPSBkb20gPT4ge1xuICAgICAgY29uc3QgYm94ID0gZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgcmV0dXJuIFN1Z2FyUG9zaXRpb24oYm94LmxlZnQsIGJveC50b3ApO1xuICAgIH07XG4gICAgY29uc3QgZmlyc3REZWZpbmVkT3JaZXJvID0gKGEsIGIpID0+IHtcbiAgICAgIGlmIChhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYiAhPT0gdW5kZWZpbmVkID8gYiA6IDA7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhYnNvbHV0ZSA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgZG9jID0gZWxlbWVudC5kb20ub3duZXJEb2N1bWVudDtcbiAgICAgIGNvbnN0IGJvZHkgPSBkb2MuYm9keTtcbiAgICAgIGNvbnN0IHdpbiA9IGRvYy5kZWZhdWx0VmlldztcbiAgICAgIGNvbnN0IGh0bWwgPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgaWYgKGJvZHkgPT09IGVsZW1lbnQuZG9tKSB7XG4gICAgICAgIHJldHVybiBTdWdhclBvc2l0aW9uKGJvZHkub2Zmc2V0TGVmdCwgYm9keS5vZmZzZXRUb3ApO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gZmlyc3REZWZpbmVkT3JaZXJvKHdpbiA9PT0gbnVsbCB8fCB3aW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpbi5wYWdlWU9mZnNldCwgaHRtbC5zY3JvbGxUb3ApO1xuICAgICAgY29uc3Qgc2Nyb2xsTGVmdCA9IGZpcnN0RGVmaW5lZE9yWmVybyh3aW4gPT09IG51bGwgfHwgd2luID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3aW4ucGFnZVhPZmZzZXQsIGh0bWwuc2Nyb2xsTGVmdCk7XG4gICAgICBjb25zdCBjbGllbnRUb3AgPSBmaXJzdERlZmluZWRPclplcm8oaHRtbC5jbGllbnRUb3AsIGJvZHkuY2xpZW50VG9wKTtcbiAgICAgIGNvbnN0IGNsaWVudExlZnQgPSBmaXJzdERlZmluZWRPclplcm8oaHRtbC5jbGllbnRMZWZ0LCBib2R5LmNsaWVudExlZnQpO1xuICAgICAgcmV0dXJuIHZpZXdwb3J0KGVsZW1lbnQpLnRyYW5zbGF0ZShzY3JvbGxMZWZ0IC0gY2xpZW50TGVmdCwgc2Nyb2xsVG9wIC0gY2xpZW50VG9wKTtcbiAgICB9O1xuICAgIGNvbnN0IHZpZXdwb3J0ID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgIGNvbnN0IGRvYyA9IGRvbS5vd25lckRvY3VtZW50O1xuICAgICAgY29uc3QgYm9keSA9IGRvYy5ib2R5O1xuICAgICAgaWYgKGJvZHkgPT09IGRvbSkge1xuICAgICAgICByZXR1cm4gU3VnYXJQb3NpdGlvbihib2R5Lm9mZnNldExlZnQsIGJvZHkub2Zmc2V0VG9wKTtcbiAgICAgIH1cbiAgICAgIGlmICghaW5Cb2R5KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBTdWdhclBvc2l0aW9uKDAsIDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJveFBvc2l0aW9uKGRvbSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldCQ1ID0gX0RPQyA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBfRE9DICE9PSB1bmRlZmluZWQgPyBfRE9DLmRvbSA6IGRvY3VtZW50O1xuICAgICAgY29uc3QgeCA9IGRvYy5ib2R5LnNjcm9sbExlZnQgfHwgZG9jLmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgY29uc3QgeSA9IGRvYy5ib2R5LnNjcm9sbFRvcCB8fCBkb2MuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcbiAgICAgIHJldHVybiBTdWdhclBvc2l0aW9uKHgsIHkpO1xuICAgIH07XG4gICAgY29uc3QgdG8gPSAoeCwgeSwgX0RPQykgPT4ge1xuICAgICAgY29uc3QgZG9jID0gX0RPQyAhPT0gdW5kZWZpbmVkID8gX0RPQy5kb20gOiBkb2N1bWVudDtcbiAgICAgIGNvbnN0IHdpbiA9IGRvYy5kZWZhdWx0VmlldztcbiAgICAgIGlmICh3aW4pIHtcbiAgICAgICAgd2luLnNjcm9sbFRvKHgsIHkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaW50b1ZpZXcgPSAoZWxlbWVudCwgYWxpZ25Ub1RvcCkgPT4ge1xuICAgICAgY29uc3QgaXNTYWZhcmkgPSBkZXRlY3QkMigpLmJyb3dzZXIuaXNTYWZhcmkoKTtcbiAgICAgIGlmIChpc1NhZmFyaSAmJiBpc0Z1bmN0aW9uKGVsZW1lbnQuZG9tLnNjcm9sbEludG9WaWV3SWZOZWVkZWQpKSB7XG4gICAgICAgIGVsZW1lbnQuZG9tLnNjcm9sbEludG9WaWV3SWZOZWVkZWQoZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5kb20uc2Nyb2xsSW50b1ZpZXcoYWxpZ25Ub1RvcCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGdldCQ0ID0gX3dpbiA9PiB7XG4gICAgICBjb25zdCB3aW4gPSBfd2luID09PSB1bmRlZmluZWQgPyB3aW5kb3cgOiBfd2luO1xuICAgICAgaWYgKGRldGVjdCQyKCkuYnJvd3Nlci5pc0ZpcmVmb3goKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20od2luLnZpc3VhbFZpZXdwb3J0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGJvdW5kcyA9ICh4LCB5LCB3aWR0aCwgaGVpZ2h0KSA9PiAoe1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIHJpZ2h0OiB4ICsgd2lkdGgsXG4gICAgICBib3R0b206IHkgKyBoZWlnaHRcbiAgICB9KTtcbiAgICBjb25zdCBnZXRCb3VuZHMgPSBfd2luID0+IHtcbiAgICAgIGNvbnN0IHdpbiA9IF93aW4gPT09IHVuZGVmaW5lZCA/IHdpbmRvdyA6IF93aW47XG4gICAgICBjb25zdCBkb2MgPSB3aW4uZG9jdW1lbnQ7XG4gICAgICBjb25zdCBzY3JvbGwgPSBnZXQkNShTdWdhckVsZW1lbnQuZnJvbURvbShkb2MpKTtcbiAgICAgIHJldHVybiBnZXQkNCh3aW4pLmZvbGQoKCkgPT4ge1xuICAgICAgICBjb25zdCBodG1sID0gd2luLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgICAgICAgcmV0dXJuIGJvdW5kcyhzY3JvbGwubGVmdCwgc2Nyb2xsLnRvcCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICB9LCB2aXN1YWxWaWV3cG9ydCA9PiBib3VuZHMoTWF0aC5tYXgodmlzdWFsVmlld3BvcnQucGFnZUxlZnQsIHNjcm9sbC5sZWZ0KSwgTWF0aC5tYXgodmlzdWFsVmlld3BvcnQucGFnZVRvcCwgc2Nyb2xsLnRvcCksIHZpc3VhbFZpZXdwb3J0LndpZHRoLCB2aXN1YWxWaWV3cG9ydC5oZWlnaHQpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2hpbGRyZW4gPSAoc2NvcGUsIHByZWRpY2F0ZSkgPT4gZmlsdGVyJDUoY2hpbGRyZW4kMShzY29wZSksIHByZWRpY2F0ZSk7XG4gICAgY29uc3QgZGVzY2VuZGFudHMkMSA9IChzY29wZSwgcHJlZGljYXRlKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICBlYWNoJGUoY2hpbGRyZW4kMShzY29wZSksIHggPT4ge1xuICAgICAgICBpZiAocHJlZGljYXRlKHgpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChbeF0pO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZGVzY2VuZGFudHMkMSh4LCBwcmVkaWNhdGUpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgY29uc3QgZGVzY2VuZGFudHMgPSAoc2NvcGUsIHNlbGVjdG9yKSA9PiBhbGwoc2VsZWN0b3IsIHNjb3BlKTtcblxuICAgIGNvbnN0IGFuY2VzdG9yJDIgPSAoc2NvcGUsIHNlbGVjdG9yLCBpc1Jvb3QpID0+IGFuY2VzdG9yJDMoc2NvcGUsIHNlbGVjdG9yLCBpc1Jvb3QpLmlzU29tZSgpO1xuXG4gICAgY2xhc3MgRG9tVHJlZVdhbGtlciB7XG4gICAgICBjb25zdHJ1Y3RvcihzdGFydE5vZGUsIHJvb3ROb2RlKSB7XG4gICAgICAgIHRoaXMubm9kZSA9IHN0YXJ0Tm9kZTtcbiAgICAgICAgdGhpcy5yb290Tm9kZSA9IHJvb3ROb2RlO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLmN1cnJlbnQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5uZXh0ID0gdGhpcy5uZXh0LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucHJldiA9IHRoaXMucHJldi5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnByZXYyID0gdGhpcy5wcmV2Mi5iaW5kKHRoaXMpO1xuICAgICAgfVxuICAgICAgY3VycmVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgICAgIH1cbiAgICAgIG5leHQoc2hhbGxvdykge1xuICAgICAgICB0aGlzLm5vZGUgPSB0aGlzLmZpbmRTaWJsaW5nKHRoaXMubm9kZSwgJ2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCBzaGFsbG93KTtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgICAgIH1cbiAgICAgIHByZXYoc2hhbGxvdykge1xuICAgICAgICB0aGlzLm5vZGUgPSB0aGlzLmZpbmRTaWJsaW5nKHRoaXMubm9kZSwgJ2xhc3RDaGlsZCcsICdwcmV2aW91c1NpYmxpbmcnLCBzaGFsbG93KTtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgICAgIH1cbiAgICAgIHByZXYyKHNoYWxsb3cpIHtcbiAgICAgICAgdGhpcy5ub2RlID0gdGhpcy5maW5kUHJldmlvdXNOb2RlKHRoaXMubm9kZSwgc2hhbGxvdyk7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGU7XG4gICAgICB9XG4gICAgICBmaW5kU2libGluZyhub2RlLCBzdGFydE5hbWUsIHNpYmxpbmdOYW1lLCBzaGFsbG93KSB7XG4gICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgaWYgKCFzaGFsbG93ICYmIG5vZGVbc3RhcnROYW1lXSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVbc3RhcnROYW1lXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5vZGUgIT09IHRoaXMucm9vdE5vZGUpIHtcbiAgICAgICAgICAgIGxldCBzaWJsaW5nID0gbm9kZVtzaWJsaW5nTmFtZV07XG4gICAgICAgICAgICBpZiAoc2libGluZykge1xuICAgICAgICAgICAgICByZXR1cm4gc2libGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTsgcGFyZW50ICYmIHBhcmVudCAhPT0gdGhpcy5yb290Tm9kZTsgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgc2libGluZyA9IHBhcmVudFtzaWJsaW5nTmFtZV07XG4gICAgICAgICAgICAgIGlmIChzaWJsaW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGZpbmRQcmV2aW91c05vZGUobm9kZSwgc2hhbGxvdykge1xuICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgIGNvbnN0IHNpYmxpbmcgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICBpZiAodGhpcy5yb290Tm9kZSAmJiBzaWJsaW5nID09PSB0aGlzLnJvb3ROb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzaWJsaW5nKSB7XG4gICAgICAgICAgICBpZiAoIXNoYWxsb3cpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgY2hpbGQgPSBzaWJsaW5nLmxhc3RDaGlsZDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQubGFzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjaGlsZC5sYXN0Q2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzaWJsaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQgIT09IHRoaXMucm9vdE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaXNOb2RlVHlwZSA9IHR5cGUgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUgPT4ge1xuICAgICAgICByZXR1cm4gISFub2RlICYmIG5vZGUubm9kZVR5cGUgPT09IHR5cGU7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgaXNSZXN0cmljdGVkTm9kZSA9IG5vZGUgPT4gISFub2RlICYmICFPYmplY3QuZ2V0UHJvdG90eXBlT2Yobm9kZSk7XG4gICAgY29uc3QgaXNFbGVtZW50JDYgPSBpc05vZGVUeXBlKDEpO1xuICAgIGNvbnN0IG1hdGNoTm9kZU5hbWUgPSBuYW1lID0+IHtcbiAgICAgIGNvbnN0IGxvd2VyQ2FzZWROYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIG5vZGUgPT4gaXNOb25OdWxsYWJsZShub2RlKSAmJiBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IGxvd2VyQ2FzZWROYW1lO1xuICAgIH07XG4gICAgY29uc3QgbWF0Y2hOb2RlTmFtZXMgPSBuYW1lcyA9PiB7XG4gICAgICBjb25zdCBsb3dlckNhc2VkTmFtZXMgPSBuYW1lcy5tYXAocyA9PiBzLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgcmV0dXJuIG5vZGUgPT4ge1xuICAgICAgICBpZiAobm9kZSAmJiBub2RlLm5vZGVOYW1lKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgcmV0dXJuIGNvbnRhaW5zJDIobG93ZXJDYXNlZE5hbWVzLCBub2RlTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG1hdGNoU3R5bGVWYWx1ZXMgPSAobmFtZSwgdmFsdWVzKSA9PiB7XG4gICAgICBjb25zdCBpdGVtcyA9IHZhbHVlcy50b0xvd2VyQ2FzZSgpLnNwbGl0KCcgJyk7XG4gICAgICByZXR1cm4gbm9kZSA9PiB7XG4gICAgICAgIGlmIChpc0VsZW1lbnQkNihub2RlKSkge1xuICAgICAgICAgIGNvbnN0IHdpbiA9IG5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcbiAgICAgICAgICBpZiAod2luKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkID0gd2luLmdldENvbXB1dGVkU3R5bGUobm9kZSwgbnVsbCk7XG4gICAgICAgICAgICAgIGNvbnN0IGNzc1ZhbHVlID0gY29tcHV0ZWQgPyBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpIDogbnVsbDtcbiAgICAgICAgICAgICAgaWYgKGNzc1ZhbHVlID09PSBpdGVtc1tpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBoYXNBdHRyaWJ1dGUgPSBhdHRyTmFtZSA9PiB7XG4gICAgICByZXR1cm4gbm9kZSA9PiB7XG4gICAgICAgIHJldHVybiBpc0VsZW1lbnQkNihub2RlKSAmJiBub2RlLmhhc0F0dHJpYnV0ZShhdHRyTmFtZSk7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgaGFzQXR0cmlidXRlVmFsdWUgPSAoYXR0ck5hbWUsIGF0dHJWYWx1ZSkgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUgPT4ge1xuICAgICAgICByZXR1cm4gaXNFbGVtZW50JDYobm9kZSkgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpID09PSBhdHRyVmFsdWU7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgaXNCb2d1cyQyID0gbm9kZSA9PiBpc0VsZW1lbnQkNihub2RlKSAmJiBub2RlLmhhc0F0dHJpYnV0ZSgnZGF0YS1tY2UtYm9ndXMnKTtcbiAgICBjb25zdCBpc0JvZ3VzQWxsJDEgPSBub2RlID0+IGlzRWxlbWVudCQ2KG5vZGUpICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLW1jZS1ib2d1cycpID09PSAnYWxsJztcbiAgICBjb25zdCBpc1RhYmxlJDIgPSBub2RlID0+IGlzRWxlbWVudCQ2KG5vZGUpICYmIG5vZGUudGFnTmFtZSA9PT0gJ1RBQkxFJztcbiAgICBjb25zdCBoYXNDb250ZW50RWRpdGFibGVTdGF0ZSA9IHZhbHVlID0+IHtcbiAgICAgIHJldHVybiBub2RlID0+IHtcbiAgICAgICAgaWYgKGlzRWxlbWVudCQ2KG5vZGUpKSB7XG4gICAgICAgICAgaWYgKG5vZGUuY29udGVudEVkaXRhYmxlID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1tY2UtY29udGVudGVkaXRhYmxlJykgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGlzVGV4dGFyZWFPcklucHV0ID0gbWF0Y2hOb2RlTmFtZXMoW1xuICAgICAgJ3RleHRhcmVhJyxcbiAgICAgICdpbnB1dCdcbiAgICBdKTtcbiAgICBjb25zdCBpc1RleHQkYSA9IGlzTm9kZVR5cGUoMyk7XG4gICAgY29uc3QgaXNDRGF0YSA9IGlzTm9kZVR5cGUoNCk7XG4gICAgY29uc3QgaXNQaSA9IGlzTm9kZVR5cGUoNyk7XG4gICAgY29uc3QgaXNDb21tZW50ID0gaXNOb2RlVHlwZSg4KTtcbiAgICBjb25zdCBpc0RvY3VtZW50JDEgPSBpc05vZGVUeXBlKDkpO1xuICAgIGNvbnN0IGlzRG9jdW1lbnRGcmFnbWVudCA9IGlzTm9kZVR5cGUoMTEpO1xuICAgIGNvbnN0IGlzQnIkNiA9IG1hdGNoTm9kZU5hbWUoJ2JyJyk7XG4gICAgY29uc3QgaXNJbWcgPSBtYXRjaE5vZGVOYW1lKCdpbWcnKTtcbiAgICBjb25zdCBpc0NvbnRlbnRFZGl0YWJsZVRydWUkMyA9IGhhc0NvbnRlbnRFZGl0YWJsZVN0YXRlKCd0cnVlJyk7XG4gICAgY29uc3QgaXNDb250ZW50RWRpdGFibGVGYWxzZSRiID0gaGFzQ29udGVudEVkaXRhYmxlU3RhdGUoJ2ZhbHNlJyk7XG4gICAgY29uc3QgaXNUYWJsZUNlbGwkMyA9IG1hdGNoTm9kZU5hbWVzKFtcbiAgICAgICd0ZCcsXG4gICAgICAndGgnXG4gICAgXSk7XG4gICAgY29uc3QgaXNUYWJsZUNlbGxPckNhcHRpb24gPSBtYXRjaE5vZGVOYW1lcyhbXG4gICAgICAndGQnLFxuICAgICAgJ3RoJyxcbiAgICAgICdjYXB0aW9uJ1xuICAgIF0pO1xuICAgIGNvbnN0IGlzTWVkaWEkMiA9IG1hdGNoTm9kZU5hbWVzKFtcbiAgICAgICd2aWRlbycsXG4gICAgICAnYXVkaW8nLFxuICAgICAgJ29iamVjdCcsXG4gICAgICAnZW1iZWQnXG4gICAgXSk7XG4gICAgY29uc3QgaXNMaXN0SXRlbSQyID0gbWF0Y2hOb2RlTmFtZSgnbGknKTtcbiAgICBjb25zdCBpc0RldGFpbHMgPSBtYXRjaE5vZGVOYW1lKCdkZXRhaWxzJyk7XG4gICAgY29uc3QgaXNTdW1tYXJ5ID0gbWF0Y2hOb2RlTmFtZSgnc3VtbWFyeScpO1xuXG4gICAgY29uc3QgemVyb1dpZHRoID0gJ1xcdUZFRkYnO1xuICAgIGNvbnN0IG5ic3AgPSAnXFx4QTAnO1xuICAgIGNvbnN0IGlzWndzcCQyID0gY2hhciA9PiBjaGFyID09PSB6ZXJvV2lkdGg7XG4gICAgY29uc3QgcmVtb3ZlWndzcCA9IHMgPT4gcy5yZXBsYWNlKC9cXHVGRUZGL2csICcnKTtcblxuICAgIGNvbnN0IE5vZGVWYWx1ZSA9IChpcywgbmFtZSkgPT4ge1xuICAgICAgY29uc3QgZ2V0ID0gZWxlbWVudCA9PiB7XG4gICAgICAgIGlmICghaXMoZWxlbWVudCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBvbmx5IGdldCAnICsgbmFtZSArICcgdmFsdWUgb2YgYSAnICsgbmFtZSArICcgbm9kZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXRPcHRpb24oZWxlbWVudCkuZ2V0T3IoJycpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldE9wdGlvbiA9IGVsZW1lbnQgPT4gaXMoZWxlbWVudCkgPyBPcHRpb25hbC5mcm9tKGVsZW1lbnQuZG9tLm5vZGVWYWx1ZSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICBjb25zdCBzZXQgPSAoZWxlbWVudCwgdmFsdWUpID0+IHtcbiAgICAgICAgaWYgKCFpcyhlbGVtZW50KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG9ubHkgc2V0IHJhdyAnICsgbmFtZSArICcgdmFsdWUgb2YgYSAnICsgbmFtZSArICcgbm9kZScpO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnQuZG9tLm5vZGVWYWx1ZSA9IHZhbHVlO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdldCxcbiAgICAgICAgZ2V0T3B0aW9uLFxuICAgICAgICBzZXRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGFwaSQxID0gTm9kZVZhbHVlKGlzVGV4dCRiLCAndGV4dCcpO1xuICAgIGNvbnN0IGdldCQzID0gZWxlbWVudCA9PiBhcGkkMS5nZXQoZWxlbWVudCk7XG4gICAgY29uc3QgZ2V0T3B0aW9uID0gZWxlbWVudCA9PiBhcGkkMS5nZXRPcHRpb24oZWxlbWVudCk7XG4gICAgY29uc3Qgc2V0ID0gKGVsZW1lbnQsIHZhbHVlKSA9PiBhcGkkMS5zZXQoZWxlbWVudCwgdmFsdWUpO1xuXG4gICAgY29uc3QgYmxvY2tzID0gW1xuICAgICAgJ2FydGljbGUnLFxuICAgICAgJ2FzaWRlJyxcbiAgICAgICdkZXRhaWxzJyxcbiAgICAgICdkaXYnLFxuICAgICAgJ2R0JyxcbiAgICAgICdmaWdjYXB0aW9uJyxcbiAgICAgICdmb290ZXInLFxuICAgICAgJ2Zvcm0nLFxuICAgICAgJ2ZpZWxkc2V0JyxcbiAgICAgICdoZWFkZXInLFxuICAgICAgJ2hncm91cCcsXG4gICAgICAnaHRtbCcsXG4gICAgICAnbWFpbicsXG4gICAgICAnbmF2JyxcbiAgICAgICdzZWN0aW9uJyxcbiAgICAgICdzdW1tYXJ5JyxcbiAgICAgICdib2R5JyxcbiAgICAgICdwJyxcbiAgICAgICdkbCcsXG4gICAgICAnbXVsdGljb2wnLFxuICAgICAgJ2RkJyxcbiAgICAgICdmaWd1cmUnLFxuICAgICAgJ2FkZHJlc3MnLFxuICAgICAgJ2NlbnRlcicsXG4gICAgICAnYmxvY2txdW90ZScsXG4gICAgICAnaDEnLFxuICAgICAgJ2gyJyxcbiAgICAgICdoMycsXG4gICAgICAnaDQnLFxuICAgICAgJ2g1JyxcbiAgICAgICdoNicsXG4gICAgICAnbGlzdGluZycsXG4gICAgICAneG1wJyxcbiAgICAgICdwcmUnLFxuICAgICAgJ3BsYWludGV4dCcsXG4gICAgICAnbWVudScsXG4gICAgICAnZGlyJyxcbiAgICAgICd1bCcsXG4gICAgICAnb2wnLFxuICAgICAgJ2xpJyxcbiAgICAgICdocicsXG4gICAgICAndGFibGUnLFxuICAgICAgJ3Rib2R5JyxcbiAgICAgICd0aGVhZCcsXG4gICAgICAndGZvb3QnLFxuICAgICAgJ3RoJyxcbiAgICAgICd0cicsXG4gICAgICAndGQnLFxuICAgICAgJ2NhcHRpb24nXG4gICAgXTtcbiAgICBjb25zdCB0YWJsZUNlbGxzID0gW1xuICAgICAgJ3RkJyxcbiAgICAgICd0aCdcbiAgICBdO1xuICAgIGNvbnN0IHRhYmxlU2VjdGlvbnMgPSBbXG4gICAgICAndGhlYWQnLFxuICAgICAgJ3Rib2R5JyxcbiAgICAgICd0Zm9vdCdcbiAgICBdO1xuICAgIGNvbnN0IHRleHRCbG9ja3MgPSBbXG4gICAgICAnaDEnLFxuICAgICAgJ2gyJyxcbiAgICAgICdoMycsXG4gICAgICAnaDQnLFxuICAgICAgJ2g1JyxcbiAgICAgICdoNicsXG4gICAgICAncCcsXG4gICAgICAnZGl2JyxcbiAgICAgICdhZGRyZXNzJyxcbiAgICAgICdwcmUnLFxuICAgICAgJ2Zvcm0nLFxuICAgICAgJ2Jsb2NrcXVvdGUnLFxuICAgICAgJ2NlbnRlcicsXG4gICAgICAnZGlyJyxcbiAgICAgICdmaWVsZHNldCcsXG4gICAgICAnaGVhZGVyJyxcbiAgICAgICdmb290ZXInLFxuICAgICAgJ2FydGljbGUnLFxuICAgICAgJ3NlY3Rpb24nLFxuICAgICAgJ2hncm91cCcsXG4gICAgICAnYXNpZGUnLFxuICAgICAgJ25hdicsXG4gICAgICAnZmlndXJlJ1xuICAgIF07XG4gICAgY29uc3QgaGVhZGluZ3MgPSBbXG4gICAgICAnaDEnLFxuICAgICAgJ2gyJyxcbiAgICAgICdoMycsXG4gICAgICAnaDQnLFxuICAgICAgJ2g1JyxcbiAgICAgICdoNidcbiAgICBdO1xuICAgIGNvbnN0IGxpc3RJdGVtcyQxID0gW1xuICAgICAgJ2xpJyxcbiAgICAgICdkZCcsXG4gICAgICAnZHQnXG4gICAgXTtcbiAgICBjb25zdCBsaXN0cyA9IFtcbiAgICAgICd1bCcsXG4gICAgICAnb2wnLFxuICAgICAgJ2RsJ1xuICAgIF07XG4gICAgY29uc3Qgd3NFbGVtZW50cyA9IFtcbiAgICAgICdwcmUnLFxuICAgICAgJ3NjcmlwdCcsXG4gICAgICAndGV4dGFyZWEnLFxuICAgICAgJ3N0eWxlJ1xuICAgIF07XG4gICAgY29uc3Qgd3JhcEJsb2NrRWxlbWVudHMgPSBbJ3ByZSddLmNvbmNhdChoZWFkaW5ncyk7XG4gICAgY29uc3QgbGF6eUxvb2t1cCA9IGl0ZW1zID0+IHtcbiAgICAgIGxldCBsb29rdXA7XG4gICAgICByZXR1cm4gbm9kZSA9PiB7XG4gICAgICAgIGxvb2t1cCA9IGxvb2t1cCA/IGxvb2t1cCA6IG1hcFRvT2JqZWN0KGl0ZW1zLCBhbHdheXMpO1xuICAgICAgICByZXR1cm4gaGFzJDIobG9va3VwLCBuYW1lKG5vZGUpKTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBpc0Jsb2NrJDIgPSBsYXp5TG9va3VwKGJsb2Nrcyk7XG4gICAgY29uc3QgaXNUYWJsZSQxID0gbm9kZSA9PiBuYW1lKG5vZGUpID09PSAndGFibGUnO1xuICAgIGNvbnN0IGlzSW5saW5lJDEgPSBub2RlID0+IGlzRWxlbWVudCQ3KG5vZGUpICYmICFpc0Jsb2NrJDIobm9kZSk7XG4gICAgY29uc3QgaXNCciQ1ID0gbm9kZSA9PiBpc0VsZW1lbnQkNyhub2RlKSAmJiBuYW1lKG5vZGUpID09PSAnYnInO1xuICAgIGNvbnN0IGlzVGV4dEJsb2NrJDIgPSBsYXp5TG9va3VwKHRleHRCbG9ja3MpO1xuICAgIGNvbnN0IGlzTGlzdCA9IGxhenlMb29rdXAobGlzdHMpO1xuICAgIGNvbnN0IGlzTGlzdEl0ZW0kMSA9IGxhenlMb29rdXAobGlzdEl0ZW1zJDEpO1xuICAgIGNvbnN0IGlzVGFibGVTZWN0aW9uID0gbGF6eUxvb2t1cCh0YWJsZVNlY3Rpb25zKTtcbiAgICBjb25zdCBpc1RhYmxlQ2VsbCQyID0gbGF6eUxvb2t1cCh0YWJsZUNlbGxzKTtcbiAgICBjb25zdCBpc1dzUHJlc2VydmVFbGVtZW50ID0gbGF6eUxvb2t1cCh3c0VsZW1lbnRzKTtcbiAgICBjb25zdCBpc1dyYXBCbG9ja0VsZW1lbnQgPSBsYXp5TG9va3VwKHdyYXBCbG9ja0VsZW1lbnRzKTtcbiAgICBjb25zdCBpc1dyYXBFbGVtZW50ID0gbm9kZSA9PiBpc1dyYXBCbG9ja0VsZW1lbnQobm9kZSkgfHwgaXNJbmxpbmUkMShub2RlKTtcblxuICAgIGNvbnN0IGdldExhc3RDaGlsZHJlbiQxID0gZWxtID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gW107XG4gICAgICBsZXQgcmF3Tm9kZSA9IGVsbS5kb207XG4gICAgICB3aGlsZSAocmF3Tm9kZSkge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJhd05vZGUpKTtcbiAgICAgICAgcmF3Tm9kZSA9IHJhd05vZGUubGFzdENoaWxkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlVHJhaWxpbmdCciA9IGVsbSA9PiB7XG4gICAgICBjb25zdCBhbGxCcnMgPSBkZXNjZW5kYW50cyhlbG0sICdicicpO1xuICAgICAgY29uc3QgYnJzID0gZmlsdGVyJDUoZ2V0TGFzdENoaWxkcmVuJDEoZWxtKS5zbGljZSgtMSksIGlzQnIkNSk7XG4gICAgICBpZiAoYWxsQnJzLmxlbmd0aCA9PT0gYnJzLmxlbmd0aCkge1xuICAgICAgICBlYWNoJGUoYnJzLCByZW1vdmUkNSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVQYWRkaW5nQnIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBiciA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdicicpO1xuICAgICAgc2V0JDMoYnIsICdkYXRhLW1jZS1ib2d1cycsICcxJyk7XG4gICAgICByZXR1cm4gYnI7XG4gICAgfTtcbiAgICBjb25zdCBmaWxsV2l0aFBhZGRpbmdCciA9IGVsbSA9PiB7XG4gICAgICBlbXB0eShlbG0pO1xuICAgICAgYXBwZW5kJDEoZWxtLCBjcmVhdGVQYWRkaW5nQnIoKSk7XG4gICAgfTtcbiAgICBjb25zdCB0cmltQmxvY2tUcmFpbGluZ0JyID0gZWxtID0+IHtcbiAgICAgIGxhc3RDaGlsZChlbG0pLmVhY2gobGFzdENoaWxkID0+IHtcbiAgICAgICAgcHJldlNpYmxpbmcobGFzdENoaWxkKS5lYWNoKGxhc3RDaGlsZFByZXZTaWJsaW5nID0+IHtcbiAgICAgICAgICBpZiAoaXNCbG9jayQyKGVsbSkgJiYgaXNCciQ1KGxhc3RDaGlsZCkgJiYgaXNCbG9jayQyKGxhc3RDaGlsZFByZXZTaWJsaW5nKSkge1xuICAgICAgICAgICAgcmVtb3ZlJDUobGFzdENoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IFpXU1AkMSA9IHplcm9XaWR0aDtcbiAgICBjb25zdCBpc1p3c3AkMSA9IGlzWndzcCQyO1xuICAgIGNvbnN0IHRyaW0kMSA9IHJlbW92ZVp3c3A7XG5cbiAgICBjb25zdCBpc0VsZW1lbnQkNSA9IGlzRWxlbWVudCQ2O1xuICAgIGNvbnN0IGlzVGV4dCQ5ID0gaXNUZXh0JGE7XG4gICAgY29uc3QgaXNDYXJldENvbnRhaW5lckJsb2NrJDEgPSBub2RlID0+IHtcbiAgICAgIGlmIChpc1RleHQkOShub2RlKSkge1xuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzRWxlbWVudCQ1KG5vZGUpICYmIG5vZGUuaGFzQXR0cmlidXRlKCdkYXRhLW1jZS1jYXJldCcpO1xuICAgIH07XG4gICAgY29uc3QgaXNDYXJldENvbnRhaW5lcklubGluZSA9IG5vZGUgPT4gaXNUZXh0JDkobm9kZSkgJiYgaXNad3NwJDEobm9kZS5kYXRhKTtcbiAgICBjb25zdCBpc0NhcmV0Q29udGFpbmVyJDIgPSBub2RlID0+IGlzQ2FyZXRDb250YWluZXJCbG9jayQxKG5vZGUpIHx8IGlzQ2FyZXRDb250YWluZXJJbmxpbmUobm9kZSk7XG4gICAgY29uc3QgaGFzQ29udGVudCA9IG5vZGUgPT4gbm9kZS5maXJzdENoaWxkICE9PSBub2RlLmxhc3RDaGlsZCB8fCAhaXNCciQ2KG5vZGUuZmlyc3RDaGlsZCk7XG4gICAgY29uc3QgaW5zZXJ0SW5saW5lJDEgPSAobm9kZSwgYmVmb3JlKSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBkb2MgPSAoX2EgPSBub2RlLm93bmVyRG9jdW1lbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGRvY3VtZW50O1xuICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb2MuY3JlYXRlVGV4dE5vZGUoWldTUCQxKTtcbiAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICBpZiAoIWJlZm9yZSkge1xuICAgICAgICBjb25zdCBzaWJsaW5nID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgICAgaWYgKGlzVGV4dCQ5KHNpYmxpbmcpKSB7XG4gICAgICAgICAgaWYgKGlzQ2FyZXRDb250YWluZXIkMihzaWJsaW5nKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGFydHNXaXRoQ2FyZXRDb250YWluZXIkMShzaWJsaW5nKSkge1xuICAgICAgICAgICAgc2libGluZy5zcGxpdFRleHQoMSk7XG4gICAgICAgICAgICByZXR1cm4gc2libGluZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgICBwYXJlbnROb2RlID09PSBudWxsIHx8IHBhcmVudE5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRleHROb2RlLCBub2RlLm5leHRTaWJsaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJlbnROb2RlID09PSBudWxsIHx8IHBhcmVudE5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGV4dE5vZGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgIGlmIChpc1RleHQkOShzaWJsaW5nKSkge1xuICAgICAgICAgIGlmIChpc0NhcmV0Q29udGFpbmVyJDIoc2libGluZykpIHtcbiAgICAgICAgICAgIHJldHVybiBzaWJsaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZW5kc1dpdGhDYXJldENvbnRhaW5lciQxKHNpYmxpbmcpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2libGluZy5zcGxpdFRleHQoc2libGluZy5kYXRhLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwYXJlbnROb2RlID09PSBudWxsIHx8IHBhcmVudE5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRleHROb2RlLCBub2RlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0ZXh0Tm9kZTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQmVmb3JlSW5saW5lID0gcG9zID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHBvcy5jb250YWluZXIoKTtcbiAgICAgIGlmICghaXNUZXh0JGEoY29udGFpbmVyKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGFpbmVyLmRhdGEuY2hhckF0KHBvcy5vZmZzZXQoKSkgPT09IFpXU1AkMSB8fCBwb3MuaXNBdFN0YXJ0KCkgJiYgaXNDYXJldENvbnRhaW5lcklubGluZShjb250YWluZXIucHJldmlvdXNTaWJsaW5nKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQWZ0ZXJJbmxpbmUgPSBwb3MgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gcG9zLmNvbnRhaW5lcigpO1xuICAgICAgaWYgKCFpc1RleHQkYShjb250YWluZXIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250YWluZXIuZGF0YS5jaGFyQXQocG9zLm9mZnNldCgpIC0gMSkgPT09IFpXU1AkMSB8fCBwb3MuaXNBdEVuZCgpICYmIGlzQ2FyZXRDb250YWluZXJJbmxpbmUoY29udGFpbmVyLm5leHRTaWJsaW5nKTtcbiAgICB9O1xuICAgIGNvbnN0IGluc2VydEJsb2NrID0gKGJsb2NrTmFtZSwgbm9kZSwgYmVmb3JlKSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBkb2MgPSAoX2EgPSBub2RlLm93bmVyRG9jdW1lbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGRvY3VtZW50O1xuICAgICAgY29uc3QgYmxvY2tOb2RlID0gZG9jLmNyZWF0ZUVsZW1lbnQoYmxvY2tOYW1lKTtcbiAgICAgIGJsb2NrTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWNlLWNhcmV0JywgYmVmb3JlID8gJ2JlZm9yZScgOiAnYWZ0ZXInKTtcbiAgICAgIGJsb2NrTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWNlLWJvZ3VzJywgJ2FsbCcpO1xuICAgICAgYmxvY2tOb2RlLmFwcGVuZENoaWxkKGNyZWF0ZVBhZGRpbmdCcigpLmRvbSk7XG4gICAgICBjb25zdCBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgaWYgKCFiZWZvcmUpIHtcbiAgICAgICAgaWYgKG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgICBwYXJlbnROb2RlID09PSBudWxsIHx8IHBhcmVudE5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGJsb2NrTm9kZSwgbm9kZS5uZXh0U2libGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyZW50Tm9kZSA9PT0gbnVsbCB8fCBwYXJlbnROb2RlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJlbnROb2RlLmFwcGVuZENoaWxkKGJsb2NrTm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudE5vZGUgPT09IG51bGwgfHwgcGFyZW50Tm9kZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYmxvY2tOb2RlLCBub2RlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBibG9ja05vZGU7XG4gICAgfTtcbiAgICBjb25zdCBzdGFydHNXaXRoQ2FyZXRDb250YWluZXIkMSA9IG5vZGUgPT4gaXNUZXh0JDkobm9kZSkgJiYgbm9kZS5kYXRhWzBdID09PSBaV1NQJDE7XG4gICAgY29uc3QgZW5kc1dpdGhDYXJldENvbnRhaW5lciQxID0gbm9kZSA9PiBpc1RleHQkOShub2RlKSAmJiBub2RlLmRhdGFbbm9kZS5kYXRhLmxlbmd0aCAtIDFdID09PSBaV1NQJDE7XG4gICAgY29uc3QgdHJpbUJvZ3VzQnIgPSBlbG0gPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgYnJzID0gZWxtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdicicpO1xuICAgICAgY29uc3QgbGFzdEJyID0gYnJzW2Jycy5sZW5ndGggLSAxXTtcbiAgICAgIGlmIChpc0JvZ3VzJDIobGFzdEJyKSkge1xuICAgICAgICAoX2EgPSBsYXN0QnIucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJlbW92ZUNoaWxkKGxhc3RCcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzaG93Q2FyZXRDb250YWluZXJCbG9jayA9IGNhcmV0Q29udGFpbmVyID0+IHtcbiAgICAgIGlmIChjYXJldENvbnRhaW5lciAmJiBjYXJldENvbnRhaW5lci5oYXNBdHRyaWJ1dGUoJ2RhdGEtbWNlLWNhcmV0JykpIHtcbiAgICAgICAgdHJpbUJvZ3VzQnIoY2FyZXRDb250YWluZXIpO1xuICAgICAgICBjYXJldENvbnRhaW5lci5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbWNlLWNhcmV0Jyk7XG4gICAgICAgIGNhcmV0Q29udGFpbmVyLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1tY2UtYm9ndXMnKTtcbiAgICAgICAgY2FyZXRDb250YWluZXIucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgICBjYXJldENvbnRhaW5lci5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbWNlLXN0eWxlJyk7XG4gICAgICAgIGNhcmV0Q29udGFpbmVyLnJlbW92ZUF0dHJpYnV0ZSgnX21vel9hYnNwb3MnKTtcbiAgICAgICAgcmV0dXJuIGNhcmV0Q29udGFpbmVyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBjb25zdCBpc1JhbmdlSW5DYXJldENvbnRhaW5lckJsb2NrID0gcmFuZ2UgPT4gaXNDYXJldENvbnRhaW5lckJsb2NrJDEocmFuZ2Uuc3RhcnRDb250YWluZXIpO1xuXG4gICAgY29uc3QgaXNDb250ZW50RWRpdGFibGVUcnVlJDIgPSBpc0NvbnRlbnRFZGl0YWJsZVRydWUkMztcbiAgICBjb25zdCBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJGEgPSBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJGI7XG4gICAgY29uc3QgaXNCciQ0ID0gaXNCciQ2O1xuICAgIGNvbnN0IGlzVGV4dCQ4ID0gaXNUZXh0JGE7XG4gICAgY29uc3QgaXNJbnZhbGlkVGV4dEVsZW1lbnQgPSBtYXRjaE5vZGVOYW1lcyhbXG4gICAgICAnc2NyaXB0JyxcbiAgICAgICdzdHlsZScsXG4gICAgICAndGV4dGFyZWEnXG4gICAgXSk7XG4gICAgY29uc3QgaXNBdG9taWNJbmxpbmUgPSBtYXRjaE5vZGVOYW1lcyhbXG4gICAgICAnaW1nJyxcbiAgICAgICdpbnB1dCcsXG4gICAgICAndGV4dGFyZWEnLFxuICAgICAgJ2hyJyxcbiAgICAgICdpZnJhbWUnLFxuICAgICAgJ3ZpZGVvJyxcbiAgICAgICdhdWRpbycsXG4gICAgICAnb2JqZWN0JyxcbiAgICAgICdlbWJlZCdcbiAgICBdKTtcbiAgICBjb25zdCBpc1RhYmxlID0gbWF0Y2hOb2RlTmFtZXMoWyd0YWJsZSddKTtcbiAgICBjb25zdCBpc0NhcmV0Q29udGFpbmVyJDEgPSBpc0NhcmV0Q29udGFpbmVyJDI7XG4gICAgY29uc3QgaXNDYXJldENhbmRpZGF0ZSQzID0gbm9kZSA9PiB7XG4gICAgICBpZiAoaXNDYXJldENvbnRhaW5lciQxKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1RleHQkOChub2RlKSkge1xuICAgICAgICByZXR1cm4gIWlzSW52YWxpZFRleHRFbGVtZW50KG5vZGUucGFyZW50Tm9kZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNBdG9taWNJbmxpbmUobm9kZSkgfHwgaXNCciQ0KG5vZGUpIHx8IGlzVGFibGUobm9kZSkgfHwgaXNOb25VaUNvbnRlbnRFZGl0YWJsZUZhbHNlKG5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgaXNVbnNlbGVjdGFibGUgPSBub2RlID0+IGlzRWxlbWVudCQ2KG5vZGUpICYmIG5vZGUuZ2V0QXR0cmlidXRlKCd1bnNlbGVjdGFibGUnKSA9PT0gJ3RydWUnO1xuICAgIGNvbnN0IGlzTm9uVWlDb250ZW50RWRpdGFibGVGYWxzZSA9IG5vZGUgPT4gIWlzVW5zZWxlY3RhYmxlKG5vZGUpICYmIGlzQ29udGVudEVkaXRhYmxlRmFsc2UkYShub2RlKTtcbiAgICBjb25zdCBpc0luRWRpdGFibGUgPSAobm9kZSwgcm9vdCkgPT4ge1xuICAgICAgZm9yIChsZXQgdGVtcE5vZGUgPSBub2RlLnBhcmVudE5vZGU7IHRlbXBOb2RlICYmIHRlbXBOb2RlICE9PSByb290OyB0ZW1wTm9kZSA9IHRlbXBOb2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgaWYgKGlzTm9uVWlDb250ZW50RWRpdGFibGVGYWxzZSh0ZW1wTm9kZSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQ29udGVudEVkaXRhYmxlVHJ1ZSQyKHRlbXBOb2RlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQXRvbWljQ29udGVudEVkaXRhYmxlRmFsc2UgPSBub2RlID0+IHtcbiAgICAgIGlmICghaXNOb25VaUNvbnRlbnRFZGl0YWJsZUZhbHNlKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhZm9sZGwoZnJvbShub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpLCAocmVzdWx0LCBlbG0pID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCB8fCBpc0NvbnRlbnRFZGl0YWJsZVRydWUkMihlbG0pO1xuICAgICAgfSwgZmFsc2UpO1xuICAgIH07XG4gICAgY29uc3QgaXNBdG9taWMkMSA9IG5vZGUgPT4gaXNBdG9taWNJbmxpbmUobm9kZSkgfHwgaXNBdG9taWNDb250ZW50RWRpdGFibGVGYWxzZShub2RlKTtcbiAgICBjb25zdCBpc0VkaXRhYmxlQ2FyZXRDYW5kaWRhdGUkMSA9IChub2RlLCByb290KSA9PiBpc0NhcmV0Q2FuZGlkYXRlJDMobm9kZSkgJiYgaXNJbkVkaXRhYmxlKG5vZGUsIHJvb3QpO1xuXG4gICAgY29uc3Qgd2hpdGVTcGFjZVJlZ0V4cCA9IC9eWyBcXHRcXHJcXG5dKiQvO1xuICAgIGNvbnN0IGlzV2hpdGVzcGFjZVRleHQgPSB0ZXh0ID0+IHdoaXRlU3BhY2VSZWdFeHAudGVzdCh0ZXh0KTtcbiAgICBjb25zdCBpc1p3c3AgPSB0ZXh0ID0+IHtcbiAgICAgIGZvciAoY29uc3QgYyBvZiB0ZXh0KSB7XG4gICAgICAgIGlmICghaXNad3NwJDIoYykpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgY29uc3QgaXNDb2xsYXBzaWJsZVdoaXRlc3BhY2UkMSA9IGMgPT4gJyBcXGZcXHRcXHgwQicuaW5kZXhPZihjKSAhPT0gLTE7XG4gICAgY29uc3QgaXNOZXdMaW5lQ2hhciA9IGMgPT4gYyA9PT0gJ1xcbicgfHwgYyA9PT0gJ1xccic7XG4gICAgY29uc3QgaXNOZXdsaW5lID0gKHRleHQsIGlkeCkgPT4gaWR4IDwgdGV4dC5sZW5ndGggJiYgaWR4ID49IDAgPyBpc05ld0xpbmVDaGFyKHRleHRbaWR4XSkgOiBmYWxzZTtcbiAgICBjb25zdCBub3JtYWxpemUkNCA9ICh0ZXh0LCB0YWJTcGFjZXMgPSA0LCBpc1N0YXJ0T2ZDb250ZW50ID0gdHJ1ZSwgaXNFbmRPZkNvbnRlbnQgPSB0cnVlKSA9PiB7XG4gICAgICBjb25zdCB0YWJTcGFjZSA9IHJlcGVhdCgnICcsIHRhYlNwYWNlcyk7XG4gICAgICBjb25zdCBub3JtYWxpemVkVGV4dCA9IHRleHQucmVwbGFjZSgvXFx0L2csIHRhYlNwYWNlKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvbGRsKG5vcm1hbGl6ZWRUZXh0LCAoYWNjLCBjKSA9PiB7XG4gICAgICAgIGlmIChpc0NvbGxhcHNpYmxlV2hpdGVzcGFjZSQxKGMpIHx8IGMgPT09IG5ic3ApIHtcbiAgICAgICAgICBpZiAoYWNjLnBjSXNTcGFjZSB8fCBhY2Muc3RyID09PSAnJyAmJiBpc1N0YXJ0T2ZDb250ZW50IHx8IGFjYy5zdHIubGVuZ3RoID09PSBub3JtYWxpemVkVGV4dC5sZW5ndGggLSAxICYmIGlzRW5kT2ZDb250ZW50IHx8IGlzTmV3bGluZShub3JtYWxpemVkVGV4dCwgYWNjLnN0ci5sZW5ndGggKyAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgcGNJc1NwYWNlOiBmYWxzZSxcbiAgICAgICAgICAgICAgc3RyOiBhY2Muc3RyICsgbmJzcFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgcGNJc1NwYWNlOiB0cnVlLFxuICAgICAgICAgICAgICBzdHI6IGFjYy5zdHIgKyAnICdcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwY0lzU3BhY2U6IGlzTmV3TGluZUNoYXIoYyksXG4gICAgICAgICAgICBzdHI6IGFjYy5zdHIgKyBjXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBwY0lzU3BhY2U6IGZhbHNlLFxuICAgICAgICBzdHI6ICcnXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQuc3RyO1xuICAgIH07XG5cbiAgICBjb25zdCBoYXNXaGl0ZXNwYWNlUHJlc2VydmVQYXJlbnQgPSAobm9kZSwgcm9vdE5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHJvb3RFbGVtZW50ID0gU3VnYXJFbGVtZW50LmZyb21Eb20ocm9vdE5vZGUpO1xuICAgICAgY29uc3Qgc3RhcnROb2RlID0gU3VnYXJFbGVtZW50LmZyb21Eb20obm9kZSk7XG4gICAgICByZXR1cm4gYW5jZXN0b3IkMihzdGFydE5vZGUsICdwcmUsY29kZScsIGN1cnJ5KGVxLCByb290RWxlbWVudCkpO1xuICAgIH07XG4gICAgY29uc3QgaXNXaGl0ZXNwYWNlJDEgPSAobm9kZSwgcm9vdE5vZGUpID0+IHtcbiAgICAgIHJldHVybiBpc1RleHQkYShub2RlKSAmJiBpc1doaXRlc3BhY2VUZXh0KG5vZGUuZGF0YSkgJiYgIWhhc1doaXRlc3BhY2VQcmVzZXJ2ZVBhcmVudChub2RlLCByb290Tm9kZSk7XG4gICAgfTtcbiAgICBjb25zdCBpc05hbWVkQW5jaG9yID0gbm9kZSA9PiB7XG4gICAgICByZXR1cm4gaXNFbGVtZW50JDYobm9kZSkgJiYgbm9kZS5ub2RlTmFtZSA9PT0gJ0EnICYmICFub2RlLmhhc0F0dHJpYnV0ZSgnaHJlZicpICYmIChub2RlLmhhc0F0dHJpYnV0ZSgnbmFtZScpIHx8IG5vZGUuaGFzQXR0cmlidXRlKCdpZCcpKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQ29udGVudCQxID0gKG5vZGUsIHJvb3ROb2RlKSA9PiB7XG4gICAgICByZXR1cm4gaXNDYXJldENhbmRpZGF0ZSQzKG5vZGUpICYmICFpc1doaXRlc3BhY2UkMShub2RlLCByb290Tm9kZSkgfHwgaXNOYW1lZEFuY2hvcihub2RlKSB8fCBpc0Jvb2ttYXJrKG5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgaXNCb29rbWFyayA9IGhhc0F0dHJpYnV0ZSgnZGF0YS1tY2UtYm9va21hcmsnKTtcbiAgICBjb25zdCBpc0JvZ3VzJDEgPSBoYXNBdHRyaWJ1dGUoJ2RhdGEtbWNlLWJvZ3VzJyk7XG4gICAgY29uc3QgaXNCb2d1c0FsbCA9IGhhc0F0dHJpYnV0ZVZhbHVlKCdkYXRhLW1jZS1ib2d1cycsICdhbGwnKTtcbiAgICBjb25zdCBpc0VtcHR5Tm9kZSA9ICh0YXJnZXROb2RlLCBza2lwQm9ndXMpID0+IHtcbiAgICAgIGxldCBickNvdW50ID0gMDtcbiAgICAgIGlmIChpc0NvbnRlbnQkMSh0YXJnZXROb2RlLCB0YXJnZXROb2RlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgbm9kZSA9IHRhcmdldE5vZGUuZmlyc3RDaGlsZDtcbiAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd2Fsa2VyID0gbmV3IERvbVRyZWVXYWxrZXIobm9kZSwgdGFyZ2V0Tm9kZSk7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBpZiAoc2tpcEJvZ3VzKSB7XG4gICAgICAgICAgICBpZiAoaXNCb2d1c0FsbChub2RlKSkge1xuICAgICAgICAgICAgICBub2RlID0gd2Fsa2VyLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzQm9ndXMkMShub2RlKSkge1xuICAgICAgICAgICAgICBub2RlID0gd2Fsa2VyLm5leHQoKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0JyJDYobm9kZSkpIHtcbiAgICAgICAgICAgIGJyQ291bnQrKztcbiAgICAgICAgICAgIG5vZGUgPSB3YWxrZXIubmV4dCgpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0NvbnRlbnQkMShub2RlLCB0YXJnZXROb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBub2RlID0gd2Fsa2VyLm5leHQoKTtcbiAgICAgICAgfSB3aGlsZSAobm9kZSk7XG4gICAgICAgIHJldHVybiBickNvdW50IDw9IDE7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc0VtcHR5JDIgPSAoZWxtLCBza2lwQm9ndXMgPSB0cnVlKSA9PiBpc0VtcHR5Tm9kZShlbG0uZG9tLCBza2lwQm9ndXMpO1xuXG4gICAgY29uc3QgdHJhbnNwYXJlbnRCbG9ja0F0dHIgPSAnZGF0YS1tY2UtYmxvY2snO1xuICAgIGNvbnN0IGVsZW1lbnROYW1lcyA9IG1hcCA9PiBmaWx0ZXIkNShrZXlzKG1hcCksIGtleSA9PiAhL1tBLVpdLy50ZXN0KGtleSkpO1xuICAgIGNvbnN0IG1ha2VTZWxlY3RvckZyb21TY2hlbWFNYXAgPSBtYXAgPT4gZWxlbWVudE5hbWVzKG1hcCkuam9pbignLCcpO1xuICAgIGNvbnN0IHVwZGF0ZVRyYW5zcGFyZW50ID0gKGJsb2Nrc1NlbGVjdG9yLCB0cmFuc3BhcmVudCkgPT4ge1xuICAgICAgaWYgKGlzTm9uTnVsbGFibGUodHJhbnNwYXJlbnQucXVlcnlTZWxlY3RvcihibG9ja3NTZWxlY3RvcikpKSB7XG4gICAgICAgIHRyYW5zcGFyZW50LnNldEF0dHJpYnV0ZSh0cmFuc3BhcmVudEJsb2NrQXR0ciwgJ3RydWUnKTtcbiAgICAgICAgaWYgKHRyYW5zcGFyZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1tY2Utc2VsZWN0ZWQnKSA9PT0gJ2lubGluZS1ib3VuZGFyeScpIHtcbiAgICAgICAgICB0cmFuc3BhcmVudC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbWNlLXNlbGVjdGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc3BhcmVudC5yZW1vdmVBdHRyaWJ1dGUodHJhbnNwYXJlbnRCbG9ja0F0dHIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVCbG9ja1N0YXRlT25DaGlsZHJlbiA9IChzY2hlbWEsIHNjb3BlKSA9PiB7XG4gICAgICBjb25zdCB0cmFuc3BhcmVudFNlbGVjdG9yID0gbWFrZVNlbGVjdG9yRnJvbVNjaGVtYU1hcChzY2hlbWEuZ2V0VHJhbnNwYXJlbnRFbGVtZW50cygpKTtcbiAgICAgIGNvbnN0IGJsb2Nrc1NlbGVjdG9yID0gbWFrZVNlbGVjdG9yRnJvbVNjaGVtYU1hcChzY2hlbWEuZ2V0QmxvY2tFbGVtZW50cygpKTtcbiAgICAgIHJldHVybiBmaWx0ZXIkNShzY29wZS5xdWVyeVNlbGVjdG9yQWxsKHRyYW5zcGFyZW50U2VsZWN0b3IpLCB0cmFuc3BhcmVudCA9PiB1cGRhdGVUcmFuc3BhcmVudChibG9ja3NTZWxlY3RvciwgdHJhbnNwYXJlbnQpKTtcbiAgICB9O1xuICAgIGNvbnN0IHRyaW1FZGdlID0gKGVsLCBsZWZ0U2lkZSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgY2hpbGRQcm9wZXJ0eU5hbWUgPSBsZWZ0U2lkZSA/ICdsYXN0Q2hpbGQnIDogJ2ZpcnN0Q2hpbGQnO1xuICAgICAgZm9yIChsZXQgY2hpbGQgPSBlbFtjaGlsZFByb3BlcnR5TmFtZV07IGNoaWxkOyBjaGlsZCA9IGNoaWxkW2NoaWxkUHJvcGVydHlOYW1lXSkge1xuICAgICAgICBpZiAoaXNFbXB0eSQyKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGNoaWxkKSkpIHtcbiAgICAgICAgICAoX2EgPSBjaGlsZC5wYXJlbnROb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc3BsaXQkMiA9IChwYXJlbnRFbG0sIHNwbGl0RWxtKSA9PiB7XG4gICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICBjb25zdCBwYXJlbnROb2RlID0gcGFyZW50RWxtLnBhcmVudE5vZGU7XG4gICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICByYW5nZS5zZXRTdGFydEJlZm9yZShwYXJlbnRFbG0pO1xuICAgICAgICByYW5nZS5zZXRFbmRCZWZvcmUoc3BsaXRFbG0pO1xuICAgICAgICBjb25zdCBiZWZvcmVGcmFnbWVudCA9IHJhbmdlLmV4dHJhY3RDb250ZW50cygpO1xuICAgICAgICB0cmltRWRnZShiZWZvcmVGcmFnbWVudCwgdHJ1ZSk7XG4gICAgICAgIHJhbmdlLnNldFN0YXJ0QWZ0ZXIoc3BsaXRFbG0pO1xuICAgICAgICByYW5nZS5zZXRFbmRBZnRlcihwYXJlbnRFbG0pO1xuICAgICAgICBjb25zdCBhZnRlckZyYWdtZW50ID0gcmFuZ2UuZXh0cmFjdENvbnRlbnRzKCk7XG4gICAgICAgIHRyaW1FZGdlKGFmdGVyRnJhZ21lbnQsIGZhbHNlKTtcbiAgICAgICAgaWYgKCFpc0VtcHR5JDIoU3VnYXJFbGVtZW50LmZyb21Eb20oYmVmb3JlRnJhZ21lbnQpKSkge1xuICAgICAgICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGJlZm9yZUZyYWdtZW50LCBwYXJlbnRFbG0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFbXB0eSQyKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHNwbGl0RWxtKSkpIHtcbiAgICAgICAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShzcGxpdEVsbSwgcGFyZW50RWxtKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRW1wdHkkMihTdWdhckVsZW1lbnQuZnJvbURvbShhZnRlckZyYWdtZW50KSkpIHtcbiAgICAgICAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShhZnRlckZyYWdtZW50LCBwYXJlbnRFbG0pO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocGFyZW50RWxtKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNwbGl0SW52YWxpZENoaWxkcmVuID0gKHNjaGVtYSwgc2NvcGUsIHRyYW5zcGFyZW50QmxvY2tzKSA9PiB7XG4gICAgICBjb25zdCBibG9ja3NFbGVtZW50cyA9IHNjaGVtYS5nZXRCbG9ja0VsZW1lbnRzKCk7XG4gICAgICBjb25zdCByb290Tm9kZSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHNjb3BlKTtcbiAgICAgIGNvbnN0IGlzQmxvY2sgPSBlbCA9PiBuYW1lKGVsKSBpbiBibG9ja3NFbGVtZW50cztcbiAgICAgIGNvbnN0IGlzUm9vdCA9IGVsID0+IGVxKGVsLCByb290Tm9kZSk7XG4gICAgICBlYWNoJGUoZnJvbURvbSQxKHRyYW5zcGFyZW50QmxvY2tzKSwgdHJhbnNwYXJlbnRCbG9jayA9PiB7XG4gICAgICAgIGFuY2VzdG9yJDQodHJhbnNwYXJlbnRCbG9jaywgaXNCbG9jaywgaXNSb290KS5lYWNoKHBhcmVudEJsb2NrID0+IHtcbiAgICAgICAgICBjb25zdCBpbnZhbGlkQ2hpbGRyZW4gPSBjaGlsZHJlbih0cmFuc3BhcmVudEJsb2NrLCBlbCA9PiBpc0Jsb2NrKGVsKSAmJiAhc2NoZW1hLmlzVmFsaWRDaGlsZChuYW1lKHBhcmVudEJsb2NrKSwgbmFtZShlbCkpKTtcbiAgICAgICAgICBpZiAoaW52YWxpZENoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlU2NvcGUgPSBwYXJlbnRFbGVtZW50KHBhcmVudEJsb2NrKTtcbiAgICAgICAgICAgIGVhY2gkZShpbnZhbGlkQ2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgICAgICAgYW5jZXN0b3IkNChjaGlsZCwgaXNCbG9jaywgaXNSb290KS5lYWNoKHBhcmVudEJsb2NrID0+IHtcbiAgICAgICAgICAgICAgICBzcGxpdCQyKHBhcmVudEJsb2NrLmRvbSwgY2hpbGQuZG9tKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHN0YXRlU2NvcGUuZWFjaChzY29wZSA9PiB1cGRhdGVCbG9ja1N0YXRlT25DaGlsZHJlbihzY2hlbWEsIHNjb3BlLmRvbSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHVud3JhcEludmFsaWRDaGlsZHJlbiA9IChzY2hlbWEsIHNjb3BlLCB0cmFuc3BhcmVudEJsb2NrcykgPT4ge1xuICAgICAgZWFjaCRlKFtcbiAgICAgICAgLi4udHJhbnNwYXJlbnRCbG9ja3MsXG4gICAgICAgIC4uLmlzVHJhbnNwYXJlbnRCbG9jayhzY2hlbWEsIHNjb3BlKSA/IFtzY29wZV0gOiBbXVxuICAgICAgXSwgYmxvY2sgPT4gZWFjaCRlKGRlc2NlbmRhbnRzKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGJsb2NrKSwgYmxvY2subm9kZU5hbWUudG9Mb3dlckNhc2UoKSksIGVsbSA9PiB7XG4gICAgICAgIGlmIChpc1RyYW5zcGFyZW50SW5saW5lKHNjaGVtYSwgZWxtLmRvbSkpIHtcbiAgICAgICAgICB1bndyYXAoZWxtKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH07XG4gICAgY29uc3QgdXBkYXRlQ2hpbGRyZW4gPSAoc2NoZW1hLCBzY29wZSkgPT4ge1xuICAgICAgY29uc3QgdHJhbnNwYXJlbnRCbG9ja3MgPSB1cGRhdGVCbG9ja1N0YXRlT25DaGlsZHJlbihzY2hlbWEsIHNjb3BlKTtcbiAgICAgIHNwbGl0SW52YWxpZENoaWxkcmVuKHNjaGVtYSwgc2NvcGUsIHRyYW5zcGFyZW50QmxvY2tzKTtcbiAgICAgIHVud3JhcEludmFsaWRDaGlsZHJlbihzY2hlbWEsIHNjb3BlLCB0cmFuc3BhcmVudEJsb2Nrcyk7XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVFbGVtZW50ID0gKHNjaGVtYSwgdGFyZ2V0KSA9PiB7XG4gICAgICBpZiAoaXNUcmFuc3BhcmVudEVsZW1lbnQoc2NoZW1hLCB0YXJnZXQpKSB7XG4gICAgICAgIGNvbnN0IGJsb2Nrc1NlbGVjdG9yID0gbWFrZVNlbGVjdG9yRnJvbVNjaGVtYU1hcChzY2hlbWEuZ2V0QmxvY2tFbGVtZW50cygpKTtcbiAgICAgICAgdXBkYXRlVHJhbnNwYXJlbnQoYmxvY2tzU2VsZWN0b3IsIHRhcmdldCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVDYXJldCA9IChzY2hlbWEsIHJvb3QsIGNhcmV0UGFyZW50KSA9PiB7XG4gICAgICBjb25zdCBpc1Jvb3QgPSBlbCA9PiBlcShlbCwgU3VnYXJFbGVtZW50LmZyb21Eb20ocm9vdCkpO1xuICAgICAgY29uc3QgcGFyZW50cyA9IHBhcmVudHMkMShTdWdhckVsZW1lbnQuZnJvbURvbShjYXJldFBhcmVudCksIGlzUm9vdCk7XG4gICAgICBnZXQkYihwYXJlbnRzLCBwYXJlbnRzLmxlbmd0aCAtIDIpLmZpbHRlcihpc0VsZW1lbnQkNykuZm9sZCgoKSA9PiB1cGRhdGVDaGlsZHJlbihzY2hlbWEsIHJvb3QpLCBzY29wZSA9PiB1cGRhdGVDaGlsZHJlbihzY2hlbWEsIHNjb3BlLmRvbSkpO1xuICAgIH07XG4gICAgY29uc3QgaGFzQmxvY2tBdHRyID0gZWwgPT4gZWwuaGFzQXR0cmlidXRlKHRyYW5zcGFyZW50QmxvY2tBdHRyKTtcbiAgICBjb25zdCBpc1RyYW5zcGFyZW50RWxlbWVudE5hbWUgPSAoc2NoZW1hLCBuYW1lKSA9PiBoYXMkMihzY2hlbWEuZ2V0VHJhbnNwYXJlbnRFbGVtZW50cygpLCBuYW1lKTtcbiAgICBjb25zdCBpc1RyYW5zcGFyZW50RWxlbWVudCA9IChzY2hlbWEsIG5vZGUpID0+IGlzRWxlbWVudCQ2KG5vZGUpICYmIGlzVHJhbnNwYXJlbnRFbGVtZW50TmFtZShzY2hlbWEsIG5vZGUubm9kZU5hbWUpO1xuICAgIGNvbnN0IGlzVHJhbnNwYXJlbnRCbG9jayA9IChzY2hlbWEsIG5vZGUpID0+IGlzVHJhbnNwYXJlbnRFbGVtZW50KHNjaGVtYSwgbm9kZSkgJiYgaGFzQmxvY2tBdHRyKG5vZGUpO1xuICAgIGNvbnN0IGlzVHJhbnNwYXJlbnRJbmxpbmUgPSAoc2NoZW1hLCBub2RlKSA9PiBpc1RyYW5zcGFyZW50RWxlbWVudChzY2hlbWEsIG5vZGUpICYmICFoYXNCbG9ja0F0dHIobm9kZSk7XG4gICAgY29uc3QgaXNUcmFuc3BhcmVudEFzdEJsb2NrID0gKHNjaGVtYSwgbm9kZSkgPT4gbm9kZS50eXBlID09PSAxICYmIGlzVHJhbnNwYXJlbnRFbGVtZW50TmFtZShzY2hlbWEsIG5vZGUubmFtZSkgJiYgaXNTdHJpbmcobm9kZS5hdHRyKHRyYW5zcGFyZW50QmxvY2tBdHRyKSk7XG5cbiAgICBjb25zdCBicm93c2VyJDIgPSBkZXRlY3QkMigpLmJyb3dzZXI7XG4gICAgY29uc3QgZmlyc3RFbGVtZW50ID0gbm9kZXMgPT4gZmluZCQyKG5vZGVzLCBpc0VsZW1lbnQkNyk7XG4gICAgY29uc3QgZ2V0VGFibGVDYXB0aW9uRGVsdGFZID0gZWxtID0+IHtcbiAgICAgIGlmIChicm93c2VyJDIuaXNGaXJlZm94KCkgJiYgbmFtZShlbG0pID09PSAndGFibGUnKSB7XG4gICAgICAgIHJldHVybiBmaXJzdEVsZW1lbnQoY2hpbGRyZW4kMShlbG0pKS5maWx0ZXIoZWxtID0+IHtcbiAgICAgICAgICByZXR1cm4gbmFtZShlbG0pID09PSAnY2FwdGlvbic7XG4gICAgICAgIH0pLmJpbmQoY2FwdGlvbiA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZpcnN0RWxlbWVudChuZXh0U2libGluZ3MoY2FwdGlvbikpLm1hcChib2R5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHlUb3AgPSBib2R5LmRvbS5vZmZzZXRUb3A7XG4gICAgICAgICAgICBjb25zdCBjYXB0aW9uVG9wID0gY2FwdGlvbi5kb20ub2Zmc2V0VG9wO1xuICAgICAgICAgICAgY29uc3QgY2FwdGlvbkhlaWdodCA9IGNhcHRpb24uZG9tLm9mZnNldEhlaWdodDtcbiAgICAgICAgICAgIHJldHVybiBib2R5VG9wIDw9IGNhcHRpb25Ub3AgPyAtY2FwdGlvbkhlaWdodCA6IDA7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLmdldE9yKDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoYXNDaGlsZCA9IChlbG0sIGNoaWxkKSA9PiBlbG0uY2hpbGRyZW4gJiYgY29udGFpbnMkMihlbG0uY2hpbGRyZW4sIGNoaWxkKTtcbiAgICBjb25zdCBnZXRQb3MgPSAoYm9keSwgZWxtLCByb290RWxtKSA9PiB7XG4gICAgICBsZXQgeCA9IDAsIHkgPSAwO1xuICAgICAgY29uc3QgZG9jID0gYm9keS5vd25lckRvY3VtZW50O1xuICAgICAgcm9vdEVsbSA9IHJvb3RFbG0gPyByb290RWxtIDogYm9keTtcbiAgICAgIGlmIChlbG0pIHtcbiAgICAgICAgaWYgKHJvb3RFbG0gPT09IGJvZHkgJiYgZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAmJiBnZXQkNyhTdWdhckVsZW1lbnQuZnJvbURvbShib2R5KSwgJ3Bvc2l0aW9uJykgPT09ICdzdGF0aWMnKSB7XG4gICAgICAgICAgY29uc3QgcG9zID0gZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgIHggPSBwb3MubGVmdCArIChkb2MuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgfHwgYm9keS5zY3JvbGxMZWZ0KSAtIGRvYy5kb2N1bWVudEVsZW1lbnQuY2xpZW50TGVmdDtcbiAgICAgICAgICB5ID0gcG9zLnRvcCArIChkb2MuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCB8fCBib2R5LnNjcm9sbFRvcCkgLSBkb2MuZG9jdW1lbnRFbGVtZW50LmNsaWVudFRvcDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeCxcbiAgICAgICAgICAgIHlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCBvZmZzZXRQYXJlbnQgPSBlbG07XG4gICAgICAgIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0UGFyZW50ICE9PSByb290RWxtICYmIG9mZnNldFBhcmVudC5ub2RlVHlwZSAmJiAhaGFzQ2hpbGQob2Zmc2V0UGFyZW50LCByb290RWxtKSkge1xuICAgICAgICAgIGNvbnN0IGNhc3RPZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQ7XG4gICAgICAgICAgeCArPSBjYXN0T2Zmc2V0UGFyZW50Lm9mZnNldExlZnQgfHwgMDtcbiAgICAgICAgICB5ICs9IGNhc3RPZmZzZXRQYXJlbnQub2Zmc2V0VG9wIHx8IDA7XG4gICAgICAgICAgb2Zmc2V0UGFyZW50ID0gY2FzdE9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgb2Zmc2V0UGFyZW50ID0gZWxtLnBhcmVudE5vZGU7XG4gICAgICAgIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0UGFyZW50ICE9PSByb290RWxtICYmIG9mZnNldFBhcmVudC5ub2RlVHlwZSAmJiAhaGFzQ2hpbGQob2Zmc2V0UGFyZW50LCByb290RWxtKSkge1xuICAgICAgICAgIHggLT0gb2Zmc2V0UGFyZW50LnNjcm9sbExlZnQgfHwgMDtcbiAgICAgICAgICB5IC09IG9mZnNldFBhcmVudC5zY3JvbGxUb3AgfHwgMDtcbiAgICAgICAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICB5ICs9IGdldFRhYmxlQ2FwdGlvbkRlbHRhWShTdWdhckVsZW1lbnQuZnJvbURvbShlbG0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IFN0eWxlU2hlZXRMb2FkZXIgPSAoZG9jdW1lbnRPclNoYWRvd1Jvb3QsIHNldHRpbmdzID0ge30pID0+IHtcbiAgICAgIGxldCBpZENvdW50ID0gMDtcbiAgICAgIGNvbnN0IGxvYWRlZFN0YXRlcyA9IHt9O1xuICAgICAgY29uc3QgZWRvcyA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGRvY3VtZW50T3JTaGFkb3dSb290KTtcbiAgICAgIGNvbnN0IGRvYyA9IGRvY3VtZW50T3JPd25lcihlZG9zKTtcbiAgICAgIGNvbnN0IF9zZXRSZWZlcnJlclBvbGljeSA9IHJlZmVycmVyUG9saWN5ID0+IHtcbiAgICAgICAgc2V0dGluZ3MucmVmZXJyZXJQb2xpY3kgPSByZWZlcnJlclBvbGljeTtcbiAgICAgIH07XG4gICAgICBjb25zdCBfc2V0Q29udGVudENzc0NvcnMgPSBjb250ZW50Q3NzQ29ycyA9PiB7XG4gICAgICAgIHNldHRpbmdzLmNvbnRlbnRDc3NDb3JzID0gY29udGVudENzc0NvcnM7XG4gICAgICB9O1xuICAgICAgY29uc3QgYWRkU3R5bGUgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgYXBwZW5kJDEoZ2V0U3R5bGVDb250YWluZXIoZWRvcyksIGVsZW1lbnQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlbW92ZVN0eWxlID0gaWQgPT4ge1xuICAgICAgICBjb25zdCBzdHlsZUNvbnRhaW5lciA9IGdldFN0eWxlQ29udGFpbmVyKGVkb3MpO1xuICAgICAgICBkZXNjZW5kYW50KHN0eWxlQ29udGFpbmVyLCAnIycgKyBpZCkuZWFjaChyZW1vdmUkNSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0T3JDcmVhdGVTdGF0ZSA9IHVybCA9PiBnZXQkYShsb2FkZWRTdGF0ZXMsIHVybCkuZ2V0T3JUaHVuaygoKSA9PiAoe1xuICAgICAgICBpZDogJ21jZS11JyArIGlkQ291bnQrKyxcbiAgICAgICAgcGFzc2VkOiBbXSxcbiAgICAgICAgZmFpbGVkOiBbXSxcbiAgICAgICAgY291bnQ6IDBcbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IGxvYWQgPSB1cmwgPT4gbmV3IFByb21pc2UoKHN1Y2Nlc3MsIGZhaWx1cmUpID0+IHtcbiAgICAgICAgbGV0IGxpbms7XG4gICAgICAgIGNvbnN0IHVybFdpdGhTdWZmaXggPSBUb29scy5fYWRkQ2FjaGVTdWZmaXgodXJsKTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBnZXRPckNyZWF0ZVN0YXRlKHVybFdpdGhTdWZmaXgpO1xuICAgICAgICBsb2FkZWRTdGF0ZXNbdXJsV2l0aFN1ZmZpeF0gPSBzdGF0ZTtcbiAgICAgICAgc3RhdGUuY291bnQrKztcbiAgICAgICAgY29uc3QgcmVzb2x2ZSA9IChjYWxsYmFja3MsIHN0YXR1cykgPT4ge1xuICAgICAgICAgIGVhY2gkZShjYWxsYmFja3MsIGNhbGwpO1xuICAgICAgICAgIHN0YXRlLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgICBzdGF0ZS5wYXNzZWQgPSBbXTtcbiAgICAgICAgICBzdGF0ZS5mYWlsZWQgPSBbXTtcbiAgICAgICAgICBpZiAobGluaykge1xuICAgICAgICAgICAgbGluay5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgbGluay5vbmVycm9yID0gbnVsbDtcbiAgICAgICAgICAgIGxpbmsgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcGFzc2VkID0gKCkgPT4gcmVzb2x2ZShzdGF0ZS5wYXNzZWQsIDIpO1xuICAgICAgICBjb25zdCBmYWlsZWQgPSAoKSA9PiByZXNvbHZlKHN0YXRlLmZhaWxlZCwgMyk7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgc3RhdGUucGFzc2VkLnB1c2goc3VjY2Vzcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZhaWx1cmUpIHtcbiAgICAgICAgICBzdGF0ZS5mYWlsZWQucHVzaChmYWlsdXJlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUuc3RhdHVzID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZS5zdGF0dXMgPT09IDIpIHtcbiAgICAgICAgICBwYXNzZWQoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlLnN0YXR1cyA9PT0gMykge1xuICAgICAgICAgIGZhaWxlZCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5zdGF0dXMgPSAxO1xuICAgICAgICBjb25zdCBsaW5rRWxlbSA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdsaW5rJywgZG9jLmRvbSk7XG4gICAgICAgIHNldEFsbCQxKGxpbmtFbGVtLCB7XG4gICAgICAgICAgcmVsOiAnc3R5bGVzaGVldCcsXG4gICAgICAgICAgdHlwZTogJ3RleHQvY3NzJyxcbiAgICAgICAgICBpZDogc3RhdGUuaWRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChzZXR0aW5ncy5jb250ZW50Q3NzQ29ycykge1xuICAgICAgICAgIHNldCQzKGxpbmtFbGVtLCAnY3Jvc3NPcmlnaW4nLCAnYW5vbnltb3VzJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNldHRpbmdzLnJlZmVycmVyUG9saWN5KSB7XG4gICAgICAgICAgc2V0JDMobGlua0VsZW0sICdyZWZlcnJlcnBvbGljeScsIHNldHRpbmdzLnJlZmVycmVyUG9saWN5KTtcbiAgICAgICAgfVxuICAgICAgICBsaW5rID0gbGlua0VsZW0uZG9tO1xuICAgICAgICBsaW5rLm9ubG9hZCA9IHBhc3NlZDtcbiAgICAgICAgbGluay5vbmVycm9yID0gZmFpbGVkO1xuICAgICAgICBhZGRTdHlsZShsaW5rRWxlbSk7XG4gICAgICAgIHNldCQzKGxpbmtFbGVtLCAnaHJlZicsIHVybFdpdGhTdWZmaXgpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBsb2FkQWxsID0gdXJscyA9PiB7XG4gICAgICAgIGNvbnN0IGxvYWRlZFVybHMgPSBQcm9taXNlLmFsbFNldHRsZWQobWFwJDModXJscywgdXJsID0+IGxvYWQodXJsKS50aGVuKGNvbnN0YW50KHVybCkpKSk7XG4gICAgICAgIHJldHVybiBsb2FkZWRVcmxzLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgY29uc3QgcGFydHMgPSBwYXJ0aXRpb24kMihyZXN1bHRzLCByID0+IHIuc3RhdHVzID09PSAnZnVsZmlsbGVkJyk7XG4gICAgICAgICAgaWYgKHBhcnRzLmZhaWwubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG1hcCQzKHBhcnRzLmZhaWwsIHJlc3VsdCA9PiByZXN1bHQucmVhc29uKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBtYXAkMyhwYXJ0cy5wYXNzLCByZXN1bHQgPT4gcmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVubG9hZCA9IHVybCA9PiB7XG4gICAgICAgIGNvbnN0IHVybFdpdGhTdWZmaXggPSBUb29scy5fYWRkQ2FjaGVTdWZmaXgodXJsKTtcbiAgICAgICAgZ2V0JGEobG9hZGVkU3RhdGVzLCB1cmxXaXRoU3VmZml4KS5lYWNoKHN0YXRlID0+IHtcbiAgICAgICAgICBjb25zdCBjb3VudCA9IC0tc3RhdGUuY291bnQ7XG4gICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICBkZWxldGUgbG9hZGVkU3RhdGVzW3VybFdpdGhTdWZmaXhdO1xuICAgICAgICAgICAgcmVtb3ZlU3R5bGUoc3RhdGUuaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdW5sb2FkQWxsID0gdXJscyA9PiB7XG4gICAgICAgIGVhY2gkZSh1cmxzLCB1cmwgPT4ge1xuICAgICAgICAgIHVubG9hZCh1cmwpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsb2FkLFxuICAgICAgICBsb2FkQWxsLFxuICAgICAgICB1bmxvYWQsXG4gICAgICAgIHVubG9hZEFsbCxcbiAgICAgICAgX3NldFJlZmVycmVyUG9saWN5LFxuICAgICAgICBfc2V0Q29udGVudENzc0NvcnNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGNyZWF0ZSRkID0gKCkgPT4ge1xuICAgICAgY29uc3QgbWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgIGNvbnN0IGZvckVsZW1lbnQgPSAocmVmZXJlbmNlRWxlbWVudCwgc2V0dGluZ3MpID0+IHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IGdldFJvb3ROb2RlKHJlZmVyZW5jZUVsZW1lbnQpO1xuICAgICAgICBjb25zdCByb290RG9tID0gcm9vdC5kb207XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKG1hcC5nZXQocm9vdERvbSkpLmdldE9yVGh1bmsoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNsID0gU3R5bGVTaGVldExvYWRlcihyb290RG9tLCBzZXR0aW5ncyk7XG4gICAgICAgICAgbWFwLnNldChyb290RG9tLCBzbCk7XG4gICAgICAgICAgcmV0dXJuIHNsO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBmb3JFbGVtZW50IH07XG4gICAgfTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGNyZWF0ZSRkKCk7XG5cbiAgICBjb25zdCBpc1NwYW4gPSBub2RlID0+IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3NwYW4nO1xuICAgIGNvbnN0IGlzSW5saW5lQ29udGVudCA9IChub2RlLCByb290KSA9PiBpc05vbk51bGxhYmxlKG5vZGUpICYmIChpc0NvbnRlbnQkMShub2RlLCByb290KSB8fCBpc0lubGluZSQxKFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5vZGUpKSk7XG4gICAgY29uc3Qgc3Vycm91bmRlZEJ5SW5saW5lQ29udGVudCA9IChub2RlLCByb290KSA9PiB7XG4gICAgICBjb25zdCBwcmV2ID0gbmV3IERvbVRyZWVXYWxrZXIobm9kZSwgcm9vdCkucHJldihmYWxzZSk7XG4gICAgICBjb25zdCBuZXh0ID0gbmV3IERvbVRyZWVXYWxrZXIobm9kZSwgcm9vdCkubmV4dChmYWxzZSk7XG4gICAgICBjb25zdCBwcmV2SXNJbmxpbmUgPSBpc1VuZGVmaW5lZChwcmV2KSB8fCBpc0lubGluZUNvbnRlbnQocHJldiwgcm9vdCk7XG4gICAgICBjb25zdCBuZXh0SXNJbmxpbmUgPSBpc1VuZGVmaW5lZChuZXh0KSB8fCBpc0lubGluZUNvbnRlbnQobmV4dCwgcm9vdCk7XG4gICAgICByZXR1cm4gcHJldklzSW5saW5lICYmIG5leHRJc0lubGluZTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQm9va21hcmtOb2RlJDIgPSBub2RlID0+IGlzU3Bhbihub2RlKSAmJiBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1tY2UtdHlwZScpID09PSAnYm9va21hcmsnO1xuICAgIGNvbnN0IGlzS2VlcFRleHROb2RlID0gKG5vZGUsIHJvb3QpID0+IGlzVGV4dCRhKG5vZGUpICYmIG5vZGUuZGF0YS5sZW5ndGggPiAwICYmIHN1cnJvdW5kZWRCeUlubGluZUNvbnRlbnQobm9kZSwgcm9vdCk7XG4gICAgY29uc3QgaXNLZWVwRWxlbWVudCA9IG5vZGUgPT4gaXNFbGVtZW50JDYobm9kZSkgPyBub2RlLmNoaWxkTm9kZXMubGVuZ3RoID4gMCA6IGZhbHNlO1xuICAgIGNvbnN0IGlzRG9jdW1lbnQgPSBub2RlID0+IGlzRG9jdW1lbnRGcmFnbWVudChub2RlKSB8fCBpc0RvY3VtZW50JDEobm9kZSk7XG4gICAgY29uc3QgdHJpbU5vZGUgPSAoZG9tLCBub2RlLCByb290KSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCByb290Tm9kZSA9IHJvb3QgfHwgbm9kZTtcbiAgICAgIGlmIChpc0VsZW1lbnQkNihub2RlKSAmJiBpc0Jvb2ttYXJrTm9kZSQyKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfVxuICAgICAgY29uc3QgY2hpbGRyZW4gPSBub2RlLmNoaWxkTm9kZXM7XG4gICAgICBmb3IgKGxldCBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdHJpbU5vZGUoZG9tLCBjaGlsZHJlbltpXSwgcm9vdE5vZGUpO1xuICAgICAgfVxuICAgICAgaWYgKGlzRWxlbWVudCQ2KG5vZGUpKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDaGlsZHJlbiA9IG5vZGUuY2hpbGROb2RlcztcbiAgICAgICAgaWYgKGN1cnJlbnRDaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgaXNCb29rbWFya05vZGUkMihjdXJyZW50Q2hpbGRyZW5bMF0pKSB7XG4gICAgICAgICAgKF9hID0gbm9kZS5wYXJlbnROb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaW5zZXJ0QmVmb3JlKGN1cnJlbnRDaGlsZHJlblswXSwgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghaXNEb2N1bWVudChub2RlKSAmJiAhaXNDb250ZW50JDEobm9kZSwgcm9vdE5vZGUpICYmICFpc0tlZXBFbGVtZW50KG5vZGUpICYmICFpc0tlZXBUZXh0Tm9kZShub2RlLCByb290Tm9kZSkpIHtcbiAgICAgICAgZG9tLnJlbW92ZShub2RlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlO1xuICAgIH07XG5cbiAgICBjb25zdCBtYWtlTWFwJDMgPSBUb29scy5tYWtlTWFwO1xuICAgIGNvbnN0IGF0dHJzQ2hhcnNSZWdFeHAgPSAvWyY8PlxcXCJcXHUwMDYwXFx1MDA3RS1cXHVEN0ZGXFx1RTAwMC1cXHVGRkVGXXxbXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdL2c7XG4gICAgY29uc3QgdGV4dENoYXJzUmVnRXhwID0gL1s8PiZcXHUwMDdFLVxcdUQ3RkZcXHVFMDAwLVxcdUZGRUZdfFtcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0vZztcbiAgICBjb25zdCByYXdDaGFyc1JlZ0V4cCA9IC9bPD4mXFxcIlxcJ10vZztcbiAgICBjb25zdCBlbnRpdHlSZWdFeHAgPSAvJiMoW2EtejAtOV0rKTs/fCYoW2EtejAtOV0rKTsvZ2k7XG4gICAgY29uc3QgYXNjaWlNYXAgPSB7XG4gICAgICAxMjg6ICdcXHUyMEFDJyxcbiAgICAgIDEzMDogJ1xcdTIwMUEnLFxuICAgICAgMTMxOiAnXFx1MDE5MicsXG4gICAgICAxMzI6ICdcXHUyMDFFJyxcbiAgICAgIDEzMzogJ1xcdTIwMjYnLFxuICAgICAgMTM0OiAnXFx1MjAyMCcsXG4gICAgICAxMzU6ICdcXHUyMDIxJyxcbiAgICAgIDEzNjogJ1xcdTAyYzYnLFxuICAgICAgMTM3OiAnXFx1MjAzMCcsXG4gICAgICAxMzg6ICdcXHUwMTYwJyxcbiAgICAgIDEzOTogJ1xcdTIwMzknLFxuICAgICAgMTQwOiAnXFx1MDE1MicsXG4gICAgICAxNDI6ICdcXHUwMTdkJyxcbiAgICAgIDE0NTogJ1xcdTIwMTgnLFxuICAgICAgMTQ2OiAnXFx1MjAxOScsXG4gICAgICAxNDc6ICdcXHUyMDFDJyxcbiAgICAgIDE0ODogJ1xcdTIwMUQnLFxuICAgICAgMTQ5OiAnXFx1MjAyMicsXG4gICAgICAxNTA6ICdcXHUyMDEzJyxcbiAgICAgIDE1MTogJ1xcdTIwMTQnLFxuICAgICAgMTUyOiAnXFx1MDJEQycsXG4gICAgICAxNTM6ICdcXHUyMTIyJyxcbiAgICAgIDE1NDogJ1xcdTAxNjEnLFxuICAgICAgMTU1OiAnXFx1MjAzQScsXG4gICAgICAxNTY6ICdcXHUwMTUzJyxcbiAgICAgIDE1ODogJ1xcdTAxN2UnLFxuICAgICAgMTU5OiAnXFx1MDE3OCdcbiAgICB9O1xuICAgIGNvbnN0IGJhc2VFbnRpdGllcyA9IHtcbiAgICAgICdcIic6ICcmcXVvdDsnLFxuICAgICAgJ1xcJyc6ICcmIzM5OycsXG4gICAgICAnPCc6ICcmbHQ7JyxcbiAgICAgICc+JzogJyZndDsnLFxuICAgICAgJyYnOiAnJmFtcDsnLFxuICAgICAgJ2AnOiAnJiM5NjsnXG4gICAgfTtcbiAgICBjb25zdCByZXZlcnNlRW50aXRpZXMgPSB7XG4gICAgICAnJmx0Oyc6ICc8JyxcbiAgICAgICcmZ3Q7JzogJz4nLFxuICAgICAgJyZhbXA7JzogJyYnLFxuICAgICAgJyZxdW90Oyc6ICdcIicsXG4gICAgICAnJmFwb3M7JzogYCdgXG4gICAgfTtcbiAgICBjb25zdCBuYXRpdmVEZWNvZGUgPSB0ZXh0ID0+IHtcbiAgICAgIGNvbnN0IGVsbSA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdkaXYnKS5kb207XG4gICAgICBlbG0uaW5uZXJIVE1MID0gdGV4dDtcbiAgICAgIHJldHVybiBlbG0udGV4dENvbnRlbnQgfHwgZWxtLmlubmVyVGV4dCB8fCB0ZXh0O1xuICAgIH07XG4gICAgY29uc3QgYnVpbGRFbnRpdGllc0xvb2t1cCA9IChpdGVtcywgcmFkaXgpID0+IHtcbiAgICAgIGNvbnN0IGxvb2t1cCA9IHt9O1xuICAgICAgaWYgKGl0ZW1zKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1MaXN0ID0gaXRlbXMuc3BsaXQoJywnKTtcbiAgICAgICAgcmFkaXggPSByYWRpeCB8fCAxMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtTGlzdC5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgIGNvbnN0IGNociA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoaXRlbUxpc3RbaV0sIHJhZGl4KSk7XG4gICAgICAgICAgaWYgKCFiYXNlRW50aXRpZXNbY2hyXSkge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gJyYnICsgaXRlbUxpc3RbaSArIDFdICsgJzsnO1xuICAgICAgICAgICAgbG9va3VwW2Nocl0gPSBlbnRpdHk7XG4gICAgICAgICAgICBsb29rdXBbZW50aXR5XSA9IGNocjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvb2t1cDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBuYW1lZEVudGl0aWVzID0gYnVpbGRFbnRpdGllc0xvb2t1cCgnNTAsbmJzcCw1MSxpZXhjbCw1MixjZW50LDUzLHBvdW5kLDU0LGN1cnJlbiw1NSx5ZW4sNTYsYnJ2YmFyLDU3LHNlY3QsNTgsdW1sLDU5LGNvcHksJyArICc1YSxvcmRmLDViLGxhcXVvLDVjLG5vdCw1ZCxzaHksNWUscmVnLDVmLG1hY3IsNWcsZGVnLDVoLHBsdXNtbiw1aSxzdXAyLDVqLHN1cDMsNWssYWN1dGUsJyArICc1bCxtaWNybyw1bSxwYXJhLDVuLG1pZGRvdCw1byxjZWRpbCw1cCxzdXAxLDVxLG9yZG0sNXIscmFxdW8sNXMsZnJhYzE0LDV0LGZyYWMxMiw1dSxmcmFjMzQsJyArICc1dixpcXVlc3QsNjAsQWdyYXZlLDYxLEFhY3V0ZSw2MixBY2lyYyw2MyxBdGlsZGUsNjQsQXVtbCw2NSxBcmluZyw2NixBRWxpZyw2NyxDY2VkaWwsJyArICc2OCxFZ3JhdmUsNjksRWFjdXRlLDZhLEVjaXJjLDZiLEV1bWwsNmMsSWdyYXZlLDZkLElhY3V0ZSw2ZSxJY2lyYyw2ZixJdW1sLDZnLEVUSCw2aCxOdGlsZGUsJyArICc2aSxPZ3JhdmUsNmosT2FjdXRlLDZrLE9jaXJjLDZsLE90aWxkZSw2bSxPdW1sLDZuLHRpbWVzLDZvLE9zbGFzaCw2cCxVZ3JhdmUsNnEsVWFjdXRlLCcgKyAnNnIsVWNpcmMsNnMsVXVtbCw2dCxZYWN1dGUsNnUsVEhPUk4sNnYsc3psaWcsNzAsYWdyYXZlLDcxLGFhY3V0ZSw3MixhY2lyYyw3MyxhdGlsZGUsNzQsYXVtbCwnICsgJzc1LGFyaW5nLDc2LGFlbGlnLDc3LGNjZWRpbCw3OCxlZ3JhdmUsNzksZWFjdXRlLDdhLGVjaXJjLDdiLGV1bWwsN2MsaWdyYXZlLDdkLGlhY3V0ZSw3ZSxpY2lyYywnICsgJzdmLGl1bWwsN2csZXRoLDdoLG50aWxkZSw3aSxvZ3JhdmUsN2osb2FjdXRlLDdrLG9jaXJjLDdsLG90aWxkZSw3bSxvdW1sLDduLGRpdmlkZSw3byxvc2xhc2gsJyArICc3cCx1Z3JhdmUsN3EsdWFjdXRlLDdyLHVjaXJjLDdzLHV1bWwsN3QseWFjdXRlLDd1LHRob3JuLDd2LHl1bWwsY2ksZm5vZixzaCxBbHBoYSxzaSxCZXRhLCcgKyAnc2osR2FtbWEsc2ssRGVsdGEsc2wsRXBzaWxvbixzbSxaZXRhLHNuLEV0YSxzbyxUaGV0YSxzcCxJb3RhLHNxLEthcHBhLHNyLExhbWJkYSxzcyxNdSwnICsgJ3N0LE51LHN1LFhpLHN2LE9taWNyb24sdDAsUGksdDEsUmhvLHQzLFNpZ21hLHQ0LFRhdSx0NSxVcHNpbG9uLHQ2LFBoaSx0NyxDaGksdDgsUHNpLCcgKyAndDksT21lZ2EsdGgsYWxwaGEsdGksYmV0YSx0aixnYW1tYSx0ayxkZWx0YSx0bCxlcHNpbG9uLHRtLHpldGEsdG4sZXRhLHRvLHRoZXRhLHRwLGlvdGEsJyArICd0cSxrYXBwYSx0cixsYW1iZGEsdHMsbXUsdHQsbnUsdHUseGksdHYsb21pY3Jvbix1MCxwaSx1MSxyaG8sdTIsc2lnbWFmLHUzLHNpZ21hLHU0LHRhdSwnICsgJ3U1LHVwc2lsb24sdTYscGhpLHU3LGNoaSx1OCxwc2ksdTksb21lZ2EsdWgsdGhldGFzeW0sdWksdXBzaWgsdW0scGl2LDgxMixidWxsLDgxNixoZWxsaXAsJyArICc4MWkscHJpbWUsODFqLFByaW1lLDgxdSxvbGluZSw4MjQsZnJhc2wsODhvLHdlaWVycCw4OGgsaW1hZ2UsODhzLHJlYWwsODkyLHRyYWRlLDg5bCxhbGVmc3ltLCcgKyAnOGNnLGxhcnIsOGNoLHVhcnIsOGNpLHJhcnIsOGNqLGRhcnIsOGNrLGhhcnIsOGRsLGNyYXJyLDhlZyxsQXJyLDhlaCx1QXJyLDhlaSxyQXJyLDhlaixkQXJyLCcgKyAnOGVrLGhBcnIsOGcwLGZvcmFsbCw4ZzIscGFydCw4ZzMsZXhpc3QsOGc1LGVtcHR5LDhnNyxuYWJsYSw4ZzgsaXNpbiw4Zzksbm90aW4sOGdiLG5pLDhnZixwcm9kLCcgKyAnOGdoLHN1bSw4Z2ksbWludXMsOGduLGxvd2FzdCw4Z3EscmFkaWMsOGd0LHByb3AsOGd1LGluZmluLDhoMCxhbmcsOGg3LGFuZCw4aDgsb3IsOGg5LGNhcCw4aGEsY3VwLCcgKyAnOGhiLGludCw4aGssdGhlcmU0LDhocyxzaW0sOGk1LGNvbmcsOGk4LGFzeW1wLDhqMCxuZSw4ajEsZXF1aXYsOGo0LGxlLDhqNSxnZSw4azIsc3ViLDhrMyxzdXAsOGs0LCcgKyAnbnN1Yiw4azYsc3ViZSw4azcsc3VwZSw4a2wsb3BsdXMsOGtuLG90aW1lcyw4bDUscGVycCw4bTUsc2RvdCw4bzgsbGNlaWwsOG85LHJjZWlsLDhvYSxsZmxvb3IsOG9iLCcgKyAncmZsb29yLDhwOSxsYW5nLDhwYSxyYW5nLDllYSxsb3osOWowLHNwYWRlcyw5ajMsY2x1YnMsOWo1LGhlYXJ0cyw5ajYsZGlhbXMsYWksT0VsaWcsYWosb2VsaWcsYjAsJyArICdTY2Fyb24sYjEsc2Nhcm9uLGJvLFl1bWwsbTYsY2lyYyxtcyx0aWxkZSw4MDIsZW5zcCw4MDMsZW1zcCw4MDksdGhpbnNwLDgwYyx6d25qLDgwZCx6d2osODBlLGxybSwnICsgJzgwZixybG0sODBqLG5kYXNoLDgwayxtZGFzaCw4MG8sbHNxdW8sODBwLHJzcXVvLDgwcSxzYnF1byw4MHMsbGRxdW8sODB0LHJkcXVvLDgwdSxiZHF1byw4MTAsZGFnZ2VyLCcgKyAnODExLERhZ2dlciw4MWcscGVybWlsLDgxcCxsc2FxdW8sODFxLHJzYXF1byw4NWMsZXVybycsIDMyKTtcbiAgICBjb25zdCBlbmNvZGVSYXcgPSAodGV4dCwgYXR0cikgPT4gdGV4dC5yZXBsYWNlKGF0dHIgPyBhdHRyc0NoYXJzUmVnRXhwIDogdGV4dENoYXJzUmVnRXhwLCBjaHIgPT4ge1xuICAgICAgcmV0dXJuIGJhc2VFbnRpdGllc1tjaHJdIHx8IGNocjtcbiAgICB9KTtcbiAgICBjb25zdCBlbmNvZGVBbGxSYXcgPSB0ZXh0ID0+ICgnJyArIHRleHQpLnJlcGxhY2UocmF3Q2hhcnNSZWdFeHAsIGNociA9PiB7XG4gICAgICByZXR1cm4gYmFzZUVudGl0aWVzW2Nocl0gfHwgY2hyO1xuICAgIH0pO1xuICAgIGNvbnN0IGVuY29kZU51bWVyaWMgPSAodGV4dCwgYXR0cikgPT4gdGV4dC5yZXBsYWNlKGF0dHIgPyBhdHRyc0NoYXJzUmVnRXhwIDogdGV4dENoYXJzUmVnRXhwLCBjaHIgPT4ge1xuICAgICAgaWYgKGNoci5sZW5ndGggPiAxKSB7XG4gICAgICAgIHJldHVybiAnJiMnICsgKChjaHIuY2hhckNvZGVBdCgwKSAtIDU1Mjk2KSAqIDEwMjQgKyAoY2hyLmNoYXJDb2RlQXQoMSkgLSA1NjMyMCkgKyA2NTUzNikgKyAnOyc7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUVudGl0aWVzW2Nocl0gfHwgJyYjJyArIGNoci5jaGFyQ29kZUF0KDApICsgJzsnO1xuICAgIH0pO1xuICAgIGNvbnN0IGVuY29kZU5hbWVkID0gKHRleHQsIGF0dHIsIGVudGl0aWVzKSA9PiB7XG4gICAgICBjb25zdCByZXNvbHZlRW50aXRpZXMgPSBlbnRpdGllcyB8fCBuYW1lZEVudGl0aWVzO1xuICAgICAgcmV0dXJuIHRleHQucmVwbGFjZShhdHRyID8gYXR0cnNDaGFyc1JlZ0V4cCA6IHRleHRDaGFyc1JlZ0V4cCwgY2hyID0+IHtcbiAgICAgICAgcmV0dXJuIGJhc2VFbnRpdGllc1tjaHJdIHx8IHJlc29sdmVFbnRpdGllc1tjaHJdIHx8IGNocjtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0RW5jb2RlRnVuYyA9IChuYW1lLCBlbnRpdGllcykgPT4ge1xuICAgICAgY29uc3QgZW50aXRpZXNNYXAgPSBidWlsZEVudGl0aWVzTG9va3VwKGVudGl0aWVzKSB8fCBuYW1lZEVudGl0aWVzO1xuICAgICAgY29uc3QgZW5jb2RlTmFtZWRBbmROdW1lcmljID0gKHRleHQsIGF0dHIpID0+IHRleHQucmVwbGFjZShhdHRyID8gYXR0cnNDaGFyc1JlZ0V4cCA6IHRleHRDaGFyc1JlZ0V4cCwgY2hyID0+IHtcbiAgICAgICAgaWYgKGJhc2VFbnRpdGllc1tjaHJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gYmFzZUVudGl0aWVzW2Nocl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudGl0aWVzTWFwW2Nocl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBlbnRpdGllc01hcFtjaHJdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaHIubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHJldHVybiAnJiMnICsgKChjaHIuY2hhckNvZGVBdCgwKSAtIDU1Mjk2KSAqIDEwMjQgKyAoY2hyLmNoYXJDb2RlQXQoMSkgLSA1NjMyMCkgKyA2NTUzNikgKyAnOyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcmIycgKyBjaHIuY2hhckNvZGVBdCgwKSArICc7JztcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jb2RlQ3VzdG9tTmFtZWQgPSAodGV4dCwgYXR0cikgPT4ge1xuICAgICAgICByZXR1cm4gZW5jb2RlTmFtZWQodGV4dCwgYXR0ciwgZW50aXRpZXNNYXApO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG5hbWVNYXAgPSBtYWtlTWFwJDMobmFtZS5yZXBsYWNlKC9cXCsvZywgJywnKSk7XG4gICAgICBpZiAobmFtZU1hcC5uYW1lZCAmJiBuYW1lTWFwLm51bWVyaWMpIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZU5hbWVkQW5kTnVtZXJpYztcbiAgICAgIH1cbiAgICAgIGlmIChuYW1lTWFwLm5hbWVkKSB7XG4gICAgICAgIGlmIChlbnRpdGllcykge1xuICAgICAgICAgIHJldHVybiBlbmNvZGVDdXN0b21OYW1lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW5jb2RlTmFtZWQ7XG4gICAgICB9XG4gICAgICBpZiAobmFtZU1hcC5udW1lcmljKSB7XG4gICAgICAgIHJldHVybiBlbmNvZGVOdW1lcmljO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVuY29kZVJhdztcbiAgICB9O1xuICAgIGNvbnN0IGRlY29kZSA9IHRleHQgPT4gdGV4dC5yZXBsYWNlKGVudGl0eVJlZ0V4cCwgKGFsbCwgbnVtZXJpYykgPT4ge1xuICAgICAgaWYgKG51bWVyaWMpIHtcbiAgICAgICAgaWYgKG51bWVyaWMuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgPT09ICd4Jykge1xuICAgICAgICAgIG51bWVyaWMgPSBwYXJzZUludChudW1lcmljLnN1YnN0cigxKSwgMTYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG51bWVyaWMgPSBwYXJzZUludChudW1lcmljLCAxMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG51bWVyaWMgPiA2NTUzNSkge1xuICAgICAgICAgIG51bWVyaWMgLT0gNjU1MzY7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYgKyAobnVtZXJpYyA+PiAxMCksIDU2MzIwICsgKG51bWVyaWMgJiAxMDIzKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzY2lpTWFwW251bWVyaWNdIHx8IFN0cmluZy5mcm9tQ2hhckNvZGUobnVtZXJpYyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV2ZXJzZUVudGl0aWVzW2FsbF0gfHwgbmFtZWRFbnRpdGllc1thbGxdIHx8IG5hdGl2ZURlY29kZShhbGwpO1xuICAgIH0pO1xuICAgIGNvbnN0IEVudGl0aWVzID0ge1xuICAgICAgZW5jb2RlUmF3LFxuICAgICAgZW5jb2RlQWxsUmF3LFxuICAgICAgZW5jb2RlTnVtZXJpYyxcbiAgICAgIGVuY29kZU5hbWVkLFxuICAgICAgZ2V0RW5jb2RlRnVuYyxcbiAgICAgIGRlY29kZVxuICAgIH07XG5cbiAgICBjb25zdCBzcGxpdCQxID0gKGl0ZW1zLCBkZWxpbSkgPT4ge1xuICAgICAgaXRlbXMgPSBUb29scy50cmltKGl0ZW1zKTtcbiAgICAgIHJldHVybiBpdGVtcyA/IGl0ZW1zLnNwbGl0KGRlbGltIHx8ICcgJykgOiBbXTtcbiAgICB9O1xuICAgIGNvbnN0IHBhdHRlcm5Ub1JlZ0V4cCA9IHN0ciA9PiBuZXcgUmVnRXhwKCdeJyArIHN0ci5yZXBsYWNlKC8oWz8rKl0pL2csICcuJDEnKSArICckJyk7XG5cbiAgICBjb25zdCBwYXJzZUN1c3RvbUVsZW1lbnRzUnVsZXMgPSB2YWx1ZSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21FbGVtZW50UmVnRXhwID0gL14ofik/KC4rKSQvO1xuICAgICAgcmV0dXJuIGJpbmQkMyhzcGxpdCQxKHZhbHVlLCAnLCcpLCBydWxlID0+IHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGN1c3RvbUVsZW1lbnRSZWdFeHAuZXhlYyhydWxlKTtcbiAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICBjb25zdCBpbmxpbmUgPSBtYXRjaGVzWzFdID09PSAnfic7XG4gICAgICAgICAgY29uc3QgY2xvbmVOYW1lID0gaW5saW5lID8gJ3NwYW4nIDogJ2Rpdic7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IG1hdGNoZXNbMl07XG4gICAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgICAgIGlubGluZSxcbiAgICAgICAgICAgICAgY2xvbmVOYW1lLFxuICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICB9XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRFbGVtZW50U2V0c0FzU3RyaW5ncyA9IHR5cGUgPT4ge1xuICAgICAgbGV0IGdsb2JhbEF0dHJpYnV0ZXMsIGJsb2NrQ29udGVudDtcbiAgICAgIGxldCBwaHJhc2luZ0NvbnRlbnQsIGZsb3dDb250ZW50O1xuICAgICAgZ2xvYmFsQXR0cmlidXRlcyA9ICdpZCBhY2Nlc3NrZXkgY2xhc3MgZGlyIGxhbmcgc3R5bGUgdGFiaW5kZXggdGl0bGUgcm9sZSc7XG4gICAgICBibG9ja0NvbnRlbnQgPSAnYWRkcmVzcyBibG9ja3F1b3RlIGRpdiBkbCBmaWVsZHNldCBmb3JtIGgxIGgyIGgzIGg0IGg1IGg2IGhyIG1lbnUgb2wgcCBwcmUgdGFibGUgdWwnO1xuICAgICAgcGhyYXNpbmdDb250ZW50ID0gJ2EgYWJiciBiIGJkbyBiciBidXR0b24gY2l0ZSBjb2RlIGRlbCBkZm4gZW0gZW1iZWQgaSBpZnJhbWUgaW1nIGlucHV0IGlucyBrYmQgJyArICdsYWJlbCBtYXAgbm9zY3JpcHQgb2JqZWN0IHEgcyBzYW1wIHNjcmlwdCBzZWxlY3Qgc21hbGwgc3BhbiBzdHJvbmcgc3ViIHN1cCAnICsgJ3RleHRhcmVhIHUgdmFyICN0ZXh0ICNjb21tZW50JztcbiAgICAgIGlmICh0eXBlICE9PSAnaHRtbDQnKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zcGFyZW50Q29udGVudCA9ICdhIGlucyBkZWwgY2FudmFzIG1hcCc7XG4gICAgICAgIGdsb2JhbEF0dHJpYnV0ZXMgKz0gJyBjb250ZW50ZWRpdGFibGUgY29udGV4dG1lbnUgZHJhZ2dhYmxlIGRyb3B6b25lICcgKyAnaGlkZGVuIHNwZWxsY2hlY2sgdHJhbnNsYXRlJztcbiAgICAgICAgYmxvY2tDb250ZW50ICs9ICcgYXJ0aWNsZSBhc2lkZSBkZXRhaWxzIGRpYWxvZyBmaWd1cmUgbWFpbiBoZWFkZXIgZm9vdGVyIGhncm91cCBzZWN0aW9uIG5hdiAnICsgdHJhbnNwYXJlbnRDb250ZW50O1xuICAgICAgICBwaHJhc2luZ0NvbnRlbnQgKz0gJyBhdWRpbyBjYW52YXMgY29tbWFuZCBkYXRhbGlzdCBtYXJrIG1ldGVyIG91dHB1dCBwaWN0dXJlICcgKyAncHJvZ3Jlc3MgdGltZSB3YnIgdmlkZW8gcnVieSBiZGkga2V5Z2VuJztcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlICE9PSAnaHRtbDUtc3RyaWN0Jykge1xuICAgICAgICBnbG9iYWxBdHRyaWJ1dGVzICs9ICcgeG1sOmxhbmcnO1xuICAgICAgICBjb25zdCBodG1sNFBocmFzaW5nQ29udGVudCA9ICdhY3JvbnltIGFwcGxldCBiYXNlZm9udCBiaWcgZm9udCBzdHJpa2UgdHQnO1xuICAgICAgICBwaHJhc2luZ0NvbnRlbnQgPSBbXG4gICAgICAgICAgcGhyYXNpbmdDb250ZW50LFxuICAgICAgICAgIGh0bWw0UGhyYXNpbmdDb250ZW50XG4gICAgICAgIF0uam9pbignICcpO1xuICAgICAgICBjb25zdCBodG1sNEJsb2NrQ29udGVudCA9ICdjZW50ZXIgZGlyIGlzaW5kZXggbm9mcmFtZXMnO1xuICAgICAgICBibG9ja0NvbnRlbnQgPSBbXG4gICAgICAgICAgYmxvY2tDb250ZW50LFxuICAgICAgICAgIGh0bWw0QmxvY2tDb250ZW50XG4gICAgICAgIF0uam9pbignICcpO1xuICAgICAgICBmbG93Q29udGVudCA9IFtcbiAgICAgICAgICBibG9ja0NvbnRlbnQsXG4gICAgICAgICAgcGhyYXNpbmdDb250ZW50XG4gICAgICAgIF0uam9pbignICcpO1xuICAgICAgfVxuICAgICAgZmxvd0NvbnRlbnQgPSBmbG93Q29udGVudCB8fCBbXG4gICAgICAgIGJsb2NrQ29udGVudCxcbiAgICAgICAgcGhyYXNpbmdDb250ZW50XG4gICAgICBdLmpvaW4oJyAnKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdsb2JhbEF0dHJpYnV0ZXMsXG4gICAgICAgIGJsb2NrQ29udGVudCxcbiAgICAgICAgcGhyYXNpbmdDb250ZW50LFxuICAgICAgICBmbG93Q29udGVudFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgbWFrZVNjaGVtYSA9IHR5cGUgPT4ge1xuICAgICAgY29uc3Qge2dsb2JhbEF0dHJpYnV0ZXMsIHBocmFzaW5nQ29udGVudCwgZmxvd0NvbnRlbnR9ID0gZ2V0RWxlbWVudFNldHNBc1N0cmluZ3ModHlwZSk7XG4gICAgICBjb25zdCBzY2hlbWEgPSB7fTtcbiAgICAgIGNvbnN0IGFkZCA9IChuYW1lLCBhdHRyaWJ1dGVzID0gJycsIGNoaWxkcmVuID0gJycpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGROYW1lcyA9IHNwbGl0JDEoY2hpbGRyZW4pO1xuICAgICAgICBjb25zdCBuYW1lcyA9IHNwbGl0JDEobmFtZSk7XG4gICAgICAgIGxldCBuaSA9IG5hbWVzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKG5pLS0pIHtcbiAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzT3JkZXIgPSBzcGxpdCQxKFtcbiAgICAgICAgICAgIGdsb2JhbEF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzXG4gICAgICAgICAgXS5qb2luKCcgJykpO1xuICAgICAgICAgIHNjaGVtYVtuYW1lc1tuaV1dID0ge1xuICAgICAgICAgICAgYXR0cmlidXRlczogbWFwVG9PYmplY3QoYXR0cmlidXRlc09yZGVyLCBjb25zdGFudCh7fSkpLFxuICAgICAgICAgICAgYXR0cmlidXRlc09yZGVyLFxuICAgICAgICAgICAgY2hpbGRyZW46IG1hcFRvT2JqZWN0KGNoaWxkTmFtZXMsIGNvbnN0YW50KHt9KSlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgYWRkQXR0cnMgPSAobmFtZSwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBjb25zdCBuYW1lcyA9IHNwbGl0JDEobmFtZSk7XG4gICAgICAgIGNvbnN0IGF0dHJzID0gc3BsaXQkMShhdHRyaWJ1dGVzKTtcbiAgICAgICAgbGV0IG5pID0gbmFtZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAobmktLSkge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYUl0ZW0gPSBzY2hlbWFbbmFtZXNbbmldXTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGF0dHJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgc2NoZW1hSXRlbS5hdHRyaWJ1dGVzW2F0dHJzW2ldXSA9IHt9O1xuICAgICAgICAgICAgc2NoZW1hSXRlbS5hdHRyaWJ1dGVzT3JkZXIucHVzaChhdHRyc1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKHR5cGUgIT09ICdodG1sNS1zdHJpY3QnKSB7XG4gICAgICAgIGNvbnN0IGh0bWw0UGhyYXNpbmdDb250ZW50ID0gJ2Fjcm9ueW0gYXBwbGV0IGJhc2Vmb250IGJpZyBmb250IHN0cmlrZSB0dCc7XG4gICAgICAgIGVhY2gkZShzcGxpdCQxKGh0bWw0UGhyYXNpbmdDb250ZW50KSwgbmFtZSA9PiB7XG4gICAgICAgICAgYWRkKG5hbWUsICcnLCBwaHJhc2luZ0NvbnRlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaHRtbDRCbG9ja0NvbnRlbnQgPSAnY2VudGVyIGRpciBpc2luZGV4IG5vZnJhbWVzJztcbiAgICAgICAgZWFjaCRlKHNwbGl0JDEoaHRtbDRCbG9ja0NvbnRlbnQpLCBuYW1lID0+IHtcbiAgICAgICAgICBhZGQobmFtZSwgJycsIGZsb3dDb250ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhZGQoJ2h0bWwnLCAnbWFuaWZlc3QnLCAnaGVhZCBib2R5Jyk7XG4gICAgICBhZGQoJ2hlYWQnLCAnJywgJ2Jhc2UgY29tbWFuZCBsaW5rIG1ldGEgbm9zY3JpcHQgc2NyaXB0IHN0eWxlIHRpdGxlJyk7XG4gICAgICBhZGQoJ3RpdGxlIGhyIG5vc2NyaXB0IGJyJyk7XG4gICAgICBhZGQoJ2Jhc2UnLCAnaHJlZiB0YXJnZXQnKTtcbiAgICAgIGFkZCgnbGluaycsICdocmVmIHJlbCBtZWRpYSBocmVmbGFuZyB0eXBlIHNpemVzIGhyZWZsYW5nJyk7XG4gICAgICBhZGQoJ21ldGEnLCAnbmFtZSBodHRwLWVxdWl2IGNvbnRlbnQgY2hhcnNldCcpO1xuICAgICAgYWRkKCdzdHlsZScsICdtZWRpYSB0eXBlIHNjb3BlZCcpO1xuICAgICAgYWRkKCdzY3JpcHQnLCAnc3JjIGFzeW5jIGRlZmVyIHR5cGUgY2hhcnNldCcpO1xuICAgICAgYWRkKCdib2R5JywgJ29uYWZ0ZXJwcmludCBvbmJlZm9yZXByaW50IG9uYmVmb3JldW5sb2FkIG9uYmx1ciBvbmVycm9yIG9uZm9jdXMgJyArICdvbmhhc2hjaGFuZ2Ugb25sb2FkIG9ubWVzc2FnZSBvbm9mZmxpbmUgb25vbmxpbmUgb25wYWdlaGlkZSBvbnBhZ2VzaG93ICcgKyAnb25wb3BzdGF0ZSBvbnJlc2l6ZSBvbnNjcm9sbCBvbnN0b3JhZ2Ugb251bmxvYWQnLCBmbG93Q29udGVudCk7XG4gICAgICBhZGQoJ2RkIGRpdicsICcnLCBmbG93Q29udGVudCk7XG4gICAgICBhZGQoJ2FkZHJlc3MgZHQgY2FwdGlvbicsICcnLCB0eXBlID09PSAnaHRtbDQnID8gcGhyYXNpbmdDb250ZW50IDogZmxvd0NvbnRlbnQpO1xuICAgICAgYWRkKCdoMSBoMiBoMyBoNCBoNSBoNiBwcmUgcCBhYmJyIGNvZGUgdmFyIHNhbXAga2JkIHN1YiBzdXAgaSBiIHUgYmRvIHNwYW4gbGVnZW5kIGVtIHN0cm9uZyBzbWFsbCBzIGNpdGUgZGZuJywgJycsIHBocmFzaW5nQ29udGVudCk7XG4gICAgICBhZGQoJ2Jsb2NrcXVvdGUnLCAnY2l0ZScsIGZsb3dDb250ZW50KTtcbiAgICAgIGFkZCgnb2wnLCAncmV2ZXJzZWQgc3RhcnQgdHlwZScsICdsaScpO1xuICAgICAgYWRkKCd1bCcsICcnLCAnbGknKTtcbiAgICAgIGFkZCgnbGknLCAndmFsdWUnLCBmbG93Q29udGVudCk7XG4gICAgICBhZGQoJ2RsJywgJycsICdkdCBkZCcpO1xuICAgICAgYWRkKCdhJywgJ2hyZWYgdGFyZ2V0IHJlbCBtZWRpYSBocmVmbGFuZyB0eXBlJywgdHlwZSA9PT0gJ2h0bWw0JyA/IHBocmFzaW5nQ29udGVudCA6IGZsb3dDb250ZW50KTtcbiAgICAgIGFkZCgncScsICdjaXRlJywgcGhyYXNpbmdDb250ZW50KTtcbiAgICAgIGFkZCgnaW5zIGRlbCcsICdjaXRlIGRhdGV0aW1lJywgZmxvd0NvbnRlbnQpO1xuICAgICAgYWRkKCdpbWcnLCAnc3JjIHNpemVzIHNyY3NldCBhbHQgdXNlbWFwIGlzbWFwIHdpZHRoIGhlaWdodCcpO1xuICAgICAgYWRkKCdpZnJhbWUnLCAnc3JjIG5hbWUgd2lkdGggaGVpZ2h0JywgZmxvd0NvbnRlbnQpO1xuICAgICAgYWRkKCdlbWJlZCcsICdzcmMgdHlwZSB3aWR0aCBoZWlnaHQnKTtcbiAgICAgIGFkZCgnb2JqZWN0JywgJ2RhdGEgdHlwZSB0eXBlbXVzdG1hdGNoIG5hbWUgdXNlbWFwIGZvcm0gd2lkdGggaGVpZ2h0JywgW1xuICAgICAgICBmbG93Q29udGVudCxcbiAgICAgICAgJ3BhcmFtJ1xuICAgICAgXS5qb2luKCcgJykpO1xuICAgICAgYWRkKCdwYXJhbScsICduYW1lIHZhbHVlJyk7XG4gICAgICBhZGQoJ21hcCcsICduYW1lJywgW1xuICAgICAgICBmbG93Q29udGVudCxcbiAgICAgICAgJ2FyZWEnXG4gICAgICBdLmpvaW4oJyAnKSk7XG4gICAgICBhZGQoJ2FyZWEnLCAnYWx0IGNvb3JkcyBzaGFwZSBocmVmIHRhcmdldCByZWwgbWVkaWEgaHJlZmxhbmcgdHlwZScpO1xuICAgICAgYWRkKCd0YWJsZScsICdib3JkZXInLCAnY2FwdGlvbiBjb2xncm91cCB0aGVhZCB0Zm9vdCB0Ym9keSB0cicgKyAodHlwZSA9PT0gJ2h0bWw0JyA/ICcgY29sJyA6ICcnKSk7XG4gICAgICBhZGQoJ2NvbGdyb3VwJywgJ3NwYW4nLCAnY29sJyk7XG4gICAgICBhZGQoJ2NvbCcsICdzcGFuJyk7XG4gICAgICBhZGQoJ3Rib2R5IHRoZWFkIHRmb290JywgJycsICd0cicpO1xuICAgICAgYWRkKCd0cicsICcnLCAndGQgdGgnKTtcbiAgICAgIGFkZCgndGQnLCAnY29sc3BhbiByb3dzcGFuIGhlYWRlcnMnLCBmbG93Q29udGVudCk7XG4gICAgICBhZGQoJ3RoJywgJ2NvbHNwYW4gcm93c3BhbiBoZWFkZXJzIHNjb3BlIGFiYnInLCBmbG93Q29udGVudCk7XG4gICAgICBhZGQoJ2Zvcm0nLCAnYWNjZXB0LWNoYXJzZXQgYWN0aW9uIGF1dG9jb21wbGV0ZSBlbmN0eXBlIG1ldGhvZCBuYW1lIG5vdmFsaWRhdGUgdGFyZ2V0JywgZmxvd0NvbnRlbnQpO1xuICAgICAgYWRkKCdmaWVsZHNldCcsICdkaXNhYmxlZCBmb3JtIG5hbWUnLCBbXG4gICAgICAgIGZsb3dDb250ZW50LFxuICAgICAgICAnbGVnZW5kJ1xuICAgICAgXS5qb2luKCcgJykpO1xuICAgICAgYWRkKCdsYWJlbCcsICdmb3JtIGZvcicsIHBocmFzaW5nQ29udGVudCk7XG4gICAgICBhZGQoJ2lucHV0JywgJ2FjY2VwdCBhbHQgYXV0b2NvbXBsZXRlIGNoZWNrZWQgZGlybmFtZSBkaXNhYmxlZCBmb3JtIGZvcm1hY3Rpb24gZm9ybWVuY3R5cGUgZm9ybW1ldGhvZCBmb3Jtbm92YWxpZGF0ZSAnICsgJ2Zvcm10YXJnZXQgaGVpZ2h0IGxpc3QgbWF4IG1heGxlbmd0aCBtaW4gbXVsdGlwbGUgbmFtZSBwYXR0ZXJuIHJlYWRvbmx5IHJlcXVpcmVkIHNpemUgc3JjIHN0ZXAgdHlwZSB2YWx1ZSB3aWR0aCcpO1xuICAgICAgYWRkKCdidXR0b24nLCAnZGlzYWJsZWQgZm9ybSBmb3JtYWN0aW9uIGZvcm1lbmN0eXBlIGZvcm1tZXRob2QgZm9ybW5vdmFsaWRhdGUgZm9ybXRhcmdldCBuYW1lIHR5cGUgdmFsdWUnLCB0eXBlID09PSAnaHRtbDQnID8gZmxvd0NvbnRlbnQgOiBwaHJhc2luZ0NvbnRlbnQpO1xuICAgICAgYWRkKCdzZWxlY3QnLCAnZGlzYWJsZWQgZm9ybSBtdWx0aXBsZSBuYW1lIHJlcXVpcmVkIHNpemUnLCAnb3B0aW9uIG9wdGdyb3VwJyk7XG4gICAgICBhZGQoJ29wdGdyb3VwJywgJ2Rpc2FibGVkIGxhYmVsJywgJ29wdGlvbicpO1xuICAgICAgYWRkKCdvcHRpb24nLCAnZGlzYWJsZWQgbGFiZWwgc2VsZWN0ZWQgdmFsdWUnKTtcbiAgICAgIGFkZCgndGV4dGFyZWEnLCAnY29scyBkaXJuYW1lIGRpc2FibGVkIGZvcm0gbWF4bGVuZ3RoIG5hbWUgcmVhZG9ubHkgcmVxdWlyZWQgcm93cyB3cmFwJyk7XG4gICAgICBhZGQoJ21lbnUnLCAndHlwZSBsYWJlbCcsIFtcbiAgICAgICAgZmxvd0NvbnRlbnQsXG4gICAgICAgICdsaSdcbiAgICAgIF0uam9pbignICcpKTtcbiAgICAgIGFkZCgnbm9zY3JpcHQnLCAnJywgZmxvd0NvbnRlbnQpO1xuICAgICAgaWYgKHR5cGUgIT09ICdodG1sNCcpIHtcbiAgICAgICAgYWRkKCd3YnInKTtcbiAgICAgICAgYWRkKCdydWJ5JywgJycsIFtcbiAgICAgICAgICBwaHJhc2luZ0NvbnRlbnQsXG4gICAgICAgICAgJ3J0IHJwJ1xuICAgICAgICBdLmpvaW4oJyAnKSk7XG4gICAgICAgIGFkZCgnZmlnY2FwdGlvbicsICcnLCBmbG93Q29udGVudCk7XG4gICAgICAgIGFkZCgnbWFyayBydCBycCBzdW1tYXJ5IGJkaScsICcnLCBwaHJhc2luZ0NvbnRlbnQpO1xuICAgICAgICBhZGQoJ2NhbnZhcycsICd3aWR0aCBoZWlnaHQnLCBmbG93Q29udGVudCk7XG4gICAgICAgIGFkZCgndmlkZW8nLCAnc3JjIGNyb3Nzb3JpZ2luIHBvc3RlciBwcmVsb2FkIGF1dG9wbGF5IG1lZGlhZ3JvdXAgbG9vcCAnICsgJ211dGVkIGNvbnRyb2xzIHdpZHRoIGhlaWdodCBidWZmZXJlZCcsIFtcbiAgICAgICAgICBmbG93Q29udGVudCxcbiAgICAgICAgICAndHJhY2sgc291cmNlJ1xuICAgICAgICBdLmpvaW4oJyAnKSk7XG4gICAgICAgIGFkZCgnYXVkaW8nLCAnc3JjIGNyb3Nzb3JpZ2luIHByZWxvYWQgYXV0b3BsYXkgbWVkaWFncm91cCBsb29wIG11dGVkIGNvbnRyb2xzICcgKyAnYnVmZmVyZWQgdm9sdW1lJywgW1xuICAgICAgICAgIGZsb3dDb250ZW50LFxuICAgICAgICAgICd0cmFjayBzb3VyY2UnXG4gICAgICAgIF0uam9pbignICcpKTtcbiAgICAgICAgYWRkKCdwaWN0dXJlJywgJycsICdpbWcgc291cmNlJyk7XG4gICAgICAgIGFkZCgnc291cmNlJywgJ3NyYyBzcmNzZXQgdHlwZSBtZWRpYSBzaXplcycpO1xuICAgICAgICBhZGQoJ3RyYWNrJywgJ2tpbmQgc3JjIHNyY2xhbmcgbGFiZWwgZGVmYXVsdCcpO1xuICAgICAgICBhZGQoJ2RhdGFsaXN0JywgJycsIFtcbiAgICAgICAgICBwaHJhc2luZ0NvbnRlbnQsXG4gICAgICAgICAgJ29wdGlvbidcbiAgICAgICAgXS5qb2luKCcgJykpO1xuICAgICAgICBhZGQoJ2FydGljbGUgc2VjdGlvbiBuYXYgYXNpZGUgbWFpbiBoZWFkZXIgZm9vdGVyJywgJycsIGZsb3dDb250ZW50KTtcbiAgICAgICAgYWRkKCdoZ3JvdXAnLCAnJywgJ2gxIGgyIGgzIGg0IGg1IGg2Jyk7XG4gICAgICAgIGFkZCgnZmlndXJlJywgJycsIFtcbiAgICAgICAgICBmbG93Q29udGVudCxcbiAgICAgICAgICAnZmlnY2FwdGlvbidcbiAgICAgICAgXS5qb2luKCcgJykpO1xuICAgICAgICBhZGQoJ3RpbWUnLCAnZGF0ZXRpbWUnLCBwaHJhc2luZ0NvbnRlbnQpO1xuICAgICAgICBhZGQoJ2RpYWxvZycsICdvcGVuJywgZmxvd0NvbnRlbnQpO1xuICAgICAgICBhZGQoJ2NvbW1hbmQnLCAndHlwZSBsYWJlbCBpY29uIGRpc2FibGVkIGNoZWNrZWQgcmFkaW9ncm91cCBjb21tYW5kJyk7XG4gICAgICAgIGFkZCgnb3V0cHV0JywgJ2ZvciBmb3JtIG5hbWUnLCBwaHJhc2luZ0NvbnRlbnQpO1xuICAgICAgICBhZGQoJ3Byb2dyZXNzJywgJ3ZhbHVlIG1heCcsIHBocmFzaW5nQ29udGVudCk7XG4gICAgICAgIGFkZCgnbWV0ZXInLCAndmFsdWUgbWluIG1heCBsb3cgaGlnaCBvcHRpbXVtJywgcGhyYXNpbmdDb250ZW50KTtcbiAgICAgICAgYWRkKCdkZXRhaWxzJywgJ29wZW4nLCBbXG4gICAgICAgICAgZmxvd0NvbnRlbnQsXG4gICAgICAgICAgJ3N1bW1hcnknXG4gICAgICAgIF0uam9pbignICcpKTtcbiAgICAgICAgYWRkKCdrZXlnZW4nLCAnYXV0b2ZvY3VzIGNoYWxsZW5nZSBkaXNhYmxlZCBmb3JtIGtleXR5cGUgbmFtZScpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgIT09ICdodG1sNS1zdHJpY3QnKSB7XG4gICAgICAgIGFkZEF0dHJzKCdzY3JpcHQnLCAnbGFuZ3VhZ2UgeG1sOnNwYWNlJyk7XG4gICAgICAgIGFkZEF0dHJzKCdzdHlsZScsICd4bWw6c3BhY2UnKTtcbiAgICAgICAgYWRkQXR0cnMoJ29iamVjdCcsICdkZWNsYXJlIGNsYXNzaWQgY29kZSBjb2RlYmFzZSBjb2RldHlwZSBhcmNoaXZlIHN0YW5kYnkgYWxpZ24gYm9yZGVyIGhzcGFjZSB2c3BhY2UnKTtcbiAgICAgICAgYWRkQXR0cnMoJ2VtYmVkJywgJ2FsaWduIG5hbWUgaHNwYWNlIHZzcGFjZScpO1xuICAgICAgICBhZGRBdHRycygncGFyYW0nLCAndmFsdWV0eXBlIHR5cGUnKTtcbiAgICAgICAgYWRkQXR0cnMoJ2EnLCAnY2hhcnNldCBuYW1lIHJldiBzaGFwZSBjb29yZHMnKTtcbiAgICAgICAgYWRkQXR0cnMoJ2JyJywgJ2NsZWFyJyk7XG4gICAgICAgIGFkZEF0dHJzKCdhcHBsZXQnLCAnY29kZWJhc2UgYXJjaGl2ZSBjb2RlIG9iamVjdCBhbHQgbmFtZSB3aWR0aCBoZWlnaHQgYWxpZ24gaHNwYWNlIHZzcGFjZScpO1xuICAgICAgICBhZGRBdHRycygnaW1nJywgJ25hbWUgbG9uZ2Rlc2MgYWxpZ24gYm9yZGVyIGhzcGFjZSB2c3BhY2UnKTtcbiAgICAgICAgYWRkQXR0cnMoJ2lmcmFtZScsICdsb25nZGVzYyBmcmFtZWJvcmRlciBtYXJnaW53aWR0aCBtYXJnaW5oZWlnaHQgc2Nyb2xsaW5nIGFsaWduJyk7XG4gICAgICAgIGFkZEF0dHJzKCdmb250IGJhc2Vmb250JywgJ3NpemUgY29sb3IgZmFjZScpO1xuICAgICAgICBhZGRBdHRycygnaW5wdXQnLCAndXNlbWFwIGFsaWduJyk7XG4gICAgICAgIGFkZEF0dHJzKCdzZWxlY3QnKTtcbiAgICAgICAgYWRkQXR0cnMoJ3RleHRhcmVhJyk7XG4gICAgICAgIGFkZEF0dHJzKCdoMSBoMiBoMyBoNCBoNSBoNiBkaXYgcCBsZWdlbmQgY2FwdGlvbicsICdhbGlnbicpO1xuICAgICAgICBhZGRBdHRycygndWwnLCAndHlwZSBjb21wYWN0Jyk7XG4gICAgICAgIGFkZEF0dHJzKCdsaScsICd0eXBlJyk7XG4gICAgICAgIGFkZEF0dHJzKCdvbCBkbCBtZW51IGRpcicsICdjb21wYWN0Jyk7XG4gICAgICAgIGFkZEF0dHJzKCdwcmUnLCAnd2lkdGggeG1sOnNwYWNlJyk7XG4gICAgICAgIGFkZEF0dHJzKCdocicsICdhbGlnbiBub3NoYWRlIHNpemUgd2lkdGgnKTtcbiAgICAgICAgYWRkQXR0cnMoJ2lzaW5kZXgnLCAncHJvbXB0Jyk7XG4gICAgICAgIGFkZEF0dHJzKCd0YWJsZScsICdzdW1tYXJ5IHdpZHRoIGZyYW1lIHJ1bGVzIGNlbGxzcGFjaW5nIGNlbGxwYWRkaW5nIGFsaWduIGJnY29sb3InKTtcbiAgICAgICAgYWRkQXR0cnMoJ2NvbCcsICd3aWR0aCBhbGlnbiBjaGFyIGNoYXJvZmYgdmFsaWduJyk7XG4gICAgICAgIGFkZEF0dHJzKCdjb2xncm91cCcsICd3aWR0aCBhbGlnbiBjaGFyIGNoYXJvZmYgdmFsaWduJyk7XG4gICAgICAgIGFkZEF0dHJzKCd0aGVhZCcsICdhbGlnbiBjaGFyIGNoYXJvZmYgdmFsaWduJyk7XG4gICAgICAgIGFkZEF0dHJzKCd0cicsICdhbGlnbiBjaGFyIGNoYXJvZmYgdmFsaWduIGJnY29sb3InKTtcbiAgICAgICAgYWRkQXR0cnMoJ3RoJywgJ2F4aXMgYWxpZ24gY2hhciBjaGFyb2ZmIHZhbGlnbiBub3dyYXAgYmdjb2xvciB3aWR0aCBoZWlnaHQnKTtcbiAgICAgICAgYWRkQXR0cnMoJ2Zvcm0nLCAnYWNjZXB0Jyk7XG4gICAgICAgIGFkZEF0dHJzKCd0ZCcsICdhYmJyIGF4aXMgc2NvcGUgYWxpZ24gY2hhciBjaGFyb2ZmIHZhbGlnbiBub3dyYXAgYmdjb2xvciB3aWR0aCBoZWlnaHQnKTtcbiAgICAgICAgYWRkQXR0cnMoJ3Rmb290JywgJ2FsaWduIGNoYXIgY2hhcm9mZiB2YWxpZ24nKTtcbiAgICAgICAgYWRkQXR0cnMoJ3Rib2R5JywgJ2FsaWduIGNoYXIgY2hhcm9mZiB2YWxpZ24nKTtcbiAgICAgICAgYWRkQXR0cnMoJ2FyZWEnLCAnbm9ocmVmJyk7XG4gICAgICAgIGFkZEF0dHJzKCdib2R5JywgJ2JhY2tncm91bmQgYmdjb2xvciB0ZXh0IGxpbmsgdmxpbmsgYWxpbmsnKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlICE9PSAnaHRtbDQnKSB7XG4gICAgICAgIGFkZEF0dHJzKCdpbnB1dCBidXR0b24gc2VsZWN0IHRleHRhcmVhJywgJ2F1dG9mb2N1cycpO1xuICAgICAgICBhZGRBdHRycygnaW5wdXQgdGV4dGFyZWEnLCAncGxhY2Vob2xkZXInKTtcbiAgICAgICAgYWRkQXR0cnMoJ2EnLCAnZG93bmxvYWQnKTtcbiAgICAgICAgYWRkQXR0cnMoJ2xpbmsgc2NyaXB0IGltZycsICdjcm9zc29yaWdpbicpO1xuICAgICAgICBhZGRBdHRycygnaW1nJywgJ2xvYWRpbmcnKTtcbiAgICAgICAgYWRkQXR0cnMoJ2lmcmFtZScsICdzYW5kYm94IHNlYW1sZXNzIGFsbG93IGFsbG93ZnVsbHNjcmVlbiBsb2FkaW5nJyk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSAhPT0gJ2h0bWw0Jykge1xuICAgICAgICBlYWNoJGUoW1xuICAgICAgICAgIHNjaGVtYS52aWRlbyxcbiAgICAgICAgICBzY2hlbWEuYXVkaW9cbiAgICAgICAgXSwgaXRlbSA9PiB7XG4gICAgICAgICAgZGVsZXRlIGl0ZW0uY2hpbGRyZW4uYXVkaW87XG4gICAgICAgICAgZGVsZXRlIGl0ZW0uY2hpbGRyZW4udmlkZW87XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZWFjaCRlKHNwbGl0JDEoJ2EgZm9ybSBtZXRlciBwcm9ncmVzcyBkZm4nKSwgbmFtZSA9PiB7XG4gICAgICAgIGlmIChzY2hlbWFbbmFtZV0pIHtcbiAgICAgICAgICBkZWxldGUgc2NoZW1hW25hbWVdLmNoaWxkcmVuW25hbWVdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGRlbGV0ZSBzY2hlbWEuY2FwdGlvbi5jaGlsZHJlbi50YWJsZTtcbiAgICAgIGRlbGV0ZSBzY2hlbWEuc2NyaXB0O1xuICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJlZml4VG9PcGVyYXRpb24gPSBwcmVmaXggPT4gcHJlZml4ID09PSAnLScgPyAncmVtb3ZlJyA6ICdhZGQnO1xuICAgIGNvbnN0IHBhcnNlVmFsaWRDaGlsZHJlblJ1bGVzID0gdmFsdWUgPT4ge1xuICAgICAgY29uc3QgY2hpbGRSdWxlUmVnRXhwID0gL14oWytcXC1dPykoW0EtWmEtejAtOV9cXC0uXFx1MDBiN1xcdTAwYzAtXFx1MDBkNlxcdTAwZDgtXFx1MDBmNlxcdTAwZjgtXFx1MDM3ZFxcdTAzN2YtXFx1MWZmZlxcdTIwMGMtXFx1MjAwZFxcdTIwM2YtXFx1MjA0MFxcdTIwNzAtXFx1MjE4ZlxcdTJjMDAtXFx1MmZlZlxcdTMwMDEtXFx1ZDdmZlxcdWY5MDAtXFx1ZmRjZlxcdWZkZjAtXFx1ZmZmZF0rKVxcWyhbXlxcXV0rKV0kLztcbiAgICAgIHJldHVybiBiaW5kJDMoc3BsaXQkMSh2YWx1ZSwgJywnKSwgcnVsZSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBjaGlsZFJ1bGVSZWdFeHAuZXhlYyhydWxlKTtcbiAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaGVzWzFdO1xuICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IHByZWZpeCA/IHByZWZpeFRvT3BlcmF0aW9uKHByZWZpeCkgOiAncmVwbGFjZSc7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IG1hdGNoZXNbMl07XG4gICAgICAgICAgY29uc3QgdmFsaWRDaGlsZHJlbiA9IHNwbGl0JDEobWF0Y2hlc1szXSwgJ3wnKTtcbiAgICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICAgICAgb3BlcmF0aW9uLFxuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICB2YWxpZENoaWxkcmVuXG4gICAgICAgICAgICB9XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBwYXJzZVZhbGlkRWxlbWVudHNBdHRyRGF0YUludG9FbGVtZW50ID0gKGF0dHJEYXRhLCB0YXJnZXRFbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBhdHRyUnVsZVJlZ0V4cCA9IC9eKFshXFwtXSk/KFxcdytbXFxcXDpdOlxcdyt8W149fjxdKyk/KD86KFs9fjxdKSguKikpPyQvO1xuICAgICAgY29uc3QgaGFzUGF0dGVybnNSZWdFeHAgPSAvWyo/K10vO1xuICAgICAgY29uc3Qge2F0dHJpYnV0ZXMsIGF0dHJpYnV0ZXNPcmRlcn0gPSB0YXJnZXRFbGVtZW50O1xuICAgICAgcmV0dXJuIGVhY2gkZShzcGxpdCQxKGF0dHJEYXRhLCAnfCcpLCBydWxlID0+IHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGF0dHJSdWxlUmVnRXhwLmV4ZWMocnVsZSk7XG4gICAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgICAgY29uc3QgYXR0ciA9IHt9O1xuICAgICAgICAgIGNvbnN0IGF0dHJUeXBlID0gbWF0Y2hlc1sxXTtcbiAgICAgICAgICBjb25zdCBhdHRyTmFtZSA9IG1hdGNoZXNbMl0ucmVwbGFjZSgvW1xcXFw6XTovZywgJzonKTtcbiAgICAgICAgICBjb25zdCBhdHRyUHJlZml4ID0gbWF0Y2hlc1szXTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1hdGNoZXNbNF07XG4gICAgICAgICAgaWYgKGF0dHJUeXBlID09PSAnIScpIHtcbiAgICAgICAgICAgIHRhcmdldEVsZW1lbnQuYXR0cmlidXRlc1JlcXVpcmVkID0gdGFyZ2V0RWxlbWVudC5hdHRyaWJ1dGVzUmVxdWlyZWQgfHwgW107XG4gICAgICAgICAgICB0YXJnZXRFbGVtZW50LmF0dHJpYnV0ZXNSZXF1aXJlZC5wdXNoKGF0dHJOYW1lKTtcbiAgICAgICAgICAgIGF0dHIucmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYXR0clR5cGUgPT09ICctJykge1xuICAgICAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXNbYXR0ck5hbWVdO1xuICAgICAgICAgICAgYXR0cmlidXRlc09yZGVyLnNwbGljZShUb29scy5pbkFycmF5KGF0dHJpYnV0ZXNPcmRlciwgYXR0ck5hbWUpLCAxKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGF0dHJQcmVmaXgpIHtcbiAgICAgICAgICAgIGlmIChhdHRyUHJlZml4ID09PSAnPScpIHtcbiAgICAgICAgICAgICAgdGFyZ2V0RWxlbWVudC5hdHRyaWJ1dGVzRGVmYXVsdCA9IHRhcmdldEVsZW1lbnQuYXR0cmlidXRlc0RlZmF1bHQgfHwgW107XG4gICAgICAgICAgICAgIHRhcmdldEVsZW1lbnQuYXR0cmlidXRlc0RlZmF1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZTogYXR0ck5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGF0dHIuZGVmYXVsdFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJQcmVmaXggPT09ICd+Jykge1xuICAgICAgICAgICAgICB0YXJnZXRFbGVtZW50LmF0dHJpYnV0ZXNGb3JjZWQgPSB0YXJnZXRFbGVtZW50LmF0dHJpYnV0ZXNGb3JjZWQgfHwgW107XG4gICAgICAgICAgICAgIHRhcmdldEVsZW1lbnQuYXR0cmlidXRlc0ZvcmNlZC5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBhdHRyTmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYXR0ci5mb3JjZWRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRyUHJlZml4ID09PSAnPCcpIHtcbiAgICAgICAgICAgICAgYXR0ci52YWxpZFZhbHVlcyA9IFRvb2xzLm1ha2VNYXAodmFsdWUsICc/Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYXNQYXR0ZXJuc1JlZ0V4cC50ZXN0KGF0dHJOYW1lKSkge1xuICAgICAgICAgICAgY29uc3QgYXR0clBhdHRlcm4gPSBhdHRyO1xuICAgICAgICAgICAgdGFyZ2V0RWxlbWVudC5hdHRyaWJ1dGVQYXR0ZXJucyA9IHRhcmdldEVsZW1lbnQuYXR0cmlidXRlUGF0dGVybnMgfHwgW107XG4gICAgICAgICAgICBhdHRyUGF0dGVybi5wYXR0ZXJuID0gcGF0dGVyblRvUmVnRXhwKGF0dHJOYW1lKTtcbiAgICAgICAgICAgIHRhcmdldEVsZW1lbnQuYXR0cmlidXRlUGF0dGVybnMucHVzaChhdHRyUGF0dGVybik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghYXR0cmlidXRlc1thdHRyTmFtZV0pIHtcbiAgICAgICAgICAgICAgYXR0cmlidXRlc09yZGVyLnB1c2goYXR0ck5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXR0cmlidXRlc1thdHRyTmFtZV0gPSBhdHRyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBjbG9uZUF0dHJpYnV0ZXNJbnRvID0gKGZyb20sIHRvKSA9PiB7XG4gICAgICBlYWNoJGQoZnJvbS5hdHRyaWJ1dGVzLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICB0by5hdHRyaWJ1dGVzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgdG8uYXR0cmlidXRlc09yZGVyLnB1c2goLi4uZnJvbS5hdHRyaWJ1dGVzT3JkZXIpO1xuICAgIH07XG4gICAgY29uc3QgcGFyc2VWYWxpZEVsZW1lbnRzUnVsZXMgPSAoZ2xvYmFsRWxlbWVudCwgdmFsaWRFbGVtZW50cykgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudFJ1bGVSZWdFeHAgPSAvXihbIytcXC1dKT8oW15cXFshXFwvXSspKD86XFwvKFteXFxbIV0rKSk/KD86KCE/KVxcWyhbXlxcXV0rKV0pPyQvO1xuICAgICAgcmV0dXJuIGJpbmQkMyhzcGxpdCQxKHZhbGlkRWxlbWVudHMsICcsJyksIHJ1bGUgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gZWxlbWVudFJ1bGVSZWdFeHAuZXhlYyhydWxlKTtcbiAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaGVzWzFdO1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnROYW1lID0gbWF0Y2hlc1syXTtcbiAgICAgICAgICBjb25zdCBvdXRwdXROYW1lID0gbWF0Y2hlc1szXTtcbiAgICAgICAgICBjb25zdCBhdHRyc1ByZWZpeCA9IG1hdGNoZXNbNF07XG4gICAgICAgICAgY29uc3QgYXR0ckRhdGEgPSBtYXRjaGVzWzVdO1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNPcmRlcjogW11cbiAgICAgICAgICB9O1xuICAgICAgICAgIGdsb2JhbEVsZW1lbnQuZWFjaChlbCA9PiBjbG9uZUF0dHJpYnV0ZXNJbnRvKGVsLCBlbGVtZW50KSk7XG4gICAgICAgICAgaWYgKHByZWZpeCA9PT0gJyMnKSB7XG4gICAgICAgICAgICBlbGVtZW50LnBhZGRFbXB0eSA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChwcmVmaXggPT09ICctJykge1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFbXB0eSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhdHRyc1ByZWZpeCA9PT0gJyEnKSB7XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUVtcHR5QXR0cnMgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYXR0ckRhdGEpIHtcbiAgICAgICAgICAgIHBhcnNlVmFsaWRFbGVtZW50c0F0dHJEYXRhSW50b0VsZW1lbnQoYXR0ckRhdGEsIGVsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3V0cHV0TmFtZSkge1xuICAgICAgICAgICAgZWxlbWVudC5vdXRwdXROYW1lID0gZWxlbWVudE5hbWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbGVtZW50TmFtZSA9PT0gJ0AnKSB7XG4gICAgICAgICAgICBpZiAoZ2xvYmFsRWxlbWVudC5pc05vbmUoKSkge1xuICAgICAgICAgICAgICBnbG9iYWxFbGVtZW50ID0gT3B0aW9uYWwuc29tZShlbGVtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFtvdXRwdXROYW1lID8ge1xuICAgICAgICAgICAgICBuYW1lOiBlbGVtZW50TmFtZSxcbiAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgYWxpYXNOYW1lOiBvdXRwdXROYW1lXG4gICAgICAgICAgICB9IDoge1xuICAgICAgICAgICAgICBuYW1lOiBlbGVtZW50TmFtZSxcbiAgICAgICAgICAgICAgZWxlbWVudFxuICAgICAgICAgICAgfV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbWFwQ2FjaGUgPSB7fTtcbiAgICBjb25zdCBtYWtlTWFwJDIgPSBUb29scy5tYWtlTWFwLCBlYWNoJGIgPSBUb29scy5lYWNoLCBleHRlbmQkMiA9IFRvb2xzLmV4dGVuZCwgZXhwbG9kZSQyID0gVG9vbHMuZXhwbG9kZTtcbiAgICBjb25zdCBjcmVhdGVNYXAgPSAoZGVmYXVsdFZhbHVlLCBleHRlbmRXaXRoID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gbWFrZU1hcCQyKGRlZmF1bHRWYWx1ZSwgJyAnLCBtYWtlTWFwJDIoZGVmYXVsdFZhbHVlLnRvVXBwZXJDYXNlKCksICcgJykpO1xuICAgICAgcmV0dXJuIGV4dGVuZCQyKHZhbHVlLCBleHRlbmRXaXRoKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFRleHRSb290QmxvY2tFbGVtZW50cyA9IHNjaGVtYSA9PiBjcmVhdGVNYXAoJ3RkIHRoIGxpIGR0IGRkIGZpZ2NhcHRpb24gY2FwdGlvbiBkZXRhaWxzIHN1bW1hcnknLCBzY2hlbWEuZ2V0VGV4dEJsb2NrRWxlbWVudHMoKSk7XG4gICAgY29uc3QgY29tcGlsZUVsZW1lbnRNYXAgPSAodmFsdWUsIG1vZGUpID0+IHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBjb25zdCBzdHlsZXMgPSB7fTtcbiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlID0geyAnKic6IHZhbHVlIH07XG4gICAgICAgIH1cbiAgICAgICAgZWFjaCRiKHZhbHVlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIHN0eWxlc1trZXldID0gc3R5bGVzW2tleS50b1VwcGVyQ2FzZSgpXSA9IG1vZGUgPT09ICdtYXAnID8gbWFrZU1hcCQyKHZhbHVlLCAvWywgXS8pIDogZXhwbG9kZSQyKHZhbHVlLCAvWywgXS8pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBTY2hlbWEgPSAoc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgZWxlbWVudHMgPSB7fTtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0ge307XG4gICAgICBsZXQgcGF0dGVybkVsZW1lbnRzID0gW107XG4gICAgICBjb25zdCBjdXN0b21FbGVtZW50c01hcCA9IHt9O1xuICAgICAgY29uc3Qgc3BlY2lhbEVsZW1lbnRzID0ge307XG4gICAgICBjb25zdCBjcmVhdGVMb29rdXBUYWJsZSA9IChvcHRpb24sIGRlZmF1bHRWYWx1ZSwgZXh0ZW5kV2l0aCkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHNldHRpbmdzW29wdGlvbl07XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICBsZXQgbmV3VmFsdWUgPSBtYXBDYWNoZVtvcHRpb25dO1xuICAgICAgICAgIGlmICghbmV3VmFsdWUpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gY3JlYXRlTWFwKGRlZmF1bHRWYWx1ZSwgZXh0ZW5kV2l0aCk7XG4gICAgICAgICAgICBtYXBDYWNoZVtvcHRpb25dID0gbmV3VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWFrZU1hcCQyKHZhbHVlLCAvWywgXS8sIG1ha2VNYXAkMih2YWx1ZS50b1VwcGVyQ2FzZSgpLCAvWywgXS8pKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNjaGVtYVR5cGUgPSAoX2EgPSBzZXR0aW5ncy5zY2hlbWEpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdodG1sNSc7XG4gICAgICBjb25zdCBzY2hlbWFJdGVtcyA9IG1ha2VTY2hlbWEoc2NoZW1hVHlwZSk7XG4gICAgICBpZiAoc2V0dGluZ3MudmVyaWZ5X2h0bWwgPT09IGZhbHNlKSB7XG4gICAgICAgIHNldHRpbmdzLnZhbGlkX2VsZW1lbnRzID0gJypbKl0nO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsaWRTdHlsZXMgPSBjb21waWxlRWxlbWVudE1hcChzZXR0aW5ncy52YWxpZF9zdHlsZXMpO1xuICAgICAgY29uc3QgaW52YWxpZFN0eWxlcyA9IGNvbXBpbGVFbGVtZW50TWFwKHNldHRpbmdzLmludmFsaWRfc3R5bGVzLCAnbWFwJyk7XG4gICAgICBjb25zdCB2YWxpZENsYXNzZXMgPSBjb21waWxlRWxlbWVudE1hcChzZXR0aW5ncy52YWxpZF9jbGFzc2VzLCAnbWFwJyk7XG4gICAgICBjb25zdCB3aGl0ZXNwYWNlRWxlbWVudHNNYXAgPSBjcmVhdGVMb29rdXBUYWJsZSgnd2hpdGVzcGFjZV9lbGVtZW50cycsICdwcmUgc2NyaXB0IG5vc2NyaXB0IHN0eWxlIHRleHRhcmVhIHZpZGVvIGF1ZGlvIGlmcmFtZSBvYmplY3QgY29kZScpO1xuICAgICAgY29uc3Qgc2VsZkNsb3NpbmdFbGVtZW50c01hcCA9IGNyZWF0ZUxvb2t1cFRhYmxlKCdzZWxmX2Nsb3NpbmdfZWxlbWVudHMnLCAnY29sZ3JvdXAgZGQgZHQgbGkgb3B0aW9uIHAgdGQgdGZvb3QgdGggdGhlYWQgdHInKTtcbiAgICAgIGNvbnN0IHZvaWRFbGVtZW50c01hcCA9IGNyZWF0ZUxvb2t1cFRhYmxlKCd2b2lkX2VsZW1lbnRzJywgJ2FyZWEgYmFzZSBiYXNlZm9udCBiciBjb2wgZnJhbWUgaHIgaW1nIGlucHV0IGlzaW5kZXggbGluayAnICsgJ21ldGEgcGFyYW0gZW1iZWQgc291cmNlIHdiciB0cmFjaycpO1xuICAgICAgY29uc3QgYm9vbEF0dHJNYXAgPSBjcmVhdGVMb29rdXBUYWJsZSgnYm9vbGVhbl9hdHRyaWJ1dGVzJywgJ2NoZWNrZWQgY29tcGFjdCBkZWNsYXJlIGRlZmVyIGRpc2FibGVkIGlzbWFwIG11bHRpcGxlIG5vaHJlZiBub3Jlc2l6ZSAnICsgJ25vc2hhZGUgbm93cmFwIHJlYWRvbmx5IHNlbGVjdGVkIGF1dG9wbGF5IGxvb3AgY29udHJvbHMgYWxsb3dmdWxsc2NyZWVuJyk7XG4gICAgICBjb25zdCBub25FbXB0eU9yTW92ZUNhcmV0QmVmb3JlT25FbnRlciA9ICd0ZCB0aCBpZnJhbWUgdmlkZW8gYXVkaW8gb2JqZWN0IHNjcmlwdCBjb2RlJztcbiAgICAgIGNvbnN0IG5vbkVtcHR5RWxlbWVudHNNYXAgPSBjcmVhdGVMb29rdXBUYWJsZSgnbm9uX2VtcHR5X2VsZW1lbnRzJywgbm9uRW1wdHlPck1vdmVDYXJldEJlZm9yZU9uRW50ZXIgKyAnIHByZScsIHZvaWRFbGVtZW50c01hcCk7XG4gICAgICBjb25zdCBtb3ZlQ2FyZXRCZWZvcmVPbkVudGVyRWxlbWVudHNNYXAgPSBjcmVhdGVMb29rdXBUYWJsZSgnbW92ZV9jYXJldF9iZWZvcmVfb25fZW50ZXJfZWxlbWVudHMnLCBub25FbXB0eU9yTW92ZUNhcmV0QmVmb3JlT25FbnRlciArICcgdGFibGUnLCB2b2lkRWxlbWVudHNNYXApO1xuICAgICAgY29uc3QgdGV4dEJsb2NrRWxlbWVudHNNYXAgPSBjcmVhdGVMb29rdXBUYWJsZSgndGV4dF9ibG9ja19lbGVtZW50cycsICdoMSBoMiBoMyBoNCBoNSBoNiBwIGRpdiBhZGRyZXNzIHByZSBmb3JtICcgKyAnYmxvY2txdW90ZSBjZW50ZXIgZGlyIGZpZWxkc2V0IGhlYWRlciBmb290ZXIgYXJ0aWNsZSBzZWN0aW9uIGhncm91cCBhc2lkZSBtYWluIG5hdiBmaWd1cmUnKTtcbiAgICAgIGNvbnN0IGJsb2NrRWxlbWVudHNNYXAgPSBjcmVhdGVMb29rdXBUYWJsZSgnYmxvY2tfZWxlbWVudHMnLCAnaHIgdGFibGUgdGJvZHkgdGhlYWQgdGZvb3QgJyArICd0aCB0ciB0ZCBsaSBvbCB1bCBjYXB0aW9uIGRsIGR0IGRkIG5vc2NyaXB0IG1lbnUgaXNpbmRleCBvcHRpb24gJyArICdkYXRhbGlzdCBzZWxlY3Qgb3B0Z3JvdXAgZmlnY2FwdGlvbiBkZXRhaWxzIHN1bW1hcnknLCB0ZXh0QmxvY2tFbGVtZW50c01hcCk7XG4gICAgICBjb25zdCB0ZXh0SW5saW5lRWxlbWVudHNNYXAgPSBjcmVhdGVMb29rdXBUYWJsZSgndGV4dF9pbmxpbmVfZWxlbWVudHMnLCAnc3BhbiBzdHJvbmcgYiBlbSBpIGZvbnQgcyBzdHJpa2UgdSB2YXIgY2l0ZSAnICsgJ2RmbiBjb2RlIG1hcmsgcSBzdXAgc3ViIHNhbXAnKTtcbiAgICAgIGNvbnN0IHRyYW5zcGFyZW50RWxlbWVudHNNYXAgPSBjcmVhdGVMb29rdXBUYWJsZSgndHJhbnNwYXJlbnRfZWxlbWVudHMnLCAnYSBpbnMgZGVsIGNhbnZhcyBtYXAnKTtcbiAgICAgIGVhY2gkYignc2NyaXB0IG5vc2NyaXB0IGlmcmFtZSBub2ZyYW1lcyBub2VtYmVkIHRpdGxlIHN0eWxlIHRleHRhcmVhIHhtcCBwbGFpbnRleHQnLnNwbGl0KCcgJyksIG5hbWUgPT4ge1xuICAgICAgICBzcGVjaWFsRWxlbWVudHNbbmFtZV0gPSBuZXcgUmVnRXhwKCc8LycgKyBuYW1lICsgJ1tePl0qPicsICdnaScpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBhZGRWYWxpZEVsZW1lbnRzID0gdmFsaWRFbGVtZW50cyA9PiB7XG4gICAgICAgIGNvbnN0IGdsb2JhbEVsZW1lbnQgPSBPcHRpb25hbC5mcm9tKGVsZW1lbnRzWydAJ10pO1xuICAgICAgICBjb25zdCBoYXNQYXR0ZXJuc1JlZ0V4cCA9IC9bKj8rXS87XG4gICAgICAgIGVhY2gkZShwYXJzZVZhbGlkRWxlbWVudHNSdWxlcyhnbG9iYWxFbGVtZW50LCB2YWxpZEVsZW1lbnRzICE9PSBudWxsICYmIHZhbGlkRWxlbWVudHMgIT09IHZvaWQgMCA/IHZhbGlkRWxlbWVudHMgOiAnJyksICh7bmFtZSwgZWxlbWVudCwgYWxpYXNOYW1lfSkgPT4ge1xuICAgICAgICAgIGlmIChhbGlhc05hbWUpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzW2FsaWFzTmFtZV0gPSBlbGVtZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFzUGF0dGVybnNSZWdFeHAudGVzdChuYW1lKSkge1xuICAgICAgICAgICAgY29uc3QgcGF0dGVybkVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICAgICAgcGF0dGVybkVsZW1lbnQucGF0dGVybiA9IHBhdHRlcm5Ub1JlZ0V4cChuYW1lKTtcbiAgICAgICAgICAgIHBhdHRlcm5FbGVtZW50cy5wdXNoKHBhdHRlcm5FbGVtZW50KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxlbWVudHNbbmFtZV0gPSBlbGVtZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0VmFsaWRFbGVtZW50cyA9IHZhbGlkRWxlbWVudHMgPT4ge1xuICAgICAgICBwYXR0ZXJuRWxlbWVudHMgPSBbXTtcbiAgICAgICAgZWFjaCRlKGtleXMoZWxlbWVudHMpLCBuYW1lID0+IHtcbiAgICAgICAgICBkZWxldGUgZWxlbWVudHNbbmFtZV07XG4gICAgICAgIH0pO1xuICAgICAgICBhZGRWYWxpZEVsZW1lbnRzKHZhbGlkRWxlbWVudHMpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkZEN1c3RvbUVsZW1lbnRzID0gY3VzdG9tRWxlbWVudHMgPT4ge1xuICAgICAgICBkZWxldGUgbWFwQ2FjaGUudGV4dF9ibG9ja19lbGVtZW50cztcbiAgICAgICAgZGVsZXRlIG1hcENhY2hlLmJsb2NrX2VsZW1lbnRzO1xuICAgICAgICBlYWNoJGUocGFyc2VDdXN0b21FbGVtZW50c1J1bGVzKGN1c3RvbUVsZW1lbnRzICE9PSBudWxsICYmIGN1c3RvbUVsZW1lbnRzICE9PSB2b2lkIDAgPyBjdXN0b21FbGVtZW50cyA6ICcnKSwgKHtpbmxpbmUsIG5hbWUsIGNsb25lTmFtZX0pID0+IHtcbiAgICAgICAgICBjaGlsZHJlbltuYW1lXSA9IGNoaWxkcmVuW2Nsb25lTmFtZV07XG4gICAgICAgICAgY3VzdG9tRWxlbWVudHNNYXBbbmFtZV0gPSBjbG9uZU5hbWU7XG4gICAgICAgICAgbm9uRW1wdHlFbGVtZW50c01hcFtuYW1lLnRvVXBwZXJDYXNlKCldID0ge307XG4gICAgICAgICAgbm9uRW1wdHlFbGVtZW50c01hcFtuYW1lXSA9IHt9O1xuICAgICAgICAgIGlmICghaW5saW5lKSB7XG4gICAgICAgICAgICBibG9ja0VsZW1lbnRzTWFwW25hbWUudG9VcHBlckNhc2UoKV0gPSB7fTtcbiAgICAgICAgICAgIGJsb2NrRWxlbWVudHNNYXBbbmFtZV0gPSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFlbGVtZW50c1tuYW1lXSkge1xuICAgICAgICAgICAgbGV0IGN1c3RvbVJ1bGUgPSBlbGVtZW50c1tjbG9uZU5hbWVdO1xuICAgICAgICAgICAgY3VzdG9tUnVsZSA9IGV4dGVuZCQyKHt9LCBjdXN0b21SdWxlKTtcbiAgICAgICAgICAgIGRlbGV0ZSBjdXN0b21SdWxlLnJlbW92ZUVtcHR5QXR0cnM7XG4gICAgICAgICAgICBkZWxldGUgY3VzdG9tUnVsZS5yZW1vdmVFbXB0eTtcbiAgICAgICAgICAgIGVsZW1lbnRzW25hbWVdID0gY3VzdG9tUnVsZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWFjaCRkKGNoaWxkcmVuLCAoZWxlbWVudCwgZWxtTmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnRbY2xvbmVOYW1lXSkge1xuICAgICAgICAgICAgICBjaGlsZHJlbltlbG1OYW1lXSA9IGVsZW1lbnQgPSBleHRlbmQkMih7fSwgY2hpbGRyZW5bZWxtTmFtZV0pO1xuICAgICAgICAgICAgICBlbGVtZW50W25hbWVdID0gZWxlbWVudFtjbG9uZU5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBhZGRWYWxpZENoaWxkcmVuID0gdmFsaWRDaGlsZHJlbiA9PiB7XG4gICAgICAgIGVhY2gkZShwYXJzZVZhbGlkQ2hpbGRyZW5SdWxlcyh2YWxpZENoaWxkcmVuICE9PSBudWxsICYmIHZhbGlkQ2hpbGRyZW4gIT09IHZvaWQgMCA/IHZhbGlkQ2hpbGRyZW4gOiAnJyksICh7b3BlcmF0aW9uLCBuYW1lLCB2YWxpZENoaWxkcmVufSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcmVudCA9IG9wZXJhdGlvbiA9PT0gJ3JlcGxhY2UnID8geyAnI2NvbW1lbnQnOiB7fSB9IDogY2hpbGRyZW5bbmFtZV07XG4gICAgICAgICAgZWFjaCRlKHZhbGlkQ2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgICAgIGlmIChvcGVyYXRpb24gPT09ICdyZW1vdmUnKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSBwYXJlbnRbY2hpbGRdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGFyZW50W2NoaWxkXSA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNoaWxkcmVuW25hbWVdID0gcGFyZW50O1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRFbGVtZW50UnVsZSA9IG5hbWUgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbbmFtZV07XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGkgPSBwYXR0ZXJuRWxlbWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgY29uc3QgcGF0dGVybkVsZW1lbnQgPSBwYXR0ZXJuRWxlbWVudHNbaV07XG4gICAgICAgICAgaWYgKHBhdHRlcm5FbGVtZW50LnBhdHRlcm4udGVzdChuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm5FbGVtZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfTtcbiAgICAgIGlmICghc2V0dGluZ3MudmFsaWRfZWxlbWVudHMpIHtcbiAgICAgICAgZWFjaCRiKHNjaGVtYUl0ZW1zLCAoZWxlbWVudCwgbmFtZSkgPT4ge1xuICAgICAgICAgIGVsZW1lbnRzW25hbWVdID0ge1xuICAgICAgICAgICAgYXR0cmlidXRlczogZWxlbWVudC5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgYXR0cmlidXRlc09yZGVyOiBlbGVtZW50LmF0dHJpYnV0ZXNPcmRlclxuICAgICAgICAgIH07XG4gICAgICAgICAgY2hpbGRyZW5bbmFtZV0gPSBlbGVtZW50LmNoaWxkcmVuO1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaCRiKHNwbGl0JDEoJ3N0cm9uZy9iIGVtL2knKSwgaXRlbSA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbXMgPSBzcGxpdCQxKGl0ZW0sICcvJyk7XG4gICAgICAgICAgZWxlbWVudHNbaXRlbXNbMV1dLm91dHB1dE5hbWUgPSBpdGVtc1swXTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2gkYih0ZXh0SW5saW5lRWxlbWVudHNNYXAsIChfdmFsLCBuYW1lKSA9PiB7XG4gICAgICAgICAgaWYgKGVsZW1lbnRzW25hbWVdKSB7XG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MucGFkZF9lbXB0eV9ibG9ja19pbmxpbmVfY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgZWxlbWVudHNbbmFtZV0ucGFkZEluRW1wdHlCbG9jayA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50c1tuYW1lXS5yZW1vdmVFbXB0eSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZWFjaCRiKHNwbGl0JDEoJ29sIHVsIGJsb2NrcXVvdGUgYSB0YWJsZSB0Ym9keScpLCBuYW1lID0+IHtcbiAgICAgICAgICBpZiAoZWxlbWVudHNbbmFtZV0pIHtcbiAgICAgICAgICAgIGVsZW1lbnRzW25hbWVdLnJlbW92ZUVtcHR5ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoJGIoc3BsaXQkMSgncCBoMSBoMiBoMyBoNCBoNSBoNiB0aCB0ZCBwcmUgZGl2IGFkZHJlc3MgY2FwdGlvbiBsaSBzdW1tYXJ5JyksIG5hbWUgPT4ge1xuICAgICAgICAgIGlmIChlbGVtZW50c1tuYW1lXSkge1xuICAgICAgICAgICAgZWxlbWVudHNbbmFtZV0ucGFkZEVtcHR5ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoJGIoc3BsaXQkMSgnc3BhbicpLCBuYW1lID0+IHtcbiAgICAgICAgICBlbGVtZW50c1tuYW1lXS5yZW1vdmVFbXB0eUF0dHJzID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRWYWxpZEVsZW1lbnRzKHNldHRpbmdzLnZhbGlkX2VsZW1lbnRzKTtcbiAgICAgICAgZWFjaCRiKHNjaGVtYUl0ZW1zLCAoZWxlbWVudCwgbmFtZSkgPT4ge1xuICAgICAgICAgIGNoaWxkcmVuW25hbWVdID0gZWxlbWVudC5jaGlsZHJlbjtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhZGRDdXN0b21FbGVtZW50cyhzZXR0aW5ncy5jdXN0b21fZWxlbWVudHMpO1xuICAgICAgYWRkVmFsaWRDaGlsZHJlbihzZXR0aW5ncy52YWxpZF9jaGlsZHJlbik7XG4gICAgICBhZGRWYWxpZEVsZW1lbnRzKHNldHRpbmdzLmV4dGVuZGVkX3ZhbGlkX2VsZW1lbnRzKTtcbiAgICAgIGFkZFZhbGlkQ2hpbGRyZW4oJytvbFt1bHxvbF0sK3VsW3VsfG9sXScpO1xuICAgICAgZWFjaCRiKHtcbiAgICAgICAgZGQ6ICdkbCcsXG4gICAgICAgIGR0OiAnZGwnLFxuICAgICAgICBsaTogJ3VsIG9sJyxcbiAgICAgICAgdGQ6ICd0cicsXG4gICAgICAgIHRoOiAndHInLFxuICAgICAgICB0cjogJ3Rib2R5IHRoZWFkIHRmb290JyxcbiAgICAgICAgdGJvZHk6ICd0YWJsZScsXG4gICAgICAgIHRoZWFkOiAndGFibGUnLFxuICAgICAgICB0Zm9vdDogJ3RhYmxlJyxcbiAgICAgICAgbGVnZW5kOiAnZmllbGRzZXQnLFxuICAgICAgICBhcmVhOiAnbWFwJyxcbiAgICAgICAgcGFyYW06ICd2aWRlbyBhdWRpbyBvYmplY3QnXG4gICAgICB9LCAocGFyZW50cywgaXRlbSkgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudHNbaXRlbV0pIHtcbiAgICAgICAgICBlbGVtZW50c1tpdGVtXS5wYXJlbnRzUmVxdWlyZWQgPSBzcGxpdCQxKHBhcmVudHMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChzZXR0aW5ncy5pbnZhbGlkX2VsZW1lbnRzKSB7XG4gICAgICAgIGVhY2gkYihleHBsb2RlJDIoc2V0dGluZ3MuaW52YWxpZF9lbGVtZW50cyksIGl0ZW0gPT4ge1xuICAgICAgICAgIGlmIChlbGVtZW50c1tpdGVtXSkge1xuICAgICAgICAgICAgZGVsZXRlIGVsZW1lbnRzW2l0ZW1dO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoIWdldEVsZW1lbnRSdWxlKCdzcGFuJykpIHtcbiAgICAgICAgYWRkVmFsaWRFbGVtZW50cygnc3BhblshZGF0YS1tY2UtdHlwZXwqXScpO1xuICAgICAgfVxuICAgICAgY29uc3QgZ2V0VmFsaWRTdHlsZXMgPSBjb25zdGFudCh2YWxpZFN0eWxlcyk7XG4gICAgICBjb25zdCBnZXRJbnZhbGlkU3R5bGVzID0gY29uc3RhbnQoaW52YWxpZFN0eWxlcyk7XG4gICAgICBjb25zdCBnZXRWYWxpZENsYXNzZXMgPSBjb25zdGFudCh2YWxpZENsYXNzZXMpO1xuICAgICAgY29uc3QgZ2V0Qm9vbEF0dHJzID0gY29uc3RhbnQoYm9vbEF0dHJNYXApO1xuICAgICAgY29uc3QgZ2V0QmxvY2tFbGVtZW50cyA9IGNvbnN0YW50KGJsb2NrRWxlbWVudHNNYXApO1xuICAgICAgY29uc3QgZ2V0VGV4dEJsb2NrRWxlbWVudHMgPSBjb25zdGFudCh0ZXh0QmxvY2tFbGVtZW50c01hcCk7XG4gICAgICBjb25zdCBnZXRUZXh0SW5saW5lRWxlbWVudHMgPSBjb25zdGFudCh0ZXh0SW5saW5lRWxlbWVudHNNYXApO1xuICAgICAgY29uc3QgZ2V0Vm9pZEVsZW1lbnRzID0gY29uc3RhbnQoT2JqZWN0LnNlYWwodm9pZEVsZW1lbnRzTWFwKSk7XG4gICAgICBjb25zdCBnZXRTZWxmQ2xvc2luZ0VsZW1lbnRzID0gY29uc3RhbnQoc2VsZkNsb3NpbmdFbGVtZW50c01hcCk7XG4gICAgICBjb25zdCBnZXROb25FbXB0eUVsZW1lbnRzID0gY29uc3RhbnQobm9uRW1wdHlFbGVtZW50c01hcCk7XG4gICAgICBjb25zdCBnZXRNb3ZlQ2FyZXRCZWZvcmVPbkVudGVyRWxlbWVudHMgPSBjb25zdGFudChtb3ZlQ2FyZXRCZWZvcmVPbkVudGVyRWxlbWVudHNNYXApO1xuICAgICAgY29uc3QgZ2V0V2hpdGVzcGFjZUVsZW1lbnRzID0gY29uc3RhbnQod2hpdGVzcGFjZUVsZW1lbnRzTWFwKTtcbiAgICAgIGNvbnN0IGdldFRyYW5zcGFyZW50RWxlbWVudHMgPSBjb25zdGFudCh0cmFuc3BhcmVudEVsZW1lbnRzTWFwKTtcbiAgICAgIGNvbnN0IGdldFNwZWNpYWxFbGVtZW50cyA9IGNvbnN0YW50KE9iamVjdC5zZWFsKHNwZWNpYWxFbGVtZW50cykpO1xuICAgICAgY29uc3QgaXNWYWxpZENoaWxkID0gKG5hbWUsIGNoaWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGNoaWxkcmVuW25hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIHJldHVybiAhIShwYXJlbnQgJiYgcGFyZW50W2NoaWxkLnRvTG93ZXJDYXNlKCldKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1ZhbGlkID0gKG5hbWUsIGF0dHIpID0+IHtcbiAgICAgICAgY29uc3QgcnVsZSA9IGdldEVsZW1lbnRSdWxlKG5hbWUpO1xuICAgICAgICBpZiAocnVsZSkge1xuICAgICAgICAgIGlmIChhdHRyKSB7XG4gICAgICAgICAgICBpZiAocnVsZS5hdHRyaWJ1dGVzW2F0dHJdKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXR0clBhdHRlcm5zID0gcnVsZS5hdHRyaWJ1dGVQYXR0ZXJucztcbiAgICAgICAgICAgIGlmIChhdHRyUGF0dGVybnMpIHtcbiAgICAgICAgICAgICAgbGV0IGkgPSBhdHRyUGF0dGVybnMubGVuZ3RoO1xuICAgICAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKGF0dHJQYXR0ZXJuc1tpXS5wYXR0ZXJuLnRlc3QoYXR0cikpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldEN1c3RvbUVsZW1lbnRzID0gY29uc3RhbnQoY3VzdG9tRWxlbWVudHNNYXApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogc2NoZW1hVHlwZSxcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICBnZXRWYWxpZFN0eWxlcyxcbiAgICAgICAgZ2V0VmFsaWRDbGFzc2VzLFxuICAgICAgICBnZXRCbG9ja0VsZW1lbnRzLFxuICAgICAgICBnZXRJbnZhbGlkU3R5bGVzLFxuICAgICAgICBnZXRWb2lkRWxlbWVudHMsXG4gICAgICAgIGdldFRleHRCbG9ja0VsZW1lbnRzLFxuICAgICAgICBnZXRUZXh0SW5saW5lRWxlbWVudHMsXG4gICAgICAgIGdldEJvb2xBdHRycyxcbiAgICAgICAgZ2V0RWxlbWVudFJ1bGUsXG4gICAgICAgIGdldFNlbGZDbG9zaW5nRWxlbWVudHMsXG4gICAgICAgIGdldE5vbkVtcHR5RWxlbWVudHMsXG4gICAgICAgIGdldE1vdmVDYXJldEJlZm9yZU9uRW50ZXJFbGVtZW50cyxcbiAgICAgICAgZ2V0V2hpdGVzcGFjZUVsZW1lbnRzLFxuICAgICAgICBnZXRUcmFuc3BhcmVudEVsZW1lbnRzLFxuICAgICAgICBnZXRTcGVjaWFsRWxlbWVudHMsXG4gICAgICAgIGlzVmFsaWRDaGlsZCxcbiAgICAgICAgaXNWYWxpZCxcbiAgICAgICAgZ2V0Q3VzdG9tRWxlbWVudHMsXG4gICAgICAgIGFkZFZhbGlkRWxlbWVudHMsXG4gICAgICAgIHNldFZhbGlkRWxlbWVudHMsXG4gICAgICAgIGFkZEN1c3RvbUVsZW1lbnRzLFxuICAgICAgICBhZGRWYWxpZENoaWxkcmVuXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBTdHlsZXMgPSAoc2V0dGluZ3MgPSB7fSwgc2NoZW1hKSA9PiB7XG4gICAgICBjb25zdCB1cmxPclN0clJlZ0V4cCA9IC8oPzp1cmwoPzooPzpcXChcXHMqXFxcIihbXlxcXCJdKylcXFwiXFxzKlxcKSl8KD86XFwoXFxzKlxcJyhbXlxcJ10rKVxcJ1xccypcXCkpfCg/OlxcKFxccyooW14pXFxzXSspXFxzKlxcKSkpKXwoPzpcXCcoW15cXCddKylcXCcpfCg/OlxcXCIoW15cXFwiXSspXFxcIikvZ2k7XG4gICAgICBjb25zdCBzdHlsZVJlZ0V4cCA9IC9cXHMqKFteOl0rKTpcXHMqKFteO10rKTs/L2c7XG4gICAgICBjb25zdCB0cmltUmlnaHRSZWdFeHAgPSAvXFxzKyQvO1xuICAgICAgY29uc3QgZW5jb2RpbmdMb29rdXAgPSB7fTtcbiAgICAgIGxldCB2YWxpZFN0eWxlcztcbiAgICAgIGxldCBpbnZhbGlkU3R5bGVzO1xuICAgICAgY29uc3QgaW52aXNpYmxlQ2hhciA9IHplcm9XaWR0aDtcbiAgICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAgdmFsaWRTdHlsZXMgPSBzY2hlbWEuZ2V0VmFsaWRTdHlsZXMoKTtcbiAgICAgICAgaW52YWxpZFN0eWxlcyA9IHNjaGVtYS5nZXRJbnZhbGlkU3R5bGVzKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBlbmNvZGluZ0l0ZW1zID0gKGBcXFxcXCIgXFxcXCcgXFxcXDsgXFxcXDogOyA6IGAgKyBpbnZpc2libGVDaGFyKS5zcGxpdCgnICcpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbmNvZGluZ0l0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVuY29kaW5nTG9va3VwW2VuY29kaW5nSXRlbXNbaV1dID0gaW52aXNpYmxlQ2hhciArIGk7XG4gICAgICAgIGVuY29kaW5nTG9va3VwW2ludmlzaWJsZUNoYXIgKyBpXSA9IGVuY29kaW5nSXRlbXNbaV07XG4gICAgICB9XG4gICAgICBjb25zdCBzZWxmID0ge1xuICAgICAgICBwYXJzZTogY3NzID0+IHtcbiAgICAgICAgICBjb25zdCBzdHlsZXMgPSB7fTtcbiAgICAgICAgICBsZXQgaXNFbmNvZGVkID0gZmFsc2U7XG4gICAgICAgICAgY29uc3QgdXJsQ29udmVydGVyID0gc2V0dGluZ3MudXJsX2NvbnZlcnRlcjtcbiAgICAgICAgICBjb25zdCB1cmxDb252ZXJ0ZXJTY29wZSA9IHNldHRpbmdzLnVybF9jb252ZXJ0ZXJfc2NvcGUgfHwgc2VsZjtcbiAgICAgICAgICBjb25zdCBjb21wcmVzcyA9IChwcmVmaXgsIHN1ZmZpeCwgbm9Kb2luKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0b3AgPSBzdHlsZXNbcHJlZml4ICsgJy10b3AnICsgc3VmZml4XTtcbiAgICAgICAgICAgIGlmICghdG9wKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gc3R5bGVzW3ByZWZpeCArICctcmlnaHQnICsgc3VmZml4XTtcbiAgICAgICAgICAgIGlmICghcmlnaHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYm90dG9tID0gc3R5bGVzW3ByZWZpeCArICctYm90dG9tJyArIHN1ZmZpeF07XG4gICAgICAgICAgICBpZiAoIWJvdHRvbSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gc3R5bGVzW3ByZWZpeCArICctbGVmdCcgKyBzdWZmaXhdO1xuICAgICAgICAgICAgaWYgKCFsZWZ0KSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJveCA9IFtcbiAgICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgICByaWdodCxcbiAgICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgICBsZWZ0XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbGV0IGkgPSBib3gubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgICAgaWYgKGJveFtpXSAhPT0gYm94W2kgKyAxXSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaSA+IC0xICYmIG5vSm9pbikge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHlsZXNbcHJlZml4ICsgc3VmZml4XSA9IGkgPT09IC0xID8gYm94WzBdIDogYm94LmpvaW4oJyAnKTtcbiAgICAgICAgICAgIGRlbGV0ZSBzdHlsZXNbcHJlZml4ICsgJy10b3AnICsgc3VmZml4XTtcbiAgICAgICAgICAgIGRlbGV0ZSBzdHlsZXNbcHJlZml4ICsgJy1yaWdodCcgKyBzdWZmaXhdO1xuICAgICAgICAgICAgZGVsZXRlIHN0eWxlc1twcmVmaXggKyAnLWJvdHRvbScgKyBzdWZmaXhdO1xuICAgICAgICAgICAgZGVsZXRlIHN0eWxlc1twcmVmaXggKyAnLWxlZnQnICsgc3VmZml4XTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGNhbkNvbXByZXNzID0ga2V5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gc3R5bGVzW2tleV07XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHZhbHVlLmluZGV4T2YoJywnKSA+IC0xID8gW3ZhbHVlXSA6IHZhbHVlLnNwbGl0KCcgJyk7XG4gICAgICAgICAgICBsZXQgaSA9IHZhbHVlcy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZXNbaV0gIT09IHZhbHVlc1swXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3R5bGVzW2tleV0gPSB2YWx1ZXNbMF07XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGNvbXByZXNzMiA9ICh0YXJnZXQsIGEsIGIsIGMpID0+IHtcbiAgICAgICAgICAgIGlmICghY2FuQ29tcHJlc3MoYSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjYW5Db21wcmVzcyhiKSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNhbkNvbXByZXNzKGMpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0eWxlc1t0YXJnZXRdID0gc3R5bGVzW2FdICsgJyAnICsgc3R5bGVzW2JdICsgJyAnICsgc3R5bGVzW2NdO1xuICAgICAgICAgICAgZGVsZXRlIHN0eWxlc1thXTtcbiAgICAgICAgICAgIGRlbGV0ZSBzdHlsZXNbYl07XG4gICAgICAgICAgICBkZWxldGUgc3R5bGVzW2NdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgZW5jb2RlID0gc3RyID0+IHtcbiAgICAgICAgICAgIGlzRW5jb2RlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RpbmdMb29rdXBbc3RyXTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGRlY29kZSA9IChzdHIsIGtlZXBTbGFzaGVzKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNFbmNvZGVkKSB7XG4gICAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHVGRUZGWzAtOV0vZywgc3RyID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RpbmdMb29rdXBbc3RyXTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWtlZXBTbGFzaGVzKSB7XG4gICAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXFxcKFtcXCdcXFwiOzpdKS9nLCAnJDEnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBkZWNvZGVTaW5nbGVIZXhTZXF1ZW5jZSA9IGVzY1NlcSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChlc2NTZXEuc2xpY2UoMSksIDE2KSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBkZWNvZGVIZXhTZXF1ZW5jZXMgPSB2YWx1ZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvXFxcXFswLTlhLWZdKy9naSwgZGVjb2RlU2luZ2xlSGV4U2VxdWVuY2UpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgcHJvY2Vzc1VybCA9IChtYXRjaCwgdXJsLCB1cmwyLCB1cmwzLCBzdHIsIHN0cjIpID0+IHtcbiAgICAgICAgICAgIHN0ciA9IHN0ciB8fCBzdHIyO1xuICAgICAgICAgICAgaWYgKHN0cikge1xuICAgICAgICAgICAgICBzdHIgPSBkZWNvZGUoc3RyKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGAnYCArIHN0ci5yZXBsYWNlKC9cXCcvZywgYFxcXFwnYCkgKyBgJ2A7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cmwgPSBkZWNvZGUodXJsIHx8IHVybDIgfHwgdXJsMyB8fCAnJyk7XG4gICAgICAgICAgICBpZiAoIXNldHRpbmdzLmFsbG93X3NjcmlwdF91cmxzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNjcmlwdFVybCA9IHVybC5yZXBsYWNlKC9bXFxzXFxyXFxuXSsvZywgJycpO1xuICAgICAgICAgICAgICBpZiAoLyhqYXZhfHZiKXNjcmlwdDovaS50ZXN0KHNjcmlwdFVybCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCFzZXR0aW5ncy5hbGxvd19zdmdfZGF0YV91cmxzICYmIC9eZGF0YTppbWFnZVxcL3N2Zy9pLnRlc3Qoc2NyaXB0VXJsKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHVybENvbnZlcnRlcikge1xuICAgICAgICAgICAgICB1cmwgPSB1cmxDb252ZXJ0ZXIuY2FsbCh1cmxDb252ZXJ0ZXJTY29wZSwgdXJsLCAnc3R5bGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBgdXJsKCdgICsgdXJsLnJlcGxhY2UoL1xcJy9nLCBgXFxcXCdgKSArIGAnKWA7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoY3NzKSB7XG4gICAgICAgICAgICBjc3MgPSBjc3MucmVwbGFjZSgvW1xcdTAwMDAtXFx1MDAxRl0vZywgJycpO1xuICAgICAgICAgICAgY3NzID0gY3NzLnJlcGxhY2UoL1xcXFxbXFxcIlxcJzs6XFx1RkVGRl0vZywgZW5jb2RlKS5yZXBsYWNlKC9cXFwiW15cXFwiXStcXFwifFxcJ1teXFwnXStcXCcvZywgc3RyID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bOzpdL2csIGVuY29kZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBtYXRjaGVzO1xuICAgICAgICAgICAgd2hpbGUgKG1hdGNoZXMgPSBzdHlsZVJlZ0V4cC5leGVjKGNzcykpIHtcbiAgICAgICAgICAgICAgc3R5bGVSZWdFeHAubGFzdEluZGV4ID0gbWF0Y2hlcy5pbmRleCArIG1hdGNoZXNbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoZXNbMV0ucmVwbGFjZSh0cmltUmlnaHRSZWdFeHAsICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBtYXRjaGVzWzJdLnJlcGxhY2UodHJpbVJpZ2h0UmVnRXhwLCAnJyk7XG4gICAgICAgICAgICAgIGlmIChuYW1lICYmIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbmFtZSA9IGRlY29kZUhleFNlcXVlbmNlcyhuYW1lKTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGRlY29kZUhleFNlcXVlbmNlcyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUuaW5kZXhPZihpbnZpc2libGVDaGFyKSAhPT0gLTEgfHwgbmFtZS5pbmRleE9mKCdcIicpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghc2V0dGluZ3MuYWxsb3dfc2NyaXB0X3VybHMgJiYgKG5hbWUgPT09ICdiZWhhdmlvcicgfHwgL2V4cHJlc3Npb25cXHMqXFwofFxcL1xcKnxcXCpcXC8vLnRlc3QodmFsdWUpKSkge1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnZm9udC13ZWlnaHQnICYmIHZhbHVlID09PSAnNzAwJykge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSAnYm9sZCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnY29sb3InIHx8IG5hbWUgPT09ICdiYWNrZ3JvdW5kLWNvbG9yJykge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UodXJsT3JTdHJSZWdFeHAsIHByb2Nlc3NVcmwpO1xuICAgICAgICAgICAgICAgIHN0eWxlc1tuYW1lXSA9IGlzRW5jb2RlZCA/IGRlY29kZSh2YWx1ZSwgdHJ1ZSkgOiB2YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcHJlc3MoJ2JvcmRlcicsICcnLCB0cnVlKTtcbiAgICAgICAgICAgIGNvbXByZXNzKCdib3JkZXInLCAnLXdpZHRoJyk7XG4gICAgICAgICAgICBjb21wcmVzcygnYm9yZGVyJywgJy1jb2xvcicpO1xuICAgICAgICAgICAgY29tcHJlc3MoJ2JvcmRlcicsICctc3R5bGUnKTtcbiAgICAgICAgICAgIGNvbXByZXNzKCdwYWRkaW5nJywgJycpO1xuICAgICAgICAgICAgY29tcHJlc3MoJ21hcmdpbicsICcnKTtcbiAgICAgICAgICAgIGNvbXByZXNzMignYm9yZGVyJywgJ2JvcmRlci13aWR0aCcsICdib3JkZXItc3R5bGUnLCAnYm9yZGVyLWNvbG9yJyk7XG4gICAgICAgICAgICBpZiAoc3R5bGVzLmJvcmRlciA9PT0gJ21lZGl1bSBub25lJykge1xuICAgICAgICAgICAgICBkZWxldGUgc3R5bGVzLmJvcmRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHlsZXNbJ2JvcmRlci1pbWFnZSddID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHN0eWxlc1snYm9yZGVyLWltYWdlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNlcmlhbGl6ZTogKHN0eWxlcywgZWxlbWVudE5hbWUpID0+IHtcbiAgICAgICAgICBsZXQgY3NzID0gJyc7XG4gICAgICAgICAgY29uc3Qgc2VyaWFsaXplU3R5bGVzID0gKGVsZW1OYW1lLCB2YWxpZFN0eWxlTGlzdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3R5bGVMaXN0ID0gdmFsaWRTdHlsZUxpc3RbZWxlbU5hbWVdO1xuICAgICAgICAgICAgaWYgKHN0eWxlTGlzdCkge1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHN0eWxlTGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gc3R5bGVMaXN0W2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gc3R5bGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgY3NzICs9IChjc3MubGVuZ3RoID4gMCA/ICcgJyA6ICcnKSArIG5hbWUgKyAnOiAnICsgdmFsdWUgKyAnOyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gKG5hbWUsIGVsZW1OYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWludmFsaWRTdHlsZXMgfHwgIWVsZW1OYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHN0eWxlTWFwID0gaW52YWxpZFN0eWxlc1snKiddO1xuICAgICAgICAgICAgaWYgKHN0eWxlTWFwICYmIHN0eWxlTWFwW25hbWVdKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0eWxlTWFwID0gaW52YWxpZFN0eWxlc1tlbGVtTmFtZV07XG4gICAgICAgICAgICByZXR1cm4gIShzdHlsZU1hcCAmJiBzdHlsZU1hcFtuYW1lXSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoZWxlbWVudE5hbWUgJiYgdmFsaWRTdHlsZXMpIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZVN0eWxlcygnKicsIHZhbGlkU3R5bGVzKTtcbiAgICAgICAgICAgIHNlcmlhbGl6ZVN0eWxlcyhlbGVtZW50TmFtZSwgdmFsaWRTdHlsZXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlYWNoJGQoc3R5bGVzLCAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIGlzVmFsaWQobmFtZSwgZWxlbWVudE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgY3NzICs9IChjc3MubGVuZ3RoID4gMCA/ICcgJyA6ICcnKSArIG5hbWUgKyAnOiAnICsgdmFsdWUgKyAnOyc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY3NzO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcblxuICAgIGNvbnN0IGRlcHJlY2F0ZWQgPSB7XG4gICAgICBrZXlMb2NhdGlvbjogdHJ1ZSxcbiAgICAgIGxheWVyWDogdHJ1ZSxcbiAgICAgIGxheWVyWTogdHJ1ZSxcbiAgICAgIHJldHVyblZhbHVlOiB0cnVlLFxuICAgICAgd2Via2l0TW92ZW1lbnRYOiB0cnVlLFxuICAgICAgd2Via2l0TW92ZW1lbnRZOiB0cnVlLFxuICAgICAga2V5SWRlbnRpZmllcjogdHJ1ZSxcbiAgICAgIG1velByZXNzdXJlOiB0cnVlXG4gICAgfTtcbiAgICBjb25zdCBpc05hdGl2ZUV2ZW50ID0gZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBFdmVudCB8fCBpc0Z1bmN0aW9uKGV2ZW50LmluaXRFdmVudCk7XG4gICAgY29uc3QgaGFzSXNEZWZhdWx0UHJldmVudGVkID0gZXZlbnQgPT4gZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkID09PSBhbHdheXMgfHwgZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkID09PSBuZXZlcjtcbiAgICBjb25zdCBuZWVkc05vcm1hbGl6aW5nID0gZXZlbnQgPT4gaXNOdWxsYWJsZShldmVudC5wcmV2ZW50RGVmYXVsdCkgfHwgaXNOYXRpdmVFdmVudChldmVudCk7XG4gICAgY29uc3QgY2xvbmUkMyA9IChvcmlnaW5hbEV2ZW50LCBkYXRhKSA9PiB7XG4gICAgICBjb25zdCBldmVudCA9IGRhdGEgIT09IG51bGwgJiYgZGF0YSAhPT0gdm9pZCAwID8gZGF0YSA6IHt9O1xuICAgICAgZm9yIChjb25zdCBuYW1lIGluIG9yaWdpbmFsRXZlbnQpIHtcbiAgICAgICAgaWYgKCFoYXMkMihkZXByZWNhdGVkLCBuYW1lKSkge1xuICAgICAgICAgIGV2ZW50W25hbWVdID0gb3JpZ2luYWxFdmVudFtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzTm9uTnVsbGFibGUob3JpZ2luYWxFdmVudC5jb21wb3NlZFBhdGgpKSB7XG4gICAgICAgIGV2ZW50LmNvbXBvc2VkUGF0aCA9ICgpID0+IG9yaWdpbmFsRXZlbnQuY29tcG9zZWRQYXRoKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfTtcbiAgICBjb25zdCBub3JtYWxpemUkMyA9ICh0eXBlLCBvcmlnaW5hbEV2ZW50LCBmYWxsYmFja1RhcmdldCwgZGF0YSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgZXZlbnQgPSBjbG9uZSQzKG9yaWdpbmFsRXZlbnQsIGRhdGEpO1xuICAgICAgZXZlbnQudHlwZSA9IHR5cGU7XG4gICAgICBpZiAoaXNOdWxsYWJsZShldmVudC50YXJnZXQpKSB7XG4gICAgICAgIGV2ZW50LnRhcmdldCA9IChfYSA9IGV2ZW50LnNyY0VsZW1lbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbGxiYWNrVGFyZ2V0O1xuICAgICAgfVxuICAgICAgaWYgKG5lZWRzTm9ybWFsaXppbmcob3JpZ2luYWxFdmVudCkpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQgPSAoKSA9PiB7XG4gICAgICAgICAgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgICAgICAgZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkID0gYWx3YXlzO1xuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKG9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQpKSB7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24gPSAoKSA9PiB7XG4gICAgICAgICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgICAgICBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGFsd2F5cztcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihvcmlnaW5hbEV2ZW50LnN0b3BQcm9wYWdhdGlvbikpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gPSAoKSA9PiB7XG4gICAgICAgICAgZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSBhbHdheXM7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH07XG4gICAgICAgIGlmICghaGFzSXNEZWZhdWx0UHJldmVudGVkKGV2ZW50KSkge1xuICAgICAgICAgIGV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCA9IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgPT09IHRydWUgPyBhbHdheXMgOiBuZXZlcjtcbiAgICAgICAgICBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGV2ZW50LmNhbmNlbEJ1YmJsZSA9PT0gdHJ1ZSA/IGFsd2F5cyA6IG5ldmVyO1xuICAgICAgICAgIGV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gbmV2ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBldmVudDtcbiAgICB9O1xuXG4gICAgY29uc3QgZXZlbnRFeHBhbmRvUHJlZml4ID0gJ21jZS1kYXRhLSc7XG4gICAgY29uc3QgbW91c2VFdmVudFJlID0gL14oPzptb3VzZXxjb250ZXh0bWVudSl8Y2xpY2svO1xuICAgIGNvbnN0IGFkZEV2ZW50ID0gKHRhcmdldCwgbmFtZSwgY2FsbGJhY2ssIGNhcHR1cmUpID0+IHtcbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGNhbGxiYWNrLCBjYXB0dXJlIHx8IGZhbHNlKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZUV2ZW50ID0gKHRhcmdldCwgbmFtZSwgY2FsbGJhY2ssIGNhcHR1cmUpID0+IHtcbiAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIGNhbGxiYWNrLCBjYXB0dXJlIHx8IGZhbHNlKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzTW91c2VFdmVudCA9IGV2ZW50ID0+IGlzTm9uTnVsbGFibGUoZXZlbnQpICYmIG1vdXNlRXZlbnRSZS50ZXN0KGV2ZW50LnR5cGUpO1xuICAgIGNvbnN0IGZpeCA9IChvcmlnaW5hbEV2ZW50LCBkYXRhKSA9PiB7XG4gICAgICBjb25zdCBldmVudCA9IG5vcm1hbGl6ZSQzKG9yaWdpbmFsRXZlbnQudHlwZSwgb3JpZ2luYWxFdmVudCwgZG9jdW1lbnQsIGRhdGEpO1xuICAgICAgaWYgKGlzTW91c2VFdmVudChvcmlnaW5hbEV2ZW50KSAmJiBpc1VuZGVmaW5lZChvcmlnaW5hbEV2ZW50LnBhZ2VYKSAmJiAhaXNVbmRlZmluZWQob3JpZ2luYWxFdmVudC5jbGllbnRYKSkge1xuICAgICAgICBjb25zdCBldmVudERvYyA9IGV2ZW50LnRhcmdldC5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50O1xuICAgICAgICBjb25zdCBkb2MgPSBldmVudERvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBldmVudERvYy5ib2R5O1xuICAgICAgICBjb25zdCBtb3VzZUV2ZW50ID0gZXZlbnQ7XG4gICAgICAgIG1vdXNlRXZlbnQucGFnZVggPSBvcmlnaW5hbEV2ZW50LmNsaWVudFggKyAoZG9jICYmIGRvYy5zY3JvbGxMZWZ0IHx8IGJvZHkgJiYgYm9keS5zY3JvbGxMZWZ0IHx8IDApIC0gKGRvYyAmJiBkb2MuY2xpZW50TGVmdCB8fCBib2R5ICYmIGJvZHkuY2xpZW50TGVmdCB8fCAwKTtcbiAgICAgICAgbW91c2VFdmVudC5wYWdlWSA9IG9yaWdpbmFsRXZlbnQuY2xpZW50WSArIChkb2MgJiYgZG9jLnNjcm9sbFRvcCB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsVG9wIHx8IDApIC0gKGRvYyAmJiBkb2MuY2xpZW50VG9wIHx8IGJvZHkgJiYgYm9keS5jbGllbnRUb3AgfHwgMCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfTtcbiAgICBjb25zdCBiaW5kT25SZWFkeSA9ICh3aW4sIGNhbGxiYWNrLCBldmVudFV0aWxzKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSB3aW4uZG9jdW1lbnQsIGV2ZW50ID0geyB0eXBlOiAncmVhZHknIH07XG4gICAgICBpZiAoZXZlbnRVdGlscy5kb21Mb2FkZWQpIHtcbiAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpc0RvY1JlYWR5ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gZG9jLnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScgfHwgZG9jLnJlYWR5U3RhdGUgPT09ICdpbnRlcmFjdGl2ZScgJiYgZG9jLmJvZHk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVhZHlIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICByZW1vdmVFdmVudCh3aW4sICdET01Db250ZW50TG9hZGVkJywgcmVhZHlIYW5kbGVyKTtcbiAgICAgICAgcmVtb3ZlRXZlbnQod2luLCAnbG9hZCcsIHJlYWR5SGFuZGxlcik7XG4gICAgICAgIGlmICghZXZlbnRVdGlscy5kb21Mb2FkZWQpIHtcbiAgICAgICAgICBldmVudFV0aWxzLmRvbUxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHdpbiA9IG51bGw7XG4gICAgICB9O1xuICAgICAgaWYgKGlzRG9jUmVhZHkoKSkge1xuICAgICAgICByZWFkeUhhbmRsZXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkZEV2ZW50KHdpbiwgJ0RPTUNvbnRlbnRMb2FkZWQnLCByZWFkeUhhbmRsZXIpO1xuICAgICAgfVxuICAgICAgaWYgKCFldmVudFV0aWxzLmRvbUxvYWRlZCkge1xuICAgICAgICBhZGRFdmVudCh3aW4sICdsb2FkJywgcmVhZHlIYW5kbGVyKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNsYXNzIEV2ZW50VXRpbHMge1xuICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZG9tTG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZXZlbnRzID0ge307XG4gICAgICAgIHRoaXMuY291bnQgPSAxO1xuICAgICAgICB0aGlzLmV4cGFuZG8gPSBldmVudEV4cGFuZG9QcmVmaXggKyAoK25ldyBEYXRlKCkpLnRvU3RyaW5nKDMyKTtcbiAgICAgICAgdGhpcy5oYXNGb2N1c0luID0gJ29uZm9jdXNpbicgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICB0aGlzLmNvdW50ID0gMTtcbiAgICAgIH1cbiAgICAgIGJpbmQodGFyZ2V0LCBuYW1lcywgY2FsbGJhY2ssIHNjb3BlKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgY2FsbGJhY2tMaXN0O1xuICAgICAgICBjb25zdCB3aW4gPSB3aW5kb3c7XG4gICAgICAgIGNvbnN0IGRlZmF1bHROYXRpdmVIYW5kbGVyID0gZXZ0ID0+IHtcbiAgICAgICAgICBzZWxmLmV4ZWN1dGVIYW5kbGVycyhmaXgoZXZ0IHx8IHdpbi5ldmVudCksIGlkKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCF0YXJnZXQgfHwgaXNUZXh0JGEodGFyZ2V0KSB8fCBpc0NvbW1lbnQodGFyZ2V0KSkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaztcbiAgICAgICAgfVxuICAgICAgICBsZXQgaWQ7XG4gICAgICAgIGlmICghdGFyZ2V0W3NlbGYuZXhwYW5kb10pIHtcbiAgICAgICAgICBpZCA9IHNlbGYuY291bnQrKztcbiAgICAgICAgICB0YXJnZXRbc2VsZi5leHBhbmRvXSA9IGlkO1xuICAgICAgICAgIHNlbGYuZXZlbnRzW2lkXSA9IHt9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlkID0gdGFyZ2V0W3NlbGYuZXhwYW5kb107XG4gICAgICAgIH1cbiAgICAgICAgc2NvcGUgPSBzY29wZSB8fCB0YXJnZXQ7XG4gICAgICAgIGNvbnN0IG5hbWVzTGlzdCA9IG5hbWVzLnNwbGl0KCcgJyk7XG4gICAgICAgIGxldCBpID0gbmFtZXNMaXN0Lmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgIGxldCBuYW1lID0gbmFtZXNMaXN0W2ldO1xuICAgICAgICAgIGxldCBuYXRpdmVIYW5kbGVyID0gZGVmYXVsdE5hdGl2ZUhhbmRsZXI7XG4gICAgICAgICAgbGV0IGNhcHR1cmUgPSBmYWxzZTtcbiAgICAgICAgICBsZXQgZmFrZU5hbWUgPSBmYWxzZTtcbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ0RPTUNvbnRlbnRMb2FkZWQnKSB7XG4gICAgICAgICAgICBuYW1lID0gJ3JlYWR5JztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNlbGYuZG9tTG9hZGVkICYmIG5hbWUgPT09ICdyZWFkeScgJiYgdGFyZ2V0LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoc2NvcGUsIGZpeCh7IHR5cGU6IG5hbWUgfSkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghc2VsZi5oYXNGb2N1c0luICYmIChuYW1lID09PSAnZm9jdXNpbicgfHwgbmFtZSA9PT0gJ2ZvY3Vzb3V0JykpIHtcbiAgICAgICAgICAgIGNhcHR1cmUgPSB0cnVlO1xuICAgICAgICAgICAgZmFrZU5hbWUgPSBuYW1lID09PSAnZm9jdXNpbicgPyAnZm9jdXMnIDogJ2JsdXInO1xuICAgICAgICAgICAgbmF0aXZlSGFuZGxlciA9IGV2dCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gZml4KGV2dCB8fCB3aW4uZXZlbnQpO1xuICAgICAgICAgICAgICBldmVudC50eXBlID0gZXZlbnQudHlwZSA9PT0gJ2ZvY3VzJyA/ICdmb2N1c2luJyA6ICdmb2N1c291dCc7XG4gICAgICAgICAgICAgIHNlbGYuZXhlY3V0ZUhhbmRsZXJzKGV2ZW50LCBpZCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYWxsYmFja0xpc3QgPSBzZWxmLmV2ZW50c1tpZF1bbmFtZV07XG4gICAgICAgICAgaWYgKCFjYWxsYmFja0xpc3QpIHtcbiAgICAgICAgICAgIHNlbGYuZXZlbnRzW2lkXVtuYW1lXSA9IGNhbGxiYWNrTGlzdCA9IFt7XG4gICAgICAgICAgICAgICAgZnVuYzogY2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgc2NvcGVcbiAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICBjYWxsYmFja0xpc3QuZmFrZU5hbWUgPSBmYWtlTmFtZTtcbiAgICAgICAgICAgIGNhbGxiYWNrTGlzdC5jYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICAgIGNhbGxiYWNrTGlzdC5uYXRpdmVIYW5kbGVyID0gbmF0aXZlSGFuZGxlcjtcbiAgICAgICAgICAgIGlmIChuYW1lID09PSAncmVhZHknKSB7XG4gICAgICAgICAgICAgIGJpbmRPblJlYWR5KHRhcmdldCwgbmF0aXZlSGFuZGxlciwgc2VsZik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhZGRFdmVudCh0YXJnZXQsIGZha2VOYW1lIHx8IG5hbWUsIG5hdGl2ZUhhbmRsZXIsIGNhcHR1cmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gJ3JlYWR5JyAmJiBzZWxmLmRvbUxvYWRlZCkge1xuICAgICAgICAgICAgICBjYWxsYmFjayhmaXgoeyB0eXBlOiBuYW1lIH0pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICBmdW5jOiBjYWxsYmFjayxcbiAgICAgICAgICAgICAgICBzY29wZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0ID0gY2FsbGJhY2tMaXN0ID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrO1xuICAgICAgfVxuICAgICAgdW5iaW5kKHRhcmdldCwgbmFtZXMsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGFyZ2V0IHx8IGlzVGV4dCRhKHRhcmdldCkgfHwgaXNDb21tZW50KHRhcmdldCkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZCA9IHRhcmdldFt0aGlzLmV4cGFuZG9dO1xuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICBsZXQgZXZlbnRNYXAgPSB0aGlzLmV2ZW50c1tpZF07XG4gICAgICAgICAgaWYgKG5hbWVzKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lc0xpc3QgPSBuYW1lcy5zcGxpdCgnICcpO1xuICAgICAgICAgICAgbGV0IGkgPSBuYW1lc0xpc3QubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgICBjb25zdCBuYW1lID0gbmFtZXNMaXN0W2ldO1xuICAgICAgICAgICAgICBjb25zdCBjYWxsYmFja0xpc3QgPSBldmVudE1hcFtuYW1lXTtcbiAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrTGlzdCkge1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgbGV0IGNpID0gY2FsbGJhY2tMaXN0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgIHdoaWxlIChjaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja0xpc3RbY2ldLmZ1bmMgPT09IGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmF0aXZlSGFuZGxlciA9IGNhbGxiYWNrTGlzdC5uYXRpdmVIYW5kbGVyO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZha2VOYW1lID0gY2FsbGJhY2tMaXN0LmZha2VOYW1lLCBjYXB0dXJlID0gY2FsbGJhY2tMaXN0LmNhcHR1cmU7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q2FsbGJhY2tMaXN0ID0gY2FsbGJhY2tMaXN0LnNsaWNlKDAsIGNpKS5jb25jYXQoY2FsbGJhY2tMaXN0LnNsaWNlKGNpICsgMSkpO1xuICAgICAgICAgICAgICAgICAgICAgIG5ld0NhbGxiYWNrTGlzdC5uYXRpdmVIYW5kbGVyID0gbmF0aXZlSGFuZGxlcjtcbiAgICAgICAgICAgICAgICAgICAgICBuZXdDYWxsYmFja0xpc3QuZmFrZU5hbWUgPSBmYWtlTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICBuZXdDYWxsYmFja0xpc3QuY2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRNYXBbbmFtZV0gPSBuZXdDYWxsYmFja0xpc3Q7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFjYWxsYmFjayB8fCBjYWxsYmFja0xpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICBkZWxldGUgZXZlbnRNYXBbbmFtZV07XG4gICAgICAgICAgICAgICAgICByZW1vdmVFdmVudCh0YXJnZXQsIGNhbGxiYWNrTGlzdC5mYWtlTmFtZSB8fCBuYW1lLCBjYWxsYmFja0xpc3QubmF0aXZlSGFuZGxlciwgY2FsbGJhY2tMaXN0LmNhcHR1cmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlYWNoJGQoZXZlbnRNYXAsIChjYWxsYmFja0xpc3QsIG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQodGFyZ2V0LCBjYWxsYmFja0xpc3QuZmFrZU5hbWUgfHwgbmFtZSwgY2FsbGJhY2tMaXN0Lm5hdGl2ZUhhbmRsZXIsIGNhbGxiYWNrTGlzdC5jYXB0dXJlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZXZlbnRNYXAgPSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIGV2ZW50TWFwKSB7XG4gICAgICAgICAgICBpZiAoaGFzJDIoZXZlbnRNYXAsIG5hbWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgdGhpcy5ldmVudHNbaWRdO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkZWxldGUgdGFyZ2V0W3RoaXMuZXhwYW5kb107XG4gICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIHRhcmdldFt0aGlzLmV4cGFuZG9dID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBmaXJlKHRhcmdldCwgbmFtZSwgYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaCh0YXJnZXQsIG5hbWUsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgZGlzcGF0Y2godGFyZ2V0LCBuYW1lLCBhcmdzKSB7XG4gICAgICAgIGlmICghdGFyZ2V0IHx8IGlzVGV4dCRhKHRhcmdldCkgfHwgaXNDb21tZW50KHRhcmdldCkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBldmVudCA9IGZpeCh7XG4gICAgICAgICAgdHlwZTogbmFtZSxcbiAgICAgICAgICB0YXJnZXRcbiAgICAgICAgfSwgYXJncyk7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBjb25zdCBpZCA9IHRhcmdldFt0aGlzLmV4cGFuZG9dO1xuICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgdGhpcy5leGVjdXRlSGFuZGxlcnMoZXZlbnQsIGlkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGUgfHwgdGFyZ2V0Lm93bmVyRG9jdW1lbnQgfHwgdGFyZ2V0LmRlZmF1bHRWaWV3IHx8IHRhcmdldC5wYXJlbnRXaW5kb3c7XG4gICAgICAgIH0gd2hpbGUgKHRhcmdldCAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgY2xlYW4odGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0IHx8IGlzVGV4dCRhKHRhcmdldCkgfHwgaXNDb21tZW50KHRhcmdldCkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFyZ2V0W3RoaXMuZXhwYW5kb10pIHtcbiAgICAgICAgICB0aGlzLnVuYmluZCh0YXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFyZ2V0LmdldEVsZW1lbnRzQnlUYWdOYW1lKSB7XG4gICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LmRvY3VtZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmdldEVsZW1lbnRzQnlUYWdOYW1lKSB7XG4gICAgICAgICAgdGhpcy51bmJpbmQodGFyZ2V0KTtcbiAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRhcmdldC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpO1xuICAgICAgICAgIGxldCBpID0gY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIHRhcmdldCA9IGNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgaWYgKHRhcmdldFt0aGlzLmV4cGFuZG9dKSB7XG4gICAgICAgICAgICAgIHRoaXMudW5iaW5kKHRhcmdldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5ldmVudHMgPSB7fTtcbiAgICAgIH1cbiAgICAgIGNhbmNlbChlKSB7XG4gICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgZXhlY3V0ZUhhbmRsZXJzKGV2dCwgaWQpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5ldmVudHNbaWRdO1xuICAgICAgICBjb25zdCBjYWxsYmFja0xpc3QgPSBjb250YWluZXIgJiYgY29udGFpbmVyW2V2dC50eXBlXTtcbiAgICAgICAgaWYgKGNhbGxiYWNrTGlzdCkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gY2FsbGJhY2tMaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBjYWxsYmFja0xpc3RbaV07XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgJiYgY2FsbGJhY2suZnVuYy5jYWxsKGNhbGxiYWNrLnNjb3BlLCBldnQpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChldnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIEV2ZW50VXRpbHMuRXZlbnQgPSBuZXcgRXZlbnRVdGlscygpO1xuXG4gICAgY29uc3QgZWFjaCRhID0gVG9vbHMuZWFjaDtcbiAgICBjb25zdCBncmVwID0gVG9vbHMuZ3JlcDtcbiAgICBjb25zdCBpbnRlcm5hbFN0eWxlTmFtZSA9ICdkYXRhLW1jZS1zdHlsZSc7XG4gICAgY29uc3QgbnVtZXJpY2FsQ3NzTWFwID0gVG9vbHMubWFrZU1hcCgnZmlsbC1vcGFjaXR5IGZvbnQtd2VpZ2h0IGxpbmUtaGVpZ2h0IG9wYWNpdHkgb3JwaGFucyB3aWRvd3Mgei1pbmRleCB6b29tJywgJyAnKTtcbiAgICBjb25zdCBsZWdhY3lTZXRBdHRyaWJ1dGUgPSAoZWxtLCBuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKGlzTnVsbGFibGUodmFsdWUpIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgICByZW1vdmUkYShlbG0sIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0JDMoZWxtLCBuYW1lLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjYW1lbENhc2VUb0h5cGhlbnMgPSBuYW1lID0+IG5hbWUucmVwbGFjZSgvW0EtWl0vZywgdiA9PiAnLScgKyB2LnRvTG93ZXJDYXNlKCkpO1xuICAgIGNvbnN0IGZpbmROb2RlSW5kZXggPSAobm9kZSwgbm9ybWFsaXplZCkgPT4ge1xuICAgICAgbGV0IGlkeCA9IDA7XG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICBmb3IgKGxldCBsYXN0Tm9kZVR5cGUgPSBub2RlLm5vZGVUeXBlLCB0ZW1wTm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nOyB0ZW1wTm9kZTsgdGVtcE5vZGUgPSB0ZW1wTm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgICBjb25zdCBub2RlVHlwZSA9IHRlbXBOb2RlLm5vZGVUeXBlO1xuICAgICAgICAgIGlmIChub3JtYWxpemVkICYmIGlzVGV4dCRhKHRlbXBOb2RlKSkge1xuICAgICAgICAgICAgaWYgKG5vZGVUeXBlID09PSBsYXN0Tm9kZVR5cGUgfHwgIXRlbXBOb2RlLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZHgrKztcbiAgICAgICAgICBsYXN0Tm9kZVR5cGUgPSBub2RlVHlwZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGlkeDtcbiAgICB9O1xuICAgIGNvbnN0IHVwZGF0ZUludGVybmFsU3R5bGVBdHRyID0gKHN0eWxlcywgZWxtKSA9PiB7XG4gICAgICBjb25zdCByYXdWYWx1ZSA9IGdldCQ5KGVsbSwgJ3N0eWxlJyk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHN0eWxlcy5zZXJpYWxpemUoc3R5bGVzLnBhcnNlKHJhd1ZhbHVlKSwgbmFtZShlbG0pKTtcbiAgICAgIGxlZ2FjeVNldEF0dHJpYnV0ZShlbG0sIGludGVybmFsU3R5bGVOYW1lLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBjb252ZXJ0U3R5bGVUb1N0cmluZyA9IChjc3NWYWx1ZSwgY3NzTmFtZSkgPT4ge1xuICAgICAgaWYgKGlzTnVtYmVyKGNzc1ZhbHVlKSkge1xuICAgICAgICByZXR1cm4gaGFzJDIobnVtZXJpY2FsQ3NzTWFwLCBjc3NOYW1lKSA/IGNzc1ZhbHVlICsgJycgOiBjc3NWYWx1ZSArICdweCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY3NzVmFsdWU7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhcHBseVN0eWxlJDEgPSAoJGVsbSwgY3NzTmFtZSwgY3NzVmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gY2FtZWxDYXNlVG9IeXBoZW5zKGNzc05hbWUpO1xuICAgICAgaWYgKGlzTnVsbGFibGUoY3NzVmFsdWUpIHx8IGNzc1ZhbHVlID09PSAnJykge1xuICAgICAgICByZW1vdmUkNigkZWxtLCBub3JtYWxpemVkTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXQkMigkZWxtLCBub3JtYWxpemVkTmFtZSwgY29udmVydFN0eWxlVG9TdHJpbmcoY3NzVmFsdWUsIG5vcm1hbGl6ZWROYW1lKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cEF0dHJIb29rcyA9IChzdHlsZXMsIHNldHRpbmdzLCBnZXRDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBrZWVwVmFsdWVzID0gc2V0dGluZ3Mua2VlcF92YWx1ZXM7XG4gICAgICBjb25zdCBrZWVwVXJsSG9vayA9IHtcbiAgICAgICAgc2V0OiAoZWxtLCB2YWx1ZSwgbmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN1Z2FyRWxtID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWxtKTtcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihzZXR0aW5ncy51cmxfY29udmVydGVyKSAmJiBpc05vbk51bGxhYmxlKHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBzZXR0aW5ncy51cmxfY29udmVydGVyLmNhbGwoc2V0dGluZ3MudXJsX2NvbnZlcnRlcl9zY29wZSB8fCBnZXRDb250ZXh0KCksIFN0cmluZyh2YWx1ZSksIG5hbWUsIGVsbSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGludGVybmFsTmFtZSA9ICdkYXRhLW1jZS0nICsgbmFtZTtcbiAgICAgICAgICBsZWdhY3lTZXRBdHRyaWJ1dGUoc3VnYXJFbG0sIGludGVybmFsTmFtZSwgdmFsdWUpO1xuICAgICAgICAgIGxlZ2FjeVNldEF0dHJpYnV0ZShzdWdhckVsbSwgbmFtZSwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBnZXQ6IChlbG0sIG5hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdWdhckVsbSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsbSk7XG4gICAgICAgICAgcmV0dXJuIGdldCQ5KHN1Z2FyRWxtLCAnZGF0YS1tY2UtJyArIG5hbWUpIHx8IGdldCQ5KHN1Z2FyRWxtLCBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGF0dHJIb29rcyA9IHtcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBzZXQ6IChlbG0sIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWdhckVsbSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsbSk7XG4gICAgICAgICAgICBpZiAoa2VlcFZhbHVlcykge1xuICAgICAgICAgICAgICBsZWdhY3lTZXRBdHRyaWJ1dGUoc3VnYXJFbG0sIGludGVybmFsU3R5bGVOYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW1vdmUkYShzdWdhckVsbSwgJ3N0eWxlJyk7XG4gICAgICAgICAgICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgICAgICAgIHNldEFsbChzdWdhckVsbSwgc3R5bGVzLnBhcnNlKHZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZXQ6IGVsbSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWdhckVsbSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsbSk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldCQ5KHN1Z2FyRWxtLCBpbnRlcm5hbFN0eWxlTmFtZSkgfHwgZ2V0JDkoc3VnYXJFbG0sICdzdHlsZScpO1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlcy5zZXJpYWxpemUoc3R5bGVzLnBhcnNlKHZhbHVlKSwgbmFtZShzdWdhckVsbSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChrZWVwVmFsdWVzKSB7XG4gICAgICAgIGF0dHJIb29rcy5ocmVmID0gYXR0ckhvb2tzLnNyYyA9IGtlZXBVcmxIb29rO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGF0dHJIb29rcztcbiAgICB9O1xuICAgIGNvbnN0IERPTVV0aWxzID0gKGRvYywgc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgYWRkZWRTdHlsZXMgPSB7fTtcbiAgICAgIGNvbnN0IHdpbiA9IHdpbmRvdztcbiAgICAgIGNvbnN0IGZpbGVzID0ge307XG4gICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICBjb25zdCBzdGRNb2RlID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGJveE1vZGVsID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHN0eWxlU2hlZXRMb2FkZXIgPSBpbnN0YW5jZS5mb3JFbGVtZW50KFN1Z2FyRWxlbWVudC5mcm9tRG9tKGRvYyksIHtcbiAgICAgICAgY29udGVudENzc0NvcnM6IHNldHRpbmdzLmNvbnRlbnRDc3NDb3JzLFxuICAgICAgICByZWZlcnJlclBvbGljeTogc2V0dGluZ3MucmVmZXJyZXJQb2xpY3lcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYm91bmRFdmVudHMgPSBbXTtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IHNldHRpbmdzLnNjaGVtYSA/IHNldHRpbmdzLnNjaGVtYSA6IFNjaGVtYSh7fSk7XG4gICAgICBjb25zdCBzdHlsZXMgPSBTdHlsZXMoe1xuICAgICAgICB1cmxfY29udmVydGVyOiBzZXR0aW5ncy51cmxfY29udmVydGVyLFxuICAgICAgICB1cmxfY29udmVydGVyX3Njb3BlOiBzZXR0aW5ncy51cmxfY29udmVydGVyX3Njb3BlXG4gICAgICB9LCBzZXR0aW5ncy5zY2hlbWEpO1xuICAgICAgY29uc3QgZXZlbnRzID0gc2V0dGluZ3Mub3duRXZlbnRzID8gbmV3IEV2ZW50VXRpbHMoKSA6IEV2ZW50VXRpbHMuRXZlbnQ7XG4gICAgICBjb25zdCBibG9ja0VsZW1lbnRzTWFwID0gc2NoZW1hLmdldEJsb2NrRWxlbWVudHMoKTtcbiAgICAgIGNvbnN0IGlzQmxvY2sgPSBub2RlID0+IHtcbiAgICAgICAgaWYgKGlzU3RyaW5nKG5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuIGhhcyQyKGJsb2NrRWxlbWVudHNNYXAsIG5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBpc0VsZW1lbnQkNihub2RlKSAmJiAoaGFzJDIoYmxvY2tFbGVtZW50c01hcCwgbm9kZS5ub2RlTmFtZSkgfHwgaXNUcmFuc3BhcmVudEJsb2NrKHNjaGVtYSwgbm9kZSkpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0ID0gZWxtID0+IGVsbSAmJiBkb2MgJiYgaXNTdHJpbmcoZWxtKSA/IGRvYy5nZXRFbGVtZW50QnlJZChlbG0pIDogZWxtO1xuICAgICAgY29uc3QgX2dldCA9IGVsbSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0KGVsbSk7XG4gICAgICAgIHJldHVybiBpc05vbk51bGxhYmxlKHZhbHVlKSA/IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHZhbHVlKSA6IG51bGw7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0QXR0cmliID0gKGVsbSwgbmFtZSwgZGVmYXVsdFZhbCA9ICcnKSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgY29uc3QgJGVsbSA9IF9nZXQoZWxtKTtcbiAgICAgICAgaWYgKGlzTm9uTnVsbGFibGUoJGVsbSkgJiYgaXNFbGVtZW50JDcoJGVsbSkpIHtcbiAgICAgICAgICBjb25zdCBob29rID0gYXR0ckhvb2tzW25hbWVdO1xuICAgICAgICAgIGlmIChob29rICYmIGhvb2suZ2V0KSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGhvb2suZ2V0KCRlbG0uZG9tLCBuYW1lKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBnZXQkOSgkZWxtLCBuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUodmFsdWUpID8gdmFsdWUgOiBkZWZhdWx0VmFsO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldEF0dHJpYnMgPSBlbG0gPT4ge1xuICAgICAgICBjb25zdCBub2RlID0gZ2V0KGVsbSk7XG4gICAgICAgIHJldHVybiBpc051bGxhYmxlKG5vZGUpID8gW10gOiBub2RlLmF0dHJpYnV0ZXM7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0QXR0cmliID0gKGVsbSwgbmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgcnVuKGVsbSwgZSA9PiB7XG4gICAgICAgICAgaWYgKGlzRWxlbWVudCQ2KGUpKSB7XG4gICAgICAgICAgICBjb25zdCAkZWxtID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZSk7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSB2YWx1ZSA9PT0gJycgPyBudWxsIDogdmFsdWU7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbFZhbHVlID0gZ2V0JDkoJGVsbSwgbmFtZSk7XG4gICAgICAgICAgICBjb25zdCBob29rID0gYXR0ckhvb2tzW25hbWVdO1xuICAgICAgICAgICAgaWYgKGhvb2sgJiYgaG9vay5zZXQpIHtcbiAgICAgICAgICAgICAgaG9vay5zZXQoJGVsbS5kb20sIHZhbCwgbmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsZWdhY3lTZXRBdHRyaWJ1dGUoJGVsbSwgbmFtZSwgdmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcmlnaW5hbFZhbHVlICE9PSB2YWwgJiYgc2V0dGluZ3Mub25TZXRBdHRyaWIpIHtcbiAgICAgICAgICAgICAgc2V0dGluZ3Mub25TZXRBdHRyaWIoe1xuICAgICAgICAgICAgICAgIGF0dHJFbG06ICRlbG0uZG9tLFxuICAgICAgICAgICAgICAgIGF0dHJOYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgIGF0dHJWYWx1ZTogdmFsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgY2xvbmUgPSAobm9kZSwgZGVlcCkgPT4ge1xuICAgICAgICByZXR1cm4gbm9kZS5jbG9uZU5vZGUoZGVlcCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0Um9vdCA9ICgpID0+IHNldHRpbmdzLnJvb3RfZWxlbWVudCB8fCBkb2MuYm9keTtcbiAgICAgIGNvbnN0IGdldFZpZXdQb3J0ID0gYXJnV2luID0+IHtcbiAgICAgICAgY29uc3QgdnAgPSBnZXRCb3VuZHMoYXJnV2luKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiB2cC54LFxuICAgICAgICAgIHk6IHZwLnksXG4gICAgICAgICAgdzogdnAud2lkdGgsXG4gICAgICAgICAgaDogdnAuaGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0UG9zJDEgPSAoZWxtLCByb290RWxtKSA9PiBnZXRQb3MoZG9jLmJvZHksIGdldChlbG0pLCByb290RWxtKTtcbiAgICAgIGNvbnN0IHNldFN0eWxlID0gKGVsbSwgbmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgcnVuKGVsbSwgZSA9PiB7XG4gICAgICAgICAgY29uc3QgJGVsbSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGUpO1xuICAgICAgICAgIGFwcGx5U3R5bGUkMSgkZWxtLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgaWYgKHNldHRpbmdzLnVwZGF0ZV9zdHlsZXMpIHtcbiAgICAgICAgICAgIHVwZGF0ZUludGVybmFsU3R5bGVBdHRyKHN0eWxlcywgJGVsbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXRTdHlsZXMgPSAoZWxtLCBzdHlsZXNBcmcpID0+IHtcbiAgICAgICAgcnVuKGVsbSwgZSA9PiB7XG4gICAgICAgICAgY29uc3QgJGVsbSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGUpO1xuICAgICAgICAgIGVhY2gkZChzdHlsZXNBcmcsICh2LCBuKSA9PiB7XG4gICAgICAgICAgICBhcHBseVN0eWxlJDEoJGVsbSwgbiwgdik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHNldHRpbmdzLnVwZGF0ZV9zdHlsZXMpIHtcbiAgICAgICAgICAgIHVwZGF0ZUludGVybmFsU3R5bGVBdHRyKHN0eWxlcywgJGVsbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRTdHlsZSA9IChlbG0sIG5hbWUsIGNvbXB1dGVkKSA9PiB7XG4gICAgICAgIGNvbnN0ICRlbG0gPSBnZXQoZWxtKTtcbiAgICAgICAgaWYgKGlzTnVsbGFibGUoJGVsbSkgfHwgIWlzRWxlbWVudCQ2KCRlbG0pKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcHV0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0JDcoU3VnYXJFbGVtZW50LmZyb21Eb20oJGVsbSksIGNhbWVsQ2FzZVRvSHlwaGVucyhuYW1lKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvLShcXEQpL2csIChhLCBiKSA9PiBiLnRvVXBwZXJDYXNlKCkpO1xuICAgICAgICAgIGlmIChuYW1lID09PSAnZmxvYXQnKSB7XG4gICAgICAgICAgICBuYW1lID0gJ2Nzc0Zsb2F0JztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICRlbG0uc3R5bGUgPyAkZWxtLnN0eWxlW25hbWVdIDogdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0U2l6ZSA9IGVsbSA9PiB7XG4gICAgICAgIGNvbnN0ICRlbG0gPSBnZXQoZWxtKTtcbiAgICAgICAgaWYgKCEkZWxtKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHc6IDAsXG4gICAgICAgICAgICBoOiAwXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdyA9IGdldFN0eWxlKCRlbG0sICd3aWR0aCcpO1xuICAgICAgICBsZXQgaCA9IGdldFN0eWxlKCRlbG0sICdoZWlnaHQnKTtcbiAgICAgICAgaWYgKCF3IHx8IHcuaW5kZXhPZigncHgnKSA9PT0gLTEpIHtcbiAgICAgICAgICB3ID0gJzAnO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaCB8fCBoLmluZGV4T2YoJ3B4JykgPT09IC0xKSB7XG4gICAgICAgICAgaCA9ICcwJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHc6IHBhcnNlSW50KHcsIDEwKSB8fCAkZWxtLm9mZnNldFdpZHRoIHx8ICRlbG0uY2xpZW50V2lkdGgsXG4gICAgICAgICAgaDogcGFyc2VJbnQoaCwgMTApIHx8ICRlbG0ub2Zmc2V0SGVpZ2h0IHx8ICRlbG0uY2xpZW50SGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0UmVjdCA9IGVsbSA9PiB7XG4gICAgICAgIGNvbnN0ICRlbG0gPSBnZXQoZWxtKTtcbiAgICAgICAgY29uc3QgcG9zID0gZ2V0UG9zJDEoJGVsbSk7XG4gICAgICAgIGNvbnN0IHNpemUgPSBnZXRTaXplKCRlbG0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IHBvcy54LFxuICAgICAgICAgIHk6IHBvcy55LFxuICAgICAgICAgIHc6IHNpemUudyxcbiAgICAgICAgICBoOiBzaXplLmhcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpcyA9IChlbG0sIHNlbGVjdG9yKSA9PiB7XG4gICAgICAgIGlmICghZWxtKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsbXMgPSBpc0FycmF5JDEoZWxtKSA/IGVsbSA6IFtlbG1dO1xuICAgICAgICByZXR1cm4gZXhpc3RzKGVsbXMsIGUgPT4ge1xuICAgICAgICAgIHJldHVybiBpcyQxKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGUpLCBzZWxlY3Rvcik7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldFBhcmVudHMgPSAoZWxtLCBzZWxlY3Rvciwgcm9vdCwgY29sbGVjdCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgbGV0IG5vZGUgPSBnZXQoZWxtKTtcbiAgICAgICAgY29sbGVjdCA9IGNvbGxlY3QgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRSb290ID0gcm9vdCB8fCAoZ2V0Um9vdCgpLm5vZGVOYW1lICE9PSAnQk9EWScgPyBnZXRSb290KCkucGFyZW50Tm9kZSA6IG51bGwpO1xuICAgICAgICBpZiAoaXNTdHJpbmcoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgaWYgKHNlbGVjdG9yID09PSAnKicpIHtcbiAgICAgICAgICAgIHNlbGVjdG9yID0gaXNFbGVtZW50JDY7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdG9yVmFsID0gc2VsZWN0b3I7XG4gICAgICAgICAgICBzZWxlY3RvciA9IG5vZGUgPT4gaXMobm9kZSwgc2VsZWN0b3JWYWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAobm9kZSkge1xuICAgICAgICAgIGlmIChub2RlID09PSByZXNvbHZlZFJvb3QgfHwgaXNOdWxsYWJsZShub2RlLm5vZGVUeXBlKSB8fCBpc0RvY3VtZW50JDEobm9kZSkgfHwgaXNEb2N1bWVudEZyYWdtZW50KG5vZGUpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFzZWxlY3RvciB8fCBzZWxlY3Rvcihub2RlKSkge1xuICAgICAgICAgICAgaWYgKGNvbGxlY3QpIHtcbiAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobm9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gW25vZGVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0ID8gcmVzdWx0IDogbnVsbDtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRQYXJlbnQgPSAobm9kZSwgc2VsZWN0b3IsIHJvb3QpID0+IHtcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IGdldFBhcmVudHMobm9kZSwgc2VsZWN0b3IsIHJvb3QsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHBhcmVudHMgJiYgcGFyZW50cy5sZW5ndGggPiAwID8gcGFyZW50c1swXSA6IG51bGw7XG4gICAgICB9O1xuICAgICAgY29uc3QgX2ZpbmRTaWIgPSAobm9kZSwgc2VsZWN0b3IsIG5hbWUpID0+IHtcbiAgICAgICAgbGV0IGZ1bmMgPSBzZWxlY3RvcjtcbiAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICBpZiAoaXNTdHJpbmcoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgICBmdW5jID0gbm9kZSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBpcyhub2RlLCBzZWxlY3Rvcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCB0ZW1wTm9kZSA9IG5vZGVbbmFtZV07IHRlbXBOb2RlOyB0ZW1wTm9kZSA9IHRlbXBOb2RlW25hbWVdKSB7XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihmdW5jKSAmJiBmdW5jKHRlbXBOb2RlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdGVtcE5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldE5leHQgPSAobm9kZSwgc2VsZWN0b3IpID0+IF9maW5kU2liKG5vZGUsIHNlbGVjdG9yLCAnbmV4dFNpYmxpbmcnKTtcbiAgICAgIGNvbnN0IGdldFByZXYgPSAobm9kZSwgc2VsZWN0b3IpID0+IF9maW5kU2liKG5vZGUsIHNlbGVjdG9yLCAncHJldmlvdXNTaWJsaW5nJyk7XG4gICAgICBjb25zdCBpc1BhcmVudE5vZGUgPSBub2RlID0+IGlzRnVuY3Rpb24obm9kZS5xdWVyeVNlbGVjdG9yQWxsKTtcbiAgICAgIGNvbnN0IHNlbGVjdCA9IChzZWxlY3Rvciwgc2NvcGUpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY29uc3QgZWxtID0gKF9iID0gKF9hID0gZ2V0KHNjb3BlKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogc2V0dGluZ3Mucm9vdF9lbGVtZW50KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBkb2M7XG4gICAgICAgIHJldHVybiBpc1BhcmVudE5vZGUoZWxtKSA/IGZyb20oZWxtLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKSA6IFtdO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJ1biA9IGZ1bmN0aW9uIChlbG0sIGZ1bmMsIHNjb3BlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBzY29wZSAhPT0gbnVsbCAmJiBzY29wZSAhPT0gdm9pZCAwID8gc2NvcGUgOiB0aGlzO1xuICAgICAgICBpZiAoaXNBcnJheSQxKGVsbSkpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgICBlYWNoJGEoZWxtLCAoZSwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGdldChlKTtcbiAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGZ1bmMuY2FsbChjb250ZXh0LCBub2RlLCBpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gZ2V0KGVsbSk7XG4gICAgICAgICAgcmV0dXJuICFub2RlID8gZmFsc2UgOiBmdW5jLmNhbGwoY29udGV4dCwgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBzZXRBdHRyaWJzID0gKGVsbSwgYXR0cnMpID0+IHtcbiAgICAgICAgcnVuKGVsbSwgJGVsbSA9PiB7XG4gICAgICAgICAgZWFjaCRkKGF0dHJzLCAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgICAgIHNldEF0dHJpYigkZWxtLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldEhUTUwgPSAoZWxtLCBodG1sKSA9PiB7XG4gICAgICAgIHJ1bihlbG0sIGUgPT4ge1xuICAgICAgICAgIGNvbnN0ICRlbG0gPSBTdWdhckVsZW1lbnQuZnJvbURvbShlKTtcbiAgICAgICAgICBzZXQkMSgkZWxtLCBodG1sKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgYWRkID0gKHBhcmVudEVsbSwgbmFtZSwgYXR0cnMsIGh0bWwsIGNyZWF0ZSkgPT4gcnVuKHBhcmVudEVsbSwgcGFyZW50RWxtID0+IHtcbiAgICAgICAgY29uc3QgbmV3RWxtID0gaXNTdHJpbmcobmFtZSkgPyBkb2MuY3JlYXRlRWxlbWVudChuYW1lKSA6IG5hbWU7XG4gICAgICAgIGlmIChpc05vbk51bGxhYmxlKGF0dHJzKSkge1xuICAgICAgICAgIHNldEF0dHJpYnMobmV3RWxtLCBhdHRycyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGh0bWwpIHtcbiAgICAgICAgICBpZiAoIWlzU3RyaW5nKGh0bWwpICYmIGh0bWwubm9kZVR5cGUpIHtcbiAgICAgICAgICAgIG5ld0VsbS5hcHBlbmRDaGlsZChodG1sKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKGh0bWwpKSB7XG4gICAgICAgICAgICBzZXRIVE1MKG5ld0VsbSwgaHRtbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhY3JlYXRlID8gcGFyZW50RWxtLmFwcGVuZENoaWxkKG5ld0VsbSkgOiBuZXdFbG07XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNyZWF0ZSA9IChuYW1lLCBhdHRycywgaHRtbCkgPT4gYWRkKGRvYy5jcmVhdGVFbGVtZW50KG5hbWUpLCBuYW1lLCBhdHRycywgaHRtbCwgdHJ1ZSk7XG4gICAgICBjb25zdCBkZWNvZGUgPSBFbnRpdGllcy5kZWNvZGU7XG4gICAgICBjb25zdCBlbmNvZGUgPSBFbnRpdGllcy5lbmNvZGVBbGxSYXc7XG4gICAgICBjb25zdCBjcmVhdGVIVE1MID0gKG5hbWUsIGF0dHJzLCBodG1sID0gJycpID0+IHtcbiAgICAgICAgbGV0IG91dEh0bWwgPSAnPCcgKyBuYW1lO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBhdHRycykge1xuICAgICAgICAgIGlmIChoYXNOb25OdWxsYWJsZUtleShhdHRycywga2V5KSkge1xuICAgICAgICAgICAgb3V0SHRtbCArPSAnICcgKyBrZXkgKyAnPVwiJyArIGVuY29kZShhdHRyc1trZXldKSArICdcIic7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0VtcHR5JDMoaHRtbCkgJiYgaGFzJDIoc2NoZW1hLmdldFZvaWRFbGVtZW50cygpLCBuYW1lKSkge1xuICAgICAgICAgIHJldHVybiBvdXRIdG1sICsgJyAvPic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG91dEh0bWwgKyAnPicgKyBodG1sICsgJzwvJyArIG5hbWUgKyAnPic7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBjcmVhdGVGcmFnbWVudCA9IGh0bWwgPT4ge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGNvbnN0IGZyYWcgPSBkb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG4gICAgICAgIGlmIChodG1sKSB7XG4gICAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IGh0bWw7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5vZGU7XG4gICAgICAgIHdoaWxlIChub2RlID0gY29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICBmcmFnLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGZyYWcucmVtb3ZlQ2hpbGQoY29udGFpbmVyKTtcbiAgICAgICAgcmV0dXJuIGZyYWc7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVtb3ZlID0gKG5vZGUsIGtlZXBDaGlsZHJlbikgPT4ge1xuICAgICAgICByZXR1cm4gcnVuKG5vZGUsIG4gPT4ge1xuICAgICAgICAgIGNvbnN0ICRub2RlID0gU3VnYXJFbGVtZW50LmZyb21Eb20obik7XG4gICAgICAgICAgaWYgKGtlZXBDaGlsZHJlbikge1xuICAgICAgICAgICAgZWFjaCRlKGNoaWxkcmVuJDEoJG5vZGUpLCBjaGlsZCA9PiB7XG4gICAgICAgICAgICAgIGlmIChpc1RleHQkYihjaGlsZCkgJiYgY2hpbGQuZG9tLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJlbW92ZSQ1KGNoaWxkKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBiZWZvcmUkMygkbm9kZSwgY2hpbGQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVtb3ZlJDUoJG5vZGUpO1xuICAgICAgICAgIHJldHVybiAkbm9kZS5kb207XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlbW92ZUFsbEF0dHJpYnMgPSBlID0+IHJ1bihlLCBlID0+IHtcbiAgICAgICAgY29uc3QgYXR0cnMgPSBlLmF0dHJpYnV0ZXM7XG4gICAgICAgIGZvciAobGV0IGkgPSBhdHRycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGUucmVtb3ZlQXR0cmlidXRlTm9kZShhdHRycy5pdGVtKGkpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBwYXJzZVN0eWxlID0gY3NzVGV4dCA9PiBzdHlsZXMucGFyc2UoY3NzVGV4dCk7XG4gICAgICBjb25zdCBzZXJpYWxpemVTdHlsZSA9IChzdHlsZXNBcmcsIG5hbWUpID0+IHN0eWxlcy5zZXJpYWxpemUoc3R5bGVzQXJnLCBuYW1lKTtcbiAgICAgIGNvbnN0IGFkZFN0eWxlID0gY3NzVGV4dCA9PiB7XG4gICAgICAgIGlmIChzZWxmICE9PSBET01VdGlscy5ET00gJiYgZG9jID09PSBkb2N1bWVudCkge1xuICAgICAgICAgIGlmIChhZGRlZFN0eWxlc1tjc3NUZXh0XSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhZGRlZFN0eWxlc1tjc3NUZXh0XSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0eWxlRWxtID0gZG9jLmdldEVsZW1lbnRCeUlkKCdtY2VEZWZhdWx0U3R5bGVzJyk7XG4gICAgICAgIGlmICghc3R5bGVFbG0pIHtcbiAgICAgICAgICBzdHlsZUVsbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgICAgIHN0eWxlRWxtLmlkID0gJ21jZURlZmF1bHRTdHlsZXMnO1xuICAgICAgICAgIHN0eWxlRWxtLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgICAgIGNvbnN0IGhlYWQgPSBkb2MuaGVhZDtcbiAgICAgICAgICBpZiAoaGVhZC5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICBoZWFkLmluc2VydEJlZm9yZShzdHlsZUVsbSwgaGVhZC5maXJzdENoaWxkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZUVsbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdHlsZUVsbS5zdHlsZVNoZWV0KSB7XG4gICAgICAgICAgc3R5bGVFbG0uc3R5bGVTaGVldC5jc3NUZXh0ICs9IGNzc1RleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3R5bGVFbG0uYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKGNzc1RleHQpKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGxvYWRDU1MgPSB1cmxzID0+IHtcbiAgICAgICAgaWYgKCF1cmxzKSB7XG4gICAgICAgICAgdXJscyA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGVhY2gkZSh1cmxzLnNwbGl0KCcsJyksIHVybCA9PiB7XG4gICAgICAgICAgZmlsZXNbdXJsXSA9IHRydWU7XG4gICAgICAgICAgc3R5bGVTaGVldExvYWRlci5sb2FkKHVybCkuY2F0Y2gobm9vcCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHRvZ2dsZUNsYXNzID0gKGVsbSwgY2xzLCBzdGF0ZSkgPT4ge1xuICAgICAgICBydW4oZWxtLCBlID0+IHtcbiAgICAgICAgICBpZiAoaXNFbGVtZW50JDYoZSkpIHtcbiAgICAgICAgICAgIGNvbnN0ICRlbG0gPSBTdWdhckVsZW1lbnQuZnJvbURvbShlKTtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzZXMgPSBjbHMuc3BsaXQoJyAnKTtcbiAgICAgICAgICAgIGVhY2gkZShjbGFzc2VzLCBjID0+IHtcbiAgICAgICAgICAgICAgaWYgKGlzTm9uTnVsbGFibGUoc3RhdGUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm4gPSBzdGF0ZSA/IGFkZCQyIDogcmVtb3ZlJDc7XG4gICAgICAgICAgICAgICAgZm4oJGVsbSwgYyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdG9nZ2xlJDEoJGVsbSwgYyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgYWRkQ2xhc3MgPSAoZWxtLCBjbHMpID0+IHtcbiAgICAgICAgdG9nZ2xlQ2xhc3MoZWxtLCBjbHMsIHRydWUpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlbW92ZUNsYXNzID0gKGVsbSwgY2xzKSA9PiB7XG4gICAgICAgIHRvZ2dsZUNsYXNzKGVsbSwgY2xzLCBmYWxzZSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaGFzQ2xhc3MgPSAoZWxtLCBjbHMpID0+IHtcbiAgICAgICAgY29uc3QgJGVsbSA9IF9nZXQoZWxtKTtcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGNscy5zcGxpdCgnICcpO1xuICAgICAgICByZXR1cm4gaXNOb25OdWxsYWJsZSgkZWxtKSAmJiBmb3JhbGwoY2xhc3NlcywgYyA9PiBoYXMoJGVsbSwgYykpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNob3cgPSBlbG0gPT4ge1xuICAgICAgICBydW4oZWxtLCBlID0+IHJlbW92ZSQ2KFN1Z2FyRWxlbWVudC5mcm9tRG9tKGUpLCAnZGlzcGxheScpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBoaWRlID0gZWxtID0+IHtcbiAgICAgICAgcnVuKGVsbSwgZSA9PiBzZXQkMihTdWdhckVsZW1lbnQuZnJvbURvbShlKSwgJ2Rpc3BsYXknLCAnbm9uZScpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0hpZGRlbiA9IGVsbSA9PiB7XG4gICAgICAgIGNvbnN0ICRlbG0gPSBfZ2V0KGVsbSk7XG4gICAgICAgIHJldHVybiBpc05vbk51bGxhYmxlKCRlbG0pICYmIGlzJDIoZ2V0UmF3KCRlbG0sICdkaXNwbGF5JyksICdub25lJyk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdW5pcXVlSWQgPSBwcmVmaXggPT4gKCFwcmVmaXggPyAnbWNlXycgOiBwcmVmaXgpICsgY291bnRlcisrO1xuICAgICAgY29uc3QgZ2V0T3V0ZXJIVE1MID0gZWxtID0+IHtcbiAgICAgICAgY29uc3QgJGVsbSA9IF9nZXQoZWxtKTtcbiAgICAgICAgaWYgKGlzTm9uTnVsbGFibGUoJGVsbSkpIHtcbiAgICAgICAgICByZXR1cm4gaXNFbGVtZW50JDYoJGVsbS5kb20pID8gJGVsbS5kb20ub3V0ZXJIVE1MIDogZ2V0T3V0ZXIoJGVsbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0T3V0ZXJIVE1MID0gKGVsbSwgaHRtbCkgPT4ge1xuICAgICAgICBydW4oZWxtLCAkZWxtID0+IHtcbiAgICAgICAgICBpZiAoaXNFbGVtZW50JDYoJGVsbSkpIHtcbiAgICAgICAgICAgICRlbG0ub3V0ZXJIVE1MID0gaHRtbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGluc2VydEFmdGVyID0gKG5vZGUsIHJlZmVyZW5jZSkgPT4ge1xuICAgICAgICBjb25zdCByZWZlcmVuY2VOb2RlID0gZ2V0KHJlZmVyZW5jZSk7XG4gICAgICAgIHJldHVybiBydW4obm9kZSwgbm9kZSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFyZW50ID0gcmVmZXJlbmNlTm9kZSA9PT0gbnVsbCB8fCByZWZlcmVuY2VOb2RlID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZWZlcmVuY2VOb2RlLnBhcmVudE5vZGU7XG4gICAgICAgICAgY29uc3QgbmV4dFNpYmxpbmcgPSByZWZlcmVuY2VOb2RlID09PSBudWxsIHx8IHJlZmVyZW5jZU5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlZmVyZW5jZU5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgaWYgKG5leHRTaWJsaW5nKSB7XG4gICAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dFNpYmxpbmcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVwbGFjZSA9IChuZXdFbG0sIG9sZEVsbSwga2VlcENoaWxkcmVuKSA9PiBydW4ob2xkRWxtLCBlbG0gPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VlID0gaXNBcnJheSQxKG9sZEVsbSkgPyBuZXdFbG0uY2xvbmVOb2RlKHRydWUpIDogbmV3RWxtO1xuICAgICAgICBpZiAoa2VlcENoaWxkcmVuKSB7XG4gICAgICAgICAgZWFjaCRhKGdyZXAoZWxtLmNoaWxkTm9kZXMpLCBub2RlID0+IHtcbiAgICAgICAgICAgIHJlcGxhY2VlLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIChfYSA9IGVsbS5wYXJlbnROb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVwbGFjZUNoaWxkKHJlcGxhY2VlLCBlbG0pO1xuICAgICAgICByZXR1cm4gZWxtO1xuICAgICAgfSk7XG4gICAgICBjb25zdCByZW5hbWUgPSAoZWxtLCBuYW1lKSA9PiB7XG4gICAgICAgIGlmIChlbG0ubm9kZU5hbWUgIT09IG5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgIGNvbnN0IG5ld0VsbSA9IGNyZWF0ZShuYW1lKTtcbiAgICAgICAgICBlYWNoJGEoZ2V0QXR0cmlicyhlbG0pLCBhdHRyTm9kZSA9PiB7XG4gICAgICAgICAgICBzZXRBdHRyaWIobmV3RWxtLCBhdHRyTm9kZS5ub2RlTmFtZSwgZ2V0QXR0cmliKGVsbSwgYXR0ck5vZGUubm9kZU5hbWUpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXBsYWNlKG5ld0VsbSwgZWxtLCB0cnVlKTtcbiAgICAgICAgICByZXR1cm4gbmV3RWxtO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBlbG07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBmaW5kQ29tbW9uQW5jZXN0b3IgPSAoYSwgYikgPT4ge1xuICAgICAgICBsZXQgcHMgPSBhO1xuICAgICAgICB3aGlsZSAocHMpIHtcbiAgICAgICAgICBsZXQgcGUgPSBiO1xuICAgICAgICAgIHdoaWxlIChwZSAmJiBwcyAhPT0gcGUpIHtcbiAgICAgICAgICAgIHBlID0gcGUucGFyZW50Tm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBzID09PSBwZSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBzID0gcHMucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBzICYmIGEub3duZXJEb2N1bWVudCkge1xuICAgICAgICAgIHJldHVybiBhLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBwcztcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzTm9uRW1wdHlFbGVtZW50ID0gbm9kZSA9PiB7XG4gICAgICAgIGlmIChpc0VsZW1lbnQkNihub2RlKSkge1xuICAgICAgICAgIGNvbnN0IGlzTmFtZWRBbmNob3IgPSBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdhJyAmJiAhZ2V0QXR0cmliKG5vZGUsICdocmVmJykgJiYgZ2V0QXR0cmliKG5vZGUsICdpZCcpO1xuICAgICAgICAgIGlmIChnZXRBdHRyaWIobm9kZSwgJ25hbWUnKSB8fCBnZXRBdHRyaWIobm9kZSwgJ2RhdGEtbWNlLWJvb2ttYXJrJykgfHwgaXNOYW1lZEFuY2hvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0VtcHR5ID0gKG5vZGUsIGVsZW1lbnRzLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIGxldCBickNvdW50ID0gMDtcbiAgICAgICAgaWYgKGlzTm9uRW1wdHlFbGVtZW50KG5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgICAgIGlmIChmaXJzdENoaWxkKSB7XG4gICAgICAgICAgY29uc3Qgd2Fsa2VyID0gbmV3IERvbVRyZWVXYWxrZXIoZmlyc3RDaGlsZCwgbm9kZSk7XG4gICAgICAgICAgY29uc3Qgd2hpdGVzcGFjZUVsZW1lbnRzID0gc2NoZW1hID8gc2NoZW1hLmdldFdoaXRlc3BhY2VFbGVtZW50cygpIDoge307XG4gICAgICAgICAgY29uc3Qgbm9uRW1wdHlFbGVtZW50cyA9IGVsZW1lbnRzIHx8IChzY2hlbWEgPyBzY2hlbWEuZ2V0Tm9uRW1wdHlFbGVtZW50cygpIDogbnVsbCk7XG4gICAgICAgICAgbGV0IHRlbXBOb2RlID0gZmlyc3RDaGlsZDtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoaXNFbGVtZW50JDYodGVtcE5vZGUpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGJvZ3VzVmFsID0gdGVtcE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLW1jZS1ib2d1cycpO1xuICAgICAgICAgICAgICBpZiAoYm9ndXNWYWwpIHtcbiAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IHdhbGtlci5uZXh0KGJvZ3VzVmFsID09PSAnYWxsJyk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRlbXBOb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgIGlmIChub25FbXB0eUVsZW1lbnRzICYmIG5vbkVtcHR5RWxlbWVudHNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2JyJykge1xuICAgICAgICAgICAgICAgICAgYnJDb3VudCsrO1xuICAgICAgICAgICAgICAgICAgdGVtcE5vZGUgPSB3YWxrZXIubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoaXNOb25FbXB0eUVsZW1lbnQodGVtcE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNDb21tZW50KHRlbXBOb2RlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNUZXh0JGEodGVtcE5vZGUpICYmICFpc1doaXRlc3BhY2VUZXh0KHRlbXBOb2RlLmRhdGEpICYmICghKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5pbmNsdWRlWndzcCkgfHwgIWlzWndzcCh0ZW1wTm9kZS5kYXRhKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzVGV4dCRhKHRlbXBOb2RlKSAmJiB0ZW1wTm9kZS5wYXJlbnROb2RlICYmIHdoaXRlc3BhY2VFbGVtZW50c1t0ZW1wTm9kZS5wYXJlbnROb2RlLm5vZGVOYW1lXSAmJiBpc1doaXRlc3BhY2VUZXh0KHRlbXBOb2RlLmRhdGEpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBOb2RlID0gd2Fsa2VyLm5leHQoKTtcbiAgICAgICAgICB9IHdoaWxlICh0ZW1wTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJyQ291bnQgPD0gMTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjcmVhdGVSbmcgPSAoKSA9PiBkb2MuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIGNvbnN0IHNwbGl0ID0gKHBhcmVudEVsbSwgc3BsaXRFbG0sIHJlcGxhY2VtZW50RWxtKSA9PiB7XG4gICAgICAgIGxldCByYW5nZSA9IGNyZWF0ZVJuZygpO1xuICAgICAgICBsZXQgYmVmb3JlRnJhZ21lbnQ7XG4gICAgICAgIGxldCBhZnRlckZyYWdtZW50O1xuICAgICAgICBpZiAocGFyZW50RWxtICYmIHNwbGl0RWxtICYmIHBhcmVudEVsbS5wYXJlbnROb2RlICYmIHNwbGl0RWxtLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gcGFyZW50RWxtLnBhcmVudE5vZGU7XG4gICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQocGFyZW50Tm9kZSwgZmluZE5vZGVJbmRleChwYXJlbnRFbG0pKTtcbiAgICAgICAgICByYW5nZS5zZXRFbmQoc3BsaXRFbG0ucGFyZW50Tm9kZSwgZmluZE5vZGVJbmRleChzcGxpdEVsbSkpO1xuICAgICAgICAgIGJlZm9yZUZyYWdtZW50ID0gcmFuZ2UuZXh0cmFjdENvbnRlbnRzKCk7XG4gICAgICAgICAgcmFuZ2UgPSBjcmVhdGVSbmcoKTtcbiAgICAgICAgICByYW5nZS5zZXRTdGFydChzcGxpdEVsbS5wYXJlbnROb2RlLCBmaW5kTm9kZUluZGV4KHNwbGl0RWxtKSArIDEpO1xuICAgICAgICAgIHJhbmdlLnNldEVuZChwYXJlbnROb2RlLCBmaW5kTm9kZUluZGV4KHBhcmVudEVsbSkgKyAxKTtcbiAgICAgICAgICBhZnRlckZyYWdtZW50ID0gcmFuZ2UuZXh0cmFjdENvbnRlbnRzKCk7XG4gICAgICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodHJpbU5vZGUoc2VsZiwgYmVmb3JlRnJhZ21lbnQpLCBwYXJlbnRFbG0pO1xuICAgICAgICAgIGlmIChyZXBsYWNlbWVudEVsbSkge1xuICAgICAgICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocmVwbGFjZW1lbnRFbG0sIHBhcmVudEVsbSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHNwbGl0RWxtLCBwYXJlbnRFbG0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZSh0cmltTm9kZShzZWxmLCBhZnRlckZyYWdtZW50KSwgcGFyZW50RWxtKTtcbiAgICAgICAgICByZW1vdmUocGFyZW50RWxtKTtcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnRFbG0gfHwgc3BsaXRFbG07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGJpbmQgPSAodGFyZ2V0LCBuYW1lLCBmdW5jLCBzY29wZSkgPT4ge1xuICAgICAgICBpZiAoaXNBcnJheSQxKHRhcmdldCkpIHtcbiAgICAgICAgICBsZXQgaSA9IHRhcmdldC5sZW5ndGg7XG4gICAgICAgICAgY29uc3QgcnYgPSBbXTtcbiAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICBydltpXSA9IGJpbmQodGFyZ2V0W2ldLCBuYW1lLCBmdW5jLCBzY29wZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBydjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc2V0dGluZ3MuY29sbGVjdCAmJiAodGFyZ2V0ID09PSBkb2MgfHwgdGFyZ2V0ID09PSB3aW4pKSB7XG4gICAgICAgICAgICBib3VuZEV2ZW50cy5wdXNoKFtcbiAgICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICBmdW5jLFxuICAgICAgICAgICAgICBzY29wZVxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBldmVudHMuYmluZCh0YXJnZXQsIG5hbWUsIGZ1bmMsIHNjb3BlIHx8IHNlbGYpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgdW5iaW5kID0gKHRhcmdldCwgbmFtZSwgZnVuYykgPT4ge1xuICAgICAgICBpZiAoaXNBcnJheSQxKHRhcmdldCkpIHtcbiAgICAgICAgICBsZXQgaSA9IHRhcmdldC5sZW5ndGg7XG4gICAgICAgICAgY29uc3QgcnYgPSBbXTtcbiAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICBydltpXSA9IHVuYmluZCh0YXJnZXRbaV0sIG5hbWUsIGZ1bmMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcnY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGJvdW5kRXZlbnRzLmxlbmd0aCA+IDAgJiYgKHRhcmdldCA9PT0gZG9jIHx8IHRhcmdldCA9PT0gd2luKSkge1xuICAgICAgICAgICAgbGV0IGkgPSBib3VuZEV2ZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAgIGNvbnN0IFtib3VuZFRhcmdldCwgYm91bmROYW1lLCBib3VuZEZ1bmNdID0gYm91bmRFdmVudHNbaV07XG4gICAgICAgICAgICAgIGlmICh0YXJnZXQgPT09IGJvdW5kVGFyZ2V0ICYmICghbmFtZSB8fCBuYW1lID09PSBib3VuZE5hbWUpICYmICghZnVuYyB8fCBmdW5jID09PSBib3VuZEZ1bmMpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnRzLnVuYmluZChib3VuZFRhcmdldCwgYm91bmROYW1lLCBib3VuZEZ1bmMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBldmVudHMudW5iaW5kKHRhcmdldCwgbmFtZSwgZnVuYyk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBkaXNwYXRjaCA9ICh0YXJnZXQsIG5hbWUsIGV2dCkgPT4gZXZlbnRzLmRpc3BhdGNoKHRhcmdldCwgbmFtZSwgZXZ0KTtcbiAgICAgIGNvbnN0IGZpcmUgPSAodGFyZ2V0LCBuYW1lLCBldnQpID0+IGV2ZW50cy5kaXNwYXRjaCh0YXJnZXQsIG5hbWUsIGV2dCk7XG4gICAgICBjb25zdCBnZXRDb250ZW50RWRpdGFibGUgPSBub2RlID0+IHtcbiAgICAgICAgaWYgKG5vZGUgJiYgaXNFbGVtZW50JDYobm9kZSkpIHtcbiAgICAgICAgICBjb25zdCBjb250ZW50RWRpdGFibGUgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1tY2UtY29udGVudGVkaXRhYmxlJyk7XG4gICAgICAgICAgaWYgKGNvbnRlbnRFZGl0YWJsZSAmJiBjb250ZW50RWRpdGFibGUgIT09ICdpbmhlcml0Jykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRFZGl0YWJsZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5vZGUuY29udGVudEVkaXRhYmxlICE9PSAnaW5oZXJpdCcgPyBub2RlLmNvbnRlbnRFZGl0YWJsZSA6IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRDb250ZW50RWRpdGFibGVQYXJlbnQgPSBub2RlID0+IHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IGdldFJvb3QoKTtcbiAgICAgICAgbGV0IHN0YXRlID0gbnVsbDtcbiAgICAgICAgZm9yIChsZXQgdGVtcE5vZGUgPSBub2RlOyB0ZW1wTm9kZSAmJiB0ZW1wTm9kZSAhPT0gcm9vdDsgdGVtcE5vZGUgPSB0ZW1wTm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgc3RhdGUgPSBnZXRDb250ZW50RWRpdGFibGUodGVtcE5vZGUpO1xuICAgICAgICAgIGlmIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0VkaXRhYmxlID0gbm9kZSA9PiB7XG4gICAgICAgIGlmIChpc05vbk51bGxhYmxlKG5vZGUpKSB7XG4gICAgICAgICAgY29uc3Qgc2NvcGUgPSBpc0VsZW1lbnQkNihub2RlKSA/IG5vZGUgOiBub2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUoc2NvcGUpICYmIGlzRWRpdGFibGUkMyhTdWdhckVsZW1lbnQuZnJvbURvbShzY29wZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICAgIGlmIChib3VuZEV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGV0IGkgPSBib3VuZEV2ZW50cy5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgY29uc3QgW2JvdW5kVGFyZ2V0LCBib3VuZE5hbWUsIGJvdW5kRnVuY10gPSBib3VuZEV2ZW50c1tpXTtcbiAgICAgICAgICAgIGV2ZW50cy51bmJpbmQoYm91bmRUYXJnZXQsIGJvdW5kTmFtZSwgYm91bmRGdW5jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWFjaCRkKGZpbGVzLCAoXywgdXJsKSA9PiB7XG4gICAgICAgICAgc3R5bGVTaGVldExvYWRlci51bmxvYWQodXJsKTtcbiAgICAgICAgICBkZWxldGUgZmlsZXNbdXJsXTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNDaGlsZE9mID0gKG5vZGUsIHBhcmVudCkgPT4ge1xuICAgICAgICByZXR1cm4gbm9kZSA9PT0gcGFyZW50IHx8IHBhcmVudC5jb250YWlucyhub2RlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBkdW1wUm5nID0gciA9PiAnc3RhcnRDb250YWluZXI6ICcgKyByLnN0YXJ0Q29udGFpbmVyLm5vZGVOYW1lICsgJywgc3RhcnRPZmZzZXQ6ICcgKyByLnN0YXJ0T2Zmc2V0ICsgJywgZW5kQ29udGFpbmVyOiAnICsgci5lbmRDb250YWluZXIubm9kZU5hbWUgKyAnLCBlbmRPZmZzZXQ6ICcgKyByLmVuZE9mZnNldDtcbiAgICAgIGNvbnN0IHNlbGYgPSB7XG4gICAgICAgIGRvYyxcbiAgICAgICAgc2V0dGluZ3MsXG4gICAgICAgIHdpbixcbiAgICAgICAgZmlsZXMsXG4gICAgICAgIHN0ZE1vZGUsXG4gICAgICAgIGJveE1vZGVsLFxuICAgICAgICBzdHlsZVNoZWV0TG9hZGVyLFxuICAgICAgICBib3VuZEV2ZW50cyxcbiAgICAgICAgc3R5bGVzLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGV2ZW50cyxcbiAgICAgICAgaXNCbG9jazogaXNCbG9jayxcbiAgICAgICAgcm9vdDogbnVsbCxcbiAgICAgICAgY2xvbmUsXG4gICAgICAgIGdldFJvb3QsXG4gICAgICAgIGdldFZpZXdQb3J0LFxuICAgICAgICBnZXRSZWN0LFxuICAgICAgICBnZXRTaXplLFxuICAgICAgICBnZXRQYXJlbnQsXG4gICAgICAgIGdldFBhcmVudHM6IGdldFBhcmVudHMsXG4gICAgICAgIGdldCxcbiAgICAgICAgZ2V0TmV4dCxcbiAgICAgICAgZ2V0UHJldixcbiAgICAgICAgc2VsZWN0LFxuICAgICAgICBpcyxcbiAgICAgICAgYWRkLFxuICAgICAgICBjcmVhdGUsXG4gICAgICAgIGNyZWF0ZUhUTUwsXG4gICAgICAgIGNyZWF0ZUZyYWdtZW50LFxuICAgICAgICByZW1vdmUsXG4gICAgICAgIHNldFN0eWxlLFxuICAgICAgICBnZXRTdHlsZTogZ2V0U3R5bGUsXG4gICAgICAgIHNldFN0eWxlcyxcbiAgICAgICAgcmVtb3ZlQWxsQXR0cmlicyxcbiAgICAgICAgc2V0QXR0cmliLFxuICAgICAgICBzZXRBdHRyaWJzLFxuICAgICAgICBnZXRBdHRyaWIsXG4gICAgICAgIGdldFBvczogZ2V0UG9zJDEsXG4gICAgICAgIHBhcnNlU3R5bGUsXG4gICAgICAgIHNlcmlhbGl6ZVN0eWxlLFxuICAgICAgICBhZGRTdHlsZSxcbiAgICAgICAgbG9hZENTUyxcbiAgICAgICAgYWRkQ2xhc3MsXG4gICAgICAgIHJlbW92ZUNsYXNzLFxuICAgICAgICBoYXNDbGFzcyxcbiAgICAgICAgdG9nZ2xlQ2xhc3MsXG4gICAgICAgIHNob3csXG4gICAgICAgIGhpZGUsXG4gICAgICAgIGlzSGlkZGVuLFxuICAgICAgICB1bmlxdWVJZCxcbiAgICAgICAgc2V0SFRNTCxcbiAgICAgICAgZ2V0T3V0ZXJIVE1MLFxuICAgICAgICBzZXRPdXRlckhUTUwsXG4gICAgICAgIGRlY29kZSxcbiAgICAgICAgZW5jb2RlLFxuICAgICAgICBpbnNlcnRBZnRlcixcbiAgICAgICAgcmVwbGFjZSxcbiAgICAgICAgcmVuYW1lLFxuICAgICAgICBmaW5kQ29tbW9uQW5jZXN0b3IsXG4gICAgICAgIHJ1bixcbiAgICAgICAgZ2V0QXR0cmlicyxcbiAgICAgICAgaXNFbXB0eSxcbiAgICAgICAgY3JlYXRlUm5nLFxuICAgICAgICBub2RlSW5kZXg6IGZpbmROb2RlSW5kZXgsXG4gICAgICAgIHNwbGl0LFxuICAgICAgICBiaW5kOiBiaW5kLFxuICAgICAgICB1bmJpbmQ6IHVuYmluZCxcbiAgICAgICAgZmlyZSxcbiAgICAgICAgZGlzcGF0Y2gsXG4gICAgICAgIGdldENvbnRlbnRFZGl0YWJsZSxcbiAgICAgICAgZ2V0Q29udGVudEVkaXRhYmxlUGFyZW50LFxuICAgICAgICBpc0VkaXRhYmxlLFxuICAgICAgICBkZXN0cm95LFxuICAgICAgICBpc0NoaWxkT2YsXG4gICAgICAgIGR1bXBSbmdcbiAgICAgIH07XG4gICAgICBjb25zdCBhdHRySG9va3MgPSBzZXR1cEF0dHJIb29rcyhzdHlsZXMsIHNldHRpbmdzLCBjb25zdGFudChzZWxmKSk7XG4gICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIERPTVV0aWxzLkRPTSA9IERPTVV0aWxzKGRvY3VtZW50KTtcbiAgICBET01VdGlscy5ub2RlSW5kZXggPSBmaW5kTm9kZUluZGV4O1xuXG4gICAgY29uc3QgRE9NJGIgPSBET01VdGlscy5ET007XG4gICAgY29uc3QgUVVFVUVEID0gMDtcbiAgICBjb25zdCBMT0FESU5HID0gMTtcbiAgICBjb25zdCBMT0FERUQgPSAyO1xuICAgIGNvbnN0IEZBSUxFRCA9IDM7XG4gICAgY2xhc3MgU2NyaXB0TG9hZGVyIHtcbiAgICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzID0ge30pIHtcbiAgICAgICAgdGhpcy5zdGF0ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLnNjcmlwdExvYWRlZENhbGxiYWNrcyA9IHt9O1xuICAgICAgICB0aGlzLnF1ZXVlTG9hZGVkQ2FsbGJhY2tzID0gW107XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgICB9XG4gICAgICBfc2V0UmVmZXJyZXJQb2xpY3kocmVmZXJyZXJQb2xpY3kpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5yZWZlcnJlclBvbGljeSA9IHJlZmVycmVyUG9saWN5O1xuICAgICAgfVxuICAgICAgbG9hZFNjcmlwdCh1cmwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBjb25zdCBkb20gPSBET00kYjtcbiAgICAgICAgICBsZXQgZWxtO1xuICAgICAgICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICAgICAgICBkb20ucmVtb3ZlKGlkKTtcbiAgICAgICAgICAgIGlmIChlbG0pIHtcbiAgICAgICAgICAgICAgZWxtLm9uZXJyb3IgPSBlbG0ub25sb2FkID0gZWxtID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGRvbmUgPSAoKSA9PiB7XG4gICAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBlcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICAgIHJlamVjdCgnRmFpbGVkIHRvIGxvYWQgc2NyaXB0OiAnICsgdXJsKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGlkID0gZG9tLnVuaXF1ZUlkKCk7XG4gICAgICAgICAgZWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgICAgZWxtLmlkID0gaWQ7XG4gICAgICAgICAgZWxtLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgICAgICAgICBlbG0uc3JjID0gVG9vbHMuX2FkZENhY2hlU3VmZml4KHVybCk7XG4gICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MucmVmZXJyZXJQb2xpY3kpIHtcbiAgICAgICAgICAgIGRvbS5zZXRBdHRyaWIoZWxtLCAncmVmZXJyZXJwb2xpY3knLCB0aGlzLnNldHRpbmdzLnJlZmVycmVyUG9saWN5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxtLm9ubG9hZCA9IGRvbmU7XG4gICAgICAgICAgZWxtLm9uZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSB8fCBkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZChlbG0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlzRG9uZSh1cmwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVzW3VybF0gPT09IExPQURFRDtcbiAgICAgIH1cbiAgICAgIG1hcmtEb25lKHVybCkge1xuICAgICAgICB0aGlzLnN0YXRlc1t1cmxdID0gTE9BREVEO1xuICAgICAgfVxuICAgICAgYWRkKHVybCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgc2VsZi5xdWV1ZS5wdXNoKHVybCk7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gc2VsZi5zdGF0ZXNbdXJsXTtcbiAgICAgICAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzZWxmLnN0YXRlc1t1cmxdID0gUVVFVUVEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgaWYgKCFzZWxmLnNjcmlwdExvYWRlZENhbGxiYWNrc1t1cmxdKSB7XG4gICAgICAgICAgICBzZWxmLnNjcmlwdExvYWRlZENhbGxiYWNrc1t1cmxdID0gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlbGYuc2NyaXB0TG9hZGVkQ2FsbGJhY2tzW3VybF0ucHVzaCh7XG4gICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgbG9hZCh1cmwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkKHVybCk7XG4gICAgICB9XG4gICAgICByZW1vdmUodXJsKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnN0YXRlc1t1cmxdO1xuICAgICAgICBkZWxldGUgdGhpcy5zY3JpcHRMb2FkZWRDYWxsYmFja3NbdXJsXTtcbiAgICAgIH1cbiAgICAgIGxvYWRRdWV1ZSgpIHtcbiAgICAgICAgY29uc3QgcXVldWUgPSB0aGlzLnF1ZXVlO1xuICAgICAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRTY3JpcHRzKHF1ZXVlKTtcbiAgICAgIH1cbiAgICAgIGxvYWRTY3JpcHRzKHNjcmlwdHMpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGV4ZWNDYWxsYmFja3MgPSAobmFtZSwgdXJsKSA9PiB7XG4gICAgICAgICAgZ2V0JGEoc2VsZi5zY3JpcHRMb2FkZWRDYWxsYmFja3MsIHVybCkuZWFjaChjYWxsYmFja3MgPT4ge1xuICAgICAgICAgICAgZWFjaCRlKGNhbGxiYWNrcywgY2FsbGJhY2sgPT4gY2FsbGJhY2tbbmFtZV0odXJsKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZGVsZXRlIHNlbGYuc2NyaXB0TG9hZGVkQ2FsbGJhY2tzW3VybF07XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHByb2Nlc3NSZXN1bHRzID0gcmVzdWx0cyA9PiB7XG4gICAgICAgICAgY29uc3QgZmFpbHVyZXMgPSBmaWx0ZXIkNShyZXN1bHRzLCByZXN1bHQgPT4gcmVzdWx0LnN0YXR1cyA9PT0gJ3JlamVjdGVkJyk7XG4gICAgICAgICAgaWYgKGZhaWx1cmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChiaW5kJDMoZmFpbHVyZXMsICh7cmVhc29ufSkgPT4gaXNBcnJheSQxKHJlYXNvbikgPyByZWFzb24gOiBbcmVhc29uXSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsb2FkID0gdXJscyA9PiBQcm9taXNlLmFsbFNldHRsZWQobWFwJDModXJscywgdXJsID0+IHtcbiAgICAgICAgICBpZiAoc2VsZi5zdGF0ZXNbdXJsXSA9PT0gTE9BREVEKSB7XG4gICAgICAgICAgICBleGVjQ2FsbGJhY2tzKCdyZXNvbHZlJywgdXJsKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNlbGYuc3RhdGVzW3VybF0gPT09IEZBSUxFRCkge1xuICAgICAgICAgICAgZXhlY0NhbGxiYWNrcygncmVqZWN0JywgdXJsKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh1cmwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxmLnN0YXRlc1t1cmxdID0gTE9BRElORztcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmxvYWRTY3JpcHQodXJsKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgc2VsZi5zdGF0ZXNbdXJsXSA9IExPQURFRDtcbiAgICAgICAgICAgICAgZXhlY0NhbGxiYWNrcygncmVzb2x2ZScsIHVybCk7XG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXVlID0gc2VsZi5xdWV1ZTtcbiAgICAgICAgICAgICAgaWYgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBzZWxmLnF1ZXVlID0gW107XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvYWQocXVldWUpLnRoZW4ocHJvY2Vzc1Jlc3VsdHMpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgICBzZWxmLnN0YXRlc1t1cmxdID0gRkFJTEVEO1xuICAgICAgICAgICAgICBleGVjQ2FsbGJhY2tzKCdyZWplY3QnLCB1cmwpO1xuICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodXJsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICBjb25zdCBwcm9jZXNzUXVldWUgPSB1cmxzID0+IHtcbiAgICAgICAgICBzZWxmLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiBsb2FkKHVybHMpLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBzZWxmLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRRdWV1ZWRJdGVtID0gc2VsZi5xdWV1ZUxvYWRlZENhbGxiYWNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgT3B0aW9uYWwuZnJvbShuZXh0UXVldWVkSXRlbSkuZWFjaChjYWxsKTtcbiAgICAgICAgICAgIHJldHVybiBwcm9jZXNzUmVzdWx0cyhyZXN1bHRzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdW5pcXVlU2NyaXB0cyA9IHN0cmluZ0FycmF5KHNjcmlwdHMpO1xuICAgICAgICBpZiAoc2VsZi5sb2FkaW5nKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHNlbGYucXVldWVMb2FkZWRDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICAgIHByb2Nlc3NRdWV1ZSh1bmlxdWVTY3JpcHRzKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcHJvY2Vzc1F1ZXVlKHVuaXF1ZVNjcmlwdHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFNjcmlwdExvYWRlci5TY3JpcHRMb2FkZXIgPSBuZXcgU2NyaXB0TG9hZGVyKCk7XG5cbiAgICBjb25zdCBDZWxsID0gaW5pdGlhbCA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBpbml0aWFsO1xuICAgICAgY29uc3QgZ2V0ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0ID0gdiA9PiB7XG4gICAgICAgIHZhbHVlID0gdjtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBnZXQsXG4gICAgICAgIHNldFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNEdXBsaWNhdGVkID0gKGl0ZW1zLCBpdGVtKSA9PiB7XG4gICAgICBjb25zdCBmaXJzdEluZGV4ID0gaXRlbXMuaW5kZXhPZihpdGVtKTtcbiAgICAgIHJldHVybiBmaXJzdEluZGV4ICE9PSAtMSAmJiBpdGVtcy5pbmRleE9mKGl0ZW0sIGZpcnN0SW5kZXggKyAxKSA+IGZpcnN0SW5kZXg7XG4gICAgfTtcbiAgICBjb25zdCBpc1JhdyA9IHN0ciA9PiBpc09iamVjdChzdHIpICYmIGhhcyQyKHN0ciwgJ3JhdycpO1xuICAgIGNvbnN0IGlzVG9rZW5pc2VkID0gc3RyID0+IGlzQXJyYXkkMShzdHIpICYmIHN0ci5sZW5ndGggPiAxO1xuICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICBjb25zdCBjdXJyZW50Q29kZSA9IENlbGwoJ2VuJyk7XG4gICAgY29uc3QgZ2V0TGFuZ3VhZ2VEYXRhID0gKCkgPT4gZ2V0JGEoZGF0YSwgY3VycmVudENvZGUuZ2V0KCkpO1xuICAgIGNvbnN0IGdldERhdGEkMSA9ICgpID0+IG1hcCQyKGRhdGEsIHZhbHVlID0+ICh7IC4uLnZhbHVlIH0pKTtcbiAgICBjb25zdCBzZXRDb2RlID0gbmV3Q29kZSA9PiB7XG4gICAgICBpZiAobmV3Q29kZSkge1xuICAgICAgICBjdXJyZW50Q29kZS5zZXQobmV3Q29kZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRDb2RlID0gKCkgPT4gY3VycmVudENvZGUuZ2V0KCk7XG4gICAgY29uc3QgYWRkJDEgPSAoY29kZSwgaXRlbXMpID0+IHtcbiAgICAgIGxldCBsYW5nRGF0YSA9IGRhdGFbY29kZV07XG4gICAgICBpZiAoIWxhbmdEYXRhKSB7XG4gICAgICAgIGRhdGFbY29kZV0gPSBsYW5nRGF0YSA9IHt9O1xuICAgICAgfVxuICAgICAgY29uc3QgbGNOYW1lcyA9IG1hcCQzKGtleXMoaXRlbXMpLCBuYW1lID0+IG5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICBlYWNoJGQoaXRlbXMsICh0cmFuc2xhdGlvbiwgbmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBsY05hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChsY05hbWUgIT09IG5hbWUgJiYgaXNEdXBsaWNhdGVkKGxjTmFtZXMsIGxjTmFtZSkpIHtcbiAgICAgICAgICBpZiAoIWhhcyQyKGl0ZW1zLCBsY05hbWUpKSB7XG4gICAgICAgICAgICBsYW5nRGF0YVtsY05hbWVdID0gdHJhbnNsYXRpb247XG4gICAgICAgICAgfVxuICAgICAgICAgIGxhbmdEYXRhW25hbWVdID0gdHJhbnNsYXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGFuZ0RhdGFbbGNOYW1lXSA9IHRyYW5zbGF0aW9uO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHRleHQgPT4ge1xuICAgICAgY29uc3QgbGFuZ0RhdGEgPSBnZXRMYW5ndWFnZURhdGEoKS5nZXRPcih7fSk7XG4gICAgICBjb25zdCB0b1N0cmluZyA9IG9iaiA9PiB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFpc0VtcHR5KG9iaikgPyAnJyArIG9iaiA6ICcnO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzRW1wdHkgPSB0ZXh0ID0+IHRleHQgPT09ICcnIHx8IHRleHQgPT09IG51bGwgfHwgdGV4dCA9PT0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZ2V0TGFuZ0RhdGEgPSB0ZXh0ID0+IHtcbiAgICAgICAgY29uc3QgdGV4dFN0ciA9IHRvU3RyaW5nKHRleHQpO1xuICAgICAgICByZXR1cm4gaGFzJDIobGFuZ0RhdGEsIHRleHRTdHIpID8gdG9TdHJpbmcobGFuZ0RhdGFbdGV4dFN0cl0pIDogZ2V0JGEobGFuZ0RhdGEsIHRleHRTdHIudG9Mb3dlckNhc2UoKSkubWFwKHRvU3RyaW5nKS5nZXRPcih0ZXh0U3RyKTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZW1vdmVDb250ZXh0ID0gc3RyID0+IHN0ci5yZXBsYWNlKC97Y29udGV4dDpcXHcrfSQvLCAnJyk7XG4gICAgICBpZiAoaXNFbXB0eSh0ZXh0KSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgICBpZiAoaXNSYXcodGV4dCkpIHtcbiAgICAgICAgcmV0dXJuIHRvU3RyaW5nKHRleHQucmF3KTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1Rva2VuaXNlZCh0ZXh0KSkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0ZXh0LnNsaWNlKDEpO1xuICAgICAgICBjb25zdCBzdWJzdGl0dWVkID0gZ2V0TGFuZ0RhdGEodGV4dFswXSkucmVwbGFjZSgvXFx7KFswLTldKylcXH0vZywgKCQxLCAkMikgPT4gaGFzJDIodmFsdWVzLCAkMikgPyB0b1N0cmluZyh2YWx1ZXNbJDJdKSA6ICQxKTtcbiAgICAgICAgcmV0dXJuIHJlbW92ZUNvbnRleHQoc3Vic3RpdHVlZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVtb3ZlQ29udGV4dChnZXRMYW5nRGF0YSh0ZXh0KSk7XG4gICAgfTtcbiAgICBjb25zdCBpc1J0bCQxID0gKCkgPT4gZ2V0TGFuZ3VhZ2VEYXRhKCkuYmluZChpdGVtcyA9PiBnZXQkYShpdGVtcywgJ19kaXInKSkuZXhpc3RzKGRpciA9PiBkaXIgPT09ICdydGwnKTtcbiAgICBjb25zdCBoYXNDb2RlID0gY29kZSA9PiBoYXMkMihkYXRhLCBjb2RlKTtcbiAgICBjb25zdCBJMThuID0ge1xuICAgICAgZ2V0RGF0YTogZ2V0RGF0YSQxLFxuICAgICAgc2V0Q29kZSxcbiAgICAgIGdldENvZGUsXG4gICAgICBhZGQ6IGFkZCQxLFxuICAgICAgdHJhbnNsYXRlLFxuICAgICAgaXNSdGw6IGlzUnRsJDEsXG4gICAgICBoYXNDb2RlXG4gICAgfTtcblxuICAgIGNvbnN0IEFkZE9uTWFuYWdlciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICBjb25zdCB1cmxzID0ge307XG4gICAgICBjb25zdCBsb29rdXAgPSB7fTtcbiAgICAgIGNvbnN0IF9saXN0ZW5lcnMgPSBbXTtcbiAgICAgIGNvbnN0IHJ1bkxpc3RlbmVycyA9IChuYW1lLCBzdGF0ZSkgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaGVkTGlzdGVuZXJzID0gZmlsdGVyJDUoX2xpc3RlbmVycywgbGlzdGVuZXIgPT4gbGlzdGVuZXIubmFtZSA9PT0gbmFtZSAmJiBsaXN0ZW5lci5zdGF0ZSA9PT0gc3RhdGUpO1xuICAgICAgICBlYWNoJGUobWF0Y2hlZExpc3RlbmVycywgbGlzdGVuZXIgPT4gbGlzdGVuZXIucmVzb2x2ZSgpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0xvYWRlZCA9IG5hbWUgPT4gaGFzJDIodXJscywgbmFtZSk7XG4gICAgICBjb25zdCBpc0FkZGVkID0gbmFtZSA9PiBoYXMkMihsb29rdXAsIG5hbWUpO1xuICAgICAgY29uc3QgZ2V0ID0gbmFtZSA9PiB7XG4gICAgICAgIGlmIChsb29rdXBbbmFtZV0pIHtcbiAgICAgICAgICByZXR1cm4gbG9va3VwW25hbWVdLmluc3RhbmNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgbG9hZExhbmd1YWdlUGFjayA9IChuYW1lLCBsYW5ndWFnZXMpID0+IHtcbiAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBJMThuLmdldENvZGUoKTtcbiAgICAgICAgY29uc3Qgd3JhcHBlZExhbmd1YWdlcyA9ICcsJyArIChsYW5ndWFnZXMgfHwgJycpICsgJywnO1xuICAgICAgICBpZiAoIWxhbmd1YWdlIHx8IGxhbmd1YWdlcyAmJiB3cmFwcGVkTGFuZ3VhZ2VzLmluZGV4T2YoJywnICsgbGFuZ3VhZ2UgKyAnLCcpID09PSAtMSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBTY3JpcHRMb2FkZXIuU2NyaXB0TG9hZGVyLmFkZCh1cmxzW25hbWVdICsgJy9sYW5ncy8nICsgbGFuZ3VhZ2UgKyAnLmpzJyk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVxdWlyZUxhbmdQYWNrID0gKG5hbWUsIGxhbmd1YWdlcykgPT4ge1xuICAgICAgICBpZiAoQWRkT25NYW5hZ2VyLmxhbmd1YWdlTG9hZCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBpZiAoaXNMb2FkZWQobmFtZSkpIHtcbiAgICAgICAgICAgIGxvYWRMYW5ndWFnZVBhY2sobmFtZSwgbGFuZ3VhZ2VzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2FpdEZvcihuYW1lLCAnbG9hZGVkJykudGhlbigoKSA9PiBsb2FkTGFuZ3VhZ2VQYWNrKG5hbWUsIGxhbmd1YWdlcykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkZCA9IChpZCwgYWRkT24pID0+IHtcbiAgICAgICAgaXRlbXMucHVzaChhZGRPbik7XG4gICAgICAgIGxvb2t1cFtpZF0gPSB7IGluc3RhbmNlOiBhZGRPbiB9O1xuICAgICAgICBydW5MaXN0ZW5lcnMoaWQsICdhZGRlZCcpO1xuICAgICAgICByZXR1cm4gYWRkT247XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVtb3ZlID0gbmFtZSA9PiB7XG4gICAgICAgIGRlbGV0ZSB1cmxzW25hbWVdO1xuICAgICAgICBkZWxldGUgbG9va3VwW25hbWVdO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNyZWF0ZVVybCA9IChiYXNlVXJsLCBkZXApID0+IHtcbiAgICAgICAgaWYgKGlzU3RyaW5nKGRlcCkpIHtcbiAgICAgICAgICByZXR1cm4gaXNTdHJpbmcoYmFzZVVybCkgPyB7XG4gICAgICAgICAgICBwcmVmaXg6ICcnLFxuICAgICAgICAgICAgcmVzb3VyY2U6IGRlcCxcbiAgICAgICAgICAgIHN1ZmZpeDogJydcbiAgICAgICAgICB9IDoge1xuICAgICAgICAgICAgcHJlZml4OiBiYXNlVXJsLnByZWZpeCxcbiAgICAgICAgICAgIHJlc291cmNlOiBkZXAsXG4gICAgICAgICAgICBzdWZmaXg6IGJhc2VVcmwuc3VmZml4XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZGVwO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgbG9hZCA9IChuYW1lLCBhZGRPblVybCkgPT4ge1xuICAgICAgICBpZiAodXJsc1tuYW1lXSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdXJsU3RyaW5nID0gaXNTdHJpbmcoYWRkT25VcmwpID8gYWRkT25VcmwgOiBhZGRPblVybC5wcmVmaXggKyBhZGRPblVybC5yZXNvdXJjZSArIGFkZE9uVXJsLnN1ZmZpeDtcbiAgICAgICAgaWYgKHVybFN0cmluZy5pbmRleE9mKCcvJykgIT09IDAgJiYgdXJsU3RyaW5nLmluZGV4T2YoJzovLycpID09PSAtMSkge1xuICAgICAgICAgIHVybFN0cmluZyA9IEFkZE9uTWFuYWdlci5iYXNlVVJMICsgJy8nICsgdXJsU3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIHVybHNbbmFtZV0gPSB1cmxTdHJpbmcuc3Vic3RyaW5nKDAsIHVybFN0cmluZy5sYXN0SW5kZXhPZignLycpKTtcbiAgICAgICAgY29uc3QgZG9uZSA9ICgpID0+IHtcbiAgICAgICAgICBydW5MaXN0ZW5lcnMobmFtZSwgJ2xvYWRlZCcpO1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGxvb2t1cFtuYW1lXSkge1xuICAgICAgICAgIHJldHVybiBkb25lKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFNjcmlwdExvYWRlci5TY3JpcHRMb2FkZXIuYWRkKHVybFN0cmluZykudGhlbihkb25lKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHdhaXRGb3IgPSAobmFtZSwgc3RhdGUgPSAnYWRkZWQnKSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZSA9PT0gJ2FkZGVkJyAmJiBpc0FkZGVkKG5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAnbG9hZGVkJyAmJiBpc0xvYWRlZChuYW1lKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBfbGlzdGVuZXJzLnB1c2goe1xuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgcmVzb2x2ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpdGVtcyxcbiAgICAgICAgdXJscyxcbiAgICAgICAgbG9va3VwLFxuICAgICAgICBnZXQsXG4gICAgICAgIHJlcXVpcmVMYW5nUGFjayxcbiAgICAgICAgYWRkLFxuICAgICAgICByZW1vdmUsXG4gICAgICAgIGNyZWF0ZVVybCxcbiAgICAgICAgbG9hZCxcbiAgICAgICAgd2FpdEZvclxuICAgICAgfTtcbiAgICB9O1xuICAgIEFkZE9uTWFuYWdlci5sYW5ndWFnZUxvYWQgPSB0cnVlO1xuICAgIEFkZE9uTWFuYWdlci5iYXNlVVJMID0gJyc7XG4gICAgQWRkT25NYW5hZ2VyLlBsdWdpbk1hbmFnZXIgPSBBZGRPbk1hbmFnZXIoKTtcbiAgICBBZGRPbk1hbmFnZXIuVGhlbWVNYW5hZ2VyID0gQWRkT25NYW5hZ2VyKCk7XG4gICAgQWRkT25NYW5hZ2VyLk1vZGVsTWFuYWdlciA9IEFkZE9uTWFuYWdlcigpO1xuXG4gICAgY29uc3Qgc2luZ2xldG9uID0gZG9SZXZva2UgPT4ge1xuICAgICAgY29uc3Qgc3ViamVjdCA9IENlbGwoT3B0aW9uYWwubm9uZSgpKTtcbiAgICAgIGNvbnN0IHJldm9rZSA9ICgpID0+IHN1YmplY3QuZ2V0KCkuZWFjaChkb1Jldm9rZSk7XG4gICAgICBjb25zdCBjbGVhciA9ICgpID0+IHtcbiAgICAgICAgcmV2b2tlKCk7XG4gICAgICAgIHN1YmplY3Quc2V0KE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNTZXQgPSAoKSA9PiBzdWJqZWN0LmdldCgpLmlzU29tZSgpO1xuICAgICAgY29uc3QgZ2V0ID0gKCkgPT4gc3ViamVjdC5nZXQoKTtcbiAgICAgIGNvbnN0IHNldCA9IHMgPT4ge1xuICAgICAgICByZXZva2UoKTtcbiAgICAgICAgc3ViamVjdC5zZXQoT3B0aW9uYWwuc29tZShzKSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xlYXIsXG4gICAgICAgIGlzU2V0LFxuICAgICAgICBnZXQsXG4gICAgICAgIHNldFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHJlcGVhdGFibGUgPSBkZWxheSA9PiB7XG4gICAgICBjb25zdCBpbnRlcnZhbElkID0gQ2VsbChPcHRpb25hbC5ub25lKCkpO1xuICAgICAgY29uc3QgcmV2b2tlID0gKCkgPT4gaW50ZXJ2YWxJZC5nZXQoKS5lYWNoKGlkID0+IGNsZWFySW50ZXJ2YWwoaWQpKTtcbiAgICAgIGNvbnN0IGNsZWFyID0gKCkgPT4ge1xuICAgICAgICByZXZva2UoKTtcbiAgICAgICAgaW50ZXJ2YWxJZC5zZXQoT3B0aW9uYWwubm9uZSgpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1NldCA9ICgpID0+IGludGVydmFsSWQuZ2V0KCkuaXNTb21lKCk7XG4gICAgICBjb25zdCBnZXQgPSAoKSA9PiBpbnRlcnZhbElkLmdldCgpO1xuICAgICAgY29uc3Qgc2V0ID0gZnVuY3Rpb25Ub1JlcGVhdCA9PiB7XG4gICAgICAgIHJldm9rZSgpO1xuICAgICAgICBpbnRlcnZhbElkLnNldChPcHRpb25hbC5zb21lKHNldEludGVydmFsKGZ1bmN0aW9uVG9SZXBlYXQsIGRlbGF5KSkpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsZWFyLFxuICAgICAgICBpc1NldCxcbiAgICAgICAgZ2V0LFxuICAgICAgICBzZXRcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCB2YWx1ZSQyID0gKCkgPT4ge1xuICAgICAgY29uc3Qgc3ViamVjdCA9IHNpbmdsZXRvbihub29wKTtcbiAgICAgIGNvbnN0IG9uID0gZiA9PiBzdWJqZWN0LmdldCgpLmVhY2goZik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdWJqZWN0LFxuICAgICAgICBvblxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmlyc3QkMSA9IChmbiwgcmF0ZSkgPT4ge1xuICAgICAgbGV0IHRpbWVyID0gbnVsbDtcbiAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFpc051bGwodGltZXIpKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCB0aHJvdHRsZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChpc051bGwodGltZXIpKSB7XG4gICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgIH0sIHJhdGUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2FuY2VsLFxuICAgICAgICB0aHJvdHRsZVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGxhc3QkMSA9IChmbiwgcmF0ZSkgPT4ge1xuICAgICAgbGV0IHRpbWVyID0gbnVsbDtcbiAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFpc051bGwodGltZXIpKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCB0aHJvdHRsZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGNhbmNlbCgpO1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgfSwgcmF0ZSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2FuY2VsLFxuICAgICAgICB0aHJvdHRsZVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgYW5ub3RhdGlvbiA9IGNvbnN0YW50KCdtY2UtYW5ub3RhdGlvbicpO1xuICAgIGNvbnN0IGRhdGFBbm5vdGF0aW9uID0gY29uc3RhbnQoJ2RhdGEtbWNlLWFubm90YXRpb24nKTtcbiAgICBjb25zdCBkYXRhQW5ub3RhdGlvbklkID0gY29uc3RhbnQoJ2RhdGEtbWNlLWFubm90YXRpb24tdWlkJyk7XG4gICAgY29uc3QgZGF0YUFubm90YXRpb25BY3RpdmUgPSBjb25zdGFudCgnZGF0YS1tY2UtYW5ub3RhdGlvbi1hY3RpdmUnKTtcbiAgICBjb25zdCBkYXRhQW5ub3RhdGlvbkNsYXNzZXMgPSBjb25zdGFudCgnZGF0YS1tY2UtYW5ub3RhdGlvbi1jbGFzc2VzJyk7XG4gICAgY29uc3QgZGF0YUFubm90YXRpb25BdHRyaWJ1dGVzID0gY29uc3RhbnQoJ2RhdGEtbWNlLWFubm90YXRpb24tYXR0cnMnKTtcblxuICAgIGNvbnN0IGlzUm9vdCQxID0gcm9vdCA9PiBub2RlID0+IGVxKG5vZGUsIHJvb3QpO1xuICAgIGNvbnN0IGlkZW50aWZ5ID0gKGVkaXRvciwgYW5ub3RhdGlvbk5hbWUpID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBjb25zdCBzdGFydCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJuZy5zdGFydENvbnRhaW5lcik7XG4gICAgICBjb25zdCByb290ID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IGFubm90YXRpb25OYW1lLmZvbGQoKCkgPT4gJy4nICsgYW5ub3RhdGlvbigpLCBhbiA9PiBgWyR7IGRhdGFBbm5vdGF0aW9uKCkgfT1cIiR7IGFuIH1cIl1gKTtcbiAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gY2hpbGQkMShzdGFydCwgcm5nLnN0YXJ0T2Zmc2V0KS5nZXRPcihzdGFydCk7XG4gICAgICBjb25zdCBjbG9zZXN0ID0gY2xvc2VzdCQzKG5ld1N0YXJ0LCBzZWxlY3RvciwgaXNSb290JDEocm9vdCkpO1xuICAgICAgcmV0dXJuIGNsb3Nlc3QuYmluZChjID0+IGdldE9wdChjLCBgJHsgZGF0YUFubm90YXRpb25JZCgpIH1gKS5iaW5kKHVpZCA9PiBnZXRPcHQoYywgYCR7IGRhdGFBbm5vdGF0aW9uKCkgfWApLm1hcChuYW1lID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBmaW5kTWFya2VycyhlZGl0b3IsIHVpZCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdWlkLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgZWxlbWVudHNcbiAgICAgICAgfTtcbiAgICAgIH0pKSk7XG4gICAgfTtcbiAgICBjb25zdCBpc0Fubm90YXRpb24gPSBlbGVtID0+IGlzRWxlbWVudCQ3KGVsZW0pICYmIGhhcyhlbGVtLCBhbm5vdGF0aW9uKCkpO1xuICAgIGNvbnN0IGlzQm9ndXNFbGVtZW50ID0gKGVsZW0sIHJvb3QpID0+IGhhcyQxKGVsZW0sICdkYXRhLW1jZS1ib2d1cycpIHx8IGFuY2VzdG9yJDIoZWxlbSwgJ1tkYXRhLW1jZS1ib2d1cz1cImFsbFwiXScsIGlzUm9vdCQxKHJvb3QpKTtcbiAgICBjb25zdCBmaW5kTWFya2VycyA9IChlZGl0b3IsIHVpZCkgPT4ge1xuICAgICAgY29uc3QgYm9keSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgY29uc3QgZGVzY2VuZGFudHMkMSA9IGRlc2NlbmRhbnRzKGJvZHksIGBbJHsgZGF0YUFubm90YXRpb25JZCgpIH09XCIkeyB1aWQgfVwiXWApO1xuICAgICAgcmV0dXJuIGZpbHRlciQ1KGRlc2NlbmRhbnRzJDEsIGRlc2NlbmRhbnQgPT4gIWlzQm9ndXNFbGVtZW50KGRlc2NlbmRhbnQsIGJvZHkpKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRBbGwgPSAoZWRpdG9yLCBuYW1lKSA9PiB7XG4gICAgICBjb25zdCBib2R5ID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBjb25zdCBtYXJrZXJzID0gZGVzY2VuZGFudHMoYm9keSwgYFskeyBkYXRhQW5ub3RhdGlvbigpIH09XCIkeyBuYW1lIH1cIl1gKTtcbiAgICAgIGNvbnN0IGRpcmVjdG9yeSA9IHt9O1xuICAgICAgZWFjaCRlKG1hcmtlcnMsIG0gPT4ge1xuICAgICAgICBpZiAoIWlzQm9ndXNFbGVtZW50KG0sIGJvZHkpKSB7XG4gICAgICAgICAgY29uc3QgdWlkID0gZ2V0JDkobSwgZGF0YUFubm90YXRpb25JZCgpKTtcbiAgICAgICAgICBjb25zdCBub2Rlc0FscmVhZHkgPSBnZXQkYShkaXJlY3RvcnksIHVpZCkuZ2V0T3IoW10pO1xuICAgICAgICAgIGRpcmVjdG9yeVt1aWRdID0gbm9kZXNBbHJlYWR5LmNvbmNhdChbbV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkaXJlY3Rvcnk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNldHVwJHggPSAoZWRpdG9yLCByZWdpc3RyeSkgPT4ge1xuICAgICAgY29uc3QgY2hhbmdlQ2FsbGJhY2tzID0gQ2VsbCh7fSk7XG4gICAgICBjb25zdCBpbml0RGF0YSA9ICgpID0+ICh7XG4gICAgICAgIGxpc3RlbmVyczogW10sXG4gICAgICAgIHByZXZpb3VzOiB2YWx1ZSQyKClcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgd2l0aENhbGxiYWNrcyA9IChuYW1lLCBmKSA9PiB7XG4gICAgICAgIHVwZGF0ZUNhbGxiYWNrcyhuYW1lLCBkYXRhID0+IHtcbiAgICAgICAgICBmKGRhdGEpO1xuICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCB1cGRhdGVDYWxsYmFja3MgPSAobmFtZSwgZikgPT4ge1xuICAgICAgICBjb25zdCBjYWxsYmFja01hcCA9IGNoYW5nZUNhbGxiYWNrcy5nZXQoKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGdldCRhKGNhbGxiYWNrTWFwLCBuYW1lKS5nZXRPclRodW5rKGluaXREYXRhKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0RGF0YSA9IGYoZGF0YSk7XG4gICAgICAgIGNhbGxiYWNrTWFwW25hbWVdID0gb3V0cHV0RGF0YTtcbiAgICAgICAgY2hhbmdlQ2FsbGJhY2tzLnNldChjYWxsYmFja01hcCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZmlyZUNhbGxiYWNrcyA9IChuYW1lLCB1aWQsIGVsZW1lbnRzKSA9PiB7XG4gICAgICAgIHdpdGhDYWxsYmFja3MobmFtZSwgZGF0YSA9PiB7XG4gICAgICAgICAgZWFjaCRlKGRhdGEubGlzdGVuZXJzLCBmID0+IGYodHJ1ZSwgbmFtZSwge1xuICAgICAgICAgICAgdWlkLFxuICAgICAgICAgICAgbm9kZXM6IG1hcCQzKGVsZW1lbnRzLCBlbGVtID0+IGVsZW0uZG9tKVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZmlyZU5vQW5ub3RhdGlvbiA9IG5hbWUgPT4ge1xuICAgICAgICB3aXRoQ2FsbGJhY2tzKG5hbWUsIGRhdGEgPT4ge1xuICAgICAgICAgIGVhY2gkZShkYXRhLmxpc3RlbmVycywgZiA9PiBmKGZhbHNlLCBuYW1lKSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHRvZ2dsZUFjdGl2ZUF0dHIgPSAodWlkLCBzdGF0ZSkgPT4ge1xuICAgICAgICBlYWNoJGUoZmluZE1hcmtlcnMoZWRpdG9yLCB1aWQpLCBlbGVtID0+IHtcbiAgICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICAgIHNldCQzKGVsZW0sIGRhdGFBbm5vdGF0aW9uQWN0aXZlKCksICd0cnVlJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbW92ZSRhKGVsZW0sIGRhdGFBbm5vdGF0aW9uQWN0aXZlKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgb25Ob2RlQ2hhbmdlID0gbGFzdCQxKCgpID0+IHtcbiAgICAgICAgY29uc3QgYW5ub3RhdGlvbnMgPSBzb3J0KHJlZ2lzdHJ5LmdldE5hbWVzKCkpO1xuICAgICAgICBlYWNoJGUoYW5ub3RhdGlvbnMsIG5hbWUgPT4ge1xuICAgICAgICAgIHVwZGF0ZUNhbGxiYWNrcyhuYW1lLCBkYXRhID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZXYgPSBkYXRhLnByZXZpb3VzLmdldCgpO1xuICAgICAgICAgICAgaWRlbnRpZnkoZWRpdG9yLCBPcHRpb25hbC5zb21lKG5hbWUpKS5mb2xkKCgpID0+IHtcbiAgICAgICAgICAgICAgcHJldi5lYWNoKHVpZCA9PiB7XG4gICAgICAgICAgICAgICAgZmlyZU5vQW5ub3RhdGlvbihuYW1lKTtcbiAgICAgICAgICAgICAgICBkYXRhLnByZXZpb3VzLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgdG9nZ2xlQWN0aXZlQXR0cih1aWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCAoe3VpZCwgbmFtZSwgZWxlbWVudHN9KSA9PiB7XG4gICAgICAgICAgICAgIGlmICghaXMkMihwcmV2LCB1aWQpKSB7XG4gICAgICAgICAgICAgICAgcHJldi5lYWNoKHVpZCA9PiB0b2dnbGVBY3RpdmVBdHRyKHVpZCwgZmFsc2UpKTtcbiAgICAgICAgICAgICAgICBmaXJlQ2FsbGJhY2tzKG5hbWUsIHVpZCwgZWxlbWVudHMpO1xuICAgICAgICAgICAgICAgIGRhdGEucHJldmlvdXMuc2V0KHVpZCk7XG4gICAgICAgICAgICAgICAgdG9nZ2xlQWN0aXZlQXR0cih1aWQsIHRydWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHByZXZpb3VzOiBkYXRhLnByZXZpb3VzLFxuICAgICAgICAgICAgICBsaXN0ZW5lcnM6IGRhdGEubGlzdGVuZXJzXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0sIDMwKTtcbiAgICAgIGVkaXRvci5vbigncmVtb3ZlJywgKCkgPT4ge1xuICAgICAgICBvbk5vZGVDaGFuZ2UuY2FuY2VsKCk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignTm9kZUNoYW5nZScsICgpID0+IHtcbiAgICAgICAgb25Ob2RlQ2hhbmdlLnRocm90dGxlKCk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGFkZExpc3RlbmVyID0gKG5hbWUsIGYpID0+IHtcbiAgICAgICAgdXBkYXRlQ2FsbGJhY2tzKG5hbWUsIGRhdGEgPT4gKHtcbiAgICAgICAgICBwcmV2aW91czogZGF0YS5wcmV2aW91cyxcbiAgICAgICAgICBsaXN0ZW5lcnM6IGRhdGEubGlzdGVuZXJzLmNvbmNhdChbZl0pXG4gICAgICAgIH0pKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBhZGRMaXN0ZW5lciB9O1xuICAgIH07XG5cbiAgICBjb25zdCBzZXR1cCR3ID0gKGVkaXRvciwgcmVnaXN0cnkpID0+IHtcbiAgICAgIGNvbnN0IGRhdGFBbm5vdGF0aW9uJDEgPSBkYXRhQW5ub3RhdGlvbigpO1xuICAgICAgY29uc3QgaWRlbnRpZnlQYXJzZXJOb2RlID0gbm9kZSA9PiBPcHRpb25hbC5mcm9tKG5vZGUuYXR0cihkYXRhQW5ub3RhdGlvbiQxKSkuYmluZChyZWdpc3RyeS5sb29rdXApO1xuICAgICAgY29uc3QgcmVtb3ZlRGlyZWN0QW5ub3RhdGlvbiA9IG5vZGUgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBub2RlLmF0dHIoZGF0YUFubm90YXRpb25JZCgpLCBudWxsKTtcbiAgICAgICAgbm9kZS5hdHRyKGRhdGFBbm5vdGF0aW9uKCksIG51bGwpO1xuICAgICAgICBub2RlLmF0dHIoZGF0YUFubm90YXRpb25BY3RpdmUoKSwgbnVsbCk7XG4gICAgICAgIGNvbnN0IGN1c3RvbUF0dHJOYW1lcyA9IE9wdGlvbmFsLmZyb20obm9kZS5hdHRyKGRhdGFBbm5vdGF0aW9uQXR0cmlidXRlcygpKSkubWFwKG5hbWVzID0+IG5hbWVzLnNwbGl0KCcsJykpLmdldE9yKFtdKTtcbiAgICAgICAgY29uc3QgY3VzdG9tQ2xhc3NlcyA9IE9wdGlvbmFsLmZyb20obm9kZS5hdHRyKGRhdGFBbm5vdGF0aW9uQ2xhc3NlcygpKSkubWFwKG5hbWVzID0+IG5hbWVzLnNwbGl0KCcsJykpLmdldE9yKFtdKTtcbiAgICAgICAgZWFjaCRlKGN1c3RvbUF0dHJOYW1lcywgbmFtZSA9PiBub2RlLmF0dHIobmFtZSwgbnVsbCkpO1xuICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSAoX2IgPSAoX2EgPSBub2RlLmF0dHIoJ2NsYXNzJykpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zcGxpdCgnICcpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBbXTtcbiAgICAgICAgY29uc3QgbmV3Q2xhc3NMaXN0ID0gZGlmZmVyZW5jZShjbGFzc0xpc3QsIFthbm5vdGF0aW9uKCldLmNvbmNhdChjdXN0b21DbGFzc2VzKSk7XG4gICAgICAgIG5vZGUuYXR0cignY2xhc3MnLCBuZXdDbGFzc0xpc3QubGVuZ3RoID4gMCA/IG5ld0NsYXNzTGlzdC5qb2luKCcgJykgOiBudWxsKTtcbiAgICAgICAgbm9kZS5hdHRyKGRhdGFBbm5vdGF0aW9uQ2xhc3NlcygpLCBudWxsKTtcbiAgICAgICAgbm9kZS5hdHRyKGRhdGFBbm5vdGF0aW9uQXR0cmlidXRlcygpLCBudWxsKTtcbiAgICAgIH07XG4gICAgICBlZGl0b3Iuc2VyaWFsaXplci5hZGRUZW1wQXR0cihkYXRhQW5ub3RhdGlvbkFjdGl2ZSgpKTtcbiAgICAgIGVkaXRvci5zZXJpYWxpemVyLmFkZEF0dHJpYnV0ZUZpbHRlcihkYXRhQW5ub3RhdGlvbiQxLCBub2RlcyA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICAgIGlkZW50aWZ5UGFyc2VyTm9kZShub2RlKS5lYWNoKHNldHRpbmdzID0+IHtcbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5wZXJzaXN0ZW50ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBpZiAobm9kZS5uYW1lID09PSAnc3BhbicpIHtcbiAgICAgICAgICAgICAgICBub2RlLnVud3JhcCgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlbW92ZURpcmVjdEFubm90YXRpb24obm9kZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNyZWF0ZSRjID0gKCkgPT4ge1xuICAgICAgY29uc3QgYW5ub3RhdGlvbnMgPSB7fTtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyID0gKG5hbWUsIHNldHRpbmdzKSA9PiB7XG4gICAgICAgIGFubm90YXRpb25zW25hbWVdID0ge1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgc2V0dGluZ3NcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCBsb29rdXAgPSBuYW1lID0+IGdldCRhKGFubm90YXRpb25zLCBuYW1lKS5tYXAoYSA9PiBhLnNldHRpbmdzKTtcbiAgICAgIGNvbnN0IGdldE5hbWVzID0gKCkgPT4ga2V5cyhhbm5vdGF0aW9ucyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWdpc3RlcixcbiAgICAgICAgbG9va3VwLFxuICAgICAgICBnZXROYW1lc1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgbGV0IHVuaXF1ZSA9IDA7XG4gICAgY29uc3QgZ2VuZXJhdGUkMSA9IHByZWZpeCA9PiB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IHRpbWUgPSBkYXRlLmdldFRpbWUoKTtcbiAgICAgIGNvbnN0IHJhbmRvbSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMDApO1xuICAgICAgdW5pcXVlKys7XG4gICAgICByZXR1cm4gcHJlZml4ICsgJ18nICsgcmFuZG9tICsgdW5pcXVlICsgU3RyaW5nKHRpbWUpO1xuICAgIH07XG5cbiAgICBjb25zdCBhZGQgPSAoZWxlbWVudCwgY2xhc3NlcykgPT4ge1xuICAgICAgZWFjaCRlKGNsYXNzZXMsIHggPT4ge1xuICAgICAgICBhZGQkMihlbGVtZW50LCB4KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlJDQgPSAoZWxlbWVudCwgY2xhc3NlcykgPT4ge1xuICAgICAgZWFjaCRlKGNsYXNzZXMsIHggPT4ge1xuICAgICAgICByZW1vdmUkNyhlbGVtZW50LCB4KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBjbG9uZSQyID0gKG9yaWdpbmFsLCBpc0RlZXApID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKG9yaWdpbmFsLmRvbS5jbG9uZU5vZGUoaXNEZWVwKSk7XG4gICAgY29uc3Qgc2hhbGxvdyQxID0gb3JpZ2luYWwgPT4gY2xvbmUkMihvcmlnaW5hbCwgZmFsc2UpO1xuICAgIGNvbnN0IGRlZXAkMSA9IG9yaWdpbmFsID0+IGNsb25lJDIob3JpZ2luYWwsIHRydWUpO1xuICAgIGNvbnN0IHNoYWxsb3dBcyA9IChvcmlnaW5hbCwgdGFnKSA9PiB7XG4gICAgICBjb25zdCBudSA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKHRhZyk7XG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0gY2xvbmUkNChvcmlnaW5hbCk7XG4gICAgICBzZXRBbGwkMShudSwgYXR0cmlidXRlcyk7XG4gICAgICByZXR1cm4gbnU7XG4gICAgfTtcbiAgICBjb25zdCBtdXRhdGUgPSAob3JpZ2luYWwsIHRhZykgPT4ge1xuICAgICAgY29uc3QgbnUgPSBzaGFsbG93QXMob3JpZ2luYWwsIHRhZyk7XG4gICAgICBhZnRlciQ0KG9yaWdpbmFsLCBudSk7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGNoaWxkcmVuJDEob3JpZ2luYWwpO1xuICAgICAgYXBwZW5kKG51LCBjaGlsZHJlbik7XG4gICAgICByZW1vdmUkNShvcmlnaW5hbCk7XG4gICAgICByZXR1cm4gbnU7XG4gICAgfTtcblxuICAgIGNvbnN0IFRleHRXYWxrZXIgPSAoc3RhcnROb2RlLCByb290Tm9kZSwgaXNCb3VuZGFyeSA9IG5ldmVyKSA9PiB7XG4gICAgICBjb25zdCB3YWxrZXIgPSBuZXcgRG9tVHJlZVdhbGtlcihzdGFydE5vZGUsIHJvb3ROb2RlKTtcbiAgICAgIGNvbnN0IHdhbGsgPSBkaXJlY3Rpb24gPT4ge1xuICAgICAgICBsZXQgbmV4dDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIG5leHQgPSB3YWxrZXJbZGlyZWN0aW9uXSgpO1xuICAgICAgICB9IHdoaWxlIChuZXh0ICYmICFpc1RleHQkYShuZXh0KSAmJiAhaXNCb3VuZGFyeShuZXh0KSk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKG5leHQpLmZpbHRlcihpc1RleHQkYSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudDogKCkgPT4gT3B0aW9uYWwuZnJvbSh3YWxrZXIuY3VycmVudCgpKS5maWx0ZXIoaXNUZXh0JGEpLFxuICAgICAgICBuZXh0OiAoKSA9PiB3YWxrKCduZXh0JyksXG4gICAgICAgIHByZXY6ICgpID0+IHdhbGsoJ3ByZXYnKSxcbiAgICAgICAgcHJldjI6ICgpID0+IHdhbGsoJ3ByZXYyJylcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IFRleHRTZWVrZXIgPSAoZG9tLCBpc0JvdW5kYXJ5KSA9PiB7XG4gICAgICBjb25zdCBpc0Jsb2NrQm91bmRhcnkgPSBpc0JvdW5kYXJ5ID8gaXNCb3VuZGFyeSA6IG5vZGUgPT4gZG9tLmlzQmxvY2sobm9kZSkgfHwgaXNCciQ2KG5vZGUpIHx8IGlzQ29udGVudEVkaXRhYmxlRmFsc2UkYihub2RlKTtcbiAgICAgIGNvbnN0IHdhbGsgPSAobm9kZSwgb2Zmc2V0LCB3YWxrZXIsIHByb2Nlc3MpID0+IHtcbiAgICAgICAgaWYgKGlzVGV4dCRhKG5vZGUpKSB7XG4gICAgICAgICAgY29uc3QgbmV3T2Zmc2V0ID0gcHJvY2Vzcyhub2RlLCBvZmZzZXQsIG5vZGUuZGF0YSk7XG4gICAgICAgICAgaWYgKG5ld09mZnNldCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgICAgY29udGFpbmVyOiBub2RlLFxuICAgICAgICAgICAgICBvZmZzZXQ6IG5ld09mZnNldFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3YWxrZXIoKS5iaW5kKG5leHQgPT4gd2FsayhuZXh0LmNvbnRhaW5lciwgbmV4dC5vZmZzZXQsIHdhbGtlciwgcHJvY2VzcykpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGJhY2t3YXJkcyA9IChub2RlLCBvZmZzZXQsIHByb2Nlc3MsIHJvb3QpID0+IHtcbiAgICAgICAgY29uc3Qgd2Fsa2VyID0gVGV4dFdhbGtlcihub2RlLCByb290ICE9PSBudWxsICYmIHJvb3QgIT09IHZvaWQgMCA/IHJvb3QgOiBkb20uZ2V0Um9vdCgpLCBpc0Jsb2NrQm91bmRhcnkpO1xuICAgICAgICByZXR1cm4gd2Fsayhub2RlLCBvZmZzZXQsICgpID0+IHdhbGtlci5wcmV2KCkubWFwKHByZXYgPT4gKHtcbiAgICAgICAgICBjb250YWluZXI6IHByZXYsXG4gICAgICAgICAgb2Zmc2V0OiBwcmV2Lmxlbmd0aFxuICAgICAgICB9KSksIHByb2Nlc3MpLmdldE9yTnVsbCgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZvcndhcmRzID0gKG5vZGUsIG9mZnNldCwgcHJvY2Vzcywgcm9vdCkgPT4ge1xuICAgICAgICBjb25zdCB3YWxrZXIgPSBUZXh0V2Fsa2VyKG5vZGUsIHJvb3QgIT09IG51bGwgJiYgcm9vdCAhPT0gdm9pZCAwID8gcm9vdCA6IGRvbS5nZXRSb290KCksIGlzQmxvY2tCb3VuZGFyeSk7XG4gICAgICAgIHJldHVybiB3YWxrKG5vZGUsIG9mZnNldCwgKCkgPT4gd2Fsa2VyLm5leHQoKS5tYXAobmV4dCA9PiAoe1xuICAgICAgICAgIGNvbnRhaW5lcjogbmV4dCxcbiAgICAgICAgICBvZmZzZXQ6IDBcbiAgICAgICAgfSkpLCBwcm9jZXNzKS5nZXRPck51bGwoKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYWNrd2FyZHMsXG4gICAgICAgIGZvcndhcmRzXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCByb3VuZCQyID0gTWF0aC5yb3VuZDtcbiAgICBjb25zdCBjbG9uZSQxID0gcmVjdCA9PiB7XG4gICAgICBpZiAoIXJlY3QpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICBib3R0b206IDAsXG4gICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgaGVpZ2h0OiAwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiByb3VuZCQyKHJlY3QubGVmdCksXG4gICAgICAgIHRvcDogcm91bmQkMihyZWN0LnRvcCksXG4gICAgICAgIGJvdHRvbTogcm91bmQkMihyZWN0LmJvdHRvbSksXG4gICAgICAgIHJpZ2h0OiByb3VuZCQyKHJlY3QucmlnaHQpLFxuICAgICAgICB3aWR0aDogcm91bmQkMihyZWN0LndpZHRoKSxcbiAgICAgICAgaGVpZ2h0OiByb3VuZCQyKHJlY3QuaGVpZ2h0KVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbGxhcHNlID0gKHJlY3QsIHRvU3RhcnQpID0+IHtcbiAgICAgIHJlY3QgPSBjbG9uZSQxKHJlY3QpO1xuICAgICAgaWYgKHRvU3RhcnQpIHtcbiAgICAgICAgcmVjdC5yaWdodCA9IHJlY3QubGVmdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY3QubGVmdCA9IHJlY3QubGVmdCArIHJlY3Qud2lkdGg7XG4gICAgICAgIHJlY3QucmlnaHQgPSByZWN0LmxlZnQ7XG4gICAgICB9XG4gICAgICByZWN0LndpZHRoID0gMDtcbiAgICAgIHJldHVybiByZWN0O1xuICAgIH07XG4gICAgY29uc3QgaXNFcXVhbCA9IChyZWN0MSwgcmVjdDIpID0+IHJlY3QxLmxlZnQgPT09IHJlY3QyLmxlZnQgJiYgcmVjdDEudG9wID09PSByZWN0Mi50b3AgJiYgcmVjdDEuYm90dG9tID09PSByZWN0Mi5ib3R0b20gJiYgcmVjdDEucmlnaHQgPT09IHJlY3QyLnJpZ2h0O1xuICAgIGNvbnN0IGlzVmFsaWRPdmVyZmxvdyA9IChvdmVyZmxvd1ksIHJlY3QxLCByZWN0MikgPT4gb3ZlcmZsb3dZID49IDAgJiYgb3ZlcmZsb3dZIDw9IE1hdGgubWluKHJlY3QxLmhlaWdodCwgcmVjdDIuaGVpZ2h0KSAvIDI7XG4gICAgY29uc3QgaXNBYm92ZSQxID0gKHJlY3QxLCByZWN0MikgPT4ge1xuICAgICAgY29uc3QgaGFsZkhlaWdodCA9IE1hdGgubWluKHJlY3QyLmhlaWdodCAvIDIsIHJlY3QxLmhlaWdodCAvIDIpO1xuICAgICAgaWYgKHJlY3QxLmJvdHRvbSAtIGhhbGZIZWlnaHQgPCByZWN0Mi50b3ApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdDEudG9wID4gcmVjdDIuYm90dG9tKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1ZhbGlkT3ZlcmZsb3cocmVjdDIudG9wIC0gcmVjdDEuYm90dG9tLCByZWN0MSwgcmVjdDIpO1xuICAgIH07XG4gICAgY29uc3QgaXNCZWxvdyQxID0gKHJlY3QxLCByZWN0MikgPT4ge1xuICAgICAgaWYgKHJlY3QxLnRvcCA+IHJlY3QyLmJvdHRvbSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0MS5ib3R0b20gPCByZWN0Mi50b3ApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRPdmVyZmxvdyhyZWN0Mi5ib3R0b20gLSByZWN0MS50b3AsIHJlY3QxLCByZWN0Mik7XG4gICAgfTtcbiAgICBjb25zdCBjb250YWluc1hZID0gKHJlY3QsIGNsaWVudFgsIGNsaWVudFkpID0+IGNsaWVudFggPj0gcmVjdC5sZWZ0ICYmIGNsaWVudFggPD0gcmVjdC5yaWdodCAmJiBjbGllbnRZID49IHJlY3QudG9wICYmIGNsaWVudFkgPD0gcmVjdC5ib3R0b207XG4gICAgY29uc3QgYm91bmRpbmdDbGllbnRSZWN0RnJvbVJlY3RzID0gcmVjdHMgPT4ge1xuICAgICAgcmV0dXJuIGZvbGRsKHJlY3RzLCAoYWNjLCByZWN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhY2MuZm9sZCgoKSA9PiBPcHRpb25hbC5zb21lKHJlY3QpLCBwcmV2UmVjdCA9PiB7XG4gICAgICAgICAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QubGVmdCwgcHJldlJlY3QubGVmdCk7XG4gICAgICAgICAgY29uc3QgdG9wID0gTWF0aC5taW4ocmVjdC50b3AsIHByZXZSZWN0LnRvcCk7XG4gICAgICAgICAgY29uc3QgcmlnaHQgPSBNYXRoLm1heChyZWN0LnJpZ2h0LCBwcmV2UmVjdC5yaWdodCk7XG4gICAgICAgICAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdC5ib3R0b20sIHByZXZSZWN0LmJvdHRvbSk7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICBib3R0b20sXG4gICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgd2lkdGg6IHJpZ2h0IC0gbGVmdCxcbiAgICAgICAgICAgIGhlaWdodDogYm90dG9tIC0gdG9wXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgT3B0aW9uYWwubm9uZSgpKTtcbiAgICB9O1xuICAgIGNvbnN0IGRpc3RhbmNlVG9SZWN0RWRnZUZyb21YWSA9IChyZWN0LCB4LCB5KSA9PiB7XG4gICAgICBjb25zdCBjeCA9IE1hdGgubWF4KE1hdGgubWluKHgsIHJlY3QubGVmdCArIHJlY3Qud2lkdGgpLCByZWN0LmxlZnQpO1xuICAgICAgY29uc3QgY3kgPSBNYXRoLm1heChNYXRoLm1pbih5LCByZWN0LnRvcCArIHJlY3QuaGVpZ2h0KSwgcmVjdC50b3ApO1xuICAgICAgcmV0dXJuIE1hdGguc3FydCgoeCAtIGN4KSAqICh4IC0gY3gpICsgKHkgLSBjeSkgKiAoeSAtIGN5KSk7XG4gICAgfTtcbiAgICBjb25zdCBvdmVybGFwWSA9IChyMSwgcjIpID0+IE1hdGgubWF4KDAsIE1hdGgubWluKHIxLmJvdHRvbSwgcjIuYm90dG9tKSAtIE1hdGgubWF4KHIxLnRvcCwgcjIudG9wKSk7XG5cbiAgICBjb25zdCBjbGFtcCQyID0gKHZhbHVlLCBtaW4sIG1heCkgPT4gTWF0aC5taW4oTWF0aC5tYXgodmFsdWUsIG1pbiksIG1heCk7XG5cbiAgICBjb25zdCBnZXRTZWxlY3RlZE5vZGUgPSByYW5nZSA9PiB7XG4gICAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLCBzdGFydE9mZnNldCA9IHJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgICAgaWYgKHN0YXJ0Q29udGFpbmVyID09PSByYW5nZS5lbmRDb250YWluZXIgJiYgc3RhcnRDb250YWluZXIuaGFzQ2hpbGROb2RlcygpICYmIHJhbmdlLmVuZE9mZnNldCA9PT0gc3RhcnRPZmZzZXQgKyAxKSB7XG4gICAgICAgIHJldHVybiBzdGFydENvbnRhaW5lci5jaGlsZE5vZGVzW3N0YXJ0T2Zmc2V0XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Tm9kZSQxID0gKGNvbnRhaW5lciwgb2Zmc2V0KSA9PiB7XG4gICAgICBpZiAoaXNFbGVtZW50JDYoY29udGFpbmVyKSAmJiBjb250YWluZXIuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBjb250YWluZXIuY2hpbGROb2RlcztcbiAgICAgICAgY29uc3Qgc2FmZU9mZnNldCA9IGNsYW1wJDIob2Zmc2V0LCAwLCBjaGlsZE5vZGVzLmxlbmd0aCAtIDEpO1xuICAgICAgICByZXR1cm4gY2hpbGROb2Rlc1tzYWZlT2Zmc2V0XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXROb2RlVW5zYWZlID0gKGNvbnRhaW5lciwgb2Zmc2V0KSA9PiB7XG4gICAgICBpZiAob2Zmc2V0IDwgMCAmJiBpc0VsZW1lbnQkNihjb250YWluZXIpICYmIGNvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBnZXROb2RlJDEoY29udGFpbmVyLCBvZmZzZXQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBleHRlbmRpbmdDaGFycyA9IG5ldyBSZWdFeHAoJ1tcXHUwMzAwLVxcdTAzNmZcXHUwNDgzLVxcdTA0ODdcXHUwNDg4LVxcdTA0ODlcXHUwNTkxLVxcdTA1YmRcXHUwNWJmXFx1MDVjMS1cXHUwNWMyXFx1MDVjNC1cXHUwNWM1XFx1MDVjN1xcdTA2MTAtXFx1MDYxYScgKyAnXFx1MDY0Yi1cXHUwNjVmXFx1MDY3MFxcdTA2ZDYtXFx1MDZkY1xcdTA2ZGYtXFx1MDZlNFxcdTA2ZTctXFx1MDZlOFxcdTA2ZWEtXFx1MDZlZFxcdTA3MTFcXHUwNzMwLVxcdTA3NGFcXHUwN2E2LVxcdTA3YjAnICsgJ1xcdTA3ZWItXFx1MDdmM1xcdTA4MTYtXFx1MDgxOVxcdTA4MWItXFx1MDgyM1xcdTA4MjUtXFx1MDgyN1xcdTA4MjktXFx1MDgyZFxcdTA4NTktXFx1MDg1YlxcdTA4ZTMtXFx1MDkwMlxcdTA5M2FcXHUwOTNjJyArICdcXHUwOTQxLVxcdTA5NDhcXHUwOTRkXFx1MDk1MS1cXHUwOTU3XFx1MDk2Mi1cXHUwOTYzXFx1MDk4MVxcdTA5YmNcXHUwOWJlXFx1MDljMS1cXHUwOWM0XFx1MDljZFxcdTA5ZDdcXHUwOWUyLVxcdTA5ZTMnICsgJ1xcdTBhMDEtXFx1MGEwMlxcdTBhM2NcXHUwYTQxLVxcdTBhNDJcXHUwYTQ3LVxcdTBhNDhcXHUwYTRiLVxcdTBhNGRcXHUwYTUxXFx1MGE3MC1cXHUwYTcxXFx1MGE3NVxcdTBhODEtXFx1MGE4MlxcdTBhYmMnICsgJ1xcdTBhYzEtXFx1MGFjNVxcdTBhYzctXFx1MGFjOFxcdTBhY2RcXHUwYWUyLVxcdTBhZTNcXHUwYjAxXFx1MGIzY1xcdTBiM2VcXHUwYjNmXFx1MGI0MS1cXHUwYjQ0XFx1MGI0ZFxcdTBiNTZcXHUwYjU3JyArICdcXHUwYjYyLVxcdTBiNjNcXHUwYjgyXFx1MGJiZVxcdTBiYzBcXHUwYmNkXFx1MGJkN1xcdTBjMDBcXHUwYzNlLVxcdTBjNDBcXHUwYzQ2LVxcdTBjNDhcXHUwYzRhLVxcdTBjNGRcXHUwYzU1LVxcdTBjNTYnICsgJ1xcdTBjNjItXFx1MGM2M1xcdTBjODFcXHUwY2JjXFx1MGNiZlxcdTBjYzJcXHUwY2M2XFx1MGNjYy1cXHUwY2NkXFx1MGNkNS1cXHUwY2Q2XFx1MGNlMi1cXHUwY2UzXFx1MGQwMVxcdTBkM2VcXHUwZDQxLVxcdTBkNDQnICsgJ1xcdTBkNGRcXHUwZDU3XFx1MGQ2Mi1cXHUwZDYzXFx1MGRjYVxcdTBkY2ZcXHUwZGQyLVxcdTBkZDRcXHUwZGQ2XFx1MGRkZlxcdTBlMzFcXHUwZTM0LVxcdTBlM2FcXHUwZTQ3LVxcdTBlNGVcXHUwZWIxXFx1MGViNC1cXHUwZWI5JyArICdcXHUwZWJiLVxcdTBlYmNcXHUwZWM4LVxcdTBlY2RcXHUwZjE4LVxcdTBmMTlcXHUwZjM1XFx1MGYzN1xcdTBmMzlcXHUwZjcxLVxcdTBmN2VcXHUwZjgwLVxcdTBmODRcXHUwZjg2LVxcdTBmODdcXHUwZjhkLVxcdTBmOTcnICsgJ1xcdTBmOTktXFx1MGZiY1xcdTBmYzZcXHUxMDJkLVxcdTEwMzBcXHUxMDMyLVxcdTEwMzdcXHUxMDM5LVxcdTEwM2FcXHUxMDNkLVxcdTEwM2VcXHUxMDU4LVxcdTEwNTlcXHUxMDVlLVxcdTEwNjBcXHUxMDcxLVxcdTEwNzQnICsgJ1xcdTEwODJcXHUxMDg1LVxcdTEwODZcXHUxMDhkXFx1MTA5ZFxcdTEzNWQtXFx1MTM1ZlxcdTE3MTItXFx1MTcxNFxcdTE3MzItXFx1MTczNFxcdTE3NTItXFx1MTc1M1xcdTE3NzItXFx1MTc3M1xcdTE3YjQtXFx1MTdiNScgKyAnXFx1MTdiNy1cXHUxN2JkXFx1MTdjNlxcdTE3YzktXFx1MTdkM1xcdTE3ZGRcXHUxODBiLVxcdTE4MGRcXHUxOGE5XFx1MTkyMC1cXHUxOTIyXFx1MTkyNy1cXHUxOTI4XFx1MTkzMlxcdTE5MzktXFx1MTkzYlxcdTFhMTctXFx1MWExOCcgKyAnXFx1MWExYlxcdTFhNTZcXHUxYTU4LVxcdTFhNWVcXHUxYTYwXFx1MWE2MlxcdTFhNjUtXFx1MWE2Y1xcdTFhNzMtXFx1MWE3Y1xcdTFhN2ZcXHUxYWIwLVxcdTFhYmRcXHUxQUJFXFx1MWIwMC1cXHUxYjAzXFx1MWIzNCcgKyAnXFx1MWIzNi1cXHUxYjNhXFx1MWIzY1xcdTFiNDJcXHUxYjZiLVxcdTFiNzNcXHUxYjgwLVxcdTFiODFcXHUxYmEyLVxcdTFiYTVcXHUxYmE4LVxcdTFiYTlcXHUxYmFiLVxcdTFiYWRcXHUxYmU2XFx1MWJlOC1cXHUxYmU5JyArICdcXHUxYmVkXFx1MWJlZi1cXHUxYmYxXFx1MWMyYy1cXHUxYzMzXFx1MWMzNi1cXHUxYzM3XFx1MWNkMC1cXHUxY2QyXFx1MWNkNC1cXHUxY2UwXFx1MWNlMi1cXHUxY2U4XFx1MWNlZFxcdTFjZjRcXHUxY2Y4LVxcdTFjZjknICsgJ1xcdTFkYzAtXFx1MWRmNVxcdTFkZmMtXFx1MWRmZlxcdTIwMGMtXFx1MjAwZFxcdTIwZDAtXFx1MjBkY1xcdTIwREQtXFx1MjBFMFxcdTIwZTFcXHUyMEUyLVxcdTIwRTRcXHUyMGU1LVxcdTIwZjBcXHUyY2VmLVxcdTJjZjEnICsgJ1xcdTJkN2ZcXHUyZGUwLVxcdTJkZmZcXHUzMDJhLVxcdTMwMmRcXHUzMDJlLVxcdTMwMmZcXHUzMDk5LVxcdTMwOWFcXHVhNjZmXFx1QTY3MC1cXHVBNjcyXFx1YTY3NC1cXHVhNjdkXFx1YTY5ZS1cXHVhNjlmXFx1YTZmMC1cXHVhNmYxJyArICdcXHVhODAyXFx1YTgwNlxcdWE4MGJcXHVhODI1LVxcdWE4MjZcXHVhOGM0XFx1YThlMC1cXHVhOGYxXFx1YTkyNi1cXHVhOTJkXFx1YTk0Ny1cXHVhOTUxXFx1YTk4MC1cXHVhOTgyXFx1YTliM1xcdWE5YjYtXFx1YTliOVxcdWE5YmMnICsgJ1xcdWE5ZTVcXHVhYTI5LVxcdWFhMmVcXHVhYTMxLVxcdWFhMzJcXHVhYTM1LVxcdWFhMzZcXHVhYTQzXFx1YWE0Y1xcdWFhN2NcXHVhYWIwXFx1YWFiMi1cXHVhYWI0XFx1YWFiNy1cXHVhYWI4XFx1YWFiZS1cXHVhYWJmXFx1YWFjMScgKyAnXFx1YWFlYy1cXHVhYWVkXFx1YWFmNlxcdWFiZTVcXHVhYmU4XFx1YWJlZFxcdWZiMWVcXHVmZTAwLVxcdWZlMGZcXHVmZTIwLVxcdWZlMmZcXHVmZjllLVxcdWZmOWZdJyk7XG4gICAgY29uc3QgaXNFeHRlbmRpbmdDaGFyID0gY2ggPT4gaXNTdHJpbmcoY2gpICYmIGNoLmNoYXJDb2RlQXQoMCkgPj0gNzY4ICYmIGV4dGVuZGluZ0NoYXJzLnRlc3QoY2gpO1xuXG4gICAgY29uc3Qgb3IgPSAoLi4uYXJncykgPT4ge1xuICAgICAgcmV0dXJuIHggPT4ge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJnc1tpXSh4KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBhbmQgPSAoLi4uYXJncykgPT4ge1xuICAgICAgcmV0dXJuIHggPT4ge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoIWFyZ3NbaV0oeCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBpc0VsZW1lbnQkNCA9IGlzRWxlbWVudCQ2O1xuICAgIGNvbnN0IGlzQ2FyZXRDYW5kaWRhdGUkMiA9IGlzQ2FyZXRDYW5kaWRhdGUkMztcbiAgICBjb25zdCBpc0Jsb2NrJDEgPSBtYXRjaFN0eWxlVmFsdWVzKCdkaXNwbGF5JywgJ2Jsb2NrIHRhYmxlJyk7XG4gICAgY29uc3QgaXNGbG9hdGVkID0gbWF0Y2hTdHlsZVZhbHVlcygnZmxvYXQnLCAnbGVmdCByaWdodCcpO1xuICAgIGNvbnN0IGlzVmFsaWRFbGVtZW50Q2FyZXRDYW5kaWRhdGUgPSBhbmQoaXNFbGVtZW50JDQsIGlzQ2FyZXRDYW5kaWRhdGUkMiwgbm90KGlzRmxvYXRlZCkpO1xuICAgIGNvbnN0IGlzTm90UHJlID0gbm90KG1hdGNoU3R5bGVWYWx1ZXMoJ3doaXRlLXNwYWNlJywgJ3ByZSBwcmUtbGluZSBwcmUtd3JhcCcpKTtcbiAgICBjb25zdCBpc1RleHQkNyA9IGlzVGV4dCRhO1xuICAgIGNvbnN0IGlzQnIkMyA9IGlzQnIkNjtcbiAgICBjb25zdCBub2RlSW5kZXgkMSA9IERPTVV0aWxzLm5vZGVJbmRleDtcbiAgICBjb25zdCByZXNvbHZlSW5kZXgkMSA9IGdldE5vZGVVbnNhZmU7XG4gICAgY29uc3QgY3JlYXRlUmFuZ2UkMSA9IGRvYyA9PiBkb2MgPyBkb2MuY3JlYXRlUmFuZ2UoKSA6IERPTVV0aWxzLkRPTS5jcmVhdGVSbmcoKTtcbiAgICBjb25zdCBpc1doaXRlU3BhY2UkMSA9IGNociA9PiBpc1N0cmluZyhjaHIpICYmIC9bXFxyXFxuXFx0IF0vLnRlc3QoY2hyKTtcbiAgICBjb25zdCBpc1JhbmdlID0gcm5nID0+ICEhcm5nLnNldFN0YXJ0ICYmICEhcm5nLnNldEVuZDtcbiAgICBjb25zdCBpc0hpZGRlbldoaXRlU3BhY2VSYW5nZSA9IHJhbmdlID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7XG4gICAgICBpZiAoaXNXaGl0ZVNwYWNlJDEocmFuZ2UudG9TdHJpbmcoKSkgJiYgaXNOb3RQcmUoY29udGFpbmVyLnBhcmVudE5vZGUpICYmIGlzVGV4dCRhKGNvbnRhaW5lcikpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGNvbnRhaW5lci5kYXRhO1xuICAgICAgICBpZiAoaXNXaGl0ZVNwYWNlJDEodGV4dFtvZmZzZXQgLSAxXSkgfHwgaXNXaGl0ZVNwYWNlJDEodGV4dFtvZmZzZXQgKyAxXSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgY29uc3QgZ2V0QnJDbGllbnRSZWN0ID0gYnJOb2RlID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IGJyTm9kZS5vd25lckRvY3VtZW50O1xuICAgICAgY29uc3Qgcm5nID0gY3JlYXRlUmFuZ2UkMShkb2MpO1xuICAgICAgY29uc3QgbmJzcCQxID0gZG9jLmNyZWF0ZVRleHROb2RlKG5ic3ApO1xuICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IGJyTm9kZS5wYXJlbnROb2RlO1xuICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmJzcCQxLCBick5vZGUpO1xuICAgICAgcm5nLnNldFN0YXJ0KG5ic3AkMSwgMCk7XG4gICAgICBybmcuc2V0RW5kKG5ic3AkMSwgMSk7XG4gICAgICBjb25zdCBjbGllbnRSZWN0ID0gY2xvbmUkMShybmcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgICAgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuYnNwJDEpO1xuICAgICAgcmV0dXJuIGNsaWVudFJlY3Q7XG4gICAgfTtcbiAgICBjb25zdCBnZXRCb3VuZGluZ0NsaWVudFJlY3RXZWJLaXRUZXh0ID0gcm5nID0+IHtcbiAgICAgIGNvbnN0IHNjID0gcm5nLnN0YXJ0Q29udGFpbmVyO1xuICAgICAgY29uc3QgZWMgPSBybmcuZW5kQ29udGFpbmVyO1xuICAgICAgY29uc3Qgc28gPSBybmcuc3RhcnRPZmZzZXQ7XG4gICAgICBjb25zdCBlbyA9IHJuZy5lbmRPZmZzZXQ7XG4gICAgICBpZiAoc2MgPT09IGVjICYmIGlzVGV4dCRhKGVjKSAmJiBzbyA9PT0gMCAmJiBlbyA9PT0gMSkge1xuICAgICAgICBjb25zdCBuZXdSbmcgPSBybmcuY2xvbmVSYW5nZSgpO1xuICAgICAgICBuZXdSbmcuc2V0RW5kQWZ0ZXIoZWMpO1xuICAgICAgICByZXR1cm4gZ2V0Qm91bmRpbmdDbGllbnRSZWN0JDEobmV3Um5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNaZXJvUmVjdCA9IHIgPT4gci5sZWZ0ID09PSAwICYmIHIucmlnaHQgPT09IDAgJiYgci50b3AgPT09IDAgJiYgci5ib3R0b20gPT09IDA7XG4gICAgY29uc3QgZ2V0Qm91bmRpbmdDbGllbnRSZWN0JDEgPSBpdGVtID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGxldCBjbGllbnRSZWN0O1xuICAgICAgY29uc3QgY2xpZW50UmVjdHMgPSBpdGVtLmdldENsaWVudFJlY3RzKCk7XG4gICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID4gMCkge1xuICAgICAgICBjbGllbnRSZWN0ID0gY2xvbmUkMShjbGllbnRSZWN0c1swXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGllbnRSZWN0ID0gY2xvbmUkMShpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNSYW5nZShpdGVtKSAmJiBpc0JyJDMoaXRlbSkgJiYgaXNaZXJvUmVjdChjbGllbnRSZWN0KSkge1xuICAgICAgICByZXR1cm4gZ2V0QnJDbGllbnRSZWN0KGl0ZW0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzWmVyb1JlY3QoY2xpZW50UmVjdCkgJiYgaXNSYW5nZShpdGVtKSkge1xuICAgICAgICByZXR1cm4gKF9hID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0V2ViS2l0VGV4dChpdGVtKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY2xpZW50UmVjdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGllbnRSZWN0O1xuICAgIH07XG4gICAgY29uc3QgY29sbGFwc2VBbmRJbmZsYXRlV2lkdGggPSAoY2xpZW50UmVjdCwgdG9TdGFydCkgPT4ge1xuICAgICAgY29uc3QgbmV3Q2xpZW50UmVjdCA9IGNvbGxhcHNlKGNsaWVudFJlY3QsIHRvU3RhcnQpO1xuICAgICAgbmV3Q2xpZW50UmVjdC53aWR0aCA9IDE7XG4gICAgICBuZXdDbGllbnRSZWN0LnJpZ2h0ID0gbmV3Q2xpZW50UmVjdC5sZWZ0ICsgMTtcbiAgICAgIHJldHVybiBuZXdDbGllbnRSZWN0O1xuICAgIH07XG4gICAgY29uc3QgZ2V0Q2FyZXRQb3NpdGlvbkNsaWVudFJlY3RzID0gY2FyZXRQb3NpdGlvbiA9PiB7XG4gICAgICBjb25zdCBjbGllbnRSZWN0cyA9IFtdO1xuICAgICAgY29uc3QgYWRkVW5pcXVlQW5kVmFsaWRSZWN0ID0gY2xpZW50UmVjdCA9PiB7XG4gICAgICAgIGlmIChjbGllbnRSZWN0LmhlaWdodCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmIChpc0VxdWFsKGNsaWVudFJlY3QsIGNsaWVudFJlY3RzW2NsaWVudFJlY3RzLmxlbmd0aCAtIDFdKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjbGllbnRSZWN0cy5wdXNoKGNsaWVudFJlY3QpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkZENoYXJhY3Rlck9mZnNldCA9IChjb250YWluZXIsIG9mZnNldCkgPT4ge1xuICAgICAgICBjb25zdCByYW5nZSA9IGNyZWF0ZVJhbmdlJDEoY29udGFpbmVyLm93bmVyRG9jdW1lbnQpO1xuICAgICAgICBpZiAob2Zmc2V0IDwgY29udGFpbmVyLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKGlzRXh0ZW5kaW5nQ2hhcihjb250YWluZXIuZGF0YVtvZmZzZXRdKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNFeHRlbmRpbmdDaGFyKGNvbnRhaW5lci5kYXRhW29mZnNldCAtIDFdKSkge1xuICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoY29udGFpbmVyLCBvZmZzZXQpO1xuICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kKGNvbnRhaW5lciwgb2Zmc2V0ICsgMSk7XG4gICAgICAgICAgICBpZiAoIWlzSGlkZGVuV2hpdGVTcGFjZVJhbmdlKHJhbmdlKSkge1xuICAgICAgICAgICAgICBhZGRVbmlxdWVBbmRWYWxpZFJlY3QoY29sbGFwc2VBbmRJbmZsYXRlV2lkdGgoZ2V0Qm91bmRpbmdDbGllbnRSZWN0JDEocmFuZ2UpLCBmYWxzZSkpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvZmZzZXQgPiAwKSB7XG4gICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoY29udGFpbmVyLCBvZmZzZXQgLSAxKTtcbiAgICAgICAgICByYW5nZS5zZXRFbmQoY29udGFpbmVyLCBvZmZzZXQpO1xuICAgICAgICAgIGlmICghaXNIaWRkZW5XaGl0ZVNwYWNlUmFuZ2UocmFuZ2UpKSB7XG4gICAgICAgICAgICBhZGRVbmlxdWVBbmRWYWxpZFJlY3QoY29sbGFwc2VBbmRJbmZsYXRlV2lkdGgoZ2V0Qm91bmRpbmdDbGllbnRSZWN0JDEocmFuZ2UpLCBmYWxzZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob2Zmc2V0IDwgY29udGFpbmVyLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoY29udGFpbmVyLCBvZmZzZXQpO1xuICAgICAgICAgIHJhbmdlLnNldEVuZChjb250YWluZXIsIG9mZnNldCArIDEpO1xuICAgICAgICAgIGlmICghaXNIaWRkZW5XaGl0ZVNwYWNlUmFuZ2UocmFuZ2UpKSB7XG4gICAgICAgICAgICBhZGRVbmlxdWVBbmRWYWxpZFJlY3QoY29sbGFwc2VBbmRJbmZsYXRlV2lkdGgoZ2V0Qm91bmRpbmdDbGllbnRSZWN0JDEocmFuZ2UpLCB0cnVlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgY29udGFpbmVyID0gY2FyZXRQb3NpdGlvbi5jb250YWluZXIoKTtcbiAgICAgIGNvbnN0IG9mZnNldCA9IGNhcmV0UG9zaXRpb24ub2Zmc2V0KCk7XG4gICAgICBpZiAoaXNUZXh0JDcoY29udGFpbmVyKSkge1xuICAgICAgICBhZGRDaGFyYWN0ZXJPZmZzZXQoY29udGFpbmVyLCBvZmZzZXQpO1xuICAgICAgICByZXR1cm4gY2xpZW50UmVjdHM7XG4gICAgICB9XG4gICAgICBpZiAoaXNFbGVtZW50JDQoY29udGFpbmVyKSkge1xuICAgICAgICBpZiAoY2FyZXRQb3NpdGlvbi5pc0F0RW5kKCkpIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gcmVzb2x2ZUluZGV4JDEoY29udGFpbmVyLCBvZmZzZXQpO1xuICAgICAgICAgIGlmIChpc1RleHQkNyhub2RlKSkge1xuICAgICAgICAgICAgYWRkQ2hhcmFjdGVyT2Zmc2V0KG5vZGUsIG5vZGUuZGF0YS5sZW5ndGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnRDYXJldENhbmRpZGF0ZShub2RlKSAmJiAhaXNCciQzKG5vZGUpKSB7XG4gICAgICAgICAgICBhZGRVbmlxdWVBbmRWYWxpZFJlY3QoY29sbGFwc2VBbmRJbmZsYXRlV2lkdGgoZ2V0Qm91bmRpbmdDbGllbnRSZWN0JDEobm9kZSksIGZhbHNlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSByZXNvbHZlSW5kZXgkMShjb250YWluZXIsIG9mZnNldCk7XG4gICAgICAgICAgaWYgKGlzVGV4dCQ3KG5vZGUpKSB7XG4gICAgICAgICAgICBhZGRDaGFyYWN0ZXJPZmZzZXQobm9kZSwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc1ZhbGlkRWxlbWVudENhcmV0Q2FuZGlkYXRlKG5vZGUpICYmIGNhcmV0UG9zaXRpb24uaXNBdEVuZCgpKSB7XG4gICAgICAgICAgICBhZGRVbmlxdWVBbmRWYWxpZFJlY3QoY29sbGFwc2VBbmRJbmZsYXRlV2lkdGgoZ2V0Qm91bmRpbmdDbGllbnRSZWN0JDEobm9kZSksIGZhbHNlKSk7XG4gICAgICAgICAgICByZXR1cm4gY2xpZW50UmVjdHM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGJlZm9yZU5vZGUgPSByZXNvbHZlSW5kZXgkMShjYXJldFBvc2l0aW9uLmNvbnRhaW5lcigpLCBjYXJldFBvc2l0aW9uLm9mZnNldCgpIC0gMSk7XG4gICAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50Q2FyZXRDYW5kaWRhdGUoYmVmb3JlTm9kZSkgJiYgIWlzQnIkMyhiZWZvcmVOb2RlKSkge1xuICAgICAgICAgICAgaWYgKGlzQmxvY2skMShiZWZvcmVOb2RlKSB8fCBpc0Jsb2NrJDEobm9kZSkgfHwgIWlzVmFsaWRFbGVtZW50Q2FyZXRDYW5kaWRhdGUobm9kZSkpIHtcbiAgICAgICAgICAgICAgYWRkVW5pcXVlQW5kVmFsaWRSZWN0KGNvbGxhcHNlQW5kSW5mbGF0ZVdpZHRoKGdldEJvdW5kaW5nQ2xpZW50UmVjdCQxKGJlZm9yZU5vZGUpLCBmYWxzZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnRDYXJldENhbmRpZGF0ZShub2RlKSkge1xuICAgICAgICAgICAgYWRkVW5pcXVlQW5kVmFsaWRSZWN0KGNvbGxhcHNlQW5kSW5mbGF0ZVdpZHRoKGdldEJvdW5kaW5nQ2xpZW50UmVjdCQxKG5vZGUpLCB0cnVlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xpZW50UmVjdHM7XG4gICAgfTtcbiAgICBjb25zdCBDYXJldFBvc2l0aW9uID0gKGNvbnRhaW5lciwgb2Zmc2V0LCBjbGllbnRSZWN0cykgPT4ge1xuICAgICAgY29uc3QgaXNBdFN0YXJ0ID0gKCkgPT4ge1xuICAgICAgICBpZiAoaXNUZXh0JDcoY29udGFpbmVyKSkge1xuICAgICAgICAgIHJldHVybiBvZmZzZXQgPT09IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9mZnNldCA9PT0gMDtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0F0RW5kID0gKCkgPT4ge1xuICAgICAgICBpZiAoaXNUZXh0JDcoY29udGFpbmVyKSkge1xuICAgICAgICAgIHJldHVybiBvZmZzZXQgPj0gY29udGFpbmVyLmRhdGEubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvZmZzZXQgPj0gY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHRvUmFuZ2UgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gY3JlYXRlUmFuZ2UkMShjb250YWluZXIub3duZXJEb2N1bWVudCk7XG4gICAgICAgIHJhbmdlLnNldFN0YXJ0KGNvbnRhaW5lciwgb2Zmc2V0KTtcbiAgICAgICAgcmFuZ2Uuc2V0RW5kKGNvbnRhaW5lciwgb2Zmc2V0KTtcbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldENsaWVudFJlY3RzID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWNsaWVudFJlY3RzKSB7XG4gICAgICAgICAgY2xpZW50UmVjdHMgPSBnZXRDYXJldFBvc2l0aW9uQ2xpZW50UmVjdHMoQ2FyZXRQb3NpdGlvbihjb250YWluZXIsIG9mZnNldCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbGllbnRSZWN0cztcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1Zpc2libGUgPSAoKSA9PiBnZXRDbGllbnRSZWN0cygpLmxlbmd0aCA+IDA7XG4gICAgICBjb25zdCBpc0VxdWFsID0gY2FyZXRQb3NpdGlvbiA9PiBjYXJldFBvc2l0aW9uICYmIGNvbnRhaW5lciA9PT0gY2FyZXRQb3NpdGlvbi5jb250YWluZXIoKSAmJiBvZmZzZXQgPT09IGNhcmV0UG9zaXRpb24ub2Zmc2V0KCk7XG4gICAgICBjb25zdCBnZXROb2RlID0gYmVmb3JlID0+IHJlc29sdmVJbmRleCQxKGNvbnRhaW5lciwgYmVmb3JlID8gb2Zmc2V0IC0gMSA6IG9mZnNldCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250YWluZXI6IGNvbnN0YW50KGNvbnRhaW5lciksXG4gICAgICAgIG9mZnNldDogY29uc3RhbnQob2Zmc2V0KSxcbiAgICAgICAgdG9SYW5nZSxcbiAgICAgICAgZ2V0Q2xpZW50UmVjdHMsXG4gICAgICAgIGlzVmlzaWJsZSxcbiAgICAgICAgaXNBdFN0YXJ0LFxuICAgICAgICBpc0F0RW5kLFxuICAgICAgICBpc0VxdWFsLFxuICAgICAgICBnZXROb2RlXG4gICAgICB9O1xuICAgIH07XG4gICAgQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydCA9IHJhbmdlID0+IENhcmV0UG9zaXRpb24ocmFuZ2Uuc3RhcnRDb250YWluZXIsIHJhbmdlLnN0YXJ0T2Zmc2V0KTtcbiAgICBDYXJldFBvc2l0aW9uLmZyb21SYW5nZUVuZCA9IHJhbmdlID0+IENhcmV0UG9zaXRpb24ocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQpO1xuICAgIENhcmV0UG9zaXRpb24uYWZ0ZXIgPSBub2RlID0+IENhcmV0UG9zaXRpb24obm9kZS5wYXJlbnROb2RlLCBub2RlSW5kZXgkMShub2RlKSArIDEpO1xuICAgIENhcmV0UG9zaXRpb24uYmVmb3JlID0gbm9kZSA9PiBDYXJldFBvc2l0aW9uKG5vZGUucGFyZW50Tm9kZSwgbm9kZUluZGV4JDEobm9kZSkpO1xuICAgIENhcmV0UG9zaXRpb24uaXNBYm92ZSA9IChwb3MxLCBwb3MyKSA9PiBsaWZ0MihoZWFkKHBvczIuZ2V0Q2xpZW50UmVjdHMoKSksIGxhc3QkMyhwb3MxLmdldENsaWVudFJlY3RzKCkpLCBpc0Fib3ZlJDEpLmdldE9yKGZhbHNlKTtcbiAgICBDYXJldFBvc2l0aW9uLmlzQmVsb3cgPSAocG9zMSwgcG9zMikgPT4gbGlmdDIobGFzdCQzKHBvczIuZ2V0Q2xpZW50UmVjdHMoKSksIGhlYWQocG9zMS5nZXRDbGllbnRSZWN0cygpKSwgaXNCZWxvdyQxKS5nZXRPcihmYWxzZSk7XG4gICAgQ2FyZXRQb3NpdGlvbi5pc0F0U3RhcnQgPSBwb3MgPT4gcG9zID8gcG9zLmlzQXRTdGFydCgpIDogZmFsc2U7XG4gICAgQ2FyZXRQb3NpdGlvbi5pc0F0RW5kID0gcG9zID0+IHBvcyA/IHBvcy5pc0F0RW5kKCkgOiBmYWxzZTtcbiAgICBDYXJldFBvc2l0aW9uLmlzVGV4dFBvc2l0aW9uID0gcG9zID0+IHBvcyA/IGlzVGV4dCRhKHBvcy5jb250YWluZXIoKSkgOiBmYWxzZTtcbiAgICBDYXJldFBvc2l0aW9uLmlzRWxlbWVudFBvc2l0aW9uID0gcG9zID0+ICFDYXJldFBvc2l0aW9uLmlzVGV4dFBvc2l0aW9uKHBvcyk7XG5cbiAgICBjb25zdCB0cmltRW1wdHlUZXh0Tm9kZSQxID0gKGRvbSwgbm9kZSkgPT4ge1xuICAgICAgaWYgKGlzVGV4dCRhKG5vZGUpICYmIG5vZGUuZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZG9tLnJlbW92ZShub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGluc2VydE5vZGUgPSAoZG9tLCBybmcsIG5vZGUpID0+IHtcbiAgICAgIHJuZy5pbnNlcnROb2RlKG5vZGUpO1xuICAgICAgdHJpbUVtcHR5VGV4dE5vZGUkMShkb20sIG5vZGUucHJldmlvdXNTaWJsaW5nKTtcbiAgICAgIHRyaW1FbXB0eVRleHROb2RlJDEoZG9tLCBub2RlLm5leHRTaWJsaW5nKTtcbiAgICB9O1xuICAgIGNvbnN0IGluc2VydEZyYWdtZW50ID0gKGRvbSwgcm5nLCBmcmFnKSA9PiB7XG4gICAgICBjb25zdCBmaXJzdENoaWxkID0gT3B0aW9uYWwuZnJvbShmcmFnLmZpcnN0Q2hpbGQpO1xuICAgICAgY29uc3QgbGFzdENoaWxkID0gT3B0aW9uYWwuZnJvbShmcmFnLmxhc3RDaGlsZCk7XG4gICAgICBybmcuaW5zZXJ0Tm9kZShmcmFnKTtcbiAgICAgIGZpcnN0Q2hpbGQuZWFjaChjaGlsZCA9PiB0cmltRW1wdHlUZXh0Tm9kZSQxKGRvbSwgY2hpbGQucHJldmlvdXNTaWJsaW5nKSk7XG4gICAgICBsYXN0Q2hpbGQuZWFjaChjaGlsZCA9PiB0cmltRW1wdHlUZXh0Tm9kZSQxKGRvbSwgY2hpbGQubmV4dFNpYmxpbmcpKTtcbiAgICB9O1xuICAgIGNvbnN0IHJhbmdlSW5zZXJ0Tm9kZSA9IChkb20sIHJuZywgbm9kZSkgPT4ge1xuICAgICAgaWYgKGlzRG9jdW1lbnRGcmFnbWVudChub2RlKSkge1xuICAgICAgICBpbnNlcnRGcmFnbWVudChkb20sIHJuZywgbm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnNlcnROb2RlKGRvbSwgcm5nLCBub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaXNUZXh0JDYgPSBpc1RleHQkYTtcbiAgICBjb25zdCBpc0JvZ3VzID0gaXNCb2d1cyQyO1xuICAgIGNvbnN0IG5vZGVJbmRleCA9IERPTVV0aWxzLm5vZGVJbmRleDtcbiAgICBjb25zdCBub3JtYWxpemVkUGFyZW50ID0gbm9kZSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgaWYgKGlzQm9ndXMocGFyZW50Tm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRQYXJlbnQocGFyZW50Tm9kZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyZW50Tm9kZTtcbiAgICB9O1xuICAgIGNvbnN0IGdldENoaWxkTm9kZXMgPSBub2RlID0+IHtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVkdWNlKG5vZGUuY2hpbGROb2RlcywgKHJlc3VsdCwgbm9kZSkgPT4ge1xuICAgICAgICBpZiAoaXNCb2d1cyhub2RlKSAmJiBub2RlLm5vZGVOYW1lICE9PSAnQlInKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChnZXRDaGlsZE5vZGVzKG5vZGUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQucHVzaChub2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSwgW10pO1xuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplZFRleHRPZmZzZXQgPSAobm9kZSwgb2Zmc2V0KSA9PiB7XG4gICAgICBsZXQgdGVtcE5vZGUgPSBub2RlO1xuICAgICAgd2hpbGUgKHRlbXBOb2RlID0gdGVtcE5vZGUucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICAgIGlmICghaXNUZXh0JDYodGVtcE5vZGUpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgb2Zmc2V0ICs9IHRlbXBOb2RlLmRhdGEubGVuZ3RoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9O1xuICAgIGNvbnN0IGVxdWFsID0gYSA9PiBiID0+IGEgPT09IGI7XG4gICAgY29uc3Qgbm9ybWFsaXplZE5vZGVJbmRleCA9IG5vZGUgPT4ge1xuICAgICAgbGV0IG5vZGVzLCBpbmRleDtcbiAgICAgIG5vZGVzID0gZ2V0Q2hpbGROb2Rlcyhub3JtYWxpemVkUGFyZW50KG5vZGUpKTtcbiAgICAgIGluZGV4ID0gZmluZEluZGV4JDEobm9kZXMsIGVxdWFsKG5vZGUpLCBub2RlKTtcbiAgICAgIG5vZGVzID0gbm9kZXMuc2xpY2UoMCwgaW5kZXggKyAxKTtcbiAgICAgIGNvbnN0IG51bVRleHRGcmFnbWVudHMgPSByZWR1Y2Uobm9kZXMsIChyZXN1bHQsIG5vZGUsIGkpID0+IHtcbiAgICAgICAgaWYgKGlzVGV4dCQ2KG5vZGUpICYmIGlzVGV4dCQ2KG5vZGVzW2kgLSAxXSkpIHtcbiAgICAgICAgICByZXN1bHQrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSwgMCk7XG4gICAgICBub2RlcyA9IGZpbHRlciQzKG5vZGVzLCBtYXRjaE5vZGVOYW1lcyhbbm9kZS5ub2RlTmFtZV0pKTtcbiAgICAgIGluZGV4ID0gZmluZEluZGV4JDEobm9kZXMsIGVxdWFsKG5vZGUpLCBub2RlKTtcbiAgICAgIHJldHVybiBpbmRleCAtIG51bVRleHRGcmFnbWVudHM7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVQYXRoSXRlbSA9IG5vZGUgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IGlzVGV4dCQ2KG5vZGUpID8gJ3RleHQoKScgOiBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gbmFtZSArICdbJyArIG5vcm1hbGl6ZWROb2RlSW5kZXgobm9kZSkgKyAnXSc7XG4gICAgfTtcbiAgICBjb25zdCBwYXJlbnRzVW50aWwkMSA9IChyb290LCBub2RlLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcbiAgICAgIGZvciAobGV0IHRlbXBOb2RlID0gbm9kZS5wYXJlbnROb2RlOyB0ZW1wTm9kZSAmJiB0ZW1wTm9kZSAhPT0gcm9vdDsgdGVtcE5vZGUgPSB0ZW1wTm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUgJiYgcHJlZGljYXRlKHRlbXBOb2RlKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudHMucHVzaCh0ZW1wTm9kZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyZW50cztcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZSRiID0gKHJvb3QsIGNhcmV0UG9zaXRpb24pID0+IHtcbiAgICAgIGxldCBwYXRoID0gW107XG4gICAgICBsZXQgY29udGFpbmVyID0gY2FyZXRQb3NpdGlvbi5jb250YWluZXIoKTtcbiAgICAgIGxldCBvZmZzZXQgPSBjYXJldFBvc2l0aW9uLm9mZnNldCgpO1xuICAgICAgbGV0IG91dHB1dE9mZnNldDtcbiAgICAgIGlmIChpc1RleHQkNihjb250YWluZXIpKSB7XG4gICAgICAgIG91dHB1dE9mZnNldCA9IG5vcm1hbGl6ZWRUZXh0T2Zmc2V0KGNvbnRhaW5lciwgb2Zmc2V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBjb250YWluZXIuY2hpbGROb2RlcztcbiAgICAgICAgaWYgKG9mZnNldCA+PSBjaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgIG91dHB1dE9mZnNldCA9ICdhZnRlcic7XG4gICAgICAgICAgb2Zmc2V0ID0gY2hpbGROb2Rlcy5sZW5ndGggLSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dHB1dE9mZnNldCA9ICdiZWZvcmUnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRhaW5lciA9IGNoaWxkTm9kZXNbb2Zmc2V0XTtcbiAgICAgIH1cbiAgICAgIHBhdGgucHVzaChjcmVhdGVQYXRoSXRlbShjb250YWluZXIpKTtcbiAgICAgIGxldCBwYXJlbnRzID0gcGFyZW50c1VudGlsJDEocm9vdCwgY29udGFpbmVyKTtcbiAgICAgIHBhcmVudHMgPSBmaWx0ZXIkMyhwYXJlbnRzLCBub3QoaXNCb2d1cyQyKSk7XG4gICAgICBwYXRoID0gcGF0aC5jb25jYXQobWFwJDEocGFyZW50cywgbm9kZSA9PiB7XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXRoSXRlbShub2RlKTtcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBwYXRoLnJldmVyc2UoKS5qb2luKCcvJykgKyAnLCcgKyBvdXRwdXRPZmZzZXQ7XG4gICAgfTtcbiAgICBjb25zdCByZXNvbHZlUGF0aEl0ZW0gPSAobm9kZSwgbmFtZSwgaW5kZXgpID0+IHtcbiAgICAgIGxldCBub2RlcyA9IGdldENoaWxkTm9kZXMobm9kZSk7XG4gICAgICBub2RlcyA9IGZpbHRlciQzKG5vZGVzLCAobm9kZSwgaW5kZXgpID0+IHtcbiAgICAgICAgcmV0dXJuICFpc1RleHQkNihub2RlKSB8fCAhaXNUZXh0JDYobm9kZXNbaW5kZXggLSAxXSk7XG4gICAgICB9KTtcbiAgICAgIG5vZGVzID0gZmlsdGVyJDMobm9kZXMsIG1hdGNoTm9kZU5hbWVzKFtuYW1lXSkpO1xuICAgICAgcmV0dXJuIG5vZGVzW2luZGV4XTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRUZXh0UG9zaXRpb24gPSAoY29udGFpbmVyLCBvZmZzZXQpID0+IHtcbiAgICAgIGxldCBub2RlID0gY29udGFpbmVyO1xuICAgICAgbGV0IHRhcmdldE9mZnNldCA9IDA7XG4gICAgICB3aGlsZSAoaXNUZXh0JDYobm9kZSkpIHtcbiAgICAgICAgY29uc3QgZGF0YUxlbiA9IG5vZGUuZGF0YS5sZW5ndGg7XG4gICAgICAgIGlmIChvZmZzZXQgPj0gdGFyZ2V0T2Zmc2V0ICYmIG9mZnNldCA8PSB0YXJnZXRPZmZzZXQgKyBkYXRhTGVuKSB7XG4gICAgICAgICAgY29udGFpbmVyID0gbm9kZTtcbiAgICAgICAgICBvZmZzZXQgPSBvZmZzZXQgLSB0YXJnZXRPZmZzZXQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1RleHQkNihub2RlLm5leHRTaWJsaW5nKSkge1xuICAgICAgICAgIGNvbnRhaW5lciA9IG5vZGU7XG4gICAgICAgICAgb2Zmc2V0ID0gZGF0YUxlbjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRPZmZzZXQgKz0gZGF0YUxlbjtcbiAgICAgICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgICB9XG4gICAgICBpZiAoaXNUZXh0JDYoY29udGFpbmVyKSAmJiBvZmZzZXQgPiBjb250YWluZXIuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgb2Zmc2V0ID0gY29udGFpbmVyLmRhdGEubGVuZ3RoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24oY29udGFpbmVyLCBvZmZzZXQpO1xuICAgIH07XG4gICAgY29uc3QgcmVzb2x2ZSQxID0gKHJvb3QsIHBhdGgpID0+IHtcbiAgICAgIGlmICghcGF0aCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdCgnLCcpO1xuICAgICAgY29uc3QgcGF0aHMgPSBwYXJ0c1swXS5zcGxpdCgnLycpO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gcGFydHMubGVuZ3RoID4gMSA/IHBhcnRzWzFdIDogJ2JlZm9yZSc7XG4gICAgICBjb25zdCBjb250YWluZXIgPSByZWR1Y2UocGF0aHMsIChyZXN1bHQsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gLyhbXFx3XFwtXFwoXFwpXSspXFxbKFswLTldKylcXF0vLmV4ZWModmFsdWUpO1xuICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoWzFdID09PSAndGV4dCgpJykge1xuICAgICAgICAgIG1hdGNoWzFdID0gJyN0ZXh0JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzb2x2ZVBhdGhJdGVtKHJlc3VsdCwgbWF0Y2hbMV0sIHBhcnNlSW50KG1hdGNoWzJdLCAxMCkpO1xuICAgICAgfSwgcm9vdCk7XG4gICAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICghaXNUZXh0JDYoY29udGFpbmVyKSAmJiBjb250YWluZXIucGFyZW50Tm9kZSkge1xuICAgICAgICBsZXQgbm9kZU9mZnNldDtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gJ2FmdGVyJykge1xuICAgICAgICAgIG5vZGVPZmZzZXQgPSBub2RlSW5kZXgoY29udGFpbmVyKSArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZU9mZnNldCA9IG5vZGVJbmRleChjb250YWluZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBDYXJldFBvc2l0aW9uKGNvbnRhaW5lci5wYXJlbnROb2RlLCBub2RlT2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmaW5kVGV4dFBvc2l0aW9uKGNvbnRhaW5lciwgcGFyc2VJbnQob2Zmc2V0LCAxMCkpO1xuICAgIH07XG5cbiAgICBjb25zdCBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJDkgPSBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJGI7XG4gICAgY29uc3QgZ2V0Tm9ybWFsaXplZFRleHRPZmZzZXQkMSA9ICh0cmltLCBjb250YWluZXIsIG9mZnNldCkgPT4ge1xuICAgICAgbGV0IHRyaW1tZWRPZmZzZXQgPSB0cmltKGNvbnRhaW5lci5kYXRhLnNsaWNlKDAsIG9mZnNldCkpLmxlbmd0aDtcbiAgICAgIGZvciAobGV0IG5vZGUgPSBjb250YWluZXIucHJldmlvdXNTaWJsaW5nOyBub2RlICYmIGlzVGV4dCRhKG5vZGUpOyBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgdHJpbW1lZE9mZnNldCArPSB0cmltKG5vZGUuZGF0YSkubGVuZ3RoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRyaW1tZWRPZmZzZXQ7XG4gICAgfTtcbiAgICBjb25zdCBnZXRQb2ludCA9IChkb20sIHRyaW0sIG5vcm1hbGl6ZWQsIHJuZywgc3RhcnQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHN0YXJ0ID8gcm5nLnN0YXJ0Q29udGFpbmVyIDogcm5nLmVuZENvbnRhaW5lcjtcbiAgICAgIGxldCBvZmZzZXQgPSBzdGFydCA/IHJuZy5zdGFydE9mZnNldCA6IHJuZy5lbmRPZmZzZXQ7XG4gICAgICBjb25zdCBwb2ludCA9IFtdO1xuICAgICAgY29uc3Qgcm9vdCA9IGRvbS5nZXRSb290KCk7XG4gICAgICBpZiAoaXNUZXh0JGEoY29udGFpbmVyKSkge1xuICAgICAgICBwb2ludC5wdXNoKG5vcm1hbGl6ZWQgPyBnZXROb3JtYWxpemVkVGV4dE9mZnNldCQxKHRyaW0sIGNvbnRhaW5lciwgb2Zmc2V0KSA6IG9mZnNldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgYWZ0ZXIgPSAwO1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVzID0gY29udGFpbmVyLmNoaWxkTm9kZXM7XG4gICAgICAgIGlmIChvZmZzZXQgPj0gY2hpbGROb2Rlcy5sZW5ndGggJiYgY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICBhZnRlciA9IDE7XG4gICAgICAgICAgb2Zmc2V0ID0gTWF0aC5tYXgoMCwgY2hpbGROb2Rlcy5sZW5ndGggLSAxKTtcbiAgICAgICAgfVxuICAgICAgICBwb2ludC5wdXNoKGRvbS5ub2RlSW5kZXgoY2hpbGROb2Rlc1tvZmZzZXRdLCBub3JtYWxpemVkKSArIGFmdGVyKTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IG5vZGUgPSBjb250YWluZXI7IG5vZGUgJiYgbm9kZSAhPT0gcm9vdDsgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICBwb2ludC5wdXNoKGRvbS5ub2RlSW5kZXgobm9kZSwgbm9ybWFsaXplZCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBvaW50O1xuICAgIH07XG4gICAgY29uc3QgZ2V0TG9jYXRpb24gPSAodHJpbSwgc2VsZWN0aW9uLCBub3JtYWxpemVkLCBybmcpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IHNlbGVjdGlvbi5kb207XG4gICAgICBjb25zdCBzdGFydCA9IGdldFBvaW50KGRvbSwgdHJpbSwgbm9ybWFsaXplZCwgcm5nLCB0cnVlKTtcbiAgICAgIGNvbnN0IGZvcndhcmQgPSBzZWxlY3Rpb24uaXNGb3J3YXJkKCk7XG4gICAgICBjb25zdCBmYWtlQ2FyZXQgPSBpc1JhbmdlSW5DYXJldENvbnRhaW5lckJsb2NrKHJuZykgPyB7IGlzRmFrZUNhcmV0OiB0cnVlIH0gOiB7fTtcbiAgICAgIGlmICghc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkpIHtcbiAgICAgICAgY29uc3QgZW5kID0gZ2V0UG9pbnQoZG9tLCB0cmltLCBub3JtYWxpemVkLCBybmcsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydCxcbiAgICAgICAgICBlbmQsXG4gICAgICAgICAgZm9yd2FyZCxcbiAgICAgICAgICAuLi5mYWtlQ2FyZXRcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgZm9yd2FyZCxcbiAgICAgICAgICAuLi5mYWtlQ2FyZXRcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRJbmRleCA9IChkb20sIG5hbWUsIGVsZW1lbnQpID0+IHtcbiAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICBUb29scy5lYWNoKGRvbS5zZWxlY3QobmFtZSksIG5vZGUgPT4ge1xuICAgICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWNlLWJvZ3VzJykgPT09ICdhbGwnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUgPT09IGVsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY291bnQrKztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNvdW50O1xuICAgIH07XG4gICAgY29uc3QgbW92ZUVuZFBvaW50JDEgPSAocm5nLCBzdGFydCkgPT4ge1xuICAgICAgbGV0IGNvbnRhaW5lciA9IHN0YXJ0ID8gcm5nLnN0YXJ0Q29udGFpbmVyIDogcm5nLmVuZENvbnRhaW5lcjtcbiAgICAgIGxldCBvZmZzZXQgPSBzdGFydCA/IHJuZy5zdGFydE9mZnNldCA6IHJuZy5lbmRPZmZzZXQ7XG4gICAgICBpZiAoaXNFbGVtZW50JDYoY29udGFpbmVyKSAmJiBjb250YWluZXIubm9kZU5hbWUgPT09ICdUUicpIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IGNvbnRhaW5lci5jaGlsZE5vZGVzO1xuICAgICAgICBjb250YWluZXIgPSBjaGlsZE5vZGVzW01hdGgubWluKHN0YXJ0ID8gb2Zmc2V0IDogb2Zmc2V0IC0gMSwgY2hpbGROb2Rlcy5sZW5ndGggLSAxKV07XG4gICAgICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgICAgICBvZmZzZXQgPSBzdGFydCA/IDAgOiBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGg7XG4gICAgICAgICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgICAgICBybmcuc2V0U3RhcnQoY29udGFpbmVyLCBvZmZzZXQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBybmcuc2V0RW5kKGNvbnRhaW5lciwgb2Zmc2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZVRhYmxlQ2VsbFNlbGVjdGlvbiA9IHJuZyA9PiB7XG4gICAgICBtb3ZlRW5kUG9pbnQkMShybmcsIHRydWUpO1xuICAgICAgbW92ZUVuZFBvaW50JDEocm5nLCBmYWxzZSk7XG4gICAgICByZXR1cm4gcm5nO1xuICAgIH07XG4gICAgY29uc3QgZmluZFNpYmxpbmcgPSAobm9kZSwgb2Zmc2V0KSA9PiB7XG4gICAgICBpZiAoaXNFbGVtZW50JDYobm9kZSkpIHtcbiAgICAgICAgbm9kZSA9IGdldE5vZGUkMShub2RlLCBvZmZzZXQpO1xuICAgICAgICBpZiAoaXNDb250ZW50RWRpdGFibGVGYWxzZSQ5KG5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpc0NhcmV0Q29udGFpbmVyJDIobm9kZSkpIHtcbiAgICAgICAgaWYgKGlzVGV4dCRhKG5vZGUpICYmIGlzQ2FyZXRDb250YWluZXJCbG9jayQxKG5vZGUpKSB7XG4gICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc2libGluZyA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICBpZiAoaXNDb250ZW50RWRpdGFibGVGYWxzZSQ5KHNpYmxpbmcpKSB7XG4gICAgICAgICAgcmV0dXJuIHNpYmxpbmc7XG4gICAgICAgIH1cbiAgICAgICAgc2libGluZyA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgIGlmIChpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJDkoc2libGluZykpIHtcbiAgICAgICAgICByZXR1cm4gc2libGluZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRBZGphY2VudENvbnRlbnRFZGl0YWJsZUZhbHNlRWxtID0gcm5nID0+IHtcbiAgICAgIHJldHVybiBmaW5kU2libGluZyhybmcuc3RhcnRDb250YWluZXIsIHJuZy5zdGFydE9mZnNldCkgfHwgZmluZFNpYmxpbmcocm5nLmVuZENvbnRhaW5lciwgcm5nLmVuZE9mZnNldCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRPZmZzZXRCb29rbWFyayA9ICh0cmltLCBub3JtYWxpemVkLCBzZWxlY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBzZWxlY3Rpb24uZ2V0Tm9kZSgpO1xuICAgICAgY29uc3Qgcm5nID0gc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdJTUcnIHx8IGlzQ29udGVudEVkaXRhYmxlRmFsc2UkOShlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBuYW1lID0gZWxlbWVudC5ub2RlTmFtZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGluZGV4OiBmaW5kSW5kZXgoc2VsZWN0aW9uLmRvbSwgbmFtZSwgZWxlbWVudClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNpYmxpbmcgPSBmaW5kQWRqYWNlbnRDb250ZW50RWRpdGFibGVGYWxzZUVsbShybmcpO1xuICAgICAgaWYgKHNpYmxpbmcpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHNpYmxpbmcudGFnTmFtZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGluZGV4OiBmaW5kSW5kZXgoc2VsZWN0aW9uLmRvbSwgbmFtZSwgc2libGluZylcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBnZXRMb2NhdGlvbih0cmltLCBzZWxlY3Rpb24sIG5vcm1hbGl6ZWQsIHJuZyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRDYXJldEJvb2ttYXJrID0gc2VsZWN0aW9uID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IHNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0OiBjcmVhdGUkYihzZWxlY3Rpb24uZG9tLmdldFJvb3QoKSwgQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChybmcpKSxcbiAgICAgICAgZW5kOiBjcmVhdGUkYihzZWxlY3Rpb24uZG9tLmdldFJvb3QoKSwgQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VFbmQocm5nKSksXG4gICAgICAgIGZvcndhcmQ6IHNlbGVjdGlvbi5pc0ZvcndhcmQoKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFJhbmdlQm9va21hcmsgPSBzZWxlY3Rpb24gPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcm5nOiBzZWxlY3Rpb24uZ2V0Um5nKCksXG4gICAgICAgIGZvcndhcmQ6IHNlbGVjdGlvbi5pc0ZvcndhcmQoKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUJvb2ttYXJrU3BhbiA9IChkb20sIGlkLCBmaWxsZWQpID0+IHtcbiAgICAgIGNvbnN0IGFyZ3MgPSB7XG4gICAgICAgICdkYXRhLW1jZS10eXBlJzogJ2Jvb2ttYXJrJyxcbiAgICAgICAgaWQsXG4gICAgICAgICdzdHlsZSc6ICdvdmVyZmxvdzpoaWRkZW47bGluZS1oZWlnaHQ6MHB4J1xuICAgICAgfTtcbiAgICAgIHJldHVybiBmaWxsZWQgPyBkb20uY3JlYXRlKCdzcGFuJywgYXJncywgJyYjeEZFRkY7JykgOiBkb20uY3JlYXRlKCdzcGFuJywgYXJncyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRQZXJzaXN0ZW50Qm9va21hcmsgPSAoc2VsZWN0aW9uLCBmaWxsZWQpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IHNlbGVjdGlvbi5kb207XG4gICAgICBsZXQgcm5nID0gc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgY29uc3QgaWQgPSBkb20udW5pcXVlSWQoKTtcbiAgICAgIGNvbnN0IGNvbGxhcHNlZCA9IHNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpO1xuICAgICAgY29uc3QgZWxlbWVudCA9IHNlbGVjdGlvbi5nZXROb2RlKCk7XG4gICAgICBjb25zdCBuYW1lID0gZWxlbWVudC5ub2RlTmFtZTtcbiAgICAgIGNvbnN0IGZvcndhcmQgPSBzZWxlY3Rpb24uaXNGb3J3YXJkKCk7XG4gICAgICBpZiAobmFtZSA9PT0gJ0lNRycpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGluZGV4OiBmaW5kSW5kZXgoZG9tLCBuYW1lLCBlbGVtZW50KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3Qgcm5nMiA9IG5vcm1hbGl6ZVRhYmxlQ2VsbFNlbGVjdGlvbihybmcuY2xvbmVSYW5nZSgpKTtcbiAgICAgIGlmICghY29sbGFwc2VkKSB7XG4gICAgICAgIHJuZzIuY29sbGFwc2UoZmFsc2UpO1xuICAgICAgICBjb25zdCBlbmRCb29rbWFya05vZGUgPSBjcmVhdGVCb29rbWFya1NwYW4oZG9tLCBpZCArICdfZW5kJywgZmlsbGVkKTtcbiAgICAgICAgcmFuZ2VJbnNlcnROb2RlKGRvbSwgcm5nMiwgZW5kQm9va21hcmtOb2RlKTtcbiAgICAgIH1cbiAgICAgIHJuZyA9IG5vcm1hbGl6ZVRhYmxlQ2VsbFNlbGVjdGlvbihybmcpO1xuICAgICAgcm5nLmNvbGxhcHNlKHRydWUpO1xuICAgICAgY29uc3Qgc3RhcnRCb29rbWFya05vZGUgPSBjcmVhdGVCb29rbWFya1NwYW4oZG9tLCBpZCArICdfc3RhcnQnLCBmaWxsZWQpO1xuICAgICAgcmFuZ2VJbnNlcnROb2RlKGRvbSwgcm5nLCBzdGFydEJvb2ttYXJrTm9kZSk7XG4gICAgICBzZWxlY3Rpb24ubW92ZVRvQm9va21hcmsoe1xuICAgICAgICBpZCxcbiAgICAgICAga2VlcDogdHJ1ZSxcbiAgICAgICAgZm9yd2FyZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZCxcbiAgICAgICAgZm9yd2FyZFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEJvb2ttYXJrJDIgPSAoc2VsZWN0aW9uLCB0eXBlLCBub3JtYWxpemVkID0gZmFsc2UpID0+IHtcbiAgICAgIGlmICh0eXBlID09PSAyKSB7XG4gICAgICAgIHJldHVybiBnZXRPZmZzZXRCb29rbWFyayh0cmltJDEsIG5vcm1hbGl6ZWQsIHNlbGVjdGlvbik7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IDMpIHtcbiAgICAgICAgcmV0dXJuIGdldENhcmV0Qm9va21hcmsoc2VsZWN0aW9uKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSkge1xuICAgICAgICByZXR1cm4gZ2V0UmFuZ2VCb29rbWFyayhzZWxlY3Rpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGdldFBlcnNpc3RlbnRCb29rbWFyayhzZWxlY3Rpb24sIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdldFVuZG9Cb29rbWFyayA9IGN1cnJ5KGdldE9mZnNldEJvb2ttYXJrLCBpZGVudGl0eSwgdHJ1ZSk7XG5cbiAgICBjb25zdCB2YWx1ZSQxID0gdmFsdWUgPT4ge1xuICAgICAgY29uc3QgYXBwbHlIZWxwZXIgPSBmbiA9PiBmbih2YWx1ZSk7XG4gICAgICBjb25zdCBjb25zdEhlbHBlciA9IGNvbnN0YW50KHZhbHVlKTtcbiAgICAgIGNvbnN0IG91dHB1dEhlbHBlciA9ICgpID0+IG91dHB1dDtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHtcbiAgICAgICAgdGFnOiB0cnVlLFxuICAgICAgICBpbm5lcjogdmFsdWUsXG4gICAgICAgIGZvbGQ6IChfb25FcnJvciwgb25WYWx1ZSkgPT4gb25WYWx1ZSh2YWx1ZSksXG4gICAgICAgIGlzVmFsdWU6IGFsd2F5cyxcbiAgICAgICAgaXNFcnJvcjogbmV2ZXIsXG4gICAgICAgIG1hcDogbWFwcGVyID0+IFJlc3VsdC52YWx1ZShtYXBwZXIodmFsdWUpKSxcbiAgICAgICAgbWFwRXJyb3I6IG91dHB1dEhlbHBlcixcbiAgICAgICAgYmluZDogYXBwbHlIZWxwZXIsXG4gICAgICAgIGV4aXN0czogYXBwbHlIZWxwZXIsXG4gICAgICAgIGZvcmFsbDogYXBwbHlIZWxwZXIsXG4gICAgICAgIGdldE9yOiBjb25zdEhlbHBlcixcbiAgICAgICAgb3I6IG91dHB1dEhlbHBlcixcbiAgICAgICAgZ2V0T3JUaHVuazogY29uc3RIZWxwZXIsXG4gICAgICAgIG9yVGh1bms6IG91dHB1dEhlbHBlcixcbiAgICAgICAgZ2V0T3JEaWU6IGNvbnN0SGVscGVyLFxuICAgICAgICBlYWNoOiBmbiA9PiB7XG4gICAgICAgICAgZm4odmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICB0b09wdGlvbmFsOiAoKSA9PiBPcHRpb25hbC5zb21lKHZhbHVlKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfTtcbiAgICBjb25zdCBlcnJvciA9IGVycm9yID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dEhlbHBlciA9ICgpID0+IG91dHB1dDtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHtcbiAgICAgICAgdGFnOiBmYWxzZSxcbiAgICAgICAgaW5uZXI6IGVycm9yLFxuICAgICAgICBmb2xkOiAob25FcnJvciwgX29uVmFsdWUpID0+IG9uRXJyb3IoZXJyb3IpLFxuICAgICAgICBpc1ZhbHVlOiBuZXZlcixcbiAgICAgICAgaXNFcnJvcjogYWx3YXlzLFxuICAgICAgICBtYXA6IG91dHB1dEhlbHBlcixcbiAgICAgICAgbWFwRXJyb3I6IG1hcHBlciA9PiBSZXN1bHQuZXJyb3IobWFwcGVyKGVycm9yKSksXG4gICAgICAgIGJpbmQ6IG91dHB1dEhlbHBlcixcbiAgICAgICAgZXhpc3RzOiBuZXZlcixcbiAgICAgICAgZm9yYWxsOiBhbHdheXMsXG4gICAgICAgIGdldE9yOiBpZGVudGl0eSxcbiAgICAgICAgb3I6IGlkZW50aXR5LFxuICAgICAgICBnZXRPclRodW5rOiBhcHBseSQxLFxuICAgICAgICBvclRodW5rOiBhcHBseSQxLFxuICAgICAgICBnZXRPckRpZTogZGllKFN0cmluZyhlcnJvcikpLFxuICAgICAgICBlYWNoOiBub29wLFxuICAgICAgICB0b09wdGlvbmFsOiBPcHRpb25hbC5ub25lXG4gICAgICB9O1xuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21PcHRpb24gPSAob3B0aW9uYWwsIGVycikgPT4gb3B0aW9uYWwuZm9sZCgoKSA9PiBlcnJvcihlcnIpLCB2YWx1ZSQxKTtcbiAgICBjb25zdCBSZXN1bHQgPSB7XG4gICAgICB2YWx1ZTogdmFsdWUkMSxcbiAgICAgIGVycm9yLFxuICAgICAgZnJvbU9wdGlvblxuICAgIH07XG5cbiAgICBjb25zdCBnZW5lcmF0ZSA9IGNhc2VzID0+IHtcbiAgICAgIGlmICghaXNBcnJheSQxKGNhc2VzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhc2VzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgIH1cbiAgICAgIGlmIChjYXNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBjYXNlJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBbXTtcbiAgICAgIGNvbnN0IGFkdCA9IHt9O1xuICAgICAgZWFjaCRlKGNhc2VzLCAoYWNhc2UsIGNvdW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGtleXMkMSA9IGtleXMoYWNhc2UpO1xuICAgICAgICBpZiAoa2V5cyQxLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignb25lIGFuZCBvbmx5IG9uZSBuYW1lIHBlciBjYXNlJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5ID0ga2V5cyQxWzBdO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGFjYXNlW2tleV07XG4gICAgICAgIGlmIChhZHRba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkdXBsaWNhdGUga2V5IGRldGVjdGVkOicgKyBrZXkpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2NhdGEnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgaGF2ZSBhIGNhc2UgbmFtZWQgY2F0YSAoc29ycnkpJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQXJyYXkkMSh2YWx1ZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhc2UgYXJndW1lbnRzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdHJ1Y3RvcnMucHVzaChrZXkpO1xuICAgICAgICBhZHRba2V5XSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgY29uc3QgYXJnTGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gICAgICAgICAgaWYgKGFyZ0xlbmd0aCAhPT0gdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dyb25nIG51bWJlciBvZiBhcmd1bWVudHMgdG8gY2FzZSAnICsga2V5ICsgJy4gRXhwZWN0ZWQgJyArIHZhbHVlLmxlbmd0aCArICcgKCcgKyB2YWx1ZSArICcpLCBnb3QgJyArIGFyZ0xlbmd0aCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG1hdGNoID0gYnJhbmNoZXMgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnJhbmNoS2V5cyA9IGtleXMoYnJhbmNoZXMpO1xuICAgICAgICAgICAgaWYgKGNvbnN0cnVjdG9ycy5sZW5ndGggIT09IGJyYW5jaEtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBtYXRjaC4gRXhwZWN0ZWQ6ICcgKyBjb25zdHJ1Y3RvcnMuam9pbignLCcpICsgJ1xcbkFjdHVhbDogJyArIGJyYW5jaEtleXMuam9pbignLCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFsbFJlcWQgPSBmb3JhbGwoY29uc3RydWN0b3JzLCByZXFLZXkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gY29udGFpbnMkMihicmFuY2hLZXlzLCByZXFLZXkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWFsbFJlcWQpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYWxsIGJyYW5jaGVzIHdlcmUgc3BlY2lmaWVkIHdoZW4gdXNpbmcgbWF0Y2guIFNwZWNpZmllZDogJyArIGJyYW5jaEtleXMuam9pbignLCAnKSArICdcXG5SZXF1aXJlZDogJyArIGNvbnN0cnVjdG9ycy5qb2luKCcsICcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBicmFuY2hlc1trZXldLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZvbGQ6ICguLi5mb2xkQXJncykgPT4ge1xuICAgICAgICAgICAgICBpZiAoZm9sZEFyZ3MubGVuZ3RoICE9PSBjYXNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dyb25nIG51bWJlciBvZiBhcmd1bWVudHMgdG8gZm9sZC4gRXhwZWN0ZWQgJyArIGNhc2VzLmxlbmd0aCArICcsIGdvdCAnICsgZm9sZEFyZ3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBmb2xkQXJnc1tjb3VudF07XG4gICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWF0Y2gsXG4gICAgICAgICAgICBsb2c6IGxhYmVsID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2cobGFiZWwsIHtcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcnMsXG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3I6IGtleSxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IGFyZ3NcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFkdDtcbiAgICB9O1xuICAgIGNvbnN0IEFkdCA9IHsgZ2VuZXJhdGUgfTtcblxuICAgIEFkdC5nZW5lcmF0ZShbXG4gICAgICB7XG4gICAgICAgIGJvdGhFcnJvcnM6IFtcbiAgICAgICAgICAnZXJyb3IxJyxcbiAgICAgICAgICAnZXJyb3IyJ1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBmaXJzdEVycm9yOiBbXG4gICAgICAgICAgJ2Vycm9yMScsXG4gICAgICAgICAgJ3ZhbHVlMidcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc2Vjb25kRXJyb3I6IFtcbiAgICAgICAgICAndmFsdWUxJyxcbiAgICAgICAgICAnZXJyb3IyJ1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBib3RoVmFsdWVzOiBbXG4gICAgICAgICAgJ3ZhbHVlMScsXG4gICAgICAgICAgJ3ZhbHVlMidcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0pO1xuICAgIGNvbnN0IHBhcnRpdGlvbiQxID0gcmVzdWx0cyA9PiB7XG4gICAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IFtdO1xuICAgICAgZWFjaCRlKHJlc3VsdHMsIHJlc3VsdCA9PiB7XG4gICAgICAgIHJlc3VsdC5mb2xkKGVyciA9PiB7XG4gICAgICAgICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgICAgfSwgdmFsdWUgPT4ge1xuICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVycm9ycyxcbiAgICAgICAgdmFsdWVzXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBpc0lubGluZVBhdHRlcm4gPSBwYXR0ZXJuID0+IHBhdHRlcm4udHlwZSA9PT0gJ2lubGluZS1jb21tYW5kJyB8fCBwYXR0ZXJuLnR5cGUgPT09ICdpbmxpbmUtZm9ybWF0JztcbiAgICBjb25zdCBpc0Jsb2NrUGF0dGVybiA9IHBhdHRlcm4gPT4gcGF0dGVybi50eXBlID09PSAnYmxvY2stY29tbWFuZCcgfHwgcGF0dGVybi50eXBlID09PSAnYmxvY2stZm9ybWF0JztcbiAgICBjb25zdCBub3JtYWxpemVQYXR0ZXJuID0gcGF0dGVybiA9PiB7XG4gICAgICBjb25zdCBlcnIgPSBtZXNzYWdlID0+IFJlc3VsdC5lcnJvcih7XG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIHBhdHRlcm5cbiAgICAgIH0pO1xuICAgICAgY29uc3QgZm9ybWF0T3JDbWQgPSAobmFtZSwgb25Gb3JtYXQsIG9uQ29tbWFuZCkgPT4ge1xuICAgICAgICBpZiAocGF0dGVybi5mb3JtYXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxldCBmb3JtYXRzO1xuICAgICAgICAgIGlmIChpc0FycmF5JDEocGF0dGVybi5mb3JtYXQpKSB7XG4gICAgICAgICAgICBpZiAoIWZvcmFsbChwYXR0ZXJuLmZvcm1hdCwgaXNTdHJpbmcpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBlcnIobmFtZSArICcgcGF0dGVybiBoYXMgbm9uLXN0cmluZyBpdGVtcyBpbiB0aGUgYGZvcm1hdGAgYXJyYXknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvcm1hdHMgPSBwYXR0ZXJuLmZvcm1hdDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKHBhdHRlcm4uZm9ybWF0KSkge1xuICAgICAgICAgICAgZm9ybWF0cyA9IFtwYXR0ZXJuLmZvcm1hdF07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBlcnIobmFtZSArICcgcGF0dGVybiBoYXMgbm9uLXN0cmluZyBgZm9ybWF0YCBwYXJhbWV0ZXInKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFJlc3VsdC52YWx1ZShvbkZvcm1hdChmb3JtYXRzKSk7XG4gICAgICAgIH0gZWxzZSBpZiAocGF0dGVybi5jbWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICghaXNTdHJpbmcocGF0dGVybi5jbWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyKG5hbWUgKyAnIHBhdHRlcm4gaGFzIG5vbi1zdHJpbmcgYGNtZGAgcGFyYW1ldGVyJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBSZXN1bHQudmFsdWUob25Db21tYW5kKHBhdHRlcm4uY21kLCBwYXR0ZXJuLnZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGVycihuYW1lICsgJyBwYXR0ZXJuIGlzIG1pc3NpbmcgYm90aCBgZm9ybWF0YCBhbmQgYGNtZGAgcGFyYW1ldGVycycpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKCFpc09iamVjdChwYXR0ZXJuKSkge1xuICAgICAgICByZXR1cm4gZXJyKCdSYXcgcGF0dGVybiBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzU3RyaW5nKHBhdHRlcm4uc3RhcnQpKSB7XG4gICAgICAgIHJldHVybiBlcnIoJ1JhdyBwYXR0ZXJuIGlzIG1pc3NpbmcgYHN0YXJ0YCBwYXJhbWV0ZXInKTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXR0ZXJuLmVuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghaXNTdHJpbmcocGF0dGVybi5lbmQpKSB7XG4gICAgICAgICAgcmV0dXJuIGVycignSW5saW5lIHBhdHRlcm4gaGFzIG5vbi1zdHJpbmcgYGVuZGAgcGFyYW1ldGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdHRlcm4uc3RhcnQubGVuZ3RoID09PSAwICYmIHBhdHRlcm4uZW5kLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBlcnIoJ0lubGluZSBwYXR0ZXJuIGhhcyBlbXB0eSBgc3RhcnRgIGFuZCBgZW5kYCBwYXJhbWV0ZXJzJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0YXJ0ID0gcGF0dGVybi5zdGFydDtcbiAgICAgICAgbGV0IGVuZCA9IHBhdHRlcm4uZW5kO1xuICAgICAgICBpZiAoZW5kLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGVuZCA9IHN0YXJ0O1xuICAgICAgICAgIHN0YXJ0ID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdE9yQ21kKCdJbmxpbmUnLCBmb3JtYXQgPT4gKHtcbiAgICAgICAgICB0eXBlOiAnaW5saW5lLWZvcm1hdCcsXG4gICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgZW5kLFxuICAgICAgICAgIGZvcm1hdFxuICAgICAgICB9KSwgKGNtZCwgdmFsdWUpID0+ICh7XG4gICAgICAgICAgdHlwZTogJ2lubGluZS1jb21tYW5kJyxcbiAgICAgICAgICBzdGFydCxcbiAgICAgICAgICBlbmQsXG4gICAgICAgICAgY21kLFxuICAgICAgICAgIHZhbHVlXG4gICAgICAgIH0pKTtcbiAgICAgIH0gZWxzZSBpZiAocGF0dGVybi5yZXBsYWNlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghaXNTdHJpbmcocGF0dGVybi5yZXBsYWNlbWVudCkpIHtcbiAgICAgICAgICByZXR1cm4gZXJyKCdSZXBsYWNlbWVudCBwYXR0ZXJuIGhhcyBub24tc3RyaW5nIGByZXBsYWNlbWVudGAgcGFyYW1ldGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdHRlcm4uc3RhcnQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGVycignUmVwbGFjZW1lbnQgcGF0dGVybiBoYXMgZW1wdHkgYHN0YXJ0YCBwYXJhbWV0ZXInKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUmVzdWx0LnZhbHVlKHtcbiAgICAgICAgICB0eXBlOiAnaW5saW5lLWNvbW1hbmQnLFxuICAgICAgICAgIHN0YXJ0OiAnJyxcbiAgICAgICAgICBlbmQ6IHBhdHRlcm4uc3RhcnQsXG4gICAgICAgICAgY21kOiAnbWNlSW5zZXJ0Q29udGVudCcsXG4gICAgICAgICAgdmFsdWU6IHBhdHRlcm4ucmVwbGFjZW1lbnRcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocGF0dGVybi5zdGFydC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gZXJyKCdCbG9jayBwYXR0ZXJuIGhhcyBlbXB0eSBgc3RhcnRgIHBhcmFtZXRlcicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtYXRPckNtZCgnQmxvY2snLCBmb3JtYXRzID0+ICh7XG4gICAgICAgICAgdHlwZTogJ2Jsb2NrLWZvcm1hdCcsXG4gICAgICAgICAgc3RhcnQ6IHBhdHRlcm4uc3RhcnQsXG4gICAgICAgICAgZm9ybWF0OiBmb3JtYXRzWzBdXG4gICAgICAgIH0pLCAoY29tbWFuZCwgY29tbWFuZFZhbHVlKSA9PiAoe1xuICAgICAgICAgIHR5cGU6ICdibG9jay1jb21tYW5kJyxcbiAgICAgICAgICBzdGFydDogcGF0dGVybi5zdGFydCxcbiAgICAgICAgICBjbWQ6IGNvbW1hbmQsXG4gICAgICAgICAgdmFsdWU6IGNvbW1hbmRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRCbG9ja1BhdHRlcm5zID0gcGF0dGVybnMgPT4gZmlsdGVyJDUocGF0dGVybnMsIGlzQmxvY2tQYXR0ZXJuKTtcbiAgICBjb25zdCBnZXRJbmxpbmVQYXR0ZXJucyA9IHBhdHRlcm5zID0+IGZpbHRlciQ1KHBhdHRlcm5zLCBpc0lubGluZVBhdHRlcm4pO1xuICAgIGNvbnN0IGNyZWF0ZVBhdHRlcm5TZXQgPSAocGF0dGVybnMsIGR5bmFtaWNQYXR0ZXJuc0xvb2t1cCkgPT4gKHtcbiAgICAgIGlubGluZVBhdHRlcm5zOiBnZXRJbmxpbmVQYXR0ZXJucyhwYXR0ZXJucyksXG4gICAgICBibG9ja1BhdHRlcm5zOiBnZXRCbG9ja1BhdHRlcm5zKHBhdHRlcm5zKSxcbiAgICAgIGR5bmFtaWNQYXR0ZXJuc0xvb2t1cFxuICAgIH0pO1xuICAgIGNvbnN0IGZyb21SYXdQYXR0ZXJucyA9IHBhdHRlcm5zID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBwYXJ0aXRpb24kMShtYXAkMyhwYXR0ZXJucywgbm9ybWFsaXplUGF0dGVybikpO1xuICAgICAgZWFjaCRlKG5vcm1hbGl6ZWQuZXJyb3JzLCBlcnIgPT4gY29uc29sZS5lcnJvcihlcnIubWVzc2FnZSwgZXJyLnBhdHRlcm4pKTtcbiAgICAgIHJldHVybiBub3JtYWxpemVkLnZhbHVlcztcbiAgICB9O1xuICAgIGNvbnN0IGZyb21SYXdQYXR0ZXJuc0xvb2t1cCA9IGxvb2t1cEZuID0+IHtcbiAgICAgIHJldHVybiBjdHggPT4ge1xuICAgICAgICBjb25zdCByYXdQYXR0ZXJucyA9IGxvb2t1cEZuKGN0eCk7XG4gICAgICAgIHJldHVybiBmcm9tUmF3UGF0dGVybnMocmF3UGF0dGVybnMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGV2aWNlRGV0ZWN0aW9uJDEgPSBkZXRlY3QkMigpLmRldmljZVR5cGU7XG4gICAgY29uc3QgaXNUb3VjaCA9IGRldmljZURldGVjdGlvbiQxLmlzVG91Y2goKTtcbiAgICBjb25zdCBET00kYSA9IERPTVV0aWxzLkRPTTtcbiAgICBjb25zdCBnZXRIYXNoID0gdmFsdWUgPT4ge1xuICAgICAgY29uc3QgaXRlbXMgPSB2YWx1ZS5pbmRleE9mKCc9JykgPiAwID8gdmFsdWUuc3BsaXQoL1s7LF0oPyFbXj07LF0qKD86WzssXXwkKSkvKSA6IHZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICByZXR1cm4gZm9sZGwoaXRlbXMsIChvdXRwdXQsIGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgYXJyID0gaXRlbS5zcGxpdCgnPScpO1xuICAgICAgICBjb25zdCBrZXkgPSBhcnJbMF07XG4gICAgICAgIGNvbnN0IHZhbCA9IGFyci5sZW5ndGggPiAxID8gYXJyWzFdIDoga2V5O1xuICAgICAgICBvdXRwdXRbdHJpbSQzKGtleSldID0gdHJpbSQzKHZhbCk7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICB9LCB7fSk7XG4gICAgfTtcbiAgICBjb25zdCBpc1JlZ0V4cCA9IHggPT4gaXMkNCh4LCBSZWdFeHApO1xuICAgIGNvbnN0IG9wdGlvbiA9IG5hbWUgPT4gZWRpdG9yID0+IGVkaXRvci5vcHRpb25zLmdldChuYW1lKTtcbiAgICBjb25zdCBzdHJpbmdPck9iamVjdFByb2Nlc3NvciA9IHZhbHVlID0+IGlzU3RyaW5nKHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSk7XG4gICAgY29uc3QgYm9keU9wdGlvblByb2Nlc3NvciA9IChlZGl0b3IsIGRlZmF1bHRWYWx1ZSA9ICcnKSA9PiB2YWx1ZSA9PiB7XG4gICAgICBjb25zdCB2YWxpZCA9IGlzU3RyaW5nKHZhbHVlKTtcbiAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICBpZiAodmFsdWUuaW5kZXhPZignPScpICE9PSAtMSkge1xuICAgICAgICAgIGNvbnN0IGJvZHlPYmogPSBnZXRIYXNoKHZhbHVlKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IGdldCRhKGJvZHlPYmosIGVkaXRvci5pZCkuZ2V0T3IoZGVmYXVsdFZhbHVlKSxcbiAgICAgICAgICAgIHZhbGlkXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB2YWxpZFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgIG1lc3NhZ2U6ICdNdXN0IGJlIGEgc3RyaW5nLidcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyJDcgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgcmVnaXN0ZXJPcHRpb24gPSBlZGl0b3Iub3B0aW9ucy5yZWdpc3RlcjtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdpZCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogZWRpdG9yLmlkXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdzZWxlY3RvcicsIHsgcHJvY2Vzc29yOiAnc3RyaW5nJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd0YXJnZXQnLCB7IHByb2Nlc3NvcjogJ29iamVjdCcgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignc3VmZml4JywgeyBwcm9jZXNzb3I6ICdzdHJpbmcnIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2NhY2hlX3N1ZmZpeCcsIHsgcHJvY2Vzc29yOiAnc3RyaW5nJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdiYXNlX3VybCcsIHsgcHJvY2Vzc29yOiAnc3RyaW5nJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdyZWZlcnJlcl9wb2xpY3knLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICcnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdsYW5ndWFnZV9sb2FkJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaW5saW5lJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2lmcmFtZV9hdHRycycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnb2JqZWN0JyxcbiAgICAgICAgZGVmYXVsdDoge31cbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2RvY3R5cGUnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICc8IURPQ1RZUEUgaHRtbD4nXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdkb2N1bWVudF9iYXNlX3VybCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogZWRpdG9yLmRvY3VtZW50QmFzZVVybFxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYm9keV9pZCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiBib2R5T3B0aW9uUHJvY2Vzc29yKGVkaXRvciwgJ3RpbnltY2UnKSxcbiAgICAgICAgZGVmYXVsdDogJ3RpbnltY2UnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdib2R5X2NsYXNzJywge1xuICAgICAgICBwcm9jZXNzb3I6IGJvZHlPcHRpb25Qcm9jZXNzb3IoZWRpdG9yKSxcbiAgICAgICAgZGVmYXVsdDogJydcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2NvbnRlbnRfc2VjdXJpdHlfcG9saWN5Jywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYnJfaW5fcHJlJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignZm9yY2VkX3Jvb3RfYmxvY2snLCB7XG4gICAgICAgIHByb2Nlc3NvcjogdmFsdWUgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbGlkID0gaXNTdHJpbmcodmFsdWUpICYmIGlzTm90RW1wdHkodmFsdWUpO1xuICAgICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgIHZhbGlkXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdNdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy4nXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDogJ3AnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdmb3JjZWRfcm9vdF9ibG9ja19hdHRycycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnb2JqZWN0JyxcbiAgICAgICAgZGVmYXVsdDoge31cbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ25ld2xpbmVfYmVoYXZpb3InLCB7XG4gICAgICAgIHByb2Nlc3NvcjogdmFsdWUgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbGlkID0gY29udGFpbnMkMihbXG4gICAgICAgICAgICAnYmxvY2snLFxuICAgICAgICAgICAgJ2xpbmVicmVhaycsXG4gICAgICAgICAgICAnaW52ZXJ0JyxcbiAgICAgICAgICAgICdkZWZhdWx0J1xuICAgICAgICAgIF0sIHZhbHVlKTtcbiAgICAgICAgICByZXR1cm4gdmFsaWQgPyB7XG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHZhbGlkXG4gICAgICAgICAgfSA6IHtcbiAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdNdXN0IGJlIG9uZSBvZjogYmxvY2ssIGxpbmVicmVhaywgaW52ZXJ0IG9yIGRlZmF1bHQuJ1xuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6ICdkZWZhdWx0J1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYnJfbmV3bGluZV9zZWxlY3RvcicsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJy5tY2UtdG9jIGgyLGZpZ2NhcHRpb24sY2FwdGlvbidcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ25vX25ld2xpbmVfc2VsZWN0b3InLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICcnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdrZWVwX3N0eWxlcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2VuZF9jb250YWluZXJfb25fZW1wdHlfYmxvY2snLCB7XG4gICAgICAgIHByb2Nlc3NvcjogdmFsdWUgPT4ge1xuICAgICAgICAgIGlmIChpc0Jvb2xlYW4odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnTXVzdCBiZSBib29sZWFuIG9yIGEgc3RyaW5nJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6ICdibG9ja3F1b3RlJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignZm9udF9zaXplX3N0eWxlX3ZhbHVlcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJ3h4LXNtYWxsLHgtc21hbGwsc21hbGwsbWVkaXVtLGxhcmdlLHgtbGFyZ2UseHgtbGFyZ2UnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdmb250X3NpemVfbGVnYWN5X3ZhbHVlcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJ3h4LXNtYWxsLHNtYWxsLG1lZGl1bSxsYXJnZSx4LWxhcmdlLHh4LWxhcmdlLDMwMCUnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdmb250X3NpemVfY2xhc3NlcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJydcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2F1dG9tYXRpY191cGxvYWRzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaW1hZ2VzX3JldXNlX2ZpbGVuYW1lJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2ltYWdlc19yZXBsYWNlX2Jsb2JfdXJpcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2ljb25zJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaWNvbnNfdXJsJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaW1hZ2VzX3VwbG9hZF91cmwnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICcnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdpbWFnZXNfdXBsb2FkX2Jhc2VfcGF0aCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJydcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2ltYWdlc191cGxvYWRfY3JlZGVudGlhbHMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaW1hZ2VzX3VwbG9hZF9oYW5kbGVyJywgeyBwcm9jZXNzb3I6ICdmdW5jdGlvbicgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignbGFuZ3VhZ2UnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICdlbidcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2xhbmd1YWdlX3VybCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJydcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2VudGl0eV9lbmNvZGluZycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJ25hbWVkJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaW5kZW50Jywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaW5kZW50X2JlZm9yZScsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJ3AsaDEsaDIsaDMsaDQsaDUsaDYsYmxvY2txdW90ZSxkaXYsdGl0bGUsc3R5bGUscHJlLHNjcmlwdCx0ZCx0aCx1bCxvbCxsaSxkbCxkdCxkZCxhcmVhLHRhYmxlLHRoZWFkLCcgKyAndGZvb3QsdGJvZHksdHIsc2VjdGlvbixkZXRhaWxzLHN1bW1hcnksYXJ0aWNsZSxoZ3JvdXAsYXNpZGUsZmlndXJlLGZpZ2NhcHRpb24sb3B0aW9uLG9wdGdyb3VwLGRhdGFsaXN0J1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaW5kZW50X2FmdGVyJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAncCxoMSxoMixoMyxoNCxoNSxoNixibG9ja3F1b3RlLGRpdix0aXRsZSxzdHlsZSxwcmUsc2NyaXB0LHRkLHRoLHVsLG9sLGxpLGRsLGR0LGRkLGFyZWEsdGFibGUsdGhlYWQsJyArICd0Zm9vdCx0Ym9keSx0cixzZWN0aW9uLGRldGFpbHMsc3VtbWFyeSxhcnRpY2xlLGhncm91cCxhc2lkZSxmaWd1cmUsZmlnY2FwdGlvbixvcHRpb24sb3B0Z3JvdXAsZGF0YWxpc3QnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdpbmRlbnRfdXNlX21hcmdpbicsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdpbmRlbnRhdGlvbicsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJzQwcHgnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdjb250ZW50X2NzcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiB2YWx1ZSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsaWQgPSB2YWx1ZSA9PT0gZmFsc2UgfHwgaXNTdHJpbmcodmFsdWUpIHx8IGlzQXJyYXlPZih2YWx1ZSwgaXNTdHJpbmcpO1xuICAgICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBtYXAkMyh2YWx1ZS5zcGxpdCgnLCcpLCB0cmltJDMpLFxuICAgICAgICAgICAgICAgIHZhbGlkXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkkMSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2YWxpZFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogW10sXG4gICAgICAgICAgICAgICAgdmFsaWRcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdmFsaWRcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnTXVzdCBiZSBmYWxzZSwgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy4nXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDogaXNJbmxpbmUoZWRpdG9yKSA/IFtdIDogWydkZWZhdWx0J11cbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2NvbnRlbnRfc3R5bGUnLCB7IHByb2Nlc3NvcjogJ3N0cmluZycgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignY29udGVudF9jc3NfY29ycycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdmb250X2NzcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiB2YWx1ZSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsaWQgPSBpc1N0cmluZyh2YWx1ZSkgfHwgaXNBcnJheU9mKHZhbHVlLCBpc1N0cmluZyk7XG4gICAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGlzQXJyYXkkMSh2YWx1ZSkgPyB2YWx1ZSA6IG1hcCQzKHZhbHVlLnNwbGl0KCcsJyksIHRyaW0kMyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWx1ZTogbmV3VmFsdWUsXG4gICAgICAgICAgICAgIHZhbGlkXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdNdXN0IGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IFtdXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdpbmxpbmVfYm91bmRhcmllcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2lubGluZV9ib3VuZGFyaWVzX3NlbGVjdG9yJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnYVtocmVmXSxjb2RlLHNwYW4ubWNlLWFubm90YXRpb24nXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdvYmplY3RfcmVzaXppbmcnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogdmFsdWUgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbGlkID0gaXNCb29sZWFuKHZhbHVlKSB8fCBpc1N0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IGRldmljZURldGVjdGlvbiQxLmlzaVBob25lKCkgfHwgZGV2aWNlRGV0ZWN0aW9uJDEuaXNpUGFkKCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgICAgICAgdmFsaWRcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlID09PSB0cnVlID8gJ3RhYmxlLGltZyxmaWd1cmUuaW1hZ2UsZGl2LHZpZGVvLGlmcmFtZScgOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2YWxpZFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdNdXN0IGJlIGJvb2xlYW4gb3IgYSBzdHJpbmcnXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDogIWlzVG91Y2hcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3Jlc2l6ZV9pbWdfcHJvcG9ydGlvbmFsJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignZXZlbnRfcm9vdCcsIHsgcHJvY2Vzc29yOiAnb2JqZWN0JyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdzZXJ2aWNlX21lc3NhZ2UnLCB7IHByb2Nlc3NvcjogJ3N0cmluZycgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGhlbWUnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogdmFsdWUgPT4gdmFsdWUgPT09IGZhbHNlIHx8IGlzU3RyaW5nKHZhbHVlKSB8fCBpc0Z1bmN0aW9uKHZhbHVlKSxcbiAgICAgICAgZGVmYXVsdDogJ3NpbHZlcidcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3RoZW1lX3VybCcsIHsgcHJvY2Vzc29yOiAnc3RyaW5nJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdmb3JtYXRzJywgeyBwcm9jZXNzb3I6ICdvYmplY3QnIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2Zvcm1hdF9lbXB0eV9saW5lcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdmb3JtYXRfbm9uZWRpdGFibGVfc2VsZWN0b3InLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICcnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdwcmV2aWV3X3N0eWxlcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiB2YWx1ZSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsaWQgPSB2YWx1ZSA9PT0gZmFsc2UgfHwgaXNTdHJpbmcodmFsdWUpO1xuICAgICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlID09PSBmYWxzZSA/ICcnIDogdmFsdWUsXG4gICAgICAgICAgICAgIHZhbGlkXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdNdXN0IGJlIGZhbHNlIG9yIGEgc3RyaW5nJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6ICdmb250LWZhbWlseSBmb250LXNpemUgZm9udC13ZWlnaHQgZm9udC1zdHlsZSB0ZXh0LWRlY29yYXRpb24gdGV4dC10cmFuc2Zvcm0gY29sb3IgYmFja2dyb3VuZC1jb2xvciBib3JkZXIgYm9yZGVyLXJhZGl1cyBvdXRsaW5lIHRleHQtc2hhZG93J1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignY3VzdG9tX3VpX3NlbGVjdG9yJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaGlkZGVuX2lucHV0Jywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignc3VibWl0X3BhdGNoJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignZW5jb2RpbmcnLCB7IHByb2Nlc3NvcjogJ3N0cmluZycgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYWRkX2Zvcm1fc3VibWl0X3RyaWdnZXInLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdhZGRfdW5sb2FkX3RyaWdnZXInLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdjdXN0b21fdW5kb19yZWRvX2xldmVscycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnbnVtYmVyJyxcbiAgICAgICAgZGVmYXVsdDogMFxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignZGlzYWJsZV9ub2RlY2hhbmdlJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3JlYWRvbmx5Jywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2VkaXRhYmxlX3Jvb3QnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdwbHVnaW5zJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmdbXScsXG4gICAgICAgIGRlZmF1bHQ6IFtdXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdleHRlcm5hbF9wbHVnaW5zJywgeyBwcm9jZXNzb3I6ICdvYmplY3QnIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2ZvcmNlZF9wbHVnaW5zJywgeyBwcm9jZXNzb3I6ICdzdHJpbmdbXScgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignbW9kZWwnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6IGVkaXRvci5oYXNQbHVnaW4oJ3J0YycpID8gJ3BsdWdpbicgOiAnZG9tJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignbW9kZWxfdXJsJywgeyBwcm9jZXNzb3I6ICdzdHJpbmcnIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2Jsb2NrX3Vuc3VwcG9ydGVkX2Ryb3AnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd2aXN1YWwnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd2aXN1YWxfdGFibGVfY2xhc3MnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICdtY2UtaXRlbS10YWJsZSdcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3Zpc3VhbF9hbmNob3JfY2xhc3MnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICdtY2UtaXRlbS1hbmNob3InXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdpZnJhbWVfYXJpYV90ZXh0Jywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnUmljaCBUZXh0IEFyZWEuIFByZXNzIEFMVC0wIGZvciBoZWxwLidcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3NldHVwJywgeyBwcm9jZXNzb3I6ICdmdW5jdGlvbicgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaW5pdF9pbnN0YW5jZV9jYWxsYmFjaycsIHsgcHJvY2Vzc29yOiAnZnVuY3Rpb24nIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3VybF9jb252ZXJ0ZXInLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Z1bmN0aW9uJyxcbiAgICAgICAgZGVmYXVsdDogZWRpdG9yLmNvbnZlcnRVUkxcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3VybF9jb252ZXJ0ZXJfc2NvcGUnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ29iamVjdCcsXG4gICAgICAgIGRlZmF1bHQ6IGVkaXRvclxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndXJsY29udmVydGVyX2NhbGxiYWNrJywgeyBwcm9jZXNzb3I6ICdmdW5jdGlvbicgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYWxsb3dfY29uZGl0aW9uYWxfY29tbWVudHMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYWxsb3dfaHRtbF9kYXRhX3VybHMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYWxsb3dfc3ZnX2RhdGFfdXJscycsIHsgcHJvY2Vzc29yOiAnYm9vbGVhbicgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYWxsb3dfaHRtbF9pbl9uYW1lZF9hbmNob3InLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYWxsb3dfc2NyaXB0X3VybHMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYWxsb3dfdW5zYWZlX2xpbmtfdGFyZ2V0Jywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2NvbnZlcnRfZm9udHNfdG9fc3BhbnMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICBkZXByZWNhdGVkOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdmaXhfbGlzdF9lbGVtZW50cycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdwcmVzZXJ2ZV9jZGF0YScsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdyZW1vdmVfdHJhaWxpbmdfYnJzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigncGFkX2VtcHR5X3dpdGhfYnInLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaW5saW5lX3N0eWxlcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIGRlcHJlY2F0ZWQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2VsZW1lbnRfZm9ybWF0Jywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnaHRtbCdcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2VudGl0aWVzJywgeyBwcm9jZXNzb3I6ICdzdHJpbmcnIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3NjaGVtYScsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJ2h0bWw1J1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignY29udmVydF91cmxzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigncmVsYXRpdmVfdXJscycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3JlbW92ZV9zY3JpcHRfaG9zdCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2N1c3RvbV9lbGVtZW50cycsIHsgcHJvY2Vzc29yOiAnc3RyaW5nJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdleHRlbmRlZF92YWxpZF9lbGVtZW50cycsIHsgcHJvY2Vzc29yOiAnc3RyaW5nJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdpbnZhbGlkX2VsZW1lbnRzJywgeyBwcm9jZXNzb3I6ICdzdHJpbmcnIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2ludmFsaWRfc3R5bGVzJywgeyBwcm9jZXNzb3I6IHN0cmluZ09yT2JqZWN0UHJvY2Vzc29yIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3ZhbGlkX2NoaWxkcmVuJywgeyBwcm9jZXNzb3I6ICdzdHJpbmcnIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3ZhbGlkX2NsYXNzZXMnLCB7IHByb2Nlc3Nvcjogc3RyaW5nT3JPYmplY3RQcm9jZXNzb3IgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndmFsaWRfZWxlbWVudHMnLCB7IHByb2Nlc3NvcjogJ3N0cmluZycgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndmFsaWRfc3R5bGVzJywgeyBwcm9jZXNzb3I6IHN0cmluZ09yT2JqZWN0UHJvY2Vzc29yIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3ZlcmlmeV9odG1sJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYXV0b19mb2N1cycsIHsgcHJvY2Vzc29yOiB2YWx1ZSA9PiBpc1N0cmluZyh2YWx1ZSkgfHwgdmFsdWUgPT09IHRydWUgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYnJvd3Nlcl9zcGVsbGNoZWNrJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3Byb3RlY3QnLCB7IHByb2Nlc3NvcjogJ2FycmF5JyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdpbWFnZXNfZmlsZV90eXBlcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJ2pwZWcsanBnLGpwZSxqZmksamlmLGpmaWYscG5nLGdpZixibXAsd2VicCdcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2RlcHJlY2F0aW9uX3dhcm5pbmdzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignYTExeV9hZHZhbmNlZF9vcHRpb25zJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2FwaV9rZXknLCB7IHByb2Nlc3NvcjogJ3N0cmluZycgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigncGFzdGVfYmxvY2tfZHJvcCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdwYXN0ZV9kYXRhX2ltYWdlcycsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3Bhc3RlX3ByZXByb2Nlc3MnLCB7IHByb2Nlc3NvcjogJ2Z1bmN0aW9uJyB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdwYXN0ZV9wb3N0cHJvY2VzcycsIHsgcHJvY2Vzc29yOiAnZnVuY3Rpb24nIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3Bhc3RlX3dlYmtpdF9zdHlsZXMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICdub25lJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigncGFzdGVfcmVtb3ZlX3N0eWxlc19pZl93ZWJraXQnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdwYXN0ZV9tZXJnZV9mb3JtYXRzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignc21hcnRfcGFzdGUnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdwYXN0ZV9hc190ZXh0Jywge1xuICAgICAgICBwcm9jZXNzb3I6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3Bhc3RlX3RhYl9zcGFjZXMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ251bWJlcicsXG4gICAgICAgIGRlZmF1bHQ6IDRcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ3RleHRfcGF0dGVybnMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogdmFsdWUgPT4ge1xuICAgICAgICAgIGlmIChpc0FycmF5T2YodmFsdWUsIGlzT2JqZWN0KSB8fCB2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5zID0gdmFsdWUgPT09IGZhbHNlID8gW10gOiB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBmcm9tUmF3UGF0dGVybnMocGF0dGVybnMpLFxuICAgICAgICAgICAgICB2YWxpZDogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnTXVzdCBiZSBhbiBhcnJheSBvZiBvYmplY3RzIG9yIGZhbHNlLidcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhcnQ6ICcqJyxcbiAgICAgICAgICAgIGVuZDogJyonLFxuICAgICAgICAgICAgZm9ybWF0OiAnaXRhbGljJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhcnQ6ICcqKicsXG4gICAgICAgICAgICBlbmQ6ICcqKicsXG4gICAgICAgICAgICBmb3JtYXQ6ICdib2xkJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhcnQ6ICcjJyxcbiAgICAgICAgICAgIGZvcm1hdDogJ2gxJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhcnQ6ICcjIycsXG4gICAgICAgICAgICBmb3JtYXQ6ICdoMidcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXJ0OiAnIyMjJyxcbiAgICAgICAgICAgIGZvcm1hdDogJ2gzJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhcnQ6ICcjIyMjJyxcbiAgICAgICAgICAgIGZvcm1hdDogJ2g0J1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhcnQ6ICcjIyMjIycsXG4gICAgICAgICAgICBmb3JtYXQ6ICdoNSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXJ0OiAnIyMjIyMjJyxcbiAgICAgICAgICAgIGZvcm1hdDogJ2g2J1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhcnQ6ICcxLiAnLFxuICAgICAgICAgICAgY21kOiAnSW5zZXJ0T3JkZXJlZExpc3QnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGFydDogJyogJyxcbiAgICAgICAgICAgIGNtZDogJ0luc2VydFVub3JkZXJlZExpc3QnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGFydDogJy0gJyxcbiAgICAgICAgICAgIGNtZDogJ0luc2VydFVub3JkZXJlZExpc3QnXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCd0ZXh0X3BhdHRlcm5zX2xvb2t1cCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiB2YWx1ZSA9PiB7XG4gICAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWx1ZTogZnJvbVJhd1BhdHRlcm5zTG9va3VwKHZhbHVlKSxcbiAgICAgICAgICAgICAgdmFsaWQ6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ011c3QgYmUgYSBzaW5nbGUgZnVuY3Rpb24nXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDogX2N0eCA9PiBbXVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignbm9uZWRpdGFibGVfY2xhc3MnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICdtY2VOb25FZGl0YWJsZSdcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2VkaXRhYmxlX2NsYXNzJywge1xuICAgICAgICBwcm9jZXNzb3I6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnbWNlRWRpdGFibGUnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdub25lZGl0YWJsZV9yZWdleHAnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogdmFsdWUgPT4ge1xuICAgICAgICAgIGlmIChpc0FycmF5T2YodmFsdWUsIGlzUmVnRXhwKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgIHZhbGlkOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWx1ZTogW3ZhbHVlXSxcbiAgICAgICAgICAgICAgdmFsaWQ6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ011c3QgYmUgYSBSZWdFeHAgb3IgYW4gYXJyYXkgb2YgUmVnRXhwLidcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiBbXVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigndGFibGVfdGFiX25hdmlnYXRpb24nLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdoaWdobGlnaHRfb25fZm9jdXMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbigneHNzX3Nhbml0aXphdGlvbicsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJPcHRpb24oJ2RldGFpbHNfaW5pdGlhbF9zdGF0ZScsIHtcbiAgICAgICAgcHJvY2Vzc29yOiB2YWx1ZSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsaWQgPSBjb250YWlucyQyKFtcbiAgICAgICAgICAgICdpbmhlcml0ZWQnLFxuICAgICAgICAgICAgJ2NvbGxhcHNlZCcsXG4gICAgICAgICAgICAnZXhwYW5kZWQnXG4gICAgICAgICAgXSwgdmFsdWUpO1xuICAgICAgICAgIHJldHVybiB2YWxpZCA/IHtcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdmFsaWRcbiAgICAgICAgICB9IDoge1xuICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogJ011c3QgYmUgb25lIG9mOiBpbmhlcml0ZWQsIGNvbGxhcHNlZCwgb3IgZXhwYW5kZWQuJ1xuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6ICdpbmhlcml0ZWQnXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKCdkZXRhaWxzX3NlcmlhbGl6ZWRfc3RhdGUnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogdmFsdWUgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbGlkID0gY29udGFpbnMkMihbXG4gICAgICAgICAgICAnaW5oZXJpdGVkJyxcbiAgICAgICAgICAgICdjb2xsYXBzZWQnLFxuICAgICAgICAgICAgJ2V4cGFuZGVkJ1xuICAgICAgICAgIF0sIHZhbHVlKTtcbiAgICAgICAgICByZXR1cm4gdmFsaWQgPyB7XG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHZhbGlkXG4gICAgICAgICAgfSA6IHtcbiAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdNdXN0IGJlIG9uZSBvZjogaW5oZXJpdGVkLCBjb2xsYXBzZWQsIG9yIGV4cGFuZGVkLidcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiAnaW5oZXJpdGVkJ1xuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignaW5pdF9jb250ZW50X3N5bmMnLCB7XG4gICAgICAgIHByb2Nlc3NvcjogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSk7XG4gICAgICByZWdpc3Rlck9wdGlvbignbmV3ZG9jdW1lbnRfY29udGVudCcsIHtcbiAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJydcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdTY3JpcHRzTG9hZGVkJywgKCkgPT4ge1xuICAgICAgICByZWdpc3Rlck9wdGlvbignZGlyZWN0aW9uYWxpdHknLCB7XG4gICAgICAgICAgcHJvY2Vzc29yOiAnc3RyaW5nJyxcbiAgICAgICAgICBkZWZhdWx0OiBJMThuLmlzUnRsKCkgPyAncnRsJyA6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICAgICAgcmVnaXN0ZXJPcHRpb24oJ3BsYWNlaG9sZGVyJywge1xuICAgICAgICAgIHByb2Nlc3NvcjogJ3N0cmluZycsXG4gICAgICAgICAgZGVmYXVsdDogRE9NJGEuZ2V0QXR0cmliKGVkaXRvci5nZXRFbGVtZW50KCksICdwbGFjZWhvbGRlcicpXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRJZnJhbWVBdHRycyA9IG9wdGlvbignaWZyYW1lX2F0dHJzJyk7XG4gICAgY29uc3QgZ2V0RG9jVHlwZSA9IG9wdGlvbignZG9jdHlwZScpO1xuICAgIGNvbnN0IGdldERvY3VtZW50QmFzZVVybCA9IG9wdGlvbignZG9jdW1lbnRfYmFzZV91cmwnKTtcbiAgICBjb25zdCBnZXRCb2R5SWQgPSBvcHRpb24oJ2JvZHlfaWQnKTtcbiAgICBjb25zdCBnZXRCb2R5Q2xhc3MgPSBvcHRpb24oJ2JvZHlfY2xhc3MnKTtcbiAgICBjb25zdCBnZXRDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBvcHRpb24oJ2NvbnRlbnRfc2VjdXJpdHlfcG9saWN5Jyk7XG4gICAgY29uc3Qgc2hvdWxkUHV0QnJJblByZSQxID0gb3B0aW9uKCdicl9pbl9wcmUnKTtcbiAgICBjb25zdCBnZXRGb3JjZWRSb290QmxvY2sgPSBvcHRpb24oJ2ZvcmNlZF9yb290X2Jsb2NrJyk7XG4gICAgY29uc3QgZ2V0Rm9yY2VkUm9vdEJsb2NrQXR0cnMgPSBvcHRpb24oJ2ZvcmNlZF9yb290X2Jsb2NrX2F0dHJzJyk7XG4gICAgY29uc3QgZ2V0TmV3bGluZUJlaGF2aW9yID0gb3B0aW9uKCduZXdsaW5lX2JlaGF2aW9yJyk7XG4gICAgY29uc3QgZ2V0QnJOZXdMaW5lU2VsZWN0b3IgPSBvcHRpb24oJ2JyX25ld2xpbmVfc2VsZWN0b3InKTtcbiAgICBjb25zdCBnZXROb05ld0xpbmVTZWxlY3RvciA9IG9wdGlvbignbm9fbmV3bGluZV9zZWxlY3RvcicpO1xuICAgIGNvbnN0IHNob3VsZEtlZXBTdHlsZXMgPSBvcHRpb24oJ2tlZXBfc3R5bGVzJyk7XG4gICAgY29uc3Qgc2hvdWxkRW5kQ29udGFpbmVyT25FbXB0eUJsb2NrID0gb3B0aW9uKCdlbmRfY29udGFpbmVyX29uX2VtcHR5X2Jsb2NrJyk7XG4gICAgY29uc3QgaXNBdXRvbWF0aWNVcGxvYWRzRW5hYmxlZCA9IG9wdGlvbignYXV0b21hdGljX3VwbG9hZHMnKTtcbiAgICBjb25zdCBzaG91bGRSZXVzZUZpbGVOYW1lID0gb3B0aW9uKCdpbWFnZXNfcmV1c2VfZmlsZW5hbWUnKTtcbiAgICBjb25zdCBzaG91bGRSZXBsYWNlQmxvYlVyaXMgPSBvcHRpb24oJ2ltYWdlc19yZXBsYWNlX2Jsb2JfdXJpcycpO1xuICAgIGNvbnN0IGdldEljb25QYWNrTmFtZSA9IG9wdGlvbignaWNvbnMnKTtcbiAgICBjb25zdCBnZXRJY29uc1VybCA9IG9wdGlvbignaWNvbnNfdXJsJyk7XG4gICAgY29uc3QgZ2V0SW1hZ2VVcGxvYWRVcmwgPSBvcHRpb24oJ2ltYWdlc191cGxvYWRfdXJsJyk7XG4gICAgY29uc3QgZ2V0SW1hZ2VVcGxvYWRCYXNlUGF0aCA9IG9wdGlvbignaW1hZ2VzX3VwbG9hZF9iYXNlX3BhdGgnKTtcbiAgICBjb25zdCBnZXRJbWFnZXNVcGxvYWRDcmVkZW50aWFscyA9IG9wdGlvbignaW1hZ2VzX3VwbG9hZF9jcmVkZW50aWFscycpO1xuICAgIGNvbnN0IGdldEltYWdlc1VwbG9hZEhhbmRsZXIgPSBvcHRpb24oJ2ltYWdlc191cGxvYWRfaGFuZGxlcicpO1xuICAgIGNvbnN0IHNob3VsZFVzZUNvbnRlbnRDc3NDb3JzID0gb3B0aW9uKCdjb250ZW50X2Nzc19jb3JzJyk7XG4gICAgY29uc3QgZ2V0UmVmZXJyZXJQb2xpY3kgPSBvcHRpb24oJ3JlZmVycmVyX3BvbGljeScpO1xuICAgIGNvbnN0IGdldExhbmd1YWdlQ29kZSA9IG9wdGlvbignbGFuZ3VhZ2UnKTtcbiAgICBjb25zdCBnZXRMYW5ndWFnZVVybCA9IG9wdGlvbignbGFuZ3VhZ2VfdXJsJyk7XG4gICAgY29uc3Qgc2hvdWxkSW5kZW50VXNlTWFyZ2luID0gb3B0aW9uKCdpbmRlbnRfdXNlX21hcmdpbicpO1xuICAgIGNvbnN0IGdldEluZGVudGF0aW9uID0gb3B0aW9uKCdpbmRlbnRhdGlvbicpO1xuICAgIGNvbnN0IGdldENvbnRlbnRDc3MgPSBvcHRpb24oJ2NvbnRlbnRfY3NzJyk7XG4gICAgY29uc3QgZ2V0Q29udGVudFN0eWxlID0gb3B0aW9uKCdjb250ZW50X3N0eWxlJyk7XG4gICAgY29uc3QgZ2V0Rm9udENzcyA9IG9wdGlvbignZm9udF9jc3MnKTtcbiAgICBjb25zdCBnZXREaXJlY3Rpb25hbGl0eSA9IG9wdGlvbignZGlyZWN0aW9uYWxpdHknKTtcbiAgICBjb25zdCBnZXRJbmxpbmVCb3VuZGFyeVNlbGVjdG9yID0gb3B0aW9uKCdpbmxpbmVfYm91bmRhcmllc19zZWxlY3RvcicpO1xuICAgIGNvbnN0IGdldE9iamVjdFJlc2l6aW5nID0gb3B0aW9uKCdvYmplY3RfcmVzaXppbmcnKTtcbiAgICBjb25zdCBnZXRSZXNpemVJbWdQcm9wb3J0aW9uYWwgPSBvcHRpb24oJ3Jlc2l6ZV9pbWdfcHJvcG9ydGlvbmFsJyk7XG4gICAgY29uc3QgZ2V0UGxhY2Vob2xkZXIgPSBvcHRpb24oJ3BsYWNlaG9sZGVyJyk7XG4gICAgY29uc3QgZ2V0RXZlbnRSb290ID0gb3B0aW9uKCdldmVudF9yb290Jyk7XG4gICAgY29uc3QgZ2V0U2VydmljZU1lc3NhZ2UgPSBvcHRpb24oJ3NlcnZpY2VfbWVzc2FnZScpO1xuICAgIGNvbnN0IGdldFRoZW1lID0gb3B0aW9uKCd0aGVtZScpO1xuICAgIGNvbnN0IGdldFRoZW1lVXJsID0gb3B0aW9uKCd0aGVtZV91cmwnKTtcbiAgICBjb25zdCBnZXRNb2RlbCA9IG9wdGlvbignbW9kZWwnKTtcbiAgICBjb25zdCBnZXRNb2RlbFVybCA9IG9wdGlvbignbW9kZWxfdXJsJyk7XG4gICAgY29uc3QgaXNJbmxpbmVCb3VuZGFyaWVzRW5hYmxlZCA9IG9wdGlvbignaW5saW5lX2JvdW5kYXJpZXMnKTtcbiAgICBjb25zdCBnZXRGb3JtYXRzID0gb3B0aW9uKCdmb3JtYXRzJyk7XG4gICAgY29uc3QgZ2V0UHJldmlld1N0eWxlcyA9IG9wdGlvbigncHJldmlld19zdHlsZXMnKTtcbiAgICBjb25zdCBjYW5Gb3JtYXRFbXB0eUxpbmVzID0gb3B0aW9uKCdmb3JtYXRfZW1wdHlfbGluZXMnKTtcbiAgICBjb25zdCBnZXRGb3JtYXROb25lZGl0YWJsZVNlbGVjdG9yID0gb3B0aW9uKCdmb3JtYXRfbm9uZWRpdGFibGVfc2VsZWN0b3InKTtcbiAgICBjb25zdCBnZXRDdXN0b21VaVNlbGVjdG9yID0gb3B0aW9uKCdjdXN0b21fdWlfc2VsZWN0b3InKTtcbiAgICBjb25zdCBpc0lubGluZSA9IG9wdGlvbignaW5saW5lJyk7XG4gICAgY29uc3QgaGFzSGlkZGVuSW5wdXQgPSBvcHRpb24oJ2hpZGRlbl9pbnB1dCcpO1xuICAgIGNvbnN0IHNob3VsZFBhdGNoU3VibWl0ID0gb3B0aW9uKCdzdWJtaXRfcGF0Y2gnKTtcbiAgICBjb25zdCBzaG91bGRBZGRGb3JtU3VibWl0VHJpZ2dlciA9IG9wdGlvbignYWRkX2Zvcm1fc3VibWl0X3RyaWdnZXInKTtcbiAgICBjb25zdCBzaG91bGRBZGRVbmxvYWRUcmlnZ2VyID0gb3B0aW9uKCdhZGRfdW5sb2FkX3RyaWdnZXInKTtcbiAgICBjb25zdCBnZXRDdXN0b21VbmRvUmVkb0xldmVscyA9IG9wdGlvbignY3VzdG9tX3VuZG9fcmVkb19sZXZlbHMnKTtcbiAgICBjb25zdCBzaG91bGREaXNhYmxlTm9kZUNoYW5nZSA9IG9wdGlvbignZGlzYWJsZV9ub2RlY2hhbmdlJyk7XG4gICAgY29uc3QgaXNSZWFkT25seSQxID0gb3B0aW9uKCdyZWFkb25seScpO1xuICAgIGNvbnN0IGhhc0VkaXRhYmxlUm9vdCQxID0gb3B0aW9uKCdlZGl0YWJsZV9yb290Jyk7XG4gICAgY29uc3QgaGFzQ29udGVudENzc0NvcnMgPSBvcHRpb24oJ2NvbnRlbnRfY3NzX2NvcnMnKTtcbiAgICBjb25zdCBnZXRQbHVnaW5zID0gb3B0aW9uKCdwbHVnaW5zJyk7XG4gICAgY29uc3QgZ2V0RXh0ZXJuYWxQbHVnaW5zJDEgPSBvcHRpb24oJ2V4dGVybmFsX3BsdWdpbnMnKTtcbiAgICBjb25zdCBzaG91bGRCbG9ja1Vuc3VwcG9ydGVkRHJvcCA9IG9wdGlvbignYmxvY2tfdW5zdXBwb3J0ZWRfZHJvcCcpO1xuICAgIGNvbnN0IGlzVmlzdWFsQWlkc0VuYWJsZWQgPSBvcHRpb24oJ3Zpc3VhbCcpO1xuICAgIGNvbnN0IGdldFZpc3VhbEFpZHNUYWJsZUNsYXNzID0gb3B0aW9uKCd2aXN1YWxfdGFibGVfY2xhc3MnKTtcbiAgICBjb25zdCBnZXRWaXN1YWxBaWRzQW5jaG9yQ2xhc3MgPSBvcHRpb24oJ3Zpc3VhbF9hbmNob3JfY2xhc3MnKTtcbiAgICBjb25zdCBnZXRJZnJhbWVBcmlhVGV4dCA9IG9wdGlvbignaWZyYW1lX2FyaWFfdGV4dCcpO1xuICAgIGNvbnN0IGdldFNldHVwQ2FsbGJhY2sgPSBvcHRpb24oJ3NldHVwJyk7XG4gICAgY29uc3QgZ2V0SW5pdEluc3RhbmNlQ2FsbGJhY2sgPSBvcHRpb24oJ2luaXRfaW5zdGFuY2VfY2FsbGJhY2snKTtcbiAgICBjb25zdCBnZXRVcmxDb252ZXJ0ZXJDYWxsYmFjayA9IG9wdGlvbigndXJsY29udmVydGVyX2NhbGxiYWNrJyk7XG4gICAgY29uc3QgZ2V0QXV0b0ZvY3VzID0gb3B0aW9uKCdhdXRvX2ZvY3VzJyk7XG4gICAgY29uc3Qgc2hvdWxkQnJvd3NlclNwZWxsY2hlY2sgPSBvcHRpb24oJ2Jyb3dzZXJfc3BlbGxjaGVjaycpO1xuICAgIGNvbnN0IGdldFByb3RlY3QgPSBvcHRpb24oJ3Byb3RlY3QnKTtcbiAgICBjb25zdCBzaG91bGRQYXN0ZUJsb2NrRHJvcCA9IG9wdGlvbigncGFzdGVfYmxvY2tfZHJvcCcpO1xuICAgIGNvbnN0IHNob3VsZFBhc3RlRGF0YUltYWdlcyA9IG9wdGlvbigncGFzdGVfZGF0YV9pbWFnZXMnKTtcbiAgICBjb25zdCBnZXRQYXN0ZVByZVByb2Nlc3MgPSBvcHRpb24oJ3Bhc3RlX3ByZXByb2Nlc3MnKTtcbiAgICBjb25zdCBnZXRQYXN0ZVBvc3RQcm9jZXNzID0gb3B0aW9uKCdwYXN0ZV9wb3N0cHJvY2VzcycpO1xuICAgIGNvbnN0IGdldE5ld0RvY3VtZW50Q29udGVudCA9IG9wdGlvbignbmV3ZG9jdW1lbnRfY29udGVudCcpO1xuICAgIGNvbnN0IGdldFBhc3RlV2Via2l0U3R5bGVzID0gb3B0aW9uKCdwYXN0ZV93ZWJraXRfc3R5bGVzJyk7XG4gICAgY29uc3Qgc2hvdWxkUGFzdGVSZW1vdmVXZWJLaXRTdHlsZXMgPSBvcHRpb24oJ3Bhc3RlX3JlbW92ZV9zdHlsZXNfaWZfd2Via2l0Jyk7XG4gICAgY29uc3Qgc2hvdWxkUGFzdGVNZXJnZUZvcm1hdHMgPSBvcHRpb24oJ3Bhc3RlX21lcmdlX2Zvcm1hdHMnKTtcbiAgICBjb25zdCBpc1NtYXJ0UGFzdGVFbmFibGVkID0gb3B0aW9uKCdzbWFydF9wYXN0ZScpO1xuICAgIGNvbnN0IGlzUGFzdGVBc1RleHRFbmFibGVkID0gb3B0aW9uKCdwYXN0ZV9hc190ZXh0Jyk7XG4gICAgY29uc3QgZ2V0UGFzdGVUYWJTcGFjZXMgPSBvcHRpb24oJ3Bhc3RlX3RhYl9zcGFjZXMnKTtcbiAgICBjb25zdCBzaG91bGRBbGxvd0h0bWxEYXRhVXJscyA9IG9wdGlvbignYWxsb3dfaHRtbF9kYXRhX3VybHMnKTtcbiAgICBjb25zdCBnZXRUZXh0UGF0dGVybnMgPSBvcHRpb24oJ3RleHRfcGF0dGVybnMnKTtcbiAgICBjb25zdCBnZXRUZXh0UGF0dGVybnNMb29rdXAgPSBvcHRpb24oJ3RleHRfcGF0dGVybnNfbG9va3VwJyk7XG4gICAgY29uc3QgZ2V0Tm9uRWRpdGFibGVDbGFzcyA9IG9wdGlvbignbm9uZWRpdGFibGVfY2xhc3MnKTtcbiAgICBjb25zdCBnZXRFZGl0YWJsZUNsYXNzID0gb3B0aW9uKCdlZGl0YWJsZV9jbGFzcycpO1xuICAgIGNvbnN0IGdldE5vbkVkaXRhYmxlUmVnRXhwcyA9IG9wdGlvbignbm9uZWRpdGFibGVfcmVnZXhwJyk7XG4gICAgY29uc3Qgc2hvdWxkUHJlc2VydmVDRGF0YSA9IG9wdGlvbigncHJlc2VydmVfY2RhdGEnKTtcbiAgICBjb25zdCBzaG91bGRIaWdobGlnaHRPbkZvY3VzID0gb3B0aW9uKCdoaWdobGlnaHRfb25fZm9jdXMnKTtcbiAgICBjb25zdCBzaG91bGRTYW5pdGl6ZVhzcyA9IG9wdGlvbigneHNzX3Nhbml0aXphdGlvbicpO1xuICAgIGNvbnN0IHNob3VsZFVzZURvY3VtZW50V3JpdGUgPSBvcHRpb24oJ2luaXRfY29udGVudF9zeW5jJyk7XG4gICAgY29uc3QgaGFzVGV4dFBhdHRlcm5zTG9va3VwID0gZWRpdG9yID0+IGVkaXRvci5vcHRpb25zLmlzU2V0KCd0ZXh0X3BhdHRlcm5zX2xvb2t1cCcpO1xuICAgIGNvbnN0IGdldEZvbnRTdHlsZVZhbHVlcyA9IGVkaXRvciA9PiBUb29scy5leHBsb2RlKGVkaXRvci5vcHRpb25zLmdldCgnZm9udF9zaXplX3N0eWxlX3ZhbHVlcycpKTtcbiAgICBjb25zdCBnZXRGb250U2l6ZUNsYXNzZXMgPSBlZGl0b3IgPT4gVG9vbHMuZXhwbG9kZShlZGl0b3Iub3B0aW9ucy5nZXQoJ2ZvbnRfc2l6ZV9jbGFzc2VzJykpO1xuICAgIGNvbnN0IGlzRW5jb2RpbmdYbWwgPSBlZGl0b3IgPT4gZWRpdG9yLm9wdGlvbnMuZ2V0KCdlbmNvZGluZycpID09PSAneG1sJztcbiAgICBjb25zdCBnZXRBbGxvd2VkSW1hZ2VGaWxlVHlwZXMgPSBlZGl0b3IgPT4gVG9vbHMuZXhwbG9kZShlZGl0b3Iub3B0aW9ucy5nZXQoJ2ltYWdlc19maWxlX3R5cGVzJykpO1xuICAgIGNvbnN0IGhhc1RhYmxlVGFiTmF2aWdhdGlvbiA9IG9wdGlvbigndGFibGVfdGFiX25hdmlnYXRpb24nKTtcbiAgICBjb25zdCBnZXREZXRhaWxzSW5pdGlhbFN0YXRlID0gb3B0aW9uKCdkZXRhaWxzX2luaXRpYWxfc3RhdGUnKTtcbiAgICBjb25zdCBnZXREZXRhaWxzU2VyaWFsaXplZFN0YXRlID0gb3B0aW9uKCdkZXRhaWxzX3NlcmlhbGl6ZWRfc3RhdGUnKTtcblxuICAgIGNvbnN0IGlzRWxlbWVudCQzID0gaXNFbGVtZW50JDY7XG4gICAgY29uc3QgaXNUZXh0JDUgPSBpc1RleHQkYTtcbiAgICBjb25zdCByZW1vdmVOb2RlJDEgPSBub2RlID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICBwYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdHJpbUNvdW50ID0gdGV4dCA9PiB7XG4gICAgICBjb25zdCB0cmltbWVkVGV4dCA9IHRyaW0kMSh0ZXh0KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvdW50OiB0ZXh0Lmxlbmd0aCAtIHRyaW1tZWRUZXh0Lmxlbmd0aCxcbiAgICAgICAgdGV4dDogdHJpbW1lZFRleHRcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBkZWxldGVad3NwQ2hhcnMgPSBjYXJldENvbnRhaW5lciA9PiB7XG4gICAgICBsZXQgaWR4O1xuICAgICAgd2hpbGUgKChpZHggPSBjYXJldENvbnRhaW5lci5kYXRhLmxhc3RJbmRleE9mKFpXU1AkMSkpICE9PSAtMSkge1xuICAgICAgICBjYXJldENvbnRhaW5lci5kZWxldGVEYXRhKGlkeCwgMSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVVbmNoYW5nZWQgPSAoY2FyZXRDb250YWluZXIsIHBvcykgPT4ge1xuICAgICAgcmVtb3ZlJDMoY2FyZXRDb250YWluZXIpO1xuICAgICAgcmV0dXJuIHBvcztcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZVRleHRBbmRSZXBvc2l0aW9uID0gKGNhcmV0Q29udGFpbmVyLCBwb3MpID0+IHtcbiAgICAgIGNvbnN0IGJlZm9yZSA9IHRyaW1Db3VudChjYXJldENvbnRhaW5lci5kYXRhLnN1YnN0cigwLCBwb3Mub2Zmc2V0KCkpKTtcbiAgICAgIGNvbnN0IGFmdGVyID0gdHJpbUNvdW50KGNhcmV0Q29udGFpbmVyLmRhdGEuc3Vic3RyKHBvcy5vZmZzZXQoKSkpO1xuICAgICAgY29uc3QgdGV4dCA9IGJlZm9yZS50ZXh0ICsgYWZ0ZXIudGV4dDtcbiAgICAgIGlmICh0ZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgZGVsZXRlWndzcENoYXJzKGNhcmV0Q29udGFpbmVyKTtcbiAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24oY2FyZXRDb250YWluZXIsIHBvcy5vZmZzZXQoKSAtIGJlZm9yZS5jb3VudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcG9zO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlRWxlbWVudEFuZFJlcG9zaXRpb24gPSAoY2FyZXRDb250YWluZXIsIHBvcykgPT4ge1xuICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHBvcy5jb250YWluZXIoKTtcbiAgICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0gaW5kZXhPZiQxKGZyb20ocGFyZW50Tm9kZS5jaGlsZE5vZGVzKSwgY2FyZXRDb250YWluZXIpLm1hcChpbmRleCA9PiB7XG4gICAgICAgIHJldHVybiBpbmRleCA8IHBvcy5vZmZzZXQoKSA/IENhcmV0UG9zaXRpb24ocGFyZW50Tm9kZSwgcG9zLm9mZnNldCgpIC0gMSkgOiBwb3M7XG4gICAgICB9KS5nZXRPcihwb3MpO1xuICAgICAgcmVtb3ZlJDMoY2FyZXRDb250YWluZXIpO1xuICAgICAgcmV0dXJuIG5ld1Bvc2l0aW9uO1xuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlVGV4dENhcmV0Q29udGFpbmVyID0gKGNhcmV0Q29udGFpbmVyLCBwb3MpID0+IGlzVGV4dCQ1KGNhcmV0Q29udGFpbmVyKSAmJiBwb3MuY29udGFpbmVyKCkgPT09IGNhcmV0Q29udGFpbmVyID8gcmVtb3ZlVGV4dEFuZFJlcG9zaXRpb24oY2FyZXRDb250YWluZXIsIHBvcykgOiByZW1vdmVVbmNoYW5nZWQoY2FyZXRDb250YWluZXIsIHBvcyk7XG4gICAgY29uc3QgcmVtb3ZlRWxlbWVudENhcmV0Q29udGFpbmVyID0gKGNhcmV0Q29udGFpbmVyLCBwb3MpID0+IHBvcy5jb250YWluZXIoKSA9PT0gY2FyZXRDb250YWluZXIucGFyZW50Tm9kZSA/IHJlbW92ZUVsZW1lbnRBbmRSZXBvc2l0aW9uKGNhcmV0Q29udGFpbmVyLCBwb3MpIDogcmVtb3ZlVW5jaGFuZ2VkKGNhcmV0Q29udGFpbmVyLCBwb3MpO1xuICAgIGNvbnN0IHJlbW92ZUFuZFJlcG9zaXRpb24gPSAoY29udGFpbmVyLCBwb3MpID0+IENhcmV0UG9zaXRpb24uaXNUZXh0UG9zaXRpb24ocG9zKSA/IHJlbW92ZVRleHRDYXJldENvbnRhaW5lcihjb250YWluZXIsIHBvcykgOiByZW1vdmVFbGVtZW50Q2FyZXRDb250YWluZXIoY29udGFpbmVyLCBwb3MpO1xuICAgIGNvbnN0IHJlbW92ZSQzID0gY2FyZXRDb250YWluZXJOb2RlID0+IHtcbiAgICAgIGlmIChpc0VsZW1lbnQkMyhjYXJldENvbnRhaW5lck5vZGUpICYmIGlzQ2FyZXRDb250YWluZXIkMihjYXJldENvbnRhaW5lck5vZGUpKSB7XG4gICAgICAgIGlmIChoYXNDb250ZW50KGNhcmV0Q29udGFpbmVyTm9kZSkpIHtcbiAgICAgICAgICBjYXJldENvbnRhaW5lck5vZGUucmVtb3ZlQXR0cmlidXRlKCdkYXRhLW1jZS1jYXJldCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbW92ZU5vZGUkMShjYXJldENvbnRhaW5lck5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNUZXh0JDUoY2FyZXRDb250YWluZXJOb2RlKSkge1xuICAgICAgICBkZWxldGVad3NwQ2hhcnMoY2FyZXRDb250YWluZXJOb2RlKTtcbiAgICAgICAgaWYgKGNhcmV0Q29udGFpbmVyTm9kZS5kYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJlbW92ZU5vZGUkMShjYXJldENvbnRhaW5lck5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGlzQ29udGVudEVkaXRhYmxlRmFsc2UkOCA9IGlzQ29udGVudEVkaXRhYmxlRmFsc2UkYjtcbiAgICBjb25zdCBpc01lZGlhJDEgPSBpc01lZGlhJDI7XG4gICAgY29uc3QgaXNUYWJsZUNlbGwkMSA9IGlzVGFibGVDZWxsJDM7XG4gICAgY29uc3QgaW5saW5lRmFrZUNhcmV0U2VsZWN0b3IgPSAnKltjb250ZW50RWRpdGFibGU9ZmFsc2VdLHZpZGVvLGF1ZGlvLGVtYmVkLG9iamVjdCc7XG4gICAgY29uc3QgZ2V0QWJzb2x1dGVDbGllbnRSZWN0ID0gKHJvb3QsIGVsZW1lbnQsIGJlZm9yZSkgPT4ge1xuICAgICAgY29uc3QgY2xpZW50UmVjdCA9IGNvbGxhcHNlKGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGJlZm9yZSk7XG4gICAgICBsZXQgc2Nyb2xsWDtcbiAgICAgIGxldCBzY3JvbGxZO1xuICAgICAgaWYgKHJvb3QudGFnTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgICAgIGNvbnN0IGRvY0VsbSA9IHJvb3Qub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIHNjcm9sbFggPSByb290LnNjcm9sbExlZnQgfHwgZG9jRWxtLnNjcm9sbExlZnQ7XG4gICAgICAgIHNjcm9sbFkgPSByb290LnNjcm9sbFRvcCB8fCBkb2NFbG0uc2Nyb2xsVG9wO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgcm9vdFJlY3QgPSByb290LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBzY3JvbGxYID0gcm9vdC5zY3JvbGxMZWZ0IC0gcm9vdFJlY3QubGVmdDtcbiAgICAgICAgc2Nyb2xsWSA9IHJvb3Quc2Nyb2xsVG9wIC0gcm9vdFJlY3QudG9wO1xuICAgICAgfVxuICAgICAgY2xpZW50UmVjdC5sZWZ0ICs9IHNjcm9sbFg7XG4gICAgICBjbGllbnRSZWN0LnJpZ2h0ICs9IHNjcm9sbFg7XG4gICAgICBjbGllbnRSZWN0LnRvcCArPSBzY3JvbGxZO1xuICAgICAgY2xpZW50UmVjdC5ib3R0b20gKz0gc2Nyb2xsWTtcbiAgICAgIGNsaWVudFJlY3Qud2lkdGggPSAxO1xuICAgICAgbGV0IG1hcmdpbiA9IGVsZW1lbnQub2Zmc2V0V2lkdGggLSBlbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgaWYgKG1hcmdpbiA+IDApIHtcbiAgICAgICAgaWYgKGJlZm9yZSkge1xuICAgICAgICAgIG1hcmdpbiAqPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBjbGllbnRSZWN0LmxlZnQgKz0gbWFyZ2luO1xuICAgICAgICBjbGllbnRSZWN0LnJpZ2h0ICs9IG1hcmdpbjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGllbnRSZWN0O1xuICAgIH07XG4gICAgY29uc3QgdHJpbUlubGluZUNhcmV0Q29udGFpbmVycyA9IHJvb3QgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGNvbnN0IGZha2VDYXJldFRhcmdldE5vZGVzID0gZGVzY2VuZGFudHMoU3VnYXJFbGVtZW50LmZyb21Eb20ocm9vdCksIGlubGluZUZha2VDYXJldFNlbGVjdG9yKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmFrZUNhcmV0VGFyZ2V0Tm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGZha2VDYXJldFRhcmdldE5vZGVzW2ldLmRvbTtcbiAgICAgICAgbGV0IHNpYmxpbmcgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgICAgICAgaWYgKGVuZHNXaXRoQ2FyZXRDb250YWluZXIkMShzaWJsaW5nKSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBzaWJsaW5nLmRhdGE7XG4gICAgICAgICAgaWYgKGRhdGEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAoX2EgPSBzaWJsaW5nLnBhcmVudE5vZGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZW1vdmVDaGlsZChzaWJsaW5nKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2libGluZy5kZWxldGVEYXRhKGRhdGEubGVuZ3RoIC0gMSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNpYmxpbmcgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgICBpZiAoc3RhcnRzV2l0aENhcmV0Q29udGFpbmVyJDEoc2libGluZykpIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gc2libGluZy5kYXRhO1xuICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgKF9iID0gc2libGluZy5wYXJlbnROb2RlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmVtb3ZlQ2hpbGQoc2libGluZyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNpYmxpbmcuZGVsZXRlRGF0YSgwLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IEZha2VDYXJldCA9IChlZGl0b3IsIHJvb3QsIGlzQmxvY2ssIGhhc0ZvY3VzKSA9PiB7XG4gICAgICBjb25zdCBsYXN0VmlzdWFsQ2FyZXQgPSB2YWx1ZSQyKCk7XG4gICAgICBsZXQgY3Vyc29ySW50ZXJ2YWw7XG4gICAgICBsZXQgY2FyZXRDb250YWluZXJOb2RlO1xuICAgICAgY29uc3QgY2FyZXRCbG9jayA9IGdldEZvcmNlZFJvb3RCbG9jayhlZGl0b3IpO1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IHNob3cgPSAoYmVmb3JlLCBlbGVtZW50KSA9PiB7XG4gICAgICAgIGxldCBybmc7XG4gICAgICAgIGhpZGUoKTtcbiAgICAgICAgaWYgKGlzVGFibGVDZWxsJDEoZWxlbWVudCkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNCbG9jayhlbGVtZW50KSkge1xuICAgICAgICAgIGNvbnN0IGNhcmV0Q29udGFpbmVyID0gaW5zZXJ0QmxvY2soY2FyZXRCbG9jaywgZWxlbWVudCwgYmVmb3JlKTtcbiAgICAgICAgICBjb25zdCBjbGllbnRSZWN0ID0gZ2V0QWJzb2x1dGVDbGllbnRSZWN0KHJvb3QsIGVsZW1lbnQsIGJlZm9yZSk7XG4gICAgICAgICAgZG9tLnNldFN0eWxlKGNhcmV0Q29udGFpbmVyLCAndG9wJywgY2xpZW50UmVjdC50b3ApO1xuICAgICAgICAgIGNhcmV0Q29udGFpbmVyTm9kZSA9IGNhcmV0Q29udGFpbmVyO1xuICAgICAgICAgIGNvbnN0IGNhcmV0ID0gZG9tLmNyZWF0ZSgnZGl2Jywge1xuICAgICAgICAgICAgJ2NsYXNzJzogJ21jZS12aXN1YWwtY2FyZXQnLFxuICAgICAgICAgICAgJ2RhdGEtbWNlLWJvZ3VzJzogJ2FsbCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBkb20uc2V0U3R5bGVzKGNhcmV0LCB7IC4uLmNsaWVudFJlY3QgfSk7XG4gICAgICAgICAgZG9tLmFkZChyb290LCBjYXJldCk7XG4gICAgICAgICAgbGFzdFZpc3VhbENhcmV0LnNldCh7XG4gICAgICAgICAgICBjYXJldCxcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBiZWZvcmVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoYmVmb3JlKSB7XG4gICAgICAgICAgICBkb20uYWRkQ2xhc3MoY2FyZXQsICdtY2UtdmlzdWFsLWNhcmV0LWJlZm9yZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGFydEJsaW5rKCk7XG4gICAgICAgICAgcm5nID0gZWxlbWVudC5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgICAgcm5nLnNldFN0YXJ0KGNhcmV0Q29udGFpbmVyLCAwKTtcbiAgICAgICAgICBybmcuc2V0RW5kKGNhcmV0Q29udGFpbmVyLCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYXJldENvbnRhaW5lck5vZGUgPSBpbnNlcnRJbmxpbmUkMShlbGVtZW50LCBiZWZvcmUpO1xuICAgICAgICAgIHJuZyA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICAgIGlmIChpc0lubGluZUZha2VDYXJldFRhcmdldChjYXJldENvbnRhaW5lck5vZGUubmV4dFNpYmxpbmcpKSB7XG4gICAgICAgICAgICBybmcuc2V0U3RhcnQoY2FyZXRDb250YWluZXJOb2RlLCAwKTtcbiAgICAgICAgICAgIHJuZy5zZXRFbmQoY2FyZXRDb250YWluZXJOb2RlLCAwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm5nLnNldFN0YXJ0KGNhcmV0Q29udGFpbmVyTm9kZSwgMSk7XG4gICAgICAgICAgICBybmcuc2V0RW5kKGNhcmV0Q29udGFpbmVyTm9kZSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBybmc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJuZztcbiAgICAgIH07XG4gICAgICBjb25zdCBoaWRlID0gKCkgPT4ge1xuICAgICAgICB0cmltSW5saW5lQ2FyZXRDb250YWluZXJzKHJvb3QpO1xuICAgICAgICBpZiAoY2FyZXRDb250YWluZXJOb2RlKSB7XG4gICAgICAgICAgcmVtb3ZlJDMoY2FyZXRDb250YWluZXJOb2RlKTtcbiAgICAgICAgICBjYXJldENvbnRhaW5lck5vZGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RWaXN1YWxDYXJldC5vbihjYXJldFN0YXRlID0+IHtcbiAgICAgICAgICBkb20ucmVtb3ZlKGNhcmV0U3RhdGUuY2FyZXQpO1xuICAgICAgICAgIGxhc3RWaXN1YWxDYXJldC5jbGVhcigpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGN1cnNvckludGVydmFsKSB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChjdXJzb3JJbnRlcnZhbCk7XG4gICAgICAgICAgY3Vyc29ySW50ZXJ2YWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBzdGFydEJsaW5rID0gKCkgPT4ge1xuICAgICAgICBjdXJzb3JJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICBsYXN0VmlzdWFsQ2FyZXQub24oY2FyZXRTdGF0ZSA9PiB7XG4gICAgICAgICAgICBpZiAoaGFzRm9jdXMoKSkge1xuICAgICAgICAgICAgICBkb20udG9nZ2xlQ2xhc3MoY2FyZXRTdGF0ZS5jYXJldCwgJ21jZS12aXN1YWwtY2FyZXQtaGlkZGVuJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkb20uYWRkQ2xhc3MoY2FyZXRTdGF0ZS5jYXJldCwgJ21jZS12aXN1YWwtY2FyZXQtaGlkZGVuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVwb3NpdGlvbiA9ICgpID0+IHtcbiAgICAgICAgbGFzdFZpc3VhbENhcmV0Lm9uKGNhcmV0U3RhdGUgPT4ge1xuICAgICAgICAgIGNvbnN0IGNsaWVudFJlY3QgPSBnZXRBYnNvbHV0ZUNsaWVudFJlY3Qocm9vdCwgY2FyZXRTdGF0ZS5lbGVtZW50LCBjYXJldFN0YXRlLmJlZm9yZSk7XG4gICAgICAgICAgZG9tLnNldFN0eWxlcyhjYXJldFN0YXRlLmNhcmV0LCB7IC4uLmNsaWVudFJlY3QgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiBjbGVhckludGVydmFsKGN1cnNvckludGVydmFsKTtcbiAgICAgIGNvbnN0IGdldENzcyA9ICgpID0+ICcubWNlLXZpc3VhbC1jYXJldCB7JyArICdwb3NpdGlvbjogYWJzb2x1dGU7JyArICdiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsnICsgJ2JhY2tncm91bmQtY29sb3I6IGN1cnJlbnRjb2xvcjsnICsgJ30nICsgJy5tY2UtdmlzdWFsLWNhcmV0LWhpZGRlbiB7JyArICdkaXNwbGF5OiBub25lOycgKyAnfScgKyAnKltkYXRhLW1jZS1jYXJldF0geycgKyAncG9zaXRpb246IGFic29sdXRlOycgKyAnbGVmdDogLTEwMDBweDsnICsgJ3JpZ2h0OiBhdXRvOycgKyAndG9wOiAwOycgKyAnbWFyZ2luOiAwOycgKyAncGFkZGluZzogMDsnICsgJ30nO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2hvdyxcbiAgICAgICAgaGlkZSxcbiAgICAgICAgZ2V0Q3NzLFxuICAgICAgICByZXBvc2l0aW9uLFxuICAgICAgICBkZXN0cm95XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgaXNGYWtlQ2FyZXRUYWJsZUJyb3dzZXIgPSAoKSA9PiBFbnYuYnJvd3Nlci5pc0ZpcmVmb3goKTtcbiAgICBjb25zdCBpc0lubGluZUZha2VDYXJldFRhcmdldCA9IG5vZGUgPT4gaXNDb250ZW50RWRpdGFibGVGYWxzZSQ4KG5vZGUpIHx8IGlzTWVkaWEkMShub2RlKTtcbiAgICBjb25zdCBpc0Zha2VDYXJldFRhcmdldCA9IG5vZGUgPT4ge1xuICAgICAgY29uc3QgaXNUYXJnZXQgPSBpc0lubGluZUZha2VDYXJldFRhcmdldChub2RlKSB8fCBpc1RhYmxlJDIobm9kZSkgJiYgaXNGYWtlQ2FyZXRUYWJsZUJyb3dzZXIoKTtcbiAgICAgIHJldHVybiBpc1RhcmdldCAmJiBwYXJlbnRFbGVtZW50KFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5vZGUpKS5leGlzdHMoaXNFZGl0YWJsZSQzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNDb250ZW50RWRpdGFibGVUcnVlJDEgPSBpc0NvbnRlbnRFZGl0YWJsZVRydWUkMztcbiAgICBjb25zdCBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJDcgPSBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJGI7XG4gICAgY29uc3QgaXNNZWRpYSA9IGlzTWVkaWEkMjtcbiAgICBjb25zdCBpc0Jsb2NrTGlrZSA9IG1hdGNoU3R5bGVWYWx1ZXMoJ2Rpc3BsYXknLCAnYmxvY2sgdGFibGUgdGFibGUtY2VsbCB0YWJsZS1jYXB0aW9uIGxpc3QtaXRlbScpO1xuICAgIGNvbnN0IGlzQ2FyZXRDb250YWluZXIgPSBpc0NhcmV0Q29udGFpbmVyJDI7XG4gICAgY29uc3QgaXNDYXJldENvbnRhaW5lckJsb2NrID0gaXNDYXJldENvbnRhaW5lckJsb2NrJDE7XG4gICAgY29uc3QgaXNFbGVtZW50JDIgPSBpc0VsZW1lbnQkNjtcbiAgICBjb25zdCBpc1RleHQkNCA9IGlzVGV4dCRhO1xuICAgIGNvbnN0IGlzQ2FyZXRDYW5kaWRhdGUkMSA9IGlzQ2FyZXRDYW5kaWRhdGUkMztcbiAgICBjb25zdCBpc0ZvcndhcmRzID0gZGlyZWN0aW9uID0+IGRpcmVjdGlvbiA+IDA7XG4gICAgY29uc3QgaXNCYWNrd2FyZHMgPSBkaXJlY3Rpb24gPT4gZGlyZWN0aW9uIDwgMDtcbiAgICBjb25zdCBza2lwQ2FyZXRDb250YWluZXJzID0gKHdhbGssIHNoYWxsb3cpID0+IHtcbiAgICAgIGxldCBub2RlO1xuICAgICAgd2hpbGUgKG5vZGUgPSB3YWxrKHNoYWxsb3cpKSB7XG4gICAgICAgIGlmICghaXNDYXJldENvbnRhaW5lckJsb2NrKG5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgY29uc3QgZmluZE5vZGUgPSAobm9kZSwgZGlyZWN0aW9uLCBwcmVkaWNhdGVGbiwgcm9vdE5vZGUsIHNoYWxsb3cpID0+IHtcbiAgICAgIGNvbnN0IHdhbGtlciA9IG5ldyBEb21UcmVlV2Fsa2VyKG5vZGUsIHJvb3ROb2RlKTtcbiAgICAgIGNvbnN0IGlzQ2VmT3JDYXJldENvbnRhaW5lciA9IGlzQ29udGVudEVkaXRhYmxlRmFsc2UkNyhub2RlKSB8fCBpc0NhcmV0Q29udGFpbmVyQmxvY2sobm9kZSk7XG4gICAgICBsZXQgdGVtcE5vZGU7XG4gICAgICBpZiAoaXNCYWNrd2FyZHMoZGlyZWN0aW9uKSkge1xuICAgICAgICBpZiAoaXNDZWZPckNhcmV0Q29udGFpbmVyKSB7XG4gICAgICAgICAgdGVtcE5vZGUgPSBza2lwQ2FyZXRDb250YWluZXJzKHdhbGtlci5wcmV2LmJpbmQod2Fsa2VyKSwgdHJ1ZSk7XG4gICAgICAgICAgaWYgKHByZWRpY2F0ZUZuKHRlbXBOb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAodGVtcE5vZGUgPSBza2lwQ2FyZXRDb250YWluZXJzKHdhbGtlci5wcmV2LmJpbmQod2Fsa2VyKSwgc2hhbGxvdykpIHtcbiAgICAgICAgICBpZiAocHJlZGljYXRlRm4odGVtcE5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGVtcE5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNGb3J3YXJkcyhkaXJlY3Rpb24pKSB7XG4gICAgICAgIGlmIChpc0NlZk9yQ2FyZXRDb250YWluZXIpIHtcbiAgICAgICAgICB0ZW1wTm9kZSA9IHNraXBDYXJldENvbnRhaW5lcnMod2Fsa2VyLm5leHQuYmluZCh3YWxrZXIpLCB0cnVlKTtcbiAgICAgICAgICBpZiAocHJlZGljYXRlRm4odGVtcE5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGVtcE5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0ZW1wTm9kZSA9IHNraXBDYXJldENvbnRhaW5lcnMod2Fsa2VyLm5leHQuYmluZCh3YWxrZXIpLCBzaGFsbG93KSkge1xuICAgICAgICAgIGlmIChwcmVkaWNhdGVGbih0ZW1wTm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZW1wTm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgY29uc3QgZ2V0RWRpdGluZ0hvc3QgPSAobm9kZSwgcm9vdE5vZGUpID0+IHtcbiAgICAgIGNvbnN0IGlzQ0VUcnVlID0gbm9kZSA9PiBpc0NvbnRlbnRFZGl0YWJsZVRydWUkMShub2RlLmRvbSk7XG4gICAgICBjb25zdCBpc1Jvb3QgPSBub2RlID0+IG5vZGUuZG9tID09PSByb290Tm9kZTtcbiAgICAgIHJldHVybiBhbmNlc3RvciQ0KFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5vZGUpLCBpc0NFVHJ1ZSwgaXNSb290KS5tYXAoZWxtID0+IGVsbS5kb20pLmdldE9yKHJvb3ROb2RlKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFBhcmVudEJsb2NrJDMgPSAobm9kZSwgcm9vdE5vZGUpID0+IHtcbiAgICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT09IHJvb3ROb2RlKSB7XG4gICAgICAgIGlmIChpc0Jsb2NrTGlrZShub2RlKSkge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIGNvbnN0IGlzSW5TYW1lQmxvY2sgPSAoY2FyZXRQb3NpdGlvbjEsIGNhcmV0UG9zaXRpb24yLCByb290Tm9kZSkgPT4gZ2V0UGFyZW50QmxvY2skMyhjYXJldFBvc2l0aW9uMS5jb250YWluZXIoKSwgcm9vdE5vZGUpID09PSBnZXRQYXJlbnRCbG9jayQzKGNhcmV0UG9zaXRpb24yLmNvbnRhaW5lcigpLCByb290Tm9kZSk7XG4gICAgY29uc3QgZ2V0Q2hpbGROb2RlQXRSZWxhdGl2ZU9mZnNldCA9IChyZWxhdGl2ZU9mZnNldCwgY2FyZXRQb3NpdGlvbikgPT4ge1xuICAgICAgaWYgKCFjYXJldFBvc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBjb250YWluZXIgPSBjYXJldFBvc2l0aW9uLmNvbnRhaW5lcigpO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gY2FyZXRQb3NpdGlvbi5vZmZzZXQoKTtcbiAgICAgIGlmICghaXNFbGVtZW50JDIoY29udGFpbmVyKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oY29udGFpbmVyLmNoaWxkTm9kZXNbb2Zmc2V0ICsgcmVsYXRpdmVPZmZzZXRdKTtcbiAgICB9O1xuICAgIGNvbnN0IGJlZm9yZUFmdGVyID0gKGJlZm9yZSwgbm9kZSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgZG9jID0gKF9hID0gbm9kZS5vd25lckRvY3VtZW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBkb2N1bWVudDtcbiAgICAgIGNvbnN0IHJhbmdlID0gZG9jLmNyZWF0ZVJhbmdlKCk7XG4gICAgICBpZiAoYmVmb3JlKSB7XG4gICAgICAgIHJhbmdlLnNldFN0YXJ0QmVmb3JlKG5vZGUpO1xuICAgICAgICByYW5nZS5zZXRFbmRCZWZvcmUobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByYW5nZS5zZXRTdGFydEFmdGVyKG5vZGUpO1xuICAgICAgICByYW5nZS5zZXRFbmRBZnRlcihub2RlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByYW5nZTtcbiAgICB9O1xuICAgIGNvbnN0IGlzTm9kZXNJblNhbWVCbG9jayA9IChyb290LCBub2RlMSwgbm9kZTIpID0+IGdldFBhcmVudEJsb2NrJDMobm9kZTEsIHJvb3QpID09PSBnZXRQYXJlbnRCbG9jayQzKG5vZGUyLCByb290KTtcbiAgICBjb25zdCBsZWFuID0gKGxlZnQsIHJvb3QsIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHNpYmxpbmdOYW1lID0gbGVmdCA/ICdwcmV2aW91c1NpYmxpbmcnIDogJ25leHRTaWJsaW5nJztcbiAgICAgIGxldCB0ZW1wTm9kZSA9IG5vZGU7XG4gICAgICB3aGlsZSAodGVtcE5vZGUgJiYgdGVtcE5vZGUgIT09IHJvb3QpIHtcbiAgICAgICAgbGV0IHNpYmxpbmcgPSB0ZW1wTm9kZVtzaWJsaW5nTmFtZV07XG4gICAgICAgIGlmIChzaWJsaW5nICYmIGlzQ2FyZXRDb250YWluZXIoc2libGluZykpIHtcbiAgICAgICAgICBzaWJsaW5nID0gc2libGluZ1tzaWJsaW5nTmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQ29udGVudEVkaXRhYmxlRmFsc2UkNyhzaWJsaW5nKSB8fCBpc01lZGlhKHNpYmxpbmcpKSB7XG4gICAgICAgICAgaWYgKGlzTm9kZXNJblNhbWVCbG9jayhyb290LCBzaWJsaW5nLCB0ZW1wTm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzaWJsaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNDYXJldENhbmRpZGF0ZSQxKHNpYmxpbmcpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdGVtcE5vZGUgPSB0ZW1wTm9kZS5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBjb25zdCBiZWZvcmUkMiA9IGN1cnJ5KGJlZm9yZUFmdGVyLCB0cnVlKTtcbiAgICBjb25zdCBhZnRlciQyID0gY3VycnkoYmVmb3JlQWZ0ZXIsIGZhbHNlKTtcbiAgICBjb25zdCBub3JtYWxpemVSYW5nZSA9IChkaXJlY3Rpb24sIHJvb3QsIHJhbmdlKSA9PiB7XG4gICAgICBsZXQgbm9kZTtcbiAgICAgIGNvbnN0IGxlYW5MZWZ0ID0gY3VycnkobGVhbiwgdHJ1ZSwgcm9vdCk7XG4gICAgICBjb25zdCBsZWFuUmlnaHQgPSBjdXJyeShsZWFuLCBmYWxzZSwgcm9vdCk7XG4gICAgICBjb25zdCBjb250YWluZXIgPSByYW5nZS5zdGFydENvbnRhaW5lcjtcbiAgICAgIGNvbnN0IG9mZnNldCA9IHJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgICAgaWYgKGlzQ2FyZXRDb250YWluZXJCbG9jayQxKGNvbnRhaW5lcikpIHtcbiAgICAgICAgY29uc3QgYmxvY2sgPSBpc1RleHQkNChjb250YWluZXIpID8gY29udGFpbmVyLnBhcmVudE5vZGUgOiBjb250YWluZXI7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gYmxvY2suZ2V0QXR0cmlidXRlKCdkYXRhLW1jZS1jYXJldCcpO1xuICAgICAgICBpZiAobG9jYXRpb24gPT09ICdiZWZvcmUnKSB7XG4gICAgICAgICAgbm9kZSA9IGJsb2NrLm5leHRTaWJsaW5nO1xuICAgICAgICAgIGlmIChpc0Zha2VDYXJldFRhcmdldChub2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGJlZm9yZSQyKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYXRpb24gPT09ICdhZnRlcicpIHtcbiAgICAgICAgICBub2RlID0gYmxvY2sucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgIGlmIChpc0Zha2VDYXJldFRhcmdldChub2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGFmdGVyJDIobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICB9XG4gICAgICBpZiAoaXNUZXh0JGEoY29udGFpbmVyKSkge1xuICAgICAgICBpZiAoaXNDYXJldENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gMSkge1xuICAgICAgICAgICAgbm9kZSA9IGxlYW5SaWdodChjb250YWluZXIpO1xuICAgICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGJlZm9yZSQyKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9kZSA9IGxlYW5MZWZ0KGNvbnRhaW5lcik7XG4gICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICByZXR1cm4gYWZ0ZXIkMihub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gLTEpIHtcbiAgICAgICAgICAgIG5vZGUgPSBsZWFuTGVmdChjb250YWluZXIpO1xuICAgICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGFmdGVyJDIobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlID0gbGVhblJpZ2h0KGNvbnRhaW5lcik7XG4gICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICByZXR1cm4gYmVmb3JlJDIobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByYW5nZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5kc1dpdGhDYXJldENvbnRhaW5lciQxKGNvbnRhaW5lcikgJiYgb2Zmc2V0ID49IGNvbnRhaW5lci5kYXRhLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAxKSB7XG4gICAgICAgICAgICBub2RlID0gbGVhblJpZ2h0KGNvbnRhaW5lcik7XG4gICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICByZXR1cm4gYmVmb3JlJDIobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByYW5nZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnRzV2l0aENhcmV0Q29udGFpbmVyJDEoY29udGFpbmVyKSAmJiBvZmZzZXQgPD0gMSkge1xuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IC0xKSB7XG4gICAgICAgICAgICBub2RlID0gbGVhbkxlZnQoY29udGFpbmVyKTtcbiAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhZnRlciQyKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9mZnNldCA9PT0gY29udGFpbmVyLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgbm9kZSA9IGxlYW5SaWdodChjb250YWluZXIpO1xuICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gYmVmb3JlJDIobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByYW5nZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgbm9kZSA9IGxlYW5MZWZ0KGNvbnRhaW5lcik7XG4gICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBhZnRlciQyKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByYW5nZTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFJlbGF0aXZlQ2VmRWxtID0gKGZvcndhcmQsIGNhcmV0UG9zaXRpb24pID0+IGdldENoaWxkTm9kZUF0UmVsYXRpdmVPZmZzZXQoZm9yd2FyZCA/IDAgOiAtMSwgY2FyZXRQb3NpdGlvbikuZmlsdGVyKGlzQ29udGVudEVkaXRhYmxlRmFsc2UkNyk7XG4gICAgY29uc3QgZ2V0Tm9ybWFsaXplZFJhbmdlRW5kUG9pbnQgPSAoZGlyZWN0aW9uLCByb290LCByYW5nZSkgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFJhbmdlID0gbm9ybWFsaXplUmFuZ2UoZGlyZWN0aW9uLCByb290LCByYW5nZSk7XG4gICAgICByZXR1cm4gZGlyZWN0aW9uID09PSAtMSA/IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQobm9ybWFsaXplZFJhbmdlKSA6IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlRW5kKG5vcm1hbGl6ZWRSYW5nZSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRFbGVtZW50RnJvbVBvc2l0aW9uID0gcG9zID0+IE9wdGlvbmFsLmZyb20ocG9zLmdldE5vZGUoKSkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBnZXRFbGVtZW50RnJvbVByZXZQb3NpdGlvbiA9IHBvcyA9PiBPcHRpb25hbC5mcm9tKHBvcy5nZXROb2RlKHRydWUpKS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIGNvbnN0IGdldFZpc3VhbENhcmV0UG9zaXRpb24gPSAod2Fsa0ZuLCBjYXJldFBvc2l0aW9uKSA9PiB7XG4gICAgICBsZXQgcG9zID0gY2FyZXRQb3NpdGlvbjtcbiAgICAgIHdoaWxlIChwb3MgPSB3YWxrRm4ocG9zKSkge1xuICAgICAgICBpZiAocG9zLmlzVmlzaWJsZSgpKSB7XG4gICAgICAgICAgcmV0dXJuIHBvcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHBvcztcbiAgICB9O1xuICAgIGNvbnN0IGlzTW92ZUluc2lkZVNhbWVCbG9jayA9IChmcm9tLCB0bykgPT4ge1xuICAgICAgY29uc3QgaW5TYW1lQmxvY2sgPSBpc0luU2FtZUJsb2NrKGZyb20sIHRvKTtcbiAgICAgIGlmICghaW5TYW1lQmxvY2sgJiYgaXNCciQ2KGZyb20uZ2V0Tm9kZSgpKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpblNhbWVCbG9jaztcbiAgICB9O1xuXG4gICAgdmFyIEhEaXJlY3Rpb247XG4gICAgKGZ1bmN0aW9uIChIRGlyZWN0aW9uKSB7XG4gICAgICBIRGlyZWN0aW9uW0hEaXJlY3Rpb25bJ0JhY2t3YXJkcyddID0gLTFdID0gJ0JhY2t3YXJkcyc7XG4gICAgICBIRGlyZWN0aW9uW0hEaXJlY3Rpb25bJ0ZvcndhcmRzJ10gPSAxXSA9ICdGb3J3YXJkcyc7XG4gICAgfShIRGlyZWN0aW9uIHx8IChIRGlyZWN0aW9uID0ge30pKSk7XG4gICAgY29uc3QgaXNDb250ZW50RWRpdGFibGVGYWxzZSQ2ID0gaXNDb250ZW50RWRpdGFibGVGYWxzZSRiO1xuICAgIGNvbnN0IGlzVGV4dCQzID0gaXNUZXh0JGE7XG4gICAgY29uc3QgaXNFbGVtZW50JDEgPSBpc0VsZW1lbnQkNjtcbiAgICBjb25zdCBpc0JyJDIgPSBpc0JyJDY7XG4gICAgY29uc3QgaXNDYXJldENhbmRpZGF0ZSA9IGlzQ2FyZXRDYW5kaWRhdGUkMztcbiAgICBjb25zdCBpc0F0b21pYyA9IGlzQXRvbWljJDE7XG4gICAgY29uc3QgaXNFZGl0YWJsZUNhcmV0Q2FuZGlkYXRlID0gaXNFZGl0YWJsZUNhcmV0Q2FuZGlkYXRlJDE7XG4gICAgY29uc3QgZ2V0UGFyZW50cyQzID0gKG5vZGUsIHJvb3QpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcbiAgICAgIGxldCB0ZW1wTm9kZSA9IG5vZGU7XG4gICAgICB3aGlsZSAodGVtcE5vZGUgJiYgdGVtcE5vZGUgIT09IHJvb3QpIHtcbiAgICAgICAgcGFyZW50cy5wdXNoKHRlbXBOb2RlKTtcbiAgICAgICAgdGVtcE5vZGUgPSB0ZW1wTm9kZS5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcmVudHM7XG4gICAgfTtcbiAgICBjb25zdCBub2RlQXRJbmRleCA9IChjb250YWluZXIsIG9mZnNldCkgPT4ge1xuICAgICAgaWYgKGNvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkgJiYgb2Zmc2V0IDwgY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBjb250YWluZXIuY2hpbGROb2Rlc1tvZmZzZXRdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBjb25zdCBnZXRDYXJldENhbmRpZGF0ZVBvc2l0aW9uID0gKGRpcmVjdGlvbiwgbm9kZSkgPT4ge1xuICAgICAgaWYgKGlzRm9yd2FyZHMoZGlyZWN0aW9uKSkge1xuICAgICAgICBpZiAoaXNDYXJldENhbmRpZGF0ZShub2RlLnByZXZpb3VzU2libGluZykgJiYgIWlzVGV4dCQzKG5vZGUucHJldmlvdXNTaWJsaW5nKSkge1xuICAgICAgICAgIHJldHVybiBDYXJldFBvc2l0aW9uLmJlZm9yZShub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNUZXh0JDMobm9kZSkpIHtcbiAgICAgICAgICByZXR1cm4gQ2FyZXRQb3NpdGlvbihub2RlLCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzQmFja3dhcmRzKGRpcmVjdGlvbikpIHtcbiAgICAgICAgaWYgKGlzQ2FyZXRDYW5kaWRhdGUobm9kZS5uZXh0U2libGluZykgJiYgIWlzVGV4dCQzKG5vZGUubmV4dFNpYmxpbmcpKSB7XG4gICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24uYWZ0ZXIobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVGV4dCQzKG5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24obm9kZSwgbm9kZS5kYXRhLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpc0JhY2t3YXJkcyhkaXJlY3Rpb24pKSB7XG4gICAgICAgIGlmIChpc0JyJDIobm9kZSkpIHtcbiAgICAgICAgICByZXR1cm4gQ2FyZXRQb3NpdGlvbi5iZWZvcmUobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24uYWZ0ZXIobm9kZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gQ2FyZXRQb3NpdGlvbi5iZWZvcmUobm9kZSk7XG4gICAgfTtcbiAgICBjb25zdCBtb3ZlRm9yd2FyZEZyb21CciA9IChyb290LCBuZXh0Tm9kZSkgPT4ge1xuICAgICAgY29uc3QgbmV4dFNpYmxpbmcgPSBuZXh0Tm9kZS5uZXh0U2libGluZztcbiAgICAgIGlmIChuZXh0U2libGluZyAmJiBpc0NhcmV0Q2FuZGlkYXRlKG5leHRTaWJsaW5nKSkge1xuICAgICAgICBpZiAoaXNUZXh0JDMobmV4dFNpYmxpbmcpKSB7XG4gICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24obmV4dFNpYmxpbmcsIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBDYXJldFBvc2l0aW9uLmJlZm9yZShuZXh0U2libGluZyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmaW5kQ2FyZXRQb3NpdGlvbiQxKEhEaXJlY3Rpb24uRm9yd2FyZHMsIENhcmV0UG9zaXRpb24uYWZ0ZXIobmV4dE5vZGUpLCByb290KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRDYXJldFBvc2l0aW9uJDEgPSAoZGlyZWN0aW9uLCBzdGFydFBvcywgcm9vdCkgPT4ge1xuICAgICAgbGV0IG5vZGU7XG4gICAgICBsZXQgbmV4dE5vZGU7XG4gICAgICBsZXQgaW5uZXJOb2RlO1xuICAgICAgbGV0IGNhcmV0UG9zaXRpb247XG4gICAgICBpZiAoIWlzRWxlbWVudCQxKHJvb3QpIHx8ICFzdGFydFBvcykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChzdGFydFBvcy5pc0VxdWFsKENhcmV0UG9zaXRpb24uYWZ0ZXIocm9vdCkpICYmIHJvb3QubGFzdENoaWxkKSB7XG4gICAgICAgIGNhcmV0UG9zaXRpb24gPSBDYXJldFBvc2l0aW9uLmFmdGVyKHJvb3QubGFzdENoaWxkKTtcbiAgICAgICAgaWYgKGlzQmFja3dhcmRzKGRpcmVjdGlvbikgJiYgaXNDYXJldENhbmRpZGF0ZShyb290Lmxhc3RDaGlsZCkgJiYgaXNFbGVtZW50JDEocm9vdC5sYXN0Q2hpbGQpKSB7XG4gICAgICAgICAgcmV0dXJuIGlzQnIkMihyb290Lmxhc3RDaGlsZCkgPyBDYXJldFBvc2l0aW9uLmJlZm9yZShyb290Lmxhc3RDaGlsZCkgOiBjYXJldFBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYXJldFBvc2l0aW9uID0gc3RhcnRQb3M7XG4gICAgICB9XG4gICAgICBjb25zdCBjb250YWluZXIgPSBjYXJldFBvc2l0aW9uLmNvbnRhaW5lcigpO1xuICAgICAgbGV0IG9mZnNldCA9IGNhcmV0UG9zaXRpb24ub2Zmc2V0KCk7XG4gICAgICBpZiAoaXNUZXh0JDMoY29udGFpbmVyKSkge1xuICAgICAgICBpZiAoaXNCYWNrd2FyZHMoZGlyZWN0aW9uKSAmJiBvZmZzZXQgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24oY29udGFpbmVyLCAtLW9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRm9yd2FyZHMoZGlyZWN0aW9uKSAmJiBvZmZzZXQgPCBjb250YWluZXIubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24oY29udGFpbmVyLCArK29mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IGNvbnRhaW5lcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc0JhY2t3YXJkcyhkaXJlY3Rpb24pICYmIG9mZnNldCA+IDApIHtcbiAgICAgICAgICBuZXh0Tm9kZSA9IG5vZGVBdEluZGV4KGNvbnRhaW5lciwgb2Zmc2V0IC0gMSk7XG4gICAgICAgICAgaWYgKGlzQ2FyZXRDYW5kaWRhdGUobmV4dE5vZGUpKSB7XG4gICAgICAgICAgICBpZiAoIWlzQXRvbWljKG5leHROb2RlKSkge1xuICAgICAgICAgICAgICBpbm5lck5vZGUgPSBmaW5kTm9kZShuZXh0Tm9kZSwgZGlyZWN0aW9uLCBpc0VkaXRhYmxlQ2FyZXRDYW5kaWRhdGUsIG5leHROb2RlKTtcbiAgICAgICAgICAgICAgaWYgKGlubmVyTm9kZSkge1xuICAgICAgICAgICAgICAgIGlmIChpc1RleHQkMyhpbm5lck5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gQ2FyZXRQb3NpdGlvbihpbm5lck5vZGUsIGlubmVyTm9kZS5kYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBDYXJldFBvc2l0aW9uLmFmdGVyKGlubmVyTm9kZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1RleHQkMyhuZXh0Tm9kZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24obmV4dE5vZGUsIG5leHROb2RlLmRhdGEubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBDYXJldFBvc2l0aW9uLmJlZm9yZShuZXh0Tm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0ZvcndhcmRzKGRpcmVjdGlvbikgJiYgb2Zmc2V0IDwgY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgbmV4dE5vZGUgPSBub2RlQXRJbmRleChjb250YWluZXIsIG9mZnNldCk7XG4gICAgICAgICAgaWYgKGlzQ2FyZXRDYW5kaWRhdGUobmV4dE5vZGUpKSB7XG4gICAgICAgICAgICBpZiAoaXNCciQyKG5leHROb2RlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gbW92ZUZvcndhcmRGcm9tQnIocm9vdCwgbmV4dE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0F0b21pYyhuZXh0Tm9kZSkpIHtcbiAgICAgICAgICAgICAgaW5uZXJOb2RlID0gZmluZE5vZGUobmV4dE5vZGUsIGRpcmVjdGlvbiwgaXNFZGl0YWJsZUNhcmV0Q2FuZGlkYXRlLCBuZXh0Tm9kZSk7XG4gICAgICAgICAgICAgIGlmIChpbm5lck5vZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNUZXh0JDMoaW5uZXJOb2RlKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24oaW5uZXJOb2RlLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24uYmVmb3JlKGlubmVyTm9kZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1RleHQkMyhuZXh0Tm9kZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24obmV4dE5vZGUsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24uYWZ0ZXIobmV4dE5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbmV4dE5vZGUgPyBuZXh0Tm9kZSA6IGNhcmV0UG9zaXRpb24uZ2V0Tm9kZSgpO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUgJiYgKGlzRm9yd2FyZHMoZGlyZWN0aW9uKSAmJiBjYXJldFBvc2l0aW9uLmlzQXRFbmQoKSB8fCBpc0JhY2t3YXJkcyhkaXJlY3Rpb24pICYmIGNhcmV0UG9zaXRpb24uaXNBdFN0YXJ0KCkpKSB7XG4gICAgICAgIG5vZGUgPSBmaW5kTm9kZShub2RlLCBkaXJlY3Rpb24sIGFsd2F5cywgcm9vdCwgdHJ1ZSk7XG4gICAgICAgIGlmIChpc0VkaXRhYmxlQ2FyZXRDYW5kaWRhdGUobm9kZSwgcm9vdCkpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0Q2FyZXRDYW5kaWRhdGVQb3NpdGlvbihkaXJlY3Rpb24sIG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0Tm9kZSA9IG5vZGUgPyBmaW5kTm9kZShub2RlLCBkaXJlY3Rpb24sIGlzRWRpdGFibGVDYXJldENhbmRpZGF0ZSwgcm9vdCkgOiBub2RlO1xuICAgICAgY29uc3Qgcm9vdENvbnRlbnRFZGl0YWJsZUZhbHNlRWxtID0gbGFzdCQyKGZpbHRlciQ1KGdldFBhcmVudHMkMyhjb250YWluZXIsIHJvb3QpLCBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJDYpKTtcbiAgICAgIGlmIChyb290Q29udGVudEVkaXRhYmxlRmFsc2VFbG0gJiYgKCFuZXh0Tm9kZSB8fCAhcm9vdENvbnRlbnRFZGl0YWJsZUZhbHNlRWxtLmNvbnRhaW5zKG5leHROb2RlKSkpIHtcbiAgICAgICAgaWYgKGlzRm9yd2FyZHMoZGlyZWN0aW9uKSkge1xuICAgICAgICAgIGNhcmV0UG9zaXRpb24gPSBDYXJldFBvc2l0aW9uLmFmdGVyKHJvb3RDb250ZW50RWRpdGFibGVGYWxzZUVsbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FyZXRQb3NpdGlvbiA9IENhcmV0UG9zaXRpb24uYmVmb3JlKHJvb3RDb250ZW50RWRpdGFibGVGYWxzZUVsbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhcmV0UG9zaXRpb247XG4gICAgICB9XG4gICAgICBpZiAobmV4dE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGdldENhcmV0Q2FuZGlkYXRlUG9zaXRpb24oZGlyZWN0aW9uLCBuZXh0Tm9kZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIGNvbnN0IENhcmV0V2Fsa2VyID0gcm9vdCA9PiAoe1xuICAgICAgbmV4dDogY2FyZXRQb3NpdGlvbiA9PiB7XG4gICAgICAgIHJldHVybiBmaW5kQ2FyZXRQb3NpdGlvbiQxKEhEaXJlY3Rpb24uRm9yd2FyZHMsIGNhcmV0UG9zaXRpb24sIHJvb3QpO1xuICAgICAgfSxcbiAgICAgIHByZXY6IGNhcmV0UG9zaXRpb24gPT4ge1xuICAgICAgICByZXR1cm4gZmluZENhcmV0UG9zaXRpb24kMShIRGlyZWN0aW9uLkJhY2t3YXJkcywgY2FyZXRQb3NpdGlvbiwgcm9vdCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCB3YWxrVG9Qb3NpdGlvbkluID0gKGZvcndhcmQsIHJvb3QsIHN0YXJ0KSA9PiB7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IGZvcndhcmQgPyBDYXJldFBvc2l0aW9uLmJlZm9yZShzdGFydCkgOiBDYXJldFBvc2l0aW9uLmFmdGVyKHN0YXJ0KTtcbiAgICAgIHJldHVybiBmcm9tUG9zaXRpb24oZm9yd2FyZCwgcm9vdCwgcG9zaXRpb24pO1xuICAgIH07XG4gICAgY29uc3QgYWZ0ZXJFbGVtZW50ID0gbm9kZSA9PiBpc0JyJDYobm9kZSkgPyBDYXJldFBvc2l0aW9uLmJlZm9yZShub2RlKSA6IENhcmV0UG9zaXRpb24uYWZ0ZXIobm9kZSk7XG4gICAgY29uc3QgaXNCZWZvcmVPclN0YXJ0ID0gcG9zaXRpb24gPT4ge1xuICAgICAgaWYgKENhcmV0UG9zaXRpb24uaXNUZXh0UG9zaXRpb24ocG9zaXRpb24pKSB7XG4gICAgICAgIHJldHVybiBwb3NpdGlvbi5vZmZzZXQoKSA9PT0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpc0NhcmV0Q2FuZGlkYXRlJDMocG9zaXRpb24uZ2V0Tm9kZSgpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlzQWZ0ZXJPckVuZCA9IHBvc2l0aW9uID0+IHtcbiAgICAgIGlmIChDYXJldFBvc2l0aW9uLmlzVGV4dFBvc2l0aW9uKHBvc2l0aW9uKSkge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBwb3NpdGlvbi5jb250YWluZXIoKTtcbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uLm9mZnNldCgpID09PSBjb250YWluZXIuZGF0YS5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaXNDYXJldENhbmRpZGF0ZSQzKHBvc2l0aW9uLmdldE5vZGUodHJ1ZSkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNCZWZvcmVBZnRlclNhbWVFbGVtZW50ID0gKGZyb20sIHRvKSA9PiAhQ2FyZXRQb3NpdGlvbi5pc1RleHRQb3NpdGlvbihmcm9tKSAmJiAhQ2FyZXRQb3NpdGlvbi5pc1RleHRQb3NpdGlvbih0bykgJiYgZnJvbS5nZXROb2RlKCkgPT09IHRvLmdldE5vZGUodHJ1ZSk7XG4gICAgY29uc3QgaXNBdEJyID0gcG9zaXRpb24gPT4gIUNhcmV0UG9zaXRpb24uaXNUZXh0UG9zaXRpb24ocG9zaXRpb24pICYmIGlzQnIkNihwb3NpdGlvbi5nZXROb2RlKCkpO1xuICAgIGNvbnN0IHNob3VsZFNraXBQb3NpdGlvbiA9IChmb3J3YXJkLCBmcm9tLCB0bykgPT4ge1xuICAgICAgaWYgKGZvcndhcmQpIHtcbiAgICAgICAgcmV0dXJuICFpc0JlZm9yZUFmdGVyU2FtZUVsZW1lbnQoZnJvbSwgdG8pICYmICFpc0F0QnIoZnJvbSkgJiYgaXNBZnRlck9yRW5kKGZyb20pICYmIGlzQmVmb3JlT3JTdGFydCh0byk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gIWlzQmVmb3JlQWZ0ZXJTYW1lRWxlbWVudCh0bywgZnJvbSkgJiYgaXNCZWZvcmVPclN0YXJ0KGZyb20pICYmIGlzQWZ0ZXJPckVuZCh0byk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBmcm9tUG9zaXRpb24gPSAoZm9yd2FyZCwgcm9vdCwgcG9zKSA9PiB7XG4gICAgICBjb25zdCB3YWxrZXIgPSBDYXJldFdhbGtlcihyb290KTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKGZvcndhcmQgPyB3YWxrZXIubmV4dChwb3MpIDogd2Fsa2VyLnByZXYocG9zKSk7XG4gICAgfTtcbiAgICBjb25zdCBuYXZpZ2F0ZSA9IChmb3J3YXJkLCByb290LCBmcm9tKSA9PiBmcm9tUG9zaXRpb24oZm9yd2FyZCwgcm9vdCwgZnJvbSkuYmluZCh0byA9PiB7XG4gICAgICBpZiAoaXNJblNhbWVCbG9jayhmcm9tLCB0bywgcm9vdCkgJiYgc2hvdWxkU2tpcFBvc2l0aW9uKGZvcndhcmQsIGZyb20sIHRvKSkge1xuICAgICAgICByZXR1cm4gZnJvbVBvc2l0aW9uKGZvcndhcmQsIHJvb3QsIHRvKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHRvKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBuYXZpZ2F0ZUlnbm9yZSA9IChmb3J3YXJkLCByb290LCBmcm9tLCBpZ25vcmVGaWx0ZXIpID0+IG5hdmlnYXRlKGZvcndhcmQsIHJvb3QsIGZyb20pLmJpbmQocG9zID0+IGlnbm9yZUZpbHRlcihwb3MpID8gbmF2aWdhdGVJZ25vcmUoZm9yd2FyZCwgcm9vdCwgcG9zLCBpZ25vcmVGaWx0ZXIpIDogT3B0aW9uYWwuc29tZShwb3MpKTtcbiAgICBjb25zdCBwb3NpdGlvbkluID0gKGZvcndhcmQsIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0Tm9kZSA9IGZvcndhcmQgPyBlbGVtZW50LmZpcnN0Q2hpbGQgOiBlbGVtZW50Lmxhc3RDaGlsZDtcbiAgICAgIGlmIChpc1RleHQkYShzdGFydE5vZGUpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKENhcmV0UG9zaXRpb24oc3RhcnROb2RlLCBmb3J3YXJkID8gMCA6IHN0YXJ0Tm9kZS5kYXRhLmxlbmd0aCkpO1xuICAgICAgfSBlbHNlIGlmIChzdGFydE5vZGUpIHtcbiAgICAgICAgaWYgKGlzQ2FyZXRDYW5kaWRhdGUkMyhzdGFydE5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoZm9yd2FyZCA/IENhcmV0UG9zaXRpb24uYmVmb3JlKHN0YXJ0Tm9kZSkgOiBhZnRlckVsZW1lbnQoc3RhcnROb2RlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHdhbGtUb1Bvc2l0aW9uSW4oZm9yd2FyZCwgZWxlbWVudCwgc3RhcnROb2RlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG5leHRQb3NpdGlvbiA9IGN1cnJ5KGZyb21Qb3NpdGlvbiwgdHJ1ZSk7XG4gICAgY29uc3QgcHJldlBvc2l0aW9uID0gY3VycnkoZnJvbVBvc2l0aW9uLCBmYWxzZSk7XG4gICAgY29uc3QgZmlyc3RQb3NpdGlvbkluID0gY3VycnkocG9zaXRpb25JbiwgdHJ1ZSk7XG4gICAgY29uc3QgbGFzdFBvc2l0aW9uSW4gPSBjdXJyeShwb3NpdGlvbkluLCBmYWxzZSk7XG5cbiAgICBjb25zdCBDQVJFVF9JRCA9ICdfbWNlX2NhcmV0JztcbiAgICBjb25zdCBpc0NhcmV0Tm9kZSA9IG5vZGUgPT4gaXNFbGVtZW50JDYobm9kZSkgJiYgbm9kZS5pZCA9PT0gQ0FSRVRfSUQ7XG4gICAgY29uc3QgZ2V0UGFyZW50Q2FyZXRDb250YWluZXIgPSAoYm9keSwgbm9kZSkgPT4ge1xuICAgICAgbGV0IGN1cnJlbnROb2RlID0gbm9kZTtcbiAgICAgIHdoaWxlIChjdXJyZW50Tm9kZSAmJiBjdXJyZW50Tm9kZSAhPT0gYm9keSkge1xuICAgICAgICBpZiAoaXNDYXJldE5vZGUoY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCBpc1N0cmluZ1BhdGhCb29rbWFyayA9IGJvb2ttYXJrID0+IGlzU3RyaW5nKGJvb2ttYXJrLnN0YXJ0KTtcbiAgICBjb25zdCBpc1JhbmdlQm9va21hcmsgPSBib29rbWFyayA9PiBoYXMkMihib29rbWFyaywgJ3JuZycpO1xuICAgIGNvbnN0IGlzSWRCb29rbWFyayA9IGJvb2ttYXJrID0+IGhhcyQyKGJvb2ttYXJrLCAnaWQnKTtcbiAgICBjb25zdCBpc0luZGV4Qm9va21hcmsgPSBib29rbWFyayA9PiBoYXMkMihib29rbWFyaywgJ25hbWUnKTtcbiAgICBjb25zdCBpc1BhdGhCb29rbWFyayA9IGJvb2ttYXJrID0+IFRvb2xzLmlzQXJyYXkoYm9va21hcmsuc3RhcnQpO1xuXG4gICAgY29uc3QgaXNGb3J3YXJkQm9va21hcmsgPSBib29rbWFyayA9PiAhaXNJbmRleEJvb2ttYXJrKGJvb2ttYXJrKSAmJiBpc0Jvb2xlYW4oYm9va21hcmsuZm9yd2FyZCkgPyBib29rbWFyay5mb3J3YXJkIDogdHJ1ZTtcbiAgICBjb25zdCBhZGRCb2d1cyA9IChkb20sIG5vZGUpID0+IHtcbiAgICAgIGlmIChpc0VsZW1lbnQkNihub2RlKSAmJiBkb20uaXNCbG9jayhub2RlKSAmJiAhbm9kZS5pbm5lckhUTUwpIHtcbiAgICAgICAgbm9kZS5pbm5lckhUTUwgPSAnPGJyIGRhdGEtbWNlLWJvZ3VzPVwiMVwiIC8+JztcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlO1xuICAgIH07XG4gICAgY29uc3QgcmVzb2x2ZUNhcmV0UG9zaXRpb25Cb29rbWFyayA9IChkb20sIGJvb2ttYXJrKSA9PiB7XG4gICAgICBjb25zdCBzdGFydFBvcyA9IE9wdGlvbmFsLmZyb20ocmVzb2x2ZSQxKGRvbS5nZXRSb290KCksIGJvb2ttYXJrLnN0YXJ0KSk7XG4gICAgICBjb25zdCBlbmRQb3MgPSBPcHRpb25hbC5mcm9tKHJlc29sdmUkMShkb20uZ2V0Um9vdCgpLCBib29rbWFyay5lbmQpKTtcbiAgICAgIHJldHVybiBsaWZ0MihzdGFydFBvcywgZW5kUG9zLCAoc3RhcnQsIGVuZCkgPT4ge1xuICAgICAgICBjb25zdCByYW5nZSA9IGRvbS5jcmVhdGVSbmcoKTtcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnQuY29udGFpbmVyKCksIHN0YXJ0Lm9mZnNldCgpKTtcbiAgICAgICAgcmFuZ2Uuc2V0RW5kKGVuZC5jb250YWluZXIoKSwgZW5kLm9mZnNldCgpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByYW5nZSxcbiAgICAgICAgICBmb3J3YXJkOiBpc0ZvcndhcmRCb29rbWFyayhib29rbWFyaylcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0WndzcCA9IChub2RlLCBybmcpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGNvbnN0IGRvYyA9IChfYSA9IG5vZGUub3duZXJEb2N1bWVudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZG9jdW1lbnQ7XG4gICAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvYy5jcmVhdGVUZXh0Tm9kZShaV1NQJDEpO1xuICAgICAgbm9kZS5hcHBlbmRDaGlsZCh0ZXh0Tm9kZSk7XG4gICAgICBybmcuc2V0U3RhcnQodGV4dE5vZGUsIDApO1xuICAgICAgcm5nLnNldEVuZCh0ZXh0Tm9kZSwgMCk7XG4gICAgfTtcbiAgICBjb25zdCBpc0VtcHR5JDEgPSBub2RlID0+ICFub2RlLmhhc0NoaWxkTm9kZXMoKTtcbiAgICBjb25zdCB0cnlGaW5kUmFuZ2VQb3NpdGlvbiA9IChub2RlLCBybmcpID0+IGxhc3RQb3NpdGlvbkluKG5vZGUpLmZvbGQobmV2ZXIsIHBvcyA9PiB7XG4gICAgICBybmcuc2V0U3RhcnQocG9zLmNvbnRhaW5lcigpLCBwb3Mub2Zmc2V0KCkpO1xuICAgICAgcm5nLnNldEVuZChwb3MuY29udGFpbmVyKCksIHBvcy5vZmZzZXQoKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICBjb25zdCBwYWRFbXB0eUNhcmV0Q29udGFpbmVyID0gKHJvb3QsIG5vZGUsIHJuZykgPT4ge1xuICAgICAgaWYgKGlzRW1wdHkkMShub2RlKSAmJiBnZXRQYXJlbnRDYXJldENvbnRhaW5lcihyb290LCBub2RlKSkge1xuICAgICAgICBpbnNlcnRad3NwKG5vZGUsIHJuZyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2V0RW5kUG9pbnQgPSAoZG9tLCBzdGFydCwgYm9va21hcmssIHJuZykgPT4ge1xuICAgICAgY29uc3QgcG9pbnQgPSBib29rbWFya1tzdGFydCA/ICdzdGFydCcgOiAnZW5kJ107XG4gICAgICBjb25zdCByb290ID0gZG9tLmdldFJvb3QoKTtcbiAgICAgIGlmIChwb2ludCkge1xuICAgICAgICBsZXQgbm9kZSA9IHJvb3Q7XG4gICAgICAgIGxldCBvZmZzZXQgPSBwb2ludFswXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHBvaW50Lmxlbmd0aCAtIDE7IG5vZGUgJiYgaSA+PSAxOyBpLS0pIHtcbiAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IG5vZGUuY2hpbGROb2RlcztcbiAgICAgICAgICBpZiAocGFkRW1wdHlDYXJldENvbnRhaW5lcihyb290LCBub2RlLCBybmcpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBvaW50W2ldID4gY2hpbGRyZW4ubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgaWYgKHBhZEVtcHR5Q2FyZXRDb250YWluZXIocm9vdCwgbm9kZSwgcm5nKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnlGaW5kUmFuZ2VQb3NpdGlvbihub2RlLCBybmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBub2RlID0gY2hpbGRyZW5bcG9pbnRbaV1dO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1RleHQkYShub2RlKSkge1xuICAgICAgICAgIG9mZnNldCA9IE1hdGgubWluKHBvaW50WzBdLCBub2RlLmRhdGEubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNFbGVtZW50JDYobm9kZSkpIHtcbiAgICAgICAgICBvZmZzZXQgPSBNYXRoLm1pbihwb2ludFswXSwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgICAgcm5nLnNldFN0YXJ0KG5vZGUsIG9mZnNldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcm5nLnNldEVuZChub2RlLCBvZmZzZXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIGNvbnN0IGlzVmFsaWRUZXh0Tm9kZSA9IG5vZGUgPT4gaXNUZXh0JGEobm9kZSkgJiYgbm9kZS5kYXRhLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgcmVzdG9yZUVuZFBvaW50ID0gKGRvbSwgc3VmZml4LCBib29rbWFyaykgPT4ge1xuICAgICAgY29uc3QgbWFya2VyID0gZG9tLmdldChib29rbWFyay5pZCArICdfJyArIHN1ZmZpeCk7XG4gICAgICBjb25zdCBtYXJrZXJQYXJlbnQgPSBtYXJrZXIgPT09IG51bGwgfHwgbWFya2VyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtYXJrZXIucGFyZW50Tm9kZTtcbiAgICAgIGNvbnN0IGtlZXAgPSBib29rbWFyay5rZWVwO1xuICAgICAgaWYgKG1hcmtlciAmJiBtYXJrZXJQYXJlbnQpIHtcbiAgICAgICAgbGV0IGNvbnRhaW5lcjtcbiAgICAgICAgbGV0IG9mZnNldDtcbiAgICAgICAgaWYgKHN1ZmZpeCA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICAgIGlmICgha2VlcCkge1xuICAgICAgICAgICAgY29udGFpbmVyID0gbWFya2VyUGFyZW50O1xuICAgICAgICAgICAgb2Zmc2V0ID0gZG9tLm5vZGVJbmRleChtYXJrZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobWFya2VyLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgICAgICBjb250YWluZXIgPSBtYXJrZXIuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNWYWxpZFRleHROb2RlKG1hcmtlci5uZXh0U2libGluZykpIHtcbiAgICAgICAgICAgICAgY29udGFpbmVyID0gbWFya2VyLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkVGV4dE5vZGUobWFya2VyLnByZXZpb3VzU2libGluZykpIHtcbiAgICAgICAgICAgICAgY29udGFpbmVyID0gbWFya2VyLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gbWFya2VyLnByZXZpb3VzU2libGluZy5kYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnRhaW5lciA9IG1hcmtlclBhcmVudDtcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gZG9tLm5vZGVJbmRleChtYXJrZXIpICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFrZWVwKSB7XG4gICAgICAgICAgICBjb250YWluZXIgPSBtYXJrZXJQYXJlbnQ7XG4gICAgICAgICAgICBvZmZzZXQgPSBkb20ubm9kZUluZGV4KG1hcmtlcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChtYXJrZXIuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgICAgICAgIGNvbnRhaW5lciA9IG1hcmtlci5maXJzdENoaWxkO1xuICAgICAgICAgICAgICBvZmZzZXQgPSAxO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkVGV4dE5vZGUobWFya2VyLnByZXZpb3VzU2libGluZykpIHtcbiAgICAgICAgICAgICAgY29udGFpbmVyID0gbWFya2VyLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gbWFya2VyLnByZXZpb3VzU2libGluZy5kYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnRhaW5lciA9IG1hcmtlclBhcmVudDtcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gZG9tLm5vZGVJbmRleChtYXJrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWtlZXApIHtcbiAgICAgICAgICBjb25zdCBwcmV2ID0gbWFya2VyLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICBjb25zdCBuZXh0ID0gbWFya2VyLm5leHRTaWJsaW5nO1xuICAgICAgICAgIFRvb2xzLmVhY2goVG9vbHMuZ3JlcChtYXJrZXIuY2hpbGROb2RlcyksIG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKGlzVGV4dCRhKG5vZGUpKSB7XG4gICAgICAgICAgICAgIG5vZGUuZGF0YSA9IG5vZGUuZGF0YS5yZXBsYWNlKC9cXHVGRUZGL2csICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsZXQgb3RoZXJNYXJrZXI7XG4gICAgICAgICAgd2hpbGUgKG90aGVyTWFya2VyID0gZG9tLmdldChib29rbWFyay5pZCArICdfJyArIHN1ZmZpeCkpIHtcbiAgICAgICAgICAgIGRvbS5yZW1vdmUob3RoZXJNYXJrZXIsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNUZXh0JGEobmV4dCkgJiYgaXNUZXh0JGEocHJldikgJiYgIUVudi5icm93c2VyLmlzT3BlcmEoKSkge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gcHJldi5kYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIHByZXYuYXBwZW5kRGF0YShuZXh0LmRhdGEpO1xuICAgICAgICAgICAgZG9tLnJlbW92ZShuZXh0KTtcbiAgICAgICAgICAgIGNvbnRhaW5lciA9IHByZXY7XG4gICAgICAgICAgICBvZmZzZXQgPSBpZHg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKENhcmV0UG9zaXRpb24oY29udGFpbmVyLCBvZmZzZXQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZXNvbHZlUGF0aHMgPSAoZG9tLCBib29rbWFyaykgPT4ge1xuICAgICAgY29uc3QgcmFuZ2UgPSBkb20uY3JlYXRlUm5nKCk7XG4gICAgICBpZiAoc2V0RW5kUG9pbnQoZG9tLCB0cnVlLCBib29rbWFyaywgcmFuZ2UpICYmIHNldEVuZFBvaW50KGRvbSwgZmFsc2UsIGJvb2ttYXJrLCByYW5nZSkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgIHJhbmdlLFxuICAgICAgICAgIGZvcndhcmQ6IGlzRm9yd2FyZEJvb2ttYXJrKGJvb2ttYXJrKVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZXNvbHZlSWQgPSAoZG9tLCBib29rbWFyaykgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRQb3MgPSByZXN0b3JlRW5kUG9pbnQoZG9tLCAnc3RhcnQnLCBib29rbWFyayk7XG4gICAgICBjb25zdCBlbmRQb3MgPSByZXN0b3JlRW5kUG9pbnQoZG9tLCAnZW5kJywgYm9va21hcmspO1xuICAgICAgcmV0dXJuIGxpZnQyKHN0YXJ0UG9zLCBlbmRQb3Mub3Ioc3RhcnRQb3MpLCAoc3BvcywgZXBvcykgPT4ge1xuICAgICAgICBjb25zdCByYW5nZSA9IGRvbS5jcmVhdGVSbmcoKTtcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoYWRkQm9ndXMoZG9tLCBzcG9zLmNvbnRhaW5lcigpKSwgc3Bvcy5vZmZzZXQoKSk7XG4gICAgICAgIHJhbmdlLnNldEVuZChhZGRCb2d1cyhkb20sIGVwb3MuY29udGFpbmVyKCkpLCBlcG9zLm9mZnNldCgpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByYW5nZSxcbiAgICAgICAgICBmb3J3YXJkOiBpc0ZvcndhcmRCb29rbWFyayhib29rbWFyaylcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVzb2x2ZUluZGV4ID0gKGRvbSwgYm9va21hcmspID0+IE9wdGlvbmFsLmZyb20oZG9tLnNlbGVjdChib29rbWFyay5uYW1lKVtib29rbWFyay5pbmRleF0pLm1hcChlbG0gPT4ge1xuICAgICAgY29uc3QgcmFuZ2UgPSBkb20uY3JlYXRlUm5nKCk7XG4gICAgICByYW5nZS5zZWxlY3ROb2RlKGVsbSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByYW5nZSxcbiAgICAgICAgZm9yd2FyZDogdHJ1ZVxuICAgICAgfTtcbiAgICB9KTtcbiAgICBjb25zdCByZXNvbHZlID0gKHNlbGVjdGlvbiwgYm9va21hcmspID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IHNlbGVjdGlvbi5kb207XG4gICAgICBpZiAoYm9va21hcmspIHtcbiAgICAgICAgaWYgKGlzUGF0aEJvb2ttYXJrKGJvb2ttYXJrKSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlUGF0aHMoZG9tLCBib29rbWFyayk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmdQYXRoQm9va21hcmsoYm9va21hcmspKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmVDYXJldFBvc2l0aW9uQm9va21hcmsoZG9tLCBib29rbWFyayk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNJZEJvb2ttYXJrKGJvb2ttYXJrKSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlSWQoZG9tLCBib29rbWFyayk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNJbmRleEJvb2ttYXJrKGJvb2ttYXJrKSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlSW5kZXgoZG9tLCBib29rbWFyayk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNSYW5nZUJvb2ttYXJrKGJvb2ttYXJrKSkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgIHJhbmdlOiBib29rbWFyay5ybmcsXG4gICAgICAgICAgICBmb3J3YXJkOiBpc0ZvcndhcmRCb29rbWFyayhib29rbWFyaylcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0Qm9va21hcmskMSA9IChzZWxlY3Rpb24sIHR5cGUsIG5vcm1hbGl6ZWQpID0+IHtcbiAgICAgIHJldHVybiBnZXRCb29rbWFyayQyKHNlbGVjdGlvbiwgdHlwZSwgbm9ybWFsaXplZCk7XG4gICAgfTtcbiAgICBjb25zdCBtb3ZlVG9Cb29rbWFyayA9IChzZWxlY3Rpb24sIGJvb2ttYXJrKSA9PiB7XG4gICAgICByZXNvbHZlKHNlbGVjdGlvbiwgYm9va21hcmspLmVhY2goKHtyYW5nZSwgZm9yd2FyZH0pID0+IHtcbiAgICAgICAgc2VsZWN0aW9uLnNldFJuZyhyYW5nZSwgZm9yd2FyZCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQm9va21hcmtOb2RlJDEgPSBub2RlID0+IHtcbiAgICAgIHJldHVybiBpc0VsZW1lbnQkNihub2RlKSAmJiBub2RlLnRhZ05hbWUgPT09ICdTUEFOJyAmJiBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1tY2UtdHlwZScpID09PSAnYm9va21hcmsnO1xuICAgIH07XG5cbiAgICBjb25zdCBpcyA9IGV4cGVjdGVkID0+IGFjdHVhbCA9PiBleHBlY3RlZCA9PT0gYWN0dWFsO1xuICAgIGNvbnN0IGlzTmJzcCA9IGlzKG5ic3ApO1xuICAgIGNvbnN0IGlzV2hpdGVTcGFjZSA9IGNociA9PiBjaHIgIT09ICcnICYmICcgXFxmXFxuXFxyXFx0XFx4MEInLmluZGV4T2YoY2hyKSAhPT0gLTE7XG4gICAgY29uc3QgaXNDb250ZW50ID0gY2hyID0+ICFpc1doaXRlU3BhY2UoY2hyKSAmJiAhaXNOYnNwKGNocikgJiYgIWlzWndzcCQyKGNocik7XG5cbiAgICBjb25zdCBoZXhDb2xvdXIgPSB2YWx1ZSA9PiAoeyB2YWx1ZTogbm9ybWFsaXplSGV4KHZhbHVlKSB9KTtcbiAgICBjb25zdCBub3JtYWxpemVIZXggPSBoZXggPT4gcmVtb3ZlTGVhZGluZyhoZXgsICcjJykudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCB0b0hleCA9IGNvbXBvbmVudCA9PiB7XG4gICAgICBjb25zdCBoZXggPSBjb21wb25lbnQudG9TdHJpbmcoMTYpO1xuICAgICAgcmV0dXJuIChoZXgubGVuZ3RoID09PSAxID8gJzAnICsgaGV4IDogaGV4KS50b1VwcGVyQ2FzZSgpO1xuICAgIH07XG4gICAgY29uc3QgZnJvbVJnYmEgPSByZ2JhQ29sb3VyID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdG9IZXgocmdiYUNvbG91ci5yZWQpICsgdG9IZXgocmdiYUNvbG91ci5ncmVlbikgKyB0b0hleChyZ2JhQ29sb3VyLmJsdWUpO1xuICAgICAgcmV0dXJuIGhleENvbG91cih2YWx1ZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJnYlJlZ2V4ID0gL15cXHMqcmdiXFxzKlxcKFxccyooXFxkKylcXHMqLFxccyooXFxkKylcXHMqLFxccyooXFxkKylcXHMqXFwpXFxzKiQvaTtcbiAgICBjb25zdCByZ2JhUmVnZXggPSAvXlxccypyZ2JhXFxzKlxcKFxccyooXFxkKylcXHMqLFxccyooXFxkKylcXHMqLFxccyooXFxkKylcXHMqLFxccyooXFxkPyg/OlxcLlxcZCspPylcXHMqXFwpXFxzKiQvaTtcbiAgICBjb25zdCByZ2JhQ29sb3VyID0gKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKSA9PiAoe1xuICAgICAgcmVkLFxuICAgICAgZ3JlZW4sXG4gICAgICBibHVlLFxuICAgICAgYWxwaGFcbiAgICB9KTtcbiAgICBjb25zdCBmcm9tU3RyaW5nVmFsdWVzID0gKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKSA9PiB7XG4gICAgICBjb25zdCByID0gcGFyc2VJbnQocmVkLCAxMCk7XG4gICAgICBjb25zdCBnID0gcGFyc2VJbnQoZ3JlZW4sIDEwKTtcbiAgICAgIGNvbnN0IGIgPSBwYXJzZUludChibHVlLCAxMCk7XG4gICAgICBjb25zdCBhID0gcGFyc2VGbG9hdChhbHBoYSk7XG4gICAgICByZXR1cm4gcmdiYUNvbG91cihyLCBnLCBiLCBhKTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21TdHJpbmcgPSByZ2JhU3RyaW5nID0+IHtcbiAgICAgIGlmIChyZ2JhU3RyaW5nID09PSAndHJhbnNwYXJlbnQnKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHJnYmFDb2xvdXIoMCwgMCwgMCwgMCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmdiTWF0Y2ggPSByZ2JSZWdleC5leGVjKHJnYmFTdHJpbmcpO1xuICAgICAgaWYgKHJnYk1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGZyb21TdHJpbmdWYWx1ZXMocmdiTWF0Y2hbMV0sIHJnYk1hdGNoWzJdLCByZ2JNYXRjaFszXSwgJzEnKSk7XG4gICAgICB9XG4gICAgICBjb25zdCByZ2JhTWF0Y2ggPSByZ2JhUmVnZXguZXhlYyhyZ2JhU3RyaW5nKTtcbiAgICAgIGlmIChyZ2JhTWF0Y2ggIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoZnJvbVN0cmluZ1ZhbHVlcyhyZ2JhTWF0Y2hbMV0sIHJnYmFNYXRjaFsyXSwgcmdiYU1hdGNoWzNdLCByZ2JhTWF0Y2hbNF0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJnYmFUb0hleFN0cmluZyA9IGNvbG9yID0+IGZyb21TdHJpbmcoY29sb3IpLm1hcChmcm9tUmdiYSkubWFwKGggPT4gJyMnICsgaC52YWx1ZSkuZ2V0T3IoY29sb3IpO1xuXG4gICAgY29uc3QgZ2V0UmFuZ2VzJDEgPSBzZWxlY3Rpb24gPT4ge1xuICAgICAgY29uc3QgcmFuZ2VzID0gW107XG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0aW9uLnJhbmdlQ291bnQ7IGkrKykge1xuICAgICAgICAgIHJhbmdlcy5wdXNoKHNlbGVjdGlvbi5nZXRSYW5nZUF0KGkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJhbmdlcztcbiAgICB9O1xuICAgIGNvbnN0IGdldFNlbGVjdGVkTm9kZXMgPSByYW5nZXMgPT4ge1xuICAgICAgcmV0dXJuIGJpbmQkMyhyYW5nZXMsIHJhbmdlID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGdldFNlbGVjdGVkTm9kZShyYW5nZSk7XG4gICAgICAgIHJldHVybiBub2RlID8gW1N1Z2FyRWxlbWVudC5mcm9tRG9tKG5vZGUpXSA6IFtdO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNNdWx0aXBsZVJhbmdlcyA9IHNlbGVjdGlvbiA9PiB7XG4gICAgICByZXR1cm4gZ2V0UmFuZ2VzJDEoc2VsZWN0aW9uKS5sZW5ndGggPiAxO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRDZWxsc0Zyb21SYW5nZXMgPSByYW5nZXMgPT4gZmlsdGVyJDUoZ2V0U2VsZWN0ZWROb2RlcyhyYW5nZXMpLCBpc1RhYmxlQ2VsbCQyKTtcbiAgICBjb25zdCBnZXRDZWxsc0Zyb21FbGVtZW50ID0gZWxtID0+IGRlc2NlbmRhbnRzKGVsbSwgJ3RkW2RhdGEtbWNlLXNlbGVjdGVkXSx0aFtkYXRhLW1jZS1zZWxlY3RlZF0nKTtcbiAgICBjb25zdCBnZXRDZWxsc0Zyb21FbGVtZW50T3JSYW5nZXMgPSAocmFuZ2VzLCBlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZENlbGxzID0gZ2V0Q2VsbHNGcm9tRWxlbWVudChlbGVtZW50KTtcbiAgICAgIHJldHVybiBzZWxlY3RlZENlbGxzLmxlbmd0aCA+IDAgPyBzZWxlY3RlZENlbGxzIDogZ2V0Q2VsbHNGcm9tUmFuZ2VzKHJhbmdlcyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRDZWxsc0Zyb21FZGl0b3IgPSBlZGl0b3IgPT4gZ2V0Q2VsbHNGcm9tRWxlbWVudE9yUmFuZ2VzKGdldFJhbmdlcyQxKGVkaXRvci5zZWxlY3Rpb24uZ2V0U2VsKCkpLCBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKSk7XG4gICAgY29uc3QgZ2V0Q2xvc2VzdFRhYmxlID0gKGNlbGwsIGlzUm9vdCkgPT4gYW5jZXN0b3IkMyhjZWxsLCAndGFibGUnLCBpc1Jvb3QpO1xuXG4gICAgY29uc3QgZ2V0U3RhcnROb2RlID0gcm5nID0+IHtcbiAgICAgIGNvbnN0IHNjID0gcm5nLnN0YXJ0Q29udGFpbmVyLCBzbyA9IHJuZy5zdGFydE9mZnNldDtcbiAgICAgIGlmIChpc1RleHQkYShzYykpIHtcbiAgICAgICAgcmV0dXJuIHNvID09PSAwID8gT3B0aW9uYWwuc29tZShTdWdhckVsZW1lbnQuZnJvbURvbShzYykpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oc2MuY2hpbGROb2Rlc1tzb10pLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRFbmROb2RlID0gcm5nID0+IHtcbiAgICAgIGNvbnN0IGVjID0gcm5nLmVuZENvbnRhaW5lciwgZW8gPSBybmcuZW5kT2Zmc2V0O1xuICAgICAgaWYgKGlzVGV4dCRhKGVjKSkge1xuICAgICAgICByZXR1cm4gZW8gPT09IGVjLmRhdGEubGVuZ3RoID8gT3B0aW9uYWwuc29tZShTdWdhckVsZW1lbnQuZnJvbURvbShlYykpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oZWMuY2hpbGROb2Rlc1tlbyAtIDFdKS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ2V0Rmlyc3RDaGlsZHJlbiA9IG5vZGUgPT4ge1xuICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQobm9kZSkuZm9sZChjb25zdGFudChbbm9kZV0pLCBjaGlsZCA9PiB7XG4gICAgICAgIHJldHVybiBbbm9kZV0uY29uY2F0KGdldEZpcnN0Q2hpbGRyZW4oY2hpbGQpKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0TGFzdENoaWxkcmVuID0gbm9kZSA9PiB7XG4gICAgICByZXR1cm4gbGFzdENoaWxkKG5vZGUpLmZvbGQoY29uc3RhbnQoW25vZGVdKSwgY2hpbGQgPT4ge1xuICAgICAgICBpZiAobmFtZShjaGlsZCkgPT09ICdicicpIHtcbiAgICAgICAgICByZXR1cm4gcHJldlNpYmxpbmcoY2hpbGQpLm1hcChzaWJsaW5nID0+IHtcbiAgICAgICAgICAgIHJldHVybiBbbm9kZV0uY29uY2F0KGdldExhc3RDaGlsZHJlbihzaWJsaW5nKSk7XG4gICAgICAgICAgfSkuZ2V0T3IoW10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBbbm9kZV0uY29uY2F0KGdldExhc3RDaGlsZHJlbihjaGlsZCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGhhc0FsbENvbnRlbnRzU2VsZWN0ZWQgPSAoZWxtLCBybmcpID0+IHtcbiAgICAgIHJldHVybiBsaWZ0MihnZXRTdGFydE5vZGUocm5nKSwgZ2V0RW5kTm9kZShybmcpLCAoc3RhcnROb2RlLCBlbmROb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gZmluZCQyKGdldEZpcnN0Q2hpbGRyZW4oZWxtKSwgY3VycnkoZXEsIHN0YXJ0Tm9kZSkpO1xuICAgICAgICBjb25zdCBlbmQgPSBmaW5kJDIoZ2V0TGFzdENoaWxkcmVuKGVsbSksIGN1cnJ5KGVxLCBlbmROb2RlKSk7XG4gICAgICAgIHJldHVybiBzdGFydC5pc1NvbWUoKSAmJiBlbmQuaXNTb21lKCk7XG4gICAgICB9KS5nZXRPcihmYWxzZSk7XG4gICAgfTtcbiAgICBjb25zdCBtb3ZlRW5kUG9pbnQgPSAoZG9tLCBybmcsIG5vZGUsIHN0YXJ0KSA9PiB7XG4gICAgICBjb25zdCByb290ID0gbm9kZTtcbiAgICAgIGNvbnN0IHdhbGtlciA9IG5ldyBEb21UcmVlV2Fsa2VyKG5vZGUsIHJvb3QpO1xuICAgICAgY29uc3QgbW92ZUNhcmV0QmVmb3JlT25FbnRlckVsZW1lbnRzTWFwID0gZmlsdGVyJDQoZG9tLnNjaGVtYS5nZXRNb3ZlQ2FyZXRCZWZvcmVPbkVudGVyRWxlbWVudHMoKSwgKF8sIG5hbWUpID0+ICFjb250YWlucyQyKFtcbiAgICAgICAgJ3RkJyxcbiAgICAgICAgJ3RoJyxcbiAgICAgICAgJ3RhYmxlJ1xuICAgICAgXSwgbmFtZS50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICBsZXQgY3VycmVudE5vZGUgPSBub2RlO1xuICAgICAgZG8ge1xuICAgICAgICBpZiAoaXNUZXh0JGEoY3VycmVudE5vZGUpICYmIFRvb2xzLnRyaW0oY3VycmVudE5vZGUuZGF0YSkubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgICAgICBybmcuc2V0U3RhcnQoY3VycmVudE5vZGUsIDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBybmcuc2V0RW5kKGN1cnJlbnROb2RlLCBjdXJyZW50Tm9kZS5kYXRhLmxlbmd0aCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW92ZUNhcmV0QmVmb3JlT25FbnRlckVsZW1lbnRzTWFwW2N1cnJlbnROb2RlLm5vZGVOYW1lXSkge1xuICAgICAgICAgIGlmIChzdGFydCkge1xuICAgICAgICAgICAgcm5nLnNldFN0YXJ0QmVmb3JlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlLm5vZGVOYW1lID09PSAnQlInKSB7XG4gICAgICAgICAgICAgIHJuZy5zZXRFbmRCZWZvcmUoY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm5nLnNldEVuZEFmdGVyKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IHdoaWxlIChjdXJyZW50Tm9kZSA9IHN0YXJ0ID8gd2Fsa2VyLm5leHQoKSA6IHdhbGtlci5wcmV2KCkpO1xuICAgICAgaWYgKHJvb3Qubm9kZU5hbWUgPT09ICdCT0RZJykge1xuICAgICAgICBpZiAoc3RhcnQpIHtcbiAgICAgICAgICBybmcuc2V0U3RhcnQocm9vdCwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcm5nLnNldEVuZChyb290LCByb290LmNoaWxkTm9kZXMubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaGFzQW55UmFuZ2VzID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHNlbCA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0U2VsKCk7XG4gICAgICByZXR1cm4gaXNOb25OdWxsYWJsZShzZWwpICYmIHNlbC5yYW5nZUNvdW50ID4gMDtcbiAgICB9O1xuICAgIGNvbnN0IHJ1bk9uUmFuZ2VzID0gKGVkaXRvciwgZXhlY3V0b3IpID0+IHtcbiAgICAgIGNvbnN0IGZha2VTZWxlY3Rpb25Ob2RlcyA9IGdldENlbGxzRnJvbUVkaXRvcihlZGl0b3IpO1xuICAgICAgaWYgKGZha2VTZWxlY3Rpb25Ob2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVhY2gkZShmYWtlU2VsZWN0aW9uTm9kZXMsIGVsZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBlbGVtLmRvbTtcbiAgICAgICAgICBjb25zdCBmYWtlTm9kZVJuZyA9IGVkaXRvci5kb20uY3JlYXRlUm5nKCk7XG4gICAgICAgICAgZmFrZU5vZGVSbmcuc2V0U3RhcnRCZWZvcmUobm9kZSk7XG4gICAgICAgICAgZmFrZU5vZGVSbmcuc2V0RW5kQWZ0ZXIobm9kZSk7XG4gICAgICAgICAgZXhlY3V0b3IoZmFrZU5vZGVSbmcsIHRydWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4ZWN1dG9yKGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCksIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHByZXNlcnZlID0gKHNlbGVjdGlvbiwgZmlsbEJvb2ttYXJrLCBleGVjdXRvcikgPT4ge1xuICAgICAgY29uc3QgYm9va21hcmsgPSBnZXRQZXJzaXN0ZW50Qm9va21hcmsoc2VsZWN0aW9uLCBmaWxsQm9va21hcmspO1xuICAgICAgZXhlY3V0b3IoYm9va21hcmspO1xuICAgICAgc2VsZWN0aW9uLm1vdmVUb0Jvb2ttYXJrKGJvb2ttYXJrKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNOb2RlID0gbm9kZSA9PiBpc051bWJlcihub2RlID09PSBudWxsIHx8IG5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG5vZGUubm9kZVR5cGUpO1xuICAgIGNvbnN0IGlzRWxlbWVudE5vZGUkMSA9IG5vZGUgPT4gaXNFbGVtZW50JDYobm9kZSkgJiYgIWlzQm9va21hcmtOb2RlJDEobm9kZSkgJiYgIWlzQ2FyZXROb2RlKG5vZGUpICYmICFpc0JvZ3VzJDIobm9kZSk7XG4gICAgY29uc3QgaXNFbGVtZW50RGlyZWN0bHlTZWxlY3RlZCA9IChkb20sIG5vZGUpID0+IHtcbiAgICAgIGlmIChpc0VsZW1lbnROb2RlJDEobm9kZSkgJiYgIS9eKFREfFRIKSQvLnRlc3Qobm9kZS5ub2RlTmFtZSkpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRBdHRyID0gZG9tLmdldEF0dHJpYihub2RlLCAnZGF0YS1tY2Utc2VsZWN0ZWQnKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZUludChzZWxlY3RlZEF0dHIsIDEwKTtcbiAgICAgICAgcmV0dXJuICFpc05hTih2YWx1ZSkgJiYgdmFsdWUgPiAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNFZGl0YWJsZSQyID0gZWxtID0+IGVsbS5pc0NvbnRlbnRFZGl0YWJsZSA9PT0gdHJ1ZTtcbiAgICBjb25zdCBwcmVzZXJ2ZVNlbGVjdGlvbiA9IChlZGl0b3IsIGFjdGlvbiwgc2hvdWxkTW92ZVN0YXJ0KSA9PiB7XG4gICAgICBjb25zdCB7c2VsZWN0aW9uLCBkb219ID0gZWRpdG9yO1xuICAgICAgY29uc3Qgc2VsZWN0ZWROb2RlQmVmb3JlQWN0aW9uID0gc2VsZWN0aW9uLmdldE5vZGUoKTtcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWRCZWZvcmVOb2RlTm9uZWRpdGFibGUgPSBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJGIoc2VsZWN0ZWROb2RlQmVmb3JlQWN0aW9uKTtcbiAgICAgIHByZXNlcnZlKHNlbGVjdGlvbiwgdHJ1ZSwgKCkgPT4ge1xuICAgICAgICBhY3Rpb24oKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaXNCZWZvcmVOb2RlU3RpbGxOb25lZGl0YWJsZSA9IGlzU2VsZWN0ZWRCZWZvcmVOb2RlTm9uZWRpdGFibGUgJiYgaXNDb250ZW50RWRpdGFibGVGYWxzZSRiKHNlbGVjdGVkTm9kZUJlZm9yZUFjdGlvbik7XG4gICAgICBpZiAoaXNCZWZvcmVOb2RlU3RpbGxOb25lZGl0YWJsZSAmJiBkb20uaXNDaGlsZE9mKHNlbGVjdGVkTm9kZUJlZm9yZUFjdGlvbiwgZWRpdG9yLmdldEJvZHkoKSkpIHtcbiAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3Qoc2VsZWN0ZWROb2RlQmVmb3JlQWN0aW9uKTtcbiAgICAgIH0gZWxzZSBpZiAoc2hvdWxkTW92ZVN0YXJ0KHNlbGVjdGlvbi5nZXRTdGFydCgpKSkge1xuICAgICAgICBtb3ZlU3RhcnRUb05lYXJlc3RUZXh0KGRvbSwgc2VsZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1vdmVTdGFydFRvTmVhcmVzdFRleHQgPSAoZG9tLCBzZWxlY3Rpb24pID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICBjb25zdCBybmcgPSBzZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBjb25zdCB7c3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0fSA9IHJuZztcbiAgICAgIGNvbnN0IHNlbGVjdGVkTm9kZSA9IHNlbGVjdGlvbi5nZXROb2RlKCk7XG4gICAgICBpZiAoaXNFbGVtZW50RGlyZWN0bHlTZWxlY3RlZChkb20sIHNlbGVjdGVkTm9kZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGlzRWxlbWVudCQ2KHN0YXJ0Q29udGFpbmVyKSkge1xuICAgICAgICBjb25zdCBub2RlcyA9IHN0YXJ0Q29udGFpbmVyLmNoaWxkTm9kZXM7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBkb20uZ2V0Um9vdCgpO1xuICAgICAgICBsZXQgd2Fsa2VyO1xuICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPCBub2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBzdGFydE5vZGUgPSBub2Rlc1tzdGFydE9mZnNldF07XG4gICAgICAgICAgd2Fsa2VyID0gbmV3IERvbVRyZWVXYWxrZXIoc3RhcnROb2RlLCAoX2EgPSBkb20uZ2V0UGFyZW50KHN0YXJ0Tm9kZSwgZG9tLmlzQmxvY2spKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiByb290KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdGFydE5vZGUgPSBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICB3YWxrZXIgPSBuZXcgRG9tVHJlZVdhbGtlcihzdGFydE5vZGUsIChfYiA9IGRvbS5nZXRQYXJlbnQoc3RhcnROb2RlLCBkb20uaXNCbG9jaykpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHJvb3QpO1xuICAgICAgICAgIHdhbGtlci5uZXh0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IG5vZGUgPSB3YWxrZXIuY3VycmVudCgpOyBub2RlOyBub2RlID0gd2Fsa2VyLm5leHQoKSkge1xuICAgICAgICAgIGlmIChkb20uZ2V0Q29udGVudEVkaXRhYmxlKG5vZGUpID09PSAnZmFsc2UnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1RleHQkYShub2RlKSAmJiAhaXNXaGl0ZVNwYWNlTm9kZSQxKG5vZGUpKSB7XG4gICAgICAgICAgICBybmcuc2V0U3RhcnQobm9kZSwgMCk7XG4gICAgICAgICAgICBzZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXROb25XaGl0ZVNwYWNlU2libGluZyA9IChub2RlLCBuZXh0LCBpbmMpID0+IHtcbiAgICAgIGlmIChub2RlKSB7XG4gICAgICAgIGNvbnN0IG5leHROYW1lID0gbmV4dCA/ICduZXh0U2libGluZycgOiAncHJldmlvdXNTaWJsaW5nJztcbiAgICAgICAgZm9yIChub2RlID0gaW5jID8gbm9kZSA6IG5vZGVbbmV4dE5hbWVdOyBub2RlOyBub2RlID0gbm9kZVtuZXh0TmFtZV0pIHtcbiAgICAgICAgICBpZiAoaXNFbGVtZW50JDYobm9kZSkgfHwgIWlzV2hpdGVTcGFjZU5vZGUkMShub2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgY29uc3QgaXNUZXh0QmxvY2skMSA9IChzY2hlbWEsIG5vZGUpID0+ICEhc2NoZW1hLmdldFRleHRCbG9ja0VsZW1lbnRzKClbbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSB8fCBpc1RyYW5zcGFyZW50QmxvY2soc2NoZW1hLCBub2RlKTtcbiAgICBjb25zdCBpc1ZhbGlkID0gKGVkLCBwYXJlbnQsIGNoaWxkKSA9PiB7XG4gICAgICByZXR1cm4gZWQuc2NoZW1hLmlzVmFsaWRDaGlsZChwYXJlbnQsIGNoaWxkKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzV2hpdGVTcGFjZU5vZGUkMSA9IChub2RlLCBhbGxvd1NwYWNlcyA9IGZhbHNlKSA9PiB7XG4gICAgICBpZiAoaXNOb25OdWxsYWJsZShub2RlKSAmJiBpc1RleHQkYShub2RlKSkge1xuICAgICAgICBjb25zdCBkYXRhID0gYWxsb3dTcGFjZXMgPyBub2RlLmRhdGEucmVwbGFjZSgvIC9nLCAnXFx4QTAnKSA6IG5vZGUuZGF0YTtcbiAgICAgICAgcmV0dXJuIGlzV2hpdGVzcGFjZVRleHQoZGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc0VtcHR5VGV4dE5vZGUkMSA9IG5vZGUgPT4ge1xuICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUobm9kZSkgJiYgaXNUZXh0JGEobm9kZSkgJiYgbm9kZS5sZW5ndGggPT09IDA7XG4gICAgfTtcbiAgICBjb25zdCBpc1dyYXBOb25lZGl0YWJsZVRhcmdldCA9IChlZGl0b3IsIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IGJhc2VEYXRhU2VsZWN0b3IgPSAnW2RhdGEtbWNlLWNlZi13cmFwcGFibGVdJztcbiAgICAgIGNvbnN0IGZvcm1hdE5vbmVkaXRhYmxlU2VsZWN0b3IgPSBnZXRGb3JtYXROb25lZGl0YWJsZVNlbGVjdG9yKGVkaXRvcik7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IGlzRW1wdHkkMyhmb3JtYXROb25lZGl0YWJsZVNlbGVjdG9yKSA/IGJhc2VEYXRhU2VsZWN0b3IgOiBgJHsgYmFzZURhdGFTZWxlY3RvciB9LCR7IGZvcm1hdE5vbmVkaXRhYmxlU2VsZWN0b3IgfWA7XG4gICAgICByZXR1cm4gaXMkMShTdWdhckVsZW1lbnQuZnJvbURvbShub2RlKSwgc2VsZWN0b3IpO1xuICAgIH07XG4gICAgY29uc3QgaXNXcmFwcGFibGVOb25lZGl0YWJsZSA9IChlZGl0b3IsIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICByZXR1cm4gaXNFbGVtZW50Tm9kZSQxKG5vZGUpICYmIGRvbS5nZXRDb250ZW50RWRpdGFibGUobm9kZSkgPT09ICdmYWxzZScgJiYgaXNXcmFwTm9uZWRpdGFibGVUYXJnZXQoZWRpdG9yLCBub2RlKSAmJiBkb20uc2VsZWN0KCdbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXScsIG5vZGUpLmxlbmd0aCA9PT0gMDtcbiAgICB9O1xuICAgIGNvbnN0IHJlcGxhY2VWYXJzID0gKHZhbHVlLCB2YXJzKSA9PiB7XG4gICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlKHZhcnMpO1xuICAgICAgfSBlbHNlIGlmIChpc05vbk51bGxhYmxlKHZhcnMpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvJShcXHcrKS9nLCAoc3RyLCBuYW1lKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHZhcnNbbmFtZV0gfHwgc3RyO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIGNvbnN0IGlzRXEkNSA9IChzdHIxLCBzdHIyKSA9PiB7XG4gICAgICBzdHIxID0gc3RyMSB8fCAnJztcbiAgICAgIHN0cjIgPSBzdHIyIHx8ICcnO1xuICAgICAgc3RyMSA9ICcnICsgKHN0cjEubm9kZU5hbWUgfHwgc3RyMSk7XG4gICAgICBzdHIyID0gJycgKyAoc3RyMi5ub2RlTmFtZSB8fCBzdHIyKTtcbiAgICAgIHJldHVybiBzdHIxLnRvTG93ZXJDYXNlKCkgPT09IHN0cjIudG9Mb3dlckNhc2UoKTtcbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZVN0eWxlVmFsdWUgPSAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgIGlmIChpc051bGxhYmxlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBzdHJWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIGlmIChuYW1lID09PSAnY29sb3InIHx8IG5hbWUgPT09ICdiYWNrZ3JvdW5kQ29sb3InKSB7XG4gICAgICAgICAgc3RyVmFsdWUgPSByZ2JhVG9IZXhTdHJpbmcoc3RyVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lID09PSAnZm9udFdlaWdodCcgJiYgdmFsdWUgPT09IDcwMCkge1xuICAgICAgICAgIHN0clZhbHVlID0gJ2JvbGQnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lID09PSAnZm9udEZhbWlseScpIHtcbiAgICAgICAgICBzdHJWYWx1ZSA9IHN0clZhbHVlLnJlcGxhY2UoL1tcXCdcXFwiXS9nLCAnJykucmVwbGFjZSgvLFxccysvZywgJywnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyVmFsdWU7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRTdHlsZSA9IChkb20sIG5vZGUsIG5hbWUpID0+IHtcbiAgICAgIGNvbnN0IHN0eWxlID0gZG9tLmdldFN0eWxlKG5vZGUsIG5hbWUpO1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZVN0eWxlVmFsdWUoc3R5bGUsIG5hbWUpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0VGV4dERlY29yYXRpb24gPSAoZG9tLCBub2RlKSA9PiB7XG4gICAgICBsZXQgZGVjb3JhdGlvbjtcbiAgICAgIGRvbS5nZXRQYXJlbnQobm9kZSwgbiA9PiB7XG4gICAgICAgIGlmIChpc0VsZW1lbnQkNihuKSkge1xuICAgICAgICAgIGRlY29yYXRpb24gPSBkb20uZ2V0U3R5bGUobiwgJ3RleHQtZGVjb3JhdGlvbicpO1xuICAgICAgICAgIHJldHVybiAhIWRlY29yYXRpb24gJiYgZGVjb3JhdGlvbiAhPT0gJ25vbmUnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGVjb3JhdGlvbjtcbiAgICB9O1xuICAgIGNvbnN0IGdldFBhcmVudHMkMiA9IChkb20sIG5vZGUsIHNlbGVjdG9yKSA9PiB7XG4gICAgICByZXR1cm4gZG9tLmdldFBhcmVudHMobm9kZSwgc2VsZWN0b3IsIGRvbS5nZXRSb290KCkpO1xuICAgIH07XG4gICAgY29uc3QgaXNGb3JtYXRQcmVkaWNhdGUgPSAoZWRpdG9yLCBmb3JtYXROYW1lLCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdHMgPSBlZGl0b3IuZm9ybWF0dGVyLmdldChmb3JtYXROYW1lKTtcbiAgICAgIHJldHVybiBpc05vbk51bGxhYmxlKGZvcm1hdHMpICYmIGV4aXN0cyhmb3JtYXRzLCBwcmVkaWNhdGUpO1xuICAgIH07XG4gICAgY29uc3QgaXNWYXJpYWJsZUZvcm1hdE5hbWUgPSAoZWRpdG9yLCBmb3JtYXROYW1lKSA9PiB7XG4gICAgICBjb25zdCBoYXNWYXJpYWJsZVZhbHVlcyA9IGZvcm1hdCA9PiB7XG4gICAgICAgIGNvbnN0IGlzVmFyaWFibGVWYWx1ZSA9IHZhbCA9PiBpc0Z1bmN0aW9uKHZhbCkgfHwgdmFsLmxlbmd0aCA+IDEgJiYgdmFsLmNoYXJBdCgwKSA9PT0gJyUnO1xuICAgICAgICByZXR1cm4gZXhpc3RzKFtcbiAgICAgICAgICAnc3R5bGVzJyxcbiAgICAgICAgICAnYXR0cmlidXRlcydcbiAgICAgICAgXSwga2V5ID0+IGdldCRhKGZvcm1hdCwga2V5KS5leGlzdHMoZmllbGQgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWVzID0gaXNBcnJheSQxKGZpZWxkKSA/IGZpZWxkIDogdmFsdWVzKGZpZWxkKTtcbiAgICAgICAgICByZXR1cm4gZXhpc3RzKGZpZWxkVmFsdWVzLCBpc1ZhcmlhYmxlVmFsdWUpO1xuICAgICAgICB9KSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGlzRm9ybWF0UHJlZGljYXRlKGVkaXRvciwgZm9ybWF0TmFtZSwgaGFzVmFyaWFibGVWYWx1ZXMpO1xuICAgIH07XG4gICAgY29uc3QgYXJlU2ltaWxhckZvcm1hdHMgPSAoZWRpdG9yLCBmb3JtYXROYW1lLCBvdGhlckZvcm1hdE5hbWUpID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkS2V5cyA9IFtcbiAgICAgICAgJ2lubGluZScsXG4gICAgICAgICdibG9jaycsXG4gICAgICAgICdzZWxlY3RvcicsXG4gICAgICAgICdhdHRyaWJ1dGVzJyxcbiAgICAgICAgJ3N0eWxlcycsXG4gICAgICAgICdjbGFzc2VzJ1xuICAgICAgXTtcbiAgICAgIGNvbnN0IGZpbHRlck9iaiA9IGZvcm1hdCA9PiBmaWx0ZXIkNChmb3JtYXQsIChfLCBrZXkpID0+IGV4aXN0cyh2YWxpZEtleXMsIHZhbGlkS2V5ID0+IHZhbGlkS2V5ID09PSBrZXkpKTtcbiAgICAgIHJldHVybiBpc0Zvcm1hdFByZWRpY2F0ZShlZGl0b3IsIGZvcm1hdE5hbWUsIGZtdDEgPT4ge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEZtdDEgPSBmaWx0ZXJPYmooZm10MSk7XG4gICAgICAgIHJldHVybiBpc0Zvcm1hdFByZWRpY2F0ZShlZGl0b3IsIG90aGVyRm9ybWF0TmFtZSwgZm10MiA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRGbXQyID0gZmlsdGVyT2JqKGZtdDIpO1xuICAgICAgICAgIHJldHVybiBlcXVhbCQxKGZpbHRlcmVkRm10MSwgZmlsdGVyZWRGbXQyKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQmxvY2tGb3JtYXQgPSBmb3JtYXQgPT4gaGFzTm9uTnVsbGFibGVLZXkoZm9ybWF0LCAnYmxvY2snKTtcbiAgICBjb25zdCBpc1dyYXBwaW5nQmxvY2tGb3JtYXQgPSBmb3JtYXQgPT4gaXNCbG9ja0Zvcm1hdChmb3JtYXQpICYmIGZvcm1hdC53cmFwcGVyID09PSB0cnVlO1xuICAgIGNvbnN0IGlzTm9uV3JhcHBpbmdCbG9ja0Zvcm1hdCA9IGZvcm1hdCA9PiBpc0Jsb2NrRm9ybWF0KGZvcm1hdCkgJiYgZm9ybWF0LndyYXBwZXIgIT09IHRydWU7XG4gICAgY29uc3QgaXNTZWxlY3RvckZvcm1hdCA9IGZvcm1hdCA9PiBoYXNOb25OdWxsYWJsZUtleShmb3JtYXQsICdzZWxlY3RvcicpO1xuICAgIGNvbnN0IGlzSW5saW5lRm9ybWF0ID0gZm9ybWF0ID0+IGhhc05vbk51bGxhYmxlS2V5KGZvcm1hdCwgJ2lubGluZScpO1xuICAgIGNvbnN0IGlzTWl4ZWRGb3JtYXQgPSBmb3JtYXQgPT4gaXNTZWxlY3RvckZvcm1hdChmb3JtYXQpICYmIGlzSW5saW5lRm9ybWF0KGZvcm1hdCkgJiYgaXMkMihnZXQkYShmb3JtYXQsICdtaXhlZCcpLCB0cnVlKTtcbiAgICBjb25zdCBzaG91bGRFeHBhbmRUb1NlbGVjdG9yID0gZm9ybWF0ID0+IGlzU2VsZWN0b3JGb3JtYXQoZm9ybWF0KSAmJiBmb3JtYXQuZXhwYW5kICE9PSBmYWxzZSAmJiAhaXNJbmxpbmVGb3JtYXQoZm9ybWF0KTtcblxuICAgIGNvbnN0IGlzQm9va21hcmtOb2RlID0gaXNCb29rbWFya05vZGUkMTtcbiAgICBjb25zdCBnZXRQYXJlbnRzJDEgPSBnZXRQYXJlbnRzJDI7XG4gICAgY29uc3QgaXNXaGl0ZVNwYWNlTm9kZSA9IGlzV2hpdGVTcGFjZU5vZGUkMTtcbiAgICBjb25zdCBpc1RleHRCbG9jayA9IGlzVGV4dEJsb2NrJDE7XG4gICAgY29uc3QgaXNCb2d1c0JyID0gbm9kZSA9PiB7XG4gICAgICByZXR1cm4gaXNCciQ2KG5vZGUpICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLW1jZS1ib2d1cycpICYmICFub2RlLm5leHRTaWJsaW5nO1xuICAgIH07XG4gICAgY29uc3QgZmluZFBhcmVudENvbnRlbnRFZGl0YWJsZSA9IChkb20sIG5vZGUpID0+IHtcbiAgICAgIGxldCBwYXJlbnQgPSBub2RlO1xuICAgICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgICBpZiAoaXNFbGVtZW50JDYocGFyZW50KSAmJiBkb20uZ2V0Q29udGVudEVkaXRhYmxlKHBhcmVudCkpIHtcbiAgICAgICAgICByZXR1cm4gZG9tLmdldENvbnRlbnRFZGl0YWJsZShwYXJlbnQpID09PSAnZmFsc2UnID8gcGFyZW50IDogbm9kZTtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlO1xuICAgIH07XG4gICAgY29uc3Qgd2Fsa1RleHQgPSAoc3RhcnQsIG5vZGUsIG9mZnNldCwgcHJlZGljYXRlKSA9PiB7XG4gICAgICBjb25zdCBzdHIgPSBub2RlLmRhdGE7XG4gICAgICBpZiAoc3RhcnQpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IG9mZnNldDsgaSA+IDA7IGktLSkge1xuICAgICAgICAgIGlmIChwcmVkaWNhdGUoc3RyLmNoYXJBdChpIC0gMSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGkgPSBvZmZzZXQ7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAocHJlZGljYXRlKHN0ci5jaGFyQXQoaSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRTcGFjZSA9IChzdGFydCwgbm9kZSwgb2Zmc2V0KSA9PiB3YWxrVGV4dChzdGFydCwgbm9kZSwgb2Zmc2V0LCBjID0+IGlzTmJzcChjKSB8fCBpc1doaXRlU3BhY2UoYykpO1xuICAgIGNvbnN0IGZpbmRDb250ZW50ID0gKHN0YXJ0LCBub2RlLCBvZmZzZXQpID0+IHdhbGtUZXh0KHN0YXJ0LCBub2RlLCBvZmZzZXQsIGlzQ29udGVudCk7XG4gICAgY29uc3QgZmluZFdvcmRFbmRQb2ludCA9IChkb20sIGJvZHksIGNvbnRhaW5lciwgb2Zmc2V0LCBzdGFydCwgaW5jbHVkZVRyYWlsaW5nU3BhY2VzKSA9PiB7XG4gICAgICBsZXQgbGFzdFRleHROb2RlO1xuICAgICAgY29uc3Qgcm9vdE5vZGUgPSBkb20uZ2V0UGFyZW50KGNvbnRhaW5lciwgZG9tLmlzQmxvY2spIHx8IGJvZHk7XG4gICAgICBjb25zdCB3YWxrID0gKGNvbnRhaW5lciwgb2Zmc2V0LCBwcmVkKSA9PiB7XG4gICAgICAgIGNvbnN0IHRleHRTZWVrZXIgPSBUZXh0U2Vla2VyKGRvbSk7XG4gICAgICAgIGNvbnN0IHdhbGtlciA9IHN0YXJ0ID8gdGV4dFNlZWtlci5iYWNrd2FyZHMgOiB0ZXh0U2Vla2VyLmZvcndhcmRzO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbSh3YWxrZXIoY29udGFpbmVyLCBvZmZzZXQsICh0ZXh0LCB0ZXh0T2Zmc2V0KSA9PiB7XG4gICAgICAgICAgaWYgKGlzQm9va21hcmtOb2RlKHRleHQucGFyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGFzdFRleHROb2RlID0gdGV4dDtcbiAgICAgICAgICAgIHJldHVybiBwcmVkKHN0YXJ0LCB0ZXh0LCB0ZXh0T2Zmc2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHJvb3ROb2RlKSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc3BhY2VSZXN1bHQgPSB3YWxrKGNvbnRhaW5lciwgb2Zmc2V0LCBmaW5kU3BhY2UpO1xuICAgICAgcmV0dXJuIHNwYWNlUmVzdWx0LmJpbmQocmVzdWx0ID0+IGluY2x1ZGVUcmFpbGluZ1NwYWNlcyA/IHdhbGsocmVzdWx0LmNvbnRhaW5lciwgcmVzdWx0Lm9mZnNldCArIChzdGFydCA/IC0xIDogMCksIGZpbmRDb250ZW50KSA6IE9wdGlvbmFsLnNvbWUocmVzdWx0KSkub3JUaHVuaygoKSA9PiBsYXN0VGV4dE5vZGUgPyBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgY29udGFpbmVyOiBsYXN0VGV4dE5vZGUsXG4gICAgICAgIG9mZnNldDogc3RhcnQgPyAwIDogbGFzdFRleHROb2RlLmxlbmd0aFxuICAgICAgfSkgOiBPcHRpb25hbC5ub25lKCkpO1xuICAgIH07XG4gICAgY29uc3QgZmluZFNlbGVjdG9yRW5kUG9pbnQgPSAoZG9tLCBmb3JtYXRMaXN0LCBybmcsIGNvbnRhaW5lciwgc2libGluZ05hbWUpID0+IHtcbiAgICAgIGNvbnN0IHNpYmxpbmcgPSBjb250YWluZXJbc2libGluZ05hbWVdO1xuICAgICAgaWYgKGlzVGV4dCRhKGNvbnRhaW5lcikgJiYgaXNFbXB0eSQzKGNvbnRhaW5lci5kYXRhKSAmJiBzaWJsaW5nKSB7XG4gICAgICAgIGNvbnRhaW5lciA9IHNpYmxpbmc7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJlbnRzID0gZ2V0UGFyZW50cyQxKGRvbSwgY29udGFpbmVyKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGZvcm1hdExpc3QubGVuZ3RoOyB5KyspIHtcbiAgICAgICAgICBjb25zdCBjdXJGb3JtYXQgPSBmb3JtYXRMaXN0W3ldO1xuICAgICAgICAgIGlmIChpc05vbk51bGxhYmxlKGN1ckZvcm1hdC5jb2xsYXBzZWQpICYmIGN1ckZvcm1hdC5jb2xsYXBzZWQgIT09IHJuZy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNTZWxlY3RvckZvcm1hdChjdXJGb3JtYXQpICYmIGRvbS5pcyhwYXJlbnRzW2ldLCBjdXJGb3JtYXQuc2VsZWN0b3IpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50c1tpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kQmxvY2tFbmRQb2ludCA9IChkb20sIGZvcm1hdExpc3QsIGNvbnRhaW5lciwgc2libGluZ05hbWUpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGxldCBub2RlID0gY29udGFpbmVyO1xuICAgICAgY29uc3Qgcm9vdCA9IGRvbS5nZXRSb290KCk7XG4gICAgICBjb25zdCBmb3JtYXQgPSBmb3JtYXRMaXN0WzBdO1xuICAgICAgaWYgKGlzQmxvY2tGb3JtYXQoZm9ybWF0KSkge1xuICAgICAgICBub2RlID0gZm9ybWF0LndyYXBwZXIgPyBudWxsIDogZG9tLmdldFBhcmVudChjb250YWluZXIsIGZvcm1hdC5ibG9jaywgcm9vdCk7XG4gICAgICB9XG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgY29uc3Qgc2NvcGVSb290ID0gKF9hID0gZG9tLmdldFBhcmVudChjb250YWluZXIsICdMSSxURCxUSCcpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiByb290O1xuICAgICAgICBub2RlID0gZG9tLmdldFBhcmVudChpc1RleHQkYShjb250YWluZXIpID8gY29udGFpbmVyLnBhcmVudE5vZGUgOiBjb250YWluZXIsIG5vZGUgPT4gbm9kZSAhPT0gcm9vdCAmJiBpc1RleHRCbG9jayhkb20uc2NoZW1hLCBub2RlKSwgc2NvcGVSb290KTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlICYmIGlzQmxvY2tGb3JtYXQoZm9ybWF0KSAmJiBmb3JtYXQud3JhcHBlcikge1xuICAgICAgICBub2RlID0gZ2V0UGFyZW50cyQxKGRvbSwgbm9kZSwgJ3VsLG9sJykucmV2ZXJzZSgpWzBdIHx8IG5vZGU7XG4gICAgICB9XG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgbm9kZSA9IGNvbnRhaW5lcjtcbiAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZVtzaWJsaW5nTmFtZV0gJiYgIWRvbS5pc0Jsb2NrKG5vZGVbc2libGluZ05hbWVdKSkge1xuICAgICAgICAgIG5vZGUgPSBub2RlW3NpYmxpbmdOYW1lXTtcbiAgICAgICAgICBpZiAoaXNFcSQ1KG5vZGUsICdicicpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlIHx8IGNvbnRhaW5lcjtcbiAgICB9O1xuICAgIGNvbnN0IGlzQXRCbG9ja0JvdW5kYXJ5JDEgPSAoZG9tLCByb290LCBjb250YWluZXIsIHNpYmxpbmdOYW1lKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgIGlmIChpc05vbk51bGxhYmxlKGNvbnRhaW5lcltzaWJsaW5nTmFtZV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAocGFyZW50ID09PSByb290IHx8IGlzTnVsbGFibGUocGFyZW50KSB8fCBkb20uaXNCbG9jayhwYXJlbnQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGlzQXRCbG9ja0JvdW5kYXJ5JDEoZG9tLCByb290LCBwYXJlbnQsIHNpYmxpbmdOYW1lKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRQYXJlbnRDb250YWluZXIgPSAoZG9tLCBmb3JtYXRMaXN0LCBjb250YWluZXIsIG9mZnNldCwgc3RhcnQpID0+IHtcbiAgICAgIGxldCBwYXJlbnQgPSBjb250YWluZXI7XG4gICAgICBjb25zdCBzaWJsaW5nTmFtZSA9IHN0YXJ0ID8gJ3ByZXZpb3VzU2libGluZycgOiAnbmV4dFNpYmxpbmcnO1xuICAgICAgY29uc3Qgcm9vdCA9IGRvbS5nZXRSb290KCk7XG4gICAgICBpZiAoaXNUZXh0JGEoY29udGFpbmVyKSAmJiAhaXNXaGl0ZVNwYWNlTm9kZShjb250YWluZXIpKSB7XG4gICAgICAgIGlmIChzdGFydCA/IG9mZnNldCA+IDAgOiBvZmZzZXQgPCBjb250YWluZXIuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgIGlmICghZm9ybWF0TGlzdFswXS5ibG9ja19leHBhbmQgJiYgZG9tLmlzQmxvY2socGFyZW50KSkge1xuICAgICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgc2libGluZyA9IHBhcmVudFtzaWJsaW5nTmFtZV07IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nW3NpYmxpbmdOYW1lXSkge1xuICAgICAgICAgIGNvbnN0IGFsbG93U3BhY2VzID0gaXNUZXh0JGEoc2libGluZykgJiYgIWlzQXRCbG9ja0JvdW5kYXJ5JDEoZG9tLCByb290LCBzaWJsaW5nLCBzaWJsaW5nTmFtZSk7XG4gICAgICAgICAgaWYgKCFpc0Jvb2ttYXJrTm9kZShzaWJsaW5nKSAmJiAhaXNCb2d1c0JyKHNpYmxpbmcpICYmICFpc1doaXRlU3BhY2VOb2RlKHNpYmxpbmcsIGFsbG93U3BhY2VzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmVudCA9PT0gcm9vdCB8fCBwYXJlbnQucGFyZW50Tm9kZSA9PT0gcm9vdCkge1xuICAgICAgICAgIGNvbnRhaW5lciA9IHBhcmVudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgfTtcbiAgICBjb25zdCBpc1NlbGZPclBhcmVudEJvb2ttYXJrID0gY29udGFpbmVyID0+IGlzQm9va21hcmtOb2RlKGNvbnRhaW5lci5wYXJlbnROb2RlKSB8fCBpc0Jvb2ttYXJrTm9kZShjb250YWluZXIpO1xuICAgIGNvbnN0IGV4cGFuZFJuZyA9IChkb20sIHJuZywgZm9ybWF0TGlzdCwgaW5jbHVkZVRyYWlsaW5nU3BhY2UgPSBmYWxzZSkgPT4ge1xuICAgICAgbGV0IHtzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQsIGVuZENvbnRhaW5lciwgZW5kT2Zmc2V0fSA9IHJuZztcbiAgICAgIGNvbnN0IGZvcm1hdCA9IGZvcm1hdExpc3RbMF07XG4gICAgICBpZiAoaXNFbGVtZW50JDYoc3RhcnRDb250YWluZXIpICYmIHN0YXJ0Q29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICBzdGFydENvbnRhaW5lciA9IGdldE5vZGUkMShzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQpO1xuICAgICAgICBpZiAoaXNUZXh0JGEoc3RhcnRDb250YWluZXIpKSB7XG4gICAgICAgICAgc3RhcnRPZmZzZXQgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNFbGVtZW50JDYoZW5kQ29udGFpbmVyKSAmJiBlbmRDb250YWluZXIuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgIGVuZENvbnRhaW5lciA9IGdldE5vZGUkMShlbmRDb250YWluZXIsIHJuZy5jb2xsYXBzZWQgPyBlbmRPZmZzZXQgOiBlbmRPZmZzZXQgLSAxKTtcbiAgICAgICAgaWYgKGlzVGV4dCRhKGVuZENvbnRhaW5lcikpIHtcbiAgICAgICAgICBlbmRPZmZzZXQgPSBlbmRDb250YWluZXIuZGF0YS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0YXJ0Q29udGFpbmVyID0gZmluZFBhcmVudENvbnRlbnRFZGl0YWJsZShkb20sIHN0YXJ0Q29udGFpbmVyKTtcbiAgICAgIGVuZENvbnRhaW5lciA9IGZpbmRQYXJlbnRDb250ZW50RWRpdGFibGUoZG9tLCBlbmRDb250YWluZXIpO1xuICAgICAgaWYgKGlzU2VsZk9yUGFyZW50Qm9va21hcmsoc3RhcnRDb250YWluZXIpKSB7XG4gICAgICAgIHN0YXJ0Q29udGFpbmVyID0gaXNCb29rbWFya05vZGUoc3RhcnRDb250YWluZXIpID8gc3RhcnRDb250YWluZXIgOiBzdGFydENvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgICAgICBpZiAocm5nLmNvbGxhcHNlZCkge1xuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyID0gc3RhcnRDb250YWluZXIucHJldmlvdXNTaWJsaW5nIHx8IHN0YXJ0Q29udGFpbmVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyID0gc3RhcnRDb250YWluZXIubmV4dFNpYmxpbmcgfHwgc3RhcnRDb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVGV4dCRhKHN0YXJ0Q29udGFpbmVyKSkge1xuICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gcm5nLmNvbGxhcHNlZCA/IHN0YXJ0Q29udGFpbmVyLmxlbmd0aCA6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpc1NlbGZPclBhcmVudEJvb2ttYXJrKGVuZENvbnRhaW5lcikpIHtcbiAgICAgICAgZW5kQ29udGFpbmVyID0gaXNCb29rbWFya05vZGUoZW5kQ29udGFpbmVyKSA/IGVuZENvbnRhaW5lciA6IGVuZENvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgICAgICBpZiAocm5nLmNvbGxhcHNlZCkge1xuICAgICAgICAgIGVuZENvbnRhaW5lciA9IGVuZENvbnRhaW5lci5uZXh0U2libGluZyB8fCBlbmRDb250YWluZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5kQ29udGFpbmVyID0gZW5kQ29udGFpbmVyLnByZXZpb3VzU2libGluZyB8fCBlbmRDb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVGV4dCRhKGVuZENvbnRhaW5lcikpIHtcbiAgICAgICAgICBlbmRPZmZzZXQgPSBybmcuY29sbGFwc2VkID8gMCA6IGVuZENvbnRhaW5lci5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChybmcuY29sbGFwc2VkKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0UG9pbnQgPSBmaW5kV29yZEVuZFBvaW50KGRvbSwgZG9tLmdldFJvb3QoKSwgc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0LCB0cnVlLCBpbmNsdWRlVHJhaWxpbmdTcGFjZSk7XG4gICAgICAgIHN0YXJ0UG9pbnQuZWFjaCgoe2NvbnRhaW5lciwgb2Zmc2V0fSkgPT4ge1xuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyID0gY29udGFpbmVyO1xuICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5kUG9pbnQgPSBmaW5kV29yZEVuZFBvaW50KGRvbSwgZG9tLmdldFJvb3QoKSwgZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQsIGZhbHNlLCBpbmNsdWRlVHJhaWxpbmdTcGFjZSk7XG4gICAgICAgIGVuZFBvaW50LmVhY2goKHtjb250YWluZXIsIG9mZnNldH0pID0+IHtcbiAgICAgICAgICBlbmRDb250YWluZXIgPSBjb250YWluZXI7XG4gICAgICAgICAgZW5kT2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0lubGluZUZvcm1hdChmb3JtYXQpIHx8IGZvcm1hdC5ibG9ja19leHBhbmQpIHtcbiAgICAgICAgaWYgKCFpc0lubGluZUZvcm1hdChmb3JtYXQpIHx8ICghaXNUZXh0JGEoc3RhcnRDb250YWluZXIpIHx8IHN0YXJ0T2Zmc2V0ID09PSAwKSkge1xuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyID0gZmluZFBhcmVudENvbnRhaW5lcihkb20sIGZvcm1hdExpc3QsIHN0YXJ0Q29udGFpbmVyLCBzdGFydE9mZnNldCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0lubGluZUZvcm1hdChmb3JtYXQpIHx8ICghaXNUZXh0JGEoZW5kQ29udGFpbmVyKSB8fCBlbmRPZmZzZXQgPT09IGVuZENvbnRhaW5lci5kYXRhLmxlbmd0aCkpIHtcbiAgICAgICAgICBlbmRDb250YWluZXIgPSBmaW5kUGFyZW50Q29udGFpbmVyKGRvbSwgZm9ybWF0TGlzdCwgZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHNob3VsZEV4cGFuZFRvU2VsZWN0b3IoZm9ybWF0KSkge1xuICAgICAgICBzdGFydENvbnRhaW5lciA9IGZpbmRTZWxlY3RvckVuZFBvaW50KGRvbSwgZm9ybWF0TGlzdCwgcm5nLCBzdGFydENvbnRhaW5lciwgJ3ByZXZpb3VzU2libGluZycpO1xuICAgICAgICBlbmRDb250YWluZXIgPSBmaW5kU2VsZWN0b3JFbmRQb2ludChkb20sIGZvcm1hdExpc3QsIHJuZywgZW5kQ29udGFpbmVyLCAnbmV4dFNpYmxpbmcnKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0Jsb2NrRm9ybWF0KGZvcm1hdCkgfHwgaXNTZWxlY3RvckZvcm1hdChmb3JtYXQpKSB7XG4gICAgICAgIHN0YXJ0Q29udGFpbmVyID0gZmluZEJsb2NrRW5kUG9pbnQoZG9tLCBmb3JtYXRMaXN0LCBzdGFydENvbnRhaW5lciwgJ3ByZXZpb3VzU2libGluZycpO1xuICAgICAgICBlbmRDb250YWluZXIgPSBmaW5kQmxvY2tFbmRQb2ludChkb20sIGZvcm1hdExpc3QsIGVuZENvbnRhaW5lciwgJ25leHRTaWJsaW5nJyk7XG4gICAgICAgIGlmIChpc0Jsb2NrRm9ybWF0KGZvcm1hdCkpIHtcbiAgICAgICAgICBpZiAoIWRvbS5pc0Jsb2NrKHN0YXJ0Q29udGFpbmVyKSkge1xuICAgICAgICAgICAgc3RhcnRDb250YWluZXIgPSBmaW5kUGFyZW50Q29udGFpbmVyKGRvbSwgZm9ybWF0TGlzdCwgc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0LCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFkb20uaXNCbG9jayhlbmRDb250YWluZXIpKSB7XG4gICAgICAgICAgICBlbmRDb250YWluZXIgPSBmaW5kUGFyZW50Q29udGFpbmVyKGRvbSwgZm9ybWF0TGlzdCwgZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpc0VsZW1lbnQkNihzdGFydENvbnRhaW5lcikgJiYgc3RhcnRDb250YWluZXIucGFyZW50Tm9kZSkge1xuICAgICAgICBzdGFydE9mZnNldCA9IGRvbS5ub2RlSW5kZXgoc3RhcnRDb250YWluZXIpO1xuICAgICAgICBzdGFydENvbnRhaW5lciA9IHN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICB9XG4gICAgICBpZiAoaXNFbGVtZW50JDYoZW5kQ29udGFpbmVyKSAmJiBlbmRDb250YWluZXIucGFyZW50Tm9kZSkge1xuICAgICAgICBlbmRPZmZzZXQgPSBkb20ubm9kZUluZGV4KGVuZENvbnRhaW5lcikgKyAxO1xuICAgICAgICBlbmRDb250YWluZXIgPSBlbmRDb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgICAgICBzdGFydE9mZnNldCxcbiAgICAgICAgZW5kQ29udGFpbmVyLFxuICAgICAgICBlbmRPZmZzZXRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHdhbGskMyA9IChkb20sIHJuZywgY2FsbGJhY2spID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gcm5nLnN0YXJ0T2Zmc2V0O1xuICAgICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSBnZXROb2RlJDEocm5nLnN0YXJ0Q29udGFpbmVyLCBzdGFydE9mZnNldCk7XG4gICAgICBjb25zdCBlbmRPZmZzZXQgPSBybmcuZW5kT2Zmc2V0O1xuICAgICAgY29uc3QgZW5kQ29udGFpbmVyID0gZ2V0Tm9kZSQxKHJuZy5lbmRDb250YWluZXIsIGVuZE9mZnNldCAtIDEpO1xuICAgICAgY29uc3QgZXhjbHVkZSA9IG5vZGVzID0+IHtcbiAgICAgICAgY29uc3QgZmlyc3ROb2RlID0gbm9kZXNbMF07XG4gICAgICAgIGlmIChpc1RleHQkYShmaXJzdE5vZGUpICYmIGZpcnN0Tm9kZSA9PT0gc3RhcnRDb250YWluZXIgJiYgc3RhcnRPZmZzZXQgPj0gZmlyc3ROb2RlLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgbm9kZXMuc3BsaWNlKDAsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3ROb2RlID0gbm9kZXNbbm9kZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmIChlbmRPZmZzZXQgPT09IDAgJiYgbm9kZXMubGVuZ3RoID4gMCAmJiBsYXN0Tm9kZSA9PT0gZW5kQ29udGFpbmVyICYmIGlzVGV4dCRhKGxhc3ROb2RlKSkge1xuICAgICAgICAgIG5vZGVzLnNwbGljZShub2Rlcy5sZW5ndGggLSAxLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZXM7XG4gICAgICB9O1xuICAgICAgY29uc3QgY29sbGVjdFNpYmxpbmdzID0gKG5vZGUsIG5hbWUsIGVuZE5vZGUpID0+IHtcbiAgICAgICAgY29uc3Qgc2libGluZ3MgPSBbXTtcbiAgICAgICAgZm9yICg7IG5vZGUgJiYgbm9kZSAhPT0gZW5kTm9kZTsgbm9kZSA9IG5vZGVbbmFtZV0pIHtcbiAgICAgICAgICBzaWJsaW5ncy5wdXNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaWJsaW5ncztcbiAgICAgIH07XG4gICAgICBjb25zdCBmaW5kRW5kUG9pbnQgPSAobm9kZSwgcm9vdCkgPT4gZG9tLmdldFBhcmVudChub2RlLCBub2RlID0+IG5vZGUucGFyZW50Tm9kZSA9PT0gcm9vdCwgcm9vdCk7XG4gICAgICBjb25zdCB3YWxrQm91bmRhcnkgPSAoc3RhcnROb2RlLCBlbmROb2RlLCBuZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHNpYmxpbmdOYW1lID0gbmV4dCA/ICduZXh0U2libGluZycgOiAncHJldmlvdXNTaWJsaW5nJztcbiAgICAgICAgZm9yIChsZXQgbm9kZSA9IHN0YXJ0Tm9kZSwgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlOyBub2RlICYmIG5vZGUgIT09IGVuZE5vZGU7IG5vZGUgPSBwYXJlbnQpIHtcbiAgICAgICAgICBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICAgICAgY29uc3Qgc2libGluZ3MgPSBjb2xsZWN0U2libGluZ3Mobm9kZSA9PT0gc3RhcnROb2RlID8gbm9kZSA6IG5vZGVbc2libGluZ05hbWVdLCBzaWJsaW5nTmFtZSk7XG4gICAgICAgICAgaWYgKHNpYmxpbmdzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKCFuZXh0KSB7XG4gICAgICAgICAgICAgIHNpYmxpbmdzLnJldmVyc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKGV4Y2x1ZGUoc2libGluZ3MpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpZiAoc3RhcnRDb250YWluZXIgPT09IGVuZENvbnRhaW5lcikge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXhjbHVkZShbc3RhcnRDb250YWluZXJdKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBhbmNlc3RvciA9IChfYSA9IGRvbS5maW5kQ29tbW9uQW5jZXN0b3Ioc3RhcnRDb250YWluZXIsIGVuZENvbnRhaW5lcikpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGRvbS5nZXRSb290KCk7XG4gICAgICBpZiAoZG9tLmlzQ2hpbGRPZihzdGFydENvbnRhaW5lciwgZW5kQ29udGFpbmVyKSkge1xuICAgICAgICByZXR1cm4gd2Fsa0JvdW5kYXJ5KHN0YXJ0Q29udGFpbmVyLCBhbmNlc3RvciwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoZG9tLmlzQ2hpbGRPZihlbmRDb250YWluZXIsIHN0YXJ0Q29udGFpbmVyKSkge1xuICAgICAgICByZXR1cm4gd2Fsa0JvdW5kYXJ5KGVuZENvbnRhaW5lciwgYW5jZXN0b3IpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhcnRQb2ludCA9IGZpbmRFbmRQb2ludChzdGFydENvbnRhaW5lciwgYW5jZXN0b3IpIHx8IHN0YXJ0Q29udGFpbmVyO1xuICAgICAgY29uc3QgZW5kUG9pbnQgPSBmaW5kRW5kUG9pbnQoZW5kQ29udGFpbmVyLCBhbmNlc3RvcikgfHwgZW5kQ29udGFpbmVyO1xuICAgICAgd2Fsa0JvdW5kYXJ5KHN0YXJ0Q29udGFpbmVyLCBzdGFydFBvaW50LCB0cnVlKTtcbiAgICAgIGNvbnN0IHNpYmxpbmdzID0gY29sbGVjdFNpYmxpbmdzKHN0YXJ0UG9pbnQgPT09IHN0YXJ0Q29udGFpbmVyID8gc3RhcnRQb2ludCA6IHN0YXJ0UG9pbnQubmV4dFNpYmxpbmcsICduZXh0U2libGluZycsIGVuZFBvaW50ID09PSBlbmRDb250YWluZXIgPyBlbmRQb2ludC5uZXh0U2libGluZyA6IGVuZFBvaW50KTtcbiAgICAgIGlmIChzaWJsaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgY2FsbGJhY2soZXhjbHVkZShzaWJsaW5ncykpO1xuICAgICAgfVxuICAgICAgd2Fsa0JvdW5kYXJ5KGVuZENvbnRhaW5lciwgZW5kUG9pbnQpO1xuICAgIH07XG5cbiAgICBjb25zdCB2YWxpZEJsb2NrcyA9IFtcbiAgICAgICdwcmVbY2xhc3MqPWxhbmd1YWdlLV1bY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl0nLFxuICAgICAgJ2ZpZ3VyZS5pbWFnZScsXG4gICAgICAnZGl2W2RhdGEtZXBob3gtZW1iZWQtaXJpXScsXG4gICAgICAnZGl2LnRpbnktcGFnZWVtYmVkJyxcbiAgICAgICdkaXYubWNlLXRvYycsXG4gICAgICAnZGl2W2RhdGEtbWNlLXRvY10nXG4gICAgXTtcbiAgICBjb25zdCBpc1plcm9XaWR0aCA9IGVsZW0gPT4gaXNUZXh0JGIoZWxlbSkgJiYgZ2V0JDMoZWxlbSkgPT09IFpXU1AkMTtcbiAgICBjb25zdCBjb250ZXh0ID0gKGVkaXRvciwgZWxlbSwgd3JhcE5hbWUsIG5vZGVOYW1lKSA9PiBwYXJlbnQoZWxlbSkuZm9sZCgoKSA9PiAnc2tpcHBpbmcnLCBwYXJlbnQgPT4ge1xuICAgICAgaWYgKG5vZGVOYW1lID09PSAnYnInIHx8IGlzWmVyb1dpZHRoKGVsZW0pKSB7XG4gICAgICAgIHJldHVybiAndmFsaWQnO1xuICAgICAgfSBlbHNlIGlmIChpc0Fubm90YXRpb24oZWxlbSkpIHtcbiAgICAgICAgcmV0dXJuICdleGlzdGluZyc7XG4gICAgICB9IGVsc2UgaWYgKGlzQ2FyZXROb2RlKGVsZW0uZG9tKSkge1xuICAgICAgICByZXR1cm4gJ2NhcmV0JztcbiAgICAgIH0gZWxzZSBpZiAoZXhpc3RzKHZhbGlkQmxvY2tzLCBzZWxlY3RvciA9PiBpcyQxKGVsZW0sIHNlbGVjdG9yKSkpIHtcbiAgICAgICAgcmV0dXJuICd2YWxpZC1ibG9jayc7XG4gICAgICB9IGVsc2UgaWYgKCFpc1ZhbGlkKGVkaXRvciwgd3JhcE5hbWUsIG5vZGVOYW1lKSB8fCAhaXNWYWxpZChlZGl0b3IsIG5hbWUocGFyZW50KSwgd3JhcE5hbWUpKSB7XG4gICAgICAgIHJldHVybiAnaW52YWxpZC1jaGlsZCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJ3ZhbGlkJztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGFwcGx5V29yZEdyYWIgPSAoZWRpdG9yLCBybmcpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBleHBhbmRSbmcoZWRpdG9yLmRvbSwgcm5nLCBbeyBpbmxpbmU6ICdzcGFuJyB9XSk7XG4gICAgICBybmcuc2V0U3RhcnQoci5zdGFydENvbnRhaW5lciwgci5zdGFydE9mZnNldCk7XG4gICAgICBybmcuc2V0RW5kKHIuZW5kQ29udGFpbmVyLCByLmVuZE9mZnNldCk7XG4gICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgIH07XG4gICAgY29uc3QgYXBwbHlBbm5vdGF0aW9uID0gKGVsZW0sIG1hc3RlclVJZCwgZGF0YSwgYW5ub3RhdGlvbk5hbWUsIGRlY29yYXRlLCBkaXJlY3RBbm5vdGF0aW9uKSA9PiB7XG4gICAgICBjb25zdCB7dWlkID0gbWFzdGVyVUlkLCAuLi5vdGhlckRhdGF9ID0gZGF0YTtcbiAgICAgIGFkZCQyKGVsZW0sIGFubm90YXRpb24oKSk7XG4gICAgICBzZXQkMyhlbGVtLCBgJHsgZGF0YUFubm90YXRpb25JZCgpIH1gLCB1aWQpO1xuICAgICAgc2V0JDMoZWxlbSwgYCR7IGRhdGFBbm5vdGF0aW9uKCkgfWAsIGFubm90YXRpb25OYW1lKTtcbiAgICAgIGNvbnN0IHthdHRyaWJ1dGVzID0ge30sIGNsYXNzZXMgPSBbXX0gPSBkZWNvcmF0ZSh1aWQsIG90aGVyRGF0YSk7XG4gICAgICBzZXRBbGwkMShlbGVtLCBhdHRyaWJ1dGVzKTtcbiAgICAgIGFkZChlbGVtLCBjbGFzc2VzKTtcbiAgICAgIGlmIChkaXJlY3RBbm5vdGF0aW9uKSB7XG4gICAgICAgIGlmIChjbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzZXQkMyhlbGVtLCBgJHsgZGF0YUFubm90YXRpb25DbGFzc2VzKCkgfWAsIGNsYXNzZXMuam9pbignLCcpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdHRyaWJ1dGVOYW1lcyA9IGtleXMoYXR0cmlidXRlcyk7XG4gICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2V0JDMoZWxlbSwgYCR7IGRhdGFBbm5vdGF0aW9uQXR0cmlidXRlcygpIH1gLCBhdHRyaWJ1dGVOYW1lcy5qb2luKCcsJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVEaXJlY3RBbm5vdGF0aW9uID0gZWxlbSA9PiB7XG4gICAgICByZW1vdmUkNyhlbGVtLCBhbm5vdGF0aW9uKCkpO1xuICAgICAgcmVtb3ZlJGEoZWxlbSwgYCR7IGRhdGFBbm5vdGF0aW9uSWQoKSB9YCk7XG4gICAgICByZW1vdmUkYShlbGVtLCBgJHsgZGF0YUFubm90YXRpb24oKSB9YCk7XG4gICAgICByZW1vdmUkYShlbGVtLCBgJHsgZGF0YUFubm90YXRpb25BY3RpdmUoKSB9YCk7XG4gICAgICBjb25zdCBjdXN0b21BdHRyTmFtZXMgPSBnZXRPcHQoZWxlbSwgYCR7IGRhdGFBbm5vdGF0aW9uQXR0cmlidXRlcygpIH1gKS5tYXAobmFtZXMgPT4gbmFtZXMuc3BsaXQoJywnKSkuZ2V0T3IoW10pO1xuICAgICAgY29uc3QgY3VzdG9tQ2xhc3NlcyA9IGdldE9wdChlbGVtLCBgJHsgZGF0YUFubm90YXRpb25DbGFzc2VzKCkgfWApLm1hcChuYW1lcyA9PiBuYW1lcy5zcGxpdCgnLCcpKS5nZXRPcihbXSk7XG4gICAgICBlYWNoJGUoY3VzdG9tQXR0ck5hbWVzLCBuYW1lID0+IHJlbW92ZSRhKGVsZW0sIG5hbWUpKTtcbiAgICAgIHJlbW92ZSQ0KGVsZW0sIGN1c3RvbUNsYXNzZXMpO1xuICAgICAgcmVtb3ZlJGEoZWxlbSwgYCR7IGRhdGFBbm5vdGF0aW9uQ2xhc3NlcygpIH1gKTtcbiAgICAgIHJlbW92ZSRhKGVsZW0sIGAkeyBkYXRhQW5ub3RhdGlvbkF0dHJpYnV0ZXMoKSB9YCk7XG4gICAgfTtcbiAgICBjb25zdCBtYWtlQW5ub3RhdGlvbiA9IChlRG9jLCB1aWQsIGRhdGEsIGFubm90YXRpb25OYW1lLCBkZWNvcmF0ZSkgPT4ge1xuICAgICAgY29uc3QgbWFzdGVyID0gU3VnYXJFbGVtZW50LmZyb21UYWcoJ3NwYW4nLCBlRG9jKTtcbiAgICAgIGFwcGx5QW5ub3RhdGlvbihtYXN0ZXIsIHVpZCwgZGF0YSwgYW5ub3RhdGlvbk5hbWUsIGRlY29yYXRlLCBmYWxzZSk7XG4gICAgICByZXR1cm4gbWFzdGVyO1xuICAgIH07XG4gICAgY29uc3QgYW5ub3RhdGUgPSAoZWRpdG9yLCBybmcsIHVpZCwgYW5ub3RhdGlvbk5hbWUsIGRlY29yYXRlLCBkYXRhKSA9PiB7XG4gICAgICBjb25zdCBuZXdXcmFwcGVycyA9IFtdO1xuICAgICAgY29uc3QgbWFzdGVyID0gbWFrZUFubm90YXRpb24oZWRpdG9yLmdldERvYygpLCB1aWQsIGRhdGEsIGFubm90YXRpb25OYW1lLCBkZWNvcmF0ZSk7XG4gICAgICBjb25zdCB3cmFwcGVyID0gdmFsdWUkMigpO1xuICAgICAgY29uc3QgZmluaXNoV3JhcHBlciA9ICgpID0+IHtcbiAgICAgICAgd3JhcHBlci5jbGVhcigpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldE9yT3BlbldyYXBwZXIgPSAoKSA9PiB3cmFwcGVyLmdldCgpLmdldE9yVGh1bmsoKCkgPT4ge1xuICAgICAgICBjb25zdCBudSA9IHNoYWxsb3ckMShtYXN0ZXIpO1xuICAgICAgICBuZXdXcmFwcGVycy5wdXNoKG51KTtcbiAgICAgICAgd3JhcHBlci5zZXQobnUpO1xuICAgICAgICByZXR1cm4gbnU7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb2Nlc3NFbGVtZW50cyA9IGVsZW1zID0+IHtcbiAgICAgICAgZWFjaCRlKGVsZW1zLCBwcm9jZXNzRWxlbWVudCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcHJvY2Vzc0VsZW1lbnQgPSBlbGVtID0+IHtcbiAgICAgICAgY29uc3QgY3R4ID0gY29udGV4dChlZGl0b3IsIGVsZW0sICdzcGFuJywgbmFtZShlbGVtKSk7XG4gICAgICAgIHN3aXRjaCAoY3R4KSB7XG4gICAgICAgIGNhc2UgJ2ludmFsaWQtY2hpbGQnOiB7XG4gICAgICAgICAgICBmaW5pc2hXcmFwcGVyKCk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGNoaWxkcmVuJDEoZWxlbSk7XG4gICAgICAgICAgICBwcm9jZXNzRWxlbWVudHMoY2hpbGRyZW4pO1xuICAgICAgICAgICAgZmluaXNoV3JhcHBlcigpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICd2YWxpZC1ibG9jayc6IHtcbiAgICAgICAgICAgIGZpbmlzaFdyYXBwZXIoKTtcbiAgICAgICAgICAgIGFwcGx5QW5ub3RhdGlvbihlbGVtLCB1aWQsIGRhdGEsIGFubm90YXRpb25OYW1lLCBkZWNvcmF0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3ZhbGlkJzoge1xuICAgICAgICAgICAgY29uc3QgdyA9IGdldE9yT3BlbldyYXBwZXIoKTtcbiAgICAgICAgICAgIHdyYXAkMihlbGVtLCB3KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHByb2Nlc3NOb2RlcyA9IG5vZGVzID0+IHtcbiAgICAgICAgY29uc3QgZWxlbXMgPSBtYXAkMyhub2RlcywgU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgICAgICBwcm9jZXNzRWxlbWVudHMoZWxlbXMpO1xuICAgICAgfTtcbiAgICAgIHdhbGskMyhlZGl0b3IuZG9tLCBybmcsIG5vZGVzID0+IHtcbiAgICAgICAgZmluaXNoV3JhcHBlcigpO1xuICAgICAgICBwcm9jZXNzTm9kZXMobm9kZXMpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3V3JhcHBlcnM7XG4gICAgfTtcbiAgICBjb25zdCBhbm5vdGF0ZVdpdGhCb29rbWFyayA9IChlZGl0b3IsIG5hbWUsIHNldHRpbmdzLCBkYXRhKSA9PiB7XG4gICAgICBlZGl0b3IudW5kb01hbmFnZXIudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uO1xuICAgICAgICBjb25zdCBpbml0aWFsUm5nID0gc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgICBjb25zdCBoYXNGYWtlU2VsZWN0aW9uID0gZ2V0Q2VsbHNGcm9tRWRpdG9yKGVkaXRvcikubGVuZ3RoID4gMDtcbiAgICAgICAgY29uc3QgbWFzdGVyVWlkID0gZ2VuZXJhdGUkMSgnbWNlLWFubm90YXRpb24nKTtcbiAgICAgICAgaWYgKGluaXRpYWxSbmcuY29sbGFwc2VkICYmICFoYXNGYWtlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgYXBwbHlXb3JkR3JhYihlZGl0b3IsIGluaXRpYWxSbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxlY3Rpb24uZ2V0Um5nKCkuY29sbGFwc2VkICYmICFoYXNGYWtlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgY29uc3Qgd3JhcHBlciA9IG1ha2VBbm5vdGF0aW9uKGVkaXRvci5nZXREb2MoKSwgbWFzdGVyVWlkLCBkYXRhLCBuYW1lLCBzZXR0aW5ncy5kZWNvcmF0ZSk7XG4gICAgICAgICAgc2V0JDEod3JhcHBlciwgbmJzcCk7XG4gICAgICAgICAgc2VsZWN0aW9uLmdldFJuZygpLmluc2VydE5vZGUod3JhcHBlci5kb20pO1xuICAgICAgICAgIHNlbGVjdGlvbi5zZWxlY3Qod3JhcHBlci5kb20pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXNlcnZlKHNlbGVjdGlvbiwgZmFsc2UsICgpID0+IHtcbiAgICAgICAgICAgIHJ1bk9uUmFuZ2VzKGVkaXRvciwgc2VsZWN0aW9uUm5nID0+IHtcbiAgICAgICAgICAgICAgYW5ub3RhdGUoZWRpdG9yLCBzZWxlY3Rpb25SbmcsIG1hc3RlclVpZCwgbmFtZSwgc2V0dGluZ3MuZGVjb3JhdGUsIGRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBBbm5vdGF0b3IgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgcmVnaXN0cnkgPSBjcmVhdGUkYygpO1xuICAgICAgc2V0dXAkdyhlZGl0b3IsIHJlZ2lzdHJ5KTtcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSBzZXR1cCR4KGVkaXRvciwgcmVnaXN0cnkpO1xuICAgICAgY29uc3QgaXNTcGFuID0gaXNUYWcoJ3NwYW4nKTtcbiAgICAgIGNvbnN0IHJlbW92ZUFubm90YXRpb25zID0gZWxlbWVudHMgPT4ge1xuICAgICAgICBlYWNoJGUoZWxlbWVudHMsIGVsZW1lbnQgPT4ge1xuICAgICAgICAgIGlmIChpc1NwYW4oZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHVud3JhcChlbGVtZW50KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVtb3ZlRGlyZWN0QW5ub3RhdGlvbihlbGVtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlZ2lzdGVyOiAobmFtZSwgc2V0dGluZ3MpID0+IHtcbiAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlcihuYW1lLCBzZXR0aW5ncyk7XG4gICAgICAgIH0sXG4gICAgICAgIGFubm90YXRlOiAobmFtZSwgZGF0YSkgPT4ge1xuICAgICAgICAgIHJlZ2lzdHJ5Lmxvb2t1cChuYW1lKS5lYWNoKHNldHRpbmdzID0+IHtcbiAgICAgICAgICAgIGFubm90YXRlV2l0aEJvb2ttYXJrKGVkaXRvciwgbmFtZSwgc2V0dGluZ3MsIGRhdGEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBhbm5vdGF0aW9uQ2hhbmdlZDogKG5hbWUsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgY2hhbmdlcy5hZGRMaXN0ZW5lcihuYW1lLCBjYWxsYmFjayk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbW92ZTogbmFtZSA9PiB7XG4gICAgICAgICAgaWRlbnRpZnkoZWRpdG9yLCBPcHRpb25hbC5zb21lKG5hbWUpKS5lYWNoKCh7ZWxlbWVudHN9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBib29rbWFyayA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Qm9va21hcmsoKTtcbiAgICAgICAgICAgIHJlbW92ZUFubm90YXRpb25zKGVsZW1lbnRzKTtcbiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24ubW92ZVRvQm9va21hcmsoYm9va21hcmspO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICByZW1vdmVBbGw6IG5hbWUgPT4ge1xuICAgICAgICAgIGNvbnN0IGJvb2ttYXJrID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRCb29rbWFyaygpO1xuICAgICAgICAgIGVhY2gkZChmaW5kQWxsKGVkaXRvciwgbmFtZSksIChlbGVtZW50cywgXykgPT4ge1xuICAgICAgICAgICAgcmVtb3ZlQW5ub3RhdGlvbnMoZWxlbWVudHMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24ubW92ZVRvQm9va21hcmsoYm9va21hcmspO1xuICAgICAgICB9LFxuICAgICAgICBnZXRBbGw6IG5hbWUgPT4ge1xuICAgICAgICAgIGNvbnN0IGRpcmVjdG9yeSA9IGZpbmRBbGwoZWRpdG9yLCBuYW1lKTtcbiAgICAgICAgICByZXR1cm4gbWFwJDIoZGlyZWN0b3J5LCBlbGVtcyA9PiBtYXAkMyhlbGVtcywgZWxlbSA9PiBlbGVtLmRvbSkpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBCb29rbWFya01hbmFnZXIgPSBzZWxlY3Rpb24gPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0Qm9va21hcms6IGN1cnJ5KGdldEJvb2ttYXJrJDEsIHNlbGVjdGlvbiksXG4gICAgICAgIG1vdmVUb0Jvb2ttYXJrOiBjdXJyeShtb3ZlVG9Cb29rbWFyaywgc2VsZWN0aW9uKVxuICAgICAgfTtcbiAgICB9O1xuICAgIEJvb2ttYXJrTWFuYWdlci5pc0Jvb2ttYXJrTm9kZSA9IGlzQm9va21hcmtOb2RlJDE7XG5cbiAgICBjb25zdCBpc1hZV2l0aGluUmFuZ2UgPSAoY2xpZW50WCwgY2xpZW50WSwgcmFuZ2UpID0+IHtcbiAgICAgIGlmIChyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGV4aXN0cyhyYW5nZS5nZXRDbGllbnRSZWN0cygpLCByZWN0ID0+IGNvbnRhaW5zWFkocmVjdCwgY2xpZW50WCwgY2xpZW50WSkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBmaXJlUHJlUHJvY2VzcyA9IChlZGl0b3IsIGFyZ3MpID0+IGVkaXRvci5kaXNwYXRjaCgnUHJlUHJvY2VzcycsIGFyZ3MpO1xuICAgIGNvbnN0IGZpcmVQb3N0UHJvY2VzcyA9IChlZGl0b3IsIGFyZ3MpID0+IGVkaXRvci5kaXNwYXRjaCgnUG9zdFByb2Nlc3MnLCBhcmdzKTtcbiAgICBjb25zdCBmaXJlUmVtb3ZlID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5kaXNwYXRjaCgncmVtb3ZlJyk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJlRGV0YWNoID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5kaXNwYXRjaCgnZGV0YWNoJyk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJlU3dpdGNoTW9kZSA9IChlZGl0b3IsIG1vZGUpID0+IHtcbiAgICAgIGVkaXRvci5kaXNwYXRjaCgnU3dpdGNoTW9kZScsIHsgbW9kZSB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVPYmplY3RSZXNpemVTdGFydCA9IChlZGl0b3IsIHRhcmdldCwgd2lkdGgsIGhlaWdodCwgb3JpZ2luKSA9PiB7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ09iamVjdFJlc2l6ZVN0YXJ0Jywge1xuICAgICAgICB0YXJnZXQsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIG9yaWdpblxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJlT2JqZWN0UmVzaXplZCA9IChlZGl0b3IsIHRhcmdldCwgd2lkdGgsIGhlaWdodCwgb3JpZ2luKSA9PiB7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ09iamVjdFJlc2l6ZWQnLCB7XG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgb3JpZ2luXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVQcmVJbml0ID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5kaXNwYXRjaCgnUHJlSW5pdCcpO1xuICAgIH07XG4gICAgY29uc3QgZmlyZVBvc3RSZW5kZXIgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdQb3N0UmVuZGVyJyk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJlSW5pdCA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ0luaXQnKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVQbGFjZWhvbGRlclRvZ2dsZSA9IChlZGl0b3IsIHN0YXRlKSA9PiB7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ1BsYWNlaG9sZGVyVG9nZ2xlJywgeyBzdGF0ZSB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVFcnJvciA9IChlZGl0b3IsIGVycm9yVHlwZSwgZXJyb3IpID0+IHtcbiAgICAgIGVkaXRvci5kaXNwYXRjaChlcnJvclR5cGUsIGVycm9yKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVGb3JtYXRBcHBseSA9IChlZGl0b3IsIGZvcm1hdCwgbm9kZSwgdmFycykgPT4ge1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdGb3JtYXRBcHBseScsIHtcbiAgICAgICAgZm9ybWF0LFxuICAgICAgICBub2RlLFxuICAgICAgICB2YXJzXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVGb3JtYXRSZW1vdmUgPSAoZWRpdG9yLCBmb3JtYXQsIG5vZGUsIHZhcnMpID0+IHtcbiAgICAgIGVkaXRvci5kaXNwYXRjaCgnRm9ybWF0UmVtb3ZlJywge1xuICAgICAgICBmb3JtYXQsXG4gICAgICAgIG5vZGUsXG4gICAgICAgIHZhcnNcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZmlyZUJlZm9yZVNldENvbnRlbnQgPSAoZWRpdG9yLCBhcmdzKSA9PiBlZGl0b3IuZGlzcGF0Y2goJ0JlZm9yZVNldENvbnRlbnQnLCBhcmdzKTtcbiAgICBjb25zdCBmaXJlU2V0Q29udGVudCA9IChlZGl0b3IsIGFyZ3MpID0+IGVkaXRvci5kaXNwYXRjaCgnU2V0Q29udGVudCcsIGFyZ3MpO1xuICAgIGNvbnN0IGZpcmVCZWZvcmVHZXRDb250ZW50ID0gKGVkaXRvciwgYXJncykgPT4gZWRpdG9yLmRpc3BhdGNoKCdCZWZvcmVHZXRDb250ZW50JywgYXJncyk7XG4gICAgY29uc3QgZmlyZUdldENvbnRlbnQgPSAoZWRpdG9yLCBhcmdzKSA9PiBlZGl0b3IuZGlzcGF0Y2goJ0dldENvbnRlbnQnLCBhcmdzKTtcbiAgICBjb25zdCBmaXJlQXV0b2NvbXBsZXRlclN0YXJ0ID0gKGVkaXRvciwgYXJncykgPT4ge1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdBdXRvY29tcGxldGVyU3RhcnQnLCBhcmdzKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVBdXRvY29tcGxldGVyVXBkYXRlID0gKGVkaXRvciwgYXJncykgPT4ge1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdBdXRvY29tcGxldGVyVXBkYXRlJywgYXJncyk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJlQXV0b2NvbXBsZXRlckVuZCA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ0F1dG9jb21wbGV0ZXJFbmQnKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVQYXN0ZVByZVByb2Nlc3MgPSAoZWRpdG9yLCBodG1sLCBpbnRlcm5hbCkgPT4gZWRpdG9yLmRpc3BhdGNoKCdQYXN0ZVByZVByb2Nlc3MnLCB7XG4gICAgICBjb250ZW50OiBodG1sLFxuICAgICAgaW50ZXJuYWxcbiAgICB9KTtcbiAgICBjb25zdCBmaXJlUGFzdGVQb3N0UHJvY2VzcyA9IChlZGl0b3IsIG5vZGUsIGludGVybmFsKSA9PiBlZGl0b3IuZGlzcGF0Y2goJ1Bhc3RlUG9zdFByb2Nlc3MnLCB7XG4gICAgICBub2RlLFxuICAgICAgaW50ZXJuYWxcbiAgICB9KTtcbiAgICBjb25zdCBmaXJlUGFzdGVQbGFpblRleHRUb2dnbGUgPSAoZWRpdG9yLCBzdGF0ZSkgPT4gZWRpdG9yLmRpc3BhdGNoKCdQYXN0ZVBsYWluVGV4dFRvZ2dsZScsIHsgc3RhdGUgfSk7XG4gICAgY29uc3QgZmlyZUVkaXRhYmxlUm9vdFN0YXRlQ2hhbmdlID0gKGVkaXRvciwgc3RhdGUpID0+IGVkaXRvci5kaXNwYXRjaCgnRWRpdGFibGVSb290U3RhdGVDaGFuZ2UnLCB7IHN0YXRlIH0pO1xuXG4gICAgY29uc3QgVksgPSB7XG4gICAgICBCQUNLU1BBQ0U6IDgsXG4gICAgICBERUxFVEU6IDQ2LFxuICAgICAgRE9XTjogNDAsXG4gICAgICBFTlRFUjogMTMsXG4gICAgICBFU0M6IDI3LFxuICAgICAgTEVGVDogMzcsXG4gICAgICBSSUdIVDogMzksXG4gICAgICBTUEFDRUJBUjogMzIsXG4gICAgICBUQUI6IDksXG4gICAgICBVUDogMzgsXG4gICAgICBQQUdFX1VQOiAzMyxcbiAgICAgIFBBR0VfRE9XTjogMzQsXG4gICAgICBFTkQ6IDM1LFxuICAgICAgSE9NRTogMzYsXG4gICAgICBtb2RpZmllclByZXNzZWQ6IGUgPT4ge1xuICAgICAgICByZXR1cm4gZS5zaGlmdEtleSB8fCBlLmN0cmxLZXkgfHwgZS5hbHRLZXkgfHwgVksubWV0YUtleVByZXNzZWQoZSk7XG4gICAgICB9LFxuICAgICAgbWV0YUtleVByZXNzZWQ6IGUgPT4ge1xuICAgICAgICByZXR1cm4gRW52Lm9zLmlzTWFjT1MoKSB8fCBFbnYub3MuaXNpT1MoKSA/IGUubWV0YUtleSA6IGUuY3RybEtleSAmJiAhZS5hbHRLZXk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGVsZW1lbnRTZWxlY3Rpb25BdHRyID0gJ2RhdGEtbWNlLXNlbGVjdGVkJztcbiAgICBjb25zdCBjb250cm9sRWxtU2VsZWN0b3IgPSAndGFibGUsaW1nLGZpZ3VyZS5pbWFnZSxocix2aWRlbyxzcGFuLm1jZS1wcmV2aWV3LW9iamVjdCxkZXRhaWxzJztcbiAgICBjb25zdCBhYnMgPSBNYXRoLmFicztcbiAgICBjb25zdCByb3VuZCQxID0gTWF0aC5yb3VuZDtcbiAgICBjb25zdCByZXNpemVIYW5kbGVzID0ge1xuICAgICAgbnc6IFtcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgLTEsXG4gICAgICAgIC0xXG4gICAgICBdLFxuICAgICAgbmU6IFtcbiAgICAgICAgMSxcbiAgICAgICAgMCxcbiAgICAgICAgMSxcbiAgICAgICAgLTFcbiAgICAgIF0sXG4gICAgICBzZTogW1xuICAgICAgICAxLFxuICAgICAgICAxLFxuICAgICAgICAxLFxuICAgICAgICAxXG4gICAgICBdLFxuICAgICAgc3c6IFtcbiAgICAgICAgMCxcbiAgICAgICAgMSxcbiAgICAgICAgLTEsXG4gICAgICAgIDFcbiAgICAgIF1cbiAgICB9O1xuICAgIGNvbnN0IGlzVG91Y2hFdmVudCA9IGV2dCA9PiBldnQudHlwZSA9PT0gJ2xvbmdwcmVzcycgfHwgZXZ0LnR5cGUuaW5kZXhPZigndG91Y2gnKSA9PT0gMDtcbiAgICBjb25zdCBDb250cm9sU2VsZWN0aW9uID0gKHNlbGVjdGlvbiwgZWRpdG9yKSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgY29uc3QgZWRpdGFibGVEb2MgPSBlZGl0b3IuZ2V0RG9jKCk7XG4gICAgICBjb25zdCByb290RG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICAgIGNvbnN0IHJvb3RFbGVtZW50ID0gZWRpdG9yLmdldEJvZHkoKTtcbiAgICAgIGxldCBzZWxlY3RlZEVsbSwgc2VsZWN0ZWRFbG1HaG9zdCwgcmVzaXplSGVscGVyLCBzZWxlY3RlZEhhbmRsZSwgcmVzaXplQmFja2Ryb3A7XG4gICAgICBsZXQgc3RhcnRYLCBzdGFydFksIHNlbGVjdGVkRWxtWCwgc2VsZWN0ZWRFbG1ZLCBzdGFydFcsIHN0YXJ0SCwgcmF0aW8sIHJlc2l6ZVN0YXJ0ZWQ7XG4gICAgICBsZXQgd2lkdGg7XG4gICAgICBsZXQgaGVpZ2h0O1xuICAgICAgbGV0IHN0YXJ0U2Nyb2xsV2lkdGg7XG4gICAgICBsZXQgc3RhcnRTY3JvbGxIZWlnaHQ7XG4gICAgICBjb25zdCBpc0ltYWdlID0gZWxtID0+IGlzTm9uTnVsbGFibGUoZWxtKSAmJiAoaXNJbWcoZWxtKSB8fCBkb20uaXMoZWxtLCAnZmlndXJlLmltYWdlJykpO1xuICAgICAgY29uc3QgaXNNZWRpYSA9IGVsbSA9PiBpc01lZGlhJDIoZWxtKSB8fCBkb20uaGFzQ2xhc3MoZWxtLCAnbWNlLXByZXZpZXctb2JqZWN0Jyk7XG4gICAgICBjb25zdCBpc0V2ZW50T25JbWFnZU91dHNpZGVSYW5nZSA9IChldnQsIHJhbmdlKSA9PiB7XG4gICAgICAgIGlmIChpc1RvdWNoRXZlbnQoZXZ0KSkge1xuICAgICAgICAgIGNvbnN0IHRvdWNoID0gZXZ0LnRvdWNoZXNbMF07XG4gICAgICAgICAgcmV0dXJuIGlzSW1hZ2UoZXZ0LnRhcmdldCkgJiYgIWlzWFlXaXRoaW5SYW5nZSh0b3VjaC5jbGllbnRYLCB0b3VjaC5jbGllbnRZLCByYW5nZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGlzSW1hZ2UoZXZ0LnRhcmdldCkgJiYgIWlzWFlXaXRoaW5SYW5nZShldnQuY2xpZW50WCwgZXZ0LmNsaWVudFksIHJhbmdlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbnRleHRNZW51U2VsZWN0SW1hZ2UgPSBldnQgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldnQudGFyZ2V0O1xuICAgICAgICBpZiAoaXNFdmVudE9uSW1hZ2VPdXRzaWRlUmFuZ2UoZXZ0LCBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKSAmJiAhZXZ0LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3QodGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldFJlc2l6ZVRhcmdldHMgPSBlbG0gPT4ge1xuICAgICAgICBpZiAoZG9tLmhhc0NsYXNzKGVsbSwgJ21jZS1wcmV2aWV3LW9iamVjdCcpICYmIGlzTm9uTnVsbGFibGUoZWxtLmZpcnN0RWxlbWVudENoaWxkKSkge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBlbG0sXG4gICAgICAgICAgICBlbG0uZmlyc3RFbGVtZW50Q2hpbGRcbiAgICAgICAgICBdO1xuICAgICAgICB9IGVsc2UgaWYgKGRvbS5pcyhlbG0sICdmaWd1cmUuaW1hZ2UnKSkge1xuICAgICAgICAgIHJldHVybiBbZWxtLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gW2VsbV07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBpc1Jlc2l6YWJsZSA9IGVsbSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0T2JqZWN0UmVzaXppbmcoZWRpdG9yKTtcbiAgICAgICAgaWYgKCFzZWxlY3Rvcikge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxtLmdldEF0dHJpYnV0ZSgnZGF0YS1tY2UtcmVzaXplJykgPT09ICdmYWxzZScpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsbSA9PT0gZWRpdG9yLmdldEJvZHkoKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9tLmhhc0NsYXNzKGVsbSwgJ21jZS1wcmV2aWV3LW9iamVjdCcpICYmIGlzTm9uTnVsbGFibGUoZWxtLmZpcnN0RWxlbWVudENoaWxkKSkge1xuICAgICAgICAgIHJldHVybiBpcyQxKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsbS5maXJzdEVsZW1lbnRDaGlsZCksIHNlbGVjdG9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gaXMkMShTdWdhckVsZW1lbnQuZnJvbURvbShlbG0pLCBzZWxlY3Rvcik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBjcmVhdGVHaG9zdEVsZW1lbnQgPSBlbG0gPT4ge1xuICAgICAgICBpZiAoaXNNZWRpYShlbG0pKSB7XG4gICAgICAgICAgcmV0dXJuIGRvbS5jcmVhdGUoJ2ltZycsIHsgc3JjOiBFbnYudHJhbnNwYXJlbnRTcmMgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGVsbS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBzZXRTaXplUHJvcCA9IChlbGVtZW50LCBuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoaXNOb25OdWxsYWJsZSh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCB0YXJnZXRzID0gZ2V0UmVzaXplVGFyZ2V0cyhlbGVtZW50KTtcbiAgICAgICAgICBlYWNoJGUodGFyZ2V0cywgdGFyZ2V0ID0+IHtcbiAgICAgICAgICAgIGlmICh0YXJnZXQuc3R5bGVbbmFtZV0gfHwgIWVkaXRvci5zY2hlbWEuaXNWYWxpZCh0YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgbmFtZSkpIHtcbiAgICAgICAgICAgICAgZG9tLnNldFN0eWxlKHRhcmdldCwgbmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZG9tLnNldEF0dHJpYih0YXJnZXQsIG5hbWUsICcnICsgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0R2hvc3RFbG1TaXplID0gKGdob3N0RWxtLCB3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gICAgICAgIHNldFNpemVQcm9wKGdob3N0RWxtLCAnd2lkdGgnLCB3aWR0aCk7XG4gICAgICAgIHNldFNpemVQcm9wKGdob3N0RWxtLCAnaGVpZ2h0JywgaGVpZ2h0KTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNpemVHaG9zdEVsZW1lbnQgPSBlID0+IHtcbiAgICAgICAgbGV0IGRlbHRhWCwgZGVsdGFZLCBwcm9wb3J0aW9uYWw7XG4gICAgICAgIGxldCByZXNpemVIZWxwZXJYLCByZXNpemVIZWxwZXJZO1xuICAgICAgICBkZWx0YVggPSBlLnNjcmVlblggLSBzdGFydFg7XG4gICAgICAgIGRlbHRhWSA9IGUuc2NyZWVuWSAtIHN0YXJ0WTtcbiAgICAgICAgd2lkdGggPSBkZWx0YVggKiBzZWxlY3RlZEhhbmRsZVsyXSArIHN0YXJ0VztcbiAgICAgICAgaGVpZ2h0ID0gZGVsdGFZICogc2VsZWN0ZWRIYW5kbGVbM10gKyBzdGFydEg7XG4gICAgICAgIHdpZHRoID0gd2lkdGggPCA1ID8gNSA6IHdpZHRoO1xuICAgICAgICBoZWlnaHQgPSBoZWlnaHQgPCA1ID8gNSA6IGhlaWdodDtcbiAgICAgICAgaWYgKChpc0ltYWdlKHNlbGVjdGVkRWxtKSB8fCBpc01lZGlhKHNlbGVjdGVkRWxtKSkgJiYgZ2V0UmVzaXplSW1nUHJvcG9ydGlvbmFsKGVkaXRvcikgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcHJvcG9ydGlvbmFsID0gIVZLLm1vZGlmaWVyUHJlc3NlZChlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wb3J0aW9uYWwgPSBWSy5tb2RpZmllclByZXNzZWQoZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BvcnRpb25hbCkge1xuICAgICAgICAgIGlmIChhYnMoZGVsdGFYKSA+IGFicyhkZWx0YVkpKSB7XG4gICAgICAgICAgICBoZWlnaHQgPSByb3VuZCQxKHdpZHRoICogcmF0aW8pO1xuICAgICAgICAgICAgd2lkdGggPSByb3VuZCQxKGhlaWdodCAvIHJhdGlvKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2lkdGggPSByb3VuZCQxKGhlaWdodCAvIHJhdGlvKTtcbiAgICAgICAgICAgIGhlaWdodCA9IHJvdW5kJDEod2lkdGggKiByYXRpbyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldEdob3N0RWxtU2l6ZShzZWxlY3RlZEVsbUdob3N0LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgcmVzaXplSGVscGVyWCA9IHNlbGVjdGVkSGFuZGxlLnN0YXJ0UG9zLnggKyBkZWx0YVg7XG4gICAgICAgIHJlc2l6ZUhlbHBlclkgPSBzZWxlY3RlZEhhbmRsZS5zdGFydFBvcy55ICsgZGVsdGFZO1xuICAgICAgICByZXNpemVIZWxwZXJYID0gcmVzaXplSGVscGVyWCA+IDAgPyByZXNpemVIZWxwZXJYIDogMDtcbiAgICAgICAgcmVzaXplSGVscGVyWSA9IHJlc2l6ZUhlbHBlclkgPiAwID8gcmVzaXplSGVscGVyWSA6IDA7XG4gICAgICAgIGRvbS5zZXRTdHlsZXMocmVzaXplSGVscGVyLCB7XG4gICAgICAgICAgbGVmdDogcmVzaXplSGVscGVyWCxcbiAgICAgICAgICB0b3A6IHJlc2l6ZUhlbHBlclksXG4gICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmVzaXplSGVscGVyLmlubmVySFRNTCA9IHdpZHRoICsgJyAmdGltZXM7ICcgKyBoZWlnaHQ7XG4gICAgICAgIGlmIChzZWxlY3RlZEhhbmRsZVsyXSA8IDAgJiYgc2VsZWN0ZWRFbG1HaG9zdC5jbGllbnRXaWR0aCA8PSB3aWR0aCkge1xuICAgICAgICAgIGRvbS5zZXRTdHlsZShzZWxlY3RlZEVsbUdob3N0LCAnbGVmdCcsIHNlbGVjdGVkRWxtWCArIChzdGFydFcgLSB3aWR0aCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxlY3RlZEhhbmRsZVszXSA8IDAgJiYgc2VsZWN0ZWRFbG1HaG9zdC5jbGllbnRIZWlnaHQgPD0gaGVpZ2h0KSB7XG4gICAgICAgICAgZG9tLnNldFN0eWxlKHNlbGVjdGVkRWxtR2hvc3QsICd0b3AnLCBzZWxlY3RlZEVsbVkgKyAoc3RhcnRIIC0gaGVpZ2h0KSk7XG4gICAgICAgIH1cbiAgICAgICAgZGVsdGFYID0gcm9vdEVsZW1lbnQuc2Nyb2xsV2lkdGggLSBzdGFydFNjcm9sbFdpZHRoO1xuICAgICAgICBkZWx0YVkgPSByb290RWxlbWVudC5zY3JvbGxIZWlnaHQgLSBzdGFydFNjcm9sbEhlaWdodDtcbiAgICAgICAgaWYgKGRlbHRhWCArIGRlbHRhWSAhPT0gMCkge1xuICAgICAgICAgIGRvbS5zZXRTdHlsZXMocmVzaXplSGVscGVyLCB7XG4gICAgICAgICAgICBsZWZ0OiByZXNpemVIZWxwZXJYIC0gZGVsdGFYLFxuICAgICAgICAgICAgdG9wOiByZXNpemVIZWxwZXJZIC0gZGVsdGFZXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXNpemVTdGFydGVkKSB7XG4gICAgICAgICAgZmlyZU9iamVjdFJlc2l6ZVN0YXJ0KGVkaXRvciwgc2VsZWN0ZWRFbG0sIHN0YXJ0Vywgc3RhcnRILCAnY29ybmVyLScgKyBzZWxlY3RlZEhhbmRsZS5uYW1lKTtcbiAgICAgICAgICByZXNpemVTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGVuZEdob3N0UmVzaXplID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB3YXNSZXNpemVTdGFydGVkID0gcmVzaXplU3RhcnRlZDtcbiAgICAgICAgcmVzaXplU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICBpZiAod2FzUmVzaXplU3RhcnRlZCkge1xuICAgICAgICAgIHNldFNpemVQcm9wKHNlbGVjdGVkRWxtLCAnd2lkdGgnLCB3aWR0aCk7XG4gICAgICAgICAgc2V0U2l6ZVByb3Aoc2VsZWN0ZWRFbG0sICdoZWlnaHQnLCBoZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIGRvbS51bmJpbmQoZWRpdGFibGVEb2MsICdtb3VzZW1vdmUnLCByZXNpemVHaG9zdEVsZW1lbnQpO1xuICAgICAgICBkb20udW5iaW5kKGVkaXRhYmxlRG9jLCAnbW91c2V1cCcsIGVuZEdob3N0UmVzaXplKTtcbiAgICAgICAgaWYgKHJvb3REb2N1bWVudCAhPT0gZWRpdGFibGVEb2MpIHtcbiAgICAgICAgICBkb20udW5iaW5kKHJvb3REb2N1bWVudCwgJ21vdXNlbW92ZScsIHJlc2l6ZUdob3N0RWxlbWVudCk7XG4gICAgICAgICAgZG9tLnVuYmluZChyb290RG9jdW1lbnQsICdtb3VzZXVwJywgZW5kR2hvc3RSZXNpemUpO1xuICAgICAgICB9XG4gICAgICAgIGRvbS5yZW1vdmUoc2VsZWN0ZWRFbG1HaG9zdCk7XG4gICAgICAgIGRvbS5yZW1vdmUocmVzaXplSGVscGVyKTtcbiAgICAgICAgZG9tLnJlbW92ZShyZXNpemVCYWNrZHJvcCk7XG4gICAgICAgIHNob3dSZXNpemVSZWN0KHNlbGVjdGVkRWxtKTtcbiAgICAgICAgaWYgKHdhc1Jlc2l6ZVN0YXJ0ZWQpIHtcbiAgICAgICAgICBmaXJlT2JqZWN0UmVzaXplZChlZGl0b3IsIHNlbGVjdGVkRWxtLCB3aWR0aCwgaGVpZ2h0LCAnY29ybmVyLScgKyBzZWxlY3RlZEhhbmRsZS5uYW1lKTtcbiAgICAgICAgICBkb20uc2V0QXR0cmliKHNlbGVjdGVkRWxtLCAnc3R5bGUnLCBkb20uZ2V0QXR0cmliKHNlbGVjdGVkRWxtLCAnc3R5bGUnKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2hvd1Jlc2l6ZVJlY3QgPSB0YXJnZXRFbG0gPT4ge1xuICAgICAgICB1bmJpbmRSZXNpemVIYW5kbGVFdmVudHMoKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBkb20uZ2V0UG9zKHRhcmdldEVsbSwgcm9vdEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZEVsbVggPSBwb3NpdGlvbi54O1xuICAgICAgICBjb25zdCBzZWxlY3RlZEVsbVkgPSBwb3NpdGlvbi55O1xuICAgICAgICBjb25zdCByZWN0ID0gdGFyZ2V0RWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB0YXJnZXRXaWR0aCA9IHJlY3Qud2lkdGggfHwgcmVjdC5yaWdodCAtIHJlY3QubGVmdDtcbiAgICAgICAgY29uc3QgdGFyZ2V0SGVpZ2h0ID0gcmVjdC5oZWlnaHQgfHwgcmVjdC5ib3R0b20gLSByZWN0LnRvcDtcbiAgICAgICAgaWYgKHNlbGVjdGVkRWxtICE9PSB0YXJnZXRFbG0pIHtcbiAgICAgICAgICBoaWRlUmVzaXplUmVjdCgpO1xuICAgICAgICAgIHNlbGVjdGVkRWxtID0gdGFyZ2V0RWxtO1xuICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlID0gZWRpdG9yLmRpc3BhdGNoKCdPYmplY3RTZWxlY3RlZCcsIHsgdGFyZ2V0OiB0YXJnZXRFbG0gfSk7XG4gICAgICAgIGlmIChpc1Jlc2l6YWJsZSh0YXJnZXRFbG0pICYmICFlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgZWFjaCRkKHJlc2l6ZUhhbmRsZXMsIChoYW5kbGUsIG5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0RHJhZyA9IGUgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBnZXRSZXNpemVUYXJnZXRzKHNlbGVjdGVkRWxtKVswXTtcbiAgICAgICAgICAgICAgc3RhcnRYID0gZS5zY3JlZW5YO1xuICAgICAgICAgICAgICBzdGFydFkgPSBlLnNjcmVlblk7XG4gICAgICAgICAgICAgIHN0YXJ0VyA9IHRhcmdldC5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgICAgc3RhcnRIID0gdGFyZ2V0LmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgICAgcmF0aW8gPSBzdGFydEggLyBzdGFydFc7XG4gICAgICAgICAgICAgIHNlbGVjdGVkSGFuZGxlID0gaGFuZGxlO1xuICAgICAgICAgICAgICBzZWxlY3RlZEhhbmRsZS5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRIYW5kbGUuc3RhcnRQb3MgPSB7XG4gICAgICAgICAgICAgICAgeDogdGFyZ2V0V2lkdGggKiBoYW5kbGVbMF0gKyBzZWxlY3RlZEVsbVgsXG4gICAgICAgICAgICAgICAgeTogdGFyZ2V0SGVpZ2h0ICogaGFuZGxlWzFdICsgc2VsZWN0ZWRFbG1ZXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHN0YXJ0U2Nyb2xsV2lkdGggPSByb290RWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICAgICAgICAgICAgc3RhcnRTY3JvbGxIZWlnaHQgPSByb290RWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gICAgICAgICAgICAgIHJlc2l6ZUJhY2tkcm9wID0gZG9tLmFkZChyb290RWxlbWVudCwgJ2RpdicsIHtcbiAgICAgICAgICAgICAgICAnY2xhc3MnOiAnbWNlLXJlc2l6ZS1iYWNrZHJvcCcsXG4gICAgICAgICAgICAgICAgJ2RhdGEtbWNlLWJvZ3VzJzogJ2FsbCdcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGRvbS5zZXRTdHlsZXMocmVzaXplQmFja2Ryb3AsIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgICAgICAgICBsZWZ0OiAnMCcsXG4gICAgICAgICAgICAgICAgdG9wOiAnMCcsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJ1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRFbG1HaG9zdCA9IGNyZWF0ZUdob3N0RWxlbWVudChzZWxlY3RlZEVsbSk7XG4gICAgICAgICAgICAgIGRvbS5hZGRDbGFzcyhzZWxlY3RlZEVsbUdob3N0LCAnbWNlLWNsb25lZHJlc2l6YWJsZScpO1xuICAgICAgICAgICAgICBkb20uc2V0QXR0cmliKHNlbGVjdGVkRWxtR2hvc3QsICdkYXRhLW1jZS1ib2d1cycsICdhbGwnKTtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRFbG1HaG9zdC5jb250ZW50RWRpdGFibGUgPSAnZmFsc2UnO1xuICAgICAgICAgICAgICBkb20uc2V0U3R5bGVzKHNlbGVjdGVkRWxtR2hvc3QsIHtcbiAgICAgICAgICAgICAgICBsZWZ0OiBzZWxlY3RlZEVsbVgsXG4gICAgICAgICAgICAgICAgdG9wOiBzZWxlY3RlZEVsbVksXG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBzZXRHaG9zdEVsbVNpemUoc2VsZWN0ZWRFbG1HaG9zdCwgdGFyZ2V0V2lkdGgsIHRhcmdldEhlaWdodCk7XG4gICAgICAgICAgICAgIHNlbGVjdGVkRWxtR2hvc3QucmVtb3ZlQXR0cmlidXRlKGVsZW1lbnRTZWxlY3Rpb25BdHRyKTtcbiAgICAgICAgICAgICAgcm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQoc2VsZWN0ZWRFbG1HaG9zdCk7XG4gICAgICAgICAgICAgIGRvbS5iaW5kKGVkaXRhYmxlRG9jLCAnbW91c2Vtb3ZlJywgcmVzaXplR2hvc3RFbGVtZW50KTtcbiAgICAgICAgICAgICAgZG9tLmJpbmQoZWRpdGFibGVEb2MsICdtb3VzZXVwJywgZW5kR2hvc3RSZXNpemUpO1xuICAgICAgICAgICAgICBpZiAocm9vdERvY3VtZW50ICE9PSBlZGl0YWJsZURvYykge1xuICAgICAgICAgICAgICAgIGRvbS5iaW5kKHJvb3REb2N1bWVudCwgJ21vdXNlbW92ZScsIHJlc2l6ZUdob3N0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgZG9tLmJpbmQocm9vdERvY3VtZW50LCAnbW91c2V1cCcsIGVuZEdob3N0UmVzaXplKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNpemVIZWxwZXIgPSBkb20uYWRkKHJvb3RFbGVtZW50LCAnZGl2Jywge1xuICAgICAgICAgICAgICAgICdjbGFzcyc6ICdtY2UtcmVzaXplLWhlbHBlcicsXG4gICAgICAgICAgICAgICAgJ2RhdGEtbWNlLWJvZ3VzJzogJ2FsbCdcbiAgICAgICAgICAgICAgfSwgc3RhcnRXICsgJyAmdGltZXM7ICcgKyBzdGFydEgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBoYW5kbGVFbG0gPSBkb20uZ2V0KCdtY2VSZXNpemVIYW5kbGUnICsgbmFtZSk7XG4gICAgICAgICAgICBpZiAoaGFuZGxlRWxtKSB7XG4gICAgICAgICAgICAgIGRvbS5yZW1vdmUoaGFuZGxlRWxtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhhbmRsZUVsbSA9IGRvbS5hZGQocm9vdEVsZW1lbnQsICdkaXYnLCB7XG4gICAgICAgICAgICAgICdpZCc6ICdtY2VSZXNpemVIYW5kbGUnICsgbmFtZSxcbiAgICAgICAgICAgICAgJ2RhdGEtbWNlLWJvZ3VzJzogJ2FsbCcsXG4gICAgICAgICAgICAgICdjbGFzcyc6ICdtY2UtcmVzaXplaGFuZGxlJyxcbiAgICAgICAgICAgICAgJ3Vuc2VsZWN0YWJsZSc6IHRydWUsXG4gICAgICAgICAgICAgICdzdHlsZSc6ICdjdXJzb3I6JyArIG5hbWUgKyAnLXJlc2l6ZTsgbWFyZ2luOjA7IHBhZGRpbmc6MCdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZG9tLmJpbmQoaGFuZGxlRWxtLCAnbW91c2Vkb3duJywgZSA9PiB7XG4gICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgc3RhcnREcmFnKGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBoYW5kbGUuZWxtID0gaGFuZGxlRWxtO1xuICAgICAgICAgICAgZG9tLnNldFN0eWxlcyhoYW5kbGVFbG0sIHtcbiAgICAgICAgICAgICAgbGVmdDogdGFyZ2V0V2lkdGggKiBoYW5kbGVbMF0gKyBzZWxlY3RlZEVsbVggLSBoYW5kbGVFbG0ub2Zmc2V0V2lkdGggLyAyLFxuICAgICAgICAgICAgICB0b3A6IHRhcmdldEhlaWdodCAqIGhhbmRsZVsxXSArIHNlbGVjdGVkRWxtWSAtIGhhbmRsZUVsbS5vZmZzZXRIZWlnaHQgLyAyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWRlUmVzaXplUmVjdChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCB0aHJvdHRsZWRTaG93UmVzaXplUmVjdCA9IGZpcnN0JDEoc2hvd1Jlc2l6ZVJlY3QsIDApO1xuICAgICAgY29uc3QgaGlkZVJlc2l6ZVJlY3QgPSAocmVtb3ZlU2VsZWN0ZWQgPSB0cnVlKSA9PiB7XG4gICAgICAgIHRocm90dGxlZFNob3dSZXNpemVSZWN0LmNhbmNlbCgpO1xuICAgICAgICB1bmJpbmRSZXNpemVIYW5kbGVFdmVudHMoKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkRWxtICYmIHJlbW92ZVNlbGVjdGVkKSB7XG4gICAgICAgICAgc2VsZWN0ZWRFbG0ucmVtb3ZlQXR0cmlidXRlKGVsZW1lbnRTZWxlY3Rpb25BdHRyKTtcbiAgICAgICAgfVxuICAgICAgICBlYWNoJGQocmVzaXplSGFuZGxlcywgKHZhbHVlLCBuYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgaGFuZGxlRWxtID0gZG9tLmdldCgnbWNlUmVzaXplSGFuZGxlJyArIG5hbWUpO1xuICAgICAgICAgIGlmIChoYW5kbGVFbG0pIHtcbiAgICAgICAgICAgIGRvbS51bmJpbmQoaGFuZGxlRWxtKTtcbiAgICAgICAgICAgIGRvbS5yZW1vdmUoaGFuZGxlRWxtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzQ2hpbGRPckVxdWFsID0gKG5vZGUsIHBhcmVudCkgPT4gZG9tLmlzQ2hpbGRPZihub2RlLCBwYXJlbnQpO1xuICAgICAgY29uc3QgdXBkYXRlUmVzaXplUmVjdCA9IGUgPT4ge1xuICAgICAgICBpZiAocmVzaXplU3RhcnRlZCB8fCBlZGl0b3IucmVtb3ZlZCB8fCBlZGl0b3IuY29tcG9zaW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmdldEVsbSA9IGUudHlwZSA9PT0gJ21vdXNlZG93bicgPyBlLnRhcmdldCA6IHNlbGVjdGlvbi5nZXROb2RlKCk7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xFbG0gPSBjbG9zZXN0JDMoU3VnYXJFbGVtZW50LmZyb21Eb20odGFyZ2V0RWxtKSwgY29udHJvbEVsbVNlbGVjdG9yKS5tYXAoZSA9PiBlLmRvbSkuZmlsdGVyKGUgPT4gZG9tLmlzRWRpdGFibGUoZS5wYXJlbnRFbGVtZW50KSkuZ2V0T3JVbmRlZmluZWQoKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZSA9IGlzTm9uTnVsbGFibGUoY29udHJvbEVsbSkgPyBkb20uZ2V0QXR0cmliKGNvbnRyb2xFbG0sIGVsZW1lbnRTZWxlY3Rpb25BdHRyLCAnMScpIDogJzEnO1xuICAgICAgICBlYWNoJGUoZG9tLnNlbGVjdChgaW1nWyR7IGVsZW1lbnRTZWxlY3Rpb25BdHRyIH1dLGhyWyR7IGVsZW1lbnRTZWxlY3Rpb25BdHRyIH1dYCksIGltZyA9PiB7XG4gICAgICAgICAgaW1nLnJlbW92ZUF0dHJpYnV0ZShlbGVtZW50U2VsZWN0aW9uQXR0cik7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaXNOb25OdWxsYWJsZShjb250cm9sRWxtKSAmJiBpc0NoaWxkT3JFcXVhbChjb250cm9sRWxtLCByb290RWxlbWVudCkgJiYgZWRpdG9yLmhhc0ZvY3VzKCkpIHtcbiAgICAgICAgICBkaXNhYmxlR2Vja29SZXNpemUoKTtcbiAgICAgICAgICBjb25zdCBzdGFydEVsbSA9IHNlbGVjdGlvbi5nZXRTdGFydCh0cnVlKTtcbiAgICAgICAgICBpZiAoaXNDaGlsZE9yRXF1YWwoc3RhcnRFbG0sIGNvbnRyb2xFbG0pICYmIGlzQ2hpbGRPckVxdWFsKHNlbGVjdGlvbi5nZXRFbmQodHJ1ZSksIGNvbnRyb2xFbG0pKSB7XG4gICAgICAgICAgICBkb20uc2V0QXR0cmliKGNvbnRyb2xFbG0sIGVsZW1lbnRTZWxlY3Rpb25BdHRyLCBzZWxlY3RlZFZhbHVlKTtcbiAgICAgICAgICAgIHRocm90dGxlZFNob3dSZXNpemVSZWN0LnRocm90dGxlKGNvbnRyb2xFbG0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBoaWRlUmVzaXplUmVjdCgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVuYmluZFJlc2l6ZUhhbmRsZUV2ZW50cyA9ICgpID0+IHtcbiAgICAgICAgZWFjaCRkKHJlc2l6ZUhhbmRsZXMsIGhhbmRsZSA9PiB7XG4gICAgICAgICAgaWYgKGhhbmRsZS5lbG0pIHtcbiAgICAgICAgICAgIGRvbS51bmJpbmQoaGFuZGxlLmVsbSk7XG4gICAgICAgICAgICBkZWxldGUgaGFuZGxlLmVsbTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRpc2FibGVHZWNrb1Jlc2l6ZSA9ICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBlZGl0b3IuZ2V0RG9jKCkuZXhlY0NvbW1hbmQoJ2VuYWJsZU9iamVjdFJlc2l6aW5nJywgZmFsc2UsICdmYWxzZScpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZWRpdG9yLm9uKCdpbml0JywgKCkgPT4ge1xuICAgICAgICBkaXNhYmxlR2Vja29SZXNpemUoKTtcbiAgICAgICAgZWRpdG9yLm9uKCdOb2RlQ2hhbmdlIFJlc2l6ZUVkaXRvciBSZXNpemVXaW5kb3cgUmVzaXplQ29udGVudCBkcm9wJywgdXBkYXRlUmVzaXplUmVjdCk7XG4gICAgICAgIGVkaXRvci5vbigna2V5dXAgY29tcG9zaXRpb25lbmQnLCBlID0+IHtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRFbG0gJiYgc2VsZWN0ZWRFbG0ubm9kZU5hbWUgPT09ICdUQUJMRScpIHtcbiAgICAgICAgICAgIHVwZGF0ZVJlc2l6ZVJlY3QoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLm9uKCdoaWRlIGJsdXInLCBoaWRlUmVzaXplUmVjdCk7XG4gICAgICAgIGVkaXRvci5vbignY29udGV4dG1lbnUgbG9uZ3ByZXNzJywgY29udGV4dE1lbnVTZWxlY3RJbWFnZSwgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbigncmVtb3ZlJywgdW5iaW5kUmVzaXplSGFuZGxlRXZlbnRzKTtcbiAgICAgIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICAgIHRocm90dGxlZFNob3dSZXNpemVSZWN0LmNhbmNlbCgpO1xuICAgICAgICBzZWxlY3RlZEVsbSA9IHNlbGVjdGVkRWxtR2hvc3QgPSByZXNpemVCYWNrZHJvcCA9IG51bGw7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNSZXNpemFibGUsXG4gICAgICAgIHNob3dSZXNpemVSZWN0LFxuICAgICAgICBoaWRlUmVzaXplUmVjdCxcbiAgICAgICAgdXBkYXRlUmVzaXplUmVjdCxcbiAgICAgICAgZGVzdHJveVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0U3RhcnQgPSAocm5nLCBzaXR1KSA9PiB7XG4gICAgICBzaXR1LmZvbGQoZSA9PiB7XG4gICAgICAgIHJuZy5zZXRTdGFydEJlZm9yZShlLmRvbSk7XG4gICAgICB9LCAoZSwgbykgPT4ge1xuICAgICAgICBybmcuc2V0U3RhcnQoZS5kb20sIG8pO1xuICAgICAgfSwgZSA9PiB7XG4gICAgICAgIHJuZy5zZXRTdGFydEFmdGVyKGUuZG9tKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2V0RmluaXNoID0gKHJuZywgc2l0dSkgPT4ge1xuICAgICAgc2l0dS5mb2xkKGUgPT4ge1xuICAgICAgICBybmcuc2V0RW5kQmVmb3JlKGUuZG9tKTtcbiAgICAgIH0sIChlLCBvKSA9PiB7XG4gICAgICAgIHJuZy5zZXRFbmQoZS5kb20sIG8pO1xuICAgICAgfSwgZSA9PiB7XG4gICAgICAgIHJuZy5zZXRFbmRBZnRlcihlLmRvbSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbGF0aXZlVG9OYXRpdmUgPSAod2luLCBzdGFydFNpdHUsIGZpbmlzaFNpdHUpID0+IHtcbiAgICAgIGNvbnN0IHJhbmdlID0gd2luLmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICBzZXRTdGFydChyYW5nZSwgc3RhcnRTaXR1KTtcbiAgICAgIHNldEZpbmlzaChyYW5nZSwgZmluaXNoU2l0dSk7XG4gICAgICByZXR1cm4gcmFuZ2U7XG4gICAgfTtcbiAgICBjb25zdCBleGFjdFRvTmF0aXZlID0gKHdpbiwgc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCkgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gd2luLmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICBybmcuc2V0U3RhcnQoc3RhcnQuZG9tLCBzb2Zmc2V0KTtcbiAgICAgIHJuZy5zZXRFbmQoZmluaXNoLmRvbSwgZm9mZnNldCk7XG4gICAgICByZXR1cm4gcm5nO1xuICAgIH07XG5cbiAgICBjb25zdCBhZHQkMyA9IEFkdC5nZW5lcmF0ZShbXG4gICAgICB7XG4gICAgICAgIGx0cjogW1xuICAgICAgICAgICdzdGFydCcsXG4gICAgICAgICAgJ3NvZmZzZXQnLFxuICAgICAgICAgICdmaW5pc2gnLFxuICAgICAgICAgICdmb2Zmc2V0J1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBydGw6IFtcbiAgICAgICAgICAnc3RhcnQnLFxuICAgICAgICAgICdzb2Zmc2V0JyxcbiAgICAgICAgICAnZmluaXNoJyxcbiAgICAgICAgICAnZm9mZnNldCdcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0pO1xuICAgIGNvbnN0IGZyb21SYW5nZSA9ICh3aW4sIHR5cGUsIHJhbmdlKSA9PiB0eXBlKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJhbmdlLnN0YXJ0Q29udGFpbmVyKSwgcmFuZ2Uuc3RhcnRPZmZzZXQsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJhbmdlLmVuZENvbnRhaW5lciksIHJhbmdlLmVuZE9mZnNldCk7XG4gICAgY29uc3QgZ2V0UmFuZ2VzID0gKHdpbiwgc2VsZWN0aW9uKSA9PiBzZWxlY3Rpb24ubWF0Y2goe1xuICAgICAgZG9tUmFuZ2U6IHJuZyA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbHRyOiBjb25zdGFudChybmcpLFxuICAgICAgICAgIHJ0bDogT3B0aW9uYWwubm9uZVxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHJlbGF0aXZlOiAoc3RhcnRTaXR1LCBmaW5pc2hTaXR1KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbHRyOiBjYWNoZWQoKCkgPT4gcmVsYXRpdmVUb05hdGl2ZSh3aW4sIHN0YXJ0U2l0dSwgZmluaXNoU2l0dSkpLFxuICAgICAgICAgIHJ0bDogY2FjaGVkKCgpID0+IE9wdGlvbmFsLnNvbWUocmVsYXRpdmVUb05hdGl2ZSh3aW4sIGZpbmlzaFNpdHUsIHN0YXJ0U2l0dSkpKVxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIGV4YWN0OiAoc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGx0cjogY2FjaGVkKCgpID0+IGV4YWN0VG9OYXRpdmUod2luLCBzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSksXG4gICAgICAgICAgcnRsOiBjYWNoZWQoKCkgPT4gT3B0aW9uYWwuc29tZShleGFjdFRvTmF0aXZlKHdpbiwgZmluaXNoLCBmb2Zmc2V0LCBzdGFydCwgc29mZnNldCkpKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGRvRGlhZ25vc2UgPSAod2luLCByYW5nZXMpID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IHJhbmdlcy5sdHIoKTtcbiAgICAgIGlmIChybmcuY29sbGFwc2VkKSB7XG4gICAgICAgIGNvbnN0IHJldmVyc2VkID0gcmFuZ2VzLnJ0bCgpLmZpbHRlcihyZXYgPT4gcmV2LmNvbGxhcHNlZCA9PT0gZmFsc2UpO1xuICAgICAgICByZXR1cm4gcmV2ZXJzZWQubWFwKHJldiA9PiBhZHQkMy5ydGwoU3VnYXJFbGVtZW50LmZyb21Eb20ocmV2LmVuZENvbnRhaW5lciksIHJldi5lbmRPZmZzZXQsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJldi5zdGFydENvbnRhaW5lciksIHJldi5zdGFydE9mZnNldCkpLmdldE9yVGh1bmsoKCkgPT4gZnJvbVJhbmdlKHdpbiwgYWR0JDMubHRyLCBybmcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmcm9tUmFuZ2Uod2luLCBhZHQkMy5sdHIsIHJuZyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBkaWFnbm9zZSA9ICh3aW4sIHNlbGVjdGlvbikgPT4ge1xuICAgICAgY29uc3QgcmFuZ2VzID0gZ2V0UmFuZ2VzKHdpbiwgc2VsZWN0aW9uKTtcbiAgICAgIHJldHVybiBkb0RpYWdub3NlKHdpbiwgcmFuZ2VzKTtcbiAgICB9O1xuICAgIGFkdCQzLmx0cjtcbiAgICBhZHQkMy5ydGw7XG5cbiAgICBjb25zdCBjcmVhdGUkYSA9IChzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSA9PiAoe1xuICAgICAgc3RhcnQsXG4gICAgICBzb2Zmc2V0LFxuICAgICAgZmluaXNoLFxuICAgICAgZm9mZnNldFxuICAgIH0pO1xuICAgIGNvbnN0IFNpbVJhbmdlID0geyBjcmVhdGU6IGNyZWF0ZSRhIH07XG5cbiAgICBjb25zdCBjYXJldFBvc2l0aW9uRnJvbVBvaW50ID0gKGRvYywgeCwgeSkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKChfYiA9IChfYSA9IGRvYy5kb20pLmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB4LCB5KSkuYmluZChwb3MgPT4ge1xuICAgICAgICBpZiAocG9zLm9mZnNldE5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHIgPSBkb2MuZG9tLmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgIHIuc2V0U3RhcnQocG9zLm9mZnNldE5vZGUsIHBvcy5vZmZzZXQpO1xuICAgICAgICByLmNvbGxhcHNlKCk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHIpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBjYXJldFJhbmdlRnJvbVBvaW50ID0gKGRvYywgeCwgeSkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKChfYiA9IChfYSA9IGRvYy5kb20pLmNhcmV0UmFuZ2VGcm9tUG9pbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB4LCB5KSk7XG4gICAgfTtcbiAgICBjb25zdCBhdmFpbGFibGVTZWFyY2ggPSAoKCkgPT4ge1xuICAgICAgaWYgKGRvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIGNhcmV0UG9zaXRpb25Gcm9tUG9pbnQ7XG4gICAgICB9IGVsc2UgaWYgKGRvY3VtZW50LmNhcmV0UmFuZ2VGcm9tUG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIGNhcmV0UmFuZ2VGcm9tUG9pbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIGNvbnN0IGZyb21Qb2ludCQxID0gKHdpbiwgeCwgeSkgPT4ge1xuICAgICAgY29uc3QgZG9jID0gU3VnYXJFbGVtZW50LmZyb21Eb20od2luLmRvY3VtZW50KTtcbiAgICAgIHJldHVybiBhdmFpbGFibGVTZWFyY2goZG9jLCB4LCB5KS5tYXAocm5nID0+IFNpbVJhbmdlLmNyZWF0ZShTdWdhckVsZW1lbnQuZnJvbURvbShybmcuc3RhcnRDb250YWluZXIpLCBybmcuc3RhcnRPZmZzZXQsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJuZy5lbmRDb250YWluZXIpLCBybmcuZW5kT2Zmc2V0KSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFkdCQyID0gQWR0LmdlbmVyYXRlKFtcbiAgICAgIHsgYmVmb3JlOiBbJ2VsZW1lbnQnXSB9LFxuICAgICAge1xuICAgICAgICBvbjogW1xuICAgICAgICAgICdlbGVtZW50JyxcbiAgICAgICAgICAnb2Zmc2V0J1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgeyBhZnRlcjogWydlbGVtZW50J10gfVxuICAgIF0pO1xuICAgIGNvbnN0IGNhdGEgPSAoc3ViamVjdCwgb25CZWZvcmUsIG9uT24sIG9uQWZ0ZXIpID0+IHN1YmplY3QuZm9sZChvbkJlZm9yZSwgb25Pbiwgb25BZnRlcik7XG4gICAgY29uc3QgZ2V0U3RhcnQkMiA9IHNpdHUgPT4gc2l0dS5mb2xkKGlkZW50aXR5LCBpZGVudGl0eSwgaWRlbnRpdHkpO1xuICAgIGNvbnN0IGJlZm9yZSQxID0gYWR0JDIuYmVmb3JlO1xuICAgIGNvbnN0IG9uID0gYWR0JDIub247XG4gICAgY29uc3QgYWZ0ZXIkMSA9IGFkdCQyLmFmdGVyO1xuICAgIGNvbnN0IFNpdHUgPSB7XG4gICAgICBiZWZvcmU6IGJlZm9yZSQxLFxuICAgICAgb24sXG4gICAgICBhZnRlcjogYWZ0ZXIkMSxcbiAgICAgIGNhdGEsXG4gICAgICBnZXRTdGFydDogZ2V0U3RhcnQkMlxuICAgIH07XG5cbiAgICBjb25zdCBhZHQkMSA9IEFkdC5nZW5lcmF0ZShbXG4gICAgICB7IGRvbVJhbmdlOiBbJ3JuZyddIH0sXG4gICAgICB7XG4gICAgICAgIHJlbGF0aXZlOiBbXG4gICAgICAgICAgJ3N0YXJ0U2l0dScsXG4gICAgICAgICAgJ2ZpbmlzaFNpdHUnXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGV4YWN0OiBbXG4gICAgICAgICAgJ3N0YXJ0JyxcbiAgICAgICAgICAnc29mZnNldCcsXG4gICAgICAgICAgJ2ZpbmlzaCcsXG4gICAgICAgICAgJ2ZvZmZzZXQnXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdKTtcbiAgICBjb25zdCBleGFjdEZyb21SYW5nZSA9IHNpbVJhbmdlID0+IGFkdCQxLmV4YWN0KHNpbVJhbmdlLnN0YXJ0LCBzaW1SYW5nZS5zb2Zmc2V0LCBzaW1SYW5nZS5maW5pc2gsIHNpbVJhbmdlLmZvZmZzZXQpO1xuICAgIGNvbnN0IGdldFN0YXJ0JDEgPSBzZWxlY3Rpb24gPT4gc2VsZWN0aW9uLm1hdGNoKHtcbiAgICAgIGRvbVJhbmdlOiBybmcgPT4gU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLnN0YXJ0Q29udGFpbmVyKSxcbiAgICAgIHJlbGF0aXZlOiAoc3RhcnRTaXR1LCBfZmluaXNoU2l0dSkgPT4gU2l0dS5nZXRTdGFydChzdGFydFNpdHUpLFxuICAgICAgZXhhY3Q6IChzdGFydCwgX3NvZmZzZXQsIF9maW5pc2gsIF9mb2Zmc2V0KSA9PiBzdGFydFxuICAgIH0pO1xuICAgIGNvbnN0IGRvbVJhbmdlID0gYWR0JDEuZG9tUmFuZ2U7XG4gICAgY29uc3QgcmVsYXRpdmUgPSBhZHQkMS5yZWxhdGl2ZTtcbiAgICBjb25zdCBleGFjdCA9IGFkdCQxLmV4YWN0O1xuICAgIGNvbnN0IGdldFdpbiA9IHNlbGVjdGlvbiA9PiB7XG4gICAgICBjb25zdCBzdGFydCA9IGdldFN0YXJ0JDEoc2VsZWN0aW9uKTtcbiAgICAgIHJldHVybiBkZWZhdWx0VmlldyhzdGFydCk7XG4gICAgfTtcbiAgICBjb25zdCByYW5nZSA9IFNpbVJhbmdlLmNyZWF0ZTtcbiAgICBjb25zdCBTaW1TZWxlY3Rpb24gPSB7XG4gICAgICBkb21SYW5nZSxcbiAgICAgIHJlbGF0aXZlLFxuICAgICAgZXhhY3QsXG4gICAgICBleGFjdEZyb21SYW5nZSxcbiAgICAgIGdldFdpbixcbiAgICAgIHJhbmdlXG4gICAgfTtcblxuICAgIGNvbnN0IGJlZm9yZVNwZWNpYWwgPSAoZWxlbWVudCwgb2Zmc2V0KSA9PiB7XG4gICAgICBjb25zdCBuYW1lJDEgPSBuYW1lKGVsZW1lbnQpO1xuICAgICAgaWYgKCdpbnB1dCcgPT09IG5hbWUkMSkge1xuICAgICAgICByZXR1cm4gU2l0dS5hZnRlcihlbGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoIWNvbnRhaW5zJDIoW1xuICAgICAgICAgICdicicsXG4gICAgICAgICAgJ2ltZydcbiAgICAgICAgXSwgbmFtZSQxKSkge1xuICAgICAgICByZXR1cm4gU2l0dS5vbihlbGVtZW50LCBvZmZzZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9mZnNldCA9PT0gMCA/IFNpdHUuYmVmb3JlKGVsZW1lbnQpIDogU2l0dS5hZnRlcihlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHByZXByb2Nlc3NSZWxhdGl2ZSA9IChzdGFydFNpdHUsIGZpbmlzaFNpdHUpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gc3RhcnRTaXR1LmZvbGQoU2l0dS5iZWZvcmUsIGJlZm9yZVNwZWNpYWwsIFNpdHUuYWZ0ZXIpO1xuICAgICAgY29uc3QgZmluaXNoID0gZmluaXNoU2l0dS5mb2xkKFNpdHUuYmVmb3JlLCBiZWZvcmVTcGVjaWFsLCBTaXR1LmFmdGVyKTtcbiAgICAgIHJldHVybiBTaW1TZWxlY3Rpb24ucmVsYXRpdmUoc3RhcnQsIGZpbmlzaCk7XG4gICAgfTtcbiAgICBjb25zdCBwcmVwcm9jZXNzRXhhY3QgPSAoc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCkgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRTaXR1ID0gYmVmb3JlU3BlY2lhbChzdGFydCwgc29mZnNldCk7XG4gICAgICBjb25zdCBmaW5pc2hTaXR1ID0gYmVmb3JlU3BlY2lhbChmaW5pc2gsIGZvZmZzZXQpO1xuICAgICAgcmV0dXJuIFNpbVNlbGVjdGlvbi5yZWxhdGl2ZShzdGFydFNpdHUsIGZpbmlzaFNpdHUpO1xuICAgIH07XG4gICAgY29uc3QgcHJlcHJvY2VzcyA9IHNlbGVjdGlvbiA9PiBzZWxlY3Rpb24ubWF0Y2goe1xuICAgICAgZG9tUmFuZ2U6IHJuZyA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLnN0YXJ0Q29udGFpbmVyKTtcbiAgICAgICAgY29uc3QgZmluaXNoID0gU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLmVuZENvbnRhaW5lcik7XG4gICAgICAgIHJldHVybiBwcmVwcm9jZXNzRXhhY3Qoc3RhcnQsIHJuZy5zdGFydE9mZnNldCwgZmluaXNoLCBybmcuZW5kT2Zmc2V0KTtcbiAgICAgIH0sXG4gICAgICByZWxhdGl2ZTogcHJlcHJvY2Vzc1JlbGF0aXZlLFxuICAgICAgZXhhY3Q6IHByZXByb2Nlc3NFeGFjdFxuICAgIH0pO1xuXG4gICAgY29uc3QgZnJvbUVsZW1lbnRzID0gKGVsZW1lbnRzLCBzY29wZSkgPT4ge1xuICAgICAgY29uc3QgZG9jID0gc2NvcGUgfHwgZG9jdW1lbnQ7XG4gICAgICBjb25zdCBmcmFnbWVudCA9IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICBlYWNoJGUoZWxlbWVudHMsIGVsZW1lbnQgPT4ge1xuICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChlbGVtZW50LmRvbSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBTdWdhckVsZW1lbnQuZnJvbURvbShmcmFnbWVudCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHRvTmF0aXZlID0gc2VsZWN0aW9uID0+IHtcbiAgICAgIGNvbnN0IHdpbiA9IFNpbVNlbGVjdGlvbi5nZXRXaW4oc2VsZWN0aW9uKS5kb207XG4gICAgICBjb25zdCBnZXREb21SYW5nZSA9IChzdGFydCwgc29mZnNldCwgZmluaXNoLCBmb2Zmc2V0KSA9PiBleGFjdFRvTmF0aXZlKHdpbiwgc3RhcnQsIHNvZmZzZXQsIGZpbmlzaCwgZm9mZnNldCk7XG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IHByZXByb2Nlc3Moc2VsZWN0aW9uKTtcbiAgICAgIHJldHVybiBkaWFnbm9zZSh3aW4sIGZpbHRlcmVkKS5tYXRjaCh7XG4gICAgICAgIGx0cjogZ2V0RG9tUmFuZ2UsXG4gICAgICAgIHJ0bDogZ2V0RG9tUmFuZ2VcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0QXRQb2ludCA9ICh3aW4sIHgsIHkpID0+IGZyb21Qb2ludCQxKHdpbiwgeCwgeSk7XG5cbiAgICBjb25zdCBmcm9tUG9pbnQgPSAoY2xpZW50WCwgY2xpZW50WSwgZG9jKSA9PiB7XG4gICAgICBjb25zdCB3aW4gPSBkZWZhdWx0VmlldyhTdWdhckVsZW1lbnQuZnJvbURvbShkb2MpKTtcbiAgICAgIHJldHVybiBnZXRBdFBvaW50KHdpbi5kb20sIGNsaWVudFgsIGNsaWVudFkpLm1hcChzaW1SYW5nZSA9PiB7XG4gICAgICAgIGNvbnN0IHJuZyA9IGRvYy5jcmVhdGVSYW5nZSgpO1xuICAgICAgICBybmcuc2V0U3RhcnQoc2ltUmFuZ2Uuc3RhcnQuZG9tLCBzaW1SYW5nZS5zb2Zmc2V0KTtcbiAgICAgICAgcm5nLnNldEVuZChzaW1SYW5nZS5maW5pc2guZG9tLCBzaW1SYW5nZS5mb2Zmc2V0KTtcbiAgICAgICAgcmV0dXJuIHJuZztcbiAgICAgIH0pLmdldE9yVW5kZWZpbmVkKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzRXEkNCA9IChybmcxLCBybmcyKSA9PiB7XG4gICAgICByZXR1cm4gaXNOb25OdWxsYWJsZShybmcxKSAmJiBpc05vbk51bGxhYmxlKHJuZzIpICYmIChybmcxLnN0YXJ0Q29udGFpbmVyID09PSBybmcyLnN0YXJ0Q29udGFpbmVyICYmIHJuZzEuc3RhcnRPZmZzZXQgPT09IHJuZzIuc3RhcnRPZmZzZXQpICYmIChybmcxLmVuZENvbnRhaW5lciA9PT0gcm5nMi5lbmRDb250YWluZXIgJiYgcm5nMS5lbmRPZmZzZXQgPT09IHJuZzIuZW5kT2Zmc2V0KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmluZFBhcmVudCA9IChub2RlLCByb290Tm9kZSwgcHJlZGljYXRlKSA9PiB7XG4gICAgICBsZXQgY3VycmVudE5vZGUgPSBub2RlO1xuICAgICAgd2hpbGUgKGN1cnJlbnROb2RlICYmIGN1cnJlbnROb2RlICE9PSByb290Tm9kZSkge1xuICAgICAgICBpZiAocHJlZGljYXRlKGN1cnJlbnROb2RlKSkge1xuICAgICAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIGNvbnN0IGhhc1BhcmVudCQxID0gKG5vZGUsIHJvb3ROb2RlLCBwcmVkaWNhdGUpID0+IGZpbmRQYXJlbnQobm9kZSwgcm9vdE5vZGUsIHByZWRpY2F0ZSkgIT09IG51bGw7XG4gICAgY29uc3QgaGFzUGFyZW50V2l0aE5hbWUgPSAobm9kZSwgcm9vdE5vZGUsIG5hbWUpID0+IGhhc1BhcmVudCQxKG5vZGUsIHJvb3ROb2RlLCBub2RlID0+IG5vZGUubm9kZU5hbWUgPT09IG5hbWUpO1xuICAgIGNvbnN0IGlzQ2VGYWxzZUNhcmV0Q29udGFpbmVyID0gKG5vZGUsIHJvb3ROb2RlKSA9PiBpc0NhcmV0Q29udGFpbmVyJDIobm9kZSkgJiYgIWhhc1BhcmVudCQxKG5vZGUsIHJvb3ROb2RlLCBpc0NhcmV0Tm9kZSk7XG4gICAgY29uc3QgaGFzQnJCZWZvcmVBZnRlciA9IChkb20sIG5vZGUsIGxlZnQpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICBjb25zdCB3YWxrZXIgPSBuZXcgRG9tVHJlZVdhbGtlcihub2RlLCBkb20uZ2V0UGFyZW50KHBhcmVudE5vZGUsIGRvbS5pc0Jsb2NrKSB8fCBkb20uZ2V0Um9vdCgpKTtcbiAgICAgICAgbGV0IGN1cnJlbnROb2RlO1xuICAgICAgICB3aGlsZSAoY3VycmVudE5vZGUgPSB3YWxrZXJbbGVmdCA/ICdwcmV2JyA6ICduZXh0J10oKSkge1xuICAgICAgICAgIGlmIChpc0JyJDYoY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IGlzUHJldk5vZGUgPSAobm9kZSwgbmFtZSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgcmV0dXJuICgoX2EgPSBub2RlLnByZXZpb3VzU2libGluZykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5vZGVOYW1lKSA9PT0gbmFtZTtcbiAgICB9O1xuICAgIGNvbnN0IGhhc0NvbnRlbnRFZGl0YWJsZUZhbHNlUGFyZW50ID0gKHJvb3QsIG5vZGUpID0+IHtcbiAgICAgIGxldCBjdXJyZW50Tm9kZSA9IG5vZGU7XG4gICAgICB3aGlsZSAoY3VycmVudE5vZGUgJiYgY3VycmVudE5vZGUgIT09IHJvb3QpIHtcbiAgICAgICAgaWYgKGlzQ29udGVudEVkaXRhYmxlRmFsc2UkYihjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kVGV4dE5vZGVSZWxhdGl2ZSA9IChkb20sIGlzQWZ0ZXJOb2RlLCBjb2xsYXBzZWQsIGxlZnQsIHN0YXJ0Tm9kZSkgPT4ge1xuICAgICAgY29uc3QgYm9keSA9IGRvbS5nZXRSb290KCk7XG4gICAgICBjb25zdCBub25FbXB0eUVsZW1lbnRzTWFwID0gZG9tLnNjaGVtYS5nZXROb25FbXB0eUVsZW1lbnRzKCk7XG4gICAgICBjb25zdCBwYXJlbnROb2RlID0gc3RhcnROb2RlLnBhcmVudE5vZGU7XG4gICAgICBsZXQgbGFzdElubGluZUVsZW1lbnQ7XG4gICAgICBsZXQgbm9kZTtcbiAgICAgIGlmICghcGFyZW50Tm9kZSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFyZW50QmxvY2tDb250YWluZXIgPSBkb20uZ2V0UGFyZW50KHBhcmVudE5vZGUsIGRvbS5pc0Jsb2NrKSB8fCBib2R5O1xuICAgICAgaWYgKGxlZnQgJiYgaXNCciQ2KHN0YXJ0Tm9kZSkgJiYgaXNBZnRlck5vZGUgJiYgZG9tLmlzRW1wdHkocGFyZW50QmxvY2tDb250YWluZXIpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKENhcmV0UG9zaXRpb24ocGFyZW50Tm9kZSwgZG9tLm5vZGVJbmRleChzdGFydE5vZGUpKSk7XG4gICAgICB9XG4gICAgICBjb25zdCB3YWxrZXIgPSBuZXcgRG9tVHJlZVdhbGtlcihzdGFydE5vZGUsIHBhcmVudEJsb2NrQ29udGFpbmVyKTtcbiAgICAgIHdoaWxlIChub2RlID0gd2Fsa2VyW2xlZnQgPyAncHJldicgOiAnbmV4dCddKCkpIHtcbiAgICAgICAgaWYgKGRvbS5nZXRDb250ZW50RWRpdGFibGVQYXJlbnQobm9kZSkgPT09ICdmYWxzZScgfHwgaXNDZUZhbHNlQ2FyZXRDb250YWluZXIobm9kZSwgYm9keSkpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1RleHQkYShub2RlKSAmJiBub2RlLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmICghaGFzUGFyZW50V2l0aE5hbWUobm9kZSwgYm9keSwgJ0EnKSkge1xuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoQ2FyZXRQb3NpdGlvbihub2RlLCBsZWZ0ID8gbm9kZS5kYXRhLmxlbmd0aCA6IDApKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9tLmlzQmxvY2sobm9kZSkgfHwgbm9uRW1wdHlFbGVtZW50c01hcFtub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0SW5saW5lRWxlbWVudCA9IG5vZGU7XG4gICAgICB9XG4gICAgICBpZiAoaXNDb21tZW50KGxhc3RJbmxpbmVFbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbGxhcHNlZCAmJiBsYXN0SW5saW5lRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShDYXJldFBvc2l0aW9uKGxhc3RJbmxpbmVFbGVtZW50LCAwKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplRW5kUG9pbnQgPSAoZG9tLCBjb2xsYXBzZWQsIHN0YXJ0LCBybmcpID0+IHtcbiAgICAgIGNvbnN0IGJvZHkgPSBkb20uZ2V0Um9vdCgpO1xuICAgICAgbGV0IG5vZGU7XG4gICAgICBsZXQgbm9ybWFsaXplZCA9IGZhbHNlO1xuICAgICAgbGV0IGNvbnRhaW5lciA9IHN0YXJ0ID8gcm5nLnN0YXJ0Q29udGFpbmVyIDogcm5nLmVuZENvbnRhaW5lcjtcbiAgICAgIGxldCBvZmZzZXQgPSBzdGFydCA/IHJuZy5zdGFydE9mZnNldCA6IHJuZy5lbmRPZmZzZXQ7XG4gICAgICBjb25zdCBpc0FmdGVyTm9kZSA9IGlzRWxlbWVudCQ2KGNvbnRhaW5lcikgJiYgb2Zmc2V0ID09PSBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGg7XG4gICAgICBjb25zdCBub25FbXB0eUVsZW1lbnRzTWFwID0gZG9tLnNjaGVtYS5nZXROb25FbXB0eUVsZW1lbnRzKCk7XG4gICAgICBsZXQgZGlyZWN0aW9uTGVmdCA9IHN0YXJ0O1xuICAgICAgaWYgKGlzQ2FyZXRDb250YWluZXIkMihjb250YWluZXIpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNFbGVtZW50JDYoY29udGFpbmVyKSAmJiBvZmZzZXQgPiBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIGRpcmVjdGlvbkxlZnQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0RvY3VtZW50JDEoY29udGFpbmVyKSkge1xuICAgICAgICBjb250YWluZXIgPSBib2R5O1xuICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRhaW5lciA9PT0gYm9keSkge1xuICAgICAgICBpZiAoZGlyZWN0aW9uTGVmdCkge1xuICAgICAgICAgIG5vZGUgPSBjb250YWluZXIuY2hpbGROb2Rlc1tvZmZzZXQgPiAwID8gb2Zmc2V0IC0gMSA6IDBdO1xuICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICBpZiAoaXNDYXJldENvbnRhaW5lciQyKG5vZGUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm9uRW1wdHlFbGVtZW50c01hcFtub2RlLm5vZGVOYW1lXSB8fCBpc1RhYmxlJDIobm9kZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICBvZmZzZXQgPSBNYXRoLm1pbighZGlyZWN0aW9uTGVmdCAmJiBvZmZzZXQgPiAwID8gb2Zmc2V0IC0gMSA6IG9mZnNldCwgY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLmNoaWxkTm9kZXNbb2Zmc2V0XTtcbiAgICAgICAgICBvZmZzZXQgPSBpc1RleHQkYShjb250YWluZXIpICYmIGlzQWZ0ZXJOb2RlID8gY29udGFpbmVyLmRhdGEubGVuZ3RoIDogMDtcbiAgICAgICAgICBpZiAoIWNvbGxhcHNlZCAmJiBjb250YWluZXIgPT09IGJvZHkubGFzdENoaWxkICYmIGlzVGFibGUkMihjb250YWluZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFzQ29udGVudEVkaXRhYmxlRmFsc2VQYXJlbnQoYm9keSwgY29udGFpbmVyKSB8fCBpc0NhcmV0Q29udGFpbmVyJDIoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkgJiYgIWlzVGFibGUkMihjb250YWluZXIpKSB7XG4gICAgICAgICAgICBub2RlID0gY29udGFpbmVyO1xuICAgICAgICAgICAgY29uc3Qgd2Fsa2VyID0gbmV3IERvbVRyZWVXYWxrZXIoY29udGFpbmVyLCBib2R5KTtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgaWYgKGlzQ29udGVudEVkaXRhYmxlRmFsc2UkYihub2RlKSB8fCBpc0NhcmV0Q29udGFpbmVyJDIobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGlzVGV4dCRhKG5vZGUpICYmIG5vZGUuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gZGlyZWN0aW9uTGVmdCA/IDAgOiBub2RlLmRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IG5vZGU7XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKG5vbkVtcHR5RWxlbWVudHNNYXBbbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSAmJiAhaXNUYWJsZUNlbGxPckNhcHRpb24obm9kZSkpIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBkb20ubm9kZUluZGV4KG5vZGUpO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICBpZiAoIWRpcmVjdGlvbkxlZnQpIHtcbiAgICAgICAgICAgICAgICAgIG9mZnNldCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBub3JtYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAobm9kZSA9IGRpcmVjdGlvbkxlZnQgPyB3YWxrZXIubmV4dCgpIDogd2Fsa2VyLnByZXYoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY29sbGFwc2VkKSB7XG4gICAgICAgIGlmIChpc1RleHQkYShjb250YWluZXIpICYmIG9mZnNldCA9PT0gMCkge1xuICAgICAgICAgIGZpbmRUZXh0Tm9kZVJlbGF0aXZlKGRvbSwgaXNBZnRlck5vZGUsIGNvbGxhcHNlZCwgdHJ1ZSwgY29udGFpbmVyKS5lYWNoKHBvcyA9PiB7XG4gICAgICAgICAgICBjb250YWluZXIgPSBwb3MuY29udGFpbmVyKCk7XG4gICAgICAgICAgICBvZmZzZXQgPSBwb3Mub2Zmc2V0KCk7XG4gICAgICAgICAgICBub3JtYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNFbGVtZW50JDYoY29udGFpbmVyKSkge1xuICAgICAgICAgIG5vZGUgPSBjb250YWluZXIuY2hpbGROb2Rlc1tvZmZzZXRdO1xuICAgICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgbm9kZSA9IGNvbnRhaW5lci5jaGlsZE5vZGVzW29mZnNldCAtIDFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobm9kZSAmJiBpc0JyJDYobm9kZSkgJiYgIWlzUHJldk5vZGUobm9kZSwgJ0EnKSAmJiAhaGFzQnJCZWZvcmVBZnRlcihkb20sIG5vZGUsIGZhbHNlKSAmJiAhaGFzQnJCZWZvcmVBZnRlcihkb20sIG5vZGUsIHRydWUpKSB7XG4gICAgICAgICAgICBmaW5kVGV4dE5vZGVSZWxhdGl2ZShkb20sIGlzQWZ0ZXJOb2RlLCBjb2xsYXBzZWQsIHRydWUsIG5vZGUpLmVhY2gocG9zID0+IHtcbiAgICAgICAgICAgICAgY29udGFpbmVyID0gcG9zLmNvbnRhaW5lcigpO1xuICAgICAgICAgICAgICBvZmZzZXQgPSBwb3Mub2Zmc2V0KCk7XG4gICAgICAgICAgICAgIG5vcm1hbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGlyZWN0aW9uTGVmdCAmJiAhY29sbGFwc2VkICYmIGlzVGV4dCRhKGNvbnRhaW5lcikgJiYgb2Zmc2V0ID09PSBjb250YWluZXIuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgZmluZFRleHROb2RlUmVsYXRpdmUoZG9tLCBpc0FmdGVyTm9kZSwgY29sbGFwc2VkLCBmYWxzZSwgY29udGFpbmVyKS5lYWNoKHBvcyA9PiB7XG4gICAgICAgICAgY29udGFpbmVyID0gcG9zLmNvbnRhaW5lcigpO1xuICAgICAgICAgIG9mZnNldCA9IHBvcy5vZmZzZXQoKTtcbiAgICAgICAgICBub3JtYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbm9ybWFsaXplZCAmJiBjb250YWluZXIgPyBPcHRpb25hbC5zb21lKENhcmV0UG9zaXRpb24oY29udGFpbmVyLCBvZmZzZXQpKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZSQyID0gKGRvbSwgcm5nKSA9PiB7XG4gICAgICBjb25zdCBjb2xsYXBzZWQgPSBybmcuY29sbGFwc2VkLCBub3JtUm5nID0gcm5nLmNsb25lUmFuZ2UoKTtcbiAgICAgIGNvbnN0IHN0YXJ0UG9zID0gQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChybmcpO1xuICAgICAgbm9ybWFsaXplRW5kUG9pbnQoZG9tLCBjb2xsYXBzZWQsIHRydWUsIG5vcm1SbmcpLmVhY2gocG9zID0+IHtcbiAgICAgICAgaWYgKCFjb2xsYXBzZWQgfHwgIUNhcmV0UG9zaXRpb24uaXNBYm92ZShzdGFydFBvcywgcG9zKSkge1xuICAgICAgICAgIG5vcm1Sbmcuc2V0U3RhcnQocG9zLmNvbnRhaW5lcigpLCBwb3Mub2Zmc2V0KCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICghY29sbGFwc2VkKSB7XG4gICAgICAgIG5vcm1hbGl6ZUVuZFBvaW50KGRvbSwgY29sbGFwc2VkLCBmYWxzZSwgbm9ybVJuZykuZWFjaChwb3MgPT4ge1xuICAgICAgICAgIG5vcm1Sbmcuc2V0RW5kKHBvcy5jb250YWluZXIoKSwgcG9zLm9mZnNldCgpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoY29sbGFwc2VkKSB7XG4gICAgICAgIG5vcm1SbmcuY29sbGFwc2UodHJ1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNFcSQ0KHJuZywgbm9ybVJuZykgPyBPcHRpb25hbC5ub25lKCkgOiBPcHRpb25hbC5zb21lKG5vcm1SbmcpO1xuICAgIH07XG5cbiAgICBjb25zdCBzcGxpdFRleHQgPSAobm9kZSwgb2Zmc2V0KSA9PiB7XG4gICAgICByZXR1cm4gbm9kZS5zcGxpdFRleHQob2Zmc2V0KTtcbiAgICB9O1xuICAgIGNvbnN0IHNwbGl0ID0gcm5nID0+IHtcbiAgICAgIGxldCBzdGFydENvbnRhaW5lciA9IHJuZy5zdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQgPSBybmcuc3RhcnRPZmZzZXQsIGVuZENvbnRhaW5lciA9IHJuZy5lbmRDb250YWluZXIsIGVuZE9mZnNldCA9IHJuZy5lbmRPZmZzZXQ7XG4gICAgICBpZiAoc3RhcnRDb250YWluZXIgPT09IGVuZENvbnRhaW5lciAmJiBpc1RleHQkYShzdGFydENvbnRhaW5lcikpIHtcbiAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID4gMCAmJiBzdGFydE9mZnNldCA8IHN0YXJ0Q29udGFpbmVyLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgZW5kQ29udGFpbmVyID0gc3BsaXRUZXh0KHN0YXJ0Q29udGFpbmVyLCBzdGFydE9mZnNldCk7XG4gICAgICAgICAgc3RhcnRDb250YWluZXIgPSBlbmRDb250YWluZXIucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgIGlmIChlbmRPZmZzZXQgPiBzdGFydE9mZnNldCkge1xuICAgICAgICAgICAgZW5kT2Zmc2V0ID0gZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQ7XG4gICAgICAgICAgICBjb25zdCBuZXdDb250YWluZXIgPSBzcGxpdFRleHQoZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQpLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyID0gZW5kQ29udGFpbmVyID0gbmV3Q29udGFpbmVyO1xuICAgICAgICAgICAgZW5kT2Zmc2V0ID0gbmV3Q29udGFpbmVyLmRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbmRPZmZzZXQgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzVGV4dCRhKHN0YXJ0Q29udGFpbmVyKSAmJiBzdGFydE9mZnNldCA+IDAgJiYgc3RhcnRPZmZzZXQgPCBzdGFydENvbnRhaW5lci5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyID0gc3BsaXRUZXh0KHN0YXJ0Q29udGFpbmVyLCBzdGFydE9mZnNldCk7XG4gICAgICAgICAgc3RhcnRPZmZzZXQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1RleHQkYShlbmRDb250YWluZXIpICYmIGVuZE9mZnNldCA+IDAgJiYgZW5kT2Zmc2V0IDwgZW5kQ29udGFpbmVyLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgbmV3Q29udGFpbmVyID0gc3BsaXRUZXh0KGVuZENvbnRhaW5lciwgZW5kT2Zmc2V0KS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgICAgZW5kQ29udGFpbmVyID0gbmV3Q29udGFpbmVyO1xuICAgICAgICAgIGVuZE9mZnNldCA9IG5ld0NvbnRhaW5lci5kYXRhLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnRDb250YWluZXIsXG4gICAgICAgIHN0YXJ0T2Zmc2V0LFxuICAgICAgICBlbmRDb250YWluZXIsXG4gICAgICAgIGVuZE9mZnNldFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgUmFuZ2VVdGlscyA9IGRvbSA9PiB7XG4gICAgICBjb25zdCB3YWxrID0gKHJuZywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgcmV0dXJuIHdhbGskMyhkb20sIHJuZywgY2FsbGJhY2spO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNwbGl0JDEgPSBzcGxpdDtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZSA9IHJuZyA9PiB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemUkMihkb20sIHJuZykuZm9sZChuZXZlciwgbm9ybWFsaXplZFJuZyA9PiB7XG4gICAgICAgICAgcm5nLnNldFN0YXJ0KG5vcm1hbGl6ZWRSbmcuc3RhcnRDb250YWluZXIsIG5vcm1hbGl6ZWRSbmcuc3RhcnRPZmZzZXQpO1xuICAgICAgICAgIHJuZy5zZXRFbmQobm9ybWFsaXplZFJuZy5lbmRDb250YWluZXIsIG5vcm1hbGl6ZWRSbmcuZW5kT2Zmc2V0KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZXhwYW5kID0gKHJuZywgb3B0aW9ucyA9IHsgdHlwZTogJ3dvcmQnIH0pID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ3dvcmQnKSB7XG4gICAgICAgICAgY29uc3QgcmFuZ2VMaWtlID0gZXhwYW5kUm5nKGRvbSwgcm5nLCBbeyBpbmxpbmU6ICdzcGFuJyB9XSk7XG4gICAgICAgICAgY29uc3QgbmV3UmFuZ2UgPSBkb20uY3JlYXRlUm5nKCk7XG4gICAgICAgICAgbmV3UmFuZ2Uuc2V0U3RhcnQocmFuZ2VMaWtlLnN0YXJ0Q29udGFpbmVyLCByYW5nZUxpa2Uuc3RhcnRPZmZzZXQpO1xuICAgICAgICAgIG5ld1JhbmdlLnNldEVuZChyYW5nZUxpa2UuZW5kQ29udGFpbmVyLCByYW5nZUxpa2UuZW5kT2Zmc2V0KTtcbiAgICAgICAgICByZXR1cm4gbmV3UmFuZ2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJuZztcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3YWxrLFxuICAgICAgICBzcGxpdDogc3BsaXQkMSxcbiAgICAgICAgZXhwYW5kLFxuICAgICAgICBub3JtYWxpemVcbiAgICAgIH07XG4gICAgfTtcbiAgICBSYW5nZVV0aWxzLmNvbXBhcmVSYW5nZXMgPSBpc0VxJDQ7XG4gICAgUmFuZ2VVdGlscy5nZXRDYXJldFJhbmdlRnJvbVBvaW50ID0gZnJvbVBvaW50O1xuICAgIFJhbmdlVXRpbHMuZ2V0U2VsZWN0ZWROb2RlID0gZ2V0U2VsZWN0ZWROb2RlO1xuICAgIFJhbmdlVXRpbHMuZ2V0Tm9kZSA9IGdldE5vZGUkMTtcblxuICAgIGNvbnN0IERpbWVuc2lvbiA9IChuYW1lLCBnZXRPZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IHNldCA9IChlbGVtZW50LCBoKSA9PiB7XG4gICAgICAgIGlmICghaXNOdW1iZXIoaCkgJiYgIWgubWF0Y2goL15bMC05XSskLykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobmFtZSArICcuc2V0IGFjY2VwdHMgb25seSBwb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlcy4gVmFsdWUgd2FzICcgKyBoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb20gPSBlbGVtZW50LmRvbTtcbiAgICAgICAgaWYgKGlzU3VwcG9ydGVkKGRvbSkpIHtcbiAgICAgICAgICBkb20uc3R5bGVbbmFtZV0gPSBoICsgJ3B4JztcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldCA9IGVsZW1lbnQgPT4ge1xuICAgICAgICBjb25zdCByID0gZ2V0T2Zmc2V0KGVsZW1lbnQpO1xuICAgICAgICBpZiAociA8PSAwIHx8IHIgPT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBjc3MgPSBnZXQkNyhlbGVtZW50LCBuYW1lKTtcbiAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChjc3MpIHx8IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0T3V0ZXIgPSBnZXQ7XG4gICAgICBjb25zdCBhZ2dyZWdhdGUgPSAoZWxlbWVudCwgcHJvcGVydGllcykgPT4gZm9sZGwocHJvcGVydGllcywgKGFjYywgcHJvcGVydHkpID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gZ2V0JDcoZWxlbWVudCwgcHJvcGVydHkpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbCA9PT0gdW5kZWZpbmVkID8gMCA6IHBhcnNlSW50KHZhbCwgMTApO1xuICAgICAgICByZXR1cm4gaXNOYU4odmFsdWUpID8gYWNjIDogYWNjICsgdmFsdWU7XG4gICAgICB9LCAwKTtcbiAgICAgIGNvbnN0IG1heCA9IChlbGVtZW50LCB2YWx1ZSwgcHJvcGVydGllcykgPT4ge1xuICAgICAgICBjb25zdCBjdW11bGF0aXZlSW5jbHVzaW9ucyA9IGFnZ3JlZ2F0ZShlbGVtZW50LCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgY29uc3QgYWJzb2x1dGVNYXggPSB2YWx1ZSA+IGN1bXVsYXRpdmVJbmNsdXNpb25zID8gdmFsdWUgLSBjdW11bGF0aXZlSW5jbHVzaW9ucyA6IDA7XG4gICAgICAgIHJldHVybiBhYnNvbHV0ZU1heDtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXQsXG4gICAgICAgIGdldCxcbiAgICAgICAgZ2V0T3V0ZXIsXG4gICAgICAgIGFnZ3JlZ2F0ZSxcbiAgICAgICAgbWF4XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBhcGkgPSBEaW1lbnNpb24oJ2hlaWdodCcsIGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWxlbWVudC5kb207XG4gICAgICByZXR1cm4gaW5Cb2R5KGVsZW1lbnQpID8gZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCA6IGRvbS5vZmZzZXRIZWlnaHQ7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0JDIgPSBlbGVtZW50ID0+IGFwaS5nZXQoZWxlbWVudCk7XG5cbiAgICBjb25zdCBnZXREb2N1bWVudCA9ICgpID0+IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGRvY3VtZW50KTtcblxuICAgIGNvbnN0IHdhbGtVcCA9IChuYXZpZ2F0aW9uLCBkb2MpID0+IHtcbiAgICAgIGNvbnN0IGZyYW1lID0gbmF2aWdhdGlvbi52aWV3KGRvYyk7XG4gICAgICByZXR1cm4gZnJhbWUuZm9sZChjb25zdGFudChbXSksIGYgPT4ge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBuYXZpZ2F0aW9uLm93bmVyKGYpO1xuICAgICAgICBjb25zdCByZXN0ID0gd2Fsa1VwKG5hdmlnYXRpb24sIHBhcmVudCk7XG4gICAgICAgIHJldHVybiBbZl0uY29uY2F0KHJlc3QpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBwYXRoVG8gPSAoZWxlbWVudCwgbmF2aWdhdGlvbikgPT4ge1xuICAgICAgY29uc3QgZCA9IG5hdmlnYXRpb24ub3duZXIoZWxlbWVudCk7XG4gICAgICByZXR1cm4gd2Fsa1VwKG5hdmlnYXRpb24sIGQpO1xuICAgIH07XG5cbiAgICBjb25zdCB2aWV3ID0gZG9jID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2MuZG9tID09PSBkb2N1bWVudCA/IE9wdGlvbmFsLm5vbmUoKSA6IE9wdGlvbmFsLmZyb20oKF9hID0gZG9jLmRvbS5kZWZhdWx0VmlldykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZyYW1lRWxlbWVudCk7XG4gICAgICByZXR1cm4gZWxlbWVudC5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIH07XG4gICAgY29uc3Qgb3duZXIgPSBlbGVtZW50ID0+IGRvY3VtZW50T3JPd25lcihlbGVtZW50KTtcblxuICAgIHZhciBOYXZpZ2F0aW9uID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIHZpZXc6IHZpZXcsXG4gICAgICAgIG93bmVyOiBvd25lclxuICAgIH0pO1xuXG4gICAgY29uc3QgZmluZCA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgZG9jID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgIGNvbnN0IHNjcm9sbCA9IGdldCQ1KGRvYyk7XG4gICAgICBjb25zdCBmcmFtZXMgPSBwYXRoVG8oZWxlbWVudCwgTmF2aWdhdGlvbik7XG4gICAgICBjb25zdCBvZmZzZXQgPSB2aWV3cG9ydChlbGVtZW50KTtcbiAgICAgIGNvbnN0IHIgPSBmb2xkcihmcmFtZXMsIChiLCBhKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvYyA9IHZpZXdwb3J0KGEpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxlZnQ6IGIubGVmdCArIGxvYy5sZWZ0LFxuICAgICAgICAgIHRvcDogYi50b3AgKyBsb2MudG9wXG4gICAgICAgIH07XG4gICAgICB9LCB7XG4gICAgICAgIGxlZnQ6IDAsXG4gICAgICAgIHRvcDogMFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gU3VnYXJQb3NpdGlvbihyLmxlZnQgKyBvZmZzZXQubGVmdCArIHNjcm9sbC5sZWZ0LCByLnRvcCArIG9mZnNldC50b3AgKyBzY3JvbGwudG9wKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZXhjbHVkZUZyb21EZXNjZW5kID0gZWxlbWVudCA9PiBuYW1lKGVsZW1lbnQpID09PSAndGV4dGFyZWEnO1xuICAgIGNvbnN0IGZpcmVTY3JvbGxJbnRvVmlld0V2ZW50ID0gKGVkaXRvciwgZGF0YSkgPT4ge1xuICAgICAgY29uc3Qgc2Nyb2xsRXZlbnQgPSBlZGl0b3IuZGlzcGF0Y2goJ1Njcm9sbEludG9WaWV3JywgZGF0YSk7XG4gICAgICByZXR1cm4gc2Nyb2xsRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCk7XG4gICAgfTtcbiAgICBjb25zdCBmaXJlQWZ0ZXJTY3JvbGxJbnRvVmlld0V2ZW50ID0gKGVkaXRvciwgZGF0YSkgPT4ge1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdBZnRlclNjcm9sbEludG9WaWV3JywgZGF0YSk7XG4gICAgfTtcbiAgICBjb25zdCBkZXNjZW5kID0gKGVsZW1lbnQsIG9mZnNldCkgPT4ge1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBjaGlsZHJlbiQxKGVsZW1lbnQpO1xuICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCB8fCBleGNsdWRlRnJvbURlc2NlbmQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG9mZnNldFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChvZmZzZXQgPCBjaGlsZHJlbi5sZW5ndGggJiYgIWV4Y2x1ZGVGcm9tRGVzY2VuZChjaGlsZHJlbltvZmZzZXRdKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVsZW1lbnQ6IGNoaWxkcmVuW29mZnNldF0sXG4gICAgICAgICAgb2Zmc2V0OiAwXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsYXN0ID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmIChleGNsdWRlRnJvbURlc2NlbmQobGFzdCkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIG9mZnNldFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG5hbWUobGFzdCkgPT09ICdpbWcnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBlbGVtZW50OiBsYXN0LFxuICAgICAgICAgICAgICBvZmZzZXQ6IDFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1RleHQkYihsYXN0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZWxlbWVudDogbGFzdCxcbiAgICAgICAgICAgICAgb2Zmc2V0OiBnZXQkMyhsYXN0KS5sZW5ndGhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGVsZW1lbnQ6IGxhc3QsXG4gICAgICAgICAgICAgIG9mZnNldDogY2hpbGRyZW4kMShsYXN0KS5sZW5ndGhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBtYXJrZXJJbmZvID0gKGVsZW1lbnQsIGNsZWFudXBGdW4pID0+IHtcbiAgICAgIGNvbnN0IHBvcyA9IGFic29sdXRlKGVsZW1lbnQpO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gZ2V0JDIoZWxlbWVudCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBib3R0b206IHBvcy50b3AgKyBoZWlnaHQsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgcG9zLFxuICAgICAgICBjbGVhbnVwOiBjbGVhbnVwRnVuXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlTWFya2VyJDEgPSAoZWxlbWVudCwgb2Zmc2V0KSA9PiB7XG4gICAgICBjb25zdCBzdGFydFBvaW50ID0gZGVzY2VuZChlbGVtZW50LCBvZmZzZXQpO1xuICAgICAgY29uc3Qgc3BhbiA9IFN1Z2FyRWxlbWVudC5mcm9tSHRtbCgnPHNwYW4gZGF0YS1tY2UtYm9ndXM9XCJhbGxcIiBzdHlsZT1cImRpc3BsYXk6IGlubGluZS1ibG9jaztcIj4nICsgWldTUCQxICsgJzwvc3Bhbj4nKTtcbiAgICAgIGJlZm9yZSQzKHN0YXJ0UG9pbnQuZWxlbWVudCwgc3Bhbik7XG4gICAgICByZXR1cm4gbWFya2VySW5mbyhzcGFuLCAoKSA9PiByZW1vdmUkNShzcGFuKSk7XG4gICAgfTtcbiAgICBjb25zdCBlbGVtZW50TWFya2VyID0gZWxlbWVudCA9PiBtYXJrZXJJbmZvKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsZW1lbnQpLCBub29wKTtcbiAgICBjb25zdCB3aXRoTWFya2VyID0gKGVkaXRvciwgZiwgcm5nLCBhbGlnblRvVG9wKSA9PiB7XG4gICAgICBwcmVzZXJ2ZVdpdGgoZWRpdG9yLCAoX3MsIF9lKSA9PiBhcHBseVdpdGhNYXJrZXIoZWRpdG9yLCBmLCBybmcsIGFsaWduVG9Ub3ApLCBybmcpO1xuICAgIH07XG4gICAgY29uc3Qgd2l0aFNjcm9sbEV2ZW50cyA9IChlZGl0b3IsIGRvYywgZiwgbWFya2VyLCBhbGlnblRvVG9wKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBlbG06IG1hcmtlci5lbGVtZW50LmRvbSxcbiAgICAgICAgYWxpZ25Ub1RvcFxuICAgICAgfTtcbiAgICAgIGlmIChmaXJlU2Nyb2xsSW50b1ZpZXdFdmVudChlZGl0b3IsIGRhdGEpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IGdldCQ1KGRvYykudG9wO1xuICAgICAgZihlZGl0b3IsIGRvYywgc2Nyb2xsVG9wLCBtYXJrZXIsIGFsaWduVG9Ub3ApO1xuICAgICAgZmlyZUFmdGVyU2Nyb2xsSW50b1ZpZXdFdmVudChlZGl0b3IsIGRhdGEpO1xuICAgIH07XG4gICAgY29uc3QgYXBwbHlXaXRoTWFya2VyID0gKGVkaXRvciwgZiwgcm5nLCBhbGlnblRvVG9wKSA9PiB7XG4gICAgICBjb25zdCBib2R5ID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBjb25zdCBkb2MgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0RG9jKCkpO1xuICAgICAgcmVmbG93KGJvZHkpO1xuICAgICAgY29uc3QgbWFya2VyID0gY3JlYXRlTWFya2VyJDEoU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLnN0YXJ0Q29udGFpbmVyKSwgcm5nLnN0YXJ0T2Zmc2V0KTtcbiAgICAgIHdpdGhTY3JvbGxFdmVudHMoZWRpdG9yLCBkb2MsIGYsIG1hcmtlciwgYWxpZ25Ub1RvcCk7XG4gICAgICBtYXJrZXIuY2xlYW51cCgpO1xuICAgIH07XG4gICAgY29uc3Qgd2l0aEVsZW1lbnQgPSAoZWRpdG9yLCBlbGVtZW50LCBmLCBhbGlnblRvVG9wKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0RG9jKCkpO1xuICAgICAgd2l0aFNjcm9sbEV2ZW50cyhlZGl0b3IsIGRvYywgZiwgZWxlbWVudE1hcmtlcihlbGVtZW50KSwgYWxpZ25Ub1RvcCk7XG4gICAgfTtcbiAgICBjb25zdCBwcmVzZXJ2ZVdpdGggPSAoZWRpdG9yLCBmLCBybmcpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0RWxlbWVudCA9IHJuZy5zdGFydENvbnRhaW5lcjtcbiAgICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gcm5nLnN0YXJ0T2Zmc2V0O1xuICAgICAgY29uc3QgZW5kRWxlbWVudCA9IHJuZy5lbmRDb250YWluZXI7XG4gICAgICBjb25zdCBlbmRPZmZzZXQgPSBybmcuZW5kT2Zmc2V0O1xuICAgICAgZihTdWdhckVsZW1lbnQuZnJvbURvbShzdGFydEVsZW1lbnQpLCBTdWdhckVsZW1lbnQuZnJvbURvbShlbmRFbGVtZW50KSk7XG4gICAgICBjb25zdCBuZXdSbmcgPSBlZGl0b3IuZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgbmV3Um5nLnNldFN0YXJ0KHN0YXJ0RWxlbWVudCwgc3RhcnRPZmZzZXQpO1xuICAgICAgbmV3Um5nLnNldEVuZChlbmRFbGVtZW50LCBlbmRPZmZzZXQpO1xuICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcocm5nKTtcbiAgICB9O1xuICAgIGNvbnN0IHNjcm9sbFRvTWFya2VyID0gKGVkaXRvciwgbWFya2VyLCB2aWV3SGVpZ2h0LCBhbGlnblRvVG9wLCBkb2MpID0+IHtcbiAgICAgIGNvbnN0IHBvcyA9IG1hcmtlci5wb3M7XG4gICAgICBpZiAoYWxpZ25Ub1RvcCkge1xuICAgICAgICB0byhwb3MubGVmdCwgcG9zLnRvcCwgZG9jKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHkgPSBwb3MudG9wIC0gdmlld0hlaWdodCArIG1hcmtlci5oZWlnaHQ7XG4gICAgICAgIHRvKC1lZGl0b3IuZ2V0Qm9keSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQsIHksIGRvYyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbnRvV2luZG93SWZOZWVkZWQgPSAoZWRpdG9yLCBkb2MsIHNjcm9sbFRvcCwgdmlld0hlaWdodCwgbWFya2VyLCBhbGlnblRvVG9wKSA9PiB7XG4gICAgICBjb25zdCB2aWV3cG9ydEJvdHRvbSA9IHZpZXdIZWlnaHQgKyBzY3JvbGxUb3A7XG4gICAgICBjb25zdCBtYXJrZXJUb3AgPSBtYXJrZXIucG9zLnRvcDtcbiAgICAgIGNvbnN0IG1hcmtlckJvdHRvbSA9IG1hcmtlci5ib3R0b207XG4gICAgICBjb25zdCBsYXJnZXJUaGFuVmlld3BvcnQgPSBtYXJrZXJCb3R0b20gLSBtYXJrZXJUb3AgPj0gdmlld0hlaWdodDtcbiAgICAgIGlmIChtYXJrZXJUb3AgPCBzY3JvbGxUb3ApIHtcbiAgICAgICAgc2Nyb2xsVG9NYXJrZXIoZWRpdG9yLCBtYXJrZXIsIHZpZXdIZWlnaHQsIGFsaWduVG9Ub3AgIT09IGZhbHNlLCBkb2MpO1xuICAgICAgfSBlbHNlIGlmIChtYXJrZXJUb3AgPiB2aWV3cG9ydEJvdHRvbSkge1xuICAgICAgICBjb25zdCBhbGlnbiA9IGxhcmdlclRoYW5WaWV3cG9ydCA/IGFsaWduVG9Ub3AgIT09IGZhbHNlIDogYWxpZ25Ub1RvcCA9PT0gdHJ1ZTtcbiAgICAgICAgc2Nyb2xsVG9NYXJrZXIoZWRpdG9yLCBtYXJrZXIsIHZpZXdIZWlnaHQsIGFsaWduLCBkb2MpO1xuICAgICAgfSBlbHNlIGlmIChtYXJrZXJCb3R0b20gPiB2aWV3cG9ydEJvdHRvbSAmJiAhbGFyZ2VyVGhhblZpZXdwb3J0KSB7XG4gICAgICAgIHNjcm9sbFRvTWFya2VyKGVkaXRvciwgbWFya2VyLCB2aWV3SGVpZ2h0LCBhbGlnblRvVG9wID09PSB0cnVlLCBkb2MpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaW50b1dpbmRvdyA9IChlZGl0b3IsIGRvYywgc2Nyb2xsVG9wLCBtYXJrZXIsIGFsaWduVG9Ub3ApID0+IHtcbiAgICAgIGNvbnN0IHZpZXdIZWlnaHQgPSBkZWZhdWx0Vmlldyhkb2MpLmRvbS5pbm5lckhlaWdodDtcbiAgICAgIGludG9XaW5kb3dJZk5lZWRlZChlZGl0b3IsIGRvYywgc2Nyb2xsVG9wLCB2aWV3SGVpZ2h0LCBtYXJrZXIsIGFsaWduVG9Ub3ApO1xuICAgIH07XG4gICAgY29uc3QgaW50b0ZyYW1lID0gKGVkaXRvciwgZG9jLCBzY3JvbGxUb3AsIG1hcmtlciwgYWxpZ25Ub1RvcCkgPT4ge1xuICAgICAgY29uc3QgZnJhbWVWaWV3SGVpZ2h0ID0gZGVmYXVsdFZpZXcoZG9jKS5kb20uaW5uZXJIZWlnaHQ7XG4gICAgICBpbnRvV2luZG93SWZOZWVkZWQoZWRpdG9yLCBkb2MsIHNjcm9sbFRvcCwgZnJhbWVWaWV3SGVpZ2h0LCBtYXJrZXIsIGFsaWduVG9Ub3ApO1xuICAgICAgY29uc3Qgb3AgPSBmaW5kKG1hcmtlci5lbGVtZW50KTtcbiAgICAgIGNvbnN0IHZpZXdwb3J0Qm91bmRzID0gZ2V0Qm91bmRzKHdpbmRvdyk7XG4gICAgICBpZiAob3AudG9wIDwgdmlld3BvcnRCb3VuZHMueSkge1xuICAgICAgICBpbnRvVmlldyhtYXJrZXIuZWxlbWVudCwgYWxpZ25Ub1RvcCAhPT0gZmFsc2UpO1xuICAgICAgfSBlbHNlIGlmIChvcC50b3AgPiB2aWV3cG9ydEJvdW5kcy5ib3R0b20pIHtcbiAgICAgICAgaW50b1ZpZXcobWFya2VyLmVsZW1lbnQsIGFsaWduVG9Ub3AgPT09IHRydWUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmFuZ2VJbnRvV2luZG93ID0gKGVkaXRvciwgcm5nLCBhbGlnblRvVG9wKSA9PiB3aXRoTWFya2VyKGVkaXRvciwgaW50b1dpbmRvdywgcm5nLCBhbGlnblRvVG9wKTtcbiAgICBjb25zdCBlbGVtZW50SW50b1dpbmRvdyA9IChlZGl0b3IsIGVsZW1lbnQsIGFsaWduVG9Ub3ApID0+IHdpdGhFbGVtZW50KGVkaXRvciwgZWxlbWVudCwgaW50b1dpbmRvdywgYWxpZ25Ub1RvcCk7XG4gICAgY29uc3QgcmFuZ2VJbnRvRnJhbWUgPSAoZWRpdG9yLCBybmcsIGFsaWduVG9Ub3ApID0+IHdpdGhNYXJrZXIoZWRpdG9yLCBpbnRvRnJhbWUsIHJuZywgYWxpZ25Ub1RvcCk7XG4gICAgY29uc3QgZWxlbWVudEludG9GcmFtZSA9IChlZGl0b3IsIGVsZW1lbnQsIGFsaWduVG9Ub3ApID0+IHdpdGhFbGVtZW50KGVkaXRvciwgZWxlbWVudCwgaW50b0ZyYW1lLCBhbGlnblRvVG9wKTtcbiAgICBjb25zdCBzY3JvbGxFbGVtZW50SW50b1ZpZXcgPSAoZWRpdG9yLCBlbGVtZW50LCBhbGlnblRvVG9wKSA9PiB7XG4gICAgICBjb25zdCBzY3JvbGxlciA9IGVkaXRvci5pbmxpbmUgPyBlbGVtZW50SW50b1dpbmRvdyA6IGVsZW1lbnRJbnRvRnJhbWU7XG4gICAgICBzY3JvbGxlcihlZGl0b3IsIGVsZW1lbnQsIGFsaWduVG9Ub3ApO1xuICAgIH07XG4gICAgY29uc3Qgc2Nyb2xsUmFuZ2VJbnRvVmlldyA9IChlZGl0b3IsIHJuZywgYWxpZ25Ub1RvcCkgPT4ge1xuICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBlZGl0b3IuaW5saW5lID8gcmFuZ2VJbnRvV2luZG93IDogcmFuZ2VJbnRvRnJhbWU7XG4gICAgICBzY3JvbGxlcihlZGl0b3IsIHJuZywgYWxpZ25Ub1RvcCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZvY3VzJDEgPSBlbGVtZW50ID0+IGVsZW1lbnQuZG9tLmZvY3VzKCk7XG4gICAgY29uc3QgaGFzRm9jdXMkMSA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3Qgcm9vdCA9IGdldFJvb3ROb2RlKGVsZW1lbnQpLmRvbTtcbiAgICAgIHJldHVybiBlbGVtZW50LmRvbSA9PT0gcm9vdC5hY3RpdmVFbGVtZW50O1xuICAgIH07XG4gICAgY29uc3QgYWN0aXZlJDEgPSAocm9vdCA9IGdldERvY3VtZW50KCkpID0+IE9wdGlvbmFsLmZyb20ocm9vdC5kb20uYWN0aXZlRWxlbWVudCkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBzZWFyY2ggPSBlbGVtZW50ID0+IGFjdGl2ZSQxKGdldFJvb3ROb2RlKGVsZW1lbnQpKS5maWx0ZXIoZSA9PiBlbGVtZW50LmRvbS5jb250YWlucyhlLmRvbSkpO1xuXG4gICAgY29uc3QgY2xhbXAkMSA9IChvZmZzZXQsIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IG1heCA9IGlzVGV4dCRiKGVsZW1lbnQpID8gZ2V0JDMoZWxlbWVudCkubGVuZ3RoIDogY2hpbGRyZW4kMShlbGVtZW50KS5sZW5ndGggKyAxO1xuICAgICAgaWYgKG9mZnNldCA+IG1heCkge1xuICAgICAgICByZXR1cm4gbWF4O1xuICAgICAgfSBlbHNlIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZVJuZyA9IHJuZyA9PiBTaW1TZWxlY3Rpb24ucmFuZ2Uocm5nLnN0YXJ0LCBjbGFtcCQxKHJuZy5zb2Zmc2V0LCBybmcuc3RhcnQpLCBybmcuZmluaXNoLCBjbGFtcCQxKHJuZy5mb2Zmc2V0LCBybmcuZmluaXNoKSk7XG4gICAgY29uc3QgaXNPckNvbnRhaW5zID0gKHJvb3QsIGVsbSkgPT4gIWlzUmVzdHJpY3RlZE5vZGUoZWxtLmRvbSkgJiYgKGNvbnRhaW5zKHJvb3QsIGVsbSkgfHwgZXEocm9vdCwgZWxtKSk7XG4gICAgY29uc3QgaXNSbmdJblJvb3QgPSByb290ID0+IHJuZyA9PiBpc09yQ29udGFpbnMocm9vdCwgcm5nLnN0YXJ0KSAmJiBpc09yQ29udGFpbnMocm9vdCwgcm5nLmZpbmlzaCk7XG4gICAgY29uc3Qgc2hvdWxkU3RvcmUgPSBlZGl0b3IgPT4gZWRpdG9yLmlubGluZSB8fCBFbnYuYnJvd3Nlci5pc0ZpcmVmb3goKTtcbiAgICBjb25zdCBuYXRpdmVSYW5nZVRvU2VsZWN0aW9uUmFuZ2UgPSByID0+IFNpbVNlbGVjdGlvbi5yYW5nZShTdWdhckVsZW1lbnQuZnJvbURvbShyLnN0YXJ0Q29udGFpbmVyKSwgci5zdGFydE9mZnNldCwgU3VnYXJFbGVtZW50LmZyb21Eb20oci5lbmRDb250YWluZXIpLCByLmVuZE9mZnNldCk7XG4gICAgY29uc3QgcmVhZFJhbmdlID0gd2luID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbi5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGNvbnN0IHJuZyA9ICFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDAgPyBPcHRpb25hbC5ub25lKCkgOiBPcHRpb25hbC5mcm9tKHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApKTtcbiAgICAgIHJldHVybiBybmcubWFwKG5hdGl2ZVJhbmdlVG9TZWxlY3Rpb25SYW5nZSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRCb29rbWFyayA9IHJvb3QgPT4ge1xuICAgICAgY29uc3Qgd2luID0gZGVmYXVsdFZpZXcocm9vdCk7XG4gICAgICByZXR1cm4gcmVhZFJhbmdlKHdpbi5kb20pLmZpbHRlcihpc1JuZ0luUm9vdChyb290KSk7XG4gICAgfTtcbiAgICBjb25zdCB2YWxpZGF0ZSA9IChyb290LCBib29rbWFyaykgPT4gT3B0aW9uYWwuZnJvbShib29rbWFyaykuZmlsdGVyKGlzUm5nSW5Sb290KHJvb3QpKS5tYXAobm9ybWFsaXplUm5nKTtcbiAgICBjb25zdCBib29rbWFya1RvTmF0aXZlUm5nID0gYm9va21hcmsgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJuZy5zZXRTdGFydChib29rbWFyay5zdGFydC5kb20sIGJvb2ttYXJrLnNvZmZzZXQpO1xuICAgICAgICBybmcuc2V0RW5kKGJvb2ttYXJrLmZpbmlzaC5kb20sIGJvb2ttYXJrLmZvZmZzZXQpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShybmcpO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc3RvcmUgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgbmV3Qm9va21hcmsgPSBzaG91bGRTdG9yZShlZGl0b3IpID8gZ2V0Qm9va21hcmsoU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSkpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgZWRpdG9yLmJvb2ttYXJrID0gbmV3Qm9va21hcmsuaXNTb21lKCkgPyBuZXdCb29rbWFyayA6IGVkaXRvci5ib29rbWFyaztcbiAgICB9O1xuICAgIGNvbnN0IGdldFJuZyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBib29rbWFyayA9IGVkaXRvci5ib29rbWFyayA/IGVkaXRvci5ib29rbWFyayA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIHJldHVybiBib29rbWFyay5iaW5kKHggPT4gdmFsaWRhdGUoU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSksIHgpKS5iaW5kKGJvb2ttYXJrVG9OYXRpdmVSbmcpO1xuICAgIH07XG4gICAgY29uc3QgcmVzdG9yZSA9IGVkaXRvciA9PiB7XG4gICAgICBnZXRSbmcoZWRpdG9yKS5lYWNoKHJuZyA9PiBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNFZGl0b3JVSUVsZW1lbnQkMSA9IGVsbSA9PiB7XG4gICAgICBjb25zdCBjbGFzc05hbWUgPSBlbG0uY2xhc3NOYW1lLnRvU3RyaW5nKCk7XG4gICAgICByZXR1cm4gY2xhc3NOYW1lLmluZGV4T2YoJ3RveC0nKSAhPT0gLTEgfHwgY2xhc3NOYW1lLmluZGV4T2YoJ21jZS0nKSAhPT0gLTE7XG4gICAgfTtcbiAgICBjb25zdCBGb2N1c01hbmFnZXIgPSB7IGlzRWRpdG9yVUlFbGVtZW50OiBpc0VkaXRvclVJRWxlbWVudCQxIH07XG5cbiAgICBjb25zdCB3cmFwcGVkU2V0VGltZW91dCA9IChjYWxsYmFjaywgdGltZSkgPT4ge1xuICAgICAgaWYgKCFpc051bWJlcih0aW1lKSkge1xuICAgICAgICB0aW1lID0gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXRUaW1lb3V0KGNhbGxiYWNrLCB0aW1lKTtcbiAgICB9O1xuICAgIGNvbnN0IHdyYXBwZWRTZXRJbnRlcnZhbCA9IChjYWxsYmFjaywgdGltZSkgPT4ge1xuICAgICAgaWYgKCFpc051bWJlcih0aW1lKSkge1xuICAgICAgICB0aW1lID0gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXRJbnRlcnZhbChjYWxsYmFjaywgdGltZSk7XG4gICAgfTtcbiAgICBjb25zdCBEZWxheSA9IHtcbiAgICAgIHNldEVkaXRvclRpbWVvdXQ6IChlZGl0b3IsIGNhbGxiYWNrLCB0aW1lKSA9PiB7XG4gICAgICAgIHJldHVybiB3cmFwcGVkU2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKCFlZGl0b3IucmVtb3ZlZCkge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRpbWUpO1xuICAgICAgfSxcbiAgICAgIHNldEVkaXRvckludGVydmFsOiAoZWRpdG9yLCBjYWxsYmFjaywgdGltZSkgPT4ge1xuICAgICAgICBjb25zdCB0aW1lciA9IHdyYXBwZWRTZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgaWYgKCFlZGl0b3IucmVtb3ZlZCkge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gICAgICAgICAgfVxuICAgICAgICB9LCB0aW1lKTtcbiAgICAgICAgcmV0dXJuIHRpbWVyO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBpc01hbnVhbE5vZGVDaGFuZ2UgPSBlID0+IHtcbiAgICAgIHJldHVybiBlLnR5cGUgPT09ICdub2RlY2hhbmdlJyAmJiBlLnNlbGVjdGlvbkNoYW5nZTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyUGFnZU1vdXNlVXAgPSAoZWRpdG9yLCB0aHJvdHRsZWRTdG9yZSkgPT4ge1xuICAgICAgY29uc3QgbW91c2VVcFBhZ2UgPSAoKSA9PiB7XG4gICAgICAgIHRocm90dGxlZFN0b3JlLnRocm90dGxlKCk7XG4gICAgICB9O1xuICAgICAgRE9NVXRpbHMuRE9NLmJpbmQoZG9jdW1lbnQsICdtb3VzZXVwJywgbW91c2VVcFBhZ2UpO1xuICAgICAgZWRpdG9yLm9uKCdyZW1vdmUnLCAoKSA9PiB7XG4gICAgICAgIERPTVV0aWxzLkRPTS51bmJpbmQoZG9jdW1lbnQsICdtb3VzZXVwJywgbW91c2VVcFBhZ2UpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3Rlck1vdXNlVXAgPSAoZWRpdG9yLCB0aHJvdHRsZWRTdG9yZSkgPT4ge1xuICAgICAgZWRpdG9yLm9uKCdtb3VzZXVwIHRvdWNoZW5kJywgX2UgPT4ge1xuICAgICAgICB0aHJvdHRsZWRTdG9yZS50aHJvdHRsZSgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlckVkaXRvckV2ZW50cyA9IChlZGl0b3IsIHRocm90dGxlZFN0b3JlKSA9PiB7XG4gICAgICByZWdpc3Rlck1vdXNlVXAoZWRpdG9yLCB0aHJvdHRsZWRTdG9yZSk7XG4gICAgICBlZGl0b3Iub24oJ2tleXVwIE5vZGVDaGFuZ2UgQWZ0ZXJTZXRTZWxlY3Rpb25SYW5nZScsIGUgPT4ge1xuICAgICAgICBpZiAoIWlzTWFudWFsTm9kZUNoYW5nZShlKSkge1xuICAgICAgICAgIHN0b3JlKGVkaXRvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXIkNiA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCB0aHJvdHRsZWRTdG9yZSA9IGZpcnN0JDEoKCkgPT4ge1xuICAgICAgICBzdG9yZShlZGl0b3IpO1xuICAgICAgfSwgMCk7XG4gICAgICBlZGl0b3Iub24oJ2luaXQnLCAoKSA9PiB7XG4gICAgICAgIGlmIChlZGl0b3IuaW5saW5lKSB7XG4gICAgICAgICAgcmVnaXN0ZXJQYWdlTW91c2VVcChlZGl0b3IsIHRocm90dGxlZFN0b3JlKTtcbiAgICAgICAgfVxuICAgICAgICByZWdpc3RlckVkaXRvckV2ZW50cyhlZGl0b3IsIHRocm90dGxlZFN0b3JlKTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdyZW1vdmUnLCAoKSA9PiB7XG4gICAgICAgIHRocm90dGxlZFN0b3JlLmNhbmNlbCgpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGxldCBkb2N1bWVudEZvY3VzSW5IYW5kbGVyO1xuICAgIGNvbnN0IERPTSQ5ID0gRE9NVXRpbHMuRE9NO1xuICAgIGNvbnN0IGlzRWRpdG9yVUlFbGVtZW50ID0gZWxtID0+IHtcbiAgICAgIHJldHVybiBpc0VsZW1lbnQkNihlbG0pICYmIEZvY3VzTWFuYWdlci5pc0VkaXRvclVJRWxlbWVudChlbG0pO1xuICAgIH07XG4gICAgY29uc3QgaXNFZGl0b3JDb250ZW50QXJlYUVsZW1lbnQgPSBlbG0gPT4ge1xuICAgICAgY29uc3QgY2xhc3NMaXN0ID0gZWxtLmNsYXNzTGlzdDtcbiAgICAgIGlmIChjbGFzc0xpc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY2xhc3NMaXN0LmNvbnRhaW5zKCd0b3gtZWRpdC1hcmVhJykgfHwgY2xhc3NMaXN0LmNvbnRhaW5zKCd0b3gtZWRpdC1hcmVhX19pZnJhbWUnKSB8fCBjbGFzc0xpc3QuY29udGFpbnMoJ21jZS1jb250ZW50LWJvZHknKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlzVUlFbGVtZW50ID0gKGVkaXRvciwgZWxtKSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21TZWxlY3RvciA9IGdldEN1c3RvbVVpU2VsZWN0b3IoZWRpdG9yKTtcbiAgICAgIGNvbnN0IHBhcmVudCA9IERPTSQ5LmdldFBhcmVudChlbG0sIGVsbSA9PiB7XG4gICAgICAgIHJldHVybiBpc0VkaXRvclVJRWxlbWVudChlbG0pIHx8IChjdXN0b21TZWxlY3RvciA/IGVkaXRvci5kb20uaXMoZWxtLCBjdXN0b21TZWxlY3RvcikgOiBmYWxzZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBwYXJlbnQgIT09IG51bGw7XG4gICAgfTtcbiAgICBjb25zdCBnZXRBY3RpdmVFbGVtZW50ID0gZWRpdG9yID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBnZXRSb290Tm9kZShTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0RWxlbWVudCgpKSk7XG4gICAgICAgIHJldHVybiBhY3RpdmUkMShyb290KS5mb2xkKCgpID0+IGRvY3VtZW50LmJvZHksIHggPT4geC5kb20pO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmJvZHk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlckV2ZW50cyQxID0gKGVkaXRvck1hbmFnZXIsIGUpID0+IHtcbiAgICAgIGNvbnN0IGVkaXRvciA9IGUuZWRpdG9yO1xuICAgICAgcmVnaXN0ZXIkNihlZGl0b3IpO1xuICAgICAgY29uc3QgdG9nZ2xlQ29udGVudEFyZWFPbkZvY3VzID0gKGVkaXRvciwgZm4pID0+IHtcbiAgICAgICAgaWYgKHNob3VsZEhpZ2hsaWdodE9uRm9jdXMoZWRpdG9yKSAmJiBlZGl0b3IuaW5saW5lICE9PSB0cnVlKSB7XG4gICAgICAgICAgY29uc3QgY29udGVudEFyZWEgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Q29udGFpbmVyKCkpO1xuICAgICAgICAgIGZuKGNvbnRlbnRBcmVhLCAndG94LWVkaXQtZm9jdXMnKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGVkaXRvci5vbignZm9jdXNpbicsICgpID0+IHtcbiAgICAgICAgY29uc3QgZm9jdXNlZEVkaXRvciA9IGVkaXRvck1hbmFnZXIuZm9jdXNlZEVkaXRvcjtcbiAgICAgICAgaWYgKGlzRWRpdG9yQ29udGVudEFyZWFFbGVtZW50KGdldEFjdGl2ZUVsZW1lbnQoZWRpdG9yKSkpIHtcbiAgICAgICAgICB0b2dnbGVDb250ZW50QXJlYU9uRm9jdXMoZWRpdG9yLCBhZGQkMik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvY3VzZWRFZGl0b3IgIT09IGVkaXRvcikge1xuICAgICAgICAgIGlmIChmb2N1c2VkRWRpdG9yKSB7XG4gICAgICAgICAgICBmb2N1c2VkRWRpdG9yLmRpc3BhdGNoKCdibHVyJywgeyBmb2N1c2VkRWRpdG9yOiBlZGl0b3IgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVkaXRvck1hbmFnZXIuc2V0QWN0aXZlKGVkaXRvcik7XG4gICAgICAgICAgZWRpdG9yTWFuYWdlci5mb2N1c2VkRWRpdG9yID0gZWRpdG9yO1xuICAgICAgICAgIGVkaXRvci5kaXNwYXRjaCgnZm9jdXMnLCB7IGJsdXJyZWRFZGl0b3I6IGZvY3VzZWRFZGl0b3IgfSk7XG4gICAgICAgICAgZWRpdG9yLmZvY3VzKHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignZm9jdXNvdXQnLCAoKSA9PiB7XG4gICAgICAgIERlbGF5LnNldEVkaXRvclRpbWVvdXQoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9jdXNlZEVkaXRvciA9IGVkaXRvck1hbmFnZXIuZm9jdXNlZEVkaXRvcjtcbiAgICAgICAgICBpZiAoIWlzRWRpdG9yQ29udGVudEFyZWFFbGVtZW50KGdldEFjdGl2ZUVsZW1lbnQoZWRpdG9yKSkgfHwgZm9jdXNlZEVkaXRvciAhPT0gZWRpdG9yKSB7XG4gICAgICAgICAgICB0b2dnbGVDb250ZW50QXJlYU9uRm9jdXMoZWRpdG9yLCByZW1vdmUkNyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaXNVSUVsZW1lbnQoZWRpdG9yLCBnZXRBY3RpdmVFbGVtZW50KGVkaXRvcikpICYmIGZvY3VzZWRFZGl0b3IgPT09IGVkaXRvcikge1xuICAgICAgICAgICAgZWRpdG9yLmRpc3BhdGNoKCdibHVyJywgeyBmb2N1c2VkRWRpdG9yOiBudWxsIH0pO1xuICAgICAgICAgICAgZWRpdG9yTWFuYWdlci5mb2N1c2VkRWRpdG9yID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBpZiAoIWRvY3VtZW50Rm9jdXNJbkhhbmRsZXIpIHtcbiAgICAgICAgZG9jdW1lbnRGb2N1c0luSGFuZGxlciA9IGUgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZUVkaXRvciA9IGVkaXRvck1hbmFnZXIuYWN0aXZlRWRpdG9yO1xuICAgICAgICAgIGlmIChhY3RpdmVFZGl0b3IpIHtcbiAgICAgICAgICAgIGdldE9yaWdpbmFsRXZlbnRUYXJnZXQoZSkuZWFjaCh0YXJnZXQgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBlbGVtID0gdGFyZ2V0O1xuICAgICAgICAgICAgICBpZiAoZWxlbS5vd25lckRvY3VtZW50ID09PSBkb2N1bWVudCkge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtICE9PSBkb2N1bWVudC5ib2R5ICYmICFpc1VJRWxlbWVudChhY3RpdmVFZGl0b3IsIGVsZW0pICYmIGVkaXRvck1hbmFnZXIuZm9jdXNlZEVkaXRvciA9PT0gYWN0aXZlRWRpdG9yKSB7XG4gICAgICAgICAgICAgICAgICBhY3RpdmVFZGl0b3IuZGlzcGF0Y2goJ2JsdXInLCB7IGZvY3VzZWRFZGl0b3I6IG51bGwgfSk7XG4gICAgICAgICAgICAgICAgICBlZGl0b3JNYW5hZ2VyLmZvY3VzZWRFZGl0b3IgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBET00kOS5iaW5kKGRvY3VtZW50LCAnZm9jdXNpbicsIGRvY3VtZW50Rm9jdXNJbkhhbmRsZXIpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdW5yZWdpc3RlckRvY3VtZW50RXZlbnRzID0gKGVkaXRvck1hbmFnZXIsIGUpID0+IHtcbiAgICAgIGlmIChlZGl0b3JNYW5hZ2VyLmZvY3VzZWRFZGl0b3IgPT09IGUuZWRpdG9yKSB7XG4gICAgICAgIGVkaXRvck1hbmFnZXIuZm9jdXNlZEVkaXRvciA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoIWVkaXRvck1hbmFnZXIuYWN0aXZlRWRpdG9yICYmIGRvY3VtZW50Rm9jdXNJbkhhbmRsZXIpIHtcbiAgICAgICAgRE9NJDkudW5iaW5kKGRvY3VtZW50LCAnZm9jdXNpbicsIGRvY3VtZW50Rm9jdXNJbkhhbmRsZXIpO1xuICAgICAgICBkb2N1bWVudEZvY3VzSW5IYW5kbGVyID0gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldHVwJHYgPSBlZGl0b3JNYW5hZ2VyID0+IHtcbiAgICAgIGVkaXRvck1hbmFnZXIub24oJ0FkZEVkaXRvcicsIGN1cnJ5KHJlZ2lzdGVyRXZlbnRzJDEsIGVkaXRvck1hbmFnZXIpKTtcbiAgICAgIGVkaXRvck1hbmFnZXIub24oJ1JlbW92ZUVkaXRvcicsIGN1cnJ5KHVucmVnaXN0ZXJEb2N1bWVudEV2ZW50cywgZWRpdG9yTWFuYWdlcikpO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRDb250ZW50RWRpdGFibGVIb3N0ID0gKGVkaXRvciwgbm9kZSkgPT4gZWRpdG9yLmRvbS5nZXRQYXJlbnQobm9kZSwgbm9kZSA9PiBlZGl0b3IuZG9tLmdldENvbnRlbnRFZGl0YWJsZShub2RlKSA9PT0gJ3RydWUnKTtcbiAgICBjb25zdCBnZXRDb2xsYXBzZWROb2RlID0gcm5nID0+IHJuZy5jb2xsYXBzZWQgPyBPcHRpb25hbC5mcm9tKGdldE5vZGUkMShybmcuc3RhcnRDb250YWluZXIsIHJuZy5zdGFydE9mZnNldCkpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgY29uc3QgZ2V0Rm9jdXNJbkVsZW1lbnQgPSAocm9vdCwgcm5nKSA9PiBnZXRDb2xsYXBzZWROb2RlKHJuZykuYmluZChub2RlID0+IHtcbiAgICAgIGlmIChpc1RhYmxlU2VjdGlvbihub2RlKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShub2RlKTtcbiAgICAgIH0gZWxzZSBpZiAoIWNvbnRhaW5zKHJvb3QsIG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHJvb3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBub3JtYWxpemVTZWxlY3Rpb24gPSAoZWRpdG9yLCBybmcpID0+IHtcbiAgICAgIGdldEZvY3VzSW5FbGVtZW50KFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpLCBybmcpLmJpbmQoZWxtID0+IHtcbiAgICAgICAgcmV0dXJuIGZpcnN0UG9zaXRpb25JbihlbG0uZG9tKTtcbiAgICAgIH0pLmZvbGQoKCkgPT4ge1xuICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLm5vcm1hbGl6ZSgpO1xuICAgICAgfSwgY2FyZXRQb3MgPT4gZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcoY2FyZXRQb3MudG9SYW5nZSgpKSk7XG4gICAgfTtcbiAgICBjb25zdCBmb2N1c0JvZHkgPSBib2R5ID0+IHtcbiAgICAgIGlmIChib2R5LnNldEFjdGl2ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGJvZHkuc2V0QWN0aXZlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgYm9keS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBib2R5LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoYXNFbGVtZW50Rm9jdXMgPSBlbG0gPT4gaGFzRm9jdXMkMShlbG0pIHx8IHNlYXJjaChlbG0pLmlzU29tZSgpO1xuICAgIGNvbnN0IGhhc0lmcmFtZUZvY3VzID0gZWRpdG9yID0+IGlzTm9uTnVsbGFibGUoZWRpdG9yLmlmcmFtZUVsZW1lbnQpICYmIGhhc0ZvY3VzJDEoU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmlmcmFtZUVsZW1lbnQpKTtcbiAgICBjb25zdCBoYXNJbmxpbmVGb2N1cyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCByYXdCb2R5ID0gZWRpdG9yLmdldEJvZHkoKTtcbiAgICAgIHJldHVybiByYXdCb2R5ICYmIGhhc0VsZW1lbnRGb2N1cyhTdWdhckVsZW1lbnQuZnJvbURvbShyYXdCb2R5KSk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNVaUZvY3VzID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGRvcyA9IGdldFJvb3ROb2RlKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRFbGVtZW50KCkpKTtcbiAgICAgIHJldHVybiBhY3RpdmUkMShkb3MpLmZpbHRlcihlbGVtID0+ICFpc0VkaXRvckNvbnRlbnRBcmVhRWxlbWVudChlbGVtLmRvbSkgJiYgaXNVSUVsZW1lbnQoZWRpdG9yLCBlbGVtLmRvbSkpLmlzU29tZSgpO1xuICAgIH07XG4gICAgY29uc3QgaGFzRm9jdXMgPSBlZGl0b3IgPT4gZWRpdG9yLmlubGluZSA/IGhhc0lubGluZUZvY3VzKGVkaXRvcikgOiBoYXNJZnJhbWVGb2N1cyhlZGl0b3IpO1xuICAgIGNvbnN0IGhhc0VkaXRvck9yVWlGb2N1cyA9IGVkaXRvciA9PiBoYXNGb2N1cyhlZGl0b3IpIHx8IGhhc1VpRm9jdXMoZWRpdG9yKTtcbiAgICBjb25zdCBmb2N1c0VkaXRvciA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uO1xuICAgICAgY29uc3QgYm9keSA9IGVkaXRvci5nZXRCb2R5KCk7XG4gICAgICBsZXQgcm5nID0gc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgZWRpdG9yLnF1aXJrcy5yZWZyZXNoQ29udGVudEVkaXRhYmxlKCk7XG4gICAgICBpZiAoaXNOb25OdWxsYWJsZShlZGl0b3IuYm9va21hcmspICYmICFoYXNGb2N1cyhlZGl0b3IpKSB7XG4gICAgICAgIGdldFJuZyhlZGl0b3IpLmVhY2goYm9va21hcmtSbmcgPT4ge1xuICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKGJvb2ttYXJrUm5nKTtcbiAgICAgICAgICBybmcgPSBib29rbWFya1JuZztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjb250ZW50RWRpdGFibGVIb3N0ID0gZ2V0Q29udGVudEVkaXRhYmxlSG9zdChlZGl0b3IsIHNlbGVjdGlvbi5nZXROb2RlKCkpO1xuICAgICAgaWYgKGNvbnRlbnRFZGl0YWJsZUhvc3QgJiYgZWRpdG9yLmRvbS5pc0NoaWxkT2YoY29udGVudEVkaXRhYmxlSG9zdCwgYm9keSkpIHtcbiAgICAgICAgZm9jdXNCb2R5KGNvbnRlbnRFZGl0YWJsZUhvc3QpO1xuICAgICAgICBub3JtYWxpemVTZWxlY3Rpb24oZWRpdG9yLCBybmcpO1xuICAgICAgICBhY3RpdmF0ZUVkaXRvcihlZGl0b3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIWVkaXRvci5pbmxpbmUpIHtcbiAgICAgICAgaWYgKCFFbnYuYnJvd3Nlci5pc09wZXJhKCkpIHtcbiAgICAgICAgICBmb2N1c0JvZHkoYm9keSk7XG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yLmdldFdpbigpLmZvY3VzKCk7XG4gICAgICB9XG4gICAgICBpZiAoRW52LmJyb3dzZXIuaXNGaXJlZm94KCkgfHwgZWRpdG9yLmlubGluZSkge1xuICAgICAgICBmb2N1c0JvZHkoYm9keSk7XG4gICAgICAgIG5vcm1hbGl6ZVNlbGVjdGlvbihlZGl0b3IsIHJuZyk7XG4gICAgICB9XG4gICAgICBhY3RpdmF0ZUVkaXRvcihlZGl0b3IpO1xuICAgIH07XG4gICAgY29uc3QgYWN0aXZhdGVFZGl0b3IgPSBlZGl0b3IgPT4gZWRpdG9yLmVkaXRvck1hbmFnZXIuc2V0QWN0aXZlKGVkaXRvcik7XG4gICAgY29uc3QgZm9jdXMgPSAoZWRpdG9yLCBza2lwRm9jdXMpID0+IHtcbiAgICAgIGlmIChlZGl0b3IucmVtb3ZlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc2tpcEZvY3VzKSB7XG4gICAgICAgIGFjdGl2YXRlRWRpdG9yKGVkaXRvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb2N1c0VkaXRvcihlZGl0b3IpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBnZXRFbmRwb2ludEVsZW1lbnQgPSAocm9vdCwgcm5nLCBzdGFydCwgcmVhbCwgcmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gc3RhcnQgPyBybmcuc3RhcnRDb250YWluZXIgOiBybmcuZW5kQ29udGFpbmVyO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gc3RhcnQgPyBybmcuc3RhcnRPZmZzZXQgOiBybmcuZW5kT2Zmc2V0O1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oY29udGFpbmVyKS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pLm1hcChlbG0gPT4gIXJlYWwgfHwgIXJuZy5jb2xsYXBzZWQgPyBjaGlsZCQxKGVsbSwgcmVzb2x2ZShlbG0sIG9mZnNldCkpLmdldE9yKGVsbSkgOiBlbG0pLmJpbmQoZWxtID0+IGlzRWxlbWVudCQ3KGVsbSkgPyBPcHRpb25hbC5zb21lKGVsbSkgOiBwYXJlbnQoZWxtKS5maWx0ZXIoaXNFbGVtZW50JDcpKS5tYXAoZWxtID0+IGVsbS5kb20pLmdldE9yKHJvb3QpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0U3RhcnQgPSAocm9vdCwgcm5nLCByZWFsID0gZmFsc2UpID0+IGdldEVuZHBvaW50RWxlbWVudChyb290LCBybmcsIHRydWUsIHJlYWwsIChlbG0sIG9mZnNldCkgPT4gTWF0aC5taW4oY2hpbGROb2Rlc0NvdW50KGVsbSksIG9mZnNldCkpO1xuICAgIGNvbnN0IGdldEVuZCQxID0gKHJvb3QsIHJuZywgcmVhbCA9IGZhbHNlKSA9PiBnZXRFbmRwb2ludEVsZW1lbnQocm9vdCwgcm5nLCBmYWxzZSwgcmVhbCwgKGVsbSwgb2Zmc2V0KSA9PiBvZmZzZXQgPiAwID8gb2Zmc2V0IC0gMSA6IG9mZnNldCk7XG4gICAgY29uc3Qgc2tpcEVtcHR5VGV4dE5vZGVzID0gKG5vZGUsIGZvcndhcmRzKSA9PiB7XG4gICAgICBjb25zdCBvcmlnID0gbm9kZTtcbiAgICAgIHdoaWxlIChub2RlICYmIGlzVGV4dCRhKG5vZGUpICYmIG5vZGUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIG5vZGUgPSBmb3J3YXJkcyA/IG5vZGUubmV4dFNpYmxpbmcgOiBub2RlLnByZXZpb3VzU2libGluZztcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlIHx8IG9yaWc7XG4gICAgfTtcbiAgICBjb25zdCBnZXROb2RlID0gKHJvb3QsIHJuZykgPT4ge1xuICAgICAgaWYgKCFybmcpIHtcbiAgICAgICAgcmV0dXJuIHJvb3Q7XG4gICAgICB9XG4gICAgICBsZXQgc3RhcnRDb250YWluZXIgPSBybmcuc3RhcnRDb250YWluZXI7XG4gICAgICBsZXQgZW5kQ29udGFpbmVyID0gcm5nLmVuZENvbnRhaW5lcjtcbiAgICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gcm5nLnN0YXJ0T2Zmc2V0O1xuICAgICAgY29uc3QgZW5kT2Zmc2V0ID0gcm5nLmVuZE9mZnNldDtcbiAgICAgIGxldCBub2RlID0gcm5nLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xuICAgICAgaWYgKCFybmcuY29sbGFwc2VkKSB7XG4gICAgICAgIGlmIChzdGFydENvbnRhaW5lciA9PT0gZW5kQ29udGFpbmVyKSB7XG4gICAgICAgICAgaWYgKGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0IDwgMikge1xuICAgICAgICAgICAgaWYgKHN0YXJ0Q29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgICAgICBub2RlID0gc3RhcnRDb250YWluZXIuY2hpbGROb2Rlc1tzdGFydE9mZnNldF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1RleHQkYShzdGFydENvbnRhaW5lcikgJiYgaXNUZXh0JGEoZW5kQ29udGFpbmVyKSkge1xuICAgICAgICAgIGlmIChzdGFydENvbnRhaW5lci5sZW5ndGggPT09IHN0YXJ0T2Zmc2V0KSB7XG4gICAgICAgICAgICBzdGFydENvbnRhaW5lciA9IHNraXBFbXB0eVRleHROb2RlcyhzdGFydENvbnRhaW5lci5uZXh0U2libGluZywgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyID0gc3RhcnRDb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVuZE9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgZW5kQ29udGFpbmVyID0gc2tpcEVtcHR5VGV4dE5vZGVzKGVuZENvbnRhaW5lci5wcmV2aW91c1NpYmxpbmcsIGZhbHNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZW5kQ29udGFpbmVyID0gZW5kQ29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGFydENvbnRhaW5lciAmJiBzdGFydENvbnRhaW5lciA9PT0gZW5kQ29udGFpbmVyKSB7XG4gICAgICAgICAgICBub2RlID0gc3RhcnRDb250YWluZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBlbG0gPSBpc1RleHQkYShub2RlKSA/IG5vZGUucGFyZW50Tm9kZSA6IG5vZGU7XG4gICAgICByZXR1cm4gaXNFbGVtZW50JDYoZWxtKSA/IGVsbSA6IHJvb3Q7XG4gICAgfTtcbiAgICBjb25zdCBnZXRTZWxlY3RlZEJsb2NrcyA9IChkb20sIHJuZywgc3RhcnRFbG0sIGVuZEVsbSkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRCbG9ja3MgPSBbXTtcbiAgICAgIGNvbnN0IHJvb3QgPSBkb20uZ2V0Um9vdCgpO1xuICAgICAgY29uc3Qgc3RhcnQgPSBkb20uZ2V0UGFyZW50KHN0YXJ0RWxtIHx8IGdldFN0YXJ0KHJvb3QsIHJuZywgcm5nLmNvbGxhcHNlZCksIGRvbS5pc0Jsb2NrKTtcbiAgICAgIGNvbnN0IGVuZCA9IGRvbS5nZXRQYXJlbnQoZW5kRWxtIHx8IGdldEVuZCQxKHJvb3QsIHJuZywgcm5nLmNvbGxhcHNlZCksIGRvbS5pc0Jsb2NrKTtcbiAgICAgIGlmIChzdGFydCAmJiBzdGFydCAhPT0gcm9vdCkge1xuICAgICAgICBzZWxlY3RlZEJsb2Nrcy5wdXNoKHN0YXJ0KTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGFydCAmJiBlbmQgJiYgc3RhcnQgIT09IGVuZCkge1xuICAgICAgICBsZXQgbm9kZTtcbiAgICAgICAgY29uc3Qgd2Fsa2VyID0gbmV3IERvbVRyZWVXYWxrZXIoc3RhcnQsIHJvb3QpO1xuICAgICAgICB3aGlsZSAoKG5vZGUgPSB3YWxrZXIubmV4dCgpKSAmJiBub2RlICE9PSBlbmQpIHtcbiAgICAgICAgICBpZiAoZG9tLmlzQmxvY2sobm9kZSkpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkQmxvY2tzLnB1c2gobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZW5kICYmIHN0YXJ0ICE9PSBlbmQgJiYgZW5kICE9PSByb290KSB7XG4gICAgICAgIHNlbGVjdGVkQmxvY2tzLnB1c2goZW5kKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZWxlY3RlZEJsb2NrcztcbiAgICB9O1xuICAgIGNvbnN0IHNlbGVjdCA9IChkb20sIG5vZGUsIGNvbnRlbnQpID0+IE9wdGlvbmFsLmZyb20obm9kZSkuYmluZChub2RlID0+IE9wdGlvbmFsLmZyb20obm9kZS5wYXJlbnROb2RlKS5tYXAocGFyZW50ID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IGRvbS5ub2RlSW5kZXgobm9kZSk7XG4gICAgICBjb25zdCBybmcgPSBkb20uY3JlYXRlUm5nKCk7XG4gICAgICBybmcuc2V0U3RhcnQocGFyZW50LCBpZHgpO1xuICAgICAgcm5nLnNldEVuZChwYXJlbnQsIGlkeCArIDEpO1xuICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgbW92ZUVuZFBvaW50KGRvbSwgcm5nLCBub2RlLCB0cnVlKTtcbiAgICAgICAgbW92ZUVuZFBvaW50KGRvbSwgcm5nLCBub2RlLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcm5nO1xuICAgIH0pKTtcblxuICAgIGNvbnN0IHByb2Nlc3NSYW5nZXMgPSAoZWRpdG9yLCByYW5nZXMpID0+IG1hcCQzKHJhbmdlcywgcmFuZ2UgPT4ge1xuICAgICAgY29uc3QgZXZ0ID0gZWRpdG9yLmRpc3BhdGNoKCdHZXRTZWxlY3Rpb25SYW5nZScsIHsgcmFuZ2UgfSk7XG4gICAgICByZXR1cm4gZXZ0LnJhbmdlICE9PSByYW5nZSA/IGV2dC5yYW5nZSA6IHJhbmdlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZ2V0RW5kID0gZWxlbWVudCA9PiBuYW1lKGVsZW1lbnQpID09PSAnaW1nJyA/IDEgOiBnZXRPcHRpb24oZWxlbWVudCkuZm9sZCgoKSA9PiBjaGlsZHJlbiQxKGVsZW1lbnQpLmxlbmd0aCwgdiA9PiB2Lmxlbmd0aCk7XG4gICAgY29uc3QgaXNUZXh0Tm9kZVdpdGhDdXJzb3JQb3NpdGlvbiA9IGVsID0+IGdldE9wdGlvbihlbCkuZmlsdGVyKHRleHQgPT4gdGV4dC50cmltKCkubGVuZ3RoICE9PSAwIHx8IHRleHQuaW5kZXhPZihuYnNwKSA+IC0xKS5pc1NvbWUoKTtcbiAgICBjb25zdCBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJDUgPSBlbGVtID0+IGlzSFRNTEVsZW1lbnQoZWxlbSkgJiYgZ2V0JDkoZWxlbSwgJ2NvbnRlbnRlZGl0YWJsZScpID09PSAnZmFsc2UnO1xuICAgIGNvbnN0IGVsZW1lbnRzV2l0aEN1cnNvclBvc2l0aW9uID0gW1xuICAgICAgJ2ltZycsXG4gICAgICAnYnInXG4gICAgXTtcbiAgICBjb25zdCBpc0N1cnNvclBvc2l0aW9uID0gZWxlbSA9PiB7XG4gICAgICBjb25zdCBoYXNDdXJzb3JQb3NpdGlvbiA9IGlzVGV4dE5vZGVXaXRoQ3Vyc29yUG9zaXRpb24oZWxlbSk7XG4gICAgICByZXR1cm4gaGFzQ3Vyc29yUG9zaXRpb24gfHwgY29udGFpbnMkMihlbGVtZW50c1dpdGhDdXJzb3JQb3NpdGlvbiwgbmFtZShlbGVtKSkgfHwgaXNDb250ZW50RWRpdGFibGVGYWxzZSQ1KGVsZW0pO1xuICAgIH07XG5cbiAgICBjb25zdCBmaXJzdCA9IGVsZW1lbnQgPT4gZGVzY2VuZGFudCQxKGVsZW1lbnQsIGlzQ3Vyc29yUG9zaXRpb24pO1xuICAgIGNvbnN0IGxhc3QgPSBlbGVtZW50ID0+IGRlc2NlbmRhbnRSdGwoZWxlbWVudCwgaXNDdXJzb3JQb3NpdGlvbik7XG4gICAgY29uc3QgZGVzY2VuZGFudFJ0bCA9IChzY29wZSwgcHJlZGljYXRlKSA9PiB7XG4gICAgICBjb25zdCBkZXNjZW5kID0gZWxlbWVudCA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gY2hpbGRyZW4kMShlbGVtZW50KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgICAgICBpZiAocHJlZGljYXRlKGNoaWxkKSkge1xuICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoY2hpbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXMgPSBkZXNjZW5kKGNoaWxkKTtcbiAgICAgICAgICBpZiAocmVzLmlzU29tZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBkZXNjZW5kKHNjb3BlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYXV0b2NvbXBsZXRlU2VsZWN0b3IgPSAnW2RhdGEtbWNlLWF1dG9jb21wbGV0ZXJdJztcbiAgICBjb25zdCBjcmVhdGUkOSA9IChlZGl0b3IsIHJhbmdlKSA9PiB7XG4gICAgICBpZiAoZmluZEluKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpKS5pc05vbmUoKSkge1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gU3VnYXJFbGVtZW50LmZyb21IdG1sKCc8c3BhbiBkYXRhLW1jZS1hdXRvY29tcGxldGVyPVwiMVwiIGRhdGEtbWNlLWJvZ3VzPVwiMVwiPjwvc3Bhbj4nLCBlZGl0b3IuZ2V0RG9jKCkpO1xuICAgICAgICBhcHBlbmQkMSh3cmFwcGVyLCBTdWdhckVsZW1lbnQuZnJvbURvbShyYW5nZS5leHRyYWN0Q29udGVudHMoKSkpO1xuICAgICAgICByYW5nZS5pbnNlcnROb2RlKHdyYXBwZXIuZG9tKTtcbiAgICAgICAgcGFyZW50KHdyYXBwZXIpLmVhY2goZWxtID0+IGVsbS5kb20ubm9ybWFsaXplKCkpO1xuICAgICAgICBsYXN0KHdyYXBwZXIpLm1hcChsYXN0ID0+IHtcbiAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldEN1cnNvckxvY2F0aW9uKGxhc3QuZG9tLCBnZXRFbmQobGFzdCkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGRldGVjdCQxID0gZWxtID0+IGNsb3Nlc3QkMyhlbG0sIGF1dG9jb21wbGV0ZVNlbGVjdG9yKTtcbiAgICBjb25zdCBmaW5kSW4gPSBlbG0gPT4gZGVzY2VuZGFudChlbG0sIGF1dG9jb21wbGV0ZVNlbGVjdG9yKTtcbiAgICBjb25zdCByZW1vdmUkMiA9IChlZGl0b3IsIGVsbSkgPT4gZmluZEluKGVsbSkuZWFjaCh3cmFwcGVyID0+IHtcbiAgICAgIGNvbnN0IGJvb2ttYXJrID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRCb29rbWFyaygpO1xuICAgICAgdW53cmFwKHdyYXBwZXIpO1xuICAgICAgZWRpdG9yLnNlbGVjdGlvbi5tb3ZlVG9Cb29rbWFyayhib29rbWFyayk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0eXBlTG9va3VwID0ge1xuICAgICAgJyN0ZXh0JzogMyxcbiAgICAgICcjY29tbWVudCc6IDgsXG4gICAgICAnI2NkYXRhJzogNCxcbiAgICAgICcjcGknOiA3LFxuICAgICAgJyNkb2N0eXBlJzogMTAsXG4gICAgICAnI2RvY3VtZW50LWZyYWdtZW50JzogMTFcbiAgICB9O1xuICAgIGNvbnN0IHdhbGskMiA9IChub2RlLCByb290LCBwcmV2KSA9PiB7XG4gICAgICBjb25zdCBzdGFydE5hbWUgPSBwcmV2ID8gJ2xhc3RDaGlsZCcgOiAnZmlyc3RDaGlsZCc7XG4gICAgICBjb25zdCBzaWJsaW5nTmFtZSA9IHByZXYgPyAncHJldicgOiAnbmV4dCc7XG4gICAgICBpZiAobm9kZVtzdGFydE5hbWVdKSB7XG4gICAgICAgIHJldHVybiBub2RlW3N0YXJ0TmFtZV07XG4gICAgICB9XG4gICAgICBpZiAobm9kZSAhPT0gcm9vdCkge1xuICAgICAgICBsZXQgc2libGluZyA9IG5vZGVbc2libGluZ05hbWVdO1xuICAgICAgICBpZiAoc2libGluZykge1xuICAgICAgICAgIHJldHVybiBzaWJsaW5nO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IHBhcmVudCA9IG5vZGUucGFyZW50OyBwYXJlbnQgJiYgcGFyZW50ICE9PSByb290OyBwYXJlbnQgPSBwYXJlbnQucGFyZW50KSB7XG4gICAgICAgICAgc2libGluZyA9IHBhcmVudFtzaWJsaW5nTmFtZV07XG4gICAgICAgICAgaWYgKHNpYmxpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzaWJsaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIGNvbnN0IGlzRW1wdHlUZXh0Tm9kZSA9IG5vZGUgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgdGV4dCA9IChfYSA9IG5vZGUudmFsdWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnO1xuICAgICAgaWYgKCFpc1doaXRlc3BhY2VUZXh0KHRleHQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBub2RlLnBhcmVudDtcbiAgICAgIGlmIChwYXJlbnROb2RlICYmIChwYXJlbnROb2RlLm5hbWUgIT09ICdzcGFuJyB8fCBwYXJlbnROb2RlLmF0dHIoJ3N0eWxlJykpICYmIC9eWyBdKyQvLnRlc3QodGV4dCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBpc05vbkVtcHR5RWxlbWVudCA9IG5vZGUgPT4ge1xuICAgICAgY29uc3QgaXNOYW1lZEFuY2hvciA9IG5vZGUubmFtZSA9PT0gJ2EnICYmICFub2RlLmF0dHIoJ2hyZWYnKSAmJiBub2RlLmF0dHIoJ2lkJyk7XG4gICAgICByZXR1cm4gbm9kZS5hdHRyKCduYW1lJykgfHwgbm9kZS5hdHRyKCdpZCcpICYmICFub2RlLmZpcnN0Q2hpbGQgfHwgbm9kZS5hdHRyKCdkYXRhLW1jZS1ib29rbWFyaycpIHx8IGlzTmFtZWRBbmNob3I7XG4gICAgfTtcbiAgICBjbGFzcyBBc3ROb2RlIHtcbiAgICAgIHN0YXRpYyBjcmVhdGUobmFtZSwgYXR0cnMpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBBc3ROb2RlKG5hbWUsIHR5cGVMb29rdXBbbmFtZV0gfHwgMSk7XG4gICAgICAgIGlmIChhdHRycykge1xuICAgICAgICAgIGVhY2gkZChhdHRycywgKHZhbHVlLCBhdHRyTmFtZSkgPT4ge1xuICAgICAgICAgICAgbm9kZS5hdHRyKGF0dHJOYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG4gICAgICBjb25zdHJ1Y3RvcihuYW1lLCB0eXBlKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIGlmICh0eXBlID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLm1hcCA9IHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXBsYWNlKG5vZGUpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmIChub2RlLnBhcmVudCkge1xuICAgICAgICAgIG5vZGUucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5pbnNlcnQobm9kZSwgc2VsZik7XG4gICAgICAgIHNlbGYucmVtb3ZlKCk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgfVxuICAgICAgYXR0cihuYW1lLCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKCFpc1N0cmluZyhuYW1lKSkge1xuICAgICAgICAgIGlmIChpc05vbk51bGxhYmxlKG5hbWUpKSB7XG4gICAgICAgICAgICBlYWNoJGQobmFtZSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgc2VsZi5hdHRyKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF0dHJzID0gc2VsZi5hdHRyaWJ1dGVzO1xuICAgICAgICBpZiAoYXR0cnMpIHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmIChuYW1lIGluIGF0dHJzLm1hcCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBhdHRycy5tYXBbbmFtZV07XG4gICAgICAgICAgICAgICAgbGV0IGkgPSBhdHRycy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgICAgICAgaWYgKGF0dHJzW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmFtZSBpbiBhdHRycy5tYXApIHtcbiAgICAgICAgICAgICAgbGV0IGkgPSBhdHRycy5sZW5ndGg7XG4gICAgICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgICAgICBpZiAoYXR0cnNbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgICAgICAgYXR0cnNbaV0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYXR0cnMucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF0dHJzLm1hcFtuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhdHRycy5tYXBbbmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGNsb25lKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgQXN0Tm9kZShzZWxmLm5hbWUsIHNlbGYudHlwZSk7XG4gICAgICAgIGNvbnN0IHNlbGZBdHRycyA9IHNlbGYuYXR0cmlidXRlcztcbiAgICAgICAgaWYgKHNlbGZBdHRycykge1xuICAgICAgICAgIGNvbnN0IGNsb25lQXR0cnMgPSBbXTtcbiAgICAgICAgICBjbG9uZUF0dHJzLm1hcCA9IHt9O1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gc2VsZkF0dHJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc2VsZkF0dHIgPSBzZWxmQXR0cnNbaV07XG4gICAgICAgICAgICBpZiAoc2VsZkF0dHIubmFtZSAhPT0gJ2lkJykge1xuICAgICAgICAgICAgICBjbG9uZUF0dHJzW2Nsb25lQXR0cnMubGVuZ3RoXSA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBzZWxmQXR0ci5uYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBzZWxmQXR0ci52YWx1ZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBjbG9uZUF0dHJzLm1hcFtzZWxmQXR0ci5uYW1lXSA9IHNlbGZBdHRyLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjbG9uZS5hdHRyaWJ1dGVzID0gY2xvbmVBdHRycztcbiAgICAgICAgfVxuICAgICAgICBjbG9uZS52YWx1ZSA9IHNlbGYudmFsdWU7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICAgIH1cbiAgICAgIHdyYXAod3JhcHBlcikge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKHNlbGYucGFyZW50KSB7XG4gICAgICAgICAgc2VsZi5wYXJlbnQuaW5zZXJ0KHdyYXBwZXIsIHNlbGYpO1xuICAgICAgICAgIHdyYXBwZXIuYXBwZW5kKHNlbGYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgfVxuICAgICAgdW53cmFwKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgZm9yIChsZXQgbm9kZSA9IHNlbGYuZmlyc3RDaGlsZDsgbm9kZTspIHtcbiAgICAgICAgICBjb25zdCBuZXh0ID0gbm9kZS5uZXh0O1xuICAgICAgICAgIHNlbGYuaW5zZXJ0KG5vZGUsIHNlbGYsIHRydWUpO1xuICAgICAgICAgIG5vZGUgPSBuZXh0O1xuICAgICAgICB9XG4gICAgICAgIHNlbGYucmVtb3ZlKCk7XG4gICAgICB9XG4gICAgICByZW1vdmUoKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzLCBwYXJlbnQgPSBzZWxmLnBhcmVudCwgbmV4dCA9IHNlbGYubmV4dCwgcHJldiA9IHNlbGYucHJldjtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgIGlmIChwYXJlbnQuZmlyc3RDaGlsZCA9PT0gc2VsZikge1xuICAgICAgICAgICAgcGFyZW50LmZpcnN0Q2hpbGQgPSBuZXh0O1xuICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgbmV4dC5wcmV2ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHByZXYpIHtcbiAgICAgICAgICAgIHByZXYubmV4dCA9IG5leHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXJlbnQubGFzdENoaWxkID09PSBzZWxmKSB7XG4gICAgICAgICAgICBwYXJlbnQubGFzdENoaWxkID0gcHJldjtcbiAgICAgICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgICAgIHByZXYubmV4dCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0KSB7XG4gICAgICAgICAgICBuZXh0LnByZXYgPSBwcmV2O1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxmLnBhcmVudCA9IHNlbGYubmV4dCA9IHNlbGYucHJldiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICB9XG4gICAgICBhcHBlbmQobm9kZSkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKG5vZGUucGFyZW50KSB7XG4gICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXN0ID0gc2VsZi5sYXN0Q2hpbGQ7XG4gICAgICAgIGlmIChsYXN0KSB7XG4gICAgICAgICAgbGFzdC5uZXh0ID0gbm9kZTtcbiAgICAgICAgICBub2RlLnByZXYgPSBsYXN0O1xuICAgICAgICAgIHNlbGYubGFzdENoaWxkID0gbm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWxmLmxhc3RDaGlsZCA9IHNlbGYuZmlyc3RDaGlsZCA9IG5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5wYXJlbnQgPSBzZWxmO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH1cbiAgICAgIGluc2VydChub2RlLCByZWZOb2RlLCBiZWZvcmUpIHtcbiAgICAgICAgaWYgKG5vZGUucGFyZW50KSB7XG4gICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnQgPSByZWZOb2RlLnBhcmVudCB8fCB0aGlzO1xuICAgICAgICBpZiAoYmVmb3JlKSB7XG4gICAgICAgICAgaWYgKHJlZk5vZGUgPT09IHBhcmVudC5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICBwYXJlbnQuZmlyc3RDaGlsZCA9IG5vZGU7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZWZOb2RlLnByZXYpIHtcbiAgICAgICAgICAgIHJlZk5vZGUucHJldi5uZXh0ID0gbm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbm9kZS5wcmV2ID0gcmVmTm9kZS5wcmV2O1xuICAgICAgICAgIG5vZGUubmV4dCA9IHJlZk5vZGU7XG4gICAgICAgICAgcmVmTm9kZS5wcmV2ID0gbm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAocmVmTm9kZSA9PT0gcGFyZW50Lmxhc3RDaGlsZCkge1xuICAgICAgICAgICAgcGFyZW50Lmxhc3RDaGlsZCA9IG5vZGU7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZWZOb2RlLm5leHQpIHtcbiAgICAgICAgICAgIHJlZk5vZGUubmV4dC5wcmV2ID0gbm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbm9kZS5uZXh0ID0gcmVmTm9kZS5uZXh0O1xuICAgICAgICAgIG5vZGUucHJldiA9IHJlZk5vZGU7XG4gICAgICAgICAgcmVmTm9kZS5uZXh0ID0gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG4gICAgICBnZXRBbGwobmFtZSkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBub2RlID0gc2VsZi5maXJzdENoaWxkOyBub2RlOyBub2RlID0gd2FsayQyKG5vZGUsIHNlbGYpKSB7XG4gICAgICAgICAgaWYgKG5vZGUubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgY29sbGVjdGlvbi5wdXNoKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgIH1cbiAgICAgIGNoaWxkcmVuKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBub2RlID0gc2VsZi5maXJzdENoaWxkOyBub2RlOyBub2RlID0gbm9kZS5uZXh0KSB7XG4gICAgICAgICAgY29sbGVjdGlvbi5wdXNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgICAgfVxuICAgICAgZW1wdHkoKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBpZiAoc2VsZi5maXJzdENoaWxkKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZXMgPSBbXTtcbiAgICAgICAgICBmb3IgKGxldCBub2RlID0gc2VsZi5maXJzdENoaWxkOyBub2RlOyBub2RlID0gd2FsayQyKG5vZGUsIHNlbGYpKSB7XG4gICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgaSA9IG5vZGVzLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgICBub2RlLnBhcmVudCA9IG5vZGUuZmlyc3RDaGlsZCA9IG5vZGUubGFzdENoaWxkID0gbm9kZS5uZXh0ID0gbm9kZS5wcmV2ID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5maXJzdENoaWxkID0gc2VsZi5sYXN0Q2hpbGQgPSBudWxsO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgIH1cbiAgICAgIGlzRW1wdHkoZWxlbWVudHMsIHdoaXRlc3BhY2UgPSB7fSwgcHJlZGljYXRlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBub2RlID0gc2VsZi5maXJzdENoaWxkO1xuICAgICAgICBpZiAoaXNOb25FbXB0eUVsZW1lbnQoc2VsZikpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAobm9kZS50eXBlID09PSAxKSB7XG4gICAgICAgICAgICAgIGlmIChub2RlLmF0dHIoJ2RhdGEtbWNlLWJvZ3VzJykpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZWxlbWVudHNbbm9kZS5uYW1lXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoaXNOb25FbXB0eUVsZW1lbnQobm9kZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09IDgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gMyAmJiAhaXNFbXB0eVRleHROb2RlKG5vZGUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09IDMgJiYgbm9kZS5wYXJlbnQgJiYgd2hpdGVzcGFjZVtub2RlLnBhcmVudC5uYW1lXSAmJiBpc1doaXRlc3BhY2VUZXh0KChfYSA9IG5vZGUudmFsdWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJlZGljYXRlICYmIHByZWRpY2F0ZShub2RlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSB3aGlsZSAobm9kZSA9IHdhbGskMihub2RlLCBzZWxmKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICB3YWxrKHByZXYpIHtcbiAgICAgICAgcmV0dXJuIHdhbGskMih0aGlzLCBudWxsLCBwcmV2KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpc0NvbmRpdGlvbmFsQ29tbWVudCA9IChodG1sLCBzdGFydEluZGV4KSA9PiAvXlxccypcXFtpZiBbXFx3XFxXXStcXF0+Lio8IVxcW2VuZGlmXFxdKC0tIT8pPz4vLnRlc3QoaHRtbC5zdWJzdHIoc3RhcnRJbmRleCkpO1xuICAgIGNvbnN0IGZpbmRDb21tZW50RW5kSW5kZXggPSAoaHRtbCwgaXNCb2d1cywgc3RhcnRJbmRleCA9IDApID0+IHtcbiAgICAgIGNvbnN0IGxjSHRtbCA9IGh0bWwudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChsY0h0bWwuaW5kZXhPZignW2lmICcsIHN0YXJ0SW5kZXgpICE9PSAtMSAmJiBpc0NvbmRpdGlvbmFsQ29tbWVudChsY0h0bWwsIHN0YXJ0SW5kZXgpKSB7XG4gICAgICAgIGNvbnN0IGVuZElmSW5kZXggPSBsY0h0bWwuaW5kZXhPZignW2VuZGlmXScsIHN0YXJ0SW5kZXgpO1xuICAgICAgICByZXR1cm4gbGNIdG1sLmluZGV4T2YoJz4nLCBlbmRJZkluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc0JvZ3VzKSB7XG4gICAgICAgICAgY29uc3QgZW5kSW5kZXggPSBsY0h0bWwuaW5kZXhPZignPicsIHN0YXJ0SW5kZXgpO1xuICAgICAgICAgIHJldHVybiBlbmRJbmRleCAhPT0gLTEgPyBlbmRJbmRleCA6IGxjSHRtbC5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZW5kQ29tbWVudFJlZ2V4cCA9IC8tLSE/Pi9nO1xuICAgICAgICAgIGVuZENvbW1lbnRSZWdleHAubGFzdEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICAgICAgICBjb25zdCBtYXRjaCA9IGVuZENvbW1lbnRSZWdleHAuZXhlYyhodG1sKTtcbiAgICAgICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxjSHRtbC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRNYXRjaGluZ0VuZFRhZ0luZGV4ID0gKHNjaGVtYSwgaHRtbCwgc3RhcnRJbmRleCkgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRUYWdSZWdFeHAgPSAvPChbIT9cXC9dKT8oW0EtWmEtejAtOVxcLV86Ll0rKS9nO1xuICAgICAgY29uc3QgZW5kVGFnUmVnRXhwID0gLyg/Olxccyg/OlteJ1wiPl0rKD86XCJbXlwiXSpcInwnW14nXSonKSkqW15cIic+XSooPzpcIlteXCI+XSp8J1teJz5dKik/fFxccyp8XFwvKT4vZztcbiAgICAgIGNvbnN0IHZvaWRFbGVtZW50cyA9IHNjaGVtYS5nZXRWb2lkRWxlbWVudHMoKTtcbiAgICAgIGxldCBjb3VudCA9IDEsIGluZGV4ID0gc3RhcnRJbmRleDtcbiAgICAgIHdoaWxlIChjb3VudCAhPT0gMCkge1xuICAgICAgICBzdGFydFRhZ1JlZ0V4cC5sYXN0SW5kZXggPSBpbmRleDtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICBjb25zdCBzdGFydE1hdGNoID0gc3RhcnRUYWdSZWdFeHAuZXhlYyhodG1sKTtcbiAgICAgICAgICBpZiAoc3RhcnRNYXRjaCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRNYXRjaFsxXSA9PT0gJyEnKSB7XG4gICAgICAgICAgICBpZiAoc3RhcnRzV2l0aChzdGFydE1hdGNoWzJdLCAnLS0nKSkge1xuICAgICAgICAgICAgICBpbmRleCA9IGZpbmRDb21tZW50RW5kSW5kZXgoaHRtbCwgZmFsc2UsIHN0YXJ0TWF0Y2guaW5kZXggKyAnIS0tJy5sZW5ndGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaW5kZXggPSBmaW5kQ29tbWVudEVuZEluZGV4KGh0bWwsIHRydWUsIHN0YXJ0TWF0Y2guaW5kZXggKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbmRUYWdSZWdFeHAubGFzdEluZGV4ID0gc3RhcnRUYWdSZWdFeHAubGFzdEluZGV4O1xuICAgICAgICAgICAgY29uc3QgZW5kTWF0Y2ggPSBlbmRUYWdSZWdFeHAuZXhlYyhodG1sKTtcbiAgICAgICAgICAgIGlmIChpc051bGwoZW5kTWF0Y2gpIHx8IGVuZE1hdGNoLmluZGV4ICE9PSBzdGFydFRhZ1JlZ0V4cC5sYXN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhcnRNYXRjaFsxXSA9PT0gJy8nKSB7XG4gICAgICAgICAgICAgIGNvdW50IC09IDE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFoYXMkMih2b2lkRWxlbWVudHMsIHN0YXJ0TWF0Y2hbMl0pKSB7XG4gICAgICAgICAgICAgIGNvdW50ICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbmRleCA9IHN0YXJ0VGFnUmVnRXhwLmxhc3RJbmRleCArIGVuZE1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH07XG4gICAgY29uc3QgdHJpbUh0bWwkMSA9ICh0ZW1wQXR0cnMsIGh0bWwpID0+IHtcbiAgICAgIGNvbnN0IHRyaW1Db250ZW50UmVnRXhwID0gbmV3IFJlZ0V4cChbJ1xcXFxzPygnICsgdGVtcEF0dHJzLmpvaW4oJ3wnKSArICcpPVwiW15cIl0rXCInXS5qb2luKCd8JyksICdnaScpO1xuICAgICAgcmV0dXJuIGh0bWwucmVwbGFjZSh0cmltQ29udGVudFJlZ0V4cCwgJycpO1xuICAgIH07XG4gICAgY29uc3QgdHJpbUludGVybmFsID0gKHNlcmlhbGl6ZXIsIGh0bWwpID0+IHtcbiAgICAgIGNvbnN0IGJvZ3VzQWxsUmVnRXhwID0gLzwoXFx3KykgW14+XSpkYXRhLW1jZS1ib2d1cz1cImFsbFwiW14+XSo+L2c7XG4gICAgICBjb25zdCBzY2hlbWEgPSBzZXJpYWxpemVyLnNjaGVtYTtcbiAgICAgIGxldCBjb250ZW50ID0gdHJpbUh0bWwkMShzZXJpYWxpemVyLmdldFRlbXBBdHRycygpLCBodG1sKTtcbiAgICAgIGNvbnN0IHZvaWRFbGVtZW50cyA9IHNjaGVtYS5nZXRWb2lkRWxlbWVudHMoKTtcbiAgICAgIGxldCBtYXRjaGVzO1xuICAgICAgd2hpbGUgKG1hdGNoZXMgPSBib2d1c0FsbFJlZ0V4cC5leGVjKGNvbnRlbnQpKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gYm9ndXNBbGxSZWdFeHAubGFzdEluZGV4O1xuICAgICAgICBjb25zdCBtYXRjaExlbmd0aCA9IG1hdGNoZXNbMF0ubGVuZ3RoO1xuICAgICAgICBsZXQgZW5kVGFnSW5kZXg7XG4gICAgICAgIGlmICh2b2lkRWxlbWVudHNbbWF0Y2hlc1sxXV0pIHtcbiAgICAgICAgICBlbmRUYWdJbmRleCA9IGluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVuZFRhZ0luZGV4ID0gZmluZE1hdGNoaW5nRW5kVGFnSW5kZXgoc2NoZW1hLCBjb250ZW50LCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKDAsIGluZGV4IC0gbWF0Y2hMZW5ndGgpICsgY29udGVudC5zdWJzdHJpbmcoZW5kVGFnSW5kZXgpO1xuICAgICAgICBib2d1c0FsbFJlZ0V4cC5sYXN0SW5kZXggPSBpbmRleCAtIG1hdGNoTGVuZ3RoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRyaW0kMShjb250ZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IHRyaW1FeHRlcm5hbCA9IHRyaW1JbnRlcm5hbDtcblxuICAgIGNvbnN0IGNsZWFudXBCb2d1c0VsZW1lbnRzID0gcGFyZW50ID0+IHtcbiAgICAgIGNvbnN0IGJvZ3VzRWxlbWVudHMgPSBkZXNjZW5kYW50cyhwYXJlbnQsICdbZGF0YS1tY2UtYm9ndXNdJyk7XG4gICAgICBlYWNoJGUoYm9ndXNFbGVtZW50cywgZWxlbSA9PiB7XG4gICAgICAgIGNvbnN0IGJvZ3VzVmFsdWUgPSBnZXQkOShlbGVtLCAnZGF0YS1tY2UtYm9ndXMnKTtcbiAgICAgICAgaWYgKGJvZ3VzVmFsdWUgPT09ICdhbGwnKSB7XG4gICAgICAgICAgcmVtb3ZlJDUoZWxlbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNCciQ1KGVsZW0pKSB7XG4gICAgICAgICAgYmVmb3JlJDMoZWxlbSwgU3VnYXJFbGVtZW50LmZyb21UZXh0KHplcm9XaWR0aCkpO1xuICAgICAgICAgIHJlbW92ZSQ1KGVsZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVud3JhcChlbGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBjbGVhbnVwSW5wdXROYW1lcyA9IHBhcmVudCA9PiB7XG4gICAgICBjb25zdCBpbnB1dHMgPSBkZXNjZW5kYW50cyhwYXJlbnQsICdpbnB1dCcpO1xuICAgICAgZWFjaCRlKGlucHV0cywgaW5wdXQgPT4ge1xuICAgICAgICByZW1vdmUkYShpbnB1dCwgJ25hbWUnKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCB0cmltRW1wdHlDb250ZW50cyA9IChlZGl0b3IsIGh0bWwpID0+IHtcbiAgICAgIGNvbnN0IGJsb2NrTmFtZSA9IGdldEZvcmNlZFJvb3RCbG9jayhlZGl0b3IpO1xuICAgICAgY29uc3QgZW1wdHlSZWdFeHAgPSBuZXcgUmVnRXhwKGBeKDwkeyBibG9ja05hbWUgfVtePl0qPigmbmJzcDt8JiMxNjA7fFxcXFxzfFxcdTAwYTB8PGJyIFxcXFwvPnwpPFxcXFwvJHsgYmxvY2tOYW1lIH0+W1xcclxcbl0qfDxiciBcXFxcLz5bXFxyXFxuXSopJGApO1xuICAgICAgcmV0dXJuIGh0bWwucmVwbGFjZShlbXB0eVJlZ0V4cCwgJycpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0UGxhaW5UZXh0Q29udGVudCA9IChlZGl0b3IsIGJvZHkpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IGVkaXRvci5nZXREb2MoKTtcbiAgICAgIGNvbnN0IGRvcyA9IGdldFJvb3ROb2RlKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpKTtcbiAgICAgIGNvbnN0IG9mZnNjcmVlbkRpdiA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdkaXYnLCBkb2MpO1xuICAgICAgc2V0JDMob2Zmc2NyZWVuRGl2LCAnZGF0YS1tY2UtYm9ndXMnLCAnYWxsJyk7XG4gICAgICBzZXRBbGwob2Zmc2NyZWVuRGl2LCB7XG4gICAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgICBsZWZ0OiAnLTk5OTk5OTlweCcsXG4gICAgICAgIHRvcDogJzAnXG4gICAgICB9KTtcbiAgICAgIHNldCQxKG9mZnNjcmVlbkRpdiwgYm9keS5pbm5lckhUTUwpO1xuICAgICAgY2xlYW51cEJvZ3VzRWxlbWVudHMob2Zmc2NyZWVuRGl2KTtcbiAgICAgIGNsZWFudXBJbnB1dE5hbWVzKG9mZnNjcmVlbkRpdik7XG4gICAgICBjb25zdCByb290ID0gZ2V0Q29udGVudENvbnRhaW5lcihkb3MpO1xuICAgICAgYXBwZW5kJDEocm9vdCwgb2Zmc2NyZWVuRGl2KTtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB0cmltJDEob2Zmc2NyZWVuRGl2LmRvbS5pbm5lclRleHQpO1xuICAgICAgcmVtb3ZlJDUob2Zmc2NyZWVuRGl2KTtcbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH07XG4gICAgY29uc3QgZ2V0Q29udGVudEZyb21Cb2R5ID0gKGVkaXRvciwgYXJncywgYm9keSkgPT4ge1xuICAgICAgbGV0IGNvbnRlbnQ7XG4gICAgICBpZiAoYXJncy5mb3JtYXQgPT09ICdyYXcnKSB7XG4gICAgICAgIGNvbnRlbnQgPSBUb29scy50cmltKHRyaW1FeHRlcm5hbChlZGl0b3Iuc2VyaWFsaXplciwgYm9keS5pbm5lckhUTUwpKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJncy5mb3JtYXQgPT09ICd0ZXh0Jykge1xuICAgICAgICBjb250ZW50ID0gZ2V0UGxhaW5UZXh0Q29udGVudChlZGl0b3IsIGJvZHkpO1xuICAgICAgfSBlbHNlIGlmIChhcmdzLmZvcm1hdCA9PT0gJ3RyZWUnKSB7XG4gICAgICAgIGNvbnRlbnQgPSBlZGl0b3Iuc2VyaWFsaXplci5zZXJpYWxpemUoYm9keSwgYXJncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZW50ID0gdHJpbUVtcHR5Q29udGVudHMoZWRpdG9yLCBlZGl0b3Iuc2VyaWFsaXplci5zZXJpYWxpemUoYm9keSwgYXJncykpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2hvdWxkVHJpbSA9IGFyZ3MuZm9ybWF0ICE9PSAndGV4dCcgJiYgIWlzV3NQcmVzZXJ2ZUVsZW1lbnQoU3VnYXJFbGVtZW50LmZyb21Eb20oYm9keSkpO1xuICAgICAgcmV0dXJuIHNob3VsZFRyaW0gJiYgaXNTdHJpbmcoY29udGVudCkgPyBUb29scy50cmltKGNvbnRlbnQpIDogY29udGVudDtcbiAgICB9O1xuICAgIGNvbnN0IGdldENvbnRlbnRJbnRlcm5hbCA9IChlZGl0b3IsIGFyZ3MpID0+IE9wdGlvbmFsLmZyb20oZWRpdG9yLmdldEJvZHkoKSkuZm9sZChjb25zdGFudChhcmdzLmZvcm1hdCA9PT0gJ3RyZWUnID8gbmV3IEFzdE5vZGUoJ2JvZHknLCAxMSkgOiAnJyksIGJvZHkgPT4gZ2V0Q29udGVudEZyb21Cb2R5KGVkaXRvciwgYXJncywgYm9keSkpO1xuXG4gICAgY29uc3QgbWFrZU1hcCQxID0gVG9vbHMubWFrZU1hcDtcbiAgICBjb25zdCBXcml0ZXIgPSBzZXR0aW5ncyA9PiB7XG4gICAgICBjb25zdCBodG1sID0gW107XG4gICAgICBzZXR0aW5ncyA9IHNldHRpbmdzIHx8IHt9O1xuICAgICAgY29uc3QgaW5kZW50ID0gc2V0dGluZ3MuaW5kZW50O1xuICAgICAgY29uc3QgaW5kZW50QmVmb3JlID0gbWFrZU1hcCQxKHNldHRpbmdzLmluZGVudF9iZWZvcmUgfHwgJycpO1xuICAgICAgY29uc3QgaW5kZW50QWZ0ZXIgPSBtYWtlTWFwJDEoc2V0dGluZ3MuaW5kZW50X2FmdGVyIHx8ICcnKTtcbiAgICAgIGNvbnN0IGVuY29kZSA9IEVudGl0aWVzLmdldEVuY29kZUZ1bmMoc2V0dGluZ3MuZW50aXR5X2VuY29kaW5nIHx8ICdyYXcnLCBzZXR0aW5ncy5lbnRpdGllcyk7XG4gICAgICBjb25zdCBodG1sT3V0cHV0ID0gc2V0dGluZ3MuZWxlbWVudF9mb3JtYXQgIT09ICd4aHRtbCc7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGFydDogKG5hbWUsIGF0dHJzLCBlbXB0eSkgPT4ge1xuICAgICAgICAgIGlmIChpbmRlbnQgJiYgaW5kZW50QmVmb3JlW25hbWVdICYmIGh0bWwubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBodG1sW2h0bWwubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCAmJiB2YWx1ZSAhPT0gJ1xcbicpIHtcbiAgICAgICAgICAgICAgaHRtbC5wdXNoKCdcXG4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaHRtbC5wdXNoKCc8JywgbmFtZSk7XG4gICAgICAgICAgaWYgKGF0dHJzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGF0dHJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICBjb25zdCBhdHRyID0gYXR0cnNbaV07XG4gICAgICAgICAgICAgIGh0bWwucHVzaCgnICcsIGF0dHIubmFtZSwgJz1cIicsIGVuY29kZShhdHRyLnZhbHVlLCB0cnVlKSwgJ1wiJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZW1wdHkgfHwgaHRtbE91dHB1dCkge1xuICAgICAgICAgICAgaHRtbFtodG1sLmxlbmd0aF0gPSAnPic7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGh0bWxbaHRtbC5sZW5ndGhdID0gJyAvPic7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbXB0eSAmJiBpbmRlbnQgJiYgaW5kZW50QWZ0ZXJbbmFtZV0gJiYgaHRtbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGh0bWxbaHRtbC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAwICYmIHZhbHVlICE9PSAnXFxuJykge1xuICAgICAgICAgICAgICBodG1sLnB1c2goJ1xcbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW5kOiBuYW1lID0+IHtcbiAgICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgICAgaHRtbC5wdXNoKCc8LycsIG5hbWUsICc+Jyk7XG4gICAgICAgICAgaWYgKGluZGVudCAmJiBpbmRlbnRBZnRlcltuYW1lXSAmJiBodG1sLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHZhbHVlID0gaHRtbFtodG1sLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDAgJiYgdmFsdWUgIT09ICdcXG4nKSB7XG4gICAgICAgICAgICAgIGh0bWwucHVzaCgnXFxuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB0ZXh0OiAodGV4dCwgcmF3KSA9PiB7XG4gICAgICAgICAgaWYgKHRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaHRtbFtodG1sLmxlbmd0aF0gPSByYXcgPyB0ZXh0IDogZW5jb2RlKHRleHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2RhdGE6IHRleHQgPT4ge1xuICAgICAgICAgIGh0bWwucHVzaCgnPCFbQ0RBVEFbJywgdGV4dCwgJ11dPicpO1xuICAgICAgICB9LFxuICAgICAgICBjb21tZW50OiB0ZXh0ID0+IHtcbiAgICAgICAgICBodG1sLnB1c2goJzwhLS0nLCB0ZXh0LCAnLS0+Jyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBpOiAobmFtZSwgdGV4dCkgPT4ge1xuICAgICAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgICAgICBodG1sLnB1c2goJzw/JywgbmFtZSwgJyAnLCBlbmNvZGUodGV4dCksICc/PicpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBodG1sLnB1c2goJzw/JywgbmFtZSwgJz8+Jyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbmRlbnQpIHtcbiAgICAgICAgICAgIGh0bWwucHVzaCgnXFxuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkb2N0eXBlOiB0ZXh0ID0+IHtcbiAgICAgICAgICBodG1sLnB1c2goJzwhRE9DVFlQRScsIHRleHQsICc+JywgaW5kZW50ID8gJ1xcbicgOiAnJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlc2V0OiAoKSA9PiB7XG4gICAgICAgICAgaHRtbC5sZW5ndGggPSAwO1xuICAgICAgICB9LFxuICAgICAgICBnZXRDb250ZW50OiAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGh0bWwuam9pbignJykucmVwbGFjZSgvXFxuJC8sICcnKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgSHRtbFNlcmlhbGl6ZXIgPSAoc2V0dGluZ3MgPSB7fSwgc2NoZW1hID0gU2NoZW1hKCkpID0+IHtcbiAgICAgIGNvbnN0IHdyaXRlciA9IFdyaXRlcihzZXR0aW5ncyk7XG4gICAgICBzZXR0aW5ncy52YWxpZGF0ZSA9ICd2YWxpZGF0ZScgaW4gc2V0dGluZ3MgPyBzZXR0aW5ncy52YWxpZGF0ZSA6IHRydWU7XG4gICAgICBjb25zdCBzZXJpYWxpemUgPSBub2RlID0+IHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGUgPSBzZXR0aW5ncy52YWxpZGF0ZTtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSB7XG4gICAgICAgICAgMzogbm9kZSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB3cml0ZXIudGV4dCgoX2EgPSBub2RlLnZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJywgbm9kZS5yYXcpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgODogbm9kZSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB3cml0ZXIuY29tbWVudCgoX2EgPSBub2RlLnZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICA3OiBub2RlID0+IHtcbiAgICAgICAgICAgIHdyaXRlci5waShub2RlLm5hbWUsIG5vZGUudmFsdWUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgMTA6IG5vZGUgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgd3JpdGVyLmRvY3R5cGUoKF9hID0gbm9kZS52YWx1ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJycpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgNDogbm9kZSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB3cml0ZXIuY2RhdGEoKF9hID0gbm9kZS52YWx1ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJycpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgMTE6IG5vZGUgPT4ge1xuICAgICAgICAgICAgbGV0IHRlbXBOb2RlID0gbm9kZTtcbiAgICAgICAgICAgIGlmICh0ZW1wTm9kZSA9IHRlbXBOb2RlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIHdhbGsodGVtcE5vZGUpO1xuICAgICAgICAgICAgICB9IHdoaWxlICh0ZW1wTm9kZSA9IHRlbXBOb2RlLm5leHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgd3JpdGVyLnJlc2V0KCk7XG4gICAgICAgIGNvbnN0IHdhbGsgPSBub2RlID0+IHtcbiAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgY29uc3QgaGFuZGxlciA9IGhhbmRsZXJzW25vZGUudHlwZV07XG4gICAgICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gbm9kZS5uYW1lO1xuICAgICAgICAgICAgY29uc3QgaXNFbXB0eSA9IG5hbWUgaW4gc2NoZW1hLmdldFZvaWRFbGVtZW50cygpO1xuICAgICAgICAgICAgbGV0IGF0dHJzID0gbm9kZS5hdHRyaWJ1dGVzO1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRlICYmIGF0dHJzICYmIGF0dHJzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc29ydGVkQXR0cnMgPSBbXTtcbiAgICAgICAgICAgICAgc29ydGVkQXR0cnMubWFwID0ge307XG4gICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRSdWxlID0gc2NoZW1hLmdldEVsZW1lbnRSdWxlKG5vZGUubmFtZSk7XG4gICAgICAgICAgICAgIGlmIChlbGVtZW50UnVsZSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gZWxlbWVudFJ1bGUuYXR0cmlidXRlc09yZGVyLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgYXR0ck5hbWUgPSBlbGVtZW50UnVsZS5hdHRyaWJ1dGVzT3JkZXJbaV07XG4gICAgICAgICAgICAgICAgICBpZiAoYXR0ck5hbWUgaW4gYXR0cnMubWFwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJWYWx1ZSA9IGF0dHJzLm1hcFthdHRyTmFtZV07XG4gICAgICAgICAgICAgICAgICAgIHNvcnRlZEF0dHJzLm1hcFthdHRyTmFtZV0gPSBhdHRyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHNvcnRlZEF0dHJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGF0dHJOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhdHRyVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gYXR0cnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBhdHRyTmFtZSA9IGF0dHJzW2ldLm5hbWU7XG4gICAgICAgICAgICAgICAgICBpZiAoIShhdHRyTmFtZSBpbiBzb3J0ZWRBdHRycy5tYXApKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJWYWx1ZSA9IGF0dHJzLm1hcFthdHRyTmFtZV07XG4gICAgICAgICAgICAgICAgICAgIHNvcnRlZEF0dHJzLm1hcFthdHRyTmFtZV0gPSBhdHRyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHNvcnRlZEF0dHJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGF0dHJOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhdHRyVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF0dHJzID0gc29ydGVkQXR0cnM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdyaXRlci5zdGFydChuYW1lLCBhdHRycywgaXNFbXB0eSk7XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkpIHtcbiAgICAgICAgICAgICAgbGV0IGNoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuICAgICAgICAgICAgICBpZiAoY2hpbGQpIHtcbiAgICAgICAgICAgICAgICBpZiAoKG5hbWUgPT09ICdwcmUnIHx8IG5hbWUgPT09ICd0ZXh0YXJlYScpICYmIGNoaWxkLnR5cGUgPT09IDMgJiYgKChfYSA9IGNoaWxkLnZhbHVlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbMF0pID09PSAnXFxuJykge1xuICAgICAgICAgICAgICAgICAgd3JpdGVyLnRleHQoJ1xcbicsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICB3YWxrKGNoaWxkKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChjaGlsZCA9IGNoaWxkLm5leHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHdyaXRlci5lbmQobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZXIobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAobm9kZS50eXBlID09PSAxICYmICFzZXR0aW5ncy5pbm5lcikge1xuICAgICAgICAgIHdhbGsobm9kZSk7XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSAzKSB7XG4gICAgICAgICAgaGFuZGxlcnNbM10obm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGFuZGxlcnNbMTFdKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3cml0ZXIuZ2V0Q29udGVudCgpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7IHNlcmlhbGl6ZSB9O1xuICAgIH07XG5cbiAgICBjb25zdCBub25Jbmhlcml0YWJsZVN0eWxlcyA9IG5ldyBTZXQoKTtcbiAgICAoKCkgPT4ge1xuICAgICAgY29uc3Qgbm9uSW5oZXJpdGFibGVTdHlsZXNBcnIgPSBbXG4gICAgICAgICdtYXJnaW4nLFxuICAgICAgICAnbWFyZ2luLWxlZnQnLFxuICAgICAgICAnbWFyZ2luLXJpZ2h0JyxcbiAgICAgICAgJ21hcmdpbi10b3AnLFxuICAgICAgICAnbWFyZ2luLWJvdHRvbScsXG4gICAgICAgICdwYWRkaW5nJyxcbiAgICAgICAgJ3BhZGRpbmctbGVmdCcsXG4gICAgICAgICdwYWRkaW5nLXJpZ2h0JyxcbiAgICAgICAgJ3BhZGRpbmctdG9wJyxcbiAgICAgICAgJ3BhZGRpbmctYm90dG9tJyxcbiAgICAgICAgJ2JvcmRlcicsXG4gICAgICAgICdib3JkZXItd2lkdGgnLFxuICAgICAgICAnYm9yZGVyLXN0eWxlJyxcbiAgICAgICAgJ2JvcmRlci1jb2xvcicsXG4gICAgICAgICdiYWNrZ3JvdW5kJyxcbiAgICAgICAgJ2JhY2tncm91bmQtYXR0YWNobWVudCcsXG4gICAgICAgICdiYWNrZ3JvdW5kLWNsaXAnLFxuICAgICAgICAnYmFja2dyb3VuZC1jb2xvcicsXG4gICAgICAgICdiYWNrZ3JvdW5kLWltYWdlJyxcbiAgICAgICAgJ2JhY2tncm91bmQtb3JpZ2luJyxcbiAgICAgICAgJ2JhY2tncm91bmQtcG9zaXRpb24nLFxuICAgICAgICAnYmFja2dyb3VuZC1yZXBlYXQnLFxuICAgICAgICAnYmFja2dyb3VuZC1zaXplJyxcbiAgICAgICAgJ2Zsb2F0JyxcbiAgICAgICAgJ3Bvc2l0aW9uJyxcbiAgICAgICAgJ2xlZnQnLFxuICAgICAgICAncmlnaHQnLFxuICAgICAgICAndG9wJyxcbiAgICAgICAgJ2JvdHRvbScsXG4gICAgICAgICd6LWluZGV4JyxcbiAgICAgICAgJ2Rpc3BsYXknLFxuICAgICAgICAndHJhbnNmb3JtJyxcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgJ21heC13aWR0aCcsXG4gICAgICAgICdtaW4td2lkdGgnLFxuICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgJ21heC1oZWlnaHQnLFxuICAgICAgICAnbWluLWhlaWdodCcsXG4gICAgICAgICdvdmVyZmxvdycsXG4gICAgICAgICdvdmVyZmxvdy14JyxcbiAgICAgICAgJ292ZXJmbG93LXknLFxuICAgICAgICAndGV4dC1vdmVyZmxvdycsXG4gICAgICAgICd2ZXJ0aWNhbC1hbGlnbicsXG4gICAgICAgICd0cmFuc2l0aW9uJyxcbiAgICAgICAgJ3RyYW5zaXRpb24tZGVsYXknLFxuICAgICAgICAndHJhbnNpdGlvbi1kdXJhdGlvbicsXG4gICAgICAgICd0cmFuc2l0aW9uLXByb3BlcnR5JyxcbiAgICAgICAgJ3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uJ1xuICAgICAgXTtcbiAgICAgIGVhY2gkZShub25Jbmhlcml0YWJsZVN0eWxlc0Fyciwgc3R5bGUgPT4ge1xuICAgICAgICBub25Jbmhlcml0YWJsZVN0eWxlcy5hZGQoc3R5bGUpO1xuICAgICAgfSk7XG4gICAgfSkoKTtcbiAgICBjb25zdCBzaG9ydGhhbmRTdHlsZVByb3BzID0gW1xuICAgICAgJ2ZvbnQnLFxuICAgICAgJ3RleHQtZGVjb3JhdGlvbicsXG4gICAgICAndGV4dC1lbXBoYXNpcydcbiAgICBdO1xuICAgIGNvbnN0IGdldFN0eWxlUHJvcHMgPSAoZG9tLCBub2RlKSA9PiBrZXlzKGRvbS5wYXJzZVN0eWxlKGRvbS5nZXRBdHRyaWIobm9kZSwgJ3N0eWxlJykpKTtcbiAgICBjb25zdCBpc05vbkluaGVyaXRhYmxlU3R5bGUgPSBzdHlsZSA9PiBub25Jbmhlcml0YWJsZVN0eWxlcy5oYXMoc3R5bGUpO1xuICAgIGNvbnN0IGhhc0luaGVyaXRhYmxlU3R5bGVzID0gKGRvbSwgbm9kZSkgPT4gZm9yYWxsKGdldFN0eWxlUHJvcHMoZG9tLCBub2RlKSwgc3R5bGUgPT4gIWlzTm9uSW5oZXJpdGFibGVTdHlsZShzdHlsZSkpO1xuICAgIGNvbnN0IGdldExvbmdoYW5kU3R5bGVQcm9wcyA9IHN0eWxlcyA9PiBmaWx0ZXIkNShzdHlsZXMsIHN0eWxlID0+IGV4aXN0cyhzaG9ydGhhbmRTdHlsZVByb3BzLCBwcm9wID0+IHN0YXJ0c1dpdGgoc3R5bGUsIHByb3ApKSk7XG4gICAgY29uc3QgaGFzU3R5bGVDb25mbGljdCA9IChkb20sIG5vZGUsIHBhcmVudE5vZGUpID0+IHtcbiAgICAgIGNvbnN0IG5vZGVTdHlsZVByb3BzID0gZ2V0U3R5bGVQcm9wcyhkb20sIG5vZGUpO1xuICAgICAgY29uc3QgcGFyZW50Tm9kZVN0eWxlUHJvcHMgPSBnZXRTdHlsZVByb3BzKGRvbSwgcGFyZW50Tm9kZSk7XG4gICAgICBjb25zdCB2YWx1ZU1pc21hdGNoID0gcHJvcCA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGNvbnN0IG5vZGVWYWx1ZSA9IChfYSA9IGRvbS5nZXRTdHlsZShub2RlLCBwcm9wKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgICAgIGNvbnN0IHBhcmVudFZhbHVlID0gKF9iID0gZG9tLmdldFN0eWxlKHBhcmVudE5vZGUsIHByb3ApKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcbiAgICAgICAgcmV0dXJuIGlzTm90RW1wdHkobm9kZVZhbHVlKSAmJiBpc05vdEVtcHR5KHBhcmVudFZhbHVlKSAmJiBub2RlVmFsdWUgIT09IHBhcmVudFZhbHVlO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBleGlzdHMobm9kZVN0eWxlUHJvcHMsIG5vZGVTdHlsZVByb3AgPT4ge1xuICAgICAgICBjb25zdCBwcm9wRXhpc3RzID0gcHJvcHMgPT4gZXhpc3RzKHByb3BzLCBwcm9wID0+IHByb3AgPT09IG5vZGVTdHlsZVByb3ApO1xuICAgICAgICBpZiAoIXByb3BFeGlzdHMocGFyZW50Tm9kZVN0eWxlUHJvcHMpICYmIHByb3BFeGlzdHMoc2hvcnRoYW5kU3R5bGVQcm9wcykpIHtcbiAgICAgICAgICBjb25zdCBsb25naGFuZFByb3BzID0gZ2V0TG9uZ2hhbmRTdHlsZVByb3BzKHBhcmVudE5vZGVTdHlsZVByb3BzKTtcbiAgICAgICAgICByZXR1cm4gZXhpc3RzKGxvbmdoYW5kUHJvcHMsIHZhbHVlTWlzbWF0Y2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB2YWx1ZU1pc21hdGNoKG5vZGVTdHlsZVByb3ApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNDaGFyID0gKGZvcndhcmQsIHByZWRpY2F0ZSwgcG9zKSA9PiBPcHRpb25hbC5mcm9tKHBvcy5jb250YWluZXIoKSkuZmlsdGVyKGlzVGV4dCRhKS5leGlzdHModGV4dCA9PiB7XG4gICAgICBjb25zdCBkZWx0YSA9IGZvcndhcmQgPyAwIDogLTE7XG4gICAgICByZXR1cm4gcHJlZGljYXRlKHRleHQuZGF0YS5jaGFyQXQocG9zLm9mZnNldCgpICsgZGVsdGEpKTtcbiAgICB9KTtcbiAgICBjb25zdCBpc0JlZm9yZVNwYWNlID0gY3VycnkoaXNDaGFyLCB0cnVlLCBpc1doaXRlU3BhY2UpO1xuICAgIGNvbnN0IGlzQWZ0ZXJTcGFjZSA9IGN1cnJ5KGlzQ2hhciwgZmFsc2UsIGlzV2hpdGVTcGFjZSk7XG4gICAgY29uc3QgaXNFbXB0eVRleHQgPSBwb3MgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gcG9zLmNvbnRhaW5lcigpO1xuICAgICAgcmV0dXJuIGlzVGV4dCRhKGNvbnRhaW5lcikgJiYgKGNvbnRhaW5lci5kYXRhLmxlbmd0aCA9PT0gMCB8fCBpc1p3c3AkMShjb250YWluZXIuZGF0YSkgJiYgQm9va21hcmtNYW5hZ2VyLmlzQm9va21hcmtOb2RlKGNvbnRhaW5lci5wYXJlbnROb2RlKSk7XG4gICAgfTtcbiAgICBjb25zdCBtYXRjaGVzRWxlbWVudFBvc2l0aW9uID0gKGJlZm9yZSwgcHJlZGljYXRlKSA9PiBwb3MgPT4gZ2V0Q2hpbGROb2RlQXRSZWxhdGl2ZU9mZnNldChiZWZvcmUgPyAwIDogLTEsIHBvcykuZmlsdGVyKHByZWRpY2F0ZSkuaXNTb21lKCk7XG4gICAgY29uc3QgaXNJbWFnZUJsb2NrID0gbm9kZSA9PiBpc0ltZyhub2RlKSAmJiBnZXQkNyhTdWdhckVsZW1lbnQuZnJvbURvbShub2RlKSwgJ2Rpc3BsYXknKSA9PT0gJ2Jsb2NrJztcbiAgICBjb25zdCBpc0NlZk5vZGUgPSBub2RlID0+IGlzQ29udGVudEVkaXRhYmxlRmFsc2UkYihub2RlKSAmJiAhaXNCb2d1c0FsbCQxKG5vZGUpO1xuICAgIGNvbnN0IGlzQmVmb3JlSW1hZ2VCbG9jayA9IG1hdGNoZXNFbGVtZW50UG9zaXRpb24odHJ1ZSwgaXNJbWFnZUJsb2NrKTtcbiAgICBjb25zdCBpc0FmdGVySW1hZ2VCbG9jayA9IG1hdGNoZXNFbGVtZW50UG9zaXRpb24oZmFsc2UsIGlzSW1hZ2VCbG9jayk7XG4gICAgY29uc3QgaXNCZWZvcmVNZWRpYSA9IG1hdGNoZXNFbGVtZW50UG9zaXRpb24odHJ1ZSwgaXNNZWRpYSQyKTtcbiAgICBjb25zdCBpc0FmdGVyTWVkaWEgPSBtYXRjaGVzRWxlbWVudFBvc2l0aW9uKGZhbHNlLCBpc01lZGlhJDIpO1xuICAgIGNvbnN0IGlzQmVmb3JlVGFibGUgPSBtYXRjaGVzRWxlbWVudFBvc2l0aW9uKHRydWUsIGlzVGFibGUkMik7XG4gICAgY29uc3QgaXNBZnRlclRhYmxlID0gbWF0Y2hlc0VsZW1lbnRQb3NpdGlvbihmYWxzZSwgaXNUYWJsZSQyKTtcbiAgICBjb25zdCBpc0JlZm9yZUNvbnRlbnRFZGl0YWJsZUZhbHNlID0gbWF0Y2hlc0VsZW1lbnRQb3NpdGlvbih0cnVlLCBpc0NlZk5vZGUpO1xuICAgIGNvbnN0IGlzQWZ0ZXJDb250ZW50RWRpdGFibGVGYWxzZSA9IG1hdGNoZXNFbGVtZW50UG9zaXRpb24oZmFsc2UsIGlzQ2VmTm9kZSk7XG5cbiAgICBjb25zdCBkcm9wTGFzdCA9IHhzID0+IHhzLnNsaWNlKDAsIC0xKTtcbiAgICBjb25zdCBwYXJlbnRzVW50aWwgPSAoc3RhcnQsIHJvb3QsIHByZWRpY2F0ZSkgPT4ge1xuICAgICAgaWYgKGNvbnRhaW5zKHJvb3QsIHN0YXJ0KSkge1xuICAgICAgICByZXR1cm4gZHJvcExhc3QocGFyZW50cyQxKHN0YXJ0LCBlbG0gPT4ge1xuICAgICAgICAgIHJldHVybiBwcmVkaWNhdGUoZWxtKSB8fCBlcShlbG0sIHJvb3QpO1xuICAgICAgICB9KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBwYXJlbnRzID0gKHN0YXJ0LCByb290KSA9PiBwYXJlbnRzVW50aWwoc3RhcnQsIHJvb3QsIG5ldmVyKTtcbiAgICBjb25zdCBwYXJlbnRzQW5kU2VsZiA9IChzdGFydCwgcm9vdCkgPT4gW3N0YXJ0XS5jb25jYXQocGFyZW50cyhzdGFydCwgcm9vdCkpO1xuXG4gICAgY29uc3QgbmF2aWdhdGVJZ25vcmVFbXB0eVRleHROb2RlcyA9IChmb3J3YXJkLCByb290LCBmcm9tKSA9PiBuYXZpZ2F0ZUlnbm9yZShmb3J3YXJkLCByb290LCBmcm9tLCBpc0VtcHR5VGV4dCk7XG4gICAgY29uc3QgZ2V0Q2xvc2VzdEJsb2NrJDEgPSAocm9vdCwgcG9zKSA9PiBmaW5kJDIocGFyZW50c0FuZFNlbGYoU3VnYXJFbGVtZW50LmZyb21Eb20ocG9zLmNvbnRhaW5lcigpKSwgcm9vdCksIGlzQmxvY2skMik7XG4gICAgY29uc3QgaXNBdEJlZm9yZUFmdGVyQmxvY2tCb3VuZGFyeSA9IChmb3J3YXJkLCByb290LCBwb3MpID0+IG5hdmlnYXRlSWdub3JlRW1wdHlUZXh0Tm9kZXMoZm9yd2FyZCwgcm9vdC5kb20sIHBvcykuZm9yYWxsKG5ld1BvcyA9PiBnZXRDbG9zZXN0QmxvY2skMShyb290LCBwb3MpLmZvbGQoKCkgPT4gIWlzSW5TYW1lQmxvY2sobmV3UG9zLCBwb3MsIHJvb3QuZG9tKSwgZnJvbUJsb2NrID0+ICFpc0luU2FtZUJsb2NrKG5ld1BvcywgcG9zLCByb290LmRvbSkgJiYgY29udGFpbnMoZnJvbUJsb2NrLCBTdWdhckVsZW1lbnQuZnJvbURvbShuZXdQb3MuY29udGFpbmVyKCkpKSkpO1xuICAgIGNvbnN0IGlzQXRCbG9ja0JvdW5kYXJ5ID0gKGZvcndhcmQsIHJvb3QsIHBvcykgPT4gZ2V0Q2xvc2VzdEJsb2NrJDEocm9vdCwgcG9zKS5mb2xkKCgpID0+IG5hdmlnYXRlSWdub3JlRW1wdHlUZXh0Tm9kZXMoZm9yd2FyZCwgcm9vdC5kb20sIHBvcykuZm9yYWxsKG5ld1BvcyA9PiAhaXNJblNhbWVCbG9jayhuZXdQb3MsIHBvcywgcm9vdC5kb20pKSwgcGFyZW50ID0+IG5hdmlnYXRlSWdub3JlRW1wdHlUZXh0Tm9kZXMoZm9yd2FyZCwgcGFyZW50LmRvbSwgcG9zKS5pc05vbmUoKSk7XG4gICAgY29uc3QgaXNBdFN0YXJ0T2ZCbG9jayA9IGN1cnJ5KGlzQXRCbG9ja0JvdW5kYXJ5LCBmYWxzZSk7XG4gICAgY29uc3QgaXNBdEVuZE9mQmxvY2sgPSBjdXJyeShpc0F0QmxvY2tCb3VuZGFyeSwgdHJ1ZSk7XG4gICAgY29uc3QgaXNCZWZvcmVCbG9jayA9IGN1cnJ5KGlzQXRCZWZvcmVBZnRlckJsb2NrQm91bmRhcnksIGZhbHNlKTtcbiAgICBjb25zdCBpc0FmdGVyQmxvY2sgPSBjdXJyeShpc0F0QmVmb3JlQWZ0ZXJCbG9ja0JvdW5kYXJ5LCB0cnVlKTtcblxuICAgIGNvbnN0IGlzQnIkMSA9IHBvcyA9PiBnZXRFbGVtZW50RnJvbVBvc2l0aW9uKHBvcykuZXhpc3RzKGlzQnIkNSk7XG4gICAgY29uc3QgZmluZEJyID0gKGZvcndhcmQsIHJvb3QsIHBvcykgPT4ge1xuICAgICAgY29uc3QgcGFyZW50QmxvY2tzID0gZmlsdGVyJDUocGFyZW50c0FuZFNlbGYoU3VnYXJFbGVtZW50LmZyb21Eb20ocG9zLmNvbnRhaW5lcigpKSwgcm9vdCksIGlzQmxvY2skMik7XG4gICAgICBjb25zdCBzY29wZSA9IGhlYWQocGFyZW50QmxvY2tzKS5nZXRPcihyb290KTtcbiAgICAgIHJldHVybiBmcm9tUG9zaXRpb24oZm9yd2FyZCwgc2NvcGUuZG9tLCBwb3MpLmZpbHRlcihpc0JyJDEpO1xuICAgIH07XG4gICAgY29uc3QgaXNCZWZvcmVCciQxID0gKHJvb3QsIHBvcykgPT4gZ2V0RWxlbWVudEZyb21Qb3NpdGlvbihwb3MpLmV4aXN0cyhpc0JyJDUpIHx8IGZpbmRCcih0cnVlLCByb290LCBwb3MpLmlzU29tZSgpO1xuICAgIGNvbnN0IGlzQWZ0ZXJCciA9IChyb290LCBwb3MpID0+IGdldEVsZW1lbnRGcm9tUHJldlBvc2l0aW9uKHBvcykuZXhpc3RzKGlzQnIkNSkgfHwgZmluZEJyKGZhbHNlLCByb290LCBwb3MpLmlzU29tZSgpO1xuICAgIGNvbnN0IGZpbmRQcmV2aW91c0JyID0gY3VycnkoZmluZEJyLCBmYWxzZSk7XG4gICAgY29uc3QgZmluZE5leHRCciA9IGN1cnJ5KGZpbmRCciwgdHJ1ZSk7XG5cbiAgICBjb25zdCBpc0luTWlkZGxlT2ZUZXh0ID0gcG9zID0+IENhcmV0UG9zaXRpb24uaXNUZXh0UG9zaXRpb24ocG9zKSAmJiAhcG9zLmlzQXRTdGFydCgpICYmICFwb3MuaXNBdEVuZCgpO1xuICAgIGNvbnN0IGdldENsb3Nlc3RCbG9jayA9IChyb290LCBwb3MpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudEJsb2NrcyA9IGZpbHRlciQ1KHBhcmVudHNBbmRTZWxmKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHBvcy5jb250YWluZXIoKSksIHJvb3QpLCBpc0Jsb2NrJDIpO1xuICAgICAgcmV0dXJuIGhlYWQocGFyZW50QmxvY2tzKS5nZXRPcihyb290KTtcbiAgICB9O1xuICAgIGNvbnN0IGhhc1NwYWNlQmVmb3JlID0gKHJvb3QsIHBvcykgPT4ge1xuICAgICAgaWYgKGlzSW5NaWRkbGVPZlRleHQocG9zKSkge1xuICAgICAgICByZXR1cm4gaXNBZnRlclNwYWNlKHBvcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaXNBZnRlclNwYWNlKHBvcykgfHwgcHJldlBvc2l0aW9uKGdldENsb3Nlc3RCbG9jayhyb290LCBwb3MpLmRvbSwgcG9zKS5leGlzdHMoaXNBZnRlclNwYWNlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGhhc1NwYWNlQWZ0ZXIgPSAocm9vdCwgcG9zKSA9PiB7XG4gICAgICBpZiAoaXNJbk1pZGRsZU9mVGV4dChwb3MpKSB7XG4gICAgICAgIHJldHVybiBpc0JlZm9yZVNwYWNlKHBvcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaXNCZWZvcmVTcGFjZShwb3MpIHx8IG5leHRQb3NpdGlvbihnZXRDbG9zZXN0QmxvY2socm9vdCwgcG9zKS5kb20sIHBvcykuZXhpc3RzKGlzQmVmb3JlU3BhY2UpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNQcmVWYWx1ZSA9IHZhbHVlID0+IGNvbnRhaW5zJDIoW1xuICAgICAgJ3ByZScsXG4gICAgICAncHJlLXdyYXAnXG4gICAgXSwgdmFsdWUpO1xuICAgIGNvbnN0IGlzSW5QcmUgPSBwb3MgPT4gZ2V0RWxlbWVudEZyb21Qb3NpdGlvbihwb3MpLmJpbmQoZWxtID0+IGNsb3Nlc3QkNChlbG0sIGlzRWxlbWVudCQ3KSkuZXhpc3RzKGVsbSA9PiBpc1ByZVZhbHVlKGdldCQ3KGVsbSwgJ3doaXRlLXNwYWNlJykpKTtcbiAgICBjb25zdCBpc0F0QmVnaW5uaW5nT2ZCb2R5ID0gKHJvb3QsIHBvcykgPT4gcHJldlBvc2l0aW9uKHJvb3QuZG9tLCBwb3MpLmlzTm9uZSgpO1xuICAgIGNvbnN0IGlzQXRFbmRPZkJvZHkgPSAocm9vdCwgcG9zKSA9PiBuZXh0UG9zaXRpb24ocm9vdC5kb20sIHBvcykuaXNOb25lKCk7XG4gICAgY29uc3QgaXNBdExpbmVCb3VuZGFyeSA9IChyb290LCBwb3MpID0+IGlzQXRCZWdpbm5pbmdPZkJvZHkocm9vdCwgcG9zKSB8fCBpc0F0RW5kT2ZCb2R5KHJvb3QsIHBvcykgfHwgaXNBdFN0YXJ0T2ZCbG9jayhyb290LCBwb3MpIHx8IGlzQXRFbmRPZkJsb2NrKHJvb3QsIHBvcykgfHwgaXNBZnRlckJyKHJvb3QsIHBvcykgfHwgaXNCZWZvcmVCciQxKHJvb3QsIHBvcyk7XG4gICAgY29uc3QgaXNDZWZCbG9jayA9IG5vZGUgPT4gaXNOb25OdWxsYWJsZShub2RlKSAmJiBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJGIobm9kZSkgJiYgaXNCbG9ja0xpa2Uobm9kZSk7XG4gICAgY29uc3QgaXNTaWJsaW5nQ2VmQmxvY2sgPSAocm9vdCwgZGlyZWN0aW9uKSA9PiBjb250YWluZXIgPT4ge1xuICAgICAgcmV0dXJuIGlzQ2VmQmxvY2sobmV3IERvbVRyZWVXYWxrZXIoY29udGFpbmVyLCByb290KVtkaXJlY3Rpb25dKCkpO1xuICAgIH07XG4gICAgY29uc3QgaXNCZWZvcmVDZWZCbG9jayA9IChyb290LCBwb3MpID0+IHtcbiAgICAgIGNvbnN0IG5leHRQb3MgPSBuZXh0UG9zaXRpb24ocm9vdC5kb20sIHBvcykuZ2V0T3IocG9zKTtcbiAgICAgIGNvbnN0IGlzTmV4dENlZkJsb2NrID0gaXNTaWJsaW5nQ2VmQmxvY2socm9vdC5kb20sICduZXh0Jyk7XG4gICAgICByZXR1cm4gcG9zLmlzQXRFbmQoKSAmJiAoaXNOZXh0Q2VmQmxvY2socG9zLmNvbnRhaW5lcigpKSB8fCBpc05leHRDZWZCbG9jayhuZXh0UG9zLmNvbnRhaW5lcigpKSk7XG4gICAgfTtcbiAgICBjb25zdCBpc0FmdGVyQ2VmQmxvY2sgPSAocm9vdCwgcG9zKSA9PiB7XG4gICAgICBjb25zdCBwcmV2UG9zID0gcHJldlBvc2l0aW9uKHJvb3QuZG9tLCBwb3MpLmdldE9yKHBvcyk7XG4gICAgICBjb25zdCBpc1ByZXZDZWZCbG9jayA9IGlzU2libGluZ0NlZkJsb2NrKHJvb3QuZG9tLCAncHJldicpO1xuICAgICAgcmV0dXJuIHBvcy5pc0F0U3RhcnQoKSAmJiAoaXNQcmV2Q2VmQmxvY2socG9zLmNvbnRhaW5lcigpKSB8fCBpc1ByZXZDZWZCbG9jayhwcmV2UG9zLmNvbnRhaW5lcigpKSk7XG4gICAgfTtcbiAgICBjb25zdCBuZWVkc1RvSGF2ZU5ic3AgPSAocm9vdCwgcG9zKSA9PiB7XG4gICAgICBpZiAoaXNJblByZShwb3MpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpc0F0TGluZUJvdW5kYXJ5KHJvb3QsIHBvcykgfHwgaGFzU3BhY2VCZWZvcmUocm9vdCwgcG9zKSB8fCBoYXNTcGFjZUFmdGVyKHJvb3QsIHBvcyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBuZWVkc1RvQmVOYnNwTGVmdCA9IChyb290LCBwb3MpID0+IHtcbiAgICAgIGlmIChpc0luUHJlKHBvcykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGlzQXRTdGFydE9mQmxvY2socm9vdCwgcG9zKSB8fCBpc0JlZm9yZUJsb2NrKHJvb3QsIHBvcykgfHwgaXNBZnRlckJyKHJvb3QsIHBvcykgfHwgaGFzU3BhY2VCZWZvcmUocm9vdCwgcG9zKSB8fCBpc0FmdGVyQ2VmQmxvY2socm9vdCwgcG9zKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGxlYW5SaWdodCA9IHBvcyA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBwb3MuY29udGFpbmVyKCk7XG4gICAgICBjb25zdCBvZmZzZXQgPSBwb3Mub2Zmc2V0KCk7XG4gICAgICBpZiAoaXNUZXh0JGEoY29udGFpbmVyKSAmJiBvZmZzZXQgPCBjb250YWluZXIuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24oY29udGFpbmVyLCBvZmZzZXQgKyAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwb3M7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBuZWVkc1RvQmVOYnNwUmlnaHQgPSAocm9vdCwgcG9zKSA9PiB7XG4gICAgICBpZiAoaXNJblByZShwb3MpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpc0F0RW5kT2ZCbG9jayhyb290LCBwb3MpIHx8IGlzQWZ0ZXJCbG9jayhyb290LCBwb3MpIHx8IGlzQmVmb3JlQnIkMShyb290LCBwb3MpIHx8IGhhc1NwYWNlQWZ0ZXIocm9vdCwgcG9zKSB8fCBpc0JlZm9yZUNlZkJsb2NrKHJvb3QsIHBvcyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBuZWVkc1RvQmVOYnNwID0gKHJvb3QsIHBvcykgPT4gbmVlZHNUb0JlTmJzcExlZnQocm9vdCwgcG9zKSB8fCBuZWVkc1RvQmVOYnNwUmlnaHQocm9vdCwgbGVhblJpZ2h0KHBvcykpO1xuICAgIGNvbnN0IGlzTmJzcEF0ID0gKHRleHQsIG9mZnNldCkgPT4gaXNOYnNwKHRleHQuY2hhckF0KG9mZnNldCkpO1xuICAgIGNvbnN0IGlzV2hpdGVTcGFjZUF0ID0gKHRleHQsIG9mZnNldCkgPT4gaXNXaGl0ZVNwYWNlKHRleHQuY2hhckF0KG9mZnNldCkpO1xuICAgIGNvbnN0IGhhc05ic3AgPSBwb3MgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gcG9zLmNvbnRhaW5lcigpO1xuICAgICAgcmV0dXJuIGlzVGV4dCRhKGNvbnRhaW5lcikgJiYgY29udGFpbnMkMShjb250YWluZXIuZGF0YSwgbmJzcCk7XG4gICAgfTtcbiAgICBjb25zdCBub3JtYWxpemVOYnNwTWlkZGxlID0gdGV4dCA9PiB7XG4gICAgICBjb25zdCBjaGFycyA9IHRleHQuc3BsaXQoJycpO1xuICAgICAgcmV0dXJuIG1hcCQzKGNoYXJzLCAoY2hyLCBpKSA9PiB7XG4gICAgICAgIGlmIChpc05ic3AoY2hyKSAmJiBpID4gMCAmJiBpIDwgY2hhcnMubGVuZ3RoIC0gMSAmJiBpc0NvbnRlbnQoY2hhcnNbaSAtIDFdKSAmJiBpc0NvbnRlbnQoY2hhcnNbaSArIDFdKSkge1xuICAgICAgICAgIHJldHVybiAnICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGNocjtcbiAgICAgICAgfVxuICAgICAgfSkuam9pbignJyk7XG4gICAgfTtcbiAgICBjb25zdCBub3JtYWxpemVOYnNwQXRTdGFydCA9IChyb290LCBub2RlLCBtYWtlTmJzcCkgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IG5vZGUuZGF0YTtcbiAgICAgIGNvbnN0IGZpcnN0UG9zID0gQ2FyZXRQb3NpdGlvbihub2RlLCAwKTtcbiAgICAgIGlmICghbWFrZU5ic3AgJiYgaXNOYnNwQXQodGV4dCwgMCkgJiYgIW5lZWRzVG9CZU5ic3Aocm9vdCwgZmlyc3RQb3MpKSB7XG4gICAgICAgIG5vZGUuZGF0YSA9ICcgJyArIHRleHQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChtYWtlTmJzcCAmJiBpc1doaXRlU3BhY2VBdCh0ZXh0LCAwKSAmJiBuZWVkc1RvQmVOYnNwTGVmdChyb290LCBmaXJzdFBvcykpIHtcbiAgICAgICAgbm9kZS5kYXRhID0gbmJzcCArIHRleHQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplTmJzcEluTWlkZGxlT2ZUZXh0Tm9kZSA9IG5vZGUgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IG5vZGUuZGF0YTtcbiAgICAgIGNvbnN0IG5ld1RleHQgPSBub3JtYWxpemVOYnNwTWlkZGxlKHRleHQpO1xuICAgICAgaWYgKG5ld1RleHQgIT09IHRleHQpIHtcbiAgICAgICAgbm9kZS5kYXRhID0gbmV3VGV4dDtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBub3JtYWxpemVOYnNwQXRFbmQgPSAocm9vdCwgbm9kZSwgbWFrZU5ic3ApID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSBub2RlLmRhdGE7XG4gICAgICBjb25zdCBsYXN0UG9zID0gQ2FyZXRQb3NpdGlvbihub2RlLCB0ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgaWYgKCFtYWtlTmJzcCAmJiBpc05ic3BBdCh0ZXh0LCB0ZXh0Lmxlbmd0aCAtIDEpICYmICFuZWVkc1RvQmVOYnNwKHJvb3QsIGxhc3RQb3MpKSB7XG4gICAgICAgIG5vZGUuZGF0YSA9IHRleHQuc2xpY2UoMCwgLTEpICsgJyAnO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAobWFrZU5ic3AgJiYgaXNXaGl0ZVNwYWNlQXQodGV4dCwgdGV4dC5sZW5ndGggLSAxKSAmJiBuZWVkc1RvQmVOYnNwUmlnaHQocm9vdCwgbGFzdFBvcykpIHtcbiAgICAgICAgbm9kZS5kYXRhID0gdGV4dC5zbGljZSgwLCAtMSkgKyBuYnNwO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZU5ic3BzID0gKHJvb3QsIHBvcykgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gcG9zLmNvbnRhaW5lcigpO1xuICAgICAgaWYgKCFpc1RleHQkYShjb250YWluZXIpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICBpZiAoaGFzTmJzcChwb3MpKSB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVOYnNwQXRTdGFydChyb290LCBjb250YWluZXIsIGZhbHNlKSB8fCBub3JtYWxpemVOYnNwSW5NaWRkbGVPZlRleHROb2RlKGNvbnRhaW5lcikgfHwgbm9ybWFsaXplTmJzcEF0RW5kKHJvb3QsIGNvbnRhaW5lciwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gc29tZUlmKG5vcm1hbGl6ZWQsIHBvcyk7XG4gICAgICB9IGVsc2UgaWYgKG5lZWRzVG9CZU5ic3Aocm9vdCwgcG9zKSkge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplTmJzcEF0U3RhcnQocm9vdCwgY29udGFpbmVyLCB0cnVlKSB8fCBub3JtYWxpemVOYnNwQXRFbmQocm9vdCwgY29udGFpbmVyLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHNvbWVJZihub3JtYWxpemVkLCBwb3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZU5ic3BzSW5FZGl0b3IgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgcm9vdCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgaWYgKGVkaXRvci5zZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSkge1xuICAgICAgICBub3JtYWxpemVOYnNwcyhyb290LCBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpKS5lYWNoKHBvcyA9PiB7XG4gICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcocG9zLnRvUmFuZ2UoKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBub3JtYWxpemUkMSA9IChub2RlLCBvZmZzZXQsIGNvdW50KSA9PiB7XG4gICAgICBpZiAoY291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZWxtID0gU3VnYXJFbGVtZW50LmZyb21Eb20obm9kZSk7XG4gICAgICBjb25zdCByb290ID0gYW5jZXN0b3IkNChlbG0sIGlzQmxvY2skMikuZ2V0T3IoZWxtKTtcbiAgICAgIGNvbnN0IHdoaXRlc3BhY2UgPSBub2RlLmRhdGEuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBjb3VudCk7XG4gICAgICBjb25zdCBpc0VuZE9mQ29udGVudCA9IG9mZnNldCArIGNvdW50ID49IG5vZGUuZGF0YS5sZW5ndGggJiYgbmVlZHNUb0JlTmJzcFJpZ2h0KHJvb3QsIENhcmV0UG9zaXRpb24obm9kZSwgbm9kZS5kYXRhLmxlbmd0aCkpO1xuICAgICAgY29uc3QgaXNTdGFydE9mQ29udGVudCA9IG9mZnNldCA9PT0gMCAmJiBuZWVkc1RvQmVOYnNwTGVmdChyb290LCBDYXJldFBvc2l0aW9uKG5vZGUsIDApKTtcbiAgICAgIG5vZGUucmVwbGFjZURhdGEob2Zmc2V0LCBjb3VudCwgbm9ybWFsaXplJDQod2hpdGVzcGFjZSwgNCwgaXNTdGFydE9mQ29udGVudCwgaXNFbmRPZkNvbnRlbnQpKTtcbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZVdoaXRlc3BhY2VBZnRlciA9IChub2RlLCBvZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBub2RlLmRhdGEuc2xpY2Uob2Zmc2V0KTtcbiAgICAgIGNvbnN0IHdoaXRlc3BhY2VDb3VudCA9IGNvbnRlbnQubGVuZ3RoIC0gbFRyaW0oY29udGVudCkubGVuZ3RoO1xuICAgICAgbm9ybWFsaXplJDEobm9kZSwgb2Zmc2V0LCB3aGl0ZXNwYWNlQ291bnQpO1xuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplV2hpdGVzcGFjZUJlZm9yZSA9IChub2RlLCBvZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBub2RlLmRhdGEuc2xpY2UoMCwgb2Zmc2V0KTtcbiAgICAgIGNvbnN0IHdoaXRlc3BhY2VDb3VudCA9IGNvbnRlbnQubGVuZ3RoIC0gclRyaW0oY29udGVudCkubGVuZ3RoO1xuICAgICAgbm9ybWFsaXplJDEobm9kZSwgb2Zmc2V0IC0gd2hpdGVzcGFjZUNvdW50LCB3aGl0ZXNwYWNlQ291bnQpO1xuICAgIH07XG4gICAgY29uc3QgbWVyZ2VUZXh0Tm9kZXMgPSAocHJldk5vZGUsIG5leHROb2RlLCBub3JtYWxpemVXaGl0ZXNwYWNlLCBtZXJnZVRvUHJldiA9IHRydWUpID0+IHtcbiAgICAgIGNvbnN0IHdoaXRlc3BhY2VPZmZzZXQgPSByVHJpbShwcmV2Tm9kZS5kYXRhKS5sZW5ndGg7XG4gICAgICBjb25zdCBuZXdOb2RlID0gbWVyZ2VUb1ByZXYgPyBwcmV2Tm9kZSA6IG5leHROb2RlO1xuICAgICAgY29uc3QgcmVtb3ZlTm9kZSA9IG1lcmdlVG9QcmV2ID8gbmV4dE5vZGUgOiBwcmV2Tm9kZTtcbiAgICAgIGlmIChtZXJnZVRvUHJldikge1xuICAgICAgICBuZXdOb2RlLmFwcGVuZERhdGEocmVtb3ZlTm9kZS5kYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld05vZGUuaW5zZXJ0RGF0YSgwLCByZW1vdmVOb2RlLmRhdGEpO1xuICAgICAgfVxuICAgICAgcmVtb3ZlJDUoU3VnYXJFbGVtZW50LmZyb21Eb20ocmVtb3ZlTm9kZSkpO1xuICAgICAgaWYgKG5vcm1hbGl6ZVdoaXRlc3BhY2UpIHtcbiAgICAgICAgbm9ybWFsaXplV2hpdGVzcGFjZUFmdGVyKG5ld05vZGUsIHdoaXRlc3BhY2VPZmZzZXQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld05vZGU7XG4gICAgfTtcblxuICAgIGNvbnN0IG5lZWRzUmVwb3NpdGlvbiA9IChwb3MsIGVsbSkgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gcG9zLmNvbnRhaW5lcigpO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gcG9zLm9mZnNldCgpO1xuICAgICAgcmV0dXJuICFDYXJldFBvc2l0aW9uLmlzVGV4dFBvc2l0aW9uKHBvcykgJiYgY29udGFpbmVyID09PSBlbG0ucGFyZW50Tm9kZSAmJiBvZmZzZXQgPiBDYXJldFBvc2l0aW9uLmJlZm9yZShlbG0pLm9mZnNldCgpO1xuICAgIH07XG4gICAgY29uc3QgcmVwb3NpdGlvbiA9IChlbG0sIHBvcykgPT4gbmVlZHNSZXBvc2l0aW9uKHBvcywgZWxtKSA/IENhcmV0UG9zaXRpb24ocG9zLmNvbnRhaW5lcigpLCBwb3Mub2Zmc2V0KCkgLSAxKSA6IHBvcztcbiAgICBjb25zdCBiZWZvcmVPclN0YXJ0T2YgPSBub2RlID0+IGlzVGV4dCRhKG5vZGUpID8gQ2FyZXRQb3NpdGlvbihub2RlLCAwKSA6IENhcmV0UG9zaXRpb24uYmVmb3JlKG5vZGUpO1xuICAgIGNvbnN0IGFmdGVyT3JFbmRPZiA9IG5vZGUgPT4gaXNUZXh0JGEobm9kZSkgPyBDYXJldFBvc2l0aW9uKG5vZGUsIG5vZGUuZGF0YS5sZW5ndGgpIDogQ2FyZXRQb3NpdGlvbi5hZnRlcihub2RlKTtcbiAgICBjb25zdCBnZXRQcmV2aW91c1NpYmxpbmdDYXJldFBvc2l0aW9uID0gZWxtID0+IHtcbiAgICAgIGlmIChpc0NhcmV0Q2FuZGlkYXRlJDMoZWxtLnByZXZpb3VzU2libGluZykpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoYWZ0ZXJPckVuZE9mKGVsbS5wcmV2aW91c1NpYmxpbmcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlbG0ucHJldmlvdXNTaWJsaW5nID8gbGFzdFBvc2l0aW9uSW4oZWxtLnByZXZpb3VzU2libGluZykgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXROZXh0U2libGluZ0NhcmV0UG9zaXRpb24gPSBlbG0gPT4ge1xuICAgICAgaWYgKGlzQ2FyZXRDYW5kaWRhdGUkMyhlbG0ubmV4dFNpYmxpbmcpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGJlZm9yZU9yU3RhcnRPZihlbG0ubmV4dFNpYmxpbmcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlbG0ubmV4dFNpYmxpbmcgPyBmaXJzdFBvc2l0aW9uSW4oZWxtLm5leHRTaWJsaW5nKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRDYXJldFBvc2l0aW9uQmFja3dhcmRzRnJvbUVsbSA9IChyb290RWxlbWVudCwgZWxtKSA9PiB7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShlbG0ucHJldmlvdXNTaWJsaW5nID8gZWxtLnByZXZpb3VzU2libGluZyA6IGVsbS5wYXJlbnROb2RlKS5iaW5kKG5vZGUgPT4gcHJldlBvc2l0aW9uKHJvb3RFbGVtZW50LCBDYXJldFBvc2l0aW9uLmJlZm9yZShub2RlKSkpLm9yVGh1bmsoKCkgPT4gbmV4dFBvc2l0aW9uKHJvb3RFbGVtZW50LCBDYXJldFBvc2l0aW9uLmFmdGVyKGVsbSkpKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRDYXJldFBvc2l0aW9uRm9yd2FyZHNGcm9tRWxtID0gKHJvb3RFbGVtZW50LCBlbG0pID0+IG5leHRQb3NpdGlvbihyb290RWxlbWVudCwgQ2FyZXRQb3NpdGlvbi5hZnRlcihlbG0pKS5vclRodW5rKCgpID0+IHByZXZQb3NpdGlvbihyb290RWxlbWVudCwgQ2FyZXRQb3NpdGlvbi5iZWZvcmUoZWxtKSkpO1xuICAgIGNvbnN0IGZpbmRDYXJldFBvc2l0aW9uQmFja3dhcmRzID0gKHJvb3RFbGVtZW50LCBlbG0pID0+IGdldFByZXZpb3VzU2libGluZ0NhcmV0UG9zaXRpb24oZWxtKS5vclRodW5rKCgpID0+IGdldE5leHRTaWJsaW5nQ2FyZXRQb3NpdGlvbihlbG0pKS5vclRodW5rKCgpID0+IGZpbmRDYXJldFBvc2l0aW9uQmFja3dhcmRzRnJvbUVsbShyb290RWxlbWVudCwgZWxtKSk7XG4gICAgY29uc3QgZmluZENhcmV0UG9zaXRpb25Gb3J3YXJkID0gKHJvb3RFbGVtZW50LCBlbG0pID0+IGdldE5leHRTaWJsaW5nQ2FyZXRQb3NpdGlvbihlbG0pLm9yVGh1bmsoKCkgPT4gZ2V0UHJldmlvdXNTaWJsaW5nQ2FyZXRQb3NpdGlvbihlbG0pKS5vclRodW5rKCgpID0+IGZpbmRDYXJldFBvc2l0aW9uRm9yd2FyZHNGcm9tRWxtKHJvb3RFbGVtZW50LCBlbG0pKTtcbiAgICBjb25zdCBmaW5kQ2FyZXRQb3NpdGlvbiA9IChmb3J3YXJkLCByb290RWxlbWVudCwgZWxtKSA9PiBmb3J3YXJkID8gZmluZENhcmV0UG9zaXRpb25Gb3J3YXJkKHJvb3RFbGVtZW50LCBlbG0pIDogZmluZENhcmV0UG9zaXRpb25CYWNrd2FyZHMocm9vdEVsZW1lbnQsIGVsbSk7XG4gICAgY29uc3QgZmluZENhcmV0UG9zT3V0c2lkZUVsbUFmdGVyRGVsZXRlID0gKGZvcndhcmQsIHJvb3RFbGVtZW50LCBlbG0pID0+IGZpbmRDYXJldFBvc2l0aW9uKGZvcndhcmQsIHJvb3RFbGVtZW50LCBlbG0pLm1hcChjdXJyeShyZXBvc2l0aW9uLCBlbG0pKTtcbiAgICBjb25zdCBzZXRTZWxlY3Rpb24kMSA9IChlZGl0b3IsIGZvcndhcmQsIHBvcykgPT4ge1xuICAgICAgcG9zLmZvbGQoKCkgPT4ge1xuICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgIH0sIHBvcyA9PiB7XG4gICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHBvcy50b1JhbmdlKCksIGZvcndhcmQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBlcVJhd05vZGUgPSByYXdOb2RlID0+IGVsbSA9PiBlbG0uZG9tID09PSByYXdOb2RlO1xuICAgIGNvbnN0IGlzQmxvY2sgPSAoZWRpdG9yLCBlbG0pID0+IGVsbSAmJiBoYXMkMihlZGl0b3Iuc2NoZW1hLmdldEJsb2NrRWxlbWVudHMoKSwgbmFtZShlbG0pKTtcbiAgICBjb25zdCBwYWRkRW1wdHlCbG9jayA9IGVsbSA9PiB7XG4gICAgICBpZiAoaXNFbXB0eSQyKGVsbSkpIHtcbiAgICAgICAgY29uc3QgYnIgPSBTdWdhckVsZW1lbnQuZnJvbUh0bWwoJzxiciBkYXRhLW1jZS1ib2d1cz1cIjFcIj4nKTtcbiAgICAgICAgZW1wdHkoZWxtKTtcbiAgICAgICAgYXBwZW5kJDEoZWxtLCBicik7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKENhcmV0UG9zaXRpb24uYmVmb3JlKGJyLmRvbSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGRlbGV0ZU5vcm1hbGl6ZWQgPSAoZWxtLCBhZnRlckRlbGV0ZVBvc09wdCwgbm9ybWFsaXplV2hpdGVzcGFjZSkgPT4ge1xuICAgICAgY29uc3QgcHJldlRleHRPcHQgPSBwcmV2U2libGluZyhlbG0pLmZpbHRlcihpc1RleHQkYik7XG4gICAgICBjb25zdCBuZXh0VGV4dE9wdCA9IG5leHRTaWJsaW5nKGVsbSkuZmlsdGVyKGlzVGV4dCRiKTtcbiAgICAgIHJlbW92ZSQ1KGVsbSk7XG4gICAgICByZXR1cm4gbGlmdDMocHJldlRleHRPcHQsIG5leHRUZXh0T3B0LCBhZnRlckRlbGV0ZVBvc09wdCwgKHByZXYsIG5leHQsIHBvcykgPT4ge1xuICAgICAgICBjb25zdCBwcmV2Tm9kZSA9IHByZXYuZG9tLCBuZXh0Tm9kZSA9IG5leHQuZG9tO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBwcmV2Tm9kZS5kYXRhLmxlbmd0aDtcbiAgICAgICAgbWVyZ2VUZXh0Tm9kZXMocHJldk5vZGUsIG5leHROb2RlLCBub3JtYWxpemVXaGl0ZXNwYWNlKTtcbiAgICAgICAgcmV0dXJuIHBvcy5jb250YWluZXIoKSA9PT0gbmV4dE5vZGUgPyBDYXJldFBvc2l0aW9uKHByZXZOb2RlLCBvZmZzZXQpIDogcG9zO1xuICAgICAgfSkub3JUaHVuaygoKSA9PiB7XG4gICAgICAgIGlmIChub3JtYWxpemVXaGl0ZXNwYWNlKSB7XG4gICAgICAgICAgcHJldlRleHRPcHQuZWFjaChlbG0gPT4gbm9ybWFsaXplV2hpdGVzcGFjZUJlZm9yZShlbG0uZG9tLCBlbG0uZG9tLmxlbmd0aCkpO1xuICAgICAgICAgIG5leHRUZXh0T3B0LmVhY2goZWxtID0+IG5vcm1hbGl6ZVdoaXRlc3BhY2VBZnRlcihlbG0uZG9tLCAwKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFmdGVyRGVsZXRlUG9zT3B0O1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBpc0lubGluZUVsZW1lbnQgPSAoZWRpdG9yLCBlbGVtZW50KSA9PiBoYXMkMihlZGl0b3Iuc2NoZW1hLmdldFRleHRJbmxpbmVFbGVtZW50cygpLCBuYW1lKGVsZW1lbnQpKTtcbiAgICBjb25zdCBkZWxldGVFbGVtZW50JDIgPSAoZWRpdG9yLCBmb3J3YXJkLCBlbG0sIG1vdmVDYXJldCA9IHRydWUpID0+IHtcbiAgICAgIGNvbnN0IGFmdGVyRGVsZXRlUG9zID0gZmluZENhcmV0UG9zT3V0c2lkZUVsbUFmdGVyRGVsZXRlKGZvcndhcmQsIGVkaXRvci5nZXRCb2R5KCksIGVsbS5kb20pO1xuICAgICAgY29uc3QgcGFyZW50QmxvY2sgPSBhbmNlc3RvciQ0KGVsbSwgY3VycnkoaXNCbG9jaywgZWRpdG9yKSwgZXFSYXdOb2RlKGVkaXRvci5nZXRCb2R5KCkpKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRBZnRlckRlbGV0ZVBvcyA9IGRlbGV0ZU5vcm1hbGl6ZWQoZWxtLCBhZnRlckRlbGV0ZVBvcywgaXNJbmxpbmVFbGVtZW50KGVkaXRvciwgZWxtKSk7XG4gICAgICBpZiAoZWRpdG9yLmRvbS5pc0VtcHR5KGVkaXRvci5nZXRCb2R5KCkpKSB7XG4gICAgICAgIGVkaXRvci5zZXRDb250ZW50KCcnKTtcbiAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRDdXJzb3JMb2NhdGlvbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50QmxvY2suYmluZChwYWRkRW1wdHlCbG9jaykuZm9sZCgoKSA9PiB7XG4gICAgICAgICAgaWYgKG1vdmVDYXJldCkge1xuICAgICAgICAgICAgc2V0U2VsZWN0aW9uJDEoZWRpdG9yLCBmb3J3YXJkLCBub3JtYWxpemVkQWZ0ZXJEZWxldGVQb3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgcGFkZFBvcyA9PiB7XG4gICAgICAgICAgaWYgKG1vdmVDYXJldCkge1xuICAgICAgICAgICAgc2V0U2VsZWN0aW9uJDEoZWRpdG9yLCBmb3J3YXJkLCBPcHRpb25hbC5zb21lKHBhZGRQb3MpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBzdHJvbmdSdGwgPSAvW1xcdTA1OTEtXFx1MDdGRlxcdUZCMUQtXFx1RkRGRlxcdUZFNzAtXFx1RkVGQ10vO1xuICAgIGNvbnN0IGhhc1N0cm9uZ1J0bCA9IHRleHQgPT4gc3Ryb25nUnRsLnRlc3QodGV4dCk7XG5cbiAgICBjb25zdCBpc0lubGluZVRhcmdldCA9IChlZGl0b3IsIGVsbSkgPT4gaXMkMShTdWdhckVsZW1lbnQuZnJvbURvbShlbG0pLCBnZXRJbmxpbmVCb3VuZGFyeVNlbGVjdG9yKGVkaXRvcikpICYmICFpc1RyYW5zcGFyZW50QmxvY2soZWRpdG9yLnNjaGVtYSwgZWxtKSAmJiBlZGl0b3IuZG9tLmlzRWRpdGFibGUoZWxtKTtcbiAgICBjb25zdCBpc1J0bCA9IGVsZW1lbnQgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgcmV0dXJuIERPTVV0aWxzLkRPTS5nZXRTdHlsZShlbGVtZW50LCAnZGlyZWN0aW9uJywgdHJ1ZSkgPT09ICdydGwnIHx8IGhhc1N0cm9uZ1J0bCgoX2EgPSBlbGVtZW50LnRleHRDb250ZW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJyk7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kSW5saW5lUGFyZW50cyA9IChpc0lubGluZVRhcmdldCwgcm9vdE5vZGUsIHBvcykgPT4gZmlsdGVyJDUoRE9NVXRpbHMuRE9NLmdldFBhcmVudHMocG9zLmNvbnRhaW5lcigpLCAnKicsIHJvb3ROb2RlKSwgaXNJbmxpbmVUYXJnZXQpO1xuICAgIGNvbnN0IGZpbmRSb290SW5saW5lID0gKGlzSW5saW5lVGFyZ2V0LCByb290Tm9kZSwgcG9zKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnRzID0gZmluZElubGluZVBhcmVudHMoaXNJbmxpbmVUYXJnZXQsIHJvb3ROb2RlLCBwb3MpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20ocGFyZW50c1twYXJlbnRzLmxlbmd0aCAtIDFdKTtcbiAgICB9O1xuICAgIGNvbnN0IGhhc1NhbWVQYXJlbnRCbG9jayA9IChyb290Tm9kZSwgbm9kZTEsIG5vZGUyKSA9PiB7XG4gICAgICBjb25zdCBibG9jazEgPSBnZXRQYXJlbnRCbG9jayQzKG5vZGUxLCByb290Tm9kZSk7XG4gICAgICBjb25zdCBibG9jazIgPSBnZXRQYXJlbnRCbG9jayQzKG5vZGUyLCByb290Tm9kZSk7XG4gICAgICByZXR1cm4gaXNOb25OdWxsYWJsZShibG9jazEpICYmIGJsb2NrMSA9PT0gYmxvY2syO1xuICAgIH07XG4gICAgY29uc3QgaXNBdFp3c3AgPSBwb3MgPT4gaXNCZWZvcmVJbmxpbmUocG9zKSB8fCBpc0FmdGVySW5saW5lKHBvcyk7XG4gICAgY29uc3Qgbm9ybWFsaXplUG9zaXRpb24gPSAoZm9yd2FyZCwgcG9zKSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBwb3MuY29udGFpbmVyKCksIG9mZnNldCA9IHBvcy5vZmZzZXQoKTtcbiAgICAgIGlmIChmb3J3YXJkKSB7XG4gICAgICAgIGlmIChpc0NhcmV0Q29udGFpbmVySW5saW5lKGNvbnRhaW5lcikpIHtcbiAgICAgICAgICBpZiAoaXNUZXh0JGEoY29udGFpbmVyLm5leHRTaWJsaW5nKSkge1xuICAgICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24oY29udGFpbmVyLm5leHRTaWJsaW5nLCAwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24uYWZ0ZXIoY29udGFpbmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGlzQmVmb3JlSW5saW5lKHBvcykgPyBDYXJldFBvc2l0aW9uKGNvbnRhaW5lciwgb2Zmc2V0ICsgMSkgOiBwb3M7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc0NhcmV0Q29udGFpbmVySW5saW5lKGNvbnRhaW5lcikpIHtcbiAgICAgICAgICBpZiAoaXNUZXh0JGEoY29udGFpbmVyLnByZXZpb3VzU2libGluZykpIHtcbiAgICAgICAgICAgIHJldHVybiBDYXJldFBvc2l0aW9uKGNvbnRhaW5lci5wcmV2aW91c1NpYmxpbmcsIGNvbnRhaW5lci5wcmV2aW91c1NpYmxpbmcuZGF0YS5sZW5ndGgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gQ2FyZXRQb3NpdGlvbi5iZWZvcmUoY29udGFpbmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGlzQWZ0ZXJJbmxpbmUocG9zKSA/IENhcmV0UG9zaXRpb24oY29udGFpbmVyLCBvZmZzZXQgLSAxKSA6IHBvcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplRm9yd2FyZHMgPSBjdXJyeShub3JtYWxpemVQb3NpdGlvbiwgdHJ1ZSk7XG4gICAgY29uc3Qgbm9ybWFsaXplQmFja3dhcmRzID0gY3Vycnkobm9ybWFsaXplUG9zaXRpb24sIGZhbHNlKTtcblxuICAgIGNvbnN0IGV4ZWNDb21tYW5kSWdub3JlSW5wdXRFdmVudHMgPSAoZWRpdG9yLCBjb21tYW5kKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dEJsb2NrZXIgPSBlID0+IGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICBlZGl0b3Iub24oJ2JlZm9yZWlucHV0IGlucHV0JywgaW5wdXRCbG9ja2VyLCB0cnVlKTtcbiAgICAgIGVkaXRvci5nZXREb2MoKS5leGVjQ29tbWFuZChjb21tYW5kKTtcbiAgICAgIGVkaXRvci5vZmYoJ2JlZm9yZWlucHV0IGlucHV0JywgaW5wdXRCbG9ja2VyKTtcbiAgICB9O1xuICAgIGNvbnN0IGV4ZWNFZGl0b3JEZWxldGVDb21tYW5kID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnZGVsZXRlJyk7XG4gICAgfTtcbiAgICBjb25zdCBleGVjTmF0aXZlRGVsZXRlQ29tbWFuZCA9IGVkaXRvciA9PiBleGVjQ29tbWFuZElnbm9yZUlucHV0RXZlbnRzKGVkaXRvciwgJ0RlbGV0ZScpO1xuICAgIGNvbnN0IGV4ZWNOYXRpdmVGb3J3YXJkRGVsZXRlQ29tbWFuZCA9IGVkaXRvciA9PiBleGVjQ29tbWFuZElnbm9yZUlucHV0RXZlbnRzKGVkaXRvciwgJ0ZvcndhcmREZWxldGUnKTtcbiAgICBjb25zdCBpc0JlZm9yZVJvb3QgPSByb290Tm9kZSA9PiBlbG0gPT4gaXMkMihwYXJlbnQoZWxtKSwgcm9vdE5vZGUsIGVxKTtcbiAgICBjb25zdCBpc1RleHRCbG9ja09yTGlzdEl0ZW0gPSBlbGVtZW50ID0+IGlzVGV4dEJsb2NrJDIoZWxlbWVudCkgfHwgaXNMaXN0SXRlbSQxKGVsZW1lbnQpO1xuICAgIGNvbnN0IGdldFBhcmVudEJsb2NrJDIgPSAocm9vdE5vZGUsIGVsbSkgPT4ge1xuICAgICAgaWYgKGNvbnRhaW5zKHJvb3ROb2RlLCBlbG0pKSB7XG4gICAgICAgIHJldHVybiBjbG9zZXN0JDQoZWxtLCBpc1RleHRCbG9ja09yTGlzdEl0ZW0sIGlzQmVmb3JlUm9vdChyb290Tm9kZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHBhZGRFbXB0eUJvZHkgPSAoZWRpdG9yLCBtb3ZlU2VsZWN0aW9uID0gdHJ1ZSkgPT4ge1xuICAgICAgaWYgKGVkaXRvci5kb20uaXNFbXB0eShlZGl0b3IuZ2V0Qm9keSgpKSkge1xuICAgICAgICBlZGl0b3Iuc2V0Q29udGVudCgnJywgeyBub19zZWxlY3Rpb246ICFtb3ZlU2VsZWN0aW9uIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgd2lsbERlbGV0ZUxhc3RQb3NpdGlvbkluRWxlbWVudCA9IChmb3J3YXJkLCBmcm9tUG9zLCBlbG0pID0+IGxpZnQyKGZpcnN0UG9zaXRpb25JbihlbG0pLCBsYXN0UG9zaXRpb25JbihlbG0pLCAoZmlyc3RQb3MsIGxhc3RQb3MpID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRGaXJzdFBvcyA9IG5vcm1hbGl6ZVBvc2l0aW9uKHRydWUsIGZpcnN0UG9zKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRMYXN0UG9zID0gbm9ybWFsaXplUG9zaXRpb24oZmFsc2UsIGxhc3RQb3MpO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEZyb21Qb3MgPSBub3JtYWxpemVQb3NpdGlvbihmYWxzZSwgZnJvbVBvcyk7XG4gICAgICBpZiAoZm9yd2FyZCkge1xuICAgICAgICByZXR1cm4gbmV4dFBvc2l0aW9uKGVsbSwgbm9ybWFsaXplZEZyb21Qb3MpLmV4aXN0cyhuZXh0UG9zID0+IG5leHRQb3MuaXNFcXVhbChub3JtYWxpemVkTGFzdFBvcykgJiYgZnJvbVBvcy5pc0VxdWFsKG5vcm1hbGl6ZWRGaXJzdFBvcykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHByZXZQb3NpdGlvbihlbG0sIG5vcm1hbGl6ZWRGcm9tUG9zKS5leGlzdHMocHJldlBvcyA9PiBwcmV2UG9zLmlzRXF1YWwobm9ybWFsaXplZEZpcnN0UG9zKSAmJiBmcm9tUG9zLmlzRXF1YWwobm9ybWFsaXplZExhc3RQb3MpKTtcbiAgICAgIH1cbiAgICB9KS5nZXRPcih0cnVlKTtcbiAgICBjb25zdCBmcmVlZmFsbFJ0bCA9IHJvb3QgPT4ge1xuICAgICAgY29uc3QgY2hpbGQgPSBpc0NvbW1lbnQkMShyb290KSA/IHByZXZTaWJsaW5nKHJvb3QpIDogbGFzdENoaWxkKHJvb3QpO1xuICAgICAgcmV0dXJuIGNoaWxkLmJpbmQoZnJlZWZhbGxSdGwpLm9yVGh1bmsoKCkgPT4gT3B0aW9uYWwuc29tZShyb290KSk7XG4gICAgfTtcbiAgICBjb25zdCBkZWxldGVSYW5nZUNvbnRlbnRzID0gKGVkaXRvciwgcm5nLCByb290LCBtb3ZlU2VsZWN0aW9uID0gdHJ1ZSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgcm5nLmRlbGV0ZUNvbnRlbnRzKCk7XG4gICAgICBjb25zdCBsYXN0Tm9kZSA9IGZyZWVmYWxsUnRsKHJvb3QpLmdldE9yKHJvb3QpO1xuICAgICAgY29uc3QgbGFzdEJsb2NrID0gU3VnYXJFbGVtZW50LmZyb21Eb20oKF9hID0gZWRpdG9yLmRvbS5nZXRQYXJlbnQobGFzdE5vZGUuZG9tLCBlZGl0b3IuZG9tLmlzQmxvY2spKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiByb290LmRvbSk7XG4gICAgICBpZiAobGFzdEJsb2NrLmRvbSA9PT0gZWRpdG9yLmdldEJvZHkoKSkge1xuICAgICAgICBwYWRkRW1wdHlCb2R5KGVkaXRvciwgbW92ZVNlbGVjdGlvbik7XG4gICAgICB9IGVsc2UgaWYgKGlzRW1wdHkkMihsYXN0QmxvY2spKSB7XG4gICAgICAgIGZpbGxXaXRoUGFkZGluZ0JyKGxhc3RCbG9jayk7XG4gICAgICAgIGlmIChtb3ZlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRDdXJzb3JMb2NhdGlvbihsYXN0QmxvY2suZG9tLCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFlcShyb290LCBsYXN0QmxvY2spKSB7XG4gICAgICAgIGNvbnN0IGFkZGl0aW9uYWxDbGVhbnVwTm9kZXMgPSBpcyQyKHBhcmVudChsYXN0QmxvY2spLCByb290KSA/IFtdIDogc2libGluZ3MobGFzdEJsb2NrKTtcbiAgICAgICAgZWFjaCRlKGFkZGl0aW9uYWxDbGVhbnVwTm9kZXMuY29uY2F0KGNoaWxkcmVuJDEocm9vdCkpLCBub2RlID0+IHtcbiAgICAgICAgICBpZiAoIWVxKG5vZGUsIGxhc3RCbG9jaykgJiYgIWNvbnRhaW5zKG5vZGUsIGxhc3RCbG9jaykgJiYgaXNFbXB0eSQyKG5vZGUpKSB7XG4gICAgICAgICAgICByZW1vdmUkNShub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBpc1Jvb3RGcm9tRWxlbWVudCA9IHJvb3QgPT4gY3VyID0+IGVxKHJvb3QsIGN1cik7XG4gICAgY29uc3QgZ2V0VGFibGVDZWxscyA9IHRhYmxlID0+IGRlc2NlbmRhbnRzKHRhYmxlLCAndGQsdGgnKTtcbiAgICBjb25zdCBnZXRUYWJsZURldGFpbHNGcm9tUmFuZ2UgPSAocm5nLCBpc1Jvb3QpID0+IHtcbiAgICAgIGNvbnN0IGdldFRhYmxlID0gbm9kZSA9PiBnZXRDbG9zZXN0VGFibGUoU3VnYXJFbGVtZW50LmZyb21Eb20obm9kZSksIGlzUm9vdCk7XG4gICAgICBjb25zdCBzdGFydFRhYmxlID0gZ2V0VGFibGUocm5nLnN0YXJ0Q29udGFpbmVyKTtcbiAgICAgIGNvbnN0IGVuZFRhYmxlID0gZ2V0VGFibGUocm5nLmVuZENvbnRhaW5lcik7XG4gICAgICBjb25zdCBpc1N0YXJ0SW5UYWJsZSA9IHN0YXJ0VGFibGUuaXNTb21lKCk7XG4gICAgICBjb25zdCBpc0VuZEluVGFibGUgPSBlbmRUYWJsZS5pc1NvbWUoKTtcbiAgICAgIGNvbnN0IGlzU2FtZVRhYmxlID0gbGlmdDIoc3RhcnRUYWJsZSwgZW5kVGFibGUsIGVxKS5nZXRPcihmYWxzZSk7XG4gICAgICBjb25zdCBpc011bHRpVGFibGUgPSAhaXNTYW1lVGFibGUgJiYgaXNTdGFydEluVGFibGUgJiYgaXNFbmRJblRhYmxlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnRUYWJsZSxcbiAgICAgICAgZW5kVGFibGUsXG4gICAgICAgIGlzU3RhcnRJblRhYmxlLFxuICAgICAgICBpc0VuZEluVGFibGUsXG4gICAgICAgIGlzU2FtZVRhYmxlLFxuICAgICAgICBpc011bHRpVGFibGVcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHRhYmxlQ2VsbFJuZyA9IChzdGFydCwgZW5kKSA9PiAoe1xuICAgICAgc3RhcnQsXG4gICAgICBlbmRcbiAgICB9KTtcbiAgICBjb25zdCB0YWJsZVNlbGVjdGlvbiA9IChybmcsIHRhYmxlLCBjZWxscykgPT4gKHtcbiAgICAgIHJuZyxcbiAgICAgIHRhYmxlLFxuICAgICAgY2VsbHNcbiAgICB9KTtcbiAgICBjb25zdCBkZWxldGVBY3Rpb24gPSBBZHQuZ2VuZXJhdGUoW1xuICAgICAge1xuICAgICAgICBzaW5nbGVDZWxsVGFibGU6IFtcbiAgICAgICAgICAncm5nJyxcbiAgICAgICAgICAnY2VsbCdcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHsgZnVsbFRhYmxlOiBbJ3RhYmxlJ10gfSxcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFRhYmxlOiBbXG4gICAgICAgICAgJ2NlbGxzJyxcbiAgICAgICAgICAnb3V0c2lkZURldGFpbHMnXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG11bHRpVGFibGU6IFtcbiAgICAgICAgICAnc3RhcnRUYWJsZUNlbGxzJyxcbiAgICAgICAgICAnZW5kVGFibGVDZWxscycsXG4gICAgICAgICAgJ2JldHdlZW5SbmcnXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdKTtcbiAgICBjb25zdCBnZXRDbG9zZXN0Q2VsbCQxID0gKGNvbnRhaW5lciwgaXNSb290KSA9PiBjbG9zZXN0JDMoU3VnYXJFbGVtZW50LmZyb21Eb20oY29udGFpbmVyKSwgJ3RkLHRoJywgaXNSb290KTtcbiAgICBjb25zdCBpc0V4cGFuZGVkQ2VsbFJuZyA9IGNlbGxSbmcgPT4gIWVxKGNlbGxSbmcuc3RhcnQsIGNlbGxSbmcuZW5kKTtcbiAgICBjb25zdCBnZXRUYWJsZUZyb21DZWxsUm5nID0gKGNlbGxSbmcsIGlzUm9vdCkgPT4gZ2V0Q2xvc2VzdFRhYmxlKGNlbGxSbmcuc3RhcnQsIGlzUm9vdCkuYmluZChzdGFydFBhcmVudFRhYmxlID0+IGdldENsb3Nlc3RUYWJsZShjZWxsUm5nLmVuZCwgaXNSb290KS5iaW5kKGVuZFBhcmVudFRhYmxlID0+IHNvbWVJZihlcShzdGFydFBhcmVudFRhYmxlLCBlbmRQYXJlbnRUYWJsZSksIHN0YXJ0UGFyZW50VGFibGUpKSk7XG4gICAgY29uc3QgaXNTaW5nbGVDZWxsVGFibGUgPSAoY2VsbFJuZywgaXNSb290KSA9PiAhaXNFeHBhbmRlZENlbGxSbmcoY2VsbFJuZykgJiYgZ2V0VGFibGVGcm9tQ2VsbFJuZyhjZWxsUm5nLCBpc1Jvb3QpLmV4aXN0cyh0YWJsZSA9PiB7XG4gICAgICBjb25zdCByb3dzID0gdGFibGUuZG9tLnJvd3M7XG4gICAgICByZXR1cm4gcm93cy5sZW5ndGggPT09IDEgJiYgcm93c1swXS5jZWxscy5sZW5ndGggPT09IDE7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0Q2VsbFJuZyA9IChybmcsIGlzUm9vdCkgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRDZWxsID0gZ2V0Q2xvc2VzdENlbGwkMShybmcuc3RhcnRDb250YWluZXIsIGlzUm9vdCk7XG4gICAgICBjb25zdCBlbmRDZWxsID0gZ2V0Q2xvc2VzdENlbGwkMShybmcuZW5kQ29udGFpbmVyLCBpc1Jvb3QpO1xuICAgICAgcmV0dXJuIGxpZnQyKHN0YXJ0Q2VsbCwgZW5kQ2VsbCwgdGFibGVDZWxsUm5nKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldENlbGxSYW5nZUZyb21TdGFydFRhYmxlID0gaXNSb290ID0+IHN0YXJ0Q2VsbCA9PiBnZXRDbG9zZXN0VGFibGUoc3RhcnRDZWxsLCBpc1Jvb3QpLmJpbmQodGFibGUgPT4gbGFzdCQzKGdldFRhYmxlQ2VsbHModGFibGUpKS5tYXAoZW5kQ2VsbCA9PiB0YWJsZUNlbGxSbmcoc3RhcnRDZWxsLCBlbmRDZWxsKSkpO1xuICAgIGNvbnN0IGdldENlbGxSYW5nZUZyb21FbmRUYWJsZSA9IGlzUm9vdCA9PiBlbmRDZWxsID0+IGdldENsb3Nlc3RUYWJsZShlbmRDZWxsLCBpc1Jvb3QpLmJpbmQodGFibGUgPT4gaGVhZChnZXRUYWJsZUNlbGxzKHRhYmxlKSkubWFwKHN0YXJ0Q2VsbCA9PiB0YWJsZUNlbGxSbmcoc3RhcnRDZWxsLCBlbmRDZWxsKSkpO1xuICAgIGNvbnN0IGdldFRhYmxlU2VsZWN0aW9uRnJvbUNlbGxSbmcgPSBpc1Jvb3QgPT4gY2VsbFJuZyA9PiBnZXRUYWJsZUZyb21DZWxsUm5nKGNlbGxSbmcsIGlzUm9vdCkubWFwKHRhYmxlID0+IHRhYmxlU2VsZWN0aW9uKGNlbGxSbmcsIHRhYmxlLCBnZXRUYWJsZUNlbGxzKHRhYmxlKSkpO1xuICAgIGNvbnN0IGdldFRhYmxlU2VsZWN0aW9ucyA9IChjZWxsUm5nLCBzZWxlY3Rpb25EZXRhaWxzLCBybmcsIGlzUm9vdCkgPT4ge1xuICAgICAgaWYgKHJuZy5jb2xsYXBzZWQgfHwgIWNlbGxSbmcuZm9yYWxsKGlzRXhwYW5kZWRDZWxsUm5nKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb25EZXRhaWxzLmlzU2FtZVRhYmxlKSB7XG4gICAgICAgIGNvbnN0IHNhbWVUYWJsZVNlbGVjdGlvbiA9IGNlbGxSbmcuYmluZChnZXRUYWJsZVNlbGVjdGlvbkZyb21DZWxsUm5nKGlzUm9vdCkpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgc3RhcnQ6IHNhbWVUYWJsZVNlbGVjdGlvbixcbiAgICAgICAgICBlbmQ6IHNhbWVUYWJsZVNlbGVjdGlvblxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IGdldENsb3Nlc3RDZWxsJDEocm5nLnN0YXJ0Q29udGFpbmVyLCBpc1Jvb3QpO1xuICAgICAgICBjb25zdCBlbmRDZWxsID0gZ2V0Q2xvc2VzdENlbGwkMShybmcuZW5kQ29udGFpbmVyLCBpc1Jvb3QpO1xuICAgICAgICBjb25zdCBzdGFydFRhYmxlU2VsZWN0aW9uID0gc3RhcnRDZWxsLmJpbmQoZ2V0Q2VsbFJhbmdlRnJvbVN0YXJ0VGFibGUoaXNSb290KSkuYmluZChnZXRUYWJsZVNlbGVjdGlvbkZyb21DZWxsUm5nKGlzUm9vdCkpO1xuICAgICAgICBjb25zdCBlbmRUYWJsZVNlbGVjdGlvbiA9IGVuZENlbGwuYmluZChnZXRDZWxsUmFuZ2VGcm9tRW5kVGFibGUoaXNSb290KSkuYmluZChnZXRUYWJsZVNlbGVjdGlvbkZyb21DZWxsUm5nKGlzUm9vdCkpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgc3RhcnQ6IHN0YXJ0VGFibGVTZWxlY3Rpb24sXG4gICAgICAgICAgZW5kOiBlbmRUYWJsZVNlbGVjdGlvblxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdldENlbGxJbmRleCA9IChjZWxscywgY2VsbCkgPT4gZmluZEluZGV4JDIoY2VsbHMsIHggPT4gZXEoeCwgY2VsbCkpO1xuICAgIGNvbnN0IGdldFNlbGVjdGVkQ2VsbHMgPSB0YWJsZVNlbGVjdGlvbiA9PiBsaWZ0MihnZXRDZWxsSW5kZXgodGFibGVTZWxlY3Rpb24uY2VsbHMsIHRhYmxlU2VsZWN0aW9uLnJuZy5zdGFydCksIGdldENlbGxJbmRleCh0YWJsZVNlbGVjdGlvbi5jZWxscywgdGFibGVTZWxlY3Rpb24ucm5nLmVuZCksIChzdGFydEluZGV4LCBlbmRJbmRleCkgPT4gdGFibGVTZWxlY3Rpb24uY2VsbHMuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXggKyAxKSk7XG4gICAgY29uc3QgaXNTaW5nbGVDZWxsVGFibGVDb250ZW50U2VsZWN0ZWQgPSAob3B0Q2VsbFJuZywgcm5nLCBpc1Jvb3QpID0+IG9wdENlbGxSbmcuZXhpc3RzKGNlbGxSbmcgPT4gaXNTaW5nbGVDZWxsVGFibGUoY2VsbFJuZywgaXNSb290KSAmJiBoYXNBbGxDb250ZW50c1NlbGVjdGVkKGNlbGxSbmcuc3RhcnQsIHJuZykpO1xuICAgIGNvbnN0IHVuc2VsZWN0Q2VsbHMgPSAocm5nLCBzZWxlY3Rpb25EZXRhaWxzKSA9PiB7XG4gICAgICBjb25zdCB7c3RhcnRUYWJsZSwgZW5kVGFibGV9ID0gc2VsZWN0aW9uRGV0YWlscztcbiAgICAgIGNvbnN0IG90aGVyQ29udGVudFJuZyA9IHJuZy5jbG9uZVJhbmdlKCk7XG4gICAgICBzdGFydFRhYmxlLmVhY2godGFibGUgPT4gb3RoZXJDb250ZW50Um5nLnNldFN0YXJ0QWZ0ZXIodGFibGUuZG9tKSk7XG4gICAgICBlbmRUYWJsZS5lYWNoKHRhYmxlID0+IG90aGVyQ29udGVudFJuZy5zZXRFbmRCZWZvcmUodGFibGUuZG9tKSk7XG4gICAgICByZXR1cm4gb3RoZXJDb250ZW50Um5nO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlU2luZ2xlVGFibGUgPSAoY2VsbFJuZywgc2VsZWN0aW9uRGV0YWlscywgcm5nLCBpc1Jvb3QpID0+IGdldFRhYmxlU2VsZWN0aW9ucyhjZWxsUm5nLCBzZWxlY3Rpb25EZXRhaWxzLCBybmcsIGlzUm9vdCkuYmluZCgoe3N0YXJ0LCBlbmR9KSA9PiBzdGFydC5vcihlbmQpKS5iaW5kKHRhYmxlU2VsZWN0aW9uID0+IHtcbiAgICAgIGNvbnN0IHtpc1NhbWVUYWJsZX0gPSBzZWxlY3Rpb25EZXRhaWxzO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxscyA9IGdldFNlbGVjdGVkQ2VsbHModGFibGVTZWxlY3Rpb24pLmdldE9yKFtdKTtcbiAgICAgIGlmIChpc1NhbWVUYWJsZSAmJiB0YWJsZVNlbGVjdGlvbi5jZWxscy5sZW5ndGggPT09IHNlbGVjdGVkQ2VsbHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGRlbGV0ZUFjdGlvbi5mdWxsVGFibGUodGFibGVTZWxlY3Rpb24udGFibGUpKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRDZWxscy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChpc1NhbWVUYWJsZSkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGRlbGV0ZUFjdGlvbi5wYXJ0aWFsVGFibGUoc2VsZWN0ZWRDZWxscywgT3B0aW9uYWwubm9uZSgpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgb3RoZXJDb250ZW50Um5nID0gdW5zZWxlY3RDZWxscyhybmcsIHNlbGVjdGlvbkRldGFpbHMpO1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGRlbGV0ZUFjdGlvbi5wYXJ0aWFsVGFibGUoc2VsZWN0ZWRDZWxscywgT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgICAuLi5zZWxlY3Rpb25EZXRhaWxzLFxuICAgICAgICAgICAgcm5nOiBvdGhlckNvbnRlbnRSbmdcbiAgICAgICAgICB9KSkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZU11bHRpVGFibGUgPSAoY2VsbFJuZywgc2VsZWN0aW9uRGV0YWlscywgcm5nLCBpc1Jvb3QpID0+IGdldFRhYmxlU2VsZWN0aW9ucyhjZWxsUm5nLCBzZWxlY3Rpb25EZXRhaWxzLCBybmcsIGlzUm9vdCkuYmluZCgoe3N0YXJ0LCBlbmR9KSA9PiB7XG4gICAgICBjb25zdCBzdGFydFRhYmxlU2VsZWN0ZWRDZWxscyA9IHN0YXJ0LmJpbmQoZ2V0U2VsZWN0ZWRDZWxscykuZ2V0T3IoW10pO1xuICAgICAgY29uc3QgZW5kVGFibGVTZWxlY3RlZENlbGxzID0gZW5kLmJpbmQoZ2V0U2VsZWN0ZWRDZWxscykuZ2V0T3IoW10pO1xuICAgICAgaWYgKHN0YXJ0VGFibGVTZWxlY3RlZENlbGxzLmxlbmd0aCA+IDAgJiYgZW5kVGFibGVTZWxlY3RlZENlbGxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3Qgb3RoZXJDb250ZW50Um5nID0gdW5zZWxlY3RDZWxscyhybmcsIHNlbGVjdGlvbkRldGFpbHMpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShkZWxldGVBY3Rpb24ubXVsdGlUYWJsZShzdGFydFRhYmxlU2VsZWN0ZWRDZWxscywgZW5kVGFibGVTZWxlY3RlZENlbGxzLCBvdGhlckNvbnRlbnRSbmcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0QWN0aW9uRnJvbVJhbmdlID0gKHJvb3QsIHJuZykgPT4ge1xuICAgICAgY29uc3QgaXNSb290ID0gaXNSb290RnJvbUVsZW1lbnQocm9vdCk7XG4gICAgICBjb25zdCBvcHRDZWxsUm5nID0gZ2V0Q2VsbFJuZyhybmcsIGlzUm9vdCk7XG4gICAgICBjb25zdCBzZWxlY3Rpb25EZXRhaWxzID0gZ2V0VGFibGVEZXRhaWxzRnJvbVJhbmdlKHJuZywgaXNSb290KTtcbiAgICAgIGlmIChpc1NpbmdsZUNlbGxUYWJsZUNvbnRlbnRTZWxlY3RlZChvcHRDZWxsUm5nLCBybmcsIGlzUm9vdCkpIHtcbiAgICAgICAgcmV0dXJuIG9wdENlbGxSbmcubWFwKGNlbGxSbmcgPT4gZGVsZXRlQWN0aW9uLnNpbmdsZUNlbGxUYWJsZShybmcsIGNlbGxSbmcuc3RhcnQpKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uRGV0YWlscy5pc011bHRpVGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZU11bHRpVGFibGUob3B0Q2VsbFJuZywgc2VsZWN0aW9uRGV0YWlscywgcm5nLCBpc1Jvb3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVNpbmdsZVRhYmxlKG9wdENlbGxSbmcsIHNlbGVjdGlvbkRldGFpbHMsIHJuZywgaXNSb290KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY2xlYW5DZWxscyA9IGNlbGxzID0+IGVhY2gkZShjZWxscywgY2VsbCA9PiB7XG4gICAgICByZW1vdmUkYShjZWxsLCAnY29udGVudGVkaXRhYmxlJyk7XG4gICAgICBmaWxsV2l0aFBhZGRpbmdCcihjZWxsKTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRPdXRzaWRlQmxvY2sgPSAoZWRpdG9yLCBjb250YWluZXIpID0+IE9wdGlvbmFsLmZyb20oZWRpdG9yLmRvbS5nZXRQYXJlbnQoY29udGFpbmVyLCBlZGl0b3IuZG9tLmlzQmxvY2spKS5tYXAoU3VnYXJFbGVtZW50LmZyb21Eb20pO1xuICAgIGNvbnN0IGhhbmRsZUVtcHR5QmxvY2sgPSAoZWRpdG9yLCBzdGFydEluVGFibGUsIGVtcHR5QmxvY2spID0+IHtcbiAgICAgIGVtcHR5QmxvY2suZWFjaChibG9jayA9PiB7XG4gICAgICAgIGlmIChzdGFydEluVGFibGUpIHtcbiAgICAgICAgICByZW1vdmUkNShibG9jayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsbFdpdGhQYWRkaW5nQnIoYmxvY2spO1xuICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Q3Vyc29yTG9jYXRpb24oYmxvY2suZG9tLCAwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBkZWxldGVDb250ZW50SW5zaWRlQ2VsbCA9IChlZGl0b3IsIGNlbGwsIHJuZywgaXNGaXJzdENlbGxJblNlbGVjdGlvbikgPT4ge1xuICAgICAgY29uc3QgaW5zaWRlVGFibGVSbmcgPSBybmcuY2xvbmVSYW5nZSgpO1xuICAgICAgaWYgKGlzRmlyc3RDZWxsSW5TZWxlY3Rpb24pIHtcbiAgICAgICAgaW5zaWRlVGFibGVSbmcuc2V0U3RhcnQocm5nLnN0YXJ0Q29udGFpbmVyLCBybmcuc3RhcnRPZmZzZXQpO1xuICAgICAgICBpbnNpZGVUYWJsZVJuZy5zZXRFbmRBZnRlcihjZWxsLmRvbS5sYXN0Q2hpbGQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5zaWRlVGFibGVSbmcuc2V0U3RhcnRCZWZvcmUoY2VsbC5kb20uZmlyc3RDaGlsZCk7XG4gICAgICAgIGluc2lkZVRhYmxlUm5nLnNldEVuZChybmcuZW5kQ29udGFpbmVyLCBybmcuZW5kT2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZUNlbGxDb250ZW50cyhlZGl0b3IsIGluc2lkZVRhYmxlUm5nLCBjZWxsLCBmYWxzZSkuZWFjaChhY3Rpb24gPT4gYWN0aW9uKCkpO1xuICAgIH07XG4gICAgY29uc3QgY29sbGFwc2VBbmRSZXN0b3JlQ2VsbFNlbGVjdGlvbiA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZENlbGxzID0gZ2V0Q2VsbHNGcm9tRWRpdG9yKGVkaXRvcik7XG4gICAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKSk7XG4gICAgICBpZiAoaXNUYWJsZUNlbGwkMyhzZWxlY3RlZE5vZGUuZG9tKSAmJiBpc0VtcHR5JDIoc2VsZWN0ZWROb2RlKSkge1xuICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldEN1cnNvckxvY2F0aW9uKHNlbGVjdGVkTm9kZS5kb20sIDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5jb2xsYXBzZSh0cnVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzZWxlY3RlZENlbGxzLmxlbmd0aCA+IDEgJiYgZXhpc3RzKHNlbGVjdGVkQ2VsbHMsIGNlbGwgPT4gZXEoY2VsbCwgc2VsZWN0ZWROb2RlKSkpIHtcbiAgICAgICAgc2V0JDMoc2VsZWN0ZWROb2RlLCAnZGF0YS1tY2Utc2VsZWN0ZWQnLCAnMScpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZW1wdHlTaW5nbGVUYWJsZUNlbGxzID0gKGVkaXRvciwgY2VsbHMsIG91dHNpZGVEZXRhaWxzKSA9PiBPcHRpb25hbC5zb21lKCgpID0+IHtcbiAgICAgIGNvbnN0IGVkaXRvclJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBjb25zdCBjZWxsc1RvQ2xlYW4gPSBvdXRzaWRlRGV0YWlscy5iaW5kKCh7cm5nLCBpc1N0YXJ0SW5UYWJsZX0pID0+IHtcbiAgICAgICAgY29uc3Qgb3V0c2lkZUJsb2NrID0gZ2V0T3V0c2lkZUJsb2NrKGVkaXRvciwgaXNTdGFydEluVGFibGUgPyBybmcuZW5kQ29udGFpbmVyIDogcm5nLnN0YXJ0Q29udGFpbmVyKTtcbiAgICAgICAgcm5nLmRlbGV0ZUNvbnRlbnRzKCk7XG4gICAgICAgIGhhbmRsZUVtcHR5QmxvY2soZWRpdG9yLCBpc1N0YXJ0SW5UYWJsZSwgb3V0c2lkZUJsb2NrLmZpbHRlcihpc0VtcHR5JDIpKTtcbiAgICAgICAgY29uc3QgZW5kUG9pbnRDZWxsID0gaXNTdGFydEluVGFibGUgPyBjZWxsc1swXSA6IGNlbGxzW2NlbGxzLmxlbmd0aCAtIDFdO1xuICAgICAgICBkZWxldGVDb250ZW50SW5zaWRlQ2VsbChlZGl0b3IsIGVuZFBvaW50Q2VsbCwgZWRpdG9yUm5nLCBpc1N0YXJ0SW5UYWJsZSk7XG4gICAgICAgIGlmICghaXNFbXB0eSQyKGVuZFBvaW50Q2VsbCkpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShpc1N0YXJ0SW5UYWJsZSA/IGNlbGxzLnNsaWNlKDEpIDogY2VsbHMuc2xpY2UoMCwgLTEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9KS5nZXRPcihjZWxscyk7XG4gICAgICBjbGVhbkNlbGxzKGNlbGxzVG9DbGVhbik7XG4gICAgICBjb2xsYXBzZUFuZFJlc3RvcmVDZWxsU2VsZWN0aW9uKGVkaXRvcik7XG4gICAgfSk7XG4gICAgY29uc3QgZW1wdHlNdWx0aVRhYmxlQ2VsbHMgPSAoZWRpdG9yLCBzdGFydFRhYmxlQ2VsbHMsIGVuZFRhYmxlQ2VsbHMsIGJldHdlZW5SbmcpID0+IE9wdGlvbmFsLnNvbWUoKCkgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IHN0YXJ0VGFibGVDZWxsc1swXTtcbiAgICAgIGNvbnN0IGVuZENlbGwgPSBlbmRUYWJsZUNlbGxzW2VuZFRhYmxlQ2VsbHMubGVuZ3RoIC0gMV07XG4gICAgICBkZWxldGVDb250ZW50SW5zaWRlQ2VsbChlZGl0b3IsIHN0YXJ0Q2VsbCwgcm5nLCB0cnVlKTtcbiAgICAgIGRlbGV0ZUNvbnRlbnRJbnNpZGVDZWxsKGVkaXRvciwgZW5kQ2VsbCwgcm5nLCBmYWxzZSk7XG4gICAgICBjb25zdCBzdGFydFRhYmxlQ2VsbHNUb0NsZWFuID0gaXNFbXB0eSQyKHN0YXJ0Q2VsbCkgPyBzdGFydFRhYmxlQ2VsbHMgOiBzdGFydFRhYmxlQ2VsbHMuc2xpY2UoMSk7XG4gICAgICBjb25zdCBlbmRUYWJsZUNlbGxzVG9DbGVhbiA9IGlzRW1wdHkkMihlbmRDZWxsKSA/IGVuZFRhYmxlQ2VsbHMgOiBlbmRUYWJsZUNlbGxzLnNsaWNlKDAsIC0xKTtcbiAgICAgIGNsZWFuQ2VsbHMoc3RhcnRUYWJsZUNlbGxzVG9DbGVhbi5jb25jYXQoZW5kVGFibGVDZWxsc1RvQ2xlYW4pKTtcbiAgICAgIGJldHdlZW5SbmcuZGVsZXRlQ29udGVudHMoKTtcbiAgICAgIGNvbGxhcHNlQW5kUmVzdG9yZUNlbGxTZWxlY3Rpb24oZWRpdG9yKTtcbiAgICB9KTtcbiAgICBjb25zdCBkZWxldGVDZWxsQ29udGVudHMgPSAoZWRpdG9yLCBybmcsIGNlbGwsIG1vdmVTZWxlY3Rpb24gPSB0cnVlKSA9PiBPcHRpb25hbC5zb21lKCgpID0+IHtcbiAgICAgIGRlbGV0ZVJhbmdlQ29udGVudHMoZWRpdG9yLCBybmcsIGNlbGwsIG1vdmVTZWxlY3Rpb24pO1xuICAgIH0pO1xuICAgIGNvbnN0IGRlbGV0ZVRhYmxlRWxlbWVudCA9IChlZGl0b3IsIHRhYmxlKSA9PiBPcHRpb25hbC5zb21lKCgpID0+IGRlbGV0ZUVsZW1lbnQkMihlZGl0b3IsIGZhbHNlLCB0YWJsZSkpO1xuICAgIGNvbnN0IGRlbGV0ZUNlbGxSYW5nZSA9IChlZGl0b3IsIHJvb3RFbG0sIHJuZykgPT4gZ2V0QWN0aW9uRnJvbVJhbmdlKHJvb3RFbG0sIHJuZykuYmluZChhY3Rpb24gPT4gYWN0aW9uLmZvbGQoY3VycnkoZGVsZXRlQ2VsbENvbnRlbnRzLCBlZGl0b3IpLCBjdXJyeShkZWxldGVUYWJsZUVsZW1lbnQsIGVkaXRvciksIGN1cnJ5KGVtcHR5U2luZ2xlVGFibGVDZWxscywgZWRpdG9yKSwgY3VycnkoZW1wdHlNdWx0aVRhYmxlQ2VsbHMsIGVkaXRvcikpKTtcbiAgICBjb25zdCBkZWxldGVDYXB0aW9uUmFuZ2UgPSAoZWRpdG9yLCBjYXB0aW9uKSA9PiBlbXB0eUVsZW1lbnQoZWRpdG9yLCBjYXB0aW9uKTtcbiAgICBjb25zdCBkZWxldGVUYWJsZVJhbmdlID0gKGVkaXRvciwgcm9vdEVsbSwgcm5nLCBzdGFydEVsbSkgPT4gZ2V0UGFyZW50Q2FwdGlvbihyb290RWxtLCBzdGFydEVsbSkuZm9sZCgoKSA9PiBkZWxldGVDZWxsUmFuZ2UoZWRpdG9yLCByb290RWxtLCBybmcpLCBjYXB0aW9uID0+IGRlbGV0ZUNhcHRpb25SYW5nZShlZGl0b3IsIGNhcHRpb24pKTtcbiAgICBjb25zdCBkZWxldGVSYW5nZSQzID0gKGVkaXRvciwgc3RhcnRFbG0sIHNlbGVjdGVkQ2VsbHMpID0+IHtcbiAgICAgIGNvbnN0IHJvb3ROb2RlID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgcmV0dXJuIHNlbGVjdGVkQ2VsbHMubGVuZ3RoICE9PSAwID8gZW1wdHlTaW5nbGVUYWJsZUNlbGxzKGVkaXRvciwgc2VsZWN0ZWRDZWxscywgT3B0aW9uYWwubm9uZSgpKSA6IGRlbGV0ZVRhYmxlUmFuZ2UoZWRpdG9yLCByb290Tm9kZSwgcm5nLCBzdGFydEVsbSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRQYXJlbnRDZWxsID0gKHJvb3RFbG0sIGVsbSkgPT4gZmluZCQyKHBhcmVudHNBbmRTZWxmKGVsbSwgcm9vdEVsbSksIGlzVGFibGVDZWxsJDIpO1xuICAgIGNvbnN0IGdldFBhcmVudENhcHRpb24gPSAocm9vdEVsbSwgZWxtKSA9PiBmaW5kJDIocGFyZW50c0FuZFNlbGYoZWxtLCByb290RWxtKSwgaXNUYWcoJ2NhcHRpb24nKSk7XG4gICAgY29uc3QgZGVsZXRlQmV0d2VlbkNlbGxzID0gKGVkaXRvciwgcm9vdEVsbSwgZm9yd2FyZCwgZnJvbUNlbGwsIGZyb20pID0+IG5hdmlnYXRlKGZvcndhcmQsIGVkaXRvci5nZXRCb2R5KCksIGZyb20pLmJpbmQodG8gPT4gZ2V0UGFyZW50Q2VsbChyb290RWxtLCBTdWdhckVsZW1lbnQuZnJvbURvbSh0by5nZXROb2RlKCkpKS5iaW5kKHRvQ2VsbCA9PiBlcSh0b0NlbGwsIGZyb21DZWxsKSA/IE9wdGlvbmFsLm5vbmUoKSA6IE9wdGlvbmFsLnNvbWUobm9vcCkpKTtcbiAgICBjb25zdCBlbXB0eUVsZW1lbnQgPSAoZWRpdG9yLCBlbG0pID0+IE9wdGlvbmFsLnNvbWUoKCkgPT4ge1xuICAgICAgZmlsbFdpdGhQYWRkaW5nQnIoZWxtKTtcbiAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Q3Vyc29yTG9jYXRpb24oZWxtLmRvbSwgMCk7XG4gICAgfSk7XG4gICAgY29uc3QgaXNEZWxldGVPZkxhc3RDaGFyUG9zID0gKGZyb21DYXB0aW9uLCBmb3J3YXJkLCBmcm9tLCB0bykgPT4gZmlyc3RQb3NpdGlvbkluKGZyb21DYXB0aW9uLmRvbSkuYmluZChmaXJzdCA9PiBsYXN0UG9zaXRpb25Jbihmcm9tQ2FwdGlvbi5kb20pLm1hcChsYXN0ID0+IGZvcndhcmQgPyBmcm9tLmlzRXF1YWwoZmlyc3QpICYmIHRvLmlzRXF1YWwobGFzdCkgOiBmcm9tLmlzRXF1YWwobGFzdCkgJiYgdG8uaXNFcXVhbChmaXJzdCkpKS5nZXRPcih0cnVlKTtcbiAgICBjb25zdCBlbXB0eUNhcmV0Q2FwdGlvbiA9IChlZGl0b3IsIGVsbSkgPT4gZW1wdHlFbGVtZW50KGVkaXRvciwgZWxtKTtcbiAgICBjb25zdCB2YWxpZGF0ZUNhcmV0Q2FwdGlvbiA9IChyb290RWxtLCBmcm9tQ2FwdGlvbiwgdG8pID0+IGdldFBhcmVudENhcHRpb24ocm9vdEVsbSwgU3VnYXJFbGVtZW50LmZyb21Eb20odG8uZ2V0Tm9kZSgpKSkuZm9sZCgoKSA9PiBPcHRpb25hbC5zb21lKG5vb3ApLCB0b0NhcHRpb24gPT4gc29tZUlmKCFlcSh0b0NhcHRpb24sIGZyb21DYXB0aW9uKSwgbm9vcCkpO1xuICAgIGNvbnN0IGRlbGV0ZUNhcmV0SW5zaWRlQ2FwdGlvbiA9IChlZGl0b3IsIHJvb3RFbG0sIGZvcndhcmQsIGZyb21DYXB0aW9uLCBmcm9tKSA9PiBuYXZpZ2F0ZShmb3J3YXJkLCBlZGl0b3IuZ2V0Qm9keSgpLCBmcm9tKS5mb2xkKCgpID0+IE9wdGlvbmFsLnNvbWUobm9vcCksIHRvID0+IGlzRGVsZXRlT2ZMYXN0Q2hhclBvcyhmcm9tQ2FwdGlvbiwgZm9yd2FyZCwgZnJvbSwgdG8pID8gZW1wdHlDYXJldENhcHRpb24oZWRpdG9yLCBmcm9tQ2FwdGlvbikgOiB2YWxpZGF0ZUNhcmV0Q2FwdGlvbihyb290RWxtLCBmcm9tQ2FwdGlvbiwgdG8pKTtcbiAgICBjb25zdCBkZWxldGVDYXJldENlbGxzID0gKGVkaXRvciwgZm9yd2FyZCwgcm9vdEVsbSwgc3RhcnRFbG0pID0+IHtcbiAgICAgIGNvbnN0IGZyb20gPSBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpO1xuICAgICAgcmV0dXJuIGdldFBhcmVudENlbGwocm9vdEVsbSwgc3RhcnRFbG0pLmJpbmQoZnJvbUNlbGwgPT4gaXNFbXB0eSQyKGZyb21DZWxsKSA/IGVtcHR5RWxlbWVudChlZGl0b3IsIGZyb21DZWxsKSA6IGRlbGV0ZUJldHdlZW5DZWxscyhlZGl0b3IsIHJvb3RFbG0sIGZvcndhcmQsIGZyb21DZWxsLCBmcm9tKSk7XG4gICAgfTtcbiAgICBjb25zdCBkZWxldGVDYXJldENhcHRpb24gPSAoZWRpdG9yLCBmb3J3YXJkLCByb290RWxtLCBmcm9tQ2FwdGlvbikgPT4ge1xuICAgICAgY29uc3QgZnJvbSA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQoZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSk7XG4gICAgICByZXR1cm4gaXNFbXB0eSQyKGZyb21DYXB0aW9uKSA/IGVtcHR5RWxlbWVudChlZGl0b3IsIGZyb21DYXB0aW9uKSA6IGRlbGV0ZUNhcmV0SW5zaWRlQ2FwdGlvbihlZGl0b3IsIHJvb3RFbG0sIGZvcndhcmQsIGZyb21DYXB0aW9uLCBmcm9tKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzTmVhclRhYmxlID0gKGZvcndhcmQsIHBvcykgPT4gZm9yd2FyZCA/IGlzQmVmb3JlVGFibGUocG9zKSA6IGlzQWZ0ZXJUYWJsZShwb3MpO1xuICAgIGNvbnN0IGlzQmVmb3JlT3JBZnRlclRhYmxlID0gKGVkaXRvciwgZm9yd2FyZCkgPT4ge1xuICAgICAgY29uc3QgZnJvbVBvcyA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQoZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSk7XG4gICAgICByZXR1cm4gaXNOZWFyVGFibGUoZm9yd2FyZCwgZnJvbVBvcykgfHwgZnJvbVBvc2l0aW9uKGZvcndhcmQsIGVkaXRvci5nZXRCb2R5KCksIGZyb21Qb3MpLmV4aXN0cyhwb3MgPT4gaXNOZWFyVGFibGUoZm9yd2FyZCwgcG9zKSk7XG4gICAgfTtcbiAgICBjb25zdCBkZWxldGVDYXJldCQzID0gKGVkaXRvciwgZm9yd2FyZCwgc3RhcnRFbG0pID0+IHtcbiAgICAgIGNvbnN0IHJvb3RFbG0gPSBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKTtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRDYXB0aW9uKHJvb3RFbG0sIHN0YXJ0RWxtKS5mb2xkKCgpID0+IGRlbGV0ZUNhcmV0Q2VsbHMoZWRpdG9yLCBmb3J3YXJkLCByb290RWxtLCBzdGFydEVsbSkub3JUaHVuaygoKSA9PiBzb21lSWYoaXNCZWZvcmVPckFmdGVyVGFibGUoZWRpdG9yLCBmb3J3YXJkKSwgbm9vcCkpLCBmcm9tQ2FwdGlvbiA9PiBkZWxldGVDYXJldENhcHRpb24oZWRpdG9yLCBmb3J3YXJkLCByb290RWxtLCBmcm9tQ2FwdGlvbikpO1xuICAgIH07XG4gICAgY29uc3QgYmFja3NwYWNlRGVsZXRlJGEgPSAoZWRpdG9yLCBmb3J3YXJkKSA9PiB7XG4gICAgICBjb25zdCBzdGFydEVsbSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5zZWxlY3Rpb24uZ2V0U3RhcnQodHJ1ZSkpO1xuICAgICAgY29uc3QgY2VsbHMgPSBnZXRDZWxsc0Zyb21FZGl0b3IoZWRpdG9yKTtcbiAgICAgIHJldHVybiBlZGl0b3Iuc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkgJiYgY2VsbHMubGVuZ3RoID09PSAwID8gZGVsZXRlQ2FyZXQkMyhlZGl0b3IsIGZvcndhcmQsIHN0YXJ0RWxtKSA6IGRlbGV0ZVJhbmdlJDMoZWRpdG9yLCBzdGFydEVsbSwgY2VsbHMpO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRDb250ZW50RWRpdGFibGVSb290JDEgPSAocm9vdCwgbm9kZSkgPT4ge1xuICAgICAgbGV0IHRlbXBOb2RlID0gbm9kZTtcbiAgICAgIHdoaWxlICh0ZW1wTm9kZSAmJiB0ZW1wTm9kZSAhPT0gcm9vdCkge1xuICAgICAgICBpZiAoaXNDb250ZW50RWRpdGFibGVUcnVlJDModGVtcE5vZGUpIHx8IGlzQ29udGVudEVkaXRhYmxlRmFsc2UkYih0ZW1wTm9kZSkpIHtcbiAgICAgICAgICByZXR1cm4gdGVtcE5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgdGVtcE5vZGUgPSB0ZW1wTm9kZS5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIGNvbnN0IGludGVybmFsQXR0cmlidXRlc1ByZWZpeGVzID0gW1xuICAgICAgJ2RhdGEtZXBob3gtJyxcbiAgICAgICdkYXRhLW1jZS0nLFxuICAgICAgJ2RhdGEtYWxsb3ktJyxcbiAgICAgICdkYXRhLXNub29rZXItJyxcbiAgICAgICdfJ1xuICAgIF07XG4gICAgY29uc3QgZWFjaCQ5ID0gVG9vbHMuZWFjaDtcbiAgICBjb25zdCBFbGVtZW50VXRpbHMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IGludGVybmFsQXR0cmlidXRlcyA9IG5ldyBTZXQoZWRpdG9yLnNlcmlhbGl6ZXIuZ2V0VGVtcEF0dHJzKCkpO1xuICAgICAgY29uc3QgY29tcGFyZSA9IChub2RlMSwgbm9kZTIpID0+IHtcbiAgICAgICAgaWYgKG5vZGUxLm5vZGVOYW1lICE9PSBub2RlMi5ub2RlTmFtZSB8fCBub2RlMS5ub2RlVHlwZSAhPT0gbm9kZTIubm9kZVR5cGUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ2V0QXR0cmlicyA9IG5vZGUgPT4ge1xuICAgICAgICAgIGNvbnN0IGF0dHJpYnMgPSB7fTtcbiAgICAgICAgICBlYWNoJDkoZG9tLmdldEF0dHJpYnMobm9kZSksIGF0dHIgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGF0dHIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChuYW1lICE9PSAnc3R5bGUnICYmICFpc0F0dHJpYnV0ZUludGVybmFsKG5hbWUpKSB7XG4gICAgICAgICAgICAgIGF0dHJpYnNbbmFtZV0gPSBkb20uZ2V0QXR0cmliKG5vZGUsIG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBhdHRyaWJzO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjb21wYXJlT2JqZWN0cyA9IChvYmoxLCBvYmoyKSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIG9iajEpIHtcbiAgICAgICAgICAgIGlmIChoYXMkMihvYmoxLCBuYW1lKSkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG9iajJbbmFtZV07XG4gICAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKG9iajFbbmFtZV0gIT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRlbGV0ZSBvYmoyW25hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gb2JqMikge1xuICAgICAgICAgICAgaWYgKGhhcyQyKG9iajIsIG5hbWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChpc0VsZW1lbnQkNihub2RlMSkgJiYgaXNFbGVtZW50JDYobm9kZTIpKSB7XG4gICAgICAgICAgaWYgKCFjb21wYXJlT2JqZWN0cyhnZXRBdHRyaWJzKG5vZGUxKSwgZ2V0QXR0cmlicyhub2RlMikpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghY29tcGFyZU9iamVjdHMoZG9tLnBhcnNlU3R5bGUoZG9tLmdldEF0dHJpYihub2RlMSwgJ3N0eWxlJykpLCBkb20ucGFyc2VTdHlsZShkb20uZ2V0QXR0cmliKG5vZGUyLCAnc3R5bGUnKSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhaXNCb29rbWFya05vZGUkMShub2RlMSkgJiYgIWlzQm9va21hcmtOb2RlJDEobm9kZTIpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzQXR0cmlidXRlSW50ZXJuYWwgPSBhdHRyaWJ1dGVOYW1lID0+IGV4aXN0cyhpbnRlcm5hbEF0dHJpYnV0ZXNQcmVmaXhlcywgdmFsdWUgPT4gc3RhcnRzV2l0aChhdHRyaWJ1dGVOYW1lLCB2YWx1ZSkpIHx8IGludGVybmFsQXR0cmlidXRlcy5oYXMoYXR0cmlidXRlTmFtZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21wYXJlLFxuICAgICAgICBpc0F0dHJpYnV0ZUludGVybmFsXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCB0cmF2ZXJzZSA9IChyb290LCBmbikgPT4ge1xuICAgICAgbGV0IG5vZGUgPSByb290O1xuICAgICAgd2hpbGUgKG5vZGUgPSBub2RlLndhbGsoKSkge1xuICAgICAgICBmbihub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1hdGNoTm9kZSQxID0gKG5vZGVGaWx0ZXJzLCBhdHRyaWJ1dGVGaWx0ZXJzLCBub2RlLCBtYXRjaGVzKSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gbm9kZS5uYW1lO1xuICAgICAgZm9yIChsZXQgbmkgPSAwLCBubCA9IG5vZGVGaWx0ZXJzLmxlbmd0aDsgbmkgPCBubDsgbmkrKykge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBub2RlRmlsdGVyc1tuaV07XG4gICAgICAgIGlmIChmaWx0ZXIubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgIGNvbnN0IG1hdGNoID0gbWF0Y2hlcy5ub2Rlc1tuYW1lXTtcbiAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIG1hdGNoLm5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1hdGNoZXMubm9kZXNbbmFtZV0gPSB7XG4gICAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgICAgbm9kZXM6IFtub2RlXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgZm9yIChsZXQgYWkgPSAwLCBhbCA9IGF0dHJpYnV0ZUZpbHRlcnMubGVuZ3RoOyBhaSA8IGFsOyBhaSsrKSB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyID0gYXR0cmlidXRlRmlsdGVyc1thaV07XG4gICAgICAgICAgY29uc3QgYXR0ck5hbWUgPSBmaWx0ZXIubmFtZTtcbiAgICAgICAgICBpZiAoYXR0ck5hbWUgaW4gbm9kZS5hdHRyaWJ1dGVzLm1hcCkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBtYXRjaGVzLmF0dHJpYnV0ZXNbYXR0ck5hbWVdO1xuICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgIG1hdGNoLm5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXRjaGVzLmF0dHJpYnV0ZXNbYXR0ck5hbWVdID0ge1xuICAgICAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgICAgICBub2RlczogW25vZGVdXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBmaW5kTWF0Y2hpbmdOb2RlcyA9IChub2RlRmlsdGVycywgYXR0cmlidXRlRmlsdGVycywgbm9kZSkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IHtcbiAgICAgICAgbm9kZXM6IHt9LFxuICAgICAgICBhdHRyaWJ1dGVzOiB7fVxuICAgICAgfTtcbiAgICAgIGlmIChub2RlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgdHJhdmVyc2Uobm9kZSwgY2hpbGROb2RlID0+IHtcbiAgICAgICAgICBtYXRjaE5vZGUkMShub2RlRmlsdGVycywgYXR0cmlidXRlRmlsdGVycywgY2hpbGROb2RlLCBtYXRjaGVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWF0Y2hlcztcbiAgICB9O1xuICAgIGNvbnN0IHJ1bkZpbHRlcnMgPSAobWF0Y2hlcywgYXJncykgPT4ge1xuICAgICAgY29uc3QgcnVuID0gKG1hdGNoUmVjb3JkLCBmaWx0ZXJpbmdBdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGVhY2gkZChtYXRjaFJlY29yZCwgbWF0Y2ggPT4ge1xuICAgICAgICAgIGNvbnN0IG5vZGVzID0gZnJvbShtYXRjaC5ub2Rlcyk7XG4gICAgICAgICAgZWFjaCRlKG1hdGNoLmZpbHRlci5jYWxsYmFja3MsIGNhbGxiYWNrID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBub2Rlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlTWF0Y2hlcyA9IGZpbHRlcmluZ0F0dHJpYnV0ZXMgPyBub2RlLmF0dHIobWF0Y2guZmlsdGVyLm5hbWUpICE9PSB1bmRlZmluZWQgOiBub2RlLm5hbWUgPT09IG1hdGNoLmZpbHRlci5uYW1lO1xuICAgICAgICAgICAgICBpZiAoIXZhbHVlTWF0Y2hlcyB8fCBpc051bGxhYmxlKG5vZGUucGFyZW50KSkge1xuICAgICAgICAgICAgICAgIG5vZGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2sobm9kZXMsIG1hdGNoLmZpbHRlci5uYW1lLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgcnVuKG1hdGNoZXMubm9kZXMsIGZhbHNlKTtcbiAgICAgIHJ1bihtYXRjaGVzLmF0dHJpYnV0ZXMsIHRydWUpO1xuICAgIH07XG4gICAgY29uc3QgZmlsdGVyJDIgPSAobm9kZUZpbHRlcnMsIGF0dHJpYnV0ZUZpbHRlcnMsIG5vZGUsIGFyZ3MgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGZpbmRNYXRjaGluZ05vZGVzKG5vZGVGaWx0ZXJzLCBhdHRyaWJ1dGVGaWx0ZXJzLCBub2RlKTtcbiAgICAgIHJ1bkZpbHRlcnMobWF0Y2hlcywgYXJncyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHBhZGRFbXB0eU5vZGUgPSAoc2V0dGluZ3MsIGFyZ3MsIGlzQmxvY2ssIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IGJyUHJlZmVycmVkID0gc2V0dGluZ3MucGFkX2VtcHR5X3dpdGhfYnIgfHwgYXJncy5pbnNlcnQ7XG4gICAgICBpZiAoYnJQcmVmZXJyZWQgJiYgaXNCbG9jayhub2RlKSkge1xuICAgICAgICBjb25zdCBhc3ROb2RlID0gbmV3IEFzdE5vZGUoJ2JyJywgMSk7XG4gICAgICAgIGlmIChhcmdzLmluc2VydCkge1xuICAgICAgICAgIGFzdE5vZGUuYXR0cignZGF0YS1tY2UtYm9ndXMnLCAnMScpO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUuZW1wdHkoKS5hcHBlbmQoYXN0Tm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLmVtcHR5KCkuYXBwZW5kKG5ldyBBc3ROb2RlKCcjdGV4dCcsIDMpKS52YWx1ZSA9IG5ic3A7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc1BhZGRlZFdpdGhOYnNwID0gbm9kZSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICByZXR1cm4gaGFzT25seUNoaWxkKG5vZGUsICcjdGV4dCcpICYmICgoX2EgPSBub2RlID09PSBudWxsIHx8IG5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG5vZGUuZmlyc3RDaGlsZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSA9PT0gbmJzcDtcbiAgICB9O1xuICAgIGNvbnN0IGhhc09ubHlDaGlsZCA9IChub2RlLCBuYW1lKSA9PiB7XG4gICAgICBjb25zdCBmaXJzdENoaWxkID0gbm9kZSA9PT0gbnVsbCB8fCBub2RlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgICByZXR1cm4gaXNOb25OdWxsYWJsZShmaXJzdENoaWxkKSAmJiBmaXJzdENoaWxkID09PSBub2RlLmxhc3RDaGlsZCAmJiBmaXJzdENoaWxkLm5hbWUgPT09IG5hbWU7XG4gICAgfTtcbiAgICBjb25zdCBpc1BhZGRlZCA9IChzY2hlbWEsIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHJ1bGUgPSBzY2hlbWEuZ2V0RWxlbWVudFJ1bGUobm9kZS5uYW1lKTtcbiAgICAgIHJldHVybiAocnVsZSA9PT0gbnVsbCB8fCBydWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBydWxlLnBhZGRFbXB0eSkgPT09IHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBpc0VtcHR5ID0gKHNjaGVtYSwgbm9uRW1wdHlFbGVtZW50cywgd2hpdGVzcGFjZUVsZW1lbnRzLCBub2RlKSA9PiBub2RlLmlzRW1wdHkobm9uRW1wdHlFbGVtZW50cywgd2hpdGVzcGFjZUVsZW1lbnRzLCBub2RlID0+IGlzUGFkZGVkKHNjaGVtYSwgbm9kZSkpO1xuICAgIGNvbnN0IGlzTGluZUJyZWFrTm9kZSA9IChub2RlLCBpc0Jsb2NrKSA9PiBpc05vbk51bGxhYmxlKG5vZGUpICYmIChpc0Jsb2NrKG5vZGUpIHx8IG5vZGUubmFtZSA9PT0gJ2JyJyk7XG4gICAgY29uc3QgZmluZENsb3Nlc3RFZGl0aW5nSG9zdCA9IHNjb3BlID0+IHtcbiAgICAgIGxldCBlZGl0YWJsZU5vZGU7XG4gICAgICBmb3IgKGxldCBub2RlID0gc2NvcGU7IG5vZGU7IG5vZGUgPSBub2RlLnBhcmVudCkge1xuICAgICAgICBjb25zdCBjb250ZW50RWRpdGFibGUgPSBub2RlLmF0dHIoJ2NvbnRlbnRlZGl0YWJsZScpO1xuICAgICAgICBpZiAoY29udGVudEVkaXRhYmxlID09PSAnZmFsc2UnKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpIHtcbiAgICAgICAgICBlZGl0YWJsZU5vZGUgPSBub2RlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShlZGl0YWJsZU5vZGUpO1xuICAgIH07XG5cbiAgICBjb25zdCByZW1vdmVPclVud3JhcEludmFsaWROb2RlID0gKG5vZGUsIHNjaGVtYSwgb3JpZ2luYWxOb2RlUGFyZW50ID0gbm9kZS5wYXJlbnQpID0+IHtcbiAgICAgIGlmIChzY2hlbWEuZ2V0U3BlY2lhbEVsZW1lbnRzKClbbm9kZS5uYW1lXSkge1xuICAgICAgICBub2RlLmVtcHR5KCkucmVtb3ZlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4oKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZE5vZGUgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAob3JpZ2luYWxOb2RlUGFyZW50ICYmICFzY2hlbWEuaXNWYWxpZENoaWxkKG9yaWdpbmFsTm9kZVBhcmVudC5uYW1lLCBjaGlsZE5vZGUubmFtZSkpIHtcbiAgICAgICAgICAgIHJlbW92ZU9yVW53cmFwSW52YWxpZE5vZGUoY2hpbGROb2RlLCBzY2hlbWEsIG9yaWdpbmFsTm9kZVBhcmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5vZGUudW53cmFwKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjbGVhbkludmFsaWROb2RlcyA9IChub2Rlcywgc2NoZW1hLCByb290Tm9kZSwgb25DcmVhdGUgPSBub29wKSA9PiB7XG4gICAgICBjb25zdCB0ZXh0QmxvY2tFbGVtZW50cyA9IHNjaGVtYS5nZXRUZXh0QmxvY2tFbGVtZW50cygpO1xuICAgICAgY29uc3Qgbm9uRW1wdHlFbGVtZW50cyA9IHNjaGVtYS5nZXROb25FbXB0eUVsZW1lbnRzKCk7XG4gICAgICBjb25zdCB3aGl0ZXNwYWNlRWxlbWVudHMgPSBzY2hlbWEuZ2V0V2hpdGVzcGFjZUVsZW1lbnRzKCk7XG4gICAgICBjb25zdCBub25TcGxpdHRhYmxlRWxlbWVudHMgPSBUb29scy5tYWtlTWFwKCd0cix0ZCx0aCx0Ym9keSx0aGVhZCx0Zm9vdCx0YWJsZSxzdW1tYXJ5Jyk7XG4gICAgICBjb25zdCBmaXhlZCA9IG5ldyBTZXQoKTtcbiAgICAgIGNvbnN0IGlzU3BsaXR0YWJsZUVsZW1lbnQgPSBub2RlID0+IG5vZGUgIT09IHJvb3ROb2RlICYmICFub25TcGxpdHRhYmxlRWxlbWVudHNbbm9kZS5uYW1lXTtcbiAgICAgIGZvciAobGV0IG5pID0gMDsgbmkgPCBub2Rlcy5sZW5ndGg7IG5pKyspIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW25pXTtcbiAgICAgICAgbGV0IHBhcmVudDtcbiAgICAgICAgbGV0IG5ld1BhcmVudDtcbiAgICAgICAgbGV0IHRlbXBOb2RlO1xuICAgICAgICBpZiAoIW5vZGUucGFyZW50IHx8IGZpeGVkLmhhcyhub2RlKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ZXh0QmxvY2tFbGVtZW50c1tub2RlLm5hbWVdICYmIG5vZGUucGFyZW50Lm5hbWUgPT09ICdsaScpIHtcbiAgICAgICAgICBsZXQgc2libGluZyA9IG5vZGUubmV4dDtcbiAgICAgICAgICB3aGlsZSAoc2libGluZykge1xuICAgICAgICAgICAgaWYgKHRleHRCbG9ja0VsZW1lbnRzW3NpYmxpbmcubmFtZV0pIHtcbiAgICAgICAgICAgICAgc2libGluZy5uYW1lID0gJ2xpJztcbiAgICAgICAgICAgICAgZml4ZWQuYWRkKHNpYmxpbmcpO1xuICAgICAgICAgICAgICBub2RlLnBhcmVudC5pbnNlcnQoc2libGluZywgbm9kZS5wYXJlbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaWJsaW5nID0gc2libGluZy5uZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBub2RlLnVud3JhcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBbbm9kZV07XG4gICAgICAgIGZvciAocGFyZW50ID0gbm9kZS5wYXJlbnQ7IHBhcmVudCAmJiAhc2NoZW1hLmlzVmFsaWRDaGlsZChwYXJlbnQubmFtZSwgbm9kZS5uYW1lKSAmJiBpc1NwbGl0dGFibGVFbGVtZW50KHBhcmVudCk7IHBhcmVudCA9IHBhcmVudC5wYXJlbnQpIHtcbiAgICAgICAgICBwYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGlmIChzY2hlbWEuaXNWYWxpZENoaWxkKHBhcmVudC5uYW1lLCBub2RlLm5hbWUpKSB7XG4gICAgICAgICAgICBwYXJlbnRzLnJldmVyc2UoKTtcbiAgICAgICAgICAgIG5ld1BhcmVudCA9IHBhcmVudHNbMF0uY2xvbmUoKTtcbiAgICAgICAgICAgIG9uQ3JlYXRlKG5ld1BhcmVudCk7XG4gICAgICAgICAgICBsZXQgY3VycmVudE5vZGUgPSBuZXdQYXJlbnQ7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICAgIGlmIChzY2hlbWEuaXNWYWxpZENoaWxkKGN1cnJlbnROb2RlLm5hbWUsIHBhcmVudHNbaV0ubmFtZSkgJiYgaSA+IDApIHtcbiAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IHBhcmVudHNbaV0uY2xvbmUoKTtcbiAgICAgICAgICAgICAgICBvbkNyZWF0ZSh0ZW1wTm9kZSk7XG4gICAgICAgICAgICAgICAgY3VycmVudE5vZGUuYXBwZW5kKHRlbXBOb2RlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IGN1cnJlbnROb2RlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGZvciAobGV0IGNoaWxkTm9kZSA9IHBhcmVudHNbaV0uZmlyc3RDaGlsZDsgY2hpbGROb2RlICYmIGNoaWxkTm9kZSAhPT0gcGFyZW50c1tpICsgMV07KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dE5vZGUgPSBjaGlsZE5vZGUubmV4dDtcbiAgICAgICAgICAgICAgICB0ZW1wTm9kZS5hcHBlbmQoY2hpbGROb2RlKTtcbiAgICAgICAgICAgICAgICBjaGlsZE5vZGUgPSBuZXh0Tm9kZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjdXJyZW50Tm9kZSA9IHRlbXBOb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0VtcHR5KHNjaGVtYSwgbm9uRW1wdHlFbGVtZW50cywgd2hpdGVzcGFjZUVsZW1lbnRzLCBuZXdQYXJlbnQpKSB7XG4gICAgICAgICAgICAgIHBhcmVudC5pbnNlcnQobmV3UGFyZW50LCBwYXJlbnRzWzBdLCB0cnVlKTtcbiAgICAgICAgICAgICAgcGFyZW50Lmluc2VydChub2RlLCBuZXdQYXJlbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGFyZW50Lmluc2VydChub2RlLCBwYXJlbnRzWzBdLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudHNbMF07XG4gICAgICAgICAgICBpZiAoaXNFbXB0eShzY2hlbWEsIG5vbkVtcHR5RWxlbWVudHMsIHdoaXRlc3BhY2VFbGVtZW50cywgcGFyZW50KSB8fCBoYXNPbmx5Q2hpbGQocGFyZW50LCAnYnInKSkge1xuICAgICAgICAgICAgICBwYXJlbnQuZW1wdHkoKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVtb3ZlT3JVbndyYXBJbnZhbGlkTm9kZShub2RlLCBzY2hlbWEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChub2RlLnBhcmVudCkge1xuICAgICAgICAgIGlmIChub2RlLm5hbWUgPT09ICdsaScpIHtcbiAgICAgICAgICAgIGxldCBzaWJsaW5nID0gbm9kZS5wcmV2O1xuICAgICAgICAgICAgaWYgKHNpYmxpbmcgJiYgKHNpYmxpbmcubmFtZSA9PT0gJ3VsJyB8fCBzaWJsaW5nLm5hbWUgPT09ICdvbCcpKSB7XG4gICAgICAgICAgICAgIHNpYmxpbmcuYXBwZW5kKG5vZGUpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNpYmxpbmcgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICBpZiAoc2libGluZyAmJiAoc2libGluZy5uYW1lID09PSAndWwnIHx8IHNpYmxpbmcubmFtZSA9PT0gJ29sJykgJiYgc2libGluZy5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgIHNpYmxpbmcuaW5zZXJ0KG5vZGUsIHNpYmxpbmcuZmlyc3RDaGlsZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgd3JhcHBlciA9IG5ldyBBc3ROb2RlKCd1bCcsIDEpO1xuICAgICAgICAgICAgb25DcmVhdGUod3JhcHBlcik7XG4gICAgICAgICAgICBub2RlLndyYXAod3JhcHBlcik7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNjaGVtYS5pc1ZhbGlkQ2hpbGQobm9kZS5wYXJlbnQubmFtZSwgJ2RpdicpICYmIHNjaGVtYS5pc1ZhbGlkQ2hpbGQoJ2RpdicsIG5vZGUubmFtZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZXIgPSBuZXcgQXN0Tm9kZSgnZGl2JywgMSk7XG4gICAgICAgICAgICBvbkNyZWF0ZSh3cmFwcGVyKTtcbiAgICAgICAgICAgIG5vZGUud3JhcCh3cmFwcGVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVtb3ZlT3JVbndyYXBJbnZhbGlkTm9kZShub2RlLCBzY2hlbWEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaGFzQ2xvc2VzdCA9IChub2RlLCBwYXJlbnROYW1lKSA9PiB7XG4gICAgICBsZXQgdGVtcE5vZGUgPSBub2RlO1xuICAgICAgd2hpbGUgKHRlbXBOb2RlKSB7XG4gICAgICAgIGlmICh0ZW1wTm9kZS5uYW1lID09PSBwYXJlbnROYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGVtcE5vZGUgPSB0ZW1wTm9kZS5wYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBjb25zdCBpc0ludmFsaWQgPSAoc2NoZW1hLCBub2RlLCBwYXJlbnQgPSBub2RlLnBhcmVudCkgPT4ge1xuICAgICAgaWYgKHBhcmVudCAmJiBzY2hlbWEuY2hpbGRyZW5bbm9kZS5uYW1lXSAmJiAhc2NoZW1hLmlzVmFsaWRDaGlsZChwYXJlbnQubmFtZSwgbm9kZS5uYW1lKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAocGFyZW50ICYmIG5vZGUubmFtZSA9PT0gJ2EnICYmIGhhc0Nsb3Nlc3QocGFyZW50LCAnYScpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGVSYW5nZSA9IChzYywgc28sIGVjLCBlbykgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHJuZy5zZXRTdGFydChzYywgc28pO1xuICAgICAgcm5nLnNldEVuZChlYywgZW8pO1xuICAgICAgcmV0dXJuIHJuZztcbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZUJsb2NrU2VsZWN0aW9uUmFuZ2UgPSBybmcgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRQb3MgPSBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KHJuZyk7XG4gICAgICBjb25zdCBlbmRQb3MgPSBDYXJldFBvc2l0aW9uLmZyb21SYW5nZUVuZChybmcpO1xuICAgICAgY29uc3Qgcm9vdE5vZGUgPSBybmcuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XG4gICAgICByZXR1cm4gZnJvbVBvc2l0aW9uKGZhbHNlLCByb290Tm9kZSwgZW5kUG9zKS5tYXAobmV3RW5kUG9zID0+IHtcbiAgICAgICAgaWYgKCFpc0luU2FtZUJsb2NrKHN0YXJ0UG9zLCBlbmRQb3MsIHJvb3ROb2RlKSAmJiBpc0luU2FtZUJsb2NrKHN0YXJ0UG9zLCBuZXdFbmRQb3MsIHJvb3ROb2RlKSkge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVSYW5nZShzdGFydFBvcy5jb250YWluZXIoKSwgc3RhcnRQb3Mub2Zmc2V0KCksIG5ld0VuZFBvcy5jb250YWluZXIoKSwgbmV3RW5kUG9zLm9mZnNldCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcm5nO1xuICAgICAgICB9XG4gICAgICB9KS5nZXRPcihybmcpO1xuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplID0gcm5nID0+IHJuZy5jb2xsYXBzZWQgPyBybmcgOiBub3JtYWxpemVCbG9ja1NlbGVjdGlvblJhbmdlKHJuZyk7XG5cbiAgICBjb25zdCBoYXNPbmx5T25lQ2hpbGQkMSA9IG5vZGUgPT4ge1xuICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUobm9kZS5maXJzdENoaWxkKSAmJiBub2RlLmZpcnN0Q2hpbGQgPT09IG5vZGUubGFzdENoaWxkO1xuICAgIH07XG4gICAgY29uc3QgaXNQYWRkaW5nTm9kZSA9IG5vZGUgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUubmFtZSA9PT0gJ2JyJyB8fCBub2RlLnZhbHVlID09PSBuYnNwO1xuICAgIH07XG4gICAgY29uc3QgaXNQYWRkZWRFbXB0eUJsb2NrID0gKHNjaGVtYSwgbm9kZSkgPT4ge1xuICAgICAgY29uc3QgYmxvY2tFbGVtZW50cyA9IHNjaGVtYS5nZXRCbG9ja0VsZW1lbnRzKCk7XG4gICAgICByZXR1cm4gYmxvY2tFbGVtZW50c1tub2RlLm5hbWVdICYmIGhhc09ubHlPbmVDaGlsZCQxKG5vZGUpICYmIGlzUGFkZGluZ05vZGUobm9kZS5maXJzdENoaWxkKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzRW1wdHlGcmFnbWVudEVsZW1lbnQgPSAoc2NoZW1hLCBub2RlKSA9PiB7XG4gICAgICBjb25zdCBub25FbXB0eUVsZW1lbnRzID0gc2NoZW1hLmdldE5vbkVtcHR5RWxlbWVudHMoKTtcbiAgICAgIHJldHVybiBpc05vbk51bGxhYmxlKG5vZGUpICYmIChub2RlLmlzRW1wdHkobm9uRW1wdHlFbGVtZW50cykgfHwgaXNQYWRkZWRFbXB0eUJsb2NrKHNjaGVtYSwgbm9kZSkpO1xuICAgIH07XG4gICAgY29uc3QgaXNMaXN0RnJhZ21lbnQgPSAoc2NoZW1hLCBmcmFnbWVudCkgPT4ge1xuICAgICAgbGV0IGZpcnN0Q2hpbGQgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuICAgICAgbGV0IGxhc3RDaGlsZCA9IGZyYWdtZW50Lmxhc3RDaGlsZDtcbiAgICAgIGlmIChmaXJzdENoaWxkICYmIGZpcnN0Q2hpbGQubmFtZSA9PT0gJ21ldGEnKSB7XG4gICAgICAgIGZpcnN0Q2hpbGQgPSBmaXJzdENoaWxkLm5leHQ7XG4gICAgICB9XG4gICAgICBpZiAobGFzdENoaWxkICYmIGxhc3RDaGlsZC5hdHRyKCdpZCcpID09PSAnbWNlX21hcmtlcicpIHtcbiAgICAgICAgbGFzdENoaWxkID0gbGFzdENoaWxkLnByZXY7XG4gICAgICB9XG4gICAgICBpZiAoaXNFbXB0eUZyYWdtZW50RWxlbWVudChzY2hlbWEsIGxhc3RDaGlsZCkpIHtcbiAgICAgICAgbGFzdENoaWxkID0gbGFzdENoaWxkID09PSBudWxsIHx8IGxhc3RDaGlsZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGFzdENoaWxkLnByZXY7XG4gICAgICB9XG4gICAgICBpZiAoIWZpcnN0Q2hpbGQgfHwgZmlyc3RDaGlsZCAhPT0gbGFzdENoaWxkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmaXJzdENoaWxkLm5hbWUgPT09ICd1bCcgfHwgZmlyc3RDaGlsZC5uYW1lID09PSAnb2wnO1xuICAgIH07XG4gICAgY29uc3QgY2xlYW51cERvbUZyYWdtZW50ID0gZG9tRnJhZ21lbnQgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSBkb21GcmFnbWVudC5maXJzdENoaWxkO1xuICAgICAgY29uc3QgbGFzdENoaWxkID0gZG9tRnJhZ21lbnQubGFzdENoaWxkO1xuICAgICAgaWYgKGZpcnN0Q2hpbGQgJiYgZmlyc3RDaGlsZC5ub2RlTmFtZSA9PT0gJ01FVEEnKSB7XG4gICAgICAgIChfYSA9IGZpcnN0Q2hpbGQucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJlbW92ZUNoaWxkKGZpcnN0Q2hpbGQpO1xuICAgICAgfVxuICAgICAgaWYgKGxhc3RDaGlsZCAmJiBsYXN0Q2hpbGQuaWQgPT09ICdtY2VfbWFya2VyJykge1xuICAgICAgICAoX2IgPSBsYXN0Q2hpbGQucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnJlbW92ZUNoaWxkKGxhc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZG9tRnJhZ21lbnQ7XG4gICAgfTtcbiAgICBjb25zdCB0b0RvbUZyYWdtZW50ID0gKGRvbSwgc2VyaWFsaXplciwgZnJhZ21lbnQpID0+IHtcbiAgICAgIGNvbnN0IGh0bWwgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZShmcmFnbWVudCk7XG4gICAgICBjb25zdCBkb21GcmFnbWVudCA9IGRvbS5jcmVhdGVGcmFnbWVudChodG1sKTtcbiAgICAgIHJldHVybiBjbGVhbnVwRG9tRnJhZ21lbnQoZG9tRnJhZ21lbnQpO1xuICAgIH07XG4gICAgY29uc3QgbGlzdEl0ZW1zID0gZWxtID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIHJldHVybiBmaWx0ZXIkNSgoX2EgPSBlbG0gPT09IG51bGwgfHwgZWxtID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbG0uY2hpbGROb2RlcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10sIGNoaWxkID0+IHtcbiAgICAgICAgcmV0dXJuIGNoaWxkLm5vZGVOYW1lID09PSAnTEknO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBpc1BhZGRpbmcgPSBub2RlID0+IHtcbiAgICAgIHJldHVybiBub2RlLmRhdGEgPT09IG5ic3AgfHwgaXNCciQ2KG5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgaXNMaXN0SXRlbVBhZGRlZCA9IG5vZGUgPT4ge1xuICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUobm9kZSA9PT0gbnVsbCB8fCBub2RlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBub2RlLmZpcnN0Q2hpbGQpICYmIG5vZGUuZmlyc3RDaGlsZCA9PT0gbm9kZS5sYXN0Q2hpbGQgJiYgaXNQYWRkaW5nKG5vZGUuZmlyc3RDaGlsZCk7XG4gICAgfTtcbiAgICBjb25zdCBpc0VtcHR5T3JQYWRkZWQgPSBlbG0gPT4ge1xuICAgICAgcmV0dXJuICFlbG0uZmlyc3RDaGlsZCB8fCBpc0xpc3RJdGVtUGFkZGVkKGVsbSk7XG4gICAgfTtcbiAgICBjb25zdCB0cmltTGlzdEl0ZW1zID0gZWxtcyA9PiB7XG4gICAgICByZXR1cm4gZWxtcy5sZW5ndGggPiAwICYmIGlzRW1wdHlPclBhZGRlZChlbG1zW2VsbXMubGVuZ3RoIC0gMV0pID8gZWxtcy5zbGljZSgwLCAtMSkgOiBlbG1zO1xuICAgIH07XG4gICAgY29uc3QgZ2V0UGFyZW50TGkgPSAoZG9tLCBub2RlKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnRCbG9jayA9IGRvbS5nZXRQYXJlbnQobm9kZSwgZG9tLmlzQmxvY2spO1xuICAgICAgcmV0dXJuIHBhcmVudEJsb2NrICYmIHBhcmVudEJsb2NrLm5vZGVOYW1lID09PSAnTEknID8gcGFyZW50QmxvY2sgOiBudWxsO1xuICAgIH07XG4gICAgY29uc3QgaXNQYXJlbnRCbG9ja0xpID0gKGRvbSwgbm9kZSkgPT4ge1xuICAgICAgcmV0dXJuICEhZ2V0UGFyZW50TGkoZG9tLCBub2RlKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNwbGl0ID0gKHBhcmVudE5vZGUsIHJuZykgPT4ge1xuICAgICAgY29uc3QgYmVmb3JlUm5nID0gcm5nLmNsb25lUmFuZ2UoKTtcbiAgICAgIGNvbnN0IGFmdGVyUm5nID0gcm5nLmNsb25lUmFuZ2UoKTtcbiAgICAgIGJlZm9yZVJuZy5zZXRTdGFydEJlZm9yZShwYXJlbnROb2RlKTtcbiAgICAgIGFmdGVyUm5nLnNldEVuZEFmdGVyKHBhcmVudE5vZGUpO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgYmVmb3JlUm5nLmNsb25lQ29udGVudHMoKSxcbiAgICAgICAgYWZ0ZXJSbmcuY2xvbmVDb250ZW50cygpXG4gICAgICBdO1xuICAgIH07XG4gICAgY29uc3QgZmluZEZpcnN0SW4gPSAobm9kZSwgcm9vdE5vZGUpID0+IHtcbiAgICAgIGNvbnN0IGNhcmV0UG9zID0gQ2FyZXRQb3NpdGlvbi5iZWZvcmUobm9kZSk7XG4gICAgICBjb25zdCBjYXJldFdhbGtlciA9IENhcmV0V2Fsa2VyKHJvb3ROb2RlKTtcbiAgICAgIGNvbnN0IG5ld0NhcmV0UG9zID0gY2FyZXRXYWxrZXIubmV4dChjYXJldFBvcyk7XG4gICAgICByZXR1cm4gbmV3Q2FyZXRQb3MgPyBuZXdDYXJldFBvcy50b1JhbmdlKCkgOiBudWxsO1xuICAgIH07XG4gICAgY29uc3QgZmluZExhc3RPZiA9IChub2RlLCByb290Tm9kZSkgPT4ge1xuICAgICAgY29uc3QgY2FyZXRQb3MgPSBDYXJldFBvc2l0aW9uLmFmdGVyKG5vZGUpO1xuICAgICAgY29uc3QgY2FyZXRXYWxrZXIgPSBDYXJldFdhbGtlcihyb290Tm9kZSk7XG4gICAgICBjb25zdCBuZXdDYXJldFBvcyA9IGNhcmV0V2Fsa2VyLnByZXYoY2FyZXRQb3MpO1xuICAgICAgcmV0dXJuIG5ld0NhcmV0UG9zID8gbmV3Q2FyZXRQb3MudG9SYW5nZSgpIDogbnVsbDtcbiAgICB9O1xuICAgIGNvbnN0IGluc2VydE1pZGRsZSA9ICh0YXJnZXQsIGVsbXMsIHJvb3ROb2RlLCBybmcpID0+IHtcbiAgICAgIGNvbnN0IHBhcnRzID0gZ2V0U3BsaXQodGFyZ2V0LCBybmcpO1xuICAgICAgY29uc3QgcGFyZW50RWxtID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgICBpZiAocGFyZW50RWxtKSB7XG4gICAgICAgIHBhcmVudEVsbS5pbnNlcnRCZWZvcmUocGFydHNbMF0sIHRhcmdldCk7XG4gICAgICAgIFRvb2xzLmVhY2goZWxtcywgbGkgPT4ge1xuICAgICAgICAgIHBhcmVudEVsbS5pbnNlcnRCZWZvcmUobGksIHRhcmdldCk7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXJlbnRFbG0uaW5zZXJ0QmVmb3JlKHBhcnRzWzFdLCB0YXJnZXQpO1xuICAgICAgICBwYXJlbnRFbG0ucmVtb3ZlQ2hpbGQodGFyZ2V0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmaW5kTGFzdE9mKGVsbXNbZWxtcy5sZW5ndGggLSAxXSwgcm9vdE5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0QmVmb3JlJDIgPSAodGFyZ2V0LCBlbG1zLCByb290Tm9kZSkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50RWxtID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgICBpZiAocGFyZW50RWxtKSB7XG4gICAgICAgIFRvb2xzLmVhY2goZWxtcywgZWxtID0+IHtcbiAgICAgICAgICBwYXJlbnRFbG0uaW5zZXJ0QmVmb3JlKGVsbSwgdGFyZ2V0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmluZEZpcnN0SW4odGFyZ2V0LCByb290Tm9kZSk7XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnRBZnRlciQyID0gKHRhcmdldCwgZWxtcywgcm9vdE5vZGUsIGRvbSkgPT4ge1xuICAgICAgZG9tLmluc2VydEFmdGVyKGVsbXMucmV2ZXJzZSgpLCB0YXJnZXQpO1xuICAgICAgcmV0dXJuIGZpbmRMYXN0T2YoZWxtc1swXSwgcm9vdE5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0QXRDYXJldCQxID0gKHNlcmlhbGl6ZXIsIGRvbSwgcm5nLCBmcmFnbWVudCkgPT4ge1xuICAgICAgY29uc3QgZG9tRnJhZ21lbnQgPSB0b0RvbUZyYWdtZW50KGRvbSwgc2VyaWFsaXplciwgZnJhZ21lbnQpO1xuICAgICAgY29uc3QgbGlUYXJnZXQgPSBnZXRQYXJlbnRMaShkb20sIHJuZy5zdGFydENvbnRhaW5lcik7XG4gICAgICBjb25zdCBsaUVsbXMgPSB0cmltTGlzdEl0ZW1zKGxpc3RJdGVtcyhkb21GcmFnbWVudC5maXJzdENoaWxkKSk7XG4gICAgICBjb25zdCBCRUdJTk5JTkcgPSAxLCBFTkQgPSAyO1xuICAgICAgY29uc3Qgcm9vdE5vZGUgPSBkb20uZ2V0Um9vdCgpO1xuICAgICAgY29uc3QgaXNBdCA9IGxvY2F0aW9uID0+IHtcbiAgICAgICAgY29uc3QgY2FyZXRQb3MgPSBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KHJuZyk7XG4gICAgICAgIGNvbnN0IGNhcmV0V2Fsa2VyID0gQ2FyZXRXYWxrZXIoZG9tLmdldFJvb3QoKSk7XG4gICAgICAgIGNvbnN0IG5ld1BvcyA9IGxvY2F0aW9uID09PSBCRUdJTk5JTkcgPyBjYXJldFdhbGtlci5wcmV2KGNhcmV0UG9zKSA6IGNhcmV0V2Fsa2VyLm5leHQoY2FyZXRQb3MpO1xuICAgICAgICBjb25zdCBuZXdQb3NOb2RlID0gbmV3UG9zID09PSBudWxsIHx8IG5ld1BvcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbmV3UG9zLmdldE5vZGUoKTtcbiAgICAgICAgcmV0dXJuIG5ld1Bvc05vZGUgPyBnZXRQYXJlbnRMaShkb20sIG5ld1Bvc05vZGUpICE9PSBsaVRhcmdldCA6IHRydWU7XG4gICAgICB9O1xuICAgICAgaWYgKCFsaVRhcmdldCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoaXNBdChCRUdJTk5JTkcpKSB7XG4gICAgICAgIHJldHVybiBpbnNlcnRCZWZvcmUkMihsaVRhcmdldCwgbGlFbG1zLCByb290Tm9kZSk7XG4gICAgICB9IGVsc2UgaWYgKGlzQXQoRU5EKSkge1xuICAgICAgICByZXR1cm4gaW5zZXJ0QWZ0ZXIkMihsaVRhcmdldCwgbGlFbG1zLCByb290Tm9kZSwgZG9tKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnNlcnRNaWRkbGUobGlUYXJnZXQsIGxpRWxtcywgcm9vdE5vZGUsIHJuZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG1lcmdlYWJsZVdyYXBwZWRFbGVtZW50cyA9IFsncHJlJ107XG4gICAgY29uc3Qgc2hvdWxkUGFzdGVDb250ZW50T25seSA9IChkb20sIGZyYWdtZW50LCBwYXJlbnROb2RlLCByb290KSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBmaXJzdE5vZGUgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuICAgICAgY29uc3QgbGFzdE5vZGUgPSBmcmFnbWVudC5sYXN0Q2hpbGQ7XG4gICAgICBjb25zdCBsYXN0ID0gbGFzdE5vZGUuYXR0cignZGF0YS1tY2UtdHlwZScpID09PSAnYm9va21hcmsnID8gbGFzdE5vZGUucHJldiA6IGxhc3ROb2RlO1xuICAgICAgY29uc3QgaXNQYXN0aW5nU2luZ2xlRWxlbWVudCA9IGZpcnN0Tm9kZSA9PT0gbGFzdDtcbiAgICAgIGNvbnN0IGlzV3JhcHBlZEVsZW1lbnQgPSBjb250YWlucyQyKG1lcmdlYWJsZVdyYXBwZWRFbGVtZW50cywgZmlyc3ROb2RlLm5hbWUpO1xuICAgICAgaWYgKGlzUGFzdGluZ1NpbmdsZUVsZW1lbnQgJiYgaXNXcmFwcGVkRWxlbWVudCkge1xuICAgICAgICBjb25zdCBpc0NvbnRlbnRFZGl0YWJsZSA9IGZpcnN0Tm9kZS5hdHRyKCdjb250ZW50ZWRpdGFibGUnKSAhPT0gJ2ZhbHNlJztcbiAgICAgICAgY29uc3QgaXNQYXN0aW5nSW5UaGVTYW1lQmxvY2tUYWcgPSAoKF9hID0gZG9tLmdldFBhcmVudChwYXJlbnROb2RlLCBkb20uaXNCbG9jaykpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSA9PT0gZmlyc3ROb2RlLm5hbWU7XG4gICAgICAgIGNvbnN0IGlzUGFzdGluZ0luQ29udGVudEVkaXRhYmxlID0gT3B0aW9uYWwuZnJvbShnZXRDb250ZW50RWRpdGFibGVSb290JDEocm9vdCwgcGFyZW50Tm9kZSkpLmZvcmFsbChpc0NvbnRlbnRFZGl0YWJsZVRydWUkMyk7XG4gICAgICAgIHJldHVybiBpc0NvbnRlbnRFZGl0YWJsZSAmJiBpc1Bhc3RpbmdJblRoZVNhbWVCbG9ja1RhZyAmJiBpc1Bhc3RpbmdJbkNvbnRlbnRFZGl0YWJsZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlzVGFibGVDZWxsID0gaXNUYWJsZUNlbGwkMztcbiAgICBjb25zdCBpc1RhYmxlQ2VsbENvbnRlbnRTZWxlY3RlZCA9IChkb20sIHJuZywgY2VsbCkgPT4ge1xuICAgICAgaWYgKGlzTm9uTnVsbGFibGUoY2VsbCkpIHtcbiAgICAgICAgY29uc3QgZW5kQ2VsbCA9IGRvbS5nZXRQYXJlbnQocm5nLmVuZENvbnRhaW5lciwgaXNUYWJsZUNlbGwpO1xuICAgICAgICByZXR1cm4gY2VsbCA9PT0gZW5kQ2VsbCAmJiBoYXNBbGxDb250ZW50c1NlbGVjdGVkKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGNlbGwpLCBybmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdmFsaWRJbnNlcnRpb24gPSAoZWRpdG9yLCB2YWx1ZSwgcGFyZW50Tm9kZSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgaWYgKHBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLW1jZS1ib2d1cycpID09PSAnYWxsJykge1xuICAgICAgICAoX2EgPSBwYXJlbnROb2RlLnBhcmVudE5vZGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pbnNlcnRCZWZvcmUoZWRpdG9yLmRvbS5jcmVhdGVGcmFnbWVudCh2YWx1ZSksIHBhcmVudE5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHBhcmVudE5vZGUuZmlyc3RDaGlsZDtcbiAgICAgICAgY29uc3Qgbm9kZTIgPSBwYXJlbnROb2RlLmxhc3RDaGlsZDtcbiAgICAgICAgaWYgKCFub2RlIHx8IG5vZGUgPT09IG5vZGUyICYmIG5vZGUubm9kZU5hbWUgPT09ICdCUicpIHtcbiAgICAgICAgICBlZGl0b3IuZG9tLnNldEhUTUwocGFyZW50Tm9kZSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Q29udGVudCh2YWx1ZSwgeyBub19ldmVudHM6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHRyaW1CcnNGcm9tVGFibGVDZWxsID0gKGRvbSwgZWxtKSA9PiB7XG4gICAgICBPcHRpb25hbC5mcm9tKGRvbS5nZXRQYXJlbnQoZWxtLCAndGQsdGgnKSkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKS5lYWNoKHRyaW1CbG9ja1RyYWlsaW5nQnIpO1xuICAgIH07XG4gICAgY29uc3QgcmVkdWNlSW5saW5lVGV4dEVsZW1lbnRzID0gKGVkaXRvciwgbWVyZ2UpID0+IHtcbiAgICAgIGNvbnN0IHRleHRJbmxpbmVFbGVtZW50cyA9IGVkaXRvci5zY2hlbWEuZ2V0VGV4dElubGluZUVsZW1lbnRzKCk7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgaWYgKG1lcmdlKSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgICBjb25zdCBlbGVtZW50VXRpbHMgPSBFbGVtZW50VXRpbHMoZWRpdG9yKTtcbiAgICAgICAgVG9vbHMuZWFjaChkb20uc2VsZWN0KCcqW2RhdGEtbWNlLWZyYWdtZW50XScpLCBub2RlID0+IHtcbiAgICAgICAgICBjb25zdCBpc0lubGluZSA9IGlzTm9uTnVsbGFibGUodGV4dElubGluZUVsZW1lbnRzW25vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pO1xuICAgICAgICAgIGlmIChpc0lubGluZSAmJiBoYXNJbmhlcml0YWJsZVN0eWxlcyhkb20sIG5vZGUpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnRFbGVtZW50OyBpc05vbk51bGxhYmxlKHBhcmVudE5vZGUpICYmIHBhcmVudE5vZGUgIT09IHJvb3Q7IHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc3R5bGVDb25mbGljdCA9IGhhc1N0eWxlQ29uZmxpY3QoZG9tLCBub2RlLCBwYXJlbnROb2RlKTtcbiAgICAgICAgICAgICAgaWYgKHN0eWxlQ29uZmxpY3QpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZWxlbWVudFV0aWxzLmNvbXBhcmUocGFyZW50Tm9kZSwgbm9kZSkpIHtcbiAgICAgICAgICAgICAgICBkb20ucmVtb3ZlKG5vZGUsIHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1hcmtGcmFnbWVudEVsZW1lbnRzID0gZnJhZ21lbnQgPT4ge1xuICAgICAgbGV0IG5vZGUgPSBmcmFnbWVudDtcbiAgICAgIHdoaWxlIChub2RlID0gbm9kZS53YWxrKCkpIHtcbiAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gMSkge1xuICAgICAgICAgIG5vZGUuYXR0cignZGF0YS1tY2UtZnJhZ21lbnQnLCAnMScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB1bm1hcmtGcmFnbWVudEVsZW1lbnRzID0gZWxtID0+IHtcbiAgICAgIFRvb2xzLmVhY2goZWxtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyksIGVsbSA9PiB7XG4gICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbWNlLWZyYWdtZW50Jyk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzUGFydE9mRnJhZ21lbnQgPSBub2RlID0+IHtcbiAgICAgIHJldHVybiAhIW5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLW1jZS1mcmFnbWVudCcpO1xuICAgIH07XG4gICAgY29uc3QgY2FuSGF2ZUNoaWxkcmVuID0gKGVkaXRvciwgbm9kZSkgPT4ge1xuICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUobm9kZSkgJiYgIWVkaXRvci5zY2hlbWEuZ2V0Vm9pZEVsZW1lbnRzKClbbm9kZS5ub2RlTmFtZV07XG4gICAgfTtcbiAgICBjb25zdCBtb3ZlU2VsZWN0aW9uVG9NYXJrZXIgPSAoZWRpdG9yLCBtYXJrZXIpID0+IHtcbiAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgbGV0IG5leHRSbmc7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgIGlmICghbWFya2VyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNlbGVjdGlvbi5zY3JvbGxJbnRvVmlldyhtYXJrZXIpO1xuICAgICAgY29uc3QgcGFyZW50RWRpdGFibGVFbG0gPSBnZXRDb250ZW50RWRpdGFibGVSb290JDEoZWRpdG9yLmdldEJvZHkoKSwgbWFya2VyKTtcbiAgICAgIGlmIChwYXJlbnRFZGl0YWJsZUVsbSAmJiBkb20uZ2V0Q29udGVudEVkaXRhYmxlKHBhcmVudEVkaXRhYmxlRWxtKSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICBkb20ucmVtb3ZlKG1hcmtlcik7XG4gICAgICAgIHNlbGVjdGlvbi5zZWxlY3QocGFyZW50RWRpdGFibGVFbG0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgcm5nID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgY29uc3Qgbm9kZSA9IG1hcmtlci5wcmV2aW91c1NpYmxpbmc7XG4gICAgICBpZiAoaXNUZXh0JGEobm9kZSkpIHtcbiAgICAgICAgcm5nLnNldFN0YXJ0KG5vZGUsIChfYiA9IChfYSA9IG5vZGUubm9kZVZhbHVlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAwKTtcbiAgICAgICAgY29uc3Qgbm9kZTIgPSBtYXJrZXIubmV4dFNpYmxpbmc7XG4gICAgICAgIGlmIChpc1RleHQkYShub2RlMikpIHtcbiAgICAgICAgICBub2RlLmFwcGVuZERhdGEobm9kZTIuZGF0YSk7XG4gICAgICAgICAgKF9jID0gbm9kZTIucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnJlbW92ZUNoaWxkKG5vZGUyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm5nLnNldFN0YXJ0QmVmb3JlKG1hcmtlcik7XG4gICAgICAgIHJuZy5zZXRFbmRCZWZvcmUobWFya2VyKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpbmROZXh0Q2FyZXRSbmcgPSBybmcgPT4ge1xuICAgICAgICBsZXQgY2FyZXRQb3MgPSBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KHJuZyk7XG4gICAgICAgIGNvbnN0IGNhcmV0V2Fsa2VyID0gQ2FyZXRXYWxrZXIoZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICAgIGNhcmV0UG9zID0gY2FyZXRXYWxrZXIubmV4dChjYXJldFBvcyk7XG4gICAgICAgIHJldHVybiBjYXJldFBvcyA9PT0gbnVsbCB8fCBjYXJldFBvcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2FyZXRQb3MudG9SYW5nZSgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHBhcmVudEJsb2NrID0gZG9tLmdldFBhcmVudChtYXJrZXIsIGRvbS5pc0Jsb2NrKTtcbiAgICAgIGRvbS5yZW1vdmUobWFya2VyKTtcbiAgICAgIGlmIChwYXJlbnRCbG9jayAmJiBkb20uaXNFbXB0eShwYXJlbnRCbG9jaykpIHtcbiAgICAgICAgY29uc3QgaXNDZWxsID0gaXNUYWJsZUNlbGwocGFyZW50QmxvY2spO1xuICAgICAgICBlbXB0eShTdWdhckVsZW1lbnQuZnJvbURvbShwYXJlbnRCbG9jaykpO1xuICAgICAgICBybmcuc2V0U3RhcnQocGFyZW50QmxvY2ssIDApO1xuICAgICAgICBybmcuc2V0RW5kKHBhcmVudEJsb2NrLCAwKTtcbiAgICAgICAgaWYgKCFpc0NlbGwgJiYgIWlzUGFydE9mRnJhZ21lbnQocGFyZW50QmxvY2spICYmIChuZXh0Um5nID0gZmluZE5leHRDYXJldFJuZyhybmcpKSkge1xuICAgICAgICAgIHJuZyA9IG5leHRSbmc7XG4gICAgICAgICAgZG9tLnJlbW92ZShwYXJlbnRCbG9jayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9tLmFkZChwYXJlbnRCbG9jaywgZG9tLmNyZWF0ZSgnYnInLCBpc0NlbGwgPyB7fSA6IHsgJ2RhdGEtbWNlLWJvZ3VzJzogJzEnIH0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgIH07XG4gICAgY29uc3QgZGVsZXRlU2VsZWN0ZWRDb250ZW50ID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBybmcgPSBub3JtYWxpemUoZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSk7XG4gICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgY29uc3Qgc3RhcnRDZWxsID0gZG9tLmdldFBhcmVudChybmcuc3RhcnRDb250YWluZXIsIGlzVGFibGVDZWxsKTtcbiAgICAgIGlmIChpc1RhYmxlQ2VsbENvbnRlbnRTZWxlY3RlZChkb20sIHJuZywgc3RhcnRDZWxsKSkge1xuICAgICAgICBkZWxldGVDZWxsQ29udGVudHMoZWRpdG9yLCBybmcsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKHN0YXJ0Q2VsbCkpO1xuICAgICAgfSBlbHNlIGlmIChybmcuc3RhcnRDb250YWluZXIgPT09IHJuZy5lbmRDb250YWluZXIgJiYgcm5nLmVuZE9mZnNldCAtIHJuZy5zdGFydE9mZnNldCA9PT0gMSAmJiBpc1RleHQkYShybmcuc3RhcnRDb250YWluZXIuY2hpbGROb2Rlc1tybmcuc3RhcnRPZmZzZXRdKSkge1xuICAgICAgICBybmcuZGVsZXRlQ29udGVudHMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkaXRvci5nZXREb2MoKS5leGVjQ29tbWFuZCgnRGVsZXRlJywgZmFsc2UpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZmluZE1hcmtlck5vZGUgPSBzY29wZSA9PiB7XG4gICAgICBmb3IgKGxldCBtYXJrZXJOb2RlID0gc2NvcGU7IG1hcmtlck5vZGU7IG1hcmtlck5vZGUgPSBtYXJrZXJOb2RlLndhbGsoKSkge1xuICAgICAgICBpZiAobWFya2VyTm9kZS5hdHRyKCdpZCcpID09PSAnbWNlX21hcmtlcicpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShtYXJrZXJOb2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGluc2VydEh0bWxBdENhcmV0ID0gKGVkaXRvciwgdmFsdWUsIGRldGFpbHMpID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uO1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IHBhcnNlciA9IGVkaXRvci5wYXJzZXI7XG4gICAgICBjb25zdCBtZXJnZSA9IGRldGFpbHMubWVyZ2U7XG4gICAgICBjb25zdCBzZXJpYWxpemVyID0gSHRtbFNlcmlhbGl6ZXIoeyB2YWxpZGF0ZTogdHJ1ZSB9LCBlZGl0b3Iuc2NoZW1hKTtcbiAgICAgIGNvbnN0IGJvb2ttYXJrSHRtbCA9ICc8c3BhbiBpZD1cIm1jZV9tYXJrZXJcIiBkYXRhLW1jZS10eXBlPVwiYm9va21hcmtcIj4mI3hGRUZGOzwvc3Bhbj4nO1xuICAgICAgaWYgKHZhbHVlLmluZGV4T2YoJ3skY2FyZXR9JykgPT09IC0xKSB7XG4gICAgICAgIHZhbHVlICs9ICd7JGNhcmV0fSc7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xce1xcJGNhcmV0XFx9LywgYm9va21hcmtIdG1sKTtcbiAgICAgIGxldCBybmcgPSBzZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBjb25zdCBjYXJldEVsZW1lbnQgPSBybmcuc3RhcnRDb250YWluZXI7XG4gICAgICBjb25zdCBib2R5ID0gZWRpdG9yLmdldEJvZHkoKTtcbiAgICAgIGlmIChjYXJldEVsZW1lbnQgPT09IGJvZHkgJiYgc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkpIHtcbiAgICAgICAgaWYgKGRvbS5pc0Jsb2NrKGJvZHkuZmlyc3RDaGlsZCkgJiYgY2FuSGF2ZUNoaWxkcmVuKGVkaXRvciwgYm9keS5maXJzdENoaWxkKSAmJiBkb20uaXNFbXB0eShib2R5LmZpcnN0Q2hpbGQpKSB7XG4gICAgICAgICAgcm5nID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgICAgIHJuZy5zZXRTdGFydChib2R5LmZpcnN0Q2hpbGQsIDApO1xuICAgICAgICAgIHJuZy5zZXRFbmQoYm9keS5maXJzdENoaWxkLCAwKTtcbiAgICAgICAgICBzZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkpIHtcbiAgICAgICAgZGVsZXRlU2VsZWN0ZWRDb250ZW50KGVkaXRvcik7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJlbnROb2RlID0gc2VsZWN0aW9uLmdldE5vZGUoKTtcbiAgICAgIGNvbnN0IHBhcnNlckFyZ3MgPSB7XG4gICAgICAgIGNvbnRleHQ6IHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgZGF0YTogZGV0YWlscy5kYXRhLFxuICAgICAgICBpbnNlcnQ6IHRydWVcbiAgICAgIH07XG4gICAgICBjb25zdCBmcmFnbWVudCA9IHBhcnNlci5wYXJzZSh2YWx1ZSwgcGFyc2VyQXJncyk7XG4gICAgICBpZiAoZGV0YWlscy5wYXN0ZSA9PT0gdHJ1ZSAmJiBpc0xpc3RGcmFnbWVudChlZGl0b3Iuc2NoZW1hLCBmcmFnbWVudCkgJiYgaXNQYXJlbnRCbG9ja0xpKGRvbSwgcGFyZW50Tm9kZSkpIHtcbiAgICAgICAgcm5nID0gaW5zZXJ0QXRDYXJldCQxKHNlcmlhbGl6ZXIsIGRvbSwgc2VsZWN0aW9uLmdldFJuZygpLCBmcmFnbWVudCk7XG4gICAgICAgIGlmIChybmcpIHtcbiAgICAgICAgICBzZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKGRldGFpbHMucGFzdGUgPT09IHRydWUgJiYgc2hvdWxkUGFzdGVDb250ZW50T25seShkb20sIGZyYWdtZW50LCBwYXJlbnROb2RlLCBlZGl0b3IuZ2V0Qm9keSgpKSkge1xuICAgICAgICAoX2EgPSBmcmFnbWVudC5maXJzdENoaWxkKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudW53cmFwKCk7XG4gICAgICB9XG4gICAgICBtYXJrRnJhZ21lbnRFbGVtZW50cyhmcmFnbWVudCk7XG4gICAgICBsZXQgbm9kZSA9IGZyYWdtZW50Lmxhc3RDaGlsZDtcbiAgICAgIGlmIChub2RlICYmIG5vZGUuYXR0cignaWQnKSA9PT0gJ21jZV9tYXJrZXInKSB7XG4gICAgICAgIGNvbnN0IG1hcmtlciA9IG5vZGU7XG4gICAgICAgIGZvciAobm9kZSA9IG5vZGUucHJldjsgbm9kZTsgbm9kZSA9IG5vZGUud2Fsayh0cnVlKSkge1xuICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09IDMgfHwgIWRvbS5pc0Jsb2NrKG5vZGUubmFtZSkpIHtcbiAgICAgICAgICAgIGlmIChub2RlLnBhcmVudCAmJiBlZGl0b3Iuc2NoZW1hLmlzVmFsaWRDaGlsZChub2RlLnBhcmVudC5uYW1lLCAnc3BhbicpKSB7XG4gICAgICAgICAgICAgIG5vZGUucGFyZW50Lmluc2VydChtYXJrZXIsIG5vZGUsIG5vZGUubmFtZSA9PT0gJ2JyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVkaXRvci5fc2VsZWN0aW9uT3ZlcnJpZGVzLnNob3dCbG9ja0NhcmV0Q29udGFpbmVyKHBhcmVudE5vZGUpO1xuICAgICAgaWYgKCFwYXJzZXJBcmdzLmludmFsaWQpIHtcbiAgICAgICAgdmFsdWUgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZShmcmFnbWVudCk7XG4gICAgICAgIHZhbGlkSW5zZXJ0aW9uKGVkaXRvciwgdmFsdWUsIHBhcmVudE5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRDb250ZW50KGJvb2ttYXJrSHRtbCk7XG4gICAgICAgIGxldCBwYXJlbnROb2RlID0gc2VsZWN0aW9uLmdldE5vZGUoKTtcbiAgICAgICAgbGV0IHRlbXBOb2RlO1xuICAgICAgICBjb25zdCByb290Tm9kZSA9IGVkaXRvci5nZXRCb2R5KCk7XG4gICAgICAgIGlmIChpc0RvY3VtZW50JDEocGFyZW50Tm9kZSkpIHtcbiAgICAgICAgICBwYXJlbnROb2RlID0gdGVtcE5vZGUgPSByb290Tm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZW1wTm9kZSA9IHBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHRlbXBOb2RlICYmIHRlbXBOb2RlICE9PSByb290Tm9kZSkge1xuICAgICAgICAgIHBhcmVudE5vZGUgPSB0ZW1wTm9kZTtcbiAgICAgICAgICB0ZW1wTm9kZSA9IHRlbXBOb2RlLnBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSBwYXJlbnROb2RlID09PSByb290Tm9kZSA/IHJvb3ROb2RlLmlubmVySFRNTCA6IGRvbS5nZXRPdXRlckhUTUwocGFyZW50Tm9kZSk7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBwYXJzZXIucGFyc2UodmFsdWUpO1xuICAgICAgICBjb25zdCBtYXJrZXJOb2RlID0gZmluZE1hcmtlck5vZGUocm9vdCk7XG4gICAgICAgIGNvbnN0IGVkaXRpbmdIb3N0ID0gbWFya2VyTm9kZS5iaW5kKGZpbmRDbG9zZXN0RWRpdGluZ0hvc3QpLmdldE9yKHJvb3QpO1xuICAgICAgICBtYXJrZXJOb2RlLmVhY2gobWFya2VyID0+IG1hcmtlci5yZXBsYWNlKGZyYWdtZW50KSk7XG4gICAgICAgIGNvbnN0IHRvRXh0cmFjdCA9IGZyYWdtZW50LmNoaWxkcmVuKCk7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IChfYiA9IGZyYWdtZW50LnBhcmVudCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogcm9vdDtcbiAgICAgICAgZnJhZ21lbnQudW53cmFwKCk7XG4gICAgICAgIGNvbnN0IGludmFsaWRDaGlsZHJlbiA9IGZpbHRlciQ1KHRvRXh0cmFjdCwgbm9kZSA9PiBpc0ludmFsaWQoZWRpdG9yLnNjaGVtYSwgbm9kZSwgcGFyZW50KSk7XG4gICAgICAgIGNsZWFuSW52YWxpZE5vZGVzKGludmFsaWRDaGlsZHJlbiwgZWRpdG9yLnNjaGVtYSwgZWRpdGluZ0hvc3QpO1xuICAgICAgICBmaWx0ZXIkMihwYXJzZXIuZ2V0Tm9kZUZpbHRlcnMoKSwgcGFyc2VyLmdldEF0dHJpYnV0ZUZpbHRlcnMoKSwgcm9vdCk7XG4gICAgICAgIHZhbHVlID0gc2VyaWFsaXplci5zZXJpYWxpemUocm9vdCk7XG4gICAgICAgIGlmIChwYXJlbnROb2RlID09PSByb290Tm9kZSkge1xuICAgICAgICAgIGRvbS5zZXRIVE1MKHJvb3ROb2RlLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9tLnNldE91dGVySFRNTChwYXJlbnROb2RlLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlZHVjZUlubGluZVRleHRFbGVtZW50cyhlZGl0b3IsIG1lcmdlKTtcbiAgICAgIG1vdmVTZWxlY3Rpb25Ub01hcmtlcihlZGl0b3IsIGRvbS5nZXQoJ21jZV9tYXJrZXInKSk7XG4gICAgICB1bm1hcmtGcmFnbWVudEVsZW1lbnRzKGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgdHJpbUJyc0Zyb21UYWJsZUNlbGwoZG9tLCBzZWxlY3Rpb24uZ2V0U3RhcnQoKSk7XG4gICAgICB1cGRhdGVDYXJldChlZGl0b3Iuc2NoZW1hLCBlZGl0b3IuZ2V0Qm9keSgpLCBzZWxlY3Rpb24uZ2V0U3RhcnQoKSk7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzVHJlZU5vZGUgPSBjb250ZW50ID0+IGNvbnRlbnQgaW5zdGFuY2VvZiBBc3ROb2RlO1xuXG4gICAgY29uc3QgbW92ZVNlbGVjdGlvbiA9IGVkaXRvciA9PiB7XG4gICAgICBpZiAoaGFzRm9jdXMoZWRpdG9yKSkge1xuICAgICAgICBmaXJzdFBvc2l0aW9uSW4oZWRpdG9yLmdldEJvZHkoKSkuZWFjaChwb3MgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBwb3MuZ2V0Tm9kZSgpO1xuICAgICAgICAgIGNvbnN0IGNhcmV0UG9zID0gaXNUYWJsZSQyKG5vZGUpID8gZmlyc3RQb3NpdGlvbkluKG5vZGUpLmdldE9yKHBvcykgOiBwb3M7XG4gICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcoY2FyZXRQb3MudG9SYW5nZSgpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXRFZGl0b3JIdG1sID0gKGVkaXRvciwgaHRtbCwgbm9TZWxlY3Rpb24pID0+IHtcbiAgICAgIGVkaXRvci5kb20uc2V0SFRNTChlZGl0b3IuZ2V0Qm9keSgpLCBodG1sKTtcbiAgICAgIGlmIChub1NlbGVjdGlvbiAhPT0gdHJ1ZSkge1xuICAgICAgICBtb3ZlU2VsZWN0aW9uKGVkaXRvcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXRDb250ZW50U3RyaW5nID0gKGVkaXRvciwgYm9keSwgY29udGVudCwgYXJncykgPT4ge1xuICAgICAgaWYgKGNvbnRlbnQubGVuZ3RoID09PSAwIHx8IC9eXFxzKyQvLnRlc3QoY29udGVudCkpIHtcbiAgICAgICAgY29uc3QgcGFkZCA9ICc8YnIgZGF0YS1tY2UtYm9ndXM9XCIxXCI+JztcbiAgICAgICAgaWYgKGJvZHkubm9kZU5hbWUgPT09ICdUQUJMRScpIHtcbiAgICAgICAgICBjb250ZW50ID0gJzx0cj48dGQ+JyArIHBhZGQgKyAnPC90ZD48L3RyPic7XG4gICAgICAgIH0gZWxzZSBpZiAoL14oVUx8T0wpJC8udGVzdChib2R5Lm5vZGVOYW1lKSkge1xuICAgICAgICAgIGNvbnRlbnQgPSAnPGxpPicgKyBwYWRkICsgJzwvbGk+JztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb3JjZWRSb290QmxvY2tOYW1lID0gZ2V0Rm9yY2VkUm9vdEJsb2NrKGVkaXRvcik7XG4gICAgICAgIGlmIChlZGl0b3Iuc2NoZW1hLmlzVmFsaWRDaGlsZChib2R5Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIGZvcmNlZFJvb3RCbG9ja05hbWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICBjb250ZW50ID0gcGFkZDtcbiAgICAgICAgICBjb250ZW50ID0gZWRpdG9yLmRvbS5jcmVhdGVIVE1MKGZvcmNlZFJvb3RCbG9ja05hbWUsIGdldEZvcmNlZFJvb3RCbG9ja0F0dHJzKGVkaXRvciksIGNvbnRlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKCFjb250ZW50KSB7XG4gICAgICAgICAgY29udGVudCA9IHBhZGQ7XG4gICAgICAgIH1cbiAgICAgICAgc2V0RWRpdG9ySHRtbChlZGl0b3IsIGNvbnRlbnQsIGFyZ3Mubm9fc2VsZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgIGh0bWw6IGNvbnRlbnRcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhcmdzLmZvcm1hdCAhPT0gJ3JhdycpIHtcbiAgICAgICAgICBjb250ZW50ID0gSHRtbFNlcmlhbGl6ZXIoeyB2YWxpZGF0ZTogZmFsc2UgfSwgZWRpdG9yLnNjaGVtYSkuc2VyaWFsaXplKGVkaXRvci5wYXJzZXIucGFyc2UoY29udGVudCwge1xuICAgICAgICAgICAgaXNSb290Q29udGVudDogdHJ1ZSxcbiAgICAgICAgICAgIGluc2VydDogdHJ1ZVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0cmltbWVkSHRtbCA9IGlzV3NQcmVzZXJ2ZUVsZW1lbnQoU3VnYXJFbGVtZW50LmZyb21Eb20oYm9keSkpID8gY29udGVudCA6IFRvb2xzLnRyaW0oY29udGVudCk7XG4gICAgICAgIHNldEVkaXRvckh0bWwoZWRpdG9yLCB0cmltbWVkSHRtbCwgYXJncy5ub19zZWxlY3Rpb24pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IHRyaW1tZWRIdG1sLFxuICAgICAgICAgIGh0bWw6IHRyaW1tZWRIdG1sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXRDb250ZW50VHJlZSA9IChlZGl0b3IsIGJvZHksIGNvbnRlbnQsIGFyZ3MpID0+IHtcbiAgICAgIGZpbHRlciQyKGVkaXRvci5wYXJzZXIuZ2V0Tm9kZUZpbHRlcnMoKSwgZWRpdG9yLnBhcnNlci5nZXRBdHRyaWJ1dGVGaWx0ZXJzKCksIGNvbnRlbnQpO1xuICAgICAgY29uc3QgaHRtbCA9IEh0bWxTZXJpYWxpemVyKHsgdmFsaWRhdGU6IGZhbHNlIH0sIGVkaXRvci5zY2hlbWEpLnNlcmlhbGl6ZShjb250ZW50KTtcbiAgICAgIGNvbnN0IHRyaW1tZWRIdG1sID0gaXNXc1ByZXNlcnZlRWxlbWVudChTdWdhckVsZW1lbnQuZnJvbURvbShib2R5KSkgPyBodG1sIDogVG9vbHMudHJpbShodG1sKTtcbiAgICAgIHNldEVkaXRvckh0bWwoZWRpdG9yLCB0cmltbWVkSHRtbCwgYXJncy5ub19zZWxlY3Rpb24pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgaHRtbDogdHJpbW1lZEh0bWxcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBzZXRDb250ZW50SW50ZXJuYWwgPSAoZWRpdG9yLCBjb250ZW50LCBhcmdzKSA9PiB7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShlZGl0b3IuZ2V0Qm9keSgpKS5tYXAoYm9keSA9PiB7XG4gICAgICAgIGlmIChpc1RyZWVOb2RlKGNvbnRlbnQpKSB7XG4gICAgICAgICAgcmV0dXJuIHNldENvbnRlbnRUcmVlKGVkaXRvciwgYm9keSwgY29udGVudCwgYXJncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHNldENvbnRlbnRTdHJpbmcoZWRpdG9yLCBib2R5LCBjb250ZW50LCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgfSkuZ2V0T3Ioe1xuICAgICAgICBjb250ZW50LFxuICAgICAgICBodG1sOiBpc1RyZWVOb2RlKGFyZ3MuY29udGVudCkgPyAnJyA6IGFyZ3MuY29udGVudFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFuY2VzdG9yJDEgPSAoc2NvcGUsIHByZWRpY2F0ZSwgaXNSb290KSA9PiBhbmNlc3RvciQ0KHNjb3BlLCBwcmVkaWNhdGUsIGlzUm9vdCkuaXNTb21lKCk7XG4gICAgY29uc3Qgc2libGluZyA9IChzY29wZSwgcHJlZGljYXRlKSA9PiBzaWJsaW5nJDEoc2NvcGUsIHByZWRpY2F0ZSkuaXNTb21lKCk7XG5cbiAgICBjb25zdCBlbnN1cmVJc1Jvb3QgPSBpc1Jvb3QgPT4gaXNGdW5jdGlvbihpc1Jvb3QpID8gaXNSb290IDogbmV2ZXI7XG4gICAgY29uc3QgYW5jZXN0b3IgPSAoc2NvcGUsIHRyYW5zZm9ybSwgaXNSb290KSA9PiB7XG4gICAgICBsZXQgZWxlbWVudCA9IHNjb3BlLmRvbTtcbiAgICAgIGNvbnN0IHN0b3AgPSBlbnN1cmVJc1Jvb3QoaXNSb290KTtcbiAgICAgIHdoaWxlIChlbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgZWwgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlbGVtZW50KTtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm0oZWwpO1xuICAgICAgICBpZiAodHJhbnNmb3JtZWQuaXNTb21lKCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtZWQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RvcChlbCkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGNsb3Nlc3QkMSA9IChzY29wZSwgdHJhbnNmb3JtLCBpc1Jvb3QpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0cmFuc2Zvcm0oc2NvcGUpO1xuICAgICAgY29uc3Qgc3RvcCA9IGVuc3VyZUlzUm9vdChpc1Jvb3QpO1xuICAgICAgcmV0dXJuIGN1cnJlbnQub3JUaHVuaygoKSA9PiBzdG9wKHNjb3BlKSA/IE9wdGlvbmFsLm5vbmUoKSA6IGFuY2VzdG9yKHNjb3BlLCB0cmFuc2Zvcm0sIHN0b3ApKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNFcSQzID0gaXNFcSQ1O1xuICAgIGNvbnN0IG1hdGNoZXNVbkluaGVyaXRlZEZvcm1hdFNlbGVjdG9yID0gKGVkLCBub2RlLCBuYW1lKSA9PiB7XG4gICAgICBjb25zdCBmb3JtYXRMaXN0ID0gZWQuZm9ybWF0dGVyLmdldChuYW1lKTtcbiAgICAgIGlmIChmb3JtYXRMaXN0KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybWF0TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGZvcm1hdExpc3RbaV07XG4gICAgICAgICAgaWYgKGlzU2VsZWN0b3JGb3JtYXQoZm9ybWF0KSAmJiBmb3JtYXQuaW5oZXJpdCA9PT0gZmFsc2UgJiYgZWQuZG9tLmlzKG5vZGUsIGZvcm1hdC5zZWxlY3RvcikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgY29uc3QgbWF0Y2hQYXJlbnRzID0gKGVkaXRvciwgbm9kZSwgbmFtZSwgdmFycywgc2ltaWxhcikgPT4ge1xuICAgICAgY29uc3Qgcm9vdCA9IGVkaXRvci5kb20uZ2V0Um9vdCgpO1xuICAgICAgaWYgKG5vZGUgPT09IHJvb3QpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2hlZE5vZGUgPSBlZGl0b3IuZG9tLmdldFBhcmVudChub2RlLCBlbG0gPT4ge1xuICAgICAgICBpZiAobWF0Y2hlc1VuSW5oZXJpdGVkRm9ybWF0U2VsZWN0b3IoZWRpdG9yLCBlbG0sIG5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsbS5wYXJlbnROb2RlID09PSByb290IHx8ICEhbWF0Y2hOb2RlKGVkaXRvciwgZWxtLCBuYW1lLCB2YXJzLCB0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuICEhbWF0Y2hOb2RlKGVkaXRvciwgbWF0Y2hlZE5vZGUsIG5hbWUsIHZhcnMsIHNpbWlsYXIpO1xuICAgIH07XG4gICAgY29uc3QgbWF0Y2hOYW1lID0gKGRvbSwgbm9kZSwgZm9ybWF0KSA9PiB7XG4gICAgICBpZiAoaXNJbmxpbmVGb3JtYXQoZm9ybWF0KSAmJiBpc0VxJDMobm9kZSwgZm9ybWF0LmlubGluZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNCbG9ja0Zvcm1hdChmb3JtYXQpICYmIGlzRXEkMyhub2RlLCBmb3JtYXQuYmxvY2spKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzU2VsZWN0b3JGb3JtYXQoZm9ybWF0KSkge1xuICAgICAgICByZXR1cm4gaXNFbGVtZW50JDYobm9kZSkgJiYgZG9tLmlzKG5vZGUsIGZvcm1hdC5zZWxlY3Rvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBjb25zdCBtYXRjaEl0ZW1zID0gKGRvbSwgbm9kZSwgZm9ybWF0LCBpdGVtTmFtZSwgc2ltaWxhciwgdmFycykgPT4ge1xuICAgICAgY29uc3QgaXRlbXMgPSBmb3JtYXRbaXRlbU5hbWVdO1xuICAgICAgY29uc3QgbWF0Y2hBdHRyaWJ1dGVzID0gaXRlbU5hbWUgPT09ICdhdHRyaWJ1dGVzJztcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGZvcm1hdC5vbm1hdGNoKSkge1xuICAgICAgICByZXR1cm4gZm9ybWF0Lm9ubWF0Y2gobm9kZSwgZm9ybWF0LCBpdGVtTmFtZSk7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbXMpIHtcbiAgICAgICAgaWYgKCFpc0FycmF5TGlrZShpdGVtcykpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBpdGVtcykge1xuICAgICAgICAgICAgaWYgKGhhcyQyKGl0ZW1zLCBrZXkpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbWF0Y2hBdHRyaWJ1dGVzID8gZG9tLmdldEF0dHJpYihub2RlLCBrZXkpIDogZ2V0U3R5bGUoZG9tLCBub2RlLCBrZXkpO1xuICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZFZhbHVlID0gcmVwbGFjZVZhcnMoaXRlbXNba2V5XSwgdmFycyk7XG4gICAgICAgICAgICAgIGNvbnN0IGlzRW1wdHlWYWx1ZSA9IGlzTnVsbGFibGUodmFsdWUpIHx8IGlzRW1wdHkkMyh2YWx1ZSk7XG4gICAgICAgICAgICAgIGlmIChpc0VtcHR5VmFsdWUgJiYgaXNOdWxsYWJsZShleHBlY3RlZFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzaW1pbGFyICYmIGlzRW1wdHlWYWx1ZSAmJiAhZm9ybWF0LmV4YWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICgoIXNpbWlsYXIgfHwgZm9ybWF0LmV4YWN0KSAmJiAhaXNFcSQzKHZhbHVlLCBub3JtYWxpemVTdHlsZVZhbHVlKGV4cGVjdGVkVmFsdWUsIGtleSkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChtYXRjaEF0dHJpYnV0ZXMgPyBkb20uZ2V0QXR0cmliKG5vZGUsIGl0ZW1zW2ldKSA6IGdldFN0eWxlKGRvbSwgbm9kZSwgaXRlbXNbaV0pKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBtYXRjaE5vZGUgPSAoZWQsIG5vZGUsIG5hbWUsIHZhcnMsIHNpbWlsYXIpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdExpc3QgPSBlZC5mb3JtYXR0ZXIuZ2V0KG5hbWUpO1xuICAgICAgY29uc3QgZG9tID0gZWQuZG9tO1xuICAgICAgaWYgKGZvcm1hdExpc3QgJiYgaXNFbGVtZW50JDYobm9kZSkpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtYXRMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0ID0gZm9ybWF0TGlzdFtpXTtcbiAgICAgICAgICBpZiAobWF0Y2hOYW1lKGVkLmRvbSwgbm9kZSwgZm9ybWF0KSAmJiBtYXRjaEl0ZW1zKGRvbSwgbm9kZSwgZm9ybWF0LCAnYXR0cmlidXRlcycsIHNpbWlsYXIsIHZhcnMpICYmIG1hdGNoSXRlbXMoZG9tLCBub2RlLCBmb3JtYXQsICdzdHlsZXMnLCBzaW1pbGFyLCB2YXJzKSkge1xuICAgICAgICAgICAgY29uc3QgY2xhc3NlcyA9IGZvcm1hdC5jbGFzc2VzO1xuICAgICAgICAgICAgaWYgKGNsYXNzZXMpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCBjbGFzc2VzLmxlbmd0aDsgeCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFlZC5kb20uaGFzQ2xhc3Mobm9kZSwgcmVwbGFjZVZhcnMoY2xhc3Nlc1t4XSwgdmFycykpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIGNvbnN0IG1hdGNoJDIgPSAoZWRpdG9yLCBuYW1lLCB2YXJzLCBub2RlLCBzaW1pbGFyKSA9PiB7XG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICByZXR1cm4gbWF0Y2hQYXJlbnRzKGVkaXRvciwgbm9kZSwgbmFtZSwgdmFycywgc2ltaWxhcik7XG4gICAgICB9XG4gICAgICBub2RlID0gZWRpdG9yLnNlbGVjdGlvbi5nZXROb2RlKCk7XG4gICAgICBpZiAobWF0Y2hQYXJlbnRzKGVkaXRvciwgbm9kZSwgbmFtZSwgdmFycywgc2ltaWxhcikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydE5vZGUgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KCk7XG4gICAgICBpZiAoc3RhcnROb2RlICE9PSBub2RlKSB7XG4gICAgICAgIGlmIChtYXRjaFBhcmVudHMoZWRpdG9yLCBzdGFydE5vZGUsIG5hbWUsIHZhcnMsIHNpbWlsYXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IG1hdGNoQWxsID0gKGVkaXRvciwgbmFtZXMsIHZhcnMpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZWRGb3JtYXROYW1lcyA9IFtdO1xuICAgICAgY29uc3QgY2hlY2tlZE1hcCA9IHt9O1xuICAgICAgY29uc3Qgc3RhcnRFbGVtZW50ID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCgpO1xuICAgICAgZWRpdG9yLmRvbS5nZXRQYXJlbnQoc3RhcnRFbGVtZW50LCBub2RlID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IG5hbWUgPSBuYW1lc1tpXTtcbiAgICAgICAgICBpZiAoIWNoZWNrZWRNYXBbbmFtZV0gJiYgbWF0Y2hOb2RlKGVkaXRvciwgbm9kZSwgbmFtZSwgdmFycykpIHtcbiAgICAgICAgICAgIGNoZWNrZWRNYXBbbmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgbWF0Y2hlZEZvcm1hdE5hbWVzLnB1c2gobmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCBlZGl0b3IuZG9tLmdldFJvb3QoKSk7XG4gICAgICByZXR1cm4gbWF0Y2hlZEZvcm1hdE5hbWVzO1xuICAgIH07XG4gICAgY29uc3QgY2xvc2VzdCA9IChlZGl0b3IsIG5hbWVzKSA9PiB7XG4gICAgICBjb25zdCBpc1Jvb3QgPSBlbG0gPT4gZXEoZWxtLCBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKSk7XG4gICAgICBjb25zdCBtYXRjaCA9IChlbG0sIG5hbWUpID0+IG1hdGNoTm9kZShlZGl0b3IsIGVsbS5kb20sIG5hbWUpID8gT3B0aW9uYWwuc29tZShuYW1lKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKGVkaXRvci5zZWxlY3Rpb24uZ2V0U3RhcnQodHJ1ZSkpLmJpbmQocmF3RWxtID0+IGNsb3Nlc3QkMShTdWdhckVsZW1lbnQuZnJvbURvbShyYXdFbG0pLCBlbG0gPT4gZmluZE1hcChuYW1lcywgbmFtZSA9PiBtYXRjaChlbG0sIG5hbWUpKSwgaXNSb290KSkuZ2V0T3JOdWxsKCk7XG4gICAgfTtcbiAgICBjb25zdCBjYW5BcHBseSA9IChlZGl0b3IsIG5hbWUpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdExpc3QgPSBlZGl0b3IuZm9ybWF0dGVyLmdldChuYW1lKTtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBpZiAoZm9ybWF0TGlzdCAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRWRpdGFibGUoKSkge1xuICAgICAgICBjb25zdCBzdGFydE5vZGUgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KCk7XG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBnZXRQYXJlbnRzJDIoZG9tLCBzdGFydE5vZGUpO1xuICAgICAgICBmb3IgKGxldCB4ID0gZm9ybWF0TGlzdC5sZW5ndGggLSAxOyB4ID49IDA7IHgtLSkge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGZvcm1hdExpc3RbeF07XG4gICAgICAgICAgaWYgKCFpc1NlbGVjdG9yRm9ybWF0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBpID0gcGFyZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKGRvbS5pcyhwYXJlbnRzW2ldLCBmb3JtYXQuc2VsZWN0b3IpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgY29uc3QgbWF0Y2hBbGxPbk5vZGUgPSAoZWRpdG9yLCBub2RlLCBmb3JtYXROYW1lcykgPT4gZm9sZGwoZm9ybWF0TmFtZXMsIChhY2MsIG5hbWUpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoU2ltaWxhciA9IGlzVmFyaWFibGVGb3JtYXROYW1lKGVkaXRvciwgbmFtZSk7XG4gICAgICBpZiAoZWRpdG9yLmZvcm1hdHRlci5tYXRjaE5vZGUobm9kZSwgbmFtZSwge30sIG1hdGNoU2ltaWxhcikpIHtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoW25hbWVdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgWldTUCA9IFpXU1AkMTtcbiAgICBjb25zdCBpbXBvcnROb2RlID0gKG93bmVyRG9jdW1lbnQsIG5vZGUpID0+IHtcbiAgICAgIHJldHVybiBvd25lckRvY3VtZW50LmltcG9ydE5vZGUobm9kZSwgdHJ1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRFbXB0eUNhcmV0Q29udGFpbmVycyA9IG5vZGUgPT4ge1xuICAgICAgY29uc3Qgbm9kZXMgPSBbXTtcbiAgICAgIGxldCB0ZW1wTm9kZSA9IG5vZGU7XG4gICAgICB3aGlsZSAodGVtcE5vZGUpIHtcbiAgICAgICAgaWYgKGlzVGV4dCRhKHRlbXBOb2RlKSAmJiB0ZW1wTm9kZS5kYXRhICE9PSBaV1NQIHx8IHRlbXBOb2RlLmNoaWxkTm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNFbGVtZW50JDYodGVtcE5vZGUpKSB7XG4gICAgICAgICAgbm9kZXMucHVzaCh0ZW1wTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGVtcE5vZGUgPSB0ZW1wTm9kZS5maXJzdENoaWxkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5vZGVzO1xuICAgIH07XG4gICAgY29uc3QgaXNDYXJldENvbnRhaW5lckVtcHR5ID0gbm9kZSA9PiB7XG4gICAgICByZXR1cm4gZ2V0RW1wdHlDYXJldENvbnRhaW5lcnMobm9kZSkubGVuZ3RoID4gMDtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRGaXJzdFRleHROb2RlID0gbm9kZSA9PiB7XG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICBjb25zdCB3YWxrZXIgPSBuZXcgRG9tVHJlZVdhbGtlcihub2RlLCBub2RlKTtcbiAgICAgICAgZm9yIChsZXQgdGVtcE5vZGUgPSB3YWxrZXIuY3VycmVudCgpOyB0ZW1wTm9kZTsgdGVtcE5vZGUgPSB3YWxrZXIubmV4dCgpKSB7XG4gICAgICAgICAgaWYgKGlzVGV4dCRhKHRlbXBOb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVDYXJldENvbnRhaW5lciA9IGZpbGwgPT4ge1xuICAgICAgY29uc3QgY2FyZXRDb250YWluZXIgPSBTdWdhckVsZW1lbnQuZnJvbVRhZygnc3BhbicpO1xuICAgICAgc2V0QWxsJDEoY2FyZXRDb250YWluZXIsIHtcbiAgICAgICAgJ2lkJzogQ0FSRVRfSUQsXG4gICAgICAgICdkYXRhLW1jZS1ib2d1cyc6ICcxJyxcbiAgICAgICAgJ2RhdGEtbWNlLXR5cGUnOiAnZm9ybWF0LWNhcmV0J1xuICAgICAgfSk7XG4gICAgICBpZiAoZmlsbCkge1xuICAgICAgICBhcHBlbmQkMShjYXJldENvbnRhaW5lciwgU3VnYXJFbGVtZW50LmZyb21UZXh0KFpXU1ApKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYXJldENvbnRhaW5lcjtcbiAgICB9O1xuICAgIGNvbnN0IHRyaW1ad3NwRnJvbUNhcmV0Q29udGFpbmVyID0gY2FyZXRDb250YWluZXJOb2RlID0+IHtcbiAgICAgIGNvbnN0IHRleHROb2RlID0gZmluZEZpcnN0VGV4dE5vZGUoY2FyZXRDb250YWluZXJOb2RlKTtcbiAgICAgIGlmICh0ZXh0Tm9kZSAmJiB0ZXh0Tm9kZS5kYXRhLmNoYXJBdCgwKSA9PT0gWldTUCkge1xuICAgICAgICB0ZXh0Tm9kZS5kZWxldGVEYXRhKDAsIDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRleHROb2RlO1xuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlQ2FyZXRDb250YWluZXJOb2RlID0gKGVkaXRvciwgbm9kZSwgbW92ZUNhcmV0ID0gdHJ1ZSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbSwgc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgIGlmIChpc0NhcmV0Q29udGFpbmVyRW1wdHkobm9kZSkpIHtcbiAgICAgICAgZGVsZXRlRWxlbWVudCQyKGVkaXRvciwgZmFsc2UsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5vZGUpLCBtb3ZlQ2FyZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgcm5nID0gc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgICBjb25zdCBibG9jayA9IGRvbS5nZXRQYXJlbnQobm9kZSwgZG9tLmlzQmxvY2spO1xuICAgICAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IHJuZy5zdGFydENvbnRhaW5lcjtcbiAgICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSBybmcuc3RhcnRPZmZzZXQ7XG4gICAgICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IHJuZy5lbmRDb250YWluZXI7XG4gICAgICAgIGNvbnN0IGVuZE9mZnNldCA9IHJuZy5lbmRPZmZzZXQ7XG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gdHJpbVp3c3BGcm9tQ2FyZXRDb250YWluZXIobm9kZSk7XG4gICAgICAgIGRvbS5yZW1vdmUobm9kZSwgdHJ1ZSk7XG4gICAgICAgIGlmIChzdGFydENvbnRhaW5lciA9PT0gdGV4dE5vZGUgJiYgc3RhcnRPZmZzZXQgPiAwKSB7XG4gICAgICAgICAgcm5nLnNldFN0YXJ0KHRleHROb2RlLCBzdGFydE9mZnNldCAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbmRDb250YWluZXIgPT09IHRleHROb2RlICYmIGVuZE9mZnNldCA+IDApIHtcbiAgICAgICAgICBybmcuc2V0RW5kKHRleHROb2RlLCBlbmRPZmZzZXQgLSAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmxvY2sgJiYgZG9tLmlzRW1wdHkoYmxvY2spKSB7XG4gICAgICAgICAgZmlsbFdpdGhQYWRkaW5nQnIoU3VnYXJFbGVtZW50LmZyb21Eb20oYmxvY2spKTtcbiAgICAgICAgfVxuICAgICAgICBzZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVDYXJldENvbnRhaW5lciA9IChlZGl0b3IsIG5vZGUsIG1vdmVDYXJldCA9IHRydWUpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb20sIHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3Rpb247XG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgbm9kZSA9IGdldFBhcmVudENhcmV0Q29udGFpbmVyKGVkaXRvci5nZXRCb2R5KCksIHNlbGVjdGlvbi5nZXRTdGFydCgpKTtcbiAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgd2hpbGUgKG5vZGUgPSBkb20uZ2V0KENBUkVUX0lEKSkge1xuICAgICAgICAgICAgcmVtb3ZlQ2FyZXRDb250YWluZXJOb2RlKGVkaXRvciwgbm9kZSwgbW92ZUNhcmV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZUNhcmV0Q29udGFpbmVyTm9kZShlZGl0b3IsIG5vZGUsIG1vdmVDYXJldCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnRDYXJldENvbnRhaW5lck5vZGUgPSAoZWRpdG9yLCBjYXJldENvbnRhaW5lciwgZm9ybWF0Tm9kZSkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBibG9jayA9IGRvbS5nZXRQYXJlbnQoZm9ybWF0Tm9kZSwgY3VycnkoaXNUZXh0QmxvY2skMSwgZWRpdG9yLnNjaGVtYSkpO1xuICAgICAgaWYgKGJsb2NrICYmIGRvbS5pc0VtcHR5KGJsb2NrKSkge1xuICAgICAgICAoX2EgPSBmb3JtYXROb2RlLnBhcmVudE5vZGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZXBsYWNlQ2hpbGQoY2FyZXRDb250YWluZXIsIGZvcm1hdE5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVtb3ZlVHJhaWxpbmdCcihTdWdhckVsZW1lbnQuZnJvbURvbShmb3JtYXROb2RlKSk7XG4gICAgICAgIGlmIChkb20uaXNFbXB0eShmb3JtYXROb2RlKSkge1xuICAgICAgICAgIChfYiA9IGZvcm1hdE5vZGUucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnJlcGxhY2VDaGlsZChjYXJldENvbnRhaW5lciwgZm9ybWF0Tm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9tLmluc2VydEFmdGVyKGNhcmV0Q29udGFpbmVyLCBmb3JtYXROb2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYXBwZW5kTm9kZSA9IChwYXJlbnROb2RlLCBub2RlKSA9PiB7XG4gICAgICBwYXJlbnROb2RlLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnRGb3JtYXROb2Rlc0ludG9DYXJldENvbnRhaW5lciA9IChmb3JtYXROb2RlcywgY2FyZXRDb250YWluZXIpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGNvbnN0IGlubmVyTW9zdEZvcm1hdE5vZGUgPSBmb2xkcihmb3JtYXROb2RlcywgKHBhcmVudE5vZGUsIGZvcm1hdE5vZGUpID0+IHtcbiAgICAgICAgcmV0dXJuIGFwcGVuZE5vZGUocGFyZW50Tm9kZSwgZm9ybWF0Tm9kZS5jbG9uZU5vZGUoZmFsc2UpKTtcbiAgICAgIH0sIGNhcmV0Q29udGFpbmVyKTtcbiAgICAgIGNvbnN0IGRvYyA9IChfYSA9IGlubmVyTW9zdEZvcm1hdE5vZGUub3duZXJEb2N1bWVudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZG9jdW1lbnQ7XG4gICAgICByZXR1cm4gYXBwZW5kTm9kZShpbm5lck1vc3RGb3JtYXROb2RlLCBkb2MuY3JlYXRlVGV4dE5vZGUoWldTUCkpO1xuICAgIH07XG4gICAgY29uc3QgY2xlYW5Gb3JtYXROb2RlID0gKGVkaXRvciwgY2FyZXRDb250YWluZXIsIGZvcm1hdE5vZGUsIG5hbWUsIHZhcnMsIHNpbWlsYXIpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGVkaXRvci5mb3JtYXR0ZXI7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgY29uc3QgdmFsaWRGb3JtYXRzID0gZmlsdGVyJDUoa2V5cyhmb3JtYXR0ZXIuZ2V0KCkpLCBmb3JtYXROYW1lID0+IGZvcm1hdE5hbWUgIT09IG5hbWUgJiYgIWNvbnRhaW5zJDEoZm9ybWF0TmFtZSwgJ3JlbW92ZWZvcm1hdCcpKTtcbiAgICAgIGNvbnN0IG1hdGNoZWRGb3JtYXRzID0gbWF0Y2hBbGxPbk5vZGUoZWRpdG9yLCBmb3JtYXROb2RlLCB2YWxpZEZvcm1hdHMpO1xuICAgICAgY29uc3QgdW5pcXVlRm9ybWF0cyA9IGZpbHRlciQ1KG1hdGNoZWRGb3JtYXRzLCBmbXROYW1lID0+ICFhcmVTaW1pbGFyRm9ybWF0cyhlZGl0b3IsIGZtdE5hbWUsIG5hbWUpKTtcbiAgICAgIGlmICh1bmlxdWVGb3JtYXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgY2xvbmVkRm9ybWF0Tm9kZSA9IGZvcm1hdE5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcbiAgICAgICAgZG9tLmFkZChjYXJldENvbnRhaW5lciwgY2xvbmVkRm9ybWF0Tm9kZSk7XG4gICAgICAgIGZvcm1hdHRlci5yZW1vdmUobmFtZSwgdmFycywgY2xvbmVkRm9ybWF0Tm9kZSwgc2ltaWxhcik7XG4gICAgICAgIGRvbS5yZW1vdmUoY2xvbmVkRm9ybWF0Tm9kZSk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGNsb25lZEZvcm1hdE5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5Q2FyZXRGb3JtYXQgPSAoZWRpdG9yLCBuYW1lLCB2YXJzKSA9PiB7XG4gICAgICBsZXQgY2FyZXRDb250YWluZXI7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uO1xuICAgICAgY29uc3QgZm9ybWF0TGlzdCA9IGVkaXRvci5mb3JtYXR0ZXIuZ2V0KG5hbWUpO1xuICAgICAgaWYgKCFmb3JtYXRMaXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlbGVjdGlvblJuZyA9IHNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIGxldCBvZmZzZXQgPSBzZWxlY3Rpb25Sbmcuc3RhcnRPZmZzZXQ7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBzZWxlY3Rpb25Sbmcuc3RhcnRDb250YWluZXI7XG4gICAgICBjb25zdCB0ZXh0ID0gY29udGFpbmVyLm5vZGVWYWx1ZTtcbiAgICAgIGNhcmV0Q29udGFpbmVyID0gZ2V0UGFyZW50Q2FyZXRDb250YWluZXIoZWRpdG9yLmdldEJvZHkoKSwgc2VsZWN0aW9uLmdldFN0YXJ0KCkpO1xuICAgICAgY29uc3Qgd29yZGNoYXJSZWdleCA9IC9bXlxcc1xcdTAwYTBcXHUwMGFkXFx1MjAwYlxcdWZlZmZdLztcbiAgICAgIGlmICh0ZXh0ICYmIG9mZnNldCA+IDAgJiYgb2Zmc2V0IDwgdGV4dC5sZW5ndGggJiYgd29yZGNoYXJSZWdleC50ZXN0KHRleHQuY2hhckF0KG9mZnNldCkpICYmIHdvcmRjaGFyUmVnZXgudGVzdCh0ZXh0LmNoYXJBdChvZmZzZXQgLSAxKSkpIHtcbiAgICAgICAgY29uc3QgYm9va21hcmsgPSBzZWxlY3Rpb24uZ2V0Qm9va21hcmsoKTtcbiAgICAgICAgc2VsZWN0aW9uUm5nLmNvbGxhcHNlKHRydWUpO1xuICAgICAgICBsZXQgcm5nID0gZXhwYW5kUm5nKGVkaXRvci5kb20sIHNlbGVjdGlvblJuZywgZm9ybWF0TGlzdCk7XG4gICAgICAgIHJuZyA9IHNwbGl0KHJuZyk7XG4gICAgICAgIGVkaXRvci5mb3JtYXR0ZXIuYXBwbHkobmFtZSwgdmFycywgcm5nKTtcbiAgICAgICAgc2VsZWN0aW9uLm1vdmVUb0Jvb2ttYXJrKGJvb2ttYXJrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB0ZXh0Tm9kZSA9IGNhcmV0Q29udGFpbmVyID8gZmluZEZpcnN0VGV4dE5vZGUoY2FyZXRDb250YWluZXIpIDogbnVsbDtcbiAgICAgICAgaWYgKCFjYXJldENvbnRhaW5lciB8fCAodGV4dE5vZGUgPT09IG51bGwgfHwgdGV4dE5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRleHROb2RlLmRhdGEpICE9PSBaV1NQKSB7XG4gICAgICAgICAgY2FyZXRDb250YWluZXIgPSBpbXBvcnROb2RlKGVkaXRvci5nZXREb2MoKSwgY3JlYXRlQ2FyZXRDb250YWluZXIodHJ1ZSkuZG9tKTtcbiAgICAgICAgICB0ZXh0Tm9kZSA9IGNhcmV0Q29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgc2VsZWN0aW9uUm5nLmluc2VydE5vZGUoY2FyZXRDb250YWluZXIpO1xuICAgICAgICAgIG9mZnNldCA9IDE7XG4gICAgICAgICAgZWRpdG9yLmZvcm1hdHRlci5hcHBseShuYW1lLCB2YXJzLCBjYXJldENvbnRhaW5lcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWRpdG9yLmZvcm1hdHRlci5hcHBseShuYW1lLCB2YXJzLCBjYXJldENvbnRhaW5lcik7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZWN0aW9uLnNldEN1cnNvckxvY2F0aW9uKHRleHROb2RlLCBvZmZzZXQpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlQ2FyZXRGb3JtYXQgPSAoZWRpdG9yLCBuYW1lLCB2YXJzLCBzaW1pbGFyKSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgIGxldCBoYXNDb250ZW50QWZ0ZXIgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGZvcm1hdExpc3QgPSBlZGl0b3IuZm9ybWF0dGVyLmdldChuYW1lKTtcbiAgICAgIGlmICghZm9ybWF0TGlzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBybmcgPSBzZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBybmcuc3RhcnRDb250YWluZXI7XG4gICAgICBjb25zdCBvZmZzZXQgPSBybmcuc3RhcnRPZmZzZXQ7XG4gICAgICBsZXQgbm9kZSA9IGNvbnRhaW5lcjtcbiAgICAgIGlmIChpc1RleHQkYShjb250YWluZXIpKSB7XG4gICAgICAgIGlmIChvZmZzZXQgIT09IGNvbnRhaW5lci5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgIGhhc0NvbnRlbnRBZnRlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcbiAgICAgIGxldCBmb3JtYXROb2RlO1xuICAgICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgaWYgKG1hdGNoTm9kZShlZGl0b3IsIG5vZGUsIG5hbWUsIHZhcnMsIHNpbWlsYXIpKSB7XG4gICAgICAgICAgZm9ybWF0Tm9kZSA9IG5vZGU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgICBoYXNDb250ZW50QWZ0ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudHMucHVzaChub2RlKTtcbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIGlmICghZm9ybWF0Tm9kZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoaGFzQ29udGVudEFmdGVyKSB7XG4gICAgICAgIGNvbnN0IGJvb2ttYXJrID0gc2VsZWN0aW9uLmdldEJvb2ttYXJrKCk7XG4gICAgICAgIHJuZy5jb2xsYXBzZSh0cnVlKTtcbiAgICAgICAgbGV0IGV4cGFuZGVkUm5nID0gZXhwYW5kUm5nKGRvbSwgcm5nLCBmb3JtYXRMaXN0LCB0cnVlKTtcbiAgICAgICAgZXhwYW5kZWRSbmcgPSBzcGxpdChleHBhbmRlZFJuZyk7XG4gICAgICAgIGVkaXRvci5mb3JtYXR0ZXIucmVtb3ZlKG5hbWUsIHZhcnMsIGV4cGFuZGVkUm5nLCBzaW1pbGFyKTtcbiAgICAgICAgc2VsZWN0aW9uLm1vdmVUb0Jvb2ttYXJrKGJvb2ttYXJrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNhcmV0Q29udGFpbmVyID0gZ2V0UGFyZW50Q2FyZXRDb250YWluZXIoZWRpdG9yLmdldEJvZHkoKSwgZm9ybWF0Tm9kZSk7XG4gICAgICAgIGNvbnN0IG5ld0NhcmV0Q29udGFpbmVyID0gY3JlYXRlQ2FyZXRDb250YWluZXIoZmFsc2UpLmRvbTtcbiAgICAgICAgaW5zZXJ0Q2FyZXRDb250YWluZXJOb2RlKGVkaXRvciwgbmV3Q2FyZXRDb250YWluZXIsIGNhcmV0Q29udGFpbmVyICE9PSBudWxsICYmIGNhcmV0Q29udGFpbmVyICE9PSB2b2lkIDAgPyBjYXJldENvbnRhaW5lciA6IGZvcm1hdE5vZGUpO1xuICAgICAgICBjb25zdCBjbGVhbmVkRm9ybWF0Tm9kZSA9IGNsZWFuRm9ybWF0Tm9kZShlZGl0b3IsIG5ld0NhcmV0Q29udGFpbmVyLCBmb3JtYXROb2RlLCBuYW1lLCB2YXJzLCBzaW1pbGFyKTtcbiAgICAgICAgY29uc3QgY2FyZXRUZXh0Tm9kZSA9IGluc2VydEZvcm1hdE5vZGVzSW50b0NhcmV0Q29udGFpbmVyKHBhcmVudHMuY29uY2F0KGNsZWFuZWRGb3JtYXROb2RlLnRvQXJyYXkoKSksIG5ld0NhcmV0Q29udGFpbmVyKTtcbiAgICAgICAgaWYgKGNhcmV0Q29udGFpbmVyKSB7XG4gICAgICAgICAgcmVtb3ZlQ2FyZXRDb250YWluZXJOb2RlKGVkaXRvciwgY2FyZXRDb250YWluZXIsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBzZWxlY3Rpb24uc2V0Q3Vyc29yTG9jYXRpb24oY2FyZXRUZXh0Tm9kZSwgMSk7XG4gICAgICAgIGlmIChkb20uaXNFbXB0eShmb3JtYXROb2RlKSkge1xuICAgICAgICAgIGRvbS5yZW1vdmUoZm9ybWF0Tm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGRpc2FibGVDYXJldENvbnRhaW5lciA9IChlZGl0b3IsIGtleUNvZGUsIG1vdmVDYXJldCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbiwgYm9keSA9IGVkaXRvci5nZXRCb2R5KCk7XG4gICAgICByZW1vdmVDYXJldENvbnRhaW5lcihlZGl0b3IsIG51bGwsIG1vdmVDYXJldCk7XG4gICAgICBpZiAoKGtleUNvZGUgPT09IDggfHwga2V5Q29kZSA9PT0gNDYpICYmIHNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpICYmIHNlbGVjdGlvbi5nZXRTdGFydCgpLmlubmVySFRNTCA9PT0gWldTUCkge1xuICAgICAgICByZW1vdmVDYXJldENvbnRhaW5lcihlZGl0b3IsIGdldFBhcmVudENhcmV0Q29udGFpbmVyKGJvZHksIHNlbGVjdGlvbi5nZXRTdGFydCgpKSk7XG4gICAgICB9XG4gICAgICBpZiAoa2V5Q29kZSA9PT0gMzcgfHwga2V5Q29kZSA9PT0gMzkpIHtcbiAgICAgICAgcmVtb3ZlQ2FyZXRDb250YWluZXIoZWRpdG9yLCBnZXRQYXJlbnRDYXJldENvbnRhaW5lcihib2R5LCBzZWxlY3Rpb24uZ2V0U3RhcnQoKSkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZW5kc1dpdGhOYnNwID0gZWxlbWVudCA9PiBpc1RleHQkYShlbGVtZW50KSAmJiBlbmRzV2l0aChlbGVtZW50LmRhdGEsIG5ic3ApO1xuICAgIGNvbnN0IHNldHVwJHUgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLm9uKCdtb3VzZXVwIGtleWRvd24nLCBlID0+IHtcbiAgICAgICAgZGlzYWJsZUNhcmV0Q29udGFpbmVyKGVkaXRvciwgZS5rZXlDb2RlLCBlbmRzV2l0aE5ic3AoZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKS5lbmRDb250YWluZXIpKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlQ2FyZXRGb3JtYXQgPSBmb3JtYXROb2RlcyA9PiB7XG4gICAgICBjb25zdCBjYXJldENvbnRhaW5lciA9IGNyZWF0ZUNhcmV0Q29udGFpbmVyKGZhbHNlKTtcbiAgICAgIGNvbnN0IGlubmVyTW9zdCA9IGluc2VydEZvcm1hdE5vZGVzSW50b0NhcmV0Q29udGFpbmVyKGZvcm1hdE5vZGVzLCBjYXJldENvbnRhaW5lci5kb20pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2FyZXRDb250YWluZXIsXG4gICAgICAgIGNhcmV0UG9zaXRpb246IENhcmV0UG9zaXRpb24oaW5uZXJNb3N0LCAwKVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHJlcGxhY2VXaXRoQ2FyZXRGb3JtYXQgPSAodGFyZ2V0Tm9kZSwgZm9ybWF0Tm9kZXMpID0+IHtcbiAgICAgIGNvbnN0IHtjYXJldENvbnRhaW5lciwgY2FyZXRQb3NpdGlvbn0gPSBjcmVhdGVDYXJldEZvcm1hdChmb3JtYXROb2Rlcyk7XG4gICAgICBiZWZvcmUkMyhTdWdhckVsZW1lbnQuZnJvbURvbSh0YXJnZXROb2RlKSwgY2FyZXRDb250YWluZXIpO1xuICAgICAgcmVtb3ZlJDUoU3VnYXJFbGVtZW50LmZyb21Eb20odGFyZ2V0Tm9kZSkpO1xuICAgICAgcmV0dXJuIGNhcmV0UG9zaXRpb247XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVDYXJldEZvcm1hdEF0U3RhcnQkMSA9IChybmcsIGZvcm1hdE5vZGVzKSA9PiB7XG4gICAgICBjb25zdCB7Y2FyZXRDb250YWluZXIsIGNhcmV0UG9zaXRpb259ID0gY3JlYXRlQ2FyZXRGb3JtYXQoZm9ybWF0Tm9kZXMpO1xuICAgICAgcm5nLmluc2VydE5vZGUoY2FyZXRDb250YWluZXIuZG9tKTtcbiAgICAgIHJldHVybiBjYXJldFBvc2l0aW9uO1xuICAgIH07XG4gICAgY29uc3QgaXNGb3JtYXRFbGVtZW50ID0gKGVkaXRvciwgZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgaW5saW5lRWxlbWVudHMgPSBlZGl0b3Iuc2NoZW1hLmdldFRleHRJbmxpbmVFbGVtZW50cygpO1xuICAgICAgcmV0dXJuIGhhcyQyKGlubGluZUVsZW1lbnRzLCBuYW1lKGVsZW1lbnQpKSAmJiAhaXNDYXJldE5vZGUoZWxlbWVudC5kb20pICYmICFpc0JvZ3VzJDIoZWxlbWVudC5kb20pO1xuICAgIH07XG4gICAgY29uc3QgaXNFbXB0eUNhcmV0Rm9ybWF0RWxlbWVudCA9IGVsZW1lbnQgPT4ge1xuICAgICAgcmV0dXJuIGlzQ2FyZXROb2RlKGVsZW1lbnQuZG9tKSAmJiBpc0NhcmV0Q29udGFpbmVyRW1wdHkoZWxlbWVudC5kb20pO1xuICAgIH07XG5cbiAgICBjb25zdCBwb3N0UHJvY2Vzc0hvb2tzID0ge307XG4gICAgY29uc3QgaXNQcmUgPSBtYXRjaE5vZGVOYW1lcyhbJ3ByZSddKTtcbiAgICBjb25zdCBhZGRQb3N0UHJvY2Vzc0hvb2sgPSAobmFtZSwgaG9vaykgPT4ge1xuICAgICAgY29uc3QgaG9va3MgPSBwb3N0UHJvY2Vzc0hvb2tzW25hbWVdO1xuICAgICAgaWYgKCFob29rcykge1xuICAgICAgICBwb3N0UHJvY2Vzc0hvb2tzW25hbWVdID0gW107XG4gICAgICB9XG4gICAgICBwb3N0UHJvY2Vzc0hvb2tzW25hbWVdLnB1c2goaG9vayk7XG4gICAgfTtcbiAgICBjb25zdCBwb3N0UHJvY2VzcyQxID0gKG5hbWUsIGVkaXRvcikgPT4ge1xuICAgICAgaWYgKGhhcyQyKHBvc3RQcm9jZXNzSG9va3MsIG5hbWUpKSB7XG4gICAgICAgIGVhY2gkZShwb3N0UHJvY2Vzc0hvb2tzW25hbWVdLCBob29rID0+IHtcbiAgICAgICAgICBob29rKGVkaXRvcik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgYWRkUG9zdFByb2Nlc3NIb29rKCdwcmUnLCBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIGNvbnN0IGhhc1ByZVNpYmxpbmcgPSBibG9ja3MgPT4gcHJlID0+IHtcbiAgICAgICAgY29uc3QgcHJldiA9IHByZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgIHJldHVybiBpc1ByZShwcmV2KSAmJiBjb250YWlucyQyKGJsb2NrcywgcHJldik7XG4gICAgICB9O1xuICAgICAgY29uc3Qgam9pblByZSA9IChwcmUxLCBwcmUyKSA9PiB7XG4gICAgICAgIGNvbnN0IHNQcmUyID0gU3VnYXJFbGVtZW50LmZyb21Eb20ocHJlMik7XG4gICAgICAgIGNvbnN0IGRvYyA9IGRvY3VtZW50T3JPd25lcihzUHJlMikuZG9tO1xuICAgICAgICByZW1vdmUkNShzUHJlMik7XG4gICAgICAgIGFwcGVuZChTdWdhckVsZW1lbnQuZnJvbURvbShwcmUxKSwgW1xuICAgICAgICAgIFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdicicsIGRvYyksXG4gICAgICAgICAgU3VnYXJFbGVtZW50LmZyb21UYWcoJ2JyJywgZG9jKSxcbiAgICAgICAgICAuLi5jaGlsZHJlbiQxKHNQcmUyKVxuICAgICAgICBdKTtcbiAgICAgIH07XG4gICAgICBpZiAoIXJuZy5jb2xsYXBzZWQpIHtcbiAgICAgICAgY29uc3QgYmxvY2tzID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRTZWxlY3RlZEJsb2NrcygpO1xuICAgICAgICBjb25zdCBwcmVCbG9ja3MgPSBmaWx0ZXIkNShmaWx0ZXIkNShibG9ja3MsIGlzUHJlKSwgaGFzUHJlU2libGluZyhibG9ja3MpKTtcbiAgICAgICAgZWFjaCRlKHByZUJsb2NrcywgcHJlID0+IHtcbiAgICAgICAgICBqb2luUHJlKHByZS5wcmV2aW91c1NpYmxpbmcsIHByZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgbGlzdEl0ZW1TdHlsZXMgPSBbXG4gICAgICAnZm9udFdlaWdodCcsXG4gICAgICAnZm9udFN0eWxlJyxcbiAgICAgICdjb2xvcicsXG4gICAgICAnZm9udFNpemUnLFxuICAgICAgJ2ZvbnRGYW1pbHknXG4gICAgXTtcbiAgICBjb25zdCBoYXNMaXN0U3R5bGVzID0gZm10ID0+IGlzT2JqZWN0KGZtdC5zdHlsZXMpICYmIGV4aXN0cyhrZXlzKGZtdC5zdHlsZXMpLCBuYW1lID0+IGNvbnRhaW5zJDIobGlzdEl0ZW1TdHlsZXMsIG5hbWUpKTtcbiAgICBjb25zdCBmaW5kRXhwYW5kZWRMaXN0SXRlbUZvcm1hdCA9IGZvcm1hdHMgPT4gZmluZCQyKGZvcm1hdHMsIGZtdCA9PiBpc0lubGluZUZvcm1hdChmbXQpICYmIGZtdC5pbmxpbmUgPT09ICdzcGFuJyAmJiBoYXNMaXN0U3R5bGVzKGZtdCkpO1xuICAgIGNvbnN0IGdldEV4cGFuZGVkTGlzdEl0ZW1Gb3JtYXQgPSAoZm9ybWF0dGVyLCBmb3JtYXQpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdExpc3QgPSBmb3JtYXR0ZXIuZ2V0KGZvcm1hdCk7XG4gICAgICByZXR1cm4gaXNBcnJheSQxKGZvcm1hdExpc3QpID8gZmluZEV4cGFuZGVkTGlzdEl0ZW1Gb3JtYXQoZm9ybWF0TGlzdCkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBpc1JuZ1N0YXJ0QXRTdGFydE9mRWxlbWVudCA9IChybmcsIGVsbSkgPT4gcHJldlBvc2l0aW9uKGVsbSwgQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChybmcpKS5pc05vbmUoKTtcbiAgICBjb25zdCBpc1JuZ0VuZEF0RW5kT2ZFbGVtZW50ID0gKHJuZywgZWxtKSA9PiB7XG4gICAgICByZXR1cm4gbmV4dFBvc2l0aW9uKGVsbSwgQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VFbmQocm5nKSkuZXhpc3RzKHBvcyA9PiAhaXNCciQ2KHBvcy5nZXROb2RlKCkpIHx8IG5leHRQb3NpdGlvbihlbG0sIHBvcykuaXNTb21lKCkpID09PSBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IGlzRWRpdGFibGVMaXN0SXRlbSA9IGRvbSA9PiBlbG0gPT4gaXNMaXN0SXRlbSQyKGVsbSkgJiYgZG9tLmlzRWRpdGFibGUoZWxtKTtcbiAgICBjb25zdCBnZXRGdWxseVNlbGVjdGVkQmxvY2tzID0gc2VsZWN0aW9uID0+IHtcbiAgICAgIGNvbnN0IGJsb2NrcyA9IHNlbGVjdGlvbi5nZXRTZWxlY3RlZEJsb2NrcygpO1xuICAgICAgY29uc3Qgcm5nID0gc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGlmIChibG9ja3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBpc1JuZ1N0YXJ0QXRTdGFydE9mRWxlbWVudChybmcsIGJsb2Nrc1swXSkgJiYgaXNSbmdFbmRBdEVuZE9mRWxlbWVudChybmcsIGJsb2Nrc1swXSkgPyBibG9ja3MgOiBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZpcnN0ID0gaGVhZChibG9ja3MpLmZpbHRlcihlbG0gPT4gaXNSbmdTdGFydEF0U3RhcnRPZkVsZW1lbnQocm5nLCBlbG0pKS50b0FycmF5KCk7XG4gICAgICAgIGNvbnN0IGxhc3QgPSBsYXN0JDMoYmxvY2tzKS5maWx0ZXIoZWxtID0+IGlzUm5nRW5kQXRFbmRPZkVsZW1lbnQocm5nLCBlbG0pKS50b0FycmF5KCk7XG4gICAgICAgIGNvbnN0IG1pZGRsZSA9IGJsb2Nrcy5zbGljZSgxLCAtMSk7XG4gICAgICAgIHJldHVybiBmaXJzdC5jb25jYXQobWlkZGxlKS5jb25jYXQobGFzdCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRGdWxseVNlbGVjdGVkTGlzdEl0ZW1zID0gc2VsZWN0aW9uID0+IGZpbHRlciQ1KGdldEZ1bGx5U2VsZWN0ZWRCbG9ja3Moc2VsZWN0aW9uKSwgaXNFZGl0YWJsZUxpc3RJdGVtKHNlbGVjdGlvbi5kb20pKTtcbiAgICBjb25zdCBnZXRQYXJ0aWFsbHlTZWxlY3RlZExpc3RJdGVtcyA9IHNlbGVjdGlvbiA9PiBmaWx0ZXIkNShzZWxlY3Rpb24uZ2V0U2VsZWN0ZWRCbG9ja3MoKSwgaXNFZGl0YWJsZUxpc3RJdGVtKHNlbGVjdGlvbi5kb20pKTtcblxuICAgIGNvbnN0IGVhY2gkOCA9IFRvb2xzLmVhY2g7XG4gICAgY29uc3QgaXNFbGVtZW50Tm9kZSA9IG5vZGUgPT4gaXNFbGVtZW50JDYobm9kZSkgJiYgIWlzQm9va21hcmtOb2RlJDEobm9kZSkgJiYgIWlzQ2FyZXROb2RlKG5vZGUpICYmICFpc0JvZ3VzJDIobm9kZSk7XG4gICAgY29uc3QgZmluZEVsZW1lbnRTaWJsaW5nID0gKG5vZGUsIHNpYmxpbmdOYW1lKSA9PiB7XG4gICAgICBmb3IgKGxldCBzaWJsaW5nID0gbm9kZTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmdbc2libGluZ05hbWVdKSB7XG4gICAgICAgIGlmIChpc1RleHQkYShzaWJsaW5nKSAmJiBpc05vdEVtcHR5KHNpYmxpbmcuZGF0YSkpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNFbGVtZW50JDYoc2libGluZykgJiYgIWlzQm9va21hcmtOb2RlJDEoc2libGluZykpIHtcbiAgICAgICAgICByZXR1cm4gc2libGluZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfTtcbiAgICBjb25zdCBtZXJnZVNpYmxpbmdzTm9kZXMgPSAoZWRpdG9yLCBwcmV2LCBuZXh0KSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50VXRpbHMgPSBFbGVtZW50VXRpbHMoZWRpdG9yKTtcbiAgICAgIGNvbnN0IGlzUHJldkVkaXRhYmxlID0gaXNFbGVtZW50JDYocHJldikgJiYgaXNFZGl0YWJsZSQyKHByZXYpO1xuICAgICAgY29uc3QgaXNOZXh0RWRpdGFibGUgPSBpc0VsZW1lbnQkNihuZXh0KSAmJiBpc0VkaXRhYmxlJDIobmV4dCk7XG4gICAgICBpZiAoaXNQcmV2RWRpdGFibGUgJiYgaXNOZXh0RWRpdGFibGUpIHtcbiAgICAgICAgY29uc3QgcHJldlNpYmxpbmcgPSBmaW5kRWxlbWVudFNpYmxpbmcocHJldiwgJ3ByZXZpb3VzU2libGluZycpO1xuICAgICAgICBjb25zdCBuZXh0U2libGluZyA9IGZpbmRFbGVtZW50U2libGluZyhuZXh0LCAnbmV4dFNpYmxpbmcnKTtcbiAgICAgICAgaWYgKGVsZW1lbnRVdGlscy5jb21wYXJlKHByZXZTaWJsaW5nLCBuZXh0U2libGluZykpIHtcbiAgICAgICAgICBmb3IgKGxldCBzaWJsaW5nID0gcHJldlNpYmxpbmcubmV4dFNpYmxpbmc7IHNpYmxpbmcgJiYgc2libGluZyAhPT0gbmV4dFNpYmxpbmc7KSB7XG4gICAgICAgICAgICBjb25zdCB0bXBTaWJsaW5nID0gc2libGluZztcbiAgICAgICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgcHJldlNpYmxpbmcuYXBwZW5kQ2hpbGQodG1wU2libGluZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVkaXRvci5kb20ucmVtb3ZlKG5leHRTaWJsaW5nKTtcbiAgICAgICAgICBUb29scy5lYWNoKFRvb2xzLmdyZXAobmV4dFNpYmxpbmcuY2hpbGROb2RlcyksIG5vZGUgPT4ge1xuICAgICAgICAgICAgcHJldlNpYmxpbmcuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHByZXZTaWJsaW5nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9O1xuICAgIGNvbnN0IG1lcmdlU2libGluZ3MgPSAoZWRpdG9yLCBmb3JtYXQsIHZhcnMsIG5vZGUpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGlmIChub2RlICYmIGZvcm1hdC5tZXJnZV9zaWJsaW5ncyAhPT0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgbmV3Tm9kZSA9IChfYSA9IG1lcmdlU2libGluZ3NOb2RlcyhlZGl0b3IsIGdldE5vbldoaXRlU3BhY2VTaWJsaW5nKG5vZGUpLCBub2RlKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbm9kZTtcbiAgICAgICAgbWVyZ2VTaWJsaW5nc05vZGVzKGVkaXRvciwgbmV3Tm9kZSwgZ2V0Tm9uV2hpdGVTcGFjZVNpYmxpbmcobmV3Tm9kZSwgdHJ1ZSkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY2xlYXJDaGlsZFN0eWxlcyA9IChkb20sIGZvcm1hdCwgbm9kZSkgPT4ge1xuICAgICAgaWYgKGZvcm1hdC5jbGVhcl9jaGlsZF9zdHlsZXMpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSBmb3JtYXQubGlua3MgPyAnKjpub3QoYSknIDogJyonO1xuICAgICAgICBlYWNoJDgoZG9tLnNlbGVjdChzZWxlY3Rvciwgbm9kZSksIGNoaWxkTm9kZSA9PiB7XG4gICAgICAgICAgaWYgKGlzRWxlbWVudE5vZGUoY2hpbGROb2RlKSAmJiBpc0VkaXRhYmxlJDIoY2hpbGROb2RlKSkge1xuICAgICAgICAgICAgZWFjaCQ4KGZvcm1hdC5zdHlsZXMsIChfdmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgZG9tLnNldFN0eWxlKGNoaWxkTm9kZSwgbmFtZSwgJycpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHByb2Nlc3NDaGlsZEVsZW1lbnRzID0gKG5vZGUsIGZpbHRlciwgcHJvY2VzcykgPT4ge1xuICAgICAgZWFjaCQ4KG5vZGUuY2hpbGROb2Rlcywgbm9kZSA9PiB7XG4gICAgICAgIGlmIChpc0VsZW1lbnROb2RlKG5vZGUpKSB7XG4gICAgICAgICAgaWYgKGZpbHRlcihub2RlKSkge1xuICAgICAgICAgICAgcHJvY2Vzcyhub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5vZGUuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgICAgICBwcm9jZXNzQ2hpbGRFbGVtZW50cyhub2RlLCBmaWx0ZXIsIHByb2Nlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCB1bndyYXBFbXB0eVNwYW4gPSAoZG9tLCBub2RlKSA9PiB7XG4gICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gJ1NQQU4nICYmIGRvbS5nZXRBdHRyaWJzKG5vZGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkb20ucmVtb3ZlKG5vZGUsIHRydWUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaGFzU3R5bGUgPSAoZG9tLCBuYW1lKSA9PiBub2RlID0+ICEhKG5vZGUgJiYgZ2V0U3R5bGUoZG9tLCBub2RlLCBuYW1lKSk7XG4gICAgY29uc3QgYXBwbHlTdHlsZSA9IChkb20sIG5hbWUsIHZhbHVlKSA9PiBub2RlID0+IHtcbiAgICAgIGRvbS5zZXRTdHlsZShub2RlLCBuYW1lLCB2YWx1ZSk7XG4gICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoJ3N0eWxlJykgPT09ICcnKSB7XG4gICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgfVxuICAgICAgdW53cmFwRW1wdHlTcGFuKGRvbSwgbm9kZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbW92ZVJlc3VsdCA9IEFkdC5nZW5lcmF0ZShbXG4gICAgICB7IGtlZXA6IFtdIH0sXG4gICAgICB7IHJlbmFtZTogWyduYW1lJ10gfSxcbiAgICAgIHsgcmVtb3ZlZDogW10gfVxuICAgIF0pO1xuICAgIGNvbnN0IE1DRV9BVFRSX1JFID0gL14oc3JjfGhyZWZ8c3R5bGUpJC87XG4gICAgY29uc3QgZWFjaCQ3ID0gVG9vbHMuZWFjaDtcbiAgICBjb25zdCBpc0VxJDIgPSBpc0VxJDU7XG4gICAgY29uc3QgaXNUYWJsZUNlbGxPclJvdyA9IG5vZGUgPT4gL14oVFJ8VEh8VEQpJC8udGVzdChub2RlLm5vZGVOYW1lKTtcbiAgICBjb25zdCBpc0NoaWxkT2ZJbmxpbmVQYXJlbnQgPSAoZG9tLCBub2RlLCBwYXJlbnQpID0+IGRvbS5pc0NoaWxkT2Yobm9kZSwgcGFyZW50KSAmJiBub2RlICE9PSBwYXJlbnQgJiYgIWRvbS5pc0Jsb2NrKHBhcmVudCk7XG4gICAgY29uc3QgZ2V0Q29udGFpbmVyID0gKGVkLCBybmcsIHN0YXJ0KSA9PiB7XG4gICAgICBsZXQgY29udGFpbmVyID0gcm5nW3N0YXJ0ID8gJ3N0YXJ0Q29udGFpbmVyJyA6ICdlbmRDb250YWluZXInXTtcbiAgICAgIGxldCBvZmZzZXQgPSBybmdbc3RhcnQgPyAnc3RhcnRPZmZzZXQnIDogJ2VuZE9mZnNldCddO1xuICAgICAgaWYgKGlzRWxlbWVudCQ2KGNvbnRhaW5lcikpIHtcbiAgICAgICAgY29uc3QgbGFzdElkeCA9IGNvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmICghc3RhcnQgJiYgb2Zmc2V0KSB7XG4gICAgICAgICAgb2Zmc2V0LS07XG4gICAgICAgIH1cbiAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLmNoaWxkTm9kZXNbb2Zmc2V0ID4gbGFzdElkeCA/IGxhc3RJZHggOiBvZmZzZXRdO1xuICAgICAgfVxuICAgICAgaWYgKGlzVGV4dCRhKGNvbnRhaW5lcikgJiYgc3RhcnQgJiYgb2Zmc2V0ID49IGNvbnRhaW5lci5kYXRhLmxlbmd0aCkge1xuICAgICAgICBjb250YWluZXIgPSBuZXcgRG9tVHJlZVdhbGtlcihjb250YWluZXIsIGVkLmdldEJvZHkoKSkubmV4dCgpIHx8IGNvbnRhaW5lcjtcbiAgICAgIH1cbiAgICAgIGlmIChpc1RleHQkYShjb250YWluZXIpICYmICFzdGFydCAmJiBvZmZzZXQgPT09IDApIHtcbiAgICAgICAgY29udGFpbmVyID0gbmV3IERvbVRyZWVXYWxrZXIoY29udGFpbmVyLCBlZC5nZXRCb2R5KCkpLnByZXYoKSB8fCBjb250YWluZXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGFpbmVyO1xuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplVGFibGVTZWxlY3Rpb24gPSAobm9kZSwgc3RhcnQpID0+IHtcbiAgICAgIGNvbnN0IHByb3AgPSBzdGFydCA/ICdmaXJzdENoaWxkJyA6ICdsYXN0Q2hpbGQnO1xuICAgICAgY29uc3QgY2hpbGROb2RlID0gbm9kZVtwcm9wXTtcbiAgICAgIGlmIChpc1RhYmxlQ2VsbE9yUm93KG5vZGUpICYmIGNoaWxkTm9kZSkge1xuICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gJ1RSJykge1xuICAgICAgICAgIHJldHVybiBjaGlsZE5vZGVbcHJvcF0gfHwgY2hpbGROb2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBjaGlsZE5vZGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlO1xuICAgIH07XG4gICAgY29uc3Qgd3JhcCQxID0gKGRvbSwgbm9kZSwgbmFtZSwgYXR0cnMpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGNvbnN0IHdyYXBwZXIgPSBkb20uY3JlYXRlKG5hbWUsIGF0dHJzKTtcbiAgICAgIChfYSA9IG5vZGUucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmluc2VydEJlZm9yZSh3cmFwcGVyLCBub2RlKTtcbiAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9O1xuICAgIGNvbnN0IHdyYXBXaXRoU2libGluZ3MgPSAoZG9tLCBub2RlLCBuZXh0LCBuYW1lLCBhdHRycykgPT4ge1xuICAgICAgY29uc3Qgc3RhcnQgPSBTdWdhckVsZW1lbnQuZnJvbURvbShub2RlKTtcbiAgICAgIGNvbnN0IHdyYXBwZXIgPSBTdWdhckVsZW1lbnQuZnJvbURvbShkb20uY3JlYXRlKG5hbWUsIGF0dHJzKSk7XG4gICAgICBjb25zdCBzaWJsaW5ncyA9IG5leHQgPyBuZXh0U2libGluZ3Moc3RhcnQpIDogcHJldlNpYmxpbmdzKHN0YXJ0KTtcbiAgICAgIGFwcGVuZCh3cmFwcGVyLCBzaWJsaW5ncyk7XG4gICAgICBpZiAobmV4dCkge1xuICAgICAgICBiZWZvcmUkMyhzdGFydCwgd3JhcHBlcik7XG4gICAgICAgIHByZXBlbmQod3JhcHBlciwgc3RhcnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWZ0ZXIkNChzdGFydCwgd3JhcHBlcik7XG4gICAgICAgIGFwcGVuZCQxKHdyYXBwZXIsIHN0YXJ0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3cmFwcGVyLmRvbTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQ29sb3JGb3JtYXRBbmRBbmNob3IgPSAobm9kZSwgZm9ybWF0KSA9PiBmb3JtYXQubGlua3MgJiYgbm9kZS5ub2RlTmFtZSA9PT0gJ0EnO1xuICAgIGNvbnN0IHJlbW92ZU5vZGUgPSAoZWQsIG5vZGUsIGZvcm1hdCkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgIGxldCByb290QmxvY2tFbG07XG4gICAgICBjb25zdCBkb20gPSBlZC5kb207XG4gICAgICBjb25zdCBmb3JjZWRSb290QmxvY2sgPSBnZXRGb3JjZWRSb290QmxvY2soZWQpO1xuICAgICAgaWYgKGlzQmxvY2tGb3JtYXQoZm9ybWF0KSkge1xuICAgICAgICBpZiAocGFyZW50Tm9kZSA9PT0gZG9tLmdldFJvb3QoKSkge1xuICAgICAgICAgIGlmICghZm9ybWF0Lmxpc3RfYmxvY2sgfHwgIWlzRXEkMihub2RlLCBmb3JtYXQubGlzdF9ibG9jaykpIHtcbiAgICAgICAgICAgIGVhY2gkZShmcm9tKG5vZGUuY2hpbGROb2RlcyksIG5vZGUgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXNWYWxpZChlZCwgZm9yY2VkUm9vdEJsb2NrLCBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyb290QmxvY2tFbG0pIHtcbiAgICAgICAgICAgICAgICAgIHJvb3RCbG9ja0VsbSA9IHdyYXAkMShkb20sIG5vZGUsIGZvcmNlZFJvb3RCbG9jayk7XG4gICAgICAgICAgICAgICAgICBkb20uc2V0QXR0cmlicyhyb290QmxvY2tFbG0sIGdldEZvcmNlZFJvb3RCbG9ja0F0dHJzKGVkKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJvb3RCbG9ja0VsbS5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcm9vdEJsb2NrRWxtID0gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNNaXhlZEZvcm1hdChmb3JtYXQpICYmICFpc0VxJDIoZm9ybWF0LmlubGluZSwgbm9kZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZG9tLnJlbW92ZShub2RlLCB0cnVlKTtcbiAgICB9O1xuICAgIGNvbnN0IHByb2Nlc3NGb3JtYXRBdHRyT3JTdHlsZSA9IChuYW1lLCB2YWx1ZSwgdmFycykgPT4ge1xuICAgICAgaWYgKGlzTnVtYmVyKG5hbWUpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogdmFsdWUsXG4gICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICB2YWx1ZTogcmVwbGFjZVZhcnModmFsdWUsIHZhcnMpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVFbXB0eVN0eWxlQXR0cmlidXRlSWZOZWVkZWQgPSAoZG9tLCBlbG0pID0+IHtcbiAgICAgIGlmIChkb20uZ2V0QXR0cmliKGVsbSwgJ3N0eWxlJykgPT09ICcnKSB7XG4gICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XG4gICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbWNlLXN0eWxlJyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVTdHlsZXMgPSAoZG9tLCBlbG0sIGZvcm1hdCwgdmFycywgY29tcGFyZU5vZGUpID0+IHtcbiAgICAgIGxldCBzdHlsZXNNb2RpZmllZCA9IGZhbHNlO1xuICAgICAgZWFjaCQ3KGZvcm1hdC5zdHlsZXMsICh2YWx1ZSwgbmFtZSkgPT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgbmFtZTogc3R5bGVOYW1lLFxuICAgICAgICAgIHZhbHVlOiBzdHlsZVZhbHVlXG4gICAgICAgIH0gPSBwcm9jZXNzRm9ybWF0QXR0ck9yU3R5bGUobmFtZSwgdmFsdWUsIHZhcnMpO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkU3R5bGVWYWx1ZSA9IG5vcm1hbGl6ZVN0eWxlVmFsdWUoc3R5bGVWYWx1ZSwgc3R5bGVOYW1lKTtcbiAgICAgICAgaWYgKGZvcm1hdC5yZW1vdmVfc2ltaWxhciB8fCBpc051bGwoc3R5bGVWYWx1ZSkgfHwgIWlzRWxlbWVudCQ2KGNvbXBhcmVOb2RlKSB8fCBpc0VxJDIoZ2V0U3R5bGUoZG9tLCBjb21wYXJlTm9kZSwgc3R5bGVOYW1lKSwgbm9ybWFsaXplZFN0eWxlVmFsdWUpKSB7XG4gICAgICAgICAgZG9tLnNldFN0eWxlKGVsbSwgc3R5bGVOYW1lLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgc3R5bGVzTW9kaWZpZWQgPSB0cnVlO1xuICAgICAgfSk7XG4gICAgICBpZiAoc3R5bGVzTW9kaWZpZWQpIHtcbiAgICAgICAgcmVtb3ZlRW1wdHlTdHlsZUF0dHJpYnV0ZUlmTmVlZGVkKGRvbSwgZWxtKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZUxpc3RTdHlsZUZvcm1hdHMgPSAoZWRpdG9yLCBuYW1lLCB2YXJzKSA9PiB7XG4gICAgICBpZiAobmFtZSA9PT0gJ3JlbW92ZWZvcm1hdCcpIHtcbiAgICAgICAgZWFjaCRlKGdldFBhcnRpYWxseVNlbGVjdGVkTGlzdEl0ZW1zKGVkaXRvci5zZWxlY3Rpb24pLCBsaSA9PiB7XG4gICAgICAgICAgZWFjaCRlKGxpc3RJdGVtU3R5bGVzLCBuYW1lID0+IGVkaXRvci5kb20uc2V0U3R5bGUobGksIG5hbWUsICcnKSk7XG4gICAgICAgICAgcmVtb3ZlRW1wdHlTdHlsZUF0dHJpYnV0ZUlmTmVlZGVkKGVkaXRvci5kb20sIGxpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZXRFeHBhbmRlZExpc3RJdGVtRm9ybWF0KGVkaXRvci5mb3JtYXR0ZXIsIG5hbWUpLmVhY2gobGlGbXQgPT4ge1xuICAgICAgICAgIGVhY2gkZShnZXRQYXJ0aWFsbHlTZWxlY3RlZExpc3RJdGVtcyhlZGl0b3Iuc2VsZWN0aW9uKSwgbGkgPT4gcmVtb3ZlU3R5bGVzKGVkaXRvci5kb20sIGxpLCBsaUZtdCwgdmFycywgbnVsbCkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZU5vZGVGb3JtYXRJbnRlcm5hbCA9IChlZCwgZm9ybWF0LCB2YXJzLCBub2RlLCBjb21wYXJlTm9kZSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWQuZG9tO1xuICAgICAgY29uc3QgZWxlbWVudFV0aWxzID0gRWxlbWVudFV0aWxzKGVkKTtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IGVkLnNjaGVtYTtcbiAgICAgIGlmIChpc0lubGluZUZvcm1hdChmb3JtYXQpICYmIGlzVHJhbnNwYXJlbnRFbGVtZW50TmFtZShzY2hlbWEsIGZvcm1hdC5pbmxpbmUpICYmIGlzVHJhbnNwYXJlbnRCbG9jayhzY2hlbWEsIG5vZGUpICYmIG5vZGUucGFyZW50RWxlbWVudCA9PT0gZWQuZ2V0Qm9keSgpKSB7XG4gICAgICAgIHJlbW92ZU5vZGUoZWQsIG5vZGUsIGZvcm1hdCk7XG4gICAgICAgIHJldHVybiByZW1vdmVSZXN1bHQucmVtb3ZlZCgpO1xuICAgICAgfVxuICAgICAgaWYgKCFmb3JtYXQuY2VGYWxzZU92ZXJyaWRlICYmIG5vZGUgJiYgZG9tLmdldENvbnRlbnRFZGl0YWJsZVBhcmVudChub2RlKSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICByZXR1cm4gcmVtb3ZlUmVzdWx0LmtlZXAoKTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlICYmICFtYXRjaE5hbWUoZG9tLCBub2RlLCBmb3JtYXQpICYmICFpc0NvbG9yRm9ybWF0QW5kQW5jaG9yKG5vZGUsIGZvcm1hdCkpIHtcbiAgICAgICAgcmV0dXJuIHJlbW92ZVJlc3VsdC5rZWVwKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBlbG0gPSBub2RlO1xuICAgICAgY29uc3QgcHJlc2VydmVBdHRyaWJ1dGVzID0gZm9ybWF0LnByZXNlcnZlX2F0dHJpYnV0ZXM7XG4gICAgICBpZiAoaXNJbmxpbmVGb3JtYXQoZm9ybWF0KSAmJiBmb3JtYXQucmVtb3ZlID09PSAnYWxsJyAmJiBpc0FycmF5JDEocHJlc2VydmVBdHRyaWJ1dGVzKSkge1xuICAgICAgICBjb25zdCBhdHRyc1RvUHJlc2VydmUgPSBmaWx0ZXIkNShkb20uZ2V0QXR0cmlicyhlbG0pLCBhdHRyID0+IGNvbnRhaW5zJDIocHJlc2VydmVBdHRyaWJ1dGVzLCBhdHRyLm5hbWUudG9Mb3dlckNhc2UoKSkpO1xuICAgICAgICBkb20ucmVtb3ZlQWxsQXR0cmlicyhlbG0pO1xuICAgICAgICBlYWNoJGUoYXR0cnNUb1ByZXNlcnZlLCBhdHRyID0+IGRvbS5zZXRBdHRyaWIoZWxtLCBhdHRyLm5hbWUsIGF0dHIudmFsdWUpKTtcbiAgICAgICAgaWYgKGF0dHJzVG9QcmVzZXJ2ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHJlbW92ZVJlc3VsdC5yZW5hbWUoJ3NwYW4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvcm1hdC5yZW1vdmUgIT09ICdhbGwnKSB7XG4gICAgICAgIHJlbW92ZVN0eWxlcyhkb20sIGVsbSwgZm9ybWF0LCB2YXJzLCBjb21wYXJlTm9kZSk7XG4gICAgICAgIGVhY2gkNyhmb3JtYXQuYXR0cmlidXRlcywgKHZhbHVlLCBuYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgbmFtZTogYXR0ck5hbWUsXG4gICAgICAgICAgICB2YWx1ZTogYXR0clZhbHVlXG4gICAgICAgICAgfSA9IHByb2Nlc3NGb3JtYXRBdHRyT3JTdHlsZShuYW1lLCB2YWx1ZSwgdmFycyk7XG4gICAgICAgICAgaWYgKGZvcm1hdC5yZW1vdmVfc2ltaWxhciB8fCBpc051bGwoYXR0clZhbHVlKSB8fCAhaXNFbGVtZW50JDYoY29tcGFyZU5vZGUpIHx8IGlzRXEkMihkb20uZ2V0QXR0cmliKGNvbXBhcmVOb2RlLCBhdHRyTmFtZSksIGF0dHJWYWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChhdHRyTmFtZSA9PT0gJ2NsYXNzJykge1xuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBkb20uZ2V0QXR0cmliKGVsbSwgYXR0ck5hbWUpO1xuICAgICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlT3V0ID0gJyc7XG4gICAgICAgICAgICAgICAgZWFjaCRlKGN1cnJlbnRWYWx1ZS5zcGxpdCgvXFxzKy8pLCBjbHMgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKC9tY2VcXC1cXHcrLy50ZXN0KGNscykpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVPdXQgKz0gKHZhbHVlT3V0ID8gJyAnIDogJycpICsgY2xzO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZU91dCkge1xuICAgICAgICAgICAgICAgICAgZG9tLnNldEF0dHJpYihlbG0sIGF0dHJOYW1lLCB2YWx1ZU91dCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoTUNFX0FUVFJfUkUudGVzdChhdHRyTmFtZSkpIHtcbiAgICAgICAgICAgICAgZWxtLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1tY2UtJyArIGF0dHJOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhdHRyTmFtZSA9PT0gJ3N0eWxlJyAmJiBtYXRjaE5vZGVOYW1lcyhbJ2xpJ10pKGVsbSkgJiYgZG9tLmdldFN0eWxlKGVsbSwgJ2xpc3Qtc3R5bGUtdHlwZScpID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgZWxtLnJlbW92ZUF0dHJpYnV0ZShhdHRyTmFtZSk7XG4gICAgICAgICAgICAgIGRvbS5zZXRTdHlsZShlbG0sICdsaXN0LXN0eWxlLXR5cGUnLCAnbm9uZScpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYXR0ck5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgICAgICAgICAgZWxtLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3NOYW1lJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbG0ucmVtb3ZlQXR0cmlidXRlKGF0dHJOYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoJDcoZm9ybWF0LmNsYXNzZXMsIHZhbHVlID0+IHtcbiAgICAgICAgICB2YWx1ZSA9IHJlcGxhY2VWYXJzKHZhbHVlLCB2YXJzKTtcbiAgICAgICAgICBpZiAoIWlzRWxlbWVudCQ2KGNvbXBhcmVOb2RlKSB8fCBkb20uaGFzQ2xhc3MoY29tcGFyZU5vZGUsIHZhbHVlKSkge1xuICAgICAgICAgICAgZG9tLnJlbW92ZUNsYXNzKGVsbSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGF0dHJzID0gZG9tLmdldEF0dHJpYnMoZWxtKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGF0dHJOYW1lID0gYXR0cnNbaV0ubm9kZU5hbWU7XG4gICAgICAgICAgaWYgKCFlbGVtZW50VXRpbHMuaXNBdHRyaWJ1dGVJbnRlcm5hbChhdHRyTmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiByZW1vdmVSZXN1bHQua2VlcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvcm1hdC5yZW1vdmUgIT09ICdub25lJykge1xuICAgICAgICByZW1vdmVOb2RlKGVkLCBlbG0sIGZvcm1hdCk7XG4gICAgICAgIHJldHVybiByZW1vdmVSZXN1bHQucmVtb3ZlZCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlbW92ZVJlc3VsdC5rZWVwKCk7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kRm9ybWF0Um9vdCA9IChlZGl0b3IsIGNvbnRhaW5lciwgbmFtZSwgdmFycywgc2ltaWxhcikgPT4ge1xuICAgICAgbGV0IGZvcm1hdFJvb3Q7XG4gICAgICBpZiAoY29udGFpbmVyLnBhcmVudE5vZGUpIHtcbiAgICAgICAgZWFjaCRlKGdldFBhcmVudHMkMihlZGl0b3IuZG9tLCBjb250YWluZXIucGFyZW50Tm9kZSkucmV2ZXJzZSgpLCBwYXJlbnQgPT4ge1xuICAgICAgICAgIGlmICghZm9ybWF0Um9vdCAmJiBpc0VsZW1lbnQkNihwYXJlbnQpICYmIHBhcmVudC5pZCAhPT0gJ19zdGFydCcgJiYgcGFyZW50LmlkICE9PSAnX2VuZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IG1hdGNoTm9kZShlZGl0b3IsIHBhcmVudCwgbmFtZSwgdmFycywgc2ltaWxhcik7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ICYmIGZvcm1hdC5zcGxpdCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgZm9ybWF0Um9vdCA9IHBhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1hdFJvb3Q7XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVOb2RlRm9ybWF0RnJvbUNsb25lID0gKGVkaXRvciwgZm9ybWF0LCB2YXJzLCBjbG9uZSkgPT4gcmVtb3ZlTm9kZUZvcm1hdEludGVybmFsKGVkaXRvciwgZm9ybWF0LCB2YXJzLCBjbG9uZSwgY2xvbmUpLmZvbGQoY29uc3RhbnQoY2xvbmUpLCBuZXdOYW1lID0+IHtcbiAgICAgIGNvbnN0IGZyYWdtZW50ID0gZWRpdG9yLmRvbS5jcmVhdGVGcmFnbWVudCgpO1xuICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoY2xvbmUpO1xuICAgICAgcmV0dXJuIGVkaXRvci5kb20ucmVuYW1lKGNsb25lLCBuZXdOYW1lKTtcbiAgICB9LCBjb25zdGFudChudWxsKSk7XG4gICAgY29uc3Qgd3JhcEFuZFNwbGl0ID0gKGVkaXRvciwgZm9ybWF0TGlzdCwgZm9ybWF0Um9vdCwgY29udGFpbmVyLCB0YXJnZXQsIHNwbGl0LCBmb3JtYXQsIHZhcnMpID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICBsZXQgbGFzdENsb25lO1xuICAgICAgbGV0IGZpcnN0Q2xvbmU7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgaWYgKGZvcm1hdFJvb3QpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0Um9vdFBhcmVudCA9IGZvcm1hdFJvb3QucGFyZW50Tm9kZTtcbiAgICAgICAgZm9yIChsZXQgcGFyZW50ID0gY29udGFpbmVyLnBhcmVudE5vZGU7IHBhcmVudCAmJiBwYXJlbnQgIT09IGZvcm1hdFJvb3RQYXJlbnQ7IHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgbGV0IGNsb25lID0gZG9tLmNsb25lKHBhcmVudCwgZmFsc2UpO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybWF0TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmUgPSByZW1vdmVOb2RlRm9ybWF0RnJvbUNsb25lKGVkaXRvciwgZm9ybWF0TGlzdFtpXSwgdmFycywgY2xvbmUpO1xuICAgICAgICAgICAgaWYgKGNsb25lID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2xvbmUpIHtcbiAgICAgICAgICAgIGlmIChsYXN0Q2xvbmUpIHtcbiAgICAgICAgICAgICAgY2xvbmUuYXBwZW5kQ2hpbGQobGFzdENsb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZmlyc3RDbG9uZSkge1xuICAgICAgICAgICAgICBmaXJzdENsb25lID0gY2xvbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0Q2xvbmUgPSBjbG9uZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNwbGl0ICYmICghZm9ybWF0Lm1peGVkIHx8ICFkb20uaXNCbG9jayhmb3JtYXRSb290KSkpIHtcbiAgICAgICAgICBjb250YWluZXIgPSAoX2EgPSBkb20uc3BsaXQoZm9ybWF0Um9vdCwgY29udGFpbmVyKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYXN0Q2xvbmUgJiYgZmlyc3RDbG9uZSkge1xuICAgICAgICAgIChfYiA9IHRhcmdldC5wYXJlbnROb2RlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaW5zZXJ0QmVmb3JlKGxhc3RDbG9uZSwgdGFyZ2V0KTtcbiAgICAgICAgICBmaXJzdENsb25lLmFwcGVuZENoaWxkKHRhcmdldCk7XG4gICAgICAgICAgaWYgKGlzSW5saW5lRm9ybWF0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIG1lcmdlU2libGluZ3MoZWRpdG9yLCBmb3JtYXQsIHZhcnMsIGxhc3RDbG9uZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGFpbmVyO1xuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlRm9ybWF0SW50ZXJuYWwgPSAoZWQsIG5hbWUsIHZhcnMsIG5vZGUsIHNpbWlsYXIpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdExpc3QgPSBlZC5mb3JtYXR0ZXIuZ2V0KG5hbWUpO1xuICAgICAgY29uc3QgZm9ybWF0ID0gZm9ybWF0TGlzdFswXTtcbiAgICAgIGNvbnN0IGRvbSA9IGVkLmRvbTtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGVkLnNlbGVjdGlvbjtcbiAgICAgIGNvbnN0IHNwbGl0VG9Gb3JtYXRSb290ID0gY29udGFpbmVyID0+IHtcbiAgICAgICAgY29uc3QgZm9ybWF0Um9vdCA9IGZpbmRGb3JtYXRSb290KGVkLCBjb250YWluZXIsIG5hbWUsIHZhcnMsIHNpbWlsYXIpO1xuICAgICAgICByZXR1cm4gd3JhcEFuZFNwbGl0KGVkLCBmb3JtYXRMaXN0LCBmb3JtYXRSb290LCBjb250YWluZXIsIGNvbnRhaW5lciwgdHJ1ZSwgZm9ybWF0LCB2YXJzKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1JlbW92ZUJvb2ttYXJrTm9kZSA9IG5vZGUgPT4gaXNCb29rbWFya05vZGUkMShub2RlKSAmJiBpc0VsZW1lbnQkNihub2RlKSAmJiAobm9kZS5pZCA9PT0gJ19zdGFydCcgfHwgbm9kZS5pZCA9PT0gJ19lbmQnKTtcbiAgICAgIGNvbnN0IHJlbW92ZUZvcm1hdE9uTm9kZSA9IG5vZGUgPT4gZXhpc3RzKGZvcm1hdExpc3QsIGZtdCA9PiByZW1vdmVOb2RlRm9ybWF0KGVkLCBmbXQsIHZhcnMsIG5vZGUsIG5vZGUpKTtcbiAgICAgIGNvbnN0IHByb2Nlc3MgPSBub2RlID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBmcm9tKG5vZGUuY2hpbGROb2Rlcyk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSByZW1vdmVGb3JtYXRPbk5vZGUobm9kZSk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnROb2RlTWF0Y2hlcyA9IHJlbW92ZWQgfHwgZXhpc3RzKGZvcm1hdExpc3QsIGYgPT4gbWF0Y2hOYW1lKGRvbSwgbm9kZSwgZikpO1xuICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICBpZiAoIWN1cnJlbnROb2RlTWF0Y2hlcyAmJiBpc05vbk51bGxhYmxlKHBhcmVudE5vZGUpICYmIHNob3VsZEV4cGFuZFRvU2VsZWN0b3IoZm9ybWF0KSkge1xuICAgICAgICAgIHJlbW92ZUZvcm1hdE9uTm9kZShwYXJlbnROb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0LmRlZXApIHtcbiAgICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIHByb2Nlc3MoY2hpbGRyZW5baV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZXh0RGVjb3JhdGlvbnMgPSBbXG4gICAgICAgICAgJ3VuZGVybGluZScsXG4gICAgICAgICAgJ2xpbmUtdGhyb3VnaCcsXG4gICAgICAgICAgJ292ZXJsaW5lJ1xuICAgICAgICBdO1xuICAgICAgICBlYWNoJGUodGV4dERlY29yYXRpb25zLCBkZWNvcmF0aW9uID0+IHtcbiAgICAgICAgICBpZiAoaXNFbGVtZW50JDYobm9kZSkgJiYgZWQuZG9tLmdldFN0eWxlKG5vZGUsICd0ZXh0LWRlY29yYXRpb24nKSA9PT0gZGVjb3JhdGlvbiAmJiBub2RlLnBhcmVudE5vZGUgJiYgZ2V0VGV4dERlY29yYXRpb24oZG9tLCBub2RlLnBhcmVudE5vZGUpID09PSBkZWNvcmF0aW9uKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlRm9ybWF0KGVkLCB7XG4gICAgICAgICAgICAgIGRlZXA6IGZhbHNlLFxuICAgICAgICAgICAgICBleGFjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgaW5saW5lOiAnc3BhbicsXG4gICAgICAgICAgICAgIHN0eWxlczogeyB0ZXh0RGVjb3JhdGlvbjogZGVjb3JhdGlvbiB9XG4gICAgICAgICAgICB9LCB1bmRlZmluZWQsIG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdW53cmFwID0gc3RhcnQgPT4ge1xuICAgICAgICBjb25zdCBub2RlID0gZG9tLmdldChzdGFydCA/ICdfc3RhcnQnIDogJ19lbmQnKTtcbiAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICBsZXQgb3V0ID0gbm9kZVtzdGFydCA/ICdmaXJzdENoaWxkJyA6ICdsYXN0Q2hpbGQnXTtcbiAgICAgICAgICBpZiAoaXNSZW1vdmVCb29rbWFya05vZGUob3V0KSkge1xuICAgICAgICAgICAgb3V0ID0gb3V0W3N0YXJ0ID8gJ2ZpcnN0Q2hpbGQnIDogJ2xhc3RDaGlsZCddO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNUZXh0JGEob3V0KSAmJiBvdXQuZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIG91dCA9IHN0YXJ0ID8gbm9kZS5wcmV2aW91c1NpYmxpbmcgfHwgbm9kZS5uZXh0U2libGluZyA6IG5vZGUubmV4dFNpYmxpbmcgfHwgbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRvbS5yZW1vdmUobm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlbW92ZVJuZ1N0eWxlID0gcm5nID0+IHtcbiAgICAgICAgbGV0IHN0YXJ0Q29udGFpbmVyO1xuICAgICAgICBsZXQgZW5kQ29udGFpbmVyO1xuICAgICAgICBsZXQgZXhwYW5kZWRSbmcgPSBleHBhbmRSbmcoZG9tLCBybmcsIGZvcm1hdExpc3QsIHJuZy5jb2xsYXBzZWQpO1xuICAgICAgICBpZiAoZm9ybWF0LnNwbGl0KSB7XG4gICAgICAgICAgZXhwYW5kZWRSbmcgPSBzcGxpdChleHBhbmRlZFJuZyk7XG4gICAgICAgICAgc3RhcnRDb250YWluZXIgPSBnZXRDb250YWluZXIoZWQsIGV4cGFuZGVkUm5nLCB0cnVlKTtcbiAgICAgICAgICBlbmRDb250YWluZXIgPSBnZXRDb250YWluZXIoZWQsIGV4cGFuZGVkUm5nKTtcbiAgICAgICAgICBpZiAoc3RhcnRDb250YWluZXIgIT09IGVuZENvbnRhaW5lcikge1xuICAgICAgICAgICAgc3RhcnRDb250YWluZXIgPSBub3JtYWxpemVUYWJsZVNlbGVjdGlvbihzdGFydENvbnRhaW5lciwgdHJ1ZSk7XG4gICAgICAgICAgICBlbmRDb250YWluZXIgPSBub3JtYWxpemVUYWJsZVNlbGVjdGlvbihlbmRDb250YWluZXIsIGZhbHNlKTtcbiAgICAgICAgICAgIGlmIChpc0NoaWxkT2ZJbmxpbmVQYXJlbnQoZG9tLCBzdGFydENvbnRhaW5lciwgZW5kQ29udGFpbmVyKSkge1xuICAgICAgICAgICAgICBjb25zdCBtYXJrZXIgPSBPcHRpb25hbC5mcm9tKHN0YXJ0Q29udGFpbmVyLmZpcnN0Q2hpbGQpLmdldE9yKHN0YXJ0Q29udGFpbmVyKTtcbiAgICAgICAgICAgICAgc3BsaXRUb0Zvcm1hdFJvb3Qod3JhcFdpdGhTaWJsaW5ncyhkb20sIG1hcmtlciwgdHJ1ZSwgJ3NwYW4nLCB7XG4gICAgICAgICAgICAgICAgJ2lkJzogJ19zdGFydCcsXG4gICAgICAgICAgICAgICAgJ2RhdGEtbWNlLXR5cGUnOiAnYm9va21hcmsnXG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgdW53cmFwKHRydWUpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNDaGlsZE9mSW5saW5lUGFyZW50KGRvbSwgZW5kQ29udGFpbmVyLCBzdGFydENvbnRhaW5lcikpIHtcbiAgICAgICAgICAgICAgY29uc3QgbWFya2VyID0gT3B0aW9uYWwuZnJvbShlbmRDb250YWluZXIubGFzdENoaWxkKS5nZXRPcihlbmRDb250YWluZXIpO1xuICAgICAgICAgICAgICBzcGxpdFRvRm9ybWF0Um9vdCh3cmFwV2l0aFNpYmxpbmdzKGRvbSwgbWFya2VyLCBmYWxzZSwgJ3NwYW4nLCB7XG4gICAgICAgICAgICAgICAgJ2lkJzogJ19lbmQnLFxuICAgICAgICAgICAgICAgICdkYXRhLW1jZS10eXBlJzogJ2Jvb2ttYXJrJ1xuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIHVud3JhcChmYWxzZSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyID0gd3JhcCQxKGRvbSwgc3RhcnRDb250YWluZXIsICdzcGFuJywge1xuICAgICAgICAgICAgICAnaWQnOiAnX3N0YXJ0JyxcbiAgICAgICAgICAgICAgJ2RhdGEtbWNlLXR5cGUnOiAnYm9va21hcmsnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVuZENvbnRhaW5lciA9IHdyYXAkMShkb20sIGVuZENvbnRhaW5lciwgJ3NwYW4nLCB7XG4gICAgICAgICAgICAgICdpZCc6ICdfZW5kJyxcbiAgICAgICAgICAgICAgJ2RhdGEtbWNlLXR5cGUnOiAnYm9va21hcmsnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1JuZyA9IGRvbS5jcmVhdGVSbmcoKTtcbiAgICAgICAgICAgIG5ld1JuZy5zZXRTdGFydEFmdGVyKHN0YXJ0Q29udGFpbmVyKTtcbiAgICAgICAgICAgIG5ld1JuZy5zZXRFbmRCZWZvcmUoZW5kQ29udGFpbmVyKTtcbiAgICAgICAgICAgIHdhbGskMyhkb20sIG5ld1JuZywgbm9kZXMgPT4ge1xuICAgICAgICAgICAgICBlYWNoJGUobm9kZXMsIG4gPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXNCb29rbWFya05vZGUkMShuKSAmJiAhaXNCb29rbWFya05vZGUkMShuLnBhcmVudE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICBzcGxpdFRvRm9ybWF0Um9vdChuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzcGxpdFRvRm9ybWF0Um9vdChzdGFydENvbnRhaW5lcik7XG4gICAgICAgICAgICBzcGxpdFRvRm9ybWF0Um9vdChlbmRDb250YWluZXIpO1xuICAgICAgICAgICAgc3RhcnRDb250YWluZXIgPSB1bndyYXAodHJ1ZSk7XG4gICAgICAgICAgICBlbmRDb250YWluZXIgPSB1bndyYXAoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhcnRDb250YWluZXIgPSBlbmRDb250YWluZXIgPSBzcGxpdFRvRm9ybWF0Um9vdChzdGFydENvbnRhaW5lcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGV4cGFuZGVkUm5nLnN0YXJ0Q29udGFpbmVyID0gc3RhcnRDb250YWluZXIucGFyZW50Tm9kZSA/IHN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUgOiBzdGFydENvbnRhaW5lcjtcbiAgICAgICAgICBleHBhbmRlZFJuZy5zdGFydE9mZnNldCA9IGRvbS5ub2RlSW5kZXgoc3RhcnRDb250YWluZXIpO1xuICAgICAgICAgIGV4cGFuZGVkUm5nLmVuZENvbnRhaW5lciA9IGVuZENvbnRhaW5lci5wYXJlbnROb2RlID8gZW5kQ29udGFpbmVyLnBhcmVudE5vZGUgOiBlbmRDb250YWluZXI7XG4gICAgICAgICAgZXhwYW5kZWRSbmcuZW5kT2Zmc2V0ID0gZG9tLm5vZGVJbmRleChlbmRDb250YWluZXIpICsgMTtcbiAgICAgICAgfVxuICAgICAgICB3YWxrJDMoZG9tLCBleHBhbmRlZFJuZywgbm9kZXMgPT4ge1xuICAgICAgICAgIGVhY2gkZShub2RlcywgcHJvY2Vzcyk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGlmIChub2RlKSB7XG4gICAgICAgIGlmIChpc05vZGUobm9kZSkpIHtcbiAgICAgICAgICBjb25zdCBybmcgPSBkb20uY3JlYXRlUm5nKCk7XG4gICAgICAgICAgcm5nLnNldFN0YXJ0QmVmb3JlKG5vZGUpO1xuICAgICAgICAgIHJuZy5zZXRFbmRBZnRlcihub2RlKTtcbiAgICAgICAgICByZW1vdmVSbmdTdHlsZShybmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbW92ZVJuZ1N0eWxlKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGZpcmVGb3JtYXRSZW1vdmUoZWQsIG5hbWUsIG5vZGUsIHZhcnMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpIHx8ICFpc0lubGluZUZvcm1hdChmb3JtYXQpIHx8IGdldENlbGxzRnJvbUVkaXRvcihlZCkubGVuZ3RoKSB7XG4gICAgICAgIHByZXNlcnZlU2VsZWN0aW9uKGVkLCAoKSA9PiBydW5PblJhbmdlcyhlZCwgcmVtb3ZlUm5nU3R5bGUpLCBzdGFydE5vZGUgPT4gaXNJbmxpbmVGb3JtYXQoZm9ybWF0KSAmJiBtYXRjaCQyKGVkLCBuYW1lLCB2YXJzLCBzdGFydE5vZGUpKTtcbiAgICAgICAgZWQubm9kZUNoYW5nZWQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZUNhcmV0Rm9ybWF0KGVkLCBuYW1lLCB2YXJzLCBzaW1pbGFyKTtcbiAgICAgIH1cbiAgICAgIHJlbW92ZUxpc3RTdHlsZUZvcm1hdHMoZWQsIG5hbWUsIHZhcnMpO1xuICAgICAgZmlyZUZvcm1hdFJlbW92ZShlZCwgbmFtZSwgbm9kZSwgdmFycyk7XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVGb3JtYXQkMSA9IChlZCwgbmFtZSwgdmFycywgbm9kZSwgc2ltaWxhcikgPT4ge1xuICAgICAgaWYgKG5vZGUgfHwgZWQuc2VsZWN0aW9uLmlzRWRpdGFibGUoKSkge1xuICAgICAgICByZW1vdmVGb3JtYXRJbnRlcm5hbChlZCwgbmFtZSwgdmFycywgbm9kZSwgc2ltaWxhcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVOb2RlRm9ybWF0ID0gKGVkaXRvciwgZm9ybWF0LCB2YXJzLCBub2RlLCBjb21wYXJlTm9kZSkgPT4ge1xuICAgICAgcmV0dXJuIHJlbW92ZU5vZGVGb3JtYXRJbnRlcm5hbChlZGl0b3IsIGZvcm1hdCwgdmFycywgbm9kZSwgY29tcGFyZU5vZGUpLmZvbGQobmV2ZXIsIG5ld05hbWUgPT4ge1xuICAgICAgICBlZGl0b3IuZG9tLnJlbmFtZShub2RlLCBuZXdOYW1lKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LCBhbHdheXMpO1xuICAgIH07XG5cbiAgICBjb25zdCBlYWNoJDYgPSBUb29scy5lYWNoO1xuICAgIGNvbnN0IG1lcmdlVGV4dERlY29yYXRpb25zQW5kQ29sb3IgPSAoZG9tLCBmb3JtYXQsIHZhcnMsIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHByb2Nlc3NUZXh0RGVjb3JhdGlvbnNBbmRDb2xvciA9IG4gPT4ge1xuICAgICAgICBpZiAoaXNFbGVtZW50JDYobikgJiYgaXNFbGVtZW50JDYobi5wYXJlbnROb2RlKSAmJiBpc0VkaXRhYmxlJDIobikpIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnRUZXh0RGVjb3JhdGlvbiA9IGdldFRleHREZWNvcmF0aW9uKGRvbSwgbi5wYXJlbnROb2RlKTtcbiAgICAgICAgICBpZiAoZG9tLmdldFN0eWxlKG4sICdjb2xvcicpICYmIHBhcmVudFRleHREZWNvcmF0aW9uKSB7XG4gICAgICAgICAgICBkb20uc2V0U3R5bGUobiwgJ3RleHQtZGVjb3JhdGlvbicsIHBhcmVudFRleHREZWNvcmF0aW9uKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRvbS5nZXRTdHlsZShuLCAndGV4dC1kZWNvcmF0aW9uJykgPT09IHBhcmVudFRleHREZWNvcmF0aW9uKSB7XG4gICAgICAgICAgICBkb20uc2V0U3R5bGUobiwgJ3RleHQtZGVjb3JhdGlvbicsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChmb3JtYXQuc3R5bGVzICYmIChmb3JtYXQuc3R5bGVzLmNvbG9yIHx8IGZvcm1hdC5zdHlsZXMudGV4dERlY29yYXRpb24pKSB7XG4gICAgICAgIFRvb2xzLndhbGsobm9kZSwgcHJvY2Vzc1RleHREZWNvcmF0aW9uc0FuZENvbG9yLCAnY2hpbGROb2RlcycpO1xuICAgICAgICBwcm9jZXNzVGV4dERlY29yYXRpb25zQW5kQ29sb3Iobm9kZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBtZXJnZUJhY2tncm91bmRDb2xvckFuZEZvbnRTaXplID0gKGRvbSwgZm9ybWF0LCB2YXJzLCBub2RlKSA9PiB7XG4gICAgICBpZiAoZm9ybWF0LnN0eWxlcyAmJiBmb3JtYXQuc3R5bGVzLmJhY2tncm91bmRDb2xvcikge1xuICAgICAgICBjb25zdCBoYXNGb250U2l6ZSA9IGhhc1N0eWxlKGRvbSwgJ2ZvbnRTaXplJyk7XG4gICAgICAgIHByb2Nlc3NDaGlsZEVsZW1lbnRzKG5vZGUsIGVsbSA9PiBoYXNGb250U2l6ZShlbG0pICYmIGlzRWRpdGFibGUkMihlbG0pLCBhcHBseVN0eWxlKGRvbSwgJ2JhY2tncm91bmRDb2xvcicsIHJlcGxhY2VWYXJzKGZvcm1hdC5zdHlsZXMuYmFja2dyb3VuZENvbG9yLCB2YXJzKSkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbWVyZ2VTdWJTdXAgPSAoZG9tLCBmb3JtYXQsIHZhcnMsIG5vZGUpID0+IHtcbiAgICAgIGlmIChpc0lubGluZUZvcm1hdChmb3JtYXQpICYmIChmb3JtYXQuaW5saW5lID09PSAnc3ViJyB8fCBmb3JtYXQuaW5saW5lID09PSAnc3VwJykpIHtcbiAgICAgICAgY29uc3QgaGFzRm9udFNpemUgPSBoYXNTdHlsZShkb20sICdmb250U2l6ZScpO1xuICAgICAgICBwcm9jZXNzQ2hpbGRFbGVtZW50cyhub2RlLCBlbG0gPT4gaGFzRm9udFNpemUoZWxtKSAmJiBpc0VkaXRhYmxlJDIoZWxtKSwgYXBwbHlTdHlsZShkb20sICdmb250U2l6ZScsICcnKSk7XG4gICAgICAgIGNvbnN0IGludmVyc2VUYWdEZXNjZW5kYW50cyA9IGZpbHRlciQ1KGRvbS5zZWxlY3QoZm9ybWF0LmlubGluZSA9PT0gJ3N1cCcgPyAnc3ViJyA6ICdzdXAnLCBub2RlKSwgaXNFZGl0YWJsZSQyKTtcbiAgICAgICAgZG9tLnJlbW92ZShpbnZlcnNlVGFnRGVzY2VuZGFudHMsIHRydWUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbWVyZ2VXaXRoQ2hpbGRyZW4gPSAoZWRpdG9yLCBmb3JtYXRMaXN0LCB2YXJzLCBub2RlKSA9PiB7XG4gICAgICBlYWNoJDYoZm9ybWF0TGlzdCwgZm9ybWF0ID0+IHtcbiAgICAgICAgaWYgKGlzSW5saW5lRm9ybWF0KGZvcm1hdCkpIHtcbiAgICAgICAgICBlYWNoJDYoZWRpdG9yLmRvbS5zZWxlY3QoZm9ybWF0LmlubGluZSwgbm9kZSksIGNoaWxkID0+IHtcbiAgICAgICAgICAgIGlmIChpc0VsZW1lbnROb2RlKGNoaWxkKSkge1xuICAgICAgICAgICAgICByZW1vdmVOb2RlRm9ybWF0KGVkaXRvciwgZm9ybWF0LCB2YXJzLCBjaGlsZCwgZm9ybWF0LmV4YWN0ID8gY2hpbGQgOiBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjbGVhckNoaWxkU3R5bGVzKGVkaXRvci5kb20sIGZvcm1hdCwgbm9kZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG1lcmdlV2l0aFBhcmVudHMgPSAoZWRpdG9yLCBmb3JtYXQsIG5hbWUsIHZhcnMsIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICBpZiAobWF0Y2hOb2RlKGVkaXRvciwgcGFyZW50Tm9kZSwgbmFtZSwgdmFycykpIHtcbiAgICAgICAgaWYgKHJlbW92ZU5vZGVGb3JtYXQoZWRpdG9yLCBmb3JtYXQsIHZhcnMsIG5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm9ybWF0Lm1lcmdlX3dpdGhfcGFyZW50cyAmJiBwYXJlbnROb2RlKSB7XG4gICAgICAgIGVkaXRvci5kb20uZ2V0UGFyZW50KHBhcmVudE5vZGUsIHBhcmVudCA9PiB7XG4gICAgICAgICAgaWYgKG1hdGNoTm9kZShlZGl0b3IsIHBhcmVudCwgbmFtZSwgdmFycykpIHtcbiAgICAgICAgICAgIHJlbW92ZU5vZGVGb3JtYXQoZWRpdG9yLCBmb3JtYXQsIHZhcnMsIG5vZGUpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBlYWNoJDUgPSBUb29scy5lYWNoO1xuICAgIGNvbnN0IGNhbkZvcm1hdEJSID0gKGVkaXRvciwgZm9ybWF0LCBub2RlLCBwYXJlbnROYW1lKSA9PiB7XG4gICAgICBpZiAoY2FuRm9ybWF0RW1wdHlMaW5lcyhlZGl0b3IpICYmIGlzSW5saW5lRm9ybWF0KGZvcm1hdCkgJiYgbm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkQlJQYXJlbnRFbGVtZW50cyA9IGdldFRleHRSb290QmxvY2tFbGVtZW50cyhlZGl0b3Iuc2NoZW1hKTtcbiAgICAgICAgY29uc3QgaGFzQ2FyZXROb2RlU2libGluZyA9IHNpYmxpbmcoU3VnYXJFbGVtZW50LmZyb21Eb20obm9kZSksIHNpYmxpbmcgPT4gaXNDYXJldE5vZGUoc2libGluZy5kb20pKTtcbiAgICAgICAgcmV0dXJuIGhhc05vbk51bGxhYmxlS2V5KHZhbGlkQlJQYXJlbnRFbGVtZW50cywgcGFyZW50TmFtZSkgJiYgaXNFbXB0eSQyKFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5vZGUucGFyZW50Tm9kZSksIGZhbHNlKSAmJiAhaGFzQ2FyZXROb2RlU2libGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5U3R5bGVzID0gKGRvbSwgZWxtLCBmb3JtYXQsIHZhcnMpID0+IHtcbiAgICAgIGVhY2gkNShmb3JtYXQuc3R5bGVzLCAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgZG9tLnNldFN0eWxlKGVsbSwgbmFtZSwgcmVwbGFjZVZhcnModmFsdWUsIHZhcnMpKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZvcm1hdC5zdHlsZXMpIHtcbiAgICAgICAgY29uc3Qgc3R5bGVWYWwgPSBkb20uZ2V0QXR0cmliKGVsbSwgJ3N0eWxlJyk7XG4gICAgICAgIGlmIChzdHlsZVZhbCkge1xuICAgICAgICAgIGRvbS5zZXRBdHRyaWIoZWxtLCAnZGF0YS1tY2Utc3R5bGUnLCBzdHlsZVZhbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5Rm9ybWF0QWN0aW9uID0gKGVkLCBuYW1lLCB2YXJzLCBub2RlKSA9PiB7XG4gICAgICBjb25zdCBmb3JtYXRMaXN0ID0gZWQuZm9ybWF0dGVyLmdldChuYW1lKTtcbiAgICAgIGNvbnN0IGZvcm1hdCA9IGZvcm1hdExpc3RbMF07XG4gICAgICBjb25zdCBpc0NvbGxhcHNlZCA9ICFub2RlICYmIGVkLnNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpO1xuICAgICAgY29uc3QgZG9tID0gZWQuZG9tO1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZWQuc2VsZWN0aW9uO1xuICAgICAgY29uc3Qgc2V0RWxlbWVudEZvcm1hdCA9IChlbG0sIGZtdCA9IGZvcm1hdCkgPT4ge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihmbXQub25mb3JtYXQpKSB7XG4gICAgICAgICAgZm10Lm9uZm9ybWF0KGVsbSwgZm10LCB2YXJzLCBub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBhcHBseVN0eWxlcyhkb20sIGVsbSwgZm10LCB2YXJzKTtcbiAgICAgICAgZWFjaCQ1KGZtdC5hdHRyaWJ1dGVzLCAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgICBkb20uc2V0QXR0cmliKGVsbSwgbmFtZSwgcmVwbGFjZVZhcnModmFsdWUsIHZhcnMpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2gkNShmbXQuY2xhc3NlcywgdmFsdWUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gcmVwbGFjZVZhcnModmFsdWUsIHZhcnMpO1xuICAgICAgICAgIGlmICghZG9tLmhhc0NsYXNzKGVsbSwgbmV3VmFsdWUpKSB7XG4gICAgICAgICAgICBkb20uYWRkQ2xhc3MoZWxtLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBhcHBseU5vZGVTdHlsZSA9IChmb3JtYXRMaXN0LCBub2RlKSA9PiB7XG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgICBlYWNoJDUoZm9ybWF0TGlzdCwgZm9ybWF0ID0+IHtcbiAgICAgICAgICBpZiAoIWlzU2VsZWN0b3JGb3JtYXQoZm9ybWF0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZG9tLmdldENvbnRlbnRFZGl0YWJsZShub2RlKSA9PT0gJ2ZhbHNlJyAmJiAhZm9ybWF0LmNlRmFsc2VPdmVycmlkZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc05vbk51bGxhYmxlKGZvcm1hdC5jb2xsYXBzZWQpICYmIGZvcm1hdC5jb2xsYXBzZWQgIT09IGlzQ29sbGFwc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRvbS5pcyhub2RlLCBmb3JtYXQuc2VsZWN0b3IpICYmICFpc0NhcmV0Tm9kZShub2RlKSkge1xuICAgICAgICAgICAgc2V0RWxlbWVudEZvcm1hdChub2RlLCBmb3JtYXQpO1xuICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBjcmVhdGVXcmFwRWxlbWVudCA9IHdyYXBOYW1lID0+IHtcbiAgICAgICAgaWYgKGlzU3RyaW5nKHdyYXBOYW1lKSkge1xuICAgICAgICAgIGNvbnN0IHdyYXBFbG0gPSBkb20uY3JlYXRlKHdyYXBOYW1lKTtcbiAgICAgICAgICBzZXRFbGVtZW50Rm9ybWF0KHdyYXBFbG0pO1xuICAgICAgICAgIHJldHVybiB3cmFwRWxtO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgYXBwbHlSbmdTdHlsZSA9IChkb20sIHJuZywgbm9kZVNwZWNpZmljKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1dyYXBwZXJzID0gW107XG4gICAgICAgIGxldCBjb250ZW50RWRpdGFibGUgPSB0cnVlO1xuICAgICAgICBjb25zdCB3cmFwTmFtZSA9IGZvcm1hdC5pbmxpbmUgfHwgZm9ybWF0LmJsb2NrO1xuICAgICAgICBjb25zdCB3cmFwRWxtID0gY3JlYXRlV3JhcEVsZW1lbnQod3JhcE5hbWUpO1xuICAgICAgICBjb25zdCBpc01hdGNoaW5nV3JhcHBpbmdCbG9jayA9IG5vZGUgPT4gaXNXcmFwcGluZ0Jsb2NrRm9ybWF0KGZvcm1hdCkgJiYgbWF0Y2hOb2RlKGVkLCBub2RlLCBuYW1lLCB2YXJzKTtcbiAgICAgICAgY29uc3QgY2FuUmVuYW1lQmxvY2sgPSAobm9kZSwgcGFyZW50TmFtZSwgaXNFZGl0YWJsZURlc2NlbmRhbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBpc1ZhbGlkQmxvY2tGb3JtYXRGb3JOb2RlID0gaXNOb25XcmFwcGluZ0Jsb2NrRm9ybWF0KGZvcm1hdCkgJiYgaXNUZXh0QmxvY2skMShlZC5zY2hlbWEsIG5vZGUpICYmIGlzVmFsaWQoZWQsIHBhcmVudE5hbWUsIHdyYXBOYW1lKTtcbiAgICAgICAgICByZXR1cm4gaXNFZGl0YWJsZURlc2NlbmRhbnQgJiYgaXNWYWxpZEJsb2NrRm9ybWF0Rm9yTm9kZTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2FuV3JhcE5vZGUgPSAobm9kZSwgcGFyZW50TmFtZSwgaXNFZGl0YWJsZURlc2NlbmRhbnQsIGlzV3JhcHBhYmxlTm9uZWRpdGFibGVFbG0pID0+IHtcbiAgICAgICAgICBjb25zdCBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBjb25zdCBpc1ZhbGlkV3JhcE5vZGUgPSBpc1ZhbGlkKGVkLCB3cmFwTmFtZSwgbm9kZU5hbWUpICYmIGlzVmFsaWQoZWQsIHBhcmVudE5hbWUsIHdyYXBOYW1lKTtcbiAgICAgICAgICBjb25zdCBpc1p3c3AgPSAhbm9kZVNwZWNpZmljICYmIGlzVGV4dCRhKG5vZGUpICYmIGlzWndzcCQxKG5vZGUuZGF0YSk7XG4gICAgICAgICAgY29uc3QgaXNDYXJldCA9IGlzQ2FyZXROb2RlKG5vZGUpO1xuICAgICAgICAgIGNvbnN0IGlzQ29ycmVjdEZvcm1hdEZvck5vZGUgPSAhaXNJbmxpbmVGb3JtYXQoZm9ybWF0KSB8fCAhZG9tLmlzQmxvY2sobm9kZSk7XG4gICAgICAgICAgcmV0dXJuIChpc0VkaXRhYmxlRGVzY2VuZGFudCB8fCBpc1dyYXBwYWJsZU5vbmVkaXRhYmxlRWxtKSAmJiBpc1ZhbGlkV3JhcE5vZGUgJiYgIWlzWndzcCAmJiAhaXNDYXJldCAmJiBpc0NvcnJlY3RGb3JtYXRGb3JOb2RlO1xuICAgICAgICB9O1xuICAgICAgICB3YWxrJDMoZG9tLCBybmcsIG5vZGVzID0+IHtcbiAgICAgICAgICBsZXQgY3VycmVudFdyYXBFbG07XG4gICAgICAgICAgY29uc3QgcHJvY2VzcyA9IG5vZGUgPT4ge1xuICAgICAgICAgICAgbGV0IGhhc0NvbnRlbnRFZGl0YWJsZVN0YXRlID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgbGFzdENvbnRlbnRFZGl0YWJsZSA9IGNvbnRlbnRFZGl0YWJsZTtcbiAgICAgICAgICAgIGxldCBpc1dyYXBwYWJsZU5vbmVkaXRhYmxlRWxtID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50TmFtZSA9IHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRFZGl0YWJsZVZhbHVlID0gZG9tLmdldENvbnRlbnRFZGl0YWJsZShub2RlKTtcbiAgICAgICAgICAgIGlmIChpc05vbk51bGxhYmxlKGNvbnRlbnRFZGl0YWJsZVZhbHVlKSkge1xuICAgICAgICAgICAgICBsYXN0Q29udGVudEVkaXRhYmxlID0gY29udGVudEVkaXRhYmxlO1xuICAgICAgICAgICAgICBjb250ZW50RWRpdGFibGUgPSBjb250ZW50RWRpdGFibGVWYWx1ZSA9PT0gJ3RydWUnO1xuICAgICAgICAgICAgICBoYXNDb250ZW50RWRpdGFibGVTdGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgIGlzV3JhcHBhYmxlTm9uZWRpdGFibGVFbG0gPSBpc1dyYXBwYWJsZU5vbmVkaXRhYmxlKGVkLCBub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGlzRWRpdGFibGVEZXNjZW5kYW50ID0gY29udGVudEVkaXRhYmxlICYmICFoYXNDb250ZW50RWRpdGFibGVTdGF0ZTtcbiAgICAgICAgICAgIGlmIChpc0JyJDYobm9kZSkgJiYgIWNhbkZvcm1hdEJSKGVkLCBmb3JtYXQsIG5vZGUsIHBhcmVudE5hbWUpKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRXcmFwRWxtID0gbnVsbDtcbiAgICAgICAgICAgICAgaWYgKGlzQmxvY2tGb3JtYXQoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGRvbS5yZW1vdmUobm9kZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzTWF0Y2hpbmdXcmFwcGluZ0Jsb2NrKG5vZGUpKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRXcmFwRWxtID0gbnVsbDtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNhblJlbmFtZUJsb2NrKG5vZGUsIHBhcmVudE5hbWUsIGlzRWRpdGFibGVEZXNjZW5kYW50KSkge1xuICAgICAgICAgICAgICBjb25zdCBlbG0gPSBkb20ucmVuYW1lKG5vZGUsIHdyYXBOYW1lKTtcbiAgICAgICAgICAgICAgc2V0RWxlbWVudEZvcm1hdChlbG0pO1xuICAgICAgICAgICAgICBuZXdXcmFwcGVycy5wdXNoKGVsbSk7XG4gICAgICAgICAgICAgIGN1cnJlbnRXcmFwRWxtID0gbnVsbDtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU2VsZWN0b3JGb3JtYXQoZm9ybWF0KSkge1xuICAgICAgICAgICAgICBsZXQgZm91bmQgPSBhcHBseU5vZGVTdHlsZShmb3JtYXRMaXN0LCBub2RlKTtcbiAgICAgICAgICAgICAgaWYgKCFmb3VuZCAmJiBpc05vbk51bGxhYmxlKHBhcmVudE5vZGUpICYmIHNob3VsZEV4cGFuZFRvU2VsZWN0b3IoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGZvdW5kID0gYXBwbHlOb2RlU3R5bGUoZm9ybWF0TGlzdCwgcGFyZW50Tm9kZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCFpc0lubGluZUZvcm1hdChmb3JtYXQpIHx8IGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFdyYXBFbG0gPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzTm9uTnVsbGFibGUod3JhcEVsbSkgJiYgY2FuV3JhcE5vZGUobm9kZSwgcGFyZW50TmFtZSwgaXNFZGl0YWJsZURlc2NlbmRhbnQsIGlzV3JhcHBhYmxlTm9uZWRpdGFibGVFbG0pKSB7XG4gICAgICAgICAgICAgIGlmICghY3VycmVudFdyYXBFbG0pIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50V3JhcEVsbSA9IGRvbS5jbG9uZSh3cmFwRWxtLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY3VycmVudFdyYXBFbG0sIG5vZGUpO1xuICAgICAgICAgICAgICAgIG5ld1dyYXBwZXJzLnB1c2goY3VycmVudFdyYXBFbG0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChpc1dyYXBwYWJsZU5vbmVkaXRhYmxlRWxtICYmIGhhc0NvbnRlbnRFZGl0YWJsZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY29udGVudEVkaXRhYmxlID0gbGFzdENvbnRlbnRFZGl0YWJsZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjdXJyZW50V3JhcEVsbS5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRXcmFwRWxtID0gbnVsbDtcbiAgICAgICAgICAgICAgZWFjaCRlKGZyb20obm9kZS5jaGlsZE5vZGVzKSwgcHJvY2Vzcyk7XG4gICAgICAgICAgICAgIGlmIChoYXNDb250ZW50RWRpdGFibGVTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnRlbnRFZGl0YWJsZSA9IGxhc3RDb250ZW50RWRpdGFibGU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY3VycmVudFdyYXBFbG0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgZWFjaCRlKG5vZGVzLCBwcm9jZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChmb3JtYXQubGlua3MgPT09IHRydWUpIHtcbiAgICAgICAgICBlYWNoJGUobmV3V3JhcHBlcnMsIG5vZGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvY2VzcyA9IG5vZGUgPT4ge1xuICAgICAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gJ0EnKSB7XG4gICAgICAgICAgICAgICAgc2V0RWxlbWVudEZvcm1hdChub2RlLCBmb3JtYXQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVhY2gkZShmcm9tKG5vZGUuY2hpbGROb2RlcyksIHByb2Nlc3MpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHByb2Nlc3Mobm9kZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWFjaCRlKG5ld1dyYXBwZXJzLCBub2RlID0+IHtcbiAgICAgICAgICBjb25zdCBnZXRDaGlsZENvdW50ID0gbm9kZSA9PiB7XG4gICAgICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICAgICAgZWFjaCRlKG5vZGUuY2hpbGROb2Rlcywgbm9kZSA9PiB7XG4gICAgICAgICAgICAgIGlmICghaXNFbXB0eVRleHROb2RlJDEobm9kZSkgJiYgIWlzQm9va21hcmtOb2RlJDEobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBjb3VudDtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IG1lcmdlU3R5bGVzID0gbm9kZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZEVsZW1lbnQgPSBmaW5kJDIobm9kZS5jaGlsZE5vZGVzLCBpc0VsZW1lbnROb2RlJDEpLmZpbHRlcihjaGlsZCA9PiBkb20uZ2V0Q29udGVudEVkaXRhYmxlKGNoaWxkKSAhPT0gJ2ZhbHNlJyAmJiBtYXRjaE5hbWUoZG9tLCBjaGlsZCwgZm9ybWF0KSk7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRFbGVtZW50Lm1hcChjaGlsZCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNsb25lID0gZG9tLmNsb25lKGNoaWxkLCBmYWxzZSk7XG4gICAgICAgICAgICAgIHNldEVsZW1lbnRGb3JtYXQoY2xvbmUpO1xuICAgICAgICAgICAgICBkb20ucmVwbGFjZShjbG9uZSwgbm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgIGRvbS5yZW1vdmUoY2hpbGQsIHRydWUpO1xuICAgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgICAgICAgICB9KS5nZXRPcihub2RlKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGNoaWxkQ291bnQgPSBnZXRDaGlsZENvdW50KG5vZGUpO1xuICAgICAgICAgIGlmICgobmV3V3JhcHBlcnMubGVuZ3RoID4gMSB8fCAhZG9tLmlzQmxvY2sobm9kZSkpICYmIGNoaWxkQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIGRvbS5yZW1vdmUobm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0lubGluZUZvcm1hdChmb3JtYXQpIHx8IGlzQmxvY2tGb3JtYXQoZm9ybWF0KSAmJiBmb3JtYXQud3JhcHBlcikge1xuICAgICAgICAgICAgaWYgKCFmb3JtYXQuZXhhY3QgJiYgY2hpbGRDb3VudCA9PT0gMSkge1xuICAgICAgICAgICAgICBub2RlID0gbWVyZ2VTdHlsZXMobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtZXJnZVdpdGhDaGlsZHJlbihlZCwgZm9ybWF0TGlzdCwgdmFycywgbm9kZSk7XG4gICAgICAgICAgICBtZXJnZVdpdGhQYXJlbnRzKGVkLCBmb3JtYXQsIG5hbWUsIHZhcnMsIG5vZGUpO1xuICAgICAgICAgICAgbWVyZ2VCYWNrZ3JvdW5kQ29sb3JBbmRGb250U2l6ZShkb20sIGZvcm1hdCwgdmFycywgbm9kZSk7XG4gICAgICAgICAgICBtZXJnZVRleHREZWNvcmF0aW9uc0FuZENvbG9yKGRvbSwgZm9ybWF0LCB2YXJzLCBub2RlKTtcbiAgICAgICAgICAgIG1lcmdlU3ViU3VwKGRvbSwgZm9ybWF0LCB2YXJzLCBub2RlKTtcbiAgICAgICAgICAgIG1lcmdlU2libGluZ3MoZWQsIGZvcm1hdCwgdmFycywgbm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCB0YXJnZXROb2RlID0gaXNOb2RlKG5vZGUpID8gbm9kZSA6IHNlbGVjdGlvbi5nZXROb2RlKCk7XG4gICAgICBpZiAoZG9tLmdldENvbnRlbnRFZGl0YWJsZSh0YXJnZXROb2RlKSA9PT0gJ2ZhbHNlJyAmJiAhaXNXcmFwcGFibGVOb25lZGl0YWJsZShlZCwgdGFyZ2V0Tm9kZSkpIHtcbiAgICAgICAgbm9kZSA9IHRhcmdldE5vZGU7XG4gICAgICAgIGFwcGx5Tm9kZVN0eWxlKGZvcm1hdExpc3QsIG5vZGUpO1xuICAgICAgICBmaXJlRm9ybWF0QXBwbHkoZWQsIG5hbWUsIG5vZGUsIHZhcnMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZm9ybWF0KSB7XG4gICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgaWYgKGlzTm9kZShub2RlKSkge1xuICAgICAgICAgICAgaWYgKCFhcHBseU5vZGVTdHlsZShmb3JtYXRMaXN0LCBub2RlKSkge1xuICAgICAgICAgICAgICBjb25zdCBybmcgPSBkb20uY3JlYXRlUm5nKCk7XG4gICAgICAgICAgICAgIHJuZy5zZXRTdGFydEJlZm9yZShub2RlKTtcbiAgICAgICAgICAgICAgcm5nLnNldEVuZEFmdGVyKG5vZGUpO1xuICAgICAgICAgICAgICBhcHBseVJuZ1N0eWxlKGRvbSwgZXhwYW5kUm5nKGRvbSwgcm5nLCBmb3JtYXRMaXN0KSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFwcGx5Um5nU3R5bGUoZG9tLCBub2RlLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFpc0NvbGxhcHNlZCB8fCAhaXNJbmxpbmVGb3JtYXQoZm9ybWF0KSB8fCBnZXRDZWxsc0Zyb21FZGl0b3IoZWQpLmxlbmd0aCkge1xuICAgICAgICAgICAgc2VsZWN0aW9uLnNldFJuZyhub3JtYWxpemUoc2VsZWN0aW9uLmdldFJuZygpKSk7XG4gICAgICAgICAgICBwcmVzZXJ2ZVNlbGVjdGlvbihlZCwgKCkgPT4ge1xuICAgICAgICAgICAgICBydW5PblJhbmdlcyhlZCwgKHNlbGVjdGlvblJuZywgZmFrZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkUm5nID0gZmFrZSA/IHNlbGVjdGlvblJuZyA6IGV4cGFuZFJuZyhkb20sIHNlbGVjdGlvblJuZywgZm9ybWF0TGlzdCk7XG4gICAgICAgICAgICAgICAgYXBwbHlSbmdTdHlsZShkb20sIGV4cGFuZGVkUm5nLCBmYWxzZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgYWx3YXlzKTtcbiAgICAgICAgICAgIGVkLm5vZGVDaGFuZ2VkKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFwcGx5Q2FyZXRGb3JtYXQoZWQsIG5hbWUsIHZhcnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBnZXRFeHBhbmRlZExpc3RJdGVtRm9ybWF0KGVkLmZvcm1hdHRlciwgbmFtZSkuZWFjaChsaUZtdCA9PiB7XG4gICAgICAgICAgICBlYWNoJGUoZ2V0RnVsbHlTZWxlY3RlZExpc3RJdGVtcyhlZC5zZWxlY3Rpb24pLCBsaSA9PiBhcHBseVN0eWxlcyhkb20sIGxpLCBsaUZtdCwgdmFycykpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHBvc3RQcm9jZXNzJDEobmFtZSwgZWQpO1xuICAgICAgfVxuICAgICAgZmlyZUZvcm1hdEFwcGx5KGVkLCBuYW1lLCBub2RlLCB2YXJzKTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5Rm9ybWF0JDEgPSAoZWRpdG9yLCBuYW1lLCB2YXJzLCBub2RlKSA9PiB7XG4gICAgICBpZiAobm9kZSB8fCBlZGl0b3Iuc2VsZWN0aW9uLmlzRWRpdGFibGUoKSkge1xuICAgICAgICBhcHBseUZvcm1hdEFjdGlvbihlZGl0b3IsIG5hbWUsIHZhcnMsIG5vZGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBoYXNWYXJzID0gdmFsdWUgPT4gaGFzJDIodmFsdWUsICd2YXJzJyk7XG4gICAgY29uc3Qgc2V0dXAkdCA9IChyZWdpc3RlcmVkRm9ybWF0TGlzdGVuZXJzLCBlZGl0b3IpID0+IHtcbiAgICAgIHJlZ2lzdGVyZWRGb3JtYXRMaXN0ZW5lcnMuc2V0KHt9KTtcbiAgICAgIGVkaXRvci5vbignTm9kZUNoYW5nZScsIGUgPT4ge1xuICAgICAgICB1cGRhdGVBbmRGaXJlQ2hhbmdlQ2FsbGJhY2tzKGVkaXRvciwgZS5lbGVtZW50LCByZWdpc3RlcmVkRm9ybWF0TGlzdGVuZXJzLmdldCgpKTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdGb3JtYXRBcHBseSBGb3JtYXRSZW1vdmUnLCBlID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IE9wdGlvbmFsLmZyb20oZS5ub2RlKS5tYXAobm9kZU9yUmFuZ2UgPT4gaXNOb2RlKG5vZGVPclJhbmdlKSA/IG5vZGVPclJhbmdlIDogbm9kZU9yUmFuZ2Uuc3RhcnRDb250YWluZXIpLmJpbmQobm9kZSA9PiBpc0VsZW1lbnQkNihub2RlKSA/IE9wdGlvbmFsLnNvbWUobm9kZSkgOiBPcHRpb25hbC5mcm9tKG5vZGUucGFyZW50RWxlbWVudCkpLmdldE9yVGh1bmsoKCkgPT4gZmFsbGJhY2tFbGVtZW50KGVkaXRvcikpO1xuICAgICAgICB1cGRhdGVBbmRGaXJlQ2hhbmdlQ2FsbGJhY2tzKGVkaXRvciwgZWxlbWVudCwgcmVnaXN0ZXJlZEZvcm1hdExpc3RlbmVycy5nZXQoKSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZhbGxiYWNrRWxlbWVudCA9IGVkaXRvciA9PiBlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KCk7XG4gICAgY29uc3QgbWF0Y2hpbmdOb2RlID0gKGVkaXRvciwgcGFyZW50cywgZm9ybWF0LCBzaW1pbGFyLCB2YXJzKSA9PiB7XG4gICAgICBjb25zdCBpc01hdGNoaW5nTm9kZSA9IG5vZGUgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaGluZ0Zvcm1hdCA9IGVkaXRvci5mb3JtYXR0ZXIubWF0Y2hOb2RlKG5vZGUsIGZvcm1hdCwgdmFycyAhPT0gbnVsbCAmJiB2YXJzICE9PSB2b2lkIDAgPyB2YXJzIDoge30sIHNpbWlsYXIpO1xuICAgICAgICByZXR1cm4gIWlzVW5kZWZpbmVkKG1hdGNoaW5nRm9ybWF0KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1VuYWJsZVRvTWF0Y2ggPSBub2RlID0+IHtcbiAgICAgICAgaWYgKG1hdGNoZXNVbkluaGVyaXRlZEZvcm1hdFNlbGVjdG9yKGVkaXRvciwgbm9kZSwgZm9ybWF0KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghc2ltaWxhcikge1xuICAgICAgICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUoZWRpdG9yLmZvcm1hdHRlci5tYXRjaE5vZGUobm9kZSwgZm9ybWF0LCB2YXJzLCB0cnVlKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gZmluZFVudGlsJDEocGFyZW50cywgaXNNYXRjaGluZ05vZGUsIGlzVW5hYmxlVG9NYXRjaCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRQYXJlbnRzID0gKGVkaXRvciwgZWxtKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZWxtICE9PSBudWxsICYmIGVsbSAhPT0gdm9pZCAwID8gZWxtIDogZmFsbGJhY2tFbGVtZW50KGVkaXRvcik7XG4gICAgICByZXR1cm4gZmlsdGVyJDUoZ2V0UGFyZW50cyQyKGVkaXRvci5kb20sIGVsZW1lbnQpLCBub2RlID0+IGlzRWxlbWVudCQ2KG5vZGUpICYmICFpc0JvZ3VzJDIobm9kZSkpO1xuICAgIH07XG4gICAgY29uc3QgdXBkYXRlQW5kRmlyZUNoYW5nZUNhbGxiYWNrcyA9IChlZGl0b3IsIGVsbSwgcmVnaXN0ZXJlZENhbGxiYWNrcykgPT4ge1xuICAgICAgY29uc3QgcGFyZW50cyA9IGdldFBhcmVudHMoZWRpdG9yLCBlbG0pO1xuICAgICAgZWFjaCRkKHJlZ2lzdGVyZWRDYWxsYmFja3MsIChkYXRhLCBmb3JtYXQpID0+IHtcbiAgICAgICAgY29uc3QgcnVuSWZDaGFuZ2VkID0gc3BlYyA9PiB7XG4gICAgICAgICAgY29uc3QgbWF0Y2ggPSBtYXRjaGluZ05vZGUoZWRpdG9yLCBwYXJlbnRzLCBmb3JtYXQsIHNwZWMuc2ltaWxhciwgaGFzVmFycyhzcGVjKSA/IHNwZWMudmFycyA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgY29uc3QgaXNTZXQgPSBtYXRjaC5pc1NvbWUoKTtcbiAgICAgICAgICBpZiAoc3BlYy5zdGF0ZS5nZXQoKSAhPT0gaXNTZXQpIHtcbiAgICAgICAgICAgIHNwZWMuc3RhdGUuc2V0KGlzU2V0KTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBtYXRjaC5nZXRPcihlbG0pO1xuICAgICAgICAgICAgaWYgKGhhc1ZhcnMoc3BlYykpIHtcbiAgICAgICAgICAgICAgc3BlYy5jYWxsYmFjayhpc1NldCwge1xuICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgZm9ybWF0LFxuICAgICAgICAgICAgICAgIHBhcmVudHNcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlYWNoJGUoc3BlYy5jYWxsYmFja3MsIGNhbGxiYWNrID0+IGNhbGxiYWNrKGlzU2V0LCB7XG4gICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgICAgICAgcGFyZW50c1xuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBlYWNoJGUoW1xuICAgICAgICAgIGRhdGEud2l0aFNpbWlsYXIsXG4gICAgICAgICAgZGF0YS53aXRob3V0U2ltaWxhclxuICAgICAgICBdLCBydW5JZkNoYW5nZWQpO1xuICAgICAgICBlYWNoJGUoZGF0YS53aXRoVmFycywgcnVuSWZDaGFuZ2VkKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYWRkTGlzdGVuZXJzID0gKGVkaXRvciwgcmVnaXN0ZXJlZEZvcm1hdExpc3RlbmVycywgZm9ybWF0cywgY2FsbGJhY2ssIHNpbWlsYXIsIHZhcnMpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdENoYW5nZUl0ZW1zID0gcmVnaXN0ZXJlZEZvcm1hdExpc3RlbmVycy5nZXQoKTtcbiAgICAgIGVhY2gkZShmb3JtYXRzLnNwbGl0KCcsJyksIGZvcm1hdCA9PiB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gZ2V0JGEoZm9ybWF0Q2hhbmdlSXRlbXMsIGZvcm1hdCkuZ2V0T3JUaHVuaygoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYmFzZSA9IHtcbiAgICAgICAgICAgIHdpdGhTaW1pbGFyOiB7XG4gICAgICAgICAgICAgIHN0YXRlOiBDZWxsKGZhbHNlKSxcbiAgICAgICAgICAgICAgc2ltaWxhcjogdHJ1ZSxcbiAgICAgICAgICAgICAgY2FsbGJhY2tzOiBbXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdpdGhvdXRTaW1pbGFyOiB7XG4gICAgICAgICAgICAgIHN0YXRlOiBDZWxsKGZhbHNlKSxcbiAgICAgICAgICAgICAgc2ltaWxhcjogZmFsc2UsXG4gICAgICAgICAgICAgIGNhbGxiYWNrczogW11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3aXRoVmFyczogW11cbiAgICAgICAgICB9O1xuICAgICAgICAgIGZvcm1hdENoYW5nZUl0ZW1zW2Zvcm1hdF0gPSBiYXNlO1xuICAgICAgICAgIHJldHVybiBiYXNlO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZ2V0Q3VycmVudCA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJlbnRzID0gZ2V0UGFyZW50cyhlZGl0b3IpO1xuICAgICAgICAgIHJldHVybiBtYXRjaGluZ05vZGUoZWRpdG9yLCBwYXJlbnRzLCBmb3JtYXQsIHNpbWlsYXIsIHZhcnMpLmlzU29tZSgpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFycykpIHtcbiAgICAgICAgICBjb25zdCB0b0FwcGVuZFRvID0gc2ltaWxhciA/IGdyb3VwLndpdGhTaW1pbGFyIDogZ3JvdXAud2l0aG91dFNpbWlsYXI7XG4gICAgICAgICAgdG9BcHBlbmRUby5jYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgaWYgKHRvQXBwZW5kVG8uY2FsbGJhY2tzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgdG9BcHBlbmRUby5zdGF0ZS5zZXQoZ2V0Q3VycmVudCgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JvdXAud2l0aFZhcnMucHVzaCh7XG4gICAgICAgICAgICBzdGF0ZTogQ2VsbChnZXRDdXJyZW50KCkpLFxuICAgICAgICAgICAgc2ltaWxhcixcbiAgICAgICAgICAgIHZhcnMsXG4gICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyZWRGb3JtYXRMaXN0ZW5lcnMuc2V0KGZvcm1hdENoYW5nZUl0ZW1zKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZUxpc3RlbmVycyA9IChyZWdpc3RlcmVkRm9ybWF0TGlzdGVuZXJzLCBmb3JtYXRzLCBjYWxsYmFjaykgPT4ge1xuICAgICAgY29uc3QgZm9ybWF0Q2hhbmdlSXRlbXMgPSByZWdpc3RlcmVkRm9ybWF0TGlzdGVuZXJzLmdldCgpO1xuICAgICAgZWFjaCRlKGZvcm1hdHMuc3BsaXQoJywnKSwgZm9ybWF0ID0+IGdldCRhKGZvcm1hdENoYW5nZUl0ZW1zLCBmb3JtYXQpLmVhY2goZ3JvdXAgPT4ge1xuICAgICAgICBmb3JtYXRDaGFuZ2VJdGVtc1tmb3JtYXRdID0ge1xuICAgICAgICAgIHdpdGhTaW1pbGFyOiB7XG4gICAgICAgICAgICAuLi5ncm91cC53aXRoU2ltaWxhcixcbiAgICAgICAgICAgIGNhbGxiYWNrczogZmlsdGVyJDUoZ3JvdXAud2l0aFNpbWlsYXIuY2FsbGJhY2tzLCBjYiA9PiBjYiAhPT0gY2FsbGJhY2spXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aXRob3V0U2ltaWxhcjoge1xuICAgICAgICAgICAgLi4uZ3JvdXAud2l0aG91dFNpbWlsYXIsXG4gICAgICAgICAgICBjYWxsYmFja3M6IGZpbHRlciQ1KGdyb3VwLndpdGhvdXRTaW1pbGFyLmNhbGxiYWNrcywgY2IgPT4gY2IgIT09IGNhbGxiYWNrKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgd2l0aFZhcnM6IGZpbHRlciQ1KGdyb3VwLndpdGhWYXJzLCBpdGVtID0+IGl0ZW0uY2FsbGJhY2sgIT09IGNhbGxiYWNrKVxuICAgICAgICB9O1xuICAgICAgfSkpO1xuICAgICAgcmVnaXN0ZXJlZEZvcm1hdExpc3RlbmVycy5zZXQoZm9ybWF0Q2hhbmdlSXRlbXMpO1xuICAgIH07XG4gICAgY29uc3QgZm9ybWF0Q2hhbmdlZEludGVybmFsID0gKGVkaXRvciwgcmVnaXN0ZXJlZEZvcm1hdExpc3RlbmVycywgZm9ybWF0cywgY2FsbGJhY2ssIHNpbWlsYXIsIHZhcnMpID0+IHtcbiAgICAgIGFkZExpc3RlbmVycyhlZGl0b3IsIHJlZ2lzdGVyZWRGb3JtYXRMaXN0ZW5lcnMsIGZvcm1hdHMsIGNhbGxiYWNrLCBzaW1pbGFyLCB2YXJzKTtcbiAgICAgIHJldHVybiB7IHVuYmluZDogKCkgPT4gcmVtb3ZlTGlzdGVuZXJzKHJlZ2lzdGVyZWRGb3JtYXRMaXN0ZW5lcnMsIGZvcm1hdHMsIGNhbGxiYWNrKSB9O1xuICAgIH07XG5cbiAgICBjb25zdCB0b2dnbGUgPSAoZWRpdG9yLCBuYW1lLCB2YXJzLCBub2RlKSA9PiB7XG4gICAgICBjb25zdCBmbXQgPSBlZGl0b3IuZm9ybWF0dGVyLmdldChuYW1lKTtcbiAgICAgIGlmIChmbXQpIHtcbiAgICAgICAgaWYgKG1hdGNoJDIoZWRpdG9yLCBuYW1lLCB2YXJzLCBub2RlKSAmJiAoISgndG9nZ2xlJyBpbiBmbXRbMF0pIHx8IGZtdFswXS50b2dnbGUpKSB7XG4gICAgICAgICAgcmVtb3ZlRm9ybWF0JDEoZWRpdG9yLCBuYW1lLCB2YXJzLCBub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcHBseUZvcm1hdCQxKGVkaXRvciwgbmFtZSwgdmFycywgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZXhwbG9kZSQxID0gVG9vbHMuZXhwbG9kZTtcbiAgICBjb25zdCBjcmVhdGUkOCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcnMgPSB7fTtcbiAgICAgIGNvbnN0IGFkZEZpbHRlciA9IChuYW1lLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBlYWNoJGUoZXhwbG9kZSQxKG5hbWUpLCBuYW1lID0+IHtcbiAgICAgICAgICBpZiAoIWhhcyQyKGZpbHRlcnMsIG5hbWUpKSB7XG4gICAgICAgICAgICBmaWx0ZXJzW25hbWVdID0ge1xuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICBjYWxsYmFja3M6IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaWx0ZXJzW25hbWVdLmNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0RmlsdGVycyA9ICgpID0+IHZhbHVlcyhmaWx0ZXJzKTtcbiAgICAgIGNvbnN0IHJlbW92ZUZpbHRlciA9IChuYW1lLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBlYWNoJGUoZXhwbG9kZSQxKG5hbWUpLCBuYW1lID0+IHtcbiAgICAgICAgICBpZiAoaGFzJDIoZmlsdGVycywgbmFtZSkpIHtcbiAgICAgICAgICAgIGlmIChpc05vbk51bGxhYmxlKGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBmaWx0ZXJzW25hbWVdO1xuICAgICAgICAgICAgICBjb25zdCBuZXdDYWxsYmFja3MgPSBmaWx0ZXIkNShmaWx0ZXIuY2FsbGJhY2tzLCBjID0+IGMgIT09IGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgaWYgKG5ld0NhbGxiYWNrcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLmNhbGxiYWNrcyA9IG5ld0NhbGxiYWNrcztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgZmlsdGVyc1tuYW1lXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGVsZXRlIGZpbHRlcnNbbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhZGRGaWx0ZXIsXG4gICAgICAgIGdldEZpbHRlcnMsXG4gICAgICAgIHJlbW92ZUZpbHRlclxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVtb3ZlQXR0cnMgPSAobm9kZSwgbmFtZXMpID0+IHtcbiAgICAgIGVhY2gkZShuYW1lcywgbmFtZSA9PiB7XG4gICAgICAgIG5vZGUuYXR0cihuYW1lLCBudWxsKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYWRkRm9udFRvU3BhbnNGaWx0ZXIgPSAoZG9tUGFyc2VyLCBzdHlsZXMsIGZvbnRTaXplcykgPT4ge1xuICAgICAgZG9tUGFyc2VyLmFkZE5vZGVGaWx0ZXIoJ2ZvbnQnLCBub2RlcyA9PiB7XG4gICAgICAgIGVhY2gkZShub2Rlcywgbm9kZSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJvcHMgPSBzdHlsZXMucGFyc2Uobm9kZS5hdHRyKCdzdHlsZScpKTtcbiAgICAgICAgICBjb25zdCBjb2xvciA9IG5vZGUuYXR0cignY29sb3InKTtcbiAgICAgICAgICBjb25zdCBmYWNlID0gbm9kZS5hdHRyKCdmYWNlJyk7XG4gICAgICAgICAgY29uc3Qgc2l6ZSA9IG5vZGUuYXR0cignc2l6ZScpO1xuICAgICAgICAgIGlmIChjb2xvcikge1xuICAgICAgICAgICAgcHJvcHMuY29sb3IgPSBjb2xvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZhY2UpIHtcbiAgICAgICAgICAgIHByb3BzWydmb250LWZhbWlseSddID0gZmFjZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNpemUpIHtcbiAgICAgICAgICAgIHRvSW50KHNpemUpLmVhY2gobnVtID0+IHtcbiAgICAgICAgICAgICAgcHJvcHNbJ2ZvbnQtc2l6ZSddID0gZm9udFNpemVzW251bSAtIDFdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5vZGUubmFtZSA9ICdzcGFuJztcbiAgICAgICAgICBub2RlLmF0dHIoJ3N0eWxlJywgc3R5bGVzLnNlcmlhbGl6ZShwcm9wcykpO1xuICAgICAgICAgIHJlbW92ZUF0dHJzKG5vZGUsIFtcbiAgICAgICAgICAgICdjb2xvcicsXG4gICAgICAgICAgICAnZmFjZScsXG4gICAgICAgICAgICAnc2l6ZSdcbiAgICAgICAgICBdKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFkZFN0cmlrZUZpbHRlciA9IChkb21QYXJzZXIsIHNjaGVtYSwgc3R5bGVzKSA9PiB7XG4gICAgICBkb21QYXJzZXIuYWRkTm9kZUZpbHRlcignc3RyaWtlJywgbm9kZXMgPT4ge1xuICAgICAgICBjb25zdCBjb252ZXJ0VG9TVGFnID0gc2NoZW1hLnR5cGUgIT09ICdodG1sNCc7XG4gICAgICAgIGVhY2gkZShub2Rlcywgbm9kZSA9PiB7XG4gICAgICAgICAgaWYgKGNvbnZlcnRUb1NUYWcpIHtcbiAgICAgICAgICAgIG5vZGUubmFtZSA9ICdzJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBzdHlsZXMucGFyc2Uobm9kZS5hdHRyKCdzdHlsZScpKTtcbiAgICAgICAgICAgIHByb3BzWyd0ZXh0LWRlY29yYXRpb24nXSA9ICdsaW5lLXRocm91Z2gnO1xuICAgICAgICAgICAgbm9kZS5uYW1lID0gJ3NwYW4nO1xuICAgICAgICAgICAgbm9kZS5hdHRyKCdzdHlsZScsIHN0eWxlcy5zZXJpYWxpemUocHJvcHMpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBhZGRGaWx0ZXJzID0gKGRvbVBhcnNlciwgc2V0dGluZ3MsIHNjaGVtYSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3Qgc3R5bGVzID0gU3R5bGVzKCk7XG4gICAgICBpZiAoc2V0dGluZ3MuY29udmVydF9mb250c190b19zcGFucykge1xuICAgICAgICBhZGRGb250VG9TcGFuc0ZpbHRlcihkb21QYXJzZXIsIHN0eWxlcywgVG9vbHMuZXhwbG9kZSgoX2EgPSBzZXR0aW5ncy5mb250X3NpemVfbGVnYWN5X3ZhbHVlcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJycpKTtcbiAgICAgIH1cbiAgICAgIGFkZFN0cmlrZUZpbHRlcihkb21QYXJzZXIsIHNjaGVtYSwgc3R5bGVzKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyJDUgPSAoZG9tUGFyc2VyLCBzZXR0aW5ncywgc2NoZW1hKSA9PiB7XG4gICAgICBpZiAoc2V0dGluZ3MuaW5saW5lX3N0eWxlcykge1xuICAgICAgICBhZGRGaWx0ZXJzKGRvbVBhcnNlciwgc2V0dGluZ3MsIHNjaGVtYSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGFkZE5vZGVGaWx0ZXIgPSAoc2V0dGluZ3MsIGh0bWxQYXJzZXIsIHNjaGVtYSkgPT4ge1xuICAgICAgaHRtbFBhcnNlci5hZGROb2RlRmlsdGVyKCdicicsIChub2RlcywgXywgYXJncykgPT4ge1xuICAgICAgICBjb25zdCBibG9ja0VsZW1lbnRzID0gVG9vbHMuZXh0ZW5kKHt9LCBzY2hlbWEuZ2V0QmxvY2tFbGVtZW50cygpKTtcbiAgICAgICAgY29uc3Qgbm9uRW1wdHlFbGVtZW50cyA9IHNjaGVtYS5nZXROb25FbXB0eUVsZW1lbnRzKCk7XG4gICAgICAgIGNvbnN0IHdoaXRlc3BhY2VFbGVtZW50cyA9IHNjaGVtYS5nZXRXaGl0ZXNwYWNlRWxlbWVudHMoKTtcbiAgICAgICAgYmxvY2tFbGVtZW50cy5ib2R5ID0gMTtcbiAgICAgICAgY29uc3QgaXNCbG9jayA9IG5vZGUgPT4gbm9kZS5uYW1lIGluIGJsb2NrRWxlbWVudHMgfHwgaXNUcmFuc3BhcmVudEFzdEJsb2NrKHNjaGVtYSwgbm9kZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gbm9kZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgbGV0IG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgICBsZXQgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG4gICAgICAgICAgaWYgKHBhcmVudCAmJiBpc0Jsb2NrKHBhcmVudCkgJiYgbm9kZSA9PT0gcGFyZW50Lmxhc3RDaGlsZCkge1xuICAgICAgICAgICAgbGV0IHByZXYgPSBub2RlLnByZXY7XG4gICAgICAgICAgICB3aGlsZSAocHJldikge1xuICAgICAgICAgICAgICBjb25zdCBwcmV2TmFtZSA9IHByZXYubmFtZTtcbiAgICAgICAgICAgICAgaWYgKHByZXZOYW1lICE9PSAnc3BhbicgfHwgcHJldi5hdHRyKCdkYXRhLW1jZS10eXBlJykgIT09ICdib29rbWFyaycpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldk5hbWUgPT09ICdicicpIHtcbiAgICAgICAgICAgICAgICAgIG5vZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwcmV2ID0gcHJldi5wcmV2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgaWYgKGlzRW1wdHkoc2NoZW1hLCBub25FbXB0eUVsZW1lbnRzLCB3aGl0ZXNwYWNlRWxlbWVudHMsIHBhcmVudCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50UnVsZSA9IHNjaGVtYS5nZXRFbGVtZW50UnVsZShwYXJlbnQubmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRSdWxlKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFJ1bGUucmVtb3ZlRW1wdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50UnVsZS5wYWRkRW1wdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZEVtcHR5Tm9kZShzZXR0aW5ncywgYXJncywgaXNCbG9jaywgcGFyZW50KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGxhc3RQYXJlbnQgPSBub2RlO1xuICAgICAgICAgICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQuZmlyc3RDaGlsZCA9PT0gbGFzdFBhcmVudCAmJiBwYXJlbnQubGFzdENoaWxkID09PSBsYXN0UGFyZW50KSB7XG4gICAgICAgICAgICAgIGxhc3RQYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgICAgICAgIGlmIChibG9ja0VsZW1lbnRzW3BhcmVudC5uYW1lXSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGFzdFBhcmVudCA9PT0gcGFyZW50KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gbmV3IEFzdE5vZGUoJyN0ZXh0JywgMyk7XG4gICAgICAgICAgICAgIHRleHROb2RlLnZhbHVlID0gbmJzcDtcbiAgICAgICAgICAgICAgbm9kZS5yZXBsYWNlKHRleHROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBibG9iVXJpVG9CbG9iID0gdXJsID0+IGZldGNoKHVybCkudGhlbihyZXMgPT4gcmVzLm9rID8gcmVzLmJsb2IoKSA6IFByb21pc2UucmVqZWN0KCkpLmNhdGNoKCgpID0+IFByb21pc2UucmVqZWN0KHtcbiAgICAgIG1lc3NhZ2U6IGBDYW5ub3QgY29udmVydCAkeyB1cmwgfSB0byBCbG9iLiBSZXNvdXJjZSBtaWdodCBub3QgZXhpc3Qgb3IgaXMgaW5hY2Nlc3NpYmxlLmAsXG4gICAgICB1cmlUeXBlOiAnYmxvYidcbiAgICB9KSk7XG4gICAgY29uc3QgZXh0cmFjdEJhc2U2NERhdGEgPSBkYXRhID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSAvKFthLXowLTkrXFwvPVxcc10rKS9pLmV4ZWMoZGF0YSk7XG4gICAgICByZXR1cm4gbWF0Y2hlcyA/IG1hdGNoZXNbMV0gOiAnJztcbiAgICB9O1xuICAgIGNvbnN0IHBhcnNlRGF0YVVyaSA9IHVyaSA9PiB7XG4gICAgICBjb25zdCBbdHlwZSwgLi4ucmVzdF0gPSB1cmkuc3BsaXQoJywnKTtcbiAgICAgIGNvbnN0IGRhdGEgPSByZXN0LmpvaW4oJywnKTtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSAvZGF0YTooW14vXStcXC9bXjtdKykoOy4rKT8vLmV4ZWModHlwZSk7XG4gICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICBjb25zdCBiYXNlNjRFbmNvZGVkID0gbWF0Y2hlc1syXSA9PT0gJztiYXNlNjQnO1xuICAgICAgICBjb25zdCBleHRyYWN0ZWREYXRhID0gYmFzZTY0RW5jb2RlZCA/IGV4dHJhY3RCYXNlNjREYXRhKGRhdGEpIDogZGVjb2RlVVJJQ29tcG9uZW50KGRhdGEpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh7XG4gICAgICAgICAgdHlwZTogbWF0Y2hlc1sxXSxcbiAgICAgICAgICBkYXRhOiBleHRyYWN0ZWREYXRhLFxuICAgICAgICAgIGJhc2U2NEVuY29kZWRcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYnVpbGRCbG9iID0gKHR5cGUsIGRhdGEsIGJhc2U2NEVuY29kZWQgPSB0cnVlKSA9PiB7XG4gICAgICBsZXQgc3RyID0gZGF0YTtcbiAgICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc3RyID0gYXRvYihkYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGFyciA9IG5ldyBVaW50OEFycmF5KHN0ci5sZW5ndGgpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXJyW2ldID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShuZXcgQmxvYihbYXJyXSwgeyB0eXBlIH0pKTtcbiAgICB9O1xuICAgIGNvbnN0IGRhdGFVcmlUb0Jsb2IgPSB1cmkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcGFyc2VEYXRhVXJpKHVyaSkuYmluZCgoe3R5cGUsIGRhdGEsIGJhc2U2NEVuY29kZWR9KSA9PiBidWlsZEJsb2IodHlwZSwgZGF0YSwgYmFzZTY0RW5jb2RlZCkpLmZvbGQoKCkgPT4gcmVqZWN0KCdJbnZhbGlkIGRhdGEgVVJJJyksIHJlc29sdmUpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCB1cmlUb0Jsb2IgPSB1cmwgPT4ge1xuICAgICAgaWYgKHN0YXJ0c1dpdGgodXJsLCAnYmxvYjonKSkge1xuICAgICAgICByZXR1cm4gYmxvYlVyaVRvQmxvYih1cmwpO1xuICAgICAgfSBlbHNlIGlmIChzdGFydHNXaXRoKHVybCwgJ2RhdGE6JykpIHtcbiAgICAgICAgcmV0dXJuIGRhdGFVcmlUb0Jsb2IodXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnVW5rbm93biBVUkkgZm9ybWF0Jyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBibG9iVG9EYXRhVXJpID0gYmxvYiA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdCk7XG4gICAgICAgIH07XG4gICAgICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICByZWplY3QoKF9hID0gcmVhZGVyLmVycm9yKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubWVzc2FnZSk7XG4gICAgICAgIH07XG4gICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGxldCBjb3VudCQxID0gMDtcbiAgICBjb25zdCB1bmlxdWVJZCQxID0gcHJlZml4ID0+IHtcbiAgICAgIHJldHVybiAocHJlZml4IHx8ICdibG9iaWQnKSArIGNvdW50JDErKztcbiAgICB9O1xuICAgIGNvbnN0IHByb2Nlc3NEYXRhVXJpID0gKGRhdGFVcmksIGJhc2U2NE9ubHksIGdlbmVyYXRlQmxvYkluZm8pID0+IHtcbiAgICAgIHJldHVybiBwYXJzZURhdGFVcmkoZGF0YVVyaSkuYmluZCgoe2RhdGEsIHR5cGUsIGJhc2U2NEVuY29kZWR9KSA9PiB7XG4gICAgICAgIGlmIChiYXNlNjRPbmx5ICYmICFiYXNlNjRFbmNvZGVkKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBiYXNlNjQgPSBiYXNlNjRFbmNvZGVkID8gZGF0YSA6IGJ0b2EoZGF0YSk7XG4gICAgICAgICAgcmV0dXJuIGdlbmVyYXRlQmxvYkluZm8oYmFzZTY0LCB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVCbG9iSW5mbyQxID0gKGJsb2JDYWNoZSwgYmxvYiwgYmFzZTY0KSA9PiB7XG4gICAgICBjb25zdCBibG9iSW5mbyA9IGJsb2JDYWNoZS5jcmVhdGUodW5pcXVlSWQkMSgpLCBibG9iLCBiYXNlNjQpO1xuICAgICAgYmxvYkNhY2hlLmFkZChibG9iSW5mbyk7XG4gICAgICByZXR1cm4gYmxvYkluZm87XG4gICAgfTtcbiAgICBjb25zdCBkYXRhVXJpVG9CbG9iSW5mbyA9IChibG9iQ2FjaGUsIGRhdGFVcmksIGJhc2U2NE9ubHkgPSBmYWxzZSkgPT4ge1xuICAgICAgcmV0dXJuIHByb2Nlc3NEYXRhVXJpKGRhdGFVcmksIGJhc2U2NE9ubHksIChiYXNlNjQsIHR5cGUpID0+IE9wdGlvbmFsLmZyb20oYmxvYkNhY2hlLmdldEJ5RGF0YShiYXNlNjQsIHR5cGUpKS5vclRodW5rKCgpID0+IGJ1aWxkQmxvYih0eXBlLCBiYXNlNjQpLm1hcChibG9iID0+IGNyZWF0ZUJsb2JJbmZvJDEoYmxvYkNhY2hlLCBibG9iLCBiYXNlNjQpKSkpO1xuICAgIH07XG4gICAgY29uc3QgaW1hZ2VUb0Jsb2JJbmZvID0gKGJsb2JDYWNoZSwgaW1hZ2VTcmMpID0+IHtcbiAgICAgIGNvbnN0IGludmFsaWREYXRhVXJpID0gKCkgPT4gUHJvbWlzZS5yZWplY3QoJ0ludmFsaWQgZGF0YSBVUkknKTtcbiAgICAgIGlmIChzdGFydHNXaXRoKGltYWdlU3JjLCAnYmxvYjonKSkge1xuICAgICAgICBjb25zdCBibG9iSW5mbyA9IGJsb2JDYWNoZS5nZXRCeVVyaShpbWFnZVNyYyk7XG4gICAgICAgIGlmIChpc05vbk51bGxhYmxlKGJsb2JJbmZvKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYmxvYkluZm8pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB1cmlUb0Jsb2IoaW1hZ2VTcmMpLnRoZW4oYmxvYiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvRGF0YVVyaShibG9iKS50aGVuKGRhdGFVcmkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc0RhdGFVcmkoZGF0YVVyaSwgZmFsc2UsIGJhc2U2NCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoY3JlYXRlQmxvYkluZm8kMShibG9iQ2FjaGUsIGJsb2IsIGJhc2U2NCkpO1xuICAgICAgICAgICAgICB9KS5nZXRPclRodW5rKGludmFsaWREYXRhVXJpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0c1dpdGgoaW1hZ2VTcmMsICdkYXRhOicpKSB7XG4gICAgICAgIHJldHVybiBkYXRhVXJpVG9CbG9iSW5mbyhibG9iQ2FjaGUsIGltYWdlU3JjKS5mb2xkKGludmFsaWREYXRhVXJpLCBibG9iSW5mbyA9PiBQcm9taXNlLnJlc29sdmUoYmxvYkluZm8pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnVW5rbm93biBpbWFnZSBkYXRhIGZvcm1hdCcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBpc0JvZ3VzSW1hZ2UgPSBpbWcgPT4gaXNOb25OdWxsYWJsZShpbWcuYXR0cignZGF0YS1tY2UtYm9ndXMnKSk7XG4gICAgY29uc3QgaXNJbnRlcm5hbEltYWdlU291cmNlID0gaW1nID0+IGltZy5hdHRyKCdzcmMnKSA9PT0gRW52LnRyYW5zcGFyZW50U3JjIHx8IGlzTm9uTnVsbGFibGUoaW1nLmF0dHIoJ2RhdGEtbWNlLXBsYWNlaG9sZGVyJykpO1xuICAgIGNvbnN0IHJlZ2lzdGVyQmFzZTY0SW1hZ2VGaWx0ZXIgPSAocGFyc2VyLCBzZXR0aW5ncykgPT4ge1xuICAgICAgY29uc3Qge2Jsb2JfY2FjaGU6IGJsb2JDYWNoZX0gPSBzZXR0aW5ncztcbiAgICAgIGlmIChibG9iQ2FjaGUpIHtcbiAgICAgICAgY29uc3QgcHJvY2Vzc0ltYWdlID0gaW1nID0+IHtcbiAgICAgICAgICBjb25zdCBpbnB1dFNyYyA9IGltZy5hdHRyKCdzcmMnKTtcbiAgICAgICAgICBpZiAoaXNJbnRlcm5hbEltYWdlU291cmNlKGltZykgfHwgaXNCb2d1c0ltYWdlKGltZykgfHwgaXNOdWxsYWJsZShpbnB1dFNyYykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGF0YVVyaVRvQmxvYkluZm8oYmxvYkNhY2hlLCBpbnB1dFNyYywgdHJ1ZSkuZWFjaChibG9iSW5mbyA9PiB7XG4gICAgICAgICAgICBpbWcuYXR0cignc3JjJywgYmxvYkluZm8uYmxvYlVyaSgpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgcGFyc2VyLmFkZEF0dHJpYnV0ZUZpbHRlcignc3JjJywgbm9kZXMgPT4gZWFjaCRlKG5vZGVzLCBwcm9jZXNzSW1hZ2UpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyJDQgPSAocGFyc2VyLCBzZXR0aW5ncykgPT4ge1xuICAgICAgY29uc3Qgc2NoZW1hID0gcGFyc2VyLnNjaGVtYTtcbiAgICAgIGlmIChzZXR0aW5ncy5yZW1vdmVfdHJhaWxpbmdfYnJzKSB7XG4gICAgICAgIGFkZE5vZGVGaWx0ZXIoc2V0dGluZ3MsIHBhcnNlciwgc2NoZW1hKTtcbiAgICAgIH1cbiAgICAgIHBhcnNlci5hZGRBdHRyaWJ1dGVGaWx0ZXIoJ2hyZWYnLCBub2RlcyA9PiB7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBhcHBlbmRSZWwgPSByZWwgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcnRzID0gcmVsLnNwbGl0KCcgJykuZmlsdGVyKHAgPT4gcC5sZW5ndGggPiAwKTtcbiAgICAgICAgICByZXR1cm4gcGFydHMuY29uY2F0KFsnbm9vcGVuZXInXSkuc29ydCgpLmpvaW4oJyAnKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWRkTm9PcGVuZXIgPSByZWwgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld1JlbCA9IHJlbCA/IFRvb2xzLnRyaW0ocmVsKSA6ICcnO1xuICAgICAgICAgIGlmICghL1xcYihub29wZW5lcilcXGIvZy50ZXN0KG5ld1JlbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHBlbmRSZWwobmV3UmVsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ld1JlbDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmICghc2V0dGluZ3MuYWxsb3dfdW5zYWZlX2xpbmtfdGFyZ2V0KSB7XG4gICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICAgICAgaWYgKG5vZGUubmFtZSA9PT0gJ2EnICYmIG5vZGUuYXR0cigndGFyZ2V0JykgPT09ICdfYmxhbmsnKSB7XG4gICAgICAgICAgICAgIG5vZGUuYXR0cigncmVsJywgYWRkTm9PcGVuZXIobm9kZS5hdHRyKCdyZWwnKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoIXNldHRpbmdzLmFsbG93X2h0bWxfaW5fbmFtZWRfYW5jaG9yKSB7XG4gICAgICAgIHBhcnNlci5hZGRBdHRyaWJ1dGVGaWx0ZXIoJ2lkLG5hbWUnLCBub2RlcyA9PiB7XG4gICAgICAgICAgbGV0IGkgPSBub2Rlcy5sZW5ndGgsIHNpYmxpbmcsIHByZXZTaWJsaW5nLCBwYXJlbnQsIG5vZGU7XG4gICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICAgICAgaWYgKG5vZGUubmFtZSA9PT0gJ2EnICYmIG5vZGUuZmlyc3RDaGlsZCAmJiAhbm9kZS5hdHRyKCdocmVmJykpIHtcbiAgICAgICAgICAgICAgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG4gICAgICAgICAgICAgIHNpYmxpbmcgPSBub2RlLmxhc3RDaGlsZDtcbiAgICAgICAgICAgICAgd2hpbGUgKHNpYmxpbmcgJiYgcGFyZW50KSB7XG4gICAgICAgICAgICAgICAgcHJldlNpYmxpbmcgPSBzaWJsaW5nLnByZXY7XG4gICAgICAgICAgICAgICAgcGFyZW50Lmluc2VydChzaWJsaW5nLCBub2RlKTtcbiAgICAgICAgICAgICAgICBzaWJsaW5nID0gcHJldlNpYmxpbmc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHNldHRpbmdzLmZpeF9saXN0X2VsZW1lbnRzKSB7XG4gICAgICAgIHBhcnNlci5hZGROb2RlRmlsdGVyKCd1bCxvbCcsIG5vZGVzID0+IHtcbiAgICAgICAgICBsZXQgaSA9IG5vZGVzLmxlbmd0aCwgbm9kZSwgcGFyZW50Tm9kZTtcbiAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgICBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnQ7XG4gICAgICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiAocGFyZW50Tm9kZS5uYW1lID09PSAndWwnIHx8IHBhcmVudE5vZGUubmFtZSA9PT0gJ29sJykpIHtcbiAgICAgICAgICAgICAgaWYgKG5vZGUucHJldiAmJiBub2RlLnByZXYubmFtZSA9PT0gJ2xpJykge1xuICAgICAgICAgICAgICAgIG5vZGUucHJldi5hcHBlbmQobm9kZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGkgPSBuZXcgQXN0Tm9kZSgnbGknLCAxKTtcbiAgICAgICAgICAgICAgICBsaS5hdHRyKCdzdHlsZScsICdsaXN0LXN0eWxlLXR5cGU6IG5vbmUnKTtcbiAgICAgICAgICAgICAgICBub2RlLndyYXAobGkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbGlkQ2xhc3NlcyA9IHNjaGVtYS5nZXRWYWxpZENsYXNzZXMoKTtcbiAgICAgIGlmIChzZXR0aW5ncy52YWxpZGF0ZSAmJiB2YWxpZENsYXNzZXMpIHtcbiAgICAgICAgcGFyc2VyLmFkZEF0dHJpYnV0ZUZpbHRlcignY2xhc3MnLCBub2RlcyA9PiB7XG4gICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGNsYXp6ID0gKF9hID0gbm9kZS5hdHRyKCdjbGFzcycpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IFRvb2xzLmV4cGxvZGUoY2xhenosICcgJyk7XG4gICAgICAgICAgICBsZXQgY2xhc3NWYWx1ZSA9ICcnO1xuICAgICAgICAgICAgZm9yIChsZXQgY2kgPSAwOyBjaSA8IGNsYXNzTGlzdC5sZW5ndGg7IGNpKyspIHtcbiAgICAgICAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gY2xhc3NMaXN0W2NpXTtcbiAgICAgICAgICAgICAgbGV0IHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGxldCB2YWxpZENsYXNzZXNNYXAgPSB2YWxpZENsYXNzZXNbJyonXTtcbiAgICAgICAgICAgICAgaWYgKHZhbGlkQ2xhc3Nlc01hcCAmJiB2YWxpZENsYXNzZXNNYXBbY2xhc3NOYW1lXSkge1xuICAgICAgICAgICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YWxpZENsYXNzZXNNYXAgPSB2YWxpZENsYXNzZXNbbm9kZS5uYW1lXTtcbiAgICAgICAgICAgICAgaWYgKCF2YWxpZCAmJiB2YWxpZENsYXNzZXNNYXAgJiYgdmFsaWRDbGFzc2VzTWFwW2NsYXNzTmFtZV0pIHtcbiAgICAgICAgICAgICAgICB2YWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNsYXNzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzVmFsdWUgKz0gJyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjbGFzc1ZhbHVlICs9IGNsYXNzTmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjbGFzc1ZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICBjbGFzc1ZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUuYXR0cignY2xhc3MnLCBjbGFzc1ZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmVnaXN0ZXJCYXNlNjRJbWFnZUZpbHRlcihwYXJzZXIsIHNldHRpbmdzKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgICdAYmFiZWwvaGVscGVycyAtIHR5cGVvZic7XG4gICAgICByZXR1cm4gX3R5cGVvZiA9ICdmdW5jdGlvbicgPT0gdHlwZW9mIFN5bWJvbCAmJiAnc3ltYm9sJyA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICAgIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogJiYgJ2Z1bmN0aW9uJyA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/ICdzeW1ib2wnIDogdHlwZW9mIG9iajtcbiAgICAgIH0sIF90eXBlb2Yob2JqKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICd1bmRlZmluZWQnIHx8ICFSZWZsZWN0LmNvbnN0cnVjdClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICh0eXBlb2YgUHJveHkgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7XG4gICAgICBpZiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpKSB7XG4gICAgICAgIF9jb25zdHJ1Y3QgPSBSZWZsZWN0LmNvbnN0cnVjdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgICAgICB2YXIgYSA9IFtudWxsXTtcbiAgICAgICAgICBhLnB1c2guYXBwbHkoYSwgYXJncyk7XG4gICAgICAgICAgdmFyIENvbnN0cnVjdG9yID0gRnVuY3Rpb24uYmluZC5hcHBseShQYXJlbnQsIGEpO1xuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgICAgICAgIGlmIChDbGFzcylcbiAgICAgICAgICAgIF9zZXRQcm90b3R5cGVPZihpbnN0YW5jZSwgQ2xhc3MucHJvdG90eXBlKTtcbiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gICAgICByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKVxuICAgICAgICByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gICAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlclsnQEBpdGVyYXRvciddICE9IG51bGwpXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gICAgICBpZiAoIW8pXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICh0eXBlb2YgbyA9PT0gJ3N0cmluZycpXG4gICAgICAgIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICAgICAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICAgICAgaWYgKG4gPT09ICdPYmplY3QnICYmIG8uY29uc3RydWN0b3IpXG4gICAgICAgIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICBpZiAobiA9PT0gJ01hcCcgfHwgbiA9PT0gJ1NldCcpXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICAgICAgaWYgKG4gPT09ICdBcmd1bWVudHMnIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKVxuICAgICAgICByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgICAgIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKVxuICAgICAgICBsZW4gPSBhcnIubGVuZ3RoO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKVxuICAgICAgICBhcnIyW2ldID0gYXJyW2ldO1xuICAgICAgcmV0dXJuIGFycjI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4nKTtcbiAgICB9XG4gICAgdmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0Lmhhc093blByb3BlcnR5LCBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiwgaXNGcm96ZW4gPSBPYmplY3QuaXNGcm96ZW4sIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mLCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAgIHZhciBmcmVlemUgPSBPYmplY3QuZnJlZXplLCBzZWFsID0gT2JqZWN0LnNlYWwsIGNyZWF0ZSQ3ID0gT2JqZWN0LmNyZWF0ZTtcbiAgICB2YXIgX3JlZiA9IHR5cGVvZiBSZWZsZWN0ICE9PSAndW5kZWZpbmVkJyAmJiBSZWZsZWN0LCBhcHBseSA9IF9yZWYuYXBwbHksIGNvbnN0cnVjdCA9IF9yZWYuY29uc3RydWN0O1xuICAgIGlmICghYXBwbHkpIHtcbiAgICAgIGFwcGx5ID0gZnVuY3Rpb24gYXBwbHkoZnVuLCB0aGlzVmFsdWUsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGZ1bi5hcHBseSh0aGlzVmFsdWUsIGFyZ3MpO1xuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKCFmcmVlemUpIHtcbiAgICAgIGZyZWV6ZSA9IGZ1bmN0aW9uIGZyZWV6ZSh4KSB7XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKCFzZWFsKSB7XG4gICAgICBzZWFsID0gZnVuY3Rpb24gc2VhbCh4KSB7XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKCFjb25zdHJ1Y3QpIHtcbiAgICAgIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIGNvbnN0cnVjdChGdW5jLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiBfY29uc3RydWN0KEZ1bmMsIF90b0NvbnN1bWFibGVBcnJheShhcmdzKSk7XG4gICAgICB9O1xuICAgIH1cbiAgICB2YXIgYXJyYXlGb3JFYWNoID0gdW5hcHBseShBcnJheS5wcm90b3R5cGUuZm9yRWFjaCk7XG4gICAgdmFyIGFycmF5UG9wID0gdW5hcHBseShBcnJheS5wcm90b3R5cGUucG9wKTtcbiAgICB2YXIgYXJyYXlQdXNoID0gdW5hcHBseShBcnJheS5wcm90b3R5cGUucHVzaCk7XG4gICAgdmFyIHN0cmluZ1RvTG93ZXJDYXNlID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlKTtcbiAgICB2YXIgc3RyaW5nTWF0Y2ggPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUubWF0Y2gpO1xuICAgIHZhciBzdHJpbmdSZXBsYWNlID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xuICAgIHZhciBzdHJpbmdJbmRleE9mID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLmluZGV4T2YpO1xuICAgIHZhciBzdHJpbmdUcmltID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLnRyaW0pO1xuICAgIHZhciByZWdFeHBUZXN0ID0gdW5hcHBseShSZWdFeHAucHJvdG90eXBlLnRlc3QpO1xuICAgIHZhciB0eXBlRXJyb3JDcmVhdGUgPSB1bmNvbnN0cnVjdChUeXBlRXJyb3IpO1xuICAgIGZ1bmN0aW9uIHVuYXBwbHkoZnVuYykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0aGlzQXJnKSB7XG4gICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncyk7XG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiB1bmNvbnN0cnVjdChmdW5jKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdChmdW5jLCBhcmdzKTtcbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZFRvU2V0KHNldCwgYXJyYXkpIHtcbiAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICBzZXRQcm90b3R5cGVPZihzZXQsIG51bGwpO1xuICAgICAgfVxuICAgICAgdmFyIGwgPSBhcnJheS5sZW5ndGg7XG4gICAgICB3aGlsZSAobC0tKSB7XG4gICAgICAgIHZhciBlbGVtZW50ID0gYXJyYXlbbF07XG4gICAgICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB2YXIgbGNFbGVtZW50ID0gc3RyaW5nVG9Mb3dlckNhc2UoZWxlbWVudCk7XG4gICAgICAgICAgaWYgKGxjRWxlbWVudCAhPT0gZWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKCFpc0Zyb3plbihhcnJheSkpIHtcbiAgICAgICAgICAgICAgYXJyYXlbbF0gPSBsY0VsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50ID0gbGNFbGVtZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXRbZWxlbWVudF0gPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xvbmUob2JqZWN0KSB7XG4gICAgICB2YXIgbmV3T2JqZWN0ID0gY3JlYXRlJDcobnVsbCk7XG4gICAgICB2YXIgcHJvcGVydHk7XG4gICAgICBmb3IgKHByb3BlcnR5IGluIG9iamVjdCkge1xuICAgICAgICBpZiAoYXBwbHkoaGFzT3duUHJvcGVydHksIG9iamVjdCwgW3Byb3BlcnR5XSkpIHtcbiAgICAgICAgICBuZXdPYmplY3RbcHJvcGVydHldID0gb2JqZWN0W3Byb3BlcnR5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld09iamVjdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbG9va3VwR2V0dGVyKG9iamVjdCwgcHJvcCkge1xuICAgICAgd2hpbGUgKG9iamVjdCAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgZGVzYyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3ApO1xuICAgICAgICBpZiAoZGVzYykge1xuICAgICAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuYXBwbHkoZGVzYy5nZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIGRlc2MudmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmFwcGx5KGRlc2MudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvYmplY3QgPSBnZXRQcm90b3R5cGVPZihvYmplY3QpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZmFsbGJhY2tWYWx1ZShlbGVtZW50KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignZmFsbGJhY2sgdmFsdWUgZm9yJywgZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbGxiYWNrVmFsdWU7XG4gICAgfVxuICAgIHZhciBodG1sJDEgPSBmcmVlemUoW1xuICAgICAgJ2EnLFxuICAgICAgJ2FiYnInLFxuICAgICAgJ2Fjcm9ueW0nLFxuICAgICAgJ2FkZHJlc3MnLFxuICAgICAgJ2FyZWEnLFxuICAgICAgJ2FydGljbGUnLFxuICAgICAgJ2FzaWRlJyxcbiAgICAgICdhdWRpbycsXG4gICAgICAnYicsXG4gICAgICAnYmRpJyxcbiAgICAgICdiZG8nLFxuICAgICAgJ2JpZycsXG4gICAgICAnYmxpbmsnLFxuICAgICAgJ2Jsb2NrcXVvdGUnLFxuICAgICAgJ2JvZHknLFxuICAgICAgJ2JyJyxcbiAgICAgICdidXR0b24nLFxuICAgICAgJ2NhbnZhcycsXG4gICAgICAnY2FwdGlvbicsXG4gICAgICAnY2VudGVyJyxcbiAgICAgICdjaXRlJyxcbiAgICAgICdjb2RlJyxcbiAgICAgICdjb2wnLFxuICAgICAgJ2NvbGdyb3VwJyxcbiAgICAgICdjb250ZW50JyxcbiAgICAgICdkYXRhJyxcbiAgICAgICdkYXRhbGlzdCcsXG4gICAgICAnZGQnLFxuICAgICAgJ2RlY29yYXRvcicsXG4gICAgICAnZGVsJyxcbiAgICAgICdkZXRhaWxzJyxcbiAgICAgICdkZm4nLFxuICAgICAgJ2RpYWxvZycsXG4gICAgICAnZGlyJyxcbiAgICAgICdkaXYnLFxuICAgICAgJ2RsJyxcbiAgICAgICdkdCcsXG4gICAgICAnZWxlbWVudCcsXG4gICAgICAnZW0nLFxuICAgICAgJ2ZpZWxkc2V0JyxcbiAgICAgICdmaWdjYXB0aW9uJyxcbiAgICAgICdmaWd1cmUnLFxuICAgICAgJ2ZvbnQnLFxuICAgICAgJ2Zvb3RlcicsXG4gICAgICAnZm9ybScsXG4gICAgICAnaDEnLFxuICAgICAgJ2gyJyxcbiAgICAgICdoMycsXG4gICAgICAnaDQnLFxuICAgICAgJ2g1JyxcbiAgICAgICdoNicsXG4gICAgICAnaGVhZCcsXG4gICAgICAnaGVhZGVyJyxcbiAgICAgICdoZ3JvdXAnLFxuICAgICAgJ2hyJyxcbiAgICAgICdodG1sJyxcbiAgICAgICdpJyxcbiAgICAgICdpbWcnLFxuICAgICAgJ2lucHV0JyxcbiAgICAgICdpbnMnLFxuICAgICAgJ2tiZCcsXG4gICAgICAnbGFiZWwnLFxuICAgICAgJ2xlZ2VuZCcsXG4gICAgICAnbGknLFxuICAgICAgJ21haW4nLFxuICAgICAgJ21hcCcsXG4gICAgICAnbWFyaycsXG4gICAgICAnbWFycXVlZScsXG4gICAgICAnbWVudScsXG4gICAgICAnbWVudWl0ZW0nLFxuICAgICAgJ21ldGVyJyxcbiAgICAgICduYXYnLFxuICAgICAgJ25vYnInLFxuICAgICAgJ29sJyxcbiAgICAgICdvcHRncm91cCcsXG4gICAgICAnb3B0aW9uJyxcbiAgICAgICdvdXRwdXQnLFxuICAgICAgJ3AnLFxuICAgICAgJ3BpY3R1cmUnLFxuICAgICAgJ3ByZScsXG4gICAgICAncHJvZ3Jlc3MnLFxuICAgICAgJ3EnLFxuICAgICAgJ3JwJyxcbiAgICAgICdydCcsXG4gICAgICAncnVieScsXG4gICAgICAncycsXG4gICAgICAnc2FtcCcsXG4gICAgICAnc2VjdGlvbicsXG4gICAgICAnc2VsZWN0JyxcbiAgICAgICdzaGFkb3cnLFxuICAgICAgJ3NtYWxsJyxcbiAgICAgICdzb3VyY2UnLFxuICAgICAgJ3NwYWNlcicsXG4gICAgICAnc3BhbicsXG4gICAgICAnc3RyaWtlJyxcbiAgICAgICdzdHJvbmcnLFxuICAgICAgJ3N0eWxlJyxcbiAgICAgICdzdWInLFxuICAgICAgJ3N1bW1hcnknLFxuICAgICAgJ3N1cCcsXG4gICAgICAndGFibGUnLFxuICAgICAgJ3Rib2R5JyxcbiAgICAgICd0ZCcsXG4gICAgICAndGVtcGxhdGUnLFxuICAgICAgJ3RleHRhcmVhJyxcbiAgICAgICd0Zm9vdCcsXG4gICAgICAndGgnLFxuICAgICAgJ3RoZWFkJyxcbiAgICAgICd0aW1lJyxcbiAgICAgICd0cicsXG4gICAgICAndHJhY2snLFxuICAgICAgJ3R0JyxcbiAgICAgICd1JyxcbiAgICAgICd1bCcsXG4gICAgICAndmFyJyxcbiAgICAgICd2aWRlbycsXG4gICAgICAnd2JyJ1xuICAgIF0pO1xuICAgIHZhciBzdmckMSA9IGZyZWV6ZShbXG4gICAgICAnc3ZnJyxcbiAgICAgICdhJyxcbiAgICAgICdhbHRnbHlwaCcsXG4gICAgICAnYWx0Z2x5cGhkZWYnLFxuICAgICAgJ2FsdGdseXBoaXRlbScsXG4gICAgICAnYW5pbWF0ZWNvbG9yJyxcbiAgICAgICdhbmltYXRlbW90aW9uJyxcbiAgICAgICdhbmltYXRldHJhbnNmb3JtJyxcbiAgICAgICdjaXJjbGUnLFxuICAgICAgJ2NsaXBwYXRoJyxcbiAgICAgICdkZWZzJyxcbiAgICAgICdkZXNjJyxcbiAgICAgICdlbGxpcHNlJyxcbiAgICAgICdmaWx0ZXInLFxuICAgICAgJ2ZvbnQnLFxuICAgICAgJ2cnLFxuICAgICAgJ2dseXBoJyxcbiAgICAgICdnbHlwaHJlZicsXG4gICAgICAnaGtlcm4nLFxuICAgICAgJ2ltYWdlJyxcbiAgICAgICdsaW5lJyxcbiAgICAgICdsaW5lYXJncmFkaWVudCcsXG4gICAgICAnbWFya2VyJyxcbiAgICAgICdtYXNrJyxcbiAgICAgICdtZXRhZGF0YScsXG4gICAgICAnbXBhdGgnLFxuICAgICAgJ3BhdGgnLFxuICAgICAgJ3BhdHRlcm4nLFxuICAgICAgJ3BvbHlnb24nLFxuICAgICAgJ3BvbHlsaW5lJyxcbiAgICAgICdyYWRpYWxncmFkaWVudCcsXG4gICAgICAncmVjdCcsXG4gICAgICAnc3RvcCcsXG4gICAgICAnc3R5bGUnLFxuICAgICAgJ3N3aXRjaCcsXG4gICAgICAnc3ltYm9sJyxcbiAgICAgICd0ZXh0JyxcbiAgICAgICd0ZXh0cGF0aCcsXG4gICAgICAndGl0bGUnLFxuICAgICAgJ3RyZWYnLFxuICAgICAgJ3RzcGFuJyxcbiAgICAgICd2aWV3JyxcbiAgICAgICd2a2VybidcbiAgICBdKTtcbiAgICB2YXIgc3ZnRmlsdGVycyA9IGZyZWV6ZShbXG4gICAgICAnZmVCbGVuZCcsXG4gICAgICAnZmVDb2xvck1hdHJpeCcsXG4gICAgICAnZmVDb21wb25lbnRUcmFuc2ZlcicsXG4gICAgICAnZmVDb21wb3NpdGUnLFxuICAgICAgJ2ZlQ29udm9sdmVNYXRyaXgnLFxuICAgICAgJ2ZlRGlmZnVzZUxpZ2h0aW5nJyxcbiAgICAgICdmZURpc3BsYWNlbWVudE1hcCcsXG4gICAgICAnZmVEaXN0YW50TGlnaHQnLFxuICAgICAgJ2ZlRmxvb2QnLFxuICAgICAgJ2ZlRnVuY0EnLFxuICAgICAgJ2ZlRnVuY0InLFxuICAgICAgJ2ZlRnVuY0cnLFxuICAgICAgJ2ZlRnVuY1InLFxuICAgICAgJ2ZlR2F1c3NpYW5CbHVyJyxcbiAgICAgICdmZUltYWdlJyxcbiAgICAgICdmZU1lcmdlJyxcbiAgICAgICdmZU1lcmdlTm9kZScsXG4gICAgICAnZmVNb3JwaG9sb2d5JyxcbiAgICAgICdmZU9mZnNldCcsXG4gICAgICAnZmVQb2ludExpZ2h0JyxcbiAgICAgICdmZVNwZWN1bGFyTGlnaHRpbmcnLFxuICAgICAgJ2ZlU3BvdExpZ2h0JyxcbiAgICAgICdmZVRpbGUnLFxuICAgICAgJ2ZlVHVyYnVsZW5jZSdcbiAgICBdKTtcbiAgICB2YXIgc3ZnRGlzYWxsb3dlZCA9IGZyZWV6ZShbXG4gICAgICAnYW5pbWF0ZScsXG4gICAgICAnY29sb3ItcHJvZmlsZScsXG4gICAgICAnY3Vyc29yJyxcbiAgICAgICdkaXNjYXJkJyxcbiAgICAgICdmZWRyb3BzaGFkb3cnLFxuICAgICAgJ2ZvbnQtZmFjZScsXG4gICAgICAnZm9udC1mYWNlLWZvcm1hdCcsXG4gICAgICAnZm9udC1mYWNlLW5hbWUnLFxuICAgICAgJ2ZvbnQtZmFjZS1zcmMnLFxuICAgICAgJ2ZvbnQtZmFjZS11cmknLFxuICAgICAgJ2ZvcmVpZ25vYmplY3QnLFxuICAgICAgJ2hhdGNoJyxcbiAgICAgICdoYXRjaHBhdGgnLFxuICAgICAgJ21lc2gnLFxuICAgICAgJ21lc2hncmFkaWVudCcsXG4gICAgICAnbWVzaHBhdGNoJyxcbiAgICAgICdtZXNocm93JyxcbiAgICAgICdtaXNzaW5nLWdseXBoJyxcbiAgICAgICdzY3JpcHQnLFxuICAgICAgJ3NldCcsXG4gICAgICAnc29saWRjb2xvcicsXG4gICAgICAndW5rbm93bicsXG4gICAgICAndXNlJ1xuICAgIF0pO1xuICAgIHZhciBtYXRoTWwkMSA9IGZyZWV6ZShbXG4gICAgICAnbWF0aCcsXG4gICAgICAnbWVuY2xvc2UnLFxuICAgICAgJ21lcnJvcicsXG4gICAgICAnbWZlbmNlZCcsXG4gICAgICAnbWZyYWMnLFxuICAgICAgJ21nbHlwaCcsXG4gICAgICAnbWknLFxuICAgICAgJ21sYWJlbGVkdHInLFxuICAgICAgJ21tdWx0aXNjcmlwdHMnLFxuICAgICAgJ21uJyxcbiAgICAgICdtbycsXG4gICAgICAnbW92ZXInLFxuICAgICAgJ21wYWRkZWQnLFxuICAgICAgJ21waGFudG9tJyxcbiAgICAgICdtcm9vdCcsXG4gICAgICAnbXJvdycsXG4gICAgICAnbXMnLFxuICAgICAgJ21zcGFjZScsXG4gICAgICAnbXNxcnQnLFxuICAgICAgJ21zdHlsZScsXG4gICAgICAnbXN1YicsXG4gICAgICAnbXN1cCcsXG4gICAgICAnbXN1YnN1cCcsXG4gICAgICAnbXRhYmxlJyxcbiAgICAgICdtdGQnLFxuICAgICAgJ210ZXh0JyxcbiAgICAgICdtdHInLFxuICAgICAgJ211bmRlcicsXG4gICAgICAnbXVuZGVyb3ZlcidcbiAgICBdKTtcbiAgICB2YXIgbWF0aE1sRGlzYWxsb3dlZCA9IGZyZWV6ZShbXG4gICAgICAnbWFjdGlvbicsXG4gICAgICAnbWFsaWduZ3JvdXAnLFxuICAgICAgJ21hbGlnbm1hcmsnLFxuICAgICAgJ21sb25nZGl2JyxcbiAgICAgICdtc2NhcnJpZXMnLFxuICAgICAgJ21zY2FycnknLFxuICAgICAgJ21zZ3JvdXAnLFxuICAgICAgJ21zdGFjaycsXG4gICAgICAnbXNsaW5lJyxcbiAgICAgICdtc3JvdycsXG4gICAgICAnc2VtYW50aWNzJyxcbiAgICAgICdhbm5vdGF0aW9uJyxcbiAgICAgICdhbm5vdGF0aW9uLXhtbCcsXG4gICAgICAnbXByZXNjcmlwdHMnLFxuICAgICAgJ25vbmUnXG4gICAgXSk7XG4gICAgdmFyIHRleHQgPSBmcmVlemUoWycjdGV4dCddKTtcbiAgICB2YXIgaHRtbCA9IGZyZWV6ZShbXG4gICAgICAnYWNjZXB0JyxcbiAgICAgICdhY3Rpb24nLFxuICAgICAgJ2FsaWduJyxcbiAgICAgICdhbHQnLFxuICAgICAgJ2F1dG9jYXBpdGFsaXplJyxcbiAgICAgICdhdXRvY29tcGxldGUnLFxuICAgICAgJ2F1dG9waWN0dXJlaW5waWN0dXJlJyxcbiAgICAgICdhdXRvcGxheScsXG4gICAgICAnYmFja2dyb3VuZCcsXG4gICAgICAnYmdjb2xvcicsXG4gICAgICAnYm9yZGVyJyxcbiAgICAgICdjYXB0dXJlJyxcbiAgICAgICdjZWxscGFkZGluZycsXG4gICAgICAnY2VsbHNwYWNpbmcnLFxuICAgICAgJ2NoZWNrZWQnLFxuICAgICAgJ2NpdGUnLFxuICAgICAgJ2NsYXNzJyxcbiAgICAgICdjbGVhcicsXG4gICAgICAnY29sb3InLFxuICAgICAgJ2NvbHMnLFxuICAgICAgJ2NvbHNwYW4nLFxuICAgICAgJ2NvbnRyb2xzJyxcbiAgICAgICdjb250cm9sc2xpc3QnLFxuICAgICAgJ2Nvb3JkcycsXG4gICAgICAnY3Jvc3NvcmlnaW4nLFxuICAgICAgJ2RhdGV0aW1lJyxcbiAgICAgICdkZWNvZGluZycsXG4gICAgICAnZGVmYXVsdCcsXG4gICAgICAnZGlyJyxcbiAgICAgICdkaXNhYmxlZCcsXG4gICAgICAnZGlzYWJsZXBpY3R1cmVpbnBpY3R1cmUnLFxuICAgICAgJ2Rpc2FibGVyZW1vdGVwbGF5YmFjaycsXG4gICAgICAnZG93bmxvYWQnLFxuICAgICAgJ2RyYWdnYWJsZScsXG4gICAgICAnZW5jdHlwZScsXG4gICAgICAnZW50ZXJrZXloaW50JyxcbiAgICAgICdmYWNlJyxcbiAgICAgICdmb3InLFxuICAgICAgJ2hlYWRlcnMnLFxuICAgICAgJ2hlaWdodCcsXG4gICAgICAnaGlkZGVuJyxcbiAgICAgICdoaWdoJyxcbiAgICAgICdocmVmJyxcbiAgICAgICdocmVmbGFuZycsXG4gICAgICAnaWQnLFxuICAgICAgJ2lucHV0bW9kZScsXG4gICAgICAnaW50ZWdyaXR5JyxcbiAgICAgICdpc21hcCcsXG4gICAgICAna2luZCcsXG4gICAgICAnbGFiZWwnLFxuICAgICAgJ2xhbmcnLFxuICAgICAgJ2xpc3QnLFxuICAgICAgJ2xvYWRpbmcnLFxuICAgICAgJ2xvb3AnLFxuICAgICAgJ2xvdycsXG4gICAgICAnbWF4JyxcbiAgICAgICdtYXhsZW5ndGgnLFxuICAgICAgJ21lZGlhJyxcbiAgICAgICdtZXRob2QnLFxuICAgICAgJ21pbicsXG4gICAgICAnbWlubGVuZ3RoJyxcbiAgICAgICdtdWx0aXBsZScsXG4gICAgICAnbXV0ZWQnLFxuICAgICAgJ25hbWUnLFxuICAgICAgJ25vbmNlJyxcbiAgICAgICdub3NoYWRlJyxcbiAgICAgICdub3ZhbGlkYXRlJyxcbiAgICAgICdub3dyYXAnLFxuICAgICAgJ29wZW4nLFxuICAgICAgJ29wdGltdW0nLFxuICAgICAgJ3BhdHRlcm4nLFxuICAgICAgJ3BsYWNlaG9sZGVyJyxcbiAgICAgICdwbGF5c2lubGluZScsXG4gICAgICAncG9zdGVyJyxcbiAgICAgICdwcmVsb2FkJyxcbiAgICAgICdwdWJkYXRlJyxcbiAgICAgICdyYWRpb2dyb3VwJyxcbiAgICAgICdyZWFkb25seScsXG4gICAgICAncmVsJyxcbiAgICAgICdyZXF1aXJlZCcsXG4gICAgICAncmV2JyxcbiAgICAgICdyZXZlcnNlZCcsXG4gICAgICAncm9sZScsXG4gICAgICAncm93cycsXG4gICAgICAncm93c3BhbicsXG4gICAgICAnc3BlbGxjaGVjaycsXG4gICAgICAnc2NvcGUnLFxuICAgICAgJ3NlbGVjdGVkJyxcbiAgICAgICdzaGFwZScsXG4gICAgICAnc2l6ZScsXG4gICAgICAnc2l6ZXMnLFxuICAgICAgJ3NwYW4nLFxuICAgICAgJ3NyY2xhbmcnLFxuICAgICAgJ3N0YXJ0JyxcbiAgICAgICdzcmMnLFxuICAgICAgJ3NyY3NldCcsXG4gICAgICAnc3RlcCcsXG4gICAgICAnc3R5bGUnLFxuICAgICAgJ3N1bW1hcnknLFxuICAgICAgJ3RhYmluZGV4JyxcbiAgICAgICd0aXRsZScsXG4gICAgICAndHJhbnNsYXRlJyxcbiAgICAgICd0eXBlJyxcbiAgICAgICd1c2VtYXAnLFxuICAgICAgJ3ZhbGlnbicsXG4gICAgICAndmFsdWUnLFxuICAgICAgJ3dpZHRoJyxcbiAgICAgICd4bWxucycsXG4gICAgICAnc2xvdCdcbiAgICBdKTtcbiAgICB2YXIgc3ZnID0gZnJlZXplKFtcbiAgICAgICdhY2NlbnQtaGVpZ2h0JyxcbiAgICAgICdhY2N1bXVsYXRlJyxcbiAgICAgICdhZGRpdGl2ZScsXG4gICAgICAnYWxpZ25tZW50LWJhc2VsaW5lJyxcbiAgICAgICdhc2NlbnQnLFxuICAgICAgJ2F0dHJpYnV0ZW5hbWUnLFxuICAgICAgJ2F0dHJpYnV0ZXR5cGUnLFxuICAgICAgJ2F6aW11dGgnLFxuICAgICAgJ2Jhc2VmcmVxdWVuY3knLFxuICAgICAgJ2Jhc2VsaW5lLXNoaWZ0JyxcbiAgICAgICdiZWdpbicsXG4gICAgICAnYmlhcycsXG4gICAgICAnYnknLFxuICAgICAgJ2NsYXNzJyxcbiAgICAgICdjbGlwJyxcbiAgICAgICdjbGlwcGF0aHVuaXRzJyxcbiAgICAgICdjbGlwLXBhdGgnLFxuICAgICAgJ2NsaXAtcnVsZScsXG4gICAgICAnY29sb3InLFxuICAgICAgJ2NvbG9yLWludGVycG9sYXRpb24nLFxuICAgICAgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycsXG4gICAgICAnY29sb3ItcHJvZmlsZScsXG4gICAgICAnY29sb3ItcmVuZGVyaW5nJyxcbiAgICAgICdjeCcsXG4gICAgICAnY3knLFxuICAgICAgJ2QnLFxuICAgICAgJ2R4JyxcbiAgICAgICdkeScsXG4gICAgICAnZGlmZnVzZWNvbnN0YW50JyxcbiAgICAgICdkaXJlY3Rpb24nLFxuICAgICAgJ2Rpc3BsYXknLFxuICAgICAgJ2Rpdmlzb3InLFxuICAgICAgJ2R1cicsXG4gICAgICAnZWRnZW1vZGUnLFxuICAgICAgJ2VsZXZhdGlvbicsXG4gICAgICAnZW5kJyxcbiAgICAgICdmaWxsJyxcbiAgICAgICdmaWxsLW9wYWNpdHknLFxuICAgICAgJ2ZpbGwtcnVsZScsXG4gICAgICAnZmlsdGVyJyxcbiAgICAgICdmaWx0ZXJ1bml0cycsXG4gICAgICAnZmxvb2QtY29sb3InLFxuICAgICAgJ2Zsb29kLW9wYWNpdHknLFxuICAgICAgJ2ZvbnQtZmFtaWx5JyxcbiAgICAgICdmb250LXNpemUnLFxuICAgICAgJ2ZvbnQtc2l6ZS1hZGp1c3QnLFxuICAgICAgJ2ZvbnQtc3RyZXRjaCcsXG4gICAgICAnZm9udC1zdHlsZScsXG4gICAgICAnZm9udC12YXJpYW50JyxcbiAgICAgICdmb250LXdlaWdodCcsXG4gICAgICAnZngnLFxuICAgICAgJ2Z5JyxcbiAgICAgICdnMScsXG4gICAgICAnZzInLFxuICAgICAgJ2dseXBoLW5hbWUnLFxuICAgICAgJ2dseXBocmVmJyxcbiAgICAgICdncmFkaWVudHVuaXRzJyxcbiAgICAgICdncmFkaWVudHRyYW5zZm9ybScsXG4gICAgICAnaGVpZ2h0JyxcbiAgICAgICdocmVmJyxcbiAgICAgICdpZCcsXG4gICAgICAnaW1hZ2UtcmVuZGVyaW5nJyxcbiAgICAgICdpbicsXG4gICAgICAnaW4yJyxcbiAgICAgICdrJyxcbiAgICAgICdrMScsXG4gICAgICAnazInLFxuICAgICAgJ2szJyxcbiAgICAgICdrNCcsXG4gICAgICAna2VybmluZycsXG4gICAgICAna2V5cG9pbnRzJyxcbiAgICAgICdrZXlzcGxpbmVzJyxcbiAgICAgICdrZXl0aW1lcycsXG4gICAgICAnbGFuZycsXG4gICAgICAnbGVuZ3RoYWRqdXN0JyxcbiAgICAgICdsZXR0ZXItc3BhY2luZycsXG4gICAgICAna2VybmVsbWF0cml4JyxcbiAgICAgICdrZXJuZWx1bml0bGVuZ3RoJyxcbiAgICAgICdsaWdodGluZy1jb2xvcicsXG4gICAgICAnbG9jYWwnLFxuICAgICAgJ21hcmtlci1lbmQnLFxuICAgICAgJ21hcmtlci1taWQnLFxuICAgICAgJ21hcmtlci1zdGFydCcsXG4gICAgICAnbWFya2VyaGVpZ2h0JyxcbiAgICAgICdtYXJrZXJ1bml0cycsXG4gICAgICAnbWFya2Vyd2lkdGgnLFxuICAgICAgJ21hc2tjb250ZW50dW5pdHMnLFxuICAgICAgJ21hc2t1bml0cycsXG4gICAgICAnbWF4JyxcbiAgICAgICdtYXNrJyxcbiAgICAgICdtZWRpYScsXG4gICAgICAnbWV0aG9kJyxcbiAgICAgICdtb2RlJyxcbiAgICAgICdtaW4nLFxuICAgICAgJ25hbWUnLFxuICAgICAgJ251bW9jdGF2ZXMnLFxuICAgICAgJ29mZnNldCcsXG4gICAgICAnb3BlcmF0b3InLFxuICAgICAgJ29wYWNpdHknLFxuICAgICAgJ29yZGVyJyxcbiAgICAgICdvcmllbnQnLFxuICAgICAgJ29yaWVudGF0aW9uJyxcbiAgICAgICdvcmlnaW4nLFxuICAgICAgJ292ZXJmbG93JyxcbiAgICAgICdwYWludC1vcmRlcicsXG4gICAgICAncGF0aCcsXG4gICAgICAncGF0aGxlbmd0aCcsXG4gICAgICAncGF0dGVybmNvbnRlbnR1bml0cycsXG4gICAgICAncGF0dGVybnRyYW5zZm9ybScsXG4gICAgICAncGF0dGVybnVuaXRzJyxcbiAgICAgICdwb2ludHMnLFxuICAgICAgJ3ByZXNlcnZlYWxwaGEnLFxuICAgICAgJ3ByZXNlcnZlYXNwZWN0cmF0aW8nLFxuICAgICAgJ3ByaW1pdGl2ZXVuaXRzJyxcbiAgICAgICdyJyxcbiAgICAgICdyeCcsXG4gICAgICAncnknLFxuICAgICAgJ3JhZGl1cycsXG4gICAgICAncmVmeCcsXG4gICAgICAncmVmeScsXG4gICAgICAncmVwZWF0Y291bnQnLFxuICAgICAgJ3JlcGVhdGR1cicsXG4gICAgICAncmVzdGFydCcsXG4gICAgICAncmVzdWx0JyxcbiAgICAgICdyb3RhdGUnLFxuICAgICAgJ3NjYWxlJyxcbiAgICAgICdzZWVkJyxcbiAgICAgICdzaGFwZS1yZW5kZXJpbmcnLFxuICAgICAgJ3NwZWN1bGFyY29uc3RhbnQnLFxuICAgICAgJ3NwZWN1bGFyZXhwb25lbnQnLFxuICAgICAgJ3NwcmVhZG1ldGhvZCcsXG4gICAgICAnc3RhcnRvZmZzZXQnLFxuICAgICAgJ3N0ZGRldmlhdGlvbicsXG4gICAgICAnc3RpdGNodGlsZXMnLFxuICAgICAgJ3N0b3AtY29sb3InLFxuICAgICAgJ3N0b3Atb3BhY2l0eScsXG4gICAgICAnc3Ryb2tlLWRhc2hhcnJheScsXG4gICAgICAnc3Ryb2tlLWRhc2hvZmZzZXQnLFxuICAgICAgJ3N0cm9rZS1saW5lY2FwJyxcbiAgICAgICdzdHJva2UtbGluZWpvaW4nLFxuICAgICAgJ3N0cm9rZS1taXRlcmxpbWl0JyxcbiAgICAgICdzdHJva2Utb3BhY2l0eScsXG4gICAgICAnc3Ryb2tlJyxcbiAgICAgICdzdHJva2Utd2lkdGgnLFxuICAgICAgJ3N0eWxlJyxcbiAgICAgICdzdXJmYWNlc2NhbGUnLFxuICAgICAgJ3N5c3RlbWxhbmd1YWdlJyxcbiAgICAgICd0YWJpbmRleCcsXG4gICAgICAndGFyZ2V0eCcsXG4gICAgICAndGFyZ2V0eScsXG4gICAgICAndHJhbnNmb3JtJyxcbiAgICAgICd0cmFuc2Zvcm0tb3JpZ2luJyxcbiAgICAgICd0ZXh0LWFuY2hvcicsXG4gICAgICAndGV4dC1kZWNvcmF0aW9uJyxcbiAgICAgICd0ZXh0LXJlbmRlcmluZycsXG4gICAgICAndGV4dGxlbmd0aCcsXG4gICAgICAndHlwZScsXG4gICAgICAndTEnLFxuICAgICAgJ3UyJyxcbiAgICAgICd1bmljb2RlJyxcbiAgICAgICd2YWx1ZXMnLFxuICAgICAgJ3ZpZXdib3gnLFxuICAgICAgJ3Zpc2liaWxpdHknLFxuICAgICAgJ3ZlcnNpb24nLFxuICAgICAgJ3ZlcnQtYWR2LXknLFxuICAgICAgJ3ZlcnQtb3JpZ2luLXgnLFxuICAgICAgJ3ZlcnQtb3JpZ2luLXknLFxuICAgICAgJ3dpZHRoJyxcbiAgICAgICd3b3JkLXNwYWNpbmcnLFxuICAgICAgJ3dyYXAnLFxuICAgICAgJ3dyaXRpbmctbW9kZScsXG4gICAgICAneGNoYW5uZWxzZWxlY3RvcicsXG4gICAgICAneWNoYW5uZWxzZWxlY3RvcicsXG4gICAgICAneCcsXG4gICAgICAneDEnLFxuICAgICAgJ3gyJyxcbiAgICAgICd4bWxucycsXG4gICAgICAneScsXG4gICAgICAneTEnLFxuICAgICAgJ3kyJyxcbiAgICAgICd6JyxcbiAgICAgICd6b29tYW5kcGFuJ1xuICAgIF0pO1xuICAgIHZhciBtYXRoTWwgPSBmcmVlemUoW1xuICAgICAgJ2FjY2VudCcsXG4gICAgICAnYWNjZW50dW5kZXInLFxuICAgICAgJ2FsaWduJyxcbiAgICAgICdiZXZlbGxlZCcsXG4gICAgICAnY2xvc2UnLFxuICAgICAgJ2NvbHVtbnNhbGlnbicsXG4gICAgICAnY29sdW1ubGluZXMnLFxuICAgICAgJ2NvbHVtbnNwYW4nLFxuICAgICAgJ2Rlbm9tYWxpZ24nLFxuICAgICAgJ2RlcHRoJyxcbiAgICAgICdkaXInLFxuICAgICAgJ2Rpc3BsYXknLFxuICAgICAgJ2Rpc3BsYXlzdHlsZScsXG4gICAgICAnZW5jb2RpbmcnLFxuICAgICAgJ2ZlbmNlJyxcbiAgICAgICdmcmFtZScsXG4gICAgICAnaGVpZ2h0JyxcbiAgICAgICdocmVmJyxcbiAgICAgICdpZCcsXG4gICAgICAnbGFyZ2VvcCcsXG4gICAgICAnbGVuZ3RoJyxcbiAgICAgICdsaW5ldGhpY2tuZXNzJyxcbiAgICAgICdsc3BhY2UnLFxuICAgICAgJ2xxdW90ZScsXG4gICAgICAnbWF0aGJhY2tncm91bmQnLFxuICAgICAgJ21hdGhjb2xvcicsXG4gICAgICAnbWF0aHNpemUnLFxuICAgICAgJ21hdGh2YXJpYW50JyxcbiAgICAgICdtYXhzaXplJyxcbiAgICAgICdtaW5zaXplJyxcbiAgICAgICdtb3ZhYmxlbGltaXRzJyxcbiAgICAgICdub3RhdGlvbicsXG4gICAgICAnbnVtYWxpZ24nLFxuICAgICAgJ29wZW4nLFxuICAgICAgJ3Jvd2FsaWduJyxcbiAgICAgICdyb3dsaW5lcycsXG4gICAgICAncm93c3BhY2luZycsXG4gICAgICAncm93c3BhbicsXG4gICAgICAncnNwYWNlJyxcbiAgICAgICdycXVvdGUnLFxuICAgICAgJ3NjcmlwdGxldmVsJyxcbiAgICAgICdzY3JpcHRtaW5zaXplJyxcbiAgICAgICdzY3JpcHRzaXplbXVsdGlwbGllcicsXG4gICAgICAnc2VsZWN0aW9uJyxcbiAgICAgICdzZXBhcmF0b3InLFxuICAgICAgJ3NlcGFyYXRvcnMnLFxuICAgICAgJ3N0cmV0Y2h5JyxcbiAgICAgICdzdWJzY3JpcHRzaGlmdCcsXG4gICAgICAnc3Vwc2NyaXB0c2hpZnQnLFxuICAgICAgJ3N5bW1ldHJpYycsXG4gICAgICAndm9mZnNldCcsXG4gICAgICAnd2lkdGgnLFxuICAgICAgJ3htbG5zJ1xuICAgIF0pO1xuICAgIHZhciB4bWwgPSBmcmVlemUoW1xuICAgICAgJ3hsaW5rOmhyZWYnLFxuICAgICAgJ3htbDppZCcsXG4gICAgICAneGxpbms6dGl0bGUnLFxuICAgICAgJ3htbDpzcGFjZScsXG4gICAgICAneG1sbnM6eGxpbmsnXG4gICAgXSk7XG4gICAgdmFyIE1VU1RBQ0hFX0VYUFIgPSBzZWFsKC9cXHtcXHtbXFx3XFxXXSp8W1xcd1xcV10qXFx9XFx9L2dtKTtcbiAgICB2YXIgRVJCX0VYUFIgPSBzZWFsKC88JVtcXHdcXFddKnxbXFx3XFxXXSolPi9nbSk7XG4gICAgdmFyIERBVEFfQVRUUiA9IHNlYWwoL15kYXRhLVtcXC1cXHcuXFx1MDBCNy1cXHVGRkZGXS8pO1xuICAgIHZhciBBUklBX0FUVFIgPSBzZWFsKC9eYXJpYS1bXFwtXFx3XSskLyk7XG4gICAgdmFyIElTX0FMTE9XRURfVVJJID0gc2VhbCgvXig/Oig/Oig/OmZ8aHQpdHBzP3xtYWlsdG98dGVsfGNhbGx0b3xjaWR8eG1wcCk6fFteYS16XXxbYS16Ky5cXC1dKyg/OlteYS16Ky5cXC06XXwkKSkvaSk7XG4gICAgdmFyIElTX1NDUklQVF9PUl9EQVRBID0gc2VhbCgvXig/OlxcdytzY3JpcHR8ZGF0YSk6L2kpO1xuICAgIHZhciBBVFRSX1dISVRFU1BBQ0UgPSBzZWFsKC9bXFx1MDAwMC1cXHUwMDIwXFx1MDBBMFxcdTE2ODBcXHUxODBFXFx1MjAwMC1cXHUyMDI5XFx1MjA1RlxcdTMwMDBdL2cpO1xuICAgIHZhciBET0NUWVBFX05BTUUgPSBzZWFsKC9eaHRtbCQvaSk7XG4gICAgdmFyIGdldEdsb2JhbCA9IGZ1bmN0aW9uIGdldEdsb2JhbCgpIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiB3aW5kb3c7XG4gICAgfTtcbiAgICB2YXIgX2NyZWF0ZVRydXN0ZWRUeXBlc1BvbGljeSA9IGZ1bmN0aW9uIF9jcmVhdGVUcnVzdGVkVHlwZXNQb2xpY3kodHJ1c3RlZFR5cGVzLCBkb2N1bWVudCkge1xuICAgICAgaWYgKF90eXBlb2YodHJ1c3RlZFR5cGVzKSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3kgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB2YXIgc3VmZml4ID0gbnVsbDtcbiAgICAgIHZhciBBVFRSX05BTUUgPSAnZGF0YS10dC1wb2xpY3ktc3VmZml4JztcbiAgICAgIGlmIChkb2N1bWVudC5jdXJyZW50U2NyaXB0ICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuaGFzQXR0cmlidXRlKEFUVFJfTkFNRSkpIHtcbiAgICAgICAgc3VmZml4ID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5nZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKTtcbiAgICAgIH1cbiAgICAgIHZhciBwb2xpY3lOYW1lID0gJ2RvbXB1cmlmeScgKyAoc3VmZml4ID8gJyMnICsgc3VmZml4IDogJycpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3kocG9saWN5TmFtZSwge1xuICAgICAgICAgIGNyZWF0ZUhUTUw6IGZ1bmN0aW9uIGNyZWF0ZUhUTUwoaHRtbCkge1xuICAgICAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdUcnVzdGVkVHlwZXMgcG9saWN5ICcgKyBwb2xpY3lOYW1lICsgJyBjb3VsZCBub3QgYmUgY3JlYXRlZC4nKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiBjcmVhdGVET01QdXJpZnkoKSB7XG4gICAgICB2YXIgd2luZG93ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBnZXRHbG9iYWwoKTtcbiAgICAgIHZhciBET01QdXJpZnkgPSBmdW5jdGlvbiBET01QdXJpZnkocm9vdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRE9NUHVyaWZ5KHJvb3QpO1xuICAgICAgfTtcbiAgICAgIERPTVB1cmlmeS52ZXJzaW9uID0gJzIuMy44JztcbiAgICAgIERPTVB1cmlmeS5yZW1vdmVkID0gW107XG4gICAgICBpZiAoIXdpbmRvdyB8fCAhd2luZG93LmRvY3VtZW50IHx8IHdpbmRvdy5kb2N1bWVudC5ub2RlVHlwZSAhPT0gOSkge1xuICAgICAgICBET01QdXJpZnkuaXNTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIERPTVB1cmlmeTtcbiAgICAgIH1cbiAgICAgIHZhciBvcmlnaW5hbERvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICAgICAgdmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICAgICAgdmFyIERvY3VtZW50RnJhZ21lbnQgPSB3aW5kb3cuRG9jdW1lbnRGcmFnbWVudCwgSFRNTFRlbXBsYXRlRWxlbWVudCA9IHdpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50LCBOb2RlID0gd2luZG93Lk5vZGUsIEVsZW1lbnQgPSB3aW5kb3cuRWxlbWVudCwgTm9kZUZpbHRlciA9IHdpbmRvdy5Ob2RlRmlsdGVyLCBfd2luZG93JE5hbWVkTm9kZU1hcCA9IHdpbmRvdy5OYW1lZE5vZGVNYXAsIE5hbWVkTm9kZU1hcCA9IF93aW5kb3ckTmFtZWROb2RlTWFwID09PSB2b2lkIDAgPyB3aW5kb3cuTmFtZWROb2RlTWFwIHx8IHdpbmRvdy5Nb3pOYW1lZEF0dHJNYXAgOiBfd2luZG93JE5hbWVkTm9kZU1hcCwgSFRNTEZvcm1FbGVtZW50ID0gd2luZG93LkhUTUxGb3JtRWxlbWVudCwgRE9NUGFyc2VyID0gd2luZG93LkRPTVBhcnNlciwgdHJ1c3RlZFR5cGVzID0gd2luZG93LnRydXN0ZWRUeXBlcztcbiAgICAgIHZhciBFbGVtZW50UHJvdG90eXBlID0gRWxlbWVudC5wcm90b3R5cGU7XG4gICAgICB2YXIgY2xvbmVOb2RlID0gbG9va3VwR2V0dGVyKEVsZW1lbnRQcm90b3R5cGUsICdjbG9uZU5vZGUnKTtcbiAgICAgIHZhciBnZXROZXh0U2libGluZyA9IGxvb2t1cEdldHRlcihFbGVtZW50UHJvdG90eXBlLCAnbmV4dFNpYmxpbmcnKTtcbiAgICAgIHZhciBnZXRDaGlsZE5vZGVzID0gbG9va3VwR2V0dGVyKEVsZW1lbnRQcm90b3R5cGUsICdjaGlsZE5vZGVzJyk7XG4gICAgICB2YXIgZ2V0UGFyZW50Tm9kZSA9IGxvb2t1cEdldHRlcihFbGVtZW50UHJvdG90eXBlLCAncGFyZW50Tm9kZScpO1xuICAgICAgaWYgKHR5cGVvZiBIVE1MVGVtcGxhdGVFbGVtZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgICAgIGlmICh0ZW1wbGF0ZS5jb250ZW50ICYmIHRlbXBsYXRlLmNvbnRlbnQub3duZXJEb2N1bWVudCkge1xuICAgICAgICAgIGRvY3VtZW50ID0gdGVtcGxhdGUuY29udGVudC5vd25lckRvY3VtZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgdHJ1c3RlZFR5cGVzUG9saWN5ID0gX2NyZWF0ZVRydXN0ZWRUeXBlc1BvbGljeSh0cnVzdGVkVHlwZXMsIG9yaWdpbmFsRG9jdW1lbnQpO1xuICAgICAgdmFyIGVtcHR5SFRNTCA9IHRydXN0ZWRUeXBlc1BvbGljeSA/IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKCcnKSA6ICcnO1xuICAgICAgdmFyIF9kb2N1bWVudCA9IGRvY3VtZW50LCBpbXBsZW1lbnRhdGlvbiA9IF9kb2N1bWVudC5pbXBsZW1lbnRhdGlvbiwgY3JlYXRlTm9kZUl0ZXJhdG9yID0gX2RvY3VtZW50LmNyZWF0ZU5vZGVJdGVyYXRvciwgY3JlYXRlRG9jdW1lbnRGcmFnbWVudCA9IF9kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50LCBnZXRFbGVtZW50c0J5VGFnTmFtZSA9IF9kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZTtcbiAgICAgIHZhciBpbXBvcnROb2RlID0gb3JpZ2luYWxEb2N1bWVudC5pbXBvcnROb2RlO1xuICAgICAgdmFyIGRvY3VtZW50TW9kZSA9IHt9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZG9jdW1lbnRNb2RlID0gY2xvbmUoZG9jdW1lbnQpLmRvY3VtZW50TW9kZSA/IGRvY3VtZW50LmRvY3VtZW50TW9kZSA6IHt9O1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgfVxuICAgICAgdmFyIGhvb2tzID0ge307XG4gICAgICBET01QdXJpZnkuaXNTdXBwb3J0ZWQgPSB0eXBlb2YgZ2V0UGFyZW50Tm9kZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpbXBsZW1lbnRhdGlvbiAmJiB0eXBlb2YgaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudE1vZGUgIT09IDk7XG4gICAgICB2YXIgTVVTVEFDSEVfRVhQUiQxID0gTVVTVEFDSEVfRVhQUiwgRVJCX0VYUFIkMSA9IEVSQl9FWFBSLCBEQVRBX0FUVFIkMSA9IERBVEFfQVRUUiwgQVJJQV9BVFRSJDEgPSBBUklBX0FUVFIsIElTX1NDUklQVF9PUl9EQVRBJDEgPSBJU19TQ1JJUFRfT1JfREFUQSwgQVRUUl9XSElURVNQQUNFJDEgPSBBVFRSX1dISVRFU1BBQ0U7XG4gICAgICB2YXIgSVNfQUxMT1dFRF9VUkkkMSA9IElTX0FMTE9XRURfVVJJO1xuICAgICAgdmFyIEFMTE9XRURfVEFHUyA9IG51bGw7XG4gICAgICB2YXIgREVGQVVMVF9BTExPV0VEX1RBR1MgPSBhZGRUb1NldCh7fSwgW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShodG1sJDEpLCBfdG9Db25zdW1hYmxlQXJyYXkoc3ZnJDEpLCBfdG9Db25zdW1hYmxlQXJyYXkoc3ZnRmlsdGVycyksIF90b0NvbnN1bWFibGVBcnJheShtYXRoTWwkMSksIF90b0NvbnN1bWFibGVBcnJheSh0ZXh0KSkpO1xuICAgICAgdmFyIEFMTE9XRURfQVRUUiA9IG51bGw7XG4gICAgICB2YXIgREVGQVVMVF9BTExPV0VEX0FUVFIgPSBhZGRUb1NldCh7fSwgW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShodG1sKSwgX3RvQ29uc3VtYWJsZUFycmF5KHN2ZyksIF90b0NvbnN1bWFibGVBcnJheShtYXRoTWwpLCBfdG9Db25zdW1hYmxlQXJyYXkoeG1sKSkpO1xuICAgICAgdmFyIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HID0gT2JqZWN0LnNlYWwoT2JqZWN0LmNyZWF0ZShudWxsLCB7XG4gICAgICAgIHRhZ05hbWVDaGVjazoge1xuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICB9LFxuICAgICAgICBhdHRyaWJ1dGVOYW1lQ2hlY2s6IHtcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzOiB7XG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgICB2YXIgRk9SQklEX1RBR1MgPSBudWxsO1xuICAgICAgdmFyIEZPUkJJRF9BVFRSID0gbnVsbDtcbiAgICAgIHZhciBBTExPV19BUklBX0FUVFIgPSB0cnVlO1xuICAgICAgdmFyIEFMTE9XX0RBVEFfQVRUUiA9IHRydWU7XG4gICAgICB2YXIgQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFMgPSBmYWxzZTtcbiAgICAgIHZhciBTQUZFX0ZPUl9URU1QTEFURVMgPSBmYWxzZTtcbiAgICAgIHZhciBXSE9MRV9ET0NVTUVOVCA9IGZhbHNlO1xuICAgICAgdmFyIFNFVF9DT05GSUcgPSBmYWxzZTtcbiAgICAgIHZhciBGT1JDRV9CT0RZID0gZmFsc2U7XG4gICAgICB2YXIgUkVUVVJOX0RPTSA9IGZhbHNlO1xuICAgICAgdmFyIFJFVFVSTl9ET01fRlJBR01FTlQgPSBmYWxzZTtcbiAgICAgIHZhciBSRVRVUk5fVFJVU1RFRF9UWVBFID0gZmFsc2U7XG4gICAgICB2YXIgU0FOSVRJWkVfRE9NID0gdHJ1ZTtcbiAgICAgIHZhciBLRUVQX0NPTlRFTlQgPSB0cnVlO1xuICAgICAgdmFyIElOX1BMQUNFID0gZmFsc2U7XG4gICAgICB2YXIgVVNFX1BST0ZJTEVTID0ge307XG4gICAgICB2YXIgRk9SQklEX0NPTlRFTlRTID0gbnVsbDtcbiAgICAgIHZhciBERUZBVUxUX0ZPUkJJRF9DT05URU5UUyA9IGFkZFRvU2V0KHt9LCBbXG4gICAgICAgICdhbm5vdGF0aW9uLXhtbCcsXG4gICAgICAgICdhdWRpbycsXG4gICAgICAgICdjb2xncm91cCcsXG4gICAgICAgICdkZXNjJyxcbiAgICAgICAgJ2ZvcmVpZ25vYmplY3QnLFxuICAgICAgICAnaGVhZCcsXG4gICAgICAgICdpZnJhbWUnLFxuICAgICAgICAnbWF0aCcsXG4gICAgICAgICdtaScsXG4gICAgICAgICdtbicsXG4gICAgICAgICdtbycsXG4gICAgICAgICdtcycsXG4gICAgICAgICdtdGV4dCcsXG4gICAgICAgICdub2VtYmVkJyxcbiAgICAgICAgJ25vZnJhbWVzJyxcbiAgICAgICAgJ25vc2NyaXB0JyxcbiAgICAgICAgJ3BsYWludGV4dCcsXG4gICAgICAgICdzY3JpcHQnLFxuICAgICAgICAnc3R5bGUnLFxuICAgICAgICAnc3ZnJyxcbiAgICAgICAgJ3RlbXBsYXRlJyxcbiAgICAgICAgJ3RoZWFkJyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ3ZpZGVvJyxcbiAgICAgICAgJ3htcCdcbiAgICAgIF0pO1xuICAgICAgdmFyIERBVEFfVVJJX1RBR1MgPSBudWxsO1xuICAgICAgdmFyIERFRkFVTFRfREFUQV9VUklfVEFHUyA9IGFkZFRvU2V0KHt9LCBbXG4gICAgICAgICdhdWRpbycsXG4gICAgICAgICd2aWRlbycsXG4gICAgICAgICdpbWcnLFxuICAgICAgICAnc291cmNlJyxcbiAgICAgICAgJ2ltYWdlJyxcbiAgICAgICAgJ3RyYWNrJ1xuICAgICAgXSk7XG4gICAgICB2YXIgVVJJX1NBRkVfQVRUUklCVVRFUyA9IG51bGw7XG4gICAgICB2YXIgREVGQVVMVF9VUklfU0FGRV9BVFRSSUJVVEVTID0gYWRkVG9TZXQoe30sIFtcbiAgICAgICAgJ2FsdCcsXG4gICAgICAgICdjbGFzcycsXG4gICAgICAgICdmb3InLFxuICAgICAgICAnaWQnLFxuICAgICAgICAnbGFiZWwnLFxuICAgICAgICAnbmFtZScsXG4gICAgICAgICdwYXR0ZXJuJyxcbiAgICAgICAgJ3BsYWNlaG9sZGVyJyxcbiAgICAgICAgJ3JvbGUnLFxuICAgICAgICAnc3VtbWFyeScsXG4gICAgICAgICd0aXRsZScsXG4gICAgICAgICd2YWx1ZScsXG4gICAgICAgICdzdHlsZScsXG4gICAgICAgICd4bWxucydcbiAgICAgIF0pO1xuICAgICAgdmFyIE1BVEhNTF9OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCc7XG4gICAgICB2YXIgU1ZHX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG4gICAgICB2YXIgSFRNTF9OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCc7XG4gICAgICB2YXIgTkFNRVNQQUNFID0gSFRNTF9OQU1FU1BBQ0U7XG4gICAgICB2YXIgSVNfRU1QVFlfSU5QVVQgPSBmYWxzZTtcbiAgICAgIHZhciBQQVJTRVJfTUVESUFfVFlQRTtcbiAgICAgIHZhciBTVVBQT1JURURfUEFSU0VSX01FRElBX1RZUEVTID0gW1xuICAgICAgICAnYXBwbGljYXRpb24veGh0bWwreG1sJyxcbiAgICAgICAgJ3RleHQvaHRtbCdcbiAgICAgIF07XG4gICAgICB2YXIgREVGQVVMVF9QQVJTRVJfTUVESUFfVFlQRSA9ICd0ZXh0L2h0bWwnO1xuICAgICAgdmFyIHRyYW5zZm9ybUNhc2VGdW5jO1xuICAgICAgdmFyIENPTkZJRyA9IG51bGw7XG4gICAgICB2YXIgZm9ybUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7XG4gICAgICB2YXIgaXNSZWdleE9yRnVuY3Rpb24gPSBmdW5jdGlvbiBpc1JlZ2V4T3JGdW5jdGlvbih0ZXN0VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRlc3RWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCB8fCB0ZXN0VmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbjtcbiAgICAgIH07XG4gICAgICB2YXIgX3BhcnNlQ29uZmlnID0gZnVuY3Rpb24gX3BhcnNlQ29uZmlnKGNmZykge1xuICAgICAgICBpZiAoQ09ORklHICYmIENPTkZJRyA9PT0gY2ZnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2ZnIHx8IF90eXBlb2YoY2ZnKSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBjZmcgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBjZmcgPSBjbG9uZShjZmcpO1xuICAgICAgICBBTExPV0VEX1RBR1MgPSAnQUxMT1dFRF9UQUdTJyBpbiBjZmcgPyBhZGRUb1NldCh7fSwgY2ZnLkFMTE9XRURfVEFHUykgOiBERUZBVUxUX0FMTE9XRURfVEFHUztcbiAgICAgICAgQUxMT1dFRF9BVFRSID0gJ0FMTE9XRURfQVRUUicgaW4gY2ZnID8gYWRkVG9TZXQoe30sIGNmZy5BTExPV0VEX0FUVFIpIDogREVGQVVMVF9BTExPV0VEX0FUVFI7XG4gICAgICAgIFVSSV9TQUZFX0FUVFJJQlVURVMgPSAnQUREX1VSSV9TQUZFX0FUVFInIGluIGNmZyA/IGFkZFRvU2V0KGNsb25lKERFRkFVTFRfVVJJX1NBRkVfQVRUUklCVVRFUyksIGNmZy5BRERfVVJJX1NBRkVfQVRUUikgOiBERUZBVUxUX1VSSV9TQUZFX0FUVFJJQlVURVM7XG4gICAgICAgIERBVEFfVVJJX1RBR1MgPSAnQUREX0RBVEFfVVJJX1RBR1MnIGluIGNmZyA/IGFkZFRvU2V0KGNsb25lKERFRkFVTFRfREFUQV9VUklfVEFHUyksIGNmZy5BRERfREFUQV9VUklfVEFHUykgOiBERUZBVUxUX0RBVEFfVVJJX1RBR1M7XG4gICAgICAgIEZPUkJJRF9DT05URU5UUyA9ICdGT1JCSURfQ09OVEVOVFMnIGluIGNmZyA/IGFkZFRvU2V0KHt9LCBjZmcuRk9SQklEX0NPTlRFTlRTKSA6IERFRkFVTFRfRk9SQklEX0NPTlRFTlRTO1xuICAgICAgICBGT1JCSURfVEFHUyA9ICdGT1JCSURfVEFHUycgaW4gY2ZnID8gYWRkVG9TZXQoe30sIGNmZy5GT1JCSURfVEFHUykgOiB7fTtcbiAgICAgICAgRk9SQklEX0FUVFIgPSAnRk9SQklEX0FUVFInIGluIGNmZyA/IGFkZFRvU2V0KHt9LCBjZmcuRk9SQklEX0FUVFIpIDoge307XG4gICAgICAgIFVTRV9QUk9GSUxFUyA9ICdVU0VfUFJPRklMRVMnIGluIGNmZyA/IGNmZy5VU0VfUFJPRklMRVMgOiBmYWxzZTtcbiAgICAgICAgQUxMT1dfQVJJQV9BVFRSID0gY2ZnLkFMTE9XX0FSSUFfQVRUUiAhPT0gZmFsc2U7XG4gICAgICAgIEFMTE9XX0RBVEFfQVRUUiA9IGNmZy5BTExPV19EQVRBX0FUVFIgIT09IGZhbHNlO1xuICAgICAgICBBTExPV19VTktOT1dOX1BST1RPQ09MUyA9IGNmZy5BTExPV19VTktOT1dOX1BST1RPQ09MUyB8fCBmYWxzZTtcbiAgICAgICAgU0FGRV9GT1JfVEVNUExBVEVTID0gY2ZnLlNBRkVfRk9SX1RFTVBMQVRFUyB8fCBmYWxzZTtcbiAgICAgICAgV0hPTEVfRE9DVU1FTlQgPSBjZmcuV0hPTEVfRE9DVU1FTlQgfHwgZmFsc2U7XG4gICAgICAgIFJFVFVSTl9ET00gPSBjZmcuUkVUVVJOX0RPTSB8fCBmYWxzZTtcbiAgICAgICAgUkVUVVJOX0RPTV9GUkFHTUVOVCA9IGNmZy5SRVRVUk5fRE9NX0ZSQUdNRU5UIHx8IGZhbHNlO1xuICAgICAgICBSRVRVUk5fVFJVU1RFRF9UWVBFID0gY2ZnLlJFVFVSTl9UUlVTVEVEX1RZUEUgfHwgZmFsc2U7XG4gICAgICAgIEZPUkNFX0JPRFkgPSBjZmcuRk9SQ0VfQk9EWSB8fCBmYWxzZTtcbiAgICAgICAgU0FOSVRJWkVfRE9NID0gY2ZnLlNBTklUSVpFX0RPTSAhPT0gZmFsc2U7XG4gICAgICAgIEtFRVBfQ09OVEVOVCA9IGNmZy5LRUVQX0NPTlRFTlQgIT09IGZhbHNlO1xuICAgICAgICBJTl9QTEFDRSA9IGNmZy5JTl9QTEFDRSB8fCBmYWxzZTtcbiAgICAgICAgSVNfQUxMT1dFRF9VUkkkMSA9IGNmZy5BTExPV0VEX1VSSV9SRUdFWFAgfHwgSVNfQUxMT1dFRF9VUkkkMTtcbiAgICAgICAgTkFNRVNQQUNFID0gY2ZnLk5BTUVTUEFDRSB8fCBIVE1MX05BTUVTUEFDRTtcbiAgICAgICAgaWYgKGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORyAmJiBpc1JlZ2V4T3JGdW5jdGlvbihjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSkge1xuICAgICAgICAgIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayA9IGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2s7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORyAmJiBpc1JlZ2V4T3JGdW5jdGlvbihjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKSkge1xuICAgICAgICAgIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayA9IGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2s7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORyAmJiB0eXBlb2YgY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzID0gY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cztcbiAgICAgICAgfVxuICAgICAgICBQQVJTRVJfTUVESUFfVFlQRSA9IFNVUFBPUlRFRF9QQVJTRVJfTUVESUFfVFlQRVMuaW5kZXhPZihjZmcuUEFSU0VSX01FRElBX1RZUEUpID09PSAtMSA/IFBBUlNFUl9NRURJQV9UWVBFID0gREVGQVVMVF9QQVJTRVJfTUVESUFfVFlQRSA6IFBBUlNFUl9NRURJQV9UWVBFID0gY2ZnLlBBUlNFUl9NRURJQV9UWVBFO1xuICAgICAgICB0cmFuc2Zvcm1DYXNlRnVuYyA9IFBBUlNFUl9NRURJQV9UWVBFID09PSAnYXBwbGljYXRpb24veGh0bWwreG1sJyA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH0gOiBzdHJpbmdUb0xvd2VyQ2FzZTtcbiAgICAgICAgaWYgKFNBRkVfRk9SX1RFTVBMQVRFUykge1xuICAgICAgICAgIEFMTE9XX0RBVEFfQVRUUiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChSRVRVUk5fRE9NX0ZSQUdNRU5UKSB7XG4gICAgICAgICAgUkVUVVJOX0RPTSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFVTRV9QUk9GSUxFUykge1xuICAgICAgICAgIEFMTE9XRURfVEFHUyA9IGFkZFRvU2V0KHt9LCBfdG9Db25zdW1hYmxlQXJyYXkodGV4dCkpO1xuICAgICAgICAgIEFMTE9XRURfQVRUUiA9IFtdO1xuICAgICAgICAgIGlmIChVU0VfUFJPRklMRVMuaHRtbCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBodG1sJDEpO1xuICAgICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBodG1sKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFVTRV9QUk9GSUxFUy5zdmcgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgc3ZnJDEpO1xuICAgICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBzdmcpO1xuICAgICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCB4bWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoVVNFX1BST0ZJTEVTLnN2Z0ZpbHRlcnMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgc3ZnRmlsdGVycyk7XG4gICAgICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIHN2Zyk7XG4gICAgICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIHhtbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChVU0VfUFJPRklMRVMubWF0aE1sID09PSB0cnVlKSB7XG4gICAgICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIG1hdGhNbCQxKTtcbiAgICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgbWF0aE1sKTtcbiAgICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgeG1sKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNmZy5BRERfVEFHUykge1xuICAgICAgICAgIGlmIChBTExPV0VEX1RBR1MgPT09IERFRkFVTFRfQUxMT1dFRF9UQUdTKSB7XG4gICAgICAgICAgICBBTExPV0VEX1RBR1MgPSBjbG9uZShBTExPV0VEX1RBR1MpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIGNmZy5BRERfVEFHUyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNmZy5BRERfQVRUUikge1xuICAgICAgICAgIGlmIChBTExPV0VEX0FUVFIgPT09IERFRkFVTFRfQUxMT1dFRF9BVFRSKSB7XG4gICAgICAgICAgICBBTExPV0VEX0FUVFIgPSBjbG9uZShBTExPV0VEX0FUVFIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIGNmZy5BRERfQVRUUik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNmZy5BRERfVVJJX1NBRkVfQVRUUikge1xuICAgICAgICAgIGFkZFRvU2V0KFVSSV9TQUZFX0FUVFJJQlVURVMsIGNmZy5BRERfVVJJX1NBRkVfQVRUUik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNmZy5GT1JCSURfQ09OVEVOVFMpIHtcbiAgICAgICAgICBpZiAoRk9SQklEX0NPTlRFTlRTID09PSBERUZBVUxUX0ZPUkJJRF9DT05URU5UUykge1xuICAgICAgICAgICAgRk9SQklEX0NPTlRFTlRTID0gY2xvbmUoRk9SQklEX0NPTlRFTlRTKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWRkVG9TZXQoRk9SQklEX0NPTlRFTlRTLCBjZmcuRk9SQklEX0NPTlRFTlRTKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoS0VFUF9DT05URU5UKSB7XG4gICAgICAgICAgQUxMT1dFRF9UQUdTWycjdGV4dCddID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoV0hPTEVfRE9DVU1FTlQpIHtcbiAgICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIFtcbiAgICAgICAgICAgICdodG1sJyxcbiAgICAgICAgICAgICdoZWFkJyxcbiAgICAgICAgICAgICdib2R5J1xuICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBTExPV0VEX1RBR1MudGFibGUpIHtcbiAgICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIFsndGJvZHknXSk7XG4gICAgICAgICAgZGVsZXRlIEZPUkJJRF9UQUdTLnRib2R5O1xuICAgICAgICB9XG4gICAgICAgIGlmIChmcmVlemUpIHtcbiAgICAgICAgICBmcmVlemUoY2ZnKTtcbiAgICAgICAgfVxuICAgICAgICBDT05GSUcgPSBjZmc7XG4gICAgICB9O1xuICAgICAgdmFyIE1BVEhNTF9URVhUX0lOVEVHUkFUSU9OX1BPSU5UUyA9IGFkZFRvU2V0KHt9LCBbXG4gICAgICAgICdtaScsXG4gICAgICAgICdtbycsXG4gICAgICAgICdtbicsXG4gICAgICAgICdtcycsXG4gICAgICAgICdtdGV4dCdcbiAgICAgIF0pO1xuICAgICAgdmFyIEhUTUxfSU5URUdSQVRJT05fUE9JTlRTID0gYWRkVG9TZXQoe30sIFtcbiAgICAgICAgJ2ZvcmVpZ25vYmplY3QnLFxuICAgICAgICAnZGVzYycsXG4gICAgICAgICd0aXRsZScsXG4gICAgICAgICdhbm5vdGF0aW9uLXhtbCdcbiAgICAgIF0pO1xuICAgICAgdmFyIENPTU1PTl9TVkdfQU5EX0hUTUxfRUxFTUVOVFMgPSBhZGRUb1NldCh7fSwgW1xuICAgICAgICAndGl0bGUnLFxuICAgICAgICAnc3R5bGUnLFxuICAgICAgICAnZm9udCcsXG4gICAgICAgICdhJyxcbiAgICAgICAgJ3NjcmlwdCdcbiAgICAgIF0pO1xuICAgICAgdmFyIEFMTF9TVkdfVEFHUyA9IGFkZFRvU2V0KHt9LCBzdmckMSk7XG4gICAgICBhZGRUb1NldChBTExfU1ZHX1RBR1MsIHN2Z0ZpbHRlcnMpO1xuICAgICAgYWRkVG9TZXQoQUxMX1NWR19UQUdTLCBzdmdEaXNhbGxvd2VkKTtcbiAgICAgIHZhciBBTExfTUFUSE1MX1RBR1MgPSBhZGRUb1NldCh7fSwgbWF0aE1sJDEpO1xuICAgICAgYWRkVG9TZXQoQUxMX01BVEhNTF9UQUdTLCBtYXRoTWxEaXNhbGxvd2VkKTtcbiAgICAgIHZhciBfY2hlY2tWYWxpZE5hbWVzcGFjZSA9IGZ1bmN0aW9uIF9jaGVja1ZhbGlkTmFtZXNwYWNlKGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gICAgICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQudGFnTmFtZSkge1xuICAgICAgICAgIHBhcmVudCA9IHtcbiAgICAgICAgICAgIG5hbWVzcGFjZVVSSTogSFRNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgICB0YWdOYW1lOiAndGVtcGxhdGUnXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGFnTmFtZSA9IHN0cmluZ1RvTG93ZXJDYXNlKGVsZW1lbnQudGFnTmFtZSk7XG4gICAgICAgIHZhciBwYXJlbnRUYWdOYW1lID0gc3RyaW5nVG9Mb3dlckNhc2UocGFyZW50LnRhZ05hbWUpO1xuICAgICAgICBpZiAoZWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0UpIHtcbiAgICAgICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgICAgIHJldHVybiB0YWdOYW1lID09PSAnc3ZnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IE1BVEhNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgICAgIHJldHVybiB0YWdOYW1lID09PSAnc3ZnJyAmJiAocGFyZW50VGFnTmFtZSA9PT0gJ2Fubm90YXRpb24teG1sJyB8fCBNQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFNbcGFyZW50VGFnTmFtZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gQm9vbGVhbihBTExfU1ZHX1RBR1NbdGFnTmFtZV0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0gTUFUSE1MX05BTUVTUEFDRSkge1xuICAgICAgICAgIGlmIChwYXJlbnQubmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09ICdtYXRoJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0UpIHtcbiAgICAgICAgICAgIHJldHVybiB0YWdOYW1lID09PSAnbWF0aCcgJiYgSFRNTF9JTlRFR1JBVElPTl9QT0lOVFNbcGFyZW50VGFnTmFtZV07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBCb29sZWFuKEFMTF9NQVRITUxfVEFHU1t0YWdOYW1lXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQubmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgICAgIGlmIChwYXJlbnQubmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFICYmICFIVE1MX0lOVEVHUkFUSU9OX1BPSU5UU1twYXJlbnRUYWdOYW1lXSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gTUFUSE1MX05BTUVTUEFDRSAmJiAhTUFUSE1MX1RFWFRfSU5URUdSQVRJT05fUE9JTlRTW3BhcmVudFRhZ05hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAhQUxMX01BVEhNTF9UQUdTW3RhZ05hbWVdICYmIChDT01NT05fU1ZHX0FORF9IVE1MX0VMRU1FTlRTW3RhZ05hbWVdIHx8ICFBTExfU1ZHX1RBR1NbdGFnTmFtZV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG4gICAgICB2YXIgX2ZvcmNlUmVtb3ZlID0gZnVuY3Rpb24gX2ZvcmNlUmVtb3ZlKG5vZGUpIHtcbiAgICAgICAgYXJyYXlQdXNoKERPTVB1cmlmeS5yZW1vdmVkLCB7IGVsZW1lbnQ6IG5vZGUgfSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5vZGUub3V0ZXJIVE1MID0gZW1wdHlIVE1MO1xuICAgICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdmFyIF9yZW1vdmVBdHRyaWJ1dGUgPSBmdW5jdGlvbiBfcmVtb3ZlQXR0cmlidXRlKG5hbWUsIG5vZGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhcnJheVB1c2goRE9NUHVyaWZ5LnJlbW92ZWQsIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTogbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpLFxuICAgICAgICAgICAgZnJvbTogbm9kZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgYXJyYXlQdXNoKERPTVB1cmlmeS5yZW1vdmVkLCB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6IG51bGwsXG4gICAgICAgICAgICBmcm9tOiBub2RlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgIGlmIChuYW1lID09PSAnaXMnICYmICFBTExPV0VEX0FUVFJbbmFtZV0pIHtcbiAgICAgICAgICBpZiAoUkVUVVJOX0RPTSB8fCBSRVRVUk5fRE9NX0ZSQUdNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBfZm9yY2VSZW1vdmUobm9kZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsICcnKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB2YXIgX2luaXREb2N1bWVudCA9IGZ1bmN0aW9uIF9pbml0RG9jdW1lbnQoZGlydHkpIHtcbiAgICAgICAgdmFyIGRvYztcbiAgICAgICAgdmFyIGxlYWRpbmdXaGl0ZXNwYWNlO1xuICAgICAgICBpZiAoRk9SQ0VfQk9EWSkge1xuICAgICAgICAgIGRpcnR5ID0gJzxyZW1vdmU+PC9yZW1vdmU+JyArIGRpcnR5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBtYXRjaGVzID0gc3RyaW5nTWF0Y2goZGlydHksIC9eW1xcclxcblxcdCBdKy8pO1xuICAgICAgICAgIGxlYWRpbmdXaGl0ZXNwYWNlID0gbWF0Y2hlcyAmJiBtYXRjaGVzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChQQVJTRVJfTUVESUFfVFlQRSA9PT0gJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcpIHtcbiAgICAgICAgICBkaXJ0eSA9ICc8aHRtbCB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIj48aGVhZD48L2hlYWQ+PGJvZHk+JyArIGRpcnR5ICsgJzwvYm9keT48L2h0bWw+JztcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGlydHlQYXlsb2FkID0gdHJ1c3RlZFR5cGVzUG9saWN5ID8gdHJ1c3RlZFR5cGVzUG9saWN5LmNyZWF0ZUhUTUwoZGlydHkpIDogZGlydHk7XG4gICAgICAgIGlmIChOQU1FU1BBQ0UgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoZGlydHlQYXlsb2FkLCBQQVJTRVJfTUVESUFfVFlQRSk7XG4gICAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRvYyB8fCAhZG9jLmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgICAgIGRvYyA9IGltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50KE5BTUVTUEFDRSwgJ3RlbXBsYXRlJywgbnVsbCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRvYy5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MID0gSVNfRU1QVFlfSU5QVVQgPyAnJyA6IGRpcnR5UGF5bG9hZDtcbiAgICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBib2R5ID0gZG9jLmJvZHkgfHwgZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgaWYgKGRpcnR5ICYmIGxlYWRpbmdXaGl0ZXNwYWNlKSB7XG4gICAgICAgICAgYm9keS5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobGVhZGluZ1doaXRlc3BhY2UpLCBib2R5LmNoaWxkTm9kZXNbMF0gfHwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE5BTUVTUEFDRSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0RWxlbWVudHNCeVRhZ05hbWUuY2FsbChkb2MsIFdIT0xFX0RPQ1VNRU5UID8gJ2h0bWwnIDogJ2JvZHknKVswXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gV0hPTEVfRE9DVU1FTlQgPyBkb2MuZG9jdW1lbnRFbGVtZW50IDogYm9keTtcbiAgICAgIH07XG4gICAgICB2YXIgX2NyZWF0ZUl0ZXJhdG9yID0gZnVuY3Rpb24gX2NyZWF0ZUl0ZXJhdG9yKHJvb3QpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU5vZGVJdGVyYXRvci5jYWxsKHJvb3Qub3duZXJEb2N1bWVudCB8fCByb290LCByb290LCBOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCB8IE5vZGVGaWx0ZXIuU0hPV19DT01NRU5UIHwgTm9kZUZpbHRlci5TSE9XX1RFWFQsIG51bGwsIGZhbHNlKTtcbiAgICAgIH07XG4gICAgICB2YXIgX2lzQ2xvYmJlcmVkID0gZnVuY3Rpb24gX2lzQ2xvYmJlcmVkKGVsbSkge1xuICAgICAgICByZXR1cm4gZWxtIGluc3RhbmNlb2YgSFRNTEZvcm1FbGVtZW50ICYmICh0eXBlb2YgZWxtLm5vZGVOYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgZWxtLnRleHRDb250ZW50ICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgZWxtLnJlbW92ZUNoaWxkICE9PSAnZnVuY3Rpb24nIHx8ICEoZWxtLmF0dHJpYnV0ZXMgaW5zdGFuY2VvZiBOYW1lZE5vZGVNYXApIHx8IHR5cGVvZiBlbG0ucmVtb3ZlQXR0cmlidXRlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBlbG0uc2V0QXR0cmlidXRlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBlbG0ubmFtZXNwYWNlVVJJICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgZWxtLmluc2VydEJlZm9yZSAhPT0gJ2Z1bmN0aW9uJyk7XG4gICAgICB9O1xuICAgICAgdmFyIF9pc05vZGUgPSBmdW5jdGlvbiBfaXNOb2RlKG9iamVjdCkge1xuICAgICAgICByZXR1cm4gX3R5cGVvZihOb2RlKSA9PT0gJ29iamVjdCcgPyBvYmplY3QgaW5zdGFuY2VvZiBOb2RlIDogb2JqZWN0ICYmIF90eXBlb2Yob2JqZWN0KSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iamVjdC5ub2RlVHlwZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIG9iamVjdC5ub2RlTmFtZSA9PT0gJ3N0cmluZyc7XG4gICAgICB9O1xuICAgICAgdmFyIF9leGVjdXRlSG9vayA9IGZ1bmN0aW9uIF9leGVjdXRlSG9vayhlbnRyeVBvaW50LCBjdXJyZW50Tm9kZSwgZGF0YSkge1xuICAgICAgICBpZiAoIWhvb2tzW2VudHJ5UG9pbnRdKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGFycmF5Rm9yRWFjaChob29rc1tlbnRyeVBvaW50XSwgZnVuY3Rpb24gKGhvb2spIHtcbiAgICAgICAgICBob29rLmNhbGwoRE9NUHVyaWZ5LCBjdXJyZW50Tm9kZSwgZGF0YSwgQ09ORklHKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgdmFyIF9zYW5pdGl6ZUVsZW1lbnRzID0gZnVuY3Rpb24gX3Nhbml0aXplRWxlbWVudHMoY3VycmVudE5vZGUpIHtcbiAgICAgICAgdmFyIGNvbnRlbnQ7XG4gICAgICAgIF9leGVjdXRlSG9vaygnYmVmb3JlU2FuaXRpemVFbGVtZW50cycsIGN1cnJlbnROb2RlLCBudWxsKTtcbiAgICAgICAgaWYgKF9pc0Nsb2JiZXJlZChjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWdFeHBUZXN0KC9bXFx1MDA4MC1cXHVGRkZGXS8sIGN1cnJlbnROb2RlLm5vZGVOYW1lKSkge1xuICAgICAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRhZ05hbWUgPSB0cmFuc2Zvcm1DYXNlRnVuYyhjdXJyZW50Tm9kZS5ub2RlTmFtZSk7XG4gICAgICAgIF9leGVjdXRlSG9vaygndXBvblNhbml0aXplRWxlbWVudCcsIGN1cnJlbnROb2RlLCB7XG4gICAgICAgICAgdGFnTmFtZTogdGFnTmFtZSxcbiAgICAgICAgICBhbGxvd2VkVGFnczogQUxMT1dFRF9UQUdTXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY3VycmVudE5vZGUuaGFzQ2hpbGROb2RlcygpICYmICFfaXNOb2RlKGN1cnJlbnROb2RlLmZpcnN0RWxlbWVudENoaWxkKSAmJiAoIV9pc05vZGUoY3VycmVudE5vZGUuY29udGVudCkgfHwgIV9pc05vZGUoY3VycmVudE5vZGUuY29udGVudC5maXJzdEVsZW1lbnRDaGlsZCkpICYmIHJlZ0V4cFRlc3QoLzxbL1xcd10vZywgY3VycmVudE5vZGUuaW5uZXJIVE1MKSAmJiByZWdFeHBUZXN0KC88Wy9cXHddL2csIGN1cnJlbnROb2RlLnRleHRDb250ZW50KSkge1xuICAgICAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhZ05hbWUgPT09ICdzZWxlY3QnICYmIHJlZ0V4cFRlc3QoLzx0ZW1wbGF0ZS9pLCBjdXJyZW50Tm9kZS5pbm5lckhUTUwpKSB7XG4gICAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUFMTE9XRURfVEFHU1t0YWdOYW1lXSB8fCBGT1JCSURfVEFHU1t0YWdOYW1lXSkge1xuICAgICAgICAgIGlmICghRk9SQklEX1RBR1NbdGFnTmFtZV0gJiYgX2Jhc2ljQ3VzdG9tRWxlbWVudFRlc3QodGFnTmFtZSkpIHtcbiAgICAgICAgICAgIGlmIChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAgJiYgcmVnRXhwVGVzdChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2ssIHRhZ05hbWUpKVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKHRhZ05hbWUpKVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChLRUVQX0NPTlRFTlQgJiYgIUZPUkJJRF9DT05URU5UU1t0YWdOYW1lXSkge1xuICAgICAgICAgICAgdmFyIHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKSB8fCBjdXJyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgICAgICAgICAgdmFyIGNoaWxkTm9kZXMgPSBnZXRDaGlsZE5vZGVzKGN1cnJlbnROb2RlKSB8fCBjdXJyZW50Tm9kZS5jaGlsZE5vZGVzO1xuICAgICAgICAgICAgaWYgKGNoaWxkTm9kZXMgJiYgcGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICB2YXIgY2hpbGRDb3VudCA9IGNoaWxkTm9kZXMubGVuZ3RoO1xuICAgICAgICAgICAgICBmb3IgKHZhciBpID0gY2hpbGRDb3VudCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2xvbmVOb2RlKGNoaWxkTm9kZXNbaV0sIHRydWUpLCBnZXROZXh0U2libGluZyhjdXJyZW50Tm9kZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRWxlbWVudCAmJiAhX2NoZWNrVmFsaWROYW1lc3BhY2UoY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHRhZ05hbWUgPT09ICdub3NjcmlwdCcgfHwgdGFnTmFtZSA9PT0gJ25vZW1iZWQnKSAmJiByZWdFeHBUZXN0KC88XFwvbm8oc2NyaXB0fGVtYmVkKS9pLCBjdXJyZW50Tm9kZS5pbm5lckhUTUwpKSB7XG4gICAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoU0FGRV9GT1JfVEVNUExBVEVTICYmIGN1cnJlbnROb2RlLm5vZGVUeXBlID09PSAzKSB7XG4gICAgICAgICAgY29udGVudCA9IGN1cnJlbnROb2RlLnRleHRDb250ZW50O1xuICAgICAgICAgIGNvbnRlbnQgPSBzdHJpbmdSZXBsYWNlKGNvbnRlbnQsIE1VU1RBQ0hFX0VYUFIkMSwgJyAnKTtcbiAgICAgICAgICBjb250ZW50ID0gc3RyaW5nUmVwbGFjZShjb250ZW50LCBFUkJfRVhQUiQxLCAnICcpO1xuICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS50ZXh0Q29udGVudCAhPT0gY29udGVudCkge1xuICAgICAgICAgICAgYXJyYXlQdXNoKERPTVB1cmlmeS5yZW1vdmVkLCB7IGVsZW1lbnQ6IGN1cnJlbnROb2RlLmNsb25lTm9kZSgpIH0pO1xuICAgICAgICAgICAgY3VycmVudE5vZGUudGV4dENvbnRlbnQgPSBjb250ZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfZXhlY3V0ZUhvb2soJ2FmdGVyU2FuaXRpemVFbGVtZW50cycsIGN1cnJlbnROb2RlLCBudWxsKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfTtcbiAgICAgIHZhciBfaXNWYWxpZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uIF9pc1ZhbGlkQXR0cmlidXRlKGxjVGFnLCBsY05hbWUsIHZhbHVlKSB7XG4gICAgICAgIGlmIChTQU5JVElaRV9ET00gJiYgKGxjTmFtZSA9PT0gJ2lkJyB8fCBsY05hbWUgPT09ICduYW1lJykgJiYgKHZhbHVlIGluIGRvY3VtZW50IHx8IHZhbHVlIGluIGZvcm1FbGVtZW50KSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQUxMT1dfREFUQV9BVFRSICYmICFGT1JCSURfQVRUUltsY05hbWVdICYmIHJlZ0V4cFRlc3QoREFUQV9BVFRSJDEsIGxjTmFtZSkpO1xuICAgICAgICBlbHNlIGlmIChBTExPV19BUklBX0FUVFIgJiYgcmVnRXhwVGVzdChBUklBX0FUVFIkMSwgbGNOYW1lKSk7XG4gICAgICAgIGVsc2UgaWYgKCFBTExPV0VEX0FUVFJbbGNOYW1lXSB8fCBGT1JCSURfQVRUUltsY05hbWVdKSB7XG4gICAgICAgICAgaWYgKF9iYXNpY0N1c3RvbUVsZW1lbnRUZXN0KGxjVGFnKSAmJiAoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwICYmIHJlZ0V4cFRlc3QoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrLCBsY1RhZykgfHwgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKGxjVGFnKSkgJiYgKENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCAmJiByZWdFeHBUZXN0KENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaywgbGNOYW1lKSB8fCBDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2sobGNOYW1lKSkgfHwgbGNOYW1lID09PSAnaXMnICYmIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyAmJiAoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwICYmIHJlZ0V4cFRlc3QoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrLCB2YWx1ZSkgfHwgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKHZhbHVlKSkpO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChVUklfU0FGRV9BVFRSSUJVVEVTW2xjTmFtZV0pO1xuICAgICAgICBlbHNlIGlmIChyZWdFeHBUZXN0KElTX0FMTE9XRURfVVJJJDEsIHN0cmluZ1JlcGxhY2UodmFsdWUsIEFUVFJfV0hJVEVTUEFDRSQxLCAnJykpKTtcbiAgICAgICAgZWxzZSBpZiAoKGxjTmFtZSA9PT0gJ3NyYycgfHwgbGNOYW1lID09PSAneGxpbms6aHJlZicgfHwgbGNOYW1lID09PSAnaHJlZicpICYmIGxjVGFnICE9PSAnc2NyaXB0JyAmJiBzdHJpbmdJbmRleE9mKHZhbHVlLCAnZGF0YTonKSA9PT0gMCAmJiBEQVRBX1VSSV9UQUdTW2xjVGFnXSk7XG4gICAgICAgIGVsc2UgaWYgKEFMTE9XX1VOS05PV05fUFJPVE9DT0xTICYmICFyZWdFeHBUZXN0KElTX1NDUklQVF9PUl9EQVRBJDEsIHN0cmluZ1JlcGxhY2UodmFsdWUsIEFUVFJfV0hJVEVTUEFDRSQxLCAnJykpKTtcbiAgICAgICAgZWxzZSBpZiAoIXZhbHVlKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfTtcbiAgICAgIHZhciBfYmFzaWNDdXN0b21FbGVtZW50VGVzdCA9IGZ1bmN0aW9uIF9iYXNpY0N1c3RvbUVsZW1lbnRUZXN0KHRhZ05hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRhZ05hbWUuaW5kZXhPZignLScpID4gMDtcbiAgICAgIH07XG4gICAgICB2YXIgX3Nhbml0aXplQXR0cmlidXRlcyA9IGZ1bmN0aW9uIF9zYW5pdGl6ZUF0dHJpYnV0ZXMoY3VycmVudE5vZGUpIHtcbiAgICAgICAgdmFyIGF0dHI7XG4gICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgdmFyIGxjTmFtZTtcbiAgICAgICAgdmFyIGw7XG4gICAgICAgIF9leGVjdXRlSG9vaygnYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzJywgY3VycmVudE5vZGUsIG51bGwpO1xuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IGN1cnJlbnROb2RlLmF0dHJpYnV0ZXM7XG4gICAgICAgIGlmICghYXR0cmlidXRlcykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaG9va0V2ZW50ID0ge1xuICAgICAgICAgIGF0dHJOYW1lOiAnJyxcbiAgICAgICAgICBhdHRyVmFsdWU6ICcnLFxuICAgICAgICAgIGtlZXBBdHRyOiB0cnVlLFxuICAgICAgICAgIGFsbG93ZWRBdHRyaWJ1dGVzOiBBTExPV0VEX0FUVFJcbiAgICAgICAgfTtcbiAgICAgICAgbCA9IGF0dHJpYnV0ZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAobC0tKSB7XG4gICAgICAgICAgYXR0ciA9IGF0dHJpYnV0ZXNbbF07XG4gICAgICAgICAgdmFyIF9hdHRyID0gYXR0ciwgbmFtZSA9IF9hdHRyLm5hbWUsIG5hbWVzcGFjZVVSSSA9IF9hdHRyLm5hbWVzcGFjZVVSSTtcbiAgICAgICAgICB2YWx1ZSA9IG5hbWUgPT09ICd2YWx1ZScgPyBhdHRyLnZhbHVlIDogc3RyaW5nVHJpbShhdHRyLnZhbHVlKTtcbiAgICAgICAgICBsY05hbWUgPSB0cmFuc2Zvcm1DYXNlRnVuYyhuYW1lKTtcbiAgICAgICAgICB2YXIgaW5pdFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgaG9va0V2ZW50LmF0dHJOYW1lID0gbGNOYW1lO1xuICAgICAgICAgIGhvb2tFdmVudC5hdHRyVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICBob29rRXZlbnQua2VlcEF0dHIgPSB0cnVlO1xuICAgICAgICAgIGhvb2tFdmVudC5mb3JjZUtlZXBBdHRyID0gdW5kZWZpbmVkO1xuICAgICAgICAgIF9leGVjdXRlSG9vaygndXBvblNhbml0aXplQXR0cmlidXRlJywgY3VycmVudE5vZGUsIGhvb2tFdmVudCk7XG4gICAgICAgICAgdmFsdWUgPSBob29rRXZlbnQuYXR0clZhbHVlO1xuICAgICAgICAgIGlmIChob29rRXZlbnQuZm9yY2VLZWVwQXR0cikge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaG9va0V2ZW50LmtlZXBBdHRyKSB7XG4gICAgICAgICAgICBfcmVtb3ZlQXR0cmlidXRlKG5hbWUsIGN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVnRXhwVGVzdCgvXFwvPi9pLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChTQUZFX0ZPUl9URU1QTEFURVMpIHtcbiAgICAgICAgICAgIHZhbHVlID0gc3RyaW5nUmVwbGFjZSh2YWx1ZSwgTVVTVEFDSEVfRVhQUiQxLCAnICcpO1xuICAgICAgICAgICAgdmFsdWUgPSBzdHJpbmdSZXBsYWNlKHZhbHVlLCBFUkJfRVhQUiQxLCAnICcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgbGNUYWcgPSB0cmFuc2Zvcm1DYXNlRnVuYyhjdXJyZW50Tm9kZS5ub2RlTmFtZSk7XG4gICAgICAgICAgaWYgKCFfaXNWYWxpZEF0dHJpYnV0ZShsY1RhZywgbGNOYW1lLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gaW5pdFZhbHVlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpZiAobmFtZXNwYWNlVVJJKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudE5vZGUuc2V0QXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3VycmVudE5vZGUuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgICAgICBfcmVtb3ZlQXR0cmlidXRlKG5hbWUsIGN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX2V4ZWN1dGVIb29rKCdhZnRlclNhbml0aXplQXR0cmlidXRlcycsIGN1cnJlbnROb2RlLCBudWxsKTtcbiAgICAgIH07XG4gICAgICB2YXIgX3Nhbml0aXplU2hhZG93RE9NID0gZnVuY3Rpb24gX3Nhbml0aXplU2hhZG93RE9NKGZyYWdtZW50KSB7XG4gICAgICAgIHZhciBzaGFkb3dOb2RlO1xuICAgICAgICB2YXIgc2hhZG93SXRlcmF0b3IgPSBfY3JlYXRlSXRlcmF0b3IoZnJhZ21lbnQpO1xuICAgICAgICBfZXhlY3V0ZUhvb2soJ2JlZm9yZVNhbml0aXplU2hhZG93RE9NJywgZnJhZ21lbnQsIG51bGwpO1xuICAgICAgICB3aGlsZSAoc2hhZG93Tm9kZSA9IHNoYWRvd0l0ZXJhdG9yLm5leHROb2RlKCkpIHtcbiAgICAgICAgICBfZXhlY3V0ZUhvb2soJ3Vwb25TYW5pdGl6ZVNoYWRvd05vZGUnLCBzaGFkb3dOb2RlLCBudWxsKTtcbiAgICAgICAgICBpZiAoX3Nhbml0aXplRWxlbWVudHMoc2hhZG93Tm9kZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2hhZG93Tm9kZS5jb250ZW50IGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgICAgICAgX3Nhbml0aXplU2hhZG93RE9NKHNoYWRvd05vZGUuY29udGVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9zYW5pdGl6ZUF0dHJpYnV0ZXMoc2hhZG93Tm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgX2V4ZWN1dGVIb29rKCdhZnRlclNhbml0aXplU2hhZG93RE9NJywgZnJhZ21lbnQsIG51bGwpO1xuICAgICAgfTtcbiAgICAgIERPTVB1cmlmeS5zYW5pdGl6ZSA9IGZ1bmN0aW9uIChkaXJ0eSwgY2ZnKSB7XG4gICAgICAgIHZhciBib2R5O1xuICAgICAgICB2YXIgaW1wb3J0ZWROb2RlO1xuICAgICAgICB2YXIgY3VycmVudE5vZGU7XG4gICAgICAgIHZhciBvbGROb2RlO1xuICAgICAgICB2YXIgcmV0dXJuTm9kZTtcbiAgICAgICAgSVNfRU1QVFlfSU5QVVQgPSAhZGlydHk7XG4gICAgICAgIGlmIChJU19FTVBUWV9JTlBVVCkge1xuICAgICAgICAgIGRpcnR5ID0gJzwhLS0+JztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGRpcnR5ICE9PSAnc3RyaW5nJyAmJiAhX2lzTm9kZShkaXJ0eSkpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGRpcnR5LnRvU3RyaW5nICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyB0eXBlRXJyb3JDcmVhdGUoJ3RvU3RyaW5nIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRpcnR5ID0gZGlydHkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGlydHkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIHRocm93IHR5cGVFcnJvckNyZWF0ZSgnZGlydHkgaXMgbm90IGEgc3RyaW5nLCBhYm9ydGluZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIURPTVB1cmlmeS5pc1N1cHBvcnRlZCkge1xuICAgICAgICAgIGlmIChfdHlwZW9mKHdpbmRvdy50b1N0YXRpY0hUTUwpID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygd2luZG93LnRvU3RhdGljSFRNTCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkaXJ0eSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy50b1N0YXRpY0hUTUwoZGlydHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF9pc05vZGUoZGlydHkpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB3aW5kb3cudG9TdGF0aWNIVE1MKGRpcnR5Lm91dGVySFRNTCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBkaXJ0eTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIVNFVF9DT05GSUcpIHtcbiAgICAgICAgICBfcGFyc2VDb25maWcoY2ZnKTtcbiAgICAgICAgfVxuICAgICAgICBET01QdXJpZnkucmVtb3ZlZCA9IFtdO1xuICAgICAgICBpZiAodHlwZW9mIGRpcnR5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIElOX1BMQUNFID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElOX1BMQUNFKSB7XG4gICAgICAgICAgaWYgKGRpcnR5Lm5vZGVOYW1lKSB7XG4gICAgICAgICAgICB2YXIgdGFnTmFtZSA9IHRyYW5zZm9ybUNhc2VGdW5jKGRpcnR5Lm5vZGVOYW1lKTtcbiAgICAgICAgICAgIGlmICghQUxMT1dFRF9UQUdTW3RhZ05hbWVdIHx8IEZPUkJJRF9UQUdTW3RhZ05hbWVdKSB7XG4gICAgICAgICAgICAgIHRocm93IHR5cGVFcnJvckNyZWF0ZSgncm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkaXJ0eSBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgICAgICBib2R5ID0gX2luaXREb2N1bWVudCgnPCEtLS0tPicpO1xuICAgICAgICAgIGltcG9ydGVkTm9kZSA9IGJvZHkub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKGRpcnR5LCB0cnVlKTtcbiAgICAgICAgICBpZiAoaW1wb3J0ZWROb2RlLm5vZGVUeXBlID09PSAxICYmIGltcG9ydGVkTm9kZS5ub2RlTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgICAgICAgICBib2R5ID0gaW1wb3J0ZWROb2RlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaW1wb3J0ZWROb2RlLm5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICAgICAgICAgIGJvZHkgPSBpbXBvcnRlZE5vZGU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoaW1wb3J0ZWROb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFSRVRVUk5fRE9NICYmICFTQUZFX0ZPUl9URU1QTEFURVMgJiYgIVdIT0xFX0RPQ1VNRU5UICYmIGRpcnR5LmluZGV4T2YoJzwnKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVzdGVkVHlwZXNQb2xpY3kgJiYgUkVUVVJOX1RSVVNURURfVFlQRSA/IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKGRpcnR5KSA6IGRpcnR5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBib2R5ID0gX2luaXREb2N1bWVudChkaXJ0eSk7XG4gICAgICAgICAgaWYgKCFib2R5KSB7XG4gICAgICAgICAgICByZXR1cm4gUkVUVVJOX0RPTSA/IG51bGwgOiBSRVRVUk5fVFJVU1RFRF9UWVBFID8gZW1wdHlIVE1MIDogJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChib2R5ICYmIEZPUkNFX0JPRFkpIHtcbiAgICAgICAgICBfZm9yY2VSZW1vdmUoYm9keS5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbm9kZUl0ZXJhdG9yID0gX2NyZWF0ZUl0ZXJhdG9yKElOX1BMQUNFID8gZGlydHkgOiBib2R5KTtcbiAgICAgICAgd2hpbGUgKGN1cnJlbnROb2RlID0gbm9kZUl0ZXJhdG9yLm5leHROb2RlKCkpIHtcbiAgICAgICAgICBpZiAoY3VycmVudE5vZGUubm9kZVR5cGUgPT09IDMgJiYgY3VycmVudE5vZGUgPT09IG9sZE5vZGUpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoX3Nhbml0aXplRWxlbWVudHMoY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGN1cnJlbnROb2RlLmNvbnRlbnQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSB7XG4gICAgICAgICAgICBfc2FuaXRpemVTaGFkb3dET00oY3VycmVudE5vZGUuY29udGVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9zYW5pdGl6ZUF0dHJpYnV0ZXMoY3VycmVudE5vZGUpO1xuICAgICAgICAgIG9sZE5vZGUgPSBjdXJyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICBvbGROb2RlID0gbnVsbDtcbiAgICAgICAgaWYgKElOX1BMQUNFKSB7XG4gICAgICAgICAgcmV0dXJuIGRpcnR5O1xuICAgICAgICB9XG4gICAgICAgIGlmIChSRVRVUk5fRE9NKSB7XG4gICAgICAgICAgaWYgKFJFVFVSTl9ET01fRlJBR01FTlQpIHtcbiAgICAgICAgICAgIHJldHVybk5vZGUgPSBjcmVhdGVEb2N1bWVudEZyYWdtZW50LmNhbGwoYm9keS5vd25lckRvY3VtZW50KTtcbiAgICAgICAgICAgIHdoaWxlIChib2R5LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuTm9kZS5hcHBlbmRDaGlsZChib2R5LmZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm5Ob2RlID0gYm9keTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKEFMTE9XRURfQVRUUi5zaGFkb3dyb290KSB7XG4gICAgICAgICAgICByZXR1cm5Ob2RlID0gaW1wb3J0Tm9kZS5jYWxsKG9yaWdpbmFsRG9jdW1lbnQsIHJldHVybk5vZGUsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmV0dXJuTm9kZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc2VyaWFsaXplZEhUTUwgPSBXSE9MRV9ET0NVTUVOVCA/IGJvZHkub3V0ZXJIVE1MIDogYm9keS5pbm5lckhUTUw7XG4gICAgICAgIGlmIChXSE9MRV9ET0NVTUVOVCAmJiBBTExPV0VEX1RBR1NbJyFkb2N0eXBlJ10gJiYgYm9keS5vd25lckRvY3VtZW50ICYmIGJvZHkub3duZXJEb2N1bWVudC5kb2N0eXBlICYmIGJvZHkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUgJiYgcmVnRXhwVGVzdChET0NUWVBFX05BTUUsIGJvZHkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUpKSB7XG4gICAgICAgICAgc2VyaWFsaXplZEhUTUwgPSAnPCFET0NUWVBFICcgKyBib2R5Lm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lICsgJz5cXG4nICsgc2VyaWFsaXplZEhUTUw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFNBRkVfRk9SX1RFTVBMQVRFUykge1xuICAgICAgICAgIHNlcmlhbGl6ZWRIVE1MID0gc3RyaW5nUmVwbGFjZShzZXJpYWxpemVkSFRNTCwgTVVTVEFDSEVfRVhQUiQxLCAnICcpO1xuICAgICAgICAgIHNlcmlhbGl6ZWRIVE1MID0gc3RyaW5nUmVwbGFjZShzZXJpYWxpemVkSFRNTCwgRVJCX0VYUFIkMSwgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1c3RlZFR5cGVzUG9saWN5ICYmIFJFVFVSTl9UUlVTVEVEX1RZUEUgPyB0cnVzdGVkVHlwZXNQb2xpY3kuY3JlYXRlSFRNTChzZXJpYWxpemVkSFRNTCkgOiBzZXJpYWxpemVkSFRNTDtcbiAgICAgIH07XG4gICAgICBET01QdXJpZnkuc2V0Q29uZmlnID0gZnVuY3Rpb24gKGNmZykge1xuICAgICAgICBfcGFyc2VDb25maWcoY2ZnKTtcbiAgICAgICAgU0VUX0NPTkZJRyA9IHRydWU7XG4gICAgICB9O1xuICAgICAgRE9NUHVyaWZ5LmNsZWFyQ29uZmlnID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBDT05GSUcgPSBudWxsO1xuICAgICAgICBTRVRfQ09ORklHID0gZmFsc2U7XG4gICAgICB9O1xuICAgICAgRE9NUHVyaWZ5LmlzVmFsaWRBdHRyaWJ1dGUgPSBmdW5jdGlvbiAodGFnLCBhdHRyLCB2YWx1ZSkge1xuICAgICAgICBpZiAoIUNPTkZJRykge1xuICAgICAgICAgIF9wYXJzZUNvbmZpZyh7fSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxjVGFnID0gdHJhbnNmb3JtQ2FzZUZ1bmModGFnKTtcbiAgICAgICAgdmFyIGxjTmFtZSA9IHRyYW5zZm9ybUNhc2VGdW5jKGF0dHIpO1xuICAgICAgICByZXR1cm4gX2lzVmFsaWRBdHRyaWJ1dGUobGNUYWcsIGxjTmFtZSwgdmFsdWUpO1xuICAgICAgfTtcbiAgICAgIERPTVB1cmlmeS5hZGRIb29rID0gZnVuY3Rpb24gKGVudHJ5UG9pbnQsIGhvb2tGdW5jdGlvbikge1xuICAgICAgICBpZiAodHlwZW9mIGhvb2tGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBob29rc1tlbnRyeVBvaW50XSA9IGhvb2tzW2VudHJ5UG9pbnRdIHx8IFtdO1xuICAgICAgICBhcnJheVB1c2goaG9va3NbZW50cnlQb2ludF0sIGhvb2tGdW5jdGlvbik7XG4gICAgICB9O1xuICAgICAgRE9NUHVyaWZ5LnJlbW92ZUhvb2sgPSBmdW5jdGlvbiAoZW50cnlQb2ludCkge1xuICAgICAgICBpZiAoaG9va3NbZW50cnlQb2ludF0pIHtcbiAgICAgICAgICByZXR1cm4gYXJyYXlQb3AoaG9va3NbZW50cnlQb2ludF0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgRE9NUHVyaWZ5LnJlbW92ZUhvb2tzID0gZnVuY3Rpb24gKGVudHJ5UG9pbnQpIHtcbiAgICAgICAgaWYgKGhvb2tzW2VudHJ5UG9pbnRdKSB7XG4gICAgICAgICAgaG9va3NbZW50cnlQb2ludF0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIERPTVB1cmlmeS5yZW1vdmVBbGxIb29rcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaG9va3MgPSB7fTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gRE9NUHVyaWZ5O1xuICAgIH1cbiAgICB2YXIgcHVyaWZ5ID0gY3JlYXRlRE9NUHVyaWZ5KCk7XG5cbiAgICBjb25zdCBlYWNoJDQgPSBUb29scy5lYWNoLCB0cmltID0gVG9vbHMudHJpbTtcbiAgICBjb25zdCBxdWVyeVBhcnRzID0gW1xuICAgICAgJ3NvdXJjZScsXG4gICAgICAncHJvdG9jb2wnLFxuICAgICAgJ2F1dGhvcml0eScsXG4gICAgICAndXNlckluZm8nLFxuICAgICAgJ3VzZXInLFxuICAgICAgJ3Bhc3N3b3JkJyxcbiAgICAgICdob3N0JyxcbiAgICAgICdwb3J0JyxcbiAgICAgICdyZWxhdGl2ZScsXG4gICAgICAncGF0aCcsXG4gICAgICAnZGlyZWN0b3J5JyxcbiAgICAgICdmaWxlJyxcbiAgICAgICdxdWVyeScsXG4gICAgICAnYW5jaG9yJ1xuICAgIF07XG4gICAgY29uc3QgREVGQVVMVF9QT1JUUyA9IHtcbiAgICAgIGZ0cDogMjEsXG4gICAgICBodHRwOiA4MCxcbiAgICAgIGh0dHBzOiA0NDMsXG4gICAgICBtYWlsdG86IDI1XG4gICAgfTtcbiAgICBjb25zdCBzYWZlU3ZnRGF0YVVybEVsZW1lbnRzID0gW1xuICAgICAgJ2ltZycsXG4gICAgICAndmlkZW8nXG4gICAgXTtcbiAgICBjb25zdCBibG9ja1N2Z0RhdGFVcmlzID0gKGFsbG93U3ZnRGF0YVVybHMsIHRhZ05hbWUpID0+IHtcbiAgICAgIGlmIChpc05vbk51bGxhYmxlKGFsbG93U3ZnRGF0YVVybHMpKSB7XG4gICAgICAgIHJldHVybiAhYWxsb3dTdmdEYXRhVXJscztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpc05vbk51bGxhYmxlKHRhZ05hbWUpID8gIWNvbnRhaW5zJDIoc2FmZVN2Z0RhdGFVcmxFbGVtZW50cywgdGFnTmFtZSkgOiB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZGVjb2RlVXJpID0gZW5jb2RlZFVyaSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVuY29kZWRVcmkpO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgcmV0dXJuIHVuZXNjYXBlKGVuY29kZWRVcmkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNJbnZhbGlkVXJpID0gKHNldHRpbmdzLCB1cmksIHRhZ05hbWUpID0+IHtcbiAgICAgIGNvbnN0IGRlY29kZWRVcmkgPSBkZWNvZGVVcmkodXJpKS5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgICAgaWYgKHNldHRpbmdzLmFsbG93X3NjcmlwdF91cmxzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoLygoamF2YXx2YilzY3JpcHR8bWh0bWwpOi9pLnRlc3QoZGVjb2RlZFVyaSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHNldHRpbmdzLmFsbG93X2h0bWxfZGF0YV91cmxzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoL15kYXRhOmltYWdlXFwvL2kudGVzdChkZWNvZGVkVXJpKSkge1xuICAgICAgICByZXR1cm4gYmxvY2tTdmdEYXRhVXJpcyhzZXR0aW5ncy5hbGxvd19zdmdfZGF0YV91cmxzLCB0YWdOYW1lKSAmJiAvXmRhdGE6aW1hZ2VcXC9zdmdcXCt4bWwvaS50ZXN0KGRlY29kZWRVcmkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIC9eZGF0YTovaS50ZXN0KGRlY29kZWRVcmkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY2xhc3MgVVJJIHtcbiAgICAgIHN0YXRpYyBwYXJzZURhdGFVcmkodXJpKSB7XG4gICAgICAgIGxldCB0eXBlO1xuICAgICAgICBjb25zdCB1cmlDb21wb25lbnRzID0gZGVjb2RlVVJJQ29tcG9uZW50KHVyaSkuc3BsaXQoJywnKTtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IC9kYXRhOihbXjtdKykvLmV4ZWModXJpQ29tcG9uZW50c1swXSk7XG4gICAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgICAgdHlwZSA9IG1hdGNoZXNbMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIGRhdGE6IHVyaUNvbXBvbmVudHNbMV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHN0YXRpYyBpc0RvbVNhZmUodXJpLCBjb250ZXh0LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYWxsb3dfc2NyaXB0X3VybHMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBkZWNvZGVkVXJpID0gRW50aXRpZXMuZGVjb2RlKHVyaSkucmVwbGFjZSgvW1xcc1xcdTAwMDAtXFx1MDAxRl0rL2csICcnKTtcbiAgICAgICAgICByZXR1cm4gIWlzSW52YWxpZFVyaShvcHRpb25zLCBkZWNvZGVkVXJpLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RhdGljIGdldERvY3VtZW50QmFzZVVybChsb2MpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBsZXQgYmFzZVVybDtcbiAgICAgICAgaWYgKGxvYy5wcm90b2NvbC5pbmRleE9mKCdodHRwJykgIT09IDAgJiYgbG9jLnByb3RvY29sICE9PSAnZmlsZTonKSB7XG4gICAgICAgICAgYmFzZVVybCA9IChfYSA9IGxvYy5ocmVmKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBiYXNlVXJsID0gbG9jLnByb3RvY29sICsgJy8vJyArIGxvYy5ob3N0ICsgbG9jLnBhdGhuYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmICgvXlteOl0rOlxcL1xcL1xcLz9bXlxcL10rXFwvLy50ZXN0KGJhc2VVcmwpKSB7XG4gICAgICAgICAgYmFzZVVybCA9IGJhc2VVcmwucmVwbGFjZSgvW1xcPyNdLiokLywgJycpLnJlcGxhY2UoL1tcXC9cXFxcXVteXFwvXSskLywgJycpO1xuICAgICAgICAgIGlmICghL1tcXC9cXFxcXSQvLnRlc3QoYmFzZVVybCkpIHtcbiAgICAgICAgICAgIGJhc2VVcmwgKz0gJy8nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmFzZVVybDtcbiAgICAgIH1cbiAgICAgIGNvbnN0cnVjdG9yKHVybCwgc2V0dGluZ3MgPSB7fSkge1xuICAgICAgICB0aGlzLnBhdGggPSAnJztcbiAgICAgICAgdGhpcy5kaXJlY3RvcnkgPSAnJztcbiAgICAgICAgdXJsID0gdHJpbSh1cmwpO1xuICAgICAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgICAgIGNvbnN0IGJhc2VVcmkgPSBzZXR0aW5ncy5iYXNlX3VyaTtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmICgvXihbXFx3XFwtXSspOihbXlxcL117Mn0pL2kudGVzdCh1cmwpIHx8IC9eXFxzKiMvLnRlc3QodXJsKSkge1xuICAgICAgICAgIHNlbGYuc291cmNlID0gdXJsO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc1Byb3RvY29sUmVsYXRpdmUgPSB1cmwuaW5kZXhPZignLy8nKSA9PT0gMDtcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCcvJykgPT09IDAgJiYgIWlzUHJvdG9jb2xSZWxhdGl2ZSkge1xuICAgICAgICAgIHVybCA9IChiYXNlVXJpID8gYmFzZVVyaS5wcm90b2NvbCB8fCAnaHR0cCcgOiAnaHR0cCcpICsgJzovL21jZV9ob3N0JyArIHVybDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIS9eW1xcd1xcLV0qOj9cXC9cXC8vLnRlc3QodXJsKSkge1xuICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSBiYXNlVXJpID8gYmFzZVVyaS5wYXRoIDogbmV3IFVSSShkb2N1bWVudC5sb2NhdGlvbi5ocmVmKS5kaXJlY3Rvcnk7XG4gICAgICAgICAgaWYgKChiYXNlVXJpID09PSBudWxsIHx8IGJhc2VVcmkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJhc2VVcmkucHJvdG9jb2wpID09PSAnJykge1xuICAgICAgICAgICAgdXJsID0gJy8vbWNlX2hvc3QnICsgc2VsZi50b0Fic1BhdGgoYmFzZVVybCwgdXJsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSAvKFteIz9dKikoWyM/XT8uKikvLmV4ZWModXJsKTtcbiAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICB1cmwgPSAoYmFzZVVyaSAmJiBiYXNlVXJpLnByb3RvY29sIHx8ICdodHRwJykgKyAnOi8vbWNlX2hvc3QnICsgc2VsZi50b0Fic1BhdGgoYmFzZVVybCwgbWF0Y2hbMV0pICsgbWF0Y2hbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVybCA9IHVybC5yZXBsYWNlKC9AQC9nLCAnKG1jZV9hdCknKTtcbiAgICAgICAgY29uc3QgdXJsTWF0Y2ggPSAvXig/Oig/IVteOkBdKzpbXjpAXFwvXSpAKShbXjpcXC8/Iy5dKyk6KT8oPzpcXC9cXC8pPygoPzooKFteOkBcXC9dKik6PyhbXjpAXFwvXSopKT9AKT8oXFxbW2EtekEtWjAtOTouJV0rXFxdfFteOlxcLz8jXSopKD86OihcXGQqKSk/KSgoKFxcLyg/OltePyNdKD8hW14/I1xcL10qXFwuW14/I1xcLy5dKyg/Ols/I118JCkpKSpcXC8/KT8oW14/I1xcL10qKSkoPzpcXD8oW14jXSopKT8oPzojKC4qKSk/KS8uZXhlYyh1cmwpO1xuICAgICAgICBpZiAodXJsTWF0Y2gpIHtcbiAgICAgICAgICBlYWNoJDQocXVlcnlQYXJ0cywgKHYsIGkpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXJ0ID0gdXJsTWF0Y2hbaV07XG4gICAgICAgICAgICBpZiAocGFydCkge1xuICAgICAgICAgICAgICBwYXJ0ID0gcGFydC5yZXBsYWNlKC9cXChtY2VfYXRcXCkvZywgJ0BAJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmW3ZdID0gcGFydDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmFzZVVyaSkge1xuICAgICAgICAgIGlmICghc2VsZi5wcm90b2NvbCkge1xuICAgICAgICAgICAgc2VsZi5wcm90b2NvbCA9IGJhc2VVcmkucHJvdG9jb2w7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghc2VsZi51c2VySW5mbykge1xuICAgICAgICAgICAgc2VsZi51c2VySW5mbyA9IGJhc2VVcmkudXNlckluZm87XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghc2VsZi5wb3J0ICYmIHNlbGYuaG9zdCA9PT0gJ21jZV9ob3N0Jykge1xuICAgICAgICAgICAgc2VsZi5wb3J0ID0gYmFzZVVyaS5wb3J0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXNlbGYuaG9zdCB8fCBzZWxmLmhvc3QgPT09ICdtY2VfaG9zdCcpIHtcbiAgICAgICAgICAgIHNlbGYuaG9zdCA9IGJhc2VVcmkuaG9zdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2VsZi5zb3VyY2UgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm90b2NvbFJlbGF0aXZlKSB7XG4gICAgICAgICAgc2VsZi5wcm90b2NvbCA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRQYXRoKHBhdGgpIHtcbiAgICAgICAgY29uc3QgcGF0aE1hdGNoID0gL14oLio/KVxcLz8oXFx3Kyk/JC8uZXhlYyhwYXRoKTtcbiAgICAgICAgaWYgKHBhdGhNYXRjaCkge1xuICAgICAgICAgIHRoaXMucGF0aCA9IHBhdGhNYXRjaFswXTtcbiAgICAgICAgICB0aGlzLmRpcmVjdG9yeSA9IHBhdGhNYXRjaFsxXTtcbiAgICAgICAgICB0aGlzLmZpbGUgPSBwYXRoTWF0Y2hbMl07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zb3VyY2UgPSAnJztcbiAgICAgICAgdGhpcy5nZXRVUkkoKTtcbiAgICAgIH1cbiAgICAgIHRvUmVsYXRpdmUodXJpKSB7XG4gICAgICAgIGlmICh1cmkgPT09ICcuLycpIHtcbiAgICAgICAgICByZXR1cm4gdXJpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlVXJpID0gbmV3IFVSSSh1cmksIHsgYmFzZV91cmk6IHRoaXMgfSk7XG4gICAgICAgIGlmIChyZWxhdGl2ZVVyaS5ob3N0ICE9PSAnbWNlX2hvc3QnICYmIHRoaXMuaG9zdCAhPT0gcmVsYXRpdmVVcmkuaG9zdCAmJiByZWxhdGl2ZVVyaS5ob3N0IHx8IHRoaXMucG9ydCAhPT0gcmVsYXRpdmVVcmkucG9ydCB8fCB0aGlzLnByb3RvY29sICE9PSByZWxhdGl2ZVVyaS5wcm90b2NvbCAmJiByZWxhdGl2ZVVyaS5wcm90b2NvbCAhPT0gJycpIHtcbiAgICAgICAgICByZXR1cm4gcmVsYXRpdmVVcmkuZ2V0VVJJKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHUgPSB0aGlzLmdldFVSSSgpLCB1dSA9IHJlbGF0aXZlVXJpLmdldFVSSSgpO1xuICAgICAgICBpZiAodHUgPT09IHV1IHx8IHR1LmNoYXJBdCh0dS5sZW5ndGggLSAxKSA9PT0gJy8nICYmIHR1LnN1YnN0cigwLCB0dS5sZW5ndGggLSAxKSA9PT0gdXUpIHtcbiAgICAgICAgICByZXR1cm4gdHU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG91dHB1dCA9IHRoaXMudG9SZWxQYXRoKHRoaXMucGF0aCwgcmVsYXRpdmVVcmkucGF0aCk7XG4gICAgICAgIGlmIChyZWxhdGl2ZVVyaS5xdWVyeSkge1xuICAgICAgICAgIG91dHB1dCArPSAnPycgKyByZWxhdGl2ZVVyaS5xdWVyeTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVsYXRpdmVVcmkuYW5jaG9yKSB7XG4gICAgICAgICAgb3V0cHV0ICs9ICcjJyArIHJlbGF0aXZlVXJpLmFuY2hvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgfVxuICAgICAgdG9BYnNvbHV0ZSh1cmksIG5vSG9zdCkge1xuICAgICAgICBjb25zdCBhYnNvbHV0ZVVyaSA9IG5ldyBVUkkodXJpLCB7IGJhc2VfdXJpOiB0aGlzIH0pO1xuICAgICAgICByZXR1cm4gYWJzb2x1dGVVcmkuZ2V0VVJJKG5vSG9zdCAmJiB0aGlzLmlzU2FtZU9yaWdpbihhYnNvbHV0ZVVyaSkpO1xuICAgICAgfVxuICAgICAgaXNTYW1lT3JpZ2luKHVyaSkge1xuICAgICAgICBpZiAodGhpcy5ob3N0ID09IHVyaS5ob3N0ICYmIHRoaXMucHJvdG9jb2wgPT0gdXJpLnByb3RvY29sKSB7XG4gICAgICAgICAgaWYgKHRoaXMucG9ydCA9PSB1cmkucG9ydCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGRlZmF1bHRQb3J0ID0gdGhpcy5wcm90b2NvbCA/IERFRkFVTFRfUE9SVFNbdGhpcy5wcm90b2NvbF0gOiBudWxsO1xuICAgICAgICAgIGlmIChkZWZhdWx0UG9ydCAmJiAodGhpcy5wb3J0IHx8IGRlZmF1bHRQb3J0KSA9PSAodXJpLnBvcnQgfHwgZGVmYXVsdFBvcnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdG9SZWxQYXRoKGJhc2UsIHBhdGgpIHtcbiAgICAgICAgbGV0IGJyZWFrUG9pbnQgPSAwLCBvdXQgPSAnJywgaSwgbDtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEJhc2UgPSBiYXNlLnN1YnN0cmluZygwLCBiYXNlLmxhc3RJbmRleE9mKCcvJykpLnNwbGl0KCcvJyk7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gcGF0aC5zcGxpdCgnLycpO1xuICAgICAgICBpZiAobm9ybWFsaXplZEJhc2UubGVuZ3RoID49IGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBub3JtYWxpemVkQmFzZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpID49IGl0ZW1zLmxlbmd0aCB8fCBub3JtYWxpemVkQmFzZVtpXSAhPT0gaXRlbXNbaV0pIHtcbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGkgKyAxO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRCYXNlLmxlbmd0aCA8IGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpID49IG5vcm1hbGl6ZWRCYXNlLmxlbmd0aCB8fCBub3JtYWxpemVkQmFzZVtpXSAhPT0gaXRlbXNbaV0pIHtcbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGkgKyAxO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJyZWFrUG9pbnQgPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gbm9ybWFsaXplZEJhc2UubGVuZ3RoIC0gKGJyZWFrUG9pbnQgLSAxKTsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIG91dCArPSAnLi4vJztcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSBicmVha1BvaW50IC0gMSwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIGlmIChpICE9PSBicmVha1BvaW50IC0gMSkge1xuICAgICAgICAgICAgb3V0ICs9ICcvJyArIGl0ZW1zW2ldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gaXRlbXNbaV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgICB9XG4gICAgICB0b0Fic1BhdGgoYmFzZSwgcGF0aCkge1xuICAgICAgICBsZXQgbmIgPSAwO1xuICAgICAgICBjb25zdCB0ciA9IC9cXC8kLy50ZXN0KHBhdGgpID8gJy8nIDogJyc7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRCYXNlID0gYmFzZS5zcGxpdCgnLycpO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IHBhdGguc3BsaXQoJy8nKTtcbiAgICAgICAgY29uc3QgYmFzZVBhcnRzID0gW107XG4gICAgICAgIGVhY2gkNChub3JtYWxpemVkQmFzZSwgayA9PiB7XG4gICAgICAgICAgaWYgKGspIHtcbiAgICAgICAgICAgIGJhc2VQYXJ0cy5wdXNoKGspO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gbm9ybWFsaXplZFBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBpZiAobm9ybWFsaXplZFBhdGhbaV0ubGVuZ3RoID09PSAwIHx8IG5vcm1hbGl6ZWRQYXRoW2ldID09PSAnLicpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobm9ybWFsaXplZFBhdGhbaV0gPT09ICcuLicpIHtcbiAgICAgICAgICAgIG5iKys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5iID4gMCkge1xuICAgICAgICAgICAgbmItLTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXRoUGFydHMucHVzaChub3JtYWxpemVkUGF0aFtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaSA9IGJhc2VQYXJ0cy5sZW5ndGggLSBuYjtcbiAgICAgICAgbGV0IG91dFBhdGg7XG4gICAgICAgIGlmIChpIDw9IDApIHtcbiAgICAgICAgICBvdXRQYXRoID0gcmV2ZXJzZShwYXRoUGFydHMpLmpvaW4oJy8nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRQYXRoID0gYmFzZVBhcnRzLnNsaWNlKDAsIGkpLmpvaW4oJy8nKSArICcvJyArIHJldmVyc2UocGF0aFBhcnRzKS5qb2luKCcvJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG91dFBhdGguaW5kZXhPZignLycpICE9PSAwKSB7XG4gICAgICAgICAgb3V0UGF0aCA9ICcvJyArIG91dFBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyICYmIG91dFBhdGgubGFzdEluZGV4T2YoJy8nKSAhPT0gb3V0UGF0aC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgb3V0UGF0aCArPSB0cjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0UGF0aDtcbiAgICAgIH1cbiAgICAgIGdldFVSSShub1Byb3RvSG9zdCA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBzO1xuICAgICAgICBpZiAoIXRoaXMuc291cmNlIHx8IG5vUHJvdG9Ib3N0KSB7XG4gICAgICAgICAgcyA9ICcnO1xuICAgICAgICAgIGlmICghbm9Qcm90b0hvc3QpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb3RvY29sKSB7XG4gICAgICAgICAgICAgIHMgKz0gdGhpcy5wcm90b2NvbCArICc6Ly8nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcyArPSAnLy8nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMudXNlckluZm8pIHtcbiAgICAgICAgICAgICAgcyArPSB0aGlzLnVzZXJJbmZvICsgJ0AnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaG9zdCkge1xuICAgICAgICAgICAgICBzICs9IHRoaXMuaG9zdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgICAgICAgICAgcyArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLnBhdGgpIHtcbiAgICAgICAgICAgIHMgKz0gdGhpcy5wYXRoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5xdWVyeSkge1xuICAgICAgICAgICAgcyArPSAnPycgKyB0aGlzLnF1ZXJ5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5hbmNob3IpIHtcbiAgICAgICAgICAgIHMgKz0gJyMnICsgdGhpcy5hbmNob3I7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc291cmNlID0gcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyZWRVcmxBdHRycyA9IFRvb2xzLm1ha2VNYXAoJ3NyYyxocmVmLGRhdGEsYmFja2dyb3VuZCxhY3Rpb24sZm9ybWFjdGlvbixwb3N0ZXIseGxpbms6aHJlZicpO1xuICAgIGNvbnN0IGludGVybmFsRWxlbWVudEF0dHIgPSAnZGF0YS1tY2UtdHlwZSc7XG4gICAgbGV0IHVpZCA9IDA7XG4gICAgY29uc3QgcHJvY2Vzc05vZGUgPSAobm9kZSwgc2V0dGluZ3MsIHNjaGVtYSwgZXZ0KSA9PiB7XG4gICAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgICBjb25zdCB2YWxpZGF0ZSA9IHNldHRpbmdzLnZhbGlkYXRlO1xuICAgICAgY29uc3Qgc3BlY2lhbEVsZW1lbnRzID0gc2NoZW1hLmdldFNwZWNpYWxFbGVtZW50cygpO1xuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IENPTU1FTlQgJiYgIXNldHRpbmdzLmFsbG93X2NvbmRpdGlvbmFsX2NvbW1lbnRzICYmIC9eXFxbaWYvaS50ZXN0KChfYSA9IG5vZGUubm9kZVZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJykpIHtcbiAgICAgICAgbm9kZS5ub2RlVmFsdWUgPSAnICcgKyBub2RlLm5vZGVWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxjVGFnTmFtZSA9IChfYiA9IGV2dCA9PT0gbnVsbCB8fCBldnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV2dC50YWdOYW1lKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gRUxFTUVOVCB8fCBsY1RhZ05hbWUgPT09ICdib2R5Jykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBlbGVtZW50ID0gU3VnYXJFbGVtZW50LmZyb21Eb20obm9kZSk7XG4gICAgICBjb25zdCBpc0ludGVybmFsRWxlbWVudCA9IGhhcyQxKGVsZW1lbnQsIGludGVybmFsRWxlbWVudEF0dHIpO1xuICAgICAgY29uc3QgYm9ndXMgPSBnZXQkOShlbGVtZW50LCAnZGF0YS1tY2UtYm9ndXMnKTtcbiAgICAgIGlmICghaXNJbnRlcm5hbEVsZW1lbnQgJiYgaXNTdHJpbmcoYm9ndXMpKSB7XG4gICAgICAgIGlmIChib2d1cyA9PT0gJ2FsbCcpIHtcbiAgICAgICAgICByZW1vdmUkNShlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bndyYXAoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcnVsZSA9IHNjaGVtYS5nZXRFbGVtZW50UnVsZShsY1RhZ05hbWUpO1xuICAgICAgaWYgKHZhbGlkYXRlICYmICFydWxlKSB7XG4gICAgICAgIGlmIChoYXMkMihzcGVjaWFsRWxlbWVudHMsIGxjVGFnTmFtZSkpIHtcbiAgICAgICAgICByZW1vdmUkNShlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bndyYXAoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzTm9uTnVsbGFibGUoZXZ0KSkge1xuICAgICAgICAgIGV2dC5hbGxvd2VkVGFnc1tsY1RhZ05hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHZhbGlkYXRlICYmIHJ1bGUgJiYgIWlzSW50ZXJuYWxFbGVtZW50KSB7XG4gICAgICAgIGVhY2gkZSgoX2MgPSBydWxlLmF0dHJpYnV0ZXNGb3JjZWQpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IFtdLCBhdHRyID0+IHtcbiAgICAgICAgICBzZXQkMyhlbGVtZW50LCBhdHRyLm5hbWUsIGF0dHIudmFsdWUgPT09ICd7JHVpZH0nID8gYG1jZV8keyB1aWQrKyB9YCA6IGF0dHIudmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaCRlKChfZCA9IHJ1bGUuYXR0cmlidXRlc0RlZmF1bHQpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IFtdLCBhdHRyID0+IHtcbiAgICAgICAgICBpZiAoIWhhcyQxKGVsZW1lbnQsIGF0dHIubmFtZSkpIHtcbiAgICAgICAgICAgIHNldCQzKGVsZW1lbnQsIGF0dHIubmFtZSwgYXR0ci52YWx1ZSA9PT0gJ3skdWlkfScgPyBgbWNlXyR7IHVpZCsrIH1gIDogYXR0ci52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHJ1bGUuYXR0cmlidXRlc1JlcXVpcmVkICYmICFleGlzdHMocnVsZS5hdHRyaWJ1dGVzUmVxdWlyZWQsIGF0dHIgPT4gaGFzJDEoZWxlbWVudCwgYXR0cikpKSB7XG4gICAgICAgICAgdW53cmFwKGVsZW1lbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocnVsZS5yZW1vdmVFbXB0eUF0dHJzICYmIGhhc05vbmUoZWxlbWVudCkpIHtcbiAgICAgICAgICB1bndyYXAoZWxlbWVudCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChydWxlLm91dHB1dE5hbWUgJiYgcnVsZS5vdXRwdXROYW1lICE9PSBsY1RhZ05hbWUpIHtcbiAgICAgICAgICBtdXRhdGUoZWxlbWVudCwgcnVsZS5vdXRwdXROYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2hvdWxkS2VlcEF0dHJpYnV0ZSA9IChzZXR0aW5ncywgc2NoZW1hLCB0YWdOYW1lLCBhdHRyTmFtZSwgYXR0clZhbHVlKSA9PiAhKGF0dHJOYW1lIGluIGZpbHRlcmVkVXJsQXR0cnMgJiYgaXNJbnZhbGlkVXJpKHNldHRpbmdzLCBhdHRyVmFsdWUsIHRhZ05hbWUpKSAmJiAoIXNldHRpbmdzLnZhbGlkYXRlIHx8IHNjaGVtYS5pc1ZhbGlkKHRhZ05hbWUsIGF0dHJOYW1lKSB8fCBzdGFydHNXaXRoKGF0dHJOYW1lLCAnZGF0YS0nKSB8fCBzdGFydHNXaXRoKGF0dHJOYW1lLCAnYXJpYS0nKSk7XG4gICAgY29uc3QgaXNSZXF1aXJlZEF0dHJpYnV0ZU9mSW50ZXJuYWxFbGVtZW50ID0gKGVsZSwgYXR0ck5hbWUpID0+IGVsZS5oYXNBdHRyaWJ1dGUoaW50ZXJuYWxFbGVtZW50QXR0cikgJiYgKGF0dHJOYW1lID09PSAnaWQnIHx8IGF0dHJOYW1lID09PSAnY2xhc3MnIHx8IGF0dHJOYW1lID09PSAnc3R5bGUnKTtcbiAgICBjb25zdCBpc0Jvb2xlYW5BdHRyaWJ1dGUgPSAoYXR0ck5hbWUsIHNjaGVtYSkgPT4gYXR0ck5hbWUgaW4gc2NoZW1hLmdldEJvb2xBdHRycygpO1xuICAgIGNvbnN0IGZpbHRlckF0dHJpYnV0ZXMgPSAoZWxlLCBzZXR0aW5ncywgc2NoZW1hKSA9PiB7XG4gICAgICBjb25zdCB7YXR0cmlidXRlc30gPSBlbGU7XG4gICAgICBmb3IgKGxldCBpID0gYXR0cmlidXRlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBhdHRyID0gYXR0cmlidXRlc1tpXTtcbiAgICAgICAgY29uc3QgYXR0ck5hbWUgPSBhdHRyLm5hbWU7XG4gICAgICAgIGNvbnN0IGF0dHJWYWx1ZSA9IGF0dHIudmFsdWU7XG4gICAgICAgIGlmICghc2hvdWxkS2VlcEF0dHJpYnV0ZShzZXR0aW5ncywgc2NoZW1hLCBlbGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpLCBhdHRyTmFtZSwgYXR0clZhbHVlKSAmJiAhaXNSZXF1aXJlZEF0dHJpYnV0ZU9mSW50ZXJuYWxFbGVtZW50KGVsZSwgYXR0ck5hbWUpKSB7XG4gICAgICAgICAgZWxlLnJlbW92ZUF0dHJpYnV0ZShhdHRyTmFtZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuQXR0cmlidXRlKGF0dHJOYW1lLCBzY2hlbWEpKSB7XG4gICAgICAgICAgZWxlLnNldEF0dHJpYnV0ZShhdHRyTmFtZSwgYXR0ck5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cFB1cmlmeSA9IChzZXR0aW5ncywgc2NoZW1hKSA9PiB7XG4gICAgICBjb25zdCBwdXJpZnkkMSA9IHB1cmlmeSgpO1xuICAgICAgcHVyaWZ5JDEuYWRkSG9vaygndXBvblNhbml0aXplRWxlbWVudCcsIChlbGUsIGV2dCkgPT4ge1xuICAgICAgICBwcm9jZXNzTm9kZShlbGUsIHNldHRpbmdzLCBzY2hlbWEsIGV2dCk7XG4gICAgICB9KTtcbiAgICAgIHB1cmlmeSQxLmFkZEhvb2soJ3Vwb25TYW5pdGl6ZUF0dHJpYnV0ZScsIChlbGUsIGV2dCkgPT4ge1xuICAgICAgICBjb25zdCB0YWdOYW1lID0gZWxlLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3Qge2F0dHJOYW1lLCBhdHRyVmFsdWV9ID0gZXZ0O1xuICAgICAgICBldnQua2VlcEF0dHIgPSBzaG91bGRLZWVwQXR0cmlidXRlKHNldHRpbmdzLCBzY2hlbWEsIHRhZ05hbWUsIGF0dHJOYW1lLCBhdHRyVmFsdWUpO1xuICAgICAgICBpZiAoZXZ0LmtlZXBBdHRyKSB7XG4gICAgICAgICAgZXZ0LmFsbG93ZWRBdHRyaWJ1dGVzW2F0dHJOYW1lXSA9IHRydWU7XG4gICAgICAgICAgaWYgKGlzQm9vbGVhbkF0dHJpYnV0ZShhdHRyTmFtZSwgc2NoZW1hKSkge1xuICAgICAgICAgICAgZXZ0LmF0dHJWYWx1ZSA9IGF0dHJOYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2V0dGluZ3MuYWxsb3dfc3ZnX2RhdGFfdXJscyAmJiBzdGFydHNXaXRoKGF0dHJWYWx1ZSwgJ2RhdGE6aW1hZ2Uvc3ZnK3htbCcpKSB7XG4gICAgICAgICAgICBldnQuZm9yY2VLZWVwQXR0ciA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzUmVxdWlyZWRBdHRyaWJ1dGVPZkludGVybmFsRWxlbWVudChlbGUsIGF0dHJOYW1lKSkge1xuICAgICAgICAgIGV2dC5mb3JjZUtlZXBBdHRyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcHVyaWZ5JDE7XG4gICAgfTtcbiAgICBjb25zdCBnZXRQdXJpZnlDb25maWcgPSAoc2V0dGluZ3MsIG1pbWVUeXBlKSA9PiB7XG4gICAgICBjb25zdCBiYXNlUHVyaWZ5Q29uZmlnID0ge1xuICAgICAgICBJTl9QTEFDRTogdHJ1ZSxcbiAgICAgICAgQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFM6IHRydWUsXG4gICAgICAgIEFMTE9XRURfVEFHUzogW1xuICAgICAgICAgICcjY29tbWVudCcsXG4gICAgICAgICAgJyNjZGF0YS1zZWN0aW9uJyxcbiAgICAgICAgICAnYm9keSdcbiAgICAgICAgXSxcbiAgICAgICAgQUxMT1dFRF9BVFRSOiBbXVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHsgLi4uYmFzZVB1cmlmeUNvbmZpZyB9O1xuICAgICAgY29uZmlnLlBBUlNFUl9NRURJQV9UWVBFID0gbWltZVR5cGU7XG4gICAgICBpZiAoc2V0dGluZ3MuYWxsb3dfc2NyaXB0X3VybHMpIHtcbiAgICAgICAgY29uZmlnLkFMTE9XRURfVVJJX1JFR0VYUCA9IC8uKi87XG4gICAgICB9IGVsc2UgaWYgKHNldHRpbmdzLmFsbG93X2h0bWxfZGF0YV91cmxzKSB7XG4gICAgICAgIGNvbmZpZy5BTExPV0VEX1VSSV9SRUdFWFAgPSAvXig/IShcXHcrc2NyaXB0fG1odG1sKTopL2k7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH07XG4gICAgY29uc3QgZ2V0U2FuaXRpemVyID0gKHNldHRpbmdzLCBzY2hlbWEpID0+IHtcbiAgICAgIGlmIChzZXR0aW5ncy5zYW5pdGl6ZSkge1xuICAgICAgICBjb25zdCBwdXJpZnkgPSBzZXR1cFB1cmlmeShzZXR0aW5ncywgc2NoZW1hKTtcbiAgICAgICAgcmV0dXJuIChib2R5LCBtaW1lVHlwZSkgPT4ge1xuICAgICAgICAgIHB1cmlmeS5zYW5pdGl6ZShib2R5LCBnZXRQdXJpZnlDb25maWcoc2V0dGluZ3MsIG1pbWVUeXBlKSk7XG4gICAgICAgICAgcHVyaWZ5LnJlbW92ZWQgPSBbXTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoYm9keSwgXykgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vZGVJdGVyYXRvciA9IGRvY3VtZW50LmNyZWF0ZU5vZGVJdGVyYXRvcihib2R5LCBOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCB8IE5vZGVGaWx0ZXIuU0hPV19DT01NRU5UIHwgTm9kZUZpbHRlci5TSE9XX1RFWFQpO1xuICAgICAgICAgIGxldCBub2RlO1xuICAgICAgICAgIHdoaWxlIChub2RlID0gbm9kZUl0ZXJhdG9yLm5leHROb2RlKCkpIHtcbiAgICAgICAgICAgIHByb2Nlc3NOb2RlKG5vZGUsIHNldHRpbmdzLCBzY2hlbWEpO1xuICAgICAgICAgICAgaWYgKGlzRWxlbWVudCQ2KG5vZGUpKSB7XG4gICAgICAgICAgICAgIGZpbHRlckF0dHJpYnV0ZXMobm9kZSwgc2V0dGluZ3MsIHNjaGVtYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBtYWtlTWFwID0gVG9vbHMubWFrZU1hcCwgZXh0ZW5kJDEgPSBUb29scy5leHRlbmQ7XG4gICAgY29uc3QgdHJhbnNmZXJDaGlsZHJlbiA9IChwYXJlbnQsIG5hdGl2ZVBhcmVudCwgc3BlY2lhbEVsZW1lbnRzKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnROYW1lID0gcGFyZW50Lm5hbWU7XG4gICAgICBjb25zdCBpc1NwZWNpYWwgPSBwYXJlbnROYW1lIGluIHNwZWNpYWxFbGVtZW50cyAmJiBwYXJlbnROYW1lICE9PSAndGl0bGUnICYmIHBhcmVudE5hbWUgIT09ICd0ZXh0YXJlYSc7XG4gICAgICBjb25zdCBjaGlsZE5vZGVzID0gbmF0aXZlUGFyZW50LmNoaWxkTm9kZXM7XG4gICAgICBmb3IgKGxldCBuaSA9IDAsIG5sID0gY2hpbGROb2Rlcy5sZW5ndGg7IG5pIDwgbmw7IG5pKyspIHtcbiAgICAgICAgY29uc3QgbmF0aXZlQ2hpbGQgPSBjaGlsZE5vZGVzW25pXTtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBuZXcgQXN0Tm9kZShuYXRpdmVDaGlsZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBuYXRpdmVDaGlsZC5ub2RlVHlwZSk7XG4gICAgICAgIGlmIChpc0VsZW1lbnQkNihuYXRpdmVDaGlsZCkpIHtcbiAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gbmF0aXZlQ2hpbGQuYXR0cmlidXRlcztcbiAgICAgICAgICBmb3IgKGxldCBhaSA9IDAsIGFsID0gYXR0cmlidXRlcy5sZW5ndGg7IGFpIDwgYWw7IGFpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dHIgPSBhdHRyaWJ1dGVzW2FpXTtcbiAgICAgICAgICAgIGNoaWxkLmF0dHIoYXR0ci5uYW1lLCBhdHRyLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaXNUZXh0JGEobmF0aXZlQ2hpbGQpKSB7XG4gICAgICAgICAgY2hpbGQudmFsdWUgPSBuYXRpdmVDaGlsZC5kYXRhO1xuICAgICAgICAgIGlmIChpc1NwZWNpYWwpIHtcbiAgICAgICAgICAgIGNoaWxkLnJhdyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzQ29tbWVudChuYXRpdmVDaGlsZCkgfHwgaXNDRGF0YShuYXRpdmVDaGlsZCkgfHwgaXNQaShuYXRpdmVDaGlsZCkpIHtcbiAgICAgICAgICBjaGlsZC52YWx1ZSA9IG5hdGl2ZUNoaWxkLmRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgdHJhbnNmZXJDaGlsZHJlbihjaGlsZCwgbmF0aXZlQ2hpbGQsIHNwZWNpYWxFbGVtZW50cyk7XG4gICAgICAgIHBhcmVudC5hcHBlbmQoY2hpbGQpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgd2Fsa1RyZWUgPSAocm9vdCwgcHJlcHJvY2Vzc29ycywgcG9zdHByb2Nlc3NvcnMpID0+IHtcbiAgICAgIGNvbnN0IHRyYXZlcnNlT3JkZXIgPSBbXTtcbiAgICAgIGZvciAobGV0IG5vZGUgPSByb290LCBsYXN0Tm9kZSA9IG5vZGU7IG5vZGU7IGxhc3ROb2RlID0gbm9kZSwgbm9kZSA9IG5vZGUud2FsaygpKSB7XG4gICAgICAgIGNvbnN0IHRlbXBOb2RlID0gbm9kZTtcbiAgICAgICAgZWFjaCRlKHByZXByb2Nlc3NvcnMsIHByZXByb2Nlc3MgPT4gcHJlcHJvY2Vzcyh0ZW1wTm9kZSkpO1xuICAgICAgICBpZiAoaXNOdWxsYWJsZSh0ZW1wTm9kZS5wYXJlbnQpICYmIHRlbXBOb2RlICE9PSByb290KSB7XG4gICAgICAgICAgbm9kZSA9IGxhc3ROb2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyYXZlcnNlT3JkZXIucHVzaCh0ZW1wTm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSB0cmF2ZXJzZU9yZGVyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0cmF2ZXJzZU9yZGVyW2ldO1xuICAgICAgICBlYWNoJGUocG9zdHByb2Nlc3NvcnMsIHBvc3Rwcm9jZXNzID0+IHBvc3Rwcm9jZXNzKG5vZGUpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHdoaXRlc3BhY2VDbGVhbmVyID0gKHJvb3QsIHNjaGVtYSwgc2V0dGluZ3MsIGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlID0gc2V0dGluZ3MudmFsaWRhdGU7XG4gICAgICBjb25zdCBub25FbXB0eUVsZW1lbnRzID0gc2NoZW1hLmdldE5vbkVtcHR5RWxlbWVudHMoKTtcbiAgICAgIGNvbnN0IHdoaXRlc3BhY2VFbGVtZW50cyA9IHNjaGVtYS5nZXRXaGl0ZXNwYWNlRWxlbWVudHMoKTtcbiAgICAgIGNvbnN0IGJsb2NrRWxlbWVudHMgPSBleHRlbmQkMShtYWtlTWFwKCdzY3JpcHQsc3R5bGUsaGVhZCxodG1sLGJvZHksdGl0bGUsbWV0YSxwYXJhbScpLCBzY2hlbWEuZ2V0QmxvY2tFbGVtZW50cygpKTtcbiAgICAgIGNvbnN0IHRleHRSb290QmxvY2tFbGVtZW50cyA9IGdldFRleHRSb290QmxvY2tFbGVtZW50cyhzY2hlbWEpO1xuICAgICAgY29uc3QgYWxsV2hpdGVTcGFjZVJlZ0V4cCA9IC9bIFxcdFxcclxcbl0rL2c7XG4gICAgICBjb25zdCBzdGFydFdoaXRlU3BhY2VSZWdFeHAgPSAvXlsgXFx0XFxyXFxuXSsvO1xuICAgICAgY29uc3QgZW5kV2hpdGVTcGFjZVJlZ0V4cCA9IC9bIFxcdFxcclxcbl0rJC87XG4gICAgICBjb25zdCBoYXNXaGl0ZXNwYWNlUGFyZW50ID0gbm9kZSA9PiB7XG4gICAgICAgIGxldCB0ZW1wTm9kZSA9IG5vZGUucGFyZW50O1xuICAgICAgICB3aGlsZSAoaXNOb25OdWxsYWJsZSh0ZW1wTm9kZSkpIHtcbiAgICAgICAgICBpZiAodGVtcE5vZGUubmFtZSBpbiB3aGl0ZXNwYWNlRWxlbWVudHMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZW1wTm9kZSA9IHRlbXBOb2RlLnBhcmVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzVGV4dFJvb3RCbG9ja0VtcHR5ID0gbm9kZSA9PiB7XG4gICAgICAgIGxldCB0ZW1wTm9kZSA9IG5vZGU7XG4gICAgICAgIHdoaWxlIChpc05vbk51bGxhYmxlKHRlbXBOb2RlKSkge1xuICAgICAgICAgIGlmICh0ZW1wTm9kZS5uYW1lIGluIHRleHRSb290QmxvY2tFbGVtZW50cykge1xuICAgICAgICAgICAgcmV0dXJuIGlzRW1wdHkoc2NoZW1hLCBub25FbXB0eUVsZW1lbnRzLCB3aGl0ZXNwYWNlRWxlbWVudHMsIHRlbXBOb2RlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGVtcE5vZGUgPSB0ZW1wTm9kZS5wYXJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0Jsb2NrID0gbm9kZSA9PiBub2RlLm5hbWUgaW4gYmxvY2tFbGVtZW50cyB8fCBpc1RyYW5zcGFyZW50QXN0QmxvY2soc2NoZW1hLCBub2RlKTtcbiAgICAgIGNvbnN0IGlzQXRFZGdlT2ZCbG9jayA9IChub2RlLCBzdGFydCkgPT4ge1xuICAgICAgICBjb25zdCBuZWlnaGJvdXIgPSBzdGFydCA/IG5vZGUucHJldiA6IG5vZGUubmV4dDtcbiAgICAgICAgaWYgKGlzTm9uTnVsbGFibGUobmVpZ2hib3VyKSB8fCBpc051bGxhYmxlKG5vZGUucGFyZW50KSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNCbG9jayhub2RlLnBhcmVudCkgJiYgKG5vZGUucGFyZW50ICE9PSByb290IHx8IGFyZ3MuaXNSb290Q29udGVudCA9PT0gdHJ1ZSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcHJlcHJvY2VzcyA9IG5vZGUgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChub2RlLnR5cGUgPT09IDMpIHtcbiAgICAgICAgICBpZiAoIWhhc1doaXRlc3BhY2VQYXJlbnQobm9kZSkpIHtcbiAgICAgICAgICAgIGxldCB0ZXh0ID0gKF9hID0gbm9kZS52YWx1ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKGFsbFdoaXRlU3BhY2VSZWdFeHAsICcgJyk7XG4gICAgICAgICAgICBpZiAoaXNMaW5lQnJlYWtOb2RlKG5vZGUucHJldiwgaXNCbG9jaykgfHwgaXNBdEVkZ2VPZkJsb2NrKG5vZGUsIHRydWUpKSB7XG4gICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2Uoc3RhcnRXaGl0ZVNwYWNlUmVnRXhwLCAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5vZGUudmFsdWUgPSB0ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBvc3Rwcm9jZXNzID0gbm9kZSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gMSkge1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnRSdWxlID0gc2NoZW1hLmdldEVsZW1lbnRSdWxlKG5vZGUubmFtZSk7XG4gICAgICAgICAgaWYgKHZhbGlkYXRlICYmIGVsZW1lbnRSdWxlKSB7XG4gICAgICAgICAgICBjb25zdCBpc05vZGVFbXB0eSA9IGlzRW1wdHkoc2NoZW1hLCBub25FbXB0eUVsZW1lbnRzLCB3aGl0ZXNwYWNlRWxlbWVudHMsIG5vZGUpO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnRSdWxlLnBhZGRJbkVtcHR5QmxvY2sgJiYgaXNOb2RlRW1wdHkgJiYgaXNUZXh0Um9vdEJsb2NrRW1wdHkobm9kZSkpIHtcbiAgICAgICAgICAgICAgcGFkZEVtcHR5Tm9kZShzZXR0aW5ncywgYXJncywgaXNCbG9jaywgbm9kZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnRSdWxlLnJlbW92ZUVtcHR5ICYmIGlzTm9kZUVtcHR5KSB7XG4gICAgICAgICAgICAgIGlmIChpc0Jsb2NrKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlLnVud3JhcCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnRSdWxlLnBhZGRFbXB0eSAmJiAoaXNOb2RlRW1wdHkgfHwgaXNQYWRkZWRXaXRoTmJzcChub2RlKSkpIHtcbiAgICAgICAgICAgICAgcGFkZEVtcHR5Tm9kZShzZXR0aW5ncywgYXJncywgaXNCbG9jaywgbm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gMykge1xuICAgICAgICAgIGlmICghaGFzV2hpdGVzcGFjZVBhcmVudChub2RlKSkge1xuICAgICAgICAgICAgbGV0IHRleHQgPSAoX2EgPSBub2RlLnZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgICAgICAgIGlmIChub2RlLm5leHQgJiYgaXNCbG9jayhub2RlLm5leHQpIHx8IGlzQXRFZGdlT2ZCbG9jayhub2RlLCBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZShlbmRXaGl0ZVNwYWNlUmVnRXhwLCAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5vZGUudmFsdWUgPSB0ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHByZXByb2Nlc3MsXG4gICAgICAgIHBvc3Rwcm9jZXNzXG4gICAgICBdO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Um9vdEJsb2NrTmFtZSA9IChzZXR0aW5ncywgYXJncykgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgbmFtZSA9IChfYSA9IGFyZ3MuZm9yY2VkX3Jvb3RfYmxvY2spICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHNldHRpbmdzLmZvcmNlZF9yb290X2Jsb2NrO1xuICAgICAgaWYgKG5hbWUgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gJ3AnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBEb21QYXJzZXIgPSAoc2V0dGluZ3MgPSB7fSwgc2NoZW1hID0gU2NoZW1hKCkpID0+IHtcbiAgICAgIGNvbnN0IG5vZGVGaWx0ZXJSZWdpc3RyeSA9IGNyZWF0ZSQ4KCk7XG4gICAgICBjb25zdCBhdHRyaWJ1dGVGaWx0ZXJSZWdpc3RyeSA9IGNyZWF0ZSQ4KCk7XG4gICAgICBjb25zdCBkZWZhdWx0ZWRTZXR0aW5ncyA9IHtcbiAgICAgICAgdmFsaWRhdGU6IHRydWUsXG4gICAgICAgIHJvb3RfbmFtZTogJ2JvZHknLFxuICAgICAgICBzYW5pdGl6ZTogdHJ1ZSxcbiAgICAgICAgLi4uc2V0dGluZ3NcbiAgICAgIH07XG4gICAgICBjb25zdCBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICBjb25zdCBzYW5pdGl6ZSA9IGdldFNhbml0aXplcihkZWZhdWx0ZWRTZXR0aW5ncywgc2NoZW1hKTtcbiAgICAgIGNvbnN0IHBhcnNlQW5kU2FuaXRpemVXaXRoQ29udGV4dCA9IChodG1sLCByb290TmFtZSwgZm9ybWF0ID0gJ2h0bWwnKSA9PiB7XG4gICAgICAgIGNvbnN0IG1pbWVUeXBlID0gZm9ybWF0ID09PSAneGh0bWwnID8gJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcgOiAndGV4dC9odG1sJztcbiAgICAgICAgY29uc3QgaXNTcGVjaWFsUm9vdCA9IGhhcyQyKHNjaGVtYS5nZXRTcGVjaWFsRWxlbWVudHMoKSwgcm9vdE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBpc1NwZWNpYWxSb290ID8gYDwkeyByb290TmFtZSB9PiR7IGh0bWwgfTwvJHsgcm9vdE5hbWUgfT5gIDogaHRtbDtcbiAgICAgICAgY29uc3Qgd3JhcHBlZEh0bWwgPSBmb3JtYXQgPT09ICd4aHRtbCcgPyBgPGh0bWwgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI+PGhlYWQ+PC9oZWFkPjxib2R5PiR7IGNvbnRlbnQgfTwvYm9keT48L2h0bWw+YCA6IGA8Ym9keT4keyBjb250ZW50IH08L2JvZHk+YDtcbiAgICAgICAgY29uc3QgYm9keSA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcod3JhcHBlZEh0bWwsIG1pbWVUeXBlKS5ib2R5O1xuICAgICAgICBzYW5pdGl6ZShib2R5LCBtaW1lVHlwZSk7XG4gICAgICAgIHJldHVybiBpc1NwZWNpYWxSb290ID8gYm9keS5maXJzdENoaWxkIDogYm9keTtcbiAgICAgIH07XG4gICAgICBjb25zdCBhZGROb2RlRmlsdGVyID0gbm9kZUZpbHRlclJlZ2lzdHJ5LmFkZEZpbHRlcjtcbiAgICAgIGNvbnN0IGdldE5vZGVGaWx0ZXJzID0gbm9kZUZpbHRlclJlZ2lzdHJ5LmdldEZpbHRlcnM7XG4gICAgICBjb25zdCByZW1vdmVOb2RlRmlsdGVyID0gbm9kZUZpbHRlclJlZ2lzdHJ5LnJlbW92ZUZpbHRlcjtcbiAgICAgIGNvbnN0IGFkZEF0dHJpYnV0ZUZpbHRlciA9IGF0dHJpYnV0ZUZpbHRlclJlZ2lzdHJ5LmFkZEZpbHRlcjtcbiAgICAgIGNvbnN0IGdldEF0dHJpYnV0ZUZpbHRlcnMgPSBhdHRyaWJ1dGVGaWx0ZXJSZWdpc3RyeS5nZXRGaWx0ZXJzO1xuICAgICAgY29uc3QgcmVtb3ZlQXR0cmlidXRlRmlsdGVyID0gYXR0cmlidXRlRmlsdGVyUmVnaXN0cnkucmVtb3ZlRmlsdGVyO1xuICAgICAgY29uc3QgZmluZEludmFsaWRDaGlsZHJlbiA9IChub2RlLCBpbnZhbGlkQ2hpbGRyZW4pID0+IHtcbiAgICAgICAgaWYgKGlzSW52YWxpZChzY2hlbWEsIG5vZGUpKSB7XG4gICAgICAgICAgaW52YWxpZENoaWxkcmVuLnB1c2gobm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBpc1dyYXBwYWJsZU5vZGUgPSAoYmxvY2tFbGVtZW50cywgbm9kZSkgPT4ge1xuICAgICAgICBjb25zdCBpc0ludGVybmFsRWxlbWVudCA9IGlzU3RyaW5nKG5vZGUuYXR0cihpbnRlcm5hbEVsZW1lbnRBdHRyKSk7XG4gICAgICAgIGNvbnN0IGlzSW5saW5lRWxlbWVudCA9IG5vZGUudHlwZSA9PT0gMSAmJiAoIWhhcyQyKGJsb2NrRWxlbWVudHMsIG5vZGUubmFtZSkgJiYgIWlzVHJhbnNwYXJlbnRBc3RCbG9jayhzY2hlbWEsIG5vZGUpKTtcbiAgICAgICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gMyB8fCBpc0lubGluZUVsZW1lbnQgJiYgIWlzSW50ZXJuYWxFbGVtZW50O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkZFJvb3RCbG9ja3MgPSAocm9vdE5vZGUsIHJvb3RCbG9ja05hbWUpID0+IHtcbiAgICAgICAgY29uc3QgYmxvY2tFbGVtZW50cyA9IGV4dGVuZCQxKG1ha2VNYXAoJ3NjcmlwdCxzdHlsZSxoZWFkLGh0bWwsYm9keSx0aXRsZSxtZXRhLHBhcmFtJyksIHNjaGVtYS5nZXRCbG9ja0VsZW1lbnRzKCkpO1xuICAgICAgICBjb25zdCBzdGFydFdoaXRlU3BhY2VSZWdFeHAgPSAvXlsgXFx0XFxyXFxuXSsvO1xuICAgICAgICBjb25zdCBlbmRXaGl0ZVNwYWNlUmVnRXhwID0gL1sgXFx0XFxyXFxuXSskLztcbiAgICAgICAgbGV0IG5vZGUgPSByb290Tm9kZS5maXJzdENoaWxkLCByb290QmxvY2tOb2RlID0gbnVsbDtcbiAgICAgICAgY29uc3QgdHJpbSA9IHJvb3RCbG9jayA9PiB7XG4gICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICBpZiAocm9vdEJsb2NrKSB7XG4gICAgICAgICAgICBub2RlID0gcm9vdEJsb2NrLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICBpZiAobm9kZSAmJiBub2RlLnR5cGUgPT09IDMpIHtcbiAgICAgICAgICAgICAgbm9kZS52YWx1ZSA9IChfYSA9IG5vZGUudmFsdWUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZXBsYWNlKHN0YXJ0V2hpdGVTcGFjZVJlZ0V4cCwgJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9kZSA9IHJvb3RCbG9jay5sYXN0Q2hpbGQ7XG4gICAgICAgICAgICBpZiAobm9kZSAmJiBub2RlLnR5cGUgPT09IDMpIHtcbiAgICAgICAgICAgICAgbm9kZS52YWx1ZSA9IChfYiA9IG5vZGUudmFsdWUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5yZXBsYWNlKGVuZFdoaXRlU3BhY2VSZWdFeHAsICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmICghc2NoZW1hLmlzVmFsaWRDaGlsZChyb290Tm9kZS5uYW1lLCByb290QmxvY2tOYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IG5vZGUubmV4dDtcbiAgICAgICAgICBpZiAoaXNXcmFwcGFibGVOb2RlKGJsb2NrRWxlbWVudHMsIG5vZGUpKSB7XG4gICAgICAgICAgICBpZiAoIXJvb3RCbG9ja05vZGUpIHtcbiAgICAgICAgICAgICAgcm9vdEJsb2NrTm9kZSA9IG5ldyBBc3ROb2RlKHJvb3RCbG9ja05hbWUsIDEpO1xuICAgICAgICAgICAgICByb290QmxvY2tOb2RlLmF0dHIoZGVmYXVsdGVkU2V0dGluZ3MuZm9yY2VkX3Jvb3RfYmxvY2tfYXR0cnMpO1xuICAgICAgICAgICAgICByb290Tm9kZS5pbnNlcnQocm9vdEJsb2NrTm9kZSwgbm9kZSk7XG4gICAgICAgICAgICAgIHJvb3RCbG9ja05vZGUuYXBwZW5kKG5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm9vdEJsb2NrTm9kZS5hcHBlbmQobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyaW0ocm9vdEJsb2NrTm9kZSk7XG4gICAgICAgICAgICByb290QmxvY2tOb2RlID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgbm9kZSA9IG5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgdHJpbShyb290QmxvY2tOb2RlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBwYXJzZSA9IChodG1sLCBhcmdzID0ge30pID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCB2YWxpZGF0ZSA9IGRlZmF1bHRlZFNldHRpbmdzLnZhbGlkYXRlO1xuICAgICAgICBjb25zdCByb290TmFtZSA9IChfYSA9IGFyZ3MuY29udGV4dCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZGVmYXVsdGVkU2V0dGluZ3Mucm9vdF9uYW1lO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gcGFyc2VBbmRTYW5pdGl6ZVdpdGhDb250ZXh0KGh0bWwsIHJvb3ROYW1lLCBhcmdzLmZvcm1hdCk7XG4gICAgICAgIHVwZGF0ZUNoaWxkcmVuKHNjaGVtYSwgZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHJvb3ROb2RlID0gbmV3IEFzdE5vZGUocm9vdE5hbWUsIDExKTtcbiAgICAgICAgdHJhbnNmZXJDaGlsZHJlbihyb290Tm9kZSwgZWxlbWVudCwgc2NoZW1hLmdldFNwZWNpYWxFbGVtZW50cygpKTtcbiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgY29uc3QgW3doaXRlc3BhY2VQcmUsIHdoaXRlc3BhY2VQb3N0XSA9IHdoaXRlc3BhY2VDbGVhbmVyKHJvb3ROb2RlLCBzY2hlbWEsIGRlZmF1bHRlZFNldHRpbmdzLCBhcmdzKTtcbiAgICAgICAgY29uc3QgaW52YWxpZENoaWxkcmVuID0gW107XG4gICAgICAgIGNvbnN0IGludmFsaWRGaW5kZXIgPSB2YWxpZGF0ZSA/IG5vZGUgPT4gZmluZEludmFsaWRDaGlsZHJlbihub2RlLCBpbnZhbGlkQ2hpbGRyZW4pIDogbm9vcDtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHtcbiAgICAgICAgICBub2Rlczoge30sXG4gICAgICAgICAgYXR0cmlidXRlczoge31cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbWF0Y2hGaW5kZXIgPSBub2RlID0+IG1hdGNoTm9kZSQxKGdldE5vZGVGaWx0ZXJzKCksIGdldEF0dHJpYnV0ZUZpbHRlcnMoKSwgbm9kZSwgbWF0Y2hlcyk7XG4gICAgICAgIHdhbGtUcmVlKHJvb3ROb2RlLCBbXG4gICAgICAgICAgd2hpdGVzcGFjZVByZSxcbiAgICAgICAgICBtYXRjaEZpbmRlclxuICAgICAgICBdLCBbXG4gICAgICAgICAgd2hpdGVzcGFjZVBvc3QsXG4gICAgICAgICAgaW52YWxpZEZpbmRlclxuICAgICAgICBdKTtcbiAgICAgICAgaW52YWxpZENoaWxkcmVuLnJldmVyc2UoKTtcbiAgICAgICAgaWYgKHZhbGlkYXRlICYmIGludmFsaWRDaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKGFyZ3MuY29udGV4dCkge1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBwYXNzOiB0b3BMZXZlbENoaWxkcmVuLFxuICAgICAgICAgICAgICBmYWlsOiBvdGhlckNoaWxkcmVuXG4gICAgICAgICAgICB9ID0gcGFydGl0aW9uJDIoaW52YWxpZENoaWxkcmVuLCBjaGlsZCA9PiBjaGlsZC5wYXJlbnQgPT09IHJvb3ROb2RlKTtcbiAgICAgICAgICAgIGNsZWFuSW52YWxpZE5vZGVzKG90aGVyQ2hpbGRyZW4sIHNjaGVtYSwgcm9vdE5vZGUsIG1hdGNoRmluZGVyKTtcbiAgICAgICAgICAgIGFyZ3MuaW52YWxpZCA9IHRvcExldmVsQ2hpbGRyZW4ubGVuZ3RoID4gMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xlYW5JbnZhbGlkTm9kZXMoaW52YWxpZENoaWxkcmVuLCBzY2hlbWEsIHJvb3ROb2RlLCBtYXRjaEZpbmRlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvb3RCbG9ja05hbWUgPSBnZXRSb290QmxvY2tOYW1lKGRlZmF1bHRlZFNldHRpbmdzLCBhcmdzKTtcbiAgICAgICAgaWYgKHJvb3RCbG9ja05hbWUgJiYgKHJvb3ROb2RlLm5hbWUgPT09ICdib2R5JyB8fCBhcmdzLmlzUm9vdENvbnRlbnQpKSB7XG4gICAgICAgICAgYWRkUm9vdEJsb2Nrcyhyb290Tm9kZSwgcm9vdEJsb2NrTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhcmdzLmludmFsaWQpIHtcbiAgICAgICAgICBydW5GaWx0ZXJzKG1hdGNoZXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb290Tm9kZTtcbiAgICAgIH07XG4gICAgICBjb25zdCBleHBvcnRzID0ge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGFkZEF0dHJpYnV0ZUZpbHRlcixcbiAgICAgICAgZ2V0QXR0cmlidXRlRmlsdGVycyxcbiAgICAgICAgcmVtb3ZlQXR0cmlidXRlRmlsdGVyLFxuICAgICAgICBhZGROb2RlRmlsdGVyLFxuICAgICAgICBnZXROb2RlRmlsdGVycyxcbiAgICAgICAgcmVtb3ZlTm9kZUZpbHRlcixcbiAgICAgICAgcGFyc2VcbiAgICAgIH07XG4gICAgICByZWdpc3RlciQ0KGV4cG9ydHMsIGRlZmF1bHRlZFNldHRpbmdzKTtcbiAgICAgIHJlZ2lzdGVyJDUoZXhwb3J0cywgZGVmYXVsdGVkU2V0dGluZ3MsIHNjaGVtYSk7XG4gICAgICByZXR1cm4gZXhwb3J0cztcbiAgICB9O1xuXG4gICAgY29uc3Qgc2VyaWFsaXplQ29udGVudCA9IGNvbnRlbnQgPT4gaXNUcmVlTm9kZShjb250ZW50KSA/IEh0bWxTZXJpYWxpemVyKHsgdmFsaWRhdGU6IGZhbHNlIH0pLnNlcmlhbGl6ZShjb250ZW50KSA6IGNvbnRlbnQ7XG4gICAgY29uc3Qgd2l0aFNlcmlhbGl6ZWRDb250ZW50ID0gKGNvbnRlbnQsIGZpcmVFdmVudCwgc2FuaXRpemUpID0+IHtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRDb250ZW50ID0gc2VyaWFsaXplQ29udGVudChjb250ZW50KTtcbiAgICAgIGNvbnN0IGV2ZW50QXJncyA9IGZpcmVFdmVudChzZXJpYWxpemVkQ29udGVudCk7XG4gICAgICBpZiAoZXZlbnRBcmdzLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybiBldmVudEFyZ3M7XG4gICAgICB9IGVsc2UgaWYgKGlzVHJlZU5vZGUoY29udGVudCkpIHtcbiAgICAgICAgaWYgKGV2ZW50QXJncy5jb250ZW50ICE9PSBzZXJpYWxpemVkQ29udGVudCkge1xuICAgICAgICAgIGNvbnN0IHJvb3ROb2RlID0gRG9tUGFyc2VyKHtcbiAgICAgICAgICAgIHZhbGlkYXRlOiBmYWxzZSxcbiAgICAgICAgICAgIGZvcmNlZF9yb290X2Jsb2NrOiBmYWxzZSxcbiAgICAgICAgICAgIHNhbml0aXplXG4gICAgICAgICAgfSkucGFyc2UoZXZlbnRBcmdzLmNvbnRlbnQsIHsgY29udGV4dDogY29udGVudC5uYW1lIH0pO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5ldmVudEFyZ3MsXG4gICAgICAgICAgICBjb250ZW50OiByb290Tm9kZVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmV2ZW50QXJncyxcbiAgICAgICAgICAgIGNvbnRlbnRcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZXZlbnRBcmdzO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcHJlUHJvY2Vzc0dldENvbnRlbnQgPSAoZWRpdG9yLCBhcmdzKSA9PiB7XG4gICAgICBpZiAoYXJncy5ub19ldmVudHMpIHtcbiAgICAgICAgcmV0dXJuIFJlc3VsdC52YWx1ZShhcmdzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGV2ZW50QXJncyA9IGZpcmVCZWZvcmVHZXRDb250ZW50KGVkaXRvciwgYXJncyk7XG4gICAgICAgIGlmIChldmVudEFyZ3MuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKGZpcmVHZXRDb250ZW50KGVkaXRvciwge1xuICAgICAgICAgICAgY29udGVudDogJycsXG4gICAgICAgICAgICAuLi5ldmVudEFyZ3NcbiAgICAgICAgICB9KS5jb250ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUmVzdWx0LnZhbHVlKGV2ZW50QXJncyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHBvc3RQcm9jZXNzR2V0Q29udGVudCA9IChlZGl0b3IsIGNvbnRlbnQsIGFyZ3MpID0+IHtcbiAgICAgIGlmIChhcmdzLm5vX2V2ZW50cykge1xuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NlZEV2ZW50QXJncyA9IHdpdGhTZXJpYWxpemVkQ29udGVudChjb250ZW50LCBjb250ZW50ID0+IGZpcmVHZXRDb250ZW50KGVkaXRvciwge1xuICAgICAgICAgIC4uLmFyZ3MsXG4gICAgICAgICAgY29udGVudFxuICAgICAgICB9KSwgc2hvdWxkU2FuaXRpemVYc3MoZWRpdG9yKSk7XG4gICAgICAgIHJldHVybiBwcm9jZXNzZWRFdmVudEFyZ3MuY29udGVudDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHByZVByb2Nlc3NTZXRDb250ZW50ID0gKGVkaXRvciwgYXJncykgPT4ge1xuICAgICAgaWYgKGFyZ3Mubm9fZXZlbnRzKSB7XG4gICAgICAgIHJldHVybiBSZXN1bHQudmFsdWUoYXJncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwcm9jZXNzZWRFdmVudEFyZ3MgPSB3aXRoU2VyaWFsaXplZENvbnRlbnQoYXJncy5jb250ZW50LCBjb250ZW50ID0+IGZpcmVCZWZvcmVTZXRDb250ZW50KGVkaXRvciwge1xuICAgICAgICAgIC4uLmFyZ3MsXG4gICAgICAgICAgY29udGVudFxuICAgICAgICB9KSwgc2hvdWxkU2FuaXRpemVYc3MoZWRpdG9yKSk7XG4gICAgICAgIGlmIChwcm9jZXNzZWRFdmVudEFyZ3MuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICBmaXJlU2V0Q29udGVudChlZGl0b3IsIHByb2Nlc3NlZEV2ZW50QXJncyk7XG4gICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvcih1bmRlZmluZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBSZXN1bHQudmFsdWUocHJvY2Vzc2VkRXZlbnRBcmdzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcG9zdFByb2Nlc3NTZXRDb250ZW50ID0gKGVkaXRvciwgY29udGVudCwgYXJncykgPT4ge1xuICAgICAgaWYgKCFhcmdzLm5vX2V2ZW50cykge1xuICAgICAgICBmaXJlU2V0Q29udGVudChlZGl0b3IsIHtcbiAgICAgICAgICAuLi5hcmdzLFxuICAgICAgICAgIGNvbnRlbnRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHRhYmxlTW9kZWwgPSAoZWxlbWVudCwgd2lkdGgsIHJvd3MpID0+ICh7XG4gICAgICBlbGVtZW50LFxuICAgICAgd2lkdGgsXG4gICAgICByb3dzXG4gICAgfSk7XG4gICAgY29uc3QgdGFibGVSb3cgPSAoZWxlbWVudCwgY2VsbHMpID0+ICh7XG4gICAgICBlbGVtZW50LFxuICAgICAgY2VsbHNcbiAgICB9KTtcbiAgICBjb25zdCBjZWxsUG9zaXRpb24gPSAoeCwgeSkgPT4gKHtcbiAgICAgIHgsXG4gICAgICB5XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0U3BhbiA9ICh0ZCwga2V5KSA9PiB7XG4gICAgICByZXR1cm4gZ2V0T3B0KHRkLCBrZXkpLmJpbmQodG9JbnQpLmdldE9yKDEpO1xuICAgIH07XG4gICAgY29uc3QgZmlsbG91dCA9ICh0YWJsZSwgeCwgeSwgdHIsIHRkKSA9PiB7XG4gICAgICBjb25zdCByb3dzcGFuID0gZ2V0U3Bhbih0ZCwgJ3Jvd3NwYW4nKTtcbiAgICAgIGNvbnN0IGNvbHNwYW4gPSBnZXRTcGFuKHRkLCAnY29sc3BhbicpO1xuICAgICAgY29uc3Qgcm93cyA9IHRhYmxlLnJvd3M7XG4gICAgICBmb3IgKGxldCB5MiA9IHk7IHkyIDwgeSArIHJvd3NwYW47IHkyKyspIHtcbiAgICAgICAgaWYgKCFyb3dzW3kyXSkge1xuICAgICAgICAgIHJvd3NbeTJdID0gdGFibGVSb3coZGVlcCQxKHRyKSwgW10pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IHgyID0geDsgeDIgPCB4ICsgY29sc3BhbjsgeDIrKykge1xuICAgICAgICAgIGNvbnN0IGNlbGxzID0gcm93c1t5Ml0uY2VsbHM7XG4gICAgICAgICAgY2VsbHNbeDJdID0geTIgPT09IHkgJiYgeDIgPT09IHggPyB0ZCA6IHNoYWxsb3ckMSh0ZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNlbGxFeGlzdHMgPSAodGFibGUsIHgsIHkpID0+IHtcbiAgICAgIGNvbnN0IHJvd3MgPSB0YWJsZS5yb3dzO1xuICAgICAgY29uc3QgY2VsbHMgPSByb3dzW3ldID8gcm93c1t5XS5jZWxscyA6IFtdO1xuICAgICAgcmV0dXJuICEhY2VsbHNbeF07XG4gICAgfTtcbiAgICBjb25zdCBza2lwQ2VsbHNYID0gKHRhYmxlLCB4LCB5KSA9PiB7XG4gICAgICB3aGlsZSAoY2VsbEV4aXN0cyh0YWJsZSwgeCwgeSkpIHtcbiAgICAgICAgeCsrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgICBjb25zdCBnZXRXaWR0aCA9IHJvd3MgPT4ge1xuICAgICAgcmV0dXJuIGZvbGRsKHJvd3MsIChhY2MsIHJvdykgPT4ge1xuICAgICAgICByZXR1cm4gcm93LmNlbGxzLmxlbmd0aCA+IGFjYyA/IHJvdy5jZWxscy5sZW5ndGggOiBhY2M7XG4gICAgICB9LCAwKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRFbGVtZW50UG9zID0gKHRhYmxlLCBlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCByb3dzID0gdGFibGUucm93cztcbiAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgcm93cy5sZW5ndGg7IHkrKykge1xuICAgICAgICBjb25zdCBjZWxscyA9IHJvd3NbeV0uY2VsbHM7XG4gICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgY2VsbHMubGVuZ3RoOyB4KyspIHtcbiAgICAgICAgICBpZiAoZXEoY2VsbHNbeF0sIGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShjZWxsUG9zaXRpb24oeCwgeSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGV4dHJhY3RSb3dzID0gKHRhYmxlLCBzeCwgc3ksIGV4LCBleSkgPT4ge1xuICAgICAgY29uc3QgbmV3Um93cyA9IFtdO1xuICAgICAgY29uc3Qgcm93cyA9IHRhYmxlLnJvd3M7XG4gICAgICBmb3IgKGxldCB5ID0gc3k7IHkgPD0gZXk7IHkrKykge1xuICAgICAgICBjb25zdCBjZWxscyA9IHJvd3NbeV0uY2VsbHM7XG4gICAgICAgIGNvbnN0IHNsaWNlID0gc3ggPCBleCA/IGNlbGxzLnNsaWNlKHN4LCBleCArIDEpIDogY2VsbHMuc2xpY2UoZXgsIHN4ICsgMSk7XG4gICAgICAgIG5ld1Jvd3MucHVzaCh0YWJsZVJvdyhyb3dzW3ldLmVsZW1lbnQsIHNsaWNlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3Um93cztcbiAgICB9O1xuICAgIGNvbnN0IHN1YlRhYmxlID0gKHRhYmxlLCBzdGFydFBvcywgZW5kUG9zKSA9PiB7XG4gICAgICBjb25zdCBzeCA9IHN0YXJ0UG9zLngsIHN5ID0gc3RhcnRQb3MueTtcbiAgICAgIGNvbnN0IGV4ID0gZW5kUG9zLngsIGV5ID0gZW5kUG9zLnk7XG4gICAgICBjb25zdCBuZXdSb3dzID0gc3kgPCBleSA/IGV4dHJhY3RSb3dzKHRhYmxlLCBzeCwgc3ksIGV4LCBleSkgOiBleHRyYWN0Um93cyh0YWJsZSwgc3gsIGV5LCBleCwgc3kpO1xuICAgICAgcmV0dXJuIHRhYmxlTW9kZWwodGFibGUuZWxlbWVudCwgZ2V0V2lkdGgobmV3Um93cyksIG5ld1Jvd3MpO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlRG9tVGFibGUgPSAodGFibGUsIHJvd3MpID0+IHtcbiAgICAgIGNvbnN0IHRhYmxlRWxlbWVudCA9IHNoYWxsb3ckMSh0YWJsZS5lbGVtZW50KTtcbiAgICAgIGNvbnN0IHRhYmxlQm9keSA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCd0Ym9keScpO1xuICAgICAgYXBwZW5kKHRhYmxlQm9keSwgcm93cyk7XG4gICAgICBhcHBlbmQkMSh0YWJsZUVsZW1lbnQsIHRhYmxlQm9keSk7XG4gICAgICByZXR1cm4gdGFibGVFbGVtZW50O1xuICAgIH07XG4gICAgY29uc3QgbW9kZWxSb3dzVG9Eb21Sb3dzID0gdGFibGUgPT4ge1xuICAgICAgcmV0dXJuIG1hcCQzKHRhYmxlLnJvd3MsIHJvdyA9PiB7XG4gICAgICAgIGNvbnN0IGNlbGxzID0gbWFwJDMocm93LmNlbGxzLCBjZWxsID0+IHtcbiAgICAgICAgICBjb25zdCB0ZCA9IGRlZXAkMShjZWxsKTtcbiAgICAgICAgICByZW1vdmUkYSh0ZCwgJ2NvbHNwYW4nKTtcbiAgICAgICAgICByZW1vdmUkYSh0ZCwgJ3Jvd3NwYW4nKTtcbiAgICAgICAgICByZXR1cm4gdGQ7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0ciA9IHNoYWxsb3ckMShyb3cuZWxlbWVudCk7XG4gICAgICAgIGFwcGVuZCh0ciwgY2VsbHMpO1xuICAgICAgICByZXR1cm4gdHI7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZyb21Eb20gPSB0YWJsZUVsbSA9PiB7XG4gICAgICBjb25zdCB0YWJsZSA9IHRhYmxlTW9kZWwoc2hhbGxvdyQxKHRhYmxlRWxtKSwgMCwgW10pO1xuICAgICAgZWFjaCRlKGRlc2NlbmRhbnRzKHRhYmxlRWxtLCAndHInKSwgKHRyLCB5KSA9PiB7XG4gICAgICAgIGVhY2gkZShkZXNjZW5kYW50cyh0ciwgJ3RkLHRoJyksICh0ZCwgeCkgPT4ge1xuICAgICAgICAgIGZpbGxvdXQodGFibGUsIHNraXBDZWxsc1godGFibGUsIHgsIHkpLCB5LCB0ciwgdGQpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRhYmxlTW9kZWwodGFibGUuZWxlbWVudCwgZ2V0V2lkdGgodGFibGUucm93cyksIHRhYmxlLnJvd3MpO1xuICAgIH07XG4gICAgY29uc3QgdG9Eb20gPSB0YWJsZSA9PiB7XG4gICAgICByZXR1cm4gY3JlYXRlRG9tVGFibGUodGFibGUsIG1vZGVsUm93c1RvRG9tUm93cyh0YWJsZSkpO1xuICAgIH07XG4gICAgY29uc3Qgc3Vic2VjdGlvbiA9ICh0YWJsZSwgc3RhcnRFbGVtZW50LCBlbmRFbGVtZW50KSA9PiB7XG4gICAgICByZXR1cm4gZmluZEVsZW1lbnRQb3ModGFibGUsIHN0YXJ0RWxlbWVudCkuYmluZChzdGFydFBvcyA9PiB7XG4gICAgICAgIHJldHVybiBmaW5kRWxlbWVudFBvcyh0YWJsZSwgZW5kRWxlbWVudCkubWFwKGVuZFBvcyA9PiB7XG4gICAgICAgICAgcmV0dXJuIHN1YlRhYmxlKHRhYmxlLCBzdGFydFBvcywgZW5kUG9zKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmluZFBhcmVudExpc3RDb250YWluZXIgPSBwYXJlbnRzID0+IGZpbmQkMihwYXJlbnRzLCBlbG0gPT4gbmFtZShlbG0pID09PSAndWwnIHx8IG5hbWUoZWxtKSA9PT0gJ29sJyk7XG4gICAgY29uc3QgZ2V0RnVsbHlTZWxlY3RlZExpc3RXcmFwcGVycyA9IChwYXJlbnRzLCBybmcpID0+IGZpbmQkMihwYXJlbnRzLCBlbG0gPT4gbmFtZShlbG0pID09PSAnbGknICYmIGhhc0FsbENvbnRlbnRzU2VsZWN0ZWQoZWxtLCBybmcpKS5mb2xkKGNvbnN0YW50KFtdKSwgX2xpID0+IGZpbmRQYXJlbnRMaXN0Q29udGFpbmVyKHBhcmVudHMpLm1hcChsaXN0Q29udCA9PiB7XG4gICAgICBjb25zdCBsaXN0RWxtID0gU3VnYXJFbGVtZW50LmZyb21UYWcobmFtZShsaXN0Q29udCkpO1xuICAgICAgY29uc3QgbGlzdFN0eWxlcyA9IGZpbHRlciQ0KGdldEFsbFJhdyhsaXN0Q29udCksIChfc3R5bGUsIG5hbWUpID0+IHN0YXJ0c1dpdGgobmFtZSwgJ2xpc3Qtc3R5bGUnKSk7XG4gICAgICBzZXRBbGwobGlzdEVsbSwgbGlzdFN0eWxlcyk7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBTdWdhckVsZW1lbnQuZnJvbVRhZygnbGknKSxcbiAgICAgICAgbGlzdEVsbVxuICAgICAgXTtcbiAgICB9KS5nZXRPcihbXSkpO1xuICAgIGNvbnN0IHdyYXAgPSAoaW5uZXJFbG0sIGVsbXMpID0+IHtcbiAgICAgIGNvbnN0IHdyYXBwZWQgPSBmb2xkbChlbG1zLCAoYWNjLCBlbG0pID0+IHtcbiAgICAgICAgYXBwZW5kJDEoZWxtLCBhY2MpO1xuICAgICAgICByZXR1cm4gZWxtO1xuICAgICAgfSwgaW5uZXJFbG0pO1xuICAgICAgcmV0dXJuIGVsbXMubGVuZ3RoID4gMCA/IGZyb21FbGVtZW50cyhbd3JhcHBlZF0pIDogd3JhcHBlZDtcbiAgICB9O1xuICAgIGNvbnN0IGRpcmVjdExpc3RXcmFwcGVycyA9IGNvbW1vbkFuY2hvckNvbnRhaW5lciA9PiB7XG4gICAgICBpZiAoaXNMaXN0SXRlbSQxKGNvbW1vbkFuY2hvckNvbnRhaW5lcikpIHtcbiAgICAgICAgcmV0dXJuIHBhcmVudChjb21tb25BbmNob3JDb250YWluZXIpLmZpbHRlcihpc0xpc3QpLmZvbGQoY29uc3RhbnQoW10pLCBsaXN0RWxtID0+IFtcbiAgICAgICAgICBjb21tb25BbmNob3JDb250YWluZXIsXG4gICAgICAgICAgbGlzdEVsbVxuICAgICAgICBdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpc0xpc3QoY29tbW9uQW5jaG9yQ29udGFpbmVyKSA/IFtjb21tb25BbmNob3JDb250YWluZXJdIDogW107XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRXcmFwRWxlbWVudHMgPSAocm9vdE5vZGUsIHJuZykgPT4ge1xuICAgICAgY29uc3QgY29tbW9uQW5jaG9yQ29udGFpbmVyID0gU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKTtcbiAgICAgIGNvbnN0IHBhcmVudHMgPSBwYXJlbnRzQW5kU2VsZihjb21tb25BbmNob3JDb250YWluZXIsIHJvb3ROb2RlKTtcbiAgICAgIGNvbnN0IHdyYXBFbGVtZW50cyA9IGZpbHRlciQ1KHBhcmVudHMsIGlzV3JhcEVsZW1lbnQpO1xuICAgICAgY29uc3QgbGlzdFdyYXBwZXJzID0gZ2V0RnVsbHlTZWxlY3RlZExpc3RXcmFwcGVycyhwYXJlbnRzLCBybmcpO1xuICAgICAgY29uc3QgYWxsV3JhcHBlcnMgPSB3cmFwRWxlbWVudHMuY29uY2F0KGxpc3RXcmFwcGVycy5sZW5ndGggPyBsaXN0V3JhcHBlcnMgOiBkaXJlY3RMaXN0V3JhcHBlcnMoY29tbW9uQW5jaG9yQ29udGFpbmVyKSk7XG4gICAgICByZXR1cm4gbWFwJDMoYWxsV3JhcHBlcnMsIHNoYWxsb3ckMSk7XG4gICAgfTtcbiAgICBjb25zdCBlbXB0eUZyYWdtZW50ID0gKCkgPT4gZnJvbUVsZW1lbnRzKFtdKTtcbiAgICBjb25zdCBnZXRGcmFnbWVudEZyb21SYW5nZSA9IChyb290Tm9kZSwgcm5nKSA9PiB3cmFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJuZy5jbG9uZUNvbnRlbnRzKCkpLCBnZXRXcmFwRWxlbWVudHMocm9vdE5vZGUsIHJuZykpO1xuICAgIGNvbnN0IGdldFBhcmVudFRhYmxlID0gKHJvb3RFbG0sIGNlbGwpID0+IGFuY2VzdG9yJDMoY2VsbCwgJ3RhYmxlJywgY3VycnkoZXEsIHJvb3RFbG0pKTtcbiAgICBjb25zdCBnZXRUYWJsZUZyYWdtZW50ID0gKHJvb3ROb2RlLCBzZWxlY3RlZFRhYmxlQ2VsbHMpID0+IGdldFBhcmVudFRhYmxlKHJvb3ROb2RlLCBzZWxlY3RlZFRhYmxlQ2VsbHNbMF0pLmJpbmQodGFibGVFbG0gPT4ge1xuICAgICAgY29uc3QgZmlyc3RDZWxsID0gc2VsZWN0ZWRUYWJsZUNlbGxzWzBdO1xuICAgICAgY29uc3QgbGFzdENlbGwgPSBzZWxlY3RlZFRhYmxlQ2VsbHNbc2VsZWN0ZWRUYWJsZUNlbGxzLmxlbmd0aCAtIDFdO1xuICAgICAgY29uc3QgZnVsbFRhYmxlTW9kZWwgPSBmcm9tRG9tKHRhYmxlRWxtKTtcbiAgICAgIHJldHVybiBzdWJzZWN0aW9uKGZ1bGxUYWJsZU1vZGVsLCBmaXJzdENlbGwsIGxhc3RDZWxsKS5tYXAoc2VjdGlvbmVkVGFibGVNb2RlbCA9PiBmcm9tRWxlbWVudHMoW3RvRG9tKHNlY3Rpb25lZFRhYmxlTW9kZWwpXSkpO1xuICAgIH0pLmdldE9yVGh1bmsoZW1wdHlGcmFnbWVudCk7XG4gICAgY29uc3QgZ2V0U2VsZWN0aW9uRnJhZ21lbnQgPSAocm9vdE5vZGUsIHJhbmdlcykgPT4gcmFuZ2VzLmxlbmd0aCA+IDAgJiYgcmFuZ2VzWzBdLmNvbGxhcHNlZCA/IGVtcHR5RnJhZ21lbnQoKSA6IGdldEZyYWdtZW50RnJvbVJhbmdlKHJvb3ROb2RlLCByYW5nZXNbMF0pO1xuICAgIGNvbnN0IHJlYWQkMyA9IChyb290Tm9kZSwgcmFuZ2VzKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZENlbGxzID0gZ2V0Q2VsbHNGcm9tRWxlbWVudE9yUmFuZ2VzKHJhbmdlcywgcm9vdE5vZGUpO1xuICAgICAgcmV0dXJuIHNlbGVjdGVkQ2VsbHMubGVuZ3RoID4gMCA/IGdldFRhYmxlRnJhZ21lbnQocm9vdE5vZGUsIHNlbGVjdGVkQ2VsbHMpIDogZ2V0U2VsZWN0aW9uRnJhZ21lbnQocm9vdE5vZGUsIHJhbmdlcyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzQ29sbGFwc2libGVXaGl0ZXNwYWNlID0gKHRleHQsIGluZGV4KSA9PiBpbmRleCA+PSAwICYmIGluZGV4IDwgdGV4dC5sZW5ndGggJiYgaXNXaGl0ZVNwYWNlKHRleHQuY2hhckF0KGluZGV4KSk7XG4gICAgY29uc3QgZ2V0SW5uZXJUZXh0ID0gYmluID0+IHtcbiAgICAgIHJldHVybiB0cmltJDEoYmluLmlubmVyVGV4dCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRDb250ZXh0Tm9kZU5hbWUgPSBwYXJlbnRCbG9ja09wdCA9PiBwYXJlbnRCbG9ja09wdC5tYXAoYmxvY2sgPT4gYmxvY2subm9kZU5hbWUpLmdldE9yKCdkaXYnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGdldFRleHRDb250ZW50ID0gZWRpdG9yID0+IE9wdGlvbmFsLmZyb20oZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSkubWFwKHJuZyA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBwYXJlbnRCbG9ja09wdCA9IE9wdGlvbmFsLmZyb20oZWRpdG9yLmRvbS5nZXRQYXJlbnQocm5nLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLCBlZGl0b3IuZG9tLmlzQmxvY2spKTtcbiAgICAgIGNvbnN0IGJvZHkgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgY29uc3QgY29udGV4dE5vZGVOYW1lID0gZ2V0Q29udGV4dE5vZGVOYW1lKHBhcmVudEJsb2NrT3B0KTtcbiAgICAgIGNvbnN0IHJhbmdlQ29udGVudENsb25lID0gU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLmNsb25lQ29udGVudHMoKSk7XG4gICAgICBjbGVhbnVwQm9ndXNFbGVtZW50cyhyYW5nZUNvbnRlbnRDbG9uZSk7XG4gICAgICBjbGVhbnVwSW5wdXROYW1lcyhyYW5nZUNvbnRlbnRDbG9uZSk7XG4gICAgICBjb25zdCBiaW4gPSBlZGl0b3IuZG9tLmFkZChib2R5LCBjb250ZXh0Tm9kZU5hbWUsIHtcbiAgICAgICAgJ2RhdGEtbWNlLWJvZ3VzJzogJ2FsbCcsXG4gICAgICAgICdzdHlsZSc6ICdvdmVyZmxvdzogaGlkZGVuOyBvcGFjaXR5OiAwOydcbiAgICAgIH0sIHJhbmdlQ29udGVudENsb25lLmRvbSk7XG4gICAgICBjb25zdCB0ZXh0ID0gZ2V0SW5uZXJUZXh0KGJpbik7XG4gICAgICBjb25zdCBub25SZW5kZXJlZFRleHQgPSB0cmltJDEoKF9hID0gYmluLnRleHRDb250ZW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJyk7XG4gICAgICBlZGl0b3IuZG9tLnJlbW92ZShiaW4pO1xuICAgICAgaWYgKGlzQ29sbGFwc2libGVXaGl0ZXNwYWNlKG5vblJlbmRlcmVkVGV4dCwgMCkgfHwgaXNDb2xsYXBzaWJsZVdoaXRlc3BhY2Uobm9uUmVuZGVyZWRUZXh0LCBub25SZW5kZXJlZFRleHQubGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgY29uc3QgcGFyZW50QmxvY2sgPSBwYXJlbnRCbG9ja09wdC5nZXRPcihib2R5KTtcbiAgICAgICAgY29uc3QgcGFyZW50QmxvY2tUZXh0ID0gZ2V0SW5uZXJUZXh0KHBhcmVudEJsb2NrKTtcbiAgICAgICAgY29uc3QgdGV4dEluZGV4ID0gcGFyZW50QmxvY2tUZXh0LmluZGV4T2YodGV4dCk7XG4gICAgICAgIGlmICh0ZXh0SW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgaGFzUHJvY2VlZGluZ1NwYWNlID0gaXNDb2xsYXBzaWJsZVdoaXRlc3BhY2UocGFyZW50QmxvY2tUZXh0LCB0ZXh0SW5kZXggLSAxKTtcbiAgICAgICAgICBjb25zdCBoYXNUcmFpbGluZ1NwYWNlID0gaXNDb2xsYXBzaWJsZVdoaXRlc3BhY2UocGFyZW50QmxvY2tUZXh0LCB0ZXh0SW5kZXggKyB0ZXh0Lmxlbmd0aCk7XG4gICAgICAgICAgcmV0dXJuIChoYXNQcm9jZWVkaW5nU3BhY2UgPyAnICcgOiAnJykgKyB0ZXh0ICsgKGhhc1RyYWlsaW5nU3BhY2UgPyAnICcgOiAnJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgfVxuICAgIH0pLmdldE9yKCcnKTtcbiAgICBjb25zdCBnZXRTZXJpYWxpemVkQ29udGVudCA9IChlZGl0b3IsIGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCksIHRtcEVsbSA9IGVkaXRvci5kb20uY3JlYXRlKCdib2R5Jyk7XG4gICAgICBjb25zdCBzZWwgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFNlbCgpO1xuICAgICAgY29uc3QgcmFuZ2VzID0gcHJvY2Vzc1JhbmdlcyhlZGl0b3IsIGdldFJhbmdlcyQxKHNlbCkpO1xuICAgICAgY29uc3QgZnJhZ21lbnQgPSBhcmdzLmNvbnRleHR1YWwgPyByZWFkJDMoU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSksIHJhbmdlcykuZG9tIDogcm5nLmNsb25lQ29udGVudHMoKTtcbiAgICAgIGlmIChmcmFnbWVudCkge1xuICAgICAgICB0bXBFbG0uYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVkaXRvci5zZWxlY3Rpb24uc2VyaWFsaXplci5zZXJpYWxpemUodG1wRWxtLCBhcmdzKTtcbiAgICB9O1xuICAgIGNvbnN0IGV4dHJhY3RTZWxlY3RlZENvbnRlbnQgPSAoZWRpdG9yLCBhcmdzKSA9PiB7XG4gICAgICBpZiAoYXJncy5mb3JtYXQgPT09ICd0ZXh0Jykge1xuICAgICAgICByZXR1cm4gZ2V0VGV4dENvbnRlbnQoZWRpdG9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBnZXRTZXJpYWxpemVkQ29udGVudChlZGl0b3IsIGFyZ3MpO1xuICAgICAgICBpZiAoYXJncy5mb3JtYXQgPT09ICd0cmVlJykge1xuICAgICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBlZGl0b3Iuc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkgPyAnJyA6IGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldHVwQXJncyQzID0gKGFyZ3MsIGZvcm1hdCkgPT4gKHtcbiAgICAgIC4uLmFyZ3MsXG4gICAgICBmb3JtYXQsXG4gICAgICBnZXQ6IHRydWUsXG4gICAgICBzZWxlY3Rpb246IHRydWUsXG4gICAgICBnZXRJbm5lcjogdHJ1ZVxuICAgIH0pO1xuICAgIGNvbnN0IGdldFNlbGVjdGVkQ29udGVudEludGVybmFsID0gKGVkaXRvciwgZm9ybWF0LCBhcmdzID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRlZEFyZ3MgPSBzZXR1cEFyZ3MkMyhhcmdzLCBmb3JtYXQpO1xuICAgICAgcmV0dXJuIHByZVByb2Nlc3NHZXRDb250ZW50KGVkaXRvciwgZGVmYXVsdGVkQXJncykuZm9sZChpZGVudGl0eSwgdXBkYXRlZEFyZ3MgPT4ge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZXh0cmFjdFNlbGVjdGVkQ29udGVudChlZGl0b3IsIHVwZGF0ZWRBcmdzKTtcbiAgICAgICAgcmV0dXJuIHBvc3RQcm9jZXNzR2V0Q29udGVudChlZGl0b3IsIGNvbnRlbnQsIHVwZGF0ZWRBcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBLRUVQID0gMCwgSU5TRVJUID0gMSwgREVMRVRFID0gMjtcbiAgICBjb25zdCBkaWZmID0gKGxlZnQsIHJpZ2h0KSA9PiB7XG4gICAgICBjb25zdCBzaXplID0gbGVmdC5sZW5ndGggKyByaWdodC5sZW5ndGggKyAyO1xuICAgICAgY29uc3QgdkRvd24gPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgICBjb25zdCB2VXAgPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgICBjb25zdCBzbmFrZSA9IChzdGFydCwgZW5kLCBkaWFnKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgZW5kLFxuICAgICAgICAgIGRpYWdcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCBidWlsZFNjcmlwdCA9IChzdGFydDEsIGVuZDEsIHN0YXJ0MiwgZW5kMiwgc2NyaXB0KSA9PiB7XG4gICAgICAgIGNvbnN0IG1pZGRsZSA9IGdldE1pZGRsZVNuYWtlKHN0YXJ0MSwgZW5kMSwgc3RhcnQyLCBlbmQyKTtcbiAgICAgICAgaWYgKG1pZGRsZSA9PT0gbnVsbCB8fCBtaWRkbGUuc3RhcnQgPT09IGVuZDEgJiYgbWlkZGxlLmRpYWcgPT09IGVuZDEgLSBlbmQyIHx8IG1pZGRsZS5lbmQgPT09IHN0YXJ0MSAmJiBtaWRkbGUuZGlhZyA9PT0gc3RhcnQxIC0gc3RhcnQyKSB7XG4gICAgICAgICAgbGV0IGkgPSBzdGFydDE7XG4gICAgICAgICAgbGV0IGogPSBzdGFydDI7XG4gICAgICAgICAgd2hpbGUgKGkgPCBlbmQxIHx8IGogPCBlbmQyKSB7XG4gICAgICAgICAgICBpZiAoaSA8IGVuZDEgJiYgaiA8IGVuZDIgJiYgbGVmdFtpXSA9PT0gcmlnaHRbal0pIHtcbiAgICAgICAgICAgICAgc2NyaXB0LnB1c2goW1xuICAgICAgICAgICAgICAgIEtFRVAsXG4gICAgICAgICAgICAgICAgbGVmdFtpXVxuICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgKytpO1xuICAgICAgICAgICAgICArK2o7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoZW5kMSAtIHN0YXJ0MSA+IGVuZDIgLSBzdGFydDIpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHQucHVzaChbXG4gICAgICAgICAgICAgICAgICBERUxFVEUsXG4gICAgICAgICAgICAgICAgICBsZWZ0W2ldXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgKytpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNjcmlwdC5wdXNoKFtcbiAgICAgICAgICAgICAgICAgIElOU0VSVCxcbiAgICAgICAgICAgICAgICAgIHJpZ2h0W2pdXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgKytqO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1aWxkU2NyaXB0KHN0YXJ0MSwgbWlkZGxlLnN0YXJ0LCBzdGFydDIsIG1pZGRsZS5zdGFydCAtIG1pZGRsZS5kaWFnLCBzY3JpcHQpO1xuICAgICAgICAgIGZvciAobGV0IGkyID0gbWlkZGxlLnN0YXJ0OyBpMiA8IG1pZGRsZS5lbmQ7ICsraTIpIHtcbiAgICAgICAgICAgIHNjcmlwdC5wdXNoKFtcbiAgICAgICAgICAgICAgS0VFUCxcbiAgICAgICAgICAgICAgbGVmdFtpMl1cbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBidWlsZFNjcmlwdChtaWRkbGUuZW5kLCBlbmQxLCBtaWRkbGUuZW5kIC0gbWlkZGxlLmRpYWcsIGVuZDIsIHNjcmlwdCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBidWlsZFNuYWtlID0gKHN0YXJ0LCBkaWFnLCBlbmQxLCBlbmQyKSA9PiB7XG4gICAgICAgIGxldCBlbmQgPSBzdGFydDtcbiAgICAgICAgd2hpbGUgKGVuZCAtIGRpYWcgPCBlbmQyICYmIGVuZCA8IGVuZDEgJiYgbGVmdFtlbmRdID09PSByaWdodFtlbmQgLSBkaWFnXSkge1xuICAgICAgICAgICsrZW5kO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzbmFrZShzdGFydCwgZW5kLCBkaWFnKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRNaWRkbGVTbmFrZSA9IChzdGFydDEsIGVuZDEsIHN0YXJ0MiwgZW5kMikgPT4ge1xuICAgICAgICBjb25zdCBtID0gZW5kMSAtIHN0YXJ0MTtcbiAgICAgICAgY29uc3QgbiA9IGVuZDIgLSBzdGFydDI7XG4gICAgICAgIGlmIChtID09PSAwIHx8IG4gPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWx0YSA9IG0gLSBuO1xuICAgICAgICBjb25zdCBzdW0gPSBuICsgbTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gKHN1bSAlIDIgPT09IDAgPyBzdW0gOiBzdW0gKyAxKSAvIDI7XG4gICAgICAgIHZEb3duWzEgKyBvZmZzZXRdID0gc3RhcnQxO1xuICAgICAgICB2VXBbMSArIG9mZnNldF0gPSBlbmQxICsgMTtcbiAgICAgICAgbGV0IGQsIGssIGksIHgsIHk7XG4gICAgICAgIGZvciAoZCA9IDA7IGQgPD0gb2Zmc2V0OyArK2QpIHtcbiAgICAgICAgICBmb3IgKGsgPSAtZDsgayA8PSBkOyBrICs9IDIpIHtcbiAgICAgICAgICAgIGkgPSBrICsgb2Zmc2V0O1xuICAgICAgICAgICAgaWYgKGsgPT09IC1kIHx8IGsgIT09IGQgJiYgdkRvd25baSAtIDFdIDwgdkRvd25baSArIDFdKSB7XG4gICAgICAgICAgICAgIHZEb3duW2ldID0gdkRvd25baSArIDFdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdkRvd25baV0gPSB2RG93bltpIC0gMV0gKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeCA9IHZEb3duW2ldO1xuICAgICAgICAgICAgeSA9IHggLSBzdGFydDEgKyBzdGFydDIgLSBrO1xuICAgICAgICAgICAgd2hpbGUgKHggPCBlbmQxICYmIHkgPCBlbmQyICYmIGxlZnRbeF0gPT09IHJpZ2h0W3ldKSB7XG4gICAgICAgICAgICAgIHZEb3duW2ldID0gKyt4O1xuICAgICAgICAgICAgICArK3k7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVsdGEgJSAyICE9PSAwICYmIGRlbHRhIC0gZCA8PSBrICYmIGsgPD0gZGVsdGEgKyBkKSB7XG4gICAgICAgICAgICAgIGlmICh2VXBbaSAtIGRlbHRhXSA8PSB2RG93bltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBidWlsZFNuYWtlKHZVcFtpIC0gZGVsdGFdLCBrICsgc3RhcnQxIC0gc3RhcnQyLCBlbmQxLCBlbmQyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGsgPSBkZWx0YSAtIGQ7IGsgPD0gZGVsdGEgKyBkOyBrICs9IDIpIHtcbiAgICAgICAgICAgIGkgPSBrICsgb2Zmc2V0IC0gZGVsdGE7XG4gICAgICAgICAgICBpZiAoayA9PT0gZGVsdGEgLSBkIHx8IGsgIT09IGRlbHRhICsgZCAmJiB2VXBbaSArIDFdIDw9IHZVcFtpIC0gMV0pIHtcbiAgICAgICAgICAgICAgdlVwW2ldID0gdlVwW2kgKyAxXSAtIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2VXBbaV0gPSB2VXBbaSAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeCA9IHZVcFtpXSAtIDE7XG4gICAgICAgICAgICB5ID0geCAtIHN0YXJ0MSArIHN0YXJ0MiAtIGs7XG4gICAgICAgICAgICB3aGlsZSAoeCA+PSBzdGFydDEgJiYgeSA+PSBzdGFydDIgJiYgbGVmdFt4XSA9PT0gcmlnaHRbeV0pIHtcbiAgICAgICAgICAgICAgdlVwW2ldID0geC0tO1xuICAgICAgICAgICAgICB5LS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVsdGEgJSAyID09PSAwICYmIC1kIDw9IGsgJiYgayA8PSBkKSB7XG4gICAgICAgICAgICAgIGlmICh2VXBbaV0gPD0gdkRvd25baSArIGRlbHRhXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBidWlsZFNuYWtlKHZVcFtpXSwgayArIHN0YXJ0MSAtIHN0YXJ0MiwgZW5kMSwgZW5kMik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2NyaXB0ID0gW107XG4gICAgICBidWlsZFNjcmlwdCgwLCBsZWZ0Lmxlbmd0aCwgMCwgcmlnaHQubGVuZ3RoLCBzY3JpcHQpO1xuICAgICAgcmV0dXJuIHNjcmlwdDtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0T3V0ZXJIdG1sID0gZWxtID0+IHtcbiAgICAgIGlmIChpc0VsZW1lbnQkNihlbG0pKSB7XG4gICAgICAgIHJldHVybiBlbG0ub3V0ZXJIVE1MO1xuICAgICAgfSBlbHNlIGlmIChpc1RleHQkYShlbG0pKSB7XG4gICAgICAgIHJldHVybiBFbnRpdGllcy5lbmNvZGVSYXcoZWxtLmRhdGEsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNDb21tZW50KGVsbSkpIHtcbiAgICAgICAgcmV0dXJuICc8IS0tJyArIGVsbS5kYXRhICsgJy0tPic7XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVGcmFnbWVudCA9IGh0bWwgPT4ge1xuICAgICAgbGV0IG5vZGU7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGNvbnN0IGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICBpZiAoaHRtbCkge1xuICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChub2RlID0gY29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmcmFnO1xuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0QXQgPSAoZWxtLCBodG1sLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudChodG1sKTtcbiAgICAgIGlmIChlbG0uaGFzQ2hpbGROb2RlcygpICYmIGluZGV4IDwgZWxtLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGVsbS5jaGlsZE5vZGVzW2luZGV4XTtcbiAgICAgICAgZWxtLmluc2VydEJlZm9yZShmcmFnbWVudCwgdGFyZ2V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsbS5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVBdCA9IChlbG0sIGluZGV4KSA9PiB7XG4gICAgICBpZiAoZWxtLmhhc0NoaWxkTm9kZXMoKSAmJiBpbmRleCA8IGVsbS5jaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBlbG0uY2hpbGROb2Rlc1tpbmRleF07XG4gICAgICAgIGVsbS5yZW1vdmVDaGlsZCh0YXJnZXQpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYXBwbHlEaWZmID0gKGRpZmYsIGVsbSkgPT4ge1xuICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgIGVhY2gkZShkaWZmLCBhY3Rpb24gPT4ge1xuICAgICAgICBpZiAoYWN0aW9uWzBdID09PSBLRUVQKSB7XG4gICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfSBlbHNlIGlmIChhY3Rpb25bMF0gPT09IElOU0VSVCkge1xuICAgICAgICAgIGluc2VydEF0KGVsbSwgYWN0aW9uWzFdLCBpbmRleCk7XG4gICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfSBlbHNlIGlmIChhY3Rpb25bMF0gPT09IERFTEVURSkge1xuICAgICAgICAgIHJlbW92ZUF0KGVsbSwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlYWQkMiA9IGVsbSA9PiB7XG4gICAgICByZXR1cm4gZmlsdGVyJDUobWFwJDMoZnJvbShlbG0uY2hpbGROb2RlcyksIGdldE91dGVySHRtbCksIGl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS5sZW5ndGggPiAwO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCB3cml0ZSA9IChmcmFnbWVudHMsIGVsbSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudEZyYWdtZW50cyA9IG1hcCQzKGZyb20oZWxtLmNoaWxkTm9kZXMpLCBnZXRPdXRlckh0bWwpO1xuICAgICAgYXBwbHlEaWZmKGRpZmYoY3VycmVudEZyYWdtZW50cywgZnJhZ21lbnRzKSwgZWxtKTtcbiAgICAgIHJldHVybiBlbG07XG4gICAgfTtcblxuICAgIGNvbnN0IGxhenlUZW1wRG9jdW1lbnQgPSBjYWNoZWQoKCkgPT4gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCd1bmRvJykpO1xuICAgIGNvbnN0IGhhc0lmcmFtZXMgPSBodG1sID0+IHtcbiAgICAgIHJldHVybiBodG1sLmluZGV4T2YoJzwvaWZyYW1lPicpICE9PSAtMTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUZyYWdtZW50ZWRMZXZlbCA9IGZyYWdtZW50cyA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnZnJhZ21lbnRlZCcsXG4gICAgICAgIGZyYWdtZW50cyxcbiAgICAgICAgY29udGVudDogJycsXG4gICAgICAgIGJvb2ttYXJrOiBudWxsLFxuICAgICAgICBiZWZvcmVCb29rbWFyazogbnVsbFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUNvbXBsZXRlTGV2ZWwgPSBjb250ZW50ID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdjb21wbGV0ZScsXG4gICAgICAgIGZyYWdtZW50czogbnVsbCxcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgYm9va21hcms6IG51bGwsXG4gICAgICAgIGJlZm9yZUJvb2ttYXJrOiBudWxsXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlRnJvbUVkaXRvciA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBmcmFnbWVudHMgPSByZWFkJDIoZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBjb25zdCB0cmltbWVkRnJhZ21lbnRzID0gYmluZCQzKGZyYWdtZW50cywgaHRtbCA9PiB7XG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSB0cmltSW50ZXJuYWwoZWRpdG9yLnNlcmlhbGl6ZXIsIGh0bWwpO1xuICAgICAgICByZXR1cm4gdHJpbW1lZC5sZW5ndGggPiAwID8gW3RyaW1tZWRdIDogW107XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB0cmltbWVkRnJhZ21lbnRzLmpvaW4oJycpO1xuICAgICAgcmV0dXJuIGhhc0lmcmFtZXMoY29udGVudCkgPyBjcmVhdGVGcmFnbWVudGVkTGV2ZWwodHJpbW1lZEZyYWdtZW50cykgOiBjcmVhdGVDb21wbGV0ZUxldmVsKGNvbnRlbnQpO1xuICAgIH07XG4gICAgY29uc3QgYXBwbHlUb0VkaXRvciA9IChlZGl0b3IsIGxldmVsLCBiZWZvcmUpID0+IHtcbiAgICAgIGNvbnN0IGJvb2ttYXJrID0gYmVmb3JlID8gbGV2ZWwuYmVmb3JlQm9va21hcmsgOiBsZXZlbC5ib29rbWFyaztcbiAgICAgIGlmIChsZXZlbC50eXBlID09PSAnZnJhZ21lbnRlZCcpIHtcbiAgICAgICAgd3JpdGUobGV2ZWwuZnJhZ21lbnRzLCBlZGl0b3IuZ2V0Qm9keSgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkaXRvci5zZXRDb250ZW50KGxldmVsLmNvbnRlbnQsIHtcbiAgICAgICAgICBmb3JtYXQ6ICdyYXcnLFxuICAgICAgICAgIG5vX3NlbGVjdGlvbjogaXNOb25OdWxsYWJsZShib29rbWFyaykgJiYgaXNQYXRoQm9va21hcmsoYm9va21hcmspID8gIWJvb2ttYXJrLmlzRmFrZUNhcmV0IDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChib29rbWFyaykge1xuICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLm1vdmVUb0Jvb2ttYXJrKGJvb2ttYXJrKTtcbiAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ2V0TGV2ZWxDb250ZW50ID0gbGV2ZWwgPT4ge1xuICAgICAgcmV0dXJuIGxldmVsLnR5cGUgPT09ICdmcmFnbWVudGVkJyA/IGxldmVsLmZyYWdtZW50cy5qb2luKCcnKSA6IGxldmVsLmNvbnRlbnQ7XG4gICAgfTtcbiAgICBjb25zdCBnZXRDbGVhbkxldmVsQ29udGVudCA9IGxldmVsID0+IHtcbiAgICAgIGNvbnN0IGVsbSA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdib2R5JywgbGF6eVRlbXBEb2N1bWVudCgpKTtcbiAgICAgIHNldCQxKGVsbSwgZ2V0TGV2ZWxDb250ZW50KGxldmVsKSk7XG4gICAgICBlYWNoJGUoZGVzY2VuZGFudHMoZWxtLCAnKltkYXRhLW1jZS1ib2d1c10nKSwgdW53cmFwKTtcbiAgICAgIHJldHVybiBnZXQkNihlbG0pO1xuICAgIH07XG4gICAgY29uc3QgaGFzRXF1YWxDb250ZW50ID0gKGxldmVsMSwgbGV2ZWwyKSA9PiBnZXRMZXZlbENvbnRlbnQobGV2ZWwxKSA9PT0gZ2V0TGV2ZWxDb250ZW50KGxldmVsMik7XG4gICAgY29uc3QgaGFzRXF1YWxDbGVhbmVkQ29udGVudCA9IChsZXZlbDEsIGxldmVsMikgPT4gZ2V0Q2xlYW5MZXZlbENvbnRlbnQobGV2ZWwxKSA9PT0gZ2V0Q2xlYW5MZXZlbENvbnRlbnQobGV2ZWwyKTtcbiAgICBjb25zdCBpc0VxJDEgPSAobGV2ZWwxLCBsZXZlbDIpID0+IHtcbiAgICAgIGlmICghbGV2ZWwxIHx8ICFsZXZlbDIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChoYXNFcXVhbENvbnRlbnQobGV2ZWwxLCBsZXZlbDIpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGhhc0VxdWFsQ2xlYW5lZENvbnRlbnQobGV2ZWwxLCBsZXZlbDIpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBpc1VubG9ja2VkID0gbG9ja3MgPT4gbG9ja3MuZ2V0KCkgPT09IDA7XG5cbiAgICBjb25zdCBzZXRUeXBpbmcgPSAodW5kb01hbmFnZXIsIHR5cGluZywgbG9ja3MpID0+IHtcbiAgICAgIGlmIChpc1VubG9ja2VkKGxvY2tzKSkge1xuICAgICAgICB1bmRvTWFuYWdlci50eXBpbmcgPSB0eXBpbmc7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBlbmRUeXBpbmcgPSAodW5kb01hbmFnZXIsIGxvY2tzKSA9PiB7XG4gICAgICBpZiAodW5kb01hbmFnZXIudHlwaW5nKSB7XG4gICAgICAgIHNldFR5cGluZyh1bmRvTWFuYWdlciwgZmFsc2UsIGxvY2tzKTtcbiAgICAgICAgdW5kb01hbmFnZXIuYWRkKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBlbmRUeXBpbmdMZXZlbElnbm9yZUxvY2tzID0gdW5kb01hbmFnZXIgPT4ge1xuICAgICAgaWYgKHVuZG9NYW5hZ2VyLnR5cGluZykge1xuICAgICAgICB1bmRvTWFuYWdlci50eXBpbmcgPSBmYWxzZTtcbiAgICAgICAgdW5kb01hbmFnZXIuYWRkKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGJlZm9yZUNoYW5nZSQxID0gKGVkaXRvciwgbG9ja3MsIGJlZm9yZUJvb2ttYXJrKSA9PiB7XG4gICAgICBpZiAoaXNVbmxvY2tlZChsb2NrcykpIHtcbiAgICAgICAgYmVmb3JlQm9va21hcmsuc2V0KGdldFVuZG9Cb29rbWFyayhlZGl0b3Iuc2VsZWN0aW9uKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhZGRVbmRvTGV2ZWwkMSA9IChlZGl0b3IsIHVuZG9NYW5hZ2VyLCBpbmRleCwgbG9ja3MsIGJlZm9yZUJvb2ttYXJrLCBsZXZlbCwgZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRMZXZlbCA9IGNyZWF0ZUZyb21FZGl0b3IoZWRpdG9yKTtcbiAgICAgIGNvbnN0IG5ld0xldmVsID0gVG9vbHMuZXh0ZW5kKGxldmVsIHx8IHt9LCBjdXJyZW50TGV2ZWwpO1xuICAgICAgaWYgKCFpc1VubG9ja2VkKGxvY2tzKSB8fCBlZGl0b3IucmVtb3ZlZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxhc3RMZXZlbCA9IHVuZG9NYW5hZ2VyLmRhdGFbaW5kZXguZ2V0KCldO1xuICAgICAgaWYgKGVkaXRvci5kaXNwYXRjaCgnQmVmb3JlQWRkVW5kbycsIHtcbiAgICAgICAgICBsZXZlbDogbmV3TGV2ZWwsXG4gICAgICAgICAgbGFzdExldmVsLFxuICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50XG4gICAgICAgIH0pLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKGxhc3RMZXZlbCAmJiBpc0VxJDEobGFzdExldmVsLCBuZXdMZXZlbCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAodW5kb01hbmFnZXIuZGF0YVtpbmRleC5nZXQoKV0pIHtcbiAgICAgICAgYmVmb3JlQm9va21hcmsuZ2V0KCkuZWFjaChibSA9PiB7XG4gICAgICAgICAgdW5kb01hbmFnZXIuZGF0YVtpbmRleC5nZXQoKV0uYmVmb3JlQm9va21hcmsgPSBibTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjdXN0b21VbmRvUmVkb0xldmVscyA9IGdldEN1c3RvbVVuZG9SZWRvTGV2ZWxzKGVkaXRvcik7XG4gICAgICBpZiAoY3VzdG9tVW5kb1JlZG9MZXZlbHMpIHtcbiAgICAgICAgaWYgKHVuZG9NYW5hZ2VyLmRhdGEubGVuZ3RoID4gY3VzdG9tVW5kb1JlZG9MZXZlbHMpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHVuZG9NYW5hZ2VyLmRhdGEubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICB1bmRvTWFuYWdlci5kYXRhW2ldID0gdW5kb01hbmFnZXIuZGF0YVtpICsgMV07XG4gICAgICAgICAgfVxuICAgICAgICAgIHVuZG9NYW5hZ2VyLmRhdGEubGVuZ3RoLS07XG4gICAgICAgICAgaW5kZXguc2V0KHVuZG9NYW5hZ2VyLmRhdGEubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV3TGV2ZWwuYm9va21hcmsgPSBnZXRVbmRvQm9va21hcmsoZWRpdG9yLnNlbGVjdGlvbik7XG4gICAgICBpZiAoaW5kZXguZ2V0KCkgPCB1bmRvTWFuYWdlci5kYXRhLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgdW5kb01hbmFnZXIuZGF0YS5sZW5ndGggPSBpbmRleC5nZXQoKSArIDE7XG4gICAgICB9XG4gICAgICB1bmRvTWFuYWdlci5kYXRhLnB1c2gobmV3TGV2ZWwpO1xuICAgICAgaW5kZXguc2V0KHVuZG9NYW5hZ2VyLmRhdGEubGVuZ3RoIC0gMSk7XG4gICAgICBjb25zdCBhcmdzID0ge1xuICAgICAgICBsZXZlbDogbmV3TGV2ZWwsXG4gICAgICAgIGxhc3RMZXZlbCxcbiAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnRcbiAgICAgIH07XG4gICAgICBpZiAoaW5kZXguZ2V0KCkgPiAwKSB7XG4gICAgICAgIGVkaXRvci5zZXREaXJ0eSh0cnVlKTtcbiAgICAgICAgZWRpdG9yLmRpc3BhdGNoKCdBZGRVbmRvJywgYXJncyk7XG4gICAgICAgIGVkaXRvci5kaXNwYXRjaCgnY2hhbmdlJywgYXJncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ0FkZFVuZG8nLCBhcmdzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdMZXZlbDtcbiAgICB9O1xuICAgIGNvbnN0IGNsZWFyJDEgPSAoZWRpdG9yLCB1bmRvTWFuYWdlciwgaW5kZXgpID0+IHtcbiAgICAgIHVuZG9NYW5hZ2VyLmRhdGEgPSBbXTtcbiAgICAgIGluZGV4LnNldCgwKTtcbiAgICAgIHVuZG9NYW5hZ2VyLnR5cGluZyA9IGZhbHNlO1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdDbGVhclVuZG9zJyk7XG4gICAgfTtcbiAgICBjb25zdCBleHRyYSQxID0gKGVkaXRvciwgdW5kb01hbmFnZXIsIGluZGV4LCBjYWxsYmFjazEsIGNhbGxiYWNrMikgPT4ge1xuICAgICAgaWYgKHVuZG9NYW5hZ2VyLnRyYW5zYWN0KGNhbGxiYWNrMSkpIHtcbiAgICAgICAgY29uc3QgYm9va21hcmsgPSB1bmRvTWFuYWdlci5kYXRhW2luZGV4LmdldCgpXS5ib29rbWFyaztcbiAgICAgICAgY29uc3QgbGFzdExldmVsID0gdW5kb01hbmFnZXIuZGF0YVtpbmRleC5nZXQoKSAtIDFdO1xuICAgICAgICBhcHBseVRvRWRpdG9yKGVkaXRvciwgbGFzdExldmVsLCB0cnVlKTtcbiAgICAgICAgaWYgKHVuZG9NYW5hZ2VyLnRyYW5zYWN0KGNhbGxiYWNrMikpIHtcbiAgICAgICAgICB1bmRvTWFuYWdlci5kYXRhW2luZGV4LmdldCgpIC0gMV0uYmVmb3JlQm9va21hcmsgPSBib29rbWFyaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVkbyQxID0gKGVkaXRvciwgaW5kZXgsIGRhdGEpID0+IHtcbiAgICAgIGxldCBsZXZlbDtcbiAgICAgIGlmIChpbmRleC5nZXQoKSA8IGRhdGEubGVuZ3RoIC0gMSkge1xuICAgICAgICBpbmRleC5zZXQoaW5kZXguZ2V0KCkgKyAxKTtcbiAgICAgICAgbGV2ZWwgPSBkYXRhW2luZGV4LmdldCgpXTtcbiAgICAgICAgYXBwbHlUb0VkaXRvcihlZGl0b3IsIGxldmVsLCBmYWxzZSk7XG4gICAgICAgIGVkaXRvci5zZXREaXJ0eSh0cnVlKTtcbiAgICAgICAgZWRpdG9yLmRpc3BhdGNoKCdSZWRvJywgeyBsZXZlbCB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZXZlbDtcbiAgICB9O1xuICAgIGNvbnN0IHVuZG8kMSA9IChlZGl0b3IsIHVuZG9NYW5hZ2VyLCBsb2NrcywgaW5kZXgpID0+IHtcbiAgICAgIGxldCBsZXZlbDtcbiAgICAgIGlmICh1bmRvTWFuYWdlci50eXBpbmcpIHtcbiAgICAgICAgdW5kb01hbmFnZXIuYWRkKCk7XG4gICAgICAgIHVuZG9NYW5hZ2VyLnR5cGluZyA9IGZhbHNlO1xuICAgICAgICBzZXRUeXBpbmcodW5kb01hbmFnZXIsIGZhbHNlLCBsb2Nrcyk7XG4gICAgICB9XG4gICAgICBpZiAoaW5kZXguZ2V0KCkgPiAwKSB7XG4gICAgICAgIGluZGV4LnNldChpbmRleC5nZXQoKSAtIDEpO1xuICAgICAgICBsZXZlbCA9IHVuZG9NYW5hZ2VyLmRhdGFbaW5kZXguZ2V0KCldO1xuICAgICAgICBhcHBseVRvRWRpdG9yKGVkaXRvciwgbGV2ZWwsIHRydWUpO1xuICAgICAgICBlZGl0b3Iuc2V0RGlydHkodHJ1ZSk7XG4gICAgICAgIGVkaXRvci5kaXNwYXRjaCgnVW5kbycsIHsgbGV2ZWwgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGV2ZWw7XG4gICAgfTtcbiAgICBjb25zdCByZXNldCQxID0gdW5kb01hbmFnZXIgPT4ge1xuICAgICAgdW5kb01hbmFnZXIuY2xlYXIoKTtcbiAgICAgIHVuZG9NYW5hZ2VyLmFkZCgpO1xuICAgIH07XG4gICAgY29uc3QgaGFzVW5kbyQxID0gKGVkaXRvciwgdW5kb01hbmFnZXIsIGluZGV4KSA9PiBpbmRleC5nZXQoKSA+IDAgfHwgdW5kb01hbmFnZXIudHlwaW5nICYmIHVuZG9NYW5hZ2VyLmRhdGFbMF0gJiYgIWlzRXEkMShjcmVhdGVGcm9tRWRpdG9yKGVkaXRvciksIHVuZG9NYW5hZ2VyLmRhdGFbMF0pO1xuICAgIGNvbnN0IGhhc1JlZG8kMSA9ICh1bmRvTWFuYWdlciwgaW5kZXgpID0+IGluZGV4LmdldCgpIDwgdW5kb01hbmFnZXIuZGF0YS5sZW5ndGggLSAxICYmICF1bmRvTWFuYWdlci50eXBpbmc7XG4gICAgY29uc3QgdHJhbnNhY3QkMSA9ICh1bmRvTWFuYWdlciwgbG9ja3MsIGNhbGxiYWNrKSA9PiB7XG4gICAgICBlbmRUeXBpbmcodW5kb01hbmFnZXIsIGxvY2tzKTtcbiAgICAgIHVuZG9NYW5hZ2VyLmJlZm9yZUNoYW5nZSgpO1xuICAgICAgdW5kb01hbmFnZXIuaWdub3JlKGNhbGxiYWNrKTtcbiAgICAgIHJldHVybiB1bmRvTWFuYWdlci5hZGQoKTtcbiAgICB9O1xuICAgIGNvbnN0IGlnbm9yZSQxID0gKGxvY2tzLCBjYWxsYmFjaykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9ja3Muc2V0KGxvY2tzLmdldCgpICsgMSk7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBsb2Nrcy5zZXQobG9ja3MuZ2V0KCkgLSAxKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgYWRkVmlzdWFsSW50ZXJuYWwgPSAoZWRpdG9yLCBlbG0pID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBzY29wZSA9IGlzTm9uTnVsbGFibGUoZWxtKSA/IGVsbSA6IGVkaXRvci5nZXRCb2R5KCk7XG4gICAgICBlYWNoJGUoZG9tLnNlbGVjdCgndGFibGUsYScsIHNjb3BlKSwgbWF0Y2hlZEVsbSA9PiB7XG4gICAgICAgIHN3aXRjaCAobWF0Y2hlZEVsbS5ub2RlTmFtZSkge1xuICAgICAgICBjYXNlICdUQUJMRSc6XG4gICAgICAgICAgY29uc3QgY2xzID0gZ2V0VmlzdWFsQWlkc1RhYmxlQ2xhc3MoZWRpdG9yKTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRvbS5nZXRBdHRyaWIobWF0Y2hlZEVsbSwgJ2JvcmRlcicpO1xuICAgICAgICAgIGlmICgoIXZhbHVlIHx8IHZhbHVlID09PSAnMCcpICYmIGVkaXRvci5oYXNWaXN1YWwpIHtcbiAgICAgICAgICAgIGRvbS5hZGRDbGFzcyhtYXRjaGVkRWxtLCBjbHMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2xhc3MobWF0Y2hlZEVsbSwgY2xzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0EnOlxuICAgICAgICAgIGlmICghZG9tLmdldEF0dHJpYihtYXRjaGVkRWxtLCAnaHJlZicpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRvbS5nZXRBdHRyaWIobWF0Y2hlZEVsbSwgJ25hbWUnKSB8fCBtYXRjaGVkRWxtLmlkO1xuICAgICAgICAgICAgY29uc3QgY2xzID0gZ2V0VmlzdWFsQWlkc0FuY2hvckNsYXNzKGVkaXRvcik7XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgZWRpdG9yLmhhc1Zpc3VhbCkge1xuICAgICAgICAgICAgICBkb20uYWRkQ2xhc3MobWF0Y2hlZEVsbSwgY2xzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyhtYXRjaGVkRWxtLCBjbHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ1Zpc3VhbEFpZCcsIHtcbiAgICAgICAgZWxlbWVudDogZWxtLFxuICAgICAgICBoYXNWaXN1YWw6IGVkaXRvci5oYXNWaXN1YWxcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBtYWtlUGxhaW5BZGFwdG9yID0gZWRpdG9yID0+ICh7XG4gICAgICBpbml0OiB7IGJpbmRFdmVudHM6IG5vb3AgfSxcbiAgICAgIHVuZG9NYW5hZ2VyOiB7XG4gICAgICAgIGJlZm9yZUNoYW5nZTogKGxvY2tzLCBiZWZvcmVCb29rbWFyaykgPT4gYmVmb3JlQ2hhbmdlJDEoZWRpdG9yLCBsb2NrcywgYmVmb3JlQm9va21hcmspLFxuICAgICAgICBhZGQ6ICh1bmRvTWFuYWdlciwgaW5kZXgsIGxvY2tzLCBiZWZvcmVCb29rbWFyaywgbGV2ZWwsIGV2ZW50KSA9PiBhZGRVbmRvTGV2ZWwkMShlZGl0b3IsIHVuZG9NYW5hZ2VyLCBpbmRleCwgbG9ja3MsIGJlZm9yZUJvb2ttYXJrLCBsZXZlbCwgZXZlbnQpLFxuICAgICAgICB1bmRvOiAodW5kb01hbmFnZXIsIGxvY2tzLCBpbmRleCkgPT4gdW5kbyQxKGVkaXRvciwgdW5kb01hbmFnZXIsIGxvY2tzLCBpbmRleCksXG4gICAgICAgIHJlZG86IChpbmRleCwgZGF0YSkgPT4gcmVkbyQxKGVkaXRvciwgaW5kZXgsIGRhdGEpLFxuICAgICAgICBjbGVhcjogKHVuZG9NYW5hZ2VyLCBpbmRleCkgPT4gY2xlYXIkMShlZGl0b3IsIHVuZG9NYW5hZ2VyLCBpbmRleCksXG4gICAgICAgIHJlc2V0OiB1bmRvTWFuYWdlciA9PiByZXNldCQxKHVuZG9NYW5hZ2VyKSxcbiAgICAgICAgaGFzVW5kbzogKHVuZG9NYW5hZ2VyLCBpbmRleCkgPT4gaGFzVW5kbyQxKGVkaXRvciwgdW5kb01hbmFnZXIsIGluZGV4KSxcbiAgICAgICAgaGFzUmVkbzogKHVuZG9NYW5hZ2VyLCBpbmRleCkgPT4gaGFzUmVkbyQxKHVuZG9NYW5hZ2VyLCBpbmRleCksXG4gICAgICAgIHRyYW5zYWN0OiAodW5kb01hbmFnZXIsIGxvY2tzLCBjYWxsYmFjaykgPT4gdHJhbnNhY3QkMSh1bmRvTWFuYWdlciwgbG9ja3MsIGNhbGxiYWNrKSxcbiAgICAgICAgaWdub3JlOiAobG9ja3MsIGNhbGxiYWNrKSA9PiBpZ25vcmUkMShsb2NrcywgY2FsbGJhY2spLFxuICAgICAgICBleHRyYTogKHVuZG9NYW5hZ2VyLCBpbmRleCwgY2FsbGJhY2sxLCBjYWxsYmFjazIpID0+IGV4dHJhJDEoZWRpdG9yLCB1bmRvTWFuYWdlciwgaW5kZXgsIGNhbGxiYWNrMSwgY2FsbGJhY2syKVxuICAgICAgfSxcbiAgICAgIGZvcm1hdHRlcjoge1xuICAgICAgICBtYXRjaDogKG5hbWUsIHZhcnMsIG5vZGUsIHNpbWlsYXIpID0+IG1hdGNoJDIoZWRpdG9yLCBuYW1lLCB2YXJzLCBub2RlLCBzaW1pbGFyKSxcbiAgICAgICAgbWF0Y2hBbGw6IChuYW1lcywgdmFycykgPT4gbWF0Y2hBbGwoZWRpdG9yLCBuYW1lcywgdmFycyksXG4gICAgICAgIG1hdGNoTm9kZTogKG5vZGUsIG5hbWUsIHZhcnMsIHNpbWlsYXIpID0+IG1hdGNoTm9kZShlZGl0b3IsIG5vZGUsIG5hbWUsIHZhcnMsIHNpbWlsYXIpLFxuICAgICAgICBjYW5BcHBseTogbmFtZSA9PiBjYW5BcHBseShlZGl0b3IsIG5hbWUpLFxuICAgICAgICBjbG9zZXN0OiBuYW1lcyA9PiBjbG9zZXN0KGVkaXRvciwgbmFtZXMpLFxuICAgICAgICBhcHBseTogKG5hbWUsIHZhcnMsIG5vZGUpID0+IGFwcGx5Rm9ybWF0JDEoZWRpdG9yLCBuYW1lLCB2YXJzLCBub2RlKSxcbiAgICAgICAgcmVtb3ZlOiAobmFtZSwgdmFycywgbm9kZSwgc2ltaWxhcikgPT4gcmVtb3ZlRm9ybWF0JDEoZWRpdG9yLCBuYW1lLCB2YXJzLCBub2RlLCBzaW1pbGFyKSxcbiAgICAgICAgdG9nZ2xlOiAobmFtZSwgdmFycywgbm9kZSkgPT4gdG9nZ2xlKGVkaXRvciwgbmFtZSwgdmFycywgbm9kZSksXG4gICAgICAgIGZvcm1hdENoYW5nZWQ6IChyZWdpc3RlcmVkRm9ybWF0TGlzdGVuZXJzLCBmb3JtYXRzLCBjYWxsYmFjaywgc2ltaWxhciwgdmFycykgPT4gZm9ybWF0Q2hhbmdlZEludGVybmFsKGVkaXRvciwgcmVnaXN0ZXJlZEZvcm1hdExpc3RlbmVycywgZm9ybWF0cywgY2FsbGJhY2ssIHNpbWlsYXIsIHZhcnMpXG4gICAgICB9LFxuICAgICAgZWRpdG9yOiB7XG4gICAgICAgIGdldENvbnRlbnQ6IGFyZ3MgPT4gZ2V0Q29udGVudEludGVybmFsKGVkaXRvciwgYXJncyksXG4gICAgICAgIHNldENvbnRlbnQ6IChjb250ZW50LCBhcmdzKSA9PiBzZXRDb250ZW50SW50ZXJuYWwoZWRpdG9yLCBjb250ZW50LCBhcmdzKSxcbiAgICAgICAgaW5zZXJ0Q29udGVudDogKHZhbHVlLCBkZXRhaWxzKSA9PiBpbnNlcnRIdG1sQXRDYXJldChlZGl0b3IsIHZhbHVlLCBkZXRhaWxzKSxcbiAgICAgICAgYWRkVmlzdWFsOiBlbG0gPT4gYWRkVmlzdWFsSW50ZXJuYWwoZWRpdG9yLCBlbG0pXG4gICAgICB9LFxuICAgICAgc2VsZWN0aW9uOiB7IGdldENvbnRlbnQ6IChmb3JtYXQsIGFyZ3MpID0+IGdldFNlbGVjdGVkQ29udGVudEludGVybmFsKGVkaXRvciwgZm9ybWF0LCBhcmdzKSB9LFxuICAgICAgYXV0b2NvbXBsZXRlcjoge1xuICAgICAgICBhZGREZWNvcmF0aW9uOiByYW5nZSA9PiBjcmVhdGUkOShlZGl0b3IsIHJhbmdlKSxcbiAgICAgICAgcmVtb3ZlRGVjb3JhdGlvbjogKCkgPT4gcmVtb3ZlJDIoZWRpdG9yLCBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKSlcbiAgICAgIH0sXG4gICAgICByYXc6IHsgZ2V0TW9kZWw6ICgpID0+IE9wdGlvbmFsLm5vbmUoKSB9XG4gICAgfSk7XG4gICAgY29uc3QgbWFrZVJ0Y0FkYXB0b3IgPSBydGNFZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdFZhcnMgPSB2YXJzID0+IGlzT2JqZWN0KHZhcnMpID8gdmFycyA6IHt9O1xuICAgICAgY29uc3Qge2luaXQsIHVuZG9NYW5hZ2VyLCBmb3JtYXR0ZXIsIGVkaXRvciwgc2VsZWN0aW9uLCBhdXRvY29tcGxldGVyLCByYXd9ID0gcnRjRWRpdG9yO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5pdDogeyBiaW5kRXZlbnRzOiBpbml0LmJpbmRFdmVudHMgfSxcbiAgICAgICAgdW5kb01hbmFnZXI6IHtcbiAgICAgICAgICBiZWZvcmVDaGFuZ2U6IHVuZG9NYW5hZ2VyLmJlZm9yZUNoYW5nZSxcbiAgICAgICAgICBhZGQ6IHVuZG9NYW5hZ2VyLmFkZCxcbiAgICAgICAgICB1bmRvOiB1bmRvTWFuYWdlci51bmRvLFxuICAgICAgICAgIHJlZG86IHVuZG9NYW5hZ2VyLnJlZG8sXG4gICAgICAgICAgY2xlYXI6IHVuZG9NYW5hZ2VyLmNsZWFyLFxuICAgICAgICAgIHJlc2V0OiB1bmRvTWFuYWdlci5yZXNldCxcbiAgICAgICAgICBoYXNVbmRvOiB1bmRvTWFuYWdlci5oYXNVbmRvLFxuICAgICAgICAgIGhhc1JlZG86IHVuZG9NYW5hZ2VyLmhhc1JlZG8sXG4gICAgICAgICAgdHJhbnNhY3Q6IChfdW5kb01hbmFnZXIsIF9sb2NrcywgZm4pID0+IHVuZG9NYW5hZ2VyLnRyYW5zYWN0KGZuKSxcbiAgICAgICAgICBpZ25vcmU6IChfbG9ja3MsIGNhbGxiYWNrKSA9PiB1bmRvTWFuYWdlci5pZ25vcmUoY2FsbGJhY2spLFxuICAgICAgICAgIGV4dHJhOiAoX3VuZG9NYW5hZ2VyLCBfaW5kZXgsIGNhbGxiYWNrMSwgY2FsbGJhY2syKSA9PiB1bmRvTWFuYWdlci5leHRyYShjYWxsYmFjazEsIGNhbGxiYWNrMilcbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0dGVyOiB7XG4gICAgICAgICAgbWF0Y2g6IChuYW1lLCB2YXJzLCBfbm9kZSwgc2ltaWxhcikgPT4gZm9ybWF0dGVyLm1hdGNoKG5hbWUsIGRlZmF1bHRWYXJzKHZhcnMpLCBzaW1pbGFyKSxcbiAgICAgICAgICBtYXRjaEFsbDogZm9ybWF0dGVyLm1hdGNoQWxsLFxuICAgICAgICAgIG1hdGNoTm9kZTogZm9ybWF0dGVyLm1hdGNoTm9kZSxcbiAgICAgICAgICBjYW5BcHBseTogbmFtZSA9PiBmb3JtYXR0ZXIuY2FuQXBwbHkobmFtZSksXG4gICAgICAgICAgY2xvc2VzdDogbmFtZXMgPT4gZm9ybWF0dGVyLmNsb3Nlc3QobmFtZXMpLFxuICAgICAgICAgIGFwcGx5OiAobmFtZSwgdmFycywgX25vZGUpID0+IGZvcm1hdHRlci5hcHBseShuYW1lLCBkZWZhdWx0VmFycyh2YXJzKSksXG4gICAgICAgICAgcmVtb3ZlOiAobmFtZSwgdmFycywgX25vZGUsIF9zaW1pbGFyKSA9PiBmb3JtYXR0ZXIucmVtb3ZlKG5hbWUsIGRlZmF1bHRWYXJzKHZhcnMpKSxcbiAgICAgICAgICB0b2dnbGU6IChuYW1lLCB2YXJzLCBfbm9kZSkgPT4gZm9ybWF0dGVyLnRvZ2dsZShuYW1lLCBkZWZhdWx0VmFycyh2YXJzKSksXG4gICAgICAgICAgZm9ybWF0Q2hhbmdlZDogKF9yZmwsIGZvcm1hdHMsIGNhbGxiYWNrLCBzaW1pbGFyLCB2YXJzKSA9PiBmb3JtYXR0ZXIuZm9ybWF0Q2hhbmdlZChmb3JtYXRzLCBjYWxsYmFjaywgc2ltaWxhciwgdmFycylcbiAgICAgICAgfSxcbiAgICAgICAgZWRpdG9yOiB7XG4gICAgICAgICAgZ2V0Q29udGVudDogYXJncyA9PiBlZGl0b3IuZ2V0Q29udGVudChhcmdzKSxcbiAgICAgICAgICBzZXRDb250ZW50OiAoY29udGVudCwgYXJncykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogZWRpdG9yLnNldENvbnRlbnQoY29udGVudCwgYXJncyksXG4gICAgICAgICAgICAgIGh0bWw6ICcnXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5zZXJ0Q29udGVudDogKGNvbnRlbnQsIF9kZXRhaWxzKSA9PiB7XG4gICAgICAgICAgICBlZGl0b3IuaW5zZXJ0Q29udGVudChjb250ZW50KTtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFkZFZpc3VhbDogZWRpdG9yLmFkZFZpc3VhbFxuICAgICAgICB9LFxuICAgICAgICBzZWxlY3Rpb246IHsgZ2V0Q29udGVudDogKF9mb3JtYXQsIGFyZ3MpID0+IHNlbGVjdGlvbi5nZXRDb250ZW50KGFyZ3MpIH0sXG4gICAgICAgIGF1dG9jb21wbGV0ZXI6IHtcbiAgICAgICAgICBhZGREZWNvcmF0aW9uOiBhdXRvY29tcGxldGVyLmFkZERlY29yYXRpb24sXG4gICAgICAgICAgcmVtb3ZlRGVjb3JhdGlvbjogYXV0b2NvbXBsZXRlci5yZW1vdmVEZWNvcmF0aW9uXG4gICAgICAgIH0sXG4gICAgICAgIHJhdzogeyBnZXRNb2RlbDogKCkgPT4gT3B0aW9uYWwuc29tZShyYXcuZ2V0UmF3TW9kZWwoKSkgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG1ha2VOb29wQWRhcHRvciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IG51bCA9IGNvbnN0YW50KG51bGwpO1xuICAgICAgY29uc3QgZW1wdHkgPSBjb25zdGFudCgnJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbml0OiB7IGJpbmRFdmVudHM6IG5vb3AgfSxcbiAgICAgICAgdW5kb01hbmFnZXI6IHtcbiAgICAgICAgICBiZWZvcmVDaGFuZ2U6IG5vb3AsXG4gICAgICAgICAgYWRkOiBudWwsXG4gICAgICAgICAgdW5kbzogbnVsLFxuICAgICAgICAgIHJlZG86IG51bCxcbiAgICAgICAgICBjbGVhcjogbm9vcCxcbiAgICAgICAgICByZXNldDogbm9vcCxcbiAgICAgICAgICBoYXNVbmRvOiBuZXZlcixcbiAgICAgICAgICBoYXNSZWRvOiBuZXZlcixcbiAgICAgICAgICB0cmFuc2FjdDogbnVsLFxuICAgICAgICAgIGlnbm9yZTogbm9vcCxcbiAgICAgICAgICBleHRyYTogbm9vcFxuICAgICAgICB9LFxuICAgICAgICBmb3JtYXR0ZXI6IHtcbiAgICAgICAgICBtYXRjaDogbmV2ZXIsXG4gICAgICAgICAgbWF0Y2hBbGw6IGNvbnN0YW50KFtdKSxcbiAgICAgICAgICBtYXRjaE5vZGU6IGNvbnN0YW50KHVuZGVmaW5lZCksXG4gICAgICAgICAgY2FuQXBwbHk6IG5ldmVyLFxuICAgICAgICAgIGNsb3Nlc3Q6IGVtcHR5LFxuICAgICAgICAgIGFwcGx5OiBub29wLFxuICAgICAgICAgIHJlbW92ZTogbm9vcCxcbiAgICAgICAgICB0b2dnbGU6IG5vb3AsXG4gICAgICAgICAgZm9ybWF0Q2hhbmdlZDogY29uc3RhbnQoeyB1bmJpbmQ6IG5vb3AgfSlcbiAgICAgICAgfSxcbiAgICAgICAgZWRpdG9yOiB7XG4gICAgICAgICAgZ2V0Q29udGVudDogZW1wdHksXG4gICAgICAgICAgc2V0Q29udGVudDogY29uc3RhbnQoe1xuICAgICAgICAgICAgY29udGVudDogJycsXG4gICAgICAgICAgICBodG1sOiAnJ1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGluc2VydENvbnRlbnQ6IGNvbnN0YW50KCcnKSxcbiAgICAgICAgICBhZGRWaXN1YWw6IG5vb3BcbiAgICAgICAgfSxcbiAgICAgICAgc2VsZWN0aW9uOiB7IGdldENvbnRlbnQ6IGVtcHR5IH0sXG4gICAgICAgIGF1dG9jb21wbGV0ZXI6IHtcbiAgICAgICAgICBhZGREZWNvcmF0aW9uOiBub29wLFxuICAgICAgICAgIHJlbW92ZURlY29yYXRpb246IG5vb3BcbiAgICAgICAgfSxcbiAgICAgICAgcmF3OiB7IGdldE1vZGVsOiBjb25zdGFudChPcHRpb25hbC5ub25lKCkpIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBpc1J0YyA9IGVkaXRvciA9PiBoYXMkMihlZGl0b3IucGx1Z2lucywgJ3J0YycpO1xuICAgIGNvbnN0IGdldFJ0Y1NldHVwID0gZWRpdG9yID0+IGdldCRhKGVkaXRvci5wbHVnaW5zLCAncnRjJykuYmluZChydGNQbHVnaW4gPT4gT3B0aW9uYWwuZnJvbShydGNQbHVnaW4uc2V0dXApKTtcbiAgICBjb25zdCBzZXR1cCRzID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGVkaXRvckNhc3QgPSBlZGl0b3I7XG4gICAgICByZXR1cm4gZ2V0UnRjU2V0dXAoZWRpdG9yKS5mb2xkKCgpID0+IHtcbiAgICAgICAgZWRpdG9yQ2FzdC5ydGNJbnN0YW5jZSA9IG1ha2VQbGFpbkFkYXB0b3IoZWRpdG9yKTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH0sIHNldHVwID0+IHtcbiAgICAgICAgZWRpdG9yQ2FzdC5ydGNJbnN0YW5jZSA9IG1ha2VOb29wQWRhcHRvcigpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSgoKSA9PiBzZXR1cCgpLnRoZW4ocnRjRWRpdG9yID0+IHtcbiAgICAgICAgICBlZGl0b3JDYXN0LnJ0Y0luc3RhbmNlID0gbWFrZVJ0Y0FkYXB0b3IocnRjRWRpdG9yKTtcbiAgICAgICAgICByZXR1cm4gcnRjRWRpdG9yLnJ0Yy5pc1JlbW90ZTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRSdGNJbnN0YW5jZVdpdGhGYWxsYmFjayA9IGVkaXRvciA9PiBlZGl0b3IucnRjSW5zdGFuY2UgPyBlZGl0b3IucnRjSW5zdGFuY2UgOiBtYWtlUGxhaW5BZGFwdG9yKGVkaXRvcik7XG4gICAgY29uc3QgZ2V0UnRjSW5zdGFuY2VXaXRoRXJyb3IgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgcnRjSW5zdGFuY2UgPSBlZGl0b3IucnRjSW5zdGFuY2U7XG4gICAgICBpZiAoIXJ0Y0luc3RhbmNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGdldCBSVEMgaW5zdGFuY2Ugbm90IHlldCBpbml0aWFsaXplZC4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBydGNJbnN0YW5jZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGJlZm9yZUNoYW5nZSA9IChlZGl0b3IsIGxvY2tzLCBiZWZvcmVCb29rbWFyaykgPT4ge1xuICAgICAgZ2V0UnRjSW5zdGFuY2VXaXRoRXJyb3IoZWRpdG9yKS51bmRvTWFuYWdlci5iZWZvcmVDaGFuZ2UobG9ja3MsIGJlZm9yZUJvb2ttYXJrKTtcbiAgICB9O1xuICAgIGNvbnN0IGFkZFVuZG9MZXZlbCA9IChlZGl0b3IsIHVuZG9NYW5hZ2VyLCBpbmRleCwgbG9ja3MsIGJlZm9yZUJvb2ttYXJrLCBsZXZlbCwgZXZlbnQpID0+IGdldFJ0Y0luc3RhbmNlV2l0aEVycm9yKGVkaXRvcikudW5kb01hbmFnZXIuYWRkKHVuZG9NYW5hZ2VyLCBpbmRleCwgbG9ja3MsIGJlZm9yZUJvb2ttYXJrLCBsZXZlbCwgZXZlbnQpO1xuICAgIGNvbnN0IHVuZG8gPSAoZWRpdG9yLCB1bmRvTWFuYWdlciwgbG9ja3MsIGluZGV4KSA9PiBnZXRSdGNJbnN0YW5jZVdpdGhFcnJvcihlZGl0b3IpLnVuZG9NYW5hZ2VyLnVuZG8odW5kb01hbmFnZXIsIGxvY2tzLCBpbmRleCk7XG4gICAgY29uc3QgcmVkbyA9IChlZGl0b3IsIGluZGV4LCBkYXRhKSA9PiBnZXRSdGNJbnN0YW5jZVdpdGhFcnJvcihlZGl0b3IpLnVuZG9NYW5hZ2VyLnJlZG8oaW5kZXgsIGRhdGEpO1xuICAgIGNvbnN0IGNsZWFyID0gKGVkaXRvciwgdW5kb01hbmFnZXIsIGluZGV4KSA9PiB7XG4gICAgICBnZXRSdGNJbnN0YW5jZVdpdGhFcnJvcihlZGl0b3IpLnVuZG9NYW5hZ2VyLmNsZWFyKHVuZG9NYW5hZ2VyLCBpbmRleCk7XG4gICAgfTtcbiAgICBjb25zdCByZXNldCA9IChlZGl0b3IsIHVuZG9NYW5hZ2VyKSA9PiB7XG4gICAgICBnZXRSdGNJbnN0YW5jZVdpdGhFcnJvcihlZGl0b3IpLnVuZG9NYW5hZ2VyLnJlc2V0KHVuZG9NYW5hZ2VyKTtcbiAgICB9O1xuICAgIGNvbnN0IGhhc1VuZG8gPSAoZWRpdG9yLCB1bmRvTWFuYWdlciwgaW5kZXgpID0+IGdldFJ0Y0luc3RhbmNlV2l0aEVycm9yKGVkaXRvcikudW5kb01hbmFnZXIuaGFzVW5kbyh1bmRvTWFuYWdlciwgaW5kZXgpO1xuICAgIGNvbnN0IGhhc1JlZG8gPSAoZWRpdG9yLCB1bmRvTWFuYWdlciwgaW5kZXgpID0+IGdldFJ0Y0luc3RhbmNlV2l0aEVycm9yKGVkaXRvcikudW5kb01hbmFnZXIuaGFzUmVkbyh1bmRvTWFuYWdlciwgaW5kZXgpO1xuICAgIGNvbnN0IHRyYW5zYWN0ID0gKGVkaXRvciwgdW5kb01hbmFnZXIsIGxvY2tzLCBjYWxsYmFjaykgPT4gZ2V0UnRjSW5zdGFuY2VXaXRoRXJyb3IoZWRpdG9yKS51bmRvTWFuYWdlci50cmFuc2FjdCh1bmRvTWFuYWdlciwgbG9ja3MsIGNhbGxiYWNrKTtcbiAgICBjb25zdCBpZ25vcmUgPSAoZWRpdG9yLCBsb2NrcywgY2FsbGJhY2spID0+IHtcbiAgICAgIGdldFJ0Y0luc3RhbmNlV2l0aEVycm9yKGVkaXRvcikudW5kb01hbmFnZXIuaWdub3JlKGxvY2tzLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICBjb25zdCBleHRyYSA9IChlZGl0b3IsIHVuZG9NYW5hZ2VyLCBpbmRleCwgY2FsbGJhY2sxLCBjYWxsYmFjazIpID0+IHtcbiAgICAgIGdldFJ0Y0luc3RhbmNlV2l0aEVycm9yKGVkaXRvcikudW5kb01hbmFnZXIuZXh0cmEodW5kb01hbmFnZXIsIGluZGV4LCBjYWxsYmFjazEsIGNhbGxiYWNrMik7XG4gICAgfTtcbiAgICBjb25zdCBtYXRjaEZvcm1hdCA9IChlZGl0b3IsIG5hbWUsIHZhcnMsIG5vZGUsIHNpbWlsYXIpID0+IGdldFJ0Y0luc3RhbmNlV2l0aEVycm9yKGVkaXRvcikuZm9ybWF0dGVyLm1hdGNoKG5hbWUsIHZhcnMsIG5vZGUsIHNpbWlsYXIpO1xuICAgIGNvbnN0IG1hdGNoQWxsRm9ybWF0cyA9IChlZGl0b3IsIG5hbWVzLCB2YXJzKSA9PiBnZXRSdGNJbnN0YW5jZVdpdGhFcnJvcihlZGl0b3IpLmZvcm1hdHRlci5tYXRjaEFsbChuYW1lcywgdmFycyk7XG4gICAgY29uc3QgbWF0Y2hOb2RlRm9ybWF0ID0gKGVkaXRvciwgbm9kZSwgbmFtZSwgdmFycywgc2ltaWxhcikgPT4gZ2V0UnRjSW5zdGFuY2VXaXRoRXJyb3IoZWRpdG9yKS5mb3JtYXR0ZXIubWF0Y2hOb2RlKG5vZGUsIG5hbWUsIHZhcnMsIHNpbWlsYXIpO1xuICAgIGNvbnN0IGNhbkFwcGx5Rm9ybWF0ID0gKGVkaXRvciwgbmFtZSkgPT4gZ2V0UnRjSW5zdGFuY2VXaXRoRXJyb3IoZWRpdG9yKS5mb3JtYXR0ZXIuY2FuQXBwbHkobmFtZSk7XG4gICAgY29uc3QgY2xvc2VzdEZvcm1hdCA9IChlZGl0b3IsIG5hbWVzKSA9PiBnZXRSdGNJbnN0YW5jZVdpdGhFcnJvcihlZGl0b3IpLmZvcm1hdHRlci5jbG9zZXN0KG5hbWVzKTtcbiAgICBjb25zdCBhcHBseUZvcm1hdCA9IChlZGl0b3IsIG5hbWUsIHZhcnMsIG5vZGUpID0+IHtcbiAgICAgIGdldFJ0Y0luc3RhbmNlV2l0aEVycm9yKGVkaXRvcikuZm9ybWF0dGVyLmFwcGx5KG5hbWUsIHZhcnMsIG5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlRm9ybWF0ID0gKGVkaXRvciwgbmFtZSwgdmFycywgbm9kZSwgc2ltaWxhcikgPT4ge1xuICAgICAgZ2V0UnRjSW5zdGFuY2VXaXRoRXJyb3IoZWRpdG9yKS5mb3JtYXR0ZXIucmVtb3ZlKG5hbWUsIHZhcnMsIG5vZGUsIHNpbWlsYXIpO1xuICAgIH07XG4gICAgY29uc3QgdG9nZ2xlRm9ybWF0ID0gKGVkaXRvciwgbmFtZSwgdmFycywgbm9kZSkgPT4ge1xuICAgICAgZ2V0UnRjSW5zdGFuY2VXaXRoRXJyb3IoZWRpdG9yKS5mb3JtYXR0ZXIudG9nZ2xlKG5hbWUsIHZhcnMsIG5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgZm9ybWF0Q2hhbmdlZCA9IChlZGl0b3IsIHJlZ2lzdGVyZWRGb3JtYXRMaXN0ZW5lcnMsIGZvcm1hdHMsIGNhbGxiYWNrLCBzaW1pbGFyLCB2YXJzKSA9PiBnZXRSdGNJbnN0YW5jZVdpdGhFcnJvcihlZGl0b3IpLmZvcm1hdHRlci5mb3JtYXRDaGFuZ2VkKHJlZ2lzdGVyZWRGb3JtYXRMaXN0ZW5lcnMsIGZvcm1hdHMsIGNhbGxiYWNrLCBzaW1pbGFyLCB2YXJzKTtcbiAgICBjb25zdCBnZXRDb250ZW50JDIgPSAoZWRpdG9yLCBhcmdzKSA9PiBnZXRSdGNJbnN0YW5jZVdpdGhGYWxsYmFjayhlZGl0b3IpLmVkaXRvci5nZXRDb250ZW50KGFyZ3MpO1xuICAgIGNvbnN0IHNldENvbnRlbnQkMiA9IChlZGl0b3IsIGNvbnRlbnQsIGFyZ3MpID0+IGdldFJ0Y0luc3RhbmNlV2l0aEZhbGxiYWNrKGVkaXRvcikuZWRpdG9yLnNldENvbnRlbnQoY29udGVudCwgYXJncyk7XG4gICAgY29uc3QgaW5zZXJ0Q29udGVudCQxID0gKGVkaXRvciwgdmFsdWUsIGRldGFpbHMpID0+IGdldFJ0Y0luc3RhbmNlV2l0aEZhbGxiYWNrKGVkaXRvcikuZWRpdG9yLmluc2VydENvbnRlbnQodmFsdWUsIGRldGFpbHMpO1xuICAgIGNvbnN0IGdldFNlbGVjdGVkQ29udGVudCA9IChlZGl0b3IsIGZvcm1hdCwgYXJncykgPT4gZ2V0UnRjSW5zdGFuY2VXaXRoRXJyb3IoZWRpdG9yKS5zZWxlY3Rpb24uZ2V0Q29udGVudChmb3JtYXQsIGFyZ3MpO1xuICAgIGNvbnN0IGFkZFZpc3VhbCQxID0gKGVkaXRvciwgZWxtKSA9PiBnZXRSdGNJbnN0YW5jZVdpdGhFcnJvcihlZGl0b3IpLmVkaXRvci5hZGRWaXN1YWwoZWxtKTtcbiAgICBjb25zdCBiaW5kRXZlbnRzID0gZWRpdG9yID0+IGdldFJ0Y0luc3RhbmNlV2l0aEVycm9yKGVkaXRvcikuaW5pdC5iaW5kRXZlbnRzKCk7XG4gICAgY29uc3QgYWRkQXV0b2NvbXBsZXRlckRlY29yYXRpb24gPSAoZWRpdG9yLCByYW5nZSkgPT4gZ2V0UnRjSW5zdGFuY2VXaXRoRXJyb3IoZWRpdG9yKS5hdXRvY29tcGxldGVyLmFkZERlY29yYXRpb24ocmFuZ2UpO1xuICAgIGNvbnN0IHJlbW92ZUF1dG9jb21wbGV0ZXJEZWNvcmF0aW9uID0gZWRpdG9yID0+IGdldFJ0Y0luc3RhbmNlV2l0aEVycm9yKGVkaXRvcikuYXV0b2NvbXBsZXRlci5yZW1vdmVEZWNvcmF0aW9uKCk7XG5cbiAgICBjb25zdCBnZXRDb250ZW50JDEgPSAoZWRpdG9yLCBhcmdzID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdCA9IGFyZ3MuZm9ybWF0ID8gYXJncy5mb3JtYXQgOiAnaHRtbCc7XG4gICAgICByZXR1cm4gZ2V0U2VsZWN0ZWRDb250ZW50KGVkaXRvciwgZm9ybWF0LCBhcmdzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVtb3ZlRW1wdHkgPSB0ZXh0ID0+IHtcbiAgICAgIGlmICh0ZXh0LmRvbS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmVtb3ZlJDUodGV4dCk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSh0ZXh0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHdhbGtQYXN0Qm9va21hcmsgPSAobm9kZSwgc3RhcnQpID0+IG5vZGUuZmlsdGVyKGVsbSA9PiBCb29rbWFya01hbmFnZXIuaXNCb29rbWFya05vZGUoZWxtLmRvbSkpLmJpbmQoc3RhcnQgPyBuZXh0U2libGluZyA6IHByZXZTaWJsaW5nKTtcbiAgICBjb25zdCBtZXJnZSQxID0gKG91dGVyLCBpbm5lciwgcm5nLCBzdGFydCkgPT4ge1xuICAgICAgY29uc3Qgb3V0ZXJFbG0gPSBvdXRlci5kb207XG4gICAgICBjb25zdCBpbm5lckVsbSA9IGlubmVyLmRvbTtcbiAgICAgIGNvbnN0IG9sZExlbmd0aCA9IHN0YXJ0ID8gb3V0ZXJFbG0ubGVuZ3RoIDogaW5uZXJFbG0ubGVuZ3RoO1xuICAgICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgIG1lcmdlVGV4dE5vZGVzKG91dGVyRWxtLCBpbm5lckVsbSwgZmFsc2UsICFzdGFydCk7XG4gICAgICAgIHJuZy5zZXRTdGFydChpbm5lckVsbSwgb2xkTGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lcmdlVGV4dE5vZGVzKGlubmVyRWxtLCBvdXRlckVsbSwgZmFsc2UsICFzdGFydCk7XG4gICAgICAgIHJuZy5zZXRFbmQoaW5uZXJFbG0sIG9sZExlbmd0aCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBub3JtYWxpemVUZXh0SWZSZXF1aXJlZCA9IChpbm5lciwgc3RhcnQpID0+IHtcbiAgICAgIHBhcmVudChpbm5lcikuZWFjaChyb290ID0+IHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGlubmVyLmRvbTtcbiAgICAgICAgaWYgKHN0YXJ0ICYmIG5lZWRzVG9CZU5ic3BMZWZ0KHJvb3QsIENhcmV0UG9zaXRpb24odGV4dCwgMCkpKSB7XG4gICAgICAgICAgbm9ybWFsaXplV2hpdGVzcGFjZUFmdGVyKHRleHQsIDApO1xuICAgICAgICB9IGVsc2UgaWYgKCFzdGFydCAmJiBuZWVkc1RvQmVOYnNwUmlnaHQocm9vdCwgQ2FyZXRQb3NpdGlvbih0ZXh0LCB0ZXh0Lmxlbmd0aCkpKSB7XG4gICAgICAgICAgbm9ybWFsaXplV2hpdGVzcGFjZUJlZm9yZSh0ZXh0LCB0ZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbWVyZ2VBbmROb3JtYWxpemVUZXh0ID0gKG91dGVyTm9kZSwgaW5uZXJOb2RlLCBybmcsIHN0YXJ0KSA9PiB7XG4gICAgICBvdXRlck5vZGUuYmluZChvdXRlciA9PiB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZXIgPSBzdGFydCA/IG5vcm1hbGl6ZVdoaXRlc3BhY2VCZWZvcmUgOiBub3JtYWxpemVXaGl0ZXNwYWNlQWZ0ZXI7XG4gICAgICAgIG5vcm1hbGl6ZXIob3V0ZXIuZG9tLCBzdGFydCA/IG91dGVyLmRvbS5sZW5ndGggOiAwKTtcbiAgICAgICAgcmV0dXJuIGlubmVyTm9kZS5maWx0ZXIoaXNUZXh0JGIpLm1hcChpbm5lciA9PiBtZXJnZSQxKG91dGVyLCBpbm5lciwgcm5nLCBzdGFydCkpO1xuICAgICAgfSkub3JUaHVuaygoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlubmVyVGV4dE5vZGUgPSB3YWxrUGFzdEJvb2ttYXJrKGlubmVyTm9kZSwgc3RhcnQpLm9yKGlubmVyTm9kZSkuZmlsdGVyKGlzVGV4dCRiKTtcbiAgICAgICAgcmV0dXJuIGlubmVyVGV4dE5vZGUubWFwKGlubmVyID0+IG5vcm1hbGl6ZVRleHRJZlJlcXVpcmVkKGlubmVyLCBzdGFydCkpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBybmdTZXRDb250ZW50ID0gKHJuZywgZnJhZ21lbnQpID0+IHtcbiAgICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSBPcHRpb25hbC5mcm9tKGZyYWdtZW50LmZpcnN0Q2hpbGQpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgICBjb25zdCBsYXN0Q2hpbGQgPSBPcHRpb25hbC5mcm9tKGZyYWdtZW50Lmxhc3RDaGlsZCkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICAgIHJuZy5kZWxldGVDb250ZW50cygpO1xuICAgICAgcm5nLmluc2VydE5vZGUoZnJhZ21lbnQpO1xuICAgICAgY29uc3QgcHJldlRleHQgPSBmaXJzdENoaWxkLmJpbmQocHJldlNpYmxpbmcpLmZpbHRlcihpc1RleHQkYikuYmluZChyZW1vdmVFbXB0eSk7XG4gICAgICBjb25zdCBuZXh0VGV4dCA9IGxhc3RDaGlsZC5iaW5kKG5leHRTaWJsaW5nKS5maWx0ZXIoaXNUZXh0JGIpLmJpbmQocmVtb3ZlRW1wdHkpO1xuICAgICAgbWVyZ2VBbmROb3JtYWxpemVUZXh0KHByZXZUZXh0LCBmaXJzdENoaWxkLCBybmcsIHRydWUpO1xuICAgICAgbWVyZ2VBbmROb3JtYWxpemVUZXh0KG5leHRUZXh0LCBsYXN0Q2hpbGQsIHJuZywgZmFsc2UpO1xuICAgICAgcm5nLmNvbGxhcHNlKGZhbHNlKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldHVwQXJncyQyID0gKGFyZ3MsIGNvbnRlbnQpID0+ICh7XG4gICAgICBmb3JtYXQ6ICdodG1sJyxcbiAgICAgIC4uLmFyZ3MsXG4gICAgICBzZXQ6IHRydWUsXG4gICAgICBzZWxlY3Rpb246IHRydWUsXG4gICAgICBjb250ZW50XG4gICAgfSk7XG4gICAgY29uc3QgY2xlYW5Db250ZW50ID0gKGVkaXRvciwgYXJncykgPT4ge1xuICAgICAgaWYgKGFyZ3MuZm9ybWF0ICE9PSAncmF3Jykge1xuICAgICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgICBjb25zdCBjb250ZXh0QmxvY2sgPSBlZGl0b3IuZG9tLmdldFBhcmVudChybmcuY29tbW9uQW5jZXN0b3JDb250YWluZXIsIGVkaXRvci5kb20uaXNCbG9jayk7XG4gICAgICAgIGNvbnN0IGNvbnRleHRBcmdzID0gY29udGV4dEJsb2NrID8geyBjb250ZXh0OiBjb250ZXh0QmxvY2subm9kZU5hbWUudG9Mb3dlckNhc2UoKSB9IDoge307XG4gICAgICAgIGNvbnN0IG5vZGUgPSBlZGl0b3IucGFyc2VyLnBhcnNlKGFyZ3MuY29udGVudCwge1xuICAgICAgICAgIGZvcmNlZF9yb290X2Jsb2NrOiBmYWxzZSxcbiAgICAgICAgICAuLi5jb250ZXh0QXJncyxcbiAgICAgICAgICAuLi5hcmdzXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gSHRtbFNlcmlhbGl6ZXIoeyB2YWxpZGF0ZTogZmFsc2UgfSwgZWRpdG9yLnNjaGVtYSkuc2VyaWFsaXplKG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFyZ3MuY29udGVudDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldENvbnRlbnQkMSA9IChlZGl0b3IsIGNvbnRlbnQsIGFyZ3MgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdGVkQXJncyA9IHNldHVwQXJncyQyKGFyZ3MsIGNvbnRlbnQpO1xuICAgICAgcHJlUHJvY2Vzc1NldENvbnRlbnQoZWRpdG9yLCBkZWZhdWx0ZWRBcmdzKS5lYWNoKHVwZGF0ZWRBcmdzID0+IHtcbiAgICAgICAgY29uc3QgY2xlYW5lZENvbnRlbnQgPSBjbGVhbkNvbnRlbnQoZWRpdG9yLCB1cGRhdGVkQXJncyk7XG4gICAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICAgIHJuZ1NldENvbnRlbnQocm5nLCBybmcuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNsZWFuZWRDb250ZW50KSk7XG4gICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG4gICAgICAgIHNjcm9sbFJhbmdlSW50b1ZpZXcoZWRpdG9yLCBybmcpO1xuICAgICAgICBwb3N0UHJvY2Vzc1NldENvbnRlbnQoZWRpdG9yLCBjbGVhbmVkQ29udGVudCwgdXBkYXRlZEFyZ3MpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGRlbGV0ZUZyb21DYWxsYmFja01hcCA9IChjYWxsYmFja01hcCwgc2VsZWN0b3IsIGNhbGxiYWNrKSA9PiB7XG4gICAgICBpZiAoaGFzJDIoY2FsbGJhY2tNYXAsIHNlbGVjdG9yKSkge1xuICAgICAgICBjb25zdCBuZXdDYWxsYmFja3MgPSBmaWx0ZXIkNShjYWxsYmFja01hcFtzZWxlY3Rvcl0sIGNiID0+IGNiICE9PSBjYWxsYmFjayk7XG4gICAgICAgIGlmIChuZXdDYWxsYmFja3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgZGVsZXRlIGNhbGxiYWNrTWFwW3NlbGVjdG9yXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFja01hcFtzZWxlY3Rvcl0gPSBuZXdDYWxsYmFja3M7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBTZWxlY3RvckNoYW5nZWQgPSAoZG9tLCBlZGl0b3IpID0+IHtcbiAgICAgIGxldCBzZWxlY3RvckNoYW5nZWREYXRhO1xuICAgICAgbGV0IGN1cnJlbnRTZWxlY3RvcnM7XG4gICAgICBjb25zdCBmaW5kTWF0Y2hpbmdOb2RlID0gKHNlbGVjdG9yLCBub2RlcykgPT4gZmluZCQyKG5vZGVzLCBub2RlID0+IGRvbS5pcyhub2RlLCBzZWxlY3RvcikpO1xuICAgICAgY29uc3QgZ2V0UGFyZW50cyA9IGVsZW0gPT4gZG9tLmdldFBhcmVudHMoZWxlbSwgdW5kZWZpbmVkLCBkb20uZ2V0Um9vdCgpKTtcbiAgICAgIGNvbnN0IHNldHVwID0gKCkgPT4ge1xuICAgICAgICBzZWxlY3RvckNoYW5nZWREYXRhID0ge307XG4gICAgICAgIGN1cnJlbnRTZWxlY3RvcnMgPSB7fTtcbiAgICAgICAgZWRpdG9yLm9uKCdOb2RlQ2hhbmdlJywgZSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IGUuZWxlbWVudDtcbiAgICAgICAgICBjb25zdCBwYXJlbnRzID0gZ2V0UGFyZW50cyhub2RlKTtcbiAgICAgICAgICBjb25zdCBtYXRjaGVkU2VsZWN0b3JzID0ge307XG4gICAgICAgICAgZWFjaCRkKHNlbGVjdG9yQ2hhbmdlZERhdGEsIChjYWxsYmFja3MsIHNlbGVjdG9yKSA9PiB7XG4gICAgICAgICAgICBmaW5kTWF0Y2hpbmdOb2RlKHNlbGVjdG9yLCBwYXJlbnRzKS5lYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRTZWxlY3RvcnNbc2VsZWN0b3JdKSB7XG4gICAgICAgICAgICAgICAgZWFjaCRlKGNhbGxiYWNrcywgY2FsbGJhY2sgPT4ge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2sodHJ1ZSwge1xuICAgICAgICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50c1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdG9yc1tzZWxlY3Rvcl0gPSBjYWxsYmFja3M7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbWF0Y2hlZFNlbGVjdG9yc1tzZWxlY3Rvcl0gPSBjYWxsYmFja3M7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBlYWNoJGQoY3VycmVudFNlbGVjdG9ycywgKGNhbGxiYWNrcywgc2VsZWN0b3IpID0+IHtcbiAgICAgICAgICAgIGlmICghbWF0Y2hlZFNlbGVjdG9yc1tzZWxlY3Rvcl0pIHtcbiAgICAgICAgICAgICAgZGVsZXRlIGN1cnJlbnRTZWxlY3RvcnNbc2VsZWN0b3JdO1xuICAgICAgICAgICAgICBlYWNoJGUoY2FsbGJhY2tzLCBjYWxsYmFjayA9PiB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZmFsc2UsIHtcbiAgICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgICBzZWxlY3RvcixcbiAgICAgICAgICAgICAgICAgIHBhcmVudHNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNlbGVjdG9yQ2hhbmdlZFdpdGhVbmJpbmQ6IChzZWxlY3RvciwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICBpZiAoIXNlbGVjdG9yQ2hhbmdlZERhdGEpIHtcbiAgICAgICAgICAgIHNldHVwKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghc2VsZWN0b3JDaGFuZ2VkRGF0YVtzZWxlY3Rvcl0pIHtcbiAgICAgICAgICAgIHNlbGVjdG9yQ2hhbmdlZERhdGFbc2VsZWN0b3JdID0gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlbGVjdG9yQ2hhbmdlZERhdGFbc2VsZWN0b3JdLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgIGZpbmRNYXRjaGluZ05vZGUoc2VsZWN0b3IsIGdldFBhcmVudHMoZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCgpKSkuZWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBjdXJyZW50U2VsZWN0b3JzW3NlbGVjdG9yXSA9IHNlbGVjdG9yQ2hhbmdlZERhdGFbc2VsZWN0b3JdO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB1bmJpbmQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgZGVsZXRlRnJvbUNhbGxiYWNrTWFwKHNlbGVjdG9yQ2hhbmdlZERhdGEsIHNlbGVjdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIGRlbGV0ZUZyb21DYWxsYmFja01hcChjdXJyZW50U2VsZWN0b3JzLCBzZWxlY3RvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGlzQXR0YWNoZWRUb0RvbSA9IG5vZGUgPT4ge1xuICAgICAgcmV0dXJuICEhKG5vZGUgJiYgbm9kZS5vd25lckRvY3VtZW50KSAmJiBjb250YWlucyhTdWdhckVsZW1lbnQuZnJvbURvbShub2RlLm93bmVyRG9jdW1lbnQpLCBTdWdhckVsZW1lbnQuZnJvbURvbShub2RlKSk7XG4gICAgfTtcbiAgICBjb25zdCBpc1ZhbGlkUmFuZ2UgPSBybmcgPT4ge1xuICAgICAgaWYgKCFybmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGlzQXR0YWNoZWRUb0RvbShybmcuc3RhcnRDb250YWluZXIpICYmIGlzQXR0YWNoZWRUb0RvbShybmcuZW5kQ29udGFpbmVyKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IEVkaXRvclNlbGVjdGlvbiA9IChkb20sIHdpbiwgc2VyaWFsaXplciwgZWRpdG9yKSA9PiB7XG4gICAgICBsZXQgc2VsZWN0ZWRSYW5nZTtcbiAgICAgIGxldCBleHBsaWNpdFJhbmdlO1xuICAgICAgY29uc3Qge3NlbGVjdG9yQ2hhbmdlZFdpdGhVbmJpbmR9ID0gU2VsZWN0b3JDaGFuZ2VkKGRvbSwgZWRpdG9yKTtcbiAgICAgIGNvbnN0IHNldEN1cnNvckxvY2F0aW9uID0gKG5vZGUsIG9mZnNldCkgPT4ge1xuICAgICAgICBjb25zdCBybmcgPSBkb20uY3JlYXRlUm5nKCk7XG4gICAgICAgIGlmIChpc05vbk51bGxhYmxlKG5vZGUpICYmIGlzTm9uTnVsbGFibGUob2Zmc2V0KSkge1xuICAgICAgICAgIHJuZy5zZXRTdGFydChub2RlLCBvZmZzZXQpO1xuICAgICAgICAgIHJuZy5zZXRFbmQobm9kZSwgb2Zmc2V0KTtcbiAgICAgICAgICBzZXRSbmcocm5nKTtcbiAgICAgICAgICBjb2xsYXBzZShmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbW92ZUVuZFBvaW50KGRvbSwgcm5nLCBlZGl0b3IuZ2V0Qm9keSgpLCB0cnVlKTtcbiAgICAgICAgICBzZXRSbmcocm5nKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldENvbnRlbnQgPSBhcmdzID0+IGdldENvbnRlbnQkMShlZGl0b3IsIGFyZ3MpO1xuICAgICAgY29uc3Qgc2V0Q29udGVudCA9IChjb250ZW50LCBhcmdzKSA9PiBzZXRDb250ZW50JDEoZWRpdG9yLCBjb250ZW50LCBhcmdzKTtcbiAgICAgIGNvbnN0IGdldFN0YXJ0JDEgPSByZWFsID0+IGdldFN0YXJ0KGVkaXRvci5nZXRCb2R5KCksIGdldFJuZyQxKCksIHJlYWwpO1xuICAgICAgY29uc3QgZ2V0RW5kID0gcmVhbCA9PiBnZXRFbmQkMShlZGl0b3IuZ2V0Qm9keSgpLCBnZXRSbmckMSgpLCByZWFsKTtcbiAgICAgIGNvbnN0IGdldEJvb2ttYXJrID0gKHR5cGUsIG5vcm1hbGl6ZWQpID0+IGJvb2ttYXJrTWFuYWdlci5nZXRCb29rbWFyayh0eXBlLCBub3JtYWxpemVkKTtcbiAgICAgIGNvbnN0IG1vdmVUb0Jvb2ttYXJrID0gYm9va21hcmsgPT4gYm9va21hcmtNYW5hZ2VyLm1vdmVUb0Jvb2ttYXJrKGJvb2ttYXJrKTtcbiAgICAgIGNvbnN0IHNlbGVjdCQxID0gKG5vZGUsIGNvbnRlbnQpID0+IHtcbiAgICAgICAgc2VsZWN0KGRvbSwgbm9kZSwgY29udGVudCkuZWFjaChzZXRSbmcpO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0NvbGxhcHNlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgcm5nID0gZ2V0Um5nJDEoKSwgc2VsID0gZ2V0U2VsKCk7XG4gICAgICAgIGlmICghcm5nIHx8IHJuZy5pdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChybmcuY29tcGFyZUVuZFBvaW50cykge1xuICAgICAgICAgIHJldHVybiBybmcuY29tcGFyZUVuZFBvaW50cygnU3RhcnRUb0VuZCcsIHJuZykgPT09IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFzZWwgfHwgcm5nLmNvbGxhcHNlZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0VkaXRhYmxlID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBybmcgPSBnZXRSbmckMSgpO1xuICAgICAgICBjb25zdCBmYWtlU2VsZWN0ZWRFbGVtZW50cyA9IGVkaXRvci5nZXRCb2R5KCkucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbWNlLXNlbGVjdGVkPVwiMVwiXScpO1xuICAgICAgICBpZiAoZmFrZVNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJldHVybiBmb3JhbGwoZmFrZVNlbGVjdGVkRWxlbWVudHMsIGVsID0+IGRvbS5pc0VkaXRhYmxlKGVsLnBhcmVudEVsZW1lbnQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChybmcuc3RhcnRDb250YWluZXIgPT09IHJuZy5lbmRDb250YWluZXIpIHtcbiAgICAgICAgICByZXR1cm4gZG9tLmlzRWRpdGFibGUocm5nLnN0YXJ0Q29udGFpbmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZG9tLmlzRWRpdGFibGUocm5nLnN0YXJ0Q29udGFpbmVyKSAmJiBkb20uaXNFZGl0YWJsZShybmcuZW5kQ29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbGxhcHNlID0gdG9TdGFydCA9PiB7XG4gICAgICAgIGNvbnN0IHJuZyA9IGdldFJuZyQxKCk7XG4gICAgICAgIHJuZy5jb2xsYXBzZSghIXRvU3RhcnQpO1xuICAgICAgICBzZXRSbmcocm5nKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRTZWwgPSAoKSA9PiB3aW4uZ2V0U2VsZWN0aW9uID8gd2luLmdldFNlbGVjdGlvbigpIDogd2luLmRvY3VtZW50LnNlbGVjdGlvbjtcbiAgICAgIGNvbnN0IGdldFJuZyQxID0gKCkgPT4ge1xuICAgICAgICBsZXQgcm5nO1xuICAgICAgICBjb25zdCB0cnlDb21wYXJlQm91bmRhcnlQb2ludHMgPSAoaG93LCBzb3VyY2VSYW5nZSwgZGVzdGluYXRpb25SYW5nZSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlUmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKGhvdywgZGVzdGluYXRpb25SYW5nZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGRvYyA9IHdpbi5kb2N1bWVudDtcbiAgICAgICAgaWYgKGlzTm9uTnVsbGFibGUoZWRpdG9yLmJvb2ttYXJrKSAmJiAhaGFzRm9jdXMoZWRpdG9yKSkge1xuICAgICAgICAgIGNvbnN0IGJvb2ttYXJrID0gZ2V0Um5nKGVkaXRvcik7XG4gICAgICAgICAgaWYgKGJvb2ttYXJrLmlzU29tZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gYm9va21hcmsubWFwKHIgPT4gcHJvY2Vzc1JhbmdlcyhlZGl0b3IsIFtyXSlbMF0pLmdldE9yKGRvYy5jcmVhdGVSYW5nZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBnZXRTZWwoKTtcbiAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmICFpc1Jlc3RyaWN0ZWROb2RlKHNlbGVjdGlvbi5hbmNob3JOb2RlKSkge1xuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xuICAgICAgICAgICAgICBybmcgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJuZyA9IGRvYy5jcmVhdGVSYW5nZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm5nID0gcHJvY2Vzc1JhbmdlcyhlZGl0b3IsIFtybmddKVswXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFybmcpIHtcbiAgICAgICAgICBybmcgPSBkb2MuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNEb2N1bWVudCQxKHJuZy5zdGFydENvbnRhaW5lcikgJiYgcm5nLmNvbGxhcHNlZCkge1xuICAgICAgICAgIGNvbnN0IGVsbSA9IGRvbS5nZXRSb290KCk7XG4gICAgICAgICAgcm5nLnNldFN0YXJ0KGVsbSwgMCk7XG4gICAgICAgICAgcm5nLnNldEVuZChlbG0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxlY3RlZFJhbmdlICYmIGV4cGxpY2l0UmFuZ2UpIHtcbiAgICAgICAgICBpZiAodHJ5Q29tcGFyZUJvdW5kYXJ5UG9pbnRzKHJuZy5TVEFSVF9UT19TVEFSVCwgcm5nLCBzZWxlY3RlZFJhbmdlKSA9PT0gMCAmJiB0cnlDb21wYXJlQm91bmRhcnlQb2ludHMocm5nLkVORF9UT19FTkQsIHJuZywgc2VsZWN0ZWRSYW5nZSkgPT09IDApIHtcbiAgICAgICAgICAgIHJuZyA9IGV4cGxpY2l0UmFuZ2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgZXhwbGljaXRSYW5nZSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBybmc7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0Um5nID0gKHJuZywgZm9yd2FyZCkgPT4ge1xuICAgICAgICBpZiAoIWlzVmFsaWRSYW5nZShybmcpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbCA9IGdldFNlbCgpO1xuICAgICAgICBjb25zdCBldnQgPSBlZGl0b3IuZGlzcGF0Y2goJ1NldFNlbGVjdGlvblJhbmdlJywge1xuICAgICAgICAgIHJhbmdlOiBybmcsXG4gICAgICAgICAgZm9yd2FyZFxuICAgICAgICB9KTtcbiAgICAgICAgcm5nID0gZXZ0LnJhbmdlO1xuICAgICAgICBpZiAoc2VsKSB7XG4gICAgICAgICAgZXhwbGljaXRSYW5nZSA9IHJuZztcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICAgICAgc2VsLmFkZFJhbmdlKHJuZyk7XG4gICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZvcndhcmQgPT09IGZhbHNlICYmIHNlbC5leHRlbmQpIHtcbiAgICAgICAgICAgIHNlbC5jb2xsYXBzZShybmcuZW5kQ29udGFpbmVyLCBybmcuZW5kT2Zmc2V0KTtcbiAgICAgICAgICAgIHNlbC5leHRlbmQocm5nLnN0YXJ0Q29udGFpbmVyLCBybmcuc3RhcnRPZmZzZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxlY3RlZFJhbmdlID0gc2VsLnJhbmdlQ291bnQgPiAwID8gc2VsLmdldFJhbmdlQXQoMCkgOiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcm5nLmNvbGxhcHNlZCAmJiBybmcuc3RhcnRDb250YWluZXIgPT09IHJuZy5lbmRDb250YWluZXIgJiYgKHNlbCA9PT0gbnVsbCB8fCBzZWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbC5zZXRCYXNlQW5kRXh0ZW50KSkge1xuICAgICAgICAgIGlmIChybmcuZW5kT2Zmc2V0IC0gcm5nLnN0YXJ0T2Zmc2V0IDwgMikge1xuICAgICAgICAgICAgaWYgKHJuZy5zdGFydENvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHJuZy5zdGFydENvbnRhaW5lci5jaGlsZE5vZGVzW3JuZy5zdGFydE9mZnNldF07XG4gICAgICAgICAgICAgIGlmIChub2RlICYmIG5vZGUubm9kZU5hbWUgPT09ICdJTUcnKSB7XG4gICAgICAgICAgICAgICAgc2VsLnNldEJhc2VBbmRFeHRlbnQocm5nLnN0YXJ0Q29udGFpbmVyLCBybmcuc3RhcnRPZmZzZXQsIHJuZy5lbmRDb250YWluZXIsIHJuZy5lbmRPZmZzZXQpO1xuICAgICAgICAgICAgICAgIGlmIChzZWwuYW5jaG9yTm9kZSAhPT0gcm5nLnN0YXJ0Q29udGFpbmVyIHx8IHNlbC5mb2N1c05vZGUgIT09IHJuZy5lbmRDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgIHNlbC5zZXRCYXNlQW5kRXh0ZW50KG5vZGUsIDAsIG5vZGUsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ0FmdGVyU2V0U2VsZWN0aW9uUmFuZ2UnLCB7XG4gICAgICAgICAgcmFuZ2U6IHJuZyxcbiAgICAgICAgICBmb3J3YXJkXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldE5vZGUgPSBlbG0gPT4ge1xuICAgICAgICBzZXRDb250ZW50KGRvbS5nZXRPdXRlckhUTUwoZWxtKSk7XG4gICAgICAgIHJldHVybiBlbG07XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0Tm9kZSQxID0gKCkgPT4gZ2V0Tm9kZShlZGl0b3IuZ2V0Qm9keSgpLCBnZXRSbmckMSgpKTtcbiAgICAgIGNvbnN0IGdldFNlbGVjdGVkQmxvY2tzJDEgPSAoc3RhcnRFbG0sIGVuZEVsbSkgPT4gZ2V0U2VsZWN0ZWRCbG9ja3MoZG9tLCBnZXRSbmckMSgpLCBzdGFydEVsbSwgZW5kRWxtKTtcbiAgICAgIGNvbnN0IGlzRm9yd2FyZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsID0gZ2V0U2VsKCk7XG4gICAgICAgIGNvbnN0IGFuY2hvck5vZGUgPSBzZWwgPT09IG51bGwgfHwgc2VsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWwuYW5jaG9yTm9kZTtcbiAgICAgICAgY29uc3QgZm9jdXNOb2RlID0gc2VsID09PSBudWxsIHx8IHNlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsLmZvY3VzTm9kZTtcbiAgICAgICAgaWYgKCFzZWwgfHwgIWFuY2hvck5vZGUgfHwgIWZvY3VzTm9kZSB8fCBpc1Jlc3RyaWN0ZWROb2RlKGFuY2hvck5vZGUpIHx8IGlzUmVzdHJpY3RlZE5vZGUoZm9jdXNOb2RlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFuY2hvclJhbmdlID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgICBjb25zdCBmb2N1c1JhbmdlID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGFuY2hvclJhbmdlLnNldFN0YXJ0KGFuY2hvck5vZGUsIHNlbC5hbmNob3JPZmZzZXQpO1xuICAgICAgICAgIGFuY2hvclJhbmdlLmNvbGxhcHNlKHRydWUpO1xuICAgICAgICAgIGZvY3VzUmFuZ2Uuc2V0U3RhcnQoZm9jdXNOb2RlLCBzZWwuZm9jdXNPZmZzZXQpO1xuICAgICAgICAgIGZvY3VzUmFuZ2UuY29sbGFwc2UodHJ1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYW5jaG9yUmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKGFuY2hvclJhbmdlLlNUQVJUX1RPX1NUQVJULCBmb2N1c1JhbmdlKSA8PSAwO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgcm5nID0gZ2V0Um5nJDEoKTtcbiAgICAgICAgY29uc3Qgc2VsID0gZ2V0U2VsKCk7XG4gICAgICAgIGlmICghaGFzTXVsdGlwbGVSYW5nZXMoc2VsKSAmJiBoYXNBbnlSYW5nZXMoZWRpdG9yKSkge1xuICAgICAgICAgIGNvbnN0IG5vcm1SbmcgPSBub3JtYWxpemUkMihkb20sIHJuZyk7XG4gICAgICAgICAgbm9ybVJuZy5lYWNoKG5vcm1SbmcgPT4ge1xuICAgICAgICAgICAgc2V0Um5nKG5vcm1SbmcsIGlzRm9yd2FyZCgpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gbm9ybVJuZy5nZXRPcihybmcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBybmc7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VsZWN0b3JDaGFuZ2VkID0gKHNlbGVjdG9yLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBzZWxlY3RvckNoYW5nZWRXaXRoVW5iaW5kKHNlbGVjdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiBleHBvcnRzO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldFNjcm9sbENvbnRhaW5lciA9ICgpID0+IHtcbiAgICAgICAgbGV0IHNjcm9sbENvbnRhaW5lcjtcbiAgICAgICAgbGV0IG5vZGUgPSBkb20uZ2V0Um9vdCgpO1xuICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlLm5vZGVOYW1lICE9PSAnQk9EWScpIHtcbiAgICAgICAgICBpZiAobm9kZS5zY3JvbGxIZWlnaHQgPiBub2RlLmNsaWVudEhlaWdodCkge1xuICAgICAgICAgICAgc2Nyb2xsQ29udGFpbmVyID0gbm9kZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY3JvbGxDb250YWluZXI7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2Nyb2xsSW50b1ZpZXcgPSAoZWxtLCBhbGlnblRvVG9wKSA9PiB7XG4gICAgICAgIGlmIChpc05vbk51bGxhYmxlKGVsbSkpIHtcbiAgICAgICAgICBzY3JvbGxFbGVtZW50SW50b1ZpZXcoZWRpdG9yLCBlbG0sIGFsaWduVG9Ub3ApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjcm9sbFJhbmdlSW50b1ZpZXcoZWRpdG9yLCBnZXRSbmckMSgpLCBhbGlnblRvVG9wKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBsYWNlQ2FyZXRBdCA9IChjbGllbnRYLCBjbGllbnRZKSA9PiBzZXRSbmcoZnJvbVBvaW50KGNsaWVudFgsIGNsaWVudFksIGVkaXRvci5nZXREb2MoKSkpO1xuICAgICAgY29uc3QgZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBybmcgPSBnZXRSbmckMSgpO1xuICAgICAgICByZXR1cm4gcm5nLmNvbGxhcHNlZCA/IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQocm5nKS5nZXRDbGllbnRSZWN0cygpWzBdIDogcm5nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICAgIHdpbiA9IHNlbGVjdGVkUmFuZ2UgPSBleHBsaWNpdFJhbmdlID0gbnVsbDtcbiAgICAgICAgY29udHJvbFNlbGVjdGlvbi5kZXN0cm95KCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZXhwYW5kID0gKG9wdGlvbnMgPSB7IHR5cGU6ICd3b3JkJyB9KSA9PiBzZXRSbmcoUmFuZ2VVdGlscyhkb20pLmV4cGFuZChnZXRSbmckMSgpLCBvcHRpb25zKSk7XG4gICAgICBjb25zdCBleHBvcnRzID0ge1xuICAgICAgICBkb20sXG4gICAgICAgIHdpbixcbiAgICAgICAgc2VyaWFsaXplcixcbiAgICAgICAgZWRpdG9yLFxuICAgICAgICBleHBhbmQsXG4gICAgICAgIGNvbGxhcHNlLFxuICAgICAgICBzZXRDdXJzb3JMb2NhdGlvbixcbiAgICAgICAgZ2V0Q29udGVudCxcbiAgICAgICAgc2V0Q29udGVudCxcbiAgICAgICAgZ2V0Qm9va21hcmssXG4gICAgICAgIG1vdmVUb0Jvb2ttYXJrLFxuICAgICAgICBzZWxlY3Q6IHNlbGVjdCQxLFxuICAgICAgICBpc0NvbGxhcHNlZCxcbiAgICAgICAgaXNFZGl0YWJsZSxcbiAgICAgICAgaXNGb3J3YXJkLFxuICAgICAgICBzZXROb2RlLFxuICAgICAgICBnZXROb2RlOiBnZXROb2RlJDEsXG4gICAgICAgIGdldFNlbCxcbiAgICAgICAgc2V0Um5nLFxuICAgICAgICBnZXRSbmc6IGdldFJuZyQxLFxuICAgICAgICBnZXRTdGFydDogZ2V0U3RhcnQkMSxcbiAgICAgICAgZ2V0RW5kLFxuICAgICAgICBnZXRTZWxlY3RlZEJsb2NrczogZ2V0U2VsZWN0ZWRCbG9ja3MkMSxcbiAgICAgICAgbm9ybWFsaXplLFxuICAgICAgICBzZWxlY3RvckNoYW5nZWQsXG4gICAgICAgIHNlbGVjdG9yQ2hhbmdlZFdpdGhVbmJpbmQsXG4gICAgICAgIGdldFNjcm9sbENvbnRhaW5lcixcbiAgICAgICAgc2Nyb2xsSW50b1ZpZXcsXG4gICAgICAgIHBsYWNlQ2FyZXRBdCxcbiAgICAgICAgZ2V0Qm91bmRpbmdDbGllbnRSZWN0LFxuICAgICAgICBkZXN0cm95XG4gICAgICB9O1xuICAgICAgY29uc3QgYm9va21hcmtNYW5hZ2VyID0gQm9va21hcmtNYW5hZ2VyKGV4cG9ydHMpO1xuICAgICAgY29uc3QgY29udHJvbFNlbGVjdGlvbiA9IENvbnRyb2xTZWxlY3Rpb24oZXhwb3J0cywgZWRpdG9yKTtcbiAgICAgIGV4cG9ydHMuYm9va21hcmtNYW5hZ2VyID0gYm9va21hcmtNYW5hZ2VyO1xuICAgICAgZXhwb3J0cy5jb250cm9sU2VsZWN0aW9uID0gY29udHJvbFNlbGVjdGlvbjtcbiAgICAgIHJldHVybiBleHBvcnRzO1xuICAgIH07XG5cbiAgICBjb25zdCByZWdpc3RlciQzID0gKGh0bWxQYXJzZXIsIHNldHRpbmdzLCBkb20pID0+IHtcbiAgICAgIGh0bWxQYXJzZXIuYWRkQXR0cmlidXRlRmlsdGVyKCdkYXRhLW1jZS10YWJpbmRleCcsIChub2RlcywgbmFtZSkgPT4ge1xuICAgICAgICBsZXQgaSA9IG5vZGVzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgICBub2RlLmF0dHIoJ3RhYmluZGV4Jywgbm9kZS5hdHRyKCdkYXRhLW1jZS10YWJpbmRleCcpKTtcbiAgICAgICAgICBub2RlLmF0dHIobmFtZSwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaHRtbFBhcnNlci5hZGRBdHRyaWJ1dGVGaWx0ZXIoJ3NyYyxocmVmLHN0eWxlJywgKG5vZGVzLCBuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGludGVybmFsTmFtZSA9ICdkYXRhLW1jZS0nICsgbmFtZTtcbiAgICAgICAgY29uc3QgdXJsQ29udmVydGVyID0gc2V0dGluZ3MudXJsX2NvbnZlcnRlcjtcbiAgICAgICAgY29uc3QgdXJsQ29udmVydGVyU2NvcGUgPSBzZXR0aW5ncy51cmxfY29udmVydGVyX3Njb3BlO1xuICAgICAgICBsZXQgaSA9IG5vZGVzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgICBsZXQgdmFsdWUgPSBub2RlLmF0dHIoaW50ZXJuYWxOYW1lKTtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbm9kZS5hdHRyKG5hbWUsIHZhbHVlLmxlbmd0aCA+IDAgPyB2YWx1ZSA6IG51bGwpO1xuICAgICAgICAgICAgbm9kZS5hdHRyKGludGVybmFsTmFtZSwgbnVsbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gbm9kZS5hdHRyKG5hbWUpO1xuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdzdHlsZScpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBkb20uc2VyaWFsaXplU3R5bGUoZG9tLnBhcnNlU3R5bGUodmFsdWUpLCBub2RlLm5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh1cmxDb252ZXJ0ZXIpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSB1cmxDb252ZXJ0ZXIuY2FsbCh1cmxDb252ZXJ0ZXJTY29wZSwgdmFsdWUsIG5hbWUsIG5vZGUubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlLmF0dHIobmFtZSwgdmFsdWUubGVuZ3RoID4gMCA/IHZhbHVlIDogbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGh0bWxQYXJzZXIuYWRkQXR0cmlidXRlRmlsdGVyKCdjbGFzcycsIG5vZGVzID0+IHtcbiAgICAgICAgbGV0IGkgPSBub2Rlcy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgbGV0IHZhbHVlID0gbm9kZS5hdHRyKCdjbGFzcycpO1xuICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8oPzpefFxccyltY2UtaXRlbS1cXHcrKD8hXFxTKS9nLCAnJyk7XG4gICAgICAgICAgICBub2RlLmF0dHIoJ2NsYXNzJywgdmFsdWUubGVuZ3RoID4gMCA/IHZhbHVlIDogbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGh0bWxQYXJzZXIuYWRkQXR0cmlidXRlRmlsdGVyKCdkYXRhLW1jZS10eXBlJywgKG5vZGVzLCBuYW1lLCBhcmdzKSA9PiB7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICAgIGlmIChub2RlLmF0dHIoJ2RhdGEtbWNlLXR5cGUnKSA9PT0gJ2Jvb2ttYXJrJyAmJiAhYXJncy5jbGVhbnVwKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNDaGlsZHJlbiA9IE9wdGlvbmFsLmZyb20obm9kZS5maXJzdENoaWxkKS5leGlzdHMoZmlyc3RDaGlsZCA9PiB7XG4gICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgcmV0dXJuICFpc1p3c3AkMSgoX2EgPSBmaXJzdENoaWxkLnZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChoYXNDaGlsZHJlbikge1xuICAgICAgICAgICAgICBub2RlLnVud3JhcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaHRtbFBhcnNlci5hZGROb2RlRmlsdGVyKCdub3NjcmlwdCcsIG5vZGVzID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBsZXQgaSA9IG5vZGVzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpXS5maXJzdENoaWxkO1xuICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICBub2RlLnZhbHVlID0gRW50aXRpZXMuZGVjb2RlKChfYSA9IG5vZGUudmFsdWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaHRtbFBhcnNlci5hZGROb2RlRmlsdGVyKCdzY3JpcHQsc3R5bGUnLCAobm9kZXMsIG5hbWUpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCB0cmltID0gdmFsdWUgPT4ge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC8oPCEtLVxcW0NEQVRBXFxbfFxcXVxcXS0tPikvZywgJ1xcbicpLnJlcGxhY2UoL15bXFxyXFxuXSp8W1xcclxcbl0qJC9nLCAnJykucmVwbGFjZSgvXlxccyooKDwhLS0pPyhcXHMqXFwvXFwvKT9cXHMqPCFcXFtDREFUQVxcW3woPCEtLVxccyopP1xcL1xcKlxccyo8IVxcW0NEQVRBXFxbXFxzKlxcKlxcL3woXFwvXFwvKT9cXHMqPCEtLXxcXC9cXCpcXHMqPCEtLVxccypcXCpcXC8pXFxzKltcXHJcXG5dKi9naSwgJycpLnJlcGxhY2UoL1xccyooXFwvXFwqXFxzKlxcXVxcXT5cXHMqXFwqXFwvKC0tPik/fFxccypcXC9cXC9cXHMqXFxdXFxdPigtLT4pP3xcXC9cXC9cXHMqKC0tPik/fFxcXVxcXT58XFwvXFwqXFxzKi0tPlxccypcXCpcXC98XFxzKi0tPlxccyopXFxzKiQvZywgJycpO1xuICAgICAgICB9O1xuICAgICAgICBsZXQgaSA9IG5vZGVzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgICBjb25zdCBmaXJzdENoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gKF9hID0gZmlyc3RDaGlsZCA9PT0gbnVsbCB8fCBmaXJzdENoaWxkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBmaXJzdENoaWxkLnZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ3NjcmlwdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBub2RlLmF0dHIoJ3R5cGUnKTtcbiAgICAgICAgICAgIGlmICh0eXBlKSB7XG4gICAgICAgICAgICAgIG5vZGUuYXR0cigndHlwZScsIHR5cGUgPT09ICdtY2Utbm8vdHlwZScgPyBudWxsIDogdHlwZS5yZXBsYWNlKC9ebWNlXFwtLywgJycpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5lbGVtZW50X2Zvcm1hdCA9PT0gJ3hodG1sJyAmJiBmaXJzdENoaWxkICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgZmlyc3RDaGlsZC52YWx1ZSA9ICcvLyA8IVtDREFUQVtcXG4nICsgdHJpbSh2YWx1ZSkgKyAnXFxuLy8gXV0+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNldHRpbmdzLmVsZW1lbnRfZm9ybWF0ID09PSAneGh0bWwnICYmIGZpcnN0Q2hpbGQgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBmaXJzdENoaWxkLnZhbHVlID0gJzwhLS1cXG4nICsgdHJpbSh2YWx1ZSkgKyAnXFxuLS0+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaHRtbFBhcnNlci5hZGROb2RlRmlsdGVyKCcjY29tbWVudCcsIG5vZGVzID0+IHtcbiAgICAgICAgbGV0IGkgPSBub2Rlcy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBub2RlLnZhbHVlO1xuICAgICAgICAgIGlmIChzZXR0aW5ncy5wcmVzZXJ2ZV9jZGF0YSAmJiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhbHVlLmluZGV4T2YoJ1tDREFUQVsnKSkgPT09IDApIHtcbiAgICAgICAgICAgIG5vZGUubmFtZSA9ICcjY2RhdGEnO1xuICAgICAgICAgICAgbm9kZS50eXBlID0gNDtcbiAgICAgICAgICAgIG5vZGUudmFsdWUgPSBkb20uZGVjb2RlKHZhbHVlLnJlcGxhY2UoL15cXFtDREFUQVxcW3xcXF1cXF0kL2csICcnKSk7XG4gICAgICAgICAgfSBlbHNlIGlmICgodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhbHVlLmluZGV4T2YoJ21jZTpwcm90ZWN0ZWQgJykpID09PSAwKSB7XG4gICAgICAgICAgICBub2RlLm5hbWUgPSAnI3RleHQnO1xuICAgICAgICAgICAgbm9kZS50eXBlID0gMztcbiAgICAgICAgICAgIG5vZGUucmF3ID0gdHJ1ZTtcbiAgICAgICAgICAgIG5vZGUudmFsdWUgPSB1bmVzY2FwZSh2YWx1ZSkuc3Vic3RyKDE0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaHRtbFBhcnNlci5hZGROb2RlRmlsdGVyKCd4bWw6bmFtZXNwYWNlLGlucHV0JywgKG5vZGVzLCBuYW1lKSA9PiB7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09IDcpIHtcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChuYW1lID09PSAnaW5wdXQnICYmICFub2RlLmF0dHIoJ3R5cGUnKSkge1xuICAgICAgICAgICAgICBub2RlLmF0dHIoJ3R5cGUnLCAndGV4dCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBodG1sUGFyc2VyLmFkZEF0dHJpYnV0ZUZpbHRlcignZGF0YS1tY2UtdHlwZScsIG5vZGVzID0+IHtcbiAgICAgICAgZWFjaCRlKG5vZGVzLCBub2RlID0+IHtcbiAgICAgICAgICBpZiAobm9kZS5hdHRyKCdkYXRhLW1jZS10eXBlJykgPT09ICdmb3JtYXQtY2FyZXQnKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5pc0VtcHR5KGh0bWxQYXJzZXIuc2NoZW1hLmdldE5vbkVtcHR5RWxlbWVudHMoKSkpIHtcbiAgICAgICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5vZGUudW53cmFwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgaHRtbFBhcnNlci5hZGRBdHRyaWJ1dGVGaWx0ZXIoJ2RhdGEtbWNlLXNyYyxkYXRhLW1jZS1ocmVmLGRhdGEtbWNlLXN0eWxlLCcgKyAnZGF0YS1tY2Utc2VsZWN0ZWQsZGF0YS1tY2UtZXhwYW5kbyxkYXRhLW1jZS1ibG9jaywnICsgJ2RhdGEtbWNlLXR5cGUsZGF0YS1tY2UtcmVzaXplLGRhdGEtbWNlLXBsYWNlaG9sZGVyJywgKG5vZGVzLCBuYW1lKSA9PiB7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgbm9kZXNbaV0uYXR0cihuYW1lLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoc2V0dGluZ3MucmVtb3ZlX3RyYWlsaW5nX2Jycykge1xuICAgICAgICBhZGROb2RlRmlsdGVyKHNldHRpbmdzLCBodG1sUGFyc2VyLCBodG1sUGFyc2VyLnNjaGVtYSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB0cmltVHJhaWxpbmdCciA9IHJvb3ROb2RlID0+IHtcbiAgICAgIGNvbnN0IGlzQnIgPSBub2RlID0+IHtcbiAgICAgICAgcmV0dXJuIChub2RlID09PSBudWxsIHx8IG5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG5vZGUubmFtZSkgPT09ICdicic7XG4gICAgICB9O1xuICAgICAgY29uc3QgYnJOb2RlMSA9IHJvb3ROb2RlLmxhc3RDaGlsZDtcbiAgICAgIGlmIChpc0JyKGJyTm9kZTEpKSB7XG4gICAgICAgIGNvbnN0IGJyTm9kZTIgPSBick5vZGUxLnByZXY7XG4gICAgICAgIGlmIChpc0JyKGJyTm9kZTIpKSB7XG4gICAgICAgICAgYnJOb2RlMS5yZW1vdmUoKTtcbiAgICAgICAgICBick5vZGUyLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHByZVByb2Nlc3MkMSA9IChlZGl0b3IsIG5vZGUsIGFyZ3MpID0+IHtcbiAgICAgIGxldCBvbGREb2M7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgbGV0IGNsb25lZE5vZGUgPSBub2RlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgIGNvbnN0IGltcGwgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbjtcbiAgICAgIGlmIChpbXBsLmNyZWF0ZUhUTUxEb2N1bWVudCkge1xuICAgICAgICBjb25zdCBkb2MgPSBpbXBsLmNyZWF0ZUhUTUxEb2N1bWVudCgnJyk7XG4gICAgICAgIFRvb2xzLmVhY2goY2xvbmVkTm9kZS5ub2RlTmFtZSA9PT0gJ0JPRFknID8gY2xvbmVkTm9kZS5jaGlsZE5vZGVzIDogW2Nsb25lZE5vZGVdLCBub2RlID0+IHtcbiAgICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChkb2MuaW1wb3J0Tm9kZShub2RlLCB0cnVlKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY2xvbmVkTm9kZS5ub2RlTmFtZSAhPT0gJ0JPRFknKSB7XG4gICAgICAgICAgY2xvbmVkTm9kZSA9IGRvYy5ib2R5LmZpcnN0Q2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xvbmVkTm9kZSA9IGRvYy5ib2R5O1xuICAgICAgICB9XG4gICAgICAgIG9sZERvYyA9IGRvbS5kb2M7XG4gICAgICAgIGRvbS5kb2MgPSBkb2M7XG4gICAgICB9XG4gICAgICBmaXJlUHJlUHJvY2VzcyhlZGl0b3IsIHtcbiAgICAgICAgLi4uYXJncyxcbiAgICAgICAgbm9kZTogY2xvbmVkTm9kZVxuICAgICAgfSk7XG4gICAgICBpZiAob2xkRG9jKSB7XG4gICAgICAgIGRvbS5kb2MgPSBvbGREb2M7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xvbmVkTm9kZTtcbiAgICB9O1xuICAgIGNvbnN0IHNob3VsZEZpcmVFdmVudCA9IChlZGl0b3IsIGFyZ3MpID0+IHtcbiAgICAgIHJldHVybiBpc05vbk51bGxhYmxlKGVkaXRvcikgJiYgZWRpdG9yLmhhc0V2ZW50TGlzdGVuZXJzKCdQcmVQcm9jZXNzJykgJiYgIWFyZ3Mubm9fZXZlbnRzO1xuICAgIH07XG4gICAgY29uc3QgcHJvY2VzcyQxID0gKGVkaXRvciwgbm9kZSwgYXJncykgPT4ge1xuICAgICAgcmV0dXJuIHNob3VsZEZpcmVFdmVudChlZGl0b3IsIGFyZ3MpID8gcHJlUHJvY2VzcyQxKGVkaXRvciwgbm9kZSwgYXJncykgOiBub2RlO1xuICAgIH07XG5cbiAgICBjb25zdCBhZGRUZW1wQXR0ciA9IChodG1sUGFyc2VyLCB0ZW1wQXR0cnMsIG5hbWUpID0+IHtcbiAgICAgIGlmIChUb29scy5pbkFycmF5KHRlbXBBdHRycywgbmFtZSkgPT09IC0xKSB7XG4gICAgICAgIGh0bWxQYXJzZXIuYWRkQXR0cmlidXRlRmlsdGVyKG5hbWUsIChub2RlcywgbmFtZSkgPT4ge1xuICAgICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIG5vZGVzW2ldLmF0dHIobmFtZSwgbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGVtcEF0dHJzLnB1c2gobmFtZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBwb3N0UHJvY2VzcyA9IChlZGl0b3IsIGFyZ3MsIGNvbnRlbnQpID0+IHtcbiAgICAgIGlmICghYXJncy5ub19ldmVudHMgJiYgZWRpdG9yKSB7XG4gICAgICAgIGNvbnN0IG91dEFyZ3MgPSBmaXJlUG9zdFByb2Nlc3MoZWRpdG9yLCB7XG4gICAgICAgICAgLi4uYXJncyxcbiAgICAgICAgICBjb250ZW50XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gb3V0QXJncy5jb250ZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRIdG1sRnJvbU5vZGUgPSAoZG9tLCBub2RlLCBhcmdzKSA9PiB7XG4gICAgICBjb25zdCBodG1sID0gdHJpbSQxKGFyZ3MuZ2V0SW5uZXIgPyBub2RlLmlubmVySFRNTCA6IGRvbS5nZXRPdXRlckhUTUwobm9kZSkpO1xuICAgICAgcmV0dXJuIGFyZ3Muc2VsZWN0aW9uIHx8IGlzV3NQcmVzZXJ2ZUVsZW1lbnQoU3VnYXJFbGVtZW50LmZyb21Eb20obm9kZSkpID8gaHRtbCA6IFRvb2xzLnRyaW0oaHRtbCk7XG4gICAgfTtcbiAgICBjb25zdCBwYXJzZUh0bWwgPSAoaHRtbFBhcnNlciwgaHRtbCwgYXJncykgPT4ge1xuICAgICAgY29uc3QgcGFyc2VyQXJncyA9IGFyZ3Muc2VsZWN0aW9uID8ge1xuICAgICAgICBmb3JjZWRfcm9vdF9ibG9jazogZmFsc2UsXG4gICAgICAgIC4uLmFyZ3NcbiAgICAgIH0gOiBhcmdzO1xuICAgICAgY29uc3Qgcm9vdE5vZGUgPSBodG1sUGFyc2VyLnBhcnNlKGh0bWwsIHBhcnNlckFyZ3MpO1xuICAgICAgdHJpbVRyYWlsaW5nQnIocm9vdE5vZGUpO1xuICAgICAgcmV0dXJuIHJvb3ROb2RlO1xuICAgIH07XG4gICAgY29uc3Qgc2VyaWFsaXplTm9kZSA9IChzZXR0aW5ncywgc2NoZW1hLCBub2RlKSA9PiB7XG4gICAgICBjb25zdCBodG1sU2VyaWFsaXplciA9IEh0bWxTZXJpYWxpemVyKHNldHRpbmdzLCBzY2hlbWEpO1xuICAgICAgcmV0dXJuIGh0bWxTZXJpYWxpemVyLnNlcmlhbGl6ZShub2RlKTtcbiAgICB9O1xuICAgIGNvbnN0IHRvSHRtbCA9IChlZGl0b3IsIHNldHRpbmdzLCBzY2hlbWEsIHJvb3ROb2RlLCBhcmdzKSA9PiB7XG4gICAgICBjb25zdCBjb250ZW50ID0gc2VyaWFsaXplTm9kZShzZXR0aW5ncywgc2NoZW1hLCByb290Tm9kZSk7XG4gICAgICByZXR1cm4gcG9zdFByb2Nlc3MoZWRpdG9yLCBhcmdzLCBjb250ZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IERvbVNlcmlhbGl6ZXJJbXBsID0gKHNldHRpbmdzLCBlZGl0b3IpID0+IHtcbiAgICAgIGNvbnN0IHRlbXBBdHRycyA9IFsnZGF0YS1tY2Utc2VsZWN0ZWQnXTtcbiAgICAgIGNvbnN0IGRlZmF1bHRlZFNldHRpbmdzID0ge1xuICAgICAgICBlbnRpdHlfZW5jb2Rpbmc6ICduYW1lZCcsXG4gICAgICAgIHJlbW92ZV90cmFpbGluZ19icnM6IHRydWUsXG4gICAgICAgIHBhZF9lbXB0eV93aXRoX2JyOiBmYWxzZSxcbiAgICAgICAgLi4uc2V0dGluZ3NcbiAgICAgIH07XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IgJiYgZWRpdG9yLmRvbSA/IGVkaXRvci5kb20gOiBET01VdGlscy5ET007XG4gICAgICBjb25zdCBzY2hlbWEgPSBlZGl0b3IgJiYgZWRpdG9yLnNjaGVtYSA/IGVkaXRvci5zY2hlbWEgOiBTY2hlbWEoZGVmYXVsdGVkU2V0dGluZ3MpO1xuICAgICAgY29uc3QgaHRtbFBhcnNlciA9IERvbVBhcnNlcihkZWZhdWx0ZWRTZXR0aW5ncywgc2NoZW1hKTtcbiAgICAgIHJlZ2lzdGVyJDMoaHRtbFBhcnNlciwgZGVmYXVsdGVkU2V0dGluZ3MsIGRvbSk7XG4gICAgICBjb25zdCBzZXJpYWxpemUgPSAobm9kZSwgcGFyc2VyQXJncyA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB7XG4gICAgICAgICAgZm9ybWF0OiAnaHRtbCcsXG4gICAgICAgICAgLi4ucGFyc2VyQXJnc1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0YXJnZXROb2RlID0gcHJvY2VzcyQxKGVkaXRvciwgbm9kZSwgYXJncyk7XG4gICAgICAgIGNvbnN0IGh0bWwgPSBnZXRIdG1sRnJvbU5vZGUoZG9tLCB0YXJnZXROb2RlLCBhcmdzKTtcbiAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSBwYXJzZUh0bWwoaHRtbFBhcnNlciwgaHRtbCwgYXJncyk7XG4gICAgICAgIHJldHVybiBhcmdzLmZvcm1hdCA9PT0gJ3RyZWUnID8gcm9vdE5vZGUgOiB0b0h0bWwoZWRpdG9yLCBkZWZhdWx0ZWRTZXR0aW5ncywgc2NoZW1hLCByb290Tm9kZSwgYXJncyk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBhZGROb2RlRmlsdGVyOiBodG1sUGFyc2VyLmFkZE5vZGVGaWx0ZXIsXG4gICAgICAgIGFkZEF0dHJpYnV0ZUZpbHRlcjogaHRtbFBhcnNlci5hZGRBdHRyaWJ1dGVGaWx0ZXIsXG4gICAgICAgIHNlcmlhbGl6ZTogc2VyaWFsaXplLFxuICAgICAgICBhZGRSdWxlczogc2NoZW1hLmFkZFZhbGlkRWxlbWVudHMsXG4gICAgICAgIHNldFJ1bGVzOiBzY2hlbWEuc2V0VmFsaWRFbGVtZW50cyxcbiAgICAgICAgYWRkVGVtcEF0dHI6IGN1cnJ5KGFkZFRlbXBBdHRyLCBodG1sUGFyc2VyLCB0ZW1wQXR0cnMpLFxuICAgICAgICBnZXRUZW1wQXR0cnM6IGNvbnN0YW50KHRlbXBBdHRycyksXG4gICAgICAgIGdldE5vZGVGaWx0ZXJzOiBodG1sUGFyc2VyLmdldE5vZGVGaWx0ZXJzLFxuICAgICAgICBnZXRBdHRyaWJ1dGVGaWx0ZXJzOiBodG1sUGFyc2VyLmdldEF0dHJpYnV0ZUZpbHRlcnMsXG4gICAgICAgIHJlbW92ZU5vZGVGaWx0ZXI6IGh0bWxQYXJzZXIucmVtb3ZlTm9kZUZpbHRlcixcbiAgICAgICAgcmVtb3ZlQXR0cmlidXRlRmlsdGVyOiBodG1sUGFyc2VyLnJlbW92ZUF0dHJpYnV0ZUZpbHRlclxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgRG9tU2VyaWFsaXplciA9IChzZXR0aW5ncywgZWRpdG9yKSA9PiB7XG4gICAgICBjb25zdCBkb21TZXJpYWxpemVyID0gRG9tU2VyaWFsaXplckltcGwoc2V0dGluZ3MsIGVkaXRvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzY2hlbWE6IGRvbVNlcmlhbGl6ZXIuc2NoZW1hLFxuICAgICAgICBhZGROb2RlRmlsdGVyOiBkb21TZXJpYWxpemVyLmFkZE5vZGVGaWx0ZXIsXG4gICAgICAgIGFkZEF0dHJpYnV0ZUZpbHRlcjogZG9tU2VyaWFsaXplci5hZGRBdHRyaWJ1dGVGaWx0ZXIsXG4gICAgICAgIHNlcmlhbGl6ZTogZG9tU2VyaWFsaXplci5zZXJpYWxpemUsXG4gICAgICAgIGFkZFJ1bGVzOiBkb21TZXJpYWxpemVyLmFkZFJ1bGVzLFxuICAgICAgICBzZXRSdWxlczogZG9tU2VyaWFsaXplci5zZXRSdWxlcyxcbiAgICAgICAgYWRkVGVtcEF0dHI6IGRvbVNlcmlhbGl6ZXIuYWRkVGVtcEF0dHIsXG4gICAgICAgIGdldFRlbXBBdHRyczogZG9tU2VyaWFsaXplci5nZXRUZW1wQXR0cnMsXG4gICAgICAgIGdldE5vZGVGaWx0ZXJzOiBkb21TZXJpYWxpemVyLmdldE5vZGVGaWx0ZXJzLFxuICAgICAgICBnZXRBdHRyaWJ1dGVGaWx0ZXJzOiBkb21TZXJpYWxpemVyLmdldEF0dHJpYnV0ZUZpbHRlcnMsXG4gICAgICAgIHJlbW92ZU5vZGVGaWx0ZXI6IGRvbVNlcmlhbGl6ZXIucmVtb3ZlTm9kZUZpbHRlcixcbiAgICAgICAgcmVtb3ZlQXR0cmlidXRlRmlsdGVyOiBkb21TZXJpYWxpemVyLnJlbW92ZUF0dHJpYnV0ZUZpbHRlclxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGVmYXVsdEZvcm1hdCQxID0gJ2h0bWwnO1xuICAgIGNvbnN0IHNldHVwQXJncyQxID0gKGFyZ3MsIGZvcm1hdCkgPT4gKHtcbiAgICAgIC4uLmFyZ3MsXG4gICAgICBmb3JtYXQsXG4gICAgICBnZXQ6IHRydWUsXG4gICAgICBnZXRJbm5lcjogdHJ1ZVxuICAgIH0pO1xuICAgIGNvbnN0IGdldENvbnRlbnQgPSAoZWRpdG9yLCBhcmdzID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdCA9IGFyZ3MuZm9ybWF0ID8gYXJncy5mb3JtYXQgOiBkZWZhdWx0Rm9ybWF0JDE7XG4gICAgICBjb25zdCBkZWZhdWx0ZWRBcmdzID0gc2V0dXBBcmdzJDEoYXJncywgZm9ybWF0KTtcbiAgICAgIHJldHVybiBwcmVQcm9jZXNzR2V0Q29udGVudChlZGl0b3IsIGRlZmF1bHRlZEFyZ3MpLmZvbGQoaWRlbnRpdHksIHVwZGF0ZWRBcmdzID0+IHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IGdldENvbnRlbnQkMihlZGl0b3IsIHVwZGF0ZWRBcmdzKTtcbiAgICAgICAgcmV0dXJuIHBvc3RQcm9jZXNzR2V0Q29udGVudChlZGl0b3IsIGNvbnRlbnQsIHVwZGF0ZWRBcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBkZWZhdWx0Rm9ybWF0ID0gJ2h0bWwnO1xuICAgIGNvbnN0IHNldHVwQXJncyA9IChhcmdzLCBjb250ZW50KSA9PiAoe1xuICAgICAgZm9ybWF0OiBkZWZhdWx0Rm9ybWF0LFxuICAgICAgLi4uYXJncyxcbiAgICAgIHNldDogdHJ1ZSxcbiAgICAgIGNvbnRlbnRcbiAgICB9KTtcbiAgICBjb25zdCBzZXRDb250ZW50ID0gKGVkaXRvciwgY29udGVudCwgYXJncyA9IHt9KSA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0ZWRBcmdzID0gc2V0dXBBcmdzKGFyZ3MsIGNvbnRlbnQpO1xuICAgICAgcmV0dXJuIHByZVByb2Nlc3NTZXRDb250ZW50KGVkaXRvciwgZGVmYXVsdGVkQXJncykubWFwKHVwZGF0ZWRBcmdzID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gc2V0Q29udGVudCQyKGVkaXRvciwgdXBkYXRlZEFyZ3MuY29udGVudCwgdXBkYXRlZEFyZ3MpO1xuICAgICAgICBwb3N0UHJvY2Vzc1NldENvbnRlbnQoZWRpdG9yLCByZXN1bHQuaHRtbCwgdXBkYXRlZEFyZ3MpO1xuICAgICAgICByZXR1cm4gcmVzdWx0LmNvbnRlbnQ7XG4gICAgICB9KS5nZXRPcihjb250ZW50KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVtb3ZlZE9wdGlvbnMgPSAoJ2F1dG9yZXNpemVfb25faW5pdCxjb250ZW50X2VkaXRhYmxlX3N0YXRlLHBhZGRfZW1wdHlfd2l0aF9icixibG9ja19lbGVtZW50cywnICsgJ2Jvb2xlYW5fYXR0cmlidXRlcyxlZGl0b3JfZGVzZWxlY3RvcixlZGl0b3Jfc2VsZWN0b3IsZWxlbWVudHMsZmlsZV9icm93c2VyX2NhbGxiYWNrX3R5cGVzLGZpbGVwaWNrZXJfdmFsaWRhdG9yX2hhbmRsZXIsJyArICdmb3JjZV9oZXhfc3R5bGVfY29sb3JzLGZvcmNlX3BfbmV3bGluZXMsZ2Vja29fc3BlbGxjaGVjayxpbWFnZXNfZGF0YWltZ19maWx0ZXIsbWVkaWFfc2NyaXB0cyxtb2RlLG1vdmVfY2FyZXRfYmVmb3JlX29uX2VudGVyX2VsZW1lbnRzLCcgKyAnbm9uX2VtcHR5X2VsZW1lbnRzLHNlbGZfY2xvc2luZ19lbGVtZW50cyxzaG9ydF9lbmRlZF9lbGVtZW50cyxzcGVjaWFsLHNwZWxsY2hlY2tlcl9zZWxlY3RfbGFuZ3VhZ2VzLHNwZWxsY2hlY2tlcl93aGl0ZWxpc3QsJyArICd0YWJfZm9jdXMsdGFiZm9jdXNfZWxlbWVudHMsdGFibGVfcmVzcG9uc2l2ZV93aWR0aCx0ZXh0X2Jsb2NrX2VsZW1lbnRzLHRleHRfaW5saW5lX2VsZW1lbnRzLHRvb2xiYXJfZHJhd2VyLHR5cGVzLHZhbGlkYXRlLHdoaXRlc3BhY2VfZWxlbWVudHMsJyArICdwYXN0ZV9lbmFibGVfZGVmYXVsdF9maWx0ZXJzLHBhc3RlX2ZpbHRlcl9kcm9wLHBhc3RlX3dvcmRfdmFsaWRfZWxlbWVudHMscGFzdGVfcmV0YWluX3N0eWxlX3Byb3BlcnRpZXMscGFzdGVfY29udmVydF93b3JkX2Zha2VfbGlzdHMnKS5zcGxpdCgnLCcpO1xuICAgIGNvbnN0IGRlcHJlY2F0ZWRPcHRpb25zID0gJ3RlbXBsYXRlX2NkYXRlX2NsYXNzZXMsdGVtcGxhdGVfbWRhdGVfY2xhc3Nlcyx0ZW1wbGF0ZV9zZWxlY3RlZF9jb250ZW50X2NsYXNzZXMsdGVtcGxhdGVfcHJldmlld19yZXBsYWNlX3ZhbHVlcyx0ZW1wbGF0ZV9yZXBsYWNlX3ZhbHVlcyx0ZW1wbGF0ZXMsdGVtcGxhdGVfY2RhdGVfZm9ybWF0LHRlbXBsYXRlX21kYXRlX2Zvcm1hdCcuc3BsaXQoJywnKTtcbiAgICBjb25zdCByZW1vdmVkUGx1Z2lucyA9ICdiYmNvZGUsY29sb3JwaWNrZXIsY29udGV4dG1lbnUsZnVsbHBhZ2UsbGVnYWN5b3V0cHV0LHNwZWxsY2hlY2tlcix0ZXh0Y29sb3InLnNwbGl0KCcsJyk7XG4gICAgY29uc3QgZGVwcmVjYXRlZFBsdWdpbnMgPSBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICd0ZW1wbGF0ZScsXG4gICAgICAgIHJlcGxhY2VkV2l0aDogJ0FkdmFuY2VkIFRlbXBsYXRlJ1xuICAgICAgfSxcbiAgICAgIHsgbmFtZTogJ3J0YycgfVxuICAgIF07XG4gICAgY29uc3QgZ2V0TWF0Y2hpbmdPcHRpb25zID0gKG9wdGlvbnMsIHNlYXJjaGluZ0ZvcikgPT4ge1xuICAgICAgY29uc3Qgc2V0dGluZ05hbWVzID0gZmlsdGVyJDUoc2VhcmNoaW5nRm9yLCBzZXR0aW5nID0+IGhhcyQyKG9wdGlvbnMsIHNldHRpbmcpKTtcbiAgICAgIHJldHVybiBzb3J0KHNldHRpbmdOYW1lcyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRSZW1vdmVkT3B0aW9ucyA9IG9wdGlvbnMgPT4ge1xuICAgICAgY29uc3Qgc2V0dGluZ05hbWVzID0gZ2V0TWF0Y2hpbmdPcHRpb25zKG9wdGlvbnMsIHJlbW92ZWRPcHRpb25zKTtcbiAgICAgIGNvbnN0IGZvcmNlZFJvb3RCbG9jayA9IG9wdGlvbnMuZm9yY2VkX3Jvb3RfYmxvY2s7XG4gICAgICBpZiAoZm9yY2VkUm9vdEJsb2NrID09PSBmYWxzZSB8fCBmb3JjZWRSb290QmxvY2sgPT09ICcnKSB7XG4gICAgICAgIHNldHRpbmdOYW1lcy5wdXNoKCdmb3JjZWRfcm9vdF9ibG9jayAoZmFsc2Ugb25seSknKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzb3J0KHNldHRpbmdOYW1lcyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXREZXByZWNhdGVkT3B0aW9ucyA9IG9wdGlvbnMgPT4gZ2V0TWF0Y2hpbmdPcHRpb25zKG9wdGlvbnMsIGRlcHJlY2F0ZWRPcHRpb25zKTtcbiAgICBjb25zdCBnZXRNYXRjaGluZ1BsdWdpbnMgPSAob3B0aW9ucywgc2VhcmNoaW5nRm9yKSA9PiB7XG4gICAgICBjb25zdCBwbHVnaW5zID0gVG9vbHMubWFrZU1hcChvcHRpb25zLnBsdWdpbnMsICcgJyk7XG4gICAgICBjb25zdCBoYXNQbHVnaW4gPSBwbHVnaW4gPT4gaGFzJDIocGx1Z2lucywgcGx1Z2luKTtcbiAgICAgIGNvbnN0IHBsdWdpbk5hbWVzID0gZmlsdGVyJDUoc2VhcmNoaW5nRm9yLCBoYXNQbHVnaW4pO1xuICAgICAgcmV0dXJuIHNvcnQocGx1Z2luTmFtZXMpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0UmVtb3ZlZFBsdWdpbnMgPSBvcHRpb25zID0+IGdldE1hdGNoaW5nUGx1Z2lucyhvcHRpb25zLCByZW1vdmVkUGx1Z2lucyk7XG4gICAgY29uc3QgZ2V0RGVwcmVjYXRlZFBsdWdpbnMgPSBvcHRpb25zID0+IGdldE1hdGNoaW5nUGx1Z2lucyhvcHRpb25zLCBkZXByZWNhdGVkUGx1Z2lucy5tYXAoZW50cnkgPT4gZW50cnkubmFtZSkpO1xuICAgIGNvbnN0IGxvZ1JlbW92ZWRXYXJuaW5ncyA9IChyYXdPcHRpb25zLCBub3JtYWxpemVkT3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgcmVtb3ZlZE9wdGlvbnMgPSBnZXRSZW1vdmVkT3B0aW9ucyhyYXdPcHRpb25zKTtcbiAgICAgIGNvbnN0IHJlbW92ZWRQbHVnaW5zID0gZ2V0UmVtb3ZlZFBsdWdpbnMobm9ybWFsaXplZE9wdGlvbnMpO1xuICAgICAgY29uc3QgaGFzUmVtb3ZlZFBsdWdpbnMgPSByZW1vdmVkUGx1Z2lucy5sZW5ndGggPiAwO1xuICAgICAgY29uc3QgaGFzUmVtb3ZlZE9wdGlvbnMgPSByZW1vdmVkT3B0aW9ucy5sZW5ndGggPiAwO1xuICAgICAgY29uc3QgaXNMZWdhY3lNb2JpbGVUaGVtZSA9IG5vcm1hbGl6ZWRPcHRpb25zLnRoZW1lID09PSAnbW9iaWxlJztcbiAgICAgIGlmIChoYXNSZW1vdmVkUGx1Z2lucyB8fCBoYXNSZW1vdmVkT3B0aW9ucyB8fCBpc0xlZ2FjeU1vYmlsZVRoZW1lKSB7XG4gICAgICAgIGNvbnN0IGxpc3RKb2luZXIgPSAnXFxuLSAnO1xuICAgICAgICBjb25zdCB0aGVtZXNNZXNzYWdlID0gaXNMZWdhY3lNb2JpbGVUaGVtZSA/IGBcXG5cXG5UaGVtZXM6JHsgbGlzdEpvaW5lciB9bW9iaWxlYCA6ICcnO1xuICAgICAgICBjb25zdCBwbHVnaW5zTWVzc2FnZSA9IGhhc1JlbW92ZWRQbHVnaW5zID8gYFxcblxcblBsdWdpbnM6JHsgbGlzdEpvaW5lciB9JHsgcmVtb3ZlZFBsdWdpbnMuam9pbihsaXN0Sm9pbmVyKSB9YCA6ICcnO1xuICAgICAgICBjb25zdCBvcHRpb25zTWVzc2FnZSA9IGhhc1JlbW92ZWRPcHRpb25zID8gYFxcblxcbk9wdGlvbnM6JHsgbGlzdEpvaW5lciB9JHsgcmVtb3ZlZE9wdGlvbnMuam9pbihsaXN0Sm9pbmVyKSB9YCA6ICcnO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgZGVwcmVjYXRlZCBmZWF0dXJlcyBhcmUgY3VycmVudGx5IGVuYWJsZWQgYW5kIGhhdmUgYmVlbiByZW1vdmVkIGluIFRpbnlNQ0UgNi4wLiBUaGVzZSBmZWF0dXJlcyB3aWxsIG5vIGxvbmdlciB3b3JrIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBUaW55TUNFIGNvbmZpZ3VyYXRpb24uICcgKyAnU2VlIGh0dHBzOi8vd3d3LnRpbnkuY2xvdWQvZG9jcy90aW55bWNlLzYvbWlncmF0aW9uLWZyb20tNXgvIGZvciBtb3JlIGluZm9ybWF0aW9uLicgKyB0aGVtZXNNZXNzYWdlICsgcGx1Z2luc01lc3NhZ2UgKyBvcHRpb25zTWVzc2FnZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRQbHVnaW5EZXNjcmlwdGlvbiA9IG5hbWUgPT4gZmluZCQyKGRlcHJlY2F0ZWRQbHVnaW5zLCBlbnRyeSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKS5mb2xkKCgpID0+IG5hbWUsIGVudHJ5ID0+IHtcbiAgICAgIGlmIChlbnRyeS5yZXBsYWNlZFdpdGgpIHtcbiAgICAgICAgcmV0dXJuIGAkeyBuYW1lIH0sIHJlcGxhY2VkIGJ5ICR7IGVudHJ5LnJlcGxhY2VkV2l0aCB9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGxvZ0RlcHJlY2F0ZWRXYXJuaW5ncyA9IChyYXdPcHRpb25zLCBub3JtYWxpemVkT3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZGVwcmVjYXRlZE9wdGlvbnMgPSBnZXREZXByZWNhdGVkT3B0aW9ucyhyYXdPcHRpb25zKTtcbiAgICAgIGNvbnN0IGRlcHJlY2F0ZWRQbHVnaW5zID0gZ2V0RGVwcmVjYXRlZFBsdWdpbnMobm9ybWFsaXplZE9wdGlvbnMpO1xuICAgICAgY29uc3QgaGFzRGVwcmVjYXRlZFBsdWdpbnMgPSBkZXByZWNhdGVkUGx1Z2lucy5sZW5ndGggPiAwO1xuICAgICAgY29uc3QgaGFzRGVwcmVjYXRlZE9wdGlvbnMgPSBkZXByZWNhdGVkT3B0aW9ucy5sZW5ndGggPiAwO1xuICAgICAgaWYgKGhhc0RlcHJlY2F0ZWRQbHVnaW5zIHx8IGhhc0RlcHJlY2F0ZWRPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGxpc3RKb2luZXIgPSAnXFxuLSAnO1xuICAgICAgICBjb25zdCBwbHVnaW5zTWVzc2FnZSA9IGhhc0RlcHJlY2F0ZWRQbHVnaW5zID8gYFxcblxcblBsdWdpbnM6JHsgbGlzdEpvaW5lciB9JHsgZGVwcmVjYXRlZFBsdWdpbnMubWFwKGdldFBsdWdpbkRlc2NyaXB0aW9uKS5qb2luKGxpc3RKb2luZXIpIH1gIDogJyc7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNNZXNzYWdlID0gaGFzRGVwcmVjYXRlZE9wdGlvbnMgPyBgXFxuXFxuT3B0aW9uczokeyBsaXN0Sm9pbmVyIH0keyBkZXByZWNhdGVkT3B0aW9ucy5qb2luKGxpc3RKb2luZXIpIH1gIDogJyc7XG4gICAgICAgIGNvbnNvbGUud2FybignVGhlIGZvbGxvd2luZyBkZXByZWNhdGVkIGZlYXR1cmVzIGFyZSBjdXJyZW50bHkgZW5hYmxlZCBidXQgd2lsbCBiZSByZW1vdmVkIHNvb24uJyArIHBsdWdpbnNNZXNzYWdlICsgb3B0aW9uc01lc3NhZ2UpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbG9nV2FybmluZ3MgPSAocmF3T3B0aW9ucywgbm9ybWFsaXplZE9wdGlvbnMpID0+IHtcbiAgICAgIGxvZ1JlbW92ZWRXYXJuaW5ncyhyYXdPcHRpb25zLCBub3JtYWxpemVkT3B0aW9ucyk7XG4gICAgICBsb2dEZXByZWNhdGVkV2FybmluZ3MocmF3T3B0aW9ucywgbm9ybWFsaXplZE9wdGlvbnMpO1xuICAgIH07XG5cbiAgICBjb25zdCBET00kOCA9IERPTVV0aWxzLkRPTTtcbiAgICBjb25zdCByZXN0b3JlT3JpZ2luYWxTdHlsZXMgPSBlZGl0b3IgPT4ge1xuICAgICAgRE9NJDguc2V0U3R5bGUoZWRpdG9yLmlkLCAnZGlzcGxheScsIGVkaXRvci5vcmdEaXNwbGF5KTtcbiAgICB9O1xuICAgIGNvbnN0IHNhZmVEZXN0cm95ID0geCA9PiBPcHRpb25hbC5mcm9tKHgpLmVhY2goeCA9PiB4LmRlc3Ryb3koKSk7XG4gICAgY29uc3QgY2xlYXJEb21SZWZlcmVuY2VzID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGVkID0gZWRpdG9yO1xuICAgICAgZWQuY29udGVudEFyZWFDb250YWluZXIgPSBlZC5mb3JtRWxlbWVudCA9IGVkLmNvbnRhaW5lciA9IGVkLmVkaXRvckNvbnRhaW5lciA9IG51bGw7XG4gICAgICBlZC5ib2R5RWxlbWVudCA9IGVkLmNvbnRlbnREb2N1bWVudCA9IGVkLmNvbnRlbnRXaW5kb3cgPSBudWxsO1xuICAgICAgZWQuaWZyYW1lRWxlbWVudCA9IGVkLnRhcmdldEVsbSA9IG51bGw7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uO1xuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICBjb25zdCBkb20gPSBzZWxlY3Rpb24uZG9tO1xuICAgICAgICBlZC5zZWxlY3Rpb24gPSBzZWxlY3Rpb24ud2luID0gc2VsZWN0aW9uLmRvbSA9IGRvbS5kb2MgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVzdG9yZUZvcm0gPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZm9ybSA9IGVkaXRvci5mb3JtRWxlbWVudDtcbiAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgIGlmIChmb3JtLl9tY2VPbGRTdWJtaXQpIHtcbiAgICAgICAgICBmb3JtLnN1Ym1pdCA9IGZvcm0uX21jZU9sZFN1Ym1pdDtcbiAgICAgICAgICBkZWxldGUgZm9ybS5fbWNlT2xkU3VibWl0O1xuICAgICAgICB9XG4gICAgICAgIERPTSQ4LnVuYmluZChmb3JtLCAnc3VibWl0IHJlc2V0JywgZWRpdG9yLmZvcm1FdmVudERlbGVnYXRlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSQxID0gZWRpdG9yID0+IHtcbiAgICAgIGlmICghZWRpdG9yLnJlbW92ZWQpIHtcbiAgICAgICAgY29uc3Qge19zZWxlY3Rpb25PdmVycmlkZXMsIGVkaXRvclVwbG9hZH0gPSBlZGl0b3I7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZWRpdG9yLmdldEVsZW1lbnQoKTtcbiAgICAgICAgaWYgKGJvZHkpIHtcbiAgICAgICAgICBlZGl0b3Iuc2F2ZSh7IGlzX3JlbW92aW5nOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVkaXRvci5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgZWRpdG9yLnVuYmluZEFsbE5hdGl2ZUV2ZW50cygpO1xuICAgICAgICBpZiAoZWRpdG9yLmhhc0hpZGRlbklucHV0ICYmIGlzTm9uTnVsbGFibGUoZWxlbWVudCA9PT0gbnVsbCB8fCBlbGVtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbGVtZW50Lm5leHRTaWJsaW5nKSkge1xuICAgICAgICAgIERPTSQ4LnJlbW92ZShlbGVtZW50Lm5leHRTaWJsaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBmaXJlUmVtb3ZlKGVkaXRvcik7XG4gICAgICAgIGVkaXRvci5lZGl0b3JNYW5hZ2VyLnJlbW92ZShlZGl0b3IpO1xuICAgICAgICBpZiAoIWVkaXRvci5pbmxpbmUgJiYgYm9keSkge1xuICAgICAgICAgIHJlc3RvcmVPcmlnaW5hbFN0eWxlcyhlZGl0b3IpO1xuICAgICAgICB9XG4gICAgICAgIGZpcmVEZXRhY2goZWRpdG9yKTtcbiAgICAgICAgRE9NJDgucmVtb3ZlKGVkaXRvci5nZXRDb250YWluZXIoKSk7XG4gICAgICAgIHNhZmVEZXN0cm95KF9zZWxlY3Rpb25PdmVycmlkZXMpO1xuICAgICAgICBzYWZlRGVzdHJveShlZGl0b3JVcGxvYWQpO1xuICAgICAgICBlZGl0b3IuZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZGVzdHJveSA9IChlZGl0b3IsIGF1dG9tYXRpYykgPT4ge1xuICAgICAgY29uc3Qge3NlbGVjdGlvbiwgZG9tfSA9IGVkaXRvcjtcbiAgICAgIGlmIChlZGl0b3IuZGVzdHJveWVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghYXV0b21hdGljICYmICFlZGl0b3IucmVtb3ZlZCkge1xuICAgICAgICBlZGl0b3IucmVtb3ZlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghYXV0b21hdGljKSB7XG4gICAgICAgIGVkaXRvci5lZGl0b3JNYW5hZ2VyLm9mZignYmVmb3JldW5sb2FkJywgZWRpdG9yLl9iZWZvcmVVbmxvYWQpO1xuICAgICAgICBpZiAoZWRpdG9yLnRoZW1lICYmIGVkaXRvci50aGVtZS5kZXN0cm95KSB7XG4gICAgICAgICAgZWRpdG9yLnRoZW1lLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICBzYWZlRGVzdHJveShzZWxlY3Rpb24pO1xuICAgICAgICBzYWZlRGVzdHJveShkb20pO1xuICAgICAgfVxuICAgICAgcmVzdG9yZUZvcm0oZWRpdG9yKTtcbiAgICAgIGNsZWFyRG9tUmVmZXJlbmNlcyhlZGl0b3IpO1xuICAgICAgZWRpdG9yLmRlc3Ryb3llZCA9IHRydWU7XG4gICAgfTtcblxuICAgIGNvbnN0IENyZWF0ZUljb25NYW5hZ2VyID0gKCkgPT4ge1xuICAgICAgY29uc3QgbG9va3VwID0ge307XG4gICAgICBjb25zdCBhZGQgPSAoaWQsIGljb25QYWNrKSA9PiB7XG4gICAgICAgIGxvb2t1cFtpZF0gPSBpY29uUGFjaztcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXQgPSBpZCA9PiB7XG4gICAgICAgIGlmIChsb29rdXBbaWRdKSB7XG4gICAgICAgICAgcmV0dXJuIGxvb2t1cFtpZF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHsgaWNvbnM6IHt9IH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBoYXMgPSBpZCA9PiBoYXMkMihsb29rdXAsIGlkKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFkZCxcbiAgICAgICAgZ2V0LFxuICAgICAgICBoYXNcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBJY29uTWFuYWdlciA9IENyZWF0ZUljb25NYW5hZ2VyKCk7XG5cbiAgICBjb25zdCBNb2RlbE1hbmFnZXIgPSBBZGRPbk1hbmFnZXIuTW9kZWxNYW5hZ2VyO1xuXG4gICAgY29uc3QgZ2V0UHJvcCA9IChwcm9wTmFtZSwgZWxtKSA9PiB7XG4gICAgICBjb25zdCByYXdFbG0gPSBlbG0uZG9tO1xuICAgICAgcmV0dXJuIHJhd0VsbVtwcm9wTmFtZV07XG4gICAgfTtcbiAgICBjb25zdCBnZXRDb21wdXRlZFNpemVQcm9wID0gKHByb3BOYW1lLCBlbG0pID0+IHBhcnNlSW50KGdldCQ3KGVsbSwgcHJvcE5hbWUpLCAxMCk7XG4gICAgY29uc3QgZ2V0Q2xpZW50V2lkdGggPSBjdXJyeShnZXRQcm9wLCAnY2xpZW50V2lkdGgnKTtcbiAgICBjb25zdCBnZXRDbGllbnRIZWlnaHQgPSBjdXJyeShnZXRQcm9wLCAnY2xpZW50SGVpZ2h0Jyk7XG4gICAgY29uc3QgZ2V0TWFyZ2luVG9wID0gY3VycnkoZ2V0Q29tcHV0ZWRTaXplUHJvcCwgJ21hcmdpbi10b3AnKTtcbiAgICBjb25zdCBnZXRNYXJnaW5MZWZ0ID0gY3VycnkoZ2V0Q29tcHV0ZWRTaXplUHJvcCwgJ21hcmdpbi1sZWZ0Jyk7XG4gICAgY29uc3QgZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID0gZWxtID0+IGVsbS5kb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgaXNJbnNpZGVFbGVtZW50Q29udGVudEFyZWEgPSAoYm9keUVsbSwgY2xpZW50WCwgY2xpZW50WSkgPT4ge1xuICAgICAgY29uc3QgY2xpZW50V2lkdGggPSBnZXRDbGllbnRXaWR0aChib2R5RWxtKTtcbiAgICAgIGNvbnN0IGNsaWVudEhlaWdodCA9IGdldENsaWVudEhlaWdodChib2R5RWxtKTtcbiAgICAgIHJldHVybiBjbGllbnRYID49IDAgJiYgY2xpZW50WSA+PSAwICYmIGNsaWVudFggPD0gY2xpZW50V2lkdGggJiYgY2xpZW50WSA8PSBjbGllbnRIZWlnaHQ7XG4gICAgfTtcbiAgICBjb25zdCB0cmFuc3Bvc2UgPSAoaW5saW5lLCBlbG0sIGNsaWVudFgsIGNsaWVudFkpID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxtKTtcbiAgICAgIGNvbnN0IGRlbHRhWCA9IGlubGluZSA/IGNsaWVudFJlY3QubGVmdCArIGVsbS5kb20uY2xpZW50TGVmdCArIGdldE1hcmdpbkxlZnQoZWxtKSA6IDA7XG4gICAgICBjb25zdCBkZWx0YVkgPSBpbmxpbmUgPyBjbGllbnRSZWN0LnRvcCArIGVsbS5kb20uY2xpZW50VG9wICsgZ2V0TWFyZ2luVG9wKGVsbSkgOiAwO1xuICAgICAgY29uc3QgeCA9IGNsaWVudFggLSBkZWx0YVg7XG4gICAgICBjb25zdCB5ID0gY2xpZW50WSAtIGRlbHRhWTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBpc1hZSW5Db250ZW50QXJlYSA9IChlZGl0b3IsIGNsaWVudFgsIGNsaWVudFkpID0+IHtcbiAgICAgIGNvbnN0IGJvZHlFbG0gPSBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKTtcbiAgICAgIGNvbnN0IHRhcmdldEVsbSA9IGVkaXRvci5pbmxpbmUgPyBib2R5RWxtIDogZG9jdW1lbnRFbGVtZW50KGJvZHlFbG0pO1xuICAgICAgY29uc3QgdHJhbnNwb3NlZFBvaW50ID0gdHJhbnNwb3NlKGVkaXRvci5pbmxpbmUsIHRhcmdldEVsbSwgY2xpZW50WCwgY2xpZW50WSk7XG4gICAgICByZXR1cm4gaXNJbnNpZGVFbGVtZW50Q29udGVudEFyZWEodGFyZ2V0RWxtLCB0cmFuc3Bvc2VkUG9pbnQueCwgdHJhbnNwb3NlZFBvaW50LnkpO1xuICAgIH07XG4gICAgY29uc3QgZnJvbURvbVNhZmUgPSBub2RlID0+IE9wdGlvbmFsLmZyb20obm9kZSkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKTtcbiAgICBjb25zdCBpc0VkaXRvckF0dGFjaGVkVG9Eb20gPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgcmF3Q29udGFpbmVyID0gZWRpdG9yLmlubGluZSA/IGVkaXRvci5nZXRCb2R5KCkgOiBlZGl0b3IuZ2V0Q29udGVudEFyZWFDb250YWluZXIoKTtcbiAgICAgIHJldHVybiBmcm9tRG9tU2FmZShyYXdDb250YWluZXIpLm1hcChpbkJvZHkpLmdldE9yKGZhbHNlKTtcbiAgICB9O1xuXG4gICAgdmFyIE5vdGlmaWNhdGlvbk1hbmFnZXJJbXBsID0gKCkgPT4ge1xuICAgICAgY29uc3QgdW5pbXBsZW1lbnRlZCA9ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVtZSBkaWQgbm90IHByb3ZpZGUgYSBOb3RpZmljYXRpb25NYW5hZ2VyIGltcGxlbWVudGF0aW9uLicpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wZW46IHVuaW1wbGVtZW50ZWQsXG4gICAgICAgIGNsb3NlOiB1bmltcGxlbWVudGVkLFxuICAgICAgICBnZXRBcmdzOiB1bmltcGxlbWVudGVkXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBOb3RpZmljYXRpb25NYW5hZ2VyID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBbXTtcbiAgICAgIGNvbnN0IGdldEltcGxlbWVudGF0aW9uID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB0aGVtZSA9IGVkaXRvci50aGVtZTtcbiAgICAgICAgcmV0dXJuIHRoZW1lICYmIHRoZW1lLmdldE5vdGlmaWNhdGlvbk1hbmFnZXJJbXBsID8gdGhlbWUuZ2V0Tm90aWZpY2F0aW9uTWFuYWdlckltcGwoKSA6IE5vdGlmaWNhdGlvbk1hbmFnZXJJbXBsKCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0VG9wTm90aWZpY2F0aW9uID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShub3RpZmljYXRpb25zWzBdKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0VxdWFsID0gKGEsIGIpID0+IHtcbiAgICAgICAgcmV0dXJuIGEudHlwZSA9PT0gYi50eXBlICYmIGEudGV4dCA9PT0gYi50ZXh0ICYmICFhLnByb2dyZXNzQmFyICYmICFhLnRpbWVvdXQgJiYgIWIucHJvZ3Jlc3NCYXIgJiYgIWIudGltZW91dDtcbiAgICAgIH07XG4gICAgICBjb25zdCByZXBvc2l0aW9uID0gKCkgPT4ge1xuICAgICAgICBlYWNoJGUobm90aWZpY2F0aW9ucywgbm90aWZpY2F0aW9uID0+IHtcbiAgICAgICAgICBub3RpZmljYXRpb24ucmVwb3NpdGlvbigpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBhZGROb3RpZmljYXRpb24gPSBub3RpZmljYXRpb24gPT4ge1xuICAgICAgICBub3RpZmljYXRpb25zLnB1c2gobm90aWZpY2F0aW9uKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjbG9zZU5vdGlmaWNhdGlvbiA9IG5vdGlmaWNhdGlvbiA9PiB7XG4gICAgICAgIGZpbmRJbmRleCQyKG5vdGlmaWNhdGlvbnMsIG90aGVyTm90aWZpY2F0aW9uID0+IHtcbiAgICAgICAgICByZXR1cm4gb3RoZXJOb3RpZmljYXRpb24gPT09IG5vdGlmaWNhdGlvbjtcbiAgICAgICAgfSkuZWFjaChpbmRleCA9PiB7XG4gICAgICAgICAgbm90aWZpY2F0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBvcGVuID0gKHNwZWMsIGZpcmVFdmVudCA9IHRydWUpID0+IHtcbiAgICAgICAgaWYgKGVkaXRvci5yZW1vdmVkIHx8ICFpc0VkaXRvckF0dGFjaGVkVG9Eb20oZWRpdG9yKSkge1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlyZUV2ZW50KSB7XG4gICAgICAgICAgZWRpdG9yLmRpc3BhdGNoKCdCZWZvcmVPcGVuTm90aWZpY2F0aW9uJywgeyBub3RpZmljYXRpb246IHNwZWMgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbmQkMihub3RpZmljYXRpb25zLCBub3RpZmljYXRpb24gPT4ge1xuICAgICAgICAgIHJldHVybiBpc0VxdWFsKGdldEltcGxlbWVudGF0aW9uKCkuZ2V0QXJncyhub3RpZmljYXRpb24pLCBzcGVjKTtcbiAgICAgICAgfSkuZ2V0T3JUaHVuaygoKSA9PiB7XG4gICAgICAgICAgZWRpdG9yLmVkaXRvck1hbmFnZXIuc2V0QWN0aXZlKGVkaXRvcik7XG4gICAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uID0gZ2V0SW1wbGVtZW50YXRpb24oKS5vcGVuKHNwZWMsICgpID0+IHtcbiAgICAgICAgICAgIGNsb3NlTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbik7XG4gICAgICAgICAgICByZXBvc2l0aW9uKCk7XG4gICAgICAgICAgICBnZXRUb3BOb3RpZmljYXRpb24oKS5mb2xkKCgpID0+IGVkaXRvci5mb2N1cygpLCB0b3AgPT4gZm9jdXMkMShTdWdhckVsZW1lbnQuZnJvbURvbSh0b3AuZ2V0RWwoKSkpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhZGROb3RpZmljYXRpb24obm90aWZpY2F0aW9uKTtcbiAgICAgICAgICByZXBvc2l0aW9uKCk7XG4gICAgICAgICAgZWRpdG9yLmRpc3BhdGNoKCdPcGVuTm90aWZpY2F0aW9uJywgeyBub3RpZmljYXRpb246IHsgLi4ubm90aWZpY2F0aW9uIH0gfSk7XG4gICAgICAgICAgcmV0dXJuIG5vdGlmaWNhdGlvbjtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgY2xvc2UgPSAoKSA9PiB7XG4gICAgICAgIGdldFRvcE5vdGlmaWNhdGlvbigpLmVhY2gobm90aWZpY2F0aW9uID0+IHtcbiAgICAgICAgICBnZXRJbXBsZW1lbnRhdGlvbigpLmNsb3NlKG5vdGlmaWNhdGlvbik7XG4gICAgICAgICAgY2xvc2VOb3RpZmljYXRpb24obm90aWZpY2F0aW9uKTtcbiAgICAgICAgICByZXBvc2l0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldE5vdGlmaWNhdGlvbnMgPSBjb25zdGFudChub3RpZmljYXRpb25zKTtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyRXZlbnRzID0gZWRpdG9yID0+IHtcbiAgICAgICAgZWRpdG9yLm9uKCdTa2luTG9hZGVkJywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNlcnZpY2VNZXNzYWdlID0gZ2V0U2VydmljZU1lc3NhZ2UoZWRpdG9yKTtcbiAgICAgICAgICBpZiAoc2VydmljZU1lc3NhZ2UpIHtcbiAgICAgICAgICAgIG9wZW4oe1xuICAgICAgICAgICAgICB0ZXh0OiBzZXJ2aWNlTWVzc2FnZSxcbiAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICAgICAgICB0aW1lb3V0OiAwXG4gICAgICAgICAgICB9LCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcG9zaXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVkaXRvci5vbignc2hvdyBSZXNpemVFZGl0b3IgUmVzaXplV2luZG93IE5vZGVDaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlcG9zaXRpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLm9uKCdyZW1vdmUnLCAoKSA9PiB7XG4gICAgICAgICAgZWFjaCRlKG5vdGlmaWNhdGlvbnMuc2xpY2UoKSwgbm90aWZpY2F0aW9uID0+IHtcbiAgICAgICAgICAgIGdldEltcGxlbWVudGF0aW9uKCkuY2xvc2Uobm90aWZpY2F0aW9uKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgcmVnaXN0ZXJFdmVudHMoZWRpdG9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wZW4sXG4gICAgICAgIGNsb3NlLFxuICAgICAgICBnZXROb3RpZmljYXRpb25zXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBQbHVnaW5NYW5hZ2VyID0gQWRkT25NYW5hZ2VyLlBsdWdpbk1hbmFnZXI7XG5cbiAgICBjb25zdCBUaGVtZU1hbmFnZXIgPSBBZGRPbk1hbmFnZXIuVGhlbWVNYW5hZ2VyO1xuXG4gICAgdmFyIFdpbmRvd01hbmFnZXJJbXBsID0gKCkgPT4ge1xuICAgICAgY29uc3QgdW5pbXBsZW1lbnRlZCA9ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVtZSBkaWQgbm90IHByb3ZpZGUgYSBXaW5kb3dNYW5hZ2VyIGltcGxlbWVudGF0aW9uLicpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wZW46IHVuaW1wbGVtZW50ZWQsXG4gICAgICAgIG9wZW5Vcmw6IHVuaW1wbGVtZW50ZWQsXG4gICAgICAgIGFsZXJ0OiB1bmltcGxlbWVudGVkLFxuICAgICAgICBjb25maXJtOiB1bmltcGxlbWVudGVkLFxuICAgICAgICBjbG9zZTogdW5pbXBsZW1lbnRlZFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgV2luZG93TWFuYWdlciA9IGVkaXRvciA9PiB7XG4gICAgICBsZXQgZGlhbG9ncyA9IFtdO1xuICAgICAgY29uc3QgZ2V0SW1wbGVtZW50YXRpb24gPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRoZW1lID0gZWRpdG9yLnRoZW1lO1xuICAgICAgICByZXR1cm4gdGhlbWUgJiYgdGhlbWUuZ2V0V2luZG93TWFuYWdlckltcGwgPyB0aGVtZS5nZXRXaW5kb3dNYW5hZ2VySW1wbCgpIDogV2luZG93TWFuYWdlckltcGwoKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBmdW5jQmluZCA9IChzY29wZSwgZikgPT4ge1xuICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICByZXR1cm4gZiA/IGYuYXBwbHkoc2NvcGUsIGFyZ3MpIDogdW5kZWZpbmVkO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZpcmVPcGVuRXZlbnQgPSBkaWFsb2cgPT4ge1xuICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ09wZW5XaW5kb3cnLCB7IGRpYWxvZyB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBmaXJlQ2xvc2VFdmVudCA9IGRpYWxvZyA9PiB7XG4gICAgICAgIGVkaXRvci5kaXNwYXRjaCgnQ2xvc2VXaW5kb3cnLCB7IGRpYWxvZyB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBhZGREaWFsb2cgPSBkaWFsb2cgPT4ge1xuICAgICAgICBkaWFsb2dzLnB1c2goZGlhbG9nKTtcbiAgICAgICAgZmlyZU9wZW5FdmVudChkaWFsb2cpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNsb3NlRGlhbG9nID0gZGlhbG9nID0+IHtcbiAgICAgICAgZmlyZUNsb3NlRXZlbnQoZGlhbG9nKTtcbiAgICAgICAgZGlhbG9ncyA9IGZpbHRlciQ1KGRpYWxvZ3MsIG90aGVyRGlhbG9nID0+IHtcbiAgICAgICAgICByZXR1cm4gb3RoZXJEaWFsb2cgIT09IGRpYWxvZztcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChkaWFsb2dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0VG9wRGlhbG9nID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShkaWFsb2dzW2RpYWxvZ3MubGVuZ3RoIC0gMV0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHN0b3JlU2VsZWN0aW9uQW5kT3BlbkRpYWxvZyA9IG9wZW5EaWFsb2cgPT4ge1xuICAgICAgICBlZGl0b3IuZWRpdG9yTWFuYWdlci5zZXRBY3RpdmUoZWRpdG9yKTtcbiAgICAgICAgc3RvcmUoZWRpdG9yKTtcbiAgICAgICAgZWRpdG9yLnVpLnNob3coKTtcbiAgICAgICAgY29uc3QgZGlhbG9nID0gb3BlbkRpYWxvZygpO1xuICAgICAgICBhZGREaWFsb2coZGlhbG9nKTtcbiAgICAgICAgcmV0dXJuIGRpYWxvZztcbiAgICAgIH07XG4gICAgICBjb25zdCBvcGVuID0gKGFyZ3MsIHBhcmFtcykgPT4ge1xuICAgICAgICByZXR1cm4gc3RvcmVTZWxlY3Rpb25BbmRPcGVuRGlhbG9nKCgpID0+IGdldEltcGxlbWVudGF0aW9uKCkub3BlbihhcmdzLCBwYXJhbXMsIGNsb3NlRGlhbG9nKSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgb3BlblVybCA9IGFyZ3MgPT4ge1xuICAgICAgICByZXR1cm4gc3RvcmVTZWxlY3Rpb25BbmRPcGVuRGlhbG9nKCgpID0+IGdldEltcGxlbWVudGF0aW9uKCkub3BlblVybChhcmdzLCBjbG9zZURpYWxvZykpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFsZXJ0ID0gKG1lc3NhZ2UsIGNhbGxiYWNrLCBzY29wZSkgPT4ge1xuICAgICAgICBjb25zdCB3aW5kb3dNYW5hZ2VySW1wbCA9IGdldEltcGxlbWVudGF0aW9uKCk7XG4gICAgICAgIHdpbmRvd01hbmFnZXJJbXBsLmFsZXJ0KG1lc3NhZ2UsIGZ1bmNCaW5kKHNjb3BlID8gc2NvcGUgOiB3aW5kb3dNYW5hZ2VySW1wbCwgY2FsbGJhY2spKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjb25maXJtID0gKG1lc3NhZ2UsIGNhbGxiYWNrLCBzY29wZSkgPT4ge1xuICAgICAgICBjb25zdCB3aW5kb3dNYW5hZ2VySW1wbCA9IGdldEltcGxlbWVudGF0aW9uKCk7XG4gICAgICAgIHdpbmRvd01hbmFnZXJJbXBsLmNvbmZpcm0obWVzc2FnZSwgZnVuY0JpbmQoc2NvcGUgPyBzY29wZSA6IHdpbmRvd01hbmFnZXJJbXBsLCBjYWxsYmFjaykpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNsb3NlID0gKCkgPT4ge1xuICAgICAgICBnZXRUb3BEaWFsb2coKS5lYWNoKGRpYWxvZyA9PiB7XG4gICAgICAgICAgZ2V0SW1wbGVtZW50YXRpb24oKS5jbG9zZShkaWFsb2cpO1xuICAgICAgICAgIGNsb3NlRGlhbG9nKGRpYWxvZyk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGVkaXRvci5vbigncmVtb3ZlJywgKCkgPT4ge1xuICAgICAgICBlYWNoJGUoZGlhbG9ncywgZGlhbG9nID0+IHtcbiAgICAgICAgICBnZXRJbXBsZW1lbnRhdGlvbigpLmNsb3NlKGRpYWxvZyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcGVuLFxuICAgICAgICBvcGVuVXJsLFxuICAgICAgICBhbGVydCxcbiAgICAgICAgY29uZmlybSxcbiAgICAgICAgY2xvc2VcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGRpc3BsYXlOb3RpZmljYXRpb24gPSAoZWRpdG9yLCBtZXNzYWdlKSA9PiB7XG4gICAgICBlZGl0b3Iubm90aWZpY2F0aW9uTWFuYWdlci5vcGVuKHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgdGV4dDogbWVzc2FnZVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBkaXNwbGF5RXJyb3IgPSAoZWRpdG9yLCBtZXNzYWdlKSA9PiB7XG4gICAgICBpZiAoZWRpdG9yLl9za2luTG9hZGVkKSB7XG4gICAgICAgIGRpc3BsYXlOb3RpZmljYXRpb24oZWRpdG9yLCBtZXNzYWdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkaXRvci5vbignU2tpbkxvYWRlZCcsICgpID0+IHtcbiAgICAgICAgICBkaXNwbGF5Tm90aWZpY2F0aW9uKGVkaXRvciwgbWVzc2FnZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdXBsb2FkRXJyb3IgPSAoZWRpdG9yLCBtZXNzYWdlKSA9PiB7XG4gICAgICBkaXNwbGF5RXJyb3IoZWRpdG9yLCBJMThuLnRyYW5zbGF0ZShbXG4gICAgICAgICdGYWlsZWQgdG8gdXBsb2FkIGltYWdlOiB7MH0nLFxuICAgICAgICBtZXNzYWdlXG4gICAgICBdKSk7XG4gICAgfTtcbiAgICBjb25zdCBsb2dFcnJvciA9IChlZGl0b3IsIGVycm9yVHlwZSwgbXNnKSA9PiB7XG4gICAgICBmaXJlRXJyb3IoZWRpdG9yLCBlcnJvclR5cGUsIHsgbWVzc2FnZTogbXNnIH0pO1xuICAgICAgY29uc29sZS5lcnJvcihtc2cpO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlTG9hZEVycm9yID0gKHR5cGUsIHVybCwgbmFtZSkgPT4gbmFtZSA/IGBGYWlsZWQgdG8gbG9hZCAkeyB0eXBlIH06ICR7IG5hbWUgfSBmcm9tIHVybCAkeyB1cmwgfWAgOiBgRmFpbGVkIHRvIGxvYWQgJHsgdHlwZSB9IHVybDogJHsgdXJsIH1gO1xuICAgIGNvbnN0IHBsdWdpbkxvYWRFcnJvciA9IChlZGl0b3IsIHVybCwgbmFtZSkgPT4ge1xuICAgICAgbG9nRXJyb3IoZWRpdG9yLCAnUGx1Z2luTG9hZEVycm9yJywgY3JlYXRlTG9hZEVycm9yKCdwbHVnaW4nLCB1cmwsIG5hbWUpKTtcbiAgICB9O1xuICAgIGNvbnN0IGljb25zTG9hZEVycm9yID0gKGVkaXRvciwgdXJsLCBuYW1lKSA9PiB7XG4gICAgICBsb2dFcnJvcihlZGl0b3IsICdJY29uc0xvYWRFcnJvcicsIGNyZWF0ZUxvYWRFcnJvcignaWNvbnMnLCB1cmwsIG5hbWUpKTtcbiAgICB9O1xuICAgIGNvbnN0IGxhbmd1YWdlTG9hZEVycm9yID0gKGVkaXRvciwgdXJsLCBuYW1lKSA9PiB7XG4gICAgICBsb2dFcnJvcihlZGl0b3IsICdMYW5ndWFnZUxvYWRFcnJvcicsIGNyZWF0ZUxvYWRFcnJvcignbGFuZ3VhZ2UnLCB1cmwsIG5hbWUpKTtcbiAgICB9O1xuICAgIGNvbnN0IHRoZW1lTG9hZEVycm9yID0gKGVkaXRvciwgdXJsLCBuYW1lKSA9PiB7XG4gICAgICBsb2dFcnJvcihlZGl0b3IsICdUaGVtZUxvYWRFcnJvcicsIGNyZWF0ZUxvYWRFcnJvcigndGhlbWUnLCB1cmwsIG5hbWUpKTtcbiAgICB9O1xuICAgIGNvbnN0IG1vZGVsTG9hZEVycm9yID0gKGVkaXRvciwgdXJsLCBuYW1lKSA9PiB7XG4gICAgICBsb2dFcnJvcihlZGl0b3IsICdNb2RlbExvYWRFcnJvcicsIGNyZWF0ZUxvYWRFcnJvcignbW9kZWwnLCB1cmwsIG5hbWUpKTtcbiAgICB9O1xuICAgIGNvbnN0IHBsdWdpbkluaXRFcnJvciA9IChlZGl0b3IsIG5hbWUsIGVycikgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IEkxOG4udHJhbnNsYXRlKFtcbiAgICAgICAgJ0ZhaWxlZCB0byBpbml0aWFsaXplIHBsdWdpbjogezB9JyxcbiAgICAgICAgbmFtZVxuICAgICAgXSk7XG4gICAgICBmaXJlRXJyb3IoZWRpdG9yLCAnUGx1Z2luTG9hZEVycm9yJywgeyBtZXNzYWdlIH0pO1xuICAgICAgaW5pdEVycm9yKG1lc3NhZ2UsIGVycik7XG4gICAgICBkaXNwbGF5RXJyb3IoZWRpdG9yLCBtZXNzYWdlKTtcbiAgICB9O1xuICAgIGNvbnN0IGluaXRFcnJvciA9IChtZXNzYWdlLCAuLi54KSA9PiB7XG4gICAgICBjb25zdCBjb25zb2xlID0gd2luZG93LmNvbnNvbGU7XG4gICAgICBpZiAoY29uc29sZSkge1xuICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSwgLi4ueCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2cobWVzc2FnZSwgLi4ueCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaXNDb250ZW50Q3NzU2tpbk5hbWUgPSB1cmwgPT4gL15bYS16MC05XFwtXSskL2kudGVzdCh1cmwpO1xuICAgIGNvbnN0IGdldENvbnRlbnRDc3NVcmxzID0gZWRpdG9yID0+IHtcbiAgICAgIHJldHVybiB0cmFuc2Zvcm1Ub1VybHMoZWRpdG9yLCBnZXRDb250ZW50Q3NzKGVkaXRvcikpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Rm9udENzc1VybHMgPSBlZGl0b3IgPT4ge1xuICAgICAgcmV0dXJuIHRyYW5zZm9ybVRvVXJscyhlZGl0b3IsIGdldEZvbnRDc3MoZWRpdG9yKSk7XG4gICAgfTtcbiAgICBjb25zdCB0cmFuc2Zvcm1Ub1VybHMgPSAoZWRpdG9yLCBjc3NMaW5rcykgPT4ge1xuICAgICAgY29uc3Qgc2tpblVybCA9IGVkaXRvci5lZGl0b3JNYW5hZ2VyLmJhc2VVUkwgKyAnL3NraW5zL2NvbnRlbnQnO1xuICAgICAgY29uc3Qgc3VmZml4ID0gZWRpdG9yLmVkaXRvck1hbmFnZXIuc3VmZml4O1xuICAgICAgY29uc3QgY29udGVudENzc0ZpbGUgPSBgY29udGVudCR7IHN1ZmZpeCB9LmNzc2A7XG4gICAgICByZXR1cm4gbWFwJDMoY3NzTGlua3MsIHVybCA9PiB7XG4gICAgICAgIGlmIChpc0NvbnRlbnRDc3NTa2luTmFtZSh1cmwpICYmICFlZGl0b3IuaW5saW5lKSB7XG4gICAgICAgICAgcmV0dXJuIGAkeyBza2luVXJsIH0vJHsgdXJsIH0vJHsgY29udGVudENzc0ZpbGUgfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGVkaXRvci5kb2N1bWVudEJhc2VVUkkudG9BYnNvbHV0ZSh1cmwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGVuZENvbnRlbnRDc3NGcm9tU2V0dGluZ3MgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmNvbnRlbnRDU1MgPSBlZGl0b3IuY29udGVudENTUy5jb25jYXQoZ2V0Q29udGVudENzc1VybHMoZWRpdG9yKSwgZ2V0Rm9udENzc1VybHMoZWRpdG9yKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldEFsbEltYWdlcyA9IGVsbSA9PiB7XG4gICAgICByZXR1cm4gZWxtID8gZnJvbShlbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpKSA6IFtdO1xuICAgIH07XG4gICAgY29uc3QgSW1hZ2VTY2FubmVyID0gKHVwbG9hZFN0YXR1cywgYmxvYkNhY2hlKSA9PiB7XG4gICAgICBjb25zdCBjYWNoZWRQcm9taXNlcyA9IHt9O1xuICAgICAgY29uc3QgZmluZEFsbCA9IChlbG0sIHByZWRpY2F0ZSA9IGFsd2F5cykgPT4ge1xuICAgICAgICBjb25zdCBpbWFnZXMgPSBmaWx0ZXIkNShnZXRBbGxJbWFnZXMoZWxtKSwgaW1nID0+IHtcbiAgICAgICAgICBjb25zdCBzcmMgPSBpbWcuc3JjO1xuICAgICAgICAgIGlmIChpbWcuaGFzQXR0cmlidXRlKCdkYXRhLW1jZS1ib2d1cycpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbWcuaGFzQXR0cmlidXRlKCdkYXRhLW1jZS1wbGFjZWhvbGRlcicpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghc3JjIHx8IHNyYyA9PT0gRW52LnRyYW5zcGFyZW50U3JjKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGFydHNXaXRoKHNyYywgJ2Jsb2I6JykpIHtcbiAgICAgICAgICAgIHJldHVybiAhdXBsb2FkU3RhdHVzLmlzVXBsb2FkZWQoc3JjKSAmJiBwcmVkaWNhdGUoaW1nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YXJ0c1dpdGgoc3JjLCAnZGF0YTonKSkge1xuICAgICAgICAgICAgcmV0dXJuIHByZWRpY2F0ZShpbWcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IG1hcCQzKGltYWdlcywgaW1nID0+IHtcbiAgICAgICAgICBjb25zdCBpbWFnZVNyYyA9IGltZy5zcmM7XG4gICAgICAgICAgaWYgKGhhcyQyKGNhY2hlZFByb21pc2VzLCBpbWFnZVNyYykpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRQcm9taXNlc1tpbWFnZVNyY10udGhlbihpbWFnZUluZm8gPT4ge1xuICAgICAgICAgICAgICBpZiAoaXNTdHJpbmcoaW1hZ2VJbmZvKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbWFnZUluZm87XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGltYWdlOiBpbWcsXG4gICAgICAgICAgICAgICAgICBibG9iSW5mbzogaW1hZ2VJbmZvLmJsb2JJbmZvXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1Byb21pc2UgPSBpbWFnZVRvQmxvYkluZm8oYmxvYkNhY2hlLCBpbWFnZVNyYykudGhlbihibG9iSW5mbyA9PiB7XG4gICAgICAgICAgICAgIGRlbGV0ZSBjYWNoZWRQcm9taXNlc1tpbWFnZVNyY107XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaW1hZ2U6IGltZyxcbiAgICAgICAgICAgICAgICBibG9iSW5mb1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgICBkZWxldGUgY2FjaGVkUHJvbWlzZXNbaW1hZ2VTcmNdO1xuICAgICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNhY2hlZFByb21pc2VzW2ltYWdlU3JjXSA9IG5ld1Byb21pc2U7XG4gICAgICAgICAgICByZXR1cm4gbmV3UHJvbWlzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7IGZpbmRBbGwgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgVXBsb2FkU3RhdHVzID0gKCkgPT4ge1xuICAgICAgY29uc3QgUEVORElORyA9IDEsIFVQTE9BREVEID0gMjtcbiAgICAgIGxldCBibG9iVXJpU3RhdHVzZXMgPSB7fTtcbiAgICAgIGNvbnN0IGNyZWF0ZVN0YXR1cyA9IChzdGF0dXMsIHJlc3VsdFVyaSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICByZXN1bHRVcmlcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCBoYXNCbG9iVXJpID0gYmxvYlVyaSA9PiB7XG4gICAgICAgIHJldHVybiBibG9iVXJpIGluIGJsb2JVcmlTdGF0dXNlcztcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRSZXN1bHRVcmkgPSBibG9iVXJpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYmxvYlVyaVN0YXR1c2VzW2Jsb2JVcmldO1xuICAgICAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0LnJlc3VsdFVyaSA6IG51bGw7XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNQZW5kaW5nID0gYmxvYlVyaSA9PiB7XG4gICAgICAgIHJldHVybiBoYXNCbG9iVXJpKGJsb2JVcmkpID8gYmxvYlVyaVN0YXR1c2VzW2Jsb2JVcmldLnN0YXR1cyA9PT0gUEVORElORyA6IGZhbHNlO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzVXBsb2FkZWQgPSBibG9iVXJpID0+IHtcbiAgICAgICAgcmV0dXJuIGhhc0Jsb2JVcmkoYmxvYlVyaSkgPyBibG9iVXJpU3RhdHVzZXNbYmxvYlVyaV0uc3RhdHVzID09PSBVUExPQURFRCA6IGZhbHNlO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG1hcmtQZW5kaW5nID0gYmxvYlVyaSA9PiB7XG4gICAgICAgIGJsb2JVcmlTdGF0dXNlc1tibG9iVXJpXSA9IGNyZWF0ZVN0YXR1cyhQRU5ESU5HLCBudWxsKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBtYXJrVXBsb2FkZWQgPSAoYmxvYlVyaSwgcmVzdWx0VXJpKSA9PiB7XG4gICAgICAgIGJsb2JVcmlTdGF0dXNlc1tibG9iVXJpXSA9IGNyZWF0ZVN0YXR1cyhVUExPQURFRCwgcmVzdWx0VXJpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZW1vdmVGYWlsZWQgPSBibG9iVXJpID0+IHtcbiAgICAgICAgZGVsZXRlIGJsb2JVcmlTdGF0dXNlc1tibG9iVXJpXTtcbiAgICAgIH07XG4gICAgICBjb25zdCBkZXN0cm95ID0gKCkgPT4ge1xuICAgICAgICBibG9iVXJpU3RhdHVzZXMgPSB7fTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBoYXNCbG9iVXJpLFxuICAgICAgICBnZXRSZXN1bHRVcmksXG4gICAgICAgIGlzUGVuZGluZyxcbiAgICAgICAgaXNVcGxvYWRlZCxcbiAgICAgICAgbWFya1BlbmRpbmcsXG4gICAgICAgIG1hcmtVcGxvYWRlZCxcbiAgICAgICAgcmVtb3ZlRmFpbGVkLFxuICAgICAgICBkZXN0cm95XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGNvbnN0IHNlZWQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBybmQgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiA0Mjk0OTY3Mjk1KS50b1N0cmluZygzNik7XG4gICAgICB9O1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICByZXR1cm4gJ3MnICsgbm93LnRvU3RyaW5nKDM2KSArIHJuZCgpICsgcm5kKCkgKyBybmQoKTtcbiAgICB9O1xuICAgIGNvbnN0IHV1aWQgPSBwcmVmaXggPT4ge1xuICAgICAgcmV0dXJuIHByZWZpeCArIGNvdW50KysgKyBzZWVkKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IEJsb2JDYWNoZSA9ICgpID0+IHtcbiAgICAgIGxldCBjYWNoZSA9IFtdO1xuICAgICAgY29uc3QgbWltZVRvRXh0ID0gbWltZSA9PiB7XG4gICAgICAgIGNvbnN0IG1pbWVzID0ge1xuICAgICAgICAgICdpbWFnZS9qcGVnJzogJ2pwZycsXG4gICAgICAgICAgJ2ltYWdlL2pwZyc6ICdqcGcnLFxuICAgICAgICAgICdpbWFnZS9naWYnOiAnZ2lmJyxcbiAgICAgICAgICAnaW1hZ2UvcG5nJzogJ3BuZycsXG4gICAgICAgICAgJ2ltYWdlL2FwbmcnOiAnYXBuZycsXG4gICAgICAgICAgJ2ltYWdlL2F2aWYnOiAnYXZpZicsXG4gICAgICAgICAgJ2ltYWdlL3N2Zyt4bWwnOiAnc3ZnJyxcbiAgICAgICAgICAnaW1hZ2Uvd2VicCc6ICd3ZWJwJyxcbiAgICAgICAgICAnaW1hZ2UvYm1wJzogJ2JtcCcsXG4gICAgICAgICAgJ2ltYWdlL3RpZmYnOiAndGlmZidcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1pbWVzW21pbWUudG9Mb3dlckNhc2UoKV0gfHwgJ2RhdCc7XG4gICAgICB9O1xuICAgICAgY29uc3QgY3JlYXRlID0gKG8sIGJsb2IsIGJhc2U2NCwgbmFtZSwgZmlsZW5hbWUpID0+IHtcbiAgICAgICAgaWYgKGlzU3RyaW5nKG8pKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBvO1xuICAgICAgICAgIHJldHVybiB0b0Jsb2JJbmZvKHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGZpbGVuYW1lLFxuICAgICAgICAgICAgYmxvYjogYmxvYixcbiAgICAgICAgICAgIGJhc2U2NDogYmFzZTY0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QobykpIHtcbiAgICAgICAgICByZXR1cm4gdG9CbG9iSW5mbyhvKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gaW5wdXQgdHlwZScpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgdG9CbG9iSW5mbyA9IG8gPT4ge1xuICAgICAgICBpZiAoIW8uYmxvYiB8fCAhby5iYXNlNjQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Jsb2IgYW5kIGJhc2U2NCByZXByZXNlbnRhdGlvbnMgb2YgdGhlIGltYWdlIGFyZSByZXF1aXJlZCBmb3IgQmxvYkluZm8gdG8gYmUgY3JlYXRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkID0gby5pZCB8fCB1dWlkKCdibG9iaWQnKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IG8ubmFtZSB8fCBpZDtcbiAgICAgICAgY29uc3QgYmxvYiA9IG8uYmxvYjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZDogY29uc3RhbnQoaWQpLFxuICAgICAgICAgIG5hbWU6IGNvbnN0YW50KG5hbWUpLFxuICAgICAgICAgIGZpbGVuYW1lOiBjb25zdGFudChvLmZpbGVuYW1lIHx8IG5hbWUgKyAnLicgKyBtaW1lVG9FeHQoYmxvYi50eXBlKSksXG4gICAgICAgICAgYmxvYjogY29uc3RhbnQoYmxvYiksXG4gICAgICAgICAgYmFzZTY0OiBjb25zdGFudChvLmJhc2U2NCksXG4gICAgICAgICAgYmxvYlVyaTogY29uc3RhbnQoby5ibG9iVXJpIHx8IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYikpLFxuICAgICAgICAgIHVyaTogY29uc3RhbnQoby51cmkpXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uc3QgYWRkID0gYmxvYkluZm8gPT4ge1xuICAgICAgICBpZiAoIWdldChibG9iSW5mby5pZCgpKSkge1xuICAgICAgICAgIGNhY2hlLnB1c2goYmxvYkluZm8pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgZmluZEZpcnN0ID0gcHJlZGljYXRlID0+IGZpbmQkMihjYWNoZSwgcHJlZGljYXRlKS5nZXRPclVuZGVmaW5lZCgpO1xuICAgICAgY29uc3QgZ2V0ID0gaWQgPT4gZmluZEZpcnN0KGNhY2hlZEJsb2JJbmZvID0+IGNhY2hlZEJsb2JJbmZvLmlkKCkgPT09IGlkKTtcbiAgICAgIGNvbnN0IGdldEJ5VXJpID0gYmxvYlVyaSA9PiBmaW5kRmlyc3QoYmxvYkluZm8gPT4gYmxvYkluZm8uYmxvYlVyaSgpID09PSBibG9iVXJpKTtcbiAgICAgIGNvbnN0IGdldEJ5RGF0YSA9IChiYXNlNjQsIHR5cGUpID0+IGZpbmRGaXJzdChibG9iSW5mbyA9PiBibG9iSW5mby5iYXNlNjQoKSA9PT0gYmFzZTY0ICYmIGJsb2JJbmZvLmJsb2IoKS50eXBlID09PSB0eXBlKTtcbiAgICAgIGNvbnN0IHJlbW92ZUJ5VXJpID0gYmxvYlVyaSA9PiB7XG4gICAgICAgIGNhY2hlID0gZmlsdGVyJDUoY2FjaGUsIGJsb2JJbmZvID0+IHtcbiAgICAgICAgICBpZiAoYmxvYkluZm8uYmxvYlVyaSgpID09PSBibG9iVXJpKSB7XG4gICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGJsb2JJbmZvLmJsb2JVcmkoKSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBkZXN0cm95ID0gKCkgPT4ge1xuICAgICAgICBlYWNoJGUoY2FjaGUsIGNhY2hlZEJsb2JJbmZvID0+IHtcbiAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGNhY2hlZEJsb2JJbmZvLmJsb2JVcmkoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjYWNoZSA9IFtdO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNyZWF0ZSxcbiAgICAgICAgYWRkLFxuICAgICAgICBnZXQsXG4gICAgICAgIGdldEJ5VXJpLFxuICAgICAgICBnZXRCeURhdGEsXG4gICAgICAgIGZpbmRGaXJzdCxcbiAgICAgICAgcmVtb3ZlQnlVcmksXG4gICAgICAgIGRlc3Ryb3lcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IFVwbG9hZGVyID0gKHVwbG9hZFN0YXR1cywgc2V0dGluZ3MpID0+IHtcbiAgICAgIGNvbnN0IHBlbmRpbmdQcm9taXNlcyA9IHt9O1xuICAgICAgY29uc3QgcGF0aEpvaW4gPSAocGF0aDEsIHBhdGgyKSA9PiB7XG4gICAgICAgIGlmIChwYXRoMSkge1xuICAgICAgICAgIHJldHVybiBwYXRoMS5yZXBsYWNlKC9cXC8kLywgJycpICsgJy8nICsgcGF0aDIucmVwbGFjZSgvXlxcLy8sICcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF0aDI7XG4gICAgICB9O1xuICAgICAgY29uc3QgZGVmYXVsdEhhbmRsZXIgPSAoYmxvYkluZm8sIHByb2dyZXNzKSA9PiBuZXcgUHJvbWlzZSgoc3VjY2VzcywgZmFpbHVyZSkgPT4ge1xuICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgeGhyLm9wZW4oJ1BPU1QnLCBzZXR0aW5ncy51cmwpO1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gc2V0dGluZ3MuY3JlZGVudGlhbHM7XG4gICAgICAgIHhoci51cGxvYWQub25wcm9ncmVzcyA9IGUgPT4ge1xuICAgICAgICAgIHByb2dyZXNzKGUubG9hZGVkIC8gZS50b3RhbCAqIDEwMCk7XG4gICAgICAgIH07XG4gICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgIGZhaWx1cmUoJ0ltYWdlIHVwbG9hZCBmYWlsZWQgZHVlIHRvIGEgWEhSIFRyYW5zcG9ydCBlcnJvci4gQ29kZTogJyArIHhoci5zdGF0dXMpO1xuICAgICAgICB9O1xuICAgICAgICB4aHIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgIGlmICh4aHIuc3RhdHVzIDwgMjAwIHx8IHhoci5zdGF0dXMgPj0gMzAwKSB7XG4gICAgICAgICAgICBmYWlsdXJlKCdIVFRQIEVycm9yOiAnICsgeGhyLnN0YXR1cyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgIGlmICghanNvbiB8fCAhaXNTdHJpbmcoanNvbi5sb2NhdGlvbikpIHtcbiAgICAgICAgICAgIGZhaWx1cmUoJ0ludmFsaWQgSlNPTjogJyArIHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdWNjZXNzKHBhdGhKb2luKHNldHRpbmdzLmJhc2VQYXRoLCBqc29uLmxvY2F0aW9uKSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGJsb2JJbmZvLmJsb2IoKSwgYmxvYkluZm8uZmlsZW5hbWUoKSk7XG4gICAgICAgIHhoci5zZW5kKGZvcm1EYXRhKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdXBsb2FkSGFuZGxlciA9IGlzRnVuY3Rpb24oc2V0dGluZ3MuaGFuZGxlcikgPyBzZXR0aW5ncy5oYW5kbGVyIDogZGVmYXVsdEhhbmRsZXI7XG4gICAgICBjb25zdCBub1VwbG9hZCA9ICgpID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICByZXNvbHZlKFtdKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaGFuZGxlclN1Y2Nlc3MgPSAoYmxvYkluZm8sIHVybCkgPT4gKHtcbiAgICAgICAgdXJsLFxuICAgICAgICBibG9iSW5mbyxcbiAgICAgICAgc3RhdHVzOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGhhbmRsZXJGYWlsdXJlID0gKGJsb2JJbmZvLCBlcnJvcikgPT4gKHtcbiAgICAgICAgdXJsOiAnJyxcbiAgICAgICAgYmxvYkluZm8sXG4gICAgICAgIHN0YXR1czogZmFsc2UsXG4gICAgICAgIGVycm9yXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc29sdmVQZW5kaW5nID0gKGJsb2JVcmksIHJlc3VsdCkgPT4ge1xuICAgICAgICBUb29scy5lYWNoKHBlbmRpbmdQcm9taXNlc1tibG9iVXJpXSwgcmVzb2x2ZSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICAgICAgZGVsZXRlIHBlbmRpbmdQcm9taXNlc1tibG9iVXJpXTtcbiAgICAgIH07XG4gICAgICBjb25zdCB1cGxvYWRCbG9iSW5mbyA9IChibG9iSW5mbywgaGFuZGxlciwgb3Blbk5vdGlmaWNhdGlvbikgPT4ge1xuICAgICAgICB1cGxvYWRTdGF0dXMubWFya1BlbmRpbmcoYmxvYkluZm8uYmxvYlVyaSgpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGxldCBub3RpZmljYXRpb247XG4gICAgICAgICAgbGV0IHByb2dyZXNzO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBjbG9zZU5vdGlmaWNhdGlvbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG5vdGlmaWNhdGlvbikge1xuICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbi5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHByb2dyZXNzID0gbm9vcDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB1cmwgPT4ge1xuICAgICAgICAgICAgICBjbG9zZU5vdGlmaWNhdGlvbigpO1xuICAgICAgICAgICAgICB1cGxvYWRTdGF0dXMubWFya1VwbG9hZGVkKGJsb2JJbmZvLmJsb2JVcmkoKSwgdXJsKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZVBlbmRpbmcoYmxvYkluZm8uYmxvYlVyaSgpLCBoYW5kbGVyU3VjY2VzcyhibG9iSW5mbywgdXJsKSk7XG4gICAgICAgICAgICAgIHJlc29sdmUoaGFuZGxlclN1Y2Nlc3MoYmxvYkluZm8sIHVybCkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGZhaWx1cmUgPSBlcnJvciA9PiB7XG4gICAgICAgICAgICAgIGNsb3NlTm90aWZpY2F0aW9uKCk7XG4gICAgICAgICAgICAgIHVwbG9hZFN0YXR1cy5yZW1vdmVGYWlsZWQoYmxvYkluZm8uYmxvYlVyaSgpKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZVBlbmRpbmcoYmxvYkluZm8uYmxvYlVyaSgpLCBoYW5kbGVyRmFpbHVyZShibG9iSW5mbywgZXJyb3IpKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZShoYW5kbGVyRmFpbHVyZShibG9iSW5mbywgZXJyb3IpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBwcm9ncmVzcyA9IHBlcmNlbnQgPT4ge1xuICAgICAgICAgICAgICBpZiAocGVyY2VudCA8IDAgfHwgcGVyY2VudCA+IDEwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBPcHRpb25hbC5mcm9tKG5vdGlmaWNhdGlvbikub3JUaHVuaygoKSA9PiBPcHRpb25hbC5mcm9tKG9wZW5Ob3RpZmljYXRpb24pLm1hcChhcHBseSQxKSkuZWFjaChuID0+IHtcbiAgICAgICAgICAgICAgICBub3RpZmljYXRpb24gPSBuO1xuICAgICAgICAgICAgICAgIG4ucHJvZ3Jlc3NCYXIudmFsdWUocGVyY2VudCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGhhbmRsZXIoYmxvYkluZm8sIHByb2dyZXNzKS50aGVuKHN1Y2Nlc3MsIGVyciA9PiB7XG4gICAgICAgICAgICAgIGZhaWx1cmUoaXNTdHJpbmcoZXJyKSA/IHsgbWVzc2FnZTogZXJyIH0gOiBlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIHJlc29sdmUoaGFuZGxlckZhaWx1cmUoYmxvYkluZm8sIGV4KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0RlZmF1bHRIYW5kbGVyID0gaGFuZGxlciA9PiBoYW5kbGVyID09PSBkZWZhdWx0SGFuZGxlcjtcbiAgICAgIGNvbnN0IHBlbmRpbmdVcGxvYWRCbG9iSW5mbyA9IGJsb2JJbmZvID0+IHtcbiAgICAgICAgY29uc3QgYmxvYlVyaSA9IGJsb2JJbmZvLmJsb2JVcmkoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIHBlbmRpbmdQcm9taXNlc1tibG9iVXJpXSA9IHBlbmRpbmdQcm9taXNlc1tibG9iVXJpXSB8fCBbXTtcbiAgICAgICAgICBwZW5kaW5nUHJvbWlzZXNbYmxvYlVyaV0ucHVzaChyZXNvbHZlKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdXBsb2FkQmxvYnMgPSAoYmxvYkluZm9zLCBvcGVuTm90aWZpY2F0aW9uKSA9PiB7XG4gICAgICAgIGJsb2JJbmZvcyA9IFRvb2xzLmdyZXAoYmxvYkluZm9zLCBibG9iSW5mbyA9PiAhdXBsb2FkU3RhdHVzLmlzVXBsb2FkZWQoYmxvYkluZm8uYmxvYlVyaSgpKSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChUb29scy5tYXAoYmxvYkluZm9zLCBibG9iSW5mbyA9PiB1cGxvYWRTdGF0dXMuaXNQZW5kaW5nKGJsb2JJbmZvLmJsb2JVcmkoKSkgPyBwZW5kaW5nVXBsb2FkQmxvYkluZm8oYmxvYkluZm8pIDogdXBsb2FkQmxvYkluZm8oYmxvYkluZm8sIHVwbG9hZEhhbmRsZXIsIG9wZW5Ob3RpZmljYXRpb24pKSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdXBsb2FkID0gKGJsb2JJbmZvcywgb3Blbk5vdGlmaWNhdGlvbikgPT4gIXNldHRpbmdzLnVybCAmJiBpc0RlZmF1bHRIYW5kbGVyKHVwbG9hZEhhbmRsZXIpID8gbm9VcGxvYWQoKSA6IHVwbG9hZEJsb2JzKGJsb2JJbmZvcywgb3Blbk5vdGlmaWNhdGlvbik7XG4gICAgICByZXR1cm4geyB1cGxvYWQgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb3Blbk5vdGlmaWNhdGlvbiA9IGVkaXRvciA9PiAoKSA9PiBlZGl0b3Iubm90aWZpY2F0aW9uTWFuYWdlci5vcGVuKHtcbiAgICAgIHRleHQ6IGVkaXRvci50cmFuc2xhdGUoJ0ltYWdlIHVwbG9hZGluZy4uLicpLFxuICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgdGltZW91dDogLTEsXG4gICAgICBwcm9ncmVzc0JhcjogdHJ1ZVxuICAgIH0pO1xuICAgIGNvbnN0IGNyZWF0ZVVwbG9hZGVyID0gKGVkaXRvciwgdXBsb2FkU3RhdHVzKSA9PiBVcGxvYWRlcih1cGxvYWRTdGF0dXMsIHtcbiAgICAgIHVybDogZ2V0SW1hZ2VVcGxvYWRVcmwoZWRpdG9yKSxcbiAgICAgIGJhc2VQYXRoOiBnZXRJbWFnZVVwbG9hZEJhc2VQYXRoKGVkaXRvciksXG4gICAgICBjcmVkZW50aWFsczogZ2V0SW1hZ2VzVXBsb2FkQ3JlZGVudGlhbHMoZWRpdG9yKSxcbiAgICAgIGhhbmRsZXI6IGdldEltYWdlc1VwbG9hZEhhbmRsZXIoZWRpdG9yKVxuICAgIH0pO1xuICAgIGNvbnN0IEltYWdlVXBsb2FkZXIgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgdXBsb2FkU3RhdHVzID0gVXBsb2FkU3RhdHVzKCk7XG4gICAgICBjb25zdCB1cGxvYWRlciA9IGNyZWF0ZVVwbG9hZGVyKGVkaXRvciwgdXBsb2FkU3RhdHVzKTtcbiAgICAgIHJldHVybiB7IHVwbG9hZDogKGJsb2JJbmZvcywgc2hvd05vdGlmaWNhdGlvbiA9IHRydWUpID0+IHVwbG9hZGVyLnVwbG9hZChibG9iSW5mb3MsIHNob3dOb3RpZmljYXRpb24gPyBvcGVuTm90aWZpY2F0aW9uKGVkaXRvcikgOiB1bmRlZmluZWQpIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGlzRW1wdHlGb3JQYWRkaW5nID0gKGVkaXRvciwgZWxlbWVudCkgPT4gZWRpdG9yLmRvbS5pc0VtcHR5KGVsZW1lbnQuZG9tKSAmJiBpc05vbk51bGxhYmxlKGVkaXRvci5zY2hlbWEuZ2V0VGV4dEJsb2NrRWxlbWVudHMoKVtuYW1lKGVsZW1lbnQpXSk7XG4gICAgY29uc3QgYWRkUGFkZGluZ1RvRW1wdHkgPSBlZGl0b3IgPT4gZWxlbWVudCA9PiB7XG4gICAgICBpZiAoaXNFbXB0eUZvclBhZGRpbmcoZWRpdG9yLCBlbGVtZW50KSkge1xuICAgICAgICBhcHBlbmQkMShlbGVtZW50LCBTdWdhckVsZW1lbnQuZnJvbUh0bWwoJzxiciBkYXRhLW1jZS1ib2d1cz1cIjFcIiAvPicpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IEVkaXRvclVwbG9hZCA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBibG9iQ2FjaGUgPSBCbG9iQ2FjaGUoKTtcbiAgICAgIGxldCB1cGxvYWRlciwgaW1hZ2VTY2FubmVyO1xuICAgICAgY29uc3QgdXBsb2FkU3RhdHVzID0gVXBsb2FkU3RhdHVzKCk7XG4gICAgICBjb25zdCB1cmxGaWx0ZXJzID0gW107XG4gICAgICBjb25zdCBhbGl2ZUd1YXJkID0gY2FsbGJhY2sgPT4ge1xuICAgICAgICByZXR1cm4gcmVzdWx0ID0+IHtcbiAgICAgICAgICBpZiAoZWRpdG9yLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjb25zdCBjYWNoZUludmFsaWRhdG9yID0gdXJsID0+IHVybCArICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgIGNvbnN0IHJlcGxhY2VTdHJpbmcgPSAoY29udGVudCwgc2VhcmNoLCByZXBsYWNlKSA9PiB7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBpbmRleCA9IGNvbnRlbnQuaW5kZXhPZihzZWFyY2gsIGluZGV4KTtcbiAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoMCwgaW5kZXgpICsgcmVwbGFjZSArIGNvbnRlbnQuc3Vic3RyKGluZGV4ICsgc2VhcmNoLmxlbmd0aCk7XG4gICAgICAgICAgICBpbmRleCArPSByZXBsYWNlLmxlbmd0aCAtIHNlYXJjaC5sZW5ndGggKyAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoaW5kZXggIT09IC0xKTtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVwbGFjZUltYWdlVXJsID0gKGNvbnRlbnQsIHRhcmdldFVybCwgcmVwbGFjZW1lbnRVcmwpID0+IHtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRTdHJpbmcgPSBgc3JjPVwiJHsgcmVwbGFjZW1lbnRVcmwgfVwiJHsgcmVwbGFjZW1lbnRVcmwgPT09IEVudi50cmFuc3BhcmVudFNyYyA/ICcgZGF0YS1tY2UtcGxhY2Vob2xkZXI9XCIxXCInIDogJycgfWA7XG4gICAgICAgIGNvbnRlbnQgPSByZXBsYWNlU3RyaW5nKGNvbnRlbnQsIGBzcmM9XCIkeyB0YXJnZXRVcmwgfVwiYCwgcmVwbGFjZW1lbnRTdHJpbmcpO1xuICAgICAgICBjb250ZW50ID0gcmVwbGFjZVN0cmluZyhjb250ZW50LCAnZGF0YS1tY2Utc3JjPVwiJyArIHRhcmdldFVybCArICdcIicsICdkYXRhLW1jZS1zcmM9XCInICsgcmVwbGFjZW1lbnRVcmwgKyAnXCInKTtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVwbGFjZVVybEluVW5kb1N0YWNrID0gKHRhcmdldFVybCwgcmVwbGFjZW1lbnRVcmwpID0+IHtcbiAgICAgICAgZWFjaCRlKGVkaXRvci51bmRvTWFuYWdlci5kYXRhLCBsZXZlbCA9PiB7XG4gICAgICAgICAgaWYgKGxldmVsLnR5cGUgPT09ICdmcmFnbWVudGVkJykge1xuICAgICAgICAgICAgbGV2ZWwuZnJhZ21lbnRzID0gbWFwJDMobGV2ZWwuZnJhZ21lbnRzLCBmcmFnbWVudCA9PiByZXBsYWNlSW1hZ2VVcmwoZnJhZ21lbnQsIHRhcmdldFVybCwgcmVwbGFjZW1lbnRVcmwpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV2ZWwuY29udGVudCA9IHJlcGxhY2VJbWFnZVVybChsZXZlbC5jb250ZW50LCB0YXJnZXRVcmwsIHJlcGxhY2VtZW50VXJsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlcGxhY2VJbWFnZVVyaUluVmlldyA9IChpbWFnZSwgcmVzdWx0VXJpKSA9PiB7XG4gICAgICAgIGNvbnN0IHNyYyA9IGVkaXRvci5jb252ZXJ0VVJMKHJlc3VsdFVyaSwgJ3NyYycpO1xuICAgICAgICByZXBsYWNlVXJsSW5VbmRvU3RhY2soaW1hZ2Uuc3JjLCByZXN1bHRVcmkpO1xuICAgICAgICBzZXRBbGwkMShTdWdhckVsZW1lbnQuZnJvbURvbShpbWFnZSksIHtcbiAgICAgICAgICAnc3JjJzogc2hvdWxkUmV1c2VGaWxlTmFtZShlZGl0b3IpID8gY2FjaGVJbnZhbGlkYXRvcihyZXN1bHRVcmkpIDogcmVzdWx0VXJpLFxuICAgICAgICAgICdkYXRhLW1jZS1zcmMnOiBzcmNcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdXBsb2FkSW1hZ2VzID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXVwbG9hZGVyKSB7XG4gICAgICAgICAgdXBsb2FkZXIgPSBjcmVhdGVVcGxvYWRlcihlZGl0b3IsIHVwbG9hZFN0YXR1cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjYW5Gb3JJbWFnZXMoKS50aGVuKGFsaXZlR3VhcmQoaW1hZ2VJbmZvcyA9PiB7XG4gICAgICAgICAgY29uc3QgYmxvYkluZm9zID0gbWFwJDMoaW1hZ2VJbmZvcywgaW1hZ2VJbmZvID0+IGltYWdlSW5mby5ibG9iSW5mbyk7XG4gICAgICAgICAgcmV0dXJuIHVwbG9hZGVyLnVwbG9hZChibG9iSW5mb3MsIG9wZW5Ob3RpZmljYXRpb24oZWRpdG9yKSkudGhlbihhbGl2ZUd1YXJkKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbWFnZXNUb1JlbW92ZSA9IFtdO1xuICAgICAgICAgICAgbGV0IHNob3VsZERpc3BhdGNoQ2hhbmdlID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFJlc3VsdCA9IG1hcCQzKHJlc3VsdCwgKHVwbG9hZEluZm8sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHtibG9iSW5mbywgaW1hZ2V9ID0gaW1hZ2VJbmZvc1tpbmRleF07XG4gICAgICAgICAgICAgIGxldCByZW1vdmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmICh1cGxvYWRJbmZvLnN0YXR1cyAmJiBzaG91bGRSZXBsYWNlQmxvYlVyaXMoZWRpdG9yKSkge1xuICAgICAgICAgICAgICAgIGlmICh1cGxvYWRJbmZvLnVybCAmJiAhY29udGFpbnMkMShpbWFnZS5zcmMsIHVwbG9hZEluZm8udXJsKSkge1xuICAgICAgICAgICAgICAgICAgc2hvdWxkRGlzcGF0Y2hDaGFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBibG9iQ2FjaGUucmVtb3ZlQnlVcmkoaW1hZ2Uuc3JjKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNSdGMoZWRpdG9yKSkgOyBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJlcGxhY2VJbWFnZVVyaUluVmlldyhpbWFnZSwgdXBsb2FkSW5mby51cmwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh1cGxvYWRJbmZvLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVwbG9hZEluZm8uZXJyb3IucmVtb3ZlKSB7XG4gICAgICAgICAgICAgICAgICByZXBsYWNlVXJsSW5VbmRvU3RhY2soaW1hZ2Uuc3JjLCBFbnYudHJhbnNwYXJlbnRTcmMpO1xuICAgICAgICAgICAgICAgICAgaW1hZ2VzVG9SZW1vdmUucHVzaChpbWFnZSk7XG4gICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdXBsb2FkRXJyb3IoZWRpdG9yLCB1cGxvYWRJbmZvLmVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZWxlbWVudDogaW1hZ2UsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiB1cGxvYWRJbmZvLnN0YXR1cyxcbiAgICAgICAgICAgICAgICB1cGxvYWRVcmk6IHVwbG9hZEluZm8udXJsLFxuICAgICAgICAgICAgICAgIGJsb2JJbmZvLFxuICAgICAgICAgICAgICAgIHJlbW92ZWRcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGltYWdlc1RvUmVtb3ZlLmxlbmd0aCA+IDAgJiYgIWlzUnRjKGVkaXRvcikpIHtcbiAgICAgICAgICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBlYWNoJGUoZnJvbURvbSQxKGltYWdlc1RvUmVtb3ZlKSwgc3VnYXJFbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudE9wdCA9IHBhcmVudChzdWdhckVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgcmVtb3ZlJDUoc3VnYXJFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgIHBhcmVudE9wdC5lYWNoKGFkZFBhZGRpbmdUb0VtcHR5KGVkaXRvcikpO1xuICAgICAgICAgICAgICAgICAgYmxvYkNhY2hlLnJlbW92ZUJ5VXJpKHN1Z2FyRWxlbWVudC5kb20uc3JjKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZERpc3BhdGNoQ2hhbmdlKSB7XG4gICAgICAgICAgICAgIGVkaXRvci51bmRvTWFuYWdlci5kaXNwYXRjaENoYW5nZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkUmVzdWx0O1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVwbG9hZEltYWdlc0F1dG8gPSAoKSA9PiBpc0F1dG9tYXRpY1VwbG9hZHNFbmFibGVkKGVkaXRvcikgPyB1cGxvYWRJbWFnZXMoKSA6IFByb21pc2UucmVzb2x2ZShbXSk7XG4gICAgICBjb25zdCBpc1ZhbGlkRGF0YVVyaUltYWdlID0gaW1nRWxtID0+IGZvcmFsbCh1cmxGaWx0ZXJzLCBmaWx0ZXIgPT4gZmlsdGVyKGltZ0VsbSkpO1xuICAgICAgY29uc3QgYWRkRmlsdGVyID0gZmlsdGVyID0+IHtcbiAgICAgICAgdXJsRmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2NhbkZvckltYWdlcyA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFpbWFnZVNjYW5uZXIpIHtcbiAgICAgICAgICBpbWFnZVNjYW5uZXIgPSBJbWFnZVNjYW5uZXIodXBsb2FkU3RhdHVzLCBibG9iQ2FjaGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbWFnZVNjYW5uZXIuZmluZEFsbChlZGl0b3IuZ2V0Qm9keSgpLCBpc1ZhbGlkRGF0YVVyaUltYWdlKS50aGVuKGFsaXZlR3VhcmQocmVzdWx0ID0+IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZFJlc3VsdCA9IGZpbHRlciQ1KHJlc3VsdCwgcmVzdWx0SXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNTdHJpbmcocmVzdWx0SXRlbSkpIHtcbiAgICAgICAgICAgICAgZGlzcGxheUVycm9yKGVkaXRvciwgcmVzdWx0SXRlbSk7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0SXRlbS51cmlUeXBlID09PSAnYmxvYicpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGlzUnRjKGVkaXRvcikpIDsgZWxzZSB7XG4gICAgICAgICAgICBlYWNoJGUoZmlsdGVyZWRSZXN1bHQsIHJlc3VsdEl0ZW0gPT4ge1xuICAgICAgICAgICAgICByZXBsYWNlVXJsSW5VbmRvU3RhY2socmVzdWx0SXRlbS5pbWFnZS5zcmMsIHJlc3VsdEl0ZW0uYmxvYkluZm8uYmxvYlVyaSgpKTtcbiAgICAgICAgICAgICAgcmVzdWx0SXRlbS5pbWFnZS5zcmMgPSByZXN1bHRJdGVtLmJsb2JJbmZvLmJsb2JVcmkoKTtcbiAgICAgICAgICAgICAgcmVzdWx0SXRlbS5pbWFnZS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbWNlLXNyYycpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmaWx0ZXJlZFJlc3VsdDtcbiAgICAgICAgfSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICAgIGJsb2JDYWNoZS5kZXN0cm95KCk7XG4gICAgICAgIHVwbG9hZFN0YXR1cy5kZXN0cm95KCk7XG4gICAgICAgIGltYWdlU2Nhbm5lciA9IHVwbG9hZGVyID0gbnVsbDtcbiAgICAgIH07XG4gICAgICBjb25zdCByZXBsYWNlQmxvYlVyaXMgPSBjb250ZW50ID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZSgvc3JjPVwiKGJsb2I6W15cIl0rKVwiL2csIChtYXRjaCwgYmxvYlVyaSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdFVyaSA9IHVwbG9hZFN0YXR1cy5nZXRSZXN1bHRVcmkoYmxvYlVyaSk7XG4gICAgICAgICAgaWYgKHJlc3VsdFVyaSkge1xuICAgICAgICAgICAgcmV0dXJuICdzcmM9XCInICsgcmVzdWx0VXJpICsgJ1wiJztcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGJsb2JJbmZvID0gYmxvYkNhY2hlLmdldEJ5VXJpKGJsb2JVcmkpO1xuICAgICAgICAgIGlmICghYmxvYkluZm8pIHtcbiAgICAgICAgICAgIGJsb2JJbmZvID0gZm9sZGwoZWRpdG9yLmVkaXRvck1hbmFnZXIuZ2V0KCksIChyZXN1bHQsIGVkaXRvcikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0IHx8IGVkaXRvci5lZGl0b3JVcGxvYWQgJiYgZWRpdG9yLmVkaXRvclVwbG9hZC5ibG9iQ2FjaGUuZ2V0QnlVcmkoYmxvYlVyaSk7XG4gICAgICAgICAgICB9LCB1bmRlZmluZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYmxvYkluZm8pIHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBibG9iSW5mby5ibG9iKCk7XG4gICAgICAgICAgICByZXR1cm4gJ3NyYz1cImRhdGE6JyArIGJsb2IudHlwZSArICc7YmFzZTY0LCcgKyBibG9iSW5mby5iYXNlNjQoKSArICdcIic7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLm9uKCdTZXRDb250ZW50JywgKCkgPT4ge1xuICAgICAgICBpZiAoaXNBdXRvbWF0aWNVcGxvYWRzRW5hYmxlZChlZGl0b3IpKSB7XG4gICAgICAgICAgdXBsb2FkSW1hZ2VzQXV0bygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjYW5Gb3JJbWFnZXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ1Jhd1NhdmVDb250ZW50JywgZSA9PiB7XG4gICAgICAgIGUuY29udGVudCA9IHJlcGxhY2VCbG9iVXJpcyhlLmNvbnRlbnQpO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ0dldENvbnRlbnQnLCBlID0+IHtcbiAgICAgICAgaWYgKGUuc291cmNlX3ZpZXcgfHwgZS5mb3JtYXQgPT09ICdyYXcnIHx8IGUuZm9ybWF0ID09PSAndHJlZScpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZS5jb250ZW50ID0gcmVwbGFjZUJsb2JVcmlzKGUuY29udGVudCk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignUG9zdFJlbmRlcicsICgpID0+IHtcbiAgICAgICAgZWRpdG9yLnBhcnNlci5hZGROb2RlRmlsdGVyKCdpbWcnLCBpbWFnZXMgPT4ge1xuICAgICAgICAgIGVhY2gkZShpbWFnZXMsIGltZyA9PiB7XG4gICAgICAgICAgICBjb25zdCBzcmMgPSBpbWcuYXR0cignc3JjJyk7XG4gICAgICAgICAgICBpZiAoIXNyYyB8fCBibG9iQ2FjaGUuZ2V0QnlVcmkoc3JjKSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHRVcmkgPSB1cGxvYWRTdGF0dXMuZ2V0UmVzdWx0VXJpKHNyYyk7XG4gICAgICAgICAgICBpZiAocmVzdWx0VXJpKSB7XG4gICAgICAgICAgICAgIGltZy5hdHRyKCdzcmMnLCByZXN1bHRVcmkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmxvYkNhY2hlLFxuICAgICAgICBhZGRGaWx0ZXIsXG4gICAgICAgIHVwbG9hZEltYWdlcyxcbiAgICAgICAgdXBsb2FkSW1hZ2VzQXV0byxcbiAgICAgICAgc2NhbkZvckltYWdlcyxcbiAgICAgICAgZGVzdHJveVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0JDEgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IHNjaGVtYVR5cGUgPSBlZGl0b3Iuc2NoZW1hLnR5cGU7XG4gICAgICBjb25zdCBmb3JtYXRzID0ge1xuICAgICAgICB2YWxpZ250b3A6IFt7XG4gICAgICAgICAgICBzZWxlY3RvcjogJ3RkLHRoJyxcbiAgICAgICAgICAgIHN0eWxlczogeyB2ZXJ0aWNhbEFsaWduOiAndG9wJyB9XG4gICAgICAgICAgfV0sXG4gICAgICAgIHZhbGlnbm1pZGRsZTogW3tcbiAgICAgICAgICAgIHNlbGVjdG9yOiAndGQsdGgnLFxuICAgICAgICAgICAgc3R5bGVzOiB7IHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnIH1cbiAgICAgICAgICB9XSxcbiAgICAgICAgdmFsaWduYm90dG9tOiBbe1xuICAgICAgICAgICAgc2VsZWN0b3I6ICd0ZCx0aCcsXG4gICAgICAgICAgICBzdHlsZXM6IHsgdmVydGljYWxBbGlnbjogJ2JvdHRvbScgfVxuICAgICAgICAgIH1dLFxuICAgICAgICBhbGlnbmxlZnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWxlY3RvcjogJ2ZpZ3VyZS5pbWFnZScsXG4gICAgICAgICAgICBjb2xsYXBzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgY2xhc3NlczogJ2FsaWduLWxlZnQnLFxuICAgICAgICAgICAgY2VGYWxzZU92ZXJyaWRlOiB0cnVlLFxuICAgICAgICAgICAgcHJldmlldzogJ2ZvbnQtZmFtaWx5IGZvbnQtc2l6ZSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnZmlndXJlLHAsaDEsaDIsaDMsaDQsaDUsaDYsdGQsdGgsdHIsZGl2LHVsLG9sLGxpLHByZScsXG4gICAgICAgICAgICBzdHlsZXM6IHsgdGV4dEFsaWduOiAnbGVmdCcgfSxcbiAgICAgICAgICAgIGluaGVyaXQ6IGZhbHNlLFxuICAgICAgICAgICAgcHJldmlldzogZmFsc2VcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnaW1nLGF1ZGlvLHZpZGVvJyxcbiAgICAgICAgICAgIGNvbGxhcHNlZDogZmFsc2UsXG4gICAgICAgICAgICBzdHlsZXM6IHsgZmxvYXQ6ICdsZWZ0JyB9LFxuICAgICAgICAgICAgcHJldmlldzogJ2ZvbnQtZmFtaWx5IGZvbnQtc2l6ZSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiAndGFibGUnLFxuICAgICAgICAgICAgY29sbGFwc2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHN0eWxlczoge1xuICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiAnMHB4JyxcbiAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICdhdXRvJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uZm9ybWF0OiB0YWJsZSA9PiB7XG4gICAgICAgICAgICAgIGRvbS5zZXRTdHlsZSh0YWJsZSwgJ2Zsb2F0JywgbnVsbCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJldmlldzogJ2ZvbnQtZmFtaWx5IGZvbnQtc2l6ZSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnLm1jZS1wcmV2aWV3LW9iamVjdCxbZGF0YS1lcGhveC1lbWJlZC1pcmldJyxcbiAgICAgICAgICAgIGNlRmFsc2VPdmVycmlkZTogdHJ1ZSxcbiAgICAgICAgICAgIHN0eWxlczogeyBmbG9hdDogJ2xlZnQnIH1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGFsaWduY2VudGVyOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VsZWN0b3I6ICdmaWd1cmUscCxoMSxoMixoMyxoNCxoNSxoNix0ZCx0aCx0cixkaXYsdWwsb2wsbGkscHJlJyxcbiAgICAgICAgICAgIHN0eWxlczogeyB0ZXh0QWxpZ246ICdjZW50ZXInIH0sXG4gICAgICAgICAgICBpbmhlcml0OiBmYWxzZSxcbiAgICAgICAgICAgIHByZXZpZXc6ICdmb250LWZhbWlseSBmb250LXNpemUnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWxlY3RvcjogJ2ZpZ3VyZS5pbWFnZScsXG4gICAgICAgICAgICBjb2xsYXBzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgY2xhc3NlczogJ2FsaWduLWNlbnRlcicsXG4gICAgICAgICAgICBjZUZhbHNlT3ZlcnJpZGU6IHRydWUsXG4gICAgICAgICAgICBwcmV2aWV3OiAnZm9udC1mYW1pbHkgZm9udC1zaXplJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VsZWN0b3I6ICdpbWcsYXVkaW8sdmlkZW8nLFxuICAgICAgICAgICAgY29sbGFwc2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHN0eWxlczoge1xuICAgICAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiAnYXV0bycsXG4gICAgICAgICAgICAgIG1hcmdpblJpZ2h0OiAnYXV0bydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmV2aWV3OiBmYWxzZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VsZWN0b3I6ICd0YWJsZScsXG4gICAgICAgICAgICBjb2xsYXBzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgc3R5bGVzOiB7XG4gICAgICAgICAgICAgIG1hcmdpbkxlZnQ6ICdhdXRvJyxcbiAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICdhdXRvJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZXZpZXc6ICdmb250LWZhbWlseSBmb250LXNpemUnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWxlY3RvcjogJy5tY2UtcHJldmlldy1vYmplY3QnLFxuICAgICAgICAgICAgY2VGYWxzZU92ZXJyaWRlOiB0cnVlLFxuICAgICAgICAgICAgc3R5bGVzOiB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6ICd0YWJsZScsXG4gICAgICAgICAgICAgIG1hcmdpbkxlZnQ6ICdhdXRvJyxcbiAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICdhdXRvJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZXZpZXc6IGZhbHNlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWxlY3RvcjogJ1tkYXRhLWVwaG94LWVtYmVkLWlyaV0nLFxuICAgICAgICAgICAgY2VGYWxzZU92ZXJyaWRlOiB0cnVlLFxuICAgICAgICAgICAgc3R5bGVzOiB7XG4gICAgICAgICAgICAgIG1hcmdpbkxlZnQ6ICdhdXRvJyxcbiAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICdhdXRvJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZXZpZXc6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBhbGlnbnJpZ2h0OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VsZWN0b3I6ICdmaWd1cmUuaW1hZ2UnLFxuICAgICAgICAgICAgY29sbGFwc2VkOiBmYWxzZSxcbiAgICAgICAgICAgIGNsYXNzZXM6ICdhbGlnbi1yaWdodCcsXG4gICAgICAgICAgICBjZUZhbHNlT3ZlcnJpZGU6IHRydWUsXG4gICAgICAgICAgICBwcmV2aWV3OiAnZm9udC1mYW1pbHkgZm9udC1zaXplJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VsZWN0b3I6ICdmaWd1cmUscCxoMSxoMixoMyxoNCxoNSxoNix0ZCx0aCx0cixkaXYsdWwsb2wsbGkscHJlJyxcbiAgICAgICAgICAgIHN0eWxlczogeyB0ZXh0QWxpZ246ICdyaWdodCcgfSxcbiAgICAgICAgICAgIGluaGVyaXQ6IGZhbHNlLFxuICAgICAgICAgICAgcHJldmlldzogJ2ZvbnQtZmFtaWx5IGZvbnQtc2l6ZSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnaW1nLGF1ZGlvLHZpZGVvJyxcbiAgICAgICAgICAgIGNvbGxhcHNlZDogZmFsc2UsXG4gICAgICAgICAgICBzdHlsZXM6IHsgZmxvYXQ6ICdyaWdodCcgfSxcbiAgICAgICAgICAgIHByZXZpZXc6ICdmb250LWZhbWlseSBmb250LXNpemUnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWxlY3RvcjogJ3RhYmxlJyxcbiAgICAgICAgICAgIGNvbGxhcHNlZDogZmFsc2UsXG4gICAgICAgICAgICBzdHlsZXM6IHtcbiAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICcwcHgnLFxuICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiAnYXV0bydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbmZvcm1hdDogdGFibGUgPT4ge1xuICAgICAgICAgICAgICBkb20uc2V0U3R5bGUodGFibGUsICdmbG9hdCcsIG51bGwpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZXZpZXc6ICdmb250LWZhbWlseSBmb250LXNpemUnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWxlY3RvcjogJy5tY2UtcHJldmlldy1vYmplY3QsW2RhdGEtZXBob3gtZW1iZWQtaXJpXScsXG4gICAgICAgICAgICBjZUZhbHNlT3ZlcnJpZGU6IHRydWUsXG4gICAgICAgICAgICBzdHlsZXM6IHsgZmxvYXQ6ICdyaWdodCcgfSxcbiAgICAgICAgICAgIHByZXZpZXc6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBhbGlnbmp1c3RpZnk6IFt7XG4gICAgICAgICAgICBzZWxlY3RvcjogJ2ZpZ3VyZSxwLGgxLGgyLGgzLGg0LGg1LGg2LHRkLHRoLHRyLGRpdix1bCxvbCxsaSxwcmUnLFxuICAgICAgICAgICAgc3R5bGVzOiB7IHRleHRBbGlnbjogJ2p1c3RpZnknIH0sXG4gICAgICAgICAgICBpbmhlcml0OiBmYWxzZSxcbiAgICAgICAgICAgIHByZXZpZXc6ICdmb250LWZhbWlseSBmb250LXNpemUnXG4gICAgICAgICAgfV0sXG4gICAgICAgIGJvbGQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbmxpbmU6ICdzdHJvbmcnLFxuICAgICAgICAgICAgcmVtb3ZlOiAnYWxsJyxcbiAgICAgICAgICAgIHByZXNlcnZlX2F0dHJpYnV0ZXM6IFtcbiAgICAgICAgICAgICAgJ2NsYXNzJyxcbiAgICAgICAgICAgICAgJ3N0eWxlJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5saW5lOiAnc3BhbicsXG4gICAgICAgICAgICBzdHlsZXM6IHsgZm9udFdlaWdodDogJ2JvbGQnIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlubGluZTogJ2InLFxuICAgICAgICAgICAgcmVtb3ZlOiAnYWxsJyxcbiAgICAgICAgICAgIHByZXNlcnZlX2F0dHJpYnV0ZXM6IFtcbiAgICAgICAgICAgICAgJ2NsYXNzJyxcbiAgICAgICAgICAgICAgJ3N0eWxlJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgaXRhbGljOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5saW5lOiAnZW0nLFxuICAgICAgICAgICAgcmVtb3ZlOiAnYWxsJyxcbiAgICAgICAgICAgIHByZXNlcnZlX2F0dHJpYnV0ZXM6IFtcbiAgICAgICAgICAgICAgJ2NsYXNzJyxcbiAgICAgICAgICAgICAgJ3N0eWxlJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5saW5lOiAnc3BhbicsXG4gICAgICAgICAgICBzdHlsZXM6IHsgZm9udFN0eWxlOiAnaXRhbGljJyB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbmxpbmU6ICdpJyxcbiAgICAgICAgICAgIHJlbW92ZTogJ2FsbCcsXG4gICAgICAgICAgICBwcmVzZXJ2ZV9hdHRyaWJ1dGVzOiBbXG4gICAgICAgICAgICAgICdjbGFzcycsXG4gICAgICAgICAgICAgICdzdHlsZSdcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHVuZGVybGluZTogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlubGluZTogJ3NwYW4nLFxuICAgICAgICAgICAgc3R5bGVzOiB7IHRleHREZWNvcmF0aW9uOiAndW5kZXJsaW5lJyB9LFxuICAgICAgICAgICAgZXhhY3Q6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlubGluZTogJ3UnLFxuICAgICAgICAgICAgcmVtb3ZlOiAnYWxsJyxcbiAgICAgICAgICAgIHByZXNlcnZlX2F0dHJpYnV0ZXM6IFtcbiAgICAgICAgICAgICAgJ2NsYXNzJyxcbiAgICAgICAgICAgICAgJ3N0eWxlJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgc3RyaWtldGhyb3VnaDogKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBzcGFuID0ge1xuICAgICAgICAgICAgaW5saW5lOiAnc3BhbicsXG4gICAgICAgICAgICBzdHlsZXM6IHsgdGV4dERlY29yYXRpb246ICdsaW5lLXRocm91Z2gnIH0sXG4gICAgICAgICAgICBleGFjdDogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3Qgc3RyaWtlID0ge1xuICAgICAgICAgICAgaW5saW5lOiAnc3RyaWtlJyxcbiAgICAgICAgICAgIHJlbW92ZTogJ2FsbCcsXG4gICAgICAgICAgICBwcmVzZXJ2ZV9hdHRyaWJ1dGVzOiBbXG4gICAgICAgICAgICAgICdjbGFzcycsXG4gICAgICAgICAgICAgICdzdHlsZSdcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IHMgPSB7XG4gICAgICAgICAgICBpbmxpbmU6ICdzJyxcbiAgICAgICAgICAgIHJlbW92ZTogJ2FsbCcsXG4gICAgICAgICAgICBwcmVzZXJ2ZV9hdHRyaWJ1dGVzOiBbXG4gICAgICAgICAgICAgICdjbGFzcycsXG4gICAgICAgICAgICAgICdzdHlsZSdcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBzY2hlbWFUeXBlICE9PSAnaHRtbDQnID8gW1xuICAgICAgICAgICAgcyxcbiAgICAgICAgICAgIHNwYW4sXG4gICAgICAgICAgICBzdHJpa2VcbiAgICAgICAgICBdIDogW1xuICAgICAgICAgICAgc3BhbixcbiAgICAgICAgICAgIHMsXG4gICAgICAgICAgICBzdHJpa2VcbiAgICAgICAgICBdO1xuICAgICAgICB9KSgpLFxuICAgICAgICBmb3JlY29sb3I6IHtcbiAgICAgICAgICBpbmxpbmU6ICdzcGFuJyxcbiAgICAgICAgICBzdHlsZXM6IHsgY29sb3I6ICcldmFsdWUnIH0sXG4gICAgICAgICAgbGlua3M6IHRydWUsXG4gICAgICAgICAgcmVtb3ZlX3NpbWlsYXI6IHRydWUsXG4gICAgICAgICAgY2xlYXJfY2hpbGRfc3R5bGVzOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGhpbGl0ZWNvbG9yOiB7XG4gICAgICAgICAgaW5saW5lOiAnc3BhbicsXG4gICAgICAgICAgc3R5bGVzOiB7IGJhY2tncm91bmRDb2xvcjogJyV2YWx1ZScgfSxcbiAgICAgICAgICBsaW5rczogdHJ1ZSxcbiAgICAgICAgICByZW1vdmVfc2ltaWxhcjogdHJ1ZSxcbiAgICAgICAgICBjbGVhcl9jaGlsZF9zdHlsZXM6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgZm9udG5hbWU6IHtcbiAgICAgICAgICBpbmxpbmU6ICdzcGFuJyxcbiAgICAgICAgICB0b2dnbGU6IGZhbHNlLFxuICAgICAgICAgIHN0eWxlczogeyBmb250RmFtaWx5OiAnJXZhbHVlJyB9LFxuICAgICAgICAgIGNsZWFyX2NoaWxkX3N0eWxlczogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBmb250c2l6ZToge1xuICAgICAgICAgIGlubGluZTogJ3NwYW4nLFxuICAgICAgICAgIHRvZ2dsZTogZmFsc2UsXG4gICAgICAgICAgc3R5bGVzOiB7IGZvbnRTaXplOiAnJXZhbHVlJyB9LFxuICAgICAgICAgIGNsZWFyX2NoaWxkX3N0eWxlczogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBsaW5laGVpZ2h0OiB7XG4gICAgICAgICAgc2VsZWN0b3I6ICdoMSxoMixoMyxoNCxoNSxoNixwLGxpLHRkLHRoLGRpdicsXG4gICAgICAgICAgc3R5bGVzOiB7IGxpbmVIZWlnaHQ6ICcldmFsdWUnIH1cbiAgICAgICAgfSxcbiAgICAgICAgZm9udHNpemVfY2xhc3M6IHtcbiAgICAgICAgICBpbmxpbmU6ICdzcGFuJyxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7IGNsYXNzOiAnJXZhbHVlJyB9XG4gICAgICAgIH0sXG4gICAgICAgIGJsb2NrcXVvdGU6IHtcbiAgICAgICAgICBibG9jazogJ2Jsb2NrcXVvdGUnLFxuICAgICAgICAgIHdyYXBwZXI6IHRydWUsXG4gICAgICAgICAgcmVtb3ZlOiAnYWxsJ1xuICAgICAgICB9LFxuICAgICAgICBzdWJzY3JpcHQ6IHsgaW5saW5lOiAnc3ViJyB9LFxuICAgICAgICBzdXBlcnNjcmlwdDogeyBpbmxpbmU6ICdzdXAnIH0sXG4gICAgICAgIGNvZGU6IHsgaW5saW5lOiAnY29kZScgfSxcbiAgICAgICAgbGluazoge1xuICAgICAgICAgIGlubGluZTogJ2EnLFxuICAgICAgICAgIHNlbGVjdG9yOiAnYScsXG4gICAgICAgICAgcmVtb3ZlOiAnYWxsJyxcbiAgICAgICAgICBzcGxpdDogdHJ1ZSxcbiAgICAgICAgICBkZWVwOiB0cnVlLFxuICAgICAgICAgIG9ubWF0Y2g6IChub2RlLCBfZm10LCBfaXRlbU5hbWUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpc0VsZW1lbnQkNihub2RlKSAmJiBub2RlLmhhc0F0dHJpYnV0ZSgnaHJlZicpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25mb3JtYXQ6IChlbG0sIF9mbXQsIHZhcnMpID0+IHtcbiAgICAgICAgICAgIFRvb2xzLmVhY2godmFycywgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgZG9tLnNldEF0dHJpYihlbG0sIGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBsYW5nOiB7XG4gICAgICAgICAgaW5saW5lOiAnc3BhbicsXG4gICAgICAgICAgY2xlYXJfY2hpbGRfc3R5bGVzOiB0cnVlLFxuICAgICAgICAgIHJlbW92ZV9zaW1pbGFyOiB0cnVlLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICdsYW5nJzogJyV2YWx1ZScsXG4gICAgICAgICAgICAnZGF0YS1tY2UtbGFuZyc6IHZhcnMgPT4ge1xuICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgIHJldHVybiAoX2EgPSB2YXJzID09PSBudWxsIHx8IHZhcnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhcnMuY3VzdG9tVmFsdWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZW1vdmVmb3JtYXQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWxlY3RvcjogJ2Isc3Ryb25nLGVtLGksZm9udCx1LHN0cmlrZSxzLHN1YixzdXAsZGZuLGNvZGUsc2FtcCxrYmQsdmFyLGNpdGUsbWFyayxxLGRlbCxpbnMsc21hbGwnLFxuICAgICAgICAgICAgcmVtb3ZlOiAnYWxsJyxcbiAgICAgICAgICAgIHNwbGl0OiB0cnVlLFxuICAgICAgICAgICAgZXhwYW5kOiBmYWxzZSxcbiAgICAgICAgICAgIGJsb2NrX2V4cGFuZDogdHJ1ZSxcbiAgICAgICAgICAgIGRlZXA6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnc3BhbicsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXG4gICAgICAgICAgICAgICdzdHlsZScsXG4gICAgICAgICAgICAgICdjbGFzcydcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICByZW1vdmU6ICdlbXB0eScsXG4gICAgICAgICAgICBzcGxpdDogdHJ1ZSxcbiAgICAgICAgICAgIGV4cGFuZDogZmFsc2UsXG4gICAgICAgICAgICBkZWVwOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWxlY3RvcjogJyonLFxuICAgICAgICAgICAgYXR0cmlidXRlczogW1xuICAgICAgICAgICAgICAnc3R5bGUnLFxuICAgICAgICAgICAgICAnY2xhc3MnXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgc3BsaXQ6IGZhbHNlLFxuICAgICAgICAgICAgZXhwYW5kOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZXA6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgICBUb29scy5lYWNoKCdwIGgxIGgyIGgzIGg0IGg1IGg2IGRpdiBhZGRyZXNzIHByZSBkdCBkZCBzYW1wJy5zcGxpdCgvXFxzLyksIG5hbWUgPT4ge1xuICAgICAgICBmb3JtYXRzW25hbWVdID0ge1xuICAgICAgICAgIGJsb2NrOiBuYW1lLFxuICAgICAgICAgIHJlbW92ZTogJ2FsbCdcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZvcm1hdHM7XG4gICAgfTtcblxuICAgIGNvbnN0IGdlbmVyaWNCYXNlID0ge1xuICAgICAgcmVtb3ZlX3NpbWlsYXI6IHRydWUsXG4gICAgICBpbmhlcml0OiBmYWxzZVxuICAgIH07XG4gICAgY29uc3QgY2VsbEJhc2UgPSB7XG4gICAgICBzZWxlY3RvcjogJ3RkLHRoJyxcbiAgICAgIC4uLmdlbmVyaWNCYXNlXG4gICAgfTtcbiAgICBjb25zdCBjZWxsRm9ybWF0cyA9IHtcbiAgICAgIHRhYmxlY2VsbGJhY2tncm91bmRjb2xvcjoge1xuICAgICAgICBzdHlsZXM6IHsgYmFja2dyb3VuZENvbG9yOiAnJXZhbHVlJyB9LFxuICAgICAgICAuLi5jZWxsQmFzZVxuICAgICAgfSxcbiAgICAgIHRhYmxlY2VsbHZlcnRpY2FsYWxpZ246IHtcbiAgICAgICAgc3R5bGVzOiB7ICd2ZXJ0aWNhbC1hbGlnbic6ICcldmFsdWUnIH0sXG4gICAgICAgIC4uLmNlbGxCYXNlXG4gICAgICB9LFxuICAgICAgdGFibGVjZWxsYm9yZGVyY29sb3I6IHtcbiAgICAgICAgc3R5bGVzOiB7IGJvcmRlckNvbG9yOiAnJXZhbHVlJyB9LFxuICAgICAgICAuLi5jZWxsQmFzZVxuICAgICAgfSxcbiAgICAgIHRhYmxlY2VsbGNsYXNzOiB7XG4gICAgICAgIGNsYXNzZXM6IFsnJXZhbHVlJ10sXG4gICAgICAgIC4uLmNlbGxCYXNlXG4gICAgICB9LFxuICAgICAgdGFibGVjbGFzczoge1xuICAgICAgICBzZWxlY3RvcjogJ3RhYmxlJyxcbiAgICAgICAgY2xhc3NlczogWycldmFsdWUnXSxcbiAgICAgICAgLi4uZ2VuZXJpY0Jhc2VcbiAgICAgIH0sXG4gICAgICB0YWJsZWNlbGxib3JkZXJzdHlsZToge1xuICAgICAgICBzdHlsZXM6IHsgYm9yZGVyU3R5bGU6ICcldmFsdWUnIH0sXG4gICAgICAgIC4uLmNlbGxCYXNlXG4gICAgICB9LFxuICAgICAgdGFibGVjZWxsYm9yZGVyd2lkdGg6IHtcbiAgICAgICAgc3R5bGVzOiB7IGJvcmRlcldpZHRoOiAnJXZhbHVlJyB9LFxuICAgICAgICAuLi5jZWxsQmFzZVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ2V0ID0gY29uc3RhbnQoY2VsbEZvcm1hdHMpO1xuXG4gICAgY29uc3QgRm9ybWF0UmVnaXN0cnkgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZm9ybWF0cyA9IHt9O1xuICAgICAgY29uc3QgZ2V0JDIgPSBuYW1lID0+IGlzTm9uTnVsbGFibGUobmFtZSkgPyBmb3JtYXRzW25hbWVdIDogZm9ybWF0cztcbiAgICAgIGNvbnN0IGhhcyA9IG5hbWUgPT4gaGFzJDIoZm9ybWF0cywgbmFtZSk7XG4gICAgICBjb25zdCByZWdpc3RlciA9IChuYW1lLCBmb3JtYXQpID0+IHtcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICBpZiAoIWlzU3RyaW5nKG5hbWUpKSB7XG4gICAgICAgICAgICBlYWNoJGQobmFtZSwgKGZvcm1hdCwgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICByZWdpc3RlcihuYW1lLCBmb3JtYXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaXNBcnJheSQxKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgZm9ybWF0ID0gW2Zvcm1hdF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlYWNoJGUoZm9ybWF0LCBmb3JtYXQgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQoZm9ybWF0LmRlZXApKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0LmRlZXAgPSAhaXNTZWxlY3RvckZvcm1hdChmb3JtYXQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChmb3JtYXQuc3BsaXQpKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0LnNwbGl0ID0gIWlzU2VsZWN0b3JGb3JtYXQoZm9ybWF0KSB8fCBpc0lubGluZUZvcm1hdChmb3JtYXQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChmb3JtYXQucmVtb3ZlKSAmJiBpc1NlbGVjdG9yRm9ybWF0KGZvcm1hdCkgJiYgIWlzSW5saW5lRm9ybWF0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQucmVtb3ZlID0gJ25vbmUnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChpc1NlbGVjdG9yRm9ybWF0KGZvcm1hdCkgJiYgaXNJbmxpbmVGb3JtYXQoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGZvcm1hdC5taXhlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9ybWF0LmJsb2NrX2V4cGFuZCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGlzU3RyaW5nKGZvcm1hdC5jbGFzc2VzKSkge1xuICAgICAgICAgICAgICAgIGZvcm1hdC5jbGFzc2VzID0gZm9ybWF0LmNsYXNzZXMuc3BsaXQoL1xccysvKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3JtYXRzW25hbWVdID0gZm9ybWF0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHVucmVnaXN0ZXIgPSBuYW1lID0+IHtcbiAgICAgICAgaWYgKG5hbWUgJiYgZm9ybWF0c1tuYW1lXSkge1xuICAgICAgICAgIGRlbGV0ZSBmb3JtYXRzW25hbWVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtYXRzO1xuICAgICAgfTtcbiAgICAgIHJlZ2lzdGVyKGdldCQxKGVkaXRvcikpO1xuICAgICAgcmVnaXN0ZXIoZ2V0KCkpO1xuICAgICAgcmVnaXN0ZXIoZ2V0Rm9ybWF0cyhlZGl0b3IpKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdldDogZ2V0JDIsXG4gICAgICAgIGhhcyxcbiAgICAgICAgcmVnaXN0ZXIsXG4gICAgICAgIHVucmVnaXN0ZXJcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGVhY2gkMyA9IFRvb2xzLmVhY2g7XG4gICAgY29uc3QgZG9tID0gRE9NVXRpbHMuRE9NO1xuICAgIGNvbnN0IGlzUHJldmlld0l0ZW0gPSBpdGVtID0+IGlzTm9uTnVsbGFibGUoaXRlbSkgJiYgaXNPYmplY3QoaXRlbSk7XG4gICAgY29uc3QgcGFyc2VkU2VsZWN0b3JUb0h0bWwgPSAoYW5jZXN0cnksIGVkaXRvcikgPT4ge1xuICAgICAgY29uc3Qgc2NoZW1hID0gZWRpdG9yICYmIGVkaXRvci5zY2hlbWEgfHwgU2NoZW1hKHt9KTtcbiAgICAgIGNvbnN0IGRlY29yYXRlID0gKGVsbSwgaXRlbSkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5jbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBkb20uYWRkQ2xhc3MoZWxtLCBpdGVtLmNsYXNzZXMuam9pbignICcpKTtcbiAgICAgICAgfVxuICAgICAgICBkb20uc2V0QXR0cmlicyhlbG0sIGl0ZW0uYXR0cnMpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNyZWF0ZUVsZW1lbnQgPSBzSXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBpc1N0cmluZyhzSXRlbSkgPyB7XG4gICAgICAgICAgbmFtZTogc0l0ZW0sXG4gICAgICAgICAgY2xhc3NlczogW10sXG4gICAgICAgICAgYXR0cnM6IHt9XG4gICAgICAgIH0gOiBzSXRlbTtcbiAgICAgICAgY29uc3QgZWxtID0gZG9tLmNyZWF0ZShpdGVtLm5hbWUpO1xuICAgICAgICBkZWNvcmF0ZShlbG0sIGl0ZW0pO1xuICAgICAgICByZXR1cm4gZWxtO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldFJlcXVpcmVkUGFyZW50ID0gKGVsbSwgY2FuZGlkYXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsbVJ1bGUgPSBzY2hlbWEuZ2V0RWxlbWVudFJ1bGUoZWxtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBjb25zdCBwYXJlbnRzUmVxdWlyZWQgPSBlbG1SdWxlID09PSBudWxsIHx8IGVsbVJ1bGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVsbVJ1bGUucGFyZW50c1JlcXVpcmVkO1xuICAgICAgICBpZiAocGFyZW50c1JlcXVpcmVkICYmIHBhcmVudHNSZXF1aXJlZC5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlICYmIGNvbnRhaW5zJDIocGFyZW50c1JlcXVpcmVkLCBjYW5kaWRhdGUpID8gY2FuZGlkYXRlIDogcGFyZW50c1JlcXVpcmVkWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHdyYXBJbkh0bWwgPSAoZWxtLCBhbmNlc3RvcnMsIHNpYmxpbmdzKSA9PiB7XG4gICAgICAgIGxldCBwYXJlbnRDYW5kaWRhdGU7XG4gICAgICAgIGNvbnN0IGFuY2VzdG9yID0gYW5jZXN0b3JzWzBdO1xuICAgICAgICBjb25zdCBhbmNlc3Rvck5hbWUgPSBpc1ByZXZpZXdJdGVtKGFuY2VzdG9yKSA/IGFuY2VzdG9yLm5hbWUgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHBhcmVudFJlcXVpcmVkID0gZ2V0UmVxdWlyZWRQYXJlbnQoZWxtLCBhbmNlc3Rvck5hbWUpO1xuICAgICAgICBpZiAocGFyZW50UmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAoYW5jZXN0b3JOYW1lID09PSBwYXJlbnRSZXF1aXJlZCkge1xuICAgICAgICAgICAgcGFyZW50Q2FuZGlkYXRlID0gYW5jZXN0b3I7XG4gICAgICAgICAgICBhbmNlc3RvcnMgPSBhbmNlc3RvcnMuc2xpY2UoMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcmVudENhbmRpZGF0ZSA9IHBhcmVudFJlcXVpcmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChhbmNlc3Rvcikge1xuICAgICAgICAgIHBhcmVudENhbmRpZGF0ZSA9IGFuY2VzdG9yO1xuICAgICAgICAgIGFuY2VzdG9ycyA9IGFuY2VzdG9ycy5zbGljZSgxKTtcbiAgICAgICAgfSBlbHNlIGlmICghc2libGluZ3MpIHtcbiAgICAgICAgICByZXR1cm4gZWxtO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHBhcmVudENhbmRpZGF0ZSA/IGNyZWF0ZUVsZW1lbnQocGFyZW50Q2FuZGlkYXRlKSA6IGRvbS5jcmVhdGUoJ2RpdicpO1xuICAgICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoZWxtKTtcbiAgICAgICAgaWYgKHNpYmxpbmdzKSB7XG4gICAgICAgICAgVG9vbHMuZWFjaChzaWJsaW5ncywgc2libGluZyA9PiB7XG4gICAgICAgICAgICBjb25zdCBzaWJsaW5nRWxtID0gY3JlYXRlRWxlbWVudChzaWJsaW5nKTtcbiAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoc2libGluZ0VsbSwgZWxtKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnRTaWJsaW5ncyA9IGlzUHJldmlld0l0ZW0ocGFyZW50Q2FuZGlkYXRlKSA/IHBhcmVudENhbmRpZGF0ZS5zaWJsaW5ncyA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHdyYXBJbkh0bWwocGFyZW50LCBhbmNlc3RvcnMsIHBhcmVudFNpYmxpbmdzKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBmcmFnbWVudCA9IGRvbS5jcmVhdGUoJ2RpdicpO1xuICAgICAgaWYgKGFuY2VzdHJ5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGFuY2VzdHJ5WzBdO1xuICAgICAgICBjb25zdCBlbG0gPSBjcmVhdGVFbGVtZW50KGl0ZW0pO1xuICAgICAgICBjb25zdCBzaWJsaW5ncyA9IGlzUHJldmlld0l0ZW0oaXRlbSkgPyBpdGVtLnNpYmxpbmdzIDogdW5kZWZpbmVkO1xuICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZCh3cmFwSW5IdG1sKGVsbSwgYW5jZXN0cnkuc2xpY2UoMSksIHNpYmxpbmdzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnJhZ21lbnQ7XG4gICAgfTtcbiAgICBjb25zdCBwYXJzZVNlbGVjdG9ySXRlbSA9IGl0ZW0gPT4ge1xuICAgICAgaXRlbSA9IFRvb2xzLnRyaW0oaXRlbSk7XG4gICAgICBsZXQgdGFnTmFtZSA9ICdkaXYnO1xuICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICBuYW1lOiB0YWdOYW1lLFxuICAgICAgICBjbGFzc2VzOiBbXSxcbiAgICAgICAgYXR0cnM6IHt9LFxuICAgICAgICBzZWxlY3RvcjogaXRlbVxuICAgICAgfTtcbiAgICAgIGlmIChpdGVtICE9PSAnKicpIHtcbiAgICAgICAgdGFnTmFtZSA9IGl0ZW0ucmVwbGFjZSgvKD86KFsjXFwuXXw6Oj8pKFtcXHdcXC1dKyl8KFxcWykoW15cXF1dKylcXF0/KS9nLCAoJDAsICQxLCAkMiwgJDMsICQ0KSA9PiB7XG4gICAgICAgICAgc3dpdGNoICgkMSkge1xuICAgICAgICAgIGNhc2UgJyMnOlxuICAgICAgICAgICAgb2JqLmF0dHJzLmlkID0gJDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICcuJzpcbiAgICAgICAgICAgIG9iai5jbGFzc2VzLnB1c2goJDIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnOic6XG4gICAgICAgICAgICBpZiAoVG9vbHMuaW5BcnJheSgnY2hlY2tlZCBkaXNhYmxlZCBlbmFibGVkIHJlYWQtb25seSByZXF1aXJlZCcuc3BsaXQoJyAnKSwgJDIpICE9PSAtMSkge1xuICAgICAgICAgICAgICBvYmouYXR0cnNbJDJdID0gJDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCQzID09PSAnWycpIHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSAkNC5tYXRjaCgvKFtcXHdcXC1dKykoPzpcXD1cXFwiKFteXFxcIl0rKSk/Lyk7XG4gICAgICAgICAgICBpZiAobSkge1xuICAgICAgICAgICAgICBvYmouYXR0cnNbbVsxXV0gPSBtWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgb2JqLm5hbWUgPSB0YWdOYW1lIHx8ICdkaXYnO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICAgIGNvbnN0IHBhcnNlU2VsZWN0b3IgPSBzZWxlY3RvciA9PiB7XG4gICAgICBpZiAoIWlzU3RyaW5nKHNlbGVjdG9yKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLnNwbGl0KC9cXHMqLFxccyovKVswXTtcbiAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3IucmVwbGFjZSgvXFxzKih+XFwrfH58XFwrfD4pXFxzKi9nLCAnJDEnKTtcbiAgICAgIHJldHVybiBUb29scy5tYXAoc2VsZWN0b3Iuc3BsaXQoLyg/Oj58XFxzKyg/IVteXFxbXFxdXStcXF0pKS8pLCBpdGVtID0+IHtcbiAgICAgICAgY29uc3Qgc2libGluZ3MgPSBUb29scy5tYXAoaXRlbS5zcGxpdCgvKD86flxcK3x+fFxcKykvKSwgcGFyc2VTZWxlY3Rvckl0ZW0pO1xuICAgICAgICBjb25zdCBvYmogPSBzaWJsaW5ncy5wb3AoKTtcbiAgICAgICAgaWYgKHNpYmxpbmdzLmxlbmd0aCkge1xuICAgICAgICAgIG9iai5zaWJsaW5ncyA9IHNpYmxpbmdzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9KS5yZXZlcnNlKCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRDc3NUZXh0ID0gKGVkaXRvciwgZm9ybWF0KSA9PiB7XG4gICAgICBsZXQgcHJldmlld0NzcyA9ICcnO1xuICAgICAgbGV0IHByZXZpZXdTdHlsZXMgPSBnZXRQcmV2aWV3U3R5bGVzKGVkaXRvcik7XG4gICAgICBpZiAocHJldmlld1N0eWxlcyA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVtb3ZlVmFycyA9IHZhbCA9PiB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyh2YWwpID8gdmFsLnJlcGxhY2UoLyUoXFx3KykvZywgJycpIDogJyc7XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0Q29tcHV0ZWRTdHlsZSA9IChuYW1lLCBlbG0pID0+IHtcbiAgICAgICAgcmV0dXJuIGRvbS5nZXRTdHlsZShlbG0gIT09IG51bGwgJiYgZWxtICE9PSB2b2lkIDAgPyBlbG0gOiBlZGl0b3IuZ2V0Qm9keSgpLCBuYW1lLCB0cnVlKTtcbiAgICAgIH07XG4gICAgICBpZiAoaXNTdHJpbmcoZm9ybWF0KSkge1xuICAgICAgICBjb25zdCBmb3JtYXRzID0gZWRpdG9yLmZvcm1hdHRlci5nZXQoZm9ybWF0KTtcbiAgICAgICAgaWYgKCFmb3JtYXRzKSB7XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGZvcm1hdCA9IGZvcm1hdHNbMF07XG4gICAgICB9XG4gICAgICBpZiAoJ3ByZXZpZXcnIGluIGZvcm1hdCkge1xuICAgICAgICBjb25zdCBwcmV2aWV3ID0gZm9ybWF0LnByZXZpZXc7XG4gICAgICAgIGlmIChwcmV2aWV3ID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aWV3U3R5bGVzID0gcHJldmlldyB8fCBwcmV2aWV3U3R5bGVzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgbmFtZSA9IGZvcm1hdC5ibG9jayB8fCBmb3JtYXQuaW5saW5lIHx8ICdzcGFuJztcbiAgICAgIGxldCBwcmV2aWV3RnJhZztcbiAgICAgIGNvbnN0IGl0ZW1zID0gcGFyc2VTZWxlY3Rvcihmb3JtYXQuc2VsZWN0b3IpO1xuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKCFpdGVtc1swXS5uYW1lKSB7XG4gICAgICAgICAgaXRlbXNbMF0ubmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgbmFtZSA9IGZvcm1hdC5zZWxlY3RvcjtcbiAgICAgICAgcHJldmlld0ZyYWcgPSBwYXJzZWRTZWxlY3RvclRvSHRtbChpdGVtcywgZWRpdG9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZXZpZXdGcmFnID0gcGFyc2VkU2VsZWN0b3JUb0h0bWwoW25hbWVdLCBlZGl0b3IpO1xuICAgICAgfVxuICAgICAgY29uc3QgcHJldmlld0VsbSA9IGRvbS5zZWxlY3QobmFtZSwgcHJldmlld0ZyYWcpWzBdIHx8IHByZXZpZXdGcmFnLmZpcnN0Q2hpbGQ7XG4gICAgICBlYWNoJDMoZm9ybWF0LnN0eWxlcywgKHZhbHVlLCBuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gcmVtb3ZlVmFycyh2YWx1ZSk7XG4gICAgICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgICAgIGRvbS5zZXRTdHlsZShwcmV2aWV3RWxtLCBuYW1lLCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWFjaCQzKGZvcm1hdC5hdHRyaWJ1dGVzLCAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSByZW1vdmVWYXJzKHZhbHVlKTtcbiAgICAgICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICAgICAgZG9tLnNldEF0dHJpYihwcmV2aWV3RWxtLCBuYW1lLCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWFjaCQzKGZvcm1hdC5jbGFzc2VzLCB2YWx1ZSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gcmVtb3ZlVmFycyh2YWx1ZSk7XG4gICAgICAgIGlmICghZG9tLmhhc0NsYXNzKHByZXZpZXdFbG0sIG5ld1ZhbHVlKSkge1xuICAgICAgICAgIGRvbS5hZGRDbGFzcyhwcmV2aWV3RWxtLCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLmRpc3BhdGNoKCdQcmV2aWV3Rm9ybWF0cycpO1xuICAgICAgZG9tLnNldFN0eWxlcyhwcmV2aWV3RnJhZywge1xuICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgbGVmdDogLTY1NTM1XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5nZXRCb2R5KCkuYXBwZW5kQ2hpbGQocHJldmlld0ZyYWcpO1xuICAgICAgY29uc3QgcmF3UGFyZW50Rm9udFNpemUgPSBnZXRDb21wdXRlZFN0eWxlKCdmb250U2l6ZScpO1xuICAgICAgY29uc3QgcGFyZW50Rm9udFNpemUgPSAvcHgkLy50ZXN0KHJhd1BhcmVudEZvbnRTaXplKSA/IHBhcnNlSW50KHJhd1BhcmVudEZvbnRTaXplLCAxMCkgOiAwO1xuICAgICAgZWFjaCQzKHByZXZpZXdTdHlsZXMuc3BsaXQoJyAnKSwgbmFtZSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGdldENvbXB1dGVkU3R5bGUobmFtZSwgcHJldmlld0VsbSk7XG4gICAgICAgIGlmIChuYW1lID09PSAnYmFja2dyb3VuZC1jb2xvcicgJiYgL3RyYW5zcGFyZW50fHJnYmFcXHMqXFwoW14pXSssXFxzKjBcXCkvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUgPSBnZXRDb21wdXRlZFN0eWxlKG5hbWUpO1xuICAgICAgICAgIGlmIChyZ2JhVG9IZXhTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkgPT09ICcjZmZmZmZmJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZSA9PT0gJ2NvbG9yJykge1xuICAgICAgICAgIGlmIChyZ2JhVG9IZXhTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkgPT09ICcjMDAwMDAwJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZSA9PT0gJ2ZvbnQtc2l6ZScpIHtcbiAgICAgICAgICBpZiAoL2VtfCUkLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKHBhcmVudEZvbnRTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG51bVZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSkgLyAoLyUkLy50ZXN0KHZhbHVlKSA/IDEwMCA6IDEpO1xuICAgICAgICAgICAgdmFsdWUgPSBudW1WYWx1ZSAqIHBhcmVudEZvbnRTaXplICsgJ3B4JztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWUgPT09ICdib3JkZXInICYmIHZhbHVlKSB7XG4gICAgICAgICAgcHJldmlld0NzcyArPSAncGFkZGluZzowIDJweDsnO1xuICAgICAgICB9XG4gICAgICAgIHByZXZpZXdDc3MgKz0gbmFtZSArICc6JyArIHZhbHVlICsgJzsnO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ0FmdGVyUHJldmlld0Zvcm1hdHMnKTtcbiAgICAgIGRvbS5yZW1vdmUocHJldmlld0ZyYWcpO1xuICAgICAgcmV0dXJuIHByZXZpZXdDc3M7XG4gICAgfTtcblxuICAgIGNvbnN0IHNldHVwJHIgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmFkZFNob3J0Y3V0KCdtZXRhK2InLCAnJywgJ0JvbGQnKTtcbiAgICAgIGVkaXRvci5hZGRTaG9ydGN1dCgnbWV0YStpJywgJycsICdJdGFsaWMnKTtcbiAgICAgIGVkaXRvci5hZGRTaG9ydGN1dCgnbWV0YSt1JywgJycsICdVbmRlcmxpbmUnKTtcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDY7IGkrKykge1xuICAgICAgICBlZGl0b3IuYWRkU2hvcnRjdXQoJ2FjY2VzcysnICsgaSwgJycsIFtcbiAgICAgICAgICAnRm9ybWF0QmxvY2snLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICdoJyArIGlcbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgICBlZGl0b3IuYWRkU2hvcnRjdXQoJ2FjY2Vzcys3JywgJycsIFtcbiAgICAgICAgJ0Zvcm1hdEJsb2NrJyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgICdwJ1xuICAgICAgXSk7XG4gICAgICBlZGl0b3IuYWRkU2hvcnRjdXQoJ2FjY2Vzcys4JywgJycsIFtcbiAgICAgICAgJ0Zvcm1hdEJsb2NrJyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgICdkaXYnXG4gICAgICBdKTtcbiAgICAgIGVkaXRvci5hZGRTaG9ydGN1dCgnYWNjZXNzKzknLCAnJywgW1xuICAgICAgICAnRm9ybWF0QmxvY2snLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgJ2FkZHJlc3MnXG4gICAgICBdKTtcbiAgICB9O1xuXG4gICAgY29uc3QgRm9ybWF0dGVyID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdHMgPSBGb3JtYXRSZWdpc3RyeShlZGl0b3IpO1xuICAgICAgY29uc3QgZm9ybWF0Q2hhbmdlU3RhdGUgPSBDZWxsKHt9KTtcbiAgICAgIHNldHVwJHIoZWRpdG9yKTtcbiAgICAgIHNldHVwJHUoZWRpdG9yKTtcbiAgICAgIGlmICghaXNSdGMoZWRpdG9yKSkge1xuICAgICAgICBzZXR1cCR0KGZvcm1hdENoYW5nZVN0YXRlLCBlZGl0b3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0OiBmb3JtYXRzLmdldCxcbiAgICAgICAgaGFzOiBmb3JtYXRzLmhhcyxcbiAgICAgICAgcmVnaXN0ZXI6IGZvcm1hdHMucmVnaXN0ZXIsXG4gICAgICAgIHVucmVnaXN0ZXI6IGZvcm1hdHMudW5yZWdpc3RlcixcbiAgICAgICAgYXBwbHk6IChuYW1lLCB2YXJzLCBub2RlKSA9PiB7XG4gICAgICAgICAgYXBwbHlGb3JtYXQoZWRpdG9yLCBuYW1lLCB2YXJzLCBub2RlKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVtb3ZlOiAobmFtZSwgdmFycywgbm9kZSwgc2ltaWxhcikgPT4ge1xuICAgICAgICAgIHJlbW92ZUZvcm1hdChlZGl0b3IsIG5hbWUsIHZhcnMsIG5vZGUsIHNpbWlsYXIpO1xuICAgICAgICB9LFxuICAgICAgICB0b2dnbGU6IChuYW1lLCB2YXJzLCBub2RlKSA9PiB7XG4gICAgICAgICAgdG9nZ2xlRm9ybWF0KGVkaXRvciwgbmFtZSwgdmFycywgbm9kZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1hdGNoOiAobmFtZSwgdmFycywgbm9kZSwgc2ltaWxhcikgPT4gbWF0Y2hGb3JtYXQoZWRpdG9yLCBuYW1lLCB2YXJzLCBub2RlLCBzaW1pbGFyKSxcbiAgICAgICAgY2xvc2VzdDogbmFtZXMgPT4gY2xvc2VzdEZvcm1hdChlZGl0b3IsIG5hbWVzKSxcbiAgICAgICAgbWF0Y2hBbGw6IChuYW1lcywgdmFycykgPT4gbWF0Y2hBbGxGb3JtYXRzKGVkaXRvciwgbmFtZXMsIHZhcnMpLFxuICAgICAgICBtYXRjaE5vZGU6IChub2RlLCBuYW1lLCB2YXJzLCBzaW1pbGFyKSA9PiBtYXRjaE5vZGVGb3JtYXQoZWRpdG9yLCBub2RlLCBuYW1lLCB2YXJzLCBzaW1pbGFyKSxcbiAgICAgICAgY2FuQXBwbHk6IG5hbWUgPT4gY2FuQXBwbHlGb3JtYXQoZWRpdG9yLCBuYW1lKSxcbiAgICAgICAgZm9ybWF0Q2hhbmdlZDogKGZvcm1hdHMsIGNhbGxiYWNrLCBzaW1pbGFyLCB2YXJzKSA9PiBmb3JtYXRDaGFuZ2VkKGVkaXRvciwgZm9ybWF0Q2hhbmdlU3RhdGUsIGZvcm1hdHMsIGNhbGxiYWNrLCBzaW1pbGFyLCB2YXJzKSxcbiAgICAgICAgZ2V0Q3NzVGV4dDogY3VycnkoZ2V0Q3NzVGV4dCwgZWRpdG9yKVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2hvdWxkSWdub3JlQ29tbWFuZCA9IGNtZCA9PiB7XG4gICAgICBzd2l0Y2ggKGNtZC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlICd1bmRvJzpcbiAgICAgIGNhc2UgJ3JlZG8nOlxuICAgICAgY2FzZSAnbWNlZm9jdXMnOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyRXZlbnRzID0gKGVkaXRvciwgdW5kb01hbmFnZXIsIGxvY2tzKSA9PiB7XG4gICAgICBjb25zdCBpc0ZpcnN0VHlwZWRDaGFyYWN0ZXIgPSBDZWxsKGZhbHNlKTtcbiAgICAgIGNvbnN0IGFkZE5vblR5cGluZ1VuZG9MZXZlbCA9IGUgPT4ge1xuICAgICAgICBzZXRUeXBpbmcodW5kb01hbmFnZXIsIGZhbHNlLCBsb2Nrcyk7XG4gICAgICAgIHVuZG9NYW5hZ2VyLmFkZCh7fSwgZSk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLm9uKCdpbml0JywgKCkgPT4ge1xuICAgICAgICB1bmRvTWFuYWdlci5hZGQoKTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdCZWZvcmVFeGVjQ29tbWFuZCcsIGUgPT4ge1xuICAgICAgICBjb25zdCBjbWQgPSBlLmNvbW1hbmQ7XG4gICAgICAgIGlmICghc2hvdWxkSWdub3JlQ29tbWFuZChjbWQpKSB7XG4gICAgICAgICAgZW5kVHlwaW5nKHVuZG9NYW5hZ2VyLCBsb2Nrcyk7XG4gICAgICAgICAgdW5kb01hbmFnZXIuYmVmb3JlQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdFeGVjQ29tbWFuZCcsIGUgPT4ge1xuICAgICAgICBjb25zdCBjbWQgPSBlLmNvbW1hbmQ7XG4gICAgICAgIGlmICghc2hvdWxkSWdub3JlQ29tbWFuZChjbWQpKSB7XG4gICAgICAgICAgYWRkTm9uVHlwaW5nVW5kb0xldmVsKGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignT2JqZWN0UmVzaXplU3RhcnQgY3V0JywgKCkgPT4ge1xuICAgICAgICB1bmRvTWFuYWdlci5iZWZvcmVDaGFuZ2UoKTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdTYXZlQ29udGVudCBPYmplY3RSZXNpemVkIGJsdXInLCBhZGROb25UeXBpbmdVbmRvTGV2ZWwpO1xuICAgICAgZWRpdG9yLm9uKCdkcmFnZW5kJywgYWRkTm9uVHlwaW5nVW5kb0xldmVsKTtcbiAgICAgIGVkaXRvci5vbigna2V5dXAnLCBlID0+IHtcbiAgICAgICAgY29uc3Qga2V5Q29kZSA9IGUua2V5Q29kZTtcbiAgICAgICAgaWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNNZXRhID0gRW52Lm9zLmlzTWFjT1MoKSAmJiBlLmtleSA9PT0gJ01ldGEnO1xuICAgICAgICBpZiAoa2V5Q29kZSA+PSAzMyAmJiBrZXlDb2RlIDw9IDM2IHx8IGtleUNvZGUgPj0gMzcgJiYga2V5Q29kZSA8PSA0MCB8fCBrZXlDb2RlID09PSA0NSB8fCBlLmN0cmxLZXkgfHwgaXNNZXRhKSB7XG4gICAgICAgICAgYWRkTm9uVHlwaW5nVW5kb0xldmVsKCk7XG4gICAgICAgICAgZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleUNvZGUgPT09IDQ2IHx8IGtleUNvZGUgPT09IDgpIHtcbiAgICAgICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGaXJzdFR5cGVkQ2hhcmFjdGVyLmdldCgpICYmIHVuZG9NYW5hZ2VyLnR5cGluZyAmJiAhaXNFcSQxKGNyZWF0ZUZyb21FZGl0b3IoZWRpdG9yKSwgdW5kb01hbmFnZXIuZGF0YVswXSkpIHtcbiAgICAgICAgICBpZiAoIWVkaXRvci5pc0RpcnR5KCkpIHtcbiAgICAgICAgICAgIGVkaXRvci5zZXREaXJ0eSh0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWRpdG9yLmRpc3BhdGNoKCdUeXBpbmdVbmRvJyk7XG4gICAgICAgICAgaXNGaXJzdFR5cGVkQ2hhcmFjdGVyLnNldChmYWxzZSk7XG4gICAgICAgICAgZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdrZXlkb3duJywgZSA9PiB7XG4gICAgICAgIGNvbnN0IGtleUNvZGUgPSBlLmtleUNvZGU7XG4gICAgICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXlDb2RlID49IDMzICYmIGtleUNvZGUgPD0gMzYgfHwga2V5Q29kZSA+PSAzNyAmJiBrZXlDb2RlIDw9IDQwIHx8IGtleUNvZGUgPT09IDQ1KSB7XG4gICAgICAgICAgaWYgKHVuZG9NYW5hZ2VyLnR5cGluZykge1xuICAgICAgICAgICAgYWRkTm9uVHlwaW5nVW5kb0xldmVsKGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbW9kS2V5ID0gZS5jdHJsS2V5ICYmICFlLmFsdEtleSB8fCBlLm1ldGFLZXk7XG4gICAgICAgIGlmICgoa2V5Q29kZSA8IDE2IHx8IGtleUNvZGUgPiAyMCkgJiYga2V5Q29kZSAhPT0gMjI0ICYmIGtleUNvZGUgIT09IDkxICYmICF1bmRvTWFuYWdlci50eXBpbmcgJiYgIW1vZEtleSkge1xuICAgICAgICAgIHVuZG9NYW5hZ2VyLmJlZm9yZUNoYW5nZSgpO1xuICAgICAgICAgIHNldFR5cGluZyh1bmRvTWFuYWdlciwgdHJ1ZSwgbG9ja3MpO1xuICAgICAgICAgIHVuZG9NYW5hZ2VyLmFkZCh7fSwgZSk7XG4gICAgICAgICAgaXNGaXJzdFR5cGVkQ2hhcmFjdGVyLnNldCh0cnVlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGFzT25seU1ldGFPckN0cmxNb2RpZmllciA9IEVudi5vcy5pc01hY09TKCkgPyBlLm1ldGFLZXkgOiBlLmN0cmxLZXkgJiYgIWUuYWx0S2V5O1xuICAgICAgICBpZiAoaGFzT25seU1ldGFPckN0cmxNb2RpZmllcikge1xuICAgICAgICAgIHVuZG9NYW5hZ2VyLmJlZm9yZUNoYW5nZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignbW91c2Vkb3duJywgZSA9PiB7XG4gICAgICAgIGlmICh1bmRvTWFuYWdlci50eXBpbmcpIHtcbiAgICAgICAgICBhZGROb25UeXBpbmdVbmRvTGV2ZWwoZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgaXNJbnNlcnRSZXBsYWNlbWVudFRleHQgPSBldmVudCA9PiBldmVudC5pbnB1dFR5cGUgPT09ICdpbnNlcnRSZXBsYWNlbWVudFRleHQnO1xuICAgICAgY29uc3QgaXNJbnNlcnRUZXh0RGF0YU51bGwgPSBldmVudCA9PiBldmVudC5pbnB1dFR5cGUgPT09ICdpbnNlcnRUZXh0JyAmJiBldmVudC5kYXRhID09PSBudWxsO1xuICAgICAgY29uc3QgaXNJbnNlcnRGcm9tUGFzdGVPckRyb3AgPSBldmVudCA9PiBldmVudC5pbnB1dFR5cGUgPT09ICdpbnNlcnRGcm9tUGFzdGUnIHx8IGV2ZW50LmlucHV0VHlwZSA9PT0gJ2luc2VydEZyb21Ecm9wJztcbiAgICAgIGVkaXRvci5vbignaW5wdXQnLCBlID0+IHtcbiAgICAgICAgaWYgKGUuaW5wdXRUeXBlICYmIChpc0luc2VydFJlcGxhY2VtZW50VGV4dChlKSB8fCBpc0luc2VydFRleHREYXRhTnVsbChlKSB8fCBpc0luc2VydEZyb21QYXN0ZU9yRHJvcChlKSkpIHtcbiAgICAgICAgICBhZGROb25UeXBpbmdVbmRvTGV2ZWwoZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdBZGRVbmRvIFVuZG8gUmVkbyBDbGVhclVuZG9zJywgZSA9PiB7XG4gICAgICAgIGlmICghZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIGVkaXRvci5ub2RlQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFkZEtleWJvYXJkU2hvcnRjdXRzID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5hZGRTaG9ydGN1dCgnbWV0YSt6JywgJycsICdVbmRvJyk7XG4gICAgICBlZGl0b3IuYWRkU2hvcnRjdXQoJ21ldGEreSxtZXRhK3NoaWZ0K3onLCAnJywgJ1JlZG8nKTtcbiAgICB9O1xuXG4gICAgY29uc3QgVW5kb01hbmFnZXIgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgYmVmb3JlQm9va21hcmsgPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBsb2NrcyA9IENlbGwoMCk7XG4gICAgICBjb25zdCBpbmRleCA9IENlbGwoMCk7XG4gICAgICBjb25zdCB1bmRvTWFuYWdlciA9IHtcbiAgICAgICAgZGF0YTogW10sXG4gICAgICAgIHR5cGluZzogZmFsc2UsXG4gICAgICAgIGJlZm9yZUNoYW5nZTogKCkgPT4ge1xuICAgICAgICAgIGJlZm9yZUNoYW5nZShlZGl0b3IsIGxvY2tzLCBiZWZvcmVCb29rbWFyayk7XG4gICAgICAgIH0sXG4gICAgICAgIGFkZDogKGxldmVsLCBldmVudCkgPT4ge1xuICAgICAgICAgIHJldHVybiBhZGRVbmRvTGV2ZWwoZWRpdG9yLCB1bmRvTWFuYWdlciwgaW5kZXgsIGxvY2tzLCBiZWZvcmVCb29rbWFyaywgbGV2ZWwsIGV2ZW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgZGlzcGF0Y2hDaGFuZ2U6ICgpID0+IHtcbiAgICAgICAgICBlZGl0b3Iuc2V0RGlydHkodHJ1ZSk7XG4gICAgICAgICAgY29uc3QgbGV2ZWwgPSBjcmVhdGVGcm9tRWRpdG9yKGVkaXRvcik7XG4gICAgICAgICAgbGV2ZWwuYm9va21hcmsgPSBnZXRVbmRvQm9va21hcmsoZWRpdG9yLnNlbGVjdGlvbik7XG4gICAgICAgICAgZWRpdG9yLmRpc3BhdGNoKCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICBsZXZlbCxcbiAgICAgICAgICAgIGxhc3RMZXZlbDogZ2V0JGIodW5kb01hbmFnZXIuZGF0YSwgaW5kZXguZ2V0KCkpLmdldE9yVW5kZWZpbmVkKClcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgdW5kbzogKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB1bmRvKGVkaXRvciwgdW5kb01hbmFnZXIsIGxvY2tzLCBpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZG86ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVkbyhlZGl0b3IsIGluZGV4LCB1bmRvTWFuYWdlci5kYXRhKTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcbiAgICAgICAgICBjbGVhcihlZGl0b3IsIHVuZG9NYW5hZ2VyLCBpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlc2V0OiAoKSA9PiB7XG4gICAgICAgICAgcmVzZXQoZWRpdG9yLCB1bmRvTWFuYWdlcik7XG4gICAgICAgIH0sXG4gICAgICAgIGhhc1VuZG86ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gaGFzVW5kbyhlZGl0b3IsIHVuZG9NYW5hZ2VyLCBpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIGhhc1JlZG86ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gaGFzUmVkbyhlZGl0b3IsIHVuZG9NYW5hZ2VyLCBpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zYWN0OiBjYWxsYmFjayA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRyYW5zYWN0KGVkaXRvciwgdW5kb01hbmFnZXIsIGxvY2tzLCBjYWxsYmFjayk7XG4gICAgICAgIH0sXG4gICAgICAgIGlnbm9yZTogY2FsbGJhY2sgPT4ge1xuICAgICAgICAgIGlnbm9yZShlZGl0b3IsIGxvY2tzLCBjYWxsYmFjayk7XG4gICAgICAgIH0sXG4gICAgICAgIGV4dHJhOiAoY2FsbGJhY2sxLCBjYWxsYmFjazIpID0+IHtcbiAgICAgICAgICBleHRyYShlZGl0b3IsIHVuZG9NYW5hZ2VyLCBpbmRleCwgY2FsbGJhY2sxLCBjYWxsYmFjazIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKCFpc1J0YyhlZGl0b3IpKSB7XG4gICAgICAgIHJlZ2lzdGVyRXZlbnRzKGVkaXRvciwgdW5kb01hbmFnZXIsIGxvY2tzKTtcbiAgICAgIH1cbiAgICAgIGFkZEtleWJvYXJkU2hvcnRjdXRzKGVkaXRvcik7XG4gICAgICByZXR1cm4gdW5kb01hbmFnZXI7XG4gICAgfTtcblxuICAgIGNvbnN0IG5vblR5cGluZ0tleWNvZGVzID0gW1xuICAgICAgOSxcbiAgICAgIDI3LFxuICAgICAgVksuSE9NRSxcbiAgICAgIFZLLkVORCxcbiAgICAgIDE5LFxuICAgICAgMjAsXG4gICAgICA0NCxcbiAgICAgIDE0NCxcbiAgICAgIDE0NSxcbiAgICAgIDMzLFxuICAgICAgMzQsXG4gICAgICA0NSxcbiAgICAgIDE2LFxuICAgICAgMTcsXG4gICAgICAxOCxcbiAgICAgIDkxLFxuICAgICAgOTIsXG4gICAgICA5MyxcbiAgICAgIFZLLkRPV04sXG4gICAgICBWSy5VUCxcbiAgICAgIFZLLkxFRlQsXG4gICAgICBWSy5SSUdIVFxuICAgIF0uY29uY2F0KEVudi5icm93c2VyLmlzRmlyZWZveCgpID8gWzIyNF0gOiBbXSk7XG4gICAgY29uc3QgcGxhY2Vob2xkZXJBdHRyID0gJ2RhdGEtbWNlLXBsYWNlaG9sZGVyJztcbiAgICBjb25zdCBpc0tleWJvYXJkRXZlbnQgPSBlID0+IGUudHlwZSA9PT0gJ2tleWRvd24nIHx8IGUudHlwZSA9PT0gJ2tleXVwJztcbiAgICBjb25zdCBpc0RlbGV0ZUV2ZW50ID0gZSA9PiB7XG4gICAgICBjb25zdCBrZXlDb2RlID0gZS5rZXlDb2RlO1xuICAgICAgcmV0dXJuIGtleUNvZGUgPT09IFZLLkJBQ0tTUEFDRSB8fCBrZXlDb2RlID09PSBWSy5ERUxFVEU7XG4gICAgfTtcbiAgICBjb25zdCBpc05vblR5cGluZ0tleWJvYXJkRXZlbnQgPSBlID0+IHtcbiAgICAgIGlmIChpc0tleWJvYXJkRXZlbnQoZSkpIHtcbiAgICAgICAgY29uc3Qga2V5Q29kZSA9IGUua2V5Q29kZTtcbiAgICAgICAgcmV0dXJuICFpc0RlbGV0ZUV2ZW50KGUpICYmIChWSy5tZXRhS2V5UHJlc3NlZChlKSB8fCBlLmFsdEtleSB8fCBrZXlDb2RlID49IDExMiAmJiBrZXlDb2RlIDw9IDEyMyB8fCBjb250YWlucyQyKG5vblR5cGluZ0tleWNvZGVzLCBrZXlDb2RlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc1R5cGluZ0tleWJvYXJkRXZlbnQgPSBlID0+IGlzS2V5Ym9hcmRFdmVudChlKSAmJiAhKGlzRGVsZXRlRXZlbnQoZSkgfHwgZS50eXBlID09PSAna2V5dXAnICYmIGUua2V5Q29kZSA9PT0gMjI5KTtcbiAgICBjb25zdCBpc1Zpc3VhbGx5RW1wdHkgPSAoZG9tLCByb290RWxtLCBmb3JjZWRSb290QmxvY2spID0+IHtcbiAgICAgIGlmIChpc0VtcHR5JDIoU3VnYXJFbGVtZW50LmZyb21Eb20ocm9vdEVsbSksIGZhbHNlKSkge1xuICAgICAgICBjb25zdCBmaXJzdEVsZW1lbnQgPSByb290RWxtLmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgICBpZiAoIWZpcnN0RWxlbWVudCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGRvbS5nZXRTdHlsZShyb290RWxtLmZpcnN0RWxlbWVudENoaWxkLCAncGFkZGluZy1sZWZ0JykgfHwgZG9tLmdldFN0eWxlKHJvb3RFbG0uZmlyc3RFbGVtZW50Q2hpbGQsICdwYWRkaW5nLXJpZ2h0JykpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZvcmNlZFJvb3RCbG9jayA9PT0gZmlyc3RFbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldHVwJHEgPSBlZGl0b3IgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IHJvb3RCbG9jayA9IGdldEZvcmNlZFJvb3RCbG9jayhlZGl0b3IpO1xuICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSAoX2EgPSBnZXRQbGFjZWhvbGRlcihlZGl0b3IpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgIGNvbnN0IHVwZGF0ZVBsYWNlaG9sZGVyID0gKGUsIGluaXRpYWwpID0+IHtcbiAgICAgICAgaWYgKGlzTm9uVHlwaW5nS2V5Ym9hcmRFdmVudChlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBib2R5ID0gZWRpdG9yLmdldEJvZHkoKTtcbiAgICAgICAgY29uc3Qgc2hvd1BsYWNlaG9sZGVyID0gaXNUeXBpbmdLZXlib2FyZEV2ZW50KGUpID8gZmFsc2UgOiBpc1Zpc3VhbGx5RW1wdHkoZG9tLCBib2R5LCByb290QmxvY2spO1xuICAgICAgICBjb25zdCBpc1BsYWNlaG9sZGVyU2hvd24gPSBkb20uZ2V0QXR0cmliKGJvZHksIHBsYWNlaG9sZGVyQXR0cikgIT09ICcnO1xuICAgICAgICBpZiAoaXNQbGFjZWhvbGRlclNob3duICE9PSBzaG93UGxhY2Vob2xkZXIgfHwgaW5pdGlhbCkge1xuICAgICAgICAgIGRvbS5zZXRBdHRyaWIoYm9keSwgcGxhY2Vob2xkZXJBdHRyLCBzaG93UGxhY2Vob2xkZXIgPyBwbGFjZWhvbGRlciA6IG51bGwpO1xuICAgICAgICAgIGRvbS5zZXRBdHRyaWIoYm9keSwgJ2FyaWEtcGxhY2Vob2xkZXInLCBzaG93UGxhY2Vob2xkZXIgPyBwbGFjZWhvbGRlciA6IG51bGwpO1xuICAgICAgICAgIGZpcmVQbGFjZWhvbGRlclRvZ2dsZShlZGl0b3IsIHNob3dQbGFjZWhvbGRlcik7XG4gICAgICAgICAgZWRpdG9yLm9uKHNob3dQbGFjZWhvbGRlciA/ICdrZXlkb3duJyA6ICdrZXl1cCcsIHVwZGF0ZVBsYWNlaG9sZGVyKTtcbiAgICAgICAgICBlZGl0b3Iub2ZmKHNob3dQbGFjZWhvbGRlciA/ICdrZXl1cCcgOiAna2V5ZG93bicsIHVwZGF0ZVBsYWNlaG9sZGVyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChpc05vdEVtcHR5KHBsYWNlaG9sZGVyKSkge1xuICAgICAgICBlZGl0b3Iub24oJ2luaXQnLCBlID0+IHtcbiAgICAgICAgICB1cGRhdGVQbGFjZWhvbGRlcihlLCB0cnVlKTtcbiAgICAgICAgICBlZGl0b3Iub24oJ2NoYW5nZSBTZXRDb250ZW50IEV4ZWNDb21tYW5kJywgdXBkYXRlUGxhY2Vob2xkZXIpO1xuICAgICAgICAgIGVkaXRvci5vbigncGFzdGUnLCBlID0+IERlbGF5LnNldEVkaXRvclRpbWVvdXQoZWRpdG9yLCAoKSA9PiB1cGRhdGVQbGFjZWhvbGRlcihlKSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgYmxvY2tQb3NpdGlvbiA9IChibG9jaywgcG9zaXRpb24pID0+ICh7XG4gICAgICBibG9jayxcbiAgICAgIHBvc2l0aW9uXG4gICAgfSk7XG4gICAgY29uc3QgYmxvY2tCb3VuZGFyeSA9IChmcm9tLCB0bykgPT4gKHtcbiAgICAgIGZyb20sXG4gICAgICB0b1xuICAgIH0pO1xuICAgIGNvbnN0IGdldEJsb2NrUG9zaXRpb24gPSAocm9vdE5vZGUsIHBvcykgPT4ge1xuICAgICAgY29uc3Qgcm9vdEVsbSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJvb3ROb2RlKTtcbiAgICAgIGNvbnN0IGNvbnRhaW5lckVsbSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHBvcy5jb250YWluZXIoKSk7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50QmxvY2skMihyb290RWxtLCBjb250YWluZXJFbG0pLm1hcChibG9jayA9PiBibG9ja1Bvc2l0aW9uKGJsb2NrLCBwb3MpKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzRGlmZmVyZW50QmxvY2tzID0gYmxvY2tCb3VuZGFyeSA9PiAhZXEoYmxvY2tCb3VuZGFyeS5mcm9tLmJsb2NrLCBibG9ja0JvdW5kYXJ5LnRvLmJsb2NrKTtcbiAgICBjb25zdCBnZXRDbG9zZXN0SG9zdCA9IChyb290LCBzY29wZSkgPT4ge1xuICAgICAgY29uc3QgaXNSb290ID0gbm9kZSA9PiBlcShub2RlLCByb290KTtcbiAgICAgIGNvbnN0IGlzSG9zdCA9IG5vZGUgPT4gaXNUYWJsZUNlbGwkMihub2RlKSB8fCBpc0NvbnRlbnRFZGl0YWJsZVRydWUkMyhub2RlLmRvbSk7XG4gICAgICByZXR1cm4gY2xvc2VzdCQ0KHNjb3BlLCBpc0hvc3QsIGlzUm9vdCkuZmlsdGVyKGlzRWxlbWVudCQ3KS5nZXRPcihyb290KTtcbiAgICB9O1xuICAgIGNvbnN0IGhhc1NhbWVIb3N0ID0gKHJvb3ROb2RlLCBibG9ja0JvdW5kYXJ5KSA9PiB7XG4gICAgICBjb25zdCByb290ID0gU3VnYXJFbGVtZW50LmZyb21Eb20ocm9vdE5vZGUpO1xuICAgICAgcmV0dXJuIGVxKGdldENsb3Nlc3RIb3N0KHJvb3QsIGJsb2NrQm91bmRhcnkuZnJvbS5ibG9jayksIGdldENsb3Nlc3RIb3N0KHJvb3QsIGJsb2NrQm91bmRhcnkudG8uYmxvY2spKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzRWRpdGFibGUkMSA9IGJsb2NrQm91bmRhcnkgPT4gaXNDb250ZW50RWRpdGFibGVGYWxzZSRiKGJsb2NrQm91bmRhcnkuZnJvbS5ibG9jay5kb20pID09PSBmYWxzZSAmJiBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJGIoYmxvY2tCb3VuZGFyeS50by5ibG9jay5kb20pID09PSBmYWxzZTtcbiAgICBjb25zdCBoYXNWYWxpZEJsb2NrcyA9IGJsb2NrQm91bmRhcnkgPT4ge1xuICAgICAgY29uc3QgaXNWYWxpZEJsb2NrID0gYmxvY2sgPT4gaXNUZXh0QmxvY2skMihibG9jaykgfHwgaGFzQmxvY2tBdHRyKGJsb2NrLmRvbSk7XG4gICAgICByZXR1cm4gaXNWYWxpZEJsb2NrKGJsb2NrQm91bmRhcnkuZnJvbS5ibG9jaykgJiYgaXNWYWxpZEJsb2NrKGJsb2NrQm91bmRhcnkudG8uYmxvY2spO1xuICAgIH07XG4gICAgY29uc3Qgc2tpcExhc3RCciA9IChyb290Tm9kZSwgZm9yd2FyZCwgYmxvY2tQb3NpdGlvbikgPT4ge1xuICAgICAgaWYgKGlzQnIkNihibG9ja1Bvc2l0aW9uLnBvc2l0aW9uLmdldE5vZGUoKSkgJiYgIWlzRW1wdHkkMihibG9ja1Bvc2l0aW9uLmJsb2NrKSkge1xuICAgICAgICByZXR1cm4gcG9zaXRpb25JbihmYWxzZSwgYmxvY2tQb3NpdGlvbi5ibG9jay5kb20pLmJpbmQobGFzdFBvc2l0aW9uSW5CbG9jayA9PiB7XG4gICAgICAgICAgaWYgKGxhc3RQb3NpdGlvbkluQmxvY2suaXNFcXVhbChibG9ja1Bvc2l0aW9uLnBvc2l0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Qb3NpdGlvbihmb3J3YXJkLCByb290Tm9kZSwgbGFzdFBvc2l0aW9uSW5CbG9jaykuYmluZCh0byA9PiBnZXRCbG9ja1Bvc2l0aW9uKHJvb3ROb2RlLCB0bykpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShibG9ja1Bvc2l0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLmdldE9yKGJsb2NrUG9zaXRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGJsb2NrUG9zaXRpb247XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZWFkRnJvbVJhbmdlID0gKHJvb3ROb2RlLCBmb3J3YXJkLCBybmcpID0+IHtcbiAgICAgIGNvbnN0IGZyb21CbG9ja1BvcyA9IGdldEJsb2NrUG9zaXRpb24ocm9vdE5vZGUsIENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQocm5nKSk7XG4gICAgICBjb25zdCB0b0Jsb2NrUG9zID0gZnJvbUJsb2NrUG9zLmJpbmQoYmxvY2tQb3MgPT4gZnJvbVBvc2l0aW9uKGZvcndhcmQsIHJvb3ROb2RlLCBibG9ja1Bvcy5wb3NpdGlvbikuYmluZCh0byA9PiBnZXRCbG9ja1Bvc2l0aW9uKHJvb3ROb2RlLCB0bykubWFwKGJsb2NrUG9zID0+IHNraXBMYXN0QnIocm9vdE5vZGUsIGZvcndhcmQsIGJsb2NrUG9zKSkpKTtcbiAgICAgIHJldHVybiBsaWZ0Mihmcm9tQmxvY2tQb3MsIHRvQmxvY2tQb3MsIGJsb2NrQm91bmRhcnkpLmZpbHRlcihibG9ja0JvdW5kYXJ5ID0+IGlzRGlmZmVyZW50QmxvY2tzKGJsb2NrQm91bmRhcnkpICYmIGhhc1NhbWVIb3N0KHJvb3ROb2RlLCBibG9ja0JvdW5kYXJ5KSAmJiBpc0VkaXRhYmxlJDEoYmxvY2tCb3VuZGFyeSkgJiYgaGFzVmFsaWRCbG9ja3MoYmxvY2tCb3VuZGFyeSkpO1xuICAgIH07XG4gICAgY29uc3QgcmVhZCQxID0gKHJvb3ROb2RlLCBmb3J3YXJkLCBybmcpID0+IHJuZy5jb2xsYXBzZWQgPyByZWFkRnJvbVJhbmdlKHJvb3ROb2RlLCBmb3J3YXJkLCBybmcpIDogT3B0aW9uYWwubm9uZSgpO1xuXG4gICAgY29uc3QgZ2V0Q2hpbGRyZW5VbnRpbEJsb2NrQm91bmRhcnkgPSBibG9jayA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGNoaWxkcmVuJDEoYmxvY2spO1xuICAgICAgcmV0dXJuIGZpbmRJbmRleCQyKGNoaWxkcmVuLCBpc0Jsb2NrJDIpLmZvbGQoY29uc3RhbnQoY2hpbGRyZW4pLCBpbmRleCA9PiBjaGlsZHJlbi5zbGljZSgwLCBpbmRleCkpO1xuICAgIH07XG4gICAgY29uc3QgZXh0cmFjdENoaWxkcmVuID0gYmxvY2sgPT4ge1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBnZXRDaGlsZHJlblVudGlsQmxvY2tCb3VuZGFyeShibG9jayk7XG4gICAgICBlYWNoJGUoY2hpbGRyZW4sIHJlbW92ZSQ1KTtcbiAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZUVtcHR5Um9vdCA9IChyb290Tm9kZSwgYmxvY2spID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudHMgPSBwYXJlbnRzQW5kU2VsZihibG9jaywgcm9vdE5vZGUpO1xuICAgICAgcmV0dXJuIGZpbmQkMihwYXJlbnRzLnJldmVyc2UoKSwgZWxlbWVudCA9PiBpc0VtcHR5JDIoZWxlbWVudCkpLmVhY2gocmVtb3ZlJDUpO1xuICAgIH07XG4gICAgY29uc3QgaXNFbXB0eUJlZm9yZSA9IGVsID0+IGZpbHRlciQ1KHByZXZTaWJsaW5ncyhlbCksIGVsID0+ICFpc0VtcHR5JDIoZWwpKS5sZW5ndGggPT09IDA7XG4gICAgY29uc3QgbmVzdGVkQmxvY2tNZXJnZSA9IChyb290Tm9kZSwgZnJvbUJsb2NrLCB0b0Jsb2NrLCBpbnNlcnRpb25Qb2ludCkgPT4ge1xuICAgICAgaWYgKGlzRW1wdHkkMih0b0Jsb2NrKSkge1xuICAgICAgICBmaWxsV2l0aFBhZGRpbmdCcih0b0Jsb2NrKTtcbiAgICAgICAgcmV0dXJuIGZpcnN0UG9zaXRpb25Jbih0b0Jsb2NrLmRvbSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNFbXB0eUJlZm9yZShpbnNlcnRpb25Qb2ludCkgJiYgaXNFbXB0eSQyKGZyb21CbG9jaykpIHtcbiAgICAgICAgYmVmb3JlJDMoaW5zZXJ0aW9uUG9pbnQsIFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdicicpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gcHJldlBvc2l0aW9uKHRvQmxvY2suZG9tLCBDYXJldFBvc2l0aW9uLmJlZm9yZShpbnNlcnRpb25Qb2ludC5kb20pKTtcbiAgICAgIGVhY2gkZShleHRyYWN0Q2hpbGRyZW4oZnJvbUJsb2NrKSwgY2hpbGQgPT4ge1xuICAgICAgICBiZWZvcmUkMyhpbnNlcnRpb25Qb2ludCwgY2hpbGQpO1xuICAgICAgfSk7XG4gICAgICByZW1vdmVFbXB0eVJvb3Qocm9vdE5vZGUsIGZyb21CbG9jayk7XG4gICAgICByZXR1cm4gcG9zaXRpb247XG4gICAgfTtcbiAgICBjb25zdCBzaWRlbG9uZ0Jsb2NrTWVyZ2UgPSAocm9vdE5vZGUsIGZyb21CbG9jaywgdG9CbG9jaykgPT4ge1xuICAgICAgaWYgKGlzRW1wdHkkMih0b0Jsb2NrKSkge1xuICAgICAgICBpZiAoaXNFbXB0eSQyKGZyb21CbG9jaykpIHtcbiAgICAgICAgICBjb25zdCBnZXRJbmxpbmVUb0Jsb2NrRGVzY2VuZGFudHMgPSBlbCA9PiB7XG4gICAgICAgICAgICBjb25zdCBoZWxwZXIgPSAobm9kZSwgZWxlbWVudHMpID0+IGZpcnN0Q2hpbGQobm9kZSkuZm9sZCgoKSA9PiBlbGVtZW50cywgY2hpbGQgPT4gaXNJbmxpbmUkMShjaGlsZCkgPyBoZWxwZXIoY2hpbGQsIGVsZW1lbnRzLmNvbmNhdChzaGFsbG93JDEoY2hpbGQpKSkgOiBlbGVtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gaGVscGVyKGVsLCBbXSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBuZXdGcm9tQmxvY2tEZXNjZW5kYW50cyA9IGZvbGRyKGdldElubGluZVRvQmxvY2tEZXNjZW5kYW50cyh0b0Jsb2NrKSwgKGVsZW1lbnQsIGRlc2NlbmRhbnQpID0+IHtcbiAgICAgICAgICAgIHdyYXAkMihlbGVtZW50LCBkZXNjZW5kYW50KTtcbiAgICAgICAgICAgIHJldHVybiBkZXNjZW5kYW50O1xuICAgICAgICAgIH0sIGNyZWF0ZVBhZGRpbmdCcigpKTtcbiAgICAgICAgICBlbXB0eShmcm9tQmxvY2spO1xuICAgICAgICAgIGFwcGVuZCQxKGZyb21CbG9jaywgbmV3RnJvbUJsb2NrRGVzY2VuZGFudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZSQ1KHRvQmxvY2spO1xuICAgICAgICByZXR1cm4gZmlyc3RQb3NpdGlvbkluKGZyb21CbG9jay5kb20pO1xuICAgICAgfVxuICAgICAgY29uc3QgcG9zaXRpb24gPSBsYXN0UG9zaXRpb25Jbih0b0Jsb2NrLmRvbSk7XG4gICAgICBlYWNoJGUoZXh0cmFjdENoaWxkcmVuKGZyb21CbG9jayksIGNoaWxkID0+IHtcbiAgICAgICAgYXBwZW5kJDEodG9CbG9jaywgY2hpbGQpO1xuICAgICAgfSk7XG4gICAgICByZW1vdmVFbXB0eVJvb3Qocm9vdE5vZGUsIGZyb21CbG9jayk7XG4gICAgICByZXR1cm4gcG9zaXRpb247XG4gICAgfTtcbiAgICBjb25zdCBmaW5kSW5zZXJ0aW9uUG9pbnQgPSAodG9CbG9jaywgYmxvY2spID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudHNBbmRTZWxmJDEgPSBwYXJlbnRzQW5kU2VsZihibG9jaywgdG9CbG9jayk7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShwYXJlbnRzQW5kU2VsZiQxW3BhcmVudHNBbmRTZWxmJDEubGVuZ3RoIC0gMV0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0SW5zZXJ0aW9uUG9pbnQgPSAoZnJvbUJsb2NrLCB0b0Jsb2NrKSA9PiBjb250YWlucyh0b0Jsb2NrLCBmcm9tQmxvY2spID8gZmluZEluc2VydGlvblBvaW50KHRvQmxvY2ssIGZyb21CbG9jaykgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgY29uc3QgdHJpbUJyID0gKGZpcnN0LCBibG9jaykgPT4ge1xuICAgICAgcG9zaXRpb25JbihmaXJzdCwgYmxvY2suZG9tKS5iaW5kKHBvc2l0aW9uID0+IE9wdGlvbmFsLmZyb20ocG9zaXRpb24uZ2V0Tm9kZSgpKSkubWFwKFN1Z2FyRWxlbWVudC5mcm9tRG9tKS5maWx0ZXIoaXNCciQ1KS5lYWNoKHJlbW92ZSQ1KTtcbiAgICB9O1xuICAgIGNvbnN0IG1lcmdlQmxvY2tJbnRvID0gKHJvb3ROb2RlLCBmcm9tQmxvY2ssIHRvQmxvY2spID0+IHtcbiAgICAgIHRyaW1Ccih0cnVlLCBmcm9tQmxvY2spO1xuICAgICAgdHJpbUJyKGZhbHNlLCB0b0Jsb2NrKTtcbiAgICAgIHJldHVybiBnZXRJbnNlcnRpb25Qb2ludChmcm9tQmxvY2ssIHRvQmxvY2spLmZvbGQoY3Vycnkoc2lkZWxvbmdCbG9ja01lcmdlLCByb290Tm9kZSwgZnJvbUJsb2NrLCB0b0Jsb2NrKSwgY3VycnkobmVzdGVkQmxvY2tNZXJnZSwgcm9vdE5vZGUsIGZyb21CbG9jaywgdG9CbG9jaykpO1xuICAgIH07XG4gICAgY29uc3QgbWVyZ2VCbG9ja3MgPSAocm9vdE5vZGUsIGZvcndhcmQsIGJsb2NrMSwgYmxvY2syKSA9PiBmb3J3YXJkID8gbWVyZ2VCbG9ja0ludG8ocm9vdE5vZGUsIGJsb2NrMiwgYmxvY2sxKSA6IG1lcmdlQmxvY2tJbnRvKHJvb3ROb2RlLCBibG9jazEsIGJsb2NrMik7XG5cbiAgICBjb25zdCBiYWNrc3BhY2VEZWxldGUkOSA9IChlZGl0b3IsIGZvcndhcmQpID0+IHtcbiAgICAgIGNvbnN0IHJvb3ROb2RlID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IHJlYWQkMShyb290Tm9kZS5kb20sIGZvcndhcmQsIGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpLm1hcChibG9ja0JvdW5kYXJ5ID0+ICgpID0+IHtcbiAgICAgICAgbWVyZ2VCbG9ja3Mocm9vdE5vZGUsIGZvcndhcmQsIGJsb2NrQm91bmRhcnkuZnJvbS5ibG9jaywgYmxvY2tCb3VuZGFyeS50by5ibG9jaykuZWFjaChwb3MgPT4ge1xuICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHBvcy50b1JhbmdlKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgIH07XG5cbiAgICBjb25zdCBkZWxldGVSYW5nZU1lcmdlQmxvY2tzID0gKHJvb3ROb2RlLCBzZWxlY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IHNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIHJldHVybiBsaWZ0MihnZXRQYXJlbnRCbG9jayQyKHJvb3ROb2RlLCBTdWdhckVsZW1lbnQuZnJvbURvbShybmcuc3RhcnRDb250YWluZXIpKSwgZ2V0UGFyZW50QmxvY2skMihyb290Tm9kZSwgU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLmVuZENvbnRhaW5lcikpLCAoYmxvY2sxLCBibG9jazIpID0+IHtcbiAgICAgICAgaWYgKCFlcShibG9jazEsIGJsb2NrMikpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSgoKSA9PiB7XG4gICAgICAgICAgICBybmcuZGVsZXRlQ29udGVudHMoKTtcbiAgICAgICAgICAgIG1lcmdlQmxvY2tzKHJvb3ROb2RlLCB0cnVlLCBibG9jazEsIGJsb2NrMikuZWFjaChwb3MgPT4ge1xuICAgICAgICAgICAgICBzZWxlY3Rpb24uc2V0Um5nKHBvcy50b1JhbmdlKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfSkuZ2V0T3IoT3B0aW9uYWwubm9uZSgpKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzUmF3Tm9kZUluVGFibGUgPSAocm9vdCwgcmF3Tm9kZSkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJhd05vZGUpO1xuICAgICAgY29uc3QgaXNSb290ID0gY3VycnkoZXEsIHJvb3QpO1xuICAgICAgcmV0dXJuIGFuY2VzdG9yJDQobm9kZSwgaXNUYWJsZUNlbGwkMiwgaXNSb290KS5pc1NvbWUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzU2VsZWN0aW9uSW5UYWJsZSA9IChyb290LCBybmcpID0+IGlzUmF3Tm9kZUluVGFibGUocm9vdCwgcm5nLnN0YXJ0Q29udGFpbmVyKSB8fCBpc1Jhd05vZGVJblRhYmxlKHJvb3QsIHJuZy5lbmRDb250YWluZXIpO1xuICAgIGNvbnN0IGlzRXZlcnl0aGluZ1NlbGVjdGVkID0gKHJvb3QsIHJuZykgPT4ge1xuICAgICAgY29uc3Qgbm9QcmV2aW91cyA9IHByZXZQb3NpdGlvbihyb290LmRvbSwgQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChybmcpKS5pc05vbmUoKTtcbiAgICAgIGNvbnN0IG5vTmV4dCA9IG5leHRQb3NpdGlvbihyb290LmRvbSwgQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VFbmQocm5nKSkuaXNOb25lKCk7XG4gICAgICByZXR1cm4gIWlzU2VsZWN0aW9uSW5UYWJsZShyb290LCBybmcpICYmIG5vUHJldmlvdXMgJiYgbm9OZXh0O1xuICAgIH07XG4gICAgY29uc3QgZW1wdHlFZGl0b3IgPSBlZGl0b3IgPT4ge1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoKCkgPT4ge1xuICAgICAgICBlZGl0b3Iuc2V0Q29udGVudCgnJyk7XG4gICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Q3Vyc29yTG9jYXRpb24oKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZGVsZXRlUmFuZ2UkMiA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCByb290Tm9kZSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIHJldHVybiBpc0V2ZXJ5dGhpbmdTZWxlY3RlZChyb290Tm9kZSwgcm5nKSA/IGVtcHR5RWRpdG9yKGVkaXRvcikgOiBkZWxldGVSYW5nZU1lcmdlQmxvY2tzKHJvb3ROb2RlLCBlZGl0b3Iuc2VsZWN0aW9uKTtcbiAgICB9O1xuICAgIGNvbnN0IGJhY2tzcGFjZURlbGV0ZSQ4ID0gKGVkaXRvciwgX2ZvcndhcmQpID0+IGVkaXRvci5zZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSA/IE9wdGlvbmFsLm5vbmUoKSA6IGRlbGV0ZVJhbmdlJDIoZWRpdG9yKTtcblxuICAgIGNvbnN0IHNob3dDYXJldCA9IChkaXJlY3Rpb24sIGVkaXRvciwgbm9kZSwgYmVmb3JlLCBzY3JvbGxJbnRvVmlldykgPT4gT3B0aW9uYWwuZnJvbShlZGl0b3IuX3NlbGVjdGlvbk92ZXJyaWRlcy5zaG93Q2FyZXQoZGlyZWN0aW9uLCBub2RlLCBiZWZvcmUsIHNjcm9sbEludG9WaWV3KSk7XG4gICAgY29uc3QgZ2V0Tm9kZVJhbmdlID0gbm9kZSA9PiB7XG4gICAgICBjb25zdCBybmcgPSBub2RlLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHJuZy5zZWxlY3ROb2RlKG5vZGUpO1xuICAgICAgcmV0dXJuIHJuZztcbiAgICB9O1xuICAgIGNvbnN0IHNlbGVjdE5vZGUgPSAoZWRpdG9yLCBub2RlKSA9PiB7XG4gICAgICBjb25zdCBlID0gZWRpdG9yLmRpc3BhdGNoKCdCZWZvcmVPYmplY3RTZWxlY3RlZCcsIHsgdGFyZ2V0OiBub2RlIH0pO1xuICAgICAgaWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGdldE5vZGVSYW5nZShub2RlKSk7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJDYXJldEF0UmFuZ2UgPSAoZWRpdG9yLCByYW5nZSwgc2Nyb2xsSW50b1ZpZXcpID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRSYW5nZSA9IG5vcm1hbGl6ZVJhbmdlKDEsIGVkaXRvci5nZXRCb2R5KCksIHJhbmdlKTtcbiAgICAgIGNvbnN0IGNhcmV0UG9zaXRpb24gPSBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KG5vcm1hbGl6ZWRSYW5nZSk7XG4gICAgICBjb25zdCBjYXJldFBvc2l0aW9uTm9kZSA9IGNhcmV0UG9zaXRpb24uZ2V0Tm9kZSgpO1xuICAgICAgaWYgKGlzSW5saW5lRmFrZUNhcmV0VGFyZ2V0KGNhcmV0UG9zaXRpb25Ob2RlKSkge1xuICAgICAgICByZXR1cm4gc2hvd0NhcmV0KDEsIGVkaXRvciwgY2FyZXRQb3NpdGlvbk5vZGUsICFjYXJldFBvc2l0aW9uLmlzQXRFbmQoKSwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2FyZXRQb3NpdGlvbkJlZm9yZU5vZGUgPSBjYXJldFBvc2l0aW9uLmdldE5vZGUodHJ1ZSk7XG4gICAgICBpZiAoaXNJbmxpbmVGYWtlQ2FyZXRUYXJnZXQoY2FyZXRQb3NpdGlvbkJlZm9yZU5vZGUpKSB7XG4gICAgICAgIHJldHVybiBzaG93Q2FyZXQoMSwgZWRpdG9yLCBjYXJldFBvc2l0aW9uQmVmb3JlTm9kZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNlUm9vdCA9IGdldENvbnRlbnRFZGl0YWJsZVJvb3QkMShlZGl0b3IuZG9tLmdldFJvb3QoKSwgY2FyZXRQb3NpdGlvbi5nZXROb2RlKCkpO1xuICAgICAgaWYgKGlzSW5saW5lRmFrZUNhcmV0VGFyZ2V0KGNlUm9vdCkpIHtcbiAgICAgICAgcmV0dXJuIHNob3dDYXJldCgxLCBlZGl0b3IsIGNlUm9vdCwgZmFsc2UsIHNjcm9sbEludG9WaWV3KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJSYW5nZUNhcmV0ID0gKGVkaXRvciwgcmFuZ2UsIHNjcm9sbEludG9WaWV3KSA9PiByYW5nZS5jb2xsYXBzZWQgPyByZW5kZXJDYXJldEF0UmFuZ2UoZWRpdG9yLCByYW5nZSwgc2Nyb2xsSW50b1ZpZXcpLmdldE9yKHJhbmdlKSA6IHJhbmdlO1xuXG4gICAgY29uc3QgaXNCZWZvcmVCb3VuZGFyeSA9IHBvcyA9PiBpc0JlZm9yZUNvbnRlbnRFZGl0YWJsZUZhbHNlKHBvcykgfHwgaXNCZWZvcmVNZWRpYShwb3MpO1xuICAgIGNvbnN0IGlzQWZ0ZXJCb3VuZGFyeSA9IHBvcyA9PiBpc0FmdGVyQ29udGVudEVkaXRhYmxlRmFsc2UocG9zKSB8fCBpc0FmdGVyTWVkaWEocG9zKTtcbiAgICBjb25zdCB0cmltRW1wdHlUZXh0Tm9kZSA9IChkb20sIG5vZGUpID0+IHtcbiAgICAgIGlmIChpc1RleHQkYShub2RlKSAmJiBub2RlLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRvbS5yZW1vdmUobm9kZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBkZWxldGVDb250ZW50QW5kU2hvd0NhcmV0ID0gKGVkaXRvciwgcmFuZ2UsIG5vZGUsIGRpcmVjdGlvbiwgZm9yd2FyZCwgcGVla0NhcmV0UG9zaXRpb24pID0+IHtcbiAgICAgIHNob3dDYXJldChkaXJlY3Rpb24sIGVkaXRvciwgcGVla0NhcmV0UG9zaXRpb24uZ2V0Tm9kZSghZm9yd2FyZCksIGZvcndhcmQsIHRydWUpLmVhY2goY2FyZXRSYW5nZSA9PiB7XG4gICAgICAgIGlmIChyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICAgICAgICBjb25zdCBkZWxldGVSYW5nZSA9IHJhbmdlLmNsb25lUmFuZ2UoKTtcbiAgICAgICAgICBpZiAoZm9yd2FyZCkge1xuICAgICAgICAgICAgZGVsZXRlUmFuZ2Uuc2V0RW5kKGNhcmV0UmFuZ2Uuc3RhcnRDb250YWluZXIsIGNhcmV0UmFuZ2Uuc3RhcnRPZmZzZXQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGVSYW5nZS5zZXRTdGFydChjYXJldFJhbmdlLmVuZENvbnRhaW5lciwgY2FyZXRSYW5nZS5lbmRPZmZzZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGVSYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcoY2FyZXRSYW5nZSk7XG4gICAgICB9KTtcbiAgICAgIHRyaW1FbXB0eVRleHROb2RlKGVkaXRvci5kb20sIG5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgZGVsZXRlQm91bmRhcnlUZXh0ID0gKGVkaXRvciwgZm9yd2FyZCkgPT4ge1xuICAgICAgY29uc3QgcmFuZ2UgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgaWYgKCFpc1RleHQkYShyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcikpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGZvcndhcmQgPyBIRGlyZWN0aW9uLkZvcndhcmRzIDogSERpcmVjdGlvbi5CYWNrd2FyZHM7XG4gICAgICBjb25zdCBjYXJldFdhbGtlciA9IENhcmV0V2Fsa2VyKGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgY29uc3QgZ2V0TmV4dFBvc0ZuID0gY3VycnkoZ2V0VmlzdWFsQ2FyZXRQb3NpdGlvbiwgZm9yd2FyZCA/IGNhcmV0V2Fsa2VyLm5leHQgOiBjYXJldFdhbGtlci5wcmV2KTtcbiAgICAgIGNvbnN0IGlzQmVmb3JlRm4gPSBmb3J3YXJkID8gaXNCZWZvcmVCb3VuZGFyeSA6IGlzQWZ0ZXJCb3VuZGFyeTtcbiAgICAgIGNvbnN0IGNhcmV0UG9zaXRpb24gPSBnZXROb3JtYWxpemVkUmFuZ2VFbmRQb2ludChkaXJlY3Rpb24sIGVkaXRvci5nZXRCb2R5KCksIHJhbmdlKTtcbiAgICAgIGNvbnN0IG5leHRDYXJldFBvc2l0aW9uID0gZ2V0TmV4dFBvc0ZuKGNhcmV0UG9zaXRpb24pO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZE5leHRDYXJldFBvc2l0aW9uID0gbmV4dENhcmV0UG9zaXRpb24gPyBub3JtYWxpemVQb3NpdGlvbihmb3J3YXJkLCBuZXh0Q2FyZXRQb3NpdGlvbikgOiBuZXh0Q2FyZXRQb3NpdGlvbjtcbiAgICAgIGlmICghbm9ybWFsaXplZE5leHRDYXJldFBvc2l0aW9uIHx8ICFpc01vdmVJbnNpZGVTYW1lQmxvY2soY2FyZXRQb3NpdGlvbiwgbm9ybWFsaXplZE5leHRDYXJldFBvc2l0aW9uKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIGlmIChpc0JlZm9yZUZuKG5vcm1hbGl6ZWROZXh0Q2FyZXRQb3NpdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoKCkgPT4gZGVsZXRlQ29udGVudEFuZFNob3dDYXJldChlZGl0b3IsIHJhbmdlLCBjYXJldFBvc2l0aW9uLmdldE5vZGUoKSwgZGlyZWN0aW9uLCBmb3J3YXJkLCBub3JtYWxpemVkTmV4dENhcmV0UG9zaXRpb24pKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBlZWtDYXJldFBvc2l0aW9uID0gZ2V0TmV4dFBvc0ZuKG5vcm1hbGl6ZWROZXh0Q2FyZXRQb3NpdGlvbik7XG4gICAgICBpZiAocGVla0NhcmV0UG9zaXRpb24gJiYgaXNCZWZvcmVGbihwZWVrQ2FyZXRQb3NpdGlvbikpIHtcbiAgICAgICAgaWYgKGlzTW92ZUluc2lkZVNhbWVCbG9jayhub3JtYWxpemVkTmV4dENhcmV0UG9zaXRpb24sIHBlZWtDYXJldFBvc2l0aW9uKSkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKCgpID0+IGRlbGV0ZUNvbnRlbnRBbmRTaG93Q2FyZXQoZWRpdG9yLCByYW5nZSwgY2FyZXRQb3NpdGlvbi5nZXROb2RlKCksIGRpcmVjdGlvbiwgZm9yd2FyZCwgcGVla0NhcmV0UG9zaXRpb24pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGJhY2tzcGFjZURlbGV0ZSQ3ID0gKGVkaXRvciwgZm9yd2FyZCkgPT4gZGVsZXRlQm91bmRhcnlUZXh0KGVkaXRvciwgZm9yd2FyZCk7XG5cbiAgICBjb25zdCBnZXRFZGdlQ2VmUG9zaXRpb24gPSAoZWRpdG9yLCBhdFN0YXJ0KSA9PiB7XG4gICAgICBjb25zdCByb290ID0gZWRpdG9yLmdldEJvZHkoKTtcbiAgICAgIHJldHVybiBhdFN0YXJ0ID8gZmlyc3RQb3NpdGlvbkluKHJvb3QpLmZpbHRlcihpc0JlZm9yZUNvbnRlbnRFZGl0YWJsZUZhbHNlKSA6IGxhc3RQb3NpdGlvbkluKHJvb3QpLmZpbHRlcihpc0FmdGVyQ29udGVudEVkaXRhYmxlRmFsc2UpO1xuICAgIH07XG4gICAgY29uc3QgaXNDZWZBdEVkZ2VTZWxlY3RlZCA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgcmV0dXJuICFybmcuY29sbGFwc2VkICYmIChnZXRFZGdlQ2VmUG9zaXRpb24oZWRpdG9yLCB0cnVlKS5leGlzdHMocG9zID0+IHBvcy5pc0VxdWFsKENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQocm5nKSkpIHx8IGdldEVkZ2VDZWZQb3NpdGlvbihlZGl0b3IsIGZhbHNlKS5leGlzdHMocG9zID0+IHBvcy5pc0VxdWFsKENhcmV0UG9zaXRpb24uZnJvbVJhbmdlRW5kKHJuZykpKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzQ29tcG91bmRFbGVtZW50ID0gbm9kZSA9PiBpc05vbk51bGxhYmxlKG5vZGUpICYmIChpc1RhYmxlQ2VsbCQyKFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5vZGUpKSB8fCBpc0xpc3RJdGVtJDEoU3VnYXJFbGVtZW50LmZyb21Eb20obm9kZSkpKTtcbiAgICBjb25zdCBEZWxldGVBY3Rpb24gPSBBZHQuZ2VuZXJhdGUoW1xuICAgICAgeyByZW1vdmU6IFsnZWxlbWVudCddIH0sXG4gICAgICB7IG1vdmVUb0VsZW1lbnQ6IFsnZWxlbWVudCddIH0sXG4gICAgICB7IG1vdmVUb1Bvc2l0aW9uOiBbJ3Bvc2l0aW9uJ10gfVxuICAgIF0pO1xuICAgIGNvbnN0IGlzQXRDb250ZW50RWRpdGFibGVCbG9ja0NhcmV0ID0gKGZvcndhcmQsIGZyb20pID0+IHtcbiAgICAgIGNvbnN0IGVsbSA9IGZyb20uZ2V0Tm9kZSghZm9yd2FyZCk7XG4gICAgICBjb25zdCBjYXJldExvY2F0aW9uID0gZm9yd2FyZCA/ICdhZnRlcicgOiAnYmVmb3JlJztcbiAgICAgIHJldHVybiBpc0VsZW1lbnQkNihlbG0pICYmIGVsbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWNlLWNhcmV0JykgPT09IGNhcmV0TG9jYXRpb247XG4gICAgfTtcbiAgICBjb25zdCBpc0RlbGV0ZUZyb21DZWZEaWZmZXJlbnRCbG9ja3MgPSAocm9vdCwgZm9yd2FyZCwgZnJvbSwgdG8pID0+IHtcbiAgICAgIGNvbnN0IGluU2FtZUJsb2NrID0gZWxtID0+IGlzSW5saW5lJDEoU3VnYXJFbGVtZW50LmZyb21Eb20oZWxtKSkgJiYgIWlzSW5TYW1lQmxvY2soZnJvbSwgdG8sIHJvb3QpO1xuICAgICAgcmV0dXJuIGdldFJlbGF0aXZlQ2VmRWxtKCFmb3J3YXJkLCBmcm9tKS5mb2xkKCgpID0+IGdldFJlbGF0aXZlQ2VmRWxtKGZvcndhcmQsIHRvKS5mb2xkKG5ldmVyLCBpblNhbWVCbG9jayksIGluU2FtZUJsb2NrKTtcbiAgICB9O1xuICAgIGNvbnN0IGRlbGV0ZUVtcHR5QmxvY2tPck1vdmVUb0NlZiA9IChyb290LCBmb3J3YXJkLCBmcm9tLCB0bykgPT4ge1xuICAgICAgY29uc3QgdG9DZWZFbG0gPSB0by5nZXROb2RlKCFmb3J3YXJkKTtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRCbG9jayQyKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJvb3QpLCBTdWdhckVsZW1lbnQuZnJvbURvbShmcm9tLmdldE5vZGUoKSkpLm1hcChibG9ja0VsbSA9PiBpc0VtcHR5JDIoYmxvY2tFbG0pID8gRGVsZXRlQWN0aW9uLnJlbW92ZShibG9ja0VsbS5kb20pIDogRGVsZXRlQWN0aW9uLm1vdmVUb0VsZW1lbnQodG9DZWZFbG0pKS5vclRodW5rKCgpID0+IE9wdGlvbmFsLnNvbWUoRGVsZXRlQWN0aW9uLm1vdmVUb0VsZW1lbnQodG9DZWZFbG0pKSk7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kQ2VmUG9zaXRpb24gPSAocm9vdCwgZm9yd2FyZCwgZnJvbSkgPT4gZnJvbVBvc2l0aW9uKGZvcndhcmQsIHJvb3QsIGZyb20pLmJpbmQodG8gPT4ge1xuICAgICAgaWYgKGlzQ29tcG91bmRFbGVtZW50KHRvLmdldE5vZGUoKSkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNEZWxldGVGcm9tQ2VmRGlmZmVyZW50QmxvY2tzKHJvb3QsIGZvcndhcmQsIGZyb20sIHRvKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIGlmIChmb3J3YXJkICYmIGlzQ29udGVudEVkaXRhYmxlRmFsc2UkYih0by5nZXROb2RlKCkpKSB7XG4gICAgICAgIHJldHVybiBkZWxldGVFbXB0eUJsb2NrT3JNb3ZlVG9DZWYocm9vdCwgZm9yd2FyZCwgZnJvbSwgdG8pO1xuICAgICAgfSBlbHNlIGlmICghZm9yd2FyZCAmJiBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJGIodG8uZ2V0Tm9kZSh0cnVlKSkpIHtcbiAgICAgICAgcmV0dXJuIGRlbGV0ZUVtcHR5QmxvY2tPck1vdmVUb0NlZihyb290LCBmb3J3YXJkLCBmcm9tLCB0byk7XG4gICAgICB9IGVsc2UgaWYgKGZvcndhcmQgJiYgaXNBZnRlckNvbnRlbnRFZGl0YWJsZUZhbHNlKGZyb20pKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKERlbGV0ZUFjdGlvbi5tb3ZlVG9Qb3NpdGlvbih0bykpO1xuICAgICAgfSBlbHNlIGlmICghZm9yd2FyZCAmJiBpc0JlZm9yZUNvbnRlbnRFZGl0YWJsZUZhbHNlKGZyb20pKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKERlbGV0ZUFjdGlvbi5tb3ZlVG9Qb3NpdGlvbih0bykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBnZXRDb250ZW50RWRpdGFibGVCbG9ja0FjdGlvbiA9IChmb3J3YXJkLCBlbG0pID0+IHtcbiAgICAgIGlmIChpc051bGxhYmxlKGVsbSkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH0gZWxzZSBpZiAoZm9yd2FyZCAmJiBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJGIoZWxtLm5leHRTaWJsaW5nKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShEZWxldGVBY3Rpb24ubW92ZVRvRWxlbWVudChlbG0ubmV4dFNpYmxpbmcpKTtcbiAgICAgIH0gZWxzZSBpZiAoIWZvcndhcmQgJiYgaXNDb250ZW50RWRpdGFibGVGYWxzZSRiKGVsbS5wcmV2aW91c1NpYmxpbmcpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKERlbGV0ZUFjdGlvbi5tb3ZlVG9FbGVtZW50KGVsbS5wcmV2aW91c1NpYmxpbmcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBza2lwTW92ZVRvQWN0aW9uRnJvbUlubGluZUNlZlRvQ29udGVudCA9IChyb290LCBmcm9tLCBkZWxldGVBY3Rpb24pID0+IGRlbGV0ZUFjdGlvbi5mb2xkKGVsbSA9PiBPcHRpb25hbC5zb21lKERlbGV0ZUFjdGlvbi5yZW1vdmUoZWxtKSksIGVsbSA9PiBPcHRpb25hbC5zb21lKERlbGV0ZUFjdGlvbi5tb3ZlVG9FbGVtZW50KGVsbSkpLCB0byA9PiB7XG4gICAgICBpZiAoaXNJblNhbWVCbG9jayhmcm9tLCB0bywgcm9vdCkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKERlbGV0ZUFjdGlvbi5tb3ZlVG9Qb3NpdGlvbih0bykpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGdldENvbnRlbnRFZGl0YWJsZUFjdGlvbiA9IChyb290LCBmb3J3YXJkLCBmcm9tKSA9PiB7XG4gICAgICBpZiAoaXNBdENvbnRlbnRFZGl0YWJsZUJsb2NrQ2FyZXQoZm9yd2FyZCwgZnJvbSkpIHtcbiAgICAgICAgcmV0dXJuIGdldENvbnRlbnRFZGl0YWJsZUJsb2NrQWN0aW9uKGZvcndhcmQsIGZyb20uZ2V0Tm9kZSghZm9yd2FyZCkpLm9yVGh1bmsoKCkgPT4gZmluZENlZlBvc2l0aW9uKHJvb3QsIGZvcndhcmQsIGZyb20pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmaW5kQ2VmUG9zaXRpb24ocm9vdCwgZm9yd2FyZCwgZnJvbSkuYmluZChkZWxldGVBY3Rpb24gPT4gc2tpcE1vdmVUb0FjdGlvbkZyb21JbmxpbmVDZWZUb0NvbnRlbnQocm9vdCwgZnJvbSwgZGVsZXRlQWN0aW9uKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZWFkID0gKHJvb3QsIGZvcndhcmQsIHJuZykgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFJhbmdlID0gbm9ybWFsaXplUmFuZ2UoZm9yd2FyZCA/IDEgOiAtMSwgcm9vdCwgcm5nKTtcbiAgICAgIGNvbnN0IGZyb20gPSBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KG5vcm1hbGl6ZWRSYW5nZSk7XG4gICAgICBjb25zdCByb290RWxlbWVudCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJvb3QpO1xuICAgICAgaWYgKCFmb3J3YXJkICYmIGlzQWZ0ZXJDb250ZW50RWRpdGFibGVGYWxzZShmcm9tKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShEZWxldGVBY3Rpb24ucmVtb3ZlKGZyb20uZ2V0Tm9kZSh0cnVlKSkpO1xuICAgICAgfSBlbHNlIGlmIChmb3J3YXJkICYmIGlzQmVmb3JlQ29udGVudEVkaXRhYmxlRmFsc2UoZnJvbSkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoRGVsZXRlQWN0aW9uLnJlbW92ZShmcm9tLmdldE5vZGUoKSkpO1xuICAgICAgfSBlbHNlIGlmICghZm9yd2FyZCAmJiBpc0JlZm9yZUNvbnRlbnRFZGl0YWJsZUZhbHNlKGZyb20pICYmIGlzQWZ0ZXJCcihyb290RWxlbWVudCwgZnJvbSkpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRQcmV2aW91c0JyKHJvb3RFbGVtZW50LCBmcm9tKS5tYXAoYnIgPT4gRGVsZXRlQWN0aW9uLnJlbW92ZShici5nZXROb2RlKCkpKTtcbiAgICAgIH0gZWxzZSBpZiAoZm9yd2FyZCAmJiBpc0FmdGVyQ29udGVudEVkaXRhYmxlRmFsc2UoZnJvbSkgJiYgaXNCZWZvcmVCciQxKHJvb3RFbGVtZW50LCBmcm9tKSkge1xuICAgICAgICByZXR1cm4gZmluZE5leHRCcihyb290RWxlbWVudCwgZnJvbSkubWFwKGJyID0+IERlbGV0ZUFjdGlvbi5yZW1vdmUoYnIuZ2V0Tm9kZSgpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZ2V0Q29udGVudEVkaXRhYmxlQWN0aW9uKHJvb3QsIGZvcndhcmQsIGZyb20pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBkZWxldGVFbGVtZW50JDEgPSAoZWRpdG9yLCBmb3J3YXJkKSA9PiBlbGVtZW50ID0+IHtcbiAgICAgIGVkaXRvci5fc2VsZWN0aW9uT3ZlcnJpZGVzLmhpZGVGYWtlQ2FyZXQoKTtcbiAgICAgIGRlbGV0ZUVsZW1lbnQkMihlZGl0b3IsIGZvcndhcmQsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsZW1lbnQpKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgY29uc3QgbW92ZVRvRWxlbWVudCA9IChlZGl0b3IsIGZvcndhcmQpID0+IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgcG9zID0gZm9yd2FyZCA/IENhcmV0UG9zaXRpb24uYmVmb3JlKGVsZW1lbnQpIDogQ2FyZXRQb3NpdGlvbi5hZnRlcihlbGVtZW50KTtcbiAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHBvcy50b1JhbmdlKCkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBtb3ZlVG9Qb3NpdGlvbiA9IGVkaXRvciA9PiBwb3MgPT4ge1xuICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcocG9zLnRvUmFuZ2UoKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEFuY2VzdG9yQ2UgPSAoZWRpdG9yLCBub2RlKSA9PiBPcHRpb25hbC5mcm9tKGdldENvbnRlbnRFZGl0YWJsZVJvb3QkMShlZGl0b3IuZ2V0Qm9keSgpLCBub2RlKSk7XG4gICAgY29uc3QgYmFja3NwYWNlRGVsZXRlQ2FyZXQgPSAoZWRpdG9yLCBmb3J3YXJkKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKTtcbiAgICAgIHJldHVybiBnZXRBbmNlc3RvckNlKGVkaXRvciwgc2VsZWN0ZWROb2RlKS5maWx0ZXIoaXNDb250ZW50RWRpdGFibGVGYWxzZSRiKS5mb2xkKCgpID0+IHJlYWQoZWRpdG9yLmdldEJvZHkoKSwgZm9yd2FyZCwgZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSkubWFwKGRlbGV0ZUFjdGlvbiA9PiAoKSA9PiBkZWxldGVBY3Rpb24uZm9sZChkZWxldGVFbGVtZW50JDEoZWRpdG9yLCBmb3J3YXJkKSwgbW92ZVRvRWxlbWVudChlZGl0b3IsIGZvcndhcmQpLCBtb3ZlVG9Qb3NpdGlvbihlZGl0b3IpKSksICgpID0+IE9wdGlvbmFsLnNvbWUobm9vcCkpO1xuICAgIH07XG4gICAgY29uc3QgZGVsZXRlT2Zmc2NyZWVuU2VsZWN0aW9uID0gcm9vdEVsZW1lbnQgPT4ge1xuICAgICAgZWFjaCRlKGRlc2NlbmRhbnRzKHJvb3RFbGVtZW50LCAnLm1jZS1vZmZzY3JlZW4tc2VsZWN0aW9uJyksIHJlbW92ZSQ1KTtcbiAgICB9O1xuICAgIGNvbnN0IGJhY2tzcGFjZURlbGV0ZVJhbmdlID0gKGVkaXRvciwgZm9yd2FyZCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0ZWROb2RlID0gZWRpdG9yLnNlbGVjdGlvbi5nZXROb2RlKCk7XG4gICAgICBpZiAoaXNDb250ZW50RWRpdGFibGVGYWxzZSRiKHNlbGVjdGVkTm9kZSkgJiYgIWlzVGFibGVDZWxsJDMoc2VsZWN0ZWROb2RlKSkge1xuICAgICAgICBjb25zdCBoYXNDZWZBbmNlc3RvciA9IGdldEFuY2VzdG9yQ2UoZWRpdG9yLCBzZWxlY3RlZE5vZGUucGFyZW50Tm9kZSkuZmlsdGVyKGlzQ29udGVudEVkaXRhYmxlRmFsc2UkYik7XG4gICAgICAgIHJldHVybiBoYXNDZWZBbmNlc3Rvci5mb2xkKCgpID0+IE9wdGlvbmFsLnNvbWUoKCkgPT4ge1xuICAgICAgICAgIGRlbGV0ZU9mZnNjcmVlblNlbGVjdGlvbihTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKSk7XG4gICAgICAgICAgZGVsZXRlRWxlbWVudCQyKGVkaXRvciwgZm9yd2FyZCwgU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLnNlbGVjdGlvbi5nZXROb2RlKCkpKTtcbiAgICAgICAgICBwYWRkRW1wdHlCb2R5KGVkaXRvcik7XG4gICAgICAgIH0pLCAoKSA9PiBPcHRpb25hbC5zb21lKG5vb3ApKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0NlZkF0RWRnZVNlbGVjdGVkKGVkaXRvcikpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoKCkgPT4ge1xuICAgICAgICAgIGRlbGV0ZVJhbmdlQ29udGVudHMoZWRpdG9yLCBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpLCBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IHBhZGRFbXB0eUVsZW1lbnQgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbSwgc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgIGNvbnN0IGNlUm9vdCA9IGdldENvbnRlbnRFZGl0YWJsZVJvb3QkMShlZGl0b3IuZ2V0Qm9keSgpLCBzZWxlY3Rpb24uZ2V0Tm9kZSgpKTtcbiAgICAgIGlmIChpc0NvbnRlbnRFZGl0YWJsZVRydWUkMyhjZVJvb3QpICYmIGRvbS5pc0Jsb2NrKGNlUm9vdCkgJiYgZG9tLmlzRW1wdHkoY2VSb290KSkge1xuICAgICAgICBjb25zdCBiciA9IGRvbS5jcmVhdGUoJ2JyJywgeyAnZGF0YS1tY2UtYm9ndXMnOiAnMScgfSk7XG4gICAgICAgIGRvbS5zZXRIVE1MKGNlUm9vdCwgJycpO1xuICAgICAgICBjZVJvb3QuYXBwZW5kQ2hpbGQoYnIpO1xuICAgICAgICBzZWxlY3Rpb24uc2V0Um5nKENhcmV0UG9zaXRpb24uYmVmb3JlKGJyKS50b1JhbmdlKCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBiYWNrc3BhY2VEZWxldGUkNiA9IChlZGl0b3IsIGZvcndhcmQpID0+IHtcbiAgICAgIGlmIChlZGl0b3Iuc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkpIHtcbiAgICAgICAgcmV0dXJuIGJhY2tzcGFjZURlbGV0ZUNhcmV0KGVkaXRvciwgZm9yd2FyZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYmFja3NwYWNlRGVsZXRlUmFuZ2UoZWRpdG9yLCBmb3J3YXJkKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZGVsZXRlQ2FyZXQkMiA9IChlZGl0b3IsIGZvcndhcmQpID0+IHtcbiAgICAgIGNvbnN0IGZyb21Qb3MgPSBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpO1xuICAgICAgcmV0dXJuIGZyb21Qb3NpdGlvbihmb3J3YXJkLCBlZGl0b3IuZ2V0Qm9keSgpLCBmcm9tUG9zKS5maWx0ZXIocG9zID0+IGZvcndhcmQgPyBpc0JlZm9yZUltYWdlQmxvY2socG9zKSA6IGlzQWZ0ZXJJbWFnZUJsb2NrKHBvcykpLmJpbmQocG9zID0+IGdldENoaWxkTm9kZUF0UmVsYXRpdmVPZmZzZXQoZm9yd2FyZCA/IDAgOiAtMSwgcG9zKSkubWFwKGVsbSA9PiAoKSA9PiBlZGl0b3Iuc2VsZWN0aW9uLnNlbGVjdChlbG0pKTtcbiAgICB9O1xuICAgIGNvbnN0IGJhY2tzcGFjZURlbGV0ZSQ1ID0gKGVkaXRvciwgZm9yd2FyZCkgPT4gZWRpdG9yLnNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpID8gZGVsZXRlQ2FyZXQkMihlZGl0b3IsIGZvcndhcmQpIDogT3B0aW9uYWwubm9uZSgpO1xuXG4gICAgY29uc3QgaXNUZXh0JDIgPSBpc1RleHQkYTtcbiAgICBjb25zdCBzdGFydHNXaXRoQ2FyZXRDb250YWluZXIgPSBub2RlID0+IGlzVGV4dCQyKG5vZGUpICYmIG5vZGUuZGF0YVswXSA9PT0gWldTUCQxO1xuICAgIGNvbnN0IGVuZHNXaXRoQ2FyZXRDb250YWluZXIgPSBub2RlID0+IGlzVGV4dCQyKG5vZGUpICYmIG5vZGUuZGF0YVtub2RlLmRhdGEubGVuZ3RoIC0gMV0gPT09IFpXU1AkMTtcbiAgICBjb25zdCBjcmVhdGVad3NwID0gbm9kZSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBkb2MgPSAoX2EgPSBub2RlLm93bmVyRG9jdW1lbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGRvY3VtZW50O1xuICAgICAgcmV0dXJuIGRvYy5jcmVhdGVUZXh0Tm9kZShaV1NQJDEpO1xuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0QmVmb3JlJDEgPSBub2RlID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGlmIChpc1RleHQkMihub2RlLnByZXZpb3VzU2libGluZykpIHtcbiAgICAgICAgaWYgKGVuZHNXaXRoQ2FyZXRDb250YWluZXIobm9kZS5wcmV2aW91c1NpYmxpbmcpKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGUucHJldmlvdXNTaWJsaW5nLmFwcGVuZERhdGEoWldTUCQxKTtcbiAgICAgICAgICByZXR1cm4gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNUZXh0JDIobm9kZSkpIHtcbiAgICAgICAgaWYgKHN0YXJ0c1dpdGhDYXJldENvbnRhaW5lcihub2RlKSkge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGUuaW5zZXJ0RGF0YSgwLCBaV1NQJDEpO1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZXdOb2RlID0gY3JlYXRlWndzcChub2RlKTtcbiAgICAgICAgKF9hID0gbm9kZS5wYXJlbnROb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIG5vZGUpO1xuICAgICAgICByZXR1cm4gbmV3Tm9kZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGluc2VydEFmdGVyJDEgPSBub2RlID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICBpZiAoaXNUZXh0JDIobm9kZS5uZXh0U2libGluZykpIHtcbiAgICAgICAgaWYgKHN0YXJ0c1dpdGhDYXJldENvbnRhaW5lcihub2RlLm5leHRTaWJsaW5nKSkge1xuICAgICAgICAgIHJldHVybiBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGUubmV4dFNpYmxpbmcuaW5zZXJ0RGF0YSgwLCBaV1NQJDEpO1xuICAgICAgICAgIHJldHVybiBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzVGV4dCQyKG5vZGUpKSB7XG4gICAgICAgIGlmIChlbmRzV2l0aENhcmV0Q29udGFpbmVyKG5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZS5hcHBlbmREYXRhKFpXU1AkMSk7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5ld05vZGUgPSBjcmVhdGVad3NwKG5vZGUpO1xuICAgICAgICBpZiAobm9kZS5uZXh0U2libGluZykge1xuICAgICAgICAgIChfYSA9IG5vZGUucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmluc2VydEJlZm9yZShuZXdOb2RlLCBub2RlLm5leHRTaWJsaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAoX2IgPSBub2RlLnBhcmVudE5vZGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5hcHBlbmRDaGlsZChuZXdOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3Tm9kZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGluc2VydElubGluZSA9IChiZWZvcmUsIG5vZGUpID0+IGJlZm9yZSA/IGluc2VydEJlZm9yZSQxKG5vZGUpIDogaW5zZXJ0QWZ0ZXIkMShub2RlKTtcbiAgICBjb25zdCBpbnNlcnRJbmxpbmVCZWZvcmUgPSBjdXJyeShpbnNlcnRJbmxpbmUsIHRydWUpO1xuICAgIGNvbnN0IGluc2VydElubGluZUFmdGVyID0gY3VycnkoaW5zZXJ0SW5saW5lLCBmYWxzZSk7XG5cbiAgICBjb25zdCBpbnNlcnRJbmxpbmVQb3MgPSAocG9zLCBiZWZvcmUpID0+IHtcbiAgICAgIGlmIChpc1RleHQkYShwb3MuY29udGFpbmVyKCkpKSB7XG4gICAgICAgIHJldHVybiBpbnNlcnRJbmxpbmUoYmVmb3JlLCBwb3MuY29udGFpbmVyKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGluc2VydElubGluZShiZWZvcmUsIHBvcy5nZXROb2RlKCkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNQb3NDYXJldENvbnRhaW5lciA9IChwb3MsIGNhcmV0KSA9PiB7XG4gICAgICBjb25zdCBjYXJldE5vZGUgPSBjYXJldC5nZXQoKTtcbiAgICAgIHJldHVybiBjYXJldE5vZGUgJiYgcG9zLmNvbnRhaW5lcigpID09PSBjYXJldE5vZGUgJiYgaXNDYXJldENvbnRhaW5lcklubGluZShjYXJldE5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyQ2FyZXQgPSAoY2FyZXQsIGxvY2F0aW9uKSA9PiBsb2NhdGlvbi5mb2xkKGVsZW1lbnQgPT4ge1xuICAgICAgcmVtb3ZlJDMoY2FyZXQuZ2V0KCkpO1xuICAgICAgY29uc3QgdGV4dCA9IGluc2VydElubGluZUJlZm9yZShlbGVtZW50KTtcbiAgICAgIGNhcmV0LnNldCh0ZXh0KTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKENhcmV0UG9zaXRpb24odGV4dCwgdGV4dC5sZW5ndGggLSAxKSk7XG4gICAgfSwgZWxlbWVudCA9PiBmaXJzdFBvc2l0aW9uSW4oZWxlbWVudCkubWFwKHBvcyA9PiB7XG4gICAgICBpZiAoIWlzUG9zQ2FyZXRDb250YWluZXIocG9zLCBjYXJldCkpIHtcbiAgICAgICAgcmVtb3ZlJDMoY2FyZXQuZ2V0KCkpO1xuICAgICAgICBjb25zdCB0ZXh0ID0gaW5zZXJ0SW5saW5lUG9zKHBvcywgdHJ1ZSk7XG4gICAgICAgIGNhcmV0LnNldCh0ZXh0KTtcbiAgICAgICAgcmV0dXJuIENhcmV0UG9zaXRpb24odGV4dCwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBub2RlID0gY2FyZXQuZ2V0KCk7XG4gICAgICAgIHJldHVybiBDYXJldFBvc2l0aW9uKG5vZGUsIDEpO1xuICAgICAgfVxuICAgIH0pLCBlbGVtZW50ID0+IGxhc3RQb3NpdGlvbkluKGVsZW1lbnQpLm1hcChwb3MgPT4ge1xuICAgICAgaWYgKCFpc1Bvc0NhcmV0Q29udGFpbmVyKHBvcywgY2FyZXQpKSB7XG4gICAgICAgIHJlbW92ZSQzKGNhcmV0LmdldCgpKTtcbiAgICAgICAgY29uc3QgdGV4dCA9IGluc2VydElubGluZVBvcyhwb3MsIGZhbHNlKTtcbiAgICAgICAgY2FyZXQuc2V0KHRleHQpO1xuICAgICAgICByZXR1cm4gQ2FyZXRQb3NpdGlvbih0ZXh0LCB0ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGNhcmV0LmdldCgpO1xuICAgICAgICByZXR1cm4gQ2FyZXRQb3NpdGlvbihub2RlLCBub2RlLmxlbmd0aCAtIDEpO1xuICAgICAgfVxuICAgIH0pLCBlbGVtZW50ID0+IHtcbiAgICAgIHJlbW92ZSQzKGNhcmV0LmdldCgpKTtcbiAgICAgIGNvbnN0IHRleHQgPSBpbnNlcnRJbmxpbmVBZnRlcihlbGVtZW50KTtcbiAgICAgIGNhcmV0LnNldCh0ZXh0KTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKENhcmV0UG9zaXRpb24odGV4dCwgMSkpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZXZhbHVhdGVVbnRpbCA9IChmbnMsIGFyZ3MpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZuc1tpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc1NvbWUoKSkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IExvY2F0aW9uID0gQWR0LmdlbmVyYXRlKFtcbiAgICAgIHsgYmVmb3JlOiBbJ2VsZW1lbnQnXSB9LFxuICAgICAgeyBzdGFydDogWydlbGVtZW50J10gfSxcbiAgICAgIHsgZW5kOiBbJ2VsZW1lbnQnXSB9LFxuICAgICAgeyBhZnRlcjogWydlbGVtZW50J10gfVxuICAgIF0pO1xuICAgIGNvbnN0IHJlc2NvcGUkMSA9IChyb290Tm9kZSwgbm9kZSkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50QmxvY2sgPSBnZXRQYXJlbnRCbG9jayQzKG5vZGUsIHJvb3ROb2RlKTtcbiAgICAgIHJldHVybiBwYXJlbnRCbG9jayA/IHBhcmVudEJsb2NrIDogcm9vdE5vZGU7XG4gICAgfTtcbiAgICBjb25zdCBiZWZvcmUgPSAoaXNJbmxpbmVUYXJnZXQsIHJvb3ROb2RlLCBwb3MpID0+IHtcbiAgICAgIGNvbnN0IG5Qb3MgPSBub3JtYWxpemVGb3J3YXJkcyhwb3MpO1xuICAgICAgY29uc3Qgc2NvcGUgPSByZXNjb3BlJDEocm9vdE5vZGUsIG5Qb3MuY29udGFpbmVyKCkpO1xuICAgICAgcmV0dXJuIGZpbmRSb290SW5saW5lKGlzSW5saW5lVGFyZ2V0LCBzY29wZSwgblBvcykuZm9sZCgoKSA9PiBuZXh0UG9zaXRpb24oc2NvcGUsIG5Qb3MpLmJpbmQoY3VycnkoZmluZFJvb3RJbmxpbmUsIGlzSW5saW5lVGFyZ2V0LCBzY29wZSkpLm1hcChpbmxpbmUgPT4gTG9jYXRpb24uYmVmb3JlKGlubGluZSkpLCBPcHRpb25hbC5ub25lKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzTm90SW5zaWRlRm9ybWF0Q2FyZXRDb250YWluZXIgPSAocm9vdE5vZGUsIGVsbSkgPT4gZ2V0UGFyZW50Q2FyZXRDb250YWluZXIocm9vdE5vZGUsIGVsbSkgPT09IG51bGw7XG4gICAgY29uc3QgZmluZEluc2lkZVJvb3RJbmxpbmUgPSAoaXNJbmxpbmVUYXJnZXQsIHJvb3ROb2RlLCBwb3MpID0+IGZpbmRSb290SW5saW5lKGlzSW5saW5lVGFyZ2V0LCByb290Tm9kZSwgcG9zKS5maWx0ZXIoY3VycnkoaXNOb3RJbnNpZGVGb3JtYXRDYXJldENvbnRhaW5lciwgcm9vdE5vZGUpKTtcbiAgICBjb25zdCBzdGFydCQxID0gKGlzSW5saW5lVGFyZ2V0LCByb290Tm9kZSwgcG9zKSA9PiB7XG4gICAgICBjb25zdCBuUG9zID0gbm9ybWFsaXplQmFja3dhcmRzKHBvcyk7XG4gICAgICByZXR1cm4gZmluZEluc2lkZVJvb3RJbmxpbmUoaXNJbmxpbmVUYXJnZXQsIHJvb3ROb2RlLCBuUG9zKS5iaW5kKGlubGluZSA9PiB7XG4gICAgICAgIGNvbnN0IHByZXZQb3MgPSBwcmV2UG9zaXRpb24oaW5saW5lLCBuUG9zKTtcbiAgICAgICAgcmV0dXJuIHByZXZQb3MuaXNOb25lKCkgPyBPcHRpb25hbC5zb21lKExvY2F0aW9uLnN0YXJ0KGlubGluZSkpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBlbmQgPSAoaXNJbmxpbmVUYXJnZXQsIHJvb3ROb2RlLCBwb3MpID0+IHtcbiAgICAgIGNvbnN0IG5Qb3MgPSBub3JtYWxpemVGb3J3YXJkcyhwb3MpO1xuICAgICAgcmV0dXJuIGZpbmRJbnNpZGVSb290SW5saW5lKGlzSW5saW5lVGFyZ2V0LCByb290Tm9kZSwgblBvcykuYmluZChpbmxpbmUgPT4ge1xuICAgICAgICBjb25zdCBuZXh0UG9zID0gbmV4dFBvc2l0aW9uKGlubGluZSwgblBvcyk7XG4gICAgICAgIHJldHVybiBuZXh0UG9zLmlzTm9uZSgpID8gT3B0aW9uYWwuc29tZShMb2NhdGlvbi5lbmQoaW5saW5lKSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFmdGVyID0gKGlzSW5saW5lVGFyZ2V0LCByb290Tm9kZSwgcG9zKSA9PiB7XG4gICAgICBjb25zdCBuUG9zID0gbm9ybWFsaXplQmFja3dhcmRzKHBvcyk7XG4gICAgICBjb25zdCBzY29wZSA9IHJlc2NvcGUkMShyb290Tm9kZSwgblBvcy5jb250YWluZXIoKSk7XG4gICAgICByZXR1cm4gZmluZFJvb3RJbmxpbmUoaXNJbmxpbmVUYXJnZXQsIHNjb3BlLCBuUG9zKS5mb2xkKCgpID0+IHByZXZQb3NpdGlvbihzY29wZSwgblBvcykuYmluZChjdXJyeShmaW5kUm9vdElubGluZSwgaXNJbmxpbmVUYXJnZXQsIHNjb3BlKSkubWFwKGlubGluZSA9PiBMb2NhdGlvbi5hZnRlcihpbmxpbmUpKSwgT3B0aW9uYWwubm9uZSk7XG4gICAgfTtcbiAgICBjb25zdCBpc1ZhbGlkTG9jYXRpb24gPSBsb2NhdGlvbiA9PiAhaXNSdGwoZ2V0RWxlbWVudChsb2NhdGlvbikpO1xuICAgIGNvbnN0IHJlYWRMb2NhdGlvbiA9IChpc0lubGluZVRhcmdldCwgcm9vdE5vZGUsIHBvcykgPT4ge1xuICAgICAgY29uc3QgbG9jYXRpb24gPSBldmFsdWF0ZVVudGlsKFtcbiAgICAgICAgYmVmb3JlLFxuICAgICAgICBzdGFydCQxLFxuICAgICAgICBlbmQsXG4gICAgICAgIGFmdGVyXG4gICAgICBdLCBbXG4gICAgICAgIGlzSW5saW5lVGFyZ2V0LFxuICAgICAgICByb290Tm9kZSxcbiAgICAgICAgcG9zXG4gICAgICBdKTtcbiAgICAgIHJldHVybiBsb2NhdGlvbi5maWx0ZXIoaXNWYWxpZExvY2F0aW9uKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEVsZW1lbnQgPSBsb2NhdGlvbiA9PiBsb2NhdGlvbi5mb2xkKGlkZW50aXR5LCBpZGVudGl0eSwgaWRlbnRpdHksIGlkZW50aXR5KTtcbiAgICBjb25zdCBnZXROYW1lID0gbG9jYXRpb24gPT4gbG9jYXRpb24uZm9sZChjb25zdGFudCgnYmVmb3JlJyksIGNvbnN0YW50KCdzdGFydCcpLCBjb25zdGFudCgnZW5kJyksIGNvbnN0YW50KCdhZnRlcicpKTtcbiAgICBjb25zdCBvdXRzaWRlID0gbG9jYXRpb24gPT4gbG9jYXRpb24uZm9sZChMb2NhdGlvbi5iZWZvcmUsIExvY2F0aW9uLmJlZm9yZSwgTG9jYXRpb24uYWZ0ZXIsIExvY2F0aW9uLmFmdGVyKTtcbiAgICBjb25zdCBpbnNpZGUgPSBsb2NhdGlvbiA9PiBsb2NhdGlvbi5mb2xkKExvY2F0aW9uLnN0YXJ0LCBMb2NhdGlvbi5zdGFydCwgTG9jYXRpb24uZW5kLCBMb2NhdGlvbi5lbmQpO1xuICAgIGNvbnN0IGlzRXEgPSAobG9jYXRpb24xLCBsb2NhdGlvbjIpID0+IGdldE5hbWUobG9jYXRpb24xKSA9PT0gZ2V0TmFtZShsb2NhdGlvbjIpICYmIGdldEVsZW1lbnQobG9jYXRpb24xKSA9PT0gZ2V0RWxlbWVudChsb2NhdGlvbjIpO1xuICAgIGNvbnN0IGJldHdlZW5JbmxpbmVzID0gKGZvcndhcmQsIGlzSW5saW5lVGFyZ2V0LCByb290Tm9kZSwgZnJvbSwgdG8sIGxvY2F0aW9uKSA9PiBsaWZ0MihmaW5kUm9vdElubGluZShpc0lubGluZVRhcmdldCwgcm9vdE5vZGUsIGZyb20pLCBmaW5kUm9vdElubGluZShpc0lubGluZVRhcmdldCwgcm9vdE5vZGUsIHRvKSwgKGZyb21JbmxpbmUsIHRvSW5saW5lKSA9PiB7XG4gICAgICBpZiAoZnJvbUlubGluZSAhPT0gdG9JbmxpbmUgJiYgaGFzU2FtZVBhcmVudEJsb2NrKHJvb3ROb2RlLCBmcm9tSW5saW5lLCB0b0lubGluZSkpIHtcbiAgICAgICAgcmV0dXJuIExvY2F0aW9uLmFmdGVyKGZvcndhcmQgPyBmcm9tSW5saW5lIDogdG9JbmxpbmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgICAgfVxuICAgIH0pLmdldE9yKGxvY2F0aW9uKTtcbiAgICBjb25zdCBza2lwTm9Nb3ZlbWVudCA9IChmcm9tTG9jYXRpb24sIHRvTG9jYXRpb24pID0+IGZyb21Mb2NhdGlvbi5mb2xkKGFsd2F5cywgZnJvbUxvY2F0aW9uID0+ICFpc0VxKGZyb21Mb2NhdGlvbiwgdG9Mb2NhdGlvbikpO1xuICAgIGNvbnN0IGZpbmRMb2NhdGlvblRyYXZlcnNlID0gKGZvcndhcmQsIGlzSW5saW5lVGFyZ2V0LCByb290Tm9kZSwgZnJvbUxvY2F0aW9uLCBwb3MpID0+IHtcbiAgICAgIGNvbnN0IGZyb20gPSBub3JtYWxpemVQb3NpdGlvbihmb3J3YXJkLCBwb3MpO1xuICAgICAgY29uc3QgdG8gPSBmcm9tUG9zaXRpb24oZm9yd2FyZCwgcm9vdE5vZGUsIGZyb20pLm1hcChjdXJyeShub3JtYWxpemVQb3NpdGlvbiwgZm9yd2FyZCkpO1xuICAgICAgY29uc3QgbG9jYXRpb24gPSB0by5mb2xkKCgpID0+IGZyb21Mb2NhdGlvbi5tYXAob3V0c2lkZSksIHRvID0+IHJlYWRMb2NhdGlvbihpc0lubGluZVRhcmdldCwgcm9vdE5vZGUsIHRvKS5tYXAoY3VycnkoYmV0d2VlbklubGluZXMsIGZvcndhcmQsIGlzSW5saW5lVGFyZ2V0LCByb290Tm9kZSwgZnJvbSwgdG8pKS5maWx0ZXIoY3Vycnkoc2tpcE5vTW92ZW1lbnQsIGZyb21Mb2NhdGlvbikpKTtcbiAgICAgIHJldHVybiBsb2NhdGlvbi5maWx0ZXIoaXNWYWxpZExvY2F0aW9uKTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRMb2NhdGlvblNpbXBsZSA9IChmb3J3YXJkLCBsb2NhdGlvbikgPT4ge1xuICAgICAgaWYgKGZvcndhcmQpIHtcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uLmZvbGQoY29tcG9zZShPcHRpb25hbC5zb21lLCBMb2NhdGlvbi5zdGFydCksIE9wdGlvbmFsLm5vbmUsIGNvbXBvc2UoT3B0aW9uYWwuc29tZSwgTG9jYXRpb24uYWZ0ZXIpLCBPcHRpb25hbC5ub25lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBsb2NhdGlvbi5mb2xkKE9wdGlvbmFsLm5vbmUsIGNvbXBvc2UoT3B0aW9uYWwuc29tZSwgTG9jYXRpb24uYmVmb3JlKSwgT3B0aW9uYWwubm9uZSwgY29tcG9zZShPcHRpb25hbC5zb21lLCBMb2NhdGlvbi5lbmQpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRMb2NhdGlvbiQxID0gKGZvcndhcmQsIGlzSW5saW5lVGFyZ2V0LCByb290Tm9kZSwgcG9zKSA9PiB7XG4gICAgICBjb25zdCBmcm9tID0gbm9ybWFsaXplUG9zaXRpb24oZm9yd2FyZCwgcG9zKTtcbiAgICAgIGNvbnN0IGZyb21Mb2NhdGlvbiA9IHJlYWRMb2NhdGlvbihpc0lubGluZVRhcmdldCwgcm9vdE5vZGUsIGZyb20pO1xuICAgICAgcmV0dXJuIHJlYWRMb2NhdGlvbihpc0lubGluZVRhcmdldCwgcm9vdE5vZGUsIGZyb20pLmJpbmQoY3VycnkoZmluZExvY2F0aW9uU2ltcGxlLCBmb3J3YXJkKSkub3JUaHVuaygoKSA9PiBmaW5kTG9jYXRpb25UcmF2ZXJzZShmb3J3YXJkLCBpc0lubGluZVRhcmdldCwgcm9vdE5vZGUsIGZyb21Mb2NhdGlvbiwgcG9zKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhc1NlbGVjdGlvbk1vZGlmeUFwaSA9IGVkaXRvciA9PiB7XG4gICAgICByZXR1cm4gaXNGdW5jdGlvbihlZGl0b3Iuc2VsZWN0aW9uLmdldFNlbCgpLm1vZGlmeSk7XG4gICAgfTtcbiAgICBjb25zdCBtb3ZlUmVsID0gKGZvcndhcmQsIHNlbGVjdGlvbiwgcG9zKSA9PiB7XG4gICAgICBjb25zdCBkZWx0YSA9IGZvcndhcmQgPyAxIDogLTE7XG4gICAgICBzZWxlY3Rpb24uc2V0Um5nKENhcmV0UG9zaXRpb24ocG9zLmNvbnRhaW5lcigpLCBwb3Mub2Zmc2V0KCkgKyBkZWx0YSkudG9SYW5nZSgpKTtcbiAgICAgIHNlbGVjdGlvbi5nZXRTZWwoKS5tb2RpZnkoJ21vdmUnLCBmb3J3YXJkID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJywgJ3dvcmQnKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgY29uc3QgbW92ZUJ5V29yZCA9IChmb3J3YXJkLCBlZGl0b3IpID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBjb25zdCBwb3MgPSBmb3J3YXJkID8gQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VFbmQocm5nKSA6IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQocm5nKTtcbiAgICAgIGlmICghaGFzU2VsZWN0aW9uTW9kaWZ5QXBpKGVkaXRvcikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChmb3J3YXJkICYmIGlzQmVmb3JlSW5saW5lKHBvcykpIHtcbiAgICAgICAgcmV0dXJuIG1vdmVSZWwodHJ1ZSwgZWRpdG9yLnNlbGVjdGlvbiwgcG9zKTtcbiAgICAgIH0gZWxzZSBpZiAoIWZvcndhcmQgJiYgaXNBZnRlcklubGluZShwb3MpKSB7XG4gICAgICAgIHJldHVybiBtb3ZlUmVsKGZhbHNlLCBlZGl0b3Iuc2VsZWN0aW9uLCBwb3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgQnJlYWtUeXBlO1xuICAgIChmdW5jdGlvbiAoQnJlYWtUeXBlKSB7XG4gICAgICBCcmVha1R5cGVbQnJlYWtUeXBlWydCciddID0gMF0gPSAnQnInO1xuICAgICAgQnJlYWtUeXBlW0JyZWFrVHlwZVsnQmxvY2snXSA9IDFdID0gJ0Jsb2NrJztcbiAgICAgIEJyZWFrVHlwZVtCcmVha1R5cGVbJ1dyYXAnXSA9IDJdID0gJ1dyYXAnO1xuICAgICAgQnJlYWtUeXBlW0JyZWFrVHlwZVsnRW9sJ10gPSAzXSA9ICdFb2wnO1xuICAgIH0oQnJlYWtUeXBlIHx8IChCcmVha1R5cGUgPSB7fSkpKTtcbiAgICBjb25zdCBmbGlwID0gKGRpcmVjdGlvbiwgcG9zaXRpb25zKSA9PiBkaXJlY3Rpb24gPT09IEhEaXJlY3Rpb24uQmFja3dhcmRzID8gcmV2ZXJzZShwb3NpdGlvbnMpIDogcG9zaXRpb25zO1xuICAgIGNvbnN0IHdhbGskMSA9IChkaXJlY3Rpb24sIGNhcmV0V2Fsa2VyLCBwb3MpID0+IGRpcmVjdGlvbiA9PT0gSERpcmVjdGlvbi5Gb3J3YXJkcyA/IGNhcmV0V2Fsa2VyLm5leHQocG9zKSA6IGNhcmV0V2Fsa2VyLnByZXYocG9zKTtcbiAgICBjb25zdCBnZXRCcmVha1R5cGUgPSAoc2NvcGUsIGRpcmVjdGlvbiwgY3VycmVudFBvcywgbmV4dFBvcykgPT4ge1xuICAgICAgaWYgKGlzQnIkNihuZXh0UG9zLmdldE5vZGUoZGlyZWN0aW9uID09PSBIRGlyZWN0aW9uLkZvcndhcmRzKSkpIHtcbiAgICAgICAgcmV0dXJuIEJyZWFrVHlwZS5CcjtcbiAgICAgIH0gZWxzZSBpZiAoaXNJblNhbWVCbG9jayhjdXJyZW50UG9zLCBuZXh0UG9zKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIEJyZWFrVHlwZS5CbG9jaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBCcmVha1R5cGUuV3JhcDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdldFBvc2l0aW9uc1VudGlsID0gKHByZWRpY2F0ZSwgZGlyZWN0aW9uLCBzY29wZSwgc3RhcnQpID0+IHtcbiAgICAgIGNvbnN0IGNhcmV0V2Fsa2VyID0gQ2FyZXRXYWxrZXIoc2NvcGUpO1xuICAgICAgbGV0IGN1cnJlbnRQb3MgPSBzdGFydDtcbiAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IFtdO1xuICAgICAgd2hpbGUgKGN1cnJlbnRQb3MpIHtcbiAgICAgICAgY29uc3QgbmV4dFBvcyA9IHdhbGskMShkaXJlY3Rpb24sIGNhcmV0V2Fsa2VyLCBjdXJyZW50UG9zKTtcbiAgICAgICAgaWYgKCFuZXh0UG9zKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQnIkNihuZXh0UG9zLmdldE5vZGUoZmFsc2UpKSkge1xuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IEhEaXJlY3Rpb24uRm9yd2FyZHMpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHBvc2l0aW9uczogZmxpcChkaXJlY3Rpb24sIHBvc2l0aW9ucykuY29uY2F0KFtuZXh0UG9zXSksXG4gICAgICAgICAgICAgIGJyZWFrVHlwZTogQnJlYWtUeXBlLkJyLFxuICAgICAgICAgICAgICBicmVha0F0OiBPcHRpb25hbC5zb21lKG5leHRQb3MpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBwb3NpdGlvbnM6IGZsaXAoZGlyZWN0aW9uLCBwb3NpdGlvbnMpLFxuICAgICAgICAgICAgICBicmVha1R5cGU6IEJyZWFrVHlwZS5CcixcbiAgICAgICAgICAgICAgYnJlYWtBdDogT3B0aW9uYWwuc29tZShuZXh0UG9zKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFuZXh0UG9zLmlzVmlzaWJsZSgpKSB7XG4gICAgICAgICAgY3VycmVudFBvcyA9IG5leHRQb3M7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZWRpY2F0ZShjdXJyZW50UG9zLCBuZXh0UG9zKSkge1xuICAgICAgICAgIGNvbnN0IGJyZWFrVHlwZSA9IGdldEJyZWFrVHlwZShzY29wZSwgZGlyZWN0aW9uLCBjdXJyZW50UG9zLCBuZXh0UG9zKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcG9zaXRpb25zOiBmbGlwKGRpcmVjdGlvbiwgcG9zaXRpb25zKSxcbiAgICAgICAgICAgIGJyZWFrVHlwZSxcbiAgICAgICAgICAgIGJyZWFrQXQ6IE9wdGlvbmFsLnNvbWUobmV4dFBvcylcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHBvc2l0aW9ucy5wdXNoKG5leHRQb3MpO1xuICAgICAgICBjdXJyZW50UG9zID0gbmV4dFBvcztcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBvc2l0aW9uczogZmxpcChkaXJlY3Rpb24sIHBvc2l0aW9ucyksXG4gICAgICAgIGJyZWFrVHlwZTogQnJlYWtUeXBlLkVvbCxcbiAgICAgICAgYnJlYWtBdDogT3B0aW9uYWwubm9uZSgpXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZ2V0QWRqYWNlbnRMaW5lUG9zaXRpb25zID0gKGRpcmVjdGlvbiwgZ2V0UG9zaXRpb25zVW50aWxCcmVhaywgc2NvcGUsIHN0YXJ0KSA9PiBnZXRQb3NpdGlvbnNVbnRpbEJyZWFrKHNjb3BlLCBzdGFydCkuYnJlYWtBdC5tYXAocG9zID0+IHtcbiAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IGdldFBvc2l0aW9uc1VudGlsQnJlYWsoc2NvcGUsIHBvcykucG9zaXRpb25zO1xuICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gSERpcmVjdGlvbi5CYWNrd2FyZHMgPyBwb3NpdGlvbnMuY29uY2F0KHBvcykgOiBbcG9zXS5jb25jYXQocG9zaXRpb25zKTtcbiAgICB9KS5nZXRPcihbXSk7XG4gICAgY29uc3QgZmluZENsb3Nlc3RIb3Jpem9udGFsUG9zaXRpb25Gcm9tUG9pbnQgPSAocG9zaXRpb25zLCB4KSA9PiBmb2xkbChwb3NpdGlvbnMsIChhY2MsIG5ld1BvcykgPT4gYWNjLmZvbGQoKCkgPT4gT3B0aW9uYWwuc29tZShuZXdQb3MpLCBsYXN0UG9zID0+IGxpZnQyKGhlYWQobGFzdFBvcy5nZXRDbGllbnRSZWN0cygpKSwgaGVhZChuZXdQb3MuZ2V0Q2xpZW50UmVjdHMoKSksIChsYXN0UmVjdCwgbmV3UmVjdCkgPT4ge1xuICAgICAgY29uc3QgbGFzdERpc3QgPSBNYXRoLmFicyh4IC0gbGFzdFJlY3QubGVmdCk7XG4gICAgICBjb25zdCBuZXdEaXN0ID0gTWF0aC5hYnMoeCAtIG5ld1JlY3QubGVmdCk7XG4gICAgICByZXR1cm4gbmV3RGlzdCA8PSBsYXN0RGlzdCA/IG5ld1BvcyA6IGxhc3RQb3M7XG4gICAgfSkub3IoYWNjKSksIE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgY29uc3QgZmluZENsb3Nlc3RIb3Jpem9udGFsUG9zaXRpb24gPSAocG9zaXRpb25zLCBwb3MpID0+IGhlYWQocG9zLmdldENsaWVudFJlY3RzKCkpLmJpbmQodGFyZ2V0UmVjdCA9PiBmaW5kQ2xvc2VzdEhvcml6b250YWxQb3NpdGlvbkZyb21Qb2ludChwb3NpdGlvbnMsIHRhcmdldFJlY3QubGVmdCkpO1xuICAgIGNvbnN0IGdldFBvc2l0aW9uc1VudGlsUHJldmlvdXNMaW5lID0gY3VycnkoZ2V0UG9zaXRpb25zVW50aWwsIENhcmV0UG9zaXRpb24uaXNBYm92ZSwgLTEpO1xuICAgIGNvbnN0IGdldFBvc2l0aW9uc1VudGlsTmV4dExpbmUgPSBjdXJyeShnZXRQb3NpdGlvbnNVbnRpbCwgQ2FyZXRQb3NpdGlvbi5pc0JlbG93LCAxKTtcbiAgICBjb25zdCBnZXRQb3NpdGlvbnNBYm92ZSA9IGN1cnJ5KGdldEFkamFjZW50TGluZVBvc2l0aW9ucywgLTEsIGdldFBvc2l0aW9uc1VudGlsUHJldmlvdXNMaW5lKTtcbiAgICBjb25zdCBnZXRQb3NpdGlvbnNCZWxvdyA9IGN1cnJ5KGdldEFkamFjZW50TGluZVBvc2l0aW9ucywgMSwgZ2V0UG9zaXRpb25zVW50aWxOZXh0TGluZSk7XG4gICAgY29uc3QgaXNBdEZpcnN0TGluZSA9IChzY29wZSwgcG9zKSA9PiBnZXRQb3NpdGlvbnNVbnRpbFByZXZpb3VzTGluZShzY29wZSwgcG9zKS5icmVha0F0LmlzTm9uZSgpO1xuICAgIGNvbnN0IGlzQXRMYXN0TGluZSA9IChzY29wZSwgcG9zKSA9PiBnZXRQb3NpdGlvbnNVbnRpbE5leHRMaW5lKHNjb3BlLCBwb3MpLmJyZWFrQXQuaXNOb25lKCk7XG4gICAgY29uc3QgZ2V0Rmlyc3RMaW5lUG9zaXRpb25zID0gc2NvcGUgPT4gZmlyc3RQb3NpdGlvbkluKHNjb3BlKS5tYXAocG9zID0+IFtwb3NdLmNvbmNhdChnZXRQb3NpdGlvbnNVbnRpbE5leHRMaW5lKHNjb3BlLCBwb3MpLnBvc2l0aW9ucykpLmdldE9yKFtdKTtcbiAgICBjb25zdCBnZXRMYXN0TGluZVBvc2l0aW9ucyA9IHNjb3BlID0+IGxhc3RQb3NpdGlvbkluKHNjb3BlKS5tYXAocG9zID0+IGdldFBvc2l0aW9uc1VudGlsUHJldmlvdXNMaW5lKHNjb3BlLCBwb3MpLnBvc2l0aW9ucy5jb25jYXQocG9zKSkuZ2V0T3IoW10pO1xuICAgIGNvbnN0IGdldENsb3Nlc3RQb3NpdGlvbkFib3ZlID0gKHNjb3BlLCBwb3MpID0+IGZpbmRDbG9zZXN0SG9yaXpvbnRhbFBvc2l0aW9uKGdldFBvc2l0aW9uc0Fib3ZlKHNjb3BlLCBwb3MpLCBwb3MpO1xuICAgIGNvbnN0IGdldENsb3Nlc3RQb3NpdGlvbkJlbG93ID0gKHNjb3BlLCBwb3MpID0+IGZpbmRDbG9zZXN0SG9yaXpvbnRhbFBvc2l0aW9uKGdldFBvc2l0aW9uc0JlbG93KHNjb3BlLCBwb3MpLCBwb3MpO1xuXG4gICAgY29uc3QgaXNDb250ZW50RWRpdGFibGVGYWxzZSQ0ID0gaXNDb250ZW50RWRpdGFibGVGYWxzZSRiO1xuICAgIGNvbnN0IGRpc3RhbmNlVG9SZWN0TGVmdCQxID0gKGNsaWVudFJlY3QsIGNsaWVudFgpID0+IE1hdGguYWJzKGNsaWVudFJlY3QubGVmdCAtIGNsaWVudFgpO1xuICAgIGNvbnN0IGRpc3RhbmNlVG9SZWN0UmlnaHQkMSA9IChjbGllbnRSZWN0LCBjbGllbnRYKSA9PiBNYXRoLmFicyhjbGllbnRSZWN0LnJpZ2h0IC0gY2xpZW50WCk7XG4gICAgY29uc3QgaXNOb2RlQ2xpZW50UmVjdCA9IHJlY3QgPT4gaGFzTm9uTnVsbGFibGVLZXkocmVjdCwgJ25vZGUnKTtcbiAgICBjb25zdCBmaW5kQ2xvc2VzdENsaWVudFJlY3QgPSAoY2xpZW50UmVjdHMsIGNsaWVudFgpID0+IHJlZHVjZShjbGllbnRSZWN0cywgKG9sZENsaWVudFJlY3QsIGNsaWVudFJlY3QpID0+IHtcbiAgICAgIGNvbnN0IG9sZERpc3RhbmNlID0gTWF0aC5taW4oZGlzdGFuY2VUb1JlY3RMZWZ0JDEob2xkQ2xpZW50UmVjdCwgY2xpZW50WCksIGRpc3RhbmNlVG9SZWN0UmlnaHQkMShvbGRDbGllbnRSZWN0LCBjbGllbnRYKSk7XG4gICAgICBjb25zdCBuZXdEaXN0YW5jZSA9IE1hdGgubWluKGRpc3RhbmNlVG9SZWN0TGVmdCQxKGNsaWVudFJlY3QsIGNsaWVudFgpLCBkaXN0YW5jZVRvUmVjdFJpZ2h0JDEoY2xpZW50UmVjdCwgY2xpZW50WCkpO1xuICAgICAgaWYgKG5ld0Rpc3RhbmNlID09PSBvbGREaXN0YW5jZSAmJiBpc05vZGVDbGllbnRSZWN0KGNsaWVudFJlY3QpICYmIGlzQ29udGVudEVkaXRhYmxlRmFsc2UkNChjbGllbnRSZWN0Lm5vZGUpKSB7XG4gICAgICAgIHJldHVybiBjbGllbnRSZWN0O1xuICAgICAgfVxuICAgICAgaWYgKG5ld0Rpc3RhbmNlIDwgb2xkRGlzdGFuY2UpIHtcbiAgICAgICAgcmV0dXJuIGNsaWVudFJlY3Q7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2xkQ2xpZW50UmVjdDtcbiAgICB9KTtcblxuICAgIGNvbnN0IGdldE5vZGVDbGllbnRSZWN0cyA9IG5vZGUgPT4ge1xuICAgICAgY29uc3QgdG9BcnJheVdpdGhOb2RlID0gY2xpZW50UmVjdHMgPT4ge1xuICAgICAgICByZXR1cm4gbWFwJDMoY2xpZW50UmVjdHMsIHJlY3QgPT4ge1xuICAgICAgICAgIGNvbnN0IGNsaWVudFJlY3QgPSBjbG9uZSQxKHJlY3QpO1xuICAgICAgICAgIGNsaWVudFJlY3Qubm9kZSA9IG5vZGU7XG4gICAgICAgICAgcmV0dXJuIGNsaWVudFJlY3Q7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGlmIChpc0VsZW1lbnQkNihub2RlKSkge1xuICAgICAgICByZXR1cm4gdG9BcnJheVdpdGhOb2RlKG5vZGUuZ2V0Q2xpZW50UmVjdHMoKSk7XG4gICAgICB9IGVsc2UgaWYgKGlzVGV4dCRhKG5vZGUpKSB7XG4gICAgICAgIGNvbnN0IHJuZyA9IG5vZGUub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICBybmcuc2V0U3RhcnQobm9kZSwgMCk7XG4gICAgICAgIHJuZy5zZXRFbmQobm9kZSwgbm9kZS5kYXRhLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiB0b0FycmF5V2l0aE5vZGUocm5nLmdldENsaWVudFJlY3RzKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ2V0Q2xpZW50UmVjdHMgPSBub2RlcyA9PiBiaW5kJDMobm9kZXMsIGdldE5vZGVDbGllbnRSZWN0cyk7XG5cbiAgICB2YXIgVkRpcmVjdGlvbjtcbiAgICAoZnVuY3Rpb24gKFZEaXJlY3Rpb24pIHtcbiAgICAgIFZEaXJlY3Rpb25bVkRpcmVjdGlvblsnVXAnXSA9IC0xXSA9ICdVcCc7XG4gICAgICBWRGlyZWN0aW9uW1ZEaXJlY3Rpb25bJ0Rvd24nXSA9IDFdID0gJ0Rvd24nO1xuICAgIH0oVkRpcmVjdGlvbiB8fCAoVkRpcmVjdGlvbiA9IHt9KSkpO1xuICAgIGNvbnN0IGZpbmRVbnRpbCA9IChkaXJlY3Rpb24sIHJvb3QsIHByZWRpY2F0ZUZuLCBub2RlKSA9PiB7XG4gICAgICBsZXQgY3VycmVudE5vZGUgPSBub2RlO1xuICAgICAgd2hpbGUgKGN1cnJlbnROb2RlID0gZmluZE5vZGUoY3VycmVudE5vZGUsIGRpcmVjdGlvbiwgaXNFZGl0YWJsZUNhcmV0Q2FuZGlkYXRlJDEsIHJvb3QpKSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGVGbihjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHdhbGtVbnRpbCA9IChkaXJlY3Rpb24sIGlzQWJvdmVGbiwgaXNCZWZsb3dGbiwgcm9vdCwgcHJlZGljYXRlRm4sIGNhcmV0UG9zaXRpb24pID0+IHtcbiAgICAgIGxldCBsaW5lID0gMDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgY29uc3QgYWRkID0gbm9kZSA9PiB7XG4gICAgICAgIGxldCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzKFtub2RlXSk7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09IC0xKSB7XG4gICAgICAgICAgY2xpZW50UmVjdHMgPSBjbGllbnRSZWN0cy5yZXZlcnNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGllbnRSZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGNsaWVudFJlY3QgPSBjbGllbnRSZWN0c1tpXTtcbiAgICAgICAgICBpZiAoaXNCZWZsb3dGbihjbGllbnRSZWN0LCB0YXJnZXRDbGllbnRSZWN0KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCAmJiBpc0Fib3ZlRm4oY2xpZW50UmVjdCwgbGFzdCQyKHJlc3VsdCkpKSB7XG4gICAgICAgICAgICBsaW5lKys7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNsaWVudFJlY3QubGluZSA9IGxpbmU7XG4gICAgICAgICAgaWYgKHByZWRpY2F0ZUZuKGNsaWVudFJlY3QpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0LnB1c2goY2xpZW50UmVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHRhcmdldENsaWVudFJlY3QgPSBsYXN0JDIoY2FyZXRQb3NpdGlvbi5nZXRDbGllbnRSZWN0cygpKTtcbiAgICAgIGlmICghdGFyZ2V0Q2xpZW50UmVjdCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgY29uc3Qgbm9kZSA9IGNhcmV0UG9zaXRpb24uZ2V0Tm9kZSgpO1xuICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgYWRkKG5vZGUpO1xuICAgICAgICBmaW5kVW50aWwoZGlyZWN0aW9uLCByb290LCBhZGQsIG5vZGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIGNvbnN0IGFib3ZlTGluZU51bWJlciA9IChsaW5lTnVtYmVyLCBjbGllbnRSZWN0KSA9PiBjbGllbnRSZWN0LmxpbmUgPiBsaW5lTnVtYmVyO1xuICAgIGNvbnN0IGlzTGluZU51bWJlciA9IChsaW5lTnVtYmVyLCBjbGllbnRSZWN0KSA9PiBjbGllbnRSZWN0LmxpbmUgPT09IGxpbmVOdW1iZXI7XG4gICAgY29uc3QgdXBVbnRpbCA9IGN1cnJ5KHdhbGtVbnRpbCwgVkRpcmVjdGlvbi5VcCwgaXNBYm92ZSQxLCBpc0JlbG93JDEpO1xuICAgIGNvbnN0IGRvd25VbnRpbCA9IGN1cnJ5KHdhbGtVbnRpbCwgVkRpcmVjdGlvbi5Eb3duLCBpc0JlbG93JDEsIGlzQWJvdmUkMSk7XG4gICAgY29uc3QgZ2V0TGFzdENsaWVudFJlY3QgPSBjYXJldFBvc2l0aW9uID0+IHtcbiAgICAgIHJldHVybiBsYXN0JDIoY2FyZXRQb3NpdGlvbi5nZXRDbGllbnRSZWN0cygpKTtcbiAgICB9O1xuICAgIGNvbnN0IHBvc2l0aW9uc1VudGlsID0gKGRpcmVjdGlvbiwgcm9vdCwgcHJlZGljYXRlRm4sIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IGNhcmV0V2Fsa2VyID0gQ2FyZXRXYWxrZXIocm9vdCk7XG4gICAgICBsZXQgd2Fsa0ZuO1xuICAgICAgbGV0IGlzQmVsb3dGbjtcbiAgICAgIGxldCBpc0Fib3ZlRm47XG4gICAgICBsZXQgY2FyZXRQb3NpdGlvbjtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgbGV0IGxpbmUgPSAwO1xuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gMSkge1xuICAgICAgICB3YWxrRm4gPSBjYXJldFdhbGtlci5uZXh0O1xuICAgICAgICBpc0JlbG93Rm4gPSBpc0JlbG93JDE7XG4gICAgICAgIGlzQWJvdmVGbiA9IGlzQWJvdmUkMTtcbiAgICAgICAgY2FyZXRQb3NpdGlvbiA9IENhcmV0UG9zaXRpb24uYWZ0ZXIobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YWxrRm4gPSBjYXJldFdhbGtlci5wcmV2O1xuICAgICAgICBpc0JlbG93Rm4gPSBpc0Fib3ZlJDE7XG4gICAgICAgIGlzQWJvdmVGbiA9IGlzQmVsb3ckMTtcbiAgICAgICAgY2FyZXRQb3NpdGlvbiA9IENhcmV0UG9zaXRpb24uYmVmb3JlKG5vZGUpO1xuICAgICAgfVxuICAgICAgY29uc3QgdGFyZ2V0Q2xpZW50UmVjdCA9IGdldExhc3RDbGllbnRSZWN0KGNhcmV0UG9zaXRpb24pO1xuICAgICAgZG8ge1xuICAgICAgICBpZiAoIWNhcmV0UG9zaXRpb24uaXNWaXNpYmxlKCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWN0ID0gZ2V0TGFzdENsaWVudFJlY3QoY2FyZXRQb3NpdGlvbik7XG4gICAgICAgIGlmIChpc0Fib3ZlRm4ocmVjdCwgdGFyZ2V0Q2xpZW50UmVjdCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDAgJiYgaXNCZWxvd0ZuKHJlY3QsIGxhc3QkMihyZXN1bHQpKSkge1xuICAgICAgICAgIGxpbmUrKztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbGllbnRSZWN0ID0gY2xvbmUkMShyZWN0KTtcbiAgICAgICAgY2xpZW50UmVjdC5wb3NpdGlvbiA9IGNhcmV0UG9zaXRpb247XG4gICAgICAgIGNsaWVudFJlY3QubGluZSA9IGxpbmU7XG4gICAgICAgIGlmIChwcmVkaWNhdGVGbihjbGllbnRSZWN0KSkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnB1c2goY2xpZW50UmVjdCk7XG4gICAgICB9IHdoaWxlIChjYXJldFBvc2l0aW9uID0gd2Fsa0ZuKGNhcmV0UG9zaXRpb24pKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBjb25zdCBpc0Fib3ZlTGluZSA9IGxpbmVOdW1iZXIgPT4gY2xpZW50UmVjdCA9PiBhYm92ZUxpbmVOdW1iZXIobGluZU51bWJlciwgY2xpZW50UmVjdCk7XG4gICAgY29uc3QgaXNMaW5lID0gbGluZU51bWJlciA9PiBjbGllbnRSZWN0ID0+IGlzTGluZU51bWJlcihsaW5lTnVtYmVyLCBjbGllbnRSZWN0KTtcblxuICAgIGNvbnN0IG1vdmVUb1JhbmdlID0gKGVkaXRvciwgcm5nKSA9PiB7XG4gICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgc2Nyb2xsUmFuZ2VJbnRvVmlldyhlZGl0b3IsIGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyUmFuZ2VDYXJldE9wdCA9IChlZGl0b3IsIHJhbmdlLCBzY3JvbGxJbnRvVmlldykgPT4gT3B0aW9uYWwuc29tZShyZW5kZXJSYW5nZUNhcmV0KGVkaXRvciwgcmFuZ2UsIHNjcm9sbEludG9WaWV3KSk7XG4gICAgY29uc3QgbW92ZUhvcml6b250YWxseSA9IChlZGl0b3IsIGRpcmVjdGlvbiwgcmFuZ2UsIGlzQmVmb3JlLCBpc0FmdGVyLCBpc0VsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGZvcndhcmRzID0gZGlyZWN0aW9uID09PSBIRGlyZWN0aW9uLkZvcndhcmRzO1xuICAgICAgY29uc3QgY2FyZXRXYWxrZXIgPSBDYXJldFdhbGtlcihlZGl0b3IuZ2V0Qm9keSgpKTtcbiAgICAgIGNvbnN0IGdldE5leHRQb3NGbiA9IGN1cnJ5KGdldFZpc3VhbENhcmV0UG9zaXRpb24sIGZvcndhcmRzID8gY2FyZXRXYWxrZXIubmV4dCA6IGNhcmV0V2Fsa2VyLnByZXYpO1xuICAgICAgY29uc3QgaXNCZWZvcmVGbiA9IGZvcndhcmRzID8gaXNCZWZvcmUgOiBpc0FmdGVyO1xuICAgICAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGdldFNlbGVjdGVkTm9kZShyYW5nZSk7XG4gICAgICAgIGlmIChpc0VsZW1lbnQobm9kZSkpIHtcbiAgICAgICAgICByZXR1cm4gc2hvd0NhcmV0KGRpcmVjdGlvbiwgZWRpdG9yLCBub2RlLCBkaXJlY3Rpb24gPT09IEhEaXJlY3Rpb24uQmFja3dhcmRzLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNDZWZBdEVkZ2VTZWxlY3RlZChlZGl0b3IpKSB7XG4gICAgICAgICAgY29uc3QgbmV3UmFuZ2UgPSByYW5nZS5jbG9uZVJhbmdlKCk7XG4gICAgICAgICAgbmV3UmFuZ2UuY29sbGFwc2UoZGlyZWN0aW9uID09PSBIRGlyZWN0aW9uLkJhY2t3YXJkcyk7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20obmV3UmFuZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBjYXJldFBvc2l0aW9uID0gZ2V0Tm9ybWFsaXplZFJhbmdlRW5kUG9pbnQoZGlyZWN0aW9uLCBlZGl0b3IuZ2V0Qm9keSgpLCByYW5nZSk7XG4gICAgICBpZiAoaXNCZWZvcmVGbihjYXJldFBvc2l0aW9uKSkge1xuICAgICAgICByZXR1cm4gc2VsZWN0Tm9kZShlZGl0b3IsIGNhcmV0UG9zaXRpb24uZ2V0Tm9kZSghZm9yd2FyZHMpKTtcbiAgICAgIH1cbiAgICAgIGxldCBuZXh0Q2FyZXRQb3NpdGlvbiA9IGdldE5leHRQb3NGbihjYXJldFBvc2l0aW9uKTtcbiAgICAgIGNvbnN0IHJhbmdlSXNJbkNvbnRhaW5lckJsb2NrID0gaXNSYW5nZUluQ2FyZXRDb250YWluZXJCbG9jayhyYW5nZSk7XG4gICAgICBpZiAoIW5leHRDYXJldFBvc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiByYW5nZUlzSW5Db250YWluZXJCbG9jayA/IE9wdGlvbmFsLnNvbWUocmFuZ2UpIDogT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dENhcmV0UG9zaXRpb24gPSBub3JtYWxpemVQb3NpdGlvbihmb3J3YXJkcywgbmV4dENhcmV0UG9zaXRpb24pO1xuICAgICAgfVxuICAgICAgaWYgKGlzQmVmb3JlRm4obmV4dENhcmV0UG9zaXRpb24pKSB7XG4gICAgICAgIHJldHVybiBzaG93Q2FyZXQoZGlyZWN0aW9uLCBlZGl0b3IsIG5leHRDYXJldFBvc2l0aW9uLmdldE5vZGUoIWZvcndhcmRzKSwgZm9yd2FyZHMsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBlZWtDYXJldFBvc2l0aW9uID0gZ2V0TmV4dFBvc0ZuKG5leHRDYXJldFBvc2l0aW9uKTtcbiAgICAgIGlmIChwZWVrQ2FyZXRQb3NpdGlvbiAmJiBpc0JlZm9yZUZuKHBlZWtDYXJldFBvc2l0aW9uKSkge1xuICAgICAgICBpZiAoaXNNb3ZlSW5zaWRlU2FtZUJsb2NrKG5leHRDYXJldFBvc2l0aW9uLCBwZWVrQ2FyZXRQb3NpdGlvbikpIHtcbiAgICAgICAgICByZXR1cm4gc2hvd0NhcmV0KGRpcmVjdGlvbiwgZWRpdG9yLCBwZWVrQ2FyZXRQb3NpdGlvbi5nZXROb2RlKCFmb3J3YXJkcyksIGZvcndhcmRzLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyYW5nZUlzSW5Db250YWluZXJCbG9jaykge1xuICAgICAgICByZXR1cm4gcmVuZGVyUmFuZ2VDYXJldE9wdChlZGl0b3IsIG5leHRDYXJldFBvc2l0aW9uLnRvUmFuZ2UoKSwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IG1vdmVWZXJ0aWNhbGx5ID0gKGVkaXRvciwgZGlyZWN0aW9uLCByYW5nZSwgaXNCZWZvcmUsIGlzQWZ0ZXIsIGlzRWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgY2FyZXRQb3NpdGlvbiA9IGdldE5vcm1hbGl6ZWRSYW5nZUVuZFBvaW50KGRpcmVjdGlvbiwgZWRpdG9yLmdldEJvZHkoKSwgcmFuZ2UpO1xuICAgICAgY29uc3QgY2FyZXRDbGllbnRSZWN0ID0gbGFzdCQyKGNhcmV0UG9zaXRpb24uZ2V0Q2xpZW50UmVjdHMoKSk7XG4gICAgICBjb25zdCBmb3J3YXJkcyA9IGRpcmVjdGlvbiA9PT0gVkRpcmVjdGlvbi5Eb3duO1xuICAgICAgY29uc3Qgcm9vdCA9IGVkaXRvci5nZXRCb2R5KCk7XG4gICAgICBpZiAoIWNhcmV0Q2xpZW50UmVjdCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGlzQ2VmQXRFZGdlU2VsZWN0ZWQoZWRpdG9yKSkge1xuICAgICAgICBjb25zdCBjYXJldFBvc2l0aW9uID0gZm9yd2FyZHMgPyBDYXJldFBvc2l0aW9uLmZyb21SYW5nZUVuZChyYW5nZSkgOiBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KHJhbmdlKTtcbiAgICAgICAgY29uc3QgZ2V0Q2xvc2VzdEZuID0gIWZvcndhcmRzID8gZ2V0Q2xvc2VzdFBvc2l0aW9uQWJvdmUgOiBnZXRDbG9zZXN0UG9zaXRpb25CZWxvdztcbiAgICAgICAgcmV0dXJuIGdldENsb3Nlc3RGbihyb290LCBjYXJldFBvc2l0aW9uKS5vclRodW5rKCgpID0+IE9wdGlvbmFsLmZyb20oY2FyZXRQb3NpdGlvbikpLm1hcChwb3MgPT4gcG9zLnRvUmFuZ2UoKSk7XG4gICAgICB9XG4gICAgICBjb25zdCB3YWxrZXJGbiA9IGZvcndhcmRzID8gZG93blVudGlsIDogdXBVbnRpbDtcbiAgICAgIGNvbnN0IGxpbmVQb3NpdGlvbnMgPSB3YWxrZXJGbihyb290LCBpc0Fib3ZlTGluZSgxKSwgY2FyZXRQb3NpdGlvbik7XG4gICAgICBjb25zdCBuZXh0TGluZVBvc2l0aW9ucyA9IGZpbHRlciQ1KGxpbmVQb3NpdGlvbnMsIGlzTGluZSgxKSk7XG4gICAgICBjb25zdCBjbGllbnRYID0gY2FyZXRDbGllbnRSZWN0LmxlZnQ7XG4gICAgICBjb25zdCBuZXh0TGluZVJlY3QgPSBmaW5kQ2xvc2VzdENsaWVudFJlY3QobmV4dExpbmVQb3NpdGlvbnMsIGNsaWVudFgpO1xuICAgICAgaWYgKG5leHRMaW5lUmVjdCAmJiBpc0VsZW1lbnQobmV4dExpbmVSZWN0Lm5vZGUpKSB7XG4gICAgICAgIGNvbnN0IGRpc3QxID0gTWF0aC5hYnMoY2xpZW50WCAtIG5leHRMaW5lUmVjdC5sZWZ0KTtcbiAgICAgICAgY29uc3QgZGlzdDIgPSBNYXRoLmFicyhjbGllbnRYIC0gbmV4dExpbmVSZWN0LnJpZ2h0KTtcbiAgICAgICAgcmV0dXJuIHNob3dDYXJldChkaXJlY3Rpb24sIGVkaXRvciwgbmV4dExpbmVSZWN0Lm5vZGUsIGRpc3QxIDwgZGlzdDIsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIGxldCBjdXJyZW50Tm9kZTtcbiAgICAgIGlmIChpc0JlZm9yZShjYXJldFBvc2l0aW9uKSkge1xuICAgICAgICBjdXJyZW50Tm9kZSA9IGNhcmV0UG9zaXRpb24uZ2V0Tm9kZSgpO1xuICAgICAgfSBlbHNlIGlmIChpc0FmdGVyKGNhcmV0UG9zaXRpb24pKSB7XG4gICAgICAgIGN1cnJlbnROb2RlID0gY2FyZXRQb3NpdGlvbi5nZXROb2RlKHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudE5vZGUgPSBnZXRTZWxlY3RlZE5vZGUocmFuZ2UpO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnROb2RlKSB7XG4gICAgICAgIGNvbnN0IGNhcmV0UG9zaXRpb25zID0gcG9zaXRpb25zVW50aWwoZGlyZWN0aW9uLCByb290LCBpc0Fib3ZlTGluZSgxKSwgY3VycmVudE5vZGUpO1xuICAgICAgICBsZXQgY2xvc2VzdE5leHRMaW5lUmVjdCA9IGZpbmRDbG9zZXN0Q2xpZW50UmVjdChmaWx0ZXIkNShjYXJldFBvc2l0aW9ucywgaXNMaW5lKDEpKSwgY2xpZW50WCk7XG4gICAgICAgIGlmIChjbG9zZXN0TmV4dExpbmVSZWN0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlbmRlclJhbmdlQ2FyZXRPcHQoZWRpdG9yLCBjbG9zZXN0TmV4dExpbmVSZWN0LnBvc2l0aW9uLnRvUmFuZ2UoKSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGNsb3Nlc3ROZXh0TGluZVJlY3QgPSBsYXN0JDIoZmlsdGVyJDUoY2FyZXRQb3NpdGlvbnMsIGlzTGluZSgwKSkpO1xuICAgICAgICBpZiAoY2xvc2VzdE5leHRMaW5lUmVjdCkge1xuICAgICAgICAgIHJldHVybiByZW5kZXJSYW5nZUNhcmV0T3B0KGVkaXRvciwgY2xvc2VzdE5leHRMaW5lUmVjdC5wb3NpdGlvbi50b1JhbmdlKCksIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5leHRMaW5lUG9zaXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZ2V0TGluZUVuZFBvaW50KGVkaXRvciwgZm9yd2FyZHMpLmZpbHRlcihmb3J3YXJkcyA/IGlzQWZ0ZXIgOiBpc0JlZm9yZSkubWFwKHBvcyA9PiByZW5kZXJSYW5nZUNhcmV0KGVkaXRvciwgcG9zLnRvUmFuZ2UoKSwgZmFsc2UpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRMaW5lRW5kUG9pbnQgPSAoZWRpdG9yLCBmb3J3YXJkKSA9PiB7XG4gICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgY29uc3QgZnJvbSA9IGZvcndhcmQgPyBDYXJldFBvc2l0aW9uLmZyb21SYW5nZUVuZChybmcpIDogQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChybmcpO1xuICAgICAgY29uc3QgaG9zdCA9IGdldEVkaXRpbmdIb3N0KGZyb20uY29udGFpbmVyKCksIGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgaWYgKGZvcndhcmQpIHtcbiAgICAgICAgY29uc3QgbGluZUluZm8gPSBnZXRQb3NpdGlvbnNVbnRpbE5leHRMaW5lKGhvc3QsIGZyb20pO1xuICAgICAgICByZXR1cm4gbGFzdCQzKGxpbmVJbmZvLnBvc2l0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsaW5lSW5mbyA9IGdldFBvc2l0aW9uc1VudGlsUHJldmlvdXNMaW5lKGhvc3QsIGZyb20pO1xuICAgICAgICByZXR1cm4gaGVhZChsaW5lSW5mby5wb3NpdGlvbnMpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbW92ZVRvTGluZUVuZFBvaW50JDMgPSAoZWRpdG9yLCBmb3J3YXJkLCBpc0VsZW1lbnRQb3NpdGlvbikgPT4gZ2V0TGluZUVuZFBvaW50KGVkaXRvciwgZm9yd2FyZCkuZmlsdGVyKGlzRWxlbWVudFBvc2l0aW9uKS5leGlzdHMocG9zID0+IHtcbiAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHBvcy50b1JhbmdlKCkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICBjb25zdCBzZXRDYXJldFBvc2l0aW9uID0gKGVkaXRvciwgcG9zKSA9PiB7XG4gICAgICBjb25zdCBybmcgPSBlZGl0b3IuZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgcm5nLnNldFN0YXJ0KHBvcy5jb250YWluZXIoKSwgcG9zLm9mZnNldCgpKTtcbiAgICAgIHJuZy5zZXRFbmQocG9zLmNvbnRhaW5lcigpLCBwb3Mub2Zmc2V0KCkpO1xuICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcocm5nKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldFNlbGVjdGVkID0gKHN0YXRlLCBlbG0pID0+IHtcbiAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICBlbG0uc2V0QXR0cmlidXRlKCdkYXRhLW1jZS1zZWxlY3RlZCcsICdpbmxpbmUtYm91bmRhcnknKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbWNlLXNlbGVjdGVkJyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJDYXJldExvY2F0aW9uID0gKGVkaXRvciwgY2FyZXQsIGxvY2F0aW9uKSA9PiByZW5kZXJDYXJldChjYXJldCwgbG9jYXRpb24pLm1hcChwb3MgPT4ge1xuICAgICAgc2V0Q2FyZXRQb3NpdGlvbihlZGl0b3IsIHBvcyk7XG4gICAgICByZXR1cm4gbG9jYXRpb247XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0UG9zaXRpb25Gcm9tUmFuZ2UgPSAocmFuZ2UsIHJvb3QsIGZvcndhcmQpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChyYW5nZSk7XG4gICAgICBpZiAocmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgICAgIHJldHVybiBzdGFydDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVuZCA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlRW5kKHJhbmdlKTtcbiAgICAgICAgcmV0dXJuIGZvcndhcmQgPyBwcmV2UG9zaXRpb24ocm9vdCwgZW5kKS5nZXRPcihlbmQpIDogbmV4dFBvc2l0aW9uKHJvb3QsIHN0YXJ0KS5nZXRPcihzdGFydCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBmaW5kTG9jYXRpb24gPSAoZWRpdG9yLCBjYXJldCwgZm9yd2FyZCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdE5vZGUgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgY29uc3QgZnJvbSA9IGdldFBvc2l0aW9uRnJvbVJhbmdlKGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCksIHJvb3ROb2RlLCBmb3J3YXJkKTtcbiAgICAgIGNvbnN0IGlzSW5saW5lVGFyZ2V0JDEgPSBjdXJyeShpc0lubGluZVRhcmdldCwgZWRpdG9yKTtcbiAgICAgIGNvbnN0IGxvY2F0aW9uID0gZmluZExvY2F0aW9uJDEoZm9yd2FyZCwgaXNJbmxpbmVUYXJnZXQkMSwgcm9vdE5vZGUsIGZyb20pO1xuICAgICAgcmV0dXJuIGxvY2F0aW9uLmJpbmQobG9jYXRpb24gPT4gcmVuZGVyQ2FyZXRMb2NhdGlvbihlZGl0b3IsIGNhcmV0LCBsb2NhdGlvbikpO1xuICAgIH07XG4gICAgY29uc3QgdG9nZ2xlSW5saW5lcyA9IChpc0lubGluZVRhcmdldCwgZG9tLCBlbG1zKSA9PiB7XG4gICAgICBjb25zdCBpbmxpbmVCb3VuZGFyaWVzID0gbWFwJDMoZGVzY2VuZGFudHMoU3VnYXJFbGVtZW50LmZyb21Eb20oZG9tLmdldFJvb3QoKSksICcqW2RhdGEtbWNlLXNlbGVjdGVkPVwiaW5saW5lLWJvdW5kYXJ5XCJdJyksIGUgPT4gZS5kb20pO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRJbmxpbmVzID0gZmlsdGVyJDUoaW5saW5lQm91bmRhcmllcywgaXNJbmxpbmVUYXJnZXQpO1xuICAgICAgY29uc3QgdGFyZ2V0SW5saW5lcyA9IGZpbHRlciQ1KGVsbXMsIGlzSW5saW5lVGFyZ2V0KTtcbiAgICAgIGVhY2gkZShkaWZmZXJlbmNlKHNlbGVjdGVkSW5saW5lcywgdGFyZ2V0SW5saW5lcyksIGN1cnJ5KHNldFNlbGVjdGVkLCBmYWxzZSkpO1xuICAgICAgZWFjaCRlKGRpZmZlcmVuY2UodGFyZ2V0SW5saW5lcywgc2VsZWN0ZWRJbmxpbmVzKSwgY3Vycnkoc2V0U2VsZWN0ZWQsIHRydWUpKTtcbiAgICB9O1xuICAgIGNvbnN0IHNhZmVSZW1vdmVDYXJldENvbnRhaW5lciA9IChlZGl0b3IsIGNhcmV0KSA9PiB7XG4gICAgICBjb25zdCBjYXJldFZhbHVlID0gY2FyZXQuZ2V0KCk7XG4gICAgICBpZiAoZWRpdG9yLnNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpICYmICFlZGl0b3IuY29tcG9zaW5nICYmIGNhcmV0VmFsdWUpIHtcbiAgICAgICAgY29uc3QgcG9zID0gQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKTtcbiAgICAgICAgaWYgKENhcmV0UG9zaXRpb24uaXNUZXh0UG9zaXRpb24ocG9zKSAmJiAhaXNBdFp3c3AocG9zKSkge1xuICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oZWRpdG9yLCByZW1vdmVBbmRSZXBvc2l0aW9uKGNhcmV0VmFsdWUsIHBvcykpO1xuICAgICAgICAgIGNhcmV0LnNldChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVuZGVySW5zaWRlSW5saW5lQ2FyZXQgPSAoaXNJbmxpbmVUYXJnZXQsIGVkaXRvciwgY2FyZXQsIGVsbXMpID0+IHtcbiAgICAgIGlmIChlZGl0b3Iuc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkpIHtcbiAgICAgICAgY29uc3QgaW5saW5lcyA9IGZpbHRlciQ1KGVsbXMsIGlzSW5saW5lVGFyZ2V0KTtcbiAgICAgICAgZWFjaCRlKGlubGluZXMsIF9pbmxpbmUgPT4ge1xuICAgICAgICAgIGNvbnN0IHBvcyA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQoZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSk7XG4gICAgICAgICAgcmVhZExvY2F0aW9uKGlzSW5saW5lVGFyZ2V0LCBlZGl0b3IuZ2V0Qm9keSgpLCBwb3MpLmJpbmQobG9jYXRpb24gPT4gcmVuZGVyQ2FyZXRMb2NhdGlvbihlZGl0b3IsIGNhcmV0LCBsb2NhdGlvbikpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1vdmUkMyA9IChlZGl0b3IsIGNhcmV0LCBmb3J3YXJkKSA9PiBpc0lubGluZUJvdW5kYXJpZXNFbmFibGVkKGVkaXRvcikgPyBmaW5kTG9jYXRpb24oZWRpdG9yLCBjYXJldCwgZm9yd2FyZCkuaXNTb21lKCkgOiBmYWxzZTtcbiAgICBjb25zdCBtb3ZlV29yZCA9IChmb3J3YXJkLCBlZGl0b3IsIF9jYXJldCkgPT4gaXNJbmxpbmVCb3VuZGFyaWVzRW5hYmxlZChlZGl0b3IpID8gbW92ZUJ5V29yZChmb3J3YXJkLCBlZGl0b3IpIDogZmFsc2U7XG4gICAgY29uc3Qgc2V0dXBTZWxlY3RlZFN0YXRlID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGNhcmV0ID0gQ2VsbChudWxsKTtcbiAgICAgIGNvbnN0IGlzSW5saW5lVGFyZ2V0JDEgPSBjdXJyeShpc0lubGluZVRhcmdldCwgZWRpdG9yKTtcbiAgICAgIGVkaXRvci5vbignTm9kZUNoYW5nZScsIGUgPT4ge1xuICAgICAgICBpZiAoaXNJbmxpbmVCb3VuZGFyaWVzRW5hYmxlZChlZGl0b3IpKSB7XG4gICAgICAgICAgdG9nZ2xlSW5saW5lcyhpc0lubGluZVRhcmdldCQxLCBlZGl0b3IuZG9tLCBlLnBhcmVudHMpO1xuICAgICAgICAgIHNhZmVSZW1vdmVDYXJldENvbnRhaW5lcihlZGl0b3IsIGNhcmV0KTtcbiAgICAgICAgICByZW5kZXJJbnNpZGVJbmxpbmVDYXJldChpc0lubGluZVRhcmdldCQxLCBlZGl0b3IsIGNhcmV0LCBlLnBhcmVudHMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjYXJldDtcbiAgICB9O1xuICAgIGNvbnN0IG1vdmVOZXh0V29yZCA9IGN1cnJ5KG1vdmVXb3JkLCB0cnVlKTtcbiAgICBjb25zdCBtb3ZlUHJldldvcmQgPSBjdXJyeShtb3ZlV29yZCwgZmFsc2UpO1xuICAgIGNvbnN0IG1vdmVUb0xpbmVFbmRQb2ludCQyID0gKGVkaXRvciwgZm9yd2FyZCwgY2FyZXQpID0+IHtcbiAgICAgIGlmIChpc0lubGluZUJvdW5kYXJpZXNFbmFibGVkKGVkaXRvcikpIHtcbiAgICAgICAgY29uc3QgbGluZVBvaW50ID0gZ2V0TGluZUVuZFBvaW50KGVkaXRvciwgZm9yd2FyZCkuZ2V0T3JUaHVuaygoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgICAgICByZXR1cm4gZm9yd2FyZCA/IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlRW5kKHJuZykgOiBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KHJuZyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVhZExvY2F0aW9uKGN1cnJ5KGlzSW5saW5lVGFyZ2V0LCBlZGl0b3IpLCBlZGl0b3IuZ2V0Qm9keSgpLCBsaW5lUG9pbnQpLmV4aXN0cyhsb2MgPT4ge1xuICAgICAgICAgIGNvbnN0IG91dHNpZGVMb2MgPSBvdXRzaWRlKGxvYyk7XG4gICAgICAgICAgcmV0dXJuIHJlbmRlckNhcmV0KGNhcmV0LCBvdXRzaWRlTG9jKS5leGlzdHMocG9zID0+IHtcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oZWRpdG9yLCBwb3MpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCByYW5nZUZyb21Qb3NpdGlvbnMgPSAoZnJvbSwgdG8pID0+IHtcbiAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHJhbmdlLnNldFN0YXJ0KGZyb20uY29udGFpbmVyKCksIGZyb20ub2Zmc2V0KCkpO1xuICAgICAgcmFuZ2Uuc2V0RW5kKHRvLmNvbnRhaW5lcigpLCB0by5vZmZzZXQoKSk7XG4gICAgICByZXR1cm4gcmFuZ2U7XG4gICAgfTtcbiAgICBjb25zdCBoYXNPbmx5VHdvT3JMZXNzUG9zaXRpb25zTGVmdCA9IGVsbSA9PiBsaWZ0MihmaXJzdFBvc2l0aW9uSW4oZWxtKSwgbGFzdFBvc2l0aW9uSW4oZWxtKSwgKGZpcnN0UG9zLCBsYXN0UG9zKSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkRmlyc3RQb3MgPSBub3JtYWxpemVQb3NpdGlvbih0cnVlLCBmaXJzdFBvcyk7XG4gICAgICBjb25zdCBub3JtYWxpemVkTGFzdFBvcyA9IG5vcm1hbGl6ZVBvc2l0aW9uKGZhbHNlLCBsYXN0UG9zKTtcbiAgICAgIHJldHVybiBuZXh0UG9zaXRpb24oZWxtLCBub3JtYWxpemVkRmlyc3RQb3MpLmZvcmFsbChwb3MgPT4gcG9zLmlzRXF1YWwobm9ybWFsaXplZExhc3RQb3MpKTtcbiAgICB9KS5nZXRPcih0cnVlKTtcbiAgICBjb25zdCBzZXRDYXJldExvY2F0aW9uID0gKGVkaXRvciwgY2FyZXQpID0+IGxvY2F0aW9uID0+IHJlbmRlckNhcmV0KGNhcmV0LCBsb2NhdGlvbikubWFwKHBvcyA9PiAoKSA9PiBzZXRDYXJldFBvc2l0aW9uKGVkaXRvciwgcG9zKSk7XG4gICAgY29uc3QgZGVsZXRlRnJvbVRvID0gKGVkaXRvciwgY2FyZXQsIGZyb20sIHRvKSA9PiB7XG4gICAgICBjb25zdCByb290Tm9kZSA9IGVkaXRvci5nZXRCb2R5KCk7XG4gICAgICBjb25zdCBpc0lubGluZVRhcmdldCQxID0gY3VycnkoaXNJbmxpbmVUYXJnZXQsIGVkaXRvcik7XG4gICAgICBlZGl0b3IudW5kb01hbmFnZXIuaWdub3JlKCgpID0+IHtcbiAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcocmFuZ2VGcm9tUG9zaXRpb25zKGZyb20sIHRvKSk7XG4gICAgICAgIGV4ZWNOYXRpdmVEZWxldGVDb21tYW5kKGVkaXRvcik7XG4gICAgICAgIHJlYWRMb2NhdGlvbihpc0lubGluZVRhcmdldCQxLCByb290Tm9kZSwgQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKSkubWFwKGluc2lkZSkuYmluZChzZXRDYXJldExvY2F0aW9uKGVkaXRvciwgY2FyZXQpKS5lYWNoKGNhbGwpO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlc2NvcGUgPSAocm9vdE5vZGUsIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudEJsb2NrID0gZ2V0UGFyZW50QmxvY2skMyhub2RlLCByb290Tm9kZSk7XG4gICAgICByZXR1cm4gcGFyZW50QmxvY2sgPyBwYXJlbnRCbG9jayA6IHJvb3ROb2RlO1xuICAgIH07XG4gICAgY29uc3QgYmFja3NwYWNlRGVsZXRlQ29sbGFwc2VkID0gKGVkaXRvciwgY2FyZXQsIGZvcndhcmQsIGZyb20pID0+IHtcbiAgICAgIGNvbnN0IHJvb3ROb2RlID0gcmVzY29wZShlZGl0b3IuZ2V0Qm9keSgpLCBmcm9tLmNvbnRhaW5lcigpKTtcbiAgICAgIGNvbnN0IGlzSW5saW5lVGFyZ2V0JDEgPSBjdXJyeShpc0lubGluZVRhcmdldCwgZWRpdG9yKTtcbiAgICAgIGNvbnN0IGZyb21Mb2NhdGlvbiA9IHJlYWRMb2NhdGlvbihpc0lubGluZVRhcmdldCQxLCByb290Tm9kZSwgZnJvbSk7XG4gICAgICBjb25zdCBsb2NhdGlvbiA9IGZyb21Mb2NhdGlvbi5iaW5kKGxvY2F0aW9uID0+IHtcbiAgICAgICAgaWYgKGZvcndhcmQpIHtcbiAgICAgICAgICByZXR1cm4gbG9jYXRpb24uZm9sZChjb25zdGFudChPcHRpb25hbC5zb21lKGluc2lkZShsb2NhdGlvbikpKSwgT3B0aW9uYWwubm9uZSwgY29uc3RhbnQoT3B0aW9uYWwuc29tZShvdXRzaWRlKGxvY2F0aW9uKSkpLCBPcHRpb25hbC5ub25lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbG9jYXRpb24uZm9sZChPcHRpb25hbC5ub25lLCBjb25zdGFudChPcHRpb25hbC5zb21lKG91dHNpZGUobG9jYXRpb24pKSksIE9wdGlvbmFsLm5vbmUsIGNvbnN0YW50KE9wdGlvbmFsLnNvbWUoaW5zaWRlKGxvY2F0aW9uKSkpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbG9jYXRpb24ubWFwKHNldENhcmV0TG9jYXRpb24oZWRpdG9yLCBjYXJldCkpLmdldE9yVGh1bmsoKCkgPT4ge1xuICAgICAgICBjb25zdCB0b1Bvc2l0aW9uID0gbmF2aWdhdGUoZm9yd2FyZCwgcm9vdE5vZGUsIGZyb20pO1xuICAgICAgICBjb25zdCB0b0xvY2F0aW9uID0gdG9Qb3NpdGlvbi5iaW5kKHBvcyA9PiByZWFkTG9jYXRpb24oaXNJbmxpbmVUYXJnZXQkMSwgcm9vdE5vZGUsIHBvcykpO1xuICAgICAgICByZXR1cm4gbGlmdDIoZnJvbUxvY2F0aW9uLCB0b0xvY2F0aW9uLCAoKSA9PiBmaW5kUm9vdElubGluZShpc0lubGluZVRhcmdldCQxLCByb290Tm9kZSwgZnJvbSkuYmluZChlbG0gPT4ge1xuICAgICAgICAgIGlmIChoYXNPbmx5VHdvT3JMZXNzUG9zaXRpb25zTGVmdChlbG0pKSB7XG4gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSgoKSA9PiB7XG4gICAgICAgICAgICAgIGRlbGV0ZUVsZW1lbnQkMihlZGl0b3IsIGZvcndhcmQsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsbSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSkuZ2V0T3JUaHVuaygoKSA9PiB0b0xvY2F0aW9uLmJpbmQoKCkgPT4gdG9Qb3NpdGlvbi5tYXAodG8gPT4ge1xuICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoZm9yd2FyZCkge1xuICAgICAgICAgICAgICBkZWxldGVGcm9tVG8oZWRpdG9yLCBjYXJldCwgZnJvbSwgdG8pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGVsZXRlRnJvbVRvKGVkaXRvciwgY2FyZXQsIHRvLCBmcm9tKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9KSkpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBiYWNrc3BhY2VEZWxldGUkNCA9IChlZGl0b3IsIGNhcmV0LCBmb3J3YXJkKSA9PiB7XG4gICAgICBpZiAoZWRpdG9yLnNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpICYmIGlzSW5saW5lQm91bmRhcmllc0VuYWJsZWQoZWRpdG9yKSkge1xuICAgICAgICBjb25zdCBmcm9tID0gQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKTtcbiAgICAgICAgcmV0dXJuIGJhY2tzcGFjZURlbGV0ZUNvbGxhcHNlZChlZGl0b3IsIGNhcmV0LCBmb3J3YXJkLCBmcm9tKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhc011bHRpcGxlQ2hpbGRyZW4gPSBlbG0gPT4gY2hpbGROb2Rlc0NvdW50KGVsbSkgPiAxO1xuICAgIGNvbnN0IGdldFBhcmVudHNVbnRpbCA9IChlZGl0b3IsIHByZWQpID0+IHtcbiAgICAgIGNvbnN0IHJvb3RFbG0gPSBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKTtcbiAgICAgIGNvbnN0IHN0YXJ0RWxtID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCgpKTtcbiAgICAgIGNvbnN0IHBhcmVudHMgPSBwYXJlbnRzQW5kU2VsZihzdGFydEVsbSwgcm9vdEVsbSk7XG4gICAgICByZXR1cm4gZmluZEluZGV4JDIocGFyZW50cywgcHJlZCkuZm9sZChjb25zdGFudChwYXJlbnRzKSwgaW5kZXggPT4gcGFyZW50cy5zbGljZSgwLCBpbmRleCkpO1xuICAgIH07XG4gICAgY29uc3QgaGFzT25seU9uZUNoaWxkID0gZWxtID0+IGNoaWxkTm9kZXNDb3VudChlbG0pID09PSAxO1xuICAgIGNvbnN0IGdldFBhcmVudElubGluZXNVbnRpbE11bHRpY2hpbGRJbmxpbmUgPSBlZGl0b3IgPT4gZ2V0UGFyZW50c1VudGlsKGVkaXRvciwgZWxtID0+IGlzQmxvY2skMihlbG0pIHx8IGhhc011bHRpcGxlQ2hpbGRyZW4oZWxtKSk7XG4gICAgY29uc3QgZ2V0UGFyZW50SW5saW5lcyA9IGVkaXRvciA9PiBnZXRQYXJlbnRzVW50aWwoZWRpdG9yLCBpc0Jsb2NrJDIpO1xuICAgIGNvbnN0IGdldEZvcm1hdE5vZGVzID0gKGVkaXRvciwgcGFyZW50SW5saW5lcykgPT4ge1xuICAgICAgY29uc3QgaXNGb3JtYXRFbGVtZW50JDEgPSBjdXJyeShpc0Zvcm1hdEVsZW1lbnQsIGVkaXRvcik7XG4gICAgICByZXR1cm4gYmluZCQzKHBhcmVudElubGluZXMsIGVsbSA9PiBpc0Zvcm1hdEVsZW1lbnQkMShlbG0pID8gW2VsbS5kb21dIDogW10pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Rm9ybWF0Tm9kZXNBdFN0YXJ0ID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudElubGluZXMgPSBnZXRQYXJlbnRJbmxpbmVzKGVkaXRvcik7XG4gICAgICByZXR1cm4gZ2V0Rm9ybWF0Tm9kZXMoZWRpdG9yLCBwYXJlbnRJbmxpbmVzKTtcbiAgICB9O1xuICAgIGNvbnN0IGRlbGV0ZUxhc3RQb3NpdGlvbiA9IChmb3J3YXJkLCBlZGl0b3IsIHRhcmdldCwgcGFyZW50SW5saW5lcykgPT4ge1xuICAgICAgY29uc3QgZm9ybWF0Tm9kZXMgPSBnZXRGb3JtYXROb2RlcyhlZGl0b3IsIHBhcmVudElubGluZXMpO1xuICAgICAgaWYgKGZvcm1hdE5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkZWxldGVFbGVtZW50JDIoZWRpdG9yLCBmb3J3YXJkLCB0YXJnZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcG9zID0gcmVwbGFjZVdpdGhDYXJldEZvcm1hdCh0YXJnZXQuZG9tLCBmb3JtYXROb2Rlcyk7XG4gICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHBvcy50b1JhbmdlKCkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZGVsZXRlQ2FyZXQkMSA9IChlZGl0b3IsIGZvcndhcmQpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudElubGluZXMgPSBmaWx0ZXIkNShnZXRQYXJlbnRJbmxpbmVzVW50aWxNdWx0aWNoaWxkSW5saW5lKGVkaXRvciksIGhhc09ubHlPbmVDaGlsZCk7XG4gICAgICByZXR1cm4gbGFzdCQzKHBhcmVudElubGluZXMpLmJpbmQodGFyZ2V0ID0+IHtcbiAgICAgICAgY29uc3QgZnJvbVBvcyA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQoZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSk7XG4gICAgICAgIGlmICh3aWxsRGVsZXRlTGFzdFBvc2l0aW9uSW5FbGVtZW50KGZvcndhcmQsIGZyb21Qb3MsIHRhcmdldC5kb20pICYmICFpc0VtcHR5Q2FyZXRGb3JtYXRFbGVtZW50KHRhcmdldCkpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSgoKSA9PiBkZWxldGVMYXN0UG9zaXRpb24oZm9yd2FyZCwgZWRpdG9yLCB0YXJnZXQsIHBhcmVudElubGluZXMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQnJJbkVtcHR5RWxlbWVudCA9IChlZGl0b3IsIGVsbSkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50RWxtID0gZWxtLnBhcmVudEVsZW1lbnQ7XG4gICAgICByZXR1cm4gaXNCciQ2KGVsbSkgJiYgIWlzTnVsbChwYXJlbnRFbG0pICYmIGVkaXRvci5kb20uaXNFbXB0eShwYXJlbnRFbG0pO1xuICAgIH07XG4gICAgY29uc3QgaXNFbXB0eUNhcmV0ID0gZWxtID0+IGlzRW1wdHlDYXJldEZvcm1hdEVsZW1lbnQoU3VnYXJFbGVtZW50LmZyb21Eb20oZWxtKSk7XG4gICAgY29uc3QgY3JlYXRlQ2FyZXRGb3JtYXRBdFN0YXJ0ID0gKGVkaXRvciwgZm9ybWF0Tm9kZXMpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0RWxtID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCgpO1xuICAgICAgY29uc3QgcG9zID0gaXNCckluRW1wdHlFbGVtZW50KGVkaXRvciwgc3RhcnRFbG0pIHx8IGlzRW1wdHlDYXJldChzdGFydEVsbSkgPyByZXBsYWNlV2l0aENhcmV0Rm9ybWF0KHN0YXJ0RWxtLCBmb3JtYXROb2RlcykgOiBjcmVhdGVDYXJldEZvcm1hdEF0U3RhcnQkMShlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpLCBmb3JtYXROb2Rlcyk7XG4gICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhwb3MudG9SYW5nZSgpKTtcbiAgICB9O1xuICAgIGNvbnN0IHVwZGF0ZUNhcmV0Rm9ybWF0ID0gKGVkaXRvciwgdXBkYXRlRm9ybWF0cykgPT4ge1xuICAgICAgY29uc3QgbWlzc2luZ0Zvcm1hdHMgPSBkaWZmZXJlbmNlKHVwZGF0ZUZvcm1hdHMsIGdldEZvcm1hdE5vZGVzQXRTdGFydChlZGl0b3IpKTtcbiAgICAgIGlmIChtaXNzaW5nRm9ybWF0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNyZWF0ZUNhcmV0Rm9ybWF0QXRTdGFydChlZGl0b3IsIG1pc3NpbmdGb3JtYXRzKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJhbmdlU3RhcnRzQXRUZXh0Q29udGFpbmVyID0gcm5nID0+IGlzVGV4dCRhKHJuZy5zdGFydENvbnRhaW5lcik7XG4gICAgY29uc3QgcmFuZ2VTdGFydHNBdFN0YXJ0T2ZUZXh0Q29udGFpbmVyID0gcm5nID0+IHJuZy5zdGFydE9mZnNldCA9PT0gMCAmJiByYW5nZVN0YXJ0c0F0VGV4dENvbnRhaW5lcihybmcpO1xuICAgIGNvbnN0IHJhbmdlU3RhcnRQYXJlbnRJc0Zvcm1hdEVsZW1lbnQgPSAoZWRpdG9yLCBybmcpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0UGFyZW50ID0gcm5nLnN0YXJ0Q29udGFpbmVyLnBhcmVudEVsZW1lbnQ7XG4gICAgICByZXR1cm4gIWlzTnVsbChzdGFydFBhcmVudCkgJiYgaXNGb3JtYXRFbGVtZW50KGVkaXRvciwgU3VnYXJFbGVtZW50LmZyb21Eb20oc3RhcnRQYXJlbnQpKTtcbiAgICB9O1xuICAgIGNvbnN0IHJhbmdlU3RhcnRBbmRFbmRIYXZlU2FtZVBhcmVudCA9IHJuZyA9PiB7XG4gICAgICBjb25zdCBzdGFydFBhcmVudCA9IHJuZy5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgICAgY29uc3QgZW5kUGFyZW50ID0gcm5nLmVuZENvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgICAgcmV0dXJuICFpc051bGwoc3RhcnRQYXJlbnQpICYmICFpc051bGwoZW5kUGFyZW50KSAmJiBzdGFydFBhcmVudC5pc0VxdWFsTm9kZShlbmRQYXJlbnQpO1xuICAgIH07XG4gICAgY29uc3QgcmFuZ2VFbmRzQXRFbmRPZkVuZENvbnRhaW5lciA9IHJuZyA9PiB7XG4gICAgICBjb25zdCBlbmRDb250YWluZXIgPSBybmcuZW5kQ29udGFpbmVyO1xuICAgICAgcmV0dXJuIHJuZy5lbmRPZmZzZXQgPT09IChpc1RleHQkYShlbmRDb250YWluZXIpID8gZW5kQ29udGFpbmVyLmxlbmd0aCA6IGVuZENvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCk7XG4gICAgfTtcbiAgICBjb25zdCByYW5nZUVuZHNBdEVuZE9mU3RhcnRDb250YWluZXIgPSBybmcgPT4gcmFuZ2VTdGFydEFuZEVuZEhhdmVTYW1lUGFyZW50KHJuZykgJiYgcmFuZ2VFbmRzQXRFbmRPZkVuZENvbnRhaW5lcihybmcpO1xuICAgIGNvbnN0IHJhbmdlRW5kc0FmdGVyRW5kT2ZTdGFydENvbnRhaW5lciA9IHJuZyA9PiAhcm5nLmVuZENvbnRhaW5lci5pc0VxdWFsTm9kZShybmcuY29tbW9uQW5jZXN0b3JDb250YWluZXIpO1xuICAgIGNvbnN0IHJhbmdlRW5kc0F0T3JBZnRlckVuZE9mU3RhcnRDb250YWluZXIgPSBybmcgPT4gcmFuZ2VFbmRzQXRFbmRPZlN0YXJ0Q29udGFpbmVyKHJuZykgfHwgcmFuZ2VFbmRzQWZ0ZXJFbmRPZlN0YXJ0Q29udGFpbmVyKHJuZyk7XG4gICAgY29uc3QgcmVxdWlyZXNEZWxldGVSYW5nZU92ZXJyaWRlID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICByZXR1cm4gcmFuZ2VTdGFydHNBdFN0YXJ0T2ZUZXh0Q29udGFpbmVyKHJuZykgJiYgcmFuZ2VTdGFydFBhcmVudElzRm9ybWF0RWxlbWVudChlZGl0b3IsIHJuZykgJiYgcmFuZ2VFbmRzQXRPckFmdGVyRW5kT2ZTdGFydENvbnRhaW5lcihybmcpO1xuICAgIH07XG4gICAgY29uc3QgZGVsZXRlUmFuZ2UkMSA9IGVkaXRvciA9PiB7XG4gICAgICBpZiAocmVxdWlyZXNEZWxldGVSYW5nZU92ZXJyaWRlKGVkaXRvcikpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0Tm9kZXMgPSBnZXRGb3JtYXROb2Rlc0F0U3RhcnQoZWRpdG9yKTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoKCkgPT4ge1xuICAgICAgICAgIGV4ZWNOYXRpdmVEZWxldGVDb21tYW5kKGVkaXRvcik7XG4gICAgICAgICAgdXBkYXRlQ2FyZXRGb3JtYXQoZWRpdG9yLCBmb3JtYXROb2Rlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGJhY2tzcGFjZURlbGV0ZSQzID0gKGVkaXRvciwgZm9yd2FyZCkgPT4gZWRpdG9yLnNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpID8gZGVsZXRlQ2FyZXQkMShlZGl0b3IsIGZvcndhcmQpIDogZGVsZXRlUmFuZ2UkMShlZGl0b3IpO1xuICAgIGNvbnN0IGhhc0FuY2VzdG9ySW5saW5lQ2FyZXQgPSBlbG0gPT4gYW5jZXN0b3IkMShlbG0sIG5vZGUgPT4gaXNDYXJldE5vZGUobm9kZS5kb20pLCBpc0Jsb2NrJDIpO1xuICAgIGNvbnN0IGhhc0FuY2VzdG9ySW5saW5lQ2FyZXRBdFN0YXJ0ID0gZWRpdG9yID0+IGhhc0FuY2VzdG9ySW5saW5lQ2FyZXQoU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCgpKSk7XG4gICAgY29uc3QgcmVxdWlyZXNSZWZyZXNoQ2FyZXRPdmVycmlkZSA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgcmV0dXJuIHJuZy5jb2xsYXBzZWQgJiYgKHJhbmdlU3RhcnRzQXRUZXh0Q29udGFpbmVyKHJuZykgfHwgZWRpdG9yLmRvbS5pc0VtcHR5KHJuZy5zdGFydENvbnRhaW5lcikpICYmICFoYXNBbmNlc3RvcklubGluZUNhcmV0QXRTdGFydChlZGl0b3IpO1xuICAgIH07XG4gICAgY29uc3QgcmVmcmVzaENhcmV0ID0gZWRpdG9yID0+IHtcbiAgICAgIGlmIChyZXF1aXJlc1JlZnJlc2hDYXJldE92ZXJyaWRlKGVkaXRvcikpIHtcbiAgICAgICAgY3JlYXRlQ2FyZXRGb3JtYXRBdFN0YXJ0KGVkaXRvciwgW10pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIGNvbnN0IGRlbGV0ZUVsZW1lbnQgPSAoZWRpdG9yLCBmb3J3YXJkLCBlbGVtZW50KSA9PiB7XG4gICAgICBpZiAoaXNOb25OdWxsYWJsZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZSgoKSA9PiB7XG4gICAgICAgICAgZWRpdG9yLl9zZWxlY3Rpb25PdmVycmlkZXMuaGlkZUZha2VDYXJldCgpO1xuICAgICAgICAgIGRlbGV0ZUVsZW1lbnQkMihlZGl0b3IsIGZvcndhcmQsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsZW1lbnQpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZGVsZXRlQ2FyZXQgPSAoZWRpdG9yLCBmb3J3YXJkKSA9PiB7XG4gICAgICBjb25zdCBpc05lYXJNZWRpYSA9IGZvcndhcmQgPyBpc0JlZm9yZU1lZGlhIDogaXNBZnRlck1lZGlhO1xuICAgICAgY29uc3QgZGlyZWN0aW9uID0gZm9yd2FyZCA/IEhEaXJlY3Rpb24uRm9yd2FyZHMgOiBIRGlyZWN0aW9uLkJhY2t3YXJkcztcbiAgICAgIGNvbnN0IGZyb21Qb3MgPSBnZXROb3JtYWxpemVkUmFuZ2VFbmRQb2ludChkaXJlY3Rpb24sIGVkaXRvci5nZXRCb2R5KCksIGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpO1xuICAgICAgaWYgKGlzTmVhck1lZGlhKGZyb21Qb3MpKSB7XG4gICAgICAgIHJldHVybiBkZWxldGVFbGVtZW50KGVkaXRvciwgZm9yd2FyZCwgZnJvbVBvcy5nZXROb2RlKCFmb3J3YXJkKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShub3JtYWxpemVQb3NpdGlvbihmb3J3YXJkLCBmcm9tUG9zKSkuZmlsdGVyKHBvcyA9PiBpc05lYXJNZWRpYShwb3MpICYmIGlzTW92ZUluc2lkZVNhbWVCbG9jayhmcm9tUG9zLCBwb3MpKS5iaW5kKHBvcyA9PiBkZWxldGVFbGVtZW50KGVkaXRvciwgZm9yd2FyZCwgcG9zLmdldE5vZGUoIWZvcndhcmQpKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBkZWxldGVSYW5nZSA9IChlZGl0b3IsIGZvcndhcmQpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkTm9kZSA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Tm9kZSgpO1xuICAgICAgcmV0dXJuIGlzTWVkaWEkMihzZWxlY3RlZE5vZGUpID8gZGVsZXRlRWxlbWVudChlZGl0b3IsIGZvcndhcmQsIHNlbGVjdGVkTm9kZSkgOiBPcHRpb25hbC5ub25lKCk7XG4gICAgfTtcbiAgICBjb25zdCBiYWNrc3BhY2VEZWxldGUkMiA9IChlZGl0b3IsIGZvcndhcmQpID0+IGVkaXRvci5zZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSA/IGRlbGV0ZUNhcmV0KGVkaXRvciwgZm9yd2FyZCkgOiBkZWxldGVSYW5nZShlZGl0b3IsIGZvcndhcmQpO1xuXG4gICAgY29uc3QgaXNFZGl0YWJsZSA9IHRhcmdldCA9PiBjbG9zZXN0JDQodGFyZ2V0LCBlbG0gPT4gaXNDb250ZW50RWRpdGFibGVUcnVlJDMoZWxtLmRvbSkgfHwgaXNDb250ZW50RWRpdGFibGVGYWxzZSRiKGVsbS5kb20pKS5leGlzdHMoZWxtID0+IGlzQ29udGVudEVkaXRhYmxlVHJ1ZSQzKGVsbS5kb20pKTtcbiAgICBjb25zdCBwYXJzZUluZGVudFZhbHVlID0gdmFsdWUgPT4gdG9JbnQodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHZvaWQgMCA/IHZhbHVlIDogJycpLmdldE9yKDApO1xuICAgIGNvbnN0IGdldEluZGVudFN0eWxlTmFtZSA9ICh1c2VNYXJnaW4sIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGluZGVudFN0eWxlTmFtZSA9IHVzZU1hcmdpbiB8fCBpc1RhYmxlJDEoZWxlbWVudCkgPyAnbWFyZ2luJyA6ICdwYWRkaW5nJztcbiAgICAgIGNvbnN0IHN1ZmZpeCA9IGdldCQ3KGVsZW1lbnQsICdkaXJlY3Rpb24nKSA9PT0gJ3J0bCcgPyAnLXJpZ2h0JyA6ICctbGVmdCc7XG4gICAgICByZXR1cm4gaW5kZW50U3R5bGVOYW1lICsgc3VmZml4O1xuICAgIH07XG4gICAgY29uc3QgaW5kZW50RWxlbWVudCA9IChkb20sIGNvbW1hbmQsIHVzZU1hcmdpbiwgdmFsdWUsIHVuaXQsIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGluZGVudFN0eWxlTmFtZSA9IGdldEluZGVudFN0eWxlTmFtZSh1c2VNYXJnaW4sIFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsZW1lbnQpKTtcbiAgICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gcGFyc2VJbmRlbnRWYWx1ZShkb20uZ2V0U3R5bGUoZWxlbWVudCwgaW5kZW50U3R5bGVOYW1lKSk7XG4gICAgICBpZiAoY29tbWFuZCA9PT0gJ291dGRlbnQnKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlVmFsdWUgPSBNYXRoLm1heCgwLCBwYXJzZWRWYWx1ZSAtIHZhbHVlKTtcbiAgICAgICAgZG9tLnNldFN0eWxlKGVsZW1lbnQsIGluZGVudFN0eWxlTmFtZSwgc3R5bGVWYWx1ZSA/IHN0eWxlVmFsdWUgKyB1bml0IDogJycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3R5bGVWYWx1ZSA9IHBhcnNlZFZhbHVlICsgdmFsdWUgKyB1bml0O1xuICAgICAgICBkb20uc2V0U3R5bGUoZWxlbWVudCwgaW5kZW50U3R5bGVOYW1lLCBzdHlsZVZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHZhbGlkYXRlQmxvY2tzID0gKGVkaXRvciwgYmxvY2tzKSA9PiBmb3JhbGwoYmxvY2tzLCBibG9jayA9PiB7XG4gICAgICBjb25zdCBpbmRlbnRTdHlsZU5hbWUgPSBnZXRJbmRlbnRTdHlsZU5hbWUoc2hvdWxkSW5kZW50VXNlTWFyZ2luKGVkaXRvciksIGJsb2NrKTtcbiAgICAgIGNvbnN0IGludGVudFZhbHVlID0gZ2V0UmF3KGJsb2NrLCBpbmRlbnRTdHlsZU5hbWUpLm1hcChwYXJzZUluZGVudFZhbHVlKS5nZXRPcigwKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRFZGl0YWJsZSA9IGVkaXRvci5kb20uZ2V0Q29udGVudEVkaXRhYmxlKGJsb2NrLmRvbSk7XG4gICAgICByZXR1cm4gY29udGVudEVkaXRhYmxlICE9PSAnZmFsc2UnICYmIGludGVudFZhbHVlID4gMDtcbiAgICB9KTtcbiAgICBjb25zdCBjYW5PdXRkZW50ID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGJsb2NrcyA9IGdldEJsb2Nrc1RvSW5kZW50KGVkaXRvcik7XG4gICAgICByZXR1cm4gIWVkaXRvci5tb2RlLmlzUmVhZE9ubHkoKSAmJiAoYmxvY2tzLmxlbmd0aCA+IDEgfHwgdmFsaWRhdGVCbG9ja3MoZWRpdG9yLCBibG9ja3MpKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzTGlzdENvbXBvbmVudCA9IGVsID0+IGlzTGlzdChlbCkgfHwgaXNMaXN0SXRlbSQxKGVsKTtcbiAgICBjb25zdCBwYXJlbnRJc0xpc3RDb21wb25lbnQgPSBlbCA9PiBwYXJlbnQoZWwpLmV4aXN0cyhpc0xpc3RDb21wb25lbnQpO1xuICAgIGNvbnN0IGdldEJsb2Nrc1RvSW5kZW50ID0gZWRpdG9yID0+IGZpbHRlciQ1KGZyb21Eb20kMShlZGl0b3Iuc2VsZWN0aW9uLmdldFNlbGVjdGVkQmxvY2tzKCkpLCBlbCA9PiAhaXNMaXN0Q29tcG9uZW50KGVsKSAmJiAhcGFyZW50SXNMaXN0Q29tcG9uZW50KGVsKSAmJiBpc0VkaXRhYmxlKGVsKSk7XG4gICAgY29uc3QgaGFuZGxlID0gKGVkaXRvciwgY29tbWFuZCkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGNvbnN0IHtkb219ID0gZWRpdG9yO1xuICAgICAgY29uc3QgaW5kZW50YXRpb24gPSBnZXRJbmRlbnRhdGlvbihlZGl0b3IpO1xuICAgICAgY29uc3QgaW5kZW50VW5pdCA9IChfYiA9IChfYSA9IC9bYS16JV0rJC9pLmV4ZWMoaW5kZW50YXRpb24pKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbMF0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICdweCc7XG4gICAgICBjb25zdCBpbmRlbnRWYWx1ZSA9IHBhcnNlSW5kZW50VmFsdWUoaW5kZW50YXRpb24pO1xuICAgICAgY29uc3QgdXNlTWFyZ2luID0gc2hvdWxkSW5kZW50VXNlTWFyZ2luKGVkaXRvcik7XG4gICAgICBlYWNoJGUoZ2V0QmxvY2tzVG9JbmRlbnQoZWRpdG9yKSwgYmxvY2sgPT4ge1xuICAgICAgICBpbmRlbnRFbGVtZW50KGRvbSwgY29tbWFuZCwgdXNlTWFyZ2luLCBpbmRlbnRWYWx1ZSwgaW5kZW50VW5pdCwgYmxvY2suZG9tKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW5kZW50ID0gZWRpdG9yID0+IGhhbmRsZShlZGl0b3IsICdpbmRlbnQnKTtcbiAgICBjb25zdCBvdXRkZW50ID0gZWRpdG9yID0+IGhhbmRsZShlZGl0b3IsICdvdXRkZW50Jyk7XG5cbiAgICBjb25zdCBiYWNrc3BhY2VEZWxldGUkMSA9IGVkaXRvciA9PiB7XG4gICAgICBpZiAoZWRpdG9yLnNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpICYmIGNhbk91dGRlbnQoZWRpdG9yKSkge1xuICAgICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgICBjb25zdCBwb3MgPSBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KHJuZyk7XG4gICAgICAgIGNvbnN0IGJsb2NrID0gZG9tLmdldFBhcmVudChybmcuc3RhcnRDb250YWluZXIsIGRvbS5pc0Jsb2NrKTtcbiAgICAgICAgaWYgKGJsb2NrICE9PSBudWxsICYmIGlzQXRTdGFydE9mQmxvY2soU3VnYXJFbGVtZW50LmZyb21Eb20oYmxvY2spLCBwb3MpKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoKCkgPT4gb3V0ZGVudChlZGl0b3IpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmluZEFjdGlvbiA9IChlZGl0b3IsIGNhcmV0LCBmb3J3YXJkKSA9PiBmaW5kTWFwKFtcbiAgICAgIGJhY2tzcGFjZURlbGV0ZSQxLFxuICAgICAgYmFja3NwYWNlRGVsZXRlJDYsXG4gICAgICBiYWNrc3BhY2VEZWxldGUkNyxcbiAgICAgIChlZGl0b3IsIGZvcndhcmQpID0+IGJhY2tzcGFjZURlbGV0ZSQ0KGVkaXRvciwgY2FyZXQsIGZvcndhcmQpLFxuICAgICAgYmFja3NwYWNlRGVsZXRlJDksXG4gICAgICBiYWNrc3BhY2VEZWxldGUkYSxcbiAgICAgIGJhY2tzcGFjZURlbGV0ZSQ1LFxuICAgICAgYmFja3NwYWNlRGVsZXRlJDIsXG4gICAgICBiYWNrc3BhY2VEZWxldGUkOCxcbiAgICAgIGJhY2tzcGFjZURlbGV0ZSQzXG4gICAgXSwgaXRlbSA9PiBpdGVtKGVkaXRvciwgZm9yd2FyZCkpLmZpbHRlcihfID0+IGVkaXRvci5zZWxlY3Rpb24uaXNFZGl0YWJsZSgpKTtcbiAgICBjb25zdCBkZWxldGVDb21tYW5kID0gKGVkaXRvciwgY2FyZXQpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRBY3Rpb24oZWRpdG9yLCBjYXJldCwgZmFsc2UpO1xuICAgICAgcmVzdWx0LmZvbGQoKCkgPT4ge1xuICAgICAgICBleGVjTmF0aXZlRGVsZXRlQ29tbWFuZChlZGl0b3IpO1xuICAgICAgICBwYWRkRW1wdHlCb2R5KGVkaXRvcik7XG4gICAgICB9LCBjYWxsKTtcbiAgICB9O1xuICAgIGNvbnN0IGZvcndhcmREZWxldGVDb21tYW5kID0gKGVkaXRvciwgY2FyZXQpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRBY3Rpb24oZWRpdG9yLCBjYXJldCwgdHJ1ZSk7XG4gICAgICByZXN1bHQuZm9sZCgoKSA9PiBleGVjTmF0aXZlRm9yd2FyZERlbGV0ZUNvbW1hbmQoZWRpdG9yKSwgY2FsbCk7XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cCRwID0gKGVkaXRvciwgY2FyZXQpID0+IHtcbiAgICAgIGVkaXRvci5hZGRDb21tYW5kKCdkZWxldGUnLCAoKSA9PiB7XG4gICAgICAgIGRlbGV0ZUNvbW1hbmQoZWRpdG9yLCBjYXJldCk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5hZGRDb21tYW5kKCdmb3J3YXJkRGVsZXRlJywgKCkgPT4ge1xuICAgICAgICBmb3J3YXJkRGVsZXRlQ29tbWFuZChlZGl0b3IsIGNhcmV0KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBTSUdOSUZJQ0FOVF9NT1ZFID0gNTtcbiAgICBjb25zdCBMT05HUFJFU1NfREVMQVkgPSA0MDA7XG4gICAgY29uc3QgZ2V0VG91Y2ggPSBldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnQudG91Y2hlcyA9PT0gdW5kZWZpbmVkIHx8IGV2ZW50LnRvdWNoZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShldmVudC50b3VjaGVzWzBdKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzRmFyRW5vdWdoID0gKHRvdWNoLCBkYXRhKSA9PiB7XG4gICAgICBjb25zdCBkaXN0WCA9IE1hdGguYWJzKHRvdWNoLmNsaWVudFggLSBkYXRhLngpO1xuICAgICAgY29uc3QgZGlzdFkgPSBNYXRoLmFicyh0b3VjaC5jbGllbnRZIC0gZGF0YS55KTtcbiAgICAgIHJldHVybiBkaXN0WCA+IFNJR05JRklDQU5UX01PVkUgfHwgZGlzdFkgPiBTSUdOSUZJQ0FOVF9NT1ZFO1xuICAgIH07XG4gICAgY29uc3Qgc2V0dXAkbyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBzdGFydERhdGEgPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBsb25ncHJlc3NGaXJlZCA9IENlbGwoZmFsc2UpO1xuICAgICAgY29uc3QgZGVib3VuY2VMb25ncHJlc3MgPSBsYXN0JDEoZSA9PiB7XG4gICAgICAgIGVkaXRvci5kaXNwYXRjaCgnbG9uZ3ByZXNzJywge1xuICAgICAgICAgIC4uLmUsXG4gICAgICAgICAgdHlwZTogJ2xvbmdwcmVzcydcbiAgICAgICAgfSk7XG4gICAgICAgIGxvbmdwcmVzc0ZpcmVkLnNldCh0cnVlKTtcbiAgICAgIH0sIExPTkdQUkVTU19ERUxBWSk7XG4gICAgICBlZGl0b3Iub24oJ3RvdWNoc3RhcnQnLCBlID0+IHtcbiAgICAgICAgZ2V0VG91Y2goZSkuZWFjaCh0b3VjaCA9PiB7XG4gICAgICAgICAgZGVib3VuY2VMb25ncHJlc3MuY2FuY2VsKCk7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIHg6IHRvdWNoLmNsaWVudFgsXG4gICAgICAgICAgICB5OiB0b3VjaC5jbGllbnRZLFxuICAgICAgICAgICAgdGFyZ2V0OiBlLnRhcmdldFxuICAgICAgICAgIH07XG4gICAgICAgICAgZGVib3VuY2VMb25ncHJlc3MudGhyb3R0bGUoZSk7XG4gICAgICAgICAgbG9uZ3ByZXNzRmlyZWQuc2V0KGZhbHNlKTtcbiAgICAgICAgICBzdGFydERhdGEuc2V0KGRhdGEpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHRydWUpO1xuICAgICAgZWRpdG9yLm9uKCd0b3VjaG1vdmUnLCBlID0+IHtcbiAgICAgICAgZGVib3VuY2VMb25ncHJlc3MuY2FuY2VsKCk7XG4gICAgICAgIGdldFRvdWNoKGUpLmVhY2godG91Y2ggPT4ge1xuICAgICAgICAgIHN0YXJ0RGF0YS5vbihkYXRhID0+IHtcbiAgICAgICAgICAgIGlmIChpc0ZhckVub3VnaCh0b3VjaCwgZGF0YSkpIHtcbiAgICAgICAgICAgICAgc3RhcnREYXRhLmNsZWFyKCk7XG4gICAgICAgICAgICAgIGxvbmdwcmVzc0ZpcmVkLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgIGVkaXRvci5kaXNwYXRjaCgnbG9uZ3ByZXNzY2FuY2VsJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgdHJ1ZSk7XG4gICAgICBlZGl0b3Iub24oJ3RvdWNoZW5kIHRvdWNoY2FuY2VsJywgZSA9PiB7XG4gICAgICAgIGRlYm91bmNlTG9uZ3ByZXNzLmNhbmNlbCgpO1xuICAgICAgICBpZiAoZS50eXBlID09PSAndG91Y2hjYW5jZWwnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN0YXJ0RGF0YS5nZXQoKS5maWx0ZXIoZGF0YSA9PiBkYXRhLnRhcmdldC5pc0VxdWFsTm9kZShlLnRhcmdldCkpLmVhY2goKCkgPT4ge1xuICAgICAgICAgIGlmIChsb25ncHJlc3NGaXJlZC5nZXQoKSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ3RhcCcsIHtcbiAgICAgICAgICAgICAgLi4uZSxcbiAgICAgICAgICAgICAgdHlwZTogJ3RhcCdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LCB0cnVlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNCbG9ja0VsZW1lbnQgPSAoYmxvY2tFbGVtZW50cywgbm9kZSkgPT4gaGFzJDIoYmxvY2tFbGVtZW50cywgbm9kZS5ub2RlTmFtZSk7XG4gICAgY29uc3QgaXNWYWxpZFRhcmdldCA9IChzY2hlbWEsIG5vZGUpID0+IHtcbiAgICAgIGlmIChpc1RleHQkYShub2RlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoaXNFbGVtZW50JDYobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuICFpc0Jsb2NrRWxlbWVudChzY2hlbWEuZ2V0QmxvY2tFbGVtZW50cygpLCBub2RlKSAmJiAhaXNCb29rbWFya05vZGUkMShub2RlKSAmJiAhaXNUcmFuc3BhcmVudEJsb2NrKHNjaGVtYSwgbm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoYXNCbG9ja1BhcmVudCA9IChibG9ja0VsZW1lbnRzLCByb290LCBub2RlKSA9PiB7XG4gICAgICByZXR1cm4gZXhpc3RzKHBhcmVudHMoU3VnYXJFbGVtZW50LmZyb21Eb20obm9kZSksIFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJvb3QpKSwgZWxtID0+IHtcbiAgICAgICAgcmV0dXJuIGlzQmxvY2tFbGVtZW50KGJsb2NrRWxlbWVudHMsIGVsbS5kb20pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzaG91bGRSZW1vdmVUZXh0Tm9kZSA9IChibG9ja0VsZW1lbnRzLCBub2RlKSA9PiB7XG4gICAgICBpZiAoaXNUZXh0JGEobm9kZSkpIHtcbiAgICAgICAgaWYgKG5vZGUuZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICgvXlxccyskLy50ZXN0KG5vZGUuZGF0YSkgJiYgKCFub2RlLm5leHRTaWJsaW5nIHx8IGlzQmxvY2tFbGVtZW50KGJsb2NrRWxlbWVudHMsIG5vZGUubmV4dFNpYmxpbmcpKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVSb290QmxvY2sgPSBlZGl0b3IgPT4gZWRpdG9yLmRvbS5jcmVhdGUoZ2V0Rm9yY2VkUm9vdEJsb2NrKGVkaXRvciksIGdldEZvcmNlZFJvb3RCbG9ja0F0dHJzKGVkaXRvcikpO1xuICAgIGNvbnN0IGFkZFJvb3RCbG9ja3MgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbSwgc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IGVkaXRvci5zY2hlbWE7XG4gICAgICBjb25zdCBibG9ja0VsZW1lbnRzID0gc2NoZW1hLmdldEJsb2NrRWxlbWVudHMoKTtcbiAgICAgIGNvbnN0IHN0YXJ0Tm9kZSA9IHNlbGVjdGlvbi5nZXRTdGFydCgpO1xuICAgICAgY29uc3Qgcm9vdE5vZGUgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgbGV0IHJvb3RCbG9ja05vZGU7XG4gICAgICBsZXQgdGVtcE5vZGU7XG4gICAgICBsZXQgd3JhcHBlZCA9IGZhbHNlO1xuICAgICAgY29uc3QgZm9yY2VkUm9vdEJsb2NrID0gZ2V0Rm9yY2VkUm9vdEJsb2NrKGVkaXRvcik7XG4gICAgICBpZiAoIXN0YXJ0Tm9kZSB8fCAhaXNFbGVtZW50JDYoc3RhcnROb2RlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCByb290Tm9kZU5hbWUgPSByb290Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKCFzY2hlbWEuaXNWYWxpZENoaWxkKHJvb3ROb2RlTmFtZSwgZm9yY2VkUm9vdEJsb2NrLnRvTG93ZXJDYXNlKCkpIHx8IGhhc0Jsb2NrUGFyZW50KGJsb2NrRWxlbWVudHMsIHJvb3ROb2RlLCBzdGFydE5vZGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJuZyA9IHNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIGNvbnN0IHtzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQsIGVuZENvbnRhaW5lciwgZW5kT2Zmc2V0fSA9IHJuZztcbiAgICAgIGNvbnN0IHJlc3RvcmVTZWxlY3Rpb24gPSBoYXNGb2N1cyhlZGl0b3IpO1xuICAgICAgbGV0IG5vZGUgPSByb290Tm9kZS5maXJzdENoaWxkO1xuICAgICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgaWYgKGlzRWxlbWVudCQ2KG5vZGUpKSB7XG4gICAgICAgICAgdXBkYXRlRWxlbWVudChzY2hlbWEsIG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1ZhbGlkVGFyZ2V0KHNjaGVtYSwgbm9kZSkpIHtcbiAgICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlVGV4dE5vZGUoYmxvY2tFbGVtZW50cywgbm9kZSkpIHtcbiAgICAgICAgICAgIHRlbXBOb2RlID0gbm9kZTtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgZG9tLnJlbW92ZSh0ZW1wTm9kZSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFyb290QmxvY2tOb2RlKSB7XG4gICAgICAgICAgICByb290QmxvY2tOb2RlID0gY3JlYXRlUm9vdEJsb2NrKGVkaXRvcik7XG4gICAgICAgICAgICByb290Tm9kZS5pbnNlcnRCZWZvcmUocm9vdEJsb2NrTm9kZSwgbm9kZSk7XG4gICAgICAgICAgICB3cmFwcGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGVtcE5vZGUgPSBub2RlO1xuICAgICAgICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgICAgIHJvb3RCbG9ja05vZGUuYXBwZW5kQ2hpbGQodGVtcE5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvb3RCbG9ja05vZGUgPSBudWxsO1xuICAgICAgICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAod3JhcHBlZCAmJiByZXN0b3JlU2VsZWN0aW9uKSB7XG4gICAgICAgIHJuZy5zZXRTdGFydChzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQpO1xuICAgICAgICBybmcuc2V0RW5kKGVuZENvbnRhaW5lciwgZW5kT2Zmc2V0KTtcbiAgICAgICAgc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGluc2VydEVtcHR5TGluZSA9IChlZGl0b3IsIHJvb3QsIGluc2VydEJsb2NrKSA9PiB7XG4gICAgICBjb25zdCBibG9jayA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGNyZWF0ZVJvb3RCbG9jayhlZGl0b3IpKTtcbiAgICAgIGNvbnN0IGJyID0gY3JlYXRlUGFkZGluZ0JyKCk7XG4gICAgICBhcHBlbmQkMShibG9jaywgYnIpO1xuICAgICAgaW5zZXJ0QmxvY2socm9vdCwgYmxvY2spO1xuICAgICAgY29uc3Qgcm5nID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHJuZy5zZXRTdGFydEJlZm9yZShici5kb20pO1xuICAgICAgcm5nLnNldEVuZEJlZm9yZShici5kb20pO1xuICAgICAgcmV0dXJuIHJuZztcbiAgICB9O1xuICAgIGNvbnN0IHNldHVwJG4gPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLm9uKCdOb2RlQ2hhbmdlJywgY3VycnkoYWRkUm9vdEJsb2NrcywgZWRpdG9yKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhc0NsYXNzID0gY2hlY2tDbGFzc05hbWUgPT4gbm9kZSA9PiAoJyAnICsgbm9kZS5hdHRyKCdjbGFzcycpICsgJyAnKS5pbmRleE9mKGNoZWNrQ2xhc3NOYW1lKSAhPT0gLTE7XG4gICAgY29uc3QgcmVwbGFjZU1hdGNoV2l0aFNwYW4gPSAoZWRpdG9yLCBjb250ZW50LCBjbHMpID0+IHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IGFyZ3VtZW50cywgaW5kZXggPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMl07XG4gICAgICAgIGNvbnN0IHByZXZDaGFyID0gaW5kZXggPiAwID8gY29udGVudC5jaGFyQXQoaW5kZXggLSAxKSA6ICcnO1xuICAgICAgICBpZiAocHJldkNoYXIgPT09ICdcIicpIHtcbiAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXZDaGFyID09PSAnPicpIHtcbiAgICAgICAgICBjb25zdCBmaW5kU3RhcnRUYWdJbmRleCA9IGNvbnRlbnQubGFzdEluZGV4T2YoJzwnLCBpbmRleCk7XG4gICAgICAgICAgaWYgKGZpbmRTdGFydFRhZ0luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgY29uc3QgdGFnSHRtbCA9IGNvbnRlbnQuc3Vic3RyaW5nKGZpbmRTdGFydFRhZ0luZGV4LCBpbmRleCk7XG4gICAgICAgICAgICBpZiAodGFnSHRtbC5pbmRleE9mKCdjb250ZW50ZWRpdGFibGU9XCJmYWxzZVwiJykgIT09IC0xKSB7XG4gICAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIicgKyBjbHMgKyAnXCIgZGF0YS1tY2UtY29udGVudD1cIicgKyBlZGl0b3IuZG9tLmVuY29kZShhcmdzWzBdKSArICdcIj4nICsgZWRpdG9yLmRvbS5lbmNvZGUodHlwZW9mIGFyZ3NbMV0gPT09ICdzdHJpbmcnID8gYXJnc1sxXSA6IGFyZ3NbMF0pICsgJzwvc3Bhbj4nO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbnZlcnRSZWdFeHBzVG9Ob25FZGl0YWJsZSA9IChlZGl0b3IsIG5vbkVkaXRhYmxlUmVnRXhwcywgZSkgPT4ge1xuICAgICAgbGV0IGkgPSBub25FZGl0YWJsZVJlZ0V4cHMubGVuZ3RoLCBjb250ZW50ID0gZS5jb250ZW50O1xuICAgICAgaWYgKGUuZm9ybWF0ID09PSAncmF3Jykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2Uobm9uRWRpdGFibGVSZWdFeHBzW2ldLCByZXBsYWNlTWF0Y2hXaXRoU3BhbihlZGl0b3IsIGNvbnRlbnQsIGdldE5vbkVkaXRhYmxlQ2xhc3MoZWRpdG9yKSkpO1xuICAgICAgfVxuICAgICAgZS5jb250ZW50ID0gY29udGVudDtcbiAgICB9O1xuICAgIGNvbnN0IHNldHVwJG0gPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgY29udGVudEVkaXRhYmxlQXR0ck5hbWUgPSAnY29udGVudGVkaXRhYmxlJztcbiAgICAgIGNvbnN0IGVkaXRDbGFzcyA9ICcgJyArIFRvb2xzLnRyaW0oZ2V0RWRpdGFibGVDbGFzcyhlZGl0b3IpKSArICcgJztcbiAgICAgIGNvbnN0IG5vbkVkaXRDbGFzcyA9ICcgJyArIFRvb2xzLnRyaW0oZ2V0Tm9uRWRpdGFibGVDbGFzcyhlZGl0b3IpKSArICcgJztcbiAgICAgIGNvbnN0IGhhc0VkaXRDbGFzcyA9IGhhc0NsYXNzKGVkaXRDbGFzcyk7XG4gICAgICBjb25zdCBoYXNOb25FZGl0Q2xhc3MgPSBoYXNDbGFzcyhub25FZGl0Q2xhc3MpO1xuICAgICAgY29uc3Qgbm9uRWRpdGFibGVSZWdFeHBzID0gZ2V0Tm9uRWRpdGFibGVSZWdFeHBzKGVkaXRvcik7XG4gICAgICBpZiAobm9uRWRpdGFibGVSZWdFeHBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZWRpdG9yLm9uKCdCZWZvcmVTZXRDb250ZW50JywgZSA9PiB7XG4gICAgICAgICAgY29udmVydFJlZ0V4cHNUb05vbkVkaXRhYmxlKGVkaXRvciwgbm9uRWRpdGFibGVSZWdFeHBzLCBlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlZGl0b3IucGFyc2VyLmFkZEF0dHJpYnV0ZUZpbHRlcignY2xhc3MnLCBub2RlcyA9PiB7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICAgIGlmIChoYXNFZGl0Q2xhc3Mobm9kZSkpIHtcbiAgICAgICAgICAgIG5vZGUuYXR0cihjb250ZW50RWRpdGFibGVBdHRyTmFtZSwgJ3RydWUnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc05vbkVkaXRDbGFzcyhub2RlKSkge1xuICAgICAgICAgICAgbm9kZS5hdHRyKGNvbnRlbnRFZGl0YWJsZUF0dHJOYW1lLCAnZmFsc2UnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLnNlcmlhbGl6ZXIuYWRkQXR0cmlidXRlRmlsdGVyKGNvbnRlbnRFZGl0YWJsZUF0dHJOYW1lLCBub2RlcyA9PiB7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICAgIGlmICghaGFzRWRpdENsYXNzKG5vZGUpICYmICFoYXNOb25FZGl0Q2xhc3Mobm9kZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobm9uRWRpdGFibGVSZWdFeHBzLmxlbmd0aCA+IDAgJiYgbm9kZS5hdHRyKCdkYXRhLW1jZS1jb250ZW50JykpIHtcbiAgICAgICAgICAgIG5vZGUubmFtZSA9ICcjdGV4dCc7XG4gICAgICAgICAgICBub2RlLnR5cGUgPSAzO1xuICAgICAgICAgICAgbm9kZS5yYXcgPSB0cnVlO1xuICAgICAgICAgICAgbm9kZS52YWx1ZSA9IG5vZGUuYXR0cignZGF0YS1tY2UtY29udGVudCcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBub2RlLmF0dHIoY29udGVudEVkaXRhYmxlQXR0ck5hbWUsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZpbmRCbG9ja0NhcmV0Q29udGFpbmVyID0gZWRpdG9yID0+IGRlc2NlbmRhbnQoU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSksICcqW2RhdGEtbWNlLWNhcmV0XScpLm1hcChlbG0gPT4gZWxtLmRvbSkuZ2V0T3JOdWxsKCk7XG4gICAgY29uc3Qgc2hvd0Jsb2NrQ2FyZXRDb250YWluZXIgPSAoZWRpdG9yLCBibG9ja0NhcmV0Q29udGFpbmVyKSA9PiB7XG4gICAgICBpZiAoYmxvY2tDYXJldENvbnRhaW5lci5oYXNBdHRyaWJ1dGUoJ2RhdGEtbWNlLWNhcmV0JykpIHtcbiAgICAgICAgc2hvd0NhcmV0Q29udGFpbmVyQmxvY2soYmxvY2tDYXJldENvbnRhaW5lcik7XG4gICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpO1xuICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNjcm9sbEludG9WaWV3KGJsb2NrQ2FyZXRDb250YWluZXIpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaGFuZGxlQmxvY2tDb250YWluZXIgPSAoZWRpdG9yLCBlKSA9PiB7XG4gICAgICBjb25zdCBibG9ja0NhcmV0Q29udGFpbmVyID0gZmluZEJsb2NrQ2FyZXRDb250YWluZXIoZWRpdG9yKTtcbiAgICAgIGlmICghYmxvY2tDYXJldENvbnRhaW5lcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZS50eXBlID09PSAnY29tcG9zaXRpb25zdGFydCcpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBzaG93QmxvY2tDYXJldENvbnRhaW5lcihlZGl0b3IsIGJsb2NrQ2FyZXRDb250YWluZXIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoaGFzQ29udGVudChibG9ja0NhcmV0Q29udGFpbmVyKSkge1xuICAgICAgICBzaG93QmxvY2tDYXJldENvbnRhaW5lcihlZGl0b3IsIGJsb2NrQ2FyZXRDb250YWluZXIpO1xuICAgICAgICBlZGl0b3IudW5kb01hbmFnZXIuYWRkKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cCRsID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5vbigna2V5dXAgY29tcG9zaXRpb25zdGFydCcsIGN1cnJ5KGhhbmRsZUJsb2NrQ29udGFpbmVyLCBlZGl0b3IpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNDb250ZW50RWRpdGFibGVGYWxzZSQzID0gaXNDb250ZW50RWRpdGFibGVGYWxzZSRiO1xuICAgIGNvbnN0IG1vdmVUb0NlRmFsc2VIb3Jpem9udGFsbHkgPSAoZGlyZWN0aW9uLCBlZGl0b3IsIHJhbmdlKSA9PiBtb3ZlSG9yaXpvbnRhbGx5KGVkaXRvciwgZGlyZWN0aW9uLCByYW5nZSwgaXNCZWZvcmVDb250ZW50RWRpdGFibGVGYWxzZSwgaXNBZnRlckNvbnRlbnRFZGl0YWJsZUZhbHNlLCBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJDMpO1xuICAgIGNvbnN0IG1vdmVUb0NlRmFsc2VWZXJ0aWNhbGx5ID0gKGRpcmVjdGlvbiwgZWRpdG9yLCByYW5nZSkgPT4ge1xuICAgICAgY29uc3QgaXNCZWZvcmUgPSBjYXJldFBvc2l0aW9uID0+IGlzQmVmb3JlQ29udGVudEVkaXRhYmxlRmFsc2UoY2FyZXRQb3NpdGlvbikgfHwgaXNCZWZvcmVUYWJsZShjYXJldFBvc2l0aW9uKTtcbiAgICAgIGNvbnN0IGlzQWZ0ZXIgPSBjYXJldFBvc2l0aW9uID0+IGlzQWZ0ZXJDb250ZW50RWRpdGFibGVGYWxzZShjYXJldFBvc2l0aW9uKSB8fCBpc0FmdGVyVGFibGUoY2FyZXRQb3NpdGlvbik7XG4gICAgICByZXR1cm4gbW92ZVZlcnRpY2FsbHkoZWRpdG9yLCBkaXJlY3Rpb24sIHJhbmdlLCBpc0JlZm9yZSwgaXNBZnRlciwgaXNDb250ZW50RWRpdGFibGVGYWxzZSQzKTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZVRleHRCbG9jayA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCB0ZXh0QmxvY2sgPSBlZGl0b3IuZG9tLmNyZWF0ZShnZXRGb3JjZWRSb290QmxvY2soZWRpdG9yKSk7XG4gICAgICB0ZXh0QmxvY2suaW5uZXJIVE1MID0gJzxiciBkYXRhLW1jZS1ib2d1cz1cIjFcIj4nO1xuICAgICAgcmV0dXJuIHRleHRCbG9jaztcbiAgICB9O1xuICAgIGNvbnN0IGV4aXRQcmVCbG9jayA9IChlZGl0b3IsIGRpcmVjdGlvbiwgcmFuZ2UpID0+IHtcbiAgICAgIGNvbnN0IGNhcmV0V2Fsa2VyID0gQ2FyZXRXYWxrZXIoZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBjb25zdCBnZXRWaXN1YWxDYXJldFBvc2l0aW9uJDEgPSBjdXJyeShnZXRWaXN1YWxDYXJldFBvc2l0aW9uLCBkaXJlY3Rpb24gPT09IDEgPyBjYXJldFdhbGtlci5uZXh0IDogY2FyZXRXYWxrZXIucHJldik7XG4gICAgICBpZiAocmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgICAgIGNvbnN0IHByZSA9IGVkaXRvci5kb20uZ2V0UGFyZW50KHJhbmdlLnN0YXJ0Q29udGFpbmVyLCAnUFJFJyk7XG4gICAgICAgIGlmICghcHJlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhcmV0UG9zID0gZ2V0VmlzdWFsQ2FyZXRQb3NpdGlvbiQxKENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQocmFuZ2UpKTtcbiAgICAgICAgaWYgKCFjYXJldFBvcykge1xuICAgICAgICAgIGNvbnN0IG5ld0Jsb2NrID0gU3VnYXJFbGVtZW50LmZyb21Eb20oY3JlYXRlVGV4dEJsb2NrKGVkaXRvcikpO1xuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IDEpIHtcbiAgICAgICAgICAgIGFmdGVyJDQoU3VnYXJFbGVtZW50LmZyb21Eb20ocHJlKSwgbmV3QmxvY2spO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiZWZvcmUkMyhTdWdhckVsZW1lbnQuZnJvbURvbShwcmUpLCBuZXdCbG9jayk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0KG5ld0Jsb2NrLmRvbSwgdHJ1ZSk7XG4gICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5jb2xsYXBzZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRIb3Jpem9udGFsUmFuZ2UgPSAoZWRpdG9yLCBmb3J3YXJkKSA9PiB7XG4gICAgICBjb25zdCBkaXJlY3Rpb24gPSBmb3J3YXJkID8gSERpcmVjdGlvbi5Gb3J3YXJkcyA6IEhEaXJlY3Rpb24uQmFja3dhcmRzO1xuICAgICAgY29uc3QgcmFuZ2UgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgcmV0dXJuIG1vdmVUb0NlRmFsc2VIb3Jpem9udGFsbHkoZGlyZWN0aW9uLCBlZGl0b3IsIHJhbmdlKS5vclRodW5rKCgpID0+IHtcbiAgICAgICAgZXhpdFByZUJsb2NrKGVkaXRvciwgZGlyZWN0aW9uLCByYW5nZSk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFZlcnRpY2FsUmFuZ2UgPSAoZWRpdG9yLCBkb3duKSA9PiB7XG4gICAgICBjb25zdCBkaXJlY3Rpb24gPSBkb3duID8gMSA6IC0xO1xuICAgICAgY29uc3QgcmFuZ2UgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgcmV0dXJuIG1vdmVUb0NlRmFsc2VWZXJ0aWNhbGx5KGRpcmVjdGlvbiwgZWRpdG9yLCByYW5nZSkub3JUaHVuaygoKSA9PiB7XG4gICAgICAgIGV4aXRQcmVCbG9jayhlZGl0b3IsIGRpcmVjdGlvbiwgcmFuZ2UpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBmbGlwRGlyZWN0aW9uID0gKHNlbGVjdGlvbiwgZm9yd2FyZCkgPT4ge1xuICAgICAgY29uc3QgZWxtID0gZm9yd2FyZCA/IHNlbGVjdGlvbi5nZXRFbmQodHJ1ZSkgOiBzZWxlY3Rpb24uZ2V0U3RhcnQodHJ1ZSk7XG4gICAgICByZXR1cm4gaXNSdGwoZWxtKSA/ICFmb3J3YXJkIDogZm9yd2FyZDtcbiAgICB9O1xuICAgIGNvbnN0IG1vdmVIJDIgPSAoZWRpdG9yLCBmb3J3YXJkKSA9PiBnZXRIb3Jpem9udGFsUmFuZ2UoZWRpdG9yLCBmbGlwRGlyZWN0aW9uKGVkaXRvci5zZWxlY3Rpb24sIGZvcndhcmQpKS5leGlzdHMobmV3UmFuZ2UgPT4ge1xuICAgICAgbW92ZVRvUmFuZ2UoZWRpdG9yLCBuZXdSYW5nZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICBjb25zdCBtb3ZlViQ0ID0gKGVkaXRvciwgZG93bikgPT4gZ2V0VmVydGljYWxSYW5nZShlZGl0b3IsIGRvd24pLmV4aXN0cyhuZXdSYW5nZSA9PiB7XG4gICAgICBtb3ZlVG9SYW5nZShlZGl0b3IsIG5ld1JhbmdlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICAgIGNvbnN0IG1vdmVUb0xpbmVFbmRQb2ludCQxID0gKGVkaXRvciwgZm9yd2FyZCkgPT4ge1xuICAgICAgY29uc3QgaXNDZWZQb3NpdGlvbiA9IGZvcndhcmQgPyBpc0FmdGVyQ29udGVudEVkaXRhYmxlRmFsc2UgOiBpc0JlZm9yZUNvbnRlbnRFZGl0YWJsZUZhbHNlO1xuICAgICAgcmV0dXJuIG1vdmVUb0xpbmVFbmRQb2ludCQzKGVkaXRvciwgZm9yd2FyZCwgaXNDZWZQb3NpdGlvbik7XG4gICAgfTtcbiAgICBjb25zdCBzZWxlY3RUb0VuZFBvaW50ID0gKGVkaXRvciwgZm9yd2FyZCkgPT4gZ2V0RWRnZUNlZlBvc2l0aW9uKGVkaXRvciwgIWZvcndhcmQpLm1hcChwb3MgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gcG9zLnRvUmFuZ2UoKTtcbiAgICAgIGNvbnN0IGN1clJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBpZiAoZm9yd2FyZCkge1xuICAgICAgICBybmcuc2V0U3RhcnQoY3VyUm5nLnN0YXJ0Q29udGFpbmVyLCBjdXJSbmcuc3RhcnRPZmZzZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm5nLnNldEVuZChjdXJSbmcuZW5kQ29udGFpbmVyLCBjdXJSbmcuZW5kT2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBybmc7XG4gICAgfSkuZXhpc3RzKHJuZyA9PiB7XG4gICAgICBtb3ZlVG9SYW5nZShlZGl0b3IsIHJuZyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGlzVGFyZ2V0ID0gbm9kZSA9PiBjb250YWlucyQyKFsnZmlnY2FwdGlvbiddLCBuYW1lKG5vZGUpKTtcbiAgICBjb25zdCBnZXRDbG9zZXN0VGFyZ2V0QmxvY2sgPSAocG9zLCByb290KSA9PiB7XG4gICAgICBjb25zdCBpc1Jvb3QgPSBjdXJyeShlcSwgcm9vdCk7XG4gICAgICByZXR1cm4gY2xvc2VzdCQ0KFN1Z2FyRWxlbWVudC5mcm9tRG9tKHBvcy5jb250YWluZXIoKSksIGlzQmxvY2skMiwgaXNSb290KS5maWx0ZXIoaXNUYXJnZXQpO1xuICAgIH07XG4gICAgY29uc3QgaXNBdEZpcnN0T3JMYXN0TGluZSA9IChyb290LCBmb3J3YXJkLCBwb3MpID0+IGZvcndhcmQgPyBpc0F0TGFzdExpbmUocm9vdC5kb20sIHBvcykgOiBpc0F0Rmlyc3RMaW5lKHJvb3QuZG9tLCBwb3MpO1xuICAgIGNvbnN0IG1vdmVDYXJldFRvTmV3RW1wdHlMaW5lID0gKGVkaXRvciwgZm9yd2FyZCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgY29uc3QgcG9zID0gQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKTtcbiAgICAgIHJldHVybiBnZXRDbG9zZXN0VGFyZ2V0QmxvY2socG9zLCByb290KS5leGlzdHMoKCkgPT4ge1xuICAgICAgICBpZiAoaXNBdEZpcnN0T3JMYXN0TGluZShyb290LCBmb3J3YXJkLCBwb3MpKSB7XG4gICAgICAgICAgY29uc3QgaW5zZXJ0Rm4gPSBmb3J3YXJkID8gYXBwZW5kJDEgOiBwcmVwZW5kO1xuICAgICAgICAgIGNvbnN0IHJuZyA9IGluc2VydEVtcHR5TGluZShlZGl0b3IsIHJvb3QsIGluc2VydEZuKTtcbiAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBtb3ZlViQzID0gKGVkaXRvciwgZm9yd2FyZCkgPT4ge1xuICAgICAgaWYgKGVkaXRvci5zZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSkge1xuICAgICAgICByZXR1cm4gbW92ZUNhcmV0VG9OZXdFbXB0eUxpbmUoZWRpdG9yLCBmb3J3YXJkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgbW92ZVVwID0gKGVkaXRvciwgZGV0YWlscywgc3VtbWFyeSkgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIGNvbnN0IHBvcyA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQocm5nKTtcbiAgICAgIGNvbnN0IHJvb3QgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgaWYgKHJvb3QuZmlyc3RDaGlsZCA9PT0gZGV0YWlscyAmJiBpc0F0Rmlyc3RMaW5lKHN1bW1hcnksIHBvcykpIHtcbiAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdJbnNlcnROZXdCbG9ja0JlZm9yZScpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1vdmVEb3duID0gKGVkaXRvciwgZGV0YWlscykgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIGNvbnN0IHBvcyA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQocm5nKTtcbiAgICAgIGNvbnN0IHJvb3QgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgaWYgKHJvb3QubGFzdENoaWxkID09PSBkZXRhaWxzICYmIGlzQXRMYXN0TGluZShkZXRhaWxzLCBwb3MpKSB7XG4gICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnSW5zZXJ0TmV3QmxvY2tBZnRlcicpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1vdmUkMiA9IChlZGl0b3IsIGZvcndhcmQpID0+IHtcbiAgICAgIGlmIChmb3J3YXJkKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKGVkaXRvci5kb20uZ2V0UGFyZW50KGVkaXRvci5zZWxlY3Rpb24uZ2V0Tm9kZSgpLCAnZGV0YWlscycpKS5tYXAoZGV0YWlscyA9PiBtb3ZlRG93bihlZGl0b3IsIGRldGFpbHMpKS5nZXRPcihmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShlZGl0b3IuZG9tLmdldFBhcmVudChlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKSwgJ3N1bW1hcnknKSkuYmluZChzdW1tYXJ5ID0+IE9wdGlvbmFsLmZyb20oZWRpdG9yLmRvbS5nZXRQYXJlbnQoc3VtbWFyeSwgJ2RldGFpbHMnKSkubWFwKGRldGFpbHMgPT4gbW92ZVVwKGVkaXRvciwgZGV0YWlscywgc3VtbWFyeSkpKS5nZXRPcihmYWxzZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBtb3ZlViQyID0gKGVkaXRvciwgZm9yd2FyZCkgPT4gbW92ZSQyKGVkaXRvciwgZm9yd2FyZCk7XG5cbiAgICBjb25zdCBiYXNlS2V5UGF0dGVybiA9IHtcbiAgICAgIHNoaWZ0S2V5OiBmYWxzZSxcbiAgICAgIGFsdEtleTogZmFsc2UsXG4gICAgICBjdHJsS2V5OiBmYWxzZSxcbiAgICAgIG1ldGFLZXk6IGZhbHNlLFxuICAgICAga2V5Q29kZTogMFxuICAgIH07XG4gICAgY29uc3QgZGVmYXVsdFBhdHRlcm5zID0gcGF0dGVybnMgPT4gbWFwJDMocGF0dGVybnMsIHBhdHRlcm4gPT4gKHtcbiAgICAgIC4uLmJhc2VLZXlQYXR0ZXJuLFxuICAgICAgLi4ucGF0dGVyblxuICAgIH0pKTtcbiAgICBjb25zdCBkZWZhdWx0RGVsYXllZFBhdHRlcm5zID0gcGF0dGVybnMgPT4gbWFwJDMocGF0dGVybnMsIHBhdHRlcm4gPT4gKHtcbiAgICAgIC4uLmJhc2VLZXlQYXR0ZXJuLFxuICAgICAgLi4ucGF0dGVyblxuICAgIH0pKTtcbiAgICBjb25zdCBtYXRjaGVzRXZlbnQgPSAocGF0dGVybiwgZXZ0KSA9PiBldnQua2V5Q29kZSA9PT0gcGF0dGVybi5rZXlDb2RlICYmIGV2dC5zaGlmdEtleSA9PT0gcGF0dGVybi5zaGlmdEtleSAmJiBldnQuYWx0S2V5ID09PSBwYXR0ZXJuLmFsdEtleSAmJiBldnQuY3RybEtleSA9PT0gcGF0dGVybi5jdHJsS2V5ICYmIGV2dC5tZXRhS2V5ID09PSBwYXR0ZXJuLm1ldGFLZXk7XG4gICAgY29uc3QgbWF0Y2gkMSA9IChwYXR0ZXJucywgZXZ0KSA9PiBiaW5kJDMoZGVmYXVsdFBhdHRlcm5zKHBhdHRlcm5zKSwgcGF0dGVybiA9PiBtYXRjaGVzRXZlbnQocGF0dGVybiwgZXZ0KSA/IFtwYXR0ZXJuXSA6IFtdKTtcbiAgICBjb25zdCBtYXRjaERlbGF5ZWQgPSAocGF0dGVybnMsIGV2dCkgPT4gYmluZCQzKGRlZmF1bHREZWxheWVkUGF0dGVybnMocGF0dGVybnMpLCBwYXR0ZXJuID0+IG1hdGNoZXNFdmVudChwYXR0ZXJuLCBldnQpID8gW3BhdHRlcm5dIDogW10pO1xuICAgIGNvbnN0IGFjdGlvbiA9IChmLCAuLi54KSA9PiAoKSA9PiBmLmFwcGx5KG51bGwsIHgpO1xuICAgIGNvbnN0IGV4ZWN1dGUgPSAocGF0dGVybnMsIGV2dCkgPT4gZmluZCQyKG1hdGNoJDEocGF0dGVybnMsIGV2dCksIHBhdHRlcm4gPT4gcGF0dGVybi5hY3Rpb24oKSk7XG4gICAgY29uc3QgZXhlY3V0ZVdpdGhEZWxheWVkQWN0aW9uID0gKHBhdHRlcm5zLCBldnQpID0+IGZpbmRNYXAobWF0Y2hEZWxheWVkKHBhdHRlcm5zLCBldnQpLCBwYXR0ZXJuID0+IHBhdHRlcm4uYWN0aW9uKCkpO1xuXG4gICAgY29uc3QgbW92ZUgkMSA9IChlZGl0b3IsIGZvcndhcmQpID0+IHtcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGZvcndhcmQgPyBIRGlyZWN0aW9uLkZvcndhcmRzIDogSERpcmVjdGlvbi5CYWNrd2FyZHM7XG4gICAgICBjb25zdCByYW5nZSA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICByZXR1cm4gbW92ZUhvcml6b250YWxseShlZGl0b3IsIGRpcmVjdGlvbiwgcmFuZ2UsIGlzQmVmb3JlTWVkaWEsIGlzQWZ0ZXJNZWRpYSwgaXNNZWRpYSQyKS5leGlzdHMobmV3UmFuZ2UgPT4ge1xuICAgICAgICBtb3ZlVG9SYW5nZShlZGl0b3IsIG5ld1JhbmdlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG1vdmVWJDEgPSAoZWRpdG9yLCBkb3duKSA9PiB7XG4gICAgICBjb25zdCBkaXJlY3Rpb24gPSBkb3duID8gMSA6IC0xO1xuICAgICAgY29uc3QgcmFuZ2UgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgcmV0dXJuIG1vdmVWZXJ0aWNhbGx5KGVkaXRvciwgZGlyZWN0aW9uLCByYW5nZSwgaXNCZWZvcmVNZWRpYSwgaXNBZnRlck1lZGlhLCBpc01lZGlhJDIpLmV4aXN0cyhuZXdSYW5nZSA9PiB7XG4gICAgICAgIG1vdmVUb1JhbmdlKGVkaXRvciwgbmV3UmFuZ2UpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbW92ZVRvTGluZUVuZFBvaW50ID0gKGVkaXRvciwgZm9yd2FyZCkgPT4ge1xuICAgICAgY29uc3QgaXNOZWFyTWVkaWEgPSBmb3J3YXJkID8gaXNBZnRlck1lZGlhIDogaXNCZWZvcmVNZWRpYTtcbiAgICAgIHJldHVybiBtb3ZlVG9MaW5lRW5kUG9pbnQkMyhlZGl0b3IsIGZvcndhcmQsIGlzTmVhck1lZGlhKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYWR0ID0gQWR0LmdlbmVyYXRlKFtcbiAgICAgIHsgbm9uZTogWydjdXJyZW50J10gfSxcbiAgICAgIHsgZmlyc3Q6IFsnY3VycmVudCddIH0sXG4gICAgICB7XG4gICAgICAgIG1pZGRsZTogW1xuICAgICAgICAgICdjdXJyZW50JyxcbiAgICAgICAgICAndGFyZ2V0J1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgeyBsYXN0OiBbJ2N1cnJlbnQnXSB9XG4gICAgXSk7XG4gICAgY29uc3Qgbm9uZSA9IGN1cnJlbnQgPT4gYWR0Lm5vbmUoY3VycmVudCk7XG4gICAgY29uc3QgQ2VsbExvY2F0aW9uID0ge1xuICAgICAgLi4uYWR0LFxuICAgICAgbm9uZVxuICAgIH07XG5cbiAgICBjb25zdCBmaXJzdExheWVyID0gKHNjb3BlLCBzZWxlY3RvcikgPT4ge1xuICAgICAgcmV0dXJuIGZpbHRlckZpcnN0TGF5ZXIoc2NvcGUsIHNlbGVjdG9yLCBhbHdheXMpO1xuICAgIH07XG4gICAgY29uc3QgZmlsdGVyRmlyc3RMYXllciA9IChzY29wZSwgc2VsZWN0b3IsIHByZWRpY2F0ZSkgPT4ge1xuICAgICAgcmV0dXJuIGJpbmQkMyhjaGlsZHJlbiQxKHNjb3BlKSwgeCA9PiB7XG4gICAgICAgIGlmIChpcyQxKHgsIHNlbGVjdG9yKSkge1xuICAgICAgICAgIHJldHVybiBwcmVkaWNhdGUoeCkgPyBbeF0gOiBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmlsdGVyRmlyc3RMYXllcih4LCBzZWxlY3RvciwgcHJlZGljYXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxvb2t1cCQxID0gKHRhZ3MsIGVsZW1lbnQsIGlzUm9vdCA9IG5ldmVyKSA9PiB7XG4gICAgICBpZiAoaXNSb290KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICBpZiAoY29udGFpbnMkMih0YWdzLCBuYW1lKGVsZW1lbnQpKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShlbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzUm9vdE9yVXBwZXJUYWJsZSA9IGVsbSA9PiBpcyQxKGVsbSwgJ3RhYmxlJykgfHwgaXNSb290KGVsbSk7XG4gICAgICByZXR1cm4gYW5jZXN0b3IkMyhlbGVtZW50LCB0YWdzLmpvaW4oJywnKSwgaXNSb290T3JVcHBlclRhYmxlKTtcbiAgICB9O1xuICAgIGNvbnN0IGNlbGwgPSAoZWxlbWVudCwgaXNSb290KSA9PiBsb29rdXAkMShbXG4gICAgICAndGQnLFxuICAgICAgJ3RoJ1xuICAgIF0sIGVsZW1lbnQsIGlzUm9vdCk7XG4gICAgY29uc3QgY2VsbHMgPSBhbmNlc3RvciA9PiBmaXJzdExheWVyKGFuY2VzdG9yLCAndGgsdGQnKTtcbiAgICBjb25zdCB0YWJsZSA9IChlbGVtZW50LCBpc1Jvb3QpID0+IGNsb3Nlc3QkMyhlbGVtZW50LCAndGFibGUnLCBpc1Jvb3QpO1xuXG4gICAgY29uc3Qgd2FsayA9IChhbGwsIGN1cnJlbnQsIGluZGV4LCBkaXJlY3Rpb24sIGlzRWxpZ2libGUgPSBhbHdheXMpID0+IHtcbiAgICAgIGNvbnN0IGZvcndhcmRzID0gZGlyZWN0aW9uID09PSAxO1xuICAgICAgaWYgKCFmb3J3YXJkcyAmJiBpbmRleCA8PSAwKSB7XG4gICAgICAgIHJldHVybiBDZWxsTG9jYXRpb24uZmlyc3QoYWxsWzBdKTtcbiAgICAgIH0gZWxzZSBpZiAoZm9yd2FyZHMgJiYgaW5kZXggPj0gYWxsLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgcmV0dXJuIENlbGxMb2NhdGlvbi5sYXN0KGFsbFthbGwubGVuZ3RoIC0gMV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBpbmRleCArIGRpcmVjdGlvbjtcbiAgICAgICAgY29uc3QgZWxlbSA9IGFsbFtuZXdJbmRleF07XG4gICAgICAgIHJldHVybiBpc0VsaWdpYmxlKGVsZW0pID8gQ2VsbExvY2F0aW9uLm1pZGRsZShjdXJyZW50LCBlbGVtKSA6IHdhbGsoYWxsLCBjdXJyZW50LCBuZXdJbmRleCwgZGlyZWN0aW9uLCBpc0VsaWdpYmxlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGRldGVjdCA9IChjdXJyZW50LCBpc1Jvb3QpID0+IHtcbiAgICAgIHJldHVybiB0YWJsZShjdXJyZW50LCBpc1Jvb3QpLmJpbmQodGFibGUgPT4ge1xuICAgICAgICBjb25zdCBhbGwgPSBjZWxscyh0YWJsZSk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZmluZEluZGV4JDIoYWxsLCB4ID0+IGVxKGN1cnJlbnQsIHgpKTtcbiAgICAgICAgcmV0dXJuIGluZGV4Lm1hcChpbmRleCA9PiAoe1xuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIGFsbFxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG5leHQgPSAoY3VycmVudCwgaXNFbGlnaWJsZSwgaXNSb290KSA9PiB7XG4gICAgICBjb25zdCBkZXRlY3Rpb24gPSBkZXRlY3QoY3VycmVudCwgaXNSb290KTtcbiAgICAgIHJldHVybiBkZXRlY3Rpb24uZm9sZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBDZWxsTG9jYXRpb24ubm9uZShjdXJyZW50KTtcbiAgICAgIH0sIGluZm8gPT4ge1xuICAgICAgICByZXR1cm4gd2FsayhpbmZvLmFsbCwgY3VycmVudCwgaW5mby5pbmRleCwgMSwgaXNFbGlnaWJsZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHByZXYgPSAoY3VycmVudCwgaXNFbGlnaWJsZSwgaXNSb290KSA9PiB7XG4gICAgICBjb25zdCBkZXRlY3Rpb24gPSBkZXRlY3QoY3VycmVudCwgaXNSb290KTtcbiAgICAgIHJldHVybiBkZXRlY3Rpb24uZm9sZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBDZWxsTG9jYXRpb24ubm9uZSgpO1xuICAgICAgfSwgaW5mbyA9PiB7XG4gICAgICAgIHJldHVybiB3YWxrKGluZm8uYWxsLCBjdXJyZW50LCBpbmZvLmluZGV4LCAtMSwgaXNFbGlnaWJsZSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGVmbGF0ZSA9IChyZWN0LCBkZWx0YSkgPT4gKHtcbiAgICAgIGxlZnQ6IHJlY3QubGVmdCAtIGRlbHRhLFxuICAgICAgdG9wOiByZWN0LnRvcCAtIGRlbHRhLFxuICAgICAgcmlnaHQ6IHJlY3QucmlnaHQgKyBkZWx0YSAqIDIsXG4gICAgICBib3R0b206IHJlY3QuYm90dG9tICsgZGVsdGEgKiAyLFxuICAgICAgd2lkdGg6IHJlY3Qud2lkdGggKyBkZWx0YSxcbiAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQgKyBkZWx0YVxuICAgIH0pO1xuICAgIGNvbnN0IGdldENvcm5lcnMgPSAoZ2V0WUF4aXNWYWx1ZSwgdGRzKSA9PiBiaW5kJDModGRzLCB0ZCA9PiB7XG4gICAgICBjb25zdCByZWN0ID0gZGVmbGF0ZShjbG9uZSQxKHRkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSwgLTEpO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIHg6IHJlY3QubGVmdCxcbiAgICAgICAgICB5OiBnZXRZQXhpc1ZhbHVlKHJlY3QpLFxuICAgICAgICAgIGNlbGw6IHRkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB4OiByZWN0LnJpZ2h0LFxuICAgICAgICAgIHk6IGdldFlBeGlzVmFsdWUocmVjdCksXG4gICAgICAgICAgY2VsbDogdGRcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9KTtcbiAgICBjb25zdCBmaW5kQ2xvc2VzdENvcm5lciA9IChjb3JuZXJzLCB4LCB5KSA9PiBmb2xkbChjb3JuZXJzLCAoYWNjLCBuZXdDb3JuZXIpID0+IGFjYy5mb2xkKCgpID0+IE9wdGlvbmFsLnNvbWUobmV3Q29ybmVyKSwgb2xkQ29ybmVyID0+IHtcbiAgICAgIGNvbnN0IG9sZERpc3QgPSBNYXRoLnNxcnQoTWF0aC5hYnMob2xkQ29ybmVyLnggLSB4KSArIE1hdGguYWJzKG9sZENvcm5lci55IC0geSkpO1xuICAgICAgY29uc3QgbmV3RGlzdCA9IE1hdGguc3FydChNYXRoLmFicyhuZXdDb3JuZXIueCAtIHgpICsgTWF0aC5hYnMobmV3Q29ybmVyLnkgLSB5KSk7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShuZXdEaXN0IDwgb2xkRGlzdCA/IG5ld0Nvcm5lciA6IG9sZENvcm5lcik7XG4gICAgfSksIE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgY29uc3QgZ2V0Q2xvc2VzdENlbGwgPSAoZ2V0WUF4aXNWYWx1ZSwgaXNUYXJnZXRDb3JuZXIsIHRhYmxlLCB4LCB5KSA9PiB7XG4gICAgICBjb25zdCBjZWxscyA9IGRlc2NlbmRhbnRzKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHRhYmxlKSwgJ3RkLHRoLGNhcHRpb24nKS5tYXAoZSA9PiBlLmRvbSk7XG4gICAgICBjb25zdCBjb3JuZXJzID0gZmlsdGVyJDUoZ2V0Q29ybmVycyhnZXRZQXhpc1ZhbHVlLCBjZWxscyksIGNvcm5lciA9PiBpc1RhcmdldENvcm5lcihjb3JuZXIsIHkpKTtcbiAgICAgIHJldHVybiBmaW5kQ2xvc2VzdENvcm5lcihjb3JuZXJzLCB4LCB5KS5tYXAoY29ybmVyID0+IGNvcm5lci5jZWxsKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEJvdHRvbVZhbHVlID0gcmVjdCA9PiByZWN0LmJvdHRvbTtcbiAgICBjb25zdCBnZXRUb3BWYWx1ZSA9IHJlY3QgPT4gcmVjdC50b3A7XG4gICAgY29uc3QgaXNBYm92ZSA9IChjb3JuZXIsIHkpID0+IGNvcm5lci55IDwgeTtcbiAgICBjb25zdCBpc0JlbG93ID0gKGNvcm5lciwgeSkgPT4gY29ybmVyLnkgPiB5O1xuICAgIGNvbnN0IGdldENsb3Nlc3RDZWxsQWJvdmUgPSBjdXJyeShnZXRDbG9zZXN0Q2VsbCwgZ2V0Qm90dG9tVmFsdWUsIGlzQWJvdmUpO1xuICAgIGNvbnN0IGdldENsb3Nlc3RDZWxsQmVsb3cgPSBjdXJyeShnZXRDbG9zZXN0Q2VsbCwgZ2V0VG9wVmFsdWUsIGlzQmVsb3cpO1xuICAgIGNvbnN0IGZpbmRDbG9zZXN0UG9zaXRpb25JbkFib3ZlQ2VsbCA9ICh0YWJsZSwgcG9zKSA9PiBoZWFkKHBvcy5nZXRDbGllbnRSZWN0cygpKS5iaW5kKHJlY3QgPT4gZ2V0Q2xvc2VzdENlbGxBYm92ZSh0YWJsZSwgcmVjdC5sZWZ0LCByZWN0LnRvcCkpLmJpbmQoY2VsbCA9PiBmaW5kQ2xvc2VzdEhvcml6b250YWxQb3NpdGlvbihnZXRMYXN0TGluZVBvc2l0aW9ucyhjZWxsKSwgcG9zKSk7XG4gICAgY29uc3QgZmluZENsb3Nlc3RQb3NpdGlvbkluQmVsb3dDZWxsID0gKHRhYmxlLCBwb3MpID0+IGxhc3QkMyhwb3MuZ2V0Q2xpZW50UmVjdHMoKSkuYmluZChyZWN0ID0+IGdldENsb3Nlc3RDZWxsQmVsb3codGFibGUsIHJlY3QubGVmdCwgcmVjdC50b3ApKS5iaW5kKGNlbGwgPT4gZmluZENsb3Nlc3RIb3Jpem9udGFsUG9zaXRpb24oZ2V0Rmlyc3RMaW5lUG9zaXRpb25zKGNlbGwpLCBwb3MpKTtcblxuICAgIGNvbnN0IGhhc05leHRCcmVhayA9IChnZXRQb3NpdGlvbnNVbnRpbCwgc2NvcGUsIGxpbmVJbmZvKSA9PiBsaW5lSW5mby5icmVha0F0LmV4aXN0cyhicmVha1BvcyA9PiBnZXRQb3NpdGlvbnNVbnRpbChzY29wZSwgYnJlYWtQb3MpLmJyZWFrQXQuaXNTb21lKCkpO1xuICAgIGNvbnN0IHN0YXJ0c1dpdGhXcmFwQnJlYWsgPSBsaW5lSW5mbyA9PiBsaW5lSW5mby5icmVha1R5cGUgPT09IEJyZWFrVHlwZS5XcmFwICYmIGxpbmVJbmZvLnBvc2l0aW9ucy5sZW5ndGggPT09IDA7XG4gICAgY29uc3Qgc3RhcnRzV2l0aEJyQnJlYWsgPSBsaW5lSW5mbyA9PiBsaW5lSW5mby5icmVha1R5cGUgPT09IEJyZWFrVHlwZS5CciAmJiBsaW5lSW5mby5wb3NpdGlvbnMubGVuZ3RoID09PSAxO1xuICAgIGNvbnN0IGlzQXRUYWJsZUNlbGxMaW5lID0gKGdldFBvc2l0aW9uc1VudGlsLCBzY29wZSwgcG9zKSA9PiB7XG4gICAgICBjb25zdCBsaW5lSW5mbyA9IGdldFBvc2l0aW9uc1VudGlsKHNjb3BlLCBwb3MpO1xuICAgICAgaWYgKHN0YXJ0c1dpdGhXcmFwQnJlYWsobGluZUluZm8pIHx8ICFpc0JyJDYocG9zLmdldE5vZGUoKSkgJiYgc3RhcnRzV2l0aEJyQnJlYWsobGluZUluZm8pKSB7XG4gICAgICAgIHJldHVybiAhaGFzTmV4dEJyZWFrKGdldFBvc2l0aW9uc1VudGlsLCBzY29wZSwgbGluZUluZm8pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGxpbmVJbmZvLmJyZWFrQXQuaXNOb25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc0F0Rmlyc3RUYWJsZUNlbGxMaW5lID0gY3VycnkoaXNBdFRhYmxlQ2VsbExpbmUsIGdldFBvc2l0aW9uc1VudGlsUHJldmlvdXNMaW5lKTtcbiAgICBjb25zdCBpc0F0TGFzdFRhYmxlQ2VsbExpbmUgPSBjdXJyeShpc0F0VGFibGVDZWxsTGluZSwgZ2V0UG9zaXRpb25zVW50aWxOZXh0TGluZSk7XG4gICAgY29uc3QgaXNDYXJldEF0U3RhcnRPckVuZE9mVGFibGUgPSAoZm9yd2FyZCwgcm5nLCB0YWJsZSkgPT4ge1xuICAgICAgY29uc3QgY2FyZXRQb3MgPSBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KHJuZyk7XG4gICAgICByZXR1cm4gcG9zaXRpb25JbighZm9yd2FyZCwgdGFibGUpLmV4aXN0cyhwb3MgPT4gcG9zLmlzRXF1YWwoY2FyZXRQb3MpKTtcbiAgICB9O1xuICAgIGNvbnN0IG5hdmlnYXRlSG9yaXpvbnRhbGx5ID0gKGVkaXRvciwgZm9yd2FyZCwgdGFibGUsIF90ZCkgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGZvcndhcmQgPyAxIDogLTE7XG4gICAgICBpZiAoaXNGYWtlQ2FyZXRUYWJsZUJyb3dzZXIoKSAmJiBpc0NhcmV0QXRTdGFydE9yRW5kT2ZUYWJsZShmb3J3YXJkLCBybmcsIHRhYmxlKSkge1xuICAgICAgICBzaG93Q2FyZXQoZGlyZWN0aW9uLCBlZGl0b3IsIHRhYmxlLCAhZm9yd2FyZCwgZmFsc2UpLmVhY2gobmV3Um5nID0+IHtcbiAgICAgICAgICBtb3ZlVG9SYW5nZShlZGl0b3IsIG5ld1JuZyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IGdldENsb3Nlc3RBYm92ZVBvc2l0aW9uID0gKHJvb3QsIHRhYmxlLCBzdGFydCkgPT4gZmluZENsb3Nlc3RQb3NpdGlvbkluQWJvdmVDZWxsKHRhYmxlLCBzdGFydCkub3JUaHVuaygoKSA9PiBoZWFkKHN0YXJ0LmdldENsaWVudFJlY3RzKCkpLmJpbmQocmVjdCA9PiBmaW5kQ2xvc2VzdEhvcml6b250YWxQb3NpdGlvbkZyb21Qb2ludChnZXRQb3NpdGlvbnNBYm92ZShyb290LCBDYXJldFBvc2l0aW9uLmJlZm9yZSh0YWJsZSkpLCByZWN0LmxlZnQpKSkuZ2V0T3IoQ2FyZXRQb3NpdGlvbi5iZWZvcmUodGFibGUpKTtcbiAgICBjb25zdCBnZXRDbG9zZXN0QmVsb3dQb3NpdGlvbiA9IChyb290LCB0YWJsZSwgc3RhcnQpID0+IGZpbmRDbG9zZXN0UG9zaXRpb25JbkJlbG93Q2VsbCh0YWJsZSwgc3RhcnQpLm9yVGh1bmsoKCkgPT4gaGVhZChzdGFydC5nZXRDbGllbnRSZWN0cygpKS5iaW5kKHJlY3QgPT4gZmluZENsb3Nlc3RIb3Jpem9udGFsUG9zaXRpb25Gcm9tUG9pbnQoZ2V0UG9zaXRpb25zQmVsb3cocm9vdCwgQ2FyZXRQb3NpdGlvbi5hZnRlcih0YWJsZSkpLCByZWN0LmxlZnQpKSkuZ2V0T3IoQ2FyZXRQb3NpdGlvbi5hZnRlcih0YWJsZSkpO1xuICAgIGNvbnN0IGdldFRhYmxlID0gKHByZXZpb3VzLCBwb3MpID0+IHtcbiAgICAgIGNvbnN0IG5vZGUgPSBwb3MuZ2V0Tm9kZShwcmV2aW91cyk7XG4gICAgICByZXR1cm4gaXNUYWJsZSQyKG5vZGUpID8gT3B0aW9uYWwuc29tZShub2RlKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckJsb2NrID0gKGRvd24sIGVkaXRvciwgdGFibGUpID0+IHtcbiAgICAgIGVkaXRvci51bmRvTWFuYWdlci50cmFuc2FjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGluc2VydEZuID0gZG93biA/IGFmdGVyJDQgOiBiZWZvcmUkMztcbiAgICAgICAgY29uc3Qgcm5nID0gaW5zZXJ0RW1wdHlMaW5lKGVkaXRvciwgU3VnYXJFbGVtZW50LmZyb21Eb20odGFibGUpLCBpbnNlcnRGbik7XG4gICAgICAgIG1vdmVUb1JhbmdlKGVkaXRvciwgcm5nKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbW92ZUNhcmV0ID0gKGVkaXRvciwgZG93biwgcG9zKSA9PiB7XG4gICAgICBjb25zdCB0YWJsZSA9IGRvd24gPyBnZXRUYWJsZSh0cnVlLCBwb3MpIDogZ2V0VGFibGUoZmFsc2UsIHBvcyk7XG4gICAgICBjb25zdCBsYXN0ID0gZG93biA9PT0gZmFsc2U7XG4gICAgICB0YWJsZS5mb2xkKCgpID0+IG1vdmVUb1JhbmdlKGVkaXRvciwgcG9zLnRvUmFuZ2UoKSksIHRhYmxlID0+IHBvc2l0aW9uSW4obGFzdCwgZWRpdG9yLmdldEJvZHkoKSkuZmlsdGVyKGxhc3RQb3MgPT4gbGFzdFBvcy5pc0VxdWFsKHBvcykpLmZvbGQoKCkgPT4gbW92ZVRvUmFuZ2UoZWRpdG9yLCBwb3MudG9SYW5nZSgpKSwgXyA9PiByZW5kZXJCbG9jayhkb3duLCBlZGl0b3IsIHRhYmxlKSkpO1xuICAgIH07XG4gICAgY29uc3QgbmF2aWdhdGVWZXJ0aWNhbGx5ID0gKGVkaXRvciwgZG93biwgdGFibGUsIHRkKSA9PiB7XG4gICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgY29uc3QgcG9zID0gQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChybmcpO1xuICAgICAgY29uc3Qgcm9vdCA9IGVkaXRvci5nZXRCb2R5KCk7XG4gICAgICBpZiAoIWRvd24gJiYgaXNBdEZpcnN0VGFibGVDZWxsTGluZSh0ZCwgcG9zKSkge1xuICAgICAgICBjb25zdCBuZXdQb3MgPSBnZXRDbG9zZXN0QWJvdmVQb3NpdGlvbihyb290LCB0YWJsZSwgcG9zKTtcbiAgICAgICAgbW92ZUNhcmV0KGVkaXRvciwgZG93biwgbmV3UG9zKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGRvd24gJiYgaXNBdExhc3RUYWJsZUNlbGxMaW5lKHRkLCBwb3MpKSB7XG4gICAgICAgIGNvbnN0IG5ld1BvcyA9IGdldENsb3Nlc3RCZWxvd1Bvc2l0aW9uKHJvb3QsIHRhYmxlLCBwb3MpO1xuICAgICAgICBtb3ZlQ2FyZXQoZWRpdG9yLCBkb3duLCBuZXdQb3MpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1vdmUkMSA9IChlZGl0b3IsIGZvcndhcmQsIG1vdmVyKSA9PiBPcHRpb25hbC5mcm9tKGVkaXRvci5kb20uZ2V0UGFyZW50KGVkaXRvci5zZWxlY3Rpb24uZ2V0Tm9kZSgpLCAndGQsdGgnKSkuYmluZCh0ZCA9PiBPcHRpb25hbC5mcm9tKGVkaXRvci5kb20uZ2V0UGFyZW50KHRkLCAndGFibGUnKSkubWFwKHRhYmxlID0+IG1vdmVyKGVkaXRvciwgZm9yd2FyZCwgdGFibGUsIHRkKSkpLmdldE9yKGZhbHNlKTtcbiAgICBjb25zdCBtb3ZlSCA9IChlZGl0b3IsIGZvcndhcmQpID0+IG1vdmUkMShlZGl0b3IsIGZvcndhcmQsIG5hdmlnYXRlSG9yaXpvbnRhbGx5KTtcbiAgICBjb25zdCBtb3ZlViA9IChlZGl0b3IsIGZvcndhcmQpID0+IG1vdmUkMShlZGl0b3IsIGZvcndhcmQsIG5hdmlnYXRlVmVydGljYWxseSk7XG4gICAgY29uc3QgZ2V0Q2VsbEZpcnN0Q3Vyc29yUG9zaXRpb24gPSBjZWxsID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IFNpbVNlbGVjdGlvbi5leGFjdChjZWxsLCAwLCBjZWxsLCAwKTtcbiAgICAgIHJldHVybiB0b05hdGl2ZShzZWxlY3Rpb24pO1xuICAgIH07XG4gICAgY29uc3QgdGFiR28gPSAoZWRpdG9yLCBpc1Jvb3QsIGNlbGwpID0+IHtcbiAgICAgIHJldHVybiBjZWxsLmZvbGQoT3B0aW9uYWwubm9uZSwgT3B0aW9uYWwubm9uZSwgKF9jdXJyZW50LCBuZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiBmaXJzdChuZXh0KS5tYXAoY2VsbCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGdldENlbGxGaXJzdEN1cnNvclBvc2l0aW9uKGNlbGwpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIGN1cnJlbnQgPT4ge1xuICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZVRhYmxlSW5zZXJ0Um93QWZ0ZXInKTtcbiAgICAgICAgcmV0dXJuIHRhYkZvcndhcmQoZWRpdG9yLCBpc1Jvb3QsIGN1cnJlbnQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCB0YWJGb3J3YXJkID0gKGVkaXRvciwgaXNSb290LCBjZWxsKSA9PiB0YWJHbyhlZGl0b3IsIGlzUm9vdCwgbmV4dChjZWxsLCBpc0VkaXRhYmxlJDMpKTtcbiAgICBjb25zdCB0YWJCYWNrd2FyZCA9IChlZGl0b3IsIGlzUm9vdCwgY2VsbCkgPT4gdGFiR28oZWRpdG9yLCBpc1Jvb3QsIHByZXYoY2VsbCwgaXNFZGl0YWJsZSQzKSk7XG4gICAgY29uc3QgaGFuZGxlVGFiID0gKGVkaXRvciwgZm9yd2FyZCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdEVsZW1lbnRzID0gW1xuICAgICAgICAndGFibGUnLFxuICAgICAgICAnbGknLFxuICAgICAgICAnZGwnXG4gICAgICBdO1xuICAgICAgY29uc3QgYm9keSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgY29uc3QgaXNSb290ID0gZWxlbWVudCA9PiB7XG4gICAgICAgIGNvbnN0IG5hbWUkMSA9IG5hbWUoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBlcShlbGVtZW50LCBib2R5KSB8fCBjb250YWlucyQyKHJvb3RFbGVtZW50cywgbmFtZSQxKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgY29uc3QgY29udGFpbmVyID0gU3VnYXJFbGVtZW50LmZyb21Eb20oIWZvcndhcmQgPyBybmcuc3RhcnRDb250YWluZXIgOiBybmcuZW5kQ29udGFpbmVyKTtcbiAgICAgIHJldHVybiBjZWxsKGNvbnRhaW5lciwgaXNSb290KS5tYXAoY2VsbCA9PiB7XG4gICAgICAgIHRhYmxlKGNlbGwsIGlzUm9vdCkuZWFjaCh0YWJsZSA9PiB7XG4gICAgICAgICAgZWRpdG9yLm1vZGVsLnRhYmxlLmNsZWFyU2VsZWN0ZWRDZWxscyh0YWJsZS5kb20pO1xuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5jb2xsYXBzZSghZm9yd2FyZCk7XG4gICAgICAgIGNvbnN0IG5hdmlnYXRpb24gPSAhZm9yd2FyZCA/IHRhYkJhY2t3YXJkIDogdGFiRm9yd2FyZDtcbiAgICAgICAgY29uc3Qgcm5nID0gbmF2aWdhdGlvbihlZGl0b3IsIGlzUm9vdCwgY2VsbCk7XG4gICAgICAgIHJuZy5lYWNoKHJhbmdlID0+IHtcbiAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhyYW5nZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pLmdldE9yKGZhbHNlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZXhlY3V0ZUtleWRvd25PdmVycmlkZSQ0ID0gKGVkaXRvciwgY2FyZXQsIGV2dCkgPT4ge1xuICAgICAgY29uc3QgaXNNYWMgPSBFbnYub3MuaXNNYWNPUygpIHx8IEVudi5vcy5pc2lPUygpO1xuICAgICAgZXhlY3V0ZShbXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5SSUdIVCxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlSCQyLCBlZGl0b3IsIHRydWUpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5MRUZULFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKG1vdmVIJDIsIGVkaXRvciwgZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5VUCxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlViQ0LCBlZGl0b3IsIGZhbHNlKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuRE9XTixcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlViQ0LCBlZGl0b3IsIHRydWUpXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmlzTWFjID8gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleUNvZGU6IFZLLlVQLFxuICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb24oc2VsZWN0VG9FbmRQb2ludCwgZWRpdG9yLCBmYWxzZSksXG4gICAgICAgICAgICBtZXRhS2V5OiB0cnVlLFxuICAgICAgICAgICAgc2hpZnRLZXk6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleUNvZGU6IFZLLkRPV04sXG4gICAgICAgICAgICBhY3Rpb246IGFjdGlvbihzZWxlY3RUb0VuZFBvaW50LCBlZGl0b3IsIHRydWUpLFxuICAgICAgICAgICAgbWV0YUtleTogdHJ1ZSxcbiAgICAgICAgICAgIHNoaWZ0S2V5OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICBdIDogW10sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5SSUdIVCxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlSCwgZWRpdG9yLCB0cnVlKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuTEVGVCxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlSCwgZWRpdG9yLCBmYWxzZSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLlVQLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKG1vdmVWLCBlZGl0b3IsIGZhbHNlKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuRE9XTixcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlViwgZWRpdG9yLCB0cnVlKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuVVAsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24obW92ZVYsIGVkaXRvciwgZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5VUCxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlViQyLCBlZGl0b3IsIGZhbHNlKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuRE9XTixcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlViQyLCBlZGl0b3IsIHRydWUpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5SSUdIVCxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlSCQxLCBlZGl0b3IsIHRydWUpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5MRUZULFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKG1vdmVIJDEsIGVkaXRvciwgZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5VUCxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlViQxLCBlZGl0b3IsIGZhbHNlKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuRE9XTixcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlViQxLCBlZGl0b3IsIHRydWUpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5SSUdIVCxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlJDMsIGVkaXRvciwgY2FyZXQsIHRydWUpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5MRUZULFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKG1vdmUkMywgZWRpdG9yLCBjYXJldCwgZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5SSUdIVCxcbiAgICAgICAgICBjdHJsS2V5OiAhaXNNYWMsXG4gICAgICAgICAgYWx0S2V5OiBpc01hYyxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlTmV4dFdvcmQsIGVkaXRvciwgY2FyZXQpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5MRUZULFxuICAgICAgICAgIGN0cmxLZXk6ICFpc01hYyxcbiAgICAgICAgICBhbHRLZXk6IGlzTWFjLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKG1vdmVQcmV2V29yZCwgZWRpdG9yLCBjYXJldClcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLlVQLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKG1vdmVWJDMsIGVkaXRvciwgZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5ET1dOLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKG1vdmVWJDMsIGVkaXRvciwgdHJ1ZSlcbiAgICAgICAgfVxuICAgICAgXSwgZXZ0KS5lYWNoKF8gPT4ge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2V0dXAkayA9IChlZGl0b3IsIGNhcmV0KSA9PiB7XG4gICAgICBlZGl0b3Iub24oJ2tleWRvd24nLCBldnQgPT4ge1xuICAgICAgICBpZiAoIWV2dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIGV4ZWN1dGVLZXlkb3duT3ZlcnJpZGUkNChlZGl0b3IsIGNhcmV0LCBldnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcG9pbnQgPSAoY29udGFpbmVyLCBvZmZzZXQpID0+ICh7XG4gICAgICBjb250YWluZXIsXG4gICAgICBvZmZzZXRcbiAgICB9KTtcblxuICAgIGNvbnN0IERPTSQ3ID0gRE9NVXRpbHMuRE9NO1xuICAgIGNvbnN0IGFsd2F5c05leHQgPSBzdGFydE5vZGUgPT4gbm9kZSA9PiBzdGFydE5vZGUgPT09IG5vZGUgPyAtMSA6IDA7XG4gICAgY29uc3QgaXNCb3VuZGFyeSA9IGRvbSA9PiBub2RlID0+IGRvbS5pc0Jsb2NrKG5vZGUpIHx8IGNvbnRhaW5zJDIoW1xuICAgICAgJ0JSJyxcbiAgICAgICdJTUcnLFxuICAgICAgJ0hSJyxcbiAgICAgICdJTlBVVCdcbiAgICBdLCBub2RlLm5vZGVOYW1lKSB8fCBkb20uZ2V0Q29udGVudEVkaXRhYmxlKG5vZGUpID09PSAnZmFsc2UnO1xuICAgIGNvbnN0IHRleHRCZWZvcmUgPSAobm9kZSwgb2Zmc2V0LCByb290Tm9kZSkgPT4ge1xuICAgICAgaWYgKGlzVGV4dCRhKG5vZGUpICYmIG9mZnNldCA+PSAwKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHBvaW50KG5vZGUsIG9mZnNldCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdGV4dFNlZWtlciA9IFRleHRTZWVrZXIoRE9NJDcpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbSh0ZXh0U2Vla2VyLmJhY2t3YXJkcyhub2RlLCBvZmZzZXQsIGFsd2F5c05leHQobm9kZSksIHJvb3ROb2RlKSkubWFwKHByZXYgPT4gcG9pbnQocHJldi5jb250YWluZXIsIHByZXYuY29udGFpbmVyLmRhdGEubGVuZ3RoKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB0ZXh0QWZ0ZXIgPSAobm9kZSwgb2Zmc2V0LCByb290Tm9kZSkgPT4ge1xuICAgICAgaWYgKGlzVGV4dCRhKG5vZGUpICYmIG9mZnNldCA+PSBub2RlLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuc29tZShwb2ludChub2RlLCBvZmZzZXQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRleHRTZWVrZXIgPSBUZXh0U2Vla2VyKERPTSQ3KTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20odGV4dFNlZWtlci5mb3J3YXJkcyhub2RlLCBvZmZzZXQsIGFsd2F5c05leHQobm9kZSksIHJvb3ROb2RlKSkubWFwKHByZXYgPT4gcG9pbnQocHJldi5jb250YWluZXIsIDApKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNjYW5MZWZ0ID0gKG5vZGUsIG9mZnNldCwgcm9vdE5vZGUpID0+IHtcbiAgICAgIGlmICghaXNUZXh0JGEobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRleHQgPSBub2RlLmRhdGE7XG4gICAgICBpZiAob2Zmc2V0ID49IDAgJiYgb2Zmc2V0IDw9IHRleHQubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHBvaW50KG5vZGUsIG9mZnNldCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdGV4dFNlZWtlciA9IFRleHRTZWVrZXIoRE9NJDcpO1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbSh0ZXh0U2Vla2VyLmJhY2t3YXJkcyhub2RlLCBvZmZzZXQsIGFsd2F5c05leHQobm9kZSksIHJvb3ROb2RlKSkuYmluZChwcmV2ID0+IHtcbiAgICAgICAgICBjb25zdCBwcmV2VGV4dCA9IHByZXYuY29udGFpbmVyLmRhdGE7XG4gICAgICAgICAgcmV0dXJuIHNjYW5MZWZ0KHByZXYuY29udGFpbmVyLCBvZmZzZXQgKyBwcmV2VGV4dC5sZW5ndGgsIHJvb3ROb2RlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzY2FuUmlnaHQgPSAobm9kZSwgb2Zmc2V0LCByb290Tm9kZSkgPT4ge1xuICAgICAgaWYgKCFpc1RleHQkYShub2RlKSkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgdGV4dCA9IG5vZGUuZGF0YTtcbiAgICAgIGlmIChvZmZzZXQgPD0gdGV4dC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUocG9pbnQobm9kZSwgb2Zmc2V0KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0ZXh0U2Vla2VyID0gVGV4dFNlZWtlcihET00kNyk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKHRleHRTZWVrZXIuZm9yd2FyZHMobm9kZSwgb2Zmc2V0LCBhbHdheXNOZXh0KG5vZGUpLCByb290Tm9kZSkpLmJpbmQobmV4dCA9PiBzY2FuUmlnaHQobmV4dC5jb250YWluZXIsIG9mZnNldCAtIHRleHQubGVuZ3RoLCByb290Tm9kZSkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVwZWF0TGVmdCA9IChkb20sIG5vZGUsIG9mZnNldCwgcHJvY2Vzcywgcm9vdE5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaCA9IFRleHRTZWVrZXIoZG9tLCBpc0JvdW5kYXJ5KGRvbSkpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oc2VhcmNoLmJhY2t3YXJkcyhub2RlLCBvZmZzZXQsIHByb2Nlc3MsIHJvb3ROb2RlKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzVmFsaWRUZXh0UmFuZ2UgPSBybmcgPT4gcm5nLmNvbGxhcHNlZCAmJiBpc1RleHQkYShybmcuc3RhcnRDb250YWluZXIpO1xuICAgIGNvbnN0IGdldFRleHQgPSBybmcgPT4gdHJpbSQxKHJuZy50b1N0cmluZygpLnJlcGxhY2UoL1xcdTAwQTAvZywgJyAnKSk7XG4gICAgY29uc3QgaXNXaGl0ZXNwYWNlID0gY2hyID0+IGNociAhPT0gJycgJiYgJyBcXHhBMFxcZlxcblxcclxcdFxceDBCJy5pbmRleE9mKGNocikgIT09IC0xO1xuXG4gICAgY29uc3Qgc3RyaXBUcmlnZ2VyID0gKHRleHQsIHRyaWdnZXIpID0+IHRleHQuc3Vic3RyaW5nKHRyaWdnZXIubGVuZ3RoKTtcbiAgICBjb25zdCBmaW5kVHJpZ2dlciA9ICh0ZXh0LCBpbmRleCwgdHJpZ2dlcikgPT4ge1xuICAgICAgbGV0IGk7XG4gICAgICBjb25zdCBmaXJzdENoYXIgPSB0cmlnZ2VyLmNoYXJBdCgwKTtcbiAgICAgIGZvciAoaSA9IGluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgY2hhciA9IHRleHQuY2hhckF0KGkpO1xuICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNoYXIpKSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlyc3RDaGFyID09PSBjaGFyICYmIGNvbnRhaW5zJDEodGV4dCwgdHJpZ2dlciwgaSwgaW5kZXgpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKGkpO1xuICAgIH07XG4gICAgY29uc3QgZmluZFN0YXJ0ID0gKGRvbSwgaW5pdFJhbmdlLCB0cmlnZ2VyLCBtaW5DaGFycyA9IDApID0+IHtcbiAgICAgIGlmICghaXNWYWxpZFRleHRSYW5nZShpbml0UmFuZ2UpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBidWZmZXIgPSB7XG4gICAgICAgIHRleHQ6ICcnLFxuICAgICAgICBvZmZzZXQ6IDBcbiAgICAgIH07XG4gICAgICBjb25zdCBmaW5kVHJpZ2dlckluZGV4ID0gKGVsZW1lbnQsIG9mZnNldCwgdGV4dCkgPT4ge1xuICAgICAgICBidWZmZXIudGV4dCA9IHRleHQgKyBidWZmZXIudGV4dDtcbiAgICAgICAgYnVmZmVyLm9mZnNldCArPSBvZmZzZXQ7XG4gICAgICAgIHJldHVybiBmaW5kVHJpZ2dlcihidWZmZXIudGV4dCwgYnVmZmVyLm9mZnNldCwgdHJpZ2dlcikuZ2V0T3Iob2Zmc2V0KTtcbiAgICAgIH07XG4gICAgICBjb25zdCByb290ID0gZG9tLmdldFBhcmVudChpbml0UmFuZ2Uuc3RhcnRDb250YWluZXIsIGRvbS5pc0Jsb2NrKSB8fCBkb20uZ2V0Um9vdCgpO1xuICAgICAgcmV0dXJuIHJlcGVhdExlZnQoZG9tLCBpbml0UmFuZ2Uuc3RhcnRDb250YWluZXIsIGluaXRSYW5nZS5zdGFydE9mZnNldCwgZmluZFRyaWdnZXJJbmRleCwgcm9vdCkuYmluZChzcG90ID0+IHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBpbml0UmFuZ2UuY2xvbmVSYW5nZSgpO1xuICAgICAgICByYW5nZS5zZXRTdGFydChzcG90LmNvbnRhaW5lciwgc3BvdC5vZmZzZXQpO1xuICAgICAgICByYW5nZS5zZXRFbmQoaW5pdFJhbmdlLmVuZENvbnRhaW5lciwgaW5pdFJhbmdlLmVuZE9mZnNldCk7XG4gICAgICAgIGlmIChyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRleHQgPSBnZXRUZXh0KHJhbmdlKTtcbiAgICAgICAgY29uc3QgdHJpZ2dlckluZGV4ID0gdGV4dC5sYXN0SW5kZXhPZih0cmlnZ2VyKTtcbiAgICAgICAgaWYgKHRyaWdnZXJJbmRleCAhPT0gMCB8fCBzdHJpcFRyaWdnZXIodGV4dCwgdHJpZ2dlcikubGVuZ3RoIDwgbWluQ2hhcnMpIHtcbiAgICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgIHRleHQ6IHN0cmlwVHJpZ2dlcih0ZXh0LCB0cmlnZ2VyKSxcbiAgICAgICAgICAgIHJhbmdlLFxuICAgICAgICAgICAgdHJpZ2dlclxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGdldENvbnRleHQgPSAoZG9tLCBpbml0UmFuZ2UsIHRyaWdnZXIsIG1pbkNoYXJzID0gMCkgPT4gZGV0ZWN0JDEoU3VnYXJFbGVtZW50LmZyb21Eb20oaW5pdFJhbmdlLnN0YXJ0Q29udGFpbmVyKSkuZm9sZCgoKSA9PiBmaW5kU3RhcnQoZG9tLCBpbml0UmFuZ2UsIHRyaWdnZXIsIG1pbkNoYXJzKSwgZWxtID0+IHtcbiAgICAgIGNvbnN0IHJhbmdlID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZShlbG0uZG9tKTtcbiAgICAgIGNvbnN0IHRleHQgPSBnZXRUZXh0KHJhbmdlKTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgcmFuZ2UsXG4gICAgICAgIHRleHQ6IHN0cmlwVHJpZ2dlcih0ZXh0LCB0cmlnZ2VyKSxcbiAgICAgICAgdHJpZ2dlclxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBpc1RleHQkMSA9IG5vZGUgPT4gbm9kZS5ub2RlVHlwZSA9PT0gVEVYVDtcbiAgICBjb25zdCBpc0VsZW1lbnQgPSBub2RlID0+IG5vZGUubm9kZVR5cGUgPT09IEVMRU1FTlQ7XG4gICAgY29uc3QgdG9MYXN0ID0gbm9kZSA9PiB7XG4gICAgICBpZiAoaXNUZXh0JDEobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHBvaW50KG5vZGUsIG5vZGUuZGF0YS5sZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBub2RlLmNoaWxkTm9kZXM7XG4gICAgICAgIHJldHVybiBjaGlsZHJlbi5sZW5ndGggPiAwID8gdG9MYXN0KGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdKSA6IHBvaW50KG5vZGUsIGNoaWxkcmVuLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB0b0xlYWYgPSAobm9kZSwgb2Zmc2V0KSA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IG5vZGUuY2hpbGROb2RlcztcbiAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwICYmIG9mZnNldCA8IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdG9MZWFmKGNoaWxkcmVuW29mZnNldF0sIDApO1xuICAgICAgfSBlbHNlIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwICYmIGlzRWxlbWVudChub2RlKSAmJiBjaGlsZHJlbi5sZW5ndGggPT09IG9mZnNldCkge1xuICAgICAgICByZXR1cm4gdG9MYXN0KGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwb2ludChub2RlLCBvZmZzZXQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBpc1ByZXZpb3VzQ2hhckNvbnRlbnQgPSAoZG9tLCBsZWFmKSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCByb290ID0gKF9hID0gZG9tLmdldFBhcmVudChsZWFmLmNvbnRhaW5lciwgZG9tLmlzQmxvY2spKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBkb20uZ2V0Um9vdCgpO1xuICAgICAgcmV0dXJuIHJlcGVhdExlZnQoZG9tLCBsZWFmLmNvbnRhaW5lciwgbGVhZi5vZmZzZXQsIChfZWxlbWVudCwgb2Zmc2V0KSA9PiBvZmZzZXQgPT09IDAgPyAtMSA6IG9mZnNldCwgcm9vdCkuZmlsdGVyKHNwb3QgPT4ge1xuICAgICAgICBjb25zdCBjaGFyID0gc3BvdC5jb250YWluZXIuZGF0YS5jaGFyQXQoc3BvdC5vZmZzZXQgLSAxKTtcbiAgICAgICAgcmV0dXJuICFpc1doaXRlc3BhY2UoY2hhcik7XG4gICAgICB9KS5pc1NvbWUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzU3RhcnRPZldvcmQgPSBkb20gPT4gcm5nID0+IHtcbiAgICAgIGNvbnN0IGxlYWYgPSB0b0xlYWYocm5nLnN0YXJ0Q29udGFpbmVyLCBybmcuc3RhcnRPZmZzZXQpO1xuICAgICAgcmV0dXJuICFpc1ByZXZpb3VzQ2hhckNvbnRlbnQoZG9tLCBsZWFmKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFRyaWdnZXJDb250ZXh0ID0gKGRvbSwgaW5pdFJhbmdlLCBkYXRhYmFzZSkgPT4gZmluZE1hcChkYXRhYmFzZS50cmlnZ2VycywgdHJpZ2dlciA9PiBnZXRDb250ZXh0KGRvbSwgaW5pdFJhbmdlLCB0cmlnZ2VyKSk7XG4gICAgY29uc3QgbG9va3VwID0gKGVkaXRvciwgZ2V0RGF0YWJhc2UpID0+IHtcbiAgICAgIGNvbnN0IGRhdGFiYXNlID0gZ2V0RGF0YWJhc2UoKTtcbiAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICByZXR1cm4gZ2V0VHJpZ2dlckNvbnRleHQoZWRpdG9yLmRvbSwgcm5nLCBkYXRhYmFzZSkuYmluZChjb250ZXh0ID0+IGxvb2t1cFdpdGhDb250ZXh0KGVkaXRvciwgZ2V0RGF0YWJhc2UsIGNvbnRleHQpKTtcbiAgICB9O1xuICAgIGNvbnN0IGxvb2t1cFdpdGhDb250ZXh0ID0gKGVkaXRvciwgZ2V0RGF0YWJhc2UsIGNvbnRleHQsIGZldGNoT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBkYXRhYmFzZSA9IGdldERhdGFiYXNlKCk7XG4gICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgY29uc3Qgc3RhcnRUZXh0ID0gKF9hID0gcm5nLnN0YXJ0Q29udGFpbmVyLm5vZGVWYWx1ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgICBjb25zdCBhdXRvY29tcGxldGVycyA9IGZpbHRlciQ1KGRhdGFiYXNlLmxvb2t1cEJ5VHJpZ2dlcihjb250ZXh0LnRyaWdnZXIpLCBhdXRvY29tcGxldGVyID0+IGNvbnRleHQudGV4dC5sZW5ndGggPj0gYXV0b2NvbXBsZXRlci5taW5DaGFycyAmJiBhdXRvY29tcGxldGVyLm1hdGNoZXMuZ2V0T3JUaHVuaygoKSA9PiBpc1N0YXJ0T2ZXb3JkKGVkaXRvci5kb20pKShjb250ZXh0LnJhbmdlLCBzdGFydFRleHQsIGNvbnRleHQudGV4dCkpO1xuICAgICAgaWYgKGF1dG9jb21wbGV0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgbG9va3VwRGF0YSA9IFByb21pc2UuYWxsKG1hcCQzKGF1dG9jb21wbGV0ZXJzLCBhYyA9PiB7XG4gICAgICAgIGNvbnN0IGZldGNoUmVzdWx0ID0gYWMuZmV0Y2goY29udGV4dC50ZXh0LCBhYy5tYXhSZXN1bHRzLCBmZXRjaE9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gZmV0Y2hSZXN1bHQudGhlbihyZXN1bHRzID0+ICh7XG4gICAgICAgICAgbWF0Y2hUZXh0OiBjb250ZXh0LnRleHQsXG4gICAgICAgICAgaXRlbXM6IHJlc3VsdHMsXG4gICAgICAgICAgY29sdW1uczogYWMuY29sdW1ucyxcbiAgICAgICAgICBvbkFjdGlvbjogYWMub25BY3Rpb24sXG4gICAgICAgICAgaGlnaGxpZ2h0T246IGFjLmhpZ2hsaWdodE9uXG4gICAgICAgIH0pKTtcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgbG9va3VwRGF0YSxcbiAgICAgICAgY29udGV4dFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHZhciBTaW1wbGVSZXN1bHRUeXBlO1xuICAgIChmdW5jdGlvbiAoU2ltcGxlUmVzdWx0VHlwZSkge1xuICAgICAgU2ltcGxlUmVzdWx0VHlwZVtTaW1wbGVSZXN1bHRUeXBlWydFcnJvciddID0gMF0gPSAnRXJyb3InO1xuICAgICAgU2ltcGxlUmVzdWx0VHlwZVtTaW1wbGVSZXN1bHRUeXBlWydWYWx1ZSddID0gMV0gPSAnVmFsdWUnO1xuICAgIH0oU2ltcGxlUmVzdWx0VHlwZSB8fCAoU2ltcGxlUmVzdWx0VHlwZSA9IHt9KSkpO1xuICAgIGNvbnN0IGZvbGQkMSA9IChyZXMsIG9uRXJyb3IsIG9uVmFsdWUpID0+IHJlcy5zdHlwZSA9PT0gU2ltcGxlUmVzdWx0VHlwZS5FcnJvciA/IG9uRXJyb3IocmVzLnNlcnJvcikgOiBvblZhbHVlKHJlcy5zdmFsdWUpO1xuICAgIGNvbnN0IHBhcnRpdGlvbiA9IHJlc3VsdHMgPT4ge1xuICAgICAgY29uc3QgdmFsdWVzID0gW107XG4gICAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICAgIGVhY2gkZShyZXN1bHRzLCBvYmogPT4ge1xuICAgICAgICBmb2xkJDEob2JqLCBlcnIgPT4gZXJyb3JzLnB1c2goZXJyKSwgdmFsID0+IHZhbHVlcy5wdXNoKHZhbCkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIGVycm9yc1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IG1hcEVycm9yID0gKHJlcywgZikgPT4ge1xuICAgICAgaWYgKHJlcy5zdHlwZSA9PT0gU2ltcGxlUmVzdWx0VHlwZS5FcnJvcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0eXBlOiBTaW1wbGVSZXN1bHRUeXBlLkVycm9yLFxuICAgICAgICAgIHNlcnJvcjogZihyZXMuc2Vycm9yKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1hcCA9IChyZXMsIGYpID0+IHtcbiAgICAgIGlmIChyZXMuc3R5cGUgPT09IFNpbXBsZVJlc3VsdFR5cGUuVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdHlwZTogU2ltcGxlUmVzdWx0VHlwZS5WYWx1ZSxcbiAgICAgICAgICBzdmFsdWU6IGYocmVzLnN2YWx1ZSlcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBiaW5kJDEgPSAocmVzLCBmKSA9PiB7XG4gICAgICBpZiAocmVzLnN0eXBlID09PSBTaW1wbGVSZXN1bHRUeXBlLlZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmKHJlcy5zdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGJpbmRFcnJvciA9IChyZXMsIGYpID0+IHtcbiAgICAgIGlmIChyZXMuc3R5cGUgPT09IFNpbXBsZVJlc3VsdFR5cGUuRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGYocmVzLnNlcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc3ZhbHVlID0gdiA9PiAoe1xuICAgICAgc3R5cGU6IFNpbXBsZVJlc3VsdFR5cGUuVmFsdWUsXG4gICAgICBzdmFsdWU6IHZcbiAgICB9KTtcbiAgICBjb25zdCBzZXJyb3IgPSBlID0+ICh7XG4gICAgICBzdHlwZTogU2ltcGxlUmVzdWx0VHlwZS5FcnJvcixcbiAgICAgIHNlcnJvcjogZVxuICAgIH0pO1xuICAgIGNvbnN0IHRvUmVzdWx0ID0gcmVzID0+IGZvbGQkMShyZXMsIFJlc3VsdC5lcnJvciwgUmVzdWx0LnZhbHVlKTtcbiAgICBjb25zdCBmcm9tUmVzdWx0ID0gcmVzID0+IHJlcy5mb2xkKHNlcnJvciwgc3ZhbHVlKTtcbiAgICBjb25zdCBTaW1wbGVSZXN1bHQgPSB7XG4gICAgICBmcm9tUmVzdWx0LFxuICAgICAgdG9SZXN1bHQsXG4gICAgICBzdmFsdWUsXG4gICAgICBwYXJ0aXRpb24sXG4gICAgICBzZXJyb3IsXG4gICAgICBiaW5kOiBiaW5kJDEsXG4gICAgICBiaW5kRXJyb3IsXG4gICAgICBtYXAsXG4gICAgICBtYXBFcnJvcixcbiAgICAgIGZvbGQ6IGZvbGQkMVxuICAgIH07XG5cbiAgICBjb25zdCBmb3JtYXRPYmogPSBpbnB1dCA9PiB7XG4gICAgICByZXR1cm4gaXNPYmplY3QoaW5wdXQpICYmIGtleXMoaW5wdXQpLmxlbmd0aCA+IDEwMCA/ICcgcmVtb3ZlZCBkdWUgdG8gc2l6ZScgOiBKU09OLnN0cmluZ2lmeShpbnB1dCwgbnVsbCwgMik7XG4gICAgfTtcbiAgICBjb25zdCBmb3JtYXRFcnJvcnMgPSBlcnJvcnMgPT4ge1xuICAgICAgY29uc3QgZXMgPSBlcnJvcnMubGVuZ3RoID4gMTAgPyBlcnJvcnMuc2xpY2UoMCwgMTApLmNvbmNhdChbe1xuICAgICAgICAgIHBhdGg6IFtdLFxuICAgICAgICAgIGdldEVycm9ySW5mbzogY29uc3RhbnQoJy4uLiAob25seSBzaG93aW5nIGZpcnN0IHRlbiBmYWlsdXJlcyknKVxuICAgICAgICB9XSkgOiBlcnJvcnM7XG4gICAgICByZXR1cm4gbWFwJDMoZXMsIGUgPT4ge1xuICAgICAgICByZXR1cm4gJ0ZhaWxlZCBwYXRoOiAoJyArIGUucGF0aC5qb2luKCcgPiAnKSArICcpXFxuJyArIGUuZ2V0RXJyb3JJbmZvKCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbnUgPSAocGF0aCwgZ2V0RXJyb3JJbmZvKSA9PiB7XG4gICAgICByZXR1cm4gU2ltcGxlUmVzdWx0LnNlcnJvcihbe1xuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgZ2V0RXJyb3JJbmZvXG4gICAgICAgIH1dKTtcbiAgICB9O1xuICAgIGNvbnN0IG1pc3NpbmdSZXF1aXJlZCA9IChwYXRoLCBrZXksIG9iaikgPT4gbnUocGF0aCwgKCkgPT4gJ0NvdWxkIG5vdCBmaW5kIHZhbGlkICpyZXF1aXJlZCogdmFsdWUgZm9yIFwiJyArIGtleSArICdcIiBpbiAnICsgZm9ybWF0T2JqKG9iaikpO1xuICAgIGNvbnN0IG1pc3NpbmdLZXkgPSAocGF0aCwga2V5KSA9PiBudShwYXRoLCAoKSA9PiAnQ2hvaWNlIHNjaGVtYSBkaWQgbm90IGNvbnRhaW4gY2hvaWNlIGtleTogXCInICsga2V5ICsgJ1wiJyk7XG4gICAgY29uc3QgbWlzc2luZ0JyYW5jaCA9IChwYXRoLCBicmFuY2hlcywgYnJhbmNoKSA9PiBudShwYXRoLCAoKSA9PiAnVGhlIGNob3NlbiBzY2hlbWE6IFwiJyArIGJyYW5jaCArICdcIiBkaWQgbm90IGV4aXN0IGluIGJyYW5jaGVzOiAnICsgZm9ybWF0T2JqKGJyYW5jaGVzKSk7XG4gICAgY29uc3QgY3VzdG9tID0gKHBhdGgsIGVycikgPT4gbnUocGF0aCwgY29uc3RhbnQoZXJyKSk7XG5cbiAgICBjb25zdCBjaG9vc2VGcm9tID0gKHBhdGgsIGlucHV0LCBicmFuY2hlcywgY2gpID0+IHtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IGdldCRhKGJyYW5jaGVzLCBjaCk7XG4gICAgICByZXR1cm4gZmllbGRzLmZvbGQoKCkgPT4gbWlzc2luZ0JyYW5jaChwYXRoLCBicmFuY2hlcywgY2gpLCB2cCA9PiB2cC5leHRyYWN0KHBhdGguY29uY2F0KFsnYnJhbmNoOiAnICsgY2hdKSwgaW5wdXQpKTtcbiAgICB9O1xuICAgIGNvbnN0IGNob29zZSQxID0gKGtleSwgYnJhbmNoZXMpID0+IHtcbiAgICAgIGNvbnN0IGV4dHJhY3QgPSAocGF0aCwgaW5wdXQpID0+IHtcbiAgICAgICAgY29uc3QgY2hvaWNlID0gZ2V0JGEoaW5wdXQsIGtleSk7XG4gICAgICAgIHJldHVybiBjaG9pY2UuZm9sZCgoKSA9PiBtaXNzaW5nS2V5KHBhdGgsIGtleSksIGNob3NlbiA9PiBjaG9vc2VGcm9tKHBhdGgsIGlucHV0LCBicmFuY2hlcywgY2hvc2VuKSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdG9TdHJpbmcgPSAoKSA9PiAnY2hvb3NlT24oJyArIGtleSArICcpLiBQb3NzaWJsZSB2YWx1ZXM6ICcgKyBrZXlzKGJyYW5jaGVzKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4dHJhY3QsXG4gICAgICAgIHRvU3RyaW5nXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBzaGFsbG93ID0gKG9sZCwgbnUpID0+IHtcbiAgICAgIHJldHVybiBudTtcbiAgICB9O1xuICAgIGNvbnN0IGRlZXAgPSAob2xkLCBudSkgPT4ge1xuICAgICAgY29uc3QgYm90aE9iamVjdHMgPSBpc1BsYWluT2JqZWN0KG9sZCkgJiYgaXNQbGFpbk9iamVjdChudSk7XG4gICAgICByZXR1cm4gYm90aE9iamVjdHMgPyBkZWVwTWVyZ2Uob2xkLCBudSkgOiBudTtcbiAgICB9O1xuICAgIGNvbnN0IGJhc2VNZXJnZSA9IG1lcmdlciA9PiB7XG4gICAgICByZXR1cm4gKC4uLm9iamVjdHMpID0+IHtcbiAgICAgICAgaWYgKG9iamVjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBtZXJnZSB6ZXJvIG9iamVjdHNgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXQgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBvYmplY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgY29uc3QgY3VyT2JqZWN0ID0gb2JqZWN0c1tqXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjdXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChoYXMkMihjdXJPYmplY3QsIGtleSkpIHtcbiAgICAgICAgICAgICAgcmV0W2tleV0gPSBtZXJnZXIocmV0W2tleV0sIGN1ck9iamVjdFtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBkZWVwTWVyZ2UgPSBiYXNlTWVyZ2UoZGVlcCk7XG4gICAgY29uc3QgbWVyZ2UgPSBiYXNlTWVyZ2Uoc2hhbGxvdyk7XG5cbiAgICBjb25zdCByZXF1aXJlZCA9ICgpID0+ICh7XG4gICAgICB0YWc6ICdyZXF1aXJlZCcsXG4gICAgICBwcm9jZXNzOiB7fVxuICAgIH0pO1xuICAgIGNvbnN0IGRlZmF1bHRlZFRodW5rID0gZmFsbGJhY2tUaHVuayA9PiAoe1xuICAgICAgdGFnOiAnZGVmYXVsdGVkVGh1bmsnLFxuICAgICAgcHJvY2VzczogZmFsbGJhY2tUaHVua1xuICAgIH0pO1xuICAgIGNvbnN0IGRlZmF1bHRlZCQxID0gZmFsbGJhY2sgPT4gZGVmYXVsdGVkVGh1bmsoY29uc3RhbnQoZmFsbGJhY2spKTtcbiAgICBjb25zdCBhc09wdGlvbiA9ICgpID0+ICh7XG4gICAgICB0YWc6ICdvcHRpb24nLFxuICAgICAgcHJvY2Vzczoge31cbiAgICB9KTtcblxuICAgIGNvbnN0IG1lcmdlVmFsdWVzID0gKHZhbHVlcywgYmFzZSkgPT4gdmFsdWVzLmxlbmd0aCA+IDAgPyBTaW1wbGVSZXN1bHQuc3ZhbHVlKGRlZXBNZXJnZShiYXNlLCBtZXJnZS5hcHBseSh1bmRlZmluZWQsIHZhbHVlcykpKSA6IFNpbXBsZVJlc3VsdC5zdmFsdWUoYmFzZSk7XG4gICAgY29uc3QgbWVyZ2VFcnJvcnMgPSBlcnJvcnMgPT4gY29tcG9zZShTaW1wbGVSZXN1bHQuc2Vycm9yLCBmbGF0dGVuKShlcnJvcnMpO1xuICAgIGNvbnN0IGNvbnNvbGlkYXRlT2JqID0gKG9iamVjdHMsIGJhc2UpID0+IHtcbiAgICAgIGNvbnN0IHBhcnRpdGlvbiA9IFNpbXBsZVJlc3VsdC5wYXJ0aXRpb24ob2JqZWN0cyk7XG4gICAgICByZXR1cm4gcGFydGl0aW9uLmVycm9ycy5sZW5ndGggPiAwID8gbWVyZ2VFcnJvcnMocGFydGl0aW9uLmVycm9ycykgOiBtZXJnZVZhbHVlcyhwYXJ0aXRpb24udmFsdWVzLCBiYXNlKTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbnNvbGlkYXRlQXJyID0gb2JqZWN0cyA9PiB7XG4gICAgICBjb25zdCBwYXJ0aXRpb25zID0gU2ltcGxlUmVzdWx0LnBhcnRpdGlvbihvYmplY3RzKTtcbiAgICAgIHJldHVybiBwYXJ0aXRpb25zLmVycm9ycy5sZW5ndGggPiAwID8gbWVyZ2VFcnJvcnMocGFydGl0aW9ucy5lcnJvcnMpIDogU2ltcGxlUmVzdWx0LnN2YWx1ZShwYXJ0aXRpb25zLnZhbHVlcyk7XG4gICAgfTtcbiAgICBjb25zdCBSZXN1bHRDb21iaW5lID0ge1xuICAgICAgY29uc29saWRhdGVPYmosXG4gICAgICBjb25zb2xpZGF0ZUFyclxuICAgIH07XG5cbiAgICBjb25zdCBmaWVsZCQxID0gKGtleSwgbmV3S2V5LCBwcmVzZW5jZSwgcHJvcCkgPT4gKHtcbiAgICAgIHRhZzogJ2ZpZWxkJyxcbiAgICAgIGtleSxcbiAgICAgIG5ld0tleSxcbiAgICAgIHByZXNlbmNlLFxuICAgICAgcHJvcFxuICAgIH0pO1xuICAgIGNvbnN0IGN1c3RvbUZpZWxkJDEgPSAobmV3S2V5LCBpbnN0YW50aWF0b3IpID0+ICh7XG4gICAgICB0YWc6ICdjdXN0b20nLFxuICAgICAgbmV3S2V5LFxuICAgICAgaW5zdGFudGlhdG9yXG4gICAgfSk7XG4gICAgY29uc3QgZm9sZCA9ICh2YWx1ZSwgaWZGaWVsZCwgaWZDdXN0b20pID0+IHtcbiAgICAgIHN3aXRjaCAodmFsdWUudGFnKSB7XG4gICAgICBjYXNlICdmaWVsZCc6XG4gICAgICAgIHJldHVybiBpZkZpZWxkKHZhbHVlLmtleSwgdmFsdWUubmV3S2V5LCB2YWx1ZS5wcmVzZW5jZSwgdmFsdWUucHJvcCk7XG4gICAgICBjYXNlICdjdXN0b20nOlxuICAgICAgICByZXR1cm4gaWZDdXN0b20odmFsdWUubmV3S2V5LCB2YWx1ZS5pbnN0YW50aWF0b3IpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB2YWx1ZSA9IHZhbGlkYXRvciA9PiB7XG4gICAgICBjb25zdCBleHRyYWN0ID0gKHBhdGgsIHZhbCkgPT4ge1xuICAgICAgICByZXR1cm4gU2ltcGxlUmVzdWx0LmJpbmRFcnJvcih2YWxpZGF0b3IodmFsKSwgZXJyID0+IGN1c3RvbShwYXRoLCBlcnIpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCB0b1N0cmluZyA9IGNvbnN0YW50KCd2YWwnKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4dHJhY3QsXG4gICAgICAgIHRvU3RyaW5nXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgYW55VmFsdWUkMSA9IHZhbHVlKFNpbXBsZVJlc3VsdC5zdmFsdWUpO1xuXG4gICAgY29uc3QgcmVxdWlyZWRBY2Nlc3MgPSAocGF0aCwgb2JqLCBrZXksIGJ1bmRsZSkgPT4gZ2V0JGEob2JqLCBrZXkpLmZvbGQoKCkgPT4gbWlzc2luZ1JlcXVpcmVkKHBhdGgsIGtleSwgb2JqKSwgYnVuZGxlKTtcbiAgICBjb25zdCBmYWxsYmFja0FjY2VzcyA9IChvYmosIGtleSwgZmFsbGJhY2ssIGJ1bmRsZSkgPT4ge1xuICAgICAgY29uc3QgdiA9IGdldCRhKG9iaiwga2V5KS5nZXRPclRodW5rKCgpID0+IGZhbGxiYWNrKG9iaikpO1xuICAgICAgcmV0dXJuIGJ1bmRsZSh2KTtcbiAgICB9O1xuICAgIGNvbnN0IG9wdGlvbkFjY2VzcyA9IChvYmosIGtleSwgYnVuZGxlKSA9PiBidW5kbGUoZ2V0JGEob2JqLCBrZXkpKTtcbiAgICBjb25zdCBvcHRpb25EZWZhdWx0ZWRBY2Nlc3MgPSAob2JqLCBrZXksIGZhbGxiYWNrLCBidW5kbGUpID0+IHtcbiAgICAgIGNvbnN0IG9wdCA9IGdldCRhKG9iaiwga2V5KS5tYXAodmFsID0+IHZhbCA9PT0gdHJ1ZSA/IGZhbGxiYWNrKG9iaikgOiB2YWwpO1xuICAgICAgcmV0dXJuIGJ1bmRsZShvcHQpO1xuICAgIH07XG4gICAgY29uc3QgZXh0cmFjdEZpZWxkID0gKGZpZWxkLCBwYXRoLCBvYmosIGtleSwgcHJvcCkgPT4ge1xuICAgICAgY29uc3QgYnVuZGxlID0gYXYgPT4gcHJvcC5leHRyYWN0KHBhdGguY29uY2F0KFtrZXldKSwgYXYpO1xuICAgICAgY29uc3QgYnVuZGxlQXNPcHRpb24gPSBvcHRWYWx1ZSA9PiBvcHRWYWx1ZS5mb2xkKCgpID0+IFNpbXBsZVJlc3VsdC5zdmFsdWUoT3B0aW9uYWwubm9uZSgpKSwgb3YgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwcm9wLmV4dHJhY3QocGF0aC5jb25jYXQoW2tleV0pLCBvdik7XG4gICAgICAgIHJldHVybiBTaW1wbGVSZXN1bHQubWFwKHJlc3VsdCwgT3B0aW9uYWwuc29tZSk7XG4gICAgICB9KTtcbiAgICAgIHN3aXRjaCAoZmllbGQudGFnKSB7XG4gICAgICBjYXNlICdyZXF1aXJlZCc6XG4gICAgICAgIHJldHVybiByZXF1aXJlZEFjY2VzcyhwYXRoLCBvYmosIGtleSwgYnVuZGxlKTtcbiAgICAgIGNhc2UgJ2RlZmF1bHRlZFRodW5rJzpcbiAgICAgICAgcmV0dXJuIGZhbGxiYWNrQWNjZXNzKG9iaiwga2V5LCBmaWVsZC5wcm9jZXNzLCBidW5kbGUpO1xuICAgICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgICAgcmV0dXJuIG9wdGlvbkFjY2VzcyhvYmosIGtleSwgYnVuZGxlQXNPcHRpb24pO1xuICAgICAgY2FzZSAnZGVmYXVsdGVkT3B0aW9uVGh1bmsnOlxuICAgICAgICByZXR1cm4gb3B0aW9uRGVmYXVsdGVkQWNjZXNzKG9iaiwga2V5LCBmaWVsZC5wcm9jZXNzLCBidW5kbGVBc09wdGlvbik7XG4gICAgICBjYXNlICdtZXJnZVdpdGhUaHVuayc6IHtcbiAgICAgICAgICByZXR1cm4gZmFsbGJhY2tBY2Nlc3Mob2JqLCBrZXksIGNvbnN0YW50KHt9KSwgdiA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkZWVwTWVyZ2UoZmllbGQucHJvY2VzcyhvYmopLCB2KTtcbiAgICAgICAgICAgIHJldHVybiBidW5kbGUocmVzdWx0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZXh0cmFjdEZpZWxkcyA9IChwYXRoLCBvYmosIGZpZWxkcykgPT4ge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9IHt9O1xuICAgICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICBmb2xkKGZpZWxkLCAoa2V5LCBuZXdLZXksIHByZXNlbmNlLCBwcm9wKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdEZpZWxkKHByZXNlbmNlLCBwYXRoLCBvYmosIGtleSwgcHJvcCk7XG4gICAgICAgICAgU2ltcGxlUmVzdWx0LmZvbGQocmVzdWx0LCBlcnIgPT4ge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2goLi4uZXJyKTtcbiAgICAgICAgICB9LCByZXMgPT4ge1xuICAgICAgICAgICAgc3VjY2Vzc1tuZXdLZXldID0gcmVzO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCAobmV3S2V5LCBpbnN0YW50aWF0b3IpID0+IHtcbiAgICAgICAgICBzdWNjZXNzW25ld0tleV0gPSBpbnN0YW50aWF0b3Iob2JqKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXJyb3JzLmxlbmd0aCA+IDAgPyBTaW1wbGVSZXN1bHQuc2Vycm9yKGVycm9ycykgOiBTaW1wbGVSZXN1bHQuc3ZhbHVlKHN1Y2Nlc3MpO1xuICAgIH07XG4gICAgY29uc3Qgb2JqT2YgPSB2YWx1ZXMgPT4ge1xuICAgICAgY29uc3QgZXh0cmFjdCA9IChwYXRoLCBvKSA9PiBleHRyYWN0RmllbGRzKHBhdGgsIG8sIHZhbHVlcyk7XG4gICAgICBjb25zdCB0b1N0cmluZyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZmllbGRTdHJpbmdzID0gbWFwJDModmFsdWVzLCB2YWx1ZSA9PiBmb2xkKHZhbHVlLCAoa2V5LCBfb2tleSwgX3ByZXNlbmNlLCBwcm9wKSA9PiBrZXkgKyAnIC0+ICcgKyBwcm9wLnRvU3RyaW5nKCksIChuZXdLZXksIF9pbnN0YW50aWF0b3IpID0+ICdzdGF0ZSgnICsgbmV3S2V5ICsgJyknKSk7XG4gICAgICAgIHJldHVybiAnb2Jqe1xcbicgKyBmaWVsZFN0cmluZ3Muam9pbignXFxuJykgKyAnfSc7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXh0cmFjdCxcbiAgICAgICAgdG9TdHJpbmdcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBhcnJPZiA9IHByb3AgPT4ge1xuICAgICAgY29uc3QgZXh0cmFjdCA9IChwYXRoLCBhcnJheSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gbWFwJDMoYXJyYXksIChhLCBpKSA9PiBwcm9wLmV4dHJhY3QocGF0aC5jb25jYXQoWydbJyArIGkgKyAnXSddKSwgYSkpO1xuICAgICAgICByZXR1cm4gUmVzdWx0Q29tYmluZS5jb25zb2xpZGF0ZUFycihyZXN1bHRzKTtcbiAgICAgIH07XG4gICAgICBjb25zdCB0b1N0cmluZyA9ICgpID0+ICdhcnJheSgnICsgcHJvcC50b1N0cmluZygpICsgJyknO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXh0cmFjdCxcbiAgICAgICAgdG9TdHJpbmdcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHZhbHVlT2YgPSB2YWxpZGF0b3IgPT4gdmFsdWUodiA9PiB2YWxpZGF0b3IodikuZm9sZChTaW1wbGVSZXN1bHQuc2Vycm9yLCBTaW1wbGVSZXN1bHQuc3ZhbHVlKSk7XG4gICAgY29uc3QgZXh0cmFjdFZhbHVlID0gKGxhYmVsLCBwcm9wLCBvYmopID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IHByb3AuZXh0cmFjdChbbGFiZWxdLCBvYmopO1xuICAgICAgcmV0dXJuIFNpbXBsZVJlc3VsdC5tYXBFcnJvcihyZXMsIGVycnMgPT4gKHtcbiAgICAgICAgaW5wdXQ6IG9iaixcbiAgICAgICAgZXJyb3JzOiBlcnJzXG4gICAgICB9KSk7XG4gICAgfTtcbiAgICBjb25zdCBhc1JhdyA9IChsYWJlbCwgcHJvcCwgb2JqKSA9PiBTaW1wbGVSZXN1bHQudG9SZXN1bHQoZXh0cmFjdFZhbHVlKGxhYmVsLCBwcm9wLCBvYmopKTtcbiAgICBjb25zdCBmb3JtYXRFcnJvciA9IGVyckluZm8gPT4ge1xuICAgICAgcmV0dXJuICdFcnJvcnM6IFxcbicgKyBmb3JtYXRFcnJvcnMoZXJySW5mby5lcnJvcnMpLmpvaW4oJ1xcbicpICsgJ1xcblxcbklucHV0IG9iamVjdDogJyArIGZvcm1hdE9iaihlcnJJbmZvLmlucHV0KTtcbiAgICB9O1xuICAgIGNvbnN0IGNob29zZSA9IChrZXksIGJyYW5jaGVzKSA9PiBjaG9vc2UkMShrZXksIG1hcCQyKGJyYW5jaGVzLCBvYmpPZikpO1xuXG4gICAgY29uc3QgYW55VmFsdWUgPSBjb25zdGFudChhbnlWYWx1ZSQxKTtcbiAgICBjb25zdCB0eXBlZFZhbHVlID0gKHZhbGlkYXRvciwgZXhwZWN0ZWRUeXBlKSA9PiB2YWx1ZShhID0+IHtcbiAgICAgIGNvbnN0IGFjdHVhbFR5cGUgPSB0eXBlb2YgYTtcbiAgICAgIHJldHVybiB2YWxpZGF0b3IoYSkgPyBTaW1wbGVSZXN1bHQuc3ZhbHVlKGEpIDogU2ltcGxlUmVzdWx0LnNlcnJvcihgRXhwZWN0ZWQgdHlwZTogJHsgZXhwZWN0ZWRUeXBlIH0gYnV0IGdvdDogJHsgYWN0dWFsVHlwZSB9YCk7XG4gICAgfSk7XG4gICAgY29uc3QgbnVtYmVyID0gdHlwZWRWYWx1ZShpc051bWJlciwgJ251bWJlcicpO1xuICAgIGNvbnN0IHN0cmluZyA9IHR5cGVkVmFsdWUoaXNTdHJpbmcsICdzdHJpbmcnKTtcbiAgICBjb25zdCBib29sZWFuID0gdHlwZWRWYWx1ZShpc0Jvb2xlYW4sICdib29sZWFuJyk7XG4gICAgY29uc3QgZnVuY3Rpb25Qcm9jZXNzb3IgPSB0eXBlZFZhbHVlKGlzRnVuY3Rpb24sICdmdW5jdGlvbicpO1xuXG4gICAgY29uc3QgZmllbGQgPSBmaWVsZCQxO1xuICAgIGNvbnN0IGN1c3RvbUZpZWxkID0gY3VzdG9tRmllbGQkMTtcbiAgICBjb25zdCB2YWxpZGF0ZUVudW0gPSB2YWx1ZXMgPT4gdmFsdWVPZih2YWx1ZSA9PiBjb250YWlucyQyKHZhbHVlcywgdmFsdWUpID8gUmVzdWx0LnZhbHVlKHZhbHVlKSA6IFJlc3VsdC5lcnJvcihgVW5zdXBwb3J0ZWQgdmFsdWU6IFwiJHsgdmFsdWUgfVwiLCBjaG9vc2Ugb25lIG9mIFwiJHsgdmFsdWVzLmpvaW4oJywgJykgfVwiLmApKTtcbiAgICBjb25zdCByZXF1aXJlZE9mID0gKGtleSwgc2NoZW1hKSA9PiBmaWVsZChrZXksIGtleSwgcmVxdWlyZWQoKSwgc2NoZW1hKTtcbiAgICBjb25zdCByZXF1aXJlZFN0cmluZyA9IGtleSA9PiByZXF1aXJlZE9mKGtleSwgc3RyaW5nKTtcbiAgICBjb25zdCByZXF1aXJlZEZ1bmN0aW9uID0ga2V5ID0+IHJlcXVpcmVkT2Yoa2V5LCBmdW5jdGlvblByb2Nlc3Nvcik7XG4gICAgY29uc3QgcmVxdWlyZWRBcnJheU9mID0gKGtleSwgc2NoZW1hKSA9PiBmaWVsZChrZXksIGtleSwgcmVxdWlyZWQoKSwgYXJyT2Yoc2NoZW1hKSk7XG4gICAgY29uc3Qgb3B0aW9uT2YgPSAoa2V5LCBzY2hlbWEpID0+IGZpZWxkKGtleSwga2V5LCBhc09wdGlvbigpLCBzY2hlbWEpO1xuICAgIGNvbnN0IG9wdGlvblN0cmluZyA9IGtleSA9PiBvcHRpb25PZihrZXksIHN0cmluZyk7XG4gICAgY29uc3Qgb3B0aW9uRnVuY3Rpb24gPSBrZXkgPT4gb3B0aW9uT2Yoa2V5LCBmdW5jdGlvblByb2Nlc3Nvcik7XG4gICAgY29uc3QgZGVmYXVsdGVkID0gKGtleSwgZmFsbGJhY2spID0+IGZpZWxkKGtleSwga2V5LCBkZWZhdWx0ZWQkMShmYWxsYmFjayksIGFueVZhbHVlKCkpO1xuICAgIGNvbnN0IGRlZmF1bHRlZE9mID0gKGtleSwgZmFsbGJhY2ssIHNjaGVtYSkgPT4gZmllbGQoa2V5LCBrZXksIGRlZmF1bHRlZCQxKGZhbGxiYWNrKSwgc2NoZW1hKTtcbiAgICBjb25zdCBkZWZhdWx0ZWROdW1iZXIgPSAoa2V5LCBmYWxsYmFjaykgPT4gZGVmYXVsdGVkT2Yoa2V5LCBmYWxsYmFjaywgbnVtYmVyKTtcbiAgICBjb25zdCBkZWZhdWx0ZWRTdHJpbmcgPSAoa2V5LCBmYWxsYmFjaykgPT4gZGVmYXVsdGVkT2Yoa2V5LCBmYWxsYmFjaywgc3RyaW5nKTtcbiAgICBjb25zdCBkZWZhdWx0ZWRTdHJpbmdFbnVtID0gKGtleSwgZmFsbGJhY2ssIHZhbHVlcykgPT4gZGVmYXVsdGVkT2Yoa2V5LCBmYWxsYmFjaywgdmFsaWRhdGVFbnVtKHZhbHVlcykpO1xuICAgIGNvbnN0IGRlZmF1bHRlZEJvb2xlYW4gPSAoa2V5LCBmYWxsYmFjaykgPT4gZGVmYXVsdGVkT2Yoa2V5LCBmYWxsYmFjaywgYm9vbGVhbik7XG4gICAgY29uc3QgZGVmYXVsdGVkRnVuY3Rpb24gPSAoa2V5LCBmYWxsYmFjaykgPT4gZGVmYXVsdGVkT2Yoa2V5LCBmYWxsYmFjaywgZnVuY3Rpb25Qcm9jZXNzb3IpO1xuICAgIGNvbnN0IGRlZmF1bHRlZEFycmF5T2YgPSAoa2V5LCBmYWxsYmFjaywgc2NoZW1hKSA9PiBkZWZhdWx0ZWRPZihrZXksIGZhbGxiYWNrLCBhcnJPZihzY2hlbWEpKTtcblxuICAgIGNvbnN0IHR5cGUgPSByZXF1aXJlZFN0cmluZygndHlwZScpO1xuICAgIGNvbnN0IGZldGNoJDEgPSByZXF1aXJlZEZ1bmN0aW9uKCdmZXRjaCcpO1xuICAgIGNvbnN0IG9uQWN0aW9uID0gcmVxdWlyZWRGdW5jdGlvbignb25BY3Rpb24nKTtcbiAgICBjb25zdCBvblNldHVwID0gZGVmYXVsdGVkRnVuY3Rpb24oJ29uU2V0dXAnLCAoKSA9PiBub29wKTtcbiAgICBjb25zdCBvcHRpb25hbFRleHQgPSBvcHRpb25TdHJpbmcoJ3RleHQnKTtcbiAgICBjb25zdCBvcHRpb25hbEljb24gPSBvcHRpb25TdHJpbmcoJ2ljb24nKTtcbiAgICBjb25zdCBvcHRpb25hbFRvb2x0aXAgPSBvcHRpb25TdHJpbmcoJ3Rvb2x0aXAnKTtcbiAgICBjb25zdCBvcHRpb25hbExhYmVsID0gb3B0aW9uU3RyaW5nKCdsYWJlbCcpO1xuICAgIGNvbnN0IGFjdGl2ZSA9IGRlZmF1bHRlZEJvb2xlYW4oJ2FjdGl2ZScsIGZhbHNlKTtcbiAgICBjb25zdCBlbmFibGVkID0gZGVmYXVsdGVkQm9vbGVhbignZW5hYmxlZCcsIHRydWUpO1xuICAgIGNvbnN0IHByaW1hcnkgPSBkZWZhdWx0ZWRCb29sZWFuKCdwcmltYXJ5JywgZmFsc2UpO1xuICAgIGNvbnN0IGRlZmF1bHRlZENvbHVtbnMgPSBudW0gPT4gZGVmYXVsdGVkKCdjb2x1bW5zJywgbnVtKTtcbiAgICBjb25zdCBkZWZhdWx0ZWRUeXBlID0gdHlwZSA9PiBkZWZhdWx0ZWRTdHJpbmcoJ3R5cGUnLCB0eXBlKTtcblxuICAgIGNvbnN0IGF1dG9jb21wbGV0ZXJTY2hlbWEgPSBvYmpPZihbXG4gICAgICB0eXBlLFxuICAgICAgcmVxdWlyZWRTdHJpbmcoJ3RyaWdnZXInKSxcbiAgICAgIGRlZmF1bHRlZE51bWJlcignbWluQ2hhcnMnLCAxKSxcbiAgICAgIGRlZmF1bHRlZENvbHVtbnMoMSksXG4gICAgICBkZWZhdWx0ZWROdW1iZXIoJ21heFJlc3VsdHMnLCAxMCksXG4gICAgICBvcHRpb25GdW5jdGlvbignbWF0Y2hlcycpLFxuICAgICAgZmV0Y2gkMSxcbiAgICAgIG9uQWN0aW9uLFxuICAgICAgZGVmYXVsdGVkQXJyYXlPZignaGlnaGxpZ2h0T24nLCBbXSwgc3RyaW5nKVxuICAgIF0pO1xuICAgIGNvbnN0IGNyZWF0ZUF1dG9jb21wbGV0ZXIgPSBzcGVjID0+IGFzUmF3KCdBdXRvY29tcGxldGVyJywgYXV0b2NvbXBsZXRlclNjaGVtYSwge1xuICAgICAgdHJpZ2dlcjogc3BlYy5jaCxcbiAgICAgIC4uLnNwZWNcbiAgICB9KTtcblxuICAgIGNvbnN0IGJhc2VUb29sYmFyQnV0dG9uRmllbGRzID0gW1xuICAgICAgZW5hYmxlZCxcbiAgICAgIG9wdGlvbmFsVG9vbHRpcCxcbiAgICAgIG9wdGlvbmFsSWNvbixcbiAgICAgIG9wdGlvbmFsVGV4dCxcbiAgICAgIG9uU2V0dXBcbiAgICBdO1xuXG4gICAgY29uc3QgYmFzZVRvb2xiYXJUb2dnbGVCdXR0b25GaWVsZHMgPSBbYWN0aXZlXS5jb25jYXQoYmFzZVRvb2xiYXJCdXR0b25GaWVsZHMpO1xuXG4gICAgY29uc3QgY29udGV4dEJhckZpZWxkcyA9IFtcbiAgICAgIGRlZmF1bHRlZEZ1bmN0aW9uKCdwcmVkaWNhdGUnLCBuZXZlciksXG4gICAgICBkZWZhdWx0ZWRTdHJpbmdFbnVtKCdzY29wZScsICdub2RlJywgW1xuICAgICAgICAnbm9kZScsXG4gICAgICAgICdlZGl0b3InXG4gICAgICBdKSxcbiAgICAgIGRlZmF1bHRlZFN0cmluZ0VudW0oJ3Bvc2l0aW9uJywgJ3NlbGVjdGlvbicsIFtcbiAgICAgICAgJ25vZGUnLFxuICAgICAgICAnc2VsZWN0aW9uJyxcbiAgICAgICAgJ2xpbmUnXG4gICAgICBdKVxuICAgIF07XG5cbiAgICBjb25zdCBjb250ZXh0QnV0dG9uRmllbGRzID0gYmFzZVRvb2xiYXJCdXR0b25GaWVsZHMuY29uY2F0KFtcbiAgICAgIGRlZmF1bHRlZFR5cGUoJ2NvbnRleHRmb3JtYnV0dG9uJyksXG4gICAgICBwcmltYXJ5LFxuICAgICAgb25BY3Rpb24sXG4gICAgICBjdXN0b21GaWVsZCgnb3JpZ2luYWwnLCBpZGVudGl0eSlcbiAgICBdKTtcbiAgICBjb25zdCBjb250ZXh0VG9nZ2xlQnV0dG9uRmllbGRzID0gYmFzZVRvb2xiYXJUb2dnbGVCdXR0b25GaWVsZHMuY29uY2F0KFtcbiAgICAgIGRlZmF1bHRlZFR5cGUoJ2NvbnRleHRmb3JtYnV0dG9uJyksXG4gICAgICBwcmltYXJ5LFxuICAgICAgb25BY3Rpb24sXG4gICAgICBjdXN0b21GaWVsZCgnb3JpZ2luYWwnLCBpZGVudGl0eSlcbiAgICBdKTtcbiAgICBjb25zdCBsYXVuY2hCdXR0b25GaWVsZHMgPSBiYXNlVG9vbGJhckJ1dHRvbkZpZWxkcy5jb25jYXQoW2RlZmF1bHRlZFR5cGUoJ2NvbnRleHRmb3JtYnV0dG9uJyldKTtcbiAgICBjb25zdCBsYXVuY2hUb2dnbGVCdXR0b25GaWVsZHMgPSBiYXNlVG9vbGJhclRvZ2dsZUJ1dHRvbkZpZWxkcy5jb25jYXQoW2RlZmF1bHRlZFR5cGUoJ2NvbnRleHRmb3JtdG9nZ2xlYnV0dG9uJyldKTtcbiAgICBjb25zdCB0b2dnbGVPck5vcm1hbCA9IGNob29zZSgndHlwZScsIHtcbiAgICAgIGNvbnRleHRmb3JtYnV0dG9uOiBjb250ZXh0QnV0dG9uRmllbGRzLFxuICAgICAgY29udGV4dGZvcm10b2dnbGVidXR0b246IGNvbnRleHRUb2dnbGVCdXR0b25GaWVsZHNcbiAgICB9KTtcbiAgICBvYmpPZihbXG4gICAgICBkZWZhdWx0ZWRUeXBlKCdjb250ZXh0Zm9ybScpLFxuICAgICAgZGVmYXVsdGVkRnVuY3Rpb24oJ2luaXRWYWx1ZScsIGNvbnN0YW50KCcnKSksXG4gICAgICBvcHRpb25hbExhYmVsLFxuICAgICAgcmVxdWlyZWRBcnJheU9mKCdjb21tYW5kcycsIHRvZ2dsZU9yTm9ybWFsKSxcbiAgICAgIG9wdGlvbk9mKCdsYXVuY2gnLCBjaG9vc2UoJ3R5cGUnLCB7XG4gICAgICAgIGNvbnRleHRmb3JtYnV0dG9uOiBsYXVuY2hCdXR0b25GaWVsZHMsXG4gICAgICAgIGNvbnRleHRmb3JtdG9nZ2xlYnV0dG9uOiBsYXVuY2hUb2dnbGVCdXR0b25GaWVsZHNcbiAgICAgIH0pKVxuICAgIF0uY29uY2F0KGNvbnRleHRCYXJGaWVsZHMpKTtcblxuICAgIGNvbnN0IHJlZ2lzdGVyJDIgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgcG9wdXBzID0gZWRpdG9yLnVpLnJlZ2lzdHJ5LmdldEFsbCgpLnBvcHVwcztcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSBtYXAkMihwb3B1cHMsIHBvcHVwID0+IGNyZWF0ZUF1dG9jb21wbGV0ZXIocG9wdXApLmZvbGQoZXJyID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdEVycm9yKGVycikpO1xuICAgICAgfSwgaWRlbnRpdHkpKTtcbiAgICAgIGNvbnN0IHRyaWdnZXJzID0gc3RyaW5nQXJyYXkobWFwVG9BcnJheShkYXRhc2V0LCB2ID0+IHYudHJpZ2dlcikpO1xuICAgICAgY29uc3QgZGF0YXNldFZhbHVlcyA9IHZhbHVlcyhkYXRhc2V0KTtcbiAgICAgIGNvbnN0IGxvb2t1cEJ5VHJpZ2dlciA9IHRyaWdnZXIgPT4gZmlsdGVyJDUoZGF0YXNldFZhbHVlcywgZHYgPT4gZHYudHJpZ2dlciA9PT0gdHJpZ2dlcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhc2V0LFxuICAgICAgICB0cmlnZ2VycyxcbiAgICAgICAgbG9va3VwQnlUcmlnZ2VyXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBzZXR1cEVkaXRvcklucHV0ID0gKGVkaXRvciwgYXBpKSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGUgPSBsYXN0JDEoYXBpLmxvYWQsIDUwKTtcbiAgICAgIGVkaXRvci5vbigna2V5cHJlc3MgY29tcG9zaXRpb25lbmQnLCBlID0+IHtcbiAgICAgICAgaWYgKGUud2hpY2ggPT09IDI3KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZS50aHJvdHRsZSgpO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ2tleWRvd24nLCBlID0+IHtcbiAgICAgICAgY29uc3Qga2V5Q29kZSA9IGUud2hpY2g7XG4gICAgICAgIGlmIChrZXlDb2RlID09PSA4KSB7XG4gICAgICAgICAgdXBkYXRlLnRocm90dGxlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgICBhcGkuY2FuY2VsSWZOZWNlc3NhcnkoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ3JlbW92ZScsIHVwZGF0ZS5jYW5jZWwpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0dXAkaiA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBhY3RpdmVBdXRvY29tcGxldGVyID0gdmFsdWUkMigpO1xuICAgICAgY29uc3QgdWlBY3RpdmUgPSBDZWxsKGZhbHNlKTtcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gYWN0aXZlQXV0b2NvbXBsZXRlci5pc1NldDtcbiAgICAgIGNvbnN0IGNhbmNlbElmTmVjZXNzYXJ5ID0gKCkgPT4ge1xuICAgICAgICBpZiAoaXNBY3RpdmUoKSkge1xuICAgICAgICAgIHJlbW92ZUF1dG9jb21wbGV0ZXJEZWNvcmF0aW9uKGVkaXRvcik7XG4gICAgICAgICAgZmlyZUF1dG9jb21wbGV0ZXJFbmQoZWRpdG9yKTtcbiAgICAgICAgICB1aUFjdGl2ZS5zZXQoZmFsc2UpO1xuICAgICAgICAgIGFjdGl2ZUF1dG9jb21wbGV0ZXIuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbW1lbmNlSWZOZWNlc3NhcnkgPSBjb250ZXh0ID0+IHtcbiAgICAgICAgaWYgKCFpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgYWRkQXV0b2NvbXBsZXRlckRlY29yYXRpb24oZWRpdG9yLCBjb250ZXh0LnJhbmdlKTtcbiAgICAgICAgICBhY3RpdmVBdXRvY29tcGxldGVyLnNldCh7XG4gICAgICAgICAgICB0cmlnZ2VyOiBjb250ZXh0LnRyaWdnZXIsXG4gICAgICAgICAgICBtYXRjaExlbmd0aDogY29udGV4dC50ZXh0Lmxlbmd0aFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0QXV0b2NvbXBsZXRlcnMgPSBjYWNoZWQoKCkgPT4gcmVnaXN0ZXIkMihlZGl0b3IpKTtcbiAgICAgIGNvbnN0IGRvTG9va3VwID0gZmV0Y2hPcHRpb25zID0+IGFjdGl2ZUF1dG9jb21wbGV0ZXIuZ2V0KCkubWFwKGFjID0+IGdldENvbnRleHQoZWRpdG9yLmRvbSwgZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSwgYWMudHJpZ2dlcikuYmluZChuZXdDb250ZXh0ID0+IGxvb2t1cFdpdGhDb250ZXh0KGVkaXRvciwgZ2V0QXV0b2NvbXBsZXRlcnMsIG5ld0NvbnRleHQsIGZldGNoT3B0aW9ucykpKS5nZXRPclRodW5rKCgpID0+IGxvb2t1cChlZGl0b3IsIGdldEF1dG9jb21wbGV0ZXJzKSk7XG4gICAgICBjb25zdCBsb2FkID0gZmV0Y2hPcHRpb25zID0+IHtcbiAgICAgICAgZG9Mb29rdXAoZmV0Y2hPcHRpb25zKS5mb2xkKGNhbmNlbElmTmVjZXNzYXJ5LCBsb29rdXBJbmZvID0+IHtcbiAgICAgICAgICBjb21tZW5jZUlmTmVjZXNzYXJ5KGxvb2t1cEluZm8uY29udGV4dCk7XG4gICAgICAgICAgbG9va3VwSW5mby5sb29rdXBEYXRhLnRoZW4obG9va3VwRGF0YSA9PiB7XG4gICAgICAgICAgICBhY3RpdmVBdXRvY29tcGxldGVyLmdldCgpLm1hcChhYyA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBsb29rdXBJbmZvLmNvbnRleHQ7XG4gICAgICAgICAgICAgIGlmIChhYy50cmlnZ2VyID09PSBjb250ZXh0LnRyaWdnZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC50ZXh0Lmxlbmd0aCAtIGFjLm1hdGNoTGVuZ3RoID49IDEwKSB7XG4gICAgICAgICAgICAgICAgICBjYW5jZWxJZk5lY2Vzc2FyeSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBhY3RpdmVBdXRvY29tcGxldGVyLnNldCh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmFjLFxuICAgICAgICAgICAgICAgICAgICBtYXRjaExlbmd0aDogY29udGV4dC50ZXh0Lmxlbmd0aFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBpZiAodWlBY3RpdmUuZ2V0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlyZUF1dG9jb21wbGV0ZXJVcGRhdGUoZWRpdG9yLCB7IGxvb2t1cERhdGEgfSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1aUFjdGl2ZS5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGZpcmVBdXRvY29tcGxldGVyU3RhcnQoZWRpdG9yLCB7IGxvb2t1cERhdGEgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLmFkZENvbW1hbmQoJ21jZUF1dG9jb21wbGV0ZXJSZWxvYWQnLCAoX3VpLCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBmZXRjaE9wdGlvbnMgPSBpc09iamVjdCh2YWx1ZSkgPyB2YWx1ZS5mZXRjaE9wdGlvbnMgOiB7fTtcbiAgICAgICAgbG9hZChmZXRjaE9wdGlvbnMpO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3IuYWRkQ29tbWFuZCgnbWNlQXV0b2NvbXBsZXRlckNsb3NlJywgY2FuY2VsSWZOZWNlc3NhcnkpO1xuICAgICAgc2V0dXBFZGl0b3JJbnB1dChlZGl0b3IsIHtcbiAgICAgICAgY2FuY2VsSWZOZWNlc3NhcnksXG4gICAgICAgIGxvYWRcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBicm93c2VyJDEgPSBkZXRlY3QkMigpLmJyb3dzZXI7XG4gICAgY29uc3QgaXNTYWZhcmkgPSBicm93c2VyJDEuaXNTYWZhcmkoKTtcbiAgICBjb25zdCBlbXB0eU5vZGVDb250ZW50cyA9IG5vZGUgPT4gZmlsbFdpdGhQYWRkaW5nQnIoU3VnYXJFbGVtZW50LmZyb21Eb20obm9kZSkpO1xuICAgIGNvbnN0IGlzRW50aXJlTm9kZVNlbGVjdGVkID0gKHJuZywgbm9kZSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgcmV0dXJuIHJuZy5zdGFydE9mZnNldCA9PT0gMCAmJiBybmcuZW5kT2Zmc2V0ID09PSAoKF9hID0gbm9kZS50ZXh0Q29udGVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRQYXJlbnREZXRhaWxzRWxlbWVudEF0UG9zID0gKGRvbSwgcG9zKSA9PiBPcHRpb25hbC5mcm9tKGRvbS5nZXRQYXJlbnQocG9zLmNvbnRhaW5lcigpLCAnZGV0YWlscycpKTtcbiAgICBjb25zdCBpc0luRGV0YWlsc0VsZW1lbnQgPSAoZG9tLCBwb3MpID0+IGdldFBhcmVudERldGFpbHNFbGVtZW50QXRQb3MoZG9tLCBwb3MpLmlzU29tZSgpO1xuICAgIGNvbnN0IGdldERldGFpbHNFbGVtZW50cyA9IChkb20sIHJuZykgPT4ge1xuICAgICAgY29uc3Qgc3RhcnREZXRhaWxzID0gT3B0aW9uYWwuZnJvbShkb20uZ2V0UGFyZW50KHJuZy5zdGFydENvbnRhaW5lciwgJ2RldGFpbHMnKSk7XG4gICAgICBjb25zdCBlbmREZXRhaWxzID0gT3B0aW9uYWwuZnJvbShkb20uZ2V0UGFyZW50KHJuZy5lbmRDb250YWluZXIsICdkZXRhaWxzJykpO1xuICAgICAgaWYgKHN0YXJ0RGV0YWlscy5pc1NvbWUoKSB8fCBlbmREZXRhaWxzLmlzU29tZSgpKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0U3VtbWFyeSA9IHN0YXJ0RGV0YWlscy5iaW5kKGRldGFpbHMgPT4gT3B0aW9uYWwuZnJvbShkb20uc2VsZWN0KCdzdW1tYXJ5JywgZGV0YWlscylbMF0pKTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUoe1xuICAgICAgICAgIHN0YXJ0U3VtbWFyeSxcbiAgICAgICAgICBzdGFydERldGFpbHMsXG4gICAgICAgICAgZW5kRGV0YWlsc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc0NhcmV0SW5UaGVCZWdpbm5pbmdPZiA9IChjYXJldFBvcywgZWxlbWVudCkgPT4gZmlyc3RQb3NpdGlvbkluKGVsZW1lbnQpLmV4aXN0cyhwb3MgPT4gcG9zLmlzRXF1YWwoY2FyZXRQb3MpKTtcbiAgICBjb25zdCBpc0NhcmV0SW5UaGVFbmRPZiA9IChjYXJldFBvcywgZWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIGxhc3RQb3NpdGlvbkluKGVsZW1lbnQpLmV4aXN0cyhwb3MgPT4ge1xuICAgICAgICBpZiAoaXNCciQ2KHBvcy5nZXROb2RlKCkpKSB7XG4gICAgICAgICAgcmV0dXJuIHByZXZQb3NpdGlvbihlbGVtZW50LCBwb3MpLmV4aXN0cyhwb3MyID0+IHBvczIuaXNFcXVhbChjYXJldFBvcykpIHx8IHBvcy5pc0VxdWFsKGNhcmV0UG9zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcG9zLmlzRXF1YWwoY2FyZXRQb3MpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQ2FyZXRBdFN0YXJ0T2ZTdW1tYXJ5ID0gKGNhcmV0UG9zLCBkZXRhaWxzRWxlbWVudHMpID0+IGRldGFpbHNFbGVtZW50cy5zdGFydFN1bW1hcnkuZXhpc3RzKHN1bW1hcnkgPT4gaXNDYXJldEluVGhlQmVnaW5uaW5nT2YoY2FyZXRQb3MsIHN1bW1hcnkpKTtcbiAgICBjb25zdCBpc0NhcmV0QXRFbmRPZlN1bW1hcnkgPSAoY2FyZXRQb3MsIGRldGFpbHNFbGVtZW50cykgPT4gZGV0YWlsc0VsZW1lbnRzLnN0YXJ0U3VtbWFyeS5leGlzdHMoc3VtbWFyeSA9PiBpc0NhcmV0SW5UaGVFbmRPZihjYXJldFBvcywgc3VtbWFyeSkpO1xuICAgIGNvbnN0IGlzQ2FyZXRJbkZpcnN0UG9zaXRpb25JbkJvZHkgPSAoY2FyZXRQb3MsIGRldGFpbHNFbGVtZW50cykgPT4gZGV0YWlsc0VsZW1lbnRzLnN0YXJ0RGV0YWlscy5leGlzdHMoZGV0YWlscyA9PiBwcmV2UG9zaXRpb24oZGV0YWlscywgY2FyZXRQb3MpLmZvcmFsbChwb3MgPT4gZGV0YWlsc0VsZW1lbnRzLnN0YXJ0U3VtbWFyeS5leGlzdHMoc3VtbWFyeSA9PiAhc3VtbWFyeS5jb250YWlucyhjYXJldFBvcy5jb250YWluZXIoKSkgJiYgc3VtbWFyeS5jb250YWlucyhwb3MuY29udGFpbmVyKCkpKSkpO1xuICAgIGNvbnN0IGlzQ2FyZXRJbkxhc3RQb3NpdGlvbkluQm9keSA9IChyb290LCBjYXJldFBvcywgZGV0YWlsc0VsZW1lbnRzKSA9PiBkZXRhaWxzRWxlbWVudHMuc3RhcnREZXRhaWxzLmV4aXN0cyhkZXRhaWxzID0+IG5leHRQb3NpdGlvbihyb290LCBjYXJldFBvcykuZm9yYWxsKHBvcyA9PiAhZGV0YWlscy5jb250YWlucyhwb3MuY29udGFpbmVyKCkpKSk7XG4gICAgY29uc3Qgc2V0Q2FyZXRUb1Bvc2l0aW9uID0gKGVkaXRvciwgcG9zaXRpb24pID0+IHtcbiAgICAgIGNvbnN0IG5vZGUgPSBwb3NpdGlvbi5nZXROb2RlKCk7XG4gICAgICBpZiAoIWlzVW5kZWZpbmVkKG5vZGUpKSB7XG4gICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Q3Vyc29yTG9jYXRpb24obm9kZSwgcG9zaXRpb24ub2Zmc2V0KCkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbW92ZUNhcmV0VG9EZXRhaWxzUG9zID0gKGVkaXRvciwgcG9zLCBmb3J3YXJkKSA9PiB7XG4gICAgICBjb25zdCBkZXRhaWxzID0gZWRpdG9yLmRvbS5nZXRQYXJlbnQocG9zLmNvbnRhaW5lcigpLCAnZGV0YWlscycpO1xuICAgICAgaWYgKGRldGFpbHMgJiYgIWRldGFpbHMub3Blbikge1xuICAgICAgICBjb25zdCBzdW1tYXJ5ID0gZWRpdG9yLmRvbS5zZWxlY3QoJ3N1bW1hcnknLCBkZXRhaWxzKVswXTtcbiAgICAgICAgaWYgKHN1bW1hcnkpIHtcbiAgICAgICAgICBjb25zdCBuZXdQb3MgPSBmb3J3YXJkID8gZmlyc3RQb3NpdGlvbkluKHN1bW1hcnkpIDogbGFzdFBvc2l0aW9uSW4oc3VtbWFyeSk7XG4gICAgICAgICAgbmV3UG9zLmVhY2gocG9zID0+IHNldENhcmV0VG9Qb3NpdGlvbihlZGl0b3IsIHBvcykpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRDYXJldFRvUG9zaXRpb24oZWRpdG9yLCBwb3MpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNQYXJ0aWFsRGVsZXRlID0gKHJuZywgZGV0YWlsc0VsZW1lbnRzKSA9PiB7XG4gICAgICBjb25zdCBjb250YWluc1N0YXJ0ID0gZWxlbWVudCA9PiBlbGVtZW50LmNvbnRhaW5zKHJuZy5zdGFydENvbnRhaW5lcik7XG4gICAgICBjb25zdCBjb250YWluc0VuZCA9IGVsZW1lbnQgPT4gZWxlbWVudC5jb250YWlucyhybmcuZW5kQ29udGFpbmVyKTtcbiAgICAgIGNvbnN0IHN0YXJ0SW5TdW1tYXJ5ID0gZGV0YWlsc0VsZW1lbnRzLnN0YXJ0U3VtbWFyeS5leGlzdHMoY29udGFpbnNTdGFydCk7XG4gICAgICBjb25zdCBlbmRJblN1bW1hcnkgPSBkZXRhaWxzRWxlbWVudHMuc3RhcnRTdW1tYXJ5LmV4aXN0cyhjb250YWluc0VuZCk7XG4gICAgICBjb25zdCBpc1BhcnRpYWxseVNlbGVjdGVkRGV0YWlsc0VsZW1lbnRzID0gZGV0YWlsc0VsZW1lbnRzLnN0YXJ0RGV0YWlscy5mb3JhbGwoc3RhcnREZXRhaWxzID0+IGRldGFpbHNFbGVtZW50cy5lbmREZXRhaWxzLmZvcmFsbChlbmREZXRhaWxzID0+IHN0YXJ0RGV0YWlscyAhPT0gZW5kRGV0YWlscykpO1xuICAgICAgY29uc3QgaXNJblBhcnRpYWxseVNlbGVjdGVkU3VtbWFyeSA9IChzdGFydEluU3VtbWFyeSB8fCBlbmRJblN1bW1hcnkpICYmICEoc3RhcnRJblN1bW1hcnkgJiYgZW5kSW5TdW1tYXJ5KTtcbiAgICAgIHJldHVybiBpc0luUGFydGlhbGx5U2VsZWN0ZWRTdW1tYXJ5IHx8IGlzUGFydGlhbGx5U2VsZWN0ZWREZXRhaWxzRWxlbWVudHM7XG4gICAgfTtcbiAgICBjb25zdCBzaG91bGRQcmV2ZW50RGVsZXRlSW50b0RldGFpbHMgPSAoZWRpdG9yLCBmb3J3YXJkLCBncmFudWxhcml0eSkgPT4ge1xuICAgICAgY29uc3Qge2RvbSwgc2VsZWN0aW9ufSA9IGVkaXRvcjtcbiAgICAgIGNvbnN0IHJvb3QgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgaWYgKGdyYW51bGFyaXR5ID09PSAnY2hhcmFjdGVyJykge1xuICAgICAgICBjb25zdCBjYXJldFBvcyA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQoc2VsZWN0aW9uLmdldFJuZygpKTtcbiAgICAgICAgY29uc3QgcGFyZW50QmxvY2sgPSBkb20uZ2V0UGFyZW50KGNhcmV0UG9zLmNvbnRhaW5lcigpLCBkb20uaXNCbG9jayk7XG4gICAgICAgIGNvbnN0IHBhcmVudERldGFpbHNBdENhcmV0ID0gZ2V0UGFyZW50RGV0YWlsc0VsZW1lbnRBdFBvcyhkb20sIGNhcmV0UG9zKTtcbiAgICAgICAgY29uc3QgaW5FbXB0eVBhcmVudEJsb2NrID0gcGFyZW50QmxvY2sgJiYgZG9tLmlzRW1wdHkocGFyZW50QmxvY2spO1xuICAgICAgICBjb25zdCBpc0ZpcnN0QmxvY2sgPSBpc051bGwocGFyZW50QmxvY2sgPT09IG51bGwgfHwgcGFyZW50QmxvY2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmVudEJsb2NrLnByZXZpb3VzU2libGluZyk7XG4gICAgICAgIGNvbnN0IGlzTGFzdEJsb2NrID0gaXNOdWxsKHBhcmVudEJsb2NrID09PSBudWxsIHx8IHBhcmVudEJsb2NrID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJlbnRCbG9jay5uZXh0U2libGluZyk7XG4gICAgICAgIGlmIChpbkVtcHR5UGFyZW50QmxvY2spIHtcbiAgICAgICAgICBjb25zdCBmaXJzdE9yTGFzdCA9IGZvcndhcmQgPyBpc0xhc3RCbG9jayA6IGlzRmlyc3RCbG9jaztcbiAgICAgICAgICBpZiAoZmlyc3RPckxhc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzQmVmb3JlQWZ0ZXJEZXRhaWxzID0gbmF2aWdhdGUoIWZvcndhcmQsIHJvb3QsIGNhcmV0UG9zKS5leGlzdHMocG9zID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGlzSW5EZXRhaWxzRWxlbWVudChkb20sIHBvcykgJiYgIWVxdWFscyhwYXJlbnREZXRhaWxzQXRDYXJldCwgZ2V0UGFyZW50RGV0YWlsc0VsZW1lbnRBdFBvcyhkb20sIHBvcykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoaXNCZWZvcmVBZnRlckRldGFpbHMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuYXZpZ2F0ZShmb3J3YXJkLCByb290LCBjYXJldFBvcykuZm9sZChuZXZlciwgcG9zID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJlbnREZXRhaWxzQXROZXdQb3MgPSBnZXRQYXJlbnREZXRhaWxzRWxlbWVudEF0UG9zKGRvbSwgcG9zKTtcbiAgICAgICAgICBpZiAoaXNJbkRldGFpbHNFbGVtZW50KGRvbSwgcG9zKSAmJiAhZXF1YWxzKHBhcmVudERldGFpbHNBdENhcmV0LCBwYXJlbnREZXRhaWxzQXROZXdQb3MpKSB7XG4gICAgICAgICAgICBpZiAoIWZvcndhcmQpIHtcbiAgICAgICAgICAgICAgbW92ZUNhcmV0VG9EZXRhaWxzUG9zKGVkaXRvciwgcG9zLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyZW50QmxvY2sgJiYgaW5FbXB0eVBhcmVudEJsb2NrKSB7XG4gICAgICAgICAgICAgIGlmIChmb3J3YXJkICYmIGlzRmlyc3RCbG9jaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFmb3J3YXJkICYmIGlzTGFzdEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbW92ZUNhcmV0VG9EZXRhaWxzUG9zKGVkaXRvciwgcG9zLCBmb3J3YXJkKTtcbiAgICAgICAgICAgICAgZWRpdG9yLmRvbS5yZW1vdmUocGFyZW50QmxvY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2hvdWxkUHJldmVudERlbGV0ZVN1bW1hcnlBY3Rpb24gPSAoZWRpdG9yLCBkZXRhaWxFbGVtZW50cywgZm9yd2FyZCwgZ3JhbnVsYXJpdHkpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3Rpb247XG4gICAgICBjb25zdCBybmcgPSBzZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBjb25zdCBjYXJldFBvcyA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQocm5nKTtcbiAgICAgIGNvbnN0IHJvb3QgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgaWYgKGdyYW51bGFyaXR5ID09PSAnc2VsZWN0aW9uJykge1xuICAgICAgICByZXR1cm4gaXNQYXJ0aWFsRGVsZXRlKHJuZywgZGV0YWlsRWxlbWVudHMpO1xuICAgICAgfSBlbHNlIGlmIChmb3J3YXJkKSB7XG4gICAgICAgIHJldHVybiBpc0NhcmV0QXRFbmRPZlN1bW1hcnkoY2FyZXRQb3MsIGRldGFpbEVsZW1lbnRzKSB8fCBpc0NhcmV0SW5MYXN0UG9zaXRpb25JbkJvZHkocm9vdCwgY2FyZXRQb3MsIGRldGFpbEVsZW1lbnRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpc0NhcmV0QXRTdGFydE9mU3VtbWFyeShjYXJldFBvcywgZGV0YWlsRWxlbWVudHMpIHx8IGlzQ2FyZXRJbkZpcnN0UG9zaXRpb25JbkJvZHkoY2FyZXRQb3MsIGRldGFpbEVsZW1lbnRzKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNob3VsZFByZXZlbnREZWxldGVBY3Rpb24gPSAoZWRpdG9yLCBmb3J3YXJkLCBncmFudWxhcml0eSkgPT4gZ2V0RGV0YWlsc0VsZW1lbnRzKGVkaXRvci5kb20sIGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpLmZvbGQoKCkgPT4gc2hvdWxkUHJldmVudERlbGV0ZUludG9EZXRhaWxzKGVkaXRvciwgZm9yd2FyZCwgZ3JhbnVsYXJpdHkpLCBkZXRhaWxzRWxlbWVudHMgPT4gc2hvdWxkUHJldmVudERlbGV0ZVN1bW1hcnlBY3Rpb24oZWRpdG9yLCBkZXRhaWxzRWxlbWVudHMsIGZvcndhcmQsIGdyYW51bGFyaXR5KSB8fCBzaG91bGRQcmV2ZW50RGVsZXRlSW50b0RldGFpbHMoZWRpdG9yLCBmb3J3YXJkLCBncmFudWxhcml0eSkpO1xuICAgIGNvbnN0IGhhbmRsZURlbGV0ZUFjdGlvblNhZmFyaSA9IChlZGl0b3IsIGZvcndhcmQsIGdyYW51bGFyaXR5KSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uO1xuICAgICAgY29uc3Qgbm9kZSA9IHNlbGVjdGlvbi5nZXROb2RlKCk7XG4gICAgICBjb25zdCBybmcgPSBzZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBjb25zdCBjYXJldFBvcyA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQocm5nKTtcbiAgICAgIGlmIChpc1N1bW1hcnkobm9kZSkpIHtcbiAgICAgICAgaWYgKGdyYW51bGFyaXR5ID09PSAnc2VsZWN0aW9uJyAmJiBpc0VudGlyZU5vZGVTZWxlY3RlZChybmcsIG5vZGUpIHx8IHdpbGxEZWxldGVMYXN0UG9zaXRpb25JbkVsZW1lbnQoZm9yd2FyZCwgY2FyZXRQb3MsIG5vZGUpKSB7XG4gICAgICAgICAgZW1wdHlOb2RlQ29udGVudHMobm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlbCA9IHNlbGVjdGlvbi5nZXRTZWwoKTtcbiAgICAgICAgICAgIGxldCB7YW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0LCBmb2N1c05vZGUsIGZvY3VzT2Zmc2V0fSA9IHNlbCAhPT0gbnVsbCAmJiBzZWwgIT09IHZvaWQgMCA/IHNlbCA6IHt9O1xuICAgICAgICAgICAgY29uc3QgYXBwbHlTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpc05vbk51bGxhYmxlKGFuY2hvck5vZGUpICYmIGlzTm9uTnVsbGFibGUoYW5jaG9yT2Zmc2V0KSAmJiBpc05vbk51bGxhYmxlKGZvY3VzTm9kZSkgJiYgaXNOb25OdWxsYWJsZShmb2N1c09mZnNldCkpIHtcbiAgICAgICAgICAgICAgICBzZWwgPT09IG51bGwgfHwgc2VsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWwuc2V0QmFzZUFuZEV4dGVudChhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQsIGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlU2VsZWN0aW9uID0gKCkgPT4ge1xuICAgICAgICAgICAgICBhbmNob3JOb2RlID0gc2VsID09PSBudWxsIHx8IHNlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsLmFuY2hvck5vZGU7XG4gICAgICAgICAgICAgIGFuY2hvck9mZnNldCA9IHNlbCA9PT0gbnVsbCB8fCBzZWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbC5hbmNob3JPZmZzZXQ7XG4gICAgICAgICAgICAgIGZvY3VzTm9kZSA9IHNlbCA9PT0gbnVsbCB8fCBzZWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbC5mb2N1c05vZGU7XG4gICAgICAgICAgICAgIGZvY3VzT2Zmc2V0ID0gc2VsID09PSBudWxsIHx8IHNlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsLmZvY3VzT2Zmc2V0O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGFwcGVuZEFsbENoaWxkTm9kZXMgPSAoZnJvbSwgdG8pID0+IHtcbiAgICAgICAgICAgICAgZWFjaCRlKGZyb20uY2hpbGROb2RlcywgY2hpbGQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc05vZGUoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICB0by5hcHBlbmRDaGlsZChjaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBlZGl0b3IuZG9tLmNyZWF0ZSgnc3BhbicsIHsgJ2RhdGEtbWNlLWJvZ3VzJzogJzEnIH0pO1xuICAgICAgICAgICAgYXBwZW5kQWxsQ2hpbGROb2Rlcyhub2RlLCBjb250YWluZXIpO1xuICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgICAgICAgICAgYXBwbHlTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIGlmIChncmFudWxhcml0eSA9PT0gJ3dvcmQnIHx8IGdyYW51bGFyaXR5ID09PSAnbGluZScpIHtcbiAgICAgICAgICAgICAgc2VsID09PSBudWxsIHx8IHNlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsLm1vZGlmeSgnZXh0ZW5kJywgZm9yd2FyZCA/ICdyaWdodCcgOiAnbGVmdCcsIGdyYW51bGFyaXR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkgJiYgaXNFbnRpcmVOb2RlU2VsZWN0ZWQoc2VsZWN0aW9uLmdldFJuZygpLCBjb250YWluZXIpKSB7XG4gICAgICAgICAgICAgIGVtcHR5Tm9kZUNvbnRlbnRzKG5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKGZvcndhcmQgPyAnRm9yd2FyZERlbGV0ZScgOiAnRGVsZXRlJyk7XG4gICAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICBhcHBlbmRBbGxDaGlsZE5vZGVzKGNvbnRhaW5lciwgbm9kZSk7XG4gICAgICAgICAgICAgIGFwcGx5U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlZGl0b3IuZG9tLnJlbW92ZShjb250YWluZXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYmFja3NwYWNlRGVsZXRlID0gKGVkaXRvciwgZm9yd2FyZCwgZ3JhbnVsYXJpdHkpID0+IHNob3VsZFByZXZlbnREZWxldGVBY3Rpb24oZWRpdG9yLCBmb3J3YXJkLCBncmFudWxhcml0eSkgfHwgaXNTYWZhcmkgJiYgaGFuZGxlRGVsZXRlQWN0aW9uU2FmYXJpKGVkaXRvciwgZm9yd2FyZCwgZ3JhbnVsYXJpdHkpID8gT3B0aW9uYWwuc29tZShub29wKSA6IE9wdGlvbmFsLm5vbmUoKTtcblxuICAgIGNvbnN0IGNyZWF0ZUFuZEZpcmVJbnB1dEV2ZW50ID0gZXZlbnRUeXBlID0+IChlZGl0b3IsIGlucHV0VHlwZSwgc3BlY2lmaWNzID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGVkaXRvci5nZXRCb2R5KCk7XG4gICAgICBjb25zdCBvdmVycmlkZXMgPSB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICBpc0NvbXBvc2luZzogZmFsc2UsXG4gICAgICAgIGRldGFpbDogMCxcbiAgICAgICAgdmlldzogbnVsbCxcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICBjdXJyZW50VGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgIGV2ZW50UGhhc2U6IEV2ZW50LkFUX1RBUkdFVCxcbiAgICAgICAgb3JpZ2luYWxUYXJnZXQ6IHRhcmdldCxcbiAgICAgICAgZXhwbGljaXRPcmlnaW5hbFRhcmdldDogdGFyZ2V0LFxuICAgICAgICBpc1RydXN0ZWQ6IGZhbHNlLFxuICAgICAgICBzcmNFbGVtZW50OiB0YXJnZXQsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBwcmV2ZW50RGVmYXVsdDogbm9vcCxcbiAgICAgICAgaW5wdXRUeXBlXG4gICAgICB9O1xuICAgICAgY29uc3QgaW5wdXQgPSBjbG9uZSQzKG5ldyBJbnB1dEV2ZW50KGV2ZW50VHlwZSkpO1xuICAgICAgcmV0dXJuIGVkaXRvci5kaXNwYXRjaChldmVudFR5cGUsIHtcbiAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgIC4uLm92ZXJyaWRlcyxcbiAgICAgICAgLi4uc3BlY2lmaWNzXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpcmVJbnB1dEV2ZW50ID0gY3JlYXRlQW5kRmlyZUlucHV0RXZlbnQoJ2lucHV0Jyk7XG4gICAgY29uc3QgZmlyZUJlZm9yZUlucHV0RXZlbnQgPSBjcmVhdGVBbmRGaXJlSW5wdXRFdmVudCgnYmVmb3JlaW5wdXQnKTtcblxuICAgIGNvbnN0IHBsYXRmb3JtJDIgPSBkZXRlY3QkMigpO1xuICAgIGNvbnN0IG9zID0gcGxhdGZvcm0kMi5vcztcbiAgICBjb25zdCBpc01hY09TT3JpT1MgPSBvcy5pc01hY09TKCkgfHwgb3MuaXNpT1MoKTtcbiAgICBjb25zdCBicm93c2VyID0gcGxhdGZvcm0kMi5icm93c2VyO1xuICAgIGNvbnN0IGlzRmlyZWZveCA9IGJyb3dzZXIuaXNGaXJlZm94KCk7XG4gICAgY29uc3QgZXhlY3V0ZUtleWRvd25PdmVycmlkZSQzID0gKGVkaXRvciwgY2FyZXQsIGV2dCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXRUeXBlID0gZXZ0LmtleUNvZGUgPT09IFZLLkJBQ0tTUEFDRSA/ICdkZWxldGVDb250ZW50QmFja3dhcmQnIDogJ2RlbGV0ZUNvbnRlbnRGb3J3YXJkJztcbiAgICAgIGNvbnN0IGlzQ29sbGFwc2VkID0gZWRpdG9yLnNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpO1xuICAgICAgY29uc3QgdW5tb2RpZmllZEdyYW51bGFyaXR5ID0gaXNDb2xsYXBzZWQgPyAnY2hhcmFjdGVyJyA6ICdzZWxlY3Rpb24nO1xuICAgICAgY29uc3QgZ2V0TW9kaWZpZWRHcmFudWxhcml0eSA9IGlzV29yZCA9PiB7XG4gICAgICAgIGlmIChpc0NvbGxhcHNlZCkge1xuICAgICAgICAgIHJldHVybiBpc1dvcmQgPyAnd29yZCcgOiAnbGluZSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuICdzZWxlY3Rpb24nO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZXhlY3V0ZVdpdGhEZWxheWVkQWN0aW9uKFtcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLkJBQ0tTUEFDRSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihiYWNrc3BhY2VEZWxldGUkMSwgZWRpdG9yKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuQkFDS1NQQUNFLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKGJhY2tzcGFjZURlbGV0ZSQ2LCBlZGl0b3IsIGZhbHNlKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuREVMRVRFLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKGJhY2tzcGFjZURlbGV0ZSQ2LCBlZGl0b3IsIHRydWUpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5CQUNLU1BBQ0UsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlJDcsIGVkaXRvciwgZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5ERUxFVEUsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlJDcsIGVkaXRvciwgdHJ1ZSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLkJBQ0tTUEFDRSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihiYWNrc3BhY2VEZWxldGUkNCwgZWRpdG9yLCBjYXJldCwgZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5ERUxFVEUsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlJDQsIGVkaXRvciwgY2FyZXQsIHRydWUpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5CQUNLU1BBQ0UsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlJGEsIGVkaXRvciwgZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5ERUxFVEUsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlJGEsIGVkaXRvciwgdHJ1ZSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLkJBQ0tTUEFDRSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihiYWNrc3BhY2VEZWxldGUsIGVkaXRvciwgZmFsc2UsIHVubW9kaWZpZWRHcmFudWxhcml0eSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLkRFTEVURSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihiYWNrc3BhY2VEZWxldGUsIGVkaXRvciwgdHJ1ZSwgdW5tb2RpZmllZEdyYW51bGFyaXR5KVxuICAgICAgICB9LFxuICAgICAgICAuLi5pc01hY09TT3JpT1MgPyBbXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5Q29kZTogVksuQkFDS1NQQUNFLFxuICAgICAgICAgICAgYWx0S2V5OiB0cnVlLFxuICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlLCBlZGl0b3IsIGZhbHNlLCBnZXRNb2RpZmllZEdyYW51bGFyaXR5KHRydWUpKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5Q29kZTogVksuREVMRVRFLFxuICAgICAgICAgICAgYWx0S2V5OiB0cnVlLFxuICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlLCBlZGl0b3IsIHRydWUsIGdldE1vZGlmaWVkR3JhbnVsYXJpdHkodHJ1ZSkpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXlDb2RlOiBWSy5CQUNLU1BBQ0UsXG4gICAgICAgICAgICBtZXRhS2V5OiB0cnVlLFxuICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlLCBlZGl0b3IsIGZhbHNlLCBnZXRNb2RpZmllZEdyYW51bGFyaXR5KGZhbHNlKSlcbiAgICAgICAgICB9XG4gICAgICAgIF0gOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5Q29kZTogVksuQkFDS1NQQUNFLFxuICAgICAgICAgICAgY3RybEtleTogdHJ1ZSxcbiAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uKGJhY2tzcGFjZURlbGV0ZSwgZWRpdG9yLCBmYWxzZSwgZ2V0TW9kaWZpZWRHcmFudWxhcml0eSh0cnVlKSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleUNvZGU6IFZLLkRFTEVURSxcbiAgICAgICAgICAgIGN0cmxLZXk6IHRydWUsXG4gICAgICAgICAgICBhY3Rpb246IGFjdGlvbihiYWNrc3BhY2VEZWxldGUsIGVkaXRvciwgdHJ1ZSwgZ2V0TW9kaWZpZWRHcmFudWxhcml0eSh0cnVlKSlcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5CQUNLU1BBQ0UsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlJDUsIGVkaXRvciwgZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5ERUxFVEUsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlJDUsIGVkaXRvciwgdHJ1ZSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLkJBQ0tTUEFDRSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihiYWNrc3BhY2VEZWxldGUkMiwgZWRpdG9yLCBmYWxzZSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLkRFTEVURSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihiYWNrc3BhY2VEZWxldGUkMiwgZWRpdG9yLCB0cnVlKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuQkFDS1NQQUNFLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKGJhY2tzcGFjZURlbGV0ZSQ4LCBlZGl0b3IsIGZhbHNlKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuREVMRVRFLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKGJhY2tzcGFjZURlbGV0ZSQ4LCBlZGl0b3IsIHRydWUpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5CQUNLU1BBQ0UsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlJDksIGVkaXRvciwgZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5ERUxFVEUsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24oYmFja3NwYWNlRGVsZXRlJDksIGVkaXRvciwgdHJ1ZSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLkJBQ0tTUEFDRSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihiYWNrc3BhY2VEZWxldGUkMywgZWRpdG9yLCBmYWxzZSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLkRFTEVURSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihiYWNrc3BhY2VEZWxldGUkMywgZWRpdG9yLCB0cnVlKVxuICAgICAgICB9XG4gICAgICBdLCBldnQpLmZpbHRlcihfID0+IGVkaXRvci5zZWxlY3Rpb24uaXNFZGl0YWJsZSgpKS5lYWNoKGFwcGx5QWN0aW9uID0+IHtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGJlZm9yZUlucHV0ID0gZmlyZUJlZm9yZUlucHV0RXZlbnQoZWRpdG9yLCBpbnB1dFR5cGUpO1xuICAgICAgICBpZiAoIWJlZm9yZUlucHV0LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgYXBwbHlBY3Rpb24oKTtcbiAgICAgICAgICBmaXJlSW5wdXRFdmVudChlZGl0b3IsIGlucHV0VHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZXhlY3V0ZUtleXVwT3ZlcnJpZGUgPSAoZWRpdG9yLCBldnQsIGlzQmFja3NwYWNlS2V5ZG93bikgPT4gZXhlY3V0ZShbXG4gICAgICB7XG4gICAgICAgIGtleUNvZGU6IFZLLkJBQ0tTUEFDRSxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24ocGFkZEVtcHR5RWxlbWVudCwgZWRpdG9yKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5Q29kZTogVksuREVMRVRFLFxuICAgICAgICBhY3Rpb246IGFjdGlvbihwYWRkRW1wdHlFbGVtZW50LCBlZGl0b3IpXG4gICAgICB9LFxuICAgICAgLi4uaXNNYWNPU09yaU9TID8gW1xuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuQkFDS1NQQUNFLFxuICAgICAgICAgIGFsdEtleTogdHJ1ZSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihyZWZyZXNoQ2FyZXQsIGVkaXRvcilcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLkRFTEVURSxcbiAgICAgICAgICBhbHRLZXk6IHRydWUsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24ocmVmcmVzaENhcmV0LCBlZGl0b3IpXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmlzQmFja3NwYWNlS2V5ZG93biA/IFt7XG4gICAgICAgICAgICBrZXlDb2RlOiBpc0ZpcmVmb3ggPyAyMjQgOiA5MSxcbiAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uKHJlZnJlc2hDYXJldCwgZWRpdG9yKVxuICAgICAgICAgIH1dIDogW11cbiAgICAgIF0gOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5CQUNLU1BBQ0UsXG4gICAgICAgICAgY3RybEtleTogdHJ1ZSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihyZWZyZXNoQ2FyZXQsIGVkaXRvcilcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLkRFTEVURSxcbiAgICAgICAgICBjdHJsS2V5OiB0cnVlLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKHJlZnJlc2hDYXJldCwgZWRpdG9yKVxuICAgICAgICB9XG4gICAgICBdXG4gICAgXSwgZXZ0KTtcbiAgICBjb25zdCBzZXR1cCRpID0gKGVkaXRvciwgY2FyZXQpID0+IHtcbiAgICAgIGxldCBpc0JhY2tzcGFjZUtleWRvd24gPSBmYWxzZTtcbiAgICAgIGVkaXRvci5vbigna2V5ZG93bicsIGV2dCA9PiB7XG4gICAgICAgIGlzQmFja3NwYWNlS2V5ZG93biA9IGV2dC5rZXlDb2RlID09PSBWSy5CQUNLU1BBQ0U7XG4gICAgICAgIGlmICghZXZ0LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgZXhlY3V0ZUtleWRvd25PdmVycmlkZSQzKGVkaXRvciwgY2FyZXQsIGV2dCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdrZXl1cCcsIGV2dCA9PiB7XG4gICAgICAgIGlmICghZXZ0LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgZXhlY3V0ZUtleXVwT3ZlcnJpZGUoZWRpdG9yLCBldnQsIGlzQmFja3NwYWNlS2V5ZG93bik7XG4gICAgICAgIH1cbiAgICAgICAgaXNCYWNrc3BhY2VLZXlkb3duID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmlyc3ROb25XaGl0ZVNwYWNlTm9kZVNpYmxpbmcgPSBub2RlID0+IHtcbiAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgIGlmIChpc0VsZW1lbnQkNihub2RlKSB8fCBpc1RleHQkYShub2RlKSAmJiBub2RlLmRhdGEgJiYgL1tcXHJcXG5cXHNdLy50ZXN0KG5vZGUuZGF0YSkpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgY29uc3QgbW92ZVRvQ2FyZXRQb3NpdGlvbiA9IChlZGl0b3IsIHJvb3QpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBtb3ZlQ2FyZXRCZWZvcmVPbkVudGVyRWxlbWVudHNNYXAgPSBlZGl0b3Iuc2NoZW1hLmdldE1vdmVDYXJldEJlZm9yZU9uRW50ZXJFbGVtZW50cygpO1xuICAgICAgaWYgKCFyb290KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICgvXihMSXxEVHxERCkkLy50ZXN0KHJvb3Qubm9kZU5hbWUpKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSBmaXJzdE5vbldoaXRlU3BhY2VOb2RlU2libGluZyhyb290LmZpcnN0Q2hpbGQpO1xuICAgICAgICBpZiAoZmlyc3RDaGlsZCAmJiAvXihVTHxPTHxETCkkLy50ZXN0KGZpcnN0Q2hpbGQubm9kZU5hbWUpKSB7XG4gICAgICAgICAgcm9vdC5pbnNlcnRCZWZvcmUoZG9tLmRvYy5jcmVhdGVUZXh0Tm9kZShuYnNwKSwgcm9vdC5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3Qgcm5nID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgcm9vdC5ub3JtYWxpemUoKTtcbiAgICAgIGlmIChyb290Lmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICBjb25zdCB3YWxrZXIgPSBuZXcgRG9tVHJlZVdhbGtlcihyb290LCByb290KTtcbiAgICAgICAgbGV0IGxhc3ROb2RlID0gcm9vdDtcbiAgICAgICAgbGV0IG5vZGU7XG4gICAgICAgIHdoaWxlIChub2RlID0gd2Fsa2VyLmN1cnJlbnQoKSkge1xuICAgICAgICAgIGlmIChpc1RleHQkYShub2RlKSkge1xuICAgICAgICAgICAgcm5nLnNldFN0YXJ0KG5vZGUsIDApO1xuICAgICAgICAgICAgcm5nLnNldEVuZChub2RlLCAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobW92ZUNhcmV0QmVmb3JlT25FbnRlckVsZW1lbnRzTWFwW25vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICAgIHJuZy5zZXRTdGFydEJlZm9yZShub2RlKTtcbiAgICAgICAgICAgIHJuZy5zZXRFbmRCZWZvcmUobm9kZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgbGFzdE5vZGUgPSBub2RlO1xuICAgICAgICAgIG5vZGUgPSB3YWxrZXIubmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgIHJuZy5zZXRTdGFydChsYXN0Tm9kZSwgMCk7XG4gICAgICAgICAgcm5nLnNldEVuZChsYXN0Tm9kZSwgMCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc0JyJDYocm9vdCkpIHtcbiAgICAgICAgICBpZiAocm9vdC5uZXh0U2libGluZyAmJiBkb20uaXNCbG9jayhyb290Lm5leHRTaWJsaW5nKSkge1xuICAgICAgICAgICAgcm5nLnNldFN0YXJ0QmVmb3JlKHJvb3QpO1xuICAgICAgICAgICAgcm5nLnNldEVuZEJlZm9yZShyb290KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm5nLnNldFN0YXJ0QWZ0ZXIocm9vdCk7XG4gICAgICAgICAgICBybmcuc2V0RW5kQWZ0ZXIocm9vdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJuZy5zZXRTdGFydChyb290LCAwKTtcbiAgICAgICAgICBybmcuc2V0RW5kKHJvb3QsIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgc2Nyb2xsUmFuZ2VJbnRvVmlldyhlZGl0b3IsIHJuZyk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRFZGl0YWJsZVJvb3QgPSAoZG9tLCBub2RlKSA9PiB7XG4gICAgICBjb25zdCByb290ID0gZG9tLmdldFJvb3QoKTtcbiAgICAgIGxldCBlZGl0YWJsZVJvb3Q7XG4gICAgICBsZXQgcGFyZW50ID0gbm9kZTtcbiAgICAgIHdoaWxlIChwYXJlbnQgIT09IHJvb3QgJiYgcGFyZW50ICYmIGRvbS5nZXRDb250ZW50RWRpdGFibGUocGFyZW50KSAhPT0gJ2ZhbHNlJykge1xuICAgICAgICBpZiAoZG9tLmdldENvbnRlbnRFZGl0YWJsZShwYXJlbnQpID09PSAndHJ1ZScpIHtcbiAgICAgICAgICBlZGl0YWJsZVJvb3QgPSBwYXJlbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyZW50ICE9PSByb290ID8gZWRpdGFibGVSb290IDogcm9vdDtcbiAgICB9O1xuICAgIGNvbnN0IGdldFBhcmVudEJsb2NrJDEgPSBlZGl0b3IgPT4ge1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oZWRpdG9yLmRvbS5nZXRQYXJlbnQoZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCh0cnVlKSwgZWRpdG9yLmRvbS5pc0Jsb2NrKSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRQYXJlbnRCbG9ja05hbWUgPSBlZGl0b3IgPT4ge1xuICAgICAgcmV0dXJuIGdldFBhcmVudEJsb2NrJDEoZWRpdG9yKS5mb2xkKGNvbnN0YW50KCcnKSwgcGFyZW50QmxvY2sgPT4ge1xuICAgICAgICByZXR1cm4gcGFyZW50QmxvY2subm9kZU5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaXNMaXN0SXRlbVBhcmVudEJsb2NrID0gZWRpdG9yID0+IHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRCbG9jayQxKGVkaXRvcikuZmlsdGVyKGVsbSA9PiB7XG4gICAgICAgIHJldHVybiBpc0xpc3RJdGVtJDEoU3VnYXJFbGVtZW50LmZyb21Eb20oZWxtKSk7XG4gICAgICB9KS5pc1NvbWUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGVtcHR5QmxvY2sgPSBlbG0gPT4ge1xuICAgICAgZWxtLmlubmVySFRNTCA9ICc8YnIgZGF0YS1tY2UtYm9ndXM9XCIxXCI+JztcbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5QXR0cmlidXRlcyA9IChlZGl0b3IsIG5vZGUsIGZvcmNlZFJvb3RCbG9ja0F0dHJzKSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgT3B0aW9uYWwuZnJvbShmb3JjZWRSb290QmxvY2tBdHRycy5zdHlsZSkubWFwKGRvbS5wYXJzZVN0eWxlKS5lYWNoKGF0dHJTdHlsZXMgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50U3R5bGVzID0gZ2V0QWxsUmF3KFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5vZGUpKTtcbiAgICAgICAgY29uc3QgbmV3U3R5bGVzID0ge1xuICAgICAgICAgIC4uLmN1cnJlbnRTdHlsZXMsXG4gICAgICAgICAgLi4uYXR0clN0eWxlc1xuICAgICAgICB9O1xuICAgICAgICBkb20uc2V0U3R5bGVzKG5vZGUsIG5ld1N0eWxlcyk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGF0dHJDbGFzc2VzT3B0ID0gT3B0aW9uYWwuZnJvbShmb3JjZWRSb290QmxvY2tBdHRycy5jbGFzcykubWFwKGF0dHJDbGFzc2VzID0+IGF0dHJDbGFzc2VzLnNwbGl0KC9cXHMrLykpO1xuICAgICAgY29uc3QgY3VycmVudENsYXNzZXNPcHQgPSBPcHRpb25hbC5mcm9tKG5vZGUuY2xhc3NOYW1lKS5tYXAoY3VycmVudENsYXNzZXMgPT4gZmlsdGVyJDUoY3VycmVudENsYXNzZXMuc3BsaXQoL1xccysvKSwgY2xhenogPT4gY2xhenogIT09ICcnKSk7XG4gICAgICBsaWZ0MihhdHRyQ2xhc3Nlc09wdCwgY3VycmVudENsYXNzZXNPcHQsIChhdHRyQ2xhc3NlcywgY3VycmVudENsYXNzZXMpID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRDbGFzc2VzID0gZmlsdGVyJDUoY3VycmVudENsYXNzZXMsIGNsYXp6ID0+ICFjb250YWlucyQyKGF0dHJDbGFzc2VzLCBjbGF6eikpO1xuICAgICAgICBjb25zdCBuZXdDbGFzc2VzID0gW1xuICAgICAgICAgIC4uLmF0dHJDbGFzc2VzLFxuICAgICAgICAgIC4uLmZpbHRlcmVkQ2xhc3Nlc1xuICAgICAgICBdO1xuICAgICAgICBkb20uc2V0QXR0cmliKG5vZGUsICdjbGFzcycsIG5ld0NsYXNzZXMuam9pbignICcpKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYXBwbGllZEF0dHJzID0gW1xuICAgICAgICAnc3R5bGUnLFxuICAgICAgICAnY2xhc3MnXG4gICAgICBdO1xuICAgICAgY29uc3QgcmVtYWluaW5nQXR0cnMgPSBmaWx0ZXIkNChmb3JjZWRSb290QmxvY2tBdHRycywgKF8sIGF0dHJzKSA9PiAhY29udGFpbnMkMihhcHBsaWVkQXR0cnMsIGF0dHJzKSk7XG4gICAgICBkb20uc2V0QXR0cmlicyhub2RlLCByZW1haW5pbmdBdHRycyk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRGb3JjZWRCbG9ja0F0dHJzID0gKGVkaXRvciwgbm9kZSkgPT4ge1xuICAgICAgY29uc3QgZm9yY2VkUm9vdEJsb2NrTmFtZSA9IGdldEZvcmNlZFJvb3RCbG9jayhlZGl0b3IpO1xuICAgICAgaWYgKGZvcmNlZFJvb3RCbG9ja05hbWUudG9Mb3dlckNhc2UoKSA9PT0gbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY29uc3QgZm9yY2VkUm9vdEJsb2NrQXR0cnMgPSBnZXRGb3JjZWRSb290QmxvY2tBdHRycyhlZGl0b3IpO1xuICAgICAgICBhcHBseUF0dHJpYnV0ZXMoZWRpdG9yLCBub2RlLCBmb3JjZWRSb290QmxvY2tBdHRycyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVOZXdCbG9jayA9IChlZGl0b3IsIGNvbnRhaW5lciwgcGFyZW50QmxvY2ssIGVkaXRhYmxlUm9vdCwga2VlcFN0eWxlcyA9IHRydWUsIG5hbWUpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBzY2hlbWEgPSBlZGl0b3Iuc2NoZW1hO1xuICAgICAgY29uc3QgbmV3QmxvY2tOYW1lID0gZ2V0Rm9yY2VkUm9vdEJsb2NrKGVkaXRvcik7XG4gICAgICBjb25zdCBwYXJlbnRCbG9ja05hbWUgPSBwYXJlbnRCbG9jayA/IHBhcmVudEJsb2NrLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgOiAnJztcbiAgICAgIGxldCBub2RlID0gY29udGFpbmVyO1xuICAgICAgY29uc3QgdGV4dElubGluZUVsZW1lbnRzID0gc2NoZW1hLmdldFRleHRJbmxpbmVFbGVtZW50cygpO1xuICAgICAgbGV0IGJsb2NrO1xuICAgICAgaWYgKG5hbWUgfHwgcGFyZW50QmxvY2tOYW1lID09PSAnVEFCTEUnIHx8IHBhcmVudEJsb2NrTmFtZSA9PT0gJ0hSJykge1xuICAgICAgICBibG9jayA9IGRvbS5jcmVhdGUobmFtZSB8fCBuZXdCbG9ja05hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmxvY2sgPSBwYXJlbnRCbG9jay5jbG9uZU5vZGUoZmFsc2UpO1xuICAgICAgfVxuICAgICAgbGV0IGNhcmV0Tm9kZSA9IGJsb2NrO1xuICAgICAgaWYgKCFrZWVwU3R5bGVzKSB7XG4gICAgICAgIGRvbS5zZXRBdHRyaWIoYmxvY2ssICdzdHlsZScsIG51bGwpO1xuICAgICAgICBkb20uc2V0QXR0cmliKGJsb2NrLCAnY2xhc3MnLCBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBpZiAodGV4dElubGluZUVsZW1lbnRzW25vZGUubm9kZU5hbWVdKSB7XG4gICAgICAgICAgICBpZiAoaXNDYXJldE5vZGUobm9kZSkgfHwgaXNCb29rbWFya05vZGUkMShub2RlKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNsb25lZE5vZGUgPSBub2RlLmNsb25lTm9kZShmYWxzZSk7XG4gICAgICAgICAgICBkb20uc2V0QXR0cmliKGNsb25lZE5vZGUsICdpZCcsICcnKTtcbiAgICAgICAgICAgIGlmIChibG9jay5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICAgICAgY2xvbmVkTm9kZS5hcHBlbmRDaGlsZChibG9jay5maXJzdENoaWxkKTtcbiAgICAgICAgICAgICAgYmxvY2suYXBwZW5kQ2hpbGQoY2xvbmVkTm9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjYXJldE5vZGUgPSBjbG9uZWROb2RlO1xuICAgICAgICAgICAgICBibG9jay5hcHBlbmRDaGlsZChjbG9uZWROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKChub2RlID0gbm9kZS5wYXJlbnROb2RlKSAmJiBub2RlICE9PSBlZGl0YWJsZVJvb3QpO1xuICAgICAgfVxuICAgICAgc2V0Rm9yY2VkQmxvY2tBdHRycyhlZGl0b3IsIGJsb2NrKTtcbiAgICAgIGVtcHR5QmxvY2soY2FyZXROb2RlKTtcbiAgICAgIHJldHVybiBibG9jaztcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0RGV0YWlsc1Jvb3QgPSAoZWRpdG9yLCBlbGVtZW50KSA9PiBlZGl0b3IuZG9tLmdldFBhcmVudChlbGVtZW50LCBpc0RldGFpbHMpO1xuICAgIGNvbnN0IGlzQXREZXRhaWxzRWRnZSA9IChyb290LCBlbGVtZW50LCBpc1RleHRCbG9jaykgPT4ge1xuICAgICAgbGV0IG5vZGUgPSBlbGVtZW50O1xuICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPT0gcm9vdCAmJiBpc051bGwobm9kZS5uZXh0U2libGluZykpIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnRFbGVtZW50O1xuICAgICAgICBpZiAoIXBhcmVudCB8fCAhaXNUZXh0QmxvY2socGFyZW50KSkge1xuICAgICAgICAgIHJldHVybiBpc0RldGFpbHMocGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgY29uc3QgaXNMYXN0RW1wdHlCbG9ja0luRGV0YWlscyA9IChlZGl0b3IsIHNoaWZ0S2V5LCBlbGVtZW50KSA9PiAhc2hpZnRLZXkgJiYgZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBnZXRGb3JjZWRSb290QmxvY2soZWRpdG9yKSAmJiBlZGl0b3IuZG9tLmlzRW1wdHkoZWxlbWVudCkgJiYgaXNBdERldGFpbHNFZGdlKGVkaXRvci5nZXRCb2R5KCksIGVsZW1lbnQsIGVsID0+IGhhcyQyKGVkaXRvci5zY2hlbWEuZ2V0VGV4dEJsb2NrRWxlbWVudHMoKSwgZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkpO1xuICAgIGNvbnN0IGluc2VydE5ld0xpbmUgPSAoZWRpdG9yLCBjcmVhdGVOZXdCbG9jaywgcGFyZW50QmxvY2spID0+IHtcbiAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgY29uc3QgbmV3QmxvY2sgPSBjcmVhdGVOZXdCbG9jayhnZXRGb3JjZWRSb290QmxvY2soZWRpdG9yKSk7XG4gICAgICBjb25zdCByb290ID0gZ2V0RGV0YWlsc1Jvb3QoZWRpdG9yLCBwYXJlbnRCbG9jayk7XG4gICAgICBpZiAoIXJvb3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWRpdG9yLmRvbS5pbnNlcnRBZnRlcihuZXdCbG9jaywgcm9vdCk7XG4gICAgICBtb3ZlVG9DYXJldFBvc2l0aW9uKGVkaXRvciwgbmV3QmxvY2spO1xuICAgICAgaWYgKCgoX2MgPSAoX2IgPSAoX2EgPSBwYXJlbnRCbG9jay5wYXJlbnRFbGVtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2hpbGROb2RlcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmxlbmd0aCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogMCkgPiAxKSB7XG4gICAgICAgIGVkaXRvci5kb20ucmVtb3ZlKHBhcmVudEJsb2NrKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaGFzRmlyc3RDaGlsZCA9IChlbG0sIG5hbWUpID0+IHtcbiAgICAgIHJldHVybiBlbG0uZmlyc3RDaGlsZCAmJiBlbG0uZmlyc3RDaGlsZC5ub2RlTmFtZSA9PT0gbmFtZTtcbiAgICB9O1xuICAgIGNvbnN0IGlzRmlyc3RDaGlsZCA9IGVsbSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICByZXR1cm4gKChfYSA9IGVsbS5wYXJlbnROb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZmlyc3RDaGlsZCkgPT09IGVsbTtcbiAgICB9O1xuICAgIGNvbnN0IGhhc1BhcmVudCA9IChlbG0sIHBhcmVudE5hbWUpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBlbG0gPT09IG51bGwgfHwgZWxtID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbG0ucGFyZW50Tm9kZTtcbiAgICAgIHJldHVybiBpc05vbk51bGxhYmxlKHBhcmVudE5vZGUpICYmIHBhcmVudE5vZGUubm9kZU5hbWUgPT09IHBhcmVudE5hbWU7XG4gICAgfTtcbiAgICBjb25zdCBpc0xpc3RCbG9jayA9IGVsbSA9PiB7XG4gICAgICByZXR1cm4gaXNOb25OdWxsYWJsZShlbG0pICYmIC9eKE9MfFVMfExJKSQvLnRlc3QoZWxtLm5vZGVOYW1lKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzTGlzdEl0ZW0gPSBlbG0gPT4ge1xuICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUoZWxtKSAmJiAvXihMSXxEVHxERCkkLy50ZXN0KGVsbS5ub2RlTmFtZSk7XG4gICAgfTtcbiAgICBjb25zdCBpc05lc3RlZExpc3QgPSBlbG0gPT4ge1xuICAgICAgcmV0dXJuIGlzTGlzdEJsb2NrKGVsbSkgJiYgaXNMaXN0QmxvY2soZWxtLnBhcmVudE5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Q29udGFpbmVyQmxvY2sgPSBjb250YWluZXJCbG9jayA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXJCbG9ja1BhcmVudCA9IGNvbnRhaW5lckJsb2NrLnBhcmVudE5vZGU7XG4gICAgICByZXR1cm4gaXNMaXN0SXRlbShjb250YWluZXJCbG9ja1BhcmVudCkgPyBjb250YWluZXJCbG9ja1BhcmVudCA6IGNvbnRhaW5lckJsb2NrO1xuICAgIH07XG4gICAgY29uc3QgaXNGaXJzdE9yTGFzdExpID0gKGNvbnRhaW5lckJsb2NrLCBwYXJlbnRCbG9jaywgZmlyc3QpID0+IHtcbiAgICAgIGxldCBub2RlID0gY29udGFpbmVyQmxvY2tbZmlyc3QgPyAnZmlyc3RDaGlsZCcgOiAnbGFzdENoaWxkJ107XG4gICAgICB3aGlsZSAobm9kZSkge1xuICAgICAgICBpZiAoaXNFbGVtZW50JDYobm9kZSkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZVtmaXJzdCA/ICduZXh0U2libGluZycgOiAncHJldmlvdXNTaWJsaW5nJ107XG4gICAgICB9XG4gICAgICByZXR1cm4gbm9kZSA9PT0gcGFyZW50QmxvY2s7XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnQkNCA9IChlZGl0b3IsIGNyZWF0ZU5ld0Jsb2NrLCBjb250YWluZXJCbG9jaywgcGFyZW50QmxvY2ssIG5ld0Jsb2NrTmFtZSkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBjb25zdCBjb250YWluZXJQYXJlbnQgPSBjb250YWluZXJCbG9jay5wYXJlbnROb2RlO1xuICAgICAgaWYgKGNvbnRhaW5lckJsb2NrID09PSBlZGl0b3IuZ2V0Qm9keSgpIHx8ICFjb250YWluZXJQYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGlzTmVzdGVkTGlzdChjb250YWluZXJCbG9jaykpIHtcbiAgICAgICAgbmV3QmxvY2tOYW1lID0gJ0xJJztcbiAgICAgIH1cbiAgICAgIGxldCBuZXdCbG9jayA9IGNyZWF0ZU5ld0Jsb2NrKG5ld0Jsb2NrTmFtZSk7XG4gICAgICBpZiAoaXNGaXJzdE9yTGFzdExpKGNvbnRhaW5lckJsb2NrLCBwYXJlbnRCbG9jaywgdHJ1ZSkgJiYgaXNGaXJzdE9yTGFzdExpKGNvbnRhaW5lckJsb2NrLCBwYXJlbnRCbG9jaywgZmFsc2UpKSB7XG4gICAgICAgIGlmIChoYXNQYXJlbnQoY29udGFpbmVyQmxvY2ssICdMSScpKSB7XG4gICAgICAgICAgY29uc3QgY29udGFpbmVyQmxvY2tQYXJlbnQgPSBnZXRDb250YWluZXJCbG9jayhjb250YWluZXJCbG9jayk7XG4gICAgICAgICAgZG9tLmluc2VydEFmdGVyKG5ld0Jsb2NrLCBjb250YWluZXJCbG9ja1BhcmVudCk7XG4gICAgICAgICAgaWYgKGlzRmlyc3RDaGlsZChjb250YWluZXJCbG9jaykpIHtcbiAgICAgICAgICAgIGRvbS5yZW1vdmUoY29udGFpbmVyQmxvY2tQYXJlbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb20ucmVtb3ZlKGNvbnRhaW5lckJsb2NrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9tLnJlcGxhY2UobmV3QmxvY2ssIGNvbnRhaW5lckJsb2NrKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0ZpcnN0T3JMYXN0TGkoY29udGFpbmVyQmxvY2ssIHBhcmVudEJsb2NrLCB0cnVlKSkge1xuICAgICAgICBpZiAoaGFzUGFyZW50KGNvbnRhaW5lckJsb2NrLCAnTEknKSkge1xuICAgICAgICAgIGRvbS5pbnNlcnRBZnRlcihuZXdCbG9jaywgZ2V0Q29udGFpbmVyQmxvY2soY29udGFpbmVyQmxvY2spKTtcbiAgICAgICAgICBuZXdCbG9jay5hcHBlbmRDaGlsZChkb20uZG9jLmNyZWF0ZVRleHROb2RlKCcgJykpO1xuICAgICAgICAgIG5ld0Jsb2NrLmFwcGVuZENoaWxkKGNvbnRhaW5lckJsb2NrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250YWluZXJQYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld0Jsb2NrLCBjb250YWluZXJCbG9jayk7XG4gICAgICAgIH1cbiAgICAgICAgZG9tLnJlbW92ZShwYXJlbnRCbG9jayk7XG4gICAgICB9IGVsc2UgaWYgKGlzRmlyc3RPckxhc3RMaShjb250YWluZXJCbG9jaywgcGFyZW50QmxvY2ssIGZhbHNlKSkge1xuICAgICAgICBkb20uaW5zZXJ0QWZ0ZXIobmV3QmxvY2ssIGdldENvbnRhaW5lckJsb2NrKGNvbnRhaW5lckJsb2NrKSk7XG4gICAgICAgIGRvbS5yZW1vdmUocGFyZW50QmxvY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGFpbmVyQmxvY2sgPSBnZXRDb250YWluZXJCbG9jayhjb250YWluZXJCbG9jayk7XG4gICAgICAgIGNvbnN0IHRtcFJuZyA9IHJuZy5jbG9uZVJhbmdlKCk7XG4gICAgICAgIHRtcFJuZy5zZXRTdGFydEFmdGVyKHBhcmVudEJsb2NrKTtcbiAgICAgICAgdG1wUm5nLnNldEVuZEFmdGVyKGNvbnRhaW5lckJsb2NrKTtcbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSB0bXBSbmcuZXh0cmFjdENvbnRlbnRzKCk7XG4gICAgICAgIGlmIChuZXdCbG9ja05hbWUgPT09ICdMSScgJiYgaGFzRmlyc3RDaGlsZChmcmFnbWVudCwgJ0xJJykpIHtcbiAgICAgICAgICBuZXdCbG9jayA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgZG9tLmluc2VydEFmdGVyKGZyYWdtZW50LCBjb250YWluZXJCbG9jayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9tLmluc2VydEFmdGVyKGZyYWdtZW50LCBjb250YWluZXJCbG9jayk7XG4gICAgICAgICAgZG9tLmluc2VydEFmdGVyKG5ld0Jsb2NrLCBjb250YWluZXJCbG9jayk7XG4gICAgICAgIH1cbiAgICAgICAgZG9tLnJlbW92ZShwYXJlbnRCbG9jayk7XG4gICAgICB9XG4gICAgICBtb3ZlVG9DYXJldFBvc2l0aW9uKGVkaXRvciwgbmV3QmxvY2spO1xuICAgIH07XG5cbiAgICBjb25zdCB0cmltWndzcCA9IGZyYWdtZW50ID0+IHtcbiAgICAgIGVhY2gkZShkZXNjZW5kYW50cyQxKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGZyYWdtZW50KSwgaXNUZXh0JGIpLCB0ZXh0ID0+IHtcbiAgICAgICAgY29uc3QgcmF3Tm9kZSA9IHRleHQuZG9tO1xuICAgICAgICByYXdOb2RlLm5vZGVWYWx1ZSA9IHRyaW0kMShyYXdOb2RlLmRhdGEpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBpc1dpdGhpbk5vbkVkaXRhYmxlTGlzdCA9IChlZGl0b3IsIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudExpc3QgPSBlZGl0b3IuZG9tLmdldFBhcmVudChub2RlLCAnb2wsdWwsZGwnKTtcbiAgICAgIHJldHVybiBwYXJlbnRMaXN0ICE9PSBudWxsICYmIGVkaXRvci5kb20uZ2V0Q29udGVudEVkaXRhYmxlUGFyZW50KHBhcmVudExpc3QpID09PSAnZmFsc2UnO1xuICAgIH07XG4gICAgY29uc3QgaXNFbXB0eUFuY2hvciA9IChkb20sIGVsbSkgPT4ge1xuICAgICAgcmV0dXJuIGVsbSAmJiBlbG0ubm9kZU5hbWUgPT09ICdBJyAmJiBkb20uaXNFbXB0eShlbG0pO1xuICAgIH07XG4gICAgY29uc3QgY29udGFpbmVyQW5kU2libGluZ05hbWUgPSAoY29udGFpbmVyLCBub2RlTmFtZSkgPT4ge1xuICAgICAgcmV0dXJuIGNvbnRhaW5lci5ub2RlTmFtZSA9PT0gbm9kZU5hbWUgfHwgY29udGFpbmVyLnByZXZpb3VzU2libGluZyAmJiBjb250YWluZXIucHJldmlvdXNTaWJsaW5nLm5vZGVOYW1lID09PSBub2RlTmFtZTtcbiAgICB9O1xuICAgIGNvbnN0IGNhblNwbGl0QmxvY2sgPSAoZG9tLCBub2RlKSA9PiB7XG4gICAgICByZXR1cm4gaXNOb25OdWxsYWJsZShub2RlKSAmJiBkb20uaXNCbG9jayhub2RlKSAmJiAhL14oVER8VEh8Q0FQVElPTnxGT1JNKSQvLnRlc3Qobm9kZS5ub2RlTmFtZSkgJiYgIS9eKGZpeGVkfGFic29sdXRlKS9pLnRlc3Qobm9kZS5zdHlsZS5wb3NpdGlvbikgJiYgZG9tLmlzRWRpdGFibGUobm9kZS5wYXJlbnROb2RlKSAmJiBkb20uZ2V0Q29udGVudEVkaXRhYmxlKG5vZGUpICE9PSAnZmFsc2UnO1xuICAgIH07XG4gICAgY29uc3QgdHJpbUlubGluZUVsZW1lbnRzT25MZWZ0U2lkZU9mQmxvY2sgPSAoZG9tLCBub25FbXB0eUVsZW1lbnRzTWFwLCBibG9jaykgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgZmlyc3RDaGlsZHMgPSBbXTtcbiAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IGN1cnJlbnROb2RlID0gYmxvY2s7XG4gICAgICB3aGlsZSAoY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgIGlmIChkb20uaXNCbG9jayhjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRWxlbWVudCQ2KGN1cnJlbnROb2RlKSAmJiAhbm9uRW1wdHlFbGVtZW50c01hcFtjdXJyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICAgIGZpcnN0Q2hpbGRzLnB1c2goY3VycmVudE5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgaSA9IGZpcnN0Q2hpbGRzLmxlbmd0aDtcbiAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgY3VycmVudE5vZGUgPSBmaXJzdENoaWxkc1tpXTtcbiAgICAgICAgaWYgKCFjdXJyZW50Tm9kZS5oYXNDaGlsZE5vZGVzKCkgfHwgY3VycmVudE5vZGUuZmlyc3RDaGlsZCA9PT0gY3VycmVudE5vZGUubGFzdENoaWxkICYmICgoX2EgPSBjdXJyZW50Tm9kZS5maXJzdENoaWxkKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eubm9kZVZhbHVlKSA9PT0gJycpIHtcbiAgICAgICAgICBkb20ucmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaXNFbXB0eUFuY2hvcihkb20sIGN1cnJlbnROb2RlKSkge1xuICAgICAgICAgICAgZG9tLnJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBub3JtYWxpemVad3NwT2Zmc2V0ID0gKHN0YXJ0LCBjb250YWluZXIsIG9mZnNldCkgPT4ge1xuICAgICAgaWYgKCFpc1RleHQkYShjb250YWluZXIpKSB7XG4gICAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0KSB7XG4gICAgICAgIHJldHVybiBvZmZzZXQgPT09IDEgJiYgY29udGFpbmVyLmRhdGEuY2hhckF0KG9mZnNldCAtIDEpID09PSBaV1NQJDEgPyAwIDogb2Zmc2V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9mZnNldCA9PT0gY29udGFpbmVyLmRhdGEubGVuZ3RoIC0gMSAmJiBjb250YWluZXIuZGF0YS5jaGFyQXQob2Zmc2V0KSA9PT0gWldTUCQxID8gY29udGFpbmVyLmRhdGEubGVuZ3RoIDogb2Zmc2V0O1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaW5jbHVkZVp3c3BJblJhbmdlID0gcm5nID0+IHtcbiAgICAgIGNvbnN0IG5ld1JuZyA9IHJuZy5jbG9uZVJhbmdlKCk7XG4gICAgICBuZXdSbmcuc2V0U3RhcnQocm5nLnN0YXJ0Q29udGFpbmVyLCBub3JtYWxpemVad3NwT2Zmc2V0KHRydWUsIHJuZy5zdGFydENvbnRhaW5lciwgcm5nLnN0YXJ0T2Zmc2V0KSk7XG4gICAgICBuZXdSbmcuc2V0RW5kKHJuZy5lbmRDb250YWluZXIsIG5vcm1hbGl6ZVp3c3BPZmZzZXQoZmFsc2UsIHJuZy5lbmRDb250YWluZXIsIHJuZy5lbmRPZmZzZXQpKTtcbiAgICAgIHJldHVybiBuZXdSbmc7XG4gICAgfTtcbiAgICBjb25zdCB0cmltTGVhZGluZ0xpbmVCcmVha3MgPSBub2RlID0+IHtcbiAgICAgIGxldCBjdXJyZW50Tm9kZSA9IG5vZGU7XG4gICAgICBkbyB7XG4gICAgICAgIGlmIChpc1RleHQkYShjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICBjdXJyZW50Tm9kZS5kYXRhID0gY3VycmVudE5vZGUuZGF0YS5yZXBsYWNlKC9eW1xcclxcbl0rLywgJycpO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuZmlyc3RDaGlsZDtcbiAgICAgIH0gd2hpbGUgKGN1cnJlbnROb2RlKTtcbiAgICB9O1xuICAgIGNvbnN0IHdyYXBTZWxmQW5kU2libGluZ3NJbkRlZmF1bHRCbG9jayA9IChlZGl0b3IsIG5ld0Jsb2NrTmFtZSwgcm5nLCBjb250YWluZXIsIG9mZnNldCkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBlZGl0YWJsZVJvb3QgPSAoX2EgPSBnZXRFZGl0YWJsZVJvb3QoZG9tLCBjb250YWluZXIpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBkb20uZ2V0Um9vdCgpO1xuICAgICAgbGV0IHBhcmVudEJsb2NrID0gZG9tLmdldFBhcmVudChjb250YWluZXIsIGRvbS5pc0Jsb2NrKTtcbiAgICAgIGlmICghcGFyZW50QmxvY2sgfHwgIWNhblNwbGl0QmxvY2soZG9tLCBwYXJlbnRCbG9jaykpIHtcbiAgICAgICAgcGFyZW50QmxvY2sgPSBwYXJlbnRCbG9jayB8fCBlZGl0YWJsZVJvb3Q7XG4gICAgICAgIGlmICghcGFyZW50QmxvY2suaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgICAgY29uc3QgbmV3QmxvY2sgPSBkb20uY3JlYXRlKG5ld0Jsb2NrTmFtZSk7XG4gICAgICAgICAgc2V0Rm9yY2VkQmxvY2tBdHRycyhlZGl0b3IsIG5ld0Jsb2NrKTtcbiAgICAgICAgICBwYXJlbnRCbG9jay5hcHBlbmRDaGlsZChuZXdCbG9jayk7XG4gICAgICAgICAgcm5nLnNldFN0YXJ0KG5ld0Jsb2NrLCAwKTtcbiAgICAgICAgICBybmcuc2V0RW5kKG5ld0Jsb2NrLCAwKTtcbiAgICAgICAgICByZXR1cm4gbmV3QmxvY2s7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5vZGUgPSBjb250YWluZXI7XG4gICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSAhPT0gcGFyZW50QmxvY2spIHtcbiAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdGFydE5vZGU7XG4gICAgICAgIHdoaWxlIChub2RlICYmICFkb20uaXNCbG9jayhub2RlKSkge1xuICAgICAgICAgIHN0YXJ0Tm9kZSA9IG5vZGU7XG4gICAgICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0Tm9kZU5hbWUgPSAoX2IgPSBzdGFydE5vZGUgPT09IG51bGwgfHwgc3RhcnROb2RlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGFydE5vZGUucGFyZW50RWxlbWVudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLm5vZGVOYW1lO1xuICAgICAgICBpZiAoc3RhcnROb2RlICYmIHN0YXJ0Tm9kZU5hbWUgJiYgZWRpdG9yLnNjaGVtYS5pc1ZhbGlkQ2hpbGQoc3RhcnROb2RlTmFtZSwgbmV3QmxvY2tOYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgY29uc3Qgc3RhcnROb2RlUGFyZW50ID0gc3RhcnROb2RlLnBhcmVudE5vZGU7XG4gICAgICAgICAgY29uc3QgbmV3QmxvY2sgPSBkb20uY3JlYXRlKG5ld0Jsb2NrTmFtZSk7XG4gICAgICAgICAgc2V0Rm9yY2VkQmxvY2tBdHRycyhlZGl0b3IsIG5ld0Jsb2NrKTtcbiAgICAgICAgICBzdGFydE5vZGVQYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld0Jsb2NrLCBzdGFydE5vZGUpO1xuICAgICAgICAgIG5vZGUgPSBzdGFydE5vZGU7XG4gICAgICAgICAgd2hpbGUgKG5vZGUgJiYgIWRvbS5pc0Jsb2NrKG5vZGUpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgICAgICAgIG5ld0Jsb2NrLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICAgICAgbm9kZSA9IG5leHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJuZy5zZXRTdGFydChjb250YWluZXIsIG9mZnNldCk7XG4gICAgICAgICAgcm5nLnNldEVuZChjb250YWluZXIsIG9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgfTtcbiAgICBjb25zdCBhZGRCclRvQmxvY2tJZk5lZWRlZCA9IChkb20sIGJsb2NrKSA9PiB7XG4gICAgICBibG9jay5ub3JtYWxpemUoKTtcbiAgICAgIGNvbnN0IGxhc3RDaGlsZCA9IGJsb2NrLmxhc3RDaGlsZDtcbiAgICAgIGlmICghbGFzdENoaWxkIHx8IGlzRWxlbWVudCQ2KGxhc3RDaGlsZCkgJiYgL14obGVmdHxyaWdodCkkL2dpLnRlc3QoZG9tLmdldFN0eWxlKGxhc3RDaGlsZCwgJ2Zsb2F0JywgdHJ1ZSkpKSB7XG4gICAgICAgIGRvbS5hZGQoYmxvY2ssICdicicpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2hvdWxkRW5kQ29udGFpbmVyID0gKGVkaXRvciwgY29udGFpbmVyKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25WYWx1ZSA9IHNob3VsZEVuZENvbnRhaW5lck9uRW1wdHlCbG9jayhlZGl0b3IpO1xuICAgICAgaWYgKGlzTnVsbGFibGUoY29udGFpbmVyKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKG9wdGlvblZhbHVlKSkge1xuICAgICAgICByZXR1cm4gY29udGFpbnMkMihUb29scy5leHBsb2RlKG9wdGlvblZhbHVlKSwgY29udGFpbmVyLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvblZhbHVlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0JDMgPSAoZWRpdG9yLCBldnQpID0+IHtcbiAgICAgIGxldCBjb250YWluZXI7XG4gICAgICBsZXQgb2Zmc2V0O1xuICAgICAgbGV0IHBhcmVudEJsb2NrTmFtZTtcbiAgICAgIGxldCBjb250YWluZXJCbG9jaztcbiAgICAgIGxldCBpc0FmdGVyTGFzdE5vZGVJbkNvbnRhaW5lciA9IGZhbHNlO1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IGVkaXRvci5zY2hlbWEsIG5vbkVtcHR5RWxlbWVudHNNYXAgPSBzY2hlbWEuZ2V0Tm9uRW1wdHlFbGVtZW50cygpO1xuICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIGNvbnN0IG5ld0Jsb2NrTmFtZSA9IGdldEZvcmNlZFJvb3RCbG9jayhlZGl0b3IpO1xuICAgICAgY29uc3Qgc3RhcnQgPSBTdWdhckVsZW1lbnQuZnJvbURvbShybmcuc3RhcnRDb250YWluZXIpO1xuICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZCQxKHN0YXJ0LCBybmcuc3RhcnRPZmZzZXQpO1xuICAgICAgY29uc3QgaXNDZWYgPSBjaGlsZC5leGlzdHMoZWxlbWVudCA9PiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpICYmICFpc0VkaXRhYmxlJDMoZWxlbWVudCkpO1xuICAgICAgY29uc3QgY29sbGFwc2VkQW5kQ2VmID0gcm5nLmNvbGxhcHNlZCAmJiBpc0NlZjtcbiAgICAgIGNvbnN0IGNyZWF0ZU5ld0Jsb2NrJDEgPSBuYW1lID0+IHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU5ld0Jsb2NrKGVkaXRvciwgY29udGFpbmVyLCBwYXJlbnRCbG9jaywgZWRpdGFibGVSb290LCBzaG91bGRLZWVwU3R5bGVzKGVkaXRvciksIG5hbWUpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzQ2FyZXRBdFN0YXJ0T3JFbmRPZkJsb2NrID0gc3RhcnQgPT4ge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkT2Zmc2V0ID0gbm9ybWFsaXplWndzcE9mZnNldChzdGFydCwgY29udGFpbmVyLCBvZmZzZXQpO1xuICAgICAgICBpZiAoaXNUZXh0JGEoY29udGFpbmVyKSAmJiAoc3RhcnQgPyBub3JtYWxpemVkT2Zmc2V0ID4gMCA6IG5vcm1hbGl6ZWRPZmZzZXQgPCBjb250YWluZXIuZGF0YS5sZW5ndGgpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250YWluZXIucGFyZW50Tm9kZSA9PT0gcGFyZW50QmxvY2sgJiYgaXNBZnRlckxhc3ROb2RlSW5Db250YWluZXIgJiYgIXN0YXJ0KSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0ICYmIGlzRWxlbWVudCQ2KGNvbnRhaW5lcikgJiYgY29udGFpbmVyID09PSBwYXJlbnRCbG9jay5maXJzdENoaWxkKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRhaW5lckFuZFNpYmxpbmdOYW1lKGNvbnRhaW5lciwgJ1RBQkxFJykgfHwgY29udGFpbmVyQW5kU2libGluZ05hbWUoY29udGFpbmVyLCAnSFInKSkge1xuICAgICAgICAgIHJldHVybiBpc0FmdGVyTGFzdE5vZGVJbkNvbnRhaW5lciAmJiAhc3RhcnQgfHwgIWlzQWZ0ZXJMYXN0Tm9kZUluQ29udGFpbmVyICYmIHN0YXJ0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHdhbGtlciA9IG5ldyBEb21UcmVlV2Fsa2VyKGNvbnRhaW5lciwgcGFyZW50QmxvY2spO1xuICAgICAgICBpZiAoaXNUZXh0JGEoY29udGFpbmVyKSkge1xuICAgICAgICAgIGlmIChzdGFydCAmJiBub3JtYWxpemVkT2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICB3YWxrZXIucHJldigpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXN0YXJ0ICYmIG5vcm1hbGl6ZWRPZmZzZXQgPT09IGNvbnRhaW5lci5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgd2Fsa2VyLm5leHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5vZGU7XG4gICAgICAgIHdoaWxlIChub2RlID0gd2Fsa2VyLmN1cnJlbnQoKSkge1xuICAgICAgICAgIGlmIChpc0VsZW1lbnQkNihub2RlKSkge1xuICAgICAgICAgICAgaWYgKCFub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1tY2UtYm9ndXMnKSkge1xuICAgICAgICAgICAgICBjb25zdCBuYW1lID0gbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICBpZiAobm9uRW1wdHlFbGVtZW50c01hcFtuYW1lXSAmJiBuYW1lICE9PSAnYnInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1RleHQkYShub2RlKSAmJiAhaXNXaGl0ZXNwYWNlVGV4dChub2RlLmRhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGFydCkge1xuICAgICAgICAgICAgd2Fsa2VyLnByZXYoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2Fsa2VyLm5leHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgICAgY29uc3QgaW5zZXJ0TmV3QmxvY2tBZnRlciA9ICgpID0+IHtcbiAgICAgICAgbGV0IGJsb2NrO1xuICAgICAgICBpZiAoL14oSFsxLTZdfFBSRXxGSUdVUkUpJC8udGVzdChwYXJlbnRCbG9ja05hbWUpICYmIGNvbnRhaW5lckJsb2NrTmFtZSAhPT0gJ0hHUk9VUCcpIHtcbiAgICAgICAgICBibG9jayA9IGNyZWF0ZU5ld0Jsb2NrJDEobmV3QmxvY2tOYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBibG9jayA9IGNyZWF0ZU5ld0Jsb2NrJDEoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvdWxkRW5kQ29udGFpbmVyKGVkaXRvciwgY29udGFpbmVyQmxvY2spICYmIGNhblNwbGl0QmxvY2soZG9tLCBjb250YWluZXJCbG9jaykgJiYgZG9tLmlzRW1wdHkocGFyZW50QmxvY2ssIHVuZGVmaW5lZCwgeyBpbmNsdWRlWndzcDogdHJ1ZSB9KSkge1xuICAgICAgICAgIGJsb2NrID0gZG9tLnNwbGl0KGNvbnRhaW5lckJsb2NrLCBwYXJlbnRCbG9jayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9tLmluc2VydEFmdGVyKGJsb2NrLCBwYXJlbnRCbG9jayk7XG4gICAgICAgIH1cbiAgICAgICAgbW92ZVRvQ2FyZXRQb3NpdGlvbihlZGl0b3IsIGJsb2NrKTtcbiAgICAgICAgcmV0dXJuIGJsb2NrO1xuICAgICAgfTtcbiAgICAgIG5vcm1hbGl6ZSQyKGRvbSwgcm5nKS5lYWNoKG5vcm1SbmcgPT4ge1xuICAgICAgICBybmcuc2V0U3RhcnQobm9ybVJuZy5zdGFydENvbnRhaW5lciwgbm9ybVJuZy5zdGFydE9mZnNldCk7XG4gICAgICAgIHJuZy5zZXRFbmQobm9ybVJuZy5lbmRDb250YWluZXIsIG5vcm1SbmcuZW5kT2Zmc2V0KTtcbiAgICAgIH0pO1xuICAgICAgY29udGFpbmVyID0gcm5nLnN0YXJ0Q29udGFpbmVyO1xuICAgICAgb2Zmc2V0ID0gcm5nLnN0YXJ0T2Zmc2V0O1xuICAgICAgY29uc3Qgc2hpZnRLZXkgPSAhIShldnQgJiYgZXZ0LnNoaWZ0S2V5KTtcbiAgICAgIGNvbnN0IGN0cmxLZXkgPSAhIShldnQgJiYgZXZ0LmN0cmxLZXkpO1xuICAgICAgaWYgKGlzRWxlbWVudCQ2KGNvbnRhaW5lcikgJiYgY29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKSAmJiAhY29sbGFwc2VkQW5kQ2VmKSB7XG4gICAgICAgIGlzQWZ0ZXJMYXN0Tm9kZUluQ29udGFpbmVyID0gb2Zmc2V0ID4gY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLmNoaWxkTm9kZXNbTWF0aC5taW4ob2Zmc2V0LCBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGggLSAxKV0gfHwgY29udGFpbmVyO1xuICAgICAgICBpZiAoaXNBZnRlckxhc3ROb2RlSW5Db250YWluZXIgJiYgaXNUZXh0JGEoY29udGFpbmVyKSkge1xuICAgICAgICAgIG9mZnNldCA9IGNvbnRhaW5lci5kYXRhLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBlZGl0YWJsZVJvb3QgPSBnZXRFZGl0YWJsZVJvb3QoZG9tLCBjb250YWluZXIpO1xuICAgICAgaWYgKCFlZGl0YWJsZVJvb3QgfHwgaXNXaXRoaW5Ob25FZGl0YWJsZUxpc3QoZWRpdG9yLCBjb250YWluZXIpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghc2hpZnRLZXkpIHtcbiAgICAgICAgY29udGFpbmVyID0gd3JhcFNlbGZBbmRTaWJsaW5nc0luRGVmYXVsdEJsb2NrKGVkaXRvciwgbmV3QmxvY2tOYW1lLCBybmcsIGNvbnRhaW5lciwgb2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGxldCBwYXJlbnRCbG9jayA9IGRvbS5nZXRQYXJlbnQoY29udGFpbmVyLCBkb20uaXNCbG9jaykgfHwgZG9tLmdldFJvb3QoKTtcbiAgICAgIGNvbnRhaW5lckJsb2NrID0gaXNOb25OdWxsYWJsZShwYXJlbnRCbG9jayA9PT0gbnVsbCB8fCBwYXJlbnRCbG9jayA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyZW50QmxvY2sucGFyZW50Tm9kZSkgPyBkb20uZ2V0UGFyZW50KHBhcmVudEJsb2NrLnBhcmVudE5vZGUsIGRvbS5pc0Jsb2NrKSA6IG51bGw7XG4gICAgICBwYXJlbnRCbG9ja05hbWUgPSBwYXJlbnRCbG9jayA/IHBhcmVudEJsb2NrLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgOiAnJztcbiAgICAgIGNvbnN0IGNvbnRhaW5lckJsb2NrTmFtZSA9IGNvbnRhaW5lckJsb2NrID8gY29udGFpbmVyQmxvY2subm9kZU5hbWUudG9VcHBlckNhc2UoKSA6ICcnO1xuICAgICAgaWYgKGNvbnRhaW5lckJsb2NrTmFtZSA9PT0gJ0xJJyAmJiAhY3RybEtleSkge1xuICAgICAgICBjb25zdCBsaUJsb2NrID0gY29udGFpbmVyQmxvY2s7XG4gICAgICAgIHBhcmVudEJsb2NrID0gbGlCbG9jaztcbiAgICAgICAgY29udGFpbmVyQmxvY2sgPSBsaUJsb2NrLnBhcmVudE5vZGU7XG4gICAgICAgIHBhcmVudEJsb2NrTmFtZSA9IGNvbnRhaW5lckJsb2NrTmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0VsZW1lbnQkNihjb250YWluZXJCbG9jaykgJiYgaXNMYXN0RW1wdHlCbG9ja0luRGV0YWlscyhlZGl0b3IsIHNoaWZ0S2V5LCBwYXJlbnRCbG9jaykpIHtcbiAgICAgICAgcmV0dXJuIGluc2VydE5ld0xpbmUoZWRpdG9yLCBjcmVhdGVOZXdCbG9jayQxLCBwYXJlbnRCbG9jayk7XG4gICAgICB9XG4gICAgICBpZiAoL14oTEl8RFR8REQpJC8udGVzdChwYXJlbnRCbG9ja05hbWUpICYmIGlzRWxlbWVudCQ2KGNvbnRhaW5lckJsb2NrKSkge1xuICAgICAgICBpZiAoZG9tLmlzRW1wdHkocGFyZW50QmxvY2spKSB7XG4gICAgICAgICAgaW5zZXJ0JDQoZWRpdG9yLCBjcmVhdGVOZXdCbG9jayQxLCBjb250YWluZXJCbG9jaywgcGFyZW50QmxvY2ssIG5ld0Jsb2NrTmFtZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWNvbGxhcHNlZEFuZENlZiAmJiAocGFyZW50QmxvY2sgPT09IGVkaXRvci5nZXRCb2R5KCkgfHwgIWNhblNwbGl0QmxvY2soZG9tLCBwYXJlbnRCbG9jaykpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcmVudEJsb2NrUGFyZW50ID0gcGFyZW50QmxvY2sucGFyZW50Tm9kZTtcbiAgICAgIGxldCBuZXdCbG9jaztcbiAgICAgIGlmIChjb2xsYXBzZWRBbmRDZWYpIHtcbiAgICAgICAgbmV3QmxvY2sgPSBjcmVhdGVOZXdCbG9jayQxKG5ld0Jsb2NrTmFtZSk7XG4gICAgICAgIGNoaWxkLmZvbGQoKCkgPT4ge1xuICAgICAgICAgIGFwcGVuZCQxKHN0YXJ0LCBTdWdhckVsZW1lbnQuZnJvbURvbShuZXdCbG9jaykpO1xuICAgICAgICB9LCBjaGlsZCA9PiB7XG4gICAgICAgICAgYmVmb3JlJDMoY2hpbGQsIFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5ld0Jsb2NrKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldEN1cnNvckxvY2F0aW9uKG5ld0Jsb2NrLCAwKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNDYXJldENvbnRhaW5lckJsb2NrJDEocGFyZW50QmxvY2spKSB7XG4gICAgICAgIG5ld0Jsb2NrID0gc2hvd0NhcmV0Q29udGFpbmVyQmxvY2socGFyZW50QmxvY2spO1xuICAgICAgICBpZiAoZG9tLmlzRW1wdHkocGFyZW50QmxvY2spKSB7XG4gICAgICAgICAgZW1wdHlCbG9jayhwYXJlbnRCbG9jayk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Rm9yY2VkQmxvY2tBdHRycyhlZGl0b3IsIG5ld0Jsb2NrKTtcbiAgICAgICAgbW92ZVRvQ2FyZXRQb3NpdGlvbihlZGl0b3IsIG5ld0Jsb2NrKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNDYXJldEF0U3RhcnRPckVuZE9mQmxvY2soZmFsc2UpKSB7XG4gICAgICAgIG5ld0Jsb2NrID0gaW5zZXJ0TmV3QmxvY2tBZnRlcigpO1xuICAgICAgfSBlbHNlIGlmIChpc0NhcmV0QXRTdGFydE9yRW5kT2ZCbG9jayh0cnVlKSAmJiBwYXJlbnRCbG9ja1BhcmVudCkge1xuICAgICAgICBuZXdCbG9jayA9IHBhcmVudEJsb2NrUGFyZW50Lmluc2VydEJlZm9yZShjcmVhdGVOZXdCbG9jayQxKCksIHBhcmVudEJsb2NrKTtcbiAgICAgICAgY29uc3QgaXNOZWFyQ2hpbGRyZW4gPSBoYXNDaGlsZE5vZGVzKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJuZy5zdGFydENvbnRhaW5lcikpICYmIHJuZy5jb2xsYXBzZWQ7XG4gICAgICAgIG1vdmVUb0NhcmV0UG9zaXRpb24oZWRpdG9yLCBjb250YWluZXJBbmRTaWJsaW5nTmFtZShwYXJlbnRCbG9jaywgJ0hSJykgfHwgaXNOZWFyQ2hpbGRyZW4gPyBuZXdCbG9jayA6IHBhcmVudEJsb2NrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRtcFJuZyA9IGluY2x1ZGVad3NwSW5SYW5nZShybmcpLmNsb25lUmFuZ2UoKTtcbiAgICAgICAgdG1wUm5nLnNldEVuZEFmdGVyKHBhcmVudEJsb2NrKTtcbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSB0bXBSbmcuZXh0cmFjdENvbnRlbnRzKCk7XG4gICAgICAgIHRyaW1ad3NwKGZyYWdtZW50KTtcbiAgICAgICAgdHJpbUxlYWRpbmdMaW5lQnJlYWtzKGZyYWdtZW50KTtcbiAgICAgICAgbmV3QmxvY2sgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuICAgICAgICBkb20uaW5zZXJ0QWZ0ZXIoZnJhZ21lbnQsIHBhcmVudEJsb2NrKTtcbiAgICAgICAgdHJpbUlubGluZUVsZW1lbnRzT25MZWZ0U2lkZU9mQmxvY2soZG9tLCBub25FbXB0eUVsZW1lbnRzTWFwLCBuZXdCbG9jayk7XG4gICAgICAgIGFkZEJyVG9CbG9ja0lmTmVlZGVkKGRvbSwgcGFyZW50QmxvY2spO1xuICAgICAgICBpZiAoZG9tLmlzRW1wdHkocGFyZW50QmxvY2spKSB7XG4gICAgICAgICAgZW1wdHlCbG9jayhwYXJlbnRCbG9jayk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3QmxvY2subm9ybWFsaXplKCk7XG4gICAgICAgIGlmIChkb20uaXNFbXB0eShuZXdCbG9jaykpIHtcbiAgICAgICAgICBkb20ucmVtb3ZlKG5ld0Jsb2NrKTtcbiAgICAgICAgICBpbnNlcnROZXdCbG9ja0FmdGVyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0Rm9yY2VkQmxvY2tBdHRycyhlZGl0b3IsIG5ld0Jsb2NrKTtcbiAgICAgICAgICBtb3ZlVG9DYXJldFBvc2l0aW9uKGVkaXRvciwgbmV3QmxvY2spO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkb20uc2V0QXR0cmliKG5ld0Jsb2NrLCAnaWQnLCAnJyk7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ05ld0Jsb2NrJywgeyBuZXdCbG9jayB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZha2VFdmVudE5hbWUkMSA9ICdpbnNlcnRQYXJhZ3JhcGgnO1xuICAgIGNvbnN0IGJsb2NrYnJlYWsgPSB7XG4gICAgICBpbnNlcnQ6IGluc2VydCQzLFxuICAgICAgZmFrZUV2ZW50TmFtZTogZmFrZUV2ZW50TmFtZSQxXG4gICAgfTtcblxuICAgIGNvbnN0IGhhc1JpZ2h0U2lkZUNvbnRlbnQgPSAoc2NoZW1hLCBjb250YWluZXIsIHBhcmVudEJsb2NrKSA9PiB7XG4gICAgICBjb25zdCB3YWxrZXIgPSBuZXcgRG9tVHJlZVdhbGtlcihjb250YWluZXIsIHBhcmVudEJsb2NrKTtcbiAgICAgIGxldCBub2RlO1xuICAgICAgY29uc3Qgbm9uRW1wdHlFbGVtZW50c01hcCA9IHNjaGVtYS5nZXROb25FbXB0eUVsZW1lbnRzKCk7XG4gICAgICB3aGlsZSAobm9kZSA9IHdhbGtlci5uZXh0KCkpIHtcbiAgICAgICAgaWYgKG5vbkVtcHR5RWxlbWVudHNNYXBbbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSB8fCBpc1RleHQkYShub2RlKSAmJiBub2RlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgY29uc3QgbW92ZVNlbGVjdGlvblRvQnIgPSAoZWRpdG9yLCBickVsbSwgZXh0cmFCcikgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLmRvbS5jcmVhdGVSbmcoKTtcbiAgICAgIGlmICghZXh0cmFCcikge1xuICAgICAgICBybmcuc2V0U3RhcnRBZnRlcihickVsbSk7XG4gICAgICAgIHJuZy5zZXRFbmRBZnRlcihickVsbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBybmcuc2V0U3RhcnRCZWZvcmUoYnJFbG0pO1xuICAgICAgICBybmcuc2V0RW5kQmVmb3JlKGJyRWxtKTtcbiAgICAgIH1cbiAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG4gICAgICBzY3JvbGxSYW5nZUludG9WaWV3KGVkaXRvciwgcm5nKTtcbiAgICB9O1xuICAgIGNvbnN0IGluc2VydEJyQXRDYXJldCA9IChlZGl0b3IsIGV2dCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBybmcgPSBzZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBsZXQgYnJFbG07XG4gICAgICBsZXQgZXh0cmFCciA9IGZhbHNlO1xuICAgICAgbm9ybWFsaXplJDIoZG9tLCBybmcpLmVhY2gobm9ybVJuZyA9PiB7XG4gICAgICAgIHJuZy5zZXRTdGFydChub3JtUm5nLnN0YXJ0Q29udGFpbmVyLCBub3JtUm5nLnN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgcm5nLnNldEVuZChub3JtUm5nLmVuZENvbnRhaW5lciwgbm9ybVJuZy5lbmRPZmZzZXQpO1xuICAgICAgfSk7XG4gICAgICBsZXQgb2Zmc2V0ID0gcm5nLnN0YXJ0T2Zmc2V0O1xuICAgICAgbGV0IGNvbnRhaW5lciA9IHJuZy5zdGFydENvbnRhaW5lcjtcbiAgICAgIGlmIChpc0VsZW1lbnQkNihjb250YWluZXIpICYmIGNvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgY29uc3QgaXNBZnRlckxhc3ROb2RlSW5Db250YWluZXIgPSBvZmZzZXQgPiBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGggLSAxO1xuICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIuY2hpbGROb2Rlc1tNYXRoLm1pbihvZmZzZXQsIGNvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCAtIDEpXSB8fCBjb250YWluZXI7XG4gICAgICAgIGlmIChpc0FmdGVyTGFzdE5vZGVJbkNvbnRhaW5lciAmJiBpc1RleHQkYShjb250YWluZXIpKSB7XG4gICAgICAgICAgb2Zmc2V0ID0gY29udGFpbmVyLmRhdGEubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9mZnNldCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCBwYXJlbnRCbG9jayA9IGRvbS5nZXRQYXJlbnQoY29udGFpbmVyLCBkb20uaXNCbG9jayk7XG4gICAgICBjb25zdCBjb250YWluZXJCbG9jayA9IHBhcmVudEJsb2NrICYmIHBhcmVudEJsb2NrLnBhcmVudE5vZGUgPyBkb20uZ2V0UGFyZW50KHBhcmVudEJsb2NrLnBhcmVudE5vZGUsIGRvbS5pc0Jsb2NrKSA6IG51bGw7XG4gICAgICBjb25zdCBjb250YWluZXJCbG9ja05hbWUgPSBjb250YWluZXJCbG9jayA/IGNvbnRhaW5lckJsb2NrLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgOiAnJztcbiAgICAgIGNvbnN0IGlzQ29udHJvbEtleSA9ICEhKGV2dCAmJiBldnQuY3RybEtleSk7XG4gICAgICBpZiAoY29udGFpbmVyQmxvY2tOYW1lID09PSAnTEknICYmICFpc0NvbnRyb2xLZXkpIHtcbiAgICAgICAgcGFyZW50QmxvY2sgPSBjb250YWluZXJCbG9jaztcbiAgICAgIH1cbiAgICAgIGlmIChpc1RleHQkYShjb250YWluZXIpICYmIG9mZnNldCA+PSBjb250YWluZXIuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKCFoYXNSaWdodFNpZGVDb250ZW50KGVkaXRvci5zY2hlbWEsIGNvbnRhaW5lciwgcGFyZW50QmxvY2sgfHwgZG9tLmdldFJvb3QoKSkpIHtcbiAgICAgICAgICBickVsbSA9IGRvbS5jcmVhdGUoJ2JyJyk7XG4gICAgICAgICAgcm5nLmluc2VydE5vZGUoYnJFbG0pO1xuICAgICAgICAgIHJuZy5zZXRTdGFydEFmdGVyKGJyRWxtKTtcbiAgICAgICAgICBybmcuc2V0RW5kQWZ0ZXIoYnJFbG0pO1xuICAgICAgICAgIGV4dHJhQnIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBickVsbSA9IGRvbS5jcmVhdGUoJ2JyJyk7XG4gICAgICByYW5nZUluc2VydE5vZGUoZG9tLCBybmcsIGJyRWxtKTtcbiAgICAgIG1vdmVTZWxlY3Rpb25Ub0JyKGVkaXRvciwgYnJFbG0sIGV4dHJhQnIpO1xuICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLmFkZCgpO1xuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0QnJCZWZvcmUgPSAoZWRpdG9yLCBpbmxpbmUpID0+IHtcbiAgICAgIGNvbnN0IGJyID0gU3VnYXJFbGVtZW50LmZyb21UYWcoJ2JyJyk7XG4gICAgICBiZWZvcmUkMyhTdWdhckVsZW1lbnQuZnJvbURvbShpbmxpbmUpLCBicik7XG4gICAgICBlZGl0b3IudW5kb01hbmFnZXIuYWRkKCk7XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnRCckFmdGVyID0gKGVkaXRvciwgaW5saW5lKSA9PiB7XG4gICAgICBpZiAoIWhhc0JyQWZ0ZXIoZWRpdG9yLmdldEJvZHkoKSwgaW5saW5lKSkge1xuICAgICAgICBhZnRlciQ0KFN1Z2FyRWxlbWVudC5mcm9tRG9tKGlubGluZSksIFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdicicpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJyID0gU3VnYXJFbGVtZW50LmZyb21UYWcoJ2JyJyk7XG4gICAgICBhZnRlciQ0KFN1Z2FyRWxlbWVudC5mcm9tRG9tKGlubGluZSksIGJyKTtcbiAgICAgIG1vdmVTZWxlY3Rpb25Ub0JyKGVkaXRvciwgYnIuZG9tLCBmYWxzZSk7XG4gICAgICBlZGl0b3IudW5kb01hbmFnZXIuYWRkKCk7XG4gICAgfTtcbiAgICBjb25zdCBpc0JlZm9yZUJyID0gcG9zID0+IHtcbiAgICAgIHJldHVybiBpc0JyJDYocG9zLmdldE5vZGUoKSk7XG4gICAgfTtcbiAgICBjb25zdCBoYXNCckFmdGVyID0gKHJvb3ROb2RlLCBzdGFydE5vZGUpID0+IHtcbiAgICAgIGlmIChpc0JlZm9yZUJyKENhcmV0UG9zaXRpb24uYWZ0ZXIoc3RhcnROb2RlKSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV4dFBvc2l0aW9uKHJvb3ROb2RlLCBDYXJldFBvc2l0aW9uLmFmdGVyKHN0YXJ0Tm9kZSkpLm1hcChwb3MgPT4ge1xuICAgICAgICAgIHJldHVybiBpc0JyJDYocG9zLmdldE5vZGUoKSk7XG4gICAgICAgIH0pLmdldE9yKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlzQW5jaG9yTGluayA9IGVsbSA9PiB7XG4gICAgICByZXR1cm4gZWxtICYmIGVsbS5ub2RlTmFtZSA9PT0gJ0EnICYmICdocmVmJyBpbiBlbG07XG4gICAgfTtcbiAgICBjb25zdCBpc0luc2lkZUFuY2hvciA9IGxvY2F0aW9uID0+IHtcbiAgICAgIHJldHVybiBsb2NhdGlvbi5mb2xkKG5ldmVyLCBpc0FuY2hvckxpbmssIGlzQW5jaG9yTGluaywgbmV2ZXIpO1xuICAgIH07XG4gICAgY29uc3QgcmVhZElubGluZUFuY2hvckxvY2F0aW9uID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGlzSW5saW5lVGFyZ2V0JDEgPSBjdXJyeShpc0lubGluZVRhcmdldCwgZWRpdG9yKTtcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKTtcbiAgICAgIHJldHVybiByZWFkTG9jYXRpb24oaXNJbmxpbmVUYXJnZXQkMSwgZWRpdG9yLmdldEJvZHkoKSwgcG9zaXRpb24pLmZpbHRlcihpc0luc2lkZUFuY2hvcik7XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnRCck91dHNpZGVBbmNob3IgPSAoZWRpdG9yLCBsb2NhdGlvbikgPT4ge1xuICAgICAgbG9jYXRpb24uZm9sZChub29wLCBjdXJyeShpbnNlcnRCckJlZm9yZSwgZWRpdG9yKSwgY3VycnkoaW5zZXJ0QnJBZnRlciwgZWRpdG9yKSwgbm9vcCk7XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnQkMiA9IChlZGl0b3IsIGV2dCkgPT4ge1xuICAgICAgY29uc3QgYW5jaG9yTG9jYXRpb24gPSByZWFkSW5saW5lQW5jaG9yTG9jYXRpb24oZWRpdG9yKTtcbiAgICAgIGlmIChhbmNob3JMb2NhdGlvbi5pc1NvbWUoKSkge1xuICAgICAgICBhbmNob3JMb2NhdGlvbi5lYWNoKGN1cnJ5KGluc2VydEJyT3V0c2lkZUFuY2hvciwgZWRpdG9yKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnNlcnRCckF0Q2FyZXQoZWRpdG9yLCBldnQpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZmFrZUV2ZW50TmFtZSA9ICdpbnNlcnRMaW5lQnJlYWsnO1xuICAgIGNvbnN0IGxpbmVicmVhayA9IHtcbiAgICAgIGluc2VydDogaW5zZXJ0JDIsXG4gICAgICBmYWtlRXZlbnROYW1lXG4gICAgfTtcblxuICAgIGNvbnN0IG1hdGNoZXNTZWxlY3RvciA9IChlZGl0b3IsIHNlbGVjdG9yKSA9PiB7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50QmxvY2skMShlZGl0b3IpLmZpbHRlcihwYXJlbnRCbG9jayA9PiB7XG4gICAgICAgIHJldHVybiBzZWxlY3Rvci5sZW5ndGggPiAwICYmIGlzJDEoU3VnYXJFbGVtZW50LmZyb21Eb20ocGFyZW50QmxvY2spLCBzZWxlY3Rvcik7XG4gICAgICB9KS5pc1NvbWUoKTtcbiAgICB9O1xuICAgIGNvbnN0IHNob3VsZEluc2VydEJyID0gZWRpdG9yID0+IHtcbiAgICAgIHJldHVybiBtYXRjaGVzU2VsZWN0b3IoZWRpdG9yLCBnZXRCck5ld0xpbmVTZWxlY3RvcihlZGl0b3IpKTtcbiAgICB9O1xuICAgIGNvbnN0IHNob3VsZEJsb2NrTmV3TGluZSQxID0gZWRpdG9yID0+IHtcbiAgICAgIHJldHVybiBtYXRjaGVzU2VsZWN0b3IoZWRpdG9yLCBnZXROb05ld0xpbmVTZWxlY3RvcihlZGl0b3IpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbmV3TGluZUFjdGlvbiA9IEFkdC5nZW5lcmF0ZShbXG4gICAgICB7IGJyOiBbXSB9LFxuICAgICAgeyBibG9jazogW10gfSxcbiAgICAgIHsgbm9uZTogW10gfVxuICAgIF0pO1xuICAgIGNvbnN0IHNob3VsZEJsb2NrTmV3TGluZSA9IChlZGl0b3IsIF9zaGlmdEtleSkgPT4ge1xuICAgICAgcmV0dXJuIHNob3VsZEJsb2NrTmV3TGluZSQxKGVkaXRvcik7XG4gICAgfTtcbiAgICBjb25zdCBpbkxpc3RCbG9jayA9IHJlcXVpcmVkU3RhdGUgPT4ge1xuICAgICAgcmV0dXJuIChlZGl0b3IsIF9zaGlmdEtleSkgPT4ge1xuICAgICAgICByZXR1cm4gaXNMaXN0SXRlbVBhcmVudEJsb2NrKGVkaXRvcikgPT09IHJlcXVpcmVkU3RhdGU7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgaW5CbG9jayA9IChibG9ja05hbWUsIHJlcXVpcmVkU3RhdGUpID0+IChlZGl0b3IsIF9zaGlmdEtleSkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGUgPSBnZXRQYXJlbnRCbG9ja05hbWUoZWRpdG9yKSA9PT0gYmxvY2tOYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICByZXR1cm4gc3RhdGUgPT09IHJlcXVpcmVkU3RhdGU7XG4gICAgfTtcbiAgICBjb25zdCBpbkNlZkJsb2NrID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGVkaXRhYmxlUm9vdCA9IGdldEVkaXRhYmxlUm9vdChlZGl0b3IuZG9tLCBlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KCkpO1xuICAgICAgcmV0dXJuIGlzTnVsbGFibGUoZWRpdGFibGVSb290KTtcbiAgICB9O1xuICAgIGNvbnN0IGluUHJlQmxvY2sgPSByZXF1aXJlZFN0YXRlID0+IGluQmxvY2soJ3ByZScsIHJlcXVpcmVkU3RhdGUpO1xuICAgIGNvbnN0IGluU3VtbWFyeUJsb2NrID0gKCkgPT4gaW5CbG9jaygnc3VtbWFyeScsIHRydWUpO1xuICAgIGNvbnN0IHNob3VsZFB1dEJySW5QcmUgPSByZXF1aXJlZFN0YXRlID0+IHtcbiAgICAgIHJldHVybiAoZWRpdG9yLCBfc2hpZnRLZXkpID0+IHtcbiAgICAgICAgcmV0dXJuIHNob3VsZFB1dEJySW5QcmUkMShlZGl0b3IpID09PSByZXF1aXJlZFN0YXRlO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGluQnJDb250ZXh0ID0gKGVkaXRvciwgX3NoaWZ0S2V5KSA9PiB7XG4gICAgICByZXR1cm4gc2hvdWxkSW5zZXJ0QnIoZWRpdG9yKTtcbiAgICB9O1xuICAgIGNvbnN0IGhhc1NoaWZ0S2V5ID0gKF9lZGl0b3IsIHNoaWZ0S2V5KSA9PiB7XG4gICAgICByZXR1cm4gc2hpZnRLZXk7XG4gICAgfTtcbiAgICBjb25zdCBjYW5JbnNlcnRJbnRvRWRpdGFibGVSb290ID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGZvcmNlZFJvb3RCbG9jayA9IGdldEZvcmNlZFJvb3RCbG9jayhlZGl0b3IpO1xuICAgICAgY29uc3Qgcm9vdEVkaXRhYmxlID0gZ2V0RWRpdGFibGVSb290KGVkaXRvci5kb20sIGVkaXRvci5zZWxlY3Rpb24uZ2V0U3RhcnQoKSk7XG4gICAgICByZXR1cm4gaXNOb25OdWxsYWJsZShyb290RWRpdGFibGUpICYmIGVkaXRvci5zY2hlbWEuaXNWYWxpZENoaWxkKHJvb3RFZGl0YWJsZS5ub2RlTmFtZSwgZm9yY2VkUm9vdEJsb2NrKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzSW5Sb290V2l0aEVtcHR5T3JDRUYgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gU3VnYXJFbGVtZW50LmZyb21Eb20ocm5nLnN0YXJ0Q29udGFpbmVyKTtcbiAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGQkMShzdGFydCwgcm5nLnN0YXJ0T2Zmc2V0KTtcbiAgICAgIGNvbnN0IGlzQ2VmT3B0ID0gY2hpbGQubWFwKGVsZW1lbnQgPT4gaXNIVE1MRWxlbWVudChlbGVtZW50KSAmJiAhaXNFZGl0YWJsZSQzKGVsZW1lbnQpKTtcbiAgICAgIHJldHVybiBybmcuY29sbGFwc2VkICYmIGlzQ2VmT3B0LmdldE9yKHRydWUpO1xuICAgIH07XG4gICAgY29uc3QgbWF0Y2ggPSAocHJlZGljYXRlcywgYWN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gKGVkaXRvciwgc2hpZnRLZXkpID0+IHtcbiAgICAgICAgY29uc3QgaXNNYXRjaCA9IGZvbGRsKHByZWRpY2F0ZXMsIChyZXMsIHApID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzICYmIHAoZWRpdG9yLCBzaGlmdEtleSk7XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICByZXR1cm4gaXNNYXRjaCA/IE9wdGlvbmFsLnNvbWUoYWN0aW9uKSA6IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBnZXRBY3Rpb24gPSAoZWRpdG9yLCBldnQpID0+IHtcbiAgICAgIHJldHVybiBldmFsdWF0ZVVudGlsKFtcbiAgICAgICAgbWF0Y2goW3Nob3VsZEJsb2NrTmV3TGluZV0sIG5ld0xpbmVBY3Rpb24ubm9uZSgpKSxcbiAgICAgICAgbWF0Y2goW1xuICAgICAgICAgIGluUHJlQmxvY2sodHJ1ZSksXG4gICAgICAgICAgaW5DZWZCbG9ja1xuICAgICAgICBdLCBuZXdMaW5lQWN0aW9uLm5vbmUoKSksXG4gICAgICAgIG1hdGNoKFtpblN1bW1hcnlCbG9jaygpXSwgbmV3TGluZUFjdGlvbi5icigpKSxcbiAgICAgICAgbWF0Y2goW1xuICAgICAgICAgIGluUHJlQmxvY2sodHJ1ZSksXG4gICAgICAgICAgc2hvdWxkUHV0QnJJblByZShmYWxzZSksXG4gICAgICAgICAgaGFzU2hpZnRLZXlcbiAgICAgICAgXSwgbmV3TGluZUFjdGlvbi5icigpKSxcbiAgICAgICAgbWF0Y2goW1xuICAgICAgICAgIGluUHJlQmxvY2sodHJ1ZSksXG4gICAgICAgICAgc2hvdWxkUHV0QnJJblByZShmYWxzZSlcbiAgICAgICAgXSwgbmV3TGluZUFjdGlvbi5ibG9jaygpKSxcbiAgICAgICAgbWF0Y2goW1xuICAgICAgICAgIGluUHJlQmxvY2sodHJ1ZSksXG4gICAgICAgICAgc2hvdWxkUHV0QnJJblByZSh0cnVlKSxcbiAgICAgICAgICBoYXNTaGlmdEtleVxuICAgICAgICBdLCBuZXdMaW5lQWN0aW9uLmJsb2NrKCkpLFxuICAgICAgICBtYXRjaChbXG4gICAgICAgICAgaW5QcmVCbG9jayh0cnVlKSxcbiAgICAgICAgICBzaG91bGRQdXRCckluUHJlKHRydWUpXG4gICAgICAgIF0sIG5ld0xpbmVBY3Rpb24uYnIoKSksXG4gICAgICAgIG1hdGNoKFtcbiAgICAgICAgICBpbkxpc3RCbG9jayh0cnVlKSxcbiAgICAgICAgICBoYXNTaGlmdEtleVxuICAgICAgICBdLCBuZXdMaW5lQWN0aW9uLmJyKCkpLFxuICAgICAgICBtYXRjaChbaW5MaXN0QmxvY2sodHJ1ZSldLCBuZXdMaW5lQWN0aW9uLmJsb2NrKCkpLFxuICAgICAgICBtYXRjaChbaW5CckNvbnRleHRdLCBuZXdMaW5lQWN0aW9uLmJyKCkpLFxuICAgICAgICBtYXRjaChbaGFzU2hpZnRLZXldLCBuZXdMaW5lQWN0aW9uLmJyKCkpLFxuICAgICAgICBtYXRjaChbY2FuSW5zZXJ0SW50b0VkaXRhYmxlUm9vdF0sIG5ld0xpbmVBY3Rpb24uYmxvY2soKSksXG4gICAgICAgIG1hdGNoKFtpc0luUm9vdFdpdGhFbXB0eU9yQ0VGXSwgbmV3TGluZUFjdGlvbi5ibG9jaygpKVxuICAgICAgXSwgW1xuICAgICAgICBlZGl0b3IsXG4gICAgICAgICEhKGV2dCAmJiBldnQuc2hpZnRLZXkpXG4gICAgICBdKS5nZXRPcihuZXdMaW5lQWN0aW9uLm5vbmUoKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGluc2VydEJyZWFrID0gKGJyZWFrVHlwZSwgZWRpdG9yLCBldnQpID0+IHtcbiAgICAgIGlmICghZWRpdG9yLnNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpKSB7XG4gICAgICAgIGV4ZWNFZGl0b3JEZWxldGVDb21tYW5kKGVkaXRvcik7XG4gICAgICB9XG4gICAgICBpZiAoaXNOb25OdWxsYWJsZShldnQpKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gZmlyZUJlZm9yZUlucHV0RXZlbnQoZWRpdG9yLCBicmVha1R5cGUuZmFrZUV2ZW50TmFtZSk7XG4gICAgICAgIGlmIChldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWtUeXBlLmluc2VydChlZGl0b3IsIGV2dCk7XG4gICAgICBpZiAoaXNOb25OdWxsYWJsZShldnQpKSB7XG4gICAgICAgIGZpcmVJbnB1dEV2ZW50KGVkaXRvciwgYnJlYWtUeXBlLmZha2VFdmVudE5hbWUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0JDEgPSAoZWRpdG9yLCBldnQpID0+IHtcbiAgICAgIGNvbnN0IGJyID0gKCkgPT4gaW5zZXJ0QnJlYWsobGluZWJyZWFrLCBlZGl0b3IsIGV2dCk7XG4gICAgICBjb25zdCBibG9jayA9ICgpID0+IGluc2VydEJyZWFrKGJsb2NrYnJlYWssIGVkaXRvciwgZXZ0KTtcbiAgICAgIGNvbnN0IGxvZ2ljYWxBY3Rpb24gPSBnZXRBY3Rpb24oZWRpdG9yLCBldnQpO1xuICAgICAgc3dpdGNoIChnZXROZXdsaW5lQmVoYXZpb3IoZWRpdG9yKSkge1xuICAgICAgY2FzZSAnbGluZWJyZWFrJzpcbiAgICAgICAgbG9naWNhbEFjdGlvbi5mb2xkKGJyLCBiciwgbm9vcCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYmxvY2snOlxuICAgICAgICBsb2dpY2FsQWN0aW9uLmZvbGQoYmxvY2ssIGJsb2NrLCBub29wKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpbnZlcnQnOlxuICAgICAgICBsb2dpY2FsQWN0aW9uLmZvbGQoYmxvY2ssIGJyLCBub29wKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBsb2dpY2FsQWN0aW9uLmZvbGQoYnIsIGJsb2NrLCBub29wKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHBsYXRmb3JtJDEgPSBkZXRlY3QkMigpO1xuICAgIGNvbnN0IGlzSU9TU2FmYXJpID0gcGxhdGZvcm0kMS5vcy5pc2lPUygpICYmIHBsYXRmb3JtJDEuYnJvd3Nlci5pc1NhZmFyaSgpO1xuICAgIGNvbnN0IGhhbmRsZUVudGVyS2V5RXZlbnQgPSAoZWRpdG9yLCBldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlbmRUeXBpbmdMZXZlbElnbm9yZUxvY2tzKGVkaXRvci51bmRvTWFuYWdlcik7XG4gICAgICBlZGl0b3IudW5kb01hbmFnZXIudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICBpbnNlcnQkMShlZGl0b3IsIGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaXNDYXJldEFmdGVyS29yZWFuQ2hhcmFjdGVyID0gcm5nID0+IHtcbiAgICAgIGlmICghcm5nLmNvbGxhcHNlZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IHJuZy5zdGFydENvbnRhaW5lcjtcbiAgICAgIGlmIChpc1RleHQkYShzdGFydENvbnRhaW5lcikpIHtcbiAgICAgICAgY29uc3Qga29yZWFuQ2hhclJlZ2V4ID0gL15bXFx1QUMwMC1cXHVEN0FGXFx1MTEwMC1cXHUxMUZGXFx1MzEzMC1cXHUzMThGXFx1QTk2MC1cXHVBOTdGXFx1RDdCMC1cXHVEN0ZGXSQvO1xuICAgICAgICBjb25zdCBjaGFyID0gc3RhcnRDb250YWluZXIuZGF0YS5jaGFyQXQocm5nLnN0YXJ0T2Zmc2V0IC0gMSk7XG4gICAgICAgIHJldHVybiBrb3JlYW5DaGFyUmVnZXgudGVzdChjaGFyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldHVwJGggPSBlZGl0b3IgPT4ge1xuICAgICAgbGV0IGlPU1NhZmFyaUtleWRvd25Cb29rbWFyayA9IE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIGNvbnN0IGlPU1NhZmFyaUtleWRvd25PdmVycmlkZSA9IGVkaXRvciA9PiB7XG4gICAgICAgIGlPU1NhZmFyaUtleWRvd25Cb29rbWFyayA9IE9wdGlvbmFsLnNvbWUoZWRpdG9yLnNlbGVjdGlvbi5nZXRCb29rbWFyaygpKTtcbiAgICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLmFkZCgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlPU1NhZmFyaUtleXVwT3ZlcnJpZGUgPSAoZWRpdG9yLCBldmVudCkgPT4ge1xuICAgICAgICBlZGl0b3IudW5kb01hbmFnZXIudW5kbygpO1xuICAgICAgICBpT1NTYWZhcmlLZXlkb3duQm9va21hcmsuZm9sZChub29wLCBiID0+IGVkaXRvci5zZWxlY3Rpb24ubW92ZVRvQm9va21hcmsoYikpO1xuICAgICAgICBoYW5kbGVFbnRlcktleUV2ZW50KGVkaXRvciwgZXZlbnQpO1xuICAgICAgICBpT1NTYWZhcmlLZXlkb3duQm9va21hcmsgPSBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLm9uKCdrZXlkb3duJywgZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gVksuRU5URVIpIHtcbiAgICAgICAgICBpZiAoaXNJT1NTYWZhcmkgJiYgaXNDYXJldEFmdGVyS29yZWFuQ2hhcmFjdGVyKGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCkpKSB7XG4gICAgICAgICAgICBpT1NTYWZhcmlLZXlkb3duT3ZlcnJpZGUoZWRpdG9yKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlRW50ZXJLZXlFdmVudChlZGl0b3IsIGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdrZXl1cCcsIGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IFZLLkVOVEVSKSB7XG4gICAgICAgICAgaU9TU2FmYXJpS2V5ZG93bkJvb2ttYXJrLmVhY2goKCkgPT4gaU9TU2FmYXJpS2V5dXBPdmVycmlkZShlZGl0b3IsIGV2ZW50KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBleGVjdXRlS2V5ZG93bk92ZXJyaWRlJDIgPSAoZWRpdG9yLCBjYXJldCwgZXZ0KSA9PiB7XG4gICAgICBjb25zdCBpc01hYyA9IEVudi5vcy5pc01hY09TKCkgfHwgRW52Lm9zLmlzaU9TKCk7XG4gICAgICBleGVjdXRlKFtcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLkVORCxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlVG9MaW5lRW5kUG9pbnQkMSwgZWRpdG9yLCB0cnVlKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuSE9NRSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlVG9MaW5lRW5kUG9pbnQkMSwgZWRpdG9yLCBmYWxzZSlcbiAgICAgICAgfSxcbiAgICAgICAgLi4uIWlzTWFjID8gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleUNvZGU6IFZLLkhPTUUsXG4gICAgICAgICAgICBhY3Rpb246IGFjdGlvbihzZWxlY3RUb0VuZFBvaW50LCBlZGl0b3IsIGZhbHNlKSxcbiAgICAgICAgICAgIGN0cmxLZXk6IHRydWUsXG4gICAgICAgICAgICBzaGlmdEtleTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5Q29kZTogVksuRU5ELFxuICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb24oc2VsZWN0VG9FbmRQb2ludCwgZWRpdG9yLCB0cnVlKSxcbiAgICAgICAgICAgIGN0cmxLZXk6IHRydWUsXG4gICAgICAgICAgICBzaGlmdEtleTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgXSA6IFtdLFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuRU5ELFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKG1vdmVUb0xpbmVFbmRQb2ludCwgZWRpdG9yLCB0cnVlKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuSE9NRSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihtb3ZlVG9MaW5lRW5kUG9pbnQsIGVkaXRvciwgZmFsc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5FTkQsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24obW92ZVRvTGluZUVuZFBvaW50JDIsIGVkaXRvciwgdHJ1ZSwgY2FyZXQpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5IT01FLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKG1vdmVUb0xpbmVFbmRQb2ludCQyLCBlZGl0b3IsIGZhbHNlLCBjYXJldClcbiAgICAgICAgfVxuICAgICAgXSwgZXZ0KS5lYWNoKF8gPT4ge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2V0dXAkZyA9IChlZGl0b3IsIGNhcmV0KSA9PiB7XG4gICAgICBlZGl0b3Iub24oJ2tleWRvd24nLCBldnQgPT4ge1xuICAgICAgICBpZiAoIWV2dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIGV4ZWN1dGVLZXlkb3duT3ZlcnJpZGUkMihlZGl0b3IsIGNhcmV0LCBldnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0dXAkZiA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3Iub24oJ2lucHV0JywgZSA9PiB7XG4gICAgICAgIGlmICghZS5pc0NvbXBvc2luZykge1xuICAgICAgICAgIG5vcm1hbGl6ZU5ic3BzSW5FZGl0b3IoZWRpdG9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHBsYXRmb3JtID0gZGV0ZWN0JDIoKTtcbiAgICBjb25zdCBleGVjdXRlS2V5dXBBY3Rpb24gPSAoZWRpdG9yLCBjYXJldCwgZXZ0KSA9PiB7XG4gICAgICBleGVjdXRlKFtcbiAgICAgICAge1xuICAgICAgICAgIGtleUNvZGU6IFZLLlBBR0VfVVAsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24obW92ZVRvTGluZUVuZFBvaW50JDIsIGVkaXRvciwgZmFsc2UsIGNhcmV0KVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5Q29kZTogVksuUEFHRV9ET1dOLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uKG1vdmVUb0xpbmVFbmRQb2ludCQyLCBlZGl0b3IsIHRydWUsIGNhcmV0KVxuICAgICAgICB9XG4gICAgICBdLCBldnQpO1xuICAgIH07XG4gICAgY29uc3Qgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uID0gZSA9PiBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGlzUGFnZVVwRG93biA9IGV2dCA9PiBldnQua2V5Q29kZSA9PT0gVksuUEFHRV9VUCB8fCBldnQua2V5Q29kZSA9PT0gVksuUEFHRV9ET1dOO1xuICAgIGNvbnN0IHNldE5vZGVDaGFuZ2VCbG9ja2VyID0gKGJsb2NrZWQsIGVkaXRvciwgYmxvY2spID0+IHtcbiAgICAgIGlmIChibG9jayAmJiAhYmxvY2tlZC5nZXQoKSkge1xuICAgICAgICBlZGl0b3Iub24oJ05vZGVDaGFuZ2UnLCBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24sIHRydWUpO1xuICAgICAgfSBlbHNlIGlmICghYmxvY2sgJiYgYmxvY2tlZC5nZXQoKSkge1xuICAgICAgICBlZGl0b3Iub2ZmKCdOb2RlQ2hhbmdlJywgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKTtcbiAgICAgIH1cbiAgICAgIGJsb2NrZWQuc2V0KGJsb2NrKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldHVwJGUgPSAoZWRpdG9yLCBjYXJldCkgPT4ge1xuICAgICAgaWYgKHBsYXRmb3JtLm9zLmlzTWFjT1MoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBibG9ja2VkID0gQ2VsbChmYWxzZSk7XG4gICAgICBlZGl0b3Iub24oJ2tleWRvd24nLCBldnQgPT4ge1xuICAgICAgICBpZiAoaXNQYWdlVXBEb3duKGV2dCkpIHtcbiAgICAgICAgICBzZXROb2RlQ2hhbmdlQmxvY2tlcihibG9ja2VkLCBlZGl0b3IsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbigna2V5dXAnLCBldnQgPT4ge1xuICAgICAgICBpZiAoIWV2dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIGV4ZWN1dGVLZXl1cEFjdGlvbihlZGl0b3IsIGNhcmV0LCBldnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1BhZ2VVcERvd24oZXZ0KSAmJiBibG9ja2VkLmdldCgpKSB7XG4gICAgICAgICAgc2V0Tm9kZUNoYW5nZUJsb2NrZXIoYmxvY2tlZCwgZWRpdG9yLCBmYWxzZSk7XG4gICAgICAgICAgZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBpbnNlcnRUZXh0QXRQb3NpdGlvbiA9ICh0ZXh0LCBwb3MpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHBvcy5jb250YWluZXIoKTtcbiAgICAgIGNvbnN0IG9mZnNldCA9IHBvcy5vZmZzZXQoKTtcbiAgICAgIGlmIChpc1RleHQkYShjb250YWluZXIpKSB7XG4gICAgICAgIGNvbnRhaW5lci5pbnNlcnREYXRhKG9mZnNldCwgdGV4dCk7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKENhcmV0UG9zaXRpb24oY29udGFpbmVyLCBvZmZzZXQgKyB0ZXh0Lmxlbmd0aCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGdldEVsZW1lbnRGcm9tUG9zaXRpb24ocG9zKS5tYXAoZWxtID0+IHtcbiAgICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IFN1Z2FyRWxlbWVudC5mcm9tVGV4dCh0ZXh0KTtcbiAgICAgICAgICBpZiAocG9zLmlzQXRFbmQoKSkge1xuICAgICAgICAgICAgYWZ0ZXIkNChlbG0sIHRleHROb2RlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYmVmb3JlJDMoZWxtLCB0ZXh0Tm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBDYXJldFBvc2l0aW9uKHRleHROb2RlLmRvbSwgdGV4dC5sZW5ndGgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGluc2VydE5ic3BBdFBvc2l0aW9uID0gY3VycnkoaW5zZXJ0VGV4dEF0UG9zaXRpb24sIG5ic3ApO1xuICAgIGNvbnN0IGluc2VydFNwYWNlQXRQb3NpdGlvbiA9IGN1cnJ5KGluc2VydFRleHRBdFBvc2l0aW9uLCAnICcpO1xuXG4gICAgY29uc3QgaW5zZXJ0U3BhY2VPck5ic3BBdFBvc2l0aW9uID0gKHJvb3QsIHBvcykgPT4gbmVlZHNUb0hhdmVOYnNwKHJvb3QsIHBvcykgPyBpbnNlcnROYnNwQXRQb3NpdGlvbihwb3MpIDogaW5zZXJ0U3BhY2VBdFBvc2l0aW9uKHBvcyk7XG4gICAgY29uc3QgbG9jYXRpb25Ub0NhcmV0UG9zaXRpb24gPSByb290ID0+IGxvY2F0aW9uID0+IGxvY2F0aW9uLmZvbGQoZWxlbWVudCA9PiBwcmV2UG9zaXRpb24ocm9vdC5kb20sIENhcmV0UG9zaXRpb24uYmVmb3JlKGVsZW1lbnQpKSwgZWxlbWVudCA9PiBmaXJzdFBvc2l0aW9uSW4oZWxlbWVudCksIGVsZW1lbnQgPT4gbGFzdFBvc2l0aW9uSW4oZWxlbWVudCksIGVsZW1lbnQgPT4gbmV4dFBvc2l0aW9uKHJvb3QuZG9tLCBDYXJldFBvc2l0aW9uLmFmdGVyKGVsZW1lbnQpKSk7XG4gICAgY29uc3QgaW5zZXJ0SW5saW5lQm91bmRhcnlTcGFjZU9yTmJzcCA9IChyb290LCBwb3MpID0+IGNoZWNrUG9zID0+IG5lZWRzVG9IYXZlTmJzcChyb290LCBjaGVja1BvcykgPyBpbnNlcnROYnNwQXRQb3NpdGlvbihwb3MpIDogaW5zZXJ0U3BhY2VBdFBvc2l0aW9uKHBvcyk7XG4gICAgY29uc3Qgc2V0U2VsZWN0aW9uID0gZWRpdG9yID0+IHBvcyA9PiB7XG4gICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhwb3MudG9SYW5nZSgpKTtcbiAgICAgIGVkaXRvci5ub2RlQ2hhbmdlZCgpO1xuICAgIH07XG4gICAgY29uc3QgaXNJbnNpZGVTdW1tYXJ5ID0gKGRvbVV0aWxzLCBub2RlKSA9PiBkb21VdGlscy5pc0VkaXRhYmxlKGRvbVV0aWxzLmdldFBhcmVudChub2RlLCAnc3VtbWFyeScpKTtcbiAgICBjb25zdCBpbnNlcnRTcGFjZU9yTmJzcEF0U2VsZWN0aW9uID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHBvcyA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQoZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSk7XG4gICAgICBjb25zdCByb290ID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBpZiAoZWRpdG9yLnNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpKSB7XG4gICAgICAgIGNvbnN0IGlzSW5saW5lVGFyZ2V0JDEgPSBjdXJyeShpc0lubGluZVRhcmdldCwgZWRpdG9yKTtcbiAgICAgICAgY29uc3QgY2FyZXRQb3NpdGlvbiA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQoZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSk7XG4gICAgICAgIHJldHVybiByZWFkTG9jYXRpb24oaXNJbmxpbmVUYXJnZXQkMSwgZWRpdG9yLmdldEJvZHkoKSwgY2FyZXRQb3NpdGlvbikuYmluZChsb2NhdGlvblRvQ2FyZXRQb3NpdGlvbihyb290KSkubWFwKGNoZWNrUG9zID0+ICgpID0+IGluc2VydElubGluZUJvdW5kYXJ5U3BhY2VPck5ic3Aocm9vdCwgcG9zKShjaGVja1BvcykuZWFjaChzZXRTZWxlY3Rpb24oZWRpdG9yKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGluc2VydFNwYWNlSW5TdW1tYXJ5QXRTZWxlY3Rpb25PbkZpcmVmb3ggPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgaW5zZXJ0U3BhY2VUaHVuayA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgICBpZiAoIWVkaXRvci5zZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSkge1xuICAgICAgICAgIGVkaXRvci5nZXREb2MoKS5leGVjQ29tbWFuZCgnRGVsZXRlJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zID0gQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKTtcbiAgICAgICAgaW5zZXJ0U3BhY2VPck5ic3BBdFBvc2l0aW9uKHJvb3QsIHBvcykuZWFjaChzZXRTZWxlY3Rpb24oZWRpdG9yKSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHNvbWVJZihFbnYuYnJvd3Nlci5pc0ZpcmVmb3goKSAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRWRpdGFibGUoKSAmJiBpc0luc2lkZVN1bW1hcnkoZWRpdG9yLmRvbSwgZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKS5zdGFydENvbnRhaW5lciksIGluc2VydFNwYWNlVGh1bmspO1xuICAgIH07XG5cbiAgICBjb25zdCBleGVjdXRlS2V5ZG93bk92ZXJyaWRlJDEgPSAoZWRpdG9yLCBldnQpID0+IHtcbiAgICAgIGV4ZWN1dGVXaXRoRGVsYXllZEFjdGlvbihbXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5TUEFDRUJBUixcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihpbnNlcnRTcGFjZU9yTmJzcEF0U2VsZWN0aW9uLCBlZGl0b3IpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlDb2RlOiBWSy5TUEFDRUJBUixcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbihpbnNlcnRTcGFjZUluU3VtbWFyeUF0U2VsZWN0aW9uT25GaXJlZm94LCBlZGl0b3IpXG4gICAgICAgIH1cbiAgICAgIF0sIGV2dCkuZWFjaChhcHBseUFjdGlvbiA9PiB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBldmVudCA9IGZpcmVCZWZvcmVJbnB1dEV2ZW50KGVkaXRvciwgJ2luc2VydFRleHQnLCB7IGRhdGE6ICcgJyB9KTtcbiAgICAgICAgaWYgKCFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIGFwcGx5QWN0aW9uKCk7XG4gICAgICAgICAgZmlyZUlucHV0RXZlbnQoZWRpdG9yLCAnaW5zZXJ0VGV4dCcsIHsgZGF0YTogJyAnIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHNldHVwJGQgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLm9uKCdrZXlkb3duJywgZXZ0ID0+IHtcbiAgICAgICAgaWYgKCFldnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICBleGVjdXRlS2V5ZG93bk92ZXJyaWRlJDEoZWRpdG9yLCBldnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgdGFibGVUYWJOYXZpZ2F0aW9uID0gZWRpdG9yID0+IHtcbiAgICAgIGlmIChoYXNUYWJsZVRhYk5hdmlnYXRpb24oZWRpdG9yKSkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleUNvZGU6IFZLLlRBQixcbiAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uKGhhbmRsZVRhYiwgZWRpdG9yLCB0cnVlKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5Q29kZTogVksuVEFCLFxuICAgICAgICAgICAgc2hpZnRLZXk6IHRydWUsXG4gICAgICAgICAgICBhY3Rpb246IGFjdGlvbihoYW5kbGVUYWIsIGVkaXRvciwgZmFsc2UpXG4gICAgICAgICAgfVxuICAgICAgICBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZXhlY3V0ZUtleWRvd25PdmVycmlkZSA9IChlZGl0b3IsIGV2dCkgPT4ge1xuICAgICAgZXhlY3V0ZShbLi4udGFibGVUYWJOYXZpZ2F0aW9uKGVkaXRvcildLCBldnQpLmVhY2goXyA9PiB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cCRjID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5vbigna2V5ZG93bicsIGV2dCA9PiB7XG4gICAgICAgIGlmICghZXZ0LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgZXhlY3V0ZUtleWRvd25PdmVycmlkZShlZGl0b3IsIGV2dCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBzZXR1cCRiID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5hZGRTaG9ydGN1dCgnTWV0YStQJywgJycsICdtY2VQcmludCcpO1xuICAgICAgc2V0dXAkaihlZGl0b3IpO1xuICAgICAgaWYgKGlzUnRjKGVkaXRvcikpIHtcbiAgICAgICAgcmV0dXJuIENlbGwobnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjYXJldCA9IHNldHVwU2VsZWN0ZWRTdGF0ZShlZGl0b3IpO1xuICAgICAgICBzZXR1cCRsKGVkaXRvcik7XG4gICAgICAgIHNldHVwJGsoZWRpdG9yLCBjYXJldCk7XG4gICAgICAgIHNldHVwJGkoZWRpdG9yLCBjYXJldCk7XG4gICAgICAgIHNldHVwJGgoZWRpdG9yKTtcbiAgICAgICAgc2V0dXAkZChlZGl0b3IpO1xuICAgICAgICBzZXR1cCRmKGVkaXRvcik7XG4gICAgICAgIHNldHVwJGMoZWRpdG9yKTtcbiAgICAgICAgc2V0dXAkZyhlZGl0b3IsIGNhcmV0KTtcbiAgICAgICAgc2V0dXAkZShlZGl0b3IsIGNhcmV0KTtcbiAgICAgICAgcmV0dXJuIGNhcmV0O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjbGFzcyBOb2RlQ2hhbmdlIHtcbiAgICAgIGNvbnN0cnVjdG9yKGVkaXRvcikge1xuICAgICAgICB0aGlzLmxhc3RQYXRoID0gW107XG4gICAgICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yO1xuICAgICAgICBsZXQgbGFzdFJuZztcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmICghKCdvbnNlbGVjdGlvbmNoYW5nZScgaW4gZWRpdG9yLmdldERvYygpKSkge1xuICAgICAgICAgIGVkaXRvci5vbignTm9kZUNoYW5nZSBjbGljayBtb3VzZXVwIGtleXVwIGZvY3VzJywgZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuYXRpdmVSbmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgICAgICAgY29uc3QgZmFrZVJuZyA9IHtcbiAgICAgICAgICAgICAgc3RhcnRDb250YWluZXI6IG5hdGl2ZVJuZy5zdGFydENvbnRhaW5lcixcbiAgICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IG5hdGl2ZVJuZy5zdGFydE9mZnNldCxcbiAgICAgICAgICAgICAgZW5kQ29udGFpbmVyOiBuYXRpdmVSbmcuZW5kQ29udGFpbmVyLFxuICAgICAgICAgICAgICBlbmRPZmZzZXQ6IG5hdGl2ZVJuZy5lbmRPZmZzZXRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoZS50eXBlID09PSAnbm9kZWNoYW5nZScgfHwgIWlzRXEkNChmYWtlUm5nLCBsYXN0Um5nKSkge1xuICAgICAgICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ1NlbGVjdGlvbkNoYW5nZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdFJuZyA9IGZha2VSbmc7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yLm9uKCdjb250ZXh0bWVudScsICgpID0+IHtcbiAgICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ1NlbGVjdGlvbkNoYW5nZScpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLm9uKCdTZWxlY3Rpb25DaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhcnRFbG0gPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KHRydWUpO1xuICAgICAgICAgIGlmICghc3RhcnRFbG0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGhhc0FueVJhbmdlcyhlZGl0b3IpICYmICFzZWxmLmlzU2FtZUVsZW1lbnRQYXRoKHN0YXJ0RWxtKSAmJiBlZGl0b3IuZG9tLmlzQ2hpbGRPZihzdGFydEVsbSwgZWRpdG9yLmdldEJvZHkoKSkpIHtcbiAgICAgICAgICAgIGVkaXRvci5ub2RlQ2hhbmdlZCh7IHNlbGVjdGlvbkNoYW5nZTogdHJ1ZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBlZGl0b3Iub24oJ21vdXNldXAnLCBlID0+IHtcbiAgICAgICAgICBpZiAoIWUuaXNEZWZhdWx0UHJldmVudGVkKCkgJiYgaGFzQW55UmFuZ2VzKGVkaXRvcikpIHtcbiAgICAgICAgICAgIGlmIChlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKS5ub2RlTmFtZSA9PT0gJ0lNRycpIHtcbiAgICAgICAgICAgICAgRGVsYXkuc2V0RWRpdG9yVGltZW91dChlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgbm9kZUNoYW5nZWQoYXJncyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgICAgbGV0IG5vZGU7XG4gICAgICAgIGlmICh0aGlzLmVkaXRvci5pbml0aWFsaXplZCAmJiBzZWxlY3Rpb24gJiYgIXNob3VsZERpc2FibGVOb2RlQ2hhbmdlKHRoaXMuZWRpdG9yKSAmJiAhdGhpcy5lZGl0b3IubW9kZS5pc1JlYWRPbmx5KCkpIHtcbiAgICAgICAgICBjb25zdCByb290ID0gdGhpcy5lZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgICAgIG5vZGUgPSBzZWxlY3Rpb24uZ2V0U3RhcnQodHJ1ZSkgfHwgcm9vdDtcbiAgICAgICAgICBpZiAobm9kZS5vd25lckRvY3VtZW50ICE9PSB0aGlzLmVkaXRvci5nZXREb2MoKSB8fCAhdGhpcy5lZGl0b3IuZG9tLmlzQ2hpbGRPZihub2RlLCByb290KSkge1xuICAgICAgICAgICAgbm9kZSA9IHJvb3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcbiAgICAgICAgICB0aGlzLmVkaXRvci5kb20uZ2V0UGFyZW50KG5vZGUsIG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKG5vZGUgPT09IHJvb3QpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmVkaXRvci5kaXNwYXRjaCgnTm9kZUNoYW5nZScsIHtcbiAgICAgICAgICAgIC4uLmFyZ3MsXG4gICAgICAgICAgICBlbGVtZW50OiBub2RlLFxuICAgICAgICAgICAgcGFyZW50c1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpc1NhbWVFbGVtZW50UGF0aChzdGFydEVsbSkge1xuICAgICAgICBsZXQgaTtcbiAgICAgICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYXRoID0gcmV2ZXJzZShlZGl0b3IuZG9tLmdldFBhcmVudHMoc3RhcnRFbG0sIGFsd2F5cywgZWRpdG9yLmdldEJvZHkoKSkpO1xuICAgICAgICBpZiAoY3VycmVudFBhdGgubGVuZ3RoID09PSB0aGlzLmxhc3RQYXRoLmxlbmd0aCkge1xuICAgICAgICAgIGZvciAoaSA9IGN1cnJlbnRQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UGF0aFtpXSAhPT0gdGhpcy5sYXN0UGF0aFtpXSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGkgPT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RQYXRoID0gY3VycmVudFBhdGg7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sYXN0UGF0aCA9IGN1cnJlbnRQYXRoO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaW1hZ2VJZCA9IGdlbmVyYXRlJDEoJ2ltYWdlJyk7XG4gICAgY29uc3QgZ2V0RHJhZ0ltYWdlID0gdHJhbnNmZXIgPT4ge1xuICAgICAgY29uc3QgZHQgPSB0cmFuc2ZlcjtcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKGR0W2ltYWdlSWRdKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldERyYWdJbWFnZSA9ICh0cmFuc2ZlciwgaW1hZ2VEYXRhKSA9PiB7XG4gICAgICBjb25zdCBkdCA9IHRyYW5zZmVyO1xuICAgICAgZHRbaW1hZ2VJZF0gPSBpbWFnZURhdGE7XG4gICAgfTtcblxuICAgIGNvbnN0IGV2ZW50SWQgPSBnZW5lcmF0ZSQxKCdldmVudCcpO1xuICAgIGNvbnN0IGdldEV2ZW50ID0gdHJhbnNmZXIgPT4ge1xuICAgICAgY29uc3QgZHQgPSB0cmFuc2ZlcjtcbiAgICAgIHJldHVybiBPcHRpb25hbC5mcm9tKGR0W2V2ZW50SWRdKTtcbiAgICB9O1xuICAgIGNvbnN0IG1rU2V0RXZlbnRGbiA9IHR5cGUgPT4gdHJhbnNmZXIgPT4ge1xuICAgICAgY29uc3QgZHQgPSB0cmFuc2ZlcjtcbiAgICAgIGR0W2V2ZW50SWRdID0gdHlwZTtcbiAgICB9O1xuICAgIGNvbnN0IHNldEV2ZW50ID0gKHRyYW5zZmVyLCB0eXBlKSA9PiBta1NldEV2ZW50Rm4odHlwZSkodHJhbnNmZXIpO1xuICAgIGNvbnN0IHNldERyYWdzdGFydEV2ZW50ID0gbWtTZXRFdmVudEZuKDApO1xuICAgIGNvbnN0IHNldERyb3BFdmVudCA9IG1rU2V0RXZlbnRGbigyKTtcbiAgICBjb25zdCBzZXREcmFnZW5kRXZlbnQgPSBta1NldEV2ZW50Rm4oMSk7XG4gICAgY29uc3QgY2hlY2tFdmVudCA9IGV4cGVjdGVkVHlwZSA9PiB0cmFuc2ZlciA9PiB7XG4gICAgICBjb25zdCBkdCA9IHRyYW5zZmVyO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oZHRbZXZlbnRJZF0pLmV4aXN0cyh0eXBlID0+IHR5cGUgPT09IGV4cGVjdGVkVHlwZSk7XG4gICAgfTtcbiAgICBjb25zdCBpc0luRHJhZ1N0YXJ0RXZlbnQgPSBjaGVja0V2ZW50KDApO1xuXG4gICAgY29uc3QgY3JlYXRlRW1wdHlGaWxlTGlzdCA9ICgpID0+IE9iamVjdC5mcmVlemUoe1xuICAgICAgbGVuZ3RoOiAwLFxuICAgICAgaXRlbTogXyA9PiBudWxsXG4gICAgfSk7XG5cbiAgICBjb25zdCBtb2RlSWQgPSBnZW5lcmF0ZSQxKCdtb2RlJyk7XG4gICAgY29uc3QgZ2V0TW9kZSA9IHRyYW5zZmVyID0+IHtcbiAgICAgIGNvbnN0IGR0ID0gdHJhbnNmZXI7XG4gICAgICByZXR1cm4gT3B0aW9uYWwuZnJvbShkdFttb2RlSWRdKTtcbiAgICB9O1xuICAgIGNvbnN0IG1rU2V0TW9kZUZuID0gbW9kZSA9PiB0cmFuc2ZlciA9PiB7XG4gICAgICBjb25zdCBkdCA9IHRyYW5zZmVyO1xuICAgICAgZHRbbW9kZUlkXSA9IG1vZGU7XG4gICAgfTtcbiAgICBjb25zdCBzZXRNb2RlJDEgPSAodHJhbnNmZXIsIG1vZGUpID0+IG1rU2V0TW9kZUZuKG1vZGUpKHRyYW5zZmVyKTtcbiAgICBjb25zdCBzZXRSZWFkV3JpdGVNb2RlID0gbWtTZXRNb2RlRm4oMCk7XG4gICAgY29uc3Qgc2V0UmVhZE9ubHlNb2RlID0gbWtTZXRNb2RlRm4oMik7XG4gICAgY29uc3Qgc2V0UHJvdGVjdGVkTW9kZSA9IG1rU2V0TW9kZUZuKDEpO1xuICAgIGNvbnN0IGNoZWNrTW9kZSA9IGV4cGVjdGVkTW9kZSA9PiB0cmFuc2ZlciA9PiB7XG4gICAgICBjb25zdCBkdCA9IHRyYW5zZmVyO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oZHRbbW9kZUlkXSkuZXhpc3RzKG1vZGUgPT4gbW9kZSA9PT0gZXhwZWN0ZWRNb2RlKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzSW5SZWFkV3JpdGVNb2RlID0gY2hlY2tNb2RlKDApO1xuICAgIGNvbnN0IGlzSW5Qcm90ZWN0ZWRNb2RlID0gY2hlY2tNb2RlKDEpO1xuXG4gICAgY29uc3Qgbm9ybWFsaXplSXRlbXMgPSAoZGF0YVRyYW5zZmVyLCBpdGVtc0ltcGwpID0+ICh7XG4gICAgICAuLi5pdGVtc0ltcGwsXG4gICAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gaXRlbXNJbXBsLmxlbmd0aDtcbiAgICAgIH0sXG4gICAgICBhZGQ6IChkYXRhLCB0eXBlKSA9PiB7XG4gICAgICAgIGlmIChpc0luUmVhZFdyaXRlTW9kZShkYXRhVHJhbnNmZXIpKSB7XG4gICAgICAgICAgaWYgKGlzU3RyaW5nKGRhdGEpKSB7XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHR5cGUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBpdGVtc0ltcGwuYWRkKGRhdGEsIHR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXNJbXBsLmFkZChkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlOiBpZHggPT4ge1xuICAgICAgICBpZiAoaXNJblJlYWRXcml0ZU1vZGUoZGF0YVRyYW5zZmVyKSkge1xuICAgICAgICAgIGl0ZW1zSW1wbC5yZW1vdmUoaWR4KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICAgIGlmIChpc0luUmVhZFdyaXRlTW9kZShkYXRhVHJhbnNmZXIpKSB7XG4gICAgICAgICAgaXRlbXNJbXBsLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHZhbGlkRHJvcEVmZmVjdHMgPSBbXG4gICAgICAnbm9uZScsXG4gICAgICAnY29weScsXG4gICAgICAnbGluaycsXG4gICAgICAnbW92ZSdcbiAgICBdO1xuICAgIGNvbnN0IHZhbGlkRWZmZWN0QWxsb3dlZHMgPSBbXG4gICAgICAnbm9uZScsXG4gICAgICAnY29weScsXG4gICAgICAnY29weUxpbmsnLFxuICAgICAgJ2NvcHlNb3ZlJyxcbiAgICAgICdsaW5rJyxcbiAgICAgICdsaW5rTW92ZScsXG4gICAgICAnbW92ZScsXG4gICAgICAnYWxsJyxcbiAgICAgICd1bmluaXRpYWxpemVkJ1xuICAgIF07XG4gICAgY29uc3QgY3JlYXRlRGF0YVRyYW5zZmVyID0gKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YVRyYW5zZmVySW1wbCA9IG5ldyB3aW5kb3cuRGF0YVRyYW5zZmVyKCk7XG4gICAgICBsZXQgZHJvcEVmZmVjdCA9ICdtb3ZlJztcbiAgICAgIGxldCBlZmZlY3RBbGxvd2VkID0gJ2FsbCc7XG4gICAgICBjb25zdCBkYXRhVHJhbnNmZXIgPSB7XG4gICAgICAgIGdldCBkcm9wRWZmZWN0KCkge1xuICAgICAgICAgIHJldHVybiBkcm9wRWZmZWN0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQgZHJvcEVmZmVjdChlZmZlY3QpIHtcbiAgICAgICAgICBpZiAoY29udGFpbnMkMih2YWxpZERyb3BFZmZlY3RzLCBlZmZlY3QpKSB7XG4gICAgICAgICAgICBkcm9wRWZmZWN0ID0gZWZmZWN0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGVmZmVjdEFsbG93ZWQoKSB7XG4gICAgICAgICAgcmV0dXJuIGVmZmVjdEFsbG93ZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldCBlZmZlY3RBbGxvd2VkKGFsbG93ZWQpIHtcbiAgICAgICAgICBpZiAoaXNJbkRyYWdTdGFydEV2ZW50KGRhdGFUcmFuc2ZlcikgJiYgY29udGFpbnMkMih2YWxpZEVmZmVjdEFsbG93ZWRzLCBhbGxvd2VkKSkge1xuICAgICAgICAgICAgZWZmZWN0QWxsb3dlZCA9IGFsbG93ZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXQgaXRlbXMoKSB7XG4gICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZUl0ZW1zKGRhdGFUcmFuc2ZlciwgZGF0YVRyYW5zZmVySW1wbC5pdGVtcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBmaWxlcygpIHtcbiAgICAgICAgICBpZiAoaXNJblByb3RlY3RlZE1vZGUoZGF0YVRyYW5zZmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5RmlsZUxpc3QoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGFUcmFuc2ZlckltcGwuZmlsZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXQgdHlwZXMoKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGFUcmFuc2ZlckltcGwudHlwZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldERyYWdJbWFnZTogKGltYWdlLCB4LCB5KSA9PiB7XG4gICAgICAgICAgaWYgKGlzSW5SZWFkV3JpdGVNb2RlKGRhdGFUcmFuc2ZlcikpIHtcbiAgICAgICAgICAgIHNldERyYWdJbWFnZShkYXRhVHJhbnNmZXIsIHtcbiAgICAgICAgICAgICAgaW1hZ2UsXG4gICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgIHlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGF0YVRyYW5zZmVySW1wbC5zZXREcmFnSW1hZ2UoaW1hZ2UsIHgsIHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2V0RGF0YTogZm9ybWF0ID0+IHtcbiAgICAgICAgICBpZiAoaXNJblByb3RlY3RlZE1vZGUoZGF0YVRyYW5zZmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YVRyYW5zZmVySW1wbC5nZXREYXRhKGZvcm1hdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzZXREYXRhOiAoZm9ybWF0LCBkYXRhKSA9PiB7XG4gICAgICAgICAgaWYgKGlzSW5SZWFkV3JpdGVNb2RlKGRhdGFUcmFuc2ZlcikpIHtcbiAgICAgICAgICAgIGRhdGFUcmFuc2ZlckltcGwuc2V0RGF0YShmb3JtYXQsIGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJEYXRhOiBmb3JtYXQgPT4ge1xuICAgICAgICAgIGlmIChpc0luUmVhZFdyaXRlTW9kZShkYXRhVHJhbnNmZXIpKSB7XG4gICAgICAgICAgICBkYXRhVHJhbnNmZXJJbXBsLmNsZWFyRGF0YShmb3JtYXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNldFJlYWRXcml0ZU1vZGUoZGF0YVRyYW5zZmVyKTtcbiAgICAgIHJldHVybiBkYXRhVHJhbnNmZXI7XG4gICAgfTtcbiAgICBjb25zdCBjbG9uZURhdGFUcmFuc2ZlciA9IG9yaWdpbmFsID0+IHtcbiAgICAgIGNvbnN0IGNsb25lID0gY3JlYXRlRGF0YVRyYW5zZmVyKCk7XG4gICAgICBjb25zdCBvcmlnaW5hbE1vZGUgPSBnZXRNb2RlKG9yaWdpbmFsKTtcbiAgICAgIHNldFJlYWRPbmx5TW9kZShvcmlnaW5hbCk7XG4gICAgICBzZXREcmFnc3RhcnRFdmVudChjbG9uZSk7XG4gICAgICBjbG9uZS5kcm9wRWZmZWN0ID0gb3JpZ2luYWwuZHJvcEVmZmVjdDtcbiAgICAgIGNsb25lLmVmZmVjdEFsbG93ZWQgPSBvcmlnaW5hbC5lZmZlY3RBbGxvd2VkO1xuICAgICAgZ2V0RHJhZ0ltYWdlKG9yaWdpbmFsKS5lYWNoKGltYWdlRGF0YSA9PiBjbG9uZS5zZXREcmFnSW1hZ2UoaW1hZ2VEYXRhLmltYWdlLCBpbWFnZURhdGEueCwgaW1hZ2VEYXRhLnkpKTtcbiAgICAgIGVhY2gkZShvcmlnaW5hbC50eXBlcywgdHlwZSA9PiB7XG4gICAgICAgIGlmICh0eXBlICE9PSAnRmlsZXMnKSB7XG4gICAgICAgICAgY2xvbmUuc2V0RGF0YSh0eXBlLCBvcmlnaW5hbC5nZXREYXRhKHR5cGUpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBlYWNoJGUob3JpZ2luYWwuZmlsZXMsIGZpbGUgPT4gY2xvbmUuaXRlbXMuYWRkKGZpbGUpKTtcbiAgICAgIGdldEV2ZW50KG9yaWdpbmFsKS5lYWNoKHR5cGUgPT4ge1xuICAgICAgICBzZXRFdmVudChjbG9uZSwgdHlwZSk7XG4gICAgICB9KTtcbiAgICAgIG9yaWdpbmFsTW9kZS5lYWNoKG1vZGUgPT4ge1xuICAgICAgICBzZXRNb2RlJDEob3JpZ2luYWwsIG1vZGUpO1xuICAgICAgICBzZXRNb2RlJDEoY2xvbmUsIG1vZGUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gY2xvbmU7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldEh0bWxEYXRhID0gZGF0YVRyYW5zZmVyID0+IHtcbiAgICAgIGNvbnN0IGh0bWwgPSBkYXRhVHJhbnNmZXIuZ2V0RGF0YSgndGV4dC9odG1sJyk7XG4gICAgICByZXR1cm4gaHRtbCA9PT0gJycgPyBPcHRpb25hbC5ub25lKCkgOiBPcHRpb25hbC5zb21lKGh0bWwpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0SHRtbERhdGEgPSAoZGF0YVRyYW5zZmVyLCBodG1sKSA9PiBkYXRhVHJhbnNmZXIuc2V0RGF0YSgndGV4dC9odG1sJywgaHRtbCk7XG5cbiAgICBjb25zdCBpbnRlcm5hbE1pbWVUeXBlID0gJ3gtdGlueW1jZS9odG1sJztcbiAgICBjb25zdCBpbnRlcm5hbEh0bWxNaW1lID0gY29uc3RhbnQoaW50ZXJuYWxNaW1lVHlwZSk7XG4gICAgY29uc3QgaW50ZXJuYWxNYXJrID0gJzwhLS0gJyArIGludGVybmFsTWltZVR5cGUgKyAnIC0tPic7XG4gICAgY29uc3QgbWFyayA9IGh0bWwgPT4gaW50ZXJuYWxNYXJrICsgaHRtbDtcbiAgICBjb25zdCB1bm1hcmsgPSBodG1sID0+IGh0bWwucmVwbGFjZShpbnRlcm5hbE1hcmssICcnKTtcbiAgICBjb25zdCBpc01hcmtlZCA9IGh0bWwgPT4gaHRtbC5pbmRleE9mKGludGVybmFsTWFyaykgIT09IC0xO1xuXG4gICAgY29uc3QgaXNQbGFpblRleHQgPSB0ZXh0ID0+IHtcbiAgICAgIHJldHVybiAhLzwoPzpcXC8/KD8hKD86ZGl2fHB8YnJ8c3Bhbik+KVxcdyt8KD86KD8hKD86c3BhbiBzdHlsZT1cIndoaXRlLXNwYWNlOlxccz9wcmU7P1wiPil8YnJcXHM/XFwvPikpXFx3K1xcc1tePl0rKT4vaS50ZXN0KHRleHQpO1xuICAgIH07XG4gICAgY29uc3Qgb3BlbkNvbnRhaW5lciA9IChyb290VGFnLCByb290QXR0cnMpID0+IHtcbiAgICAgIGxldCB0YWcgPSAnPCcgKyByb290VGFnO1xuICAgICAgY29uc3QgYXR0cnMgPSBtYXBUb0FycmF5KHJvb3RBdHRycywgKHZhbHVlLCBrZXkpID0+IGtleSArICc9XCInICsgRW50aXRpZXMuZW5jb2RlQWxsUmF3KHZhbHVlKSArICdcIicpO1xuICAgICAgaWYgKGF0dHJzLmxlbmd0aCkge1xuICAgICAgICB0YWcgKz0gJyAnICsgYXR0cnMuam9pbignICcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRhZyArICc+JztcbiAgICB9O1xuICAgIGNvbnN0IHRvQmxvY2tFbGVtZW50cyA9ICh0ZXh0LCByb290VGFnLCByb290QXR0cnMpID0+IHtcbiAgICAgIGNvbnN0IGJsb2NrcyA9IHRleHQuc3BsaXQoL1xcblxcbi8pO1xuICAgICAgY29uc3QgdGFnT3BlbiA9IG9wZW5Db250YWluZXIocm9vdFRhZywgcm9vdEF0dHJzKTtcbiAgICAgIGNvbnN0IHRhZ0Nsb3NlID0gJzwvJyArIHJvb3RUYWcgKyAnPic7XG4gICAgICBjb25zdCBwYXJhZ3JhcGhzID0gbWFwJDMoYmxvY2tzLCBwID0+IHtcbiAgICAgICAgcmV0dXJuIHAuc3BsaXQoL1xcbi8pLmpvaW4oJzxiciAvPicpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBzdGl0Y2ggPSBwID0+IHtcbiAgICAgICAgcmV0dXJuIHRhZ09wZW4gKyBwICsgdGFnQ2xvc2U7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHBhcmFncmFwaHMubGVuZ3RoID09PSAxID8gcGFyYWdyYXBoc1swXSA6IG1hcCQzKHBhcmFncmFwaHMsIHN0aXRjaCkuam9pbignJyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHBhc3RlQmluRGVmYXVsdENvbnRlbnQgPSAnJU1DRVBBU1RFQklOJSc7XG4gICAgY29uc3QgY3JlYXRlJDYgPSAoZWRpdG9yLCBsYXN0Um5nQ2VsbCkgPT4ge1xuICAgICAgY29uc3Qge2RvbSwgc2VsZWN0aW9ufSA9IGVkaXRvcjtcbiAgICAgIGNvbnN0IGJvZHkgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgbGFzdFJuZ0NlbGwuc2V0KHNlbGVjdGlvbi5nZXRSbmcoKSk7XG4gICAgICBjb25zdCBwYXN0ZUJpbkVsbSA9IGRvbS5hZGQoZWRpdG9yLmdldEJvZHkoKSwgJ2RpdicsIHtcbiAgICAgICAgJ2lkJzogJ21jZXBhc3RlYmluJyxcbiAgICAgICAgJ2NsYXNzJzogJ21jZS1wYXN0ZWJpbicsXG4gICAgICAgICdjb250ZW50RWRpdGFibGUnOiB0cnVlLFxuICAgICAgICAnZGF0YS1tY2UtYm9ndXMnOiAnYWxsJyxcbiAgICAgICAgJ3N0eWxlJzogJ3Bvc2l0aW9uOiBmaXhlZDsgdG9wOiA1MCU7IHdpZHRoOiAxMHB4OyBoZWlnaHQ6IDEwcHg7IG92ZXJmbG93OiBoaWRkZW47IG9wYWNpdHk6IDAnXG4gICAgICB9LCBwYXN0ZUJpbkRlZmF1bHRDb250ZW50KTtcbiAgICAgIGlmIChFbnYuYnJvd3Nlci5pc0ZpcmVmb3goKSkge1xuICAgICAgICBkb20uc2V0U3R5bGUocGFzdGVCaW5FbG0sICdsZWZ0JywgZG9tLmdldFN0eWxlKGJvZHksICdkaXJlY3Rpb24nLCB0cnVlKSA9PT0gJ3J0bCcgPyA2NTUzNSA6IC02NTUzNSk7XG4gICAgICB9XG4gICAgICBkb20uYmluZChwYXN0ZUJpbkVsbSwgJ2JlZm9yZWRlYWN0aXZhdGUgZm9jdXNpbiBmb2N1c291dCcsIGUgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfSk7XG4gICAgICBwYXN0ZUJpbkVsbS5mb2N1cygpO1xuICAgICAgc2VsZWN0aW9uLnNlbGVjdChwYXN0ZUJpbkVsbSwgdHJ1ZSk7XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmUgPSAoZWRpdG9yLCBsYXN0Um5nQ2VsbCkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGlmIChnZXRFbChlZGl0b3IpKSB7XG4gICAgICAgIGxldCBwYXN0ZUJpbkNsb25lO1xuICAgICAgICBjb25zdCBsYXN0Um5nID0gbGFzdFJuZ0NlbGwuZ2V0KCk7XG4gICAgICAgIHdoaWxlIChwYXN0ZUJpbkNsb25lID0gZ2V0RWwoZWRpdG9yKSkge1xuICAgICAgICAgIGRvbS5yZW1vdmUocGFzdGVCaW5DbG9uZSk7XG4gICAgICAgICAgZG9tLnVuYmluZChwYXN0ZUJpbkNsb25lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGFzdFJuZykge1xuICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKGxhc3RSbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsYXN0Um5nQ2VsbC5zZXQobnVsbCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRFbCA9IGVkaXRvciA9PiBlZGl0b3IuZG9tLmdldCgnbWNlcGFzdGViaW4nKTtcbiAgICBjb25zdCBpc1Bhc3RlQmluID0gZWxtID0+IGlzTm9uTnVsbGFibGUoZWxtKSAmJiBlbG0uaWQgPT09ICdtY2VwYXN0ZWJpbic7XG4gICAgY29uc3QgZ2V0SHRtbCA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgY29uc3QgY29weUFuZFJlbW92ZSA9ICh0b0VsbSwgZnJvbUVsbSkgPT4ge1xuICAgICAgICB0b0VsbS5hcHBlbmRDaGlsZChmcm9tRWxtKTtcbiAgICAgICAgZG9tLnJlbW92ZShmcm9tRWxtLCB0cnVlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBbcGFzdGVCaW5FbG0sIC4uLnBhc3RlQmluQ2xvbmVzXSA9IGZpbHRlciQ1KGVkaXRvci5nZXRCb2R5KCkuY2hpbGROb2RlcywgaXNQYXN0ZUJpbik7XG4gICAgICBlYWNoJGUocGFzdGVCaW5DbG9uZXMsIHBhc3RlQmluQ2xvbmUgPT4ge1xuICAgICAgICBjb3B5QW5kUmVtb3ZlKHBhc3RlQmluRWxtLCBwYXN0ZUJpbkNsb25lKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGlydHlXcmFwcGVycyA9IGRvbS5zZWxlY3QoJ2RpdltpZD1tY2VwYXN0ZWJpbl0nLCBwYXN0ZUJpbkVsbSk7XG4gICAgICBmb3IgKGxldCBpID0gZGlydHlXcmFwcGVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBjbGVhbldyYXBwZXIgPSBkb20uY3JlYXRlKCdkaXYnKTtcbiAgICAgICAgcGFzdGVCaW5FbG0uaW5zZXJ0QmVmb3JlKGNsZWFuV3JhcHBlciwgZGlydHlXcmFwcGVyc1tpXSk7XG4gICAgICAgIGNvcHlBbmRSZW1vdmUoY2xlYW5XcmFwcGVyLCBkaXJ0eVdyYXBwZXJzW2ldKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXN0ZUJpbkVsbSA/IHBhc3RlQmluRWxtLmlubmVySFRNTCA6ICcnO1xuICAgIH07XG4gICAgY29uc3QgaXNEZWZhdWx0UGFzdGVCaW5Db250ZW50ID0gY29udGVudCA9PiBjb250ZW50ID09PSBwYXN0ZUJpbkRlZmF1bHRDb250ZW50O1xuICAgIGNvbnN0IFBhc3RlQmluID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGxhc3RSbmcgPSBDZWxsKG51bGwpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3JlYXRlOiAoKSA9PiBjcmVhdGUkNihlZGl0b3IsIGxhc3RSbmcpLFxuICAgICAgICByZW1vdmU6ICgpID0+IHJlbW92ZShlZGl0b3IsIGxhc3RSbmcpLFxuICAgICAgICBnZXRFbDogKCkgPT4gZ2V0RWwoZWRpdG9yKSxcbiAgICAgICAgZ2V0SHRtbDogKCkgPT4gZ2V0SHRtbChlZGl0b3IpLFxuICAgICAgICBnZXRMYXN0Um5nOiBsYXN0Um5nLmdldFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmlsdGVyJDEgPSAoY29udGVudCwgaXRlbXMpID0+IHtcbiAgICAgIFRvb2xzLmVhY2goaXRlbXMsIHYgPT4ge1xuICAgICAgICBpZiAoaXMkNCh2LCBSZWdFeHApKSB7XG4gICAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSh2LCAnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSh2WzBdLCB2WzFdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9O1xuICAgIGNvbnN0IGlubmVyVGV4dCA9IGh0bWwgPT4ge1xuICAgICAgY29uc3Qgc2NoZW1hID0gU2NoZW1hKCk7XG4gICAgICBjb25zdCBkb21QYXJzZXIgPSBEb21QYXJzZXIoe30sIHNjaGVtYSk7XG4gICAgICBsZXQgdGV4dCA9ICcnO1xuICAgICAgY29uc3Qgdm9pZEVsZW1lbnRzID0gc2NoZW1hLmdldFZvaWRFbGVtZW50cygpO1xuICAgICAgY29uc3QgaWdub3JlRWxlbWVudHMgPSBUb29scy5tYWtlTWFwKCdzY3JpcHQgbm9zY3JpcHQgc3R5bGUgdGV4dGFyZWEgdmlkZW8gYXVkaW8gaWZyYW1lIG9iamVjdCcsICcgJyk7XG4gICAgICBjb25zdCBibG9ja0VsZW1lbnRzID0gc2NoZW1hLmdldEJsb2NrRWxlbWVudHMoKTtcbiAgICAgIGNvbnN0IHdhbGsgPSBub2RlID0+IHtcbiAgICAgICAgY29uc3QgbmFtZSA9IG5vZGUubmFtZSwgY3VycmVudE5vZGUgPSBub2RlO1xuICAgICAgICBpZiAobmFtZSA9PT0gJ2JyJykge1xuICAgICAgICAgIHRleHQgKz0gJ1xcbic7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lID09PSAnd2JyJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodm9pZEVsZW1lbnRzW25hbWVdKSB7XG4gICAgICAgICAgdGV4dCArPSAnICc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlnbm9yZUVsZW1lbnRzW25hbWVdKSB7XG4gICAgICAgICAgdGV4dCArPSAnICc7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnR5cGUgPT09IDMpIHtcbiAgICAgICAgICB0ZXh0ICs9IG5vZGUudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEobm9kZS5uYW1lIGluIHNjaGVtYS5nZXRWb2lkRWxlbWVudHMoKSkpIHtcbiAgICAgICAgICBsZXQgY3VycmVudE5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgaWYgKGN1cnJlbnROb2RlKSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIHdhbGsoY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgfSB3aGlsZSAoY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5uZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJsb2NrRWxlbWVudHNbbmFtZV0gJiYgY3VycmVudE5vZGUubmV4dCkge1xuICAgICAgICAgIHRleHQgKz0gJ1xcbic7XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICdwJykge1xuICAgICAgICAgICAgdGV4dCArPSAnXFxuJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBodG1sID0gZmlsdGVyJDEoaHRtbCwgWy88IVxcW1teXFxdXStcXF0+L2ddKTtcbiAgICAgIHdhbGsoZG9tUGFyc2VyLnBhcnNlKGh0bWwpKTtcbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH07XG4gICAgY29uc3QgdHJpbUh0bWwgPSBodG1sID0+IHtcbiAgICAgIGNvbnN0IHRyaW1TcGFjZXMgPSAoYWxsLCBzMSwgczIpID0+IHtcbiAgICAgICAgaWYgKCFzMSAmJiAhczIpIHtcbiAgICAgICAgICByZXR1cm4gJyAnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuYnNwO1xuICAgICAgfTtcbiAgICAgIGh0bWwgPSBmaWx0ZXIkMShodG1sLCBbXG4gICAgICAgIC9eW1xcc1xcU10qPGJvZHlbXj5dKj5cXHMqfFxccyo8XFwvYm9keVtePl0qPltcXHNcXFNdKiQvaWcsXG4gICAgICAgIC88IS0tU3RhcnRGcmFnbWVudC0tPnw8IS0tRW5kRnJhZ21lbnQtLT4vZyxcbiAgICAgICAgW1xuICAgICAgICAgIC8oID8pPHNwYW4gY2xhc3M9XCJBcHBsZS1jb252ZXJ0ZWQtc3BhY2VcIj5cXHUwMGEwPFxcL3NwYW4+KCA/KS9nLFxuICAgICAgICAgIHRyaW1TcGFjZXNcbiAgICAgICAgXSxcbiAgICAgICAgLzxiciBjbGFzcz1cIkFwcGxlLWludGVyY2hhbmdlLW5ld2xpbmVcIj4vZyxcbiAgICAgICAgLzxicj4kL2lcbiAgICAgIF0pO1xuICAgICAgcmV0dXJuIGh0bWw7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVJZEdlbmVyYXRvciA9IHByZWZpeCA9PiB7XG4gICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHByZWZpeCArIGNvdW50Kys7XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZ2V0SW1hZ2VNaW1lVHlwZSA9IGV4dCA9PiB7XG4gICAgICBjb25zdCBsb3dlckV4dCA9IGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgbWltZU92ZXJyaWRlcyA9IHtcbiAgICAgICAganBnOiAnanBlZycsXG4gICAgICAgIGpwZTogJ2pwZWcnLFxuICAgICAgICBqZmk6ICdqcGVnJyxcbiAgICAgICAgamlmOiAnanBlZycsXG4gICAgICAgIGpmaWY6ICdqcGVnJyxcbiAgICAgICAgcGpwZWc6ICdqcGVnJyxcbiAgICAgICAgcGpwOiAnanBlZycsXG4gICAgICAgIHN2ZzogJ3N2Zyt4bWwnXG4gICAgICB9O1xuICAgICAgcmV0dXJuIFRvb2xzLmhhc093bihtaW1lT3ZlcnJpZGVzLCBsb3dlckV4dCkgPyAnaW1hZ2UvJyArIG1pbWVPdmVycmlkZXNbbG93ZXJFeHRdIDogJ2ltYWdlLycgKyBsb3dlckV4dDtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJlUHJvY2VzcyA9IChlZGl0b3IsIGh0bWwpID0+IHtcbiAgICAgIGNvbnN0IHBhcnNlciA9IERvbVBhcnNlcih7IHNhbml0aXplOiBzaG91bGRTYW5pdGl6ZVhzcyhlZGl0b3IpIH0sIGVkaXRvci5zY2hlbWEpO1xuICAgICAgcGFyc2VyLmFkZE5vZGVGaWx0ZXIoJ21ldGEnLCBub2RlcyA9PiB7XG4gICAgICAgIFRvb2xzLmVhY2gobm9kZXMsIG5vZGUgPT4ge1xuICAgICAgICAgIG5vZGUucmVtb3ZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBmcmFnbWVudCA9IHBhcnNlci5wYXJzZShodG1sLCB7XG4gICAgICAgIGZvcmNlZF9yb290X2Jsb2NrOiBmYWxzZSxcbiAgICAgICAgaXNSb290Q29udGVudDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gSHRtbFNlcmlhbGl6ZXIoeyB2YWxpZGF0ZTogdHJ1ZSB9LCBlZGl0b3Iuc2NoZW1hKS5zZXJpYWxpemUoZnJhZ21lbnQpO1xuICAgIH07XG4gICAgY29uc3QgcHJvY2Vzc1Jlc3VsdCA9IChjb250ZW50LCBjYW5jZWxsZWQpID0+ICh7XG4gICAgICBjb250ZW50LFxuICAgICAgY2FuY2VsbGVkXG4gICAgfSk7XG4gICAgY29uc3QgcG9zdFByb2Nlc3NGaWx0ZXIgPSAoZWRpdG9yLCBodG1sLCBpbnRlcm5hbCkgPT4ge1xuICAgICAgY29uc3QgdGVtcEJvZHkgPSBlZGl0b3IuZG9tLmNyZWF0ZSgnZGl2JywgeyBzdHlsZTogJ2Rpc3BsYXk6bm9uZScgfSwgaHRtbCk7XG4gICAgICBjb25zdCBwb3N0UHJvY2Vzc0FyZ3MgPSBmaXJlUGFzdGVQb3N0UHJvY2VzcyhlZGl0b3IsIHRlbXBCb2R5LCBpbnRlcm5hbCk7XG4gICAgICByZXR1cm4gcHJvY2Vzc1Jlc3VsdChwb3N0UHJvY2Vzc0FyZ3Mubm9kZS5pbm5lckhUTUwsIHBvc3RQcm9jZXNzQXJncy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSk7XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXJDb250ZW50ID0gKGVkaXRvciwgY29udGVudCwgaW50ZXJuYWwpID0+IHtcbiAgICAgIGNvbnN0IHByZVByb2Nlc3NBcmdzID0gZmlyZVBhc3RlUHJlUHJvY2VzcyhlZGl0b3IsIGNvbnRlbnQsIGludGVybmFsKTtcbiAgICAgIGNvbnN0IGZpbHRlcmVkQ29udGVudCA9IHByZVByb2Nlc3MoZWRpdG9yLCBwcmVQcm9jZXNzQXJncy5jb250ZW50KTtcbiAgICAgIGlmIChlZGl0b3IuaGFzRXZlbnRMaXN0ZW5lcnMoJ1Bhc3RlUG9zdFByb2Nlc3MnKSAmJiAhcHJlUHJvY2Vzc0FyZ3MuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuIHBvc3RQcm9jZXNzRmlsdGVyKGVkaXRvciwgZmlsdGVyZWRDb250ZW50LCBpbnRlcm5hbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcHJvY2Vzc1Jlc3VsdChmaWx0ZXJlZENvbnRlbnQsIHByZVByb2Nlc3NBcmdzLmlzRGVmYXVsdFByZXZlbnRlZCgpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHByb2Nlc3MgPSAoZWRpdG9yLCBodG1sLCBpbnRlcm5hbCkgPT4ge1xuICAgICAgcmV0dXJuIGZpbHRlckNvbnRlbnQoZWRpdG9yLCBodG1sLCBpbnRlcm5hbCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHBhc3RlSHRtbCQxID0gKGVkaXRvciwgaHRtbCkgPT4ge1xuICAgICAgZWRpdG9yLmluc2VydENvbnRlbnQoaHRtbCwge1xuICAgICAgICBtZXJnZTogc2hvdWxkUGFzdGVNZXJnZUZvcm1hdHMoZWRpdG9yKSxcbiAgICAgICAgcGFzdGU6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBpc0Fic29sdXRlVXJsID0gdXJsID0+IC9eaHR0cHM/OlxcL1xcL1tcXHdcXC1cXC8rPS4sITs6JiVAXn4oKXt9PyNdKyQvaS50ZXN0KHVybCk7XG4gICAgY29uc3QgaXNJbWFnZVVybCA9IChlZGl0b3IsIHVybCkgPT4ge1xuICAgICAgcmV0dXJuIGlzQWJzb2x1dGVVcmwodXJsKSAmJiBleGlzdHMoZ2V0QWxsb3dlZEltYWdlRmlsZVR5cGVzKGVkaXRvciksIHR5cGUgPT4gZW5kc1dpdGgodXJsLnRvTG93ZXJDYXNlKCksIGAuJHsgdHlwZS50b0xvd2VyQ2FzZSgpIH1gKSk7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVJbWFnZSA9IChlZGl0b3IsIHVybCwgcGFzdGVIdG1sRm4pID0+IHtcbiAgICAgIGVkaXRvci51bmRvTWFuYWdlci5leHRyYSgoKSA9PiB7XG4gICAgICAgIHBhc3RlSHRtbEZuKGVkaXRvciwgdXJsKTtcbiAgICAgIH0sICgpID0+IHtcbiAgICAgICAgZWRpdG9yLmluc2VydENvbnRlbnQoJzxpbWcgc3JjPVwiJyArIHVybCArICdcIj4nKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVMaW5rID0gKGVkaXRvciwgdXJsLCBwYXN0ZUh0bWxGbikgPT4ge1xuICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLmV4dHJhKCgpID0+IHtcbiAgICAgICAgcGFzdGVIdG1sRm4oZWRpdG9yLCB1cmwpO1xuICAgICAgfSwgKCkgPT4ge1xuICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZUluc2VydExpbmsnLCBmYWxzZSwgdXJsKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBsaW5rU2VsZWN0aW9uID0gKGVkaXRvciwgaHRtbCwgcGFzdGVIdG1sRm4pID0+ICFlZGl0b3Iuc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkgJiYgaXNBYnNvbHV0ZVVybChodG1sKSA/IGNyZWF0ZUxpbmsoZWRpdG9yLCBodG1sLCBwYXN0ZUh0bWxGbikgOiBmYWxzZTtcbiAgICBjb25zdCBpbnNlcnRJbWFnZSA9IChlZGl0b3IsIGh0bWwsIHBhc3RlSHRtbEZuKSA9PiBpc0ltYWdlVXJsKGVkaXRvciwgaHRtbCkgPyBjcmVhdGVJbWFnZShlZGl0b3IsIGh0bWwsIHBhc3RlSHRtbEZuKSA6IGZhbHNlO1xuICAgIGNvbnN0IHNtYXJ0SW5zZXJ0Q29udGVudCA9IChlZGl0b3IsIGh0bWwpID0+IHtcbiAgICAgIFRvb2xzLmVhY2goW1xuICAgICAgICBsaW5rU2VsZWN0aW9uLFxuICAgICAgICBpbnNlcnRJbWFnZSxcbiAgICAgICAgcGFzdGVIdG1sJDFcbiAgICAgIF0sIGFjdGlvbiA9PiB7XG4gICAgICAgIHJldHVybiAhYWN0aW9uKGVkaXRvciwgaHRtbCwgcGFzdGVIdG1sJDEpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnRDb250ZW50ID0gKGVkaXRvciwgaHRtbCwgcGFzdGVBc1RleHQpID0+IHtcbiAgICAgIGlmIChwYXN0ZUFzVGV4dCB8fCAhaXNTbWFydFBhc3RlRW5hYmxlZChlZGl0b3IpKSB7XG4gICAgICAgIHBhc3RlSHRtbCQxKGVkaXRvciwgaHRtbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbWFydEluc2VydENvbnRlbnQoZWRpdG9yLCBodG1sKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdW5pcXVlSWQgPSBjcmVhdGVJZEdlbmVyYXRvcignbWNlY2xpcCcpO1xuICAgIGNvbnN0IGNyZWF0ZVBhc3RlRGF0YVRyYW5zZmVyID0gaHRtbCA9PiB7XG4gICAgICBjb25zdCBkYXRhVHJhbnNmZXIgPSBjcmVhdGVEYXRhVHJhbnNmZXIoKTtcbiAgICAgIHNldEh0bWxEYXRhKGRhdGFUcmFuc2ZlciwgaHRtbCk7XG4gICAgICBzZXRSZWFkT25seU1vZGUoZGF0YVRyYW5zZmVyKTtcbiAgICAgIHJldHVybiBkYXRhVHJhbnNmZXI7XG4gICAgfTtcbiAgICBjb25zdCBkb1Bhc3RlID0gKGVkaXRvciwgY29udGVudCwgaW50ZXJuYWwsIHBhc3RlQXNUZXh0LCBzaG91bGRTaW11bGF0ZUlucHV0RXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IHByb2Nlc3MoZWRpdG9yLCBjb250ZW50LCBpbnRlcm5hbCk7XG4gICAgICBpZiAoIXJlcy5jYW5jZWxsZWQpIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IHJlcy5jb250ZW50O1xuICAgICAgICBjb25zdCBkb1Bhc3RlQWN0aW9uID0gKCkgPT4gaW5zZXJ0Q29udGVudChlZGl0b3IsIGNvbnRlbnQsIHBhc3RlQXNUZXh0KTtcbiAgICAgICAgaWYgKHNob3VsZFNpbXVsYXRlSW5wdXRFdmVudCkge1xuICAgICAgICAgIGNvbnN0IGFyZ3MgPSBmaXJlQmVmb3JlSW5wdXRFdmVudChlZGl0b3IsICdpbnNlcnRGcm9tUGFzdGUnLCB7IGRhdGFUcmFuc2ZlcjogY3JlYXRlUGFzdGVEYXRhVHJhbnNmZXIoY29udGVudCkgfSk7XG4gICAgICAgICAgaWYgKCFhcmdzLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgICBkb1Bhc3RlQWN0aW9uKCk7XG4gICAgICAgICAgICBmaXJlSW5wdXRFdmVudChlZGl0b3IsICdpbnNlcnRGcm9tUGFzdGUnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9QYXN0ZUFjdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBwYXN0ZUh0bWwgPSAoZWRpdG9yLCBodG1sLCBpbnRlcm5hbEZsYWcsIHNob3VsZFNpbXVsYXRlSW5wdXRFdmVudCkgPT4ge1xuICAgICAgY29uc3QgaW50ZXJuYWwgPSBpbnRlcm5hbEZsYWcgPyBpbnRlcm5hbEZsYWcgOiBpc01hcmtlZChodG1sKTtcbiAgICAgIGRvUGFzdGUoZWRpdG9yLCB1bm1hcmsoaHRtbCksIGludGVybmFsLCBmYWxzZSwgc2hvdWxkU2ltdWxhdGVJbnB1dEV2ZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IHBhc3RlVGV4dCA9IChlZGl0b3IsIHRleHQsIHNob3VsZFNpbXVsYXRlSW5wdXRFdmVudCkgPT4ge1xuICAgICAgY29uc3QgZW5jb2RlZFRleHQgPSBlZGl0b3IuZG9tLmVuY29kZSh0ZXh0KS5yZXBsYWNlKC9cXHJcXG4vZywgJ1xcbicpO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFRleHQgPSBub3JtYWxpemUkNChlbmNvZGVkVGV4dCwgZ2V0UGFzdGVUYWJTcGFjZXMoZWRpdG9yKSk7XG4gICAgICBjb25zdCBodG1sID0gdG9CbG9ja0VsZW1lbnRzKG5vcm1hbGl6ZWRUZXh0LCBnZXRGb3JjZWRSb290QmxvY2soZWRpdG9yKSwgZ2V0Rm9yY2VkUm9vdEJsb2NrQXR0cnMoZWRpdG9yKSk7XG4gICAgICBkb1Bhc3RlKGVkaXRvciwgaHRtbCwgZmFsc2UsIHRydWUsIHNob3VsZFNpbXVsYXRlSW5wdXRFdmVudCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXREYXRhVHJhbnNmZXJJdGVtcyA9IGRhdGFUcmFuc2ZlciA9PiB7XG4gICAgICBjb25zdCBpdGVtcyA9IHt9O1xuICAgICAgaWYgKGRhdGFUcmFuc2ZlciAmJiBkYXRhVHJhbnNmZXIudHlwZXMpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhVHJhbnNmZXIudHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IGRhdGFUcmFuc2Zlci50eXBlc1tpXTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaXRlbXNbY29udGVudFR5cGVdID0gZGF0YVRyYW5zZmVyLmdldERhdGEoY29udGVudFR5cGUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICBpdGVtc1tjb250ZW50VHlwZV0gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVtcztcbiAgICB9O1xuICAgIGNvbnN0IGhhc0NvbnRlbnRUeXBlID0gKGNsaXBib2FyZENvbnRlbnQsIG1pbWVUeXBlKSA9PiBtaW1lVHlwZSBpbiBjbGlwYm9hcmRDb250ZW50ICYmIGNsaXBib2FyZENvbnRlbnRbbWltZVR5cGVdLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgaGFzSHRtbE9yVGV4dCA9IGNvbnRlbnQgPT4gaGFzQ29udGVudFR5cGUoY29udGVudCwgJ3RleHQvaHRtbCcpIHx8IGhhc0NvbnRlbnRUeXBlKGNvbnRlbnQsICd0ZXh0L3BsYWluJyk7XG4gICAgY29uc3QgZXh0cmFjdEZpbGVuYW1lID0gKGVkaXRvciwgc3RyKSA9PiB7XG4gICAgICBjb25zdCBtID0gc3RyLm1hdGNoKC8oW1xcc1xcU10rPykoPzpcXC5bYS16MC05Ll0rKSQvaSk7XG4gICAgICByZXR1cm4gaXNOb25OdWxsYWJsZShtKSA/IGVkaXRvci5kb20uZW5jb2RlKG1bMV0pIDogdW5kZWZpbmVkO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlQmxvYkluZm8gPSAoZWRpdG9yLCBibG9iQ2FjaGUsIGZpbGUsIGJhc2U2NCkgPT4ge1xuICAgICAgY29uc3QgaWQgPSB1bmlxdWVJZCgpO1xuICAgICAgY29uc3QgdXNlRmlsZU5hbWUgPSBzaG91bGRSZXVzZUZpbGVOYW1lKGVkaXRvcikgJiYgaXNOb25OdWxsYWJsZShmaWxlLm5hbWUpO1xuICAgICAgY29uc3QgbmFtZSA9IHVzZUZpbGVOYW1lID8gZXh0cmFjdEZpbGVuYW1lKGVkaXRvciwgZmlsZS5uYW1lKSA6IGlkO1xuICAgICAgY29uc3QgZmlsZW5hbWUgPSB1c2VGaWxlTmFtZSA/IGZpbGUubmFtZSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGJsb2JJbmZvID0gYmxvYkNhY2hlLmNyZWF0ZShpZCwgZmlsZSwgYmFzZTY0LCBuYW1lLCBmaWxlbmFtZSk7XG4gICAgICBibG9iQ2FjaGUuYWRkKGJsb2JJbmZvKTtcbiAgICAgIHJldHVybiBibG9iSW5mbztcbiAgICB9O1xuICAgIGNvbnN0IHBhc3RlSW1hZ2UgPSAoZWRpdG9yLCBpbWFnZUl0ZW0pID0+IHtcbiAgICAgIHBhcnNlRGF0YVVyaShpbWFnZUl0ZW0udXJpKS5lYWNoKCh7ZGF0YSwgdHlwZSwgYmFzZTY0RW5jb2RlZH0pID0+IHtcbiAgICAgICAgY29uc3QgYmFzZTY0ID0gYmFzZTY0RW5jb2RlZCA/IGRhdGEgOiBidG9hKGRhdGEpO1xuICAgICAgICBjb25zdCBmaWxlID0gaW1hZ2VJdGVtLmZpbGU7XG4gICAgICAgIGNvbnN0IGJsb2JDYWNoZSA9IGVkaXRvci5lZGl0b3JVcGxvYWQuYmxvYkNhY2hlO1xuICAgICAgICBjb25zdCBleGlzdGluZ0Jsb2JJbmZvID0gYmxvYkNhY2hlLmdldEJ5RGF0YShiYXNlNjQsIHR5cGUpO1xuICAgICAgICBjb25zdCBibG9iSW5mbyA9IGV4aXN0aW5nQmxvYkluZm8gIT09IG51bGwgJiYgZXhpc3RpbmdCbG9iSW5mbyAhPT0gdm9pZCAwID8gZXhpc3RpbmdCbG9iSW5mbyA6IGNyZWF0ZUJsb2JJbmZvKGVkaXRvciwgYmxvYkNhY2hlLCBmaWxlLCBiYXNlNjQpO1xuICAgICAgICBwYXN0ZUh0bWwoZWRpdG9yLCBgPGltZyBzcmM9XCIkeyBibG9iSW5mby5ibG9iVXJpKCkgfVwiPmAsIGZhbHNlLCB0cnVlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaXNDbGlwYm9hcmRFdmVudCA9IGV2ZW50ID0+IGV2ZW50LnR5cGUgPT09ICdwYXN0ZSc7XG4gICAgY29uc3QgcmVhZEZpbGVzQXNEYXRhVXJpcyA9IGl0ZW1zID0+IFByb21pc2UuYWxsKG1hcCQzKGl0ZW1zLCBmaWxlID0+IHtcbiAgICAgIHJldHVybiBibG9iVG9EYXRhVXJpKGZpbGUpLnRoZW4odXJpID0+ICh7XG4gICAgICAgIGZpbGUsXG4gICAgICAgIHVyaVxuICAgICAgfSkpO1xuICAgIH0pKTtcbiAgICBjb25zdCBpc0ltYWdlID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGFsbG93ZWRFeHRlbnNpb25zID0gZ2V0QWxsb3dlZEltYWdlRmlsZVR5cGVzKGVkaXRvcik7XG4gICAgICByZXR1cm4gZmlsZSA9PiBzdGFydHNXaXRoKGZpbGUudHlwZSwgJ2ltYWdlLycpICYmIGV4aXN0cyhhbGxvd2VkRXh0ZW5zaW9ucywgZXh0ZW5zaW9uID0+IHtcbiAgICAgICAgcmV0dXJuIGdldEltYWdlTWltZVR5cGUoZXh0ZW5zaW9uKSA9PT0gZmlsZS50eXBlO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRJbWFnZXNGcm9tRGF0YVRyYW5zZmVyID0gKGVkaXRvciwgZGF0YVRyYW5zZmVyKSA9PiB7XG4gICAgICBjb25zdCBpdGVtcyA9IGRhdGFUcmFuc2Zlci5pdGVtcyA/IGJpbmQkMyhmcm9tKGRhdGFUcmFuc2Zlci5pdGVtcyksIGl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS5raW5kID09PSAnZmlsZScgPyBbaXRlbS5nZXRBc0ZpbGUoKV0gOiBbXTtcbiAgICAgIH0pIDogW107XG4gICAgICBjb25zdCBmaWxlcyA9IGRhdGFUcmFuc2Zlci5maWxlcyA/IGZyb20oZGF0YVRyYW5zZmVyLmZpbGVzKSA6IFtdO1xuICAgICAgcmV0dXJuIGZpbHRlciQ1KGl0ZW1zLmxlbmd0aCA+IDAgPyBpdGVtcyA6IGZpbGVzLCBpc0ltYWdlKGVkaXRvcikpO1xuICAgIH07XG4gICAgY29uc3QgcGFzdGVJbWFnZURhdGEgPSAoZWRpdG9yLCBlLCBybmcpID0+IHtcbiAgICAgIGNvbnN0IGRhdGFUcmFuc2ZlciA9IGlzQ2xpcGJvYXJkRXZlbnQoZSkgPyBlLmNsaXBib2FyZERhdGEgOiBlLmRhdGFUcmFuc2ZlcjtcbiAgICAgIGlmIChzaG91bGRQYXN0ZURhdGFJbWFnZXMoZWRpdG9yKSAmJiBkYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgY29uc3QgaW1hZ2VzID0gZ2V0SW1hZ2VzRnJvbURhdGFUcmFuc2ZlcihlZGl0b3IsIGRhdGFUcmFuc2Zlcik7XG4gICAgICAgIGlmIChpbWFnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICByZWFkRmlsZXNBc0RhdGFVcmlzKGltYWdlcykudGhlbihmaWxlUmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBpZiAocm5nKSB7XG4gICAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlYWNoJGUoZmlsZVJlc3VsdHMsIHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgIHBhc3RlSW1hZ2UoZWRpdG9yLCByZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQnJva2VuQW5kcm9pZENsaXBib2FyZEV2ZW50ID0gZSA9PiB7XG4gICAgICB2YXIgX2EsIF9iO1xuICAgICAgcmV0dXJuIEVudi5vcy5pc0FuZHJvaWQoKSAmJiAoKF9iID0gKF9hID0gZS5jbGlwYm9hcmREYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaXRlbXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5sZW5ndGgpID09PSAwO1xuICAgIH07XG4gICAgY29uc3QgaXNLZXlib2FyZFBhc3RlRXZlbnQgPSBlID0+IFZLLm1ldGFLZXlQcmVzc2VkKGUpICYmIGUua2V5Q29kZSA9PT0gODYgfHwgZS5zaGlmdEtleSAmJiBlLmtleUNvZGUgPT09IDQ1O1xuICAgIGNvbnN0IGluc2VydENsaXBib2FyZENvbnRlbnQgPSAoZWRpdG9yLCBjbGlwYm9hcmRDb250ZW50LCBodG1sLCBwbGFpblRleHRNb2RlLCBzaG91bGRTaW11bGF0ZUlucHV0RXZlbnQpID0+IHtcbiAgICAgIGxldCBjb250ZW50ID0gdHJpbUh0bWwoaHRtbCk7XG4gICAgICBjb25zdCBpc0ludGVybmFsID0gaGFzQ29udGVudFR5cGUoY2xpcGJvYXJkQ29udGVudCwgaW50ZXJuYWxIdG1sTWltZSgpKSB8fCBpc01hcmtlZChodG1sKTtcbiAgICAgIGNvbnN0IGlzUGxhaW5UZXh0SHRtbCA9ICFpc0ludGVybmFsICYmIGlzUGxhaW5UZXh0KGNvbnRlbnQpO1xuICAgICAgY29uc3QgaXNBYnNvbHV0ZVVybCQxID0gaXNBYnNvbHV0ZVVybChjb250ZW50KTtcbiAgICAgIGlmIChpc0RlZmF1bHRQYXN0ZUJpbkNvbnRlbnQoY29udGVudCkgfHwgIWNvbnRlbnQubGVuZ3RoIHx8IGlzUGxhaW5UZXh0SHRtbCAmJiAhaXNBYnNvbHV0ZVVybCQxKSB7XG4gICAgICAgIHBsYWluVGV4dE1vZGUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHBsYWluVGV4dE1vZGUgfHwgaXNBYnNvbHV0ZVVybCQxKSB7XG4gICAgICAgIGlmIChoYXNDb250ZW50VHlwZShjbGlwYm9hcmRDb250ZW50LCAndGV4dC9wbGFpbicpICYmIGlzUGxhaW5UZXh0SHRtbCkge1xuICAgICAgICAgIGNvbnRlbnQgPSBjbGlwYm9hcmRDb250ZW50Wyd0ZXh0L3BsYWluJ107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGVudCA9IGlubmVyVGV4dChjb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzRGVmYXVsdFBhc3RlQmluQ29udGVudChjb250ZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocGxhaW5UZXh0TW9kZSkge1xuICAgICAgICBwYXN0ZVRleHQoZWRpdG9yLCBjb250ZW50LCBzaG91bGRTaW11bGF0ZUlucHV0RXZlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFzdGVIdG1sKGVkaXRvciwgY29udGVudCwgaXNJbnRlcm5hbCwgc2hvdWxkU2ltdWxhdGVJbnB1dEV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyRXZlbnRIYW5kbGVycyA9IChlZGl0b3IsIHBhc3RlQmluLCBwYXN0ZUZvcm1hdCkgPT4ge1xuICAgICAgbGV0IGtleWJvYXJkUGFzdGVQbGFpblRleHRTdGF0ZTtcbiAgICAgIGNvbnN0IGdldExhc3RSbmcgPSAoKSA9PiBwYXN0ZUJpbi5nZXRMYXN0Um5nKCkgfHwgZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgIGVkaXRvci5vbigna2V5ZG93bicsIGUgPT4ge1xuICAgICAgICBpZiAoaXNLZXlib2FyZFBhc3RlRXZlbnQoZSkgJiYgIWUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICBrZXlib2FyZFBhc3RlUGxhaW5UZXh0U3RhdGUgPSBlLnNoaWZ0S2V5ICYmIGUua2V5Q29kZSA9PT0gODY7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLm9uKCdwYXN0ZScsIGUgPT4ge1xuICAgICAgICBpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSB8fCBpc0Jyb2tlbkFuZHJvaWRDbGlwYm9hcmRFdmVudChlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwbGFpblRleHRNb2RlID0gcGFzdGVGb3JtYXQuZ2V0KCkgPT09ICd0ZXh0JyB8fCBrZXlib2FyZFBhc3RlUGxhaW5UZXh0U3RhdGU7XG4gICAgICAgIGtleWJvYXJkUGFzdGVQbGFpblRleHRTdGF0ZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjbGlwYm9hcmRDb250ZW50ID0gZ2V0RGF0YVRyYW5zZmVySXRlbXMoZS5jbGlwYm9hcmREYXRhKTtcbiAgICAgICAgaWYgKCFoYXNIdG1sT3JUZXh0KGNsaXBib2FyZENvbnRlbnQpICYmIHBhc3RlSW1hZ2VEYXRhKGVkaXRvciwgZSwgZ2V0TGFzdFJuZygpKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzQ29udGVudFR5cGUoY2xpcGJvYXJkQ29udGVudCwgJ3RleHQvaHRtbCcpKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGluc2VydENsaXBib2FyZENvbnRlbnQoZWRpdG9yLCBjbGlwYm9hcmRDb250ZW50LCBjbGlwYm9hcmRDb250ZW50Wyd0ZXh0L2h0bWwnXSwgcGxhaW5UZXh0TW9kZSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFzQ29udGVudFR5cGUoY2xpcGJvYXJkQ29udGVudCwgJ3RleHQvcGxhaW4nKSAmJiBoYXNDb250ZW50VHlwZShjbGlwYm9hcmRDb250ZW50LCAndGV4dC91cmktbGlzdCcpKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGluc2VydENsaXBib2FyZENvbnRlbnQoZWRpdG9yLCBjbGlwYm9hcmRDb250ZW50LCBjbGlwYm9hcmRDb250ZW50Wyd0ZXh0L3BsYWluJ10sIHBsYWluVGV4dE1vZGUsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhc3RlQmluLmNyZWF0ZSgpO1xuICAgICAgICAgIERlbGF5LnNldEVkaXRvclRpbWVvdXQoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBodG1sID0gcGFzdGVCaW4uZ2V0SHRtbCgpO1xuICAgICAgICAgICAgcGFzdGVCaW4ucmVtb3ZlKCk7XG4gICAgICAgICAgICBpbnNlcnRDbGlwYm9hcmRDb250ZW50KGVkaXRvciwgY2xpcGJvYXJkQ29udGVudCwgaHRtbCwgcGxhaW5UZXh0TW9kZSwgZmFsc2UpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyRGF0YUltYWdlRmlsdGVyID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGlzV2ViS2l0RmFrZVVybCA9IHNyYyA9PiBzdGFydHNXaXRoKHNyYywgJ3dlYmtpdC1mYWtlLXVybCcpO1xuICAgICAgY29uc3QgaXNEYXRhVXJpID0gc3JjID0+IHN0YXJ0c1dpdGgoc3JjLCAnZGF0YTonKTtcbiAgICAgIGNvbnN0IGlzUGFzdGVJbnNlcnQgPSBhcmdzID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKChfYSA9IGFyZ3MuZGF0YSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnBhc3RlKSA9PT0gdHJ1ZTtcbiAgICAgIH07XG4gICAgICBlZGl0b3IucGFyc2VyLmFkZE5vZGVGaWx0ZXIoJ2ltZycsIChub2RlcywgbmFtZSwgYXJncykgPT4ge1xuICAgICAgICBpZiAoIXNob3VsZFBhc3RlRGF0YUltYWdlcyhlZGl0b3IpICYmIGlzUGFzdGVJbnNlcnQoYXJncykpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IG5vZGUuYXR0cignc3JjJyk7XG4gICAgICAgICAgICBpZiAoaXNTdHJpbmcoc3JjKSAmJiAhbm9kZS5hdHRyKCdkYXRhLW1jZS1vYmplY3QnKSAmJiBzcmMgIT09IEVudi50cmFuc3BhcmVudFNyYykge1xuICAgICAgICAgICAgICBpZiAoaXNXZWJLaXRGYWtlVXJsKHNyYykpIHtcbiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZSgpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzaG91bGRBbGxvd0h0bWxEYXRhVXJscyhlZGl0b3IpICYmIGlzRGF0YVVyaShzcmMpKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlckV2ZW50c0FuZEZpbHRlcnMgPSAoZWRpdG9yLCBwYXN0ZUJpbiwgcGFzdGVGb3JtYXQpID0+IHtcbiAgICAgIHJlZ2lzdGVyRXZlbnRIYW5kbGVycyhlZGl0b3IsIHBhc3RlQmluLCBwYXN0ZUZvcm1hdCk7XG4gICAgICByZWdpc3RlckRhdGFJbWFnZUZpbHRlcihlZGl0b3IpO1xuICAgIH07XG5cbiAgICBjb25zdCB0b2dnbGVQbGFpblRleHRQYXN0ZSA9IChlZGl0b3IsIHBhc3RlRm9ybWF0KSA9PiB7XG4gICAgICBpZiAocGFzdGVGb3JtYXQuZ2V0KCkgPT09ICd0ZXh0Jykge1xuICAgICAgICBwYXN0ZUZvcm1hdC5zZXQoJ2h0bWwnKTtcbiAgICAgICAgZmlyZVBhc3RlUGxhaW5UZXh0VG9nZ2xlKGVkaXRvciwgZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFzdGVGb3JtYXQuc2V0KCd0ZXh0Jyk7XG4gICAgICAgIGZpcmVQYXN0ZVBsYWluVGV4dFRvZ2dsZShlZGl0b3IsIHRydWUpO1xuICAgICAgfVxuICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlciQxID0gKGVkaXRvciwgcGFzdGVGb3JtYXQpID0+IHtcbiAgICAgIGVkaXRvci5hZGRDb21tYW5kKCdtY2VUb2dnbGVQbGFpblRleHRQYXN0ZScsICgpID0+IHtcbiAgICAgICAgdG9nZ2xlUGxhaW5UZXh0UGFzdGUoZWRpdG9yLCBwYXN0ZUZvcm1hdCk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5hZGRDb21tYW5kKCdtY2VJbnNlcnRDbGlwYm9hcmRDb250ZW50JywgKHVpLCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUuaHRtbCkge1xuICAgICAgICAgIHBhc3RlSHRtbChlZGl0b3IsIHZhbHVlLmh0bWwsIHZhbHVlLmludGVybmFsLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlLnRleHQpIHtcbiAgICAgICAgICBwYXN0ZVRleHQoZWRpdG9yLCB2YWx1ZS50ZXh0LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBzZXRIdG1sNUNsaXBib2FyZCA9IChjbGlwYm9hcmREYXRhLCBodG1sLCB0ZXh0KSA9PiB7XG4gICAgICBpZiAoY2xpcGJvYXJkRGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsaXBib2FyZERhdGEuY2xlYXJEYXRhKCk7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YS5zZXREYXRhKCd0ZXh0L2h0bWwnLCBodG1sKTtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhLnNldERhdGEoJ3RleHQvcGxhaW4nLCB0ZXh0KTtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhLnNldERhdGEoaW50ZXJuYWxIdG1sTWltZSgpLCBodG1sKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2V0Q2xpcGJvYXJkRGF0YSA9IChldnQsIGRhdGEsIGZhbGxiYWNrLCBkb25lKSA9PiB7XG4gICAgICBpZiAoc2V0SHRtbDVDbGlwYm9hcmQoZXZ0LmNsaXBib2FyZERhdGEsIGRhdGEuaHRtbCwgZGF0YS50ZXh0KSkge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmFsbGJhY2soZGF0YS5odG1sLCBkb25lKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZhbGxiYWNrID0gZWRpdG9yID0+IChodG1sLCBkb25lKSA9PiB7XG4gICAgICBjb25zdCB7ZG9tLCBzZWxlY3Rpb259ID0gZWRpdG9yO1xuICAgICAgY29uc3Qgb3V0ZXIgPSBkb20uY3JlYXRlKCdkaXYnLCB7XG4gICAgICAgICdjb250ZW50ZWRpdGFibGUnOiAnZmFsc2UnLFxuICAgICAgICAnZGF0YS1tY2UtYm9ndXMnOiAnYWxsJ1xuICAgICAgfSk7XG4gICAgICBjb25zdCBpbm5lciA9IGRvbS5jcmVhdGUoJ2RpdicsIHsgY29udGVudGVkaXRhYmxlOiAndHJ1ZScgfSwgaHRtbCk7XG4gICAgICBkb20uc2V0U3R5bGVzKG91dGVyLCB7XG4gICAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgICB0b3A6ICcwJyxcbiAgICAgICAgbGVmdDogJy0zMDAwcHgnLFxuICAgICAgICB3aWR0aDogJzEwMDBweCcsXG4gICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICAgICAgfSk7XG4gICAgICBvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7XG4gICAgICBkb20uYWRkKGVkaXRvci5nZXRCb2R5KCksIG91dGVyKTtcbiAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgaW5uZXIuZm9jdXMoKTtcbiAgICAgIGNvbnN0IG9mZnNjcmVlblJhbmdlID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgb2Zmc2NyZWVuUmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGlubmVyKTtcbiAgICAgIHNlbGVjdGlvbi5zZXRSbmcob2Zmc2NyZWVuUmFuZ2UpO1xuICAgICAgRGVsYXkuc2V0RWRpdG9yVGltZW91dChlZGl0b3IsICgpID0+IHtcbiAgICAgICAgc2VsZWN0aW9uLnNldFJuZyhyYW5nZSk7XG4gICAgICAgIGRvbS5yZW1vdmUob3V0ZXIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCAwKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldERhdGEgPSBlZGl0b3IgPT4gKHtcbiAgICAgIGh0bWw6IG1hcmsoZWRpdG9yLnNlbGVjdGlvbi5nZXRDb250ZW50KHsgY29udGV4dHVhbDogdHJ1ZSB9KSksXG4gICAgICB0ZXh0OiBlZGl0b3Iuc2VsZWN0aW9uLmdldENvbnRlbnQoeyBmb3JtYXQ6ICd0ZXh0JyB9KVxuICAgIH0pO1xuICAgIGNvbnN0IGlzVGFibGVTZWxlY3Rpb24gPSBlZGl0b3IgPT4gISFlZGl0b3IuZG9tLmdldFBhcmVudChlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KCksICd0ZFtkYXRhLW1jZS1zZWxlY3RlZF0sdGhbZGF0YS1tY2Utc2VsZWN0ZWRdJywgZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgY29uc3QgaGFzU2VsZWN0ZWRDb250ZW50ID0gZWRpdG9yID0+ICFlZGl0b3Iuc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkgfHwgaXNUYWJsZVNlbGVjdGlvbihlZGl0b3IpO1xuICAgIGNvbnN0IGN1dCA9IGVkaXRvciA9PiBldnQgPT4ge1xuICAgICAgaWYgKCFldnQuaXNEZWZhdWx0UHJldmVudGVkKCkgJiYgaGFzU2VsZWN0ZWRDb250ZW50KGVkaXRvcikpIHtcbiAgICAgICAgc2V0Q2xpcGJvYXJkRGF0YShldnQsIGdldERhdGEoZWRpdG9yKSwgZmFsbGJhY2soZWRpdG9yKSwgKCkgPT4ge1xuICAgICAgICAgIGlmIChFbnYuYnJvd3Nlci5pc0Nocm9taXVtKCkgfHwgRW52LmJyb3dzZXIuaXNGaXJlZm94KCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICAgICAgICBEZWxheS5zZXRFZGl0b3JUaW1lb3V0KGVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ0RlbGV0ZScpO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnRGVsZXRlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNvcHkgPSBlZGl0b3IgPT4gZXZ0ID0+IHtcbiAgICAgIGlmICghZXZ0LmlzRGVmYXVsdFByZXZlbnRlZCgpICYmIGhhc1NlbGVjdGVkQ29udGVudChlZGl0b3IpKSB7XG4gICAgICAgIHNldENsaXBib2FyZERhdGEoZXZ0LCBnZXREYXRhKGVkaXRvciksIGZhbGxiYWNrKGVkaXRvciksIG5vb3ApO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXIgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLm9uKCdjdXQnLCBjdXQoZWRpdG9yKSk7XG4gICAgICBlZGl0b3Iub24oJ2NvcHknLCBjb3B5KGVkaXRvcikpO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRDYXJldFJhbmdlRnJvbUV2ZW50ID0gKGVkaXRvciwgZSkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIHJldHVybiBSYW5nZVV0aWxzLmdldENhcmV0UmFuZ2VGcm9tUG9pbnQoKF9hID0gZS5jbGllbnRYKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwLCAoX2IgPSBlLmNsaWVudFkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDAsIGVkaXRvci5nZXREb2MoKSk7XG4gICAgfTtcbiAgICBjb25zdCBpc1BsYWluVGV4dEZpbGVVcmwgPSBjb250ZW50ID0+IHtcbiAgICAgIGNvbnN0IHBsYWluVGV4dENvbnRlbnQgPSBjb250ZW50Wyd0ZXh0L3BsYWluJ107XG4gICAgICByZXR1cm4gcGxhaW5UZXh0Q29udGVudCA/IHBsYWluVGV4dENvbnRlbnQuaW5kZXhPZignZmlsZTovLycpID09PSAwIDogZmFsc2U7XG4gICAgfTtcbiAgICBjb25zdCBzZXRGb2N1c2VkUmFuZ2UgPSAoZWRpdG9yLCBybmcpID0+IHtcbiAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgaWYgKHJuZykge1xuICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaGFzSW1hZ2UgPSBkYXRhVHJhbnNmZXIgPT4gZXhpc3RzKGRhdGFUcmFuc2Zlci5maWxlcywgZmlsZSA9PiAvXmltYWdlXFwvLy50ZXN0KGZpbGUudHlwZSkpO1xuICAgIGNvbnN0IG5lZWRzQ3VzdG9tSW50ZXJuYWxEcm9wID0gKGRvbSwgc2NoZW1hLCB0YXJnZXQsIGRyb3BDb250ZW50KSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnRUcmFuc3BhcmVudCA9IGRvbS5nZXRQYXJlbnQodGFyZ2V0LCBub2RlID0+IGlzVHJhbnNwYXJlbnRCbG9jayhzY2hlbWEsIG5vZGUpKTtcbiAgICAgIGNvbnN0IGluU3VtbWFyeSA9ICFpc051bGwoZG9tLmdldFBhcmVudCh0YXJnZXQsICdzdW1tYXJ5JykpO1xuICAgICAgaWYgKGluU3VtbWFyeSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAocGFyZW50VHJhbnNwYXJlbnQgJiYgaGFzJDIoZHJvcENvbnRlbnQsICd0ZXh0L2h0bWwnKSkge1xuICAgICAgICBjb25zdCBmcmFnbWVudCA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoZHJvcENvbnRlbnRbJ3RleHQvaHRtbCddLCAndGV4dC9odG1sJykuYm9keTtcbiAgICAgICAgcmV0dXJuICFpc051bGwoZnJhZ21lbnQucXVlcnlTZWxlY3RvcihwYXJlbnRUcmFuc3BhcmVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXR1cFN1bW1hcnlEZWxldGVCeURyYWdGaXggPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLm9uKCdpbnB1dCcsIGUgPT4ge1xuICAgICAgICBjb25zdCBoYXNOb1N1bW1hcnkgPSBlbCA9PiBpc051bGwoZWwucXVlcnlTZWxlY3Rvcignc3VtbWFyeScpKTtcbiAgICAgICAgaWYgKGUuaW5wdXRUeXBlID09PSAnZGVsZXRlQnlEcmFnJykge1xuICAgICAgICAgIGNvbnN0IGJyb2tlbkRldGFpbEVsZW1lbnRzID0gZmlsdGVyJDUoZWRpdG9yLmRvbS5zZWxlY3QoJ2RldGFpbHMnKSwgaGFzTm9TdW1tYXJ5KTtcbiAgICAgICAgICBlYWNoJGUoYnJva2VuRGV0YWlsRWxlbWVudHMsIGRldGFpbHMgPT4ge1xuICAgICAgICAgICAgaWYgKGlzQnIkNihkZXRhaWxzLmZpcnN0Q2hpbGQpKSB7XG4gICAgICAgICAgICAgIGRldGFpbHMuZmlyc3RDaGlsZC5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN1bW1hcnkgPSBlZGl0b3IuZG9tLmNyZWF0ZSgnc3VtbWFyeScpO1xuICAgICAgICAgICAgc3VtbWFyeS5hcHBlbmRDaGlsZChjcmVhdGVQYWRkaW5nQnIoKS5kb20pO1xuICAgICAgICAgICAgZGV0YWlscy5wcmVwZW5kKHN1bW1hcnkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHNldHVwJGEgPSAoZWRpdG9yLCBkcmFnZ2luZ0ludGVybmFsbHlTdGF0ZSkgPT4ge1xuICAgICAgaWYgKHNob3VsZFBhc3RlQmxvY2tEcm9wKGVkaXRvcikpIHtcbiAgICAgICAgZWRpdG9yLm9uKCdkcmFnZW5kIGRyYWdvdmVyIGRyYWdnZXN0dXJlIGRyYWdkcm9wIGRyb3AgZHJhZycsIGUgPT4ge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghc2hvdWxkUGFzdGVEYXRhSW1hZ2VzKGVkaXRvcikpIHtcbiAgICAgICAgZWRpdG9yLm9uKCdkcm9wJywgZSA9PiB7XG4gICAgICAgICAgY29uc3QgZGF0YVRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXI7XG4gICAgICAgICAgaWYgKGRhdGFUcmFuc2ZlciAmJiBoYXNJbWFnZShkYXRhVHJhbnNmZXIpKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGVkaXRvci5vbignZHJvcCcsIGUgPT4ge1xuICAgICAgICBpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBybmcgPSBnZXRDYXJldFJhbmdlRnJvbUV2ZW50KGVkaXRvciwgZSk7XG4gICAgICAgIGlmIChpc051bGxhYmxlKHJuZykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZHJvcENvbnRlbnQgPSBnZXREYXRhVHJhbnNmZXJJdGVtcyhlLmRhdGFUcmFuc2Zlcik7XG4gICAgICAgIGNvbnN0IGludGVybmFsID0gaGFzQ29udGVudFR5cGUoZHJvcENvbnRlbnQsIGludGVybmFsSHRtbE1pbWUoKSk7XG4gICAgICAgIGlmICgoIWhhc0h0bWxPclRleHQoZHJvcENvbnRlbnQpIHx8IGlzUGxhaW5UZXh0RmlsZVVybChkcm9wQ29udGVudCkpICYmIHBhc3RlSW1hZ2VEYXRhKGVkaXRvciwgZSwgcm5nKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnRlcm5hbENvbnRlbnQgPSBkcm9wQ29udGVudFtpbnRlcm5hbEh0bWxNaW1lKCldO1xuICAgICAgICBjb25zdCBjb250ZW50ID0gaW50ZXJuYWxDb250ZW50IHx8IGRyb3BDb250ZW50Wyd0ZXh0L2h0bWwnXSB8fCBkcm9wQ29udGVudFsndGV4dC9wbGFpbiddO1xuICAgICAgICBjb25zdCBuZWVkc0ludGVybmFsRHJvcCA9IG5lZWRzQ3VzdG9tSW50ZXJuYWxEcm9wKGVkaXRvci5kb20sIGVkaXRvci5zY2hlbWEsIHJuZy5zdGFydENvbnRhaW5lciwgZHJvcENvbnRlbnQpO1xuICAgICAgICBjb25zdCBpc0ludGVybmFsRHJvcCA9IGRyYWdnaW5nSW50ZXJuYWxseVN0YXRlLmdldCgpO1xuICAgICAgICBpZiAoaXNJbnRlcm5hbERyb3AgJiYgIW5lZWRzSW50ZXJuYWxEcm9wKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIERlbGF5LnNldEVkaXRvclRpbWVvdXQoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICBlZGl0b3IudW5kb01hbmFnZXIudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxDb250ZW50IHx8IGlzSW50ZXJuYWxEcm9wICYmIG5lZWRzSW50ZXJuYWxEcm9wKSB7XG4gICAgICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdEZWxldGUnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzZXRGb2N1c2VkUmFuZ2UoZWRpdG9yLCBybmcpO1xuICAgICAgICAgICAgICBjb25zdCB0cmltbWVkQ29udGVudCA9IHRyaW1IdG1sKGNvbnRlbnQpO1xuICAgICAgICAgICAgICBpZiAoZHJvcENvbnRlbnRbJ3RleHQvaHRtbCddKSB7XG4gICAgICAgICAgICAgICAgcGFzdGVIdG1sKGVkaXRvciwgdHJpbW1lZENvbnRlbnQsIGludGVybmFsLCB0cnVlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXN0ZVRleHQoZWRpdG9yLCB0cmltbWVkQ29udGVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignZHJhZ3N0YXJ0JywgX2UgPT4ge1xuICAgICAgICBkcmFnZ2luZ0ludGVybmFsbHlTdGF0ZS5zZXQodHJ1ZSk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignZHJhZ292ZXIgZHJhZ2VuZCcsIGUgPT4ge1xuICAgICAgICBpZiAoc2hvdWxkUGFzdGVEYXRhSW1hZ2VzKGVkaXRvcikgJiYgIWRyYWdnaW5nSW50ZXJuYWxseVN0YXRlLmdldCgpKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHNldEZvY3VzZWRSYW5nZShlZGl0b3IsIGdldENhcmV0UmFuZ2VGcm9tRXZlbnQoZWRpdG9yLCBlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGUudHlwZSA9PT0gJ2RyYWdlbmQnKSB7XG4gICAgICAgICAgZHJhZ2dpbmdJbnRlcm5hbGx5U3RhdGUuc2V0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzZXR1cFN1bW1hcnlEZWxldGVCeURyYWdGaXgoZWRpdG9yKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0dXAkOSA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBwcm9jZXNzRXZlbnQgPSBmID0+IGUgPT4ge1xuICAgICAgICBmKGVkaXRvciwgZSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcHJlUHJvY2VzcyA9IGdldFBhc3RlUHJlUHJvY2VzcyhlZGl0b3IpO1xuICAgICAgaWYgKGlzRnVuY3Rpb24ocHJlUHJvY2VzcykpIHtcbiAgICAgICAgZWRpdG9yLm9uKCdQYXN0ZVByZVByb2Nlc3MnLCBwcm9jZXNzRXZlbnQocHJlUHJvY2VzcykpO1xuICAgICAgfVxuICAgICAgY29uc3QgcG9zdFByb2Nlc3MgPSBnZXRQYXN0ZVBvc3RQcm9jZXNzKGVkaXRvcik7XG4gICAgICBpZiAoaXNGdW5jdGlvbihwb3N0UHJvY2VzcykpIHtcbiAgICAgICAgZWRpdG9yLm9uKCdQYXN0ZVBvc3RQcm9jZXNzJywgcHJvY2Vzc0V2ZW50KHBvc3RQcm9jZXNzKSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGFkZFByZVByb2Nlc3NGaWx0ZXIgPSAoZWRpdG9yLCBmaWx0ZXJGdW5jKSA9PiB7XG4gICAgICBlZGl0b3Iub24oJ1Bhc3RlUHJlUHJvY2VzcycsIGUgPT4ge1xuICAgICAgICBlLmNvbnRlbnQgPSBmaWx0ZXJGdW5jKGVkaXRvciwgZS5jb250ZW50LCBlLmludGVybmFsKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmdiUmVnRXhwID0gL3JnYlxccypcXChcXHMqKFswLTldKylcXHMqLFxccyooWzAtOV0rKVxccyosXFxzKihbMC05XSspXFxzKlxcKS9naTtcbiAgICBjb25zdCByZ2JUb0hleCA9IHZhbHVlID0+IFRvb2xzLnRyaW0odmFsdWUpLnJlcGxhY2UocmdiUmVnRXhwLCByZ2JhVG9IZXhTdHJpbmcpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgcmVtb3ZlV2ViS2l0U3R5bGVzID0gKGVkaXRvciwgY29udGVudCwgaW50ZXJuYWwpID0+IHtcbiAgICAgIGNvbnN0IHdlYktpdFN0eWxlc09wdGlvbiA9IGdldFBhc3RlV2Via2l0U3R5bGVzKGVkaXRvcik7XG4gICAgICBpZiAoaW50ZXJuYWwgfHwgd2ViS2l0U3R5bGVzT3B0aW9uID09PSAnYWxsJyB8fCAhc2hvdWxkUGFzdGVSZW1vdmVXZWJLaXRTdHlsZXMoZWRpdG9yKSkge1xuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHdlYktpdFN0eWxlcyA9IHdlYktpdFN0eWxlc09wdGlvbiA/IHdlYktpdFN0eWxlc09wdGlvbi5zcGxpdCgvWywgXS8pIDogW107XG4gICAgICBpZiAod2ViS2l0U3R5bGVzICYmIHdlYktpdFN0eWxlc09wdGlvbiAhPT0gJ25vbmUnKSB7XG4gICAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb20sIG5vZGUgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKTtcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvKDxbXj5dKykgc3R5bGU9XCIoW15cIl0qKVwiKFtePl0qPikvZ2ksIChhbGwsIGJlZm9yZSwgdmFsdWUsIGFmdGVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgaW5wdXRTdHlsZXMgPSBkb20ucGFyc2VTdHlsZShkb20uZGVjb2RlKHZhbHVlKSk7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0U3R5bGVzID0ge307XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB3ZWJLaXRTdHlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSBpbnB1dFN0eWxlc1t3ZWJLaXRTdHlsZXNbaV1dO1xuICAgICAgICAgICAgbGV0IGNvbXBhcmVJbnB1dCA9IGlucHV0VmFsdWU7XG4gICAgICAgICAgICBsZXQgY3VycmVudFZhbHVlID0gZG9tLmdldFN0eWxlKG5vZGUsIHdlYktpdFN0eWxlc1tpXSwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAoL2NvbG9yLy50ZXN0KHdlYktpdFN0eWxlc1tpXSkpIHtcbiAgICAgICAgICAgICAgY29tcGFyZUlucHV0ID0gcmdiVG9IZXgoY29tcGFyZUlucHV0KTtcbiAgICAgICAgICAgICAgY3VycmVudFZhbHVlID0gcmdiVG9IZXgoY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT09IGNvbXBhcmVJbnB1dCkge1xuICAgICAgICAgICAgICBvdXRwdXRTdHlsZXNbd2ViS2l0U3R5bGVzW2ldXSA9IGlucHV0VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG91dHB1dFN0eWxlID0gZG9tLnNlcmlhbGl6ZVN0eWxlKG91dHB1dFN0eWxlcywgJ3NwYW4nKTtcbiAgICAgICAgICBpZiAob3V0cHV0U3R5bGUpIHtcbiAgICAgICAgICAgIHJldHVybiBiZWZvcmUgKyAnIHN0eWxlPVwiJyArIG91dHB1dFN0eWxlICsgJ1wiJyArIGFmdGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYmVmb3JlICsgYWZ0ZXI7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvKDxbXj5dKykgc3R5bGU9XCIoW15cIl0qKVwiKFtePl0qPikvZ2ksICckMSQzJyk7XG4gICAgICB9XG4gICAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlKC8oPFtePl0rKSBkYXRhLW1jZS1zdHlsZT1cIihbXlwiXSspXCIoW14+XSo+KS9naSwgKGFsbCwgYmVmb3JlLCB2YWx1ZSwgYWZ0ZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIGJlZm9yZSArICcgc3R5bGU9XCInICsgdmFsdWUgKyAnXCInICsgYWZ0ZXI7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH07XG4gICAgY29uc3Qgc2V0dXAkOCA9IGVkaXRvciA9PiB7XG4gICAgICBpZiAoRW52LmJyb3dzZXIuaXNDaHJvbWl1bSgpIHx8IEVudi5icm93c2VyLmlzU2FmYXJpKCkpIHtcbiAgICAgICAgYWRkUHJlUHJvY2Vzc0ZpbHRlcihlZGl0b3IsIHJlbW92ZVdlYktpdFN0eWxlcyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHNldHVwJDcgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZHJhZ2dpbmdJbnRlcm5hbGx5U3RhdGUgPSBDZWxsKGZhbHNlKTtcbiAgICAgIGNvbnN0IHBhc3RlRm9ybWF0ID0gQ2VsbChpc1Bhc3RlQXNUZXh0RW5hYmxlZChlZGl0b3IpID8gJ3RleHQnIDogJ2h0bWwnKTtcbiAgICAgIGNvbnN0IHBhc3RlQmluID0gUGFzdGVCaW4oZWRpdG9yKTtcbiAgICAgIHNldHVwJDgoZWRpdG9yKTtcbiAgICAgIHJlZ2lzdGVyJDEoZWRpdG9yLCBwYXN0ZUZvcm1hdCk7XG4gICAgICBzZXR1cCQ5KGVkaXRvcik7XG4gICAgICBlZGl0b3Iub24oJ1ByZUluaXQnLCAoKSA9PiB7XG4gICAgICAgIHJlZ2lzdGVyKGVkaXRvcik7XG4gICAgICAgIHNldHVwJGEoZWRpdG9yLCBkcmFnZ2luZ0ludGVybmFsbHlTdGF0ZSk7XG4gICAgICAgIHJlZ2lzdGVyRXZlbnRzQW5kRmlsdGVycyhlZGl0b3IsIHBhc3RlQmluLCBwYXN0ZUZvcm1hdCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJldmVudFN1bW1hcnlUb2dnbGUgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLm9uKCdjbGljaycsIGUgPT4ge1xuICAgICAgICBpZiAoZWRpdG9yLmRvbS5nZXRQYXJlbnQoZS50YXJnZXQsICdkZXRhaWxzJykpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZmlsdGVyRGV0YWlscyA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IucGFyc2VyLmFkZE5vZGVGaWx0ZXIoJ2RldGFpbHMnLCBlbG1zID0+IHtcbiAgICAgICAgY29uc3QgaW5pdGlhbFN0YXRlT3B0aW9uID0gZ2V0RGV0YWlsc0luaXRpYWxTdGF0ZShlZGl0b3IpO1xuICAgICAgICBlYWNoJGUoZWxtcywgZGV0YWlscyA9PiB7XG4gICAgICAgICAgaWYgKGluaXRpYWxTdGF0ZU9wdGlvbiA9PT0gJ2V4cGFuZGVkJykge1xuICAgICAgICAgICAgZGV0YWlscy5hdHRyKCdvcGVuJywgJ29wZW4nKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGluaXRpYWxTdGF0ZU9wdGlvbiA9PT0gJ2NvbGxhcHNlZCcpIHtcbiAgICAgICAgICAgIGRldGFpbHMuYXR0cignb3BlbicsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5zZXJpYWxpemVyLmFkZE5vZGVGaWx0ZXIoJ2RldGFpbHMnLCBlbG1zID0+IHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZFN0YXRlT3B0aW9uID0gZ2V0RGV0YWlsc1NlcmlhbGl6ZWRTdGF0ZShlZGl0b3IpO1xuICAgICAgICBlYWNoJGUoZWxtcywgZGV0YWlscyA9PiB7XG4gICAgICAgICAgaWYgKHNlcmlhbGl6ZWRTdGF0ZU9wdGlvbiA9PT0gJ2V4cGFuZGVkJykge1xuICAgICAgICAgICAgZGV0YWlscy5hdHRyKCdvcGVuJywgJ29wZW4nKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNlcmlhbGl6ZWRTdGF0ZU9wdGlvbiA9PT0gJ2NvbGxhcHNlZCcpIHtcbiAgICAgICAgICAgIGRldGFpbHMuYXR0cignb3BlbicsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHNldHVwJDYgPSBlZGl0b3IgPT4ge1xuICAgICAgcHJldmVudFN1bW1hcnlUb2dnbGUoZWRpdG9yKTtcbiAgICAgIGZpbHRlckRldGFpbHMoZWRpdG9yKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNCciA9IGlzQnIkNjtcbiAgICBjb25zdCBpc1RleHQgPSBpc1RleHQkYTtcbiAgICBjb25zdCBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJDIgPSBlbG0gPT4gaXNDb250ZW50RWRpdGFibGVGYWxzZSRiKGVsbS5kb20pO1xuICAgIGNvbnN0IGlzQ29udGVudEVkaXRhYmxlVHJ1ZSA9IGVsbSA9PiBpc0NvbnRlbnRFZGl0YWJsZVRydWUkMyhlbG0uZG9tKTtcbiAgICBjb25zdCBpc1Jvb3QgPSByb290Tm9kZSA9PiBlbG0gPT4gZXEoU3VnYXJFbGVtZW50LmZyb21Eb20ocm9vdE5vZGUpLCBlbG0pO1xuICAgIGNvbnN0IGdldENsb3Nlc3RTY29wZSA9IChub2RlLCByb290Tm9kZSkgPT4gY2xvc2VzdCQ0KFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5vZGUpLCBlbG0gPT4gaXNDb250ZW50RWRpdGFibGVUcnVlKGVsbSkgfHwgaXNCbG9jayQyKGVsbSksIGlzUm9vdChyb290Tm9kZSkpLmdldE9yKFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJvb3ROb2RlKSkuZG9tO1xuICAgIGNvbnN0IGdldENsb3Nlc3RDZWYgPSAobm9kZSwgcm9vdE5vZGUpID0+IGNsb3Nlc3QkNChTdWdhckVsZW1lbnQuZnJvbURvbShub2RlKSwgaXNDb250ZW50RWRpdGFibGVGYWxzZSQyLCBpc1Jvb3Qocm9vdE5vZGUpKTtcbiAgICBjb25zdCBmaW5kRWRnZUNhcmV0Q2FuZGlkYXRlID0gKHN0YXJ0Tm9kZSwgc2NvcGUsIGZvcndhcmQpID0+IHtcbiAgICAgIGNvbnN0IHdhbGtlciA9IG5ldyBEb21UcmVlV2Fsa2VyKHN0YXJ0Tm9kZSwgc2NvcGUpO1xuICAgICAgY29uc3QgbmV4dCA9IGZvcndhcmQgPyB3YWxrZXIubmV4dC5iaW5kKHdhbGtlcikgOiB3YWxrZXIucHJldi5iaW5kKHdhbGtlcik7XG4gICAgICBsZXQgcmVzdWx0ID0gc3RhcnROb2RlO1xuICAgICAgZm9yIChsZXQgY3VycmVudCA9IGZvcndhcmQgPyBzdGFydE5vZGUgOiBuZXh0KCk7IGN1cnJlbnQgJiYgIWlzQnIoY3VycmVudCk7IGN1cnJlbnQgPSBuZXh0KCkpIHtcbiAgICAgICAgaWYgKGlzQ2FyZXRDYW5kaWRhdGUkMyhjdXJyZW50KSkge1xuICAgICAgICAgIHJlc3VsdCA9IGN1cnJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kQ2xvc2VzdEJsb2NrUmFuZ2UgPSAoc3RhcnRSbmcsIHJvb3ROb2RlKSA9PiB7XG4gICAgICBjb25zdCBzdGFydFBvcyA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQoc3RhcnRSbmcpO1xuICAgICAgY29uc3QgY2xpY2tOb2RlID0gc3RhcnRQb3MuZ2V0Tm9kZSgpO1xuICAgICAgY29uc3Qgc2NvcGUgPSBnZXRDbG9zZXN0U2NvcGUoY2xpY2tOb2RlLCByb290Tm9kZSk7XG4gICAgICBjb25zdCBzdGFydE5vZGUgPSBmaW5kRWRnZUNhcmV0Q2FuZGlkYXRlKGNsaWNrTm9kZSwgc2NvcGUsIGZhbHNlKTtcbiAgICAgIGNvbnN0IGVuZE5vZGUgPSBmaW5kRWRnZUNhcmV0Q2FuZGlkYXRlKGNsaWNrTm9kZSwgc2NvcGUsIHRydWUpO1xuICAgICAgY29uc3Qgcm5nID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIGdldENsb3Nlc3RDZWYoc3RhcnROb2RlLCBzY29wZSkuZm9sZCgoKSA9PiB7XG4gICAgICAgIGlmIChpc1RleHQoc3RhcnROb2RlKSkge1xuICAgICAgICAgIHJuZy5zZXRTdGFydChzdGFydE5vZGUsIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJuZy5zZXRTdGFydEJlZm9yZShzdGFydE5vZGUpO1xuICAgICAgICB9XG4gICAgICB9LCBjZWYgPT4gcm5nLnNldFN0YXJ0QmVmb3JlKGNlZi5kb20pKTtcbiAgICAgIGdldENsb3Nlc3RDZWYoZW5kTm9kZSwgc2NvcGUpLmZvbGQoKCkgPT4ge1xuICAgICAgICBpZiAoaXNUZXh0KGVuZE5vZGUpKSB7XG4gICAgICAgICAgcm5nLnNldEVuZChlbmROb2RlLCBlbmROb2RlLmRhdGEubGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBybmcuc2V0RW5kQWZ0ZXIoZW5kTm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0sIGNlZiA9PiBybmcuc2V0RW5kQWZ0ZXIoY2VmLmRvbSkpO1xuICAgICAgcmV0dXJuIHJuZztcbiAgICB9O1xuICAgIGNvbnN0IG9uVHJpcGxlQ2xpY2tTZWxlY3QgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZmluZENsb3Nlc3RCbG9ja1JhbmdlKGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCksIGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcobm9ybWFsaXplKHJuZykpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0dXAkNSA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3Iub24oJ21vdXNlZG93bicsIGUgPT4ge1xuICAgICAgICBpZiAoZS5kZXRhaWwgPj0gMykge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBvblRyaXBsZUNsaWNrU2VsZWN0KGVkaXRvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB2YXIgRmFrZUNhcmV0UG9zaXRpb247XG4gICAgKGZ1bmN0aW9uIChGYWtlQ2FyZXRQb3NpdGlvbikge1xuICAgICAgRmFrZUNhcmV0UG9zaXRpb25bJ0JlZm9yZSddID0gJ2JlZm9yZSc7XG4gICAgICBGYWtlQ2FyZXRQb3NpdGlvblsnQWZ0ZXInXSA9ICdhZnRlcic7XG4gICAgfShGYWtlQ2FyZXRQb3NpdGlvbiB8fCAoRmFrZUNhcmV0UG9zaXRpb24gPSB7fSkpKTtcbiAgICBjb25zdCBkaXN0YW5jZVRvUmVjdExlZnQgPSAoY2xpZW50UmVjdCwgY2xpZW50WCkgPT4gTWF0aC5hYnMoY2xpZW50UmVjdC5sZWZ0IC0gY2xpZW50WCk7XG4gICAgY29uc3QgZGlzdGFuY2VUb1JlY3RSaWdodCA9IChjbGllbnRSZWN0LCBjbGllbnRYKSA9PiBNYXRoLmFicyhjbGllbnRSZWN0LnJpZ2h0IC0gY2xpZW50WCk7XG4gICAgY29uc3QgaXNJbnNpZGVZID0gKGNsaWVudFksIGNsaWVudFJlY3QpID0+IGNsaWVudFkgPj0gY2xpZW50UmVjdC50b3AgJiYgY2xpZW50WSA8PSBjbGllbnRSZWN0LmJvdHRvbTtcbiAgICBjb25zdCBjb2xsaWRlc1kgPSAocjEsIHIyKSA9PiByMS50b3AgPCByMi5ib3R0b20gJiYgcjEuYm90dG9tID4gcjIudG9wO1xuICAgIGNvbnN0IGlzT3ZlcmxhcHBpbmcgPSAocjEsIHIyKSA9PiB7XG4gICAgICBjb25zdCBvdmVybGFwID0gb3ZlcmxhcFkocjEsIHIyKSAvIE1hdGgubWluKHIxLmhlaWdodCwgcjIuaGVpZ2h0KTtcbiAgICAgIHJldHVybiBjb2xsaWRlc1kocjEsIHIyKSAmJiBvdmVybGFwID4gMC41O1xuICAgIH07XG4gICAgY29uc3Qgc3BsaXRSZWN0c1BlckF4aXMgPSAocmVjdHMsIHkpID0+IHtcbiAgICAgIGNvbnN0IGludGVyc2VjdGluZ1JlY3RzID0gZmlsdGVyJDUocmVjdHMsIHJlY3QgPT4gaXNJbnNpZGVZKHksIHJlY3QpKTtcbiAgICAgIHJldHVybiBib3VuZGluZ0NsaWVudFJlY3RGcm9tUmVjdHMoaW50ZXJzZWN0aW5nUmVjdHMpLmZvbGQoKCkgPT4gW1xuICAgICAgICBbXSxcbiAgICAgICAgcmVjdHNcbiAgICAgIF0sIGJvdW5kaW5nUmVjdCA9PiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBwYXNzOiBob3Jpem9udGFsLFxuICAgICAgICAgIGZhaWw6IHZlcnRpY2FsXG4gICAgICAgIH0gPSBwYXJ0aXRpb24kMihyZWN0cywgcmVjdCA9PiBpc092ZXJsYXBwaW5nKHJlY3QsIGJvdW5kaW5nUmVjdCkpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIGhvcml6b250YWwsXG4gICAgICAgICAgdmVydGljYWxcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgY2xpZW50SW5mbyA9IChyZWN0LCBjbGllbnRYKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlOiByZWN0Lm5vZGUsXG4gICAgICAgIHBvc2l0aW9uOiBkaXN0YW5jZVRvUmVjdExlZnQocmVjdCwgY2xpZW50WCkgPCBkaXN0YW5jZVRvUmVjdFJpZ2h0KHJlY3QsIGNsaWVudFgpID8gRmFrZUNhcmV0UG9zaXRpb24uQmVmb3JlIDogRmFrZUNhcmV0UG9zaXRpb24uQWZ0ZXJcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBob3Jpem9udGFsRGlzdGFuY2UgPSAocmVjdCwgeCwgX3kpID0+IHggPiByZWN0LmxlZnQgJiYgeCA8IHJlY3QucmlnaHQgPyAwIDogTWF0aC5taW4oTWF0aC5hYnMocmVjdC5sZWZ0IC0geCksIE1hdGguYWJzKHJlY3QucmlnaHQgLSB4KSk7XG4gICAgY29uc3QgY2xvc2VzdENoaWxkQ2FyZXRDYW5kaWRhdGVOb2RlUmVjdCA9IChjaGlsZHJlbiwgY2xpZW50WCwgY2xpZW50WSkgPT4ge1xuICAgICAgY29uc3QgY2FyZXRDYW5kaWRhdGVSZWN0ID0gcmVjdCA9PiB7XG4gICAgICAgIGlmIChpc0NhcmV0Q2FuZGlkYXRlJDMocmVjdC5ub2RlKSkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHJlY3QpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRWxlbWVudCQ2KHJlY3Qubm9kZSkpIHtcbiAgICAgICAgICByZXR1cm4gY2xvc2VzdENoaWxkQ2FyZXRDYW5kaWRhdGVOb2RlUmVjdChmcm9tKHJlY3Qubm9kZS5jaGlsZE5vZGVzKSwgY2xpZW50WCwgY2xpZW50WSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldENsb3Nlc3RUZXh0Tm9kZSA9IChyZWN0cywgZGlzdGFuY2UpID0+IHtcbiAgICAgICAgaWYgKHJlY3RzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgY29uc3QgcjEgPSBjYXJldENhbmRpZGF0ZVJlY3QocmVjdHNbMF0pLmdldE9yKHJlY3RzWzBdKTtcbiAgICAgICAgICBjb25zdCByMiA9IGNhcmV0Q2FuZGlkYXRlUmVjdChyZWN0c1sxXSkuZ2V0T3IocmVjdHNbMV0pO1xuICAgICAgICAgIGNvbnN0IGRlbHRhRGlzdGFuY2UgPSBNYXRoLmFicyhkaXN0YW5jZShyMSwgY2xpZW50WCwgY2xpZW50WSkgLSBkaXN0YW5jZShyMiwgY2xpZW50WCwgY2xpZW50WSkpO1xuICAgICAgICAgIGlmIChkZWx0YURpc3RhbmNlIDwgMikge1xuICAgICAgICAgICAgaWYgKGlzVGV4dCRhKHIxLm5vZGUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHIxKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNUZXh0JGEocjIubm9kZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUocjIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZpbmRDbG9zZXN0Q2FyZXRDYW5kaWRhdGVOb2RlUmVjdCA9IChyZWN0cywgZGlzdGFuY2UpID0+IHtcbiAgICAgICAgY29uc3Qgc29ydGVkUmVjdHMgPSBzb3J0KHJlY3RzLCAocjEsIHIyKSA9PiBkaXN0YW5jZShyMSwgY2xpZW50WCwgY2xpZW50WSkgLSBkaXN0YW5jZShyMiwgY2xpZW50WCwgY2xpZW50WSkpO1xuICAgICAgICByZXR1cm4gZ2V0Q2xvc2VzdFRleHROb2RlKHNvcnRlZFJlY3RzLCBkaXN0YW5jZSkub3JUaHVuaygoKSA9PiBmaW5kTWFwKHNvcnRlZFJlY3RzLCBjYXJldENhbmRpZGF0ZVJlY3QpKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBbaG9yaXpvbnRhbFJlY3RzLCB2ZXJ0aWNhbFJlY3RzXSA9IHNwbGl0UmVjdHNQZXJBeGlzKGdldENsaWVudFJlY3RzKGNoaWxkcmVuKSwgY2xpZW50WSk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBhc3M6IGFib3ZlLFxuICAgICAgICBmYWlsOiBiZWxvd1xuICAgICAgfSA9IHBhcnRpdGlvbiQyKHZlcnRpY2FsUmVjdHMsIHJlY3QgPT4gcmVjdC50b3AgPCBjbGllbnRZKTtcbiAgICAgIHJldHVybiBmaW5kQ2xvc2VzdENhcmV0Q2FuZGlkYXRlTm9kZVJlY3QoaG9yaXpvbnRhbFJlY3RzLCBob3Jpem9udGFsRGlzdGFuY2UpLm9yVGh1bmsoKCkgPT4gZmluZENsb3Nlc3RDYXJldENhbmRpZGF0ZU5vZGVSZWN0KGJlbG93LCBkaXN0YW5jZVRvUmVjdEVkZ2VGcm9tWFkpKS5vclRodW5rKCgpID0+IGZpbmRDbG9zZXN0Q2FyZXRDYW5kaWRhdGVOb2RlUmVjdChhYm92ZSwgZGlzdGFuY2VUb1JlY3RFZGdlRnJvbVhZKSk7XG4gICAgfTtcbiAgICBjb25zdCB0cmF2ZXJzZVVwID0gKHJvb3RFbG0sIHNjb3BlLCBjbGllbnRYLCBjbGllbnRZKSA9PiB7XG4gICAgICBjb25zdCBoZWxwZXIgPSAoc2NvcGUsIHByZXZTY29wZSkgPT4ge1xuICAgICAgICBjb25zdCBpc0RyYWdHaG9zdENvbnRhaW5lciA9IG5vZGUgPT4gaXNFbGVtZW50JDYobm9kZSkgJiYgbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJ21jZS1kcmFnLWNvbnRhaW5lcicpO1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVzV2l0aG91dEdob3N0ID0gZmlsdGVyJDUoc2NvcGUuZG9tLmNoaWxkTm9kZXMsIG5vdChpc0RyYWdHaG9zdENvbnRhaW5lcikpO1xuICAgICAgICByZXR1cm4gcHJldlNjb3BlLmZvbGQoKCkgPT4gY2xvc2VzdENoaWxkQ2FyZXRDYW5kaWRhdGVOb2RlUmVjdChjaGlsZE5vZGVzV2l0aG91dEdob3N0LCBjbGllbnRYLCBjbGllbnRZKSwgcHJldlNjb3BlID0+IHtcbiAgICAgICAgICBjb25zdCB1bmNoZWNrZWRDaGlsZHJlbiA9IGZpbHRlciQ1KGNoaWxkTm9kZXNXaXRob3V0R2hvc3QsIG5vZGUgPT4gbm9kZSAhPT0gcHJldlNjb3BlLmRvbSk7XG4gICAgICAgICAgcmV0dXJuIGNsb3Nlc3RDaGlsZENhcmV0Q2FuZGlkYXRlTm9kZVJlY3QodW5jaGVja2VkQ2hpbGRyZW4sIGNsaWVudFgsIGNsaWVudFkpO1xuICAgICAgICB9KS5vclRodW5rKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJlbnQgPSBlcShzY29wZSwgcm9vdEVsbSkgPyBPcHRpb25hbC5ub25lKCkgOiBwYXJlbnRFbGVtZW50KHNjb3BlKTtcbiAgICAgICAgICByZXR1cm4gcGFyZW50LmJpbmQobmV3U2NvcGUgPT4gaGVscGVyKG5ld1Njb3BlLCBPcHRpb25hbC5zb21lKHNjb3BlKSkpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gaGVscGVyKHNjb3BlLCBPcHRpb25hbC5ub25lKCkpO1xuICAgIH07XG4gICAgY29uc3QgY2xvc2VzdENhcmV0Q2FuZGlkYXRlTm9kZVJlY3QgPSAocm9vdCwgY2xpZW50WCwgY2xpZW50WSkgPT4ge1xuICAgICAgY29uc3Qgcm9vdEVsbSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKHJvb3QpO1xuICAgICAgY29uc3Qgb3duZXJEb2MgPSBkb2N1bWVudE9yT3duZXIocm9vdEVsbSk7XG4gICAgICBjb25zdCBlbGVtZW50QXRQb2ludCA9IFN1Z2FyRWxlbWVudC5mcm9tUG9pbnQob3duZXJEb2MsIGNsaWVudFgsIGNsaWVudFkpLmZpbHRlcihlbG0gPT4gY29udGFpbnMocm9vdEVsbSwgZWxtKSk7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudEF0UG9pbnQuZ2V0T3Iocm9vdEVsbSk7XG4gICAgICByZXR1cm4gdHJhdmVyc2VVcChyb290RWxtLCBlbGVtZW50LCBjbGllbnRYLCBjbGllbnRZKTtcbiAgICB9O1xuICAgIGNvbnN0IGNsb3Nlc3RGYWtlQ2FyZXRDYW5kaWRhdGUgPSAocm9vdCwgY2xpZW50WCwgY2xpZW50WSkgPT4gY2xvc2VzdENhcmV0Q2FuZGlkYXRlTm9kZVJlY3Qocm9vdCwgY2xpZW50WCwgY2xpZW50WSkuZmlsdGVyKHJlY3QgPT4gaXNGYWtlQ2FyZXRUYXJnZXQocmVjdC5ub2RlKSkubWFwKHJlY3QgPT4gY2xpZW50SW5mbyhyZWN0LCBjbGllbnRYKSk7XG5cbiAgICBjb25zdCBnZXRBYnNvbHV0ZVBvc2l0aW9uID0gZWxtID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICBjb25zdCBjbGllbnRSZWN0ID0gZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgZG9jID0gZWxtLm93bmVyRG9jdW1lbnQ7XG4gICAgICBjb25zdCBkb2NFbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICAgIGNvbnN0IHdpbiA9IGRvYy5kZWZhdWx0VmlldztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgKyAoKF9hID0gd2luID09PSBudWxsIHx8IHdpbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2luLnNjcm9sbFkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDApIC0gZG9jRWxlbS5jbGllbnRUb3AsXG4gICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCArICgoX2IgPSB3aW4gPT09IG51bGwgfHwgd2luID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3aW4uc2Nyb2xsWCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogMCkgLSBkb2NFbGVtLmNsaWVudExlZnRcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBnZXRCb2R5UG9zaXRpb24gPSBlZGl0b3IgPT4gZWRpdG9yLmlubGluZSA/IGdldEFic29sdXRlUG9zaXRpb24oZWRpdG9yLmdldEJvZHkoKSkgOiB7XG4gICAgICBsZWZ0OiAwLFxuICAgICAgdG9wOiAwXG4gICAgfTtcbiAgICBjb25zdCBnZXRTY3JvbGxQb3NpdGlvbiA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBib2R5ID0gZWRpdG9yLmdldEJvZHkoKTtcbiAgICAgIHJldHVybiBlZGl0b3IuaW5saW5lID8ge1xuICAgICAgICBsZWZ0OiBib2R5LnNjcm9sbExlZnQsXG4gICAgICAgIHRvcDogYm9keS5zY3JvbGxUb3BcbiAgICAgIH0gOiB7XG4gICAgICAgIGxlZnQ6IDAsXG4gICAgICAgIHRvcDogMFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGdldEJvZHlTY3JvbGwgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgYm9keSA9IGVkaXRvci5nZXRCb2R5KCksIGRvY0VsbSA9IGVkaXRvci5nZXREb2MoKS5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICBjb25zdCBpbmxpbmVTY3JvbGwgPSB7XG4gICAgICAgIGxlZnQ6IGJvZHkuc2Nyb2xsTGVmdCxcbiAgICAgICAgdG9wOiBib2R5LnNjcm9sbFRvcFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGlmcmFtZVNjcm9sbCA9IHtcbiAgICAgICAgbGVmdDogYm9keS5zY3JvbGxMZWZ0IHx8IGRvY0VsbS5zY3JvbGxMZWZ0LFxuICAgICAgICB0b3A6IGJvZHkuc2Nyb2xsVG9wIHx8IGRvY0VsbS5zY3JvbGxUb3BcbiAgICAgIH07XG4gICAgICByZXR1cm4gZWRpdG9yLmlubGluZSA/IGlubGluZVNjcm9sbCA6IGlmcmFtZVNjcm9sbDtcbiAgICB9O1xuICAgIGNvbnN0IGdldE1vdXNlUG9zaXRpb24gPSAoZWRpdG9yLCBldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldC5vd25lckRvY3VtZW50ICE9PSBlZGl0b3IuZ2V0RG9jKCkpIHtcbiAgICAgICAgY29uc3QgaWZyYW1lUG9zaXRpb24gPSBnZXRBYnNvbHV0ZVBvc2l0aW9uKGVkaXRvci5nZXRDb250ZW50QXJlYUNvbnRhaW5lcigpKTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsUG9zaXRpb24gPSBnZXRCb2R5U2Nyb2xsKGVkaXRvcik7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGVmdDogZXZlbnQucGFnZVggLSBpZnJhbWVQb3NpdGlvbi5sZWZ0ICsgc2Nyb2xsUG9zaXRpb24ubGVmdCxcbiAgICAgICAgICB0b3A6IGV2ZW50LnBhZ2VZIC0gaWZyYW1lUG9zaXRpb24udG9wICsgc2Nyb2xsUG9zaXRpb24udG9wXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiBldmVudC5wYWdlWCxcbiAgICAgICAgdG9wOiBldmVudC5wYWdlWVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNhbGN1bGF0ZVBvc2l0aW9uID0gKGJvZHlQb3NpdGlvbiwgc2Nyb2xsUG9zaXRpb24sIG1vdXNlUG9zaXRpb24pID0+ICh7XG4gICAgICBwYWdlWDogbW91c2VQb3NpdGlvbi5sZWZ0IC0gYm9keVBvc2l0aW9uLmxlZnQgKyBzY3JvbGxQb3NpdGlvbi5sZWZ0LFxuICAgICAgcGFnZVk6IG1vdXNlUG9zaXRpb24udG9wIC0gYm9keVBvc2l0aW9uLnRvcCArIHNjcm9sbFBvc2l0aW9uLnRvcFxuICAgIH0pO1xuICAgIGNvbnN0IGNhbGMgPSAoZWRpdG9yLCBldmVudCkgPT4gY2FsY3VsYXRlUG9zaXRpb24oZ2V0Qm9keVBvc2l0aW9uKGVkaXRvciksIGdldFNjcm9sbFBvc2l0aW9uKGVkaXRvciksIGdldE1vdXNlUG9zaXRpb24oZWRpdG9yLCBldmVudCkpO1xuXG4gICAgY29uc3QgZ2V0VGFyZ2V0UHJvcHMgPSB0YXJnZXQgPT4gKHtcbiAgICAgIHRhcmdldCxcbiAgICAgIHNyY0VsZW1lbnQ6IHRhcmdldFxuICAgIH0pO1xuICAgIGNvbnN0IG1ha2VEbmRFdmVudEZyb21Nb3VzZUV2ZW50ID0gKHR5cGUsIG1vdXNlRXZlbnQsIHRhcmdldCwgZGF0YVRyYW5zZmVyKSA9PiAoe1xuICAgICAgLi4ubW91c2VFdmVudCxcbiAgICAgIGRhdGFUcmFuc2ZlcixcbiAgICAgIHR5cGUsXG4gICAgICAuLi5nZXRUYXJnZXRQcm9wcyh0YXJnZXQpXG4gICAgfSk7XG4gICAgY29uc3QgbWFrZURuZEV2ZW50ID0gKHR5cGUsIHRhcmdldCwgZGF0YVRyYW5zZmVyKSA9PiB7XG4gICAgICBjb25zdCBmYWlsID0gZGllKCdGdW5jdGlvbiBub3Qgc3VwcG9ydGVkIG9uIHNpbXVsYXRlZCBldmVudC4nKTtcbiAgICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxCdWJibGU6IGZhbHNlLFxuICAgICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgICAgICBjb21wb3NlZDogZmFsc2UsXG4gICAgICAgIGN1cnJlbnRUYXJnZXQ6IG51bGwsXG4gICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGZhbHNlLFxuICAgICAgICBldmVudFBoYXNlOiAwLFxuICAgICAgICBpc1RydXN0ZWQ6IHRydWUsXG4gICAgICAgIHJldHVyblZhbHVlOiBmYWxzZSxcbiAgICAgICAgdGltZVN0YW1wOiAwLFxuICAgICAgICB0eXBlLFxuICAgICAgICBjb21wb3NlZFBhdGg6IGZhaWwsXG4gICAgICAgIGluaXRFdmVudDogZmFpbCxcbiAgICAgICAgcHJldmVudERlZmF1bHQ6IG5vb3AsXG4gICAgICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogbm9vcCxcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiBub29wLFxuICAgICAgICBBVF9UQVJHRVQ6IHdpbmRvdy5FdmVudC5BVF9UQVJHRVQsXG4gICAgICAgIEJVQkJMSU5HX1BIQVNFOiB3aW5kb3cuRXZlbnQuQlVCQkxJTkdfUEhBU0UsXG4gICAgICAgIENBUFRVUklOR19QSEFTRTogd2luZG93LkV2ZW50LkNBUFRVUklOR19QSEFTRSxcbiAgICAgICAgTk9ORTogd2luZG93LkV2ZW50Lk5PTkUsXG4gICAgICAgIGFsdEtleTogZmFsc2UsXG4gICAgICAgIGJ1dHRvbjogMCxcbiAgICAgICAgYnV0dG9uczogMCxcbiAgICAgICAgY2xpZW50WDogMCxcbiAgICAgICAgY2xpZW50WTogMCxcbiAgICAgICAgY3RybEtleTogZmFsc2UsXG4gICAgICAgIG1ldGFLZXk6IGZhbHNlLFxuICAgICAgICBtb3ZlbWVudFg6IDAsXG4gICAgICAgIG1vdmVtZW50WTogMCxcbiAgICAgICAgb2Zmc2V0WDogMCxcbiAgICAgICAgb2Zmc2V0WTogMCxcbiAgICAgICAgcGFnZVg6IDAsXG4gICAgICAgIHBhZ2VZOiAwLFxuICAgICAgICByZWxhdGVkVGFyZ2V0OiBudWxsLFxuICAgICAgICBzY3JlZW5YOiAwLFxuICAgICAgICBzY3JlZW5ZOiAwLFxuICAgICAgICBzaGlmdEtleTogZmFsc2UsXG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IDAsXG4gICAgICAgIGRldGFpbDogMCxcbiAgICAgICAgdmlldzogbnVsbCxcbiAgICAgICAgd2hpY2g6IDAsXG4gICAgICAgIGluaXRVSUV2ZW50OiBmYWlsLFxuICAgICAgICBpbml0TW91c2VFdmVudDogZmFpbCxcbiAgICAgICAgZ2V0TW9kaWZpZXJTdGF0ZTogZmFpbCxcbiAgICAgICAgZGF0YVRyYW5zZmVyLFxuICAgICAgICAuLi5nZXRUYXJnZXRQcm9wcyh0YXJnZXQpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGV2ZW50O1xuICAgIH07XG4gICAgY29uc3QgbWFrZURhdGFUcmFuc2ZlckNvcHlGb3JEcmFnRXZlbnQgPSAoZGF0YVRyYW5zZmVyLCBldmVudFR5cGUpID0+IHtcbiAgICAgIGNvbnN0IGNvcHkgPSBjbG9uZURhdGFUcmFuc2ZlcihkYXRhVHJhbnNmZXIpO1xuICAgICAgaWYgKGV2ZW50VHlwZSA9PT0gJ2RyYWdzdGFydCcpIHtcbiAgICAgICAgc2V0RHJhZ3N0YXJ0RXZlbnQoY29weSk7XG4gICAgICAgIHNldFJlYWRXcml0ZU1vZGUoY29weSk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2Ryb3AnKSB7XG4gICAgICAgIHNldERyb3BFdmVudChjb3B5KTtcbiAgICAgICAgc2V0UmVhZE9ubHlNb2RlKGNvcHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0RHJhZ2VuZEV2ZW50KGNvcHkpO1xuICAgICAgICBzZXRQcm90ZWN0ZWRNb2RlKGNvcHkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfTtcbiAgICBjb25zdCBtYWtlRHJhZ0V2ZW50ID0gKHR5cGUsIHRhcmdldCwgZGF0YVRyYW5zZmVyLCBtb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBkYXRhVHJhbnNmZXJGb3JEaXNwYXRjaCA9IG1ha2VEYXRhVHJhbnNmZXJDb3B5Rm9yRHJhZ0V2ZW50KGRhdGFUcmFuc2ZlciwgdHlwZSk7XG4gICAgICByZXR1cm4gaXNVbmRlZmluZWQobW91c2VFdmVudCkgPyBtYWtlRG5kRXZlbnQodHlwZSwgdGFyZ2V0LCBkYXRhVHJhbnNmZXJGb3JEaXNwYXRjaCkgOiBtYWtlRG5kRXZlbnRGcm9tTW91c2VFdmVudCh0eXBlLCBtb3VzZUV2ZW50LCB0YXJnZXQsIGRhdGFUcmFuc2ZlckZvckRpc3BhdGNoKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2Nyb2xsUGl4ZWxzUGVySW50ZXJ2YWwgPSAzMjtcbiAgICBjb25zdCBzY3JvbGxJbnRlcnZhbFZhbHVlID0gMTAwO1xuICAgIGNvbnN0IG1vdXNlUmFuZ2VUb1RyaWdnZXJTY3JvbGxJbnNpZGVFZGl0b3IgPSA4O1xuICAgIGNvbnN0IG1vdXNlUmFuZ2VUb1RyaWdnZXJTY3JvbGxPdXRzaWRlRWRpdG9yID0gMTY7XG4gICAgY29uc3QgaXNDb250ZW50RWRpdGFibGVGYWxzZSQxID0gaXNDb250ZW50RWRpdGFibGVGYWxzZSRiO1xuICAgIGNvbnN0IGlzQ29udGVudEVkaXRhYmxlID0gb3IoaXNDb250ZW50RWRpdGFibGVGYWxzZSQxLCBpc0NvbnRlbnRFZGl0YWJsZVRydWUkMyk7XG4gICAgY29uc3QgaXNEcmFnZ2FibGUgPSAoZG9tLCByb290RWxtLCBlbG0pID0+IGlzQ29udGVudEVkaXRhYmxlRmFsc2UkMShlbG0pICYmIGVsbSAhPT0gcm9vdEVsbSAmJiBkb20uaXNFZGl0YWJsZShlbG0ucGFyZW50RWxlbWVudCk7XG4gICAgY29uc3QgaXNWYWxpZERyb3BUYXJnZXQgPSAoZWRpdG9yLCB0YXJnZXRFbGVtZW50LCBkcmFnRWxlbWVudCkgPT4ge1xuICAgICAgaWYgKGlzTnVsbGFibGUodGFyZ2V0RWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0YXJnZXRFbGVtZW50ID09PSBkcmFnRWxlbWVudCB8fCBlZGl0b3IuZG9tLmlzQ2hpbGRPZih0YXJnZXRFbGVtZW50LCBkcmFnRWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVkaXRvci5kb20uaXNFZGl0YWJsZSh0YXJnZXRFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUdob3N0ID0gKGVkaXRvciwgZWxtLCB3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgY29uc3QgY2xvbmVkRWxtID0gZWxtLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgIGRvbS5zZXRTdHlsZXMoY2xvbmVkRWxtLCB7XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHRcbiAgICAgIH0pO1xuICAgICAgZG9tLnNldEF0dHJpYihjbG9uZWRFbG0sICdkYXRhLW1jZS1zZWxlY3RlZCcsIG51bGwpO1xuICAgICAgY29uc3QgZ2hvc3RFbG0gPSBkb20uY3JlYXRlKCdkaXYnLCB7XG4gICAgICAgICdjbGFzcyc6ICdtY2UtZHJhZy1jb250YWluZXInLFxuICAgICAgICAnZGF0YS1tY2UtYm9ndXMnOiAnYWxsJyxcbiAgICAgICAgJ3Vuc2VsZWN0YWJsZSc6ICdvbicsXG4gICAgICAgICdjb250ZW50ZWRpdGFibGUnOiAnZmFsc2UnXG4gICAgICB9KTtcbiAgICAgIGRvbS5zZXRTdHlsZXMoZ2hvc3RFbG0sIHtcbiAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgIG9wYWNpdHk6IDAuNSxcbiAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICBib3JkZXI6IDAsXG4gICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgIG1hcmdpbjogMCxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgfSk7XG4gICAgICBkb20uc2V0U3R5bGVzKGNsb25lZEVsbSwge1xuICAgICAgICBtYXJnaW46IDAsXG4gICAgICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnXG4gICAgICB9KTtcbiAgICAgIGdob3N0RWxtLmFwcGVuZENoaWxkKGNsb25lZEVsbSk7XG4gICAgICByZXR1cm4gZ2hvc3RFbG07XG4gICAgfTtcbiAgICBjb25zdCBhcHBlbmRHaG9zdFRvQm9keSA9IChnaG9zdEVsbSwgYm9keUVsbSkgPT4ge1xuICAgICAgaWYgKGdob3N0RWxtLnBhcmVudE5vZGUgIT09IGJvZHlFbG0pIHtcbiAgICAgICAgYm9keUVsbS5hcHBlbmRDaGlsZChnaG9zdEVsbSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzY3JvbGxFZGl0b3IgPSAoZGlyZWN0aW9uLCBhbW91bnQpID0+IHdpbiA9PiAoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gZGlyZWN0aW9uID09PSAnbGVmdCcgPyB3aW4uc2Nyb2xsWCA6IHdpbi5zY3JvbGxZO1xuICAgICAgd2luLnNjcm9sbCh7XG4gICAgICAgIFtkaXJlY3Rpb25dOiBjdXJyZW50ICsgYW1vdW50LFxuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCdcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2Nyb2xsTGVmdCA9IHNjcm9sbEVkaXRvcignbGVmdCcsIC1zY3JvbGxQaXhlbHNQZXJJbnRlcnZhbCk7XG4gICAgY29uc3Qgc2Nyb2xsUmlnaHQgPSBzY3JvbGxFZGl0b3IoJ2xlZnQnLCBzY3JvbGxQaXhlbHNQZXJJbnRlcnZhbCk7XG4gICAgY29uc3Qgc2Nyb2xsVXAgPSBzY3JvbGxFZGl0b3IoJ3RvcCcsIC1zY3JvbGxQaXhlbHNQZXJJbnRlcnZhbCk7XG4gICAgY29uc3Qgc2Nyb2xsRG93biA9IHNjcm9sbEVkaXRvcigndG9wJywgc2Nyb2xsUGl4ZWxzUGVySW50ZXJ2YWwpO1xuICAgIGNvbnN0IG1vdmVHaG9zdCA9IChnaG9zdEVsbSwgcG9zaXRpb24sIHdpZHRoLCBoZWlnaHQsIG1heFgsIG1heFksIG1vdXNlWSwgbW91c2VYLCBjb250ZW50QXJlYUNvbnRhaW5lciwgd2luLCBzdGF0ZSwgbW91c2VFdmVudE9yaWdpbmF0ZWRGcm9tV2l0aGluVGhlRWRpdG9yKSA9PiB7XG4gICAgICBsZXQgb3ZlcmZsb3dYID0gMCwgb3ZlcmZsb3dZID0gMDtcbiAgICAgIGdob3N0RWxtLnN0eWxlLmxlZnQgPSBwb3NpdGlvbi5wYWdlWCArICdweCc7XG4gICAgICBnaG9zdEVsbS5zdHlsZS50b3AgPSBwb3NpdGlvbi5wYWdlWSArICdweCc7XG4gICAgICBpZiAocG9zaXRpb24ucGFnZVggKyB3aWR0aCA+IG1heFgpIHtcbiAgICAgICAgb3ZlcmZsb3dYID0gcG9zaXRpb24ucGFnZVggKyB3aWR0aCAtIG1heFg7XG4gICAgICB9XG4gICAgICBpZiAocG9zaXRpb24ucGFnZVkgKyBoZWlnaHQgPiBtYXhZKSB7XG4gICAgICAgIG92ZXJmbG93WSA9IHBvc2l0aW9uLnBhZ2VZICsgaGVpZ2h0IC0gbWF4WTtcbiAgICAgIH1cbiAgICAgIGdob3N0RWxtLnN0eWxlLndpZHRoID0gd2lkdGggLSBvdmVyZmxvd1ggKyAncHgnO1xuICAgICAgZ2hvc3RFbG0uc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0IC0gb3ZlcmZsb3dZICsgJ3B4JztcbiAgICAgIGNvbnN0IGNsaWVudEhlaWdodCA9IGNvbnRlbnRBcmVhQ29udGFpbmVyLmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IGNsaWVudFdpZHRoID0gY29udGVudEFyZWFDb250YWluZXIuY2xpZW50V2lkdGg7XG4gICAgICBjb25zdCBvdXRlck1vdXNlWSA9IG1vdXNlWSArIGNvbnRlbnRBcmVhQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICAgIGNvbnN0IG91dGVyTW91c2VYID0gbW91c2VYICsgY29udGVudEFyZWFDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgIHN0YXRlLm9uKHN0YXRlID0+IHtcbiAgICAgICAgc3RhdGUuaW50ZXJ2YWxJZC5jbGVhcigpO1xuICAgICAgICBpZiAoc3RhdGUuZHJhZ2dpbmcgJiYgbW91c2VFdmVudE9yaWdpbmF0ZWRGcm9tV2l0aGluVGhlRWRpdG9yKSB7XG4gICAgICAgICAgaWYgKG1vdXNlWSArIG1vdXNlUmFuZ2VUb1RyaWdnZXJTY3JvbGxJbnNpZGVFZGl0b3IgPj0gY2xpZW50SGVpZ2h0KSB7XG4gICAgICAgICAgICBzdGF0ZS5pbnRlcnZhbElkLnNldChzY3JvbGxEb3duKHdpbikpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobW91c2VZIC0gbW91c2VSYW5nZVRvVHJpZ2dlclNjcm9sbEluc2lkZUVkaXRvciA8PSAwKSB7XG4gICAgICAgICAgICBzdGF0ZS5pbnRlcnZhbElkLnNldChzY3JvbGxVcCh3aW4pKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG1vdXNlWCArIG1vdXNlUmFuZ2VUb1RyaWdnZXJTY3JvbGxJbnNpZGVFZGl0b3IgPj0gY2xpZW50V2lkdGgpIHtcbiAgICAgICAgICAgIHN0YXRlLmludGVydmFsSWQuc2V0KHNjcm9sbFJpZ2h0KHdpbikpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobW91c2VYIC0gbW91c2VSYW5nZVRvVHJpZ2dlclNjcm9sbEluc2lkZUVkaXRvciA8PSAwKSB7XG4gICAgICAgICAgICBzdGF0ZS5pbnRlcnZhbElkLnNldChzY3JvbGxMZWZ0KHdpbikpO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3V0ZXJNb3VzZVkgKyBtb3VzZVJhbmdlVG9UcmlnZ2VyU2Nyb2xsT3V0c2lkZUVkaXRvciA+PSB3aW5kb3cuaW5uZXJIZWlnaHQpIHtcbiAgICAgICAgICAgIHN0YXRlLmludGVydmFsSWQuc2V0KHNjcm9sbERvd24od2luZG93KSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChvdXRlck1vdXNlWSAtIG1vdXNlUmFuZ2VUb1RyaWdnZXJTY3JvbGxPdXRzaWRlRWRpdG9yIDw9IDApIHtcbiAgICAgICAgICAgIHN0YXRlLmludGVydmFsSWQuc2V0KHNjcm9sbFVwKHdpbmRvdykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3V0ZXJNb3VzZVggKyBtb3VzZVJhbmdlVG9UcmlnZ2VyU2Nyb2xsT3V0c2lkZUVkaXRvciA+PSB3aW5kb3cuaW5uZXJXaWR0aCkge1xuICAgICAgICAgICAgc3RhdGUuaW50ZXJ2YWxJZC5zZXQoc2Nyb2xsUmlnaHQod2luZG93KSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChvdXRlck1vdXNlWCAtIG1vdXNlUmFuZ2VUb1RyaWdnZXJTY3JvbGxPdXRzaWRlRWRpdG9yIDw9IDApIHtcbiAgICAgICAgICAgIHN0YXRlLmludGVydmFsSWQuc2V0KHNjcm9sbExlZnQod2luZG93KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZUVsZW1lbnQgPSBlbG0gPT4ge1xuICAgICAgaWYgKGVsbSAmJiBlbG0ucGFyZW50Tm9kZSkge1xuICAgICAgICBlbG0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbG0pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlRWxlbWVudFdpdGhQYWRkaW5nID0gKGRvbSwgZWxtKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnRCbG9jayA9IGRvbS5nZXRQYXJlbnQoZWxtLnBhcmVudE5vZGUsIGRvbS5pc0Jsb2NrKTtcbiAgICAgIHJlbW92ZUVsZW1lbnQoZWxtKTtcbiAgICAgIGlmIChwYXJlbnRCbG9jayAmJiBwYXJlbnRCbG9jayAhPT0gZG9tLmdldFJvb3QoKSAmJiBkb20uaXNFbXB0eShwYXJlbnRCbG9jaykpIHtcbiAgICAgICAgZmlsbFdpdGhQYWRkaW5nQnIoU3VnYXJFbGVtZW50LmZyb21Eb20ocGFyZW50QmxvY2spKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlzTGVmdE1vdXNlQnV0dG9uUHJlc3NlZCA9IGUgPT4gZS5idXR0b24gPT09IDA7XG4gICAgY29uc3QgYXBwbHlSZWxQb3MgPSAoc3RhdGUsIHBvc2l0aW9uKSA9PiAoe1xuICAgICAgcGFnZVg6IHBvc2l0aW9uLnBhZ2VYIC0gc3RhdGUucmVsWCxcbiAgICAgIHBhZ2VZOiBwb3NpdGlvbi5wYWdlWSArIDVcbiAgICB9KTtcbiAgICBjb25zdCBzdGFydCA9IChzdGF0ZSwgZWRpdG9yKSA9PiBlID0+IHtcbiAgICAgIGlmIChpc0xlZnRNb3VzZUJ1dHRvblByZXNzZWQoZSkpIHtcbiAgICAgICAgY29uc3QgY2VFbG0gPSBmaW5kJDIoZWRpdG9yLmRvbS5nZXRQYXJlbnRzKGUudGFyZ2V0KSwgaXNDb250ZW50RWRpdGFibGUpLmdldE9yKG51bGwpO1xuICAgICAgICBpZiAoaXNOb25OdWxsYWJsZShjZUVsbSkgJiYgaXNEcmFnZ2FibGUoZWRpdG9yLmRvbSwgZWRpdG9yLmdldEJvZHkoKSwgY2VFbG0pKSB7XG4gICAgICAgICAgY29uc3QgZWxtUG9zID0gZWRpdG9yLmRvbS5nZXRQb3MoY2VFbG0pO1xuICAgICAgICAgIGNvbnN0IGJvZHlFbG0gPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgICAgIGNvbnN0IGRvY0VsbSA9IGVkaXRvci5nZXREb2MoKS5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgICAgc3RhdGUuc2V0KHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IGNlRWxtLFxuICAgICAgICAgICAgZGF0YVRyYW5zZmVyOiBjcmVhdGVEYXRhVHJhbnNmZXIoKSxcbiAgICAgICAgICAgIGRyYWdnaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIHNjcmVlblg6IGUuc2NyZWVuWCxcbiAgICAgICAgICAgIHNjcmVlblk6IGUuc2NyZWVuWSxcbiAgICAgICAgICAgIG1heFg6IChlZGl0b3IuaW5saW5lID8gYm9keUVsbS5zY3JvbGxXaWR0aCA6IGRvY0VsbS5vZmZzZXRXaWR0aCkgLSAyLFxuICAgICAgICAgICAgbWF4WTogKGVkaXRvci5pbmxpbmUgPyBib2R5RWxtLnNjcm9sbEhlaWdodCA6IGRvY0VsbS5vZmZzZXRIZWlnaHQpIC0gMixcbiAgICAgICAgICAgIHJlbFg6IGUucGFnZVggLSBlbG1Qb3MueCxcbiAgICAgICAgICAgIHJlbFk6IGUucGFnZVkgLSBlbG1Qb3MueSxcbiAgICAgICAgICAgIHdpZHRoOiBjZUVsbS5vZmZzZXRXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogY2VFbG0ub2Zmc2V0SGVpZ2h0LFxuICAgICAgICAgICAgZ2hvc3Q6IGNyZWF0ZUdob3N0KGVkaXRvciwgY2VFbG0sIGNlRWxtLm9mZnNldFdpZHRoLCBjZUVsbS5vZmZzZXRIZWlnaHQpLFxuICAgICAgICAgICAgaW50ZXJ2YWxJZDogcmVwZWF0YWJsZShzY3JvbGxJbnRlcnZhbFZhbHVlKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBwbGFjZUNhcmV0QXQgPSAoZWRpdG9yLCBjbGllbnRYLCBjbGllbnRZKSA9PiB7XG4gICAgICBlZGl0b3IuX3NlbGVjdGlvbk92ZXJyaWRlcy5oaWRlRmFrZUNhcmV0KCk7XG4gICAgICBjbG9zZXN0RmFrZUNhcmV0Q2FuZGlkYXRlKGVkaXRvci5nZXRCb2R5KCksIGNsaWVudFgsIGNsaWVudFkpLmZvbGQoKCkgPT4gZWRpdG9yLnNlbGVjdGlvbi5wbGFjZUNhcmV0QXQoY2xpZW50WCwgY2xpZW50WSksIGNhcmV0SW5mbyA9PiB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gZWRpdG9yLl9zZWxlY3Rpb25PdmVycmlkZXMuc2hvd0NhcmV0KDEsIGNhcmV0SW5mby5ub2RlLCBjYXJldEluZm8ucG9zaXRpb24gPT09IEZha2VDYXJldFBvc2l0aW9uLkJlZm9yZSwgZmFsc2UpO1xuICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhyYW5nZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5wbGFjZUNhcmV0QXQoY2xpZW50WCwgY2xpZW50WSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZGlzcGF0Y2hEcmFnRXZlbnQgPSAoZWRpdG9yLCB0eXBlLCB0YXJnZXQsIGRhdGFUcmFuc2ZlciwgbW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKHR5cGUgPT09ICdkcmFnc3RhcnQnKSB7XG4gICAgICAgIHNldEh0bWxEYXRhKGRhdGFUcmFuc2ZlciwgZWRpdG9yLmRvbS5nZXRPdXRlckhUTUwodGFyZ2V0KSk7XG4gICAgICB9XG4gICAgICBjb25zdCBldmVudCA9IG1ha2VEcmFnRXZlbnQodHlwZSwgdGFyZ2V0LCBkYXRhVHJhbnNmZXIsIG1vdXNlRXZlbnQpO1xuICAgICAgY29uc3QgYXJncyA9IGVkaXRvci5kaXNwYXRjaCh0eXBlLCBldmVudCk7XG4gICAgICByZXR1cm4gYXJncztcbiAgICB9O1xuICAgIGNvbnN0IG1vdmUgPSAoc3RhdGUsIGVkaXRvcikgPT4ge1xuICAgICAgY29uc3QgdGhyb3R0bGVkUGxhY2VDYXJldEF0ID0gZmlyc3QkMSgoY2xpZW50WCwgY2xpZW50WSkgPT4gcGxhY2VDYXJldEF0KGVkaXRvciwgY2xpZW50WCwgY2xpZW50WSksIDApO1xuICAgICAgZWRpdG9yLm9uKCdyZW1vdmUnLCB0aHJvdHRsZWRQbGFjZUNhcmV0QXQuY2FuY2VsKTtcbiAgICAgIGNvbnN0IHN0YXRlXyA9IHN0YXRlO1xuICAgICAgcmV0dXJuIGUgPT4gc3RhdGUub24oc3RhdGUgPT4ge1xuICAgICAgICBjb25zdCBtb3ZlbWVudCA9IE1hdGgubWF4KE1hdGguYWJzKGUuc2NyZWVuWCAtIHN0YXRlLnNjcmVlblgpLCBNYXRoLmFicyhlLnNjcmVlblkgLSBzdGF0ZS5zY3JlZW5ZKSk7XG4gICAgICAgIGlmICghc3RhdGUuZHJhZ2dpbmcgJiYgbW92ZW1lbnQgPiAxMCkge1xuICAgICAgICAgIGNvbnN0IGFyZ3MgPSBkaXNwYXRjaERyYWdFdmVudChlZGl0b3IsICdkcmFnc3RhcnQnLCBzdGF0ZS5lbGVtZW50LCBzdGF0ZS5kYXRhVHJhbnNmZXIsIGUpO1xuICAgICAgICAgIGlmIChpc05vbk51bGxhYmxlKGFyZ3MuZGF0YVRyYW5zZmVyKSkge1xuICAgICAgICAgICAgc3RhdGUuZGF0YVRyYW5zZmVyID0gYXJncy5kYXRhVHJhbnNmZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhcmdzLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0YXRlLmRyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUuZHJhZ2dpbmcpIHtcbiAgICAgICAgICBjb25zdCBtb3VzZUV2ZW50T3JpZ2luYXRlZEZyb21XaXRoaW5UaGVFZGl0b3IgPSBlLmN1cnJlbnRUYXJnZXQgPT09IGVkaXRvci5nZXREb2MoKS5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0UG9zID0gYXBwbHlSZWxQb3Moc3RhdGUsIGNhbGMoZWRpdG9yLCBlKSk7XG4gICAgICAgICAgYXBwZW5kR2hvc3RUb0JvZHkoc3RhdGUuZ2hvc3QsIGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgICAgIG1vdmVHaG9zdChzdGF0ZS5naG9zdCwgdGFyZ2V0UG9zLCBzdGF0ZS53aWR0aCwgc3RhdGUuaGVpZ2h0LCBzdGF0ZS5tYXhYLCBzdGF0ZS5tYXhZLCBlLmNsaWVudFksIGUuY2xpZW50WCwgZWRpdG9yLmdldENvbnRlbnRBcmVhQ29udGFpbmVyKCksIGVkaXRvci5nZXRXaW4oKSwgc3RhdGVfLCBtb3VzZUV2ZW50T3JpZ2luYXRlZEZyb21XaXRoaW5UaGVFZGl0b3IpO1xuICAgICAgICAgIHRocm90dGxlZFBsYWNlQ2FyZXRBdC50aHJvdHRsZShlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0UmF3VGFyZ2V0ID0gc2VsZWN0aW9uID0+IHtcbiAgICAgIGNvbnN0IHNlbCA9IHNlbGVjdGlvbi5nZXRTZWwoKTtcbiAgICAgIGlmIChpc05vbk51bGxhYmxlKHNlbCkpIHtcbiAgICAgICAgY29uc3Qgcm5nID0gc2VsLmdldFJhbmdlQXQoMCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyID0gcm5nLnN0YXJ0Q29udGFpbmVyO1xuICAgICAgICByZXR1cm4gaXNUZXh0JGEoc3RhcnRDb250YWluZXIpID8gc3RhcnRDb250YWluZXIucGFyZW50Tm9kZSA6IHN0YXJ0Q29udGFpbmVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBkcm9wID0gKHN0YXRlLCBlZGl0b3IpID0+IGUgPT4ge1xuICAgICAgc3RhdGUub24oc3RhdGUgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHN0YXRlLmludGVydmFsSWQuY2xlYXIoKTtcbiAgICAgICAgaWYgKHN0YXRlLmRyYWdnaW5nKSB7XG4gICAgICAgICAgaWYgKGlzVmFsaWREcm9wVGFyZ2V0KGVkaXRvciwgZ2V0UmF3VGFyZ2V0KGVkaXRvci5zZWxlY3Rpb24pLCBzdGF0ZS5lbGVtZW50KSkge1xuICAgICAgICAgICAgY29uc3QgZHJvcFRhcmdldCA9IChfYSA9IGVkaXRvci5nZXREb2MoKS5lbGVtZW50RnJvbVBvaW50KGUuY2xpZW50WCwgZS5jbGllbnRZKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZWRpdG9yLmdldEJvZHkoKTtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBkaXNwYXRjaERyYWdFdmVudChlZGl0b3IsICdkcm9wJywgZHJvcFRhcmdldCwgc3RhdGUuZGF0YVRyYW5zZmVyLCBlKTtcbiAgICAgICAgICAgIGlmICghYXJncy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgICAgICBlZGl0b3IudW5kb01hbmFnZXIudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlbW92ZUVsZW1lbnRXaXRoUGFkZGluZyhlZGl0b3IuZG9tLCBzdGF0ZS5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBnZXRIdG1sRGF0YShzdGF0ZS5kYXRhVHJhbnNmZXIpLmVhY2goY29udGVudCA9PiBlZGl0b3IuaW5zZXJ0Q29udGVudChjb250ZW50KSk7XG4gICAgICAgICAgICAgICAgZWRpdG9yLl9zZWxlY3Rpb25PdmVycmlkZXMuaGlkZUZha2VDYXJldCgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZGlzcGF0Y2hEcmFnRXZlbnQoZWRpdG9yLCAnZHJhZ2VuZCcsIGVkaXRvci5nZXRCb2R5KCksIHN0YXRlLmRhdGFUcmFuc2ZlciwgZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmVtb3ZlRHJhZ1N0YXRlKHN0YXRlKTtcbiAgICB9O1xuICAgIGNvbnN0IHN0b3BEcmFnZ2luZyA9IChzdGF0ZSwgZWRpdG9yLCBlKSA9PiB7XG4gICAgICBzdGF0ZS5vbihzdGF0ZSA9PiB7XG4gICAgICAgIHN0YXRlLmludGVydmFsSWQuY2xlYXIoKTtcbiAgICAgICAgaWYgKHN0YXRlLmRyYWdnaW5nKSB7XG4gICAgICAgICAgZS5mb2xkKCgpID0+IGRpc3BhdGNoRHJhZ0V2ZW50KGVkaXRvciwgJ2RyYWdlbmQnLCBzdGF0ZS5lbGVtZW50LCBzdGF0ZS5kYXRhVHJhbnNmZXIpLCBtb3VzZUV2ZW50ID0+IGRpc3BhdGNoRHJhZ0V2ZW50KGVkaXRvciwgJ2RyYWdlbmQnLCBzdGF0ZS5lbGVtZW50LCBzdGF0ZS5kYXRhVHJhbnNmZXIsIG1vdXNlRXZlbnQpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZW1vdmVEcmFnU3RhdGUoc3RhdGUpO1xuICAgIH07XG4gICAgY29uc3Qgc3RvcCA9IChzdGF0ZSwgZWRpdG9yKSA9PiBlID0+IHN0b3BEcmFnZ2luZyhzdGF0ZSwgZWRpdG9yLCBPcHRpb25hbC5zb21lKGUpKTtcbiAgICBjb25zdCByZW1vdmVEcmFnU3RhdGUgPSBzdGF0ZSA9PiB7XG4gICAgICBzdGF0ZS5vbihzdGF0ZSA9PiB7XG4gICAgICAgIHN0YXRlLmludGVydmFsSWQuY2xlYXIoKTtcbiAgICAgICAgcmVtb3ZlRWxlbWVudChzdGF0ZS5naG9zdCk7XG4gICAgICB9KTtcbiAgICAgIHN0YXRlLmNsZWFyKCk7XG4gICAgfTtcbiAgICBjb25zdCBiaW5kRmFrZURyYWdFdmVudHMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3Qgc3RhdGUgPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBwYWdlRG9tID0gRE9NVXRpbHMuRE9NO1xuICAgICAgY29uc3Qgcm9vdERvY3VtZW50ID0gZG9jdW1lbnQ7XG4gICAgICBjb25zdCBkcmFnU3RhcnRIYW5kbGVyID0gc3RhcnQoc3RhdGUsIGVkaXRvcik7XG4gICAgICBjb25zdCBkcmFnSGFuZGxlciA9IG1vdmUoc3RhdGUsIGVkaXRvcik7XG4gICAgICBjb25zdCBkcm9wSGFuZGxlciA9IGRyb3Aoc3RhdGUsIGVkaXRvcik7XG4gICAgICBjb25zdCBkcmFnRW5kSGFuZGxlciA9IHN0b3Aoc3RhdGUsIGVkaXRvcik7XG4gICAgICBlZGl0b3Iub24oJ21vdXNlZG93bicsIGRyYWdTdGFydEhhbmRsZXIpO1xuICAgICAgZWRpdG9yLm9uKCdtb3VzZW1vdmUnLCBkcmFnSGFuZGxlcik7XG4gICAgICBlZGl0b3Iub24oJ21vdXNldXAnLCBkcm9wSGFuZGxlcik7XG4gICAgICBwYWdlRG9tLmJpbmQocm9vdERvY3VtZW50LCAnbW91c2Vtb3ZlJywgZHJhZ0hhbmRsZXIpO1xuICAgICAgcGFnZURvbS5iaW5kKHJvb3REb2N1bWVudCwgJ21vdXNldXAnLCBkcmFnRW5kSGFuZGxlcik7XG4gICAgICBlZGl0b3Iub24oJ3JlbW92ZScsICgpID0+IHtcbiAgICAgICAgcGFnZURvbS51bmJpbmQocm9vdERvY3VtZW50LCAnbW91c2Vtb3ZlJywgZHJhZ0hhbmRsZXIpO1xuICAgICAgICBwYWdlRG9tLnVuYmluZChyb290RG9jdW1lbnQsICdtb3VzZXVwJywgZHJhZ0VuZEhhbmRsZXIpO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ2tleWRvd24nLCBlID0+IHtcbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gVksuRVNDKSB7XG4gICAgICAgICAgc3RvcERyYWdnaW5nKHN0YXRlLCBlZGl0b3IsIE9wdGlvbmFsLm5vbmUoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYmxvY2tVbnN1cHBvcnRlZEZpbGVEcm9wID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHByZXZlbnRGaWxlRHJvcCA9IGUgPT4ge1xuICAgICAgICBpZiAoIWUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICBjb25zdCBkYXRhVHJhbnNmZXIgPSBlLmRhdGFUcmFuc2ZlcjtcbiAgICAgICAgICBpZiAoZGF0YVRyYW5zZmVyICYmIChjb250YWlucyQyKGRhdGFUcmFuc2Zlci50eXBlcywgJ0ZpbGVzJykgfHwgZGF0YVRyYW5zZmVyLmZpbGVzLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBpZiAoZS50eXBlID09PSAnZHJvcCcpIHtcbiAgICAgICAgICAgICAgZGlzcGxheUVycm9yKGVkaXRvciwgJ0Ryb3BwZWQgZmlsZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBwcmV2ZW50RmlsZURyb3BJZlVJRWxlbWVudCA9IGUgPT4ge1xuICAgICAgICBpZiAoaXNVSUVsZW1lbnQoZWRpdG9yLCBlLnRhcmdldCkpIHtcbiAgICAgICAgICBwcmV2ZW50RmlsZURyb3AoZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBzZXR1cCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgcGFnZURvbSA9IERPTVV0aWxzLkRPTTtcbiAgICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgICAgY29uc3QgZG9jID0gZG9jdW1lbnQ7XG4gICAgICAgIGNvbnN0IGVkaXRvclJvb3QgPSBlZGl0b3IuaW5saW5lID8gZWRpdG9yLmdldEJvZHkoKSA6IGVkaXRvci5nZXREb2MoKTtcbiAgICAgICAgY29uc3QgZXZlbnROYW1lcyA9IFtcbiAgICAgICAgICAnZHJvcCcsXG4gICAgICAgICAgJ2RyYWdvdmVyJ1xuICAgICAgICBdO1xuICAgICAgICBlYWNoJGUoZXZlbnROYW1lcywgbmFtZSA9PiB7XG4gICAgICAgICAgcGFnZURvbS5iaW5kKGRvYywgbmFtZSwgcHJldmVudEZpbGVEcm9wSWZVSUVsZW1lbnQpO1xuICAgICAgICAgIGRvbS5iaW5kKGVkaXRvclJvb3QsIG5hbWUsIHByZXZlbnRGaWxlRHJvcCk7XG4gICAgICAgIH0pO1xuICAgICAgICBlZGl0b3Iub24oJ3JlbW92ZScsICgpID0+IHtcbiAgICAgICAgICBlYWNoJGUoZXZlbnROYW1lcywgbmFtZSA9PiB7XG4gICAgICAgICAgICBwYWdlRG9tLnVuYmluZChkb2MsIG5hbWUsIHByZXZlbnRGaWxlRHJvcElmVUlFbGVtZW50KTtcbiAgICAgICAgICAgIGRvbS51bmJpbmQoZWRpdG9yUm9vdCwgbmFtZSwgcHJldmVudEZpbGVEcm9wKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLm9uKCdpbml0JywgKCkgPT4ge1xuICAgICAgICBEZWxheS5zZXRFZGl0b3JUaW1lb3V0KGVkaXRvciwgc2V0dXAsIDApO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBpbml0JDIgPSBlZGl0b3IgPT4ge1xuICAgICAgYmluZEZha2VEcmFnRXZlbnRzKGVkaXRvcik7XG4gICAgICBpZiAoc2hvdWxkQmxvY2tVbnN1cHBvcnRlZERyb3AoZWRpdG9yKSkge1xuICAgICAgICBibG9ja1Vuc3VwcG9ydGVkRmlsZURyb3AoZWRpdG9yKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0dXAkNCA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCByZW5kZXJGb2N1c0NhcmV0ID0gZmlyc3QkMSgoKSA9PiB7XG4gICAgICAgIGlmICghZWRpdG9yLnJlbW92ZWQgJiYgZWRpdG9yLmdldEJvZHkoKS5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICAgICAgaWYgKHJuZy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhcmV0UmFuZ2UgPSByZW5kZXJSYW5nZUNhcmV0KGVkaXRvciwgcm5nLCBmYWxzZSk7XG4gICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhjYXJldFJhbmdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIDApO1xuICAgICAgZWRpdG9yLm9uKCdmb2N1cycsICgpID0+IHtcbiAgICAgICAgcmVuZGVyRm9jdXNDYXJldC50aHJvdHRsZSgpO1xuICAgICAgfSk7XG4gICAgICBlZGl0b3Iub24oJ2JsdXInLCAoKSA9PiB7XG4gICAgICAgIHJlbmRlckZvY3VzQ2FyZXQuY2FuY2VsKCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0dXAkMyA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3Iub24oJ2luaXQnLCAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5vbignZm9jdXNpbicsIGUgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0O1xuICAgICAgICAgIGlmIChpc01lZGlhJDIodGFyZ2V0KSkge1xuICAgICAgICAgICAgY29uc3QgY2VSb290ID0gZ2V0Q29udGVudEVkaXRhYmxlUm9vdCQxKGVkaXRvci5nZXRCb2R5KCksIHRhcmdldCk7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gaXNDb250ZW50RWRpdGFibGVGYWxzZSRiKGNlUm9vdCkgPyBjZVJvb3QgOiB0YXJnZXQ7XG4gICAgICAgICAgICBpZiAoZWRpdG9yLnNlbGVjdGlvbi5nZXROb2RlKCkgIT09IG5vZGUpIHtcbiAgICAgICAgICAgICAgc2VsZWN0Tm9kZShlZGl0b3IsIG5vZGUpLmVhY2gocm5nID0+IGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJuZykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNDb250ZW50RWRpdGFibGVGYWxzZSA9IGlzQ29udGVudEVkaXRhYmxlRmFsc2UkYjtcbiAgICBjb25zdCBnZXRDb250ZW50RWRpdGFibGVSb290ID0gKGVkaXRvciwgbm9kZSkgPT4gZ2V0Q29udGVudEVkaXRhYmxlUm9vdCQxKGVkaXRvci5nZXRCb2R5KCksIG5vZGUpO1xuICAgIGNvbnN0IFNlbGVjdGlvbk92ZXJyaWRlcyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uLCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgY29uc3Qgcm9vdE5vZGUgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgY29uc3QgZmFrZUNhcmV0ID0gRmFrZUNhcmV0KGVkaXRvciwgcm9vdE5vZGUsIGRvbS5pc0Jsb2NrLCAoKSA9PiBoYXNGb2N1cyhlZGl0b3IpKTtcbiAgICAgIGNvbnN0IHJlYWxTZWxlY3Rpb25JZCA9ICdzZWwtJyArIGRvbS51bmlxdWVJZCgpO1xuICAgICAgY29uc3QgZWxlbWVudFNlbGVjdGlvbkF0dHIgPSAnZGF0YS1tY2Utc2VsZWN0ZWQnO1xuICAgICAgbGV0IHNlbGVjdGVkRWxlbWVudDtcbiAgICAgIGNvbnN0IGlzRmFrZVNlbGVjdGlvbkVsZW1lbnQgPSBub2RlID0+IGlzTm9uTnVsbGFibGUobm9kZSkgJiYgZG9tLmhhc0NsYXNzKG5vZGUsICdtY2Utb2Zmc2NyZWVuLXNlbGVjdGlvbicpO1xuICAgICAgY29uc3QgaXNGYWtlU2VsZWN0aW9uVGFyZ2V0RWxlbWVudCA9IG5vZGUgPT4gbm9kZSAhPT0gcm9vdE5vZGUgJiYgKGlzQ29udGVudEVkaXRhYmxlRmFsc2Uobm9kZSkgfHwgaXNNZWRpYSQyKG5vZGUpKSAmJiBkb20uaXNDaGlsZE9mKG5vZGUsIHJvb3ROb2RlKSAmJiBkb20uaXNFZGl0YWJsZShub2RlLnBhcmVudE5vZGUpO1xuICAgICAgY29uc3Qgc2V0UmFuZ2UgPSByYW5nZSA9PiB7XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgIHNlbGVjdGlvbi5zZXRSbmcocmFuZ2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2hvd0NhcmV0ID0gKGRpcmVjdGlvbiwgbm9kZSwgYmVmb3JlLCBzY3JvbGxJbnRvVmlldyA9IHRydWUpID0+IHtcbiAgICAgICAgY29uc3QgZSA9IGVkaXRvci5kaXNwYXRjaCgnU2hvd0NhcmV0Jywge1xuICAgICAgICAgIHRhcmdldDogbm9kZSxcbiAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICAgYmVmb3JlXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY3JvbGxJbnRvVmlldykge1xuICAgICAgICAgIHNlbGVjdGlvbi5zY3JvbGxJbnRvVmlldyhub2RlLCBkaXJlY3Rpb24gPT09IC0xKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFrZUNhcmV0LnNob3coYmVmb3JlLCBub2RlKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzaG93QmxvY2tDYXJldENvbnRhaW5lciA9IGJsb2NrQ2FyZXRDb250YWluZXIgPT4ge1xuICAgICAgICBpZiAoYmxvY2tDYXJldENvbnRhaW5lci5oYXNBdHRyaWJ1dGUoJ2RhdGEtbWNlLWNhcmV0JykpIHtcbiAgICAgICAgICBzaG93Q2FyZXRDb250YWluZXJCbG9jayhibG9ja0NhcmV0Q29udGFpbmVyKTtcbiAgICAgICAgICBzZWxlY3Rpb24uc2Nyb2xsSW50b1ZpZXcoYmxvY2tDYXJldENvbnRhaW5lcik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCByZWdpc3RlckV2ZW50cyA9ICgpID0+IHtcbiAgICAgICAgZWRpdG9yLm9uKCdjbGljaycsIGUgPT4ge1xuICAgICAgICAgIGlmICghZG9tLmlzRWRpdGFibGUoZS50YXJnZXQpKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBlZGl0b3Iub24oJ2JsdXIgTmV3QmxvY2snLCByZW1vdmVFbGVtZW50U2VsZWN0aW9uKTtcbiAgICAgICAgZWRpdG9yLm9uKCdSZXNpemVXaW5kb3cgRnVsbHNjcmVlblN0YXRlQ2hhbmdlZCcsIGZha2VDYXJldC5yZXBvc2l0aW9uKTtcbiAgICAgICAgZWRpdG9yLm9uKCd0YXAnLCBlID0+IHtcbiAgICAgICAgICBjb25zdCB0YXJnZXRFbG0gPSBlLnRhcmdldDtcbiAgICAgICAgICBjb25zdCBjb250ZW50RWRpdGFibGVSb290ID0gZ2V0Q29udGVudEVkaXRhYmxlUm9vdChlZGl0b3IsIHRhcmdldEVsbSk7XG4gICAgICAgICAgaWYgKGlzQ29udGVudEVkaXRhYmxlRmFsc2UoY29udGVudEVkaXRhYmxlUm9vdCkpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHNlbGVjdE5vZGUoZWRpdG9yLCBjb250ZW50RWRpdGFibGVSb290KS5lYWNoKHNldEVsZW1lbnRTZWxlY3Rpb24pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNGYWtlU2VsZWN0aW9uVGFyZ2V0RWxlbWVudCh0YXJnZXRFbG0pKSB7XG4gICAgICAgICAgICBzZWxlY3ROb2RlKGVkaXRvciwgdGFyZ2V0RWxtKS5lYWNoKHNldEVsZW1lbnRTZWxlY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgIGVkaXRvci5vbignbW91c2Vkb3duJywgZSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0RWxtID0gZS50YXJnZXQ7XG4gICAgICAgICAgaWYgKHRhcmdldEVsbSAhPT0gcm9vdE5vZGUgJiYgdGFyZ2V0RWxtLm5vZGVOYW1lICE9PSAnSFRNTCcgJiYgIWRvbS5pc0NoaWxkT2YodGFyZ2V0RWxtLCByb290Tm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFpc1hZSW5Db250ZW50QXJlYShlZGl0b3IsIGUuY2xpZW50WCwgZS5jbGllbnRZKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZW1vdmVFbGVtZW50U2VsZWN0aW9uKCk7XG4gICAgICAgICAgaGlkZUZha2VDYXJldCgpO1xuICAgICAgICAgIGNvbnN0IGNsb3Nlc3RDb250ZW50RWRpdGFibGUgPSBnZXRDb250ZW50RWRpdGFibGVSb290KGVkaXRvciwgdGFyZ2V0RWxtKTtcbiAgICAgICAgICBpZiAoaXNDb250ZW50RWRpdGFibGVGYWxzZShjbG9zZXN0Q29udGVudEVkaXRhYmxlKSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgc2VsZWN0Tm9kZShlZGl0b3IsIGNsb3Nlc3RDb250ZW50RWRpdGFibGUpLmVhY2goc2V0RWxlbWVudFNlbGVjdGlvbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsb3Nlc3RGYWtlQ2FyZXRDYW5kaWRhdGUocm9vdE5vZGUsIGUuY2xpZW50WCwgZS5jbGllbnRZKS5lYWNoKGNhcmV0SW5mbyA9PiB7XG4gICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBzaG93Q2FyZXQoMSwgY2FyZXRJbmZvLm5vZGUsIGNhcmV0SW5mby5wb3NpdGlvbiA9PT0gRmFrZUNhcmV0UG9zaXRpb24uQmVmb3JlLCBmYWxzZSk7XG4gICAgICAgICAgICAgIHNldFJhbmdlKHJhbmdlKTtcbiAgICAgICAgICAgICAgaWYgKGlzRWxlbWVudCQ2KGNsb3Nlc3RDb250ZW50RWRpdGFibGUpKSB7XG4gICAgICAgICAgICAgICAgY2xvc2VzdENvbnRlbnRFZGl0YWJsZS5mb2N1cygpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVkaXRvci5nZXRCb2R5KCkuZm9jdXMoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLm9uKCdrZXlwcmVzcycsIGUgPT4ge1xuICAgICAgICAgIGlmIChWSy5tb2RpZmllclByZXNzZWQoZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzQ29udGVudEVkaXRhYmxlRmFsc2Uoc2VsZWN0aW9uLmdldE5vZGUoKSkpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBlZGl0b3Iub24oJ0dldFNlbGVjdGlvblJhbmdlJywgZSA9PiB7XG4gICAgICAgICAgbGV0IHJuZyA9IGUucmFuZ2U7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKCFzZWxlY3RlZEVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBybmcgPSBybmcuY2xvbmVSYW5nZSgpO1xuICAgICAgICAgICAgcm5nLnNlbGVjdE5vZGUoc2VsZWN0ZWRFbGVtZW50KTtcbiAgICAgICAgICAgIGUucmFuZ2UgPSBybmc7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLm9uKCdTZXRTZWxlY3Rpb25SYW5nZScsIGUgPT4ge1xuICAgICAgICAgIGUucmFuZ2UgPSBub3JtYWxpemVWb2lkRWxlbWVudFNlbGVjdGlvbihlLnJhbmdlKTtcbiAgICAgICAgICBjb25zdCBybmcgPSBzZXRFbGVtZW50U2VsZWN0aW9uKGUucmFuZ2UsIGUuZm9yd2FyZCk7XG4gICAgICAgICAgaWYgKHJuZykge1xuICAgICAgICAgICAgZS5yYW5nZSA9IHJuZztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBpc1Bhc3RlQmluID0gbm9kZSA9PiBpc0VsZW1lbnQkNihub2RlKSAmJiBub2RlLmlkID09PSAnbWNlcGFzdGViaW4nO1xuICAgICAgICBlZGl0b3Iub24oJ0FmdGVyU2V0U2VsZWN0aW9uUmFuZ2UnLCBlID0+IHtcbiAgICAgICAgICBjb25zdCBybmcgPSBlLnJhbmdlO1xuICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHJuZy5zdGFydENvbnRhaW5lci5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgIGlmICghaXNSYW5nZUluQ2FyZXRDb250YWluZXIocm5nKSAmJiAhaXNQYXN0ZUJpbihwYXJlbnQpKSB7XG4gICAgICAgICAgICBoaWRlRmFrZUNhcmV0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaXNGYWtlU2VsZWN0aW9uRWxlbWVudChwYXJlbnQpKSB7XG4gICAgICAgICAgICByZW1vdmVFbGVtZW50U2VsZWN0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaW5pdCQyKGVkaXRvcik7XG4gICAgICAgIHNldHVwJDQoZWRpdG9yKTtcbiAgICAgICAgc2V0dXAkMyhlZGl0b3IpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzV2l0aGluQ2FyZXRDb250YWluZXIgPSBub2RlID0+IGlzQ2FyZXRDb250YWluZXIkMihub2RlKSB8fCBzdGFydHNXaXRoQ2FyZXRDb250YWluZXIkMShub2RlKSB8fCBlbmRzV2l0aENhcmV0Q29udGFpbmVyJDEobm9kZSk7XG4gICAgICBjb25zdCBpc1JhbmdlSW5DYXJldENvbnRhaW5lciA9IHJuZyA9PiBpc1dpdGhpbkNhcmV0Q29udGFpbmVyKHJuZy5zdGFydENvbnRhaW5lcikgfHwgaXNXaXRoaW5DYXJldENvbnRhaW5lcihybmcuZW5kQ29udGFpbmVyKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZVZvaWRFbGVtZW50U2VsZWN0aW9uID0gcm5nID0+IHtcbiAgICAgICAgY29uc3Qgdm9pZEVsZW1lbnRzID0gZWRpdG9yLnNjaGVtYS5nZXRWb2lkRWxlbWVudHMoKTtcbiAgICAgICAgY29uc3QgbmV3Um5nID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IHJuZy5zdGFydENvbnRhaW5lcjtcbiAgICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSBybmcuc3RhcnRPZmZzZXQ7XG4gICAgICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IHJuZy5lbmRDb250YWluZXI7XG4gICAgICAgIGNvbnN0IGVuZE9mZnNldCA9IHJuZy5lbmRPZmZzZXQ7XG4gICAgICAgIGlmIChoYXMkMih2b2lkRWxlbWVudHMsIHN0YXJ0Q29udGFpbmVyLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICBuZXdSbmcuc2V0U3RhcnRCZWZvcmUoc3RhcnRDb250YWluZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdSbmcuc2V0U3RhcnRBZnRlcihzdGFydENvbnRhaW5lcik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1JuZy5zZXRTdGFydChzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXMkMih2b2lkRWxlbWVudHMsIGVuZENvbnRhaW5lci5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgIGlmIChlbmRPZmZzZXQgPT09IDApIHtcbiAgICAgICAgICAgIG5ld1JuZy5zZXRFbmRCZWZvcmUoZW5kQ29udGFpbmVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3Um5nLnNldEVuZEFmdGVyKGVuZENvbnRhaW5lcik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1JuZy5zZXRFbmQoZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdSbmc7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0dXBPZmZzY3JlZW5TZWxlY3Rpb24gPSAobm9kZSwgdGFyZ2V0Q2xvbmUpID0+IHtcbiAgICAgICAgY29uc3QgYm9keSA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgICBjb25zdCBkb2MgPSBlZGl0b3IuZ2V0RG9jKCk7XG4gICAgICAgIGNvbnN0IHJlYWxTZWxlY3Rpb25Db250YWluZXIgPSBkZXNjZW5kYW50KGJvZHksICcjJyArIHJlYWxTZWxlY3Rpb25JZCkuZ2V0T3JUaHVuaygoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3Q29udGFpbmVyID0gU3VnYXJFbGVtZW50LmZyb21IdG1sKCc8ZGl2IGRhdGEtbWNlLWJvZ3VzPVwiYWxsXCIgY2xhc3M9XCJtY2Utb2Zmc2NyZWVuLXNlbGVjdGlvblwiPjwvZGl2PicsIGRvYyk7XG4gICAgICAgICAgc2V0JDMobmV3Q29udGFpbmVyLCAnaWQnLCByZWFsU2VsZWN0aW9uSWQpO1xuICAgICAgICAgIGFwcGVuZCQxKGJvZHksIG5ld0NvbnRhaW5lcik7XG4gICAgICAgICAgcmV0dXJuIG5ld0NvbnRhaW5lcjtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG5ld1JhbmdlID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgICBlbXB0eShyZWFsU2VsZWN0aW9uQ29udGFpbmVyKTtcbiAgICAgICAgYXBwZW5kKHJlYWxTZWxlY3Rpb25Db250YWluZXIsIFtcbiAgICAgICAgICBTdWdhckVsZW1lbnQuZnJvbVRleHQobmJzcCwgZG9jKSxcbiAgICAgICAgICBTdWdhckVsZW1lbnQuZnJvbURvbSh0YXJnZXRDbG9uZSksXG4gICAgICAgICAgU3VnYXJFbGVtZW50LmZyb21UZXh0KG5ic3AsIGRvYylcbiAgICAgICAgXSk7XG4gICAgICAgIG5ld1JhbmdlLnNldFN0YXJ0KHJlYWxTZWxlY3Rpb25Db250YWluZXIuZG9tLmZpcnN0Q2hpbGQsIDEpO1xuICAgICAgICBuZXdSYW5nZS5zZXRFbmQocmVhbFNlbGVjdGlvbkNvbnRhaW5lci5kb20ubGFzdENoaWxkLCAwKTtcbiAgICAgICAgc2V0QWxsKHJlYWxTZWxlY3Rpb25Db250YWluZXIsIHsgdG9wOiBkb20uZ2V0UG9zKG5vZGUsIGVkaXRvci5nZXRCb2R5KCkpLnkgKyAncHgnIH0pO1xuICAgICAgICBmb2N1cyQxKHJlYWxTZWxlY3Rpb25Db250YWluZXIpO1xuICAgICAgICBjb25zdCBzZWwgPSBzZWxlY3Rpb24uZ2V0U2VsKCk7XG4gICAgICAgIGlmIChzZWwpIHtcbiAgICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgICAgc2VsLmFkZFJhbmdlKG5ld1JhbmdlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3UmFuZ2U7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VsZWN0RWxlbWVudCA9IGVsbSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldENsb25lID0gZWxtLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgY29uc3QgZSA9IGVkaXRvci5kaXNwYXRjaCgnT2JqZWN0U2VsZWN0ZWQnLCB7XG4gICAgICAgICAgdGFyZ2V0OiBlbG0sXG4gICAgICAgICAgdGFyZ2V0Q2xvbmVcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmFuZ2UgPSBzZXR1cE9mZnNjcmVlblNlbGVjdGlvbihlbG0sIGUudGFyZ2V0Q2xvbmUpO1xuICAgICAgICBjb25zdCBub2RlRWxtID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWxtKTtcbiAgICAgICAgZWFjaCRlKGRlc2NlbmRhbnRzKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpLCBgKlskeyBlbGVtZW50U2VsZWN0aW9uQXR0ciB9XWApLCBlbG0gPT4ge1xuICAgICAgICAgIGlmICghZXEobm9kZUVsbSwgZWxtKSkge1xuICAgICAgICAgICAgcmVtb3ZlJGEoZWxtLCBlbGVtZW50U2VsZWN0aW9uQXR0cik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFkb20uZ2V0QXR0cmliKGVsbSwgZWxlbWVudFNlbGVjdGlvbkF0dHIpKSB7XG4gICAgICAgICAgZWxtLnNldEF0dHJpYnV0ZShlbGVtZW50U2VsZWN0aW9uQXR0ciwgJzEnKTtcbiAgICAgICAgfVxuICAgICAgICBzZWxlY3RlZEVsZW1lbnQgPSBlbG07XG4gICAgICAgIGhpZGVGYWtlQ2FyZXQoKTtcbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldEVsZW1lbnRTZWxlY3Rpb24gPSAocmFuZ2UsIGZvcndhcmQpID0+IHtcbiAgICAgICAgaWYgKCFyYW5nZSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICAgICAgICBpZiAoIWlzUmFuZ2VJbkNhcmV0Q29udGFpbmVyKHJhbmdlKSkge1xuICAgICAgICAgICAgY29uc3QgZGlyID0gZm9yd2FyZCA/IDEgOiAtMTtcbiAgICAgICAgICAgIGNvbnN0IGNhcmV0UG9zaXRpb24gPSBnZXROb3JtYWxpemVkUmFuZ2VFbmRQb2ludChkaXIsIHJvb3ROb2RlLCByYW5nZSk7XG4gICAgICAgICAgICBjb25zdCBiZWZvcmVOb2RlID0gY2FyZXRQb3NpdGlvbi5nZXROb2RlKCFmb3J3YXJkKTtcbiAgICAgICAgICAgIGlmIChpc05vbk51bGxhYmxlKGJlZm9yZU5vZGUpKSB7XG4gICAgICAgICAgICAgIGlmIChpc0Zha2VDYXJldFRhcmdldChiZWZvcmVOb2RlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaG93Q2FyZXQoZGlyLCBiZWZvcmVOb2RlLCBmb3J3YXJkID8gIWNhcmV0UG9zaXRpb24uaXNBdEVuZCgpIDogZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoaXNDYXJldENvbnRhaW5lcklubGluZShiZWZvcmVOb2RlKSAmJiBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlJGIoYmVmb3JlTm9kZS5uZXh0U2libGluZykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBybmcgPSBkb20uY3JlYXRlUm5nKCk7XG4gICAgICAgICAgICAgICAgcm5nLnNldFN0YXJ0KGJlZm9yZU5vZGUsIDApO1xuICAgICAgICAgICAgICAgIHJuZy5zZXRFbmQoYmVmb3JlTm9kZSwgMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJuZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWZ0ZXJOb2RlID0gY2FyZXRQb3NpdGlvbi5nZXROb2RlKGZvcndhcmQpO1xuICAgICAgICAgICAgaWYgKGlzTm9uTnVsbGFibGUoYWZ0ZXJOb2RlKSkge1xuICAgICAgICAgICAgICBpZiAoaXNGYWtlQ2FyZXRUYXJnZXQoYWZ0ZXJOb2RlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaG93Q2FyZXQoZGlyLCBhZnRlck5vZGUsIGZvcndhcmQgPyBmYWxzZSA6ICFjYXJldFBvc2l0aW9uLmlzQXRFbmQoKSwgZmFsc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChpc0NhcmV0Q29udGFpbmVySW5saW5lKGFmdGVyTm9kZSkgJiYgaXNDb250ZW50RWRpdGFibGVGYWxzZSRiKGFmdGVyTm9kZS5wcmV2aW91c1NpYmxpbmcpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm5nID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgICAgICAgICAgIHJuZy5zZXRTdGFydChhZnRlck5vZGUsIDEpO1xuICAgICAgICAgICAgICAgIHJuZy5zZXRFbmQoYWZ0ZXJOb2RlLCAxKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm5nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdGFydENvbnRhaW5lciA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyO1xuICAgICAgICBsZXQgc3RhcnRPZmZzZXQgPSByYW5nZS5zdGFydE9mZnNldDtcbiAgICAgICAgY29uc3QgZW5kT2Zmc2V0ID0gcmFuZ2UuZW5kT2Zmc2V0O1xuICAgICAgICBpZiAoaXNUZXh0JGEoc3RhcnRDb250YWluZXIpICYmIHN0YXJ0T2Zmc2V0ID09PSAwICYmIGlzQ29udGVudEVkaXRhYmxlRmFsc2Uoc3RhcnRDb250YWluZXIucGFyZW50Tm9kZSkpIHtcbiAgICAgICAgICBzdGFydENvbnRhaW5lciA9IHN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICAgICAgc3RhcnRPZmZzZXQgPSBkb20ubm9kZUluZGV4KHN0YXJ0Q29udGFpbmVyKTtcbiAgICAgICAgICBzdGFydENvbnRhaW5lciA9IHN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VsZW1lbnQkNihzdGFydENvbnRhaW5lcikpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5kT2Zmc2V0ID09PSBzdGFydE9mZnNldCArIDEgJiYgc3RhcnRDb250YWluZXIgPT09IHJhbmdlLmVuZENvbnRhaW5lcikge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBzdGFydENvbnRhaW5lci5jaGlsZE5vZGVzW3N0YXJ0T2Zmc2V0XTtcbiAgICAgICAgICBpZiAoaXNGYWtlU2VsZWN0aW9uVGFyZ2V0RWxlbWVudChub2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdEVsZW1lbnQobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlbW92ZUVsZW1lbnRTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnQpIHtcbiAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGVsZW1lbnRTZWxlY3Rpb25BdHRyKTtcbiAgICAgICAgfVxuICAgICAgICBkZXNjZW5kYW50KFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpLCAnIycgKyByZWFsU2VsZWN0aW9uSWQpLmVhY2gocmVtb3ZlJDUpO1xuICAgICAgICBzZWxlY3RlZEVsZW1lbnQgPSBudWxsO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICAgIGZha2VDYXJldC5kZXN0cm95KCk7XG4gICAgICAgIHNlbGVjdGVkRWxlbWVudCA9IG51bGw7XG4gICAgICB9O1xuICAgICAgY29uc3QgaGlkZUZha2VDYXJldCA9ICgpID0+IHtcbiAgICAgICAgZmFrZUNhcmV0LmhpZGUoKTtcbiAgICAgIH07XG4gICAgICBpZiAoIWlzUnRjKGVkaXRvcikpIHtcbiAgICAgICAgcmVnaXN0ZXJFdmVudHMoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNob3dDYXJldCxcbiAgICAgICAgc2hvd0Jsb2NrQ2FyZXRDb250YWluZXIsXG4gICAgICAgIGhpZGVGYWtlQ2FyZXQsXG4gICAgICAgIGRlc3Ryb3lcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGdldE5vcm1hbGl6ZWRUZXh0T2Zmc2V0ID0gKGNvbnRhaW5lciwgb2Zmc2V0KSA9PiB7XG4gICAgICBsZXQgbm9ybWFsaXplZE9mZnNldCA9IG9mZnNldDtcbiAgICAgIGZvciAobGV0IG5vZGUgPSBjb250YWluZXIucHJldmlvdXNTaWJsaW5nOyBpc1RleHQkYShub2RlKTsgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICAgIG5vcm1hbGl6ZWRPZmZzZXQgKz0gbm9kZS5kYXRhLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBub3JtYWxpemVkT2Zmc2V0O1xuICAgIH07XG4gICAgY29uc3QgZ2VuZXJhdGVQYXRoID0gKGRvbSwgcm9vdCwgbm9kZSwgb2Zmc2V0LCBub3JtYWxpemVkKSA9PiB7XG4gICAgICBpZiAoaXNUZXh0JGEobm9kZSkgJiYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gbm9kZS5kYXRhLmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgY29uc3QgcCA9IG5vcm1hbGl6ZWQgJiYgaXNUZXh0JGEobm9kZSkgPyBbZ2V0Tm9ybWFsaXplZFRleHRPZmZzZXQobm9kZSwgb2Zmc2V0KV0gOiBbb2Zmc2V0XTtcbiAgICAgIGxldCBjdXJyZW50ID0gbm9kZTtcbiAgICAgIHdoaWxlIChjdXJyZW50ICE9PSByb290ICYmIGN1cnJlbnQucGFyZW50Tm9kZSkge1xuICAgICAgICBwLnB1c2goZG9tLm5vZGVJbmRleChjdXJyZW50LCBub3JtYWxpemVkKSk7XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudE5vZGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gY3VycmVudCA9PT0gcm9vdCA/IHAucmV2ZXJzZSgpIDogW107XG4gICAgfTtcbiAgICBjb25zdCBnZW5lcmF0ZVBhdGhSYW5nZSA9IChkb20sIHJvb3QsIHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5vZGUsIGVuZE9mZnNldCwgbm9ybWFsaXplZCA9IGZhbHNlKSA9PiB7XG4gICAgICBjb25zdCBzdGFydCA9IGdlbmVyYXRlUGF0aChkb20sIHJvb3QsIHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIG5vcm1hbGl6ZWQpO1xuICAgICAgY29uc3QgZW5kID0gZ2VuZXJhdGVQYXRoKGRvbSwgcm9vdCwgZW5kTm9kZSwgZW5kT2Zmc2V0LCBub3JtYWxpemVkKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBlbmRcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCByZXNvbHZlUGF0aCA9IChyb290LCBwYXRoKSA9PiB7XG4gICAgICBjb25zdCBub2RlUGF0aCA9IHBhdGguc2xpY2UoKTtcbiAgICAgIGNvbnN0IG9mZnNldCA9IG5vZGVQYXRoLnBvcCgpO1xuICAgICAgaWYgKCFpc051bWJlcihvZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXNvbHZlZE5vZGUgPSBmb2xkbChub2RlUGF0aCwgKG9wdE5vZGUsIGluZGV4KSA9PiBvcHROb2RlLmJpbmQobm9kZSA9PiBPcHRpb25hbC5mcm9tKG5vZGUuY2hpbGROb2Rlc1tpbmRleF0pKSwgT3B0aW9uYWwuc29tZShyb290KSk7XG4gICAgICAgIHJldHVybiByZXNvbHZlZE5vZGUuYmluZChub2RlID0+IHtcbiAgICAgICAgICBpZiAoaXNUZXh0JGEobm9kZSkgJiYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gbm9kZS5kYXRhLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgb2Zmc2V0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVzb2x2ZVBhdGhSYW5nZSA9IChyb290LCByYW5nZSkgPT4gcmVzb2x2ZVBhdGgocm9vdCwgcmFuZ2Uuc3RhcnQpLmJpbmQoKHtcbiAgICAgIG5vZGU6IHN0YXJ0Tm9kZSxcbiAgICAgIG9mZnNldDogc3RhcnRPZmZzZXRcbiAgICB9KSA9PiByZXNvbHZlUGF0aChyb290LCByYW5nZS5lbmQpLm1hcCgoe1xuICAgICAgbm9kZTogZW5kTm9kZSxcbiAgICAgIG9mZnNldDogZW5kT2Zmc2V0XG4gICAgfSkgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHJuZy5zZXRTdGFydChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgICAgIHJuZy5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgICAgIHJldHVybiBybmc7XG4gICAgfSkpO1xuICAgIGNvbnN0IGdlbmVyYXRlUGF0aFJhbmdlRnJvbVJhbmdlID0gKGRvbSwgcm9vdCwgcmFuZ2UsIG5vcm1hbGl6ZWQgPSBmYWxzZSkgPT4gZ2VuZXJhdGVQYXRoUmFuZ2UoZG9tLCByb290LCByYW5nZS5zdGFydENvbnRhaW5lciwgcmFuZ2Uuc3RhcnRPZmZzZXQsIHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0LCBub3JtYWxpemVkKTtcblxuICAgIGNvbnN0IGNsZWFuRW1wdHlOb2RlcyA9IChkb20sIG5vZGUsIGlzUm9vdCkgPT4ge1xuICAgICAgaWYgKG5vZGUgJiYgZG9tLmlzRW1wdHkobm9kZSkgJiYgIWlzUm9vdChub2RlKSkge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICAgIGRvbS5yZW1vdmUobm9kZSwgaXNUZXh0JGEobm9kZS5maXJzdENoaWxkKSAmJiBpc1doaXRlc3BhY2VUZXh0KG5vZGUuZmlyc3RDaGlsZC5kYXRhKSk7XG4gICAgICAgIGNsZWFuRW1wdHlOb2Rlcyhkb20sIHBhcmVudCwgaXNSb290KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGRlbGV0ZVJuZyA9IChkb20sIHJuZywgaXNSb290LCBjbGVhbiA9IHRydWUpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0UGFyZW50ID0gcm5nLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICBjb25zdCBlbmRQYXJlbnQgPSBybmcuZW5kQ29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICBybmcuZGVsZXRlQ29udGVudHMoKTtcbiAgICAgIGlmIChjbGVhbiAmJiAhaXNSb290KHJuZy5zdGFydENvbnRhaW5lcikpIHtcbiAgICAgICAgaWYgKGlzVGV4dCRhKHJuZy5zdGFydENvbnRhaW5lcikgJiYgcm5nLnN0YXJ0Q29udGFpbmVyLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgZG9tLnJlbW92ZShybmcuc3RhcnRDb250YWluZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1RleHQkYShybmcuZW5kQ29udGFpbmVyKSAmJiBybmcuZW5kQ29udGFpbmVyLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgZG9tLnJlbW92ZShybmcuZW5kQ29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgICAgICBjbGVhbkVtcHR5Tm9kZXMoZG9tLCBzdGFydFBhcmVudCwgaXNSb290KTtcbiAgICAgICAgaWYgKHN0YXJ0UGFyZW50ICE9PSBlbmRQYXJlbnQpIHtcbiAgICAgICAgICBjbGVhbkVtcHR5Tm9kZXMoZG9tLCBlbmRQYXJlbnQsIGlzUm9vdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdldFBhcmVudEJsb2NrID0gKGVkaXRvciwgcm5nKSA9PiBPcHRpb25hbC5mcm9tKGVkaXRvci5kb20uZ2V0UGFyZW50KHJuZy5zdGFydENvbnRhaW5lciwgZWRpdG9yLmRvbS5pc0Jsb2NrKSk7XG4gICAgY29uc3QgcmVzb2x2ZUZyb21EeW5hbWljUGF0dGVybnMgPSAocGF0dGVyblNldCwgYmxvY2ssIGJlZm9yZVRleHQpID0+IHtcbiAgICAgIGNvbnN0IGR5bmFtaWNQYXR0ZXJucyA9IHBhdHRlcm5TZXQuZHluYW1pY1BhdHRlcm5zTG9va3VwKHtcbiAgICAgICAgdGV4dDogYmVmb3JlVGV4dCxcbiAgICAgICAgYmxvY2tcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucGF0dGVyblNldCxcbiAgICAgICAgYmxvY2tQYXR0ZXJuczogZ2V0QmxvY2tQYXR0ZXJucyhkeW5hbWljUGF0dGVybnMpLmNvbmNhdChwYXR0ZXJuU2V0LmJsb2NrUGF0dGVybnMpLFxuICAgICAgICBpbmxpbmVQYXR0ZXJuczogZ2V0SW5saW5lUGF0dGVybnMoZHluYW1pY1BhdHRlcm5zKS5jb25jYXQocGF0dGVyblNldC5pbmxpbmVQYXR0ZXJucylcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBnZXRCZWZvcmVUZXh0ID0gKGRvbSwgYmxvY2ssIG5vZGUsIG9mZnNldCkgPT4ge1xuICAgICAgY29uc3Qgcm5nID0gZG9tLmNyZWF0ZVJuZygpO1xuICAgICAgcm5nLnNldFN0YXJ0KGJsb2NrLCAwKTtcbiAgICAgIHJuZy5zZXRFbmQobm9kZSwgb2Zmc2V0KTtcbiAgICAgIHJldHVybiBybmcudG9TdHJpbmcoKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3RhcnRzV2l0aFNpbmdsZVNwYWNlID0gcyA9PiAvXlxcc1teXFxzXS8udGVzdChzKTtcbiAgICBjb25zdCBzdHJpcFBhdHRlcm4gPSAoZG9tLCBibG9jaywgcGF0dGVybikgPT4ge1xuICAgICAgY29uc3QgZmlyc3RUZXh0Tm9kZSA9IHRleHRBZnRlcihibG9jaywgMCwgYmxvY2spO1xuICAgICAgZmlyc3RUZXh0Tm9kZS5lYWNoKHNwb3QgPT4ge1xuICAgICAgICBjb25zdCBub2RlID0gc3BvdC5jb250YWluZXI7XG4gICAgICAgIHNjYW5SaWdodChub2RlLCBwYXR0ZXJuLnN0YXJ0Lmxlbmd0aCwgYmxvY2spLmVhY2goZW5kID0+IHtcbiAgICAgICAgICBjb25zdCBybmcgPSBkb20uY3JlYXRlUm5nKCk7XG4gICAgICAgICAgcm5nLnNldFN0YXJ0KG5vZGUsIDApO1xuICAgICAgICAgIHJuZy5zZXRFbmQoZW5kLmNvbnRhaW5lciwgZW5kLm9mZnNldCk7XG4gICAgICAgICAgZGVsZXRlUm5nKGRvbSwgcm5nLCBlID0+IGUgPT09IGJsb2NrKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRleHQgPSBTdWdhckVsZW1lbnQuZnJvbURvbShub2RlKTtcbiAgICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSBnZXQkMyh0ZXh0KTtcbiAgICAgICAgaWYgKHN0YXJ0c1dpdGhTaW5nbGVTcGFjZSh0ZXh0Q29udGVudCkpIHtcbiAgICAgICAgICBzZXQodGV4dCwgdGV4dENvbnRlbnQuc2xpY2UoMSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5UGF0dGVybiQxID0gKGVkaXRvciwgbWF0Y2gpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBwYXR0ZXJuID0gbWF0Y2gucGF0dGVybjtcbiAgICAgIGNvbnN0IHJuZyA9IHJlc29sdmVQYXRoUmFuZ2UoZG9tLmdldFJvb3QoKSwgbWF0Y2gucmFuZ2UpLmdldE9yRGllKCdVbmFibGUgdG8gcmVzb2x2ZSBwYXRoIHJhbmdlJyk7XG4gICAgICBjb25zdCBpc0Jsb2NrRm9ybWF0TmFtZSA9IChuYW1lLCBmb3JtYXR0ZXIpID0+IHtcbiAgICAgICAgY29uc3QgZm9ybWF0U2V0ID0gZm9ybWF0dGVyLmdldChuYW1lKTtcbiAgICAgICAgcmV0dXJuIGlzQXJyYXkkMShmb3JtYXRTZXQpICYmIGhlYWQoZm9ybWF0U2V0KS5leGlzdHMoZm9ybWF0ID0+IGhhcyQyKGZvcm1hdCwgJ2Jsb2NrJykpO1xuICAgICAgfTtcbiAgICAgIGdldFBhcmVudEJsb2NrKGVkaXRvciwgcm5nKS5lYWNoKGJsb2NrID0+IHtcbiAgICAgICAgaWYgKHBhdHRlcm4udHlwZSA9PT0gJ2Jsb2NrLWZvcm1hdCcpIHtcbiAgICAgICAgICBpZiAoaXNCbG9ja0Zvcm1hdE5hbWUocGF0dGVybi5mb3JtYXQsIGVkaXRvci5mb3JtYXR0ZXIpKSB7XG4gICAgICAgICAgICBlZGl0b3IudW5kb01hbmFnZXIudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICAgICAgICBzdHJpcFBhdHRlcm4oZWRpdG9yLmRvbSwgYmxvY2ssIHBhdHRlcm4pO1xuICAgICAgICAgICAgICBlZGl0b3IuZm9ybWF0dGVyLmFwcGx5KHBhdHRlcm4uZm9ybWF0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXR0ZXJuLnR5cGUgPT09ICdibG9jay1jb21tYW5kJykge1xuICAgICAgICAgIGVkaXRvci51bmRvTWFuYWdlci50cmFuc2FjdCgoKSA9PiB7XG4gICAgICAgICAgICBzdHJpcFBhdHRlcm4oZWRpdG9yLmRvbSwgYmxvY2ssIHBhdHRlcm4pO1xuICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKHBhdHRlcm4uY21kLCBmYWxzZSwgcGF0dGVybi52YWx1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBzb3J0UGF0dGVybnMkMSA9IHBhdHRlcm5zID0+IHNvcnQocGF0dGVybnMsIChhLCBiKSA9PiBiLnN0YXJ0Lmxlbmd0aCAtIGEuc3RhcnQubGVuZ3RoKTtcbiAgICBjb25zdCBmaW5kUGF0dGVybiQxID0gKHBhdHRlcm5zLCB0ZXh0KSA9PiB7XG4gICAgICBjb25zdCBzb3J0ZWRQYXR0ZXJucyA9IHNvcnRQYXR0ZXJucyQxKHBhdHRlcm5zKTtcbiAgICAgIGNvbnN0IG51VGV4dCA9IHRleHQucmVwbGFjZShuYnNwLCAnICcpO1xuICAgICAgcmV0dXJuIGZpbmQkMihzb3J0ZWRQYXR0ZXJucywgcGF0dGVybiA9PiB0ZXh0LmluZGV4T2YocGF0dGVybi5zdGFydCkgPT09IDAgfHwgbnVUZXh0LmluZGV4T2YocGF0dGVybi5zdGFydCkgPT09IDApO1xuICAgIH07XG4gICAgY29uc3QgZmluZFBhdHRlcm5zJDEgPSAoZWRpdG9yLCBibG9jaywgcGF0dGVyblNldCwgbm9ybWFsaXplZE1hdGNoZXMpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBmb3JjZWRSb290QmxvY2sgPSBnZXRGb3JjZWRSb290QmxvY2soZWRpdG9yKTtcbiAgICAgIGlmICghZG9tLmlzKGJsb2NrLCBmb3JjZWRSb290QmxvY2spKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJsb2NrVGV4dCA9IChfYSA9IGJsb2NrLnRleHRDb250ZW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgIHJldHVybiBmaW5kUGF0dGVybiQxKHBhdHRlcm5TZXQuYmxvY2tQYXR0ZXJucywgYmxvY2tUZXh0KS5tYXAocGF0dGVybiA9PiB7XG4gICAgICAgIGlmIChUb29scy50cmltKGJsb2NrVGV4dCkubGVuZ3RoID09PSBwYXR0ZXJuLnN0YXJ0Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICAgIHBhdHRlcm4sXG4gICAgICAgICAgICByYW5nZTogZ2VuZXJhdGVQYXRoUmFuZ2UoZG9tLCBkb20uZ2V0Um9vdCgpLCBibG9jaywgMCwgYmxvY2ssIDAsIG5vcm1hbGl6ZWRNYXRjaGVzKVxuICAgICAgICAgIH1dO1xuICAgICAgfSkuZ2V0T3IoW10pO1xuICAgIH07XG4gICAgY29uc3QgYXBwbHlNYXRjaGVzJDEgPSAoZWRpdG9yLCBtYXRjaGVzKSA9PiB7XG4gICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYm9va21hcmsgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldEJvb2ttYXJrKCk7XG4gICAgICBlYWNoJGUobWF0Y2hlcywgbWF0Y2ggPT4gYXBwbHlQYXR0ZXJuJDEoZWRpdG9yLCBtYXRjaCkpO1xuICAgICAgZWRpdG9yLnNlbGVjdGlvbi5tb3ZlVG9Cb29rbWFyayhib29rbWFyayk7XG4gICAgfTtcblxuICAgIGNvbnN0IG5ld01hcmtlciA9IChkb20sIGlkKSA9PiBkb20uY3JlYXRlKCdzcGFuJywge1xuICAgICAgJ2RhdGEtbWNlLXR5cGUnOiAnYm9va21hcmsnLFxuICAgICAgaWRcbiAgICB9KTtcbiAgICBjb25zdCByYW5nZUZyb21NYXJrZXIgPSAoZG9tLCBtYXJrZXIpID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGRvbS5jcmVhdGVSbmcoKTtcbiAgICAgIHJuZy5zZXRTdGFydEFmdGVyKG1hcmtlci5zdGFydCk7XG4gICAgICBybmcuc2V0RW5kQmVmb3JlKG1hcmtlci5lbmQpO1xuICAgICAgcmV0dXJuIHJuZztcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZU1hcmtlciA9IChkb20sIG1hcmtlclByZWZpeCwgcGF0aFJhbmdlKSA9PiB7XG4gICAgICBjb25zdCBybmcgPSByZXNvbHZlUGF0aFJhbmdlKGRvbS5nZXRSb290KCksIHBhdGhSYW5nZSkuZ2V0T3JEaWUoJ1VuYWJsZSB0byByZXNvbHZlIHBhdGggcmFuZ2UnKTtcbiAgICAgIGNvbnN0IHN0YXJ0Tm9kZSA9IHJuZy5zdGFydENvbnRhaW5lcjtcbiAgICAgIGNvbnN0IGVuZE5vZGUgPSBybmcuZW5kQ29udGFpbmVyO1xuICAgICAgY29uc3QgdGV4dEVuZCA9IHJuZy5lbmRPZmZzZXQgPT09IDAgPyBlbmROb2RlIDogZW5kTm9kZS5zcGxpdFRleHQocm5nLmVuZE9mZnNldCk7XG4gICAgICBjb25zdCB0ZXh0U3RhcnQgPSBybmcuc3RhcnRPZmZzZXQgPT09IDAgPyBzdGFydE5vZGUgOiBzdGFydE5vZGUuc3BsaXRUZXh0KHJuZy5zdGFydE9mZnNldCk7XG4gICAgICBjb25zdCBzdGFydFBhcmVudE5vZGUgPSB0ZXh0U3RhcnQucGFyZW50Tm9kZTtcbiAgICAgIGNvbnN0IGVuZFBhcmVudE5vZGUgPSB0ZXh0RW5kLnBhcmVudE5vZGU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmVmaXg6IG1hcmtlclByZWZpeCxcbiAgICAgICAgZW5kOiBlbmRQYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdNYXJrZXIoZG9tLCBtYXJrZXJQcmVmaXggKyAnLWVuZCcpLCB0ZXh0RW5kKSxcbiAgICAgICAgc3RhcnQ6IHN0YXJ0UGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3TWFya2VyKGRvbSwgbWFya2VyUHJlZml4ICsgJy1zdGFydCcpLCB0ZXh0U3RhcnQpXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlTWFya2VyID0gKGRvbSwgbWFya2VyLCBpc1Jvb3QpID0+IHtcbiAgICAgIGNsZWFuRW1wdHlOb2Rlcyhkb20sIGRvbS5nZXQobWFya2VyLnByZWZpeCArICctZW5kJyksIGlzUm9vdCk7XG4gICAgICBjbGVhbkVtcHR5Tm9kZXMoZG9tLCBkb20uZ2V0KG1hcmtlci5wcmVmaXggKyAnLXN0YXJ0JyksIGlzUm9vdCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzUmVwbGFjZW1lbnRQYXR0ZXJuID0gcGF0dGVybiA9PiBwYXR0ZXJuLnN0YXJ0Lmxlbmd0aCA9PT0gMDtcbiAgICBjb25zdCBtYXRjaGVzUGF0dGVybiA9IHBhdHRlcm5Db250ZW50ID0+IChlbGVtZW50LCBvZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSBlbGVtZW50LmRhdGE7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgb2Zmc2V0KTtcbiAgICAgIGNvbnN0IHN0YXJ0RW5kSW5kZXggPSBzZWFyY2hUZXh0Lmxhc3RJbmRleE9mKHBhdHRlcm5Db250ZW50LmNoYXJBdChwYXR0ZXJuQ29udGVudC5sZW5ndGggLSAxKSk7XG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gc2VhcmNoVGV4dC5sYXN0SW5kZXhPZihwYXR0ZXJuQ29udGVudCk7XG4gICAgICBpZiAoc3RhcnRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXggKyBwYXR0ZXJuQ29udGVudC5sZW5ndGg7XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0RW5kSW5kZXggIT09IC0xKSB7XG4gICAgICAgIHJldHVybiBzdGFydEVuZEluZGV4ICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRQYXR0ZXJuU3RhcnRGcm9tU3BvdCA9IChkb20sIHBhdHRlcm4sIGJsb2NrLCBzcG90KSA9PiB7XG4gICAgICBjb25zdCBzdGFydFBhdHRlcm4gPSBwYXR0ZXJuLnN0YXJ0O1xuICAgICAgY29uc3Qgc3RhcnRTcG90ID0gcmVwZWF0TGVmdChkb20sIHNwb3QuY29udGFpbmVyLCBzcG90Lm9mZnNldCwgbWF0Y2hlc1BhdHRlcm4oc3RhcnRQYXR0ZXJuKSwgYmxvY2spO1xuICAgICAgcmV0dXJuIHN0YXJ0U3BvdC5iaW5kKHNwb3QgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCBzdGFydFBhdHRlcm5JbmRleCA9IChfYiA9IChfYSA9IGJsb2NrLnRleHRDb250ZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaW5kZXhPZihzdGFydFBhdHRlcm4pKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAtMTtcbiAgICAgICAgY29uc3QgaXNDb21wbGV0ZU1hdGNoID0gc3RhcnRQYXR0ZXJuSW5kZXggIT09IC0xICYmIHNwb3Qub2Zmc2V0ID49IHN0YXJ0UGF0dGVybkluZGV4ICsgc3RhcnRQYXR0ZXJuLmxlbmd0aDtcbiAgICAgICAgaWYgKGlzQ29tcGxldGVNYXRjaCkge1xuICAgICAgICAgIGNvbnN0IHJuZyA9IGRvbS5jcmVhdGVSbmcoKTtcbiAgICAgICAgICBybmcuc2V0U3RhcnQoc3BvdC5jb250YWluZXIsIHNwb3Qub2Zmc2V0IC0gc3RhcnRQYXR0ZXJuLmxlbmd0aCk7XG4gICAgICAgICAgcm5nLnNldEVuZChzcG90LmNvbnRhaW5lciwgc3BvdC5vZmZzZXQpO1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHJuZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gc3BvdC5vZmZzZXQgLSBzdGFydFBhdHRlcm4ubGVuZ3RoO1xuICAgICAgICAgIHJldHVybiBzY2FuTGVmdChzcG90LmNvbnRhaW5lciwgb2Zmc2V0LCBibG9jaykubWFwKG5leHRTcG90ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJuZyA9IGRvbS5jcmVhdGVSbmcoKTtcbiAgICAgICAgICAgIHJuZy5zZXRTdGFydChuZXh0U3BvdC5jb250YWluZXIsIG5leHRTcG90Lm9mZnNldCk7XG4gICAgICAgICAgICBybmcuc2V0RW5kKHNwb3QuY29udGFpbmVyLCBzcG90Lm9mZnNldCk7XG4gICAgICAgICAgICByZXR1cm4gcm5nO1xuICAgICAgICAgIH0pLmZpbHRlcihybmcgPT4gcm5nLnRvU3RyaW5nKCkgPT09IHN0YXJ0UGF0dGVybikub3JUaHVuaygoKSA9PiBmaW5kUGF0dGVyblN0YXJ0RnJvbVNwb3QoZG9tLCBwYXR0ZXJuLCBibG9jaywgcG9pbnQoc3BvdC5jb250YWluZXIsIDApKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZmluZFBhdHRlcm5TdGFydCA9IChkb20sIHBhdHRlcm4sIG5vZGUsIG9mZnNldCwgYmxvY2ssIHJlcXVpcmVHYXAgPSBmYWxzZSkgPT4ge1xuICAgICAgaWYgKHBhdHRlcm4uc3RhcnQubGVuZ3RoID09PSAwICYmICFyZXF1aXJlR2FwKSB7XG4gICAgICAgIGNvbnN0IHJuZyA9IGRvbS5jcmVhdGVSbmcoKTtcbiAgICAgICAgcm5nLnNldFN0YXJ0KG5vZGUsIG9mZnNldCk7XG4gICAgICAgIHJuZy5zZXRFbmQobm9kZSwgb2Zmc2V0KTtcbiAgICAgICAgcmV0dXJuIE9wdGlvbmFsLnNvbWUocm5nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0ZXh0QmVmb3JlKG5vZGUsIG9mZnNldCwgYmxvY2spLmJpbmQoc3BvdCA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gZmluZFBhdHRlcm5TdGFydEZyb21TcG90KGRvbSwgcGF0dGVybiwgYmxvY2ssIHNwb3QpO1xuICAgICAgICByZXR1cm4gc3RhcnQuYmluZChzdGFydFJhbmdlID0+IHtcbiAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgaWYgKHJlcXVpcmVHYXApIHtcbiAgICAgICAgICAgIGlmIChzdGFydFJhbmdlLmVuZENvbnRhaW5lciA9PT0gc3BvdC5jb250YWluZXIgJiYgc3RhcnRSYW5nZS5lbmRPZmZzZXQgPT09IHNwb3Qub2Zmc2V0KSB7XG4gICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNwb3Qub2Zmc2V0ID09PSAwICYmICgoX2EgPSBzdGFydFJhbmdlLmVuZENvbnRhaW5lci50ZXh0Q29udGVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPT09IHN0YXJ0UmFuZ2UuZW5kT2Zmc2V0KSB7XG4gICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5ub25lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHN0YXJ0UmFuZ2UpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZmluZFBhdHRlcm4gPSAoZWRpdG9yLCBibG9jaywgZGV0YWlscywgbm9ybWFsaXplZE1hdGNoZXMpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCByb290ID0gZG9tLmdldFJvb3QoKTtcbiAgICAgIGNvbnN0IHBhdHRlcm4gPSBkZXRhaWxzLnBhdHRlcm47XG4gICAgICBjb25zdCBlbmROb2RlID0gZGV0YWlscy5wb3NpdGlvbi5jb250YWluZXI7XG4gICAgICBjb25zdCBlbmRPZmZzZXQgPSBkZXRhaWxzLnBvc2l0aW9uLm9mZnNldDtcbiAgICAgIHJldHVybiBzY2FuTGVmdChlbmROb2RlLCBlbmRPZmZzZXQgLSBkZXRhaWxzLnBhdHRlcm4uZW5kLmxlbmd0aCwgYmxvY2spLmJpbmQoc3BvdCA9PiB7XG4gICAgICAgIGNvbnN0IGVuZFBhdGhSbmcgPSBnZW5lcmF0ZVBhdGhSYW5nZShkb20sIHJvb3QsIHNwb3QuY29udGFpbmVyLCBzcG90Lm9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0LCBub3JtYWxpemVkTWF0Y2hlcyk7XG4gICAgICAgIGlmIChpc1JlcGxhY2VtZW50UGF0dGVybihwYXR0ZXJuKSkge1xuICAgICAgICAgIHJldHVybiBPcHRpb25hbC5zb21lKHtcbiAgICAgICAgICAgIG1hdGNoZXM6IFt7XG4gICAgICAgICAgICAgICAgcGF0dGVybixcbiAgICAgICAgICAgICAgICBzdGFydFJuZzogZW5kUGF0aFJuZyxcbiAgICAgICAgICAgICAgICBlbmRSbmc6IGVuZFBhdGhSbmdcbiAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICBwb3NpdGlvbjogc3BvdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdHNPcHQgPSBmaW5kUGF0dGVybnNSZWMoZWRpdG9yLCBkZXRhaWxzLnJlbWFpbmluZ1BhdHRlcm5zLCBzcG90LmNvbnRhaW5lciwgc3BvdC5vZmZzZXQsIGJsb2NrLCBub3JtYWxpemVkTWF0Y2hlcyk7XG4gICAgICAgICAgY29uc3QgcmVzdWx0cyA9IHJlc3VsdHNPcHQuZ2V0T3Ioe1xuICAgICAgICAgICAgbWF0Y2hlczogW10sXG4gICAgICAgICAgICBwb3NpdGlvbjogc3BvdFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHBvcyA9IHJlc3VsdHMucG9zaXRpb247XG4gICAgICAgICAgY29uc3Qgc3RhcnQgPSBmaW5kUGF0dGVyblN0YXJ0KGRvbSwgcGF0dGVybiwgcG9zLmNvbnRhaW5lciwgcG9zLm9mZnNldCwgYmxvY2ssIHJlc3VsdHNPcHQuaXNOb25lKCkpO1xuICAgICAgICAgIHJldHVybiBzdGFydC5tYXAoc3RhcnRSbmcgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRQYXRoUm5nID0gZ2VuZXJhdGVQYXRoUmFuZ2VGcm9tUmFuZ2UoZG9tLCByb290LCBzdGFydFJuZywgbm9ybWFsaXplZE1hdGNoZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgbWF0Y2hlczogcmVzdWx0cy5tYXRjaGVzLmNvbmNhdChbe1xuICAgICAgICAgICAgICAgICAgcGF0dGVybixcbiAgICAgICAgICAgICAgICAgIHN0YXJ0Um5nOiBzdGFydFBhdGhSbmcsXG4gICAgICAgICAgICAgICAgICBlbmRSbmc6IGVuZFBhdGhSbmdcbiAgICAgICAgICAgICAgICB9XSksXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBwb2ludChzdGFydFJuZy5zdGFydENvbnRhaW5lciwgc3RhcnRSbmcuc3RhcnRPZmZzZXQpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZpbmRQYXR0ZXJuc1JlYyA9IChlZGl0b3IsIHBhdHRlcm5zLCBub2RlLCBvZmZzZXQsIGJsb2NrLCBub3JtYWxpemVkTWF0Y2hlcykgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIHJldHVybiB0ZXh0QmVmb3JlKG5vZGUsIG9mZnNldCwgZG9tLmdldFJvb3QoKSkuYmluZChlbmRTcG90ID0+IHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGdldEJlZm9yZVRleHQoZG9tLCBibG9jaywgbm9kZSwgb2Zmc2V0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXR0ZXJucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHBhdHRlcm4gPSBwYXR0ZXJuc1tpXTtcbiAgICAgICAgICBpZiAoIWVuZHNXaXRoKHRleHQsIHBhdHRlcm4uZW5kKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHBhdHRlcm5zV2l0aG91dEN1cnJlbnQgPSBwYXR0ZXJucy5zbGljZSgpO1xuICAgICAgICAgIHBhdHRlcm5zV2l0aG91dEN1cnJlbnQuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRQYXR0ZXJuKGVkaXRvciwgYmxvY2ssIHtcbiAgICAgICAgICAgIHBhdHRlcm4sXG4gICAgICAgICAgICByZW1haW5pbmdQYXR0ZXJuczogcGF0dGVybnNXaXRob3V0Q3VycmVudCxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBlbmRTcG90XG4gICAgICAgICAgfSwgbm9ybWFsaXplZE1hdGNoZXMpO1xuICAgICAgICAgIGlmIChyZXN1bHQuaXNOb25lKCkgJiYgb2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbmRQYXR0ZXJuc1JlYyhlZGl0b3IsIHBhdHRlcm5zLCBub2RlLCBvZmZzZXQgLSAxLCBibG9jaywgbm9ybWFsaXplZE1hdGNoZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0LmlzU29tZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT3B0aW9uYWwubm9uZSgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBhcHBseVBhdHRlcm4gPSAoZWRpdG9yLCBwYXR0ZXJuLCBwYXR0ZXJuUmFuZ2UpID0+IHtcbiAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHBhdHRlcm5SYW5nZSk7XG4gICAgICBpZiAocGF0dGVybi50eXBlID09PSAnaW5saW5lLWZvcm1hdCcpIHtcbiAgICAgICAgZWFjaCRlKHBhdHRlcm4uZm9ybWF0LCBmb3JtYXQgPT4ge1xuICAgICAgICAgIGVkaXRvci5mb3JtYXR0ZXIuYXBwbHkoZm9ybWF0KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQocGF0dGVybi5jbWQsIGZhbHNlLCBwYXR0ZXJuLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGx5UmVwbGFjZW1lbnRQYXR0ZXJuID0gKGVkaXRvciwgcGF0dGVybiwgbWFya2VyLCBpc1Jvb3QpID0+IHtcbiAgICAgIGNvbnN0IG1hcmtlclJhbmdlID0gcmFuZ2VGcm9tTWFya2VyKGVkaXRvci5kb20sIG1hcmtlcik7XG4gICAgICBkZWxldGVSbmcoZWRpdG9yLmRvbSwgbWFya2VyUmFuZ2UsIGlzUm9vdCk7XG4gICAgICBhcHBseVBhdHRlcm4oZWRpdG9yLCBwYXR0ZXJuLCBtYXJrZXJSYW5nZSk7XG4gICAgfTtcbiAgICBjb25zdCBhcHBseVBhdHRlcm5XaXRoQ29udGVudCA9IChlZGl0b3IsIHBhdHRlcm4sIHN0YXJ0TWFya2VyLCBlbmRNYXJrZXIsIGlzUm9vdCkgPT4ge1xuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IG1hcmtlckVuZFJhbmdlID0gcmFuZ2VGcm9tTWFya2VyKGRvbSwgZW5kTWFya2VyKTtcbiAgICAgIGNvbnN0IG1hcmtlclN0YXJ0UmFuZ2UgPSByYW5nZUZyb21NYXJrZXIoZG9tLCBzdGFydE1hcmtlcik7XG4gICAgICBkZWxldGVSbmcoZG9tLCBtYXJrZXJTdGFydFJhbmdlLCBpc1Jvb3QpO1xuICAgICAgZGVsZXRlUm5nKGRvbSwgbWFya2VyRW5kUmFuZ2UsIGlzUm9vdCk7XG4gICAgICBjb25zdCBwYXR0ZXJuTWFya2VyID0ge1xuICAgICAgICBwcmVmaXg6IHN0YXJ0TWFya2VyLnByZWZpeCxcbiAgICAgICAgc3RhcnQ6IHN0YXJ0TWFya2VyLmVuZCxcbiAgICAgICAgZW5kOiBlbmRNYXJrZXIuc3RhcnRcbiAgICAgIH07XG4gICAgICBjb25zdCBwYXR0ZXJuUmFuZ2UgPSByYW5nZUZyb21NYXJrZXIoZG9tLCBwYXR0ZXJuTWFya2VyKTtcbiAgICAgIGFwcGx5UGF0dGVybihlZGl0b3IsIHBhdHRlcm4sIHBhdHRlcm5SYW5nZSk7XG4gICAgfTtcbiAgICBjb25zdCBhZGRNYXJrZXJzID0gKGRvbSwgbWF0Y2hlcykgPT4ge1xuICAgICAgY29uc3QgbWFya2VyUHJlZml4ID0gZ2VuZXJhdGUkMSgnbWNlX3RleHRwYXR0ZXJuJyk7XG4gICAgICBjb25zdCBtYXRjaGVzV2l0aEVuZHMgPSBmb2xkcihtYXRjaGVzLCAoYWNjLCBtYXRjaCkgPT4ge1xuICAgICAgICBjb25zdCBlbmRNYXJrZXIgPSBjcmVhdGVNYXJrZXIoZG9tLCBtYXJrZXJQcmVmaXggKyBgX2VuZCR7IGFjYy5sZW5ndGggfWAsIG1hdGNoLmVuZFJuZyk7XG4gICAgICAgIHJldHVybiBhY2MuY29uY2F0KFt7XG4gICAgICAgICAgICAuLi5tYXRjaCxcbiAgICAgICAgICAgIGVuZE1hcmtlclxuICAgICAgICAgIH1dKTtcbiAgICAgIH0sIFtdKTtcbiAgICAgIHJldHVybiBmb2xkcihtYXRjaGVzV2l0aEVuZHMsIChhY2MsIG1hdGNoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkeCA9IG1hdGNoZXNXaXRoRW5kcy5sZW5ndGggLSBhY2MubGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3Qgc3RhcnRNYXJrZXIgPSBpc1JlcGxhY2VtZW50UGF0dGVybihtYXRjaC5wYXR0ZXJuKSA/IG1hdGNoLmVuZE1hcmtlciA6IGNyZWF0ZU1hcmtlcihkb20sIG1hcmtlclByZWZpeCArIGBfc3RhcnQkeyBpZHggfWAsIG1hdGNoLnN0YXJ0Um5nKTtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoW3tcbiAgICAgICAgICAgIC4uLm1hdGNoLFxuICAgICAgICAgICAgc3RhcnRNYXJrZXJcbiAgICAgICAgICB9XSk7XG4gICAgICB9LCBbXSk7XG4gICAgfTtcbiAgICBjb25zdCBzb3J0UGF0dGVybnMgPSBwYXR0ZXJucyA9PiBzb3J0KHBhdHRlcm5zLCAoYSwgYikgPT4gYi5lbmQubGVuZ3RoIC0gYS5lbmQubGVuZ3RoKTtcbiAgICBjb25zdCBnZXRCZXN0TWF0Y2hlcyA9IChtYXRjaGVzLCBtYXRjaGVzV2l0aFNvcnRlZFBhdHRlcm5zKSA9PiB7XG4gICAgICBjb25zdCBoYXNTYW1lTWF0Y2hlcyA9IGZvcmFsbChtYXRjaGVzLCBtYXRjaCA9PiBleGlzdHMobWF0Y2hlc1dpdGhTb3J0ZWRQYXR0ZXJucywgc29ydGVkTWF0Y2ggPT4gbWF0Y2gucGF0dGVybi5zdGFydCA9PT0gc29ydGVkTWF0Y2gucGF0dGVybi5zdGFydCAmJiBtYXRjaC5wYXR0ZXJuLmVuZCA9PT0gc29ydGVkTWF0Y2gucGF0dGVybi5lbmQpKTtcbiAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gbWF0Y2hlc1dpdGhTb3J0ZWRQYXR0ZXJucy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGhhc1NhbWVNYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuIG1hdGNoZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1hdGNoZXNXaXRoU29ydGVkUGF0dGVybnM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXRjaGVzLmxlbmd0aCA+IG1hdGNoZXNXaXRoU29ydGVkUGF0dGVybnMubGVuZ3RoID8gbWF0Y2hlcyA6IG1hdGNoZXNXaXRoU29ydGVkUGF0dGVybnM7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kUGF0dGVybnMgPSAoZWRpdG9yLCBibG9jaywgbm9kZSwgb2Zmc2V0LCBwYXR0ZXJuU2V0LCBub3JtYWxpemVkTWF0Y2hlcykgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGZpbmRQYXR0ZXJuc1JlYyhlZGl0b3IsIHBhdHRlcm5TZXQuaW5saW5lUGF0dGVybnMsIG5vZGUsIG9mZnNldCwgYmxvY2ssIG5vcm1hbGl6ZWRNYXRjaGVzKS5mb2xkKCgpID0+IFtdLCByZXN1bHQgPT4gcmVzdWx0Lm1hdGNoZXMpO1xuICAgICAgY29uc3QgbWF0Y2hlc1dpdGhTb3J0ZWRQYXR0ZXJucyA9IGZpbmRQYXR0ZXJuc1JlYyhlZGl0b3IsIHNvcnRQYXR0ZXJucyhwYXR0ZXJuU2V0LmlubGluZVBhdHRlcm5zKSwgbm9kZSwgb2Zmc2V0LCBibG9jaywgbm9ybWFsaXplZE1hdGNoZXMpLmZvbGQoKCkgPT4gW10sIHJlc3VsdCA9PiByZXN1bHQubWF0Y2hlcyk7XG4gICAgICByZXR1cm4gZ2V0QmVzdE1hdGNoZXMobWF0Y2hlcywgbWF0Y2hlc1dpdGhTb3J0ZWRQYXR0ZXJucyk7XG4gICAgfTtcbiAgICBjb25zdCBhcHBseU1hdGNoZXMgPSAoZWRpdG9yLCBtYXRjaGVzKSA9PiB7XG4gICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZG9tID0gZWRpdG9yLmRvbTtcbiAgICAgIGNvbnN0IGJvb2ttYXJrID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRCb29rbWFyaygpO1xuICAgICAgY29uc3QgbWF0Y2hlc1dpdGhNYXJrZXJzID0gYWRkTWFya2Vycyhkb20sIG1hdGNoZXMpO1xuICAgICAgZWFjaCRlKG1hdGNoZXNXaXRoTWFya2VycywgbWF0Y2ggPT4ge1xuICAgICAgICBjb25zdCBibG9jayA9IGRvbS5nZXRQYXJlbnQobWF0Y2guc3RhcnRNYXJrZXIuc3RhcnQsIGRvbS5pc0Jsb2NrKTtcbiAgICAgICAgY29uc3QgaXNSb290ID0gbm9kZSA9PiBub2RlID09PSBibG9jaztcbiAgICAgICAgaWYgKGlzUmVwbGFjZW1lbnRQYXR0ZXJuKG1hdGNoLnBhdHRlcm4pKSB7XG4gICAgICAgICAgYXBwbHlSZXBsYWNlbWVudFBhdHRlcm4oZWRpdG9yLCBtYXRjaC5wYXR0ZXJuLCBtYXRjaC5lbmRNYXJrZXIsIGlzUm9vdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXBwbHlQYXR0ZXJuV2l0aENvbnRlbnQoZWRpdG9yLCBtYXRjaC5wYXR0ZXJuLCBtYXRjaC5zdGFydE1hcmtlciwgbWF0Y2guZW5kTWFya2VyLCBpc1Jvb3QpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZU1hcmtlcihkb20sIG1hdGNoLmVuZE1hcmtlciwgaXNSb290KTtcbiAgICAgICAgcmVtb3ZlTWFya2VyKGRvbSwgbWF0Y2guc3RhcnRNYXJrZXIsIGlzUm9vdCk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5zZWxlY3Rpb24ubW92ZVRvQm9va21hcmsoYm9va21hcmspO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVFbnRlciA9IChlZGl0b3IsIHBhdHRlcm5TZXQpID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50QmxvY2soZWRpdG9yLCBybmcpLm1hcChibG9jayA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5tYXgoMCwgcm5nLnN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgY29uc3QgZHluYW1pY1BhdHRlcm5TZXQgPSByZXNvbHZlRnJvbUR5bmFtaWNQYXR0ZXJucyhwYXR0ZXJuU2V0LCBibG9jaywgKF9hID0gYmxvY2sudGV4dENvbnRlbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnKTtcbiAgICAgICAgY29uc3QgaW5saW5lTWF0Y2hlcyA9IGZpbmRQYXR0ZXJucyhlZGl0b3IsIGJsb2NrLCBybmcuc3RhcnRDb250YWluZXIsIG9mZnNldCwgZHluYW1pY1BhdHRlcm5TZXQsIHRydWUpO1xuICAgICAgICBjb25zdCBibG9ja01hdGNoZXMgPSBmaW5kUGF0dGVybnMkMShlZGl0b3IsIGJsb2NrLCBkeW5hbWljUGF0dGVyblNldCwgdHJ1ZSk7XG4gICAgICAgIGlmIChibG9ja01hdGNoZXMubGVuZ3RoID4gMCB8fCBpbmxpbmVNYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBlZGl0b3IudW5kb01hbmFnZXIuYWRkKCk7XG4gICAgICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLmV4dHJhKCgpID0+IHtcbiAgICAgICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnbWNlSW5zZXJ0TmV3TGluZScpO1xuICAgICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgIGVkaXRvci5pbnNlcnRDb250ZW50KHplcm9XaWR0aCk7XG4gICAgICAgICAgICBhcHBseU1hdGNoZXMoZWRpdG9yLCBpbmxpbmVNYXRjaGVzKTtcbiAgICAgICAgICAgIGFwcGx5TWF0Y2hlcyQxKGVkaXRvciwgYmxvY2tNYXRjaGVzKTtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IHNwb3QgPSB0ZXh0QmVmb3JlKHJhbmdlLnN0YXJ0Q29udGFpbmVyLCByYW5nZS5zdGFydE9mZnNldCwgZWRpdG9yLmRvbS5nZXRSb290KCkpO1xuICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VJbnNlcnROZXdMaW5lJyk7XG4gICAgICAgICAgICBzcG90LmVhY2gocyA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBzLmNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgaWYgKG5vZGUuZGF0YS5jaGFyQXQocy5vZmZzZXQgLSAxKSA9PT0gemVyb1dpZHRoKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5kZWxldGVEYXRhKHMub2Zmc2V0IC0gMSwgMSk7XG4gICAgICAgICAgICAgICAgY2xlYW5FbXB0eU5vZGVzKGVkaXRvci5kb20sIG5vZGUucGFyZW50Tm9kZSwgZSA9PiBlID09PSBlZGl0b3IuZG9tLmdldFJvb3QoKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pLmdldE9yKGZhbHNlKTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZUlubGluZUtleSA9IChlZGl0b3IsIHBhdHRlcm5TZXQpID0+IHtcbiAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG4gICAgICBnZXRQYXJlbnRCbG9jayhlZGl0b3IsIHJuZykubWFwKGJsb2NrID0+IHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5tYXgoMCwgcm5nLnN0YXJ0T2Zmc2V0IC0gMSk7XG4gICAgICAgIGNvbnN0IGJlZm9yZVRleHQgPSBnZXRCZWZvcmVUZXh0KGVkaXRvci5kb20sIGJsb2NrLCBybmcuc3RhcnRDb250YWluZXIsIG9mZnNldCk7XG4gICAgICAgIGNvbnN0IGR5bmFtaWNQYXR0ZXJuU2V0ID0gcmVzb2x2ZUZyb21EeW5hbWljUGF0dGVybnMocGF0dGVyblNldCwgYmxvY2ssIGJlZm9yZVRleHQpO1xuICAgICAgICBjb25zdCBpbmxpbmVNYXRjaGVzID0gZmluZFBhdHRlcm5zKGVkaXRvciwgYmxvY2ssIHJuZy5zdGFydENvbnRhaW5lciwgb2Zmc2V0LCBkeW5hbWljUGF0dGVyblNldCwgZmFsc2UpO1xuICAgICAgICBpZiAoaW5saW5lTWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgICAgICAgIGFwcGx5TWF0Y2hlcyhlZGl0b3IsIGlubGluZU1hdGNoZXMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGNoZWNrS2V5RXZlbnQgPSAoY29kZXMsIGV2ZW50LCBwcmVkaWNhdGUpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZShjb2Rlc1tpXSwgZXZlbnQpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IGNoZWNrS2V5Q29kZSA9IChjb2RlcywgZXZlbnQpID0+IGNoZWNrS2V5RXZlbnQoY29kZXMsIGV2ZW50LCAoY29kZSwgZXZlbnQpID0+IHtcbiAgICAgIHJldHVybiBjb2RlID09PSBldmVudC5rZXlDb2RlICYmICFWSy5tb2RpZmllclByZXNzZWQoZXZlbnQpO1xuICAgIH0pO1xuICAgIGNvbnN0IGNoZWNrQ2hhckNvZGUgPSAoY2hhcnMsIGV2ZW50KSA9PiBjaGVja0tleUV2ZW50KGNoYXJzLCBldmVudCwgKGNociwgZXZlbnQpID0+IHtcbiAgICAgIHJldHVybiBjaHIuY2hhckNvZGVBdCgwKSA9PT0gZXZlbnQuY2hhckNvZGU7XG4gICAgfSk7XG5cbiAgICBjb25zdCBzZXR1cCQyID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGNoYXJDb2RlcyA9IFtcbiAgICAgICAgJywnLFxuICAgICAgICAnLicsXG4gICAgICAgICc7JyxcbiAgICAgICAgJzonLFxuICAgICAgICAnIScsXG4gICAgICAgICc/J1xuICAgICAgXTtcbiAgICAgIGNvbnN0IGtleUNvZGVzID0gWzMyXTtcbiAgICAgIGNvbnN0IGdldFBhdHRlcm5TZXQgPSAoKSA9PiBjcmVhdGVQYXR0ZXJuU2V0KGdldFRleHRQYXR0ZXJucyhlZGl0b3IpLCBnZXRUZXh0UGF0dGVybnNMb29rdXAoZWRpdG9yKSk7XG4gICAgICBjb25zdCBoYXNEeW5hbWljUGF0dGVybnMgPSAoKSA9PiBoYXNUZXh0UGF0dGVybnNMb29rdXAoZWRpdG9yKTtcbiAgICAgIGVkaXRvci5vbigna2V5ZG93bicsIGUgPT4ge1xuICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAxMyAmJiAhVksubW9kaWZpZXJQcmVzc2VkKGUpICYmIGVkaXRvci5zZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSkge1xuICAgICAgICAgIGNvbnN0IHBhdHRlcm5TZXQgPSBnZXRQYXR0ZXJuU2V0KCk7XG4gICAgICAgICAgY29uc3QgaGFzUGF0dGVybnMgPSBwYXR0ZXJuU2V0LmlubGluZVBhdHRlcm5zLmxlbmd0aCA+IDAgfHwgcGF0dGVyblNldC5ibG9ja1BhdHRlcm5zLmxlbmd0aCA+IDAgfHwgaGFzRHluYW1pY1BhdHRlcm5zKCk7XG4gICAgICAgICAgaWYgKGhhc1BhdHRlcm5zICYmIGhhbmRsZUVudGVyKGVkaXRvciwgcGF0dGVyblNldCkpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIHRydWUpO1xuICAgICAgY29uc3QgaGFuZGxlSW5saW5lVHJpZ2dlciA9ICgpID0+IHtcbiAgICAgICAgaWYgKGVkaXRvci5zZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSkge1xuICAgICAgICAgIGNvbnN0IHBhdHRlcm5TZXQgPSBnZXRQYXR0ZXJuU2V0KCk7XG4gICAgICAgICAgY29uc3QgaGFzUGF0dGVybnMgPSBwYXR0ZXJuU2V0LmlubGluZVBhdHRlcm5zLmxlbmd0aCA+IDAgfHwgaGFzRHluYW1pY1BhdHRlcm5zKCk7XG4gICAgICAgICAgaWYgKGhhc1BhdHRlcm5zKSB7XG4gICAgICAgICAgICBoYW5kbGVJbmxpbmVLZXkoZWRpdG9yLCBwYXR0ZXJuU2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBlZGl0b3Iub24oJ2tleXVwJywgZSA9PiB7XG4gICAgICAgIGlmIChjaGVja0tleUNvZGUoa2V5Q29kZXMsIGUpKSB7XG4gICAgICAgICAgaGFuZGxlSW5saW5lVHJpZ2dlcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbigna2V5cHJlc3MnLCBlID0+IHtcbiAgICAgICAgaWYgKGNoZWNrQ2hhckNvZGUoY2hhckNvZGVzLCBlKSkge1xuICAgICAgICAgIERlbGF5LnNldEVkaXRvclRpbWVvdXQoZWRpdG9yLCBoYW5kbGVJbmxpbmVUcmlnZ2VyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNldHVwJDEgPSBlZGl0b3IgPT4ge1xuICAgICAgc2V0dXAkMihlZGl0b3IpO1xuICAgIH07XG5cbiAgICBjb25zdCBRdWlya3MgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZWFjaCA9IFRvb2xzLmVhY2g7XG4gICAgICBjb25zdCBCQUNLU1BBQ0UgPSBWSy5CQUNLU1BBQ0UsIERFTEVURSA9IFZLLkRFTEVURSwgZG9tID0gZWRpdG9yLmRvbSwgc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbiwgcGFyc2VyID0gZWRpdG9yLnBhcnNlcjtcbiAgICAgIGNvbnN0IGJyb3dzZXIgPSBFbnYuYnJvd3NlcjtcbiAgICAgIGNvbnN0IGlzR2Vja28gPSBicm93c2VyLmlzRmlyZWZveCgpO1xuICAgICAgY29uc3QgaXNXZWJLaXQgPSBicm93c2VyLmlzQ2hyb21pdW0oKSB8fCBicm93c2VyLmlzU2FmYXJpKCk7XG4gICAgICBjb25zdCBpc2lPUyA9IEVudi5kZXZpY2VUeXBlLmlzaVBob25lKCkgfHwgRW52LmRldmljZVR5cGUuaXNpUGFkKCk7XG4gICAgICBjb25zdCBpc01hYyA9IEVudi5vcy5pc01hY09TKCkgfHwgRW52Lm9zLmlzaU9TKCk7XG4gICAgICBjb25zdCBzZXRFZGl0b3JDb21tYW5kU3RhdGUgPSAoY21kLCBzdGF0ZSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGVkaXRvci5nZXREb2MoKS5leGVjQ29tbWFuZChjbWQsIGZhbHNlLCBTdHJpbmcoc3RhdGUpKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzRGVmYXVsdFByZXZlbnRlZCA9IGUgPT4ge1xuICAgICAgICByZXR1cm4gZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBlbXB0eUVkaXRvcldoZW5EZWxldGluZyA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplUm5nID0gcm5nID0+IHtcbiAgICAgICAgICBjb25zdCBib2R5ID0gZG9tLmNyZWF0ZSgnYm9keScpO1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnRzID0gcm5nLmNsb25lQ29udGVudHMoKTtcbiAgICAgICAgICBib2R5LmFwcGVuZENoaWxkKGNvbnRlbnRzKTtcbiAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uLnNlcmlhbGl6ZXIuc2VyaWFsaXplKGJvZHksIHsgZm9ybWF0OiAnaHRtbCcgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFsbENvbnRlbnRzU2VsZWN0ZWQgPSBybmcgPT4ge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHNlcmlhbGl6ZVJuZyhybmcpO1xuICAgICAgICAgIGNvbnN0IGFsbFJuZyA9IGRvbS5jcmVhdGVSbmcoKTtcbiAgICAgICAgICBhbGxSbmcuc2VsZWN0Tm9kZShlZGl0b3IuZ2V0Qm9keSgpKTtcbiAgICAgICAgICBjb25zdCBhbGxTZWxlY3Rpb24gPSBzZXJpYWxpemVSbmcoYWxsUm5nKTtcbiAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uID09PSBhbGxTZWxlY3Rpb247XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGhhc1ByZXNlcnZlZEVtcHR5RWxlbWVudHMgPSBlbG0gPT4ge1xuICAgICAgICAgIGNvbnN0IHNjb3BlID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWxtKTtcbiAgICAgICAgICBjb25zdCBpc0VkaXRhYmxlSG9zdCA9IGVsbSA9PiBwYXJlbnRFbGVtZW50KGVsbSkuZXhpc3RzKGVsbSA9PiAhaXNFZGl0YWJsZSQzKGVsbSkpO1xuICAgICAgICAgIHJldHVybiBleGlzdHMoZGVzY2VuZGFudHMoc2NvcGUsICdbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXScpLCBpc0VkaXRhYmxlSG9zdCk7XG4gICAgICAgIH07XG4gICAgICAgIGVkaXRvci5vbigna2V5ZG93bicsIGUgPT4ge1xuICAgICAgICAgIGNvbnN0IGtleUNvZGUgPSBlLmtleUNvZGU7XG4gICAgICAgICAgaWYgKCFpc0RlZmF1bHRQcmV2ZW50ZWQoZSkgJiYgKGtleUNvZGUgPT09IERFTEVURSB8fCBrZXlDb2RlID09PSBCQUNLU1BBQ0UpICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFZGl0YWJsZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBpc0NvbGxhcHNlZCA9IGVkaXRvci5zZWxlY3Rpb24uaXNDb2xsYXBzZWQoKTtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgICAgICAgaWYgKGlzQ29sbGFwc2VkICYmICghZG9tLmlzRW1wdHkoYm9keSkgfHwgaGFzUHJlc2VydmVkRW1wdHlFbGVtZW50cyhib2R5KSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0NvbGxhcHNlZCAmJiAhYWxsQ29udGVudHNTZWxlY3RlZChlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlZGl0b3Iuc2V0Q29udGVudCgnJyk7XG4gICAgICAgICAgICBpZiAoYm9keS5maXJzdENoaWxkICYmIGRvbS5pc0Jsb2NrKGJvZHkuZmlyc3RDaGlsZCkpIHtcbiAgICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRDdXJzb3JMb2NhdGlvbihib2R5LmZpcnN0Q2hpbGQsIDApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRDdXJzb3JMb2NhdGlvbihib2R5LCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVkaXRvci5ub2RlQ2hhbmdlZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VsZWN0QWxsID0gKCkgPT4ge1xuICAgICAgICBlZGl0b3Iuc2hvcnRjdXRzLmFkZCgnbWV0YSthJywgbnVsbCwgJ1NlbGVjdEFsbCcpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRvY3VtZW50RWxlbWVudEVkaXRpbmdGb2N1cyA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFlZGl0b3IuaW5saW5lKSB7XG4gICAgICAgICAgZG9tLmJpbmQoZWRpdG9yLmdldERvYygpLCAnbW91c2Vkb3duIG1vdXNldXAnLCBlID0+IHtcbiAgICAgICAgICAgIGxldCBybmc7XG4gICAgICAgICAgICBpZiAoZS50YXJnZXQgPT09IGVkaXRvci5nZXREb2MoKS5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgcm5nID0gc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgICAgICAgICBlZGl0b3IuZ2V0Qm9keSgpLmZvY3VzKCk7XG4gICAgICAgICAgICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZWRvd24nKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQ2FyZXRDb250YWluZXIkMihybmcuc3RhcnRDb250YWluZXIpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5wbGFjZUNhcmV0QXQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5zZXRSbmcocm5nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVtb3ZlSHJPbkJhY2tzcGFjZSA9ICgpID0+IHtcbiAgICAgICAgZWRpdG9yLm9uKCdrZXlkb3duJywgZSA9PiB7XG4gICAgICAgICAgaWYgKCFpc0RlZmF1bHRQcmV2ZW50ZWQoZSkgJiYgZS5rZXlDb2RlID09PSBCQUNLU1BBQ0UpIHtcbiAgICAgICAgICAgIGlmICghZWRpdG9yLmdldEJvZHkoKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaHInKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpICYmIHNlbGVjdGlvbi5nZXRSbmcoKS5zdGFydE9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgICBjb25zdCBub2RlID0gc2VsZWN0aW9uLmdldE5vZGUoKTtcbiAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNTaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgICAgICAgIGlmIChub2RlLm5vZGVOYW1lID09PSAnSFInKSB7XG4gICAgICAgICAgICAgICAgZG9tLnJlbW92ZShub2RlKTtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChwcmV2aW91c1NpYmxpbmcgJiYgcHJldmlvdXNTaWJsaW5nLm5vZGVOYW1lICYmIHByZXZpb3VzU2libGluZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaHInKSB7XG4gICAgICAgICAgICAgICAgZG9tLnJlbW92ZShwcmV2aW91c1NpYmxpbmcpO1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZm9jdXNCb2R5ID0gKCkgPT4ge1xuICAgICAgICBpZiAoIVJhbmdlLnByb3RvdHlwZS5nZXRDbGllbnRSZWN0cykge1xuICAgICAgICAgIGVkaXRvci5vbignbW91c2Vkb3duJywgZSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlzRGVmYXVsdFByZXZlbnRlZChlKSAmJiBlLnRhcmdldC5ub2RlTmFtZSA9PT0gJ0hUTUwnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgICAgICAgICBib2R5LmJsdXIoKTtcbiAgICAgICAgICAgICAgRGVsYXkuc2V0RWRpdG9yVGltZW91dChlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgICBib2R5LmZvY3VzKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VsZWN0Q29udHJvbEVsZW1lbnRzID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB2aXN1YWxBaWRzQW5jaG9yQ2xhc3MgPSBnZXRWaXN1YWxBaWRzQW5jaG9yQ2xhc3MoZWRpdG9yKTtcbiAgICAgICAgZWRpdG9yLm9uKCdjbGljaycsIGUgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0O1xuICAgICAgICAgIGlmICgvXihJTUd8SFIpJC8udGVzdCh0YXJnZXQubm9kZU5hbWUpICYmIGRvbS5pc0VkaXRhYmxlKHRhcmdldC5wYXJlbnROb2RlKSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3QodGFyZ2V0KTtcbiAgICAgICAgICAgIGVkaXRvci5ub2RlQ2hhbmdlZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGFyZ2V0Lm5vZGVOYW1lID09PSAnQScgJiYgZG9tLmhhc0NsYXNzKHRhcmdldCwgdmlzdWFsQWlkc0FuY2hvckNsYXNzKSAmJiB0YXJnZXQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDAgJiYgZG9tLmlzRWRpdGFibGUodGFyZ2V0LnBhcmVudE5vZGUpKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBzZWxlY3Rpb24uc2VsZWN0KHRhcmdldCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZW1vdmVTdHlsZXNXaGVuRGVsZXRpbmdBY3Jvc3NCbG9ja0VsZW1lbnRzID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBnZXRBdHRyaWJ1dGVBcHBseUZ1bmN0aW9uID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gZG9tLmdldEF0dHJpYnMoc2VsZWN0aW9uLmdldFN0YXJ0KCkuY2xvbmVOb2RlKGZhbHNlKSk7XG4gICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHNlbGVjdGlvbi5nZXRTdGFydCgpO1xuICAgICAgICAgICAgaWYgKHRhcmdldCAhPT0gZWRpdG9yLmdldEJvZHkoKSkge1xuICAgICAgICAgICAgICBkb20uc2V0QXR0cmliKHRhcmdldCwgJ3N0eWxlJywgbnVsbCk7XG4gICAgICAgICAgICAgIGVhY2godGVtcGxhdGUsIGF0dHIgPT4ge1xuICAgICAgICAgICAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGVOb2RlKGF0dHIuY2xvbmVOb2RlKHRydWUpKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaXNTZWxlY3Rpb25BY3Jvc3NFbGVtZW50cyA9ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gIXNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpICYmIGRvbS5nZXRQYXJlbnQoc2VsZWN0aW9uLmdldFN0YXJ0KCksIGRvbS5pc0Jsb2NrKSAhPT0gZG9tLmdldFBhcmVudChzZWxlY3Rpb24uZ2V0RW5kKCksIGRvbS5pc0Jsb2NrKTtcbiAgICAgICAgfTtcbiAgICAgICAgZWRpdG9yLm9uKCdrZXlwcmVzcycsIGUgPT4ge1xuICAgICAgICAgIGxldCBhcHBseUF0dHJpYnV0ZXM7XG4gICAgICAgICAgaWYgKCFpc0RlZmF1bHRQcmV2ZW50ZWQoZSkgJiYgKGUua2V5Q29kZSA9PT0gOCB8fCBlLmtleUNvZGUgPT09IDQ2KSAmJiBpc1NlbGVjdGlvbkFjcm9zc0VsZW1lbnRzKCkpIHtcbiAgICAgICAgICAgIGFwcGx5QXR0cmlidXRlcyA9IGdldEF0dHJpYnV0ZUFwcGx5RnVuY3Rpb24oKTtcbiAgICAgICAgICAgIGVkaXRvci5nZXREb2MoKS5leGVjQ29tbWFuZCgnZGVsZXRlJywgZmFsc2UpO1xuICAgICAgICAgICAgYXBwbHlBdHRyaWJ1dGVzKCk7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRvbS5iaW5kKGVkaXRvci5nZXREb2MoKSwgJ2N1dCcsIGUgPT4ge1xuICAgICAgICAgIGlmICghaXNEZWZhdWx0UHJldmVudGVkKGUpICYmIGlzU2VsZWN0aW9uQWNyb3NzRWxlbWVudHMoKSkge1xuICAgICAgICAgICAgY29uc3QgYXBwbHlBdHRyaWJ1dGVzID0gZ2V0QXR0cmlidXRlQXBwbHlGdW5jdGlvbigpO1xuICAgICAgICAgICAgRGVsYXkuc2V0RWRpdG9yVGltZW91dChlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgYXBwbHlBdHRyaWJ1dGVzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGRpc2FibGVCYWNrc3BhY2VJbnRvQVRhYmxlID0gKCkgPT4ge1xuICAgICAgICBlZGl0b3Iub24oJ2tleWRvd24nLCBlID0+IHtcbiAgICAgICAgICBpZiAoIWlzRGVmYXVsdFByZXZlbnRlZChlKSAmJiBlLmtleUNvZGUgPT09IEJBQ0tTUEFDRSkge1xuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpICYmIHNlbGVjdGlvbi5nZXRSbmcoKS5zdGFydE9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c1NpYmxpbmcgPSBzZWxlY3Rpb24uZ2V0Tm9kZSgpLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgICAgaWYgKHByZXZpb3VzU2libGluZyAmJiBwcmV2aW91c1NpYmxpbmcubm9kZU5hbWUgJiYgcHJldmlvdXNTaWJsaW5nLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICd0YWJsZScpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZW1vdmVCbG9ja1F1b3RlT25CYWNrU3BhY2UgPSAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5vbigna2V5ZG93bicsIGUgPT4ge1xuICAgICAgICAgIGlmIChpc0RlZmF1bHRQcmV2ZW50ZWQoZSkgfHwgZS5rZXlDb2RlICE9PSBWSy5CQUNLU1BBQ0UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHJuZyA9IHNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBybmcuc3RhcnRDb250YWluZXI7XG4gICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcm5nLnN0YXJ0T2Zmc2V0O1xuICAgICAgICAgIGNvbnN0IHJvb3QgPSBkb20uZ2V0Um9vdCgpO1xuICAgICAgICAgIGxldCBwYXJlbnQgPSBjb250YWluZXI7XG4gICAgICAgICAgaWYgKCFybmcuY29sbGFwc2VkIHx8IG9mZnNldCAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3aGlsZSAocGFyZW50LnBhcmVudE5vZGUgJiYgcGFyZW50LnBhcmVudE5vZGUuZmlyc3RDaGlsZCA9PT0gcGFyZW50ICYmIHBhcmVudC5wYXJlbnROb2RlICE9PSByb290KSB7XG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBhcmVudC5ub2RlTmFtZSA9PT0gJ0JMT0NLUVVPVEUnKSB7XG4gICAgICAgICAgICBlZGl0b3IuZm9ybWF0dGVyLnRvZ2dsZSgnYmxvY2txdW90ZScsIHVuZGVmaW5lZCwgcGFyZW50KTtcbiAgICAgICAgICAgIHJuZyA9IGRvbS5jcmVhdGVSbmcoKTtcbiAgICAgICAgICAgIHJuZy5zZXRTdGFydChjb250YWluZXIsIDApO1xuICAgICAgICAgICAgcm5nLnNldEVuZChjb250YWluZXIsIDApO1xuICAgICAgICAgICAgc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0R2Vja29FZGl0aW5nT3B0aW9ucyA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2V0T3B0cyA9ICgpID0+IHtcbiAgICAgICAgICBzZXRFZGl0b3JDb21tYW5kU3RhdGUoJ1N0eWxlV2l0aENTUycsIGZhbHNlKTtcbiAgICAgICAgICBzZXRFZGl0b3JDb21tYW5kU3RhdGUoJ2VuYWJsZUlubGluZVRhYmxlRWRpdGluZycsIGZhbHNlKTtcbiAgICAgICAgICBpZiAoIWdldE9iamVjdFJlc2l6aW5nKGVkaXRvcikpIHtcbiAgICAgICAgICAgIHNldEVkaXRvckNvbW1hbmRTdGF0ZSgnZW5hYmxlT2JqZWN0UmVzaXppbmcnLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAoIWlzUmVhZE9ubHkkMShlZGl0b3IpKSB7XG4gICAgICAgICAgZWRpdG9yLm9uKCdCZWZvcmVFeGVjQ29tbWFuZCBtb3VzZWRvd24nLCBzZXRPcHRzKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkZEJyQWZ0ZXJMYXN0TGlua3MgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpeExpbmtzID0gKCkgPT4ge1xuICAgICAgICAgIGVhY2goZG9tLnNlbGVjdCgnYTpub3QoW2RhdGEtbWNlLWJsb2NrXSknKSwgbm9kZSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBsZXQgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgICAgIGNvbnN0IHJvb3QgPSBkb20uZ2V0Um9vdCgpO1xuICAgICAgICAgICAgaWYgKChwYXJlbnROb2RlID09PSBudWxsIHx8IHBhcmVudE5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmVudE5vZGUubGFzdENoaWxkKSA9PT0gbm9kZSkge1xuICAgICAgICAgICAgICB3aGlsZSAocGFyZW50Tm9kZSAmJiAhZG9tLmlzQmxvY2socGFyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoKChfYSA9IHBhcmVudE5vZGUucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxhc3RDaGlsZCkgIT09IHBhcmVudE5vZGUgfHwgcGFyZW50Tm9kZSA9PT0gcm9vdCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRvbS5hZGQocGFyZW50Tm9kZSwgJ2JyJywgeyAnZGF0YS1tY2UtYm9ndXMnOiAxIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBlZGl0b3Iub24oJ1NldENvbnRlbnQgRXhlY0NvbW1hbmQnLCBlID0+IHtcbiAgICAgICAgICBpZiAoZS50eXBlID09PSAnc2V0Y29udGVudCcgfHwgZS5jb21tYW5kID09PSAnbWNlSW5zZXJ0TGluaycpIHtcbiAgICAgICAgICAgIGZpeExpbmtzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXREZWZhdWx0QmxvY2tUeXBlID0gKCkgPT4ge1xuICAgICAgICBlZGl0b3Iub24oJ2luaXQnLCAoKSA9PiB7XG4gICAgICAgICAgc2V0RWRpdG9yQ29tbWFuZFN0YXRlKCdEZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yJywgZ2V0Rm9yY2VkUm9vdEJsb2NrKGVkaXRvcikpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpc0FsbENvbnRlbnRTZWxlY3RlZCA9IGVkaXRvciA9PiB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgICByZXR1cm4gcm5nLnN0YXJ0Q29udGFpbmVyID09PSBybmcuZW5kQ29udGFpbmVyICYmIHJuZy5zdGFydENvbnRhaW5lciA9PT0gYm9keSAmJiBybmcuc3RhcnRPZmZzZXQgPT09IDAgJiYgcm5nLmVuZE9mZnNldCA9PT0gYm9keS5jaGlsZE5vZGVzLmxlbmd0aDtcbiAgICAgIH07XG4gICAgICBjb25zdCBub3JtYWxpemVTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5vbigna2V5dXAgZm9jdXNpbiBtb3VzZXVwJywgZSA9PiB7XG4gICAgICAgICAgaWYgKCFWSy5tb2RpZmllclByZXNzZWQoZSkgJiYgIWlzQWxsQ29udGVudFNlbGVjdGVkKGVkaXRvcikpIHtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5ub3JtYWxpemUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNob3dCcm9rZW5JbWFnZUljb24gPSAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5jb250ZW50U3R5bGVzLnB1c2goJ2ltZzotbW96LWJyb2tlbiB7JyArICctbW96LWZvcmNlLWJyb2tlbi1pbWFnZS1pY29uOjE7JyArICdtaW4td2lkdGg6MjRweDsnICsgJ21pbi1oZWlnaHQ6MjRweCcgKyAnfScpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3RvcmVGb2N1c09uS2V5RG93biA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFlZGl0b3IuaW5saW5lKSB7XG4gICAgICAgICAgZWRpdG9yLm9uKCdrZXlkb3duJywgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgICAgICAgICAgZWRpdG9yLmdldFdpbigpLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBib2R5SGVpZ2h0ID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWVkaXRvci5pbmxpbmUpIHtcbiAgICAgICAgICBlZGl0b3IuY29udGVudFN0eWxlcy5wdXNoKCdib2R5IHttaW4taGVpZ2h0OiAxNTBweH0nKTtcbiAgICAgICAgICBlZGl0b3Iub24oJ2NsaWNrJywgZSA9PiB7XG4gICAgICAgICAgICBsZXQgcm5nO1xuICAgICAgICAgICAgaWYgKGUudGFyZ2V0Lm5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICAgICAgICAgICAgcm5nID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcbiAgICAgICAgICAgICAgZWRpdG9yLmdldEJvZHkoKS5mb2N1cygpO1xuICAgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuICAgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLm5vcm1hbGl6ZSgpO1xuICAgICAgICAgICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGJsb2NrQ21kQXJyb3dOYXZpZ2F0aW9uID0gKCkgPT4ge1xuICAgICAgICBpZiAoaXNNYWMpIHtcbiAgICAgICAgICBlZGl0b3Iub24oJ2tleWRvd24nLCBlID0+IHtcbiAgICAgICAgICAgIGlmIChWSy5tZXRhS2V5UHJlc3NlZChlKSAmJiAhZS5zaGlmdEtleSAmJiAoZS5rZXlDb2RlID09PSAzNyB8fCBlLmtleUNvZGUgPT09IDM5KSkge1xuICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0U2VsKCk7XG4gICAgICAgICAgICAgIHNlbGVjdGlvbi5tb2RpZnkoJ21vdmUnLCBlLmtleUNvZGUgPT09IDM3ID8gJ2JhY2t3YXJkJyA6ICdmb3J3YXJkJywgJ2xpbmVib3VuZGFyeScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgdGFwTGlua3NBbmRJbWFnZXMgPSAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5vbignY2xpY2snLCBlID0+IHtcbiAgICAgICAgICBsZXQgZWxtID0gZS50YXJnZXQ7XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKGVsbS50YWdOYW1lID09PSAnQScpIHtcbiAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSB3aGlsZSAoZWxtID0gZWxtLnBhcmVudE5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLmNvbnRlbnRTdHlsZXMucHVzaCgnLm1jZS1jb250ZW50LWJvZHkgey13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZX0nKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBibG9ja0Zvcm1TdWJtaXRJbnNpZGVFZGl0b3IgPSAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5vbignaW5pdCcsICgpID0+IHtcbiAgICAgICAgICBlZGl0b3IuZG9tLmJpbmQoZWRpdG9yLmdldEJvZHkoKSwgJ3N1Ym1pdCcsIGUgPT4ge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZW1vdmVBcHBsZUludGVyY2hhbmdlQnJzID0gKCkgPT4ge1xuICAgICAgICBwYXJzZXIuYWRkTm9kZUZpbHRlcignYnInLCBub2RlcyA9PiB7XG4gICAgICAgICAgbGV0IGkgPSBub2Rlcy5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgaWYgKG5vZGVzW2ldLmF0dHIoJ2NsYXNzJykgPT09ICdBcHBsZS1pbnRlcmNoYW5nZS1uZXdsaW5lJykge1xuICAgICAgICAgICAgICBub2Rlc1tpXS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlZnJlc2hDb250ZW50RWRpdGFibGUgPSBub29wO1xuICAgICAgY29uc3QgaXNIaWRkZW4gPSAoKSA9PiB7XG4gICAgICAgIGlmICghaXNHZWNrbyB8fCBlZGl0b3IucmVtb3ZlZCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWwgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFNlbCgpO1xuICAgICAgICByZXR1cm4gIXNlbCB8fCAhc2VsLnJhbmdlQ291bnQgfHwgc2VsLnJhbmdlQ291bnQgPT09IDA7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0dXBSdGMgPSAoKSA9PiB7XG4gICAgICAgIGlmIChpc1dlYktpdCkge1xuICAgICAgICAgIGRvY3VtZW50RWxlbWVudEVkaXRpbmdGb2N1cygpO1xuICAgICAgICAgIHNlbGVjdENvbnRyb2xFbGVtZW50cygpO1xuICAgICAgICAgIGJsb2NrRm9ybVN1Ym1pdEluc2lkZUVkaXRvcigpO1xuICAgICAgICAgIHNlbGVjdEFsbCgpO1xuICAgICAgICAgIGlmIChpc2lPUykge1xuICAgICAgICAgICAgcmVzdG9yZUZvY3VzT25LZXlEb3duKCk7XG4gICAgICAgICAgICBib2R5SGVpZ2h0KCk7XG4gICAgICAgICAgICB0YXBMaW5rc0FuZEltYWdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNHZWNrbykge1xuICAgICAgICAgIGZvY3VzQm9keSgpO1xuICAgICAgICAgIHNldEdlY2tvRWRpdGluZ09wdGlvbnMoKTtcbiAgICAgICAgICBzaG93QnJva2VuSW1hZ2VJY29uKCk7XG4gICAgICAgICAgYmxvY2tDbWRBcnJvd05hdmlnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGRyb3BEcmFnRW5kRXZlbnQgPSAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5vbignZHJvcCcsIGV2ZW50ID0+IHtcbiAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IChfYSA9IGV2ZW50LmRhdGFUcmFuc2ZlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldERhdGEoJ3RleHQvaHRtbCcpO1xuICAgICAgICAgIGlmIChpc1N0cmluZyhkYXRhKSAmJiAvXjxpbWdbXj5dKj4kLy50ZXN0KGRhdGEpKSB7XG4gICAgICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ2RyYWdlbmQnLCBuZXcgd2luZG93LkRyYWdFdmVudCgnZHJhZ2VuZCcsIGV2ZW50KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXR1cCA9ICgpID0+IHtcbiAgICAgICAgcmVtb3ZlQmxvY2tRdW90ZU9uQmFja1NwYWNlKCk7XG4gICAgICAgIGVtcHR5RWRpdG9yV2hlbkRlbGV0aW5nKCk7XG4gICAgICAgIGlmICghRW52LndpbmRvd3NQaG9uZSkge1xuICAgICAgICAgIG5vcm1hbGl6ZVNlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1dlYktpdCkge1xuICAgICAgICAgIGRvY3VtZW50RWxlbWVudEVkaXRpbmdGb2N1cygpO1xuICAgICAgICAgIHNlbGVjdENvbnRyb2xFbGVtZW50cygpO1xuICAgICAgICAgIHNldERlZmF1bHRCbG9ja1R5cGUoKTtcbiAgICAgICAgICBibG9ja0Zvcm1TdWJtaXRJbnNpZGVFZGl0b3IoKTtcbiAgICAgICAgICBkaXNhYmxlQmFja3NwYWNlSW50b0FUYWJsZSgpO1xuICAgICAgICAgIHJlbW92ZUFwcGxlSW50ZXJjaGFuZ2VCcnMoKTtcbiAgICAgICAgICBpZiAoaXNpT1MpIHtcbiAgICAgICAgICAgIHJlc3RvcmVGb2N1c09uS2V5RG93bigpO1xuICAgICAgICAgICAgYm9keUhlaWdodCgpO1xuICAgICAgICAgICAgdGFwTGlua3NBbmRJbWFnZXMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0QWxsKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0dlY2tvKSB7XG4gICAgICAgICAgcmVtb3ZlSHJPbkJhY2tzcGFjZSgpO1xuICAgICAgICAgIGZvY3VzQm9keSgpO1xuICAgICAgICAgIHJlbW92ZVN0eWxlc1doZW5EZWxldGluZ0Fjcm9zc0Jsb2NrRWxlbWVudHMoKTtcbiAgICAgICAgICBzZXRHZWNrb0VkaXRpbmdPcHRpb25zKCk7XG4gICAgICAgICAgYWRkQnJBZnRlckxhc3RMaW5rcygpO1xuICAgICAgICAgIHNob3dCcm9rZW5JbWFnZUljb24oKTtcbiAgICAgICAgICBibG9ja0NtZEFycm93TmF2aWdhdGlvbigpO1xuICAgICAgICAgIGRpc2FibGVCYWNrc3BhY2VJbnRvQVRhYmxlKCk7XG4gICAgICAgICAgZHJvcERyYWdFbmRFdmVudCgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKGlzUnRjKGVkaXRvcikpIHtcbiAgICAgICAgc2V0dXBSdGMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldHVwKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWZyZXNoQ29udGVudEVkaXRhYmxlLFxuICAgICAgICBpc0hpZGRlblxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgRE9NJDYgPSBET01VdGlscy5ET007XG4gICAgY29uc3QgYXBwZW5kU3R5bGUgPSAoZWRpdG9yLCB0ZXh0KSA9PiB7XG4gICAgICBjb25zdCBib2R5ID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBnZXRTdHlsZUNvbnRhaW5lcihnZXRSb290Tm9kZShib2R5KSk7XG4gICAgICBjb25zdCBzdHlsZSA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdzdHlsZScpO1xuICAgICAgc2V0JDMoc3R5bGUsICd0eXBlJywgJ3RleHQvY3NzJyk7XG4gICAgICBhcHBlbmQkMShzdHlsZSwgU3VnYXJFbGVtZW50LmZyb21UZXh0KHRleHQpKTtcbiAgICAgIGFwcGVuZCQxKGNvbnRhaW5lciwgc3R5bGUpO1xuICAgICAgZWRpdG9yLm9uKCdyZW1vdmUnLCAoKSA9PiB7XG4gICAgICAgIHJlbW92ZSQ1KHN0eWxlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZ2V0Um9vdE5hbWUgPSBlZGl0b3IgPT4gZWRpdG9yLmlubGluZSA/IGVkaXRvci5nZXRFbGVtZW50KCkubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCByZW1vdmVVbmRlZmluZWQgPSBvYmogPT4gZmlsdGVyJDQob2JqLCB2ID0+IGlzVW5kZWZpbmVkKHYpID09PSBmYWxzZSk7XG4gICAgY29uc3QgbWtQYXJzZXJTZXR0aW5ncyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBnZXRPcHRpb24gPSBlZGl0b3Iub3B0aW9ucy5nZXQ7XG4gICAgICBjb25zdCBibG9iQ2FjaGUgPSBlZGl0b3IuZWRpdG9yVXBsb2FkLmJsb2JDYWNoZTtcbiAgICAgIHJldHVybiByZW1vdmVVbmRlZmluZWQoe1xuICAgICAgICBhbGxvd19jb25kaXRpb25hbF9jb21tZW50czogZ2V0T3B0aW9uKCdhbGxvd19jb25kaXRpb25hbF9jb21tZW50cycpLFxuICAgICAgICBhbGxvd19odG1sX2RhdGFfdXJsczogZ2V0T3B0aW9uKCdhbGxvd19odG1sX2RhdGFfdXJscycpLFxuICAgICAgICBhbGxvd19zdmdfZGF0YV91cmxzOiBnZXRPcHRpb24oJ2FsbG93X3N2Z19kYXRhX3VybHMnKSxcbiAgICAgICAgYWxsb3dfaHRtbF9pbl9uYW1lZF9hbmNob3I6IGdldE9wdGlvbignYWxsb3dfaHRtbF9pbl9uYW1lZF9hbmNob3InKSxcbiAgICAgICAgYWxsb3dfc2NyaXB0X3VybHM6IGdldE9wdGlvbignYWxsb3dfc2NyaXB0X3VybHMnKSxcbiAgICAgICAgYWxsb3dfdW5zYWZlX2xpbmtfdGFyZ2V0OiBnZXRPcHRpb24oJ2FsbG93X3Vuc2FmZV9saW5rX3RhcmdldCcpLFxuICAgICAgICBjb252ZXJ0X2ZvbnRzX3RvX3NwYW5zOiBnZXRPcHRpb24oJ2NvbnZlcnRfZm9udHNfdG9fc3BhbnMnKSxcbiAgICAgICAgZml4X2xpc3RfZWxlbWVudHM6IGdldE9wdGlvbignZml4X2xpc3RfZWxlbWVudHMnKSxcbiAgICAgICAgZm9udF9zaXplX2xlZ2FjeV92YWx1ZXM6IGdldE9wdGlvbignZm9udF9zaXplX2xlZ2FjeV92YWx1ZXMnKSxcbiAgICAgICAgZm9yY2VkX3Jvb3RfYmxvY2s6IGdldE9wdGlvbignZm9yY2VkX3Jvb3RfYmxvY2snKSxcbiAgICAgICAgZm9yY2VkX3Jvb3RfYmxvY2tfYXR0cnM6IGdldE9wdGlvbignZm9yY2VkX3Jvb3RfYmxvY2tfYXR0cnMnKSxcbiAgICAgICAgcHJlc2VydmVfY2RhdGE6IGdldE9wdGlvbigncHJlc2VydmVfY2RhdGEnKSxcbiAgICAgICAgaW5saW5lX3N0eWxlczogZ2V0T3B0aW9uKCdpbmxpbmVfc3R5bGVzJyksXG4gICAgICAgIHJvb3RfbmFtZTogZ2V0Um9vdE5hbWUoZWRpdG9yKSxcbiAgICAgICAgc2FuaXRpemU6IGdldE9wdGlvbigneHNzX3Nhbml0aXphdGlvbicpLFxuICAgICAgICB2YWxpZGF0ZTogdHJ1ZSxcbiAgICAgICAgYmxvYl9jYWNoZTogYmxvYkNhY2hlLFxuICAgICAgICBkb2N1bWVudDogZWRpdG9yLmdldERvYygpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG1rU2NoZW1hU2V0dGluZ3MgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZ2V0T3B0aW9uID0gZWRpdG9yLm9wdGlvbnMuZ2V0O1xuICAgICAgcmV0dXJuIHJlbW92ZVVuZGVmaW5lZCh7XG4gICAgICAgIGN1c3RvbV9lbGVtZW50czogZ2V0T3B0aW9uKCdjdXN0b21fZWxlbWVudHMnKSxcbiAgICAgICAgZXh0ZW5kZWRfdmFsaWRfZWxlbWVudHM6IGdldE9wdGlvbignZXh0ZW5kZWRfdmFsaWRfZWxlbWVudHMnKSxcbiAgICAgICAgaW52YWxpZF9lbGVtZW50czogZ2V0T3B0aW9uKCdpbnZhbGlkX2VsZW1lbnRzJyksXG4gICAgICAgIGludmFsaWRfc3R5bGVzOiBnZXRPcHRpb24oJ2ludmFsaWRfc3R5bGVzJyksXG4gICAgICAgIHNjaGVtYTogZ2V0T3B0aW9uKCdzY2hlbWEnKSxcbiAgICAgICAgdmFsaWRfY2hpbGRyZW46IGdldE9wdGlvbigndmFsaWRfY2hpbGRyZW4nKSxcbiAgICAgICAgdmFsaWRfY2xhc3NlczogZ2V0T3B0aW9uKCd2YWxpZF9jbGFzc2VzJyksXG4gICAgICAgIHZhbGlkX2VsZW1lbnRzOiBnZXRPcHRpb24oJ3ZhbGlkX2VsZW1lbnRzJyksXG4gICAgICAgIHZhbGlkX3N0eWxlczogZ2V0T3B0aW9uKCd2YWxpZF9zdHlsZXMnKSxcbiAgICAgICAgdmVyaWZ5X2h0bWw6IGdldE9wdGlvbigndmVyaWZ5X2h0bWwnKSxcbiAgICAgICAgcGFkZF9lbXB0eV9ibG9ja19pbmxpbmVfY2hpbGRyZW46IGdldE9wdGlvbignZm9ybWF0X2VtcHR5X2xpbmVzJylcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbWtTZXJpYWxpemVyU2V0dGluZ3MgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgZ2V0T3B0aW9uID0gZWRpdG9yLm9wdGlvbnMuZ2V0O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubWtQYXJzZXJTZXR0aW5ncyhlZGl0b3IpLFxuICAgICAgICAuLi5ta1NjaGVtYVNldHRpbmdzKGVkaXRvciksXG4gICAgICAgIC4uLnJlbW92ZVVuZGVmaW5lZCh7XG4gICAgICAgICAgcmVtb3ZlX3RyYWlsaW5nX2JyczogZ2V0T3B0aW9uKCdyZW1vdmVfdHJhaWxpbmdfYnJzJyksXG4gICAgICAgICAgcGFkX2VtcHR5X3dpdGhfYnI6IGdldE9wdGlvbigncGFkX2VtcHR5X3dpdGhfYnInKSxcbiAgICAgICAgICB1cmxfY29udmVydGVyOiBnZXRPcHRpb24oJ3VybF9jb252ZXJ0ZXInKSxcbiAgICAgICAgICB1cmxfY29udmVydGVyX3Njb3BlOiBnZXRPcHRpb24oJ3VybF9jb252ZXJ0ZXJfc2NvcGUnKSxcbiAgICAgICAgICBlbGVtZW50X2Zvcm1hdDogZ2V0T3B0aW9uKCdlbGVtZW50X2Zvcm1hdCcpLFxuICAgICAgICAgIGVudGl0aWVzOiBnZXRPcHRpb24oJ2VudGl0aWVzJyksXG4gICAgICAgICAgZW50aXR5X2VuY29kaW5nOiBnZXRPcHRpb24oJ2VudGl0eV9lbmNvZGluZycpLFxuICAgICAgICAgIGluZGVudDogZ2V0T3B0aW9uKCdpbmRlbnQnKSxcbiAgICAgICAgICBpbmRlbnRfYWZ0ZXI6IGdldE9wdGlvbignaW5kZW50X2FmdGVyJyksXG4gICAgICAgICAgaW5kZW50X2JlZm9yZTogZ2V0T3B0aW9uKCdpbmRlbnRfYmVmb3JlJylcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVQYXJzZXIgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgcGFyc2VyID0gRG9tUGFyc2VyKG1rUGFyc2VyU2V0dGluZ3MoZWRpdG9yKSwgZWRpdG9yLnNjaGVtYSk7XG4gICAgICBwYXJzZXIuYWRkQXR0cmlidXRlRmlsdGVyKCdzcmMsaHJlZixzdHlsZSx0YWJpbmRleCcsIChub2RlcywgbmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBkb20gPSBlZGl0b3IuZG9tO1xuICAgICAgICBjb25zdCBpbnRlcm5hbE5hbWUgPSAnZGF0YS1tY2UtJyArIG5hbWU7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICAgIGxldCB2YWx1ZSA9IG5vZGUuYXR0cihuYW1lKTtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgIW5vZGUuYXR0cihpbnRlcm5hbE5hbWUpKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUuaW5kZXhPZignZGF0YTonKSA9PT0gMCB8fCB2YWx1ZS5pbmRleE9mKCdibG9iOicpID09PSAwKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdzdHlsZScpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBkb20uc2VyaWFsaXplU3R5bGUoZG9tLnBhcnNlU3R5bGUodmFsdWUpLCBub2RlLm5hbWUpO1xuICAgICAgICAgICAgICBpZiAoIXZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBub2RlLmF0dHIoaW50ZXJuYWxOYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgIG5vZGUuYXR0cihuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICd0YWJpbmRleCcpIHtcbiAgICAgICAgICAgICAgbm9kZS5hdHRyKGludGVybmFsTmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgICBub2RlLmF0dHIobmFtZSwgbnVsbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBub2RlLmF0dHIoaW50ZXJuYWxOYW1lLCBlZGl0b3IuY29udmVydFVSTCh2YWx1ZSwgbmFtZSwgbm9kZS5uYW1lKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHBhcnNlci5hZGROb2RlRmlsdGVyKCdzY3JpcHQnLCBub2RlcyA9PiB7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSBub2RlLmF0dHIoJ3R5cGUnKSB8fCAnbm8vdHlwZSc7XG4gICAgICAgICAgaWYgKHR5cGUuaW5kZXhPZignbWNlLScpICE9PSAwKSB7XG4gICAgICAgICAgICBub2RlLmF0dHIoJ3R5cGUnLCAnbWNlLScgKyB0eXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHNob3VsZFByZXNlcnZlQ0RhdGEoZWRpdG9yKSkge1xuICAgICAgICBwYXJzZXIuYWRkTm9kZUZpbHRlcignI2NkYXRhJywgbm9kZXMgPT4ge1xuICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICBsZXQgaSA9IG5vZGVzLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgICBub2RlLnR5cGUgPSA4O1xuICAgICAgICAgICAgbm9kZS5uYW1lID0gJyNjb21tZW50JztcbiAgICAgICAgICAgIG5vZGUudmFsdWUgPSAnW0NEQVRBWycgKyBlZGl0b3IuZG9tLmVuY29kZSgoX2EgPSBub2RlLnZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJykgKyAnXV0nO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBwYXJzZXIuYWRkTm9kZUZpbHRlcigncCxoMSxoMixoMyxoNCxoNSxoNixkaXYnLCBub2RlcyA9PiB7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBub25FbXB0eUVsZW1lbnRzID0gZWRpdG9yLnNjaGVtYS5nZXROb25FbXB0eUVsZW1lbnRzKCk7XG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgaWYgKG5vZGUuaXNFbXB0eShub25FbXB0eUVsZW1lbnRzKSAmJiBub2RlLmdldEFsbCgnYnInKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIG5vZGUuYXBwZW5kKG5ldyBBc3ROb2RlKCdicicsIDEpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHBhcnNlcjtcbiAgICB9O1xuICAgIGNvbnN0IGF1dG9Gb2N1cyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBhdXRvRm9jdXMgPSBnZXRBdXRvRm9jdXMoZWRpdG9yKTtcbiAgICAgIGlmIChhdXRvRm9jdXMpIHtcbiAgICAgICAgRGVsYXkuc2V0RWRpdG9yVGltZW91dChlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICBsZXQgZm9jdXNFZGl0b3I7XG4gICAgICAgICAgaWYgKGF1dG9Gb2N1cyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgZm9jdXNFZGl0b3IgPSBlZGl0b3I7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvY3VzRWRpdG9yID0gZWRpdG9yLmVkaXRvck1hbmFnZXIuZ2V0KGF1dG9Gb2N1cyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmb2N1c0VkaXRvciAmJiAhZm9jdXNFZGl0b3IuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICBmb2N1c0VkaXRvci5mb2N1cygpO1xuICAgICAgICAgICAgZm9jdXNFZGl0b3Iuc2VsZWN0aW9uLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAxMDApO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbW92ZVNlbGVjdGlvblRvRmlyc3RDYXJldFBvc2l0aW9uID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHJvb3QgPSBlZGl0b3IuZG9tLmdldFJvb3QoKTtcbiAgICAgIGlmICghZWRpdG9yLmlubGluZSAmJiAoIWhhc0FueVJhbmdlcyhlZGl0b3IpIHx8IGVkaXRvci5zZWxlY3Rpb24uZ2V0U3RhcnQodHJ1ZSkgPT09IHJvb3QpKSB7XG4gICAgICAgIGZpcnN0UG9zaXRpb25Jbihyb290KS5lYWNoKHBvcyA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHBvcy5nZXROb2RlKCk7XG4gICAgICAgICAgY29uc3QgY2FyZXRQb3MgPSBpc1RhYmxlJDIobm9kZSkgPyBmaXJzdFBvc2l0aW9uSW4obm9kZSkuZ2V0T3IocG9zKSA6IHBvcztcbiAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhjYXJldFBvcy50b1JhbmdlKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGluaXRFZGl0b3IgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmJpbmRQZW5kaW5nRXZlbnREZWxlZ2F0ZXMoKTtcbiAgICAgIGVkaXRvci5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgICBmaXJlSW5pdChlZGl0b3IpO1xuICAgICAgZWRpdG9yLmZvY3VzKHRydWUpO1xuICAgICAgbW92ZVNlbGVjdGlvblRvRmlyc3RDYXJldFBvc2l0aW9uKGVkaXRvcik7XG4gICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoeyBpbml0aWFsOiB0cnVlIH0pO1xuICAgICAgY29uc3QgaW5pdEluc3RhbmNlQ2FsbGJhY2sgPSBnZXRJbml0SW5zdGFuY2VDYWxsYmFjayhlZGl0b3IpO1xuICAgICAgaWYgKGlzRnVuY3Rpb24oaW5pdEluc3RhbmNlQ2FsbGJhY2spKSB7XG4gICAgICAgIGluaXRJbnN0YW5jZUNhbGxiYWNrLmNhbGwoZWRpdG9yLCBlZGl0b3IpO1xuICAgICAgfVxuICAgICAgYXV0b0ZvY3VzKGVkaXRvcik7XG4gICAgfTtcbiAgICBjb25zdCBnZXRTdHlsZVNoZWV0TG9hZGVyJDEgPSBlZGl0b3IgPT4gZWRpdG9yLmlubGluZSA/IGVkaXRvci51aS5zdHlsZVNoZWV0TG9hZGVyIDogZWRpdG9yLmRvbS5zdHlsZVNoZWV0TG9hZGVyO1xuICAgIGNvbnN0IG1ha2VTdHlsZXNoZWV0TG9hZGluZ1Byb21pc2VzID0gKGVkaXRvciwgY3NzLCBmcmFtZWRGb250cykgPT4ge1xuICAgICAgY29uc3QgcHJvbWlzZXMgPSBbZ2V0U3R5bGVTaGVldExvYWRlciQxKGVkaXRvcikubG9hZEFsbChjc3MpXTtcbiAgICAgIGlmIChlZGl0b3IuaW5saW5lKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlcy5jb25jYXQoW2VkaXRvci51aS5zdHlsZVNoZWV0TG9hZGVyLmxvYWRBbGwoZnJhbWVkRm9udHMpXSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBsb2FkQ29udGVudENzcyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBzdHlsZVNoZWV0TG9hZGVyID0gZ2V0U3R5bGVTaGVldExvYWRlciQxKGVkaXRvcik7XG4gICAgICBjb25zdCBmb250Q3NzID0gZ2V0Rm9udENzcyhlZGl0b3IpO1xuICAgICAgY29uc3QgY3NzID0gZWRpdG9yLmNvbnRlbnRDU1M7XG4gICAgICBjb25zdCByZW1vdmVDc3MgPSAoKSA9PiB7XG4gICAgICAgIHN0eWxlU2hlZXRMb2FkZXIudW5sb2FkQWxsKGNzcyk7XG4gICAgICAgIGlmICghZWRpdG9yLmlubGluZSkge1xuICAgICAgICAgIGVkaXRvci51aS5zdHlsZVNoZWV0TG9hZGVyLnVubG9hZEFsbChmb250Q3NzKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGxvYWRlZCA9ICgpID0+IHtcbiAgICAgICAgaWYgKGVkaXRvci5yZW1vdmVkKSB7XG4gICAgICAgICAgcmVtb3ZlQ3NzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWRpdG9yLm9uKCdyZW1vdmUnLCByZW1vdmVDc3MpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKGVkaXRvci5jb250ZW50U3R5bGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGV0IGNvbnRlbnRDc3NUZXh0ID0gJyc7XG4gICAgICAgIFRvb2xzLmVhY2goZWRpdG9yLmNvbnRlbnRTdHlsZXMsIHN0eWxlID0+IHtcbiAgICAgICAgICBjb250ZW50Q3NzVGV4dCArPSBzdHlsZSArICdcXHJcXG4nO1xuICAgICAgICB9KTtcbiAgICAgICAgZWRpdG9yLmRvbS5hZGRTdHlsZShjb250ZW50Q3NzVGV4dCk7XG4gICAgICB9XG4gICAgICBjb25zdCBhbGxTdHlsZXNoZWV0cyA9IFByb21pc2UuYWxsKG1ha2VTdHlsZXNoZWV0TG9hZGluZ1Byb21pc2VzKGVkaXRvciwgY3NzLCBmb250Q3NzKSkudGhlbihsb2FkZWQpLmNhdGNoKGxvYWRlZCk7XG4gICAgICBjb25zdCBjb250ZW50U3R5bGUgPSBnZXRDb250ZW50U3R5bGUoZWRpdG9yKTtcbiAgICAgIGlmIChjb250ZW50U3R5bGUpIHtcbiAgICAgICAgYXBwZW5kU3R5bGUoZWRpdG9yLCBjb250ZW50U3R5bGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFsbFN0eWxlc2hlZXRzO1xuICAgIH07XG4gICAgY29uc3QgcHJlSW5pdCA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBlZGl0b3IuZ2V0RG9jKCksIGJvZHkgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgZmlyZVByZUluaXQoZWRpdG9yKTtcbiAgICAgIGlmICghc2hvdWxkQnJvd3NlclNwZWxsY2hlY2soZWRpdG9yKSkge1xuICAgICAgICBkb2MuYm9keS5zcGVsbGNoZWNrID0gZmFsc2U7XG4gICAgICAgIERPTSQ2LnNldEF0dHJpYihib2R5LCAnc3BlbGxjaGVjaycsICdmYWxzZScpO1xuICAgICAgfVxuICAgICAgZWRpdG9yLnF1aXJrcyA9IFF1aXJrcyhlZGl0b3IpO1xuICAgICAgZmlyZVBvc3RSZW5kZXIoZWRpdG9yKTtcbiAgICAgIGNvbnN0IGRpcmVjdGlvbmFsaXR5ID0gZ2V0RGlyZWN0aW9uYWxpdHkoZWRpdG9yKTtcbiAgICAgIGlmIChkaXJlY3Rpb25hbGl0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGJvZHkuZGlyID0gZGlyZWN0aW9uYWxpdHk7XG4gICAgICB9XG4gICAgICBjb25zdCBwcm90ZWN0ID0gZ2V0UHJvdGVjdChlZGl0b3IpO1xuICAgICAgaWYgKHByb3RlY3QpIHtcbiAgICAgICAgZWRpdG9yLm9uKCdCZWZvcmVTZXRDb250ZW50JywgZSA9PiB7XG4gICAgICAgICAgVG9vbHMuZWFjaChwcm90ZWN0LCBwYXR0ZXJuID0+IHtcbiAgICAgICAgICAgIGUuY29udGVudCA9IGUuY29udGVudC5yZXBsYWNlKHBhdHRlcm4sIHN0ciA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAnPCEtLW1jZTpwcm90ZWN0ZWQgJyArIGVzY2FwZShzdHIpICsgJy0tPic7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlZGl0b3Iub24oJ1NldENvbnRlbnQnLCAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5hZGRWaXN1YWwoZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignY29tcG9zaXRpb25zdGFydCBjb21wb3NpdGlvbmVuZCcsIGUgPT4ge1xuICAgICAgICBlZGl0b3IuY29tcG9zaW5nID0gZS50eXBlID09PSAnY29tcG9zaXRpb25zdGFydCc7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGxvYWRJbml0aWFsQ29udGVudCA9IGVkaXRvciA9PiB7XG4gICAgICBpZiAoIWlzUnRjKGVkaXRvcikpIHtcbiAgICAgICAgZWRpdG9yLmxvYWQoe1xuICAgICAgICAgIGluaXRpYWw6IHRydWUsXG4gICAgICAgICAgZm9ybWF0OiAnaHRtbCdcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlZGl0b3Iuc3RhcnRDb250ZW50ID0gZWRpdG9yLmdldENvbnRlbnQoeyBmb3JtYXQ6ICdyYXcnIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW5pdEVkaXRvcldpdGhJbml0aWFsQ29udGVudCA9IGVkaXRvciA9PiB7XG4gICAgICBpZiAoZWRpdG9yLnJlbW92ZWQgIT09IHRydWUpIHtcbiAgICAgICAgbG9hZEluaXRpYWxDb250ZW50KGVkaXRvcik7XG4gICAgICAgIGluaXRFZGl0b3IoZWRpdG9yKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHN0YXJ0UHJvZ3Jlc3MgPSBlZGl0b3IgPT4ge1xuICAgICAgbGV0IGNhbmNlbGVkID0gZmFsc2U7XG4gICAgICBjb25zdCBwcm9ncmVzc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKCFjYW5jZWxlZCkge1xuICAgICAgICAgIGVkaXRvci5zZXRQcm9ncmVzc1N0YXRlKHRydWUpO1xuICAgICAgICB9XG4gICAgICB9LCA1MDApO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHByb2dyZXNzVGltZW91dCk7XG4gICAgICAgIGNhbmNlbGVkID0gdHJ1ZTtcbiAgICAgICAgZWRpdG9yLnNldFByb2dyZXNzU3RhdGUoZmFsc2UpO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbnRlbnRCb2R5TG9hZGVkID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldEVsbSA9IGVkaXRvci5nZXRFbGVtZW50KCk7XG4gICAgICBsZXQgZG9jID0gZWRpdG9yLmdldERvYygpO1xuICAgICAgaWYgKGVkaXRvci5pbmxpbmUpIHtcbiAgICAgICAgRE9NJDYuYWRkQ2xhc3ModGFyZ2V0RWxtLCAnbWNlLWNvbnRlbnQtYm9keScpO1xuICAgICAgICBlZGl0b3IuY29udGVudERvY3VtZW50ID0gZG9jID0gZG9jdW1lbnQ7XG4gICAgICAgIGVkaXRvci5jb250ZW50V2luZG93ID0gd2luZG93O1xuICAgICAgICBlZGl0b3IuYm9keUVsZW1lbnQgPSB0YXJnZXRFbG07XG4gICAgICAgIGVkaXRvci5jb250ZW50QXJlYUNvbnRhaW5lciA9IHRhcmdldEVsbTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJvZHkgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuICAgICAgYm9keS5kaXNhYmxlZCA9IHRydWU7XG4gICAgICBlZGl0b3IucmVhZG9ubHkgPSBpc1JlYWRPbmx5JDEoZWRpdG9yKTtcbiAgICAgIGVkaXRvci5fZWRpdGFibGVSb290ID0gaGFzRWRpdGFibGVSb290JDEoZWRpdG9yKTtcbiAgICAgIGlmICghZWRpdG9yLnJlYWRvbmx5ICYmIGVkaXRvci5oYXNFZGl0YWJsZVJvb3QoKSkge1xuICAgICAgICBpZiAoZWRpdG9yLmlubGluZSAmJiBET00kNi5nZXRTdHlsZShib2R5LCAncG9zaXRpb24nLCB0cnVlKSA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgICBib2R5LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgICAgICAgfVxuICAgICAgICBib2R5LmNvbnRlbnRFZGl0YWJsZSA9ICd0cnVlJztcbiAgICAgIH1cbiAgICAgIGJvZHkuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIGVkaXRvci5lZGl0b3JVcGxvYWQgPSBFZGl0b3JVcGxvYWQoZWRpdG9yKTtcbiAgICAgIGVkaXRvci5zY2hlbWEgPSBTY2hlbWEobWtTY2hlbWFTZXR0aW5ncyhlZGl0b3IpKTtcbiAgICAgIGVkaXRvci5kb20gPSBET01VdGlscyhkb2MsIHtcbiAgICAgICAga2VlcF92YWx1ZXM6IHRydWUsXG4gICAgICAgIHVybF9jb252ZXJ0ZXI6IGVkaXRvci5jb252ZXJ0VVJMLFxuICAgICAgICB1cmxfY29udmVydGVyX3Njb3BlOiBlZGl0b3IsXG4gICAgICAgIHVwZGF0ZV9zdHlsZXM6IHRydWUsXG4gICAgICAgIHJvb3RfZWxlbWVudDogZWRpdG9yLmlubGluZSA/IGVkaXRvci5nZXRCb2R5KCkgOiBudWxsLFxuICAgICAgICBjb2xsZWN0OiBlZGl0b3IuaW5saW5lLFxuICAgICAgICBzY2hlbWE6IGVkaXRvci5zY2hlbWEsXG4gICAgICAgIGNvbnRlbnRDc3NDb3JzOiBzaG91bGRVc2VDb250ZW50Q3NzQ29ycyhlZGl0b3IpLFxuICAgICAgICByZWZlcnJlclBvbGljeTogZ2V0UmVmZXJyZXJQb2xpY3koZWRpdG9yKSxcbiAgICAgICAgb25TZXRBdHRyaWI6IGUgPT4ge1xuICAgICAgICAgIGVkaXRvci5kaXNwYXRjaCgnU2V0QXR0cmliJywgZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLnBhcnNlciA9IGNyZWF0ZVBhcnNlcihlZGl0b3IpO1xuICAgICAgZWRpdG9yLnNlcmlhbGl6ZXIgPSBEb21TZXJpYWxpemVyKG1rU2VyaWFsaXplclNldHRpbmdzKGVkaXRvciksIGVkaXRvcik7XG4gICAgICBlZGl0b3Iuc2VsZWN0aW9uID0gRWRpdG9yU2VsZWN0aW9uKGVkaXRvci5kb20sIGVkaXRvci5nZXRXaW4oKSwgZWRpdG9yLnNlcmlhbGl6ZXIsIGVkaXRvcik7XG4gICAgICBlZGl0b3IuYW5ub3RhdG9yID0gQW5ub3RhdG9yKGVkaXRvcik7XG4gICAgICBlZGl0b3IuZm9ybWF0dGVyID0gRm9ybWF0dGVyKGVkaXRvcik7XG4gICAgICBlZGl0b3IudW5kb01hbmFnZXIgPSBVbmRvTWFuYWdlcihlZGl0b3IpO1xuICAgICAgZWRpdG9yLl9ub2RlQ2hhbmdlRGlzcGF0Y2hlciA9IG5ldyBOb2RlQ2hhbmdlKGVkaXRvcik7XG4gICAgICBlZGl0b3IuX3NlbGVjdGlvbk92ZXJyaWRlcyA9IFNlbGVjdGlvbk92ZXJyaWRlcyhlZGl0b3IpO1xuICAgICAgc2V0dXAkbyhlZGl0b3IpO1xuICAgICAgc2V0dXAkNihlZGl0b3IpO1xuICAgICAgc2V0dXAkbShlZGl0b3IpO1xuICAgICAgaWYgKCFpc1J0YyhlZGl0b3IpKSB7XG4gICAgICAgIHNldHVwJDUoZWRpdG9yKTtcbiAgICAgICAgc2V0dXAkMShlZGl0b3IpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2FyZXQgPSBzZXR1cCRiKGVkaXRvcik7XG4gICAgICBzZXR1cCRwKGVkaXRvciwgY2FyZXQpO1xuICAgICAgc2V0dXAkbihlZGl0b3IpO1xuICAgICAgc2V0dXAkcShlZGl0b3IpO1xuICAgICAgc2V0dXAkNyhlZGl0b3IpO1xuICAgICAgY29uc3Qgc2V0dXBSdGNUaHVuayA9IHNldHVwJHMoZWRpdG9yKTtcbiAgICAgIHByZUluaXQoZWRpdG9yKTtcbiAgICAgIHNldHVwUnRjVGh1bmsuZm9sZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbmNlbFByb2dyZXNzID0gc3RhcnRQcm9ncmVzcyhlZGl0b3IpO1xuICAgICAgICBsb2FkQ29udGVudENzcyhlZGl0b3IpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGluaXRFZGl0b3JXaXRoSW5pdGlhbENvbnRlbnQoZWRpdG9yKTtcbiAgICAgICAgICBjYW5jZWxQcm9ncmVzcygpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHNldHVwUnRjID0+IHtcbiAgICAgICAgZWRpdG9yLnNldFByb2dyZXNzU3RhdGUodHJ1ZSk7XG4gICAgICAgIGxvYWRDb250ZW50Q3NzKGVkaXRvcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgc2V0dXBSdGMoKS50aGVuKF9ydGNNb2RlID0+IHtcbiAgICAgICAgICAgIGVkaXRvci5zZXRQcm9ncmVzc1N0YXRlKGZhbHNlKTtcbiAgICAgICAgICAgIGluaXRFZGl0b3JXaXRoSW5pdGlhbENvbnRlbnQoZWRpdG9yKTtcbiAgICAgICAgICAgIGJpbmRFdmVudHMoZWRpdG9yKTtcbiAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgZWRpdG9yLm5vdGlmaWNhdGlvbk1hbmFnZXIub3Blbih7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IFN0cmluZyhlcnIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGluaXRFZGl0b3JXaXRoSW5pdGlhbENvbnRlbnQoZWRpdG9yKTtcbiAgICAgICAgICAgIGJpbmRFdmVudHMoZWRpdG9yKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmlsdGVyID0gYWx3YXlzO1xuICAgIGNvbnN0IGJpbmQgPSAoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIpID0+IGJpbmQkMihlbGVtZW50LCBldmVudCwgZmlsdGVyLCBoYW5kbGVyKTtcblxuICAgIGNvbnN0IERPTSQ1ID0gRE9NVXRpbHMuRE9NO1xuICAgIGNvbnN0IGNyZWF0ZUlmcmFtZUVsZW1lbnQgPSAoaWQsIHRpdGxlLCBjdXN0b21BdHRycywgdGFiaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGlmcmFtZSA9IFN1Z2FyRWxlbWVudC5mcm9tVGFnKCdpZnJhbWUnKTtcbiAgICAgIHRhYmluZGV4LmVhY2godCA9PiBzZXQkMyhpZnJhbWUsICd0YWJpbmRleCcsIHQpKTtcbiAgICAgIHNldEFsbCQxKGlmcmFtZSwgY3VzdG9tQXR0cnMpO1xuICAgICAgc2V0QWxsJDEoaWZyYW1lLCB7XG4gICAgICAgIGlkOiBpZCArICdfaWZyJyxcbiAgICAgICAgZnJhbWVCb3JkZXI6ICcwJyxcbiAgICAgICAgYWxsb3dUcmFuc3BhcmVuY3k6ICd0cnVlJyxcbiAgICAgICAgdGl0bGVcbiAgICAgIH0pO1xuICAgICAgYWRkJDIoaWZyYW1lLCAndG94LWVkaXQtYXJlYV9faWZyYW1lJyk7XG4gICAgICByZXR1cm4gaWZyYW1lO1xuICAgIH07XG4gICAgY29uc3QgZ2V0SWZyYW1lSHRtbCA9IGVkaXRvciA9PiB7XG4gICAgICBsZXQgaWZyYW1lSFRNTCA9IGdldERvY1R5cGUoZWRpdG9yKSArICc8aHRtbD48aGVhZD4nO1xuICAgICAgaWYgKGdldERvY3VtZW50QmFzZVVybChlZGl0b3IpICE9PSBlZGl0b3IuZG9jdW1lbnRCYXNlVXJsKSB7XG4gICAgICAgIGlmcmFtZUhUTUwgKz0gJzxiYXNlIGhyZWY9XCInICsgZWRpdG9yLmRvY3VtZW50QmFzZVVSSS5nZXRVUkkoKSArICdcIiAvPic7XG4gICAgICB9XG4gICAgICBpZnJhbWVIVE1MICs9ICc8bWV0YSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD1VVEYtOFwiIC8+JztcbiAgICAgIGNvbnN0IGJvZHlJZCA9IGdldEJvZHlJZChlZGl0b3IpO1xuICAgICAgY29uc3QgYm9keUNsYXNzID0gZ2V0Qm9keUNsYXNzKGVkaXRvcik7XG4gICAgICBjb25zdCB0cmFuc2xhdGVkQXJpYVRleHQgPSBlZGl0b3IudHJhbnNsYXRlKGdldElmcmFtZUFyaWFUZXh0KGVkaXRvcikpO1xuICAgICAgaWYgKGdldENvbnRlbnRTZWN1cml0eVBvbGljeShlZGl0b3IpKSB7XG4gICAgICAgIGlmcmFtZUhUTUwgKz0gJzxtZXRhIGh0dHAtZXF1aXY9XCJDb250ZW50LVNlY3VyaXR5LVBvbGljeVwiIGNvbnRlbnQ9XCInICsgZ2V0Q29udGVudFNlY3VyaXR5UG9saWN5KGVkaXRvcikgKyAnXCIgLz4nO1xuICAgICAgfVxuICAgICAgaWZyYW1lSFRNTCArPSAnPC9oZWFkPicgKyBgPGJvZHkgaWQ9XCIkeyBib2R5SWQgfVwiIGNsYXNzPVwibWNlLWNvbnRlbnQtYm9keSAkeyBib2R5Q2xhc3MgfVwiIGRhdGEtaWQ9XCIkeyBlZGl0b3IuaWQgfVwiIGFyaWEtbGFiZWw9XCIkeyB0cmFuc2xhdGVkQXJpYVRleHQgfVwiPmAgKyAnPGJyPicgKyAnPC9ib2R5PjwvaHRtbD4nO1xuICAgICAgcmV0dXJuIGlmcmFtZUhUTUw7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVJZnJhbWUgPSAoZWRpdG9yLCBib3hJbmZvKSA9PiB7XG4gICAgICBjb25zdCBpZnJhbWVUaXRsZSA9IGVkaXRvci50cmFuc2xhdGUoJ1JpY2ggVGV4dCBBcmVhJyk7XG4gICAgICBjb25zdCB0YWJpbmRleCA9IGdldE9wdChTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0RWxlbWVudCgpKSwgJ3RhYmluZGV4JykuYmluZCh0b0ludCk7XG4gICAgICBjb25zdCBpZnIgPSBjcmVhdGVJZnJhbWVFbGVtZW50KGVkaXRvci5pZCwgaWZyYW1lVGl0bGUsIGdldElmcmFtZUF0dHJzKGVkaXRvciksIHRhYmluZGV4KS5kb207XG4gICAgICBpZnIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICBpZnIub25sb2FkID0gbnVsbDtcbiAgICAgICAgZWRpdG9yLmRpc3BhdGNoKCdsb2FkJyk7XG4gICAgICB9O1xuICAgICAgZWRpdG9yLmNvbnRlbnRBcmVhQ29udGFpbmVyID0gYm94SW5mby5pZnJhbWVDb250YWluZXI7XG4gICAgICBlZGl0b3IuaWZyYW1lRWxlbWVudCA9IGlmcjtcbiAgICAgIGVkaXRvci5pZnJhbWVIVE1MID0gZ2V0SWZyYW1lSHRtbChlZGl0b3IpO1xuICAgICAgRE9NJDUuYWRkKGJveEluZm8uaWZyYW1lQ29udGFpbmVyLCBpZnIpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0dXBJZnJhbWVCb2R5ID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGlmcmFtZSA9IGVkaXRvci5pZnJhbWVFbGVtZW50O1xuICAgICAgY29uc3QgcmVhZHkgPSAoKSA9PiB7XG4gICAgICAgIGVkaXRvci5jb250ZW50RG9jdW1lbnQgPSBpZnJhbWUuY29udGVudERvY3VtZW50O1xuICAgICAgICBjb250ZW50Qm9keUxvYWRlZChlZGl0b3IpO1xuICAgICAgfTtcbiAgICAgIGlmIChzaG91bGRVc2VEb2N1bWVudFdyaXRlKGVkaXRvcikgfHwgRW52LmJyb3dzZXIuaXNGaXJlZm94KCkpIHtcbiAgICAgICAgY29uc3QgZG9jID0gZWRpdG9yLmdldERvYygpO1xuICAgICAgICBkb2Mub3BlbigpO1xuICAgICAgICBkb2Mud3JpdGUoZWRpdG9yLmlmcmFtZUhUTUwpO1xuICAgICAgICBkb2MuY2xvc2UoKTtcbiAgICAgICAgcmVhZHkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGJpbmRlciA9IGJpbmQoU3VnYXJFbGVtZW50LmZyb21Eb20oaWZyYW1lKSwgJ2xvYWQnLCAoKSA9PiB7XG4gICAgICAgICAgYmluZGVyLnVuYmluZCgpO1xuICAgICAgICAgIHJlYWR5KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZnJhbWUuc3JjZG9jID0gZWRpdG9yLmlmcmFtZUhUTUw7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbml0JDEgPSAoZWRpdG9yLCBib3hJbmZvKSA9PiB7XG4gICAgICBjcmVhdGVJZnJhbWUoZWRpdG9yLCBib3hJbmZvKTtcbiAgICAgIGlmIChib3hJbmZvLmVkaXRvckNvbnRhaW5lcikge1xuICAgICAgICBib3hJbmZvLmVkaXRvckNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gZWRpdG9yLm9yZ0Rpc3BsYXk7XG4gICAgICAgIGVkaXRvci5oaWRkZW4gPSBET00kNS5pc0hpZGRlbihib3hJbmZvLmVkaXRvckNvbnRhaW5lcik7XG4gICAgICB9XG4gICAgICBlZGl0b3IuZ2V0RWxlbWVudCgpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICBET00kNS5zZXRBdHRyaWIoZWRpdG9yLmlkLCAnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgICAgZWRpdG9yLmdldEVsZW1lbnQoKS5zdHlsZS52aXNpYmlsaXR5ID0gZWRpdG9yLm9yZ1Zpc2liaWxpdHk7XG4gICAgICBzZXR1cElmcmFtZUJvZHkoZWRpdG9yKTtcbiAgICB9O1xuXG4gICAgY29uc3QgRE9NJDQgPSBET01VdGlscy5ET007XG4gICAgY29uc3QgaW5pdFBsdWdpbiA9IChlZGl0b3IsIGluaXRpYWxpemVkUGx1Z2lucywgcGx1Z2luKSA9PiB7XG4gICAgICBjb25zdCBQbHVnaW4gPSBQbHVnaW5NYW5hZ2VyLmdldChwbHVnaW4pO1xuICAgICAgY29uc3QgcGx1Z2luVXJsID0gUGx1Z2luTWFuYWdlci51cmxzW3BsdWdpbl0gfHwgZWRpdG9yLmRvY3VtZW50QmFzZVVybC5yZXBsYWNlKC9cXC8kLywgJycpO1xuICAgICAgcGx1Z2luID0gVG9vbHMudHJpbShwbHVnaW4pO1xuICAgICAgaWYgKFBsdWdpbiAmJiBUb29scy5pbkFycmF5KGluaXRpYWxpemVkUGx1Z2lucywgcGx1Z2luKSA9PT0gLTEpIHtcbiAgICAgICAgaWYgKGVkaXRvci5wbHVnaW5zW3BsdWdpbl0pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwbHVnaW5JbnN0YW5jZSA9IFBsdWdpbihlZGl0b3IsIHBsdWdpblVybCkgfHwge307XG4gICAgICAgICAgZWRpdG9yLnBsdWdpbnNbcGx1Z2luXSA9IHBsdWdpbkluc3RhbmNlO1xuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHBsdWdpbkluc3RhbmNlLmluaXQpKSB7XG4gICAgICAgICAgICBwbHVnaW5JbnN0YW5jZS5pbml0KGVkaXRvciwgcGx1Z2luVXJsKTtcbiAgICAgICAgICAgIGluaXRpYWxpemVkUGx1Z2lucy5wdXNoKHBsdWdpbik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcGx1Z2luSW5pdEVycm9yKGVkaXRvciwgcGx1Z2luLCBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdHJpbUxlZ2FjeVByZWZpeCA9IG5hbWUgPT4ge1xuICAgICAgcmV0dXJuIG5hbWUucmVwbGFjZSgvXlxcLS8sICcnKTtcbiAgICB9O1xuICAgIGNvbnN0IGluaXRQbHVnaW5zID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGluaXRpYWxpemVkUGx1Z2lucyA9IFtdO1xuICAgICAgZWFjaCRlKGdldFBsdWdpbnMoZWRpdG9yKSwgbmFtZSA9PiB7XG4gICAgICAgIGluaXRQbHVnaW4oZWRpdG9yLCBpbml0aWFsaXplZFBsdWdpbnMsIHRyaW1MZWdhY3lQcmVmaXgobmFtZSkpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBpbml0SWNvbnMgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgaWNvblBhY2tOYW1lID0gVG9vbHMudHJpbShnZXRJY29uUGFja05hbWUoZWRpdG9yKSk7XG4gICAgICBjb25zdCBjdXJyZW50SWNvbnMgPSBlZGl0b3IudWkucmVnaXN0cnkuZ2V0QWxsKCkuaWNvbnM7XG4gICAgICBjb25zdCBsb2FkSWNvbnMgPSB7XG4gICAgICAgIC4uLkljb25NYW5hZ2VyLmdldCgnZGVmYXVsdCcpLmljb25zLFxuICAgICAgICAuLi5JY29uTWFuYWdlci5nZXQoaWNvblBhY2tOYW1lKS5pY29uc1xuICAgICAgfTtcbiAgICAgIGVhY2gkZChsb2FkSWNvbnMsIChzdmdEYXRhLCBpY29uKSA9PiB7XG4gICAgICAgIGlmICghaGFzJDIoY3VycmVudEljb25zLCBpY29uKSkge1xuICAgICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRJY29uKGljb24sIHN2Z0RhdGEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGluaXRUaGVtZSA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCB0aGVtZSA9IGdldFRoZW1lKGVkaXRvcik7XG4gICAgICBpZiAoaXNTdHJpbmcodGhlbWUpKSB7XG4gICAgICAgIGNvbnN0IFRoZW1lID0gVGhlbWVNYW5hZ2VyLmdldCh0aGVtZSk7XG4gICAgICAgIGVkaXRvci50aGVtZSA9IFRoZW1lKGVkaXRvciwgVGhlbWVNYW5hZ2VyLnVybHNbdGhlbWVdKSB8fCB7fTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZWRpdG9yLnRoZW1lLmluaXQpKSB7XG4gICAgICAgICAgZWRpdG9yLnRoZW1lLmluaXQoZWRpdG9yLCBUaGVtZU1hbmFnZXIudXJsc1t0aGVtZV0gfHwgZWRpdG9yLmRvY3VtZW50QmFzZVVybC5yZXBsYWNlKC9cXC8kLywgJycpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWRpdG9yLnRoZW1lID0ge307XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbml0TW9kZWwgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgbW9kZWwgPSBnZXRNb2RlbChlZGl0b3IpO1xuICAgICAgY29uc3QgTW9kZWwgPSBNb2RlbE1hbmFnZXIuZ2V0KG1vZGVsKTtcbiAgICAgIGVkaXRvci5tb2RlbCA9IE1vZGVsKGVkaXRvciwgTW9kZWxNYW5hZ2VyLnVybHNbbW9kZWxdKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckZyb21Mb2FkZWRUaGVtZSA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCByZW5kZXIgPSBlZGl0b3IudGhlbWUucmVuZGVyVUk7XG4gICAgICByZXR1cm4gcmVuZGVyID8gcmVuZGVyKCkgOiByZW5kZXJUaGVtZUZhbHNlKGVkaXRvcik7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJGcm9tVGhlbWVGdW5jID0gZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGVsbSA9IGVkaXRvci5nZXRFbGVtZW50KCk7XG4gICAgICBjb25zdCB0aGVtZSA9IGdldFRoZW1lKGVkaXRvcik7XG4gICAgICBjb25zdCBpbmZvID0gdGhlbWUoZWRpdG9yLCBlbG0pO1xuICAgICAgaWYgKGluZm8uZWRpdG9yQ29udGFpbmVyLm5vZGVUeXBlKSB7XG4gICAgICAgIGluZm8uZWRpdG9yQ29udGFpbmVyLmlkID0gaW5mby5lZGl0b3JDb250YWluZXIuaWQgfHwgZWRpdG9yLmlkICsgJ19wYXJlbnQnO1xuICAgICAgfVxuICAgICAgaWYgKGluZm8uaWZyYW1lQ29udGFpbmVyICYmIGluZm8uaWZyYW1lQ29udGFpbmVyLm5vZGVUeXBlKSB7XG4gICAgICAgIGluZm8uaWZyYW1lQ29udGFpbmVyLmlkID0gaW5mby5pZnJhbWVDb250YWluZXIuaWQgfHwgZWRpdG9yLmlkICsgJ19pZnJhbWVjb250YWluZXInO1xuICAgICAgfVxuICAgICAgaW5mby5oZWlnaHQgPSBpbmZvLmlmcmFtZUhlaWdodCA/IGluZm8uaWZyYW1lSGVpZ2h0IDogZWxtLm9mZnNldEhlaWdodDtcbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlVGhlbWVGYWxzZVJlc3VsdCA9IChlbGVtZW50LCBpZnJhbWUpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVkaXRvckNvbnRhaW5lcjogZWxlbWVudCxcbiAgICAgICAgaWZyYW1lQ29udGFpbmVyOiBpZnJhbWUsXG4gICAgICAgIGFwaToge31cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJUaGVtZUZhbHNlSWZyYW1lID0gdGFyZ2V0RWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBpZnJhbWVDb250YWluZXIgPSBET00kNC5jcmVhdGUoJ2RpdicpO1xuICAgICAgRE9NJDQuaW5zZXJ0QWZ0ZXIoaWZyYW1lQ29udGFpbmVyLCB0YXJnZXRFbGVtZW50KTtcbiAgICAgIHJldHVybiBjcmVhdGVUaGVtZUZhbHNlUmVzdWx0KGlmcmFtZUNvbnRhaW5lciwgaWZyYW1lQ29udGFpbmVyKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlclRoZW1lRmFsc2UgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGVkaXRvci5nZXRFbGVtZW50KCk7XG4gICAgICByZXR1cm4gZWRpdG9yLmlubGluZSA/IGNyZWF0ZVRoZW1lRmFsc2VSZXN1bHQobnVsbCkgOiByZW5kZXJUaGVtZUZhbHNlSWZyYW1lKHRhcmdldEVsZW1lbnQpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyVGhlbWVVaSA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBlbG0gPSBlZGl0b3IuZ2V0RWxlbWVudCgpO1xuICAgICAgZWRpdG9yLm9yZ0Rpc3BsYXkgPSBlbG0uc3R5bGUuZGlzcGxheTtcbiAgICAgIGlmIChpc1N0cmluZyhnZXRUaGVtZShlZGl0b3IpKSkge1xuICAgICAgICByZXR1cm4gcmVuZGVyRnJvbUxvYWRlZFRoZW1lKGVkaXRvcik7XG4gICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24oZ2V0VGhlbWUoZWRpdG9yKSkpIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlckZyb21UaGVtZUZ1bmMoZWRpdG9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZW5kZXJUaGVtZUZhbHNlKGVkaXRvcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhdWdtZW50RWRpdG9yVWlBcGkgPSAoZWRpdG9yLCBhcGkpID0+IHtcbiAgICAgIGNvbnN0IHVpQXBpRmFjYWRlID0ge1xuICAgICAgICBzaG93OiBPcHRpb25hbC5mcm9tKGFwaS5zaG93KS5nZXRPcihub29wKSxcbiAgICAgICAgaGlkZTogT3B0aW9uYWwuZnJvbShhcGkuaGlkZSkuZ2V0T3Iobm9vcCksXG4gICAgICAgIGlzRW5hYmxlZDogT3B0aW9uYWwuZnJvbShhcGkuaXNFbmFibGVkKS5nZXRPcihhbHdheXMpLFxuICAgICAgICBzZXRFbmFibGVkOiBzdGF0ZSA9PiB7XG4gICAgICAgICAgaWYgKCFlZGl0b3IubW9kZS5pc1JlYWRPbmx5KCkpIHtcbiAgICAgICAgICAgIE9wdGlvbmFsLmZyb20oYXBpLnNldEVuYWJsZWQpLmVhY2goZiA9PiBmKHN0YXRlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZWRpdG9yLnVpID0ge1xuICAgICAgICAuLi5lZGl0b3IudWksXG4gICAgICAgIC4uLnVpQXBpRmFjYWRlXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgaW5pdCA9IGFzeW5jIGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IuZGlzcGF0Y2goJ1NjcmlwdHNMb2FkZWQnKTtcbiAgICAgIGluaXRJY29ucyhlZGl0b3IpO1xuICAgICAgaW5pdFRoZW1lKGVkaXRvcik7XG4gICAgICBpbml0TW9kZWwoZWRpdG9yKTtcbiAgICAgIGluaXRQbHVnaW5zKGVkaXRvcik7XG4gICAgICBjb25zdCByZW5kZXJJbmZvID0gYXdhaXQgcmVuZGVyVGhlbWVVaShlZGl0b3IpO1xuICAgICAgYXVnbWVudEVkaXRvclVpQXBpKGVkaXRvciwgT3B0aW9uYWwuZnJvbShyZW5kZXJJbmZvLmFwaSkuZ2V0T3Ioe30pKTtcbiAgICAgIGVkaXRvci5lZGl0b3JDb250YWluZXIgPSByZW5kZXJJbmZvLmVkaXRvckNvbnRhaW5lcjtcbiAgICAgIGFwcGVuZENvbnRlbnRDc3NGcm9tU2V0dGluZ3MoZWRpdG9yKTtcbiAgICAgIGlmIChlZGl0b3IuaW5saW5lKSB7XG4gICAgICAgIGNvbnRlbnRCb2R5TG9hZGVkKGVkaXRvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0JDEoZWRpdG9yLCB7XG4gICAgICAgICAgZWRpdG9yQ29udGFpbmVyOiByZW5kZXJJbmZvLmVkaXRvckNvbnRhaW5lcixcbiAgICAgICAgICBpZnJhbWVDb250YWluZXI6IHJlbmRlckluZm8uaWZyYW1lQ29udGFpbmVyXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBET00kMyA9IERPTVV0aWxzLkRPTTtcbiAgICBjb25zdCBoYXNTa2lwTG9hZFByZWZpeCA9IG5hbWUgPT4gbmFtZS5jaGFyQXQoMCkgPT09ICctJztcbiAgICBjb25zdCBsb2FkTGFuZ3VhZ2UgPSAoc2NyaXB0TG9hZGVyLCBlZGl0b3IpID0+IHtcbiAgICAgIGNvbnN0IGxhbmd1YWdlQ29kZSA9IGdldExhbmd1YWdlQ29kZShlZGl0b3IpO1xuICAgICAgY29uc3QgbGFuZ3VhZ2VVcmwgPSBnZXRMYW5ndWFnZVVybChlZGl0b3IpO1xuICAgICAgaWYgKCFJMThuLmhhc0NvZGUobGFuZ3VhZ2VDb2RlKSAmJiBsYW5ndWFnZUNvZGUgIT09ICdlbicpIHtcbiAgICAgICAgY29uc3QgdXJsID0gaXNOb3RFbXB0eShsYW5ndWFnZVVybCkgPyBsYW5ndWFnZVVybCA6IGAkeyBlZGl0b3IuZWRpdG9yTWFuYWdlci5iYXNlVVJMIH0vbGFuZ3MvJHsgbGFuZ3VhZ2VDb2RlIH0uanNgO1xuICAgICAgICBzY3JpcHRMb2FkZXIuYWRkKHVybCkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgIGxhbmd1YWdlTG9hZEVycm9yKGVkaXRvciwgdXJsLCBsYW5ndWFnZUNvZGUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGxvYWRUaGVtZSA9IChlZGl0b3IsIHN1ZmZpeCkgPT4ge1xuICAgICAgY29uc3QgdGhlbWUgPSBnZXRUaGVtZShlZGl0b3IpO1xuICAgICAgaWYgKGlzU3RyaW5nKHRoZW1lKSAmJiAhaGFzU2tpcExvYWRQcmVmaXgodGhlbWUpICYmICFoYXMkMihUaGVtZU1hbmFnZXIudXJscywgdGhlbWUpKSB7XG4gICAgICAgIGNvbnN0IHRoZW1lVXJsID0gZ2V0VGhlbWVVcmwoZWRpdG9yKTtcbiAgICAgICAgY29uc3QgdXJsID0gdGhlbWVVcmwgPyBlZGl0b3IuZG9jdW1lbnRCYXNlVVJJLnRvQWJzb2x1dGUodGhlbWVVcmwpIDogYHRoZW1lcy8keyB0aGVtZSB9L3RoZW1lJHsgc3VmZml4IH0uanNgO1xuICAgICAgICBUaGVtZU1hbmFnZXIubG9hZCh0aGVtZSwgdXJsKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgdGhlbWVMb2FkRXJyb3IoZWRpdG9yLCB1cmwsIHRoZW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBsb2FkTW9kZWwgPSAoZWRpdG9yLCBzdWZmaXgpID0+IHtcbiAgICAgIGNvbnN0IG1vZGVsID0gZ2V0TW9kZWwoZWRpdG9yKTtcbiAgICAgIGlmIChtb2RlbCAhPT0gJ3BsdWdpbicgJiYgIWhhcyQyKE1vZGVsTWFuYWdlci51cmxzLCBtb2RlbCkpIHtcbiAgICAgICAgY29uc3QgbW9kZWxVcmwgPSBnZXRNb2RlbFVybChlZGl0b3IpO1xuICAgICAgICBjb25zdCB1cmwgPSBpc1N0cmluZyhtb2RlbFVybCkgPyBlZGl0b3IuZG9jdW1lbnRCYXNlVVJJLnRvQWJzb2x1dGUobW9kZWxVcmwpIDogYG1vZGVscy8keyBtb2RlbCB9L21vZGVsJHsgc3VmZml4IH0uanNgO1xuICAgICAgICBNb2RlbE1hbmFnZXIubG9hZChtb2RlbCwgdXJsKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgbW9kZWxMb2FkRXJyb3IoZWRpdG9yLCB1cmwsIG1vZGVsKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRJY29uc1VybE1ldGFGcm9tVXJsID0gZWRpdG9yID0+IE9wdGlvbmFsLmZyb20oZ2V0SWNvbnNVcmwoZWRpdG9yKSkuZmlsdGVyKGlzTm90RW1wdHkpLm1hcCh1cmwgPT4gKHtcbiAgICAgIHVybCxcbiAgICAgIG5hbWU6IE9wdGlvbmFsLm5vbmUoKVxuICAgIH0pKTtcbiAgICBjb25zdCBnZXRJY29uc1VybE1ldGFGcm9tTmFtZSA9IChlZGl0b3IsIG5hbWUsIHN1ZmZpeCkgPT4gT3B0aW9uYWwuZnJvbShuYW1lKS5maWx0ZXIobmFtZSA9PiBpc05vdEVtcHR5KG5hbWUpICYmICFJY29uTWFuYWdlci5oYXMobmFtZSkpLm1hcChuYW1lID0+ICh7XG4gICAgICB1cmw6IGAkeyBlZGl0b3IuZWRpdG9yTWFuYWdlci5iYXNlVVJMIH0vaWNvbnMvJHsgbmFtZSB9L2ljb25zJHsgc3VmZml4IH0uanNgLFxuICAgICAgbmFtZTogT3B0aW9uYWwuc29tZShuYW1lKVxuICAgIH0pKTtcbiAgICBjb25zdCBsb2FkSWNvbnMgPSAoc2NyaXB0TG9hZGVyLCBlZGl0b3IsIHN1ZmZpeCkgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdEljb25zVXJsID0gZ2V0SWNvbnNVcmxNZXRhRnJvbU5hbWUoZWRpdG9yLCAnZGVmYXVsdCcsIHN1ZmZpeCk7XG4gICAgICBjb25zdCBjdXN0b21JY29uc1VybCA9IGdldEljb25zVXJsTWV0YUZyb21VcmwoZWRpdG9yKS5vclRodW5rKCgpID0+IGdldEljb25zVXJsTWV0YUZyb21OYW1lKGVkaXRvciwgZ2V0SWNvblBhY2tOYW1lKGVkaXRvciksICcnKSk7XG4gICAgICBlYWNoJGUoY2F0KFtcbiAgICAgICAgZGVmYXVsdEljb25zVXJsLFxuICAgICAgICBjdXN0b21JY29uc1VybFxuICAgICAgXSksIHVybE1ldGEgPT4ge1xuICAgICAgICBzY3JpcHRMb2FkZXIuYWRkKHVybE1ldGEudXJsKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgaWNvbnNMb2FkRXJyb3IoZWRpdG9yLCB1cmxNZXRhLnVybCwgdXJsTWV0YS5uYW1lLmdldE9yVW5kZWZpbmVkKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgbG9hZFBsdWdpbnMgPSAoZWRpdG9yLCBzdWZmaXgpID0+IHtcbiAgICAgIGNvbnN0IGxvYWRQbHVnaW4gPSAobmFtZSwgdXJsKSA9PiB7XG4gICAgICAgIFBsdWdpbk1hbmFnZXIubG9hZChuYW1lLCB1cmwpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICBwbHVnaW5Mb2FkRXJyb3IoZWRpdG9yLCB1cmwsIG5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBlYWNoJGQoZ2V0RXh0ZXJuYWxQbHVnaW5zJDEoZWRpdG9yKSwgKHVybCwgbmFtZSkgPT4ge1xuICAgICAgICBsb2FkUGx1Z2luKG5hbWUsIHVybCk7XG4gICAgICAgIGVkaXRvci5vcHRpb25zLnNldCgncGx1Z2lucycsIGdldFBsdWdpbnMoZWRpdG9yKS5jb25jYXQobmFtZSkpO1xuICAgICAgfSk7XG4gICAgICBlYWNoJGUoZ2V0UGx1Z2lucyhlZGl0b3IpLCBwbHVnaW4gPT4ge1xuICAgICAgICBwbHVnaW4gPSBUb29scy50cmltKHBsdWdpbik7XG4gICAgICAgIGlmIChwbHVnaW4gJiYgIVBsdWdpbk1hbmFnZXIudXJsc1twbHVnaW5dICYmICFoYXNTa2lwTG9hZFByZWZpeChwbHVnaW4pKSB7XG4gICAgICAgICAgbG9hZFBsdWdpbihwbHVnaW4sIGBwbHVnaW5zLyR7IHBsdWdpbiB9L3BsdWdpbiR7IHN1ZmZpeCB9LmpzYCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaXNUaGVtZUxvYWRlZCA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCB0aGVtZSA9IGdldFRoZW1lKGVkaXRvcik7XG4gICAgICByZXR1cm4gIWlzU3RyaW5nKHRoZW1lKSB8fCBpc05vbk51bGxhYmxlKFRoZW1lTWFuYWdlci5nZXQodGhlbWUpKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzTW9kZWxMb2FkZWQgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgbW9kZWwgPSBnZXRNb2RlbChlZGl0b3IpO1xuICAgICAgcmV0dXJuIGlzTm9uTnVsbGFibGUoTW9kZWxNYW5hZ2VyLmdldChtb2RlbCkpO1xuICAgIH07XG4gICAgY29uc3QgbG9hZFNjcmlwdHMgPSAoZWRpdG9yLCBzdWZmaXgpID0+IHtcbiAgICAgIGNvbnN0IHNjcmlwdExvYWRlciA9IFNjcmlwdExvYWRlci5TY3JpcHRMb2FkZXI7XG4gICAgICBjb25zdCBpbml0RWRpdG9yID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWVkaXRvci5yZW1vdmVkICYmIGlzVGhlbWVMb2FkZWQoZWRpdG9yKSAmJiBpc01vZGVsTG9hZGVkKGVkaXRvcikpIHtcbiAgICAgICAgICBpbml0KGVkaXRvcik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBsb2FkVGhlbWUoZWRpdG9yLCBzdWZmaXgpO1xuICAgICAgbG9hZE1vZGVsKGVkaXRvciwgc3VmZml4KTtcbiAgICAgIGxvYWRMYW5ndWFnZShzY3JpcHRMb2FkZXIsIGVkaXRvcik7XG4gICAgICBsb2FkSWNvbnMoc2NyaXB0TG9hZGVyLCBlZGl0b3IsIHN1ZmZpeCk7XG4gICAgICBsb2FkUGx1Z2lucyhlZGl0b3IsIHN1ZmZpeCk7XG4gICAgICBzY3JpcHRMb2FkZXIubG9hZFF1ZXVlKCkudGhlbihpbml0RWRpdG9yLCBpbml0RWRpdG9yKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFN0eWxlU2hlZXRMb2FkZXIgPSAoZWxlbWVudCwgZWRpdG9yKSA9PiBpbnN0YW5jZS5mb3JFbGVtZW50KGVsZW1lbnQsIHtcbiAgICAgIGNvbnRlbnRDc3NDb3JzOiBoYXNDb250ZW50Q3NzQ29ycyhlZGl0b3IpLFxuICAgICAgcmVmZXJyZXJQb2xpY3k6IGdldFJlZmVycmVyUG9saWN5KGVkaXRvcilcbiAgICB9KTtcbiAgICBjb25zdCByZW5kZXIgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgaWQgPSBlZGl0b3IuaWQ7XG4gICAgICBJMThuLnNldENvZGUoZ2V0TGFuZ3VhZ2VDb2RlKGVkaXRvcikpO1xuICAgICAgY29uc3QgcmVhZHlIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICBET00kMy51bmJpbmQod2luZG93LCAncmVhZHknLCByZWFkeUhhbmRsZXIpO1xuICAgICAgICBlZGl0b3IucmVuZGVyKCk7XG4gICAgICB9O1xuICAgICAgaWYgKCFFdmVudFV0aWxzLkV2ZW50LmRvbUxvYWRlZCkge1xuICAgICAgICBET00kMy5iaW5kKHdpbmRvdywgJ3JlYWR5JywgcmVhZHlIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFlZGl0b3IuZ2V0RWxlbWVudCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0RWxlbWVudCgpKTtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gY2xvbmUkNChlbGVtZW50KTtcbiAgICAgIGVkaXRvci5vbigncmVtb3ZlJywgKCkgPT4ge1xuICAgICAgICBlYWNocihlbGVtZW50LmRvbS5hdHRyaWJ1dGVzLCBhdHRyID0+IHJlbW92ZSRhKGVsZW1lbnQsIGF0dHIubmFtZSkpO1xuICAgICAgICBzZXRBbGwkMShlbGVtZW50LCBzbmFwc2hvdCk7XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci51aS5zdHlsZVNoZWV0TG9hZGVyID0gZ2V0U3R5bGVTaGVldExvYWRlcihlbGVtZW50LCBlZGl0b3IpO1xuICAgICAgaWYgKCFpc0lubGluZShlZGl0b3IpKSB7XG4gICAgICAgIGVkaXRvci5vcmdWaXNpYmlsaXR5ID0gZWRpdG9yLmdldEVsZW1lbnQoKS5zdHlsZS52aXNpYmlsaXR5O1xuICAgICAgICBlZGl0b3IuZ2V0RWxlbWVudCgpLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkaXRvci5pbmxpbmUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgZm9ybSA9IGVkaXRvci5nZXRFbGVtZW50KCkuZm9ybSB8fCBET00kMy5nZXRQYXJlbnQoaWQsICdmb3JtJyk7XG4gICAgICBpZiAoZm9ybSkge1xuICAgICAgICBlZGl0b3IuZm9ybUVsZW1lbnQgPSBmb3JtO1xuICAgICAgICBpZiAoaGFzSGlkZGVuSW5wdXQoZWRpdG9yKSAmJiAhaXNUZXh0YXJlYU9ySW5wdXQoZWRpdG9yLmdldEVsZW1lbnQoKSkpIHtcbiAgICAgICAgICBET00kMy5pbnNlcnRBZnRlcihET00kMy5jcmVhdGUoJ2lucHV0Jywge1xuICAgICAgICAgICAgdHlwZTogJ2hpZGRlbicsXG4gICAgICAgICAgICBuYW1lOiBpZFxuICAgICAgICAgIH0pLCBpZCk7XG4gICAgICAgICAgZWRpdG9yLmhhc0hpZGRlbklucHV0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlZGl0b3IuZm9ybUV2ZW50RGVsZWdhdGUgPSBlID0+IHtcbiAgICAgICAgICBlZGl0b3IuZGlzcGF0Y2goZS50eXBlLCBlKTtcbiAgICAgICAgfTtcbiAgICAgICAgRE9NJDMuYmluZChmb3JtLCAnc3VibWl0IHJlc2V0JywgZWRpdG9yLmZvcm1FdmVudERlbGVnYXRlKTtcbiAgICAgICAgZWRpdG9yLm9uKCdyZXNldCcsICgpID0+IHtcbiAgICAgICAgICBlZGl0b3IucmVzZXRDb250ZW50KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoc2hvdWxkUGF0Y2hTdWJtaXQoZWRpdG9yKSAmJiAhZm9ybS5zdWJtaXQubm9kZVR5cGUgJiYgIWZvcm0uc3VibWl0Lmxlbmd0aCAmJiAhZm9ybS5fbWNlT2xkU3VibWl0KSB7XG4gICAgICAgICAgZm9ybS5fbWNlT2xkU3VibWl0ID0gZm9ybS5zdWJtaXQ7XG4gICAgICAgICAgZm9ybS5zdWJtaXQgPSAoKSA9PiB7XG4gICAgICAgICAgICBlZGl0b3IuZWRpdG9yTWFuYWdlci50cmlnZ2VyU2F2ZSgpO1xuICAgICAgICAgICAgZWRpdG9yLnNldERpcnR5KGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiBmb3JtLl9tY2VPbGRTdWJtaXQoZm9ybSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWRpdG9yLndpbmRvd01hbmFnZXIgPSBXaW5kb3dNYW5hZ2VyKGVkaXRvcik7XG4gICAgICBlZGl0b3Iubm90aWZpY2F0aW9uTWFuYWdlciA9IE5vdGlmaWNhdGlvbk1hbmFnZXIoZWRpdG9yKTtcbiAgICAgIGlmIChpc0VuY29kaW5nWG1sKGVkaXRvcikpIHtcbiAgICAgICAgZWRpdG9yLm9uKCdHZXRDb250ZW50JywgZSA9PiB7XG4gICAgICAgICAgaWYgKGUuc2F2ZSkge1xuICAgICAgICAgICAgZS5jb250ZW50ID0gRE9NJDMuZW5jb2RlKGUuY29udGVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRBZGRGb3JtU3VibWl0VHJpZ2dlcihlZGl0b3IpKSB7XG4gICAgICAgIGVkaXRvci5vbignc3VibWl0JywgKCkgPT4ge1xuICAgICAgICAgIGlmIChlZGl0b3IuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIGVkaXRvci5zYXZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRBZGRVbmxvYWRUcmlnZ2VyKGVkaXRvcikpIHtcbiAgICAgICAgZWRpdG9yLl9iZWZvcmVVbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKGVkaXRvci5pbml0aWFsaXplZCAmJiAhZWRpdG9yLmRlc3Ryb3llZCAmJiAhZWRpdG9yLmlzSGlkZGVuKCkpIHtcbiAgICAgICAgICAgIGVkaXRvci5zYXZlKHtcbiAgICAgICAgICAgICAgZm9ybWF0OiAncmF3JyxcbiAgICAgICAgICAgICAgbm9fZXZlbnRzOiB0cnVlLFxuICAgICAgICAgICAgICBzZXRfZGlydHk6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGVkaXRvci5lZGl0b3JNYW5hZ2VyLm9uKCdCZWZvcmVVbmxvYWQnLCBlZGl0b3IuX2JlZm9yZVVubG9hZCk7XG4gICAgICB9XG4gICAgICBlZGl0b3IuZWRpdG9yTWFuYWdlci5hZGQoZWRpdG9yKTtcbiAgICAgIGxvYWRTY3JpcHRzKGVkaXRvciwgZWRpdG9yLnN1ZmZpeCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNldEVkaXRhYmxlUm9vdCA9IChlZGl0b3IsIHN0YXRlKSA9PiB7XG4gICAgICBpZiAoZWRpdG9yLl9lZGl0YWJsZVJvb3QgIT09IHN0YXRlKSB7XG4gICAgICAgIGVkaXRvci5fZWRpdGFibGVSb290ID0gc3RhdGU7XG4gICAgICAgIGlmICghZWRpdG9yLnJlYWRvbmx5KSB7XG4gICAgICAgICAgZWRpdG9yLmdldEJvZHkoKS5jb250ZW50RWRpdGFibGUgPSBTdHJpbmcoZWRpdG9yLmhhc0VkaXRhYmxlUm9vdCgpKTtcbiAgICAgICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgICAgICBmaXJlRWRpdGFibGVSb290U3RhdGVDaGFuZ2UoZWRpdG9yLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoYXNFZGl0YWJsZVJvb3QgPSBlZGl0b3IgPT4gZWRpdG9yLl9lZGl0YWJsZVJvb3Q7XG5cbiAgICBjb25zdCBzZWN0aW9uUmVzdWx0ID0gKHNlY3Rpb25zLCBzZXR0aW5ncykgPT4gKHtcbiAgICAgIHNlY3Rpb25zOiBjb25zdGFudChzZWN0aW9ucyksXG4gICAgICBvcHRpb25zOiBjb25zdGFudChzZXR0aW5ncylcbiAgICB9KTtcbiAgICBjb25zdCBkZXZpY2VEZXRlY3Rpb24gPSBkZXRlY3QkMigpLmRldmljZVR5cGU7XG4gICAgY29uc3QgaXNQaG9uZSA9IGRldmljZURldGVjdGlvbi5pc1Bob25lKCk7XG4gICAgY29uc3QgaXNUYWJsZXQgPSBkZXZpY2VEZXRlY3Rpb24uaXNUYWJsZXQoKTtcbiAgICBjb25zdCBub3JtYWxpemVQbHVnaW5zID0gcGx1Z2lucyA9PiB7XG4gICAgICBpZiAoaXNOdWxsYWJsZShwbHVnaW5zKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwbHVnaW5OYW1lcyA9IGlzQXJyYXkkMShwbHVnaW5zKSA/IHBsdWdpbnMgOiBwbHVnaW5zLnNwbGl0KC9bICxdLyk7XG4gICAgICAgIGNvbnN0IHRyaW1tZWRQbHVnaW5zID0gbWFwJDMocGx1Z2luTmFtZXMsIHRyaW0kMyk7XG4gICAgICAgIHJldHVybiBmaWx0ZXIkNSh0cmltbWVkUGx1Z2lucywgaXNOb3RFbXB0eSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBleHRyYWN0U2VjdGlvbnMgPSAoa2V5cywgb3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYmlmaWx0ZXIob3B0aW9ucywgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5zJDIoa2V5cywga2V5KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHNlY3Rpb25SZXN1bHQocmVzdWx0LnQsIHJlc3VsdC5mKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNlY3Rpb24gPSAoc2VjdGlvblJlc3VsdCwgbmFtZSwgZGVmYXVsdHMgPSB7fSkgPT4ge1xuICAgICAgY29uc3Qgc2VjdGlvbnMgPSBzZWN0aW9uUmVzdWx0LnNlY3Rpb25zKCk7XG4gICAgICBjb25zdCBzZWN0aW9uT3B0aW9ucyA9IGdldCRhKHNlY3Rpb25zLCBuYW1lKS5nZXRPcih7fSk7XG4gICAgICByZXR1cm4gVG9vbHMuZXh0ZW5kKHt9LCBkZWZhdWx0cywgc2VjdGlvbk9wdGlvbnMpO1xuICAgIH07XG4gICAgY29uc3QgaGFzU2VjdGlvbiA9IChzZWN0aW9uUmVzdWx0LCBuYW1lKSA9PiB7XG4gICAgICByZXR1cm4gaGFzJDIoc2VjdGlvblJlc3VsdC5zZWN0aW9ucygpLCBuYW1lKTtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNlY3Rpb25Db25maWcgPSAoc2VjdGlvblJlc3VsdCwgbmFtZSkgPT4ge1xuICAgICAgcmV0dXJuIGhhc1NlY3Rpb24oc2VjdGlvblJlc3VsdCwgbmFtZSkgPyBzZWN0aW9uUmVzdWx0LnNlY3Rpb25zKClbbmFtZV0gOiB7fTtcbiAgICB9O1xuICAgIGNvbnN0IGdldE1vYmlsZU92ZXJyaWRlT3B0aW9ucyA9IChtb2JpbGVPcHRpb25zLCBpc1Bob25lKSA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0TW9iaWxlT3B0aW9ucyA9IHtcbiAgICAgICAgdGFibGVfZ3JpZDogZmFsc2UsXG4gICAgICAgIG9iamVjdF9yZXNpemluZzogZmFsc2UsXG4gICAgICAgIHJlc2l6ZTogZmFsc2UsXG4gICAgICAgIHRvb2xiYXJfbW9kZTogZ2V0JGEobW9iaWxlT3B0aW9ucywgJ3Rvb2xiYXJfbW9kZScpLmdldE9yKCdzY3JvbGxpbmcnKSxcbiAgICAgICAgdG9vbGJhcl9zdGlja3k6IGZhbHNlXG4gICAgICB9O1xuICAgICAgY29uc3QgZGVmYXVsdFBob25lT3B0aW9ucyA9IHsgbWVudWJhcjogZmFsc2UgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRlZmF1bHRNb2JpbGVPcHRpb25zLFxuICAgICAgICAuLi5pc1Bob25lID8gZGVmYXVsdFBob25lT3B0aW9ucyA6IHt9XG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZ2V0RXh0ZXJuYWxQbHVnaW5zID0gKG92ZXJyaWRlT3B0aW9ucywgb3B0aW9ucykgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgdXNlckRlZmluZWRFeHRlcm5hbFBsdWdpbnMgPSAoX2EgPSBvcHRpb25zLmV4dGVybmFsX3BsdWdpbnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9O1xuICAgICAgaWYgKG92ZXJyaWRlT3B0aW9ucyAmJiBvdmVycmlkZU9wdGlvbnMuZXh0ZXJuYWxfcGx1Z2lucykge1xuICAgICAgICByZXR1cm4gVG9vbHMuZXh0ZW5kKHt9LCBvdmVycmlkZU9wdGlvbnMuZXh0ZXJuYWxfcGx1Z2lucywgdXNlckRlZmluZWRFeHRlcm5hbFBsdWdpbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVzZXJEZWZpbmVkRXh0ZXJuYWxQbHVnaW5zO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY29tYmluZVBsdWdpbnMgPSAoZm9yY2VkUGx1Z2lucywgcGx1Z2lucykgPT4gW1xuICAgICAgLi4ubm9ybWFsaXplUGx1Z2lucyhmb3JjZWRQbHVnaW5zKSxcbiAgICAgIC4uLm5vcm1hbGl6ZVBsdWdpbnMocGx1Z2lucylcbiAgICBdO1xuICAgIGNvbnN0IGdldFBsYXRmb3JtUGx1Z2lucyA9IChpc01vYmlsZURldmljZSwgc2VjdGlvblJlc3VsdCwgZGVza3RvcFBsdWdpbnMsIG1vYmlsZVBsdWdpbnMpID0+IHtcbiAgICAgIGlmIChpc01vYmlsZURldmljZSAmJiBoYXNTZWN0aW9uKHNlY3Rpb25SZXN1bHQsICdtb2JpbGUnKSkge1xuICAgICAgICByZXR1cm4gbW9iaWxlUGx1Z2lucztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkZXNrdG9wUGx1Z2lucztcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gKGlzTW9iaWxlRGV2aWNlLCBzZWN0aW9uUmVzdWx0LCBkZWZhdWx0T3ZlcnJpZGVPcHRpb25zLCBvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBmb3JjZWRQbHVnaW5zID0gbm9ybWFsaXplUGx1Z2lucyhkZWZhdWx0T3ZlcnJpZGVPcHRpb25zLmZvcmNlZF9wbHVnaW5zKTtcbiAgICAgIGNvbnN0IGRlc2t0b3BQbHVnaW5zID0gbm9ybWFsaXplUGx1Z2lucyhvcHRpb25zLnBsdWdpbnMpO1xuICAgICAgY29uc3QgbW9iaWxlQ29uZmlnID0gZ2V0U2VjdGlvbkNvbmZpZyhzZWN0aW9uUmVzdWx0LCAnbW9iaWxlJyk7XG4gICAgICBjb25zdCBtb2JpbGVQbHVnaW5zID0gbW9iaWxlQ29uZmlnLnBsdWdpbnMgPyBub3JtYWxpemVQbHVnaW5zKG1vYmlsZUNvbmZpZy5wbHVnaW5zKSA6IGRlc2t0b3BQbHVnaW5zO1xuICAgICAgY29uc3QgcGxhdGZvcm1QbHVnaW5zID0gZ2V0UGxhdGZvcm1QbHVnaW5zKGlzTW9iaWxlRGV2aWNlLCBzZWN0aW9uUmVzdWx0LCBkZXNrdG9wUGx1Z2lucywgbW9iaWxlUGx1Z2lucyk7XG4gICAgICBjb25zdCBjb21iaW5lZFBsdWdpbnMgPSBjb21iaW5lUGx1Z2lucyhmb3JjZWRQbHVnaW5zLCBwbGF0Zm9ybVBsdWdpbnMpO1xuICAgICAgcmV0dXJuIFRvb2xzLmV4dGVuZChvcHRpb25zLCB7XG4gICAgICAgIGZvcmNlZF9wbHVnaW5zOiBmb3JjZWRQbHVnaW5zLFxuICAgICAgICBwbHVnaW5zOiBjb21iaW5lZFBsdWdpbnNcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaXNPbk1vYmlsZSA9IChpc01vYmlsZURldmljZSwgc2VjdGlvblJlc3VsdCkgPT4ge1xuICAgICAgcmV0dXJuIGlzTW9iaWxlRGV2aWNlICYmIGhhc1NlY3Rpb24oc2VjdGlvblJlc3VsdCwgJ21vYmlsZScpO1xuICAgIH07XG4gICAgY29uc3QgY29tYmluZU9wdGlvbnMgPSAoaXNNb2JpbGVEZXZpY2UsIGlzUGhvbmUsIGRlZmF1bHRPcHRpb25zLCBkZWZhdWx0T3ZlcnJpZGVPcHRpb25zLCBvcHRpb25zKSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBkZXZpY2VPdmVycmlkZU9wdGlvbnMgPSBpc01vYmlsZURldmljZSA/IHsgbW9iaWxlOiBnZXRNb2JpbGVPdmVycmlkZU9wdGlvbnMoKF9hID0gb3B0aW9ucy5tb2JpbGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9LCBpc1Bob25lKSB9IDoge307XG4gICAgICBjb25zdCBzZWN0aW9uUmVzdWx0ID0gZXh0cmFjdFNlY3Rpb25zKFsnbW9iaWxlJ10sIGRlZXBNZXJnZShkZXZpY2VPdmVycmlkZU9wdGlvbnMsIG9wdGlvbnMpKTtcbiAgICAgIGNvbnN0IGV4dGVuZGVkT3B0aW9ucyA9IFRvb2xzLmV4dGVuZChkZWZhdWx0T3B0aW9ucywgZGVmYXVsdE92ZXJyaWRlT3B0aW9ucywgc2VjdGlvblJlc3VsdC5vcHRpb25zKCksIGlzT25Nb2JpbGUoaXNNb2JpbGVEZXZpY2UsIHNlY3Rpb25SZXN1bHQpID8gZ2V0U2VjdGlvbihzZWN0aW9uUmVzdWx0LCAnbW9iaWxlJykgOiB7fSwgeyBleHRlcm5hbF9wbHVnaW5zOiBnZXRFeHRlcm5hbFBsdWdpbnMoZGVmYXVsdE92ZXJyaWRlT3B0aW9ucywgc2VjdGlvblJlc3VsdC5vcHRpb25zKCkpIH0pO1xuICAgICAgcmV0dXJuIHByb2Nlc3NQbHVnaW5zKGlzTW9iaWxlRGV2aWNlLCBzZWN0aW9uUmVzdWx0LCBkZWZhdWx0T3ZlcnJpZGVPcHRpb25zLCBleHRlbmRlZE9wdGlvbnMpO1xuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplT3B0aW9ucyA9IChkZWZhdWx0T3ZlcnJpZGVPcHRpb25zLCBvcHRpb25zKSA9PiBjb21iaW5lT3B0aW9ucyhpc1Bob25lIHx8IGlzVGFibGV0LCBpc1Bob25lLCBvcHRpb25zLCBkZWZhdWx0T3ZlcnJpZGVPcHRpb25zLCBvcHRpb25zKTtcblxuICAgIGNvbnN0IGFkZFZpc3VhbCA9IChlZGl0b3IsIGVsbSkgPT4gYWRkVmlzdWFsJDEoZWRpdG9yLCBlbG0pO1xuXG4gICAgY29uc3QgcmVnaXN0ZXJFeGVjQ29tbWFuZHMkMyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCB0b2dnbGVGb3JtYXQgPSAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgZWRpdG9yLmZvcm1hdHRlci50b2dnbGUobmFtZSwgdmFsdWUpO1xuICAgICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICAgIH07XG4gICAgICBjb25zdCB0b2dnbGVBbGlnbiA9IGFsaWduID0+ICgpID0+IHtcbiAgICAgICAgZWFjaCRlKCdsZWZ0LGNlbnRlcixyaWdodCxqdXN0aWZ5Jy5zcGxpdCgnLCcpLCBuYW1lID0+IHtcbiAgICAgICAgICBpZiAoYWxpZ24gIT09IG5hbWUpIHtcbiAgICAgICAgICAgIGVkaXRvci5mb3JtYXR0ZXIucmVtb3ZlKCdhbGlnbicgKyBuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoYWxpZ24gIT09ICdub25lJykge1xuICAgICAgICAgIHRvZ2dsZUZvcm1hdCgnYWxpZ24nICsgYWxpZ24pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZWRpdG9yLmVkaXRvckNvbW1hbmRzLmFkZENvbW1hbmRzKHtcbiAgICAgICAgSnVzdGlmeUxlZnQ6IHRvZ2dsZUFsaWduKCdsZWZ0JyksXG4gICAgICAgIEp1c3RpZnlDZW50ZXI6IHRvZ2dsZUFsaWduKCdjZW50ZXInKSxcbiAgICAgICAgSnVzdGlmeVJpZ2h0OiB0b2dnbGVBbGlnbigncmlnaHQnKSxcbiAgICAgICAgSnVzdGlmeUZ1bGw6IHRvZ2dsZUFsaWduKCdqdXN0aWZ5JyksXG4gICAgICAgIEp1c3RpZnlOb25lOiB0b2dnbGVBbGlnbignbm9uZScpXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyUXVlcnlTdGF0ZUNvbW1hbmRzJDEgPSBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgYWxpZ25TdGF0ZXMgPSBuYW1lID0+ICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSBzZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSA/IFtlZGl0b3IuZG9tLmdldFBhcmVudChzZWxlY3Rpb24uZ2V0Tm9kZSgpLCBlZGl0b3IuZG9tLmlzQmxvY2spXSA6IHNlbGVjdGlvbi5nZXRTZWxlY3RlZEJsb2NrcygpO1xuICAgICAgICByZXR1cm4gZXhpc3RzKG5vZGVzLCBub2RlID0+IGlzTm9uTnVsbGFibGUoZWRpdG9yLmZvcm1hdHRlci5tYXRjaE5vZGUobm9kZSwgbmFtZSkpKTtcbiAgICAgIH07XG4gICAgICBlZGl0b3IuZWRpdG9yQ29tbWFuZHMuYWRkQ29tbWFuZHMoe1xuICAgICAgICBKdXN0aWZ5TGVmdDogYWxpZ25TdGF0ZXMoJ2FsaWdubGVmdCcpLFxuICAgICAgICBKdXN0aWZ5Q2VudGVyOiBhbGlnblN0YXRlcygnYWxpZ25jZW50ZXInKSxcbiAgICAgICAgSnVzdGlmeVJpZ2h0OiBhbGlnblN0YXRlcygnYWxpZ25yaWdodCcpLFxuICAgICAgICBKdXN0aWZ5RnVsbDogYWxpZ25TdGF0ZXMoJ2FsaWduanVzdGlmeScpXG4gICAgICB9LCAnc3RhdGUnKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyQ29tbWFuZHMkYiA9IGVkaXRvciA9PiB7XG4gICAgICByZWdpc3RlckV4ZWNDb21tYW5kcyQzKGVkaXRvcik7XG4gICAgICByZWdpc3RlclF1ZXJ5U3RhdGVDb21tYW5kcyQxKGVkaXRvcik7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlZ2lzdGVyQ29tbWFuZHMkYSA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IuZWRpdG9yQ29tbWFuZHMuYWRkQ29tbWFuZHMoe1xuICAgICAgICAnQ3V0LENvcHksUGFzdGUnOiBjb21tYW5kID0+IHtcbiAgICAgICAgICBjb25zdCBkb2MgPSBlZGl0b3IuZ2V0RG9jKCk7XG4gICAgICAgICAgbGV0IGZhaWxlZDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZG9jLmV4ZWNDb21tYW5kKGNvbW1hbmQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY29tbWFuZCA9PT0gJ3Bhc3RlJyAmJiAhZG9jLnF1ZXJ5Q29tbWFuZEVuYWJsZWQoY29tbWFuZCkpIHtcbiAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmYWlsZWQgfHwgIWRvYy5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoY29tbWFuZCkpIHtcbiAgICAgICAgICAgIGxldCBtc2cgPSBlZGl0b3IudHJhbnNsYXRlKGBZb3VyIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGNsaXBib2FyZC4gYCArICdQbGVhc2UgdXNlIHRoZSBDdHJsK1gvQy9WIGtleWJvYXJkIHNob3J0Y3V0cyBpbnN0ZWFkLicpO1xuICAgICAgICAgICAgaWYgKEVudi5vcy5pc01hY09TKCkgfHwgRW52Lm9zLmlzaU9TKCkpIHtcbiAgICAgICAgICAgICAgbXNnID0gbXNnLnJlcGxhY2UoL0N0cmxcXCsvZywgJ1xcdTIzMTgrJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlZGl0b3Iubm90aWZpY2F0aW9uTWFuYWdlci5vcGVuKHtcbiAgICAgICAgICAgICAgdGV4dDogbXNnLFxuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCB0cmltT3JQYWRMZWZ0UmlnaHQgPSAoZG9tLCBybmcsIGh0bWwpID0+IHtcbiAgICAgIGNvbnN0IHJvb3QgPSBTdWdhckVsZW1lbnQuZnJvbURvbShkb20uZ2V0Um9vdCgpKTtcbiAgICAgIGlmIChuZWVkc1RvQmVOYnNwTGVmdChyb290LCBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KHJuZykpKSB7XG4gICAgICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoL14gLywgJyZuYnNwOycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvXiZuYnNwOy8sICcgJyk7XG4gICAgICB9XG4gICAgICBpZiAobmVlZHNUb0JlTmJzcFJpZ2h0KHJvb3QsIENhcmV0UG9zaXRpb24uZnJvbVJhbmdlRW5kKHJuZykpKSB7XG4gICAgICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoLygmbmJzcDt8ICkoPGJyKCBcXC8pPik/JC8sICcmbmJzcDsnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoLyZuYnNwOyg8YnIoIFxcLyk/Pik/JC8sICcgJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaHRtbDtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJvY2Vzc1ZhbHVlJDEgPSB2YWx1ZSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBkZXRhaWxzID0gVG9vbHMuZXh0ZW5kKHtcbiAgICAgICAgICBwYXN0ZTogdmFsdWUucGFzdGUsXG4gICAgICAgICAgZGF0YTogeyBwYXN0ZTogdmFsdWUucGFzdGUgfVxuICAgICAgICB9LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogdmFsdWUuY29udGVudCxcbiAgICAgICAgICBkZXRhaWxzXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiB2YWx1ZSxcbiAgICAgICAgZGV0YWlsczoge31cbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCB0cmltT3JQYWQgPSAoZWRpdG9yLCB2YWx1ZSkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBpZiAoL14gfCAkLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdHJpbU9yUGFkTGVmdFJpZ2h0KGRvbSwgc2VsZWN0aW9uLmdldFJuZygpLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnRBdENhcmV0ID0gKGVkaXRvciwgdmFsdWUpID0+IHtcbiAgICAgIGlmIChlZGl0b3Iuc2VsZWN0aW9uLmlzRWRpdGFibGUoKSkge1xuICAgICAgICBjb25zdCB7Y29udGVudCwgZGV0YWlsc30gPSBwcm9jZXNzVmFsdWUkMSh2YWx1ZSk7XG4gICAgICAgIHByZVByb2Nlc3NTZXRDb250ZW50KGVkaXRvciwge1xuICAgICAgICAgIC4uLmRldGFpbHMsXG4gICAgICAgICAgY29udGVudDogdHJpbU9yUGFkKGVkaXRvciwgY29udGVudCksXG4gICAgICAgICAgZm9ybWF0OiAnaHRtbCcsXG4gICAgICAgICAgc2V0OiBmYWxzZSxcbiAgICAgICAgICBzZWxlY3Rpb246IHRydWVcbiAgICAgICAgfSkuZWFjaChhcmdzID0+IHtcbiAgICAgICAgICBjb25zdCBpbnNlcnRlZENvbnRlbnQgPSBpbnNlcnRDb250ZW50JDEoZWRpdG9yLCBhcmdzLmNvbnRlbnQsIGRldGFpbHMpO1xuICAgICAgICAgIHBvc3RQcm9jZXNzU2V0Q29udGVudChlZGl0b3IsIGluc2VydGVkQ29udGVudCwgYXJncyk7XG4gICAgICAgICAgZWRpdG9yLmFkZFZpc3VhbCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmVnaXN0ZXJDb21tYW5kcyQ5ID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5lZGl0b3JDb21tYW5kcy5hZGRDb21tYW5kcyh7XG4gICAgICAgIG1jZUNsZWFudXA6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBibSA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Qm9va21hcmsoKTtcbiAgICAgICAgICBlZGl0b3Iuc2V0Q29udGVudChlZGl0b3IuZ2V0Q29udGVudCgpKTtcbiAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLm1vdmVUb0Jvb2ttYXJrKGJtKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5zZXJ0SW1hZ2U6IChfY29tbWFuZCwgX3VpLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGluc2VydEF0Q2FyZXQoZWRpdG9yLCBlZGl0b3IuZG9tLmNyZWF0ZUhUTUwoJ2ltZycsIHsgc3JjOiB2YWx1ZSB9KSk7XG4gICAgICAgIH0sXG4gICAgICAgIGluc2VydEhvcml6b250YWxSdWxlOiAoKSA9PiB7XG4gICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VJbnNlcnRDb250ZW50JywgZmFsc2UsICc8aHI+Jyk7XG4gICAgICAgIH0sXG4gICAgICAgIGluc2VydFRleHQ6IChfY29tbWFuZCwgX3VpLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGluc2VydEF0Q2FyZXQoZWRpdG9yLCBlZGl0b3IuZG9tLmVuY29kZSh2YWx1ZSkpO1xuICAgICAgICB9LFxuICAgICAgICBpbnNlcnRIVE1MOiAoX2NvbW1hbmQsIF91aSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpbnNlcnRBdENhcmV0KGVkaXRvciwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBtY2VJbnNlcnRDb250ZW50OiAoX2NvbW1hbmQsIF91aSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpbnNlcnRBdENhcmV0KGVkaXRvciwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBtY2VTZXRDb250ZW50OiAoX2NvbW1hbmQsIF91aSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBlZGl0b3Iuc2V0Q29udGVudCh2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1jZVJlcGxhY2VDb250ZW50OiAoX2NvbW1hbmQsIF91aSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZUluc2VydENvbnRlbnQnLCBmYWxzZSwgdmFsdWUucmVwbGFjZSgvXFx7XFwkc2VsZWN0aW9uXFx9L2csIGVkaXRvci5zZWxlY3Rpb24uZ2V0Q29udGVudCh7IGZvcm1hdDogJ3RleHQnIH0pKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1jZU5ld0RvY3VtZW50OiAoKSA9PiB7XG4gICAgICAgICAgZWRpdG9yLnNldENvbnRlbnQoZ2V0TmV3RG9jdW1lbnRDb250ZW50KGVkaXRvcikpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGVnYWN5UHJvcE5hbWVzID0ge1xuICAgICAgJ2ZvbnQtc2l6ZSc6ICdzaXplJyxcbiAgICAgICdmb250LWZhbWlseSc6ICdmYWNlJ1xuICAgIH07XG4gICAgY29uc3QgaXNGb250ID0gaXNUYWcoJ2ZvbnQnKTtcbiAgICBjb25zdCBnZXRTcGVjaWZpZWRGb250UHJvcCA9IChwcm9wTmFtZSwgcm9vdEVsbSwgZWxtKSA9PiB7XG4gICAgICBjb25zdCBnZXRQcm9wZXJ0eSA9IGVsbSA9PiBnZXRSYXcoZWxtLCBwcm9wTmFtZSkub3JUaHVuaygoKSA9PiB7XG4gICAgICAgIGlmIChpc0ZvbnQoZWxtKSkge1xuICAgICAgICAgIHJldHVybiBnZXQkYShsZWdhY3lQcm9wTmFtZXMsIHByb3BOYW1lKS5iaW5kKGxlZ2FjeVByb3BOYW1lID0+IGdldE9wdChlbG0sIGxlZ2FjeVByb3BOYW1lKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm5vbmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBpc1Jvb3QgPSBlbG0gPT4gZXEoU3VnYXJFbGVtZW50LmZyb21Eb20ocm9vdEVsbSksIGVsbSk7XG4gICAgICByZXR1cm4gY2xvc2VzdCQxKFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVsbSksIGVsbSA9PiBnZXRQcm9wZXJ0eShlbG0pLCBpc1Jvb3QpO1xuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplRm9udEZhbWlseSA9IGZvbnRGYW1pbHkgPT4gZm9udEZhbWlseS5yZXBsYWNlKC9bXFwnXFxcIlxcXFxdL2csICcnKS5yZXBsYWNlKC8sXFxzKy9nLCAnLCcpO1xuICAgIGNvbnN0IGdldENvbXB1dGVkRm9udFByb3AgPSAocHJvcE5hbWUsIGVsbSkgPT4gT3B0aW9uYWwuZnJvbShET01VdGlscy5ET00uZ2V0U3R5bGUoZWxtLCBwcm9wTmFtZSwgdHJ1ZSkpO1xuICAgIGNvbnN0IGdldEZvbnRQcm9wID0gcHJvcE5hbWUgPT4gKHJvb3RFbG0sIGVsbSkgPT4gT3B0aW9uYWwuZnJvbShlbG0pLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSkuZmlsdGVyKGlzRWxlbWVudCQ3KS5iaW5kKGVsZW1lbnQgPT4gZ2V0U3BlY2lmaWVkRm9udFByb3AocHJvcE5hbWUsIHJvb3RFbG0sIGVsZW1lbnQuZG9tKS5vcihnZXRDb21wdXRlZEZvbnRQcm9wKHByb3BOYW1lLCBlbGVtZW50LmRvbSkpKS5nZXRPcignJyk7XG4gICAgY29uc3QgZ2V0Rm9udFNpemUgPSBnZXRGb250UHJvcCgnZm9udC1zaXplJyk7XG4gICAgY29uc3QgZ2V0Rm9udEZhbWlseSA9IGNvbXBvc2Uobm9ybWFsaXplRm9udEZhbWlseSwgZ2V0Rm9udFByb3AoJ2ZvbnQtZmFtaWx5JykpO1xuXG4gICAgY29uc3QgZmluZEZpcnN0Q2FyZXRFbGVtZW50ID0gZWRpdG9yID0+IGZpcnN0UG9zaXRpb25JbihlZGl0b3IuZ2V0Qm9keSgpKS5iaW5kKGNhcmV0ID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGNhcmV0LmNvbnRhaW5lcigpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20oaXNUZXh0JGEoY29udGFpbmVyKSA/IGNvbnRhaW5lci5wYXJlbnROb2RlIDogY29udGFpbmVyKTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRDYXJldEVsZW1lbnQgPSBlZGl0b3IgPT4gT3B0aW9uYWwuZnJvbShlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKS5iaW5kKHJuZyA9PiB7XG4gICAgICBjb25zdCByb290ID0gZWRpdG9yLmdldEJvZHkoKTtcbiAgICAgIGNvbnN0IGF0U3RhcnRPZk5vZGUgPSBybmcuc3RhcnRDb250YWluZXIgPT09IHJvb3QgJiYgcm5nLnN0YXJ0T2Zmc2V0ID09PSAwO1xuICAgICAgcmV0dXJuIGF0U3RhcnRPZk5vZGUgPyBPcHRpb25hbC5ub25lKCkgOiBPcHRpb25hbC5mcm9tKGVkaXRvci5zZWxlY3Rpb24uZ2V0U3RhcnQodHJ1ZSkpO1xuICAgIH0pO1xuICAgIGNvbnN0IGJpbmRSYW5nZSA9IChlZGl0b3IsIGJpbmRlcikgPT4gZ2V0Q2FyZXRFbGVtZW50KGVkaXRvcikub3JUaHVuayhjdXJyeShmaW5kRmlyc3RDYXJldEVsZW1lbnQsIGVkaXRvcikpLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSkuZmlsdGVyKGlzRWxlbWVudCQ3KS5iaW5kKGJpbmRlcik7XG4gICAgY29uc3QgbWFwUmFuZ2UgPSAoZWRpdG9yLCBtYXBwZXIpID0+IGJpbmRSYW5nZShlZGl0b3IsIGNvbXBvc2UxKE9wdGlvbmFsLnNvbWUsIG1hcHBlcikpO1xuXG4gICAgY29uc3QgZnJvbUZvbnRTaXplTnVtYmVyID0gKGVkaXRvciwgdmFsdWUpID0+IHtcbiAgICAgIGlmICgvXlswLTkuXSskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICBjb25zdCBmb250U2l6ZU51bWJlciA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgICAgIGlmIChmb250U2l6ZU51bWJlciA+PSAxICYmIGZvbnRTaXplTnVtYmVyIDw9IDcpIHtcbiAgICAgICAgICBjb25zdCBmb250U2l6ZXMgPSBnZXRGb250U3R5bGVWYWx1ZXMoZWRpdG9yKTtcbiAgICAgICAgICBjb25zdCBmb250Q2xhc3NlcyA9IGdldEZvbnRTaXplQ2xhc3NlcyhlZGl0b3IpO1xuICAgICAgICAgIGlmIChmb250Q2xhc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9udENsYXNzZXNbZm9udFNpemVOdW1iZXIgLSAxXSB8fCB2YWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZvbnRTaXplc1tmb250U2l6ZU51bWJlciAtIDFdIHx8IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZUZvbnROYW1lcyA9IGZvbnQgPT4ge1xuICAgICAgY29uc3QgZm9udHMgPSBmb250LnNwbGl0KC9cXHMqLFxccyovKTtcbiAgICAgIHJldHVybiBtYXAkMyhmb250cywgZm9udCA9PiB7XG4gICAgICAgIGlmIChmb250LmluZGV4T2YoJyAnKSAhPT0gLTEgJiYgIShzdGFydHNXaXRoKGZvbnQsICdcIicpIHx8IHN0YXJ0c1dpdGgoZm9udCwgYCdgKSkpIHtcbiAgICAgICAgICByZXR1cm4gYCckeyBmb250IH0nYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZm9udDtcbiAgICAgICAgfVxuICAgICAgfSkuam9pbignLCcpO1xuICAgIH07XG4gICAgY29uc3QgZm9udE5hbWVBY3Rpb24gPSAoZWRpdG9yLCB2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgZm9udCA9IGZyb21Gb250U2l6ZU51bWJlcihlZGl0b3IsIHZhbHVlKTtcbiAgICAgIGVkaXRvci5mb3JtYXR0ZXIudG9nZ2xlKCdmb250bmFtZScsIHsgdmFsdWU6IG5vcm1hbGl6ZUZvbnROYW1lcyhmb250KSB9KTtcbiAgICAgIGVkaXRvci5ub2RlQ2hhbmdlZCgpO1xuICAgIH07XG4gICAgY29uc3QgZm9udE5hbWVRdWVyeSA9IGVkaXRvciA9PiBtYXBSYW5nZShlZGl0b3IsIGVsbSA9PiBnZXRGb250RmFtaWx5KGVkaXRvci5nZXRCb2R5KCksIGVsbS5kb20pKS5nZXRPcignJyk7XG4gICAgY29uc3QgZm9udFNpemVBY3Rpb24gPSAoZWRpdG9yLCB2YWx1ZSkgPT4ge1xuICAgICAgZWRpdG9yLmZvcm1hdHRlci50b2dnbGUoJ2ZvbnRzaXplJywgeyB2YWx1ZTogZnJvbUZvbnRTaXplTnVtYmVyKGVkaXRvciwgdmFsdWUpIH0pO1xuICAgICAgZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG4gICAgfTtcbiAgICBjb25zdCBmb250U2l6ZVF1ZXJ5ID0gZWRpdG9yID0+IG1hcFJhbmdlKGVkaXRvciwgZWxtID0+IGdldEZvbnRTaXplKGVkaXRvci5nZXRCb2R5KCksIGVsbS5kb20pKS5nZXRPcignJyk7XG5cbiAgICBjb25zdCBsaW5lSGVpZ2h0UXVlcnkgPSBlZGl0b3IgPT4gbWFwUmFuZ2UoZWRpdG9yLCBlbG0gPT4ge1xuICAgICAgY29uc3Qgcm9vdCA9IFN1Z2FyRWxlbWVudC5mcm9tRG9tKGVkaXRvci5nZXRCb2R5KCkpO1xuICAgICAgY29uc3Qgc3BlY2lmaWVkU3R5bGUgPSBjbG9zZXN0JDEoZWxtLCBlbG0gPT4gZ2V0UmF3KGVsbSwgJ2xpbmUtaGVpZ2h0JyksIGN1cnJ5KGVxLCByb290KSk7XG4gICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gcGFyc2VGbG9hdChnZXQkNyhlbG0sICdsaW5lLWhlaWdodCcpKTtcbiAgICAgICAgY29uc3QgZm9udFNpemUgPSBwYXJzZUZsb2F0KGdldCQ3KGVsbSwgJ2ZvbnQtc2l6ZScpKTtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5lSGVpZ2h0IC8gZm9udFNpemUpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBzcGVjaWZpZWRTdHlsZS5nZXRPclRodW5rKGNvbXB1dGVkU3R5bGUpO1xuICAgIH0pLmdldE9yKCcnKTtcbiAgICBjb25zdCBsaW5lSGVpZ2h0QWN0aW9uID0gKGVkaXRvciwgbGluZUhlaWdodCkgPT4ge1xuICAgICAgZWRpdG9yLmZvcm1hdHRlci50b2dnbGUoJ2xpbmVoZWlnaHQnLCB7IHZhbHVlOiBTdHJpbmcobGluZUhlaWdodCkgfSk7XG4gICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVnaXN0ZXJFeGVjQ29tbWFuZHMkMiA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCB0b2dnbGVGb3JtYXQgPSAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgZWRpdG9yLmZvcm1hdHRlci50b2dnbGUobmFtZSwgdmFsdWUpO1xuICAgICAgICBlZGl0b3Iubm9kZUNoYW5nZWQoKTtcbiAgICAgIH07XG4gICAgICBlZGl0b3IuZWRpdG9yQ29tbWFuZHMuYWRkQ29tbWFuZHMoe1xuICAgICAgICAnQm9sZCxJdGFsaWMsVW5kZXJsaW5lLFN0cmlrZXRocm91Z2gsU3VwZXJzY3JpcHQsU3Vic2NyaXB0JzogY29tbWFuZCA9PiB7XG4gICAgICAgICAgdG9nZ2xlRm9ybWF0KGNvbW1hbmQpO1xuICAgICAgICB9LFxuICAgICAgICAnRm9yZUNvbG9yLEhpbGl0ZUNvbG9yJzogKGNvbW1hbmQsIF91aSwgdmFsdWUpID0+IHtcbiAgICAgICAgICB0b2dnbGVGb3JtYXQoY29tbWFuZCwgeyB2YWx1ZSB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgJ0JhY2tDb2xvcic6IChfY29tbWFuZCwgX3VpLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIHRvZ2dsZUZvcm1hdCgnaGlsaXRlY29sb3InLCB7IHZhbHVlIH0pO1xuICAgICAgICB9LFxuICAgICAgICAnRm9udE5hbWUnOiAoX2NvbW1hbmQsIF91aSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBmb250TmFtZUFjdGlvbihlZGl0b3IsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ0ZvbnRTaXplJzogKF9jb21tYW5kLCBfdWksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgZm9udFNpemVBY3Rpb24oZWRpdG9yLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgICdMaW5lSGVpZ2h0JzogKF9jb21tYW5kLCBfdWksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgbGluZUhlaWdodEFjdGlvbihlZGl0b3IsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ0xhbmcnOiAoY29tbWFuZCwgX3VpLCBsYW5nKSA9PiB7XG4gICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgIHRvZ2dsZUZvcm1hdChjb21tYW5kLCB7XG4gICAgICAgICAgICB2YWx1ZTogbGFuZy5jb2RlLFxuICAgICAgICAgICAgY3VzdG9tVmFsdWU6IChfYSA9IGxhbmcuY3VzdG9tQ29kZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbnVsbFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAnUmVtb3ZlRm9ybWF0JzogY29tbWFuZCA9PiB7XG4gICAgICAgICAgZWRpdG9yLmZvcm1hdHRlci5yZW1vdmUoY29tbWFuZCk7XG4gICAgICAgIH0sXG4gICAgICAgICdtY2VCbG9ja1F1b3RlJzogKCkgPT4ge1xuICAgICAgICAgIHRvZ2dsZUZvcm1hdCgnYmxvY2txdW90ZScpO1xuICAgICAgICB9LFxuICAgICAgICAnRm9ybWF0QmxvY2snOiAoX2NvbW1hbmQsIF91aSwgdmFsdWUpID0+IHtcbiAgICAgICAgICB0b2dnbGVGb3JtYXQoaXNTdHJpbmcodmFsdWUpID8gdmFsdWUgOiAncCcpO1xuICAgICAgICB9LFxuICAgICAgICAnbWNlVG9nZ2xlRm9ybWF0JzogKF9jb21tYW5kLCBfdWksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgdG9nZ2xlRm9ybWF0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlclF1ZXJ5VmFsdWVDb21tYW5kcyA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBpc0Zvcm1hdE1hdGNoID0gbmFtZSA9PiBlZGl0b3IuZm9ybWF0dGVyLm1hdGNoKG5hbWUpO1xuICAgICAgZWRpdG9yLmVkaXRvckNvbW1hbmRzLmFkZENvbW1hbmRzKHtcbiAgICAgICAgJ0JvbGQsSXRhbGljLFVuZGVybGluZSxTdHJpa2V0aHJvdWdoLFN1cGVyc2NyaXB0LFN1YnNjcmlwdCc6IGNvbW1hbmQgPT4gaXNGb3JtYXRNYXRjaChjb21tYW5kKSxcbiAgICAgICAgJ21jZUJsb2NrUXVvdGUnOiAoKSA9PiBpc0Zvcm1hdE1hdGNoKCdibG9ja3F1b3RlJylcbiAgICAgIH0sICdzdGF0ZScpO1xuICAgICAgZWRpdG9yLmVkaXRvckNvbW1hbmRzLmFkZFF1ZXJ5VmFsdWVIYW5kbGVyKCdGb250TmFtZScsICgpID0+IGZvbnROYW1lUXVlcnkoZWRpdG9yKSk7XG4gICAgICBlZGl0b3IuZWRpdG9yQ29tbWFuZHMuYWRkUXVlcnlWYWx1ZUhhbmRsZXIoJ0ZvbnRTaXplJywgKCkgPT4gZm9udFNpemVRdWVyeShlZGl0b3IpKTtcbiAgICAgIGVkaXRvci5lZGl0b3JDb21tYW5kcy5hZGRRdWVyeVZhbHVlSGFuZGxlcignTGluZUhlaWdodCcsICgpID0+IGxpbmVIZWlnaHRRdWVyeShlZGl0b3IpKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyQ29tbWFuZHMkOCA9IGVkaXRvciA9PiB7XG4gICAgICByZWdpc3RlckV4ZWNDb21tYW5kcyQyKGVkaXRvcik7XG4gICAgICByZWdpc3RlclF1ZXJ5VmFsdWVDb21tYW5kcyhlZGl0b3IpO1xuICAgIH07XG5cbiAgICBjb25zdCByZWdpc3RlckNvbW1hbmRzJDcgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmVkaXRvckNvbW1hbmRzLmFkZENvbW1hbmRzKHtcbiAgICAgICAgbWNlQWRkVW5kb0xldmVsOiAoKSA9PiB7XG4gICAgICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLmFkZCgpO1xuICAgICAgICB9LFxuICAgICAgICBtY2VFbmRVbmRvTGV2ZWw6ICgpID0+IHtcbiAgICAgICAgICBlZGl0b3IudW5kb01hbmFnZXIuYWRkKCk7XG4gICAgICAgIH0sXG4gICAgICAgIFVuZG86ICgpID0+IHtcbiAgICAgICAgICBlZGl0b3IudW5kb01hbmFnZXIudW5kbygpO1xuICAgICAgICB9LFxuICAgICAgICBSZWRvOiAoKSA9PiB7XG4gICAgICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLnJlZG8oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlZ2lzdGVyQ29tbWFuZHMkNiA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IuZWRpdG9yQ29tbWFuZHMuYWRkQ29tbWFuZHMoe1xuICAgICAgICBJbmRlbnQ6ICgpID0+IHtcbiAgICAgICAgICBpbmRlbnQoZWRpdG9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgT3V0ZGVudDogKCkgPT4ge1xuICAgICAgICAgIG91dGRlbnQoZWRpdG9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBlZGl0b3IuZWRpdG9yQ29tbWFuZHMuYWRkQ29tbWFuZHMoeyBPdXRkZW50OiAoKSA9PiBjYW5PdXRkZW50KGVkaXRvcikgfSwgJ3N0YXRlJyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlZ2lzdGVyQ29tbWFuZHMkNSA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBhcHBseUxpbmtUb1NlbGVjdGlvbiA9IChfY29tbWFuZCwgX3VpLCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBsaW5rRGV0YWlscyA9IGlzU3RyaW5nKHZhbHVlKSA/IHsgaHJlZjogdmFsdWUgfSA6IHZhbHVlO1xuICAgICAgICBjb25zdCBhbmNob3IgPSBlZGl0b3IuZG9tLmdldFBhcmVudChlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKSwgJ2EnKTtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGxpbmtEZXRhaWxzKSAmJiBpc1N0cmluZyhsaW5rRGV0YWlscy5ocmVmKSkge1xuICAgICAgICAgIGxpbmtEZXRhaWxzLmhyZWYgPSBsaW5rRGV0YWlscy5ocmVmLnJlcGxhY2UoLyAvZywgJyUyMCcpO1xuICAgICAgICAgIGlmICghYW5jaG9yIHx8ICFsaW5rRGV0YWlscy5ocmVmKSB7XG4gICAgICAgICAgICBlZGl0b3IuZm9ybWF0dGVyLnJlbW92ZSgnbGluaycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGlua0RldGFpbHMuaHJlZikge1xuICAgICAgICAgICAgZWRpdG9yLmZvcm1hdHRlci5hcHBseSgnbGluaycsIGxpbmtEZXRhaWxzLCBhbmNob3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGVkaXRvci5lZGl0b3JDb21tYW5kcy5hZGRDb21tYW5kcyh7XG4gICAgICAgIHVubGluazogKCkgPT4ge1xuICAgICAgICAgIGlmIChlZGl0b3Iuc2VsZWN0aW9uLmlzRWRpdGFibGUoKSkge1xuICAgICAgICAgICAgaWYgKGVkaXRvci5zZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSkge1xuICAgICAgICAgICAgICBjb25zdCBlbG0gPSBlZGl0b3IuZG9tLmdldFBhcmVudChlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KCksICdhJyk7XG4gICAgICAgICAgICAgIGlmIChlbG0pIHtcbiAgICAgICAgICAgICAgICBlZGl0b3IuZG9tLnJlbW92ZShlbG0sIHRydWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVkaXRvci5mb3JtYXR0ZXIucmVtb3ZlKCdsaW5rJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtY2VJbnNlcnRMaW5rOiBhcHBseUxpbmtUb1NlbGVjdGlvbixcbiAgICAgICAgY3JlYXRlTGluazogYXBwbHlMaW5rVG9TZWxlY3Rpb25cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZWdpc3RlckV4ZWNDb21tYW5kcyQxID0gZWRpdG9yID0+IHtcbiAgICAgIGVkaXRvci5lZGl0b3JDb21tYW5kcy5hZGRDb21tYW5kcyh7XG4gICAgICAgICdJbnNlcnRVbm9yZGVyZWRMaXN0LEluc2VydE9yZGVyZWRMaXN0JzogY29tbWFuZCA9PiB7XG4gICAgICAgICAgZWRpdG9yLmdldERvYygpLmV4ZWNDb21tYW5kKGNvbW1hbmQpO1xuICAgICAgICAgIGNvbnN0IGxpc3RFbG0gPSBlZGl0b3IuZG9tLmdldFBhcmVudChlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKSwgJ29sLHVsJyk7XG4gICAgICAgICAgaWYgKGxpc3RFbG0pIHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RQYXJlbnQgPSBsaXN0RWxtLnBhcmVudE5vZGU7XG4gICAgICAgICAgICBpZiAobGlzdFBhcmVudCAmJiAvXihIWzEtNl18UHxBRERSRVNTfFBSRSkkLy50ZXN0KGxpc3RQYXJlbnQubm9kZU5hbWUpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGJtID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRCb29rbWFyaygpO1xuICAgICAgICAgICAgICBlZGl0b3IuZG9tLnNwbGl0KGxpc3RQYXJlbnQsIGxpc3RFbG0pO1xuICAgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLm1vdmVUb0Jvb2ttYXJrKGJtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXJRdWVyeVN0YXRlQ29tbWFuZHMgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmVkaXRvckNvbW1hbmRzLmFkZENvbW1hbmRzKHtcbiAgICAgICAgJ0luc2VydFVub3JkZXJlZExpc3QsSW5zZXJ0T3JkZXJlZExpc3QnOiBjb21tYW5kID0+IHtcbiAgICAgICAgICBjb25zdCBsaXN0ID0gZWRpdG9yLmRvbS5nZXRQYXJlbnQoZWRpdG9yLnNlbGVjdGlvbi5nZXROb2RlKCksICd1bCxvbCcpO1xuICAgICAgICAgIHJldHVybiBsaXN0ICYmIChjb21tYW5kID09PSAnaW5zZXJ0dW5vcmRlcmVkbGlzdCcgJiYgbGlzdC50YWdOYW1lID09PSAnVUwnIHx8IGNvbW1hbmQgPT09ICdpbnNlcnRvcmRlcmVkbGlzdCcgJiYgbGlzdC50YWdOYW1lID09PSAnT0wnKTtcbiAgICAgICAgfVxuICAgICAgfSwgJ3N0YXRlJyk7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlckNvbW1hbmRzJDQgPSBlZGl0b3IgPT4ge1xuICAgICAgcmVnaXN0ZXJFeGVjQ29tbWFuZHMkMShlZGl0b3IpO1xuICAgICAgcmVnaXN0ZXJRdWVyeVN0YXRlQ29tbWFuZHMoZWRpdG9yKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0VG9wUGFyZW50QmxvY2sgPSAoZWRpdG9yLCBub2RlLCByb290LCBjb250YWluZXIpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBzZWxlY3RvciA9IG5vZGUgPT4gZG9tLmlzQmxvY2sobm9kZSkgJiYgbm9kZS5wYXJlbnRFbGVtZW50ID09PSByb290O1xuICAgICAgY29uc3QgdG9wUGFyZW50QmxvY2sgPSBzZWxlY3Rvcihub2RlKSA/IG5vZGUgOiBkb20uZ2V0UGFyZW50KGNvbnRhaW5lciwgc2VsZWN0b3IsIHJvb3QpO1xuICAgICAgcmV0dXJuIE9wdGlvbmFsLmZyb20odG9wUGFyZW50QmxvY2spLm1hcChTdWdhckVsZW1lbnQuZnJvbURvbSk7XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnQgPSAoZWRpdG9yLCBiZWZvcmUpID0+IHtcbiAgICAgIGNvbnN0IGRvbSA9IGVkaXRvci5kb207XG4gICAgICBjb25zdCBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuICAgICAgY29uc3Qgbm9kZSA9IGJlZm9yZSA/IGVkaXRvci5zZWxlY3Rpb24uZ2V0U3RhcnQoKSA6IGVkaXRvci5zZWxlY3Rpb24uZ2V0RW5kKCk7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBiZWZvcmUgPyBybmcuc3RhcnRDb250YWluZXIgOiBybmcuZW5kQ29udGFpbmVyO1xuICAgICAgY29uc3Qgcm9vdCA9IGdldEVkaXRhYmxlUm9vdChkb20sIGNvbnRhaW5lcik7XG4gICAgICBpZiAoIXJvb3QgfHwgIXJvb3QuaXNDb250ZW50RWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5zZXJ0Rm4gPSBiZWZvcmUgPyBiZWZvcmUkMyA6IGFmdGVyJDQ7XG4gICAgICBjb25zdCBuZXdCbG9ja05hbWUgPSBnZXRGb3JjZWRSb290QmxvY2soZWRpdG9yKTtcbiAgICAgIGdldFRvcFBhcmVudEJsb2NrKGVkaXRvciwgbm9kZSwgcm9vdCwgY29udGFpbmVyKS5lYWNoKHBhcmVudEJsb2NrID0+IHtcbiAgICAgICAgY29uc3QgbmV3QmxvY2sgPSBjcmVhdGVOZXdCbG9jayhlZGl0b3IsIGNvbnRhaW5lciwgcGFyZW50QmxvY2suZG9tLCByb290LCBmYWxzZSwgbmV3QmxvY2tOYW1lKTtcbiAgICAgICAgaW5zZXJ0Rm4ocGFyZW50QmxvY2ssIFN1Z2FyRWxlbWVudC5mcm9tRG9tKG5ld0Jsb2NrKSk7XG4gICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Q3Vyc29yTG9jYXRpb24obmV3QmxvY2ssIDApO1xuICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ05ld0Jsb2NrJywgeyBuZXdCbG9jayB9KTtcbiAgICAgICAgZmlyZUlucHV0RXZlbnQoZWRpdG9yLCAnaW5zZXJ0UGFyYWdyYXBoJyk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGluc2VydEJlZm9yZSA9IGVkaXRvciA9PiBpbnNlcnQoZWRpdG9yLCB0cnVlKTtcbiAgICBjb25zdCBpbnNlcnRBZnRlciA9IGVkaXRvciA9PiBpbnNlcnQoZWRpdG9yLCBmYWxzZSk7XG5cbiAgICBjb25zdCByZWdpc3RlckNvbW1hbmRzJDMgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmVkaXRvckNvbW1hbmRzLmFkZENvbW1hbmRzKHtcbiAgICAgICAgSW5zZXJ0TmV3QmxvY2tCZWZvcmU6ICgpID0+IHtcbiAgICAgICAgICBpbnNlcnRCZWZvcmUoZWRpdG9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgSW5zZXJ0TmV3QmxvY2tBZnRlcjogKCkgPT4ge1xuICAgICAgICAgIGluc2VydEFmdGVyKGVkaXRvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZWdpc3RlckNvbW1hbmRzJDIgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmVkaXRvckNvbW1hbmRzLmFkZENvbW1hbmRzKHtcbiAgICAgICAgaW5zZXJ0UGFyYWdyYXBoOiAoKSA9PiB7XG4gICAgICAgICAgaW5zZXJ0QnJlYWsoYmxvY2ticmVhaywgZWRpdG9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgbWNlSW5zZXJ0TmV3TGluZTogKF9jb21tYW5kLCBfdWksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgaW5zZXJ0JDEoZWRpdG9yLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIEluc2VydExpbmVCcmVhazogKF9jb21tYW5kLCBfdWksIF92YWx1ZSkgPT4ge1xuICAgICAgICAgIGluc2VydEJyZWFrKGxpbmVicmVhaywgZWRpdG9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlZ2lzdGVyQ29tbWFuZHMkMSA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3IuZWRpdG9yQ29tbWFuZHMuYWRkQ29tbWFuZHMoe1xuICAgICAgICBtY2VTZWxlY3ROb2RlRGVwdGg6IChfY29tbWFuZCwgX3VpLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgICAgICBlZGl0b3IuZG9tLmdldFBhcmVudChlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKSwgbm9kZSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNFbGVtZW50JDYobm9kZSkgJiYgY291bnRlcisrID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNlbGVjdChub2RlKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgZWRpdG9yLmdldEJvZHkoKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1jZVNlbGVjdE5vZGU6IChfY29tbWFuZCwgX3VpLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0KHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2VsZWN0QWxsOiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWRpdGluZ0hvc3QgPSBlZGl0b3IuZG9tLmdldFBhcmVudChlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KCksIGlzQ29udGVudEVkaXRhYmxlVHJ1ZSQzKTtcbiAgICAgICAgICBpZiAoZWRpdGluZ0hvc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHJuZyA9IGVkaXRvci5kb20uY3JlYXRlUm5nKCk7XG4gICAgICAgICAgICBybmcuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRpbmdIb3N0KTtcbiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVnaXN0ZXJFeGVjQ29tbWFuZHMgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLmVkaXRvckNvbW1hbmRzLmFkZENvbW1hbmRzKHtcbiAgICAgICAgbWNlUmVtb3ZlTm9kZTogKF9jb21tYW5kLCBfdWksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDAgPyB2YWx1ZSA6IGVkaXRvci5zZWxlY3Rpb24uZ2V0Tm9kZSgpO1xuICAgICAgICAgIGlmIChub2RlICE9PSBlZGl0b3IuZ2V0Qm9keSgpKSB7XG4gICAgICAgICAgICBjb25zdCBibSA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Qm9va21hcmsoKTtcbiAgICAgICAgICAgIGVkaXRvci5kb20ucmVtb3ZlKG5vZGUsIHRydWUpO1xuICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5tb3ZlVG9Cb29rbWFyayhibSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtY2VQcmludDogKCkgPT4ge1xuICAgICAgICAgIGVkaXRvci5nZXRXaW4oKS5wcmludCgpO1xuICAgICAgICB9LFxuICAgICAgICBtY2VGb2N1czogKF9jb21tYW5kLCBfdWksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgZm9jdXMoZWRpdG9yLCB2YWx1ZSA9PT0gdHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1jZVRvZ2dsZVZpc3VhbEFpZDogKCkgPT4ge1xuICAgICAgICAgIGVkaXRvci5oYXNWaXN1YWwgPSAhZWRpdG9yLmhhc1Zpc3VhbDtcbiAgICAgICAgICBlZGl0b3IuYWRkVmlzdWFsKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXJDb21tYW5kcyA9IGVkaXRvciA9PiB7XG4gICAgICByZWdpc3RlckNvbW1hbmRzJGIoZWRpdG9yKTtcbiAgICAgIHJlZ2lzdGVyQ29tbWFuZHMkYShlZGl0b3IpO1xuICAgICAgcmVnaXN0ZXJDb21tYW5kcyQ3KGVkaXRvcik7XG4gICAgICByZWdpc3RlckNvbW1hbmRzJDEoZWRpdG9yKTtcbiAgICAgIHJlZ2lzdGVyQ29tbWFuZHMkOShlZGl0b3IpO1xuICAgICAgcmVnaXN0ZXJDb21tYW5kcyQ1KGVkaXRvcik7XG4gICAgICByZWdpc3RlckNvbW1hbmRzJDYoZWRpdG9yKTtcbiAgICAgIHJlZ2lzdGVyQ29tbWFuZHMkMyhlZGl0b3IpO1xuICAgICAgcmVnaXN0ZXJDb21tYW5kcyQyKGVkaXRvcik7XG4gICAgICByZWdpc3RlckNvbW1hbmRzJDQoZWRpdG9yKTtcbiAgICAgIHJlZ2lzdGVyQ29tbWFuZHMkOChlZGl0b3IpO1xuICAgICAgcmVnaXN0ZXJFeGVjQ29tbWFuZHMoZWRpdG9yKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2VsZWN0aW9uU2FmZUNvbW1hbmRzID0gWyd0b2dnbGV2aWV3J107XG4gICAgY29uc3QgaXNTZWxlY3Rpb25TYWZlQ29tbWFuZCA9IGNvbW1hbmQgPT4gY29udGFpbnMkMihzZWxlY3Rpb25TYWZlQ29tbWFuZHMsIGNvbW1hbmQudG9Mb3dlckNhc2UoKSk7XG4gICAgY2xhc3MgRWRpdG9yQ29tbWFuZHMge1xuICAgICAgY29uc3RydWN0b3IoZWRpdG9yKSB7XG4gICAgICAgIHRoaXMuY29tbWFuZHMgPSB7XG4gICAgICAgICAgc3RhdGU6IHt9LFxuICAgICAgICAgIGV4ZWM6IHt9LFxuICAgICAgICAgIHZhbHVlOiB7fVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjtcbiAgICAgIH1cbiAgICAgIGV4ZWNDb21tYW5kKGNvbW1hbmQsIHVpID0gZmFsc2UsIHZhbHVlLCBhcmdzKSB7XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgICAgICBjb25zdCBsb3dlckNhc2VDb21tYW5kID0gY29tbWFuZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBza2lwRm9jdXMgPSBhcmdzID09PSBudWxsIHx8IGFyZ3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFyZ3Muc2tpcF9mb2N1cztcbiAgICAgICAgaWYgKGVkaXRvci5yZW1vdmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlckNhc2VDb21tYW5kICE9PSAnbWNlZm9jdXMnKSB7XG4gICAgICAgICAgaWYgKCEvXihtY2VBZGRVbmRvTGV2ZWx8bWNlRW5kVW5kb0xldmVsKSQvaS50ZXN0KGxvd2VyQ2FzZUNvbW1hbmQpICYmICFza2lwRm9jdXMpIHtcbiAgICAgICAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN0b3JlKGVkaXRvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50QXJncyA9IGVkaXRvci5kaXNwYXRjaCgnQmVmb3JlRXhlY0NvbW1hbmQnLCB7XG4gICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICB1aSxcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGV2ZW50QXJncy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmdW5jID0gdGhpcy5jb21tYW5kcy5leGVjW2xvd2VyQ2FzZUNvbW1hbmRdO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihmdW5jKSkge1xuICAgICAgICAgIGZ1bmMobG93ZXJDYXNlQ29tbWFuZCwgdWksIHZhbHVlKTtcbiAgICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ0V4ZWNDb21tYW5kJywge1xuICAgICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICAgIHVpLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBxdWVyeUNvbW1hbmRTdGF0ZShjb21tYW5kKSB7XG4gICAgICAgIGlmICghaXNTZWxlY3Rpb25TYWZlQ29tbWFuZChjb21tYW5kKSAmJiB0aGlzLmVkaXRvci5xdWlya3MuaXNIaWRkZW4oKSB8fCB0aGlzLmVkaXRvci5yZW1vdmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxvd2VyQ2FzZUNvbW1hbmQgPSBjb21tYW5kLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGZ1bmMgPSB0aGlzLmNvbW1hbmRzLnN0YXRlW2xvd2VyQ2FzZUNvbW1hbmRdO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihmdW5jKSkge1xuICAgICAgICAgIHJldHVybiBmdW5jKGxvd2VyQ2FzZUNvbW1hbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHF1ZXJ5Q29tbWFuZFZhbHVlKGNvbW1hbmQpIHtcbiAgICAgICAgaWYgKCFpc1NlbGVjdGlvblNhZmVDb21tYW5kKGNvbW1hbmQpICYmIHRoaXMuZWRpdG9yLnF1aXJrcy5pc0hpZGRlbigpIHx8IHRoaXMuZWRpdG9yLnJlbW92ZWQpIHtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbG93ZXJDYXNlQ29tbWFuZCA9IGNvbW1hbmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgZnVuYyA9IHRoaXMuY29tbWFuZHMudmFsdWVbbG93ZXJDYXNlQ29tbWFuZF07XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGZ1bmMpKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmMobG93ZXJDYXNlQ29tbWFuZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgICAgYWRkQ29tbWFuZHMoY29tbWFuZExpc3QsIHR5cGUgPSAnZXhlYycpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZHMgPSB0aGlzLmNvbW1hbmRzO1xuICAgICAgICBlYWNoJGQoY29tbWFuZExpc3QsIChjYWxsYmFjaywgY29tbWFuZCkgPT4ge1xuICAgICAgICAgIGVhY2gkZShjb21tYW5kLnRvTG93ZXJDYXNlKCkuc3BsaXQoJywnKSwgY29tbWFuZCA9PiB7XG4gICAgICAgICAgICBjb21tYW5kc1t0eXBlXVtjb21tYW5kXSA9IGNhbGxiYWNrO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGFkZENvbW1hbmQoY29tbWFuZCwgY2FsbGJhY2ssIHNjb3BlKSB7XG4gICAgICAgIGNvbnN0IGxvd2VyQ2FzZUNvbW1hbmQgPSBjb21tYW5kLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHMuZXhlY1tsb3dlckNhc2VDb21tYW5kXSA9IChfY29tbWFuZCwgdWksIHZhbHVlKSA9PiBjYWxsYmFjay5jYWxsKHNjb3BlICE9PSBudWxsICYmIHNjb3BlICE9PSB2b2lkIDAgPyBzY29wZSA6IHRoaXMuZWRpdG9yLCB1aSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgcXVlcnlDb21tYW5kU3VwcG9ydGVkKGNvbW1hbmQpIHtcbiAgICAgICAgY29uc3QgbG93ZXJDYXNlQ29tbWFuZCA9IGNvbW1hbmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKHRoaXMuY29tbWFuZHMuZXhlY1tsb3dlckNhc2VDb21tYW5kXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYWRkUXVlcnlTdGF0ZUhhbmRsZXIoY29tbWFuZCwgY2FsbGJhY2ssIHNjb3BlKSB7XG4gICAgICAgIHRoaXMuY29tbWFuZHMuc3RhdGVbY29tbWFuZC50b0xvd2VyQ2FzZSgpXSA9ICgpID0+IGNhbGxiYWNrLmNhbGwoc2NvcGUgIT09IG51bGwgJiYgc2NvcGUgIT09IHZvaWQgMCA/IHNjb3BlIDogdGhpcy5lZGl0b3IpO1xuICAgICAgfVxuICAgICAgYWRkUXVlcnlWYWx1ZUhhbmRsZXIoY29tbWFuZCwgY2FsbGJhY2ssIHNjb3BlKSB7XG4gICAgICAgIHRoaXMuY29tbWFuZHMudmFsdWVbY29tbWFuZC50b0xvd2VyQ2FzZSgpXSA9ICgpID0+IGNhbGxiYWNrLmNhbGwoc2NvcGUgIT09IG51bGwgJiYgc2NvcGUgIT09IHZvaWQgMCA/IHNjb3BlIDogdGhpcy5lZGl0b3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGludGVybmFsQ29udGVudEVkaXRhYmxlQXR0ciA9ICdkYXRhLW1jZS1jb250ZW50ZWRpdGFibGUnO1xuICAgIGNvbnN0IHRvZ2dsZUNsYXNzID0gKGVsbSwgY2xzLCBzdGF0ZSkgPT4ge1xuICAgICAgaWYgKGhhcyhlbG0sIGNscykgJiYgIXN0YXRlKSB7XG4gICAgICAgIHJlbW92ZSQ3KGVsbSwgY2xzKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUpIHtcbiAgICAgICAgYWRkJDIoZWxtLCBjbHMpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2V0RWRpdG9yQ29tbWFuZFN0YXRlID0gKGVkaXRvciwgY21kLCBzdGF0ZSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZWRpdG9yLmdldERvYygpLmV4ZWNDb21tYW5kKGNtZCwgZmFsc2UsIFN0cmluZyhzdGF0ZSkpO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldENvbnRlbnRFZGl0YWJsZSA9IChlbG0sIHN0YXRlKSA9PiB7XG4gICAgICBlbG0uZG9tLmNvbnRlbnRFZGl0YWJsZSA9IHN0YXRlID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9O1xuICAgIGNvbnN0IHN3aXRjaE9mZkNvbnRlbnRFZGl0YWJsZVRydWUgPSBlbG0gPT4ge1xuICAgICAgZWFjaCRlKGRlc2NlbmRhbnRzKGVsbSwgJypbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXScpLCBlbG0gPT4ge1xuICAgICAgICBzZXQkMyhlbG0sIGludGVybmFsQ29udGVudEVkaXRhYmxlQXR0ciwgJ3RydWUnKTtcbiAgICAgICAgc2V0Q29udGVudEVkaXRhYmxlKGVsbSwgZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzd2l0Y2hPbkNvbnRlbnRFZGl0YWJsZVRydWUgPSBlbG0gPT4ge1xuICAgICAgZWFjaCRlKGRlc2NlbmRhbnRzKGVsbSwgYCpbJHsgaW50ZXJuYWxDb250ZW50RWRpdGFibGVBdHRyIH09XCJ0cnVlXCJdYCksIGVsbSA9PiB7XG4gICAgICAgIHJlbW92ZSRhKGVsbSwgaW50ZXJuYWxDb250ZW50RWRpdGFibGVBdHRyKTtcbiAgICAgICAgc2V0Q29udGVudEVkaXRhYmxlKGVsbSwgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZUZha2VTZWxlY3Rpb24gPSBlZGl0b3IgPT4ge1xuICAgICAgT3B0aW9uYWwuZnJvbShlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKSkuZWFjaChlbG0gPT4ge1xuICAgICAgICBlbG0ucmVtb3ZlQXR0cmlidXRlKCdkYXRhLW1jZS1zZWxlY3RlZCcpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZXN0b3JlRmFrZVNlbGVjdGlvbiA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKTtcbiAgICB9O1xuICAgIGNvbnN0IHRvZ2dsZVJlYWRPbmx5ID0gKGVkaXRvciwgc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGJvZHkgPSBTdWdhckVsZW1lbnQuZnJvbURvbShlZGl0b3IuZ2V0Qm9keSgpKTtcbiAgICAgIHRvZ2dsZUNsYXNzKGJvZHksICdtY2UtY29udGVudC1yZWFkb25seScsIHN0YXRlKTtcbiAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLmNvbnRyb2xTZWxlY3Rpb24uaGlkZVJlc2l6ZVJlY3QoKTtcbiAgICAgICAgZWRpdG9yLl9zZWxlY3Rpb25PdmVycmlkZXMuaGlkZUZha2VDYXJldCgpO1xuICAgICAgICByZW1vdmVGYWtlU2VsZWN0aW9uKGVkaXRvcik7XG4gICAgICAgIGVkaXRvci5yZWFkb25seSA9IHRydWU7XG4gICAgICAgIHNldENvbnRlbnRFZGl0YWJsZShib2R5LCBmYWxzZSk7XG4gICAgICAgIHN3aXRjaE9mZkNvbnRlbnRFZGl0YWJsZVRydWUoYm9keSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGl0b3IucmVhZG9ubHkgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVkaXRvci5oYXNFZGl0YWJsZVJvb3QoKSkge1xuICAgICAgICAgIHNldENvbnRlbnRFZGl0YWJsZShib2R5LCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2hPbkNvbnRlbnRFZGl0YWJsZVRydWUoYm9keSk7XG4gICAgICAgIHNldEVkaXRvckNvbW1hbmRTdGF0ZShlZGl0b3IsICdTdHlsZVdpdGhDU1MnLCBmYWxzZSk7XG4gICAgICAgIHNldEVkaXRvckNvbW1hbmRTdGF0ZShlZGl0b3IsICdlbmFibGVJbmxpbmVUYWJsZUVkaXRpbmcnLCBmYWxzZSk7XG4gICAgICAgIHNldEVkaXRvckNvbW1hbmRTdGF0ZShlZGl0b3IsICdlbmFibGVPYmplY3RSZXNpemluZycsIGZhbHNlKTtcbiAgICAgICAgaWYgKGhhc0VkaXRvck9yVWlGb2N1cyhlZGl0b3IpKSB7XG4gICAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdG9yZUZha2VTZWxlY3Rpb24oZWRpdG9yKTtcbiAgICAgICAgZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc1JlYWRPbmx5ID0gZWRpdG9yID0+IGVkaXRvci5yZWFkb25seTtcbiAgICBjb25zdCByZWdpc3RlckZpbHRlcnMgPSBlZGl0b3IgPT4ge1xuICAgICAgZWRpdG9yLnBhcnNlci5hZGRBdHRyaWJ1dGVGaWx0ZXIoJ2NvbnRlbnRlZGl0YWJsZScsIG5vZGVzID0+IHtcbiAgICAgICAgaWYgKGlzUmVhZE9ubHkoZWRpdG9yKSkge1xuICAgICAgICAgIGVhY2gkZShub2Rlcywgbm9kZSA9PiB7XG4gICAgICAgICAgICBub2RlLmF0dHIoaW50ZXJuYWxDb250ZW50RWRpdGFibGVBdHRyLCBub2RlLmF0dHIoJ2NvbnRlbnRlZGl0YWJsZScpKTtcbiAgICAgICAgICAgIG5vZGUuYXR0cignY29udGVudGVkaXRhYmxlJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLnNlcmlhbGl6ZXIuYWRkQXR0cmlidXRlRmlsdGVyKGludGVybmFsQ29udGVudEVkaXRhYmxlQXR0ciwgbm9kZXMgPT4ge1xuICAgICAgICBpZiAoaXNSZWFkT25seShlZGl0b3IpKSB7XG4gICAgICAgICAgZWFjaCRlKG5vZGVzLCBub2RlID0+IHtcbiAgICAgICAgICAgIG5vZGUuYXR0cignY29udGVudGVkaXRhYmxlJywgbm9kZS5hdHRyKGludGVybmFsQ29udGVudEVkaXRhYmxlQXR0cikpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5zZXJpYWxpemVyLmFkZFRlbXBBdHRyKGludGVybmFsQ29udGVudEVkaXRhYmxlQXR0cik7XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlclJlYWRPbmx5Q29udGVudEZpbHRlcnMgPSBlZGl0b3IgPT4ge1xuICAgICAgaWYgKGVkaXRvci5zZXJpYWxpemVyKSB7XG4gICAgICAgIHJlZ2lzdGVyRmlsdGVycyhlZGl0b3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWRpdG9yLm9uKCdQcmVJbml0JywgKCkgPT4ge1xuICAgICAgICAgIHJlZ2lzdGVyRmlsdGVycyhlZGl0b3IpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGlzQ2xpY2tFdmVudCA9IGUgPT4gZS50eXBlID09PSAnY2xpY2snO1xuICAgIGNvbnN0IGFsbG93ZWRFdmVudHMgPSBbJ2NvcHknXTtcbiAgICBjb25zdCBpc1JlYWRPbmx5QWxsb3dlZEV2ZW50ID0gZSA9PiBjb250YWlucyQyKGFsbG93ZWRFdmVudHMsIGUudHlwZSk7XG4gICAgY29uc3QgZ2V0QW5jaG9ySHJlZk9wdCA9IChlZGl0b3IsIGVsbSkgPT4ge1xuICAgICAgY29uc3QgaXNSb290ID0gZWxtID0+IGVxKGVsbSwgU3VnYXJFbGVtZW50LmZyb21Eb20oZWRpdG9yLmdldEJvZHkoKSkpO1xuICAgICAgcmV0dXJuIGNsb3Nlc3QkMyhlbG0sICdhJywgaXNSb290KS5iaW5kKGEgPT4gZ2V0T3B0KGEsICdocmVmJykpO1xuICAgIH07XG4gICAgY29uc3QgcHJvY2Vzc1JlYWRvbmx5RXZlbnRzID0gKGVkaXRvciwgZSkgPT4ge1xuICAgICAgaWYgKGlzQ2xpY2tFdmVudChlKSAmJiAhVksubWV0YUtleVByZXNzZWQoZSkpIHtcbiAgICAgICAgY29uc3QgZWxtID0gU3VnYXJFbGVtZW50LmZyb21Eb20oZS50YXJnZXQpO1xuICAgICAgICBnZXRBbmNob3JIcmVmT3B0KGVkaXRvciwgZWxtKS5lYWNoKGhyZWYgPT4ge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBpZiAoL14jLy50ZXN0KGhyZWYpKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRFbCA9IGVkaXRvci5kb20uc2VsZWN0KGAkeyBocmVmIH0sW25hbWU9XCIkeyByZW1vdmVMZWFkaW5nKGhyZWYsICcjJykgfVwiXWApO1xuICAgICAgICAgICAgaWYgKHRhcmdldEVsLmxlbmd0aCkge1xuICAgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNjcm9sbEludG9WaWV3KHRhcmdldEVsWzBdLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2luZG93Lm9wZW4oaHJlZiwgJ19ibGFuaycsICdyZWw9bm9vcGVuZXIgbm9yZWZlcnJlcixtZW51YmFyPXllcyx0b29sYmFyPXllcyxsb2NhdGlvbj15ZXMsc3RhdHVzPXllcyxyZXNpemFibGU9eWVzLHNjcm9sbGJhcnM9eWVzJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoaXNSZWFkT25seUFsbG93ZWRFdmVudChlKSkge1xuICAgICAgICBlZGl0b3IuZGlzcGF0Y2goZS50eXBlLCBlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyUmVhZE9ubHlTZWxlY3Rpb25CbG9ja2VycyA9IGVkaXRvciA9PiB7XG4gICAgICBlZGl0b3Iub24oJ1Nob3dDYXJldCcsIGUgPT4ge1xuICAgICAgICBpZiAoaXNSZWFkT25seShlZGl0b3IpKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVkaXRvci5vbignT2JqZWN0U2VsZWN0ZWQnLCBlID0+IHtcbiAgICAgICAgaWYgKGlzUmVhZE9ubHkoZWRpdG9yKSkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG5hdGl2ZUV2ZW50cyA9IFRvb2xzLm1ha2VNYXAoJ2ZvY3VzIGJsdXIgZm9jdXNpbiBmb2N1c291dCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIGJlZm9yZXBhc3RlIHBhc3RlIGN1dCBjb3B5IHNlbGVjdGlvbmNoYW5nZSAnICsgJ21vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSB3aGVlbCBrZXlkb3duIGtleXByZXNzIGtleXVwIGlucHV0IGJlZm9yZWlucHV0IGNvbnRleHRtZW51IGRyYWdzdGFydCBkcmFnZW5kIGRyYWdvdmVyICcgKyAnZHJhZ2dlc3R1cmUgZHJhZ2Ryb3AgZHJvcCBkcmFnIHN1Ym1pdCAnICsgJ2NvbXBvc2l0aW9uc3RhcnQgY29tcG9zaXRpb25lbmQgY29tcG9zaXRpb251cGRhdGUgdG91Y2hzdGFydCB0b3VjaG1vdmUgdG91Y2hlbmQgdG91Y2hjYW5jZWwnLCAnICcpO1xuICAgIGNsYXNzIEV2ZW50RGlzcGF0Y2hlciB7XG4gICAgICBzdGF0aWMgaXNOYXRpdmUobmFtZSkge1xuICAgICAgICByZXR1cm4gISFuYXRpdmVFdmVudHNbbmFtZS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzKSB7XG4gICAgICAgIHRoaXMuYmluZGluZ3MgPSB7fTtcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzIHx8IHt9O1xuICAgICAgICB0aGlzLnNjb3BlID0gdGhpcy5zZXR0aW5ncy5zY29wZSB8fCB0aGlzO1xuICAgICAgICB0aGlzLnRvZ2dsZUV2ZW50ID0gdGhpcy5zZXR0aW5ncy50b2dnbGVFdmVudCB8fCBuZXZlcjtcbiAgICAgIH1cbiAgICAgIGZpcmUobmFtZSwgYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChuYW1lLCBhcmdzKTtcbiAgICAgIH1cbiAgICAgIGRpc3BhdGNoKG5hbWUsIGFyZ3MpIHtcbiAgICAgICAgY29uc3QgbGNOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBldmVudCA9IG5vcm1hbGl6ZSQzKGxjTmFtZSwgYXJncyAhPT0gbnVsbCAmJiBhcmdzICE9PSB2b2lkIDAgPyBhcmdzIDoge30sIHRoaXMuc2NvcGUpO1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5iZWZvcmVGaXJlKSB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5iZWZvcmVGaXJlKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuYmluZGluZ3NbbGNOYW1lXTtcbiAgICAgICAgaWYgKGhhbmRsZXJzKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBoYW5kbGVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gaGFuZGxlcnNbaV07XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sucmVtb3ZlZCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjYWxsYmFjay5vbmNlKSB7XG4gICAgICAgICAgICAgIHRoaXMub2ZmKGxjTmFtZSwgY2FsbGJhY2suZnVuYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2suZnVuYy5jYWxsKHRoaXMuc2NvcGUsIGV2ZW50KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICB9XG4gICAgICBvbihuYW1lLCBjYWxsYmFjaywgcHJlcGVuZCwgZXh0cmEpIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrID09PSBmYWxzZSkge1xuICAgICAgICAgIGNhbGxiYWNrID0gbmV2ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY29uc3Qgd3JhcHBlZENhbGxiYWNrID0ge1xuICAgICAgICAgICAgZnVuYzogY2FsbGJhY2ssXG4gICAgICAgICAgICByZW1vdmVkOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKGV4dHJhKSB7XG4gICAgICAgICAgICBUb29scy5leHRlbmQod3JhcHBlZENhbGxiYWNrLCBleHRyYSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG5hbWVzID0gbmFtZS50b0xvd2VyQ2FzZSgpLnNwbGl0KCcgJyk7XG4gICAgICAgICAgbGV0IGkgPSBuYW1lcy5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudE5hbWUgPSBuYW1lc1tpXTtcbiAgICAgICAgICAgIGxldCBoYW5kbGVycyA9IHRoaXMuYmluZGluZ3NbY3VycmVudE5hbWVdO1xuICAgICAgICAgICAgaWYgKCFoYW5kbGVycykge1xuICAgICAgICAgICAgICBoYW5kbGVycyA9IFtdO1xuICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUV2ZW50KGN1cnJlbnROYW1lLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcmVwZW5kKSB7XG4gICAgICAgICAgICAgIGhhbmRsZXJzID0gW1xuICAgICAgICAgICAgICAgIHdyYXBwZWRDYWxsYmFjayxcbiAgICAgICAgICAgICAgICAuLi5oYW5kbGVyc1xuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaGFuZGxlcnMgPSBbXG4gICAgICAgICAgICAgICAgLi4uaGFuZGxlcnMsXG4gICAgICAgICAgICAgICAgd3JhcHBlZENhbGxiYWNrXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmJpbmRpbmdzW2N1cnJlbnROYW1lXSA9IGhhbmRsZXJzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIG9mZihuYW1lLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgIGNvbnN0IG5hbWVzID0gbmFtZS50b0xvd2VyQ2FzZSgpLnNwbGl0KCcgJyk7XG4gICAgICAgICAgbGV0IGkgPSBuYW1lcy5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudE5hbWUgPSBuYW1lc1tpXTtcbiAgICAgICAgICAgIGxldCBoYW5kbGVycyA9IHRoaXMuYmluZGluZ3NbY3VycmVudE5hbWVdO1xuICAgICAgICAgICAgaWYgKCFjdXJyZW50TmFtZSkge1xuICAgICAgICAgICAgICBlYWNoJGQodGhpcy5iaW5kaW5ncywgKF92YWx1ZSwgYmluZGluZ05hbWUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUV2ZW50KGJpbmRpbmdOYW1lLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuYmluZGluZ3NbYmluZGluZ05hbWVdO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFuZGxlcnMpIHtcbiAgICAgICAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGhhbmRsZXJzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRIYW5kbGVycyA9IHBhcnRpdGlvbiQyKGhhbmRsZXJzLCBoYW5kbGVyID0+IGhhbmRsZXIuZnVuYyA9PT0gY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIGhhbmRsZXJzID0gZmlsdGVyZWRIYW5kbGVycy5mYWlsO1xuICAgICAgICAgICAgICAgIHRoaXMuYmluZGluZ3NbY3VycmVudE5hbWVdID0gaGFuZGxlcnM7XG4gICAgICAgICAgICAgICAgZWFjaCRlKGZpbHRlcmVkSGFuZGxlcnMucGFzcywgaGFuZGxlciA9PiB7XG4gICAgICAgICAgICAgICAgICBoYW5kbGVyLnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICghaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVFdmVudChuYW1lLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuYmluZGluZ3NbY3VycmVudE5hbWVdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVhY2gkZCh0aGlzLmJpbmRpbmdzLCAoX3ZhbHVlLCBuYW1lKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZUV2ZW50KG5hbWUsIGZhbHNlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmJpbmRpbmdzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBvbmNlKG5hbWUsIGNhbGxiYWNrLCBwcmVwZW5kKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9uKG5hbWUsIGNhbGxiYWNrLCBwcmVwZW5kLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBoYXMobmFtZSkge1xuICAgICAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBiaW5kaW5nID0gdGhpcy5iaW5kaW5nc1tuYW1lXTtcbiAgICAgICAgcmV0dXJuICEoIWJpbmRpbmcgfHwgYmluZGluZy5sZW5ndGggPT09IDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGdldEV2ZW50RGlzcGF0Y2hlciA9IG9iaiA9PiB7XG4gICAgICBpZiAoIW9iai5fZXZlbnREaXNwYXRjaGVyKSB7XG4gICAgICAgIG9iai5fZXZlbnREaXNwYXRjaGVyID0gbmV3IEV2ZW50RGlzcGF0Y2hlcih7XG4gICAgICAgICAgc2NvcGU6IG9iaixcbiAgICAgICAgICB0b2dnbGVFdmVudDogKG5hbWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAoRXZlbnREaXNwYXRjaGVyLmlzTmF0aXZlKG5hbWUpICYmIG9iai50b2dnbGVOYXRpdmVFdmVudCkge1xuICAgICAgICAgICAgICBvYmoudG9nZ2xlTmF0aXZlRXZlbnQobmFtZSwgc3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqLl9ldmVudERpc3BhdGNoZXI7XG4gICAgfTtcbiAgICBjb25zdCBPYnNlcnZhYmxlID0ge1xuICAgICAgZmlyZShuYW1lLCBhcmdzLCBidWJibGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2gobmFtZSwgYXJncywgYnViYmxlKTtcbiAgICAgIH0sXG4gICAgICBkaXNwYXRjaChuYW1lLCBhcmdzLCBidWJibGUpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmIChzZWxmLnJlbW92ZWQgJiYgbmFtZSAhPT0gJ3JlbW92ZScgJiYgbmFtZSAhPT0gJ2RldGFjaCcpIHtcbiAgICAgICAgICByZXR1cm4gbm9ybWFsaXplJDMobmFtZS50b0xvd2VyQ2FzZSgpLCBhcmdzICE9PSBudWxsICYmIGFyZ3MgIT09IHZvaWQgMCA/IGFyZ3MgOiB7fSwgc2VsZik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlzcGF0Y2hlckFyZ3MgPSBnZXRFdmVudERpc3BhdGNoZXIoc2VsZikuZGlzcGF0Y2gobmFtZSwgYXJncyk7XG4gICAgICAgIGlmIChidWJibGUgIT09IGZhbHNlICYmIHNlbGYucGFyZW50KSB7XG4gICAgICAgICAgbGV0IHBhcmVudCA9IHNlbGYucGFyZW50KCk7XG4gICAgICAgICAgd2hpbGUgKHBhcmVudCAmJiAhZGlzcGF0Y2hlckFyZ3MuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICAgICAgcGFyZW50LmRpc3BhdGNoKG5hbWUsIGRpc3BhdGNoZXJBcmdzLCBmYWxzZSk7XG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50ID8gcGFyZW50LnBhcmVudCgpIDogdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlzcGF0Y2hlckFyZ3M7XG4gICAgICB9LFxuICAgICAgb24obmFtZSwgY2FsbGJhY2ssIHByZXBlbmQpIHtcbiAgICAgICAgcmV0dXJuIGdldEV2ZW50RGlzcGF0Y2hlcih0aGlzKS5vbihuYW1lLCBjYWxsYmFjaywgcHJlcGVuZCk7XG4gICAgICB9LFxuICAgICAgb2ZmKG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBnZXRFdmVudERpc3BhdGNoZXIodGhpcykub2ZmKG5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIH0sXG4gICAgICBvbmNlKG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBnZXRFdmVudERpc3BhdGNoZXIodGhpcykub25jZShuYW1lLCBjYWxsYmFjayk7XG4gICAgICB9LFxuICAgICAgaGFzRXZlbnRMaXN0ZW5lcnMobmFtZSkge1xuICAgICAgICByZXR1cm4gZ2V0RXZlbnREaXNwYXRjaGVyKHRoaXMpLmhhcyhuYW1lKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgRE9NJDIgPSBET01VdGlscy5ET007XG4gICAgbGV0IGN1c3RvbUV2ZW50Um9vdERlbGVnYXRlcztcbiAgICBjb25zdCBnZXRFdmVudFRhcmdldCA9IChlZGl0b3IsIGV2ZW50TmFtZSkgPT4ge1xuICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gJ3NlbGVjdGlvbmNoYW5nZScpIHtcbiAgICAgICAgcmV0dXJuIGVkaXRvci5nZXREb2MoKTtcbiAgICAgIH1cbiAgICAgIGlmICghZWRpdG9yLmlubGluZSAmJiAvXig/Om1vdXNlfHRvdWNofGNsaWNrfGNvbnRleHRtZW51fGRyb3B8ZHJhZ292ZXJ8ZHJhZ2VuZCkvLnRlc3QoZXZlbnROYW1lKSkge1xuICAgICAgICByZXR1cm4gZWRpdG9yLmdldERvYygpLmRvY3VtZW50RWxlbWVudDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV2ZW50Um9vdCA9IGdldEV2ZW50Um9vdChlZGl0b3IpO1xuICAgICAgaWYgKGV2ZW50Um9vdCkge1xuICAgICAgICBpZiAoIWVkaXRvci5ldmVudFJvb3QpIHtcbiAgICAgICAgICBlZGl0b3IuZXZlbnRSb290ID0gRE9NJDIuc2VsZWN0KGV2ZW50Um9vdClbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVkaXRvci5ldmVudFJvb3Q7XG4gICAgICB9XG4gICAgICByZXR1cm4gZWRpdG9yLmdldEJvZHkoKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzTGlzdGVuaW5nID0gZWRpdG9yID0+ICFlZGl0b3IuaGlkZGVuICYmICFpc1JlYWRPbmx5KGVkaXRvcik7XG4gICAgY29uc3QgZmlyZUV2ZW50ID0gKGVkaXRvciwgZXZlbnROYW1lLCBlKSA9PiB7XG4gICAgICBpZiAoaXNMaXN0ZW5pbmcoZWRpdG9yKSkge1xuICAgICAgICBlZGl0b3IuZGlzcGF0Y2goZXZlbnROYW1lLCBlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNSZWFkT25seShlZGl0b3IpKSB7XG4gICAgICAgIHByb2Nlc3NSZWFkb25seUV2ZW50cyhlZGl0b3IsIGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYmluZEV2ZW50RGVsZWdhdGUgPSAoZWRpdG9yLCBldmVudE5hbWUpID0+IHtcbiAgICAgIGlmICghZWRpdG9yLmRlbGVnYXRlcykge1xuICAgICAgICBlZGl0b3IuZGVsZWdhdGVzID0ge307XG4gICAgICB9XG4gICAgICBpZiAoZWRpdG9yLmRlbGVnYXRlc1tldmVudE5hbWVdIHx8IGVkaXRvci5yZW1vdmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV2ZW50Um9vdEVsbSA9IGdldEV2ZW50VGFyZ2V0KGVkaXRvciwgZXZlbnROYW1lKTtcbiAgICAgIGlmIChnZXRFdmVudFJvb3QoZWRpdG9yKSkge1xuICAgICAgICBpZiAoIWN1c3RvbUV2ZW50Um9vdERlbGVnYXRlcykge1xuICAgICAgICAgIGN1c3RvbUV2ZW50Um9vdERlbGVnYXRlcyA9IHt9O1xuICAgICAgICAgIGVkaXRvci5lZGl0b3JNYW5hZ2VyLm9uKCdyZW1vdmVFZGl0b3InLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWVkaXRvci5lZGl0b3JNYW5hZ2VyLmFjdGl2ZUVkaXRvcikge1xuICAgICAgICAgICAgICBpZiAoY3VzdG9tRXZlbnRSb290RGVsZWdhdGVzKSB7XG4gICAgICAgICAgICAgICAgZWFjaCRkKGN1c3RvbUV2ZW50Um9vdERlbGVnYXRlcywgKF92YWx1ZSwgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgZWRpdG9yLmRvbS51bmJpbmQoZ2V0RXZlbnRUYXJnZXQoZWRpdG9yLCBuYW1lKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY3VzdG9tRXZlbnRSb290RGVsZWdhdGVzID0gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXN0b21FdmVudFJvb3REZWxlZ2F0ZXNbZXZlbnROYW1lXSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWxlZ2F0ZSA9IGUgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0O1xuICAgICAgICAgIGNvbnN0IGVkaXRvcnMgPSBlZGl0b3IuZWRpdG9yTWFuYWdlci5nZXQoKTtcbiAgICAgICAgICBsZXQgaSA9IGVkaXRvcnMubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBlZGl0b3JzW2ldLmdldEJvZHkoKTtcbiAgICAgICAgICAgIGlmIChib2R5ID09PSB0YXJnZXQgfHwgRE9NJDIuaXNDaGlsZE9mKHRhcmdldCwgYm9keSkpIHtcbiAgICAgICAgICAgICAgZmlyZUV2ZW50KGVkaXRvcnNbaV0sIGV2ZW50TmFtZSwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjdXN0b21FdmVudFJvb3REZWxlZ2F0ZXNbZXZlbnROYW1lXSA9IGRlbGVnYXRlO1xuICAgICAgICBET00kMi5iaW5kKGV2ZW50Um9vdEVsbSwgZXZlbnROYW1lLCBkZWxlZ2F0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBkZWxlZ2F0ZSA9IGUgPT4ge1xuICAgICAgICAgIGZpcmVFdmVudChlZGl0b3IsIGV2ZW50TmFtZSwgZSk7XG4gICAgICAgIH07XG4gICAgICAgIERPTSQyLmJpbmQoZXZlbnRSb290RWxtLCBldmVudE5hbWUsIGRlbGVnYXRlKTtcbiAgICAgICAgZWRpdG9yLmRlbGVnYXRlc1tldmVudE5hbWVdID0gZGVsZWdhdGU7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBFZGl0b3JPYnNlcnZhYmxlID0ge1xuICAgICAgLi4uT2JzZXJ2YWJsZSxcbiAgICAgIGJpbmRQZW5kaW5nRXZlbnREZWxlZ2F0ZXMoKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBUb29scy5lYWNoKHNlbGYuX3BlbmRpbmdOYXRpdmVFdmVudHMsIG5hbWUgPT4ge1xuICAgICAgICAgIGJpbmRFdmVudERlbGVnYXRlKHNlbGYsIG5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB0b2dnbGVOYXRpdmVFdmVudChuYW1lLCBzdGF0ZSkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKG5hbWUgPT09ICdmb2N1cycgfHwgbmFtZSA9PT0gJ2JsdXInKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLnJlbW92ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgaWYgKHNlbGYuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIGJpbmRFdmVudERlbGVnYXRlKHNlbGYsIG5hbWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXNlbGYuX3BlbmRpbmdOYXRpdmVFdmVudHMpIHtcbiAgICAgICAgICAgICAgc2VsZi5fcGVuZGluZ05hdGl2ZUV2ZW50cyA9IFtuYW1lXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbGYuX3BlbmRpbmdOYXRpdmVFdmVudHMucHVzaChuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZi5pbml0aWFsaXplZCAmJiBzZWxmLmRlbGVnYXRlcykge1xuICAgICAgICAgIHNlbGYuZG9tLnVuYmluZChnZXRFdmVudFRhcmdldChzZWxmLCBuYW1lKSwgbmFtZSwgc2VsZi5kZWxlZ2F0ZXNbbmFtZV0pO1xuICAgICAgICAgIGRlbGV0ZSBzZWxmLmRlbGVnYXRlc1tuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVuYmluZEFsbE5hdGl2ZUV2ZW50cygpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBzZWxmLmdldEJvZHkoKTtcbiAgICAgICAgY29uc3QgZG9tID0gc2VsZi5kb207XG4gICAgICAgIGlmIChzZWxmLmRlbGVnYXRlcykge1xuICAgICAgICAgIGVhY2gkZChzZWxmLmRlbGVnYXRlcywgKHZhbHVlLCBuYW1lKSA9PiB7XG4gICAgICAgICAgICBzZWxmLmRvbS51bmJpbmQoZ2V0RXZlbnRUYXJnZXQoc2VsZiwgbmFtZSksIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBkZWxldGUgc2VsZi5kZWxlZ2F0ZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzZWxmLmlubGluZSAmJiBib2R5ICYmIGRvbSkge1xuICAgICAgICAgIGJvZHkub25sb2FkID0gbnVsbDtcbiAgICAgICAgICBkb20udW5iaW5kKHNlbGYuZ2V0V2luKCkpO1xuICAgICAgICAgIGRvbS51bmJpbmQoc2VsZi5nZXREb2MoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRvbSkge1xuICAgICAgICAgIGRvbS51bmJpbmQoYm9keSk7XG4gICAgICAgICAgZG9tLnVuYmluZChzZWxmLmdldENvbnRhaW5lcigpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBzdHJpbmdMaXN0UHJvY2Vzc29yID0gdmFsdWUgPT4ge1xuICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlOiB2YWx1ZS5zcGxpdCgvWyAsXS8pLFxuICAgICAgICAgIHZhbGlkOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXlPZih2YWx1ZSwgaXNTdHJpbmcpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgdmFsaWQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgIG1lc3NhZ2U6IGBUaGUgdmFsdWUgbXVzdCBiZSBhIHN0cmluZ1tdIG9yIGEgY29tbWEvc3BhY2Ugc2VwYXJhdGVkIHN0cmluZy5gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRCdWlsdEluUHJvY2Vzc29yID0gdHlwZSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0b3IgPSAoKCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgICAgIHJldHVybiBpc0FycmF5JDE7XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgIHJldHVybiBpc0Jvb2xlYW47XG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICByZXR1cm4gaXNGdW5jdGlvbjtcbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICByZXR1cm4gaXNOdW1iZXI7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgcmV0dXJuIGlzT2JqZWN0O1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgIHJldHVybiBpc1N0cmluZztcbiAgICAgICAgY2FzZSAnc3RyaW5nW10nOlxuICAgICAgICAgIHJldHVybiBzdHJpbmdMaXN0UHJvY2Vzc29yO1xuICAgICAgICBjYXNlICdvYmplY3RbXSc6XG4gICAgICAgICAgcmV0dXJuIHZhbCA9PiBpc0FycmF5T2YodmFsLCBpc09iamVjdCk7XG4gICAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgICAgcmV0dXJuIHZhbCA9PiBpcyQ0KHZhbCwgUmVnRXhwKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gYWx3YXlzO1xuICAgICAgICB9XG4gICAgICB9KSgpO1xuICAgICAgcmV0dXJuIHZhbHVlID0+IHByb2Nlc3NWYWx1ZSh2YWx1ZSwgdmFsaWRhdG9yLCBgVGhlIHZhbHVlIG11c3QgYmUgYSAkeyB0eXBlIH0uYCk7XG4gICAgfTtcbiAgICBjb25zdCBpc0J1aWx0SW5TcGVjID0gc3BlYyA9PiBpc1N0cmluZyhzcGVjLnByb2Nlc3Nvcik7XG4gICAgY29uc3QgZ2V0RXJyb3JNZXNzYWdlID0gKG1lc3NhZ2UsIHJlc3VsdCkgPT4ge1xuICAgICAgY29uc3QgYWRkaXRpb25hbFRleHQgPSBpc0VtcHR5JDMocmVzdWx0Lm1lc3NhZ2UpID8gJycgOiBgLiAkeyByZXN1bHQubWVzc2FnZSB9YDtcbiAgICAgIHJldHVybiBtZXNzYWdlICsgYWRkaXRpb25hbFRleHQ7XG4gICAgfTtcbiAgICBjb25zdCBpc1ZhbGlkUmVzdWx0ID0gcmVzdWx0ID0+IHJlc3VsdC52YWxpZDtcbiAgICBjb25zdCBwcm9jZXNzVmFsdWUgPSAodmFsdWUsIHByb2Nlc3NvciwgbWVzc2FnZSA9ICcnKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBwcm9jZXNzb3IodmFsdWUpO1xuICAgICAgaWYgKGlzQm9vbGVhbihyZXN1bHQpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQgPyB7XG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHZhbGlkOiB0cnVlXG4gICAgICAgIH0gOiB7XG4gICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgIG1lc3NhZ2VcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBwcm9jZXNzRGVmYXVsdFZhbHVlID0gKG5hbWUsIGRlZmF1bHRWYWx1ZSwgcHJvY2Vzc29yKSA9PiB7XG4gICAgICBpZiAoIWlzVW5kZWZpbmVkKGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcHJvY2Vzc1ZhbHVlKGRlZmF1bHRWYWx1ZSwgcHJvY2Vzc29yKTtcbiAgICAgICAgaWYgKGlzVmFsaWRSZXN1bHQocmVzdWx0KSkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQudmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihnZXRFcnJvck1lc3NhZ2UoYEludmFsaWQgZGVmYXVsdCB2YWx1ZSBwYXNzZWQgZm9yIHRoZSBcIiR7IG5hbWUgfVwiIG9wdGlvbmAsIHJlc3VsdCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlJDUgPSAoZWRpdG9yLCBpbml0aWFsT3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgcmVnaXN0cnkgPSB7fTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHt9O1xuICAgICAgY29uc3Qgc2V0VmFsdWUgPSAobmFtZSwgdmFsdWUsIHByb2Nlc3NvcikgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwcm9jZXNzVmFsdWUodmFsdWUsIHByb2Nlc3Nvcik7XG4gICAgICAgIGlmIChpc1ZhbGlkUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgICAgICB2YWx1ZXNbbmFtZV0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGdldEVycm9yTWVzc2FnZShgSW52YWxpZCB2YWx1ZSBwYXNzZWQgZm9yIHRoZSAkeyBuYW1lIH0gb3B0aW9uYCwgcmVzdWx0KSk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVnaXN0ZXIgPSAobmFtZSwgc3BlYykgPT4ge1xuICAgICAgICBjb25zdCBwcm9jZXNzb3IgPSBpc0J1aWx0SW5TcGVjKHNwZWMpID8gZ2V0QnVpbHRJblByb2Nlc3NvcihzcGVjLnByb2Nlc3NvcikgOiBzcGVjLnByb2Nlc3NvcjtcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gcHJvY2Vzc0RlZmF1bHRWYWx1ZShuYW1lLCBzcGVjLmRlZmF1bHQsIHByb2Nlc3Nvcik7XG4gICAgICAgIHJlZ2lzdHJ5W25hbWVdID0ge1xuICAgICAgICAgIC4uLnNwZWMsXG4gICAgICAgICAgZGVmYXVsdDogZGVmYXVsdFZhbHVlLFxuICAgICAgICAgIHByb2Nlc3NvclxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpbml0VmFsdWUgPSBnZXQkYSh2YWx1ZXMsIG5hbWUpLm9yVGh1bmsoKCkgPT4gZ2V0JGEoaW5pdGlhbE9wdGlvbnMsIG5hbWUpKTtcbiAgICAgICAgaW5pdFZhbHVlLmVhY2godmFsdWUgPT4gc2V0VmFsdWUobmFtZSwgdmFsdWUsIHByb2Nlc3NvcikpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzUmVnaXN0ZXJlZCA9IG5hbWUgPT4gaGFzJDIocmVnaXN0cnksIG5hbWUpO1xuICAgICAgY29uc3QgZ2V0ID0gbmFtZSA9PiBnZXQkYSh2YWx1ZXMsIG5hbWUpLm9yVGh1bmsoKCkgPT4gZ2V0JGEocmVnaXN0cnksIG5hbWUpLm1hcChzcGVjID0+IHNwZWMuZGVmYXVsdCkpLmdldE9yVW5kZWZpbmVkKCk7XG4gICAgICBjb25zdCBzZXQgPSAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgaWYgKCFpc1JlZ2lzdGVyZWQobmFtZSkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFwiJHsgbmFtZSB9XCIgaXMgbm90IGEgcmVnaXN0ZXJlZCBvcHRpb24uIEVuc3VyZSB0aGUgb3B0aW9uIGhhcyBiZWVuIHJlZ2lzdGVyZWQgYmVmb3JlIHNldHRpbmcgYSB2YWx1ZS5gKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3BlYyA9IHJlZ2lzdHJ5W25hbWVdO1xuICAgICAgICAgIGlmIChzcGVjLmltbXV0YWJsZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgXCIkeyBuYW1lIH1cIiBpcyBhbiBpbW11dGFibGUgb3B0aW9uIGFuZCBjYW5ub3QgYmUgdXBkYXRlZGApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0VmFsdWUobmFtZSwgdmFsdWUsIHNwZWMucHJvY2Vzc29yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCB1bnNldCA9IG5hbWUgPT4ge1xuICAgICAgICBjb25zdCByZWdpc3RlcmVkID0gaXNSZWdpc3RlcmVkKG5hbWUpO1xuICAgICAgICBpZiAocmVnaXN0ZXJlZCkge1xuICAgICAgICAgIGRlbGV0ZSB2YWx1ZXNbbmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlZ2lzdGVyZWQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgaXNTZXQgPSBuYW1lID0+IGhhcyQyKHZhbHVlcywgbmFtZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWdpc3RlcixcbiAgICAgICAgaXNSZWdpc3RlcmVkLFxuICAgICAgICBnZXQsXG4gICAgICAgIHNldCxcbiAgICAgICAgdW5zZXQsXG4gICAgICAgIGlzU2V0XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBkZWZhdWx0TW9kZXMgPSBbXG4gICAgICAnZGVzaWduJyxcbiAgICAgICdyZWFkb25seSdcbiAgICBdO1xuICAgIGNvbnN0IHN3aXRjaFRvTW9kZSA9IChlZGl0b3IsIGFjdGl2ZU1vZGUsIGF2YWlsYWJsZU1vZGVzLCBtb2RlKSA9PiB7XG4gICAgICBjb25zdCBvbGRNb2RlID0gYXZhaWxhYmxlTW9kZXNbYWN0aXZlTW9kZS5nZXQoKV07XG4gICAgICBjb25zdCBuZXdNb2RlID0gYXZhaWxhYmxlTW9kZXNbbW9kZV07XG4gICAgICB0cnkge1xuICAgICAgICBuZXdNb2RlLmFjdGl2YXRlKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYHByb2JsZW0gd2hpbGUgYWN0aXZhdGluZyBlZGl0b3IgbW9kZSAkeyBtb2RlIH06YCwgZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG9sZE1vZGUuZGVhY3RpdmF0ZSgpO1xuICAgICAgaWYgKG9sZE1vZGUuZWRpdG9yUmVhZE9ubHkgIT09IG5ld01vZGUuZWRpdG9yUmVhZE9ubHkpIHtcbiAgICAgICAgdG9nZ2xlUmVhZE9ubHkoZWRpdG9yLCBuZXdNb2RlLmVkaXRvclJlYWRPbmx5KTtcbiAgICAgIH1cbiAgICAgIGFjdGl2ZU1vZGUuc2V0KG1vZGUpO1xuICAgICAgZmlyZVN3aXRjaE1vZGUoZWRpdG9yLCBtb2RlKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldE1vZGUgPSAoZWRpdG9yLCBhdmFpbGFibGVNb2RlcywgYWN0aXZlTW9kZSwgbW9kZSkgPT4ge1xuICAgICAgaWYgKG1vZGUgPT09IGFjdGl2ZU1vZGUuZ2V0KCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmICghaGFzJDIoYXZhaWxhYmxlTW9kZXMsIG1vZGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRWRpdG9yIG1vZGUgJyR7IG1vZGUgfScgaXMgaW52YWxpZGApO1xuICAgICAgfVxuICAgICAgaWYgKGVkaXRvci5pbml0aWFsaXplZCkge1xuICAgICAgICBzd2l0Y2hUb01vZGUoZWRpdG9yLCBhY3RpdmVNb2RlLCBhdmFpbGFibGVNb2RlcywgbW9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGl0b3Iub24oJ2luaXQnLCAoKSA9PiBzd2l0Y2hUb01vZGUoZWRpdG9yLCBhY3RpdmVNb2RlLCBhdmFpbGFibGVNb2RlcywgbW9kZSkpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXJNb2RlID0gKGF2YWlsYWJsZU1vZGVzLCBtb2RlLCBhcGkpID0+IHtcbiAgICAgIGlmIChjb250YWlucyQyKGRlZmF1bHRNb2RlcywgbW9kZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcnJpZGUgZGVmYXVsdCBtb2RlICR7IG1vZGUgfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYXZhaWxhYmxlTW9kZXMsXG4gICAgICAgIFttb2RlXToge1xuICAgICAgICAgIC4uLmFwaSxcbiAgICAgICAgICBkZWFjdGl2YXRlOiAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhcGkuZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBwcm9ibGVtIHdoaWxlIGRlYWN0aXZhdGluZyBlZGl0b3IgbW9kZSAkeyBtb2RlIH06YCwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGUkNCA9IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCBhY3RpdmVNb2RlID0gQ2VsbCgnZGVzaWduJyk7XG4gICAgICBjb25zdCBhdmFpbGFibGVNb2RlcyA9IENlbGwoe1xuICAgICAgICBkZXNpZ246IHtcbiAgICAgICAgICBhY3RpdmF0ZTogbm9vcCxcbiAgICAgICAgICBkZWFjdGl2YXRlOiBub29wLFxuICAgICAgICAgIGVkaXRvclJlYWRPbmx5OiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICByZWFkb25seToge1xuICAgICAgICAgIGFjdGl2YXRlOiBub29wLFxuICAgICAgICAgIGRlYWN0aXZhdGU6IG5vb3AsXG4gICAgICAgICAgZWRpdG9yUmVhZE9ubHk6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZWdpc3RlclJlYWRPbmx5Q29udGVudEZpbHRlcnMoZWRpdG9yKTtcbiAgICAgIHJlZ2lzdGVyUmVhZE9ubHlTZWxlY3Rpb25CbG9ja2VycyhlZGl0b3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNSZWFkT25seTogKCkgPT4gaXNSZWFkT25seShlZGl0b3IpLFxuICAgICAgICBzZXQ6IG1vZGUgPT4gc2V0TW9kZShlZGl0b3IsIGF2YWlsYWJsZU1vZGVzLmdldCgpLCBhY3RpdmVNb2RlLCBtb2RlKSxcbiAgICAgICAgZ2V0OiAoKSA9PiBhY3RpdmVNb2RlLmdldCgpLFxuICAgICAgICByZWdpc3RlcjogKG1vZGUsIGFwaSkgPT4ge1xuICAgICAgICAgIGF2YWlsYWJsZU1vZGVzLnNldChyZWdpc3Rlck1vZGUoYXZhaWxhYmxlTW9kZXMuZ2V0KCksIG1vZGUsIGFwaSkpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBlYWNoJDIgPSBUb29scy5lYWNoLCBleHBsb2RlID0gVG9vbHMuZXhwbG9kZTtcbiAgICBjb25zdCBrZXlDb2RlTG9va3VwID0ge1xuICAgICAgZjE6IDExMixcbiAgICAgIGYyOiAxMTMsXG4gICAgICBmMzogMTE0LFxuICAgICAgZjQ6IDExNSxcbiAgICAgIGY1OiAxMTYsXG4gICAgICBmNjogMTE3LFxuICAgICAgZjc6IDExOCxcbiAgICAgIGY4OiAxMTksXG4gICAgICBmOTogMTIwLFxuICAgICAgZjEwOiAxMjEsXG4gICAgICBmMTE6IDEyMixcbiAgICAgIGYxMjogMTIzXG4gICAgfTtcbiAgICBjb25zdCBtb2RpZmllck5hbWVzID0gVG9vbHMubWFrZU1hcCgnYWx0LGN0cmwsc2hpZnQsbWV0YSxhY2Nlc3MnKTtcbiAgICBjb25zdCBpc01vZGlmaWVyID0ga2V5ID0+IGtleSBpbiBtb2RpZmllck5hbWVzO1xuICAgIGNvbnN0IHBhcnNlU2hvcnRjdXQgPSBwYXR0ZXJuID0+IHtcbiAgICAgIGNvbnN0IHNob3J0Y3V0ID0ge307XG4gICAgICBjb25zdCBpc01hYyA9IEVudi5vcy5pc01hY09TKCkgfHwgRW52Lm9zLmlzaU9TKCk7XG4gICAgICBlYWNoJDIoZXhwbG9kZShwYXR0ZXJuLnRvTG93ZXJDYXNlKCksICcrJyksIHZhbHVlID0+IHtcbiAgICAgICAgaWYgKGlzTW9kaWZpZXIodmFsdWUpKSB7XG4gICAgICAgICAgc2hvcnRjdXRbdmFsdWVdID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoL15bMC05XXsyLH0kLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgc2hvcnRjdXQua2V5Q29kZSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNob3J0Y3V0LmNoYXJDb2RlID0gdmFsdWUuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgICAgIHNob3J0Y3V0LmtleUNvZGUgPSBrZXlDb2RlTG9va3VwW3ZhbHVlXSB8fCB2YWx1ZS50b1VwcGVyQ2FzZSgpLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGlkID0gW3Nob3J0Y3V0LmtleUNvZGVdO1xuICAgICAgbGV0IGtleTtcbiAgICAgIGZvciAoa2V5IGluIG1vZGlmaWVyTmFtZXMpIHtcbiAgICAgICAgaWYgKHNob3J0Y3V0W2tleV0pIHtcbiAgICAgICAgICBpZC5wdXNoKGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2hvcnRjdXRba2V5XSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzaG9ydGN1dC5pZCA9IGlkLmpvaW4oJywnKTtcbiAgICAgIGlmIChzaG9ydGN1dC5hY2Nlc3MpIHtcbiAgICAgICAgc2hvcnRjdXQuYWx0ID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzTWFjKSB7XG4gICAgICAgICAgc2hvcnRjdXQuY3RybCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2hvcnRjdXQuc2hpZnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc2hvcnRjdXQubWV0YSkge1xuICAgICAgICBpZiAoaXNNYWMpIHtcbiAgICAgICAgICBzaG9ydGN1dC5tZXRhID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzaG9ydGN1dC5jdHJsID0gdHJ1ZTtcbiAgICAgICAgICBzaG9ydGN1dC5tZXRhID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzaG9ydGN1dDtcbiAgICB9O1xuICAgIGNsYXNzIFNob3J0Y3V0cyB7XG4gICAgICBjb25zdHJ1Y3RvcihlZGl0b3IpIHtcbiAgICAgICAgdGhpcy5zaG9ydGN1dHMgPSB7fTtcbiAgICAgICAgdGhpcy5wZW5kaW5nUGF0dGVybnMgPSBbXTtcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBlZGl0b3Iub24oJ2tleXVwIGtleXByZXNzIGtleWRvd24nLCBlID0+IHtcbiAgICAgICAgICBpZiAoKHNlbGYuaGFzTW9kaWZpZXIoZSkgfHwgc2VsZi5pc0Z1bmN0aW9uS2V5KGUpKSAmJiAhZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgICAgZWFjaCQyKHNlbGYuc2hvcnRjdXRzLCBzaG9ydGN1dCA9PiB7XG4gICAgICAgICAgICAgIGlmIChzZWxmLm1hdGNoU2hvcnRjdXQoZSwgc2hvcnRjdXQpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5wZW5kaW5nUGF0dGVybnMgPSBzaG9ydGN1dC5zdWJwYXR0ZXJucy5zbGljZSgwKTtcbiAgICAgICAgICAgICAgICBpZiAoZS50eXBlID09PSAna2V5ZG93bicpIHtcbiAgICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0ZVNob3J0Y3V0QWN0aW9uKHNob3J0Y3V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHNlbGYubWF0Y2hTaG9ydGN1dChlLCBzZWxmLnBlbmRpbmdQYXR0ZXJuc1swXSkpIHtcbiAgICAgICAgICAgICAgaWYgKHNlbGYucGVuZGluZ1BhdHRlcm5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChlLnR5cGUgPT09ICdrZXlkb3duJykge1xuICAgICAgICAgICAgICAgICAgc2VsZi5leGVjdXRlU2hvcnRjdXRBY3Rpb24oc2VsZi5wZW5kaW5nUGF0dGVybnNbMF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzZWxmLnBlbmRpbmdQYXR0ZXJucy5zaGlmdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhZGQocGF0dGVybiwgZGVzYywgY21kRnVuYywgc2NvcGUpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGZ1bmMgPSBzZWxmLm5vcm1hbGl6ZUNvbW1hbmRGdW5jKGNtZEZ1bmMpO1xuICAgICAgICBlYWNoJDIoZXhwbG9kZShUb29scy50cmltKHBhdHRlcm4pKSwgcGF0dGVybiA9PiB7XG4gICAgICAgICAgY29uc3Qgc2hvcnRjdXQgPSBzZWxmLmNyZWF0ZVNob3J0Y3V0KHBhdHRlcm4sIGRlc2MsIGZ1bmMsIHNjb3BlKTtcbiAgICAgICAgICBzZWxmLnNob3J0Y3V0c1tzaG9ydGN1dC5pZF0gPSBzaG9ydGN1dDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmVtb3ZlKHBhdHRlcm4pIHtcbiAgICAgICAgY29uc3Qgc2hvcnRjdXQgPSB0aGlzLmNyZWF0ZVNob3J0Y3V0KHBhdHRlcm4pO1xuICAgICAgICBpZiAodGhpcy5zaG9ydGN1dHNbc2hvcnRjdXQuaWRdKSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuc2hvcnRjdXRzW3Nob3J0Y3V0LmlkXTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBub3JtYWxpemVDb21tYW5kRnVuYyhjbWRGdW5jKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBjbWQgPSBjbWRGdW5jO1xuICAgICAgICBpZiAodHlwZW9mIGNtZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgc2VsZi5lZGl0b3IuZXhlY0NvbW1hbmQoY21kLCBmYWxzZSwgbnVsbCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChUb29scy5pc0FycmF5KGNtZCkpIHtcbiAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgc2VsZi5lZGl0b3IuZXhlY0NvbW1hbmQoY21kWzBdLCBjbWRbMV0sIGNtZFsyXSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gY21kO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjcmVhdGVTaG9ydGN1dChwYXR0ZXJuLCBkZXNjLCBjbWRGdW5jLCBzY29wZSkge1xuICAgICAgICBjb25zdCBzaG9ydGN1dHMgPSBUb29scy5tYXAoZXhwbG9kZShwYXR0ZXJuLCAnPicpLCBwYXJzZVNob3J0Y3V0KTtcbiAgICAgICAgc2hvcnRjdXRzW3Nob3J0Y3V0cy5sZW5ndGggLSAxXSA9IFRvb2xzLmV4dGVuZChzaG9ydGN1dHNbc2hvcnRjdXRzLmxlbmd0aCAtIDFdLCB7XG4gICAgICAgICAgZnVuYzogY21kRnVuYyxcbiAgICAgICAgICBzY29wZTogc2NvcGUgfHwgdGhpcy5lZGl0b3JcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBUb29scy5leHRlbmQoc2hvcnRjdXRzWzBdLCB7XG4gICAgICAgICAgZGVzYzogdGhpcy5lZGl0b3IudHJhbnNsYXRlKGRlc2MpLFxuICAgICAgICAgIHN1YnBhdHRlcm5zOiBzaG9ydGN1dHMuc2xpY2UoMSlcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBoYXNNb2RpZmllcihlKSB7XG4gICAgICAgIHJldHVybiBlLmFsdEtleSB8fCBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5O1xuICAgICAgfVxuICAgICAgaXNGdW5jdGlvbktleShlKSB7XG4gICAgICAgIHJldHVybiBlLnR5cGUgPT09ICdrZXlkb3duJyAmJiBlLmtleUNvZGUgPj0gMTEyICYmIGUua2V5Q29kZSA8PSAxMjM7XG4gICAgICB9XG4gICAgICBtYXRjaFNob3J0Y3V0KGUsIHNob3J0Y3V0KSB7XG4gICAgICAgIGlmICghc2hvcnRjdXQpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3J0Y3V0LmN0cmwgIT09IGUuY3RybEtleSB8fCBzaG9ydGN1dC5tZXRhICE9PSBlLm1ldGFLZXkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3J0Y3V0LmFsdCAhPT0gZS5hbHRLZXkgfHwgc2hvcnRjdXQuc2hpZnQgIT09IGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gc2hvcnRjdXQua2V5Q29kZSB8fCBlLmNoYXJDb2RlICYmIGUuY2hhckNvZGUgPT09IHNob3J0Y3V0LmNoYXJDb2RlKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGV4ZWN1dGVTaG9ydGN1dEFjdGlvbihzaG9ydGN1dCkge1xuICAgICAgICByZXR1cm4gc2hvcnRjdXQuZnVuYyA/IHNob3J0Y3V0LmZ1bmMuY2FsbChzaG9ydGN1dC5zY29wZSkgOiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNyZWF0ZSQzID0gKCkgPT4ge1xuICAgICAgY29uc3QgYnV0dG9ucyA9IHt9O1xuICAgICAgY29uc3QgbWVudUl0ZW1zID0ge307XG4gICAgICBjb25zdCBwb3B1cHMgPSB7fTtcbiAgICAgIGNvbnN0IGljb25zID0ge307XG4gICAgICBjb25zdCBjb250ZXh0TWVudXMgPSB7fTtcbiAgICAgIGNvbnN0IGNvbnRleHRUb29sYmFycyA9IHt9O1xuICAgICAgY29uc3Qgc2lkZWJhcnMgPSB7fTtcbiAgICAgIGNvbnN0IHZpZXdzID0ge307XG4gICAgICBjb25zdCBhZGQgPSAoY29sbGVjdGlvbiwgdHlwZSkgPT4gKG5hbWUsIHNwZWMpID0+IHtcbiAgICAgICAgY29sbGVjdGlvbltuYW1lLnRvTG93ZXJDYXNlKCldID0ge1xuICAgICAgICAgIC4uLnNwZWMsXG4gICAgICAgICAgdHlwZVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkZEljb24gPSAobmFtZSwgc3ZnRGF0YSkgPT4gaWNvbnNbbmFtZS50b0xvd2VyQ2FzZSgpXSA9IHN2Z0RhdGE7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhZGRCdXR0b246IGFkZChidXR0b25zLCAnYnV0dG9uJyksXG4gICAgICAgIGFkZEdyb3VwVG9vbGJhckJ1dHRvbjogYWRkKGJ1dHRvbnMsICdncm91cHRvb2xiYXJidXR0b24nKSxcbiAgICAgICAgYWRkVG9nZ2xlQnV0dG9uOiBhZGQoYnV0dG9ucywgJ3RvZ2dsZWJ1dHRvbicpLFxuICAgICAgICBhZGRNZW51QnV0dG9uOiBhZGQoYnV0dG9ucywgJ21lbnVidXR0b24nKSxcbiAgICAgICAgYWRkU3BsaXRCdXR0b246IGFkZChidXR0b25zLCAnc3BsaXRidXR0b24nKSxcbiAgICAgICAgYWRkTWVudUl0ZW06IGFkZChtZW51SXRlbXMsICdtZW51aXRlbScpLFxuICAgICAgICBhZGROZXN0ZWRNZW51SXRlbTogYWRkKG1lbnVJdGVtcywgJ25lc3RlZG1lbnVpdGVtJyksXG4gICAgICAgIGFkZFRvZ2dsZU1lbnVJdGVtOiBhZGQobWVudUl0ZW1zLCAndG9nZ2xlbWVudWl0ZW0nKSxcbiAgICAgICAgYWRkQXV0b2NvbXBsZXRlcjogYWRkKHBvcHVwcywgJ2F1dG9jb21wbGV0ZXInKSxcbiAgICAgICAgYWRkQ29udGV4dE1lbnU6IGFkZChjb250ZXh0TWVudXMsICdjb250ZXh0bWVudScpLFxuICAgICAgICBhZGRDb250ZXh0VG9vbGJhcjogYWRkKGNvbnRleHRUb29sYmFycywgJ2NvbnRleHR0b29sYmFyJyksXG4gICAgICAgIGFkZENvbnRleHRGb3JtOiBhZGQoY29udGV4dFRvb2xiYXJzLCAnY29udGV4dGZvcm0nKSxcbiAgICAgICAgYWRkU2lkZWJhcjogYWRkKHNpZGViYXJzLCAnc2lkZWJhcicpLFxuICAgICAgICBhZGRWaWV3OiBhZGQodmlld3MsICd2aWV3cycpLFxuICAgICAgICBhZGRJY29uLFxuICAgICAgICBnZXRBbGw6ICgpID0+ICh7XG4gICAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgICBtZW51SXRlbXMsXG4gICAgICAgICAgaWNvbnMsXG4gICAgICAgICAgcG9wdXBzLFxuICAgICAgICAgIGNvbnRleHRNZW51cyxcbiAgICAgICAgICBjb250ZXh0VG9vbGJhcnMsXG4gICAgICAgICAgc2lkZWJhcnMsXG4gICAgICAgICAgdmlld3NcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gKCkgPT4ge1xuICAgICAgY29uc3QgYnJpZGdlID0gY3JlYXRlJDMoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFkZEF1dG9jb21wbGV0ZXI6IGJyaWRnZS5hZGRBdXRvY29tcGxldGVyLFxuICAgICAgICBhZGRCdXR0b246IGJyaWRnZS5hZGRCdXR0b24sXG4gICAgICAgIGFkZENvbnRleHRGb3JtOiBicmlkZ2UuYWRkQ29udGV4dEZvcm0sXG4gICAgICAgIGFkZENvbnRleHRNZW51OiBicmlkZ2UuYWRkQ29udGV4dE1lbnUsXG4gICAgICAgIGFkZENvbnRleHRUb29sYmFyOiBicmlkZ2UuYWRkQ29udGV4dFRvb2xiYXIsXG4gICAgICAgIGFkZEljb246IGJyaWRnZS5hZGRJY29uLFxuICAgICAgICBhZGRNZW51QnV0dG9uOiBicmlkZ2UuYWRkTWVudUJ1dHRvbixcbiAgICAgICAgYWRkTWVudUl0ZW06IGJyaWRnZS5hZGRNZW51SXRlbSxcbiAgICAgICAgYWRkTmVzdGVkTWVudUl0ZW06IGJyaWRnZS5hZGROZXN0ZWRNZW51SXRlbSxcbiAgICAgICAgYWRkU2lkZWJhcjogYnJpZGdlLmFkZFNpZGViYXIsXG4gICAgICAgIGFkZFNwbGl0QnV0dG9uOiBicmlkZ2UuYWRkU3BsaXRCdXR0b24sXG4gICAgICAgIGFkZFRvZ2dsZUJ1dHRvbjogYnJpZGdlLmFkZFRvZ2dsZUJ1dHRvbixcbiAgICAgICAgYWRkR3JvdXBUb29sYmFyQnV0dG9uOiBicmlkZ2UuYWRkR3JvdXBUb29sYmFyQnV0dG9uLFxuICAgICAgICBhZGRUb2dnbGVNZW51SXRlbTogYnJpZGdlLmFkZFRvZ2dsZU1lbnVJdGVtLFxuICAgICAgICBhZGRWaWV3OiBicmlkZ2UuYWRkVmlldyxcbiAgICAgICAgZ2V0QWxsOiBicmlkZ2UuZ2V0QWxsXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBET00kMSA9IERPTVV0aWxzLkRPTTtcbiAgICBjb25zdCBleHRlbmQgPSBUb29scy5leHRlbmQsIGVhY2gkMSA9IFRvb2xzLmVhY2g7XG4gICAgY2xhc3MgRWRpdG9yIHtcbiAgICAgIGNvbnN0cnVjdG9yKGlkLCBvcHRpb25zLCBlZGl0b3JNYW5hZ2VyKSB7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IHt9O1xuICAgICAgICB0aGlzLmNvbnRlbnRDU1MgPSBbXTtcbiAgICAgICAgdGhpcy5jb250ZW50U3R5bGVzID0gW107XG4gICAgICAgIHRoaXMubG9hZGVkQ1NTID0ge307XG4gICAgICAgIHRoaXMuaXNOb3REaXJ0eSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbXBvc2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhhc0hpZGRlbklucHV0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaWZyYW1lRWxlbWVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZWFkb25seSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFydENvbnRlbnQgPSAnJztcbiAgICAgICAgdGhpcy5fcGVuZGluZ05hdGl2ZUV2ZW50cyA9IFtdO1xuICAgICAgICB0aGlzLl9za2luTG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2VkaXRhYmxlUm9vdCA9IHRydWU7XG4gICAgICAgIHRoaXMuZWRpdG9yTWFuYWdlciA9IGVkaXRvck1hbmFnZXI7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRCYXNlVXJsID0gZWRpdG9yTWFuYWdlci5kb2N1bWVudEJhc2VVUkw7XG4gICAgICAgIGV4dGVuZCh0aGlzLCBFZGl0b3JPYnNlcnZhYmxlKTtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgdGhpcy5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZE9wdGlvbnMgPSBub3JtYWxpemVPcHRpb25zKGVkaXRvck1hbmFnZXIuZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBjcmVhdGUkNShzZWxmLCBub3JtYWxpemVkT3B0aW9ucyk7XG4gICAgICAgIHJlZ2lzdGVyJDcoc2VsZik7XG4gICAgICAgIGNvbnN0IGdldE9wdGlvbiA9IHRoaXMub3B0aW9ucy5nZXQ7XG4gICAgICAgIGlmIChnZXRPcHRpb24oJ2RlcHJlY2F0aW9uX3dhcm5pbmdzJykpIHtcbiAgICAgICAgICBsb2dXYXJuaW5ncyhvcHRpb25zLCBub3JtYWxpemVkT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3VmZml4ID0gZ2V0T3B0aW9uKCdzdWZmaXgnKTtcbiAgICAgICAgaWYgKHN1ZmZpeCkge1xuICAgICAgICAgIGVkaXRvck1hbmFnZXIuc3VmZml4ID0gc3VmZml4O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3VmZml4ID0gZWRpdG9yTWFuYWdlci5zdWZmaXg7XG4gICAgICAgIGNvbnN0IGJhc2VVcmwgPSBnZXRPcHRpb24oJ2Jhc2VfdXJsJyk7XG4gICAgICAgIGlmIChiYXNlVXJsKSB7XG4gICAgICAgICAgZWRpdG9yTWFuYWdlci5fc2V0QmFzZVVybChiYXNlVXJsKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJhc2VVcmkgPSBlZGl0b3JNYW5hZ2VyLmJhc2VVUkk7XG4gICAgICAgIGNvbnN0IHJlZmVycmVyUG9saWN5ID0gZ2V0UmVmZXJyZXJQb2xpY3koc2VsZik7XG4gICAgICAgIGlmIChyZWZlcnJlclBvbGljeSkge1xuICAgICAgICAgIFNjcmlwdExvYWRlci5TY3JpcHRMb2FkZXIuX3NldFJlZmVycmVyUG9saWN5KHJlZmVycmVyUG9saWN5KTtcbiAgICAgICAgICBET01VdGlscy5ET00uc3R5bGVTaGVldExvYWRlci5fc2V0UmVmZXJyZXJQb2xpY3kocmVmZXJyZXJQb2xpY3kpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRlbnRDc3NDb3JzID0gaGFzQ29udGVudENzc0NvcnMoc2VsZik7XG4gICAgICAgIGlmIChpc05vbk51bGxhYmxlKGNvbnRlbnRDc3NDb3JzKSkge1xuICAgICAgICAgIERPTVV0aWxzLkRPTS5zdHlsZVNoZWV0TG9hZGVyLl9zZXRDb250ZW50Q3NzQ29ycyhjb250ZW50Q3NzQ29ycyk7XG4gICAgICAgIH1cbiAgICAgICAgQWRkT25NYW5hZ2VyLmxhbmd1YWdlTG9hZCA9IGdldE9wdGlvbignbGFuZ3VhZ2VfbG9hZCcpO1xuICAgICAgICBBZGRPbk1hbmFnZXIuYmFzZVVSTCA9IGVkaXRvck1hbmFnZXIuYmFzZVVSTDtcbiAgICAgICAgdGhpcy5zZXREaXJ0eShmYWxzZSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRCYXNlVVJJID0gbmV3IFVSSShnZXREb2N1bWVudEJhc2VVcmwoc2VsZiksIHsgYmFzZV91cmk6IHRoaXMuYmFzZVVyaSB9KTtcbiAgICAgICAgdGhpcy5iYXNlVVJJID0gdGhpcy5iYXNlVXJpO1xuICAgICAgICB0aGlzLmlubGluZSA9IGlzSW5saW5lKHNlbGYpO1xuICAgICAgICB0aGlzLmhhc1Zpc3VhbCA9IGlzVmlzdWFsQWlkc0VuYWJsZWQoc2VsZik7XG4gICAgICAgIHRoaXMuc2hvcnRjdXRzID0gbmV3IFNob3J0Y3V0cyh0aGlzKTtcbiAgICAgICAgdGhpcy5lZGl0b3JDb21tYW5kcyA9IG5ldyBFZGl0b3JDb21tYW5kcyh0aGlzKTtcbiAgICAgICAgcmVnaXN0ZXJDb21tYW5kcyh0aGlzKTtcbiAgICAgICAgY29uc3QgY2FjaGVTdWZmaXggPSBnZXRPcHRpb24oJ2NhY2hlX3N1ZmZpeCcpO1xuICAgICAgICBpZiAoY2FjaGVTdWZmaXgpIHtcbiAgICAgICAgICBFbnYuY2FjaGVTdWZmaXggPSBjYWNoZVN1ZmZpeC5yZXBsYWNlKC9eW1xcP1xcJl0rLywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudWkgPSB7XG4gICAgICAgICAgcmVnaXN0cnk6IHJlZ2lzdHJ5KCksXG4gICAgICAgICAgc3R5bGVTaGVldExvYWRlcjogdW5kZWZpbmVkLFxuICAgICAgICAgIHNob3c6IG5vb3AsXG4gICAgICAgICAgaGlkZTogbm9vcCxcbiAgICAgICAgICBzZXRFbmFibGVkOiBub29wLFxuICAgICAgICAgIGlzRW5hYmxlZDogYWx3YXlzXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubW9kZSA9IGNyZWF0ZSQ0KHNlbGYpO1xuICAgICAgICBlZGl0b3JNYW5hZ2VyLmRpc3BhdGNoKCdTZXR1cEVkaXRvcicsIHsgZWRpdG9yOiB0aGlzIH0pO1xuICAgICAgICBjb25zdCBzZXR1cENhbGxiYWNrID0gZ2V0U2V0dXBDYWxsYmFjayhzZWxmKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oc2V0dXBDYWxsYmFjaykpIHtcbiAgICAgICAgICBzZXR1cENhbGxiYWNrLmNhbGwoc2VsZiwgc2VsZik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgcmVuZGVyKHRoaXMpO1xuICAgICAgfVxuICAgICAgZm9jdXMoc2tpcEZvY3VzKSB7XG4gICAgICAgIHRoaXMuZXhlY0NvbW1hbmQoJ21jZUZvY3VzJywgZmFsc2UsIHNraXBGb2N1cyk7XG4gICAgICB9XG4gICAgICBoYXNGb2N1cygpIHtcbiAgICAgICAgcmV0dXJuIGhhc0ZvY3VzKHRoaXMpO1xuICAgICAgfVxuICAgICAgdHJhbnNsYXRlKHRleHQpIHtcbiAgICAgICAgcmV0dXJuIEkxOG4udHJhbnNsYXRlKHRleHQpO1xuICAgICAgfVxuICAgICAgZ2V0UGFyYW0obmFtZSwgZGVmYXVsdFZhbCwgdHlwZSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBpZiAoIW9wdGlvbnMuaXNSZWdpc3RlcmVkKG5hbWUpKSB7XG4gICAgICAgICAgaWYgKGlzTm9uTnVsbGFibGUodHlwZSkpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucmVnaXN0ZXIobmFtZSwge1xuICAgICAgICAgICAgICBwcm9jZXNzb3I6IHR5cGUsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZmF1bHRWYWxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zLnJlZ2lzdGVyKG5hbWUsIHtcbiAgICAgICAgICAgICAgcHJvY2Vzc29yOiBhbHdheXMsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZmF1bHRWYWxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIW9wdGlvbnMuaXNTZXQobmFtZSkgJiYgIWlzVW5kZWZpbmVkKGRlZmF1bHRWYWwpID8gZGVmYXVsdFZhbCA6IG9wdGlvbnMuZ2V0KG5hbWUpO1xuICAgICAgfVxuICAgICAgaGFzUGx1Z2luKG5hbWUsIGxvYWRlZCkge1xuICAgICAgICBjb25zdCBoYXNQbHVnaW4gPSBjb250YWlucyQyKGdldFBsdWdpbnModGhpcyksIG5hbWUpO1xuICAgICAgICBpZiAoaGFzUGx1Z2luKSB7XG4gICAgICAgICAgcmV0dXJuIGxvYWRlZCA/IFBsdWdpbk1hbmFnZXIuZ2V0KG5hbWUpICE9PSB1bmRlZmluZWQgOiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbm9kZUNoYW5nZWQoYXJncykge1xuICAgICAgICB0aGlzLl9ub2RlQ2hhbmdlRGlzcGF0Y2hlci5ub2RlQ2hhbmdlZChhcmdzKTtcbiAgICAgIH1cbiAgICAgIGFkZENvbW1hbmQobmFtZSwgY2FsbGJhY2ssIHNjb3BlKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHMuYWRkQ29tbWFuZChuYW1lLCBjYWxsYmFjaywgc2NvcGUpO1xuICAgICAgfVxuICAgICAgYWRkUXVlcnlTdGF0ZUhhbmRsZXIobmFtZSwgY2FsbGJhY2ssIHNjb3BlKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHMuYWRkUXVlcnlTdGF0ZUhhbmRsZXIobmFtZSwgY2FsbGJhY2ssIHNjb3BlKTtcbiAgICAgIH1cbiAgICAgIGFkZFF1ZXJ5VmFsdWVIYW5kbGVyKG5hbWUsIGNhbGxiYWNrLCBzY29wZSkge1xuICAgICAgICB0aGlzLmVkaXRvckNvbW1hbmRzLmFkZFF1ZXJ5VmFsdWVIYW5kbGVyKG5hbWUsIGNhbGxiYWNrLCBzY29wZSk7XG4gICAgICB9XG4gICAgICBhZGRTaG9ydGN1dChwYXR0ZXJuLCBkZXNjLCBjbWRGdW5jLCBzY29wZSkge1xuICAgICAgICB0aGlzLnNob3J0Y3V0cy5hZGQocGF0dGVybiwgZGVzYywgY21kRnVuYywgc2NvcGUpO1xuICAgICAgfVxuICAgICAgZXhlY0NvbW1hbmQoY21kLCB1aSwgdmFsdWUsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yQ29tbWFuZHMuZXhlY0NvbW1hbmQoY21kLCB1aSwgdmFsdWUsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcXVlcnlDb21tYW5kU3RhdGUoY21kKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvckNvbW1hbmRzLnF1ZXJ5Q29tbWFuZFN0YXRlKGNtZCk7XG4gICAgICB9XG4gICAgICBxdWVyeUNvbW1hbmRWYWx1ZShjbWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yQ29tbWFuZHMucXVlcnlDb21tYW5kVmFsdWUoY21kKTtcbiAgICAgIH1cbiAgICAgIHF1ZXJ5Q29tbWFuZFN1cHBvcnRlZChjbWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yQ29tbWFuZHMucXVlcnlDb21tYW5kU3VwcG9ydGVkKGNtZCk7XG4gICAgICB9XG4gICAgICBzaG93KCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKHNlbGYuaGlkZGVuKSB7XG4gICAgICAgICAgc2VsZi5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICBpZiAoc2VsZi5pbmxpbmUpIHtcbiAgICAgICAgICAgIHNlbGYuZ2V0Qm9keSgpLmNvbnRlbnRFZGl0YWJsZSA9ICd0cnVlJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgRE9NJDEuc2hvdyhzZWxmLmdldENvbnRhaW5lcigpKTtcbiAgICAgICAgICAgIERPTSQxLmhpZGUoc2VsZi5pZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlbGYubG9hZCgpO1xuICAgICAgICAgIHNlbGYuZGlzcGF0Y2goJ3Nob3cnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaGlkZSgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmICghc2VsZi5oaWRkZW4pIHtcbiAgICAgICAgICBzZWxmLnNhdmUoKTtcbiAgICAgICAgICBpZiAoc2VsZi5pbmxpbmUpIHtcbiAgICAgICAgICAgIHNlbGYuZ2V0Qm9keSgpLmNvbnRlbnRFZGl0YWJsZSA9ICdmYWxzZSc7XG4gICAgICAgICAgICBpZiAoc2VsZiA9PT0gc2VsZi5lZGl0b3JNYW5hZ2VyLmZvY3VzZWRFZGl0b3IpIHtcbiAgICAgICAgICAgICAgc2VsZi5lZGl0b3JNYW5hZ2VyLmZvY3VzZWRFZGl0b3IgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBET00kMS5oaWRlKHNlbGYuZ2V0Q29udGFpbmVyKCkpO1xuICAgICAgICAgICAgRE9NJDEuc2V0U3R5bGUoc2VsZi5pZCwgJ2Rpc3BsYXknLCBzZWxmLm9yZ0Rpc3BsYXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxmLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgc2VsZi5kaXNwYXRjaCgnaGlkZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpc0hpZGRlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGlkZGVuO1xuICAgICAgfVxuICAgICAgc2V0UHJvZ3Jlc3NTdGF0ZShzdGF0ZSwgdGltZSkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoKCdQcm9ncmVzc1N0YXRlJywge1xuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIHRpbWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBsb2FkKGFyZ3MgPSB7fSkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgZWxtID0gc2VsZi5nZXRFbGVtZW50KCk7XG4gICAgICAgIGlmIChzZWxmLnJlbW92ZWQpIHtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsbSkge1xuICAgICAgICAgIGNvbnN0IGxvYWRBcmdzID0ge1xuICAgICAgICAgICAgLi4uYXJncyxcbiAgICAgICAgICAgIGxvYWQ6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gaXNUZXh0YXJlYU9ySW5wdXQoZWxtKSA/IGVsbS52YWx1ZSA6IGVsbS5pbm5lckhUTUw7XG4gICAgICAgICAgY29uc3QgaHRtbCA9IHNlbGYuc2V0Q29udGVudCh2YWx1ZSwgbG9hZEFyZ3MpO1xuICAgICAgICAgIGlmICghbG9hZEFyZ3Mubm9fZXZlbnRzKSB7XG4gICAgICAgICAgICBzZWxmLmRpc3BhdGNoKCdMb2FkQ29udGVudCcsIHtcbiAgICAgICAgICAgICAgLi4ubG9hZEFyZ3MsXG4gICAgICAgICAgICAgIGVsZW1lbnQ6IGVsbVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBodG1sO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2F2ZShhcmdzID0ge30pIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBlbG0gPSBzZWxmLmdldEVsZW1lbnQoKTtcbiAgICAgICAgaWYgKCFlbG0gfHwgIXNlbGYuaW5pdGlhbGl6ZWQgfHwgc2VsZi5yZW1vdmVkKSB7XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdldEFyZ3MgPSB7XG4gICAgICAgICAgLi4uYXJncyxcbiAgICAgICAgICBzYXZlOiB0cnVlLFxuICAgICAgICAgIGVsZW1lbnQ6IGVsbVxuICAgICAgICB9O1xuICAgICAgICBsZXQgaHRtbCA9IHNlbGYuZ2V0Q29udGVudChnZXRBcmdzKTtcbiAgICAgICAgY29uc3Qgc2F2ZUFyZ3MgPSB7XG4gICAgICAgICAgLi4uZ2V0QXJncyxcbiAgICAgICAgICBjb250ZW50OiBodG1sXG4gICAgICAgIH07XG4gICAgICAgIGlmICghc2F2ZUFyZ3Mubm9fZXZlbnRzKSB7XG4gICAgICAgICAgc2VsZi5kaXNwYXRjaCgnU2F2ZUNvbnRlbnQnLCBzYXZlQXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNhdmVBcmdzLmZvcm1hdCA9PT0gJ3JhdycpIHtcbiAgICAgICAgICBzZWxmLmRpc3BhdGNoKCdSYXdTYXZlQ29udGVudCcsIHNhdmVBcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBodG1sID0gc2F2ZUFyZ3MuY29udGVudDtcbiAgICAgICAgaWYgKCFpc1RleHRhcmVhT3JJbnB1dChlbG0pKSB7XG4gICAgICAgICAgaWYgKGFyZ3MuaXNfcmVtb3ZpbmcgfHwgIXNlbGYuaW5saW5lKSB7XG4gICAgICAgICAgICBlbG0uaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZm9ybSA9IERPTSQxLmdldFBhcmVudChzZWxmLmlkLCAnZm9ybScpO1xuICAgICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICBlYWNoJDEoZm9ybS5lbGVtZW50cywgZWxtID0+IHtcbiAgICAgICAgICAgICAgaWYgKGVsbS5uYW1lID09PSBzZWxmLmlkKSB7XG4gICAgICAgICAgICAgICAgZWxtLnZhbHVlID0gaHRtbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbG0udmFsdWUgPSBodG1sO1xuICAgICAgICB9XG4gICAgICAgIHNhdmVBcmdzLmVsZW1lbnQgPSBnZXRBcmdzLmVsZW1lbnQgPSBlbG0gPSBudWxsO1xuICAgICAgICBpZiAoc2F2ZUFyZ3Muc2V0X2RpcnR5ICE9PSBmYWxzZSkge1xuICAgICAgICAgIHNlbGYuc2V0RGlydHkoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBodG1sO1xuICAgICAgfVxuICAgICAgc2V0Q29udGVudChjb250ZW50LCBhcmdzKSB7XG4gICAgICAgIHJldHVybiBzZXRDb250ZW50KHRoaXMsIGNvbnRlbnQsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgZ2V0Q29udGVudChhcmdzKSB7XG4gICAgICAgIHJldHVybiBnZXRDb250ZW50KHRoaXMsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgaW5zZXJ0Q29udGVudChjb250ZW50LCBhcmdzKSB7XG4gICAgICAgIGlmIChhcmdzKSB7XG4gICAgICAgICAgY29udGVudCA9IGV4dGVuZCh7IGNvbnRlbnQgfSwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5leGVjQ29tbWFuZCgnbWNlSW5zZXJ0Q29udGVudCcsIGZhbHNlLCBjb250ZW50KTtcbiAgICAgIH1cbiAgICAgIHJlc2V0Q29udGVudChpbml0aWFsQ29udGVudCkge1xuICAgICAgICBpZiAoaW5pdGlhbENvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNldENvbnRlbnQodGhpcywgdGhpcy5zdGFydENvbnRlbnQsIHsgZm9ybWF0OiAncmF3JyB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRDb250ZW50KHRoaXMsIGluaXRpYWxDb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVuZG9NYW5hZ2VyLnJlc2V0KCk7XG4gICAgICAgIHRoaXMuc2V0RGlydHkoZmFsc2UpO1xuICAgICAgICB0aGlzLm5vZGVDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgICBpc0RpcnR5KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNOb3REaXJ0eTtcbiAgICAgIH1cbiAgICAgIHNldERpcnR5KHN0YXRlKSB7XG4gICAgICAgIGNvbnN0IG9sZFN0YXRlID0gIXRoaXMuaXNOb3REaXJ0eTtcbiAgICAgICAgdGhpcy5pc05vdERpcnR5ID0gIXN0YXRlO1xuICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUgIT09IG9sZFN0YXRlKSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaCgnZGlydHknKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZ2V0Q29udGFpbmVyKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKCFzZWxmLmNvbnRhaW5lcikge1xuICAgICAgICAgIHNlbGYuY29udGFpbmVyID0gc2VsZi5lZGl0b3JDb250YWluZXIgfHwgRE9NJDEuZ2V0KHNlbGYuaWQgKyAnX3BhcmVudCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmLmNvbnRhaW5lcjtcbiAgICAgIH1cbiAgICAgIGdldENvbnRlbnRBcmVhQ29udGFpbmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50QXJlYUNvbnRhaW5lcjtcbiAgICAgIH1cbiAgICAgIGdldEVsZW1lbnQoKSB7XG4gICAgICAgIGlmICghdGhpcy50YXJnZXRFbG0pIHtcbiAgICAgICAgICB0aGlzLnRhcmdldEVsbSA9IERPTSQxLmdldCh0aGlzLmlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50YXJnZXRFbG07XG4gICAgICB9XG4gICAgICBnZXRXaW4oKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBpZiAoIXNlbGYuY29udGVudFdpbmRvdykge1xuICAgICAgICAgIGNvbnN0IGVsbSA9IHNlbGYuaWZyYW1lRWxlbWVudDtcbiAgICAgICAgICBpZiAoZWxtKSB7XG4gICAgICAgICAgICBzZWxmLmNvbnRlbnRXaW5kb3cgPSBlbG0uY29udGVudFdpbmRvdztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGYuY29udGVudFdpbmRvdztcbiAgICAgIH1cbiAgICAgIGdldERvYygpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmICghc2VsZi5jb250ZW50RG9jdW1lbnQpIHtcbiAgICAgICAgICBjb25zdCB3aW4gPSBzZWxmLmdldFdpbigpO1xuICAgICAgICAgIGlmICh3aW4pIHtcbiAgICAgICAgICAgIHNlbGYuY29udGVudERvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZi5jb250ZW50RG9jdW1lbnQ7XG4gICAgICB9XG4gICAgICBnZXRCb2R5KCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmdldERvYygpO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gdGhpcy5ib2R5RWxlbWVudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZG9jID09PSBudWxsIHx8IGRvYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZG9jLmJvZHkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG51bGw7XG4gICAgICB9XG4gICAgICBjb252ZXJ0VVJMKHVybCwgbmFtZSwgZWxtKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzLCBnZXRPcHRpb24gPSBzZWxmLm9wdGlvbnMuZ2V0O1xuICAgICAgICBjb25zdCB1cmxDb252ZXJ0ZXJDYWxsYmFjayA9IGdldFVybENvbnZlcnRlckNhbGxiYWNrKHNlbGYpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih1cmxDb252ZXJ0ZXJDYWxsYmFjaykpIHtcbiAgICAgICAgICByZXR1cm4gdXJsQ29udmVydGVyQ2FsbGJhY2suY2FsbChzZWxmLCB1cmwsIGVsbSwgdHJ1ZSwgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFnZXRPcHRpb24oJ2NvbnZlcnRfdXJscycpIHx8IGVsbSA9PT0gJ2xpbmsnIHx8IGlzT2JqZWN0KGVsbSkgJiYgZWxtLm5vZGVOYW1lID09PSAnTElOSycgfHwgdXJsLmluZGV4T2YoJ2ZpbGU6JykgPT09IDAgfHwgdXJsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiB1cmw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldE9wdGlvbigncmVsYXRpdmVfdXJscycpKSB7XG4gICAgICAgICAgcmV0dXJuIHNlbGYuZG9jdW1lbnRCYXNlVVJJLnRvUmVsYXRpdmUodXJsKTtcbiAgICAgICAgfVxuICAgICAgICB1cmwgPSBzZWxmLmRvY3VtZW50QmFzZVVSSS50b0Fic29sdXRlKHVybCwgZ2V0T3B0aW9uKCdyZW1vdmVfc2NyaXB0X2hvc3QnKSk7XG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgICB9XG4gICAgICBhZGRWaXN1YWwoZWxtKSB7XG4gICAgICAgIGFkZFZpc3VhbCh0aGlzLCBlbG0pO1xuICAgICAgfVxuICAgICAgc2V0RWRpdGFibGVSb290KHN0YXRlKSB7XG4gICAgICAgIHNldEVkaXRhYmxlUm9vdCh0aGlzLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICBoYXNFZGl0YWJsZVJvb3QoKSB7XG4gICAgICAgIHJldHVybiBoYXNFZGl0YWJsZVJvb3QodGhpcyk7XG4gICAgICB9XG4gICAgICByZW1vdmUoKSB7XG4gICAgICAgIHJlbW92ZSQxKHRoaXMpO1xuICAgICAgfVxuICAgICAgZGVzdHJveShhdXRvbWF0aWMpIHtcbiAgICAgICAgZGVzdHJveSh0aGlzLCBhdXRvbWF0aWMpO1xuICAgICAgfVxuICAgICAgdXBsb2FkSW1hZ2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JVcGxvYWQudXBsb2FkSW1hZ2VzKCk7XG4gICAgICB9XG4gICAgICBfc2NhbkZvckltYWdlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yVXBsb2FkLnNjYW5Gb3JJbWFnZXMoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBET00gPSBET01VdGlscy5ET007XG4gICAgY29uc3QgZWFjaCA9IFRvb2xzLmVhY2g7XG4gICAgbGV0IGJvdW5kR2xvYmFsRXZlbnRzID0gZmFsc2U7XG4gICAgbGV0IGJlZm9yZVVubG9hZERlbGVnYXRlO1xuICAgIGxldCBlZGl0b3JzID0gW107XG4gICAgY29uc3QgZ2xvYmFsRXZlbnREZWxlZ2F0ZSA9IGUgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9IGUudHlwZTtcbiAgICAgIGVhY2goRWRpdG9yTWFuYWdlci5nZXQoKSwgZWRpdG9yID0+IHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ3Njcm9sbCc6XG4gICAgICAgICAgZWRpdG9yLmRpc3BhdGNoKCdTY3JvbGxXaW5kb3cnLCBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncmVzaXplJzpcbiAgICAgICAgICBlZGl0b3IuZGlzcGF0Y2goJ1Jlc2l6ZVdpbmRvdycsIGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHRvZ2dsZUdsb2JhbEV2ZW50cyA9IHN0YXRlID0+IHtcbiAgICAgIGlmIChzdGF0ZSAhPT0gYm91bmRHbG9iYWxFdmVudHMpIHtcbiAgICAgICAgY29uc3QgRE9NID0gRE9NVXRpbHMuRE9NO1xuICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICBET00uYmluZCh3aW5kb3csICdyZXNpemUnLCBnbG9iYWxFdmVudERlbGVnYXRlKTtcbiAgICAgICAgICBET00uYmluZCh3aW5kb3csICdzY3JvbGwnLCBnbG9iYWxFdmVudERlbGVnYXRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBET00udW5iaW5kKHdpbmRvdywgJ3Jlc2l6ZScsIGdsb2JhbEV2ZW50RGVsZWdhdGUpO1xuICAgICAgICAgIERPTS51bmJpbmQod2luZG93LCAnc2Nyb2xsJywgZ2xvYmFsRXZlbnREZWxlZ2F0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYm91bmRHbG9iYWxFdmVudHMgPSBzdGF0ZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZUVkaXRvckZyb21MaXN0ID0gdGFyZ2V0RWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IG9sZEVkaXRvcnMgPSBlZGl0b3JzO1xuICAgICAgZWRpdG9ycyA9IGZpbHRlciQ1KGVkaXRvcnMsIGVkaXRvciA9PiB7XG4gICAgICAgIHJldHVybiB0YXJnZXRFZGl0b3IgIT09IGVkaXRvcjtcbiAgICAgIH0pO1xuICAgICAgaWYgKEVkaXRvck1hbmFnZXIuYWN0aXZlRWRpdG9yID09PSB0YXJnZXRFZGl0b3IpIHtcbiAgICAgICAgRWRpdG9yTWFuYWdlci5hY3RpdmVFZGl0b3IgPSBlZGl0b3JzLmxlbmd0aCA+IDAgPyBlZGl0b3JzWzBdIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChFZGl0b3JNYW5hZ2VyLmZvY3VzZWRFZGl0b3IgPT09IHRhcmdldEVkaXRvcikge1xuICAgICAgICBFZGl0b3JNYW5hZ2VyLmZvY3VzZWRFZGl0b3IgPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9sZEVkaXRvcnMubGVuZ3RoICE9PSBlZGl0b3JzLmxlbmd0aDtcbiAgICB9O1xuICAgIGNvbnN0IHB1cmdlRGVzdHJveWVkRWRpdG9yID0gZWRpdG9yID0+IHtcbiAgICAgIGlmIChlZGl0b3IgJiYgZWRpdG9yLmluaXRpYWxpemVkICYmICEoZWRpdG9yLmdldENvbnRhaW5lcigpIHx8IGVkaXRvci5nZXRCb2R5KCkpLnBhcmVudE5vZGUpIHtcbiAgICAgICAgcmVtb3ZlRWRpdG9yRnJvbUxpc3QoZWRpdG9yKTtcbiAgICAgICAgZWRpdG9yLnVuYmluZEFsbE5hdGl2ZUV2ZW50cygpO1xuICAgICAgICBlZGl0b3IuZGVzdHJveSh0cnVlKTtcbiAgICAgICAgZWRpdG9yLnJlbW92ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaXNRdWlya3NNb2RlID0gZG9jdW1lbnQuY29tcGF0TW9kZSAhPT0gJ0NTUzFDb21wYXQnO1xuICAgIGNvbnN0IEVkaXRvck1hbmFnZXIgPSB7XG4gICAgICAuLi5PYnNlcnZhYmxlLFxuICAgICAgYmFzZVVSSTogbnVsbCxcbiAgICAgIGJhc2VVUkw6IG51bGwsXG4gICAgICBkZWZhdWx0T3B0aW9uczoge30sXG4gICAgICBkb2N1bWVudEJhc2VVUkw6IG51bGwsXG4gICAgICBzdWZmaXg6IG51bGwsXG4gICAgICBtYWpvclZlcnNpb246ICc2JyxcbiAgICAgIG1pbm9yVmVyc2lvbjogJzcuMCcsXG4gICAgICByZWxlYXNlRGF0ZTogJzIwMjMtMDgtMzAnLFxuICAgICAgaTE4bjogSTE4bixcbiAgICAgIGFjdGl2ZUVkaXRvcjogbnVsbCxcbiAgICAgIGZvY3VzZWRFZGl0b3I6IG51bGwsXG4gICAgICBzZXR1cCgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBiYXNlVVJMID0gJyc7XG4gICAgICAgIGxldCBzdWZmaXggPSAnJztcbiAgICAgICAgbGV0IGRvY3VtZW50QmFzZVVSTCA9IFVSSS5nZXREb2N1bWVudEJhc2VVcmwoZG9jdW1lbnQubG9jYXRpb24pO1xuICAgICAgICBpZiAoL15bXjpdKzpcXC9cXC9cXC8/W15cXC9dK1xcLy8udGVzdChkb2N1bWVudEJhc2VVUkwpKSB7XG4gICAgICAgICAgZG9jdW1lbnRCYXNlVVJMID0gZG9jdW1lbnRCYXNlVVJMLnJlcGxhY2UoL1tcXD8jXS4qJC8sICcnKS5yZXBsYWNlKC9bXFwvXFxcXF1bXlxcL10rJC8sICcnKTtcbiAgICAgICAgICBpZiAoIS9bXFwvXFxcXF0kLy50ZXN0KGRvY3VtZW50QmFzZVVSTCkpIHtcbiAgICAgICAgICAgIGRvY3VtZW50QmFzZVVSTCArPSAnLyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZUluaXQgPSB3aW5kb3cudGlueW1jZSB8fCB3aW5kb3cudGlueU1DRVByZUluaXQ7XG4gICAgICAgIGlmIChwcmVJbml0KSB7XG4gICAgICAgICAgYmFzZVVSTCA9IHByZUluaXQuYmFzZSB8fCBwcmVJbml0LmJhc2VVUkw7XG4gICAgICAgICAgc3VmZml4ID0gcHJlSW5pdC5zdWZmaXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IHNjcmlwdHNbaV0uc3JjIHx8ICcnO1xuICAgICAgICAgICAgaWYgKHNyYyA9PT0gJycpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzcmNTY3JpcHQgPSBzcmMuc3Vic3RyaW5nKHNyYy5sYXN0SW5kZXhPZignLycpKTtcbiAgICAgICAgICAgIGlmICgvdGlueW1jZShcXC5mdWxsfFxcLmpxdWVyeXwpKFxcLm1pbnxcXC5kZXZ8KVxcLmpzLy50ZXN0KHNyYykpIHtcbiAgICAgICAgICAgICAgaWYgKHNyY1NjcmlwdC5pbmRleE9mKCcubWluJykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgc3VmZml4ID0gJy5taW4nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJhc2VVUkwgPSBzcmMuc3Vic3RyaW5nKDAsIHNyYy5sYXN0SW5kZXhPZignLycpKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghYmFzZVVSTCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0KSB7XG4gICAgICAgICAgICBjb25zdCBzcmMgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYztcbiAgICAgICAgICAgIGlmIChzcmMuaW5kZXhPZignLm1pbicpICE9PSAtMSkge1xuICAgICAgICAgICAgICBzdWZmaXggPSAnLm1pbic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiYXNlVVJMID0gc3JjLnN1YnN0cmluZygwLCBzcmMubGFzdEluZGV4T2YoJy8nKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNlbGYuYmFzZVVSTCA9IG5ldyBVUkkoZG9jdW1lbnRCYXNlVVJMKS50b0Fic29sdXRlKGJhc2VVUkwpO1xuICAgICAgICBzZWxmLmRvY3VtZW50QmFzZVVSTCA9IGRvY3VtZW50QmFzZVVSTDtcbiAgICAgICAgc2VsZi5iYXNlVVJJID0gbmV3IFVSSShzZWxmLmJhc2VVUkwpO1xuICAgICAgICBzZWxmLnN1ZmZpeCA9IHN1ZmZpeDtcbiAgICAgICAgc2V0dXAkdihzZWxmKTtcbiAgICAgIH0sXG4gICAgICBvdmVycmlkZURlZmF1bHRzKGRlZmF1bHRPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGJhc2VVcmwgPSBkZWZhdWx0T3B0aW9ucy5iYXNlX3VybDtcbiAgICAgICAgaWYgKGJhc2VVcmwpIHtcbiAgICAgICAgICB0aGlzLl9zZXRCYXNlVXJsKGJhc2VVcmwpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1ZmZpeCA9IGRlZmF1bHRPcHRpb25zLnN1ZmZpeDtcbiAgICAgICAgaWYgKHN1ZmZpeCkge1xuICAgICAgICAgIHRoaXMuc3VmZml4ID0gc3VmZml4O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgICAgICAgY29uc3QgcGx1Z2luQmFzZVVybHMgPSBkZWZhdWx0T3B0aW9ucy5wbHVnaW5fYmFzZV91cmxzO1xuICAgICAgICBpZiAocGx1Z2luQmFzZVVybHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGVhY2gkZChwbHVnaW5CYXNlVXJscywgKHBsdWdpbkJhc2VVcmwsIHBsdWdpbk5hbWUpID0+IHtcbiAgICAgICAgICAgIEFkZE9uTWFuYWdlci5QbHVnaW5NYW5hZ2VyLnVybHNbcGx1Z2luTmFtZV0gPSBwbHVnaW5CYXNlVXJsO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaW5pdChvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICBjb25zdCBpbnZhbGlkSW5saW5lVGFyZ2V0cyA9IFRvb2xzLm1ha2VNYXAoJ2FyZWEgYmFzZSBiYXNlZm9udCBiciBjb2wgZnJhbWUgaHIgaW1nIGlucHV0IGlzaW5kZXggbGluayBtZXRhIHBhcmFtIGVtYmVkIHNvdXJjZSB3YnIgdHJhY2sgJyArICdjb2xncm91cCBvcHRpb24gdGFibGUgdGJvZHkgdGZvb3QgdGhlYWQgdHIgdGggdGQgc2NyaXB0IG5vc2NyaXB0IHN0eWxlIHRleHRhcmVhIHZpZGVvIGF1ZGlvIGlmcmFtZSBvYmplY3QgbWVudScsICcgJyk7XG4gICAgICAgIGNvbnN0IGlzSW52YWxpZElubGluZVRhcmdldCA9IChvcHRpb25zLCBlbG0pID0+IG9wdGlvbnMuaW5saW5lICYmIGVsbS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgaW4gaW52YWxpZElubGluZVRhcmdldHM7XG4gICAgICAgIGNvbnN0IGNyZWF0ZUlkID0gZWxtID0+IHtcbiAgICAgICAgICBsZXQgaWQgPSBlbG0uaWQ7XG4gICAgICAgICAgaWYgKCFpZCkge1xuICAgICAgICAgICAgaWQgPSBnZXQkYShlbG0sICduYW1lJykuZmlsdGVyKG5hbWUgPT4gIURPTS5nZXQobmFtZSkpLmdldE9yVGh1bmsoRE9NLnVuaXF1ZUlkKTtcbiAgICAgICAgICAgIGVsbS5zZXRBdHRyaWJ1dGUoJ2lkJywgaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGV4ZWNDYWxsYmFjayA9IG5hbWUgPT4ge1xuICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gb3B0aW9uc1tuYW1lXTtcbiAgICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjYWxsYmFjay5hcHBseShzZWxmLCBbXSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZpbmRUYXJnZXRzID0gb3B0aW9ucyA9PiB7XG4gICAgICAgICAgaWYgKEVudi5icm93c2VyLmlzSUUoKSB8fCBFbnYuYnJvd3Nlci5pc0VkZ2UoKSkge1xuICAgICAgICAgICAgaW5pdEVycm9yKCdUaW55TUNFIGRvZXMgbm90IHN1cHBvcnQgdGhlIGJyb3dzZXIgeW91IGFyZSB1c2luZy4gRm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQnICsgJyBicm93c2VycyBwbGVhc2Ugc2VlOiBodHRwczovL3d3dy50aW55LmNsb3VkL2RvY3MvdGlueW1jZS82L3N1cHBvcnQvI3N1cHBvcnRlZHdlYmJyb3dzZXJzJyk7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1F1aXJrc01vZGUpIHtcbiAgICAgICAgICAgIGluaXRFcnJvcignRmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIGVkaXRvciBhcyB0aGUgZG9jdW1lbnQgaXMgbm90IGluIHN0YW5kYXJkcyBtb2RlLiAnICsgJ1RpbnlNQ0UgcmVxdWlyZXMgc3RhbmRhcmRzIG1vZGUuJyk7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmluZyhvcHRpb25zLnNlbGVjdG9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIERPTS5zZWxlY3Qob3B0aW9ucy5zZWxlY3Rvcik7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc05vbk51bGxhYmxlKG9wdGlvbnMudGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIFtvcHRpb25zLnRhcmdldF07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGxldCBwcm92aWRlUmVzdWx0cyA9IGVkaXRvcnMgPT4ge1xuICAgICAgICAgIHJlc3VsdCA9IGVkaXRvcnM7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGluaXRFZGl0b3JzID0gKCkgPT4ge1xuICAgICAgICAgIGxldCBpbml0Q291bnQgPSAwO1xuICAgICAgICAgIGNvbnN0IGVkaXRvcnMgPSBbXTtcbiAgICAgICAgICBsZXQgdGFyZ2V0cztcbiAgICAgICAgICBjb25zdCBjcmVhdGVFZGl0b3IgPSAoaWQsIG9wdGlvbnMsIHRhcmdldEVsbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWRpdG9yID0gbmV3IEVkaXRvcihpZCwgb3B0aW9ucywgc2VsZik7XG4gICAgICAgICAgICBlZGl0b3JzLnB1c2goZWRpdG9yKTtcbiAgICAgICAgICAgIGVkaXRvci5vbignaW5pdCcsICgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCsraW5pdENvdW50ID09PSB0YXJnZXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHByb3ZpZGVSZXN1bHRzKGVkaXRvcnMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVkaXRvci50YXJnZXRFbG0gPSBlZGl0b3IudGFyZ2V0RWxtIHx8IHRhcmdldEVsbTtcbiAgICAgICAgICAgIGVkaXRvci5yZW5kZXIoKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIERPTS51bmJpbmQod2luZG93LCAncmVhZHknLCBpbml0RWRpdG9ycyk7XG4gICAgICAgICAgZXhlY0NhbGxiYWNrKCdvbnBhZ2Vsb2FkJyk7XG4gICAgICAgICAgdGFyZ2V0cyA9IHVuaXF1ZSQxKGZpbmRUYXJnZXRzKG9wdGlvbnMpKTtcbiAgICAgICAgICBUb29scy5lYWNoKHRhcmdldHMsIGVsbSA9PiB7XG4gICAgICAgICAgICBwdXJnZURlc3Ryb3llZEVkaXRvcihzZWxmLmdldChlbG0uaWQpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0YXJnZXRzID0gVG9vbHMuZ3JlcCh0YXJnZXRzLCBlbG0gPT4ge1xuICAgICAgICAgICAgcmV0dXJuICFzZWxmLmdldChlbG0uaWQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICh0YXJnZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcHJvdmlkZVJlc3VsdHMoW10pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlYWNoKHRhcmdldHMsIGVsbSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpc0ludmFsaWRJbmxpbmVUYXJnZXQob3B0aW9ucywgZWxtKSkge1xuICAgICAgICAgICAgICAgIGluaXRFcnJvcignQ291bGQgbm90IGluaXRpYWxpemUgaW5saW5lIGVkaXRvciBvbiBpbnZhbGlkIGlubGluZSB0YXJnZXQgZWxlbWVudCcsIGVsbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3JlYXRlRWRpdG9yKGNyZWF0ZUlkKGVsbSksIG9wdGlvbnMsIGVsbSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgRE9NLmJpbmQod2luZG93LCAncmVhZHknLCBpbml0RWRpdG9ycyk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb3ZpZGVSZXN1bHRzID0gZWRpdG9ycyA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoZWRpdG9ycyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZ2V0KGlkKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGVkaXRvcnMuc2xpY2UoMCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcoaWQpKSB7XG4gICAgICAgICAgcmV0dXJuIGZpbmQkMihlZGl0b3JzLCBlZGl0b3IgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGVkaXRvci5pZCA9PT0gaWQ7XG4gICAgICAgICAgfSkuZ2V0T3IobnVsbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaWQpKSB7XG4gICAgICAgICAgcmV0dXJuIGVkaXRvcnNbaWRdID8gZWRpdG9yc1tpZF0gOiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYWRkKGVkaXRvcikge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgZXhpc3RpbmdFZGl0b3IgPSBzZWxmLmdldChlZGl0b3IuaWQpO1xuICAgICAgICBpZiAoZXhpc3RpbmdFZGl0b3IgPT09IGVkaXRvcikge1xuICAgICAgICAgIHJldHVybiBlZGl0b3I7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4aXN0aW5nRWRpdG9yID09PSBudWxsKSB7XG4gICAgICAgICAgZWRpdG9ycy5wdXNoKGVkaXRvcik7XG4gICAgICAgIH1cbiAgICAgICAgdG9nZ2xlR2xvYmFsRXZlbnRzKHRydWUpO1xuICAgICAgICBzZWxmLmFjdGl2ZUVkaXRvciA9IGVkaXRvcjtcbiAgICAgICAgc2VsZi5kaXNwYXRjaCgnQWRkRWRpdG9yJywgeyBlZGl0b3IgfSk7XG4gICAgICAgIGlmICghYmVmb3JlVW5sb2FkRGVsZWdhdGUpIHtcbiAgICAgICAgICBiZWZvcmVVbmxvYWREZWxlZ2F0ZSA9IGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBzZWxmLmRpc3BhdGNoKCdCZWZvcmVVbmxvYWQnKTtcbiAgICAgICAgICAgIGlmIChldmVudC5yZXR1cm5WYWx1ZSkge1xuICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIGUucmV0dXJuVmFsdWUgPSBldmVudC5yZXR1cm5WYWx1ZTtcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnJldHVyblZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGJlZm9yZVVubG9hZERlbGVnYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWRpdG9yO1xuICAgICAgfSxcbiAgICAgIGNyZWF0ZUVkaXRvcihpZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGQobmV3IEVkaXRvcihpZCwgb3B0aW9ucywgdGhpcykpO1xuICAgICAgfSxcbiAgICAgIHJlbW92ZShzZWxlY3Rvcikge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IGVkaXRvcjtcbiAgICAgICAgaWYgKCFzZWxlY3Rvcikge1xuICAgICAgICAgIGZvciAobGV0IGkgPSBlZGl0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBzZWxmLnJlbW92ZShlZGl0b3JzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1N0cmluZyhzZWxlY3RvcikpIHtcbiAgICAgICAgICBlYWNoKERPTS5zZWxlY3Qoc2VsZWN0b3IpLCBlbG0gPT4ge1xuICAgICAgICAgICAgZWRpdG9yID0gc2VsZi5nZXQoZWxtLmlkKTtcbiAgICAgICAgICAgIGlmIChlZGl0b3IpIHtcbiAgICAgICAgICAgICAgc2VsZi5yZW1vdmUoZWRpdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yID0gc2VsZWN0b3I7XG4gICAgICAgIGlmIChpc051bGwoc2VsZi5nZXQoZWRpdG9yLmlkKSkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVtb3ZlRWRpdG9yRnJvbUxpc3QoZWRpdG9yKSkge1xuICAgICAgICAgIHNlbGYuZGlzcGF0Y2goJ1JlbW92ZUVkaXRvcicsIHsgZWRpdG9yIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlZGl0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBiZWZvcmVVbmxvYWREZWxlZ2F0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yLnJlbW92ZSgpO1xuICAgICAgICB0b2dnbGVHbG9iYWxFdmVudHMoZWRpdG9ycy5sZW5ndGggPiAwKTtcbiAgICAgICAgcmV0dXJuIGVkaXRvcjtcbiAgICAgIH0sXG4gICAgICBleGVjQ29tbWFuZChjbWQsIHVpLCB2YWx1ZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBlZGl0b3JJZCA9IGlzT2JqZWN0KHZhbHVlKSA/IChfYSA9IHZhbHVlLmlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB2YWx1ZS5pbmRleCA6IHZhbHVlO1xuICAgICAgICBzd2l0Y2ggKGNtZCkge1xuICAgICAgICBjYXNlICdtY2VBZGRFZGl0b3InOiB7XG4gICAgICAgICAgICBpZiAoIXNlbGYuZ2V0KGVkaXRvcklkKSkge1xuICAgICAgICAgICAgICBjb25zdCBlZGl0b3JPcHRpb25zID0gdmFsdWUub3B0aW9ucztcbiAgICAgICAgICAgICAgbmV3IEVkaXRvcihlZGl0b3JJZCwgZWRpdG9yT3B0aW9ucywgc2VsZikucmVuZGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ21jZVJlbW92ZUVkaXRvcic6IHtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvciA9IHNlbGYuZ2V0KGVkaXRvcklkKTtcbiAgICAgICAgICAgIGlmIChlZGl0b3IpIHtcbiAgICAgICAgICAgICAgZWRpdG9yLnJlbW92ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICdtY2VUb2dnbGVFZGl0b3InOiB7XG4gICAgICAgICAgICBjb25zdCBlZGl0b3IgPSBzZWxmLmdldChlZGl0b3JJZCk7XG4gICAgICAgICAgICBpZiAoIWVkaXRvcikge1xuICAgICAgICAgICAgICBzZWxmLmV4ZWNDb21tYW5kKCdtY2VBZGRFZGl0b3InLCBmYWxzZSwgdmFsdWUpO1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlZGl0b3IuaXNIaWRkZW4oKSkge1xuICAgICAgICAgICAgICBlZGl0b3Iuc2hvdygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZWRpdG9yLmhpZGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5hY3RpdmVFZGl0b3IpIHtcbiAgICAgICAgICByZXR1cm4gc2VsZi5hY3RpdmVFZGl0b3IuZXhlY0NvbW1hbmQoY21kLCB1aSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sXG4gICAgICB0cmlnZ2VyU2F2ZTogKCkgPT4ge1xuICAgICAgICBlYWNoKGVkaXRvcnMsIGVkaXRvciA9PiB7XG4gICAgICAgICAgZWRpdG9yLnNhdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgYWRkSTE4bjogKGNvZGUsIGl0ZW1zKSA9PiB7XG4gICAgICAgIEkxOG4uYWRkKGNvZGUsIGl0ZW1zKTtcbiAgICAgIH0sXG4gICAgICB0cmFuc2xhdGU6IHRleHQgPT4ge1xuICAgICAgICByZXR1cm4gSTE4bi50cmFuc2xhdGUodGV4dCk7XG4gICAgICB9LFxuICAgICAgc2V0QWN0aXZlKGVkaXRvcikge1xuICAgICAgICBjb25zdCBhY3RpdmVFZGl0b3IgPSB0aGlzLmFjdGl2ZUVkaXRvcjtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlRWRpdG9yICE9PSBlZGl0b3IpIHtcbiAgICAgICAgICBpZiAoYWN0aXZlRWRpdG9yKSB7XG4gICAgICAgICAgICBhY3RpdmVFZGl0b3IuZGlzcGF0Y2goJ2RlYWN0aXZhdGUnLCB7IHJlbGF0ZWRUYXJnZXQ6IGVkaXRvciB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWRpdG9yLmRpc3BhdGNoKCdhY3RpdmF0ZScsIHsgcmVsYXRlZFRhcmdldDogYWN0aXZlRWRpdG9yIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aXZlRWRpdG9yID0gZWRpdG9yO1xuICAgICAgfSxcbiAgICAgIF9zZXRCYXNlVXJsKGJhc2VVcmwpIHtcbiAgICAgICAgdGhpcy5iYXNlVVJMID0gbmV3IFVSSSh0aGlzLmRvY3VtZW50QmFzZVVSTCkudG9BYnNvbHV0ZShiYXNlVXJsLnJlcGxhY2UoL1xcLyskLywgJycpKTtcbiAgICAgICAgdGhpcy5iYXNlVVJJID0gbmV3IFVSSSh0aGlzLmJhc2VVUkwpO1xuICAgICAgfVxuICAgIH07XG4gICAgRWRpdG9yTWFuYWdlci5zZXR1cCgpO1xuXG4gICAgY29uc3Qgc2V0dXAgPSAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhVmFsdWUgPSB2YWx1ZSQyKCk7XG4gICAgICBjb25zdCBGYWtlQ2xpcGJvYXJkSXRlbSA9IGl0ZW1zID0+ICh7XG4gICAgICAgIGl0ZW1zLFxuICAgICAgICB0eXBlczoga2V5cyhpdGVtcyksXG4gICAgICAgIGdldFR5cGU6IHR5cGUgPT4gZ2V0JGEoaXRlbXMsIHR5cGUpLmdldE9yVW5kZWZpbmVkKClcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgd3JpdGUgPSBkYXRhID0+IHtcbiAgICAgICAgZGF0YVZhbHVlLnNldChkYXRhKTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZWFkID0gKCkgPT4gZGF0YVZhbHVlLmdldCgpLmdldE9yVW5kZWZpbmVkKCk7XG4gICAgICBjb25zdCBjbGVhciA9IGRhdGFWYWx1ZS5jbGVhcjtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIEZha2VDbGlwYm9hcmRJdGVtLFxuICAgICAgICB3cml0ZSxcbiAgICAgICAgcmVhZCxcbiAgICAgICAgY2xlYXJcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBGYWtlQ2xpcGJvYXJkID0gc2V0dXAoKTtcblxuICAgIGNvbnN0IG1pbiA9IE1hdGgubWluLCBtYXggPSBNYXRoLm1heCwgcm91bmQgPSBNYXRoLnJvdW5kO1xuICAgIGNvbnN0IHJlbGF0aXZlUG9zaXRpb24gPSAocmVjdCwgdGFyZ2V0UmVjdCwgcmVsKSA9PiB7XG4gICAgICBsZXQgeCA9IHRhcmdldFJlY3QueDtcbiAgICAgIGxldCB5ID0gdGFyZ2V0UmVjdC55O1xuICAgICAgY29uc3QgdyA9IHJlY3QudztcbiAgICAgIGNvbnN0IGggPSByZWN0Lmg7XG4gICAgICBjb25zdCB0YXJnZXRXID0gdGFyZ2V0UmVjdC53O1xuICAgICAgY29uc3QgdGFyZ2V0SCA9IHRhcmdldFJlY3QuaDtcbiAgICAgIGNvbnN0IHJlbENoYXJzID0gKHJlbCB8fCAnJykuc3BsaXQoJycpO1xuICAgICAgaWYgKHJlbENoYXJzWzBdID09PSAnYicpIHtcbiAgICAgICAgeSArPSB0YXJnZXRIO1xuICAgICAgfVxuICAgICAgaWYgKHJlbENoYXJzWzFdID09PSAncicpIHtcbiAgICAgICAgeCArPSB0YXJnZXRXO1xuICAgICAgfVxuICAgICAgaWYgKHJlbENoYXJzWzBdID09PSAnYycpIHtcbiAgICAgICAgeSArPSByb3VuZCh0YXJnZXRIIC8gMik7XG4gICAgICB9XG4gICAgICBpZiAocmVsQ2hhcnNbMV0gPT09ICdjJykge1xuICAgICAgICB4ICs9IHJvdW5kKHRhcmdldFcgLyAyKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWxDaGFyc1szXSA9PT0gJ2InKSB7XG4gICAgICAgIHkgLT0gaDtcbiAgICAgIH1cbiAgICAgIGlmIChyZWxDaGFyc1s0XSA9PT0gJ3InKSB7XG4gICAgICAgIHggLT0gdztcbiAgICAgIH1cbiAgICAgIGlmIChyZWxDaGFyc1szXSA9PT0gJ2MnKSB7XG4gICAgICAgIHkgLT0gcm91bmQoaCAvIDIpO1xuICAgICAgfVxuICAgICAgaWYgKHJlbENoYXJzWzRdID09PSAnYycpIHtcbiAgICAgICAgeCAtPSByb3VuZCh3IC8gMik7XG4gICAgICB9XG4gICAgICByZXR1cm4gY3JlYXRlJDIoeCwgeSwgdywgaCk7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kQmVzdFJlbGF0aXZlUG9zaXRpb24gPSAocmVjdCwgdGFyZ2V0UmVjdCwgY29uc3RyYWluUmVjdCwgcmVscykgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBvcyA9IHJlbGF0aXZlUG9zaXRpb24ocmVjdCwgdGFyZ2V0UmVjdCwgcmVsc1tpXSk7XG4gICAgICAgIGlmIChwb3MueCA+PSBjb25zdHJhaW5SZWN0LnggJiYgcG9zLnggKyBwb3MudyA8PSBjb25zdHJhaW5SZWN0LncgKyBjb25zdHJhaW5SZWN0LnggJiYgcG9zLnkgPj0gY29uc3RyYWluUmVjdC55ICYmIHBvcy55ICsgcG9zLmggPD0gY29uc3RyYWluUmVjdC5oICsgY29uc3RyYWluUmVjdC55KSB7XG4gICAgICAgICAgcmV0dXJuIHJlbHNbaV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgY29uc3QgaW5mbGF0ZSA9IChyZWN0LCB3LCBoKSA9PiB7XG4gICAgICByZXR1cm4gY3JlYXRlJDIocmVjdC54IC0gdywgcmVjdC55IC0gaCwgcmVjdC53ICsgdyAqIDIsIHJlY3QuaCArIGggKiAyKTtcbiAgICB9O1xuICAgIGNvbnN0IGludGVyc2VjdCA9IChyZWN0LCBjcm9wUmVjdCkgPT4ge1xuICAgICAgY29uc3QgeDEgPSBtYXgocmVjdC54LCBjcm9wUmVjdC54KTtcbiAgICAgIGNvbnN0IHkxID0gbWF4KHJlY3QueSwgY3JvcFJlY3QueSk7XG4gICAgICBjb25zdCB4MiA9IG1pbihyZWN0LnggKyByZWN0LncsIGNyb3BSZWN0LnggKyBjcm9wUmVjdC53KTtcbiAgICAgIGNvbnN0IHkyID0gbWluKHJlY3QueSArIHJlY3QuaCwgY3JvcFJlY3QueSArIGNyb3BSZWN0LmgpO1xuICAgICAgaWYgKHgyIC0geDEgPCAwIHx8IHkyIC0geTEgPCAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWF0ZSQyKHgxLCB5MSwgeDIgLSB4MSwgeTIgLSB5MSk7XG4gICAgfTtcbiAgICBjb25zdCBjbGFtcCA9IChyZWN0LCBjbGFtcFJlY3QsIGZpeGVkU2l6ZSkgPT4ge1xuICAgICAgbGV0IHgxID0gcmVjdC54O1xuICAgICAgbGV0IHkxID0gcmVjdC55O1xuICAgICAgbGV0IHgyID0gcmVjdC54ICsgcmVjdC53O1xuICAgICAgbGV0IHkyID0gcmVjdC55ICsgcmVjdC5oO1xuICAgICAgY29uc3QgY3gyID0gY2xhbXBSZWN0LnggKyBjbGFtcFJlY3QudztcbiAgICAgIGNvbnN0IGN5MiA9IGNsYW1wUmVjdC55ICsgY2xhbXBSZWN0Lmg7XG4gICAgICBjb25zdCB1bmRlcmZsb3dYMSA9IG1heCgwLCBjbGFtcFJlY3QueCAtIHgxKTtcbiAgICAgIGNvbnN0IHVuZGVyZmxvd1kxID0gbWF4KDAsIGNsYW1wUmVjdC55IC0geTEpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3dYMiA9IG1heCgwLCB4MiAtIGN4Mik7XG4gICAgICBjb25zdCBvdmVyZmxvd1kyID0gbWF4KDAsIHkyIC0gY3kyKTtcbiAgICAgIHgxICs9IHVuZGVyZmxvd1gxO1xuICAgICAgeTEgKz0gdW5kZXJmbG93WTE7XG4gICAgICBpZiAoZml4ZWRTaXplKSB7XG4gICAgICAgIHgyICs9IHVuZGVyZmxvd1gxO1xuICAgICAgICB5MiArPSB1bmRlcmZsb3dZMTtcbiAgICAgICAgeDEgLT0gb3ZlcmZsb3dYMjtcbiAgICAgICAgeTEgLT0gb3ZlcmZsb3dZMjtcbiAgICAgIH1cbiAgICAgIHgyIC09IG92ZXJmbG93WDI7XG4gICAgICB5MiAtPSBvdmVyZmxvd1kyO1xuICAgICAgcmV0dXJuIGNyZWF0ZSQyKHgxLCB5MSwgeDIgLSB4MSwgeTIgLSB5MSk7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGUkMiA9ICh4LCB5LCB3LCBoKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICB3LFxuICAgICAgICBoXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZnJvbUNsaWVudFJlY3QgPSBjbGllbnRSZWN0ID0+IHtcbiAgICAgIHJldHVybiBjcmVhdGUkMihjbGllbnRSZWN0LmxlZnQsIGNsaWVudFJlY3QudG9wLCBjbGllbnRSZWN0LndpZHRoLCBjbGllbnRSZWN0LmhlaWdodCk7XG4gICAgfTtcbiAgICBjb25zdCBSZWN0ID0ge1xuICAgICAgaW5mbGF0ZSxcbiAgICAgIHJlbGF0aXZlUG9zaXRpb24sXG4gICAgICBmaW5kQmVzdFJlbGF0aXZlUG9zaXRpb24sXG4gICAgICBpbnRlcnNlY3QsXG4gICAgICBjbGFtcCxcbiAgICAgIGNyZWF0ZTogY3JlYXRlJDIsXG4gICAgICBmcm9tQ2xpZW50UmVjdFxuICAgIH07XG5cbiAgICBjb25zdCBhd2FpdGVyID0gKHJlc29sdmVDYiwgcmVqZWN0Q2IsIHRpbWVvdXQgPSAxMDAwKSA9PiB7XG4gICAgICBsZXQgZG9uZSA9IGZhbHNlO1xuICAgICAgbGV0IHRpbWVyID0gbnVsbDtcbiAgICAgIGNvbnN0IGNvbXBsZXRlID0gY29tcGxldGVyID0+ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIGlmICh0aW1lciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29tcGxldGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzb2x2ZSA9IGNvbXBsZXRlKHJlc29sdmVDYik7XG4gICAgICBjb25zdCByZWplY3QgPSBjb21wbGV0ZShyZWplY3RDYik7XG4gICAgICBjb25zdCBzdGFydCA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmICghZG9uZSAmJiB0aW1lciA9PT0gbnVsbCkge1xuICAgICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QuYXBwbHkobnVsbCwgYXJncyksIHRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIHJlc29sdmUsXG4gICAgICAgIHJlamVjdFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZSQxID0gKCkgPT4ge1xuICAgICAgY29uc3QgdGFza3MgPSB7fTtcbiAgICAgIGNvbnN0IHJlc3VsdEZucyA9IHt9O1xuICAgICAgY29uc3QgbG9hZCA9IChpZCwgdXJsKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvYWRFcnJNc2cgPSBgU2NyaXB0IGF0IFVSTCBcIiR7IHVybCB9XCIgZmFpbGVkIHRvIGxvYWRgO1xuICAgICAgICBjb25zdCBydW5FcnJNc2cgPSBgU2NyaXB0IGF0IFVSTCBcIiR7IHVybCB9XCIgZGlkIG5vdCBjYWxsIFxcYHRpbnltY2UuUmVzb3VyY2UuYWRkKCckeyBpZCB9JywgZGF0YSlcXGAgd2l0aGluIDEgc2Vjb25kYDtcbiAgICAgICAgaWYgKHRhc2tzW2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRhc2tzW2lkXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB0YXNrID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd2FpdGVyID0gYXdhaXRlcihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgcmVzdWx0Rm5zW2lkXSA9IHdhaXRlci5yZXNvbHZlO1xuICAgICAgICAgICAgU2NyaXB0TG9hZGVyLlNjcmlwdExvYWRlci5sb2FkU2NyaXB0KHVybCkudGhlbigoKSA9PiB3YWl0ZXIuc3RhcnQocnVuRXJyTXNnKSwgKCkgPT4gd2FpdGVyLnJlamVjdChsb2FkRXJyTXNnKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGFza3NbaWRdID0gdGFzaztcbiAgICAgICAgICByZXR1cm4gdGFzaztcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFkZCA9IChpZCwgZGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0Rm5zW2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVzdWx0Rm5zW2lkXShkYXRhKTtcbiAgICAgICAgICBkZWxldGUgcmVzdWx0Rm5zW2lkXTtcbiAgICAgICAgfVxuICAgICAgICB0YXNrc1tpZF0gPSBQcm9taXNlLnJlc29sdmUoZGF0YSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdW5sb2FkID0gaWQgPT4ge1xuICAgICAgICBkZWxldGUgdGFza3NbaWRdO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxvYWQsXG4gICAgICAgIGFkZCxcbiAgICAgICAgdW5sb2FkXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgUmVzb3VyY2UgPSBjcmVhdGUkMSgpO1xuXG4gICAgY29uc3QgY3JlYXRlID0gKCkgPT4gKCgpID0+IHtcbiAgICAgIGxldCBkYXRhID0ge307XG4gICAgICBsZXQga2V5cyA9IFtdO1xuICAgICAgY29uc3Qgc3RvcmFnZSA9IHtcbiAgICAgICAgZ2V0SXRlbToga2V5ID0+IHtcbiAgICAgICAgICBjb25zdCBpdGVtID0gZGF0YVtrZXldO1xuICAgICAgICAgIHJldHVybiBpdGVtID8gaXRlbSA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIHNldEl0ZW06IChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgZGF0YVtrZXldID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAga2V5OiBpbmRleCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGtleXNbaW5kZXhdO1xuICAgICAgICB9LFxuICAgICAgICByZW1vdmVJdGVtOiBrZXkgPT4ge1xuICAgICAgICAgIGtleXMgPSBrZXlzLmZpbHRlcihrID0+IGsgPT09IGtleSk7XG4gICAgICAgICAgZGVsZXRlIGRhdGFba2V5XTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcbiAgICAgICAgICBrZXlzID0gW107XG4gICAgICAgICAgZGF0YSA9IHt9O1xuICAgICAgICB9LFxuICAgICAgICBsZW5ndGg6IDBcbiAgICAgIH07XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3RvcmFnZSwgJ2xlbmd0aCcsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiBrZXlzLmxlbmd0aCxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHN0b3JhZ2U7XG4gICAgfSkoKTtcblxuICAgIGxldCBsb2NhbFN0b3JhZ2U7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRlc3QgPSAnX19zdG9yYWdlX3Rlc3RfXyc7XG4gICAgICBsb2NhbFN0b3JhZ2UgPSB3aW5kb3cubG9jYWxTdG9yYWdlO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGVzdCwgdGVzdCk7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0ZXN0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2NhbFN0b3JhZ2UgPSBjcmVhdGUoKTtcbiAgICB9XG4gICAgdmFyIExvY2FsU3RvcmFnZSA9IGxvY2FsU3RvcmFnZTtcblxuICAgIGNvbnN0IHB1YmxpY0FwaSA9IHtcbiAgICAgIGdlb206IHsgUmVjdCB9LFxuICAgICAgdXRpbDoge1xuICAgICAgICBEZWxheSxcbiAgICAgICAgVG9vbHMsXG4gICAgICAgIFZLLFxuICAgICAgICBVUkksXG4gICAgICAgIEV2ZW50RGlzcGF0Y2hlcixcbiAgICAgICAgT2JzZXJ2YWJsZSxcbiAgICAgICAgSTE4bixcbiAgICAgICAgTG9jYWxTdG9yYWdlLFxuICAgICAgICBJbWFnZVVwbG9hZGVyXG4gICAgICB9LFxuICAgICAgZG9tOiB7XG4gICAgICAgIEV2ZW50VXRpbHMsXG4gICAgICAgIFRyZWVXYWxrZXI6IERvbVRyZWVXYWxrZXIsXG4gICAgICAgIFRleHRTZWVrZXIsXG4gICAgICAgIERPTVV0aWxzLFxuICAgICAgICBTY3JpcHRMb2FkZXIsXG4gICAgICAgIFJhbmdlVXRpbHMsXG4gICAgICAgIFNlcmlhbGl6ZXI6IERvbVNlcmlhbGl6ZXIsXG4gICAgICAgIFN0eWxlU2hlZXRMb2FkZXIsXG4gICAgICAgIENvbnRyb2xTZWxlY3Rpb24sXG4gICAgICAgIEJvb2ttYXJrTWFuYWdlcixcbiAgICAgICAgU2VsZWN0aW9uOiBFZGl0b3JTZWxlY3Rpb24sXG4gICAgICAgIEV2ZW50OiBFdmVudFV0aWxzLkV2ZW50XG4gICAgICB9LFxuICAgICAgaHRtbDoge1xuICAgICAgICBTdHlsZXMsXG4gICAgICAgIEVudGl0aWVzLFxuICAgICAgICBOb2RlOiBBc3ROb2RlLFxuICAgICAgICBTY2hlbWEsXG4gICAgICAgIERvbVBhcnNlcixcbiAgICAgICAgV3JpdGVyLFxuICAgICAgICBTZXJpYWxpemVyOiBIdG1sU2VyaWFsaXplclxuICAgICAgfSxcbiAgICAgIEVudixcbiAgICAgIEFkZE9uTWFuYWdlcixcbiAgICAgIEFubm90YXRvcixcbiAgICAgIEZvcm1hdHRlcixcbiAgICAgIFVuZG9NYW5hZ2VyLFxuICAgICAgRWRpdG9yQ29tbWFuZHMsXG4gICAgICBXaW5kb3dNYW5hZ2VyLFxuICAgICAgTm90aWZpY2F0aW9uTWFuYWdlcixcbiAgICAgIEVkaXRvck9ic2VydmFibGUsXG4gICAgICBTaG9ydGN1dHMsXG4gICAgICBFZGl0b3IsXG4gICAgICBGb2N1c01hbmFnZXIsXG4gICAgICBFZGl0b3JNYW5hZ2VyLFxuICAgICAgRE9NOiBET01VdGlscy5ET00sXG4gICAgICBTY3JpcHRMb2FkZXI6IFNjcmlwdExvYWRlci5TY3JpcHRMb2FkZXIsXG4gICAgICBQbHVnaW5NYW5hZ2VyLFxuICAgICAgVGhlbWVNYW5hZ2VyLFxuICAgICAgTW9kZWxNYW5hZ2VyLFxuICAgICAgSWNvbk1hbmFnZXIsXG4gICAgICBSZXNvdXJjZSxcbiAgICAgIEZha2VDbGlwYm9hcmQsXG4gICAgICB0cmltOiBUb29scy50cmltLFxuICAgICAgaXNBcnJheTogVG9vbHMuaXNBcnJheSxcbiAgICAgIGlzOiBUb29scy5pcyxcbiAgICAgIHRvQXJyYXk6IFRvb2xzLnRvQXJyYXksXG4gICAgICBtYWtlTWFwOiBUb29scy5tYWtlTWFwLFxuICAgICAgZWFjaDogVG9vbHMuZWFjaCxcbiAgICAgIG1hcDogVG9vbHMubWFwLFxuICAgICAgZ3JlcDogVG9vbHMuZ3JlcCxcbiAgICAgIGluQXJyYXk6IFRvb2xzLmluQXJyYXksXG4gICAgICBleHRlbmQ6IFRvb2xzLmV4dGVuZCxcbiAgICAgIHdhbGs6IFRvb2xzLndhbGssXG4gICAgICByZXNvbHZlOiBUb29scy5yZXNvbHZlLFxuICAgICAgZXhwbG9kZTogVG9vbHMuZXhwbG9kZSxcbiAgICAgIF9hZGRDYWNoZVN1ZmZpeDogVG9vbHMuX2FkZENhY2hlU3VmZml4XG4gICAgfTtcbiAgICBjb25zdCB0aW55bWNlID0gVG9vbHMuZXh0ZW5kKEVkaXRvck1hbmFnZXIsIHB1YmxpY0FwaSk7XG5cbiAgICBjb25zdCBleHBvcnRUb01vZHVsZUxvYWRlcnMgPSB0aW55bWNlID0+IHtcbiAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gdGlueW1jZTtcbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBleHBvcnRUb1dpbmRvd0dsb2JhbCA9IHRpbnltY2UgPT4ge1xuICAgICAgd2luZG93LnRpbnltY2UgPSB0aW55bWNlO1xuICAgICAgd2luZG93LnRpbnlNQ0UgPSB0aW55bWNlO1xuICAgIH07XG4gICAgZXhwb3J0VG9XaW5kb3dHbG9iYWwodGlueW1jZSk7XG4gICAgZXhwb3J0VG9Nb2R1bGVMb2FkZXJzKHRpbnltY2UpO1xuXG59KSgpO1xuIiwidmFyIGNzcyA9IFwiLyoqXFxuKiBDb3B5cmlnaHQgKGMpIFRpbnkgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTEdQTCBvciBhIGNvbW1lcmNpYWwgbGljZW5zZS5cXG4qIEZvciBMR1BMIHNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxcbiogRm9yIGNvbW1lcmNpYWwgbGljZW5zZXMgc2VlIGh0dHBzOi8vd3d3LnRpbnkuY2xvdWQvXFxuKi9cXG4udG94IHtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcXG4gIGNvbG9yOiAjMDAwO1xcbiAgY3Vyc29yOiBhdXRvO1xcbiAgZm9udC1mYW1pbHk6IFxcXCJwcm94aW1hX25vdmFsaWdodFxcXCIsIFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsIFxcXCJIZWx2ZXRpY2FcXFwiLCBcXFwiQXJpYWxcXFwiLCBzYW5zLXNlcmlmO1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XFxuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG4gIHZlcnRpY2FsLWFsaWduOiBpbml0aWFsO1xcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcXG59XFxuLnRveCAqOm5vdChzdmcpOm5vdChyZWN0KSB7XFxuICBib3gtc2l6aW5nOiBpbmhlcml0O1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBjdXJzb3I6IGluaGVyaXQ7XFxuICBkaXJlY3Rpb246IGluaGVyaXQ7XFxuICBmb250LXNpemU6IGluaGVyaXQ7XFxuICBmb250LXN0eWxlOiBpbmhlcml0O1xcbiAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogaW5oZXJpdDtcXG4gIHRleHQtYWxpZ246IGluaGVyaXQ7XFxuICB0ZXh0LWRlY29yYXRpb246IGluaGVyaXQ7XFxuICB0ZXh0LXNoYWRvdzogaW5oZXJpdDtcXG4gIHRleHQtdHJhbnNmb3JtOiBpbmhlcml0O1xcbiAgdmVydGljYWwtYWxpZ246IGluaGVyaXQ7XFxuICB3aGl0ZS1zcGFjZTogaW5oZXJpdDtcXG59XFxuLnRveCAqOm5vdChzdmcpOm5vdChyZWN0KSB7XFxuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIG5vLWR1cGxpY2F0ZS1zZWxlY3RvcnMgKi9cXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiAwO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGZsb2F0OiBub25lO1xcbiAgaGVpZ2h0OiBhdXRvO1xcbiAgbWFyZ2luOiAwO1xcbiAgbWF4LXdpZHRoOiBub25lO1xcbiAgb3V0bGluZTogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBwb3NpdGlvbjogc3RhdGljO1xcbiAgd2lkdGg6IGF1dG87XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkge1xcbiAgZGlyZWN0aW9uOiBsdHI7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbn1cXG4udG94W2Rpcj1ydGxdIHtcXG4gIGRpcmVjdGlvbjogcnRsO1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XFxufVxcbi50b3gtdGlueW1jZSB7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjN2U3ZTdlO1xcbiAgYm9yZGVyLXJhZGl1czogMHB4O1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB2aXNpYmlsaXR5OiBpbmhlcml0ICFpbXBvcnRhbnQ7XFxufVxcbi50b3gtdGlueW1jZS1pbmxpbmUge1xcbiAgYm9yZGVyOiBub25lO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuLnRveC10aW55bWNlLWlubGluZSAudG94LWVkaXRvci1oZWFkZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjN2U3ZTdlO1xcbiAgYm9yZGVyLXJhZGl1czogMHB4O1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuLnRveC10aW55bWNlLWF1eCB7XFxuICB6LWluZGV4OiAxMzAwO1xcbn1cXG4udG94LXRpbnltY2UgKjpmb2N1cyxcXG4udG94LXRpbnltY2UtYXV4ICo6Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuYnV0dG9uOjotbW96LWZvY3VzLWlubmVyIHtcXG4gIGJvcmRlcjogMDtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LWljb24tLWZsaXAgc3ZnIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlWSgxODBkZWcpO1xcbn1cXG4udG94IC5hY2Nlc3NpYmlsaXR5LWlzc3VlX19oZWFkZXIge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBtYXJnaW4tYm90dG9tOiA0cHg7XFxufVxcbi50b3ggLmFjY2Vzc2liaWxpdHktaXNzdWVfX2Rlc2NyaXB0aW9uIHtcXG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xcbiAgYm9yZGVyOiAxcHggc29saWQgIzdlN2U3ZTtcXG4gIGJvcmRlci1yYWRpdXM6IDBweDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxufVxcbi50b3ggLmFjY2Vzc2liaWxpdHktaXNzdWVfX2Rlc2NyaXB0aW9uID4gZGl2IHtcXG4gIHBhZGRpbmctYm90dG9tOiA0cHg7XFxufVxcbi50b3ggLmFjY2Vzc2liaWxpdHktaXNzdWVfX2Rlc2NyaXB0aW9uID4gZGl2ID4gZGl2IHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xcbn1cXG4udG94IC5hY2Nlc3NpYmlsaXR5LWlzc3VlX19kZXNjcmlwdGlvbiA+ICo6bGFzdC1jaGlsZDpub3QoOm9ubHktY2hpbGQpIHtcXG4gIGJvcmRlci1jb2xvcjogIzdlN2U3ZTtcXG4gIGJvcmRlci1zdHlsZTogc29saWQ7XFxufVxcbi50b3ggLmFjY2Vzc2liaWxpdHktaXNzdWVfX3JlcGFpciB7XFxuICBtYXJnaW4tdG9wOiAxNnB4O1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLmFjY2Vzc2liaWxpdHktaXNzdWUtLWluZm8gLmFjY2Vzc2liaWxpdHktaXNzdWVfX2Rlc2NyaXB0aW9uIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoNjIsIDczLCAxNDgsIDAuMSk7XFxuICBib3JkZXItY29sb3I6IHJnYmEoNjIsIDczLCAxNDgsIDAuNCk7XFxuICBjb2xvcjogIzAwMDtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC5hY2Nlc3NpYmlsaXR5LWlzc3VlLS1pbmZvIC5hY2Nlc3NpYmlsaXR5LWlzc3VlX19kZXNjcmlwdGlvbiA+ICo6bGFzdC1jaGlsZCB7XFxuICBib3JkZXItY29sb3I6IHJnYmEoNjIsIDczLCAxNDgsIDAuNCk7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZS0taW5mbyAudG94LWZvcm1fX2dyb3VwIGgyIHtcXG4gIGNvbG9yOiAjM2U0OTk0O1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLmFjY2Vzc2liaWxpdHktaXNzdWUtLWluZm8gLnRveC1pY29uIHN2ZyB7XFxuICBmaWxsOiAjM2U0OTk0O1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLmFjY2Vzc2liaWxpdHktaXNzdWUtLWluZm8gYSAudG94LWljb24ge1xcbiAgY29sb3I6ICMzZTQ5OTQ7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZS0td2FybiAuYWNjZXNzaWJpbGl0eS1pc3N1ZV9fZGVzY3JpcHRpb24ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDE2NSwgMCwgMC4xKTtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDE2NSwgMCwgMC41KTtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLmFjY2Vzc2liaWxpdHktaXNzdWUtLXdhcm4gLmFjY2Vzc2liaWxpdHktaXNzdWVfX2Rlc2NyaXB0aW9uID4gKjpsYXN0LWNoaWxkIHtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDE2NSwgMCwgMC41KTtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC5hY2Nlc3NpYmlsaXR5LWlzc3VlLS13YXJuIC50b3gtZm9ybV9fZ3JvdXAgaDIge1xcbiAgY29sb3I6ICNjYzg1MDA7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZS0td2FybiAudG94LWljb24gc3ZnIHtcXG4gIGZpbGw6ICNjYzg1MDA7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZS0td2FybiBhIC50b3gtaWNvbiB7XFxuICBjb2xvcjogI2NjODUwMDtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC5hY2Nlc3NpYmlsaXR5LWlzc3VlLS1lcnJvciAuYWNjZXNzaWJpbGl0eS1pc3N1ZV9fZGVzY3JpcHRpb24ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxODIsIDY1LCA1MywgMC4xKTtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSgxODIsIDY1LCA1MywgMC40KTtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLmFjY2Vzc2liaWxpdHktaXNzdWUtLWVycm9yIC5hY2Nlc3NpYmlsaXR5LWlzc3VlX19kZXNjcmlwdGlvbiA+ICo6bGFzdC1jaGlsZCB7XFxuICBib3JkZXItY29sb3I6IHJnYmEoMTgyLCA2NSwgNTMsIDAuNCk7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZS0tZXJyb3IgLnRveC1mb3JtX19ncm91cCBoMiB7XFxuICBjb2xvcjogI2I2NDEzNTtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC5hY2Nlc3NpYmlsaXR5LWlzc3VlLS1lcnJvciAudG94LWljb24gc3ZnIHtcXG4gIGZpbGw6ICNiNjQxMzU7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZS0tZXJyb3IgYSAudG94LWljb24ge1xcbiAgY29sb3I6ICNiNjQxMzU7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZS0tc3VjY2VzcyAuYWNjZXNzaWJpbGl0eS1pc3N1ZV9fZGVzY3JpcHRpb24ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg0MSwgMTI0LCA3MCwgMC4xKTtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSg0MSwgMTI0LCA3MCwgMC40KTtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLmFjY2Vzc2liaWxpdHktaXNzdWUtLXN1Y2Nlc3MgLmFjY2Vzc2liaWxpdHktaXNzdWVfX2Rlc2NyaXB0aW9uID4gKjpsYXN0LWNoaWxkIHtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSg0MSwgMTI0LCA3MCwgMC40KTtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC5hY2Nlc3NpYmlsaXR5LWlzc3VlLS1zdWNjZXNzIC50b3gtZm9ybV9fZ3JvdXAgaDIge1xcbiAgY29sb3I6ICMyOTdjNDY7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZS0tc3VjY2VzcyAudG94LWljb24gc3ZnIHtcXG4gIGZpbGw6ICMyOTdjNDY7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZS0tc3VjY2VzcyBhIC50b3gtaWNvbiB7XFxuICBjb2xvcjogIzI5N2M0NjtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC5hY2Nlc3NpYmlsaXR5LWlzc3VlX19oZWFkZXIgaDEsXFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC50b3gtZm9ybV9fZ3JvdXAgLmFjY2Vzc2liaWxpdHktaXNzdWVfX2Rlc2NyaXB0aW9uIGgyIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZV9faGVhZGVyIC50b3gtYnV0dG9uIHtcXG4gIG1hcmdpbi1sZWZ0OiA0cHg7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZV9faGVhZGVyID4gKjpudGgtbGFzdC1jaGlsZCgyKSB7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC5hY2Nlc3NpYmlsaXR5LWlzc3VlX19kZXNjcmlwdGlvbiB7XFxuICBwYWRkaW5nOiA0cHggNHB4IDRweCA4cHg7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZV9fZGVzY3JpcHRpb24gPiAqOmxhc3QtY2hpbGQge1xcbiAgYm9yZGVyLWxlZnQtd2lkdGg6IDFweDtcXG4gIHBhZGRpbmctbGVmdDogNHB4O1xcbn1cXG4udG94W2Rpcj1ydGxdIC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLmFjY2Vzc2liaWxpdHktaXNzdWVfX2hlYWRlciAudG94LWJ1dHRvbiB7XFxuICBtYXJnaW4tcmlnaHQ6IDRweDtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC5hY2Nlc3NpYmlsaXR5LWlzc3VlX19oZWFkZXIgPiAqOm50aC1sYXN0LWNoaWxkKDIpIHtcXG4gIG1hcmdpbi1yaWdodDogYXV0bztcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC5hY2Nlc3NpYmlsaXR5LWlzc3VlX19kZXNjcmlwdGlvbiB7XFxuICBwYWRkaW5nOiA0cHggOHB4IDRweCA0cHg7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAuYWNjZXNzaWJpbGl0eS1pc3N1ZV9fZGVzY3JpcHRpb24gPiAqOmxhc3QtY2hpbGQge1xcbiAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAxcHg7XFxuICBwYWRkaW5nLXJpZ2h0OiA0cHg7XFxufVxcbi50b3ggLnRveC1hbmNob3JiYXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXg6IDAgMCBhdXRvO1xcbn1cXG4udG94IC50b3gtYmFyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4OiAwIDAgYXV0bztcXG59XFxuLnRveCAudG94LWJ1dHRvbiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2U0OTk0O1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQ7XFxuICBib3JkZXItY29sb3I6ICMzZTQ5OTQ7XFxuICBib3JkZXItcmFkaXVzOiAwcHg7XFxuICBib3JkZXItc3R5bGU6IHNvbGlkO1xcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcXG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xcbiAgbWFyZ2luOiAwO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIHBhZGRpbmc6IDRweCAxNnB4O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG4udG94IC50b3gtYnV0dG9uW2Rpc2FibGVkXSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2U0OTk0O1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcXG4gIGJvcmRlci1jb2xvcjogIzNlNDk5NDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuLnRveCAudG94LWJ1dHRvbjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzY0MDgyO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcXG4gIGJvcmRlci1jb2xvcjogIzM2NDA4MjtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLnRveCAudG94LWJ1dHRvbjphY3RpdmU6bm90KDpkaXNhYmxlZCksXFxuLnRveCAudG94LWJ1dHRvbjpmb2N1czpub3QoOmRpc2FibGVkKSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmQwICFpbXBvcnRhbnQ7XFxuICBib3gtc2hhZG93OiAwIDAgMCAycHggIzFlMWUxZSAhaW1wb3J0YW50O1xcbiAgY29sb3I6ICMxZTFlMWUgIWltcG9ydGFudDtcXG59XFxuLnRveCAudG94LWJ1dHRvbi0tc2Vjb25kYXJ5IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdDtcXG4gIGJvcmRlcjogMDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogIzAwMDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgcGFkZGluZzogNHB4IDE2cHg7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG59XFxuLnRveCAudG94LWJ1dHRvbi0tc2Vjb25kYXJ5W2Rpc2FibGVkXSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWJlYmViO1xcbiAgY29sb3I6IHJnYmEoMzQsIDQ3LCA2MiwgMC41KTtcXG59XFxuLnRveCAudG94LWJ1dHRvbi0tc2Vjb25kYXJ5OmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4udG94IC50b3gtYnV0dG9uLS1pY29uLFxcbi50b3ggLnRveC1idXR0b24udG94LWJ1dHRvbi0taWNvbixcXG4udG94IC50b3gtYnV0dG9uLnRveC1idXR0b24tLXNlY29uZGFyeS50b3gtYnV0dG9uLS1pY29uIHtcXG4gIHBhZGRpbmc6IDRweDtcXG59XFxuLnRveCAudG94LWJ1dHRvbi0taWNvbiAudG94LWljb24gc3ZnLFxcbi50b3ggLnRveC1idXR0b24udG94LWJ1dHRvbi0taWNvbiAudG94LWljb24gc3ZnLFxcbi50b3ggLnRveC1idXR0b24udG94LWJ1dHRvbi0tc2Vjb25kYXJ5LnRveC1idXR0b24tLWljb24gLnRveC1pY29uIHN2ZyB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGZpbGw6IGN1cnJlbnRDb2xvcjtcXG59XFxuLnRveCAudG94LWJ1dHRvbi1saW5rIHtcXG4gIGJhY2tncm91bmQ6IDA7XFxuICBib3JkZXI6IG5vbmU7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjM7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG59XFxuXFxuLnRveCAudG94LWJ1dHRvbi0tbmFrZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm94LXNoYWRvdzogdW5zZXQ7XFxuICBjb2xvcjogIzAwMDtcXG59XFxuLnRveCAudG94LWJ1dHRvbi0tbmFrZWRbZGlzYWJsZWRdIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlYmViZWI7XFxuICBib3JkZXItY29sb3I6ICNlYmViZWI7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6IHJnYmEoMzQsIDQ3LCA2MiwgMC41KTtcXG59XFxuLnRveCAudG94LWJ1dHRvbi0tbmFrZWQ6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RlZGVkZTtcXG4gIGJvcmRlci1jb2xvcjogI2RlZGVkZTtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogIzAwMDtcXG59XFxuLnRveCAudG94LWJ1dHRvbi0tbmFrZWQ6Zm9jdXM6bm90KDpkaXNhYmxlZCkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RlZGVkZTtcXG4gIGJvcmRlci1jb2xvcjogI2RlZGVkZTtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogIzAwMDtcXG59XFxuLnRveCAudG94LWJ1dHRvbi0tbmFrZWQ6YWN0aXZlOm5vdCg6ZGlzYWJsZWQpIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkMWQxZDE7XFxuICBib3JkZXItY29sb3I6ICNkMWQxZDE7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbi50b3ggLnRveC1idXR0b24tLW5ha2VkIC50b3gtaWNvbiBzdmcge1xcbiAgZmlsbDogY3VycmVudENvbG9yO1xcbn1cXG4udG94IC50b3gtYnV0dG9uLS1uYWtlZC50b3gtYnV0dG9uLS1pY29uOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4udG94IC50b3gtY2hlY2tib3gge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJvcmRlci1yYWRpdXM6IDBweDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBoZWlnaHQ6IDM2cHg7XFxuICBtaW4td2lkdGg6IDM2cHg7XFxufVxcbi50b3ggLnRveC1jaGVja2JveF9faW5wdXQge1xcbiAgLyogSGlkZSBmcm9tIHZpZXcgYnV0IHZpc2libGUgdG8gc2NyZWVuIHJlYWRlcnMgKi9cXG4gIGhlaWdodDogMXB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogYXV0bztcXG4gIHdpZHRoOiAxcHg7XFxufVxcbi50b3ggLnRveC1jaGVja2JveF9faWNvbnMge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJvcmRlci1yYWRpdXM6IDBweDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDJweCB0cmFuc3BhcmVudDtcXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGhlaWdodDogMjRweDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgcGFkZGluZzogY2FsYyg0cHggLSAxcHgpO1xcbiAgd2lkdGg6IDI0cHg7XFxufVxcbi50b3ggLnRveC1jaGVja2JveF9faWNvbnMgLnRveC1jaGVja2JveC1pY29uX191bmNoZWNrZWQgc3ZnIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgZmlsbDogcmdiYSgzNCwgNDcsIDYyLCAwLjMpO1xcbn1cXG4udG94IC50b3gtY2hlY2tib3hfX2ljb25zIC50b3gtY2hlY2tib3gtaWNvbl9faW5kZXRlcm1pbmF0ZSBzdmcge1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIGZpbGw6ICMzZTQ5OTQ7XFxufVxcbi50b3ggLnRveC1jaGVja2JveF9faWNvbnMgLnRveC1jaGVja2JveC1pY29uX19jaGVja2VkIHN2ZyB7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgZmlsbDogIzNlNDk5NDtcXG59XFxuLnRveCAudG94LWNoZWNrYm94LS1kaXNhYmxlZCB7XFxuICBjb2xvcjogcmdiYSgzNCwgNDcsIDYyLCAwLjUpO1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuLnRveCAudG94LWNoZWNrYm94LS1kaXNhYmxlZCAudG94LWNoZWNrYm94X19pY29ucyAudG94LWNoZWNrYm94LWljb25fX2NoZWNrZWQgc3ZnIHtcXG4gIGZpbGw6IHJnYmEoMzQsIDQ3LCA2MiwgMC41KTtcXG59XFxuLnRveCAudG94LWNoZWNrYm94LS1kaXNhYmxlZCAudG94LWNoZWNrYm94X19pY29ucyAudG94LWNoZWNrYm94LWljb25fX3VuY2hlY2tlZCBzdmcge1xcbiAgZmlsbDogcmdiYSgzNCwgNDcsIDYyLCAwLjUpO1xcbn1cXG4udG94IC50b3gtY2hlY2tib3gtLWRpc2FibGVkIC50b3gtY2hlY2tib3hfX2ljb25zIC50b3gtY2hlY2tib3gtaWNvbl9faW5kZXRlcm1pbmF0ZSBzdmcge1xcbiAgZmlsbDogcmdiYSgzNCwgNDcsIDYyLCAwLjUpO1xcbn1cXG4udG94IGlucHV0LnRveC1jaGVja2JveF9faW5wdXQ6Y2hlY2tlZCArIC50b3gtY2hlY2tib3hfX2ljb25zIC50b3gtY2hlY2tib3gtaWNvbl9fdW5jaGVja2VkIHN2ZyB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4udG94IGlucHV0LnRveC1jaGVja2JveF9faW5wdXQ6Y2hlY2tlZCArIC50b3gtY2hlY2tib3hfX2ljb25zIC50b3gtY2hlY2tib3gtaWNvbl9fY2hlY2tlZCBzdmcge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcbi50b3ggaW5wdXQudG94LWNoZWNrYm94X19pbnB1dDppbmRldGVybWluYXRlICsgLnRveC1jaGVja2JveF9faWNvbnMgLnRveC1jaGVja2JveC1pY29uX191bmNoZWNrZWQgc3ZnIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi50b3ggaW5wdXQudG94LWNoZWNrYm94X19pbnB1dDppbmRldGVybWluYXRlICsgLnRveC1jaGVja2JveF9faWNvbnMgLnRveC1jaGVja2JveC1pY29uX19pbmRldGVybWluYXRlIHN2ZyB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuLnRveCBpbnB1dC50b3gtY2hlY2tib3hfX2lucHV0OmZvY3VzICsgLnRveC1jaGVja2JveF9faWNvbnMge1xcbiAgYm9yZGVyLXJhZGl1czogMHB4O1xcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4ICMzZTQ5OTQ7XFxuICBwYWRkaW5nOiBjYWxjKDRweCAtIDFweCk7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1jaGVja2JveF9fbGFiZWwge1xcbiAgbWFyZ2luLWxlZnQ6IDRweDtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LWNoZWNrYm94X19pbnB1dCB7XFxuICBsZWZ0OiAtMTAwMDBweDtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LWJhciAudG94LWNoZWNrYm94IHtcXG4gIG1hcmdpbi1sZWZ0OiA0cHg7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1jaGVja2JveF9fbGFiZWwge1xcbiAgbWFyZ2luLXJpZ2h0OiA0cHg7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1jaGVja2JveF9faW5wdXQge1xcbiAgcmlnaHQ6IC0xMDAwMHB4O1xcbn1cXG4udG94W2Rpcj1ydGxdIC50b3gtYmFyIC50b3gtY2hlY2tib3gge1xcbiAgbWFyZ2luLXJpZ2h0OiA0cHg7XFxufVxcbi50b3gge1xcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWRlc2NlbmRpbmctc3BlY2lmaWNpdHkgKi9cXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb24tLXRvb2xiYXIgLnRveC1jb2xsZWN0aW9uX19ncm91cCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgcGFkZGluZzogMDtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb24tLWdyaWQgLnRveC1jb2xsZWN0aW9uX19ncm91cCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgbWF4LWhlaWdodDogMjA4cHg7XFxuICBvdmVyZmxvdy14OiBoaWRkZW47XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbiAgcGFkZGluZzogMDtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb24tLWxpc3QgLnRveC1jb2xsZWN0aW9uX19ncm91cCB7XFxuICBib3JkZXItYm90dG9tLXdpZHRoOiAwO1xcbiAgYm9yZGVyLWNvbG9yOiAjN2U3ZTdlO1xcbiAgYm9yZGVyLWxlZnQtd2lkdGg6IDA7XFxuICBib3JkZXItcmlnaHQtd2lkdGg6IDA7XFxuICBib3JkZXItc3R5bGU6IHNvbGlkO1xcbiAgYm9yZGVyLXRvcC13aWR0aDogMXB4O1xcbiAgcGFkZGluZzogNHB4IDA7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uLS1saXN0IC50b3gtY29sbGVjdGlvbl9fZ3JvdXA6Zmlyc3QtY2hpbGQge1xcbiAgYm9yZGVyLXRvcC13aWR0aDogMDtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb25fX2dyb3VwLWhlYWRpbmcge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzk4OTg5ODtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG4gIG1hcmdpbi1ib3R0b206IDRweDtcXG4gIG1hcmdpbi10b3A6IC00cHg7XFxuICBwYWRkaW5nOiA0cHggOHB4O1xcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XFxuICAtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmU7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uX19pdGVtIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjb2xvcjogIzAwMDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmU7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uLS1saXN0IC50b3gtY29sbGVjdGlvbl9faXRlbSB7XFxuICBwYWRkaW5nOiA0cHggOHB4O1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbi0tdG9vbGJhciAudG94LWNvbGxlY3Rpb25fX2l0ZW0ge1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgcGFkZGluZzogNHB4O1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbi0tZ3JpZCAudG94LWNvbGxlY3Rpb25fX2l0ZW0ge1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgcGFkZGluZzogNHB4O1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbi0tbGlzdCAudG94LWNvbGxlY3Rpb25fX2l0ZW0tLWVuYWJsZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbi0tbGlzdCAudG94LWNvbGxlY3Rpb25fX2l0ZW0tLWFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVlMGUyO1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbi0tdG9vbGJhciAudG94LWNvbGxlY3Rpb25fX2l0ZW0tLWVuYWJsZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RlZTBlMjtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbi0tdG9vbGJhciAudG94LWNvbGxlY3Rpb25fX2l0ZW0tLWFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVlMGUyO1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbi0tZ3JpZCAudG94LWNvbGxlY3Rpb25fX2l0ZW0tLWVuYWJsZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RlZTBlMjtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbi0tZ3JpZCAudG94LWNvbGxlY3Rpb25fX2l0ZW0tLWFjdGl2ZTpub3QoLnRveC1jb2xsZWN0aW9uX19pdGVtLS1zdGF0ZS1kaXNhYmxlZCkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RlZTBlMjtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbi0tbGlzdCAudG94LWNvbGxlY3Rpb25fX2l0ZW0tLWFjdGl2ZTpub3QoLnRveC1jb2xsZWN0aW9uX19pdGVtLS1zdGF0ZS1kaXNhYmxlZCkge1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uLS10b29sYmFyIC50b3gtY29sbGVjdGlvbl9faXRlbS0tYWN0aXZlOm5vdCgudG94LWNvbGxlY3Rpb25fX2l0ZW0tLXN0YXRlLWRpc2FibGVkKSB7XFxuICBjb2xvcjogIzAwMDtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb25fX2l0ZW0taWNvbixcXG4udG94IC50b3gtY29sbGVjdGlvbl9faXRlbS1jaGVja21hcmsge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBoZWlnaHQ6IDI0cHg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIHdpZHRoOiAyNHB4O1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbl9faXRlbS1pY29uIHN2ZyxcXG4udG94IC50b3gtY29sbGVjdGlvbl9faXRlbS1jaGVja21hcmsgc3ZnIHtcXG4gIGZpbGw6IGN1cnJlbnRDb2xvcjtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb24tLXRvb2xiYXItbGcgLnRveC1jb2xsZWN0aW9uX19pdGVtLWljb24ge1xcbiAgaGVpZ2h0OiA0OHB4O1xcbiAgd2lkdGg6IDQ4cHg7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uX19pdGVtLWxhYmVsIHtcXG4gIGNvbG9yOiBjdXJyZW50Q29sb3I7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBmbGV4OiAxO1xcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb25fX2l0ZW0tYWNjZXNzb3J5IHtcXG4gIGNvbG9yOiA7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBoZWlnaHQ6IDI0cHg7XFxuICBsaW5lLWhlaWdodDogMjRweDtcXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbl9faXRlbS1jYXJldCB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIG1pbi1oZWlnaHQ6IDI0cHg7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uX19pdGVtLWNhcmV0OjphZnRlciB7XFxuICBjb250ZW50OiAnJztcXG4gIGZvbnQtc2l6ZTogMDtcXG4gIG1pbi1oZWlnaHQ6IGluaGVyaXQ7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uX19pdGVtLWNhcmV0IHN2ZyB7XFxuICBmaWxsOiAjMDAwO1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbl9faXRlbS0tc3RhdGUtZGlzYWJsZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBjb2xvcjogcmdiYSgzNCwgNDcsIDYyLCAwLjUpO1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb25fX2l0ZW0tLXN0YXRlLWRpc2FibGVkIC50b3gtY29sbGVjdGlvbl9faXRlbS1jYXJldCBzdmcge1xcbiAgZmlsbDogcmdiYSgzNCwgNDcsIDYyLCAwLjUpO1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbi0tbGlzdCAudG94LWNvbGxlY3Rpb25fX2l0ZW06bm90KC50b3gtY29sbGVjdGlvbl9faXRlbS0tZW5hYmxlZCkgLnRveC1jb2xsZWN0aW9uX19pdGVtLWNoZWNrbWFyayBzdmcge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb24tLWxpc3QgLnRveC1jb2xsZWN0aW9uX19pdGVtOm5vdCgudG94LWNvbGxlY3Rpb25fX2l0ZW0tLWVuYWJsZWQpIC50b3gtY29sbGVjdGlvbl9faXRlbS1hY2Nlc3NvcnkgKyAudG94LWNvbGxlY3Rpb25fX2l0ZW0tY2hlY2ttYXJrIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uLS1ob3Jpem9udGFsIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjN2U3ZTdlO1xcbiAgYm9yZGVyLXJhZGl1czogMHB4O1xcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleDogMCAwIGF1dG87XFxuICBmbGV4LXNocmluazogMDtcXG4gIGZsZXgtd3JhcDogbm93cmFwO1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIG92ZXJmbG93LXg6IGF1dG87XFxuICBwYWRkaW5nOiAwO1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbi0taG9yaXpvbnRhbCAudG94LWNvbGxlY3Rpb25fX2dyb3VwIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC13cmFwOiBub3dyYXA7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwIDRweDtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb24tLWhvcml6b250YWwgLnRveC1jb2xsZWN0aW9uX19pdGVtIHtcXG4gIGhlaWdodDogMzRweDtcXG4gIG1hcmdpbjogMnB4IDAgM3B4IDA7XFxuICBwYWRkaW5nOiAwIDRweDtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb24tLWhvcml6b250YWwgLnRveC1jb2xsZWN0aW9uX19pdGVtLWxhYmVsIHtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uLS1ob3Jpem9udGFsIC50b3gtY29sbGVjdGlvbl9faXRlbS1jYXJldCB7XFxuICBtYXJnaW4tbGVmdDogNHB4O1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbl9faXRlbS1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb25fX2l0ZW0tY29udGFpbmVyLS1yb3cge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGZsZXg6IDEgMSBhdXRvO1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb25fX2l0ZW0tY29udGFpbmVyLS1yb3cudG94LWNvbGxlY3Rpb25fX2l0ZW0tY29udGFpbmVyLS1hbGlnbi1sZWZ0IHtcXG4gIG1hcmdpbi1yaWdodDogYXV0bztcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb25fX2l0ZW0tY29udGFpbmVyLS1yb3cudG94LWNvbGxlY3Rpb25fX2l0ZW0tY29udGFpbmVyLS1hbGlnbi1yaWdodCB7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tcm93LnRveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tdmFsaWduLXRvcCB7XFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG4gIG1hcmdpbi1ib3R0b206IGF1dG87XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tcm93LnRveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tdmFsaWduLW1pZGRsZSB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbl9faXRlbS1jb250YWluZXItLXJvdy50b3gtY29sbGVjdGlvbl9faXRlbS1jb250YWluZXItLXZhbGlnbi1ib3R0b20ge1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xcbiAgbWFyZ2luLXRvcDogYXV0bztcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb25fX2l0ZW0tY29udGFpbmVyLS1jb2x1bW4ge1xcbiAgLW1zLWdyaWQtcm93LWFsaWduOiBjZW50ZXI7XFxuICBhbGlnbi1zZWxmOiBjZW50ZXI7XFxuICBmbGV4OiAxIDEgYXV0bztcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tY29sdW1uLnRveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tYWxpZ24tbGVmdCB7XFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb25fX2l0ZW0tY29udGFpbmVyLS1jb2x1bW4udG94LWNvbGxlY3Rpb25fX2l0ZW0tY29udGFpbmVyLS1hbGlnbi1yaWdodCB7XFxuICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tY29sdW1uLnRveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tdmFsaWduLXRvcCB7XFxuICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xcbn1cXG4udG94IC50b3gtY29sbGVjdGlvbl9faXRlbS1jb250YWluZXItLWNvbHVtbi50b3gtY29sbGVjdGlvbl9faXRlbS1jb250YWluZXItLXZhbGlnbi1taWRkbGUge1xcbiAgLW1zLWdyaWQtcm93LWFsaWduOiBjZW50ZXI7XFxuICBhbGlnbi1zZWxmOiBjZW50ZXI7XFxufVxcbi50b3ggLnRveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tY29sdW1uLnRveC1jb2xsZWN0aW9uX19pdGVtLWNvbnRhaW5lci0tdmFsaWduLWJvdHRvbSB7XFxuICBhbGlnbi1zZWxmOiBmbGV4LWVuZDtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LWNvbGxlY3Rpb24tLWhvcml6b250YWwgLnRveC1jb2xsZWN0aW9uX19ncm91cDpub3QoOmxhc3Qtb2YtdHlwZSkge1xcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgIzdlN2U3ZTtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LWNvbGxlY3Rpb24tLWxpc3QgLnRveC1jb2xsZWN0aW9uX19pdGVtID4gKjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICBtYXJnaW4tbGVmdDogOHB4O1xcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtY29sbGVjdGlvbi0tbGlzdCAudG94LWNvbGxlY3Rpb25fX2l0ZW0gPiAudG94LWNvbGxlY3Rpb25fX2l0ZW0tbGFiZWw6Zmlyc3QtY2hpbGQge1xcbiAgbWFyZ2luLWxlZnQ6IDRweDtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LWNvbGxlY3Rpb25fX2l0ZW0tYWNjZXNzb3J5IHtcXG4gIG1hcmdpbi1sZWZ0OiAxNnB4O1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1jb2xsZWN0aW9uIC50b3gtY29sbGVjdGlvbl9faXRlbS1jYXJldCB7XFxuICBtYXJnaW4tbGVmdDogMTZweDtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LWNvbGxlY3Rpb24tLWhvcml6b250YWwgLnRveC1jb2xsZWN0aW9uX19ncm91cDpub3QoOmxhc3Qtb2YtdHlwZSkge1xcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjN2U3ZTdlO1xcbn1cXG4udG94W2Rpcj1ydGxdIC50b3gtY29sbGVjdGlvbi0tbGlzdCAudG94LWNvbGxlY3Rpb25fX2l0ZW0gPiAqOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi1yaWdodDogOHB4O1xcbn1cXG4udG94W2Rpcj1ydGxdIC50b3gtY29sbGVjdGlvbi0tbGlzdCAudG94LWNvbGxlY3Rpb25fX2l0ZW0gPiAudG94LWNvbGxlY3Rpb25fX2l0ZW0tbGFiZWw6Zmlyc3QtY2hpbGQge1xcbiAgbWFyZ2luLXJpZ2h0OiA0cHg7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1jb2xsZWN0aW9uX19pdGVtLWFjY2Vzc29yeSB7XFxuICBtYXJnaW4tcmlnaHQ6IDE2cHg7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbn1cXG4udG94W2Rpcj1ydGxdIC50b3gtY29sbGVjdGlvbiAudG94LWNvbGxlY3Rpb25fX2l0ZW0tY2FyZXQge1xcbiAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xcbiAgdHJhbnNmb3JtOiByb3RhdGVZKDE4MGRlZyk7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1jb2xsZWN0aW9uLS1ob3Jpem9udGFsIC50b3gtY29sbGVjdGlvbl9faXRlbS1jYXJldCB7XFxuICBtYXJnaW4tcmlnaHQ6IDRweDtcXG59XFxuLnRveCAudG94LWNvbG9yLXBpY2tlci1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBoZWlnaHQ6IDIyNXB4O1xcbiAgbWFyZ2luOiAwO1xcbn1cXG4udG94IC50b3gtc3YtcGFsZXR0ZSB7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLnRveCAudG94LXN2LXBhbGV0dGUtc3BlY3RydW0ge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG4udG94IC50b3gtc3YtcGFsZXR0ZSxcXG4udG94IC50b3gtc3YtcGFsZXR0ZS1zcGVjdHJ1bSB7XFxuICB3aWR0aDogMjI1cHg7XFxufVxcbi50b3ggLnRveC1zdi1wYWxldHRlLXRodW1iIHtcXG4gIGJhY2tncm91bmQ6IG5vbmU7XFxuICBib3JkZXI6IDFweCBzb2xpZCBibGFjaztcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xcbiAgaGVpZ2h0OiAxMnB4O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDEycHg7XFxufVxcbi50b3ggLnRveC1zdi1wYWxldHRlLWlubmVyLXRodW1iIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHdoaXRlO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDEwcHg7XFxufVxcbi50b3ggLnRveC1odWUtc2xpZGVyIHtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB3aWR0aDogMjVweDtcXG59XFxuLnRveCAudG94LWh1ZS1zbGlkZXItc3BlY3RydW0ge1xcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2YwMCwgI2ZmMDA4MCwgI2YwZiwgIzgwMDBmZiwgIzAwZiwgIzAwODBmZiwgIzBmZiwgIzAwZmY4MCwgIzBmMCwgIzgwZmYwMCwgI2ZmMCwgI2ZmODAwMCwgI2YwMCk7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLnRveCAudG94LWh1ZS1zbGlkZXIsXFxuLnRveCAudG94LWh1ZS1zbGlkZXItc3BlY3RydW0ge1xcbiAgd2lkdGg6IDIwcHg7XFxufVxcbi50b3ggLnRveC1odWUtc2xpZGVyLXRodW1iIHtcXG4gIGJhY2tncm91bmQ6IHdoaXRlO1xcbiAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7XFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcXG4gIGhlaWdodDogNHB4O1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcbi50b3ggLnRveC1yZ2ItZm9ybSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG59XFxuLnRveCAudG94LXJnYi1mb3JtIGRpdiB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIG1hcmdpbi1ib3R0b206IDVweDtcXG4gIHdpZHRoOiBpbmhlcml0O1xcbn1cXG4udG94IC50b3gtcmdiLWZvcm0gaW5wdXQge1xcbiAgd2lkdGg6IDZlbTtcXG59XFxuLnRveCAudG94LXJnYi1mb3JtIGlucHV0LnRveC1pbnZhbGlkIHtcXG4gIC8qIE5lZWQgIWltcG9ydGFudCB0byBvdmVycmlkZSBDaHJvbWUncyBmb2N1cyBzdHlsaW5nIHVuZm9ydHVuYXRlbHkgKi9cXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJlZCAhaW1wb3J0YW50O1xcbn1cXG4udG94IC50b3gtcmdiLWZvcm0gLnRveC1yZ2JhLXByZXZpZXcge1xcbiAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7XFxuICBmbGV4LWdyb3c6IDI7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtc3YtcGFsZXR0ZSB7XFxuICBtYXJnaW4tcmlnaHQ6IDE1cHg7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1odWUtc2xpZGVyIHtcXG4gIG1hcmdpbi1yaWdodDogMTVweDtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LWh1ZS1zbGlkZXItdGh1bWIge1xcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1yZ2ItZm9ybSBsYWJlbCB7XFxuICBtYXJnaW4tcmlnaHQ6IDAuNWVtO1xcbn1cXG4udG94W2Rpcj1ydGxdIC50b3gtc3YtcGFsZXR0ZSB7XFxuICBtYXJnaW4tbGVmdDogMTVweDtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LWh1ZS1zbGlkZXIge1xcbiAgbWFyZ2luLWxlZnQ6IDE1cHg7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1odWUtc2xpZGVyLXRodW1iIHtcXG4gIG1hcmdpbi1yaWdodDogLTFweDtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LXJnYi1mb3JtIGxhYmVsIHtcXG4gIG1hcmdpbi1sZWZ0OiAwLjVlbTtcXG59XFxuLnRveCAudG94LXRvb2xiYXIgLnRveC1zd2F0Y2hlcyxcXG4udG94IC50b3gtdG9vbGJhcl9fcHJpbWFyeSAudG94LXN3YXRjaGVzLFxcbi50b3ggLnRveC10b29sYmFyX19vdmVyZmxvdyAudG94LXN3YXRjaGVzIHtcXG4gIG1hcmdpbjogMnB4IDAgM3B4IDRweDtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb24tLWxpc3QgLnRveC1jb2xsZWN0aW9uX19ncm91cCAudG94LXN3YXRjaGVzLW1lbnUge1xcbiAgYm9yZGVyOiAwO1xcbiAgbWFyZ2luOiAtNHB4IDA7XFxufVxcbi50b3ggLnRveC1zd2F0Y2hlc19fcm93IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcbi50b3ggLnRveC1zd2F0Y2gge1xcbiAgaGVpZ2h0OiAzMHB4O1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTVzLCBib3gtc2hhZG93IDAuMTVzO1xcbiAgd2lkdGg6IDMwcHg7XFxufVxcbi50b3ggLnRveC1zd2F0Y2g6aG92ZXIsXFxuLnRveCAudG94LXN3YXRjaDpmb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgxMjcsIDEyNywgMTI3LCAwLjMpIGluc2V0O1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjgpO1xcbn1cXG4udG94IC50b3gtc3dhdGNoLS1yZW1vdmUge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuLnRveCAudG94LXN3YXRjaC0tcmVtb3ZlIHN2ZyBwYXRoIHtcXG4gIHN0cm9rZTogI2U3NGMzYztcXG59XFxuLnRveCAudG94LXN3YXRjaGVzX19waWNrZXItYnRuIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBoZWlnaHQ6IDMwcHg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBwYWRkaW5nOiAwO1xcbiAgd2lkdGg6IDMwcHg7XFxufVxcbi50b3ggLnRveC1zd2F0Y2hlc19fcGlja2VyLWJ0biBzdmcge1xcbiAgaGVpZ2h0OiAyNHB4O1xcbiAgd2lkdGg6IDI0cHg7XFxufVxcbi50b3ggLnRveC1zd2F0Y2hlc19fcGlja2VyLWJ0bjpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiAjZGVlMGUyO1xcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtc3dhdGNoZXNfX3BpY2tlci1idG4ge1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1zd2F0Y2hlc19fcGlja2VyLWJ0biB7XFxuICBtYXJnaW4tcmlnaHQ6IGF1dG87XFxufVxcbi50b3ggLnRveC1jb21tZW50LXRocmVhZCB7XFxuICBiYWNrZ3JvdW5kOiAjZmFmYWZhO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4udG94IC50b3gtY29tbWVudC10aHJlYWQgPiAqOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi10b3A6IDhweDtcXG59XFxuLnRveCAudG94LWNvbW1lbnQge1xcbiAgYmFja2dyb3VuZDogI2ZhZmFmYTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICM3ZTdlN2U7XFxuICBib3JkZXItcmFkaXVzOiAwcHg7XFxuICBib3gtc2hhZG93OiAwIDRweCA4cHggMCByZ2JhKDM0LCA0NywgNjIsIDAuMSk7XFxuICBwYWRkaW5nOiA4cHggOHB4IDE2cHggOHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4udG94IC50b3gtY29tbWVudF9faGVhZGVyIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjb2xvcjogIzAwMDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxufVxcbi50b3ggLnRveC1jb21tZW50X19kYXRlIHtcXG4gIGNvbG9yOiA7XFxuICBmb250LXNpemU6IDEycHg7XFxufVxcbi50b3ggLnRveC1jb21tZW50X19ib2R5IHtcXG4gIGNvbG9yOiAjMDAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjM7XFxuICBtYXJnaW4tdG9wOiA4cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB0ZXh0LXRyYW5zZm9ybTogaW5pdGlhbDtcXG59XFxuLnRveCAudG94LWNvbW1lbnRfX2JvZHkgdGV4dGFyZWEge1xcbiAgcmVzaXplOiBub25lO1xcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4udG94IC50b3gtY29tbWVudF9fZXhwYW5kZXIge1xcbiAgcGFkZGluZy10b3A6IDhweDtcXG59XFxuLnRveCAudG94LWNvbW1lbnRfX2V4cGFuZGVyIHAge1xcbiAgY29sb3I6IDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG59XFxuLnRveCAudG94LWNvbW1lbnRfX2JvZHkgcCB7XFxuICBtYXJnaW46IDA7XFxufVxcbi50b3ggLnRveC1jb21tZW50X19idXR0b25zcGFjaW5nIHtcXG4gIHBhZGRpbmctdG9wOiAxNnB4O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4udG94IC50b3gtY29tbWVudC10aHJlYWRfX292ZXJsYXk6OmFmdGVyIHtcXG4gIGJhY2tncm91bmQ6ICNmYWZhZmE7XFxuICBib3R0b206IDA7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBsZWZ0OiAwO1xcbiAgb3BhY2l0eTogMC45O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDA7XFxuICB0b3A6IDA7XFxuICB6LWluZGV4OiA1O1xcbn1cXG4udG94IC50b3gtY29tbWVudF9fcmVwbHkge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG4gIG1hcmdpbi10b3A6IDhweDtcXG59XFxuLnRveCAudG94LWNvbW1lbnRfX3JlcGx5ID4gKjpmaXJzdC1jaGlsZCB7XFxuICBtYXJnaW4tYm90dG9tOiA4cHg7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLnRveCAudG94LWNvbW1lbnRfX2VkaXQge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtd3JhcDogd3JhcDtcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XFxuICBtYXJnaW4tdG9wOiAxNnB4O1xcbn1cXG4udG94IC50b3gtY29tbWVudF9fZ3JhZGllbnQ6OmFmdGVyIHtcXG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudChyZ2JhKDI1MCwgMjUwLCAyNTAsIDApLCAjZmFmYWZhKTtcXG4gIGJvdHRvbTogMDtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBoZWlnaHQ6IDVlbTtcXG4gIG1hcmdpbi10b3A6IC00MHB4O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcbi50b3ggLnRveC1jb21tZW50X19vdmVybGF5IHtcXG4gIGJhY2tncm91bmQ6ICNmYWZhZmE7XFxuICBib3R0b206IDA7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGZsZXgtZ3JvdzogMTtcXG4gIGxlZnQ6IDA7XFxuICBvcGFjaXR5OiAwLjk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHRvcDogMDtcXG4gIHotaW5kZXg6IDU7XFxufVxcbi50b3ggLnRveC1jb21tZW50X19sb2FkaW5nLXRleHQge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGNvbG9yOiAjMDAwO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi50b3ggLnRveC1jb21tZW50X19sb2FkaW5nLXRleHQgPiBkaXYge1xcbiAgcGFkZGluZy1ib3R0b206IDE2cHg7XFxufVxcbi50b3ggLnRveC1jb21tZW50X19vdmVybGF5dGV4dCB7XFxuICBib3R0b206IDA7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgbGVmdDogMDtcXG4gIHBhZGRpbmc6IDFlbTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAwO1xcbiAgdG9wOiAwO1xcbiAgei1pbmRleDogMTA7XFxufVxcbi50b3ggLnRveC1jb21tZW50X19vdmVybGF5dGV4dCBwIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XFxuICBib3gtc2hhZG93OiAwIDAgOHB4IDhweCAjZmFmYWZhO1xcbiAgY29sb3I6ICMwMDA7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi50b3ggLnRveC1jb21tZW50X19vdmVybGF5dGV4dCBkaXY6bnRoLW9mLXR5cGUoMikge1xcbiAgZm9udC1zaXplOiAwLjhlbTtcXG59XFxuLnRveCAudG94LWNvbW1lbnRfX2J1c3ktc3Bpbm5lciB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcXG4gIGJvdHRvbTogMDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGxlZnQ6IDA7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMDtcXG4gIHRvcDogMDtcXG4gIHotaW5kZXg6IDIwO1xcbn1cXG4udG94IC50b3gtY29tbWVudF9fc2Nyb2xsIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1zaHJpbms6IDE7XFxuICBvdmVyZmxvdzogYXV0bztcXG59XFxuLnRveCAudG94LWNvbnZlcnNhdGlvbnMge1xcbiAgbWFyZ2luOiA4cHg7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1jb21tZW50X19lZGl0IHtcXG4gIG1hcmdpbi1sZWZ0OiA4cHg7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1jb21tZW50X19idXR0b25zcGFjaW5nID4gKjpsYXN0LWNoaWxkLFxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1jb21tZW50X19lZGl0ID4gKjpsYXN0LWNoaWxkLFxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1jb21tZW50X19yZXBseSA+ICo6bGFzdC1jaGlsZCB7XFxuICBtYXJnaW4tbGVmdDogOHB4O1xcbn1cXG4udG94W2Rpcj1ydGxdIC50b3gtY29tbWVudF9fZWRpdCB7XFxuICBtYXJnaW4tcmlnaHQ6IDhweDtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LWNvbW1lbnRfX2J1dHRvbnNwYWNpbmcgPiAqOmxhc3QtY2hpbGQsXFxuLnRveFtkaXI9cnRsXSAudG94LWNvbW1lbnRfX2VkaXQgPiAqOmxhc3QtY2hpbGQsXFxuLnRveFtkaXI9cnRsXSAudG94LWNvbW1lbnRfX3JlcGx5ID4gKjpsYXN0LWNoaWxkIHtcXG4gIG1hcmdpbi1yaWdodDogOHB4O1xcbn1cXG4udG94IC50b3gtdXNlciB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuLnRveCAudG94LXVzZXJfX2F2YXRhciBzdmcge1xcbiAgZmlsbDogO1xcbn1cXG4udG94IC50b3gtdXNlcl9fbmFtZSB7XFxuICBjb2xvcjogO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtdXNlcl9fYXZhdGFyIHN2ZyB7XFxuICBtYXJnaW4tcmlnaHQ6IDhweDtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LXVzZXJfX2F2YXRhciArIC50b3gtdXNlcl9fbmFtZSB7XFxuICBtYXJnaW4tbGVmdDogOHB4O1xcbn1cXG4udG94W2Rpcj1ydGxdIC50b3gtdXNlcl9fYXZhdGFyIHN2ZyB7XFxuICBtYXJnaW4tbGVmdDogOHB4O1xcbn1cXG4udG94W2Rpcj1ydGxdIC50b3gtdXNlcl9fYXZhdGFyICsgLnRveC11c2VyX19uYW1lIHtcXG4gIG1hcmdpbi1yaWdodDogOHB4O1xcbn1cXG4udG94IC50b3gtZGlhbG9nLXdyYXAge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJvdHRvbTogMDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGxlZnQ6IDA7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICByaWdodDogMDtcXG4gIHRvcDogMDtcXG4gIHotaW5kZXg6IDExMDA7XFxufVxcbi50b3ggLnRveC1kaWFsb2ctd3JhcF9fYmFja2Ryb3Age1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg2MiwgNzMsIDE0OCwgMC4zKTtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMDtcXG4gIHRvcDogMDtcXG4gIHotaW5kZXg6IDE7XFxufVxcbi50b3ggLnRveC1kaWFsb2ctd3JhcF9fYmFja2Ryb3AtLW9wYXF1ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xcbn1cXG4udG94IC50b3gtZGlhbG9nIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXItY29sb3I6ICM3ZTdlN2U7XFxuICBib3JkZXItcmFkaXVzOiAwcHg7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxMnB4IHJnYmEoNjIsIDczLCAxNDgsIDAuMyk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIG1heC1oZWlnaHQ6IDEwMCU7XFxuICBtYXgtd2lkdGg6IDQ4MHB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiA5NXZ3O1xcbiAgei1pbmRleDogMjtcXG59XFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2N3B4KSB7XFxuICBib2R5Om5vdCgudG94LWZvcmNlLWRlc2t0b3ApIC50b3ggLnRveC1kaWFsb2cge1xcbiAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xcbiAgICBtYXJnaW46IDhweCBhdXRvO1xcbiAgICB3aWR0aDogY2FsYygxMDB2dyAtIDE2cHgpO1xcbiAgfVxcbn1cXG4udG94IC50b3gtZGlhbG9nLWlubGluZSB7XFxuICB6LWluZGV4OiAxMTAwO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19oZWFkZXIge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTVlNWU1O1xcbiAgY29sb3I6ICMwMDA7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZm9udC1mYW1pbHk6IFxcXCJjb2RlX3Byb19ib2xkXFxcIiwgXFxcIkhlbHZldGljYSBOZXVlXFxcIiwgXFxcIkhlbHZldGljYVxcXCIsIFxcXCJBcmlhbFxcXCIsIHNhbnMtc2VyaWY7XFxuICBmb250LXNpemU6IDI0cHg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICBwYWRkaW5nOiAxNXB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19oZWFkZXIgLnRveC1idXR0b24ge1xcbiAgei1pbmRleDogMTtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fZHJhZ2hhbmRsZSB7XFxuICBjdXJzb3I6IGdyYWI7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBsZWZ0OiAwO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2RyYWdoYW5kbGU6YWN0aXZlIHtcXG4gIGN1cnNvcjogZ3JhYmJpbmc7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2Rpc21pc3Mge1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX3RpdGxlIHtcXG4gIGZvbnQtZmFtaWx5OiBcXFwiY29kZV9wcm9fYm9sZFxcXCIsIFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsIFxcXCJIZWx2ZXRpY2FcXFwiLCBcXFwiQXJpYWxcXFwiLCBzYW5zLXNlcmlmO1xcbiAgZm9udC1zaXplOiAyNHB4O1xcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XFxuICBtYXJnaW46IDA7XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keSB7XFxuICBjb2xvcjogIzAwMDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4OiAxO1xcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICBmb250LXNpemU6IDE2cHg7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbiAgbGluZS1oZWlnaHQ6IDEuMztcXG4gIG1pbi13aWR0aDogMDtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG59XFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2N3B4KSB7XFxuICBib2R5Om5vdCgudG94LWZvcmNlLWRlc2t0b3ApIC50b3ggLnRveC1kaWFsb2dfX2JvZHkge1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgfVxcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LW5hdiB7XFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgcGFkZGluZzogMjBweDtcXG59XFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2N3B4KSB7XFxuICBib2R5Om5vdCgudG94LWZvcmNlLWRlc2t0b3ApIC50b3ggLnRveC1kaWFsb2dfX2JvZHktbmF2IHtcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcXG4gIH1cXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1uYXYtaXRlbSB7XFxuICBib3JkZXItYm90dG9tOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBjb2xvcjogIzAwMDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGxpbmUtaGVpZ2h0OiAxLjM7XFxuICBtYXJnaW4tYm90dG9tOiA4cHg7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LW5hdi1pdGVtOmZvY3VzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoNjIsIDczLCAxNDgsIDAuMSk7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktbmF2LWl0ZW0tLWFjdGl2ZSB7XFxuICBib3JkZXItYm90dG9tOiAycHggc29saWQgIzNlNDk5NDtcXG4gIGNvbG9yOiAjM2U0OTk0O1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4OiAxO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgbWF4LWhlaWdodDogNjUwcHg7XFxuICBvdmVyZmxvdzogYXV0bztcXG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcXG4gIHBhZGRpbmc6IDIwcHg7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCA+ICoge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIG1hcmdpbi10b3A6IDE2cHg7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCA+ICo6Zmlyc3QtY2hpbGQge1xcbiAgbWFyZ2luLXRvcDogMDtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50ID4gKjpsYXN0LWNoaWxkIHtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCA+ICo6b25seS1jaGlsZCB7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgbWFyZ2luLXRvcDogMDtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IGEge1xcbiAgY29sb3I6ICMzZTQ5OTQ7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCBhOmhvdmVyLFxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCBhOmZvY3VzIHtcXG4gIGNvbG9yOiAjMmYzNzcwO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgYTphY3RpdmUge1xcbiAgY29sb3I6ICMyZjM3NzA7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCBzdmcge1xcbiAgZmlsbDogIzAwMDtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IHVsIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgbGlzdC1zdHlsZS10eXBlOiBkaXNjO1xcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcXG4gIC13ZWJraXQtbWFyZ2luLWVuZDogMDtcXG4gIG1hcmdpbi1pbmxpbmUtZW5kOiAwO1xcbiAgLXdlYmtpdC1tYXJnaW4tc3RhcnQ6IDA7XFxuICBtYXJnaW4taW5saW5lLXN0YXJ0OiAwO1xcbiAgLXdlYmtpdC1wYWRkaW5nLXN0YXJ0OiAyLjVyZW07XFxuICBwYWRkaW5nLWlubGluZS1zdGFydDogMi41cmVtO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLnRveC1mb3JtX19ncm91cCBoMSB7XFxuICBjb2xvcjogIzAwMDtcXG4gIGZvbnQtc2l6ZTogMjBweDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcXG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XFxuICBtYXJnaW4tdG9wOiAycmVtO1xcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAudG94LWZvcm1fX2dyb3VwIGgyIHtcXG4gIGNvbG9yOiAjMDAwO1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcXG4gIG1hcmdpbi10b3A6IDJyZW07XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC50b3gtZm9ybV9fZ3JvdXAgcCB7XFxuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLnRveC1mb3JtX19ncm91cCBoMTpmaXJzdC1jaGlsZCxcXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLnRveC1mb3JtX19ncm91cCBoMjpmaXJzdC1jaGlsZCxcXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLnRveC1mb3JtX19ncm91cCBwOmZpcnN0LWNoaWxkIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAudG94LWZvcm1fX2dyb3VwIGgxOmxhc3QtY2hpbGQsXFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC50b3gtZm9ybV9fZ3JvdXAgaDI6bGFzdC1jaGlsZCxcXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLnRveC1mb3JtX19ncm91cCBwOmxhc3QtY2hpbGQge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IC50b3gtZm9ybV9fZ3JvdXAgaDE6b25seS1jaGlsZCxcXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQgLnRveC1mb3JtX19ncm91cCBoMjpvbmx5LWNoaWxkLFxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAudG94LWZvcm1fX2dyb3VwIHA6b25seS1jaGlsZCB7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgbWFyZ2luLXRvcDogMDtcXG59XFxuLnRveCAudG94LWRpYWxvZy0td2lkdGgtbGcge1xcbiAgaGVpZ2h0OiA2NTBweDtcXG4gIG1heC13aWR0aDogMTIwMHB4O1xcbn1cXG4udG94IC50b3gtZGlhbG9nLS13aWR0aC1tZCB7XFxuICBtYXgtd2lkdGg6IDgwMHB4O1xcbn1cXG4udG94IC50b3gtZGlhbG9nLS13aWR0aC1tZCAudG94LWRpYWxvZ19fYm9keS1jb250ZW50IHtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWNvbnRlbnQtLWNlbnRlcmVkIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fZm9vdGVyIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgI2U1ZTVlNTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICBwYWRkaW5nOiAyMHB4O1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19mb290ZXItc3RhcnQsXFxuLnRveCAudG94LWRpYWxvZ19fZm9vdGVyLWVuZCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19idXN5LXNwaW5uZXIge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjUwLCAyNTAsIDI1MCwgMC43NSk7XFxuICBib3R0b206IDA7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBsZWZ0OiAwO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDA7XFxuICB0b3A6IDA7XFxuICB6LWluZGV4OiAzO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX190YWJsZSB7XFxuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX3RhYmxlIHRoZWFkIHRoIHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgcGFkZGluZy1ib3R0b206IDhweDtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fdGFibGUgdGJvZHkgdHIge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM3ZTdlN2U7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX3RhYmxlIHRib2R5IHRyOmxhc3QtY2hpbGQge1xcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcXG59XFxuLnRveCAudG94LWRpYWxvZ19fdGFibGUgdGQge1xcbiAgcGFkZGluZy1ib3R0b206IDhweDtcXG4gIHBhZGRpbmctdG9wOiA4cHg7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX3BvcHVwcyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMTAwJTtcXG4gIHotaW5kZXg6IDExMDA7XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktaWZyYW1lIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4OiAxO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWlmcmFtZSAudG94LW5hdm9iaiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleDogMTtcXG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19ib2R5LWlmcmFtZSAudG94LW5hdm9iaiA6bnRoLWNoaWxkKDIpIHtcXG4gIGZsZXg6IDE7XFxuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogYXV0bztcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLnRveCAudG94LWRpYWxvZy1kb2NrLWZhZGVvdXQge1xcbiAgb3BhY2l0eTogMDtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuLnRveCAudG94LWRpYWxvZy1kb2NrLWZhZGVpbiB7XFxuICBvcGFjaXR5OiAxO1xcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcXG59XFxuLnRveCAudG94LWRpYWxvZy1kb2NrLXRyYW5zaXRpb24ge1xcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwcyBsaW5lYXIgMC4zcywgb3BhY2l0eSAwLjNzIGVhc2U7XFxufVxcbi50b3ggLnRveC1kaWFsb2ctZG9jay10cmFuc2l0aW9uLnRveC1kaWFsb2ctZG9jay1mYWRlaW4ge1xcbiAgdHJhbnNpdGlvbi1kZWxheTogMHM7XFxufVxcbi50b3gudG94LXBsYXRmb3JtLWllIHtcXG4gIC8qIElFMTEgQ1NTIHN0eWxlcyBnbyBoZXJlICovXFxufVxcbi50b3gudG94LXBsYXRmb3JtLWllIC50b3gtZGlhbG9nLXdyYXAge1xcbiAgcG9zaXRpb246IC1tcy1kZXZpY2UtZml4ZWQ7XFxufVxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjdweCkge1xcbiAgYm9keTpub3QoLnRveC1mb3JjZS1kZXNrdG9wKSAudG94Om5vdChbZGlyPXJ0bF0pIC50b3gtZGlhbG9nX19ib2R5LW5hdiB7XFxuICAgIG1hcmdpbi1yaWdodDogMDtcXG4gIH1cXG59XFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2N3B4KSB7XFxuICBib2R5Om5vdCgudG94LWZvcmNlLWRlc2t0b3ApIC50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1kaWFsb2dfX2JvZHktbmF2LWl0ZW06bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICBtYXJnaW4tbGVmdDogOHB4O1xcbiAgfVxcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtZGlhbG9nX19mb290ZXIgLnRveC1kaWFsb2dfX2Zvb3Rlci1zdGFydCA+ICosXFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LWRpYWxvZ19fZm9vdGVyIC50b3gtZGlhbG9nX19mb290ZXItZW5kID4gKiB7XFxuICBtYXJnaW4tbGVmdDogOHB4O1xcbn1cXG4udG94W2Rpcj1ydGxdIC50b3gtZGlhbG9nX19ib2R5IHtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbn1cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY3cHgpIHtcXG4gIGJvZHk6bm90KC50b3gtZm9yY2UtZGVza3RvcCkgLnRveFtkaXI9cnRsXSAudG94LWRpYWxvZ19fYm9keS1uYXYge1xcbiAgICBtYXJnaW4tbGVmdDogMDtcXG4gIH1cXG59XFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2N3B4KSB7XFxuICBib2R5Om5vdCgudG94LWZvcmNlLWRlc2t0b3ApIC50b3hbZGlyPXJ0bF0gLnRveC1kaWFsb2dfX2JvZHktbmF2LWl0ZW06bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDhweDtcXG4gIH1cXG59XFxuLnRveFtkaXI9cnRsXSAudG94LWRpYWxvZ19fZm9vdGVyIC50b3gtZGlhbG9nX19mb290ZXItc3RhcnQgPiAqLFxcbi50b3hbZGlyPXJ0bF0gLnRveC1kaWFsb2dfX2Zvb3RlciAudG94LWRpYWxvZ19fZm9vdGVyLWVuZCA+ICoge1xcbiAgbWFyZ2luLXJpZ2h0OiA4cHg7XFxufVxcbmJvZHkudG94LWRpYWxvZ19fZGlzYWJsZS1zY3JvbGwge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLnRveCAudG94LWRyb3B6b25lLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleDogMTtcXG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbn1cXG4udG94IC50b3gtZHJvcHpvbmUge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxuICBib3JkZXI6IDJweCBkYXNoZWQgIzdlN2U3ZTtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGZsZXgtZ3JvdzogMTtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgbWluLWhlaWdodDogMTAwcHg7XFxuICBwYWRkaW5nOiAxMHB4O1xcbn1cXG4udG94IC50b3gtZHJvcHpvbmUgcCB7XFxuICBjb2xvcjogO1xcbiAgbWFyZ2luOiAwIDAgMTZweCAwO1xcbn1cXG4udG94IC50b3gtZWRpdC1hcmVhIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4OiAxO1xcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4udG94IC50b3gtZWRpdC1hcmVhX19pZnJhbWUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlcjogMDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBmbGV4OiAxO1xcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLnRveC50b3gtaW5saW5lLWVkaXQtYXJlYSB7XFxuICBib3JkZXI6IDFweCBkb3R0ZWQgIzdlN2U3ZTtcXG59XFxuLnRveCAudG94LWVkaXRvci1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXg6IDEgMSBhdXRvO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi50b3ggLnRveC1lZGl0b3ItaGVhZGVyIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjN2U3ZTdlO1xcbiAgei1pbmRleDogMTtcXG59XFxuLnRveDpub3QoLnRveC10aW55bWNlLWlubGluZSkgLnRveC1lZGl0b3ItaGVhZGVyIHtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuNXM7XFxufVxcbi50b3gudG94LXRpbnltY2UtLXRvb2xiYXItYm90dG9tIC50b3gtZWRpdG9yLWhlYWRlcixcXG4udG94LnRveC10aW55bWNlLWlubGluZSAudG94LWVkaXRvci1oZWFkZXIge1xcbiAgbWFyZ2luLWJvdHRvbTogLTFweDtcXG59XFxuLnRveC50b3gtdGlueW1jZS0tdG9vbGJhci1zdGlja3ktb24gLnRveC1lZGl0b3ItaGVhZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm94LXNoYWRvdzogMCA0cHggNHB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjI1KTtcXG59XFxuLnRveC1lZGl0b3ItZG9jay1mYWRlb3V0IHtcXG4gIG9wYWNpdHk6IDA7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxufVxcbi50b3gtZWRpdG9yLWRvY2stZmFkZWluIHtcXG4gIG9wYWNpdHk6IDE7XFxuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xcbn1cXG4udG94LWVkaXRvci1kb2NrLXRyYW5zaXRpb24ge1xcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwcyBsaW5lYXIgMC4yNXMsIG9wYWNpdHkgMC4yNXMgZWFzZTtcXG59XFxuLnRveC1lZGl0b3ItZG9jay10cmFuc2l0aW9uLnRveC1lZGl0b3ItZG9jay1mYWRlaW4ge1xcbiAgdHJhbnNpdGlvbi1kZWxheTogMHM7XFxufVxcbi50b3ggLnRveC1jb250cm9sLXdyYXAge1xcbiAgZmxleDogMTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnRveCAudG94LWNvbnRyb2wtd3JhcDpub3QoLnRveC1jb250cm9sLXdyYXAtLXN0YXR1cy1pbnZhbGlkKSAudG94LWNvbnRyb2wtd3JhcF9fc3RhdHVzLWljb24taW52YWxpZCxcXG4udG94IC50b3gtY29udHJvbC13cmFwOm5vdCgudG94LWNvbnRyb2wtd3JhcC0tc3RhdHVzLXVua25vd24pIC50b3gtY29udHJvbC13cmFwX19zdGF0dXMtaWNvbi11bmtub3duLFxcbi50b3ggLnRveC1jb250cm9sLXdyYXA6bm90KC50b3gtY29udHJvbC13cmFwLS1zdGF0dXMtdmFsaWQpIC50b3gtY29udHJvbC13cmFwX19zdGF0dXMtaWNvbi12YWxpZCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4udG94IC50b3gtY29udHJvbC13cmFwIHN2ZyB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuLnRveCAudG94LWNvbnRyb2wtd3JhcF9fc3RhdHVzLWljb24td3JhcCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDUwJTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcXG59XFxuLnRveCAudG94LWNvbnRyb2wtd3JhcF9fc3RhdHVzLWljb24taW52YWxpZCBzdmcge1xcbiAgZmlsbDogI2I2NDEzNTtcXG59XFxuLnRveCAudG94LWNvbnRyb2wtd3JhcF9fc3RhdHVzLWljb24tdW5rbm93biBzdmcge1xcbiAgZmlsbDogb3JhbmdlO1xcbn1cXG4udG94IC50b3gtY29udHJvbC13cmFwX19zdGF0dXMtaWNvbi12YWxpZCBzdmcge1xcbiAgZmlsbDogZ3JlZW47XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1jb250cm9sLXdyYXAtLXN0YXR1cy1pbnZhbGlkIC50b3gtdGV4dGZpZWxkLFxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1jb250cm9sLXdyYXAtLXN0YXR1cy11bmtub3duIC50b3gtdGV4dGZpZWxkLFxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1jb250cm9sLXdyYXAtLXN0YXR1cy12YWxpZCAudG94LXRleHRmaWVsZCB7XFxuICBwYWRkaW5nLXJpZ2h0OiAzMnB4O1xcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtY29udHJvbC13cmFwX19zdGF0dXMtaWNvbi13cmFwIHtcXG4gIHJpZ2h0OiA0cHg7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1jb250cm9sLXdyYXAtLXN0YXR1cy1pbnZhbGlkIC50b3gtdGV4dGZpZWxkLFxcbi50b3hbZGlyPXJ0bF0gLnRveC1jb250cm9sLXdyYXAtLXN0YXR1cy11bmtub3duIC50b3gtdGV4dGZpZWxkLFxcbi50b3hbZGlyPXJ0bF0gLnRveC1jb250cm9sLXdyYXAtLXN0YXR1cy12YWxpZCAudG94LXRleHRmaWVsZCB7XFxuICBwYWRkaW5nLWxlZnQ6IDMycHg7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1jb250cm9sLXdyYXBfX3N0YXR1cy1pY29uLXdyYXAge1xcbiAgbGVmdDogNHB4O1xcbn1cXG4udG94IC50b3gtYXV0b2NvbXBsZXRlciB7XFxuICBtYXgtd2lkdGg6IDI1ZW07XFxufVxcbi50b3ggLnRveC1hdXRvY29tcGxldGVyIC50b3gtbWVudSB7XFxuICBtYXgtd2lkdGg6IDI1ZW07XFxufVxcbi50b3ggLnRveC1hdXRvY29tcGxldGVyIC50b3gtYXV0b2NvbXBsZXRlci1oaWdobGlnaHQge1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxufVxcbi50b3ggLnRveC1jb2xvci1pbnB1dCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgei1pbmRleDogMTtcXG59XFxuLnRveCAudG94LWNvbG9yLWlucHV0IC50b3gtdGV4dGZpZWxkIHtcXG4gIHotaW5kZXg6IC0xO1xcbn1cXG4udG94IC50b3gtY29sb3ItaW5wdXQgc3BhbiB7XFxuICBib3JkZXItY29sb3I6IHJnYmEoMzQsIDQ3LCA2MiwgMC4yKTtcXG4gIGJvcmRlci1yYWRpdXM6IDBweDtcXG4gIGJvcmRlci1zdHlsZTogc29saWQ7XFxuICBib3JkZXItd2lkdGg6IDFweDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgaGVpZ2h0OiAyNHB4O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiA2cHg7XFxuICB3aWR0aDogMjRweDtcXG59XFxuLnRveCAudG94LWNvbG9yLWlucHV0IHNwYW46aG92ZXI6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSxcXG4udG94IC50b3gtY29sb3ItaW5wdXQgc3Bhbjpmb2N1czpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pIHtcXG4gIGJvcmRlci1jb2xvcjogIzNlNDk5NDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnRveCAudG94LWNvbG9yLWlucHV0IHNwYW46OmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMCwgMCwgMCwgMC4yNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUpLCBsaW5lYXItZ3JhZGllbnQoLTQ1ZGVnLCByZ2JhKDAsIDAsIDAsIDAuMjUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlKSwgbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCB0cmFuc3BhcmVudCA3NSUsIHJnYmEoMCwgMCwgMCwgMC4yNSkgNzUlKSwgbGluZWFyLWdyYWRpZW50KC00NWRlZywgdHJhbnNwYXJlbnQgNzUlLCByZ2JhKDAsIDAsIDAsIDAuMjUpIDc1JSk7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDAsIDAgNnB4LCA2cHggLTZweCwgLTZweCAwO1xcbiAgYmFja2dyb3VuZC1zaXplOiAxMnB4IDEycHg7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZmFmYWZhO1xcbiAgYm9yZGVyLXJhZGl1czogMHB4O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgaGVpZ2h0OiAyNHB4O1xcbiAgbGVmdDogLTFweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogLTFweDtcXG4gIHdpZHRoOiAyNHB4O1xcbiAgei1pbmRleDogLTE7XFxufVxcbi50b3ggLnRveC1jb2xvci1pbnB1dCBzcGFuW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0ge1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LWNvbG9yLWlucHV0IHtcXG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1kZXNjZW5kaW5nLXNwZWNpZmljaXR5ICovXFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1jb2xvci1pbnB1dCAudG94LXRleHRmaWVsZCB7XFxuICBwYWRkaW5nLWxlZnQ6IDM2cHg7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1jb2xvci1pbnB1dCBzcGFuIHtcXG4gIGxlZnQ6IDZweDtcXG59XFxuLnRveFtkaXI9XFxcInJ0bFxcXCJdIC50b3gtY29sb3ItaW5wdXQge1xcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWRlc2NlbmRpbmctc3BlY2lmaWNpdHkgKi9cXG59XFxuLnRveFtkaXI9XFxcInJ0bFxcXCJdIC50b3gtY29sb3ItaW5wdXQgLnRveC10ZXh0ZmllbGQge1xcbiAgcGFkZGluZy1yaWdodDogMzZweDtcXG59XFxuLnRveFtkaXI9XFxcInJ0bFxcXCJdIC50b3gtY29sb3ItaW5wdXQgc3BhbiB7XFxuICByaWdodDogNnB4O1xcbn1cXG4udG94IC50b3gtbGFiZWwsXFxuLnRveCAudG94LXRvb2xiYXItbGFiZWwge1xcbiAgY29sb3I6IDtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjY7XFxuICBwYWRkaW5nOiAwIDhweCAwIDA7XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxufVxcbi50b3ggLnRveC10b29sYmFyLWxhYmVsIHtcXG4gIHBhZGRpbmc6IDAgOHB4O1xcbn1cXG4udG94W2Rpcj1ydGxdIC50b3gtbGFiZWwge1xcbiAgcGFkZGluZzogMCAwIDAgOHB4O1xcbn1cXG4udG94IC50b3gtZm9ybSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleDogMTtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogYXV0bztcXG59XFxuLnRveCAudG94LWZvcm1fX2dyb3VwIHtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBtYXJnaW4tYm90dG9tOiAyNHB4O1xcbn1cXG4udG94IC50b3gtZm9ybS1ncm91cC0tbWF4aW1pemUge1xcbiAgZmxleDogMTtcXG59XFxuLnRveCAudG94LWZvcm1fX2dyb3VwLS1lcnJvciB7XFxuICBjb2xvcjogI2I2NDEzNTtcXG59XFxuLnRveCAudG94LWZvcm1fX2dyb3VwLS1jb2xsZWN0aW9uIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcbi50b3ggLnRveC1mb3JtX19ncmlkIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbn1cXG4udG94IC50b3gtZm9ybV9fZ3JpZC0tMmNvbCA+IC50b3gtZm9ybV9fZ3JvdXAge1xcbiAgd2lkdGg6IGNhbGMoNTAlIC0gKDhweCAvIDIpKTtcXG59XFxuLnRveCAudG94LWZvcm1fX2dyaWQtLTNjb2wgPiAudG94LWZvcm1fX2dyb3VwIHtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgLyAzIC0gKDhweCAvIDIpKTtcXG59XFxuLnRveCAudG94LWZvcm1fX2dyaWQtLTRjb2wgPiAudG94LWZvcm1fX2dyb3VwIHtcXG4gIHdpZHRoOiBjYWxjKDI1JSAtICg4cHggLyAyKSk7XFxufVxcbi50b3ggLnRveC1mb3JtX19jb250cm9scy1oLXN0YWNrIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG4udG94IC50b3gtZm9ybV9fZ3JvdXAtLWlubGluZSB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuLnRveCAudG94LWZvcm1fX2dyb3VwLS1zdHJldGNoZWQge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXg6IDE7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxufVxcbi50b3ggLnRveC1mb3JtX19ncm91cC0tc3RyZXRjaGVkIC50b3gtdGV4dGFyZWEge1xcbiAgZmxleDogMTtcXG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbn1cXG4udG94IC50b3gtZm9ybV9fZ3JvdXAtLXN0cmV0Y2hlZCAudG94LW5hdm9iaiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleDogMTtcXG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbn1cXG4udG94IC50b3gtZm9ybV9fZ3JvdXAtLXN0cmV0Y2hlZCAudG94LW5hdm9iaiA6bnRoLWNoaWxkKDIpIHtcXG4gIGZsZXg6IDE7XFxuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogYXV0bztcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LWZvcm1fX2NvbnRyb2xzLWgtc3RhY2sgPiAqOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi1sZWZ0OiA0cHg7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1mb3JtX19jb250cm9scy1oLXN0YWNrID4gKjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICBtYXJnaW4tcmlnaHQ6IDRweDtcXG59XFxuLnRveCAudG94LWxvY2sudG94LWxvY2tlZCAudG94LWxvY2staWNvbl9fdW5sb2NrLFxcbi50b3ggLnRveC1sb2NrOm5vdCgudG94LWxvY2tlZCkgLnRveC1sb2NrLWljb25fX2xvY2sge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnRveCAudG94LXRleHRmaWVsZCxcXG4udG94IC50b3gtdG9vbGJhci10ZXh0ZmllbGQsXFxuLnRveCAudG94LWxpc3Rib3hmaWVsZCAudG94LWxpc3Rib3gtLXNlbGVjdCxcXG4udG94IC50b3gtdGV4dGFyZWEge1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xcbiAgYXBwZWFyYW5jZTogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XFxuICBib3JkZXItY29sb3I6ICM3ZTdlN2U7XFxuICBib3JkZXItcmFkaXVzOiAwcHg7XFxuICBib3JkZXItc3R5bGU6IHNvbGlkO1xcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGNvbG9yOiAjMDAwO1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XFxuICBtYXJnaW46IDA7XFxuICBtaW4taGVpZ2h0OiA0OHB4O1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIHBhZGRpbmc6IDAgMCAwIDEycHg7XFxuICByZXNpemU6IG5vbmU7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLnRveCAudG94LXRleHRmaWVsZFtkaXNhYmxlZF0sXFxuLnRveCAudG94LXRleHRhcmVhW2Rpc2FibGVkXSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWRlZGVkO1xcbiAgY29sb3I6IHJnYmEoMzQsIDQ3LCA2MiwgMC44NSk7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbn1cXG4udG94IC50b3gtdGV4dGZpZWxkOmZvY3VzLFxcbi50b3ggLnRveC1saXN0Ym94ZmllbGQgLnRveC1saXN0Ym94LS1zZWxlY3Q6Zm9jdXMsXFxuLnRveCAudG94LXRleHRhcmVhOmZvY3VzIHtcXG4gIGJvcmRlci1jb2xvcjogIzFlMWUxZTtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxuICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggIzFlMWUxZTtcXG4gIG91dGxpbmU6IDNweCBzb2xpZCAjZmQwO1xcbiAgb3V0bGluZS1vZmZzZXQ6IDA7XFxufVxcbi50b3ggLnRveC10b29sYmFyLXRleHRmaWVsZCB7XFxuICBib3JkZXItd2lkdGg6IDA7XFxuICBtYXJnaW4tYm90dG9tOiAzcHg7XFxuICBtYXJnaW4tdG9wOiAycHg7XFxuICBtYXgtd2lkdGg6IDI1MHB4O1xcbn1cXG4udG94IC50b3gtbmFrZWQtYnRuIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiAwO1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJveC1zaGFkb3c6IHVuc2V0O1xcbiAgY29sb3I6ICMzZTQ5OTQ7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcbi50b3ggLnRveC1uYWtlZC1idG4gc3ZnIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgZmlsbDogIzAwMDtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LXRvb2xiYXItdGV4dGZpZWxkICsgKiB7XFxuICBtYXJnaW4tbGVmdDogNHB4O1xcbn1cXG4udG94W2Rpcj1ydGxdIC50b3gtdG9vbGJhci10ZXh0ZmllbGQgKyAqIHtcXG4gIG1hcmdpbi1yaWdodDogNHB4O1xcbn1cXG4udG94IC50b3gtbGlzdGJveGZpZWxkIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnRveCAudG94LWxpc3Rib3hmaWVsZCAudG94LWxpc3Rib3gtLXNlbGVjdFtkaXNhYmxlZF0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VkZWRlZDtcXG4gIGNvbG9yOiByZ2JhKDM0LCA0NywgNjIsIDAuODUpO1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuLnRveCAudG94LWxpc3Rib3hfX3NlbGVjdC1sYWJlbCB7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBmbGV4OiAxO1xcbiAgbWFyZ2luOiAwIDRweDtcXG59XFxuLnRveCAudG94LWxpc3Rib3hfX3NlbGVjdC1jaGV2cm9uIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICB3aWR0aDogMTZweDtcXG59XFxuLnRveCAudG94LWxpc3Rib3hfX3NlbGVjdC1jaGV2cm9uIHN2ZyB7XFxuICBmaWxsOiAjMDAwO1xcbn1cXG4udG94IC50b3gtbGlzdGJveGZpZWxkIC50b3gtbGlzdGJveC0tc2VsZWN0IHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtbGlzdGJveGZpZWxkIHN2ZyB7XFxuICByaWdodDogOHB4O1xcbn1cXG4udG94W2Rpcj1ydGxdIC50b3gtbGlzdGJveGZpZWxkIHN2ZyB7XFxuICBsZWZ0OiA4cHg7XFxufVxcbi50b3ggLnRveC1zZWxlY3RmaWVsZCB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi50b3ggLnRveC1zZWxlY3RmaWVsZCBzZWxlY3Qge1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xcbiAgYXBwZWFyYW5jZTogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XFxuICBib3JkZXItY29sb3I6ICM3ZTdlN2U7XFxuICBib3JkZXItcmFkaXVzOiAwcHg7XFxuICBib3JkZXItc3R5bGU6IHNvbGlkO1xcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGNvbG9yOiAjMDAwO1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XFxuICBtYXJnaW46IDA7XFxuICBtaW4taGVpZ2h0OiAzNHB4O1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIHBhZGRpbmc6IDVweCA0cHg7XFxuICByZXNpemU6IG5vbmU7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLnRveCAudG94LXNlbGVjdGZpZWxkIHNlbGVjdFtkaXNhYmxlZF0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VkZWRlZDtcXG4gIGNvbG9yOiByZ2JhKDM0LCA0NywgNjIsIDAuODUpO1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuLnRveCAudG94LXNlbGVjdGZpZWxkIHNlbGVjdDo6LW1zLWV4cGFuZCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4udG94IC50b3gtc2VsZWN0ZmllbGQgc2VsZWN0OmZvY3VzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XFxuICBib3JkZXItY29sb3I6ICMzZTQ5OTQ7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuLnRveCAudG94LXNlbGVjdGZpZWxkIHN2ZyB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogNTAlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtc2VsZWN0ZmllbGQgc2VsZWN0W3NpemU9XFxcIjBcXFwiXSxcXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtc2VsZWN0ZmllbGQgc2VsZWN0W3NpemU9XFxcIjFcXFwiXSB7XFxuICBwYWRkaW5nLXJpZ2h0OiAyNHB4O1xcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtc2VsZWN0ZmllbGQgc3ZnIHtcXG4gIHJpZ2h0OiA4cHg7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1zZWxlY3RmaWVsZCBzZWxlY3Rbc2l6ZT1cXFwiMFxcXCJdLFxcbi50b3hbZGlyPXJ0bF0gLnRveC1zZWxlY3RmaWVsZCBzZWxlY3Rbc2l6ZT1cXFwiMVxcXCJdIHtcXG4gIHBhZGRpbmctbGVmdDogMjRweDtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LXNlbGVjdGZpZWxkIHN2ZyB7XFxuICBsZWZ0OiA4cHg7XFxufVxcbi50b3ggLnRveC10ZXh0YXJlYSB7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRhcmVhO1xcbiAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0YXJlYTtcXG4gIGFwcGVhcmFuY2U6IHRleHRhcmVhO1xcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xcbn1cXG4udG94LWZ1bGxzY3JlZW4ge1xcbiAgYm9yZGVyOiAwO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgbWFyZ2luOiAwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIC1tcy1zY3JvbGwtY2hhaW5pbmc6IG5vbmU7XFxuICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBub25lO1xcbiAgcGFkZGluZzogMDtcXG4gIHRvdWNoLWFjdGlvbjogcGluY2gtem9vbTtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4udG94LnRveC10aW55bWNlLnRveC1mdWxsc2NyZWVuIC50b3gtc3RhdHVzYmFyX19yZXNpemUtaGFuZGxlIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi50b3gudG94LXRpbnltY2UudG94LWZ1bGxzY3JlZW4sXFxuLnRveC1zaGFkb3dob3N0LnRveC1mdWxsc2NyZWVuIHtcXG4gIGxlZnQ6IDA7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB0b3A6IDA7XFxuICB6LWluZGV4OiAxMjAwO1xcbn1cXG4udG94LnRveC10aW55bWNlLnRveC1mdWxsc2NyZWVuIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG4udG94LWZ1bGxzY3JlZW4gLnRveC50b3gtdGlueW1jZS1hdXgsXFxuLnRveC1mdWxsc2NyZWVuIH4gLnRveC50b3gtdGlueW1jZS1hdXgge1xcbiAgei1pbmRleDogMTIwMTtcXG59XFxuLnRveCAudG94LWhlbHBfX21vcmUtbGluayB7XFxuICBsaXN0LXN0eWxlOiBub25lO1xcbiAgbWFyZ2luLXRvcDogMWVtO1xcbn1cXG4udG94IC50b3gtaW1hZ2UtdG9vbHMge1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcbi50b3ggLnRveC1pbWFnZS10b29sc19fdG9vbGJhciB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbn1cXG4udG94IC50b3gtaW1hZ2UtdG9vbHNfX2ltYWdlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2NjY7XFxuICBoZWlnaHQ6IDM4MHB4O1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLnRveCAudG94LWltYWdlLXRvb2xzX19pbWFnZSxcXG4udG94IC50b3gtaW1hZ2UtdG9vbHNfX2ltYWdlICsgLnRveC1pbWFnZS10b29sc19fdG9vbGJhciB7XFxuICBtYXJnaW4tdG9wOiA4cHg7XFxufVxcbi50b3ggLnRveC1pbWFnZS10b29sc19faW1hZ2UtYmcge1xcbiAgYmFja2dyb3VuZDogdXJsKGRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RkaERBQU1BSUFCQU16TXpQLy8veXdBQUFBQURBQU1BQUFDRm9RZnFZZWFiTnlETWtCUWI4MVVhdDg1bnhndVVBRUFPdz09KTtcXG59XFxuLnRveCAudG94LWltYWdlLXRvb2xzX190b29sYmFyID4gLnRveC1zcGFjZXIge1xcbiAgZmxleDogMTtcXG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbn1cXG4udG94IC50b3gtY3JvcHJlY3QtYmxvY2sge1xcbiAgYmFja2dyb3VuZDogYmxhY2s7XFxuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NTApO1xcbiAgb3BhY2l0eTogMC41O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgem9vbTogMTtcXG59XFxuLnRveCAudG94LWNyb3ByZWN0LWhhbmRsZSB7XFxuICBib3JkZXI6IDJweCBzb2xpZCB3aGl0ZTtcXG4gIGhlaWdodDogMjBweDtcXG4gIGxlZnQ6IDA7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICB3aWR0aDogMjBweDtcXG59XFxuLnRveCAudG94LWNyb3ByZWN0LWhhbmRsZS1tb3ZlIHtcXG4gIGJvcmRlcjogMDtcXG4gIGN1cnNvcjogbW92ZTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuLnRveCAudG94LWNyb3ByZWN0LWhhbmRsZS1udyB7XFxuICBib3JkZXItd2lkdGg6IDJweCAwIDAgMnB4O1xcbiAgY3Vyc29yOiBudy1yZXNpemU7XFxuICBsZWZ0OiAxMDBweDtcXG4gIG1hcmdpbjogLTJweCAwIDAgLTJweDtcXG4gIHRvcDogMTAwcHg7XFxufVxcbi50b3ggLnRveC1jcm9wcmVjdC1oYW5kbGUtbmUge1xcbiAgYm9yZGVyLXdpZHRoOiAycHggMnB4IDAgMDtcXG4gIGN1cnNvcjogbmUtcmVzaXplO1xcbiAgbGVmdDogMjAwcHg7XFxuICBtYXJnaW46IC0ycHggMCAwIC0yMHB4O1xcbiAgdG9wOiAxMDBweDtcXG59XFxuLnRveCAudG94LWNyb3ByZWN0LWhhbmRsZS1zdyB7XFxuICBib3JkZXItd2lkdGg6IDAgMCAycHggMnB4O1xcbiAgY3Vyc29yOiBzdy1yZXNpemU7XFxuICBsZWZ0OiAxMDBweDtcXG4gIG1hcmdpbjogLTIwcHggMnB4IDAgLTJweDtcXG4gIHRvcDogMjAwcHg7XFxufVxcbi50b3ggLnRveC1jcm9wcmVjdC1oYW5kbGUtc2Uge1xcbiAgYm9yZGVyLXdpZHRoOiAwIDJweCAycHggMDtcXG4gIGN1cnNvcjogc2UtcmVzaXplO1xcbiAgbGVmdDogMjAwcHg7XFxuICBtYXJnaW46IC0yMHB4IDAgMCAtMjBweDtcXG4gIHRvcDogMjAwcHg7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1pbWFnZS10b29sc19fdG9vbGJhciA+IC50b3gtc2xpZGVyOm5vdCg6Zmlyc3Qtb2YtdHlwZSkge1xcbiAgbWFyZ2luLWxlZnQ6IDhweDtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LWltYWdlLXRvb2xzX190b29sYmFyID4gLnRveC1idXR0b24gKyAudG94LXNsaWRlciB7XFxuICBtYXJnaW4tbGVmdDogMzJweDtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LWltYWdlLXRvb2xzX190b29sYmFyID4gLnRveC1zbGlkZXIgKyAudG94LWJ1dHRvbiB7XFxuICBtYXJnaW4tbGVmdDogMzJweDtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LWltYWdlLXRvb2xzX190b29sYmFyID4gLnRveC1zbGlkZXI6bm90KDpmaXJzdC1vZi10eXBlKSB7XFxuICBtYXJnaW4tcmlnaHQ6IDhweDtcXG59XFxuLnRveFtkaXI9cnRsXSAudG94LWltYWdlLXRvb2xzX190b29sYmFyID4gLnRveC1idXR0b24gKyAudG94LXNsaWRlciB7XFxuICBtYXJnaW4tcmlnaHQ6IDMycHg7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1pbWFnZS10b29sc19fdG9vbGJhciA+IC50b3gtc2xpZGVyICsgLnRveC1idXR0b24ge1xcbiAgbWFyZ2luLXJpZ2h0OiAzMnB4O1xcbn1cXG4udG94IC50b3gtaW5zZXJ0LXRhYmxlLXBpY2tlciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgd2lkdGg6IDE3MHB4O1xcbn1cXG4udG94IC50b3gtaW5zZXJ0LXRhYmxlLXBpY2tlciA+IGRpdiB7XFxuICBib3JkZXItY29sb3I6ICM3ZTdlN2U7XFxuICBib3JkZXItc3R5bGU6IHNvbGlkO1xcbiAgYm9yZGVyLXdpZHRoOiAwIDFweCAxcHggMDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBoZWlnaHQ6IDE3cHg7XFxuICB3aWR0aDogMTdweDtcXG59XFxuLnRveCAudG94LWNvbGxlY3Rpb24tLWxpc3QgLnRveC1jb2xsZWN0aW9uX19ncm91cCAudG94LWluc2VydC10YWJsZS1waWNrZXIge1xcbiAgbWFyZ2luOiAtNHB4IDA7XFxufVxcbi50b3ggLnRveC1pbnNlcnQtdGFibGUtcGlja2VyIC50b3gtaW5zZXJ0LXRhYmxlLXBpY2tlcl9fc2VsZWN0ZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg2MiwgNzMsIDE0OCwgMC41KTtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSg2MiwgNzMsIDE0OCwgMC41KTtcXG59XFxuLnRveCAudG94LWluc2VydC10YWJsZS1waWNrZXJfX2xhYmVsIHtcXG4gIGNvbG9yOiA7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBhZGRpbmc6IDRweDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIHtcXG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1kZXNjZW5kaW5nLXNwZWNpZmljaXR5ICovXFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1pbnNlcnQtdGFibGUtcGlja2VyID4gZGl2Om50aC1jaGlsZCgxMG4pIHtcXG4gIGJvcmRlci1yaWdodDogMDtcXG59XFxuLnRveFtkaXI9cnRsXSB7XFxuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZGVzY2VuZGluZy1zcGVjaWZpY2l0eSAqL1xcbn1cXG4udG94W2Rpcj1ydGxdIC50b3gtaW5zZXJ0LXRhYmxlLXBpY2tlciA+IGRpdjpudGgtY2hpbGQoMTBuKzEpIHtcXG4gIGJvcmRlci1yaWdodDogMDtcXG59XFxuLnRveCB7XFxuICAvKiBzdHlsZWxpbnQtZGlzYWJsZSAqL1xcbiAgLyogc3R5bGVsaW50LWVuYWJsZSAqL1xcbn1cXG4udG94IC50b3gtbWVudSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xcbiAgYm9yZGVyLXJhZGl1czogMHB4O1xcbiAgYm94LXNoYWRvdzogMCAwIDAgNnB4IHJnYmEoNjIsIDczLCAxNDgsIDAuMyk7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcXG4gIHotaW5kZXg6IDExNTA7XFxufVxcbi50b3ggLnRveC1tZW51LnRveC1jb2xsZWN0aW9uLnRveC1jb2xsZWN0aW9uLS1saXN0IHtcXG4gIHBhZGRpbmc6IDA7XFxufVxcbi50b3ggLnRveC1tZW51LnRveC1jb2xsZWN0aW9uLnRveC1jb2xsZWN0aW9uLS10b29sYmFyIHtcXG4gIHBhZGRpbmc6IDRweDtcXG59XFxuLnRveCAudG94LW1lbnUudG94LWNvbGxlY3Rpb24udG94LWNvbGxlY3Rpb24tLWdyaWQge1xcbiAgcGFkZGluZzogNHB4O1xcbn1cXG4udG94IC50b3gtbWVudV9fbGFiZWwgaDEsXFxuLnRveCAudG94LW1lbnVfX2xhYmVsIGgyLFxcbi50b3ggLnRveC1tZW51X19sYWJlbCBoMyxcXG4udG94IC50b3gtbWVudV9fbGFiZWwgaDQsXFxuLnRveCAudG94LW1lbnVfX2xhYmVsIGg1LFxcbi50b3ggLnRveC1tZW51X19sYWJlbCBoNixcXG4udG94IC50b3gtbWVudV9fbGFiZWwgcCxcXG4udG94IC50b3gtbWVudV9fbGFiZWwgYmxvY2txdW90ZSxcXG4udG94IC50b3gtbWVudV9fbGFiZWwgY29kZSB7XFxuICBtYXJnaW46IDA7XFxufVxcbi50b3ggLnRveC1tZW51YmFyIHtcXG4gIC8qIGJhY2tncm91bmQ6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgaGVpZ2h0PSczOXB4JyB2aWV3Qm94PScwIDAgNDAgMzlweCcgd2lkdGg9JzQwJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcmVjdCB4PScwJyB5PSczOHB4JyB3aWR0aD0nMTAwJyBoZWlnaHQ9JzEnIGZpbGw9JyUyMzdlN2U3ZScvJTNFJTNDL3N2ZyUzRVxcXCIpIGxlZnQgMCB0b3AgMCAjZmFmYWZhOyAqL1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4OiAwIDAgYXV0bztcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgcGFkZGluZzogMCA0cHggMCA0cHg7XFxufVxcbi50b3gudG94LXRpbnltY2U6bm90KC50b3gtdGlueW1jZS1pbmxpbmUpIC50b3gtZWRpdG9yLWhlYWRlcjpub3QoOmZpcnN0LWNoaWxkKSAudG94LW1lbnViYXIge1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICM3ZTdlN2U7XFxufVxcbi8qIERlcHJlY2F0ZWQuIFJlbW92ZSBpbiBuZXh0IG1ham9yIHJlbGVhc2UgKi9cXG4udG94IC50b3gtbWJ0biB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXI6IDA7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICMwMDA7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleDogMCAwIGF1dG87XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbiAgaGVpZ2h0OiAzNHB4O1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBtYXJnaW46IDJweCAwIDNweCAwO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwYWRkaW5nOiAwIDRweDtcXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xcbiAgd2lkdGg6IGF1dG87XFxufVxcbi50b3ggLnRveC1tYnRuW2Rpc2FibGVkXSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogcmdiYSgzNCwgNDcsIDYyLCAwLjUpO1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuLnRveCAudG94LW1idG46Zm9jdXM6bm90KDpkaXNhYmxlZCkge1xcbiAgYmFja2dyb3VuZDogI2RlZTBlMjtcXG4gIGJvcmRlcjogMDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogIzAwMDtcXG59XFxuLnRveCAudG94LW1idG4tLWFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kOiAjZGVlMGUyO1xcbiAgYm9yZGVyOiAwO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4udG94IC50b3gtbWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKTpub3QoLnRveC1tYnRuLS1hY3RpdmUpIHtcXG4gIGJhY2tncm91bmQ6ICNkZWUwZTI7XFxuICBib3JkZXI6IDA7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbi50b3ggLnRveC1tYnRuX19zZWxlY3QtbGFiZWwge1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG4gIG1hcmdpbjogMCA0cHg7XFxufVxcbi50b3ggLnRveC1tYnRuW2Rpc2FibGVkXSAudG94LW1idG5fX3NlbGVjdC1sYWJlbCB7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbn1cXG4udG94IC50b3gtbWJ0bl9fc2VsZWN0LWNoZXZyb24ge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIHdpZHRoOiAxNnB4O1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnRveCAudG94LW5vdGlmaWNhdGlvbiB7XFxuICBib3JkZXItcmFkaXVzOiAwcHg7XFxuICBib3JkZXItc3R5bGU6IHNvbGlkO1xcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGRpc3BsYXk6IC1tcy1ncmlkO1xcbiAgZGlzcGxheTogZ3JpZDtcXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XFxuICAtbXMtZ3JpZC1jb2x1bW5zOiBtaW5tYXgoNDBweCwgMWZyKSBhdXRvIG1pbm1heCg0MHB4LCAxZnIpO1xcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoNDBweCwgMWZyKSBhdXRvIG1pbm1heCg0MHB4LCAxZnIpO1xcbiAgbWFyZ2luLXRvcDogNHB4O1xcbiAgb3BhY2l0eTogMDtcXG4gIHBhZGRpbmc6IDRweDtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxMDBtcyBlYXNlLWluLCBvcGFjaXR5IDE1MG1zIGVhc2UtaW47XFxufVxcbi50b3ggLnRveC1ub3RpZmljYXRpb24gcCB7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbn1cXG4udG94IC50b3gtbm90aWZpY2F0aW9uIGEge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxufVxcbi50b3ggLnRveC1ub3RpZmljYXRpb24tLWluIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbi50b3ggLnRveC1ub3RpZmljYXRpb24tLXN1Y2Nlc3Mge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q0ZTVkYTtcXG4gIGJvcmRlci1jb2xvcjogI2JmZDhjODtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4udG94IC50b3gtbm90aWZpY2F0aW9uLS1zdWNjZXNzIHAge1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbi50b3ggLnRveC1ub3RpZmljYXRpb24tLXN1Y2Nlc3MgYSB7XFxuICBjb2xvcjogIzFkNTczMTtcXG59XFxuLnRveCAudG94LW5vdGlmaWNhdGlvbi0tc3VjY2VzcyBzdmcge1xcbiAgZmlsbDogIzAwMDtcXG59XFxuLnRveCAudG94LW5vdGlmaWNhdGlvbi0tZXJyb3Ige1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y2ZTZlNTtcXG4gIGJvcmRlci1jb2xvcjogI2VkZDBjZDtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4udG94IC50b3gtbm90aWZpY2F0aW9uLS1lcnJvciBwIHtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4udG94IC50b3gtbm90aWZpY2F0aW9uLS1lcnJvciBhIHtcXG4gIGNvbG9yOiAjYjY0MTM1O1xcbn1cXG4udG94IC50b3gtbm90aWZpY2F0aW9uLS1lcnJvciBzdmcge1xcbiAgZmlsbDogIzAwMDtcXG59XFxuLnRveCAudG94LW5vdGlmaWNhdGlvbi0td2FybixcXG4udG94IC50b3gtbm90aWZpY2F0aW9uLS13YXJuaW5nIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZhZWE7XFxuICBib3JkZXItY29sb3I6ICNmZmU4OWQ7XFxuICBjb2xvcjogIzAwMDtcXG59XFxuLnRveCAudG94LW5vdGlmaWNhdGlvbi0td2FybiBwLFxcbi50b3ggLnRveC1ub3RpZmljYXRpb24tLXdhcm5pbmcgcCB7XFxuICBjb2xvcjogIzAwMDtcXG59XFxuLnRveCAudG94LW5vdGlmaWNhdGlvbi0td2FybiBhLFxcbi50b3ggLnRveC1ub3RpZmljYXRpb24tLXdhcm5pbmcgYSB7XFxuICBjb2xvcjogIzAwMDtcXG59XFxuLnRveCAudG94LW5vdGlmaWNhdGlvbi0td2FybiBzdmcsXFxuLnRveCAudG94LW5vdGlmaWNhdGlvbi0td2FybmluZyBzdmcge1xcbiAgZmlsbDogIzAwMDtcXG59XFxuLnRveCAudG94LW5vdGlmaWNhdGlvbi0taW5mbyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDllZGY3O1xcbiAgYm9yZGVyLWNvbG9yOiAjNzc5ZWNiO1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbi50b3ggLnRveC1ub3RpZmljYXRpb24tLWluZm8gcCB7XFxuICBjb2xvcjogIzAwMDtcXG59XFxuLnRveCAudG94LW5vdGlmaWNhdGlvbi0taW5mbyBhIHtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4udG94IC50b3gtbm90aWZpY2F0aW9uLS1pbmZvIHN2ZyB7XFxuICBmaWxsOiAjMDAwO1xcbn1cXG4udG94IC50b3gtbm90aWZpY2F0aW9uX19ib2R5IHtcXG4gIC1tcy1ncmlkLXJvdy1hbGlnbjogY2VudGVyO1xcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xcbiAgY29sb3I6ICMwMDA7XFxuICAtbXMtZ3JpZC1jb2x1bW4tc3BhbjogMTtcXG4gIGdyaWQtY29sdW1uLWVuZDogMztcXG4gIC1tcy1ncmlkLWNvbHVtbjogMjtcXG4gIGdyaWQtY29sdW1uLXN0YXJ0OiAyO1xcbiAgLW1zLWdyaWQtcm93LXNwYW46IDE7XFxuICBncmlkLXJvdy1lbmQ6IDI7XFxuICAtbXMtZ3JpZC1yb3c6IDE7XFxuICBncmlkLXJvdy1zdGFydDogMTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XFxuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xcbn1cXG4udG94IC50b3gtbm90aWZpY2F0aW9uX19ib2R5ID4gKiB7XFxuICBtYXJnaW46IDA7XFxufVxcbi50b3ggLnRveC1ub3RpZmljYXRpb25fX2JvZHkgPiAqICsgKiB7XFxuICBtYXJnaW4tdG9wOiAxcmVtO1xcbn1cXG4udG94IC50b3gtbm90aWZpY2F0aW9uX19pY29uIHtcXG4gIC1tcy1ncmlkLXJvdy1hbGlnbjogY2VudGVyO1xcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xcbiAgLW1zLWdyaWQtY29sdW1uLXNwYW46IDE7XFxuICBncmlkLWNvbHVtbi1lbmQ6IDI7XFxuICAtbXMtZ3JpZC1jb2x1bW46IDE7XFxuICBncmlkLWNvbHVtbi1zdGFydDogMTtcXG4gIC1tcy1ncmlkLXJvdy1zcGFuOiAxO1xcbiAgZ3JpZC1yb3ctZW5kOiAyO1xcbiAgLW1zLWdyaWQtcm93OiAxO1xcbiAgZ3JpZC1yb3ctc3RhcnQ6IDE7XFxuICAtbXMtZ3JpZC1jb2x1bW4tYWxpZ246IGVuZDtcXG4gIGp1c3RpZnktc2VsZjogZW5kO1xcbn1cXG4udG94IC50b3gtbm90aWZpY2F0aW9uX19pY29uIHN2ZyB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuLnRveCAudG94LW5vdGlmaWNhdGlvbl9fZGlzbWlzcyB7XFxuICAtbXMtZ3JpZC1yb3ctYWxpZ246IHN0YXJ0O1xcbiAgYWxpZ24tc2VsZjogc3RhcnQ7XFxuICAtbXMtZ3JpZC1jb2x1bW4tc3BhbjogMTtcXG4gIGdyaWQtY29sdW1uLWVuZDogNDtcXG4gIC1tcy1ncmlkLWNvbHVtbjogMztcXG4gIGdyaWQtY29sdW1uLXN0YXJ0OiAzO1xcbiAgLW1zLWdyaWQtcm93LXNwYW46IDE7XFxuICBncmlkLXJvdy1lbmQ6IDI7XFxuICAtbXMtZ3JpZC1yb3c6IDE7XFxuICBncmlkLXJvdy1zdGFydDogMTtcXG4gIC1tcy1ncmlkLWNvbHVtbi1hbGlnbjogZW5kO1xcbiAganVzdGlmeS1zZWxmOiBlbmQ7XFxufVxcbi50b3ggLnRveC1ub3RpZmljYXRpb24gLnRveC1wcm9ncmVzcy1iYXIge1xcbiAgLW1zLWdyaWQtY29sdW1uLXNwYW46IDM7XFxuICBncmlkLWNvbHVtbi1lbmQ6IDQ7XFxuICAtbXMtZ3JpZC1jb2x1bW46IDE7XFxuICBncmlkLWNvbHVtbi1zdGFydDogMTtcXG4gIC1tcy1ncmlkLXJvdy1zcGFuOiAxO1xcbiAgZ3JpZC1yb3ctZW5kOiAzO1xcbiAgLW1zLWdyaWQtcm93OiAyO1xcbiAgZ3JpZC1yb3ctc3RhcnQ6IDI7XFxuICAtbXMtZ3JpZC1jb2x1bW4tYWxpZ246IGNlbnRlcjtcXG4gIGp1c3RpZnktc2VsZjogY2VudGVyO1xcbn1cXG4udG94IC50b3gtcG9wIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnRveCAudG94LXBvcC0tcmVzaXppbmcge1xcbiAgdHJhbnNpdGlvbjogd2lkdGggMC4xcyBlYXNlO1xcbn1cXG4udG94IC50b3gtcG9wLS1yZXNpemluZyAudG94LXRvb2xiYXIsXFxuLnRveCAudG94LXBvcC0tcmVzaXppbmcgLnRveC10b29sYmFyX19ncm91cCB7XFxuICBmbGV4LXdyYXA6IG5vd3JhcDtcXG59XFxuLnRveCAudG94LXBvcC0tdHJhbnNpdGlvbiB7XFxuICB0cmFuc2l0aW9uOiAwLjE1cyBlYXNlO1xcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tO1xcbn1cXG4udG94IC50b3gtcG9wLS10cmFuc2l0aW9uOjpiZWZvcmUsXFxuLnRveCAudG94LXBvcC0tdHJhbnNpdGlvbjo6YWZ0ZXIge1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMTVzLCB2aXNpYmlsaXR5IDBzLCBvcGFjaXR5IDAuMDc1cyBlYXNlIDAuMDc1cztcXG59XFxuLnRveCAudG94LXBvcF9fZGlhbG9nIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjN2U3ZTdlO1xcbiAgYm9yZGVyLXJhZGl1czogMHB4O1xcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XFxuICBtaW4td2lkdGg6IDA7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4udG94IC50b3gtcG9wX19kaWFsb2cgPiAqOm5vdCgudG94LXRvb2xiYXIpIHtcXG4gIG1hcmdpbjogNHB4IDRweCA0cHggOHB4O1xcbn1cXG4udG94IC50b3gtcG9wX19kaWFsb2cgLnRveC10b29sYmFyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgbWFyZ2luLWJvdHRvbTogLTFweDtcXG59XFxuLnRveCAudG94LXBvcDo6YmVmb3JlLFxcbi50b3ggLnRveC1wb3A6OmFmdGVyIHtcXG4gIGJvcmRlci1zdHlsZTogc29saWQ7XFxuICBjb250ZW50OiAnJztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgaGVpZ2h0OiAwO1xcbiAgb3BhY2l0eTogMTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiAwO1xcbn1cXG4udG94IC50b3gtcG9wLnRveC1wb3AtLWluc2V0OjpiZWZvcmUsXFxuLnRveCAudG94LXBvcC50b3gtcG9wLS1pbnNldDo6YWZ0ZXIge1xcbiAgb3BhY2l0eTogMDtcXG4gIHRyYW5zaXRpb246IGFsbCAwcyAwLjE1cywgdmlzaWJpbGl0eSAwcywgb3BhY2l0eSAwLjA3NXMgZWFzZTtcXG59XFxuLnRveCAudG94LXBvcC50b3gtcG9wLS1ib3R0b206OmJlZm9yZSxcXG4udG94IC50b3gtcG9wLnRveC1wb3AtLWJvdHRvbTo6YWZ0ZXIge1xcbiAgbGVmdDogNTAlO1xcbiAgdG9wOiAxMDAlO1xcbn1cXG4udG94IC50b3gtcG9wLnRveC1wb3AtLWJvdHRvbTo6YWZ0ZXIge1xcbiAgYm9yZGVyLWNvbG9yOiAjZmFmYWZhIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXdpZHRoOiA4cHg7XFxuICBtYXJnaW4tbGVmdDogLThweDtcXG4gIG1hcmdpbi10b3A6IC0xcHg7XFxufVxcbi50b3ggLnRveC1wb3AudG94LXBvcC0tYm90dG9tOjpiZWZvcmUge1xcbiAgYm9yZGVyLWNvbG9yOiAjN2U3ZTdlIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXdpZHRoOiA5cHg7XFxuICBtYXJnaW4tbGVmdDogLTlweDtcXG59XFxuLnRveCAudG94LXBvcC50b3gtcG9wLS10b3A6OmJlZm9yZSxcXG4udG94IC50b3gtcG9wLnRveC1wb3AtLXRvcDo6YWZ0ZXIge1xcbiAgbGVmdDogNTAlO1xcbiAgdG9wOiAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMDAlKTtcXG59XFxuLnRveCAudG94LXBvcC50b3gtcG9wLS10b3A6OmFmdGVyIHtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgI2ZhZmFmYSB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci13aWR0aDogOHB4O1xcbiAgbWFyZ2luLWxlZnQ6IC04cHg7XFxuICBtYXJnaW4tdG9wOiAxcHg7XFxufVxcbi50b3ggLnRveC1wb3AudG94LXBvcC0tdG9wOjpiZWZvcmUge1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjN2U3ZTdlIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXdpZHRoOiA5cHg7XFxuICBtYXJnaW4tbGVmdDogLTlweDtcXG59XFxuLnRveCAudG94LXBvcC50b3gtcG9wLS1sZWZ0OjpiZWZvcmUsXFxuLnRveCAudG94LXBvcC50b3gtcG9wLS1sZWZ0OjphZnRlciB7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiBjYWxjKDUwJSAtIDFweCk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxufVxcbi50b3ggLnRveC1wb3AudG94LXBvcC0tbGVmdDo6YWZ0ZXIge1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCAjZmFmYWZhIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXdpZHRoOiA4cHg7XFxuICBtYXJnaW4tbGVmdDogLTE1cHg7XFxufVxcbi50b3ggLnRveC1wb3AudG94LXBvcC0tbGVmdDo6YmVmb3JlIHtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgIzdlN2U3ZSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci13aWR0aDogMTBweDtcXG4gIG1hcmdpbi1sZWZ0OiAtMTlweDtcXG59XFxuLnRveCAudG94LXBvcC50b3gtcG9wLS1yaWdodDo6YmVmb3JlLFxcbi50b3ggLnRveC1wb3AudG94LXBvcC0tcmlnaHQ6OmFmdGVyIHtcXG4gIGxlZnQ6IDEwMCU7XFxuICB0b3A6IGNhbGMoNTAlICsgMXB4KTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcXG59XFxuLnRveCAudG94LXBvcC50b3gtcG9wLS1yaWdodDo6YWZ0ZXIge1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjZmFmYWZhO1xcbiAgYm9yZGVyLXdpZHRoOiA4cHg7XFxuICBtYXJnaW4tbGVmdDogLTFweDtcXG59XFxuLnRveCAudG94LXBvcC50b3gtcG9wLS1yaWdodDo6YmVmb3JlIHtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzdlN2U3ZTtcXG4gIGJvcmRlci13aWR0aDogMTBweDtcXG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xcbn1cXG4udG94IC50b3gtcG9wLnRveC1wb3AtLWFsaWduLWxlZnQ6OmJlZm9yZSxcXG4udG94IC50b3gtcG9wLnRveC1wb3AtLWFsaWduLWxlZnQ6OmFmdGVyIHtcXG4gIGxlZnQ6IDIwcHg7XFxufVxcbi50b3ggLnRveC1wb3AudG94LXBvcC0tYWxpZ24tcmlnaHQ6OmJlZm9yZSxcXG4udG94IC50b3gtcG9wLnRveC1wb3AtLWFsaWduLXJpZ2h0OjphZnRlciB7XFxuICBsZWZ0OiBjYWxjKDEwMCUgLSAyMHB4KTtcXG59XFxuLnRveCAudG94LXNpZGViYXItd3JhcCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGZsZXgtZ3JvdzogMTtcXG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAwO1xcbiAgbWluLWhlaWdodDogMDtcXG59XFxuLnRveCAudG94LXNpZGViYXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG59XFxuLnRveCAudG94LXNpZGViYXJfX3NsaWRlciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLnRveCAudG94LXNpZGViYXJfX3BhbmUtY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcbi50b3ggLnRveC1zaWRlYmFyX19wYW5lIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcbi50b3ggLnRveC1zaWRlYmFyLS1zbGlkaW5nLWNsb3NlZCB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG4udG94IC50b3gtc2lkZWJhci0tc2xpZGluZy1vcGVuIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbi50b3ggLnRveC1zaWRlYmFyLS1zbGlkaW5nLWdyb3dpbmcsXFxuLnRveCAudG94LXNpZGViYXItLXNsaWRpbmctc2hyaW5raW5nIHtcXG4gIHRyYW5zaXRpb246IHdpZHRoIDAuNXMgZWFzZSwgb3BhY2l0eSAwLjVzIGVhc2U7XFxufVxcbi50b3ggLnRveC1zZWxlY3RvciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDA5OWZmO1xcbiAgYm9yZGVyLWNvbG9yOiAjNDA5OWZmO1xcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcXG4gIGJvcmRlci13aWR0aDogMXB4O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGhlaWdodDogMTBweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiAxMHB4O1xcbn1cXG4udG94LnRveC1wbGF0Zm9ybS10b3VjaCAudG94LXNlbGVjdG9yIHtcXG4gIGhlaWdodDogMTJweDtcXG4gIHdpZHRoOiAxMnB4O1xcbn1cXG4udG94IC50b3gtc2xpZGVyIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleDogMTtcXG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgaGVpZ2h0OiAyNHB4O1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi50b3ggLnRveC1zbGlkZXJfX3JhaWwge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjN2U3ZTdlO1xcbiAgYm9yZGVyLXJhZGl1czogMHB4O1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgbWluLXdpZHRoOiAxMjBweDtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4udG94IC50b3gtc2xpZGVyX19oYW5kbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzNlNDk5NDtcXG4gIGJvcmRlcjogMnB4IHNvbGlkICMyZjM3NzA7XFxuICBib3JkZXItcmFkaXVzOiAwcHg7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgaGVpZ2h0OiAyNHB4O1xcbiAgbGVmdDogNTAlO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtNTAlKTtcXG4gIHdpZHRoOiAxNHB4O1xcbn1cXG4udG94IC50b3gtc291cmNlLWNvZGUge1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxufVxcbi50b3ggLnRveC1zcGlubmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcbi50b3ggLnRveC1zcGlubmVyID4gZGl2IHtcXG4gIGFuaW1hdGlvbjogdGFtLWJvdW5jaW5nLWRvdHMgMS41cyBlYXNlLWluLW91dCAwcyBpbmZpbml0ZSBib3RoO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogO1xcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcXG4gIGhlaWdodDogOHB4O1xcbiAgd2lkdGg6IDhweDtcXG59XFxuLnRveCAudG94LXNwaW5uZXIgPiBkaXY6bnRoLWNoaWxkKDEpIHtcXG4gIGFuaW1hdGlvbi1kZWxheTogLTAuMzJzO1xcbn1cXG4udG94IC50b3gtc3Bpbm5lciA+IGRpdjpudGgtY2hpbGQoMikge1xcbiAgYW5pbWF0aW9uLWRlbGF5OiAtMC4xNnM7XFxufVxcbkBrZXlmcmFtZXMgdGFtLWJvdW5jaW5nLWRvdHMge1xcbiAgMCUsIDgwJSwgMTAwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxuICB9XFxuXFxuICA0MCUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgfVxcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtc3Bpbm5lciA+IGRpdjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICBtYXJnaW4tbGVmdDogNHB4O1xcbn1cXG4udG94W2Rpcj1ydGxdIC50b3gtc3Bpbm5lciA+IGRpdjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICBtYXJnaW4tcmlnaHQ6IDRweDtcXG59XFxuLnRveCAudG94LXN0YXR1c2JhciB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjN2U3ZTdlO1xcbiAgY29sb3I6IDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4OiAwIDAgYXV0bztcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XFxuICBoZWlnaHQ6IDIuNWVtO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBhZGRpbmc6IDAgOHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcXG59XFxuLnRveCAudG94LXN0YXR1c2Jhcl9fdGV4dC1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXg6IDEgMSBhdXRvO1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi50b3ggLnRveC1zdGF0dXNiYXJfX3JpZ2h0LWNvbnRhaW5lciB7XFxuICBoZWlnaHQ6IDE2cHg7XFxufVxcbi50b3ggLnRveC1zdGF0dXNiYXJfX3BhdGgge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXg6IDEgMSBhdXRvO1xcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG59XFxuLnRveCAudG94LXN0YXR1c2Jhcl9fcGF0aCA+ICoge1xcbiAgZGlzcGxheTogaW5saW5lO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG59XFxuLnRveCAudG94LXN0YXR1c2Jhcl9fd29yZGNvdW50IHtcXG4gIGZsZXg6IDAgMCBhdXRvO1xcbiAgbWFyZ2luLWxlZnQ6IDFjaDtcXG59XFxuLnRveCAudG94LXN0YXR1c2JhciBhLFxcbi50b3ggLnRveC1zdGF0dXNiYXJfX3BhdGgtaXRlbSxcXG4udG94IC50b3gtc3RhdHVzYmFyX193b3JkY291bnQge1xcbiAgY29sb3I6IDtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuLnRveCAudG94LXN0YXR1c2JhciBhOmhvdmVyOm5vdCg6ZGlzYWJsZWQpOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksXFxuLnRveCAudG94LXN0YXR1c2Jhcl9fcGF0aC1pdGVtOmhvdmVyOm5vdCg6ZGlzYWJsZWQpOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksXFxuLnRveCAudG94LXN0YXR1c2Jhcl9fd29yZGNvdW50OmhvdmVyOm5vdCg6ZGlzYWJsZWQpOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksXFxuLnRveCAudG94LXN0YXR1c2JhciBhOmZvY3VzOm5vdCg6ZGlzYWJsZWQpOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksXFxuLnRveCAudG94LXN0YXR1c2Jhcl9fcGF0aC1pdGVtOmZvY3VzOm5vdCg6ZGlzYWJsZWQpOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksXFxuLnRveCAudG94LXN0YXR1c2Jhcl9fd29yZGNvdW50OmZvY3VzOm5vdCg6ZGlzYWJsZWQpOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxufVxcbi50b3ggLnRveC1zdGF0dXNiYXJfX3Jlc2l6ZS1oYW5kbGUge1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xcbiAgYWxpZ24tc2VsZjogc3RyZXRjaDtcXG4gIGN1cnNvcjogbndzZS1yZXNpemU7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleDogMCAwIGF1dG87XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICBtYXJnaW4tcmlnaHQ6IC04cHg7XFxuICBwYWRkaW5nLWxlZnQ6IDFjaDtcXG59XFxuLnRveCAudG94LXN0YXR1c2Jhcl9fcmVzaXplLWhhbmRsZSBzdmcge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBmaWxsOiA7XFxufVxcbi50b3ggLnRveC1zdGF0dXNiYXJfX3Jlc2l6ZS1oYW5kbGU6Zm9jdXMgc3ZnIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkZWUwZTI7XFxuICBib3JkZXItcmFkaXVzOiAxcHg7XFxuICBib3gtc2hhZG93OiAwIDAgMCAycHggI2RlZTBlMjtcXG59XFxuLnRveDpub3QoW2Rpcj1ydGxdKSAudG94LXN0YXR1c2Jhcl9fcGF0aCA+ICoge1xcbiAgbWFyZ2luLXJpZ2h0OiA0cHg7XFxufVxcbi50b3g6bm90KFtkaXI9cnRsXSkgLnRveC1zdGF0dXNiYXJfX2JyYW5kaW5nIHtcXG4gIG1hcmdpbi1sZWZ0OiAxY2g7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC1zdGF0dXNiYXIge1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xcbn1cXG4udG94W2Rpcj1ydGxdIC50b3gtc3RhdHVzYmFyX19wYXRoID4gKiB7XFxuICBtYXJnaW4tbGVmdDogNHB4O1xcbn1cXG4udG94IC50b3gtdGhyb2JiZXIge1xcbiAgei1pbmRleDogMTI5OTtcXG59XFxuLnRveCAudG94LXRocm9iYmVyX19idXN5LXNwaW5uZXIge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjUwLCAyNTAsIDI1MCwgMC42KTtcXG4gIGJvdHRvbTogMDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGxlZnQ6IDA7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMDtcXG4gIHRvcDogMDtcXG59XFxuLnRveCAudG94LXRidG4ge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiAwO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiAjMDAwO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXg6IDAgMCBhdXRvO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG4gIGhlaWdodDogMzRweDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgbWFyZ2luOiAycHggMCAzcHggMDtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgcGFkZGluZzogMDtcXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xcbiAgd2lkdGg6IDM0cHg7XFxufVxcbi50b3ggLnRveC10YnRuIHN2ZyB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGZpbGw6ICMwMDA7XFxufVxcbi50b3ggLnRveC10YnRuLnRveC10YnRuLW1vcmUge1xcbiAgcGFkZGluZy1sZWZ0OiA1cHg7XFxuICBwYWRkaW5nLXJpZ2h0OiA1cHg7XFxuICB3aWR0aDogaW5oZXJpdDtcXG59XFxuLnRveCAudG94LXRidG46Zm9jdXMge1xcbiAgYmFja2dyb3VuZDogI2RlZTBlMjtcXG4gIGJvcmRlcjogMDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxufVxcbi50b3ggLnRveC10YnRuOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6ICNkZWUwZTI7XFxuICBib3JkZXI6IDA7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbi50b3ggLnRveC10YnRuOmhvdmVyIHN2ZyB7XFxuICBmaWxsOiAjMDAwO1xcbn1cXG4udG94IC50b3gtdGJ0bjphY3RpdmUge1xcbiAgYmFja2dyb3VuZDogI2RlZTBlMjtcXG4gIGJvcmRlcjogMDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogIzAwMDtcXG59XFxuLnRveCAudG94LXRidG46YWN0aXZlIHN2ZyB7XFxuICBmaWxsOiAjMDAwO1xcbn1cXG4udG94IC50b3gtdGJ0bi0tZGlzYWJsZWQsXFxuLnRveCAudG94LXRidG4tLWRpc2FibGVkOmhvdmVyLFxcbi50b3ggLnRveC10YnRuOmRpc2FibGVkLFxcbi50b3ggLnRveC10YnRuOmRpc2FibGVkOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiAwO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiByZ2JhKDM0LCA0NywgNjIsIDAuNSk7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbn1cXG4udG94IC50b3gtdGJ0bi0tZGlzYWJsZWQgc3ZnLFxcbi50b3ggLnRveC10YnRuLS1kaXNhYmxlZDpob3ZlciBzdmcsXFxuLnRveCAudG94LXRidG46ZGlzYWJsZWQgc3ZnLFxcbi50b3ggLnRveC10YnRuOmRpc2FibGVkOmhvdmVyIHN2ZyB7XFxuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIG5vLWRlc2NlbmRpbmctc3BlY2lmaWNpdHkgKi9cXG4gIGZpbGw6IHJnYmEoMzQsIDQ3LCA2MiwgMC41KTtcXG59XFxuLnRveCAudG94LXRidG4tLWVuYWJsZWQsXFxuLnRveCAudG94LXRidG4tLWVuYWJsZWQ6aG92ZXIge1xcbiAgYmFja2dyb3VuZDogI2RlZTBlMjtcXG4gIGJvcmRlcjogMDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogIzAwMDtcXG59XFxuLnRveCAudG94LXRidG4tLWVuYWJsZWQgPiAqLFxcbi50b3ggLnRveC10YnRuLS1lbmFibGVkOmhvdmVyID4gKiB7XFxuICB0cmFuc2Zvcm06IG5vbmU7XFxufVxcbi50b3ggLnRveC10YnRuLS1lbmFibGVkIHN2ZyxcXG4udG94IC50b3gtdGJ0bi0tZW5hYmxlZDpob3ZlciBzdmcge1xcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbGluZSBuby1kZXNjZW5kaW5nLXNwZWNpZmljaXR5ICovXFxuICBmaWxsOiAjMDAwO1xcbn1cXG4udG94IC50b3gtdGJ0bjpmb2N1czpub3QoLnRveC10YnRuLS1kaXNhYmxlZCkge1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbi50b3ggLnRveC10YnRuOmZvY3VzOm5vdCgudG94LXRidG4tLWRpc2FibGVkKSBzdmcge1xcbiAgZmlsbDogIzAwMDtcXG59XFxuLnRveCAudG94LXRidG46YWN0aXZlID4gKiB7XFxuICB0cmFuc2Zvcm06IG5vbmU7XFxufVxcbi50b3ggLnRveC10YnRuLS1tZCB7XFxuICBoZWlnaHQ6IDUxcHg7XFxuICB3aWR0aDogNTFweDtcXG59XFxuLnRveCAudG94LXRidG4tLWxnIHtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBoZWlnaHQ6IDY4cHg7XFxuICB3aWR0aDogNjhweDtcXG59XFxuLnRveCAudG94LXRidG4tLXJldHVybiB7XFxuICAtbXMtZ3JpZC1yb3ctYWxpZ246IHN0cmV0Y2g7XFxuICBhbGlnbi1zZWxmOiBzdHJldGNoO1xcbiAgaGVpZ2h0OiB1bnNldDtcXG4gIHdpZHRoOiAxNnB4O1xcbn1cXG4udG94IC50b3gtdGJ0bi0tbGFiZWxlZCB7XFxuICBwYWRkaW5nOiAwIDRweDtcXG4gIHdpZHRoOiB1bnNldDtcXG59XFxuLnRveCAudG94LXRidG5fX3ZsYWJlbCB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGZvbnQtc2l6ZTogMTBweDtcXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XFxuICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07XFxuICBtYXJnaW4tYm90dG9tOiA0cHg7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG4udG94IC50b3gtdGJ0bi0tc2VsZWN0IHtcXG4gIG1hcmdpbjogMnB4IDAgM3B4IDA7XFxuICBwYWRkaW5nOiAwIDRweDtcXG4gIHdpZHRoOiBhdXRvO1xcbn1cXG4udG94IC50b3gtdGJ0bl9fc2VsZWN0LWxhYmVsIHtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XFxuICBtYXJnaW46IDAgNHB4O1xcbn1cXG4udG94IC50b3gtdGJ0bl9fc2VsZWN0LWNoZXZyb24ge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIHdpZHRoOiAxNnB4O1xcbn1cXG4udG94IC50b3gtdGJ0bl9fc2VsZWN0LWNoZXZyb24gc3ZnIHtcXG4gIGZpbGw6IHJnYmEoMzQsIDQ3LCA2MiwgMC41KTtcXG59XFxuLnRveCAudG94LXRidG4tLWJlc3Bva2UgLnRveC10YnRuX19zZWxlY3QtbGFiZWwge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIHdpZHRoOiA3ZW07XFxufVxcbi50b3ggLnRveC1zcGxpdC1idXR0b24ge1xcbiAgYm9yZGVyOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBtYXJnaW46IDJweCAwIDNweCAwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLnRveCAudG94LXNwbGl0LWJ1dHRvbjpob3ZlciB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggI2RlZTBlMiBpbnNldDtcXG59XFxuLnRveCAudG94LXNwbGl0LWJ1dHRvbjpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kOiAjZGVlMGUyO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4udG94IC50b3gtc3BsaXQtYnV0dG9uID4gKiB7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbn1cXG4udG94IC50b3gtc3BsaXQtYnV0dG9uX19jaGV2cm9uIHtcXG4gIHdpZHRoOiAxNnB4O1xcbn1cXG4udG94IC50b3gtc3BsaXQtYnV0dG9uX19jaGV2cm9uIHN2ZyB7XFxuICBmaWxsOiByZ2JhKDM0LCA0NywgNjIsIDAuNSk7XFxufVxcbi50b3ggLnRveC1zcGxpdC1idXR0b24gLnRveC10YnRuIHtcXG4gIG1hcmdpbjogMDtcXG59XFxuLnRveC50b3gtcGxhdGZvcm0tdG91Y2ggLnRveC1zcGxpdC1idXR0b24gLnRveC10YnRuOmZpcnN0LWNoaWxkIHtcXG4gIHdpZHRoOiAzMHB4O1xcbn1cXG4udG94LnRveC1wbGF0Zm9ybS10b3VjaCAudG94LXNwbGl0LWJ1dHRvbl9fY2hldnJvbiB7XFxuICB3aWR0aDogMjBweDtcXG59XFxuLnRveCAudG94LXNwbGl0LWJ1dHRvbi50b3gtdGJ0bi0tZGlzYWJsZWQ6aG92ZXIsXFxuLnRveCAudG94LXNwbGl0LWJ1dHRvbi50b3gtdGJ0bi0tZGlzYWJsZWQ6Zm9jdXMsXFxuLnRveCAudG94LXNwbGl0LWJ1dHRvbi50b3gtdGJ0bi0tZGlzYWJsZWQgLnRveC10YnRuOmhvdmVyLFxcbi50b3ggLnRveC1zcGxpdC1idXR0b24udG94LXRidG4tLWRpc2FibGVkIC50b3gtdGJ0bjpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogcmdiYSgzNCwgNDcsIDYyLCAwLjUpO1xcbn1cXG4udG94IC50b3gtdG9vbGJhci1vdmVybG9yZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xcbn1cXG4udG94IC50b3gtdG9vbGJhcixcXG4udG94IC50b3gtdG9vbGJhcl9fcHJpbWFyeSxcXG4udG94IC50b3gtdG9vbGJhcl9fb3ZlcmZsb3cge1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXg6IDAgMCBhdXRvO1xcbiAgZmxleC1zaHJpbms6IDA7XFxuICBmbGV4LXdyYXA6IHdyYXA7XFxuICBwYWRkaW5nOiAwIDA7XFxufVxcbi50b3ggLnRveC10b29sYmFyX19vdmVyZmxvdy50b3gtdG9vbGJhcl9fb3ZlcmZsb3ctLWNsb3NlZCB7XFxuICBoZWlnaHQ6IDA7XFxuICBvcGFjaXR5OiAwO1xcbiAgcGFkZGluZy1ib3R0b206IDA7XFxuICBwYWRkaW5nLXRvcDogMDtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuLnRveCAudG94LXRvb2xiYXJfX292ZXJmbG93LS1ncm93aW5nIHtcXG4gIHRyYW5zaXRpb246IGhlaWdodCAwLjNzIGVhc2UsIG9wYWNpdHkgMC4ycyBsaW5lYXIgMC4xcztcXG59XFxuLnRveCAudG94LXRvb2xiYXJfX292ZXJmbG93LS1zaHJpbmtpbmcge1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2UsIGhlaWdodCAwLjJzIGxpbmVhciAwLjFzLCB2aXNpYmlsaXR5IDBzIGxpbmVhciAwLjNzO1xcbn1cXG4udG94IC50b3gtbWVudWJhciArIC50b3gtdG9vbGJhcixcXG4udG94IC50b3gtbWVudWJhciArIC50b3gtdG9vbGJhci1vdmVybG9yZCAudG94LXRvb2xiYXJfX3ByaW1hcnkge1xcbiAgLyogYm9yZGVyLXRvcDogMXB4IHNvbGlkICM3ZTdlN2U7ICovXFxuICBtYXJnaW4tdG9wOiAtMXB4O1xcbn1cXG4udG94IC50b3gtdG9vbGJhci0tc2Nyb2xsaW5nIHtcXG4gIGZsZXgtd3JhcDogbm93cmFwO1xcbiAgb3ZlcmZsb3cteDogYXV0bztcXG59XFxuLnRveCAudG94LXBvcCAudG94LXRvb2xiYXIge1xcbiAgYm9yZGVyLXdpZHRoOiAwO1xcbn1cXG4udG94IC50b3gtdG9vbGJhci0tbm8tZGl2aWRlciB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xcbn1cXG4udG94LXRpbnltY2U6bm90KC50b3gtdGlueW1jZS1pbmxpbmUpIC50b3gtZWRpdG9yLWhlYWRlcjpub3QoOmZpcnN0LWNoaWxkKSAudG94LXRvb2xiYXI6Zmlyc3QtY2hpbGQsXFxuLnRveC10aW55bWNlOm5vdCgudG94LXRpbnltY2UtaW5saW5lKSAudG94LWVkaXRvci1oZWFkZXI6bm90KDpmaXJzdC1jaGlsZCkgLnRveC10b29sYmFyLW92ZXJsb3JkOmZpcnN0LWNoaWxkIC50b3gtdG9vbGJhcl9fcHJpbWFyeSB7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgIzdlN2U3ZTtcXG59XFxuLnRveC50b3gtdGlueW1jZS1hdXggLnRveC10b29sYmFyX19vdmVyZmxvdyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xcbiAgYm9yZGVyOiAxcHggc29saWQgIzdlN2U3ZTtcXG4gIGJvcmRlci1yYWRpdXM6IDBweDtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xcbn1cXG4udG94IC50b3gtdG9vbGJhcl9fZ3JvdXAge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LXdyYXA6IHdyYXA7XFxuICBtYXJnaW46IDAgMDtcXG4gIHBhZGRpbmc6IDAgNHB4IDAgNHB4O1xcbn1cXG4udG94IC50b3gtdG9vbGJhcl9fZ3JvdXAtLXB1bGwtcmlnaHQge1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxufVxcbi50b3ggLnRveC10b29sYmFyLS1zY3JvbGxpbmcgLnRveC10b29sYmFyX19ncm91cCB7XFxuICBmbGV4LXNocmluazogMDtcXG4gIGZsZXgtd3JhcDogbm93cmFwO1xcbn1cXG4udG94Om5vdChbZGlyPXJ0bF0pIC50b3gtdG9vbGJhcl9fZ3JvdXA6bm90KDpsYXN0LW9mLXR5cGUpIHtcXG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZGQ7XFxufVxcbi50b3hbZGlyPXJ0bF0gLnRveC10b29sYmFyX19ncm91cDpub3QoOmxhc3Qtb2YtdHlwZSkge1xcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZGRkO1xcbn1cXG4udG94IC50b3gtdG9vbHRpcCB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBwYWRkaW5nOiA4cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi50b3ggLnRveC10b29sdGlwX19ib2R5IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDA7XFxuICBib3JkZXItcmFkaXVzOiAwcHg7XFxuICBib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgzNCwgNDcsIDYyLCAwLjMpO1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSk7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbiAgcGFkZGluZzogNHB4IDhweDtcXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xcbn1cXG4udG94IC50b3gtdG9vbHRpcF9fYXJyb3cge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbn1cXG4udG94IC50b3gtdG9vbHRpcC0tZG93biAudG94LXRvb2x0aXBfX2Fycm93IHtcXG4gIGJvcmRlci1sZWZ0OiA4cHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmlnaHQ6IDhweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci10b3A6IDhweCBzb2xpZCAjMDAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogNTAlO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xcbn1cXG4udG94IC50b3gtdG9vbHRpcC0tdXAgLnRveC10b29sdGlwX19hcnJvdyB7XFxuICBib3JkZXItYm90dG9tOiA4cHggc29saWQgIzAwMDtcXG4gIGJvcmRlci1sZWZ0OiA4cHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmlnaHQ6IDhweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGxlZnQ6IDUwJTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcXG59XFxuLnRveCAudG94LXRvb2x0aXAtLXJpZ2h0IC50b3gtdG9vbHRpcF9fYXJyb3cge1xcbiAgYm9yZGVyLWJvdHRvbTogOHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWxlZnQ6IDhweCBzb2xpZCAjMDAwO1xcbiAgYm9yZGVyLXRvcDogOHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDA7XFxuICB0b3A6IDUwJTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcXG59XFxuLnRveCAudG94LXRvb2x0aXAtLWxlZnQgLnRveC10b29sdGlwX19hcnJvdyB7XFxuICBib3JkZXItYm90dG9tOiA4cHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmlnaHQ6IDhweCBzb2xpZCAjMDAwO1xcbiAgYm9yZGVyLXRvcDogOHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgbGVmdDogMDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogNTAlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xcbn1cXG4udG94IC50b3gtd2VsbCB7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjN2U3ZTdlO1xcbiAgYm9yZGVyLXJhZGl1czogMHB4O1xcbiAgcGFkZGluZzogOHB4O1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcbi50b3ggLnRveC13ZWxsID4gKjpmaXJzdC1jaGlsZCB7XFxuICBtYXJnaW4tdG9wOiAwO1xcbn1cXG4udG94IC50b3gtd2VsbCA+ICo6bGFzdC1jaGlsZCB7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG4udG94IC50b3gtd2VsbCA+ICo6b25seS1jaGlsZCB7XFxuICBtYXJnaW46IDA7XFxufVxcbi50b3ggLnRveC1jdXN0b20tZWRpdG9yIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICM3ZTdlN2U7XFxuICBib3JkZXItcmFkaXVzOiAwcHg7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleDogMTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLyogc3R5bGVsaW50LWRpc2FibGUgKi9cXG4udG94IHtcXG4gIC8qIHN0eWxlbGludC1lbmFibGUgKi9cXG59XFxuLnRveCAudG94LWRpYWxvZy1sb2FkaW5nOjpiZWZvcmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMTAwJTtcXG4gIHotaW5kZXg6IDEwMDA7XFxufVxcbi50b3ggLnRveC10YWIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4udG94IC50b3gtZGlhbG9nX19jb250ZW50LWpzIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4OiAxO1xcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxufVxcbi50b3ggLnRveC1kaWFsb2dfX2JvZHktY29udGVudCAudG94LWNvbGxlY3Rpb24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXg6IDE7XFxuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogYXV0bztcXG59XFxuLnRveCAudG94LWltYWdlLXRvb2xzLWVkaXQtcGFuZWwge1xcbiAgaGVpZ2h0OiA2MHB4O1xcbn1cXG4udG94IC50b3gtaW1hZ2UtdG9vbHNfX3NpZGViYXIge1xcbiAgaGVpZ2h0OiA2MHB4O1xcbn1cXG4udG94LXByb21vdGlvbiB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cIjsgKHJlcXVpcmUoXCJicm93c2VyaWZ5LWNzc1wiKS5jcmVhdGVTdHlsZShjc3MsIHsgXCJocmVmXCI6IFwic2tpbnMvdWkvcHVsc2FyL3NraW4uY3NzXCIgfSwgeyBcImluc2VydEF0XCI6IFwiYm90dG9tXCIgfSkpOyBtb2R1bGUuZXhwb3J0cyA9IGNzczsiLCIndXNlIHN0cmljdCc7XG5cbmNsYXNzIFB1bHNhclRpbnltY2VDb21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IgKCRodG1sKSB7XG4gICAgICAgIHRoaXMuJGh0bWwgPSAkaHRtbDtcblxuICAgICAgICBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyksXG4gICAgICAgICAgICAgIHRpbnltY2UgPSByZXF1aXJlKCd0aW55bWNlL3RpbnltY2UnKTtcblxuICAgICAgICAvKiBEZWZhdWx0IGljb25zIGFyZSByZXF1aXJlZC4gQWZ0ZXIgdGhhdCwgaW1wb3J0IGN1c3RvbSBpY29ucyBpZiBhcHBsaWNhYmxlICovXG4gICAgICAgIHJlcXVpcmUoJ3RpbnltY2UvaWNvbnMvZGVmYXVsdCcpO1xuXG4gICAgICAgIC8qIFJlcXVpcmVkIFRpbnlNQ0UgY29tcG9uZW50cyAqL1xuICAgICAgICByZXF1aXJlKCd0aW55bWNlL3RoZW1lcy9zaWx2ZXInKTtcbiAgICAgICAgcmVxdWlyZSgndGlueW1jZS9tb2RlbHMvZG9tJyk7XG5cbiAgICAgICAgLyogSW1wb3J0IGEgc2tpbiAoY2FuIGJlIGEgY3VzdG9tIHNraW4gaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCkgKi9cbiAgICAgICAgcmVxdWlyZSgnLi4vc2tpbnMvdWkvcHVsc2FyL3NraW4uY3NzJyk7XG5cbiAgICAgICAgLyogSW1wb3J0IHBsdWdpbnMgLSBpbmNsdWRlIHRoZSByZWxldmFudCBwbHVnaW4gaW4gdGhlICdwbHVnaW5zJyBvcHRpb24uICovXG4gICAgICAgIHJlcXVpcmUoJ3RpbnltY2UvcGx1Z2lucy9hZHZsaXN0Jyk7XG4gICAgICAgIHJlcXVpcmUoJ3RpbnltY2UvcGx1Z2lucy9jb2RlJyk7XG4gICAgICAgIHJlcXVpcmUoJ3RpbnltY2UvcGx1Z2lucy9lbW90aWNvbnMnKTtcbiAgICAgICAgcmVxdWlyZSgndGlueW1jZS9wbHVnaW5zL2Vtb3RpY29ucy9qcy9lbW9qaXMnKTtcbiAgICAgICAgcmVxdWlyZSgndGlueW1jZS9wbHVnaW5zL2xpbmsnKTtcbiAgICAgICAgcmVxdWlyZSgndGlueW1jZS9wbHVnaW5zL2xpc3RzJyk7XG4gICAgICAgIHJlcXVpcmUoJ3RpbnltY2UvcGx1Z2lucy90YWJsZScpO1xuXG4gICAgICAgIC8qIGNvbnRlbnQgVUkgQ1NTIGlzIHJlcXVpcmVkICovXG4gICAgICAgIHRoaXMuY29udGVudFVpU2tpbkNzcyA9IGZzLnJlYWRGaWxlU3luYygnbm9kZV9tb2R1bGVzL3RpbnltY2Uvc2tpbnMvdWkvb3hpZGUvY29udGVudC5jc3MnLCB7IGVuY29kaW5nOiAnVVRGLTgnIH0pO1xuXG4gICAgICAgIC8qIFRoZSBkZWZhdWx0IGNvbnRlbnQgQ1NTIGNhbiBiZSBjaGFuZ2VkIG9yIHJlcGxhY2VkIHdpdGggYXBwcm9wcmlhdGUgQ1NTIGZvciB0aGUgZWRpdG9yIGNvbnRlbnQuICovXG4gICAgICAgIHRoaXMuY29udGVudENzcyA9IGZzLnJlYWRGaWxlU3luYygnbm9kZV9tb2R1bGVzL3RpbnltY2Uvc2tpbnMvY29udGVudC9kZWZhdWx0L2NvbnRlbnQuY3NzJywgeyBlbmNvZGluZzogJ1VURi04JyB9KTtcbiAgICB9XG5cbiAgICBpbml0ICgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLiRodG1sID09PSAndW5kZWZpbmVkJyB8fCAhdGhpcy4kaHRtbC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignJGh0bWwgbXVzdCBiZSBwYXNzZWQgdG8gUHVsc2FyVGlueW1jZUNvbXBvbmVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogSW5pdGlhbGl6ZSBUaW55TUNFICovXG4gICAgICAgIHRpbnltY2UuaW5pdCh7XG4gICAgICAgICAgICBzZWxlY3RvcjogJ3RleHRhcmVhLmpzLXRpbnltY2UnLFxuICAgICAgICAgICAgLyogQWxsIHBsdWdpbnMgbmVlZCB0byBiZSBpbXBvcnRlZCBhbmQgYWRkZWQgdG8gdGhlIHBsdWdpbnMgb3B0aW9uLiAqL1xuICAgICAgICAgICAgcGx1Z2luczogJ2Fkdmxpc3QgY29kZSBlbW90aWNvbnMgbGluayBsaXN0cyB0YWJsZScsXG4gICAgICAgICAgICB0b29sYmFyOiAnYm9sZCBpdGFsaWMgfCBidWxsaXN0IG51bWxpc3QgfCBsaW5rIGVtb3RpY29ucycsXG4gICAgICAgICAgICBza2luOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbnRlbnRfY3NzOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbnRlbnRfc3R5bGU6IHRoaXMuY29udGVudFVpU2tpbkNzcy50b1N0cmluZygpICsgJ1xcbicgKyB0aGlzLmNvbnRlbnRDc3MudG9TdHJpbmcoKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gUHVsc2FyVGlueW1jZUNvbXBvbmVudDsiLCJ3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSByZXF1aXJlKCdqcXVlcnknKTtcblxudmFyIFB1bHNhclRpbnltY2VDb21wb25lbnQgPSByZXF1aXJlKCcuL1B1bHNhclRpbnltY2VDb21wb25lbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgUHVsc2FyVGlueW1jZUNvbXBvbmVudFxufTsiXX0= diff --git a/index.php b/index.php index 96e8f6b..351ef7e 100644 --- a/index.php +++ b/index.php @@ -11,6 +11,7 @@ $loader = new Twig_Loader_Filesystem($templateDir); $loader->addPath($baseDir . '/', 'src'); +$loader->addPath($baseDir . '/vendor/jadu/pulsar/views/', 'pulsar'); $twig = new Twig_Environment($loader, array( diff --git a/skins/ui/pulsar/skin.css b/skins/ui/pulsar/skin.css index 68c5738..10decc3 100644 --- a/skins/ui/pulsar/skin.css +++ b/skins/ui/pulsar/skin.css @@ -9,6 +9,7 @@ box-sizing: content-box; color: #000; cursor: auto; + font-family: "proxima_novalight", "Helvetica Neue", "Helvetica", "Arial", sans-serif; font-size: 16px; font-style: normal; font-weight: normal; @@ -25,7 +26,6 @@ color: inherit; cursor: inherit; direction: inherit; - font-size: inherit; font-style: inherit; font-weight: inherit; @@ -243,9 +243,7 @@ button::-moz-focus-inner { color: #fff; cursor: pointer; display: inline-block; - font-style: normal; - font-weight: bold; letter-spacing: normal; line-height: 24px; margin: 0; @@ -264,13 +262,6 @@ button::-moz-focus-inner { color: rgba(255, 255, 255, 0.5); cursor: not-allowed; } -.tox .tox-button:focus:not(:disabled) { - background-color: #364082; - background-image: none; - border-color: #364082; - box-shadow: none; - color: #fff; -} .tox .tox-button:hover:not(:disabled) { background-color: #364082; background-image: none; @@ -278,26 +269,21 @@ button::-moz-focus-inner { box-shadow: none; color: #fff; } -.tox .tox-button:active:not(:disabled) { - background-color: #2f3770; - background-image: none; - border-color: #2f3770; - box-shadow: none; - color: #fff; +.tox .tox-button:active:not(:disabled), +.tox .tox-button:focus:not(:disabled) { + background-color: #fd0 !important; + box-shadow: 0 0 0 2px #1e1e1e !important; + color: #1e1e1e !important; } .tox .tox-button--secondary { - background-color: #ebebeb; + background-color: #fff; background-image: none; background-position: 0 0; background-repeat: repeat; - border-color: #ebebeb; - border-radius: 0px; - border-style: solid; - border-width: 1px; + border: 0; box-shadow: none; color: #000; font-style: normal; - font-weight: bold; letter-spacing: normal; outline: none; padding: 4px 16px; @@ -306,29 +292,11 @@ button::-moz-focus-inner { } .tox .tox-button--secondary[disabled] { background-color: #ebebeb; - background-image: none; - border-color: #ebebeb; - box-shadow: none; color: rgba(34, 47, 62, 0.5); } -.tox .tox-button--secondary:focus:not(:disabled) { - background-color: #dedede; - background-image: none; - border-color: #dedede; - box-shadow: none; - color: #000; -} .tox .tox-button--secondary:hover:not(:disabled) { - background-color: #dedede; - background-image: none; - border-color: #dedede; - box-shadow: none; - color: #000; -} -.tox .tox-button--secondary:active:not(:disabled) { - background-color: #d1d1d1; + background-color: #fff; background-image: none; - border-color: #d1d1d1; box-shadow: none; color: #000; } @@ -1130,7 +1098,7 @@ button::-moz-focus-inner { background-color: #fafafa; } .tox .tox-dialog { - background-color: #fafafa; + background-color: #fff; border-color: #7e7e7e; border-radius: 0px; box-shadow: 0 0 0 12px rgba(62, 73, 148, 0.3); @@ -1155,11 +1123,11 @@ button::-moz-focus-inner { } .tox .tox-dialog__header { align-items: center; - background-color: #fafafa; - border-bottom: none; + border-bottom: 1px solid #e5e5e5; color: #000; display: flex; - font-size: 16px; + font-family: "code_pro_bold", "Helvetica Neue", "Helvetica", "Arial", sans-serif; + font-size: 24px; justify-content: space-between; padding: 15px; position: relative; @@ -1343,8 +1311,7 @@ button::-moz-focus-inner { } .tox .tox-dialog__footer { align-items: center; - background-color: #fafafa; - border-top: 1px solid #7e7e7e; + border-top: 1px solid #e5e5e5; display: flex; justify-content: space-between; padding: 20px; @@ -1506,6 +1473,7 @@ body.tox-dialog__disable-scroll { overflow: hidden; } .tox .tox-editor-header { + border-bottom: 1px solid #7e7e7e; z-index: 1; } .tox:not(.tox-tinymce-inline) .tox-editor-header { @@ -1652,7 +1620,7 @@ body.tox-dialog__disable-scroll { display: block; font-style: normal; font-weight: normal; - line-height: 1.3; + line-height: 1.6; padding: 0 8px 0 0; text-transform: none; white-space: nowrap; @@ -2069,9 +2037,8 @@ body.tox-dialog__disable-scroll { } .tox .tox-menu { background-color: #fafafa; - border: 1px solid #7e7e7e; border-radius: 0px; - box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); + box-shadow: 0 0 0 6px rgba(62, 73, 148, 0.3); display: inline-block; overflow: hidden; vertical-align: top; @@ -2098,7 +2065,7 @@ body.tox-dialog__disable-scroll { margin: 0; } .tox .tox-menubar { - background: url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%237e7e7e'/%3E%3C/svg%3E") left 0 top 0 #fafafa; + /* background: url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%237e7e7e'/%3E%3C/svg%3E") left 0 top 0 #fafafa; */ background-color: #fafafa; display: flex; flex: 0 0 auto; @@ -2114,7 +2081,6 @@ body.tox-dialog__disable-scroll { align-items: center; background: transparent; border: 0; - border-radius: 3px; box-shadow: none; color: #000; display: flex; @@ -2577,6 +2543,9 @@ body.tox-dialog__disable-scroll { justify-content: flex-end; overflow: hidden; } +.tox .tox-statusbar__right-container { + height: 16px; +} .tox .tox-statusbar__path { display: flex; flex: 1 1 auto; @@ -2658,7 +2627,6 @@ body.tox-dialog__disable-scroll { align-items: center; background: transparent; border: 0; - border-radius: 3px; box-shadow: none; color: #000; display: flex; @@ -2848,7 +2816,7 @@ body.tox-dialog__disable-scroll { .tox .tox-toolbar, .tox .tox-toolbar__primary, .tox .tox-toolbar__overflow { - background: url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%237e7e7e'/%3E%3C/svg%3E") left 0 top 0 #fafafa; + border-top: 1px solid #ddd; background-color: #fafafa; display: flex; flex: 0 0 auto; @@ -2871,7 +2839,7 @@ body.tox-dialog__disable-scroll { } .tox .tox-menubar + .tox-toolbar, .tox .tox-menubar + .tox-toolbar-overlord .tox-toolbar__primary { - border-top: 1px solid #7e7e7e; + /* border-top: 1px solid #7e7e7e; */ margin-top: -1px; } .tox .tox-toolbar--scrolling { @@ -2909,10 +2877,10 @@ body.tox-dialog__disable-scroll { flex-wrap: nowrap; } .tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type) { - border-right: 1px solid #7e7e7e; + border-right: 1px solid #ddd; } .tox[dir=rtl] .tox-toolbar__group:not(:last-of-type) { - border-left: 1px solid #7e7e7e; + border-left: 1px solid #ddd; } .tox .tox-tooltip { display: inline-block;